From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Campbell Subject: Re: [PATCH XEN v8 02/29] tools: Refactor /dev/xen/evtchn wrappers into libxenevtchn. Date: Fri, 22 Jan 2016 11:48:09 +0000 Message-ID: <1453463289.4320.66.camel@citrix.com> References: <1452864168.32341.97.camel@citrix.com> <1452864188-2417-1-git-send-email-ian.campbell@citrix.com> <1452864188-2417-3-git-send-email-ian.campbell@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1452864188-2417-3-git-send-email-ian.campbell@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: ian.jackson@eu.citrix.com, wei.liu2@citrix.com, xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org T24gRnJpLCAyMDE2LTAxLTE1IGF0IDEzOjIyICswMDAwLCBJYW4gQ2FtcGJlbGwgd3JvdGU6CgpU aGlzIGlzIHRoZSBvbmx5IHBhdGNoIHdoaWNoIGNoYW5nZWQgbWVhbmluZ2Z1bGx5IGluIHY5LCBz byBJJ20ganVzdApwb3N0aW5nIGl0IHRoYXQgb25lIGJlbG93IEZUUiwgaW50cmEtbG9nIGlzOgoK djk6IFJlZmFjdG9yIG92ZXIgInhlbnN0b3JlOiBtb3ZlIGluaXQteGVuc3RvcmUtZG9tYWluIHRv CsKgwqDCoMKgdG9vbHMvaGVscGVycyIgdGhpcyBoaWdobGlnaHRlZCB0aGF0IGluaXQteGVuc3Rv cmUtZG9tYWluIGhhcyBubwrCoMKgwqDCoG5lZWQgZm9yIExETElCU194ZW5ldnRjaG4gYW5kIG5l dmVyIGRpZCwgc28gdGhhdCBodW5rIGlzIHNpbXBseQrCoMKgwqDCoGRyb3BwZWQuCgpPbmx5IG90 aGVyIGludGVyZXN0aW5nIHRoaW5nIGluIHY5IHdvdWxkIGhhdmUgYmVlbiAjMDUgInRvb2xzOiBS ZWZhY3RvcgovZGV2L3hlbi9nbnR7ZGV2LHNocn0gd3JhcHBlcnMgaW50byBsaWJ4ZW5nbnR0YWIu IiB3aGljaCBuZWVkZWQgc29tZQpjb25mbGljdCByZXNvbHV0aW9uIGR1ZSB0byAieGVuc3RvcmU6 IG1vdmUgaW5pdC14ZW5zdG9yZS1kb21haW4gdG8KdG9vbHMvaGVscGVycyIgYnV0IHRoYXQgd2Fz IGFsbC4KCklhbi4KCjg8LS0tLS0tLQoKRnJvbSBmNjMzMTJjOGQ5MmM3MjhmZjUwZWUzZTU3Nzdj MmVmN2U1OWFhZjNmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBJYW4gQ2FtcGJlbGwg PGlhbi5jYW1wYmVsbEBjaXRyaXguY29tPgpEYXRlOiBNb24sIDEgSnVuIDIwMTUgMTY6MjA6MDkg KzAxMDAKU3ViamVjdDogW1BBVENIXSB0b29sczogUmVmYWN0b3IgL2Rldi94ZW4vZXZ0Y2huIHdy YXBwZXJzIGludG8gbGlieGVuZXZ0Y2huLgpNSU1FLVZlcnNpb246IDEuMApDb250ZW50LVR5cGU6 IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJp dAoKbGlieGVuZXZ0Y2huIHdpbGwgcHJvdmlkZSBhIHN0YWJsZSBBUEkgYW5kIEFCSSBmb3IgYWNj ZXNzaW5nIHRoZQpldnRjaG4gZGV2aWNlLgoKVGhlIGZ1bmN0aW9ucyBhcmUgbW92ZWQgaW50byB0 aGUgeGVuZXZ0Y2huIG5hbWVzcGFjZSB0byBtYWtlIGEgY2xlYW4KYnJlYWsgZnJvbSBsaWJ4YyBh bmQgYXZvaWQgYW1iaWd1aXR5IHJlZ2FyZGluZyB3aGljaCBpbnRlcmZhY2VzIGFyZQpzdGFibGUu CgpBbGwgaW4tdHJlZSB1c2VycyBhcmUgdXBkYXRlZCB0byB1c2UgdGhlIG5ldyBuYW1lcy4KClVw b24gcmVxdWVzdCAodmlhICNkZWZpbmUgWENfV0FOVF9DT01QQVRfRVZUQ0hOX0FQSSkgbGlieGVu Y3RybCB3aWxsCnByb3ZpZGUgYSBjb21wYXQgQVBJIGZvciB0aGUgb2xkIG5hbWVzLiBUaGlzIGlz IHVzZWQgYnkgcWVtdS14ZW4gZm9yCnRoZSB0aW1lIGJlaW5nLiBxZW11LXhlbi10cmFkaXRpb25h bCBpcyB1cGRhdGVkIGluIGxvY2tzdGVwLgoKVGhpcyBsZWF2ZXMgYSBmZXcgZXZlbnQgY2hhbm5l bCByZWxhdGVkIGZ1bmN0aW9ucyB3aGljaCBnbyB2aWEgcHJpdmNtZAooRVZUQ0hOT1ApIHJhdGhl ciB0aGFuIGlvY3RscyBvbiB0aGUgL2Rldi94ZW4vZXZ0Y2huIGRldmljZSBpbgpsaWJ4ZW5jdHJs LiBTcGVjaWZpY2FsbHk6CgrCoC0geGNfZXZ0Y2huX2FsbG9jX3VuYm91bmQKwqAtIHhjX2V2dGNo bl9yZXNldArCoC0geGNfZXZ0Y2huX3N0YXR1cwoKTm90ZSB0aGF0IHhjX2V2dGNobl9hbGxvY191 bmJvdW5kJ3MgZnVuY3Rpb25hbGl0eSBpcyBhbHNvIHByb3ZpZGVkIGJ5CnhlbmV2dGNobl9iaW5k X3VuYm91bmRfcG9ydCgpIChuw6llIHhjX2V2dGNobl9iaW5kX3VuYm91bmRfcG9ydCkgYW5kIGlz CnByb2JhYmx5IHJlZHVuZGFudC4KClRoZXNlIGZ1bmN0aW9ucyBkbyBub3QgYXBwZWFyIHRvIGJl IG5lZWRlZCBieSBxZW11LWRtLCBxZW11LXB2Cihwcm92aXNpb24gb2YgZGV2aWNlIG1vZGVsIHRv IEhWTSBndWVzdHMgYW5kIFBWIGJhY2tlbmRzIHJlc3BlY3RpdmVseSkKb3IgYnkgbGlidmNoYW4g c3VnZ2VzdGluZyB0aGV5IGFyZSBub3QgbmVlZGVkIGJ5IG5vbi10b29sc3RhY2sgdXNlcyBvZgpl dmVudCBjaGFubmVscy4gUUVNVSBkb2VzIHVzZSB0aGVzZSBpbiBody94ZW5wdi94ZW5fZG9tYWlu YnVpbGQuYyBidXQKdGhhdCBpcyBhICJ0b29sc3RhY2sgdXNlIi4KClRoZSBuZXcgbGlicmFyeSB1 c2VzIGEgdmVyc2lvbiBzY3JpcHQgdG8gZW5zdXJlIHRoYXQgb25seSBleHBlY3RlZApzeW1ib2xz IGFyZSBleHBvcnRlZCBhbmQgdG8gdmVyc2lvbiB0aGVtIHN1Y2ggdGhhdCBBQkkgZ3VhcmFudGVl cyBjYW4KYmUga2VwdCBpbiB0aGUgZnV0dXJlLgoKU2lnbmVkLW9mZi1ieTogSWFuIENhbXBiZWxs IDxpYW4uY2FtcGJlbGxAY2l0cml4LmNvbT4KQWNrZWQtYnk6IFdlaSBMaXUgPHdlaS5saXUyQGNp dHJpeC5jb20+CkFja2VkLWJ5OiBJYW4gSmFja3NvbiA8aWFuLmphY2tzb25AZXUuY2l0cml4LmNv bT4KLS0tCgpNdXN0IGJlIGFwcGxpZWQgd2l0aDoKCsKgLSAicWVtdS14ZW4tdHJhZGl0aW9uYWw6 IFVzZSBsaWJ4ZW5ldnRjaG4iIGFuZCBhIGNvcnJlc3BvbmRpbmcKwqDCoMKgUUVNVV9UQUcgdXBk YXRlIGZvbGRlZCBoZXJlLgrCoC0gIm1pbmktb3M6IEluY2x1ZGUgbGlieGVuZXZ0Y2huIHdpdGgg bGlieGMiIiBhbmQgYSBjb3JyZXNwb25kaW5nCsKgwqDCoGJ1bXAgdG8gTUlOSU9TX1VQU1RSRUFN X1JFVklTSU9OIGZvbGRlZCBpbiBoZXJlLgoKdjI6IFVwZGF0ZSBkb2MgYXQgc2FtZSB0aW1lCsKg wqDCoMKgUmVtb3ZlZCBzb21lIHN0cmF5IGNvbXBhdCB0aGluZwp2MzogTW92ZWQgdG8gdG9vbHMv bGlicy9ldnRjaG4KdjQ6IHR5cGVkZWYgdGhlIHhlbmV2dGNobl9oYW5kbGUgaW4geGVuZ3Vlc3Qu aCBpbnN0ZWFkIG9mICNpbmNsdWRlLCB0bwrCoMKgwqDCoGF2b2lkIGxlYWtpbmcgdGhlIGxpYnhl bmV2dGNobiBuYW1lc3BhY2UgaW50byBjYWxsZXJzIHdobyBtYXkgbm90CsKgwqDCoMKgd2FudCBp dC4gKEFuZCBhbHNvIHRvIGF2b2lkIGFkZGluZyBsb3RzIG9mIC1JIHRvIHBsYWNlcyBsaWtlCsKg wqDCoMKgc3R1YmRvbSBidWlsZHMpCnY1OiBIYW5kbGUgTlVMTCBwYXNzZWQgdG8gX2Nsb3NlKCkK djY6IFByb3Blcmx5IHBvcnQgeGVuLWFjY2VzcyB0byBuZXcgQVBJIChpbnN0ZWFkIG9mIGEgc2lu Z2xlIGZ1bmN0aW9uIGNhbGwpCnY3OiBBZGRlZCBtay1oZWFkZXJzLSQoWEVOX1RBUkdFVF9BUkNI KSBidWlsZCBkZXBlbmRlbmN5IGluc3RlYWQgb2YKwqDCoMKgwqBvcGVuIGNvZGluZyB0aGUgcmVj dXJzaW9uLgp2ODogUmVtb3ZlICouc28gb24gY2xlYW4sIGFkZCBkaXN0Y2xlYW4gdGFyZ2V0Lgp2 OTogUmVmYWN0b3Igb3ZlciAieGVuc3RvcmU6IG1vdmUgaW5pdC14ZW5zdG9yZS1kb21haW4gdG8K wqDCoMKgwqB0b29scy9oZWxwZXJzIiB0aGlzIGhpZ2hsaWdodGVkIHRoYXQgaW5pdC14ZW5zdG9y ZS1kb21haW4gaGFzIG5vCsKgwqDCoMKgbmVlZCBmb3IgTERMSUJTX3hlbmV2dGNobiBhbmQgbmV2 ZXIgZGlkLCBzbyB0aGF0IGh1bmsgaXMgc2ltcGx5CsKgwqDCoMKgZHJvcHBlZC4KLS0tCsKgLmdp dGlnbm9yZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgwqAxICsKwqBzdHViZG9tL01ha2VmaWxlwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKg wqAxNyArLQrCoHRvb2xzL01ha2VmaWxlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgwqA1ICstCsKgdG9vbHMvUnVsZXMu bWvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgfMKgwqAxNCArLQrCoHRvb2xzL2NvbnNvbGUvTWFrZWZpbGXCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoMKgMiArCsKgdG9vbHMvY29u c29sZS9kYWVtb24vaW8uY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHzCoMKgNDMgKystLQrCoHRvb2xzL2xpYnMvTWFrZWZpbGXCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoMKgMSArCsKgdG9vbHMvbGlicy9l dnRjaG4vTWFrZWZpbGXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKg wqA2OSArKysrKysrCsKgdG9vbHMvbGlicy9ldnRjaG4vY29yZS5jwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDcyICsrKysrKysKwqB0b29scy9saWJzL2V2 dGNobi9mcmVlYnNkLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHwgMTM4 ICsrKysrKysrKysrKysKwqB0b29scy9saWJzL2V2dGNobi9pbmNsdWRlL3hlbmV2dGNobi5owqDC oMKgwqDCoMKgwqDCoMKgfCAxNTAgKysrKysrKysrKysrKysKwqB0b29scy9saWJzL2V2dGNobi9s aWJ4ZW5ldnRjaG4ubWFwwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAxOSArKwrCoHRvb2xz L2xpYnMvZXZ0Y2huL2xpbnV4LmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB8IDEzNiArKysrKysrKysrKysrCsKgdG9vbHMvbGlicy9ldnRjaG4vbWluaW9zLmPCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfCAyNjkgKysrKysrKysrKysrKysr KysrKysrKysrKysKwqB0b29scy9saWJzL2V2dGNobi9uZXRic2QuY8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8IDE0NyArKysrKysrKysrKysrKwrCoHRvb2xzL2xpYnMv ZXZ0Y2huL3ByaXZhdGUuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKg wqAyNSArKysKwqB0b29scy9saWJzL2V2dGNobi9zb2xhcmlzLmPCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHwgMTM1ICsrKysrKysrKysrKysKwqB0b29scy9saWJzL3Rvb2xs b2cvaW5jbHVkZS94ZW50b29sbG9nLmjCoMKgwqDCoMKgwqDCoHzCoMKgMTAgKwrCoHRvb2xzL2xp YnMvdG9vbGxvZy94dGxfY29yZS5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzC oMKgMTAgKwrCoHRvb2xzL2xpYnMvdG9vbGxvZy94dGxfbG9nZ2VyX3N0ZGlvLmPCoMKgwqDCoMKg wqDCoMKgwqB8wqDCoDEwICsKwqB0b29scy9saWJ2Y2hhbi9NYWtlZmlsZcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoMKgNiArLQrCoHRvb2xzL2xpYnZj aGFuL2luaXQuY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgfMKgwqAyMCArLQrCoHRvb2xzL2xpYnZjaGFuL2lvLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDEyICstCsKgdG9vbHMvbGlidmNo YW4vbGlieGVudmNoYW4uaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKg wqAzICstCsKgdG9vbHMvbGlieGMvTWFrZWZpbGXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqDCoDggKy0KwqB0b29scy9saWJ4Yy9pbmNsdWRl L3hlbmN0cmwuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDk5ICstLS0t LS0tLS0KwqB0b29scy9saWJ4Yy9pbmNsdWRlL3hlbmN0cmxfY29tcGF0LmjCoMKgwqDCoMKgwqDC oMKgwqDCoHzCoMKgNDggKysrKysKwqB0b29scy9saWJ4Yy9pbmNsdWRlL3hlbmd1ZXN0LmjCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgMTQgKy0KwqB0b29scy9saWJ4Yy94Y19l dnRjaG5fY29tcGF0LmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgNzUgKysr KysrKwrCoHRvb2xzL2xpYnhjL3hjX2ZyZWVic2Rfb3NkZXAuY8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgfCAxMDEgLS0tLS0tLS0tLQrCoHRvb2xzL2xpYnhjL3hjX2xpbnV4X29zZGVw LmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDk1IC0tLS0tLS0tLQrC oHRvb2xzL2xpYnhjL3hjX21pbmlvcy5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHwgMjIxIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQrCoHRvb2xzL2xpYnhjL3hj X25ldGJzZC5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHwg MTA5IC0tLS0tLS0tLS0tCsKgdG9vbHMvbGlieGMveGNfcHJpdmF0ZS5jwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDQwIC0tLS0KwqB0b29scy9saWJ4Yy94 Y19wcml2YXRlLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzC oMKgwqA3IC0KwqB0b29scy9saWJ4Yy94Y19zb2xhcmlzLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgOTcgLS0tLS0tLS0tLQrCoHRvb2xzL2xpYnhjL3hj X3N1c3BlbmQuY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKg wqAxOCArLQrCoHRvb2xzL2xpYnhsL01ha2VmaWxlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgwqA1ICstCsKgdG9vbHMvbGlieGwvbGlieGwu Y8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzC oMKgwqAyICstCsKgdG9vbHMvbGlieGwvbGlieGxfZG9tX3N1c3BlbmQuY8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHzCoMKgwqA0ICstCsKgdG9vbHMvbGlieGwvbGlieGxfZXZlbnQuY8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgMTQgKy0KwqB0b29s cy9saWJ4bC9saWJ4bF9pbnRlcm5hbC5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgfMKgwqDCoDUgKy0KwqB0b29scy9taXNjL01ha2VmaWxlwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqDCoDcgKy0KwqB0b29scy9taXNj L3hlbi1ocHRvb2wuY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqB8wqDCoDEzICstCsKgdG9vbHMvbWlzYy94ZW4tbG93bWVtZC5jwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDE1ICstCsKgdG9vbHMvb2NhbWwvbGlicy9l dmVudGNobi9NYWtlZmlsZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgwqA0ICstCsKgdG9v bHMvb2NhbWwvbGlicy9ldmVudGNobi94ZW5ldmVudGNobl9zdHVicy5jIHzCoMKgMjAgKy0KwqB0 b29scy9weXRob24vc2V0dXAucHnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHzCoMKgwqA3ICstCsKgdG9vbHMvdGVzdHMveGVuLWFjY2Vzcy9NYWtlZmls ZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgwqAzICstCsKgdG9vbHMvdGVzdHMv eGVuLWFjY2Vzcy94ZW4tYWNjZXNzLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAyMSArLQrC oHRvb2xzL3hjdXRpbHMvTWFrZWZpbGXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB8wqDCoMKgNCArLQrCoHRvb2xzL3hlbm1vbi9NYWtlZmlsZcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqDCoDIgKwrCoHRv b2xzL3hlbm1vbi94ZW5iYWtlZC5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHzCoMKgMTMgKy0KwqB0b29scy94ZW5wYWdpbmcvTWFrZWZpbGXCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgwqA0ICstCsKgdG9vbHMveGVu cGFnaW5nL3hlbnBhZ2luZy5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8 wqDCoDE4ICstCsKgdG9vbHMveGVucGFnaW5nL3hlbnBhZ2luZy5owqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoMKgMyArLQrCoHRvb2xzL3hlbnN0b3JlL01ha2VmaWxl wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgwqAzICst CsKgdG9vbHMveGVuc3RvcmUveGVuc3RvcmVkX2NvcmUuY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHzCoMKgwqA2ICstCsKgdG9vbHMveGVuc3RvcmUveGVuc3RvcmVkX2RvbWFpbi5jwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDI1ICstLQrCoHRvb2xzL3hlbnRyYWNlL01ha2Vm aWxlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgwqA1 ICstCsKgdG9vbHMveGVudHJhY2UveGVudHJhY2UuY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHzCoMKgMTMgKy0KwqA2MSBmaWxlcyBjaGFuZ2VkLCAxNTM4IGluc2Vy dGlvbnMoKyksIDkyNCBkZWxldGlvbnMoLSkKwqBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvbGli cy9ldnRjaG4vTWFrZWZpbGUKwqBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvbGlicy9ldnRjaG4v Y29yZS5jCsKgY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL2xpYnMvZXZ0Y2huL2ZyZWVic2QuYwrC oGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy9saWJzL2V2dGNobi9pbmNsdWRlL3hlbmV2dGNobi5o CsKgY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL2xpYnMvZXZ0Y2huL2xpYnhlbmV2dGNobi5tYXAK wqBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvbGlicy9ldnRjaG4vbGludXguYwrCoGNyZWF0ZSBt b2RlIDEwMDY0NCB0b29scy9saWJzL2V2dGNobi9taW5pb3MuYwrCoGNyZWF0ZSBtb2RlIDEwMDY0 NCB0b29scy9saWJzL2V2dGNobi9uZXRic2QuYwrCoGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy9s aWJzL2V2dGNobi9wcml2YXRlLmgKwqBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvbGlicy9ldnRj aG4vc29sYXJpcy5jCsKgY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL2xpYnhjL2luY2x1ZGUveGVu Y3RybF9jb21wYXQuaArCoGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy9saWJ4Yy94Y19ldnRjaG5f Y29tcGF0LmMKCmRpZmYgLS1naXQgYS8uZ2l0aWdub3JlIGIvLmdpdGlnbm9yZQppbmRleCAxNDFj MmJlLi5lN2FmOWY3IDEwMDY0NAotLS0gYS8uZ2l0aWdub3JlCisrKyBiLy5naXRpZ25vcmUKQEAg LTYyLDYgKzYyLDcgQEAgc3R1YmRvbS9pb2VtdQrCoHN0dWJkb20vaW9lbXUvCsKgc3R1YmRvbS9s aWJzLSoKwqBzdHViZG9tL2xpYnhjLSoKK3N0dWJkb20vbGlieGVuZXZ0Y2huLSoKwqBzdHViZG9t L2xpYnhlbnRvb2xsb2ctKgrCoHN0dWJkb20vbHdpcC0qCsKgc3R1YmRvbS9sd2lwLwpkaWZmIC0t Z2l0IGEvc3R1YmRvbS9NYWtlZmlsZSBiL3N0dWJkb20vTWFrZWZpbGUKaW5kZXggOWM3NzIwNS4u NzAyZDY2YiAxMDA2NDQKLS0tIGEvc3R1YmRvbS9NYWtlZmlsZQorKysgYi9zdHViZG9tL01ha2Vm aWxlCkBAIC0zMTksNiArMzE5LDEyIEBAIG1rLWhlYWRlcnMtJChYRU5fVEFSR0VUX0FSQ0gpOiAk KElPRU1VX0xJTktGQVJNX1RBUkdFVCkKwqAJwqDCoGxuIC1zZiAkKFhFTl9ST09UKS90b29scy9s aWJzL3Rvb2xsb2cvaW5jbHVkZS8qLmggLiAmJiBcCsKgCcKgwqBsbiAtc2YgJChYRU5fUk9PVCkv dG9vbHMvbGlicy90b29sbG9nLyouYyAuICYmIFwKwqAJwqDCoGxuIC1zZiAkKFhFTl9ST09UKS90 b29scy9saWJzL3Rvb2xsb2cvTWFrZWZpbGUgLiApCisJbWtkaXIgLXAgbGlicy0kKFhFTl9UQVJH RVRfQVJDSCkvZXZ0Y2huL2luY2x1ZGUKKwlbIC1oIGxpYnMtJChYRU5fVEFSR0VUX0FSQ0gpL2V2 dGNobi9NYWtlZmlsZSBdIHx8ICggY2QgbGlicy0kKFhFTl9UQVJHRVRfQVJDSCkvZXZ0Y2huICYm IFwKKwnCoMKgbG4gLXNmICQoWEVOX1JPT1QpL3Rvb2xzL2xpYnMvZXZ0Y2huLyouaCAuICYmIFwK KwnCoMKgbG4gLXNmICQoWEVOX1JPT1QpL3Rvb2xzL2xpYnMvZXZ0Y2huL2luY2x1ZGUvKi5oIGlu Y2x1ZGUvICYmIFwKKwnCoMKgbG4gLXNmICQoWEVOX1JPT1QpL3Rvb2xzL2xpYnMvZXZ0Y2huLyou YyAuICYmIFwKKwnCoMKgbG4gLXNmICQoWEVOX1JPT1QpL3Rvb2xzL2xpYnMvZXZ0Y2huL01ha2Vm aWxlIC4gKQrCoAlta2RpciAtcCBsaWJ4Yy0kKFhFTl9UQVJHRVRfQVJDSCkKwqAJWyAtaCBsaWJ4 Yy0kKFhFTl9UQVJHRVRfQVJDSCkvTWFrZWZpbGUgXSB8fCAoIGNkIGxpYnhjLSQoWEVOX1RBUkdF VF9BUkNIKSAmJiBcCsKgCcKgwqBsbiAtc2YgJChYRU5fUk9PVCkvdG9vbHMvbGlieGMvKi5oIC4g JiYgXApAQCAtMzUxLDEyICszNTcsMjEgQEAgbGlicy0kKFhFTl9UQVJHRVRfQVJDSCkvdG9vbGxv Zy9saWJ4ZW50b29sbG9nLmE6IG1rLWhlYWRlcnMtJChYRU5fVEFSR0VUX0FSQ0gpICQKwqAJQ1BQ RkxBR1M9IiQoVEFSR0VUX0NQUEZMQUdTKSIgQ0ZMQUdTPSIkKFRBUkdFVF9DRkxBR1MpIiAkKE1B S0UpIERFU1RESVI9IC1DIGxpYnMtJChYRU5fVEFSR0VUX0FSQ0gpL3Rvb2xsb2cKwqAKwqAjIyMj IyMjCisjIGxpYnhlbmV2dGNobgorIyMjIyMjIworCisuUEhPTlk6IGxpYnhlbmV2dGNobgorbGli eGVuZXZ0Y2huOiBsaWJzLSQoWEVOX1RBUkdFVF9BUkNIKS9ldnRjaG4vbGlieGVuZXZ0Y2huLmEK K2xpYnMtJChYRU5fVEFSR0VUX0FSQ0gpL2V2dGNobi9saWJ4ZW5ldnRjaG4uYTogbWstaGVhZGVy cy0kKFhFTl9UQVJHRVRfQVJDSCkgJChORVdMSUJfU1RBTVBGSUxFKQorCUNQUEZMQUdTPSIkKFRB UkdFVF9DUFBGTEFHUykiIENGTEFHUz0iJChUQVJHRVRfQ0ZMQUdTKSIgJChNQUtFKSBERVNURElS PSAtQyBsaWJzLSQoWEVOX1RBUkdFVF9BUkNIKS9ldnRjaG4KKworIyMjIyMjIwrCoCMgbGlieGMK wqAjIyMjIyMjCsKgCsKgLlBIT05ZOiBsaWJ4YwrCoGxpYnhjOiBsaWJ4Yy0kKFhFTl9UQVJHRVRf QVJDSCkvbGlieGVuY3RybC5hIGxpYnhjLSQoWEVOX1RBUkdFVF9BUkNIKS9saWJ4ZW5ndWVzdC5h Ci1saWJ4Yy0kKFhFTl9UQVJHRVRfQVJDSCkvbGlieGVuY3RybC5hOiBtay1oZWFkZXJzLSQoWEVO X1RBUkdFVF9BUkNIKSBsaWJ4ZW50b29sbG9nIGNyb3NzLXpsaWIKK2xpYnhjLSQoWEVOX1RBUkdF VF9BUkNIKS9saWJ4ZW5jdHJsLmE6IG1rLWhlYWRlcnMtJChYRU5fVEFSR0VUX0FSQ0gpIGxpYnhl bnRvb2xsb2cgbGlieGVuZXZ0Y2huIGNyb3NzLXpsaWIKwqAJQ1BQRkxBR1M9IiQoVEFSR0VUX0NQ UEZMQUdTKSIgQ0ZMQUdTPSIkKFRBUkdFVF9DRkxBR1MpIiAkKE1BS0UpIERFU1RESVI9IENPTkZJ R19MSUJYQ19NSU5JT1M9eSAtQyBsaWJ4Yy0kKFhFTl9UQVJHRVRfQVJDSCkKwqAKwqAgbGlieGMt JChYRU5fVEFSR0VUX0FSQ0gpL2xpYnhlbmd1ZXN0LmE6IGxpYnhjLSQoWEVOX1RBUkdFVF9BUkNI KS9saWJ4ZW5jdHJsLmEKZGlmZiAtLWdpdCBhL3Rvb2xzL01ha2VmaWxlIGIvdG9vbHMvTWFrZWZp bGUKaW5kZXggY2NkMGFlNy4uNTViNWQ0NCAxMDA2NDQKLS0tIGEvdG9vbHMvTWFrZWZpbGUKKysr IGIvdG9vbHMvTWFrZWZpbGUKQEAgLTI0OSw4ICsyNDksMTAgQEAgc3ViZGlyLWFsbC1xZW11LXhl bi1kaXI6IHFlbXUteGVuLWRpci1maW5kCsKgCQktLWxpYmRpcj0kKExJQkVYRUNfTElCKSBcCsKg CQktLWluY2x1ZGVkaXI9JChMSUJFWEVDX0lOQykgXArCoAkJLS1zb3VyY2UtcGF0aD0kJHNvdXJj ZSBcCi0JCS0tZXh0cmEtY2ZsYWdzPSItSSQoWEVOX1JPT1QpL3Rvb2xzL2luY2x1ZGUgXAorCQkt LWV4dHJhLWNmbGFncz0iLURYQ19XQU5UX0NPTVBBVF9FVlRDSE5fQVBJPTEgXAorCQktSSQoWEVO X1JPT1QpL3Rvb2xzL2luY2x1ZGUgXArCoAkJLUkkKFhFTl9ST09UKS90b29scy9saWJzL3Rvb2xs b2cvaW5jbHVkZSBcCisJCS1JJChYRU5fUk9PVCkvdG9vbHMvbGlicy9ldnRjaG4vaW5jbHVkZSBc CsKgCQktSSQoWEVOX1JPT1QpL3Rvb2xzL2xpYnhjL2luY2x1ZGUgXArCoAkJLUkkKFhFTl9ST09U KS90b29scy94ZW5zdG9yZS9pbmNsdWRlIFwKwqAJCS1JJChYRU5fUk9PVCkvdG9vbHMveGVuc3Rv cmUvY29tcGF0L2luY2x1ZGUgXApAQCAtMjU4LDYgKzI2MCw3IEBAIHN1YmRpci1hbGwtcWVtdS14 ZW4tZGlyOiBxZW11LXhlbi1kaXItZmluZArCoAkJLS1leHRyYS1sZGZsYWdzPSItTCQoWEVOX1JP T1QpL3Rvb2xzL2xpYnhjIFwKwqAJCS1MJChYRU5fUk9PVCkvdG9vbHMveGVuc3RvcmUgXArCoAkJ LVdsLC1ycGF0aC1saW5rPSQoWEVOX1JPT1QpL3Rvb2xzL2xpYnMvdG9vbGxvZyBcCisJCS1XbCwt cnBhdGgtbGluaz0kKFhFTl9ST09UKS90b29scy9saWJzL2V2dGNobiBcCsKgCQkkKFFFTVVfVVBT VFJFQU1fUlBBVEgpIiBcCsKgCQktLWJpbmRpcj0kKExJQkVYRUNfQklOKSBcCsKgCQktLWRhdGFk aXI9JChTSEFSRURJUikvcWVtdS14ZW4gXApkaWZmIC0tZ2l0IGEvdG9vbHMvUnVsZXMubWsgYi90 b29scy9SdWxlcy5tawppbmRleCAwNjUyZTRiLi43NWQwMmM0IDEwMDY0NAotLS0gYS90b29scy9S dWxlcy5taworKysgYi90b29scy9SdWxlcy5tawpAQCAtMTEsNiArMTEsNyBAQCBJTlNUQUxMID0g JChYRU5fUk9PVCkvdG9vbHMvY3Jvc3MtaW5zdGFsbArCoArCoFhFTl9JTkNMVURFwqDCoMKgwqDC oMKgwqDCoD0gJChYRU5fUk9PVCkvdG9vbHMvaW5jbHVkZQrCoFhFTl9MSUJYRU5UT09MTE9HwqDC oD0gJChYRU5fUk9PVCkvdG9vbHMvbGlicy90b29sbG9nCitYRU5fTElCWEVORVZUQ0hOwqDCoMKg PSAkKFhFTl9ST09UKS90b29scy9saWJzL2V2dGNobgrCoFhFTl9MSUJYQ8KgwqDCoMKgwqDCoMKg wqDCoMKgPSAkKFhFTl9ST09UKS90b29scy9saWJ4YwrCoFhFTl9YRU5MSUdIVMKgwqDCoMKgwqDC oMKgPSAkKFhFTl9ST09UKS90b29scy9saWJ4bArCoFhFTl9YRU5TVE9SRcKgwqDCoMKgwqDCoMKg PSAkKFhFTl9ST09UKS90b29scy94ZW5zdG9yZQpAQCAtODIsMTMgKzgzLDE4IEBAIFNIREVQU19s aWJ4ZW50b29sbG9nID0KwqBMRExJQlNfbGlieGVudG9vbGxvZyA9ICQoWEVOX0xJQlhFTlRPT0xM T0cpL2xpYnhlbnRvb2xsb2ckKGxpYmV4dGVuc2lvbikKwqBTSExJQl9saWJ4ZW50b29sbG9nwqDC oD0gLVdsLC1ycGF0aC1saW5rPSQoWEVOX0xJQlhFTlRPT0xMT0cpCsKgCitDRkxBR1NfbGlieGVu ZXZ0Y2huID0gLUkkKFhFTl9MSUJYRU5FVlRDSE4pL2luY2x1ZGUgJChDRkxBR1NfeGVuaW5jbHVk ZSkKK1NIREVQU19saWJ4ZW5ldnRjaG4gPQorTERMSUJTX2xpYnhlbmV2dGNobiA9ICQoWEVOX0xJ QlhFTkVWVENITikvbGlieGVuZXZ0Y2huJChsaWJleHRlbnNpb24pCitTSExJQl9saWJ4ZW5ldnRj aG7CoMKgPSAtV2wsLXJwYXRoLWxpbms9JChYRU5fTElCWEVORVZUQ0hOKQorCsKgQ0ZMQUdTX2xp YnhlbmN0cmwgPSAtSSQoWEVOX0xJQlhDKS9pbmNsdWRlICQoQ0ZMQUdTX2xpYnhlbnRvb2xsb2cp ICQoQ0ZMQUdTX3hlbmluY2x1ZGUpCi1TSERFUFNfbGlieGVuY3RybCA9ICQoU0hMSUJfbGlieGVu dG9vbGxvZykKK1NIREVQU19saWJ4ZW5jdHJsID0gJChTSExJQl9saWJ4ZW50b29sbG9nKSAkKFNI TElCX2xpYnhlbmV2dGNobikKwqBMRExJQlNfbGlieGVuY3RybCA9ICQoU0hERVBTX2xpYnhlbmN0 cmwpICQoWEVOX0xJQlhDKS9saWJ4ZW5jdHJsJChsaWJleHRlbnNpb24pCsKgU0hMSUJfbGlieGVu Y3RybMKgwqA9ICQoU0hERVBTX2xpYnhlbmN0cmwpIC1XbCwtcnBhdGgtbGluaz0kKFhFTl9MSUJY QykKwqAKLUNGTEFHU19saWJ4ZW5ndWVzdCA9IC1JJChYRU5fTElCWEMpL2luY2x1ZGUgJChDRkxB R1NfeGVuaW5jbHVkZSkKLVNIREVQU19saWJ4ZW5ndWVzdCA9CitDRkxBR1NfbGlieGVuZ3Vlc3Qg PSAtSSQoWEVOX0xJQlhDKS9pbmNsdWRlICQoQ0ZMQUdTX2xpYnhlbmV2dGNobikgJChDRkxBR1Nf eGVuaW5jbHVkZSkKK1NIREVQU19saWJ4ZW5ndWVzdCA9ICQoU0hMSUJfbGlieGVuZXZ0Y2huKQrC oExETElCU19saWJ4ZW5ndWVzdCA9ICQoU0hERVBTX2xpYnhlbmd1ZXN0KSAkKFhFTl9MSUJYQykv bGlieGVuZ3Vlc3QkKGxpYmV4dGVuc2lvbikKwqBTSExJQl9saWJ4ZW5ndWVzdMKgwqA9ICQoU0hE RVBTX2xpYnhlbmd1ZXN0KSAtV2wsLXJwYXRoLWxpbms9JChYRU5fTElCWEMpCsKgCkBAIC0xMDMs NyArMTA5LDcgQEAgTERMSUJTX2xpYnhlbnN0YXTCoMKgPSAkKFNIREVQU19saWJ4ZW5zdGF0KSAk KFhFTl9MSUJYRU5TVEFUKS9saWJ4ZW5zdGF0JChsaWJleHRlbgrCoFNITElCX2xpYnhlbnN0YXTC oMKgwqA9ICQoU0hERVBTX2xpYnhlbnN0YXQpIC1XbCwtcnBhdGgtbGluaz0kKFhFTl9MSUJYRU5T VEFUKQrCoArCoENGTEFHU19saWJ4ZW52Y2hhbiA9IC1JJChYRU5fTElCVkNIQU4pCi1TSERFUFNf bGlieGVudmNoYW4gPSAkKFNITElCX2xpYnhlbmN0cmwpICQoU0hMSUJfbGlieGVuc3RvcmUpCitT SERFUFNfbGlieGVudmNoYW4gPSAkKFNITElCX2xpYnhlbmN0cmwpICQoU0hMSUJfbGlieGVuc3Rv cmUpICQoU0hMSUJfbGlieGVuZXZ0Y2huKQrCoExETElCU19saWJ4ZW52Y2hhbiA9ICQoU0hERVBT X2xpYnhlbnZjaGFuKSAkKFhFTl9MSUJWQ0hBTikvbGlieGVudmNoYW4kKGxpYmV4dGVuc2lvbikK wqBTSExJQl9saWJ4ZW52Y2hhbsKgwqA9ICQoU0hERVBTX2xpYnhlbnZjaGFuKSAtV2wsLXJwYXRo LWxpbms9JChYRU5fTElCVkNIQU4pCsKgCmRpZmYgLS1naXQgYS90b29scy9jb25zb2xlL01ha2Vm aWxlIGIvdG9vbHMvY29uc29sZS9NYWtlZmlsZQppbmRleCA3N2U4ZjI5Li40YjNhNDkyIDEwMDY0 NAotLS0gYS90b29scy9jb25zb2xlL01ha2VmaWxlCisrKyBiL3Rvb2xzL2NvbnNvbGUvTWFrZWZp bGUKQEAgLTMsOCArMywxMCBAQCBpbmNsdWRlICQoWEVOX1JPT1QpL3Rvb2xzL1J1bGVzLm1rCsKg CsKgQ0ZMQUdTwqDCoCs9IC1XZXJyb3IKwqAKK0NGTEFHU8KgwqArPSAkKENGTEFHU19saWJ4ZW5l dnRjaG4pCsKgQ0ZMQUdTwqDCoCs9ICQoQ0ZMQUdTX2xpYnhlbmN0cmwpCsKgQ0ZMQUdTwqDCoCs9 ICQoQ0ZMQUdTX2xpYnhlbnN0b3JlKQorTERMSUJTICs9ICQoTERMSUJTX2xpYnhlbmV2dGNobikK wqBMRExJQlMgKz0gJChMRExJQlNfbGlieGVuY3RybCkKwqBMRExJQlMgKz0gJChMRExJQlNfbGli eGVuc3RvcmUpCsKgTERMSUJTICs9ICQoU09DS0VUX0xJQlMpCmRpZmYgLS1naXQgYS90b29scy9j b25zb2xlL2RhZW1vbi9pby5jIGIvdG9vbHMvY29uc29sZS9kYWVtb24vaW8uYwppbmRleCBjYWZj N2I3Li4yZjJlOWM1IDEwMDY0NAotLS0gYS90b29scy9jb25zb2xlL2RhZW1vbi9pby5jCisrKyBi L3Rvb2xzL2NvbnNvbGUvZGFlbW9uL2lvLmMKQEAgLTIxLDYgKzIxLDcgQEAKwqAKwqAjaW5jbHVk ZSAidXRpbHMuaCIKwqAjaW5jbHVkZSAiaW8uaCIKKyNpbmNsdWRlIDx4ZW5ldnRjaG4uaD4KwqAj aW5jbHVkZSA8eGVuc3RvcmUuaD4KwqAjaW5jbHVkZSA8eGVuL2lvL2NvbnNvbGUuaD4KwqAjaW5j bHVkZSA8eGVuL2dyYW50X3RhYmxlLmg+CkBAIC0xMDEsNyArMTAyLDcgQEAgc3RydWN0IGRvbWFp biB7CsKgCWludCByaW5nX3JlZjsKwqAJZXZ0Y2huX3BvcnRfb3JfZXJyb3JfdCBsb2NhbF9wb3J0 OwrCoAlldnRjaG5fcG9ydF9vcl9lcnJvcl90IHJlbW90ZV9wb3J0OwotCXhjX2V2dGNobiAqeGNl X2hhbmRsZTsKKwl4ZW5ldnRjaG5faGFuZGxlICp4Y2VfaGFuZGxlOwrCoAlpbnQgeGNlX3BvbGxm ZF9pZHg7CsKgCXN0cnVjdCB4ZW5jb25zX2ludGVyZmFjZSAqaW50ZXJmYWNlOwrCoAlpbnQgZXZl bnRfY291bnQ7CkBAIC0xODUsNyArMTg2LDcgQEAgc3RhdGljIHZvaWQgYnVmZmVyX2FwcGVuZChz dHJ1Y3QgZG9tYWluICpkb20pCsKgCsKgCXhlbl9tYigpOwrCoAlpbnRmLT5vdXRfY29ucyA9IGNv bnM7Ci0JeGNfZXZ0Y2huX25vdGlmeShkb20tPnhjZV9oYW5kbGUsIGRvbS0+bG9jYWxfcG9ydCk7 CisJeGVuZXZ0Y2huX25vdGlmeShkb20tPnhjZV9oYW5kbGUsIGRvbS0+bG9jYWxfcG9ydCk7CsKg CsKgCS8qIEdldCB0aGUgZGF0YSB0byB0aGUgbG9nZmlsZSBhcyBlYXJseSBhcyBwb3NzaWJsZSBi ZWNhdXNlIGlmCsKgCcKgKiBubyBvbmUgaXMgbGlzdGVuaW5nIG9uIHRoZSBjb25zb2xlIHB0eSB0 aGVuIGl0IHdpbGwgZmlsbCB1cApAQCAtNTg0LDIyICs1ODUsMjIgQEAgc3RhdGljIGludCBkb21h aW5fY3JlYXRlX3Jpbmcoc3RydWN0IGRvbWFpbiAqZG9tKQrCoAlkb20tPmxvY2FsX3BvcnQgPSAt MTsKwqAJZG9tLT5yZW1vdGVfcG9ydCA9IC0xOwrCoAlpZiAoZG9tLT54Y2VfaGFuZGxlICE9IE5V TEwpCi0JCXhjX2V2dGNobl9jbG9zZShkb20tPnhjZV9oYW5kbGUpOworCQl4ZW5ldnRjaG5fY2xv c2UoZG9tLT54Y2VfaGFuZGxlKTsKwqAKwqAJLyogT3BlbmluZyBldnRjaG4gaW5kZXBlbmRlbnRs eSBmb3IgZWFjaCBjb25zb2xlIGlzIGEgYml0CsKgCcKgKiB3YXN0ZWZ1bCwgYnV0IHRoYXQncyBo b3cgdGhlIGNvZGUgaXMgc3RydWN0dXJlZC4uLiAqLwotCWRvbS0+eGNlX2hhbmRsZSA9IHhjX2V2 dGNobl9vcGVuKE5VTEwsIDApOworCWRvbS0+eGNlX2hhbmRsZSA9IHhlbmV2dGNobl9vcGVuKE5V TEwsIDApOwrCoAlpZiAoZG9tLT54Y2VfaGFuZGxlID09IE5VTEwpIHsKwqAJCWVyciA9IGVycm5v OwrCoAkJZ290byBvdXQ7CsKgCX0KwqAgCi0JcmMgPSB4Y19ldnRjaG5fYmluZF9pbnRlcmRvbWFp bihkb20tPnhjZV9oYW5kbGUsCisJcmMgPSB4ZW5ldnRjaG5fYmluZF9pbnRlcmRvbWFpbihkb20t PnhjZV9oYW5kbGUsCsKgCQlkb20tPmRvbWlkLCByZW1vdGVfcG9ydCk7CsKgCsKgCWlmIChyYyA9 PSAtMSkgewrCoAkJZXJyID0gZXJybm87Ci0JCXhjX2V2dGNobl9jbG9zZShkb20tPnhjZV9oYW5k bGUpOworCQl4ZW5ldnRjaG5fY2xvc2UoZG9tLT54Y2VfaGFuZGxlKTsKwqAJCWRvbS0+eGNlX2hh bmRsZSA9IE5VTEw7CsKgCQlnb3RvIG91dDsKwqAJfQpAQCAtNjA5LDcgKzYxMCw3IEBAIHN0YXRp YyBpbnQgZG9tYWluX2NyZWF0ZV9yaW5nKHN0cnVjdCBkb21haW4gKmRvbSkKwqAJaWYgKGRvbS0+ bWFzdGVyX2ZkID09IC0xKSB7CsKgCQlpZiAoIWRvbWFpbl9jcmVhdGVfdHR5KGRvbSkpIHsKwqAJ CQllcnIgPSBlcnJubzsKLQkJCXhjX2V2dGNobl9jbG9zZShkb20tPnhjZV9oYW5kbGUpOworCQkJ eGVuZXZ0Y2huX2Nsb3NlKGRvbS0+eGNlX2hhbmRsZSk7CsKgCQkJZG9tLT54Y2VfaGFuZGxlID0g TlVMTDsKwqAJCQlkb20tPmxvY2FsX3BvcnQgPSAtMTsKwqAJCQlkb20tPnJlbW90ZV9wb3J0ID0g LTE7CkBAIC03NDksNyArNzUwLDcgQEAgc3RhdGljIHZvaWQgc2h1dGRvd25fZG9tYWluKHN0cnVj dCBkb21haW4gKmQpCsKgCXdhdGNoX2RvbWFpbihkLCBmYWxzZSk7CsKgCWRvbWFpbl91bm1hcF9p bnRlcmZhY2UoZCk7CsKgCWlmIChkLT54Y2VfaGFuZGxlICE9IE5VTEwpCi0JCXhjX2V2dGNobl9j bG9zZShkLT54Y2VfaGFuZGxlKTsKKwkJeGVuZXZ0Y2huX2Nsb3NlKGQtPnhjZV9oYW5kbGUpOwrC oAlkLT54Y2VfaGFuZGxlID0gTlVMTDsKwqB9CsKgCkBAIC04MzksNyArODQwLDcgQEAgc3RhdGlj IHZvaWQgaGFuZGxlX3R0eV9yZWFkKHN0cnVjdCBkb21haW4gKmRvbSkKwqAJCX0KwqAJCXhlbl93 bWIoKTsKwqAJCWludGYtPmluX3Byb2QgPSBwcm9kOwotCQl4Y19ldnRjaG5fbm90aWZ5KGRvbS0+ eGNlX2hhbmRsZSwgZG9tLT5sb2NhbF9wb3J0KTsKKwkJeGVuZXZ0Y2huX25vdGlmeShkb20tPnhj ZV9oYW5kbGUsIGRvbS0+bG9jYWxfcG9ydCk7CsKgCX0gZWxzZSB7CsKgCQlkb21haW5fY2xvc2Vf dHR5KGRvbSk7CsKgCQlzaHV0ZG93bl9kb21haW4oZG9tKTsKQEAgLTg3MSw3ICs4NzIsNyBAQCBz dGF0aWMgdm9pZCBoYW5kbGVfcmluZ19yZWFkKHN0cnVjdCBkb21haW4gKmRvbSkKwqAJaWYgKGRv bS0+aXNfZGVhZCkKwqAJCXJldHVybjsKwqAKLQlpZiAoKHBvcnQgPSB4Y19ldnRjaG5fcGVuZGlu Zyhkb20tPnhjZV9oYW5kbGUpKSA9PSAtMSkKKwlpZiAoKHBvcnQgPSB4ZW5ldnRjaG5fcGVuZGlu Zyhkb20tPnhjZV9oYW5kbGUpKSA9PSAtMSkKwqAJCXJldHVybjsKwqAKwqAJZG9tLT5ldmVudF9j b3VudCsrOwpAQCAtODc5LDcgKzg4MCw3IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9yaW5nX3JlYWQo c3RydWN0IGRvbWFpbiAqZG9tKQrCoAlidWZmZXJfYXBwZW5kKGRvbSk7CsKgCsKgCWlmIChkb20t PmV2ZW50X2NvdW50IDwgUkFURV9MSU1JVF9BTExPV0FOQ0UpCi0JCSh2b2lkKXhjX2V2dGNobl91 bm1hc2soZG9tLT54Y2VfaGFuZGxlLCBwb3J0KTsKKwkJKHZvaWQpeGVuZXZ0Y2huX3VubWFzayhk b20tPnhjZV9oYW5kbGUsIHBvcnQpOwrCoH0KwqAKwqBzdGF0aWMgdm9pZCBoYW5kbGVfeHModm9p ZCkKQEAgLTkwNiw3ICs5MDcsNyBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfeHModm9pZCkKwqAJZnJl ZSh2ZWMpOwrCoH0KwqAKLXN0YXRpYyB2b2lkIGhhbmRsZV9odl9sb2dzKHhjX2V2dGNobiAqeGNl X2hhbmRsZSwgYm9vbCBmb3JjZSkKK3N0YXRpYyB2b2lkIGhhbmRsZV9odl9sb2dzKHhlbmV2dGNo bl9oYW5kbGUgKnhjZV9oYW5kbGUsIGJvb2wgZm9yY2UpCsKgewrCoAlzdGF0aWMgY2hhciBidWZm ZXJbMTAyNCoxNl07CsKgCWNoYXIgKmJ1ZnB0ciA9IGJ1ZmZlcjsKQEAgLTkxNCw3ICs5MTUsNyBA QCBzdGF0aWMgdm9pZCBoYW5kbGVfaHZfbG9ncyh4Y19ldnRjaG4gKnhjZV9oYW5kbGUsIGJvb2wg Zm9yY2UpCsKgCXN0YXRpYyB1aW50MzJfdCBpbmRleCA9IDA7CsKgCWV2dGNobl9wb3J0X29yX2Vy cm9yX3QgcG9ydCA9IC0xOwrCoAotCWlmICghZm9yY2UgJiYgKChwb3J0ID0geGNfZXZ0Y2huX3Bl bmRpbmcoeGNlX2hhbmRsZSkpID09IC0xKSkKKwlpZiAoIWZvcmNlICYmICgocG9ydCA9IHhlbmV2 dGNobl9wZW5kaW5nKHhjZV9oYW5kbGUpKSA9PSAtMSkpCsKgCQlyZXR1cm47CsKgCsKgCWRvCkBA IC05MzgsNyArOTM5LDcgQEAgc3RhdGljIHZvaWQgaGFuZGxlX2h2X2xvZ3MoeGNfZXZ0Y2huICp4 Y2VfaGFuZGxlLCBib29sIGZvcmNlKQrCoAl9IHdoaWxlIChzaXplID09IHNpemVvZihidWZmZXIp KTsKwqAKwqAJaWYgKHBvcnQgIT0gLTEpCi0JCSh2b2lkKXhjX2V2dGNobl91bm1hc2soeGNlX2hh bmRsZSwgcG9ydCk7CisJCSh2b2lkKXhlbmV2dGNobl91bm1hc2soeGNlX2hhbmRsZSwgcG9ydCk7 CsKgfQrCoArCoHN0YXRpYyB2b2lkIGhhbmRsZV9sb2dfcmVsb2FkKHZvaWQpCkBAIC0xMDA2LDEw ICsxMDA3LDEwIEBAIHZvaWQgaGFuZGxlX2lvKHZvaWQpCsKgCWV2dGNobl9wb3J0X29yX2Vycm9y X3QgbG9nX2h2X2V2dGNobiA9IC0xOwrCoAlpbnQgeGNlX3BvbGxmZF9pZHggPSAtMTsKwqAJaW50 IHhzX3BvbGxmZF9pZHggPSAtMTsKLQl4Y19ldnRjaG4gKnhjZV9oYW5kbGUgPSBOVUxMOworCXhl bmV2dGNobl9oYW5kbGUgKnhjZV9oYW5kbGUgPSBOVUxMOwrCoArCoAlpZiAobG9nX2h2KSB7Ci0J CXhjZV9oYW5kbGUgPSB4Y19ldnRjaG5fb3BlbihOVUxMLCAwKTsKKwkJeGNlX2hhbmRsZSA9IHhl bmV2dGNobl9vcGVuKE5VTEwsIDApOwrCoAkJaWYgKHhjZV9oYW5kbGUgPT0gTlVMTCkgewrCoAkJ CWRvbG9nKExPR19FUlIsICJGYWlsZWQgdG8gb3BlbiB4Y2UgaGFuZGxlOiAlZCAoJXMpIiwKwqAJ CQnCoMKgwqDCoMKgwqBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKQEAgLTEwMTgsNyArMTAxOSw3 IEBAIHZvaWQgaGFuZGxlX2lvKHZvaWQpCsKgCQlsb2dfaHZfZmQgPSBjcmVhdGVfaHZfbG9nKCk7 CsKgCQlpZiAobG9nX2h2X2ZkID09IC0xKQrCoAkJCWdvdG8gb3V0OwotCQlsb2dfaHZfZXZ0Y2hu ID0geGNfZXZ0Y2huX2JpbmRfdmlycSh4Y2VfaGFuZGxlLCBWSVJRX0NPTl9SSU5HKTsKKwkJbG9n X2h2X2V2dGNobiA9IHhlbmV2dGNobl9iaW5kX3ZpcnEoeGNlX2hhbmRsZSwgVklSUV9DT05fUklO Ryk7CsKgCQlpZiAobG9nX2h2X2V2dGNobiA9PSAtMSkgewrCoAkJCWRvbG9nKExPR19FUlIsICJG YWlsZWQgdG8gYmluZCB0byBWSVJRX0NPTl9SSU5HOiAiCsKgCQkJwqDCoMKgwqDCoMKgIiVkICgl cykiLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKQEAgLTEwNDcsNyArMTA0OCw3IEBAIHZvaWQg aGFuZGxlX2lvKHZvaWQpCsKgCQl4c19wb2xsZmRfaWR4ID0gc2V0X2Zkcyh4c19maWxlbm8oeHMp LCBQT0xMSU58UE9MTFBSSSk7CsKgCsKgCQlpZiAobG9nX2h2KQotCQkJeGNlX3BvbGxmZF9pZHgg PSBzZXRfZmRzKHhjX2V2dGNobl9mZCh4Y2VfaGFuZGxlKSwKKwkJCXhjZV9wb2xsZmRfaWR4ID0g c2V0X2Zkcyh4ZW5ldnRjaG5fZmQoeGNlX2hhbmRsZSksCsKgCQkJCQkJwqBQT0xMSU58UE9MTFBS SSk7CsKgCsKgCQlpZiAoY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZ0cykgPCAwKQpA QCAtMTA2Niw3ICsxMDY3LDcgQEAgdm9pZCBoYW5kbGVfaW8odm9pZCkKwqAJCQlpZiAoKG5vdys1 KSA+IGQtPm5leHRfcGVyaW9kKSB7CsKgCQkJCWQtPm5leHRfcGVyaW9kID0gbm93ICsgUkFURV9M SU1JVF9QRVJJT0Q7CsKgCQkJCWlmIChkLT5ldmVudF9jb3VudCA+PSBSQVRFX0xJTUlUX0FMTE9X QU5DRSkgewotCQkJCQkodm9pZCl4Y19ldnRjaG5fdW5tYXNrKGQtPnhjZV9oYW5kbGUsIGQtPmxv Y2FsX3BvcnQpOworCQkJCQkodm9pZCl4ZW5ldnRjaG5fdW5tYXNrKGQtPnhjZV9oYW5kbGUsIGQt PmxvY2FsX3BvcnQpOwrCoAkJCQl9CsKgCQkJCWQtPmV2ZW50X2NvdW50ID0gMDsKwqAJCQl9CkBA IC0xMDgyLDcgKzEwODMsNyBAQCB2b2lkIGhhbmRsZV9pbyh2b2lkKQrCoAkJCQlpZiAoZGlzY2Fy ZF9vdmVyZmxvd2VkX2RhdGEgfHwKwqAJCQkJwqDCoMKgwqAhZC0+YnVmZmVyLm1heF9jYXBhY2l0 eSB8fArCoAkJCQnCoMKgwqDCoGQtPmJ1ZmZlci5zaXplIDwgZC0+YnVmZmVyLm1heF9jYXBhY2l0 eSkgewotCQkJCQlpbnQgZXZ0Y2huX2ZkID0geGNfZXZ0Y2huX2ZkKGQtPnhjZV9oYW5kbGUpOwor CQkJCQlpbnQgZXZ0Y2huX2ZkID0geGVuZXZ0Y2huX2ZkKGQtPnhjZV9oYW5kbGUpOwrCoAkJCQkJ ZC0+eGNlX3BvbGxmZF9pZHggPSBzZXRfZmRzKGV2dGNobl9mZCwKwqAJCQkJCQkJCcKgwqDCoMKg UE9MTElOfFBPTExQUkkpOwrCoAkJCQl9CkBAIC0xMjAyLDcgKzEyMDMsNyBAQCB2b2lkIGhhbmRs ZV9pbyh2b2lkKQrCoAkJbG9nX2h2X2ZkID0gLTE7CsKgCX0KwqAJaWYgKHhjZV9oYW5kbGUgIT0g TlVMTCkgewotCQl4Y19ldnRjaG5fY2xvc2UoeGNlX2hhbmRsZSk7CisJCXhlbmV2dGNobl9jbG9z ZSh4Y2VfaGFuZGxlKTsKwqAJCXhjZV9oYW5kbGUgPSBOVUxMOwrCoAl9CsKgCWlmICh4Y2dfaGFu ZGxlICE9IE5VTEwpIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnMvTWFrZWZpbGUgYi90b29scy9s aWJzL01ha2VmaWxlCmluZGV4IDczYmU1MDAuLjBlM2Y1MjMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xp YnMvTWFrZWZpbGUKKysrIGIvdG9vbHMvbGlicy9NYWtlZmlsZQpAQCAtMyw1ICszLDYgQEAgaW5j bHVkZSAkKFhFTl9ST09UKS90b29scy9SdWxlcy5tawrCoArCoFNVQkRJUlMteSA6PQrCoFNVQkRJ UlMteSArPSB0b29sbG9nCitTVUJESVJTLXkgKz0gZXZ0Y2huCsKgCsKgYWxsIGNsZWFuIGluc3Rh bGwgZGlzdGNsZWFuOiAlOiBzdWJkaXJzLSUKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnMvZXZ0Y2hu L01ha2VmaWxlIGIvdG9vbHMvbGlicy9ldnRjaG4vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uNDZhODA3ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2xpYnMv ZXZ0Y2huL01ha2VmaWxlCkBAIC0wLDAgKzEsNjkgQEAKK1hFTl9ST09UID0gJChDVVJESVIpLy4u Ly4uLy4uCitpbmNsdWRlICQoWEVOX1JPT1QpL3Rvb2xzL1J1bGVzLm1rCisKK01BSk9SwqDCoMKg wqA9IDEKK01JTk9SwqDCoMKgwqA9IDAKK1NITElCX0xERkxBR1MgKz0gLVdsLC0tdmVyc2lvbi1z Y3JpcHQ9bGlieGVuZXZ0Y2huLm1hcAorCitDRkxBR1PCoMKgwqArPSAtV2Vycm9yIC1XbWlzc2lu Zy1wcm90b3R5cGVzCitDRkxBR1PCoMKgwqArPSAtSS4vaW5jbHVkZSAkKENGTEFHU194ZW5pbmNs dWRlKQorQ0ZMQUdTwqDCoMKgKz0gJChDRkxBR1NfbGlieGVudG9vbGxvZykKKworU1JDUy15wqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCs9IGNvcmUuYworU1JDUy0kKENPTkZJR19M aW51eCnCoMKgwqArPSBsaW51eC5jCitTUkNTLSQoQ09ORklHX0ZyZWVCU0QpICs9IGZyZWVic2Qu YworU1JDUy0kKENPTkZJR19TdW5PUynCoMKgwqArPSBzb2xhcmlzLmMKK1NSQ1MtJChDT05GSUdf TmV0QlNEKcKgwqArPSBuZXRic2QuYworU1JDUy0kKENPTkZJR19NaW5pT1MpwqDCoCs9IG1pbmlv cy5jCisKK0xJQl9PQkpTIDo9ICQocGF0c3Vic3QgJS5jLCUubywkKFNSQ1MteSkpCitQSUNfT0JK UyA6PSAkKHBhdHN1YnN0ICUuYywlLm9waWMsJChTUkNTLXkpKQorCitMSUIgOj0gbGlieGVuZXZ0 Y2huLmEKK2lmbmVxICgkKG5vc2hhcmVkbGlicykseSkKK0xJQiArPSBsaWJ4ZW5ldnRjaG4uc28K K2VuZGlmCisKKy5QSE9OWTogYWxsCithbGw6IGJ1aWxkCisKKy5QSE9OWTogYnVpbGQKK2J1aWxk OgorCSQoTUFLRSkgbGlicworCisuUEhPTlk6IGxpYnMKK2xpYnM6ICQoTElCKQorCisKK2xpYnhl bmV2dGNobi5hOiAkKExJQl9PQkpTKQorCSQoQVIpIHJjICRAICReCisKK2xpYnhlbmV2dGNobi5z bzogbGlieGVuZXZ0Y2huLnNvLiQoTUFKT1IpCisJJChTWU1MSU5LX1NITElCKSAkPCAkQAorbGli eGVuZXZ0Y2huLnNvLiQoTUFKT1IpOiBsaWJ4ZW5ldnRjaG4uc28uJChNQUpPUikuJChNSU5PUikK KwkkKFNZTUxJTktfU0hMSUIpICQ8ICRACisKK2xpYnhlbmV2dGNobi5zby4kKE1BSk9SKS4kKE1J Tk9SKTogJChQSUNfT0JKUykgbGlieGVuZXZ0Y2huLm1hcAorCSQoQ0MpICQoTERGTEFHUykgLVds LCQoU09OQU1FX0xERkxBRykgLVdsLGxpYnhlbmV2dGNobi5zby4kKE1BSk9SKSAkKFNITElCX0xE RkxBR1MpIC1vICRAICQoUElDX09CSlMpICQoTERMSUJTX2xpYnhlbnRvb2xsb2cpICQoQVBQRU5E X0xERkxBR1MpCisKKy5QSE9OWTogaW5zdGFsbAoraW5zdGFsbDogYnVpbGQKKwkkKElOU1RBTExf RElSKSAkKERFU1RESVIpJChsaWJkaXIpCisJJChJTlNUQUxMX0RJUikgJChERVNURElSKSQoaW5j bHVkZWRpcikKKwkkKElOU1RBTExfU0hMSUIpIGxpYnhlbmV2dGNobi5zby4kKE1BSk9SKS4kKE1J Tk9SKSAkKERFU1RESVIpJChsaWJkaXIpCisJJChJTlNUQUxMX0RBVEEpIGxpYnhlbmV2dGNobi5h ICQoREVTVERJUikkKGxpYmRpcikKKwkkKFNZTUxJTktfU0hMSUIpIGxpYnhlbmV2dGNobi5zby4k KE1BSk9SKS4kKE1JTk9SKSAkKERFU1RESVIpJChsaWJkaXIpL2xpYnhlbmV2dGNobi5zby4kKE1B Sk9SKQorCSQoU1lNTElOS19TSExJQikgbGlieGVuZXZ0Y2huLnNvLiQoTUFKT1IpICQoREVTVERJ UikkKGxpYmRpcikvbGlieGVuZXZ0Y2huLnNvCisJJChJTlNUQUxMX0RBVEEpIGluY2x1ZGUveGVu ZXZ0Y2huLmggJChERVNURElSKSQoaW5jbHVkZWRpcikKKworLlBIT05ZOiBUQUdTCitUQUdTOgor CWV0YWdzIC10ICouYyAqLmgKKworLlBIT05ZOiBjbGVhbgorY2xlYW46CisJcm0gLXJmICoucnBt ICQoTElCKSAqfiAkKERFUFMpICQoTElCX09CSlMpICQoUElDX09CSlMpCisJcm0gLWYgbGlieGVu ZXZ0Y2huLnNvLiQoTUFKT1IpLiQoTUlOT1IpIGxpYnhlbmV2dGNobi5zby4kKE1BSk9SKQorCisu UEhPTlk6IGRpc3RjbGVhbgorZGlzdGNsZWFuOiBjbGVhbgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGli cy9ldnRjaG4vY29yZS5jIGIvdG9vbHMvbGlicy9ldnRjaG4vY29yZS5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMWUwOGMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9s aWJzL2V2dGNobi9jb3JlLmMKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIFRoaXMgbGlicmFyeSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Cisg KiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuwqDC oFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh cnk7IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisj aW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlICJwcml2 YXRlLmgiCisKK3hlbmV2dGNobl9oYW5kbGUgKnhlbmV2dGNobl9vcGVuKHhlbnRvb2xsb2dfbG9n Z2VyICpsb2dnZXIsIHVuc2lnbmVkIG9wZW5fZmxhZ3MpCit7CivCoMKgwqDCoHhlbmV2dGNobl9o YW5kbGUgKnhjZSA9IG1hbGxvYyhzaXplb2YoKnhjZSkpOworwqDCoMKgwqBpbnQgcmM7CisKK8Kg wqDCoMKgaWYgKCF4Y2UpIHJldHVybiBOVUxMOworCivCoMKgwqDCoHhjZS0+ZmQgPSAtMTsKK8Kg wqDCoMKgeGNlLT5sb2dnZXIgPSBsb2dnZXI7CivCoMKgwqDCoHhjZS0+bG9nZ2VyX3RvZnJlZcKg wqA9IE5VTEw7CisKK8KgwqDCoMKgaWYgKCF4Y2UtPmxvZ2dlcikgeworwqDCoMKgwqDCoMKgwqDC oHhjZS0+bG9nZ2VyID0geGNlLT5sb2dnZXJfdG9mcmVlID0KK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCh4ZW50b29sbG9nX2xvZ2dlciopCivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4dGxfY3Jl YXRlbG9nZ2VyX3N0ZGlvc3RyZWFtKHN0ZGVyciwgWFRMX1BST0dSRVNTLCAwKTsKK8KgwqDCoMKg wqDCoMKgwqBpZiAoIXhjZS0+bG9nZ2VyKSBnb3RvIGVycjsKK8KgwqDCoMKgfQorCivCoMKgwqDC oHJjID0gb3NkZXBfZXZ0Y2huX29wZW4oeGNlKTsKK8KgwqDCoMKgaWYgKCByY8KgwqA8IDAgKSBn b3RvIGVycjsKKworwqDCoMKgwqByZXR1cm4geGNlOworCitlcnI6CivCoMKgwqDCoG9zZGVwX2V2 dGNobl9jbG9zZSh4Y2UpOworwqDCoMKgwqB4dGxfbG9nZ2VyX2Rlc3Ryb3koeGNlLT5sb2dnZXJf dG9mcmVlKTsKK8KgwqDCoMKgZnJlZSh4Y2UpOworwqDCoMKgwqByZXR1cm4gTlVMTDsKK30KKwor aW50IHhlbmV2dGNobl9jbG9zZSh4ZW5ldnRjaG5faGFuZGxlICp4Y2UpCit7CivCoMKgwqDCoGlu dCByYzsKKworwqDCoMKgwqBpZiAoICF4Y2UgKQorwqDCoMKgwqDCoMKgwqDCoHJldHVybiAwOwor CivCoMKgwqDCoHJjID0gb3NkZXBfZXZ0Y2huX2Nsb3NlKHhjZSk7CivCoMKgwqDCoHh0bF9sb2dn ZXJfZGVzdHJveSh4Y2UtPmxvZ2dlcl90b2ZyZWUpOworwqDCoMKgwqBmcmVlKHhjZSk7CivCoMKg wqDCoHJldHVybiByYzsKK30KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMK KyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiB0YWItd2lk dGg6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAorICogRW5kOgorICovCmRpZmYgLS1naXQg YS90b29scy9saWJzL2V2dGNobi9mcmVlYnNkLmMgYi90b29scy9saWJzL2V2dGNobi9mcmVlYnNk LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM2ZjA1MgotLS0gL2Rldi9u dWxsCisrKyBiL3Rvb2xzL2xpYnMvZXZ0Y2huL2ZyZWVic2QuYwpAQCAtMCwwICsxLDEzOCBAQAor IC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQgMjAwNiBTdW4gTWljcm9z eXN0ZW1zLCBJbmMuwqDCoEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBVc2UgaXMgc3ViamVjdCB0 byBsaWNlbnNlIHRlcm1zLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgKiB2ZXJzaW9uIDIuMSBvZiB0 aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuwqDCoFNlZSB0aGUgR05VCisgKiBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IElmIG5vdCwgc2VlIDxo dHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKiBTcGxpdCBvZmYgZnJvbSB4Y19m cmVlYnNkX29zZGVwLmMKKyAqLworCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx1bmlz dGQuaD4KKworI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorCisjaW5jbHVkZSA8eGVuL3N5cy9ldnRj aG4uaD4KKworI2luY2x1ZGUgInByaXZhdGUuaCIKKworI2RlZmluZSBFVlRDSE5fREVWwqDCoMKg wqDCoMKgIi9kZXYveGVuL2V2dGNobiIKKworaW50IG9zZGVwX2V2dGNobl9vcGVuKHhlbmV2dGNo bl9oYW5kbGUgKnhjZSkKK3sKK8KgwqDCoMKgaW50IGZkID0gb3BlbihFVlRDSE5fREVWLCBPX1JE V1IpOworwqDCoMKgwqBpZiAoIGZkID09IC0xICkKK8KgwqDCoMKgwqDCoMKgwqByZXR1cm4gLTE7 CivCoMKgwqDCoHhjZS0+ZmQgPSBmZDsKK8KgwqDCoMKgcmV0dXJuIDA7Cit9CisKK2ludCBvc2Rl cF9ldnRjaG5fY2xvc2UoeGVuZXZ0Y2huX2hhbmRsZSAqeGNlKQoreworwqDCoMKgwqBpZiAoIHhj ZS0+ZmQgPT0gLTEgKQorwqDCoMKgwqDCoMKgwqDCoHJldHVybiAwOworCivCoMKgwqDCoHJldHVy biBjbG9zZSh4Y2UtPmZkKTsKK30KKworaW50IHhlbmV2dGNobl9mZCh4ZW5ldnRjaG5faGFuZGxl ICp4Y2UpCit7CivCoMKgwqDCoHJldHVybiB4Y2UtPmZkOworfQorCitpbnQgeGVuZXZ0Y2huX25v dGlmeSh4ZW5ldnRjaG5faGFuZGxlICp4Y2UsIGV2dGNobl9wb3J0X3QgcG9ydCkKK3sKK8KgwqDC oMKgaW50IGZkID0geGNlLT5mZDsKK8KgwqDCoMKgc3RydWN0IGlvY3RsX2V2dGNobl9ub3RpZnkg bm90aWZ5OworCivCoMKgwqDCoG5vdGlmeS5wb3J0ID0gcG9ydDsKKworwqDCoMKgwqByZXR1cm4g aW9jdGwoZmQsIElPQ1RMX0VWVENITl9OT1RJRlksICZub3RpZnkpOworfQorCitldnRjaG5fcG9y dF9vcl9lcnJvcl90IHhlbmV2dGNobl9iaW5kX3VuYm91bmRfcG9ydCh4ZW5ldnRjaG5faGFuZGxl ICp4Y2UsIGludCBkb21pZCkKK3sKK8KgwqDCoMKgaW50IHJldCwgZmQgPSB4Y2UtPmZkOworwqDC oMKgwqBzdHJ1Y3QgaW9jdGxfZXZ0Y2huX2JpbmRfdW5ib3VuZF9wb3J0IGJpbmQ7CisKK8KgwqDC oMKgYmluZC5yZW1vdGVfZG9tYWluID0gZG9taWQ7CisKK8KgwqDCoMKgcmV0ID0gaW9jdGwoZmQs IElPQ1RMX0VWVENITl9CSU5EX1VOQk9VTkRfUE9SVCwgJmJpbmQpOworwqDCoMKgwqByZXR1cm4g KCByZXQgPT0gMCApID8gYmluZC5wb3J0IDogcmV0OworfQorCitldnRjaG5fcG9ydF9vcl9lcnJv cl90Cit4ZW5ldnRjaG5fYmluZF9pbnRlcmRvbWFpbih4ZW5ldnRjaG5faGFuZGxlICp4Y2UsIGlu dCBkb21pZCwgZXZ0Y2huX3BvcnRfdCByZW1vdGVfcG9ydCkKK3sKK8KgwqDCoMKgaW50IHJldCwg ZmQgPSB4Y2UtPmZkOworwqDCoMKgwqBzdHJ1Y3QgaW9jdGxfZXZ0Y2huX2JpbmRfaW50ZXJkb21h aW4gYmluZDsKKworwqDCoMKgwqBiaW5kLnJlbW90ZV9kb21haW4gPSBkb21pZDsKK8KgwqDCoMKg YmluZC5yZW1vdGVfcG9ydCA9IHJlbW90ZV9wb3J0OworCivCoMKgwqDCoHJldCA9IGlvY3RsKGZk LCBJT0NUTF9FVlRDSE5fQklORF9JTlRFUkRPTUFJTiwgJmJpbmQpOworwqDCoMKgwqByZXR1cm4g KCByZXQgPT0gMCApID8gYmluZC5wb3J0IDogcmV0OworfQorCitldnRjaG5fcG9ydF9vcl9lcnJv cl90IHhlbmV2dGNobl9iaW5kX3ZpcnEoeGVuZXZ0Y2huX2hhbmRsZSAqeGNlLCB1bnNpZ25lZCBp bnQgdmlycSkKK3sKK8KgwqDCoMKgaW50IHJldCwgZmQgPSB4Y2UtPmZkOworwqDCoMKgwqBzdHJ1 Y3QgaW9jdGxfZXZ0Y2huX2JpbmRfdmlycSBiaW5kOworCivCoMKgwqDCoGJpbmQudmlycSA9IHZp cnE7CisKK8KgwqDCoMKgcmV0ID0gaW9jdGwoZmQsIElPQ1RMX0VWVENITl9CSU5EX1ZJUlEsICZi aW5kKTsKK8KgwqDCoMKgcmV0dXJuICggcmV0ID09IDAgKSA/IGJpbmQucG9ydCA6IHJldDsKK30K KworaW50IHhlbmV2dGNobl91bmJpbmQoeGVuZXZ0Y2huX2hhbmRsZSAqeGNlLCBldnRjaG5fcG9y dF90IHBvcnQpCit7CivCoMKgwqDCoGludCBmZCA9IHhjZS0+ZmQ7CivCoMKgwqDCoHN0cnVjdCBp b2N0bF9ldnRjaG5fdW5iaW5kIHVuYmluZDsKKworwqDCoMKgwqB1bmJpbmQucG9ydCA9IHBvcnQ7 CisKK8KgwqDCoMKgcmV0dXJuIGlvY3RsKGZkLCBJT0NUTF9FVlRDSE5fVU5CSU5ELCAmdW5iaW5k KTsKK30KKworZXZ0Y2huX3BvcnRfb3JfZXJyb3JfdCB4ZW5ldnRjaG5fcGVuZGluZyh4ZW5ldnRj aG5faGFuZGxlICp4Y2UpCit7CivCoMKgwqDCoGludCBmZCA9IHhjZS0+ZmQ7CivCoMKgwqDCoGV2 dGNobl9wb3J0X3QgcG9ydDsKKworwqDCoMKgwqBpZiAoIHJlYWQoZmQsICZwb3J0LCBzaXplb2Yo cG9ydCkpICE9IHNpemVvZihwb3J0KSApCivCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC0xOworCivC oMKgwqDCoHJldHVybiBwb3J0OworfQorCitpbnQgeGVuZXZ0Y2huX3VubWFzayh4ZW5ldnRjaG5f aGFuZGxlICp4Y2UsIGV2dGNobl9wb3J0X3QgcG9ydCkKK3sKK8KgwqDCoMKgaW50IGZkID0geGNl LT5mZDsKKworwqDCoMKgwqBpZiAoIHdyaXRlKGZkLCAmcG9ydCwgc2l6ZW9mKHBvcnQpKSAhPSBz aXplb2YocG9ydCkgKQorwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtMTsKK8KgwqDCoMKgcmV0dXJu IDA7Cit9CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLWZpbGUt c3R5bGU6ICJCU0QiCisgKiBjLWJhc2ljLW9mZnNldDogNAorICogdGFiLXdpZHRoOiA0CisgKiBp bmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGli cy9ldnRjaG4vaW5jbHVkZS94ZW5ldnRjaG4uaCBiL3Rvb2xzL2xpYnMvZXZ0Y2huL2luY2x1ZGUv eGVuZXZ0Y2huLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM4MGZhMwot LS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2xpYnMvZXZ0Y2huL2luY2x1ZGUveGVuZXZ0Y2huLmgK QEAgLTAsMCArMSwxNTAgQEAKKy8qCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICogdmVyc2lvbiAyLjEgb2Yg dGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLsKgwqBTZWUgdGhlIEdOVQorICog TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBJZiBub3QsIHNlZSA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICogU3BsaXQgb2ZmIGZyb206Cisg KiB4ZW5jdHJsLmgKKyAqCisgKiBBIGxpYnJhcnkgZm9yIGxvdy1sZXZlbCBhY2Nlc3MgdG8gdGhl IFhlbiBjb250cm9sIGludGVyZmFjZXMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDQs IEsgQSBGcmFzZXIuCisgKi8KKworI2lmbmRlZiBYRU5FVlRDSE5fSAorI2RlZmluZSBYRU5FVlRD SE5fSAorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpbmNsdWRlIDx4ZW4vZXZlbnRfY2hhbm5l bC5oPgorCisvKiBBIHBvcnQgaWRlbnRpZmllciBpcyBndWFyYW50ZWVkIHRvIGZpdCBpbiAzMSBi aXRzLiAqLwordHlwZWRlZiBpbnQgZXZ0Y2huX3BvcnRfb3JfZXJyb3JfdDsKKwordHlwZWRlZiBz dHJ1Y3QgeGVuZXZ0Y2huX2hhbmRsZSB4ZW5ldnRjaG5faGFuZGxlOworCisvKiBDYWxsZXJzIHdo byBkb24ndCBjYXJlIGRvbid0IG5lZWQgdG8gI2luY2x1ZGUgPHhlbnRvb2xsb2cuaD4gKi8KK3R5 cGVkZWYgc3RydWN0IHhlbnRvb2xsb2dfbG9nZ2VyIHhlbnRvb2xsb2dfbG9nZ2VyOworCisvKgor ICogRVZFTlQgQ0hBTk5FTCBGVU5DVElPTlMKKyAqCisgKiBOb25lIG9mIHRoZXNlIGRvIGFueSBs b2dnaW5nLgorICovCisKKy8qCisgKiBSZXR1cm4gYSBoYW5kbGUgdG8gdGhlIGV2ZW50IGNoYW5u ZWwgZHJpdmVyLCBvciBOVUxMIG9uIGZhaWx1cmUsIGluCisgKiB3aGljaCBjYXNlIGVycm5vIHdp bGwgYmUgc2V0IGFwcHJvcHJpYXRlbHkuCisgKgorICogTm90ZToKKyAqIEFmdGVyIGZvcmsgYSBj aGlsZCBwcm9jZXNzIG11c3Qgbm90IHVzZSBhbnkgb3BlbmVkIHhjIGV2dGNobgorICogaGFuZGxl IGluaGVyaXRlZCBmcm9tIHRoZWlyIHBhcmVudC4gVGhleSBtdXN0IG9wZW4gYSBuZXcgaGFuZGxl IGlmCisgKiB0aGV5IHdhbnQgdG8gaW50ZXJhY3Qgd2l0aCB4Yy4KKyAqCisgKiBCZWZvcmUgWGVu IHByZS00LjEgdGhpcyBmdW5jdGlvbiB3b3VsZCBzb21ldGltZXMgcmVwb3J0IGVycm9ycyB3aXRo IHBlcnJvci4KKyAqLworLyogQ3VycmVudGx5IG5vIGZsYWdzIGFyZSBkZWZpbmVkICovCit4ZW5l dnRjaG5faGFuZGxlICp4ZW5ldnRjaG5fb3Blbih4ZW50b29sbG9nX2xvZ2dlciAqbG9nZ2VyLCB1 bnNpZ25lZCBvcGVuX2ZsYWdzKTsKKworLyoKKyAqIENsb3NlIGEgaGFuZGxlIHByZXZpb3VzbHkg YWxsb2NhdGVkIHdpdGggeGVuZXZ0Y2huX29wZW4oKS4KKyAqLworaW50IHhlbmV2dGNobl9jbG9z ZSh4ZW5ldnRjaG5faGFuZGxlICp4Y2UpOworCisvKgorICogUmV0dXJuIGFuIGZkIHRoYXQgY2Fu IGJlIHNlbGVjdCgpZWQgb24uCisgKgorICogTm90ZSB0aGF0IGR1ZSB0byBidWdzLCBzZXR0aW5n IHRoaXMgZmQgdG8gbm9uIGJsb2NraW5nIG1heSBub3QKKyAqIHdvcms6IHlvdSB3b3VsZCBob3Bl IHRoYXQgaXQgd291bGQgcmVzdWx0IGluIHhlbmV2dGNobl9wZW5kaW5nCisgKiBmYWlsaW5nIHdp dGggRVdPVUxEQkxPQ0sgaWYgdGhlcmUgYXJlIG5vIGV2ZW50cyBzaWduYWxlZCwgYnV0IGluCisg KiBmYWN0IGl0IG1heSBibG9jay7CoMKgKEJ1ZyBpcyBwcmVzZW50IGluIGF0IGxlYXN0IExpbnV4 IDMuMTIsIGFuZAorICogcGVyaGFwcyBvbiBvdGhlciBwbGF0Zm9ybXMgb3IgbGF0ZXIgdmVyc2lv bi4pCisgKgorICogVG8gYmUgc2FmZSwgeW91IG11c3QgdXNlIHBvbGwoKSBvciBzZWxlY3QoKSBi ZWZvcmUgZWFjaCBjYWxsIHRvCisgKiB4ZW5ldnRjaG5fcGVuZGluZy7CoMKgSWYgeW91IGhhdmUg bXVsdGlwbGUgdGhyZWFkcyAob3IgcHJvY2Vzc2VzKQorICogc2hhcmluZyBhIHNpbmdsZSB4Y2Ug aGFuZGxlIHRoaXMgd2lsbCBub3Qgd29yaywgYW5kIHRoZXJlIGlzIG5vCisgKiBzdHJhaWdodGZv cndhcmQgd29ya2Fyb3VuZC7CoMKgUGxlYXNlIGRlc2lnbiB5b3VyIHByb2dyYW0gc29tZSBvdGhl cgorICogd2F5LgorICovCitpbnQgeGVuZXZ0Y2huX2ZkKHhlbmV2dGNobl9oYW5kbGUgKnhjZSk7 CisKKy8qCisgKiBOb3RpZnkgdGhlIGdpdmVuIGV2ZW50IGNoYW5uZWwuIFJldHVybnMgLTEgb24g ZmFpbHVyZSwgaW4gd2hpY2ggY2FzZQorICogZXJybm8gd2lsbCBiZSBzZXQgYXBwcm9wcmlhdGVs eS4KKyAqLworaW50IHhlbmV2dGNobl9ub3RpZnkoeGVuZXZ0Y2huX2hhbmRsZSAqeGNlLCBldnRj aG5fcG9ydF90IHBvcnQpOworCisvKgorICogUmV0dXJucyBhIG5ldyBldmVudCBwb3J0IGF3YWl0 aW5nIGludGVyZG9tYWluIGNvbm5lY3Rpb24gZnJvbSB0aGUgZ2l2ZW4KKyAqIGRvbWFpbiBJRCwg b3IgLTEgb24gZmFpbHVyZSwgaW4gd2hpY2ggY2FzZSBlcnJubyB3aWxsIGJlIHNldCBhcHByb3By aWF0ZWx5LgorICovCitldnRjaG5fcG9ydF9vcl9lcnJvcl90Cit4ZW5ldnRjaG5fYmluZF91bmJv dW5kX3BvcnQoeGVuZXZ0Y2huX2hhbmRsZSAqeGNlLCBpbnQgZG9taWQpOworCisvKgorICogUmV0 dXJucyBhIG5ldyBldmVudCBwb3J0IGJvdW5kIHRvIHRoZSByZW1vdGUgcG9ydCBmb3IgdGhlIGdp dmVuIGRvbWFpbiBJRCwKKyAqIG9yIC0xIG9uIGZhaWx1cmUsIGluIHdoaWNoIGNhc2UgZXJybm8g d2lsbCBiZSBzZXQgYXBwcm9wcmlhdGVseS4KKyAqLworZXZ0Y2huX3BvcnRfb3JfZXJyb3JfdAor eGVuZXZ0Y2huX2JpbmRfaW50ZXJkb21haW4oeGVuZXZ0Y2huX2hhbmRsZSAqeGNlLCBpbnQgZG9t aWQsCivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBldnRjaG5fcG9ydF90IHJlbW90ZV9wb3J0KTsKKworLyoKKyAqIEJpbmQgYW4gZXZlbnQgY2hh bm5lbCB0byB0aGUgZ2l2ZW4gVklSUS4gUmV0dXJucyB0aGUgZXZlbnQgY2hhbm5lbCBib3VuZCB0 bworICogdGhlIFZJUlEsIG9yIC0xIG9uIGZhaWx1cmUsIGluIHdoaWNoIGNhc2UgZXJybm8gd2ls bCBiZSBzZXQgYXBwcm9wcmlhdGVseS4KKyAqLworZXZ0Y2huX3BvcnRfb3JfZXJyb3JfdAoreGVu ZXZ0Y2huX2JpbmRfdmlycSh4ZW5ldnRjaG5faGFuZGxlICp4Y2UsIHVuc2lnbmVkIGludCB2aXJx KTsKKworLyoKKyAqIFVuYmluZCB0aGUgZ2l2ZW4gZXZlbnQgY2hhbm5lbC4gUmV0dXJucyAtMSBv biBmYWlsdXJlLCBpbiB3aGljaCBjYXNlIGVycm5vCisgKiB3aWxsIGJlIHNldCBhcHByb3ByaWF0 ZWx5LgorICovCitpbnQgeGVuZXZ0Y2huX3VuYmluZCh4ZW5ldnRjaG5faGFuZGxlICp4Y2UsIGV2 dGNobl9wb3J0X3QgcG9ydCk7CisKKy8qCisgKiBSZXR1cm4gdGhlIG5leHQgZXZlbnQgY2hhbm5l bCB0byBiZWNvbWUgcGVuZGluZywgb3IgLTEgb24gZmFpbHVyZSwgaW4gd2hpY2gKKyAqIGNhc2Ug ZXJybm8gd2lsbCBiZSBzZXQgYXBwcm9wcmlhdGVseS4KKyAqCisgKiBBdCB0aGUgaHlwZXJ2aXNv ciBsZXZlbCB0aGUgZXZlbnQgY2hhbm5lbCB3aWxsIGhhdmUgYmVlbiBtYXNrZWQsCisgKiBhbmQg dGhlbiBjbGVhcmVkLCBieSB0aGUgdW5kZXJseWluZyBtYWNoaW5lcnkgKGV2dGNobiBrZXJuZWwK KyAqIGRyaXZlciwgb3IgZXF1aXZhbGVudCkuwqDCoFNvIGlmIHRoZSBldmVudCBjaGFubmVsIGlz IHNpZ25hbGVkIGFnYWluCisgKiBhZnRlciBpdCBpcyByZXR1cm5lZCBoZXJlLCBpdCB3aWxsIGJl IHF1ZXVlZCB1cCwgYW5kIGRlbGl2ZXJlZAorICogYWdhaW4gYWZ0ZXIgeW91IHVubWFzayBpdC7C oMKgKFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBpbiB0aGUgWGVuCisgKiBwdWJsaWMgaGVhZGVyIGV2 ZW50X2NoYW5uZWwuaC4pCisgKgorICogT24gcmVjZWl2aW5nIHRoZSBub3RpZmljYXRpb24gZnJv bSB4ZW5ldnRjaG5fcGVuZGluZywgeW91IHNob3VsZAorICogbm9ybWFsbHk6IGNoZWNrIChieSBv dGhlciBtZWFucykgd2hhdCB3b3JrIG5lZWRzIGRvaW5nOyBkbyB0aGUKKyAqIG5lY2Vzc2FyeSB3 b3JrIChpZiBhbnkpOyB1bm1hc2sgdGhlIGV2ZW50IGNoYW5uZWwgd2l0aAorICogeGVuZXZ0Y2hu X3VubWFzayAoaWYgeW91IHdhbnQgdG8gcmVjZWl2ZSBhbnkgZnVydGhlcgorICogbm90aWZpY2F0 aW9ucykuCisgKi8KK2V2dGNobl9wb3J0X29yX2Vycm9yX3QKK3hlbmV2dGNobl9wZW5kaW5nKHhl bmV2dGNobl9oYW5kbGUgKnhjZSk7CisKKy8qCisgKiBVbm1hc2sgdGhlIGdpdmVuIGV2ZW50IGNo YW5uZWwuIFJldHVybnMgLTEgb24gZmFpbHVyZSwgaW4gd2hpY2ggY2FzZSBlcnJubworICogd2ls bCBiZSBzZXQgYXBwcm9wcmlhdGVseS4KKyAqLworaW50IHhlbmV2dGNobl91bm1hc2soeGVuZXZ0 Y2huX2hhbmRsZSAqeGNlLCBldnRjaG5fcG9ydF90IHBvcnQpOworCisjZW5kaWYKKworLyoKKyAq IExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKKyAq IGMtYmFzaWMtb2Zmc2V0OiA0CisgKiB0YWItd2lkdGg6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6 IG5pbAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS90b29scy9saWJzL2V2dGNobi9saWJ4ZW5l dnRjaG4ubWFwIGIvdG9vbHMvbGlicy9ldnRjaG4vbGlieGVuZXZ0Y2huLm1hcApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjVhMWUyCi0tLSAvZGV2L251bGwKKysrIGIvdG9v bHMvbGlicy9ldnRjaG4vbGlieGVuZXZ0Y2huLm1hcApAQCAtMCwwICsxLDE5IEBACitWRVJTXzEu MCB7CisJZ2xvYmFsOgorCQl4ZW5ldnRjaG5fb3BlbjsKKwkJeGVuZXZ0Y2huX2Nsb3NlOworCisJ CXhlbmV2dGNobl9mZDsKKworCQl4ZW5ldnRjaG5fYmluZF91bmJvdW5kX3BvcnQ7CisJCXhlbmV2 dGNobl9iaW5kX2ludGVyZG9tYWluOworCQl4ZW5ldnRjaG5fYmluZF92aXJxOworCisJCXhlbmV2 dGNobl9ub3RpZnk7CisKKwkJeGVuZXZ0Y2huX3VuYmluZDsKKwkJeGVuZXZ0Y2huX3VubWFzazsK KworCQl4ZW5ldnRjaG5fcGVuZGluZzsKKwlsb2NhbDogKjsgLyogRG8gbm90IGV4cG9zZSBhbnl0 aGluZyBieSBkZWZhdWx0ICovCit9OwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlicy9ldnRjaG4vbGlu dXguYyBiL3Rvb2xzL2xpYnMvZXZ0Y2huL2xpbnV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uMjdmZDZlOQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2xpYnMvZXZ0Y2hu L2xpbnV4LmMKQEAgLTAsMCArMSwxMzYgQEAKKy8qCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICogdmVyc2lv biAyLjEgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLsKgwqBTZWUgdGhl IEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBJZiBu b3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICogU3BsaXQgb3V0 IGZyb20geGNfbGludXNfb3NkZXAuYzoKKyAqCisgKiBDb3B5cmlnaHQgMjAwNiBTdW4gTWljcm9z eXN0ZW1zLCBJbmMuwqDCoEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKi8KKworI2luY2x1ZGUgPGVy cm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRl IDxzdGRsaWIuaD4KKworI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorCisjaW5jbHVkZSA8eGVuL3N5 cy9ldnRjaG4uaD4KKworI2luY2x1ZGUgInByaXZhdGUuaCIKKworaW50IG9zZGVwX2V2dGNobl9v cGVuKHhlbmV2dGNobl9oYW5kbGUgKnhjZSkKK3sKK8KgwqDCoMKgaW50IGZkID0gb3BlbigiL2Rl di94ZW4vZXZ0Y2huIiwgT19SRFdSKTsKK8KgwqDCoMKgaWYgKCBmZCA9PSAtMSApCivCoMKgwqDC oMKgwqDCoMKgcmV0dXJuIC0xOworwqDCoMKgwqB4Y2UtPmZkID0gZmQ7CivCoMKgwqDCoHJldHVy biAwOworfQorCitpbnQgb3NkZXBfZXZ0Y2huX2Nsb3NlKHhlbmV2dGNobl9oYW5kbGUgKnhjZSkK K3sKK8KgwqDCoMKgaWYgKCB4Y2UtPmZkID09IC0xICkKK8KgwqDCoMKgwqDCoMKgwqByZXR1cm4g MDsKKworwqDCoMKgwqByZXR1cm4gY2xvc2UoeGNlLT5mZCk7Cit9CisKK2ludCB4ZW5ldnRjaG5f ZmQoeGVuZXZ0Y2huX2hhbmRsZSAqeGNlKQoreworwqDCoMKgwqByZXR1cm4geGNlLT5mZDsKK30K KworaW50IHhlbmV2dGNobl9ub3RpZnkoeGVuZXZ0Y2huX2hhbmRsZSAqeGNlLCBldnRjaG5fcG9y dF90IHBvcnQpCit7CivCoMKgwqDCoGludCBmZCA9IHhjZS0+ZmQ7CivCoMKgwqDCoHN0cnVjdCBp b2N0bF9ldnRjaG5fbm90aWZ5IG5vdGlmeTsKKworwqDCoMKgwqBub3RpZnkucG9ydCA9IHBvcnQ7 CisKK8KgwqDCoMKgcmV0dXJuIGlvY3RsKGZkLCBJT0NUTF9FVlRDSE5fTk9USUZZLCAmbm90aWZ5 KTsKK30KKworZXZ0Y2huX3BvcnRfb3JfZXJyb3JfdCB4ZW5ldnRjaG5fYmluZF91bmJvdW5kX3Bv cnQoeGVuZXZ0Y2huX2hhbmRsZSAqeGNlLAorwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgaW50IGRvbWlkKQoreworwqDCoMKgwqBpbnQgZmQgPSB4Y2UtPmZkOwor wqDCoMKgwqBzdHJ1Y3QgaW9jdGxfZXZ0Y2huX2JpbmRfdW5ib3VuZF9wb3J0IGJpbmQ7CisKK8Kg wqDCoMKgYmluZC5yZW1vdGVfZG9tYWluID0gZG9taWQ7CisKK8KgwqDCoMKgcmV0dXJuIGlvY3Rs KGZkLCBJT0NUTF9FVlRDSE5fQklORF9VTkJPVU5EX1BPUlQsICZiaW5kKTsKK30KKworZXZ0Y2hu X3BvcnRfb3JfZXJyb3JfdCB4ZW5ldnRjaG5fYmluZF9pbnRlcmRvbWFpbih4ZW5ldnRjaG5faGFu ZGxlICp4Y2UsCivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW50 IGRvbWlkLAorwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGV2dGNo bl9wb3J0X3QgcmVtb3RlX3BvcnQpCit7CivCoMKgwqDCoGludCBmZCA9IHhjZS0+ZmQ7CivCoMKg wqDCoHN0cnVjdCBpb2N0bF9ldnRjaG5fYmluZF9pbnRlcmRvbWFpbiBiaW5kOworCivCoMKgwqDC oGJpbmQucmVtb3RlX2RvbWFpbiA9IGRvbWlkOworwqDCoMKgwqBiaW5kLnJlbW90ZV9wb3J0ID0g cmVtb3RlX3BvcnQ7CisKK8KgwqDCoMKgcmV0dXJuIGlvY3RsKGZkLCBJT0NUTF9FVlRDSE5fQklO RF9JTlRFUkRPTUFJTiwgJmJpbmQpOworfQorCitldnRjaG5fcG9ydF9vcl9lcnJvcl90IHhlbmV2 dGNobl9iaW5kX3ZpcnEoeGVuZXZ0Y2huX2hhbmRsZSAqeGNlLAorwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB1bnNpZ25lZCBpbnQgdmlycSkKK3sKK8KgwqDCoMKgaW50IGZkID0geGNlLT5m ZDsKK8KgwqDCoMKgc3RydWN0IGlvY3RsX2V2dGNobl9iaW5kX3ZpcnEgYmluZDsKKworwqDCoMKg wqBiaW5kLnZpcnEgPSB2aXJxOworCivCoMKgwqDCoHJldHVybiBpb2N0bChmZCwgSU9DVExfRVZU Q0hOX0JJTkRfVklSUSwgJmJpbmQpOworfQorCitpbnQgeGVuZXZ0Y2huX3VuYmluZCh4ZW5ldnRj aG5faGFuZGxlICp4Y2UsIGV2dGNobl9wb3J0X3QgcG9ydCkKK3sKK8KgwqDCoMKgaW50IGZkID0g eGNlLT5mZDsKK8KgwqDCoMKgc3RydWN0IGlvY3RsX2V2dGNobl91bmJpbmQgdW5iaW5kOworCivC oMKgwqDCoHVuYmluZC5wb3J0ID0gcG9ydDsKKworwqDCoMKgwqByZXR1cm4gaW9jdGwoZmQsIElP Q1RMX0VWVENITl9VTkJJTkQsICZ1bmJpbmQpOworfQorCitldnRjaG5fcG9ydF9vcl9lcnJvcl90 IHhlbmV2dGNobl9wZW5kaW5nKHhlbmV2dGNobl9oYW5kbGUgKnhjZSkKK3sKK8KgwqDCoMKgaW50 IGZkID0geGNlLT5mZDsKK8KgwqDCoMKgZXZ0Y2huX3BvcnRfdCBwb3J0OworCivCoMKgwqDCoGlm ICggcmVhZChmZCwgJnBvcnQsIHNpemVvZihwb3J0KSkgIT0gc2l6ZW9mKHBvcnQpICkKK8KgwqDC oMKgwqDCoMKgwqByZXR1cm4gLTE7CisKK8KgwqDCoMKgcmV0dXJuIHBvcnQ7Cit9CisKK2ludCB4 ZW5ldnRjaG5fdW5tYXNrKHhlbmV2dGNobl9oYW5kbGUgKnhjZSwgZXZ0Y2huX3BvcnRfdCBwb3J0 KQoreworwqDCoMKgwqBpbnQgZmQgPSB4Y2UtPmZkOworCivCoMKgwqDCoGlmICggd3JpdGUoZmQs ICZwb3J0LCBzaXplb2YocG9ydCkpICE9IHNpemVvZihwb3J0KSApCivCoMKgwqDCoMKgwqDCoMKg cmV0dXJuIC0xOworwqDCoMKgwqByZXR1cm4gMDsKK30KKworLyoKKyAqIExvY2FsIHZhcmlhYmxl czoKKyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKKyAqIGMtYmFzaWMtb2Zmc2V0 OiA0CisgKiB0YWItd2lkdGg6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAorICogRW5kOgor ICovCmRpZmYgLS1naXQgYS90b29scy9saWJzL2V2dGNobi9taW5pb3MuYyBiL3Rvb2xzL2xpYnMv ZXZ0Y2huL21pbmlvcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiOTEz YTIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9saWJzL2V2dGNobi9taW5pb3MuYwpAQCAtMCww ICsxLDI2OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodCAyMDA3 LTIwMDggU2FtdWVsIFRoaWJhdWx0IDxzYW11ZWwudGhpYmF1bHRAZXUuY2l0cml4LmNvbT4uCisg KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJt cy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UuCisg KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLsKgwqBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNl bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUu b3JnL2xpY2Vuc2VzLz4uCisgKgorICogU3BsaXQgb2ZmIGZyb20geGNfbWluaW9zLmMKKyAqLwor CisjaW5jbHVkZSAieGVuLWV4dGVybmFsL2JzZC1zeXMtcXVldWUuaCIKKyNpbmNsdWRlIDxtaW5p LW9zL3R5cGVzLmg+CisjaW5jbHVkZSA8bWluaS1vcy9vcy5oPgorI2luY2x1ZGUgPG1pbmktb3Mv bGliLmg+CisjaW5jbHVkZSA8bWluaS1vcy9ldmVudHMuaD4KKyNpbmNsdWRlIDxtaW5pLW9zL3dh aXQuaD4KKworI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworI2luY2x1ZGUgPGFzc2VydC5oPgor I2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRpby5o PgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8 bWFsbG9jLmg+CisKKyNpbmNsdWRlICJwcml2YXRlLmgiCisKK2V4dGVybiB2b2lkIG1pbmlvc19l dnRjaG5fY2xvc2VfZmQoaW50IGZkKTsKKworZXh0ZXJuIHN0cnVjdCB3YWl0X3F1ZXVlX2hlYWQg ZXZlbnRfcXVldWU7CisKKy8vdm9pZCBtaW5pb3NfZXZ0Y2huX2Nsb3NlX2ZkKGludCBmZCk7CisK Ky8qIFhYWCBOb3RlOiBUaGlzIGlzIG5vdCB0aHJlYWRzYWZlICovCitzdGF0aWMgc3RydWN0IGV2 dGNobl9wb3J0X2luZm8qIHBvcnRfYWxsb2MoaW50IGZkKSB7CivCoMKgwqDCoHN0cnVjdCBldnRj aG5fcG9ydF9pbmZvICpwb3J0X2luZm87CivCoMKgwqDCoHBvcnRfaW5mbyA9IG1hbGxvYyhzaXpl b2Yoc3RydWN0IGV2dGNobl9wb3J0X2luZm8pKTsKK8KgwqDCoMKgaWYgKHBvcnRfaW5mbyA9PSBO VUxMKQorwqDCoMKgwqDCoMKgwqDCoHJldHVybiBOVUxMOworwqDCoMKgwqBwb3J0X2luZm8tPnBl bmRpbmcgPSAwOworwqDCoMKgwqBwb3J0X2luZm8tPnBvcnQgPSAtMTsKK8KgwqDCoMKgcG9ydF9p bmZvLT5ib3VuZCA9IDA7CisKK8KgwqDCoMKgTElTVF9JTlNFUlRfSEVBRCgmZmlsZXNbZmRdLmV2 dGNobi5wb3J0cywgcG9ydF9pbmZvLCBsaXN0KTsKK8KgwqDCoMKgcmV0dXJuIHBvcnRfaW5mbzsK K30KKworc3RhdGljIHZvaWQgcG9ydF9kZWFsbG9jKHN0cnVjdCBldnRjaG5fcG9ydF9pbmZvICpw b3J0X2luZm8pIHsKK8KgwqDCoMKgaWYgKHBvcnRfaW5mby0+Ym91bmQpCivCoMKgwqDCoMKgwqDC oMKgdW5iaW5kX2V2dGNobihwb3J0X2luZm8tPnBvcnQpOworwqDCoMKgwqBMSVNUX1JFTU9WRShw b3J0X2luZm8sIGxpc3QpOworwqDCoMKgwqBmcmVlKHBvcnRfaW5mbyk7Cit9CisKK2ludCBvc2Rl cF9ldnRjaG5fb3Blbih4ZW5ldnRjaG5faGFuZGxlICp4Y2UpCit7CivCoMKgwqDCoGludCBmZCA9 IGFsbG9jX2ZkKEZUWVBFX0VWVENITik7CivCoMKgwqDCoGlmICggZmQgPT0gLTEgKQorwqDCoMKg wqDCoMKgwqDCoHJldHVybiAtMTsKK8KgwqDCoMKgTElTVF9JTklUKCZmaWxlc1tmZF0uZXZ0Y2hu LnBvcnRzKTsKK8KgwqDCoMKgeGNlLT5mZCA9IGZkOworwqDCoMKgwqBwcmludGYoImV2dGNobl9v cGVuKCkgLT4gJWRcbiIsIGZkKTsKK8KgwqDCoMKgcmV0dXJuIDA7Cit9CisKK2ludCBvc2RlcF9l dnRjaG5fY2xvc2UoeGVuZXZ0Y2huX2hhbmRsZSAqeGNlKQoreworwqDCoMKgwqBpZiAoIHhjZS0+ ZmQgPT0gLTEgKQorwqDCoMKgwqDCoMKgwqDCoHJldHVybiAwOworCivCoMKgwqDCoHJldHVybiBj bG9zZSh4Y2UtPmZkKTsKK30KKwordm9pZCBtaW5pb3NfZXZ0Y2huX2Nsb3NlX2ZkKGludCBmZCkK K3sKK8KgwqDCoMKgc3RydWN0IGV2dGNobl9wb3J0X2luZm8gKnBvcnRfaW5mbywgKnRtcDsKK8Kg wqDCoMKgTElTVF9GT1JFQUNIX1NBRkUocG9ydF9pbmZvLCAmZmlsZXNbZmRdLmV2dGNobi5wb3J0 cywgbGlzdCwgdG1wKQorwqDCoMKgwqDCoMKgwqDCoHBvcnRfZGVhbGxvYyhwb3J0X2luZm8pOwor CivCoMKgwqDCoGZpbGVzW2ZkXS50eXBlID0gRlRZUEVfTk9ORTsKK30KKworaW50IHhlbmV2dGNo bl9mZCh4ZW5ldnRjaG5faGFuZGxlICp4Y2UpCit7CivCoMKgwqDCoHJldHVybiB4Y2UtPmZkOwor fQorCitpbnQgeGVuZXZ0Y2huX25vdGlmeSh4ZW5ldnRjaG5faGFuZGxlICp4Y2UsIGV2dGNobl9w b3J0X3QgcG9ydCkKK3sKK8KgwqDCoMKgaW50IHJldDsKKworwqDCoMKgwqByZXQgPSBub3RpZnlf cmVtb3RlX3ZpYV9ldnRjaG4ocG9ydCk7CisKK8KgwqDCoMKgaWYgKHJldCA8IDApIHsKKwllcnJu byA9IC1yZXQ7CisJcmV0ID0gLTE7CivCoMKgwqDCoH0KK8KgwqDCoMKgcmV0dXJuIHJldDsKK30K Kworc3RhdGljIHZvaWQgZXZ0Y2huX2hhbmRsZXIoZXZ0Y2huX3BvcnRfdCBwb3J0LCBzdHJ1Y3Qg cHRfcmVncyAqcmVncywgdm9pZCAqZGF0YSkKK3sKK8KgwqDCoMKgaW50IGZkID0gKGludCkoaW50 cHRyX3QpZGF0YTsKK8KgwqDCoMKgc3RydWN0IGV2dGNobl9wb3J0X2luZm8gKnBvcnRfaW5mbzsK K8KgwqDCoMKgYXNzZXJ0KGZpbGVzW2ZkXS50eXBlID09IEZUWVBFX0VWVENITik7CivCoMKgwqDC oG1hc2tfZXZ0Y2huKHBvcnQpOworwqDCoMKgwqBMSVNUX0ZPUkVBQ0gocG9ydF9pbmZvLCAmZmls ZXNbZmRdLmV2dGNobi5wb3J0cywgbGlzdCkgeworwqDCoMKgwqDCoMKgwqDCoGlmIChwb3J0X2lu Zm8tPnBvcnQgPT0gcG9ydCkKK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gZm91bmQ7CivC oMKgwqDCoH0KK8KgwqDCoMKgcHJpbnRrKCJVbmtub3duIHBvcnQgZm9yIGhhbmRsZSAlZFxuIiwg ZmQpOworwqDCoMKgwqByZXR1cm47CisKKyBmb3VuZDoKK8KgwqDCoMKgcG9ydF9pbmZvLT5wZW5k aW5nID0gMTsKK8KgwqDCoMKgZmlsZXNbZmRdLnJlYWQgPSAxOworwqDCoMKgwqB3YWtlX3VwKCZl dmVudF9xdWV1ZSk7Cit9CisKK2V2dGNobl9wb3J0X29yX2Vycm9yX3QgeGVuZXZ0Y2huX2JpbmRf dW5ib3VuZF9wb3J0KHhlbmV2dGNobl9oYW5kbGUgKnhjZSwgaW50IGRvbWlkKQoreworwqDCoMKg wqBpbnQgZmQgPSB4Y2UtPmZkOworwqDCoMKgwqBzdHJ1Y3QgZXZ0Y2huX3BvcnRfaW5mbyAqcG9y dF9pbmZvOworwqDCoMKgwqBpbnQgcmV0OworwqDCoMKgwqBldnRjaG5fcG9ydF90IHBvcnQ7CisK K8KgwqDCoMKgYXNzZXJ0KGdldF9jdXJyZW50KCkgPT0gbWFpbl90aHJlYWQpOworwqDCoMKgwqBw b3J0X2luZm8gPSBwb3J0X2FsbG9jKGZkKTsKK8KgwqDCoMKgaWYgKHBvcnRfaW5mbyA9PSBOVUxM KQorCXJldHVybiAtMTsKKworwqDCoMKgwqBwcmludGYoInhlbmV2dGNobl9iaW5kX3VuYm91bmRf cG9ydCglZCkiLCBkb21pZCk7CivCoMKgwqDCoHJldCA9IGV2dGNobl9hbGxvY191bmJvdW5kKGRv bWlkLCBldnRjaG5faGFuZGxlciwgKHZvaWQqKShpbnRwdHJfdClmZCwgJnBvcnQpOworwqDCoMKg wqBwcmludGYoIiA9ICVkXG4iLCByZXQpOworCivCoMKgwqDCoGlmIChyZXQgPCAwKSB7CisJcG9y dF9kZWFsbG9jKHBvcnRfaW5mbyk7CisJZXJybm8gPSAtcmV0OworCXJldHVybiAtMTsKK8KgwqDC oMKgfQorwqDCoMKgwqBwb3J0X2luZm8tPmJvdW5kID0gMTsKK8KgwqDCoMKgcG9ydF9pbmZvLT5w b3J0ID0gcG9ydDsKK8KgwqDCoMKgdW5tYXNrX2V2dGNobihwb3J0KTsKK8KgwqDCoMKgcmV0dXJu IHBvcnQ7Cit9CisKK2V2dGNobl9wb3J0X29yX2Vycm9yX3QgeGVuZXZ0Y2huX2JpbmRfaW50ZXJk b21haW4oeGVuZXZ0Y2huX2hhbmRsZSAqeGNlLCBpbnQgZG9taWQsCivCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZXZ0Y2huX3BvcnRfdCByZW1vdGVfcG9ydCkKK3sK K8KgwqDCoMKgaW50IGZkID0geGNlLT5mZDsKK8KgwqDCoMKgc3RydWN0IGV2dGNobl9wb3J0X2lu Zm8gKnBvcnRfaW5mbzsKK8KgwqDCoMKgZXZ0Y2huX3BvcnRfdCBsb2NhbF9wb3J0OworwqDCoMKg wqBpbnQgcmV0OworCivCoMKgwqDCoGFzc2VydChnZXRfY3VycmVudCgpID09IG1haW5fdGhyZWFk KTsKK8KgwqDCoMKgcG9ydF9pbmZvID0gcG9ydF9hbGxvYyhmZCk7CivCoMKgwqDCoGlmIChwb3J0 X2luZm8gPT0gTlVMTCkKKwlyZXR1cm4gLTE7CisKK8KgwqDCoMKgcHJpbnRmKCJ4ZW5ldnRjaG5f YmluZF9pbnRlcmRvbWFpbiglZCwgJSJQUklkMzIiKSIsIGRvbWlkLCByZW1vdGVfcG9ydCk7CivC oMKgwqDCoHJldCA9IGV2dGNobl9iaW5kX2ludGVyZG9tYWluKGRvbWlkLCByZW1vdGVfcG9ydCwg ZXZ0Y2huX2hhbmRsZXIsICh2b2lkKikoaW50cHRyX3QpZmQsICZsb2NhbF9wb3J0KTsKK8KgwqDC oMKgcHJpbnRmKCIgPSAlZFxuIiwgcmV0KTsKKworwqDCoMKgwqBpZiAocmV0IDwgMCkgeworCXBv cnRfZGVhbGxvYyhwb3J0X2luZm8pOworCWVycm5vID0gLXJldDsKKwlyZXR1cm4gLTE7CivCoMKg wqDCoH0KK8KgwqDCoMKgcG9ydF9pbmZvLT5ib3VuZCA9IDE7CivCoMKgwqDCoHBvcnRfaW5mby0+ cG9ydCA9IGxvY2FsX3BvcnQ7CivCoMKgwqDCoHVubWFza19ldnRjaG4obG9jYWxfcG9ydCk7CivC oMKgwqDCoHJldHVybiBsb2NhbF9wb3J0OworfQorCitpbnQgeGVuZXZ0Y2huX3VuYmluZCh4ZW5l dnRjaG5faGFuZGxlICp4Y2UsIGV2dGNobl9wb3J0X3QgcG9ydCkKK3sKK8KgwqDCoMKgaW50IGZk ID0geGNlLT5mZDsKK8KgwqDCoMKgc3RydWN0IGV2dGNobl9wb3J0X2luZm8gKnBvcnRfaW5mbzsK KworwqDCoMKgwqBMSVNUX0ZPUkVBQ0gocG9ydF9pbmZvLCAmZmlsZXNbZmRdLmV2dGNobi5wb3J0 cywgbGlzdCkgeworwqDCoMKgwqDCoMKgwqDCoGlmIChwb3J0X2luZm8tPnBvcnQgPT0gcG9ydCkg eworwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcG9ydF9kZWFsbG9jKHBvcnRfaW5mbyk7CivCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKK8KgwqDCoMKgwqDCoMKgwqB9CivCoMKgwqDC oH0KK8KgwqDCoMKgcHJpbnRmKCJXYXJuaW5nOiBjb3VsZG4ndCBmaW5kIHBvcnQgJSJQUklkMzIi IGZvciB4YyBoYW5kbGUgJXhcbiIsIHBvcnQsIGZkKTsKK8KgwqDCoMKgZXJybm8gPSBFSU5WQUw7 CivCoMKgwqDCoHJldHVybiAtMTsKK30KKworZXZ0Y2huX3BvcnRfb3JfZXJyb3JfdCB4ZW5ldnRj aG5fYmluZF92aXJxKHhlbmV2dGNobl9oYW5kbGUgKnhjZSwgdW5zaWduZWQgaW50IHZpcnEpCit7 CivCoMKgwqDCoGludCBmZCA9IHhjZS0+ZmQ7CivCoMKgwqDCoHN0cnVjdCBldnRjaG5fcG9ydF9p bmZvICpwb3J0X2luZm87CivCoMKgwqDCoGV2dGNobl9wb3J0X3QgcG9ydDsKKworwqDCoMKgwqBh c3NlcnQoZ2V0X2N1cnJlbnQoKSA9PSBtYWluX3RocmVhZCk7CivCoMKgwqDCoHBvcnRfaW5mbyA9 IHBvcnRfYWxsb2MoZmQpOworwqDCoMKgwqBpZiAocG9ydF9pbmZvID09IE5VTEwpCisJcmV0dXJu IC0xOworCivCoMKgwqDCoHByaW50ZigieGVuZXZ0Y2huX2JpbmRfdmlycSglZCkiLCB2aXJxKTsK K8KgwqDCoMKgcG9ydCA9IGJpbmRfdmlycSh2aXJxLCBldnRjaG5faGFuZGxlciwgKHZvaWQqKShp bnRwdHJfdClmZCk7CisKK8KgwqDCoMKgaWYgKHBvcnQgPCAwKSB7CisJcG9ydF9kZWFsbG9jKHBv cnRfaW5mbyk7CisJZXJybm8gPSAtcG9ydDsKKwlyZXR1cm4gLTE7CivCoMKgwqDCoH0KK8KgwqDC oMKgcG9ydF9pbmZvLT5ib3VuZCA9IDE7CivCoMKgwqDCoHBvcnRfaW5mby0+cG9ydCA9IHBvcnQ7 CivCoMKgwqDCoHVubWFza19ldnRjaG4ocG9ydCk7CivCoMKgwqDCoHJldHVybiBwb3J0OworfQor CitldnRjaG5fcG9ydF9vcl9lcnJvcl90IHhlbmV2dGNobl9wZW5kaW5nKHhlbmV2dGNobl9oYW5k bGUgKnhjZSkKK3sKK8KgwqDCoMKgaW50IGZkID0geGNlLT5mZDsKK8KgwqDCoMKgc3RydWN0IGV2 dGNobl9wb3J0X2luZm8gKnBvcnRfaW5mbzsKK8KgwqDCoMKgdW5zaWduZWQgbG9uZyBmbGFnczsK K8KgwqDCoMKgZXZ0Y2huX3BvcnRfdCByZXQgPSAtMTsKKworwqDCoMKgwqBsb2NhbF9pcnFfc2F2 ZShmbGFncyk7CivCoMKgwqDCoGZpbGVzW2ZkXS5yZWFkID0gMDsKKworwqDCoMKgwqBMSVNUX0ZP UkVBQ0gocG9ydF9pbmZvLCAmZmlsZXNbZmRdLmV2dGNobi5wb3J0cywgbGlzdCkgeworwqDCoMKg wqDCoMKgwqDCoGlmIChwb3J0X2luZm8tPnBvcnQgIT0gLTEgJiYgcG9ydF9pbmZvLT5wZW5kaW5n KSB7CivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocmV0ID09IC0xKSB7CivCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IHBvcnRfaW5mby0+cG9ydDsKK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcG9ydF9pbmZvLT5wZW5kaW5nID0gMDsKK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoH0gZWxzZSB7CivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZp bGVzW2ZkXS5yZWFkID0gMTsKK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7 CivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9CivCoMKgwqDCoMKgwqDCoMKgfQorwqDCoMKgwqB9 CivCoMKgwqDCoGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK8KgwqDCoMKgcmV0dXJuIHJldDsK K30KKworaW50IHhlbmV2dGNobl91bm1hc2soeGVuZXZ0Y2huX2hhbmRsZSAqeGNlLCBldnRjaG5f cG9ydF90IHBvcnQpCit7CivCoMKgwqDCoHVubWFza19ldnRjaG4ocG9ydCk7CivCoMKgwqDCoHJl dHVybiAwOworfQorCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9kZTogQworICogYy1m aWxlLXN0eWxlOiAiQlNEIgorICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIHRhYi13aWR0aDogNAor ICogaW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL3Rvb2xz L2xpYnMvZXZ0Y2huL25ldGJzZC5jIGIvdG9vbHMvbGlicy9ldnRjaG4vbmV0YnNkLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQxMjNmZQotLS0gL2Rldi9udWxsCisrKyBi L3Rvb2xzL2xpYnMvZXZ0Y2huL25ldGJzZC5jCkBAIC0wLDAgKzEsMTQ3IEBACisvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0IDIwMDYgU3VuIE1pY3Jvc3lzdGVtcywgSW5j LsKgwqBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0 ZXJtcy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2Uu CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLsKgwqBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBM aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICogU3BsaXQgb3V0IGZyb20geGNfbmV0YnNkLmMKKyAq LworCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUg PHN5cy9pb2N0bC5oPgorCisjaW5jbHVkZSA8eGVuL3N5cy9ldnRjaG4uaD4KKworI2luY2x1ZGUg InByaXZhdGUuaCIKKworI2RlZmluZSBFVlRDSE5fREVWX05BTUXCoMKgIi9kZXYveGVuZXZ0Igor CitpbnQgb3NkZXBfZXZ0Y2huX29wZW4oeGVuZXZ0Y2huX2hhbmRsZSAqeGNlKQoreworwqDCoMKg wqBpbnQgZmQgPSBvcGVuKEVWVENITl9ERVZfTkFNRSwgT19OT05CTE9DS3xPX1JEV1IpOworwqDC oMKgwqBpZiAoIGZkID09IC0xICkKK8KgwqDCoMKgwqDCoMKgwqByZXR1cm4gLTE7CivCoMKgwqDC oHhjZS0+ZmQgPSBmZDsKK8KgwqDCoMKgcmV0dXJuIDA7Cit9CisKK2ludCBvc2RlcF9ldnRjaG5f Y2xvc2UoeGVuZXZ0Y2huX2hhbmRsZSAqeGNlKQoreworwqDCoMKgwqBpZiAoIHhjZS0+ZmQgPT0g LTEgKQorwqDCoMKgwqDCoMKgwqDCoHJldHVybiAwOworCivCoMKgwqDCoHJldHVybiBjbG9zZSh4 Y2UtPmZkKTsKK30KKworaW50IHhlbmV2dGNobl9mZCh4ZW5ldnRjaG5faGFuZGxlICp4Y2UpCit7 CivCoMKgwqDCoHJldHVybiB4Y2UtPmZkOworfQorCitpbnQgeGVuZXZ0Y2huX25vdGlmeSh4ZW5l dnRjaG5faGFuZGxlICp4Y2UsIGV2dGNobl9wb3J0X3QgcG9ydCkKK3sKK8KgwqDCoMKgaW50IGZk ID0geGNlLT5mZDsKK8KgwqDCoMKgc3RydWN0IGlvY3RsX2V2dGNobl9ub3RpZnkgbm90aWZ5Owor CivCoMKgwqDCoG5vdGlmeS5wb3J0ID0gcG9ydDsKKworwqDCoMKgwqByZXR1cm4gaW9jdGwoZmQs IElPQ1RMX0VWVENITl9OT1RJRlksICZub3RpZnkpOworfQorCitldnRjaG5fcG9ydF9vcl9lcnJv cl90IHhlbmV2dGNobl9iaW5kX3VuYm91bmRfcG9ydCh4ZW5ldnRjaG5faGFuZGxlICogeGNlLCBp bnQgZG9taWQpCit7CivCoMKgwqDCoGludCBmZCA9IHhjZS0+ZmQ7CivCoMKgwqDCoHN0cnVjdCBp b2N0bF9ldnRjaG5fYmluZF91bmJvdW5kX3BvcnQgYmluZDsKK8KgwqDCoMKgaW50IHJldDsKKwor wqDCoMKgwqBiaW5kLnJlbW90ZV9kb21haW4gPSBkb21pZDsKKworwqDCoMKgwqByZXQgPSBpb2N0 bChmZCwgSU9DVExfRVZUQ0hOX0JJTkRfVU5CT1VORF9QT1JULCAmYmluZCk7CivCoMKgwqDCoGlm IChyZXQgPT0gMCkKKwlyZXR1cm4gYmluZC5wb3J0OworwqDCoMKgwqBlbHNlCisJcmV0dXJuIC0x OworfQorCitldnRjaG5fcG9ydF9vcl9lcnJvcl90IHhlbmV2dGNobl9iaW5kX2ludGVyZG9tYWlu KHhlbmV2dGNobl9oYW5kbGUgKnhjZSwgaW50IGRvbWlkLAorwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGV2dGNobl9wb3J0X3QgcmVtb3RlX3BvcnQpCit7CivCoMKg wqDCoGludCBmZCA9IHhjZS0+ZmQ7CivCoMKgwqDCoHN0cnVjdCBpb2N0bF9ldnRjaG5fYmluZF9p bnRlcmRvbWFpbiBiaW5kOworwqDCoMKgwqBpbnQgcmV0OworCivCoMKgwqDCoGJpbmQucmVtb3Rl X2RvbWFpbiA9IGRvbWlkOworwqDCoMKgwqBiaW5kLnJlbW90ZV9wb3J0ID0gcmVtb3RlX3BvcnQ7 CisKK8KgwqDCoMKgcmV0ID0gaW9jdGwoZmQsIElPQ1RMX0VWVENITl9CSU5EX0lOVEVSRE9NQUlO LCAmYmluZCk7CivCoMKgwqDCoGlmIChyZXQgPT0gMCkKKwlyZXR1cm4gYmluZC5wb3J0OworwqDC oMKgwqBlbHNlCisJcmV0dXJuIC0xOworfQorCitpbnQgeGVuZXZ0Y2huX3VuYmluZCh4ZW5ldnRj aG5faGFuZGxlICp4Y2UsIGV2dGNobl9wb3J0X3QgcG9ydCkKK3sKK8KgwqDCoMKgaW50IGZkID0g eGNlLT5mZDsKK8KgwqDCoMKgc3RydWN0IGlvY3RsX2V2dGNobl91bmJpbmQgdW5iaW5kOworCivC oMKgwqDCoHVuYmluZC5wb3J0ID0gcG9ydDsKKworwqDCoMKgwqByZXR1cm4gaW9jdGwoZmQsIElP Q1RMX0VWVENITl9VTkJJTkQsICZ1bmJpbmQpOworfQorCitldnRjaG5fcG9ydF9vcl9lcnJvcl90 IHhlbmV2dGNobl9iaW5kX3ZpcnEoeGVuZXZ0Y2huX2hhbmRsZSAqeGNlLCB1bnNpZ25lZCBpbnQg dmlycSkKK3sKK8KgwqDCoMKgaW50IGZkID0geGNlLT5mZDsKK8KgwqDCoMKgc3RydWN0IGlvY3Rs X2V2dGNobl9iaW5kX3ZpcnEgYmluZDsKK8KgwqDCoMKgaW50IGVycjsKKworwqDCoMKgwqBiaW5k LnZpcnEgPSB2aXJxOworCivCoMKgwqDCoGVyciA9IGlvY3RsKGZkLCBJT0NUTF9FVlRDSE5fQklO RF9WSVJRLCAmYmluZCk7CivCoMKgwqDCoGlmIChlcnIpCisJcmV0dXJuIC0xOworwqDCoMKgwqBl bHNlCisJcmV0dXJuIGJpbmQucG9ydDsKK30KKworZXZ0Y2huX3BvcnRfb3JfZXJyb3JfdCB4ZW5l dnRjaG5fcGVuZGluZyh4ZW5ldnRjaG5faGFuZGxlICp4Y2UpCit7CivCoMKgwqDCoGludCBmZCA9 IHhjZS0+ZmQ7CivCoMKgwqDCoGV2dGNobl9wb3J0X3QgcG9ydDsKKworwqDCoMKgwqBpZiAoIHJl YWRfZXhhY3QoZmQsIChjaGFyICopJnBvcnQsIHNpemVvZihwb3J0KSkgPT0gLTEgKQorwqDCoMKg wqDCoMKgwqDCoHJldHVybiAtMTsKKworwqDCoMKgwqByZXR1cm4gcG9ydDsKK30KKworaW50IHhl bmV2dGNobl91bm1hc2soeGVuZXZ0Y2huX2hhbmRsZSAqeGNlLCBldnRjaG5fcG9ydF90IHBvcnQp Cit7CivCoMKgwqDCoGludCBmZCA9IHhjZS0+ZmQ7CivCoMKgwqDCoHJldHVybiB3cml0ZV9leGFj dChmZCwgKGNoYXIgKikmcG9ydCwgc2l6ZW9mKHBvcnQpKTsKK30KKworLyoKKyAqIExvY2FsIHZh cmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKKyAqIGMtYmFzaWMt b2Zmc2V0OiA0CisgKiB0YWItd2lkdGg6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAorICog RW5kOgorICovCmRpZmYgLS1naXQgYS90b29scy9saWJzL2V2dGNobi9wcml2YXRlLmggYi90b29s cy9saWJzL2V2dGNobi9wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uZmNkMGU5NgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2xpYnMvZXZ0Y2huL3ByaXZhdGUu aApAQCAtMCwwICsxLDI1IEBACisjaWZuZGVmIFhFTkVWVENITl9QUklWQVRFX0gKKyNkZWZpbmUg WEVORVZUQ0hOX1BSSVZBVEVfSAorCisjaW5jbHVkZSA8eGVudG9vbGxvZy5oPgorI2luY2x1ZGUg PHhlbmV2dGNobi5oPgorCitzdHJ1Y3QgeGVuZXZ0Y2huX2hhbmRsZSB7CivCoMKgwqDCoHhlbnRv b2xsb2dfbG9nZ2VyICpsb2dnZXIsICpsb2dnZXJfdG9mcmVlOworwqDCoMKgwqBpbnQgZmQ7Cit9 OworCitpbnQgb3NkZXBfZXZ0Y2huX29wZW4oeGVuZXZ0Y2huX2hhbmRsZSAqeGNlKTsKK2ludCBv c2RlcF9ldnRjaG5fY2xvc2UoeGVuZXZ0Y2huX2hhbmRsZSAqeGNlKTsKKworI2VuZGlmCisKKy8q CisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLWZpbGUtc3R5bGU6ICJCU0Qi CisgKiBjLWJhc2ljLW9mZnNldDogNAorICogdGFiLXdpZHRoOiA0CisgKiBpbmRlbnQtdGFicy1t b2RlOiBuaWwKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlicy9ldnRjaG4vc29s YXJpcy5jIGIvdG9vbHMvbGlicy9ldnRjaG4vc29sYXJpcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjExNGNlZmIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9saWJzL2V2 dGNobi9zb2xhcmlzLmMKQEAgLTAsMCArMSwxMzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK KyAqCisgKiBDb3B5cmlnaHQgMjAwNiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuwqDCoEFsbCByaWdo dHMgcmVzZXJ2ZWQuCisgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zLgorICoKKyAq IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247CisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlz IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuwqDCoFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcg d2l0aCB0aGlzIGxpYnJhcnk7IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5z ZXMvPi4KKyAqCisgKiBTcGxpdCBvdXQgZnJvbSB4Y19zb2xhcmlzLmMKKyAqLworCisjaW5jbHVk ZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgPHN5cy9pb2N0bC5o PgorCisjaW5jbHVkZSA8eGVuL3N5cy9ldnRjaG4uaD4KKworI2luY2x1ZGUgInByaXZhdGUuaCIK KworaW50IG9zZGVwX2V2dGNobl9vcGVuKHhlbmV2dGNobl9oYW5kbGUgKnhjZSkKK3sKK8KgwqDC oMKgaW50IGZkOworCivCoMKgwqDCoGlmICggKGZkID0gb3BlbigiL2Rldi94ZW4vZXZ0Y2huIiwg T19SRFdSKSkgPT0gLTEgKQorwqDCoMKgwqB7CivCoMKgwqDCoMKgwqDCoMKgUEVSUk9SKCJDb3Vs ZCBub3Qgb3BlbiBldmVudCBjaGFubmVsIGludGVyZmFjZSIpOworwqDCoMKgwqDCoMKgwqDCoHJl dHVybiAtMTsKK8KgwqDCoMKgfQorCivCoMKgwqDCoHhjZS0+ZmQgPSBmZDsKK8KgwqDCoMKgcmV0 dXJuIDA7Cit9CisKK2ludCBvc2RlcF9ldnRjaG5fY2xvc2UoeGVuZXZ0Y2huX2hhbmRsZSAqeGNl KQoreworwqDCoMKgwqBpZiAoIHhjZS0+ZmQgPT0gLTEgKQorwqDCoMKgwqDCoMKgwqDCoHJldHVy biAwOworCivCoMKgwqDCoHJldHVybiBjbG9zZSh4Y2UtPmZkKTsKK30KKworaW50IHhlbmV2dGNo bl9mZCh4ZW5ldnRjaG5faGFuZGxlICp4Y2UpCit7CivCoMKgwqDCoHJldHVybiB4Y2UtPmZkOwor fQorCitpbnQgeGVuZXZ0Y2huX25vdGlmeSh4ZW5ldnRjaG5faGFuZGxlICp4Y2UsIGV2dGNobl9w b3J0X3QgcG9ydCkKK3sKK8KgwqDCoMKgaW50IGZkID0geGNlLT5mZDsKK8KgwqDCoMKgc3RydWN0 IGlvY3RsX2V2dGNobl9ub3RpZnkgbm90aWZ5OworCivCoMKgwqDCoG5vdGlmeS5wb3J0ID0gcG9y dDsKKworwqDCoMKgwqByZXR1cm4gaW9jdGwoZmQsIElPQ1RMX0VWVENITl9OT1RJRlksICZub3Rp ZnkpOworfQorCitldnRjaG5fcG9ydF9vcl9lcnJvcl90IHhlbmV2dGNobl9iaW5kX3VuYm91bmRf cG9ydCh4ZW5ldnRjaG5faGFuZGxlICp4Y2UsIGludCBkb21pZCkKK3sKK8KgwqDCoMKgaW50IGZk ID0geGNlLT5mZDsKK8KgwqDCoMKgc3RydWN0IGlvY3RsX2V2dGNobl9iaW5kX3VuYm91bmRfcG9y dCBiaW5kOworCivCoMKgwqDCoGJpbmQucmVtb3RlX2RvbWFpbiA9IGRvbWlkOworCivCoMKgwqDC oHJldHVybiBpb2N0bChmZCwgSU9DVExfRVZUQ0hOX0JJTkRfVU5CT1VORF9QT1JULCAmYmluZCk7 Cit9CisKK2V2dGNobl9wb3J0X29yX2Vycm9yX3QgeGVuZXZ0Y2huX2JpbmRfaW50ZXJkb21haW4o eGVuZXZ0Y2huX2hhbmRsZSAqeGNlLCBpbnQgZG9taWQsCivCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZXZ0Y2huX3BvcnRfdCByZW1vdGVfcG9ydCkKK3sKK8KgwqDC oMKgaW50IGZkID0geGNlLT5mZDsKK8KgwqDCoMKgc3RydWN0IGlvY3RsX2V2dGNobl9iaW5kX2lu dGVyZG9tYWluIGJpbmQ7CisKK8KgwqDCoMKgYmluZC5yZW1vdGVfZG9tYWluID0gZG9taWQ7CivC oMKgwqDCoGJpbmQucmVtb3RlX3BvcnQgPSByZW1vdGVfcG9ydDsKKworwqDCoMKgwqByZXR1cm4g aW9jdGwoZmQsIElPQ1RMX0VWVENITl9CSU5EX0lOVEVSRE9NQUlOLCAmYmluZCk7Cit9CisKK2V2 dGNobl9wb3J0X29yX2Vycm9yX3QgeGVuZXZ0Y2huX2JpbmRfdmlycSh4ZW5ldnRjaG5faGFuZGxl ICp4Y2UsIHVuc2lnbmVkIGludCB2aXJxKQoreworwqDCoMKgwqBpbnQgZmQgPSB4Y2UtPmZkOwor wqDCoMKgwqBzdHJ1Y3QgaW9jdGxfZXZ0Y2huX2JpbmRfdmlycSBiaW5kOworCivCoMKgwqDCoGJp bmQudmlycSA9IHZpcnE7CisKK8KgwqDCoMKgcmV0dXJuIGlvY3RsKGZkLCBJT0NUTF9FVlRDSE5f QklORF9WSVJRLCAmYmluZCk7Cit9CisKK2ludCB4ZW5ldnRjaG5fdW5iaW5kKHhlbmV2dGNobl9o YW5kbGUgKnhjZSwgZXZ0Y2huX3BvcnRfdCBwb3J0KQoreworwqDCoMKgwqBpbnQgZmQgPSB4Y2Ut PmZkOworwqDCoMKgwqBzdHJ1Y3QgaW9jdGxfZXZ0Y2huX3VuYmluZCB1bmJpbmQ7CisKK8KgwqDC oMKgdW5iaW5kLnBvcnQgPSBwb3J0OworCivCoMKgwqDCoHJldHVybiBpb2N0bChmZCwgSU9DVExf RVZUQ0hOX1VOQklORCwgJnVuYmluZCk7Cit9CisKK2V2dGNobl9wb3J0X29yX2Vycm9yX3QgeGVu ZXZ0Y2huX3BlbmRpbmcoeGVuZXZ0Y2huX2hhbmRsZSAqeGNlKQoreworwqDCoMKgwqBpbnQgZmQg PSB4Y2UtPmZkOworwqDCoMKgwqBldnRjaG5fcG9ydF90IHBvcnQ7CisKK8KgwqDCoMKgaWYgKCBy ZWFkX2V4YWN0KGZkLCAoY2hhciAqKSZwb3J0LCBzaXplb2YocG9ydCkpID09IC0xICkKK8KgwqDC oMKgwqDCoMKgwqByZXR1cm4gLTE7CisKK8KgwqDCoMKgcmV0dXJuIHBvcnQ7Cit9CisKK2ludCB4 ZW5ldnRjaG5fdW5tYXNrKHhlbmV2dGNobl9oYW5kbGUgKnhjZSwgZXZ0Y2huX3BvcnRfdCBwb3J0 KQoreworwqDCoMKgwqBpbnQgZmQgPSB4Y2UtPmZkOworwqDCoMKgwqByZXR1cm4gd3JpdGVfZXhh Y3QoZmQsIChjaGFyICopJnBvcnQsIHNpemVvZihwb3J0KSk7Cit9CisKKy8qCisgKiBMb2NhbCB2 YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLWZpbGUtc3R5bGU6ICJCU0QiCisgKiBjLWJhc2lj LW9mZnNldDogNAorICogdGFiLXdpZHRoOiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAq IEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlicy90b29sbG9nL2luY2x1ZGUveGVudG9v bGxvZy5oIGIvdG9vbHMvbGlicy90b29sbG9nL2luY2x1ZGUveGVudG9vbGxvZy5oCmluZGV4IDg1 M2U5YzcuLjc2ZjE3ZmUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnMvdG9vbGxvZy9pbmNsdWRlL3hl bnRvb2xsb2cuaAorKysgYi90b29scy9saWJzL3Rvb2xsb2cvaW5jbHVkZS94ZW50b29sbG9nLmgK QEAgLTEzNCwzICsxMzQsMTMgQEAgY29uc3QgY2hhciAqeHRsX2xldmVsX3RvX3N0cmluZyh4ZW50 b29sbG9nX2xldmVsKTsgLyogbmV2ZXIgZmFpbHMgKi8KwqAKwqAKwqAjZW5kaWYgLyogWEVOVE9P TExPR19IICovCisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLWZp bGUtc3R5bGU6ICJCU0QiCisgKiBjLWJhc2ljLW9mZnNldDogNAorICogdGFiLXdpZHRoOiA0Cisg KiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMv bGlicy90b29sbG9nL3h0bF9jb3JlLmMgYi90b29scy9saWJzL3Rvb2xsb2cveHRsX2NvcmUuYwpp bmRleCBjNDcyNGEwLi4wOTlkMmYzIDEwMDY0NAotLS0gYS90b29scy9saWJzL3Rvb2xsb2cveHRs X2NvcmUuYworKysgYi90b29scy9saWJzL3Rvb2xsb2cveHRsX2NvcmUuYwpAQCAtODEsMyArODEs MTMgQEAgdm9pZCB4dGxfbG9nZ2VyX2Rlc3Ryb3koc3RydWN0IHhlbnRvb2xsb2dfbG9nZ2VyICps b2dnZXIpIHsKwqDCoMKgwqDCoGlmICghbG9nZ2VyKSByZXR1cm47CsKgwqDCoMKgwqBsb2dnZXIt PmRlc3Ryb3kobG9nZ2VyKTsKwqB9CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBtb2Rl OiBDCisgKiBjLWZpbGUtc3R5bGU6ICJCU0QiCisgKiBjLWJhc2ljLW9mZnNldDogNAorICogdGFi LXdpZHRoOiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqLwpkaWZmIC0t Z2l0IGEvdG9vbHMvbGlicy90b29sbG9nL3h0bF9sb2dnZXJfc3RkaW8uYyBiL3Rvb2xzL2xpYnMv dG9vbGxvZy94dGxfbG9nZ2VyX3N0ZGlvLmMKaW5kZXggMGNkOTIwNi4uZjljNWJkOCAxMDA2NDQK LS0tIGEvdG9vbHMvbGlicy90b29sbG9nL3h0bF9sb2dnZXJfc3RkaW8uYworKysgYi90b29scy9s aWJzL3Rvb2xsb2cveHRsX2xvZ2dlcl9zdGRpby5jCkBAIC0xOTAsMyArMTkwLDEzIEBAIHhlbnRv b2xsb2dfbG9nZ2VyX3N0ZGlvc3RyZWFtICp4dGxfY3JlYXRlbG9nZ2VyX3N0ZGlvc3RyZWFtCsKg CsKgwqDCoMKgwqByZXR1cm4gWFRMX05FV19MT0dHRVIoc3RkaW9zdHJlYW0sIG5ld2xvZ2dlcik7 CsKgfQorCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9kZTogQworICogYy1maWxlLXN0 eWxlOiAiQlNEIgorICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIHRhYi13aWR0aDogNAorICogaW5k ZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnZj aGFuL01ha2VmaWxlIGIvdG9vbHMvbGlidmNoYW4vTWFrZWZpbGUKaW5kZXggM2M1MGZlNi4uODQx MjhhMyAxMDA2NDQKLS0tIGEvdG9vbHMvbGlidmNoYW4vTWFrZWZpbGUKKysrIGIvdG9vbHMvbGli dmNoYW4vTWFrZWZpbGUKQEAgLTEwLDkgKzEwLDkgQEAgTk9ERV9PQkpTID0gbm9kZS5vCsKgTk9E RTJfT0JKUyA9IG5vZGUtc2VsZWN0Lm8KwqAKwqBMSUJWQ0hBTl9QSUNfT0JKUyA9ICQocGF0c3Vi c3QgJS5vLCUub3BpYywkKExJQlZDSEFOX09CSlMpKQotTElCVkNIQU5fTElCUyA9ICQoTERMSUJT X2xpYnhlbnN0b3JlKSAkKExETElCU19saWJ4ZW5jdHJsKQotJChMSUJWQ0hBTl9PQkpTKSAkKExJ QlZDSEFOX1BJQ19PQkpTKTogQ0ZMQUdTICs9ICQoQ0ZMQUdTX2xpYnhlbnN0b3JlKSAkKENGTEFH U19saWJ4ZW5jdHJsKQotJChOT0RFX09CSlMpICQoTk9ERTJfT0JKUyk6IENGTEFHUyArPSAkKENG TEFHU19saWJ4ZW5jdHJsKQorTElCVkNIQU5fTElCUyA9ICQoTERMSUJTX2xpYnhlbnN0b3JlKSAk KExETElCU19saWJ4ZW5jdHJsKSAkKExETElCU19saWJ4ZW5ldnRjaG4pCiskKExJQlZDSEFOX09C SlMpICQoTElCVkNIQU5fUElDX09CSlMpOiBDRkxBR1MgKz0gJChDRkxBR1NfbGlieGVuc3RvcmUp ICQoQ0ZMQUdTX2xpYnhlbmN0cmwpICQoQ0ZMQUdTX2xpYnhlbmV2dGNobikKKyQoTk9ERV9PQkpT KSAkKE5PREUyX09CSlMpOiBDRkxBR1MgKz0gJChDRkxBR1NfbGlieGVuY3RybCkgJChDRkxBR1Nf bGlieGVuZXZ0Y2huKQrCoArCoE1BSk9SID0gMS4wCsKgTUlOT1IgPSAwCmRpZmYgLS1naXQgYS90 b29scy9saWJ2Y2hhbi9pbml0LmMgYi90b29scy9saWJ2Y2hhbi9pbml0LmMKaW5kZXggNzdiZTRl Ny4uNjZjYjEwMyAxMDA2NDQKLS0tIGEvdG9vbHMvbGlidmNoYW4vaW5pdC5jCisrKyBiL3Rvb2xz L2xpYnZjaGFuL2luaXQuYwpAQCAtMjE2LDI1ICsyMTYsMjUgQEAgc3RhdGljIGludCBpbml0X2V2 dF9zcnYoc3RydWN0IGxpYnhlbnZjaGFuICpjdHJsLCBpbnQgZG9tYWluLCB4ZW50b29sbG9nX2xv Z2dlcgrCoHsKwqAJZXZ0Y2huX3BvcnRfb3JfZXJyb3JfdCBwb3J0OwrCoAotCWN0cmwtPmV2ZW50 ID0geGNfZXZ0Y2huX29wZW4obG9nZ2VyLCAwKTsKKwljdHJsLT5ldmVudCA9IHhlbmV2dGNobl9v cGVuKGxvZ2dlciwgMCk7CsKgCWlmICghY3RybC0+ZXZlbnQpCsKgCQlyZXR1cm4gLTE7CsKgCi0J cG9ydCA9IHhjX2V2dGNobl9iaW5kX3VuYm91bmRfcG9ydChjdHJsLT5ldmVudCwgZG9tYWluKTsK Kwlwb3J0ID0geGVuZXZ0Y2huX2JpbmRfdW5ib3VuZF9wb3J0KGN0cmwtPmV2ZW50LCBkb21haW4p OwrCoAlpZiAocG9ydCA8IDApCsKgCQlnb3RvIGZhaWw7CsKgCWN0cmwtPmV2ZW50X3BvcnQgPSBw b3J0OwrCoAotCWlmICh4Y19ldnRjaG5fdW5tYXNrKGN0cmwtPmV2ZW50LCBjdHJsLT5ldmVudF9w b3J0KSkKKwlpZiAoeGVuZXZ0Y2huX3VubWFzayhjdHJsLT5ldmVudCwgY3RybC0+ZXZlbnRfcG9y dCkpCsKgCQlnb3RvIGZhaWw7CsKgCsKgCXJldHVybiAwOwrCoArCoGZhaWw6CsKgCWlmIChwb3J0 ID49IDApCi0JCXhjX2V2dGNobl91bmJpbmQoY3RybC0+ZXZlbnQsIHBvcnQpOworCQl4ZW5ldnRj aG5fdW5iaW5kKGN0cmwtPmV2ZW50LCBwb3J0KTsKwqAKLQl4Y19ldnRjaG5fY2xvc2UoY3RybC0+ ZXZlbnQpOworCXhlbmV2dGNobl9jbG9zZShjdHJsLT5ldmVudCk7CsKgCWN0cmwtPmV2ZW50ID0g TlVMTDsKwqAKwqAJcmV0dXJuIC0xOwpAQCAtMzQ2LDI2ICszNDYsMjYgQEAgc3RhdGljIGludCBp bml0X2V2dF9jbGkoc3RydWN0IGxpYnhlbnZjaGFuICpjdHJsLCBpbnQgZG9tYWluLCB4ZW50b29s bG9nX2xvZ2dlcgrCoHsKwqAJZXZ0Y2huX3BvcnRfb3JfZXJyb3JfdCBwb3J0OwrCoAotCWN0cmwt PmV2ZW50ID0geGNfZXZ0Y2huX29wZW4obG9nZ2VyLCAwKTsKKwljdHJsLT5ldmVudCA9IHhlbmV2 dGNobl9vcGVuKGxvZ2dlciwgMCk7CsKgCWlmICghY3RybC0+ZXZlbnQpCsKgCQlyZXR1cm4gLTE7 CsKgCi0JcG9ydCA9IHhjX2V2dGNobl9iaW5kX2ludGVyZG9tYWluKGN0cmwtPmV2ZW50LAorCXBv cnQgPSB4ZW5ldnRjaG5fYmluZF9pbnRlcmRvbWFpbihjdHJsLT5ldmVudCwKwqAJCWRvbWFpbiwg Y3RybC0+ZXZlbnRfcG9ydCk7CsKgCWlmIChwb3J0IDwgMCkKwqAJCWdvdG8gZmFpbDsKwqAJY3Ry bC0+ZXZlbnRfcG9ydCA9IHBvcnQ7CsKgCi0JaWYgKHhjX2V2dGNobl91bm1hc2soY3RybC0+ZXZl bnQsIGN0cmwtPmV2ZW50X3BvcnQpKQorCWlmICh4ZW5ldnRjaG5fdW5tYXNrKGN0cmwtPmV2ZW50 LCBjdHJsLT5ldmVudF9wb3J0KSkKwqAJCWdvdG8gZmFpbDsKwqAKwqAJcmV0dXJuIDA7CsKgCsKg ZmFpbDoKwqAJaWYgKHBvcnQgPj0gMCkKLQkJeGNfZXZ0Y2huX3VuYmluZChjdHJsLT5ldmVudCwg cG9ydCk7CisJCXhlbmV2dGNobl91bmJpbmQoY3RybC0+ZXZlbnQsIHBvcnQpOwrCoAotCXhjX2V2 dGNobl9jbG9zZShjdHJsLT5ldmVudCk7CisJeGVuZXZ0Y2huX2Nsb3NlKGN0cmwtPmV2ZW50KTsK wqAJY3RybC0+ZXZlbnQgPSBOVUxMOwrCoArCoAlyZXR1cm4gLTE7CmRpZmYgLS1naXQgYS90b29s cy9saWJ2Y2hhbi9pby5jIGIvdG9vbHMvbGlidmNoYW4vaW8uYwppbmRleCAzODFjYzA1Li41MzM5 M2E1IDEwMDY0NAotLS0gYS90b29scy9saWJ2Y2hhbi9pby5jCisrKyBiL3Rvb2xzL2xpYnZjaGFu L2lvLmMKQEAgLTEwNSw3ICsxMDUsNyBAQCBzdGF0aWMgaW5saW5lIGludCBzZW5kX25vdGlmeShz dHJ1Y3QgbGlieGVudmNoYW4gKmN0cmwsIHVpbnQ4X3QgYml0KQrCoAlub3RpZnkgPSBjdHJsLT5p c19zZXJ2ZXIgPyAmY3RybC0+cmluZy0+c3J2X25vdGlmeSA6ICZjdHJsLT5yaW5nLT5jbGlfbm90 aWZ5OwrCoAlwcmV2ID0gX19zeW5jX2ZldGNoX2FuZF9hbmQobm90aWZ5LCB+Yml0KTsKwqAJaWYg KHByZXYgJiBiaXQpCi0JCXJldHVybiB4Y19ldnRjaG5fbm90aWZ5KGN0cmwtPmV2ZW50LCBjdHJs LT5ldmVudF9wb3J0KTsKKwkJcmV0dXJuIHhlbmV2dGNobl9ub3RpZnkoY3RybC0+ZXZlbnQsIGN0 cmwtPmV2ZW50X3BvcnQpOwrCoAllbHNlCsKgCQlyZXR1cm4gMDsKwqB9CkBAIC0xOTYsMTAgKzE5 NiwxMCBAQCBpbnQgbGlieGVudmNoYW5fYnVmZmVyX3NwYWNlKHN0cnVjdCBsaWJ4ZW52Y2hhbiAq Y3RybCkKwqAKwqBpbnQgbGlieGVudmNoYW5fd2FpdChzdHJ1Y3QgbGlieGVudmNoYW4gKmN0cmwp CsKgewotCWludCByZXQgPSB4Y19ldnRjaG5fcGVuZGluZyhjdHJsLT5ldmVudCk7CisJaW50IHJl dCA9IHhlbmV2dGNobl9wZW5kaW5nKGN0cmwtPmV2ZW50KTsKwqAJaWYgKHJldCA8IDApCsKgCQly ZXR1cm4gLTE7Ci0JeGNfZXZ0Y2huX3VubWFzayhjdHJsLT5ldmVudCwgcmV0KTsKKwl4ZW5ldnRj aG5fdW5tYXNrKGN0cmwtPmV2ZW50LCByZXQpOwrCoAlyZXR1cm4gMDsKwqB9CsKgCkBAIC0zNTIs NyArMzUyLDcgQEAgaW50IGxpYnhlbnZjaGFuX2lzX29wZW4oc3RydWN0IGxpYnhlbnZjaGFuKiBj dHJsKQrCoArCoGludCBsaWJ4ZW52Y2hhbl9mZF9mb3Jfc2VsZWN0KHN0cnVjdCBsaWJ4ZW52Y2hh biAqY3RybCkKwqB7Ci0JcmV0dXJuIHhjX2V2dGNobl9mZChjdHJsLT5ldmVudCk7CisJcmV0dXJu IHhlbmV2dGNobl9mZChjdHJsLT5ldmVudCk7CsKgfQrCoArCoHZvaWQgbGlieGVudmNoYW5fY2xv c2Uoc3RydWN0IGxpYnhlbnZjaGFuICpjdHJsKQpAQCAtMzc0LDggKzM3NCw4IEBAIHZvaWQgbGli eGVudmNoYW5fY2xvc2Uoc3RydWN0IGxpYnhlbnZjaGFuICpjdHJsKQrCoAl9CsKgCWlmIChjdHJs LT5ldmVudCkgewrCoAkJaWYgKGN0cmwtPnJpbmcpCi0JCQl4Y19ldnRjaG5fbm90aWZ5KGN0cmwt PmV2ZW50LCBjdHJsLT5ldmVudF9wb3J0KTsKLQkJeGNfZXZ0Y2huX2Nsb3NlKGN0cmwtPmV2ZW50 KTsKKwkJCXhlbmV2dGNobl9ub3RpZnkoY3RybC0+ZXZlbnQsIGN0cmwtPmV2ZW50X3BvcnQpOwor CQl4ZW5ldnRjaG5fY2xvc2UoY3RybC0+ZXZlbnQpOwrCoAl9CsKgCWlmIChjdHJsLT5pc19zZXJ2 ZXIpIHsKwqAJCWlmIChjdHJsLT5nbnRzaHIpCmRpZmYgLS1naXQgYS90b29scy9saWJ2Y2hhbi9s aWJ4ZW52Y2hhbi5oIGIvdG9vbHMvbGlidmNoYW4vbGlieGVudmNoYW4uaAppbmRleCAwOTQ0YTBl Li4xNTQ0Mzc4IDEwMDY0NAotLS0gYS90b29scy9saWJ2Y2hhbi9saWJ4ZW52Y2hhbi5oCisrKyBi L3Rvb2xzL2xpYnZjaGFuL2xpYnhlbnZjaGFuLmgKQEAgLTQ0LDYgKzQ0LDcgQEAKwqAKwqAjaW5j bHVkZSA8eGVuL2lvL2xpYnhlbnZjaGFuLmg+CsKgI2luY2x1ZGUgPHhlbi9zeXMvZXZ0Y2huLmg+ CisjaW5jbHVkZSA8eGVuZXZ0Y2huLmg+CsKgI2luY2x1ZGUgPHhlbmN0cmwuaD4KwqAKwqBzdHJ1 Y3QgbGlieGVudmNoYW5fcmluZyB7CkBAIC03MSw3ICs3Miw3IEBAIHN0cnVjdCBsaWJ4ZW52Y2hh biB7CsKgCS8qIFBvaW50ZXIgdG8gc2hhcmVkIHJpbmcgcGFnZSAqLwrCoAlzdHJ1Y3QgdmNoYW5f aW50ZXJmYWNlICpyaW5nOwrCoAkvKiBldmVudCBjaGFubmVsIGludGVyZmFjZSAqLwotCXhjX2V2 dGNobiAqZXZlbnQ7CisJeGVuZXZ0Y2huX2hhbmRsZSAqZXZlbnQ7CsKgCXVpbnQzMl90IGV2ZW50 X3BvcnQ7CsKgCS8qIGluZm9ybWF0aXZlIGZsYWdzOiBhcmUgd2UgYWN0aW5nIGFzIHNlcnZlcj8g Ki8KwqAJaW50IGlzX3NlcnZlcjoxOwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGMvTWFrZWZpbGUg Yi90b29scy9saWJ4Yy9NYWtlZmlsZQppbmRleCA5NDA3MDhmLi5iOGZjNmE1IDEwMDY0NAotLS0g YS90b29scy9saWJ4Yy9NYWtlZmlsZQorKysgYi90b29scy9saWJ4Yy9NYWtlZmlsZQpAQCAtNDgs NiArNDgsNyBAQCBDVFJMX1NSQ1MtJChDT05GSUdfU3VuT1MpICs9IHhjX3NvbGFyaXMuYwrCoENU UkxfU1JDUy0kKENPTkZJR19OZXRCU0QpICs9IHhjX25ldGJzZC5jCsKgQ1RSTF9TUkNTLSQoQ09O RklHX05ldEJTRFJ1bXApICs9IHhjX25ldGJzZC5jCsKgQ1RSTF9TUkNTLSQoQ09ORklHX01pbmlP UykgKz0geGNfbWluaW9zLmMKK0NUUkxfU1JDUy15wqDCoMKgwqDCoMKgwqArPSB4Y19ldnRjaG5f Y29tcGF0LmMKwqAKwqBHVUVTVF9TUkNTLXkgOj0KwqBHVUVTVF9TUkNTLXkgKz0geGdfcHJpdmF0 ZS5jIHhjX3N1c3BlbmQuYwpAQCAtMTExLDYgKzExMiw3IEBAIENGTEFHUy0kKENPTkZJR19MaW51 eCkgKz0gLURfR05VX1NPVVJDRQrCoArCoENGTEFHUwkrPSAkKFBUSFJFQURfQ0ZMQUdTKQrCoENG TEFHUwkrPSAkKENGTEFHU19saWJ4ZW50b29sbG9nKQorQ0ZMQUdTCSs9ICQoQ0ZMQUdTX2xpYnhl bmV2dGNobikKwqAKwqBDVFJMX0xJQl9PQkpTIDo9ICQocGF0c3Vic3QgJS5jLCUubywkKENUUkxf U1JDUy15KSkKwqBDVFJMX1BJQ19PQkpTIDo9ICQocGF0c3Vic3QgJS5jLCUub3BpYywkKENUUkxf U1JDUy15KSkKQEAgLTE2NCw3ICsxNjYsNyBAQCBpbnN0YWxsOiBidWlsZArCoAkkKElOU1RBTExf REFUQSkgbGlieGVuY3RybC5hICQoREVTVERJUikkKGxpYmRpcikKwqAJJChTWU1MSU5LX1NITElC KSBsaWJ4ZW5jdHJsLnNvLiQoTUFKT1IpLiQoTUlOT1IpICQoREVTVERJUikkKGxpYmRpcikvbGli eGVuY3RybC5zby4kKE1BSk9SKQrCoAkkKFNZTUxJTktfU0hMSUIpIGxpYnhlbmN0cmwuc28uJChN QUpPUikgJChERVNURElSKSQobGliZGlyKS9saWJ4ZW5jdHJsLnNvCi0JJChJTlNUQUxMX0RBVEEp IGluY2x1ZGUveGVuY3RybC5oIGluY2x1ZGUveGVuY3RybG9zZGVwLmggJChERVNURElSKSQoaW5j bHVkZWRpcikKKwkkKElOU1RBTExfREFUQSkgaW5jbHVkZS94ZW5jdHJsLmggaW5jbHVkZS94ZW5j dHJsX2NvbXBhdC5oIGluY2x1ZGUveGVuY3RybG9zZGVwLmggJChERVNURElSKSQoaW5jbHVkZWRp cikKwqAJJChJTlNUQUxMX1NITElCKSBsaWJ4ZW5ndWVzdC5zby4kKE1BSk9SKS4kKE1JTk9SKSAk KERFU1RESVIpJChsaWJkaXIpCsKgCSQoSU5TVEFMTF9EQVRBKSBsaWJ4ZW5ndWVzdC5hICQoREVT VERJUikkKGxpYmRpcikKwqAJJChTWU1MSU5LX1NITElCKSBsaWJ4ZW5ndWVzdC5zby4kKE1BSk9S KS4kKE1JTk9SKSAkKERFU1RESVIpJChsaWJkaXIpL2xpYnhlbmd1ZXN0LnNvLiQoTUFKT1IpCkBA IC0yMDcsNyArMjA5LDcgQEAgbGlieGVuY3RybC5zby4kKE1BSk9SKTogbGlieGVuY3RybC5zby4k KE1BSk9SKS4kKE1JTk9SKQrCoAkkKFNZTUxJTktfU0hMSUIpICQ8ICRACsKgCsKgbGlieGVuY3Ry bC5zby4kKE1BSk9SKS4kKE1JTk9SKTogJChDVFJMX1BJQ19PQkpTKQotCSQoQ0MpICQoTERGTEFH UykgJChQVEhSRUFEX0xERkxBR1MpIC1XbCwkKFNPTkFNRV9MREZMQUcpIC1XbCxsaWJ4ZW5jdHJs LnNvLiQoTUFKT1IpICQoU0hMSUJfTERGTEFHUykgLW8gJEAgJF4gJChMRExJQlNfbGlieGVudG9v bGxvZykgJChETE9QRU5fTElCUykgJChQVEhSRUFEX0xJQlMpICQoQVBQRU5EX0xERkxBR1MpCisJ JChDQykgJChMREZMQUdTKSAkKFBUSFJFQURfTERGTEFHUykgLVdsLCQoU09OQU1FX0xERkxBRykg LVdsLGxpYnhlbmN0cmwuc28uJChNQUpPUikgJChTSExJQl9MREZMQUdTKSAtbyAkQCAkXiAkKExE TElCU19saWJ4ZW50b29sbG9nKSAkKExETElCU19saWJ4ZW5ldnRjaG4pICQoRExPUEVOX0xJQlMp ICQoUFRIUkVBRF9MSUJTKSAkKEFQUEVORF9MREZMQUdTKQrCoArCoCMgbGlieGVuZ3Vlc3QKwqAK QEAgLTIzMCw3ICsyMzIsNyBAQCB4Y19kb21fYnppbWFnZWxvYWRlci5vcGljOiBDRkxBR1MgKz0g JChjYWxsIHpsaWItb3B0aW9ucyxEKQrCoArCoGxpYnhlbmd1ZXN0LnNvLiQoTUFKT1IpLiQoTUlO T1IpOiBDT01QUkVTU0lPTl9MSUJTID0gJChjYWxsIHpsaWItb3B0aW9ucyxsKQrCoGxpYnhlbmd1 ZXN0LnNvLiQoTUFKT1IpLiQoTUlOT1IpOiAkKEdVRVNUX1BJQ19PQkpTKSBsaWJ4ZW5jdHJsLnNv Ci0JJChDQykgJChMREZMQUdTKSAtV2wsJChTT05BTUVfTERGTEFHKSAtV2wsbGlieGVuZ3Vlc3Qu c28uJChNQUpPUikgJChTSExJQl9MREZMQUdTKSAtbyAkQCAkKEdVRVNUX1BJQ19PQkpTKSAkKENP TVBSRVNTSU9OX0xJQlMpIC1seiAkKExETElCU19saWJ4ZW5jdHJsKSAkKFBUSFJFQURfTElCUykg JChBUFBFTkRfTERGTEFHUykKKwkkKENDKSAkKExERkxBR1MpIC1XbCwkKFNPTkFNRV9MREZMQUcp IC1XbCxsaWJ4ZW5ndWVzdC5zby4kKE1BSk9SKSAkKFNITElCX0xERkxBR1MpIC1vICRAICQoR1VF U1RfUElDX09CSlMpICQoQ09NUFJFU1NJT05fTElCUykgLWx6ICQoTERMSUJTX2xpYnhlbmV2dGNo bikgJChMRExJQlNfbGlieGVuY3RybCkgJChQVEhSRUFEX0xJQlMpICQoQVBQRU5EX0xERkxBR1Mp CsKgCsKgeGVuY3RybF9vc2RlcF9FTk9TWVMuc286ICQoT1NERVBfUElDX09CSlMpIGxpYnhlbmN0 cmwuc28KwqAJJChDQykgJChMREZMQUdTKSAkKFNITElCX0xERkxBR1MpIC1vICRAICQoT1NERVBf UElDX09CSlMpICQoTERMSUJTX2xpYnhlbmN0cmwpICQoQVBQRU5EX0xERkxBR1MpCmRpZmYgLS1n aXQgYS90b29scy9saWJ4Yy9pbmNsdWRlL3hlbmN0cmwuaCBiL3Rvb2xzL2xpYnhjL2luY2x1ZGUv eGVuY3RybC5oCmluZGV4IDFiZjcwZjkuLjUzZjMwMzMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhj L2luY2x1ZGUveGVuY3RybC5oCisrKyBiL3Rvb2xzL2xpYnhjL2luY2x1ZGUveGVuY3RybC5oCkBA IC0xMTcsNyArMTE3LDYgQEAKwqAgKi8KwqAKwqB0eXBlZGVmIHN0cnVjdCB4Y19pbnRlcmZhY2Vf Y29yZSB4Y19pbnRlcmZhY2U7Ci10eXBlZGVmIHN0cnVjdCB4ZW5ldnRjaG5faGFuZGxlIHhjX2V2 dGNobjsKwqB0eXBlZGVmIHN0cnVjdCB4Y19pbnRlcmZhY2VfY29yZSB4Y19nbnR0YWI7CsKgdHlw ZWRlZiBzdHJ1Y3QgeGNfaW50ZXJmYWNlX2NvcmUgeGNfZ250c2hyOwrCoApAQCAtMTA4NSw3ICsx MDg0LDYgQEAgaW50IHhjX2NwdXBvb2xfbW92ZWRvbWFpbih4Y19pbnRlcmZhY2UgKnhjaCwKwqAg Ki8KwqB4Y19jcHVtYXBfdCB4Y19jcHVwb29sX2ZyZWVpbmZvKHhjX2ludGVyZmFjZSAqeGNoKTsK wqAKLQrCoC8qCsKgICogRVZFTlQgQ0hBTk5FTCBGVU5DVElPTlMKwqAgKgpAQCAtMTEyMCwxMDEg KzExMTgsNyBAQCBpbnQgeGNfZXZ0Y2huX3Jlc2V0KHhjX2ludGVyZmFjZSAqeGNoLArCoHR5cGVk ZWYgc3RydWN0IGV2dGNobl9zdGF0dXMgeGNfZXZ0Y2huX3N0YXR1c190OwrCoGludCB4Y19ldnRj aG5fc3RhdHVzKHhjX2ludGVyZmFjZSAqeGNoLCB4Y19ldnRjaG5fc3RhdHVzX3QgKnN0YXR1cyk7 CsKgCi0vKgotICogUmV0dXJuIGEgaGFuZGxlIHRvIHRoZSBldmVudCBjaGFubmVsIGRyaXZlciwg b3IgTlVMTCBvbiBmYWlsdXJlLCBpbgotICogd2hpY2ggY2FzZSBlcnJubyB3aWxsIGJlIHNldCBh cHByb3ByaWF0ZWx5LgotICoKLSAqIE5vdGU6Ci0gKiBBZnRlciBmb3JrIGEgY2hpbGQgcHJvY2Vz cyBtdXN0IG5vdCB1c2UgYW55IG9wZW5lZCB4YyBldnRjaG4KLSAqIGhhbmRsZSBpbmhlcml0ZWQg ZnJvbSB0aGVpciBwYXJlbnQuIFRoZXkgbXVzdCBvcGVuIGEgbmV3IGhhbmRsZSBpZgotICogdGhl eSB3YW50IHRvIGludGVyYWN0IHdpdGggeGMuCi0gKgotICogQmVmb3JlIFhlbiBwcmUtNC4xIHRo aXMgZnVuY3Rpb24gd291bGQgc29tZXRpbWVzIHJlcG9ydCBlcnJvcnMgd2l0aCBwZXJyb3IuCi0g Ki8KLXhjX2V2dGNobiAqeGNfZXZ0Y2huX29wZW4oeGVudG9vbGxvZ19sb2dnZXIgKmxvZ2dlciwK LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqB1bnNpZ25lZCBvcGVuX2ZsYWdzKTsKwqAKLS8qCi0gKiBDbG9zZSBhIGhhbmRsZSBwcmV2aW91 c2x5IGFsbG9jYXRlZCB3aXRoIHhjX2V2dGNobl9vcGVuKCkuCi0gKi8KLWludCB4Y19ldnRjaG5f Y2xvc2UoeGNfZXZ0Y2huICp4Y2UpOwotCi0vKgotICogUmV0dXJuIGFuIGZkIHRoYXQgY2FuIGJl IHNlbGVjdCgpZWQgb24uCi0gKgotICogTm90ZSB0aGF0IGR1ZSB0byBidWdzLCBzZXR0aW5nIHRo aXMgZmQgdG8gbm9uIGJsb2NraW5nIG1heSBub3QKLSAqIHdvcms6IHlvdSB3b3VsZCBob3BlIHRo YXQgaXQgd291bGQgcmVzdWx0IGluIHhjX2V2dGNobl9wZW5kaW5nCi0gKiBmYWlsaW5nIHdpdGgg RVdPVUxEQkxPQ0sgaWYgdGhlcmUgYXJlIG5vIGV2ZW50cyBzaWduYWxlZCwgYnV0IGluCi0gKiBm YWN0IGl0IG1heSBibG9jay7CoMKgKEJ1ZyBpcyBwcmVzZW50IGluIGF0IGxlYXN0IExpbnV4IDMu MTIsIGFuZAotICogcGVyaGFwcyBvbiBvdGhlciBwbGF0Zm9ybXMgb3IgbGF0ZXIgdmVyc2lvbi4p Ci0gKgotICogVG8gYmUgc2FmZSwgeW91IG11c3QgdXNlIHBvbGwoKSBvciBzZWxlY3QoKSBiZWZv cmUgZWFjaCBjYWxsIHRvCi0gKiB4Y19ldnRjaG5fcGVuZGluZy7CoMKgSWYgeW91IGhhdmUgbXVs dGlwbGUgdGhyZWFkcyAob3IgcHJvY2Vzc2VzKQotICogc2hhcmluZyBhIHNpbmdsZSB4Y2UgaGFu ZGxlIHRoaXMgd2lsbCBub3Qgd29yaywgYW5kIHRoZXJlIGlzIG5vCi0gKiBzdHJhaWdodGZvcndh cmQgd29ya2Fyb3VuZC7CoMKgUGxlYXNlIGRlc2lnbiB5b3VyIHByb2dyYW0gc29tZSBvdGhlcgot ICogd2F5LgotICovCi1pbnQgeGNfZXZ0Y2huX2ZkKHhjX2V2dGNobiAqeGNlKTsKLQotLyoKLSAq IE5vdGlmeSB0aGUgZ2l2ZW4gZXZlbnQgY2hhbm5lbC4gUmV0dXJucyAtMSBvbiBmYWlsdXJlLCBp biB3aGljaCBjYXNlCi0gKiBlcnJubyB3aWxsIGJlIHNldCBhcHByb3ByaWF0ZWx5LgotICovCi1p bnQgeGNfZXZ0Y2huX25vdGlmeSh4Y19ldnRjaG4gKnhjZSwgZXZ0Y2huX3BvcnRfdCBwb3J0KTsK LQotLyoKLSAqIFJldHVybnMgYSBuZXcgZXZlbnQgcG9ydCBhd2FpdGluZyBpbnRlcmRvbWFpbiBj b25uZWN0aW9uIGZyb20gdGhlIGdpdmVuCi0gKiBkb21haW4gSUQsIG9yIC0xIG9uIGZhaWx1cmUs IGluIHdoaWNoIGNhc2UgZXJybm8gd2lsbCBiZSBzZXQgYXBwcm9wcmlhdGVseS4KLSAqLwotZXZ0 Y2huX3BvcnRfb3JfZXJyb3JfdAoteGNfZXZ0Y2huX2JpbmRfdW5ib3VuZF9wb3J0KHhjX2V2dGNo biAqeGNlLCBpbnQgZG9taWQpOwotCi0vKgotICogUmV0dXJucyBhIG5ldyBldmVudCBwb3J0IGJv dW5kIHRvIHRoZSByZW1vdGUgcG9ydCBmb3IgdGhlIGdpdmVuIGRvbWFpbiBJRCwKLSAqIG9yIC0x IG9uIGZhaWx1cmUsIGluIHdoaWNoIGNhc2UgZXJybm8gd2lsbCBiZSBzZXQgYXBwcm9wcmlhdGVs eS4KLSAqLwotZXZ0Y2huX3BvcnRfb3JfZXJyb3JfdAoteGNfZXZ0Y2huX2JpbmRfaW50ZXJkb21h aW4oeGNfZXZ0Y2huICp4Y2UsIGludCBkb21pZCwKLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGV2dGNobl9wb3J0X3QgcmVtb3RlX3BvcnQpOwot Ci0vKgotICogQmluZCBhbiBldmVudCBjaGFubmVsIHRvIHRoZSBnaXZlbiBWSVJRLiBSZXR1cm5z IHRoZSBldmVudCBjaGFubmVsIGJvdW5kIHRvCi0gKiB0aGUgVklSUSwgb3IgLTEgb24gZmFpbHVy ZSwgaW4gd2hpY2ggY2FzZSBlcnJubyB3aWxsIGJlIHNldCBhcHByb3ByaWF0ZWx5LgotICovCi1l dnRjaG5fcG9ydF9vcl9lcnJvcl90Ci14Y19ldnRjaG5fYmluZF92aXJxKHhjX2V2dGNobiAqeGNl LCB1bnNpZ25lZCBpbnQgdmlycSk7Ci0KLS8qCi0gKiBVbmJpbmQgdGhlIGdpdmVuIGV2ZW50IGNo YW5uZWwuIFJldHVybnMgLTEgb24gZmFpbHVyZSwgaW4gd2hpY2ggY2FzZSBlcnJubwotICogd2ls bCBiZSBzZXQgYXBwcm9wcmlhdGVseS4KLSAqLwotaW50IHhjX2V2dGNobl91bmJpbmQoeGNfZXZ0 Y2huICp4Y2UsIGV2dGNobl9wb3J0X3QgcG9ydCk7Ci0KLS8qCi0gKiBSZXR1cm4gdGhlIG5leHQg ZXZlbnQgY2hhbm5lbCB0byBiZWNvbWUgcGVuZGluZywgb3IgLTEgb24gZmFpbHVyZSwgaW4gd2hp Y2gKLSAqIGNhc2UgZXJybm8gd2lsbCBiZSBzZXQgYXBwcm9wcmlhdGVseS4KLSAqCi0gKiBBdCB0 aGUgaHlwZXJ2aXNvciBsZXZlbCB0aGUgZXZlbnQgY2hhbm5lbCB3aWxsIGhhdmUgYmVlbiBtYXNr ZWQsCi0gKiBhbmQgdGhlbiBjbGVhcmVkLCBieSB0aGUgdW5kZXJseWluZyBtYWNoaW5lcnkgKGV2 dGNobiBrZXJuZWwKLSAqIGRyaXZlciwgb3IgZXF1aXZhbGVudCkuwqDCoFNvIGlmIHRoZSBldmVu dCBjaGFubmVsIGlzIHNpZ25hbGVkIGFnYWluCi0gKiBhZnRlciBpdCBpcyByZXR1cm5lZCBoZXJl LCBpdCB3aWxsIGJlIHF1ZXVlZCB1cCwgYW5kIGRlbGl2ZXJlZAotICogYWdhaW4gYWZ0ZXIgeW91 IHVubWFzayBpdC7CoMKgKFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBpbiB0aGUgWGVuCi0gKiBwdWJs aWMgaGVhZGVyIGV2ZW50X2NoYW5uZWwuaC4pCi0gKgotICogT24gcmVjZWl2aW5nIHRoZSBub3Rp ZmljYXRpb24gZnJvbSB4Y19ldnRjaG5fcGVuZGluZywgeW91IHNob3VsZAotICogbm9ybWFsbHk6 IGNoZWNrIChieSBvdGhlciBtZWFucykgd2hhdCB3b3JrIG5lZWRzIGRvaW5nOyBkbyB0aGUKLSAq IG5lY2Vzc2FyeSB3b3JrIChpZiBhbnkpOyB1bm1hc2sgdGhlIGV2ZW50IGNoYW5uZWwgd2l0aAot ICogeGNfZXZ0Y2huX3VubWFzayAoaWYgeW91IHdhbnQgdG8gcmVjZWl2ZSBhbnkgZnVydGhlcgot ICogbm90aWZpY2F0aW9ucykuCi0gKi8KLWV2dGNobl9wb3J0X29yX2Vycm9yX3QKLXhjX2V2dGNo bl9wZW5kaW5nKHhjX2V2dGNobiAqeGNlKTsKLQotLyoKLSAqIFVubWFzayB0aGUgZ2l2ZW4gZXZl bnQgY2hhbm5lbC4gUmV0dXJucyAtMSBvbiBmYWlsdXJlLCBpbiB3aGljaCBjYXNlIGVycm5vCi0g KiB3aWxsIGJlIHNldCBhcHByb3ByaWF0ZWx5LgotICovCi1pbnQgeGNfZXZ0Y2huX3VubWFzayh4 Y19ldnRjaG4gKnhjZSwgZXZ0Y2huX3BvcnRfdCBwb3J0KTsKwqAKwqBpbnQgeGNfcGh5c2Rldl9w Y2lfYWNjZXNzX21vZGlmeSh4Y19pbnRlcmZhY2UgKnhjaCwKwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1aW50MzJfdCBk b21pZCwKQEAgLTI4NTEsNiArMjc1NSw5IEBAIGludCB4Y19wc3JfY2F0X2dldF9sM19pbmZvKHhj X2ludGVyZmFjZSAqeGNoLCB1aW50MzJfdCBzb2NrZXQsCsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYm9vbCAqY2RwX2VuYWJsZWQpOwrCoCNl bmRpZgrCoAorLyogQ29tcGF0IHNoaW1zICovCisjaW5jbHVkZSAieGVuY3RybF9jb21wYXQuaCIK KwrCoCNlbmRpZiAvKiBYRU5DVFJMX0ggKi8KwqAKwqAvKgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGli eGMvaW5jbHVkZS94ZW5jdHJsX2NvbXBhdC5oIGIvdG9vbHMvbGlieGMvaW5jbHVkZS94ZW5jdHJs X2NvbXBhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZGFlYjIKLS0t IC9kZXYvbnVsbAorKysgYi90b29scy9saWJ4Yy9pbmNsdWRlL3hlbmN0cmxfY29tcGF0LmgKQEAg LTAsMCArMSw0OCBAQAorLyoKKyAqIENvbXBhdCBzaGltcyBmb3IgdXNlIG9mIDNyZCBwYXJ0eSBj b25zdW1lcnMgb2YgbGlieGVuY3RybAorICogZnVuY3Rpb25hbGl0eSB3aGljaCBoYXMgYmVlbiBz cGxpdCBpbnRvIHNlcGFyYXRlIGxpYnJhcmllcy4KKyAqCisgKiBOZXcgY29kZSBzaG91bGQgdXNl IHRoZSBzZXBhcmF0ZSBsaWJyYXJpZXMuCisgKgorICogRWFjaCBpbnRlcmZhY2UgbXVzdCBiZSBv cHRlZC1pbnRvIHNlcGFyYXRlbHkgYnkgZGVmaW5pbmc6CisgKgorICogWENfV0FOVF9DT01QQVRf RVZUQ0hOX0FQSQorICrCoMKgLSBGdW5jdGlvbnMgcmVsYXRpbmcgdG8gL2Rldi94ZW4vZXZ0Y2hu CisgKi8KKyNpZm5kZWYgWEVOQ1RSTF9DT01QQVRfSAorI2RlZmluZSBYRU5DVFJMX0NPTVBBVF9I CisKKyNpZmRlZiBYQ19XQU5UX0NPTVBBVF9FVlRDSE5fQVBJCisKK3R5cGVkZWYgc3RydWN0IHhl bmV2dGNobl9oYW5kbGUgeGNfZXZ0Y2huOworCit4Y19ldnRjaG4gKnhjX2V2dGNobl9vcGVuKHhl bnRvb2xsb2dfbG9nZ2VyICpsb2dnZXIsCivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdW5zaWduZWQgb3Blbl9mbGFncyk7CitpbnQgeGNf ZXZ0Y2huX2Nsb3NlKHhjX2V2dGNobiAqeGNlKTsKK2ludCB4Y19ldnRjaG5fZmQoeGNfZXZ0Y2hu ICp4Y2UpOworaW50IHhjX2V2dGNobl9ub3RpZnkoeGNfZXZ0Y2huICp4Y2UsIGV2dGNobl9wb3J0 X3QgcG9ydCk7CitldnRjaG5fcG9ydF9vcl9lcnJvcl90Cit4Y19ldnRjaG5fYmluZF91bmJvdW5k X3BvcnQoeGNfZXZ0Y2huICp4Y2UsIGludCBkb21pZCk7CitldnRjaG5fcG9ydF9vcl9lcnJvcl90 Cit4Y19ldnRjaG5fYmluZF9pbnRlcmRvbWFpbih4Y19ldnRjaG4gKnhjZSwgaW50IGRvbWlkLAor wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZXZ0 Y2huX3BvcnRfdCByZW1vdGVfcG9ydCk7CitldnRjaG5fcG9ydF9vcl9lcnJvcl90Cit4Y19ldnRj aG5fYmluZF92aXJxKHhjX2V2dGNobiAqeGNlLCB1bnNpZ25lZCBpbnQgdmlycSk7CitpbnQgeGNf ZXZ0Y2huX3VuYmluZCh4Y19ldnRjaG4gKnhjZSwgZXZ0Y2huX3BvcnRfdCBwb3J0KTsKK2V2dGNo bl9wb3J0X29yX2Vycm9yX3QKK3hjX2V2dGNobl9wZW5kaW5nKHhjX2V2dGNobiAqeGNlKTsKK2lu dCB4Y19ldnRjaG5fdW5tYXNrKHhjX2V2dGNobiAqeGNlLCBldnRjaG5fcG9ydF90IHBvcnQpOwor CisjZW5kaWYgLyogWENfV0FOVF9DT01QQVRfRVZUQ0hOX0FQSSAqLworCisjZW5kaWYKKworLyoK KyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJTRCIK KyAqIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiB0YWItd2lkdGg6IDQKKyAqIGluZGVudC10YWJzLW1v ZGU6IG5pbAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS90b29scy9saWJ4Yy9pbmNsdWRlL3hl bmd1ZXN0LmggYi90b29scy9saWJ4Yy9pbmNsdWRlL3hlbmd1ZXN0LmgKaW5kZXggOGY5MThiMS4u MDUwYTUzNyAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGMvaW5jbHVkZS94ZW5ndWVzdC5oCisrKyBi L3Rvb2xzL2xpYnhjL2luY2x1ZGUveGVuZ3Vlc3QuaApAQCAtMzQsNiArMzQsMTIgQEAKwqAjZGVm aW5lIFg4Nl82NF9CX1NJWkXCoMKgwqA2NCAKwqAjZGVmaW5lIFg4Nl8zMl9CX1NJWkXCoMKgwqAz MgrCoAorLyoKKyAqIFVzZXIgbm90IHVzaW5nIHhjX3N1c3BlbmRfKiAvIHhjX2F3YWl0X3N1c3Bl bnQgbWF5IG5vdCB3YW50IHRvCisgKiBpbmNsdWRlIHRoZSBmdWxsIGxpYnhlbmV2dGNobiBBUEkg aGVyZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeGVuZXZ0Y2huX2hhbmRsZSB4ZW5ldnRjaG5faGFu ZGxlOworCsKgLyogY2FsbGJhY2tzIHByb3ZpZGVkIGJ5IHhjX2RvbWFpbl9zYXZlICovCsKgc3Ry dWN0IHNhdmVfY2FsbGJhY2tzIHsKwqDCoMKgwqDCoC8qIENhbGxlZCBhZnRlciBleHBpcmF0aW9u IG9mIGNoZWNrcG9pbnQgaW50ZXJ2YWwsCkBAIC0xNjEsMTggKzE2NywxOCBAQCBzdHJ1Y3QgeGNf aHZtX2Zpcm13YXJlX21vZHVsZSB7CsKgICogU2V0cyAqbG9ja2ZkIHRvIC0xLgrCoCAqIEhhcyBk ZWFsbG9jYXRlZCBldmVyeXRoaW5nIGV2ZW4gb24gZXJyb3IuCsKgICovCi1pbnQgeGNfc3VzcGVu ZF9ldnRjaG5fcmVsZWFzZSh4Y19pbnRlcmZhY2UgKnhjaCwgeGNfZXZ0Y2huICp4Y2UsIGludCBk b21pZCwgaW50IHN1c3BlbmRfZXZ0Y2huLCBpbnQgKmxvY2tmZCk7CitpbnQgeGNfc3VzcGVuZF9l dnRjaG5fcmVsZWFzZSh4Y19pbnRlcmZhY2UgKnhjaCwgeGVuZXZ0Y2huX2hhbmRsZSAqeGNlLCBp bnQgZG9taWQsIGludCBzdXNwZW5kX2V2dGNobiwgaW50ICpsb2NrZmQpOwrCoArCoC8qKgrCoCAq IFRoaXMgZnVuY3Rpb24gZWF0cyB0aGUgaW5pdGlhbCBub3RpZmljYXRpb24uCsKgICogeGNlIG11 c3Qgbm90IGJlIHVzZWQgZm9yIGFueXRoaW5nIGVsc2UKwqAgKiBTZWUgeGNfc3VzcGVuZF9ldnRj aG5faW5pdF9zYW5lIHJlIGxvY2tmZC4KwqAgKi8KLWludCB4Y19zdXNwZW5kX2V2dGNobl9pbml0 X2V4Y2x1c2l2ZSh4Y19pbnRlcmZhY2UgKnhjaCwgeGNfZXZ0Y2huICp4Y2UsCitpbnQgeGNfc3Vz cGVuZF9ldnRjaG5faW5pdF9leGNsdXNpdmUoeGNfaW50ZXJmYWNlICp4Y2gsIHhlbmV2dGNobl9o YW5kbGUgKnhjZSwKwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludCBkb21pZCwgaW50IHBvcnQsIGludCAq bG9ja2ZkKTsKwqAKwqAvKiB4Y2UgbXVzdCBub3QgYmUgdXNlZCBmb3IgYW55dGhpbmcgZWxzZSAq LwotaW50IHhjX2F3YWl0X3N1c3BlbmQoeGNfaW50ZXJmYWNlICp4Y2gsIHhjX2V2dGNobiAqeGNl LCBpbnQgc3VzcGVuZF9ldnRjaG4pOworaW50IHhjX2F3YWl0X3N1c3BlbmQoeGNfaW50ZXJmYWNl ICp4Y2gsIHhlbmV2dGNobl9oYW5kbGUgKnhjZSwgaW50IHN1c3BlbmRfZXZ0Y2huKTsKwqAKwqAv KioKwqAgKiBUaGUgcG9ydCB3aWxsIGJlIHNpZ25hbGVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoaXMg Y2FsbApAQCAtMTgxLDcgKzE4Nyw3IEBAIGludCB4Y19hd2FpdF9zdXNwZW5kKHhjX2ludGVyZmFj ZSAqeGNoLCB4Y19ldnRjaG4gKnhjZSwgaW50IHN1c3BlbmRfZXZ0Y2huKTsKwqAgKiBhbmQgZmVk IHRvIHhjX3N1c3BlbmRfZXZ0Y2huX3JlbGVhc2UuwqDCoChPbiBlcnJvciAqbG9ja2ZkIGlzCsKg ICogdW5kZWZpbmVkIGFuZCB4Y19zdXNwZW5kX2V2dGNobl9yZWxlYXNlIGlzIG5vdCBhbGxvd2Vk LikKwqAgKi8KLWludCB4Y19zdXNwZW5kX2V2dGNobl9pbml0X3NhbmUoeGNfaW50ZXJmYWNlICp4 Y2gsIHhjX2V2dGNobiAqeGNlLAoraW50IHhjX3N1c3BlbmRfZXZ0Y2huX2luaXRfc2FuZSh4Y19p bnRlcmZhY2UgKnhjaCwgeGVuZXZ0Y2huX2hhbmRsZSAqeGNlLArCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnQgZG9taWQs IGludCBwb3J0LCBpbnQgKmxvY2tmZCk7CsKgCsKgaW50IHhjX21hcmtfcGFnZV9vbmxpbmUoeGNf aW50ZXJmYWNlICp4Y2gsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCmRpZmYgLS1naXQgYS90b29scy9s aWJ4Yy94Y19ldnRjaG5fY29tcGF0LmMgYi90b29scy9saWJ4Yy94Y19ldnRjaG5fY29tcGF0LmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQzZTRiYQotLS0gL2Rldi9udWxs CisrKyBiL3Rvb2xzL2xpYnhjL3hjX2V2dGNobl9jb21wYXQuYwpAQCAtMCwwICsxLDc1IEBACisv KgorICogQ29tcGF0IHNoaW1zIGZvciB1c2Ugb2YgM3JkIHBhcnR5IGNvbnN1bWVycyBvZiBsaWJ4 ZW5jdHJsIHhjX2V2dGNobgorICogZnVuY3Rpb25hbGl0eSB3aGljaCBoYXMgYmVlbiBzcGxpdCBp bnRvIHNlcGFyYXRlIGxpYnJhcmllcy4KKyAqLworCisjaW5jbHVkZSA8eGVuZXZ0Y2huLmg+CisK KyNkZWZpbmUgWENfV0FOVF9DT01QQVRfRVZUQ0hOX0FQSQorI2luY2x1ZGUgInhlbmN0cmwuaCIK KworeGNfZXZ0Y2huICp4Y19ldnRjaG5fb3Blbih4ZW50b29sbG9nX2xvZ2dlciAqbG9nZ2VyLAor wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVuc2ln bmVkIG9wZW5fZmxhZ3MpCit7CivCoMKgwqDCoHJldHVybiB4ZW5ldnRjaG5fb3Blbihsb2dnZXIs IG9wZW5fZmxhZ3MpOworfQorCitpbnQgeGNfZXZ0Y2huX2Nsb3NlKHhjX2V2dGNobiAqeGNlKQor eworwqDCoMKgwqByZXR1cm4geGVuZXZ0Y2huX2Nsb3NlKHhjZSk7Cit9CisKK2ludCB4Y19ldnRj aG5fZmQoeGNfZXZ0Y2huICp4Y2UpCit7CivCoMKgwqDCoHJldHVybiB4ZW5ldnRjaG5fZmQoeGNl KTsKK30KKworaW50IHhjX2V2dGNobl9ub3RpZnkoeGNfZXZ0Y2huICp4Y2UsIGV2dGNobl9wb3J0 X3QgcG9ydCkKK3sKK8KgwqDCoMKgcmV0dXJuIHhlbmV2dGNobl9ub3RpZnkoeGNlLCBwb3J0KTsK K30KKworZXZ0Y2huX3BvcnRfb3JfZXJyb3JfdAoreGNfZXZ0Y2huX2JpbmRfdW5ib3VuZF9wb3J0 KHhjX2V2dGNobiAqeGNlLCBpbnQgZG9taWQpCit7CivCoMKgwqDCoHJldHVybiB4ZW5ldnRjaG5f YmluZF91bmJvdW5kX3BvcnQoeGNlLCBkb21pZCk7Cit9CisKK2V2dGNobl9wb3J0X29yX2Vycm9y X3QKK3hjX2V2dGNobl9iaW5kX2ludGVyZG9tYWluKHhjX2V2dGNobiAqeGNlLCBpbnQgZG9taWQs CivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBl dnRjaG5fcG9ydF90IHJlbW90ZV9wb3J0KQoreworwqDCoMKgwqByZXR1cm4geGVuZXZ0Y2huX2Jp bmRfaW50ZXJkb21haW4oeGNlLCBkb21pZCwgcmVtb3RlX3BvcnQpOworfQorCitldnRjaG5fcG9y dF9vcl9lcnJvcl90Cit4Y19ldnRjaG5fYmluZF92aXJxKHhjX2V2dGNobiAqeGNlLCB1bnNpZ25l ZCBpbnQgdmlycSkKK3sKK8KgwqDCoMKgcmV0dXJuIHhlbmV2dGNobl9iaW5kX3ZpcnEoeGNlLCB2 aXJxKTsKK30KKworaW50IHhjX2V2dGNobl91bmJpbmQoeGNfZXZ0Y2huICp4Y2UsIGV2dGNobl9w b3J0X3QgcG9ydCkKK3sKK8KgwqDCoMKgcmV0dXJuIHhlbmV2dGNobl91bmJpbmQoeGNlLCBwb3J0 KTsKK30KKworZXZ0Y2huX3BvcnRfb3JfZXJyb3JfdAoreGNfZXZ0Y2huX3BlbmRpbmcoeGNfZXZ0 Y2huICp4Y2UpCit7CivCoMKgwqDCoHJldHVybiB4ZW5ldnRjaG5fcGVuZGluZyh4Y2UpOworfQor CitpbnQgeGNfZXZ0Y2huX3VubWFzayh4Y19ldnRjaG4gKnhjZSwgZXZ0Y2huX3BvcnRfdCBwb3J0 KQoreworwqDCoMKgwqByZXR1cm4geGVuZXZ0Y2huX3VubWFzayh4Y2UsIHBvcnQpOworfQorCisv KgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9kZTogQworICogYy1maWxlLXN0eWxlOiAiQlNE IgorICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIHRhYi13aWR0aDogNAorICogaW5kZW50LXRhYnMt bW9kZTogbmlsCisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhjL3hjX2ZyZWVi c2Rfb3NkZXAuYyBiL3Rvb2xzL2xpYnhjL3hjX2ZyZWVic2Rfb3NkZXAuYwppbmRleCA0MzIzZTE2 Li4zMzk5OTdjIDEwMDY0NAotLS0gYS90b29scy9saWJ4Yy94Y19mcmVlYnNkX29zZGVwLmMKKysr IGIvdG9vbHMvbGlieGMveGNfZnJlZWJzZF9vc2RlcC5jCkBAIC0zMSwxMyArMzEsMTEgQEAKwqAj aW5jbHVkZSA8c3lzL2lvY3RsLmg+CsKgCsKgI2luY2x1ZGUgPHhlbi9tZW1vcnkuaD4KLSNpbmNs dWRlIDx4ZW4vc3lzL2V2dGNobi5oPgrCoArCoCNpbmNsdWRlICJ4ZW5jdHJsLmgiCsKgI2luY2x1 ZGUgInhlbmN0cmxvc2RlcC5oIgrCoArCoCNkZWZpbmUgUFJJVkNNRF9ERVbCoMKgwqDCoMKgIi9k ZXYveGVuL3ByaXZjbWQiCi0jZGVmaW5lIEVWVENITl9ERVbCoMKgwqDCoMKgwqAiL2Rldi94ZW4v ZXZ0Y2huIgrCoArCoCNkZWZpbmUgUEVSUk9SKF9tLCBfYS4uLikgeGNfb3NkZXBfbG9nKHhjaCxY VExfRVJST1IsWENfSU5URVJOQUxfRVJST1IsX20gXArCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCIgKCVkID0gJXMpIiwgIyMgX2EgLCBlcnJubywgeGNfc3RyZXJyb3IoeGNo LCBlcnJubykpCkBAIC0yNTEsMTA1ICsyNDksNiBAQCBzdGF0aWMgc3RydWN0IHhjX29zZGVwX29w cyBmcmVlYnNkX3ByaXZjbWRfb3BzID0gewrCoMKgwqDCoMKgfSwKwqB9OwrCoAotLyotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSBFdnRjaG4gZGV2aWNlIGludGVyZmFjZSAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKi8KLWludCBvc2RlcF9ldnRjaG5fb3Blbih4Y19ldnRjaG4gKnhjZSkKLXsK LcKgwqDCoMKgaW50IGZkID0gb3BlbihFVlRDSE5fREVWLCBPX1JEV1IpOwotwqDCoMKgwqBpZiAo IGZkID09IC0xICkKLcKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLTE7Ci3CoMKgwqDCoHhjZS0+ZmQg PSBmZDsKLcKgwqDCoMKgcmV0dXJuIDA7Ci19Ci0KLWludCBvc2RlcF9ldnRjaG5fY2xvc2UoeGNf ZXZ0Y2huICp4Y2UpCi17Ci3CoMKgwqDCoGlmICggeGNlLT5mZCA9PSAtMSApCi3CoMKgwqDCoMKg wqDCoMKgcmV0dXJuIDA7Ci0KLcKgwqDCoMKgcmV0dXJuIGNsb3NlKHhjZS0+ZmQpOwotfQotCi1p bnQgeGNfZXZ0Y2huX2ZkKHhjX2V2dGNobiAqeGNlKQotewotwqDCoMKgwqByZXR1cm4geGNlLT5m ZDsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRXZ0Y2huIGludGVyZmFj ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLWludCB4Y19ldnRjaG5fbm90aWZ5KHhj X2V2dGNobiAqeGNlLCBldnRjaG5fcG9ydF90IHBvcnQpCi17Ci3CoMKgwqDCoGludCBmZCA9IHhj ZS0+ZmQ7Ci3CoMKgwqDCoHN0cnVjdCBpb2N0bF9ldnRjaG5fbm90aWZ5IG5vdGlmeTsKLQotwqDC oMKgwqBub3RpZnkucG9ydCA9IHBvcnQ7Ci0KLcKgwqDCoMKgcmV0dXJuIGlvY3RsKGZkLCBJT0NU TF9FVlRDSE5fTk9USUZZLCAmbm90aWZ5KTsKLX0KLQotZXZ0Y2huX3BvcnRfb3JfZXJyb3JfdCB4 Y19ldnRjaG5fYmluZF91bmJvdW5kX3BvcnQoeGNfZXZ0Y2huICp4Y2UsIGludCBkb21pZCkKLXsK LcKgwqDCoMKgaW50IHJldCwgZmQgPSB4Y2UtPmZkOwotwqDCoMKgwqBzdHJ1Y3QgaW9jdGxfZXZ0 Y2huX2JpbmRfdW5ib3VuZF9wb3J0IGJpbmQ7Ci0KLcKgwqDCoMKgYmluZC5yZW1vdGVfZG9tYWlu ID0gZG9taWQ7Ci0KLcKgwqDCoMKgcmV0ID0gaW9jdGwoZmQsIElPQ1RMX0VWVENITl9CSU5EX1VO Qk9VTkRfUE9SVCwgJmJpbmQpOwotwqDCoMKgwqByZXR1cm4gKCByZXQgPT0gMCApID8gYmluZC5w b3J0IDogcmV0OwotfQotCi1ldnRjaG5fcG9ydF9vcl9lcnJvcl90Ci14Y19ldnRjaG5fYmluZF9p bnRlcmRvbWFpbih4Y19ldnRjaG4gKnhjZSwgaW50IGRvbWlkLCBldnRjaG5fcG9ydF90IHJlbW90 ZV9wb3J0KQotewotwqDCoMKgwqBpbnQgcmV0LCBmZCA9IHhjZS0+ZmQ7Ci3CoMKgwqDCoHN0cnVj dCBpb2N0bF9ldnRjaG5fYmluZF9pbnRlcmRvbWFpbiBiaW5kOwotCi3CoMKgwqDCoGJpbmQucmVt b3RlX2RvbWFpbiA9IGRvbWlkOwotwqDCoMKgwqBiaW5kLnJlbW90ZV9wb3J0ID0gcmVtb3RlX3Bv cnQ7Ci0KLcKgwqDCoMKgcmV0ID0gaW9jdGwoZmQsIElPQ1RMX0VWVENITl9CSU5EX0lOVEVSRE9N QUlOLCAmYmluZCk7Ci3CoMKgwqDCoHJldHVybiAoIHJldCA9PSAwICkgPyBiaW5kLnBvcnQgOiBy ZXQ7Ci19Ci0KLWV2dGNobl9wb3J0X29yX2Vycm9yX3QgeGNfZXZ0Y2huX2JpbmRfdmlycSh4Y19l dnRjaG4gKnhjZSwgdW5zaWduZWQgaW50IHZpcnEpCi17Ci3CoMKgwqDCoGludCByZXQsIGZkID0g eGNlLT5mZDsKLcKgwqDCoMKgc3RydWN0IGlvY3RsX2V2dGNobl9iaW5kX3ZpcnEgYmluZDsKLQot wqDCoMKgwqBiaW5kLnZpcnEgPSB2aXJxOwotCi3CoMKgwqDCoHJldCA9IGlvY3RsKGZkLCBJT0NU TF9FVlRDSE5fQklORF9WSVJRLCAmYmluZCk7Ci3CoMKgwqDCoHJldHVybiAoIHJldCA9PSAwICkg PyBiaW5kLnBvcnQgOiByZXQ7Ci19Ci0KLWludCB4Y19ldnRjaG5fdW5iaW5kKHhjX2V2dGNobiAq eGNlLCBldnRjaG5fcG9ydF90IHBvcnQpCi17Ci3CoMKgwqDCoGludCBmZCA9IHhjZS0+ZmQ7Ci3C oMKgwqDCoHN0cnVjdCBpb2N0bF9ldnRjaG5fdW5iaW5kIHVuYmluZDsKLQotwqDCoMKgwqB1bmJp bmQucG9ydCA9IHBvcnQ7Ci0KLcKgwqDCoMKgcmV0dXJuIGlvY3RsKGZkLCBJT0NUTF9FVlRDSE5f VU5CSU5ELCAmdW5iaW5kKTsKLX0KLQotZXZ0Y2huX3BvcnRfb3JfZXJyb3JfdCB4Y19ldnRjaG5f cGVuZGluZyh4Y19ldnRjaG4gKnhjZSkKLXsKLcKgwqDCoMKgaW50IGZkID0geGNlLT5mZDsKLcKg wqDCoMKgZXZ0Y2huX3BvcnRfdCBwb3J0OwotCi3CoMKgwqDCoGlmICggcmVhZChmZCwgJnBvcnQs IHNpemVvZihwb3J0KSkgIT0gc2l6ZW9mKHBvcnQpICkKLcKgwqDCoMKgwqDCoMKgwqByZXR1cm4g LTE7Ci0KLcKgwqDCoMKgcmV0dXJuIHBvcnQ7Ci19Ci0KLWludCB4Y19ldnRjaG5fdW5tYXNrKHhj X2V2dGNobiAqeGNlLCBldnRjaG5fcG9ydF90IHBvcnQpCi17Ci3CoMKgwqDCoGludCBmZCA9IHhj ZS0+ZmQ7Ci0KLcKgwqDCoMKgaWYgKCB3cml0ZShmZCwgJnBvcnQsIHNpemVvZihwb3J0KSkgIT0g c2l6ZW9mKHBvcnQpICkKLcKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLTE7Ci3CoMKgwqDCoHJldHVy biAwOwotfQotCsKgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZyZWVCU0QgaW50ZXJm YWNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KwqBzdGF0aWMgc3RydWN0IHhjX29z ZGVwX29wcyAqCsKgZnJlZWJzZF9vc2RlcF9pbml0KHhjX2ludGVyZmFjZSAqeGNoLCBlbnVtIHhj X29zZGVwX3R5cGUgdHlwZSkKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhjL3hjX2xpbnV4X29zZGVw LmMgYi90b29scy9saWJ4Yy94Y19saW51eF9vc2RlcC5jCmluZGV4IDkwNTQ0ZmIuLjY1Mjk5ZDAg MTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhjL3hjX2xpbnV4X29zZGVwLmMKKysrIGIvdG9vbHMvbGli eGMveGNfbGludXhfb3NkZXAuYwpAQCAtMzEsNyArMzEsNiBAQArCoCNpbmNsdWRlIDxzeXMvaW9j dGwuaD4KwqAKwqAjaW5jbHVkZSA8eGVuL21lbW9yeS5oPgotI2luY2x1ZGUgPHhlbi9zeXMvZXZ0 Y2huLmg+CsKgI2luY2x1ZGUgPHhlbi9zeXMvZ250ZGV2Lmg+CsKgI2luY2x1ZGUgPHhlbi9zeXMv Z250YWxsb2MuaD4KwqAKQEAgLTQ2MSwxMDAgKzQ2MCw2IEBAIHN0YXRpYyBzdHJ1Y3QgeGNfb3Nk ZXBfb3BzIGxpbnV4X3ByaXZjbWRfb3BzID0gewrCoArCoCNkZWZpbmUgREVWWEVOICIvZGV2L3hl bi8iCsKgCi1pbnQgb3NkZXBfZXZ0Y2huX29wZW4oeGNfZXZ0Y2huICp4Y2UpCi17Ci3CoMKgwqDC oGludCBmZCA9IG9wZW4oREVWWEVOICJldnRjaG4iLCBPX1JEV1IpOwotwqDCoMKgwqBpZiAoIGZk ID09IC0xICkKLcKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLTE7Ci3CoMKgwqDCoHhjZS0+ZmQgPSBm ZDsKLcKgwqDCoMKgcmV0dXJuIDA7Ci19Ci0KLWludCBvc2RlcF9ldnRjaG5fY2xvc2UoeGNfZXZ0 Y2huICp4Y2UpCi17Ci3CoMKgwqDCoGlmICggeGNlLT5mZCA9PSAtMSApCi3CoMKgwqDCoMKgwqDC oMKgcmV0dXJuIDA7Ci0KLcKgwqDCoMKgcmV0dXJuIGNsb3NlKHhjZS0+ZmQpOwotfQotCi1pbnQg eGNfZXZ0Y2huX2ZkKHhjX2V2dGNobiAqeGNlKQotewotwqDCoMKgwqByZXR1cm4geGNlLT5mZDsK LX0KLQotaW50IHhjX2V2dGNobl9ub3RpZnkoeGNfZXZ0Y2huICp4Y2UsIGV2dGNobl9wb3J0X3Qg cG9ydCkKLXsKLcKgwqDCoMKgaW50IGZkID0geGNlLT5mZDsKLcKgwqDCoMKgc3RydWN0IGlvY3Rs X2V2dGNobl9ub3RpZnkgbm90aWZ5OwotCi3CoMKgwqDCoG5vdGlmeS5wb3J0ID0gcG9ydDsKLQot wqDCoMKgwqByZXR1cm4gaW9jdGwoZmQsIElPQ1RMX0VWVENITl9OT1RJRlksICZub3RpZnkpOwot fQotCi1ldnRjaG5fcG9ydF9vcl9lcnJvcl90IHhjX2V2dGNobl9iaW5kX3VuYm91bmRfcG9ydCh4 Y19ldnRjaG4gKnhjZSwgaW50IGRvbWlkKQotewotwqDCoMKgwqBpbnQgZmQgPSB4Y2UtPmZkOwot wqDCoMKgwqBzdHJ1Y3QgaW9jdGxfZXZ0Y2huX2JpbmRfdW5ib3VuZF9wb3J0IGJpbmQ7Ci0KLcKg wqDCoMKgYmluZC5yZW1vdGVfZG9tYWluID0gZG9taWQ7Ci0KLcKgwqDCoMKgcmV0dXJuIGlvY3Rs KGZkLCBJT0NUTF9FVlRDSE5fQklORF9VTkJPVU5EX1BPUlQsICZiaW5kKTsKLX0KLQotZXZ0Y2hu X3BvcnRfb3JfZXJyb3JfdCB4Y19ldnRjaG5fYmluZF9pbnRlcmRvbWFpbih4Y19ldnRjaG4gKnhj ZSwgaW50IGRvbWlkLAotwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGV2dGNobl9wb3J0X3QgcmVtb3RlX3BvcnQpCi17Ci3CoMKgwqDCoGludCBmZCA9IHhjZS0+ZmQ7 Ci3CoMKgwqDCoHN0cnVjdCBpb2N0bF9ldnRjaG5fYmluZF9pbnRlcmRvbWFpbiBiaW5kOwotCi3C oMKgwqDCoGJpbmQucmVtb3RlX2RvbWFpbiA9IGRvbWlkOwotwqDCoMKgwqBiaW5kLnJlbW90ZV9w b3J0ID0gcmVtb3RlX3BvcnQ7Ci0KLcKgwqDCoMKgcmV0dXJuIGlvY3RsKGZkLCBJT0NUTF9FVlRD SE5fQklORF9JTlRFUkRPTUFJTiwgJmJpbmQpOwotfQotCi1ldnRjaG5fcG9ydF9vcl9lcnJvcl90 IHhjX2V2dGNobl9iaW5kX3ZpcnEoeGNfZXZ0Y2huICp4Y2UsIHVuc2lnbmVkIGludCB2aXJxKQot ewotwqDCoMKgwqBpbnQgZmQgPSB4Y2UtPmZkOwotwqDCoMKgwqBzdHJ1Y3QgaW9jdGxfZXZ0Y2hu X2JpbmRfdmlycSBiaW5kOwotCi3CoMKgwqDCoGJpbmQudmlycSA9IHZpcnE7Ci0KLcKgwqDCoMKg cmV0dXJuIGlvY3RsKGZkLCBJT0NUTF9FVlRDSE5fQklORF9WSVJRLCAmYmluZCk7Ci19Ci0KLWlu dCB4Y19ldnRjaG5fdW5iaW5kKHhjX2V2dGNobiAqeGNlLCBldnRjaG5fcG9ydF90IHBvcnQpCi17 Ci3CoMKgwqDCoGludCBmZCA9IHhjZS0+ZmQ7Ci3CoMKgwqDCoHN0cnVjdCBpb2N0bF9ldnRjaG5f dW5iaW5kIHVuYmluZDsKLQotwqDCoMKgwqB1bmJpbmQucG9ydCA9IHBvcnQ7Ci0KLcKgwqDCoMKg cmV0dXJuIGlvY3RsKGZkLCBJT0NUTF9FVlRDSE5fVU5CSU5ELCAmdW5iaW5kKTsKLX0KLQotZXZ0 Y2huX3BvcnRfb3JfZXJyb3JfdCB4Y19ldnRjaG5fcGVuZGluZyh4Y19ldnRjaG4gKnhjZSkKLXsK LcKgwqDCoMKgaW50IGZkID0geGNlLT5mZDsKLcKgwqDCoMKgZXZ0Y2huX3BvcnRfdCBwb3J0Owot Ci3CoMKgwqDCoGlmICggcmVhZChmZCwgJnBvcnQsIHNpemVvZihwb3J0KSkgIT0gc2l6ZW9mKHBv cnQpICkKLcKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLTE7Ci0KLcKgwqDCoMKgcmV0dXJuIHBvcnQ7 Ci19Ci0KLWludCB4Y19ldnRjaG5fdW5tYXNrKHhjX2V2dGNobiAqeGNlLCBldnRjaG5fcG9ydF90 IHBvcnQpCi17Ci3CoMKgwqDCoGludCBmZCA9IHhjZS0+ZmQ7Ci0KLcKgwqDCoMKgaWYgKCB3cml0 ZShmZCwgJnBvcnQsIHNpemVvZihwb3J0KSkgIT0gc2l6ZW9mKHBvcnQpICkKLcKgwqDCoMKgwqDC oMKgwqByZXR1cm4gLTE7Ci3CoMKgwqDCoHJldHVybiAwOwotfQotCsKgc3RhdGljIHhjX29zZGVw X2hhbmRsZSBsaW51eF9nbnR0YWJfb3Blbih4Y19nbnR0YWIgKnhjZykKwqB7CsKgwqDCoMKgwqBp bnQgZmQgPSBvcGVuKERFVlhFTiAiZ250ZGV2IiwgT19SRFdSKTsKZGlmZiAtLWdpdCBhL3Rvb2xz L2xpYnhjL3hjX21pbmlvcy5jIGIvdG9vbHMvbGlieGMveGNfbWluaW9zLmMKaW5kZXggNGFjZTFi NS4uZGI3YjM0NCAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGMveGNfbWluaW9zLmMKKysrIGIvdG9v bHMvbGlieGMveGNfbWluaW9zLmMKQEAgLTE5LDE0ICsxOSwxMSBAQArCoCAqLwrCoArCoCN1bmRl ZiBOREVCVUcKLSNpbmNsdWRlICJ4ZW4tZXh0ZXJuYWwvYnNkLXN5cy1xdWV1ZS5oIgrCoCNpbmNs dWRlIDxtaW5pLW9zL3R5cGVzLmg+CsKgI2luY2x1ZGUgPG1pbmktb3Mvb3MuaD4KwqAjaW5jbHVk ZSA8bWluaS1vcy9tbS5oPgrCoCNpbmNsdWRlIDxtaW5pLW9zL2xpYi5oPgrCoCNpbmNsdWRlIDxt aW5pLW9zL2dudG1hcC5oPgotI2luY2x1ZGUgPG1pbmktb3MvZXZlbnRzLmg+Ci0jaW5jbHVkZSA8 bWluaS1vcy93YWl0Lmg+CsKgI2luY2x1ZGUgPHN5cy9tbWFuLmg+CsKgCsKgI2luY2x1ZGUgPHhl bi9tZW1vcnkuaD4KQEAgLTQxLDEzICszOCw5IEBACsKgI2luY2x1ZGUgInhjX3ByaXZhdGUuaCIK wqAKwqB2b2lkIG1pbmlvc19pbnRlcmZhY2VfY2xvc2VfZmQoaW50IGZkKTsKLXZvaWQgbWluaW9z X2V2dGNobl9jbG9zZV9mZChpbnQgZmQpOwrCoHZvaWQgbWluaW9zX2dudHRhYl9jbG9zZV9mZChp bnQgZmQpOwrCoArCoGV4dGVybiB2b2lkIG1pbmlvc19pbnRlcmZhY2VfY2xvc2VfZmQoaW50IGZk KTsKLWV4dGVybiB2b2lkIG1pbmlvc19ldnRjaG5fY2xvc2VfZmQoaW50IGZkKTsKLQotZXh0ZXJu IHN0cnVjdCB3YWl0X3F1ZXVlX2hlYWQgZXZlbnRfcXVldWU7CsKgCsKgc3RhdGljIHhjX29zZGVw X2hhbmRsZSBtaW5pb3NfcHJpdmNtZF9vcGVuKHhjX2ludGVyZmFjZSAqeGNoKQrCoHsKQEAgLTE5 NywyMjAgKzE5MCw2IEBAIHN0YXRpYyBzdHJ1Y3QgeGNfb3NkZXBfb3BzIG1pbmlvc19wcml2Y21k X29wcyA9IHsKwqDCoMKgwqDCoH0sCsKgfTsKwqAKLQotLyogWFhYIE5vdGU6IFRoaXMgaXMgbm90 IHRocmVhZHNhZmUgKi8KLXN0YXRpYyBzdHJ1Y3QgZXZ0Y2huX3BvcnRfaW5mbyogcG9ydF9hbGxv YyhpbnQgZmQpIHsKLcKgwqDCoMKgc3RydWN0IGV2dGNobl9wb3J0X2luZm8gKnBvcnRfaW5mbzsK LcKgwqDCoMKgcG9ydF9pbmZvID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgZXZ0Y2huX3BvcnRfaW5m bykpOwotwqDCoMKgwqBpZiAocG9ydF9pbmZvID09IE5VTEwpCi3CoMKgwqDCoMKgwqDCoMKgcmV0 dXJuIE5VTEw7Ci3CoMKgwqDCoHBvcnRfaW5mby0+cGVuZGluZyA9IDA7Ci3CoMKgwqDCoHBvcnRf aW5mby0+cG9ydCA9IC0xOwotwqDCoMKgwqBwb3J0X2luZm8tPmJvdW5kID0gMDsKLQotwqDCoMKg wqBMSVNUX0lOU0VSVF9IRUFEKCZmaWxlc1tmZF0uZXZ0Y2huLnBvcnRzLCBwb3J0X2luZm8sIGxp c3QpOwotwqDCoMKgwqByZXR1cm4gcG9ydF9pbmZvOwotfQotCi1zdGF0aWMgdm9pZCBwb3J0X2Rl YWxsb2Moc3RydWN0IGV2dGNobl9wb3J0X2luZm8gKnBvcnRfaW5mbykgewotwqDCoMKgwqBpZiAo cG9ydF9pbmZvLT5ib3VuZCkKLcKgwqDCoMKgwqDCoMKgwqB1bmJpbmRfZXZ0Y2huKHBvcnRfaW5m by0+cG9ydCk7Ci3CoMKgwqDCoExJU1RfUkVNT1ZFKHBvcnRfaW5mbywgbGlzdCk7Ci3CoMKgwqDC oGZyZWUocG9ydF9pbmZvKTsKLX0KLQotaW50IG9zZGVwX2V2dGNobl9vcGVuKHhjX2V2dGNobiAq eGNlKQotewotwqDCoMKgwqBpbnQgZmQgPSBhbGxvY19mZChGVFlQRV9FVlRDSE4pOwotwqDCoMKg wqBpZiAoIGZkID09IC0xICkKLcKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLTE7Ci3CoMKgwqDCoExJ U1RfSU5JVCgmZmlsZXNbZmRdLmV2dGNobi5wb3J0cyk7Ci3CoMKgwqDCoHhjZS0+ZmQgPSBmZDsK LcKgwqDCoMKgcHJpbnRmKCJldnRjaG5fb3BlbigpIC0+ICVkXG4iLCBmZCk7Ci3CoMKgwqDCoHJl dHVybiAwOwotfQotCi1pbnQgb3NkZXBfZXZ0Y2huX2Nsb3NlKHhjX2V2dGNobiAqeGNlLCB4Y19v c2RlcF9oYW5kbGUgaCkKLXsKLcKgwqDCoMKgaWYgKCB4Y2UtPmZkID09IC0xICkKLcKgwqDCoMKg wqDCoMKgwqByZXR1cm4gMDsKLQotwqDCoMKgwqByZXR1cm4gY2xvc2UoeGNlLT5mZCk7Ci19Ci0K LXZvaWQgbWluaW9zX2V2dGNobl9jbG9zZV9mZChpbnQgZmQpCi17Ci3CoMKgwqDCoHN0cnVjdCBl dnRjaG5fcG9ydF9pbmZvICpwb3J0X2luZm8sICp0bXA7Ci3CoMKgwqDCoExJU1RfRk9SRUFDSF9T QUZFKHBvcnRfaW5mbywgJmZpbGVzW2ZkXS5ldnRjaG4ucG9ydHMsIGxpc3QsIHRtcCkKLcKgwqDC oMKgwqDCoMKgwqBwb3J0X2RlYWxsb2MocG9ydF9pbmZvKTsKLQotwqDCoMKgwqBmaWxlc1tmZF0u dHlwZSA9IEZUWVBFX05PTkU7Ci19Ci0KLWludCB4Y19ldnRjaG5fZmQoeGNfZXZ0Y2huICp4Y2Up Ci17Ci3CoMKgwqDCoHJldHVybiB4Y2UtPmZkOwotfQotCi1pbnQgeGNfZXZ0Y2huX25vdGlmeSh4 Y19ldnRjaG4gKnhjZSwgZXZ0Y2huX3BvcnRfdCBwb3J0KQotewotwqDCoMKgwqBpbnQgcmV0Owot Ci3CoMKgwqDCoHJldCA9IG5vdGlmeV9yZW1vdGVfdmlhX2V2dGNobihwb3J0KTsKLQotwqDCoMKg wqBpZiAocmV0IDwgMCkgewotCWVycm5vID0gLXJldDsKLQlyZXQgPSAtMTsKLcKgwqDCoMKgfQot wqDCoMKgwqByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBldnRjaG5faGFuZGxlcihldnRj aG5fcG9ydF90IHBvcnQsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCB2b2lkICpkYXRhKQotewotwqDC oMKgwqBpbnQgZmQgPSAoaW50KShpbnRwdHJfdClkYXRhOwotwqDCoMKgwqBzdHJ1Y3QgZXZ0Y2hu X3BvcnRfaW5mbyAqcG9ydF9pbmZvOwotwqDCoMKgwqBhc3NlcnQoZmlsZXNbZmRdLnR5cGUgPT0g RlRZUEVfRVZUQ0hOKTsKLcKgwqDCoMKgbWFza19ldnRjaG4ocG9ydCk7Ci3CoMKgwqDCoExJU1Rf Rk9SRUFDSChwb3J0X2luZm8sICZmaWxlc1tmZF0uZXZ0Y2huLnBvcnRzLCBsaXN0KSB7Ci3CoMKg wqDCoMKgwqDCoMKgaWYgKHBvcnRfaW5mby0+cG9ydCA9PSBwb3J0KQotwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgZ290byBmb3VuZDsKLcKgwqDCoMKgfQotwqDCoMKgwqBwcmludGsoIlVua25vd24g cG9ydCBmb3IgaGFuZGxlICVkXG4iLCBmZCk7Ci3CoMKgwqDCoHJldHVybjsKLQotIGZvdW5kOgot wqDCoMKgwqBwb3J0X2luZm8tPnBlbmRpbmcgPSAxOwotwqDCoMKgwqBmaWxlc1tmZF0ucmVhZCA9 IDE7Ci3CoMKgwqDCoHdha2VfdXAoJmV2ZW50X3F1ZXVlKTsKLX0KLQotZXZ0Y2huX3BvcnRfb3Jf ZXJyb3JfdCB4Y19ldnRjaG5fYmluZF91bmJvdW5kX3BvcnQoeGNfZXZ0Y2huICp4Y2UsIGludCBk b21pZCkKLXsKLcKgwqDCoMKgaW50IGZkID0geGNlLT5mZDsKLcKgwqDCoMKgc3RydWN0IGV2dGNo bl9wb3J0X2luZm8gKnBvcnRfaW5mbzsKLcKgwqDCoMKgaW50IHJldDsKLcKgwqDCoMKgZXZ0Y2hu X3BvcnRfdCBwb3J0OwotCi3CoMKgwqDCoGFzc2VydChnZXRfY3VycmVudCgpID09IG1haW5fdGhy ZWFkKTsKLcKgwqDCoMKgcG9ydF9pbmZvID0gcG9ydF9hbGxvYyhmZCk7Ci3CoMKgwqDCoGlmIChw b3J0X2luZm8gPT0gTlVMTCkKLQlyZXR1cm4gLTE7Ci0KLcKgwqDCoMKgcHJpbnRmKCJ4Y19ldnRj aG5fYmluZF91bmJvdW5kX3BvcnQoJWQpIiwgZG9taWQpOwotwqDCoMKgwqByZXQgPSBldnRjaG5f YWxsb2NfdW5ib3VuZChkb21pZCwgZXZ0Y2huX2hhbmRsZXIsICh2b2lkKikoaW50cHRyX3QpZmQs ICZwb3J0KTsKLcKgwqDCoMKgcHJpbnRmKCIgPSAlZFxuIiwgcmV0KTsKLQotwqDCoMKgwqBpZiAo cmV0IDwgMCkgewotCXBvcnRfZGVhbGxvYyhwb3J0X2luZm8pOwotCWVycm5vID0gLXJldDsKLQly ZXR1cm4gLTE7Ci3CoMKgwqDCoH0KLcKgwqDCoMKgcG9ydF9pbmZvLT5ib3VuZCA9IDE7Ci3CoMKg wqDCoHBvcnRfaW5mby0+cG9ydCA9IHBvcnQ7Ci3CoMKgwqDCoHVubWFza19ldnRjaG4ocG9ydCk7 Ci3CoMKgwqDCoHJldHVybiBwb3J0OwotfQotCi1ldnRjaG5fcG9ydF9vcl9lcnJvcl90IHhjX2V2 dGNobl9iaW5kX2ludGVyZG9tYWluKHhjX2V2dGNobiAqeGNlLCBpbnQgZG9taWQsCi3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZXZ0Y2huX3BvcnRfdCByZW1vdGVf cG9ydCkKLXsKLcKgwqDCoMKgaW50IGZkID0geGNlLT5mZDsKLcKgwqDCoMKgc3RydWN0IGV2dGNo bl9wb3J0X2luZm8gKnBvcnRfaW5mbzsKLcKgwqDCoMKgZXZ0Y2huX3BvcnRfdCBsb2NhbF9wb3J0 OwotwqDCoMKgwqBpbnQgcmV0OwotCi3CoMKgwqDCoGFzc2VydChnZXRfY3VycmVudCgpID09IG1h aW5fdGhyZWFkKTsKLcKgwqDCoMKgcG9ydF9pbmZvID0gcG9ydF9hbGxvYyhmZCk7Ci3CoMKgwqDC oGlmIChwb3J0X2luZm8gPT0gTlVMTCkKLQlyZXR1cm4gLTE7Ci0KLcKgwqDCoMKgcHJpbnRmKCJ4 Y19ldnRjaG5fYmluZF9pbnRlcmRvbWFpbiglZCwgJSJQUklkMzIiKSIsIGRvbWlkLCByZW1vdGVf cG9ydCk7Ci3CoMKgwqDCoHJldCA9IGV2dGNobl9iaW5kX2ludGVyZG9tYWluKGRvbWlkLCByZW1v dGVfcG9ydCwgZXZ0Y2huX2hhbmRsZXIsICh2b2lkKikoaW50cHRyX3QpZmQsICZsb2NhbF9wb3J0 KTsKLcKgwqDCoMKgcHJpbnRmKCIgPSAlZFxuIiwgcmV0KTsKLQotwqDCoMKgwqBpZiAocmV0IDwg MCkgewotCXBvcnRfZGVhbGxvYyhwb3J0X2luZm8pOwotCWVycm5vID0gLXJldDsKLQlyZXR1cm4g LTE7Ci3CoMKgwqDCoH0KLcKgwqDCoMKgcG9ydF9pbmZvLT5ib3VuZCA9IDE7Ci3CoMKgwqDCoHBv cnRfaW5mby0+cG9ydCA9IGxvY2FsX3BvcnQ7Ci3CoMKgwqDCoHVubWFza19ldnRjaG4obG9jYWxf cG9ydCk7Ci3CoMKgwqDCoHJldHVybiBsb2NhbF9wb3J0OwotfQotCi1pbnQgeGNfZXZ0Y2huX3Vu YmluZCh4Y19ldnRjaG4gKnhjZSwgZXZ0Y2huX3BvcnRfdCBwb3J0KQotewotwqDCoMKgwqBpbnQg ZmQgPSB4Y2UtPmZkOwotwqDCoMKgwqBzdHJ1Y3QgZXZ0Y2huX3BvcnRfaW5mbyAqcG9ydF9pbmZv OwotCi3CoMKgwqDCoExJU1RfRk9SRUFDSChwb3J0X2luZm8sICZmaWxlc1tmZF0uZXZ0Y2huLnBv cnRzLCBsaXN0KSB7Ci3CoMKgwqDCoMKgwqDCoMKgaWYgKHBvcnRfaW5mby0+cG9ydCA9PSBwb3J0 KSB7Ci3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwb3J0X2RlYWxsb2MocG9ydF9pbmZvKTsKLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAwOwotwqDCoMKgwqDCoMKgwqDCoH0KLcKgwqDC oMKgfQotwqDCoMKgwqBwcmludGYoIldhcm5pbmc6IGNvdWxkbid0IGZpbmQgcG9ydCAlIlBSSWQz MiIgZm9yIHhjIGhhbmRsZSAleFxuIiwgcG9ydCwgZmQpOwotwqDCoMKgwqBlcnJubyA9IEVJTlZB TDsKLcKgwqDCoMKgcmV0dXJuIC0xOwotfQotCi1ldnRjaG5fcG9ydF9vcl9lcnJvcl90IHhjX2V2 dGNobl9iaW5kX3ZpcnEoeGNfZXZ0Y2huICp4Y2UsIHVuc2lnbmVkIGludCB2aXJxKQotewotwqDC oMKgwqBpbnQgZmQgPSB4Y2UtPmZkOwotwqDCoMKgwqBzdHJ1Y3QgZXZ0Y2huX3BvcnRfaW5mbyAq cG9ydF9pbmZvOwotwqDCoMKgwqBldnRjaG5fcG9ydF90IHBvcnQ7Ci0KLcKgwqDCoMKgYXNzZXJ0 KGdldF9jdXJyZW50KCkgPT0gbWFpbl90aHJlYWQpOwotwqDCoMKgwqBwb3J0X2luZm8gPSBwb3J0 X2FsbG9jKGZkKTsKLcKgwqDCoMKgaWYgKHBvcnRfaW5mbyA9PSBOVUxMKQotCXJldHVybiAtMTsK LQotwqDCoMKgwqBwcmludGYoInhjX2V2dGNobl9iaW5kX3ZpcnEoJWQpIiwgdmlycSk7Ci3CoMKg wqDCoHBvcnQgPSBiaW5kX3ZpcnEodmlycSwgZXZ0Y2huX2hhbmRsZXIsICh2b2lkKikoaW50cHRy X3QpZmQpOwotCi3CoMKgwqDCoGlmIChwb3J0IDwgMCkgewotCXBvcnRfZGVhbGxvYyhwb3J0X2lu Zm8pOwotCWVycm5vID0gLXBvcnQ7Ci0JcmV0dXJuIC0xOwotwqDCoMKgwqB9Ci3CoMKgwqDCoHBv cnRfaW5mby0+Ym91bmQgPSAxOwotwqDCoMKgwqBwb3J0X2luZm8tPnBvcnQgPSBwb3J0OwotwqDC oMKgwqB1bm1hc2tfZXZ0Y2huKHBvcnQpOwotwqDCoMKgwqByZXR1cm4gcG9ydDsKLX0KLQotZXZ0 Y2huX3BvcnRfb3JfZXJyb3JfdCB4Y19ldnRjaG5fcGVuZGluZyh4Y19ldnRjaG4gKnhjZSkKLXsK LcKgwqDCoMKgaW50IGZkID0geGNlLT5mZDsKLcKgwqDCoMKgc3RydWN0IGV2dGNobl9wb3J0X2lu Zm8gKnBvcnRfaW5mbzsKLcKgwqDCoMKgdW5zaWduZWQgbG9uZyBmbGFnczsKLcKgwqDCoMKgZXZ0 Y2huX3BvcnRfdCByZXQgPSAtMTsKLQotwqDCoMKgwqBsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci3C oMKgwqDCoGZpbGVzW2ZkXS5yZWFkID0gMDsKLQotwqDCoMKgwqBMSVNUX0ZPUkVBQ0gocG9ydF9p bmZvLCAmZmlsZXNbZmRdLmV2dGNobi5wb3J0cywgbGlzdCkgewotwqDCoMKgwqDCoMKgwqDCoGlm IChwb3J0X2luZm8tPnBvcnQgIT0gLTEgJiYgcG9ydF9pbmZvLT5wZW5kaW5nKSB7Ci3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBpZiAocmV0ID09IC0xKSB7Ci3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJldCA9IHBvcnRfaW5mby0+cG9ydDsKLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcG9ydF9pbmZvLT5wZW5kaW5nID0gMDsKLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oH0gZWxzZSB7Ci3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZpbGVzW2ZkXS5yZWFk ID0gMTsKLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Ci3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB9Ci3CoMKgwqDCoMKgwqDCoMKgfQotwqDCoMKgwqB9Ci3CoMKgwqDCoGxv Y2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLcKgwqDCoMKgcmV0dXJuIHJldDsKLX0KLQotaW50IHhj X2V2dGNobl91bm1hc2soeGNfZXZ0Y2huICp4Y2UsIGV2dGNobl9wb3J0X3QgcG9ydCkKLXsKLcKg wqDCoMKgdW5tYXNrX2V2dGNobihwb3J0KTsKLcKgwqDCoMKgcmV0dXJuIDA7Ci19Ci0KwqAvKiBP cHRpb25hbGx5IGZsdXNoIGZpbGUgdG8gZGlzayBhbmQgZGlzY2FyZCBwYWdlIGNhY2hlICovCsKg dm9pZCBkaXNjYXJkX2ZpbGVfY2FjaGUoeGNfaW50ZXJmYWNlICp4Y2gsIGludCBmZCwgaW50IGZs dXNoKQrCoHsKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhjL3hjX25ldGJzZC5jIGIvdG9vbHMvbGli eGMveGNfbmV0YnNkLmMKaW5kZXggYjFiODI4Zi4uZmU0ZjBhMSAxMDA2NDQKLS0tIGEvdG9vbHMv bGlieGMveGNfbmV0YnNkLmMKKysrIGIvdG9vbHMvbGlieGMveGNfbmV0YnNkLmMKQEAgLTE5LDcg KzE5LDYgQEAKwqAKwqAjaW5jbHVkZSAieGNfcHJpdmF0ZS5oIgrCoAotI2luY2x1ZGUgPHhlbi9z eXMvZXZ0Y2huLmg+CsKgI2luY2x1ZGUgPHVuaXN0ZC5oPgrCoCNpbmNsdWRlIDxmY250bC5oPgrC oCNpbmNsdWRlIDxtYWxsb2MuaD4KQEAgLTIyMywxMTQgKzIyMiw2IEBAIHN0YXRpYyBzdHJ1Y3Qg eGNfb3NkZXBfb3BzIG5ldGJzZF9wcml2Y21kX29wcyA9IHsKwqDCoMKgwqDCoH0sCsKgfTsKwqAK LSNkZWZpbmUgRVZUQ0hOX0RFVl9OQU1FwqDCoCIvZGV2L3hlbmV2dCIKLQotaW50IG9zZGVwX2V2 dGNobl9vcGVuKHhjX2V2dGNobiAqeGNlKQotewotwqDCoMKgwqBpbnQgZmQgPSBvcGVuKEVWVENI Tl9ERVZfTkFNRSwgT19OT05CTE9DS3xPX1JEV1IpOwotwqDCoMKgwqBpZiAoIGZkID09IC0xICkK LcKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLTE7Ci3CoMKgwqDCoHhjZS0+ZmQgPSBmZDsKLcKgwqDC oMKgcmV0dXJuIDA7Ci19Ci0KLWludCBvc2RlcF9ldnRjaG5fY2xvc2UoeGNfZXZ0Y2huICp4Y2Us IHhjX29zZGVwX2hhbmRsZSBoKQotewotwqDCoMKgwqBpZiAoIHhjZS0+ZmQgPT0gLTEgKQotwqDC oMKgwqDCoMKgwqDCoHJldHVybiAwOwotCi3CoMKgwqDCoHJldHVybiBjbG9zZSh4Y2UtPmZkKTsK LX0KLQotaW50IHhjX2V2dGNobl9mZCh4Y19ldnRjaG4gKnhjZSkKLXsKLcKgwqDCoMKgcmV0dXJu IHhjZS0+ZmQ7Ci19Ci0KLWludCB4Y19ldnRjaG5fbm90aWZ5KHhjX2V2dGNobiAqeGNlLCBldnRj aG5fcG9ydF90IHBvcnQpCi17Ci3CoMKgwqDCoGludCBmZCA9IHhjZS0+ZmQ7Ci3CoMKgwqDCoHN0 cnVjdCBpb2N0bF9ldnRjaG5fbm90aWZ5IG5vdGlmeTsKLQotwqDCoMKgwqBub3RpZnkucG9ydCA9 IHBvcnQ7Ci0KLcKgwqDCoMKgcmV0dXJuIGlvY3RsKGZkLCBJT0NUTF9FVlRDSE5fTk9USUZZLCAm bm90aWZ5KTsKLX0KLQotZXZ0Y2huX3BvcnRfb3JfZXJyb3JfdCB4Y19ldnRjaG5fYmluZF91bmJv dW5kX3BvcnQoeGNfZXZ0Y2huICogeGNlLCBpbnQgZG9taWQpCi17Ci3CoMKgwqDCoGludCBmZCA9 IHhjZS0+ZmQ7Ci3CoMKgwqDCoHN0cnVjdCBpb2N0bF9ldnRjaG5fYmluZF91bmJvdW5kX3BvcnQg YmluZDsKLcKgwqDCoMKgaW50IHJldDsKLQotwqDCoMKgwqBiaW5kLnJlbW90ZV9kb21haW4gPSBk b21pZDsKLQotwqDCoMKgwqByZXQgPSBpb2N0bChmZCwgSU9DVExfRVZUQ0hOX0JJTkRfVU5CT1VO RF9QT1JULCAmYmluZCk7Ci3CoMKgwqDCoGlmIChyZXQgPT0gMCkKLQlyZXR1cm4gYmluZC5wb3J0 OwotwqDCoMKgwqBlbHNlCi0JcmV0dXJuIC0xOwotfQotCi1ldnRjaG5fcG9ydF9vcl9lcnJvcl90 IHhjX2V2dGNobl9iaW5kX2ludGVyZG9tYWluKHhjX2V2dGNobiAqeGNlLCBpbnQgZG9taWQsCi3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZXZ0Y2huX3BvcnRfdCBy ZW1vdGVfcG9ydCkKLXsKLcKgwqDCoMKgaW50IGZkID0geGNlLT5mZDsKLcKgwqDCoMKgc3RydWN0 IGlvY3RsX2V2dGNobl9iaW5kX2ludGVyZG9tYWluIGJpbmQ7Ci3CoMKgwqDCoGludCByZXQ7Ci0K LcKgwqDCoMKgYmluZC5yZW1vdGVfZG9tYWluID0gZG9taWQ7Ci3CoMKgwqDCoGJpbmQucmVtb3Rl X3BvcnQgPSByZW1vdGVfcG9ydDsKLQotwqDCoMKgwqByZXQgPSBpb2N0bChmZCwgSU9DVExfRVZU Q0hOX0JJTkRfSU5URVJET01BSU4sICZiaW5kKTsKLcKgwqDCoMKgaWYgKHJldCA9PSAwKQotCXJl dHVybiBiaW5kLnBvcnQ7Ci3CoMKgwqDCoGVsc2UKLQlyZXR1cm4gLTE7Ci19Ci0KLWludCB4Y19l dnRjaG5fdW5iaW5kKHhjX2V2dGNobiAqeGNlLCBldnRjaG5fcG9ydF90IHBvcnQpCi17Ci3CoMKg wqDCoGludCBmZCA9IHhjZS0+ZmQ7Ci3CoMKgwqDCoHN0cnVjdCBpb2N0bF9ldnRjaG5fdW5iaW5k IHVuYmluZDsKLQotwqDCoMKgwqB1bmJpbmQucG9ydCA9IHBvcnQ7Ci0KLcKgwqDCoMKgcmV0dXJu IGlvY3RsKGZkLCBJT0NUTF9FVlRDSE5fVU5CSU5ELCAmdW5iaW5kKTsKLX0KLQotZXZ0Y2huX3Bv cnRfb3JfZXJyb3JfdCB4Y19ldnRjaG5fYmluZF92aXJxKHhjX2V2dGNobiAqeGNlLCB1bnNpZ25l ZCBpbnQgdmlycSkKLXsKLcKgwqDCoMKgaW50IGZkID0geGNlLT5mZDsKLcKgwqDCoMKgc3RydWN0 IGlvY3RsX2V2dGNobl9iaW5kX3ZpcnEgYmluZDsKLcKgwqDCoMKgaW50IGVycjsKLQotwqDCoMKg wqBiaW5kLnZpcnEgPSB2aXJxOwotCi3CoMKgwqDCoGVyciA9IGlvY3RsKGZkLCBJT0NUTF9FVlRD SE5fQklORF9WSVJRLCAmYmluZCk7Ci3CoMKgwqDCoGlmIChlcnIpCi0JcmV0dXJuIC0xOwotwqDC oMKgwqBlbHNlCi0JcmV0dXJuIGJpbmQucG9ydDsKLX0KLQotZXZ0Y2huX3BvcnRfb3JfZXJyb3Jf dCB4Y19ldnRjaG5fcGVuZGluZyh4Y19ldnRjaG4gKnhjZSkKLXsKLcKgwqDCoMKgaW50IGZkID0g eGNlLT5mZDsKLcKgwqDCoMKgZXZ0Y2huX3BvcnRfdCBwb3J0OwotCi3CoMKgwqDCoGlmICggcmVh ZF9leGFjdChmZCwgKGNoYXIgKikmcG9ydCwgc2l6ZW9mKHBvcnQpKSA9PSAtMSApCi3CoMKgwqDC oMKgwqDCoMKgcmV0dXJuIC0xOwotCi3CoMKgwqDCoHJldHVybiBwb3J0OwotfQotCi1pbnQgeGNf ZXZ0Y2huX3VubWFzayh4Y19ldnRjaG4gKnhjZSwgZXZ0Y2huX3BvcnRfdCBwb3J0KQotewotwqDC oMKgwqBpbnQgZmQgPSB4Y2UtPmZkOwotwqDCoMKgwqByZXR1cm4gd3JpdGVfZXhhY3QoZmQsIChj aGFyICopJnBvcnQsIHNpemVvZihwb3J0KSk7Ci19Ci0KwqAvKiBPcHRpb25hbGx5IGZsdXNoIGZp bGUgdG8gZGlzayBhbmQgZGlzY2FyZCBwYWdlIGNhY2hlICovCsKgdm9pZCBkaXNjYXJkX2ZpbGVf Y2FjaGUoeGNfaW50ZXJmYWNlICp4Y2gsIGludCBmZCwgaW50IGZsdXNoKSAKwqB7CmRpZmYgLS1n aXQgYS90b29scy9saWJ4Yy94Y19wcml2YXRlLmMgYi90b29scy9saWJ4Yy94Y19wcml2YXRlLmMK aW5kZXggY2I3OWYyMi4uNTZkNTRiNiAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGMveGNfcHJpdmF0 ZS5jCisrKyBiL3Rvb2xzL2xpYnhjL3hjX3ByaXZhdGUuYwpAQCAtMjUxLDQ2ICsyNTEsNiBAQCBp bnQgZG9feGVuX2h5cGVyY2FsbCh4Y19pbnRlcmZhY2UgKnhjaCwgcHJpdmNtZF9oeXBlcmNhbGxf dCAqaHlwZXJjYWxsKQrCoMKgwqDCoMKgcmV0dXJuIHhjaC0+b3BzLT51LnByaXZjbWQuaHlwZXJj YWxsKHhjaCwgeGNoLT5vcHNfaGFuZGxlLCBoeXBlcmNhbGwpOwrCoH0KwqAKLXhjX2V2dGNobiAq eGNfZXZ0Y2huX29wZW4oeGVudG9vbGxvZ19sb2dnZXIgKmxvZ2dlciwgdW5zaWduZWQgb3Blbl9m bGFncykKLXsKLcKgwqDCoMKgeGNfZXZ0Y2huICp4Y2UgPSBtYWxsb2Moc2l6ZW9mKCp4Y2UpKTsK LcKgwqDCoMKgaW50IHJjOwotCi3CoMKgwqDCoGlmICgheGNlKSByZXR1cm4gTlVMTDsKLQotwqDC oMKgwqB4Y2UtPmZkID0gLTE7Ci3CoMKgwqDCoHhjZS0+bG9nZ2VyID0gbG9nZ2VyOwotwqDCoMKg wqB4Y2UtPmxvZ2dlcl90b2ZyZWXCoMKgPSBOVUxMOwotCi3CoMKgwqDCoGlmICgheGNlLT5sb2dn ZXIpIHsKLcKgwqDCoMKgwqDCoMKgwqB4Y2UtPmxvZ2dlciA9IHhjZS0+bG9nZ2VyX3RvZnJlZSA9 Ci3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAoeGVudG9vbGxvZ19sb2dnZXIqKQotwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgeHRsX2NyZWF0ZWxvZ2dlcl9zdGRpb3N0cmVhbShzdGRlcnIsIFhUTF9Q Uk9HUkVTUywgMCk7Ci3CoMKgwqDCoMKgwqDCoMKgaWYgKCF4Y2UtPmxvZ2dlcikgZ290byBlcnI7 Ci3CoMKgwqDCoH0KLQotwqDCoMKgwqByYyA9IG9zZGVwX2V2dGNobl9vcGVuKHhjZSk7Ci3CoMKg wqDCoGlmICggcmPCoMKgPCAwICkgZ290byBlcnI7Ci0KLcKgwqDCoMKgcmV0dXJuIHhjZTsKLQot ZXJyOgotwqDCoMKgwqBvc2RlcF9ldnRjaG5fY2xvc2UoeGNlKTsKLcKgwqDCoMKgeHRsX2xvZ2dl cl9kZXN0cm95KHhjZS0+bG9nZ2VyX3RvZnJlZSk7Ci3CoMKgwqDCoGZyZWUoeGNlKTsKLcKgwqDC oMKgcmV0dXJuIE5VTEw7Ci19Ci0KLWludCB4Y19ldnRjaG5fY2xvc2UoeGNfZXZ0Y2huICp4Y2Up Ci17Ci3CoMKgwqDCoGludCByYzsKLQotwqDCoMKgwqByYyA9IG9zZGVwX2V2dGNobl9jbG9zZSh4 Y2UpOwotwqDCoMKgwqB4dGxfbG9nZ2VyX2Rlc3Ryb3koeGNlLT5sb2dnZXJfdG9mcmVlKTsKLcKg wqDCoMKgZnJlZSh4Y2UpOwotwqDCoMKgwqByZXR1cm4gcmM7Ci19Ci0KwqB4Y19nbnR0YWIgKnhj X2dudHRhYl9vcGVuKHhlbnRvb2xsb2dfbG9nZ2VyICpsb2dnZXIsCsKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIG9wZW5f ZmxhZ3MpCsKgewpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGMveGNfcHJpdmF0ZS5oIGIvdG9vbHMv bGlieGMveGNfcHJpdmF0ZS5oCmluZGV4IGY0ZDE1NWEuLmEzMmFjY2IgMTAwNjQ0Ci0tLSBhL3Rv b2xzL2xpYnhjL3hjX3ByaXZhdGUuaAorKysgYi90b29scy9saWJ4Yy94Y19wcml2YXRlLmgKQEAg LTEyMywxMyArMTIzLDYgQEAgc3RydWN0IHhjX2ludGVyZmFjZV9jb3JlIHsKwqDCoMKgwqDCoHhj X29zZGVwX2hhbmRsZcKgwqBvcHNfaGFuZGxlOyAvKiBvcGFxdWUgZGF0YSBmb3IgeGNfb3NkZXBf b3BzICovCsKgfTsKwqAKLXN0cnVjdCB4ZW5ldnRjaG5faGFuZGxlIHsKLcKgwqDCoMKgeGVudG9v bGxvZ19sb2dnZXIgKmxvZ2dlciwgKmxvZ2dlcl90b2ZyZWU7Ci3CoMKgwqDCoGludCBmZDsKLX07 Ci1pbnQgb3NkZXBfZXZ0Y2huX29wZW4oeGNfZXZ0Y2huICp4Y2UpOwotaW50IG9zZGVwX2V2dGNo bl9jbG9zZSh4Y19ldnRjaG4gKnhjZSk7Ci0KwqB2b2lkIHhjX3JlcG9ydF9lcnJvcih4Y19pbnRl cmZhY2UgKnhjaCwgaW50IGNvZGUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQrCoMKgwqDCoMKgX19h dHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZiwzLDQpKSk7CsKgdm9pZCB4Y19yZXBvcnR2KHhjX2lu dGVyZmFjZSAqeGNoLCB4ZW50b29sbG9nX2xvZ2dlciAqbGcsIHhlbnRvb2xsb2dfbGV2ZWwsCmRp ZmYgLS1naXQgYS90b29scy9saWJ4Yy94Y19zb2xhcmlzLmMgYi90b29scy9saWJ4Yy94Y19zb2xh cmlzLmMKaW5kZXggMDg4MjI4YS4uZWQ3OTg3YyAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGMveGNf c29sYXJpcy5jCisrKyBiL3Rvb2xzL2xpYnhjL3hjX3NvbGFyaXMuYwpAQCAtMjAsNyArMjAsNiBA QArCoCNpbmNsdWRlICJ4Y19wcml2YXRlLmgiCsKgCsKgI2luY2x1ZGUgPHhlbi9tZW1vcnkuaD4K LSNpbmNsdWRlIDx4ZW4vc3lzL2V2dGNobi5oPgrCoCNpbmNsdWRlIDx1bmlzdGQuaD4KwqAjaW5j bHVkZSA8ZmNudGwuaD4KwqAjaW5jbHVkZSA8bWFsbG9jLmg+CkBAIC0xOTQsMTAyICsxOTMsNiBA QCBzdGF0aWMgc3RydWN0IHhjX29zZGVwX29wcyBzb2xhcmlzX3ByaXZjbWRfb3BzID0gewrCoMKg wqDCoMKgfSwKwqB9OwrCoAotaW50IG9zZGVwX2V2dGNobl9vcGVuKHhjX2V2dGNobiAqeGNlKQot ewotwqDCoMKgwqBpbnQgZmQ7Ci0KLcKgwqDCoMKgaWYgKCAoZmQgPSBvcGVuKCIvZGV2L3hlbi9l dnRjaG4iLCBPX1JEV1IpKSA9PSAtMSApCi3CoMKgwqDCoHsKLcKgwqDCoMKgwqDCoMKgwqBQRVJS T1IoIkNvdWxkIG5vdCBvcGVuIGV2ZW50IGNoYW5uZWwgaW50ZXJmYWNlIik7Ci3CoMKgwqDCoMKg wqDCoMKgcmV0dXJuIC0xOwotwqDCoMKgwqB9Ci0KLcKgwqDCoMKgeGNlLT5mZCA9IGZkOwotwqDC oMKgwqByZXR1cm4gMDsKLX0KLQotaW50IG9zZGVwX2V2dGNobl9jbG9zZSh4Y19ldnRjaG4gKnhj ZSkKLXsKLcKgwqDCoMKgaWYgKCB4Y2UtPmZkID09IC0xICkKLcKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gMDsKLQotwqDCoMKgwqByZXR1cm4gY2xvc2UoeGNlLT5mZCk7Ci19Ci0KLWludCB4Y19ldnRj aG5fZmQoeGNfZXZ0Y2huICp4Y2UpCi17Ci3CoMKgwqDCoHJldHVybiB4Y2UtPmZkOwotfQotCi1p bnQgeGNfZXZ0Y2huX25vdGlmeSh4Y19ldnRjaG4gKnhjZSwgZXZ0Y2huX3BvcnRfdCBwb3J0KQot ewotwqDCoMKgwqBpbnQgZmQgPSB4Y2UtPmZkOwotwqDCoMKgwqBzdHJ1Y3QgaW9jdGxfZXZ0Y2hu X25vdGlmeSBub3RpZnk7Ci0KLcKgwqDCoMKgbm90aWZ5LnBvcnQgPSBwb3J0OwotCi3CoMKgwqDC oHJldHVybiBpb2N0bChmZCwgSU9DVExfRVZUQ0hOX05PVElGWSwgJm5vdGlmeSk7Ci19Ci0KLWV2 dGNobl9wb3J0X29yX2Vycm9yX3QgeGNfZXZ0Y2huX2JpbmRfdW5ib3VuZF9wb3J0KHhjX2V2dGNo biAqeGNlLCBpbnQgZG9taWQpCi17Ci3CoMKgwqDCoGludCBmZCA9IHhjZS0+ZmQ7Ci3CoMKgwqDC oHN0cnVjdCBpb2N0bF9ldnRjaG5fYmluZF91bmJvdW5kX3BvcnQgYmluZDsKLQotwqDCoMKgwqBi aW5kLnJlbW90ZV9kb21haW4gPSBkb21pZDsKLQotwqDCoMKgwqByZXR1cm4gaW9jdGwoZmQsIElP Q1RMX0VWVENITl9CSU5EX1VOQk9VTkRfUE9SVCwgJmJpbmQpOwotfQotCi1ldnRjaG5fcG9ydF9v cl9lcnJvcl90IHhjX2V2dGNobl9iaW5kX2ludGVyZG9tYWluKHhjX2V2dGNobiAqeGNlLCBpbnQg ZG9taWQsCi3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZXZ0Y2hu X3BvcnRfdCByZW1vdGVfcG9ydCkKLXsKLcKgwqDCoMKgaW50IGZkID0geGNlLT5mZDsKLcKgwqDC oMKgc3RydWN0IGlvY3RsX2V2dGNobl9iaW5kX2ludGVyZG9tYWluIGJpbmQ7Ci0KLcKgwqDCoMKg YmluZC5yZW1vdGVfZG9tYWluID0gZG9taWQ7Ci3CoMKgwqDCoGJpbmQucmVtb3RlX3BvcnQgPSBy ZW1vdGVfcG9ydDsKLQotwqDCoMKgwqByZXR1cm4gaW9jdGwoZmQsIElPQ1RMX0VWVENITl9CSU5E X0lOVEVSRE9NQUlOLCAmYmluZCk7Ci19Ci0KLWV2dGNobl9wb3J0X29yX2Vycm9yX3QgeGNfZXZ0 Y2huX2JpbmRfdmlycSh4Y19ldnRjaG4gKnhjZSwgdW5zaWduZWQgaW50IHZpcnEpCi17Ci3CoMKg wqDCoGludCBmZCA9IHhjZS0+ZmQ7Ci3CoMKgwqDCoHN0cnVjdCBpb2N0bF9ldnRjaG5fYmluZF92 aXJxIGJpbmQ7Ci0KLcKgwqDCoMKgYmluZC52aXJxID0gdmlycTsKLQotwqDCoMKgwqByZXR1cm4g aW9jdGwoZmQsIElPQ1RMX0VWVENITl9CSU5EX1ZJUlEsICZiaW5kKTsKLX0KLQotaW50IHhjX2V2 dGNobl91bmJpbmQoeGNfZXZ0Y2huICp4Y2UsIGV2dGNobl9wb3J0X3QgcG9ydCkKLXsKLcKgwqDC oMKgaW50IGZkID0geGNlLT5mZDsKLcKgwqDCoMKgc3RydWN0IGlvY3RsX2V2dGNobl91bmJpbmQg dW5iaW5kOwotCi3CoMKgwqDCoHVuYmluZC5wb3J0ID0gcG9ydDsKLQotwqDCoMKgwqByZXR1cm4g aW9jdGwoZmQsIElPQ1RMX0VWVENITl9VTkJJTkQsICZ1bmJpbmQpOwotfQotCi1ldnRjaG5fcG9y dF9vcl9lcnJvcl90IHhjX2V2dGNobl9wZW5kaW5nKHhjX2V2dGNobiAqeGNlKQotewotwqDCoMKg wqBpbnQgZmQgPSB4Y2UtPmZkOwotwqDCoMKgwqBldnRjaG5fcG9ydF90IHBvcnQ7Ci0KLcKgwqDC oMKgaWYgKCByZWFkX2V4YWN0KGZkLCAoY2hhciAqKSZwb3J0LCBzaXplb2YocG9ydCkpID09IC0x ICkKLcKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLTE7Ci0KLcKgwqDCoMKgcmV0dXJuIHBvcnQ7Ci19 Ci0KLWludCB4Y19ldnRjaG5fdW5tYXNrKHhjX2V2dGNobiAqeGNlLCBldnRjaG5fcG9ydF90IHBv cnQpCi17Ci3CoMKgwqDCoGludCBmZCA9IHhjZS0+ZmQ7Ci3CoMKgwqDCoHJldHVybiB3cml0ZV9l eGFjdChmZCwgKGNoYXIgKikmcG9ydCwgc2l6ZW9mKHBvcnQpKTsKLX0KLQrCoC8qIE9wdGlvbmFs bHkgZmx1c2ggZmlsZSB0byBkaXNrIGFuZCBkaXNjYXJkIHBhZ2UgY2FjaGUgKi8KwqB2b2lkIGRp c2NhcmRfZmlsZV9jYWNoZSh4Y19pbnRlcmZhY2UgKnhjaCwgaW50IGZkLCBpbnQgZmx1c2gpIArC oHsKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhjL3hjX3N1c3BlbmQuYyBiL3Rvb2xzL2xpYnhjL3hj X3N1c3BlbmQuYwppbmRleCBiYmEzNmU3Li44MzYxYzdiIDEwMDY0NAotLS0gYS90b29scy9saWJ4 Yy94Y19zdXNwZW5kLmMKKysrIGIvdG9vbHMvbGlieGMveGNfc3VzcGVuZC5jCkBAIC0xNiw2ICsx Niw4IEBACsKgI2luY2x1ZGUgPHVuaXN0ZC5oPgrCoCNpbmNsdWRlIDxmY250bC5oPgrCoAorI2lu Y2x1ZGUgPHhlbmV2dGNobi5oPgorCsKgI2luY2x1ZGUgInhjX3ByaXZhdGUuaCIKwqAjaW5jbHVk ZSAieGVuZ3Vlc3QuaCIKwqAKQEAgLTEyNCwxMiArMTI2LDEyIEBAIHN0YXRpYyBpbnQgdW5sb2Nr X3N1c3BlbmRfZXZlbnQoeGNfaW50ZXJmYWNlICp4Y2gsIGludCBkb21pZCwgaW50ICpsb2NrZmQp CsKgwqDCoMKgwqByZXR1cm4gLTE7CsKgfQrCoAotaW50IHhjX2F3YWl0X3N1c3BlbmQoeGNfaW50 ZXJmYWNlICp4Y2gsIHhjX2V2dGNobiAqeGNlLCBpbnQgc3VzcGVuZF9ldnRjaG4pCitpbnQgeGNf YXdhaXRfc3VzcGVuZCh4Y19pbnRlcmZhY2UgKnhjaCwgeGVuZXZ0Y2huX2hhbmRsZSAqeGNlLCBp bnQgc3VzcGVuZF9ldnRjaG4pCsKgewrCoMKgwqDCoMKgaW50IHJjOwrCoArCoMKgwqDCoMKgZG8g ewotwqDCoMKgwqDCoMKgwqDCoHJjID0geGNfZXZ0Y2huX3BlbmRpbmcoeGNlKTsKK8KgwqDCoMKg wqDCoMKgwqByYyA9IHhlbmV2dGNobl9wZW5kaW5nKHhjZSk7CsKgwqDCoMKgwqDCoMKgwqDCoGlm IChyYyA8IDApIHsKwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBFUlJPUigiZXJyb3IgcG9sbGlu ZyBzdXNwZW5kIG5vdGlmaWNhdGlvbiBjaGFubmVsOiAlZCIsIHJjKTsKwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXR1cm4gLTE7CkBAIC0xMzcsNyArMTM5LDcgQEAgaW50IHhjX2F3YWl0X3N1 c3BlbmQoeGNfaW50ZXJmYWNlICp4Y2gsIHhjX2V2dGNobiAqeGNlLCBpbnQgc3VzcGVuZF9ldnRj aG4pCsKgwqDCoMKgwqB9IHdoaWxlIChyYyAhPSBzdXNwZW5kX2V2dGNobik7CsKgCsKgwqDCoMKg wqAvKiBoYXJtbGVzcyBmb3Igb25lLW9mZiBzdXNwZW5kICovCi3CoMKgwqDCoGlmICh4Y19ldnRj aG5fdW5tYXNrKHhjZSwgc3VzcGVuZF9ldnRjaG4pIDwgMCkKK8KgwqDCoMKgaWYgKHhlbmV2dGNo bl91bm1hc2soeGNlLCBzdXNwZW5kX2V2dGNobikgPCAwKQrCoMKgwqDCoMKgwqDCoMKgwqBFUlJP UigiZmFpbGVkIHRvIHVubWFzayBzdXNwZW5kIG5vdGlmaWNhdGlvbiBjaGFubmVsOiAlZCIsIHJj KTsKwqAKwqDCoMKgwqDCoHJldHVybiAwOwpAQCAtMTQ1LDE2ICsxNDcsMTYgQEAgaW50IHhjX2F3 YWl0X3N1c3BlbmQoeGNfaW50ZXJmYWNlICp4Y2gsIHhjX2V2dGNobiAqeGNlLCBpbnQgc3VzcGVu ZF9ldnRjaG4pCsKgCsKgLyogSW50ZXJuYWwgY2FsbGVycyBhcmUgYWxsb3dlZCB0byBjYWxsIHRo aXMgd2l0aCBzdXNwZW5kX2V2dGNobjwwCsKgICogYnV0ICpsb2NrZmQ+MC4gKi8KLWludCB4Y19z dXNwZW5kX2V2dGNobl9yZWxlYXNlKHhjX2ludGVyZmFjZSAqeGNoLCB4Y19ldnRjaG4gKnhjZSwK K2ludCB4Y19zdXNwZW5kX2V2dGNobl9yZWxlYXNlKHhjX2ludGVyZmFjZSAqeGNoLCB4ZW5ldnRj aG5faGFuZGxlICp4Y2UsCsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaW50IGRvbWlkLCBpbnQgc3VzcGVuZF9ldnRjaG4sIGludCAq bG9ja2ZkKQrCoHsKwqDCoMKgwqDCoGlmIChzdXNwZW5kX2V2dGNobiA+PSAwKQotwqDCoMKgwqDC oMKgwqDCoHhjX2V2dGNobl91bmJpbmQoeGNlLCBzdXNwZW5kX2V2dGNobik7CivCoMKgwqDCoMKg wqDCoMKgeGVuZXZ0Y2huX3VuYmluZCh4Y2UsIHN1c3BlbmRfZXZ0Y2huKTsKwqAKwqDCoMKgwqDC oHJldHVybiB1bmxvY2tfc3VzcGVuZF9ldmVudCh4Y2gsIGRvbWlkLCBsb2NrZmQpOwrCoH0KwqAK LWludCB4Y19zdXNwZW5kX2V2dGNobl9pbml0X3NhbmUoeGNfaW50ZXJmYWNlICp4Y2gsIHhjX2V2 dGNobiAqeGNlLAoraW50IHhjX3N1c3BlbmRfZXZ0Y2huX2luaXRfc2FuZSh4Y19pbnRlcmZhY2Ug KnhjaCwgeGVuZXZ0Y2huX2hhbmRsZSAqeGNlLArCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnQgZG9taWQsIGludCBwb3J0 LCBpbnQgKmxvY2tmZCkKwqB7CsKgwqDCoMKgwqBpbnQgcmMsIHN1c3BlbmRfZXZ0Y2huID0gLTE7 CkBAIC0xNjQsNyArMTY2LDcgQEAgaW50IHhjX3N1c3BlbmRfZXZ0Y2huX2luaXRfc2FuZSh4Y19p bnRlcmZhY2UgKnhjaCwgeGNfZXZ0Y2huICp4Y2UsCsKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gY2xl YW51cDsKwqDCoMKgwqDCoH0KwqAKLcKgwqDCoMKgc3VzcGVuZF9ldnRjaG4gPSB4Y19ldnRjaG5f YmluZF9pbnRlcmRvbWFpbih4Y2UsIGRvbWlkLCBwb3J0KTsKK8KgwqDCoMKgc3VzcGVuZF9ldnRj aG4gPSB4ZW5ldnRjaG5fYmluZF9pbnRlcmRvbWFpbih4Y2UsIGRvbWlkLCBwb3J0KTsKwqDCoMKg wqDCoGlmIChzdXNwZW5kX2V2dGNobiA8IDApIHsKwqDCoMKgwqDCoMKgwqDCoMKgRVJST1IoImZh aWxlZCB0byBiaW5kIHN1c3BlbmQgZXZlbnQgY2hhbm5lbDogJWQiLCBzdXNwZW5kX2V2dGNobik7 CsKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gY2xlYW51cDsKQEAgLTE4NCw3ICsxODYsNyBAQCBjbGVh bnVwOgrCoMKgwqDCoMKgcmV0dXJuIC0xOwrCoH0KwqAKLWludCB4Y19zdXNwZW5kX2V2dGNobl9p bml0X2V4Y2x1c2l2ZSh4Y19pbnRlcmZhY2UgKnhjaCwgeGNfZXZ0Y2huICp4Y2UsCitpbnQgeGNf c3VzcGVuZF9ldnRjaG5faW5pdF9leGNsdXNpdmUoeGNfaW50ZXJmYWNlICp4Y2gsIHhlbmV2dGNo bl9oYW5kbGUgKnhjZSwKwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludCBkb21pZCwgaW50IHBvcnQsIGlu dCAqbG9ja2ZkKQrCoHsKwqDCoMKgwqDCoGludCBzdXNwZW5kX2V2dGNobjsKZGlmZiAtLWdpdCBh L3Rvb2xzL2xpYnhsL01ha2VmaWxlIGIvdG9vbHMvbGlieGwvTWFrZWZpbGUKaW5kZXggYjBjYjll NC4uNjIwNzIwZSAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvTWFrZWZpbGUKKysrIGIvdG9vbHMv bGlieGwvTWFrZWZpbGUKQEAgLTIwLDEyICsyMCwxMyBAQCBMSUJVVUlEX0xJQlMgKz0gLWx1dWlk CsKgZW5kaWYKwqAKwqBMSUJYTF9MSUJTID0KLUxJQlhMX0xJQlMgPSAkKExETElCU19saWJ4ZW50 b29sbG9nKSAkKExETElCU19saWJ4ZW5jdHJsKSAkKExETElCU19saWJ4ZW5ndWVzdCkgJChMRExJ QlNfbGlieGVuc3RvcmUpICQoTERMSUJTX2xpYmJsa3RhcGN0bCkgJChQVFlGVU5DU19MSUJTKSAk KExJQlVVSURfTElCUykKK0xJQlhMX0xJQlMgPSAkKExETElCU19saWJ4ZW50b29sbG9nKSAkKExE TElCU19saWJ4ZW5ldnRjaG4pICQoTERMSUJTX2xpYnhlbmN0cmwpICQoTERMSUJTX2xpYnhlbmd1 ZXN0KSAkKExETElCU19saWJ4ZW5zdG9yZSkgJChMRExJQlNfbGliYmxrdGFwY3RsKSAkKFBUWUZV TkNTX0xJQlMpICQoTElCVVVJRF9MSUJTKQrCoGlmZXEgKCQoQ09ORklHX1JFTVVTX05FVEJVRiks eSkKwqBMSUJYTF9MSUJTICs9ICQoTElCTkwzX0xJQlMpCsKgZW5kaWYKwqAKwqBDRkxBR1NfTElC WEwgKz0gJChDRkxBR1NfbGlieGVudG9vbGxvZykKK0NGTEFHU19MSUJYTCArPSAkKENGTEFHU19s aWJ4ZW5ldnRjaG4pCsKgQ0ZMQUdTX0xJQlhMICs9ICQoQ0ZMQUdTX2xpYnhlbmN0cmwpCsKgQ0ZM QUdTX0xJQlhMICs9ICQoQ0ZMQUdTX2xpYnhlbmd1ZXN0KQrCoENGTEFHU19MSUJYTCArPSAkKENG TEFHU19saWJ4ZW5zdG9yZSkKQEAgLTE1NSw3ICsxNTYsNyBAQCAkKFhMX09CSlMpOiBDRkxBR1Mg Kz0gJChDRkxBR1NfWEwpCsKgJChYTF9PQkpTKTogQ0ZMQUdTICs9IC1pbmNsdWRlICQoWEVOX1JP T1QpL3Rvb2xzL2NvbmZpZy5oICMgbGlieGxfanNvbi5oIG5lZWRzIGl0LgrCoArCoFNBVkVfSEVM UEVSX09CSlMgPSBsaWJ4bF9zYXZlX2hlbHBlci5vIF9saWJ4bF9zYXZlX21zZ3NfaGVscGVyLm8K LSQoU0FWRV9IRUxQRVJfT0JKUyk6IENGTEFHUyArPSAkKENGTEFHU19saWJ4ZW5jdHJsKQorJChT QVZFX0hFTFBFUl9PQkpTKTogQ0ZMQUdTICs9ICQoQ0ZMQUdTX2xpYnhlbmN0cmwpICQoQ0ZMQUdT X2xpYnhlbmV2dGNobikKwqAKwqBQS0dfQ09ORklHID0geGVubGlnaHQucGMgeGx1dGlsLnBjCsKg CmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4bC5jIGIvdG9vbHMvbGlieGwvbGlieGwuYwpp bmRleCA5MDFlOGViLi4yYmRlMGY1IDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bC5jCisr KyBiL3Rvb2xzL2xpYnhsL2xpYnhsLmMKQEAgLTE4Niw3ICsxODYsNyBAQCBpbnQgbGlieGxfY3R4 X2ZyZWUobGlieGxfY3R4ICpjdHgpCsKgwqDCoMKgwqBpZiAoY3R4LT54Y2gpIHhjX2ludGVyZmFj ZV9jbG9zZShjdHgtPnhjaCk7CsKgwqDCoMKgwqBsaWJ4bF92ZXJzaW9uX2luZm9fZGlzcG9zZSgm Y3R4LT52ZXJzaW9uX2luZm8pOwrCoMKgwqDCoMKgaWYgKGN0eC0+eHNoKSB4c19kYWVtb25fY2xv c2UoY3R4LT54c2gpOwotwqDCoMKgwqBpZiAoY3R4LT54Y2UpIHhjX2V2dGNobl9jbG9zZShjdHgt PnhjZSk7CivCoMKgwqDCoGlmIChjdHgtPnhjZSkgeGVuZXZ0Y2huX2Nsb3NlKGN0eC0+eGNlKTsK wqAKwqDCoMKgwqDCoGxpYnhsX19wb2xsZXJfcHV0KGN0eCwgY3R4LT5wb2xsZXJfYXBwKTsKwqDC oMKgwqDCoGN0eC0+cG9sbGVyX2FwcCA9IE5VTEw7CmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9s aWJ4bF9kb21fc3VzcGVuZC5jIGIvdG9vbHMvbGlieGwvbGlieGxfZG9tX3N1c3BlbmQuYwppbmRl eCAzMzEzYWQxLi4xNmY2MDNmIDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bF9kb21fc3Vz cGVuZC5jCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsX2RvbV9zdXNwZW5kLmMKQEAgLTEwOSw5ICsx MDksOSBAQCBzdGF0aWMgdm9pZCBkb21haW5fc3VzcGVuZF9jYWxsYmFja19jb21tb24obGlieGxf X2VnYyAqZWdjLArCoMKgwqDCoMKgaWYgKChodm1fc19zdGF0ZSA9PSAwKSAmJiAoZHNzLT5ndWVz dF9ldnRjaG4ucG9ydCA+PSAwKSkgewrCoMKgwqDCoMKgwqDCoMKgwqBMT0coREVCVUcsICJpc3N1 aW5nICVzIHN1c3BlbmQgcmVxdWVzdCB2aWEgZXZlbnQgY2hhbm5lbCIsCsKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgZHNzLT5odm0gPyAiUFZIVk0iIDogIlBWIik7Ci3CoMKgwqDCoMKgwqDCoMKg cmV0ID0geGNfZXZ0Y2huX25vdGlmeShDVFgtPnhjZSwgZHNzLT5ndWVzdF9ldnRjaG4ucG9ydCk7 CivCoMKgwqDCoMKgwqDCoMKgcmV0ID0geGVuZXZ0Y2huX25vdGlmeShDVFgtPnhjZSwgZHNzLT5n dWVzdF9ldnRjaG4ucG9ydCk7CsKgwqDCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKSB7Ci3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBMT0coRVJST1IsICJ4Y19ldnRjaG5fbm90aWZ5IGZhaWxlZCBy ZXQ9JWQiLCByZXQpOworwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgTE9HKEVSUk9SLCAieGVuZXZ0 Y2huX25vdGlmeSBmYWlsZWQgcmV0PSVkIiwgcmV0KTsKwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByYyA9IEVSUk9SX0ZBSUw7CsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBlcnI7CsKg wqDCoMKgwqDCoMKgwqDCoH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX2V2ZW50LmMg Yi90b29scy9saWJ4bC9saWJ4bF9ldmVudC5jCmluZGV4IDEzOWU0OWEuLjg1NDgzNjUgMTAwNjQ0 Ci0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsX2V2ZW50LmMKKysrIGIvdG9vbHMvbGlieGwvbGlieGxf ZXZlbnQuYwpAQCAtNzM5LDcgKzczOSw3IEBAIHN0YXRpYyB2b2lkIGV2dGNobl9mZF9jYWxsYmFj ayhsaWJ4bF9fZWdjICplZ2MsIGxpYnhsX19ldl9mZCAqZXYsCsKgwqDCoMKgwqDCoMKgwqDCoC8q IE9LLCB0aGF0J3MgdGhhdCB3b3JrYXJvdW5kIGRvbmUuwqDCoFdlIGNhbiBhY3R1YWxseSBjaGVj ayBmb3IKwqDCoMKgwqDCoMKgwqDCoMKgwqAqIHdvcmsgZm9yIHVzIHRvIGRvOiAqLwrCoAotwqDC oMKgwqDCoMKgwqDCoHBvcnQgPSB4Y19ldnRjaG5fcGVuZGluZyhDVFgtPnhjZSk7CivCoMKgwqDC oMKgwqDCoMKgcG9ydCA9IHhlbmV2dGNobl9wZW5kaW5nKENUWC0+eGNlKTsKwqDCoMKgwqDCoMKg wqDCoMKgaWYgKHBvcnQgPCAwKSB7CsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGVycm5v ID09IEVBR0FJTikKwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwpAQCAt NzY1LDIwICs3NjUsMjAgQEAgc3RhdGljIHZvaWQgZXZ0Y2huX2ZkX2NhbGxiYWNrKGxpYnhsX19l Z2MgKmVnYywgbGlieGxfX2V2X2ZkICpldiwKwqB9CsKgCsKgaW50IGxpYnhsX19jdHhfZXZ0Y2hu X2luaXQobGlieGxfX2djICpnYykgewotwqDCoMKgwqB4Y19ldnRjaG4gKnhjZTsKK8KgwqDCoMKg eGVuZXZ0Y2huX2hhbmRsZSAqeGNlOwrCoMKgwqDCoMKgaW50IHJjLCBmZDsKwqAKwqDCoMKgwqDC oGlmIChDVFgtPnhjZSkKwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIDA7CsKgCi3CoMKgwqDCoHhj ZSA9IHhjX2V2dGNobl9vcGVuKENUWC0+bGcsIDApOworwqDCoMKgwqB4Y2UgPSB4ZW5ldnRjaG5f b3BlbihDVFgtPmxnLCAwKTsKwqDCoMKgwqDCoGlmICgheGNlKSB7CsKgwqDCoMKgwqDCoMKgwqDC oExPR0UoRVJST1IsImNhbm5vdCBvcGVuIGxpYnhjIGV2dGNobiBoYW5kbGUiKTsKwqDCoMKgwqDC oMKgwqDCoMKgcmMgPSBFUlJPUl9GQUlMOwrCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIG91dDsKwqDC oMKgwqDCoH0KwqAKLcKgwqDCoMKgZmQgPSB4Y19ldnRjaG5fZmQoeGNlKTsKK8KgwqDCoMKgZmQg PSB4ZW5ldnRjaG5fZmQoeGNlKTsKwqDCoMKgwqDCoGFzc2VydChmZCA+PSAwKTsKwqAKwqDCoMKg wqDCoHJjID0gbGlieGxfZmRfc2V0X25vbmJsb2NrKENUWCwgZmQsIDEpOwpAQCAtNzg4LDcgKzc4 OCw3IEBAIGludCBsaWJ4bF9fY3R4X2V2dGNobl9pbml0KGxpYnhsX19nYyAqZ2MpIHsKwqDCoMKg wqDCoHJldHVybiAwOwrCoArCoCBvdXQ6Ci3CoMKgwqDCoHhjX2V2dGNobl9jbG9zZSh4Y2UpOwor wqDCoMKgwqB4ZW5ldnRjaG5fY2xvc2UoeGNlKTsKwqDCoMKgwqDCoHJldHVybiByYzsKwqB9CsKg CkBAIC04MTAsMTQgKzgxMCwxNCBAQCBpbnQgbGlieGxfX2V2X2V2dGNobl93YWl0KGxpYnhsX19n YyAqZ2MsIGxpYnhsX19ldl9ldnRjaG4gKmV2ZXYpCsKgCsKgwqDCoMKgwqBpZiAoIWxpYnhsX19l dl9mZF9pc3JlZ2lzdGVyZWQoJkNUWC0+ZXZ0Y2huX2VmZCkpIHsKwqDCoMKgwqDCoMKgwqDCoMKg cmMgPSBsaWJ4bF9fZXZfZmRfcmVnaXN0ZXIoZ2MsICZDVFgtPmV2dGNobl9lZmQsIGV2dGNobl9m ZF9jYWxsYmFjaywKLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4Y19ldnRjaG5fZmQoQ1RYLT54Y2UpLCBQT0xMSU4p OworwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHhlbmV2dGNobl9mZChDVFgtPnhjZSksIFBPTExJTik7CsKgwqDCoMKg wqDCoMKgwqDCoGlmIChyYykgZ290byBvdXQ7CsKgwqDCoMKgwqB9CsKgCsKgwqDCoMKgwqBpZiAo ZXZldi0+d2FpdGluZykKwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIDA7CsKgCi3CoMKgwqDCoHIg PSB4Y19ldnRjaG5fdW5tYXNrKENUWC0+eGNlLCBldmV2LT5wb3J0KTsKK8KgwqDCoMKgciA9IHhl bmV2dGNobl91bm1hc2soQ1RYLT54Y2UsIGV2ZXYtPnBvcnQpOwrCoMKgwqDCoMKgaWYgKHIpIHsK wqDCoMKgwqDCoMKgwqDCoMKgTE9HRShFUlJPUiwiY2Fubm90IHVubWFzayBldmVudCBjaGFubmVs ICVkIixldmV2LT5wb3J0KTsKwqDCoMKgwqDCoMKgwqDCoMKgcmMgPSBFUlJPUl9GQUlMOwpkaWZm IC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGxfaW50ZXJuYWwuaCBiL3Rvb2xzL2xpYnhsL2xpYnhs X2ludGVybmFsLmgKaW5kZXggMjMzZDQ0YS4uMjE5OGQwNyAxMDA2NDQKLS0tIGEvdG9vbHMvbGli eGwvbGlieGxfaW50ZXJuYWwuaAorKysgYi90b29scy9saWJ4bC9saWJ4bF9pbnRlcm5hbC5oCkBA IC00OCw2ICs0OCw3IEBACsKgI2luY2x1ZGUgPHN5cy9maWxlLmg+CsKgI2luY2x1ZGUgPHN5cy9p b2N0bC5oPgrCoAorI2luY2x1ZGUgPHhlbmV2dGNobi5oPgrCoCNpbmNsdWRlIDx4ZW5zdG9yZS5o PgrCoCNpbmNsdWRlIDx4ZW5jdHJsLmg+CsKgI2luY2x1ZGUgPHhlbmd1ZXN0Lmg+CkBAIC00NDgs NyArNDQ5LDcgQEAgc3RydWN0IGxpYnhsX19jdHggewrCoMKgwqDCoMKgdWludDMyX3Qgd2F0Y2hf Y291bnRlcjsgLyogaGVscHMgZGlzYW1iaWd1YXRlIHNsb3QgcmV1c2UgKi8KwqDCoMKgwqDCoGxp YnhsX19ldl9mZCB3YXRjaF9lZmQ7CsKgCi3CoMKgwqDCoHhjX2V2dGNobiAqeGNlOyAvKiB3YWl0 aW5nIG11c3QgYmUgZG9uZSBvbmx5IHdpdGggbGlieGxfX2V2X2V2dGNobiogKi8KK8KgwqDCoMKg eGVuZXZ0Y2huX2hhbmRsZSAqeGNlOyAvKiB3YWl0aW5nIG11c3QgYmUgZG9uZSBvbmx5IHdpdGgg bGlieGxfX2V2X2V2dGNobiogKi8KwqDCoMKgwqDCoExJQlhMX0xJU1RfSEVBRCgsIGxpYnhsX19l dl9ldnRjaG4pIGV2dGNobnNfd2FpdGluZzsKwqDCoMKgwqDCoGxpYnhsX19ldl9mZCBldnRjaG5f ZWZkOwrCoApAQCAtOTI1LDcgKzkyNiw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGxpYnhsX19ldl94 c3dhdGNoX2lzcmVnaXN0ZXJlZChjb25zdCBsaWJ4bF9fZXZfeHN3YXRjaCAqeHcpCsKgICogV2hl biB0aGUgZXZlbnQgaXMgc2lnbmFsZWQgdGhlbiB0aGUgY2FsbGJhY2sgd2lsbCBiZSBtYWRlLCBv bmNlLgrCoCAqIFRoZW4geW91IG11c3QgY2FsbCBsaWJ4bF9fZXZfZXZ0Y2huX3dhaXQgYWdhaW4s IGlmIGRlc2lyZWQuCsKgICoKLSAqIFlvdSBtdXN0IE5PVCBjYWxsIHhjX2V2dGNobl91bm1hc2su wqDCoHdhaXQgd2lsbCBkbyB0aGF0IGZvciB5b3UuCisgKiBZb3UgbXVzdCBOT1QgY2FsbCB4ZW5l dnRjaG5fdW5tYXNrLsKgwqB3YWl0IHdpbGwgZG8gdGhhdCBmb3IgeW91LgrCoCAqCsKgICogQ2Fs bGluZyBsaWJ4bF9fZXZfZXZ0Y2huX2NhbmNlbCB3aWxsIGFycmFuZ2UgZm9yIGxpYnhsIHRvIGRp c3JlZ2FyZArCoCAqIGZ1dHVyZSBvY2N1cnJlbmNlcyBvZiBldmVudC7CoMKgQm90aCBsaWJ4bF9f ZXZfZXZ0Y2huX3dhaXQgYW5kCmRpZmYgLS1naXQgYS90b29scy9taXNjL01ha2VmaWxlIGIvdG9v bHMvbWlzYy9NYWtlZmlsZQppbmRleCBjNDQ5MGYzLi5jZjZhNDc1IDEwMDY0NAotLS0gYS90b29s cy9taXNjL01ha2VmaWxlCisrKyBiL3Rvb2xzL21pc2MvTWFrZWZpbGUKQEAgLTQsNiArNCw3IEBA IGluY2x1ZGUgJChYRU5fUk9PVCkvdG9vbHMvUnVsZXMubWsKwqBDRkxBR1MgKz0gLVdlcnJvcgrC oCMgSW5jbHVkZSBjb25maWd1cmUgb3V0cHV0IChjb25maWcuaCkKwqBDRkxBR1MgKz0gLWluY2x1 ZGUgJChYRU5fUk9PVCkvdG9vbHMvY29uZmlnLmgKK0NGTEFHUyArPSAkKENGTEFHU19saWJ4ZW5l dnRjaG4pCsKgQ0ZMQUdTICs9ICQoQ0ZMQUdTX2xpYnhlbmN0cmwpCsKgQ0ZMQUdTICs9ICQoQ0ZM QUdTX3hlbmluY2x1ZGUpCsKgQ0ZMQUdTICs9ICQoQ0ZMQUdTX2xpYnhlbnN0b3JlKQpAQCAtODgs MTggKzg5LDE4IEBAIHhlbmxvY2twcm9mOiB4ZW5sb2NrcHJvZi5vCsKgIyB4ZW4taHB0b29sIGlu Y29ycmVjdGx5IHVzZXMgbGlieGMgaW50ZXJuYWxzCsKgeGVuLWhwdG9vbC5vOiBDRkxBR1MgKz0g LUkkKFhFTl9ST09UKS90b29scy9saWJ4YwrCoHhlbi1ocHRvb2w6IHhlbi1ocHRvb2wubwotCSQo Q0MpICQoTERGTEFHUykgLW8gJEAgJDwgJChMRExJQlNfbGlieGVuY3RybCkgJChMRExJQlNfbGli eGVuZ3Vlc3QpICQoTERMSUJTX2xpYnhlbnN0b3JlKSAkKEFQUEVORF9MREZMQUdTKQorCSQoQ0Mp ICQoTERGTEFHUykgLW8gJEAgJDwgJChMRExJQlNfbGlieGVuZXZ0Y2huKSAkKExETElCU19saWJ4 ZW5jdHJsKSAkKExETElCU19saWJ4ZW5ndWVzdCkgJChMRExJQlNfbGlieGVuc3RvcmUpICQoQVBQ RU5EX0xERkxBR1MpCsKgCsKgIyB4ZW4tbWZuZHVtcCBpbmNvcnJlY3RseSB1c2VzIGxpYnhjIGlu dGVybmFscwrCoHhlbi1tZm5kdW1wLm86IENGTEFHUyArPSAtSSQoWEVOX1JPT1QpL3Rvb2xzL2xp YnhjCsKgeGVuLW1mbmR1bXA6IHhlbi1tZm5kdW1wLm8KLQkkKENDKSAkKExERkxBR1MpIC1vICRA ICQ8ICQoTERMSUJTX2xpYnhlbmN0cmwpICQoTERMSUJTX2xpYnhlbmd1ZXN0KSAkKEFQUEVORF9M REZMQUdTKQorCSQoQ0MpICQoTERGTEFHUykgLW8gJEAgJDwgJChMRExJQlNfbGlieGVuZXZ0Y2hu KSAkKExETElCU19saWJ4ZW5jdHJsKSAkKExETElCU19saWJ4ZW5ndWVzdCkgJChBUFBFTkRfTERG TEFHUykKwqAKwqB4ZW53YXRjaGRvZ2Q6IHhlbndhdGNoZG9nZC5vCsKgCSQoQ0MpICQoTERGTEFH UykgLW8gJEAgJDwgJChMRExJQlNfbGlieGVuY3RybCkgJChBUFBFTkRfTERGTEFHUykKwqAKwqB4 ZW4tbG93bWVtZDogeGVuLWxvd21lbWQubwotCSQoQ0MpICQoTERGTEFHUykgLW8gJEAgJDwgJChM RExJQlNfbGlieGVuY3RybCkgJChMRExJQlNfbGlieGVuc3RvcmUpICQoQVBQRU5EX0xERkxBR1Mp CisJJChDQykgJChMREZMQUdTKSAtbyAkQCAkPCAkKExETElCU19saWJ4ZW5ldnRjaG4pICQoTERM SUJTX2xpYnhlbmN0cmwpICQoTERMSUJTX2xpYnhlbnN0b3JlKSAkKEFQUEVORF9MREZMQUdTKQrC oArCoGd0cmFjZXZpZXc6IGd0cmFjZXZpZXcubwrCoAkkKENDKSAkKExERkxBR1MpIC1vICRAICQ8 ICQoQ1VSU0VTX0xJQlMpICQoVElORk9fTElCUykgJChBUFBFTkRfTERGTEFHUykKZGlmZiAtLWdp dCBhL3Rvb2xzL21pc2MveGVuLWhwdG9vbC5jIGIvdG9vbHMvbWlzYy94ZW4taHB0b29sLmMKaW5k ZXggYzc1NjFhOS4uZWJjYzllOCAxMDA2NDQKLS0tIGEvdG9vbHMvbWlzYy94ZW4taHB0b29sLmMK KysrIGIvdG9vbHMvbWlzYy94ZW4taHB0b29sLmMKQEAgLTEsMyArMSw0IEBACisjaW5jbHVkZSA8 eGVuZXZ0Y2huLmg+CsKgI2luY2x1ZGUgPHhlbmN0cmwuaD4KwqAjaW5jbHVkZSA8eGNfcHJpdmF0 ZS5oPgrCoCNpbmNsdWRlIDx4Y19jb3JlLmg+CkBAIC05OCw3ICs5OSw3IEBAIHN0YXRpYyBpbnQg aHBfbWVtX3F1ZXJ5X2Z1bmMoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKwqDCoMKgwqDCoHJldHVy biByZXQ7CsKgfQrCoAotc3RhdGljIGludCBzdXNwZW5kX2d1ZXN0KHhjX2ludGVyZmFjZSAqeGNo LCB4Y19ldnRjaG4gKnhjZSwgaW50IGRvbWlkLAorc3RhdGljIGludCBzdXNwZW5kX2d1ZXN0KHhj X2ludGVyZmFjZSAqeGNoLCB4ZW5ldnRjaG5faGFuZGxlICp4Y2UsIGludCBkb21pZCwKwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludCAqZXZ0Y2hu LCBpbnQgKmxvY2tmZCkKwqB7CsKgwqDCoMKgwqBpbnQgcG9ydCwgcmMsIHN1c3BlbmRfZXZ0Y2hu ID0gLTE7CkBAIC0xMjMsNyArMTI0LDcgQEAgc3RhdGljIGludCBzdXNwZW5kX2d1ZXN0KHhjX2lu dGVyZmFjZSAqeGNoLCB4Y19ldnRjaG4gKnhjZSwgaW50IGRvbWlkLArCoMKgwqDCoMKgfQrCoMKg wqDCoMKgKmV2dGNobiA9IHN1c3BlbmRfZXZ0Y2huOwrCoAotwqDCoMKgwqByYyA9IHhjX2V2dGNo bl9ub3RpZnkoeGNlLCBzdXNwZW5kX2V2dGNobik7CivCoMKgwqDCoHJjID0geGVuZXZ0Y2huX25v dGlmeSh4Y2UsIHN1c3BlbmRfZXZ0Y2huKTsKwqDCoMKgwqDCoGlmIChyYyA8IDApCsKgwqDCoMKg wqB7CsKgwqDCoMKgwqDCoMKgwqDCoGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIG5vdGlmeSBz dXNwZW5kIGNoYW5uZWw6IGVycm5vICVkXG4iLCByYyk7CkBAIC0xOTgsOCArMTk5LDggQEAgc3Rh dGljIGludCBocF9tZW1fb2ZmbGluZV9mdW5jKGludCBhcmdjLCBjaGFyICphcmd2W10pCsKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlbHNlIGlmIChzdGF0dXMgJiBQR19PRkZMSU5F X09XTkVEKQrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgewrCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnQgcmVzdWx0LCBzdXNwZW5kX2V2dGNobiA9 IC0xLCBzdXNwZW5kX2xvY2tmZCA9IC0xOwotwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHhjX2V2dGNobiAqeGNlOwotwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHhjZSA9IHhjX2V2dGNobl9vcGVuKE5VTEwsIDApOworwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhlbmV2dGNobl9oYW5kbGUgKnhjZTsKK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB4Y2UgPSB4ZW5ldnRjaG5fb3BlbihOVUxM LCAwKTsKwqAKwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHhj ZSA9PSBOVUxMKQrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB7CkBA IC0yMTQsNyArMjE1LDcgQEAgc3RhdGljIGludCBocF9tZW1fb2ZmbGluZV9mdW5jKGludCBhcmdj LCBjaGFyICphcmd2W10pCsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHsKwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmcHJp bnRmKHN0ZGVyciwgIkZhaWxlZCB0byBzdXNwZW5kIGd1ZXN0ICVkIGZvciIKwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIiBt Zm4gJWx4XG4iLCBkb21pZCwgbWZuKTsKLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHhjX2V2dGNobl9jbG9zZSh4Y2UpOworwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGVuZXZ0Y2huX2Nsb3NlKHhjZSk7CsKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC0xOwrC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9CsKgCkBAIC0yMzgsNyAr MjM5LDcgQEAgc3RhdGljIGludCBocF9tZW1fb2ZmbGluZV9mdW5jKGludCBhcmdjLCBjaGFyICph cmd2W10pCsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhjX2RvbWFp bl9yZXN1bWUoeGNoLCBkb21pZCwgMSk7CsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHhjX3N1c3BlbmRfZXZ0Y2huX3JlbGVhc2UoeGNoLCB4Y2UsIGRvbWlkLArCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3VzcGVuZF9ldnRjaG4sICZzdXNwZW5k X2xvY2tmZCk7Ci3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGNfZXZ0 Y2huX2Nsb3NlKHhjZSk7CivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg eGVuZXZ0Y2huX2Nsb3NlKHhjZSk7CsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9 CsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB9CmRpZmYgLS1naXQgYS90b29scy9taXNjL3hlbi1sb3dtZW1kLmMgYi90b29s cy9taXNjL3hlbi1sb3dtZW1kLmMKaW5kZXggODJmZmQ3NS4uMzIwMDQwNCAxMDA2NDQKLS0tIGEv dG9vbHMvbWlzYy94ZW4tbG93bWVtZC5jCisrKyBiL3Rvb2xzL21pc2MveGVuLWxvd21lbWQuYwpA QCAtNCwyMiArNCwyMyBAQArCoCAqLwrCoArCoCNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUg PHhlbmV2dGNobi5oPgrCoCNpbmNsdWRlIDx4ZW5jdHJsLmg+CsKgI2luY2x1ZGUgPHhlbnN0b3Jl Lmg+CsKgI2luY2x1ZGUgPHN0ZGxpYi5oPgrCoCNpbmNsdWRlIDxzdHJpbmcuaD4KwqAKwqBzdGF0 aWMgZXZ0Y2huX3BvcnRfdCB2aXJxX3BvcnTCoMKgwqDCoMKgwqA9IC0xOwotc3RhdGljIHhjX2V2 dGNobiAqeGNlX2hhbmRsZcKgwqDCoMKgwqDCoMKgwqA9IE5VTEw7CitzdGF0aWMgeGVuZXZ0Y2hu X2hhbmRsZSAqeGNlX2hhbmRsZSA9IE5VTEw7CsKgc3RhdGljIHhjX2ludGVyZmFjZSAqeGNowqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgPSBOVUxMOwrCoHN0YXRpYyBzdHJ1Y3QgeHNfaGFuZGxlICp4 c19oYW5kbGXCoMKgPSBOVUxMOwrCoArCoHZvaWQgY2xlYW51cCh2b2lkKQrCoHsKwqDCoMKgwqDC oGlmICh2aXJxX3BvcnQgPiAtMSkKLcKgwqDCoMKgwqDCoMKgwqB4Y19ldnRjaG5fdW5iaW5kKHhj ZV9oYW5kbGUsIHZpcnFfcG9ydCk7CivCoMKgwqDCoMKgwqDCoMKgeGVuZXZ0Y2huX3VuYmluZCh4 Y2VfaGFuZGxlLCB2aXJxX3BvcnQpOwrCoMKgwqDCoMKgaWYgKHhjZV9oYW5kbGUpCi3CoMKgwqDC oMKgwqDCoMKgeGNfZXZ0Y2huX2Nsb3NlKHhjZV9oYW5kbGUpOworwqDCoMKgwqDCoMKgwqDCoHhl bmV2dGNobl9jbG9zZSh4Y2VfaGFuZGxlKTsKwqDCoMKgwqDCoGlmICh4Y2gpCsKgwqDCoMKgwqDC oMKgwqDCoHhjX2ludGVyZmFjZV9jbG9zZSh4Y2gpOwrCoMKgwqDCoMKgaWYgKHhzX2hhbmRsZSkK QEAgLTk0LDcgKzk1LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKwqDCoMKg wqDCoMKgwqDCoMKgcmV0dXJuIDE7CsKgwqDCoMKgwqB9CsKgCi0JeGNlX2hhbmRsZSA9IHhjX2V2 dGNobl9vcGVuKE5VTEwsIDApOworCXhjZV9oYW5kbGUgPSB4ZW5ldnRjaG5fb3BlbihOVUxMLCAw KTsKwqAJaWYgKHhjZV9oYW5kbGUgPT0gTlVMTCkKwqDCoMKgwqDCoHsKwqDCoMKgwqDCoMKgwqDC oMKgcGVycm9yKCJGYWlsZWQgdG8gb3BlbiBldnRjaG4gZGV2aWNlIik7CkBAIC0xMDgsNyArMTA5 LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKwqDCoMKgwqDCoMKgwqDCoMKg cmV0dXJuIDM7CsKgwqDCoMKgwqB9CsKgCi0JaWYgKChyYyA9IHhjX2V2dGNobl9iaW5kX3ZpcnEo eGNlX2hhbmRsZSwgVklSUV9FTk9NRU0pKSA9PSAtMSkKKwlpZiAoKHJjID0geGVuZXZ0Y2huX2Jp bmRfdmlycSh4Y2VfaGFuZGxlLCBWSVJRX0VOT01FTSkpID09IC0xKQrCoMKgwqDCoMKgewrCoMKg wqDCoMKgwqDCoMKgwqBwZXJyb3IoIkZhaWxlZCB0byBiaW5kIHRvIGRvbWFpbiBleGNlcHRpb24g dmlycSBwb3J0Iik7CsKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiA0OwpAQCAtMTIwLDcgKzEyMSw3 IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCsKgwqDCoMKgwqB7CsKgwqDCoMKg wqDCoMKgwqDCoGV2dGNobl9wb3J0X3QgcG9ydDsKwqAKLcKgwqDCoMKgwqDCoMKgwqBpZiAoKHBv cnQgPSB4Y19ldnRjaG5fcGVuZGluZyh4Y2VfaGFuZGxlKSkgPT0gLTEpCivCoMKgwqDCoMKgwqDC oMKgaWYgKChwb3J0ID0geGVuZXZ0Y2huX3BlbmRpbmcoeGNlX2hhbmRsZSkpID09IC0xKQrCoMKg wqDCoMKgwqDCoMKgwqB7CsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcGVycm9yKCJGYWlsZWQg dG8gbGlzdGVuIGZvciBwZW5kaW5nIGV2ZW50IGNoYW5uZWwiKTsKwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqByZXR1cm4gNTsKQEAgLTEzNCw3ICsxMzUsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywg Y2hhciAqYXJndltdKQrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiA2OwrCoMKgwqDC oMKgwqDCoMKgwqB9CsKgCi3CoMKgwqDCoMKgwqDCoMKgaWYgKHhjX2V2dGNobl91bm1hc2soeGNl X2hhbmRsZSwgcG9ydCkgPT0gLTEpCivCoMKgwqDCoMKgwqDCoMKgaWYgKHhlbmV2dGNobl91bm1h c2soeGNlX2hhbmRsZSwgcG9ydCkgPT0gLTEpCsKgwqDCoMKgwqDCoMKgwqDCoHsKwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBwZXJyb3IoIkZhaWxlZCB0byB1bm1hc2sgcG9ydCIpOwrCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiA3OwpkaWZmIC0tZ2l0IGEvdG9vbHMvb2NhbWwvbGli cy9ldmVudGNobi9NYWtlZmlsZSBiL3Rvb2xzL29jYW1sL2xpYnMvZXZlbnRjaG4vTWFrZWZpbGUK aW5kZXggMmQ4ZDYxOC4uMTU0ZWZkNCAxMDA2NDQKLS0tIGEvdG9vbHMvb2NhbWwvbGlicy9ldmVu dGNobi9NYWtlZmlsZQorKysgYi90b29scy9vY2FtbC9saWJzL2V2ZW50Y2huL01ha2VmaWxlCkBA IC0yLDEzICsyLDEzIEBAIFRPUExFVkVMPSQoQ1VSRElSKS8uLi8uLgrCoFhFTl9ST09UPSQoVE9Q TEVWRUwpLy4uLy4uCsKgaW5jbHVkZSAkKFRPUExFVkVMKS9jb21tb24ubWFrZQrCoAotQ0ZMQUdT ICs9ICQoQ0ZMQUdTX2xpYnhlbmN0cmwpICQoQ0ZMQUdTX3hlbmluY2x1ZGUpCitDRkxBR1MgKz0g JChDRkxBR1NfbGlieGVuZXZ0Y2huKSAkKENGTEFHU194ZW5pbmNsdWRlKQrCoArCoE9CSlMgPSB4 ZW5ldmVudGNobgrCoElOVEYgPSAkKGZvcmVhY2ggb2JqLCAkKE9CSlMpLCQob2JqKS5jbWkpCsKg TElCUyA9IHhlbmV2ZW50Y2huLmNtYSB4ZW5ldmVudGNobi5jbXhhCsKgCi1MSUJTX3hlbmV2ZW50 Y2huID0gJChMRExJQlNfbGlieGVuY3RybCkKK0xJQlNfeGVuZXZlbnRjaG4gPSAkKExETElCU19s aWJ4ZW5ldnRjaG4pCsKgCsKgYWxsOiAkKElOVEYpICQoTElCUykgJChQUk9HUkFNUykKwqAKZGlm ZiAtLWdpdCBhL3Rvb2xzL29jYW1sL2xpYnMvZXZlbnRjaG4veGVuZXZlbnRjaG5fc3R1YnMuYyBi L3Rvb2xzL29jYW1sL2xpYnMvZXZlbnRjaG4veGVuZXZlbnRjaG5fc3R1YnMuYwppbmRleCA1OTM5 ZTdjLi5jMmQ0NzM3IDEwMDY0NAotLS0gYS90b29scy9vY2FtbC9saWJzL2V2ZW50Y2huL3hlbmV2 ZW50Y2huX3N0dWJzLmMKKysrIGIvdG9vbHMvb2NhbWwvbGlicy9ldmVudGNobi94ZW5ldmVudGNo bl9zdHVicy5jCkBAIC0yNCw3ICsyNCw3IEBACsKgI2luY2x1ZGUgPHhlbi9zeXNjdGwuaD4KwqAj aW5jbHVkZSA8eGVuL3hlbi5oPgrCoCNpbmNsdWRlIDx4ZW4vc3lzL2V2dGNobi5oPgotI2luY2x1 ZGUgPHhlbmN0cmwuaD4KKyNpbmNsdWRlIDx4ZW5ldnRjaG4uaD4KwqAKwqAjZGVmaW5lIENBTUxf TkFNRV9TUEFDRQrCoCNpbmNsdWRlIDxjYW1sL21sdmFsdWVzLmg+CkBAIC0zNCwxNCArMzQsMTQg QEAKwqAjaW5jbHVkZSA8Y2FtbC9jYWxsYmFjay5oPgrCoCNpbmNsdWRlIDxjYW1sL2ZhaWwuaD4K wqAKLSNkZWZpbmUgX0goX19oKSAoKHhjX2V2dGNobiAqKShfX2gpKQorI2RlZmluZSBfSChfX2gp ICgoeGVuZXZ0Y2huX2hhbmRsZSAqKShfX2gpKQrCoArCoENBTUxwcmltIHZhbHVlIHN0dWJfZXZl bnRjaG5faW5pdCh2b2lkKQrCoHsKwqAJQ0FNTHBhcmFtMCgpOwrCoAlDQU1MbG9jYWwxKHJlc3Vs dCk7CsKgCi0JeGNfZXZ0Y2huICp4Y2UgPSB4Y19ldnRjaG5fb3BlbihOVUxMLCBYQ19PUEVORkxB R19OT05fUkVFTlRSQU5UKTsKKwl4ZW5ldnRjaG5faGFuZGxlICp4Y2UgPSB4ZW5ldnRjaG5fb3Bl bihOVUxMLCAwKTsKwqAJaWYgKHhjZSA9PSBOVUxMKQrCoAkJY2FtbF9mYWlsd2l0aCgib3BlbiBm YWlsZWQiKTsKwqAKQEAgLTU1LDcgKzU1LDcgQEAgQ0FNTHByaW0gdmFsdWUgc3R1Yl9ldmVudGNo bl9mZCh2YWx1ZSB4Y2UpCsKgCUNBTUxsb2NhbDEocmVzdWx0KTsKwqAJaW50IGZkOwrCoAotCWZk ID0geGNfZXZ0Y2huX2ZkKF9IKHhjZSkpOworCWZkID0geGVuZXZ0Y2huX2ZkKF9IKHhjZSkpOwrC oAlpZiAoZmQgPT0gLTEpCsKgCQljYW1sX2ZhaWx3aXRoKCJldnRjaG4gZmQgZmFpbGVkIik7CsKg CkBAIC02OSw3ICs2OSw3IEBAIENBTUxwcmltIHZhbHVlIHN0dWJfZXZlbnRjaG5fbm90aWZ5KHZh bHVlIHhjZSwgdmFsdWUgcG9ydCkKwqAJQ0FNTHBhcmFtMih4Y2UsIHBvcnQpOwrCoAlpbnQgcmM7 CsKgCi0JcmMgPSB4Y19ldnRjaG5fbm90aWZ5KF9IKHhjZSksIEludF92YWwocG9ydCkpOworCXJj ID0geGVuZXZ0Y2huX25vdGlmeShfSCh4Y2UpLCBJbnRfdmFsKHBvcnQpKTsKwqAJaWYgKHJjID09 IC0xKQrCoAkJY2FtbF9mYWlsd2l0aCgiZXZ0Y2huIG5vdGlmeSBmYWlsZWQiKTsKwqAKQEAgLTgz LDcgKzgzLDcgQEAgQ0FNTHByaW0gdmFsdWUgc3R1Yl9ldmVudGNobl9iaW5kX2ludGVyZG9tYWlu KHZhbHVlIHhjZSwgdmFsdWUgZG9taWQsCsKgCUNBTUxsb2NhbDEocG9ydCk7CsKgCWV2dGNobl9w b3J0X29yX2Vycm9yX3QgcmM7CsKgCi0JcmMgPSB4Y19ldnRjaG5fYmluZF9pbnRlcmRvbWFpbihf SCh4Y2UpLCBJbnRfdmFsKGRvbWlkKSwgSW50X3ZhbChyZW1vdGVfcG9ydCkpOworCXJjID0geGVu ZXZ0Y2huX2JpbmRfaW50ZXJkb21haW4oX0goeGNlKSwgSW50X3ZhbChkb21pZCksIEludF92YWwo cmVtb3RlX3BvcnQpKTsKwqAJaWYgKHJjID09IC0xKQrCoAkJY2FtbF9mYWlsd2l0aCgiZXZ0Y2hu IGJpbmRfaW50ZXJkb21haW4gZmFpbGVkIik7CsKgCXBvcnQgPSBWYWxfaW50KHJjKTsKQEAgLTk3 LDcgKzk3LDcgQEAgQ0FNTHByaW0gdmFsdWUgc3R1Yl9ldmVudGNobl9iaW5kX2RvbV9leGNfdmly cSh2YWx1ZSB4Y2UpCsKgCUNBTUxsb2NhbDEocG9ydCk7CsKgCWV2dGNobl9wb3J0X29yX2Vycm9y X3QgcmM7CsKgCi0JcmMgPSB4Y19ldnRjaG5fYmluZF92aXJxKF9IKHhjZSksIFZJUlFfRE9NX0VY Qyk7CisJcmMgPSB4ZW5ldnRjaG5fYmluZF92aXJxKF9IKHhjZSksIFZJUlFfRE9NX0VYQyk7CsKg CWlmIChyYyA9PSAtMSkKwqAJCWNhbWxfZmFpbHdpdGgoImV2dGNobiBiaW5kX2RvbV9leGNfdmly cSBmYWlsZWQiKTsKwqAJcG9ydCA9IFZhbF9pbnQocmMpOwpAQCAtMTEwLDcgKzExMCw3IEBAIENB TUxwcmltIHZhbHVlIHN0dWJfZXZlbnRjaG5fdW5iaW5kKHZhbHVlIHhjZSwgdmFsdWUgcG9ydCkK wqAJQ0FNTHBhcmFtMih4Y2UsIHBvcnQpOwrCoAlpbnQgcmM7CsKgCi0JcmMgPSB4Y19ldnRjaG5f dW5iaW5kKF9IKHhjZSksIEludF92YWwocG9ydCkpOworCXJjID0geGVuZXZ0Y2huX3VuYmluZChf SCh4Y2UpLCBJbnRfdmFsKHBvcnQpKTsKwqAJaWYgKHJjID09IC0xKQrCoAkJY2FtbF9mYWlsd2l0 aCgiZXZ0Y2huIHVuYmluZCBmYWlsZWQiKTsKwqAKQEAgLTEyMyw3ICsxMjMsNyBAQCBDQU1McHJp bSB2YWx1ZSBzdHViX2V2ZW50Y2huX3BlbmRpbmcodmFsdWUgeGNlKQrCoAlDQU1MbG9jYWwxKHJl c3VsdCk7CsKgCWV2dGNobl9wb3J0X29yX2Vycm9yX3QgcG9ydDsKwqAKLQlwb3J0ID0geGNfZXZ0 Y2huX3BlbmRpbmcoX0goeGNlKSk7CisJcG9ydCA9IHhlbmV2dGNobl9wZW5kaW5nKF9IKHhjZSkp OwrCoAlpZiAocG9ydCA9PSAtMSkKwqAJCWNhbWxfZmFpbHdpdGgoImV2dGNobiBwZW5kaW5nIGZh aWxlZCIpOwrCoAlyZXN1bHQgPSBWYWxfaW50KHBvcnQpOwpAQCAtMTM3LDcgKzEzNyw3IEBAIENB TUxwcmltIHZhbHVlIHN0dWJfZXZlbnRjaG5fdW5tYXNrKHZhbHVlIHhjZSwgdmFsdWUgX3BvcnQp CsKgCWV2dGNobl9wb3J0X3QgcG9ydDsKwqAKwqAJcG9ydCA9IEludF92YWwoX3BvcnQpOwotCWlm ICh4Y19ldnRjaG5fdW5tYXNrKF9IKHhjZSksIHBvcnQpKQorCWlmICh4ZW5ldnRjaG5fdW5tYXNr KF9IKHhjZSksIHBvcnQpKQrCoAkJY2FtbF9mYWlsd2l0aCgiZXZ0Y2huIHVubWFzayBmYWlsZWQi KTsKwqAJQ0FNTHJldHVybihWYWxfdW5pdCk7CsKgfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcHl0aG9u L3NldHVwLnB5IGIvdG9vbHMvcHl0aG9uL3NldHVwLnB5CmluZGV4IDYwNGIzMTQuLjhmYWYxYzAg MTAwNjQ0Ci0tLSBhL3Rvb2xzL3B5dGhvbi9zZXR1cC5weQorKysgYi90b29scy9weXRob24vc2V0 dXAucHkKQEAgLTgsMTMgKzgsMTggQEAgZXh0cmFfY29tcGlsZV9hcmdzwqDCoD0gWyAiLWZuby1z dHJpY3QtYWxpYXNpbmciLCAiLVdlcnJvciIgXQrCoArCoFBBVEhfWEVOwqDCoMKgwqDCoMKgPSBY RU5fUk9PVCArICIvdG9vbHMvaW5jbHVkZSIKwqBQQVRIX0xJQlhFTlRPT0xMT0cgPSBYRU5fUk9P VCArICIvdG9vbHMvbGlicy90b29sbG9nIgorUEFUSF9MSUJYRU5FVlRDSE4gPSBYRU5fUk9PVCAr ICIvdG9vbHMvbGlicy9ldnRjaG4iCsKgUEFUSF9MSUJYQ8KgwqDCoMKgPSBYRU5fUk9PVCArICIv dG9vbHMvbGlieGMiCsKgUEFUSF9MSUJYTMKgwqDCoMKgPSBYRU5fUk9PVCArICIvdG9vbHMvbGli eGwiCsKgUEFUSF9YRU5TVE9SRSA9IFhFTl9ST09UICsgIi90b29scy94ZW5zdG9yZSIKwqAKwqB4 YyA9IEV4dGVuc2lvbigieGMiLArCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGV4dHJh X2NvbXBpbGVfYXJncyA9IGV4dHJhX2NvbXBpbGVfYXJncywKLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGluY2x1ZGVfZGlyc8KgwqDCoMKgwqDCoMKgPSBbIFBBVEhfWEVOLCBQQVRIX0xJ QlhFTlRPT0xMT0cgKyAiL2luY2x1ZGUiLCBQQVRIX0xJQlhDICsgIi9pbmNsdWRlIiwgInhlbi9s b3dsZXZlbC94YyIgXSwKK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGluY2x1ZGVfZGly c8KgwqDCoMKgwqDCoMKgPSBbIFBBVEhfWEVOLAorwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFBBVEhfTElC WEVOVE9PTExPRyArICIvaW5jbHVkZSIsCivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgUEFUSF9MSUJYRU5F VlRDSE4gKyAiL2luY2x1ZGUiLAorwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFBBVEhfTElCWEMgKyAiL2lu Y2x1ZGUiLAorwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJ4ZW4vbG93bGV2ZWwveGMiIF0sCsKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGlicmFyeV9kaXJzwqDCoMKgwqDCoMKgwqA9IFsgUEFU SF9MSUJYQyBdLArCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxpYnJhcmllc8KgwqDC oMKgwqDCoMKgwqDCoMKgPSBbICJ4ZW5jdHJsIiwgInhlbmd1ZXN0IiBdLArCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGRlcGVuZHPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA9IFsgUEFU SF9MSUJYQyArICIvbGlieGVuY3RybC5zbyIsIFBBVEhfTElCWEMgKyAiL2xpYnhlbmd1ZXN0LnNv IiBdLApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdHMveGVuLWFjY2Vzcy9NYWtlZmlsZSBiL3Rvb2xz L3Rlc3RzL3hlbi1hY2Nlc3MvTWFrZWZpbGUKaW5kZXggZGQ3MGY5Zi4uMjVmZjQ2OSAxMDA2NDQK LS0tIGEvdG9vbHMvdGVzdHMveGVuLWFjY2Vzcy9NYWtlZmlsZQorKysgYi90b29scy90ZXN0cy94 ZW4tYWNjZXNzL01ha2VmaWxlCkBAIC01LDYgKzUsNyBAQCBDRkxBR1MgKz0gLVdlcnJvcgrCoArC oENGTEFHUyArPSAkKENGTEFHU19saWJ4ZW5jdHJsKQrCoENGTEFHUyArPSAkKENGTEFHU19saWJ4 ZW5ndWVzdCkKK0NGTEFHUyArPSAkKENGTEFHU19saWJ4ZW5ldnRjaG4pCsKgQ0ZMQUdTICs9ICQo Q0ZMQUdTX3hlbmluY2x1ZGUpCsKgCsKgVEFSR0VUUy15IDo9IHhlbi1hY2Nlc3MKQEAgLTI0LDYg KzI1LDYgQEAgY2xlYW46CsKgZGlzdGNsZWFuOiBjbGVhbgrCoArCoHhlbi1hY2Nlc3M6IHhlbi1h Y2Nlc3MubyBNYWtlZmlsZQotCSQoQ0MpIC1vICRAICQ8ICQoTERGTEFHUykgJChMRExJQlNfbGli eGVuY3RybCkgJChMRExJQlNfbGlieGVuZ3Vlc3QpCisJJChDQykgLW8gJEAgJDwgJChMREZMQUdT KSAkKExETElCU19saWJ4ZW5jdHJsKSAkKExETElCU19saWJ4ZW5ndWVzdCkgJChMRExJQlNfbGli eGVuZXZ0Y2huKQrCoArCoC1pbmNsdWRlICQoREVQUykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rz L3hlbi1hY2Nlc3MveGVuLWFjY2Vzcy5jIGIvdG9vbHMvdGVzdHMveGVuLWFjY2Vzcy94ZW4tYWNj ZXNzLmMKaW5kZXggYTUyY2E2ZS4uNzk5Mzk0NyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdHMveGVu LWFjY2Vzcy94ZW4tYWNjZXNzLmMKKysrIGIvdG9vbHMvdGVzdHMveGVuLWFjY2Vzcy94ZW4tYWNj ZXNzLmMKQEAgLTM5LDYgKzM5LDcgQEAKwqAjaW5jbHVkZSA8c3lzL3BvbGwuaD4KwqAKwqAjaW5j bHVkZSA8eGVuY3RybC5oPgorI2luY2x1ZGUgPHhlbmV2dGNobi5oPgrCoCNpbmNsdWRlIDx4ZW4v dm1fZXZlbnQuaD4KwqAKwqAjaWYgZGVmaW5lZChfX2FybV9fKSB8fCBkZWZpbmVkKF9fYWFyY2g2 NF9fKQpAQCAtNTQsNyArNTUsNyBAQArCoArCoHR5cGVkZWYgc3RydWN0IHZtX2V2ZW50IHsKwqDC oMKgwqDCoGRvbWlkX3QgZG9tYWluX2lkOwotwqDCoMKgwqB4Y19ldnRjaG4gKnhjZV9oYW5kbGU7 CivCoMKgwqDCoHhlbmV2dGNobl9oYW5kbGUgKnhjZV9oYW5kbGU7CsKgwqDCoMKgwqBpbnQgcG9y dDsKwqDCoMKgwqDCoHZtX2V2ZW50X2JhY2tfcmluZ190IGJhY2tfcmluZzsKwqDCoMKgwqDCoHVp bnQzMl90IGV2dGNobl9wb3J0OwpAQCAtNzcsOSArNzgsOSBAQCBzdGF0aWMgdm9pZCBjbG9zZV9o YW5kbGVyKGludCBzaWcpCsKgwqDCoMKgwqBpbnRlcnJ1cHRlZCA9IHNpZzsKwqB9CsKgCi1pbnQg eGNfd2FpdF9mb3JfZXZlbnRfb3JfdGltZW91dCh4Y19pbnRlcmZhY2UgKnhjaCwgeGNfZXZ0Y2hu ICp4Y2UsIHVuc2lnbmVkIGxvbmcgbXMpCitpbnQgeGNfd2FpdF9mb3JfZXZlbnRfb3JfdGltZW91 dCh4Y19pbnRlcmZhY2UgKnhjaCwgeGVuZXZ0Y2huX2hhbmRsZSAqeGNlLCB1bnNpZ25lZCBsb25n IG1zKQrCoHsKLcKgwqDCoMKgc3RydWN0IHBvbGxmZCBmZCA9IHsgLmZkID0geGNfZXZ0Y2huX2Zk KHhjZSksIC5ldmVudHMgPSBQT0xMSU4gfCBQT0xMRVJSIH07CivCoMKgwqDCoHN0cnVjdCBwb2xs ZmQgZmQgPSB7IC5mZCA9IHhlbmV2dGNobl9mZCh4Y2UpLCAuZXZlbnRzID0gUE9MTElOIHwgUE9M TEVSUiB9OwrCoMKgwqDCoMKgaW50IHBvcnQ7CsKgwqDCoMKgwqBpbnQgcmM7CsKgCkBAIC05NSwx NCArOTYsMTQgQEAgaW50IHhjX3dhaXRfZm9yX2V2ZW50X29yX3RpbWVvdXQoeGNfaW50ZXJmYWNl ICp4Y2gsIHhjX2V2dGNobiAqeGNlLCB1bnNpZ25lZCBsb24KwqAKwqDCoMKgwqDCoGlmICggcmMg PT0gMSApCsKgwqDCoMKgwqB7Ci3CoMKgwqDCoMKgwqDCoMKgcG9ydCA9IHhjX2V2dGNobl9wZW5k aW5nKHhjZSk7CivCoMKgwqDCoMKgwqDCoMKgcG9ydCA9IHhlbmV2dGNobl9wZW5kaW5nKHhjZSk7 CsKgwqDCoMKgwqDCoMKgwqDCoGlmICggcG9ydCA9PSAtMSApCsKgwqDCoMKgwqDCoMKgwqDCoHsK wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBFUlJPUigiRmFpbGVkIHRvIHJlYWQgcG9ydCBmcm9t IGV2ZW50IGNoYW5uZWwiKTsKwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIGVycjsKwqDC oMKgwqDCoMKgwqDCoMKgfQrCoAotwqDCoMKgwqDCoMKgwqDCoHJjID0geGNfZXZ0Y2huX3VubWFz ayh4Y2UsIHBvcnQpOworwqDCoMKgwqDCoMKgwqDCoHJjID0geGVuZXZ0Y2huX3VubWFzayh4Y2Us IHBvcnQpOwrCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIHJjICE9IDAgKQrCoMKgwqDCoMKgwqDCoMKg wqB7CsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRVJST1IoIkZhaWxlZCB0byB1bm1hc2sgZXZl bnQgY2hhbm5lbCBwb3J0Iik7CkBAIC0xNDMsNyArMTQ0LDcgQEAgaW50IHhlbmFjY2Vzc190ZWFy ZG93bih4Y19pbnRlcmZhY2UgKnhjaCwgeGVuYWNjZXNzX3QgKnhlbmFjY2VzcykKwqDCoMKgwqDC oC8qIFVuYmluZCBWSVJRICovCsKgwqDCoMKgwqBpZiAoIGV2dGNobl9iaW5kICkKwqDCoMKgwqDC oHsKLcKgwqDCoMKgwqDCoMKgwqByYyA9IHhjX2V2dGNobl91bmJpbmQoeGVuYWNjZXNzLT52bV9l dmVudC54Y2VfaGFuZGxlLAorwqDCoMKgwqDCoMKgwqDCoHJjID0geGVuZXZ0Y2huX3VuYmluZCh4 ZW5hY2Nlc3MtPnZtX2V2ZW50LnhjZV9oYW5kbGUsCsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGVuYWNjZXNzLT52bV9ldmVudC5w b3J0KTsKwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCByYyAhPSAwICkKwqDCoMKgwqDCoMKgwqDCoMKg ewpAQCAtMTU1LDcgKzE1Niw3IEBAIGludCB4ZW5hY2Nlc3NfdGVhcmRvd24oeGNfaW50ZXJmYWNl ICp4Y2gsIHhlbmFjY2Vzc190ICp4ZW5hY2Nlc3MpCsKgwqDCoMKgwqAvKiBDbG9zZSBldmVudCBj aGFubmVsICovCsKgwqDCoMKgwqBpZiAoIGV2dGNobl9vcGVuICkKwqDCoMKgwqDCoHsKLcKgwqDC oMKgwqDCoMKgwqByYyA9IHhjX2V2dGNobl9jbG9zZSh4ZW5hY2Nlc3MtPnZtX2V2ZW50LnhjZV9o YW5kbGUpOworwqDCoMKgwqDCoMKgwqDCoHJjID0geGVuZXZ0Y2huX2Nsb3NlKHhlbmFjY2Vzcy0+ dm1fZXZlbnQueGNlX2hhbmRsZSk7CsKgwqDCoMKgwqDCoMKgwqDCoGlmICggcmMgIT0gMCApCsKg wqDCoMKgwqDCoMKgwqDCoHsKwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBFUlJPUigiRXJyb3Ig Y2xvc2luZyBldmVudCBjaGFubmVsIik7CkBAIC0yMjMsNyArMjI0LDcgQEAgeGVuYWNjZXNzX3Qg KnhlbmFjY2Vzc19pbml0KHhjX2ludGVyZmFjZSAqKnhjaF9yLCBkb21pZF90IGRvbWFpbl9pZCkK wqDCoMKgwqDCoG1lbV9hY2Nlc3NfZW5hYmxlID0gMTsKwqAKwqDCoMKgwqDCoC8qIE9wZW4gZXZl bnQgY2hhbm5lbCAqLwotwqDCoMKgwqB4ZW5hY2Nlc3MtPnZtX2V2ZW50LnhjZV9oYW5kbGUgPSB4 Y19ldnRjaG5fb3BlbihOVUxMLCAwKTsKK8KgwqDCoMKgeGVuYWNjZXNzLT52bV9ldmVudC54Y2Vf aGFuZGxlID0geGVuZXZ0Y2huX29wZW4oTlVMTCwgMCk7CsKgwqDCoMKgwqBpZiAoIHhlbmFjY2Vz cy0+dm1fZXZlbnQueGNlX2hhbmRsZSA9PSBOVUxMICkKwqDCoMKgwqDCoHsKwqDCoMKgwqDCoMKg wqDCoMKgRVJST1IoIkZhaWxlZCB0byBvcGVuIGV2ZW50IGNoYW5uZWwiKTsKQEAgLTIzMiw3ICsy MzMsNyBAQCB4ZW5hY2Nlc3NfdCAqeGVuYWNjZXNzX2luaXQoeGNfaW50ZXJmYWNlICoqeGNoX3Is IGRvbWlkX3QgZG9tYWluX2lkKQrCoMKgwqDCoMKgZXZ0Y2huX29wZW4gPSAxOwrCoArCoMKgwqDC oMKgLyogQmluZCBldmVudCBub3RpZmljYXRpb24gKi8KLcKgwqDCoMKgcmMgPSB4Y19ldnRjaG5f YmluZF9pbnRlcmRvbWFpbih4ZW5hY2Nlc3MtPnZtX2V2ZW50LnhjZV9oYW5kbGUsCivCoMKgwqDC oHJjID0geGVuZXZ0Y2huX2JpbmRfaW50ZXJkb21haW4oeGVuYWNjZXNzLT52bV9ldmVudC54Y2Vf aGFuZGxlLArCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHhlbmFjY2Vzcy0+dm1fZXZlbnQuZG9tYWluX2lkLArC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHhlbmFjY2Vzcy0+dm1fZXZlbnQuZXZ0Y2huX3BvcnQpOwrCoMKgwqDC oMKgaWYgKCByYyA8IDAgKQpAQCAtNjc4LDcgKzY3OSw3IEBAIGludCBtYWluKGludCBhcmdjLCBj aGFyICphcmd2W10pCsKgwqDCoMKgwqDCoMKgwqDCoH0KwqAKwqDCoMKgwqDCoMKgwqDCoMKgLyog VGVsbCBYZW4gcGFnZSBpcyByZWFkeSAqLwotwqDCoMKgwqDCoMKgwqDCoHJjID0geGNfZXZ0Y2hu X25vdGlmeSh4ZW5hY2Nlc3MtPnZtX2V2ZW50LnhjZV9oYW5kbGUsCivCoMKgwqDCoMKgwqDCoMKg cmMgPSB4ZW5ldnRjaG5fbm90aWZ5KHhlbmFjY2Vzcy0+dm1fZXZlbnQueGNlX2hhbmRsZSwKwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqB4ZW5hY2Nlc3MtPnZtX2V2ZW50LnBvcnQpOwrCoArCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIHJj ICE9IDAgKQpkaWZmIC0tZ2l0IGEvdG9vbHMveGN1dGlscy9NYWtlZmlsZSBiL3Rvb2xzL3hjdXRp bHMvTWFrZWZpbGUKaW5kZXggZmZmNTE5ZC4uMmQxZjExMiAxMDA2NDQKLS0tIGEvdG9vbHMveGN1 dGlscy9NYWtlZmlsZQorKysgYi90b29scy94Y3V0aWxzL01ha2VmaWxlCkBAIC0xNiw4ICsxNiw4 IEBAIFBST0dSQU1TID0gcmVhZG5vdGVzIGxzZXZ0Y2huCsKgQ0ZMQUdTICs9IC1XZXJyb3IKwqAK wqAjIGluY29ycmVjdGx5IHVzZXMgbGlieGMgaW50ZXJuYWxzCi1DRkxBR1NfcmVhZG5vdGVzLm/C oMKgOj0gJChDRkxBR1NfbGlieGVuY3RybCkgJChDRkxBR1NfbGlieGVuZ3Vlc3QpIC1JJChYRU5f Uk9PVCkvdG9vbHMvbGlieGMKLUNGTEFHU19sc2V2dGNobi5vwqDCoMKgOj0gJChDRkxBR1NfbGli eGVuY3RybCkKK0NGTEFHU19yZWFkbm90ZXMub8KgwqA6PSAkKENGTEFHU19saWJ4ZW5ldnRjaG4p ICQoQ0ZMQUdTX2xpYnhlbmN0cmwpICQoQ0ZMQUdTX2xpYnhlbmd1ZXN0KSAtSSQoWEVOX1JPT1Qp L3Rvb2xzL2xpYnhjCitDRkxBR1NfbHNldnRjaG4ub8KgwqDCoDo9ICQoQ0ZMQUdTX2xpYnhlbmV2 dGNobikgJChDRkxBR1NfbGlieGVuY3RybCkKwqAKwqAuUEhPTlk6IGFsbArCoGFsbDogYnVpbGQK ZGlmZiAtLWdpdCBhL3Rvb2xzL3hlbm1vbi9NYWtlZmlsZSBiL3Rvb2xzL3hlbm1vbi9NYWtlZmls ZQppbmRleCAyMGVhMTAwLi45ODA1NmYyIDEwMDY0NAotLS0gYS90b29scy94ZW5tb24vTWFrZWZp bGUKKysrIGIvdG9vbHMveGVubW9uL01ha2VmaWxlCkBAIC0xNCw4ICsxNCwxMCBAQCBYRU5fUk9P VD0kKENVUkRJUikvLi4vLi4KwqBpbmNsdWRlICQoWEVOX1JPT1QpL3Rvb2xzL1J1bGVzLm1rCsKg CsKgQ0ZMQUdTwqDCoCs9IC1XZXJyb3IKK0NGTEFHU8KgwqArPSAkKENGTEFHU19saWJ4ZW5ldnRj aG4pCsKgQ0ZMQUdTwqDCoCs9ICQoQ0ZMQUdTX2xpYnhlbmN0cmwpCsKgTERMSUJTwqDCoCs9ICQo TERMSUJTX2xpYnhlbmN0cmwpCitMRExJQlPCoMKgKz0gJChMRExJQlNfbGlieGVuZXZ0Y2huKQrC oArCoFNDUklQVFMgPSB4ZW5tb24ucHkKwqAKZGlmZiAtLWdpdCBhL3Rvb2xzL3hlbm1vbi94ZW5i YWtlZC5jIGIvdG9vbHMveGVubW9uL3hlbmJha2VkLmMKaW5kZXggMWRkYjI5Yi4uZTQ2MDJlZiAx MDA2NDQKLS0tIGEvdG9vbHMveGVubW9uL3hlbmJha2VkLmMKKysrIGIvdG9vbHMveGVubW9uL3hl bmJha2VkLmMKQEAgLTM3LDYgKzM3LDcgQEAKwqAjaW5jbHVkZSA8dW5pc3RkLmg+CsKgI2luY2x1 ZGUgPGVycm5vLmg+CsKgI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHhlbmV2dGNobi5o PgrCoCNpbmNsdWRlIDx4ZW5jdHJsLmg+CsKgI2luY2x1ZGUgPHhlbi94ZW4uaD4KwqAjaW5jbHVk ZSA8c3RyaW5nLmg+CkBAIC0yNjcsNyArMjY4LDcgQEAgc3RhdGljIHZvaWQgbG9nX2V2ZW50KGlu dCBldmVudF9pZCkKwqB9CsKgCsKgaW50IHZpcnFfcG9ydDsKLXhjX2V2dGNobiAqeGNlX2hhbmRs ZSA9IE5VTEw7Cit4ZW5ldnRjaG5faGFuZGxlICp4Y2VfaGFuZGxlID0gTlVMTDsKwqAKwqAvKiBS ZXR1cm5zIHRoZSBldmVudCBjaGFubmVsIGhhbmRsZS4gKi8KwqAvKiBTdG9sZW4gZnJvbSB4ZW5z dG9yZSBjb2RlICovCkBAIC0yNzksMTIgKzI4MCwxMiBAQCBzdGF0aWMgaW50IGV2ZW50Y2huX2lu aXQodm9pZCkKwqDCoMKgwqDCoGlmICgwKQrCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLTE7CsKg wqDCoAotwqDCoMKgwqB4Y2VfaGFuZGxlID0geGNfZXZ0Y2huX29wZW4oTlVMTCwgMCk7CivCoMKg wqDCoHhjZV9oYW5kbGUgPSB4ZW5ldnRjaG5fb3BlbihOVUxMLCAwKTsKwqAKwqDCoMKgwqDCoGlm ICh4Y2VfaGFuZGxlID09IE5VTEwpCsKgwqDCoMKgwqDCoMKgwqDCoHBlcnJvcigiRmFpbGVkIHRv IG9wZW4gZXZ0Y2huIGRldmljZSIpOwrCoMKgwqAKLcKgwqDCoMKgaWYgKChyYyA9IHhjX2V2dGNo bl9iaW5kX3ZpcnEoeGNlX2hhbmRsZSwgVklSUV9UQlVGKSkgPT0gLTEpCivCoMKgwqDCoGlmICgo cmMgPSB4ZW5ldnRjaG5fYmluZF92aXJxKHhjZV9oYW5kbGUsIFZJUlFfVEJVRikpID09IC0xKQrC oMKgwqDCoMKgwqDCoMKgwqBwZXJyb3IoIkZhaWxlZCB0byBiaW5kIHRvIGRvbWFpbiBleGNlcHRp b24gdmlycSBwb3J0Iik7CsKgwqDCoMKgwqB2aXJxX3BvcnQgPSByYzsKwqDCoMKgCkBAIC0zMDQs NyArMzA1LDcgQEAgc3RhdGljIHZvaWQgd2FpdF9mb3JfZXZlbnQodm9pZCkKwqDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuOwrCoMKgwqDCoMKgfQrCoAotwqDCoMKgwqBldnRjaG5fZmQgPSB4Y19ldnRj aG5fZmQoeGNlX2hhbmRsZSk7CivCoMKgwqDCoGV2dGNobl9mZCA9IHhlbmV2dGNobl9mZCh4Y2Vf aGFuZGxlKTsKwqAKwqDCoMKgwqDCoEZEX1pFUk8oJmluc2V0KTsKwqDCoMKgwqDCoEZEX1NFVChl dnRjaG5fZmQsICZpbnNldCk7CkBAIC0zMTQsMTMgKzMxNSwxMyBAQCBzdGF0aWMgdm9pZCB3YWl0 X2Zvcl9ldmVudCh2b2lkKQrCoMKgwqDCoMKgcmV0ID0gc2VsZWN0KGV2dGNobl9mZCsxLCAmaW5z ZXQsIE5VTEwsIE5VTEwsICZ0dik7CsKgwqDCoArCoMKgwqDCoMKgaWYgKCAocmV0ID09IDEpICYm IEZEX0lTU0VUKGV2dGNobl9mZCwgJmluc2V0KSkgewotwqDCoMKgwqDCoMKgwqDCoGlmICgocG9y dCA9IHhjX2V2dGNobl9wZW5kaW5nKHhjZV9oYW5kbGUpKSA9PSAtMSkKK8KgwqDCoMKgwqDCoMKg wqBpZiAoKHBvcnQgPSB4ZW5ldnRjaG5fcGVuZGluZyh4Y2VfaGFuZGxlKSkgPT0gLTEpCsKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcGVycm9yKCJGYWlsZWQgdG8gcmVhZCBmcm9tIGV2ZW50IGZk Iik7CsKgwqDCoMKgwqAKwqDCoMKgwqDCoMKgwqDCoMKgLy/CoMKgwqDCoGlmIChwb3J0ID09IHZp cnFfcG9ydCkKwqDCoMKgwqDCoMKgwqDCoMKgLy/CoMKgwqDCoMKgwqBwcmludGYoImdvdCB0aGUg ZXZlbnQgSSB3YXMgbG9va2luZyBmb3JcclxuIik7CsKgCi3CoMKgwqDCoMKgwqDCoMKgaWYgKHhj X2V2dGNobl91bm1hc2soeGNlX2hhbmRsZSwgcG9ydCkgPT0gLTEpCivCoMKgwqDCoMKgwqDCoMKg aWYgKHhlbmV2dGNobl91bm1hc2soeGNlX2hhbmRsZSwgcG9ydCkgPT0gLTEpCsKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcGVycm9yKCJGYWlsZWQgdG8gd3JpdGUgdG8gZXZlbnQgZmQiKTsKwqDC oMKgwqDCoH0KwqB9CmRpZmYgLS1naXQgYS90b29scy94ZW5wYWdpbmcvTWFrZWZpbGUgYi90b29s cy94ZW5wYWdpbmcvTWFrZWZpbGUKaW5kZXggZTYzZDg5NC4uZDQ5MTg2NyAxMDA2NDQKLS0tIGEv dG9vbHMveGVucGFnaW5nL01ha2VmaWxlCisrKyBiL3Rvb2xzL3hlbnBhZ2luZy9NYWtlZmlsZQpA QCAtMiw4ICsyLDggQEAgWEVOX1JPT1Q9JChDVVJESVIpLy4uLy4uCsKgaW5jbHVkZSAkKFhFTl9S T09UKS90b29scy9SdWxlcy5tawrCoArCoCMgeGVucGFnaW5nLmMgYW5kIGZpbGVfb3BzLmMgaW5j b3JyZWN0bHkgdXNlIGxpYnhjIGludGVybmFscwotQ0ZMQUdTICs9ICQoQ0ZMQUdTX2xpYnhlbmN0 cmwpICQoQ0ZMQUdTX2xpYnhlbnN0b3JlKSAkKFBUSFJFQURfQ0ZMQUdTKSAtSSQoWEVOX1JPT1Qp L3Rvb2xzL2xpYnhjCi1MRExJQlMgKz0gJChMRExJQlNfbGlieGVudG9vbGxvZykgJChMRExJQlNf bGlieGVuY3RybCkgJChMRExJQlNfbGlieGVuc3RvcmUpICQoUFRIUkVBRF9MSUJTKQorQ0ZMQUdT ICs9ICQoQ0ZMQUdTX2xpYnhlbnRvb2xsb2cpICQoQ0ZMQUdTX2xpYnhlbmV2dGNobikgJChDRkxB R1NfbGlieGVuY3RybCkgJChDRkxBR1NfbGlieGVuc3RvcmUpICQoUFRIUkVBRF9DRkxBR1MpIC1J JChYRU5fUk9PVCkvdG9vbHMvbGlieGMKK0xETElCUyArPSAkKExETElCU19saWJ4ZW50b29sbG9n KSAkKExETElCU19saWJ4ZW5ldnRjaG4pICQoTERMSUJTX2xpYnhlbmN0cmwpICQoTERMSUJTX2xp YnhlbnN0b3JlKSAkKFBUSFJFQURfTElCUykKwqBMREZMQUdTICs9ICQoUFRIUkVBRF9MREZMQUdT KQrCoArCoFBPTElDWcKgwqDCoMKgPSBkZWZhdWx0CmRpZmYgLS1naXQgYS90b29scy94ZW5wYWdp bmcveGVucGFnaW5nLmMgYi90b29scy94ZW5wYWdpbmcveGVucGFnaW5nLmMKaW5kZXggYjVmZmVl Ni4uZGY5OWM2YSAxMDA2NDQKLS0tIGEvdG9vbHMveGVucGFnaW5nL3hlbnBhZ2luZy5jCisrKyBi L3Rvb2xzL3hlbnBhZ2luZy94ZW5wYWdpbmcuYwpAQCAtNzMsNyArNzMsNyBAQCBzdGF0aWMgdm9p ZCB4ZW5wYWdpbmdfbWVtX3BhZ2luZ19mbHVzaF9pb2VtdV9jYWNoZShzdHJ1Y3QgeGVucGFnaW5n ICpwYWdpbmcpCsKgc3RhdGljIGludCB4ZW5wYWdpbmdfd2FpdF9mb3JfZXZlbnRfb3JfdGltZW91 dChzdHJ1Y3QgeGVucGFnaW5nICpwYWdpbmcpCsKgewrCoMKgwqDCoMKgeGNfaW50ZXJmYWNlICp4 Y2ggPSBwYWdpbmctPnhjX2hhbmRsZTsKLcKgwqDCoMKgeGNfZXZ0Y2huICp4Y2UgPSBwYWdpbmct PnZtX2V2ZW50LnhjZV9oYW5kbGU7CivCoMKgwqDCoHhlbmV2dGNobl9oYW5kbGUgKnhjZSA9IHBh Z2luZy0+dm1fZXZlbnQueGNlX2hhbmRsZTsKwqDCoMKgwqDCoGNoYXIgKip2ZWMsICp2YWw7CsKg wqDCoMKgwqB1bnNpZ25lZCBpbnQgbnVtOwrCoMKgwqDCoMKgc3RydWN0IHBvbGxmZCBmZFsyXTsK QEAgLTgyLDcgKzgyLDcgQEAgc3RhdGljIGludCB4ZW5wYWdpbmdfd2FpdF9mb3JfZXZlbnRfb3Jf dGltZW91dChzdHJ1Y3QgeGVucGFnaW5nICpwYWdpbmcpCsKgwqDCoMKgwqBpbnQgdGltZW91dDsK wqAKwqDCoMKgwqDCoC8qIFdhaXQgZm9yIGV2ZW50IGNoYW5uZWwgYW5kIHhlbnN0b3JlICovCi3C oMKgwqDCoGZkWzBdLmZkID0geGNfZXZ0Y2huX2ZkKHhjZSk7CivCoMKgwqDCoGZkWzBdLmZkID0g eGVuZXZ0Y2huX2ZkKHhjZSk7CsKgwqDCoMKgwqBmZFswXS5ldmVudHMgPSBQT0xMSU4gfCBQT0xM RVJSOwrCoMKgwqDCoMKgZmRbMV0uZmQgPSB4c19maWxlbm8ocGFnaW5nLT54c19oYW5kbGUpOwrC oMKgwqDCoMKgZmRbMV0uZXZlbnRzID0gUE9MTElOIHwgUE9MTEVSUjsKQEAgLTE0Niw3ICsxNDYs NyBAQCBzdGF0aWMgaW50IHhlbnBhZ2luZ193YWl0X2Zvcl9ldmVudF9vcl90aW1lb3V0KHN0cnVj dCB4ZW5wYWdpbmcgKnBhZ2luZykKwqDCoMKgwqDCoGlmICggcmMgJiYgZmRbMF0ucmV2ZW50cyAm IFBPTExJTiApCsKgwqDCoMKgwqB7CsKgwqDCoMKgwqDCoMKgwqDCoERQUklOVEYoIkdvdCBldmVu dCBmcm9tIGV2dGNoblxuIik7Ci3CoMKgwqDCoMKgwqDCoMKgcG9ydCA9IHhjX2V2dGNobl9wZW5k aW5nKHhjZSk7CivCoMKgwqDCoMKgwqDCoMKgcG9ydCA9IHhlbmV2dGNobl9wZW5kaW5nKHhjZSk7 CsKgwqDCoMKgwqDCoMKgwqDCoGlmICggcG9ydCA9PSAtMSApCsKgwqDCoMKgwqDCoMKgwqDCoHsK wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBQRVJST1IoIkZhaWxlZCB0byByZWFkIHBvcnQgZnJv bSBldmVudCBjaGFubmVsIik7CkBAIC0xNTQsNyArMTU0LDcgQEAgc3RhdGljIGludCB4ZW5wYWdp bmdfd2FpdF9mb3JfZXZlbnRfb3JfdGltZW91dChzdHJ1Y3QgeGVucGFnaW5nICpwYWdpbmcpCsKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byBlcnI7CsKgwqDCoMKgwqDCoMKgwqDCoH0KwqAK LcKgwqDCoMKgwqDCoMKgwqByYyA9IHhjX2V2dGNobl91bm1hc2soeGNlLCBwb3J0KTsKK8KgwqDC oMKgwqDCoMKgwqByYyA9IHhlbmV2dGNobl91bm1hc2soeGNlLCBwb3J0KTsKwqDCoMKgwqDCoMKg wqDCoMKgaWYgKCByYyA8IDAgKQrCoMKgwqDCoMKgwqDCoMKgwqB7CsKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgUEVSUk9SKCJGYWlsZWQgdG8gdW5tYXNrIGV2ZW50IGNoYW5uZWwgcG9ydCIpOwpA QCAtMzkzLDcgKzM5Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgeGVucGFnaW5nICp4ZW5wYWdpbmdfaW5p dChpbnQgYXJnYywgY2hhciAqYXJndltdKQrCoMKgwqDCoMKgfQrCoArCoMKgwqDCoMKgLyogT3Bl biBldmVudCBjaGFubmVsICovCi3CoMKgwqDCoHBhZ2luZy0+dm1fZXZlbnQueGNlX2hhbmRsZSA9 IHhjX2V2dGNobl9vcGVuKE5VTEwsIDApOworwqDCoMKgwqBwYWdpbmctPnZtX2V2ZW50LnhjZV9o YW5kbGUgPSB4ZW5ldnRjaG5fb3BlbihOVUxMLCAwKTsKwqDCoMKgwqDCoGlmICggcGFnaW5nLT52 bV9ldmVudC54Y2VfaGFuZGxlID09IE5VTEwgKQrCoMKgwqDCoMKgewrCoMKgwqDCoMKgwqDCoMKg wqBQRVJST1IoIkZhaWxlZCB0byBvcGVuIGV2ZW50IGNoYW5uZWwiKTsKQEAgLTQwMSw3ICs0MDEs NyBAQCBzdGF0aWMgc3RydWN0IHhlbnBhZ2luZyAqeGVucGFnaW5nX2luaXQoaW50IGFyZ2MsIGNo YXIgKmFyZ3ZbXSkKwqDCoMKgwqDCoH0KwqAKwqDCoMKgwqDCoC8qIEJpbmQgZXZlbnQgbm90aWZp Y2F0aW9uICovCi3CoMKgwqDCoHJjID0geGNfZXZ0Y2huX2JpbmRfaW50ZXJkb21haW4ocGFnaW5n LT52bV9ldmVudC54Y2VfaGFuZGxlLAorwqDCoMKgwqByYyA9IHhlbmV2dGNobl9iaW5kX2ludGVy ZG9tYWluKHBhZ2luZy0+dm1fZXZlbnQueGNlX2hhbmRsZSwKwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwYWdp bmctPnZtX2V2ZW50LmRvbWFpbl9pZCwKwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwYWdpbmctPnZtX2V2ZW50 LmV2dGNobl9wb3J0KTsKwqDCoMKgwqDCoGlmICggcmMgPCAwICkKQEAgLTUzMSw3ICs1MzEsNyBA QCBzdGF0aWMgdm9pZCB4ZW5wYWdpbmdfdGVhcmRvd24oc3RydWN0IHhlbnBhZ2luZyAqcGFnaW5n KQrCoMKgwqDCoMKgfQrCoArCoMKgwqDCoMKgLyogVW5iaW5kIFZJUlEgKi8KLcKgwqDCoMKgcmMg PSB4Y19ldnRjaG5fdW5iaW5kKHBhZ2luZy0+dm1fZXZlbnQueGNlX2hhbmRsZSwgcGFnaW5nLT52 bV9ldmVudC5wb3J0KTsKK8KgwqDCoMKgcmMgPSB4ZW5ldnRjaG5fdW5iaW5kKHBhZ2luZy0+dm1f ZXZlbnQueGNlX2hhbmRsZSwgcGFnaW5nLT52bV9ldmVudC5wb3J0KTsKwqDCoMKgwqDCoGlmICgg cmMgIT0gMCApCsKgwqDCoMKgwqB7CsKgwqDCoMKgwqDCoMKgwqDCoFBFUlJPUigiRXJyb3IgdW5i aW5kaW5nIGV2ZW50IHBvcnQiKTsKQEAgLTUzOSw3ICs1MzksNyBAQCBzdGF0aWMgdm9pZCB4ZW5w YWdpbmdfdGVhcmRvd24oc3RydWN0IHhlbnBhZ2luZyAqcGFnaW5nKQrCoMKgwqDCoMKgcGFnaW5n LT52bV9ldmVudC5wb3J0ID0gLTE7CsKgCsKgwqDCoMKgwqAvKiBDbG9zZSBldmVudCBjaGFubmVs ICovCi3CoMKgwqDCoHJjID0geGNfZXZ0Y2huX2Nsb3NlKHBhZ2luZy0+dm1fZXZlbnQueGNlX2hh bmRsZSk7CivCoMKgwqDCoHJjID0geGVuZXZ0Y2huX2Nsb3NlKHBhZ2luZy0+dm1fZXZlbnQueGNl X2hhbmRsZSk7CsKgwqDCoMKgwqBpZiAoIHJjICE9IDAgKQrCoMKgwqDCoMKgewrCoMKgwqDCoMKg wqDCoMKgwqBQRVJST1IoIkVycm9yIGNsb3NpbmcgZXZlbnQgY2hhbm5lbCIpOwpAQCAtNjkyLDcg KzY5Miw3IEBAIHN0YXRpYyBpbnQgeGVucGFnaW5nX3Jlc3VtZV9wYWdlKHN0cnVjdCB4ZW5wYWdp bmcgKnBhZ2luZywgdm1fZXZlbnRfcmVzcG9uc2VfdCAqCsKgwqDCoMKgwqB9CsKgCsKgwqDCoMKg wqAvKiBUZWxsIFhlbiBwYWdlIGlzIHJlYWR5ICovCi3CoMKgwqDCoHJldHVybiB4Y19ldnRjaG5f bm90aWZ5KHBhZ2luZy0+dm1fZXZlbnQueGNlX2hhbmRsZSwgcGFnaW5nLT52bV9ldmVudC5wb3J0 KTsKK8KgwqDCoMKgcmV0dXJuIHhlbmV2dGNobl9ub3RpZnkocGFnaW5nLT52bV9ldmVudC54Y2Vf aGFuZGxlLCBwYWdpbmctPnZtX2V2ZW50LnBvcnQpOwrCoH0KwqAKwqBzdGF0aWMgaW50IHhlbnBh Z2luZ19wb3B1bGF0ZV9wYWdlKHN0cnVjdCB4ZW5wYWdpbmcgKnBhZ2luZywgdW5zaWduZWQgbG9u ZyBnZm4sIGludCBpKQpkaWZmIC0tZ2l0IGEvdG9vbHMveGVucGFnaW5nL3hlbnBhZ2luZy5oIGIv dG9vbHMveGVucGFnaW5nL3hlbnBhZ2luZy5oCmluZGV4IGM2YWI3N2MuLmQwZjhkMjAgMTAwNjQ0 Ci0tLSBhL3Rvb2xzL3hlbnBhZ2luZy94ZW5wYWdpbmcuaAorKysgYi90b29scy94ZW5wYWdpbmcv eGVucGFnaW5nLmgKQEAgLTI0LDYgKzI0LDcgQEAKwqAjZGVmaW5lIF9fWEVOX1BBR0lORzJfSF9f CsKgCsKgCisjaW5jbHVkZSA8eGVuZXZ0Y2huLmg+CsKgI2luY2x1ZGUgPHhjX3ByaXZhdGUuaD4K wqAjaW5jbHVkZSA8eGVuL2V2ZW50X2NoYW5uZWwuaD4KwqAjaW5jbHVkZSA8eGVuL3ZtX2V2ZW50 Lmg+CkBAIC0zMiw3ICszMyw3IEBACsKgCsKgc3RydWN0IHZtX2V2ZW50IHsKwqDCoMKgwqDCoGRv bWlkX3QgZG9tYWluX2lkOwotwqDCoMKgwqB4Y19ldnRjaG4gKnhjZV9oYW5kbGU7CivCoMKgwqDC oHhlbmV2dGNobl9oYW5kbGUgKnhjZV9oYW5kbGU7CsKgwqDCoMKgwqBpbnQgcG9ydDsKwqDCoMKg wqDCoHZtX2V2ZW50X2JhY2tfcmluZ190IGJhY2tfcmluZzsKwqDCoMKgwqDCoHVpbnQzMl90IGV2 dGNobl9wb3J0OwpkaWZmIC0tZ2l0IGEvdG9vbHMveGVuc3RvcmUvTWFrZWZpbGUgYi90b29scy94 ZW5zdG9yZS9NYWtlZmlsZQppbmRleCA0MDRkNGNiLi41OTcwZmRlIDEwMDY0NAotLS0gYS90b29s cy94ZW5zdG9yZS9NYWtlZmlsZQorKysgYi90b29scy94ZW5zdG9yZS9NYWtlZmlsZQpAQCAtOSw2 ICs5LDcgQEAgQ0ZMQUdTICs9IC1JLgrCoCMgSW5jbHVkZSBjb25maWd1cmUgb3V0cHV0IChjb25m aWcuaCkKwqBDRkxBR1MgKz0gLWluY2x1ZGUgJChYRU5fUk9PVCkvdG9vbHMvY29uZmlnLmgKwqBD RkxBR1MgKz0gLUkuL2luY2x1ZGUKK0NGTEFHUyArPSAkKENGTEFHU19saWJ4ZW5ldnRjaG4pCsKg Q0ZMQUdTICs9ICQoQ0ZMQUdTX2xpYnhlbmN0cmwpCsKgQ0ZMQUdTICs9IC1EWEVOX0xJQl9TVE9S RUQ9IlwiJChYRU5fTElCX1NUT1JFRClcIiIKwqAKQEAgLTY5LDcgKzcwLDcgQEAgQ0ZMQUdTICs9 IC1ESEFWRV9EVFJBQ0U9MQrCoGVuZGlmCsKgCsKgeGVuc3RvcmVkOiAkKFhFTlNUT1JFRF9PQkpT KQotCSQoQ0MpICReICQoTERGTEFHUykgJChMRExJQlNfbGlieGVuY3RybCkgJChTT0NLRVRfTElC UykgLW8gJEAgJChBUFBFTkRfTERGTEFHUykKKwkkKENDKSAkXiAkKExERkxBR1MpICQoTERMSUJT X2xpYnhlbmV2dGNobikgJChMRExJQlNfbGlieGVuY3RybCkgJChTT0NLRVRfTElCUykgLW8gJEAg JChBUFBFTkRfTERGTEFHUykKwqAKwqB4ZW5zdG9yZWQuYTogJChYRU5TVE9SRURfT0JKUykKwqAJ JChBUikgY3IgJEAgJF4KZGlmZiAtLWdpdCBhL3Rvb2xzL3hlbnN0b3JlL3hlbnN0b3JlZF9jb3Jl LmMgYi90b29scy94ZW5zdG9yZS94ZW5zdG9yZWRfY29yZS5jCmluZGV4IDNjMDMwN2UuLmY2MmMx OTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3hlbnN0b3JlL3hlbnN0b3JlZF9jb3JlLmMKKysrIGIvdG9v bHMveGVuc3RvcmUveGVuc3RvcmVkX2NvcmUuYwpAQCAtNDAsNiArNDAsOCBAQArCoCNpbmNsdWRl IDxhc3NlcnQuaD4KwqAjaW5jbHVkZSA8c2V0am1wLmg+CsKgCisjaW5jbHVkZSA8eGVuZXZ0Y2hu Lmg+CisKwqAjaW5jbHVkZSAidXRpbHMuaCIKwqAjaW5jbHVkZSAibGlzdC5oIgrCoCNpbmNsdWRl ICJ0YWxsb2MuaCIKQEAgLTYzLDcgKzY1LDcgQEAKwqAjaW5jbHVkZSA8c3lzdGVtZC9zZC1kYWVt b24uaD4KwqAjZW5kaWYKwqAKLWV4dGVybiB4Y19ldnRjaG4gKnhjZV9oYW5kbGU7IC8qIGluIHhl bnN0b3JlZF9kb21haW4uYyAqLworZXh0ZXJuIHhlbmV2dGNobl9oYW5kbGUgKnhjZV9oYW5kbGU7 IC8qIGluIHhlbnN0b3JlZF9kb21haW4uYyAqLwrCoHN0YXRpYyBpbnQgeGNlX3BvbGxmZF9pZHgg PSAtMTsKwqBzdGF0aWMgc3RydWN0IHBvbGxmZCAqZmRzOwrCoHN0YXRpYyB1bnNpZ25lZCBpbnQg Y3VycmVudF9hcnJheV9zaXplOwpAQCAtMzcyLDcgKzM3NCw3IEBAIHN0YXRpYyB2b2lkIGluaXRp YWxpemVfZmRzKGludCBzb2NrLCBpbnQgKnBfc29ja19wb2xsZmRfaWR4LArCoAkJCXNldF9mZChy ZW9wZW5fbG9nX3BpcGVbMF0sIFBPTExJTnxQT0xMUFJJKTsKwqAKwqAJaWYgKHhjZV9oYW5kbGUg IT0gTlVMTCkKLQkJeGNlX3BvbGxmZF9pZHggPSBzZXRfZmQoeGNfZXZ0Y2huX2ZkKHhjZV9oYW5k bGUpLAorCQl4Y2VfcG9sbGZkX2lkeCA9IHNldF9mZCh4ZW5ldnRjaG5fZmQoeGNlX2hhbmRsZSks CsKgCQkJCQlQT0xMSU58UE9MTFBSSSk7CsKgCsKgCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubiwg JmNvbm5lY3Rpb25zLCBsaXN0KSB7CmRpZmYgLS1naXQgYS90b29scy94ZW5zdG9yZS94ZW5zdG9y ZWRfZG9tYWluLmMgYi90b29scy94ZW5zdG9yZS94ZW5zdG9yZWRfZG9tYWluLmMKaW5kZXggZGNk NjU4MS4uNmNlZWMyOSAxMDA2NDQKLS0tIGEvdG9vbHMveGVuc3RvcmUveGVuc3RvcmVkX2RvbWFp bi5jCisrKyBiL3Rvb2xzL3hlbnN0b3JlL3hlbnN0b3JlZF9kb21haW4uYwpAQCAtMjksNiArMjks NyBAQArCoCNpbmNsdWRlICJ4ZW5zdG9yZWRfdHJhbnNhY3Rpb24uaCIKwqAjaW5jbHVkZSAieGVu c3RvcmVkX3dhdGNoLmgiCsKgCisjaW5jbHVkZSA8eGVuZXZ0Y2huLmg+CsKgI2luY2x1ZGUgPHhl bmN0cmwuaD4KwqAjaW5jbHVkZSA8eGVuL2dyYW50X3RhYmxlLmg+CsKgCkBAIC0zNiw3ICszNyw3 IEBAIHN0YXRpYyB4Y19pbnRlcmZhY2UgKip4Y19oYW5kbGU7CsKgeGNfZ250dGFiICoqeGNnX2hh bmRsZTsKwqBzdGF0aWMgZXZ0Y2huX3BvcnRfdCB2aXJxX3BvcnQ7CsKgCi14Y19ldnRjaG4gKnhj ZV9oYW5kbGUgPSBOVUxMOworeGVuZXZ0Y2huX2hhbmRsZSAqeGNlX2hhbmRsZSA9IE5VTEw7CsKg CsKgc3RydWN0IGRvbWFpbgrCoHsKQEAgLTEyOCw3ICsxMjksNyBAQCBzdGF0aWMgaW50IHdyaXRl Y2huKHN0cnVjdCBjb25uZWN0aW9uICpjb25uLArCoAl4ZW5fbWIoKTsKwqAJaW50Zi0+cnNwX3By b2QgKz0gbGVuOwrCoAotCXhjX2V2dGNobl9ub3RpZnkoeGNlX2hhbmRsZSwgY29ubi0+ZG9tYWlu LT5wb3J0KTsKKwl4ZW5ldnRjaG5fbm90aWZ5KHhjZV9oYW5kbGUsIGNvbm4tPmRvbWFpbi0+cG9y dCk7CsKgCsKgCXJldHVybiBsZW47CsKgfQpAQCAtMTU4LDcgKzE1OSw3IEBAIHN0YXRpYyBpbnQg cmVhZGNobihzdHJ1Y3QgY29ubmVjdGlvbiAqY29ubiwgdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50 IGxlbikKwqAJeGVuX21iKCk7CsKgCWludGYtPnJlcV9jb25zICs9IGxlbjsKwqAKLQl4Y19ldnRj aG5fbm90aWZ5KHhjZV9oYW5kbGUsIGNvbm4tPmRvbWFpbi0+cG9ydCk7CisJeGVuZXZ0Y2huX25v dGlmeSh4Y2VfaGFuZGxlLCBjb25uLT5kb21haW4tPnBvcnQpOwrCoArCoAlyZXR1cm4gbGVuOwrC oH0KQEAgLTE5MCw3ICsxOTEsNyBAQCBzdGF0aWMgaW50IGRlc3Ryb3lfZG9tYWluKHZvaWQgKl9k b21haW4pCsKgCWxpc3RfZGVsKCZkb21haW4tPmxpc3QpOwrCoArCoAlpZiAoZG9tYWluLT5wb3J0 KSB7Ci0JCWlmICh4Y19ldnRjaG5fdW5iaW5kKHhjZV9oYW5kbGUsIGRvbWFpbi0+cG9ydCkgPT0g LTEpCisJCWlmICh4ZW5ldnRjaG5fdW5iaW5kKHhjZV9oYW5kbGUsIGRvbWFpbi0+cG9ydCkgPT0g LTEpCsKgCQkJZXByaW50ZigiPiBVbmJpbmRpbmcgcG9ydCAlaSBmYWlsZWQhXG4iLCBkb21haW4t PnBvcnQpOwrCoAl9CsKgCkBAIC0yMzksMTMgKzI0MCwxMyBAQCB2b2lkIGhhbmRsZV9ldmVudCh2 b2lkKQrCoHsKwqAJZXZ0Y2huX3BvcnRfdCBwb3J0OwrCoAotCWlmICgocG9ydCA9IHhjX2V2dGNo bl9wZW5kaW5nKHhjZV9oYW5kbGUpKSA9PSAtMSkKKwlpZiAoKHBvcnQgPSB4ZW5ldnRjaG5fcGVu ZGluZyh4Y2VfaGFuZGxlKSkgPT0gLTEpCsKgCQliYXJmX3BlcnJvcigiRmFpbGVkIHRvIHJlYWQg ZnJvbSBldmVudCBmZCIpOwrCoArCoAlpZiAocG9ydCA9PSB2aXJxX3BvcnQpCsKgCQlkb21haW5f Y2xlYW51cCgpOwrCoAotCWlmICh4Y19ldnRjaG5fdW5tYXNrKHhjZV9oYW5kbGUsIHBvcnQpID09 IC0xKQorCWlmICh4ZW5ldnRjaG5fdW5tYXNrKHhjZV9oYW5kbGUsIHBvcnQpID09IC0xKQrCoAkJ YmFyZl9wZXJyb3IoIkZhaWxlZCB0byB3cml0ZSB0byBldmVudCBmZCIpOwrCoH0KwqAKQEAgLTI4 Nyw3ICsyODgsNyBAQCBzdGF0aWMgc3RydWN0IGRvbWFpbiAqbmV3X2RvbWFpbih2b2lkICpjb250 ZXh0LCB1bnNpZ25lZCBpbnQgZG9taWQsCsKgCXRhbGxvY19zZXRfZGVzdHJ1Y3Rvcihkb21haW4s IGRlc3Ryb3lfZG9tYWluKTsKwqAKwqAJLyogVGVsbCBrZXJuZWwgd2UncmUgaW50ZXJlc3RlZCBp biB0aGlzIGV2ZW50LiAqLwotCXJjID0geGNfZXZ0Y2huX2JpbmRfaW50ZXJkb21haW4oeGNlX2hh bmRsZSwgZG9taWQsIHBvcnQpOworCXJjID0geGVuZXZ0Y2huX2JpbmRfaW50ZXJkb21haW4oeGNl X2hhbmRsZSwgZG9taWQsIHBvcnQpOwrCoAlpZiAocmMgPT0gLTEpCsKgCcKgwqDCoMKgcmV0dXJu IE5VTEw7CsKgCWRvbWFpbi0+cG9ydCA9IHJjOwpAQCAtMzkyLDggKzM5Myw4IEBAIHZvaWQgZG9f aW50cm9kdWNlKHN0cnVjdCBjb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgYnVmZmVyZWRfZGF0YSAq aW4pCsKgCX0gZWxzZSBpZiAoKGRvbWFpbi0+bWZuID09IG1mbikgJiYgKGRvbWFpbi0+Y29ubiAh PSBjb25uKSkgewrCoAkJLyogVXNlIFhTX0lOVFJPRFVDRSBmb3IgcmVjcmVhdGluZyB0aGUgeGVu YnVzIGV2ZW50LWNoYW5uZWwuICovCsKgCQlpZiAoZG9tYWluLT5wb3J0KQotCQkJeGNfZXZ0Y2hu X3VuYmluZCh4Y2VfaGFuZGxlLCBkb21haW4tPnBvcnQpOwotCQlyYyA9IHhjX2V2dGNobl9iaW5k X2ludGVyZG9tYWluKHhjZV9oYW5kbGUsIGRvbWlkLCBwb3J0KTsKKwkJCXhlbmV2dGNobl91bmJp bmQoeGNlX2hhbmRsZSwgZG9tYWluLT5wb3J0KTsKKwkJcmMgPSB4ZW5ldnRjaG5fYmluZF9pbnRl cmRvbWFpbih4Y2VfaGFuZGxlLCBkb21pZCwgcG9ydCk7CsKgCQlkb21haW4tPnBvcnQgPSAocmMg PT0gLTEpID8gMCA6IHJjOwrCoAkJZG9tYWluLT5yZW1vdGVfcG9ydCA9IHBvcnQ7CsKgCX0gZWxz ZSB7CkBAIC02MTQsNyArNjE1LDcgQEAgc3RhdGljIGludCBkb20wX2luaXQodm9pZCkKwqAKwqAJ dGFsbG9jX3N0ZWFsKGRvbTAtPmNvbm4sIGRvbTApOyAKwqAKLQl4Y19ldnRjaG5fbm90aWZ5KHhj ZV9oYW5kbGUsIGRvbTAtPnBvcnQpOyAKKwl4ZW5ldnRjaG5fbm90aWZ5KHhjZV9oYW5kbGUsIGRv bTAtPnBvcnQpOyAKwqAKwqAJcmV0dXJuIDA7IArCoH0KQEAgLTY0Myw3ICs2NDQsNyBAQCB2b2lk IGRvbWFpbl9pbml0KHZvaWQpCsKgCWVsc2UKwqAJCXRhbGxvY19zZXRfZGVzdHJ1Y3Rvcih4Y2df aGFuZGxlLCBjbG9zZV94Y2dfaGFuZGxlKTsKwqAKLQl4Y2VfaGFuZGxlID0geGNfZXZ0Y2huX29w ZW4oTlVMTCwgMCk7CisJeGNlX2hhbmRsZSA9IHhlbmV2dGNobl9vcGVuKE5VTEwsIDApOwrCoArC oAlpZiAoeGNlX2hhbmRsZSA9PSBOVUxMKQrCoAkJYmFyZl9wZXJyb3IoIkZhaWxlZCB0byBvcGVu IGV2dGNobiBkZXZpY2UiKTsKQEAgLTY1MSw3ICs2NTIsNyBAQCB2b2lkIGRvbWFpbl9pbml0KHZv aWQpCsKgCWlmIChkb20wX2luaXQoKSAhPSAwKSAKwqAJCWJhcmZfcGVycm9yKCJGYWlsZWQgdG8g aW5pdGlhbGl6ZSBkb20wIHN0YXRlIik7IArCoAotCWlmICgocmMgPSB4Y19ldnRjaG5fYmluZF92 aXJxKHhjZV9oYW5kbGUsIFZJUlFfRE9NX0VYQykpID09IC0xKQorCWlmICgocmMgPSB4ZW5ldnRj aG5fYmluZF92aXJxKHhjZV9oYW5kbGUsIFZJUlFfRE9NX0VYQykpID09IC0xKQrCoAkJYmFyZl9w ZXJyb3IoIkZhaWxlZCB0byBiaW5kIHRvIGRvbWFpbiBleGNlcHRpb24gdmlycSBwb3J0Iik7CsKg CXZpcnFfcG9ydCA9IHJjOwrCoH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3hlbnRyYWNlL01ha2VmaWxl IGIvdG9vbHMveGVudHJhY2UvTWFrZWZpbGUKaW5kZXggNmMxM2NkMS4uMDE1N2JlMiAxMDA2NDQK LS0tIGEvdG9vbHMveGVudHJhY2UvTWFrZWZpbGUKKysrIGIvdG9vbHMveGVudHJhY2UvTWFrZWZp bGUKQEAgLTMsOCArMywxMSBAQCBpbmNsdWRlICQoWEVOX1JPT1QpL3Rvb2xzL1J1bGVzLm1rCsKg CsKgQ0ZMQUdTICs9IC1XZXJyb3IKwqAKK0NGTEFHUyArPSAkKENGTEFHU19saWJ4ZW5ldnRjaG4p CsKgQ0ZMQUdTICs9ICQoQ0ZMQUdTX2xpYnhlbmN0cmwpCi1MRExJQlMgKz0gJChMRExJQlNfbGli eGVuY3RybCkgJChBUkdQX0xERkxBR1MpCitMRExJQlMgKz0gJChMRExJQlNfbGlieGVuZXZ0Y2hu KQorTERMSUJTICs9ICQoTERMSUJTX2xpYnhlbmN0cmwpCitMRExJQlMgKz0gJChBUkdQX0xERkxB R1MpCsKgCsKgQklOLSQoQ09ORklHX1g4NikgPSB4ZW5hbHl6ZQrCoEJJTsKgwqDCoMKgwqDCoD0g JChCSU4teSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3hlbnRyYWNlL3hlbnRyYWNlLmMgYi90b29scy94 ZW50cmFjZS94ZW50cmFjZS5jCmluZGV4IDRlZTE0NTguLmM5NzBkNDIgMTAwNjQ0Ci0tLSBhL3Rv b2xzL3hlbnRyYWNlL3hlbnRyYWNlLmMKKysrIGIvdG9vbHMveGVudHJhY2UveGVudHJhY2UuYwpA QCAtMzAsNiArMzAsNyBAQArCoCNpbmNsdWRlIDx4ZW4veGVuLmg+CsKgI2luY2x1ZGUgPHhlbi90 cmFjZS5oPgrCoAorI2luY2x1ZGUgPHhlbmV2dGNobi5oPgrCoCNpbmNsdWRlIDx4ZW5jdHJsLmg+ CsKgCsKgI2RlZmluZSBQRVJST1IoX20sIF9hLi4uKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwKQEAg LTc0LDcgKzc1LDcgQEAgc2V0dGluZ3NfdCBvcHRzOwrCoGludCBpbnRlcnJ1cHRlZCA9IDA7IC8q IGdldHMgc2V0IGlmIHdlIGdldCBhIFNJR0hVUCAqLwrCoArCoHN0YXRpYyB4Y19pbnRlcmZhY2Ug KnhjX2hhbmRsZTsKLXN0YXRpYyB4Y19ldnRjaG4gKnhjZV9oYW5kbGUgPSBOVUxMOworc3RhdGlj IHhlbmV2dGNobl9oYW5kbGUgKnhjZV9oYW5kbGUgPSBOVUxMOwrCoHN0YXRpYyBpbnQgdmlycV9w b3J0ID0gLTE7CsKgc3RhdGljIGludCBvdXRmZCA9IDE7CsKgCkBAIC02MDIsMTMgKzYwMywxMyBA QCBzdGF0aWMgdm9pZCBldmVudF9pbml0KHZvaWQpCsKgewrCoMKgwqDCoMKgaW50IHJjOwrCoAot wqDCoMKgwqB4Y2VfaGFuZGxlID0geGNfZXZ0Y2huX29wZW4oTlVMTCwgMCk7CivCoMKgwqDCoHhj ZV9oYW5kbGUgPSB4ZW5ldnRjaG5fb3BlbihOVUxMLCAwKTsKwqDCoMKgwqDCoGlmICh4Y2VfaGFu ZGxlID09IE5VTEwpIHsKwqDCoMKgwqDCoMKgwqDCoMKgcGVycm9yKCJldmVudCBjaGFubmVsIG9w ZW4iKTsKwqDCoMKgwqDCoMKgwqDCoMKgZXhpdChFWElUX0ZBSUxVUkUpOwrCoMKgwqDCoMKgfQrC oAotwqDCoMKgwqByYyA9IHhjX2V2dGNobl9iaW5kX3ZpcnEoeGNlX2hhbmRsZSwgVklSUV9UQlVG KTsKK8KgwqDCoMKgcmMgPSB4ZW5ldnRjaG5fYmluZF92aXJxKHhjZV9oYW5kbGUsIFZJUlFfVEJV Rik7CsKgwqDCoMKgwqBpZiAocmMgPT0gLTEpIHsKwqDCoMKgwqDCoMKgwqDCoMKgUEVSUk9SKCJm YWlsZWQgdG8gYmluZCB0byBWSVJRIHBvcnQiKTsKwqDCoMKgwqDCoMKgwqDCoMKgZXhpdChFWElU X0ZBSUxVUkUpOwpAQCAtNjIzLDcgKzYyNCw3IEBAIHN0YXRpYyB2b2lkIGV2ZW50X2luaXQodm9p ZCkKwqBzdGF0aWMgdm9pZCB3YWl0X2Zvcl9ldmVudF9vcl90aW1lb3V0KHVuc2lnbmVkIGxvbmcg bWlsbGlzZWNvbmRzKQrCoHsKwqDCoMKgwqDCoGludCByYzsKLcKgwqDCoMKgc3RydWN0IHBvbGxm ZCBmZCA9IHsgLmZkID0geGNfZXZ0Y2huX2ZkKHhjZV9oYW5kbGUpLAorwqDCoMKgwqBzdHJ1Y3Qg cG9sbGZkIGZkID0geyAuZmQgPSB4ZW5ldnRjaG5fZmQoeGNlX2hhbmRsZSksCsKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAuZXZlbnRzID0gUE9MTElO IHwgUE9MTEVSUiB9OwrCoMKgwqDCoMKgaW50IHBvcnQ7CsKgCkBAIC02MzYsNyArNjM3LDcgQEAg c3RhdGljIHZvaWQgd2FpdF9mb3JfZXZlbnRfb3JfdGltZW91dCh1bnNpZ25lZCBsb25nIG1pbGxp c2Vjb25kcykKwqDCoMKgwqDCoH0KwqAKwqDCoMKgwqDCoGlmIChyYyA9PSAxKSB7Ci3CoMKgwqDC oMKgwqDCoMKgcG9ydCA9IHhjX2V2dGNobl9wZW5kaW5nKHhjZV9oYW5kbGUpOworwqDCoMKgwqDC oMKgwqDCoHBvcnQgPSB4ZW5ldnRjaG5fcGVuZGluZyh4Y2VfaGFuZGxlKTsKwqDCoMKgwqDCoMKg wqDCoMKgaWYgKHBvcnQgPT0gLTEpIHsKwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBQRVJST1Io ImZhaWxlZCB0byByZWFkIHBvcnQgZnJvbSBldnRjaG4iKTsKwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBleGl0KEVYSVRfRkFJTFVSRSk7CkBAIC02NDcsNyArNjQ4LDcgQEAgc3RhdGljIHZvaWQg d2FpdF9mb3JfZXZlbnRfb3JfdGltZW91dCh1bnNpZ25lZCBsb25nIG1pbGxpc2Vjb25kcykKwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcG9ydCwgdmlycV9wb3J0KTsK wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBleGl0KEVYSVRfRkFJTFVSRSk7CsKgwqDCoMKgwqDC oMKgwqDCoH0KLcKgwqDCoMKgwqDCoMKgwqByYyA9IHhjX2V2dGNobl91bm1hc2soeGNlX2hhbmRs ZSwgcG9ydCk7CivCoMKgwqDCoMKgwqDCoMKgcmMgPSB4ZW5ldnRjaG5fdW5tYXNrKHhjZV9oYW5k bGUsIHBvcnQpOwrCoMKgwqDCoMKgwqDCoMKgwqBpZiAocmMgPT0gLTEpIHsKwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBQRVJST1IoImZhaWxlZCB0byB3cml0ZSBwb3J0IHRvIGV2dGNobiIpOwrC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGV4aXQoRVhJVF9GQUlMVVJFKTsKLS0gCjIuMS40CgoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVs IG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9y Zy94ZW4tZGV2ZWwK