From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) (using TLSv1 with cipher CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 65EC01A1E8E for ; Tue, 11 Oct 2016 01:46:57 -0700 (PDT) Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga102.jf.intel.com with ESMTP; 11 Oct 2016 01:46:56 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.31,476,1473145200"; d="scan'208,217";a="1063193337" Received: from fmsmsx108.amr.corp.intel.com ([10.18.124.206]) by orsmga002.jf.intel.com with ESMTP; 11 Oct 2016 01:46:54 -0700 Received: from fmsmsx118.amr.corp.intel.com (10.18.116.18) by FMSMSX108.amr.corp.intel.com (10.18.124.206) with Microsoft SMTP Server (TLS) id 14.3.248.2; Tue, 11 Oct 2016 01:46:54 -0700 Received: from shsmsx103.ccr.corp.intel.com (10.239.4.69) by fmsmsx118.amr.corp.intel.com (10.18.116.18) with Microsoft SMTP Server (TLS) id 14.3.248.2; Tue, 11 Oct 2016 01:46:50 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.15]) by SHSMSX103.ccr.corp.intel.com ([169.254.4.234]) with mapi id 14.03.0248.002; Tue, 11 Oct 2016 16:46:46 +0800 From: "Yao, Jiewen" To: "Ni, Ruiyu" , "Carsey, Jaben" , "Rothman, Michael A" , "Kinney, Michael D" , "'edk2-devel@lists.01.org'" CC: "Tian, Feng" , "Zhang, Chao B" , "Gao, Liming" , "Zeng, Star" Thread-Topic: [PATCH 17/45] MdeModulePkg/CapsuleApp: Add CapsuleApp application. Thread-Index: AQHSGe2sxgUgiXZgOkCVxez+vPYKrKCPv9Ww//++tQCAANHgAIAAl4yAgAC9VgCABOquAIAAIjoAgAvBCYCAAAWTAIAAiqJQ Date: Tue, 11 Oct 2016 08:46:45 +0000 Message-ID: <74D8A39837DF1E4DA445A8C0B3885C50386A129C@shsmsx102.ccr.corp.intel.com> References: <1474440326-9292-1-git-send-email-jiewen.yao@intel.com> <1474440326-9292-18-git-send-email-jiewen.yao@intel.com> <74D8A39837DF1E4DA445A8C0B3885C503869ADBD@shsmsx102.ccr.corp.intel.com> <734D49CCEBEEF84792F5B80ED585239D58E0E64C@SHSMSX104.ccr.corp.intel.com> <734D49CCEBEEF84792F5B80ED585239D58E0F608@SHSMSX104.ccr.corp.intel.com> <734D49CCEBEEF84792F5B80ED585239D58E181D1@SHSMSX104.ccr.corp.intel.com> <734D49CCEBEEF84792F5B80ED585239D58E1822D@SHSMSX104.ccr.corp.intel.com> In-Reply-To: <734D49CCEBEEF84792F5B80ED585239D58E1822D@SHSMSX104.ccr.corp.intel.com> Accept-Language: zh-CN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 X-Mailman-Approved-At: Tue, 11 Oct 2016 08:21:32 -0700 X-Content-Filtered-By: Mailman/MimeDel 2.1.21 Subject: Re: [PATCH 17/45] MdeModulePkg/CapsuleApp: Add CapsuleApp application. X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Oct 2016 08:46:57 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 WWVzLCBJIHRoaW5rIHRoYXQgaXMgYSB2ZXJ5IGdvb2QgaWRlYS4NCg0KU2hlbGwgc3BlYyBkZWZp bmVzIEVGSV9TSEVMTF9QUk9UT0NPTCwgRUZJX1NIRUxMX0RZTkFNSUNfQ09NTUFORF9QUk9UT0NP TCwgRUZJX1NIRUxMX1BBUkFNRVRFUlNfUFJPVE9DT0wuDQpUaGVzZSBzaG91bGQgYmUgdHJlYXRl ZCBhcyBpbmR1c3RyeSBzdGFuZCBhbmQgd2UgY2FuIG1vdmUgdGhlc2UgMyB0byBNZGVQa2cuDQoN ClNIRUxMX0VOVklST05NRU5UXzJfUFJPVE9DT0wgYW5kIFNIRUxMX0lOVEVSRkFDRV9QUk9UT0NP TCBzaG91bGQgYmUgc3RpbGwgaW4gU2hlbGxQa2csIHNpbmNlIGl0IGlzIG5vdCBzdGFuZGFyZC4N Cg0KVGhhbmsgeW91DQpZYW8gSmlld2VuDQoNCkZyb206IE5pLCBSdWl5dQ0KU2VudDogVHVlc2Rh eSwgT2N0b2JlciAxMSwgMjAxNiA0OjI4IFBNDQpUbzogQ2Fyc2V5LCBKYWJlbiA8amFiZW4uY2Fy c2V5QGludGVsLmNvbT47IFJvdGhtYW4sIE1pY2hhZWwgQSA8bWljaGFlbC5hLnJvdGhtYW5AaW50 ZWwuY29tPjsgWWFvLCBKaWV3ZW4gPGppZXdlbi55YW9AaW50ZWwuY29tPjsgS2lubmV5LCBNaWNo YWVsIEQgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPjsgJ2VkazItZGV2ZWxAbGlzdHMuMDEu b3JnJyA8ZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc+DQpDYzogVGlhbiwgRmVuZyA8ZmVuZy50aWFu QGludGVsLmNvbT47IFpoYW5nLCBDaGFvIEIgPGNoYW8uYi56aGFuZ0BpbnRlbC5jb20+OyBHYW8s IExpbWluZyA8bGltaW5nLmdhb0BpbnRlbC5jb20+OyBaZW5nLCBTdGFyIDxzdGFyLnplbmdAaW50 ZWwuY29tPg0KU3ViamVjdDogUkU6IFtQQVRDSCAxNy80NV0gTWRlTW9kdWxlUGtnL0NhcHN1bGVB cHA6IEFkZCBDYXBzdWxlQXBwIGFwcGxpY2F0aW9uLg0KDQpKYWJlbiwNClRoZSByZWFzb24gSSBw cm9wb3NlIHRvIG1vdmUgdGhlIFNoZWxsIHByb3RvY29sIGRlZmluaXRpb25zIHRvIE1kZVBrZyBp cyB0aGF0IGFsbCBhcHBsaWNhdGlvbnMgdGhhdCB3YW50cyB0byB1c2UgdGhlIEFSR1YgY2FuIHVz ZSB0aGUgU2hlbGxQYXJhbWV0ZXIgcHJvdG9jb2wsIHdpdGhvdXQgZGVwZW5kaW5nIG9uIFNoZWxs UGtnLg0KDQpUaGFua3MvUmF5DQoNCkZyb206IE5pLCBSdWl5dQ0KU2VudDogVHVlc2RheSwgT2N0 b2JlciAxMSwgMjAxNiA0OjA4IFBNDQpUbzogQ2Fyc2V5LCBKYWJlbiA8amFiZW4uY2Fyc2V5QGlu dGVsLmNvbTxtYWlsdG86amFiZW4uY2Fyc2V5QGludGVsLmNvbT4+OyBSb3RobWFuLCBNaWNoYWVs IEEgPG1pY2hhZWwuYS5yb3RobWFuQGludGVsLmNvbTxtYWlsdG86bWljaGFlbC5hLnJvdGhtYW5A aW50ZWwuY29tPj47IFlhbywgSmlld2VuIDxqaWV3ZW4ueWFvQGludGVsLmNvbTxtYWlsdG86amll d2VuLnlhb0BpbnRlbC5jb20+PjsgS2lubmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwuZC5raW5uZXlA aW50ZWwuY29tPG1haWx0bzptaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4+OyBlZGsyLWRldmVs QGxpc3RzLjAxLm9yZzxtYWlsdG86ZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc+DQpDYzogVGlhbiwg RmVuZyA8ZmVuZy50aWFuQGludGVsLmNvbTxtYWlsdG86ZmVuZy50aWFuQGludGVsLmNvbT4+OyBa aGFuZywgQ2hhbyBCIDxjaGFvLmIuemhhbmdAaW50ZWwuY29tPG1haWx0bzpjaGFvLmIuemhhbmdA aW50ZWwuY29tPj47IEdhbywgTGltaW5nIDxsaW1pbmcuZ2FvQGludGVsLmNvbTxtYWlsdG86bGlt aW5nLmdhb0BpbnRlbC5jb20+PjsgWmVuZywgU3RhciA8c3Rhci56ZW5nQGludGVsLmNvbTxtYWls dG86c3Rhci56ZW5nQGludGVsLmNvbT4+DQpTdWJqZWN0OiBSRTogW1BBVENIIDE3LzQ1XSBNZGVN b2R1bGVQa2cvQ2Fwc3VsZUFwcDogQWRkIENhcHN1bGVBcHAgYXBwbGljYXRpb24uDQoNCkphYmVu LA0KSG93IGFib3V0IG1vdmluZyB0aGUgY29udGVudHMgaW4gU2hlbGxQa2dcSW5jbHVkZVxQcm90 b2NvbFwgdG8gTWRlUGtnXEluY2x1ZGVcUHJvdG9jb2xcPw0KQWxsIGluZHVzdHJ5IHN0YW5kYXJk IHByb3RvY29scyBhcmUgZGVmaW5lZCBpbiBNZGVQa2csIGV4Y2VwdCB0aGUgU2hlbGwgcmVsYXRl ZCBwcm90b2NvbHMuDQoNClRoYW5rcy9SYXkNCg0KRnJvbTogQ2Fyc2V5LCBKYWJlbg0KU2VudDog VHVlc2RheSwgT2N0b2JlciA0LCAyMDE2IDQ6MzggQU0NClRvOiBSb3RobWFuLCBNaWNoYWVsIEEg PG1pY2hhZWwuYS5yb3RobWFuQGludGVsLmNvbTxtYWlsdG86bWljaGFlbC5hLnJvdGhtYW5AaW50 ZWwuY29tPj47IE5pLCBSdWl5dSA8cnVpeXUubmlAaW50ZWwuY29tPG1haWx0bzpydWl5dS5uaUBp bnRlbC5jb20+PjsgWWFvLCBKaWV3ZW4gPGppZXdlbi55YW9AaW50ZWwuY29tPG1haWx0bzpqaWV3 ZW4ueWFvQGludGVsLmNvbT4+OyBLaW5uZXksIE1pY2hhZWwgRCA8bWljaGFlbC5kLmtpbm5leUBp bnRlbC5jb208bWFpbHRvOm1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPj47IGVkazItZGV2ZWxA bGlzdHMuMDEub3JnPG1haWx0bzplZGsyLWRldmVsQGxpc3RzLjAxLm9yZz4NCkNjOiBUaWFuLCBG ZW5nIDxmZW5nLnRpYW5AaW50ZWwuY29tPG1haWx0bzpmZW5nLnRpYW5AaW50ZWwuY29tPj47IFpo YW5nLCBDaGFvIEIgPGNoYW8uYi56aGFuZ0BpbnRlbC5jb208bWFpbHRvOmNoYW8uYi56aGFuZ0Bp bnRlbC5jb20+PjsgR2FvLCBMaW1pbmcgPGxpbWluZy5nYW9AaW50ZWwuY29tPG1haWx0bzpsaW1p bmcuZ2FvQGludGVsLmNvbT4+OyBaZW5nLCBTdGFyIDxzdGFyLnplbmdAaW50ZWwuY29tPG1haWx0 bzpzdGFyLnplbmdAaW50ZWwuY29tPj47IENhcnNleSwgSmFiZW4gPGphYmVuLmNhcnNleUBpbnRl bC5jb208bWFpbHRvOmphYmVuLmNhcnNleUBpbnRlbC5jb20+Pg0KU3ViamVjdDogUkU6IFtQQVRD SCAxNy80NV0gTWRlTW9kdWxlUGtnL0NhcHN1bGVBcHA6IEFkZCBDYXBzdWxlQXBwIGFwcGxpY2F0 aW9uLg0KDQpJIGRvbuKAmXQgdGhpbmsgdGhhdCBpcyB3aGF0IEkgbWVhbnQuICBJdOKAmXMgYSBz dHJpbmcgYW5kIGEgbGVuZ3RoLCBub3QgYSBzdHJ1Y3R1cmUuDQoNCkkgbWVhbiBjbGFyaWZ5IHRo ZSBmb2xsb3dpbmc6DQoNCjEpICAgICAgSXMgdGhlIG5hbWUgb2YgdGhlIGJpbmFyeSBpdHNlbGYg aW4gdGhlIExvYWRPcHRpb25zIHN0cmluZyBhcyB0aGUgZmlyc3Qgb3B0aW9uIG9yIG5vdCB0aGVy ZSBhdCBhbGw/DQoNCjIpICAgICAgVGhlbiBjbGFyaWZ5IHRoYXQgYWxsIFBhcmFtZXRlcnMgYXJl IHNwYWNlIGRlbGltaXRlZC4NCg0KRnJvbTogUm90aG1hbiwgTWljaGFlbCBBDQpTZW50OiBNb25k YXksIE9jdG9iZXIgMDMsIDIwMTYgMTE6MzYgQU0NClRvOiBDYXJzZXksIEphYmVuIDxqYWJlbi5j YXJzZXlAaW50ZWwuY29tPG1haWx0bzpqYWJlbi5jYXJzZXlAaW50ZWwuY29tPj47IE5pLCBSdWl5 dSA8cnVpeXUubmlAaW50ZWwuY29tPG1haWx0bzpydWl5dS5uaUBpbnRlbC5jb20+PjsgWWFvLCBK aWV3ZW4gPGppZXdlbi55YW9AaW50ZWwuY29tPG1haWx0bzpqaWV3ZW4ueWFvQGludGVsLmNvbT4+ OyBLaW5uZXksIE1pY2hhZWwgRCA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb208bWFpbHRvOm1p Y2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPj47IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnPG1haWx0 bzplZGsyLWRldmVsQGxpc3RzLjAxLm9yZz4NCkNjOiBUaWFuLCBGZW5nIDxmZW5nLnRpYW5AaW50 ZWwuY29tPG1haWx0bzpmZW5nLnRpYW5AaW50ZWwuY29tPj47IFpoYW5nLCBDaGFvIEIgPGNoYW8u Yi56aGFuZ0BpbnRlbC5jb208bWFpbHRvOmNoYW8uYi56aGFuZ0BpbnRlbC5jb20+PjsgR2FvLCBM aW1pbmcgPGxpbWluZy5nYW9AaW50ZWwuY29tPG1haWx0bzpsaW1pbmcuZ2FvQGludGVsLmNvbT4+ OyBaZW5nLCBTdGFyIDxzdGFyLnplbmdAaW50ZWwuY29tPG1haWx0bzpzdGFyLnplbmdAaW50ZWwu Y29tPj47IFJvdGhtYW4sIE1pY2hhZWwgQSA8bWljaGFlbC5hLnJvdGhtYW5AaW50ZWwuY29tPG1h aWx0bzptaWNoYWVsLmEucm90aG1hbkBpbnRlbC5jb20+Pg0KU3ViamVjdDogUkU6IFtQQVRDSCAx Ny80NV0gTWRlTW9kdWxlUGtnL0NhcHN1bGVBcHA6IEFkZCBDYXBzdWxlQXBwIGFwcGxpY2F0aW9u Lg0KSW1wb3J0YW5jZTogSGlnaA0KDQpZb3UgbWVhbiB1cGRhdGUgdGhlIExvYWRPcHRpb25zIHJl ZmVyZW5jZSB0byByZWZlciB0byB0aGUgRUZJX0xPQURfT1BUSU9OIHN0cnVjdHVyZT8gQmVjYXVz ZSB0aGF04oCZcyBpbiBlc3NlbmNlIHdoYXQgaXQgbWVhbnMuDQoNClRoYW5rcywNCk1pa2UgUm90 aG1hbg0KKOi/iOWFiyDnvZfmlq/mm7wgLyDgpK7gpL7gpIfgpJXgpLIg4KSw4KWL4KSl4KWN4KSu 4KWH4KSo4KWNIC8g0JzQuNGF0LDQuNC7INCg0L7RgtC80LDQvSAvINee16nXlCDXqNeV15jXntef KQ0K16jXldei15Qg16LXmden16jXmSDXqdecINeX16rXldec15nXnQ0KDQpGcm9tOiBDYXJzZXks IEphYmVuDQpTZW50OiBGcmlkYXksIFNlcHRlbWJlciAzMCwgMjAxNiA4OjMxIEFNDQpUbzogTmks IFJ1aXl1IDxydWl5dS5uaUBpbnRlbC5jb208bWFpbHRvOnJ1aXl1Lm5pQGludGVsLmNvbT4+OyBZ YW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRlbC5jb208bWFpbHRvOmppZXdlbi55YW9AaW50ZWwu Y29tPj47IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbTxtYWls dG86bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+PjsgZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc8 bWFpbHRvOmVkazItZGV2ZWxAbGlzdHMuMDEub3JnPjsgUm90aG1hbiwgTWljaGFlbCBBIDxtaWNo YWVsLmEucm90aG1hbkBpbnRlbC5jb208bWFpbHRvOm1pY2hhZWwuYS5yb3RobWFuQGludGVsLmNv bT4+DQpDYzogVGlhbiwgRmVuZyA8ZmVuZy50aWFuQGludGVsLmNvbTxtYWlsdG86ZmVuZy50aWFu QGludGVsLmNvbT4+OyBaaGFuZywgQ2hhbyBCIDxjaGFvLmIuemhhbmdAaW50ZWwuY29tPG1haWx0 bzpjaGFvLmIuemhhbmdAaW50ZWwuY29tPj47IEdhbywgTGltaW5nIDxsaW1pbmcuZ2FvQGludGVs LmNvbTxtYWlsdG86bGltaW5nLmdhb0BpbnRlbC5jb20+PjsgWmVuZywgU3RhciA8c3Rhci56ZW5n QGludGVsLmNvbTxtYWlsdG86c3Rhci56ZW5nQGludGVsLmNvbT4+OyBDYXJzZXksIEphYmVuIDxq YWJlbi5jYXJzZXlAaW50ZWwuY29tPG1haWx0bzpqYWJlbi5jYXJzZXlAaW50ZWwuY29tPj4NClN1 YmplY3Q6IFJFOiBbUEFUQ0ggMTcvNDVdIE1kZU1vZHVsZVBrZy9DYXBzdWxlQXBwOiBBZGQgQ2Fw c3VsZUFwcCBhcHBsaWNhdGlvbi4NCg0KTWlrZSBSb3RobWFuLA0KDQpDYW4gd2UgZ2V0IExvYWRP cHRpb25zIGFuZCBMb2FkT3B0aW9uc1NpemUgY2xhcmlmaWVkIGluIHRoZSBVRUZJIFNwZWM/ICBU aGlzIHNlZW1zIGxpa2UgYSBzaW1wbGUgY2xhcmlmaWNhdGlvbiBhbmQgSSB3b3VsZCBhcmd1ZSBp dHMgbmVlZGVkLiAgVGhlIFVFRkkgU2hlbGwgaXMgbm90IHRoZSBvbmx5IHByb2R1Y2VyIG9mIHRo aXMgcHJvdG9jb2wuICBCRFMgbGF1bmNoZXMgdGhpbmdzIChsaWtlIHRoZSBVRUZJIFNoZWxsIGl0 c2VsZikgYW5kIHRoZSBzaGVsbCBhbHJlYWR5IGNvbnN1bWVzIGl0IGZvciBpdHNlbGYgKGFuZCBp dCB3b3JrcykuICBJIHRoaW5rIGl0IGp1c3QgbmVlZHMgY2xhcmlmaWNhdGlvbiBzbyBwZW9wbGUg Y2FuIGRlcGVuZCBvbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBub3QgY2hhbmdpbmcuDQoN Ci1KYWJlbg0KDQpGcm9tOiBOaSwgUnVpeXUNClNlbnQ6IFRodXJzZGF5LCBTZXB0ZW1iZXIgMjks IDIwMTYgOToxMyBQTQ0KVG86IENhcnNleSwgSmFiZW4gPGphYmVuLmNhcnNleUBpbnRlbC5jb208 bWFpbHRvOmphYmVuLmNhcnNleUBpbnRlbC5jb20+PjsgWWFvLCBKaWV3ZW4gPGppZXdlbi55YW9A aW50ZWwuY29tPG1haWx0bzpqaWV3ZW4ueWFvQGludGVsLmNvbT4+OyBLaW5uZXksIE1pY2hhZWwg RCA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb208bWFpbHRvOm1pY2hhZWwuZC5raW5uZXlAaW50 ZWwuY29tPj47IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnPG1haWx0bzplZGsyLWRldmVsQGxpc3Rz LjAxLm9yZz4NCkNjOiBUaWFuLCBGZW5nIDxmZW5nLnRpYW5AaW50ZWwuY29tPG1haWx0bzpmZW5n LnRpYW5AaW50ZWwuY29tPj47IFpoYW5nLCBDaGFvIEIgPGNoYW8uYi56aGFuZ0BpbnRlbC5jb208 bWFpbHRvOmNoYW8uYi56aGFuZ0BpbnRlbC5jb20+PjsgR2FvLCBMaW1pbmcgPGxpbWluZy5nYW9A aW50ZWwuY29tPG1haWx0bzpsaW1pbmcuZ2FvQGludGVsLmNvbT4+OyBaZW5nLCBTdGFyIDxzdGFy LnplbmdAaW50ZWwuY29tPG1haWx0bzpzdGFyLnplbmdAaW50ZWwuY29tPj4NClN1YmplY3Q6IFJF OiBbUEFUQ0ggMTcvNDVdIE1kZU1vZHVsZVBrZy9DYXBzdWxlQXBwOiBBZGQgQ2Fwc3VsZUFwcCBh cHBsaWNhdGlvbi4NCkltcG9ydGFuY2U6IEhpZ2gNCg0KU3VwcG9zaW5nIHVzZXIgaW5wdXRzIOKA nENhcHN1bGVBcHAuZWZpIFBhcmFtZXRlcjEgUGFyYW1ldGVyMuKAnS4NClRoZXJlIGlzIG5vIHNw ZWMgdG8gZGVmaW5lIHdoYXQgdGhlIExvYWRPcHRpb24gc2hvdWxkIGVxdWFsIHRvLg0KSWYgdGhl cmUgaXMgYW5vdGhlciBVRUZJIFNoZWxsIGltcGxlbWVudGF0aW9uLCBpdCBjb3VsZCBpbnRlcnBy ZXQgdGhlIGNvbW1hbmQgbGluZSB0aGVuIHNldHMgb25seSDigJxQYXJhbWV0ZXIxIFBhcmFtZXRl cjLigJ0gaW50byBMb2FkT3B0aW9uLCBvciBzZXRzIOKAnENhcHN1bGVBcHAuZWZpXHRQYXJhbWV0 ZXIxXHRQYXJhbWV0ZXIy4oCdIHRvIExvYWRPcHRpb24sIG9yIHNldHMg4oCcW1NoZWxsXVx0Q2Fw c3VsZUFwcC5lZmlcdFBhcmFtZXRlcjFcdFBhcmFtZXRlcjLigJ0gdG8gTG9hZE9wdGlvbi4NCkJl Y2F1c2UgaXTigJxwcm9kdWNlc+KAnSBzdWNoIExvYWRPcHRpb24sIGl0IGtub3dzIGhvdyB0byDi gJxjb25zdW1l4oCdL3BhcnNlIGl0IHRvIGdldCB0aGUgQVJHVnMuDQoNClNvIEkgc3VnZ2VzdCB3 ZSBwdXQgdGhlIENhcHN1bGVBcHAgaW4gU2hlbGxQa2cgYW5kIGxldCBpdCB1c2UgdGhlIFNoZWxs UGFyYW1ldGVyIHByb3RvY29sLg0KDQpSZWdhcmRzLA0KUmF5DQoNCkZyb206IENhcnNleSwgSmFi ZW4NClNlbnQ6IEZyaWRheSwgU2VwdGVtYmVyIDMwLCAyMDE2IDM6MTEgQU0NClRvOiBOaSwgUnVp eXUgPHJ1aXl1Lm5pQGludGVsLmNvbTxtYWlsdG86cnVpeXUubmlAaW50ZWwuY29tPj47IFlhbywg Smlld2VuIDxqaWV3ZW4ueWFvQGludGVsLmNvbTxtYWlsdG86amlld2VuLnlhb0BpbnRlbC5jb20+ PjsgS2lubmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPG1haWx0bzpt aWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4+OyBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZzxtYWls dG86ZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc+DQpDYzogVGlhbiwgRmVuZyA8ZmVuZy50aWFuQGlu dGVsLmNvbTxtYWlsdG86ZmVuZy50aWFuQGludGVsLmNvbT4+OyBaaGFuZywgQ2hhbyBCIDxjaGFv LmIuemhhbmdAaW50ZWwuY29tPG1haWx0bzpjaGFvLmIuemhhbmdAaW50ZWwuY29tPj47IEdhbywg TGltaW5nIDxsaW1pbmcuZ2FvQGludGVsLmNvbTxtYWlsdG86bGltaW5nLmdhb0BpbnRlbC5jb20+ PjsgWmVuZywgU3RhciA8c3Rhci56ZW5nQGludGVsLmNvbTxtYWlsdG86c3Rhci56ZW5nQGludGVs LmNvbT4+OyBDYXJzZXksIEphYmVuIDxqYWJlbi5jYXJzZXlAaW50ZWwuY29tPG1haWx0bzpqYWJl bi5jYXJzZXlAaW50ZWwuY29tPj4NClN1YmplY3Q6IFJFOiBbUEFUQ0ggMTcvNDVdIE1kZU1vZHVs ZVBrZy9DYXBzdWxlQXBwOiBBZGQgQ2Fwc3VsZUFwcCBhcHBsaWNhdGlvbi4NCg0KSSBhbSBjb25m dXNlZC4NCg0KV2h5IGlzIExvYWRPcHRpb24gYW5kIExvYWRPcHRpb25TaXplIG5vdCB3b3JraW5n PyAgVGhpcyBpcyBzcGVjaWZpZWQgYXMgcGFydCBvZiBVRUZJIFNwZWMgKE5vdGU6IE5vdCBVRUZJ IFNoZWxsIFNwZWMpIGFzIGEgc3RhbmRhcmQgd2F5IHRvIHBhc3MgcGFyYW1ldGVycyB0byBVRUZJ IGFwcGxpYXRpb25zLiAgSSB0aGluayB0aGlzIHNob3VsZCB3b3JrIChhbHRob3VnaCBpdCBpcyBt b3JlIHdvcmsgdGhhbiBqdXN0IGV4YW1pbmluZyBhcmdjL2FyZ3YpLg0KDQotSmFiZW4NCg0KRnJv bTogTmksIFJ1aXl1DQpTZW50OiBXZWRuZXNkYXksIFNlcHRlbWJlciAyOCwgMjAxNiAxMTo0MCBQ TQ0KVG86IFlhbywgSmlld2VuIDxqaWV3ZW4ueWFvQGludGVsLmNvbTxtYWlsdG86amlld2VuLnlh b0BpbnRlbC5jb20+PjsgS2lubmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwu Y29tPG1haWx0bzptaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4+OyBlZGsyLWRldmVsQGxpc3Rz LjAxLm9yZzxtYWlsdG86ZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc+DQpDYzogVGlhbiwgRmVuZyA8 ZmVuZy50aWFuQGludGVsLmNvbTxtYWlsdG86ZmVuZy50aWFuQGludGVsLmNvbT4+OyBaaGFuZywg Q2hhbyBCIDxjaGFvLmIuemhhbmdAaW50ZWwuY29tPG1haWx0bzpjaGFvLmIuemhhbmdAaW50ZWwu Y29tPj47IEdhbywgTGltaW5nIDxsaW1pbmcuZ2FvQGludGVsLmNvbTxtYWlsdG86bGltaW5nLmdh b0BpbnRlbC5jb20+PjsgWmVuZywgU3RhciA8c3Rhci56ZW5nQGludGVsLmNvbTxtYWlsdG86c3Rh ci56ZW5nQGludGVsLmNvbT4+OyBDYXJzZXksIEphYmVuIDxqYWJlbi5jYXJzZXlAaW50ZWwuY29t PG1haWx0bzpqYWJlbi5jYXJzZXlAaW50ZWwuY29tPj4NClN1YmplY3Q6IFJFOiBbUEFUQ0ggMTcv NDVdIE1kZU1vZHVsZVBrZy9DYXBzdWxlQXBwOiBBZGQgQ2Fwc3VsZUFwcCBhcHBsaWNhdGlvbi4N CkltcG9ydGFuY2U6IEhpZ2gNCg0KSmlld2VuLA0KVGhlIHdheSBDYXBzdWxlQXBwIGV4dHJhY3Rz IHRoZSBBUkdWIGFzc3VtZXMgVUVGSSBTaGVsbCBlbmNvZGVzIHRoZSBwYXJhbWV0ZXJzIHVzaW5n IGEgY2VydGFpbiB3YXkuIEJ1dCB0aGUgcGFyYW1ldGVyIGVuY29kaW5nIHdheSBpcyBub3QgZGVz Y3JpYmVkIGluIHRoZSBTaGVsbCBzcGVjLg0KTWF5YmUgd2UgY2FuIHB1dCB0aGUgQ2Fwc3VsZUFw cCBpbiBTaGVsbFBrZywgdGhlbiBsZXQgaXQgZGlyZWN0bHkgdXNlIFNoZWxsUGFyYW1ldGVyIHBy b3RvY29sIHRvIGdldCB0aGUgQVJHVi4NCg0KQ29weWluZyBKYWJlbi4NCg0KUmVnYXJkcywNClJh eQ0KDQpGcm9tOiBlZGsyLWRldmVsIFttYWlsdG86ZWRrMi1kZXZlbC1ib3VuY2VzQGxpc3RzLjAx Lm9yZ10gT24gQmVoYWxmIE9mIFlhbywgSmlld2VuDQpTZW50OiBUaHVyc2RheSwgU2VwdGVtYmVy IDI5LCAyMDE2IDEwOjM3IEFNDQpUbzogS2lubmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwuZC5raW5u ZXlAaW50ZWwuY29tPG1haWx0bzptaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4+OyBlZGsyLWRl dmVsQGxpc3RzLjAxLm9yZzxtYWlsdG86ZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc+DQpDYzogVGlh biwgRmVuZyA8ZmVuZy50aWFuQGludGVsLmNvbTxtYWlsdG86ZmVuZy50aWFuQGludGVsLmNvbT4+ OyBaaGFuZywgQ2hhbyBCIDxjaGFvLmIuemhhbmdAaW50ZWwuY29tPG1haWx0bzpjaGFvLmIuemhh bmdAaW50ZWwuY29tPj47IEdhbywgTGltaW5nIDxsaW1pbmcuZ2FvQGludGVsLmNvbTxtYWlsdG86 bGltaW5nLmdhb0BpbnRlbC5jb20+PjsgWmVuZywgU3RhciA8c3Rhci56ZW5nQGludGVsLmNvbTxt YWlsdG86c3Rhci56ZW5nQGludGVsLmNvbT4+DQpTdWJqZWN0OiBSZTogW2VkazJdIFtQQVRDSCAx Ny80NV0gTWRlTW9kdWxlUGtnL0NhcHN1bGVBcHA6IEFkZCBDYXBzdWxlQXBwIGFwcGxpY2F0aW9u Lg0KDQpSaWdodC4gQ2Fwc3VsZU9uRGlzayBpcyBub3Qgc3VwcG9ydGVkIGluIEJJT1MgeWV0Lg0K SSB3aWxsIHJlbW92ZSBpdCBpbiBDYXBzdWxlQXBwLg0KDQpDYXBzdWxlQXBwIGp1c3Qgd29ya3Mg YXMgYW4gYWdlbnQgdG8gcGFzcyBjYXBzdWxlIHRvIENhcHN1bGVEeGVSdW50aW1lIGRyaXZlci4N ClNvIGl0IGlzIGNoZWNrZWQgYnkgQ2Fwc3VsZUR4ZVJ1bnRpbWUsIG5vdCBDYXBzdWxlQXBwLg0K DQpUaGFuayB5b3UNCllhbyBKaWV3ZW4NCg0KRnJvbTogS2lubmV5LCBNaWNoYWVsIEQNClNlbnQ6 IFRodXJzZGF5LCBTZXB0ZW1iZXIgMjksIDIwMTYgOTowNiBBTQ0KVG86IFlhbywgSmlld2VuIDxq aWV3ZW4ueWFvQGludGVsLmNvbTxtYWlsdG86amlld2VuLnlhb0BpbnRlbC5jb20+PjsgZWRrMi1k ZXZlbEBsaXN0cy4wMS5vcmc8bWFpbHRvOmVkazItZGV2ZWxAbGlzdHMuMDEub3JnPjsgS2lubmV5 LCBNaWNoYWVsIEQgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPG1haWx0bzptaWNoYWVsLmQu a2lubmV5QGludGVsLmNvbT4+DQpDYzogVGlhbiwgRmVuZyA8ZmVuZy50aWFuQGludGVsLmNvbTxt YWlsdG86ZmVuZy50aWFuQGludGVsLmNvbT4+OyBaZW5nLCBTdGFyIDxzdGFyLnplbmdAaW50ZWwu Y29tPG1haWx0bzpzdGFyLnplbmdAaW50ZWwuY29tPj47IEdhbywgTGltaW5nIDxsaW1pbmcuZ2Fv QGludGVsLmNvbTxtYWlsdG86bGltaW5nLmdhb0BpbnRlbC5jb20+PjsgWmhhbmcsIENoYW8gQiA8 Y2hhby5iLnpoYW5nQGludGVsLmNvbTxtYWlsdG86Y2hhby5iLnpoYW5nQGludGVsLmNvbT4+DQpT dWJqZWN0OiBSRTogW1BBVENIIDE3LzQ1XSBNZGVNb2R1bGVQa2cvQ2Fwc3VsZUFwcDogQWRkIENh cHN1bGVBcHAgYXBwbGljYXRpb24uDQoNCkppZXdlbiwNCg0KRG9lcyB0aGUgY2Fwc3VsZSBvbiBk aXNrIGZlYXR1cmUgcHJvdmlkZWQgYnkgdGhpcyBhcHAgd29yaz8NCg0KSSB0cmllZCBpdCB3aXRo IHRoZSBRdWFya1BsYXRmb3JtUGtnIGNhcHN1bGUgYW5kIEkgY2FuIGdldA0KVGhlIGFwcCB0byBj b3B5IHRoZSBjYXBzdWxlIHRvIGFuIEVGSSBTeXN0ZW0gUGFydGl0aW9uLCBidXQNClRoZSBsb2dp YyBhZnRlciB0aGF0IHBvaW50IGxvb2tzIGluY29tcGxldGUuDQoNCkFsc28sIGlmIEkgY2xlYXIg dGhlIFBlcnNpc3QgYW5kIFJlc2V0IGZsYWdzIG9uIHRoZSBjYXBzdWxlLA0KdGhlIGltbWVkaWF0 ZSBwcm9jZXNzaW5nIG9mIHRoZSBjYXBzdWxlIGRvZXMgbm90IHdvcmsuDQoNCklzIHRoZXJlIGFu eSBGVyBjb2RlIHRoYXQgd2lsbCBsb29rIGZvciBjYXBzdWxlcyBvbiBkaXNrPw0KDQpJZiB0aGVy ZSBhcmUgaW5jb21wbGV0ZSBmZWF0dXJlcyBpbiBDYXBzdWxlQXBwLCB0aGVuIEkgdGhpbmsNCndl IHNob3VsZCByZW1vdmUgdGhlbS4NCg0KTWlrZQ0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0t LS0tDQo+IEZyb206IFlhbywgSmlld2VuDQo+IFNlbnQ6IFR1ZXNkYXksIFNlcHRlbWJlciAyMCwg MjAxNiAxMTo0NSBQTQ0KPiBUbzogZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc8bWFpbHRvOmVkazIt ZGV2ZWxAbGlzdHMuMDEub3JnPG1haWx0bzplZGsyLWRldmVsQGxpc3RzLjAxLm9yZyUzY21haWx0 bzplZGsyLWRldmVsQGxpc3RzLjAxLm9yZz4+DQo+IENjOiBUaWFuLCBGZW5nIDxmZW5nLnRpYW5A aW50ZWwuY29tPG1haWx0bzpmZW5nLnRpYW5AaW50ZWwuY29tPG1haWx0bzpmZW5nLnRpYW5AaW50 ZWwuY29tJTNjbWFpbHRvOmZlbmcudGlhbkBpbnRlbC5jb20+Pj47IFplbmcsIFN0YXIgPHN0YXIu emVuZ0BpbnRlbC5jb208bWFpbHRvOnN0YXIuemVuZ0BpbnRlbC5jb208bWFpbHRvOnN0YXIuemVu Z0BpbnRlbC5jb20lM2NtYWlsdG86c3Rhci56ZW5nQGludGVsLmNvbT4+PjsgS2lubmV5LCBNaWNo YWVsDQo+IEQgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPG1haWx0bzptaWNoYWVsLmQua2lu bmV5QGludGVsLmNvbTxtYWlsdG86bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20lM2NtYWlsdG86 bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+Pj47IEdhbywgTGltaW5nIDxsaW1pbmcuZ2FvQGlu dGVsLmNvbTxtYWlsdG86bGltaW5nLmdhb0BpbnRlbC5jb208bWFpbHRvOmxpbWluZy5nYW9AaW50 ZWwuY29tJTNjbWFpbHRvOmxpbWluZy5nYW9AaW50ZWwuY29tPj4+OyBaaGFuZywgQ2hhbyBCDQo+ IDxjaGFvLmIuemhhbmdAaW50ZWwuY29tPG1haWx0bzpjaGFvLmIuemhhbmdAaW50ZWwuY29tPG1h aWx0bzpjaGFvLmIuemhhbmdAaW50ZWwuY29tJTNjbWFpbHRvOmNoYW8uYi56aGFuZ0BpbnRlbC5j b20+Pj4NCj4gU3ViamVjdDogW1BBVENIIDE3LzQ1XSBNZGVNb2R1bGVQa2cvQ2Fwc3VsZUFwcDog QWRkIENhcHN1bGVBcHAgYXBwbGljYXRpb24uDQo+DQo+IFRoaXMgQ2Fwc3VsZUFwcCBjYW4gaGVs cCBwZXJmb3JtIGNhcHN1bGUgdXBkYXRlIGluIFVFRkkgc2hlbGwgZW52aXJvbm1lbnQuDQo+IEl0 IGNhbiBhbHNvIGR1bXAgY2Fwc3VsZSBpbmZvcm1hdGlvbiwgY2Fwc3VsZSBzdGF0dXMgdmFyaWFi bGUsIEVTUlQgYW5kIEZNUC4NCj4NCj4gQ2M6IEZlbmcgVGlhbiA8ZmVuZy50aWFuQGludGVsLmNv bTxtYWlsdG86ZmVuZy50aWFuQGludGVsLmNvbTxtYWlsdG86ZmVuZy50aWFuQGludGVsLmNvbSUz Y21haWx0bzpmZW5nLnRpYW5AaW50ZWwuY29tPj4+DQo+IENjOiBTdGFyIFplbmcgPHN0YXIuemVu Z0BpbnRlbC5jb208bWFpbHRvOnN0YXIuemVuZ0BpbnRlbC5jb208bWFpbHRvOnN0YXIuemVuZ0Bp bnRlbC5jb20lM2NtYWlsdG86c3Rhci56ZW5nQGludGVsLmNvbT4+Pg0KPiBDYzogTWljaGFlbCBE IEtpbm5leSA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb208bWFpbHRvOm1pY2hhZWwuZC5raW5u ZXlAaW50ZWwuY29tPG1haWx0bzptaWNoYWVsLmQua2lubmV5QGludGVsLmNvbSUzY21haWx0bzpt aWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4+Pg0KPiBDYzogTGltaW5nIEdhbyA8bGltaW5nLmdh b0BpbnRlbC5jb208bWFpbHRvOmxpbWluZy5nYW9AaW50ZWwuY29tPG1haWx0bzpsaW1pbmcuZ2Fv QGludGVsLmNvbSUzY21haWx0bzpsaW1pbmcuZ2FvQGludGVsLmNvbT4+Pg0KPiBDYzogQ2hhbyBa aGFuZyA8Y2hhby5iLnpoYW5nQGludGVsLmNvbTxtYWlsdG86Y2hhby5iLnpoYW5nQGludGVsLmNv bTxtYWlsdG86Y2hhby5iLnpoYW5nQGludGVsLmNvbSUzY21haWx0bzpjaGFvLmIuemhhbmdAaW50 ZWwuY29tPj4+DQo+IENvbnRyaWJ1dGVkLXVuZGVyOiBUaWFub0NvcmUgQ29udHJpYnV0aW9uIEFn cmVlbWVudCAxLjANCj4gU2lnbmVkLW9mZi1ieTogSmlld2VuIFlhbyA8amlld2VuLnlhb0BpbnRl bC5jb208bWFpbHRvOmppZXdlbi55YW9AaW50ZWwuY29tPG1haWx0bzpqaWV3ZW4ueWFvQGludGVs LmNvbSUzY21haWx0bzpqaWV3ZW4ueWFvQGludGVsLmNvbT4+Pg0KPiAtLS0NCj4gIE1kZU1vZHVs ZVBrZy9BcHBsaWNhdGlvbi9DYXBzdWxlQXBwL0FwcFN1cHBvcnQuYyAgICAgICAgfCAgNDgwICsr KysrKysrKw0KPiAgTWRlTW9kdWxlUGtnL0FwcGxpY2F0aW9uL0NhcHN1bGVBcHAvQ2Fwc3VsZUFw cC5jICAgICAgICB8IDEwNDcgKysrKysrKysrKysrKysrKysrKysNCj4gIE1kZU1vZHVsZVBrZy9B cHBsaWNhdGlvbi9DYXBzdWxlQXBwL0NhcHN1bGVBcHAuaW5mICAgICAgfCAgIDcxICsrDQo+ICBN ZGVNb2R1bGVQa2cvQXBwbGljYXRpb24vQ2Fwc3VsZUFwcC9DYXBzdWxlQXBwLnVuaSAgICAgIHwg ICAyMiArDQo+ICBNZGVNb2R1bGVQa2cvQXBwbGljYXRpb24vQ2Fwc3VsZUFwcC9DYXBzdWxlQXBw RXh0cmEudW5pIHwgICAxOSArDQo+ICBNZGVNb2R1bGVQa2cvQXBwbGljYXRpb24vQ2Fwc3VsZUFw cC9DYXBzdWxlRHVtcC5jICAgICAgIHwgIDg0MCArKysrKysrKysrKysrKysrDQo+ICA2IGZpbGVz IGNoYW5nZWQsIDI0NzkgaW5zZXJ0aW9ucygrKQ0KPg0KPiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxl UGtnL0FwcGxpY2F0aW9uL0NhcHN1bGVBcHAvQXBwU3VwcG9ydC5jDQo+IGIvTWRlTW9kdWxlUGtn L0FwcGxpY2F0aW9uL0NhcHN1bGVBcHAvQXBwU3VwcG9ydC5jDQo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0DQo+IGluZGV4IDAwMDAwMDAuLjM2NTA2N2QNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9N ZGVNb2R1bGVQa2cvQXBwbGljYXRpb24vQ2Fwc3VsZUFwcC9BcHBTdXBwb3J0LmMNCj4gQEAgLTAs MCArMSw0ODAgQEANCj4gKy8qKiBAZmlsZQ0KPiArICBBIHNoZWxsIGFwcGxpY2F0aW9uIHRoYXQg dHJpZ2dlcnMgY2Fwc3VsZSB1cGRhdGUgcHJvY2Vzcy4NCj4gKw0KPiArICBDb3B5cmlnaHQgKGMp IDIwMTYsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gKyAg VGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPiArICBhcmUgbGlj ZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBv ZiB0aGUgQlNEIExpY2Vuc2UNCj4gKyAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRp b24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZSBmb3VuZCBhdA0KPiArICBo dHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+ICsNCj4gKyAg VEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJB UyBJUyIgQkFTSVMsDQo+ICsgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMg T0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQuDQo+ICsNCj4gKyoqLw0KPiAr DQo+ICsjaW5jbHVkZSA8VWVmaS5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZUxpYi5oPg0K PiArI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jh c2VNZW1vcnlMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25MaWIu aD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlCb290U2VydmljZXNUYWJsZUxpYi5oPg0KPiAr I2luY2x1ZGUgPExpYnJhcnkvVWVmaVJ1bnRpbWVTZXJ2aWNlc1RhYmxlTGliLmg+DQo+ICsjaW5j bHVkZSA8TGlicmFyeS9VZWZpTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9QcmludExpYi5o Pg0KPiArI2luY2x1ZGUgPFByb3RvY29sL0xvYWRlZEltYWdlLmg+DQo+ICsjaW5jbHVkZSA8UHJv dG9jb2wvU2ltcGxlRmlsZVN5c3RlbS5oPg0KPiArI2luY2x1ZGUgPEd1aWQvRmlsZUluZm8uaD4N Cj4gKyNpbmNsdWRlIDxHdWlkL0dwdC5oPg0KPiArDQo+ICsjZGVmaW5lIE1BWF9BUkdfTlVNICAg ICAxMQ0KPiArDQo+ICtVSU5UTiAgQXJnYyA9IDA7DQo+ICtDSEFSMTYgKkFyZ3ZbTUFYX0FSR19O VU1dOw0KPiArQ0hBUjE2ICpBcmdCdWZmZXI7DQo+ICsNCj4gKy8qKg0KPiArDQo+ICsgIFRoaXMg ZnVuY3Rpb24gcGFyc2UgYXBwbGljYXRpb24gQVJHLg0KPiArDQo+ICsgIEByZXR1cm4gU3RhdHVz DQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0dldEFyZyAoDQo+ICsgIFZPSUQNCj4gKyAgKQ0K PiArew0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAqRGF0YTsNCj4gKyAgVUlO VE4gICAgICAgICAgICAgICAgICAgICAgICAgRGF0YVNpemU7DQo+ICsgIENIQVIxNiAgICAgICAg ICAgICAgICAgICAgICAgICpJbmRleDsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAg ICAgKkVuZDsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgKkRJbmRleDsNCj4g KyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBFRklfTE9BREVE X0lNQUdFX1BST1RPQ09MICAgICAqTG9hZGVkSW1hZ2U7DQo+ICsNCj4gKyAgU3RhdHVzID0gZ0JT LT5IYW5kbGVQcm90b2NvbCAoDQo+ICsgICAgICAgICAgICAgICAgICBnSW1hZ2VIYW5kbGUsDQo+ ICsgICAgICAgICAgICAgICAgICAmZ0VmaUxvYWRlZEltYWdlUHJvdG9jb2xHdWlkLA0KPiArICAg ICAgICAgICAgICAgICAgKFZPSUQqKikmTG9hZGVkSW1hZ2UNCj4gKyAgICAgICAgICAgICAgICAg ICk7DQo+ICsgIGlmIChFRklfRVJST1IoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7 DQo+ICsgIH0NCj4gKw0KPiArICBEYXRhID0gTG9hZGVkSW1hZ2UtPkxvYWRPcHRpb25zOw0KPiAr ICBEYXRhU2l6ZSA9IExvYWRlZEltYWdlLT5Mb2FkT3B0aW9uc1NpemU7DQo+ICsNCj4gKyAgRW5k ID0gKENIQVIxNiopKFVJTlROKShEYXRhICsgRGF0YVNpemUpOw0KPiArICBTdGF0dXMgPSBnQlMt PkFsbG9jYXRlUG9vbCAoRWZpQm9vdFNlcnZpY2VzRGF0YSwgRGF0YVNpemUsIChWT0lEICoqKSZB cmdCdWZmZXIpOw0KPiArICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiArICBESW5kZXgg PSBBcmdCdWZmZXI7DQo+ICsgIEFyZ3ZbQXJnYysrXSA9IEFyZ0J1ZmZlcjsNCj4gKyAgZm9yIChJ bmRleCA9IChDSEFSMTYqKURhdGE7IEluZGV4IDwgRW5kOyApIHsNCj4gKyAgICBpZiAoKkluZGV4 ID09IEwnICcpIHsNCj4gKyAgICAgICpESW5kZXggPSBMJ1wwJzsNCj4gKyAgICAgIGlmIChBcmdj ID49IE1BWF9BUkdfTlVNKSB7DQo+ICsgICAgICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ ICsgICAgICB9DQo+ICsgICAgICBBcmd2W0FyZ2MrK10gPSAoKysgREluZGV4KTsNCj4gKyAgICAg IHdoaWxlKCpJbmRleCA9PSBMJyAnKSB7DQo+ICsgICAgICAgIEluZGV4ICsrOw0KPiArICAgICAg fQ0KPiArICAgIH0NCj4gKyAgICAoKihESW5kZXggKyspKSA9ICgqKEluZGV4ICsrKSk7DQo+ICsg IH0NCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgQ2xl YXIgQVBQIEFSRy4NCj4gKyoqLw0KPiArVk9JRA0KPiArQ2xlYW5BcmcgKA0KPiArICBWT0lEDQo+ ICsgICkNCj4gK3sNCj4gKyAgRnJlZVBvb2wgKEFyZ3ZbMF0pOw0KPiArfQ0KPiArDQo+ICsvKioN Cj4gKyAgUmV0dXJuIEZpbGUgU3lzdGVtIFZvbHVtZSBjb250YWluaW5nIHRoaXMgc2hlbGwgYXBw bGljYXRpb24uDQo+ICsNCj4gKyAgQHJldHVybiBGaWxlIFN5c3RlbSBWb2x1bWUgY29udGFpbmlu ZyB0aGlzIHNoZWxsIGFwcGxpY2F0aW9uLg0KPiArKiovDQo+ICtFRklfU0lNUExFX0ZJTEVfU1lT VEVNX1BST1RPQ09MICoNCj4gK0dldE15Vm9sICgNCj4gKyAgVk9JRA0KPiArICApDQo+ICt7DQo+ ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIEVGSV9M T0FERURfSU1BR0VfUFJPVE9DT0wgICAgICAgICAqTG9hZGVkSW1hZ2U7DQo+ICsgIEVGSV9TSU1Q TEVfRklMRV9TWVNURU1fUFJPVE9DT0wgICAqVm9sOw0KPiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+ SGFuZGxlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgICAgICAgZ0ltYWdlSGFuZGxlLA0KPiAr ICAgICAgICAgICAgICAgICAgJmdFZmlMb2FkZWRJbWFnZVByb3RvY29sR3VpZCwNCj4gKyAgICAg ICAgICAgICAgICAgIChWT0lEICoqKSZMb2FkZWRJbWFnZQ0KPiArICAgICAgICAgICAgICAgICAg KTsNCj4gKyAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4gKw0KPiArICBTdGF0dXMgPSBn QlMtPkhhbmRsZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgICAgICAgIExvYWRlZEltYWdlLT5E ZXZpY2VIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAmZ0VmaVNpbXBsZUZpbGVTeXN0ZW1Q cm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmVm9sDQo+ICsgICAg ICAgICAgICAgICAgICApOw0KPiArICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAg IHJldHVybiBWb2w7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gTlVMTDsNCj4gK30NCj4gKw0K PiArLyoqDQo+ICsgIFJlYWQgYSBmaWxlIGZyb20gdGhpcyB2b2x1bWUuDQo+ICsNCj4gKyAgQHBh cmFtIFZvbCAgICAgICAgICAgICBGaWxlIFN5c3RlbSBWb2x1bWUNCj4gKyAgQHBhcmFtIEZpbGVO YW1lICAgICAgICBUaGUgZmlsZSB0byBiZSByZWFkLg0KPiArICBAcGFyYW0gQnVmZmVyU2l6ZSAg ICAgIFRoZSBmaWxlIGJ1ZmZlciBzaXplDQo+ICsgIEBwYXJhbSBCdWZmZXIgICAgICAgICAgVGhl IGZpbGUgYnVmZmVyDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICBSZWFkIGZpbGUg c3VjY2Vzc2Z1bGx5DQo+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgRmlsZSBub3QgZm91bmQN Cj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArUmVhZEZpbGVGcm9tVm9sICgNCj4gKyAgSU4gIEVG SV9TSU1QTEVfRklMRV9TWVNURU1fUFJPVE9DT0wgICAqVm9sLA0KPiArICBJTiAgQ0hBUjE2ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICpGaWxlTmFtZSwNCj4gKyAgT1VUIFVJTlROICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqQnVmZmVyU2l6ZSwNCj4gKyAgT1VUIFZPSUQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqKkJ1ZmZlcg0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9T VEFUVVMgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIEVGSV9GSUxFX0hBTkRM RSAgICAgICAgICAgICAgICAgICBSb290RGlyOw0KPiArICBFRklfRklMRV9IQU5ETEUgICAgICAg ICAgICAgICAgICAgSGFuZGxlOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmlsZUluZm9TaXplOw0KPiArICBFRklfRklMRV9JTkZPICAgICAgICAgICAgICAgICAgICAg KkZpbGVJbmZvOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVtcEJ1 ZmZlclNpemU7DQo+ICsgIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqVGVtcEJ1 ZmZlcjsNCj4gKw0KPiArICAvLw0KPiArICAvLyBPcGVuIHRoZSByb290IGRpcmVjdG9yeQ0KPiAr ICAvLw0KPiArICBTdGF0dXMgPSBWb2wtPk9wZW5Wb2x1bWUgKFZvbCwgJlJvb3REaXIpOw0KPiAr ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAg fQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIE9wZW4gdGhlIGZpbGUNCj4gKyAgLy8NCj4gKyAgU3Rh dHVzID0gUm9vdERpci0+T3BlbiAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgUm9vdERpciwN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAmSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAg ICAgIEZpbGVOYW1lLA0KPiArICAgICAgICAgICAgICAgICAgICAgIEVGSV9GSUxFX01PREVfUkVB RCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAwDQo+ICsgICAgICAgICAgICAgICAgICAgICAg KTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIFJvb3REaXItPkNsb3Nl IChSb290RGlyKTsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgUm9v dERpci0+Q2xvc2UgKFJvb3REaXIpOw0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIEdldCB0aGUgZmls ZSBpbmZvcm1hdGlvbg0KPiArICAvLw0KPiArICBGaWxlSW5mb1NpemUgPSBzaXplb2YoRUZJX0ZJ TEVfSU5GTykgKyAxMDI0Ow0KPiArDQo+ICsgIEZpbGVJbmZvID0gQWxsb2NhdGVaZXJvUG9vbCAo RmlsZUluZm9TaXplKTsNCj4gKyAgaWYgKEZpbGVJbmZvID09IE5VTEwpIHsNCj4gKyAgICBIYW5k bGUtPkNsb3NlIChIYW5kbGUpOw0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0K PiArICBTdGF0dXMgPSBIYW5kbGUtPkdldEluZm8gKA0KPiArICAgICAgICAgICAgICAgICAgICAg SGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgICAgJmdFZmlGaWxlSW5mb0d1aWQsDQo+ICsg ICAgICAgICAgICAgICAgICAgICAmRmlsZUluZm9TaXplLA0KPiArICAgICAgICAgICAgICAgICAg ICAgRmlsZUluZm8NCj4gKyAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gKyAgICBIYW5kbGUtPkNsb3NlIChIYW5kbGUpOw0KPiArICAgIGdC Uy0+RnJlZVBvb2wgKEZpbGVJbmZvKTsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ ICsNCj4gKyAgLy8NCj4gKyAgLy8gQWxsb2NhdGUgYnVmZmVyIGZvciB0aGUgZmlsZSBkYXRhLiBU aGUgbGFzdCBDSEFSMTYgaXMgZm9yIEwnXDAnDQo+ICsgIC8vDQo+ICsgIFRlbXBCdWZmZXJTaXpl ID0gKFVJTlROKSBGaWxlSW5mby0+RmlsZVNpemUgKyBzaXplb2YoQ0hBUjE2KTsNCj4gKyAgVGVt cEJ1ZmZlciA9IEFsbG9jYXRlWmVyb1Bvb2wgKFRlbXBCdWZmZXJTaXplKTsNCj4gKyAgaWYgKFRl bXBCdWZmZXIgPT0gTlVMTCkgew0KPiArICAgIEhhbmRsZS0+Q2xvc2UgKEhhbmRsZSk7DQo+ICsg ICAgZ0JTLT5GcmVlUG9vbCAoRmlsZUluZm8pOw0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsg IH0NCj4gKw0KPiArICBnQlMtPkZyZWVQb29sIChGaWxlSW5mbyk7DQo+ICsNCj4gKyAgLy8NCj4g KyAgLy8gUmVhZCB0aGUgZmlsZSBkYXRhIHRvIHRoZSBidWZmZXINCj4gKyAgLy8NCj4gKyAgU3Rh dHVzID0gSGFuZGxlLT5SZWFkICgNCj4gKyAgICAgICAgICAgICAgICAgICAgIEhhbmRsZSwNCj4g KyAgICAgICAgICAgICAgICAgICAgICZUZW1wQnVmZmVyU2l6ZSwNCj4gKyAgICAgICAgICAgICAg ICAgICAgIFRlbXBCdWZmZXINCj4gKyAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChF RklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBIYW5kbGUtPkNsb3NlIChIYW5kbGUpOw0KPiAr ICAgIGdCUy0+RnJlZVBvb2wgKFRlbXBCdWZmZXIpOw0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ ICsgIH0NCj4gKw0KPiArICBIYW5kbGUtPkNsb3NlIChIYW5kbGUpOw0KPiArDQo+ICsgICpCdWZm ZXJTaXplID0gVGVtcEJ1ZmZlclNpemU7DQo+ICsgICpCdWZmZXIgICAgID0gVGVtcEJ1ZmZlcjsN Cj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUmVhZCBh IGZpbGUuDQo+ICsgIElmIFNjYW5GcyBpcyBGTEFTRSwgaXQgd2lsbCB1c2UgdGhpcyBWb2wgYXMg ZGVmYXVsdCBGcy4NCj4gKyAgSWYgU2NhbkZzIGlzIFRSVUUsIGl0IHdpbGwgc2NhbiBhbGwgRlMg YW5kIGNoZWNrIHRoZSBmaWxlLg0KPiArICAgIElmIHRoZXJlIGlzIG9ubHkgb25lIGZpbGUgbWF0 Y2ggdGhlIG5hbWUsIGl0IHdpbGwgYmUgcmVhZC4NCj4gKyAgICBJZiB0aGVyZSBpcyBtb3JlIHRo YW4gb25lIGZpbGUgbWF0Y2ggdGhlIG5hbWUsIGl0IHdpbGwgcmV0dXJuIEVycm9yLg0KPiArDQo+ ICsgIEBwYXJhbSBUaGlzVm9sICAgICAgICAgRmlsZSBTeXN0ZW0gVm9sdW1lDQo+ICsgIEBwYXJh bSBGaWxlTmFtZSAgICAgICAgVGhlIGZpbGUgdG8gYmUgcmVhZC4NCj4gKyAgQHBhcmFtIEJ1ZmZl clNpemUgICAgICBUaGUgZmlsZSBidWZmZXIgc2l6ZQ0KPiArICBAcGFyYW0gQnVmZmVyICAgICAg ICAgIFRoZSBmaWxlIGJ1ZmZlcg0KPiArICBAcGFyYW0gU2NhbkZzICAgICAgICAgIE5lZWQgU2Nh biBhbGwgRlMNCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgIFJlYWQgZmlsZSBzdWNj ZXNzZnVsbHkNCj4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICBGaWxlIG5vdCBmb3VuZA0KPiAr ICBAcmV0dmFsIEVGSV9OT19NQVBQSU5HIFRoZXJlIGlzIGR1cGxpY2F0ZWQgZmlsZXMgZm91bmQN Cj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArUmVhZEZpbGVUb0J1ZmZlckV4ICgNCj4gKyAgSU4g T1VUIEVGSV9TSU1QTEVfRklMRV9TWVNURU1fUFJPVE9DT0wgICAqKlRoaXNWb2wsDQo+ICsgIElO ICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkZpbGVOYW1lLA0KPiArICBP VVQgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpCdWZmZXJTaXplLA0KPiAr ICBPVVQgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqQnVmZmVyLA0KPiAr ICBJTiAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjYW5Gcw0KPiArICAp DQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ ICsgIEVGSV9TSU1QTEVfRklMRV9TWVNURU1fUFJPVE9DT0wgICAqVm9sOw0KPiArICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVtcEJ1ZmZlclNpemU7DQo+ICsgIFZPSUQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqVGVtcEJ1ZmZlcjsNCj4gKyAgVUlOVE4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE5vSGFuZGxlczsNCj4gKyAgRUZJX0hBTkRMRSAgICAgICAg ICAgICAgICAgICAgICAgICpIYW5kbGVCdWZmZXI7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBJbmRleDsNCj4gKw0KPiArICAvLw0KPiArICAvLyBDaGVjayBwYXJhbWV0 ZXJzDQo+ICsgIC8vDQo+ICsgIGlmICgoRmlsZU5hbWUgPT0gTlVMTCkgfHwgKEJ1ZmZlciA9PSBO VUxMKSB8fCAoVGhpc1ZvbCA9PSBOVUxMKSkgew0KPiArICAgIHJldHVybiBFRklfSU5WQUxJRF9Q QVJBTUVURVI7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBub3Qgc2NhbiBmcw0KPiAr ICAvLw0KPiArICBpZiAoIVNjYW5Gcykgew0KPiArICAgIGlmICgqVGhpc1ZvbCA9PSBOVUxMKSB7 DQo+ICsgICAgICAqVGhpc1ZvbCA9IEdldE15Vm9sICgpOw0KPiArICAgICAgaWYgKCpUaGlzVm9s ID09IE5VTEwpIHsNCj4gKyAgICAgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4g KyAgICAgIH0NCj4gKyAgICB9DQo+ICsgICAgLy8NCj4gKyAgICAvLyBSZWFkIGZpbGUgZGlyZWN0 bHkgZnJvbSBWb2wNCj4gKyAgICAvLw0KPiArICAgIHJldHVybiBSZWFkRmlsZUZyb21Wb2wgKCpU aGlzVm9sLCBGaWxlTmFtZSwgQnVmZmVyU2l6ZSwgQnVmZmVyKTsNCj4gKyAgfQ0KPiArDQo+ICsg IC8vDQo+ICsgIC8vIG5lZWQgc2NhbiBmcw0KPiArICAvLw0KPiArDQo+ICsgIC8vDQo+ICsgIC8v IEdldCBhbGwgVm9sIGhhbmRsZQ0KPiArICAvLw0KPiArICBTdGF0dXMgPSBnQlMtPkxvY2F0ZUhh bmRsZUJ1ZmZlciAoDQo+ICsgICAgICAgICAgICAgICAgICAgQnlQcm90b2NvbCwNCj4gKyAgICAg ICAgICAgICAgICAgICAmZ0VmaVNpbXBsZUZpbGVTeXN0ZW1Qcm90b2NvbEd1aWQsDQo+ICsgICAg ICAgICAgICAgICAgICAgTlVMTCwNCj4gKyAgICAgICAgICAgICAgICAgICAmTm9IYW5kbGVzLA0K PiArICAgICAgICAgICAgICAgICAgICZIYW5kbGVCdWZmZXINCj4gKyAgICAgICAgICAgICAgICAg ICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpICYmIChOb0hhbmRsZXMgPT0gMCkpIHsN Cj4gKyAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsg IC8vIFdhbGsgdGhyb3VnaCBlYWNoIFZvbA0KPiArICAvLw0KPiArICAqVGhpc1ZvbCA9IE5VTEw7 DQo+ICsgICpCdWZmZXJTaXplID0gMDsNCj4gKyAgKkJ1ZmZlciAgICAgPSBOVUxMOw0KPiArICBm b3IgKEluZGV4ID0gMDsgSW5kZXggPCBOb0hhbmRsZXM7IEluZGV4KyspIHsNCj4gKyAgICBTdGF0 dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgICAgICAgICAgSGFuZGxl QnVmZmVyW0luZGV4XSwNCj4gKyAgICAgICAgICAgICAgICAgICAgJmdFZmlTaW1wbGVGaWxlU3lz dGVtUHJvdG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmVm9sDQo+ ICsgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7 DQo+ICsgICAgICBjb250aW51ZTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBTdGF0dXMgPSBSZWFk RmlsZUZyb21Wb2wgKFZvbCwgRmlsZU5hbWUsICZUZW1wQnVmZmVyU2l6ZSwgJlRlbXBCdWZmZXIp Ow0KPiArICAgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICAvLw0KPiArICAg ICAgLy8gUmVhZCBmaWxlIE9LLCBjaGVjayBkdXBsaWNhdGlvbg0KPiArICAgICAgLy8NCj4gKyAg ICAgIGlmICgqVGhpc1ZvbCAhPSBOVUxMKSB7DQo+ICsgICAgICAgIC8vDQo+ICsgICAgICAgIC8v IEZpbmQgdGhlIGR1cGxpY2F0ZWQgZmlsZQ0KPiArICAgICAgICAvLw0KPiArICAgICAgICBnQlMt PkZyZWVQb29sIChUZW1wQnVmZmVyKTsNCj4gKyAgICAgICAgZ0JTLT5GcmVlUG9vbCAoKkJ1ZmZl cik7DQo+ICsgICAgICAgIFByaW50IChMIkR1cGxpY2F0ZWQgRmlsZU5hbWUgZm91bmQhXG4iKTsN Cj4gKyAgICAgICAgcmV0dXJuIEVGSV9OT19NQVBQSU5HOw0KPiArICAgICAgfSBlbHNlIHsNCj4g KyAgICAgICAgLy8NCj4gKyAgICAgICAgLy8gUmVjb3JkIHZhbHVlDQo+ICsgICAgICAgIC8vDQo+ ICsgICAgICAgICpUaGlzVm9sID0gVm9sOw0KPiArICAgICAgICAqQnVmZmVyU2l6ZSA9IFRlbXBC dWZmZXJTaXplOw0KPiArICAgICAgICAqQnVmZmVyICAgICA9IFRlbXBCdWZmZXI7DQo+ICsgICAg ICB9DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gU2NhbiBGcyBkb25l DQo+ICsgIC8vDQo+ICsgIGlmICgqVGhpc1ZvbCA9PSBOVUxMKSB7DQo+ICsgICAgcmV0dXJuIEVG SV9OT1RfRk9VTkQ7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBEb25lDQo+ICsgIC8v DQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFJlYWQg YSBmaWxlLg0KPiArDQo+ICsgIEBwYXJhbSBGaWxlTmFtZSAgICAgICAgVGhlIGZpbGUgdG8gYmUg cmVhZC4NCj4gKyAgQHBhcmFtIEJ1ZmZlclNpemUgICAgICBUaGUgZmlsZSBidWZmZXIgc2l6ZQ0K PiArICBAcGFyYW0gQnVmZmVyICAgICAgICAgIFRoZSBmaWxlIGJ1ZmZlcg0KPiArDQo+ICsgIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgICAgUmVhZCBmaWxlIHN1Y2Nlc3NmdWxseQ0KPiArICBAcmV0dmFs IEVGSV9OT1RfRk9VTkQgIEZpbGUgbm90IGZvdW5kDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4g K1JlYWRGaWxlVG9CdWZmZXIgKA0KPiArICBJTiAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICpGaWxlTmFtZSwNCj4gKyAgT1VUIFVJTlROICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqQnVmZmVyU2l6ZSwNCj4gKyAgT1VUIFZPSUQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqKkJ1ZmZlcg0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TSU1QTEVfRklM RV9TWVNURU1fUFJPVE9DT0wgICAqVm9sOw0KPiArICBWb2wgPSBOVUxMOw0KPiArICByZXR1cm4g UmVhZEZpbGVUb0J1ZmZlckV4KCZWb2wsIEZpbGVOYW1lLCBCdWZmZXJTaXplLCBCdWZmZXIsIEZB TFNFKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFdyaXRlIGEgZmlsZS4NCj4gKw0KPiArICBA cGFyYW0gRmlsZU5hbWUgICAgICAgIFRoZSBmaWxlIHRvIGJlIHdyaXR0ZW4uDQo+ICsgIEBwYXJh bSBCdWZmZXJTaXplICAgICAgVGhlIGZpbGUgYnVmZmVyIHNpemUNCj4gKyAgQHBhcmFtIEJ1ZmZl ciAgICAgICAgICBUaGUgZmlsZSBidWZmZXINCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNT ICAgIFdyaXRlIGZpbGUgc3VjY2Vzc2Z1bGx5DQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1dy aXRlRmlsZUZyb21CdWZmZXIoDQo+ICsgIElOICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKkZpbGVOYW1lLA0KPiArICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEJ1ZmZlclNpemUsDQo+ICsgIElOICBWT0lEICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKkJ1ZmZlcg0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAg ICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIEVGSV9GSUxFX0hBTkRMRSAgICAgICAgICAg ICAgICAgICBSb290RGlyOw0KPiArICBFRklfRklMRV9IQU5ETEUgICAgICAgICAgICAgICAgICAg SGFuZGxlOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVtcEJ1ZmZl clNpemU7DQo+ICsgIEVGSV9TSU1QTEVfRklMRV9TWVNURU1fUFJPVE9DT0wgICAqVm9sOw0KPiAr DQo+ICsgIFZvbCA9IEdldE15Vm9sKCk7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gT3BlbiB0aGUg cm9vdCBkaXJlY3RvcnkNCj4gKyAgLy8NCj4gKyAgU3RhdHVzID0gVm9sLT5PcGVuVm9sdW1lIChW b2wsICZSb290RGlyKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJl dHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBPcGVuIHRoZSBmaWxl DQo+ICsgIC8vDQo+ICsgIFN0YXR1cyA9IFJvb3REaXItPk9wZW4gKA0KPiArICAgICAgICAgICAg ICAgICAgICAgIFJvb3REaXIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgJkhhbmRsZSwNCj4g KyAgICAgICAgICAgICAgICAgICAgICBGaWxlTmFtZSwNCj4gKyAgICAgICAgICAgICAgICAgICAg ICBFRklfRklMRV9NT0RFX1JFQUQgfCBFRklfRklMRV9NT0RFX1dSSVRFfCBFRklfRklMRV9NT0RF X0NSRUFURSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAwDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIFJvb3REaXIt PkNsb3NlIChSb290RGlyKTsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4g KyAgLy8NCj4gKyAgLy8gRGVsZXRlIGZpbGUNCj4gKyAgLy8NCj4gKyAgU3RhdHVzID0gSGFuZGxl LT5EZWxldGUoSGFuZGxlKTsNCj4gKyAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAg cmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIE9wZW4gdGhlIGZp bGUgYWdhaW4NCj4gKyAgLy8NCj4gKyAgU3RhdHVzID0gUm9vdERpci0+T3BlbiAoDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgUm9vdERpciwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAmSGFu ZGxlLA0KPiArICAgICAgICAgICAgICAgICAgICAgIEZpbGVOYW1lLA0KPiArICAgICAgICAgICAg ICAgICAgICAgIEVGSV9GSUxFX01PREVfUkVBRCB8IEVGSV9GSUxFX01PREVfV1JJVEV8IEVGSV9G SUxFX01PREVfQ1JFQVRFLA0KPiArICAgICAgICAgICAgICAgICAgICAgIDANCj4gKyAgICAgICAg ICAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAg Um9vdERpci0+Q2xvc2UgKFJvb3REaXIpOw0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0N Cj4gKw0KPiArICBSb290RGlyLT5DbG9zZSAoUm9vdERpcik7DQo+ICsNCj4gKyAgLy8NCj4gKyAg Ly8gV3JpdGUgdGhlIGZpbGUgZGF0YSBmcm9tIHRoZSBidWZmZXINCj4gKyAgLy8NCj4gKyAgVGVt cEJ1ZmZlclNpemUgPSBCdWZmZXJTaXplOw0KPiArICBTdGF0dXMgPSBIYW5kbGUtPldyaXRlICgN Cj4gKyAgICAgICAgICAgICAgICAgICAgIEhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICAg ICZUZW1wQnVmZmVyU2l6ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlcg0KPiArICAg ICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiAr ICAgIEhhbmRsZS0+Q2xvc2UgKEhhbmRsZSk7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAg fQ0KPiArDQo+ICsgIEhhbmRsZS0+Q2xvc2UgKEhhbmRsZSk7DQo+ICsNCj4gKyAgcmV0dXJuIEVG SV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+IGRpZmYgLS1naXQgYS9NZGVNb2R1bGVQa2cvQXBwbGlj YXRpb24vQ2Fwc3VsZUFwcC9DYXBzdWxlQXBwLmMNCj4gYi9NZGVNb2R1bGVQa2cvQXBwbGljYXRp b24vQ2Fwc3VsZUFwcC9DYXBzdWxlQXBwLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5k ZXggMDAwMDAwMC4uMGEyODU1Nw0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL01kZU1vZHVsZVBr Zy9BcHBsaWNhdGlvbi9DYXBzdWxlQXBwL0NhcHN1bGVBcHAuYw0KPiBAQCAtMCwwICsxLDEwNDcg QEANCj4gKy8qKiBAZmlsZQ0KPiArICBBIHNoZWxsIGFwcGxpY2F0aW9uIHRoYXQgdHJpZ2dlcnMg Y2Fwc3VsZSB1cGRhdGUgcHJvY2Vzcy4NCj4gKw0KPiArICBDb3B5cmlnaHQgKGMpIDIwMTYsIElu dGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gKyAgVGhpcyBwcm9n cmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPiArICBhcmUgbGljZW5zZWQgYW5k IG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNE IExpY2Vuc2UNCj4gKyAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUg ZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZSBmb3VuZCBhdA0KPiArICBodHRwOi8vb3Bl bnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+ICsNCj4gKyAgVEhFIFBST0dS QU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFT SVMsDQo+ICsgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJ TkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQuDQo+ICsNCj4gKyoqLw0KPiArDQo+ICsjaW5j bHVkZSA8VWVmaS5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZUxpYi5oPg0KPiArI2luY2x1 ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VNZW1vcnlM aWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25MaWIuaD4NCj4gKyNp bmNsdWRlIDxMaWJyYXJ5L1VlZmlCb290U2VydmljZXNUYWJsZUxpYi5oPg0KPiArI2luY2x1ZGUg PExpYnJhcnkvVWVmaVJ1bnRpbWVTZXJ2aWNlc1RhYmxlTGliLmg+DQo+ICsjaW5jbHVkZSA8TGli cmFyeS9VZWZpTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9QcmludExpYi5oPg0KPiArI2lu Y2x1ZGUgPFByb3RvY29sL0xvYWRlZEltYWdlLmg+DQo+ICsjaW5jbHVkZSA8UHJvdG9jb2wvU2lt cGxlRmlsZVN5c3RlbS5oPg0KPiArI2luY2x1ZGUgPFByb3RvY29sL0dyYXBoaWNzT3V0cHV0Lmg+ DQo+ICsjaW5jbHVkZSA8R3VpZC9GaWxlSW5mby5oPg0KPiArI2luY2x1ZGUgPEd1aWQvR3B0Lmg+ DQo+ICsjaW5jbHVkZSA8R3VpZC9HbG9iYWxWYXJpYWJsZS5oPg0KPiArI2luY2x1ZGUgPEd1aWQv Q2Fwc3VsZVJlcG9ydC5oPg0KPiArI2luY2x1ZGUgPEd1aWQvU3lzdGVtUmVzb3VyY2VUYWJsZS5o Pg0KPiArI2luY2x1ZGUgPEd1aWQvRm1wQ2Fwc3VsZS5oPg0KPiArI2luY2x1ZGUgPEluZHVzdHJ5 U3RhbmRhcmQvV2luZG93c1V4Q2Fwc3VsZS5oPg0KPiArDQo+ICsjZGVmaW5lIENBUFNVTEVfSEVB REVSX1NJWkUgIDB4MjANCj4gKw0KPiArI2RlZmluZSBORVNURURfQ0FQU1VMRV9IRUFERVJfU0la RSAgU0laRV80S0INCj4gKyNkZWZpbmUgU1lTVEVNX0ZJUk1XQVJFX0ZMQUcgMHg1MDAwMA0KPiAr I2RlZmluZSBERVZJQ0VfRklSTVdBUkVfRkxBRyAweDc4MDEwDQo+ICsNCj4gKyNkZWZpbmUgRUZJ X0NBUFNVTEVfRlJPTV9GSUxFX0RJUiAgICAgICAgICAgICAgICAgICAgICAgICAgIEwiXFxFRklc XFVwZGF0ZUNhcHN1bGVcXDxmaWxlOi8vL1xcRUZJXFVwZGF0ZUNhcHN1bGVcPjxmaWxlOi8vL1xc RUZJXFVwZGF0ZUNhcHN1bGVcJTNjZmlsZTpcRUZJXFVwZGF0ZUNhcHN1bGVcJTNlPiINCj4gKyNk ZWZpbmUgRUZJX09TX0lORElDQVRJT05TX0ZJTEVfQ0FQU1VMRV9ERUxJVkVSWV9TVVBQT1JURUQg IDB4MDAwMDAwMDAwMDAwMDAwNA0KPiArDQo+ICsjZGVmaW5lIE1BSk9SX1ZFUlNJT04gICAxDQo+ ICsjZGVmaW5lIE1JTk9SX1ZFUlNJT04gICAwDQo+ICsNCj4gKyNkZWZpbmUgTUFYX0FSR19OVU0g ICAgIDExDQo+ICsjZGVmaW5lIE1BWF9DQVBTVUxFX05VTSAoTUFYX0FSR19OVU0gLSAxKQ0KPiAr DQo+ICtleHRlcm4gVUlOVE4gIEFyZ2M7DQo+ICtleHRlcm4gQ0hBUjE2ICpBcmd2W107DQo+ICsN Cj4gKy8vDQo+ICsvLyBEZWZpbmUgaG93IG1hbnkgYmxvY2sgZGVzY3JpcHRvcnMgd2Ugd2FudCB0 byB0ZXN0IHdpdGguDQo+ICsvLw0KPiArVUlOVE4gIE51bWJlck9mRGVzY3JpcHRvcnMgPSAxOw0K PiArVUlOVE4gIENhcHN1bGVGaXJzdEluZGV4Ow0KPiArVUlOVE4gIENhcHN1bGVMYXN0SW5kZXg7 DQo+ICsNCj4gKy8qKg0KPiArICBEdW1wIGNhcHN1bGUgaW5mb3JtYXRpb24NCj4gKw0KPiArICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIGNhcHN1bGUgaW5mb3JtYXRpb24gaXMg ZHVtcGVkLg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgICAgSW5wdXQgcGFyYW1l dGVyIGlzIG5vdCB2YWxpZC4NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRHVtcENhcHN1bGUo DQo+ICsgIFZPSUQNCj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIER1bXAgY2Fwc3VsZSBzdGF0 dXMgdmFyaWFibGUuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRo ZSBjYXBzdWxlIHN0YXR1cyB2YXJpYWJsZSBpcyBkdW1wZWQuDQo+ICsgIEByZXR2YWwgRUZJX1VO U1VQUE9SVEVEICAgICAgICBJbnB1dCBwYXJhbWV0ZXIgaXMgbm90IHZhbGlkLg0KPiArKiovDQo+ ICtFRklfU1RBVFVTDQo+ICtEbXBDYXBzdWxlU3RhdHVzVmFyaWFibGUoDQo+ICsgIFZPSUQNCj4g KyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIER1bXAgRk1QIHByb3RvY29sIGluZm8uDQo+ICsqKi8N Cj4gK1ZPSUQNCj4gK0R1bXBGbXBEYXRhKA0KPiArICBWT0lEDQo+ICsgICk7DQo+ICsNCj4gKy8q Kg0KPiArICBEdW1wIEVTUlQgaW5mby4NCj4gKyoqLw0KPiArVk9JRA0KPiArRHVtcEVzcnREYXRh KA0KPiArICBWT0lEDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArICBSZWFkIGEgZmlsZS4NCj4g Kw0KPiArICBAcGFyYW0gRmlsZU5hbWUgICAgICAgIFRoZSBmaWxlIHRvIGJlIHJlYWQuDQo+ICsg IEBwYXJhbSBCdWZmZXJTaXplICAgICAgVGhlIGZpbGUgYnVmZmVyIHNpemUNCj4gKyAgQHBhcmFt IEJ1ZmZlciAgICAgICAgICBUaGUgZmlsZSBidWZmZXINCj4gKw0KPiArICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgIFJlYWQgZmlsZSBzdWNjZXNzZnVsbHkNCj4gKyAgQHJldHZhbCBFRklfTk9UX0ZP VU5EICBGaWxlIG5vdCBmb3VuZA0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtSZWFkRmlsZVRv QnVmZmVyKA0KPiArICBJTiAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpG aWxlTmFtZSwNCj4gKyAgT1VUIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq QnVmZmVyU2l6ZSwNCj4gKyAgT1VUIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqKkJ1ZmZlcg0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAgV3JpdGUgYSBmaWxlLg0KPiAr DQo+ICsgIEBwYXJhbSBGaWxlTmFtZSAgICAgICAgVGhlIGZpbGUgdG8gYmUgd3JpdHRlbi4NCj4g KyAgQHBhcmFtIEJ1ZmZlclNpemUgICAgICBUaGUgZmlsZSBidWZmZXIgc2l6ZQ0KPiArICBAcGFy YW0gQnVmZmVyICAgICAgICAgIFRoZSBmaWxlIGJ1ZmZlcg0KPiArDQo+ICsgIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICAgV3JpdGUgZmlsZSBzdWNjZXNzZnVsbHkNCj4gKyoqLw0KPiArRUZJX1NUQVRV Uw0KPiArV3JpdGVGaWxlRnJvbUJ1ZmZlcigNCj4gKyAgSU4gIENIQVIxNiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqRmlsZU5hbWUsDQo+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQnVmZmVyU2l6ZSwNCj4gKyAgSU4gIFZPSUQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqQnVmZmVyDQo+ICsgICk7DQo+ICsNCj4gKy8qKg0KPiArDQo+ ICsgIFRoaXMgZnVuY3Rpb24gcGFyc2UgYXBwbGljYXRpb24gQVJHLg0KPiArDQo+ICsgIEByZXR1 cm4gU3RhdHVzDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0dldEFyZyAoDQo+ICsgIFZPSUQN Cj4gKyAgKTsNCj4gKw0KPiArLyoqDQo+ICsgIENsZWFyIEFQUCBBUkcuDQo+ICsqKi8NCj4gK1ZP SUQNCj4gK0NsZWFuQXJnICgNCj4gKyAgVk9JRA0KPiArICApOw0KPiArDQo+ICsvKioNCj4gKyAg Q3JlYXRlIFVYIGNhcHN1bGUuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAg ICAgIFRoZSBjYXBzdWxlIGhlYWRlciBpcyBhcHBlbmRlZC4NCj4gKyAgQHJldHZhbCBFRklfVU5T VVBQT1JURUQgICAgICAgIElucHV0IHBhcmFtZXRlciBpcyBub3QgdmFsaWQuDQo+ICsgIEByZXR2 YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgICBObyBlbm91Z2ggcmVzb3VyY2UgdG8gY3JlYXRlIFVY IGNhcHN1bGUuDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0NyZWF0ZUJtcEZtcCgNCj4gKyAg Vk9JRA0KPiArICApDQo+ICt7DQo+ICsgIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqT3V0cHV0Q2Fwc3VsZU5hbWU7DQo+ICsgIFZPSUQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqQm1wQnVmZmVyOw0KPiArICBVSU5UTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZVNpemU7DQo+ICsgIENIQVIx NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqQm1wTmFtZTsNCj4gKyAg VUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpGdWxsQ2Fwc3Vs ZUJ1ZmZlcjsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZ1bGxDYXBzdWxlQnVmZmVyU2l6ZTsNCj4gKyAgRUZJX0RJU1BMQVlfQ0FQU1VMRSAgICAg ICAgICAgICAgICAgICAgICAgICAgICpEaXNwbGF5Q2Fwc3VsZTsNCj4gKyAgRUZJX1NUQVRVUyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRUZJX0dSQVBI SUNTX09VVFBVVF9QUk9UT0NPTCAgICAgICAgICAgICAgICAgICpHb3A7DQo+ICsNCj4gKyAgU3Rh dHVzID0gZ0JTLT5Mb2NhdGVQcm90b2NvbCgmZ0VmaUdyYXBoaWNzT3V0cHV0UHJvdG9jb2xHdWlk LCBOVUxMLCAoVk9JRCAqKikmR29wKTsNCj4gKyAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ ICsgICAgUHJpbnQoTCJDYXBzdWxlQXBwOiBOTyBHT1AgaXMgZm91bmQuXG4iKTsNCj4gKyAgICBy ZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiArICB9DQo+ICsgIFByaW50KEwiQ3VycmVudCBHT1A6 IE1vZGUgLSAlZCwgIiwgR29wLT5Nb2RlLT5Nb2RlKTsNCj4gKyAgUHJpbnQoTCJIb3Jpem9udGFs UmVzb2x1dGlvbiAtICVkLCAiLCBHb3AtPk1vZGUtPkluZm8tPkhvcml6b250YWxSZXNvbHV0aW9u KTsNCj4gKyAgUHJpbnQoTCJWZXJ0aWNhbFJlc29sdXRpb24gLSAlZFxuIiwgR29wLT5Nb2RlLT5J bmZvLT5WZXJ0aWNhbFJlc29sdXRpb24pOw0KPiArICAvLyBIb3Jpem9udGFsUmVzb2x1dGlvbiA+ PSBCTVBfSU1BR0VfSEVBREVSLlBpeGVsV2lkdGgNCj4gKyAgLy8gVmVydGljYWxSZXNvbHV0aW9u ICAgPj0gQk1QX0lNQUdFX0hFQURFUi5QaXhlbEhlaWdodA0KPiArDQo+ICsgIGlmIChBcmdjICE9 IDUpIHsNCj4gKyAgICBQcmludChMIkNhcHN1bGVBcHA6IEludmFsaWQgUGFyYW1ldGVyLlxuIik7 DQo+ICsgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChT dHJDbXAoQXJndlszXSwgTCItTyIpICE9IDApIHsNCj4gKyAgICBQcmludChMIkNhcHN1bGVBcHA6 IE5PIG91dHB1dCBjYXBzdWxlIG5hbWUuXG4iKTsNCj4gKyAgICByZXR1cm4gRUZJX1VOU1VQUE9S VEVEOw0KPiArICB9DQo+ICsgIE91dHB1dENhcHN1bGVOYW1lID0gQXJndls0XTsNCj4gKw0KPiAr ICBCbXBCdWZmZXIgPSBOVUxMOw0KPiArICBGaWxlU2l6ZSA9IDA7DQo+ICsgIEZ1bGxDYXBzdWxl QnVmZmVyID0gTlVMTDsNCj4gKw0KPiArICBCbXBOYW1lID0gQXJndlsyXTsNCj4gKyAgU3RhdHVz ID0gUmVhZEZpbGVUb0J1ZmZlcihCbXBOYW1lLCAmRmlsZVNpemUsICZCbXBCdWZmZXIpOw0KPiAr ICBpZiAoRUZJX0VSUk9SKFN0YXR1cykpIHsNCj4gKyAgICBQcmludChMIkNhcHN1bGVBcHA6IEJN UCBpbWFnZSAoJXMpIGlzIG5vdCBmb3VuZC5cbiIsIEJtcE5hbWUpOw0KPiArICAgIGdvdG8gRG9u ZTsNCj4gKyAgfQ0KPiArDQo+ICsgIEZ1bGxDYXBzdWxlQnVmZmVyU2l6ZSA9IHNpemVvZihFRklf RElTUExBWV9DQVBTVUxFKSArIEZpbGVTaXplOw0KPiArICBGdWxsQ2Fwc3VsZUJ1ZmZlciA9IEFs bG9jYXRlUG9vbChGdWxsQ2Fwc3VsZUJ1ZmZlclNpemUpOw0KPiArICBpZiAoRnVsbENhcHN1bGVC dWZmZXIgPT0gTlVMTCkgew0KPiArICAgIFByaW50KEwiQ2Fwc3VsZUFwcDogQ2Fwc3VsZSBCdWZm ZXIgc2l6ZSAoMHgleCkgdG9vIGJpZy5cbiIsDQo+IEZ1bGxDYXBzdWxlQnVmZmVyU2l6ZSk7DQo+ ICsgICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsgICAgZ290byBEb25lOw0K PiArICB9DQo+ICsNCj4gKyAgRGlzcGxheUNhcHN1bGUgPSAoRUZJX0RJU1BMQVlfQ0FQU1VMRSAq KUZ1bGxDYXBzdWxlQnVmZmVyOw0KPiArICBDb3B5R3VpZCgmRGlzcGxheUNhcHN1bGUtPkNhcHN1 bGVIZWFkZXIuQ2Fwc3VsZUd1aWQsICZnV2luZG93c1V4Q2Fwc3VsZUd1aWQpOw0KPiArICBEaXNw bGF5Q2Fwc3VsZS0+Q2Fwc3VsZUhlYWRlci5IZWFkZXJTaXplID0gc2l6ZW9mKERpc3BsYXlDYXBz dWxlLT5DYXBzdWxlSGVhZGVyKTsNCj4gKyAgRGlzcGxheUNhcHN1bGUtPkNhcHN1bGVIZWFkZXIu RmxhZ3MgPSBDQVBTVUxFX0ZMQUdTX1BFUlNJU1RfQUNST1NTX1JFU0VUOw0KPiArICBEaXNwbGF5 Q2Fwc3VsZS0+Q2Fwc3VsZUhlYWRlci5DYXBzdWxlSW1hZ2VTaXplID0gKFVJTlQzMilGdWxsQ2Fw c3VsZUJ1ZmZlclNpemU7DQo+ICsNCj4gKyAgRGlzcGxheUNhcHN1bGUtPkltYWdlUGF5bG9hZC5W ZXJzaW9uID0gMTsNCj4gKyAgRGlzcGxheUNhcHN1bGUtPkltYWdlUGF5bG9hZC5DaGVja3N1bSA9 IDA7DQo+ICsgIERpc3BsYXlDYXBzdWxlLT5JbWFnZVBheWxvYWQuSW1hZ2VUeXBlID0gMDsgLy8g Qk1QDQo+ICsgIERpc3BsYXlDYXBzdWxlLT5JbWFnZVBheWxvYWQuUmVzZXJ2ZWQgPSAwOw0KPiAr ICBEaXNwbGF5Q2Fwc3VsZS0+SW1hZ2VQYXlsb2FkLk1vZGUgPSBHb3AtPk1vZGUtPk1vZGU7DQo+ ICsgIERpc3BsYXlDYXBzdWxlLT5JbWFnZVBheWxvYWQuT2Zmc2V0WCA9IDA7DQo+ICsgIERpc3Bs YXlDYXBzdWxlLT5JbWFnZVBheWxvYWQuT2Zmc2V0WSA9IDA7DQo+ICsNCj4gKyAgQ29weU1lbSgo RGlzcGxheUNhcHN1bGUgKyAxKSwgQm1wQnVmZmVyLCBGaWxlU2l6ZSk7DQo+ICsNCj4gKyAgRGlz cGxheUNhcHN1bGUtPkltYWdlUGF5bG9hZC5DaGVja3N1bSA9IENhbGN1bGF0ZUNoZWNrU3VtOChG dWxsQ2Fwc3VsZUJ1ZmZlciwNCj4gRnVsbENhcHN1bGVCdWZmZXJTaXplKTsNCj4gKw0KPiArICBT dGF0dXMgPSBXcml0ZUZpbGVGcm9tQnVmZmVyKE91dHB1dENhcHN1bGVOYW1lLCBGdWxsQ2Fwc3Vs ZUJ1ZmZlclNpemUsDQo+IEZ1bGxDYXBzdWxlQnVmZmVyKTsNCj4gKyAgUHJpbnQoTCJDYXBzdWxl QXBwOiBXcml0ZSAlcyAlclxuIiwgT3V0cHV0Q2Fwc3VsZU5hbWUsIFN0YXR1cyk7DQo+ICsNCj4g K0RvbmU6DQo+ICsgIGlmIChCbXBCdWZmZXIgIT0gTlVMTCkgew0KPiArICAgIEZyZWVQb29sKEJt cEJ1ZmZlcik7DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoRnVsbENhcHN1bGVCdWZmZXIgIT0gTlVM TCkgew0KPiArICAgIEZyZWVQb29sKEZ1bGxDYXBzdWxlQnVmZmVyKTsNCj4gKyAgfQ0KPiArDQo+ ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBHZXQgSW1hZ2VUeXBl SWQgaW4gdGhlIEZNUCBjYXBzdWxlIGhlYWRlci4NCj4gKw0KPiArICBAcGFyYW0gQ2Fwc3VsZUhl YWRlciAgVGhlIEZNUCBjYXBzdWxlIGltYWdlIGhlYWRlci4NCj4gKw0KPiArICBAcmV0dXJuIElt YWdlVHlwZUlkDQo+ICsqKi8NCj4gK0VGSV9HVUlEICoNCj4gK0dldENhcHN1bGVJbWFnZVR5cGVJ ZCgNCj4gKyAgSU4gRUZJX0NBUFNVTEVfSEVBREVSICAgICAgICAgICAgICAgICAgICAgICAgICAg ICpDYXBzdWxlSGVhZGVyDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX0ZJUk1XQVJFX01BTkFHRU1F TlRfQ0FQU1VMRV9IRUFERVIgICAgICAgKkZtcENhcHN1bGVIZWFkZXI7DQo+ICsgIFVJTlQ2NCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpJdGVtT2Zmc2V0TGlzdDsNCj4g KyAgRUZJX0ZJUk1XQVJFX01BTkFHRU1FTlRfQ0FQU1VMRV9JTUFHRV9IRUFERVIgKkltYWdlSGVh ZGVyOw0KPiArDQo+ICsgIEZtcENhcHN1bGVIZWFkZXIgPSAoRUZJX0ZJUk1XQVJFX01BTkFHRU1F TlRfQ0FQU1VMRV9IRUFERVIgKikoKFVJTlQ4ICopQ2Fwc3VsZUhlYWRlcg0KPiArIENhcHN1bGVI ZWFkZXItPkhlYWRlclNpemUpOw0KPiArICBJdGVtT2Zmc2V0TGlzdCA9IChVSU5UNjQgKikoRm1w Q2Fwc3VsZUhlYWRlciArIDEpOw0KPiArICBpZiAoRm1wQ2Fwc3VsZUhlYWRlci0+UGF5bG9hZEl0 ZW1Db3VudCA9PSAwKSB7DQo+ICsgICAgcmV0dXJuIE5VTEw7DQo+ICsgIH0NCj4gKyAgSW1hZ2VI ZWFkZXIgPSAoRUZJX0ZJUk1XQVJFX01BTkFHRU1FTlRfQ0FQU1VMRV9JTUFHRV9IRUFERVIgKiko KFVJTlQ4DQo+ICopRm1wQ2Fwc3VsZUhlYWRlciArIEl0ZW1PZmZzZXRMaXN0W0ZtcENhcHN1bGVI ZWFkZXItPkVtYmVkZGVkRHJpdmVyQ291bnRdKTsNCj4gKyAgcmV0dXJuICZJbWFnZUhlYWRlci0+ VXBkYXRlSW1hZ2VUeXBlSWQ7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBHZXQgRVNSVCBGd1R5 cGUgYWNjb3JkaW5nIHRvIEltYWdlVHlwZUlkDQo+ICsNCj4gKyAgQHBhcmFtICBJbWFnZVR5cGVJ ZCAgIEltYWdlVHlwZUlkIG9mIGFuIEZNUCBjYXBzdWxlLg0KPiArDQo+ICsgIEByZXR1cm4gRVNS VCBGd1R5cGUNCj4gKyoqLw0KPiArVUlOVDMyDQo+ICtHZXRFc3J0RndUeXBlKA0KPiArICBJTiAg RUZJX0dVSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpJbWFnZVR5cGVJ ZA0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgIFN0YXR1czsN Cj4gKyAgRUZJX1NZU1RFTV9SRVNPVVJDRV9UQUJMRSAgKkVzcnQ7DQo+ICsgIEVGSV9TWVNURU1f UkVTT1VSQ0VfRU5UUlkgICpFc3J0RW50cnk7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAg ICAgIEluZGV4Ow0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIENoZWNrIEVTUlQNCj4gKyAgLy8NCj4g KyAgU3RhdHVzID0gRWZpR2V0U3lzdGVtQ29uZmlndXJhdGlvblRhYmxlKCZnRWZpU3lzdGVtUmVz b3VyY2VUYWJsZUd1aWQsIChWT0lEDQo+ICoqKSZFc3J0KTsNCj4gKyAgaWYgKCFFRklfRVJST1Io U3RhdHVzKSkgew0KPiArICAgIEVzcnRFbnRyeSA9IChWT0lEICopKEVzcnQgKyAxKTsNCj4gKyAg ICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBFc3J0LT5Gd1Jlc291cmNlQ291bnQ7IEluZGV4Kyss IEVzcnRFbnRyeSsrKSB7DQo+ICsgICAgICBpZiAoQ29tcGFyZUd1aWQoJkVzcnRFbnRyeS0+RndD bGFzcywgSW1hZ2VUeXBlSWQpKSB7DQo+ICsgICAgICAgIHJldHVybiBFc3J0RW50cnktPkZ3VHlw ZTsNCj4gKyAgICAgIH0NCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gRVNSVF9G V19UWVBFX1VOS05PV047DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBBcHBlbmQgYSBjYXBzdWxl IGhlYWRlciBvbiB0b3Agb2YgY3VycmVudCBpbWFnZS4NCj4gKyAgVGhpcyBmdW5jdGlvbiBmb2xs b3dzIFdpbmRvd3MgVUVGSSBGaXJtd2FyZSBVcGRhdGUgUGxhdGZvcm0gZG9jdW1lbnQuDQo+ICsN Cj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBjYXBzdWxlIGhlYWRlciBp cyBhcHBlbmRlZC4NCj4gKyAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgIElucHV0IHBh cmFtZXRlciBpcyBub3QgdmFsaWQuDQo+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMg ICBObyBlbm91Z2ggcmVzb3VyY2UgdG8gYXBwZW5kIGNhcHN1bGUgaGVhZGVyLg0KPiArKiovDQo+ ICtFRklfU1RBVFVTDQo+ICtDcmVhdGVOZXN0ZWRGbXAoDQo+ICsgIFZPSUQNCj4gKyAgKQ0KPiAr ew0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKk91 dHB1dENhcHN1bGVOYW1lOw0KPiArICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKkNhcHN1bGVCdWZmZXI7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGaWxlU2l6ZTsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpDYXBzdWxlTmFtZTsNCj4gKyAgVUlOVDggICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpGdWxsQ2Fwc3VsZUJ1ZmZlcjsN Cj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bGxD YXBzdWxlQnVmZmVyU2l6ZTsNCj4gKyAgRUZJX0NBUFNVTEVfSEVBREVSICAgICAgICAgICAgICAg ICAgICAgICAgICAgICpOZXN0ZWRDYXBzdWxlSGVhZGVyOw0KPiArICBFRklfR1VJRCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkltYWdlVHlwZUlkOw0KPiArICBVSU5UMzIg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRndUeXBlOw0KPiArICBFRklf U1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArDQo+ ICsgIGlmIChBcmdjICE9IDUpIHsNCj4gKyAgICBQcmludChMIkNhcHN1bGVBcHA6IEludmFsaWQg UGFyYW1ldGVyLlxuIik7DQo+ICsgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gKyAgfQ0K PiArDQo+ICsgIGlmIChTdHJDbXAoQXJndlszXSwgTCItTyIpICE9IDApIHsNCj4gKyAgICBQcmlu dChMIkNhcHN1bGVBcHA6IE5PIG91dHB1dCBjYXBzdWxlIG5hbWUuXG4iKTsNCj4gKyAgICByZXR1 cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiArICB9DQo+ICsgIE91dHB1dENhcHN1bGVOYW1lID0gQXJn dls0XTsNCj4gKw0KPiArICBDYXBzdWxlQnVmZmVyID0gTlVMTDsNCj4gKyAgRmlsZVNpemUgPSAw Ow0KPiArICBGdWxsQ2Fwc3VsZUJ1ZmZlciA9IE5VTEw7DQo+ICsNCj4gKyAgQ2Fwc3VsZU5hbWUg PSBBcmd2WzJdOw0KPiArICBTdGF0dXMgPSBSZWFkRmlsZVRvQnVmZmVyKENhcHN1bGVOYW1lLCAm RmlsZVNpemUsICZDYXBzdWxlQnVmZmVyKTsNCj4gKyAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7 DQo+ICsgICAgUHJpbnQoTCJDYXBzdWxlQXBwOiBDYXBzdWxlIGltYWdlICglcykgaXMgbm90IGZv dW5kLlxuIiwgQ2Fwc3VsZU5hbWUpOw0KPiArICAgIGdvdG8gRG9uZTsNCj4gKyAgfQ0KPiArDQo+ ICsgIEltYWdlVHlwZUlkID0gR2V0Q2Fwc3VsZUltYWdlVHlwZUlkKENhcHN1bGVCdWZmZXIpOw0K PiArICBpZiAoSW1hZ2VUeXBlSWQgPT0gTlVMTCkgew0KPiArICAgIFByaW50KEwiQ2Fwc3VsZUFw cDogQ2Fwc3VsZSBJbWFnZVR5cGVJZCBpcyBub3QgZm91bmQuXG4iKTsNCj4gKyAgICBnb3RvIERv bmU7DQo+ICsgIH0NCj4gKyAgRndUeXBlID0gR2V0RXNydEZ3VHlwZShJbWFnZVR5cGVJZCk7DQo+ ICsgIGlmICgoRndUeXBlICE9IEVTUlRfRldfVFlQRV9TWVNURU1GSVJNV0FSRSkgJiYgKEZ3VHlw ZSAhPQ0KPiBFU1JUX0ZXX1RZUEVfREVWSUNFRklSTVdBUkUpKSB7DQo+ICsgICAgUHJpbnQoTCJD YXBzdWxlQXBwOiBDYXBzdWxlIEZ3VHlwZSBpcyBpbnZhbGlkLlxuIik7DQo+ICsgICAgZ290byBE b25lOw0KPiArICB9DQo+ICsNCj4gKyAgRnVsbENhcHN1bGVCdWZmZXJTaXplID0gTkVTVEVEX0NB UFNVTEVfSEVBREVSX1NJWkUgKyBGaWxlU2l6ZTsNCj4gKyAgRnVsbENhcHN1bGVCdWZmZXIgPSBB bGxvY2F0ZVBvb2woRnVsbENhcHN1bGVCdWZmZXJTaXplKTsNCj4gKyAgaWYgKEZ1bGxDYXBzdWxl QnVmZmVyID09IE5VTEwpIHsNCj4gKyAgICBQcmludChMIkNhcHN1bGVBcHA6IENhcHN1bGUgQnVm ZmVyIHNpemUgKDB4JXgpIHRvbyBiaWcuXG4iLA0KPiBGdWxsQ2Fwc3VsZUJ1ZmZlclNpemUpOw0K PiArICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiArICAgIGdvdG8gRG9uZTsN Cj4gKyAgfQ0KPiArDQo+ICsgIE5lc3RlZENhcHN1bGVIZWFkZXIgPSAoRUZJX0NBUFNVTEVfSEVB REVSICopRnVsbENhcHN1bGVCdWZmZXI7DQo+ICsgIFplcm9NZW0oTmVzdGVkQ2Fwc3VsZUhlYWRl ciwgTkVTVEVEX0NBUFNVTEVfSEVBREVSX1NJWkUpOw0KPiArICBDb3B5R3VpZCgmTmVzdGVkQ2Fw c3VsZUhlYWRlci0+Q2Fwc3VsZUd1aWQsIEltYWdlVHlwZUlkKTsNCj4gKyAgTmVzdGVkQ2Fwc3Vs ZUhlYWRlci0+SGVhZGVyU2l6ZSA9IE5FU1RFRF9DQVBTVUxFX0hFQURFUl9TSVpFOw0KPiArICBO ZXN0ZWRDYXBzdWxlSGVhZGVyLT5GbGFncyA9IChGd1R5cGUgPT0gRVNSVF9GV19UWVBFX0RFVklD RUZJUk1XQVJFKSA/DQo+IFNZU1RFTV9GSVJNV0FSRV9GTEFHIDogREVWSUNFX0ZJUk1XQVJFX0ZM QUc7DQo+ICsgIE5lc3RlZENhcHN1bGVIZWFkZXItPkNhcHN1bGVJbWFnZVNpemUgPSAoVUlOVDMy KUZ1bGxDYXBzdWxlQnVmZmVyU2l6ZTsNCj4gKw0KPiArICBDb3B5TWVtKChVSU5UOCAqKU5lc3Rl ZENhcHN1bGVIZWFkZXIgKyBOZXN0ZWRDYXBzdWxlSGVhZGVyLT5IZWFkZXJTaXplLA0KPiBDYXBz dWxlQnVmZmVyLCBGaWxlU2l6ZSk7DQo+ICsNCj4gKyAgU3RhdHVzID0gV3JpdGVGaWxlRnJvbUJ1 ZmZlcihPdXRwdXRDYXBzdWxlTmFtZSwgRnVsbENhcHN1bGVCdWZmZXJTaXplLA0KPiBGdWxsQ2Fw c3VsZUJ1ZmZlcik7DQo+ICsgIFByaW50KEwiQ2Fwc3VsZUFwcDogV3JpdGUgJXMgJXJcbiIsIE91 dHB1dENhcHN1bGVOYW1lLCBTdGF0dXMpOw0KPiArDQo+ICtEb25lOg0KPiArICBpZiAoQ2Fwc3Vs ZUJ1ZmZlciAhPSBOVUxMKSB7DQo+ICsgICAgRnJlZVBvb2woQ2Fwc3VsZUJ1ZmZlcik7DQo+ICsg IH0NCj4gKw0KPiArICBpZiAoRnVsbENhcHN1bGVCdWZmZXIgIT0gTlVMTCkgew0KPiArICAgIEZy ZWVQb29sKEZ1bGxDYXBzdWxlQnVmZmVyKTsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBTdGF0 dXM7DQo+ICt9DQo+ICsNCj4gKw0KPiArLyoqDQo+ICsgIENsZWFyIGNhcHN1bGUgc3RhdHVzIHZh cmlhYmxlLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgY2Fw c3VsZSBzdGF0dXMgdmFyaWFibGUgaXMgY2xlYXJlZC4NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0K PiArQ2xlYXJDYXBzdWxlU3RhdHVzVmFyaWFibGUoDQo+ICsgIFZPSUQNCj4gKyAgKQ0KPiArew0K PiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIFVJ TlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiArICBDSEFSMTYgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBDYXBzdWxlVmFyTmFtZVsyMF07DQo+ICsgIENIQVIx NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpUZW1wVmFyTmFtZTsNCj4gKw0KPiArICBT dHJDcHlTIChDYXBzdWxlVmFyTmFtZSwgc2l6ZW9mKENhcHN1bGVWYXJOYW1lKS9zaXplb2YoQ2Fw c3VsZVZhck5hbWVbMF0pLA0KPiBMIkNhcHN1bGUiKTsNCj4gKyAgVGVtcFZhck5hbWUgPSBDYXBz dWxlVmFyTmFtZSArIFN0ckxlbiAoQ2Fwc3VsZVZhck5hbWUpOw0KPiArICBJbmRleCA9IDA7DQo+ ICsNCj4gKyAgd2hpbGUgKFRSVUUpIHsNCj4gKyAgICBVbmljb2RlU1ByaW50IChUZW1wVmFyTmFt ZSwgNSAqIHNpemVvZihDSEFSMTYpLCBMIiUwNHgiLCBJbmRleCk7DQo+ICsNCj4gKyAgICBTdGF0 dXMgPSBnUlQtPlNldFZhcmlhYmxlICgNCj4gKyAgICAgICAgICAgICAgICAgICAgQ2Fwc3VsZVZh ck5hbWUsDQo+ICsgICAgICAgICAgICAgICAgICAgICZnRWZpQ2Fwc3VsZVJlcG9ydEd1aWQsDQo+ ICsgICAgICAgICAgICAgICAgICAgIEVGSV9WQVJJQUJMRV9OT05fVk9MQVRJTEUgfCBFRklfVkFS SUFCTEVfUlVOVElNRV9BQ0NFU1MgfA0KPiBFRklfVkFSSUFCTEVfQk9PVFNFUlZJQ0VfQUNDRVNT LA0KPiArICAgICAgICAgICAgICAgICAgICAwLA0KPiArICAgICAgICAgICAgICAgICAgICAoVk9J RCAqKU5VTEwNCj4gKyAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9S KFN0YXR1cykpIHsNCj4gKyAgICAgIC8vDQo+ICsgICAgICAvLyBUaGVyZSBpcyBubyBjYXBzdWxl IHZhcmlhYmxlcywgcXVpdA0KPiArICAgICAgLy8NCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIH0N Cj4gKw0KPiArICAgIEluZGV4Kys7DQo+ICsgICAgaWYgKEluZGV4ID4gMHhGRkZGKSB7DQo+ICsg ICAgICBicmVhazsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gRUZJX1NVQ0NF U1M7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBHZXQgdGhlIGFjdGl2ZSBVRUZJIHN5c3RlbSBw YXJ0aXRpb24gZnJvbSBib290b3B0aW9uIGxpc3QuDQo+ICsNCj4gKyAgQHBhcmFtW291dF0gRnMg ICAgU2ltcGxlIEZpbGUgU3lzdGVtIHByb3RvY29sIG9uIHRoZSBhY3RpdmUgVUVGSSBzeXN0ZW0g cGFydGl0aW9uDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgIGFjdGl2ZSBVRUZJIHN5 c3RlbSBwYXJ0aXRpb24gZm91bmQNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArR2V0RWZpU3lz UGFydGl0aW9uKA0KPiArICBPVVQgRUZJX1NJTVBMRV9GSUxFX1NZU1RFTV9QUk9UT0NPTCAqKkZz DQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgU3Rh dHVzOw0KPiArICBFRklfU0lNUExFX0ZJTEVfU1lTVEVNX1BST1RPQ09MICAqRnNUZW1wOw0KPiAr ICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb0hhbmRsZXM7DQo+ICsgIEVGSV9I QU5ETEUgICAgICAgICAgICAgICAgICAgICAgICpIYW5kbGVzOw0KPiArICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gKw0KPiArICBIYW5kbGVzID0gTlVMTDsNCj4g Kw0KPiArICAvLw0KPiArICAvLyBzZWFyY2ggZm9yIEVGSSBzeXN0ZW0gcGFydGl0aW9uIHByb3Rv Y29sIG9uIEJvb3Qgb3B0aW9uIGRldmljZSBwYXRoDQo+ICsgIC8vDQo+ICsgIFN0YXR1cyA9IGdC Uy0+TG9jYXRlSGFuZGxlQnVmZmVyKEJ5UHJvdG9jb2wsICZnRWZpUGFydFR5cGVTeXN0ZW1QYXJ0 R3VpZCwgTlVMTCwNCj4gJk5vSGFuZGxlcywgJkhhbmRsZXMpOw0KPiArICBpZiAoRUZJX0VSUk9S KFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgLy8N Cj4gKyAgLy8gU2tpcCBCb290T3B0aW9ucyB3aXRoaW4gRlYNCj4gKyAgLy8NCj4gKyAgZm9yIChJ bmRleCA9IDA7IEluZGV4IDwgTm9IYW5kbGVzOyBJbmRleCsrKSB7DQo+ICsgICAgU3RhdHVzID0g Z0JTLT5IYW5kbGVQcm90b2NvbCAoSGFuZGxlc1tJbmRleF0sICZnRWZpU2ltcGxlRmlsZVN5c3Rl bVByb3RvY29sR3VpZCwNCj4gKFZPSUQgKiopJkZzVGVtcCk7DQo+ICsgICAgaWYgKCFFRklfRVJS T1IgKFN0YXR1cykpew0KPiArICAgICAgKkZzID0gRnNUZW1wOw0KPiArICAgICAgYnJlYWs7DQo+ ICsgICAgfQ0KPiArICB9DQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0K PiArICBDb3B5IGEgbGlzdCBvZiBjYXBzdWxlIGltYWdlcyB0byB0aGUgYWN0aXZlIFVFRkkgc3lz dGVtIHBhcnRpdGlvbiBmcm9tIGJvb3RvcHRpb24NCj4gbGlzdC4NCj4gKw0KPiArICBAcGFyYW1b aW5dIENhcHN1bGVCdWZmZXIgICAgQW4gYXJyYXkgb2YgcG9pbnRlciB0byBjYXBzdWxlIGltYWdl cw0KPiArICBAcGFyYW1baW5dIEZpbGVTaXplICAgICAgICAgQW4gYXJyYXkgb2YgVUlOVE4gdG8g Y2Fwc3VsZSBpbWFnZXMgc2l6ZQ0KPiArICBAcGFyYW1baW5dIENhcHN1bGVOdW0gICAgICAgVGhl IGNvdW50IG9mIGNhcHN1bGUgaW1hZ2VzDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAg IENhcHN1bGUgaW1hZ2VzIGFyZSBjb3BpZWQgdG8gdGhlIGFjdGl2ZSBVRUZJIHN5c3RlbSBwYXJ0 aXRpb24NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArQ29weUNhcHN1bGVUb0FjdGl2ZUVmaVBh cnRpdGlvbigNCj4gKyAgSU4gVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgKipDYXBzdWxl QnVmZmVyLA0KPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAqRmlsZVNpemUs DQo+ICsgIElOIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIENhcHN1bGVOdW0NCj4gKyAg KQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ ICsgIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICpDYXBzdWxlTmFtZTsNCj4gKyAg VUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsgIEVGSV9TSU1QTEVf RklMRV9TWVNURU1fUFJPVE9DT0wgICpGczsNCj4gKyAgRUZJX0ZJTEVfSEFORExFICAgICAgICAg ICAgICAgICAgUm9vdERpcjsNCj4gKyAgRUZJX0ZJTEVfSEFORExFICAgICAgICAgICAgICAgICAg Q2Fwc3VsZURpcjsNCj4gKyAgRUZJX0ZJTEVfSEFORExFICAgICAgICAgICAgICAgICAgRGVzdEhh bmRsZTsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YVNpemU7DQo+ ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgICAgIE9zSW5kaWNhdGlvbjsNCj4gKw0K PiArICBSb290RGlyICAgICAgPSBOVUxMOw0KPiArICBDYXBzdWxlRGlyICAgPSBOVUxMOw0KPiAr DQo+ICsgIFN0YXR1cyA9IEdldEVmaVN5c1BhcnRpdGlvbigmRnMpOw0KPiArICBpZiAoRUZJX0VS Uk9SKFN0YXR1cykpIHsNCj4gKyAgICBQcmludCAoTCJDYW4gbm90IGZpbmQgYWN0aXZlIFVFRkkg U3lzdGVtIFBhcnRpdGlvblxuIik7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiAr DQo+ICsgIFN0YXR1cyA9IEZzLT5PcGVuVm9sdW1lKEZzLCAmUm9vdERpcik7DQo+ICsgIGlmIChF RklfRVJST1IoU3RhdHVzKSkgew0KPiArICAgIGdvdG8gRVhJVDsNCj4gKyAgfQ0KPiArDQo+ICsg IFN0YXR1cyA9IFJvb3REaXItPk9wZW4oDQo+ICsgICAgICAgICAgICAgICAgICAgICAgUm9vdERp ciwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAmQ2Fwc3VsZURpciwNCj4gKyAgICAgICAgICAg ICAgICAgICAgICBFRklfQ0FQU1VMRV9GUk9NX0ZJTEVfRElSLA0KPiArICAgICAgICAgICAgICAg ICAgICAgIEVGSV9GSUxFX01PREVfUkVBRCB8IEVGSV9GSUxFX01PREVfV1JJVEUgfCBFRklfRklM RV9NT0RFX0NSRUFURSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICBFRklfRklMRV9ESVJFQ1RP UlkNCj4gKyAgICAgICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SKFN0YXR1 cykpIHsNCj4gKyAgICBnb3RvIEVYSVQ7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBS ZWFkIHRoZSBpbnB1dCBmaWxlcy4NCj4gKyAgLy8NCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4 IDwgQ2Fwc3VsZU51bTsgSW5kZXgrKykgew0KPiArICAgIENhcHN1bGVOYW1lID0gQXJndltDYXBz dWxlRmlyc3RJbmRleCArIEluZGV4XTsNCj4gKyAgICBTdGF0dXMgPSBDYXBzdWxlRGlyLT5PcGVu KA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2Fwc3VsZURpciwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICZEZXN0SGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgQ2Fwc3VsZU5hbWUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBFRklfRklM RV9NT0RFX1JFQUQgfCBFRklfRklMRV9NT0RFX1dSSVRFIHwNCj4gRUZJX0ZJTEVfTU9ERV9DUkVB VEUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBFRklfRklMRV9BUkNISVZFDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIGlmIChFRklfRVJST1IoU3RhdHVz KSkgew0KPiArICAgICAgUHJpbnQoTCJDYXBzdWxlQXBwOiAlcyBvcGVuIGVycm9yIC0gJXJcbiIs IENhcHN1bGVOYW1lLCBTdGF0dXMpOw0KPiArICAgICAgY29udGludWU7DQo+ICsgICAgfQ0KPiAr DQo+ICsgICAgRGF0YVNpemUgPSBGaWxlU2l6ZVtJbmRleF07DQo+ICsgICAgU3RhdHVzID0gRGVz dEhhbmRsZS0+V3JpdGUoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXN0SGFuZGxl LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgJkRhdGFTaXplLA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgQ2Fwc3VsZUJ1ZmZlcltJbmRleF0NCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7DQo+ICsgICAgRGVzdEhhbmRsZS0+Q2xvc2UoRGVzdEhhbmRsZSk7DQo+ ICsgICAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgICBQcmludChMIkNhcHN1bGVB cHA6ICVzIHdyaXRlIGVycm9yIC0gJXIsIEZpbGVTaXplIC0gMHgleFxuIiwgQ2Fwc3VsZU5hbWUs DQo+IFN0YXR1cywgRmlsZVNpemVbSW5kZXhdKTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiAr ICBTdGF0dXMgPSBnUlQtPkdldFZhcmlhYmxlICgNCj4gKyAgICAgICAgICAgICAgICAgIEwiT3NJ bmRpY2F0aW9ucyIsDQo+ICsgICAgICAgICAgICAgICAgICAmZ0VmaUdsb2JhbFZhcmlhYmxlR3Vp ZCwNCj4gKyAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ICsgICAgICAgICAgICAgICAgICAmRGF0 YVNpemUsDQo+ICsgICAgICAgICAgICAgICAgICAoVk9JRCAqKSAmT3NJbmRpY2F0aW9uDQo+ICsg ICAgICAgICAgICAgICAgICApOw0KPiArDQo+ICsgIGlmIChFRklfRVJST1IoU3RhdHVzKSB8fCBE YXRhU2l6ZSAhPSBzaXplb2YoT3NJbmRpY2F0aW9uKSkgew0KPiArICAgIE9zSW5kaWNhdGlvbiA9 IDA7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBTZXQgT3NJbmRpY2F0aW9ucyBWYXJp YWJsZSBFRklfT1NfSU5ESUNBVElPTlNfRklMRV9DQVBTVUxFX0RFTElWRVJZX1NVUFBPUlRFRCBi aXQNCj4gKyAgLy8NCj4gKyAgT3NJbmRpY2F0aW9uIHw9IEVGSV9PU19JTkRJQ0FUSU9OU19GSUxF X0NBUFNVTEVfREVMSVZFUllfU1VQUE9SVEVEOw0KPiArICBTdGF0dXMgPSBnUlQtPlNldFZhcmlh YmxlICgNCj4gKyAgICAgICAgICAgICAgICAgIEwiT3NJbmRpY2F0aW9ucyIsDQo+ICsgICAgICAg ICAgICAgICAgICAmZ0VmaUdsb2JhbFZhcmlhYmxlR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAg IEVGSV9WQVJJQUJMRV9OT05fVk9MQVRJTEUgfCBFRklfVkFSSUFCTEVfUlVOVElNRV9BQ0NFU1Mg fA0KPiArICAgICAgICAgICAgICAgICAgRUZJX1ZBUklBQkxFX0JPT1RTRVJWSUNFX0FDQ0VTUywN Cj4gKyAgICAgICAgICAgICAgICAgIHNpemVvZihPc0luZGljYXRpb24pLA0KPiArICAgICAgICAg ICAgICAgICAgKFZPSUQgKikmT3NJbmRpY2F0aW9uDQo+ICsgICAgICAgICAgICAgICAgICApOw0K PiArDQo+ICsNCj4gK0VYSVQ6DQo+ICsgIGlmIChSb290RGlyICE9IE5VTEwpIHsNCj4gKyAgICBS b290RGlyLT5DbG9zZShSb290RGlyKTsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChDYXBzdWxlRGly ICE9IE5VTEwpIHsNCj4gKyAgICBDYXBzdWxlRGlyLT5DbG9zZShDYXBzdWxlRGlyKTsNCj4gKyAg fQ0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBCdWls ZCBHYXRoZXIgbGlzdCBmb3IgYSBsaXN0IG9mIGNhcHN1bGUgaW1hZ2VzLg0KPiArDQo+ICsgIEBw YXJhbVtpbl0gIENhcHN1bGVCdWZmZXIgICAgQW4gYXJyYXkgb2YgcG9pbnRlciB0byBjYXBzdWxl IGltYWdlcw0KPiArICBAcGFyYW1baW5dICBGaWxlU2l6ZSAgICAgICAgIEFuIGFycmF5IG9mIFVJ TlROIHRvIGNhcHN1bGUgaW1hZ2VzIHNpemUNCj4gKyAgQHBhcmFtW2luXSAgQ2Fwc3VsZU51bSAg ICAgICBUaGUgY291bnQgb2YgY2Fwc3VsZSBpbWFnZXMNCj4gKyAgQHBhcmFtW291dF0gQmxvY2tE ZXNjcmlwdG9ycyBUaGUgYmxvY2sgZGVzY3JpcHRvcnMgZm9yIHRoZSBjYXBzdWxlIGltYWdlcw0K PiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgVGhlIGJsb2NrIGRlc2NyaXB0b3JzIGZvciB0 aGUgY2Fwc3VsZSBpbWFnZXMgYXJlIGNvbnN0cnVjdGVkLg0KPiArKiovDQo+ICtFRklfU1RBVFVT DQo+ICtCdWlsZEdhdGhlckxpc3QoDQo+ICsgIElOIFZPSUQgICAgICAgICAgICAgICAgICAgICAg ICAgICoqQ2Fwc3VsZUJ1ZmZlciwNCj4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgICAgICAgICAg ICAgKkZpbGVTaXplLA0KPiArICBJTiBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBDYXBz dWxlTnVtLA0KPiArICBPVVQgRUZJX0NBUFNVTEVfQkxPQ0tfREVTQ1JJUFRPUiAqKkJsb2NrRGVz Y3JpcHRvcnMNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAg ICBTdGF0dXM7DQo+ICsgIEVGSV9DQVBTVUxFX0JMT0NLX0RFU0NSSVBUT1IgICpCbG9ja0Rlc2Ny aXB0b3JzMTsNCj4gKyAgRUZJX0NBUFNVTEVfQkxPQ0tfREVTQ1JJUFRPUiAgKkJsb2NrRGVzY3Jp cHRvcnMyOw0KPiArICBFRklfQ0FQU1VMRV9CTE9DS19ERVNDUklQVE9SICAqQmxvY2tEZXNjcmlw dG9yUHJlOw0KPiArICBFRklfQ0FQU1VMRV9CTE9DS19ERVNDUklQVE9SICAqQmxvY2tEZXNjcmlw dG9yc0hlYWRlcjsNCj4gKyAgRUZJX0NBUFNVTEVfQkxPQ0tfREVTQ1JJUFRPUiAgKlRlbXBCbG9j a1B0cjsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgKlRlbXBEYXRhUHRyOw0K PiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBTaXplTGVmdDsNCj4gKyAgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgICAgU2l6ZTsNCj4gKyAgSU5UMzIgICAgICAgICAgICAgICAg ICAgICAgICAgQ291bnQ7DQo+ICsgIElOVDMyICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJl cjsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsNCj4gKyAg VGVtcEJsb2NrUHRyICAgICAgICAgICA9IE5VTEw7DQo+ICsgIEJsb2NrRGVzY3JpcHRvcnMxICAg ICAgPSBOVUxMOw0KPiArICBCbG9ja0Rlc2NyaXB0b3JzMiAgICAgID0gTlVMTDsNCj4gKyAgQmxv Y2tEZXNjcmlwdG9yUHJlICAgICA9IE5VTEw7DQo+ICsgIEJsb2NrRGVzY3JpcHRvcnNIZWFkZXIg PSBOVUxMOw0KPiArDQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IENhcHN1bGVOdW07IElu ZGV4KyspIHsNCj4gKyAgICAvLw0KPiArICAgIC8vIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGRl c2NyaXB0b3JzLg0KPiArICAgIC8vDQo+ICsgICAgaWYgKE51bWJlck9mRGVzY3JpcHRvcnMgPT0g MSkgew0KPiArICAgICAgQ291bnQgPSAyOw0KPiArICAgIH0gZWxzZSB7DQo+ICsgICAgICBDb3Vu dCA9IChJTlQzMikoTnVtYmVyT2ZEZXNjcmlwdG9ycyArIDIpIC8gMjsNCj4gKyAgICB9DQo+ICsN Cj4gKyAgICBTaXplICAgICAgICAgICAgICAgPSBDb3VudCAqIHNpemVvZiAoRUZJX0NBUFNVTEVf QkxPQ0tfREVTQ1JJUFRPUik7DQo+ICsgICAgQmxvY2tEZXNjcmlwdG9yczEgID0gQWxsb2NhdGVS dW50aW1lWmVyb1Bvb2wgKFNpemUpOw0KPiArICAgIGlmIChCbG9ja0Rlc2NyaXB0b3JzMSA9PSBO VUxMKSB7DQo+ICsgICAgICBQcmludCAoTCJDYXBzdWxlQXBwOiBmYWlsZWQgdG8gYWxsb2NhdGUg bWVtb3J5IGZvciBkZXNjcmlwdG9yc1xuIik7DQo+ICsgICAgICBTdGF0dXMgPSBFRklfT1VUX09G X1JFU09VUkNFUzsNCj4gKyAgICAgIGdvdG8gRVJSRVhJVDsNCj4gKyAgICB9IGVsc2Ugew0KPiAr ICAgICAgUHJpbnQgKEwiQ2Fwc3VsZUFwcDogY3JlYXRpbmcgY2Fwc3VsZSBkZXNjcmlwdG9ycyBh dCAweCVYXG4iLCAoVUlOVE4pDQo+IEJsb2NrRGVzY3JpcHRvcnMxKTsNCj4gKyAgICAgIFByaW50 IChMIkNhcHN1bGVBcHA6IGNhcHN1bGUgZGF0YSBzdGFydHMgICAgICAgICAgYXQgMHglWCB3aXRo IHNpemUgMHglWFxuIiwNCj4gKFVJTlROKSBDYXBzdWxlQnVmZmVyLCBGaWxlU2l6ZSk7DQo+ICsg ICAgfQ0KPiArDQo+ICsgICAgLy8NCj4gKyAgICAvLyBSZWNvcmQgZGVzY2lycHRvciBoZWFkZXIN Cj4gKyAgICAvLw0KPiArICAgIGlmIChJbmRleCA9PSAwKSB7DQo+ICsgICAgICBCbG9ja0Rlc2Ny aXB0b3JzSGVhZGVyID0gQmxvY2tEZXNjcmlwdG9yczE7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAg aWYgKEJsb2NrRGVzY3JpcHRvclByZSAhPSBOVUxMKSB7DQo+ICsgICAgICBCbG9ja0Rlc2NyaXB0 b3JQcmUtPlVuaW9uLkNvbnRpbnVhdGlvblBvaW50ZXIgPSAoVUlOVE4pIEJsb2NrRGVzY3JpcHRv cnMxOw0KPiArICAgICAgQmxvY2tEZXNjcmlwdG9yUHJlLT5MZW5ndGggPSAwOw0KPiArICAgIH0N Cj4gKw0KPiArICAgIC8vDQo+ICsgICAgLy8gRmlsbCB0aGVtIGluDQo+ICsgICAgLy8NCj4gKyAg ICBUZW1wQmxvY2tQdHIgID0gQmxvY2tEZXNjcmlwdG9yczE7DQo+ICsgICAgVGVtcERhdGFQdHIg ICA9IENhcHN1bGVCdWZmZXJbSW5kZXhdOw0KPiArICAgIFNpemVMZWZ0ICAgICAgPSBGaWxlU2l6 ZVtJbmRleF07DQo+ICsgICAgZm9yIChOdW1iZXIgPSAwOyAoTnVtYmVyIDwgQ291bnQgLSAxKSAm JiAoU2l6ZUxlZnQgIT0gMCk7IE51bWJlcisrKSB7DQo+ICsgICAgICAvLw0KPiArICAgICAgLy8g RGl2aWRlIHJlbWFpbmluZyBkYXRhIGluIGhhbGYNCj4gKyAgICAgIC8vDQo+ICsgICAgICBpZiAo TnVtYmVyT2ZEZXNjcmlwdG9ycyAhPSAxKSB7DQo+ICsgICAgICAgIGlmIChTaXplTGVmdCA9PSAx KSB7DQo+ICsgICAgICAgICAgU2l6ZSA9IDE7DQo+ICsgICAgICAgIH0gZWxzZSB7DQo+ICsgICAg ICAgICAgU2l6ZSA9IFNpemVMZWZ0IC8gMjsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgfSBlbHNl IHsNCj4gKyAgICAgICAgU2l6ZSA9IFNpemVMZWZ0Ow0KPiArICAgICAgfQ0KPiArICAgICAgVGVt cEJsb2NrUHRyLT5Vbmlvbi5EYXRhQmxvY2sgICAgPSAoVUlOVE4pVGVtcERhdGFQdHI7DQo+ICsg ICAgICBUZW1wQmxvY2tQdHItPkxlbmd0aCAgPSBTaXplOw0KPiArICAgICAgUHJpbnQgKEwiQ2Fw c3VsZUFwcDogY2Fwc3VsZSBibG9jay9zaXplICAgICAgICAgICAgICAweCVYLzB4JVhcbiIsIChV SU5UTikNCj4gVGVtcERhdGFQdHIsIFNpemUpOw0KPiArICAgICAgU2l6ZUxlZnQgLT0gU2l6ZTsN Cj4gKyAgICAgIFRlbXBEYXRhUHRyICs9IFNpemU7DQo+ICsgICAgICBUZW1wQmxvY2tQdHIrKzsN Cj4gKyAgICB9DQo+ICsNCj4gKyAgICAvLw0KPiArICAgIC8vIEFsbG9jYXRlIHRoZSBzZWNvbmQg bGlzdCwgcG9pbnQgdGhlIGZpcnN0IGJsb2NrJ3MgbGFzdCBlbnRyeSB0byBwb2ludA0KPiArICAg IC8vIHRvIHRoaXMgb25lLCBhbmQgZmlsbCB0aGlzIG9uZSBpbi4gV29yc3QgY2FzZSBpcyB0aGF0 IHRoZSBwcmV2aW91cw0KPiArICAgIC8vIGxpc3Qgb25seSBoYWQgb25lIGVsZW1lbnQgdGhhdCBw b2ludGVkIGhlcmUsIHNvIHdlIG5lZWQgYXQgbGVhc3QgdHdvDQo+ICsgICAgLy8gZWxlbWVudHMg LS0gb25lIHRvIHBvaW50IHRvIGFsbCB0aGUgZGF0YSwgYW5vdGhlciB0byB0ZXJtaW5hdGUgdGhl IGxpc3QuDQo+ICsgICAgLy8NCj4gKyAgICBpZiAoKE51bWJlck9mRGVzY3JpcHRvcnMgIT0gMSkg JiYgKFNpemVMZWZ0ICE9IDApKSB7DQo+ICsgICAgICBDb3VudCA9IChJTlQzMikoTnVtYmVyT2ZE ZXNjcmlwdG9ycyArIDIpIC0gQ291bnQ7DQo+ICsgICAgICBpZiAoQ291bnQgPT0gMSkgew0KPiAr ICAgICAgICBDb3VudCsrOw0KPiArICAgICAgfQ0KPiArDQo+ICsgICAgICBTaXplICAgICAgICAg ICAgICA9IENvdW50ICogc2l6ZW9mIChFRklfQ0FQU1VMRV9CTE9DS19ERVNDUklQVE9SKTsNCj4g KyAgICAgIEJsb2NrRGVzY3JpcHRvcnMyID0gQWxsb2NhdGVSdW50aW1lWmVyb1Bvb2wgKFNpemUp Ow0KPiArICAgICAgaWYgKEJsb2NrRGVzY3JpcHRvcnMyID09IE5VTEwpIHsNCj4gKyAgICAgICAg UHJpbnQgKEwiQ2Fwc3VsZUFwcDogZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgZGVzY3Jp cHRvcnNcbiIpOw0KPiArICAgICAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4g KyAgICAgICAgZ290byBFUlJFWElUOw0KPiArICAgICAgfQ0KPiArDQo+ICsgICAgICAvLw0KPiAr ICAgICAgLy8gUG9pbnQgdGhlIGZpcnN0IGxpc3QncyBsYXN0IGVsZW1lbnQgdG8gcG9pbnQgdG8g dGhpcyBzZWNvbmQgbGlzdC4NCj4gKyAgICAgIC8vDQo+ICsgICAgICBUZW1wQmxvY2tQdHItPlVu aW9uLkNvbnRpbnVhdGlvblBvaW50ZXIgICA9IChVSU5UTikgQmxvY2tEZXNjcmlwdG9yczI7DQo+ ICsNCj4gKyAgICAgIFRlbXBCbG9ja1B0ci0+TGVuZ3RoICA9IDA7DQo+ICsgICAgICBUZW1wQmxv Y2tQdHIgPSBCbG9ja0Rlc2NyaXB0b3JzMjsNCj4gKyAgICAgIGZvciAoTnVtYmVyID0gMDsgTnVt YmVyIDwgQ291bnQgLSAxOyBOdW1iZXIrKykgew0KPiArICAgICAgICAvLw0KPiArICAgICAgICAv LyBJZiBzZWNvbmQtdG8tbGFzdCBvbmUsIHRoZW4gZHVtcCByZXN0IHRvIHRoaXMgZWxlbWVudA0K PiArICAgICAgICAvLw0KPiArICAgICAgICBpZiAoTnVtYmVyID09IChDb3VudCAtIDIpKSB7DQo+ ICsgICAgICAgICAgU2l6ZSA9IFNpemVMZWZ0Ow0KPiArICAgICAgICB9IGVsc2Ugew0KPiArICAg ICAgICAgIC8vDQo+ICsgICAgICAgICAgLy8gRGl2aWRlIHJlbWFpbmluZyBkYXRhIGluIGhhbGYN Cj4gKyAgICAgICAgICAvLw0KPiArICAgICAgICAgIGlmIChTaXplTGVmdCA9PSAxKSB7DQo+ICsg ICAgICAgICAgICBTaXplID0gMTsNCj4gKyAgICAgICAgICB9IGVsc2Ugew0KPiArICAgICAgICAg ICAgU2l6ZSA9IFNpemVMZWZ0IC8gMjsNCj4gKyAgICAgICAgICB9DQo+ICsgICAgICAgIH0NCj4g Kw0KPiArICAgICAgICBUZW1wQmxvY2tQdHItPlVuaW9uLkRhdGFCbG9jayAgICA9IChVSU5UTilU ZW1wRGF0YVB0cjsNCj4gKyAgICAgICAgVGVtcEJsb2NrUHRyLT5MZW5ndGggID0gU2l6ZTsNCj4g KyAgICAgICAgUHJpbnQgKEwiQ2Fwc3VsZUFwcDogY2Fwc3VsZSBibG9jay9zaXplICAgICAgICAg ICAgICAweCVYLzB4JVhcbiIsIChVSU5UTikNCj4gVGVtcERhdGFQdHIsIFNpemUpOw0KPiArICAg ICAgICBTaXplTGVmdCAtPSBTaXplOw0KPiArICAgICAgICBUZW1wRGF0YVB0ciArPSBTaXplOw0K PiArICAgICAgICBUZW1wQmxvY2tQdHIrKzsNCj4gKyAgICAgICAgaWYgKFNpemVMZWZ0ID09IDAp IHsNCj4gKyAgICAgICAgICBicmVhazsNCj4gKyAgICAgICAgfQ0KPiArICAgICAgfQ0KPiArICAg IH0NCj4gKw0KPiArICAgIEJsb2NrRGVzY3JpcHRvclByZSA9IFRlbXBCbG9ja1B0cjsNCj4gKyAg ICBCbG9ja0Rlc2NyaXB0b3JzMSAgPSBOVUxMOw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAg Ly8gTnVsbC10ZXJtaW5hdGUuDQo+ICsgIC8vDQo+ICsgIGlmIChUZW1wQmxvY2tQdHIgIT0gTlVM TCkgew0KPiArICAgIFRlbXBCbG9ja1B0ci0+VW5pb24uQ29udGludWF0aW9uUG9pbnRlciAgICA9 IChVSU5UTilOVUxMOw0KPiArICAgIFRlbXBCbG9ja1B0ci0+TGVuZ3RoICA9IDA7DQo+ICsgICAg KkJsb2NrRGVzY3JpcHRvcnMgPSBCbG9ja0Rlc2NyaXB0b3JzSGVhZGVyOw0KPiArICB9DQo+ICsN Cj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArDQo+ICtFUlJFWElUOg0KPiArICBpZiAoQmxv Y2tEZXNjcmlwdG9yczEgIT0gTlVMTCkgew0KPiArICAgIEZyZWVQb29sKEJsb2NrRGVzY3JpcHRv cnMxKTsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChCbG9ja0Rlc2NyaXB0b3JzMiAhPSBOVUxMKSB7 DQo+ICsgICAgRnJlZVBvb2woQmxvY2tEZXNjcmlwdG9yczIpOw0KPiArICB9DQo+ICsNCj4gKyAg cmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIENsZWFyIHRoZSBHYXRoZXIg bGlzdCBmb3IgYSBsaXN0IG9mIGNhcHN1bGUgaW1hZ2VzLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0g IEJsb2NrRGVzY3JpcHRvcnMgVGhlIGJsb2NrIGRlc2NyaXB0b3JzIGZvciB0aGUgY2Fwc3VsZSBp bWFnZXMNCj4gKyAgQHBhcmFtW2luXSAgQ2Fwc3VsZU51bSAgICAgICBUaGUgY291bnQgb2YgY2Fw c3VsZSBpbWFnZXMNCj4gKyoqLw0KPiArVk9JRA0KPiArQ2xlYW5HYXRoZXJMaXN0KA0KPiArICBJ TiBFRklfQ0FQU1VMRV9CTE9DS19ERVNDUklQVE9SICAgKkJsb2NrRGVzY3JpcHRvcnMsDQo+ICsg IElOIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICBDYXBzdWxlTnVtDQo+ICsgICkNCj4g K3sNCj4gKyAgRUZJX0NBUFNVTEVfQkxPQ0tfREVTQ1JJUFRPUiAgICpUZW1wQmxvY2tQdHI7DQo+ ICsgIEVGSV9DQVBTVUxFX0JMT0NLX0RFU0NSSVBUT1IgICAqVGVtcEJsb2NrUHRyMTsNCj4gKyAg RUZJX0NBUFNVTEVfQkxPQ0tfREVTQ1JJUFRPUiAgICpUZW1wQmxvY2tQdHIyOw0KPiArICBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsNCj4gKyAgaWYgKEJsb2NrRGVz Y3JpcHRvcnMgIT0gTlVMTCkgew0KPiArICAgIFRlbXBCbG9ja1B0cjEgPSBCbG9ja0Rlc2NyaXB0 b3JzOw0KPiArICAgIHdoaWxlICgxKXsNCj4gKyAgICAgIFRlbXBCbG9ja1B0ciA9IFRlbXBCbG9j a1B0cjE7DQo+ICsgICAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBDYXBzdWxlTnVtOyBJbmRl eCsrKSB7DQo+ICsgICAgICAgIGlmIChUZW1wQmxvY2tQdHJbSW5kZXhdLkxlbmd0aCA9PSAwKSB7 DQo+ICsgICAgICAgICAgYnJlYWs7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgIH0NCj4gKw0KPiAr ICAgICAgaWYgKFRlbXBCbG9ja1B0cltJbmRleF0uVW5pb24uQ29udGludWF0aW9uUG9pbnRlciA9 PSAoVUlOVE4pTlVMTCkgew0KPiArICAgICAgICBicmVhazsNCj4gKyAgICAgIH0NCj4gKw0KPiAr ICAgICAgVGVtcEJsb2NrUHRyMiA9IChWT0lEICopICgoVUlOVE4pIFRlbXBCbG9ja1B0ci0+VW5p b24uQ29udGludWF0aW9uUG9pbnRlcik7DQo+ICsgICAgICBGcmVlUG9vbChUZW1wQmxvY2tQdHIx KTsNCj4gKyAgICAgIFRlbXBCbG9ja1B0cjEgPSBUZW1wQmxvY2tQdHIyOw0KPiArICAgIH0NCj4g KyAgfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUHJpbnQgQVBQIHVzYWdlLg0KPiArKiovDQo+ ICtWT0lEDQo+ICtQcmludFVzYWdlICgNCj4gKyAgVk9JRA0KPiArICApDQo+ICt7DQo+ICsgIFBy aW50KEwiQ2Fwc3VsZUFwcDogIHVzYWdlXG4iKTsNCj4gKyAgUHJpbnQoTCIgIENhcHN1bGVBcHAg Wy1GXSA8Q2Fwc3VsZS4uLj4gWy1OUl1cbiIpOw0KPiArICBQcmludChMIiAgQ2Fwc3VsZUFwcCAt U1xuIik7DQo+ICsgIFByaW50KEwiICBDYXBzdWxlQXBwIC1DXG4iKTsNCj4gKyAgUHJpbnQoTCIg IENhcHN1bGVBcHAgLVBcbiIpOw0KPiArICBQcmludChMIiAgQ2Fwc3VsZUFwcCAtRVxuIik7DQo+ ICsgIFByaW50KEwiICBDYXBzdWxlQXBwIC1HIDxCTVA+IC1PIDxDYXBzdWxlPlxuIik7DQo+ICsg IFByaW50KEwiICBDYXBzdWxlQXBwIC1OIDxDYXBzdWxlPiAtTyA8TmVzdGVkQ2Fwc3VsZT5cbiIp Ow0KPiArICBQcmludChMIiAgQ2Fwc3VsZUFwcCAtRHwtRFMgPENhcHN1bGU+XG4iKTsNCj4gKyAg UHJpbnQoTCJQYXJhbWV0ZXI6XG4iKTsNCj4gKyAgUHJpbnQoTCIgIC1GOiAgUHV0IGNhcHN1bGUg ZmlsZSB0byBkaXNrLlxuIik7DQo+ICsgIFByaW50KEwiICAgICAgIE5vIC1GIG1lYW5zIHRvIHB1 dCBjYXBzdWxlIGZpbGUgaW4gbWVtb3J5LlxuIik7DQo+ICsgIFByaW50KEwiICAtTlI6IE5vIFJl c2V0LlxuIik7DQo+ICsgIFByaW50KEwiICAtUzogIER1bXAgY2Fwc3VsZSBzdGF0dXMuXG4iKTsN Cj4gKyAgUHJpbnQoTCIgIC1DOiAgQ2xlYXIgY2Fwc3VsZSBzdGF0dXMuXG4iKTsNCj4gKyAgUHJp bnQoTCIgIC1QOiAgRHVtcCBGTVAgcHJvdG9jb2wgaW5mby5cbiIpOw0KPiArICBQcmludChMIiAg LUU6ICBEdW1wIEVTUlQgdGFibGUgaW5mby5cbiIpOw0KPiArICBQcmludChMIiAgLUc6ICBJbnB1 dCBCTVAgZmlsZSBuYW1lXG4iKTsNCj4gKyAgUHJpbnQoTCIgIC1OOiAgQXBwZW5kIENhcHN1bGUg SGVhZGVyIGFjY3JvZGluZyB0byBXaW5kb3dzIEZpcm13YXJlIFVwZGF0ZVxuIik7DQo+ICsgIFBy aW50KEwiICAtTzogIE91dHB1dCBDYXBzdWxlIGZpbGUgbmFtZVxuIik7DQo+ICsgIFByaW50KEwi ICAtRDogIER1bXAgQ2Fwc3VsZVxuIik7DQo+ICsgIFByaW50KEwiICAtRFM6IER1bXAgQ2Fwc3Vs ZSB3aXRoIFN5c3RlbSBGTVAgZm9ybWF0XG4iKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFVw ZGF0ZSBDYXBzdWxlIGltYWdlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIEltYWdlSGFuZGxlICAg ICBUaGUgaW1hZ2UgaGFuZGxlLg0KPiArICBAcGFyYW1baW5dICBTeXN0ZW1UYWJsZSAgICAgVGhl IHN5c3RlbSB0YWJsZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAg Q29tbWFuZCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9JTlZBTElE X1BBUkFNRVRFUiAgQ29tbWFuZCB1c2FnZSBlcnJvci4NCj4gKyAgQHJldHZhbCBFRklfTk9UX0ZP VU5EICAgICAgICAgIFRoZSBpbnB1dCBmaWxlIGNhbid0IGJlIGZvdW5kLg0KPiArKiovDQo+ICtF RklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK1VlZmlNYWluICgNCj4gKyAgSU4gRUZJX0hBTkRMRSAg ICAgICAgSW1hZ2VIYW5kbGUsDQo+ICsgIElOIEVGSV9TWVNURU1fVEFCTEUgICpTeXN0ZW1UYWJs ZQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgIFN0YXR1 czsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgRmlsZVNpemVbTUFYX0NBUFNV TEVfTlVNXTsNCj4gKyAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgKkNhcHN1bGVCdWZm ZXJbTUFYX0NBUFNVTEVfTlVNXTsNCj4gKyAgRUZJX0NBUFNVTEVfQkxPQ0tfREVTQ1JJUFRPUiAg KkJsb2NrRGVzY3JpcHRvcnM7DQo+ICsgIEVGSV9DQVBTVUxFX0hFQURFUiAgICAgICAgICAgICAq Q2Fwc3VsZUhlYWRlckFycmF5W01BWF9DQVBTVUxFX05VTSArIDFdOw0KPiArICBVSU5UNjQgICAg ICAgICAgICAgICAgICAgICAgICAgTWF4Q2Fwc3VsZVNpemU7DQo+ICsgIEVGSV9SRVNFVF9UWVBF ICAgICAgICAgICAgICAgICBSZXNldFR5cGU7DQo+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAg ICAgICAgICBOZWVkUmVzZXQ7DQo+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICBO b1Jlc2V0Ow0KPiArICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgTmVlZENvcHlPbkRp c2s7DQo+ICsgIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICAqQ2Fwc3VsZU5hbWU7DQo+ ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICBDYXBzdWxlTnVtOw0KPiArICBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsNCj4gKyAgU3RhdHVzID0gR2V0 QXJnKCk7DQo+ICsgIGlmIChFRklfRVJST1IoU3RhdHVzKSkgew0KPiArICAgIFByaW50VXNhZ2Uo KTsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsgIGlmIChBcmdjIDwgMikgew0K PiArICAgIFByaW50VXNhZ2UoKTsNCj4gKyAgICBDbGVhbkFyZygpOw0KPiArICAgIHJldHVybiBF RklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgIH0NCj4gKyAgaWYgKChTdHJDbXAoQXJndlsxXSwg TCItRCIpID09IDApIHx8DQo+ICsgICAgICAoU3RyQ21wKEFyZ3ZbMV0sIEwiLURTIikgPT0gMCkp IHsNCj4gKyAgICBTdGF0dXMgPSBEdW1wQ2Fwc3VsZSgpOw0KPiArICAgIENsZWFuQXJnKCk7DQo+ ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArICBpZiAoU3RyQ21wKEFyZ3ZbMV0sIEwi LUciKSA9PSAwKSB7DQo+ICsgICAgU3RhdHVzID0gQ3JlYXRlQm1wRm1wKCk7DQo+ICsgICAgQ2xl YW5BcmcoKTsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsgIGlmIChTdHJDbXAo QXJndlsxXSwgTCItTiIpID09IDApIHsNCj4gKyAgICBTdGF0dXMgPSBDcmVhdGVOZXN0ZWRGbXAo KTsNCj4gKyAgICBDbGVhbkFyZygpOw0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4g KyAgaWYgKFN0ckNtcChBcmd2WzFdLCBMIi1TIikgPT0gMCkgew0KPiArICAgIFN0YXR1cyA9IERt cENhcHN1bGVTdGF0dXNWYXJpYWJsZSgpOw0KPiArICAgIENsZWFuQXJnKCk7DQo+ICsgICAgcmV0 dXJuIEVGSV9TVUNDRVNTOw0KPiArICB9DQo+ICsgIGlmIChTdHJDbXAoQXJndlsxXSwgTCItQyIp ID09IDApIHsNCj4gKyAgICBTdGF0dXMgPSBDbGVhckNhcHN1bGVTdGF0dXNWYXJpYWJsZSgpOw0K PiArICAgIENsZWFuQXJnKCk7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArICBp ZiAoU3RyQ21wKEFyZ3ZbMV0sIEwiLVAiKSA9PSAwKSB7DQo+ICsgICAgRHVtcEZtcERhdGEoKTsN Cj4gKyAgICBDbGVhbkFyZygpOw0KPiArICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gKyAgfQ0K PiArICBpZiAoU3RyQ21wKEFyZ3ZbMV0sIEwiLUUiKSA9PSAwKSB7DQo+ICsgICAgRHVtcEVzcnRE YXRhKCk7DQo+ICsgICAgQ2xlYW5BcmcoKTsNCj4gKyAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ ICsgIH0NCj4gKyAgaWYgKFN0ckNtcChBcmd2WzFdLCBMIi1GIikgPT0gMCkgew0KPiArICAgIE5l ZWRDb3B5T25EaXNrID0gVFJVRTsNCj4gKyAgICBDYXBzdWxlRmlyc3RJbmRleCA9IDI7DQo+ICsg IH0gZWxzZSB7DQo+ICsgICAgTmVlZENvcHlPbkRpc2sgPSBGQUxTRTsNCj4gKyAgICBDYXBzdWxl Rmlyc3RJbmRleCA9IDE7DQo+ICsgIH0NCj4gKyAgaWYgKFN0ckNtcChBcmd2W0FyZ2MgLSAxXSwg TCItTlIiKSA9PSAwKSB7DQo+ICsgICAgTm9SZXNldCA9IFRSVUU7DQo+ICsgICAgQ2Fwc3VsZUxh c3RJbmRleCA9IEFyZ2MgLSAyOw0KPiArICB9IGVsc2Ugew0KPiArICAgIE5vUmVzZXQgPSBGQUxT RTsNCj4gKyAgICBDYXBzdWxlTGFzdEluZGV4ID0gQXJnYyAtIDE7DQo+ICsgIH0NCj4gKyAgQ2Fw c3VsZU51bSA9IENhcHN1bGVMYXN0SW5kZXggLSBDYXBzdWxlRmlyc3RJbmRleCArIDE7DQo+ICsN Cj4gKyAgaWYgKENhcHN1bGVGaXJzdEluZGV4ID4gQ2Fwc3VsZUxhc3RJbmRleCkgew0KPiArICAg IFByaW50KEwiQ2Fwc3VsZUFwcDogTk8gY2Fwc3VsZSBpbWFnZS5cbiIpOw0KPiArICAgIENsZWFu QXJnKCk7DQo+ICsgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gKyAgfQ0KPiArICBpZiAo Q2Fwc3VsZU51bSA+IE1BWF9DQVBTVUxFX05VTSkgew0KPiArICAgIFByaW50KEwiQ2Fwc3VsZUFw cDogVG9vIG1hbnkgY2Fwc3VsZSBpbWFnZXMuXG4iKTsNCj4gKyAgICBDbGVhbkFyZygpOw0KPiAr ICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ICsgIH0NCj4gKw0KPiArICBaZXJvTWVtKCZD YXBzdWxlQnVmZmVyLCBzaXplb2YoQ2Fwc3VsZUJ1ZmZlcikpOw0KPiArICBaZXJvTWVtKCZGaWxl U2l6ZSwgc2l6ZW9mKEZpbGVTaXplKSk7DQo+ICsgIEJsb2NrRGVzY3JpcHRvcnMgPSBOVUxMOw0K PiArDQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IENhcHN1bGVOdW07IEluZGV4KyspIHsN Cj4gKyAgICBDYXBzdWxlTmFtZSA9IEFyZ3ZbQ2Fwc3VsZUZpcnN0SW5kZXggKyBJbmRleF07DQo+ ICsgICAgU3RhdHVzID0gUmVhZEZpbGVUb0J1ZmZlcihDYXBzdWxlTmFtZSwgJkZpbGVTaXplW0lu ZGV4XSwgJkNhcHN1bGVCdWZmZXJbSW5kZXhdKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SKFN0YXR1 cykpIHsNCj4gKyAgICAgIFByaW50KEwiQ2Fwc3VsZUFwcDogY2Fwc3VsZSBpbWFnZSAoJXMpIGlz IG5vdCBmb3VuZC5cbiIsIENhcHN1bGVOYW1lKTsNCj4gKyAgICAgIGdvdG8gRG9uZTsNCj4gKyAg ICB9DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoTmVlZENvcHlPbkRpc2spIHsNCj4gKyAgICBTdGF0 dXMgPSBDb3B5Q2Fwc3VsZVRvQWN0aXZlRWZpUGFydGl0aW9uKENhcHN1bGVCdWZmZXIsIEZpbGVT aXplLCBDYXBzdWxlTnVtKTsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICAvLw0KPiArICAgIC8vIEV2 ZXJ5IGNhcHN1bGUgdXNlIDIgZGVzY3JpcHRvciAxIGZvciBkYXRhIDEgZm9yIGVuZA0KPiArICAg IC8vDQo+ICsgICAgU3RhdHVzID0gQnVpbGRHYXRoZXJMaXN0KENhcHN1bGVCdWZmZXIsIEZpbGVT aXplLCBDYXBzdWxlTnVtLCAmQmxvY2tEZXNjcmlwdG9ycyk7DQo+ICsgIH0NCj4gKyAgaWYgKEVG SV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgZ290byBEb25lOw0KPiArICB9DQo+ICsNCj4gKyAg Ly8NCj4gKyAgLy8gQ2FsbCB0aGUgcnVudGltZSBzZXJ2aWNlIGNhcHN1bGUuDQo+ICsgIC8vDQo+ ICsgIE5lZWRSZXNldCA9IEZBTFNFOw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBDYXBz dWxlTnVtOyBJbmRleCsrKSB7DQo+ICsgICAgQ2Fwc3VsZUhlYWRlckFycmF5W0luZGV4XSA9IChF RklfQ0FQU1VMRV9IRUFERVIgKikgQ2Fwc3VsZUJ1ZmZlcltJbmRleF07DQo+ICsgICAgaWYgKChD YXBzdWxlSGVhZGVyQXJyYXlbSW5kZXhdLT5GbGFncyAmIENBUFNVTEVfRkxBR1NfUEVSU0lTVF9B Q1JPU1NfUkVTRVQpICE9IDApDQo+IHsNCj4gKyAgICAgIE5lZWRSZXNldCA9IFRSVUU7DQo+ICsg ICAgfQ0KPiArICB9DQo+ICsgIENhcHN1bGVIZWFkZXJBcnJheVtDYXBzdWxlTnVtXSA9IE5VTEw7 DQo+ICsgIGlmIChOb1Jlc2V0KSB7DQo+ICsgICAgTmVlZFJlc2V0ID0gRkFMU0U7DQo+ICsgIH0N Cj4gKw0KPiArICAvLw0KPiArICAvLyBJbnF1aXJlIHBsYXRmb3JtIGNhcGFiaWxpdHkgb2YgVXBk YXRlQ2Fwc3VsZS4NCj4gKyAgLy8NCj4gKyAgU3RhdHVzID0gZ1JULT5RdWVyeUNhcHN1bGVDYXBh YmlsaXRpZXMgKENhcHN1bGVIZWFkZXJBcnJheSwgQ2Fwc3VsZU51bSwNCj4gJk1heENhcHN1bGVT aXplLCAmUmVzZXRUeXBlKTsNCj4gKyAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAg UHJpbnQgKEwiQ2Fwc3VsZUFwcDogZmFpbGVkIHRvIHF1ZXJ5IGNhcHN1bGUgY2FwYWJpbGl0eSAt ICVyXG4iLCBTdGF0dXMpOw0KPiArICAgIGdvdG8gRG9uZTsNCj4gKyAgfQ0KPiArDQo+ICsgIGZv ciAoSW5kZXggPSAwOyBJbmRleCA8IENhcHN1bGVOdW07IEluZGV4KyspIHsNCj4gKyAgICBpZiAo RmlsZVNpemVbSW5kZXhdID4gTWF4Q2Fwc3VsZVNpemUpIHsNCj4gKyAgICAgIFByaW50IChMIkNh cHN1bGVBcHA6IGNhcHN1bGUgaXMgdG9vIGxhcmdlIHRvIHVwZGF0ZSwgJWxkIGlzIGFsbG93ZWRc biIsDQo+IE1heENhcHN1bGVTaXplKTsNCj4gKyAgICAgIFN0YXR1cyA9IEVGSV9VTlNVUFBPUlRF RDsNCj4gKyAgICAgIGdvdG8gRG9uZTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICAvLw0K PiArICAvLyBDaGVjayB3aGV0aGVyIHRoZSBpbnB1dCBjYXBzdWxlIGltYWdlIGhhcyB0aGUgZmxh ZyBvZiBwZXJzaXN0IGFjcm9zcyBzeXN0ZW0NCj4gcmVzZXQuDQo+ICsgIC8vDQo+ICsgIGlmIChO ZWVkUmVzZXQpIHsNCj4gKyAgICBTdGF0dXMgPSBnUlQtPlVwZGF0ZUNhcHN1bGUoQ2Fwc3VsZUhl YWRlckFycmF5LENhcHN1bGVOdW0sKFVJTlROKQ0KPiBCbG9ja0Rlc2NyaXB0b3JzKTsNCj4gKyAg ICBpZiAoU3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7DQo+ICsgICAgICBQcmludCAoTCJDYXBzdWxl QXBwOiBmYWlsZWQgdG8gdXBkYXRlIGNhcHN1bGUgLSAlclxuIiwgU3RhdHVzKTsNCj4gKyAgICAg IGdvdG8gRG9uZTsNCj4gKyAgICB9DQo+ICsgICAgLy8NCj4gKyAgICAvLyBGb3IgY2Fwc3VsZSB3 aG8gaGFzIHJlc2V0IGZsYWcsIGFmdGVyIGNhbGxpbmcgVXBkYXRlQ2Fwc3VsZSBzZXJ2aWNlLHRy aWdlciBhDQo+ICsgICAgLy8gc3lzdGVtIHJlc2V0IHRvIHByb2Nlc3MgY2Fwc3VsZSBwZXJzaXN0 IGFjcm9zcyBhIHN5c3RlbSByZXNldC4NCj4gKyAgICAvLw0KPiArICAgIGdSVC0+UmVzZXRTeXN0 ZW0gKFJlc2V0VHlwZSwgRUZJX1NVQ0NFU1MsIDAsIE5VTEwpOw0KPiArICB9IGVsc2Ugew0KPiAr ICAgIC8vDQo+ICsgICAgLy8gRm9yIGNhcHN1bGUgd2hvIGhhcyBubyByZXNldCBmbGFnLCBvbmx5 IGNhbGwgVXBkYXRlQ2Fwc3VsZSBTZXJ2aWNlIHdpdGhvdXQgYQ0KPiArICAgIC8vIHN5c3RlbSBy ZXNldC4gVGhlIHNlcnZpY2Ugd2lsbCBwcm9jZXNzIHRoZSBjYXBzdWxlIGltbWVkaWF0ZWx5Lg0K PiArICAgIC8vDQo+ICsgICAgU3RhdHVzID0gZ1JULT5VcGRhdGVDYXBzdWxlIChDYXBzdWxlSGVh ZGVyQXJyYXksQ2Fwc3VsZU51bSwoVUlOVE4pDQo+IEJsb2NrRGVzY3JpcHRvcnMpOw0KPiArICAg IGlmIChTdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHsNCj4gKyAgICAgIFByaW50IChMIkNhcHN1bGVB cHA6IGZhaWxlZCB0byB1cGRhdGUgY2Fwc3VsZSAtICVyXG4iLCBTdGF0dXMpOw0KPiArICAgIH0N Cj4gKyAgfQ0KPiArDQo+ICsgIFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KPiArDQo+ICtEb25lOg0K PiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBDYXBzdWxlTnVtOyBJbmRleCsrKSB7DQo+ICsg ICAgaWYgKENhcHN1bGVCdWZmZXJbSW5kZXhdICE9IE5VTEwpIHsNCj4gKyAgICAgIEZyZWVQb29s IChDYXBzdWxlQnVmZmVyW0luZGV4XSk7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgQ2xl YW5HYXRoZXJMaXN0KEJsb2NrRGVzY3JpcHRvcnMsIENhcHN1bGVOdW0pOw0KPiArICBDbGVhbkFy ZygpOw0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9NZGVN b2R1bGVQa2cvQXBwbGljYXRpb24vQ2Fwc3VsZUFwcC9DYXBzdWxlQXBwLmluZg0KPiBiL01kZU1v ZHVsZVBrZy9BcHBsaWNhdGlvbi9DYXBzdWxlQXBwL0NhcHN1bGVBcHAuaW5mDQo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAuLjdlZTQ0ZmMNCj4gLS0tIC9kZXYvbnVsbA0K PiArKysgYi9NZGVNb2R1bGVQa2cvQXBwbGljYXRpb24vQ2Fwc3VsZUFwcC9DYXBzdWxlQXBwLmlu Zg0KPiBAQCAtMCwwICsxLDcxIEBADQo+ICsjIyAgQGZpbGUNCj4gKyMgIEEgc2hlbGwgYXBwbGlj YXRpb24gdGhhdCB0cmlnZ2VycyBjYXBzdWxlIHVwZGF0ZSBwcm9jZXNzLg0KPiArIw0KPiArIyBU aGlzIGFwcGxpY2F0aW9uIGNhbiB0cmlnZ2VyIGNhcHN1bGUgdXBkYXRlIHByb2Nlc3MuIEl0IGNh biBhbHNvDQo+ICsjIGdlbmVyYXRlIGNhcHN1bGUgaW1hZ2UsIG9yIGR1bXAgY2Fwc3VsZSB2YXJp YWJsZSBpbmZvcm1hdGlvbi4NCj4gKyMNCj4gKyMgIENvcHlyaWdodCAoYykgMjAxNiwgSW50ZWwg Q29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArIyAgVGhpcyBwcm9ncmFt IGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPiArIyAgYXJlIGxpY2Vuc2VkIGFuZCBt YWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBM aWNlbnNlDQo+ICsjICB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBm dWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlIGZvdW5kIGF0DQo+ICsjICBodHRwOi8vb3Bl bnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+ICsjDQo+ICsjICBUSEUgUFJP R1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIiBC QVNJUywNCj4gKyMgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5Z IEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQuDQo+ICsjDQo+ICsjIw0KPiArDQo+ICtb RGVmaW5lc10NCj4gKyAgSU5GX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgID0gMHgwMDAxMDAw Ng0KPiArICBCQVNFX05BTUUgICAgICAgICAgICAgICAgICAgICAgPSBDYXBzdWxlQXBwDQo+ICsg IE1PRFVMRV9VTklfRklMRSAgICAgICAgICAgICAgICA9IENhcHN1bGVBcHAudW5pDQo+ICsgIEZJ TEVfR1VJRCAgICAgICAgICAgICAgICAgICAgICA9IDRDRUYzMURBLTg2ODItNDI3NC05Q0M0LUFF RTc1MTZBNUU3Qg0KPiArICBNT0RVTEVfVFlQRSAgICAgICAgICAgICAgICAgICAgPSBVRUZJX0FQ UExJQ0FUSU9ODQo+ICsgIFZFUlNJT05fU1RSSU5HICAgICAgICAgICAgICAgICA9IDEuMA0KPiAr ICBFTlRSWV9QT0lOVCAgICAgICAgICAgICAgICAgICAgPSBVZWZpTWFpbg0KPiArDQo+ICsjDQo+ ICsjIFRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gaXMgZm9yIHJlZmVyZW5jZSBvbmx5IGFuZCBu b3QgcmVxdWlyZWQgYnkgdGhlIGJ1aWxkIHRvb2xzLg0KPiArIw0KPiArIyAgVkFMSURfQVJDSElU RUNUVVJFUyAgICAgICAgICAgPSBJQTMyIFg2NA0KPiArIw0KPiArDQo+ICtbU291cmNlc10NCj4g KyAgQ2Fwc3VsZUFwcC5jDQo+ICsgIENhcHN1bGVEdW1wLmMNCj4gKyAgQXBwU3VwcG9ydC5jDQo+ ICsNCj4gK1tQYWNrYWdlc10NCj4gKyAgTWRlUGtnL01kZVBrZy5kZWMNCj4gKyAgTWRlTW9kdWxl UGtnL01kZU1vZHVsZVBrZy5kZWMNCj4gKw0KPiArW0d1aWRzXQ0KPiArICBnRWZpRmlsZUluZm9H dWlkDQo+ICsgIGdFZmlQYXJ0VHlwZVN5c3RlbVBhcnRHdWlkDQo+ICsgIGdFZmlHbG9iYWxWYXJp YWJsZUd1aWQNCj4gKyAgZ0VmaUNhcHN1bGVSZXBvcnRHdWlkDQo+ICsgIGdFZmlGbXBDYXBzdWxl R3VpZA0KPiArICBnV2luZG93c1V4Q2Fwc3VsZUd1aWQNCj4gKyAgZ0VmaUNlcnRUeXBlUnNhMjA0 OFNoYTI1Nkd1aWQNCj4gKyAgZ0VmaUNlcnRQa2NzN0d1aWQNCj4gKyAgZ0VmaVN5c3RlbVJlc291 cmNlVGFibGVHdWlkDQo+ICsNCj4gK1tQcm90b2NvbHNdDQo+ICsgIGdFZmlMb2FkZWRJbWFnZVBy b3RvY29sR3VpZA0KPiArICBnRWZpU2ltcGxlRmlsZVN5c3RlbVByb3RvY29sR3VpZA0KPiArICBn RWZpR3JhcGhpY3NPdXRwdXRQcm90b2NvbEd1aWQNCj4gKyAgZ0VmaUZpcm13YXJlTWFuYWdlbWVu dFByb3RvY29sR3VpZA0KPiArDQo+ICtbTGlicmFyeUNsYXNzZXNdDQo+ICsgIEJhc2VMaWINCj4g KyAgVWVmaUFwcGxpY2F0aW9uRW50cnlQb2ludA0KPiArICBEZWJ1Z0xpYg0KPiArICBNZW1vcnlB bGxvY2F0aW9uTGliDQo+ICsgIFVlZmlCb290U2VydmljZXNUYWJsZUxpYg0KPiArICBVZWZpUnVu dGltZVNlcnZpY2VzVGFibGVMaWINCj4gKyAgVWVmaUxpYg0KPiArICBQcmludExpYg0KPiArICBF ZGtpaVN5c3RlbUNhcHN1bGVMaWINCj4gKw0KPiArW1VzZXJFeHRlbnNpb25zLlRpYW5vQ29yZS4i RXh0cmFGaWxlcyJdDQo+ICsgIENhcHN1bGVBcHBFeHRyYS51bmkNCj4gZGlmZiAtLWdpdCBhL01k ZU1vZHVsZVBrZy9BcHBsaWNhdGlvbi9DYXBzdWxlQXBwL0NhcHN1bGVBcHAudW5pDQo+IGIvTWRl TW9kdWxlUGtnL0FwcGxpY2F0aW9uL0NhcHN1bGVBcHAvQ2Fwc3VsZUFwcC51bmkNCj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4uNTRkNmUxMg0KPiAtLS0gL2Rldi9udWxs DQo+ICsrKyBiL01kZU1vZHVsZVBrZy9BcHBsaWNhdGlvbi9DYXBzdWxlQXBwL0NhcHN1bGVBcHAu dW5pDQo+IEBAIC0wLDAgKzEsMjIgQEANCj4gKy8vIC8qKiBAZmlsZQ0KPiArLy8gQSBzaGVsbCBh cHBsaWNhdGlvbiB0aGF0IHRyaWdnZXJzIGNhcHN1bGUgdXBkYXRlIHByb2Nlc3MuDQo+ICsvLw0K PiArLy8gVGhpcyBhcHBsaWNhdGlvbiBjYW4gdHJpZ2dlciBjYXBzdWxlIHVwZGF0ZSBwcm9jZXNz LiBJdCBjYW4gYWxzbw0KPiArLy8gZ2VuZXJhdGUgY2Fwc3VsZSBpbWFnZSwgb3IgZHVtcCBjYXBz dWxlIHZhcmlhYmxlIGluZm9ybWF0aW9uLg0KPiArLy8NCj4gKy8vIENvcHlyaWdodCAoYykgMjAx NiwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArLy8NCj4g Ky8vIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4gKy8vIGFy ZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRp b25zIG9mIHRoZSBCU0QgTGljZW5zZQ0KPiArLy8gd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0 cmlidXRpb24uIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlIGZvdW5kIGF0DQo+ ICsvLyBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+ICsv LyBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4g IkFTIElTIiBCQVNJUywNCj4gKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElP TlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQuDQo+ICsvLw0KPiArLy8g KiovDQo+ICsNCj4gKw0KPiArI3N0cmluZyBTVFJfTU9EVUxFX0FCU1RSQUNUICAgICAgICAgICAg ICNsYW5ndWFnZSBlbi1VUyAiQSBzaGVsbCBhcHBsaWNhdGlvbiB0aGF0DQo+IHRyaWdnZXJzIGNh cHN1bGUgdXBkYXRlIHByb2Nlc3MuIg0KPiArDQo+ICsjc3RyaW5nIFNUUl9NT0RVTEVfREVTQ1JJ UFRJT04gICAgICAgICAgI2xhbmd1YWdlIGVuLVVTICJUaGlzIGFwcGxpY2F0aW9uIGNhbiB0cmln Z2VyDQo+IGNhcHN1bGUgdXBkYXRlIHByb2Nlc3MuIEl0IGNhbiBhbHNvIGdlbmVyYXRlIGNhcHN1 bGUgaW1hZ2UsIG9yIGR1bXAgY2Fwc3VsZSB2YXJpYWJsZQ0KPiBpbmZvcm1hdGlvbi4iDQo+ICsN Cj4gZGlmZiAtLWdpdCBhL01kZU1vZHVsZVBrZy9BcHBsaWNhdGlvbi9DYXBzdWxlQXBwL0NhcHN1 bGVBcHBFeHRyYS51bmkNCj4gYi9NZGVNb2R1bGVQa2cvQXBwbGljYXRpb24vQ2Fwc3VsZUFwcC9D YXBzdWxlQXBwRXh0cmEudW5pDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAw MDAuLmI1YTg4NDANCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9NZGVNb2R1bGVQa2cvQXBwbGlj YXRpb24vQ2Fwc3VsZUFwcC9DYXBzdWxlQXBwRXh0cmEudW5pDQo+IEBAIC0wLDAgKzEsMTkgQEAN Cj4gKy8vIC8qKiBAZmlsZQ0KPiArLy8gQ2Fwc3VsZUFwcCBMb2NhbGl6ZWQgU3RyaW5ncyBhbmQg Q29udGVudA0KPiArLy8NCj4gKy8vIENvcHlyaWdodCAoYykgMjAxNiwgSW50ZWwgQ29ycG9yYXRp b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiArLy8NCj4gKy8vIFRoaXMgcHJvZ3JhbSBh bmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4gKy8vIGFyZSBsaWNlbnNlZCBhbmQgbWFk ZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QgTGlj ZW5zZQ0KPiArLy8gd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uIFRoZSBmdWxs IHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlIGZvdW5kIGF0DQo+ICsvLyBodHRwOi8vb3BlbnNv dXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+ICsvLyBUSEUgUFJPR1JBTSBJUyBE SVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywNCj4g Ky8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJ VEhFUiBFWFBSRVNTIE9SIElNUExJRUQuDQo+ICsvLw0KPiArLy8gKiovDQo+ICsNCj4gKyNzdHJp bmcgU1RSX1BST1BFUlRJRVNfTU9EVUxFX05BTUUNCj4gKyNsYW5ndWFnZSBlbi1VUw0KPiArIkNh cHN1bGUgQXBwbGljYXRpb24iDQo+ICsNCj4gKw0KPiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtn L0FwcGxpY2F0aW9uL0NhcHN1bGVBcHAvQ2Fwc3VsZUR1bXAuYw0KPiBiL01kZU1vZHVsZVBrZy9B cHBsaWNhdGlvbi9DYXBzdWxlQXBwL0NhcHN1bGVEdW1wLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQNCj4gaW5kZXggMDAwMDAwMC4uYzU2ZjQxZg0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL01k ZU1vZHVsZVBrZy9BcHBsaWNhdGlvbi9DYXBzdWxlQXBwL0NhcHN1bGVEdW1wLmMNCj4gQEAgLTAs MCArMSw4NDAgQEANCj4gKy8qKiBAZmlsZQ0KPiArICBEdW1wIENhcHN1bGUgaW1hZ2UgaW5mb3Jt YXRpb24uDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAyMDE2LCBJbnRlbCBDb3Jwb3JhdGlvbi4g QWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29t cGFueWluZyBtYXRlcmlhbHMNCj4gKyAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1 bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlDQo+ICsgIHdo aWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUg bGljZW5zZSBtYXkgYmUgZm91bmQgYXQNCj4gKyAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vu c2VzL2JzZC1saWNlbnNlLnBocA0KPiArDQo+ICsgIFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVE IFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLA0KPiArICBXSVRIT1VU IFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVT UyBPUiBJTVBMSUVELg0KPiArDQo+ICsqKi8NCj4gKw0KPiArI2luY2x1ZGUgPFBpRHhlLmg+DQo+ ICsjaW5jbHVkZSA8TGlicmFyeS9CYXNlTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9EZWJ1 Z0xpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KPiArI2luY2x1 ZGUgPExpYnJhcnkvTWVtb3J5QWxsb2NhdGlvbkxpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkv VWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpUnVu dGltZVNlcnZpY2VzVGFibGVMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlMaWIuaD4N Cj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1ByaW50TGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9F ZGtpaVN5c3RlbUNhcHN1bGVMaWIuaD4NCj4gKyNpbmNsdWRlIDxQcm90b2NvbC9GaXJtd2FyZU1h bmFnZW1lbnQuaD4NCj4gKyNpbmNsdWRlIDxHdWlkL0ltYWdlQXV0aGVudGljYXRpb24uaD4NCj4g KyNpbmNsdWRlIDxHdWlkL0Vka2lpU3lzdGVtRm1wQ2Fwc3VsZS5oPg0KPiArI2luY2x1ZGUgPEd1 aWQvQ2Fwc3VsZVJlcG9ydC5oPg0KPiArI2luY2x1ZGUgPEd1aWQvU3lzdGVtUmVzb3VyY2VUYWJs ZS5oPg0KPiArI2luY2x1ZGUgPEd1aWQvRm1wQ2Fwc3VsZS5oPg0KPiArI2luY2x1ZGUgPEluZHVz dHJ5U3RhbmRhcmQvV2luZG93c1V4Q2Fwc3VsZS5oPg0KPiArDQo+ICsvKioNCj4gKyAgUmVhZCBh IGZpbGUuDQo+ICsNCj4gKyAgQHBhcmFtIEZpbGVOYW1lICAgICAgICBUaGUgZmlsZSB0byBiZSBy ZWFkLg0KPiArICBAcGFyYW0gQnVmZmVyU2l6ZSAgICAgIFRoZSBmaWxlIGJ1ZmZlciBzaXplDQo+ ICsgIEBwYXJhbSBCdWZmZXIgICAgICAgICAgVGhlIGZpbGUgYnVmZmVyDQo+ICsNCj4gKyAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICBSZWFkIGZpbGUgc3VjY2Vzc2Z1bGx5DQo+ICsgIEByZXR2YWwg RUZJX05PVF9GT1VORCAgRmlsZSBub3QgZm91bmQNCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiAr UmVhZEZpbGVUb0J1ZmZlcigNCj4gKyAgSU4gIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqRmlsZU5hbWUsDQo+ICsgIE9VVCBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKkJ1ZmZlclNpemUsDQo+ICsgIE9VVCBWT0lEICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKipCdWZmZXINCj4gKyAgKTsNCj4gKw0KPiArZXh0ZXJuIFVJTlROICBBcmdj Ow0KPiArZXh0ZXJuIENIQVIxNiAqQXJndltdOw0KPiArDQo+ICsvKioNCj4gKyAgRHVtcCBVWCBj YXBzdWxlIGluZm9ybWF0aW9uLg0KPiArDQo+ICsgIEBwYXJhbSBDYXBzdWxlSGVhZGVyICAgICAg VGhlIFVYIGNhcHN1bGUgaGVhZGVyDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK0R1bXBVeENhcHN1bGUo DQo+ICsgIElOIEVGSV9DQVBTVUxFX0hFQURFUiAgKkNhcHN1bGVIZWFkZXINCj4gKyAgKQ0KPiAr ew0KPiArICBFRklfRElTUExBWV9DQVBTVUxFICAgICAgICAgICAgICAgICAgICAgICAgICAgKkRp c3BsYXlDYXBzdWxlOw0KPiArICBEaXNwbGF5Q2Fwc3VsZSA9IChFRklfRElTUExBWV9DQVBTVUxF ICopQ2Fwc3VsZUhlYWRlcjsNCj4gKyAgUHJpbnQoTCJbVXhDYXB1c3VsZV1cbiIpOw0KPiArICBQ cmludChMIkNhcHN1bGVIZWFkZXI6XG4iKTsNCj4gKyAgUHJpbnQoTCIgIENhcHN1bGVHdWlkICAg ICAgLSAlZ1xuIiwgJkRpc3BsYXlDYXBzdWxlLT5DYXBzdWxlSGVhZGVyLkNhcHN1bGVHdWlkKTsN Cj4gKyAgUHJpbnQoTCIgIEhlYWRlclNpemUgICAgICAgLSAweCV4XG4iLCBEaXNwbGF5Q2Fwc3Vs ZS0+Q2Fwc3VsZUhlYWRlci5IZWFkZXJTaXplKTsNCj4gKyAgUHJpbnQoTCIgIEZsYWdzICAgICAg ICAgICAgLSAweCV4XG4iLCBEaXNwbGF5Q2Fwc3VsZS0+Q2Fwc3VsZUhlYWRlci5GbGFncyk7DQo+ ICsgIFByaW50KEwiICBDYXBzdWxlSW1hZ2VTaXplIC0gMHgleFxuIiwgRGlzcGxheUNhcHN1bGUt DQo+ID5DYXBzdWxlSGVhZGVyLkNhcHN1bGVJbWFnZVNpemUpOw0KPiArICBQcmludChMIkltYWdl UGF5bG9hZDpcbiIpOw0KPiArICBQcmludChMIiAgVmVyc2lvbiAgICAgICAgICAtIDB4JXhcbiIs IERpc3BsYXlDYXBzdWxlLT5JbWFnZVBheWxvYWQuVmVyc2lvbik7DQo+ICsgIFByaW50KEwiICBD aGVja3N1bSAgICAgICAgIC0gMHgleFxuIiwgRGlzcGxheUNhcHN1bGUtPkltYWdlUGF5bG9hZC5D aGVja3N1bSk7DQo+ICsgIFByaW50KEwiICBJbWFnZVR5cGUgICAgICAgIC0gMHgleFxuIiwgRGlz cGxheUNhcHN1bGUtPkltYWdlUGF5bG9hZC5JbWFnZVR5cGUpOw0KPiArICBQcmludChMIiAgTW9k ZSAgICAgICAgICAgICAtIDB4JXhcbiIsIERpc3BsYXlDYXBzdWxlLT5JbWFnZVBheWxvYWQuTW9k ZSk7DQo+ICsgIFByaW50KEwiICBPZmZzZXRYICAgICAgICAgIC0gMHgleFxuIiwgRGlzcGxheUNh cHN1bGUtPkltYWdlUGF5bG9hZC5PZmZzZXRYKTsNCj4gKyAgUHJpbnQoTCIgIE9mZnNldFkgICAg ICAgICAgLSAweCV4XG4iLCBEaXNwbGF5Q2Fwc3VsZS0+SW1hZ2VQYXlsb2FkLk9mZnNldFkpOw0K PiArfQ0KPiArDQo+ICsvKioNCj4gKyAgRHVtcCBGTVAgaW1hZ2UgYXV0aGVudGljYXRpb24gaW5m b3JtYXRpb24uDQo+ICsNCj4gKyAgQHBhcmFtIEltYWdlICAgICAgVGhlIEZNUCBjYXBzdWxlIGlt YWdlDQo+ICsgIEBwYXJhbSBJbWFnZVNpemUgIFRoZSBzaXplIG9mIHRoZSBGTVAgY2Fwc3VsZSBp bWFnZSBpbiBieXRlcy4NCj4gKw0KPiArICBAcmV0dXJuIHRoZSBzaXplIG9mIEZNUCBhdXRoZW50 aWNhdGlvbi4NCj4gKyoqLw0KPiArVUlOVE4NCj4gK0R1bXBJbWFnZUF1dGhlbnRpY2F0aW9uKA0K PiArICBJTiBWT0lEICAgKkltYWdlLA0KPiArICBJTiBVSU5UTiAgSW1hZ2VTaXplDQo+ICsgICkN Cj4gK3sNCj4gKyAgRUZJX0ZJUk1XQVJFX0lNQUdFX0FVVEhFTlRJQ0FUSU9OICAgICAgICAgICAg ICpJbWFnZUF1dGhlbnRpY2F0aW9uOw0KPiArDQo+ICsgIEltYWdlQXV0aGVudGljYXRpb24gPSBJ bWFnZTsNCj4gKyAgaWYgKENvbXBhcmVHdWlkKCZJbWFnZUF1dGhlbnRpY2F0aW9uLT5BdXRoSW5m by5DZXJ0VHlwZSwgJmdFZmlDZXJ0UGtjczdHdWlkKSB8fA0KPiArICAgICAgQ29tcGFyZUd1aWQo JkltYWdlQXV0aGVudGljYXRpb24tPkF1dGhJbmZvLkNlcnRUeXBlLA0KPiAmZ0VmaUNlcnRUeXBl UnNhMjA0OFNoYTI1Nkd1aWQpKSB7DQo+ICsgICAgUHJpbnQoTCJbSW1hZ2VBdXRoZW50aWNhdGlv bl1cbiIpOw0KPiArICAgIFByaW50KEwiICBNb25vdG9uaWNDb3VudCAgIC0gMHglbHhcbiIsIElt YWdlQXV0aGVudGljYXRpb24tPk1vbm90b25pY0NvdW50KTsNCj4gKyAgICBQcmludChMIldJTl9D RVJUSUZJQ0FURTpcbiIpOw0KPiArICAgIFByaW50KEwiICBkd0xlbmd0aCAgICAgICAgIC0gMHgl eFxuIiwgSW1hZ2VBdXRoZW50aWNhdGlvbi0+QXV0aEluZm8uSGRyLmR3TGVuZ3RoKTsNCj4gKyAg ICBQcmludChMIiAgd1JldmlzaW9uICAgICAgICAtIDB4JXhcbiIsIEltYWdlQXV0aGVudGljYXRp b24tDQo+ID5BdXRoSW5mby5IZHIud1JldmlzaW9uKTsNCj4gKyAgICBQcmludChMIiAgd0NlcnRp ZmljYXRlVHlwZSAtIDB4JXhcbiIsIEltYWdlQXV0aGVudGljYXRpb24tDQo+ID5BdXRoSW5mby5I ZHIud0NlcnRpZmljYXRlVHlwZSk7DQo+ICsgICAgUHJpbnQoTCIgIENlcnRUeXBlICAgICAgICAg LSAlZ1xuIiwgJkltYWdlQXV0aGVudGljYXRpb24tPkF1dGhJbmZvLkNlcnRUeXBlKTsNCj4gKyAg ICByZXR1cm4gc2l6ZW9mKEltYWdlQXV0aGVudGljYXRpb24tPk1vbm90b25pY0NvdW50KSArIElt YWdlQXV0aGVudGljYXRpb24tDQo+ID5BdXRoSW5mby5IZHIuZHdMZW5ndGg7DQo+ICsgIH0gZWxz ZSB7DQo+ICsgICAgcmV0dXJuIDA7DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIER1 bXAgRURLSUkgc3lzdGVtIEZNUCBjYXBzdWxlLg0KPiArDQo+ICsgIEBwYXJhbSBJbWFnZSAgICAg IFRoZSBFREtJSSBzeXN0ZW0gRk1QIGNhcHN1bGUuDQo+ICsgIEBwYXJhbSBJbWFnZVNpemUgIFRo ZSBzaXplIG9mIHRoZSBFREtJSSBzeXN0ZW0gRk1QIGNhcHN1bGUgaW4gYnl0ZXMuDQo+ICsqKi8N Cj4gK1ZPSUQNCj4gK0R1bXBFZGtpaVN5c3RlbUZtcENhcHN1bGUoDQo+ICsgIElOIFZPSUQgICAq SW1hZ2UsDQo+ICsgIElOIFVJTlROICBJbWFnZVNpemUNCj4gKyAgKQ0KPiArew0KPiArICBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2VPZmZzZXQ7DQo+ ICsgIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqQmlvc0lt YWdlOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Qmlvc0ltYWdlU2l6ZTsNCj4gKyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFJlc3VsdDsNCj4gKyAgRURLSUlfU1lTVEVNX0ZJUk1XQVJFX0lNQUdFX0RFU0NS SVBUT1IgICAgICAgICpUZW1wSW1hZ2VGbXBJbmZvOw0KPiArICBFREtJSV9TWVNURU1fRklSTVdB UkVfSU1BR0VfREVTQ1JJUFRPUiAgICAgICAgKkltYWdlRm1wSW5mbzsNCj4gKyAgVUlOVE4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlRm1wSW5mb1NpemU7DQo+ ICsNCj4gKyAgLy8NCj4gKyAgLy8gV2UgZG8gbm90IGtub3cgaWYgdGhlcmUgaXMgRUZJX0ZJUk1X QVJFX0lNQUdFX0FVVEhFTlRJQ0FUSU9OLg0KPiArICAvLyBzbyBqdXN0ICp0cnkqIHRvIHBhcnNl IGl0DQo+ICsgIC8vDQo+ICsgIEltYWdlT2Zmc2V0ID0gRHVtcEltYWdlQXV0aGVudGljYXRpb24o SW1hZ2UsIEltYWdlU2l6ZSk7DQo+ICsgIEltYWdlID0gKFVJTlQ4ICopSW1hZ2UgKyBJbWFnZU9m ZnNldDsNCj4gKyAgSW1hZ2VTaXplIC09IEltYWdlT2Zmc2V0Ow0KPiArICBQcmludChMIltJbWFn ZV1cbiIpOw0KPiArICBQcmludChMIiAgSW1hZ2VTaXplICAgLSAweCV4XG4iLCBJbWFnZVNpemUp Ow0KPiArDQo+ICsgIFJlc3VsdCA9IEV4dHJhY3RDb25maWdJbWFnZShJbWFnZSwgSW1hZ2VTaXpl LCAmQmlvc0ltYWdlLCAmQmlvc0ltYWdlU2l6ZSk7DQo+ICsgIGlmIChSZXN1bHQpIHsNCj4gKyAg ICBQcmludChMIiAgQ29uZmlnRmlsZVNpemUgIC0gMHgleFxuIiwgQmlvc0ltYWdlU2l6ZSk7DQo+ ICsgIH0NCj4gKyAgUmVzdWx0ID0gRXh0cmFjdERyaXZlckZ2SW1hZ2UoSW1hZ2UsIEltYWdlU2l6 ZSwgJkJpb3NJbWFnZSwgJkJpb3NJbWFnZVNpemUpOw0KPiArICBpZiAoUmVzdWx0KSB7DQo+ICsg ICAgUHJpbnQoTCIgIERyaXZlckZ2U2l6ZSAgICAtIDB4JXhcbiIsIEJpb3NJbWFnZVNpemUpOw0K PiArICB9DQo+ICsgIFJlc3VsdCA9IEV4dHJhY3RTeXN0ZW1GaXJtd2FyZUltYWdlKEltYWdlLCBJ bWFnZVNpemUsICZCaW9zSW1hZ2UsICZCaW9zSW1hZ2VTaXplKTsNCj4gKyAgaWYgKFJlc3VsdCkg ew0KPiArICAgIFByaW50KEwiICBCaW9zSW1hZ2VTaXplICAgLSAweCV4XG4iLCBCaW9zSW1hZ2VT aXplKTsNCj4gKyAgfQ0KPiArICBSZXN1bHQgPSBFeHRyYWN0U3lzdGVtRmlybXdhcmVJbWFnZUZt cEluZm8oQmlvc0ltYWdlLCBCaW9zSW1hZ2VTaXplLA0KPiAmVGVtcEltYWdlRm1wSW5mbywgJklt YWdlRm1wSW5mb1NpemUpOw0KPiArICBpZiAoUmVzdWx0KSB7DQo+ICsgICAgSW1hZ2VGbXBJbmZv ID0gQWxsb2NhdGVDb3B5UG9vbChJbWFnZUZtcEluZm9TaXplLCBUZW1wSW1hZ2VGbXBJbmZvKTsN Cj4gKyAgICBpZiAoSW1hZ2VGbXBJbmZvICE9IE5VTEwpIHsNCj4gKyAgICAgIFByaW50KEwiW0lt YWdlRm1wSW5mb11cbiIpOw0KPiArICAgICAgUHJpbnQoTCIgIFNpZ25hdHVyZSAgICAgICAgICAg ICAgICAgICAgICAtIDB4JXhcbiIsIEltYWdlRm1wSW5mby0+U2lnbmF0dXJlKTsNCj4gKyAgICAg IFByaW50KEwiICBIZWFkZXJMZW5ndGggICAgICAgICAgICAgICAgICAgLSAweCV4XG4iLCBJbWFn ZUZtcEluZm8tPkhlYWRlckxlbmd0aCk7DQo+ICsgICAgICBQcmludChMIiAgTGVuZ3RoICAgICAg ICAgICAgICAgICAgICAgICAgIC0gMHgleFxuIiwgSW1hZ2VGbXBJbmZvLT5MZW5ndGgpOw0KPiAr ICAgICAgUHJpbnQoTCIgIFBhY2thZ2VWZXJzaW9uICAgICAgICAgICAgICAgICAtIDB4JXhcbiIs IEltYWdlRm1wSW5mby0NCj4gPlBhY2thZ2VWZXJzaW9uKTsNCj4gKyAgICAgIFByaW50KEwiICBQ YWNrYWdlVmVyc2lvbk5hbWVTdHJpbmdPZmZzZXQgLSAweCV4XG4iLCBJbWFnZUZtcEluZm8tDQo+ ID5QYWNrYWdlVmVyc2lvbk5hbWVTdHJpbmdPZmZzZXQpOw0KPiArICAgICAgaWYgKEltYWdlRm1w SW5mby0+UGFja2FnZVZlcnNpb25OYW1lU3RyaW5nT2Zmc2V0ICE9IDApIHsNCj4gKyAgICAgICAg UHJpbnQoTCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtICVzXG4iLCAoVUlOVDgg KilJbWFnZUZtcEluZm8gKw0KPiBJbWFnZUZtcEluZm8tPlBhY2thZ2VWZXJzaW9uTmFtZVN0cmlu Z09mZnNldCk7DQo+ICsgICAgICB9DQo+ICsgICAgICBQcmludChMIiAgSW1hZ2VJbmRleCAgICAg ICAgICAgICAgICAgICAgIC0gMHgleFxuIiwgSW1hZ2VGbXBJbmZvLT5JbWFnZUluZGV4KTsNCj4g KyAgICAgIFByaW50KEwiICBJbWFnZVR5cGVJZCAgICAgICAgICAgICAgICAgICAgLSAlZ1xuIiwg JkltYWdlRm1wSW5mby0+SW1hZ2VUeXBlSWQpOw0KPiArICAgICAgUHJpbnQoTCIgIEltYWdlSWQg ICAgICAgICAgICAgICAgICAgICAgICAtIDB4JWx4XG4iLCBJbWFnZUZtcEluZm8tPkltYWdlSWQp Ow0KPiArICAgICAgUHJpbnQoTCIgIEltYWdlSWROYW1lU3RyaW5nT2Zmc2V0ICAgICAgICAtIDB4 JXhcbiIsIEltYWdlRm1wSW5mby0NCj4gPkltYWdlSWROYW1lU3RyaW5nT2Zmc2V0KTsNCj4gKyAg ICAgIGlmIChJbWFnZUZtcEluZm8tPkltYWdlSWROYW1lU3RyaW5nT2Zmc2V0ICE9IDApIHsNCj4g KyAgICAgICAgUHJpbnQoTCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtICVzXG4i LCAoVUlOVDggKilJbWFnZUZtcEluZm8gKw0KPiBJbWFnZUZtcEluZm8tPkltYWdlSWROYW1lU3Ry aW5nT2Zmc2V0KTsNCj4gKyAgICAgIH0NCj4gKyAgICAgIFByaW50KEwiICBWZXJzaW9uICAgICAg ICAgICAgICAgICAgICAgICAgLSAweCV4XG4iLCBJbWFnZUZtcEluZm8tPlZlcnNpb24pOw0KPiAr ICAgICAgUHJpbnQoTCIgIFZlcnNpb25OYW1lU3RyaW5nT2Zmc2V0ICAgICAgICAtIDB4JXhcbiIs IEltYWdlRm1wSW5mby0NCj4gPlZlcnNpb25OYW1lU3RyaW5nT2Zmc2V0KTsNCj4gKyAgICAgIGlm IChJbWFnZUZtcEluZm8tPlZlcnNpb25OYW1lU3RyaW5nT2Zmc2V0ICE9IDApIHsNCj4gKyAgICAg ICAgUHJpbnQoTCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtICVzXG4iLCAoVUlO VDggKilJbWFnZUZtcEluZm8gKw0KPiBJbWFnZUZtcEluZm8tPlZlcnNpb25OYW1lU3RyaW5nT2Zm c2V0KTsNCj4gKyAgICAgIH0NCj4gKyAgICAgIFByaW50KEwiICBTaXplICAgICAgICAgICAgICAg ICAgICAgICAgICAgLSAweCVseFxuIiwgSW1hZ2VGbXBJbmZvLT5TaXplKTsNCj4gKyAgICAgIFBy aW50KEwiICBBdHRyaWJ1dGVzU3VwcG9ydGVkICAgICAgICAgICAgLSAweCVseFxuIiwgSW1hZ2VG bXBJbmZvLQ0KPiA+QXR0cmlidXRlc1N1cHBvcnRlZCk7DQo+ICsgICAgICBQcmludChMIiAgQXR0 cmlidXRlc1NldHRpbmcgICAgICAgICAgICAgIC0gMHglbHhcbiIsIEltYWdlRm1wSW5mby0NCj4g PkF0dHJpYnV0ZXNTZXR0aW5nKTsNCj4gKyAgICAgIFByaW50KEwiICBDb21wYXRpYmlsaXRpZXMg ICAgICAgICAgICAgICAgLSAweCVseFxuIiwgSW1hZ2VGbXBJbmZvLQ0KPiA+Q29tcGF0aWJpbGl0 aWVzKTsNCj4gKyAgICAgIFByaW50KEwiICBMb3dlc3RTdXBwb3J0ZWRJbWFnZVZlcnNpb24gICAg LSAweCV4XG4iLCBJbWFnZUZtcEluZm8tDQo+ID5Mb3dlc3RTdXBwb3J0ZWRJbWFnZVZlcnNpb24p Ow0KPiArICAgICAgUHJpbnQoTCIgIExhc3RBdHRlbXB0VmVyc2lvbiAgICAgICAgICAgICAtIDB4 JXhcbiIsIEltYWdlRm1wSW5mby0NCj4gPkxhc3RBdHRlbXB0VmVyc2lvbik7DQo+ICsgICAgICBQ cmludChMIiAgTGFzdEF0dGVtcHRTdGF0dXMgICAgICAgICAgICAgIC0gMHgleFxuIiwgSW1hZ2VG bXBJbmZvLQ0KPiA+TGFzdEF0dGVtcHRTdGF0dXMpOw0KPiArICAgICAgUHJpbnQoTCIgIEhhcmR3 YXJlSW5zdGFuY2UgICAgICAgICAgICAgICAtIDB4JWx4XG4iLCBJbWFnZUZtcEluZm8tDQo+ID5I YXJkd2FyZUluc3RhbmNlKTsNCj4gKyAgICAgIFByaW50KEwiICBWZXJzaW9uICAgICAgICAgICAg ICAgICAgICAgICAgLSAweCV4XG4iLCBJbWFnZUZtcEluZm8tPlZlcnNpb24pOw0KPiArICAgICAg RnJlZVBvb2woSW1hZ2VGbXBJbmZvKTsNCj4gKyAgICB9DQo+ICsgIH0NCj4gK30NCj4gKw0KPiAr LyoqDQo+ICsgIER1bXAgYSBub24tbmVzdGVkIEZNUCBjYXBzdWxlLg0KPiArDQo+ICsgIEBwYXJh bSAgQ2Fwc3VsZUhlYWRlciAgQSBwb2ludGVyIHRvIENhcHN1bGVIZWFkZXINCj4gKyAgQHBhcmFt ICBJc1N5c3RlbUZtcCAgICBJZiBpdCBpcyBhIHN5c3RlbSBGTVANCj4gKyoqLw0KPiArVk9JRA0K PiArRHVtcEZtcENhcHN1bGUoDQo+ICsgIElOIEVGSV9DQVBTVUxFX0hFQURFUiAgKkNhcHN1bGVI ZWFkZXIsDQo+ICsgIElOIEJPT0xFQU4gICAgICAgICAgICAgSXNTeXN0ZW1GbXANCj4gKyAgKQ0K PiArew0KPiArICBFRklfRklSTVdBUkVfTUFOQUdFTUVOVF9DQVBTVUxFX0hFQURFUiAgICAgICAg KkZtcENhcHN1bGVIZWFkZXI7DQo+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqSXRlbU9mZnNldExpc3Q7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gKyAgVUlOVE4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvdW50Ow0KPiArICBFRklfRklSTVdBUkVfTUFO QUdFTUVOVF9DQVBTVUxFX0lNQUdFX0hFQURFUiAgKkZtcEltYWdlSGVhZGVyOw0KPiArICBWT0lE ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkltYWdlOw0KPiArDQo+ ICsgIFByaW50KEwiW0ZtcENhcHVzdWxlXVxuIik7DQo+ICsgIFByaW50KEwiQ2Fwc3VsZUhlYWRl cjpcbiIpOw0KPiArICBQcmludChMIiAgQ2Fwc3VsZUd1aWQgICAgICAtICVnXG4iLCAmQ2Fwc3Vs ZUhlYWRlci0+Q2Fwc3VsZUd1aWQpOw0KPiArICBQcmludChMIiAgSGVhZGVyU2l6ZSAgICAgICAt IDB4JXhcbiIsIENhcHN1bGVIZWFkZXItPkhlYWRlclNpemUpOw0KPiArICBQcmludChMIiAgRmxh Z3MgICAgICAgICAgICAtIDB4JXhcbiIsIENhcHN1bGVIZWFkZXItPkZsYWdzKTsNCj4gKyAgUHJp bnQoTCIgIENhcHN1bGVJbWFnZVNpemUgLSAweCV4XG4iLCBDYXBzdWxlSGVhZGVyLT5DYXBzdWxl SW1hZ2VTaXplKTsNCj4gKw0KPiArICBGbXBDYXBzdWxlSGVhZGVyID0gKEVGSV9GSVJNV0FSRV9N QU5BR0VNRU5UX0NBUFNVTEVfSEVBREVSICopKChVSU5UOCAqKUNhcHN1bGVIZWFkZXINCj4gKyBD YXBzdWxlSGVhZGVyLT5IZWFkZXJTaXplKTsNCj4gKyAgSXRlbU9mZnNldExpc3QgPSAoVUlOVDY0 ICopKEZtcENhcHN1bGVIZWFkZXIgKyAxKTsNCj4gKyAgUHJpbnQoTCJGbXBIZWFkZXI6XG4iKTsN Cj4gKyAgUHJpbnQoTCIgIFZlcnNpb24gICAgICAgICAgICAgLSAweCV4XG4iLCBGbXBDYXBzdWxl SGVhZGVyLT5WZXJzaW9uKTsNCj4gKyAgUHJpbnQoTCIgIEVtYmVkZGVkRHJpdmVyQ291bnQgLSAw eCV4XG4iLCBGbXBDYXBzdWxlSGVhZGVyLT5FbWJlZGRlZERyaXZlckNvdW50KTsNCj4gKyAgUHJp bnQoTCIgIFBheWxvYWRJdGVtQ291bnQgICAgLSAweCV4XG4iLCBGbXBDYXBzdWxlSGVhZGVyLT5Q YXlsb2FkSXRlbUNvdW50KTsNCj4gKyAgQ291bnQgPSBGbXBDYXBzdWxlSGVhZGVyLT5FbWJlZGRl ZERyaXZlckNvdW50ICsgRm1wQ2Fwc3VsZUhlYWRlci0+UGF5bG9hZEl0ZW1Db3VudDsNCj4gKyAg Zm9yIChJbmRleCA9IDA7IEluZGV4IDwgQ291bnQ7IEluZGV4KyspIHsNCj4gKyAgICBQcmludChM IiAgT2Zmc2V0WyVkXSAgICAgICAgICAgLSAweCV4XG4iLCBJbmRleCwgSXRlbU9mZnNldExpc3Rb SW5kZXhdKTsNCj4gKyAgfQ0KPiArDQo+ICsgIGZvciAoSW5kZXggPSBGbXBDYXBzdWxlSGVhZGVy LT5FbWJlZGRlZERyaXZlckNvdW50OyBJbmRleCA8IENvdW50OyBJbmRleCsrKSB7DQo+ICsgICAg UHJpbnQoTCJGbXBQYXlsb2FkWyVkXSBJbWFnZUhlYWRlcjpcbiIsIEluZGV4KTsNCj4gKyAgICBG bXBJbWFnZUhlYWRlciA9IChFRklfRklSTVdBUkVfTUFOQUdFTUVOVF9DQVBTVUxFX0lNQUdFX0hF QURFUiAqKSgoVUlOVDgNCj4gKilGbXBDYXBzdWxlSGVhZGVyICsgSXRlbU9mZnNldExpc3RbSW5k ZXhdKTsNCj4gKyAgICBQcmludChMIiAgVmVyc2lvbiAgICAgICAgICAgICAgICAtIDB4JXhcbiIs IEZtcEltYWdlSGVhZGVyLT5WZXJzaW9uKTsNCj4gKyAgICBQcmludChMIiAgVXBkYXRlSW1hZ2VU eXBlSWQgICAgICAtICVnXG4iLCAmRm1wSW1hZ2VIZWFkZXItPlVwZGF0ZUltYWdlVHlwZUlkKTsN Cj4gKyAgICBQcmludChMIiAgVXBkYXRlSW1hZ2VJbmRleCAgICAgICAtIDB4JXhcbiIsIEZtcElt YWdlSGVhZGVyLT5VcGRhdGVJbWFnZUluZGV4KTsNCj4gKyAgICBQcmludChMIiAgVXBkYXRlSW1h Z2VTaXplICAgICAgICAtIDB4JXhcbiIsIEZtcEltYWdlSGVhZGVyLT5VcGRhdGVJbWFnZVNpemUp Ow0KPiArICAgIFByaW50KEwiICBVcGRhdGVWZW5kb3JDb2RlU2l6ZSAgIC0gMHgleFxuIiwgRm1w SW1hZ2VIZWFkZXItPlVwZGF0ZVZlbmRvckNvZGVTaXplKTsNCj4gKyAgICBpZiAoRm1wSW1hZ2VI ZWFkZXItPlZlcnNpb24gPj0NCj4gRUZJX0ZJUk1XQVJFX01BTkFHRU1FTlRfQ0FQU1VMRV9JTUFH RV9IRUFERVJfSU5JVF9WRVJTSU9OKSB7DQo+ICsgICAgICBQcmludChMIiAgVXBkYXRlSGFyZHdh cmVJbnN0YW5jZSAtIDB4JWx4XG4iLCBGbXBJbWFnZUhlYWRlci0NCj4gPlVwZGF0ZUhhcmR3YXJl SW5zdGFuY2UpOw0KPiArICAgIH0NCj4gKyAgICBpZiAoRm1wSW1hZ2VIZWFkZXItPlZlcnNpb24g Pj0NCj4gRUZJX0ZJUk1XQVJFX01BTkFHRU1FTlRfQ0FQU1VMRV9JTUFHRV9IRUFERVJfSU5JVF9W RVJTSU9OKSB7DQo+ICsgICAgICBJbWFnZSA9IChVSU5UOCAqKShGbXBJbWFnZUhlYWRlciArIDEp Ow0KPiArICAgIH0gIGVsc2Ugew0KPiArICAgICAgSW1hZ2UgPSAoVUlOVDggKilGbXBJbWFnZUhl YWRlciArDQo+IE9GRlNFVF9PRihFRklfRklSTVdBUkVfTUFOQUdFTUVOVF9DQVBTVUxFX0lNQUdF X0hFQURFUiwgVXBkYXRlSGFyZHdhcmVJbnN0YW5jZSk7DQo+ICsgICAgfQ0KPiArICAgIGlmIChJ c1N5c3RlbUZtcCkgew0KPiArICAgICAgRHVtcEVka2lpU3lzdGVtRm1wQ2Fwc3VsZShJbWFnZSwg Rm1wSW1hZ2VIZWFkZXItPlVwZGF0ZUltYWdlU2l6ZSk7DQo+ICsgICAgfQ0KPiArICB9DQo+ICt9 DQo+ICsNCj4gKy8qKg0KPiArICBSZXR1cm4gaWYgdGhlcmUgaXMgYSBGTVAgaGVhZGVyIGJlbG93 IGNhcHN1bGUgaGVhZGVyLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gQ2Fwc3VsZUhlYWRlciBBIHBv aW50ZXIgdG8gRUZJX0NBUFNVTEVfSEVBREVSDQo+ICsNCj4gKyAgQHJldHZhbCBUUlVFICBUaGVy ZSBpcyBhIEZNUCBoZWFkZXIgYmVsb3cgY2Fwc3VsZSBoZWFkZXIuDQo+ICsgIEByZXR2YWwgRkFM U0UgVGhlcmUgaXMgbm90IGEgRk1QIGhlYWRlciBiZWxvdyBjYXBzdWxlIGhlYWRlcg0KPiArKiov DQo+ICtCT09MRUFODQo+ICtJc05lc3RlZEZtcENhcHN1bGUoDQo+ICsgIElOIEVGSV9DQVBTVUxF X0hFQURFUiAgICAgICAgICpDYXBzdWxlSGVhZGVyDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NU QVRVUyAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBFRklfU1lTVEVNX1JFU09VUkNFX1RB QkxFICAqRXNydDsNCj4gKyAgRUZJX1NZU1RFTV9SRVNPVVJDRV9FTlRSWSAgKkVzcnRFbnRyeTsN Cj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsgIEJPT0xFQU4gICAg ICAgICAgICAgICAgICAgIEVzcnRHdWlkRm91bmQ7DQo+ICsgIEVGSV9DQVBTVUxFX0hFQURFUiAg ICAgICAgICpOZXN0ZWRDYXBzdWxlSGVhZGVyOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAg ICAgICBOZXN0ZWRDYXBzdWxlU2l6ZTsNCj4gKw0KPiArICAvLw0KPiArICAvLyBDaGVjayBFU1JU DQo+ICsgIC8vDQo+ICsgIEVzcnRHdWlkRm91bmQgPSBGQUxTRTsNCj4gKyAgU3RhdHVzID0gRWZp R2V0U3lzdGVtQ29uZmlndXJhdGlvblRhYmxlKCZnRWZpU3lzdGVtUmVzb3VyY2VUYWJsZUd1aWQs IChWT0lEDQo+ICoqKSZFc3J0KTsNCj4gKyAgaWYgKCFFRklfRVJST1IoU3RhdHVzKSkgew0KPiAr ICAgIEVzcnRFbnRyeSA9IChWT0lEICopKEVzcnQgKyAxKTsNCj4gKyAgICBmb3IgKEluZGV4ID0g MDsgSW5kZXggPCBFc3J0LT5Gd1Jlc291cmNlQ291bnQ7IEluZGV4KyssIEVzcnRFbnRyeSsrKSB7 DQo+ICsgICAgICBpZiAoQ29tcGFyZUd1aWQoJkVzcnRFbnRyeS0+RndDbGFzcywgJkNhcHN1bGVI ZWFkZXItPkNhcHN1bGVHdWlkKSkgew0KPiArICAgICAgICBFc3J0R3VpZEZvdW5kID0gVFJVRTsN Cj4gKyAgICAgICAgYnJlYWs7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4g KyAgaWYgKCFFc3J0R3VpZEZvdW5kKSB7DQo+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiArICB9DQo+ ICsNCj4gKyAgLy8NCj4gKyAgLy8gQ2hlY2sgbmVzdGVkIGNhcHN1bGUgaGVhZGVyDQo+ICsgIC8v IEZNUCBHVUlEIGFmdGVyIEVTUlQgb25lDQo+ICsgIC8vDQo+ICsgIE5lc3RlZENhcHN1bGVIZWFk ZXIgPSAoRUZJX0NBUFNVTEVfSEVBREVSICopKChVSU5UOCAqKUNhcHN1bGVIZWFkZXIgKyBDYXBz dWxlSGVhZGVyLQ0KPiA+SGVhZGVyU2l6ZSk7DQo+ICsgIE5lc3RlZENhcHN1bGVTaXplID0gKFVJ TlROKUNhcHN1bGVIZWFkZXIgKyBDYXBzdWxlSGVhZGVyLT5IZWFkZXJTaXplIC0NCj4gKFVJTlRO KU5lc3RlZENhcHN1bGVIZWFkZXI7DQo+ICsgIGlmIChOZXN0ZWRDYXBzdWxlU2l6ZSA8IHNpemVv ZihFRklfQ0FQU1VMRV9IRUFERVIpKSB7DQo+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiArICB9DQo+ ICsgIGlmICghQ29tcGFyZUd1aWQoJk5lc3RlZENhcHN1bGVIZWFkZXItPkNhcHN1bGVHdWlkLCAm Z0VmaUZtcENhcHN1bGVHdWlkKSkgew0KPiArICAgIHJldHVybiBGQUxTRTsNCj4gKyAgfQ0KPiAr ICByZXR1cm4gVFJVRTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIER1bXAgY2Fwc3VsZSBpbmZv cm1hdGlvbg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgY2Fw c3VsZSBpbmZvcm1hdGlvbiBpcyBkdW1wZWQuDQo+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVE ICAgICAgICBJbnB1dCBwYXJhbWV0ZXIgaXMgbm90IHZhbGlkLg0KPiArKiovDQo+ICtFRklfU1RB VFVTDQo+ICtEdW1wQ2Fwc3VsZSgNCj4gKyAgVk9JRA0KPiArICApDQo+ICt7DQo+ICsgIENIQVIx NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqQ2Fwc3VsZU5hbWU7DQo+ ICsgIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqQnVmZmVy Ow0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmls ZVNpemU7DQo+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBJc1N5c3RlbUZtcDsNCj4gKyAgRUZJX0NBUFNVTEVfSEVBREVSICAgICAgICAgICAgICAgICAg ICAgICAgICAgICpDYXBzdWxlSGVhZGVyOw0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArDQo+ICsgIGlmIChBcmdjICE9IDMpIHsN Cj4gKyAgICBQcmludChMIkNhcHN1bGVBcHA6IEludmFsaWQgUGFyYW1ldGVyLlxuIik7DQo+ICsg ICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gKyAgfQ0KPiArDQo+ICsgIElzU3lzdGVtRm1w ID0gRkFMU0U7DQo+ICsgIGlmIChTdHJDbXAoQXJndlsxXSwgTCItRFMiKSA9PSAwKSB7DQo+ICsg ICAgSXNTeXN0ZW1GbXAgPSBUUlVFOw0KPiArICB9DQo+ICsNCj4gKyAgQ2Fwc3VsZU5hbWUgPSBB cmd2WzJdOw0KPiArICBTdGF0dXMgPSBSZWFkRmlsZVRvQnVmZmVyKENhcHN1bGVOYW1lLCAmRmls ZVNpemUsICZCdWZmZXIpOw0KPiArICBpZiAoRUZJX0VSUk9SKFN0YXR1cykpIHsNCj4gKyAgICBQ cmludChMIkNhcHN1bGVBcHA6IENhcHN1bGUgKCVzKSBpcyBub3QgZm91bmQuXG4iLCBDYXBzdWxl TmFtZSk7DQo+ICsgICAgZ290byBEb25lOw0KPiArICB9DQo+ICsNCj4gKyAgQ2Fwc3VsZUhlYWRl ciA9IEJ1ZmZlcjsNCj4gKyAgaWYgKENvbXBhcmVHdWlkKCZDYXBzdWxlSGVhZGVyLT5DYXBzdWxl R3VpZCwgJmdXaW5kb3dzVXhDYXBzdWxlR3VpZCkpIHsNCj4gKyAgICBEdW1wVXhDYXBzdWxlKENh cHN1bGVIZWFkZXIpOw0KPiArICAgIFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KPiArICAgIGdvdG8g RG9uZTsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChDb21wYXJlR3VpZCgmQ2Fwc3VsZUhlYWRlci0+ Q2Fwc3VsZUd1aWQsICZnRWZpRm1wQ2Fwc3VsZUd1aWQpKSB7DQo+ICsgICAgRHVtcEZtcENhcHN1 bGUoQ2Fwc3VsZUhlYWRlciwgSXNTeXN0ZW1GbXApOw0KPiArICB9DQo+ICsgIGlmIChJc05lc3Rl ZEZtcENhcHN1bGUoQ2Fwc3VsZUhlYWRlcikpIHsNCj4gKyAgICBQcmludChMIltOZXN0ZWRDYXB1 c3VsZV1cbiIpOw0KPiArICAgIFByaW50KEwiQ2Fwc3VsZUhlYWRlcjpcbiIpOw0KPiArICAgIFBy aW50KEwiICBDYXBzdWxlR3VpZCAgICAgIC0gJWdcbiIsICZDYXBzdWxlSGVhZGVyLT5DYXBzdWxl R3VpZCk7DQo+ICsgICAgUHJpbnQoTCIgIEhlYWRlclNpemUgICAgICAgLSAweCV4XG4iLCBDYXBz dWxlSGVhZGVyLT5IZWFkZXJTaXplKTsNCj4gKyAgICBQcmludChMIiAgRmxhZ3MgICAgICAgICAg ICAtIDB4JXhcbiIsIENhcHN1bGVIZWFkZXItPkZsYWdzKTsNCj4gKyAgICBQcmludChMIiAgQ2Fw c3VsZUltYWdlU2l6ZSAtIDB4JXhcbiIsIENhcHN1bGVIZWFkZXItPkNhcHN1bGVJbWFnZVNpemUp Ow0KPiArICAgIER1bXBGbXBDYXBzdWxlKChFRklfQ0FQU1VMRV9IRUFERVIgKikoKFVJTlROKUNh cHN1bGVIZWFkZXIgKyBDYXBzdWxlSGVhZGVyLQ0KPiA+SGVhZGVyU2l6ZSksIElzU3lzdGVtRm1w KTsNCj4gKyAgfQ0KPiArDQo+ICtEb25lOg0KPiArICBGcmVlUG9vbChCdWZmZXIpOw0KPiArICBy ZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgRHVtcCBjYXBzdWxlIHN0YXR1 cyB2YXJpYWJsZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhl IGNhcHN1bGUgc3RhdHVzIHZhcmlhYmxlIGlzIGR1bXBlZC4NCj4gKyAgQHJldHZhbCBFRklfVU5T VVBQT1JURUQgICAgICAgIElucHV0IHBhcmFtZXRlciBpcyBub3QgdmFsaWQuDQo+ICsqKi8NCj4g K0VGSV9TVEFUVVMNCj4gK0RtcENhcHN1bGVTdGF0dXNWYXJpYWJsZSgNCj4gKyAgVk9JRA0KPiAr ICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1 czsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsg IENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhcHN1bGVWYXJOYW1lWzIwXTsN Cj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlRlbXBWYXJOYW1lOw0K PiArICBFRklfQ0FQU1VMRV9SRVNVTFRfVkFSSUFCTEVfSEVBREVSICAqQ2Fwc3VsZVJlc3VsdDsN Cj4gKyAgRUZJX0NBUFNVTEVfUkVTVUxUX1ZBUklBQkxFX0ZNUCAgICAgKkNhcHN1bGVSZXN1bHRG bXA7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhcHN1bGVGaWxl TmFtZVNpemU7DQo+ICsgIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhcHN1 bGVJbmRleERhdGFbMTJdOw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqQ2Fwc3VsZUluZGV4Ow0KPiArDQo+ICsgIFN0YXR1cyA9IEdldFZhcmlhYmxlMigNCj4gKyAg ICAgICAgICAgICBMIkNhcHN1bGVNYXgiLA0KPiArICAgICAgICAgICAgICZnRWZpQ2Fwc3VsZVJl cG9ydEd1aWQsDQo+ICsgICAgICAgICAgICAgKFZPSUQgKiopJkNhcHN1bGVJbmRleCwNCj4gKyAg ICAgICAgICAgICBOVUxMDQo+ICsgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKCFFRklfRVJST1Io U3RhdHVzKSkgew0KPiArICAgIENvcHlNZW0oQ2Fwc3VsZUluZGV4RGF0YSwgQ2Fwc3VsZUluZGV4 LCAxMSAqIHNpemVvZihDSEFSMTYpKTsNCj4gKyAgICBDYXBzdWxlSW5kZXhEYXRhWzExXSA9IDA7 DQo+ICsgICAgUHJpbnQoTCJDYXBzdWxlTWF4IC0gJXNcbiIsIENhcHN1bGVJbmRleERhdGEpOw0K PiArICAgIEZyZWVQb29sKENhcHN1bGVJbmRleCk7DQo+ICsgIH0NCj4gKyAgU3RhdHVzID0gR2V0 VmFyaWFibGUyKA0KPiArICAgICAgICAgICAgIEwiQ2Fwc3VsZUxhc3QiLA0KPiArICAgICAgICAg ICAgICZnRWZpQ2Fwc3VsZVJlcG9ydEd1aWQsDQo+ICsgICAgICAgICAgICAgKFZPSUQgKiopJkNh cHN1bGVJbmRleCwNCj4gKyAgICAgICAgICAgICBOVUxMDQo+ICsgICAgICAgICAgICAgKTsNCj4g KyAgaWYgKCFFRklfRVJST1IoU3RhdHVzKSkgew0KPiArICAgIENvcHlNZW0oQ2Fwc3VsZUluZGV4 RGF0YSwgQ2Fwc3VsZUluZGV4LCAxMSAqIHNpemVvZihDSEFSMTYpKTsNCj4gKyAgICBDYXBzdWxl SW5kZXhEYXRhWzExXSA9IDA7DQo+ICsgICAgUHJpbnQoTCJDYXBzdWxlTGFzdCAtICVzXG4iLCBD YXBzdWxlSW5kZXhEYXRhKTsNCj4gKyAgICBGcmVlUG9vbChDYXBzdWxlSW5kZXgpOw0KPiArICB9 DQo+ICsNCj4gKw0KPiArICBTdHJDcHlTIChDYXBzdWxlVmFyTmFtZSwgc2l6ZW9mKENhcHN1bGVW YXJOYW1lKS9zaXplb2YoQ2Fwc3VsZVZhck5hbWVbMF0pLA0KPiBMIkNhcHN1bGUiKTsNCj4gKyAg VGVtcFZhck5hbWUgPSBDYXBzdWxlVmFyTmFtZSArIFN0ckxlbiAoQ2Fwc3VsZVZhck5hbWUpOw0K PiArICBJbmRleCA9IDA7DQo+ICsNCj4gKyAgd2hpbGUgKFRSVUUpIHsNCj4gKyAgICBVbmljb2Rl U1ByaW50IChUZW1wVmFyTmFtZSwgNSAqIHNpemVvZihDSEFSMTYpLCBMIiUwNHgiLCBJbmRleCk7 DQo+ICsNCj4gKyAgICBTdGF0dXMgPSBHZXRWYXJpYWJsZTIgKA0KPiArICAgICAgICAgICAgICAg Q2Fwc3VsZVZhck5hbWUsDQo+ICsgICAgICAgICAgICAgICAmZ0VmaUNhcHN1bGVSZXBvcnRHdWlk LA0KPiArICAgICAgICAgICAgICAgKFZPSUQgKiopICZDYXBzdWxlUmVzdWx0LA0KPiArICAgICAg ICAgICAgICAgTlVMTA0KPiArICAgICAgICAgICAgICAgKTsNCj4gKyAgICBpZiAoU3RhdHVzID09 IEVGSV9OT1RfRk9VTkQpIHsNCj4gKyAgICAgIGJyZWFrOw0KPiArICAgIH0gZWxzZSBpZiAoRUZJ X0VSUk9SKFN0YXR1cykpIHsNCj4gKyAgICAgIGNvbnRpbnVlOw0KPiArICAgIH0NCj4gKw0KPiAr ICAgIC8vDQo+ICsgICAgLy8gZGlzcGxheSBjYXBzdWxlIHByb2Nlc3Mgc3RhdHVzDQo+ICsgICAg Ly8NCj4gKyAgICBpZiAoQ2Fwc3VsZVJlc3VsdC0+VmFyaWFibGVUb3RhbFNpemUgPj0NCj4gc2l6 ZW9mKEVGSV9DQVBTVUxFX1JFU1VMVF9WQVJJQUJMRV9IRUFERVIpKSB7DQo+ICsgICAgICBQcmlu dCAoTCJDYXBzdWxlTmFtZTogJXNcbiIsIENhcHN1bGVWYXJOYW1lKTsNCj4gKyAgICAgIFByaW50 IChMIiAgQ2Fwc3VsZSBHdWlkOiAlZ1xuIiwgJkNhcHN1bGVSZXN1bHQtPkNhcHN1bGVHdWlkKTsN Cj4gKyAgICAgIFByaW50IChMIiAgQ2Fwc3VsZSBQcm9jZXNzZWRUaW1lOiAldFxuIiwgJkNhcHN1 bGVSZXN1bHQtPkNhcHN1bGVQcm9jZXNzZWQpOw0KPiArICAgICAgUHJpbnQgKEwiICBDYXBzdWxl IFN0YXR1czogJXJcbiIsIENhcHN1bGVSZXN1bHQtPkNhcHN1bGVTdGF0dXMpOw0KPiArICAgIH0N Cj4gKw0KPiArICAgIGlmIChDb21wYXJlR3VpZCgmQ2Fwc3VsZVJlc3VsdC0+Q2Fwc3VsZUd1aWQs ICZnRWZpRm1wQ2Fwc3VsZUd1aWQpKSB7DQo+ICsgICAgICBpZiAoQ2Fwc3VsZVJlc3VsdC0+VmFy aWFibGVUb3RhbFNpemUgPj0NCj4gc2l6ZW9mKEVGSV9DQVBTVUxFX1JFU1VMVF9WQVJJQUJMRV9I RUFERVIpICsgc2l6ZW9mKEVGSV9DQVBTVUxFX1JFU1VMVF9WQVJJQUJMRV9GTVApKSB7DQo+ICsg ICAgICAgIENhcHN1bGVSZXN1bHRGbXAgPSAoRUZJX0NBUFNVTEVfUkVTVUxUX1ZBUklBQkxFX0ZN UCAqKShDYXBzdWxlUmVzdWx0ICsgMSk7DQo+ICsgICAgICAgIFByaW50KEwiICBDYXBzdWxlIEZN UCBWZXJzaW9uOiAweCV4XG4iLCBDYXBzdWxlUmVzdWx0Rm1wLT5WZXJzaW9uKTsNCj4gKyAgICAg ICAgUHJpbnQoTCIgIENhcHN1bGUgRk1QIFBheWxvYWRJbmRleDogMHgleFxuIiwgQ2Fwc3VsZVJl c3VsdEZtcC0+UGF5bG9hZEluZGV4KTsNCj4gKyAgICAgICAgUHJpbnQoTCIgIENhcHN1bGUgRk1Q IFVwZGF0ZUltYWdlSW5kZXg6IDB4JXhcbiIsIENhcHN1bGVSZXN1bHRGbXAtDQo+ID5VcGRhdGVJ bWFnZUluZGV4KTsNCj4gKyAgICAgICAgUHJpbnQoTCIgIENhcHN1bGUgRk1QIFVwZGF0ZUltYWdl VHlwZUlkOiAlZ1xuIiwgJkNhcHN1bGVSZXN1bHRGbXAtDQo+ID5VcGRhdGVJbWFnZVR5cGVJZCk7 DQo+ICsgICAgICAgIGlmIChDYXBzdWxlUmVzdWx0LT5WYXJpYWJsZVRvdGFsU2l6ZSA+DQo+IHNp emVvZihFRklfQ0FQU1VMRV9SRVNVTFRfVkFSSUFCTEVfSEVBREVSKSArIHNpemVvZihFRklfQ0FQ U1VMRV9SRVNVTFRfVkFSSUFCTEVfRk1QKSkgew0KPiArICAgICAgICAgIFByaW50KEwiICBDYXBz dWxlIEZNUCBDYXBzdWxlRmlsZU5hbWU6ICVzXG4iLCAoQ2Fwc3VsZVJlc3VsdEZtcCArIDEpKTsN Cj4gKyAgICAgICAgICBDYXBzdWxlRmlsZU5hbWVTaXplID0gU3RyU2l6ZSgoQ0hBUjE2ICopKENh cHN1bGVSZXN1bHRGbXAgKyAxKSk7DQo+ICsgICAgICAgICAgaWYgKENhcHN1bGVSZXN1bHQtPlZh cmlhYmxlVG90YWxTaXplID4NCj4gc2l6ZW9mKEVGSV9DQVBTVUxFX1JFU1VMVF9WQVJJQUJMRV9I RUFERVIpICsgc2l6ZW9mKEVGSV9DQVBTVUxFX1JFU1VMVF9WQVJJQUJMRV9GTVApICsNCj4gQ2Fw c3VsZUZpbGVOYW1lU2l6ZSkgew0KPiArICAgICAgICAgICAgUHJpbnQoTCIgIENhcHN1bGUgRk1Q IENhcHN1bGVUYXJnZXQ6ICVzXG4iLCAoVUlOVDggKikoQ2Fwc3VsZVJlc3VsdEZtcCArDQo+IDEp ICsgQ2Fwc3VsZUZpbGVOYW1lU2l6ZSk7DQo+ICsgICAgICAgICAgfQ0KPiArICAgICAgICB9DQo+ ICsgICAgICB9DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgRnJlZVBvb2woQ2Fwc3VsZVJlc3VsdCk7 DQo+ICsNCj4gKyAgICBJbmRleCsrOw0KPiArICAgIGlmIChJbmRleCA+IDB4RkZGRikgew0KPiAr ICAgICAgYnJlYWs7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUND RVNTOw0KPiArfQ0KPiArDQo+ICtDSEFSOCAqbUZ3VHlwZVN0cmluZ1tdID0gew0KPiArICAiVW5r bm93biIsDQo+ICsgICJTeXN0ZW1GaXJtd2FyZSIsDQo+ICsgICJEZXZpY2VGaXJtd2FyZSIsDQo+ ICsgICJVZWZpRHJpdmVyIiwNCj4gK307DQo+ICsNCj4gK0NIQVI4ICptTGFzdEF0dGVtcHRTdGF0 dXNTdHJpbmdbXSA9IHsNCj4gKyAgIlN1Y2Nlc3MiLA0KPiArICAiRXJyb3I6IFVuc3VjY2Vzc2Z1 bCIsDQo+ICsgICJFcnJvcjogSW5zdWZmaWNpZW50IFJlc291cmNlcyIsDQo+ICsgICJFcnJvcjog SW5jb3JyZWN0IFZlcnNpb24iLA0KPiArICAiRXJyb3I6IEludmFsaWQgRm9ybWF0IiwNCj4gKyAg IkVycm9yOiBBdXRoIEVycm9yIiwNCj4gKyAgIkVycm9yOiBQb3dlciBFdmVudCBBQyIsDQo+ICsg ICJFcnJvcjogUG93ZXIgRXZlbnQgQmF0dGVyeSIsDQo+ICt9Ow0KPiArDQo+ICsvKioNCj4gKyAg Q29udmVydCBGd1R5cGUgdG8gYSBzdHJpbmcuDQo+ICsNCj4gKyAgQHBhcmFtIEZ3VHlwZSAgRndU eXBlIGluIEVTUlQNCj4gKw0KPiArICBAcmV0dXJuIGEgc3RyaW5nIGZvciBGd1R5cGUuDQo+ICsq Ki8NCj4gK0NIQVI4ICoNCj4gK0Z3VHlwZVRvU3RyaW5nKA0KPiArICBJTiBVSU5UMzIgRndUeXBl DQo+ICsgICkNCj4gK3sNCj4gKyAgaWYgKEZ3VHlwZSA8IHNpemVvZihtRndUeXBlU3RyaW5nKSAv IHNpemVvZihtRndUeXBlU3RyaW5nWzBdKSkgew0KPiArICAgIHJldHVybiBtRndUeXBlU3RyaW5n W0Z3VHlwZV07DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgcmV0dXJuICJJbnZhbGlkIjsNCj4gKyAg fQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgQ29udmVydCBMYXN0QXR0ZW1wdFN0YXR1cyB0byBh IHN0cmluZy4NCj4gKw0KPiArICBAcGFyYW0gTGFzdEF0dGVtcHRTdGF0dXMgIExhc3RBdHRlbXB0 U3RhdHVzIGluIEZNUCBvciBFU1JUDQo+ICsNCj4gKyAgQHJldHVybiBhIHN0cmluZyBmb3IgTGFz dEF0dGVtcHRTdGF0dXMuDQo+ICsqKi8NCj4gK0NIQVI4ICoNCj4gK0xhc3RBdHRlbXB0U3RhdHVz VG9TdHJpbmcoDQo+ICsgIElOIFVJTlQzMiBMYXN0QXR0ZW1wdFN0YXR1cw0KPiArICApDQo+ICt7 DQo+ICsgIGlmIChMYXN0QXR0ZW1wdFN0YXR1cyA8IHNpemVvZihtTGFzdEF0dGVtcHRTdGF0dXNT dHJpbmcpIC8NCj4gc2l6ZW9mKG1MYXN0QXR0ZW1wdFN0YXR1c1N0cmluZ1swXSkpIHsNCj4gKyAg ICByZXR1cm4gbUxhc3RBdHRlbXB0U3RhdHVzU3RyaW5nW0xhc3RBdHRlbXB0U3RhdHVzXTsNCj4g KyAgfSBlbHNlIHsNCj4gKyAgICByZXR1cm4gIkVycm9yOiBVbmtub3duIjsNCj4gKyAgfQ0KPiAr fQ0KPiArDQo+ICsvKioNCj4gKyAgRHVtcCBFU1JUIGVudHJ5Lg0KPiArDQo+ICsgIEBwYXJhbSBF c3J0RW50cnkgIEVTUlQgZW50cnkNCj4gKyoqLw0KPiArVk9JRA0KPiArRHVtcEVzcnRFbnRyeSgN Cj4gKyAgSU4gRUZJX1NZU1RFTV9SRVNPVVJDRV9FTlRSWSAgKkVzcnRFbnRyeQ0KPiArICApDQo+ ICt7DQo+ICsgIFByaW50KEwiICBGd0NsYXNzICAgICAgICAgICAgICAgICAgLSAlZ1xuIiwgJkVz cnRFbnRyeS0+RndDbGFzcyk7DQo+ICsgIFByaW50KEwiICBGd1R5cGUgICAgICAgICAgICAgICAg ICAgLSAweCV4ICglYSlcbiIsIEVzcnRFbnRyeS0+RndUeXBlLA0KPiBGd1R5cGVUb1N0cmluZyhF c3J0RW50cnktPkZ3VHlwZSkpOw0KPiArICBQcmludChMIiAgRndWZXJzaW9uICAgICAgICAgICAg ICAgIC0gMHgleFxuIiwgRXNydEVudHJ5LT5Gd1ZlcnNpb24pOw0KPiArICBQcmludChMIiAgTG93 ZXN0U3VwcG9ydGVkRndWZXJzaW9uIC0gMHgleFxuIiwgRXNydEVudHJ5LT5Mb3dlc3RTdXBwb3J0 ZWRGd1ZlcnNpb24pOw0KPiArICBQcmludChMIiAgQ2Fwc3VsZUZsYWdzICAgICAgICAgICAgIC0g MHgleFxuIiwgRXNydEVudHJ5LT5DYXBzdWxlRmxhZ3MpOw0KPiArICBQcmludChMIiAgICBQRVJT SVNUX0FDUk9TU19SRVNFVCAgIC0gMHgleFxuIiwgRXNydEVudHJ5LT5DYXBzdWxlRmxhZ3MgJg0K PiBDQVBTVUxFX0ZMQUdTX1BFUlNJU1RfQUNST1NTX1JFU0VUKTsNCj4gKyAgUHJpbnQoTCIgICAg UE9QVUxBVEVfU1lTVEVNX1RBQkxFICAtIDB4JXhcbiIsIEVzcnRFbnRyeS0+Q2Fwc3VsZUZsYWdz ICYNCj4gQ0FQU1VMRV9GTEFHU19QT1BVTEFURV9TWVNURU1fVEFCTEUpOw0KPiArICBQcmludChM IiAgICBJTklUSUFURV9SRVNFVCAgICAgICAgIC0gMHgleFxuIiwgRXNydEVudHJ5LT5DYXBzdWxl RmxhZ3MgJg0KPiBDQVBTVUxFX0ZMQUdTX0lOSVRJQVRFX1JFU0VUKTsNCj4gKyAgUHJpbnQoTCIg IExhc3RBdHRlbXB0VmVyc2lvbiAgICAgICAtIDB4JXhcbiIsIEVzcnRFbnRyeS0+TGFzdEF0dGVt cHRWZXJzaW9uKTsNCj4gKyAgUHJpbnQoTCIgIExhc3RBdHRlbXB0U3RhdHVzICAgICAgICAtIDB4 JXggKCVhKVxuIiwgRXNydEVudHJ5LT5MYXN0QXR0ZW1wdFN0YXR1cywNCj4gTGFzdEF0dGVtcHRT dGF0dXNUb1N0cmluZyhFc3J0RW50cnktPkxhc3RBdHRlbXB0U3RhdHVzKSk7DQo+ICt9DQo+ICsN Cj4gKy8qKg0KPiArICBEdW1wIEVTUlQgdGFibGUuDQo+ICsNCj4gKyAgQHBhcmFtIEVzcnQgIEVT UlQgdGFibGUNCj4gKyoqLw0KPiArVk9JRA0KPiArRHVtcEVzcnQoDQo+ICsgIElOIEVGSV9TWVNU RU1fUkVTT1VSQ0VfVEFCTEUgICpFc3J0DQo+ICsgICkNCj4gK3sNCj4gKyAgVUlOVE4gICAgICAg ICAgICAgICAgICAgICAgSW5kZXg7DQo+ICsgIEVGSV9TWVNURU1fUkVTT1VSQ0VfRU5UUlkgICpF c3J0RW50cnk7DQo+ICsNCj4gKyAgUHJpbnQoTCJFRklfU1lTVEVNX1JFU09VUkNFX1RBQkxFOlxu Iik7DQo+ICsgIFByaW50KEwiRndSZXNvdXJjZUNvdW50ICAgIC0gMHgleFxuIiwgRXNydC0+RndS ZXNvdXJjZUNvdW50KTsNCj4gKyAgUHJpbnQoTCJGd1Jlc291cmNlQ291bnRNYXggLSAweCV4XG4i LCBFc3J0LT5Gd1Jlc291cmNlQ291bnRNYXgpOw0KPiArICBQcmludChMIkZ3UmVzb3VyY2VWZXJz aW9uICAtIDB4JWx4XG4iLCBFc3J0LT5Gd1Jlc291cmNlVmVyc2lvbik7DQo+ICsNCj4gKyAgRXNy dEVudHJ5ID0gKFZPSUQgKikoRXNydCArIDEpOw0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXgg PCBFc3J0LT5Gd1Jlc291cmNlQ291bnQ7IEluZGV4KyspIHsNCj4gKyAgICBQcmludChMIkVGSV9T WVNURU1fUkVTT1VSQ0VfRU5UUlkgKCVkKTpcbiIsIEluZGV4KTsNCj4gKyAgICBEdW1wRXNydEVu dHJ5KEVzcnRFbnRyeSk7DQo+ICsgICAgRXNydEVudHJ5Kys7DQo+ICsgIH0NCj4gK30NCj4gKw0K PiArLyoqDQo+ICsgIER1bXAgRVNSVCBpbmZvLg0KPiArKiovDQo+ICtWT0lEDQo+ICtEdW1wRXNy dERhdGEgKA0KPiArICBWT0lEDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAg ICAgICAgICAgU3RhdHVzOw0KPiArICBFRklfU1lTVEVNX1JFU09VUkNFX1RBQkxFICAqRXNydDsN Cj4gKw0KPiArICBQcmludChMIiMjIyMjIyMjIyMjIyMjXG4iKTsNCj4gKyAgUHJpbnQoTCIjIEVT UlQgVEFCTEUgI1xuIik7DQo+ICsgIFByaW50KEwiIyMjIyMjIyMjIyMjIyNcbiIpOw0KPiArDQo+ ICsgIFN0YXR1cyA9IEVmaUdldFN5c3RlbUNvbmZpZ3VyYXRpb25UYWJsZSAoJmdFZmlTeXN0ZW1S ZXNvdXJjZVRhYmxlR3VpZCwgKFZPSUQNCj4gKiopJkVzcnQpOw0KPiArICBpZiAoRUZJX0VSUk9S KFN0YXR1cykpIHsNCj4gKyAgICBQcmludChMIkVTUlQgLSAlclxuIiwgU3RhdHVzKTsNCj4gKyAg ICByZXR1cm47DQo+ICsgIH0NCj4gKyAgRHVtcEVzcnQoRXNydCk7DQo+ICsgIFByaW50KEwiXG4i KTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIER1bXAgRk1QIGluZm9ybWF0aW9uLg0KPiArDQo+ ICsgIEBwYXJhbSBJbWFnZUluZm9TaXplICAgICAgIFRoZSBzaXplIG9mIEltYWdlSW5mbywgaW4g Ynl0ZXMuDQo+ICsgIEBwYXJhbSBJbWFnZUluZm8gICAgICAgICAgIEEgcG9pbnRlciB0byBFRklf RklSTVdBUkVfSU1BR0VfREVTQ1JJUFRPUi4NCj4gKyAgQHBhcmFtIERlc2NyaXB0b3JWZXJzaW9u ICAgVGhlIHZlcnNpb24gb2YgRUZJX0ZJUk1XQVJFX0lNQUdFX0RFU0NSSVBUT1IuDQo+ICsgIEBw YXJhbSBEZXNjcmlwdG9yQ291bnQgICAgIFRoZSBjb3VudCBvZiBFRklfRklSTVdBUkVfSU1BR0Vf REVTQ1JJUFRPUi4NCj4gKyAgQHBhcmFtIERlc2NyaXB0b3JTaXplICAgICAgVGhlIHNpemUgb2Yg YW4gaW5kaXZpZHVhbCBFRklfRklSTVdBUkVfSU1BR0VfREVTQ1JJUFRPUiwNCj4gaW4gYnl0ZXMu DQo+ICsgIEBwYXJhbSBQYWNrYWdlVmVyc2lvbiAgICAgIFRoZSB2ZXJzaW9uIG9mIHBhY2thZ2Uu DQo+ICsgIEBwYXJhbSBQYWNrYWdlVmVyc2lvbk5hbWUgIFRoZSB2ZXJzaW9uIG5hbWUgb2YgcGFj a2FnZS4NCj4gKyoqLw0KPiArVk9JRA0KPiArRHVtcEZtcEltYWdlSW5mbygNCj4gKyAgSU4gVUlO VE4gICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZUluZm9TaXplLA0KPiArICBJTiBFRklf RklSTVdBUkVfSU1BR0VfREVTQ1JJUFRPUiAgICpJbWFnZUluZm8sDQo+ICsgIElOIFVJTlQzMiAg ICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRvclZlcnNpb24sDQo+ICsgIElOIFVJTlQ4 ICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRvckNvdW50LA0KPiArICBJTiBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0b3JTaXplLA0KPiArICBJTiBVSU5U MzIgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VWZXJzaW9uLA0KPiArICBJTiBDSEFS MTYgICAgICAgICAgICAgICAgICAgICAgICAgICpQYWNrYWdlVmVyc2lvbk5hbWUNCj4gKyAgKQ0K PiArew0KPiArICBFRklfRklSTVdBUkVfSU1BR0VfREVTQ1JJUFRPUiAgICAgICAgICAgICAgICAg KkN1cnJlbnRJbWFnZUluZm87DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBJbmRleDsNCj4gKw0KPiArICBQcmludChMIiAgRGVzY3JpcHRvclZlcnNp b24gIC0gMHgleFxuIiwgRGVzY3JpcHRvclZlcnNpb24pOw0KPiArICBQcmludChMIiAgRGVzY3Jp cHRvckNvdW50ICAgIC0gMHgleFxuIiwgRGVzY3JpcHRvckNvdW50KTsNCj4gKyAgUHJpbnQoTCIg IERlc2NyaXB0b3JTaXplICAgICAtIDB4JXhcbiIsIERlc2NyaXB0b3JTaXplKTsNCj4gKyAgUHJp bnQoTCIgIFBhY2thZ2VWZXJzaW9uICAgICAtIDB4JXhcbiIsIFBhY2thZ2VWZXJzaW9uKTsNCj4g KyAgUHJpbnQoTCIgIFBhY2thZ2VWZXJzaW9uTmFtZSAtIFwiJXNcIlxuIiwgUGFja2FnZVZlcnNp b25OYW1lKTsNCj4gKyAgQ3VycmVudEltYWdlSW5mbyA9IEltYWdlSW5mbzsNCj4gKyAgZm9yIChJ bmRleCA9IDA7IEluZGV4IDwgRGVzY3JpcHRvckNvdW50OyBJbmRleCsrKSB7DQo+ICsgICAgUHJp bnQoTCIgIEltYWdlRGVzY3JpcHRvciAoJWQpXG4iLCBJbmRleCk7DQo+ICsgICAgUHJpbnQoTCIg ICAgSW1hZ2VJbmRleCAgICAgICAgICAgICAgICAgIC0gMHgleFxuIiwgQ3VycmVudEltYWdlSW5m by0+SW1hZ2VJbmRleCk7DQo+ICsgICAgUHJpbnQoTCIgICAgSW1hZ2VUeXBlSWQgICAgICAgICAg ICAgICAgIC0gJWdcbiIsICZDdXJyZW50SW1hZ2VJbmZvLT5JbWFnZVR5cGVJZCk7DQo+ICsgICAg UHJpbnQoTCIgICAgSW1hZ2VJZCAgICAgICAgICAgICAgICAgICAgIC0gMHglbHhcbiIsIEN1cnJl bnRJbWFnZUluZm8tPkltYWdlSWQpOw0KPiArICAgIFByaW50KEwiICAgIEltYWdlSWROYW1lICAg ICAgICAgICAgICAgICAtIFwiJXNcIlxuIiwgQ3VycmVudEltYWdlSW5mby0NCj4gPkltYWdlSWRO YW1lKTsNCj4gKyAgICBQcmludChMIiAgICBWZXJzaW9uICAgICAgICAgICAgICAgICAgICAgLSAw eCV4XG4iLCBDdXJyZW50SW1hZ2VJbmZvLT5WZXJzaW9uKTsNCj4gKyAgICBQcmludChMIiAgICBW ZXJzaW9uTmFtZSAgICAgICAgICAgICAgICAgLSBcIiVzXCJcbiIsIEN1cnJlbnRJbWFnZUluZm8t DQo+ID5WZXJzaW9uTmFtZSk7DQo+ICsgICAgUHJpbnQoTCIgICAgU2l6ZSAgICAgICAgICAgICAg ICAgICAgICAgIC0gMHgleFxuIiwgQ3VycmVudEltYWdlSW5mby0+U2l6ZSk7DQo+ICsgICAgUHJp bnQoTCIgICAgQXR0cmlidXRlc1N1cHBvcnRlZCAgICAgICAgIC0gMHglbHhcbiIsIEN1cnJlbnRJ bWFnZUluZm8tDQo+ID5BdHRyaWJ1dGVzU3VwcG9ydGVkKTsNCj4gKyAgICBQcmludChMIiAgICAg IElNQUdFX1VQREFUQUJMRSAgICAgICAgICAgLSAweCVseFxuIiwgQ3VycmVudEltYWdlSW5mby0N Cj4gPkF0dHJpYnV0ZXNTdXBwb3J0ZWQgJiBJTUFHRV9BVFRSSUJVVEVfSU1BR0VfVVBEQVRBQkxF KTsNCj4gKyAgICBQcmludChMIiAgICAgIFJFU0VUX1JFUVVJUkVEICAgICAgICAgICAgLSAweCVs eFxuIiwgQ3VycmVudEltYWdlSW5mby0NCj4gPkF0dHJpYnV0ZXNTdXBwb3J0ZWQgJiBJTUFHRV9B VFRSSUJVVEVfUkVTRVRfUkVRVUlSRUQpOw0KPiArICAgIFByaW50KEwiICAgICAgQVVUSEVOVElD QVRJT05fUkVRVUlSRUQgICAtIDB4JWx4XG4iLCBDdXJyZW50SW1hZ2VJbmZvLQ0KPiA+QXR0cmli dXRlc1N1cHBvcnRlZCAmIElNQUdFX0FUVFJJQlVURV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRCk7 DQo+ICsgICAgUHJpbnQoTCIgICAgICBJTl9VU0UgICAgICAgICAgICAgICAgICAgIC0gMHglbHhc biIsIEN1cnJlbnRJbWFnZUluZm8tDQo+ID5BdHRyaWJ1dGVzU3VwcG9ydGVkICYgSU1BR0VfQVRU UklCVVRFX0lOX1VTRSk7DQo+ICsgICAgUHJpbnQoTCIgICAgICBVRUZJX0lNQUdFICAgICAgICAg ICAgICAgIC0gMHglbHhcbiIsIEN1cnJlbnRJbWFnZUluZm8tDQo+ID5BdHRyaWJ1dGVzU3VwcG9y dGVkICYgSU1BR0VfQVRUUklCVVRFX1VFRklfSU1BR0UpOw0KPiArICAgIFByaW50KEwiICAgIEF0 dHJpYnV0ZXNTZXR0aW5nICAgICAgICAgICAtIDB4JWx4XG4iLCBDdXJyZW50SW1hZ2VJbmZvLQ0K PiA+QXR0cmlidXRlc1NldHRpbmcpOw0KPiArICAgIFByaW50KEwiICAgICAgSU1BR0VfVVBEQVRB QkxFICAgICAgICAgICAtIDB4JWx4XG4iLCBDdXJyZW50SW1hZ2VJbmZvLQ0KPiA+QXR0cmlidXRl c1NldHRpbmcgJiBJTUFHRV9BVFRSSUJVVEVfSU1BR0VfVVBEQVRBQkxFKTsNCj4gKyAgICBQcmlu dChMIiAgICAgIFJFU0VUX1JFUVVJUkVEICAgICAgICAgICAgLSAweCVseFxuIiwgQ3VycmVudElt YWdlSW5mby0NCj4gPkF0dHJpYnV0ZXNTZXR0aW5nICYgSU1BR0VfQVRUUklCVVRFX1JFU0VUX1JF UVVJUkVEKTsNCj4gKyAgICBQcmludChMIiAgICAgIEFVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEICAg LSAweCVseFxuIiwgQ3VycmVudEltYWdlSW5mby0NCj4gPkF0dHJpYnV0ZXNTZXR0aW5nICYgSU1B R0VfQVRUUklCVVRFX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEKTsNCj4gKyAgICBQcmludChMIiAg ICAgIElOX1VTRSAgICAgICAgICAgICAgICAgICAgLSAweCVseFxuIiwgQ3VycmVudEltYWdlSW5m by0NCj4gPkF0dHJpYnV0ZXNTZXR0aW5nICYgSU1BR0VfQVRUUklCVVRFX0lOX1VTRSk7DQo+ICsg ICAgUHJpbnQoTCIgICAgICBVRUZJX0lNQUdFICAgICAgICAgICAgICAgIC0gMHglbHhcbiIsIEN1 cnJlbnRJbWFnZUluZm8tDQo+ID5BdHRyaWJ1dGVzU2V0dGluZyAmIElNQUdFX0FUVFJJQlVURV9V RUZJX0lNQUdFKTsNCj4gKyAgICBQcmludChMIiAgICBDb21wYXRpYmlsaXRpZXMgICAgICAgICAg ICAgLSAweCVseFxuIiwgQ3VycmVudEltYWdlSW5mby0NCj4gPkNvbXBhdGliaWxpdGllcyk7DQo+ ICsgICAgUHJpbnQoTCIgICAgICBDT01QQVRJQl9DSEVDS19TVVBQT1JURUQgIC0gMHglbHhcbiIs IEN1cnJlbnRJbWFnZUluZm8tDQo+ID5Db21wYXRpYmlsaXRpZXMgJiBJTUFHRV9DT01QQVRJQklM SVRZX0NIRUNLX1NVUFBPUlRFRCk7DQo+ICsgICAgaWYgKERlc2NyaXB0b3JWZXJzaW9uID4gMSkg ew0KPiArICAgICAgUHJpbnQoTCIgICAgTG93ZXN0U3VwcG9ydGVkSW1hZ2VWZXJzaW9uIC0gMHgl eFxuIiwgQ3VycmVudEltYWdlSW5mby0NCj4gPkxvd2VzdFN1cHBvcnRlZEltYWdlVmVyc2lvbik7 DQo+ICsgICAgICBpZiAoRGVzY3JpcHRvclZlcnNpb24gPiAyKSB7DQo+ICsgICAgICAgIFByaW50 KEwiICAgIExhc3RBdHRlbXB0VmVyc2lvbiAgICAgICAgICAtIDB4JXhcbiIsIEN1cnJlbnRJbWFn ZUluZm8tDQo+ID5MYXN0QXR0ZW1wdFZlcnNpb24pOw0KPiArICAgICAgICBQcmludChMIiAgICBM YXN0QXR0ZW1wdFN0YXR1cyAgICAgICAgICAgLSAweCV4ICglYSlcbiIsIEN1cnJlbnRJbWFnZUlu Zm8tDQo+ID5MYXN0QXR0ZW1wdFN0YXR1cywgTGFzdEF0dGVtcHRTdGF0dXNUb1N0cmluZyhDdXJy ZW50SW1hZ2VJbmZvLT5MYXN0QXR0ZW1wdFN0YXR1cykpOw0KPiArICAgICAgICBQcmludChMIiAg ICBIYXJkd2FyZUluc3RhbmNlICAgICAgICAgICAgLSAweCVseFxuIiwgQ3VycmVudEltYWdlSW5m by0NCj4gPkhhcmR3YXJlSW5zdGFuY2UpOw0KPiArICAgICAgfQ0KPiArICAgIH0NCj4gKyAgICAv Lw0KPiArICAgIC8vIFVzZSBEZXNjcmlwdG9yU2l6ZSB0byBtb3ZlIEltYWdlSW5mbyBQb2ludGVy IHRvIHN0YXkgY29tcGF0aWJsZSB3aXRoIGRpZmZlcmVudA0KPiBJbWFnZUluZm8gdmVyc2lvbg0K PiArICAgIC8vDQo+ICsgICAgQ3VycmVudEltYWdlSW5mbyA9IChFRklfRklSTVdBUkVfSU1BR0Vf REVTQ1JJUFRPUiAqKSgoVUlOVDggKilDdXJyZW50SW1hZ2VJbmZvICsNCj4gRGVzY3JpcHRvclNp emUpOw0KPiArICB9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBEdW1wIEZNUCBwYWNrYWdlIGlu Zm9ybWF0aW9uLg0KPiArDQo+ICsgIEBwYXJhbSBQYWNrYWdlVmVyc2lvbiAgICAgICAgICAgICBU aGUgdmVyc2lvbiBvZiBwYWNrYWdlLg0KPiArICBAcGFyYW0gUGFja2FnZVZlcnNpb25OYW1lICAg ICAgICAgVGhlIHZlcnNpb24gbmFtZSBvZiBwYWNrYWdlLg0KPiArICBAcGFyYW0gUGFja2FnZVZl cnNpb25OYW1lTWF4TGVuICAgVGhlIG1heGltdW0gbGVuZ3RoIG9mIFBhY2thZ2VWZXJzaW9uTmFt ZS4NCj4gKyAgQHBhcmFtIEF0dHJpYnV0ZXNTdXBwb3J0ZWQgICAgICAgIFBhY2thZ2UgYXR0cmli dXRlcyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgdGhpcw0KPiBkZXZpY2UuDQo+ICsgIEBwYXJhbSBB dHRyaWJ1dGVzU2V0dGluZyAgICAgICAgICBQYWNrYWdlIGF0dHJpYnV0ZXMuDQo+ICsqKi8NCj4g K1ZPSUQNCj4gK0R1bXBGbXBQYWNrYWdlSW5mbygNCj4gKyAgSU4gVUlOVDMyICAgICAgICAgICAg ICAgICAgICAgICAgICAgUGFja2FnZVZlcnNpb24sDQo+ICsgIElOIENIQVIxNiAgICAgICAgICAg ICAgICAgICAgICAgICAgICpQYWNrYWdlVmVyc2lvbk5hbWUsDQo+ICsgIElOIFVJTlQzMiAgICAg ICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VWZXJzaW9uTmFtZU1heExlbiwNCj4gKyAgSU4g VUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlc1N1cHBvcnRlZCwNCj4g KyAgSU4gVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlc1NldHRpbmcN Cj4gKyAgKQ0KPiArew0KPiArICBQcmludChMIiAgUGFja2FnZVZlcnNpb24gICAgICAgICAgICAg IC0gMHgleFxuIiwgUGFja2FnZVZlcnNpb24pOw0KPiArICBQcmludChMIiAgUGFja2FnZVZlcnNp b25OYW1lICAgICAgICAgIC0gXCIlc1wiXG4iLCBQYWNrYWdlVmVyc2lvbk5hbWUpOw0KPiArICBQ cmludChMIiAgUGFja2FnZVZlcnNpb25OYW1lTWF4TGVuICAgIC0gMHgleFxuIiwgUGFja2FnZVZl cnNpb25OYW1lTWF4TGVuKTsNCj4gKyAgUHJpbnQoTCIgIEF0dHJpYnV0ZXNTdXBwb3J0ZWQgICAg ICAgICAtIDB4JWx4XG4iLCBBdHRyaWJ1dGVzU3VwcG9ydGVkKTsNCj4gKyAgUHJpbnQoTCIgICAg SU1BR0VfVVBEQVRBQkxFICAgICAgICAgICAtIDB4JWx4XG4iLCBBdHRyaWJ1dGVzU3VwcG9ydGVk ICYNCj4gSU1BR0VfQVRUUklCVVRFX0lNQUdFX1VQREFUQUJMRSk7DQo+ICsgIFByaW50KEwiICAg IFJFU0VUX1JFUVVJUkVEICAgICAgICAgICAgLSAweCVseFxuIiwgQXR0cmlidXRlc1N1cHBvcnRl ZCAmDQo+IElNQUdFX0FUVFJJQlVURV9SRVNFVF9SRVFVSVJFRCk7DQo+ICsgIFByaW50KEwiICAg IEFVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEICAgLSAweCVseFxuIiwgQXR0cmlidXRlc1N1cHBvcnRl ZCAmDQo+IElNQUdFX0FUVFJJQlVURV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRCk7DQo+ICsgIFBy aW50KEwiICBBdHRyaWJ1dGVzU2V0dGluZyAgICAgICAgICAgLSAweCVseFxuIiwgQXR0cmlidXRl c1NldHRpbmcpOw0KPiArICBQcmludChMIiAgICBJTUFHRV9VUERBVEFCTEUgICAgICAgICAgIC0g MHglbHhcbiIsIEF0dHJpYnV0ZXNTZXR0aW5nICYNCj4gSU1BR0VfQVRUUklCVVRFX0lNQUdFX1VQ REFUQUJMRSk7DQo+ICsgIFByaW50KEwiICAgIFJFU0VUX1JFUVVJUkVEICAgICAgICAgICAgLSAw eCVseFxuIiwgQXR0cmlidXRlc1NldHRpbmcgJg0KPiBJTUFHRV9BVFRSSUJVVEVfUkVTRVRfUkVR VUlSRUQpOw0KPiArICBQcmludChMIiAgICBBVVRIRU5USUNBVElPTl9SRVFVSVJFRCAgIC0gMHgl bHhcbiIsIEF0dHJpYnV0ZXNTZXR0aW5nICYNCj4gSU1BR0VfQVRUUklCVVRFX0FVVEhFTlRJQ0FU SU9OX1JFUVVJUkVEKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIER1bXAgRk1QIHByb3RvY29s IGluZm8uDQo+ICsqKi8NCj4gK1ZPSUQNCj4gK0R1bXBGbXBEYXRhICgNCj4gKyAgVk9JRA0KPiAr ICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBTdGF0dXM7DQo+ICsgIEVGSV9GSVJNV0FSRV9NQU5BR0VNRU5UX1BST1RPQ09MICAgICAg ICAgICAgICAqRm1wOw0KPiArICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKkhhbmRsZUJ1ZmZlcjsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE51bWJlck9mSGFuZGxlczsNCj4gKyAgVUlOVE4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiArICBFRklfRklSTVdBUkVf SU1BR0VfREVTQ1JJUFRPUiAgICAgICAgICAgICAgICAgKkZtcEltYWdlSW5mb0J1ZjsNCj4gKyAg VUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlSW5mb1Np emU7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG bXBJbWFnZUluZm9EZXNjcmlwdG9yVmVyOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRm1wSW1hZ2VJbmZvQ291bnQ7DQo+ICsgIFVJTlROICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdG9yU2l6ZTsNCj4gKyAg VUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VWZXJz aW9uOw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KlBhY2thZ2VWZXJzaW9uTmFtZTsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFBhY2thZ2VWZXJzaW9uTmFtZU1heExlbjsNCj4gKyAgVUlOVDY0ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZXNTdXBwb3J0ZWQ7 DQo+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRy aWJ1dGVzU2V0dGluZzsNCj4gKw0KPiArICBQcmludChMIiMjIyMjIyMjIyMjI1xuIik7DQo+ICsg IFByaW50KEwiIyBGTVAgREFUQSAjXG4iKTsNCj4gKyAgUHJpbnQoTCIjIyMjIyMjIyMjIyNcbiIp Ow0KPiArICBTdGF0dXMgPSBnQlMtPkxvY2F0ZUhhbmRsZUJ1ZmZlciAoDQo+ICsgICAgICAgICAg ICAgICAgICBCeVByb3RvY29sLA0KPiArICAgICAgICAgICAgICAgICAgJmdFZmlGaXJtd2FyZU1h bmFnZW1lbnRQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgICBOVUxMLA0KPiArICAg ICAgICAgICAgICAgICAgJk51bWJlck9mSGFuZGxlcywNCj4gKyAgICAgICAgICAgICAgICAgICZI YW5kbGVCdWZmZXINCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1Io U3RhdHVzKSkgew0KPiArICAgIFByaW50KEwiRk1QIHByb3RvY29sIC0gJXJcbiIsIEVGSV9OT1Rf Rk9VTkQpOw0KPiArICAgIHJldHVybjsNCj4gKyAgfQ0KPiArDQo+ICsgIGZvciAoSW5kZXggPSAw OyBJbmRleCA8IE51bWJlck9mSGFuZGxlczsgSW5kZXgrKykgew0KPiArICAgIFN0YXR1cyA9IGdC Uy0+SGFuZGxlUHJvdG9jb2woDQo+ICsgICAgICAgICAgICAgICAgICAgIEhhbmRsZUJ1ZmZlcltJ bmRleF0sDQo+ICsgICAgICAgICAgICAgICAgICAgICZnRWZpRmlybXdhcmVNYW5hZ2VtZW50UHJv dG9jb2xHdWlkLA0KPiArICAgICAgICAgICAgICAgICAgICAoVk9JRCAqKikmRm1wDQo+ICsgICAg ICAgICAgICAgICAgICAgICk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsg ICAgICBjb250aW51ZTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBJbWFnZUluZm9TaXplID0gMDsN Cj4gKyAgICBTdGF0dXMgPSBGbXAtPkdldEltYWdlSW5mbyAoDQo+ICsgICAgICAgICAgICAgICAg ICAgIEZtcCwNCj4gKyAgICAgICAgICAgICAgICAgICAgJkltYWdlSW5mb1NpemUsDQo+ICsgICAg ICAgICAgICAgICAgICAgIE5VTEwsDQo+ICsgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ICsg ICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ICsgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ ICsgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ICsgICAgICAgICAgICAgICAgICAgIE5VTEwN Cj4gKyAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICBpZiAoU3RhdHVzICE9IEVGSV9CVUZG RVJfVE9PX1NNQUxMKSB7DQo+ICsgICAgICBjb250aW51ZTsNCj4gKyAgICB9DQo+ICsNCj4gKyAg ICBGbXBJbWFnZUluZm9CdWYgPSBOVUxMOw0KPiArICAgIEZtcEltYWdlSW5mb0J1ZiA9IEFsbG9j YXRlWmVyb1Bvb2wgKEltYWdlSW5mb1NpemUpOw0KPiArICAgIGlmIChGbXBJbWFnZUluZm9CdWYg PT0gTlVMTCkgew0KPiArICAgICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICsg ICAgICBnb3RvIEVYSVQ7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgUGFja2FnZVZlcnNpb25OYW1l ID0gTlVMTDsNCj4gKyAgICBTdGF0dXMgPSBGbXAtPkdldEltYWdlSW5mbyAoDQo+ICsgICAgICAg ICAgICAgICAgICAgIEZtcCwNCj4gKyAgICAgICAgICAgICAgICAgICAgJkltYWdlSW5mb1NpemUs ICAgICAgICAgICAgICAgLy8gSW1hZ2VJbmZvU2l6ZQ0KPiArICAgICAgICAgICAgICAgICAgICBG bXBJbWFnZUluZm9CdWYsICAgICAgICAgICAgICAvLyBJbWFnZUluZm8NCj4gKyAgICAgICAgICAg ICAgICAgICAgJkZtcEltYWdlSW5mb0Rlc2NyaXB0b3JWZXIsICAgLy8gRGVzY3JpcHRvclZlcnNp b24NCj4gKyAgICAgICAgICAgICAgICAgICAgJkZtcEltYWdlSW5mb0NvdW50LCAgICAgICAgICAg Ly8gRGVzY3JpcHRvckNvdW50DQo+ICsgICAgICAgICAgICAgICAgICAgICZEZXNjcmlwdG9yU2l6 ZSwgICAgICAgICAgICAgIC8vIERlc2NyaXB0b3JTaXplDQo+ICsgICAgICAgICAgICAgICAgICAg ICZQYWNrYWdlVmVyc2lvbiwgICAgICAgICAgICAgIC8vIFBhY2thZ2VWZXJzaW9uDQo+ICsgICAg ICAgICAgICAgICAgICAgICZQYWNrYWdlVmVyc2lvbk5hbWUgICAgICAgICAgIC8vIFBhY2thZ2VW ZXJzaW9uTmFtZQ0KPiArICAgICAgICAgICAgICAgICAgICApOw0KPiArDQo+ICsgICAgLy8NCj4g KyAgICAvLyBJZiBGTVAgR2V0SW5mb3JtYXRpb24gaW50ZXJmYWNlIGZhaWxlZCwgc2tpcCB0aGlz IHJlc291cmNlDQo+ICsgICAgLy8NCj4gKyAgICBpZiAoRUZJX0VSUk9SKFN0YXR1cykpIHsNCj4g KyAgICAgIFByaW50KEwiRk1QICglZCkgSW1hZ2VJbmZvIC0gJXJcbiIsIEluZGV4LCBTdGF0dXMp Ow0KPiArICAgICAgRnJlZVBvb2woRm1wSW1hZ2VJbmZvQnVmKTsNCj4gKyAgICAgIGNvbnRpbnVl Ow0KPiArICAgIH0NCj4gKw0KPiArICAgIFByaW50KEwiRk1QICglZCkgSW1hZ2VJbmZvOlxuIiwg SW5kZXgpOw0KPiArICAgIER1bXBGbXBJbWFnZUluZm8oDQo+ICsgICAgICBJbWFnZUluZm9TaXpl LCAgICAgICAgICAgICAgIC8vIEltYWdlSW5mb1NpemUNCj4gKyAgICAgIEZtcEltYWdlSW5mb0J1 ZiwgICAgICAgICAgICAgLy8gSW1hZ2VJbmZvDQo+ICsgICAgICBGbXBJbWFnZUluZm9EZXNjcmlw dG9yVmVyLCAgIC8vIERlc2NyaXB0b3JWZXJzaW9uDQo+ICsgICAgICBGbXBJbWFnZUluZm9Db3Vu dCwgICAgICAgICAgIC8vIERlc2NyaXB0b3JDb3VudA0KPiArICAgICAgRGVzY3JpcHRvclNpemUs ICAgICAgICAgICAgICAvLyBEZXNjcmlwdG9yU2l6ZQ0KPiArICAgICAgUGFja2FnZVZlcnNpb24s ICAgICAgICAgICAgICAvLyBQYWNrYWdlVmVyc2lvbg0KPiArICAgICAgUGFja2FnZVZlcnNpb25O YW1lICAgICAgICAgICAvLyBQYWNrYWdlVmVyc2lvbk5hbWUNCj4gKyAgICAgICk7DQo+ICsNCj4g KyAgICBpZiAoUGFja2FnZVZlcnNpb25OYW1lICE9IE5VTEwpIHsNCj4gKyAgICAgIEZyZWVQb29s KFBhY2thZ2VWZXJzaW9uTmFtZSk7DQo+ICsgICAgfQ0KPiArICAgIEZyZWVQb29sKEZtcEltYWdl SW5mb0J1Zik7DQo+ICsNCj4gKyAgICAvLw0KPiArICAgIC8vIEdldCBwYWNrYWdlIGluZm8NCj4g KyAgICAvLw0KPiArICAgIFBhY2thZ2VWZXJzaW9uTmFtZSA9IE5VTEw7DQo+ICsgICAgU3RhdHVz ID0gRm1wLT5HZXRQYWNrYWdlSW5mbyAoDQo+ICsgICAgICAgICAgICAgICAgICAgIEZtcCwNCj4g KyAgICAgICAgICAgICAgICAgICAgJlBhY2thZ2VWZXJzaW9uLCAgICAgICAgICAgICAgLy8gUGFj a2FnZVZlcnNpb24NCj4gKyAgICAgICAgICAgICAgICAgICAgJlBhY2thZ2VWZXJzaW9uTmFtZSwg ICAgICAgICAgLy8gUGFja2FnZVZlcnNpb25OYW1lDQo+ICsgICAgICAgICAgICAgICAgICAgICZQ YWNrYWdlVmVyc2lvbk5hbWVNYXhMZW4sICAgIC8vIFBhY2thZ2VWZXJzaW9uTmFtZU1heExlbg0K PiArICAgICAgICAgICAgICAgICAgICAmQXR0cmlidXRlc1N1cHBvcnRlZCwgICAgICAgICAvLyBB dHRyaWJ1dGVzU3VwcG9ydGVkDQo+ICsgICAgICAgICAgICAgICAgICAgICZBdHRyaWJ1dGVzU2V0 dGluZyAgICAgICAgICAgIC8vIEF0dHJpYnV0ZXNTZXR0aW5nDQo+ICsgICAgICAgICAgICAgICAg ICAgICk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgICBQcmludChM IkZNUCAoJWQpIFBhY2thZ2VJbmZvIC0gJXJcbiIsIEluZGV4LCBTdGF0dXMpOw0KPiArICAgIH0g ZWxzZSB7DQo+ICsgICAgICBQcmludChMIkZNUCAoJWQpIEltYWdlSW5mbzpcbiIsIEluZGV4KTsN Cj4gKyAgICAgIER1bXBGbXBQYWNrYWdlSW5mbygNCj4gKyAgICAgICAgUGFja2FnZVZlcnNpb24s ICAgICAgICAgICAgICAvLyBQYWNrYWdlVmVyc2lvbg0KPiArICAgICAgICBQYWNrYWdlVmVyc2lv bk5hbWUsICAgICAgICAgIC8vIFBhY2thZ2VWZXJzaW9uTmFtZQ0KPiArICAgICAgICBQYWNrYWdl VmVyc2lvbk5hbWVNYXhMZW4sICAgIC8vIFBhY2thZ2VWZXJzaW9uTmFtZU1heExlbg0KPiArICAg ICAgICBBdHRyaWJ1dGVzU3VwcG9ydGVkLCAgICAgICAgIC8vIEF0dHJpYnV0ZXNTdXBwb3J0ZWQN Cj4gKyAgICAgICAgQXR0cmlidXRlc1NldHRpbmcgICAgICAgICAgICAvLyBBdHRyaWJ1dGVzU2V0 dGluZw0KPiArICAgICAgICApOw0KPiArDQo+ICsgICAgICBpZiAoUGFja2FnZVZlcnNpb25OYW1l ICE9IE5VTEwpIHsNCj4gKyAgICAgICAgRnJlZVBvb2woUGFja2FnZVZlcnNpb25OYW1lKTsNCj4g KyAgICAgIH0NCj4gKyAgICB9DQo+ICsgIH0NCj4gKyAgUHJpbnQoTCJcbiIpOw0KPiArDQo+ICtF WElUOg0KPiArICBGcmVlUG9vbChIYW5kbGVCdWZmZXIpOw0KPiArfQ0KPiAtLQ0KPiAyLjcuNC53 aW5kb3dzLjENCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f DQplZGsyLWRldmVsIG1haWxpbmcgbGlzdA0KZWRrMi1kZXZlbEBsaXN0cy4wMS5vcmc8bWFpbHRv OmVkazItZGV2ZWxAbGlzdHMuMDEub3JnPg0KaHR0cHM6Ly9saXN0cy4wMS5vcmcvbWFpbG1hbi9s aXN0aW5mby9lZGsyLWRldmVsDQo=