From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id DD57A8235F for ; Thu, 22 Dec 2016 00:30:39 -0800 (PST) Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga101.jf.intel.com with ESMTP; 22 Dec 2016 00:30:39 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.33,387,1477983600"; d="scan'208";a="45349285" Received: from fmsmsx106.amr.corp.intel.com ([10.18.124.204]) by orsmga005.jf.intel.com with ESMTP; 22 Dec 2016 00:30:39 -0800 Received: from fmsmsx155.amr.corp.intel.com (10.18.116.71) by FMSMSX106.amr.corp.intel.com (10.18.124.204) with Microsoft SMTP Server (TLS) id 14.3.248.2; Thu, 22 Dec 2016 00:30:38 -0800 Received: from shsmsx102.ccr.corp.intel.com (10.239.4.154) by FMSMSX155.amr.corp.intel.com (10.18.116.71) with Microsoft SMTP Server (TLS) id 14.3.248.2; Thu, 22 Dec 2016 00:30:37 -0800 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.20]) by shsmsx102.ccr.corp.intel.com ([169.254.2.88]) with mapi id 14.03.0248.002; Thu, 22 Dec 2016 16:30:34 +0800 From: "Wu, Jiaxin" To: "Ye, Ting" , "edk2-devel@lists.01.org" CC: "Fu, Siyuan" , "Zhang, Lubo" , "Long, Qin" , Thomas Palmer Thread-Topic: [Patch 07/10] NetworkPkg/HttpDxe: HTTPS support over IPv4 and IPv6 Thread-Index: AQHSVdyMjuJyc/46g0WSOotLeZoXI6ETGaqAgACTe1A= Date: Thu, 22 Dec 2016 08:30:34 +0000 Message-ID: <895558F6EA4E3B41AC93A00D163B72741628DF5D@SHSMSX103.ccr.corp.intel.com> References: <1481700859-76060-1-git-send-email-jiaxin.wu@intel.com> <1481700859-76060-8-git-send-email-jiaxin.wu@intel.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiNzU1MDE4ZjctNWQzMC00NWY1LWI0NWYtYzIzOTJjM2MxYTdhIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX0lDIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE1LjkuNi42IiwiVHJ1c3RlZExhYmVsSGFzaCI6IjVMV2JnU3RUaXkxZzdXTFpiS1JHRUNHQVplYkF6R3k1ZlRLRTllRzBmTmM9In0= x-ctpclassification: CTP_IC x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [Patch 07/10] NetworkPkg/HttpDxe: HTTPS support over IPv4 and IPv6 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: Thu, 22 Dec 2016 08:30:40 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgVGluZywNCiANClRoYW5rcy4gSSB3aWxsIGNvcnJlY3QvcmVmaW5lIHRoZSBpbXBsZW1lbnRh dGlvbiBhY2NvcmRpbmcgeW91ciBjb21tZW50cy4NCg0KVGhhbmtzLA0KSmlheGluDQoNCj4gLS0t LS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogWWUsIFRpbmcNCj4gU2VudDogVGh1cnNk YXksIERlY2VtYmVyIDIyLCAyMDE2IDM6MzQgUE0NCj4gVG86IFd1LCBKaWF4aW4gPGppYXhpbi53 dUBpbnRlbC5jb20+OyBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZw0KPiBDYzogRnUsIFNpeXVhbiA8 c2l5dWFuLmZ1QGludGVsLmNvbT47IFpoYW5nLCBMdWJvIDxsdWJvLnpoYW5nQGludGVsLmNvbT47 DQo+IExvbmcsIFFpbiA8cWluLmxvbmdAaW50ZWwuY29tPjsgVGhvbWFzIFBhbG1lciA8dGhvbWFz LnBhbG1lckBocGUuY29tPg0KPiBTdWJqZWN0OiBSRTogW1BhdGNoIDA3LzEwXSBOZXR3b3JrUGtn L0h0dHBEeGU6IEhUVFBTIHN1cHBvcnQgb3ZlciBJUHY0DQo+IGFuZCBJUHY2DQo+IA0KPiBIaSBK aWF4aW4sDQo+IA0KPiBTb21lIGNvbW1lbnRzIGluY2x1ZGVkIGJlbG93Lg0KPiANCj4gMS4gSW4g VGxzQ29uZmlnQ2VydGlmaWNhdGUsIEh0dHBJbnN0YW5jZS0+VGxzQ29uZmlnRGF0YS5DQUNlcnQg aXMgbm90IHVzZWQNCj4gYW5kIGxvY2FsIHZhcmlhYmxlICJDQUNlcnQiIGlzIG5vdCBmcmVlZCBh ZnRlciBjYWxsaW5nIFRsc0NvbmZpZ3VyYXRpb24tDQo+ID5TZXREYXRhLg0KPiAyLiBJbiBUbHND b25maWd1cmVTZXNzaW9uLCBzZXZlcmFsIGdvdG9zIGFyZSB1c2VsZXNzLiBTdWdnZXN0IHRvIHJl cGxhY2Ugd2l0aA0KPiByZXR1cm4gc3RhdHVzIGRpcmVjdGx5Lg0KPiAzLiAgVGhpcyB0d28gcGFy dHMgd2lsbCBiZSA9PT4gVGhlc2UNCj4gDQo+IE90aGVycyBhcmUgZ29vZCB0byBtZS4NCj4gDQo+ IFJldmlld2VkLWJ5OiBZZSBUaW5nIDx0aW5nLnllQGludGVsLmNvbT4NCj4gDQo+IEJlc3QgUmVn YXJkcywNCj4gWWUgVGluZw0KPiANCj4gDQo+IA0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0t LQ0KPiBGcm9tOiBXdSwgSmlheGluDQo+IFNlbnQ6IFdlZG5lc2RheSwgRGVjZW1iZXIgMTQsIDIw MTYgMzozNCBQTQ0KPiBUbzogZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmcNCj4gQ2M6IFllLCBUaW5n IDx0aW5nLnllQGludGVsLmNvbT47IEZ1LCBTaXl1YW4gPHNpeXVhbi5mdUBpbnRlbC5jb20+OyBa aGFuZywNCj4gTHVibyA8bHViby56aGFuZ0BpbnRlbC5jb20+OyBMb25nLCBRaW4gPHFpbi5sb25n QGludGVsLmNvbT47IFRob21hcw0KPiBQYWxtZXIgPHRob21hcy5wYWxtZXJAaHBlLmNvbT47IFd1 LCBKaWF4aW4gPGppYXhpbi53dUBpbnRlbC5jb20+DQo+IFN1YmplY3Q6IFtQYXRjaCAwNy8xMF0g TmV0d29ya1BrZy9IdHRwRHhlOiBIVFRQUyBzdXBwb3J0IG92ZXIgSVB2NCBhbmQNCj4gSVB2Ng0K PiANCj4gVGhpcyBwYXRjaCBpcyB1c2VkIHRvIGVuYWJsZSBIVFRQUyBmZWF0dXJlLiBIdHRwRHhl IGRyaXZlcg0KPiB3aWxsIGNvbnN1bWUgVGxzRHhlIGRyaXZlci4gSXQgY2FuIGJvdGggc3VwcG9y dCBodHRwIGFuZCBodHRwcw0KPiBmZWF0dXJlLCB0aGF04oCZcyBkZXBlbmRlZCBvbiB0aGUgaW5m b3JtYXRpb24gb2YgVVJMLCB0aGUgSFRUUA0KPiBpbnN0YW5jZSBjYW4gYmUgYWJsZSB0byBkZXRl cm1pbmUgd2hldGhlciB0byB1c2UgaHR0cCBvciBodHRwcy4NCj4gDQo+IENjOiBZZSBUaW5nIDx0 aW5nLnllQGludGVsLmNvbT4NCj4gQ2M6IEZ1IFNpeXVhbiA8c2l5dWFuLmZ1QGludGVsLmNvbT4N Cj4gQ2M6IFpoYW5nIEx1Ym8gPGx1Ym8uemhhbmdAaW50ZWwuY29tPg0KPiBDYzogTG9uZyBRaW4g PHFpbi5sb25nQGludGVsLmNvbT4NCj4gQ2M6IFRob21hcyBQYWxtZXIgPHRob21hcy5wYWxtZXJA aHBlLmNvbT4NCj4gQ29udHJpYnV0ZWQtdW5kZXI6IFRpYW5vQ29yZSBDb250cmlidXRpb24gQWdy ZWVtZW50IDEuMA0KPiBTaWduZWQtb2ZmLWJ5OiBXdSBKaWF4aW4gPGppYXhpbi53dUBpbnRlbC5j b20+DQo+IC0tLQ0KPiAgTmV0d29ya1BrZy9IdHRwRHhlL0h0dHBEcml2ZXIuaCAgIHwgICAxMCAr LQ0KPiAgTmV0d29ya1BrZy9IdHRwRHhlL0h0dHBEeGUuaW5mICAgIHwgICAxMiArLQ0KPiAgTmV0 d29ya1BrZy9IdHRwRHhlL0h0dHBJbXBsLmMgICAgIHwgIDI1MiArKysrKy0NCj4gIE5ldHdvcmtQ a2cvSHR0cER4ZS9IdHRwUHJvdG8uYyAgICB8ICA0NjQgKysrKysrKy0tLQ0KPiAgTmV0d29ya1Br Zy9IdHRwRHhlL0h0dHBQcm90by5oICAgIHwgICA2NSArLQ0KPiAgTmV0d29ya1BrZy9IdHRwRHhl L0h0dHBzU3VwcG9ydC5jIHwgMTY5Mg0KPiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrDQo+ICBOZXR3b3JrUGtnL0h0dHBEeGUvSHR0cHNTdXBwb3J0LmggfCAgMjYwICsrKysr Kw0KPiAgNyBmaWxlcyBjaGFuZ2VkLCAyNjAxIGluc2VydGlvbnMoKyksIDE1NCBkZWxldGlvbnMo LSkNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBOZXR3b3JrUGtnL0h0dHBEeGUvSHR0cHNTdXBwb3J0 LmMNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBOZXR3b3JrUGtnL0h0dHBEeGUvSHR0cHNTdXBwb3J0 LmgNCj4gDQo+IGRpZmYgLS1naXQgYS9OZXR3b3JrUGtnL0h0dHBEeGUvSHR0cERyaXZlci5oDQo+ IGIvTmV0d29ya1BrZy9IdHRwRHhlL0h0dHBEcml2ZXIuaA0KPiBpbmRleCBmYTIzNzJjLi45M2E0 MTJhIDEwMDY0NA0KPiAtLS0gYS9OZXR3b3JrUGtnL0h0dHBEeGUvSHR0cERyaXZlci5oDQo+ICsr KyBiL05ldHdvcmtQa2cvSHR0cER4ZS9IdHRwRHJpdmVyLmgNCj4gQEAgLTIyLDEwICsyMiwxMSBA QA0KPiANCj4gIC8vDQo+ICAvLyBMaWJyYXJpZXMNCj4gIC8vDQo+ICAjaW5jbHVkZSA8TGlicmFy eS9VZWZpQm9vdFNlcnZpY2VzVGFibGVMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlS dW50aW1lU2VydmljZXNUYWJsZUxpYi5oPg0KPiAgI2luY2x1ZGUgPExpYnJhcnkvTWVtb3J5QWxs b2NhdGlvbkxpYi5oPg0KPiAgI2luY2x1ZGUgPExpYnJhcnkvQmFzZUxpYi5oPg0KPiAgI2luY2x1 ZGUgPExpYnJhcnkvVWVmaUxpYi5oPg0KPiAgI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4N Cj4gICNpbmNsdWRlIDxMaWJyYXJ5L05ldExpYi5oPg0KPiBAQCAtNDgsMTcgKzQ5LDIzIEBADQo+ ICAjaW5jbHVkZSA8UHJvdG9jb2wvVGNwNi5oPg0KPiAgI2luY2x1ZGUgPFByb3RvY29sL0RuczQu aD4NCj4gICNpbmNsdWRlIDxQcm90b2NvbC9EbnM2Lmg+DQo+ICAjaW5jbHVkZSA8UHJvdG9jb2wv SXA0Q29uZmlnMi5oPg0KPiAgI2luY2x1ZGUgPFByb3RvY29sL0lwNkNvbmZpZy5oPg0KPiArI2lu Y2x1ZGUgPFByb3RvY29sL1Rscy5oPg0KPiArI2luY2x1ZGUgPFByb3RvY29sL1Rsc0NvbmZpZy5o Pg0KPiANCj4gLQ0KPiArI2luY2x1ZGUgPEd1aWQvSW1hZ2VBdXRoZW50aWNhdGlvbi5oPg0KPiAg Ly8NCj4gIC8vIFByb2R1Y2VkIFByb3RvY29scw0KPiAgLy8NCj4gICNpbmNsdWRlIDxQcm90b2Nv bC9IdHRwLmg+DQo+IA0KPiArI2luY2x1ZGUgPEd1aWQvVGxzQXV0aGVudGljYXRpb24uaD4NCj4g Kw0KPiArI2luY2x1ZGUgPEluZHVzdHJ5U3RhbmRhcmQvVGxzMS5oPg0KPiArDQo+ICAvLw0KPiAg Ly8gRHJpdmVyIFZlcnNpb24NCj4gIC8vDQo+ICAjZGVmaW5lIEhUVFBfRFJJVkVSX1ZFUlNJT04g MHhhDQo+IA0KPiBAQCAtNzcsMTAgKzg0LDExIEBAIGV4dGVybiBFRklfSFRUUF9VVElMSVRJRVNf UFJPVE9DT0wNCj4gKm1IdHRwVXRpbGl0aWVzOw0KPiAgLy8gSW5jbHVkZSBmaWxlcyB3aXRoIGZ1 bmN0aW9uIHByb3RvdHlwZXMNCj4gIC8vDQo+ICAjaW5jbHVkZSAiQ29tcG9uZW50TmFtZS5oIg0K PiAgI2luY2x1ZGUgIkh0dHBJbXBsLmgiDQo+ICAjaW5jbHVkZSAiSHR0cFByb3RvLmgiDQo+ICsj aW5jbHVkZSAiSHR0cHNTdXBwb3J0LmgiDQo+ICAjaW5jbHVkZSAiSHR0cERucy5oIg0KPiANCj4g IHR5cGVkZWYgc3RydWN0IHsNCj4gICAgRUZJX1NFUlZJQ0VfQklORElOR19QUk9UT0NPTCAgKlNl cnZpY2VCaW5kaW5nOw0KPiAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXJP ZkNoaWxkcmVuOw0KPiBkaWZmIC0tZ2l0IGEvTmV0d29ya1BrZy9IdHRwRHhlL0h0dHBEeGUuaW5m DQo+IGIvTmV0d29ya1BrZy9IdHRwRHhlL0h0dHBEeGUuaW5mDQo+IGluZGV4IGJmMmNiZWUuLjEx MTgxODEgMTAwNjQ0DQo+IC0tLSBhL05ldHdvcmtQa2cvSHR0cER4ZS9IdHRwRHhlLmluZg0KPiAr KysgYi9OZXR3b3JrUGtnL0h0dHBEeGUvSHR0cER4ZS5pbmYNCj4gQEAgLTEsOSArMSw5IEBADQo+ ICAjIyBAZmlsZQ0KPiAgIyAgSW1wbGVtZW50YXRpb24gb2YgRUZJIEhUVFAgcHJvdG9jb2wgaW50 ZXJmYWNlcy4NCj4gICMNCj4gLSMgIENvcHlyaWdodCAoYykgMjAxNSwgSW50ZWwgQ29ycG9yYXRp b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArIyAgQ29weXJpZ2h0IChjKSAyMDE1IC0g MjAxNiwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiAgIw0K PiAgIyAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPiAgIyAg YXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRp dGlvbnMgb2YgdGhlDQo+IEJTRCBMaWNlbnNlDQo+ICAjICB3aGljaCBhY2NvbXBhbmllcyB0aGlz IGRpc3RyaWJ1dGlvbi4gVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUNCj4gZm91 bmQgYXQNCj4gICMgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5w aHAuDQo+IEBAIC0yNCwxMCArMjQsMTEgQEANCj4gICAgTU9EVUxFX1VOSV9GSUxFICAgICAgICAg ICA9IEh0dHBEeGUudW5pDQo+IA0KPiAgW1BhY2thZ2VzXQ0KPiAgICBNZGVQa2cvTWRlUGtnLmRl Yw0KPiAgICBNZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtnLmRlYw0KPiArICBOZXR3b3JrUGtnL05l dHdvcmtQa2cuZGVjDQo+IA0KPiAgW1NvdXJjZXNdDQo+ICAgIENvbXBvbmVudE5hbWUuaA0KPiAg ICBDb21wb25lbnROYW1lLmMNCj4gICAgSHR0cERucy5oDQo+IEBAIC0zNiwxNCArMzcsMTcgQEAN Cj4gICAgSHR0cERyaXZlci5jDQo+ICAgIEh0dHBJbXBsLmgNCj4gICAgSHR0cEltcGwuYw0KPiAg ICBIdHRwUHJvdG8uaA0KPiAgICBIdHRwUHJvdG8uYw0KPiArICBIdHRwc1N1cHBvcnQuaA0KPiAr ICBIdHRwc1N1cHBvcnQuYw0KPiANCj4gIFtMaWJyYXJ5Q2xhc3Nlc10NCj4gICAgVWVmaURyaXZl ckVudHJ5UG9pbnQNCj4gICAgVWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliDQo+ICsgIFVlZmlSdW50 aW1lU2VydmljZXNUYWJsZUxpYg0KPiAgICBNZW1vcnlBbGxvY2F0aW9uTGliDQo+ICAgIEJhc2VM aWINCj4gICAgVWVmaUxpYg0KPiAgICBEZWJ1Z0xpYg0KPiAgICBOZXRMaWINCj4gQEAgLTYyLDgg KzY2LDE0IEBADQo+ICAgIGdFZmlEbnM0UHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMNCj4gICAgZ0VmaURuczZTZXJ2aWNlQmluZGlu Z1Byb3RvY29sR3VpZCAgICAgICAgICAgICAgICMjIFNPTUVUSU1FU19DT05TVU1FUw0KPiAgICBn RWZpRG5zNlByb3RvY29sR3VpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMgU09NRVRJ TUVTX0NPTlNVTUVTDQo+ICAgIGdFZmlJcDRDb25maWcyUHJvdG9jb2xHdWlkICAgICAgICAgICAg ICAgICAgICAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMNCj4gICAgZ0VmaUlwNkNvbmZpZ1Byb3Rv Y29sR3VpZCAgICAgICAgICAgICAgICAgICAgICAgICMjIFNPTUVUSU1FU19DT05TVU1FUw0KPiAr ICBnRWZpVGxzU2VydmljZUJpbmRpbmdQcm90b2NvbEd1aWQgICAgICAgICAgICAgICAgIyMgU09N RVRJTUVTX0NPTlNVTUVTDQo+ICsgIGdFZmlUbHNQcm90b2NvbEd1aWQgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMNCj4gKyAgZ0VmaVRsc0NvbmZpZ3Vy YXRpb25Qcm90b2NvbEd1aWQgICAgICAgICAgICAgICAgICMjIFNPTUVUSU1FU19DT05TVU1FUw0K PiArDQo+ICtbR3VpZHNdDQo+ICsgIGdFZmlUbHNDYUNlcnRpZmljYXRlR3VpZCAgICAgICAgICAg ICAgICAgICAgICAgICAjIyBDT05TVU1FUyAgIyMgR1VJRA0KPiANCj4gIFtVc2VyRXh0ZW5zaW9u cy5UaWFub0NvcmUuIkV4dHJhRmlsZXMiXQ0KPiAgICBIdHRwRHhlRXh0cmEudW5pDQo+IFwgTm8g bmV3bGluZSBhdCBlbmQgb2YgZmlsZQ0KPiBkaWZmIC0tZ2l0IGEvTmV0d29ya1BrZy9IdHRwRHhl L0h0dHBJbXBsLmMNCj4gYi9OZXR3b3JrUGtnL0h0dHBEeGUvSHR0cEltcGwuYw0KPiBpbmRleCA2 ZmNiMGI3Li43N2FhNjRhIDEwMDY0NA0KPiAtLS0gYS9OZXR3b3JrUGtnL0h0dHBEeGUvSHR0cElt cGwuYw0KPiArKysgYi9OZXR3b3JrUGtnL0h0dHBEeGUvSHR0cEltcGwuYw0KPiBAQCAtMjM5LDEw ICsyMzksMTEgQEAgRWZpSHR0cFJlcXVlc3QgKA0KPiAgICBVSU5UTiAgICAgICAgICAgICAgICAg ICAgICAgICBIb3N0TmFtZVNpemU7DQo+ICAgIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgICAg IFJlbW90ZVBvcnQ7DQo+ICAgIEhUVFBfUFJPVE9DT0wgICAgICAgICAgICAgICAgICpIdHRwSW5z dGFuY2U7DQo+ICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgIENvbmZpZ3VyZTsNCj4g ICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgUmVDb25maWd1cmU7DQo+ICsgIEJPT0xF QU4gICAgICAgICAgICAgICAgICAgICAgIFRsc0NvbmZpZ3VyZTsNCj4gICAgQ0hBUjggICAgICAg ICAgICAgICAgICAgICAgICAgKlJlcXVlc3RNc2c7DQo+ICAgIENIQVI4ICAgICAgICAgICAgICAg ICAgICAgICAgICpVcmw7DQo+ICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIFVybExl bjsNCj4gICAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgKkhvc3ROYW1lU3RyOw0KPiAg ICBIVFRQX1RPS0VOX1dSQVAgICAgICAgICAgICAgICAqV3JhcDsNCj4gQEAgLTI1OCwxMCArMjU5 LDExIEBAIEVmaUh0dHBSZXF1ZXN0ICgNCj4gICAgSG9zdE5hbWUgPSBOVUxMOw0KPiAgICBSZXF1 ZXN0TXNnID0gTlVMTDsNCj4gICAgSG9zdE5hbWVTdHIgPSBOVUxMOw0KPiAgICBXcmFwID0gTlVM TDsNCj4gICAgRmlsZVVybCA9IE5VTEw7DQo+ICsgIFRsc0NvbmZpZ3VyZSA9IEZBTFNFOw0KPiAN Cj4gICAgaWYgKChUaGlzID09IE5VTEwpIHx8IChUb2tlbiA9PSBOVUxMKSkgew0KPiAgICAgIHJl dHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICAgIH0NCj4gDQo+IEBAIC0zNDMsMTAgKzM0 NSwzNiBAQCBFZmlIdHRwUmVxdWVzdCAoDQo+ICAgICAgICBIdHRwSW5zdGFuY2UtPlVybCA9IFVy bDsNCj4gICAgICB9DQo+IA0KPiANCj4gICAgICBVbmljb2RlU3RyVG9Bc2NpaVN0clMgKFJlcXVl c3QtPlVybCwgVXJsLCBVcmxMZW4pOw0KPiArDQo+ICsgICAgLy8NCj4gKyAgICAvLyBGcm9tIHRo ZSBpbmZvcm1hdGlvbiBpbiBVcmwsIHRoZSBIVFRQIGluc3RhbmNlIHdpbGwNCj4gKyAgICAvLyBi ZSBhYmxlIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHVzZSBodHRwIG9yIGh0dHBzLg0KPiArICAg IC8vDQo+ICsgICAgSHR0cEluc3RhbmNlLT5Vc2VIdHRwcyA9IElzSHR0cHNVcmwgKFVybCk7DQo+ ICsNCj4gKyAgICAvLw0KPiArICAgIC8vIENoZWNrIHdoZXRoZXIgd2UgbmVlZCB0byBjcmVhdGUg VGxzIGNoaWxkIGFuZCBvcGVuIHRoZSBUTFMgcHJvdG9jb2wuDQo+ICsgICAgLy8NCj4gKyAgICBp ZiAoSHR0cEluc3RhbmNlLT5Vc2VIdHRwcyAmJiBIdHRwSW5zdGFuY2UtPlRsc0NoaWxkSGFuZGxl ID09IE5VTEwpIHsNCj4gKyAgICAgIC8vDQo+ICsgICAgICAvLyBVc2UgVGxzU2IgdG8gY3JlYXRl IFRscyBjaGlsZCBhbmQgb3BlbiB0aGUgVExTIHByb3RvY29sLg0KPiArICAgICAgLy8NCj4gKyAg ICAgIEh0dHBJbnN0YW5jZS0+VGxzQ2hpbGRIYW5kbGUgPSBUbHNDcmVhdGVDaGlsZCAoDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIdHRwSW5zdGFuY2UtPlNlcnZp Y2UtPkltYWdlSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJihIdHRwSW5zdGFuY2UtPlRscyksDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmKEh0dHBJbnN0YW5jZS0+VGxzQ29uZmlndXJhdGlvbikNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAgICBpZiAoSHR0cEluc3Rh bmNlLT5UbHNDaGlsZEhhbmRsZSA9PSBOVUxMKSB7DQo+ICsgICAgICAgIHJldHVybiBFRklfREVW SUNFX0VSUk9SOw0KPiArICAgICAgfQ0KPiArDQo+ICsgICAgICBUbHNDb25maWd1cmUgPSBUUlVF Ow0KPiArICAgIH0NCj4gKw0KPiAgICAgIFVybFBhcnNlciA9IE5VTEw7DQo+ICAgICAgU3RhdHVz ID0gSHR0cFBhcnNlVXJsIChVcmwsIChVSU5UMzIpIEFzY2lpU3RyTGVuIChVcmwpLCBGQUxTRSwg JlVybFBhcnNlcik7DQo+ICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiAgICAgICAg Z290byBFcnJvcjE7DQo+ICAgICAgfQ0KPiBAQCAtMzU3LDExICszODUsMTUgQEAgRWZpSHR0cFJl cXVlc3QgKA0KPiAgICAgICBnb3RvIEVycm9yMTsNCj4gICAgICB9DQo+IA0KPiAgICAgIFN0YXR1 cyA9IEh0dHBVcmxHZXRQb3J0IChVcmwsIFVybFBhcnNlciwgJlJlbW90ZVBvcnQpOw0KPiAgICAg IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gLSAgICAgIFJlbW90ZVBvcnQgPSBIVFRQX0RF RkFVTFRfUE9SVDsNCj4gKyAgICAgIGlmIChIdHRwSW5zdGFuY2UtPlVzZUh0dHBzKSB7DQo+ICsg ICAgICAgIFJlbW90ZVBvcnQgPSBIVFRQU19ERUZBVUxUX1BPUlQ7DQo+ICsgICAgICB9IGVsc2Ug ew0KPiArICAgICAgICBSZW1vdGVQb3J0ID0gSFRUUF9ERUZBVUxUX1BPUlQ7DQo+ICsgICAgICB9 DQo+ICAgICAgfQ0KPiAgICAgIC8vDQo+ICAgICAgLy8gSWYgQ29uZmlndXJlIGlzIFRSVUUsIGl0 IGluZGljYXRlcyB0aGUgZmlyc3QgdGltZSB0byBjYWxsIFJlcXVlc3QoKTsNCj4gICAgICAvLyBJ ZiBSZUNvbmZpZ3VyZSBpcyBUUlVFLCBpdCBpbmRpY2F0ZXMgdGhlIHJlcXVlc3QgVVJMIGlzIG5v dCBzYW1lDQo+ICAgICAgLy8gd2l0aCB0aGUgcHJldmlvdXMgY2FsbCB0byBSZXF1ZXN0KCk7DQo+ IEBAIC0zNzQsMTMgKzQwNiwxNyBAQCBFZmlIdHRwUmVxdWVzdCAoDQo+ICAgICAgICAvLyBSZXF1 ZXN0KCkgaXMgY2FsbGVkIHRoZSBmaXJzdCB0aW1lLg0KPiAgICAgICAgLy8NCj4gICAgICAgIFJl Q29uZmlndXJlID0gRkFMU0U7DQo+ICAgICAgfSBlbHNlIHsNCj4gICAgICAgIGlmICgoSHR0cElu c3RhbmNlLT5SZW1vdGVQb3J0ID09IFJlbW90ZVBvcnQpICYmDQo+IC0gICAgICAgIChBc2NpaVN0 ckNtcCAoSHR0cEluc3RhbmNlLT5SZW1vdGVIb3N0LCBIb3N0TmFtZSkgPT0gMCkpIHsNCj4gKyAg ICAgICAgICAoQXNjaWlTdHJDbXAgKEh0dHBJbnN0YW5jZS0+UmVtb3RlSG9zdCwgSG9zdE5hbWUp ID09IDApICYmDQo+ICsgICAgICAgICAgKCFIdHRwSW5zdGFuY2UtPlVzZUh0dHBzIHx8IChIdHRw SW5zdGFuY2UtPlVzZUh0dHBzICYmDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAhVGxzQ29uZmlndXJlICYmDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBIdHRwSW5zdGFuY2UtPlRsc1Nlc3Npb25TdGF0ZSA9PQ0KPiBFZmlUbHNTZXNz aW9uRGF0YVRyYW5zZmVycmluZykpKSB7DQo+ICAgICAgICAgIC8vDQo+ICAgICAgICAgIC8vIEhv c3QgTmFtZSBhbmQgcG9ydCBudW1iZXIgb2YgdGhlIHJlcXVlc3QgVVJMIGFyZSB0aGUgc2FtZSB3 aXRoDQo+IHByZXZpb3VzIGNhbGwgdG8gUmVxdWVzdCgpLg0KPiArICAgICAgICAvLyBJZiBIdHRw cyBwcm90b2NvbCB1c2VkLCB0aGUgY29ycmVzcG9uZGluZyBTZXNzaW9uU3RhdGUgaXMNCj4gRWZp VGxzU2Vzc2lvbkRhdGFUcmFuc2ZlcnJpbmcuDQo+ICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIg cHJldmlvdXMgVENQIHBhY2tldCBzZW50IG91dC4NCj4gICAgICAgICAgLy8NCj4gDQo+ICAgICAg ICAgIGlmIChFRklfRVJST1IgKE5ldE1hcEl0ZXJhdGUgKCZIdHRwSW5zdGFuY2UtPlR4VG9rZW5z LA0KPiBIdHRwVGNwTm90UmVhZHksIE5VTEwpKSkgew0KPiAgICAgICAgICAgIC8vDQo+IEBAIC00 ODAsMTAgKzUxNiwyMCBAQCBFZmlIdHRwUmVxdWVzdCAoDQo+ICAgICAgaWYgKCFIdHRwSW5zdGFu Y2UtPkxvY2FsQWRkcmVzc0lzSVB2Nikgew0KPiAgICAgICAgQVNTRVJUIChIdHRwSW5zdGFuY2Ut PlRjcDQgIT0gTlVMTCk7DQo+ICAgICAgfSBlbHNlIHsNCj4gICAgICAgIEFTU0VSVCAoSHR0cElu c3RhbmNlLT5UY3A2ICE9IE5VTEwpOw0KPiAgICAgIH0NCj4gKw0KPiArICAgIGlmIChIdHRwSW5z dGFuY2UtPlVzZUh0dHBzICYmICFUbHNDb25maWd1cmUpIHsNCj4gKyAgICAgIFN0YXR1cyA9IFRs c0Nsb3NlU2Vzc2lvbiAoSHR0cEluc3RhbmNlKTsNCj4gKyAgICAgIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCj4gKyAgICAgICAgZ290byBFcnJvcjE7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAg ICAgIFRsc0Nsb3NlVHhSeEV2ZW50IChIdHRwSW5zdGFuY2UpOw0KPiArICAgIH0NCj4gKw0KPiAg ICAgIEh0dHBDbG9zZUNvbm5lY3Rpb24gKEh0dHBJbnN0YW5jZSk7DQo+ICAgICAgRWZpSHR0cENh bmNlbCAoVGhpcywgTlVMTCk7DQo+ICAgIH0NCj4gDQo+ICAgIC8vDQo+IEBAIC00OTgsMTcgKzU0 NCwyMiBAQCBFZmlIdHRwUmVxdWVzdCAoDQo+ICAgIFdyYXAtPkh0dHBUb2tlbiAgICAgID0gVG9r ZW47DQo+ICAgIFdyYXAtPkh0dHBJbnN0YW5jZSAgID0gSHR0cEluc3RhbmNlOw0KPiAgICBpZiAo UmVxdWVzdCAhPSBOVUxMKSB7DQo+ICAgICAgV3JhcC0+VGNwV3JhcC5NZXRob2QgPSBSZXF1ZXN0 LT5NZXRob2Q7DQo+ICAgIH0NCj4gLQ0KPiAtICBTdGF0dXMgPSBIdHRwSW5pdFRjcCAoSHR0cElu c3RhbmNlLCBXcmFwLCBDb25maWd1cmUpOw0KPiArDQo+ICsgIFN0YXR1cyA9IEh0dHBJbml0U2Vz c2lvbiAoDQo+ICsgICAgICAgICAgICAgSHR0cEluc3RhbmNlLA0KPiArICAgICAgICAgICAgIFdy YXAsDQo+ICsgICAgICAgICAgICAgQ29uZmlndXJlIHx8IFJlQ29uZmlndXJlLA0KPiArICAgICAg ICAgICAgIFRsc0NvbmZpZ3VyZQ0KPiArICAgICAgICAgICAgICk7DQo+ICAgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gICAgICBnb3RvIEVycm9yMjsNCj4gLSAgfQ0KPiArICB9DQo+IA0K PiAtICBpZiAoIUNvbmZpZ3VyZSkgew0KPiArICBpZiAoIUNvbmZpZ3VyZSAmJiAhUmVDb25maWd1 cmUgJiYgIVRsc0NvbmZpZ3VyZSkgew0KPiAgICAgIC8vDQo+ICAgICAgLy8gRm9yIHRoZSBuZXcg SFRUUCB0b2tlbiwgY3JlYXRlIFRYIFRDUCB0b2tlbiBldmVudHMuDQo+ICAgICAgLy8NCj4gICAg ICBTdGF0dXMgPSBIdHRwQ3JlYXRlVGNwVHhFdmVudCAoV3JhcCk7DQo+ICAgICAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiBAQCAtNTkxLDEzICs2NDIsMTggQEAgRXJyb3I0Og0KPiAgICBp ZiAoUmVxdWVzdE1zZyAhPSBOVUxMKSB7DQo+ICAgICAgRnJlZVBvb2wgKFJlcXVlc3RNc2cpOw0K PiAgICB9DQo+IA0KPiAgRXJyb3IzOg0KPiAtICBIdHRwQ2xvc2VDb25uZWN0aW9uIChIdHRwSW5z dGFuY2UpOw0KPiArICBpZiAoSHR0cEluc3RhbmNlLT5Vc2VIdHRwcykgew0KPiArICAgIFRsc0Ns b3NlU2Vzc2lvbiAoSHR0cEluc3RhbmNlKTsNCj4gKyAgICBUbHNDbG9zZVR4UnhFdmVudCAoSHR0 cEluc3RhbmNlKTsNCj4gKyAgfQ0KPiANCj4gIEVycm9yMjoNCj4gKyAgSHR0cENsb3NlQ29ubmVj dGlvbiAoSHR0cEluc3RhbmNlKTsNCj4gKw0KPiAgICBIdHRwQ2xvc2VUY3BDb25uQ2xvc2VFdmVu dCAoSHR0cEluc3RhbmNlKTsNCj4gICAgaWYgKE5VTEwgIT0gV3JhcC0+VGNwV3JhcC5UeDRUb2tl bi5Db21wbGV0aW9uVG9rZW4uRXZlbnQpIHsNCj4gICAgICBnQlMtPkNsb3NlRXZlbnQgKFdyYXAt PlRjcFdyYXAuVHg0VG9rZW4uQ29tcGxldGlvblRva2VuLkV2ZW50KTsNCj4gICAgICBXcmFwLT5U Y3BXcmFwLlR4NFRva2VuLkNvbXBsZXRpb25Ub2tlbi5FdmVudCA9IE5VTEw7DQo+ICAgIH0NCj4g QEAgLTcyOSwyNiArNzg1LDM0IEBAIEh0dHBDYW5jZWwgKA0KPiAgICAgIH0gZWxzZSB7DQo+ICAg ICAgICByZXR1cm4gU3RhdHVzOw0KPiAgICAgIH0NCj4gICAgfQ0KPiANCj4gLSAgLy8NCj4gLSAg Ly8gVGhlbiBjaGVjayB0aGUgdG9rZW5zIHF1ZXVlZCBieSBFZmlIdHRwUmVzcG9uc2UoKS4NCj4g LSAgLy8NCj4gLSAgU3RhdHVzID0gTmV0TWFwSXRlcmF0ZSAoJkh0dHBJbnN0YW5jZS0+UnhUb2tl bnMsIEh0dHBDYW5jZWxUb2tlbnMsDQo+IFRva2VuKTsNCj4gLSAgaWYgKEVGSV9FUlJPUiAoU3Rh dHVzKSkgew0KPiAtICAgIGlmIChUb2tlbiAhPSBOVUxMKSB7DQo+IC0gICAgICBpZiAoU3RhdHVz ID09IEVGSV9BQk9SVEVEKSB7DQo+IC0gICAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gKyAg aWYgKCFIdHRwSW5zdGFuY2UtPlVzZUh0dHBzKSB7DQo+ICsgICAgLy8NCj4gKyAgICAvLyBUaGVu IGNoZWNrIHRoZSB0b2tlbnMgcXVldWVkIGJ5IEVmaUh0dHBSZXNwb25zZSgpLCBleGNlcHQgZm9y IEh0dHBzLg0KPiArICAgIC8vDQo+ICsgICAgU3RhdHVzID0gTmV0TWFwSXRlcmF0ZSAoJkh0dHBJ bnN0YW5jZS0+UnhUb2tlbnMsIEh0dHBDYW5jZWxUb2tlbnMsDQo+IFRva2VuKTsNCj4gKyAgICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBpZiAoVG9rZW4gIT0gTlVMTCkgew0K PiArICAgICAgICBpZiAoU3RhdHVzID09IEVGSV9BQk9SVEVEKSB7DQo+ICsgICAgICAgICAgcmV0 dXJuIEVGSV9TVUNDRVNTOw0KPiArICAgICAgICB9IGVsc2Ugew0KPiArICAgICAgICAgIHJldHVy biBFRklfTk9UX0ZPVU5EOw0KPiArICAgICAgICB9DQo+ICAgICAgICB9IGVsc2Ugew0KPiAtICAg ICAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4gKyAgICAgICAgcmV0dXJuIFN0YXR1czsNCj4g ICAgICAgIH0NCj4gKyAgICB9DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgaWYgKCFIdHRwSW5zdGFu Y2UtPkxvY2FsQWRkcmVzc0lzSVB2Nikgew0KPiArICAgICAgSHR0cEluc3RhbmNlLT5UY3A0LT5D YW5jZWwgKEh0dHBJbnN0YW5jZS0+VGNwNCwgJkh0dHBJbnN0YW5jZS0NCj4gPlRjcDRUbHNSeFRv a2VuLkNvbXBsZXRpb25Ub2tlbik7DQo+ICAgICAgfSBlbHNlIHsNCj4gLSAgICAgIHJldHVybiBT dGF0dXM7DQo+ICsgICAgICBIdHRwSW5zdGFuY2UtPlRjcDYtPkNhbmNlbCAoSHR0cEluc3RhbmNl LT5UY3A2LCAmSHR0cEluc3RhbmNlLQ0KPiA+VGNwNlRsc1J4VG9rZW4uQ29tcGxldGlvblRva2Vu KTsNCj4gICAgICB9DQo+ICAgIH0NCj4gLQ0KPiArDQo+ICAgIHJldHVybiBFRklfU1VDQ0VTUzsN Cj4gIH0NCj4gDQo+IA0KPiAgLyoqDQo+IEBAIC04ODAsMTAgKzk0NCwxMSBAQCBIdHRwUmVzcG9u c2VXb3JrZXIgKA0KPiAgICBIVFRQX1BST1RPQ09MICAgICAgICAgICAgICAgICAqSHR0cEluc3Rh bmNlOw0KPiAgICBFRklfSFRUUF9UT0tFTiAgICAgICAgICAgICAgICAqVG9rZW47DQo+ICAgIE5F VF9NQVBfSVRFTSAgICAgICAgICAgICAgICAgICpJdGVtOw0KPiAgICBIVFRQX1RPS0VOX1dSQVAg ICAgICAgICAgICAgICAqVmFsdWVJbkl0ZW07DQo+ICAgIFVJTlROICAgICAgICAgICAgICAgICAg ICAgICAgIEhkckxlbjsNCj4gKyAgTkVUX0ZSQUdNRU5UICAgICAgICAgICAgICAgICAgRnJhZ21l bnQ7DQo+IA0KPiAgICBpZiAoV3JhcCA9PSBOVUxMIHx8IFdyYXAtPkh0dHBJbnN0YW5jZSA9PSBO VUxMKSB7DQo+ICAgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gICAgfQ0KPiAN Cj4gQEAgLTg5NywyMSArOTYyLDE1IEBAIEh0dHBSZXNwb25zZVdvcmtlciAoDQo+ICAgIEh0dHBI ZWFkZXJzICAgICAgICAgICAgICAgPSBOVUxMOw0KPiAgICBTaXplb2ZIZWFkZXJzICAgICAgICAg ICAgID0gMDsNCj4gICAgQnVmZmVyU2l6ZSAgICAgICAgICAgICAgICA9IDA7DQo+ICAgIEVuZG9m SGVhZGVyICAgICAgICAgICAgICAgPSBOVUxMOw0KPiAgICBWYWx1ZUluSXRlbSAgICAgICAgICAg ICAgID0gTlVMTDsNCj4gKyAgRnJhZ21lbnQuTGVuICAgICAgICAgICAgICA9IDA7DQo+ICsgIEZy YWdtZW50LkJ1bGsgICAgICAgICAgICAgPSBOVUxMOw0KPiANCj4gICAgaWYgKEh0dHBNc2ctPkRh dGEuUmVzcG9uc2UgIT0gTlVMTCkgew0KPiAgICAgIC8vDQo+IC0gICAgLy8gTmVlZCByZWNlaXZl IHRoZSBIVFRQIGhlYWRlcnMsIHByZXBhcmUgYnVmZmVyLg0KPiAtICAgIC8vDQo+IC0gICAgU3Rh dHVzID0gSHR0cENyZWF0ZVRjcFJ4RXZlbnRGb3JIZWFkZXIgKEh0dHBJbnN0YW5jZSk7DQo+IC0g ICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiAtICAgICAgZ290byBFcnJvcjsNCj4gLSAg ICB9DQo+IC0NCj4gLSAgICAvLw0KPiAgICAgIC8vIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSBjYWNo ZWQgaGVhZGVyIGZyb20gcHJldmlvdXMgY2FsbC4NCj4gICAgICAvLw0KPiAgICAgIGlmICgoSHR0 cEluc3RhbmNlLT5DYWNoZUJvZHkgIT0gTlVMTCkgJiYgKEh0dHBJbnN0YW5jZS0+TmV4dE1zZyAh PQ0KPiBOVUxMKSkgew0KPiAgICAgICAgLy8NCj4gICAgICAgIC8vIFRoZSBkYXRhIGlzIHN0b3Jl ZCBhdCBbTmV4dE1zZywgQ2FjaGVCb2R5ICsgQ2FjaGVMZW5dLg0KPiBAQCAtMTE5OCwxMyArMTI1 NywxMjAgQEAgSHR0cFJlc3BvbnNlV29ya2VyICgNCj4gICAgQVNTRVJUIChIdHRwSW5zdGFuY2Ut Pk1zZ1BhcnNlciAhPSBOVUxMKTsNCj4gDQo+ICAgIC8vDQo+ICAgIC8vIFdlIHN0aWxsIG5lZWQg cmVjZWl2ZSBtb3JlIGRhdGEgd2hlbiB0aGVyZSBpcyBubyBjYWNoZSBkYXRhIGFuZA0KPiBNc2dQ YXJzZXIgaXMgbm90IE5VTEw7DQo+ICAgIC8vDQo+IC0gIFN0YXR1cyA9IEh0dHBUY3BSZWNlaXZl Qm9keSAoV3JhcCwgSHR0cE1zZyk7DQo+IC0gIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4g LSAgICBnb3RvIEVycm9yMjsNCj4gKyAgaWYgKCFIdHRwSW5zdGFuY2UtPlVzZUh0dHBzKSB7DQo+ ICsgICAgU3RhdHVzID0gSHR0cFRjcFJlY2VpdmVCb2R5IChXcmFwLCBIdHRwTXNnKTsNCj4gKw0K PiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIGdvdG8gRXJyb3IyOw0K PiArICAgIH0NCj4gKw0KPiArICB9IGVsc2Ugew0KPiArICAgIGlmIChIdHRwSW5zdGFuY2UtPlRp bWVvdXRFdmVudCA9PSBOVUxMKSB7DQo+ICsgICAgICAvLw0KPiArICAgICAgLy8gQ3JlYXRlIFRp bWVvdXRFdmVudCBmb3IgcmVzcG9uc2UNCj4gKyAgICAgIC8vDQo+ICsgICAgICBTdGF0dXMgPSBn QlMtPkNyZWF0ZUV2ZW50ICgNCj4gKyAgICAgICAgICAgICAgICAgICAgICBFVlRfVElNRVIsDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgVFBMX0NBTExCQUNLLA0KPiArICAgICAgICAgICAgICAg ICAgICAgIE5VTEwsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgTlVMTCwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAmSHR0cEluc3RhbmNlLT5UaW1lb3V0RXZlbnQNCj4gKyAgICAgICAgICAg ICAgICAgICAgICApOw0KPiArICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAg ICAgICBnb3RvIEVycm9yMjsNCj4gKyAgICAgIH0NCj4gKyAgICB9DQo+ICsNCj4gKyAgICAvLw0K PiArICAgIC8vIFN0YXJ0IHRoZSB0aW1lciwgYW5kIHdhaXQgVGltZW91dCBzZWNvbmRzIHRvIHJl Y2VpdmUgdGhlIGJvZHkgcGFja2V0Lg0KPiArICAgIC8vDQo+ICsgICAgU3RhdHVzID0gZ0JTLT5T ZXRUaW1lciAoSHR0cEluc3RhbmNlLT5UaW1lb3V0RXZlbnQsIFRpbWVyUmVsYXRpdmUsDQo+IEhU VFBfUkVTUE9OU0VfVElNRU9VVCAqIFRJQ0tTX1BFUl9TRUNPTkQpOw0KPiArICAgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIGdvdG8gRXJyb3IyOw0KPiArICAgIH0NCj4gKw0K PiArICAgIFN0YXR1cyA9IEh0dHBzUmVjZWl2ZSAoSHR0cEluc3RhbmNlLCAmRnJhZ21lbnQsIEh0 dHBJbnN0YW5jZS0NCj4gPlRpbWVvdXRFdmVudCk7DQo+ICsNCj4gKyAgICBnQlMtPlNldFRpbWVy IChIdHRwSW5zdGFuY2UtPlRpbWVvdXRFdmVudCwgVGltZXJDYW5jZWwsIDApOw0KPiArDQo+ICsg ICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgZ290byBFcnJvcjI7DQo+ICsg ICAgfQ0KPiArDQo+ICsgICAgLy8NCj4gKyAgICAvLyBDaGVjayB3aGV0aGVyIHdlIHJlY2VpdmUg YSBjb21wbGV0ZSBIVFRQIG1lc3NhZ2UuDQo+ICsgICAgLy8NCj4gKyAgICBTdGF0dXMgPSBIdHRw UGFyc2VNZXNzYWdlQm9keSAoDQo+ICsgICAgICAgICAgICAgICBIdHRwSW5zdGFuY2UtPk1zZ1Bh cnNlciwNCj4gKyAgICAgICAgICAgICAgIChVSU5UTikgRnJhZ21lbnQuTGVuLA0KPiArICAgICAg ICAgICAgICAgKENIQVI4ICopIEZyYWdtZW50LkJ1bGsNCj4gKyAgICAgICAgICAgICAgICk7DQo+ ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgZ290byBFcnJvcjI7DQo+ ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKEh0dHBJc01lc3NhZ2VDb21wbGV0ZSAoSHR0cEluc3Rh bmNlLT5Nc2dQYXJzZXIpKSB7DQo+ICsgICAgICAvLw0KPiArICAgICAgLy8gRnJlZSB0aGUgTXNn UGFyc2Ugc2luY2Ugd2UgYWxyZWFkeSBoYXZlIGEgZnVsbCBIVFRQIG1lc3NhZ2UuDQo+ICsgICAg ICAvLw0KPiArICAgICAgSHR0cEZyZWVNc2dQYXJzZXIgKEh0dHBJbnN0YW5jZS0+TXNnUGFyc2Vy KTsNCj4gKyAgICAgIEh0dHBJbnN0YW5jZS0+TXNnUGFyc2VyID0gTlVMTDsNCj4gKyAgICB9DQo+ ICsNCj4gKyAgICAvLw0KPiArICAgIC8vIFdlIHJlY2VpdmUgcGFydCBvZiBoZWFkZXIgb2YgbmV4 dCBIVFRQIG1zZy4NCj4gKyAgICAvLw0KPiArICAgIGlmIChIdHRwSW5zdGFuY2UtPk5leHRNc2cg IT0gTlVMTCkgew0KPiArICAgICAgSHR0cE1zZy0+Qm9keUxlbmd0aCA9IE1JTiAoKFVJTlROKSAo SHR0cEluc3RhbmNlLT5OZXh0TXNnIC0NCj4gKENIQVI4ICopIEZyYWdtZW50LkJ1bGspLCBIdHRw TXNnLT5Cb2R5TGVuZ3RoKTsNCj4gKyAgICAgIENvcHlNZW0gKEh0dHBNc2ctPkJvZHksIEZyYWdt ZW50LkJ1bGssIEh0dHBNc2ctPkJvZHlMZW5ndGgpOw0KPiArDQo+ICsgICAgICBIdHRwSW5zdGFu Y2UtPkNhY2hlTGVuID0gRnJhZ21lbnQuTGVuIC0gSHR0cE1zZy0+Qm9keUxlbmd0aDsNCj4gKyAg ICAgIGlmIChIdHRwSW5zdGFuY2UtPkNhY2hlTGVuICE9IDApIHsNCj4gKyAgICAgICAgaWYgKEh0 dHBJbnN0YW5jZS0+Q2FjaGVCb2R5ICE9IE5VTEwpIHsNCj4gKyAgICAgICAgICBGcmVlUG9vbCAo SHR0cEluc3RhbmNlLT5DYWNoZUJvZHkpOw0KPiArICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAg SHR0cEluc3RhbmNlLT5DYWNoZUJvZHkgPSBBbGxvY2F0ZVplcm9Qb29sIChIdHRwSW5zdGFuY2Ut DQo+ID5DYWNoZUxlbik7DQo+ICsgICAgICAgIGlmIChIdHRwSW5zdGFuY2UtPkNhY2hlQm9keSA9 PSBOVUxMKSB7DQo+ICsgICAgICAgICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ ICsgICAgICAgICAgZ290byBFcnJvcjI7DQo+ICsgICAgICAgIH0NCj4gKw0KPiArICAgICAgICBD b3B5TWVtIChIdHRwSW5zdGFuY2UtPkNhY2hlQm9keSwgRnJhZ21lbnQuQnVsayArIEh0dHBNc2ct DQo+ID5Cb2R5TGVuZ3RoLCBIdHRwSW5zdGFuY2UtPkNhY2hlTGVuKTsNCj4gKyAgICAgICAgSHR0 cEluc3RhbmNlLT5DYWNoZU9mZnNldCA9IDA7DQo+ICsNCj4gKyAgICAgICAgSHR0cEluc3RhbmNl LT5OZXh0TXNnID0gSHR0cEluc3RhbmNlLT5DYWNoZUJvZHkgKyAoVUlOVE4pDQo+IChIdHRwSW5z dGFuY2UtPk5leHRNc2cgLSAoQ0hBUjggKikgKEZyYWdtZW50LkJ1bGsgKyBIdHRwTXNnLQ0KPiA+ Qm9keUxlbmd0aCkpOw0KPiArICAgICAgfQ0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICBIdHRw TXNnLT5Cb2R5TGVuZ3RoID0gTUlOIChGcmFnbWVudC5MZW4sIChVSU5UMzIpIEh0dHBNc2ctDQo+ ID5Cb2R5TGVuZ3RoKTsNCj4gKyAgICAgIENvcHlNZW0gKEh0dHBNc2ctPkJvZHksIEZyYWdtZW50 LkJ1bGssIEh0dHBNc2ctPkJvZHlMZW5ndGgpOw0KPiArICAgICAgSHR0cEluc3RhbmNlLT5DYWNo ZUxlbiA9IEZyYWdtZW50LkxlbiAtIEh0dHBNc2ctPkJvZHlMZW5ndGg7DQo+ICsgICAgICBpZiAo SHR0cEluc3RhbmNlLT5DYWNoZUxlbiAhPSAwKSB7DQo+ICsgICAgICAgIGlmIChIdHRwSW5zdGFu Y2UtPkNhY2hlQm9keSAhPSBOVUxMKSB7DQo+ICsgICAgICAgICAgRnJlZVBvb2wgKEh0dHBJbnN0 YW5jZS0+Q2FjaGVCb2R5KTsNCj4gKyAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgIEh0dHBJbnN0 YW5jZS0+Q2FjaGVCb2R5ID0gQWxsb2NhdGVaZXJvUG9vbCAoSHR0cEluc3RhbmNlLQ0KPiA+Q2Fj aGVMZW4pOw0KPiArICAgICAgICBpZiAoSHR0cEluc3RhbmNlLT5DYWNoZUJvZHkgPT0gTlVMTCkg ew0KPiArICAgICAgICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICAgICAg ICAgIGdvdG8gRXJyb3IyOw0KPiArICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgQ29weU1lbSAo SHR0cEluc3RhbmNlLT5DYWNoZUJvZHksIEZyYWdtZW50LkJ1bGsgKyBIdHRwTXNnLQ0KPiA+Qm9k eUxlbmd0aCwgSHR0cEluc3RhbmNlLT5DYWNoZUxlbik7DQo+ICsgICAgICAgIEh0dHBJbnN0YW5j ZS0+Q2FjaGVPZmZzZXQgPSAwOw0KPiArICAgICAgfQ0KPiArICAgIH0NCj4gKw0KPiArICAgIGlm IChGcmFnbWVudC5CdWxrICE9IE5VTEwpIHsNCj4gKyAgICAgIEZyZWVQb29sIChGcmFnbWVudC5C dWxrKTsNCj4gKyAgICAgIEZyYWdtZW50LkJ1bGsgPSBOVUxMOw0KPiArICAgIH0NCj4gKw0KPiAr ICAgIGdvdG8gRXhpdDsNCj4gICAgfQ0KPiANCj4gICAgcmV0dXJuIFN0YXR1czsNCj4gDQo+ICBF eGl0Og0KPiBAQCAtMTIzMiwxOSArMTM5OCwzMCBAQCBFcnJvcjI6DQo+ICBFcnJvcjoNCj4gICAg SXRlbSA9IE5ldE1hcEZpbmRLZXkgKCZXcmFwLT5IdHRwSW5zdGFuY2UtPlJ4VG9rZW5zLCBXcmFw LQ0KPiA+SHR0cFRva2VuKTsNCj4gICAgaWYgKEl0ZW0gIT0gTlVMTCkgew0KPiAgICAgIE5ldE1h cFJlbW92ZUl0ZW0gKCZXcmFwLT5IdHRwSW5zdGFuY2UtPlJ4VG9rZW5zLCBJdGVtLCBOVUxMKTsN Cj4gICAgfQ0KPiAtDQo+IC0gIEh0dHBUY3BUb2tlbkNsZWFudXAgKFdyYXApOw0KPiArDQo+ICsg IGlmICghSHR0cEluc3RhbmNlLT5Vc2VIdHRwcykgew0KPiArICAgIEh0dHBUY3BUb2tlbkNsZWFu dXAgKFdyYXApOw0KPiArICB9IGVsc2Ugew0KPiArICAgIEZyZWVQb29sIChXcmFwKTsNCj4gKyAg fQ0KPiANCj4gICAgaWYgKEh0dHBIZWFkZXJzICE9IE5VTEwpIHsNCj4gICAgICBGcmVlUG9vbCAo SHR0cEhlYWRlcnMpOw0KPiArICAgIEh0dHBIZWFkZXJzID0gTlVMTDsNCj4gKyAgfQ0KPiArDQo+ ICsgIGlmIChGcmFnbWVudC5CdWxrICE9IE5VTEwpIHsNCj4gKyAgICBGcmVlUG9vbCAoRnJhZ21l bnQuQnVsayk7DQo+ICsgICAgRnJhZ21lbnQuQnVsayA9IE5VTEw7DQo+ICAgIH0NCj4gDQo+ICAg IGlmIChIdHRwTXNnLT5IZWFkZXJzICE9IE5VTEwpIHsNCj4gICAgICBGcmVlUG9vbCAoSHR0cE1z Zy0+SGVhZGVycyk7DQo+ICsgICAgSHR0cE1zZy0+SGVhZGVycyA9IE5VTEw7DQo+ICAgIH0NCj4g DQo+ICAgIGlmIChIdHRwSW5zdGFuY2UtPkNhY2hlQm9keSAhPSBOVUxMKSB7DQo+ICAgICAgRnJl ZVBvb2wgKEh0dHBJbnN0YW5jZS0+Q2FjaGVCb2R5KTsNCj4gICAgICBIdHRwSW5zdGFuY2UtPkNh Y2hlQm9keSA9IE5VTEw7DQo+IEBAIC0xMzUxLDEzICsxNTI4LDIwIEBAIEVmaUh0dHBSZXNwb25z ZSAoDQo+ICAgIH0NCj4gDQo+ICAgIFdyYXAtPkh0dHBJbnN0YW5jZSA9IEh0dHBJbnN0YW5jZTsN Cj4gICAgV3JhcC0+SHR0cFRva2VuICAgID0gVG9rZW47DQo+IA0KPiAtICBTdGF0dXMgPSBIdHRw Q3JlYXRlVGNwUnhFdmVudCAoV3JhcCk7DQo+IC0gIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4gLSAgICBnb3RvIEVycm9yOw0KPiArICAvLw0KPiArICAvLyBOb3RlczogRm9yIEh0dHBzLCBy ZWNlaXZlIHRva2VuIHdyYXBwZWQgaW4gSFRUUF9UT0tFTl9XUkFQIGlzIG5vdA0KPiB1c2VkIHRv DQo+ICsgIC8vIHJlY2VpdmUgdGhlIGh0dHBzIHJlc3BvbnNlLiBBIHNwZWNpYWwgVGxzUnhUb2tl biBpcyB1c2VkIGZvciByZWNlaXZpbmcNCj4gVExTDQo+ICsgIC8vIHJlbGF0ZWQgbWVzc2FnZXMu IEl0IHNob3VsZCBiZSBhIGJsb2NraW5nIHJlc3BvbnNlLg0KPiArICAvLw0KPiArICBpZiAoIUh0 dHBJbnN0YW5jZS0+VXNlSHR0cHMpIHsNCj4gKyAgICBTdGF0dXMgPSBIdHRwQ3JlYXRlVGNwUnhF dmVudCAoV3JhcCk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAg Z290byBFcnJvcjsNCj4gKyAgICB9DQo+ICAgIH0NCj4gDQo+ICAgIFN0YXR1cyA9IE5ldE1hcElu c2VydFRhaWwgKCZIdHRwSW5zdGFuY2UtPlJ4VG9rZW5zLCBUb2tlbiwgV3JhcCk7DQo+ICAgIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gICAgICBnb3RvIEVycm9yOw0KPiBkaWZmIC0tZ2l0 IGEvTmV0d29ya1BrZy9IdHRwRHhlL0h0dHBQcm90by5jDQo+IGIvTmV0d29ya1BrZy9IdHRwRHhl L0h0dHBQcm90by5jDQo+IGluZGV4IDYzNzNmMDcuLjc3YTNlZTMgMTAwNjQ0DQo+IC0tLSBhL05l dHdvcmtQa2cvSHR0cER4ZS9IdHRwUHJvdG8uYw0KPiArKysgYi9OZXR3b3JrUGtnL0h0dHBEeGUv SHR0cFByb3RvLmMNCj4gQEAgLTkyNiwxMCArOTI2LDI2IEBAIEh0dHBDbGVhblByb3RvY29sICgN Cj4gICAgICAgICAgICAgSHR0cEluc3RhbmNlLT5TZXJ2aWNlLT5JbWFnZUhhbmRsZSwNCj4gICAg ICAgICAgICAgSHR0cEluc3RhbmNlLT5IYW5kbGUNCj4gICAgICAgICAgICAgKTsNCj4gICAgfQ0K PiANCj4gKyAgaWYgKEh0dHBJbnN0YW5jZS0+VGxzQ29uZmlnRGF0YS5DQUNlcnQgIT0gTlVMTCkg ew0KPiArICAgIEZyZWVQb29sIChIdHRwSW5zdGFuY2UtPlRsc0NvbmZpZ0RhdGEuQ0FDZXJ0KTsN Cj4gKyAgICBIdHRwSW5zdGFuY2UtPlRsc0NvbmZpZ0RhdGEuQ0FDZXJ0ID0gTlVMTDsNCj4gKyAg fQ0KPiArDQo+ICsgIGlmIChIdHRwSW5zdGFuY2UtPlRsc0NvbmZpZ0RhdGEuQ2xpZW50Q2VydCAh PSBOVUxMKSB7DQo+ICsgICAgRnJlZVBvb2wgKEh0dHBJbnN0YW5jZS0+VGxzQ29uZmlnRGF0YS5D bGllbnRDZXJ0KTsNCj4gKyAgICBIdHRwSW5zdGFuY2UtPlRsc0NvbmZpZ0RhdGEuQ2xpZW50Q2Vy dCA9IE5VTEw7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoSHR0cEluc3RhbmNlLT5UbHNDb25maWdE YXRhLkNsaWVudFByaXZhdGVLZXkgIT0gTlVMTCkgew0KPiArICAgIEZyZWVQb29sIChIdHRwSW5z dGFuY2UtPlRsc0NvbmZpZ0RhdGEuQ2xpZW50UHJpdmF0ZUtleSk7DQo+ICsgICAgSHR0cEluc3Rh bmNlLT5UbHNDb25maWdEYXRhLkNsaWVudFByaXZhdGVLZXkgPSBOVUxMOw0KPiArICB9DQo+ICsN Cj4gKyAgVGxzQ2xvc2VUeFJ4RXZlbnQgKEh0dHBJbnN0YW5jZSk7DQo+ICB9DQo+IA0KPiAgLyoq DQo+ICAgIEVzdGFibGlzaCBUQ1AgY29ubmVjdGlvbiB3aXRoIEhUVFAgc2VydmVyLg0KPiANCj4g QEAgLTExODMsMTEgKzExOTksMTIgQEAgSHR0cENvbmZpZ3VyZVRjcDYgKA0KPiAgICByZXR1cm4g RUZJX1NVQ0NFU1M7DQo+IA0KPiAgfQ0KPiANCj4gIC8qKg0KPiAtICBDaGVjayBleGlzdGluZyBU Q1AgY29ubmVjdGlvbiwgaWYgaW4gZXJyb3Igc3RhdGUsIHJlY292ZXIgVENQNCBjb25uZWN0aW9u Lg0KPiArICBDaGVjayBleGlzdGluZyBUQ1AgY29ubmVjdGlvbiwgaWYgaW4gZXJyb3Igc3RhdGUs IHJlY292ZXIgVENQNCBjb25uZWN0aW9uLg0KPiBUaGVuLA0KPiArICBjb25uZWN0IG9uZSBUTFMg c2Vzc2lvbiBpZiByZXF1aXJlZC4NCj4gDQo+ICAgIEBwYXJhbVtpbl0gIEh0dHBJbnN0YW5jZSAg ICAgICBUaGUgSFRUUCBpbnN0YW5jZSBwcml2YXRlIGRhdGEuDQo+IA0KPiAgICBAcmV0dmFsIEVG SV9TVUNDRVNTICAgICAgICAgICAgVGhlIFRDUCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLg0K PiAgICBAcmV0dmFsIEVGSV9OT1RfUkVBRFkgICAgICAgICAgVENQNCBwcm90b2NvbCBjaGlsZCBp cyBub3QgY3JlYXRlZCBvcg0KPiBjb25maWd1cmVkLg0KPiBAQCAtMTIyNCwxNSArMTI0MSw2MiBA QCBIdHRwQ29ubmVjdFRjcDQgKA0KPiAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gICAgfSBl bHNlIGlmIChUY3A0U3RhdGUgPiBUY3A0U3RhdGVFc3RhYmxpc2hlZCApIHsNCj4gICAgICBIdHRw Q2xvc2VDb25uZWN0aW9uKEh0dHBJbnN0YW5jZSk7DQo+ICAgIH0NCj4gDQo+IC0gIHJldHVybiBI dHRwQ3JlYXRlQ29ubmVjdGlvbiAoSHR0cEluc3RhbmNlKTsNCj4gKyAgU3RhdHVzID0gSHR0cENy ZWF0ZUNvbm5lY3Rpb24gKEh0dHBJbnN0YW5jZSk7DQo+ICsgIGlmIChFRklfRVJST1IoU3RhdHVz KSl7DQo+ICsgICAgREVCVUcgKChFRklfRF9FUlJPUiwgIlRjcDQgQ29ubmVjdGlvbiBmYWlsIC0g JXhcbiIsIFN0YXR1cykpOw0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiAr ICAvLw0KPiArICAvLyBUbHMgc2Vzc2lvbiBjb25uZWN0aW9uLg0KPiArICAvLw0KPiArICBpZiAo SHR0cEluc3RhbmNlLT5Vc2VIdHRwcykgew0KPiArICAgIGlmIChIdHRwSW5zdGFuY2UtPlRpbWVv dXRFdmVudCA9PSBOVUxMKSB7DQo+ICsgICAgICAvLw0KPiArICAgICAgLy8gQ3JlYXRlIFRpbWVv dXRFdmVudCBmb3IgVExTIGNvbm5lY3Rpb24uDQo+ICsgICAgICAvLw0KPiArICAgICAgU3RhdHVz ID0gZ0JTLT5DcmVhdGVFdmVudCAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgRVZUX1RJTUVS LA0KPiArICAgICAgICAgICAgICAgICAgICAgIFRQTF9DQUxMQkFDSywNCj4gKyAgICAgICAgICAg ICAgICAgICAgICBOVUxMLA0KPiArICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgJkh0dHBJbnN0YW5jZS0+VGltZW91dEV2ZW50DQo+ICsgICAgICAg ICAgICAgICAgICAgICAgKTsNCj4gKyAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4g KyAgICAgICAgVGxzQ2xvc2VUeFJ4RXZlbnQgKEh0dHBJbnN0YW5jZSk7DQo+ICsgICAgICAgIHJl dHVybiBTdGF0dXM7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgLy8NCj4gKyAg ICAvLyBTdGFydCB0aGUgdGltZXIsIGFuZCB3YWl0IFRpbWVvdXQgc2Vjb25kcyBmb3IgY29ubmVj dGlvbi4NCj4gKyAgICAvLw0KPiArICAgIFN0YXR1cyA9IGdCUy0+U2V0VGltZXIgKEh0dHBJbnN0 YW5jZS0+VGltZW91dEV2ZW50LCBUaW1lclJlbGF0aXZlLA0KPiBIVFRQX0NPTk5FQ1RJT05fVElN RU9VVCAqIFRJQ0tTX1BFUl9TRUNPTkQpOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gKyAgICAgIFRsc0Nsb3NlVHhSeEV2ZW50IChIdHRwSW5zdGFuY2UpOw0KPiArICAgICAg cmV0dXJuIFN0YXR1czsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBTdGF0dXMgPSBUbHNDb25uZWN0 U2Vzc2lvbiAoSHR0cEluc3RhbmNlLCBIdHRwSW5zdGFuY2UtPlRpbWVvdXRFdmVudCk7DQo+ICsN Cj4gKyAgICBnQlMtPlNldFRpbWVyIChIdHRwSW5zdGFuY2UtPlRpbWVvdXRFdmVudCwgVGltZXJD YW5jZWwsIDApOw0KPiArDQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAg ICAgVGxzQ2xvc2VUeFJ4RXZlbnQgKEh0dHBJbnN0YW5jZSk7DQo+ICsgICAgICByZXR1cm4gU3Rh dHVzOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICB9DQo+ IA0KPiAgLyoqDQo+IC0gIENoZWNrIGV4aXN0aW5nIFRDUCBjb25uZWN0aW9uLCBpZiBpbiBlcnJv ciBzdGF0ZSwgcmVjb3ZlciBUQ1A2IGNvbm5lY3Rpb24uDQo+ICsgIENoZWNrIGV4aXN0aW5nIFRD UCBjb25uZWN0aW9uLCBpZiBpbiBlcnJvciBzdGF0ZSwgcmVjb3ZlciBUQ1A2IGNvbm5lY3Rpb24u DQo+IFRoZW4sDQo+ICsgIGNvbm5lY3Qgb25lIFRMUyBzZXNzaW9uIGlmIHJlcXVpcmVkLg0KPiAN Cj4gICAgQHBhcmFtW2luXSAgSHR0cEluc3RhbmNlICAgICAgIFRoZSBIVFRQIGluc3RhbmNlIHBy aXZhdGUgZGF0YS4NCj4gDQo+ICAgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUg VENQIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQuDQo+ICAgIEByZXR2YWwgRUZJX05PVF9SRUFE WSAgICAgICAgICBUQ1A2IHByb3RvY29sIGNoaWxkIGlzIG5vdCBjcmVhdGVkIG9yDQo+IGNvbmZp Z3VyZWQuDQo+IEBAIC0xMjY5LDM0ICsxMzMzLDkyIEBAIEh0dHBDb25uZWN0VGNwNiAoDQo+ICAg ICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiAgICB9IGVsc2UgaWYgKFRjcDZTdGF0ZSA+IFRjcDZT dGF0ZUVzdGFibGlzaGVkICkgew0KPiAgICAgIEh0dHBDbG9zZUNvbm5lY3Rpb24oSHR0cEluc3Rh bmNlKTsNCj4gICAgfQ0KPiANCj4gLSAgcmV0dXJuIEh0dHBDcmVhdGVDb25uZWN0aW9uIChIdHRw SW5zdGFuY2UpOw0KPiArICBTdGF0dXMgPSBIdHRwQ3JlYXRlQ29ubmVjdGlvbiAoSHR0cEluc3Rh bmNlKTsNCj4gKyAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKXsNCj4gKyAgICBERUJVRyAoKEVGSV9E X0VSUk9SLCAiVGNwNiBDb25uZWN0aW9uIGZhaWwgLSAleFxuIiwgU3RhdHVzKSk7DQo+ICsgICAg cmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIFRscyBzZXNzaW9u IGNvbm5lY3Rpb24uDQo+ICsgIC8vDQo+ICsgIGlmIChIdHRwSW5zdGFuY2UtPlVzZUh0dHBzKSB7 DQo+ICsgICAgaWYgKEh0dHBJbnN0YW5jZS0+VGltZW91dEV2ZW50ID09IE5VTEwpIHsNCj4gKyAg ICAgIC8vDQo+ICsgICAgICAvLyBDcmVhdGUgVGltZW91dEV2ZW50IGZvciBUTFMgY29ubmVjdGlv bi4NCj4gKyAgICAgIC8vDQo+ICsgICAgICBTdGF0dXMgPSBnQlMtPkNyZWF0ZUV2ZW50ICgNCj4g KyAgICAgICAgICAgICAgICAgICAgICBFVlRfVElNRVIsDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgVFBMX0NBTExCQUNLLA0KPiArICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgTlVMTCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAmSHR0cElu c3RhbmNlLT5UaW1lb3V0RXZlbnQNCj4gKyAgICAgICAgICAgICAgICAgICAgICApOw0KPiArICAg ICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgICBUbHNDbG9zZVR4UnhFdmVu dCAoSHR0cEluc3RhbmNlKTsNCj4gKyAgICAgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgICAgIH0N Cj4gKyAgICB9DQo+ICsNCj4gKyAgICAvLw0KPiArICAgIC8vIFN0YXJ0IHRoZSB0aW1lciwgYW5k IHdhaXQgVGltZW91dCBzZWNvbmRzIGZvciBjb25uZWN0aW9uLg0KPiArICAgIC8vDQo+ICsgICAg U3RhdHVzID0gZ0JTLT5TZXRUaW1lciAoSHR0cEluc3RhbmNlLT5UaW1lb3V0RXZlbnQsIFRpbWVy UmVsYXRpdmUsDQo+IEhUVFBfQ09OTkVDVElPTl9USU1FT1VUICogVElDS1NfUEVSX1NFQ09ORCk7 DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgVGxzQ2xvc2VUeFJ4 RXZlbnQgKEh0dHBJbnN0YW5jZSk7DQo+ICsgICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAgIH0N Cj4gKw0KPiArICAgIFN0YXR1cyA9IFRsc0Nvbm5lY3RTZXNzaW9uIChIdHRwSW5zdGFuY2UsIEh0 dHBJbnN0YW5jZS0+VGltZW91dEV2ZW50KTsNCj4gKw0KPiArICAgIGdCUy0+U2V0VGltZXIgKEh0 dHBJbnN0YW5jZS0+VGltZW91dEV2ZW50LCBUaW1lckNhbmNlbCwgMCk7DQo+ICsNCj4gKyAgICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBUbHNDbG9zZVR4UnhFdmVudCAoSHR0 cEluc3RhbmNlKTsNCj4gKyAgICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgfQ0KPiArICB9DQo+ ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gIH0NCj4gDQo+ICAvKioNCj4gLSAgSW5pdGlhbGl6 ZSBUQ1AgcmVsYXRlZCBkYXRhLg0KPiArICBJbml0aWFsaXplIEh0dHAgc2Vzc2lvbi4NCj4gDQo+ ICAgIEBwYXJhbVtpbl0gIEh0dHBJbnN0YW5jZSAgICAgICBUaGUgSFRUUCBpbnN0YW5jZSBwcml2 YXRlIGRhdGEuDQo+ICAgIEBwYXJhbVtpbl0gIFdyYXAgICAgICAgICAgICAgICBUaGUgSFRUUCB0 b2tlbidzIHdyYXAgZGF0YS4NCj4gLSAgQHBhcmFtW2luXSAgQ29uZmlndXJlICAgICAgICAgIFRo ZSBGbGFnIGluZGljYXRlcyB3aGV0aGVyIHRoZSBmaXJzdCB0aW1lIHRvDQo+IGluaXRpYWxpemUg VGNwLg0KPiArICBAcGFyYW1baW5dICBDb25maWd1cmUgICAgICAgICAgVGhlIEZsYWcgaW5kaWNh dGVzIHdoZXRoZXIgbmVlZCB0byBpbml0aWFsaXplDQo+IHNlc3Npb24uDQo+ICsgIEBwYXJhbVtp bl0gIFRsc0NvbmZpZ3VyZSAgICAgICBUaGUgRmxhZyBpbmRpY2F0ZXMgd2hldGhlciBpdCdzIHRo ZSBuZXcgVGxzDQo+IHNlc3Npb24uDQo+IA0KPiAtICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAg ICAgICAgVGhlIGluaXRpYWxpemF0aW9uIG9mIFRDUCBpbnN0YW5jZSBpcyBkb25lLg0KPiArICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIGluaXRpYWxpemF0aW9uIG9mIHNlc3Np b24gaXMgZG9uZS4NCj4gICAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICAgICAgIE90aGVyIGVy cm9yIGFzIGluZGljYXRlZC4NCj4gDQo+ICAqKi8NCj4gIEVGSV9TVEFUVVMNCj4gLUh0dHBJbml0 VGNwICgNCj4gK0h0dHBJbml0U2Vzc2lvbiAoDQo+ICAgIElOICBIVFRQX1BST1RPQ09MICAgICpI dHRwSW5zdGFuY2UsDQo+ICAgIElOICBIVFRQX1RPS0VOX1dSQVAgICpXcmFwLA0KPiAtICBJTiAg Qk9PTEVBTiAgICAgICAgICBDb25maWd1cmUNCj4gKyAgSU4gIEJPT0xFQU4gICAgICAgICAgQ29u ZmlndXJlLA0KPiArICBJTiAgQk9PTEVBTiAgICAgICAgICBUbHNDb25maWd1cmUNCj4gICAgKQ0K PiAgew0KPiAgICBFRklfU1RBVFVTICAgICAgICAgICBTdGF0dXM7DQo+ICAgIEFTU0VSVCAoSHR0 cEluc3RhbmNlICE9IE5VTEwpOw0KPiANCj4gKyAgLy8NCj4gKyAgLy8gQ29uZmlndXJlIFRscyBz ZXNzaW9uLg0KPiArICAvLw0KPiArICBpZiAoVGxzQ29uZmlndXJlKSB7DQo+ICsgICAgU3RhdHVz ID0gVGxzQ29uZmlndXJlU2Vzc2lvbiAoSHR0cEluc3RhbmNlKTsNCj4gKyAgICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAgIH0NCj4gKyAg fQ0KPiArDQo+ICAgIGlmICghSHR0cEluc3RhbmNlLT5Mb2NhbEFkZHJlc3NJc0lQdjYpIHsNCj4g ICAgICAvLw0KPiAgICAgIC8vIENvbmZpZ3VyZSBUQ1AgaW5zdGFuY2UuDQo+ICAgICAgLy8NCj4g ICAgICBpZiAoQ29uZmlndXJlKSB7DQo+IEBAIC0xMzM2LDExICsxNDU4LDExIEBAIEh0dHBJbml0 VGNwICgNCj4gICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiANCj4gIH0NCj4gDQo+ICAvKioNCj4g LSAgU2VuZCB0aGUgSFRUUCBtZXNzYWdlIHRocm91Z2ggVENQNCBvciBUQ1A2Lg0KPiArICBTZW5k IHRoZSBIVFRQIG9yIEhUVFBTIG1lc3NhZ2UgdGhyb3VnaCBUQ1A0IG9yIFRDUDYuDQo+IA0KPiAg ICBAcGFyYW1baW5dICBIdHRwSW5zdGFuY2UgICAgICAgVGhlIEhUVFAgaW5zdGFuY2UgcHJpdmF0 ZSBkYXRhLg0KPiAgICBAcGFyYW1baW5dICBXcmFwICAgICAgICAgICAgICAgVGhlIEhUVFAgdG9r ZW4ncyB3cmFwIGRhdGEuDQo+ICAgIEBwYXJhbVtpbl0gIFR4U3RyaW5nICAgICAgICAgICBCdWZm ZXIgY29udGFpbmluZyB0aGUgSFRUUCBtZXNzYWdlIHN0cmluZy4NCj4gICAgQHBhcmFtW2luXSAg VHhTdHJpbmdMZW4gICAgICAgIExlbmd0aCBvZiB0aGUgSFRUUCBtZXNzYWdlIHN0cmluZyBpbiBi eXRlcy4NCj4gQEAgLTEzNjAsMTggKzE0ODIsNjggQEAgSHR0cFRyYW5zbWl0VGNwICgNCj4gICAg RUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiAgICBFRklfVENQNF9JT19U T0tFTiAgICAgICAgICAgICAqVHg0VG9rZW47DQo+ICAgIEVGSV9UQ1A0X1BST1RPQ09MICAgICAg ICAgICAgICpUY3A0Ow0KPiAgICBFRklfVENQNl9JT19UT0tFTiAgICAgICAgICAgICAqVHg2VG9r ZW47DQo+ICAgIEVGSV9UQ1A2X1BST1RPQ09MICAgICAgICAgICAgICpUY3A2Ow0KPiArICBVSU5U OCAgICAgICAgICAgICAgICAgICAgICAgICAqQnVmZmVyOw0KPiArICBVSU5UTiAgICAgICAgICAg ICAgICAgICAgICAgICBCdWZmZXJTaXplOw0KPiArICBORVRfRlJBR01FTlQgICAgICAgICAgICAg ICAgICBUZW1wRnJhZ21lbnQ7DQo+ICsNCj4gKyAgU3RhdHVzICAgICAgICAgICAgICAgID0gRUZJ X1NVQ0NFU1M7DQo+ICsgIEJ1ZmZlciAgICAgICAgICAgICAgICA9IE5VTEw7DQo+ICsNCj4gKyAg Ly8NCj4gKyAgLy8gTmVlZCB0byBlbmNyeXB0IGRhdGEuDQo+ICsgIC8vDQo+ICsgIGlmIChIdHRw SW5zdGFuY2UtPlVzZUh0dHBzKSB7DQo+ICsgICAgLy8NCj4gKyAgICAvLyBCdWlsZCBCdWZmZXJP dXQgZGF0YQ0KPiArICAgIC8vDQo+ICsgICAgQnVmZmVyU2l6ZSA9IHNpemVvZiAoVExTX1JFQ09S RF9IRUFERVIpICsgVHhTdHJpbmdMZW47DQo+ICsgICAgQnVmZmVyICAgICA9IEFsbG9jYXRlWmVy b1Bvb2wgKEJ1ZmZlclNpemUpOw0KPiArICAgIGlmIChCdWZmZXIgPT0gTlVMTCkgew0KPiArICAg ICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgICAgICByZXR1cm4gU3RhdHVz Ow0KPiArICAgIH0NCj4gKyAgICAoKFRMU19SRUNPUkRfSEVBREVSICopIEJ1ZmZlciktPkNvbnRl bnRUeXBlID0NCj4gVExTX0NPTlRFTlRfVFlQRV9BUFBMSUNBVElPTl9EQVRBOw0KPiArICAgICgo VExTX1JFQ09SRF9IRUFERVIgKikgQnVmZmVyKS0+VmVyc2lvbi5NYWpvciA9IEh0dHBJbnN0YW5j ZS0NCj4gPlRsc0NvbmZpZ0RhdGEuVmVyc2lvbi5NYWpvcjsNCj4gKyAgICAoKFRMU19SRUNPUkRf SEVBREVSICopIEJ1ZmZlciktPlZlcnNpb24uTWlub3IgPSBIdHRwSW5zdGFuY2UtDQo+ID5UbHND b25maWdEYXRhLlZlcnNpb24uTWlub3I7DQo+ICsgICAgKChUTFNfUkVDT1JEX0hFQURFUiAqKSBC dWZmZXIpLT5MZW5ndGggPSAoVUlOVDE2KSAoVHhTdHJpbmdMZW4pOw0KPiArICAgIENvcHlNZW0g KEJ1ZmZlciArIHNpemVvZiAoVExTX1JFQ09SRF9IRUFERVIpLCBUeFN0cmluZywgVHhTdHJpbmdM ZW4pOw0KPiArDQo+ICsgICAgLy8NCj4gKyAgICAvLyBFbmNyeXB0IFBhY2tldC4NCj4gKyAgICAv Lw0KPiArICAgIFN0YXR1cyA9IFRsc1Byb2Nlc3NNZXNzYWdlICgNCj4gKyAgICAgICAgICAgICAg IEh0dHBJbnN0YW5jZSwNCj4gKyAgICAgICAgICAgICAgIEJ1ZmZlciwNCj4gKyAgICAgICAgICAg ICAgIEJ1ZmZlclNpemUsDQo+ICsgICAgICAgICAgICAgICBFZmlUbHNFbmNyeXB0LA0KPiArICAg ICAgICAgICAgICAgJlRlbXBGcmFnbWVudA0KPiArICAgICAgICAgICAgICAgKTsNCj4gKw0KPiAr ICAgIEZyZWVQb29sIChCdWZmZXIpOw0KPiArDQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPiArICAgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgICB9DQo+ICsgIH0NCj4gDQo+IC0g IGlmICghSHR0cEluc3RhbmNlLT5Mb2NhbEFkZHJlc3NJc0lQdjYpIHsNCj4gKyAgaWYgKCFIdHRw SW5zdGFuY2UtPkxvY2FsQWRkcmVzc0lzSVB2Nikgew0KPiAgICAgIFRjcDQgPSBIdHRwSW5zdGFu Y2UtPlRjcDQ7DQo+ICAgICAgVHg0VG9rZW4gPSAmV3JhcC0+VGNwV3JhcC5UeDRUb2tlbjsNCj4g Kw0KPiArICAgIGlmIChIdHRwSW5zdGFuY2UtPlVzZUh0dHBzKSB7DQo+ICsgICAgICBUeDRUb2tl bi0+UGFja2V0LlR4RGF0YS0+RGF0YUxlbmd0aCA9IFRlbXBGcmFnbWVudC5MZW47DQo+ICsgICAg ICBUeDRUb2tlbi0+UGFja2V0LlR4RGF0YS0+RnJhZ21lbnRUYWJsZVswXS5GcmFnbWVudExlbmd0 aCA9DQo+IFRlbXBGcmFnbWVudC5MZW47DQo+ICsgICAgICBUeDRUb2tlbi0+UGFja2V0LlR4RGF0 YS0+RnJhZ21lbnRUYWJsZVswXS5GcmFnbWVudEJ1ZmZlciA9IChWT0lEDQo+ICopIFRlbXBGcmFn bWVudC5CdWxrOw0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICBUeDRUb2tlbi0+UGFja2V0LlR4 RGF0YS0+RGF0YUxlbmd0aCA9IChVSU5UMzIpIFR4U3RyaW5nTGVuOw0KPiArICAgICAgVHg0VG9r ZW4tPlBhY2tldC5UeERhdGEtPkZyYWdtZW50VGFibGVbMF0uRnJhZ21lbnRMZW5ndGggPQ0KPiAo VUlOVDMyKSBUeFN0cmluZ0xlbjsNCj4gKyAgICAgIFR4NFRva2VuLT5QYWNrZXQuVHhEYXRhLT5G cmFnbWVudFRhYmxlWzBdLkZyYWdtZW50QnVmZmVyID0gKFZPSUQNCj4gKikgVHhTdHJpbmc7DQo+ ICsgICAgfQ0KPiANCj4gLSAgICBUeDRUb2tlbi0+UGFja2V0LlR4RGF0YS0+RGF0YUxlbmd0aCA9 IChVSU5UMzIpIFR4U3RyaW5nTGVuOw0KPiAtICAgIFR4NFRva2VuLT5QYWNrZXQuVHhEYXRhLT5G cmFnbWVudFRhYmxlWzBdLkZyYWdtZW50TGVuZ3RoID0gKFVJTlQzMikNCj4gVHhTdHJpbmdMZW47 DQo+IC0gICAgVHg0VG9rZW4tPlBhY2tldC5UeERhdGEtPkZyYWdtZW50VGFibGVbMF0uRnJhZ21l bnRCdWZmZXIgPSAoVk9JRCAqKQ0KPiBUeFN0cmluZzsNCj4gICAgICBUeDRUb2tlbi0+Q29tcGxl dGlvblRva2VuLlN0YXR1cyA9IEVGSV9OT1RfUkVBRFk7DQo+IA0KPiAgICAgIFdyYXAtPlRjcFdy YXAuSXNUeERvbmUgPSBGQUxTRTsNCj4gICAgICBTdGF0dXMgID0gVGNwNC0+VHJhbnNtaXQgKFRj cDQsIFR4NFRva2VuKTsNCj4gICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+IEBAIC0x MzgwLDI1ICsxNTUyLDMxIEBAIEh0dHBUcmFuc21pdFRjcCAoDQo+ICAgICAgfQ0KPiANCj4gICAg fSBlbHNlIHsNCj4gICAgICBUY3A2ID0gSHR0cEluc3RhbmNlLT5UY3A2Ow0KPiAgICAgIFR4NlRv a2VuID0gJldyYXAtPlRjcFdyYXAuVHg2VG9rZW47DQo+IC0NCj4gLSAgICBUeDZUb2tlbi0+UGFj a2V0LlR4RGF0YS0+RGF0YUxlbmd0aCA9IChVSU5UMzIpIFR4U3RyaW5nTGVuOw0KPiAtICAgIFR4 NlRva2VuLT5QYWNrZXQuVHhEYXRhLT5GcmFnbWVudFRhYmxlWzBdLkZyYWdtZW50TGVuZ3RoID0g KFVJTlQzMikNCj4gVHhTdHJpbmdMZW47DQo+IC0gICAgVHg2VG9rZW4tPlBhY2tldC5UeERhdGEt PkZyYWdtZW50VGFibGVbMF0uRnJhZ21lbnRCdWZmZXIgPSAoVk9JRCAqKQ0KPiBUeFN0cmluZzsN Cj4gKw0KPiArICAgIGlmIChIdHRwSW5zdGFuY2UtPlVzZUh0dHBzKSB7DQo+ICsgICAgICBUeDZU b2tlbi0+UGFja2V0LlR4RGF0YS0+RGF0YUxlbmd0aCA9IFRlbXBGcmFnbWVudC5MZW47DQo+ICsg ICAgICBUeDZUb2tlbi0+UGFja2V0LlR4RGF0YS0+RnJhZ21lbnRUYWJsZVswXS5GcmFnbWVudExl bmd0aCA9DQo+IFRlbXBGcmFnbWVudC5MZW47DQo+ICsgICAgICBUeDZUb2tlbi0+UGFja2V0LlR4 RGF0YS0+RnJhZ21lbnRUYWJsZVswXS5GcmFnbWVudEJ1ZmZlciA9IChWT0lEDQo+ICopIFRlbXBG cmFnbWVudC5CdWxrOw0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICBUeDZUb2tlbi0+UGFja2V0 LlR4RGF0YS0+RGF0YUxlbmd0aCA9IChVSU5UMzIpIFR4U3RyaW5nTGVuOw0KPiArICAgICAgVHg2 VG9rZW4tPlBhY2tldC5UeERhdGEtPkZyYWdtZW50VGFibGVbMF0uRnJhZ21lbnRMZW5ndGggPQ0K PiAoVUlOVDMyKSBUeFN0cmluZ0xlbjsNCj4gKyAgICAgIFR4NlRva2VuLT5QYWNrZXQuVHhEYXRh LT5GcmFnbWVudFRhYmxlWzBdLkZyYWdtZW50QnVmZmVyID0gKFZPSUQNCj4gKikgVHhTdHJpbmc7 DQo+ICsgICAgfQ0KPiArDQo+ICAgICAgVHg2VG9rZW4tPkNvbXBsZXRpb25Ub2tlbi5TdGF0dXMg PSBFRklfTk9UX1JFQURZOw0KPiANCj4gICAgICBXcmFwLT5UY3BXcmFwLklzVHhEb25lID0gRkFM U0U7DQo+ICAgICAgU3RhdHVzID0gVGNwNi0+VHJhbnNtaXQgKFRjcDYsIFR4NlRva2VuKTsNCj4g ICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICAgICAgICBERUJVRyAoKEVGSV9EX0VS Uk9SLCAiVHJhbnNtaXQgZmFpbGVkOiAlclxuIiwgU3RhdHVzKSk7DQo+ICAgICAgICByZXR1cm4g U3RhdHVzOw0KPiAgICAgIH0NCj4gICAgfQ0KPiANCj4gLQ0KPiAgICByZXR1cm4gU3RhdHVzOw0K PiAgfQ0KPiANCj4gIC8qKg0KPiAgICBDaGVjayB3aGV0aGVyIHRoZSB1c2VyJ3MgdG9rZW4gb3Ig ZXZlbnQgaGFzIGFscmVhZHkNCj4gQEAgLTE0NjQsMTEgKzE2NDIsMTEgQEAgSHR0cFRjcE5vdFJl YWR5ICgNCj4gDQo+ICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gIH0NCj4gDQo+ICAvKioNCj4g LSAgVHJhbnNtaXQgdGhlIEhUVFAgbXNzYWdlIGJ5IHByb2Nlc3NpbmcgdGhlIGFzc29jaWF0ZWQg SFRUUCB0b2tlbi4NCj4gKyAgVHJhbnNtaXQgdGhlIEhUVFAgb3IgSFRUUFMgbXNzYWdlIGJ5IHBy b2Nlc3NpbmcgdGhlIGFzc29jaWF0ZWQgSFRUUA0KPiB0b2tlbi4NCj4gDQo+ICAgIEBwYXJhbVtp bl0gIE1hcCAgICAgICAgICAgICAgICBUaGUgY29udGFpbmVyIG9mIFR4NFRva2VuIG9yIFR4NlRv a2VuLg0KPiAgICBAcGFyYW1baW5dICBJdGVtICAgICAgICAgICAgICAgQ3VycmVudCBpdGVtIHRv IGNoZWNrIGFnYWluc3QuDQo+ICAgIEBwYXJhbVtpbl0gIENvbnRleHQgICAgICAgICAgICBUaGUg VG9rZW4gdG8gY2hlY2sgYWdhaW5pc3QuDQo+IA0KPiBAQCAtMTU4OCwxNjcgKzE3NjYsMjM1IEBA IEh0dHBUY3BSZWNlaXZlSGVhZGVyICgNCj4gICAgRUZJX1RDUDZfSU9fVE9LRU4gICAgICAgICAg ICAgKlJ4NlRva2VuOw0KPiAgICBFRklfVENQNl9QUk9UT0NPTCAgICAgICAgICAgICAqVGNwNjsN Cj4gICAgQ0hBUjggICAgICAgICAgICAgICAgICAgICAgICAgKipFbmRvZkhlYWRlcjsNCj4gICAg Q0hBUjggICAgICAgICAgICAgICAgICAgICAgICAgKipIdHRwSGVhZGVyczsNCj4gICAgQ0hBUjgg ICAgICAgICAgICAgICAgICAgICAgICAgKkJ1ZmZlcjsNCj4gKyAgTkVUX0ZSQUdNRU5UICAgICAg ICAgICAgICAgICAgRnJhZ21lbnQ7DQo+IA0KPiAgICBBU1NFUlQgKEh0dHBJbnN0YW5jZSAhPSBO VUxMKTsNCj4gDQo+ICAgIEVuZG9mSGVhZGVyID0gSHR0cEluc3RhbmNlLT5FbmRvZkhlYWRlcjsN Cj4gICAgSHR0cEhlYWRlcnMgPSBIdHRwSW5zdGFuY2UtPkh0dHBIZWFkZXJzOw0KPiAgICBUY3A0 ID0gSHR0cEluc3RhbmNlLT5UY3A0Ow0KPiAgICBUY3A2ID0gSHR0cEluc3RhbmNlLT5UY3A2Ow0K PiAgICBCdWZmZXIgICAgICA9IE5VTEw7DQo+ICAgIFJ4NFRva2VuICAgID0gTlVMTDsNCj4gICAg Ung2VG9rZW4gICAgPSBOVUxMOw0KPiArICBGcmFnbWVudC5MZW4gID0gMDsNCj4gKyAgRnJhZ21l bnQuQnVsayA9IE5VTEw7DQo+IA0KPiAgICBpZiAoSHR0cEluc3RhbmNlLT5Mb2NhbEFkZHJlc3NJ c0lQdjYpIHsNCj4gICAgICBBU1NFUlQgKFRjcDYgIT0gTlVMTCk7DQo+ICAgIH0gZWxzZSB7DQo+ ICAgICAgQVNTRVJUIChUY3A0ICE9IE5VTEwpOw0KPiAgICB9DQo+IA0KPiAtICBpZiAoIUh0dHBJ bnN0YW5jZS0+TG9jYWxBZGRyZXNzSXNJUHY2KSB7DQo+IC0gICAgUng0VG9rZW4gPSAmSHR0cElu c3RhbmNlLT5SeDRUb2tlbjsNCj4gLSAgICBSeDRUb2tlbi0+UGFja2V0LlJ4RGF0YS0+RnJhZ21l bnRUYWJsZVswXS5GcmFnbWVudEJ1ZmZlciA9DQo+IEFsbG9jYXRlWmVyb1Bvb2wgKERFRl9CVUZf TEVOKTsNCj4gLSAgICBpZiAoUng0VG9rZW4tPlBhY2tldC5SeERhdGEtPkZyYWdtZW50VGFibGVb MF0uRnJhZ21lbnRCdWZmZXIgPT0NCj4gTlVMTCkgew0KPiAtICAgICAgU3RhdHVzID0gRUZJX09V VF9PRl9SRVNPVVJDRVM7DQo+ICsgIGlmICghSHR0cEluc3RhbmNlLT5Vc2VIdHRwcykgew0KPiAr ICAgIFN0YXR1cyA9IEh0dHBDcmVhdGVUY3BSeEV2ZW50Rm9ySGVhZGVyIChIdHRwSW5zdGFuY2Up Ow0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gICAgICAgIHJldHVybiBTdGF0 dXM7DQo+ICAgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgaWYgKCFIdHRwSW5zdGFuY2UtPkxvY2Fs QWRkcmVzc0lzSVB2Nikgew0KPiArICAgIGlmICghSHR0cEluc3RhbmNlLT5Vc2VIdHRwcykgew0K PiArICAgICAgUng0VG9rZW4gPSAmSHR0cEluc3RhbmNlLT5SeDRUb2tlbjsNCj4gKyAgICAgIFJ4 NFRva2VuLT5QYWNrZXQuUnhEYXRhLT5GcmFnbWVudFRhYmxlWzBdLkZyYWdtZW50QnVmZmVyID0N Cj4gQWxsb2NhdGVaZXJvUG9vbCAoREVGX0JVRl9MRU4pOw0KPiArICAgICAgaWYgKFJ4NFRva2Vu LT5QYWNrZXQuUnhEYXRhLT5GcmFnbWVudFRhYmxlWzBdLkZyYWdtZW50QnVmZmVyID09DQo+IE5V TEwpIHsNCj4gKyAgICAgICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgICAg ICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiANCj4gICAgICAvLw0K PiAgICAgIC8vIFJlY2VpdmUgdGhlIEhUVFAgaGVhZGVycyBvbmx5IHdoZW4gRUZJX0hUVFBfUkVT UE9OU0VfREFUQSBpcyBub3QNCj4gTlVMTC4NCj4gICAgICAvLw0KPiAtICAgIHdoaWxlICgqRW5k b2ZIZWFkZXIgPT0gTlVMTCkgew0KPiAtICAgICAgSHR0cEluc3RhbmNlLT5Jc1J4RG9uZSA9IEZB TFNFOw0KPiAtICAgICAgUng0VG9rZW4tPlBhY2tldC5SeERhdGEtPkRhdGFMZW5ndGggPSBERUZf QlVGX0xFTjsNCj4gLSAgICAgIFJ4NFRva2VuLT5QYWNrZXQuUnhEYXRhLT5GcmFnbWVudFRhYmxl WzBdLkZyYWdtZW50TGVuZ3RoID0NCj4gREVGX0JVRl9MRU47DQo+IC0gICAgICBTdGF0dXMgPSBU Y3A0LT5SZWNlaXZlIChUY3A0LCBSeDRUb2tlbik7DQo+IC0gICAgICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+IC0gICAgICAgIERFQlVHICgoRUZJX0RfRVJST1IsICJUY3A0IHJlY2VpdmUg ZmFpbGVkOiAlclxuIiwgU3RhdHVzKSk7DQo+IC0gICAgICAgIHJldHVybiBTdGF0dXM7DQo+IC0g ICAgICB9DQo+IC0NCj4gLSAgICAgIHdoaWxlICghSHR0cEluc3RhbmNlLT5Jc1J4RG9uZSAmJiAo KFRpbWVvdXQgPT0gTlVMTCkgfHwgRUZJX0VSUk9SDQo+IChnQlMtPkNoZWNrRXZlbnQgKFRpbWVv dXQpKSkpIHsNCj4gLSAgICAgICAgVGNwNC0+UG9sbCAoVGNwNCk7DQo+ICsgICAgd2hpbGUgKCpF bmRvZkhlYWRlciA9PSBOVUxMKSB7DQo+ICsgICAgICBpZiAoIUh0dHBJbnN0YW5jZS0+VXNlSHR0 cHMpIHsNCj4gKyAgICAgICAgSHR0cEluc3RhbmNlLT5Jc1J4RG9uZSA9IEZBTFNFOw0KPiArICAg ICAgICBSeDRUb2tlbi0+UGFja2V0LlJ4RGF0YS0+RGF0YUxlbmd0aCA9IERFRl9CVUZfTEVOOw0K PiArICAgICAgICBSeDRUb2tlbi0+UGFja2V0LlJ4RGF0YS0+RnJhZ21lbnRUYWJsZVswXS5GcmFn bWVudExlbmd0aCA9DQo+IERFRl9CVUZfTEVOOw0KPiArICAgICAgICBTdGF0dXMgPSBUY3A0LT5S ZWNlaXZlIChUY3A0LCBSeDRUb2tlbik7DQo+ICsgICAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4gKyAgICAgICAgICBERUJVRyAoKEVGSV9EX0VSUk9SLCAiVGNwNCByZWNlaXZlIGZh aWxlZDogJXJcbiIsIFN0YXR1cykpOw0KPiArICAgICAgICAgIHJldHVybiBTdGF0dXM7DQo+ICsg ICAgICAgIH0NCj4gKw0KPiArICAgICAgICB3aGlsZSAoIUh0dHBJbnN0YW5jZS0+SXNSeERvbmUg JiYgKChUaW1lb3V0ID09IE5VTEwpIHx8IEVGSV9FUlJPUg0KPiAoZ0JTLT5DaGVja0V2ZW50IChU aW1lb3V0KSkpKSB7DQo+ICsgICAgICAgICAgVGNwNC0+UG9sbCAoVGNwNCk7DQo+ICsgICAgICAg IH0NCj4gKw0KPiArICAgICAgICBpZiAoIUh0dHBJbnN0YW5jZS0+SXNSeERvbmUpIHsNCj4gKyAg ICAgICAgICAvLw0KPiArICAgICAgICAgIC8vIENhbmNsZSB0aGUgVG9rZW4gYmVmb3JlIGNsb3Nl IGl0cyBFdmVudC4NCj4gKyAgICAgICAgICAvLw0KPiArICAgICAgICAgIFRjcDQtPkNhbmNlbCAo SHR0cEluc3RhbmNlLT5UY3A0LCAmUng0VG9rZW4tPkNvbXBsZXRpb25Ub2tlbik7DQo+ICsgICAg ICAgICAgZ0JTLT5DbG9zZUV2ZW50IChSeDRUb2tlbi0+Q29tcGxldGlvblRva2VuLkV2ZW50KTsN Cj4gKyAgICAgICAgICBSeDRUb2tlbi0+Q29tcGxldGlvblRva2VuLlN0YXR1cyA9IEVGSV9USU1F T1VUOw0KPiArICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgU3RhdHVzID0gUng0VG9rZW4tPkNv bXBsZXRpb25Ub2tlbi5TdGF0dXM7DQo+ICsgICAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gKyAgICAgICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAgICAgICB9DQo+ICsNCj4gKyAg ICAgICAgRnJhZ21lbnQuTGVuICA9IFJ4NFRva2VuLT5QYWNrZXQuUnhEYXRhLQ0KPiA+RnJhZ21l bnRUYWJsZVswXS5GcmFnbWVudExlbmd0aDsNCj4gKyAgICAgICAgRnJhZ21lbnQuQnVsayA9IChV SU5UOCAqKSBSeDRUb2tlbi0+UGFja2V0LlJ4RGF0YS0NCj4gPkZyYWdtZW50VGFibGVbMF0uRnJh Z21lbnRCdWZmZXI7DQo+ICsgICAgICB9IGVsc2Ugew0KPiArICAgICAgICBpZiAoRnJhZ21lbnQu QnVsayAhPSBOVUxMKSB7DQo+ICsgICAgICAgICAgRnJlZVBvb2wgKEZyYWdtZW50LkJ1bGspOw0K PiArICAgICAgICAgIEZyYWdtZW50LkJ1bGsgPSBOVUxMOw0KPiArICAgICAgICB9DQo+ICsNCj4g KyAgICAgICAgU3RhdHVzID0gSHR0cHNSZWNlaXZlIChIdHRwSW5zdGFuY2UsICZGcmFnbWVudCwg VGltZW91dCk7DQo+ICsgICAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAg ICAgICBERUJVRyAoKEVGSV9EX0VSUk9SLCAiVGNwNCByZWNlaXZlIGZhaWxlZDogJXJcbiIsIFN0 YXR1cykpOw0KPiArICAgICAgICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgICAgIH0NCj4gICAg ICAgIH0NCj4gDQo+IC0gICAgICBpZiAoIUh0dHBJbnN0YW5jZS0+SXNSeERvbmUpIHsNCj4gLSAg ICAgICAgLy8NCj4gLSAgICAgICAgLy8gQ2FuY2xlIHRoZSBUb2tlbiBiZWZvcmUgY2xvc2UgaXRz IEV2ZW50Lg0KPiAtICAgICAgICAvLw0KPiAtICAgICAgICBUY3A0LT5DYW5jZWwgKEh0dHBJbnN0 YW5jZS0+VGNwNCwgJlJ4NFRva2VuLT5Db21wbGV0aW9uVG9rZW4pOw0KPiAtICAgICAgICBnQlMt PkNsb3NlRXZlbnQgKFJ4NFRva2VuLT5Db21wbGV0aW9uVG9rZW4uRXZlbnQpOw0KPiAtICAgICAg ICBSeDRUb2tlbi0+Q29tcGxldGlvblRva2VuLlN0YXR1cyA9IEVGSV9USU1FT1VUOw0KPiAtICAg ICAgfQ0KPiAtDQo+IC0gICAgICBTdGF0dXMgPSBSeDRUb2tlbi0+Q29tcGxldGlvblRva2VuLlN0 YXR1czsNCj4gLSAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gLSAgICAgICAgcmV0 dXJuIFN0YXR1czsNCj4gLSAgICAgIH0NCj4gLQ0KPiAgICAgICAgLy8NCj4gICAgICAgIC8vIEFw cGVuZCB0aGUgcmVzcG9uc2Ugc3RyaW5nLg0KPiAgICAgICAgLy8NCj4gLSAgICAgICpCdWZmZXJT aXplID0gKCpTaXplb2ZIZWFkZXJzKSArIFJ4NFRva2VuLT5QYWNrZXQuUnhEYXRhLQ0KPiA+RnJh Z21lbnRUYWJsZVswXS5GcmFnbWVudExlbmd0aDsNCj4gKyAgICAgICpCdWZmZXJTaXplID0gKlNp emVvZkhlYWRlcnMgKyBGcmFnbWVudC5MZW47DQo+ICAgICAgICBCdWZmZXIgICAgICA9IEFsbG9j YXRlWmVyb1Bvb2wgKCpCdWZmZXJTaXplKTsNCj4gICAgICAgIGlmIChCdWZmZXIgPT0gTlVMTCkg ew0KPiAgICAgICAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gICAgICAgICAg cmV0dXJuIFN0YXR1czsNCj4gICAgICAgIH0NCj4gLQ0KPiArDQo+ICAgICAgICBpZiAoKkh0dHBI ZWFkZXJzICE9IE5VTEwpIHsNCj4gLSAgICAgICAgQ29weU1lbSAoQnVmZmVyLCAqSHR0cEhlYWRl cnMsICgqU2l6ZW9mSGVhZGVycykpOw0KPiArICAgICAgICBDb3B5TWVtIChCdWZmZXIsICpIdHRw SGVhZGVycywgKlNpemVvZkhlYWRlcnMpOw0KPiAgICAgICAgICBGcmVlUG9vbCAoKkh0dHBIZWFk ZXJzKTsNCj4gICAgICAgIH0NCj4gLQ0KPiArDQo+ICAgICAgICBDb3B5TWVtICgNCj4gLSAgICAg ICAgQnVmZmVyICsgKCpTaXplb2ZIZWFkZXJzKSwNCj4gLSAgICAgICAgUng0VG9rZW4tPlBhY2tl dC5SeERhdGEtPkZyYWdtZW50VGFibGVbMF0uRnJhZ21lbnRCdWZmZXIsDQo+IC0gICAgICAgIFJ4 NFRva2VuLT5QYWNrZXQuUnhEYXRhLT5GcmFnbWVudFRhYmxlWzBdLkZyYWdtZW50TGVuZ3RoDQo+ ICsgICAgICAgIEJ1ZmZlciArICpTaXplb2ZIZWFkZXJzLA0KPiArICAgICAgICBGcmFnbWVudC5C dWxrLA0KPiArICAgICAgICBGcmFnbWVudC5MZW4NCj4gICAgICAgICAgKTsNCj4gLSAgICAgICpI dHRwSGVhZGVycyAgICA9IEJ1ZmZlcjsNCj4gLSAgICAgICpTaXplb2ZIZWFkZXJzICA9ICpCdWZm ZXJTaXplOw0KPiAtDQo+ICsgICAgICAqSHR0cEhlYWRlcnMgICA9IEJ1ZmZlcjsNCj4gKyAgICAg ICpTaXplb2ZIZWFkZXJzID0gKkJ1ZmZlclNpemU7DQo+ICsNCj4gICAgICAgIC8vDQo+ICAgICAg ICAvLyBDaGVjayB3aGV0aGVyIHdlIHJlY2VpdmVkIGVuZCBvZiBIVFRQIGhlYWRlcnMuDQo+ICAg ICAgICAvLw0KPiAgICAgICAgKkVuZG9mSGVhZGVyID0gQXNjaWlTdHJTdHIgKCpIdHRwSGVhZGVy cywgSFRUUF9FTkRfT0ZfSERSX1NUUik7DQo+IC0gICAgfQ0KPiAtICAgIEZyZWVQb29sIChSeDRU b2tlbi0+UGFja2V0LlJ4RGF0YS0+RnJhZ21lbnRUYWJsZVswXS5GcmFnbWVudEJ1ZmZlcik7DQo+ IC0gICAgUng0VG9rZW4tPlBhY2tldC5SeERhdGEtPkZyYWdtZW50VGFibGVbMF0uRnJhZ21lbnRC dWZmZXIgPSBOVUxMOw0KPiArICAgIH07DQo+IA0KPiArICAgIC8vDQo+ICsgICAgLy8gRnJlZSB0 aGUgYnVmZmVyLg0KPiArICAgIC8vDQo+ICsgICAgaWYgKFJ4NFRva2VuICE9IE5VTEwgJiYgUng0 VG9rZW4tPlBhY2tldC5SeERhdGEgIT0gTlVMTCAmJg0KPiBSeDRUb2tlbi0+UGFja2V0LlJ4RGF0 YS0+RnJhZ21lbnRUYWJsZVswXS5GcmFnbWVudEJ1ZmZlciAhPSBOVUxMKSB7DQo+ICsgICAgICBG cmVlUG9vbCAoUng0VG9rZW4tPlBhY2tldC5SeERhdGEtDQo+ID5GcmFnbWVudFRhYmxlWzBdLkZy YWdtZW50QnVmZmVyKTsNCj4gKyAgICAgIFJ4NFRva2VuLT5QYWNrZXQuUnhEYXRhLT5GcmFnbWVu dFRhYmxlWzBdLkZyYWdtZW50QnVmZmVyID0gTlVMTDsNCj4gKyAgICAgIEZyYWdtZW50LkJ1bGsg PSBOVUxMOw0KPiArICAgIH0NCj4gKw0KPiArICAgIGlmIChGcmFnbWVudC5CdWxrICE9IE5VTEwp IHsNCj4gKyAgICAgIEZyZWVQb29sIChGcmFnbWVudC5CdWxrKTsNCj4gKyAgICAgIEZyYWdtZW50 LkJ1bGsgPSBOVUxMOw0KPiArICAgIH0NCj4gICAgfSBlbHNlIHsNCj4gLSAgICBSeDZUb2tlbiA9 ICZIdHRwSW5zdGFuY2UtPlJ4NlRva2VuOw0KPiAtICAgIFJ4NlRva2VuLT5QYWNrZXQuUnhEYXRh LT5GcmFnbWVudFRhYmxlWzBdLkZyYWdtZW50QnVmZmVyID0NCj4gQWxsb2NhdGVaZXJvUG9vbCAo REVGX0JVRl9MRU4pOw0KPiAtICAgIGlmIChSeDZUb2tlbi0+UGFja2V0LlJ4RGF0YS0+RnJhZ21l bnRUYWJsZVswXS5GcmFnbWVudEJ1ZmZlciA9PQ0KPiBOVUxMKSB7DQo+IC0gICAgICBTdGF0dXMg PSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gLSAgICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAg aWYgKCFIdHRwSW5zdGFuY2UtPlVzZUh0dHBzKSB7DQo+ICsgICAgICBSeDZUb2tlbiA9ICZIdHRw SW5zdGFuY2UtPlJ4NlRva2VuOw0KPiArICAgICAgUng2VG9rZW4tPlBhY2tldC5SeERhdGEtPkZy YWdtZW50VGFibGVbMF0uRnJhZ21lbnRCdWZmZXIgPQ0KPiBBbGxvY2F0ZVplcm9Qb29sIChERUZf QlVGX0xFTik7DQo+ICsgICAgICBpZiAoUng2VG9rZW4tPlBhY2tldC5SeERhdGEtPkZyYWdtZW50 VGFibGVbMF0uRnJhZ21lbnRCdWZmZXIgPT0NCj4gTlVMTCkgew0KPiArICAgICAgICBTdGF0dXMg PSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gKyAgICAgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAg ICAgIH0NCj4gICAgICB9DQo+IA0KPiAgICAgIC8vDQo+ICAgICAgLy8gUmVjZWl2ZSB0aGUgSFRU UCBoZWFkZXJzIG9ubHkgd2hlbiBFRklfSFRUUF9SRVNQT05TRV9EQVRBIGlzIG5vdA0KPiBOVUxM Lg0KPiAgICAgIC8vDQo+IC0gICAgd2hpbGUgKCpFbmRvZkhlYWRlciA9PSBOVUxMKSB7DQo+IC0g ICAgICBIdHRwSW5zdGFuY2UtPklzUnhEb25lID0gRkFMU0U7DQo+IC0gICAgICBSeDZUb2tlbi0+ UGFja2V0LlJ4RGF0YS0+RGF0YUxlbmd0aCA9IERFRl9CVUZfTEVOOw0KPiAtICAgICAgUng2VG9r ZW4tPlBhY2tldC5SeERhdGEtPkZyYWdtZW50VGFibGVbMF0uRnJhZ21lbnRMZW5ndGggPQ0KPiBE RUZfQlVGX0xFTjsNCj4gLSAgICAgIFN0YXR1cyA9IFRjcDYtPlJlY2VpdmUgKFRjcDYsIFJ4NlRv a2VuKTsNCj4gLSAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gLSAgICAgICAgREVC VUcgKChFRklfRF9FUlJPUiwgIlRjcDYgcmVjZWl2ZSBmYWlsZWQ6ICVyXG4iLCBTdGF0dXMpKTsN Cj4gLSAgICAgICAgcmV0dXJuIFN0YXR1czsNCj4gLSAgICAgIH0NCj4gLQ0KPiAtICAgICAgd2hp bGUgKCFIdHRwSW5zdGFuY2UtPklzUnhEb25lICYmICgoVGltZW91dCA9PSBOVUxMKSB8fCBFRklf RVJST1INCj4gKGdCUy0+Q2hlY2tFdmVudCAoVGltZW91dCkpKSkgew0KPiAtICAgICAgICBUY3A2 LT5Qb2xsIChUY3A2KTsNCj4gKyAgICB3aGlsZSAoKkVuZG9mSGVhZGVyID09IE5VTEwpIHsNCj4g KyAgICAgIGlmICghSHR0cEluc3RhbmNlLT5Vc2VIdHRwcykgew0KPiArICAgICAgICBIdHRwSW5z dGFuY2UtPklzUnhEb25lID0gRkFMU0U7DQo+ICsgICAgICAgIFJ4NlRva2VuLT5QYWNrZXQuUnhE YXRhLT5EYXRhTGVuZ3RoID0gREVGX0JVRl9MRU47DQo+ICsgICAgICAgIFJ4NlRva2VuLT5QYWNr ZXQuUnhEYXRhLT5GcmFnbWVudFRhYmxlWzBdLkZyYWdtZW50TGVuZ3RoID0NCj4gREVGX0JVRl9M RU47DQo+ICsgICAgICAgIFN0YXR1cyA9IFRjcDYtPlJlY2VpdmUgKFRjcDYsIFJ4NlRva2VuKTsN Cj4gKyAgICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgICAgIERFQlVH ICgoRUZJX0RfRVJST1IsICJUY3A2IHJlY2VpdmUgZmFpbGVkOiAlclxuIiwgU3RhdHVzKSk7DQo+ ICsgICAgICAgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgICAgICAgfQ0KPiArDQo+ICsgICAgICAg IHdoaWxlICghSHR0cEluc3RhbmNlLT5Jc1J4RG9uZSAmJiAoKFRpbWVvdXQgPT0gTlVMTCkgfHwg RUZJX0VSUk9SDQo+IChnQlMtPkNoZWNrRXZlbnQgKFRpbWVvdXQpKSkpIHsNCj4gKyAgICAgICAg ICBUY3A2LT5Qb2xsIChUY3A2KTsNCj4gKyAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgIGlmICgh SHR0cEluc3RhbmNlLT5Jc1J4RG9uZSkgew0KPiArICAgICAgICAgIC8vDQo+ICsgICAgICAgICAg Ly8gQ2FuY2xlIHRoZSBUb2tlbiBiZWZvcmUgY2xvc2UgaXRzIEV2ZW50Lg0KPiArICAgICAgICAg IC8vDQo+ICsgICAgICAgICAgVGNwNi0+Q2FuY2VsIChIdHRwSW5zdGFuY2UtPlRjcDYsICZSeDZU b2tlbi0+Q29tcGxldGlvblRva2VuKTsNCj4gKyAgICAgICAgICBnQlMtPkNsb3NlRXZlbnQgKFJ4 NlRva2VuLT5Db21wbGV0aW9uVG9rZW4uRXZlbnQpOw0KPiArICAgICAgICAgIFJ4NlRva2VuLT5D b21wbGV0aW9uVG9rZW4uU3RhdHVzID0gRUZJX1RJTUVPVVQ7DQo+ICsgICAgICAgIH0NCj4gKw0K PiArICAgICAgICBTdGF0dXMgPSBSeDZUb2tlbi0+Q29tcGxldGlvblRva2VuLlN0YXR1czsNCj4g KyAgICAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgICAgIHJldHVybiBT dGF0dXM7DQo+ICsgICAgICAgIH0NCj4gKw0KPiArICAgICAgICBGcmFnbWVudC5MZW4gID0gUng2 VG9rZW4tPlBhY2tldC5SeERhdGEtDQo+ID5GcmFnbWVudFRhYmxlWzBdLkZyYWdtZW50TGVuZ3Ro Ow0KPiArICAgICAgICBGcmFnbWVudC5CdWxrID0gKFVJTlQ4ICopIFJ4NlRva2VuLT5QYWNrZXQu UnhEYXRhLQ0KPiA+RnJhZ21lbnRUYWJsZVswXS5GcmFnbWVudEJ1ZmZlcjsNCj4gKyAgICAgIH0g ZWxzZSB7DQo+ICsgICAgICAgIGlmIChGcmFnbWVudC5CdWxrICE9IE5VTEwpIHsNCj4gKyAgICAg ICAgICBGcmVlUG9vbCAoRnJhZ21lbnQuQnVsayk7DQo+ICsgICAgICAgICAgRnJhZ21lbnQuQnVs ayA9IE5VTEw7DQo+ICsgICAgICAgIH0NCj4gKw0KPiArICAgICAgICBTdGF0dXMgPSBIdHRwc1Jl Y2VpdmUgKEh0dHBJbnN0YW5jZSwgJkZyYWdtZW50LCBUaW1lb3V0KTsNCj4gKyAgICAgICAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgICAgIERFQlVHICgoRUZJX0RfRVJST1Is ICJUY3A2IHJlY2VpdmUgZmFpbGVkOiAlclxuIiwgU3RhdHVzKSk7DQo+ICsgICAgICAgICAgcmV0 dXJuIFN0YXR1czsNCj4gKyAgICAgICAgfQ0KPiAgICAgICAgfQ0KPiANCj4gLSAgICAgIGlmICgh SHR0cEluc3RhbmNlLT5Jc1J4RG9uZSkgew0KPiAtICAgICAgICAvLw0KPiAtICAgICAgICAvLyBD YW5jbGUgdGhlIFRva2VuIGJlZm9yZSBjbG9zZSBpdHMgRXZlbnQuDQo+IC0gICAgICAgIC8vDQo+ IC0gICAgICAgIFRjcDYtPkNhbmNlbCAoSHR0cEluc3RhbmNlLT5UY3A2LCAmUng2VG9rZW4tPkNv bXBsZXRpb25Ub2tlbik7DQo+IC0gICAgICAgIGdCUy0+Q2xvc2VFdmVudCAoUng2VG9rZW4tPkNv bXBsZXRpb25Ub2tlbi5FdmVudCk7DQo+IC0gICAgICAgIFJ4NlRva2VuLT5Db21wbGV0aW9uVG9r ZW4uU3RhdHVzID0gRUZJX1RJTUVPVVQ7DQo+IC0gICAgICB9DQo+IC0NCj4gLSAgICAgIFN0YXR1 cyA9IFJ4NlRva2VuLT5Db21wbGV0aW9uVG9rZW4uU3RhdHVzOw0KPiAtICAgICAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiAtICAgICAgICByZXR1cm4gU3RhdHVzOw0KPiAtICAgICAgfQ0K PiAtDQo+ICAgICAgICAvLw0KPiAgICAgICAgLy8gQXBwZW5kIHRoZSByZXNwb25zZSBzdHJpbmcu DQo+ICAgICAgICAvLw0KPiAtICAgICAgKkJ1ZmZlclNpemUgPSAoKlNpemVvZkhlYWRlcnMpICsg Ung2VG9rZW4tPlBhY2tldC5SeERhdGEtDQo+ID5GcmFnbWVudFRhYmxlWzBdLkZyYWdtZW50TGVu Z3RoOw0KPiArICAgICAgKkJ1ZmZlclNpemUgPSAqU2l6ZW9mSGVhZGVycyArIEZyYWdtZW50Lkxl bjsNCj4gICAgICAgIEJ1ZmZlciAgICAgID0gQWxsb2NhdGVaZXJvUG9vbCAoKkJ1ZmZlclNpemUp Ow0KPiAgICAgICAgaWYgKEJ1ZmZlciA9PSBOVUxMKSB7DQo+ICAgICAgICAgIFN0YXR1cyA9IEVG SV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiAgICAgICAgICByZXR1cm4gU3RhdHVzOw0KPiAgICAgICAg fQ0KPiAtDQo+ICsNCj4gICAgICAgIGlmICgqSHR0cEhlYWRlcnMgIT0gTlVMTCkgew0KPiAtICAg ICAgICBDb3B5TWVtIChCdWZmZXIsICpIdHRwSGVhZGVycywgKCpTaXplb2ZIZWFkZXJzKSk7DQo+ ICsgICAgICAgIENvcHlNZW0gKEJ1ZmZlciwgKkh0dHBIZWFkZXJzLCAqU2l6ZW9mSGVhZGVycyk7 DQo+ICAgICAgICAgIEZyZWVQb29sICgqSHR0cEhlYWRlcnMpOw0KPiAgICAgICAgfQ0KPiAtDQo+ ICsNCj4gICAgICAgIENvcHlNZW0gKA0KPiAtICAgICAgICBCdWZmZXIgKyAoKlNpemVvZkhlYWRl cnMpLA0KPiAtICAgICAgICBSeDZUb2tlbi0+UGFja2V0LlJ4RGF0YS0+RnJhZ21lbnRUYWJsZVsw XS5GcmFnbWVudEJ1ZmZlciwNCj4gLSAgICAgICAgUng2VG9rZW4tPlBhY2tldC5SeERhdGEtPkZy YWdtZW50VGFibGVbMF0uRnJhZ21lbnRMZW5ndGgNCj4gKyAgICAgICAgQnVmZmVyICsgKlNpemVv ZkhlYWRlcnMsDQo+ICsgICAgICAgIEZyYWdtZW50LkJ1bGssDQo+ICsgICAgICAgIEZyYWdtZW50 Lkxlbg0KPiAgICAgICAgICApOw0KPiAtICAgICAgKkh0dHBIZWFkZXJzICAgICA9IEJ1ZmZlcjsN Cj4gLSAgICAgICpTaXplb2ZIZWFkZXJzICA9ICpCdWZmZXJTaXplOw0KPiAtDQo+ICsgICAgICAq SHR0cEhlYWRlcnMgICA9IEJ1ZmZlcjsNCj4gKyAgICAgICpTaXplb2ZIZWFkZXJzID0gKkJ1ZmZl clNpemU7DQo+ICsNCj4gICAgICAgIC8vDQo+ICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHdlIHJl Y2VpdmVkIGVuZCBvZiBIVFRQIGhlYWRlcnMuDQo+ICAgICAgICAvLw0KPiAtICAgICAgKkVuZG9m SGVhZGVyID0gQXNjaWlTdHJTdHIgKCpIdHRwSGVhZGVycywgSFRUUF9FTkRfT0ZfSERSX1NUUik7 DQo+IC0NCj4gKyAgICAgICpFbmRvZkhlYWRlciA9IEFzY2lpU3RyU3RyICgqSHR0cEhlYWRlcnMs IEhUVFBfRU5EX09GX0hEUl9TVFIpOw0KPiArICAgIH07DQo+ICsNCj4gKyAgICAvLw0KPiArICAg IC8vIEZyZWUgdGhlIGJ1ZmZlci4NCj4gKyAgICAvLw0KPiArICAgIGlmIChSeDZUb2tlbiAhPSBO VUxMICYmIFJ4NlRva2VuLT5QYWNrZXQuUnhEYXRhICE9IE5VTEwgJiYNCj4gUng2VG9rZW4tPlBh Y2tldC5SeERhdGEtPkZyYWdtZW50VGFibGVbMF0uRnJhZ21lbnRCdWZmZXIgIT0gTlVMTCkgew0K PiArICAgICAgRnJlZVBvb2wgKFJ4NlRva2VuLT5QYWNrZXQuUnhEYXRhLQ0KPiA+RnJhZ21lbnRU YWJsZVswXS5GcmFnbWVudEJ1ZmZlcik7DQo+ICsgICAgICBSeDZUb2tlbi0+UGFja2V0LlJ4RGF0 YS0+RnJhZ21lbnRUYWJsZVswXS5GcmFnbWVudEJ1ZmZlciA9IE5VTEw7DQo+ICsgICAgICBGcmFn bWVudC5CdWxrID0gTlVMTDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZiAoRnJhZ21lbnQuQnVs ayAhPSBOVUxMKSB7DQo+ICsgICAgICBGcmVlUG9vbCAoRnJhZ21lbnQuQnVsayk7DQo+ICsgICAg ICBGcmFnbWVudC5CdWxrID0gTlVMTDsNCj4gICAgICB9DQo+IC0gICAgRnJlZVBvb2wgKFJ4NlRv a2VuLT5QYWNrZXQuUnhEYXRhLT5GcmFnbWVudFRhYmxlWzBdLkZyYWdtZW50QnVmZmVyKTsNCj4g LSAgICBSeDZUb2tlbi0+UGFja2V0LlJ4RGF0YS0+RnJhZ21lbnRUYWJsZVswXS5GcmFnbWVudEJ1 ZmZlciA9IE5VTEw7DQo+ICAgIH0NCj4gDQo+ICAgIC8vDQo+ICAgIC8vIFNraXAgdGhlIENSTEYg YWZ0ZXIgdGhlIEhUVFAgaGVhZGVycy4NCj4gICAgLy8NCj4gZGlmZiAtLWdpdCBhL05ldHdvcmtQ a2cvSHR0cER4ZS9IdHRwUHJvdG8uaA0KPiBiL05ldHdvcmtQa2cvSHR0cER4ZS9IdHRwUHJvdG8u aA0KPiBpbmRleCBlMWZkNzg1Li5lM2IzMjc1IDEwMDY0NA0KPiAtLS0gYS9OZXR3b3JrUGtnL0h0 dHBEeGUvSHR0cFByb3RvLmgNCj4gKysrIGIvTmV0d29ya1BrZy9IdHRwRHhlL0h0dHBQcm90by5o DQo+IEBAIC04MSwxMCArODEsMjQgQEAgdHlwZWRlZiBzdHJ1Y3Qgew0KPiAgICBCT09MRUFOICAg ICAgICAgICAgICAgICAgICAgICBJc1J4RG9uZTsNCj4gICAgVUlOVE4gICAgICAgICAgICAgICAg ICAgICAgICAgQm9keUxlbjsNCj4gICAgRUZJX0hUVFBfTUVUSE9EICAgICAgICAgICAgICAgTWV0 aG9kOw0KPiAgfSBIVFRQX1RDUF9UT0tFTl9XUkFQOw0KPiANCj4gK3R5cGVkZWYgc3RydWN0IHsN Cj4gKyAgRUZJX1RMU19WRVJTSU9OICAgICAgICAgICAgICAgVmVyc2lvbjsNCj4gKyAgRUZJX1RM U19DT05ORUNUSU9OX0VORCAgICAgICAgQ29ubmVjdGlvbkVuZDsNCj4gKyAgRUZJX1RMU19WRVJJ RlkgICAgICAgICAgICAgICAgVmVyaWZ5TWV0aG9kOw0KPiArICBFRklfVExTX1NFU1NJT05fU1RB VEUgICAgICAgICBTZXNzaW9uU3RhdGU7DQo+ICsNCj4gKyAgVk9JRCAgICAgICAgICAgICAgICAg ICAgICAgICAgKkNBQ2VydDsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgQ0FD ZXJ0U2l6ZTsNCj4gKyAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgKkNsaWVudENlcnQ7 DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIENsaWVudENlcnRTaXplOw0KPiAr ICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAqQ2xpZW50UHJpdmF0ZUtleTsNCj4gKyAg VUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgQ2xpZW50UHJpdmF0ZUtleVNpemU7DQo+ICt9 IFRMU19DT05GSUdfREFUQTsNCj4gKw0KPiAgdHlwZWRlZiBzdHJ1Y3QgX0hUVFBfUFJPVE9DT0wg ew0KPiAgICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICBTaWduYXR1cmU7DQo+ICAgIEVG SV9IVFRQX1BST1RPQ09MICAgICAgICAgICAgIEh0dHA7DQo+ICAgIEVGSV9IQU5ETEUgICAgICAg ICAgICAgICAgICAgIEhhbmRsZTsNCj4gICAgSFRUUF9TRVJWSUNFICAgICAgICAgICAgICAgICAg KlNlcnZpY2U7DQo+IEBAIC0xNTEsMTAgKzE2NSwzOSBAQCB0eXBlZGVmIHN0cnVjdCBfSFRUUF9Q Uk9UT0NPTCB7DQo+IA0KPiAgICBORVRfTUFQICAgICAgICAgICAgICAgICAgICAgICBUeFRva2Vu czsNCj4gICAgTkVUX01BUCAgICAgICAgICAgICAgICAgICAgICAgUnhUb2tlbnM7DQo+IA0KPiAg ICBDSEFSOCAgICAgICAgICAgICAgICAgICAgICAgICAqVXJsOw0KPiArDQo+ICsgIC8vDQo+ICsg IC8vIEh0dHBzIFN1cHBvcnQNCj4gKyAgLy8NCj4gKyAgQk9PTEVBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgVXNlSHR0cHM7DQo+ICsNCj4gKyAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAg ICAgICAgVGxzQ2hpbGRIYW5kbGU7IC8vLyBUbHMgQ2hpbGRIYW5kbGUNCj4gKyAgVExTX0NPTkZJ R19EQVRBICAgICAgICAgICAgICAgICAgVGxzQ29uZmlnRGF0YTsNCj4gKyAgRUZJX1RMU19QUk9U T0NPTCAgICAgICAgICAgICAgICAgKlRsczsNCj4gKyAgRUZJX1RMU19DT05GSUdVUkFUSU9OX1BS T1RPQ09MICAgKlRsc0NvbmZpZ3VyYXRpb247DQo+ICsgIEVGSV9UTFNfU0VTU0lPTl9TVEFURSAg ICAgICAgICAgIFRsc1Nlc3Npb25TdGF0ZTsNCj4gKw0KPiArICAvLw0KPiArICAvLyBUbHNUeERh dGEgdXNlZCBmb3IgdHJhbnNtaXR0aW5nIFRMUyByZWxhdGVkIG1lc3NhZ2VzLg0KPiArICAvLw0K PiArICBFRklfVENQNF9JT19UT0tFTiAgICAgICAgICAgICAgICBUY3A0VGxzVHhUb2tlbjsNCj4g KyAgRUZJX1RDUDRfVFJBTlNNSVRfREFUQSAgICAgICAgICAgVGNwNFRsc1R4RGF0YTsNCj4gKyAg RUZJX1RDUDZfSU9fVE9LRU4gICAgICAgICAgICAgICAgVGNwNlRsc1R4VG9rZW47DQo+ICsgIEVG SV9UQ1A2X1RSQU5TTUlUX0RBVEEgICAgICAgICAgIFRjcDZUbHNUeERhdGE7DQo+ICsgIEJPT0xF QU4gICAgICAgICAgICAgICAgICAgICAgICAgIFRsc0lzVHhEb25lOw0KPiArDQo+ICsgIC8vDQo+ ICsgIC8vIFRsc1J4RGF0YSB1c2VkIGZvciByZWNlaXZpbmcgVExTIHJlbGF0ZWQgbWVzc2FnZXMu DQo+ICsgIC8vDQo+ICsgIEVGSV9UQ1A0X0lPX1RPS0VOICAgICAgICAgICAgICAgIFRjcDRUbHNS eFRva2VuOw0KPiArICBFRklfVENQNF9SRUNFSVZFX0RBVEEgICAgICAgICAgICBUY3A0VGxzUnhE YXRhOw0KPiArICBFRklfVENQNl9JT19UT0tFTiAgICAgICAgICAgICAgICBUY3A2VGxzUnhUb2tl bjsNCj4gKyAgRUZJX1RDUDZfUkVDRUlWRV9EQVRBICAgICAgICAgICAgVGNwNlRsc1J4RGF0YTsN Cj4gKyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgVGxzSXNSeERvbmU7DQo+ICB9 IEhUVFBfUFJPVE9DT0w7DQo+IA0KPiAgdHlwZWRlZiBzdHJ1Y3Qgew0KPiAgICBFRklfSFRUUF9U T0tFTiAgICAgICAgICAgICAgICAqSHR0cFRva2VuOw0KPiAgICBIVFRQX1BST1RPQ09MICAgICAg ICAgICAgICAgICAqSHR0cEluc3RhbmNlOw0KPiBAQCAtMzUwLDExICszOTMsMTIgQEAgSHR0cENv bmZpZ3VyZVRjcDYgKA0KPiAgICBJTiAgSFRUUF9QUk9UT0NPTCAgICAgICAgKkh0dHBJbnN0YW5j ZSwNCj4gICAgSU4gIEhUVFBfVE9LRU5fV1JBUCAgICAgICpXcmFwDQo+ICAgICk7DQo+IA0KPiAg LyoqDQo+IC0gIENoZWNrIGV4aXN0aW5nIFRDUCBjb25uZWN0aW9uLCBpZiBpbiBlcnJvciBzdGF0 ZSwgcmVjZW92ZXIgVENQNCBjb25uZWN0aW9uLg0KPiArICBDaGVjayBleGlzdGluZyBUQ1AgY29u bmVjdGlvbiwgaWYgaW4gZXJyb3Igc3RhdGUsIHJlY292ZXIgVENQNCBjb25uZWN0aW9uLg0KPiBU aGVuLA0KPiArICBjb25uZWN0IG9uZSBUTFMgc2Vzc2lvbiBpZiByZXF1aXJlZC4NCj4gDQo+ICAg IEBwYXJhbVtpbl0gIEh0dHBJbnN0YW5jZSAgICAgICBUaGUgSFRUUCBpbnN0YW5jZSBwcml2YXRl IGRhdGEuDQo+IA0KPiAgICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIFRDUCBj b25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLg0KPiAgICBAcmV0dmFsIEVGSV9OT1RfUkVBRFkgICAg ICAgICAgVENQNCBwcm90b2NvbCBjaGlsZCBpcyBub3QgY3JlYXRlZCBvcg0KPiBjb25maWd1cmVk Lg0KPiBAQCAtMzY1LDExICs0MDksMTIgQEAgRUZJX1NUQVRVUw0KPiAgSHR0cENvbm5lY3RUY3A0 ICgNCj4gICAgSU4gIEhUVFBfUFJPVE9DT0wgICAgICAgICpIdHRwSW5zdGFuY2UNCj4gICAgKTsN Cj4gDQo+ICAvKioNCj4gLSAgQ2hlY2sgZXhpc3RpbmcgVENQIGNvbm5lY3Rpb24sIGlmIGluIGVy cm9yIHN0YXRlLCByZWNvdmVyIFRDUDYgY29ubmVjdGlvbi4NCj4gKyAgQ2hlY2sgZXhpc3Rpbmcg VENQIGNvbm5lY3Rpb24sIGlmIGluIGVycm9yIHN0YXRlLCByZWNvdmVyIFRDUDYgY29ubmVjdGlv bi4NCj4gVGhlbiwNCj4gKyAgY29ubmVjdCBvbmUgVExTIHNlc3Npb24gaWYgcmVxdWlyZWQuDQo+ IA0KPiAgICBAcGFyYW1baW5dICBIdHRwSW5zdGFuY2UgICAgICAgVGhlIEhUVFAgaW5zdGFuY2Ug cHJpdmF0ZSBkYXRhLg0KPiANCj4gICAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRo ZSBUQ1AgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZC4NCj4gICAgQHJldHZhbCBFRklfTk9UX1JF QURZICAgICAgICAgIFRDUDYgcHJvdG9jb2wgY2hpbGQgaXMgbm90IGNyZWF0ZWQgb3INCj4gY29u ZmlndXJlZC4NCj4gQEAgLTM4MCwxMSArNDI1LDExIEBAIEVGSV9TVEFUVVMNCj4gIEh0dHBDb25u ZWN0VGNwNiAoDQo+ICAgIElOICBIVFRQX1BST1RPQ09MICAgICAgICAqSHR0cEluc3RhbmNlDQo+ ICAgICk7DQo+IA0KPiAgLyoqDQo+IC0gIFNlbmQgdGhlIEhUVFAgbWVzc2FnZSB0aHJvdWdoIFRD UDQgb3IgVENQNi4NCj4gKyAgU2VuZCB0aGUgSFRUUCBvciBIVFRQUyBtZXNzYWdlIHRocm91Z2gg VENQNCBvciBUQ1A2Lg0KPiANCj4gICAgQHBhcmFtW2luXSAgSHR0cEluc3RhbmNlICAgICAgIFRo ZSBIVFRQIGluc3RhbmNlIHByaXZhdGUgZGF0YS4NCj4gICAgQHBhcmFtW2luXSAgV3JhcCAgICAg ICAgICAgICAgIFRoZSBIVFRQIHRva2VuJ3Mgd3JhcCBkYXRhLg0KPiAgICBAcGFyYW1baW5dICBU eFN0cmluZyAgICAgICAgICAgQnVmZmVyIGNvbnRhaW5pbmcgdGhlIEhUVFAgbWVzc2FnZSBzdHJp bmcuDQo+ICAgIEBwYXJhbVtpbl0gIFR4U3RyaW5nTGVuICAgICAgICBMZW5ndGggb2YgdGhlIEhU VFAgbWVzc2FnZSBzdHJpbmcgaW4gYnl0ZXMuDQo+IEBAIC00NDEsMjkgKzQ4NiwzMSBAQCBIdHRw VGNwTm90UmVhZHkgKA0KPiAgICBJTiBORVRfTUFQX0lURU0gICAgICAgICAgICpJdGVtLA0KPiAg ICBJTiBWT0lEICAgICAgICAgICAgICAgICAgICpDb250ZXh0DQo+ICAgICk7DQo+IA0KPiAgLyoq DQo+IC0gIEluaXRpYWxpemUgVENQIHJlbGF0ZWQgZGF0YS4NCj4gKyAgSW5pdGlhbGl6ZSBIdHRw IHNlc3Npb24uDQo+IA0KPiAgICBAcGFyYW1baW5dICBIdHRwSW5zdGFuY2UgICAgICAgVGhlIEhU VFAgaW5zdGFuY2UgcHJpdmF0ZSBkYXRhLg0KPiAgICBAcGFyYW1baW5dICBXcmFwICAgICAgICAg ICAgICAgVGhlIEhUVFAgdG9rZW4ncyB3cmFwIGRhdGEuDQo+IC0gIEBwYXJhbVtpbl0gIENvbmZp Z3VyZSAgICAgICAgICBUaGUgRmxhZyBpbmRpY2F0ZXMgd2hldGhlciB0aGUgZmlyc3QgdGltZSB0 bw0KPiBpbml0aWFsaXplIFRjcC4NCj4gKyAgQHBhcmFtW2luXSAgQ29uZmlndXJlICAgICAgICAg IFRoZSBGbGFnIGluZGljYXRlcyB3aGV0aGVyIG5lZWQgdG8gaW5pdGlhbGl6ZQ0KPiBzZXNzaW9u Lg0KPiArICBAcGFyYW1baW5dICBUbHNDb25maWd1cmUgICAgICAgVGhlIEZsYWcgaW5kaWNhdGVz IHdoZXRoZXIgaXQncyB0aGUgbmV3IFRscw0KPiBzZXNzaW9uLg0KPiANCj4gLSAgQHJldHZhbCBF RklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBpbml0aWFsaXphdGlvbiBvZiBUQ1AgaW5zdGFuY2Ug aXMgZG9uZS4NCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBpbml0aWFs aXphdGlvbiBvZiBzZXNzaW9uIGlzIGRvbmUuDQo+ICAgIEByZXR2YWwgT3RoZXJzICAgICAgICAg ICAgICAgICBPdGhlciBlcnJvciBhcyBpbmRpY2F0ZWQuDQo+IA0KPiAgKiovDQo+ICBFRklfU1RB VFVTDQo+IC1IdHRwSW5pdFRjcCAoDQo+ICtIdHRwSW5pdFNlc3Npb24gKA0KPiAgICBJTiAgSFRU UF9QUk9UT0NPTCAgICAqSHR0cEluc3RhbmNlLA0KPiAgICBJTiAgSFRUUF9UT0tFTl9XUkFQICAq V3JhcCwNCj4gLSAgSU4gIEJPT0xFQU4gICAgICAgICAgQ29uZmlndXJlDQo+ICsgIElOICBCT09M RUFOICAgICAgICAgIENvbmZpZ3VyZSwNCj4gKyAgSU4gIEJPT0xFQU4gICAgICAgICAgVGxzQ29u ZmlndXJlDQo+ICAgICk7DQo+IA0KPiAgLyoqDQo+IC0gIFRyYW5zbWl0IHRoZSBIVFRQIG1zc2Fn ZSBieSBwcm9jZXNzaW5nIHRoZSBhc3NvY2lhdGVkIEhUVFAgdG9rZW4uDQo+ICsgIFRyYW5zbWl0 IHRoZSBIVFRQIG9yIEhUVFBTIG1zc2FnZSBieSBwcm9jZXNzaW5nIHRoZSBhc3NvY2lhdGVkIEhU VFANCj4gdG9rZW4uDQo+IA0KPiAgICBAcGFyYW1baW5dICBNYXAgICAgICAgICAgICAgICAgVGhl IGNvbnRhaW5lciBvZiBUeFRva2VuIG9yIFR4NlRva2VuLg0KPiAgICBAcGFyYW1baW5dICBJdGVt ICAgICAgICAgICAgICAgQ3VycmVudCBpdGVtIHRvIGNoZWNrIGFnYWluc3QuDQo+ICAgIEBwYXJh bVtpbl0gIENvbnRleHQgICAgICAgICAgICBUaGUgVG9rZW4gdG8gY2hlY2sgYWdhaW5pc3QuDQo+ IA0KPiBkaWZmIC0tZ2l0IGEvTmV0d29ya1BrZy9IdHRwRHhlL0h0dHBzU3VwcG9ydC5jDQo+IGIv TmV0d29ya1BrZy9IdHRwRHhlL0h0dHBzU3VwcG9ydC5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQo+IGluZGV4IDAwMDAwMDAuLjE3N2I5YTgNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9OZXR3 b3JrUGtnL0h0dHBEeGUvSHR0cHNTdXBwb3J0LmMNCj4gQEAgLTAsMCArMSwxNjkyIEBADQo+ICsv KiogQGZpbGUNCj4gKyAgTWlzY2VsbGFuZW91cyByb3V0aW5lcyBzcGVjaWZpYyB0byBIdHRwcyBm b3IgSHR0cER4ZSBkcml2ZXIuDQo+ICsNCj4gK0NvcHlyaWdodCAoYykgMjAxNiwgSW50ZWwgQ29y cG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArKEMpIENvcHlyaWdodCAyMDE2 IEhld2xldHQgUGFja2FyZCBFbnRlcnByaXNlIERldmVsb3BtZW50IExQPEJSPg0KPiArVGhpcyBw cm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPiArYXJlIGxpY2Vuc2VkIGFu ZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJT RA0KPiBMaWNlbnNlDQo+ICt3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRo ZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+IGZvdW5kIGF0DQo+ICtodHRwOi8v b3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+ICsNCj4gK1RIRSBQUk9H UkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiDQo+ IEJBU0lTLA0KPiArV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkg S0lORCwgRUlUSEVSDQo+IEVYUFJFU1MgT1IgSU1QTElFRC4NCj4gKw0KPiArKiovDQo+ICsNCj4g KyNpbmNsdWRlICJIdHRwRHJpdmVyLmgiDQo+ICsNCj4gKy8qKg0KPiArICBSZXR1cm5zIHRoZSBm aXJzdCBvY2N1cnJlbmNlIG9mIGEgTnVsbC10ZXJtaW5hdGVkIEFTQ0lJIHN1Yi1zdHJpbmcgaW4g YSBOdWxsLQ0KPiB0ZXJtaW5hdGVkDQo+ICsgIEFTQ0lJIHN0cmluZyBhbmQgaWdub3JlIGNhc2Ug ZHVyaW5nIHRoZSBzZWFyY2ggcHJvY2Vzcy4NCj4gKw0KPiArICBUaGlzIGZ1bmN0aW9uIHNjYW5z IHRoZSBjb250ZW50cyBvZiB0aGUgQVNDSUkgc3RyaW5nIHNwZWNpZmllZCBieSBTdHJpbmcNCj4g KyAgYW5kIHJldHVybnMgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgU2VhcmNoU3RyaW5nIGFuZCBp Z25vcmUgY2FzZSBkdXJpbmcgdGhlDQo+IHNlYXJjaCBwcm9jZXNzLg0KPiArICBJZiBTZWFyY2hT dHJpbmcgaXMgbm90IGZvdW5kIGluIFN0cmluZywgdGhlbiBOVUxMIGlzIHJldHVybmVkLiBJZiB0 aGUgbGVuZ3RoIG9mDQo+IFNlYXJjaFN0cmluZw0KPiArICBpcyB6ZXJvLCB0aGVuIFN0cmluZyBp cyByZXR1cm5lZC4NCj4gKw0KPiArICBJZiBTdHJpbmcgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4N Cj4gKyAgSWYgU2VhcmNoU3RyaW5nIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+ICsNCj4gKyAg QHBhcmFtW2luXSAgU3RyaW5nICAgICAgICAgIEEgcG9pbnRlciB0byBhIE51bGwtdGVybWluYXRl ZCBBU0NJSSBzdHJpbmcuDQo+ICsgIEBwYXJhbVtpbl0gIFNlYXJjaFN0cmluZyAgICBBIHBvaW50 ZXIgdG8gYSBOdWxsLXRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5nIHRvDQo+IHNlYXJjaCBmb3IuDQo+ ICsNCj4gKyAgQHJldHZhbCBOVUxMICAgICAgICAgICAgSWYgdGhlIFNlYXJjaFN0cmluZyBkb2Vz IG5vdCBhcHBlYXIgaW4gU3RyaW5nLg0KPiArICBAcmV0dmFsIG90aGVycyAgICAgICAgICBJZiB0 aGVyZSBpcyBhIG1hdGNoIHJldHVybiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZg0KPiBTZWFyY2hp bmdTdHJpbmcuDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBsZW5ndGggb2Yg U2VhcmNoU3RyaW5nIGlzIHplcm8scmV0dXJuIFN0cmluZy4NCj4gKw0KPiArKiovDQo+ICtDSEFS OCAqDQo+ICtBc2NpaVN0ckNhc2VTdHIgKA0KPiArICBJTiAgICAgIENPTlNUIENIQVI4ICAgICAg ICAgICAgICAgKlN0cmluZywNCj4gKyAgSU4gICAgICBDT05TVCBDSEFSOCAgICAgICAgICAgICAg ICpTZWFyY2hTdHJpbmcNCj4gKyAgKQ0KPiArew0KPiArICBDT05TVCBDSEFSOCAqRmlyc3RNYXRj aDsNCj4gKyAgQ09OU1QgQ0hBUjggKlNlYXJjaFN0cmluZ1RtcDsNCj4gKw0KPiArICBDSEFSOCBT cmM7DQo+ICsgIENIQVI4IERzdDsNCj4gKw0KPiArICAvLw0KPiArICAvLyBBU1NFUlQgYm90aCBz dHJpbmdzIGFyZSBsZXNzIGxvbmcgdGhhbiBQY2RNYXhpbXVtQXNjaWlTdHJpbmdMZW5ndGgNCj4g KyAgLy8NCj4gKyAgQVNTRVJUIChBc2NpaVN0clNpemUgKFN0cmluZykgIT0gMCk7DQo+ICsgIEFT U0VSVCAoQXNjaWlTdHJTaXplIChTZWFyY2hTdHJpbmcpICE9IDApOw0KPiArDQo+ICsgIGlmICgq U2VhcmNoU3RyaW5nID09ICdcMCcpIHsNCj4gKyAgICByZXR1cm4gKENIQVI4ICopIFN0cmluZzsN Cj4gKyAgfQ0KPiArDQo+ICsgIHdoaWxlICgqU3RyaW5nICE9ICdcMCcpIHsNCj4gKyAgICBTZWFy Y2hTdHJpbmdUbXAgPSBTZWFyY2hTdHJpbmc7DQo+ICsgICAgRmlyc3RNYXRjaCA9IFN0cmluZzsN Cj4gKw0KPiArICAgIHdoaWxlICgoKlNlYXJjaFN0cmluZ1RtcCAhPSAnXDAnKQ0KPiArICAgICAg ICAgICAgJiYgKCpTdHJpbmcgIT0gJ1wwJykpIHsNCj4gKyAgICAgIFNyYyA9ICpTdHJpbmc7DQo+ ICsgICAgICBEc3QgPSAqU2VhcmNoU3RyaW5nVG1wOw0KPiArDQo+ICsgICAgICBpZiAoKFNyYyA+ PSAnQScpICYmIChTcmMgPD0gJ1onKSkgew0KPiArICAgICAgICBTcmMgLT0gKCdBJyAtICdhJyk7 DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIGlmICgoRHN0ID49ICdBJykgJiYgKERzdCA8PSAn WicpKSB7DQo+ICsgICAgICAgIERzdCAtPSAoJ0EnIC0gJ2EnKTsNCj4gKyAgICAgIH0NCj4gKw0K PiArICAgICAgaWYgKFNyYyAhPSBEc3QpIHsNCj4gKyAgICAgICAgYnJlYWs7DQo+ICsgICAgICB9 DQo+ICsNCj4gKyAgICAgIFN0cmluZysrOw0KPiArICAgICAgU2VhcmNoU3RyaW5nVG1wKys7DQo+ ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKCpTZWFyY2hTdHJpbmdUbXAgPT0gJ1wwJykgew0KPiAr ICAgICAgcmV0dXJuIChDSEFSOCAqKSBGaXJzdE1hdGNoOw0KPiArICAgIH0NCj4gKw0KPiArICAg IFN0cmluZyA9IEZpcnN0TWF0Y2ggKyAxOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIE5VTEw7 DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZnJlZSB0 aGUgbmV0IGJ1ZmZlciBsaXN0Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIEFyZyBUaGUgb3BhcXVl IHBhcmFtZXRlci4NCj4gKw0KPiArKiovDQo+ICtWT0lEDQo+ICtFRklBUEkNCj4gK0ZyZWVOYnVm TGlzdCAoDQo+ICsgIElOIFZPSUQgKkFyZw0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoQXJn ICE9IE5VTEwpOw0KPiArDQo+ICsgIE5ldGJ1ZkZyZWVMaXN0ICgoTElTVF9FTlRSWSAqKSBBcmcp Ow0KPiArICBGcmVlUG9vbCAoQXJnKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIENoZWNrIHdo ZXRoZXIgdGhlIFVybCBpcyBmcm9tIEh0dHBzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICAgVXJs ICAgICAgICAgICAgIFRoZSBwb2ludGVyIHRvIGEgSFRUUCBvciBIVFRQUyBVUkwgc3RyaW5nLg0K PiArDQo+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICAgICAgICAgIFRoZSBVcmwgaXMgZnJvbSBI VFRQUy4NCj4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgICAgICAgICAgVGhlIFVybCBpcyBmcm9t IEhUVFAuDQo+ICsNCj4gKyoqLw0KPiArQk9PTEVBTg0KPiArSXNIdHRwc1VybCAoDQo+ICsgIElO IENIQVI4ICAgICpVcmwNCj4gKyAgKQ0KPiArew0KPiArICBDSEFSOCAgKlRtcDsNCj4gKw0KPiAr ICBUbXAgPSBOVUxMOw0KPiArDQo+ICsgIFRtcCA9IEFzY2lpU3RyQ2FzZVN0ciAoVXJsLCBIVFRQ U19GTEFHKTsNCj4gKyAgaWYgKFRtcCAhPSBOVUxMICYmIFRtcCA9PSBVcmwpIHsNCj4gKyAgICBy ZXR1cm4gVFJVRTsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBGQUxTRTsNCj4gK30NCj4gKw0K PiArLyoqDQo+ICsgIENyZWF0ZXMgYSBUbHMgY2hpbGQgaGFuZGxlLCBvcGVuIEVGSV9UTFNfUFJP VE9DT0wgYW5kDQo+IEVGSV9UTFNfQ09ORklHVVJBVElPTl9QUk9UT0NPTC4NCj4gKw0KPiArICBA cGFyYW1baW5dICBJbWFnZUhhbmRsZSAgICAgICAgICAgVGhlIGZpcm13YXJlIGFsbG9jYXRlZCBo YW5kbGUgZm9yIHRoZSBVRUZJDQo+IGltYWdlLg0KPiArICBAcGFyYW1bb3V0XSBUbHNQcm90byAg ICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgRUZJX1RMU19QUk9UT0NPTCBpbnN0YW5jZS4NCj4g KyAgQHBhcmFtW291dF0gVGxzQ29uZmlndXJhdGlvbiAgICAgIFBvaW50ZXIgdG8gdGhlDQo+IEVG SV9UTFNfQ09ORklHVVJBVElPTl9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKw0KPiArICBAcmV0dXJu ICBUaGUgY2hpbGQgaGFuZGxlIHdpdGggb3BlbmVkIEVGSV9UTFNfUFJPVE9DT0wgYW5kDQo+IEVG SV9UTFNfQ09ORklHVVJBVElPTl9QUk9UT0NPTC4NCj4gKw0KPiArKiovDQo+ICtFRklfSEFORExF DQo+ICtFRklBUEkNCj4gK1Rsc0NyZWF0ZUNoaWxkICgNCj4gKyAgSU4gIEVGSV9IQU5ETEUgICAg ICAgICAgICAgICAgICAgICBJbWFnZUhhbmRsZSwNCj4gKyAgT1VUIEVGSV9UTFNfUFJPVE9DT0wg ICAgICAgICAgICAgICAqKlRsc1Byb3RvLA0KPiArICBPVVQgRUZJX1RMU19DT05GSUdVUkFUSU9O X1BST1RPQ09MICoqVGxzQ29uZmlndXJhdGlvbg0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFU VVMgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRUZJX1NFUlZJQ0VfQklORElOR19Q Uk9UT0NPTCAgKlRsc1NiOw0KPiArICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICBUbHND aGlsZEhhbmRsZTsNCj4gKw0KPiArICBUbHNTYiAgICAgICAgICA9IE5VTEw7DQo+ICsgIFRsc0No aWxkSGFuZGxlID0gMDsNCj4gKw0KPiArICAvLw0KPiArICAvLyBMb2NhdGUgVGxzU2VydmljZUJp bmRpbmcgcHJvdG9jb2wuDQo+ICsgIC8vDQo+ICsgIGdCUy0+TG9jYXRlUHJvdG9jb2wgKA0KPiAr ICAgICAmZ0VmaVRsc1NlcnZpY2VCaW5kaW5nUHJvdG9jb2xHdWlkLA0KPiArICAgICBOVUxMLA0K PiArICAgICAoVk9JRCAqKikgJlRsc1NiDQo+ICsgICAgICk7DQo+ICsgIGlmIChUbHNTYiA9PSBO VUxMKSB7DQo+ICsgICAgcmV0dXJuIE5VTEw7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBU bHNTYi0+Q3JlYXRlQ2hpbGQgKFRsc1NiLCAmVGxzQ2hpbGRIYW5kbGUpOw0KPiArICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIE5VTEw7DQo+ICsgIH0NCj4gKw0KPiAr ICBTdGF0dXMgPSBnQlMtPk9wZW5Qcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgICAgICBUbHND aGlsZEhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICZnRWZpVGxzUHJvdG9jb2xHdWlkLA0K PiArICAgICAgICAgICAgICAgICAgKFZPSUQgKiopIFRsc1Byb3RvLA0KPiArICAgICAgICAgICAg ICAgICAgSW1hZ2VIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICBUbHNDaGlsZEhhbmRsZSwN Cj4gKyAgICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0dFVF9QUk9UT0NPTA0KPiAr ICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiAr ICAgIFRsc1NiLT5EZXN0cm95Q2hpbGQgKFRsc1NiLCBUbHNDaGlsZEhhbmRsZSk7DQo+ICsgICAg cmV0dXJuIE5VTEw7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBnQlMtPk9wZW5Qcm90b2Nv bCAoDQo+ICsgICAgICAgICAgICAgICAgICBUbHNDaGlsZEhhbmRsZSwNCj4gKyAgICAgICAgICAg ICAgICAgICZnRWZpVGxzQ29uZmlndXJhdGlvblByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAg ICAgICAgIChWT0lEICoqKSBUbHNDb25maWd1cmF0aW9uLA0KPiArICAgICAgICAgICAgICAgICAg SW1hZ2VIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICBUbHNDaGlsZEhhbmRsZSwNCj4gKyAg ICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RPQ09MX0dFVF9QUk9UT0NPTA0KPiArICAgICAg ICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIFRs c1NiLT5EZXN0cm95Q2hpbGQgKFRsc1NiLCBUbHNDaGlsZEhhbmRsZSk7DQo+ICsgICAgcmV0dXJu IE5VTEw7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gVGxzQ2hpbGRIYW5kbGU7DQo+ICt9DQo+ ICsNCj4gKy8qKg0KPiArICBDcmVhdGUgZXZlbnQgZm9yIHRoZSBUTFMgcmVjZWl2ZSBhbmQgdHJh bnNtaXQgdG9rZW5zIHdoaWNoIGFyZSB1c2VkIHRvDQo+IHJlY2VpdmUgYW5kDQo+ICsgIHRyYW5z bWl0IFRMUyByZWxhdGVkIG1lc3NhZ2VzLg0KPiArDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSAgSHR0 cEluc3RhbmNlICAgICAgIFBvaW50ZXIgdG8gSFRUUF9QUk9UT0NPTCBzdHJ1Y3R1cmUuDQo+ICsN Cj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBldmVudHMgYXJlIGNyZWF0 ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIG90aGVycyAgICAgICAgICAgICAgICAgT3Ro ZXIgZXJyb3IgYXMgaW5kaWNhdGVkLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VG SUFQSQ0KPiArVGxzQ3JlYXRlVHhSeEV2ZW50ICgNCj4gKyAgSU4gT1VUIEhUVFBfUFJPVE9DT0wg ICAgICAqSHR0cEluc3RhbmNlDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAg ICAgICAgICBTdGF0dXM7DQo+ICsNCj4gKyAgaWYgKCFIdHRwSW5zdGFuY2UtPkxvY2FsQWRkcmVz c0lzSVB2Nikgew0KPiArICAgIC8vDQo+ICsgICAgLy8gRm9yIFRjcDRUbHNUeFRva2VuLg0KPiAr ICAgIC8vDQo+ICsgICAgU3RhdHVzID0gZ0JTLT5DcmVhdGVFdmVudCAoDQo+ICsgICAgICAgICAg ICAgICAgICAgIEVWVF9OT1RJRllfU0lHTkFMLA0KPiArICAgICAgICAgICAgICAgICAgICBUUExf Tk9USUZZLA0KPiArICAgICAgICAgICAgICAgICAgICBIdHRwQ29tbW9uTm90aWZ5LA0KPiArICAg ICAgICAgICAgICAgICAgICAmSHR0cEluc3RhbmNlLT5UbHNJc1R4RG9uZSwNCj4gKyAgICAgICAg ICAgICAgICAgICAgJkh0dHBJbnN0YW5jZS0+VGNwNFRsc1R4VG9rZW4uQ29tcGxldGlvblRva2Vu LkV2ZW50DQo+ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAo U3RhdHVzKSkgew0KPiArICAgICAgZ290byBFUlJPUjsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBI dHRwSW5zdGFuY2UtPlRjcDRUbHNUeERhdGEuUHVzaCA9IFRSVUU7DQo+ICsgICAgSHR0cEluc3Rh bmNlLT5UY3A0VGxzVHhEYXRhLlVyZ2VudCA9IEZBTFNFOw0KPiArICAgIEh0dHBJbnN0YW5jZS0+ VGNwNFRsc1R4RGF0YS5EYXRhTGVuZ3RoID0gMDsNCj4gKyAgICBIdHRwSW5zdGFuY2UtPlRjcDRU bHNUeERhdGEuRnJhZ21lbnRDb3VudCA9IDE7DQo+ICsgICAgSHR0cEluc3RhbmNlLT5UY3A0VGxz VHhEYXRhLkZyYWdtZW50VGFibGVbMF0uRnJhZ21lbnRMZW5ndGggPQ0KPiBIdHRwSW5zdGFuY2Ut PlRjcDRUbHNUeERhdGEuRGF0YUxlbmd0aDsNCj4gKyAgICBIdHRwSW5zdGFuY2UtPlRjcDRUbHNU eERhdGEuRnJhZ21lbnRUYWJsZVswXS5GcmFnbWVudEJ1ZmZlciA9IE5VTEw7DQo+ICsgICAgSHR0 cEluc3RhbmNlLT5UY3A0VGxzVHhUb2tlbi5QYWNrZXQuVHhEYXRhID0gJkh0dHBJbnN0YW5jZS0N Cj4gPlRjcDRUbHNUeERhdGE7DQo+ICsgICAgSHR0cEluc3RhbmNlLT5UY3A0VGxzVHhUb2tlbi5D b21wbGV0aW9uVG9rZW4uU3RhdHVzID0NCj4gRUZJX05PVF9SRUFEWTsNCj4gKw0KPiArICAgIC8v DQo+ICsgICAgLy8gRm9yIFRjcDRUbHNSeFRva2VuLg0KPiArICAgIC8vDQo+ICsgICAgU3RhdHVz ID0gZ0JTLT5DcmVhdGVFdmVudCAoDQo+ICsgICAgICAgICAgICAgICAgICAgIEVWVF9OT1RJRllf U0lHTkFMLA0KPiArICAgICAgICAgICAgICAgICAgICBUUExfTk9USUZZLA0KPiArICAgICAgICAg ICAgICAgICAgICBIdHRwQ29tbW9uTm90aWZ5LA0KPiArICAgICAgICAgICAgICAgICAgICAmSHR0 cEluc3RhbmNlLT5UbHNJc1J4RG9uZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgJkh0dHBJbnN0 YW5jZS0+VGNwNFRsc1J4VG9rZW4uQ29tcGxldGlvblRva2VuLkV2ZW50DQo+ICsgICAgICAgICAg ICAgICAgICAgICk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAg Z290byBFUlJPUjsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBIdHRwSW5zdGFuY2UtPlRjcDRUbHNS eERhdGEuRGF0YUxlbmd0aCAgICAgICAgICAgICAgICAgICAgICAgPSAwOw0KPiArICAgIEh0dHBJ bnN0YW5jZS0+VGNwNFRsc1J4RGF0YS5GcmFnbWVudENvdW50ICAgICAgICAgICAgICAgICAgICA9 IDE7DQo+ICsgICAgSHR0cEluc3RhbmNlLT5UY3A0VGxzUnhEYXRhLkZyYWdtZW50VGFibGVbMF0u RnJhZ21lbnRMZW5ndGggID0NCj4gSHR0cEluc3RhbmNlLT5UY3A0VGxzUnhEYXRhLkRhdGFMZW5n dGggOw0KPiArICAgIEh0dHBJbnN0YW5jZS0+VGNwNFRsc1J4RGF0YS5GcmFnbWVudFRhYmxlWzBd LkZyYWdtZW50QnVmZmVyICA9IE5VTEw7DQo+ICsgICAgSHR0cEluc3RhbmNlLT5UY3A0VGxzUnhU b2tlbi5QYWNrZXQuUnhEYXRhICAgICAgICAgID0gJkh0dHBJbnN0YW5jZS0NCj4gPlRjcDRUbHNS eERhdGE7DQo+ICsgICAgSHR0cEluc3RhbmNlLT5UY3A0VGxzUnhUb2tlbi5Db21wbGV0aW9uVG9r ZW4uU3RhdHVzID0NCj4gRUZJX05PVF9SRUFEWTsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICAvLw0K PiArICAgIC8vIEZvciBUY3A2VGxzVHhUb2tlbi4NCj4gKyAgICAvLw0KPiArICAgIFN0YXR1cyA9 IGdCUy0+Q3JlYXRlRXZlbnQgKA0KPiArICAgICAgICAgICAgICAgICAgICBFVlRfTk9USUZZX1NJ R05BTCwNCj4gKyAgICAgICAgICAgICAgICAgICAgVFBMX05PVElGWSwNCj4gKyAgICAgICAgICAg ICAgICAgICAgSHR0cENvbW1vbk5vdGlmeSwNCj4gKyAgICAgICAgICAgICAgICAgICAgJkh0dHBJ bnN0YW5jZS0+VGxzSXNUeERvbmUsDQo+ICsgICAgICAgICAgICAgICAgICAgICZIdHRwSW5zdGFu Y2UtPlRjcDZUbHNUeFRva2VuLkNvbXBsZXRpb25Ub2tlbi5FdmVudA0KPiArICAgICAgICAgICAg ICAgICAgICApOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIGdv dG8gRVJST1I7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgSHR0cEluc3RhbmNlLT5UY3A2VGxzVHhE YXRhLlB1c2ggPSBUUlVFOw0KPiArICAgIEh0dHBJbnN0YW5jZS0+VGNwNlRsc1R4RGF0YS5Vcmdl bnQgPSBGQUxTRTsNCj4gKyAgICBIdHRwSW5zdGFuY2UtPlRjcDZUbHNUeERhdGEuRGF0YUxlbmd0 aCA9IDA7DQo+ICsgICAgSHR0cEluc3RhbmNlLT5UY3A2VGxzVHhEYXRhLkZyYWdtZW50Q291bnQg PSAxOw0KPiArICAgIEh0dHBJbnN0YW5jZS0+VGNwNlRsc1R4RGF0YS5GcmFnbWVudFRhYmxlWzBd LkZyYWdtZW50TGVuZ3RoID0NCj4gSHR0cEluc3RhbmNlLT5UY3A2VGxzVHhEYXRhLkRhdGFMZW5n dGg7DQo+ICsgICAgSHR0cEluc3RhbmNlLT5UY3A2VGxzVHhEYXRhLkZyYWdtZW50VGFibGVbMF0u RnJhZ21lbnRCdWZmZXIgPSBOVUxMOw0KPiArICAgIEh0dHBJbnN0YW5jZS0+VGNwNlRsc1R4VG9r ZW4uUGFja2V0LlR4RGF0YSA9ICZIdHRwSW5zdGFuY2UtDQo+ID5UY3A2VGxzVHhEYXRhOw0KPiAr ICAgIEh0dHBJbnN0YW5jZS0+VGNwNlRsc1R4VG9rZW4uQ29tcGxldGlvblRva2VuLlN0YXR1cyA9 DQo+IEVGSV9OT1RfUkVBRFk7DQo+ICsNCj4gKyAgICAvLw0KPiArICAgIC8vIEZvciBUY3A2VGxz UnhUb2tlbi4NCj4gKyAgICAvLw0KPiArICAgIFN0YXR1cyA9IGdCUy0+Q3JlYXRlRXZlbnQgKA0K PiArICAgICAgICAgICAgICAgICAgICBFVlRfTk9USUZZX1NJR05BTCwNCj4gKyAgICAgICAgICAg ICAgICAgICAgVFBMX05PVElGWSwNCj4gKyAgICAgICAgICAgICAgICAgICAgSHR0cENvbW1vbk5v dGlmeSwNCj4gKyAgICAgICAgICAgICAgICAgICAgJkh0dHBJbnN0YW5jZS0+VGxzSXNSeERvbmUs DQo+ICsgICAgICAgICAgICAgICAgICAgICZIdHRwSW5zdGFuY2UtPlRjcDZUbHNSeFRva2VuLkNv bXBsZXRpb25Ub2tlbi5FdmVudA0KPiArICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIGdvdG8gRVJST1I7DQo+ICsgICAgfQ0K PiArDQo+ICsgICAgSHR0cEluc3RhbmNlLT5UY3A2VGxzUnhEYXRhLkRhdGFMZW5ndGggICAgICAg ICAgICAgICAgICAgICAgID0gMDsNCj4gKyAgICBIdHRwSW5zdGFuY2UtPlRjcDZUbHNSeERhdGEu RnJhZ21lbnRDb3VudCAgICAgICAgICAgICAgICAgICAgPSAxOw0KPiArICAgIEh0dHBJbnN0YW5j ZS0+VGNwNlRsc1J4RGF0YS5GcmFnbWVudFRhYmxlWzBdLkZyYWdtZW50TGVuZ3RoICA9DQo+IEh0 dHBJbnN0YW5jZS0+VGNwNlRsc1J4RGF0YS5EYXRhTGVuZ3RoIDsNCj4gKyAgICBIdHRwSW5zdGFu Y2UtPlRjcDZUbHNSeERhdGEuRnJhZ21lbnRUYWJsZVswXS5GcmFnbWVudEJ1ZmZlciAgPSBOVUxM Ow0KPiArICAgIEh0dHBJbnN0YW5jZS0+VGNwNlRsc1J4VG9rZW4uUGFja2V0LlJ4RGF0YSAgICAg ICAgICA9ICZIdHRwSW5zdGFuY2UtDQo+ID5UY3A2VGxzUnhEYXRhOw0KPiArICAgIEh0dHBJbnN0 YW5jZS0+VGNwNlRsc1J4VG9rZW4uQ29tcGxldGlvblRva2VuLlN0YXR1cyA9DQo+IEVGSV9OT1Rf UkVBRFk7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArDQo+ICtFUlJPUjoN Cj4gKyAgLy8NCj4gKyAgLy8gRXJyb3IgaGFuZGxpbmcNCj4gKyAgLy8NCj4gKyAgVGxzQ2xvc2VU eFJ4RXZlbnQgKEh0dHBJbnN0YW5jZSk7DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30N Cj4gKw0KPiArLyoqDQo+ICsgIENsb3NlIGV2ZW50cyBpbiB0aGUgVGxzVHhUb2tlbiBhbmQgVGxz UnhUb2tlbi4NCj4gKw0KPiArICBAcGFyYW1baW5dICBIdHRwSW5zdGFuY2UgICBQb2ludGVyIHRv IEhUVFBfUFJPVE9DT0wgc3RydWN0dXJlLg0KPiArDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK0VGSUFQ SQ0KPiArVGxzQ2xvc2VUeFJ4RXZlbnQgKA0KPiArICBJTiAgSFRUUF9QUk9UT0NPTCAgICAgICAg Kkh0dHBJbnN0YW5jZQ0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoSHR0cEluc3RhbmNlICE9 IE5VTEwpOw0KPiArICBpZiAoIUh0dHBJbnN0YW5jZS0+TG9jYWxBZGRyZXNzSXNJUHY2KSB7DQo+ ICsgICAgaWYgKE5VTEwgIT0gSHR0cEluc3RhbmNlLT5UY3A0VGxzVHhUb2tlbi5Db21wbGV0aW9u VG9rZW4uRXZlbnQpIHsNCj4gKyAgICAgIGdCUy0+Q2xvc2VFdmVudChIdHRwSW5zdGFuY2UtDQo+ ID5UY3A0VGxzVHhUb2tlbi5Db21wbGV0aW9uVG9rZW4uRXZlbnQpOw0KPiArICAgICAgSHR0cElu c3RhbmNlLT5UY3A0VGxzVHhUb2tlbi5Db21wbGV0aW9uVG9rZW4uRXZlbnQgPSBOVUxMOw0KPiAr ICAgIH0NCj4gKw0KPiArICAgIGlmIChOVUxMICE9IEh0dHBJbnN0YW5jZS0+VGNwNFRsc1J4VG9r ZW4uQ29tcGxldGlvblRva2VuLkV2ZW50KSB7DQo+ICsgICAgICBnQlMtPkNsb3NlRXZlbnQgKEh0 dHBJbnN0YW5jZS0NCj4gPlRjcDRUbHNSeFRva2VuLkNvbXBsZXRpb25Ub2tlbi5FdmVudCk7DQo+ ICsgICAgICBIdHRwSW5zdGFuY2UtPlRjcDRUbHNSeFRva2VuLkNvbXBsZXRpb25Ub2tlbi5FdmVu dCA9IE5VTEw7DQo+ICsgICAgfQ0KPiArICB9IGVsc2Ugew0KPiArICAgIGlmIChOVUxMICE9IEh0 dHBJbnN0YW5jZS0+VGNwNlRsc1R4VG9rZW4uQ29tcGxldGlvblRva2VuLkV2ZW50KSB7DQo+ICsg ICAgICBnQlMtPkNsb3NlRXZlbnQoSHR0cEluc3RhbmNlLQ0KPiA+VGNwNlRsc1R4VG9rZW4uQ29t cGxldGlvblRva2VuLkV2ZW50KTsNCj4gKyAgICAgIEh0dHBJbnN0YW5jZS0+VGNwNlRsc1R4VG9r ZW4uQ29tcGxldGlvblRva2VuLkV2ZW50ID0gTlVMTDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBp ZiAoTlVMTCAhPSBIdHRwSW5zdGFuY2UtPlRjcDZUbHNSeFRva2VuLkNvbXBsZXRpb25Ub2tlbi5F dmVudCkgew0KPiArICAgICAgZ0JTLT5DbG9zZUV2ZW50IChIdHRwSW5zdGFuY2UtDQo+ID5UY3A2 VGxzUnhUb2tlbi5Db21wbGV0aW9uVG9rZW4uRXZlbnQpOw0KPiArICAgICAgSHR0cEluc3RhbmNl LT5UY3A2VGxzUnhUb2tlbi5Db21wbGV0aW9uVG9rZW4uRXZlbnQgPSBOVUxMOw0KPiArICAgIH0N Cj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUmVhZCB0aGUgVGxzQ2FDZXJ0aWZpY2F0 ZSB2YXJpYWJsZSBhbmQgY29uZmlndXJlIGl0Lg0KPiArDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSAg SHR0cEluc3RhbmNlICAgICAgIFRoZSBIVFRQIGluc3RhbmNlIHByaXZhdGUgZGF0YS4NCj4gKw0K PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGxzQ2FDZXJ0aWZpY2F0ZSBpcyBj b25maWd1cmVkLg0KPiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgQ2FuJ3QgYWxs b2NhdGUgbWVtb3J5IHJlc291cmNlcy4NCj4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAg ICAgIEZhaWwgdG8gZ2V0ICdUbHNDYUNlcnRpZmljYXRlJyB2YXJpYWJsZS4NCj4gKyAgQHJldHZh bCBPdGhlcnMgICAgICAgICAgICAgICAgIE90aGVyIGVycm9yIGFzIGluZGljYXRlZC4NCj4gKw0K PiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtUbHNDb25maWdDZXJ0aWZpY2F0ZSAoDQo+ICsgIElO IE9VVCBIVFRQX1BST1RPQ09MICAgICAgKkh0dHBJbnN0YW5jZQ0KPiArICApDQo+ICt7DQo+ICsg IEVGSV9TVEFUVVMgICAgICAgICAgU3RhdHVzOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICpD QUNlcnQ7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgQ0FDZXJ0U2l6ZTsNCj4gKyAgVUlOVDMy ICAgICAgICAgICAgICBJbmRleDsNCj4gKyAgRUZJX1NJR05BVFVSRV9MSVNUICAqQ2VydExpc3Q7 DQo+ICsgIEVGSV9TSUdOQVRVUkVfREFUQSAgKkNlcnQ7DQo+ICsgIFVJTlROICAgICAgICAgICAg ICAgQ2VydENvdW50Ow0KPiArICBVSU5UMzIgICAgICAgICAgICAgIEl0ZW1EYXRhU2l6ZTsNCj4g Kw0KPiArICBDQUNlcnQgPSAoVUlOVDggKikgSHR0cEluc3RhbmNlLT5UbHNDb25maWdEYXRhLkNB Q2VydDsNCj4gKyAgQ0FDZXJ0U2l6ZSA9IEh0dHBJbnN0YW5jZS0+VGxzQ29uZmlnRGF0YS5DQUNl cnRTaXplOw0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIFRyeSB0byByZWFkIHRoZSBUbHNDYUNlcnRp ZmljYXRlIHZhcmlhYmxlLg0KPiArICAvLw0KPiArICBDQUNlcnRTaXplID0gMDsNCj4gKyAgU3Rh dHVzICA9IGdSVC0+R2V0VmFyaWFibGUgKA0KPiArICAgICAgICAgICAgICAgICAgIEVGSV9UTFNf Q0FfQ0VSVElGSUNBVEVfVkFSSUFCTEUsDQo+ICsgICAgICAgICAgICAgICAgICAgJmdFZmlUbHND YUNlcnRpZmljYXRlR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgICBOVUxMLA0KPiArICAgICAg ICAgICAgICAgICAgICZDQUNlcnRTaXplLA0KPiArICAgICAgICAgICAgICAgICAgIE5VTEwNCj4g KyAgICAgICAgICAgICAgICAgICApOw0KPiArDQo+ICsgIGlmIChTdGF0dXMgPT0gRUZJX0JVRkZF Ul9UT09fU01BTEwpIHsNCj4gKyAgICAvLw0KPiArICAgIC8vIEFsbG9jYXRlIGJ1ZmZlciBhbmQg cmVhZCB0aGUgY29uZmlnIHZhcmlhYmxlLg0KPiArICAgIC8vDQo+ICsgICAgQ0FDZXJ0ID0gQWxs b2NhdGVQb29sIChDQUNlcnRTaXplKTsNCj4gKyAgICBpZiAoQ0FDZXJ0ID09IE5VTEwpIHsNCj4g KyAgICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gKyAgICB9DQo+ICsNCj4gKyAg ICBTdGF0dXMgPSBnUlQtPkdldFZhcmlhYmxlICgNCj4gKyAgICAgICAgICAgICAgICAgICAgRUZJ X1RMU19DQV9DRVJUSUZJQ0FURV9WQVJJQUJMRSwNCj4gKyAgICAgICAgICAgICAgICAgICAgJmdF ZmlUbHNDYUNlcnRpZmljYXRlR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgTlVMTCwNCj4g KyAgICAgICAgICAgICAgICAgICAgJkNBQ2VydFNpemUsDQo+ICsgICAgICAgICAgICAgICAgICAg IENBQ2VydA0KPiArICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCj4gKyAgICAgIC8vDQo+ICsgICAgICAvLyBHZXRWYXJpYWJsZSBzdGlsbCBl cnJvciBvciB0aGUgdmFyaWFibGUgaXMgY29ycnVwdGVkLg0KPiArICAgICAgLy8gRmFsbCBiYWNr IHRvIHRoZSBkZWZhdWx0IHZhbHVlLg0KPiArICAgICAgLy8NCj4gKyAgICAgIEZyZWVQb29sIChD QUNlcnQpOw0KPiArDQo+ICsgICAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4gKyAgICB9DQo+ ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBFbnVtZXJhdGUgYWxsIGRhdGEgYW5kIGVyYXNp bmcgdGhlIHRhcmdldCBpdGVtLg0KPiArICAvLw0KPiArICBJdGVtRGF0YVNpemUgPSAoVUlOVDMy KSBDQUNlcnRTaXplOw0KPiArICBDZXJ0TGlzdCA9IChFRklfU0lHTkFUVVJFX0xJU1QgKikgQ0FD ZXJ0Ow0KPiArICB3aGlsZSAoKEl0ZW1EYXRhU2l6ZSA+IDApICYmIChJdGVtRGF0YVNpemUgPj0g Q2VydExpc3QtPlNpZ25hdHVyZUxpc3RTaXplKSkNCj4gew0KPiArICAgIENlcnQgPSAoRUZJX1NJ R05BVFVSRV9EQVRBICopICgoVUlOVDggKikgQ2VydExpc3QgKyBzaXplb2YNCj4gKEVGSV9TSUdO QVRVUkVfTElTVCkgKyBDZXJ0TGlzdC0+U2lnbmF0dXJlSGVhZGVyU2l6ZSk7DQo+ICsgICAgQ2Vy dENvdW50ICA9IChDZXJ0TGlzdC0+U2lnbmF0dXJlTGlzdFNpemUgLSBzaXplb2YgKEVGSV9TSUdO QVRVUkVfTElTVCkgLQ0KPiBDZXJ0TGlzdC0+U2lnbmF0dXJlSGVhZGVyU2l6ZSkgLyBDZXJ0TGlz dC0+U2lnbmF0dXJlU2l6ZTsNCj4gKyAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBDZXJ0Q291 bnQ7IEluZGV4KyspIHsNCj4gKyAgICAgIC8vDQo+ICsgICAgICAvLyBFZmlUbHNDb25maWdEYXRh VHlwZUNBQ2VydGlmaWNhdGUNCj4gKyAgICAgIC8vDQo+ICsgICAgICBTdGF0dXMgPSBIdHRwSW5z dGFuY2UtPlRsc0NvbmZpZ3VyYXRpb24tPlNldERhdGEgKA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEh0dHBJbnN0YW5jZS0+VGxzQ29uZmlndXJh dGlvbiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBFZmlUbHNDb25maWdEYXRhVHlwZUNBQ2VydGlmaWNhdGUsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2VydC0+U2lnbmF0dXJlRGF0YSwNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDZXJ0TGlz dC0+U2lnbmF0dXJlU2l6ZSAtIHNpemVvZiAoQ2VydC0NCj4gPlNpZ25hdHVyZU93bmVyKQ0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsg ICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICAgIHJldHVybiBTdGF0dXM7 DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIENlcnQgPSAoRUZJX1NJR05BVFVSRV9EQVRBICop ICgoVUlOVDggKikgQ2VydCArIENlcnRMaXN0LQ0KPiA+U2lnbmF0dXJlU2l6ZSk7DQo+ICsgICAg fQ0KPiArDQo+ICsgICAgSXRlbURhdGFTaXplIC09IENlcnRMaXN0LT5TaWduYXR1cmVMaXN0U2l6 ZTsNCj4gKyAgICBDZXJ0TGlzdCA9IChFRklfU0lHTkFUVVJFX0xJU1QgKikgKChVSU5UOCAqKSBD ZXJ0TGlzdCArIENlcnRMaXN0LQ0KPiA+U2lnbmF0dXJlTGlzdFNpemUpOw0KPiArICB9DQo+ICsN Cj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIENvbmZpZ3VyZSBU TFMgc2Vzc2lvbiBkYXRhLg0KPiArDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSAgSHR0cEluc3RhbmNl ICAgICAgIFRoZSBIVFRQIGluc3RhbmNlIHByaXZhdGUgZGF0YS4NCj4gKw0KPiArICBAcmV0dmFs IEVGSV9TVUNDRVNTICAgICAgICAgICAgVExTIHNlc3Npb24gZGF0YSBpcyBjb25maWd1cmVkLg0K PiArICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgICAgICAgT3RoZXIgZXJyb3IgYXMgaW5kaWNh dGVkLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArVGxzQ29uZmln dXJlU2Vzc2lvbiAoDQo+ICsgIElOIE9VVCBIVFRQX1BST1RPQ09MICAgICAgKkh0dHBJbnN0YW5j ZQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgIFN0YXR1czsN Cj4gKw0KPiArICAvLw0KPiArICAvLyBUbHNDb25maWdEYXRhIGluaXRpYWxpemF0aW9uDQo+ICsg IC8vDQo+ICsgIEh0dHBJbnN0YW5jZS0+VGxzQ29uZmlnRGF0YS5Db25uZWN0aW9uRW5kID0gRWZp VGxzQ2xpZW50Ow0KPiArICBIdHRwSW5zdGFuY2UtPlRsc0NvbmZpZ0RhdGEuVmVyaWZ5TWV0aG9k ID0gRUZJX1RMU19WRVJJRllfUEVFUjsNCj4gKyAgSHR0cEluc3RhbmNlLT5UbHNDb25maWdEYXRh LlNlc3Npb25TdGF0ZSA9IEVmaVRsc1Nlc3Npb25Ob3RTdGFydGVkOw0KPiArDQo+ICsgIC8vDQo+ ICsgIC8vIEVmaVRsc0Nvbm5lY3Rpb25FbmQsDQo+ICsgIC8vIEVmaVRsc1ZlcmlmeU1ldGhvZA0K PiArICAvLyBFZmlUbHNTZXNzaW9uU3RhdGUNCj4gKyAgLy8NCj4gKyAgU3RhdHVzID0gSHR0cElu c3RhbmNlLT5UbHMtPlNldFNlc3Npb25EYXRhICgNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgSHR0cEluc3RhbmNlLT5UbHMsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEVmaVRsc0Nvbm5lY3Rpb25FbmQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICYoSHR0cEluc3RhbmNlLT5UbHNDb25maWdEYXRhLkNvbm5lY3Rpb25FbmQpLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKEVGSV9UTFNfQ09OTkVDVElP Tl9FTkQpDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChF RklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBnb3RvIEVSUk9SOw0KPiArICB9DQo+ICsNCj4g KyAgU3RhdHVzID0gSHR0cEluc3RhbmNlLT5UbHMtPlNldFNlc3Npb25EYXRhICgNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgSHR0cEluc3RhbmNlLT5UbHMsDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEVmaVRsc1ZlcmlmeU1ldGhvZCwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJkh0dHBJbnN0YW5jZS0+VGxzQ29uZmlnRGF0YS5WZXJp ZnlNZXRob2QsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoRUZJ X1RMU19WRVJJRlkpDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsg IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBnb3RvIEVSUk9SOw0KPiArICB9DQo+ ICsNCj4gKyAgU3RhdHVzID0gSHR0cEluc3RhbmNlLT5UbHMtPlNldFNlc3Npb25EYXRhICgNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSHR0cEluc3RhbmNlLT5UbHMsDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVmaVRsc1Nlc3Npb25TdGF0ZSwNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihIdHRwSW5zdGFuY2UtPlRsc0NvbmZpZ0Rh dGEuU2Vzc2lvblN0YXRlKSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZW9mIChFRklfVExTX1NFU1NJT05fU1RBVEUpDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBnb3RvIEVS Uk9SOw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gVGxzIENvbmZpZyBDZXJ0aWZpY2F0 ZQ0KPiArICAvLw0KPiArICBTdGF0dXMgPSBUbHNDb25maWdDZXJ0aWZpY2F0ZSAoSHR0cEluc3Rh bmNlKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIERFQlVHICgoRUZJ X0RfRVJST1IsICJUTFMgQ2VydGlmaWNhdGUgQ29uZmlnIEVycm9yIVxuIikpOw0KPiArICAgIGdv dG8gRVJST1I7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBUbHNDcmVhdGVUeFJ4RXZl bnQNCj4gKyAgLy8NCj4gKyAgU3RhdHVzID0gVGxzQ3JlYXRlVHhSeEV2ZW50IChIdHRwSW5zdGFu Y2UpOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgZ290byBFUlJPUjsN Cj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICsNCj4gK0VSUk9SOg0KPiArICBU bHNDbG9zZVR4UnhFdmVudCAoSHR0cEluc3RhbmNlKTsNCj4gKw0KPiArICByZXR1cm4gU3RhdHVz Ow0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgVHJhbnNtaXQgdGhlIFBhY2tldCBieSBwcm9jZXNz aW5nIHRoZSBhc3NvY2lhdGVkIEhUVFBTIHRva2VuLg0KPiArDQo+ICsgIEBwYXJhbVtpbiwgb3V0 XSAgIEh0dHBJbnN0YW5jZSAgICBQb2ludGVyIHRvIEhUVFBfUFJPVE9DT0wgc3RydWN0dXJlLg0K PiArICBAcGFyYW1baW5dICAgICAgICBQYWNrZXQgICAgICAgICAgVGhlIHBhY2tldCB0byB0cmFu c21pdC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIHBhY2tl dCBpcyB0cmFuc21pdHRlZC4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIEh0 dHBJbnN0YW5jZSBpcyBOVUxMIG9yIFBhY2tldCBpcyBOVUxMLg0KPiArICBAcmV0dmFsIEVGSV9P VVRfT0ZfUkVTT1VSQ0VTICAgQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IHJlc291cmNlcy4NCj4gKyAg QHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgIEFuIHVuZXhwZWN0ZWQgc3lzdGVtIG9yIG5l dHdvcmsgZXJyb3INCj4gb2NjdXJyZWQuDQo+ICsgIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAg ICAgICBPdGhlciBlcnJvcnMgYXMgaW5kaWNhdGVkLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFU VVMNCj4gK0VGSUFQSQ0KPiArVGxzQ29tbW9uVHJhbnNtaXQgKA0KPiArICBJTiBPVVQgSFRUUF9Q Uk9UT0NPTCAgICAgICpIdHRwSW5zdGFuY2UsDQo+ICsgIElOICAgICBORVRfQlVGICAgICAgICAg ICAgKlBhY2tldA0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAg U3RhdHVzOw0KPiArICBWT0lEICAgICAgICAgICAgICAgICAgICAgICpEYXRhOw0KPiArICBVSU5U TiAgICAgICAgICAgICAgICAgICAgIFNpemU7DQo+ICsNCj4gKyAgaWYgKChIdHRwSW5zdGFuY2Ug PT0gTlVMTCkgfHwgKFBhY2tldCA9PSBOVUxMKSkgew0KPiArICAgIHJldHVybiBFRklfSU5WQUxJ RF9QQVJBTUVURVI7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoIUh0dHBJbnN0YW5jZS0+TG9jYWxB ZGRyZXNzSXNJUHY2KSB7DQo+ICsgICAgU2l6ZSA9IHNpemVvZiAoRUZJX1RDUDRfVFJBTlNNSVRf REFUQSkgKw0KPiArICAgICAgICAgICAoUGFja2V0LT5CbG9ja09wTnVtIC0gMSkgKiBzaXplb2Yg KEVGSV9UQ1A0X0ZSQUdNRU5UX0RBVEEpOw0KPiArICB9IGVsc2Ugew0KPiArICAgIFNpemUgPSBz aXplb2YgKEVGSV9UQ1A2X1RSQU5TTUlUX0RBVEEpICsNCj4gKyAgICAgICAgICAgKFBhY2tldC0+ QmxvY2tPcE51bSAtIDEpICogc2l6ZW9mIChFRklfVENQNl9GUkFHTUVOVF9EQVRBKTsNCj4gKyAg fQ0KPiArDQo+ICsgIERhdGEgPSBBbGxvY2F0ZVBvb2wgKFNpemUpOw0KPiArICBpZiAoRGF0YSA9 PSBOVUxMKSB7DQo+ICsgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICB9DQo+ ICsNCj4gKyAgaWYgKCFIdHRwSW5zdGFuY2UtPkxvY2FsQWRkcmVzc0lzSVB2Nikgew0KPiArICAg ICgoRUZJX1RDUDRfVFJBTlNNSVRfREFUQSAqKSBEYXRhKS0+UHVzaCAgICAgICAgPSBUUlVFOw0K PiArICAgICgoRUZJX1RDUDRfVFJBTlNNSVRfREFUQSAqKSBEYXRhKS0+VXJnZW50ICAgICAgPSBG QUxTRTsNCj4gKyAgICAoKEVGSV9UQ1A0X1RSQU5TTUlUX0RBVEEgKikgRGF0YSktPkRhdGFMZW5n dGggID0gUGFja2V0LT5Ub3RhbFNpemU7DQo+ICsNCj4gKyAgICAvLw0KPiArICAgIC8vIEJ1aWxk IHRoZSBmcmFnbWVudCB0YWJsZS4NCj4gKyAgICAvLw0KPiArICAgICgoRUZJX1RDUDRfVFJBTlNN SVRfREFUQSAqKSBEYXRhKS0+RnJhZ21lbnRDb3VudCA9IFBhY2tldC0NCj4gPkJsb2NrT3BOdW07 DQo+ICsNCj4gKyAgICBOZXRidWZCdWlsZEV4dCAoDQo+ICsgICAgICBQYWNrZXQsDQo+ICsgICAg ICAoTkVUX0ZSQUdNRU5UICopICYoKEVGSV9UQ1A0X1RSQU5TTUlUX0RBVEEgKikgRGF0YSktDQo+ ID5GcmFnbWVudFRhYmxlWzBdLA0KPiArICAgICAgJigoRUZJX1RDUDRfVFJBTlNNSVRfREFUQSAq KSBEYXRhKS0+RnJhZ21lbnRDb3VudA0KPiArICAgICAgKTsNCj4gKw0KPiArICAgIEh0dHBJbnN0 YW5jZS0+VGNwNFRsc1R4VG9rZW4uUGFja2V0LlR4RGF0YSA9DQo+IChFRklfVENQNF9UUkFOU01J VF9EQVRBICopIERhdGE7DQo+ICsNCj4gKyAgICBTdGF0dXMgPSBFRklfREVWSUNFX0VSUk9SOw0K PiArDQo+ICsgICAgLy8NCj4gKyAgICAvLyBUcmFuc21pdCB0aGUgcGFja2V0Lg0KPiArICAgIC8v DQo+ICsgICAgU3RhdHVzICA9IEh0dHBJbnN0YW5jZS0+VGNwNC0+VHJhbnNtaXQgKEh0dHBJbnN0 YW5jZS0+VGNwNCwNCj4gJkh0dHBJbnN0YW5jZS0+VGNwNFRsc1R4VG9rZW4pOw0KPiArICAgIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIGdvdG8gT05fRVhJVDsNCj4gKyAgICB9 DQo+ICsNCj4gKyAgICB3aGlsZSAoIUh0dHBJbnN0YW5jZS0+VGxzSXNUeERvbmUpIHsNCj4gKyAg ICAgIEh0dHBJbnN0YW5jZS0+VGNwNC0+UG9sbCAoSHR0cEluc3RhbmNlLT5UY3A0KTsNCj4gKyAg ICB9DQo+ICsNCj4gKyAgICBIdHRwSW5zdGFuY2UtPlRsc0lzVHhEb25lID0gRkFMU0U7DQo+ICsg ICAgU3RhdHVzID0gSHR0cEluc3RhbmNlLT5UY3A0VGxzVHhUb2tlbi5Db21wbGV0aW9uVG9rZW4u U3RhdHVzOw0KPiArICB9IGVsc2Ugew0KPiArICAgICgoRUZJX1RDUDZfVFJBTlNNSVRfREFUQSAq KSBEYXRhKS0+UHVzaCAgICAgICAgPSBUUlVFOw0KPiArICAgICgoRUZJX1RDUDZfVFJBTlNNSVRf REFUQSAqKSBEYXRhKS0+VXJnZW50ICAgICAgPSBGQUxTRTsNCj4gKyAgICAoKEVGSV9UQ1A2X1RS QU5TTUlUX0RBVEEgKikgRGF0YSktPkRhdGFMZW5ndGggID0gUGFja2V0LT5Ub3RhbFNpemU7DQo+ ICsNCj4gKyAgICAvLw0KPiArICAgIC8vIEJ1aWxkIHRoZSBmcmFnbWVudCB0YWJsZS4NCj4gKyAg ICAvLw0KPiArICAgICgoRUZJX1RDUDZfVFJBTlNNSVRfREFUQSAqKSBEYXRhKS0+RnJhZ21lbnRD b3VudCA9IFBhY2tldC0NCj4gPkJsb2NrT3BOdW07DQo+ICsNCj4gKyAgICBOZXRidWZCdWlsZEV4 dCAoDQo+ICsgICAgICBQYWNrZXQsDQo+ICsgICAgICAoTkVUX0ZSQUdNRU5UICopICYoKEVGSV9U Q1A2X1RSQU5TTUlUX0RBVEEgKikgRGF0YSktDQo+ID5GcmFnbWVudFRhYmxlWzBdLA0KPiArICAg ICAgJigoRUZJX1RDUDZfVFJBTlNNSVRfREFUQSAqKSBEYXRhKS0+RnJhZ21lbnRDb3VudA0KPiAr ICAgICAgKTsNCj4gKw0KPiArICAgIEh0dHBJbnN0YW5jZS0+VGNwNlRsc1R4VG9rZW4uUGFja2V0 LlR4RGF0YSA9DQo+IChFRklfVENQNl9UUkFOU01JVF9EQVRBICopIERhdGE7DQo+ICsNCj4gKyAg ICBTdGF0dXMgPSBFRklfREVWSUNFX0VSUk9SOw0KPiArDQo+ICsgICAgLy8NCj4gKyAgICAvLyBU cmFuc21pdCB0aGUgcGFja2V0Lg0KPiArICAgIC8vDQo+ICsgICAgU3RhdHVzICA9IEh0dHBJbnN0 YW5jZS0+VGNwNi0+VHJhbnNtaXQgKEh0dHBJbnN0YW5jZS0+VGNwNiwNCj4gJkh0dHBJbnN0YW5j ZS0+VGNwNlRsc1R4VG9rZW4pOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4g KyAgICAgIGdvdG8gT05fRVhJVDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICB3aGlsZSAoIUh0dHBJ bnN0YW5jZS0+VGxzSXNUeERvbmUpIHsNCj4gKyAgICAgIEh0dHBJbnN0YW5jZS0+VGNwNi0+UG9s bCAoSHR0cEluc3RhbmNlLT5UY3A2KTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBIdHRwSW5zdGFu Y2UtPlRsc0lzVHhEb25lID0gRkFMU0U7DQo+ICsgICAgU3RhdHVzID0gSHR0cEluc3RhbmNlLT5U Y3A2VGxzVHhUb2tlbi5Db21wbGV0aW9uVG9rZW4uU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gK09O X0VYSVQ6DQo+ICsgIEZyZWVQb29sIChEYXRhKTsNCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0K PiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUmVjZWl2ZSB0aGUgUGFja2V0IGJ5IHByb2Nlc3Npbmcg dGhlIGFzc29jaWF0ZWQgSFRUUFMgdG9rZW4uDQo+ICsNCj4gKyAgQHBhcmFtW2luLCBvdXRdICAg SHR0cEluc3RhbmNlICAgIFBvaW50ZXIgdG8gSFRUUF9QUk9UT0NPTCBzdHJ1Y3R1cmUuDQo+ICsg IEBwYXJhbVtpbl0gICAgICAgIFBhY2tldCAgICAgICAgICBUaGUgcGFja2V0IHRvIHRyYW5zbWl0 Lg0KPiArICBAcGFyYW1baW5dICAgICAgICBUaW1lb3V0ICAgICAgICAgVGhlIHRpbWUgdG8gd2Fp dCBmb3IgY29ubmVjdGlvbiBkb25lLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgICAgICBUaGUgUGFja2V0IGlzIHJlY2VpdmVkLg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElE X1BBUkFNRVRFUiAgSHR0cEluc3RhbmNlIGlzIE5VTEwgb3IgUGFja2V0IGlzIE5VTEwuDQo+ICsg IEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgICBDYW4ndCBhbGxvY2F0ZSBtZW1vcnkgcmVz b3VyY2VzLg0KPiArICBAcmV0dmFsIEVGSV9USU1FT1VUICAgICAgICAgICAgVGhlIG9wZXJhdGlv biBpcyB0aW1lIG91dC4NCj4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICAgICAgIE90aGVy IGVycm9yIGFzIGluZGljYXRlZC4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklB UEkNCj4gK1Rsc0NvbW1vblJlY2VpdmUgKA0KPiArICBJTiBPVVQgSFRUUF9QUk9UT0NPTCAgICAg ICpIdHRwSW5zdGFuY2UsDQo+ICsgIElOICAgICBORVRfQlVGICAgICAgICAgICAgKlBhY2tldCwN Cj4gKyAgSU4gICAgIEVGSV9FVkVOVCAgICAgICAgICBUaW1lb3V0DQo+ICsgICkNCj4gK3sNCj4g KyAgRUZJX1RDUDRfUkVDRUlWRV9EQVRBICAgICAqVGNwNFJ4RGF0YTsNCj4gKyAgRUZJX1RDUDZf UkVDRUlWRV9EQVRBICAgICAqVGNwNlJ4RGF0YTsNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAg ICAgICBTdGF0dXM7DQo+ICsgIE5FVF9GUkFHTUVOVCAgICAgICAgICAgICAgKkZyYWdtZW50Ow0K PiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIEZyYWdtZW50Q291bnQ7DQo+ICsgIFVJTlQz MiAgICAgICAgICAgICAgICAgICAgQ3VycmVudEZyYWdtZW50Ow0KPiArDQo+ICsgIFRjcDRSeERh dGEgPSBOVUxMOw0KPiArICBUY3A2UnhEYXRhID0gTlVMTDsNCj4gKw0KPiArICBpZiAoKEh0dHBJ bnN0YW5jZSA9PSBOVUxMKSB8fCAoUGFja2V0ID09IE5VTEwpKSB7DQo+ICsgICAgcmV0dXJuIEVG SV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgfQ0KPiArDQo+ICsgIEZyYWdtZW50Q291bnQgPSBQ YWNrZXQtPkJsb2NrT3BOdW07DQo+ICsgIEZyYWdtZW50ICAgICAgPSBBbGxvY2F0ZVBvb2wgKEZy YWdtZW50Q291bnQgKiBzaXplb2YgKE5FVF9GUkFHTUVOVCkpOw0KPiArICBpZiAoRnJhZ21lbnQg PT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICAg IGdvdG8gT05fRVhJVDsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIEJ1aWxkIHRoZSBm cmFnbWVudCB0YWJsZS4NCj4gKyAgLy8NCj4gKyAgTmV0YnVmQnVpbGRFeHQgKFBhY2tldCwgRnJh Z21lbnQsICZGcmFnbWVudENvdW50KTsNCj4gKw0KPiArICBpZiAoIUh0dHBJbnN0YW5jZS0+TG9j YWxBZGRyZXNzSXNJUHY2KSB7DQo+ICsgICAgVGNwNFJ4RGF0YSA9IEh0dHBJbnN0YW5jZS0+VGNw NFRsc1J4VG9rZW4uUGFja2V0LlJ4RGF0YTsNCj4gKyAgICBpZiAoVGNwNFJ4RGF0YSA9PSBOVUxM KSB7DQo+ICsgICAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICAgIH0NCj4g KyAgICBUY3A0UnhEYXRhLT5GcmFnbWVudENvdW50ICAgICAgICAgPSAxOw0KPiArICB9IGVsc2Ug ew0KPiArICAgIFRjcDZSeERhdGEgPSBIdHRwSW5zdGFuY2UtPlRjcDZUbHNSeFRva2VuLlBhY2tl dC5SeERhdGE7DQo+ICsgICAgaWYgKFRjcDZSeERhdGEgPT0gTlVMTCkgew0KPiArICAgICAgcmV0 dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gKyAgICB9DQo+ICsgICAgVGNwNlJ4RGF0YS0+ RnJhZ21lbnRDb3VudCAgICAgICAgID0gMTsNCj4gKyAgfQ0KPiArDQo+ICsgIEN1cnJlbnRGcmFn bWVudCAgICAgICAgICAgICAgID0gMDsNCj4gKyAgU3RhdHVzICAgICAgICAgICAgICAgICAgICAg ICAgPSBFRklfU1VDQ0VTUzsNCj4gKw0KPiArICB3aGlsZSAoQ3VycmVudEZyYWdtZW50IDwgRnJh Z21lbnRDb3VudCkgew0KPiArICAgIGlmICghSHR0cEluc3RhbmNlLT5Mb2NhbEFkZHJlc3NJc0lQ djYpIHsNCj4gKyAgICAgIFRjcDRSeERhdGEtPkRhdGFMZW5ndGggICAgICAgICAgICAgICAgICAg ICAgID0gRnJhZ21lbnRbQ3VycmVudEZyYWdtZW50XS5MZW47DQo+ICsgICAgICBUY3A0UnhEYXRh LT5GcmFnbWVudFRhYmxlWzBdLkZyYWdtZW50TGVuZ3RoICA9DQo+IEZyYWdtZW50W0N1cnJlbnRG cmFnbWVudF0uTGVuOw0KPiArICAgICAgVGNwNFJ4RGF0YS0+RnJhZ21lbnRUYWJsZVswXS5GcmFn bWVudEJ1ZmZlciAgPQ0KPiBGcmFnbWVudFtDdXJyZW50RnJhZ21lbnRdLkJ1bGs7DQo+ICsgICAg ICBTdGF0dXMgPSBIdHRwSW5zdGFuY2UtPlRjcDQtPlJlY2VpdmUgKEh0dHBJbnN0YW5jZS0+VGNw NCwNCj4gJkh0dHBJbnN0YW5jZS0+VGNwNFRsc1J4VG9rZW4pOw0KPiArICAgIH0gZWxzZSB7DQo+ ICsgICAgICBUY3A2UnhEYXRhLT5EYXRhTGVuZ3RoICAgICAgICAgICAgICAgICAgICAgICA9IEZy YWdtZW50W0N1cnJlbnRGcmFnbWVudF0uTGVuOw0KPiArICAgICAgVGNwNlJ4RGF0YS0+RnJhZ21l bnRUYWJsZVswXS5GcmFnbWVudExlbmd0aCAgPQ0KPiBGcmFnbWVudFtDdXJyZW50RnJhZ21lbnRd LkxlbjsNCj4gKyAgICAgIFRjcDZSeERhdGEtPkZyYWdtZW50VGFibGVbMF0uRnJhZ21lbnRCdWZm ZXIgID0NCj4gRnJhZ21lbnRbQ3VycmVudEZyYWdtZW50XS5CdWxrOw0KPiArICAgICAgU3RhdHVz ID0gSHR0cEluc3RhbmNlLT5UY3A2LT5SZWNlaXZlIChIdHRwSW5zdGFuY2UtPlRjcDYsDQo+ICZI dHRwSW5zdGFuY2UtPlRjcDZUbHNSeFRva2VuKTsNCj4gKyAgICB9DQo+ICsgICAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgZ290byBPTl9FWElUOw0KPiArICAgIH0NCj4gKw0K PiArICAgIHdoaWxlICghSHR0cEluc3RhbmNlLT5UbHNJc1J4RG9uZSAmJiAoKFRpbWVvdXQgPT0g TlVMTCkgfHwgRUZJX0VSUk9SDQo+IChnQlMtPkNoZWNrRXZlbnQgKFRpbWVvdXQpKSkpIHsNCj4g KyAgICAgIC8vDQo+ICsgICAgICAvLyBQb2xsIHVudGlsIHNvbWUgZGF0YSBpcyByZWNlaXZlZCBv ciBhbiBlcnJvciBvY2N1cnMuDQo+ICsgICAgICAvLw0KPiArICAgICAgaWYgKCFIdHRwSW5zdGFu Y2UtPkxvY2FsQWRkcmVzc0lzSVB2Nikgew0KPiArICAgICAgICBIdHRwSW5zdGFuY2UtPlRjcDQt PlBvbGwgKEh0dHBJbnN0YW5jZS0+VGNwNCk7DQo+ICsgICAgICB9IGVsc2Ugew0KPiArICAgICAg ICBIdHRwSW5zdGFuY2UtPlRjcDYtPlBvbGwgKEh0dHBJbnN0YW5jZS0+VGNwNik7DQo+ICsgICAg ICB9DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKCFIdHRwSW5zdGFuY2UtPlRsc0lzUnhEb25l KSB7DQo+ICsgICAgICAvLw0KPiArICAgICAgLy8gVGltZW91dCBvY2N1cnMsIGNhbmNlbCB0aGUg cmVjZWl2ZSByZXF1ZXN0Lg0KPiArICAgICAgLy8NCj4gKyAgICAgIGlmICghSHR0cEluc3RhbmNl LT5Mb2NhbEFkZHJlc3NJc0lQdjYpIHsNCj4gKyAgICAgICAgSHR0cEluc3RhbmNlLT5UY3A0LT5D YW5jZWwgKEh0dHBJbnN0YW5jZS0+VGNwNCwgJkh0dHBJbnN0YW5jZS0NCj4gPlRjcDRUbHNSeFRv a2VuLkNvbXBsZXRpb25Ub2tlbik7DQo+ICsgICAgICB9IGVsc2Ugew0KPiArICAgICAgICBIdHRw SW5zdGFuY2UtPlRjcDYtPkNhbmNlbCAoSHR0cEluc3RhbmNlLT5UY3A2LCAmSHR0cEluc3RhbmNl LQ0KPiA+VGNwNlRsc1J4VG9rZW4uQ29tcGxldGlvblRva2VuKTsNCj4gKyAgICAgIH0NCj4gKw0K PiArICAgICAgU3RhdHVzID0gRUZJX1RJTUVPVVQ7DQo+ICsgICAgICBnb3RvIE9OX0VYSVQ7DQo+ ICsgICAgfSBlbHNlIHsNCj4gKyAgICAgIEh0dHBJbnN0YW5jZS0+VGxzSXNSeERvbmUgPSBGQUxT RTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZiAoIUh0dHBJbnN0YW5jZS0+TG9jYWxBZGRyZXNz SXNJUHY2KSB7DQo+ICsgICAgICBTdGF0dXMgPSBIdHRwSW5zdGFuY2UtPlRjcDRUbHNSeFRva2Vu LkNvbXBsZXRpb25Ub2tlbi5TdGF0dXM7DQo+ICsgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMp KSB7DQo+ICsgICAgICAgIGdvdG8gT05fRVhJVDsNCj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAg RnJhZ21lbnRbQ3VycmVudEZyYWdtZW50XS5MZW4gLT0gVGNwNFJ4RGF0YS0NCj4gPkZyYWdtZW50 VGFibGVbMF0uRnJhZ21lbnRMZW5ndGg7DQo+ICsgICAgICBpZiAoRnJhZ21lbnRbQ3VycmVudEZy YWdtZW50XS5MZW4gPT0gMCkgew0KPiArICAgICAgICBDdXJyZW50RnJhZ21lbnQrKzsNCj4gKyAg ICAgIH0gZWxzZSB7DQo+ICsgICAgICAgIEZyYWdtZW50W0N1cnJlbnRGcmFnbWVudF0uQnVsayAr PSBUY3A0UnhEYXRhLQ0KPiA+RnJhZ21lbnRUYWJsZVswXS5GcmFnbWVudExlbmd0aDsNCj4gKyAg ICAgIH0NCj4gKyAgICB9IGVsc2Ugew0KPiArICAgICAgU3RhdHVzID0gSHR0cEluc3RhbmNlLT5U Y3A2VGxzUnhUb2tlbi5Db21wbGV0aW9uVG9rZW4uU3RhdHVzOw0KPiArICAgICAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgICBnb3RvIE9OX0VYSVQ7DQo+ICsgICAgICB9DQo+ ICsNCj4gKyAgICAgIEZyYWdtZW50W0N1cnJlbnRGcmFnbWVudF0uTGVuIC09IFRjcDZSeERhdGEt DQo+ID5GcmFnbWVudFRhYmxlWzBdLkZyYWdtZW50TGVuZ3RoOw0KPiArICAgICAgaWYgKEZyYWdt ZW50W0N1cnJlbnRGcmFnbWVudF0uTGVuID09IDApIHsNCj4gKyAgICAgICAgQ3VycmVudEZyYWdt ZW50Kys7DQo+ICsgICAgICB9IGVsc2Ugew0KPiArICAgICAgICBGcmFnbWVudFtDdXJyZW50RnJh Z21lbnRdLkJ1bGsgKz0gVGNwNlJ4RGF0YS0NCj4gPkZyYWdtZW50VGFibGVbMF0uRnJhZ21lbnRM ZW5ndGg7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gK09OX0VYSVQ6DQo+ ICsNCj4gKyAgaWYgKEZyYWdtZW50ICE9IE5VTEwpIHsNCj4gKyAgICBGcmVlUG9vbCAoRnJhZ21l bnQpOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoq DQo+ICsgIFJlY2VpdmUgb25lIFRMUyBQRFUuIEFuIFRMUyBQRFUgY29udGFpbnMgYW4gVExTIHJl Y29yZCBoZWFkZXIgYW5kIGl0J3MNCj4gKyAgY29ycmVzcG9uZGluZyByZWNvcmQgZGF0YS4gVGhp cyB0d28gcGFydHMgd2lsbCBiZSBwdXQgaW50byB0d28gYmxvY2tzIG9mDQo+IGJ1ZmZlcnMgaW4g dGhlDQo+ICsgIG5ldCBidWZmZXIuDQo+ICsNCj4gKyAgQHBhcmFtW2luLCBvdXRdICAgICAgSHR0 cEluc3RhbmNlICAgIFBvaW50ZXIgdG8gSFRUUF9QUk9UT0NPTCBzdHJ1Y3R1cmUuDQo+ICsgIEBw YXJhbVtvdXRdICAgICAgICAgIFBkdSAgICAgICAgICAgICBUaGUgcmVjZWl2ZWQgVExTIFBEVS4N Cj4gKyAgQHBhcmFtW2luXSAgICAgICAgICAgVGltZW91dCAgICAgICAgIFRoZSB0aW1lIHRvIHdh aXQgZm9yIGNvbm5lY3Rpb24gZG9uZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgIEFuIFRMUyBQRFUgaXMgcmVjZWl2ZWQuDQo+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9S RVNPVVJDRVMgQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IHJlc291cmNlcy4NCj4gKyAgQHJldHZhbCBF RklfUFJPVE9DT0xfRVJST1IgICBBbiB1bmV4cGVjdGVkIFRMUyBwYWNrZXQgd2FzIHJlY2VpdmVk Lg0KPiArICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgICAgIE90aGVyIGVycm9ycyBhcyBpbmRp Y2F0ZWQuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtUbHNSZWNl aXZlT25lUGR1ICgNCj4gKyAgSU4gT1VUIEhUVFBfUFJPVE9DT0wgICAgICAqSHR0cEluc3RhbmNl LA0KPiArICAgICBPVVQgTkVUX0JVRiAgICAgICAgICAgICoqUGR1LA0KPiArICBJTiAgICAgRUZJ X0VWRU5UICAgICAgICAgIFRpbWVvdXQNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAg ICAgU3RhdHVzOw0KPiArDQo+ICsgIExJU1RfRU5UUlkgICAgICAqTmJ1Zkxpc3Q7DQo+ICsNCj4g KyAgVUlOVDMyICAgICAgICAgIExlbjsNCj4gKw0KPiArICBORVRfQlVGICAgICAgICAgICAqUGR1 SGRyOw0KPiArICBVSU5UOCAgICAgICAgICAgICAqSGVhZGVyOw0KPiArICBUTFNfUkVDT1JEX0hF QURFUiBSZWNvcmRIZWFkZXI7DQo+ICsNCj4gKyAgTkVUX0JVRiAgICAgICAgICAgKkRhdGFTZWc7 DQo+ICsNCj4gKyAgTmJ1Zkxpc3QgPSBOVUxMOw0KPiArICBQZHVIZHIgICA9IE5VTEw7DQo+ICsg IEhlYWRlciAgID0gTlVMTDsNCj4gKyAgRGF0YVNlZyAgPSBOVUxMOw0KPiArDQo+ICsgIE5idWZM aXN0ID0gQWxsb2NhdGVQb29sIChzaXplb2YgKExJU1RfRU5UUlkpKTsNCj4gKyAgaWYgKE5idWZM aXN0ID09IE5VTEwpIHsNCj4gKyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsg IH0NCj4gKw0KPiArICBJbml0aWFsaXplTGlzdEhlYWQgKE5idWZMaXN0KTsNCj4gKw0KPiArICAv Lw0KPiArICAvLyBBbGxvY2F0ZSBidWZmZXIgdG8gcmVjZWl2ZSBvbmUgVExTIGhlYWRlci4NCj4g KyAgLy8NCj4gKyAgTGVuICAgICA9IHNpemVvZiAoVExTX1JFQ09SRF9IRUFERVIpOw0KPiArICBQ ZHVIZHIgID0gTmV0YnVmQWxsb2MgKExlbik7DQo+ICsgIGlmIChQZHVIZHIgPT0gTlVMTCkgew0K PiArICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICAgIGdvdG8gT05fRVhJ VDsNCj4gKyAgfQ0KPiArDQo+ICsgIEhlYWRlciA9IE5ldGJ1ZkFsbG9jU3BhY2UgKFBkdUhkciwg TGVuLCBORVRfQlVGX1RBSUwpOw0KPiArICBpZiAoSGVhZGVyID09IE5VTEwpIHsNCj4gKyAgICBT dGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gKyAgICBnb3RvIE9OX0VYSVQ7DQo+ICsg IH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBGaXJzdCBzdGVwLCByZWNlaXZlIG9uZSBUTFMgaGVh ZGVyLg0KPiArICAvLw0KPiArICBTdGF0dXMgPSBUbHNDb21tb25SZWNlaXZlIChIdHRwSW5zdGFu Y2UsIFBkdUhkciwgVGltZW91dCk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4g KyAgICBnb3RvIE9OX0VYSVQ7DQo+ICsgIH0NCj4gKw0KPiArICBSZWNvcmRIZWFkZXIgPSAqKFRM U19SRUNPUkRfSEVBREVSICopIEhlYWRlcjsNCj4gKyAgaWYgKChSZWNvcmRIZWFkZXIuQ29udGVu dFR5cGUgPT0gVExTX0NPTlRFTlRfVFlQRV9IQU5EU0hBS0UgfHwNCj4gKyAgICBSZWNvcmRIZWFk ZXIuQ29udGVudFR5cGUgPT0gVExTX0NPTlRFTlRfVFlQRV9BTEVSVCB8fA0KPiArICAgIFJlY29y ZEhlYWRlci5Db250ZW50VHlwZSA9PQ0KPiBUTFNfQ09OVEVOVF9UWVBFX0NIQU5HRV9DSVBIRVJf U1BFQyB8fA0KPiArICAgIFJlY29yZEhlYWRlci5Db250ZW50VHlwZSA9PQ0KPiBUTFNfQ09OVEVO VF9UWVBFX0FQUExJQ0FUSU9OX0RBVEEpICYmDQo+ICsgICAgKFJlY29yZEhlYWRlci5WZXJzaW9u Lk1ham9yID09IDB4MDMpICYmIC8vLyBNYWpvciB2ZXJzaW9ucyBhcmUgc2FtZS4NCj4gKyAgICAo UmVjb3JkSGVhZGVyLlZlcnNpb24uTWlub3IgPT0gVExTMTBfUFJPVE9DT0xfVkVSU0lPTl9NSU5P UiB8fA0KPiArICAgIFJlY29yZEhlYWRlci5WZXJzaW9uLk1pbm9yID09VExTMTFfUFJPVE9DT0xf VkVSU0lPTl9NSU5PUiB8fA0KPiArICAgIFJlY29yZEhlYWRlci5WZXJzaW9uLk1pbm9yID09IFRM UzEyX1BST1RPQ09MX1ZFUlNJT05fTUlOT1IpDQo+ICsgICApIHsNCj4gKyAgICBJbnNlcnRUYWls TGlzdCAoTmJ1Zkxpc3QsICZQZHVIZHItPkxpc3QpOw0KPiArICB9IGVsc2Ugew0KPiArICAgIFN0 YXR1cyA9IEVGSV9QUk9UT0NPTF9FUlJPUjsNCj4gKyAgICBnb3RvIE9OX0VYSVQ7DQo+ICsgIH0N Cj4gKw0KPiArICBMZW4gPSBTd2FwQnl0ZXMxNihSZWNvcmRIZWFkZXIuTGVuZ3RoKTsNCj4gKyAg aWYgKExlbiA9PSAwKSB7DQo+ICsgICAgLy8NCj4gKyAgICAvLyBObyBUTFMgcGF5bG9hZC4NCj4g KyAgICAvLw0KPiArICAgIGdvdG8gRk9STV9QRFU7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiAr ICAvLyBBbGxvY2F0ZSBidWZmZXIgdG8gcmVjZWl2ZSBvbmUgVExTIHBheWxvYWQuDQo+ICsgIC8v DQo+ICsgIERhdGFTZWcgPSBOZXRidWZBbGxvYyAoTGVuKTsNCj4gKyAgaWYgKERhdGFTZWcgPT0g TlVMTCkgew0KPiArICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICAgIGdv dG8gT05fRVhJVDsNCj4gKyAgfQ0KPiArDQo+ICsgIE5ldGJ1ZkFsbG9jU3BhY2UgKERhdGFTZWcs IExlbiwgTkVUX0JVRl9UQUlMKTsNCj4gKw0KPiArICAvLw0KPiArICAvLyBTZWNvbmQgc3RlcCwg cmVjZWl2ZSBvbmUgVExTIHBheWxvYWQuDQo+ICsgIC8vDQo+ICsgIFN0YXR1cyA9IFRsc0NvbW1v blJlY2VpdmUgKEh0dHBJbnN0YW5jZSwgRGF0YVNlZywgVGltZW91dCk7DQo+ICsgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBnb3RvIE9OX0VYSVQ7DQo+ICsgIH0NCj4gKw0KPiAr ICBJbnNlcnRUYWlsTGlzdCAoTmJ1Zkxpc3QsICZEYXRhU2VnLT5MaXN0KTsNCj4gKw0KPiArRk9S TV9QRFU6DQo+ICsgIC8vDQo+ICsgIC8vIEZvcm0gdGhlIFBEVSBmcm9tIGEgbGlzdCBvZiBQRFUu DQo+ICsgIC8vDQo+ICsgICpQZHUgPSBOZXRidWZGcm9tQnVmTGlzdCAoTmJ1Zkxpc3QsIDAsIDAs IEZyZWVOYnVmTGlzdCwgTmJ1Zkxpc3QpOw0KPiArICBpZiAoKlBkdSA9PSBOVUxMKSB7DQo+ICsg ICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgIH0NCj4gKw0KPiArT05fRVhJ VDoNCj4gKw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgLy8NCj4gKyAg ICAvLyBGcmVlIHRoZSBOYnVmcyBpbiB0aGlzIE5idWZMaXN0IGFuZCB0aGUgTmJ1Zkxpc3QgaXRz ZWxmLg0KPiArICAgIC8vDQo+ICsgICAgRnJlZU5idWZMaXN0IChOYnVmTGlzdCk7DQo+ICsgIH0N Cj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgQ29ubmVj dCBvbmUgVExTIHNlc3Npb24gYnkgZmluaXNoaW5nIHRoZSBUTFMgaGFuZHNoYWtlIHByb2Nlc3Mu DQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgSHR0cEluc3RhbmNlICAgICAgIFRoZSBIVFRQIGluc3Rh bmNlIHByaXZhdGUgZGF0YS4NCj4gKyAgQHBhcmFtW2luXSAgVGltZW91dCAgICAgICAgICAgIFRo ZSB0aW1lIHRvIHdhaXQgZm9yIGNvbm5lY3Rpb24gZG9uZS4NCj4gKw0KPiArICBAcmV0dmFsIEVG SV9TVUNDRVNTICAgICAgICAgICAgVGhlIFRMUyBzZXNzaW9uIGlzIGVzdGFibGlzaGVkLg0KPiAr ICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IHJl c291cmNlcy4NCj4gKyAgQHJldHZhbCBFRklfQUJPUlRFRCAgICAgICAgICAgIFRMUyBzZXNzaW9u IHN0YXRlIGlzIGluY29ycmVjdC4NCj4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICAgICAg IE90aGVyIGVycm9yIGFzIGluZGljYXRlZC4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ ICtFRklBUEkNCj4gK1Rsc0Nvbm5lY3RTZXNzaW9uICgNCj4gKyAgSU4gIEhUVFBfUFJPVE9DT0wg ICAgICAgICAgICAqSHR0cEluc3RhbmNlLA0KPiArICBJTiAgRUZJX0VWRU5UICAgICAgICAgICAg ICAgIFRpbWVvdXQNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICBT dGF0dXM7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICpCdWZmZXJPdXQ7DQo+ICsgIFVJ TlROICAgICAgICAgICAgICAgICAgIEJ1ZmZlck91dFNpemU7DQo+ICsgIE5FVF9CVUYgICAgICAg ICAgICAgICAgICpQYWNrZXRPdXQ7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICpEYXRh T3V0Ow0KPiArICBORVRfQlVGICAgICAgICAgICAgICAgICAqUGR1Ow0KPiArICBVSU5UOCAgICAg ICAgICAgICAgICAgICAqQnVmZmVySW47DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgIEJ1 ZmZlckluU2l6ZTsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgKkdldFNlc3Npb25EYXRh QnVmZmVyOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICBHZXRTZXNzaW9uRGF0YUJ1ZmZl clNpemU7DQo+ICsNCj4gKyAgQnVmZmVyT3V0ICAgID0gTlVMTDsNCj4gKyAgUGFja2V0T3V0ICAg ID0gTlVMTDsNCj4gKyAgRGF0YU91dCAgICAgID0gTlVMTDsNCj4gKyAgUGR1ICAgICAgICAgID0g TlVMTDsNCj4gKyAgQnVmZmVySW4gICAgID0gTlVMTDsNCj4gKw0KPiArICAvLw0KPiArICAvLyBJ bml0aWFsaXplIFRMUyBzdGF0ZS4NCj4gKyAgLy8NCj4gKyAgSHR0cEluc3RhbmNlLT5UbHNTZXNz aW9uU3RhdGUgPSBFZmlUbHNTZXNzaW9uTm90U3RhcnRlZDsNCj4gKyAgU3RhdHVzID0gSHR0cElu c3RhbmNlLT5UbHMtPlNldFNlc3Npb25EYXRhICgNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgSHR0cEluc3RhbmNlLT5UbHMsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEVmaVRsc1Nlc3Npb25TdGF0ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJihIdHRwSW5zdGFuY2UtPlRsc1Nlc3Npb25TdGF0ZSksDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVvZiAoRUZJX1RMU19TRVNTSU9OX1NUQVRFKQ0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsg IC8vIENyZWF0ZSBDbGllbnRIZWxsbw0KPiArICAvLw0KPiArICBCdWZmZXJPdXRTaXplID0gREVG X0JVRl9MRU47DQo+ICsgIEJ1ZmZlck91dCA9IEFsbG9jYXRlWmVyb1Bvb2wgKEJ1ZmZlck91dFNp emUpOw0KPiArICBpZiAoQnVmZmVyT3V0ID09IE5VTEwpIHsNCj4gKyAgICBTdGF0dXMgPSBFRklf T1VUX09GX1JFU09VUkNFUzsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4g KyAgU3RhdHVzID0gSHR0cEluc3RhbmNlLT5UbHMtPkJ1aWxkUmVzcG9uc2VQYWNrZXQgKA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIdHRwSW5zdGFuY2UtPlRscywNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVm ZmVyT3V0LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQnVmZmVyT3V0U2l6 ZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAoU3RhdHVz ID09IEVGSV9CVUZGRVJfVE9PX1NNQUxMKSB7DQo+ICsgICAgRnJlZVBvb2wgKEJ1ZmZlck91dCk7 DQo+ICsgICAgQnVmZmVyT3V0ID0gQWxsb2NhdGVaZXJvUG9vbCAoQnVmZmVyT3V0U2l6ZSk7DQo+ ICsgICAgaWYgKEJ1ZmZlck91dCA9PSBOVUxMKSB7DQo+ICsgICAgICBTdGF0dXMgPSBFRklfT1VU X09GX1JFU09VUkNFUzsNCj4gKyAgICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgfQ0KPiArDQo+ ICsgICAgU3RhdHVzID0gSHR0cEluc3RhbmNlLT5UbHMtPkJ1aWxkUmVzcG9uc2VQYWNrZXQgKA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEh0dHBJbnN0YW5jZS0+VGxzLA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBCdWZmZXJPdXQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JkJ1ZmZlck91dFNpemUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0K PiArICB9DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBGcmVlUG9vbCAo QnVmZmVyT3V0KTsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgLy8N Cj4gKyAgLy8gVHJhbnNtaXQgQ2xpZW50SGVsbG8NCj4gKyAgLy8NCj4gKyAgUGFja2V0T3V0ID0g TmV0YnVmQWxsb2MgKChVSU5UMzIpIEJ1ZmZlck91dFNpemUpOw0KPiArICBEYXRhT3V0ID0gTmV0 YnVmQWxsb2NTcGFjZSAoUGFja2V0T3V0LCAoVUlOVDMyKSBCdWZmZXJPdXRTaXplLA0KPiBORVRf QlVGX1RBSUwpOw0KPiArICBDb3B5TWVtIChEYXRhT3V0LCBCdWZmZXJPdXQsIEJ1ZmZlck91dFNp emUpOw0KPiArICBTdGF0dXMgPSBUbHNDb21tb25UcmFuc21pdCAoSHR0cEluc3RhbmNlLCBQYWNr ZXRPdXQpOw0KPiArDQo+ICsgIEZyZWVQb29sIChCdWZmZXJPdXQpOw0KPiArICBOZXRidWZGcmVl IChQYWNrZXRPdXQpOw0KPiArDQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAg ICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgd2hpbGUoSHR0cEluc3RhbmNlLT5U bHNTZXNzaW9uU3RhdGUgIT0gRWZpVGxzU2Vzc2lvbkRhdGFUcmFuc2ZlcnJpbmcgJiYgXA0KPiAr ICAgICgoVGltZW91dCA9PSBOVUxMKSB8fCBFRklfRVJST1IgKGdCUy0+Q2hlY2tFdmVudCAoVGlt ZW91dCkpKSkgew0KPiArICAgIC8vDQo+ICsgICAgLy8gUmVjZWl2ZSBvbmUgVExTIHJlY29yZC4N Cj4gKyAgICAvLw0KPiArICAgIFN0YXR1cyA9IFRsc1JlY2VpdmVPbmVQZHUgKEh0dHBJbnN0YW5j ZSwgJlBkdSwgVGltZW91dCk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiAr ICAgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBCdWZmZXJJblNpemUg PSBQZHUtPlRvdGFsU2l6ZTsNCj4gKyAgICBCdWZmZXJJbiA9IEFsbG9jYXRlWmVyb1Bvb2wgKEJ1 ZmZlckluU2l6ZSk7DQo+ICsgICAgaWYgKEJ1ZmZlckluID09IE5VTEwpIHsNCj4gKyAgICAgIE5l dGJ1ZkZyZWUgKFBkdSk7DQo+ICsgICAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsN Cj4gKyAgICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgTmV0YnVmQ29w eSAoUGR1LCAwLCAoVUlOVDMyKUJ1ZmZlckluU2l6ZSwgQnVmZmVySW4pOw0KPiArDQo+ICsgICAg TmV0YnVmRnJlZSAoUGR1KTsNCj4gKw0KPiArICAgIC8vDQo+ICsgICAgLy8gSGFuZGxlIFJlY2Vp dmUgZGF0YS4NCj4gKyAgICAvLw0KPiArICAgIEJ1ZmZlck91dFNpemUgPSBERUZfQlVGX0xFTjsN Cj4gKyAgICBCdWZmZXJPdXQgPSBBbGxvY2F0ZVplcm9Qb29sIChCdWZmZXJPdXRTaXplKTsNCj4g KyAgICBpZiAoQnVmZmVyT3V0ID09IE5VTEwpIHsNCj4gKyAgICAgIFN0YXR1cyA9IEVGSV9PVVRf T0ZfUkVTT1VSQ0VTOw0KPiArICAgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgICB9DQo+ICsNCj4g KyAgICBTdGF0dXMgPSBIdHRwSW5zdGFuY2UtPlRscy0+QnVpbGRSZXNwb25zZVBhY2tldCAoDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSHR0cEluc3RhbmNlLT5UbHMsDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVySW4sDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVySW5TaXplLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlck91dCwNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmQnVmZmVyT3V0U2l6ZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7DQo+ICsgICAgaWYgKFN0YXR1cyA9PSBFRklfQlVGRkVSX1RPT19TTUFMTCkg ew0KPiArICAgICAgIEZyZWVQb29sIChCdWZmZXJPdXQpOw0KPiArICAgICAgIEJ1ZmZlck91dCA9 IEFsbG9jYXRlWmVyb1Bvb2wgKEJ1ZmZlck91dFNpemUpOw0KPiArICAgICAgIGlmIChCdWZmZXJP dXQgPT0gTlVMTCkgew0KPiArICAgICAgICAgRnJlZVBvb2wgKEJ1ZmZlckluKTsNCj4gKyAgICAg ICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICAgICAgICAgcmV0dXJuIFN0 YXR1czsNCj4gKyAgICAgICB9DQo+ICsNCj4gKyAgICAgICBTdGF0dXMgPSBIdHRwSW5zdGFuY2Ut PlRscy0+QnVpbGRSZXNwb25zZVBhY2tldCAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgSHR0cEluc3RhbmNlLT5UbHMsDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQnVmZmVySW4sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQnVmZmVySW5TaXplLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEJ1ZmZlck91dCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmQnVmZmVyT3V0U2l6ZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgRnJlZVBvb2wgKEJ1ZmZlckluKTsNCj4gKw0KPiAr ICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIHJldHVybiBTdGF0dXM7DQo+ ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKEJ1ZmZlck91dFNpemUgIT0gMCkgew0KPiArICAgICAg Ly8NCj4gKyAgICAgIC8vIFRyYW5zbWl0IHRoZSByZXNwb25zZSBwYWNrZXQuDQo+ICsgICAgICAv Lw0KPiArICAgICAgUGFja2V0T3V0ID0gTmV0YnVmQWxsb2MgKChVSU5UMzIpIEJ1ZmZlck91dFNp emUpOw0KPiArICAgICAgRGF0YU91dCA9IE5ldGJ1ZkFsbG9jU3BhY2UgKFBhY2tldE91dCwgKFVJ TlQzMikgQnVmZmVyT3V0U2l6ZSwNCj4gTkVUX0JVRl9UQUlMKTsNCj4gKyAgICAgIENvcHlNZW0g KERhdGFPdXQsIEJ1ZmZlck91dCwgQnVmZmVyT3V0U2l6ZSk7DQo+ICsNCj4gKyAgICAgIFN0YXR1 cyA9IFRsc0NvbW1vblRyYW5zbWl0IChIdHRwSW5zdGFuY2UsIFBhY2tldE91dCk7DQo+ICsNCj4g KyAgICAgIE5ldGJ1ZkZyZWUgKFBhY2tldE91dCk7DQo+ICsNCj4gKyAgICAgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gKyAgICAgICAgRnJlZVBvb2wgKEJ1ZmZlck91dCk7DQo+ICsgICAg ICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgRnJl ZVBvb2wgKEJ1ZmZlck91dCk7DQo+ICsNCj4gKyAgICAvLw0KPiArICAgIC8vIEdldCB0aGUgc2Vz c2lvbiBzdGF0ZSwgdGhlbiBkZWNpZGUgd2hldGhlciBuZWVkIHRvIGNvbnRpbnVlIGhhbmRsZQ0K PiByZWNlaXZlZCBwYWNrZXQuDQo+ICsgICAgLy8NCj4gKyAgICBHZXRTZXNzaW9uRGF0YUJ1ZmZl clNpemUgPSBERUZfQlVGX0xFTjsNCj4gKyAgICBHZXRTZXNzaW9uRGF0YUJ1ZmZlciA9IEFsbG9j YXRlWmVyb1Bvb2wgKEdldFNlc3Npb25EYXRhQnVmZmVyU2l6ZSk7DQo+ICsgICAgaWYgKEdldFNl c3Npb25EYXRhQnVmZmVyID09IE5VTEwpIHsNCj4gKyAgICAgIFN0YXR1cyA9IEVGSV9PVVRfT0Zf UkVTT1VSQ0VTOw0KPiArICAgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgICB9DQo+ICsNCj4gKyAg ICBTdGF0dXMgPSBIdHRwSW5zdGFuY2UtPlRscy0+R2V0U2Vzc2lvbkRhdGEgKA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEh0dHBJbnN0YW5jZS0+VGxzLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVmaVRsc1Nlc3Npb25TdGF0ZSwNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRTZXNzaW9uRGF0YUJ1ZmZlciwNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmR2V0U2Vzc2lvbkRhdGFCdWZmZXJTaXpl DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICBpZiAoU3Rh dHVzID09IEVGSV9CVUZGRVJfVE9PX1NNQUxMKSB7DQo+ICsgICAgICAgRnJlZVBvb2wgKEdldFNl c3Npb25EYXRhQnVmZmVyKTsNCj4gKyAgICAgICBHZXRTZXNzaW9uRGF0YUJ1ZmZlciA9IEFsbG9j YXRlWmVyb1Bvb2wgKEdldFNlc3Npb25EYXRhQnVmZmVyU2l6ZSk7DQo+ICsgICAgICAgaWYgKEdl dFNlc3Npb25EYXRhQnVmZmVyID09IE5VTEwpIHsNCj4gKyAgICAgICAgIFN0YXR1cyA9IEVGSV9P VVRfT0ZfUkVTT1VSQ0VTOw0KPiArICAgICAgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgICAgICB9 DQo+ICsNCj4gKyAgICAgICBTdGF0dXMgPSBIdHRwSW5zdGFuY2UtPlRscy0+R2V0U2Vzc2lvbkRh dGEgKA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEh0dHBJbnN0YW5j ZS0+VGxzLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVmaVRsc1Nl c3Npb25TdGF0ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRT ZXNzaW9uRGF0YUJ1ZmZlciwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmR2V0U2Vzc2lvbkRhdGFCdWZmZXJTaXplDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsNCj4gKyAgICB9DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPiArICAgICAgRnJlZVBvb2woR2V0U2Vzc2lvbkRhdGFCdWZmZXIpOw0KPiArICAgICAgcmV0 dXJuIFN0YXR1czsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBBU1NFUlQoR2V0U2Vzc2lvbkRhdGFC dWZmZXJTaXplID09IHNpemVvZiAoRUZJX1RMU19TRVNTSU9OX1NUQVRFKSk7DQo+ICsgICAgSHR0 cEluc3RhbmNlLT5UbHNTZXNzaW9uU3RhdGUgPSAqKEVGSV9UTFNfU0VTU0lPTl9TVEFURSAqKQ0K PiBHZXRTZXNzaW9uRGF0YUJ1ZmZlcjsNCj4gKw0KPiArICAgIEZyZWVQb29sIChHZXRTZXNzaW9u RGF0YUJ1ZmZlcik7DQo+ICsNCj4gKyAgICBpZihIdHRwSW5zdGFuY2UtPlRsc1Nlc3Npb25TdGF0 ZSA9PSBFZmlUbHNTZXNzaW9uRXJyb3IpIHsNCj4gKyAgICAgIHJldHVybiBFRklfQUJPUlRFRDsN Cj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoSHR0cEluc3RhbmNlLT5UbHNTZXNzaW9u U3RhdGUgIT0gRWZpVGxzU2Vzc2lvbkRhdGFUcmFuc2ZlcnJpbmcpIHsNCj4gKyAgICBTdGF0dXMg PSBFRklfQUJPUlRFRDsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ ICsNCj4gKy8qKg0KPiArICBDbG9zZSB0aGUgVExTIHNlc3Npb24gYW5kIHNlbmQgb3V0IHRoZSBj bG9zZSBub3RpZmljYXRpb24gbWVzc2FnZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBIdHRwSW5z dGFuY2UgICAgICAgVGhlIEhUVFAgaW5zdGFuY2UgcHJpdmF0ZSBkYXRhLg0KPiArDQo+ICsgIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgVExTIHNlc3Npb24gaXMgY2xvc2VkLg0K PiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgSHR0cEluc3RhbmNlIGlzIE5VTEwu DQo+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgICBDYW4ndCBhbGxvY2F0ZSBtZW1v cnkgcmVzb3VyY2VzLg0KPiArICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgICAgICAgT3RoZXIg ZXJyb3IgYXMgaW5kaWNhdGVkLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQ SQ0KPiArVGxzQ2xvc2VTZXNzaW9uICgNCj4gKyAgSU4gIEhUVFBfUFJPVE9DT0wgICAgICAgICAg ICAqSHR0cEluc3RhbmNlDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgIFN0YXR1 czsNCj4gKw0KPiArICBVSU5UOCAgICAgICAgICAgKkJ1ZmZlck91dDsNCj4gKyAgVUlOVE4gICAg ICAgICAgIEJ1ZmZlck91dFNpemU7DQo+ICsNCj4gKyAgTkVUX0JVRiAgICAgICAgICpQYWNrZXRP dXQ7DQo+ICsgIFVJTlQ4ICAgICAgICAgICAqRGF0YU91dDsNCj4gKw0KPiArICBTdGF0dXMgICAg PSBFRklfU1VDQ0VTUzsNCj4gKyAgQnVmZmVyT3V0ID0gTlVMTDsNCj4gKyAgUGFja2V0T3V0ID0g TlVMTDsNCj4gKyAgRGF0YU91dCAgID0gTlVMTDsNCj4gKw0KPiArICBpZiAoSHR0cEluc3RhbmNl ID09IE5VTEwpIHsNCj4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiArICB9 DQo+ICsNCj4gKyAgSHR0cEluc3RhbmNlLT5UbHNTZXNzaW9uU3RhdGUgPSBFZmlUbHNTZXNzaW9u Q2xvc2luZzsNCj4gKw0KPiArICBTdGF0dXMgPSBIdHRwSW5zdGFuY2UtPlRscy0+U2V0U2Vzc2lv bkRhdGEgKA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIdHRwSW5zdGFuY2Ut PlRscywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWZpVGxzU2Vzc2lvblN0 YXRlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKEh0dHBJbnN0YW5jZS0+ VGxzU2Vzc2lvblN0YXRlKSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZW9mIChFRklfVExTX1NFU1NJT05fU1RBVEUpDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4g U3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgQnVmZmVyT3V0U2l6ZSA9IERFRl9CVUZfTEVOOw0K PiArICBCdWZmZXJPdXQgPSBBbGxvY2F0ZVplcm9Qb29sIChCdWZmZXJPdXRTaXplKTsNCj4gKyAg aWYgKEJ1ZmZlck91dCA9PSBOVUxMKSB7DQo+ICsgICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNP VVJDRVM7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9 IEh0dHBJbnN0YW5jZS0+VGxzLT5CdWlsZFJlc3BvbnNlUGFja2V0ICgNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgSHR0cEluc3RhbmNlLT5UbHMsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDAsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlck91dCwNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkJ1ZmZlck91dFNpemUNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKFN0YXR1cyA9PSBFRklfQlVG RkVSX1RPT19TTUFMTCkgew0KPiArICAgIEZyZWVQb29sIChCdWZmZXJPdXQpOw0KPiArICAgIEJ1 ZmZlck91dCA9IEFsbG9jYXRlWmVyb1Bvb2wgKEJ1ZmZlck91dFNpemUpOw0KPiArICAgIGlmIChC dWZmZXJPdXQgPT0gTlVMTCkgew0KPiArICAgICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJD RVM7DQo+ICsgICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAgIH0NCj4gKw0KPiArICAgIFN0YXR1 cyA9IEh0dHBJbnN0YW5jZS0+VGxzLT5CdWlsZFJlc3BvbnNlUGFja2V0ICgNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBIdHRwSW5zdGFuY2UtPlRscywNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDAsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVm ZmVyT3V0LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZCdWZmZXJPdXRT aXplDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgfQ0KPiAr DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBGcmVlUG9vbCAoQnVmZmVy T3V0KTsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgUGFja2V0T3V0 ID0gTmV0YnVmQWxsb2MgKChVSU5UMzIpIEJ1ZmZlck91dFNpemUpOw0KPiArICBEYXRhT3V0ID0g TmV0YnVmQWxsb2NTcGFjZSAoUGFja2V0T3V0LCAoVUlOVDMyKSBCdWZmZXJPdXRTaXplLA0KPiBO RVRfQlVGX1RBSUwpOw0KPiArICBDb3B5TWVtIChEYXRhT3V0LCBCdWZmZXJPdXQsIEJ1ZmZlck91 dFNpemUpOw0KPiArDQo+ICsgIFN0YXR1cyA9IFRsc0NvbW1vblRyYW5zbWl0IChIdHRwSW5zdGFu Y2UsIFBhY2tldE91dCk7DQo+ICsNCj4gKyAgRnJlZVBvb2wgKEJ1ZmZlck91dCk7DQo+ICsgIE5l dGJ1ZkZyZWUgKFBhY2tldE91dCk7DQo+ICsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gU3RhdHVz Ow0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUHJvY2VzcyBvbmUgbWVzc2FnZSBhY2NvcmRpbmcg dG8gdGhlIENyeXB0TW9kZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgICAgICAgICBIdHRwSW5z dGFuY2UgICAgUG9pbnRlciB0byBIVFRQX1BST1RPQ09MIHN0cnVjdHVyZS4NCj4gKyAgQHBhcmFt W2luXSAgICAgICAgICAgTWVzc2FnZSAgICAgICAgIFBvaW50ZXIgdG8gdGhlIG1lc3NhZ2UgYnVm ZmVyIG5lZWRlZCB0bw0KPiBwcm9jZXNzZWQuDQo+ICsgIEBwYXJhbVtpbl0gICAgICAgICAgIE1l c3NhZ2VTaXplICAgICBQb2ludGVyIHRvIHRoZSBtZXNzYWdlIGJ1ZmZlciBzaXplLg0KPiArICBA cGFyYW1baW5dICAgICAgICAgICBQcm9jZXNzTW9kZSAgICAgUHJvY2VzcyBtb2RlLg0KPiArICBA cGFyYW1baW4sIG91dF0gICAgICBGcmFnbWVudCAgICAgICAgT25seSBvbmUgRnJhZ21lbnQgcmV0 dXJuZWQgYWZ0ZXIgdGhlDQo+IE1lc3NhZ2UgaXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHByb2Nlc3NlZCBzdWNjZXNzZnVsbHkuDQo+ICsNCj4gKyAgQHJldHZh bCBFRklfU1VDQ0VTUyAgICAgICAgICBNZXNzYWdlIGlzIHByb2Nlc3NlZCBzdWNjZXNzZnVsbHku DQo+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgICBDYW4ndCBhbGxvY2F0ZSBtZW1v cnkgcmVzb3VyY2VzLg0KPiArICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgICAgIE90aGVyIGVy cm9ycyBhcyBpbmRpY2F0ZWQuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJ DQo+ICtUbHNQcm9jZXNzTWVzc2FnZSAoDQo+ICsgIElOICAgICBIVFRQX1BST1RPQ09MICAgICAg ICAgICAgKkh0dHBJbnN0YW5jZSwNCj4gKyAgSU4gICAgIFVJTlQ4ICAgICAgICAgICAgICAgICAg ICAqTWVzc2FnZSwNCj4gKyAgSU4gICAgIFVJTlROICAgICAgICAgICAgICAgICAgICBNZXNzYWdl U2l6ZSwNCj4gKyAgSU4gICAgIEVGSV9UTFNfQ1JZUFRfTU9ERSAgICAgICBQcm9jZXNzTW9kZSwN Cj4gKyAgSU4gT1VUIE5FVF9GUkFHTUVOVCAgICAgICAgICAgICAqRnJhZ21lbnQNCj4gKyAgKQ0K PiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAg VUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAqQnVmZmVyOw0KPiArICBVSU5UMzIgICAg ICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlclNpemU7DQo+ICsgIFVJTlQzMiAgICAgICAgICAg ICAgICAgICAgICAgICAgQnl0ZXNDb3BpZWQ7DQo+ICsgIEVGSV9UTFNfRlJBR01FTlRfREFUQSAg ICAgICAgICAgKkZyYWdtZW50VGFibGU7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAg ICAgICAgRnJhZ21lbnRDb3VudDsNCj4gKyAgRUZJX1RMU19GUkFHTUVOVF9EQVRBICAgICAgICAg ICAqT3JpZ2luYWxGcmFnbWVudFRhYmxlOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAg ICAgICAgIEluZGV4Ow0KPiArDQo+ICsgIFN0YXR1cyAgICAgICAgICAgICAgICAgICA9IEVGSV9T VUNDRVNTOw0KPiArICBCdWZmZXIgICAgICAgICAgICAgICAgICAgPSBOVUxMOw0KPiArICBCdWZm ZXJTaXplICAgICAgICAgICAgICAgPSAwOw0KPiArICBCeXRlc0NvcGllZCAgICAgICAgICAgICAg PSAwOw0KPiArICBGcmFnbWVudFRhYmxlICAgICAgICAgICAgPSBOVUxMOw0KPiArICBPcmlnaW5h bEZyYWdtZW50VGFibGUgICAgPSBOVUxMOw0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIFJlYnVpbGQg ZnJhZ21lbnQgdGFibGUgZnJvbSBCdWZmZXJJbi4NCj4gKyAgLy8NCj4gKyAgRnJhZ21lbnRDb3Vu dCA9IDE7DQo+ICsgIEZyYWdtZW50VGFibGUgPSBBbGxvY2F0ZVplcm9Qb29sIChGcmFnbWVudENv dW50ICogc2l6ZW9mDQo+IChFRklfVExTX0ZSQUdNRU5UX0RBVEEpKTsNCj4gKyAgaWYgKEZyYWdt ZW50VGFibGUgPT0gTlVMTCkgew0KPiArICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VT Ow0KPiArICAgIGdvdG8gT05fRVhJVDsNCj4gKyAgfQ0KPiArDQo+ICsgIEZyYWdtZW50VGFibGUt PkZyYWdtZW50TGVuZ3RoID0gKFVJTlQzMikgTWVzc2FnZVNpemU7DQo+ICsgIEZyYWdtZW50VGFi bGUtPkZyYWdtZW50QnVmZmVyID0gTWVzc2FnZTsNCj4gKw0KPiArICAvLw0KPiArICAvLyBSZWNv cmQgdGhlIG9yaWdpbmFsIEZyYWdtZW50VGFibGUuDQo+ICsgIC8vDQo+ICsgIE9yaWdpbmFsRnJh Z21lbnRUYWJsZSA9IEZyYWdtZW50VGFibGU7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gUHJvY2Vz cyB0aGUgTWVzc2FnZS4NCj4gKyAgLy8NCj4gKyAgU3RhdHVzID0gSHR0cEluc3RhbmNlLT5UbHMt PlByb2Nlc3NQYWNrZXQgKA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIdHRw SW5zdGFuY2UtPlRscywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkZyYWdt ZW50VGFibGUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZGcmFnbWVudENv dW50LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jZXNzTW9kZQ0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+ICsgICAgZ290byBPTl9FWElUOw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4g KyAgLy8gQ2FsY3VsYXRlIHRoZSBzaXplIGFjY29yZGluZyB0byBGcmFnbWVudFRhYmxlLg0KPiAr ICAvLw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBGcmFnbWVudENvdW50OyBJbmRleCsr KSB7DQo+ICsgICAgQnVmZmVyU2l6ZSArPSBGcmFnbWVudFRhYmxlW0luZGV4XS5GcmFnbWVudExl bmd0aDsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIEFsbG9jYXRlIGJ1ZmZlciBmb3Ig cHJvY2Vzc2VkIGRhdGEuDQo+ICsgIC8vDQo+ICsgIEJ1ZmZlciA9IEFsbG9jYXRlWmVyb1Bvb2wg KEJ1ZmZlclNpemUpOw0KPiArICBpZiAoQnVmZmVyID09IE5VTEwpIHsNCj4gKyAgICBTdGF0dXMg PSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gKyAgICBnb3RvIE9OX0VYSVQ7DQo+ICsgIH0NCj4g Kw0KPiArICAvLw0KPiArICAvLyBDb3B5IHRoZSBuZXcgRnJhZ21lbnRUYWJsZSBidWZmZXIgaW50 byBCdWZmZXIuDQo+ICsgIC8vDQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IEZyYWdtZW50 Q291bnQ7IEluZGV4KyspIHsNCj4gKyAgICBDb3B5TWVtICgNCj4gKyAgICAgIChCdWZmZXIgKyBC eXRlc0NvcGllZCksDQo+ICsgICAgICBGcmFnbWVudFRhYmxlW0luZGV4XS5GcmFnbWVudEJ1ZmZl ciwNCj4gKyAgICAgIEZyYWdtZW50VGFibGVbSW5kZXhdLkZyYWdtZW50TGVuZ3RoDQo+ICsgICAg ICApOw0KPiArICAgIEJ5dGVzQ29waWVkICs9IEZyYWdtZW50VGFibGVbSW5kZXhdLkZyYWdtZW50 TGVuZ3RoOw0KPiArDQo+ICsgICAgLy8NCj4gKyAgICAvLyBGcmVlIHRoZSBGcmFnbWVudEJ1ZmZl ciBzaW5jZSBpdCBoYXMgYmVlbiBjb3BpZWQuDQo+ICsgICAgLy8NCj4gKyAgICBGcmVlUG9vbCAo RnJhZ21lbnRUYWJsZVtJbmRleF0uRnJhZ21lbnRCdWZmZXIpOw0KPiArICB9DQo+ICsNCj4gKyAg RnJhZ21lbnQtPkxlbiAgPSBCdWZmZXJTaXplOw0KPiArICBGcmFnbWVudC0+QnVsayA9IEJ1ZmZl cjsNCj4gKw0KPiArT05fRVhJVDoNCj4gKw0KPiArICBpZiAoT3JpZ2luYWxGcmFnbWVudFRhYmxl ICE9IE5VTEwpIHsNCj4gKyAgICBGcmVlUG9vbCAoT3JpZ2luYWxGcmFnbWVudFRhYmxlKTsNCj4g KyAgICBPcmlnaW5hbEZyYWdtZW50VGFibGUgPSBOVUxMOw0KPiArICB9DQo+ICsNCj4gKyAgLy8N Cj4gKyAgLy8gQ2FsbGVyIGhhcyB0aGUgcmVzcG9uc2liaWxpdHkgdG8gZnJlZSB0aGUgRnJhZ21l bnRUYWJsZS4NCj4gKyAgLy8NCj4gKyAgaWYgKEZyYWdtZW50VGFibGUgIT0gTlVMTCkgew0KPiAr ICAgIEZyZWVQb29sIChGcmFnbWVudFRhYmxlKTsNCj4gKyAgICBGcmFnbWVudFRhYmxlID0gTlVM TDsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0K PiArICBSZWNlaXZlIG9uZSBmcmFnbWVudCBkZWNyeXB0ZWQgZnJvbSBvbmUgVExTIHJlY29yZC4N Cj4gKw0KPiArICBAcGFyYW1baW5dICAgICAgICAgICBIdHRwSW5zdGFuY2UgICAgUG9pbnRlciB0 byBIVFRQX1BST1RPQ09MIHN0cnVjdHVyZS4NCj4gKyAgQHBhcmFtW2luLCBvdXRdICAgICAgRnJh Z21lbnQgICAgICAgIFRoZSByZWNlaXZlZCBGcmFnbWVudC4NCj4gKyAgQHBhcmFtW2luXSAgICAg ICAgICAgVGltZW91dCAgICAgICAgIFRoZSB0aW1lIHRvIHdhaXQgZm9yIGNvbm5lY3Rpb24gZG9u ZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgIE9uZSBmcmFnbWVudCBp cyByZWNlaXZlZC4NCj4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyBDYW4ndCBhbGxv Y2F0ZSBtZW1vcnkgcmVzb3VyY2VzLg0KPiArICBAcmV0dmFsIEVGSV9BQk9SVEVEICAgICAgICAg IFNvbWV0aGluZyB3cm9uZyBkZWNyeXB0aW9uIHRoZSBtZXNzYWdlLg0KPiArICBAcmV0dmFsIE90 aGVycyAgICAgICAgICAgICAgIE90aGVyIGVycm9ycyBhcyBpbmRpY2F0ZWQuDQo+ICsNCj4gKyoq Lw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtIdHRwc1JlY2VpdmUgKA0KPiArICBJTiAg ICAgSFRUUF9QUk9UT0NPTCAgICAgICAgICpIdHRwSW5zdGFuY2UsDQo+ICsgIElOIE9VVCBORVRf RlJBR01FTlQgICAgICAgICAgKkZyYWdtZW50LA0KPiArICBJTiAgICAgRUZJX0VWRU5UICAgICAg ICAgICAgIFRpbWVvdXQNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAg ICAgICAgICAgIFN0YXR1czsNCj4gKyAgTkVUX0JVRiAgICAgICAgICAgICAgICAgICAgICAgICAq UGR1Ow0KPiArICBUTFNfUkVDT1JEX0hFQURFUiAgICAgICAgICAgICAgIFJlY29yZEhlYWRlcjsN Cj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAqQnVmZmVySW47DQo+ICsgIFVJ TlROICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVySW5TaXplOw0KPiArICBORVRfRlJB R01FTlQgICAgICAgICAgICAgICAgICAgIFRlbXBGcmFnbWVudDsNCj4gKyAgVUlOVDggICAgICAg ICAgICAgICAgICAgICAgICAgICAqQnVmZmVyT3V0Ow0KPiArICBVSU5UTiAgICAgICAgICAgICAg ICAgICAgICAgICAgIEJ1ZmZlck91dFNpemU7DQo+ICsgIE5FVF9CVUYgICAgICAgICAgICAgICAg ICAgICAgICAgKlBhY2tldE91dDsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAg ICAqRGF0YU91dDsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAqR2V0U2Vz c2lvbkRhdGFCdWZmZXI7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0 U2Vzc2lvbkRhdGFCdWZmZXJTaXplOw0KPiArDQo+ICsgIFN0YXR1cyAgICAgICAgICAgICAgICAg ICA9IEVGSV9TVUNDRVNTOw0KPiArICBQZHUgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMOw0K PiArICBCdWZmZXJJbiAgICAgICAgICAgICAgICAgPSBOVUxMOw0KPiArICBCdWZmZXJJblNpemUg ICAgICAgICAgICAgPSAwOw0KPiArICBCdWZmZXJPdXQgICAgICAgICAgICAgICAgPSBOVUxMOw0K PiArICBCdWZmZXJPdXRTaXplICAgICAgICAgICAgPSAwOw0KPiArICBQYWNrZXRPdXQgICAgICAg ICAgICAgICAgPSBOVUxMOw0KPiArICBEYXRhT3V0ICAgICAgICAgICAgICAgICAgPSBOVUxMOw0K PiArICBHZXRTZXNzaW9uRGF0YUJ1ZmZlciAgICAgPSBOVUxMOw0KPiArICBHZXRTZXNzaW9uRGF0 YUJ1ZmZlclNpemUgPSAwOw0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIFJlY2VpdmUgb25seSBvbmUg VExTIHJlY29yZA0KPiArICAvLw0KPiArICBTdGF0dXMgPSBUbHNSZWNlaXZlT25lUGR1IChIdHRw SW5zdGFuY2UsICZQZHUsIFRpbWVvdXQpOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIEJ1ZmZlckluU2l6ZSA9 IFBkdS0+VG90YWxTaXplOw0KPiArICBCdWZmZXJJbiA9IEFsbG9jYXRlWmVyb1Bvb2wgKEJ1ZmZl ckluU2l6ZSk7DQo+ICsgIGlmIChCdWZmZXJJbiA9PSBOVUxMKSB7DQo+ICsgICAgU3RhdHVzID0g RUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgICAgTmV0YnVmRnJlZSAoUGR1KTsNCj4gKyAgICBy ZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgTmV0YnVmQ29weSAoUGR1LCAwLCAoVUlO VDMyKSBCdWZmZXJJblNpemUsIEJ1ZmZlckluKTsNCj4gKw0KPiArICBOZXRidWZGcmVlIChQZHUp Ow0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIEhhbmRsZSBSZWNlaXZlIGRhdGEuDQo+ICsgIC8vDQo+ ICsgIFJlY29yZEhlYWRlciA9ICooVExTX1JFQ09SRF9IRUFERVIgKikgQnVmZmVySW47DQo+ICsN Cj4gKyAgaWYgKChSZWNvcmRIZWFkZXIuQ29udGVudFR5cGUgPT0NCj4gVExTX0NPTlRFTlRfVFlQ RV9BUFBMSUNBVElPTl9EQVRBKSAmJg0KPiArICAgIChSZWNvcmRIZWFkZXIuVmVyc2lvbi5NYWpv ciA9PSAweDAzKSAmJg0KPiArICAgIChSZWNvcmRIZWFkZXIuVmVyc2lvbi5NaW5vciA9PSBUTFMx MF9QUk9UT0NPTF9WRVJTSU9OX01JTk9SIHx8DQo+ICsgICAgUmVjb3JkSGVhZGVyLlZlcnNpb24u TWlub3IgPT0gVExTMTFfUFJPVE9DT0xfVkVSU0lPTl9NSU5PUiB8fA0KPiArICAgIFJlY29yZEhl YWRlci5WZXJzaW9uLk1pbm9yID09IFRMUzEyX1BST1RPQ09MX1ZFUlNJT05fTUlOT1IpDQo+ICsg ICkgew0KPiArICAgIC8vDQo+ICsgICAgLy8gRGVjcnlwdCBQYWNrZXQuDQo+ICsgICAgLy8NCj4g KyAgICBTdGF0dXMgPSBUbHNQcm9jZXNzTWVzc2FnZSAoDQo+ICsgICAgICAgICAgICAgICBIdHRw SW5zdGFuY2UsDQo+ICsgICAgICAgICAgICAgICBCdWZmZXJJbiwNCj4gKyAgICAgICAgICAgICAg IEJ1ZmZlckluU2l6ZSwNCj4gKyAgICAgICAgICAgICAgIEVmaVRsc0RlY3J5cHQsDQo+ICsgICAg ICAgICAgICAgICAmVGVtcEZyYWdtZW50DQo+ICsgICAgICAgICAgICAgICApOw0KPiArDQo+ICsg ICAgRnJlZVBvb2wgKEJ1ZmZlckluKTsNCj4gKw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4gKyAgICAgIGlmIChTdGF0dXMgPT0gRUZJX0FCT1JURUQpIHsNCj4gKyAgICAgICAg Ly8NCj4gKyAgICAgICAgLy8gU29tZXRoaW5nIHdyb25nIGRlY3J5cHRpb24gdGhlIG1lc3NhZ2Uu DQo+ICsgICAgICAgIC8vIEJ1aWxkUmVzcG9uc2VQYWNrZXQoKSB3aWxsIGJlIGNhbGxlZCB0byBn ZW5lcmF0ZSBFcnJvciBBbGVydCBtZXNzYWdlDQo+IGFuZCBzZW5kIGl0IG91dC4NCj4gKyAgICAg ICAgLy8NCj4gKyAgICAgICAgQnVmZmVyT3V0U2l6ZSA9IERFRl9CVUZfTEVOOw0KPiArICAgICAg ICBCdWZmZXJPdXQgPSBBbGxvY2F0ZVplcm9Qb29sIChCdWZmZXJPdXRTaXplKTsNCj4gKyAgICAg ICAgaWYgKEJ1ZmZlck91dCA9PSBOVUxMKSB7DQo+ICsgICAgICAgICAgU3RhdHVzID0gRUZJX09V VF9PRl9SRVNPVVJDRVM7DQo+ICsgICAgICAgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgICAgICAg fQ0KPiArDQo+ICsgICAgICAgIFN0YXR1cyA9IEh0dHBJbnN0YW5jZS0+VGxzLT5CdWlsZFJlc3Bv bnNlUGFja2V0ICgNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSHR0 cEluc3RhbmNlLT5UbHMsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE5VTEwsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlck91dCwNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkJ1ZmZlck91dFNpemUNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICAgICAgaWYgKFN0YXR1 cyA9PSBFRklfQlVGRkVSX1RPT19TTUFMTCkgew0KPiArICAgICAgICAgIEZyZWVQb29sIChCdWZm ZXJPdXQpOw0KPiArICAgICAgICAgIEJ1ZmZlck91dCA9IEFsbG9jYXRlWmVyb1Bvb2wgKEJ1ZmZl ck91dFNpemUpOw0KPiArICAgICAgICAgIGlmIChCdWZmZXJPdXQgPT0gTlVMTCkgew0KPiArICAg ICAgICAgICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgICAgICAgICAgICBy ZXR1cm4gU3RhdHVzOw0KPiArICAgICAgICAgIH0NCj4gKw0KPiArICAgICAgICAgIFN0YXR1cyA9 IEh0dHBJbnN0YW5jZS0+VGxzLT5CdWlsZFJlc3BvbnNlUGFja2V0ICgNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIdHRwSW5zdGFuY2UtPlRscywNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQnVmZmVyT3V0LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZCdWZmZXJPdXRTaXplDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICAgICAgRnJlZVBvb2woQnVmZmVyT3V0KTsNCj4gKyAg ICAgICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgaWYg KEJ1ZmZlck91dFNpemUgIT0gMCkgew0KPiArICAgICAgICAgIFBhY2tldE91dCA9IE5ldGJ1ZkFs bG9jICgoVUlOVDMyKUJ1ZmZlck91dFNpemUpOw0KPiArICAgICAgICAgIERhdGFPdXQgPSBOZXRi dWZBbGxvY1NwYWNlIChQYWNrZXRPdXQsIChVSU5UMzIpIEJ1ZmZlck91dFNpemUsDQo+IE5FVF9C VUZfVEFJTCk7DQo+ICsgICAgICAgICAgQ29weU1lbSAoRGF0YU91dCwgQnVmZmVyT3V0LCBCdWZm ZXJPdXRTaXplKTsNCj4gKw0KPiArICAgICAgICAgIFN0YXR1cyA9IFRsc0NvbW1vblRyYW5zbWl0 IChIdHRwSW5zdGFuY2UsIFBhY2tldE91dCk7DQo+ICsNCj4gKyAgICAgICAgICBOZXRidWZGcmVl IChQYWNrZXRPdXQpOw0KPiArICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgRnJlZVBvb2woQnVm ZmVyT3V0KTsNCj4gKw0KPiArICAgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsg ICAgICAgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgIHJl dHVybiBFRklfQUJPUlRFRDsNCj4gKyAgICAgIH0NCj4gKw0KPiArICAgICAgcmV0dXJuIFN0YXR1 czsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICAvLw0KPiArICAgIC8vIFBhcnNpbmcgYnVmZmVyLg0K PiArICAgIC8vDQo+ICsgICAgQVNTRVJUICgoKFRMU19SRUNPUkRfSEVBREVSICopIChUZW1wRnJh Z21lbnQuQnVsaykpLT5Db250ZW50VHlwZQ0KPiA9PSBUTFNfQ09OVEVOVF9UWVBFX0FQUExJQ0FU SU9OX0RBVEEpOw0KPiArDQo+ICsgICAgQnVmZmVySW5TaXplID0gKChUTFNfUkVDT1JEX0hFQURF UiAqKSAoVGVtcEZyYWdtZW50LkJ1bGspKS0+TGVuZ3RoOw0KPiArICAgIEJ1ZmZlckluID0gQWxs b2NhdGVaZXJvUG9vbCAoQnVmZmVySW5TaXplKTsNCj4gKyAgICBpZiAoQnVmZmVySW4gPT0gTlVM TCkgew0KPiArICAgICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgICAgICBy ZXR1cm4gU3RhdHVzOw0KPiArICAgIH0NCj4gKw0KPiArICAgIENvcHlNZW0gKEJ1ZmZlckluLCBU ZW1wRnJhZ21lbnQuQnVsayArIHNpemVvZg0KPiAoVExTX1JFQ09SRF9IRUFERVIpLCBCdWZmZXJJ blNpemUpOw0KPiArDQo+ICsgICAgLy8NCj4gKyAgICAvLyBGcmVlIHRoZSBidWZmZXIgaW4gVGVt cEZyYWdtZW50Lg0KPiArICAgIC8vDQo+ICsgICAgRnJlZVBvb2wgKFRlbXBGcmFnbWVudC5CdWxr KTsNCj4gKw0KPiArICB9IGVsc2UgaWYgKChSZWNvcmRIZWFkZXIuQ29udGVudFR5cGUgPT0gVExT X0NPTlRFTlRfVFlQRV9BTEVSVCkgJiYNCj4gKyAgICAoUmVjb3JkSGVhZGVyLlZlcnNpb24uTWFq b3IgPT0gMHgwMykgJiYNCj4gKyAgICAoUmVjb3JkSGVhZGVyLlZlcnNpb24uTWlub3IgPT0gVExT MTBfUFJPVE9DT0xfVkVSU0lPTl9NSU5PUiB8fA0KPiArICAgIFJlY29yZEhlYWRlci5WZXJzaW9u Lk1pbm9yID09IFRMUzExX1BST1RPQ09MX1ZFUlNJT05fTUlOT1IgfHwNCj4gKyAgICBSZWNvcmRI ZWFkZXIuVmVyc2lvbi5NaW5vciA9PSBUTFMxMl9QUk9UT0NPTF9WRVJTSU9OX01JTk9SKQ0KPiAr ICAgICkgew0KPiArICAgIEJ1ZmZlck91dFNpemUgPSBERUZfQlVGX0xFTjsNCj4gKyAgICBCdWZm ZXJPdXQgPSBBbGxvY2F0ZVplcm9Qb29sIChCdWZmZXJPdXRTaXplKTsNCj4gKyAgICBpZiAoQnVm ZmVyT3V0ID09IE5VTEwpIHsNCj4gKyAgICAgIEZyZWVQb29sIChCdWZmZXJJbik7DQo+ICsgICAg ICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gKyAgICAgIHJldHVybiBTdGF0dXM7 DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgU3RhdHVzID0gSHR0cEluc3RhbmNlLT5UbHMtPkJ1aWxk UmVzcG9uc2VQYWNrZXQgKA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEh0 dHBJbnN0YW5jZS0+VGxzLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1 ZmZlckluLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlckluU2l6 ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJPdXQsDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkJ1ZmZlck91dFNpemUNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIGlmIChTdGF0dXMgPT0gRUZJ X0JVRkZFUl9UT09fU01BTEwpIHsNCj4gKyAgICAgIEZyZWVQb29sIChCdWZmZXJPdXQpOw0KPiAr ICAgICAgQnVmZmVyT3V0ID0gQWxsb2NhdGVaZXJvUG9vbCAoQnVmZmVyT3V0U2l6ZSk7DQo+ICsg ICAgICBpZiAoQnVmZmVyT3V0ID09IE5VTEwpIHsNCj4gKyAgICAgICAgRnJlZVBvb2wgKEJ1ZmZl ckluKTsNCj4gKyAgICAgICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgICAg ICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgICB9DQo+ICsNCj4gKyAgICAgIFN0YXR1cyA9IEh0 dHBJbnN0YW5jZS0+VGxzLT5CdWlsZFJlc3BvbnNlUGFja2V0ICgNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEh0dHBJbnN0YW5jZS0+VGxzLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVySW4sDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBCdWZmZXJJblNpemUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBCdWZmZXJPdXQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmQnVmZmVyT3V0U2l6ZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBGcmVlUG9vbCAoQnVmZmVySW4pOw0KPiAr DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgRnJlZVBvb2wgKEJ1 ZmZlck91dCk7DQo+ICsgICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAgIH0NCj4gKw0KPiArICAg IGlmIChCdWZmZXJPdXRTaXplICE9IDApIHsNCj4gKyAgICAgIFBhY2tldE91dCA9IE5ldGJ1ZkFs bG9jICgoVUlOVDMyKSBCdWZmZXJPdXRTaXplKTsNCj4gKyAgICAgIERhdGFPdXQgPSBOZXRidWZB bGxvY1NwYWNlIChQYWNrZXRPdXQsIChVSU5UMzIpIEJ1ZmZlck91dFNpemUsDQo+IE5FVF9CVUZf VEFJTCk7DQo+ICsgICAgICBDb3B5TWVtIChEYXRhT3V0LCBCdWZmZXJPdXQsIEJ1ZmZlck91dFNp emUpOw0KPiArDQo+ICsgICAgICBTdGF0dXMgPSBUbHNDb21tb25UcmFuc21pdCAoSHR0cEluc3Rh bmNlLCBQYWNrZXRPdXQpOw0KPiArDQo+ICsgICAgICBOZXRidWZGcmVlIChQYWNrZXRPdXQpOw0K PiArICAgIH0NCj4gKw0KPiArICAgIEZyZWVQb29sIChCdWZmZXJPdXQpOw0KPiArDQo+ICsgICAg Ly8NCj4gKyAgICAvLyBHZXQgdGhlIHNlc3Npb24gc3RhdGUuDQo+ICsgICAgLy8NCj4gKyAgICBH ZXRTZXNzaW9uRGF0YUJ1ZmZlclNpemUgPSBERUZfQlVGX0xFTjsNCj4gKyAgICBHZXRTZXNzaW9u RGF0YUJ1ZmZlciA9IEFsbG9jYXRlWmVyb1Bvb2wgKEdldFNlc3Npb25EYXRhQnVmZmVyU2l6ZSk7 DQo+ICsgICAgaWYgKEdldFNlc3Npb25EYXRhQnVmZmVyID09IE5VTEwpIHsNCj4gKyAgICAgIFN0 YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICAgICAgcmV0dXJuIFN0YXR1czsNCj4g KyAgICB9DQo+ICsNCj4gKyAgICBTdGF0dXMgPSBIdHRwSW5zdGFuY2UtPlRscy0+R2V0U2Vzc2lv bkRhdGEgKA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEh0dHBJbnN0YW5j ZS0+VGxzLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVmaVRsc1Nlc3Np b25TdGF0ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRTZXNzaW9u RGF0YUJ1ZmZlciwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmR2V0U2Vz c2lvbkRhdGFCdWZmZXJTaXplDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsNCj4gKyAgICBpZiAoU3RhdHVzID09IEVGSV9CVUZGRVJfVE9PX1NNQUxMKSB7DQo+ICsgICAg ICAgRnJlZVBvb2wgKEdldFNlc3Npb25EYXRhQnVmZmVyKTsNCj4gKyAgICAgICBHZXRTZXNzaW9u RGF0YUJ1ZmZlciA9IEFsbG9jYXRlWmVyb1Bvb2wgKEdldFNlc3Npb25EYXRhQnVmZmVyU2l6ZSk7 DQo+ICsgICAgICAgaWYgKEdldFNlc3Npb25EYXRhQnVmZmVyID09IE5VTEwpIHsNCj4gKyAgICAg ICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICAgICAgICAgcmV0dXJuIFN0 YXR1czsNCj4gKyAgICAgICB9DQo+ICsNCj4gKyAgICAgICBTdGF0dXMgPSBIdHRwSW5zdGFuY2Ut PlRscy0+R2V0U2Vzc2lvbkRhdGEgKA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEh0dHBJbnN0YW5jZS0+VGxzLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEVmaVRsc1Nlc3Npb25TdGF0ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBHZXRTZXNzaW9uRGF0YUJ1ZmZlciwNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmR2V0U2Vzc2lvbkRhdGFCdWZmZXJTaXplDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICB9DQo+ICsgICAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgRnJlZVBvb2wgKEdldFNlc3Npb25EYXRhQnVm ZmVyKTsNCj4gKyAgICAgIHJldHVybiBTdGF0dXM7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgQVNT RVJUKEdldFNlc3Npb25EYXRhQnVmZmVyU2l6ZSA9PSBzaXplb2YgKEVGSV9UTFNfU0VTU0lPTl9T VEFURSkpOw0KPiArICAgIEh0dHBJbnN0YW5jZS0+VGxzU2Vzc2lvblN0YXRlID0gKihFRklfVExT X1NFU1NJT05fU1RBVEUgKikNCj4gR2V0U2Vzc2lvbkRhdGFCdWZmZXI7DQo+ICsNCj4gKyAgICBG cmVlUG9vbCAoR2V0U2Vzc2lvbkRhdGFCdWZmZXIpOw0KPiArDQo+ICsgICAgaWYoSHR0cEluc3Rh bmNlLT5UbHNTZXNzaW9uU3RhdGUgPT0gRWZpVGxzU2Vzc2lvbkVycm9yKSB7DQo+ICsgICAgICBE RUJVRyAoKEVGSV9EX0VSUk9SLCAiVExTIFNlc3Npb24gU3RhdGUgRXJyb3IhXG4iKSk7DQo+ICsg ICAgICByZXR1cm4gRUZJX0FCT1JURUQ7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgQnVmZmVySW4g PSBOVUxMOw0KPiArICAgIEJ1ZmZlckluU2l6ZSA9IDA7DQo+ICsgIH0NCj4gKw0KPiArICBGcmFn bWVudC0+QnVsayA9IEJ1ZmZlckluOw0KPiArICBGcmFnbWVudC0+TGVuID0gKFVJTlQzMikgQnVm ZmVySW5TaXplOw0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+IGRpZmYgLS1naXQg YS9OZXR3b3JrUGtnL0h0dHBEeGUvSHR0cHNTdXBwb3J0LmgNCj4gYi9OZXR3b3JrUGtnL0h0dHBE eGUvSHR0cHNTdXBwb3J0LmgNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAw MC4uZDg0NmI3Ng0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL05ldHdvcmtQa2cvSHR0cER4ZS9I dHRwc1N1cHBvcnQuaA0KPiBAQCAtMCwwICsxLDI2MCBAQA0KPiArLyoqIEBmaWxlDQo+ICsgIFRo ZSBoZWFkZXIgZmlsZXMgb2YgbWlzY2VsbGFuZW91cyByb3V0aW5lcyBzcGVjaWZpYyB0byBIdHRw cyBmb3IgSHR0cER4ZQ0KPiBkcml2ZXIuDQo+ICsNCj4gK0NvcHlyaWdodCAoYykgMjAxNiwgSW50 ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArVGhpcyBwcm9ncmFt IGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPiArYXJlIGxpY2Vuc2VkIGFuZCBtYWRl IGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRA0KPiBM aWNlbnNlDQo+ICt3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxs IHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+IGZvdW5kIGF0DQo+ICtodHRwOi8vb3BlbnNv dXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+ICsNCj4gK1RIRSBQUk9HUkFNIElT IERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiDQo+IEJBU0lT LA0KPiArV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwg RUlUSEVSDQo+IEVYUFJFU1MgT1IgSU1QTElFRC4NCj4gKw0KPiArKiovDQo+ICsNCj4gKyNpZm5k ZWYgX19FRklfSFRUUFNfU1VQUE9SVF9IX18NCj4gKyNkZWZpbmUgX19FRklfSFRUUFNfU1VQUE9S VF9IX18NCj4gKw0KPiArI2RlZmluZSBIVFRQU19ERUZBVUxUX1BPUlQgICAgICAgNDQzDQo+ICsN Cj4gKyNkZWZpbmUgSFRUUFNfRkxBRyAgICAgICAgICAgICAgICJodHRwcyINCj4gKw0KPiArLyoq DQo+ICsgIENoZWNrIHdoZXRoZXIgdGhlIFVybCBpcyBmcm9tIEh0dHBzLg0KPiArDQo+ICsgIEBw YXJhbVtpbl0gICAgVXJsICAgICAgICAgICAgIFRoZSBwb2ludGVyIHRvIGEgSFRUUCBvciBIVFRQ UyBVUkwgc3RyaW5nLg0KPiArDQo+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgICAgICAgICAgIFRo ZSBVcmwgaXMgZnJvbSBIVFRQUy4NCj4gKyAgQHJldHZhbCBGQUxTRSAgICAgICAgICAgICAgICAg VGhlIFVybCBpcyBmcm9tIEhUVFAuDQo+ICsNCj4gKyoqLw0KPiArQk9PTEVBTg0KPiArSXNIdHRw c1VybCAoDQo+ICsgIElOIENIQVI4ICAgICpVcmwNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsg IENyZWF0ZXMgYSBUbHMgY2hpbGQgaGFuZGxlLCBvcGVuIEVGSV9UTFNfUFJPVE9DT0wgYW5kDQo+ IEVGSV9UTFNfQ09ORklHVVJBVElPTl9QUk9UT0NPTC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBJ bWFnZUhhbmRsZSAgICAgICAgICAgVGhlIGZpcm13YXJlIGFsbG9jYXRlZCBoYW5kbGUgZm9yIHRo ZSBVRUZJDQo+IGltYWdlLg0KPiArICBAcGFyYW1bb3V0XSBUbHNQcm90byAgICAgICAgICAgICAg UG9pbnRlciB0byB0aGUgRUZJX1RMU19QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKyAgQHBhcmFtW291 dF0gVGxzQ29uZmlndXJhdGlvbiAgICAgIFBvaW50ZXIgdG8gdGhlDQo+IEVGSV9UTFNfQ09ORklH VVJBVElPTl9QUk9UT0NPTCBpbnN0YW5jZS4NCj4gKw0KPiArICBAcmV0dXJuICBUaGUgY2hpbGQg aGFuZGxlIHdpdGggb3BlbmVkIEVGSV9UTFNfUFJPVE9DT0wgYW5kDQo+IEVGSV9UTFNfQ09ORklH VVJBVElPTl9QUk9UT0NPTC4NCj4gKw0KPiArKiovDQo+ICtFRklfSEFORExFDQo+ICtFRklBUEkN Cj4gK1Rsc0NyZWF0ZUNoaWxkICgNCj4gKyAgSU4gIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAg ICAgICBJbWFnZUhhbmRsZSwNCj4gKyAgT1VUIEVGSV9UTFNfUFJPVE9DT0wgICAgICAgICAgICAg ICAqKlRsc1Byb3RvLA0KPiArICBPVVQgRUZJX1RMU19DT05GSUdVUkFUSU9OX1BST1RPQ09MICoq VGxzQ29uZmlndXJhdGlvbg0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgQ3JlYXRlIGV2ZW50 IGZvciB0aGUgVExTIHJlY2VpdmUgYW5kIHRyYW5zbWl0IHRva2VucyB3aGljaCBhcmUgdXNlZCB0 bw0KPiByZWNlaXZlIGFuZA0KPiArICB0cmFuc21pdCBUTFMgcmVsYXRlZCBtZXNzYWdlcy4NCj4g Kw0KPiArICBAcGFyYW1baW4sIG91dF0gIEh0dHBJbnN0YW5jZSAgICAgICBQb2ludGVyIHRvIEhU VFBfUFJPVE9DT0wgc3RydWN0dXJlLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgICAgICBUaGUgZXZlbnRzIGFyZSBjcmVhdGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyAgQHJldHZh bCBvdGhlcnMgICAgICAgICAgICAgICAgIE90aGVyIGVycm9yIGFzIGluZGljYXRlZC4NCj4gKw0K PiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1Rsc0NyZWF0ZVR4UnhFdmVudCAo DQo+ICsgIElOIE9VVCBIVFRQX1BST1RPQ09MICAgICAgKkh0dHBJbnN0YW5jZQ0KPiArICApOw0K PiArDQo+ICsvKioNCj4gKyAgQ2xvc2UgZXZlbnRzIGluIHRoZSBUbHNUeFRva2VuIGFuZCBUbHNS eFRva2VuLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIEh0dHBJbnN0YW5jZSAgIFBvaW50ZXIgdG8g SFRUUF9QUk9UT0NPTCBzdHJ1Y3R1cmUuDQo+ICsNCj4gKyoqLw0KPiArVk9JRA0KPiArRUZJQVBJ DQo+ICtUbHNDbG9zZVR4UnhFdmVudCAoDQo+ICsgIElOICBIVFRQX1BST1RPQ09MICAgICAgICAq SHR0cEluc3RhbmNlDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBSZWFkIHRoZSBUbHNDYUNl cnRpZmljYXRlIHZhcmlhYmxlIGFuZCBjb25maWd1cmUgaXQuDQo+ICsNCj4gKyAgQHBhcmFtW2lu LCBvdXRdICBIdHRwSW5zdGFuY2UgICAgICAgVGhlIEhUVFAgaW5zdGFuY2UgcHJpdmF0ZSBkYXRh Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUbHNDYUNlcnRpZmlj YXRlIGlzIGNvbmZpZ3VyZWQuDQo+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgICBD YW4ndCBhbGxvY2F0ZSBtZW1vcnkgcmVzb3VyY2VzLg0KPiArICBAcmV0dmFsIEVGSV9OT1RfRk9V TkQgICAgICAgICAgRmFpbCB0byBnZXQgIlRsc0NhQ2VydGlmaWNhdGUiIHZhcmlhYmxlLg0KPiAr ICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgICAgICAgT3RoZXIgZXJyb3IgYXMgaW5kaWNhdGVk Lg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1Rsc0NvbmZpZ0NlcnRpZmljYXRlICgN Cj4gKyAgSU4gT1VUIEhUVFBfUFJPVE9DT0wgICAgICAqSHR0cEluc3RhbmNlDQo+ICsgICk7DQo+ ICsNCj4gKy8qKg0KPiArICBDb25maWd1cmUgVExTIHNlc3Npb24gZGF0YS4NCj4gKw0KPiArICBA cGFyYW1baW4sIG91dF0gIEh0dHBJbnN0YW5jZSAgICAgICBUaGUgSFRUUCBpbnN0YW5jZSBwcml2 YXRlIGRhdGEuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRMUyBz ZXNzaW9uIGRhdGEgaXMgY29uZmlndXJlZC4NCj4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAg ICAgICAgIE90aGVyIGVycm9yIGFzIGluZGljYXRlZC4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RB VFVTDQo+ICtFRklBUEkNCj4gK1Rsc0NvbmZpZ3VyZVNlc3Npb24gKA0KPiArICBJTiBPVVQgSFRU UF9QUk9UT0NPTCAgICAgICpIdHRwSW5zdGFuY2UNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsg IFRyYW5zbWl0IHRoZSBQYWNrZXQgYnkgcHJvY2Vzc2luZyB0aGUgYXNzb2NpYXRlZCBIVFRQUyB0 b2tlbi4NCj4gKw0KPiArICBAcGFyYW1baW4sIG91dF0gICBIdHRwSW5zdGFuY2UgICAgUG9pbnRl ciB0byBIVFRQX1BST1RPQ09MIHN0cnVjdHVyZS4NCj4gKyAgQHBhcmFtW2luXSAgICAgICAgUGFj a2V0ICAgICAgICAgIFRoZSBwYWNrZXQgdG8gdHJhbnNtaXQuDQo+ICsNCj4gKyAgQHJldHZhbCBF RklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBwYWNrZXQgaXMgdHJhbnNtaXR0ZWQuDQo+ICsgIEBy ZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBIdHRwSW5zdGFuY2UgaXMgTlVMTCBvciBQYWNr ZXQgaXMgTlVMTC4NCj4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgIENhbid0IGFs bG9jYXRlIG1lbW9yeSByZXNvdXJjZXMuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAg ICAgICBBbiB1bmV4cGVjdGVkIHN5c3RlbSBvciBuZXR3b3JrIGVycm9yDQo+IG9jY3VycmVkLg0K PiArICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgICAgICAgT3RoZXIgZXJyb3JzIGFzIGluZGlj YXRlZC4NCj4gKw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1Rsc0NvbW1v blRyYW5zbWl0ICgNCj4gKyAgSU4gT1VUIEhUVFBfUFJPVE9DT0wgICAgICAqSHR0cEluc3RhbmNl LA0KPiArICBJTiAgICAgTkVUX0JVRiAgICAgICAgICAgICpQYWNrZXQNCj4gKyAgKTsNCj4gKw0K PiArLyoqDQo+ICsgIFJlY2VpdmUgdGhlIFBhY2tldCBieSBwcm9jZXNzaW5nIHRoZSBhc3NvY2lh dGVkIEhUVFBTIHRva2VuLg0KPiArDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSAgIEh0dHBJbnN0YW5j ZSAgICBQb2ludGVyIHRvIEhUVFBfUFJPVE9DT0wgc3RydWN0dXJlLg0KPiArICBAcGFyYW1baW5d ICAgICAgICBQYWNrZXQgICAgICAgICAgVGhlIHBhY2tldCB0byB0cmFuc21pdC4NCj4gKyAgQHBh cmFtW2luXSAgICAgICAgVGltZW91dCAgICAgICAgIFRoZSB0aW1lIHRvIHdhaXQgZm9yIGNvbm5l Y3Rpb24gZG9uZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhl IFBhY2tldCBpcyByZWNlaXZlZC4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIg IEh0dHBJbnN0YW5jZSBpcyBOVUxMIG9yIFBhY2tldCBpcyBOVUxMLg0KPiArICBAcmV0dmFsIEVG SV9PVVRfT0ZfUkVTT1VSQ0VTICAgQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IHJlc291cmNlcy4NCj4g KyAgQHJldHZhbCBFRklfVElNRU9VVCAgICAgICAgICAgIFRoZSBvcGVyYXRpb24gaXMgdGltZSBv dXQuDQo+ICsgIEByZXR2YWwgT3RoZXJzICAgICAgICAgICAgICAgICBPdGhlciBlcnJvciBhcyBp bmRpY2F0ZWQuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtUbHND b21tb25SZWNlaXZlICgNCj4gKyAgSU4gT1VUIEhUVFBfUFJPVE9DT0wgICAgICAqSHR0cEluc3Rh bmNlLA0KPiArICBJTiAgICAgTkVUX0JVRiAgICAgICAgICAgICpQYWNrZXQsDQo+ICsgIElOICAg ICBFRklfRVZFTlQgICAgICAgICAgVGltZW91dA0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAg UmVjZWl2ZSBvbmUgVExTIFBEVS4gQW4gVExTIFBEVSBjb250YWlucyBhbiBUTFMgcmVjb3JkIGhl YWRlciBhbmQgaXQncw0KPiArICBjb3JyZXNwb25kaW5nIHJlY29yZCBkYXRhLiBUaGUgdHdvIHBh cnRzIHdpbGwgYmUgcHV0IGludG8gdHdvIGJsb2NrcyBvZg0KPiBidWZmZXJzIGluIHRoZQ0KPiAr ICBuZXQgYnVmZmVyLg0KPiArDQo+ICsgIEBwYXJhbVtpbiwgb3V0XSAgICAgIEh0dHBJbnN0YW5j ZSAgICBQb2ludGVyIHRvIEhUVFBfUFJPVE9DT0wgc3RydWN0dXJlLg0KPiArICBAcGFyYW1bb3V0 XSAgICAgICAgICBQZHUgICAgICAgICAgICAgVGhlIHJlY2VpdmVkIFRMUyBQRFUuDQo+ICsgIEBw YXJhbVtpbl0gICAgICAgICAgIFRpbWVvdXQgICAgICAgICBUaGUgdGltZSB0byB3YWl0IGZvciBj b25uZWN0aW9uIGRvbmUuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICBB biBUTFMgUERVIGlzIHJlY2VpdmVkLg0KPiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VT IENhbid0IGFsbG9jYXRlIG1lbW9yeSByZXNvdXJjZXMuDQo+ICsgIEByZXR2YWwgRUZJX1BST1RP Q09MX0VSUk9SICAgQW4gdW5leHBlY3RlZCBUTFMgcGFja2V0IHdhcyByZWNlaXZlZC4NCj4gKyAg QHJldHZhbCBPdGhlcnMgICAgICAgICAgICAgICBPdGhlciBlcnJvcnMgYXMgaW5kaWNhdGVkLg0K PiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArVGxzUmVjZWl2ZU9uZVBk dSAoDQo+ICsgIElOIE9VVCBIVFRQX1BST1RPQ09MICAgICAgKkh0dHBJbnN0YW5jZSwNCj4gKyAg ICAgT1VUIE5FVF9CVUYgICAgICAgICAgICAqKlBkdSwNCj4gKyAgSU4gICAgIEVGSV9FVkVOVCAg ICAgICAgICBUaW1lb3V0DQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBDb25uZWN0IG9uZSBU TFMgc2Vzc2lvbiBieSBmaW5pc2hpbmcgdGhlIFRMUyBoYW5kc2hha2UgcHJvY2Vzcy4NCj4gKw0K PiArICBAcGFyYW1baW5dICBIdHRwSW5zdGFuY2UgICAgICAgVGhlIEhUVFAgaW5zdGFuY2UgcHJp dmF0ZSBkYXRhLg0KPiArICBAcGFyYW1baW5dICBUaW1lb3V0ICAgICAgICAgICAgVGhlIHRpbWUg dG8gd2FpdCBmb3IgY29ubmVjdGlvbiBkb25lLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgICAgICAgICBUaGUgVExTIHNlc3Npb24gaXMgZXN0YWJsaXNoZWQuDQo+ICsgIEByZXR2 YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgICBDYW4ndCBhbGxvY2F0ZSBtZW1vcnkgcmVzb3VyY2Vz Lg0KPiArICBAcmV0dmFsIEVGSV9BQk9SVEVEICAgICAgICAgICAgVExTIHNlc3Npb24gc3RhdGUg aXMgaW5jb3JyZWN0Lg0KPiArICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgICAgICAgT3RoZXIg ZXJyb3IgYXMgaW5kaWNhdGVkLg0KPiArDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQ SQ0KPiArVGxzQ29ubmVjdFNlc3Npb24gKA0KPiArICBJTiAgSFRUUF9QUk9UT0NPTCAgICAgICAg ICAgICpIdHRwSW5zdGFuY2UsDQo+ICsgIElOICBFRklfRVZFTlQgICAgICAgICAgICAgICAgVGlt ZW91dA0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgQ2xvc2UgdGhlIFRMUyBzZXNzaW9uIGFu ZCBzZW5kIG91dCB0aGUgY2xvc2Ugbm90aWZpY2F0aW9uIG1lc3NhZ2UuDQo+ICsNCj4gKyAgQHBh cmFtW2luXSAgSHR0cEluc3RhbmNlICAgICAgIFRoZSBIVFRQIGluc3RhbmNlIHByaXZhdGUgZGF0 YS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIFRMUyBzZXNz aW9uIGlzIGNsb3NlZC4NCj4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIEh0dHBJ bnN0YW5jZSBpcyBOVUxMIG9yIFBhY2tldCBpcyBOVUxMLg0KPiArICBAcmV0dmFsIEVGSV9PVVRf T0ZfUkVTT1VSQ0VTICAgQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IHJlc291cmNlcy4NCj4gKyAgQHJl dHZhbCBPdGhlcnMgICAgICAgICAgICAgICAgIE90aGVyIGVycm9yIGFzIGluZGljYXRlZC4NCj4g Kw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1Rsc0Nsb3NlU2Vzc2lvbiAo DQo+ICsgIElOICBIVFRQX1BST1RPQ09MICAgICAgICAgICAgKkh0dHBJbnN0YW5jZQ0KPiArICAp Ow0KPiArDQo+ICsvKioNCj4gKyAgUHJvY2VzcyBvbmUgbWVzc2FnZSBhY2NvcmRpbmcgdG8gdGhl IENyeXB0TW9kZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgICAgICAgICBIdHRwSW5zdGFuY2Ug ICAgUG9pbnRlciB0byBIVFRQX1BST1RPQ09MIHN0cnVjdHVyZS4NCj4gKyAgQHBhcmFtW2luXSAg ICAgICAgICAgTWVzc2FnZSAgICAgICAgIFBvaW50ZXIgdG8gdGhlIG1lc3NhZ2UgYnVmZmVyIG5l ZWRlZCB0bw0KPiBwcm9jZXNzZWQuDQo+ICsgIEBwYXJhbVtpbl0gICAgICAgICAgIE1lc3NhZ2VT aXplICAgICBQb2ludGVyIHRvIHRoZSBtZXNzYWdlIGJ1ZmZlciBzaXplLg0KPiArICBAcGFyYW1b aW5dICAgICAgICAgICBQcm9jZXNzTW9kZSAgICAgUHJvY2VzcyBtb2RlLg0KPiArICBAcGFyYW1b aW4sIG91dF0gICAgICBGcmFnbWVudCAgICAgICAgT25seSBvbmUgRnJhZ21lbnQgcmV0dXJuZWQg YWZ0ZXIgdGhlDQo+IE1lc3NhZ2UgaXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHByb2Nlc3NlZCBzdWNjZXNzZnVsbHkuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICAgICBNZXNzYWdlIGlzIHByb2Nlc3NlZCBzdWNjZXNzZnVsbHkuDQo+ICsg IEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgICBDYW4ndCBhbGxvY2F0ZSBtZW1vcnkgcmVz b3VyY2VzLg0KPiArICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgICAgIE90aGVyIGVycm9ycyBh cyBpbmRpY2F0ZWQuDQo+ICsNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtU bHNQcm9jZXNzTWVzc2FnZSAoDQo+ICsgIElOICAgICBIVFRQX1BST1RPQ09MICAgICAgICAgICAg Kkh0dHBJbnN0YW5jZSwNCj4gKyAgSU4gICAgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAqTWVz c2FnZSwNCj4gKyAgSU4gICAgIFVJTlROICAgICAgICAgICAgICAgICAgICBNZXNzYWdlU2l6ZSwN Cj4gKyAgSU4gICAgIEVGSV9UTFNfQ1JZUFRfTU9ERSAgICAgICBQcm9jZXNzTW9kZSwNCj4gKyAg SU4gT1VUIE5FVF9GUkFHTUVOVCAgICAgICAgICAgICAqRnJhZ21lbnQNCj4gKyAgKTsNCj4gKw0K PiArLyoqDQo+ICsgIFJlY2VpdmUgb25lIGZyYWdtZW50IGRlY3J5cHRlZCBmcm9tIG9uZSBUTFMg cmVjb3JkLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICAgICAgICAgIEh0dHBJbnN0YW5jZSAgICBQ b2ludGVyIHRvIEhUVFBfUFJPVE9DT0wgc3RydWN0dXJlLg0KPiArICBAcGFyYW1baW4sIG91dF0g ICAgICBGcmFnbWVudCAgICAgICAgVGhlIHJlY2VpdmVkIEZyYWdtZW50Lg0KPiArICBAcGFyYW1b aW5dICAgICAgICAgICBUaW1lb3V0ICAgICAgICAgVGhlIHRpbWUgdG8gd2FpdCBmb3IgY29ubmVj dGlvbiBkb25lLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgT25lIGZy YWdtZW50IGlzIHJlY2VpdmVkLg0KPiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTIENh bid0IGFsbG9jYXRlIG1lbW9yeSByZXNvdXJjZXMuDQo+ICsgIEByZXR2YWwgRUZJX0FCT1JURUQg ICAgICAgICAgU29tZXRoaW5nIHdyb25nIGRlY3J5cHRpb24gdGhlIG1lc3NhZ2UuDQo+ICsgIEBy ZXR2YWwgT3RoZXJzICAgICAgICAgICAgICAgT3RoZXIgZXJyb3JzIGFzIGluZGljYXRlZC4NCj4g Kw0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0h0dHBzUmVjZWl2ZSAoDQo+ ICsgIElOICAgICBIVFRQX1BST1RPQ09MICAgICAgICAgKkh0dHBJbnN0YW5jZSwNCj4gKyAgSU4g T1VUIE5FVF9GUkFHTUVOVCAgICAgICAgICAqRnJhZ21lbnQsDQo+ICsgIElOICAgICBFRklfRVZF TlQgICAgICAgICAgICAgVGltZW91dA0KPiArICApOw0KPiArDQo+ICsjZW5kaWYNCj4gLS0NCj4g MS45LjUubXN5c2dpdC4xDQoNCg==