From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) (using TLSv1 with cipher CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id E8A921A1E10 for ; Mon, 17 Oct 2016 18:46:07 -0700 (PDT) Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga103.jf.intel.com with ESMTP; 17 Oct 2016 18:46:08 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.31,359,1473145200"; d="scan'208";a="773838381" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by FMSMGA003.fm.intel.com with ESMTP; 17 Oct 2016 18:46:05 -0700 Received: from shsmsx152.ccr.corp.intel.com (10.239.6.52) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.248.2; Mon, 17 Oct 2016 18:46:04 -0700 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.209]) by SHSMSX152.ccr.corp.intel.com ([169.254.6.2]) with mapi id 14.03.0248.002; Tue, 18 Oct 2016 09:45:59 +0800 From: "Ni, Ruiyu" To: Vladimir Olovyannikov , "Carsey, Jaben" , "edk2-devel@lists.01.org" Thread-Topic: [PATCH] GPT Shell Application/Library Thread-Index: AQHSJ22qh7QnFOzSAkuolXdskSURPaCtc0+g Date: Tue, 18 Oct 2016 01:45:59 +0000 Message-ID: <734D49CCEBEEF84792F5B80ED585239D58E36F4F@SHSMSX104.ccr.corp.intel.com> References: <1476595420-12566-1-git-send-email-vladimir.olovyannikov@broadcom.com> In-Reply-To: <1476595420-12566-1-git-send-email-vladimir.olovyannikov@broadcom.com> Accept-Language: en-US, zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH] GPT Shell Application/Library X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 18 Oct 2016 01:46:08 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SmFiZW4sDQpEbyB5b3UgdGhpbmsgdGhhdCBwcm92aWRpbmcgYSBzdGFuZGFsb25lIGdwdC5lZmkg aXMgYmV0dGVyPyBTbyB0aGF0IFNoZWxsLmVmaSBvbmx5IHByb3ZpZGVzIHRoZSBpbnRlcm5hbCBj b21tYW5kcyBsaXN0ZWQgaW4gU2hlbGwgc3BlYy4NCg0KVGhhbmtzL1JheQ0KDQo+IC0tLS0tT3Jp Z2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IFZsYWRpbWlyIE9sb3Z5YW5uaWtvdiBbbWFpbHRv OnZsYWRpbWlyLm9sb3Z5YW5uaWtvdkBicm9hZGNvbS5jb21dDQo+IFNlbnQ6IFN1bmRheSwgT2N0 b2JlciAxNiwgMjAxNiAxOjI0IFBNDQo+IFRvOiBDYXJzZXksIEphYmVuIDxqYWJlbi5jYXJzZXlA aW50ZWwuY29tPjsgZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc7IE5pLA0KPiBSdWl5dSA8cnVpeXUu bmlAaW50ZWwuY29tPg0KPiBDYzogVmxhZGltaXIgT2xvdnlhbm5pa292IDx2bGFkaW1pci5vbG92 eWFubmlrb3ZAYnJvYWRjb20uY29tPg0KPiBTdWJqZWN0OiBbUEFUQ0hdIEdQVCBTaGVsbCBBcHBs aWNhdGlvbi9MaWJyYXJ5DQo+IA0KPiBUaGlzIGFsbG93cyBtYW5hZ2luZyAoY3JlYXRlLCBkZWxl dGUsIG1vZGlmeSwgZmF0IGZvcm1hdCkgb2YgR1BUDQo+IHBhcnRpdGlvbnMgZnJvbSB3aXRoaW4g VUVGSSBTaGVsbC4NCj4gU3ludGF4Og0KPiBncHQgPGNvbW1hbmQ+IFtkZXZpY2VfbWFwcGVkX25h bWVdIFtwYXJhbWV0ZXJzLi4uXQ0KPiBTZWUgdXNhZ2UgZXhhbXBsZXMgaW4gdGhlIC51bmkgZmls ZQ0KPiAtLS0NCj4gIC4uLi9MaWJyYXJ5L1VlZmlTaGVsbEdwdENvbW1hbmRMaWIvRmF0Rm9ybWF0 LmMgICAgIHwgIDYxMSArKysrKysrDQo+ICAuLi4vTGlicmFyeS9VZWZpU2hlbGxHcHRDb21tYW5k TGliL0ZhdEZvcm1hdC5oICAgICB8ICAxMTEgKysNCj4gIC4uLi9MaWJyYXJ5L1VlZmlTaGVsbEdw dENvbW1hbmRMaWIvR3B0V29ya2VyLmMgICAgIHwgMTkwMg0KPiArKysrKysrKysrKysrKysrKysr Kw0KPiAgLi4uL0xpYnJhcnkvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi9HcHRXb3JrZXIuaCAgICAg fCAgMTg2ICsrDQo+ICAuLi4vVWVmaVNoZWxsR3B0Q29tbWFuZExpYi5jICAgICAgICAgICAgICAg ICAgICAgICB8IDExMzUgKysrKysrKysrKysrDQo+ICAuLi4vVWVmaVNoZWxsR3B0Q29tbWFuZExp Yi5pbmYgICAgICAgICAgICAgICAgICAgICB8ICAgNzkgKw0KPiAgLi4uL1VlZmlTaGVsbEdwdENv bW1hbmRMaWIudW5pICAgICAgICAgICAgICAgICAgICAgfCAgMTE3ICsrDQo+ICBTaGVsbFBrZy9T aGVsbFBrZy5kZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKw0KPiAgU2hl bGxQa2cvU2hlbGxQa2cuZHNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA0ICsN Cj4gIDkgZmlsZXMgY2hhbmdlZCwgNDE0NiBpbnNlcnRpb25zKCspDQo+ICBjcmVhdGUgbW9kZSAx MDA2NDQgU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxHcHRDb21tYW5kTGliL0ZhdEZvcm1hdC5j DQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4gU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxHcHRD b21tYW5kTGliL0ZhdEZvcm1hdC5oDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4gU2hlbGxQa2cv TGlicmFyeS9VZWZpU2hlbGxHcHRDb21tYW5kTGliL0dwdFdvcmtlci5jDQo+ICBjcmVhdGUgbW9k ZSAxMDA2NDQNCj4gU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxHcHRDb21tYW5kTGliL0dwdFdv cmtlci5oDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4gU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hl bGxHcHRDb21tYW5kTGliL1VlZmlTaGVsbEdwdENvbW1hbmRMaWIuYw0KPiAgY3JlYXRlIG1vZGUg MTAwNjQ0DQo+IFNoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi9VZWZpU2hl bGxHcHRDb21tYW5kTGliLmluZg0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+IFNoZWxsUGtnL0xp YnJhcnkvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi9VZWZpU2hlbGxHcHRDb21tYW5kTGliLnVuaQ0K PiANCj4gZGlmZiAtLWdpdCBhL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsR3B0Q29tbWFuZExp Yi9GYXRGb3JtYXQuYw0KPiBiL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsR3B0Q29tbWFuZExp Yi9GYXRGb3JtYXQuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAw MDAuLmJhNzkwNGU2YmUyOA0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL1NoZWxsUGtnL0xpYnJh cnkvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi9GYXRGb3JtYXQuYw0KPiBAQCAtMCwwICsxLDYxMSBA QA0KPiArLyoqIEBmaWxlDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAyMDAzIC0gMjAxMiwgUm9i IFJpZ2xhciwgVWx0cmEtRW1iZWRkZWQuY29tLiBBbGwgcmlnaHRzDQo+IHJlc2VydmVkPEJSPg0K PiArDQo+ICsgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4g KyAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNv bmRpdGlvbnMgb2YgdGhlIEJTRA0KPiBMaWNlbnNlDQo+ICsgIHdoaWNoIGFjY29tcGFuaWVzIHRo aXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUNCj4g Zm91bmQgYXQNCj4gKyAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNl LnBocA0KPiArDQo+ICsgIFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0Qg TElDRU5TRSBPTiBBTiAiQVMgSVMiDQo+IEJBU0lTLA0KPiArICBXSVRIT1VUIFdBUlJBTlRJRVMg T1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVINCj4gRVhQUkVTUyBPUiBJTVBM SUVELg0KPiArDQo+ICsqKi8NCj4gKw0KPiArLyogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDE2 LCBCcm9hZGNvbS4gQWxsIHJpZ2h0cyByZXNlcnZlZCAqLw0KPiArDQo+ICsjaW5jbHVkZSAiRmF0 Rm9ybWF0LmgiDQo+ICsNCj4gKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gKy8vIFRhYmxlcw0K PiArLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiArdHlwZWRlZiBzdHJ1Y3QNCj4gK3sNCj4gKyAg VUlOVDY0ICBTZWN0b3JzOw0KPiArICBVSU5UOCAgIFNlY3RvcnNQZXJDbHVzdGVyOw0KPiArfSBT ZWN0b3JzUGVyQ2x1c3RlclRhYmxlOw0KPiArDQo+ICtTVEFUSUMgU2VjdG9yc1BlckNsdXN0ZXJU YWJsZSBDbHVzdGVyU2l6ZVRhYmxlMTZbXSA9DQo+ICt7DQo+ICsgIHsgMzI2ODAsIDIgfSwgICAg IC8vIDE2TUIgLSAxSw0KPiArICB7IDI2MjE0NCwgNCB9LCAgICAvLyAxMjhNQiAtIDJLDQo+ICsg IHsgNTI0Mjg4LCA4IH0sICAgIC8vIDI1Nk1CIC0gNEsNCj4gKyAgeyAxMDQ4NTc2LCAxNiB9LCAg Ly8gNTEyTUIgLSA4Sw0KPiArICB7IDIwOTcxNTIsIDMyIH0sICAvLyAxR0IgLSAxNksNCj4gKyAg eyA0MTk0MzA0LCA2NCB9LCAgLy8gMkdCIC0gMzJLDQo+ICsgIHsgODM4ODYwOCwgMTI4IH0sIC8v IDJHQiAtIDY0SyBbV2FybmluZyBvbmx5IHN1cHBvcnRlZCBieSBXaW5kb3dzIFhQDQo+IG9ud2Fy ZHNdDQo+ICsgIHsgMCwgMCB9ICAgICAgICAgIC8vIEludmFsaWQNCj4gK307DQo+ICsNCj4gK1NU QVRJQyBTZWN0b3JzUGVyQ2x1c3RlclRhYmxlIENsdXN0ZXJTaXplVGFibGUzMltdID0NCj4gK3sN Cj4gKyAgeyA1MzI0ODAsIDEgfSwgICAgICAvLyAyNjBNQiAtIDUxMmINCj4gKyAgeyAxNjc3NzIx NiwgOCB9LCAgICAvLyA4R0IgLSA0Sw0KPiArICB7IDMzNTU0NDMyLCAxNiB9LCAgIC8vIDE2R0Ig LSA4Sw0KPiArICB7IDY3MTA4ODY0LCAzMiB9LCAgIC8vIDMyR0IgLSAxNksNCj4gKyAgeyAweEZG RkZGRkZGLCA2NCB9LCAvLyA+MzJHQiAtIDMySw0KPiArICB7IDAsIDAgfSAgICAgICAgICAgIC8v IEludmFsaWQNCj4gK307DQo+ICsNCj4gK1NUQVRJQw0KPiArRUZJX0xCQSBMYmFPZkNsdXN0ZXIg KA0KPiArICBJTiBGQVRGUyAqRnMsDQo+ICsgIElOIFVJTlQ2NCBDbHVzdGVyTnVtYmVyDQo+ICsg ICkNCj4gK3sNCj4gKyAgaWYgKEZzLT5GYXRUeXBlID09IEZBVF9UWVBFXzE2KQ0KPiArICAgIHJl dHVybiAoRnMtPkNsdXN0ZXJCZWdpbkxiYSArDQo+ICsgICAgICAoRnMtPlJvb3RFbnRyeUNvdW50 ICogMzIgLyBGQVRfU0VDVE9SX1NJWkUpICsNCj4gKyAgICAgICgoQ2x1c3Rlck51bWJlciAtIDIp ICogRnMtPlNlY3RvcnNQZXJDbHVzdGVyKSk7DQo+ICsgIGVsc2UNCj4gKyAgICByZXR1cm4gKChG cy0+Q2x1c3RlckJlZ2luTGJhICsNCj4gKyAgICAgICgoQ2x1c3Rlck51bWJlciAtIDIpICogRnMt PlNlY3RvcnNQZXJDbHVzdGVyKSkpOw0KPiArfQ0KPiArDQo+ICsvLy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQo+ICsvLyBmYXRmc19jYWxjX2NsdXN0ZXJfc2l6ZTogQ2FsY3VsYXRlIHdoYXQgY2x1c3Rl ciBzaXplIHNob3VsZCBiZSB1c2VkDQo+ICsvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ICtTVEFU SUMNCj4gK1VJTlQ4IENhbGNDbHVzdGVyU2l6ZSAoDQo+ICsgIElOIFVJTlROIFNlY3RvcnMsDQo+ ICsgIElOIEJPT0xFQU4gSXNGYXQzMikNCj4gK3sNCj4gKyAgVUlOVE4gSW5kZXg7DQo+ICsNCj4g KyAgaWYgKCFJc0ZhdDMyKSB7DQo+ICsgICAgZm9yIChJbmRleCA9IDA7IENsdXN0ZXJTaXplVGFi bGUxNltJbmRleF0uU2VjdG9yc1BlckNsdXN0ZXIgIT0gMDsgSW5kZXgrKykNCj4gKyAgICAgIGlm IChTZWN0b3JzIDw9IENsdXN0ZXJTaXplVGFibGUxNltJbmRleF0uU2VjdG9ycykNCj4gKyAgICAg ICAgcmV0dXJuIENsdXN0ZXJTaXplVGFibGUxNltJbmRleF0uU2VjdG9yc1BlckNsdXN0ZXI7DQo+ ICsgIH0gZWxzZSB7DQo+ICsgICAgZm9yIChJbmRleCA9IDA7IENsdXN0ZXJTaXplVGFibGUzMltJ bmRleF0uU2VjdG9yc1BlckNsdXN0ZXIgIT0gMDsgSW5kZXgrKykNCj4gKyAgICAgIGlmIChTZWN0 b3JzIDw9IENsdXN0ZXJTaXplVGFibGUzMltJbmRleF0uU2VjdG9ycykNCj4gKyAgICAgICAgcmV0 dXJuIENsdXN0ZXJTaXplVGFibGUzMltJbmRleF0uU2VjdG9yc1BlckNsdXN0ZXI7DQo+ICsgIH0N Cj4gKw0KPiArICByZXR1cm4gMDsNCj4gK30NCj4gKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4g Ky8vIGZhdGZzX2VyYXNlX3NlY3RvcnM6IEVyYXNlIGEgbnVtYmVyIG9mIHNlY3RvcnMNCj4gKy8v LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gK1NUQVRJQw0KPiArRUZJX1NUQVRVUw0KPiArRXJhc2VT ZWN0b3JzICgNCj4gKyAgSU4gRkFURlMgKkZzLA0KPiArICBJTiBFRklfTEJBIExiYSwNCj4gKyAg SU4gVUlOVE4gQ291bnQNCj4gKyAgKQ0KPiArew0KPiArICBVSU5UTiBJbmRleDsNCj4gKyAgRUZJ X1NUQVRVUyBTdGF0dXM7DQo+ICsNCj4gKyAgLy8gWmVybyBTZWN0b3IgZmlyc3QNCj4gKyAgWmVy b01lbSAoRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yLCBGQVRfU0VDVE9SX1NJWkUpOw0KPiArDQo+ ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IENvdW50OyBJbmRleCsrKQ0KPiArICAgIFN0YXR1 cyA9IEZzLT5EaXNrSW8tPldyaXRlRGlzayAoDQo+ICsgICAgICBGcy0+RGlza0lvLCBGcy0+Qmxv Y2tJby0+TWVkaWEtPk1lZGlhSWQsDQo+ICsgICAgICBNdWx0VTY0eDMyIChGcy0+U3RhcnRpbmdM QkEsIEZzLT5CbG9ja0lvLT5NZWRpYS0+QmxvY2tTaXplKSArDQo+ICsgICAgICBNdWx0VTY0eDMy ICgoTGJhICsgSW5kZXgpLCBGQVRfU0VDVE9SX1NJWkUpLA0KPiArICAgICAgRkFUX1NFQ1RPUl9T SVpFLCBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3IpOw0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7 DQo+ICt9DQo+ICsvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ICsvLyBmYXRmc19jcmVhdGVfYm9v dF9zZWN0b3I6IENyZWF0ZSB0aGUgYm9vdCBTZWN0b3INCj4gKy8vLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCj4gK1NUQVRJQw0KPiArRUZJX1NUQVRVUw0KPiArQ3JlYXRlQm9vdFNlY3RvciAoDQo+ICsg IElOIEZBVEZTICpGcywNCj4gKyAgSU4gRUZJX0xCQSBCb290U2VjdG9yTGJhLA0KPiArICBJTiBV SU5UNjQgVm9sU2VjdG9ycywNCj4gKyAgSU4gQ09OU1QgQ0hBUjggKk5hbWUsDQo+ICsgIElOIEJP T0xFQU4gSXNGYXQzMg0KPiArICApDQo+ICt7DQo+ICsgIFVJTlROIFRvdGFsQ2x1c3RlcnM7DQo+ ICsgIFVJTlROIEluZGV4Ow0KPiArICBFRklfU1RBVFVTIFN0YXR1czsNCj4gKw0KPiArICAvLyBa ZXJvIFNlY3RvciBpbml0aWFsbHkNCj4gKyAgWmVyb01lbSAoRnMtPkN1cnJlbnRTZWN0b3IuU2Vj dG9yLCBGQVRfU0VDVE9SX1NJWkUpOw0KPiArDQo+ICsgIC8vIE9FTSBOYW1lICYgSnVtcCBDb2Rl DQo+ICsgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvclswXSA9IDB4RUI7DQo+ICsgIEZzLT5DdXJy ZW50U2VjdG9yLlNlY3RvclsxXSA9IDB4M0M7DQo+ICsgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rv clsyXSA9IDB4OTA7DQo+ICsgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvclszXSA9IDB4NEQ7DQo+ ICsgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls0XSA9IDB4NTM7DQo+ICsgIEZzLT5DdXJyZW50 U2VjdG9yLlNlY3Rvcls1XSA9IDB4NDQ7DQo+ICsgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls2 XSA9IDB4NEY7DQo+ICsgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls3XSA9IDB4NTM7DQo+ICsg IEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls4XSA9IDB4MzU7DQo+ICsgIEZzLT5DdXJyZW50U2Vj dG9yLlNlY3Rvcls5XSA9IDB4MkU7DQo+ICsgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvclsxMF0g PSAweDMwOw0KPiArDQo+ICsgIC8vIEJ5dGVzIHBlciBTZWN0b3INCj4gKyAgRnMtPkN1cnJlbnRT ZWN0b3IuU2VjdG9yWzExXSA9IChGQVRfU0VDVE9SX1NJWkUgPj4gMCkgJiAweEZGOw0KPiArICBG cy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMTJdID0gKEZBVF9TRUNUT1JfU0laRSA+PiA4KSAmIDB4 RkY7DQo+ICsNCj4gKyAgLy8gR2V0IHNlY3RvcnMgcGVyIGNsdXN0ZXIgc2l6ZSBmb3IgdGhlIGRp c2sNCj4gKyAgRnMtPlNlY3RvcnNQZXJDbHVzdGVyID0gQ2FsY0NsdXN0ZXJTaXplIChWb2xTZWN0 b3JzLCBJc0ZhdDMyKTsNCj4gKyAgaWYgKCFGcy0+U2VjdG9yc1BlckNsdXN0ZXIpDQo+ICsgICAg cmV0dXJuIDA7IC8vIEludmFsaWQgZGlzayBzaXplDQo+ICsNCj4gKyAgLy8gU2VjdG9ycyBwZXIg Y2x1c3Rlcg0KPiArICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMTNdID0gRnMtPlNlY3RvcnNQ ZXJDbHVzdGVyOw0KPiArDQo+ICsgIC8vIFJlc2VydmVkIFNlY3RvcnMNCj4gKyAgaWYgKCFJc0Zh dDMyKQ0KPiArICAgIEZzLT5SZXNlcnZlZFNlY3RvcnMgPSA4Ow0KPiArICBlbHNlDQo+ICsgICAg RnMtPlJlc2VydmVkU2VjdG9ycyA9IDMyOw0KPiArICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3Jb MTRdID0gKEZzLT5SZXNlcnZlZFNlY3RvcnMgPj4gMCkgJiAweEZGOw0KPiArICBGcy0+Q3VycmVu dFNlY3Rvci5TZWN0b3JbMTVdID0gKEZzLT5SZXNlcnZlZFNlY3RvcnMgPj4gOCkgJiAweEZGOw0K PiArDQo+ICsgIC8vIE51bWJlciBvZiBGQVRTDQo+ICsgIEZzLT5OdW1PZkZhdHMgPSAyOw0KPiAr ICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMTZdID0gRnMtPk51bU9mRmF0czsNCj4gKw0KPiAr ICAvLyBNYXggZW50cmllcyBpbiByb290IGRpciAoRkFUMTYgb25seSkNCj4gKyAgaWYgKCFJc0Zh dDMyKSB7DQo+ICsgICAgRnMtPlJvb3RFbnRyeUNvdW50ID0gNTEyOw0KPiArICAgIEZzLT5DdXJy ZW50U2VjdG9yLlNlY3RvclsxN10gPSAoRnMtPlJvb3RFbnRyeUNvdW50ID4+IDApICYgMHhGRjsN Cj4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMThdID0gKEZzLT5Sb290RW50cnlDb3Vu dCA+PiA4KSAmIDB4RkY7DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgRnMtPlJvb3RFbnRyeUNvdW50 ID0gMDsNCj4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMTddID0gMDsNCj4gKyAgICBG cy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMThdID0gMDsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vIFtG QVQxNl0gVG90YWwgc2VjdG9ycyAodXNlIEZBVDMyIGNvdW50IGluc3RlYWQpDQo+ICsgIEZzLT5D dXJyZW50U2VjdG9yLlNlY3RvclsxOV0gPSAweDAwOw0KPiArICBGcy0+Q3VycmVudFNlY3Rvci5T ZWN0b3JbMjBdID0gMHgwMDsNCj4gKw0KPiArICAvLyBNZWRpYSB0eXBlDQo+ICsgIEZzLT5DdXJy ZW50U2VjdG9yLlNlY3RvclsyMV0gPSAweEY4Ow0KPiArDQo+ICsNCj4gKyAgLy8gRkFUMTYgQlMg RGV0YWlscw0KPiArICBpZiAoIUlzRmF0MzIpIHsNCj4gKyAgICAvLyBDb3VudCBvZiBzZWN0b3Jz IHVzZWQgYnkgdGhlIEZBVCB0YWJsZSAoRkFUMTYgb25seSkNCj4gKyAgICBUb3RhbENsdXN0ZXJz ID0gKFZvbFNlY3RvcnMgLyBGcy0+U2VjdG9yc1BlckNsdXN0ZXIpICsgMTsNCj4gKyAgICBGcy0+ RmF0U2VjdG9ycyA9IChUb3RhbENsdXN0ZXJzIC8gKEZBVF9TRUNUT1JfU0laRSAvIDIpKSArIDE7 DQo+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzIyXSA9IChVSU5UOCkoKEZzLT5GYXRT ZWN0b3JzID4+IDApICYgMHhGRik7DQo+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzIz XSA9IChVSU5UOCkoKEZzLT5GYXRTZWN0b3JzID4+IDgpICYgMHhGRik7DQo+ICsNCj4gKyAgICAv LyBTZWN0b3JzIHBlciB0cmFjaw0KPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvclsyNF0g PSAweDAwOw0KPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvclsyNV0gPSAweDAwOw0KPiAr DQo+ICsgICAgLy8gSGVhZHMNCj4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMjZdID0g MHgwMDsNCj4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMjddID0gMHgwMDsNCj4gKw0K PiArICAgIC8vIEhpZGRlbiBzZWN0b3JzDQo+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9y WzI4XSA9IDB4MjA7DQo+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzI5XSA9IDB4MDA7 DQo+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzMwXSA9IDB4MDA7DQo+ICsgICAgRnMt PkN1cnJlbnRTZWN0b3IuU2VjdG9yWzMxXSA9IDB4MDA7DQo+ICsNCj4gKyAgICAvLyBUb3RhbCBz ZWN0b3JzIGZvciB0aGlzIHZvbHVtZQ0KPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvclsz Ml0gPSAoVUlOVDgpKChWb2xTZWN0b3JzID4+IDApICYgMHhGRik7DQo+ICsgICAgRnMtPkN1cnJl bnRTZWN0b3IuU2VjdG9yWzMzXSA9IChVSU5UOCkoKFZvbFNlY3RvcnMgPj4gOCkgJiAweEZGKTsN Cj4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMzRdID0gKFVJTlQ4KSgoVm9sU2VjdG9y cyA+PiAxNikgJiAweEZGKTsNCj4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMzVdID0g KFVJTlQ4KSgoVm9sU2VjdG9ycyA+PiAyNCkgJiAweEZGKTsNCj4gKw0KPiArICAgIC8vIERyaXZl IG51bWJlcg0KPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvclszNl0gPSAweDAwOw0KPiAr DQo+ICsgICAgLy8gUmVzZXJ2ZWQNCj4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMzdd ID0gMHgwMDsNCj4gKw0KPiArICAgIC8vIEJvb3Qgc2lnbmF0dXJlDQo+ICsgICAgRnMtPkN1cnJl bnRTZWN0b3IuU2VjdG9yWzM4XSA9IDB4Mjk7DQo+ICsNCj4gKyAgICAvLyBWb2x1bWUgSUQNCj4g KyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbMzldID0gMHgxMjsNCj4gKyAgICBGcy0+Q3Vy cmVudFNlY3Rvci5TZWN0b3JbNDBdID0gMHgzNDsNCj4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5T ZWN0b3JbNDFdID0gMHg1NjsNCj4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbNDJdID0g MHg3ODsNCj4gKw0KPiArICAgIC8vIFZvbHVtZSBuYW1lDQo+ICsgICAgZm9yIChJbmRleCA9IDA7 IEluZGV4IDwgMTE7IEluZGV4KyspIHsNCj4gKyAgICAgIGlmIChJbmRleCA8IEFzY2lpU3RyTGVu IChOYW1lKSkNCj4gKyAgICAgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yW0luZGV4ICsgNDNd ID0gTmFtZVtJbmRleF07DQo+ICsgICAgICBlbHNlDQo+ICsgICAgICAgIEZzLT5DdXJyZW50U2Vj dG9yLlNlY3RvcltJbmRleCArIDQzXSA9ICcgJzsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICAvLyBG aWxlIHN5cyB0eXBlDQo+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzU0XSA9ICdGJzsN Cj4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbNTVdID0gJ0EnOw0KPiArICAgIEZzLT5D dXJyZW50U2VjdG9yLlNlY3Rvcls1Nl0gPSAnVCc7DQo+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3Iu U2VjdG9yWzU3XSA9ICcxJzsNCj4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbNThdID0g JzYnOw0KPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls1OV0gPSAnICc7DQo+ICsgICAg RnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzYwXSA9ICcgJzsNCj4gKyAgICBGcy0+Q3VycmVudFNl Y3Rvci5TZWN0b3JbNjFdID0gJyAnOw0KPiArDQo+ICsgICAgLy8gU2lnbmF0dXJlDQo+ICsgICAg RnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzUxMF0gPSAweDU1Ow0KPiArICAgIEZzLT5DdXJyZW50 U2VjdG9yLlNlY3Rvcls1MTFdID0gMHhBQTsNCj4gKyAgfQ0KPiArICAvLyBGQVQzMiBCUyBEZXRh aWxzDQo+ICsgIGVsc2Ugew0KPiArICAgIC8vIENvdW50IG9mIHNlY3RvcnMgdXNlZCBieSB0aGUg RkFUIHRhYmxlIChGQVQxNiBvbmx5KQ0KPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvclsy Ml0gPSAwOw0KPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvclsyM10gPSAwOw0KPiArDQo+ ICsgICAgLy8gU2VjdG9ycyBwZXIgdHJhY2sgKGRlZmF1bHQpDQo+ICsgICAgRnMtPkN1cnJlbnRT ZWN0b3IuU2VjdG9yWzI0XSA9IDB4M0Y7DQo+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9y WzI1XSA9IDB4MDA7DQo+ICsNCj4gKyAgICAvLyBIZWFkcyAoZGVmYXVsdCkNCj4gKyAgICBGcy0+ Q3VycmVudFNlY3Rvci5TZWN0b3JbMjZdID0gMHhGRjsNCj4gKyAgICBGcy0+Q3VycmVudFNlY3Rv ci5TZWN0b3JbMjddID0gMHgwMDsNCj4gKw0KPiArICAgIC8vIEhpZGRlbiBzZWN0b3JzDQo+ICsg ICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzI4XSA9IDB4MDA7DQo+ICsgICAgRnMtPkN1cnJl bnRTZWN0b3IuU2VjdG9yWzI5XSA9IDB4MDA7DQo+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2Vj dG9yWzMwXSA9IDB4MDA7DQo+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzMxXSA9IDB4 MDA7DQo+ICsNCj4gKyAgICAvLyBUb3RhbCBzZWN0b3JzIGZvciB0aGlzIHZvbHVtZQ0KPiArICAg IEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvclszMl0gPSAoVUlOVDgpKChWb2xTZWN0b3JzID4+IDAp ICYgMHhGRik7DQo+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzMzXSA9IChVSU5UOCko KFZvbFNlY3RvcnMgPj4gOCkgJiAweEZGKTsNCj4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0 b3JbMzRdID0gKFVJTlQ4KSgoVm9sU2VjdG9ycyA+PiAxNikgJiAweEZGKTsNCj4gKyAgICBGcy0+ Q3VycmVudFNlY3Rvci5TZWN0b3JbMzVdID0gKFVJTlQ4KSgoVm9sU2VjdG9ycyA+PiAyNCkgJiAw eEZGKTsNCj4gKw0KPiArICAgIFRvdGFsQ2x1c3RlcnMgPSAoVm9sU2VjdG9ycyAvIEZzLT5TZWN0 b3JzUGVyQ2x1c3RlcikgKyAxOw0KPiArICAgIEZzLT5GYXRTZWN0b3JzID0gKFRvdGFsQ2x1c3Rl cnMgLyAoRkFUX1NFQ1RPUl9TSVpFIC8gNCkpICsgMTsNCj4gKw0KPiArICAgIC8vIEJQQl9GQVRT ejMyDQo+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzM2XSA9IChVSU5UOCkoKEZzLT5G YXRTZWN0b3JzID4+IDApICYgMHhGRik7DQo+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9y WzM3XSA9IChVSU5UOCkoKEZzLT5GYXRTZWN0b3JzID4+IDgpICYgMHhGRik7DQo+ICsgICAgRnMt PkN1cnJlbnRTZWN0b3IuU2VjdG9yWzM4XSA9IChVSU5UOCkoKEZzLT5GYXRTZWN0b3JzID4+IDE2 KSAmIDB4RkYpOw0KPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvclszOV0gPSAoVUlOVDgp KChGcy0+RmF0U2VjdG9ycyA+PiAyNCkgJiAweEZGKTsNCj4gKw0KPiArICAgIC8vIEJQQl9FeHRG bGFncw0KPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls0MF0gPSAwOw0KPiArICAgIEZz LT5DdXJyZW50U2VjdG9yLlNlY3Rvcls0MV0gPSAwOw0KPiArDQo+ICsgICAgLy8gQlBCX0ZTVmVy DQo+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzQyXSA9IDA7DQo+ICsgICAgRnMtPkN1 cnJlbnRTZWN0b3IuU2VjdG9yWzQzXSA9IDA7DQo+ICsNCj4gKyAgICAvLyBCUEJfUm9vdENsdXMN Cj4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbNDRdID0gKFVJTlQ4KSgoRnMtPlJvb3Rk aXJGaXJzdENsdXN0ZXIgPj4gMCkgJg0KPiAweEZGKTsNCj4gKyAgICBGcy0+Q3VycmVudFNlY3Rv ci5TZWN0b3JbNDVdID0gKFVJTlQ4KSgoRnMtPlJvb3RkaXJGaXJzdENsdXN0ZXIgPj4gOCkgJg0K PiAweEZGKTsNCj4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbNDZdID0gKFVJTlQ4KSgo RnMtPlJvb3RkaXJGaXJzdENsdXN0ZXIgPj4gMTYpICYNCj4gMHhGRik7DQo+ICsgICAgRnMtPkN1 cnJlbnRTZWN0b3IuU2VjdG9yWzQ3XSA9IChVSU5UOCkoKEZzLT5Sb290ZGlyRmlyc3RDbHVzdGVy ID4+IDI0KSAmDQo+IDB4RkYpOw0KPiArDQo+ICsgICAgLy8gQlBCX0ZTSW5mbw0KPiArICAgIEZz LT5DdXJyZW50U2VjdG9yLlNlY3Rvcls0OF0gPSAoVUlOVDgpKChGcy0+RnNJbmZvU2VjdG9yID4+ IDApICYgMHhGRik7DQo+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzQ5XSA9IChVSU5U OCkoKEZzLT5Gc0luZm9TZWN0b3IgPj4gOCkgJiAweEZGKTsNCj4gKw0KPiArICAgIC8vIEJQQl9C a0Jvb3RTZWMNCj4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbNTBdID0gNjsNCj4gKyAg ICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbNTFdID0gMDsNCj4gKw0KPiArICAgIC8vIERyaXZl IG51bWJlcg0KPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls2NF0gPSAweDAwOw0KPiAr DQo+ICsgICAgLy8gQm9vdCBzaWduYXR1cmUNCj4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0 b3JbNjZdID0gMHgyOTsNCj4gKw0KPiArICAgIC8vIFZvbHVtZSBJRA0KPiArICAgIEZzLT5DdXJy ZW50U2VjdG9yLlNlY3Rvcls2N10gPSAweDEyOw0KPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNl Y3Rvcls2OF0gPSAweDM0Ow0KPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls2OV0gPSAw eDU2Ow0KPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls3MF0gPSAweDc4Ow0KPiArDQo+ ICsgICAgLy8gVm9sdW1lIG5hbWUNCj4gKyAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCAxMTsg SW5kZXgrKykgew0KPiArICAgICAgaWYgKEluZGV4IDwgKGludClBc2NpaVN0ckxlbiAoTmFtZSkp DQo+ICsgICAgICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3RvcltJbmRleCArIDcxXSA9IE5hbWVb SW5kZXhdOw0KPiArICAgICAgZWxzZQ0KPiArICAgICAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0 b3JbSW5kZXggKyA3MV0gPSAnICc7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgLy8gRmlsZSBzeXMg dHlwZQ0KPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls4Ml0gPSAnRic7DQo+ICsgICAg RnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzgzXSA9ICdBJzsNCj4gKyAgICBGcy0+Q3VycmVudFNl Y3Rvci5TZWN0b3JbODRdID0gJ1QnOw0KPiArICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls4 NV0gPSAnMyc7DQo+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzg2XSA9ICcyJzsNCj4g KyAgICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbODddID0gJyAnOw0KPiArICAgIEZzLT5DdXJy ZW50U2VjdG9yLlNlY3Rvcls4OF0gPSAnICc7DQo+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2Vj dG9yWzg5XSA9ICcgJzsNCj4gKw0KPiArICAgIC8vIFNpZ25hdHVyZQ0KPiArICAgIEZzLT5DdXJy ZW50U2VjdG9yLlNlY3Rvcls1MTBdID0gMHg1NTsNCj4gKyAgICBGcy0+Q3VycmVudFNlY3Rvci5T ZWN0b3JbNTExXSA9IDB4QUE7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBGcy0+RGlza0lv LT5Xcml0ZURpc2sgKA0KPiArICAgIEZzLT5EaXNrSW8sIEZzLT5CbG9ja0lvLT5NZWRpYS0+TWVk aWFJZCwNCj4gKyAgICBNdWx0VTY0eDMyIChGcy0+U3RhcnRpbmdMQkEsIEZzLT5CbG9ja0lvLT5N ZWRpYS0+QmxvY2tTaXplKSArDQo+ICsgICAgTXVsdFU2NHgzMiAoRnMtPkZhdEJlZ2luTGJhLCBG QVRfU0VDVE9SX1NJWkUpLA0KPiArICAgIEZBVF9TRUNUT1JfU0laRSwNCj4gKyAgICBGcy0+Q3Vy cmVudFNlY3Rvci5TZWN0b3IpOw0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsv Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ICsvLyBmYXRmc19jcmVhdGVfZnNpbmZvX3NlY3Rvcjog Q3JlYXRlIHRoZSBGU0luZm8gU2VjdG9yIChGQVQzMikNCj4gKy8vLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCj4gK1NUQVRJQw0KPiArRUZJX1NUQVRVUw0KPiArQ3JlYXRlRnNpbmZvU2VjdG9yICgNCj4g KyAgSU4gRkFURlMgKkZzLA0KPiArICBJTiBFRklfTEJBIFNlY3RvckxiYQ0KPiArICApDQo+ICt7 DQo+ICsgIEVGSV9TVEFUVVMgU3RhdHVzOw0KPiArDQo+ICsgIC8vIFplcm8gU2VjdG9yIGluaXRp YWxseQ0KPiArICBaZXJvTWVtIChGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3IsIEZBVF9TRUNUT1Jf U0laRSk7DQo+ICsNCj4gKyAgLy8gRlNJX0xlYWRTaWcNCj4gKyAgRnMtPkN1cnJlbnRTZWN0b3Iu U2VjdG9yWzBdID0gMHg1MjsNCj4gKyAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzFdID0gMHg1 MjsNCj4gKyAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzJdID0gMHg2MTsNCj4gKyAgRnMtPkN1 cnJlbnRTZWN0b3IuU2VjdG9yWzNdID0gMHg0MTsNCj4gKw0KPiArICAvLyBGU0lfU3RydWNTaWcN Cj4gKyAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzQ4NF0gPSAweDcyOw0KPiArICBGcy0+Q3Vy cmVudFNlY3Rvci5TZWN0b3JbNDg1XSA9IDB4NzI7DQo+ICsgIEZzLT5DdXJyZW50U2VjdG9yLlNl Y3Rvcls0ODZdID0gMHg0MTsNCj4gKyAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzQ4N10gPSAw eDYxOw0KPiArDQo+ICsgIC8vIEZTSV9GcmVlX0NvdW50DQo+ICsgIEZzLT5DdXJyZW50U2VjdG9y LlNlY3Rvcls0ODhdID0gMHhGRjsNCj4gKyAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzQ4OV0g PSAweEZGOw0KPiArICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbNDkwXSA9IDB4RkY7DQo+ICsg IEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls0OTFdID0gMHhGRjsNCj4gKw0KPiArICAvLyBGU0lf Tnh0X0ZyZWUNCj4gKyAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yWzQ5Ml0gPSAweEZGOw0KPiAr ICBGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3JbNDkzXSA9IDB4RkY7DQo+ICsgIEZzLT5DdXJyZW50 U2VjdG9yLlNlY3Rvcls0OTRdID0gMHhGRjsNCj4gKyAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9y WzQ5NV0gPSAweEZGOw0KPiArDQo+ICsgIC8vIFNpZ25hdHVyZQ0KPiArICBGcy0+Q3VycmVudFNl Y3Rvci5TZWN0b3JbNTEwXSA9IDB4NTU7DQo+ICsgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcls1 MTFdID0gMHhBQTsNCj4gKw0KPiArICBTdGF0dXMgPSBGcy0+RGlza0lvLT5Xcml0ZURpc2sgKA0K PiArICAgIEZzLT5EaXNrSW8sIEZzLT5CbG9ja0lvLT5NZWRpYS0+TWVkaWFJZCwNCj4gKyAgICBN dWx0VTY0eDMyIChGcy0+U3RhcnRpbmdMQkEsIEZzLT5CbG9ja0lvLT5NZWRpYS0+QmxvY2tTaXpl KSArDQo+ICsgICAgTXVsdFU2NHgzMiAoU2VjdG9yTGJhLCAgRkFUX1NFQ1RPUl9TSVpFKSwNCj4g KyAgICBGQVRfU0VDVE9SX1NJWkUsDQo+ICsgICAgRnMtPkN1cnJlbnRTZWN0b3IuU2VjdG9yKTsN Cj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArLy8tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KPiArLy8gZmF0ZnNfZXJhc2VfZmF0OiBFcmFzZSBGQVQgdGFibGUgdXNpbmcgZnMgZGV0YWls cyBpbiBmcyBzdHJ1Y3QNCj4gKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gK1NUQVRJQw0KPiAr RUZJX1NUQVRVUw0KPiArRXJhc2VGYXQgKA0KPiArICBJTiBGQVRGUyAqRnMsDQo+ICsgIElOIEJP T0xFQU4gSXNGYXQzMikNCj4gK3sNCj4gKyAgVUlOVE4gSW5kZXg7DQo+ICsgIEVGSV9TVEFUVVMg U3RhdHVzOw0KPiArDQo+ICsgIC8vIFplcm8gU2VjdG9yIGluaXRpYWxseQ0KPiArICBaZXJvTWVt IChGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3IsIEZBVF9TRUNUT1JfU0laRSk7DQo+ICsNCj4gKyAg Ly8gSW5pdGlhbGlzZSBkZWZhdWx0IGFsbG9jYXRlIC8gcmVzZXJ2ZWQgY2x1c3RlcnMNCj4gKyAg aWYgKCFJc0ZhdDMyKSB7DQo+ICsgICAgU0VUXzE2QklUX1dPUkQgKEZzLT5DdXJyZW50U2VjdG9y LlNlY3RvciwgMCwgMHhGRkY4KTsNCj4gKyAgICBTRVRfMTZCSVRfV09SRCAoRnMtPkN1cnJlbnRT ZWN0b3IuU2VjdG9yLCAyLCAweEZGRkYpOw0KPiArICB9IGVsc2Ugew0KPiArICAgIFNFVF8zMkJJ VF9XT1JEIChGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3IsIDAsIDB4MEZGRkZGRjgpOw0KPiArICAg IFNFVF8zMkJJVF9XT1JEIChGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3IsIDQsIDB4RkZGRkZGRkYp Ow0KPiArICAgIFNFVF8zMkJJVF9XT1JEIChGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3IsIDgsIDB4 MEZGRkZGRkYpOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gRnMtPkRpc2tJby0+V3JpdGVE aXNrICgNCj4gKyAgICBGcy0+RGlza0lvLCBGcy0+QmxvY2tJby0+TWVkaWEtPk1lZGlhSWQsDQo+ ICsgICAgTXVsdFU2NHgzMiAoRnMtPlN0YXJ0aW5nTEJBLCBGcy0+QmxvY2tJby0+TWVkaWEtPkJs b2NrU2l6ZSkgKw0KPiArICAgIE11bHRVNjR4MzIgKEZzLT5GYXRCZWdpbkxiYSwgRkFUX1NFQ1RP Ul9TSVpFKSwNCj4gKyAgICBGQVRfU0VDVE9SX1NJWkUsDQo+ICsgICAgRnMtPkN1cnJlbnRTZWN0 b3IuU2VjdG9yKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVy biBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICAvLyBaZXJvIHJlbWFpbmluZyBGQVQgc2VjdG9y cw0KPiArICBaZXJvTWVtIChGcy0+Q3VycmVudFNlY3Rvci5TZWN0b3IsIEZBVF9TRUNUT1JfU0la RSk7DQo+ICsgIGZvciAoSW5kZXggPSAxOyBJbmRleCA8IEZzLT5GYXRTZWN0b3JzICogRnMtPk51 bU9mRmF0czsgSW5kZXgrKykgew0KPiArICAgIFN0YXR1cyA9IEZzLT5EaXNrSW8tPldyaXRlRGlz ayAoDQo+ICsgICAgICBGcy0+RGlza0lvLA0KPiArICAgICAgRnMtPkJsb2NrSW8tPk1lZGlhLT5N ZWRpYUlkLA0KPiArICAgICAgTXVsdFU2NHgzMiAoRnMtPlN0YXJ0aW5nTEJBLCBGcy0+QmxvY2tJ by0+TWVkaWEtPkJsb2NrU2l6ZSkgKw0KPiArICAgICAgTXVsdFU2NHgzMiAoKEZzLT5GYXRCZWdp bkxiYSArIEluZGV4KSwgRkFUX1NFQ1RPUl9TSVpFKSwNCj4gKyAgICAgIEZBVF9TRUNUT1JfU0la RSwNCj4gKyAgICAgIEZzLT5DdXJyZW50U2VjdG9yLlNlY3Rvcik7DQo+ICsgICAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgICB9DQo+ICsg IH0NCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N Cj4gKy8vIGZhdGZzX2Zvcm1hdF9mYXQxNjogRm9ybWF0IGEgRkFUMTYgcGFydGl0aW9uDQo+ICsv Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ICtTVEFUSUMNCj4gK0VGSV9TVEFUVVMNCj4gK0Zvcm1h dEZhdDE2ICgNCj4gKyAgSU4gRkFURlMgKkZzLA0KPiArICBJTiBVSU5UNjQgVm9sdW1lU2VjdG9y cywNCj4gKyAgSU4gQ09OU1QgQ0hBUjggKk5hbWUNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RB VFVTIFN0YXR1czsNCj4gKw0KPiArICBGcy0+Q3VycmVudFNlY3Rvci5BZGRyZXNzID0gRkFUMzJf SU5WQUxJRF9DTFVTVEVSOw0KPiArICBGcy0+Q3VycmVudFNlY3Rvci5EaXJ0eSA9IDA7DQo+ICsN Cj4gKyAgRnMtPk5leHRGcmVlQ2x1c3RlciA9IDA7IC8vIEludmFsaWQNCj4gKw0KPiArICAvLyBW b2x1bWUgaXMgRkFUMTYNCj4gKyAgRnMtPkZhdFR5cGUgPSBGQVRfVFlQRV8xNjsNCj4gKw0KPiAr ICAvLyBOb3QgdmFsaWQgZm9yIEZBVDE2DQo+ICsgIEZzLT5Gc0luZm9TZWN0b3IgPSAwOw0KPiAr ICBGcy0+Um9vdGRpckZpcnN0Q2x1c3RlciA9IDA7DQo+ICsNCj4gKyAgRnMtPkxiYUJlZ2luID0g MDsNCj4gKyAgU3RhdHVzID0gQ3JlYXRlQm9vdFNlY3RvciAoRnMsIEZzLT5MYmFCZWdpbiwgVm9s dW1lU2VjdG9ycywgTmFtZSwgMCk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4g KyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgLy8gRm9yIEZBVDE2ICh3aGlj aCB0aGlzIG1heSBiZSksIFJvb3RkaXJGaXJzdENsdXN0ZXIgaXMgYWN0dWFsbA0KPiBSb290ZGly Rmlyc3RTZWN0b3INCj4gKyAgRnMtPlJvb3RkaXJGaXJzdFNlY3RvciA9IEZzLT5SZXNlcnZlZFNl Y3RvcnMgKyAoRnMtPk51bU9mRmF0cyAqIEZzLQ0KPiA+RmF0U2VjdG9ycyk7DQo+ICsgIEZzLT5S b290ZGlyU2VjdG9ycyA9ICgoRnMtPlJvb3RFbnRyeUNvdW50ICogMzIpICsNCj4gKyAgICAoRkFU X1NFQ1RPUl9TSVpFIC0gMSkpIC8gRkFUX1NFQ1RPUl9TSVpFOw0KPiArDQo+ICsgIC8vIEZpcnN0 IEZBVCBMQkEgQWRkcmVzcw0KPiArICBGcy0+RmF0QmVnaW5MYmEgPSBGcy0+TGJhQmVnaW4gKyBG cy0+UmVzZXJ2ZWRTZWN0b3JzOw0KPiArDQo+ICsgIC8vIFRoZSBBZGRyZXNzIG9mIHRoZSBmaXJz dCBkYXRhIGNsdXN0ZXIgb24gdGhpcyB2b2x1bWUNCj4gKyAgRnMtPkNsdXN0ZXJCZWdpbkxiYSA9 IEZzLT5GYXRCZWdpbkxiYSArDQo+ICsgICAgKEZzLT5OdW1PZkZhdHMgKiBGcy0+RmF0U2VjdG9y cyk7DQo+ICsNCj4gKyAgLy8gSW5pdGlhbGlzZSBGQVQgc2VjdG9ycw0KPiArICBTdGF0dXMgPSBF cmFzZUZhdCAoRnMsIDApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAg cmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vIEVyYXNlIFJvb3QgZGlyZWN0b3J5 DQo+ICsgIFN0YXR1cyA9IEVyYXNlU2VjdG9ycyAoDQo+ICsgICAgICBGcywNCj4gKyAgICAgIEZz LT5MYmFCZWdpbiArIEZzLT5Sb290ZGlyRmlyc3RTZWN0b3IsDQo+ICsgICAgICBGcy0+Um9vdGRp clNlY3RvcnMpOw0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsvLy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQo+ICsvLyBmYXRmc19mb3JtYXRfZmF0MzI6IEZvcm1hdCBhIEZBVDMyIHBh cnRpdGlvbg0KPiArLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiArU1RBVElDDQo+ICtFRklfU1RB VFVTDQo+ICtGb3JtYXRGYXQzMiAoDQo+ICsgIElOIEZBVEZTICpGcywNCj4gKyAgSU4gVUlOVE4g Vm9sdW1lU2VjdG9ycywNCj4gKyAgSU4gQ09OU1QgQ0hBUjggKk5hbWUNCj4gKyAgKQ0KPiArew0K PiArICBFRklfU1RBVFVTIFN0YXR1czsNCj4gKw0KPiArICBGcy0+Q3VycmVudFNlY3Rvci5BZGRy ZXNzID0gRkFUMzJfSU5WQUxJRF9DTFVTVEVSOw0KPiArICBGcy0+Q3VycmVudFNlY3Rvci5EaXJ0 eSA9IDA7DQo+ICsNCj4gKyAgRnMtPk5leHRGcmVlQ2x1c3RlciA9IDA7IC8vIEludmFsaWQNCj4g Kw0KPiArICAvLyBWb2x1bWUgaXMgRkFUMzINCj4gKyAgRnMtPkZhdFR5cGUgPSBGQVRfVFlQRV8z MjsNCj4gKw0KPiArICAvLyBCYXNpYyBkZWZhdWx0cyBmb3Igbm9ybWFsIEZBVDMyIHBhcnRpdGlv bnMNCj4gKyAgRnMtPkZzSW5mb1NlY3RvciA9IDE7DQo+ICsgIEZzLT5Sb290ZGlyRmlyc3RDbHVz dGVyID0gMjsNCj4gKw0KPiArICAvLyBTZWN0b3IgMDogQm9vdCBTZWN0b3INCj4gKyAgLy8gTk9U RTogV2UgZG9uJ3QgbmVlZCBhbiBNQlIsIGl0IGlzIGEgd2FzdGUgb2YgYSBnb29kIFNlY3RvciEN Cj4gKyAgRnMtPkxiYUJlZ2luID0gMDsNCj4gKyAgU3RhdHVzID0gQ3JlYXRlQm9vdFNlY3RvciAo RnMsIEZzLT5MYmFCZWdpbiwgVm9sdW1lU2VjdG9ycywgTmFtZSwgMSk7DQo+ICsgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4g KyAgLy8gRmlyc3QgRkFUIExCQSBhZGRyZXNzDQo+ICsgIEZzLT5GYXRCZWdpbkxiYSA9IEZzLT5M YmFCZWdpbiArIEZzLT5SZXNlcnZlZFNlY3RvcnM7DQo+ICsNCj4gKyAgLy8gVGhlIGFkZHJlc3Mg b2YgdGhlIGZpcnN0IGRhdGEgY2x1c3RlciBvbiB0aGlzIHZvbHVtZQ0KPiArICBGcy0+Q2x1c3Rl ckJlZ2luTGJhID0gRnMtPkZhdEJlZ2luTGJhICsgKEZzLT5OdW1PZkZhdHMgKiBGcy0NCj4gPkZh dFNlY3RvcnMpOw0KPiArDQo+ICsgIC8vIEluaXRpYWxpc2UgRlNJbmZvIHNlY3Rvcg0KPiArICBT dGF0dXMgPSBDcmVhdGVGc2luZm9TZWN0b3IgKEZzLCBGcy0+RnNJbmZvU2VjdG9yKTsNCj4gKyAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0N Cj4gKw0KPiArICAvLyBJbml0aWFsaXNlIEZBVCBzZWN0b3JzDQo+ICsgIFN0YXR1cyA9IEVyYXNl RmF0IChGcywgMSk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1 cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgLy8gRXJhc2UgUm9vdCBkaXJlY3RvcnkNCj4g KyAgU3RhdHVzID0gRXJhc2VTZWN0b3JzICgNCj4gKyAgICBGcywNCj4gKyAgICBMYmFPZkNsdXN0 ZXIgKEZzLCBGcy0+Um9vdGRpckZpcnN0Q2x1c3RlciksDQo+ICsgICAgRnMtPlNlY3RvcnNQZXJD bHVzdGVyKTsNCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArLy8tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KPiArLy8gZmF0ZnNfZm9ybWF0OiBGb3JtYXQgYSBwYXJ0aXRpb24gd2l0aCBl aXRoZXIgRkFUMTYgb3IgRkFUMzIgYmFzZWQgb24gc2l6ZQ0KPiArLy8tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KPiArRUZJX1NUQVRVUw0KPiArRmF0Rm9ybWF0ICgNCj4gKyAgSU4gRUZJX0xCQSAgICAg ICAgICAgICAgICAgU3RhcnRpbmdMQkEsDQo+ICsgIElOIEVGSV9MQkEgICAgICAgICAgICAgICAg IEVuZGluZ0xCQSwNCj4gKyAgSU4gRUZJX0JMT0NLX0lPX1BST1RPQ09MICAgKkJsb2NrSW8sDQo+ ICsgIElOIEVGSV9ESVNLX0lPX1BST1RPQ09MICAgICpEaXNrSW8sDQo+ICsgIElOIENIQVI4ICAg ICAgICAgICAgICAgICAgICpWb2x1bWVOYW1lLA0KPiArICBJTiBCT09MRUFOICAgICAgICAgICAg ICAgICBGb3JjZUZhdDMyDQo+ICsgICkNCj4gK3sNCj4gKyAgRkFURlMgRnM7DQo+ICsgIFVJTlQ2 NCBWb2x1bWVTZWN0b3JzOw0KPiArDQo+ICsgIFZvbHVtZVNlY3RvcnMgPSBEaXZVNjR4MzIgKA0K PiArICAgIE11bHRVNjR4MzIgKA0KPiArICAgICAgRW5kaW5nTEJBIC0gU3RhcnRpbmdMQkEgKyAx LCBCbG9ja0lvLT5NZWRpYS0+QmxvY2tTaXplKSwNCj4gKyAgICBGQVRfU0VDVE9SX1NJWkUpOw0K PiArDQo+ICsgIGlmIChWb2x1bWVOYW1lID09IE5VTEwpIHsNCj4gKyAgICBWb2x1bWVOYW1lID0g REVGQVVMVF9GQVRfTEFCRUxfTkFNRTsNCj4gKyAgfQ0KPiArDQo+ICsgIFplcm9NZW0gKCZGcywg c2l6ZW9mKEZzKSk7DQo+ICsNCj4gKyAgRnMuU3RhcnRpbmdMQkEgPSBTdGFydGluZ0xCQTsNCj4g KyAgRnMuRW5kaW5nTEJBID0gRW5kaW5nTEJBOw0KPiArICBGcy5CbG9ja0lvID0gQmxvY2tJbzsN Cj4gKyAgRnMuRGlza0lvID0gRGlza0lvOw0KPiArICAvLyAyR0IgLSAzMksgbGltaXQgZm9yIHNh ZmUgYmVoYXZpb3VyIGZvciBGQVQxNg0KPiArICBpZiAoKFZvbHVtZVNlY3RvcnMgPD0gNDE5NDMw NCkgJiYgKCFGb3JjZUZhdDMyKSkgew0KPiArICAgIHJldHVybiBGb3JtYXRGYXQxNiAoJkZzLCBW b2x1bWVTZWN0b3JzLCBWb2x1bWVOYW1lKTsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICByZXR1cm4g Rm9ybWF0RmF0MzIgKCZGcywgVm9sdW1lU2VjdG9ycywgVm9sdW1lTmFtZSk7DQo+ICsgIH0NCj4g K30NCj4gZGlmZiAtLWdpdCBhL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsR3B0Q29tbWFuZExp Yi9GYXRGb3JtYXQuaA0KPiBiL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsR3B0Q29tbWFuZExp Yi9GYXRGb3JtYXQuaA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAw MDAuLmQxYTMyNWE1N2FiZQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL1NoZWxsUGtnL0xpYnJh cnkvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi9GYXRGb3JtYXQuaA0KPiBAQCAtMCwwICsxLDExMSBA QA0KPiArLyoqIEBmaWxlDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAyMDAzIC0gMjAxMiwgVWx0 cmEtRW1iZWRkZWQuY29tLiBBbGwgcmlnaHRzIHJlc2VydmVkPEJSPg0KPiArDQo+ICsgIFRoaXMg cHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4gKyAgYXJlIGxpY2Vuc2Vk IGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhl IEJTRA0KPiBMaWNlbnNlDQo+ICsgIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9u LiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUNCj4gZm91bmQgYXQNCj4gKyAg aHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPiArDQo+ICsg IFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAi QVMgSVMiDQo+IEJBU0lTLA0KPiArICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJ T05TIE9GIEFOWSBLSU5ELCBFSVRIRVINCj4gRVhQUkVTUyBPUiBJTVBMSUVELg0KPiArDQo+ICsq Ki8NCj4gKw0KPiArLyogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDE2LCBCcm9hZGNvbS4gQWxs IHJpZ2h0cyByZXNlcnZlZCAqLw0KPiArDQo+ICsjaWZuZGVmIF9fRkFUX0ZPUk1BVF9IX18NCj4g KyNkZWZpbmUgX19GQVRfRk9STUFUX0hfXw0KPiArDQo+ICsjaW5jbHVkZSAiR3B0V29ya2VyLmgi DQo+ICsNCj4gKyNkZWZpbmUgRkFUX1NFQ1RPUl9TSVpFICAgICAgICAgICAgICAgICAgICAgNTEy DQo+ICsjZGVmaW5lIEZBVF9CVUZGRVJfU0VDVE9SUyAgICAgICAgICAgICAgICAgICAgMQ0KPiAr I2RlZmluZSBGQVQzMl9MQVNUX0NMVVNURVIgICAgICAgICAgICAgIDB4RkZGRkZGRkYNCj4gKyNk ZWZpbmUgRkFUMzJfSU5WQUxJRF9DTFVTVEVSICAgICAgICAgICAweEZGRkZGRkZGDQo+ICsjZGVm aW5lIEZBVF9ESVJfRU5UUllfU0laRSAgICAgICAgICAgICAgMzINCj4gKyNkZWZpbmUgRkFUX0JV RkZFUlMgICAgICAgICAgICAgICAgICAgICAxDQo+ICsjZGVmaW5lIERFRkFVTFRfRkFUX0xBQkVM X05BTUUgICAgICAgICAgIkVGSVZPTCINCj4gKw0KPiArI2RlZmluZSBHRVRfMzJCSVRfV09SRChC dWZmZXIsIExvY2F0aW9uKQ0KPiAoICgoVUlOVDMyKUJ1ZmZlcltMb2NhdGlvbiArIDNdIDw8IDI0 KSArIFwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKChVSU5UMzIpQnVmZmVyW0xvY2F0aW9uICsgMl0gPDwxNiApICsgXA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFVJTlQzMilCdWZmZXJb TG9jYXRpb24gKyAxXSA8PCA4KSArIFwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKFVJTlQzMilCdWZmZXJbTG9jYXRpb24rMF0gKQ0KPiArDQo+ ICsjZGVmaW5lIEdFVF8xNkJJVF9XT1JEKEJ1ZmZlciwgTG9jYXRpb24pDQo+ICggKChVSU5UMTYp QnVmZmVyW0xvY2F0aW9uICsgMV0gPDwgOCkgKyBcDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVSU5UMTYpQnVmZmVyW0xvY2F0aW9uKzBdKQ0K PiArDQo+ICsjZGVmaW5lIFNFVF8zMkJJVF9XT1JEKEJ1ZmZlciwgTG9jYXRpb24sIFZhbHVlKSAg IHsgQnVmZmVyW0xvY2F0aW9uICsgMF0gPQ0KPiAoVUlOVDgpKChWYWx1ZSkgJiAweEZGKTsgXA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZm ZXJbTG9jYXRpb24gKyAxXSA9IChVSU5UOCkoKFZhbHVlID4+IDgpICYgMHhGRik7DQo+IFwNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVy W0xvY2F0aW9uICsgMl0gPSAoVUlOVDgpKChWYWx1ZSA+PiAxNikgJg0KPiAweEZGKTsgXA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJb TG9jYXRpb24gKyAzXSA9IChVSU5UOCkoKFZhbHVlID4+IDI0KSAmDQo+IDB4RkYpOyB9DQo+ICsN Cj4gKyNkZWZpbmUgU0VUXzE2QklUX1dPUkQoQnVmZmVyLCBMb2NhdGlvbiwgVmFsdWUpICAgeyBC dWZmZXJbTG9jYXRpb24gKyAwXSA9DQo+IChVSU5UOCkoKFZhbHVlKSAmIDB4RkYpOyBcDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlcltM b2NhdGlvbiArIDFdID0gKFVJTlQ4KSgoVmFsdWUgPj4gOCkgJg0KPiAweEZGKTsgfQ0KPiArDQo+ ICt0eXBlZGVmIGVudW0gZUZhdFR5cGUNCj4gK3sNCj4gKyAgRkFUX1RZUEVfMTYsDQo+ICsgIEZB VF9UWVBFXzMyDQo+ICt9IEZBVF9GU19UWVBFOw0KPiArDQo+ICsNCj4gKy8vIEZvcndhcmQgZGVj bGFyYXRpb24NCj4gK3R5cGVkZWYgc3RydWN0IF9GQVRfQlVGRkVSIEZBVF9CVUZGRVI7DQo+ICsN Cj4gK3N0cnVjdCBfRkFUX0JVRkZFUiB7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgIFNl Y3RvcltGQVRfU0VDVE9SX1NJWkUgKiBGQVRfQlVGRkVSX1NFQ1RPUlNdOw0KPiArICBVSU5UTiAg ICAgICAgICAgICAgICAgICBBZGRyZXNzOw0KPiArICBCT09MRUFOICAgICAgICAgICAgICAgICBE aXJ0eTsNCj4gKyAgVUlOVDggKlB0cjsNCj4gKw0KPiArICAvLyBOZXh0IGluIGNoYWluIG9mIHNl Y3RvciBidWZmZXJzDQo+ICsgIHN0cnVjdCBGQVRfQlVGRkVSICAgICAgICpOZXh0QnVmOw0KPiAr fTsNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3QNCj4gK3sNCj4gKyAgLy8gRmlsZXN5c3RlbSBnbG9i YWxzDQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgIFNlY3RvcnNQZXJDbHVzdGVyOw0KPiAr ICBFRklfTEJBICAgICAgICAgICAgICAgICBDbHVzdGVyQmVnaW5MYmE7DQo+ICsgIFVJTlROICAg ICAgICAgICAgICAgICAgIFJvb3RkaXJGaXJzdENsdXN0ZXI7DQo+ICsgIFVJTlROICAgICAgICAg ICAgICAgICAgIFJvb3RkaXJGaXJzdFNlY3RvcjsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAg ICAgUm9vdGRpclNlY3RvcnM7DQo+ICsgIEVGSV9MQkEgICAgICAgICAgICAgICAgIEZhdEJlZ2lu TGJhOw0KPiArICBVSU5UMTYgICAgICAgICAgICAgICAgICBGc0luZm9TZWN0b3I7DQo+ICsgIEVG SV9MQkEgICAgICAgICAgICAgICAgIExiYUJlZ2luOw0KPiArICBVSU5UTiAgICAgICAgICAgICAg ICAgICBGYXRTZWN0b3JzOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICBOZXh0RnJlZUNs dXN0ZXI7DQo+ICsgIFVJTlQxNiAgICAgICAgICAgICAgICAgIFJvb3RFbnRyeUNvdW50Ow0KPiAr ICBVSU5UMTYgICAgICAgICAgICAgICAgICBSZXNlcnZlZFNlY3RvcnM7DQo+ICsgIFVJTlQ4ICAg ICAgICAgICAgICAgICAgIE51bU9mRmF0czsNCj4gKyAgRkFUX0ZTX1RZUEUgICAgICAgICAgICAg RmF0VHlwZTsNCj4gKw0KPiArICAvLyBXb3JraW5nIGJ1ZmZlcg0KPiArICBGQVRfQlVGRkVSICAg ICAgICAgICAgICBDdXJyZW50U2VjdG9yOw0KPiArICAvLyBGQVQgQnVmZmVyDQo+ICsgIEZBVF9C VUZGRVIgICAgICAgICAgICAgICpGYXRCdWZmZXJIZWFkOw0KPiArICBGQVRfQlVGRkVSICAgICAg ICAgICAgICBGYXRCdWZmZXJzW0ZBVF9CVUZGRVJTXTsNCj4gKyAgRUZJX0xCQSAgICAgICAgICAg ICAgICAgU3RhcnRpbmdMQkE7DQo+ICsgIEVGSV9MQkEgICAgICAgICAgICAgICAgIEVuZGluZ0xC QTsNCj4gKyAgRUZJX0JMT0NLX0lPX1BST1RPQ09MICAgKkJsb2NrSW87DQo+ICsgIEVGSV9ESVNL X0lPX1BST1RPQ09MICAgICpEaXNrSW87DQo+ICsNCj4gK30gRkFURlM7DQo+ICsNCj4gKw0KPiAr DQo+ICsvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ICsvLyBQcm90b3R5cGVzDQo+ICsvLy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQo+ICtFRklfU1RBVFVTDQo+ICtGYXRGb3JtYXQgKA0KPiArICBJTiBF RklfTEJBICAgICAgICAgICAgICAgICAgIFN0YXJ0aW5nTEJBLA0KPiArICBJTiBFRklfTEJBICAg ICAgICAgICAgICAgICAgIEVuZGluZ0xCQSwNCj4gKyAgSU4gRUZJX0JMT0NLX0lPX1BST1RPQ09M ICAgICAqQmxvY2tJbywNCj4gKyAgSU4gRUZJX0RJU0tfSU9fUFJPVE9DT0wgICAgICAqRGlza0lv LA0KPiArICBJTiBDSEFSOCAgICAgICAgICAgICAgICAgICAgICpWb2x1bWVOYW1lLA0KPiArICBJ TiBCT09MRUFOICAgICAgICAgICAgICAgICAgIEZvcmNlRmF0MzINCj4gKyAgKTsNCj4gKw0KPiAr I2VuZGlmDQo+IGRpZmYgLS1naXQgYS9TaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEdwdENvbW1h bmRMaWIvR3B0V29ya2VyLmMNCj4gYi9TaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEdwdENvbW1h bmRMaWIvR3B0V29ya2VyLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAw MDAwMDAwLi4wNTQ2Yzk0NDg4YjANCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9TaGVsbFBrZy9M aWJyYXJ5L1VlZmlTaGVsbEdwdENvbW1hbmRMaWIvR3B0V29ya2VyLmMNCj4gQEAgLTAsMCArMSwx OTAyIEBADQo+ICsvKiogQGZpbGUNCj4gK0NvcHlyaWdodCAoYykgMjAwNiAtIDIwMTMsIEludGVs IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gK0NvcHlyaWdodCAoYykg MjAxNiwgQnJvYWRjb20uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArVGhpcyBwcm9ncmFt IGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPiArYXJlIGxpY2Vuc2VkIGFuZCBtYWRl IGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRA0KPiBM aWNlbnNlDQo+ICt3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxs IHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+IGZvdW5kIGF0DQo+ICtodHRwOi8vb3BlbnNv dXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+ICsNCj4gK1RIRSBQUk9HUkFNIElT IERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiDQo+IEJBU0lT LA0KPiArV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwg RUlUSEVSDQo+IEVYUFJFU1MgT1IgSU1QTElFRC4NCj4gKw0KPiArKiovDQo+ICsNCj4gKyNpbmNs dWRlICJHcHRXb3JrZXIuaCINCj4gKw0KPiArI2RlZmluZSBHUFRfREVCVUdfTEVWRUwgMA0KPiAr DQo+ICtTVEFUSUMgRUZJX1BBUlRJVElPTl9UQUJMRV9IRUFERVIgICAqUHJpbWFyeUhlYWRlciAg ICA9IE5VTEw7DQo+ICtTVEFUSUMgRUZJX1BBUlRJVElPTl9UQUJMRV9IRUFERVIgICAqQmFja3Vw SGVhZGVyICAgICA9IE5VTEw7DQo+ICtTVEFUSUMgRUZJX1BBUlRJVElPTl9FTlRSWSAgICAgICAg ICAqUGFydEVudHJ5ICAgICAgICA9IE5VTEw7DQo+ICtTVEFUSUMgRUZJX1BBUlRJVElPTl9FTlRS WV9TVEFUVVMgICAqUEVudHJ5U3RhdHVzICAgICA9IE5VTEw7DQo+ICsNCj4gK1NUQVRJQyBFRklf QkxPQ0tfSU9fUFJPVE9DT0wgICAgICAgICpCbG9ja0lvOw0KPiArU1RBVElDIEVGSV9ESVNLX0lP X1BST1RPQ09MICAgICAgICAgKkRpc2tJbzsNCj4gKw0KPiArU1RBVElDIEJPT0xFQU4gICAgICAg ICAgICAgICAgICAgICAgTWJyVmFsaWQ7DQo+ICtTVEFUSUMgQk9PTEVBTiAgICAgICAgICAgICAg ICAgICAgICBHcHRWYWxpZDsNCj4gKw0KPiArU1RBVElDIEVGSV9LTk9XTl9QQVJUSVRJT05fVFlQ RSBQYXJ0aXRpb25UeXBlc1tdID0NCj4gK3sNCj4gKyAgLy8gS25vd24gUGFydGl0aW9uIHR5cGUg R1VJRHMNCj4gKyAgLy8gRXhwYW5kIHRoaXMgdGFibGUgYXMgbmVlZGVkLg0KPiArICAvLyBTdGFy dGluZyB3aXRoIEVGSSBTeXN0ZW0gcGFydGl0aW9uDQo+ICsgIHsgeyAweEMxMkE3MzI4TCwgMHhG ODFGLCAweDExRDIsIHsgMHhCQSwgMHg0QiwgMHgwMCwgMHhBMCwgMHhDOSwgMHgzRSwgMHhDOSwN Cj4gMHgzQiB9IH0sIEwiRUZJIFN5c3RlbSIgfSwNCj4gKyAgLy8gS25vd24gV2luZG93cyBwYXJ0 aXRpb24gdHlwZXMNCj4gKyAgeyB7IDB4RTNDOUUzMTZMLCAweDBCNUMsIDB4NERCOCwgeyAweDgx LCAweDdELCAweEY5LCAweDJELCAweEYwLCAweDAyLCAweDE1LA0KPiAweEFFIH0gfSwgTCJNUyBX aW5kb3dzIFJlc2VydmVkIChNU1IpIiB9LA0KPiArICB7IHsgMHhFQkQwQTBBMkwsIDB4QjlFNSwg MHg0NDMzLCB7IDB4ODcsIDB4QzAsIDB4NjgsIDB4QjYsIDB4QjcsIDB4MjYsIDB4OTksDQo+IDB4 QzcgfSB9LCBMIk1TIFdpbmRvd3MgQmFzaWMgRGF0YSIgfSwNCj4gKyAgeyB7IDB4NTgwOEM4QUFM LCAweDdFOEYsIDB4NDJFMCwgeyAweDg1LCAweEQyLCAweEUxLCAweEU5LCAweDA0LCAweDM0LCAw eENGLA0KPiAweEIzIH0gfSwgTCJNUyBXaW5kb3dzIExETSBNZXRhZGF0YSIgfSwNCj4gKyAgeyB7 IDB4QUY5QjYwQTBMLCAweDE0MzEsIDB4NEY2MiwgeyAweEJDLCAweDY4LCAweDMzLCAweDExLCAw eDcxLCAweDRBLCAweDY5LA0KPiAweEFEIH0gfSwgTCJNUyBXaW5kb3dzIExETSBEYXRhIiB9LA0K PiArICB7IHsgMHhERTk0QkJBNEwsIDB4MDZEMSwgMHg0RDQwLCB7IDB4QTEsIDB4NkEsIDB4QkYs IDB4RDUsIDB4MDEsIDB4NzksDQo+IDB4RDYsIDB4QUMgfSB9LCBMIk1TIFdpbmRvd3MgUmVjb3Zl cnkgRW52aXJvbm1lbnQiIH0sDQo+ICsgIHsgeyAweEU3NUNBRjhGTCwgMHhGNjgwLCAweDRDRUUs IHsgMHhBRiwgMHhBMywgMHhCMCwgMHgwMSwgMHhFNSwgMHg2RSwgMHhGQywNCj4gMHgyRCB9IH0s IEwiTVMgV2luZG93cyBTdG9yYWdlIFNwYWNlcyIgfSwNCj4gKyAgLy8gS25vd24gTGludXggcGFy dGl0aW9uIHR5cGVzDQo+ICsgIHsgeyAweDBGQzYzREFGTCwgMHg4NDgzLCAweDQ3NzIsIHsgMHg4 RSwgMHg3OSwgMHgzRCwgMHg2OSwgMHhEOCwgMHg0NywgMHg3RCwNCj4gMHhFNCB9IH0sIEwiTGlu dXggRmlsZXN5c3RlbSBEYXRhIiB9LA0KPiArICB7IHsgMHhBMTlEODgwRkwsIDB4MDVGQywgMHg0 RDNCLCB7IDB4QTAsIDB4MDYsIDB4NzQsIDB4M0YsIDB4MEYsIDB4ODQsIDB4OTEsDQo+IDB4MUUg fSB9LCBMIkxpbnV4IFJBSUQiIH0sDQo+ICsgIHsgeyAweDQ0NDc5NTQwTCwgMHhGMjk3LCAweDQx QjIsIHsgMHg5QSwgMHhGNywgMHhEMSwgMHgzMSwgMHhENSwgMHhGMCwgMHg0NSwNCj4gMHg4QSB9 IH0sIEwiTGludXggUm9vdCAoeDg2KSIgfSwNCj4gKyAgeyB7IDB4NEY2OEJDRTNMLCAweEU4Q0Qs IDB4NERCMSwgeyAweDk2LCAweEU3LCAweEZCLCAweENBLCAweEY5LCAweDg0LCAweEI3LA0KPiAw eDA5IH0gfSwgTCJMaW51eCBSb290ICh4ODYtNjQpIiB9LA0KPiArICB7IHsgMHg2OURBRDcxMEws IDB4MkNFNCwgMHg0RTNDLCB7IDB4QjEsIDB4NkMsIDB4MjEsIDB4QTEsIDB4RDQsIDB4OUEsDQo+ IDB4QmUsIDB4RDMgfSB9LCBMIkxpbnV4IFJvb3QgKEFSTSAzMi1iaXQpIiB9LA0KPiArICB7IHsg MHhCOTIxQjA0NUwsIDB4MURGMCwgMHg0MUMzLCB7IDB4QUYsIDB4NDQsIDB4NEMsIDB4NkYsIDB4 MjgsIDB4MEQsIDB4M0YsDQo+IDB4QUUgfSB9LCBMIkxpbnV4IFJvb3QgKEFSTSA2NC1iaXQvQUFS Q0g2NCkiIH0sDQo+ICsgIHsgeyAweDA2NTdGRDZETCwgMHhBNEFCLCAweDQzQzQsIHsgMHg4NCwg MHhFNSwgMHgwOSwgMHgzMywgMHhDOCwgMHg0QiwgMHg0RiwNCj4gMHg0RiB9IH0sIEwiTGludXgg U3dhcCIgfSwNCj4gKyAgeyB7IDB4RTZENkQzNzlMLCAweEY1MDcsIDB4NDRDMiwgeyAweEEyLCAw eDNDLCAweDIzLCAweDhGLCAweDJBLCAweDNELCAweEY5LA0KPiAweDI4IH0gfSwgTCJMaW51eCBM b2dpY2FsIFZvbHVtZSBNYW5hZ2VyIChMVk0pIiB9LA0KPiArICB7IHsgMHg5MzNBQzdFMUwsIDB4 MkVCNCwgMHg0RjEzLCB7IDB4QjgsIDB4NDQsIDB4MEUsIDB4MTQsIDB4RTIsIDB4QUUsIDB4Rjks DQo+IDB4MTUgfSB9LCBMIkxpbnV4IC9ob21lIiB9LA0KPiArICB7IHsgMHgzQjhGODQyNUwsIDB4 MjBFMCwgMHg0RjNCLCB7IDB4OTAsIDB4N0YsIDB4MUEsIDB4MjUsIDB4QTcsIDB4NkYsIDB4OTgs DQo+IDB4RTggfSB9LCBMIkxpbnV4IC9zcnYgKHNlcnZlciBkYXRhKSIgfSwNCj4gKyAgeyB7IDB4 N0ZGRUM1QzlMLCAweDJEMDAsIDB4NDlCNywgeyAweDg5LCAweDQxLCAweDNFLCAweEExLCAweDBB LCAweDU1LCAweDg2LA0KPiAweEI3IH0gfSwgTCJMaW51eCBQbGFpbiBkbS1jcnlwdCIgfSwNCj4g KyAgeyB7IDB4Q0E3RDdDQ0JMLCAweDYzRUQsIDB4NEM1MywgeyAweDg2LCAweDFDLCAweDE3LCAw eDQyLCAweDUzLCAweDYwLCAweDU5LA0KPiAweENDIH0gfSwgTCJMaW51eCBMVUtTIiB9LA0KPiAr ICB7IHsgMHg4REE2MzMzOUwsIDB4MDAwNywgMHg2MEMwLCB7IDB4QzQsIDB4MzYsIDB4MDgsIDB4 M0EsIDB4QzgsIDB4MjMsIDB4MDksDQo+IDB4MDggfSB9LCBMIkxpbnV4IFJlc2VydmVkIiB9LA0K PiArfTsNCj4gKw0KPiArTUFTVEVSX0JPT1RfUkVDT1JEIFByb3RlY3RpdmVNYnJUZW1wbGF0ZSA9 IHsNCj4gKyAgeyAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvLyBCb29zdFN0cmFwQ29kZSBbNDQwXQ0KPiArICB7IDAgfSwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVuaXF1ZU1iclNpZ25hdHVy ZVs0XSAodW51c2VkKQ0KPiArICB7IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8vIFVua25vd25bMl0NCj4gKw0KPiArICAvLyBQQVJUSVRJT05T DQo+ICsgIHsNCj4gKyAgICAvLyBNQlJfUEFSVElUSU9OX1JFQ09SRA0KPiArICAgIHsNCj4gKyAg ICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g Qm9vdEluZGljYXRvcg0KPiArICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvLyBTdGFydEhlYWQNCj4gKyAgICAgIDB4MSwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RhcnRTZWN0b3INCj4gKyAgICAg IDB4MSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3Rh cnRUcmFjaw0KPiArICAgICAgUE1CUl9HUFRfUEFSVElUSU9OLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvLyBPU0luZGljYXRvcg0KPiArICAgICAgMHhmZiwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFbmRIZWFkDQo+ICsgICAgICAweGZmLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVuZFNlY3Rvcg0K PiArICAgICAgMHhmZiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvLyBFbmRUcmFjaw0KPiArICAgICAgeyAweDEsIDB4MCwgMHgwLCAweDAgfSwgICAgICAgICAg ICAgICAgICAgICAgICAgICAvLyBTdGFydGluZ0xiYVs0XQ0KPiArICAgICAgeyAweGZmLCAweGZm LCAweGZmLCAweGZmIH0sICAgICAgICAgICAgICAgICAgICAgICAvLyBTaXplSW5MYmFbNF0NCj4g KyAgICB9LA0KPiArICAgIHsgMCB9LCB7IDAgfSwgeyAwIH0sICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvLyBVbnVzZWQgcGFydGl0aW9ucw0KPiArICB9LA0KPiArDQo+ICsgIE1CUl9T SUdOQVRVUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNpZ25h dHVyZQ0KPiArfTsNCj4gKw0KPiArU1RBVElDIFVJTlQzMiBDdXJSYW5kID0gMTsNCj4gKw0KPiAr LyoqDQo+ICsgIEdldCByYW5kb20gc2VlZCBiYXNlZCBvbiB0aGUgUlRDDQo+ICsNCj4gKyoqLw0K PiArDQo+ICtTVEFUSUMNCj4gK1ZPSUQNCj4gK1NyYW5kIChWT0lEKQ0KPiArew0KPiArICBFRklf VElNRSAgICAgICAgICAgICAgICAgIFRpbWU7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAg ICAgU2VlZDsNCj4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICBNb25vdG9uaWNDb3VudDsN Cj4gKw0KPiArICBnUlQtPkdldFRpbWUgKCZUaW1lLCBOVUxMKTsNCj4gKyAgU2VlZCA9ICh+VGlt ZS5Ib3VyIDw8IDI0IHwgVGltZS5EYXkgPDwgMTYgfCBUaW1lLk1pbnV0ZSA8PCA4IHwNCj4gVGlt ZS5TZWNvbmQpOw0KPiArICBTZWVkIF49IFRpbWUuTmFub3NlY29uZDsNCj4gKyAgU2VlZCBePSBU aW1lLlllYXIgPDwgNzsNCj4gKw0KPiArICBnQlMtPkdldE5leHRNb25vdG9uaWNDb3VudCAoJk1v bm90b25pY0NvdW50KTsNCj4gKyAgU2VlZCArPSAoVUlOVDMyKU1vbm90b25pY0NvdW50Ow0KPiAr DQo+ICsgIC8qIFN0b3JlIHRoaXMgc2VlZCAqLw0KPiArICBDdXJSYW5kID0gKFVJTlQzMilTZWVk Ow0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgR2V0IGEgcHNldWRvLXJhbmRvbSBudW1iZXINCj4g Kw0KPiArICBAcmV0dmFsIEEgcHNldWRvLXJhbmRvbSBudW1iZXIgaW4gdGhlIHJhbmdlIDAgLSAw eDdmZmYNCj4gKyoqLw0KPiArDQo+ICtTVEFUSUMgVUlOVE4gUmFuZCAoVk9JRCkNCj4gK3sNCj4g KyAgLyogcmV0dXJuIGEgcHNldWRvLXJhbmRvbSBpbiByYW5nZSAwIC0gMHg3ZmZmICovDQo+ICsg IHJldHVybiAoKEN1clJhbmQgPSBDdXJSYW5kICogMjE0MDEzTCArIDI1MzEwMTFMKSA+PiAxNikg JiAweDdmZmY7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBHZW5lcmF0ZSBhIEdVSUQNCj4gKw0K PiArICBAcGFyYW1baW5dICBHdWlkICBBIHBvaW50ZXIgdG8gYSBHVUlEIHJlY2VpdmluZyBhIGdl bmVyYXRlZCB2YWx1ZQ0KPiArKiovDQo+ICsNCj4gK1NUQVRJQyBWT0lEDQo+ICtHZW5lcmF0ZUd1 aWQgKE9VVCBHVUlEICpHdWlkKQ0KPiArew0KPiArICBVSU5UTiBJbmRleDsNCj4gKyAgVUlOVDE2 IEJ1ZmZlcltzaXplb2YoR1VJRCldOw0KPiArDQo+ICsgIC8qIEdlbmVyYXRlcyAxMjggcmFuZG9t IGJpdHMgZm9yIG5ldyBVVUlEICovDQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IHNpemVv ZihHVUlEKTsgSW5kZXgrKykgew0KPiArICAgIFVJTlROIFY7DQo+ICsNCj4gKyAgICBWID0gUmFu ZCAoKSA+PiA3Ow0KPiArICAgIEJ1ZmZlcltJbmRleF0gPSAoVUlOVDE2KVY7DQo+ICsgIH0NCj4g KyAgLyogc2V0IHZhcmlhbnQgMTB4IGFuZCB2ZXJzaW9uIDQgYXMgcmVxdWlyZWQgYnkgUkZDIDQx MjIgKi8NCj4gKyAgQnVmZmVyWzhdID0gMHg4MCB8IChCdWZmZXJbOF0gJiAweDNmKTsNCj4gKyAg QnVmZmVyWzZdID0gMHg0MCB8IChCdWZmZXJbNl0gJiAweGYpOw0KPiArICBDb3B5R3VpZCAoR3Vp ZCwgKENPTlNUIEdVSUQgKilCdWZmZXIpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgQ2xlYW4g dXAgZ2xvYmFscw0KPiArKiovDQo+ICtWT0lEDQo+ICtHcHRDbGVhbnVwR2xvYmFscyAoVk9JRCkN Cj4gK3sNCj4gKyAgU0hFTExfRlJFRV9OT05fTlVMTCAoUHJpbWFyeUhlYWRlcik7DQo+ICsgIFNI RUxMX0ZSRUVfTk9OX05VTEwgKEJhY2t1cEhlYWRlcik7DQo+ICsgIFNIRUxMX0ZSRUVfTk9OX05V TEwgKFBhcnRFbnRyeSk7DQo+ICsgIFNIRUxMX0ZSRUVfTk9OX05VTEwgKFBFbnRyeVN0YXR1cyk7 DQo+ICsgIEdwdFZhbGlkID0gRkFMU0U7DQo+ICsgIE1iclZhbGlkID0gRkFMU0U7DQo+ICt9DQo+ ICsNCj4gKy8qKg0KPiArICBDYXV0aW9uOiBUaGlzIGZ1bmN0aW9uIG1heSByZWNlaXZlIHVudHJ1 c3RlZCBpbnB1dC4NCj4gKyAgVGhlIEdQVCBwYXJ0aXRpb24gdGFibGUgaGVhZGVyIGlzIGV4dGVy bmFsIGlucHV0LCBzbyB0aGlzIHJvdXRpbmUNCj4gKyAgd2lsbCBkbyBiYXNpYyB2YWxpZGF0aW9u IGZvciBHUFQgcGFydGl0aW9uIHRhYmxlIGhlYWRlciBiZWZvcmUgcmV0dXJuLg0KPiArDQo+ICsg IEBwYXJhbVtpbl0gIExiYSAgICAgICAgIFRoZSBzdGFydGluZyBMYmEgb2YgdGhlIFBhcnRpdGlv biBUYWJsZQ0KPiArICBAcGFyYW1bb3V0XSBQYXJ0SGVhZGVyICBTdG9yZXMgdGhlIHBhcnRpdGlv biB0YWJsZSB0aGF0IGlzIHJlYWQNCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICBU aGUgcGFydGl0aW9uIHRhYmxlIGlzIHZhbGlkDQo+ICsgIEByZXR2YWwgRVJST1IgICAgICAgICAg IFRoZSBwYXJ0aXRpb24gdGFibGUgaXMgbm90IHZhbGlkDQo+ICsNCj4gKyoqLw0KPiArU1RBVElD DQo+ICtFRklfU1RBVFVTDQo+ICtQYXJ0aXRpb25WYWxpZEdwdFRhYmxlICgNCj4gKyAgSU4gIEVG SV9MQkEgICAgICAgICAgICAgICAgICAgICBMYmEsDQo+ICsgIE9VVCBFRklfUEFSVElUSU9OX1RB QkxFX0hFQURFUiAgKlBhcnRIZWFkZXINCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIENoZWNr IGlmIHRoZSBDUkMgZmllbGQgaW4gdGhlIFBhcnRpdGlvbiB0YWJsZSBoZWFkZXIgaXMgdmFsaWQN Cj4gKyAgZm9yIFBhcnRpdGlvbiBlbnRyeSBhcnJheS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBQ YXJ0SGVhZGVyICBQYXJ0aXRpb24gdGFibGUgaGVhZGVyIHN0cnVjdHVyZQ0KPiArDQo+ICsgIEBy ZXR2YWwgVFJVRSAgICAgIHRoZSBDUkMgaXMgdmFsaWQNCj4gKyAgQHJldHZhbCBGQUxTRSAgICAg dGhlIENSQyBpcyBpbnZhbGlkDQo+ICsNCj4gKyoqLw0KPiArU1RBVElDDQo+ICtCT09MRUFODQo+ ICtQYXJ0aXRpb25DaGVja0dwdEVudHJ5QXJyYXlDUkMgKA0KPiArICBJTiAgRUZJX1BBUlRJVElP Tl9UQUJMRV9IRUFERVIgICpQYXJ0SGVhZGVyDQo+ICsgICk7DQo+ICsNCj4gKw0KPiArLyoqDQo+ ICsgIFJlc3RvcmUgUGFydGl0aW9uIFRhYmxlIHRvIGl0cyBhbHRlcm5hdGUgcGxhY2UNCj4gKyAg KFByaW1hcnkgLT4gQmFja3VwIG9yIEJhY2t1cCAtPiBQcmltYXJ5KS4NCj4gKw0KPiArICBAcGFy YW1baW5dICBQYXJ0SGVhZGVyICBQYXJ0aXRpb24gdGFibGUgaGVhZGVyIHN0cnVjdHVyZS4NCj4g Kw0KPiArICBAcmV0dmFsIFRSVUUgICAgICBSZXN0b3Jpbmcgc3VjY2VlZHMNCj4gKyAgQHJldHZh bCBGQUxTRSAgICAgUmVzdG9yaW5nIGZhaWxlZA0KPiArDQo+ICsqKi8NCj4gK1NUQVRJQw0KPiAr Qk9PTEVBTg0KPiArUGFydGl0aW9uUmVzdG9yZUdwdFRhYmxlICgNCj4gKyAgSU4gIEVGSV9QQVJU SVRJT05fVEFCTEVfSEVBREVSICAqUGFydEhlYWRlcg0KPiArICApOw0KPiArDQo+ICsNCj4gKy8q Kg0KPiArICBUaGlzIHJvdXRpbmUgd2lsbCBjaGVjayBHUFQgcGFydGl0aW9uIGVudHJ5IGFuZCBy ZXR1cm4gZW50cnkgc3RhdHVzLg0KPiArDQo+ICsgIENhdXRpb246IFRoaXMgZnVuY3Rpb24gbWF5 IHJlY2VpdmUgdW50cnVzdGVkIGlucHV0Lg0KPiArICBUaGUgR1BUIHBhcnRpdGlvbiBlbnRyeSBp cyBleHRlcm5hbCBpbnB1dCwgc28gdGhpcyByb3V0aW5lDQo+ICsgIHdpbGwgZG8gYmFzaWMgdmFs aWRhdGlvbiBmb3IgR1BUIHBhcnRpdGlvbiBlbnRyeSBhbmQgcmVwb3J0IHN0YXR1cy4NCj4gKw0K PiArICBAcGFyYW1baW5dICAgIFBhcnRIZWFkZXIgICAgUGFydGl0aW9uIHRhYmxlIGhlYWRlciBz dHJ1Y3R1cmUNCj4gKyAgQHBhcmFtW2luXSAgICBQYXJ0RW50cnkgICAgIFRoZSBwYXJ0aXRpb24g ZW50cnkgYXJyYXkNCj4gKyAgQHBhcmFtW291dF0gICBQRW50cnlTdGF0dXMgIHRoZSBwYXJ0aXRp b24gZW50cnkgc3RhdHVzIGFycmF5DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZWNvcmRpbmcgdGhlIHN0YXR1cyBvZiBlYWNoIHBhcnRpdGlvbg0KPiArDQo+ICsqKi8NCj4gK1NU QVRJQw0KPiArVk9JRA0KPiArUGFydGl0aW9uQ2hlY2tHcHRFbnRyeSAoDQo+ICsgIElOICBFRklf UEFSVElUSU9OX1RBQkxFX0hFQURFUiAgKlBhcnRIZWFkZXIsDQo+ICsgIElOICBFRklfUEFSVElU SU9OX0VOVFJZICAgICAgICAgKlBhcnRFbnRyeSwNCj4gKyAgT1VUIEVGSV9QQVJUSVRJT05fRU5U UllfU1RBVFVTICAqUEVudHJ5U3RhdHVzDQo+ICsgICk7DQo+ICsNCj4gKw0KPiArLyoqDQo+ICsg IENoZWNrcyB0aGUgQ1JDMzIgdmFsdWUgaW4gdGhlIHRhYmxlIGhlYWRlci4NCj4gKw0KPiArICBA cGFyYW0gIE1heFNpemUgICBNYXggU2l6ZSBsaW1pdA0KPiArICBAcGFyYW0gIFNpemUgICAgICBU aGUgc2l6ZSBvZiB0aGUgdGFibGUNCj4gKyAgQHBhcmFtICBIZHIgICAgICAgVGFibGUgdG8gY2hl Y2sNCj4gKw0KPiArICBAcmV0dXJuIFRSVUUgICAgQ1JDIFZhbGlkDQo+ICsgIEByZXR1cm4gRkFM U0UgICBDUkMgSW52YWxpZA0KPiArDQo+ICsqKi8NCj4gK1NUQVRJQw0KPiArQk9PTEVBTg0KPiAr UGFydGl0aW9uQ2hlY2tDcmNBbHRTaXplICgNCj4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAg IE1heFNpemUsDQo+ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICBTaXplLA0KPiArICBJTiBP VVQgRUZJX1RBQkxFX0hFQURFUiAgKkhkcg0KPiArICApOw0KPiArDQo+ICsNCj4gKy8qKg0KPiAr ICBDaGVja3MgdGhlIENSQzMyIHZhbHVlIGluIHRoZSB0YWJsZSBoZWFkZXIuDQo+ICsNCj4gKyAg QHBhcmFtICBNYXhTaXplICAgTWF4IFNpemUgbGltaXQNCj4gKyAgQHBhcmFtICBIZHIgICAgICAg VGFibGUgdG8gY2hlY2sNCj4gKw0KPiArICBAcmV0dXJuIFRSVUUgICAgICBDUkMgVmFsaWQNCj4g KyAgQHJldHVybiBGQUxTRSAgICAgQ1JDIEludmFsaWQNCj4gKw0KPiArKiovDQo+ICtTVEFUSUMN Cj4gK0JPT0xFQU4NCj4gK1BhcnRpdGlvbkNoZWNrQ3JjICgNCj4gKyAgSU4gVUlOVE4gICAgICAg ICAgICAgICAgIE1heFNpemUsDQo+ICsgIElOIE9VVCBFRklfVEFCTEVfSEVBREVSICAqSGRyDQo+ ICsgICk7DQo+ICsNCj4gKw0KPiArLyoqDQo+ICsgIFVwZGF0ZXMgdGhlIENSQzMyIHZhbHVlIGlu IHRoZSB0YWJsZSBoZWFkZXIuDQo+ICsNCj4gKyAgQHBhcmFtICBTaXplICAgVGhlIHNpemUgb2Yg dGhlIHRhYmxlDQo+ICsgIEBwYXJhbSAgSGRyICAgIFRhYmxlIHRvIHVwZGF0ZQ0KPiArDQo+ICsq Ki8NCj4gK1NUQVRJQw0KPiArVk9JRA0KPiArUGFydGl0aW9uU2V0Q3JjQWx0U2l6ZSAoDQo+ICsg IElOIFVJTlROICAgICAgICAgICAgICAgICBTaXplLA0KPiArICBJTiBPVVQgRUZJX1RBQkxFX0hF QURFUiAgKkhkcg0KPiArICApOw0KPiArDQo+ICsNCj4gKy8qKg0KPiArICBVcGRhdGVzIHRoZSBD UkMzMiB2YWx1ZSBpbiB0aGUgdGFibGUgaGVhZGVyLg0KPiArDQo+ICsgIEBwYXJhbSAgSGRyICAg IFRhYmxlIHRvIHVwZGF0ZQ0KPiArDQo+ICsqKi8NCj4gK1NUQVRJQw0KPiArVk9JRA0KPiArUGFy dGl0aW9uU2V0Q3JjICgNCj4gKyAgSU4gT1VUIEVGSV9UQUJMRV9IRUFERVIgKkhkcg0KPiArICAp Ow0KPiArDQo+ICsNCj4gKy8qKg0KPiArICBHZXQgR1BUIHRhYmxlcy4NCj4gKw0KPiArICBDYXV0 aW9uOiBUaGlzIGZ1bmN0aW9uIG1heSByZWNlaXZlIHVudHJ1c3RlZCBpbnB1dC4NCj4gKyAgVGhl IEdQVCBwYXJ0aXRpb24gdGFibGUgaXMgZXh0ZXJuYWwgaW5wdXQsIHNvIHRoaXMgcm91dGluZQ0K PiArICB3aWxsIGRvIGJhc2ljIHZhbGlkYXRpb24gZm9yIEdQVCBwYXJ0aXRpb24gdGFibGUgYmVm b3JlIGluc3RhbGwNCj4gKyAgY2hpbGQgaGFuZGxlIGZvciBlYWNoIEdQVCBwYXJ0aXRpb24uDQo+ ICsNCj4gKyAgQHBhcmFtW2luXSAgRGlza0lvUHJvdCAgICAgRGlza0lvIGludGVyZmFjZS4NCj4g KyAgQHBhcmFtW2luXSAgQmxvY2tJb1Byb3QgICAgQmxvY2tJbyBpbnRlcmZhY2UuDQo+ICsNCj4g KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgVmFsaWQgR1BUIGRpc2suDQo+ICsgIEBy ZXR2YWwgRUZJX01FRElBX0NIQU5HRUQgICAgIE1lZGlhIGNoYW5nZWQgRGV0ZWN0ZWQuDQo+ICsg IEByZXR2YWwgb3RoZXIgICAgICAgICAgICAgICAgIE5vdCBhIHZhbGlkIEdQVCBkaXNrLg0KPiAr DQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1BhcnRpdGlvbkdldEdwdFRhYmxlcyAoDQo+ICsg IElOICBFRklfRElTS19JT19QUk9UT0NPTCAgICAgICAgICpEaXNrSW9Qcm90LA0KPiArICBJTiAg RUZJX0JMT0NLX0lPX1BST1RPQ09MICAgICAgICAqQmxvY2tJb1Byb3QNCj4gKyAgKQ0KPiArew0K PiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBVSU5UMzIgICAg ICAgICAgICAgICAgICAgICAgQmxvY2tTaXplOw0KPiArICBFRklfTEJBICAgICAgICAgICAgICAg ICAgICAgTGFzdEJsb2NrOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7 DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICBHcHRWYWxpZFN0YXR1czsNCj4gKyAg VUlOVDMyICAgICAgICAgICAgICAgICAgICAgIE1lZGlhSWQ7DQo+ICsgIE1BU1RFUl9CT09UX1JF Q09SRCAgICAgICAgICAqUHJvdGVjdGl2ZU1icjsNCj4gKw0KPiArICAvLyBDbGVhciBsZWZ0b3Zl cnMNCj4gKyAgR3B0Q2xlYW51cEdsb2JhbHMgKCk7DQo+ICsNCj4gKyAgTWJyVmFsaWQgPSBGQUxT RTsNCj4gKyAgR3B0VmFsaWQgPSBGQUxTRTsNCj4gKw0KPiArICBQcm90ZWN0aXZlTWJyID0gTlVM TDsNCj4gKw0KPiArICBCbG9ja0lvICAgICAgID0gQmxvY2tJb1Byb3Q7DQo+ICsgIERpc2tJbyAg ICAgICAgPSBEaXNrSW9Qcm90Ow0KPiArDQo+ICsgIGlmIChDdXJSYW5kID09IDEpIHsNCj4gKyAg ICBTcmFuZCAoKTsNCj4gKyAgfQ0KPiArDQo+ICsgIEJsb2NrU2l6ZSAgICAgPSBCbG9ja0lvLT5N ZWRpYS0+QmxvY2tTaXplOw0KPiArICBMYXN0QmxvY2sgICAgID0gQmxvY2tJby0+TWVkaWEtPkxh c3RCbG9jazsNCj4gKyAgTWVkaWFJZCAgICAgICA9IEJsb2NrSW8tPk1lZGlhLT5NZWRpYUlkOw0K PiArDQo+ICsgIERFQlVHICgoRUZJX0RfVkVSQk9TRSwgIiBCbG9ja1NpemUgOiAlZCBcbiIsIEJs b2NrU2l6ZSkpOw0KPiArICBERUJVRyAoKEVGSV9EX1ZFUkJPU0UsICIgTGFzdEJsb2NrIDogJWx4 IFxuIiwgTGFzdEJsb2NrKSk7DQo+ICsNCj4gKyAgR3B0VmFsaWRTdGF0dXMgPSBFRklfTk9UX0ZP VU5EOw0KPiArICBHcHRWYWxpZCAgICAgICA9IEZBTFNFOw0KPiArICBNYnJWYWxpZCAgICAgICA9 IEZBTFNFOw0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIEFsbG9jYXRlIGEgYnVmZmVyIGZvciB0aGUg UHJvdGVjdGl2ZSBNQlINCj4gKyAgLy8NCj4gKyAgUHJvdGVjdGl2ZU1iciA9IEFsbG9jYXRlUG9v bCAoQmxvY2tTaXplKTsNCj4gKyAgaWYgKFByb3RlY3RpdmVNYnIgPT0gTlVMTCkgew0KPiArICAg IHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsg IC8vIFJlYWQgdGhlIFByb3RlY3RpdmUgTUJSIGZyb20gTEJBICMwDQo+ICsgIC8vDQo+ICsgIFN0 YXR1cyA9IERpc2tJby0+UmVhZERpc2sgKA0KPiArICAgIERpc2tJbywNCj4gKyAgICBNZWRpYUlk LA0KPiArICAgIDAsDQo+ICsgICAgQmxvY2tTaXplLA0KPiArICAgIFByb3RlY3RpdmVNYnINCj4g KyAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgR3B0VmFsaWRT dGF0dXMgPSBTdGF0dXM7DQo+ICsgICAgZ290byBEb25lOw0KPiArICB9DQo+ICsNCj4gKyAgLy8N Cj4gKyAgLy8gVmVyaWZ5IHRoYXQgdGhlIFByb3RlY3RpdmUgTUJSIGlzIHZhbGlkDQo+ICsgIC8v DQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IE1BWF9NQlJfUEFSVElUSU9OUzsgSW5kZXgr Kykgew0KPiArICAgIGlmIChQcm90ZWN0aXZlTWJyLT5QYXJ0aXRpb25bSW5kZXhdLkJvb3RJbmRp Y2F0b3IgPT0gMHgwMCAmJg0KPiArICAgICAgICBQcm90ZWN0aXZlTWJyLT5QYXJ0aXRpb25bSW5k ZXhdLk9TSW5kaWNhdG9yID09DQo+IFBNQlJfR1BUX1BBUlRJVElPTiAmJg0KPiArICAgICAgICBV TlBBQ0tfVUlOVDMyIChQcm90ZWN0aXZlTWJyLT5QYXJ0aXRpb25bSW5kZXhdLlN0YXJ0aW5nTEJB KSA9PSAxDQo+ICsgICAgICAgKSB7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICB9DQo+ICsgIH0N Cj4gKyAgaWYgKEluZGV4ID09IE1BWF9NQlJfUEFSVElUSU9OUykgew0KPiArICAgIGdvdG8gRG9u ZTsNCj4gKyAgfQ0KPiArDQo+ICsgIE1iclZhbGlkID0gVFJVRTsNCj4gKw0KPiArICAvLw0KPiAr ICAvLyBBbGxvY2F0ZSB0aGUgR1BUIHN0cnVjdHVyZXMNCj4gKyAgLy8NCj4gKyAgUHJpbWFyeUhl YWRlciA9IEFsbG9jYXRlWmVyb1Bvb2wNCj4gKHNpemVvZihFRklfUEFSVElUSU9OX1RBQkxFX0hF QURFUikpOw0KPiArICBpZiAoUHJpbWFyeUhlYWRlciA9PSBOVUxMKSB7DQo+ICsgICAgZ290byBE b25lOw0KPiArICB9DQo+ICsNCj4gKyAgQmFja3VwSGVhZGVyID0gQWxsb2NhdGVaZXJvUG9vbA0K PiAoc2l6ZW9mKEVGSV9QQVJUSVRJT05fVEFCTEVfSEVBREVSKSk7DQo+ICsgIGlmIChCYWNrdXBI ZWFkZXIgPT0gTlVMTCkgew0KPiArICAgIGdvdG8gRG9uZTsNCj4gKyAgfQ0KPiArDQo+ICsgIC8v DQo+ICsgIC8vIENoZWNrIHByaW1hcnkgYW5kIGJhY2t1cCBwYXJ0aXRpb24gdGFibGVzDQo+ICsg IC8vDQo+ICsgIFN0YXR1cyA9IFBhcnRpdGlvblZhbGlkR3B0VGFibGUgKFBSSU1BUllfUEFSVF9I RUFERVJfTEJBLA0KPiBQcmltYXJ5SGVhZGVyKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPiArICAgIERFQlVHICgoRUZJX0RfSU5GTywgIiBOb3QgVmFsaWQgcHJpbWFyeSBwYXJ0 aXRpb24gdGFibGVcbiIpKTsNCj4gKw0KPiArICAgIFN0YXR1cyA9IFBhcnRpdGlvblZhbGlkR3B0 VGFibGUgKExhc3RCbG9jaywgQmFja3VwSGVhZGVyKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+ICsgICAgICBERUJVRyAoKEVGSV9EX0lORk8sICIgTm90IFZhbGlkIGJhY2t1 cCBwYXJ0aXRpb24gdGFibGVcbiIpKTsNCj4gKyAgICAgIGdvdG8gRG9uZTsNCj4gKyAgICB9IGVs c2Ugew0KPiArICAgICAgREVCVUcgKChFRklfRF9JTkZPLCAiIFZhbGlkIGJhY2t1cCBwYXJ0aXRp b24gdGFibGVcbiIpKTsNCj4gKyAgICAgIERFQlVHICgoRUZJX0RfSU5GTywgIiBSZXN0b3JlIHBy aW1hcnkgcGFydGl0aW9uIHRhYmxlIGJ5IHRoZQ0KPiBiYWNrdXBcbiIpKTsNCj4gKyAgICAgIGlm ICghUGFydGl0aW9uUmVzdG9yZUdwdFRhYmxlIChCYWNrdXBIZWFkZXIpKSB7DQo+ICsgICAgICAg IERFQlVHICgoRUZJX0RfSU5GTywgIiBSZXN0b3JlIHByaW1hcnkgcGFydGl0aW9uIHRhYmxlIGVy cm9yXG4iKSk7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIFN0YXR1cyA9IFBhcnRpdGlvblZh bGlkR3B0VGFibGUgKEJhY2t1cEhlYWRlci0+QWx0ZXJuYXRlTEJBLA0KPiBQcmltYXJ5SGVhZGVy KTsNCj4gKyAgICAgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICAgIERFQlVH ICgoRUZJX0RfSU5GTywgIiBSZXN0b3JlIGJhY2t1cCBwYXJ0aXRpb24gdGFibGUgc3VjY2Vzc1xu IikpOw0KPiArICAgICAgfQ0KPiArICAgIH0NCj4gKyAgfSBlbHNlIGlmIChFRklfRVJST1IgKFBh cnRpdGlvblZhbGlkR3B0VGFibGUgKFByaW1hcnlIZWFkZXItDQo+ID5BbHRlcm5hdGVMQkEsIEJh Y2t1cEhlYWRlcikpKSB7DQo+ICsgICAgREVCVUcgKChFRklfRF9JTkZPLCAiIFZhbGlkIHByaW1h cnkgYW5kICFWYWxpZCBiYWNrdXAgcGFydGl0aW9uDQo+IHRhYmxlXG4iKSk7DQo+ICsgICAgREVC VUcgKChFRklfRF9JTkZPLCAiIFJlc3RvcmUgYmFja3VwIHBhcnRpdGlvbiB0YWJsZSBieSB0aGUN Cj4gcHJpbWFyeVxuIikpOw0KPiArICAgIGlmICghUGFydGl0aW9uUmVzdG9yZUdwdFRhYmxlIChQ cmltYXJ5SGVhZGVyKSkgew0KPiArICAgICAgREVCVUcgKChFRklfRF9JTkZPLCAiIFJlc3RvcmUg YmFja3VwIHBhcnRpdGlvbiB0YWJsZSBlcnJvclxuIikpOw0KPiArICAgIH0NCj4gKw0KPiArICAg IFN0YXR1cyA9IFBhcnRpdGlvblZhbGlkR3B0VGFibGUgKFByaW1hcnlIZWFkZXItPkFsdGVybmF0 ZUxCQSwNCj4gQmFja3VwSGVhZGVyKTsNCj4gKyAgICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPiArICAgICAgREVCVUcgKChFRklfRF9JTkZPLCAiIFJlc3RvcmUgYmFja3VwIHBhcnRpdGlv biB0YWJsZSBzdWNjZXNzXG4iKSk7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgREVCVUcg KChFRklfRF9WRVJCT1NFLCAiIFZhbGlkIHByaW1hcnkgYW5kIFZhbGlkIGJhY2t1cCBwYXJ0aXRp b24NCj4gdGFibGVcbiIpKTsNCj4gKw0KPiArICAvLw0KPiArICAvLyBSZWFkIHRoZSBFRkkgUGFy dGl0aW9uIEVudHJpZXMNCj4gKyAgLy8NCj4gKyAgUGFydEVudHJ5ID0gQWxsb2NhdGVQb29sIChQ cmltYXJ5SGVhZGVyLT5OdW1iZXJPZlBhcnRpdGlvbkVudHJpZXMgKg0KPiBQcmltYXJ5SGVhZGVy LT5TaXplT2ZQYXJ0aXRpb25FbnRyeSk7DQo+ICsgIGlmIChQYXJ0RW50cnkgPT0gTlVMTCkgew0K PiArICAgIERFQlVHICgoRUZJX0RfRVJST1IsICJBbGxvY2F0ZSBwb29sIGVycm9yXG4iKSk7DQo+ ICsgICAgZ290byBEb25lOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gRGlza0lvLT5SZWFk RGlzayAoDQo+ICsgICAgRGlza0lvLA0KPiArICAgIE1lZGlhSWQsDQo+ICsgICAgTXVsdFU2NHgz MiAoUHJpbWFyeUhlYWRlci0+UGFydGl0aW9uRW50cnlMQkEsIEJsb2NrU2l6ZSksDQo+ICsgICAg UHJpbWFyeUhlYWRlci0+TnVtYmVyT2ZQYXJ0aXRpb25FbnRyaWVzICogKFByaW1hcnlIZWFkZXIt DQo+ID5TaXplT2ZQYXJ0aXRpb25FbnRyeSksDQo+ICsgICAgUGFydEVudHJ5DQo+ICsgICAgKTsN Cj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIEdwdFZhbGlkU3RhdHVzID0g U3RhdHVzOw0KPiArICAgIERFQlVHICgoRUZJX0RfRVJST1IsICIgUGFydGl0aW9uIEVudHJ5IFJl YWREaXNrIGVycm9yXG4iKSk7DQo+ICsgICAgZ290byBEb25lOw0KPiArICB9DQo+ICsNCj4gKyAg REVCVUcgKChFRklfRF9WRVJCT1NFLCAiIFBhcnRpdGlvbiBlbnRyaWVzIHJlYWQgYmxvY2sgc3Vj Y2Vzc1xuIikpOw0KPiArDQo+ICsgIERFQlVHICgoRUZJX0RfVkVSQk9TRSwgIiBOdW1iZXIgb2Yg cGFydGl0aW9uIGVudHJpZXM6ICVkXG4iLA0KPiBQcmltYXJ5SGVhZGVyLT5OdW1iZXJPZlBhcnRp dGlvbkVudHJpZXMpKTsNCj4gKw0KPiArICBQRW50cnlTdGF0dXMgPSBBbGxvY2F0ZVplcm9Qb29s IChQcmltYXJ5SGVhZGVyLQ0KPiA+TnVtYmVyT2ZQYXJ0aXRpb25FbnRyaWVzICogc2l6ZW9mKEVG SV9QQVJUSVRJT05fRU5UUllfU1RBVFVTKSk7DQo+ICsgIGlmIChQRW50cnlTdGF0dXMgPT0gTlVM TCkgew0KPiArICAgIERFQlVHICgoRUZJX0RfRVJST1IsICJBbGxvY2F0ZSBwb29sIGVycm9yXG4i KSk7DQo+ICsgICAgZ290byBEb25lOw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gQ2hl Y2sgdGhlIGludGVncml0eSBvZiBwYXJ0aXRpb24gZW50cmllcw0KPiArICAvLw0KPiArICBQYXJ0 aXRpb25DaGVja0dwdEVudHJ5IChQcmltYXJ5SGVhZGVyLCBQYXJ0RW50cnksIFBFbnRyeVN0YXR1 cyk7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gSWYgd2UgZ290IHRoaXMgZmFyIHRoZSBHUFQgbGF5 b3V0IG9mIHRoZSBkaXNrIGlzIHZhbGlkIGFuZCB3ZSBzaG91bGQgcmV0dXJuDQo+IHRydWUNCj4g KyAgLy8NCj4gKyAgR3B0VmFsaWRTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCj4gKw0KPiArIERvbmU6 DQo+ICsgIFNIRUxMX0ZSRUVfTk9OX05VTEwgKFByb3RlY3RpdmVNYnIpOw0KPiArICBpZiAoRUZJ X0VSUk9SIChHcHRWYWxpZFN0YXR1cykpIHsNCj4gKyAgICBTSEVMTF9GUkVFX05PTl9OVUxMIChQ cmltYXJ5SGVhZGVyKTsNCj4gKyAgICBTSEVMTF9GUkVFX05PTl9OVUxMIChCYWNrdXBIZWFkZXIp Ow0KPiArICAgIFNIRUxMX0ZSRUVfTk9OX05VTEwgKFBhcnRFbnRyeSk7DQo+ICsgICAgU0hFTExf RlJFRV9OT05fTlVMTCAoUEVudHJ5U3RhdHVzKTsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBHcHRW YWxpZCA9IFRSVUU7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gR3B0VmFsaWRTdGF0dXM7DQo+ ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIHJvdXRpbmUgd2lsbCByZWFkIEdQVCBwYXJ0aXRp b24gdGFibGUgaGVhZGVyIGFuZCByZXR1cm4gaXQuDQo+ICsNCj4gKyAgQ2F1dGlvbjogVGhpcyBm dW5jdGlvbiBtYXkgcmVjZWl2ZSB1bnRydXN0ZWQgaW5wdXQuDQo+ICsgIFRoZSBHUFQgcGFydGl0 aW9uIHRhYmxlIGhlYWRlciBpcyBleHRlcm5hbCBpbnB1dCwgc28gdGhpcyByb3V0aW5lDQo+ICsg IHdpbGwgZG8gYmFzaWMgdmFsaWRhdGlvbiBmb3IgR1BUIHBhcnRpdGlvbiB0YWJsZSBoZWFkZXIg YmVmb3JlIHJldHVybi4NCj4gKw0KPiArICBAcGFyYW1baW5dICBMYmEgICAgICAgICBUaGUgc3Rh cnRpbmcgTGJhIG9mIHRoZSBQYXJ0aXRpb24gVGFibGUNCj4gKyAgQHBhcmFtW291dF0gUGFydEhl YWRlciAgU3RvcmVzIHRoZSBwYXJ0aXRpb24gdGFibGUgdGhhdCBpcyByZWFkDQo+ICsNCj4gKyAg QHJldHZhbCBUUlVFICAgICAgVGhlIHBhcnRpdGlvbiB0YWJsZSBpcyB2YWxpZA0KPiArICBAcmV0 dmFsIEZBTFNFICAgICBUaGUgcGFydGl0aW9uIHRhYmxlIGlzIG5vdCB2YWxpZA0KPiArDQo+ICsq Ki8NCj4gK1NUQVRJQw0KPiArRUZJX1NUQVRVUw0KPiArUGFydGl0aW9uVmFsaWRHcHRUYWJsZSAo DQo+ICsgIElOICBFRklfTEJBICAgICAgICAgICAgICAgICAgICAgTGJhLA0KPiArICBPVVQgRUZJ X1BBUlRJVElPTl9UQUJMRV9IRUFERVIgICpQYXJ0SGVhZGVyDQo+ICsgICkNCj4gK3sNCj4gKyAg RUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgVUlOVDMyICAgICAgICAg ICAgICAgICAgICAgIEJsb2NrU2l6ZTsNCj4gKyAgRUZJX1BBUlRJVElPTl9UQUJMRV9IRUFERVIg ICpQYXJ0SGRyOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgTWVkaWFJZDsNCj4g Kw0KPiArICBCbG9ja1NpemUgPSBCbG9ja0lvLT5NZWRpYS0+QmxvY2tTaXplOw0KPiArICBNZWRp YUlkICAgPSBCbG9ja0lvLT5NZWRpYS0+TWVkaWFJZDsNCj4gKyAgUGFydEhkciAgID0gQWxsb2Nh dGVaZXJvUG9vbCAoQmxvY2tTaXplKTsNCj4gKw0KPiArICBpZiAoUGFydEhkciA9PSBOVUxMKSB7 DQo+ICsgICAgREVCVUcgKChFRklfRF9FUlJPUiwgIkFsbG9jYXRlIHBvb2wgZXJyb3JcbiIpKTsN Cj4gKyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgIH0NCj4gKyAgLy8NCj4g KyAgLy8gUmVhZCB0aGUgRUZJIFBhcnRpdGlvbiBUYWJsZSBIZWFkZXINCj4gKyAgLy8NCj4gKyAg U3RhdHVzID0gRGlza0lvLT5SZWFkRGlzayAoDQo+ICsgICAgRGlza0lvLA0KPiArICAgIE1lZGlh SWQsDQo+ICsgICAgTXVsdFU2NHgzMiAoTGJhLCBCbG9ja1NpemUpLA0KPiArICAgIEJsb2NrU2l6 ZSwNCj4gKyAgICBQYXJ0SGRyDQo+ICsgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPiArICAgIEZyZWVQb29sIChQYXJ0SGRyKTsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0K PiArICB9DQo+ICsNCj4gKyAgaWYgKChQYXJ0SGRyLT5IZWFkZXIuU2lnbmF0dXJlICE9IEVGSV9Q VEFCX0hFQURFUl9JRCkgfHwNCj4gKyAgICAgICFQYXJ0aXRpb25DaGVja0NyYyAoQmxvY2tTaXpl LCAmUGFydEhkci0+SGVhZGVyKSB8fA0KPiArICAgICAgUGFydEhkci0+TXlMQkEgIT0gTGJhIHx8 DQo+ICsgICAgICAoUGFydEhkci0+U2l6ZU9mUGFydGl0aW9uRW50cnkgPCBzaXplb2YoRUZJX1BB UlRJVElPTl9FTlRSWSkpDQo+ICsgICAgICkgew0KPiArICAgIERFQlVHICgoRUZJX0RfRVJST1Is ICJJbnZhbGlkIGVmaSBwYXJ0aXRpb24gdGFibGUgaGVhZGVyXG4iKSk7DQo+ICsgICAgRnJlZVBv b2wgKFBhcnRIZHIpOw0KPiArICAgIHJldHVybiBFRklfVk9MVU1FX0NPUlJVUFRFRDsNCj4gKyAg fQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIEVuc3VyZSB0aGUgTnVtYmVyT2ZQYXJ0aXRpb25FbnRy aWVzICogU2l6ZU9mUGFydGl0aW9uRW50cnkgZG9lc24ndA0KPiBvdmVyZmxvdy4NCj4gKyAgLy8N Cj4gKyAgaWYgKFBhcnRIZHItPk51bWJlck9mUGFydGl0aW9uRW50cmllcyA+IERpdlU2NHgzMiAo TUFYX1VJTlROLA0KPiBQYXJ0SGRyLT5TaXplT2ZQYXJ0aXRpb25FbnRyeSkpIHsNCj4gKyAgICBG cmVlUG9vbCAoUGFydEhkcik7DQo+ICsgICAgcmV0dXJuIEVGSV9WT0xVTUVfQ09SUlVQVEVEOw0K PiArICB9DQo+ICsNCj4gKyAgQ29weU1lbSAoUGFydEhlYWRlciwgUGFydEhkciwgc2l6ZW9mKEVG SV9QQVJUSVRJT05fVEFCTEVfSEVBREVSKSk7DQo+ICsgIGlmICghUGFydGl0aW9uQ2hlY2tHcHRF bnRyeUFycmF5Q1JDIChQYXJ0SGVhZGVyKSkgew0KPiArICAgIEZyZWVQb29sIChQYXJ0SGRyKTsN Cj4gKyAgICByZXR1cm4gRUZJX1ZPTFVNRV9DT1JSVVBURUQ7DQo+ICsgIH0NCj4gKw0KPiArICBE RUJVRyAoKEVGSV9EX1ZFUkJPU0UsICIgVmFsaWQgZWZpIHBhcnRpdGlvbiB0YWJsZSBoZWFkZXJc biIpKTsNCj4gKyAgRnJlZVBvb2wgKFBhcnRIZHIpOw0KPiArDQo+ICsgIHJldHVybiBFRklfU1VD Q0VTUzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIENoZWNrIGlmIHRoZSBDUkMgZmllbGQgaW4g dGhlIFBhcnRpdGlvbiB0YWJsZSBoZWFkZXIgaXMgdmFsaWQNCj4gKyAgZm9yIFBhcnRpdGlvbiBl bnRyeSBhcnJheS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBQYXJ0SGVhZGVyICBQYXJ0aXRpb24g dGFibGUgaGVhZGVyIHN0cnVjdHVyZQ0KPiArDQo+ICsgIEByZXR2YWwgVFJVRSAgICAgIHRoZSBD UkMgaXMgdmFsaWQNCj4gKyAgQHJldHZhbCBGQUxTRSAgICAgdGhlIENSQyBpcyBpbnZhbGlkDQo+ ICsNCj4gKyoqLw0KPiArU1RBVElDDQo+ICtCT09MRUFODQo+ICtQYXJ0aXRpb25DaGVja0dwdEVu dHJ5QXJyYXlDUkMgKA0KPiArICBJTiAgRUZJX1BBUlRJVElPTl9UQUJMRV9IRUFERVIgICpQYXJ0 SGVhZGVyDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiArICBVSU5U OCAgICAgICAqUHRyOw0KPiArICBVSU5UMzIgICAgICBDcmM7DQo+ICsgIFVJTlROICAgICAgIFNp emU7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gUmVhZCB0aGUgRUZJIFBhcnRpdGlvbiBFbnRyaWVz DQo+ICsgIC8vDQo+ICsgIFB0ciA9IEFsbG9jYXRlUG9vbCAoUGFydEhlYWRlci0+TnVtYmVyT2ZQ YXJ0aXRpb25FbnRyaWVzICogUGFydEhlYWRlci0NCj4gPlNpemVPZlBhcnRpdGlvbkVudHJ5KTsN Cj4gKyAgaWYgKFB0ciA9PSBOVUxMKSB7DQo+ICsgICAgREVCVUcgKChFRklfRF9FUlJPUiwgIiBB bGxvY2F0ZSBwb29sIGVycm9yXG4iKSk7DQo+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiArICB9DQo+ ICsNCj4gKyAgU3RhdHVzID0gRGlza0lvLT5SZWFkRGlzayAoDQo+ICsgICAgRGlza0lvLA0KPiAr ICAgIEJsb2NrSW8tPk1lZGlhLT5NZWRpYUlkLA0KPiArICAgIE11bHRVNjR4MzIgKFBhcnRIZWFk ZXItPlBhcnRpdGlvbkVudHJ5TEJBLCBCbG9ja0lvLT5NZWRpYS0+QmxvY2tTaXplKSwNCj4gKyAg ICBQYXJ0SGVhZGVyLT5OdW1iZXJPZlBhcnRpdGlvbkVudHJpZXMgKiBQYXJ0SGVhZGVyLQ0KPiA+ U2l6ZU9mUGFydGl0aW9uRW50cnksDQo+ICsgICAgUHRyDQo+ICsgICAgKTsNCj4gKyAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIEZyZWVQb29sIChQdHIpOw0KPiArICAgIHJldHVy biBGQUxTRTsNCj4gKyAgfQ0KPiArDQo+ICsgIFNpemUgICAgPSBQYXJ0SGVhZGVyLT5OdW1iZXJP ZlBhcnRpdGlvbkVudHJpZXMgKiBQYXJ0SGVhZGVyLQ0KPiA+U2l6ZU9mUGFydGl0aW9uRW50cnk7 DQo+ICsNCj4gKyAgU3RhdHVzICA9IGdCUy0+Q2FsY3VsYXRlQ3JjMzIgKFB0ciwgU2l6ZSwgJkNy Yyk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBERUJVRyAoKEVGSV9E X0VSUk9SLCAiQ2hlY2tQRW50cnlBcnJheUNSQzogQ3JjIGNhbGN1bGF0aW9uIGZhaWxlZFxuIikp Ow0KPiArICAgIEZyZWVQb29sIChQdHIpOw0KPiArICAgIHJldHVybiBGQUxTRTsNCj4gKyAgfQ0K PiArDQo+ICsgIEZyZWVQb29sIChQdHIpOw0KPiArDQo+ICsgIHJldHVybiAoQk9PTEVBTikoUGFy dEhlYWRlci0+UGFydGl0aW9uRW50cnlBcnJheUNSQzMyID09IENyYyk7DQo+ICt9DQo+ICsNCj4g Kw0KPiArLyoqDQo+ICsgIFJlc3RvcmUgUGFydGl0aW9uIFRhYmxlIHRvIGl0cyBhbHRlcm5hdGUg cGxhY2UNCj4gKyAgKFByaW1hcnkgLT4gQmFja3VwIG9yIEJhY2t1cCAtPiBQcmltYXJ5KS4NCj4g Kw0KPiArICBAcGFyYW1baW5dICBQYXJ0SGVhZGVyICBQYXJ0aXRpb24gdGFibGUgaGVhZGVyIHN0 cnVjdHVyZS4NCj4gKw0KPiArICBAcmV0dmFsIFRSVUUgICAgICBSZXN0b3Jpbmcgc3VjY2VlZHMN Cj4gKyAgQHJldHZhbCBGQUxTRSAgICAgUmVzdG9yaW5nIGZhaWxlZA0KPiArDQo+ICsqKi8NCj4g K1NUQVRJQw0KPiArQk9PTEVBTg0KPiArUGFydGl0aW9uUmVzdG9yZUdwdFRhYmxlICgNCj4gKyAg SU4gIEVGSV9QQVJUSVRJT05fVEFCTEVfSEVBREVSICAqUGFydEhlYWRlcg0KPiArICApDQo+ICt7 DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIFVJTlROICAg ICAgICAgICAgICAgICAgICAgICBCbG9ja1NpemU7DQo+ICsgIEVGSV9QQVJUSVRJT05fVEFCTEVf SEVBREVSICAqUGFydEhkcjsNCj4gKyAgRUZJX0xCQSAgICAgICAgICAgICAgICAgICAgIFBFbnRy eUxCQTsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICpQdHI7DQo+ICsgIFVJTlQz MiAgICAgICAgICAgICAgICAgICAgICBNZWRpYUlkOw0KPiArDQo+ICsgIFBhcnRIZHIgICA9IE5V TEw7DQo+ICsgIFB0ciAgICAgICA9IE5VTEw7DQo+ICsNCj4gKyAgQmxvY2tTaXplID0gQmxvY2tJ by0+TWVkaWEtPkJsb2NrU2l6ZTsNCj4gKyAgTWVkaWFJZCAgID0gQmxvY2tJby0+TWVkaWEtPk1l ZGlhSWQ7DQo+ICsNCj4gKyAgUGFydEhkciAgID0gQWxsb2NhdGVaZXJvUG9vbCAoQmxvY2tTaXpl KTsNCj4gKw0KPiArICBpZiAoUGFydEhkciA9PSBOVUxMKSB7DQo+ICsgICAgREVCVUcgKChFRklf RF9FUlJPUiwgIkFsbG9jYXRlIHBvb2wgZXJyb3JcbiIpKTsNCj4gKyAgICByZXR1cm4gRkFMU0U7 DQo+ICsgIH0NCj4gKw0KPiArICBQRW50cnlMQkEgPSAoUGFydEhlYWRlci0+TXlMQkEgPT0gUFJJ TUFSWV9QQVJUX0hFQURFUl9MQkEpID9cDQo+ICsgICAgKFBhcnRIZWFkZXItPkxhc3RVc2FibGVM QkEgKyAxKSA6XA0KPiArICAgIChQUklNQVJZX1BBUlRfSEVBREVSX0xCQSArIDEpOw0KPiArDQo+ ICsgIENvcHlNZW0gKFBhcnRIZHIsIFBhcnRIZWFkZXIsIHNpemVvZihFRklfUEFSVElUSU9OX1RB QkxFX0hFQURFUikpOw0KPiArDQo+ICsgIFBhcnRIZHItPk15TEJBICAgICAgICAgICAgICA9IFBh cnRIZWFkZXItPkFsdGVybmF0ZUxCQTsNCj4gKyAgUGFydEhkci0+QWx0ZXJuYXRlTEJBICAgICAg ID0gUGFydEhlYWRlci0+TXlMQkE7DQo+ICsgIFBhcnRIZHItPlBhcnRpdGlvbkVudHJ5TEJBICA9 IFBFbnRyeUxCQTsNCj4gKyAgUGFydGl0aW9uU2V0Q3JjICgoRUZJX1RBQkxFX0hFQURFUiAqKVBh cnRIZHIpOw0KPiArDQo+ICsgIFN0YXR1cyA9IERpc2tJby0+V3JpdGVEaXNrICgNCj4gKyAgICBE aXNrSW8sDQo+ICsgICAgTWVkaWFJZCwNCj4gKyAgICBNdWx0VTY0eDMyIChQYXJ0SGRyLT5NeUxC QSwgKFVJTlQzMilCbG9ja1NpemUpLA0KPiArICAgIEJsb2NrU2l6ZSwNCj4gKyAgICBQYXJ0SGRy DQo+ICsgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIGdvdG8g RG9uZTsNCj4gKyAgfQ0KPiArDQo+ICsgIFB0ciA9IEFsbG9jYXRlUG9vbCAoUGFydEhlYWRlci0+ TnVtYmVyT2ZQYXJ0aXRpb25FbnRyaWVzICogUGFydEhlYWRlci0NCj4gPlNpemVPZlBhcnRpdGlv bkVudHJ5KTsNCj4gKyAgaWYgKFB0ciA9PSBOVUxMKSB7DQo+ICsgICAgREVCVUcgKChFRklfRF9F UlJPUiwgIiBBbGxvY2F0ZSBwb29sIGVycm9yXG4iKSk7DQo+ICsgICAgU3RhdHVzID0gRUZJX09V VF9PRl9SRVNPVVJDRVM7DQo+ICsgICAgZ290byBEb25lOw0KPiArICB9DQo+ICsNCj4gKyAgU3Rh dHVzID0gRGlza0lvLT5SZWFkRGlzayAoDQo+ICsgICAgRGlza0lvLA0KPiArICAgIE1lZGlhSWQs DQo+ICsgICAgTXVsdFU2NHgzMiAoUGFydEhlYWRlci0+UGFydGl0aW9uRW50cnlMQkEsIChVSU5U MzIpQmxvY2tTaXplKSwNCj4gKyAgICBQYXJ0SGVhZGVyLT5OdW1iZXJPZlBhcnRpdGlvbkVudHJp ZXMgKiBQYXJ0SGVhZGVyLQ0KPiA+U2l6ZU9mUGFydGl0aW9uRW50cnksDQo+ICsgICAgUHRyDQo+ ICsgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIGdvdG8gRG9u ZTsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IERpc2tJby0+V3JpdGVEaXNrICgNCj4gKyAg ICBEaXNrSW8sDQo+ICsgICAgTWVkaWFJZCwNCj4gKyAgICBNdWx0VTY0eDMyIChQRW50cnlMQkEs IChVSU5UMzIpQmxvY2tTaXplKSwNCj4gKyAgICBQYXJ0SGVhZGVyLT5OdW1iZXJPZlBhcnRpdGlv bkVudHJpZXMgKiBQYXJ0SGVhZGVyLQ0KPiA+U2l6ZU9mUGFydGl0aW9uRW50cnksDQo+ICsgICAg UHRyDQo+ICsgICAgKTsNCj4gKw0KPiArIERvbmU6DQo+ICsgIEZyZWVQb29sIChQYXJ0SGRyKTsN Cj4gKw0KPiArICBpZiAoUHRyICE9IE5VTEwpIHsNCj4gKyAgICBGcmVlUG9vbCAoUHRyKTsNCj4g KyAgfQ0KPiArDQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4g RkFMU0U7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gVFJVRTsNCj4gK30NCj4gKw0KPiArLyoq DQo+ICsgIFRoaXMgcm91dGluZSB3aWxsIGNoZWNrIEdQVCBwYXJ0aXRpb24gZW50cnkgYW5kIHJl dHVybiBlbnRyeSBzdGF0dXMuDQo+ICsNCj4gKyAgQ2F1dGlvbjogVGhpcyBmdW5jdGlvbiBtYXkg cmVjZWl2ZSB1bnRydXN0ZWQgaW5wdXQuDQo+ICsgIFRoZSBHUFQgcGFydGl0aW9uIGVudHJ5IGlz IGV4dGVybmFsIGlucHV0LCBzbyB0aGlzIHJvdXRpbmUNCj4gKyAgd2lsbCBkbyBiYXNpYyB2YWxp ZGF0aW9uIGZvciBHUFQgcGFydGl0aW9uIGVudHJ5IGFuZCByZXBvcnQgc3RhdHVzLg0KPiArDQo+ ICsgIEBwYXJhbVtpbl0gICAgUGFydEhlYWRlciAgICBQYXJ0aXRpb24gdGFibGUgaGVhZGVyIHN0 cnVjdHVyZQ0KPiArICBAcGFyYW1baW5dICAgIFBhcnRFbnRyeSAgICAgVGhlIHBhcnRpdGlvbiBl bnRyeSBhcnJheQ0KPiArICBAcGFyYW1bb3V0XSAgIFBFbnRyeVN0YXR1cyAgdGhlIHBhcnRpdGlv biBlbnRyeSBzdGF0dXMgYXJyYXkNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl Y29yZGluZyB0aGUgc3RhdHVzIG9mIGVhY2ggcGFydGl0aW9uDQo+ICsNCj4gKyoqLw0KPiArU1RB VElDDQo+ICtWT0lEDQo+ICtQYXJ0aXRpb25DaGVja0dwdEVudHJ5ICgNCj4gKyAgSU4gIEVGSV9Q QVJUSVRJT05fVEFCTEVfSEVBREVSICAqUGFydEhlYWRlciwNCj4gKyAgSU4gIEVGSV9QQVJUSVRJ T05fRU5UUlkgICAgICAgICAqUGFydEVudHJ5LA0KPiArICBPVVQgRUZJX1BBUlRJVElPTl9FTlRS WV9TVEFUVVMgICpQRW50cnlTdGF0dXMNCj4gKyAgKQ0KPiArew0KPiArICBFRklfTEJBICAgICAg ICAgICAgICBTdGFydGluZ0xCQTsNCj4gKyAgRUZJX0xCQSAgICAgICAgICAgICAgRW5kaW5nTEJB Ow0KPiArICBFRklfUEFSVElUSU9OX0VOVFJZICAqRW50cnk7DQo+ICsgIFVJTlROICAgICAgICAg ICAgICAgIEluZGV4MTsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgSW5kZXgyOw0KPiArDQo+ ICsgIERFQlVHICgoRUZJX0RfVkVSQk9TRSwgIiBzdGFydCBjaGVjayBwYXJ0aXRpb24gZW50cmll c1xuIikpOw0KPiArICBmb3IgKEluZGV4MSA9IDA7IEluZGV4MSA8IFBhcnRIZWFkZXItPk51bWJl ck9mUGFydGl0aW9uRW50cmllczsNCj4gSW5kZXgxKyspIHsNCj4gKyAgICBFbnRyeSA9IChFRklf UEFSVElUSU9OX0VOVFJZICopKChVSU5UOCAqKVBhcnRFbnRyeSArIEluZGV4MSAqDQo+IFBhcnRI ZWFkZXItPlNpemVPZlBhcnRpdGlvbkVudHJ5KTsNCj4gKyAgICBpZiAoQ29tcGFyZUd1aWQgKCZF bnRyeS0+UGFydGl0aW9uVHlwZUdVSUQsDQo+ICZnRWZpUGFydFR5cGVVbnVzZWRHdWlkKSkgew0K PiArICAgICAgY29udGludWU7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgU3RhcnRpbmdMQkEgPSBF bnRyeS0+U3RhcnRpbmdMQkE7DQo+ICsgICAgRW5kaW5nTEJBICAgPSBFbnRyeS0+RW5kaW5nTEJB Ow0KPiArICAgIGlmIChTdGFydGluZ0xCQSA+IEVuZGluZ0xCQSB8fA0KPiArICAgICAgICBTdGFy dGluZ0xCQSA8IFBhcnRIZWFkZXItPkZpcnN0VXNhYmxlTEJBIHx8DQo+ICsgICAgICAgIFN0YXJ0 aW5nTEJBID4gUGFydEhlYWRlci0+TGFzdFVzYWJsZUxCQSB8fA0KPiArICAgICAgICBFbmRpbmdM QkEgPCBQYXJ0SGVhZGVyLT5GaXJzdFVzYWJsZUxCQSB8fA0KPiArICAgICAgICBFbmRpbmdMQkEg PiBQYXJ0SGVhZGVyLT5MYXN0VXNhYmxlTEJBDQo+ICsgICAgICAgKSB7DQo+ICsgICAgICBQRW50 cnlTdGF0dXNbSW5kZXgxXS5PdXRPZlJhbmdlID0gVFJVRTsNCj4gKyAgICAgIGNvbnRpbnVlOw0K PiArICAgIH0NCj4gKw0KPiArICAgIGlmICgoRW50cnktPkF0dHJpYnV0ZXMgJiBCSVQxKSAhPSAw KSB7DQo+ICsgICAgICAvLw0KPiArICAgICAgLy8gSWYgQml0IDEgaXMgc2V0LCB0aGlzIGluZGlj YXRlIHRoYXQgdGhpcyBpcyBhbiBPUyBzcGVjaWZpYyBHVUlEIHBhcnRpdGlvbi4NCj4gKyAgICAg IC8vDQo+ICsgICAgICBQRW50cnlTdGF0dXNbSW5kZXgxXS5Pc1NwZWNpZmljID0gVFJVRTsNCj4g KyAgICB9DQo+ICsNCj4gKyAgICBmb3IgKEluZGV4MiA9IEluZGV4MSArIDE7IEluZGV4MiA8IFBh cnRIZWFkZXItDQo+ID5OdW1iZXJPZlBhcnRpdGlvbkVudHJpZXM7IEluZGV4MisrKSB7DQo+ICsg ICAgICBFbnRyeSA9IChFRklfUEFSVElUSU9OX0VOVFJZICopKChVSU5UOCAqKVBhcnRFbnRyeSAr IEluZGV4MiAqDQo+IFBhcnRIZWFkZXItPlNpemVPZlBhcnRpdGlvbkVudHJ5KTsNCj4gKyAgICAg IGlmIChDb21wYXJlR3VpZCAoJkVudHJ5LT5QYXJ0aXRpb25UeXBlR1VJRCwNCj4gJmdFZmlQYXJ0 VHlwZVVudXNlZEd1aWQpKSB7DQo+ICsgICAgICAgIGNvbnRpbnVlOw0KPiArICAgICAgfQ0KPiAr DQo+ICsgICAgICBpZiAoRW50cnktPkVuZGluZ0xCQSA+PSBTdGFydGluZ0xCQSAmJiBFbnRyeS0+ U3RhcnRpbmdMQkEgPD0gRW5kaW5nTEJBKQ0KPiB7DQo+ICsgICAgICAgIC8vDQo+ICsgICAgICAg IC8vIFRoaXMgcmVnaW9uIG92ZXJsYXBzIHdpdGggdGhlIEluZGV4MSd0aCByZWdpb24NCj4gKyAg ICAgICAgLy8NCj4gKyAgICAgICAgUEVudHJ5U3RhdHVzW0luZGV4MV0uT3ZlcmxhcCAgPSBUUlVF Ow0KPiArICAgICAgICBQRW50cnlTdGF0dXNbSW5kZXgyXS5PdmVybGFwICA9IFRSVUU7DQo+ICsg ICAgICAgIGNvbnRpbnVlOw0KPiArICAgICAgfQ0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsg IERFQlVHICgoRUZJX0RfVkVSQk9TRSwgIiBFbmQgY2hlY2sgcGFydGl0aW9uIGVudHJpZXNcbiIp KTsNCj4gK30NCj4gKw0KPiArDQo+ICsvKioNCj4gKyAgVXBkYXRlcyB0aGUgQ1JDMzIgdmFsdWUg aW4gdGhlIHRhYmxlIGhlYWRlci4NCj4gKw0KPiArICBAcGFyYW0gIEhkciAgICBUYWJsZSB0byB1 cGRhdGUNCj4gKw0KPiArKiovDQo+ICtTVEFUSUMNCj4gK1ZPSUQNCj4gK1BhcnRpdGlvblNldENy YyAoDQo+ICsgIElOIE9VVCBFRklfVEFCTEVfSEVBREVSICpIZHINCj4gKyAgKQ0KPiArew0KPiAr ICBQYXJ0aXRpb25TZXRDcmNBbHRTaXplIChIZHItPkhlYWRlclNpemUsIEhkcik7DQo+ICt9DQo+ ICsNCj4gKw0KPiArLyoqDQo+ICsgIFVwZGF0ZXMgdGhlIENSQzMyIHZhbHVlIGluIHRoZSB0YWJs ZSBoZWFkZXIuDQo+ICsNCj4gKyAgQHBhcmFtICBTaXplICAgVGhlIHNpemUgb2YgdGhlIHRhYmxl DQo+ICsgIEBwYXJhbSAgSGRyICAgIFRhYmxlIHRvIHVwZGF0ZQ0KPiArDQo+ICsqKi8NCj4gK1NU QVRJQw0KPiArVk9JRA0KPiArUGFydGl0aW9uU2V0Q3JjQWx0U2l6ZSAoDQo+ICsgIElOIFVJTlRO ICAgICAgICAgICAgICAgICBTaXplLA0KPiArICBJTiBPVVQgRUZJX1RBQkxFX0hFQURFUiAgKkhk cg0KPiArICApDQo+ICt7DQo+ICsgIFVJTlQzMiAgQ3JjOw0KPiArDQo+ICsgIEhkci0+Q1JDMzIg PSAwOw0KPiArICBnQlMtPkNhbGN1bGF0ZUNyYzMyICgoVUlOVDggKilIZHIsIFNpemUsICZDcmMp Ow0KPiArICBIZHItPkNSQzMyID0gQ3JjOw0KPiArfQ0KPiArDQo+ICsNCj4gKy8qKg0KPiArICBD aGVja3MgdGhlIENSQzMyIHZhbHVlIGluIHRoZSB0YWJsZSBoZWFkZXIuDQo+ICsNCj4gKyAgQHBh cmFtICBNYXhTaXplICAgTWF4IFNpemUgbGltaXQNCj4gKyAgQHBhcmFtICBIZHIgICAgICAgVGFi bGUgdG8gY2hlY2sNCj4gKw0KPiArICBAcmV0dXJuIFRSVUUgICAgICBDUkMgVmFsaWQNCj4gKyAg QHJldHVybiBGQUxTRSAgICAgQ1JDIEludmFsaWQNCj4gKw0KPiArKiovDQo+ICtTVEFUSUMNCj4g K0JPT0xFQU4NCj4gK1BhcnRpdGlvbkNoZWNrQ3JjICgNCj4gKyAgSU4gVUlOVE4gICAgICAgICAg ICAgICAgIE1heFNpemUsDQo+ICsgIElOIE9VVCBFRklfVEFCTEVfSEVBREVSICAqSGRyDQo+ICsg ICkNCj4gK3sNCj4gKyAgcmV0dXJuIFBhcnRpdGlvbkNoZWNrQ3JjQWx0U2l6ZSAoTWF4U2l6ZSwg SGRyLT5IZWFkZXJTaXplLCBIZHIpOw0KPiArfQ0KPiArDQo+ICsNCj4gKy8qKg0KPiArICBDaGVj a3MgdGhlIENSQzMyIHZhbHVlIGluIHRoZSB0YWJsZSBoZWFkZXIuDQo+ICsNCj4gKyAgQHBhcmFt ICBNYXhTaXplICAgTWF4IFNpemUgbGltaXQNCj4gKyAgQHBhcmFtICBTaXplICAgICAgVGhlIHNp emUgb2YgdGhlIHRhYmxlDQo+ICsgIEBwYXJhbSAgSGRyICAgICAgIFRhYmxlIHRvIGNoZWNrDQo+ ICsNCj4gKyAgQHJldHVybiBUUlVFICAgIENSQyBWYWxpZA0KPiArICBAcmV0dXJuIEZBTFNFICAg Q1JDIEludmFsaWQNCj4gKw0KPiArKiovDQo+ICtTVEFUSUMNCj4gK0JPT0xFQU4NCj4gK1BhcnRp dGlvbkNoZWNrQ3JjQWx0U2l6ZSAoDQo+ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICBNYXhT aXplLA0KPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgU2l6ZSwNCj4gKyAgSU4gT1VUIEVG SV9UQUJMRV9IRUFERVIgICpIZHINCj4gKyAgKQ0KPiArew0KPiArICBVSU5UMzIgICAgICBDcmM7 DQo+ICsgIFVJTlQzMiAgICAgIE9yZ0NyYzsNCj4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiAr DQo+ICsgIENyYyA9IDA7DQo+ICsNCj4gKyAgaWYgKFNpemUgPT0gMCkgew0KPiArICAgIC8vDQo+ ICsgICAgLy8gSWYgaGVhZGVyIHNpemUgaXMgMCBDUkMgd2lsbCBwYXNzIHNvIHJldHVybiBGQUxT RSBoZXJlDQo+ICsgICAgLy8NCj4gKyAgICByZXR1cm4gRkFMU0U7DQo+ICsgIH0NCj4gKw0KPiAr ICBpZiAoKE1heFNpemUgIT0gMCkgJiYgKFNpemUgPiBNYXhTaXplKSkgew0KPiArICAgIERFQlVH ICgoRUZJX0RfRVJST1IsICJDaGVja0NyYzMyOiBTaXplID4gTWF4U2l6ZVxuIikpOw0KPiArICAg IHJldHVybiBGQUxTRTsNCj4gKyAgfQ0KPiArICAvLw0KPiArICAvLyBjbGVhciBvbGQgY3JjIGZy b20gaGVhZGVyDQo+ICsgIC8vDQo+ICsgIE9yZ0NyYyAgICAgID0gSGRyLT5DUkMzMjsNCj4gKyAg SGRyLT5DUkMzMiAgPSAwOw0KPiArDQo+ICsgIFN0YXR1cyAgICAgID0gZ0JTLT5DYWxjdWxhdGVD cmMzMiAoKFVJTlQ4ICopSGRyLCBTaXplLCAmQ3JjKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPiArICAgIERFQlVHICgoRUZJX0RfRVJST1IsICJDaGVja0NyYzMyOiBDcmMgY2Fs Y3VsYXRpb24gZmFpbGVkXG4iKSk7DQo+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiArICB9DQo+ICsg IC8vDQo+ICsgIC8vIHNldCByZXN1bHRzDQo+ICsgIC8vDQo+ICsgIEhkci0+Q1JDMzIgPSBDcmM7 DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gcmV0dXJuIHN0YXR1cw0KPiArICAvLw0KPiArICBERUJV R19DT0RFX0JFR0lOICgpOw0KPiArICBpZiAoT3JnQ3JjICE9IENyYykgew0KPiArICAgIERFQlVH ICgoRUZJX0RfRVJST1IsICJDaGVja0NyYzMyOiBDcmMgY2hlY2sgZmFpbGVkXG4iKSk7DQo+ICsg IH0NCj4gKyAgREVCVUdfQ09ERV9FTkQgKCk7DQo+ICsNCj4gKyAgcmV0dXJuIChCT09MRUFOKShP cmdDcmMgPT0gQ3JjKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIENvbnZlcnRzIGEgR1VJRCBp bnRvIGEgdW5pY29kZSBzdHJpbmcuDQo+ICsNCj4gKyAgQHBhcmFtICBbaW5dIEd1aWQgICAgICAg ICAgICAgQSBHVUlEIHRvIGJlIGNvbnZlcnRlZA0KPiArICBAcGFyYW0gIFtvdXRdIEJ1ZmZlciAg ICAgICAgICBBIHBvaW50ZXIgdG8gYSBidWZmZXIgcmVjZWl2aW5nIHRoZSBzdHJpbmcNCj4gKyAg QHBhcmFtICBbaW5dIEJ1ZmZlclNpemUgICAgICAgU2l6ZSBvZiB0aGUgYnVmZmVyDQo+ICsNCj4g KyAgQHJldHVybiBFRklfU1VDQ0VTUyAgICAgICAgICAgU3VjY2Vzc2Z1bCBjb252ZXJzaW9uDQo+ ICsgIEByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSIENvbnZlcnNpb24gZmFpbGVkDQo+ICsN Cj4gKyoqLw0KPiArDQo+ICtTVEFUSUMNCj4gK0VGSV9TVEFUVVMNCj4gK0d1aWRUb1N0cmluZyAo DQo+ICsgIElOICBFRklfR1VJRCAgKkd1aWQsDQo+ICsgIE9VVCBDSEFSMTYgICAgKkJ1ZmZlciwN Cj4gKyAgSU4gIFVJTlROICAgICBCdWZmZXJTaXplDQo+ICsgICkNCj4gK3sNCj4gKyAgVUlOVE4g U2l6ZTsNCj4gKyAgRUZJX1NUQVRVUyBTdGF0dXM7DQo+ICsNCj4gKyAgU3RhdHVzID0gRUZJX1NV Q0NFU1M7DQo+ICsNCj4gKyAgU2l6ZSA9IFVuaWNvZGVTUHJpbnQgKA0KPiArICAgIEJ1ZmZlciwN Cj4gKyAgICBCdWZmZXJTaXplLA0KPiArICAgIEwiJTA4eC0lMDR4LSUwNHgtJTAyeCUwMngtJTAy eCUwMnglMDJ4JTAyeCUwMnglMDJ4IiwNCj4gKyAgICAoVUlOVE4pR3VpZC0+RGF0YTEsDQo+ICsg ICAgKFVJTlROKUd1aWQtPkRhdGEyLA0KPiArICAgIChVSU5UTilHdWlkLT5EYXRhMywNCj4gKyAg ICAoVUlOVE4pR3VpZC0+RGF0YTRbMF0sDQo+ICsgICAgKFVJTlROKUd1aWQtPkRhdGE0WzFdLA0K PiArICAgIChVSU5UTilHdWlkLT5EYXRhNFsyXSwNCj4gKyAgICAoVUlOVE4pR3VpZC0+RGF0YTRb M10sDQo+ICsgICAgKFVJTlROKUd1aWQtPkRhdGE0WzRdLA0KPiArICAgIChVSU5UTilHdWlkLT5E YXRhNFs1XSwNCj4gKyAgICAoVUlOVE4pR3VpZC0+RGF0YTRbNl0sDQo+ICsgICAgKFVJTlROKUd1 aWQtPkRhdGE0WzddDQo+ICsgICAgKTsNCj4gKyAgaWYgKCFTaXplKSB7DQo+ICsgICAgU3RhdHVz ID0gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1 czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBv ZiBhIGtub3duDQo+ICsgIHBhcnRpdGlvbiB0eXBlIEdVSUQuIElmIHBhcnRpdGlvbiBHVUlEIGlz IG5vdA0KPiArICBrbm93biwgZ2V0cyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgR1VJ RA0KPiArDQo+ICsgIEBwYXJhbSAgR1VJRCAgICAgICAgICBHdWlkIHRvIGJlIHNlYXJjaGVkIGZv cg0KPiArICBAcGFyYW0gIFBhcnRUeXBlU3RyICAgQnVmZmVyIHJlY2VpdmluZyB0aGUgc3RyaW5n DQo+ICsgIEBwYXJhbSAgTm9HdWlkU3RyICAgICBEbyBub3QgY29udmVydCBHVUlEIHRvIHN0cmlu Zw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFuIHVua25vd24gcGFydGl0aW9uIHR5 cGUNCj4gKw0KPiArICBAcmV0dXJuIEVGSV9TVUNDRVNTICAgR1VJRCB0eXBlIGlzIGtub3duDQo+ ICsgIEByZXR1cm4gRUZJX05PVF9GT1VORCBVbmtub3duIEdVSUQgcGFydGl0aW9uIHR5cGUNCj4g Kw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtHZXRQYXJ0aXRpb25UeXBlU3RyICgNCj4gKyAg SU4gRUZJX0dVSUQgR3VpZCwNCj4gKyAgT1VUIENIQVIxNiAqUGFydFR5cGVTdHIsDQo+ICsgIElO IEJPT0xFQU4gTm9HdWlkU3RyKQ0KPiArew0KPiArICBVSU5UTiBJbmRleDsNCj4gKyAgRUZJX1NU QVRVUyBTdGF0dXM7DQo+ICsNCj4gKyAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQo+ICsgIGZvciAo SW5kZXggPSAwOyBJbmRleCA8IEFSUkFZX1NJWkUgKFBhcnRpdGlvblR5cGVzKTsgSW5kZXgrKykg ew0KPiArICAgIGlmIChDb21wYXJlR3VpZCAoJkd1aWQsICZQYXJ0aXRpb25UeXBlc1tJbmRleF0u VHlwZUd1aWQpKSB7DQo+ICsgICAgICBTdHJuQ3B5IChQYXJ0VHlwZVN0ciwgUGFydGl0aW9uVHlw ZXNbSW5kZXhdLlR5cGVOYW1lLA0KPiBNQVhfUEFSVElUSU9OX05BTUVfTEVOR1RIKTsNCj4gKyAg ICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsgIGlmICghTm9HdWlkU3Ry KSB7DQo+ICsgICAgR3VpZFRvU3RyaW5nICgmR3VpZCwgUGFydFR5cGVTdHIsIChNQVhfUEFSVElU SU9OX05BTUVfTEVOR1RIICsgMSkNCj4gKiBzaXplb2YoQ0hBUjE2KSk7DQo+ICsgIH0NCj4gKyAg cmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBMaXN0cyBwYXJ0 aXRpb25zIG9uIGEgYmxvY2sgZGV2aWNlLg0KPiArDQo+ICsgIEByZXR1cm4gICBOdW1iZXIgb2Yg cGFydGl0aW9ucyB1c2VkDQo+ICsqKi8NCj4gKw0KPiArVUlOVE4NCj4gK1BhcnRpdGlvbkxpc3RH cHRFbnRyaWVzIChWT0lEKQ0KPiArew0KPiArICBVSU5UTiAgICAgICAgICAgICAgICBJbmRleDsN Cj4gKyAgRUZJX1BBUlRJVElPTl9FTlRSWSAgKkVudHJ5Ow0KPiArICBFRklfTEJBICAgICAgICAg ICAgICBMZW5ndGg7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgIE51bUVudHJpZXM7IC8vIFVz ZWQgZW50cmllcw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICBCbG9ja1NpemU7DQo+ICsgIEJP T0xFQU4gICAgICAgICAgICAgIEZpcnN0VGltZTsNCj4gKyAgVUlOVDY0ICAgICAgICAgICAgICAg QmxvY2tzT2NjdXBpZWQ7DQo+ICsNCj4gKyAgTnVtRW50cmllcyA9IDA7DQo+ICsgIEJsb2NrU2l6 ZSA9IEJsb2NrSW8tPk1lZGlhLT5CbG9ja1NpemU7DQo+ICsgIEZpcnN0VGltZSA9IFRSVUU7DQo+ ICsNCj4gKyAgaWYgKCFHcHRWYWxpZCkgew0KPiArICAgIHJldHVybiAwOw0KPiArICB9DQo+ICsN Cj4gKyAgQmxvY2tzT2NjdXBpZWQgPSAwOw0KPiArDQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRl eCA8IFByaW1hcnlIZWFkZXItPk51bWJlck9mUGFydGl0aW9uRW50cmllczsNCj4gSW5kZXgrKykg ew0KPiArDQo+ICsgICAgQk9PTEVBTiBTcGVjaWZpYzsNCj4gKyAgICBDSEFSMTYgUGFydFR5cGVT dHJbTUFYX1BBUlRJVElPTl9OQU1FX0xFTkdUSCArIDFdOw0KPiArDQo+ICsgICAgU3BlY2lmaWMg PSBGQUxTRTsNCj4gKw0KPiArICAgIEVudHJ5ID0gKEVGSV9QQVJUSVRJT05fRU5UUlkgKikoKFVJ TlQ4ICopUGFydEVudHJ5ICsgSW5kZXggKg0KPiBQcmltYXJ5SGVhZGVyLT5TaXplT2ZQYXJ0aXRp b25FbnRyeSk7DQo+ICsNCj4gKyAgICBMZW5ndGggPSBFbnRyeS0+RW5kaW5nTEJBIC0gRW50cnkt PlN0YXJ0aW5nTEJBICsgMTsNCj4gKw0KPiArICAgIGlmIChDb21wYXJlR3VpZCAoJkVudHJ5LT5Q YXJ0aXRpb25UeXBlR1VJRCwNCj4gJmdFZmlQYXJ0VHlwZVVudXNlZEd1aWQpKSB7DQo+ICsgICAg ICBjb250aW51ZTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZiAoRmlyc3RUaW1lKSB7DQo+ICsg ICAgICBQcmludCAoTCIgIE5vIFx0JS0zNnNcdFN0YXJ0IChMQkEpXHRFbmQgKExCQSlcdFNpemUg KE1pQilcdCBQYXJ0aXRpb24NCj4gVHlwZVxyXG4iLCBMIk5hbWUiKTsNCj4gKyAgICAgIFByaW50 IChMIiAtLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgIC0tLS0t LS0tLS0tICAgICAtLS0tLS0tLS0tLSAgICAgLS0tLS0NCj4gLS0tLS0gICAgICAgLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4iKTsNCj4gKyAgICAgIEZpcnN0VGltZSA9IEZBTFNF Ow0KPiArICAgIH0NCj4gKyAgICBOdW1FbnRyaWVzKys7DQo+ICsgICAgaWYgKFBFbnRyeVN0YXR1 c1tJbmRleF0uT3V0T2ZSYW5nZSB8fA0KPiArICAgICAgICBQRW50cnlTdGF0dXNbSW5kZXhdLk92 ZXJsYXAgfHwNCj4gKyAgICAgICAgUEVudHJ5U3RhdHVzW0luZGV4XS5Pc1NwZWNpZmljKSB7DQo+ ICsgICAgICBTcGVjaWZpYyA9IFRSVUU7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgQmxvY2tzT2Nj dXBpZWQgKz0gTGVuZ3RoOw0KPiArDQo+ICsgICAgR2V0UGFydGl0aW9uVHlwZVN0ciAoRW50cnkt PlBhcnRpdGlvblR5cGVHVUlELCAoQ0hBUjE2ICopJlBhcnRUeXBlU3RyLA0KPiBGQUxTRSk7DQo+ ICsNCj4gKyAgICBQcmludCAoTCIlMXMgJS0zZFx0JS0zNnNcdDB4JTA5bGx4XHQweCUwOWxseFx0 JTA2bGx1XHQgICAgICAgICAlc1xyXG4iLA0KPiArICAgICAgICAgICBTcGVjaWZpYyA/IEwiUyIg OiBMIiIsDQo+ICsgICAgICAgICAgIEluZGV4ICsgMSwNCj4gKyAgICAgICAgICAgRW50cnktPlBh cnRpdGlvbk5hbWUsDQo+ICsgICAgICAgICAgIChVSU5UNjQpRW50cnktPlN0YXJ0aW5nTEJBLA0K PiArICAgICAgICAgICAoVUlOVDY0KUVudHJ5LT5FbmRpbmdMQkEsDQo+ICsgICAgICAgICAgIChN dWx0VTY0eDMyIChMZW5ndGgsIEJsb2NrU2l6ZSkpID4+IDIwLA0KPiArICAgICAgICAgICBQYXJ0 VHlwZVN0cik7DQo+ICsgIH0NCj4gKw0KPiArICAvLyBUaGlzIGNvZGUgYmxvY2sgaXMgdG8gcHJv dmlkZSBhZGRpdGlvbmFsIGluZm8NCj4gKyAgew0KPiArICAgIFVJTlQ2NCBEaXNrU2l6ZU1pQiwg U2l6ZU9jY3VwaWVkTWlCOw0KPiArDQo+ICsgICAgRGlza1NpemVNaUIgPSBNdWx0VTY0eDMyIChQ cmltYXJ5SGVhZGVyLT5MYXN0VXNhYmxlTEJBIC0NCj4gUHJpbWFyeUhlYWRlci0+Rmlyc3RVc2Fi bGVMQkEgKyAxLCBCbG9ja0lvLT5NZWRpYS0+QmxvY2tTaXplKSA+PiAyMDsNCj4gKyAgICBTaXpl T2NjdXBpZWRNaUIgPSBNdWx0VTY0eDMyIChCbG9ja3NPY2N1cGllZCwgQmxvY2tJby0+TWVkaWEt DQo+ID5CbG9ja1NpemUpID4+IDIwOw0KPiArICAgIFByaW50IChMIlxyXG4lZCBwYXJ0aXRpb24o cykgdXNlZCBvdXQgb2YgJWRcclxuIiwgTnVtRW50cmllcywNCj4gUHJpbWFyeUhlYWRlci0+TnVt YmVyT2ZQYXJ0aXRpb25FbnRyaWVzKTsNCj4gKyAgICBQcmludCAoTCJUb3RhbCBkZXZpY2UgY2Fw YWNpdHkgKG1pbnVzIEdQVCBzZXJ2aWNlIGJsb2Nrcyk6ICVsbHUNCj4gTWlCXHJcblBhcnRpdGlv bmVkIHNwYWNlOiAlbGx1IE1pQlxyXG4iLA0KPiArICAgICAgICAgICBEaXNrU2l6ZU1pQiwNCj4g KyAgICAgICAgICAgU2l6ZU9jY3VwaWVkTWlCKTsNCj4gKyAgICBQcmludCAoTCJVbnBhcnRpdGlv bmVkIHNwYWNlIGF2YWlsYWJsZTogJWxsdSBNaUIgKCVkJSUpXG4iLA0KPiArICAgICAgICAgICBE aXNrU2l6ZU1pQiAtIFNpemVPY2N1cGllZE1pQiwNCj4gKyAgICAgICAgICAgKDEwMCAqIChEaXNr U2l6ZU1pQiAtIFNpemVPY2N1cGllZE1pQikpIC8gRGlza1NpemVNaUIpOw0KPiArICB9DQo+ICsN Cj4gKyAgcmV0dXJuIE51bUVudHJpZXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBMb2NhdGUg YSBwYXJ0aXRpb24gYnkgY3JpdGVyaWENCj4gKw0KPiArICBAcGFyYW0gIE5hbWUgICAgICAgICBQ YXJ0aXRpb24gbmFtZSAob3Igb3JkaW5hbCByZXByZXNlbnRlZCBhIHN0cmluZykNCj4gKyAgQHBh cmFtICBTdGFydExiYSAgICAgU3RhcnRMYmEgb2YgdGhlIHBhcnRpdGlvbiB0byBzZWFyY2ggZm9y DQo+ICsgIEBwYXJhbSAgRW5kaW5nTGJhICAgIEVuZGluZ0xiYSBvZiB0aGUgcGFydGl0aW9uIHRv IHNlYXJjaCBmb3INCj4gKyAgQHBhcmFtICBTZWFyY2hUeXBlICAgQSBjb21iaW5hdGlvbiAoT1Ip IG9mIHNlYXJjaCBvcHRpb25zLg0KPiArICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25zIGFy ZToNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIFNSQ19CWV9OQU1FICAgID0gc2VhcmNoIGJ5 IHBhcnRpdGlvbiBuYW1lDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICBTUkNfQllfTEJBICAg ICA9IHNlYXJjaCBieSBTdGFydC9FbmRpbmcgbGJhDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICBTUkNfQU5ZICAgICAgICA9IHJldHVybnMgYSBmaXJzdCB1c2VkIHBhcnRpdGlvbg0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgU1JDX0JZX05VTSAgICAgPSBzZWFyY2ggYnkgb3JkaW5hbA0K PiArDQo+ICsNCj4gKyAgQHJldHVybiBOb24tTlVMTCAgICBQb2ludGVyIHRvIHRoIHBhcnRpdGlv biBmb3VuZA0KPiArICBAcmV0dXJuIE5VTEwgICAgICAgIE5vIHBhcnRpdGlvbiBmb3VuZA0KPiAr DQo+ICsqKi8NCj4gK0VGSV9QQVJUSVRJT05fRU5UUlkgKg0KPiArUGFydGl0aW9uRmluZFBhcnRp dGlvbkJ5Q3JpdGVyaWEgKA0KPiArICBJTiBPUFRJT05BTCBDT05TVCBDSEFSMTYgICAqTmFtZSwN Cj4gKyAgSU4gT1BUSU9OQUwgRUZJX0xCQSAgICAgICAgU3RhcnRMYmEsDQo+ICsgIElOIE9QVElP TkFMIEVGSV9MQkEgICAgICAgIEVuZGluZ0xiYSwNCj4gKyAgSU4gU0VBUkNIX1RZUEUgICAgICAg ICAgICAgU2VhcmNoVHlwZQ0KPiArICApDQo+ICt7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAg IEluZGV4Ow0KPiArICBFRklfUEFSVElUSU9OX0VOVFJZICAqRW50cnk7DQo+ICsNCj4gKyAgaWYg KCFHcHRWYWxpZCkgew0KPiArICAgIHJldHVybiBOVUxMOw0KPiArICB9DQo+ICsNCj4gKyAgaWYg KCFOYW1lICYmIChTZWFyY2hUeXBlICYgU1JDX0JZX05BTUUpKSB7DQo+ICsgICAgcmV0dXJuIE5V TEw7DQo+ICsgIH0NCj4gKw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBQcmltYXJ5SGVh ZGVyLT5OdW1iZXJPZlBhcnRpdGlvbkVudHJpZXM7DQo+IEluZGV4KyspIHsNCj4gKyAgICBFbnRy eSA9IChFRklfUEFSVElUSU9OX0VOVFJZICopKChVSU5UOCAqKVBhcnRFbnRyeSArIEluZGV4ICoN Cj4gUHJpbWFyeUhlYWRlci0+U2l6ZU9mUGFydGl0aW9uRW50cnkpOw0KPiArDQo+ICsgICAgaWYg KENvbXBhcmVHdWlkICgmRW50cnktPlBhcnRpdGlvblR5cGVHVUlELA0KPiAmZ0VmaVBhcnRUeXBl VW51c2VkR3VpZCkpIHsNCj4gKyAgICAgIGNvbnRpbnVlOw0KPiArICAgIH0NCj4gKw0KPiArICAg IGlmIChTZWFyY2hUeXBlICYgU1JDX0FOWSkgew0KPiArICAgICAgcmV0dXJuIEVudHJ5Ow0KPiAr ICAgIH0NCj4gKw0KPiArICAgIGlmIChTZWFyY2hUeXBlICYgU1JDX0JZX05BTUUpIHsNCj4gKyAg ICAgIGlmICghU3RyQ21wIChOYW1lLCBFbnRyeS0+UGFydGl0aW9uTmFtZSkpIHsNCj4gKyAgICAg ICAgcmV0dXJuIEVudHJ5Ow0KPiArICAgICAgfQ0KPiArICAgIH0NCj4gKyAgICBpZiAoU2VhcmNo VHlwZSAmIFNSQ19CWV9OVU0pIHsNCj4gKyAgICAgIFVJTlROIE9yZGluYWw7DQo+ICsNCj4gKyAg ICAgIE9yZGluYWwgPSBTaGVsbFN0clRvVWludG4gKE5hbWUpOw0KPiArICAgICAgaWYgKEluZGV4 ID09IChPcmRpbmFsIC0gMSkpIHsNCj4gKyAgICAgICAgcmV0dXJuIEVudHJ5Ow0KPiArICAgICAg fQ0KPiArICAgIH0NCj4gKyAgICBpZiAoU2VhcmNoVHlwZSAmIFNSQ19CWV9MQkEpIHsNCj4gKyAg ICAgIGlmICgNCj4gKyAgICAgICAgICAoKFN0YXJ0TGJhID49IEVudHJ5LT5TdGFydGluZ0xCQSkg JiYNCj4gKyAgICAgICAgICAgKFN0YXJ0TGJhIDw9IEVudHJ5LT5FbmRpbmdMQkEpDQo+ICsgICAg ICAgICAgKSB8fA0KPiArICAgICAgICAgICgoRW5kaW5nTGJhID49IEVudHJ5LT5TdGFydGluZ0xC QSkgJiYNCj4gKyAgICAgICAgICAgKEVuZGluZ0xiYSA8PSBFbnRyeS0+RW5kaW5nTEJBKQ0KPiAr ICAgICAgICAgICkNCj4gKyAgICAgICAgICkgew0KPiArICAgICAgICByZXR1cm4gRW50cnk7DQo+ ICsgICAgICB9DQo+ICsgICAgfQ0KPiArICB9DQo+ICsgIHJldHVybiBOVUxMOw0KPiArfQ0KPiAr DQo+ICsvKioNCj4gKyAgUHJpbnRzIGluZm9ybWF0aW9uIG9uIGEgZ2l2ZW4gcGFydGl0aW9uLg0K PiArDQo+ICsgIEBwYXJhbSAgRW50cnkgICBQb2ludGVyIHRvIHRoZSBQYXJ0aXRpb24gb2YgaW50 ZXJlc3QNCj4gKyoqLw0KPiArDQo+ICtWT0lEDQo+ICtQYXJ0aXRpb25QcmludEdwdFBhcnRJbmZv ICgNCj4gKyAgSU4gRUZJX1BBUlRJVElPTl9FTlRSWSAqRW50cnkNCj4gKyAgKQ0KPiArew0KPiAr ICBDT05TVCBDSEFSMTYgUGFydFN0cltNQVhfUEFSVElUSU9OX05BTUVfTEVOR1RIICsgMV0gPSB7 IEwnXDAnIH07DQo+ICsgIENPTlNUIENIQVIxNiAqU3RyVW5rbm93biA9IEwiVW5rbm93biI7DQo+ ICsgIEVGSV9TVEFUVVMgU3RhdHVzOw0KPiArICBFRklfTEJBIExlbmd0aDsNCj4gKw0KPiArICBB U1NFUlQgKEVudHJ5KTsNCj4gKw0KPiArICBTdGF0dXMgPSBHZXRQYXJ0aXRpb25UeXBlU3RyIChF bnRyeS0+UGFydGl0aW9uVHlwZUdVSUQsIChDSEFSMTYNCj4gKikmUGFydFN0ciwgVFJVRSk7DQo+ ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBTdHJDcHkgKChDSEFSMTYgKikm UGFydFN0ciwgU3RyVW5rbm93bik7DQo+ICsgIH0NCj4gKw0KPiArICBMZW5ndGggPSBFbnRyeS0+ RW5kaW5nTEJBIC0gRW50cnktPlN0YXJ0aW5nTEJBICsgMTsNCj4gKw0KPiArICBQcmludCAoTCJQ YXJ0aXRpb24gbmFtZTogJXNcclxuIiwgRW50cnktPlBhcnRpdGlvbk5hbWUpOw0KPiArICBQcmlu dCAoTCJTdGFydGluZyBMQkEgIDogMHglMDlsbHhcclxuRW5kaW5nIExCQSAgICA6IDB4JTA5bGx4 XHJcbiIsDQo+ICsgICAgICAgICAoVUlOVDY0KUVudHJ5LT5TdGFydGluZ0xCQSwgKFVJTlQ2NClF bnRyeS0+RW5kaW5nTEJBKTsNCj4gKyAgUHJpbnQgKEwiUGFydGl0aW9uIFNpemU6ICVsbHUgTWlC ICgweCVsbHggYmxvY2tzKVxuIiwNCj4gKyAgICAgICAgIChNdWx0VTY0eDMyIChMZW5ndGgsIEJs b2NrSW8tPk1lZGlhLT5CbG9ja1NpemUpKSA+PiAyMCwgTGVuZ3RoKTsNCj4gKyAgUHJpbnQgKEwi QXR0cmlidXRlcyAgICA6IDB4JTA5bGx4XHJcbiIsIEVudHJ5LT5BdHRyaWJ1dGVzKTsNCj4gKyAg UHJpbnQgKEwiVHlwZS9HVUlEICAgICA6ICVzLyVnXHJcbiIsIFBhcnRTdHIsICZFbnRyeS0+UGFy dGl0aW9uVHlwZUdVSUQpOw0KPiArICBQcmludCAoTCJVbmlxdWUgR1VJRCAgIDogJWdcbiIsICZF bnRyeS0+VW5pcXVlUGFydGl0aW9uR1VJRCk7DQo+ICt9DQo+ICsNCj4gKw0KPiArLyoqDQo+ICsg IFdyaXRlcyBwcm90ZWN0aXZlIE1CUiB0byBhIGJsb2NrIGRldmljZS4NCj4gKw0KPiArICBAcmV0 dXJuIEVGSV9TVUNDRVNTICAgIE1CUiB3cml0dGVuIHN1Y2Nlc3NmdWxseQ0KPiArICBAcmV0dXJu IG90aGVyICAgICAgICAgIEZhaWxlZCB0byB3cml0ZSBhbiBNQlINCj4gKw0KPiArKiovDQo+ICsN Cj4gK1NUQVRJQw0KPiArRUZJX1NUQVRVUw0KPiArV3JpdGVQcm90ZWN0aXZlTWJyICgNCj4gKyAg Vk9JRA0KPiArICApDQo+ICt7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgIEJsb2NrU2l6ZTsN Cj4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgRGlza1NpemU7DQo+ICsgIEVGSV9TVEFUVVMgICAg ICAgICAgIFN0YXR1czsNCj4gKyAgTUJSX1BBUlRJVElPTl9SRUNPUkQgKlBhcnRpdGlvbjsNCj4g KyAgTUFTVEVSX0JPT1RfUkVDT1JEICAgKlByb3RlY3RpdmVNYnI7DQo+ICsNCj4gKyAgQmxvY2tT aXplID0gQmxvY2tJby0+TWVkaWEtPkJsb2NrU2l6ZTsNCj4gKw0KPiArICBQcm90ZWN0aXZlTWJy ID0gTlVMTDsNCj4gKyAgUHJvdGVjdGl2ZU1iciA9IEFsbG9jYXRlWmVyb1Bvb2wgKEJsb2NrU2l6 ZSk7DQo+ICsgIGlmIChQcm90ZWN0aXZlTWJyID09IE5VTEwpIHsNCj4gKyAgICByZXR1cm4gRUZJ X09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgIH0NCj4gKw0KPiArICBEaXNrU2l6ZSA9IEJsb2NrSW8t Pk1lZGlhLT5MYXN0QmxvY2sgKyAxOw0KPiArICBpZiAoRGlza1NpemUgPiAweGZmZmZmZmZmKSB7 DQo+ICsgICAgRGlza1NpemUgPSAweGZmZmZmZmZmOw0KPiArICB9DQo+ICsNCj4gKyAgQ29weU1l bSAoUHJvdGVjdGl2ZU1iciwgJlByb3RlY3RpdmVNYnJUZW1wbGF0ZSwNCj4gc2l6ZW9mKE1BU1RF Ul9CT09UX1JFQ09SRCkpOw0KPiArDQo+ICsgIFBhcnRpdGlvbiA9ICZQcm90ZWN0aXZlTWJyLT5Q YXJ0aXRpb25bMF07DQo+ICsNCj4gKyAgUGFydGl0aW9uLT5Cb290SW5kaWNhdG9yID0gMDsNCj4g KyAgUGFydGl0aW9uLT5TdGFydFNlY3RvciA9IDE7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gV2Ug ZG9uJ3QgYWN0dWFsbHkga25vdyB0aGlzIGRhdGEsIHNvIHdlJ2xsIG1ha2UgdXANCj4gKyAgLy8g c29tZXRoaW5nIHRoYXQgc2VlbXMgbGlrZWx5Lg0KPiArICAvLw0KPiArDQo+ICsgIC8vDQo+ICsg IC8vIE9sZCBzb2Z0d2FyZSBpcyBleHBlY3RpbmcgdGhlIFBhcnRpdGlvbiB0byBzdGFydCBvbg0K PiArICAvLyBhIFRyYWNrIGJvdW5kYXJ5LCBzbyB3ZSdsbCBzZXQgdHJhY2sgdG8gMSB0byBhdm9p ZCAib3ZlcmxheSINCj4gKyAgLy8gd2l0aCB0aGUgTUJSDQo+ICsgIC8vDQo+ICsNCj4gKyAgUGFy dGl0aW9uLT5TdGFydFRyYWNrID0gMTsNCj4gKw0KPiArICBTdGF0dXMgPSBEaXNrSW8tPldyaXRl RGlzayAoDQo+ICsgICAgRGlza0lvLA0KPiArICAgIEJsb2NrSW8tPk1lZGlhLT5NZWRpYUlkLA0K PiArICAgIDAsDQo+ICsgICAgQmxvY2tTaXplLA0KPiArICAgIFByb3RlY3RpdmVNYnINCj4gKyAg ICApOw0KPiArDQo+ICsgIE1iclZhbGlkID0gIUVGSV9FUlJPUiAoU3RhdHVzKTsNCj4gKw0KPiAr ICBTSEVMTF9GUkVFX05PTl9OVUxMIChQcm90ZWN0aXZlTWJyKTsNCj4gKw0KPiArICByZXR1cm4g U3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgV3JpdGUgR1BUIHRhYmxlcyB0byB0aGUg YmxvY2sgZGV2aWNlLg0KPiArDQo+ICsgIEByZXR1cm4gRUZJX1NVQ0NFU1MgICAgR1BUIHRhYmxl cyB3ZXJlIHN1Y2Nlc3NmdWxseSB3cml0dGVuL3VwZGF0ZWQNCj4gKyAgQHJldHVybiBvdGhlciAg ICAgICAgICBGYWlsZWQgdG8gd3JpdGUvdXBkYXRlIEdQVCB0YWJsZXMNCj4gKw0KPiArKiovDQo+ ICsNCj4gK1NUQVRJQw0KPiArRUZJX1NUQVRVUw0KPiArV3JpdGVHUFQgKA0KPiArICBWT0lEDQo+ ICsgICkNCj4gKy8qDQo+ICsgICAgQ0FMTEVSIGlzIGV4cGVjdGVkIHRvIGZpbGwgaW46DQo+ICsg ICAgICAgICAgICBGaXJzdFVzZWFibGVMQkENCj4gKyAgICAgICAgICAgIExhc3RVc2VhYmxlTEJB DQo+ICsgICAgICAgICAgICBFbnRyeUNvdW50DQo+ICsgICAgICAgICAgICBEaXNrR1VJRA0KPiAr DQo+ICsgICAgV2UgZmlsbCBpbiB0aGUgcmVzdCwgYW5kIGJsYXN0IGl0IG91dC4NCj4gKw0KPiAr ICAgIFJldHVybnMgYSBzdGF0dXMuDQo+ICsNCj4gKyovDQo+ICt7DQo+ICsgIFVJTlQzMiAgICAg IEJsb2NrU2l6ZTsNCj4gKyAgVUlOVDMyICAgICAgVGFibGVTaXplOw0KPiArICBFRklfU1RBVFVT ICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCj4gKw0KPiArICBCbG9ja1NpemUgPSBCbG9ja0lvLT5N ZWRpYS0+QmxvY2tTaXplOw0KPiArICBUYWJsZVNpemUgPSBQcmltYXJ5SGVhZGVyLT5OdW1iZXJP ZlBhcnRpdGlvbkVudHJpZXMgKg0KPiBzaXplb2YoRUZJX1BBUlRJVElPTl9FTlRSWSk7DQo+ICsN Cj4gKyAgaWYgKCFNYnJWYWxpZCkgew0KPiArICAgIFdyaXRlUHJvdGVjdGl2ZU1iciAoKTsNCj4g KyAgfQ0KPiArICAvLw0KPiArICAvLyBXcml0ZSBvdXQgdGhlIHByaW1hcnkgaGVhZGVyLi4uDQo+ ICsgIC8vDQo+ICsgIFByaW1hcnlIZWFkZXItPkhlYWRlci5TaWduYXR1cmUgPSBFRklfUFRBQl9I RUFERVJfSUQ7DQo+ICsgIFByaW1hcnlIZWFkZXItPkhlYWRlci5SZXZpc2lvbiA9IEdQVF9SRVZJ U0lPTl8xXzA7DQo+ICsgIFByaW1hcnlIZWFkZXItPkhlYWRlci5IZWFkZXJTaXplID0NCj4gc2l6 ZW9mKEVGSV9QQVJUSVRJT05fVEFCTEVfSEVBREVSKTsNCj4gKw0KPiArICBQcmltYXJ5SGVhZGVy LT5BbHRlcm5hdGVMQkEgPSBCYWNrdXBIZWFkZXItPk15TEJBOw0KPiArDQo+ICsgIFByaW1hcnlI ZWFkZXItPlNpemVPZlBhcnRpdGlvbkVudHJ5ID0gc2l6ZW9mKEVGSV9QQVJUSVRJT05fRU5UUlkp Ow0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+Q2FsY3VsYXRlQ3JjMzIgKChVSU5UOCAqKVBhcnRF bnRyeSwgVGFibGVTaXplLA0KPiAmUHJpbWFyeUhlYWRlci0+UGFydGl0aW9uRW50cnlBcnJheUNS QzMyKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0 dXM7DQo+ICsgIH0NCj4gKw0KPiArICAvLyBXcml0ZSBwcmltYXJ5IGhlYWRlcg0KPiArICBQYXJ0 aXRpb25TZXRDcmMgKCZQcmltYXJ5SGVhZGVyLT5IZWFkZXIpOw0KPiArDQo+ICsgIFN0YXR1cyA9 IERpc2tJby0+V3JpdGVEaXNrICgNCj4gKyAgICBEaXNrSW8sDQo+ICsgICAgQmxvY2tJby0+TWVk aWEtPk1lZGlhSWQsDQo+ICsgICAgTXVsdFU2NHgzMiAoUHJpbWFyeUhlYWRlci0+TXlMQkEsIChV SU5UMzIpQmxvY2tTaXplKSwNCj4gKyAgICBCbG9ja1NpemUsDQo+ICsgICAgUHJpbWFyeUhlYWRl cg0KPiArICAgICk7DQo+ICsNCj4gKw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIFdyaXRl IG91dCB0aGUgcHJpbWFyeSB0YWJsZSAuLi4NCj4gKyAgLy8NCj4gKyAgU3RhdHVzID0gRGlza0lv LT5Xcml0ZURpc2sgKA0KPiArICAgIERpc2tJbywNCj4gKyAgICBCbG9ja0lvLT5NZWRpYS0+TWVk aWFJZCwNCj4gKyAgICBNdWx0VTY0eDMyIChQcmltYXJ5SGVhZGVyLT5QYXJ0aXRpb25FbnRyeUxC QSwgKFVJTlQzMilCbG9ja1NpemUpLA0KPiArICAgIFRhYmxlU2l6ZSwNCj4gKyAgICBQYXJ0RW50 cnkNCj4gKyAgICApOw0KPiArDQo+ICsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K PiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBXcml0 ZSBvdXQgdGhlIHNlY29uZGFyeSBoZWFkZXIgYW5kIHRhYmxlIGJ5IGNhbGxpbmcgcmVzdG9yZQ0K PiArICAvLw0KPiArDQo+ICsgIGlmICghUGFydGl0aW9uUmVzdG9yZUdwdFRhYmxlIChQcmltYXJ5 SGVhZGVyKSkgew0KPiArICAgIHJldHVybiBFRklfVk9MVU1FX0NPUlJVUFRFRDsNCj4gKyAgfQ0K PiArICBCbG9ja0lvLT5GbHVzaEJsb2NrcyAoQmxvY2tJbyk7DQo+ICsgIEdwdFZhbGlkID0gIUVG SV9FUlJPUiAoU3RhdHVzKTsNCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ ICsvKioNCj4gKyAgKFJlKWluaXRpYWxpemUgR1BUIHRhYmxlcyBvbiB0aGUgYmxvY2sgZGV2aWNl DQo+ICsNCj4gKyAgQHJldHVybiBFRklfU1VDQ0VTUyAgICBTdWNjZXNzZnVsbHkgKHJlKWluaXRp YWxpemVkIEdQVCBUYWJsZXMNCj4gKyAgQHJldHVybiBvdGhlciAgICAgICAgICBGYWlsZWQgdG8g KHJlKWluaXRpYWxpemUgR1BUIHRhYmxlcw0KPiArDQo+ICsqKi8NCj4gK1NUQVRJQw0KPiArRUZJ X1NUQVRVUw0KPiArVGFibGVDcmVhdGVFbXB0eUdwdCAoVk9JRCkNCj4gK3sNCj4gKyAgVUlOVE4g ICAgICAgRW50cnlDb3VudDsNCj4gKyAgVUlOVE4gICAgICAgQmxvY2tGaXQ7DQo+ICsgIFVJTlRO ICAgICAgIEJsb2NrU2l6ZTsNCj4gKyAgVUlOVE4gICAgICAgRW50cnlCbG9ja3M7DQo+ICsgIFVJ TlQ2NCAgICAgIERpc2tTaXplOw0KPiArICBVSU5UTiAgICAgICBUYWJsZVNpemU7DQo+ICsgIEVG SV9MQkEgICAgIEhlYWRlcjFfTEJBOw0KPiArICBFRklfTEJBICAgICBUYWJsZTFfTEJBOw0KPiAr ICBFRklfTEJBICAgICBIZWFkZXIyX0xCQTsNCj4gKyAgRUZJX0xCQSAgICAgVGFibGUyX0xCQTsN Cj4gKyAgRUZJX0xCQSAgICAgRmlyc3RVc2FibGVMQkE7DQo+ICsgIEVGSV9MQkEgICAgIExhc3RV c2FibGVMQkE7DQo+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gKw0KPiArICBFbnRyeUNvdW50 ID0gRU5UUllfREVGQVVMVDsNCj4gKyAgQmxvY2tTaXplID0gQmxvY2tJby0+TWVkaWEtPkJsb2Nr U2l6ZTsNCj4gKyAgQmxvY2tGaXQgPSAgQmxvY2tTaXplIC8gc2l6ZW9mKEVGSV9QQVJUSVRJT05f RU5UUlkpOw0KPiArDQo+ICsgIGlmIChCbG9ja0ZpdCA+IEVOVFJZX0RFRkFVTFQpIHsNCj4gKyAg ICBFbnRyeUNvdW50ID0gQmxvY2tGaXQ7DQo+ICsgIH0NCj4gKyAgRW50cnlCbG9ja3MgPSBFbnRy eUNvdW50IC8gQmxvY2tGaXQ7DQo+ICsNCj4gKyAgaWYgKChFbnRyeUJsb2NrcyAqIEJsb2NrRml0 KSAhPSBFbnRyeUNvdW50KSB7DQo+ICsgICAgU3RhdHVzID0gRUZJX1ZPTFVNRV9DT1JSVVBURUQ7 DQo+ICsgICAgUHJpbnRFcnIgKEwiSW52YWxpZCBFbnRyeSBibG9ja3MgYW5kIEVudHJ5IGNvdW50 IGNvbWJpbmF0aW9uXG4iLCBTdGF0dXMpOw0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0N Cj4gKw0KPiArICBEaXNrU2l6ZSA9IEJsb2NrSW8tPk1lZGlhLT5MYXN0QmxvY2sgKyAxOw0KPiAr DQo+ICsgIFNIRUxMX0ZSRUVfTk9OX05VTEwgKFByaW1hcnlIZWFkZXIpOw0KPiArICBTSEVMTF9G UkVFX05PTl9OVUxMIChCYWNrdXBIZWFkZXIpOw0KPiArICBTSEVMTF9GUkVFX05PTl9OVUxMIChQ YXJ0RW50cnkpOw0KPiArDQo+ICsgIFByaW1hcnlIZWFkZXIgPSBBbGxvY2F0ZVplcm9Qb29sIChC bG9ja1NpemUpOw0KPiArICBpZiAoUHJpbWFyeUhlYWRlciA9PSBOVUxMKSB7DQo+ICsgICAgcmV0 dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICB9DQo+ICsNCj4gKyAgQmFja3VwSGVhZGVy ID0gQWxsb2NhdGVaZXJvUG9vbCAoQmxvY2tTaXplKTsNCj4gKyAgaWYgKEJhY2t1cEhlYWRlciA9 PSBOVUxMKSB7DQo+ICsgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICB9DQo+ ICsNCj4gKyAgSGVhZGVyMV9MQkEgPSAxOw0KPiArICBUYWJsZTFfTEJBID0gMjsNCj4gKyAgRmly c3RVc2FibGVMQkEgPSBUYWJsZTFfTEJBICsgRW50cnlCbG9ja3M7DQo+ICsNCj4gKyAgSGVhZGVy Ml9MQkEgPSBEaXNrU2l6ZSAtIDE7DQo+ICsgIFRhYmxlMl9MQkEgPSBIZWFkZXIyX0xCQSAtIEVu dHJ5QmxvY2tzOw0KPiArICBMYXN0VXNhYmxlTEJBID0gVGFibGUyX0xCQSAtIDE7DQo+ICsNCj4g KyAgVGFibGVTaXplID0gRW50cnlCbG9ja3MgKiBCbG9ja1NpemU7DQo+ICsNCj4gKyAgaWYgKFRh YmxlU2l6ZSAhPSAoRW50cnlDb3VudCAqIHNpemVvZihFRklfUEFSVElUSU9OX0VOVFJZKSkpIHsN Cj4gKyAgICBTdGF0dXMgPSBFRklfVk9MVU1FX0NPUlJVUFRFRDsNCj4gKyAgICBQcmludEVyciAo TCJJbnZhbGlkIFRhYmxlIHNpemUgYW5kIEVudHJ5IGNvdW50IGNvbWJpbmF0aW9uXG4iLCBTdGF0 dXMpOw0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoR1BUX0RF QlVHX0xFVkVMKSB7DQo+ICsgICAgUHJpbnQgKEwiRGlza1NpemUgPSAlbHhcbiIsIERpc2tTaXpl KTsNCj4gKyAgICBQcmludCAoTCJCbG9ja1NpemUgPSAleFxuIiwgQmxvY2tTaXplKTsNCj4gKyAg ICBQcmludCAoTCJIZWFkZXIxX0xCQSA9ICVseFxuIiwgSGVhZGVyMV9MQkEpOw0KPiArICAgIFBy aW50IChMIlRhYmxlMV9MQkEgPSAlbHhcbiIsIFRhYmxlMV9MQkEpOw0KPiArICAgIFByaW50IChM IkZpcnN0VXNhYmxlTEJBID0gJWx4XG4iLCBGaXJzdFVzYWJsZUxCQSk7DQo+ICsgICAgUHJpbnQg KEwiSGVhZGVyMl9MQkEgPSAlbHhcbiIsIEhlYWRlcjJfTEJBKTsNCj4gKyAgICBQcmludCAoTCJU YWJsZTJfTEJBID0gJWx4XG4iLCBUYWJsZTJfTEJBKTsNCj4gKyAgICBQcmludCAoTCJMYXN0VXNh YmxlTEJBID0gJWx4XG4iLCBMYXN0VXNhYmxlTEJBKTsNCj4gKyAgICBQcmludCAoTCJFbnRyeUNv dW50ID0gJXhcbiIsIEVudHJ5Q291bnQpOw0KPiArICAgIFByaW50IChMIkVudHJ5QmxvY2tzID0g JXhcbiIsIEVudHJ5QmxvY2tzKTsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIFNpbmNl IHdlJ3JlIG1ha2luZyBlbXB0eSB0YWJsZXMsIHdlIGp1c3Qgd3JpdGUgemVyb3MuLi4NCj4gKyAg Ly8NCj4gKw0KPiArICBQYXJ0RW50cnkgPSBBbGxvY2F0ZVplcm9Qb29sIChUYWJsZVNpemUpOw0K PiArICBpZiAoUGFydEVudHJ5ID09IE5VTEwpIHsNCj4gKyAgICBTSEVMTF9GUkVFX05PTl9OVUxM IChQcmltYXJ5SGVhZGVyKTsNCj4gKyAgICBTSEVMTF9GUkVFX05PTl9OVUxMIChCYWNrdXBIZWFk ZXIpOw0KPiArICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gKyAgfQ0KPiArDQo+ ICsgIFBFbnRyeVN0YXR1cyA9IEFsbG9jYXRlWmVyb1Bvb2wgKFRhYmxlU2l6ZSk7DQo+ICsNCj4g KyAgUHJpbWFyeUhlYWRlci0+Rmlyc3RVc2FibGVMQkEgPSBGaXJzdFVzYWJsZUxCQTsNCj4gKyAg UHJpbWFyeUhlYWRlci0+TGFzdFVzYWJsZUxCQSA9IExhc3RVc2FibGVMQkE7DQo+ICsgIFByaW1h cnlIZWFkZXItPk51bWJlck9mUGFydGl0aW9uRW50cmllcyA9IChVSU5UMzIpRW50cnlDb3VudDsN Cj4gKyAgR2VuZXJhdGVHdWlkICgmUHJpbWFyeUhlYWRlci0+RGlza0dVSUQpOw0KPiArDQo+ICsg IFByaW1hcnlIZWFkZXItPk15TEJBICAgICAgICAgICAgID0gSGVhZGVyMV9MQkE7DQo+ICsgIEJh Y2t1cEhlYWRlci0+TXlMQkEgICAgICAgICAgICAgID0gSGVhZGVyMl9MQkE7DQo+ICsgIFByaW1h cnlIZWFkZXItPlBhcnRpdGlvbkVudHJ5TEJBID0gVGFibGUxX0xCQTsNCj4gKyAgQmFja3VwSGVh ZGVyLT5QYXJ0aXRpb25FbnRyeUxCQSAgPSBUYWJsZTJfTEJBOw0KPiArDQo+ICsgIFN0YXR1cyA9 IFdyaXRlR1BUICgpOw0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8q Kg0KPiArICBDbGVhciBHUFQgcGFydGl0aW9ucy4NCj4gKw0KPiArICBAcmV0dXJuIEVGSV9TVUND RVNTICAgIENsZWFyZWQgc3VjY2Vzc2Z1bGx5DQo+ICsgIEByZXR1cm4gRkFMU0UgICAgICAgICAg RmFpbGVkIHRvIGNsZWFyDQo+ICsNCj4gKyoqLw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtQYXJ0 aXRpb25HcHRDbGVhckFsbCAoVk9JRCkNCj4gK3sNCj4gKyAgR3B0Q2xlYW51cEdsb2JhbHMgKCk7 DQo+ICsgIEdwdFZhbGlkID0gRkFMU0U7DQo+ICsgIE1iclZhbGlkID0gRkFMU0U7DQo+ICsgIHJl dHVybiBUYWJsZUNyZWF0ZUVtcHR5R3B0ICgpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgQ3Jl YXRlIGEgR1BUIHBhcnRpdGlvbi4NCj4gKw0KPiArICBAcGFyYW0gIFBhcnROYW1lICAgICAgICAg ICAgICBQYXJ0aXRpb24gTmFtZQ0KPiArICBAcGFyYW0gIFN0YXJ0TGJhICAgICAgICAgICAgICBT dGFydGluZyBMQkEgb2YgdGhlIHBhcnRpdGlvbi4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaWYgemVybywgd2lsbCBiZSBjYWxjdWxhdGVkDQo+ICsgIEBwYXJhbSAgU2l6ZUlu TWVnYUJ5dGVzICAgICAgIFNpemUgb2YgdGhlIHBhcnRpdGlvbiBpbiBNQg0KPiArICBAcGFyYW0g IEF0dHJpYnV0ZXMgICAgICAgICAgICBQYXJ0aXRpb24gYXR0cmlidXRlcw0KPiArICBAcGFyYW0g IFBhcnRUeXBlR3VpZCAgICAgICAgICBhIFR5cGUgR1VJRCB0byBiZSBhc3NpZ25lZCB0byB0aGUg cGFydGl0aW9uDQo+IChub3QgYSBwYXJ0aXRpb24gdW5pcXVlIEdVSUQpDQo+ICsNCj4gKw0KPiAr ICBAcmV0dXJuIEVGSV9TVUNDRVNTICAgICAgICAgICBQYXJ0aXRpb24gc3VjY2Vzc2Z1bGx5IGNy ZWF0ZWQNCj4gKyAgQHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVIgRWl0aGVyIHBhcnRpdGlv biBleGlzdHMsIG9yIHdyb25nDQo+IHBhcmFtZXRlcnMgc3BlY2lmaWVkDQo+ICsgIEByZXR1cm4g b3RoZXIgICAgICAgICAgICAgICAgIEZhaWxlZCB0byBjcmVhdGUgYSBwYXJ0aXRpb24NCj4gKyoq Lw0KPiArRUZJX1NUQVRVUw0KPiArUGFydGl0aW9uR3B0Q3JlYXRlUGFydGl0aW9uICgNCj4gKyAg SU4gQ09OU1QgQ0hBUjE2ICpQYXJ0TmFtZSwNCj4gKyAgSU4gRUZJX0xCQSBTdGFydExiYSwNCj4g KyAgSU4gVUlOVDY0IFNpemVJbk1lZ2FieXRlcywNCj4gKyAgSU4gVUlOVDY0IEF0dHJpYnV0ZXMs DQo+ICsgIElOIEVGSV9HVUlEIFBhcnRUeXBlR3VpZCkNCj4gK3sNCj4gKyAgRUZJX0dVSUQgICAg R3VpZCwgUGFydGl0aW9uSWRHdWlkOw0KPiArICBFRklfU1RBVFVTICBTdGF0dXM7DQo+ICsgIFVJ TlQ2NCAgICAgIFN0YXJ0QmxvY2s7DQo+ICsgIFVJTlQ2NCAgICAgIEVuZEJsb2NrOw0KPiArICBV SU5UNjQgICAgICBTaXplSW5CeXRlcyA9IDA7DQo+ICsgIFVJTlQzMiAgICAgIEJsb2NrU2l6ZTsN Cj4gKyAgVUlOVDY0ICAgICAgRGlza1NpemVCbG9ja3M7DQo+ICsgIFVJTlQ4ICAgICAgICpwOw0K PiArICBCT09MRUFOICAgICBPZmZzZXRTcGVjaWZpZWQgPSBGQUxTRTsNCj4gKyAgQk9PTEVBTiAg ICAgQWxsWmVyb3M7DQo+ICsgIElOVE4gICAgICAgIEFsbFplcm9FbnRyeTsNCj4gKyAgSU5UTiAg ICAgICAgT2xkRnJlZUVudHJ5Ow0KPiArICBVSU5UNjQgICAgICBBdmFpbEJsb2NrczsNCj4gKyAg VUlOVDY0ICAgICAgQmxvY2tzVG9BbGxvY2F0ZTsNCj4gKyAgVUlOVDY0ICAgICAgSGlnaFNlZW47 DQo+ICsgIFVJTlROICAgICAgIFNsb3Q7DQo+ICsgIFVJTlQ2NCAgICAgIExvd2VzdEFsaWduZWRM YmE7DQo+ICsgIFVJTlQzMiAgICAgIE9wdGltYWxUcmFuc2ZlckJsb2NrczsNCj4gKyAgVUlOVE4g ICAgICAgaSwgajsNCj4gKyAgQ0hBUjE2ICAgICAgUGFydE5hbWVVc2VkW01BWF9QQVJUSVRJT05f TkFNRV9MRU5HVEggKyAxXSA9IHsgTCdcMCcgfTsNCj4gKyAgRUZJX1BBUlRJVElPTl9FTlRSWSAq RW50cnk7DQo+ICsNCj4gKyAgTG93ZXN0QWxpZ25lZExiYSA9IDA7DQo+ICsgIE9wdGltYWxUcmFu c2ZlckJsb2NrcyA9IDE7DQo+ICsNCj4gKyAgQWxsWmVyb0VudHJ5ID0gLTE7DQo+ICsgIE9sZEZy ZWVFbnRyeSA9IC0xOw0KPiArDQo+ICsgIEJsb2NrU2l6ZSA9IEJsb2NrSW8tPk1lZGlhLT5CbG9j a1NpemU7DQo+ICsgIE9mZnNldFNwZWNpZmllZCA9IChTdGFydExiYSAhPSAwKTsNCj4gKyAgQ29w eU1lbSAoJlBhcnROYW1lVXNlZCwgUGFydE5hbWUsIHNpemVvZihDSEFSMTYpICogU3RyU2l6ZQ0K PiAoUGFydE5hbWUpKTsNCj4gKw0KPiArICBHZW5lcmF0ZUd1aWQgKCZHdWlkKTsNCj4gKw0KPiAr ICAvLyBDcmVhdGluZyBhIG5ldyBwYXJ0aXRpb24NCj4gKyAgaWYgKCFHcHRWYWxpZCkgew0KPiAr ICAgIC8vIENyZWF0aW5nIGEgR1BUIGZvciB0aGUgZmlyc3QgdGltZQ0KPiArICAgIFN0YXR1cyA9 IFRhYmxlQ3JlYXRlRW1wdHlHcHQgKCk7DQo+ICsgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gKyAgICAgIC8vIEZpbGwgaW4gdGhlIHN0cnVjdHVyZXMNCj4gKyAgICAgIFN0YXR1cyA9 IFBhcnRpdGlvbkdldEdwdFRhYmxlcyAoRGlza0lvLCBCbG9ja0lvKTsNCj4gKyAgICB9DQo+ICsg ICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgcmV0dXJuIFN0YXR1czsNCj4g KyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBFbnRyeSA9IFBhcnRpdGlvbkZpbmRQYXJ0aXRpb25C eUNyaXRlcmlhIChQYXJ0TmFtZSwgMCwgMCwgU1JDX0JZX05BTUUpOw0KPiArICBpZiAoRW50cnkp IHsNCj4gKyAgICBTdGF0dXMgPSBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgICAgUHJpbnRF cnIgKEwiUGFydGl0aW9uIHdpdGggdGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzIiwgU3RhdHVzKTsN Cj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsgIEhpZ2hTZWVuICAgICA9IFByaW1h cnlIZWFkZXItPkZpcnN0VXNhYmxlTEJBIC0gMTsNCj4gKw0KPiArICBpZiAoU3RhcnRMYmEpIHsN Cj4gKyAgICAvLw0KPiArICAgIC8vIGlmIG9mZnNldCBpcyBzcGVjaWZpZWQsIGNvbXB1dGUgdGhl IHN0YXJ0IGFuZCBlbmQgYmxvY2tzDQo+ICsgICAgLy8NCj4gKyAgICBTdGFydEJsb2NrID0gU3Rh cnRMYmE7DQo+ICsgICAgLy8NCj4gKyAgICAvLyBTdGFydEJsb2NrIHNob3VsZCBiZSBhbGlnbmVk IHRvIE9wdGltYWxUcmFuc2ZlckJsb2NrcywgdGhlIGxlYXN0DQo+IGNvbW1vbiBtdWx0aXBsZSBv ZjoNCj4gKyAgICAvLyBhKS4gdGhlIHBoeXNpY2FsIGJsb2NrIGJvdW5kYXJ5LCBpZiBhbnkNCj4g KyAgICAvLyBiKS4gdGhlIG9wdGltYWwgdHJhbnNmZXIgbGVuZ3RoIGdyYW51bGFyaXR5LCBpZiBh bnkNCj4gKyAgICAvLw0KPiArICAgIGlmIChTdGFydEJsb2NrIDwgTG93ZXN0QWxpZ25lZExiYSkg ew0KPiArICAgICAgU3RhcnRCbG9jayA9IExvd2VzdEFsaWduZWRMYmE7DQo+ICsgICAgfSBlbHNl IHsNCj4gKyAgICAgIHdoaWxlICgoKFN0YXJ0QmxvY2sgLSBMb3dlc3RBbGlnbmVkTGJhKSAlIE9w dGltYWxUcmFuc2ZlckJsb2NrcykgIT0gMCkgew0KPiArICAgICAgICBTdGFydEJsb2NrKys7DQo+ ICsgICAgICB9DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKFN0YXJ0QmxvY2sgPCBQcmltYXJ5 SGVhZGVyLT5GaXJzdFVzYWJsZUxCQSB8fA0KPiArICAgICAgICBTdGFydEJsb2NrID4gUHJpbWFy eUhlYWRlci0+TGFzdFVzYWJsZUxCQSkgew0KPiArICAgICAgLy8NCj4gKyAgICAgIC8vIE9mZnNl dCBzcGVjaWZpZWQgaXMgdG9vIGxhcmdlDQo+ICsgICAgICAvLw0KPiArICAgICAgU3RhdHVzID0g RUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICAgICAgUHJpbnRFcnIgKEwiU3BlY2lmaWVkIG9m ZnNldCBpcyB0b28gbGFyZ2UiLCBFRklfSU5WQUxJRF9QQVJBTUVURVIpOw0KPiArICAgICAgZ290 byBFeGl0Ow0KPiArICAgIH0NCj4gKw0KPiArICAgIFNpemVJbkJ5dGVzID0gTXVsdFU2NHgzMiAo U2l6ZUluTWVnYWJ5dGVzLCAoMTAyNCAqIDEwMjQpKTsNCj4gKyAgICBpZiAoU2l6ZUluQnl0ZXMg PCBTaXplSW5NZWdhYnl0ZXMgfHwgU2l6ZUluQnl0ZXMgPT0gMCkgew0KPiArICAgICAgLy8NCj4g KyAgICAgIC8vIElmIHNpemUgaXMgbm90IHNwZWNpZmllZCBvciB0b28gbGFyZ2UsDQo+ICsgICAg ICAvLyB0cnkgdG8gbWFrZSB0aGUgcGFydGl0aW9uIGFzIGJpZyBhcyBpdCBjYW4gYmUNCj4gKyAg ICAgIC8vDQo+ICsgICAgICBCbG9ja3NUb0FsbG9jYXRlID0gRW5kQmxvY2sgPSBTaXplSW5CeXRl cyA9IDB4ZmZmZmZmZmZmZmZmZmZmZjsNCj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAgQmxvY2tz VG9BbGxvY2F0ZSA9IERpdlU2NHgzMiAoU2l6ZUluQnl0ZXMsIEJsb2NrU2l6ZSk7DQo+ICsgICAg ICBFbmRCbG9jayA9IFN0YXJ0QmxvY2sgKyBCbG9ja3NUb0FsbG9jYXRlIC0gMTsNCj4gKyAgICAg IGlmIChFbmRCbG9jayA+IFByaW1hcnlIZWFkZXItPkxhc3RVc2FibGVMQkEpIHsNCj4gKyAgICAg ICAgRW5kQmxvY2sgPSBQcmltYXJ5SGVhZGVyLT5MYXN0VXNhYmxlTEJBOw0KPiArICAgICAgICBC bG9ja3NUb0FsbG9jYXRlID0gRW5kQmxvY2sgLSBTdGFydEJsb2NrICsgMTsNCj4gKyAgICAgIH0N Cj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBmb3IgKGkgPSAwOyBpIDwgUHJpbWFyeUhlYWRl ci0+TnVtYmVyT2ZQYXJ0aXRpb25FbnRyaWVzOyBpKyspIHsNCj4gKyAgICBFbnRyeSA9IChFRklf UEFSVElUSU9OX0VOVFJZICopKChVSU5UOCAqKVBhcnRFbnRyeSArIGkgKg0KPiBQcmltYXJ5SGVh ZGVyLT5TaXplT2ZQYXJ0aXRpb25FbnRyeSk7DQo+ICsgICAgaWYgKCFDb21wYXJlR3VpZCAoJkVu dHJ5LT5QYXJ0aXRpb25UeXBlR1VJRCwNCj4gJmdFZmlQYXJ0VHlwZVVudXNlZEd1aWQpKSB7DQo+ ICsNCj4gKyAgICAgIC8vDQo+ICsgICAgICAvLyBUeXBlIG5vdCBudWxsLCBzbyBpdCdzIGFsbG9j YXRlZA0KPiArICAgICAgLy8NCj4gKyAgICAgIGlmIChFbnRyeS0+RW5kaW5nTEJBID4gSGlnaFNl ZW4pIHsNCj4gKyAgICAgICAgSGlnaFNlZW4gPSBFbnRyeS0+RW5kaW5nTEJBOw0KPiArICAgICAg fQ0KPiArICAgICAgaWYgKE9mZnNldFNwZWNpZmllZCkgew0KPiArICAgICAgICAvLw0KPiArICAg ICAgICAvLyBtYWtlIHN1cmUgbmV3IHBhcnRpdGlvbiBkb2VzIG5vdCBvdmVybGFwIHdpdGggZXhp c3RpbmcgcGFydGl0aW9ucw0KPiArICAgICAgICAvLw0KPiArICAgICAgICBpZiAoRW50cnktPlN0 YXJ0aW5nTEJBIDw9IFN0YXJ0QmxvY2sgJiYNCj4gKyAgICAgICAgICAgIFN0YXJ0QmxvY2sgPD0g RW50cnktPkVuZGluZ0xCQSkgew0KPiArICAgICAgICAgIC8vDQo+ICsgICAgICAgICAgLy8gc3Rh cnRpbmcgYmxvY2sgaXMgaW5zaWRlIGFuIGV4aXN0aW5nIHBhcnRpdGlvbg0KPiArICAgICAgICAg IC8vDQo+ICsgICAgICAgICAgU3RhdHVzID0gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICAg ICAgICAgIFByaW50RXJyIChMIlN0YXJ0aW5nIGJsb2NrIGlzIGluc2lkZSBhbiBleGlzdGluZyBw YXJ0aXRpb24iLCBTdGF0dXMpOw0KPiArICAgICAgICAgIGdvdG8gRXhpdDsNCj4gKyAgICAgICAg fQ0KPiArICAgICAgICBpZiAoKEVudHJ5LT5TdGFydGluZ0xCQSA8PSBFbmRCbG9jayAmJg0KPiAr ICAgICAgICAgICAgIEVuZEJsb2NrIDw9IEVudHJ5LT5FbmRpbmdMQkEpIHx8DQo+ICsgICAgICAg ICAgICAoU3RhcnRCbG9jayA8PSBFbnRyeS0+U3RhcnRpbmdMQkEgJiYNCj4gKyAgICAgICAgICAg ICBFbnRyeS0+U3RhcnRpbmdMQkEgPD0gRW5kQmxvY2spIHx8DQo+ICsgICAgICAgICAgICAoU3Rh cnRCbG9jayA8PSBFbnRyeS0+RW5kaW5nTEJBICYmDQo+ICsgICAgICAgICAgICAgRW50cnktPkVu ZGluZ0xCQSA8PSBFbmRCbG9jaykpIHsNCj4gKyAgICAgICAgICAvLw0KPiArICAgICAgICAgIC8v IG5ldyBwYXJ0aXRpb24gb3ZlcmxhcHMgd2l0aCBhbiBleGlzdGluZyBwYXJ0aXRpb24NCj4gKyAg ICAgICAgICAvLyByZWFkanVzdCBuZXcgcGFydGl0aW9uIHNpemUgdG8gYXZvaWQgb3ZlcmxhcHBp bmcNCj4gKyAgICAgICAgICAvLw0KPiArICAgICAgICAgIEVuZEJsb2NrID0gRW50cnktPlN0YXJ0 aW5nTEJBIC0gMTsNCj4gKyAgICAgICAgICBpZiAoRW5kQmxvY2sgPCBTdGFydEJsb2NrKSB7DQo+ ICsgICAgICAgICAgICBTdGF0dXMgPSBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgICAgICAg ICAgICBQcmludEVyciAoTCJDYW5ub3QgcmVhZGp1c3QgbmV3IHBhcnRpdGlvbiBzaXplIC0gb3Zl cmxhcHBpbmciLCBTdGF0dXMpOw0KPiArICAgICAgICAgICAgZ290byBFeGl0Ow0KPiArICAgICAg ICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAgICBCbG9ja3NUb0FsbG9jYXRlID0gRW5kQmxvY2sg LSBTdGFydEJsb2NrICsgMTsNCj4gKyAgICAgICAgICB9DQo+ICsgICAgICAgIH0NCj4gKyAgICAg IH0NCj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAgcCA9IChVSU5UOCAqKShFbnRyeSk7DQo+ICsg ICAgICBBbGxaZXJvcyA9IFRSVUU7DQo+ICsgICAgICBmb3IgKGogPSAwOyBqIDwgc2l6ZW9mKEVG SV9QQVJUSVRJT05fRU5UUlkpOyBqKyspIHsNCj4gKyAgICAgICAgaWYgKHBbal0gIT0gMCkgew0K PiArICAgICAgICAgIEFsbFplcm9zID0gRkFMU0U7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgIH0N Cj4gKyAgICAgIGlmIChBbGxaZXJvcykgew0KPiArICAgICAgICBpZiAoQWxsWmVyb0VudHJ5ID09 IC0xKSB7DQo+ICsgICAgICAgICAgQWxsWmVyb0VudHJ5ID0gaTsNCj4gKyAgICAgICAgfQ0KPiAr ICAgICAgfSBlbHNlIGlmIChPbGRGcmVlRW50cnkgPT0gLTEpIHsNCj4gKyAgICAgICAgT2xkRnJl ZUVudHJ5ID0gaTsNCj4gKyAgICAgIH0NCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICAvLw0K PiArICAvLyBBbGxaZXJvRW50cnkgLSBpZiBub3QgLTEsIGlzIHBvaW50ZXIgdG8gYSBuZXZlciBi ZWZvcmUgdXNlZCBlbnRyeSAoZnJlZSkNCj4gKyAgLy8gT2xkRnJlZUVudHJ5IC0gaWYgbm90IC0x LCBpcyBwb2ludGVyIHRvIHNvbWUgcHJlLXVzZWQgZnJlZSBlbnRyeQ0KPiArICAvLw0KPiArICBp ZiAoKEFsbFplcm9FbnRyeSA9PSAtMSkgJiYgKE9sZEZyZWVFbnRyeSA9PSAtMSkpIHsNCj4gKyAg ICAvLw0KPiArICAgIC8vIFRBQkxFIElTIEZVTEwhIQ0KPiArICAgIC8vDQo+ICsgICAgU3RhdHVz ID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgICAgUHJpbnRFcnIgKEwiVGFibGUgaXMgZnVs bCIsIFN0YXR1cyk7DQo+ICsgICAgZ290byBFeGl0Ow0KPiArICB9DQo+ICsNCj4gKyAgaWYgKE9m ZnNldFNwZWNpZmllZCkgew0KPiArICAgIC8vDQo+ICsgICAgLy8gdGhlIHVzZXIgaGF2ZW4ndCBz cGVjaWZpZWQgdGhlIG5ldyBwYXJ0aXRpb24gc2l6ZSBhbmQgd2UgaGF2ZW4ndA0KPiArICAgIC8v IHJ1biBpbnRvIGFueSBwYXJ0aXRpb24gdGhhdCB3aWxsIGxpbWl0IHRoZSBzaXplIG9mIHRoaXMg bmV3IHBhcnRpdGlvbi4NCj4gKyAgICAvLyBTbywgdXNlIHRoZSBtYXggaXQgY2FuDQo+ICsgICAg Ly8NCj4gKyAgICBpZiAoQmxvY2tzVG9BbGxvY2F0ZSA9PSAtMSkgew0KPiArICAgICAgRW5kQmxv Y2sgPSBQcmltYXJ5SGVhZGVyLT5MYXN0VXNhYmxlTEJBOw0KPiArICAgICAgQmxvY2tzVG9BbGxv Y2F0ZSA9IEVuZEJsb2NrIC0gU3RhcnRCbG9jayArIDE7DQo+ICsgICAgfQ0KPiArICB9IGVsc2Ug ew0KPiArICAgIC8vDQo+ICsgICAgLy8gQmVjYXVzZSBIaWdoU2VlbiBpcyB0aGUgbGFzdCBMQkEg b2YgdGhlIHVzZWQgYmxvY2tzLCBsZXQgSGlnaFNlZW4gYWxpZ24NCj4gdG8gdGhlIGxlYXN0IGNv bW1vbiBtdWx0aXBsZSBvZjoNCj4gKyAgICAvLyBhKS4gdGhlIHBoeXNpY2FsIGJsb2NrIGJvdW5k YXJ5LCBpZiBhbnkNCj4gKyAgICAvLyBiKS4gdGhlIG9wdGltYWwgdHJhbnNmZXIgbGVuZ3RoIGdy YW51bGFyaXR5LCBpZiBhbnkNCj4gKyAgICAvLw0KPiArICAgIGlmIChIaWdoU2VlbiArIDEgPCBM b3dlc3RBbGlnbmVkTGJhKSB7DQo+ICsgICAgICBIaWdoU2VlbiA9IExvd2VzdEFsaWduZWRMYmEg LSAxOw0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICB3aGlsZSAoKChIaWdoU2VlbiArIDEgLSBM b3dlc3RBbGlnbmVkTGJhKSAlIE9wdGltYWxUcmFuc2ZlckJsb2NrcykgIT0gMCkNCj4gew0KPiAr ICAgICAgICBIaWdoU2VlbisrOw0KPiArICAgICAgfQ0KPiArICAgIH0NCj4gKw0KPiArICAgIGlm IChQcmltYXJ5SGVhZGVyLT5MYXN0VXNhYmxlTEJBIDw9IEhpZ2hTZWVuKSB7DQo+ICsgICAgICBT dGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gKyAgICAgIFByaW50RXJyIChMIkRpc2sg aGFzIG5vIGZyZWUgYmxvY2tzIChGVUxMKSBjYW5ub3QgY3JlYXRlIiwgU3RhdHVzKTsNCj4gKyAg ICAgIGdvdG8gRXhpdDsNCj4gKyAgICB9DQo+ICsgICAgLy8NCj4gKyAgICAvLyBbSGlnaFNlZW4r MSAuLi4gTGFzdFVzYWJsZUxCQV0gaXMgYXZhaWxhYmxlLi4uDQo+ICsgICAgLy8gYXZhaWwgPSAo TGFzdFVzYWJsZUxCQSAtIChIaWdoU2VlbisxKSkgKyAxID0+IExhc3RVc2FiYmxlTEJBIC0NCj4g SGlnaFNlZW4NCj4gKyAgICAvLw0KPiArICAgIEF2YWlsQmxvY2tzID0gUHJpbWFyeUhlYWRlci0+ TGFzdFVzYWJsZUxCQSAtIEhpZ2hTZWVuOw0KPiArDQo+ICsgICAgU2l6ZUluQnl0ZXMgPSBNdWx0 VTY0eDMyIChTaXplSW5NZWdhYnl0ZXMsICgxMDI0ICogMTAyNCkpOw0KPiArICAgIGlmIChTaXpl SW5CeXRlcyA8IFNpemVJbk1lZ2FieXRlcykgew0KPiArICAgICAgLy8NCj4gKyAgICAgIC8vIG92 ZXJmbG93LCBmb3JjZSBhIHZlcnkgYmlnIGFuc3dlcg0KPiArICAgICAgLy8NCj4gKyAgICAgIFNp emVJbkJ5dGVzID0gMHhmZmZmZmZmZmZmZmZmZmZmOw0KPiArICAgIH0NCj4gKw0KPiArICAgIGlm ICAoKFNpemVJbkJ5dGVzID09IDApIHx8DQo+ICsgICAgICAgICAoU2l6ZUluQnl0ZXMgPiAoTXVs dFU2NHgzMiAoQXZhaWxCbG9ja3MsIEJsb2NrU2l6ZSkpKSkgew0KPiArICAgICAgLy8NCj4gKyAg ICAgIC8vIFVzZXIgYXNrZWQgZm9yIHplcm8sIG9yIGZvciBtb3JlIHRoYW4gd2UndmUgZ290LA0K PiArICAgICAgLy8gc28gZ2l2ZSB0aGVtIGFsbCB0aGF0IGlzIGxlZnQNCj4gKyAgICAgIC8vDQo+ ICsgICAgICBCbG9ja3NUb0FsbG9jYXRlID0gQXZhaWxCbG9ja3M7DQo+ICsNCj4gKyAgICB9IGVs c2Ugew0KPiArDQo+ICsgICAgICAvLw0KPiArICAgICAgLy8gV2Ugd291bGQgaGF2ZSB0byBoYXZl IGEgQmxvY2tTaXplID4gMW1iIGZvciBSZW1haW5kZXIgdG8NCj4gKyAgICAgIC8vIG5vdCBiZSAw LiAgU2luY2Ugd2UgY2Fubm90IGFjdHVhbGx5IHRlc3QgdGhpcyBjYXNlLCB3ZQ0KPiArICAgICAg Ly8gaW5nb3JlIGl0Li4uDQo+ICsgICAgICAvLw0KPiArICAgICAgQmxvY2tzVG9BbGxvY2F0ZSA9 IERpdlU2NHgzMiAoU2l6ZUluQnl0ZXMsIEJsb2NrU2l6ZSk7DQo+ICsNCj4gKyAgICB9DQo+ICsg IH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBXZSBoYXZlIGEgbmFtZQ0KPiArICAvLyBXZSBoYXZl IGEgdHlwZSBndWlkDQo+ICsgIC8vIFdlIGhhdmUgYSBzaXplIGluIGJsb2Nrcw0KPiArICAvLyBX ZSBoYXZlIGFuIGF0dHJpYnV0ZSBtYXNrDQo+ICsgIC8vDQo+ICsNCj4gKyAgaWYgKEJsb2Nrc1Rv QWxsb2NhdGUgPCAoKDEwMjQgKiAxMDI0KSAvIEJsb2NrU2l6ZSkpIHsNCj4gKyAgICBTdGF0dXMg PSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gKyAgICBQcmludEVyciAoTCJQYXJ0aXRpb24gaXMg dG9vIHNtYWxsIHRvIGJlIGNyZWF0ZWQiLCBTdGF0dXMpOw0KPiArICAgIGdvdG8gRXhpdDsNCj4g KyAgfQ0KPiArDQo+ICsgIGlmIChHUFRfREVCVUdfTEVWRUwpIHsNCj4gKyAgICBQcmludCAoTCJS ZXF1ZXN0ZWQgU2l6ZUluTWVnYUJ5dGVzID0gJWxkXG4iLCBTaXplSW5NZWdhYnl0ZXMpOw0KPiAr ICAgIFByaW50IChMIlJlc3VsdGluZyBzaXplIGluIEJsb2NrcyA9ICVsZFxuIiwgQmxvY2tzVG9B bGxvY2F0ZSk7DQo+ICsgICAgUHJpbnQgKEwiUmVzdWx0cyBzaXplIGluIEJ5dGVzID0gJWxkXG4i LCBNdWx0VTY0eDMyIChCbG9ja3NUb0FsbG9jYXRlLA0KPiBCbG9ja1NpemUpKTsNCj4gKyAgfQ0K PiArDQo+ICsgIGlmIChBbGxaZXJvRW50cnkgIT0gLTEpIHsNCj4gKyAgICBTbG90ID0gQWxsWmVy b0VudHJ5Ow0KPiArICB9IGVsc2Ugew0KPiArICAgIFNsb3QgPSBPbGRGcmVlRW50cnk7DQo+ICsg IH0NCj4gKw0KPiArICBHZW5lcmF0ZUd1aWQgKCZQYXJ0aXRpb25JZEd1aWQpOw0KPiArICBFbnRy eSA9IChFRklfUEFSVElUSU9OX0VOVFJZICopKChVSU5UOCAqKVBhcnRFbnRyeSArIFNsb3QgKg0K PiBQcmltYXJ5SGVhZGVyLT5TaXplT2ZQYXJ0aXRpb25FbnRyeSk7DQo+ICsNCj4gKyAgQ29weU1l bSAoJkVudHJ5LT5QYXJ0aXRpb25UeXBlR1VJRCwgJlBhcnRUeXBlR3VpZCwNCj4gc2l6ZW9mKEVG SV9HVUlEKSk7DQo+ICsgIENvcHlNZW0gKCZFbnRyeS0+VW5pcXVlUGFydGl0aW9uR1VJRCwgJlBh cnRpdGlvbklkR3VpZCwNCj4gc2l6ZW9mKEVGSV9HVUlEKSk7DQo+ICsgIGlmIChPZmZzZXRTcGVj aWZpZWQpIHsNCj4gKyAgICBQYXJ0RW50cnlbU2xvdF0uU3RhcnRpbmdMQkEgPSBTdGFydEJsb2Nr Ow0KPiArICAgIFBhcnRFbnRyeVtTbG90XS5FbmRpbmdMQkEgPSBFbmRCbG9jazsNCj4gKyAgfSBl bHNlIHsNCj4gKyAgICBQYXJ0RW50cnlbU2xvdF0uU3RhcnRpbmdMQkEgPSBIaWdoU2VlbiArIDE7 DQo+ICsgICAgUGFydEVudHJ5W1Nsb3RdLkVuZGluZ0xCQSA9IEhpZ2hTZWVuICsgQmxvY2tzVG9B bGxvY2F0ZTsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmICghKCgoRW50cnktPkVuZGluZ0xCQSAtIEVu dHJ5LT5TdGFydGluZ0xCQSkgKyAxKSA9PSBCbG9ja3NUb0FsbG9jYXRlKSkgew0KPiArICAgIFBy aW50RXJyIChMIldyb25nIFNpemUgZm9yIG5ldyBwYXJ0aXRvbiIsIEVGSV9JTlZBTElEX1BBUkFN RVRFUik7DQo+ICsgICAgZ290byBFeGl0Ow0KPiArICB9DQo+ICsNCj4gKyAgaWYgKChFbnRyeS0+ U3RhcnRpbmdMQkEgPCBQcmltYXJ5SGVhZGVyLT5GaXJzdFVzYWJsZUxCQSkgfHwNCj4gKyAgICAg IChFbnRyeS0+RW5kaW5nTEJBID4gUHJpbWFyeUhlYWRlci0+TGFzdFVzYWJsZUxCQSkpIHsNCj4g KyAgICBQcmludEVyciAoTCJOZXcgUGFydGl0aW9uIG91dCBvZiBib3VuZHMiLCBFRklfSU5WQUxJ RF9QQVJBTUVURVIpOw0KPiArICAgIGdvdG8gRXhpdDsNCj4gKyAgfQ0KPiArDQo+ICsgIEVudHJ5 LT5BdHRyaWJ1dGVzID0gQXR0cmlidXRlczsNCj4gKyAgQ29weU1lbSAoJihFbnRyeS0+UGFydGl0 aW9uTmFtZVswXSksIFBhcnROYW1lLA0KPiBNQVhfUEFSVElUSU9OX05BTUVfTEVOR1RIICogc2l6 ZW9mKENIQVIxNikpOw0KPiArDQo+ICsgIERpc2tTaXplQmxvY2tzID0gQmxvY2tJby0+TWVkaWEt Pkxhc3RCbG9jayArIDE7DQo+ICsgIGlmIChEaXNrU2l6ZUJsb2NrcyA+IDB4ZmZmZmZmZmYpIHsN Cj4gKyAgICBEaXNrU2l6ZUJsb2NrcyA9IDB4ZmZmZmZmZmY7DQo+ICsgIH0NCj4gKw0KPiArICBT dGF0dXMgPSBXcml0ZUdQVCAoKTsNCj4gKw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQo+ICsgICAgUHJpbnRFcnIgKEwiQXR0ZW1wdCB0byBXcml0ZSBvdXQgcGFydGl0aW9uIHRhYmxl IGZhaWxlZCIsIFN0YXR1cyk7DQo+ICsgIH0NCj4gKw0KPiArIEV4aXQ6DQo+ICsgIHJldHVybiBT dGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBNb2RpZml5IGEgcGFydGl0aW9uIGJhc2Vk IG9uIHBhcmFtZXRlcnMuDQo+ICsNCj4gKyAgQHBhcmFtICBFbnRyeSAgICAgIFBvaW50ZXIgdG8g YW4gZXhpc3RpbmcgcGFydGl0aW9uDQo+ICsgIEBwYXJhbSAgUGFyYW1zICAgICBQYXJhbWV0ZXJz IHRvIGJlIG1vZGlmaWVkDQo+ICsgIEBwYXJhbSAgRmxhZ3MgICAgICBXaGljaCBwYXJhbWV0ZXIg aXMgdG8gYmUgbW9kaWZpZWQNCj4gKw0KPiArICBAcmV0dXJuIEVGSV9TVUNDRVNTICBTdWNjZXNz ZnVsbHkgbW9kaWZpZWQgdGhlIHBhcnRpdGlvbg0KPiArICBAcmV0dXJuIG90aGVyICAgICAgICBG YWlsZWQgdG8gbW9kaWZ5IGEgcGFydGl0aW9uDQo+ICsNCj4gKyoqLw0KPiArDQo+ICtFRklfU1RB VFVTDQo+ICtQYXJ0aXRpb25HcHRNb2RpZnlQYXJ0aXRpb24gKA0KPiArICBJTiBFRklfUEFSVElU SU9OX0VOVFJZICpFbnRyeSwNCj4gKyAgSU4gTU9EX1BBUkFNUyAqUGFyYW1zLA0KPiArICBJTiBN T0RfRkxBR1MgRmxhZ3MNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTIFN0YXR1czsNCj4g Kw0KPiArICBBU1NFUlQgKEVudHJ5KTsNCj4gKw0KPiArICBTdGF0dXMgPSBFRklfSU5WQUxJRF9Q QVJBTUVURVI7DQo+ICsNCj4gKyAgc3dpdGNoIChGbGFncykgew0KPiArICAgIGNhc2UgTU9EX0RF TEVURToNCj4gKyAgICAgIFplcm9NZW0gKEVudHJ5LCBzaXplb2YoRUZJX1BBUlRJVElPTl9FTlRS WSkpOw0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBNT0RfQVRUUjoNCj4gKyAgICAgIEVu dHJ5LT5BdHRyaWJ1dGVzID0gUGFyYW1zLT5BdHRyaWJ1dGVzOw0KPiArICAgICAgYnJlYWs7DQo+ ICsgICAgY2FzZSBNT0RfVFlQRToNCj4gKyAgICAgIEVudHJ5LT5QYXJ0aXRpb25UeXBlR1VJRCA9 IFBhcmFtcy0+UGFydFR5cGVHdWlkOw0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBNT0Rf UkVOQU1FOg0KPiArICAgICAgU3RyQ3B5IChFbnRyeS0+UGFydGl0aW9uTmFtZSwgUGFyYW1zLT5O ZXdOYW1lKTsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIGRlZmF1bHQ6DQo+ICsgICAgICBQcmlu dEVyciAoTCJVbmtub3duIG1vZGlmaWNhdGlvbiBmbGFnKHMpIiwgU3RhdHVzKTsNCj4gKyAgICAg IHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gV3JpdGVHUFQgKCk7DQo+ ICt9DQo+ICsNCj4gK0VGSV9LTk9XTl9QQVJUSVRJT05fVFlQRSAqUGFydGl0aW9uR2V0S25vd25U eXBlICgNCj4gKyAgSU4gVUlOVE4gSW5kZXgsDQo+ICsgIElOIE9VVCBPUFRJT05BTCBVSU5UTiAq TnVtRW50cmllcw0KPiArICApDQo+ICt7DQo+ICsgIGlmIChOdW1FbnRyaWVzKSB7DQo+ICsgICAg Kk51bUVudHJpZXMgPSBBUlJBWV9TSVpFKFBhcnRpdGlvblR5cGVzKTsNCj4gKyAgfQ0KPiArICBp ZiAoSW5kZXggPiBBUlJBWV9TSVpFKFBhcnRpdGlvblR5cGVzKSkgew0KPiArICAgIHJldHVybiBO VUxMOw0KPiArICB9DQo+ICsNCj4gKyByZXR1cm4gJlBhcnRpdGlvblR5cGVzW0luZGV4XTsNCj4g K30NCj4gKw0KPiBkaWZmIC0tZ2l0IGEvU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxHcHRDb21t YW5kTGliL0dwdFdvcmtlci5oDQo+IGIvU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxHcHRDb21t YW5kTGliL0dwdFdvcmtlci5oDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAw MDAwMDAwMC4uOWVmZWM1Y2VmZTk0DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvU2hlbGxQa2cv TGlicmFyeS9VZWZpU2hlbGxHcHRDb21tYW5kTGliL0dwdFdvcmtlci5oDQo+IEBAIC0wLDAgKzEs MTg2IEBADQo+ICsvKg0KPiArICogIEJTRCBMSUNFTlNFDQo+ICsgKg0KPiArICogIENvcHlyaWdo dChjKSAyMDE2IEJyb2FkY29tLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gKyAqDQo+ICsgKiAg UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv ciB3aXRob3V0DQo+ICsgKiAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zDQo+ICsgKiAgYXJlIG1ldDoNCj4gKyAqDQo+ICsg KiAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0DQo+ICsgKiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCj4gKyAqICAgICogUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCj4gKyAq ICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyIGluDQo+ICsgKiAgICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUNCj4gKyAqICAgICAgZGlzdHJpYnV0aW9uLg0KPiAr ICogICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEJyb2FkY29tIG5vciB0aGUgbmFtZXMgb2YgaXRz DQo+ICsgKiAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v dGUgcHJvZHVjdHMgZGVyaXZlZA0KPiArICogICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91 dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQo+ICsgKg0KPiArICogIFRISVMg U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORA0KPiBDT05U UklCVVRPUlMNCj4gKyAqICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB TlRJRVMsIElOQ0xVRElORywgQlVUDQo+IE5PVA0KPiArICogIExJTUlURUQgVE8sIFRIRSBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORA0KPiBGSVRORVNTIEZPUg0KPiAr ICogIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM TCBUSEUNCj4gQ09QWVJJR0hUDQo+ICsgKiAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsDQo+IElOQ0lERU5UQUwsDQo+ICsgKiAgU1BFQ0lB TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUDQo+ IE5PVA0KPiArICogIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg T1IgU0VSVklDRVM7IExPU1MNCj4gT0YgVVNFLA0KPiArICogIERBVEEsIE9SIFBST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQNCj4gQU5EIE9OIEFOWQ0KPiAr ICogIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC SUxJVFksIE9SDQo+IFRPUlQNCj4gKyAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GDQo+IFRIRSBVU0UNCj4gKyAqIE9GIFRISVMg U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSA0KPiBE QU1BR0UuDQo+ICsgKi8NCj4gKw0KPiArLyogR1BUIHBhcnRpdGlvbmVyIGhlYWRlciBmaWxlICov DQo+ICsNCj4gKyNpZm5kZWYgX0dQVFdPUktFUl9IXw0KPiArI2RlZmluZSBfR1BUV09SS0VSX0hf DQo+ICsNCj4gKyNpbmNsdWRlIDxVZWZpLmg+DQo+ICsjaW5jbHVkZSA8U2hlbGxCYXNlLmg+DQo+ ICsNCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5 L0Jhc2VNZW1vcnlMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQo+ICsj aW5jbHVkZSA8TGlicmFyeS9NZW1vcnlBbGxvY2F0aW9uTGliLmg+DQo+ICsjaW5jbHVkZSA8TGli cmFyeS9TaGVsbENvbW1hbmRMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1NoZWxsTGliLmg+ DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9V ZWZpU2hlbGxMaWIvVWVmaVNoZWxsTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpQm9v dFNlcnZpY2VzVGFibGVMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlSdW50aW1lU2Vy dmljZXNUYWJsZUxpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvUHJpbnRMaWIuaD4NCj4gKyNp bmNsdWRlIDxMaWJyYXJ5L1NoZWxsQ0VudHJ5TGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9I aWlMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0ZpbGVIYW5kbGVMaWIuaD4NCj4gKyNpbmNs dWRlIDxQcm90b2NvbC9EZXZpY2VQYXRoLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9EZXZpY2VQ YXRoTGliLmg+DQo+ICsjaW5jbHVkZSA8UHJvdG9jb2wvQmxvY2tJby5oPg0KPiArI2luY2x1ZGUg PFByb3RvY29sL0Rpc2tJby5oPg0KPiArI2luY2x1ZGUgPEluZHVzdHJ5U3RhbmRhcmQvTWJyLmg+ DQo+ICsNCj4gK3R5cGVkZWYgZW51bSB7DQo+ICsgIE1PRF9OQU1FICAgPSBCSVQwLA0KPiArICBN T0RfQVRUUiAgID0gQklUMSwNCj4gKyAgTU9EX1RZUEUgICA9IEJJVDIsDQo+ICsgIE1PRF9ERUxF VEUgPSBCSVQzLA0KPiArICBNT0RfUkVOQU1FID0gQklUNA0KPiArfSBNT0RfRkxBR1M7DQo+ICsN Cj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVE4gQXR0cmlidXRlczsNCj4gKyAgRUZJX0dV SUQgUGFydFR5cGVHdWlkOw0KPiArICBDT05TVCBDSEFSMTYgKlBhcnROYW1lOw0KPiArICBDT05T VCBDSEFSMTYgKk5ld05hbWU7DQo+ICt9IE1PRF9QQVJBTVM7DQo+ICsNCj4gK3R5cGVkZWYgZW51 bSB7DQo+ICsgIFNSQ19CWV9OQU1FID0gQklUMCwNCj4gKyAgU1JDX0JZX0xCQSAgPSBCSVQxLA0K PiArICBTUkNfQllfTlVNICA9IEJJVDIsDQo+ICsgIFNSQ19BTlkgICAgID0gQklUMw0KPiArfSBT RUFSQ0hfVFlQRTsNCj4gKw0KPiArI2RlZmluZSBNQVhfUEFSVElUSU9OX05BTUVfTEVOR1RIIDM2 DQo+ICsjZGVmaW5lIEVOVFJZX0RFRkFVTFQgICAgICAgICAgICAgMTI4DQo+ICsjZGVmaW5lIEdQ VF9SRVZJU0lPTl8xXzAgICAgICAgICAgMHgwMDAxMDAwMA0KPiArDQo+ICsjZGVmaW5lIEFSUkFZ X1NJWkUoeCkgXA0KPiArICAoc2l6ZW9mKHgpIC8gc2l6ZW9mKCh4KVswXSkpDQo+ICsNCj4gKy8v DQo+ICsvLyBFeHRyYWN0IElOVDMyIGZyb20gY2hhciBhcnJheQ0KPiArLy8NCj4gKyNkZWZpbmUg VU5QQUNLX0lOVDMyKGEpIChJTlQzMikoICgoKFVJTlQ4ICopIGEpWzBdIDw8ICAwKSB8ICAgIFwN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKFVJTlQ4ICopIGEpWzFdIDw8 ICA4KSB8ICAgIFwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKFVJTlQ4 ICopIGEpWzJdIDw8IDE2KSB8ICAgIFwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICgoKFVJTlQ4ICopIGEpWzNdIDw8IDI0KSApDQo+ICsNCj4gKy8vDQo+ICsvLyBFeHRyYWN0 IFVJTlQzMiBmcm9tIGNoYXIgYXJyYXkNCj4gKy8vDQo+ICsjZGVmaW5lIFVOUEFDS19VSU5UMzIo YSkgKFVJTlQzMikoICgoKFVJTlQ4ICopIGEpWzBdIDw8ICAwKSB8ICAgIFwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoVUlOVDggKikgYSlbMV0gPDwgIDgpIHwgICAg XA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChVSU5UOCAqKSBhKVsy XSA8PCAxNikgfCAgICBcDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgo KFVJTlQ4ICopIGEpWzNdIDw8IDI0KSApDQo+ICsNCj4gKw0KPiArLy8NCj4gKy8vIEdQVCBQYXJ0 aXRpb24gRW50cnkgU3RhdHVzDQo+ICsvLw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBCT09M RUFOIE91dE9mUmFuZ2U7DQo+ICsgIEJPT0xFQU4gT3ZlcmxhcDsNCj4gKyAgQk9PTEVBTiBPc1Nw ZWNpZmljOw0KPiArfSBFRklfUEFSVElUSU9OX0VOVFJZX1NUQVRVUzsNCj4gKw0KPiArdHlwZWRl ZiBzdHJ1Y3Qgew0KPiArICBDT05TVCBFRklfR1VJRCBUeXBlR3VpZDsNCj4gKyAgQ09OU1QgQ0hB UjE2ICpUeXBlTmFtZTsNCj4gKw0KPiArfSBFRklfS05PV05fUEFSVElUSU9OX1RZUEU7DQo+ICsN Cj4gK0VGSV9LTk9XTl9QQVJUSVRJT05fVFlQRSAqUGFydGl0aW9uR2V0S25vd25UeXBlICgNCj4g KyAgSU4gVUlOVE4gSW5kZXgsDQo+ICsgIElOIE9VVCBPUFRJT05BTCBVSU5UTiAqTnVtRW50cmll cw0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtQYXJ0aXRpb25HZXRHcHRUYWJsZXMg KA0KPiArICBJTiAgRUZJX0RJU0tfSU9fUFJPVE9DT0wgICAgICAgICAqRGlza0lvUHJvdCwNCj4g KyAgSU4gIEVGSV9CTE9DS19JT19QUk9UT0NPTCAgICAgICAgKkJsb2NrSW9Qcm90DQo+ICsgICk7 DQo+ICsNCj4gK1VJTlRODQo+ICtQYXJ0aXRpb25MaXN0R3B0RW50cmllcyAoDQo+ICsgIFZPSUQN Cj4gKyAgKTsNCj4gKw0KPiArVk9JRA0KPiArUGFydGl0aW9uUHJpbnRHcHRQYXJ0SW5mbyAoDQo+ ICsgIElOIEVGSV9QQVJUSVRJT05fRU5UUlkgKkVudHJ5DQo+ICsgICk7DQo+ICsNCj4gK0VGSV9T VEFUVVMNCj4gK0dldFBhcnRpdGlvblR5cGVTdHIgKA0KPiArICBFRklfR1VJRCBHdWlkLA0KPiAr ICBDSEFSMTYgKlBhcnRUeXBlU3RyLA0KPiArICBCT09MRUFOIE5vR3VpZFN0cg0KPiArICApOw0K PiArDQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK1BhcnRpdGlvbkdwdENsZWFyQWxsICgNCj4gKyAg Vk9JRA0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtQYXJ0aXRpb25HcHRDcmVhdGVQ YXJ0aXRpb24gKA0KPiArICBDT05TVCBDSEFSMTYgKlBhcnROYW1lLA0KPiArICBFRklfTEJBIFN0 YXJ0TGJhLA0KPiArICBFRklfTEJBIFBhcnRpdGlvblNpemUsDQo+ICsgIFVJTlQ2NCBBdHRyaWJ1 dGVzLA0KPiArICBFRklfR1VJRCBQYXJ0VHlwZUd1aWQpOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ ICtQYXJ0aXRpb25HcHRNb2RpZnlQYXJ0aXRpb24gKA0KPiArICBFRklfUEFSVElUSU9OX0VOVFJZ ICpFbnRyeSwNCj4gKyAgTU9EX1BBUkFNUyAqUGFyYW1zLA0KPiArICBNT0RfRkxBR1MgRmxhZ3MN Cj4gKyAgKTsNCj4gKw0KPiArVk9JRA0KPiArR3B0Q2xlYW51cEdsb2JhbHMgKA0KPiArICBWT0lE DQo+ICsgICk7DQo+ICsNCj4gK0VGSV9QQVJUSVRJT05fRU5UUlkgKg0KPiArUGFydGl0aW9uRmlu ZFBhcnRpdGlvbkJ5Q3JpdGVyaWEgKA0KPiArICBDT05TVCBDSEFSMTYgICAqTmFtZSwNCj4gKyAg RUZJX0xCQSAgICAgICAgU3RhcnRMYmEsDQo+ICsgIEVGSV9MQkEgICAgICAgIEVuZGluZ0xiYSwN Cj4gKyAgU0VBUkNIX1RZUEUgICAgU2VhcmNoVHlwZSk7DQo+ICsNCj4gK1ZPSUQNCj4gK1ByaW50 RXJyIChJTiBDT05TVCBDSEFSMTYgKk1lc3NhZ2UsIElOIEVGSV9TVEFUVVMgU3RhdHVzKTsNCj4g Kw0KPiArI2VuZGlmIC8vX0dQVFdPUktFUl9IXw0KPiBkaWZmIC0tZ2l0DQo+IGEvU2hlbGxQa2cv TGlicmFyeS9VZWZpU2hlbGxHcHRDb21tYW5kTGliL1VlZmlTaGVsbEdwdENvbW1hbmRMaWIuYw0K PiBiL1NoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi9VZWZpU2hlbGxHcHRD b21tYW5kTGliLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAw Li5hOWQ3NGE3ODA5MTENCj4gLS0tIC9kZXYvbnVsbA0KPiArKysNCj4gYi9TaGVsbFBrZy9MaWJy YXJ5L1VlZmlTaGVsbEdwdENvbW1hbmRMaWIvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi5jDQo+IEBA IC0wLDAgKzEsMTEzNSBAQA0KPiArLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKg0KPiAqKioqKioqKioqKioqKioqKioqKioqDQo+ICtDb3B5 cmlnaHQgKEMpIDIwMTYgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4NCj4gKw0KPiArTWFydmVs bCBCU0QgTGljZW5zZSBPcHRpb24NCj4gKw0KPiArSWYgeW91IHJlY2VpdmVkIHRoaXMgRmlsZSBm cm9tIE1hcnZlbGwsIHlvdSBtYXkgb3B0IHRvIHVzZSwgcmVkaXN0cmlidXRlDQo+IGFuZC9vcg0K PiArbW9kaWZ5IHRoaXMgRmlsZSB1bmRlciB0aGUgZm9sbG93aW5nIGxpY2Vuc2luZyB0ZXJtcy4N Cj4gK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp dGggb3Igd2l0aG91dA0KPiBtb2RpZmljYXRpb24sDQo+ICthcmUgcGVybWl0dGVkIHByb3ZpZGVk IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQo+ICsNCj4gKyogUmVkaXN0 cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQg bm90aWNlLA0KPiArICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyLg0KPiArDQo+ICsqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQo+ICsgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUNCj4gKyAgZG9j dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry aWJ1dGlvbi4NCj4gKw0KPiArKiBOZWl0aGVyIHRoZSBuYW1lIG9mIE1hcnZlbGwgbm9yIHRoZSBu YW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZQ0KPiArICB1c2VkIHRvIGVuZG9yc2Ugb3Ig cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0DQo+ICsg IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCj4gKw0KPiArVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EDQo+IENPTlRSSUJVVE9S UyAiQVMgSVMiIEFORA0KPiArQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywNCj4gVEhFIElNUExJRUQNCj4gK1dBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVINCj4gUFVSUE9T RSBBUkUNCj4gK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dO RVIgT1INCj4gQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1INCj4gK0FOWSBESVJFQ1QsIElORElS RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SDQo+IENPTlNFUVVFTlRJQUwg REFNQUdFUw0KPiArKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP RiBTVUJTVElUVVRFIEdPT0RTDQo+IE9SIFNFUlZJQ0VTOw0KPiArTE9TUyBPRiBVU0UsIERBVEEs IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUg0KPiBDQVVTRUQg QU5EIE9ODQo+ICtBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg U1RSSUNUIExJQUJJTElUWSwgT1INCj4gVE9SVA0KPiArKElOQ0xVRElORyBORUdMSUdFTkNFIE9S IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRg0KPiBUSEUgVVNFIE9GIFRISVMN Cj4gK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg REFNQUdFLg0KPiArDQo+ICsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioNCj4gKioqKioqKioqKioqKioqKioqKioqKi8NCj4gKw0KPiArLyog UG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDE2IEJyb2FkY29tICovDQo+ICsNCj4gKyNpbmNsdWRl ICJGYXRGb3JtYXQuaCINCj4gKyNpbmNsdWRlDQo+IDxMaWJyYXJ5L1VlZmlTaGVsbERlYnVnMUNv bW1hbmRzTGliL1VlZmlTaGVsbERlYnVnMUNvbW1hbmRzTGliLmg+DQo+ICsjaW5jbHVkZSA8TGli cmFyeS9UaW1lckxpYi5oPg0KPiArDQo+ICtDT05TVCBDSEFSMTYgZ1NoZWxsR3B0RmlsZU5hbWVb XSA9IEwiU2hlbGxDb21tYW5kIjsNCj4gK1NUQVRJQyBDT05TVCBDSEFSMTYgZ0FwcE5hbWVbXSA9 IEwiZ3B0IjsNCj4gK0VGSV9IQU5ETEUgZ1NoZWxsR3B0SGlpSGFuZGxlID0gTlVMTDsNCj4gKw0K PiArU1RBVElDIENPTlNUIFNIRUxMX1BBUkFNX0lURU0gUGFyYW1MaXN0W10gPSB7DQo+ICsgIC8v IFBhcnRpdGlvbi1yZWxhdGVkIG9wZXJhdGlvbnMNCj4gKyAgeyBMImNsZWFyIiwgVHlwZUZsYWcg fSwgICAgICAgICAgICAgICAgICAvLyBDbGVhcnMgYWxsIHBhcnRpdGlvbnMNCj4gKyAgeyBMImNy ZWF0ZSIsIFR5cGVGbGFnIH0sICAgICAgICAgICAgICAgICAvLyBDcmVhdGVzIGEgcGFydGl0aW9u DQo+ICsgIHsgTCJkZWxldGUiLCBUeXBlRmxhZyB9LCAgICAgICAgICAgICAgICAgLy8gRGVsZXRl cyBhIHBhcnRpdGlvbg0KPiArICB7IEwibGlzdCIsIFR5cGVGbGFnIH0sICAgICAgICAgICAgICAg ICAgIC8vIExpc3RzIGFsbCBwYXJ0aXRpb25zDQo+ICsgIHsgTCJyZW5hbWUiLCBUeXBlRmxhZyB9 LCAgICAgICAgICAgICAgICAgLy8gUmVuYW1lcyBhIHBhcnRpdGlvbg0KPiArICB7IEwic2V0YXR0 ciIsIFR5cGVGbGFnIH0sICAgICAgICAgICAgICAgIC8vIFNldCBhdHRyaWJ1dGVzIGZvciBhIHBh cnRpdGlvbiBpbiBwYXJ0aXRpb24NCj4gdGFibGUNCj4gKyAgeyBMInNldHR5cGUiLCBUeXBlRmxh ZyB9LA0KPiArICB7IEwic3luYyIsIFR5cGVGbGFnIH0sICAgICAgICAgICAgICAgICAgIC8vIFN5 bmNocm9uaXplcyBlaXRoZXIgbWFzdGVyIG9yIGFsdGVybmF0aXZlDQo+IHBhcnRpdGlvbiB0YWJs ZQ0KPiArICB7IEwidHlwZXNpbmZvIiwgVHlwZUZsYWcgfSwgICAgICAgICAgICAgICAgIC8vIFZl cmlmaWVzIGNvcnJlY3RuZXNzIG9mIG1hc3RlciBhbmQNCj4gYWx0ZXJuYXRpdmUgcGFydGl0aW9u IHRhYmxlcw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC8vIEJsb2NrSW8tcmVsYXRlZCBvcGVyYXRpb25zDQo+ICsgIHsgTCJyZWFkIiwgVHlwZUZsYWcg fSwgICAgICAgICAgICAgICAgICAgLy8gUmVhZHMgbiBieXRlcyBpbnRvIG1lbW9yeSBhZGRyZXNz IGZyb20NCj4gYSBwYXJ0aXRpb24gc3RhcnRpbmcgZnJvbSBhIGNlcnRhaW4gbGJhDQo+ICsgIHsg TCJyZWFkZmlsZSIsIFR5cGVGbGFnIH0sICAgICAgICAgICAgICAgLy8gU2FtZSBhcyBhYm92ZSwg YnV0IGluc3RlYWQgb2Ygc3RvcmUgaXQgaW4NCj4gbWVtb3J5IHNhdmVzIGludG8gYSBmaWxlIHN5 c3RlbQ0KPiArICB7IEwid3JpdGUiLCBUeXBlRmxhZyB9LCAgICAgICAgICAgICAgICAgIC8vIFdy aXRlcyBuIGJ5dGVzIGZyb20gbWVtb3J5IGludG8gYQ0KPiBwYXJ0aXRpb24gc3RhcnRpbmcgZnJv bSBhIGNlcnRhaW4gbGJhDQo+ICsgIHsgTCJ3cml0ZWZpbGUiLCBUeXBlRmxhZyB9LCAgICAgICAg ICAgICAgLy8gU2FtZSBhcyBhYm92ZSwgYnV0IGluc3RlYWQgb2YgZ2V0dGluZw0KPiBkYXRhIGZy b20gbWVtb3J5IHJlYWRzIGEgZmlsZQ0KPiArICB7IEwiaW5mbyIsIFR5cGVGbGFnIH0sICAgICAg ICAgICAgICAgICAgIC8vIEdldCBpbmZvcm1hdGlvbiBvbiBhIGNlcnRhaW4gcGFydGl0aW9uDQo+ IChzdGFydExiYSwgbGFzdExiYSwgYXR0cmlidXRlcykNCj4gKyAgeyBMImZhdGZvcm1hdCIsIFR5 cGVGbGFnIH0sICAgICAgICAgICAgICAvLyBGQVQgZm9ybWF0IG9mIGEgcGFydGl0aW9uDQo+ICsg IHsgTCItdHlwZSIsIFR5cGVWYWx1ZSB9LA0KPiArICB7IEwiLXllcyIsIFR5cGVGbGFnIH0sDQo+ ICsgIHsgTCItdmVyYm9zZSIsIFR5cGVGbGFnIH0sDQo+ICsgIHsgTlVMTCwgVHlwZU1heCB9DQo+ ICt9Ow0KPiArDQo+ICt0eXBlZGVmIGVudW0gew0KPiArICAvLyBOb3QgcmVxdWlyZXMgcHJlc2Vu Y2UNCj4gKyAgQ0xFQVIgICAgICAgPSBCSVQwLA0KPiArICBDUkVBVEUgICAgICA9IEJJVDEsDQo+ ICsgIExJU1QgICAgICAgID0gQklUMiwNCj4gKyAgU1lOQyAgICAgICAgPSBCSVQzLA0KPiArICBU WVBFU19JTkZPICA9IEJJVDQsDQo+ICsNCj4gKyAgLy8gUmVxdWlyZXMgcHJlc2VuY2UNCj4gKyAg REVMRVRFICAgICAgPSBCSVQ1LA0KPiArICBJTkZPICAgICAgICA9IEJJVDYsDQo+ICsgIFJFQUQg ICAgICAgID0gQklUNywNCj4gKyAgUkVBRF9GSUxFICAgPSBCSVQ4LA0KPiArICBSRU5BTUUgICAg ICA9IEJJVDksDQo+ICsgIFNFVEFUVFIgICAgID0gQklUMTAsDQo+ICsgIFNFVFRZUEUgICAgID0g QklUMTEsDQo+ICsgIFdSSVRFICAgICAgID0gQklUMTIsDQo+ICsgIFdSSVRFX0ZJTEUgID0gQklU MTMsDQo+ICsgIEZBVF9GT1JNQVQgID0gQklUMTQsDQo+ICt9IEZsYWdzOw0KPiArDQo+ICsvKioN Cj4gKyAgUmV0dXJuIHRoZSBmaWxlIG5hbWUgb2YgdGhlIGhlbHAgdGV4dCBmaWxlIGlmIG5vdCB1 c2luZyBISUkuDQo+ICsNCj4gKyAgQHJldHVybiBUaGUgc3RyaW5nIHBvaW50ZXIgdG8gdGhlIGZp bGUgbmFtZS4NCj4gKyoqLw0KPiArQ09OU1QgQ0hBUjE2ICoNCj4gK0VGSUFQSQ0KPiArU2hlbGxD b21tYW5kR2V0TWFuRmlsZU5hbWVHcHQgKA0KPiArICBWT0lEDQo+ICsgICkNCj4gK3sNCj4gKw0K PiArICByZXR1cm4gZ1NoZWxsR3B0RmlsZU5hbWU7DQo+ICt9DQo+ICsNCj4gK1NUQVRJQw0KPiAr RUZJX1NUQVRVUw0KPiArT3BlbkFuZFByZXBhcmVGaWxlICgNCj4gKyAgSU4gQ0hBUjE2ICpGaWxl UGF0aCwNCj4gKyAgT1VUIFNIRUxMX0ZJTEVfSEFORExFICpGaWxlSGFuZGxlLA0KPiArICBJTiBC T09MRUFOIFdyaXRlTmVlZGVkDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyBTdGF0dXM7 DQo+ICsgIFVJTlQ2NCBPcGVuTW9kZTsNCj4gKw0KPiArICBPcGVuTW9kZSA9IEVGSV9GSUxFX01P REVfUkVBRDsNCj4gKw0KPiArICBpZiAoV3JpdGVOZWVkZWQpIHsNCj4gKyAgICBPcGVuTW9kZSB8 PSBFRklfRklMRV9NT0RFX1dSSVRFIHwgRUZJX0ZJTEVfTU9ERV9DUkVBVEU7DQo+ICsgIH0NCj4g Kw0KPiArICBTdGF0dXMgPSBTaGVsbE9wZW5GaWxlQnlOYW1lIChGaWxlUGF0aCwgRmlsZUhhbmRs ZSwgT3Blbk1vZGUsIDApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAg U2hlbGxQcmludEhpaUV4ICgtMSwgLTEsDQo+ICsgICAgICAgICAgICAgICAgICAgICBOVUxMLCBT VFJJTkdfVE9LRU4gKFNUUl9HUFRfRVJST1IpLA0KPiArICAgICAgICAgICAgICAgICAgICAgZ1No ZWxsR3B0SGlpSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgICAgZ0FwcE5hbWUsDQo+ICsg ICAgICAgICAgICAgICAgICAgICBTdGF0dXMsDQo+ICsgICAgICAgICAgICAgICAgICAgICBMIkNh bm5vdCBvcGVuIGZpbGUiDQo+ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAgcmV0dXJu IFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IEZpbGVIYW5kbGVTZXRQb3NpdGlv biAoKkZpbGVIYW5kbGUsIDApOw0KPiArDQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4gKyAgICBTaGVsbFByaW50SGlpRXggKC0xLCAtMSwNCj4gKyAgICAgICAgICAgICAgICAgICAg IE5VTEwsIFNUUklOR19UT0tFTiAoU1RSX0dQVF9FUlJPUiksDQo+ICsgICAgICAgICAgICAgICAg ICAgICBnU2hlbGxHcHRIaWlIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAgICBnQXBwTmFt ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgIFN0YXR1cywNCj4gKyAgICAgICAgICAgICAgICAg ICAgICJDYW5ub3Qgc2V0IGZpbGUgcG9zaXRpb24gdG8gdGhlIGZpcnN0IGJ5dGUiDQo+ICsgICAg ICAgICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgICBTaGVsbENsb3NlRmlsZSAoRmlsZUhhbmRs ZSk7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBFRklf U1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArVk9JRA0KPiArUHJpbnRFcnIgKA0KPiArICBJTiBDT05T VCBDSEFSMTYgKk1lc3NhZ2UsDQo+ICsgIElOIEVGSV9TVEFUVVMgU3RhdHVzDQo+ICsgICkNCj4g K3sNCj4gKyAgU2hlbGxQcmludEhpaUV4ICgtMSwgLTEsDQo+ICsgICAgICAgICAgICAgICAgICAg TlVMTCwgU1RSSU5HX1RPS0VOIChTVFJfR1BUX0VSUk9SKSwNCj4gKyAgICAgICAgICAgICAgICAg ICBnU2hlbGxHcHRIaWlIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAgZ0FwcE5hbWUsDQo+ ICsgICAgICAgICAgICAgICAgICAgU3RhdHVzLA0KPiArICAgICAgICAgICAgICAgICAgIE1lc3Nh Z2UNCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICt9DQo+ICsNCj4gK1NUQVRJQw0KPiArQk9P TEVBTg0KPiArSXNQYXJ0aXRpb25hYmxlRGV2aWNlUGF0aCAoDQo+ICsgIElOIEVGSV9ERVZJQ0Vf UEFUSCAqRGV2aWNlUGF0aA0KPiArICApDQo+ICt7DQo+ICsgIFVJTlROIFBhdGhTaXplOw0KPiAr ICBFRklfREVWSUNFX1BBVEggKlBhdGhJbnN0YW5jZTsNCj4gKyAgQk9PTEVBTiBQYXJ0aXRpb25h YmxlOw0KPiArDQo+ICsgIFBhcnRpdGlvbmFibGUgPSBUUlVFOw0KPiArICB3aGlsZSAoRGV2aWNl UGF0aCAhPSBOVUxMKSB7DQo+ICsgICAgUGF0aEluc3RhbmNlID0gR2V0TmV4dERldmljZVBhdGhJ bnN0YW5jZSAoJkRldmljZVBhdGgsICZQYXRoU2l6ZSk7DQo+ICsNCj4gKyAgICB3aGlsZSAoIUlz RGV2aWNlUGF0aEVuZCAoUGF0aEluc3RhbmNlKSkgew0KPiArICAgICAgaWYgKChEZXZpY2VQYXRo VHlwZSAoUGF0aEluc3RhbmNlKSA9PSBNRURJQV9ERVZJQ0VfUEFUSCkpIHsNCj4gKyAgICAgICAg UGFydGl0aW9uYWJsZSA9IEZBTFNFOw0KPiArICAgICAgfQ0KPiArDQo+ICsgICAgICBQYXRoSW5z dGFuY2UgPSBOZXh0RGV2aWNlUGF0aE5vZGUgKFBhdGhJbnN0YW5jZSk7DQo+ICsgICAgfQ0KPiAr ICB9DQo+ICsgIHJldHVybiBQYXJ0aXRpb25hYmxlOw0KPiArfQ0KPiArDQo+ICtTVEFUSUMNCj4g K0VGSV9TVEFUVVMNCj4gK0dwdFByb21wdFllc05vICgNCj4gKyAgSU4gQ09OU1QgRUZJX1NUUklO R19JRCBIaWlGb3JtYXRTdHJpbmdJZA0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgU3Rh dHVzOw0KPiArICBWT0lEICAgICAgICpSZXNwb25zZTsNCj4gKw0KPiArICBTdGF0dXMgPSBTaGVs bFByb21wdEZvclJlc3BvbnNlSGlpIChTaGVsbFByb21wdFJlc3BvbnNlVHlwZVllc05vLA0KPiBI aWlGb3JtYXRTdHJpbmdJZCwgZ1NoZWxsR3B0SGlpSGFuZGxlLCAmUmVzcG9uc2UpOw0KPiArICBp ZiAoKEVGSV9FUlJPUiAoU3RhdHVzKSkgfHwgKCooU0hFTExfUFJPTVBUX1JFU1BPTlNFICopUmVz cG9uc2UpICE9DQo+IFNoZWxsUHJvbXB0UmVzcG9uc2VZZXMpIHsNCj4gKyAgICByZXR1cm4gRUZJ X0FCT1JURUQ7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ ICsNCj4gK1NUQVRJQw0KPiArVk9JRCBGb3JtYXRTaXplKA0KPiArICBVSU5UNjQgU2l6ZSwgQ0hB UjE2ICpCdWZmZXIpDQo+ICt7DQo+ICsjZGVmaW5lIE1BWF9TSVpFX0JVRl9TSVpFIDMyDQo+ICsg IFVJTlQ2NCBCYXNlLCBGcmFjOw0KPiArICBDSEFSMTYgTWV0cmljOw0KPiArDQo+ICsgIE1ldHJp YyA9IEwnQic7DQo+ICsgIEZyYWMgPSAwOw0KPiArICBpZiAoU2l6ZSA8IFNJWkVfMUtCKSB7DQo+ ICsgICAgQmFzZSA9IFNpemU7DQo+ICsgIH0gZWxzZSBpZiAoU2l6ZSA8IFNJWkVfMU1CKSB7DQo+ ICsgICAgQmFzZSA9IFNpemUgLyBTSVpFXzFLQjsNCj4gKyAgICBGcmFjID0gKChTaXplICUgU0la RV8xS0IpICogMTApID4+IDEwOw0KPiArICAgIE1ldHJpYyA9IEwnSyc7DQo+ICsgIH0gZWxzZSBp ZiAoU2l6ZSA8IFNJWkVfMUdCKSB7DQo+ICsgICAgQmFzZSA9IFNpemUgLyBTSVpFXzFNQjsNCj4g KyAgICBGcmFjID0gKChTaXplICUgU0laRV8xTUIpICogMTApID4+IDIwOw0KPiArICAgIE1ldHJp YyA9IEwnTSc7DQo+ICsgIH0gZWxzZSBpZiAoU2l6ZSA8IFNJWkVfMVRCKSB7DQo+ICsgICAgQmFz ZSA9IFNpemUgLyBTSVpFXzFHQjsNCj4gKyAgICBGcmFjID0gKChTaXplICUgU0laRV8xR0IpICog MTApID4+IDMwOw0KPiArICAgIE1ldHJpYyA9IEwnRyc7DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAg QmFzZSA9IFNpemUgLyBTSVpFXzFUQjsNCj4gKyAgICBGcmFjID0gKChTaXplICUgU0laRV8xVEIp ICogMTApID4+IDQwOw0KPiArICAgIE1ldHJpYyA9IEwnVCc7DQo+ICsgIH0NCj4gKyAgaWYgKEZy YWMpIHsNCj4gKyAgICBVbmljb2RlU1ByaW50IChCdWZmZXIsIE1BWF9TSVpFX0JVRl9TSVpFLCBM IiVkLiVkJWMiLCBCYXNlLCBGcmFjLA0KPiBNZXRyaWMpOw0KPiArICB9IGVsc2Ugew0KPiArICAg IFVuaWNvZGVTUHJpbnQgKEJ1ZmZlciwgTUFYX1NJWkVfQlVGX1NJWkUsIEwiJWQlYyIsIEJhc2Us IE1ldHJpYyk7DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArU1RBVElDDQo+ICtFRklfU1RBVFVTDQo+ ICtGaW5kQW5kUHJpbnRQYXJ0aXRpb25hYmxlRGV2aWNlcyAoVk9JRCkNCj4gK3sNCj4gKyAgVUlO VE4gSW5kZXg7DQo+ICsgIEVGSV9IQU5ETEUgICAgICAqSGFuZGxlUG9pbnRlcjsNCj4gKyAgVUlO VE4gICAgICAgICAgIEhhbmRsZUNvdW50Ow0KPiArICBVSU5UTiAgICAgICAgICAgRGV2Q291bnQ7 DQo+ICsgIEVGSV9TVEFUVVMgICAgICBTdGF0dXM7DQo+ICsgIEJPT0xFQU4gICAgICAgICBGaXJz dFRpbWU7DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JTLT5Mb2NhdGVIYW5kbGVCdWZmZXIgKEJ5UHJv dG9jb2wsICZnRWZpQmxvY2tJb1Byb3RvY29sR3VpZCwNCj4gTlVMTCwgJkhhbmRsZUNvdW50LCAm SGFuZGxlUG9pbnRlcik7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBy ZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgRGV2Q291bnQgPSAwOw0KPiArICBGaXJz dFRpbWUgPSBUUlVFOw0KPiArDQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IEhhbmRsZUNv dW50OyBJbmRleCsrKSB7DQo+ICsgICAgRUZJX0RFVklDRV9QQVRIICAgICAgICpEZXZpY2VQYXRo Ow0KPiArICAgIENPTlNUIENIQVIxNiAgICAgICAgICAqTWFwUGF0aDsNCj4gKyAgICBDSEFSMTYg ICAgICAgICAgICAgICAgKk1hdGNoOw0KPiArICAgIEVGSV9CTE9DS19JTyAgICAgICAgICAqQmxr SW87DQo+ICsgICAgRUZJX0RJU0tfSU8gICAgICAgICAgICpEaXNrSW87DQo+ICsgICAgQ0hBUjE2 ICAgICAgICAgICAgICAgICpCdWZmZXJGb3JTaXplOw0KPiArDQo+ICsgICAgU3RhdHVzID0gZ0JT LT5IYW5kbGVQcm90b2NvbCAoSGFuZGxlUG9pbnRlcltJbmRleF0sDQo+ICZnRWZpQmxvY2tJb1By b3RvY29sR3VpZCwgKFZPSUQgKiopJkJsa0lvKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQo+ICsgICAgICBjb250aW51ZTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBEZXZpY2VQ YXRoID0gRGV2aWNlUGF0aEZyb21IYW5kbGUgKEhhbmRsZVBvaW50ZXJbSW5kZXhdKTsNCj4gKyAg ICBpZiAoIUlzUGFydGl0aW9uYWJsZURldmljZVBhdGggKERldmljZVBhdGgpKSB7DQo+ICsgICAg ICBjb250aW51ZTsNCj4gKyAgICB9DQo+ICsgICAgTWFwUGF0aCA9IGdFZmlTaGVsbFByb3RvY29s LT5HZXRNYXBGcm9tRGV2aWNlUGF0aCAoJkRldmljZVBhdGgpOw0KPiArICAgIGlmIChNYXBQYXRo ID09IE5VTEwpIHsNCj4gKyAgICAgIGNvbnRpbnVlOw0KPiArICAgIH0NCj4gKw0KPiArICAgIFN0 YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wgKEhhbmRsZVBvaW50ZXJbSW5kZXhdLA0KPiAmZ0Vm aURpc2tJb1Byb3RvY29sR3VpZCwgKFZPSUQgKiopJkRpc2tJbyk7DQo+ICsgICAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgY29udGludWU7DQo+ICsgICAgfQ0KPiArDQo+ICsg ICAgTWF0Y2ggPSBTdHJTdHIgKE1hcFBhdGgsIEwiO0JMSyIpOw0KPiArICAgIGlmIChNYXRjaCkg ew0KPiArICAgICAgTWFwUGF0aCA9IE1hdGNoOw0KPiArICAgICAgTWFwUGF0aCsrOw0KPiArICAg IH0NCj4gKw0KPiArICAgIGlmIChGaXJzdFRpbWUpIHsNCj4gKyAgICAgIEJ1ZmZlckZvclNpemUg PSBBbGxvY2F0ZVplcm9Qb29sIChNQVhfU0laRV9CVUZfU0laRSAqIHNpemVvZg0KPiAoQ0hBUjE2 KSk7DQo+ICsgICAgICBBU1NFUlQgKEJ1ZmZlckZvclNpemUpOw0KPiArICAgICAgUHJpbnQgKEwi IERldmljZVx0ICAgICBTaXplICBDb21tZW50c1xuIik7DQo+ICsgICAgICBQcmludCAoTCIgLS0t LS0tICAgLS0tLS0tLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQo+IFxuIik7DQo+ICsgICAgICBGaXJzdFRpbWUgPSBGQUxTRTsN Cj4gKyAgICB9DQo+ICsgICAgR3B0Q2xlYW51cEdsb2JhbHMgKCk7DQo+ICsgICAgRm9ybWF0U2l6 ZSAoTXVsdFU2NHgzMiAoQmxrSW8tPk1lZGlhLT5MYXN0QmxvY2sgKyAxLCBCbGtJby0+TWVkaWEt DQo+ID5CbG9ja1NpemUpLCBCdWZmZXJGb3JTaXplKTsNCj4gKyAgICBTaGVsbFByaW50SGlpRXgg KC0xLCAtMSwNCj4gKyAgICAgICAgICAgICAgICAgICAgIE5VTEwsIFNUUklOR19UT0tFTiAoU1RS X0dQVF9MSVNUX0RFVlMpLA0KPiArICAgICAgICAgICAgICAgICAgICAgZ1NoZWxsR3B0SGlpSGFu ZGxlLA0KPiArICAgICAgICAgICAgICAgICAgICAgTWFwUGF0aCwNCj4gKyAgICAgICAgICAgICAg ICAgICAgIEJ1ZmZlckZvclNpemUpOw0KPiArICAgIGlmIChCbGtJby0+TWVkaWEtPlJlYWRPbmx5 KSB7DQo+ICsgICAgICBQcmludCAoTCJSZWFkLU9ubHkhICIpOw0KPiArICAgIH0NCj4gKyAgICBp ZiAoIUJsa0lvLT5NZWRpYS0+TWVkaWFQcmVzZW50KSB7DQo+ICsgICAgICBQcmludCAoTCJObyBN ZWRpYSEgIik7DQo+ICsgICAgfQ0KPiArICAgIGlmICghRUZJX0VSUk9SIChQYXJ0aXRpb25HZXRH cHRUYWJsZXMgKERpc2tJbywgQmxrSW8pKSkgew0KPiArICAgICAgUHJpbnQgKEwiVmFsaWQgR1BU LiAiKTsNCj4gKyAgICB9DQo+ICsgICAgaWYgKEJsa0lvLT5NZWRpYS0+UmVtb3ZhYmxlTWVkaWEp IHsNCj4gKyAgICAgIFByaW50IChMIlJlbW92YWJsZSBkZXZpY2UuIik7DQo+ICsgICAgfQ0KPiAr ICAgIFByaW50IChMIlxuIik7DQo+ICsgICAgRGV2Q291bnQrKzsNCj4gKyAgfQ0KPiArICBQcmlu dCAoTCJcclxuIik7DQo+ICsgIGlmIChEZXZDb3VudCkgew0KPiArICAgIFByaW50IChMIiVkIHBv dGVudGlhbGx5IHBhcnRpdGlvbmFibGUgZGV2aWNlKHMpIGZvdW5kXG4iLCBEZXZDb3VudCk7DQo+ ICsgIH0gZWxzZSB7DQo+ICsgICAgUHJpbnQgKEwiTm8gcG90ZW50aWFsbHkgcGFydGl0aW9uYWJs ZSBkZXZpY2UocykgZm91bmRcbiIpOw0KPiArICB9DQo+ICsNCj4gKyAgR3B0Q2xlYW51cEdsb2Jh bHMgKCk7DQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArU0hFTExfU1RB VFVTDQo+ICtFRklBUEkNCj4gK1NoZWxsQ29tbWFuZFJ1bkdwdCAoDQo+ICsgIElOIEVGSV9IQU5E TEUgICAgICAgIEltYWdlSGFuZGxlLA0KPiArICBJTiBFRklfU1lTVEVNX1RBQkxFICAqU3lzdGVt VGFibGUNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgU3Rh dHVzOw0KPiArICBMSVNUX0VOVFJZICAgICAgICAgICAgICAgICpDaGVja1BhY2thZ2U7DQo+ICsg IEVGSV9QSFlTSUNBTF9BRERSRVNTICAgICAgQWRkcmVzcyA9IDAsIE9mZnNldCA9IDA7DQo+ICsg IFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgUGFydEF0dHJpYnV0ZXMgPSAwOw0KPiArICBFRklf R1VJRCAgICAgICAgICAgICAgICAgIFBhcnRUeXBlR3VpZCA9IHsgMCB9Ow0KPiArICBTSEVMTF9G SUxFX0hBTkRMRSAgICAgICAgIEZpbGVIYW5kbGUgPSBOVUxMOw0KPiArICBVSU5UNjQgICAgICAg ICAgICAgICAgICAgIEJ5dGVDb3VudCwgRmlsZVNpemU7DQo+ICsgIFVJTlROICAgICAgICAgICAg ICAgICAgICAgSTsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAqQnVmZmVyID0gTlVM TCwgKkZpbGVCdWZmZXIgPSBOVUxMOw0KPiArDQo+ICsgIENIQVIxNiAgICAgICAgICAgICAgICAg ICAgKiBQcm9ibGVtUGFyYW0sKkZpbGVQYXRoOw0KPiArICBDT05TVCBDSEFSMTYgICAgICAgICAg ICAgICpBZGRyZXNzU3RyID0gTlVMTCwgKk9mZnNldFN0ciA9IE5VTEw7DQo+ICsgIENPTlNUIENI QVIxNiAgICAgICAgICAgICAgKlBhcnROYW1lID0gTlVMTCwgKk5ld1BhcnROYW1lID0gTlVMTCwN Cj4gKkF0dHJTdHIgPSBOVUxMLA0KPiArICAgICpHdWlkU3RyID0gTlVMTCwgKlZvbHVtZU5hbWUg PSBOVUxMOw0KPiArICBDT05TVCBDSEFSMTYgICAgICAgICAgICAgICpMZW5ndGhTdHIgPSBOVUxM LCAqRmlsZVN0ciA9IE5VTEw7DQo+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgQWRkckZs YWcgPSBGQUxTRSwgTGVuZ3RoRmxhZyA9IFRSVUUsIEZpbGVGbGFnID0gRkFMU0UsDQo+IEd1aWRG bGFnID0gRkFMU0UsIE9mZnNldEZsYWcgPSBUUlVFOw0KPiArICBCT09MRUFOICAgICAgICAgICAg ICAgICAgIFBhcnROYW1lRmxhZyA9IFRSVUUsIE5ld1BhcnROYW1lRmxhZyA9IEZBTFNFLA0KPiBB dHRyRmxhZyA9IEZBTFNFOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEZsYWcgPSAw LCBDaGVja0ZsYWcgPSAwOw0KPiArICBDT05TVCBDSEFSMTYgICAgICAgICAgICAgICpCbG9ja05h bWU7DQo+ICsgIEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAgKkRldlBhdGg7DQo+ICsgIEVGSV9C TE9DS19JT19QUk9UT0NPTCAgICAgKkJsb2NrSW87DQo+ICsgIEVGSV9ESVNLX0lPX1BST1RPQ09M ICAgICAgKkRpc2tJbzsNCj4gKyAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICBCbG9ja0lvSGFu ZGxlOw0KPiArICBNT0RfUEFSQU1TICAgICAgICAgICAgICAgIE1vZFBhcmFtczsNCj4gKyAgRUZJ X1BBUlRJVElPTl9FTlRSWSAgICAgICAqRW50cnk7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAg ICAgICAgTnVtS25vd25QYXJ0VHlwZXNFbnRyaWVzOw0KPiArICBCT09MRUFOICAgICAgICAgICAg ICAgICAgIFRhYmxlTm90RW1wdHksIE5vUHJvbXB0ID0gRkFMU0UsIFF1aWV0ID0gVFJVRTsNCj4g KyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICBUaW1lU3RhbXBCLCBUaW1lU3RhbXBFLCBTcGVl ZEtCLCBGcmVxOw0KPiArDQo+ICsgIC8vIFBhcnNlIFNoZWxsIGNvbW1hbmQgbGluZQ0KPiArICBT dGF0dXMgPSBTaGVsbEluaXRpYWxpemUgKCk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gKyAgICBQcmludEVyciAoTCJDYW5ub3QgaW5pdGlhbGl6ZSBTaGVsbCIsIFN0YXR1cyk7 DQo+ICsgICAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gKyAgICByZXR1cm4gU0hFTExf QUJPUlRFRDsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IFNoZWxsQ29tbWFuZExpbmVQYXJz ZSAoUGFyYW1MaXN0LCAmQ2hlY2tQYWNrYWdlLA0KPiAmUHJvYmxlbVBhcmFtLCBUUlVFKTsNCj4g KyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIFByaW50RXJyIChMIkVycm9yIHdo aWxlIHBhcnNpbmcgY29tbWFuZCBsaW5lIiwgU3RhdHVzKTsNCj4gKyAgICByZXR1cm4gU0hFTExf QUJPUlRFRDsNCj4gKyAgfQ0KPiArDQo+ICsgIFRpbWVTdGFtcEIgPSAwOw0KPiArICBUaW1lU3Rh bXBFID0gMDsNCj4gKw0KPiArICBOb1Byb21wdCA9IFNoZWxsQ29tbWFuZExpbmVHZXRGbGFnIChD aGVja1BhY2thZ2UsIEwiLXllcyIpOw0KPiArICBRdWlldCA9ICFTaGVsbENvbW1hbmRMaW5lR2V0 RmxhZyAoQ2hlY2tQYWNrYWdlLCBMIi12ZXJib3NlIik7DQo+ICsNCj4gKyAgRnJlcSA9IEdldFBl cmZvcm1hbmNlQ291bnRlclByb3BlcnRpZXMgKE5VTEwsIE5VTEwpOw0KPiArDQo+ICsgIC8vIENo ZWNrIGZsYWdzIHByb3ZpZGVkIGJ5IHVzZXINCj4gKyAgRmxhZyB8PSAoU2hlbGxDb21tYW5kTGlu ZUdldEZsYWcgKENoZWNrUGFja2FnZSwgTCJjbGVhciIpIDw8IDApOw0KPiArICBGbGFnIHw9IChT aGVsbENvbW1hbmRMaW5lR2V0RmxhZyAoQ2hlY2tQYWNrYWdlLCBMImNyZWF0ZSIpIDw8IDEpOw0K PiArICBGbGFnIHw9IChTaGVsbENvbW1hbmRMaW5lR2V0RmxhZyAoQ2hlY2tQYWNrYWdlLCBMImxp c3QiKSA8PCAyKTsNCj4gKyAgRmxhZyB8PSAoU2hlbGxDb21tYW5kTGluZUdldEZsYWcgKENoZWNr UGFja2FnZSwgTCJzeW5jIikgPDwgMyk7DQo+ICsgIEZsYWcgfD0gKFNoZWxsQ29tbWFuZExpbmVH ZXRGbGFnIChDaGVja1BhY2thZ2UsIEwidHlwZXNpbmZvIikgPDwgNCk7DQo+ICsgIEZsYWcgfD0g KFNoZWxsQ29tbWFuZExpbmVHZXRGbGFnIChDaGVja1BhY2thZ2UsIEwiZGVsZXRlIikgPDwgNSk7 DQo+ICsgIEZsYWcgfD0gKFNoZWxsQ29tbWFuZExpbmVHZXRGbGFnIChDaGVja1BhY2thZ2UsIEwi aW5mbyIpIDw8IDYpOw0KPiArICBGbGFnIHw9IChTaGVsbENvbW1hbmRMaW5lR2V0RmxhZyAoQ2hl Y2tQYWNrYWdlLCBMInJlYWQiKSA8PCA3KTsNCj4gKyAgRmxhZyB8PSAoU2hlbGxDb21tYW5kTGlu ZUdldEZsYWcgKENoZWNrUGFja2FnZSwgTCJyZWFkZmlsZSIpIDw8IDgpOw0KPiArICBGbGFnIHw9 IChTaGVsbENvbW1hbmRMaW5lR2V0RmxhZyAoQ2hlY2tQYWNrYWdlLCBMInJlbmFtZSIpIDw8IDkp Ow0KPiArICBGbGFnIHw9IChTaGVsbENvbW1hbmRMaW5lR2V0RmxhZyAoQ2hlY2tQYWNrYWdlLCBM InNldGF0dHIiKSA8PCAxMCk7DQo+ICsgIEZsYWcgfD0gKFNoZWxsQ29tbWFuZExpbmVHZXRGbGFn IChDaGVja1BhY2thZ2UsIEwic2V0dHlwZSIpIDw8IDExKTsNCj4gKyAgRmxhZyB8PSAoU2hlbGxD b21tYW5kTGluZUdldEZsYWcgKENoZWNrUGFja2FnZSwgTCJ3cml0ZSIpIDw8IDEyKTsNCj4gKyAg RmxhZyB8PSAoU2hlbGxDb21tYW5kTGluZUdldEZsYWcgKENoZWNrUGFja2FnZSwgTCJ3cml0ZWZp bGUiKSA8PCAxMyk7DQo+ICsgIEZsYWcgfD0gKFNoZWxsQ29tbWFuZExpbmVHZXRGbGFnIChDaGVj a1BhY2thZ2UsIEwiZmF0Zm9ybWF0IikgPDwgMTQpOw0KPiArDQo+ICsgIFBhcnRpdGlvbkdldEtu b3duVHlwZSAoKFVJTlROKSgtMSksICZOdW1Lbm93blBhcnRUeXBlc0VudHJpZXMpOw0KPiArDQo+ ICsgIGlmIChGbGFnICYgVFlQRVNfSU5GTykgew0KPiArICAgIFVJTlROIEluZGV4Ow0KPiArDQo+ ICsgICAgUHJpbnQgKEwiICBOb1x0JS0zNnNcdEdVSURcclxuIiwgTCJUeXBlIG5hbWUiKTsNCj4g KyAgICBQcmludCAoTCIgLS0tLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g ICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gXG4iKTsNCj4gKyAg ICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBOdW1Lbm93blBhcnRUeXBlc0VudHJpZXM7IEluZGV4 KyspIHsNCj4gKyAgICAgIEVGSV9LTk9XTl9QQVJUSVRJT05fVFlQRSAqUGFydFR5cGU7DQo+ICsN Cj4gKyAgICAgIFBhcnRUeXBlID0gUGFydGl0aW9uR2V0S25vd25UeXBlIChJbmRleCwgTlVMTCk7 DQo+ICsgICAgICBpZiAoUGFydFR5cGUgPT0gTlVMTCkgew0KPiArICAgICAgICBicmVhazsNCj4g KyAgICAgIH0NCj4gKyAgICAgIFByaW50IChMIiAlM2RcdCUtMzZzXHQlZ1xuIiwgSW5kZXgsIFBh cnRUeXBlLT5UeXBlTmFtZSwgJlBhcnRUeXBlLQ0KPiA+VHlwZUd1aWQpOw0KPiArICAgIH0NCj4g KyAgICBpZiAoRmxhZyA9PSBUWVBFU19JTkZPKSB7DQo+ICsgICAgICByZXR1cm4gU0hFTExfU1VD Q0VTUzsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKyAgLy8gU3RhcnQgcGFyc2luZyB0aGUgY29tbWFu ZC4NCj4gKyAgLy8gR2VuZXJhbGx5IGNvbW1hbmQgaXM6DQo+ICsgIC8vIGJsb2NrX25hbWU6Ym9v dHBhcnRfbm8gYWRkciBvciBmaWxlbmFtZSBvZmZzZXQNCj4gKw0KPiArICBCbG9ja05hbWUgPSBT aGVsbENvbW1hbmRMaW5lR2V0UmF3VmFsdWUgKENoZWNrUGFja2FnZSwgMSk7DQo+ICsgIGlmIChC bG9ja05hbWUgPT0gTlVMTCkgew0KPiArICAgIGlmIChGbGFnICYgTElTVCkgew0KPiArICAgICAg U3RhdHVzID0gRmluZEFuZFByaW50UGFydGl0aW9uYWJsZURldmljZXMgKCk7DQo+ICsgICAgICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICAgIFByaW50RXJyIChMIkVycm9yIGdl dHRpbmcgbGlzdCBvZiBwYXJ0aXRpb25hYmxlIGRldmljZXMiLCBTdGF0dXMpOw0KPiArICAgICAg ICBTdGF0dXMgPSBTSEVMTF9BQk9SVEVEOw0KPiArICAgICAgfQ0KPiArICAgICAgcmV0dXJuIFN0 YXR1czsNCj4gKyAgICB9DQo+ICsgICAgUHJpbnRFcnIgKEwiTWlzc2luZyBibG9jayBkZXZpY2Ug bmFtZSIsIEVGSV9JTlZBTElEX1BBUkFNRVRFUik7DQo+ICsgICAgcmV0dXJuIFNIRUxMX0lOVkFM SURfUEFSQU1FVEVSOw0KPiArICB9DQo+ICsNCj4gKyAgLy8gRmluZCBkZXZpY2UgaGFuZGxlIGJ5 IG1hcHBlZCBuYW1lDQo+ICsgIGlmIChnRWZpU2hlbGxQcm90b2NvbC0+R2V0RGV2aWNlUGF0aEZy b21NYXAgKEJsb2NrTmFtZSkgPT0gTlVMTCkgew0KPiArICAgIFNoZWxsUHJpbnRIaWlFeCAoLTEs IC0xLCBOVUxMLCBTVFJJTkdfVE9LRU4gKFNUUl9HRU5fUEFSQU1fSU5WKSwNCj4gZ1NoZWxsR3B0 SGlpSGFuZGxlLCBnQXBwTmFtZSwgQmxvY2tOYW1lKTsNCj4gKyAgICBTdGF0dXMgPSBTSEVMTF9J TlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBEZXZQYXRoID0gKEVGSV9E RVZJQ0VfUEFUSF9QUk9UT0NPTCAqKWdFZmlTaGVsbFByb3RvY29sLQ0KPiA+R2V0RGV2aWNlUGF0 aEZyb21NYXAgKEJsb2NrTmFtZSk7DQo+ICsgICAgaWYgKGdCUy0+TG9jYXRlRGV2aWNlUGF0aCAo JmdFZmlCbG9ja0lvUHJvdG9jb2xHdWlkLCAmRGV2UGF0aCwgTlVMTCkNCj4gPT0gRUZJX05PVF9G T1VORCkgew0KPiArICAgICAgU2hlbGxQcmludEhpaUV4ICgtMSwgLTEsIE5VTEwsIFNUUklOR19U T0tFTg0KPiAoU1RSX0dFTl9NQVBfUFJPVE9DT0wpLCBnU2hlbGxHcHRIaWlIYW5kbGUsIGdBcHBO YW1lLCBCbG9ja05hbWUsDQo+IEwiQmxvY2tJbyIpOw0KPiArICAgICAgU3RhdHVzID0gU0hFTExf SU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgaWYgKFN0YXR1 cykgew0KPiArICAgIHJldHVybiBTSEVMTF9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgfQ0KPiAr DQo+ICsgIEJsb2NrSW9IYW5kbGUgPSAwOw0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+TG9jYXRl RGV2aWNlUGF0aCAoJmdFZmlCbG9ja0lvUHJvdG9jb2xHdWlkLA0KPiAoRUZJX0RFVklDRV9QQVRI X1BST1RPQ09MICoqKSZEZXZQYXRoLCAmQmxvY2tJb0hhbmRsZSk7DQo+ICsgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gKyAgICBnb3RvIENsZWFuVXA7DQo+ICsgIH0NCj4gKw0KPiArICBT dGF0dXMgPSBnQlMtPk9wZW5Qcm90b2NvbCAoQmxvY2tJb0hhbmRsZSwgJmdFZmlCbG9ja0lvUHJv dG9jb2xHdWlkLA0KPiAoVk9JRCAqKikmQmxvY2tJbywgZ0ltYWdlSGFuZGxlLCBOVUxMLA0KPiBF RklfT1BFTl9QUk9UT0NPTF9HRVRfUFJPVE9DT0wpOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQo+ICsgICAgU2hlbGxQcmludEhpaUV4ICgtMSwgLTEsIE5VTEwsIFNUUklOR19UT0tF Tg0KPiAoU1RSX0dFTl9NQVBfUFJPVE9DT0wpLCBnU2hlbGxHcHRIaWlIYW5kbGUsIGdBcHBOYW1l LCBCbG9ja05hbWUsDQo+IEwiQmxvY2tJbyIpOw0KPiArICAgIGdvdG8gQ2xlYW5VcDsNCj4gKyAg fQ0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wgKA0KPiArICAgIEJsb2Nr SW9IYW5kbGUsDQo+ICsgICAgJmdFZmlEaXNrSW9Qcm90b2NvbEd1aWQsDQo+ICsgICAgKFZPSUQg KiopJkRpc2tJbw0KPiArICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4g KyAgICBTaGVsbFByaW50SGlpRXggKC0xLCAtMSwgTlVMTCwgU1RSSU5HX1RPS0VODQo+IChTVFJf R0VOX01BUF9QUk9UT0NPTCksIGdTaGVsbEdwdEhpaUhhbmRsZSwgZ0FwcE5hbWUsIEJsb2NrTmFt ZSwNCj4gTCJEaXNrSW8iKTsNCj4gKyAgICBnb3RvIENsZWFuVXA7DQo+ICsgIH0NCj4gKw0KPiAr ICBDaGVja0ZsYWcgPSBGbGFnOw0KPiArICBmb3IgKEkgPSAwOyBDaGVja0ZsYWc7IENoZWNrRmxh ZyA+Pj0gMSkgew0KPiArICAgIEkgKz0gQ2hlY2tGbGFnICYgMTsNCj4gKyAgICBpZiAoSSA+IDEp IHsNCj4gKyAgICAgIFByaW50RXJyIChMIlRvbyBtYW55IGZsYWdzIiwgRUZJX0lOVkFMSURfUEFS QU1FVEVSKTsNCj4gKyAgICAgIFN0YXR1cyA9IFNIRUxMX0lOVkFMSURfUEFSQU1FVEVSOw0KPiAr ICAgICAgZ290byBDbGVhblVwOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChGbGFn ICYgU1lOQykgew0KPiArICAgIC8vIExldCB0aGUgUGFydGl0aW9uIHRhYmxlIGRyaXZlciBrbm93 IHRoYXQNCj4gKyAgICAvLyB3ZSB3YW50IHRvIHJlcmVhZCB0aGUgdGFibGVzDQo+ICsgICAgU3Rh dHVzID0gZ0JTLT5SZWluc3RhbGxQcm90b2NvbEludGVyZmFjZSAoDQo+ICsgICAgICBCbG9ja0lv SGFuZGxlLA0KPiArICAgICAgJmdFZmlCbG9ja0lvUHJvdG9jb2xHdWlkLA0KPiArICAgICAgQmxv Y2tJbywNCj4gKyAgICAgIEJsb2NrSW8NCj4gKyAgICAgICk7DQo+ICsgICAgU3RhdHVzID0gU0hF TExfU1VDQ0VTUzsNCj4gKyAgICBnb3RvIENsZWFuVXA7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAo IUlzUGFydGl0aW9uYWJsZURldmljZVBhdGggKERldmljZVBhdGhGcm9tSGFuZGxlIChCbG9ja0lv SGFuZGxlKSkpIHsNCj4gKyAgICBTaGVsbFByaW50SGlpRXggKC0xLCAtMSwgTlVMTCwgU1RSSU5H X1RPS0VOIChTVFJfR0VOX1BBUkFNX0lOViksDQo+IGdTaGVsbEdwdEhpaUhhbmRsZSwgZ0FwcE5h bWUsIEJsb2NrTmFtZSk7DQo+ICsgICAgUHJpbnQgKEwiJXMgaXMgbm90IGEgcmF3IGJsb2NrIGRl dmljZVxuIiwgQmxvY2tOYW1lKTsNCj4gKyAgICBTdGF0dXMgPSBTSEVMTF9JTlZBTElEX1BBUkFN RVRFUjsNCj4gKyAgICBnb3RvIENsZWFuVXA7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoIUJsb2Nr SW8tPk1lZGlhLT5NZWRpYVByZXNlbnQpIHsNCj4gKyAgICBQcmludEVyciAoTCJNZWRpYSBpcyBu b3QgcHJlc2VudCFcbiIsIEVGSV9OT19NRURJQSk7DQo+ICsgICAgU3RhdHVzID0gRUZJX05PX01F RElBOw0KPiArICAgIGdvdG8gQ2xlYW5VcDsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vIFByZWxvYWQg R1BUIHRhYmxlcyB3aXRoIHZhbGlkYXRpb24NCj4gKyAgU3RhdHVzID0gUGFydGl0aW9uR2V0R3B0 VGFibGVzIChEaXNrSW8sIEJsb2NrSW8pOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQo+ICsgICAgQk9PTEVBTiBDYW5Db250aW51ZTsNCj4gKw0KPiArICAgIENhbkNvbnRpbnVlID0g KEZsYWcgJiBDUkVBVEUpIHx8IChGbGFnICYgQ0xFQVIpIHx8IChGbGFnICYNCj4gRkFUX0ZPUk1B VCk7DQo+ICsgICAgaWYgKFN0YXR1cyAhPSBFRklfTk9UX0ZPVU5EKSB7DQo+ICsgICAgICBQcmlu dEVyciAoTCJVbmV4cGVjdGVkIGVycm9yIGdldHRpbmcgR1BUIHRhYmxlcyIsIFN0YXR1cyk7DQo+ ICsgICAgICBnb3RvIENsZWFuVXA7DQo+ICsgICAgfSBlbHNlIHsNCj4gKyAgICAgIGlmICghQ2Fu Q29udGludWUpIHsNCj4gKyAgICAgICAgUHJpbnRFcnIgKEwiTm8gR1BUIHRhYmxlIGZvdW5kLiBD cmVhdGUgZmlyc3QiLCBTdGF0dXMpOw0KPiArICAgICAgICBnb3RvIENsZWFuVXA7DQo+ICsgICAg ICB9DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgLy8gRG8gd2UgaGF2ZSBhbnkgcGFydGl0 aW9ucyBhbHJlYWR5Pw0KPiArICBUYWJsZU5vdEVtcHR5ID0gKFBhcnRpdGlvbkZpbmRQYXJ0aXRp b25CeUNyaXRlcmlhIChOVUxMLCAwLCAwLCBTUkNfQU5ZKSAhPQ0KPiBOVUxMKTsNCj4gKw0KPiAr ICBTdGF0dXMgPSBTSEVMTF9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKw0KPiArICBpZiAoKEZsYWcg PCBMSVNUKSB8fA0KPiArICAgICAgKEZsYWcgJiBERUxFVEUpIHx8DQo+ICsgICAgICAoRmxhZyA+ IFJFQURfRklMRSkNCj4gKyAgICAgKSB7DQo+ICsgICAgaWYgKEJsb2NrSW8tPk1lZGlhLT5SZWFk T25seSkgew0KPiArICAgICAgU3RhdHVzID0gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICAg ICAgUHJpbnRFcnIgKEwiQ2Fubm90IHdyaXRlIHRvIGEgcmVhZC1vbmx5IGRldmljZSIsIFN0YXR1 cyk7DQo+ICsgICAgICBnb3RvIENsZWFuVXA7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAg aWYgKEJsb2NrSW8tPk1lZGlhLT5SZW1vdmFibGVNZWRpYSkgew0KPiArICAgIFByaW50IChMIiVz IGlzIGEgcmVtb3ZhYmxlIGRldmljZS4gSnVzdCBhIG5vdGVcbiIsIEJsb2NrTmFtZSk7DQo+ICsg IH0NCj4gKw0KPiArICBzd2l0Y2ggKEZsYWcpIHsNCj4gKyAgICBjYXNlIElORk86DQo+ICsgICAg ICBQYXJ0TmFtZSA9IFNoZWxsQ29tbWFuZExpbmVHZXRSYXdWYWx1ZSAoQ2hlY2tQYWNrYWdlLCAy KTsNCj4gKyAgICAgIE9mZnNldEZsYWcgPSBGQUxTRTsNCj4gKyAgICAgIExlbmd0aEZsYWcgPSBG QUxTRTsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIGNhc2UgTElTVDoNCj4gKyAgICB7DQo+ICsg ICAgICBVSU5UTiBOdW1FbnRyaWVzOw0KPiArDQo+ICsgICAgICBOdW1FbnRyaWVzID0gUGFydGl0 aW9uTGlzdEdwdEVudHJpZXMgKCk7DQo+ICsgICAgICBpZiAoTnVtRW50cmllcyA9PSAwKSB7DQo+ ICsgICAgICAgIFByaW50IChMImdwdDogR1BUIGlzIHZhbGlkIG9uICVzLCBidXQgbm8gcGFydGl0 aW9uKHMpIGRlZmluZWQgeWV0LiBVc2UNCj4gY3JlYXRlXG4iLCBCbG9ja05hbWUpOw0KPiArICAg ICAgfQ0KPiArICAgICAgU3RhdHVzID0gU0hFTExfU1VDQ0VTUzsNCj4gKyAgICAgIGdvdG8gQ2xl YW5VcDsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIH0NCj4gKyAgICBjYXNlIENMRUFSOg0KPiAr ICAgICAgaWYgKFRhYmxlTm90RW1wdHkpIHsNCj4gKyAgICAgICAgLy8gVGVsbCB0aGUgdXNlciB3 aGF0IGhlL3NoZSBpcyBkb2luZy4uLg0KPiArICAgICAgICBTaGVsbFByaW50SGlpRXggKC0xLCAt MSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBTVFJJTkdfVE9LRU4gKFNUUl9H UFRfTk9UX0VNUFRZKSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBnU2hlbGxHcHRIaWlI YW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgQmxvY2tOYW1lDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICApOw0KPiArICAgICAgfQ0KPiArDQo+ICsgICAgICAvLyBFdmVuIGlm IEdQVCB0YWJsZXMgZG8gbm90IGV4aXN0LCB0aGVyZSBtaWdodCBiZSBzb21ldGhpbmcuDQo+ICsg ICAgICAvLyBXYXJuIHRoZSB1c2VyIGFuZCBkb3VibGUgc3VyZSBpdCBpcyB0aGUgaW50ZW50aW9u LA0KPiArICAgICAgLy8gdG8gcHJldmVudCBhIHVzZXIgZnJvbSBicmlja2luZyBhIGRldmljZSAo SlRBRyB3b3VsZCBiZSBuZWVkZWQgdG8NCj4gcmVjb3ZlcikNCj4gKyAgICAgIC8vIGJ5IG92ZXJ3 cml0aW5nIGFuIEFURiBib290IGRldmljZS4gSG93ZXZlciB3aXRoIE5vUHJvbXB0IG9uLCB0aGUN Cj4gdXNlciBpcw0KPiArICAgICAgLy8gcmVzcG9uc2libGUgZm9yIG9wZXJhdGlvbiBiZWNhdXNl IHRoZXJlIGlzIG5vIGNvbmZpcm1hdGlvbiAoYXNzdW1pbmcNCj4geWVzIG9uIGFsbCBxdWVyaWVz KS4NCj4gKyAgICAgIGlmICgoTm9Qcm9tcHQpIHx8ICghR3B0UHJvbXB0WWVzTm8gKFNUUklOR19U T0tFTg0KPiAoU1RSX0dQVF9DTEVBUl9TVVJFKSkgJiYNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAoIUdwdFByb21wdFllc05vIChTVFJJTkdfVE9LRU4NCj4gKFNUUl9HUFRfQUJTT0xVVEVM WV9TVVJFKSkpKQ0KPiArICAgICAgICAgKSB7DQo+ICsgICAgICAgIFBhcnRpdGlvbkdwdENsZWFy QWxsICgpOw0KPiArICAgICAgfQ0KPiArICAgICAgU3RhdHVzID0gU0hFTExfU1VDQ0VTUzsNCj4g KyAgICAgIGdvdG8gQ2xlYW5VcDsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIGNhc2UgQ1JFQVRF Og0KPiArICAgICAgUGFydE5hbWUgICAgPSBTaGVsbENvbW1hbmRMaW5lR2V0UmF3VmFsdWUgKENo ZWNrUGFja2FnZSwgMik7DQo+ICsgICAgICBPZmZzZXRTdHIgPSBTaGVsbENvbW1hbmRMaW5lR2V0 UmF3VmFsdWUgKENoZWNrUGFja2FnZSwgMyk7DQo+ICsgICAgICBMZW5ndGhTdHIgICA9IFNoZWxs Q29tbWFuZExpbmVHZXRSYXdWYWx1ZSAoQ2hlY2tQYWNrYWdlLCA0KTsNCj4gKyAgICAgIEF0dHJT dHIgICAgID0gU2hlbGxDb21tYW5kTGluZUdldFJhd1ZhbHVlIChDaGVja1BhY2thZ2UsIDUpOw0K PiArICAgICAgR3VpZFN0ciAgICAgPSBTaGVsbENvbW1hbmRMaW5lR2V0VmFsdWUgICAgKENoZWNr UGFja2FnZSwgTCItdHlwZSIpOw0KPiArICAgICAgR3VpZEZsYWcgPSBUUlVFOw0KPiArICAgICAg YnJlYWs7DQo+ICsgICAgY2FzZSBERUxFVEU6DQo+ICsgICAgICBQYXJ0TmFtZSAgICA9IFNoZWxs Q29tbWFuZExpbmVHZXRSYXdWYWx1ZSAoQ2hlY2tQYWNrYWdlLCAyKTsNCj4gKyAgICAgIExlbmd0 aEZsYWcgID0gRkFMU0U7DQo+ICsgICAgICBPZmZzZXRGbGFnID0gRkFMU0U7DQo+ICsgICAgICBi cmVhazsNCj4gKyAgICBjYXNlIFJFTkFNRToNCj4gKyAgICAgIFBhcnROYW1lICAgID0gU2hlbGxD b21tYW5kTGluZUdldFJhd1ZhbHVlIChDaGVja1BhY2thZ2UsIDIpOw0KPiArICAgICAgTmV3UGFy dE5hbWUgPSBTaGVsbENvbW1hbmRMaW5lR2V0UmF3VmFsdWUgKENoZWNrUGFja2FnZSwgMyk7DQo+ ICsgICAgICBOZXdQYXJ0TmFtZUZsYWcgPSBUUlVFOw0KPiArICAgICAgTGVuZ3RoRmxhZyA9IEZB TFNFOw0KPiArICAgICAgT2Zmc2V0RmxhZyA9IEZBTFNFOw0KPiArICAgICAgYnJlYWs7DQo+ICsg ICAgY2FzZSBTRVRBVFRSOg0KPiArICAgICAgUGFydE5hbWUgICAgPSBTaGVsbENvbW1hbmRMaW5l R2V0UmF3VmFsdWUgKENoZWNrUGFja2FnZSwgMik7DQo+ICsgICAgICBBdHRyU3RyICAgICA9IFNo ZWxsQ29tbWFuZExpbmVHZXRSYXdWYWx1ZSAoQ2hlY2tQYWNrYWdlLCAzKTsNCj4gKyAgICAgIEF0 dHJGbGFnICAgID0gVFJVRTsNCj4gKyAgICAgIExlbmd0aEZsYWcgID0gRkFMU0U7DQo+ICsgICAg ICBPZmZzZXRGbGFnICA9IEZBTFNFOw0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBTRVRU WVBFOg0KPiArICAgICAgUGFydE5hbWUgICAgPSBTaGVsbENvbW1hbmRMaW5lR2V0UmF3VmFsdWUg KENoZWNrUGFja2FnZSwgMik7DQo+ICsgICAgICBHdWlkU3RyICAgICA9IFNoZWxsQ29tbWFuZExp bmVHZXRWYWx1ZSAgICAoQ2hlY2tQYWNrYWdlLCBMIi10eXBlIik7DQo+ICsgICAgICBHdWlkRmxh ZyA9IFRSVUU7DQo+ICsgICAgICBMZW5ndGhGbGFnID0gRkFMU0U7DQo+ICsgICAgICBPZmZzZXRG bGFnID0gRkFMU0U7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICBjYXNlIEZBVF9GT1JNQVQ6DQo+ ICsgICAgICBQYXJ0TmFtZSAgICAgPSBTaGVsbENvbW1hbmRMaW5lR2V0UmF3VmFsdWUgKENoZWNr UGFja2FnZSwgMik7DQo+ICsgICAgICBWb2x1bWVOYW1lICAgPSBTaGVsbENvbW1hbmRMaW5lR2V0 UmF3VmFsdWUgKENoZWNrUGFja2FnZSwgMyk7DQo+ICsgICAgICBMZW5ndGhGbGFnICAgPSBGQUxT RTsNCj4gKyAgICAgIE9mZnNldEZsYWcgICA9IEZBTFNFOw0KPiArICAgICAgUGFydE5hbWVGbGFn ID0gKFBhcnROYW1lICE9IE5VTEwpOw0KPiArICAgICAgaWYgKCFQYXJ0TmFtZUZsYWcgJiYgVGFi bGVOb3RFbXB0eSkgew0KPiArICAgICAgICAvLyBUZWxsIHRoZSB1c2VyIHdoYXQgaGUvc2hlIGlz IGRvaW5nLi4uDQo+ICsgICAgICAgIFNoZWxsUHJpbnRIaWlFeCAoLTEsIC0xLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgIE5VTEwsIFNUUklOR19UT0tFTiAoU1RSX0dQVF9OT1RfRU1QVFkp LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgIGdTaGVsbEdwdEhpaUhhbmRsZSwNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICBCbG9ja05hbWUNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICk7DQo+ICsgICAgICB9DQo+ICsgICAgICBicmVhazsNCj4gKyAgICAgIC8vIEZhbGwgdGhy b3VnaA0KPiArICAgIGNhc2UgUkVBRDoNCj4gKyAgICBjYXNlIFdSSVRFOg0KPiArICAgICAgQWRk cmVzc1N0ciA9IFNoZWxsQ29tbWFuZExpbmVHZXRSYXdWYWx1ZSAoQ2hlY2tQYWNrYWdlLCAyKTsN Cj4gKyAgICAgIFBhcnROYW1lICA9IFNoZWxsQ29tbWFuZExpbmVHZXRSYXdWYWx1ZSAoQ2hlY2tQ YWNrYWdlLCAzKTsNCj4gKyAgICAgIE9mZnNldFN0ciA9IFNoZWxsQ29tbWFuZExpbmVHZXRSYXdW YWx1ZSAoQ2hlY2tQYWNrYWdlLCA0KTsNCj4gKyAgICAgIExlbmd0aFN0ciA9IFNoZWxsQ29tbWFu ZExpbmVHZXRSYXdWYWx1ZSAoQ2hlY2tQYWNrYWdlLCA1KTsNCj4gKyAgICAgIEFkZHJGbGFnID0g VFJVRTsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIGNhc2UgUkVBRF9GSUxFOg0KPiArICAgICAg RmlsZVN0ciA9IFNoZWxsQ29tbWFuZExpbmVHZXRSYXdWYWx1ZSAoQ2hlY2tQYWNrYWdlLCAyKTsN Cj4gKyAgICAgIFBhcnROYW1lICA9IFNoZWxsQ29tbWFuZExpbmVHZXRSYXdWYWx1ZSAoQ2hlY2tQ YWNrYWdlLCAzKTsNCj4gKyAgICAgIE9mZnNldFN0ciA9IFNoZWxsQ29tbWFuZExpbmVHZXRSYXdW YWx1ZSAoQ2hlY2tQYWNrYWdlLCA0KTsNCj4gKyAgICAgIExlbmd0aFN0ciA9IFNoZWxsQ29tbWFu ZExpbmVHZXRSYXdWYWx1ZSAoQ2hlY2tQYWNrYWdlLCA1KTsNCj4gKyAgICAgIEZpbGVGbGFnID0g VFJVRTsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIGNhc2UgV1JJVEVfRklMRToNCj4gKyAgICAg IEZpbGVTdHIgPSBTaGVsbENvbW1hbmRMaW5lR2V0UmF3VmFsdWUgKENoZWNrUGFja2FnZSwgMik7 DQo+ICsgICAgICBQYXJ0TmFtZSAgPSBTaGVsbENvbW1hbmRMaW5lR2V0UmF3VmFsdWUgKENoZWNr UGFja2FnZSwgMyk7DQo+ICsgICAgICBPZmZzZXRTdHIgPSBTaGVsbENvbW1hbmRMaW5lR2V0UmF3 VmFsdWUgKENoZWNrUGFja2FnZSwgNCk7DQo+ICsgICAgICBMZW5ndGhGbGFnID0gRkFMU0U7DQo+ ICsgICAgICBGaWxlRmxhZyA9IFRSVUU7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICBkZWZhdWx0 Og0KPiArICAgICAgUHJpbnQgKEwiJXM6IFVuc3VwcG9ydGVkIGNvbW1hbmQuIFRyeSBcImhlbHAg JXNcIiIsIGdBcHBOYW1lKTsNCj4gKyAgICAgIFN0YXR1cyA9IFNIRUxMX0lOVkFMSURfUEFSQU1F VEVSOw0KPiArICAgICAgZ290byBDbGVhblVwOw0KPiArICB9DQo+ICsNCj4gKyAgLy8gUmVhZCBh ZGRyZXNzIHBhcmFtZXRlcg0KPiArICBpZiAoKEFkZHJlc3NTdHIgPT0gTlVMTCkgJiBBZGRyRmxh Zykgew0KPiArICAgIFByaW50RXJyIChMIk5vIGFkZHJlc3MgcGFyYW1ldGVyIiwgRUZJX0lOVkFM SURfUEFSQU1FVEVSKTsNCj4gKyAgICBnb3RvIENsZWFuVXA7DQo+ICsgIH0gZWxzZSBpZiAoQWRk ckZsYWcpIHsNCj4gKyAgICBBZGRyZXNzID0gU2hlbGxIZXhTdHJUb1VpbnRuIChBZGRyZXNzU3Ry KTsNCj4gKyAgICBpZiAoQWRkcmVzcyA9PSAoVUlOVE4pKC0xKSkgew0KPiArICAgICAgUHJpbnRF cnIgKEwiV3JvbmcgYWRkcmVzcyBwYXJhbWV0ZXIiLCBFRklfSU5WQUxJRF9QQVJBTUVURVIpOw0K PiArICAgICAgZ290byBDbGVhblVwOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIGlmICgo UGFydE5hbWUgPT0gTlVMTCkgJiBQYXJ0TmFtZUZsYWcpIHsNCj4gKyAgICBQcmludEVyciAoTCJN aXNzaW5nIHBhcnRpdGlvbiBuYW1lIiwgRUZJX0lOVkFMSURfUEFSQU1FVEVSKTsNCj4gKyAgICBn b3RvIENsZWFuVXA7DQo+ICsgIH0gZWxzZSBpZiAoUGFydE5hbWVGbGFnKSB7DQo+ICsgICAgaWYg KFN0clNpemUgKFBhcnROYW1lKSA+IE1BWF9QQVJUSVRJT05fTkFNRV9MRU5HVEgpIHsNCj4gKyAg ICAgIFByaW50RXJyIChMIlBhcnRpdGlvbiBuYW1lIGlzIHRvbyBsb25nIChtYXggMzYgY2hhcnMp IiwNCj4gRUZJX0lOVkFMSURfUEFSQU1FVEVSKTsNCj4gKyAgICAgIGdvdG8gQ2xlYW5VcDsNCj4g KyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICAvLyBSZWFkIG9mZnNldCBwYXJhbWV0ZXINCj4gKyAg aWYgKChPZmZzZXRTdHIgPT0gTlVMTCkgJiBPZmZzZXRGbGFnKSB7DQo+ICsgICAgUHJpbnRFcnIg KEwiTm8gb2Zmc2V0IFBhcmFtZXRlciIsIEVGSV9JTlZBTElEX1BBUkFNRVRFUik7DQo+ICsgICAg Z290byBDbGVhblVwOw0KPiArICB9IGVsc2UgaWYgKE9mZnNldEZsYWcpIHsNCj4gKyAgICBPZmZz ZXQgPSBTaGVsbEhleFN0clRvVWludG4gKE9mZnNldFN0cik7DQo+ICsgICAgaWYgKE9mZnNldCA8 IDApIHsNCj4gKyAgICAgIFByaW50IChMIiVzOiBXcm9uZyBvZmZzZXQgcGFyYW1ldGVyOiAlc1xu IiwgZ0FwcE5hbWUsIE9mZnNldFN0cik7DQo+ICsgICAgICBnb3RvIENsZWFuVXA7DQo+ICsgICAg fQ0KPiArICB9DQo+ICsNCj4gKyAgLy8gUmVhZCBsZW5ndGggcGFyYW1ldGVyDQo+ICsgIGlmICgo TGVuZ3RoU3RyID09IE5VTEwpICYgTGVuZ3RoRmxhZykgew0KPiArICAgIFByaW50RXJyIChMIk5v IGxlbmd0aCBwYXJhbWV0ZXIiLCBFRklfSU5WQUxJRF9QQVJBTUVURVIpOw0KPiArICAgIGdvdG8g Q2xlYW5VcDsNCj4gKyAgfSBlbHNlIGlmIChMZW5ndGhGbGFnKSB7DQo+ICsgICAgQnl0ZUNvdW50 ID0gKFVJTlQ2NClTaGVsbFN0clRvVWludG4gKExlbmd0aFN0cik7DQo+ICsgICAgaWYgKEJ5dGVD b3VudCA8IDApIHsNCj4gKyAgICAgIFByaW50IChMIiVzOiBXcm9uZyBsZW5ndGggcGFyYW1ldGVy ICVzIVxuIiwgZ0FwcE5hbWUsIExlbmd0aFN0cik7DQo+ICsgICAgICBnb3RvIENsZWFuVXA7DQo+ ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgaWYgKChOZXdQYXJ0TmFtZSA9PSBOVUxMKSAmIE5l d1BhcnROYW1lRmxhZykgew0KPiArICAgIFByaW50RXJyIChMIk1pc3NpbmcgbmFtZSB0byBiZSBh c3NpZ25lZCB0byBwYXJ0aXRpb24iLA0KPiBFRklfSU5WQUxJRF9QQVJBTUVURVIpOw0KPiArICAg IGdvdG8gQ2xlYW5VcDsNCj4gKyAgfSBlbHNlIGlmIChOZXdQYXJ0TmFtZUZsYWcpIHsNCj4gKyAg ICBpZiAoU3RyU2l6ZSAoTmV3UGFydE5hbWUpID4gTUFYX1BBUlRJVElPTl9OQU1FX0xFTkdUSCkg ew0KPiArICAgICAgUHJpbnRFcnIgKEwiUGFydGl0aW9uIG5hbWUgaXMgdG9vIGxvbmcgKG1heCAz NiBjaGFycykiLA0KPiBFRklfSU5WQUxJRF9QQVJBTUVURVIpOw0KPiArICAgICAgZ290byBDbGVh blVwOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIGlmICgoQXR0clN0ciA9PSBOVUxMKSAm IEF0dHJGbGFnKSB7DQo+ICsgICAgUHJpbnRFcnIgKEwiTWlzc2luZyBhdHRyaWJ1dGVzIHBhcmFt ZXRlciIsIEVGSV9JTlZBTElEX1BBUkFNRVRFUik7DQo+ICsgICAgZ290byBDbGVhblVwOw0KPiAr ICB9IGVsc2UgaWYgKEF0dHJTdHIpIHsNCj4gKyAgICBQYXJ0QXR0cmlidXRlcyA9IChVSU5UNjQp U2hlbGxTdHJUb1VpbnRuIChBdHRyU3RyKTsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmICgoR3VpZFN0 ciA9PSBOVUxMKSAmIEd1aWRGbGFnKSB7DQo+ICsgICAgUHJpbnRFcnIgKEwiTWlzc2luZyBwYXJ0 aXRpb24gdHlwZSBHVUlEIHBhcmFtZXRlciIsDQo+IEVGSV9JTlZBTElEX1BBUkFNRVRFUik7DQo+ ICsgICAgZ290byBDbGVhblVwOw0KPiArICB9IGVsc2UgaWYgKEd1aWRGbGFnKSB7DQo+ICsgICAg U3RhdHVzID0gU0hFTExfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgICAgaWYgKEludGVybmFsU2hl bGxJc0hleE9yRGVjaW1hbE51bWJlciAoR3VpZFN0ciwgRkFMU0UsIFRSVUUsIEZBTFNFKSkgew0K PiArICAgICAgVUlOVE4gT3JkaW5hbDsNCj4gKw0KPiArICAgICAgT3JkaW5hbCA9IFNoZWxsU3Ry VG9VaW50biAoR3VpZFN0cik7DQo+ICsgICAgICBpZiAoT3JkaW5hbCA8IE51bUtub3duUGFydFR5 cGVzRW50cmllcykgew0KPiArICAgICAgICBQYXJ0VHlwZUd1aWQgPSBQYXJ0aXRpb25HZXRLbm93 blR5cGUgKE9yZGluYWwsIE5VTEwpLT5UeXBlR3VpZDsNCj4gKyAgICAgICAgU3RhdHVzID0gU0hF TExfU1VDQ0VTUzsNCj4gKyAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgIFNoZWxsUHJpbnRIaWlF eCAoLTEsIC0xLCBOVUxMLCBTVFJJTkdfVE9LRU4gKFNUUl9HRU5fUEFSQU1fSU5WKSwNCj4gZ1No ZWxsR3B0SGlpSGFuZGxlLCBnQXBwTmFtZSwgR3VpZFN0cik7DQo+ICsgICAgICAgIGdvdG8gQ2xl YW5VcDsNCj4gKyAgICAgIH0NCj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAgU3RhdHVzID0gQ29u dmVydFN0cmluZ1RvR3VpZCAoR3VpZFN0ciwgJlBhcnRUeXBlR3VpZCk7DQo+ICsgICAgICBpZiAo KEVGSV9FUlJPUiAoU3RhdHVzKSkgfHwgKElzWmVyb0d1aWQgKCZQYXJ0VHlwZUd1aWQpKSkgew0K PiArICAgICAgICBTaGVsbFByaW50SGlpRXggKC0xLCAtMSwgTlVMTCwgU1RSSU5HX1RPS0VOIChT VFJfR0VOX1BBUkFNX0lOViksDQo+IGdTaGVsbEdwdEhpaUhhbmRsZSwgZ0FwcE5hbWUsIEd1aWRT dHIpOw0KPiArICAgICAgICBTdGF0dXMgPSBTSEVMTF9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAg ICAgICAgZ290byBDbGVhblVwOw0KPiArICAgICAgfQ0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ ICsgIGlmIChGaWxlRmxhZykgew0KPiArICAgIC8vIFJlYWQgRmlsZVBhdGggcGFyYW1ldGVyDQo+ ICsgICAgaWYgKEZpbGVTdHIgPT0gTlVMTCkgew0KPiArICAgICAgUHJpbnRFcnIgKEwiTm8gRmls ZVBhdGggcGFyYW1ldGVyIiwgRUZJX0lOVkFMSURfUEFSQU1FVEVSKTsNCj4gKyAgICAgIGdvdG8g Q2xlYW5VcDsNCj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAgRmlsZVBhdGggPSAoQ0hBUjE2ICop RmlsZVN0cjsNCj4gKyAgICAgIFN0YXR1cyA9IFNoZWxsSXNGaWxlIChGaWxlUGF0aCk7DQo+ICsg ICAgICAvLyBXaGVuIHJlYWQgZmlsZSBpbnRvIGZsYXNoLCBmaWxlIGRvZXNuJ3QgaGF2ZSB0byBl eGlzdA0KPiArICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzICYmICEoRmxhZyAmIFJFQURfRklM RSkpKSB7DQo+ICsgICAgICAgIFByaW50RXJyIChMIldyb25nIEZpbGVQYXRoIHBhcmFtZXRlciIs IFN0YXR1cyk7DQo+ICsgICAgICAgIFN0YXR1cyA9IFNIRUxMX0lOVkFMSURfUEFSQU1FVEVSOw0K PiArICAgICAgICBnb3RvIENsZWFuVXA7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArDQo+ICsg ICAgU3RhdHVzID0gT3BlbkFuZFByZXBhcmVGaWxlIChGaWxlUGF0aCwgJkZpbGVIYW5kbGUsICgo RmxhZyAmDQo+IFJFQURfRklMRSkgIT0gMCkpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4gKyAgICAgIFByaW50IChMIkVycm9yICVyIHdoaWxlIHByZXBhcmluZyBmaWxlICVz IiwgU3RhdHVzLCBGaWxlUGF0aCk7DQo+ICsgICAgICBTdGF0dXMgPSBTSEVMTF9BQk9SVEVEOw0K PiArICAgICAgZ290byBDbGVhblVwOw0KPiArICAgIH0NCj4gKw0KPiArICAgIC8vIEdldCBmaWxl IHNpemUgaW4gb3JkZXIgdG8gY2hlY2sgY29ycmVjdG5lc3MgYXQgdGhlIGVuZCBvZiB0cmFuc2Zl cg0KPiArICAgIGlmIChGbGFnICYgKFdSSVRFX0ZJTEUpKSB7DQo+ICsgICAgICBTdGF0dXMgPSBG aWxlSGFuZGxlR2V0U2l6ZSAoRmlsZUhhbmRsZSwgJkZpbGVTaXplKTsNCj4gKyAgICAgIGlmIChF RklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgICAgUHJpbnRFcnIgKEwiQ2Fubm90IGdldCBm aWxlIHNpemUiLCBTdGF0dXMpOw0KPiArICAgICAgICBTdGF0dXMgPSBTSEVMTF9BQk9SVEVEOw0K PiArICAgICAgICBnb3RvIENsZWFuVXA7DQo+ICsgICAgICB9DQo+ICsgICAgICBCeXRlQ291bnQg PSAoVUlOVDY0KUZpbGVTaXplOw0KPiArICAgIH0NCj4gKw0KPiArICAgIEZpbGVCdWZmZXIgPSBB bGxvY2F0ZVplcm9Qb29sICgoVUlOVE4pQnl0ZUNvdW50KTsNCj4gKyAgICBpZiAoRmlsZUJ1ZmZl ciA9PSBOVUxMKSB7DQo+ICsgICAgICBQcmludEVyciAoTCJDYW5ub3QgYWxsb2NhdGUgbWVtb3J5 IiwgRUZJX09VVF9PRl9SRVNPVVJDRVMpOw0KPiArICAgICAgU3RhdHVzID0gU0hFTExfT1VUX09G X1JFU09VUkNFUzsNCj4gKyAgICAgIGdvdG8gRXJyb3JfQ2xvc2VfRmlsZTsNCj4gKyAgICB9DQo+ ICsNCj4gKyAgICAvLyBSZWFkIGZpbGUgY29udGVudCBhbmQgc3RvcmUgaXQgaW4gRmlsZUJ1ZmZl cg0KPiArICAgIGlmIChGbGFnICYgKFdSSVRFX0ZJTEUpKSB7DQo+ICsgICAgICBpZiAoIVF1aWV0 KSB7DQo+ICsgICAgICAgIFByaW50IChMIlJlYWRpbmcgJXMuLi5cciIsIEZpbGVQYXRoKTsNCj4g KyAgICAgIH0NCj4gKyAgICAgIFN0YXR1cyA9IEZpbGVIYW5kbGVSZWFkIChGaWxlSGFuZGxlLCAm Qnl0ZUNvdW50LCBGaWxlQnVmZmVyKTsNCj4gKyAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gKyAgICAgICAgUHJpbnRFcnIgKEwiUmVhZCBmcm9tIGZpbGUgZXJyb3IiLCBTdGF0dXMp Ow0KPiArICAgICAgICBTdGF0dXMgPSBTSEVMTF9BQk9SVEVEOw0KPiArICAgICAgICBnb3RvIEVy cm9yX0ZyZWVfQnVmZmVyOw0KPiArICAgICAgfSBlbHNlIGlmIChCeXRlQ291bnQgIT0gKFVJTlRO KUZpbGVTaXplKSB7DQo+ICsgICAgICAgIFByaW50RXJyIChMIk5vdCB3aG9sZSBmaWxlIHJlYWQu IEFib3J0IiwgRUZJX0RFVklDRV9FUlJPUik7DQo+ICsgICAgICAgIFN0YXR1cyA9IFNIRUxMX0RF VklDRV9FUlJPUjsNCj4gKyAgICAgICAgZ290byBFcnJvcl9GcmVlX0J1ZmZlcjsNCj4gKyAgICAg IH0NCj4gKyAgICAgIGlmICghUXVpZXQpIHsNCj4gKyAgICAgICAgUHJpbnQgKEwiV3JpdGluZyAl cyBpbnRvIGRldmljZSAlcywgcGFydGl0aW9uICVzLi4uXG4iLCBGaWxlUGF0aCwNCj4gQmxvY2tO YW1lLCBQYXJ0TmFtZSk7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAg QnVmZmVyID0gKFVJTlQ4ICopQWRkcmVzczsNCj4gKyAgaWYgKEZpbGVGbGFnKSB7DQo+ICsgICAg QnVmZmVyID0gRmlsZUJ1ZmZlcjsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChGbGFnID4gVFlQRVNf SU5GTykgew0KPiArICAgIEVudHJ5ID0gUGFydGl0aW9uRmluZFBhcnRpdGlvbkJ5Q3JpdGVyaWEg KFBhcnROYW1lLCAwLCAwLCBTUkNfQllfTkFNRSk7DQo+ICsgICAgaWYgKCFFbnRyeSAmJiBQYXJ0 TmFtZSAmJiAoSW50ZXJuYWxTaGVsbElzSGV4T3JEZWNpbWFsTnVtYmVyDQo+IChQYXJ0TmFtZSwg RkFMU0UsIFRSVUUsIEZBTFNFKSkpIHsNCj4gKyAgICAgIEVudHJ5ID0gUGFydGl0aW9uRmluZFBh cnRpdGlvbkJ5Q3JpdGVyaWEgKFBhcnROYW1lLCAwLCAwLCBTUkNfQllfTlVNKTsNCj4gKyAgICB9 DQo+ICsgICAgaWYgKCghRW50cnkpICYmIChQYXJ0TmFtZUZsYWcpKSB7DQo+ICsgICAgICBTaGVs bFByaW50SGlpRXggKC0xLCAtMSwgTlVMTCwgU1RSSU5HX1RPS0VOIChTVFJfR0VOX1BBUkFNX0lO ViksDQo+IGdTaGVsbEdwdEhpaUhhbmRsZSwgZ0FwcE5hbWUsIFBhcnROYW1lKTsNCj4gKyAgICAg IFByaW50IChMIkNvdWxkIG5vdCBmaW5kIHBhcnRpdGlvbiAlcyAoY2FzZS1zZW5zaXRpdmUpLiBN YWtlIHN1cmUgdGhlIG5hbWUNCj4gaXMgc3BlbGxlZCBwcm9wZXJseVxuIiwgUGFydE5hbWUpOw0K PiArICAgICAgU3RhdHVzID0gU0hFTExfTk9UX0ZPVU5EOw0KPiArICAgICAgZ290byBDbGVhblVw Ow0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIHN3aXRjaCAoRmxhZykgew0KPiArICAgIGNh c2UgQ1JFQVRFOg0KPiArICAgICAgUGFydGl0aW9uR3B0Q3JlYXRlUGFydGl0aW9uICgNCj4gKyAg ICAgICAgUGFydE5hbWUsDQo+ICsgICAgICAgIE9mZnNldCwgIC8vIExiYS4gSWYgMCwgdGhlIG5l eHQgYXZhaWxhYmxlIGlzIGFzc3VtZWQNCj4gKyAgICAgICAgQnl0ZUNvdW50LCAvLyBpbiBNZWdh Qnl0ZXMuIElmIDAgdGhlIHdob2xlIHJlbWFpbmluZyBzcGFjZSBpcyBhc3N1bWVkDQo+ICsgICAg ICAgIFBhcnRBdHRyaWJ1dGVzLA0KPiArICAgICAgICBQYXJ0VHlwZUd1aWQpOw0KPiArICAgICAg YnJlYWs7DQo+ICsgICAgY2FzZSBERUxFVEU6DQo+ICsgICAgICBNb2RQYXJhbXMuUGFydE5hbWUg PSBQYXJ0TmFtZTsNCj4gKyAgICAgIFNoZWxsUHJpbnRIaWlFeCAoLTEsIC0xLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICBOVUxMLCBTVFJJTkdfVE9LRU4gKFNUUl9HUFRfREVMRVRFX1dBUk5J TkcpLA0KPiArICAgICAgICAgICAgICAgICAgICAgICBnU2hlbGxHcHRIaWlIYW5kbGUsDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgIEVudHJ5LT5QYXJ0aXRpb25OYW1lDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgKTsNCj4gKyAgICAgIGlmICgoTm9Qcm9tcHQpIHx8ICghR3B0UHJvbXB0WWVz Tm8gKFNUUklOR19UT0tFTg0KPiAoU1RSX0dQVF9BQlNPTFVURUxZX1NVUkUpKSkpIHsNCj4gKyAg ICAgICAgU3RhdHVzID0gUGFydGl0aW9uR3B0TW9kaWZ5UGFydGl0aW9uICgNCj4gKyAgICAgICAg ICBFbnRyeSwgJk1vZFBhcmFtcywgTU9EX0RFTEVURSk7DQo+ICsgICAgICAgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gKyAgICAgICAgICBQcmludEVyciAoTCJFcnJvciBkZWxldGluZyB0 aGUgcGFydGl0aW9uIiwgU3RhdHVzKTsNCj4gKyAgICAgICAgICBTdGF0dXMgPSBTSEVMTF9BQk9S VEVEOw0KPiArICAgICAgICAgIGdvdG8gQ2xlYW5VcDsNCj4gKyAgICAgICAgfQ0KPiArICAgICAg ICBTdGF0dXMgPSBTSEVMTF9TVUNDRVNTOw0KPiArICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAg U3RhdHVzID0gU0hFTExfQUJPUlRFRDsNCj4gKyAgICAgIH0NCj4gKyAgICAgIGJyZWFrOw0KPiAr ICAgIGNhc2UgRkFUX0ZPUk1BVDoNCj4gKyAgICB7DQo+ICsgICAgICBFRklfTEJBIFN0YXJ0aW5n TEJBLCBFbmRpbmdMQkE7DQo+ICsgICAgICBDSEFSOCAgICAgICAgICAgICAgICBMYWJlbE5hbWVb MTJdOw0KPiArDQo+ICsgICAgICBpZiAoVm9sdW1lTmFtZSkgew0KPiArICAgICAgICBpZiAoU3Ry TGVuIChWb2x1bWVOYW1lKSA+IDExKSB7DQo+ICsgICAgICAgICAgU3RhdHVzID0gRUZJX0lOVkFM SURfUEFSQU1FVEVSOw0KPiArICAgICAgICAgIFByaW50RXJyIChMIlRoZSB2b2x1bWUgbGFiZWwg aXMgdG9vIGxvbmciLCBTdGF0dXMpOw0KPiArICAgICAgICAgIFN0YXR1cyA9IFNIRUxMX0lOVkFM SURfUEFSQU1FVEVSOw0KPiArICAgICAgICAgIGdvdG8gQ2xlYW5VcDsNCj4gKyAgICAgICAgfQ0K PiArICAgICAgICBVbmljb2RlU3RyVG9Bc2NpaVN0ciAoVm9sdW1lTmFtZSwgKENIQVI4ICopTGFi ZWxOYW1lKTsNCj4gKyAgICAgIH0NCj4gKyAgICAgIFNoZWxsUHJpbnRIaWlFeCAoLTEsIC0xLA0K PiArICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBTVFJJTkdfVE9LRU4gKFNUUl9HUFRfRk9S TUFUX1dBUk5JTkcpLA0KPiArICAgICAgICAgICAgICAgICAgICAgICBnU2hlbGxHcHRIaWlIYW5k bGUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgIEVudHJ5ID8gRW50cnktPlBhcnRpdGlvbk5h bWUgOiBCbG9ja05hbWUNCj4gKyAgICAgICAgICAgICAgICAgICAgICApOw0KPiArDQo+ICsgICAg ICBpZiAoKE5vUHJvbXB0KSB8fCAoIUdwdFByb21wdFllc05vIChTVFJJTkdfVE9LRU4NCj4gKFNU Ul9HUFRfRk9STUFUX1NVUkUpKSAmJg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICghR3B0 UHJvbXB0WWVzTm8gKFNUUklOR19UT0tFTg0KPiAoU1RSX0dQVF9BQlNPTFVURUxZX1NVUkUpKSkp DQo+ICsgICAgICAgICApIHsNCj4gKyAgICAgICAgU3RhcnRpbmdMQkEgPSAwOw0KPiArICAgICAg ICBFbmRpbmdMQkEgPSBCbG9ja0lvLT5NZWRpYS0+TGFzdEJsb2NrOw0KPiArICAgICAgICBpZiAo RW50cnkpIHsNCj4gKyAgICAgICAgICBTdGFydGluZ0xCQSA9IEVudHJ5LT5TdGFydGluZ0xCQTsN Cj4gKyAgICAgICAgICBFbmRpbmdMQkEgPSBFbnRyeS0+RW5kaW5nTEJBOw0KPiArICAgICAgICB9 DQo+ICsgICAgICAgIGlmICghUXVpZXQpIHsNCj4gKyAgICAgICAgICBQcmludCAoTCJGb3JtYXR0 aW5nICVzIHRvIEZBVDMyLi4uXHIiLCBQYXJ0TmFtZUZsYWcgPyBFbnRyeS0NCj4gPlBhcnRpdGlv bk5hbWUgOiBCbG9ja05hbWUpOw0KPiArICAgICAgICB9DQo+ICsgICAgICAgIFN0YXR1cyA9IEZh dEZvcm1hdCAoU3RhcnRpbmdMQkEsIEVuZGluZ0xCQSwgQmxvY2tJbywgRGlza0lvLA0KPiBWb2x1 bWVOYW1lID8gTGFiZWxOYW1lIDogTlVMTCwgVFJVRSk7DQo+ICsgICAgICAgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gKyAgICAgICAgICBQcmludEVyciAoTCJFcnJvciBmb3JtYXR0aW5n IHRoZSBwYXJ0aXRpb24gdG8gRkFUICAgICAgICAgICAgICIsIFN0YXR1cyk7DQo+ICsgICAgICAg ICAgU3RhdHVzID0gU0hFTExfQUJPUlRFRDsNCj4gKyAgICAgICAgICBnb3RvIENsZWFuVXA7DQo+ ICsgICAgICAgIH0gZWxzZSBpZiAoIVF1aWV0KSB7DQo+ICsgICAgICAgICAgUHJpbnQgKEwiJXMg c3VjY2Vzc2Z1bGx5IGZvcm1hdHRlZCB0byBGQVQuIEZvcm1hdHRlZCBzaXplICVsbHUgTWlCXG4i LA0KPiArICAgICAgICAgICAgICAgICBQYXJ0TmFtZUZsYWcgPyBFbnRyeS0+UGFydGl0aW9uTmFt ZSA6IEJsb2NrTmFtZSwNCj4gKyAgICAgICAgICAgICAgICAgTXVsdFU2NHgzMiAoRW5kaW5nTEJB IC0gU3RhcnRpbmdMQkEgKyAxLCBCbG9ja0lvLT5NZWRpYS0NCj4gPkJsb2NrU2l6ZSkgPj4gMjAN Cj4gKyAgICAgICAgICAgICAgICApOw0KPiArICAgICAgICB9DQo+ICsgICAgICB9IGVsc2Ugew0K PiArICAgICAgICBTdGF0dXMgPSBTSEVMTF9BQk9SVEVEOw0KPiArICAgICAgfQ0KPiArICAgIH0N Cj4gKyAgICAgIGJyZWFrOw0KPiArICAgIGNhc2UgUkVOQU1FOg0KPiArICAgICAgTW9kUGFyYW1z LlBhcnROYW1lID0gUGFydE5hbWU7DQo+ICsgICAgICBNb2RQYXJhbXMuTmV3TmFtZSAgPSBOZXdQ YXJ0TmFtZTsNCj4gKyAgICAgIFN0YXR1cyA9IFBhcnRpdGlvbkdwdE1vZGlmeVBhcnRpdGlvbiAo DQo+ICsgICAgICAgIEVudHJ5LCAmTW9kUGFyYW1zLCBNT0RfUkVOQU1FKTsNCj4gKyAgICAgIGJy ZWFrOw0KPiArICAgIGNhc2UgU0VUQVRUUjoNCj4gKyAgICAgIE1vZFBhcmFtcy5BdHRyaWJ1dGVz ID0gUGFydEF0dHJpYnV0ZXM7DQo+ICsgICAgICBTdGF0dXMgPSBQYXJ0aXRpb25HcHRNb2RpZnlQ YXJ0aXRpb24gKA0KPiArICAgICAgICBFbnRyeSwgJk1vZFBhcmFtcywgTU9EX0FUVFIpOw0KPiAr ICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBTRVRUWVBFOg0KPiArICAgICAgTW9kUGFyYW1zLlBh cnRUeXBlR3VpZCA9IFBhcnRUeXBlR3VpZDsNCj4gKyAgICAgIFN0YXR1cyA9IFBhcnRpdGlvbkdw dE1vZGlmeVBhcnRpdGlvbiAoDQo+ICsgICAgICAgIEVudHJ5LCAmTW9kUGFyYW1zLCBNT0RfVFlQ RSk7DQo+ICsgICAgICBicmVhazsNCj4gKyAgICBjYXNlIElORk86DQo+ICsgICAgICBQYXJ0aXRp b25QcmludEdwdFBhcnRJbmZvIChFbnRyeSk7DQo+ICsgICAgICBTdGF0dXMgPSBTSEVMTF9TVUND RVNTOw0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBSRUFEOg0KPiArICAgIGNhc2UgUkVB RF9GSUxFOg0KPiArICAgIGNhc2UgV1JJVEU6DQo+ICsgICAgY2FzZSBXUklURV9GSUxFOg0KPiAr ICAgIHsNCj4gKyAgICAgIFVJTlQ2NCBNYXhCeXRlczsNCj4gKyAgICAgIEJPT0xFQU4gT3BSZWFk Ow0KPiArDQo+ICsgICAgICBPcFJlYWQgPSAoKEZsYWcgJiBSRUFEKSB8fCAoRmxhZyAmIFJFQURf RklMRSkpOw0KPiArICAgICAgTWF4Qnl0ZXMgPSBNdWx0VTY0eDMyICgNCj4gKyAgICAgICAgRW50 cnktPkVuZGluZ0xCQSAtIEVudHJ5LT5TdGFydGluZ0xCQSwNCj4gKyAgICAgICAgQmxvY2tJby0+ TWVkaWEtPkJsb2NrU2l6ZSkgKw0KPiArICAgICAgICBCbG9ja0lvLT5NZWRpYS0+QmxvY2tTaXpl IC0NCj4gKyAgICAgICAgTXVsdFU2NHgzMiAoT2Zmc2V0LCBCbG9ja0lvLT5NZWRpYS0+QmxvY2tT aXplKTsNCj4gKyAgICAgIGlmIChCeXRlQ291bnQgPiBNYXhCeXRlcykgew0KPiArICAgICAgICBT dGF0dXMgPSBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgICAgICAgIFNoZWxsUHJpbnRIaWlF eCAoLTEsIC0xLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIChPcFJlYWQpID8N Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBTVFJJTkdfVE9LRU4gKFNUUl9HUFRfUkVBRF9C T1VOREFSWSkgOg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgIFNUUklOR19UT0tFTiAoU1RS X0dQVF9XUklURV9CT1VOREFSWSksDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgZ1NoZWxs R3B0SGlpSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgIGdBcHBOYW1lLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgIEVudHJ5LT5QYXJ0aXRpb25OYW1lLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgIE1heEJ5dGVzLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg IEJ5dGVDb3VudA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICAgICAgU3Rh dHVzID0gU0hFTExfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgICAgICAgIGdvdG8gQ2xlYW5VcDsN Cj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAgVGltZVN0YW1wQiA9IEdldFBlcmZvcm1hbmNlQ291 bnRlciAoKTsNCj4gKyAgICAgIGlmIChPcFJlYWQpIHsNCj4gKyAgICAgICAgU3RhdHVzID0gRGlz a0lvLT5SZWFkRGlzayAoRGlza0lvLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBCbG9ja0lvLT5NZWRpYS0+TWVkaWFJZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTXVsdFU2NHgzMiAoT2Zmc2V0ICsgRW50cnktPlN0YXJ0aW5nTEJBLCBCbG9j a0lvLQ0KPiA+TWVkaWEtPkJsb2NrU2l6ZSksIEJ5dGVDb3VudCwgQnVmZmVyKTsNCj4gKyAgICAg IH0gZWxzZSB7DQo+ICsgICAgICAgIFN0YXR1cyA9IERpc2tJby0+V3JpdGVEaXNrIChEaXNrSW8s IEJsb2NrSW8tPk1lZGlhLT5NZWRpYUlkLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTXVsdFU2NHgzMiAoT2Zmc2V0ICsgRW50cnktPlN0YXJ0aW5nTEJBLCBCbG9ja0lv LQ0KPiA+TWVkaWEtPkJsb2NrU2l6ZSksIEJ5dGVDb3VudCwgQnVmZmVyKTsNCj4gKyAgICAgIH0N Cj4gKyAgICB9DQo+ICsgICAgICBicmVhazsNCj4gKyAgICBkZWZhdWx0Og0KPiArICAgICAgU3Rh dHVzID0gU0hFTExfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgICAgICBQcmludEVyciAoTCJVbmtu b3duIGNvbW1hbmQuIFRyeSBcImhlbHAgZ3B0XCIiLA0KPiBFRklfSU5WQUxJRF9QQVJBTUVURVIp Ow0KPiArICAgICAgZ290byBDbGVhblVwOw0KPiArICB9DQo+ICsNCj4gKyAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPiArICAgIFByaW50RXJyIChMIkVycm9yIHdoaWxlIHBlcmZvcm1pbmcg dHJhbnNmZXJcbiIsIFN0YXR1cyk7DQo+ICsgICAgU3RhdHVzID0gU0hFTExfQUJPUlRFRDsNCj4g KyAgICBnb3RvIENsZWFuVXA7DQo+ICsgIH0NCj4gKw0KPiArICBUaW1lU3RhbXBFID0gKChHZXRQ ZXJmb3JtYW5jZUNvdW50ZXIgKCkgLSBUaW1lU3RhbXBCKSAqIDEwMDApIC8gRnJlcTsNCj4gKyAg U3BlZWRLQiA9IFRpbWVTdGFtcEUgPyAoQnl0ZUNvdW50IC8gKFRpbWVTdGFtcEUgLyAxMDAwKSkg Pj4gMTAgOiAwOw0KPiArDQo+ICsgIHN3aXRjaCAoRmxhZykgew0KPiArICAgIGNhc2UgV1JJVEU6 DQo+ICsgICAgY2FzZSBXUklURV9GSUxFOg0KPiArICAgICAgaWYgKCFRdWlldCkgew0KPiArICAg ICAgICBTaGVsbFByaW50SGlpRXggKC0xLCAtMSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICBOVUxMLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgIFNUUklOR19UT0tFTiAoU1RSX0dQ VF9XUklURV9PSyksDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgZ1NoZWxsR3B0SGlpSGFu ZGxlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGVDb3VudCwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICBPZmZzZXQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgRW50 cnktPlBhcnRpdGlvbk5hbWUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgVGltZVN0YW1w RSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBTcGVlZEtCDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICApOw0KPiArICAgICAgfQ0KPiArICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBS RUFEOg0KPiArICAgICAgaWYgKCFRdWlldCkgew0KPiArICAgICAgICBTaGVsbFByaW50SGlpRXgg KC0xLCAtMSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgIFNUUklOR19UT0tFTiAoU1RSX0dQVF9SRUFEX09LKSwNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICBnU2hlbGxHcHRIaWlIYW5kbGUsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgQnl0ZUNvdW50LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgIE9mZnNl dCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBFbnRyeS0+UGFydGl0aW9uTmFtZSwNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lU3RhbXBFLA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgIFNwZWVkS0INCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAg ICB9DQo+ICsgICAgICBicmVhazsNCj4gKyAgICBjYXNlIFJFQURfRklMRToNCj4gKyAgICAgIFN0 YXR1cyA9IEZpbGVIYW5kbGVXcml0ZSAoRmlsZUhhbmRsZSwgJkJ5dGVDb3VudCwgRmlsZUJ1ZmZl cik7DQo+ICsgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICAgIFNoZWxs UHJpbnRIaWlFeCAoLTEsIC0xLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgU1RSSU5HX1RPS0VOIChTVFJfR1BUX0ZJTEVfV1JJ VEVfRkFJTCksDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgZ1NoZWxsR3B0SGlpSGFuZGxl LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgIGdBcHBOYW1lLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgIEZpbGVQYXRoLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1 cw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICAgICAgU3RhdHVzID0gU0hF TExfREVWSUNFX0VSUk9SOw0KPiArICAgICAgICBnb3RvIEVycm9yX0ZyZWVfQnVmZmVyOw0KPiAr ICAgICAgfQ0KPiArDQo+ICsgICAgICBpZiAoIVF1aWV0KSB7DQo+ICsgICAgICAgIFNoZWxsUHJp bnRIaWlFeCAoLTEsIC0xLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgU1RSSU5HX1RPS0VOIChTVFJfR1BUX1JFQURGSUxFX09L KSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBnU2hlbGxHcHRIaWlIYW5kbGUsDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZUNvdW50LA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgIE9mZnNldCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBFbnRyeS0+UGFydGl0 aW9uTmFtZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlUGF0aCwNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICBUaW1lU3RhbXBFLA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgIFNwZWVkS0INCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAgICB9DQo+ ICsgICAgICBicmVhazsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChGaWxlRmxhZykgew0KPiArICAg IFNIRUxMX0ZSRUVfTk9OX05VTEwgKEZpbGVCdWZmZXIpOw0KPiArICAgIGlmIChGaWxlSGFuZGxl ICE9IE5VTEwpIHsNCj4gKyAgICAgIFNoZWxsQ2xvc2VGaWxlICgmRmlsZUhhbmRsZSk7DQo+ICsg ICAgICBGaWxlSGFuZGxlID0gTlVMTDsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0 dXMgPSAgU0hFTExfU1VDQ0VTUzsNCj4gKw0KPiArIEVycm9yX0ZyZWVfQnVmZmVyOg0KPiArICBT SEVMTF9GUkVFX05PTl9OVUxMIChGaWxlQnVmZmVyKTsNCj4gKyBFcnJvcl9DbG9zZV9GaWxlOg0K PiArICBpZiAoRmlsZUhhbmRsZSkgew0KPiArICAgIFNoZWxsQ2xvc2VGaWxlICgmRmlsZUhhbmRs ZSk7DQo+ICsgIH0NCj4gKyBDbGVhblVwOg0KPiArICBpZiAoQmxvY2tJb0hhbmRsZSkgew0KPiAr ICAgIC8vIEJ5IFVFRkkgU3BlYyBibG9ja3MgbXVzdCBiZSBmbHVzaGVkDQo+ICsgICAgQmxvY2tJ by0+Rmx1c2hCbG9ja3MgKEJsb2NrSW8pOw0KPiArICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoQmxv Y2tJb0hhbmRsZSwgJmdFZmlCbG9ja0lvUHJvdG9jb2xHdWlkLA0KPiBnSW1hZ2VIYW5kbGUsIE5V TEwpOw0KPiArICB9DQo+ICsNCj4gKyAgR3B0Q2xlYW51cEdsb2JhbHMgKCk7DQo+ICsNCj4gKyAg U2hlbGxDb21tYW5kTGluZUZyZWVWYXJMaXN0IChDaGVja1BhY2thZ2UpOw0KPiArDQo+ICsgIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBTdGF0dXMgPSBTSEVMTF9BQk9SVEVEOw0K PiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArRUZJX1NUQVRV Uw0KPiArRUZJQVBJDQo+ICtTaGVsbEdwdExpYkNvbnN0cnVjdG9yICgNCj4gKyAgSU4gRUZJX0hB TkRMRSAgICAgICAgSW1hZ2VIYW5kbGUsDQo+ICsgIElOIEVGSV9TWVNURU1fVEFCTEUgICpTeXN0 ZW1UYWJsZQ0KPiArICApDQo+ICt7DQo+ICsgIGdTaGVsbEdwdEhpaUhhbmRsZSA9IE5VTEw7DQo+ ICsNCj4gKyAgZ1NoZWxsR3B0SGlpSGFuZGxlID0gSGlpQWRkUGFja2FnZXMgKA0KPiArICAgICZn U2hlbGxHcHRIaWlHdWlkLCBnSW1hZ2VIYW5kbGUsDQo+ICsgICAgVWVmaVNoZWxsR3B0Q29tbWFu ZExpYlN0cmluZ3MsIE5VTEwNCj4gKyAgICApOw0KPiArICBpZiAoZ1NoZWxsR3B0SGlpSGFuZGxl ID09IE5VTEwpIHsNCj4gKyAgICByZXR1cm4gRUZJX0RFVklDRV9FUlJPUjsNCj4gKyAgfQ0KPiAr DQo+ICsgIFNoZWxsQ29tbWFuZFJlZ2lzdGVyQ29tbWFuZE5hbWUgKA0KPiArICAgIGdBcHBOYW1l LCBTaGVsbENvbW1hbmRSdW5HcHQsIFNoZWxsQ29tbWFuZEdldE1hbkZpbGVOYW1lR3B0LA0KPiAw LA0KPiArICAgIGdBcHBOYW1lLCBUUlVFLCBnU2hlbGxHcHRIaWlIYW5kbGUsIFNUUklOR19UT0tF Tg0KPiAoU1RSX0dFVF9IRUxQX0dQVCkNCj4gKyAgICApOw0KPiArDQo+ICsgIHJldHVybiBFRklf U1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtTaGVsbEdw dExpYkRlc3RydWN0b3IgKA0KPiArICBJTiBFRklfSEFORExFICAgICAgICBJbWFnZUhhbmRsZSwN Cj4gKyAgSU4gRUZJX1NZU1RFTV9UQUJMRSAgKlN5c3RlbVRhYmxlDQo+ICsgICkNCj4gK3sNCj4g Kw0KPiArICBpZiAoZ1NoZWxsR3B0SGlpSGFuZGxlICE9IE5VTEwpIHsNCj4gKyAgICBIaWlSZW1v dmVQYWNrYWdlcyAoZ1NoZWxsR3B0SGlpSGFuZGxlKTsNCj4gKyAgfQ0KPiArICByZXR1cm4gRUZJ X1NVQ0NFU1M7DQo+ICt9DQo+IGRpZmYgLS1naXQNCj4gYS9TaGVsbFBrZy9MaWJyYXJ5L1VlZmlT aGVsbEdwdENvbW1hbmRMaWIvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi5pbmYNCj4gYi9TaGVsbFBr Zy9MaWJyYXJ5L1VlZmlTaGVsbEdwdENvbW1hbmRMaWIvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi5p bmYNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi4xYmU0YjFh YjBmMTENCj4gLS0tIC9kZXYvbnVsbA0KPiArKysNCj4gYi9TaGVsbFBrZy9MaWJyYXJ5L1VlZmlT aGVsbEdwdENvbW1hbmRMaWIvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi5pbmYNCj4gQEAgLTAsMCAr MSw3OSBAQA0KPiArIw0KPiArIyBNYXJ2ZWxsIEJTRCBMaWNlbnNlIE9wdGlvbg0KPiArIw0KPiAr IyBJZiB5b3UgcmVjZWl2ZWQgdGhpcyBGaWxlIGZyb20gTWFydmVsbCwgeW91IG1heSBvcHQgdG8g dXNlLCByZWRpc3RyaWJ1dGUNCj4gKyMgYW5kL29yIG1vZGlmeSB0aGlzIEZpbGUgdW5kZXIgdGhl IGZvbGxvd2luZyBsaWNlbnNpbmcgdGVybXMuDQo+ICsjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KPiArIyBtb2RpZmlj YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnMgYXJlDQo+IG1ldDoNCj4gKyMNCj4gKyMgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQo+ICsjIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQo+ICsjDQo+ICsj ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92 ZSBjb3B5cmlnaHQNCj4gKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQ0KPiArIyBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KPiArIw0KPiAr IyAqIE5laXRoZXIgdGhlIG5hbWUgb2YgTWFydmVsbCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250 cmlidXRvcnMgbWF5IGJlDQo+ICsjIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQNCj4gKyMgc3BlY2lmaWMgcHJpb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLg0KPiArIw0KPiArIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQNCj4gQ09OVFJJQlVUT1JTICJBUyBJUyINCj4g KyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg Tk9UDQo+IExJTUlURUQgVE8sIFRIRQ0KPiArIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBDQo+IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUNCj4g KyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUg0K PiBDT05UUklCVVRPUlMgQkUgTElBQkxFDQo+ICsjIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUg0KPiBDT05TRVFVRU5USUFMDQo+ICsj IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRg0K PiBTVUJTVElUVVRFIEdPT0RTIE9SDQo+ICsjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQ0KPiBIT1dFVkVSDQo+ICsjIENB VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs DQo+IFNUUklDVCBMSUFCSUxJVFksDQo+ICsjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZDQo+IE9VVCBPRiBUSEUgVVNFDQo+ICsj IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg U1VDSA0KPiBEQU1BR0UuDQo+ICsjDQo+ICsNCj4gKyMNCj4gKyMgUG9ydGlvbnMgQ29weXJpZ2h0 IChDKSAyMDE2IEJyb2FkY29tDQo+ICsjDQo+ICsNCj4gK1tEZWZpbmVzXQ0KPiArIElORl9WRVJT SU9OICAgICAgICAgICAgICAgID0gMHgwMDAxMDAwNg0KPiArIEJBU0VfTkFNRSAgICAgICAgICAg ICAgICAgID0gVWVmaVNoZWxsR3B0Q29tbWFuZExpYg0KPiArIEZJTEVfR1VJRCAgICAgICAgICAg ICAgICAgID0gRjYyQUNGMjUtMEQxNS0yMkY1LUU2NDItRkZCNjUxNUUwMEQ3DQo+ICsgTU9EVUxF X1RZUEUgICAgICAgICAgICAgICAgPSBVRUZJX0FQUExJQ0FUSU9ODQo+ICsgVkVSU0lPTl9TVFJJ TkcgICAgICAgICAgICAgPSAwLjENCj4gKyBMSUJSQVJZX0NMQVNTICAgICAgICAgICAgICA9IE5V TEx8VUVGSV9BUFBMSUNBVElPTiBVRUZJX0RSSVZFUg0KPiArIENPTlNUUlVDVE9SICAgICAgICAg ICAgICAgID0gU2hlbGxHcHRMaWJDb25zdHJ1Y3Rvcg0KPiArIERFU1RSVUNUT1IgICAgICAgICAg ICAgICAgID0gU2hlbGxHcHRMaWJEZXN0cnVjdG9yDQo+ICsNCj4gK1tTb3VyY2VzXQ0KPiArIEZh dEZvcm1hdC5jDQo+ICsgR3B0V29ya2VyLmMNCj4gKyBVZWZpU2hlbGxHcHRDb21tYW5kTGliLmMN Cj4gKyBVZWZpU2hlbGxHcHRDb21tYW5kTGliLnVuaQ0KPiArDQo+ICtbUGFja2FnZXNdDQo+ICsg TWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5kZWMNCj4gKyBNZGVQa2cvTWRlUGtnLmRlYw0KPiAr IFNoZWxsUGtnL1NoZWxsUGtnLmRlYw0KPiArDQo+ICtbTGlicmFyeUNsYXNzZXNdDQo+ICsgQmFz ZUxpYg0KPiArIEJhc2VNZW1vcnlMaWINCj4gKyBEZWJ1Z0xpYg0KPiArIERldmljZVBhdGhMaWIN Cj4gKyBGaWxlSGFuZGxlTGliDQo+ICsgSGlpTGliDQo+ICsgTWVtb3J5QWxsb2NhdGlvbkxpYg0K PiArIFBjZExpYg0KPiArIFNoZWxsQ29tbWFuZExpYg0KPiArIFNoZWxsTGliDQo+ICsgVWVmaUJv b3RTZXJ2aWNlc1RhYmxlTGliDQo+ICsgVWVmaVJ1bnRpbWVTZXJ2aWNlc1RhYmxlTGliDQo+ICsg VWVmaUxpYg0KPiArDQo+ICtbUHJvdG9jb2xzXQ0KPiArICBnRWZpQmxvY2tJb1Byb3RvY29sR3Vp ZA0KPiArICBnRWZpRGV2aWNlUGF0aFByb3RvY29sR3VpZA0KPiArICBnRWZpRGlza0lvUHJvdG9j b2xHdWlkDQo+ICsNCj4gK1tHdWlkc10NCj4gKyBnU2hlbGxHcHRIaWlHdWlkDQo+ICsgZ0VmaVBh cnRUeXBlVW51c2VkR3VpZCAgICAgICAgICAgICAgICAgICAgICAgICMjIFNPTUVUSU1FU19DT05T VU1FUyAjIyBHVUlEDQo+IGRpZmYgLS1naXQNCj4gYS9TaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVs bEdwdENvbW1hbmRMaWIvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi51bmkNCj4gYi9TaGVsbFBrZy9M aWJyYXJ5L1VlZmlTaGVsbEdwdENvbW1hbmRMaWIvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi51bmkN Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi41NWJjYjQyY2Zl YjMNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysNCj4gYi9TaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVs bEdwdENvbW1hbmRMaWIvVWVmaVNoZWxsR3B0Q29tbWFuZExpYi51bmkNCj4gQEAgLTAsMCArMSwx MTcgQEANCj4gK++7vy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioNCj4gKioqKioqKioqKioqKioqKioqKioqKg0KPiArQ29weXJpZ2h0IChD KSAyMDE2IE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuDQo+ICsNCj4gK01hcnZlbGwgQlNEIExp Y2Vuc2UgT3B0aW9uDQo+ICsNCj4gK0lmIHlvdSByZWNlaXZlZCB0aGlzIEZpbGUgZnJvbSBNYXJ2 ZWxsLCB5b3UgbWF5IG9wdCB0byB1c2UsIHJlZGlzdHJpYnV0ZQ0KPiBhbmQvb3INCj4gK21vZGlm eSB0aGlzIEZpbGUgdW5kZXIgdGhlIGZvbGxvd2luZyBsaWNlbnNpbmcgdGVybXMuDQo+ICtSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQNCj4gbW9kaWZpY2F0aW9uLA0KPiArYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KPiArDQo+ICsgICAgICAgICogUmVkaXN0 cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQg bm90aWNlLA0KPiArICAgICAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIuDQo+ICsNCj4gKyAgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodA0KPiArICAgICAg ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbiB0aGUNCj4gKyAgICAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KPiArDQo+ICsgICAgICAg ICogTmVpdGhlciB0aGUgbmFtZSBvZiBNYXJ2ZWxsIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRy aWJ1dG9ycyBtYXkgYmUNCj4gKyAgICAgICAgICB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQ0KPiB3aXRob3V0DQo+ICsgICAgICAg ICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KPiArDQo+ICtUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQNCj4gQ09OVFJJQlVU T1JTICJBUyBJUyIgQU5EDQo+ICtBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLA0KPiBUSEUgSU1QTElFRA0KPiArV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUg0KPiBQVVJQ T1NFIEFSRQ0KPiArRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBP V05FUiBPUg0KPiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUg0KPiArQU5ZIERJUkVDVCwgSU5E SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1INCj4gQ09OU0VRVUVOVElB TCBEQU1BR0VTDQo+ICsoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U IE9GIFNVQlNUSVRVVEUgR09PRFMNCj4gT1IgU0VSVklDRVM7DQo+ICtMT1NTIE9GIFVTRSwgREFU QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSDQo+IENBVVNF RCBBTkQgT04NCj4gK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU LCBTVFJJQ1QgTElBQklMSVRZLCBPUg0KPiBUT1JUDQo+ICsoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GDQo+IFRIRSBVU0UgT0YgVEhJ Uw0KPiArU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD SCBEQU1BR0UuDQo+ICsNCj4gKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKg0KPiAqKioqKioqKioqKioqKioqKioqKioqLw0KPiArDQo+ICsv KiBQb3J0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMTYgQnJvYWRjb20gKi8NCj4gKy89Iw0KPiArDQo+ ICsjbGFuZ2RlZiAgIGVuLVVTICJlbmdsaXNoIg0KPiArDQo+ICsjc3RyaW5nIFNUUl9HRU5fUEFS QU1fSU5WICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICIlSCVzJU46IEludmFsaWQNCj4gYXJndW1l bnQgLSAnJUglcyVOJ1xyXG4iDQo+ICsjc3RyaW5nIFNUUl9HRU5fTUFQX1BST1RPQ09MICAgICAg I2xhbmd1YWdlIGVuLVVTICIlSCVzJU46DQo+IE1hcHBlZCBkZXZpY2UgJyVCJXMlTicgZG9lcyBu b3QgaGF2ZSBwcm90b2NvbCAlQiVzJU5cclxuIg0KPiArDQo+ICsjc3RyaW5nIFNUUl9HUFRfRVJS T1IgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgIiVIJXMlTjogJXIgLSAlc1xyXG4iDQo+ICsj c3RyaW5nIFNUUl9HUFRfTk9UX0VNUFRZICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgIiVIJXMlTjog V0FSTklORyEhIQ0KPiBUaGlzIGRldmljZSBoYXMgdmFsaWQgR1BUIHBhcnRpdGlvbiB0YWJsZXMh XHJcbiINCj4gKyNzdHJpbmcgU1RSX0dQVF9DTEVBUl9TVVJFICAgICAgICNsYW5ndWFnZSBlbi1V UyAiQXJlIHlvdSBzdXJlIHlvdSB3YW50DQo+IHRvIGNsZWFyIHRoZSBHUFQgdGFibGVzIG9uIHRo aXMgZGV2aWNlPyAlQlklTmVzLCAlQk4lTm8gIg0KPiArI3N0cmluZyBTVFJfR1BUX0FCU09MVVRF TFlfU1VSRSAgI2xhbmd1YWdlIGVuLVVTICJcclxuQXJlIHlvdSAqKioNCj4gQUJTT0xVVEVMWSBT VVJFICoqKiB5b3Ugd2FudCB0byBwZXJmb3JtIHRoaXMNCj4gb3BlcmF0aW9uID8gJUJZJU5lcywg JUJOJU5vICINCj4gKyNzdHJpbmcgU1RSX0dQVF9GT1JNQVRfV0FSTklORyAgICNsYW5ndWFnZSBl bi1VUyAiJUglcyVOOg0KPiBXQVJOSU5HISEhIEZvcm1hdHRpbmcgb2YgdGhpcyBwYXJ0aXRpb24g d2lsbCBkZXN0cm95IGFsbCBkYXRhIG9uIGl0IVxyXG4iDQo+ICsjc3RyaW5nIFNUUl9HUFRfRk9S TUFUX1NVUkUgICAgICAjbGFuZ3VhZ2UgZW4tVVMgIkFyZSB5b3Ugc3VyZSB5b3UNCj4gd2FudCB0 byBmb3JtYXQgdGhpcyBwYXJ0aXRpb24gdG8gRkFUMzIgYW5kIGRlc3Ryb3kgYWxsIGRhdGEgb24N Cj4gaXQgPyAlQlklTmVzLCAlQk4lTm8gIg0KPiArI3N0cmluZyBTVFJfR1BUX0RFTEVURV9XQVJO SU5HICAgI2xhbmd1YWdlIGVuLVVTICIlSCVzJU46IERlbGV0aW5nDQo+IG9mIHRoaXMgcGFydGl0 aW9uIHdpbGwgbWFrZSBkYXRhIG9uIGl0IHVucmVhY2hhYmxlIVxyXG4iDQo+ICsjc3RyaW5nIFNU Ul9HUFRfUkVBRF9CT1VOREFSWSAgICAjbGFuZ3VhZ2UgZW4tVVMgIiVIJXMlTjogQXR0ZW1wdA0K PiB0byByZWFkIGJleW9uZCAlSCVzJU4gcGFydGl0aW9uIGJvdW5kYXJ5IChjYW4gcmVhZCB1cHRv ICVsbHUgYnl0ZXMgZnJvbQ0KPiB0aGUgZ2l2ZW4gb2Zmc2V0LCByZXF1ZXN0ZWQgJWxsdSBieXRl cylcclxuIg0KPiArI3N0cmluZyBTVFJfR1BUX1dSSVRFX0JPVU5EQVJZICAgI2xhbmd1YWdlIGVu LVVTICIlSCVzJU46DQo+IEF0dGVtcHQgdG8gd3JpdGUgYmV5b25kICVIJXMlTiBwYXJ0aXRpb24g Ym91bmRhcnkgKGNhbiB3cml0ZSB1cHRvICVsbHUNCj4gYnl0ZXMgZnJvbSB0aGUgZ2l2ZW4gb2Zm c2V0LCByZXF1ZXN0ZWQgJWxsdSBieXRlcylcclxuIg0KPiArI3N0cmluZyBTVFJfR1BUX0ZJTEVf V1JJVEVfRkFJTCAgI2xhbmd1YWdlIGVuLVVTICIlSCVzJU46IEZhaWxlZCB0bw0KPiB3cml0ZSB0 byB0aGUgZmlsZSAlcywgZXJyb3IgJXJcclxuIg0KPiArDQo+ICsjc3RyaW5nIFNUUl9HUFRfV1JJ VEVfT0sgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgIldyaXR0ZW4gJWxsdSBieXRlcyBhdA0KPiBv ZmZzZXQgMHgleCwgcGFydGl0aW9uICVzLiBFbGFwc2VkIHRpbWUgJWxsdW1zICglbGx1IEtCL3Mp XHJcbiINCj4gKyNzdHJpbmcgU1RSX0dQVF9SRUFEX09LICAgICAgICAgICNsYW5ndWFnZSBlbi1V UyAiUmVhZCAlbGx1IGJ5dGVzIGZyb20NCj4gb2Zmc2V0IDB4JXgsIHBhcnRpdGlvbiAlcy4gRWxh cHNlZCB0aW1lICVsbHVtcyAoJWxsdSBLQi9zKVxyXG4iDQo+ICsjc3RyaW5nIFNUUl9HUFRfUkVB REZJTEVfT0sgICAgICAjbGFuZ3VhZ2UgZW4tVVMgIlJlYWQgJWxsdSBieXRlcyBmcm9tDQo+IG9m ZnNldCAweCV4LCBwYXJ0aXRpb24gJXMgaW50byBmaWxlICVzLiBFbGFwc2VkIHRpbWUgJWxsdW1z ICglbGx1IEtCL3MpXHJcbiINCj4gKyNzdHJpbmcgU1RSX0dQVF9MSVNUX0RFVlMgICAgICAgICNs YW5ndWFnZSBlbi1VUyAiICVIJSs2cyVOICAlKzhzICAiDQo+ICsNCj4gKyNzdHJpbmcgU1RSX0dF VF9IRUxQX0dQVCAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAiIg0KPiArIi5USCBncHQgMCAiR1BU IHBhcnRpdGlvbiBtYW5hZ2VyLiJcclxuIg0KPiArIi5TSCBOQU1FXHJcbiINCj4gKyJNYW5hZ2Vz IEdQVCBwYXJ0aXRpb25zIG9uIGEgYmxvY2sgZGV2aWNlLlxyXG4iDQo+ICsiLlNIIFNZTk9QU0lT XHJcbiINCj4gKyIgXHJcbiINCj4gKyJncHQgW3JlYWQgfCByZWFkZmlsZSB8IHdyaXRlIHwgd3Jp dGVmaWxlIHwgbGlzdCB8IGluZm8gfCBjbGVhciB8XHJcbiINCj4gKyIgICAgIGNyZWF0ZSB8IGRl bGV0ZSB8IHJlbmFtZSB8IHNldGF0dHJzIHwgc3luYyB8IGZhdGZvcm1hdCB8IC10eXBlc2luZm8g fCAteWVzXQ0KPiBcclxuIg0KPiArIlRoaXMgaXMgYSBjb21wbGV4IHV0aWxpdHkuIFBsZWFzZSBz ZWUgZXhhbXBsZXMgZm9yIHVzYWdlIGluZm9cclxuIg0KPiArIi5TSCBPUFRJT05TXHJcbiINCj4g KyIgXHJcbiINCj4gKyIgICBEZXZpY2UgICAgICAgIC0gQmxvY2sgZGV2aWNlIHRvIGJlIHVzZWQg Zm9yIHRoZSBvcGVyYXRpb25cclxuIg0KPiArIiAgIExlbmd0aCAgICAgICAgLSBOdW1iZXIgb2Yg Ynl0ZXMgdG8gdHJhbnNmZXIgKGZvciByZWFkL3dyaXRlKSlcclxuIg0KPiArIiAgIEFkZHJlc3Mg ICAgICAgLSBBZGRyZXNzIGluIFJBTSB0byBzdG9yZS9sb2FkIGRhdGFcclxuIg0KPiArIiAgIE9m ZnNldCAgICAgICAgLSBPZmZzZXQgKGluIGJsb2NrcykgZnJvbSBiZWdnaW5pbmcgb2YgdGhlIHNw ZWNpZmllIHBhcnRpdGlvbiB0bw0KPiBzdG9yZS9sb2FkIGRhdGFcclxuIg0KPiArIiAgIEZpbGVQ YXRoICAgICAgLSBQYXRoIHRvIGZpbGUgdG8gcmVhZCBkYXRhIGludG8gb3Igd3JpdGUvdXBkYXRl IGRhdGEgZnJvbVxyXG4iDQo+ICsiICAgLXllcyAgICAgICAgICAtIEFzc3VtZSB5ZXMgZm9yIGFs bCBxdWVyaWVzLCBkbyBub3QgcHJvbXB0XHJcblxyXG4iDQo+ICsiLlNIIEVYQU1QTEVTXHJcbiIN Cj4gKyIgXHJcbiINCj4gKyJFWEFNUExFUzpcclxuIg0KPiArIkdldCB0aGUgbGlzdCBvZiBhdmFp bGFibGUgcGFydGl0aW9uYWJsZSBibG9jayBkZXZpY2UocylcclxuIg0KPiArIiAgZ3B0ICVIbGlz dCVOXHJcbiINCj4gKyJHZXQgaW5mbyBvbiB0aGUgcGFydGljdWxhciBwYXJ0aXRpb24gd2l0aCBu YW1lIFBhcnRpdGlvbk5hbWUgb24gdGhlIGJsb2NrDQo+IGRldmljZSBibGswOlxyXG4iDQo+ICsi ICBncHQgJUhpbmZvJU4gYmxrMDogUGFydGl0aW9uTmFtZVxyXG4iDQo+ICsiTGlzdCBhbGwgYXZh aWxhYmxlIEdQVCBwYXJ0aXRpb25zIG9uIHRoZSBibG9jayBkZXZpY2UgYmxrMDpcclxuIg0KPiAr IiAgZ3B0IGxpc3QgYmxrMDpcclxuIg0KPiArIk5vdGU6IHRoZSBvcmRpbmFsIG51bWJlciBzaG93 biBieSB0aGlzIGNvbW1hbmQgY2FuIGJlIHVzZWQgYXMgYQ0KPiBwYXJ0aXRpb24gbmFtZSBpbiBh bnkgY29tbWFuZCByZXF1aXJpbmcgcGFydGl0aW9uIG5hbWVcclxuIg0KPiArIlRodXMgZ3B0IGlu Zm8gYmxrMDogMSBpcyB2YWxpZCBpZiB0aGVyZSBpcyBhIHBhcnRpdGlvbiB3aXRoIG9yZGluYWwg MSBwcmVzZW50IGluDQo+IHRoZSBvdXRwdXQgb2YgZ3B0IGxpc3QgY29tbWFuZFxyXG4iDQo+ICsi R2V0IGluZm9ybWF0aW9uIG9uIGFsbCByZWNvZ25pemVkIHBhcnRpdGlvbiB0eXBlc1xyXG4iDQo+ ICsiICBncHQgJUh0eXBlc2luZm8lTlxyXG4iDQo+ICsiQ2xlYXIgcGFydGl0aW9ucyBpbmZvcm1h dGlvbiBhbmQgaW5zdGFsbCBlbXB0eSBHUFQgdGFibGVzIGZvciBhIGJsb2NrIGRldmljZQ0KPiBi bGswOlxyXG4iDQo+ICsiICBncHQgJUhjbGVhciVOIGJsazA6XHJcbiINCj4gKyJDcmVhdGUgYSBH UFQgcGFydGl0aW9uIHdpdGggbmFtZSBQYXJ0aXRpb25OYW1lIGFuZCB0eXBlIEVGSSBTWVNURU0g aW4NCj4gdGhlIEdQVCB0YWJsZSwgdXNpbmcgdGhlIG5leHQgYXZhaWxhYmxlIExCQSwgd2l0aCBz aXplXHJcbiINCj4gKyI2NE1pQiwgd2l0aCBzeXN0ZW0gYXR0cmlidXRlLCBvbiBibG9jayBkZXZp Y2UgYmxrMDpcclxuIg0KPiArIiAgZ3B0ICVIY3JlYXRlJU4gYmxrMDogUGFydGl0aW9uTmFtZSAw IDY0IDEgLXR5cGUgMFxyXG4iDQo+ICsiU2FtZSBhcyBhYm92ZSwgYnV0IG5vdyB0aGUgcGFydGl0 aW9uIHR5cGUgaXMgbm90IGtub3duIHRvIHRoZSBncHQgdXRpbGl0eSwNCj4gc28gdXNlIHNvbWUg R1VJRCBrbm93biB0byBhIDNyZCBwYXJ0eVxyXG4iDQo+ICsiICBncHQgY3JlYXRlIGJsazA6IFBh cnRpdGlvbk5hbWUgMCA2NCAxIC10eXBlIDQ0NTgxQTRBLUM4MzQtRDFBNi0yNjAyLQ0KPiA5RDUy MkE4RjIzMDdcclxuIg0KPiArIlJlbmFtZSB0aGUgR1BUIHBhcnRpdGlvbiBQYXJ0aXRpb25OYW1l IG9uIGJsazA6IHRvDQo+IE5ld1BhcnRpdGlvbk5hbWVcclxuIg0KPiArIiAgZ3B0ICVIcmVuYW1l JU4gYmxrMDogUGFydGl0aW9uTmFtZSBOZXdQYXJ0aXRpb25OYW1lXHJcbiINCj4gKyJIYXZlIHRo ZSBQYXJ0aXRpb25EeGUgZHJpdmVyIHRvIHJlLXJlYWQgR1BUIHRhYmxlcyBvbiBhIGJsb2NrIGRl dmljZQ0KPiBibGswOihhZnRlciB0aGV5IHdlcmUgdXBkYXRlZCB3aXRoIGdwdCB1dGlsaXR5KVxy XG4iDQo+ICsiICBncHQgJUhzeW5jJU4gYmxrMDpcclxuIg0KPiArIlJlYWQgNEsgZnJvbSBibG9j ayBvZmZzZXQgMHgwZTAwMCBpbiBQYXJ0aXRpb24gbmFtZWQgUGFydGl0aW9uTmFtZSBvZg0KPiB0 aGUgYmxvY2sgZGV2aWNlIGF0IGJsazA6IGludG8gUkFNIGF0IGFkZHJlc3MgMHgxMDAwMDBcclxu Ig0KPiArIiAgZ3B0ICVIcmVhZCVOIGJsazA6IDB4MTAwMDAwIFBhcnRpdGlvbk5hbWUgMHhlMDAw IDQwOTZcclxuIg0KPiArIldyaXRlIDUxMiBieXRlcyBmcm9tIDB4MjAwMDAwIGF0IFJBTSBpbnRv IHRoZSBibG9jayBkZXZpY2UgYXQgYmxrMDoNCj4gcGFydGl0aW9uIFBhcnRpdGlvbk5hbWUgYXQg b2Zmc2V0IDB4MTAwMFxyXG4iDQo+ICsiICBncHQgJUh3cml0ZSVOIGJsazA6IDB4MjAwMDAwIFBh cnRpdGlvbk5hbWUgMHgxMDAwIDUxMlxyXG4iDQo+ICsiUmVhZCAweDMwMDAgYnl0ZXMgZnJvbSAw eDAgb2Zmc2V0IG9mIFBhcnRpdGlvbiBQYXJ0aXRpb25OYW1lIGF0IHRoZSBibG9jaw0KPiBkZXZp Y2UgYmxrMDogaW50byBmaWxlIGZzMjpmaWxlLmJpblxyXG4iDQo+ICsiICBncHQgJUhyZWFkZmls ZSVOIGJsazA6IGZzMjpmaWxlLmJpbiBQYXJ0aXRpb25OYW1lIDB4MCAweDMwMDBcclxuIg0KPiAr IldyaXRlIGNvbnRlbnRzIG9mIGZpbGUgZnMyOmZpbGUuYmluIGludG8gcGFydGl0aW9uIG5hbWVk IFBhcnRpdGlvbk5hbWUgd2l0aA0KPiBvZmZzZXQgKGluIGxiYSkgMHgxMCBvbiBhIGJsb2NrIGRl dmljZSBibGswOlxyXG4iDQo+ICsiICBncHQgJUh3cml0ZWZpbGUlTiBibGswOiBmczI6ZmlsZS5i aW4gUGFydGl0aW9uTmFtZSAweDEwXHJcbiINCj4gKyJGQVQgRm9ybWF0IHRoZSBwYXJ0aXRpb24g UGFydGl0aW9uTmFtZSBvbiBibG9jayBkZXZpY2UgYmxrMDpcclxuIg0KPiArIiAgZ3B0ICVIZmF0 Zm9ybWF0JU4gYmxrMDogUGFydGl0aW9uTmFtZVxyXG4iDQo+ICsiRkFUIEZvcm1hdCB0aGUgd2hv bGUgZGV2aWNlIGJsazA6XHJcbiINCj4gKyIgIGdwdCBmYXRmb3JtYXQgYmxrMDpcclxuIg0KPiAr DQo+ICsiLlNIIFJFVFVSTlZBTFVFU1xyXG4iDQo+ICsiIFxyXG4iDQo+ICsiUkVUVVJOIFZBTFVF UzpcclxuIg0KPiArIiAgU0hFTExfU1VDQ0VTUyAgICAgICAgIFRoZSBhY3Rpb24gd2FzIGNvbXBs ZXRlZCBhcyByZXF1ZXN0ZWQuXHJcbiINCj4gKyIgIFNwZWNpZmljIFNoZWxsIGVycm9yICBFcnJv ciB3aGlsZSBwcm9jZXNzaW5nIGNvbW1hbmRcclxuIg0KPiBkaWZmIC0tZ2l0IGEvU2hlbGxQa2cv U2hlbGxQa2cuZGVjIGIvU2hlbGxQa2cvU2hlbGxQa2cuZGVjDQo+IGluZGV4IDM5ZjgwMTJiOThj MS4uNTM3NGEyYTYyZDVmIDEwMDY0NA0KPiAtLS0gYS9TaGVsbFBrZy9TaGVsbFBrZy5kZWMNCj4g KysrIGIvU2hlbGxQa2cvU2hlbGxQa2cuZGVjDQo+IEBAIC01Niw2ICs1Niw3IEBAIFtHdWlkc10N Cj4gICAgZ1NoZWxsTmV0d29yazJIaWlHdWlkICAgICAgICAgICA9IHsweDE3NGIyYjUsIDB4ZjUw NSwgMHg0YjEyLCB7MHhhYSwgMHg2MCwNCj4gMHg1OSwgMHhkZiwgMHhmOCwgMHhkNiwgMHhlYSwg MHgzN319DQo+ICAgIGdTaGVsbFRmdHBIaWlHdWlkICAgICAgICAgICAgICAgPSB7MHg3MzhhOTMx NCwgMHg4MmMxLCAweDQ1OTIsIHsweDhmLCAweGY3LCAweGMxLA0KPiAweGJkLCAweGYxLCAweGIy LCAweDBlLCAweGQ0fX0NCj4gICAgZ1NoZWxsQmNmZ0hpaUd1aWQgICAgICAgICAgICAgICA9IHsw eDVmNWY2MDVkLCAweDE1ODMsIDB4NGEyZCwgezB4YTYsIDB4YjIsIDB4ZWIsDQo+IDB4MTIsIDB4 ZGEsIDB4YjQsIDB4YTIsIDB4YjZ9fQ0KPiArICBnU2hlbGxHcHRIaWlHdWlkICAgICAgICAgICAg ICAgID0gezB4NWExZWQ3MzksIDB4NWVmMSwgMHg0MjlhLCB7MHg4ZCwgMHhmOCwgMHgyOCwNCj4g MHhjOSwgMHg5MiwgMHg2NCwgMHhkNywgMHhmOH19DQo+IA0KPiAgW1Byb3RvY29sc10NCj4gICAg Z0VmaVNoZWxsUHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgPSB7MHg2MzAyZDAwOCwgMHg3Zjli LCAweDRmMzAsIHsweDg3LCAweGFjLA0KPiAweDYwLCAweGM5LCAweGZlLCAweGY1LCAweGRhLCAw eDRlfX0NCj4gZGlmZiAtLWdpdCBhL1NoZWxsUGtnL1NoZWxsUGtnLmRzYyBiL1NoZWxsUGtnL1No ZWxsUGtnLmRzYw0KPiBpbmRleCA4MDliZDQyMjBhZjIuLjk4NGMxZDBhZDQ4YiAxMDA2NDQNCj4g LS0tIGEvU2hlbGxQa2cvU2hlbGxQa2cuZHNjDQo+ICsrKyBiL1NoZWxsUGtnL1NoZWxsUGtnLmRz Yw0KPiBAQCAtODksNiArODksNyBAQCBbQ29tcG9uZW50c10NCj4gDQo+IFNoZWxsUGtnL0xpYnJh cnkvVWVmaVNoZWxsTGV2ZWwyQ29tbWFuZHNMaWIvVWVmaVNoZWxsTGV2ZWwyQ29tbWFuZHNMaWIN Cj4gLmluZg0KPiANCj4gU2hlbGxQa2cvTGlicmFyeS9VZWZpU2hlbGxMZXZlbDNDb21tYW5kc0xp Yi9VZWZpU2hlbGxMZXZlbDNDb21tYW5kc0xpYg0KPiAuaW5mDQo+IA0KPiBTaGVsbFBrZy9MaWJy YXJ5L1VlZmlTaGVsbERyaXZlcjFDb21tYW5kc0xpYi9VZWZpU2hlbGxEcml2ZXIxQ29tbWFuZHNM DQo+IGliLmluZg0KPiArICBTaGVsbFBrZy9MaWJyYXJ5L1VlZmlTaGVsbEdwdENvbW1hbmRMaWIv VWVmaVNoZWxsR3B0Q29tbWFuZExpYi5pbmYNCj4gDQo+IFNoZWxsUGtnL0xpYnJhcnkvVWVmaVNo ZWxsSW5zdGFsbDFDb21tYW5kc0xpYi9VZWZpU2hlbGxJbnN0YWxsMUNvbW1hbmRzTGkNCj4gYi5p bmYNCj4gDQo+IFNoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsRGVidWcxQ29tbWFuZHNMaWIvVWVm aVNoZWxsRGVidWcxQ29tbWFuZHMNCj4gTGliLmluZg0KPiANCj4gU2hlbGxQa2cvTGlicmFyeS9V ZWZpU2hlbGxOZXR3b3JrMUNvbW1hbmRzTGliL1VlZmlTaGVsbE5ldHdvcmsxQ29tbQ0KPiBhbmRz TGliLmluZg0KPiBAQCAtMTE5LDYgKzEyMCw5IEBAIFtDb21wb25lbnRzXQ0KPiAgIWlmZGVmICQo SU5DTFVERV9URlRQX0NPTU1BTkQpDQo+IA0KPiBOVUxMfFNoZWxsUGtnL0xpYnJhcnkvVWVmaVNo ZWxsVGZ0cENvbW1hbmRMaWIvVWVmaVNoZWxsVGZ0cENvbW1hbmRMaWINCj4gLmluZg0KPiAgIWVu ZGlmICMkKElOQ0xVREVfVEZUUF9DT01NQU5EKQ0KPiArIWlmZGVmICQoSU5DTFVERV9HUFRfQ09N TUFORCkNCj4gKw0KPiBOVUxMfFNoZWxsUGtnL0xpYnJhcnkvVWVmaVNoZWxsR3B0Q29tbWFuZExp Yi9VZWZpU2hlbGxHcHRDb21tYW5kTGliLg0KPiBpbmYNCj4gKyFlbmRpZiAjJChJTkNMVURFX0dQ VF9DT01NQU5EKQ0KPiAgIWVuZGlmICMkKE5PX1NIRUxMX1BST0ZJTEVTKQ0KPiAgICB9DQo+IA0K PiAtLQ0KPiAxLjkuMQ0KDQo=