From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=192.55.52.115; helo=mga14.intel.com; envelope-from=star.zeng@intel.com; receiver=edk2-devel@lists.01.org Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 9338B203B85BA for ; Tue, 22 May 2018 02:38:05 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 22 May 2018 02:38:04 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.49,429,1520924400"; d="scan'208";a="230738723" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by fmsmga006.fm.intel.com with ESMTP; 22 May 2018 02:38:04 -0700 Received: from shsmsx152.ccr.corp.intel.com (10.239.6.52) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.319.2; Tue, 22 May 2018 02:38:04 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.79]) by SHSMSX152.ccr.corp.intel.com ([169.254.6.6]) with mapi id 14.03.0319.002; Tue, 22 May 2018 17:38:01 +0800 From: "Zeng, Star" To: Ard Biesheuvel CC: "Bi, Dandan" , Laszlo Ersek , Andrew Fish , "Kinney, Michael D" , Leif Lindholm , "edk2-devel@lists.01.org" , "Gao, Liming" , Matt Sealey , "Zeng, Star" Thread-Topic: [edk2] [PATCH v2 3/8] MdeModulePkg/DxeCorePerformanceLib:Track FPDT record in DXE phase Thread-Index: AQHTmdHSnZvFDbcLrUGLMz6l1fjbn6QbGK+AgB/2qgCAAIsbgIAAhv+Q//98GgCAAI9XcA== Date: Tue, 22 May 2018 09:38:01 +0000 Message-ID: <0C09AFA07DD0434D9E2A0C6AEB0483103BAEE2BC@shsmsx102.ccr.corp.intel.com> References: <1517320437-11688-1-git-send-email-dandan.bi@intel.com> <1517320437-11688-4-git-send-email-dandan.bi@intel.com> <3C0D5C461C9E904E8F62152F6274C0BB3BAD755F@shsmsx102.ccr.corp.intel.com> <0C09AFA07DD0434D9E2A0C6AEB0483103BAEE227@shsmsx102.ccr.corp.intel.com> In-Reply-To: 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 Subject: Re: [PATCH v2 3/8] MdeModulePkg/DxeCorePerformanceLib:Track FPDT record in DXE phase X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 22 May 2018 09:38:05 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SXQgY29tZXMgdG8gYW4gb2xkIHF1ZXN0aW9uOiBob3cgdG8ga25vdyBQRUkgaXMgMzJiaXQvNjRi aXQ/IEJ1dCBub3QgRFhFIGlzIDMyYml0LzY0Yml0Lg0KDQpUaGFua3MsDQpTdGFyDQotLS0tLU9y aWdpbmFsIE1lc3NhZ2UtLS0tLQ0KRnJvbTogQXJkIEJpZXNoZXV2ZWwgW21haWx0bzphcmQuYmll c2hldXZlbEBsaW5hcm8ub3JnXSANClNlbnQ6IFR1ZXNkYXksIE1heSAyMiwgMjAxOCA1OjAzIFBN DQpUbzogWmVuZywgU3RhciA8c3Rhci56ZW5nQGludGVsLmNvbT4NCkNjOiBCaSwgRGFuZGFuIDxk YW5kYW4uYmlAaW50ZWwuY29tPjsgTGFzemxvIEVyc2VrIDxsZXJzZWtAcmVkaGF0LmNvbT47IEFu ZHJldyBGaXNoIDxhZmlzaEBhcHBsZS5jb20+OyBLaW5uZXksIE1pY2hhZWwgRCA8bWljaGFlbC5k Lmtpbm5leUBpbnRlbC5jb20+OyBMZWlmIExpbmRob2xtIDxsZWlmLmxpbmRob2xtQGxpbmFyby5v cmc+OyBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZzsgR2FvLCBMaW1pbmcgPGxpbWluZy5nYW9AaW50 ZWwuY29tPjsgTWF0dCBTZWFsZXkgPG5la29AYmFrdWhhdHN1Lm5ldD4NClN1YmplY3Q6IFJlOiBb ZWRrMl0gW1BBVENIIHYyIDMvOF0gTWRlTW9kdWxlUGtnL0R4ZUNvcmVQZXJmb3JtYW5jZUxpYjpU cmFjayBGUERUIHJlY29yZCBpbiBEWEUgcGhhc2UNCg0KcGQgT24gMjIgTWF5IDIwMTggYXQgMTA6 NTgsIFplbmcsIFN0YXIgPHN0YXIuemVuZ0BpbnRlbC5jb20+IHdyb3RlOg0KPiBIb3cgYWJvdXQg dGhlIGNvZGUgdG8gdHJ5IGFsbG9jYXRpbmcgPDRHIG1lbW9yeSwgdGhlbiB0cnkgYWxsb2NhdGlu ZyBhbnkgbWVtb3J5IGlmIGZhaWxlZCB0byBhbGxvY2F0ZSA8NEcgbWVtb3J5Pw0KPg0KPiBGb3Ig ZXhhbXBsZSwgdGhlIGNvZGUgc25pcHBldCBpbiBTbWJpb3NEeGUuYy4NCj4NCj4gICAgIFBoeXNp Y2FsQWRkcmVzcyA9IDB4ZmZmZmZmZmY7DQo+ICAgICBTdGF0dXMgPSBnQlMtPkFsbG9jYXRlUGFn ZXMgKA0KPiAgICAgICAgICAgICAgICAgICAgIEFsbG9jYXRlTWF4QWRkcmVzcywNCj4gICAgICAg ICAgICAgICAgICAgICBFZmlSdW50aW1lU2VydmljZXNEYXRhLA0KPiAgICAgICAgICAgICAgICAg ICAgIEVGSV9TSVpFX1RPX1BBR0VTIChzaXplb2YgKFNNQklPU19UQUJMRV9FTlRSWV9QT0lOVCkp LA0KPiAgICAgICAgICAgICAgICAgICAgICZQaHlzaWNhbEFkZHJlc3MNCj4gICAgICAgICAgICAg ICAgICAgICApOw0KPiAgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiAgICAgICBERUJV RyAoKEVGSV9EX0VSUk9SLCAiU21iaW9zQ3JlYXRlVGFibGUgKCkgY291bGQgbm90IGFsbG9jYXRl IEVudHJ5UG9pbnRTdHJ1Y3R1cmUgPCA0R0JcbiIpKTsNCj4gICAgICAgU3RhdHVzID0gZ0JTLT5B bGxvY2F0ZVBhZ2VzICgNCj4gICAgICAgICAgICAgICAgICAgICAgIEFsbG9jYXRlQW55UGFnZXMs DQo+ICAgICAgICAgICAgICAgICAgICAgICBFZmlSdW50aW1lU2VydmljZXNEYXRhLA0KPiAgICAg ICAgICAgICAgICAgICAgICAgRUZJX1NJWkVfVE9fUEFHRVMgKHNpemVvZiAoU01CSU9TX1RBQkxF X0VOVFJZX1BPSU5UKSksDQo+ICAgICAgICAgICAgICAgICAgICAgICAmUGh5c2ljYWxBZGRyZXNz DQo+ICAgICAgICAgICAgICAgICAgICAgICApOw0KPiAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4gICAgICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ICAgICAgIH0N Cj4gICAgIH0NCj4NCg0KWWVzLCB0aGF0IHNob3VsZCBkbyB0aGUgdHJpY2suDQoNCkJ1dCBwZXJo YXBzIHdlIHNob3VsZCBhZGQgc29tZXRoaW5nIGxpa2UNCg0KQWxsb2NhdGVQZWlBY2Nlc3NpYmxl UGFnZXMoKQ0KDQp0byBNZW1vcnlBbGxvY2F0aW9uTGliLCB3aGljaCBqdXN0IHVzZXMgQWxsb2Nh dGVNYXhBZGRyZXNzIG9yDQpBbGxvY2F0ZUFueVBhZ2VzIGRlcGVuZGluZyBvbiB3aGV0aGVyIE1E RV9DUFVfWDY0IGlzICNkZWZpbmVkLg0KDQotLSANCkFyZC4NCg0KPiAtLS0tLU9yaWdpbmFsIE1l c3NhZ2UtLS0tLQ0KPiBGcm9tOiBBcmQgQmllc2hldXZlbCBbbWFpbHRvOmFyZC5iaWVzaGV1dmVs QGxpbmFyby5vcmddDQo+IFNlbnQ6IFR1ZXNkYXksIE1heSAyMiwgMjAxOCA0OjUyIFBNDQo+IFRv OiBCaSwgRGFuZGFuIDxkYW5kYW4uYmlAaW50ZWwuY29tPjsgTGFzemxvIEVyc2VrIDxsZXJzZWtA cmVkaGF0LmNvbT47IEFuZHJldyBGaXNoIDxhZmlzaEBhcHBsZS5jb20+OyBLaW5uZXksIE1pY2hh ZWwgRCA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+DQo+IENjOiBMZWlmIExpbmRob2xtIDxs ZWlmLmxpbmRob2xtQGxpbmFyby5vcmc+OyBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZzsgWmVuZywg U3RhciA8c3Rhci56ZW5nQGludGVsLmNvbT47IEdhbywgTGltaW5nIDxsaW1pbmcuZ2FvQGludGVs LmNvbT47IE1hdHQgU2VhbGV5IDxuZWtvQGJha3VoYXRzdS5uZXQ+DQo+IFN1YmplY3Q6IFJlOiBb ZWRrMl0gW1BBVENIIHYyIDMvOF0gTWRlTW9kdWxlUGtnL0R4ZUNvcmVQZXJmb3JtYW5jZUxpYjpU cmFjayBGUERUIHJlY29yZCBpbiBEWEUgcGhhc2UNCj4NCj4gKCsgTGFzemxvLCBBbmRyZXcsIE1p a2UpDQo+DQo+IE9uIDIyIE1heSAyMDE4IGF0IDAyOjMzLCBCaSwgRGFuZGFuIDxkYW5kYW4uYmlA aW50ZWwuY29tPiB3cm90ZToNCj4+IFNvcnJ5IGZvciB0aGUgZGVsYXllZCByZXNwb25zZS4NCj4+ DQo+PiBUaGUgYWxsb2NhdGVkICBwZXJmb3JtYW5jZSB0YWJsZSAoIGJlbG93IDRHICkgaXMgdG8g c2F2ZSB0aGUgYm9vdCBwZXJmb3JtYW5jZSBkYXRhIGluIG5vcm1hbCBib290IGFuZCBTMyBwaGFz ZS4NCj4+IFBFSU0gRmlybXdhcmVQZXJmb3JtYW5jZVBlaSB3aWxsIGdldCB0aGUgYWRkcmVzcyBv ZiB0aGUgcGVyZm9ybWFuY2UgdGFibGUgYW5kIHVwZGF0ZSB0aGUgcGVyZm9ybWFuY2UgZGF0ZSBv ZiBTMyBwaGFzZSB0byB0aGUgdGFibGUuDQo+PiBUaGUgYWRkcmVzcyBuZWVkIHRvIGJlIGhhbmRs ZWQgaW4gUEVJIHBoYXNlKDMyYml0KSwgdGhhdCdzIHRoZSBtYWluIHJlYXNvbiB3aHkgd2UgYWxs b2NhdGUgaXQgYmVsb3cgNEcuDQo+Pg0KPg0KPiBUaGUgMzItYml0IFBFSSArIDY0LWJpdCBEWEUg Y29tYm8gaXMgc3BlY2lmaWMgdG8gWDY0LiBZb3UgaGF2ZSBhZGRlZA0KPiBjb2RlIHRvIGEgZ2Vu ZXJpYyBsaWJyYXJ5IHRoYXQgQVNTRVJUKClzIGlmIGFsbG9jYXRpbmcgbWVtb3J5IGJlbG93IDQN Cj4gR0IgZmFpbHMsIGJyZWFraW5nIG5vbi1QQyBhcmNoaXRlY3R1cmVzLg0KPg0KPiBTbyBwbGVh c2UsIGZpeCB0aGlzLiBPciBhdCBsZWFzdCBzdWdnZXN0IGEgd2F5IGFyb3VuZCBpdCBzbyB0aGF0 IG90aGVyDQo+IGFyY2hpdGVjdHVyZXMgY2FuIGtlZXAgdXNpbmcgdGhpcyBsaWJyYXJ5Lg0KPg0K PiBUaGlzIGlzIGFub3RoZXIgY29uc2VxdWVuY2Ugb2Ygb3VyIGZhaWx1cmUgdG8gbW9kZWwgdGhl IHNwZWNpYWwgMzItYml0DQo+IFBFSS82NC1iaXQgRFhFIGNvbWJpbmF0aW9uIHVzaW5nIHByb3Bl ciBQSSBpbnRlcmZhY2VzLCByZXN1bHRpbmcgaW4NCj4gdGhlc2Uga2luZHMgb2YgYnJlYWthZ2Vz IGFuZCBvcGVuIGNvZGVkIDQgR0IgYWxsb2NhdGlvbnMgYWxsDQo+IHRocm91Z2hvdXQgdGhlIGNv ZGUuIENhbiB3ZSBwbGVhc2Ugd29yayBvbiBnZXR0aW5nIHRoaXMgZml4ZWQ/DQo+DQo+DQo+PiAt LS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPj4gRnJvbTogQXJkIEJpZXNoZXV2ZWwgW21haWx0 bzphcmQuYmllc2hldXZlbEBsaW5hcm8ub3JnXQ0KPj4gU2VudDogV2VkbmVzZGF5LCBNYXkgMiwg MjAxOCAxMjoyNyBBTQ0KPj4gVG86IEJpLCBEYW5kYW4gPGRhbmRhbi5iaUBpbnRlbC5jb20+OyBM ZWlmIExpbmRob2xtIDxsZWlmLmxpbmRob2xtQGxpbmFyby5vcmc+DQo+PiBDYzogZWRrMi1kZXZl bEBsaXN0cy4wMS5vcmc7IFplbmcsIFN0YXIgPHN0YXIuemVuZ0BpbnRlbC5jb20+OyBHYW8sIExp bWluZyA8bGltaW5nLmdhb0BpbnRlbC5jb20+OyBNYXR0IFNlYWxleSA8bmVrb0BiYWt1aGF0c3Uu bmV0Pg0KPj4gU3ViamVjdDogUmU6IFtlZGsyXSBbUEFUQ0ggdjIgMy84XSBNZGVNb2R1bGVQa2cv RHhlQ29yZVBlcmZvcm1hbmNlTGliOlRyYWNrIEZQRFQgcmVjb3JkIGluIERYRSBwaGFzZQ0KPj4N Cj4+IE9uIDMwIEphbnVhcnkgMjAxOCBhdCAxNDo1MywgRGFuZGFuIEJpIDxkYW5kYW4uYmlAaW50 ZWwuY29tPiB3cm90ZToNCj4+PiBWMjoNCj4+PiBVcGRhdGUgRHhlY29yZVBlcmZvcm1hbmNlTGli IHRvIHJlcG9ydCB0aGUgYm9vdCBwZXJmb3JtYW5jZSB0YWJsZQ0KPj4+IGFkZHJlc3MgaW5zdGVh ZCBvZiByZWNvcmRzIGNvbnRlbnRzLg0KPj4+DQo+Pj4gVXBkYXRlZCB0byBjb252ZXJ0IFByZWYg ZW50cnkgdG8gRlBEVCByZWNvcmQgaW4gRFhFIHBoYXNlIGFuZCB0aGVuDQo+Pj4gYWxsb2NhdGUg Ym9vdCBwZXJmb3JtYW5jZSB0YWJsZSB0byBzYXZlIHRoZSByZWNvcmQgYW5kIHJlcG9ydA0KPj4+ IHRoZSBhZGRyZXNzIG9mIGJvb3QgcGVyZm9ybWFuY2UgdGFibGUgdG8gRmlybXdhcmVQZXJmb3Jt YW5jZUR4ZS4NCj4+Pg0KPj4+IENjOiBMaW1pbmcgR2FvIDxsaW1pbmcuZ2FvQGludGVsLmNvbT4N Cj4+PiBDYzogU3RhciBaZW5nIDxzdGFyLnplbmdAaW50ZWwuY29tPg0KPj4+IENvbnRyaWJ1dGVk LXVuZGVyOiBUaWFub0NvcmUgQ29udHJpYnV0aW9uIEFncmVlbWVudCAxLjENCj4+PiBTaWduZWQt b2ZmLWJ5OiBEYW5kYW4gQmkgPGRhbmRhbi5iaUBpbnRlbC5jb20+DQo+Pj4gLS0tDQo+Pj4gIC4u Li9EeGVDb3JlUGVyZm9ybWFuY2VMaWIvRHhlQ29yZVBlcmZvcm1hbmNlTGliLmMgIHwgMTM4OSAr KysrKysrKysrKysrKystLS0tLQ0KPj4+ICAuLi4vRHhlQ29yZVBlcmZvcm1hbmNlTGliLmluZiAg ICAgICAgICAgICAgICAgICAgICB8ICAgMjAgKy0NCj4+PiAgLi4uL0R4ZUNvcmVQZXJmb3JtYW5j ZUxpYkludGVybmFsLmggICAgICAgICAgICAgICAgfCAgIDE3ICstDQo+Pj4gIDMgZmlsZXMgY2hh bmdlZCwgMTEwOCBpbnNlcnRpb25zKCspLCAzMTggZGVsZXRpb25zKC0pDQo+Pj4NCj4+PiBkaWZm IC0tZ2l0IGEvTWRlTW9kdWxlUGtnL0xpYnJhcnkvRHhlQ29yZVBlcmZvcm1hbmNlTGliL0R4ZUNv cmVQZXJmb3JtYW5jZUxpYi5jIGIvTWRlTW9kdWxlUGtnL0xpYnJhcnkvRHhlQ29yZVBlcmZvcm1h bmNlTGliL0R4ZUNvcmVQZXJmb3JtYW5jZUxpYi5jDQo+Pj4gaW5kZXggN2MwZTIwNy4uYzZmOGEx NiAxMDA2NDQNCj4+PiAtLS0gYS9NZGVNb2R1bGVQa2cvTGlicmFyeS9EeGVDb3JlUGVyZm9ybWFu Y2VMaWIvRHhlQ29yZVBlcmZvcm1hbmNlTGliLmMNCj4+PiArKysgYi9NZGVNb2R1bGVQa2cvTGli cmFyeS9EeGVDb3JlUGVyZm9ybWFuY2VMaWIvRHhlQ29yZVBlcmZvcm1hbmNlTGliLmMNCj4+PiBA QCAtOCwxMSArOCwxMSBAQA0KPj4+ICAgIHdoaWNoIGFyZSBjb25zdW1lZCBieSBEeGVQZXJmb3Jt YW5jZUxpYiB0byBsb2dnaW5nIHBlcmZvcm1hbmNlIGRhdGEgaW4gRFhFIHBoYXNlLg0KPj4+DQo+ Pj4gICAgVGhpcyBsaWJyYXJ5IGlzIG1haW5seSB1c2VkIGJ5IER4ZUNvcmUgdG8gc3RhcnQgcGVy Zm9ybWFuY2UgbG9nZ2luZyB0byBlbnN1cmUgdGhhdA0KPj4+ICAgIFBlcmZvcm1hbmNlIFByb3Rv Y29sIGlzIGluc3RhbGxlZCBhdCB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgRFhFIHBoYXNlLg0KPj4+ DQo+Pj4gLUNvcHlyaWdodCAoYykgMjAwNiAtIDIwMTcsIEludGVsIENvcnBvcmF0aW9uLiBBbGwg cmlnaHRzIHJlc2VydmVkLjxCUj4NCj4+PiArQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAxOCwgSW50 ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPj4+ICAoQykgQ29weXJp Z2h0IDIwMTYgSGV3bGV0dCBQYWNrYXJkIEVudGVycHJpc2UgRGV2ZWxvcG1lbnQgTFA8QlI+DQo+ Pj4gIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4+PiAgYXJl IGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlv bnMgb2YgdGhlIEJTRCBMaWNlbnNlDQo+Pj4gIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJp YnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUgZm91bmQgYXQNCj4+ PiAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPj4+IEBA IC0yMywyNyArMjMsNjUgQEAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBP RiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRC4NCj4+PiAgKiovDQo+Pj4NCj4+ Pg0KPj4+ICAjaW5jbHVkZSAiRHhlQ29yZVBlcmZvcm1hbmNlTGliSW50ZXJuYWwuaCINCj4+Pg0K Pj4+IC0NCj4+PiAgLy8NCj4+PiAtLy8gVGhlIGRhdGEgc3RydWN0dXJlIHRvIGhvbGQgZ2xvYmFs IHBlcmZvcm1hbmNlIGRhdGEuDQo+Pj4gKy8vIERhdGEgZm9yIEZQRFQgcGVyZm9ybWFuY2UgcmVj b3Jkcy4NCj4+PiAgLy8NCj4+PiAtR0FVR0VfREFUQV9IRUFERVIgICAgKm1HYXVnZURhdGE7DQo+ Pj4gKyNkZWZpbmUgU01NX0JPT1RfUkVDT1JEX0NPTU1fU0laRSAoT0ZGU0VUX09GIChFRklfU01N X0NPTU1VTklDQVRFX0hFQURFUiwgRGF0YSkgKyBzaXplb2YoU01NX0JPT1RfUkVDT1JEX0NPTU1V TklDQVRFKSkNCj4+PiArI2RlZmluZSBTVFJJTkdfU0laRSAgICAgICAgICAgICAoRURLSUlfU1RS SU5HX0VWRU5UX1JFQ09SRF9OQU1FX0xFTkdUSCAqIHNpemVvZiAoQ0hBUjgpKQ0KPj4+ICsjZGVm aW5lIE1BWF9SRUNPUkRfU0laRSAgICAgICAgIChzaXplb2YgKERZTkFNSUNfU1RSSU5HX0VWRU5U X1JFQ09SRCkgKyBTVFJJTkdfU0laRSkNCj4+PiArI2RlZmluZSBGSVJNV0FSRV9SRUNPUkRfQlVG RkVSICAweDEwMDAwDQo+Pj4gKyNkZWZpbmUgQ0FDSEVfSEFORExFX0dVSURfQ09VTlQgMHgxMDAw DQo+Pj4gKw0KPj4+ICtCT09UX1BFUkZPUk1BTkNFX1RBQkxFICAgICAgICAgICptQWNwaUJvb3RQ ZXJmb3JtYW5jZVRhYmxlID0gTlVMTDsNCj4+PiArQk9PVF9QRVJGT1JNQU5DRV9UQUJMRSAgICAg ICAgICBtQm9vdFBlcmZvcm1hbmNlVGFibGVUZW1wbGF0ZSA9IHsNCj4+PiArICB7DQo+Pj4gKyAg ICBFRklfQUNQSV81XzBfRlBEVF9CT09UX1BFUkZPUk1BTkNFX1RBQkxFX1NJR05BVFVSRSwNCj4+ PiArICAgIHNpemVvZiAoQk9PVF9QRVJGT1JNQU5DRV9UQUJMRSkNCj4+PiArICB9LA0KPj4+ICsg IHsNCj4+PiArICAgIHsNCj4+PiArICAgICAgRUZJX0FDUElfNV8wX0ZQRFRfUlVOVElNRV9SRUNP UkRfVFlQRV9GSVJNV0FSRV9CQVNJQ19CT09ULCAgICAvLyBUeXBlDQo+Pj4gKyAgICAgIHNpemVv ZiAoRUZJX0FDUElfNV8wX0ZQRFRfRklSTVdBUkVfQkFTSUNfQk9PVF9SRUNPUkQpLCAgICAgICAg Ly8gTGVuZ3RoDQo+Pj4gKyAgICAgIEVGSV9BQ1BJXzVfMF9GUERUX1JVTlRJTUVfUkVDT1JEX1JF VklTSU9OX0ZJUk1XQVJFX0JBU0lDX0JPT1QgLy8gUmV2aXNpb24NCj4+PiArICAgIH0sDQo+Pj4g KyAgICAwLCAgLy8gUmVzZXJ2ZWQNCj4+PiArICAgIC8vDQo+Pj4gKyAgICAvLyBUaGVzZSB2YWx1 ZXMgd2lsbCBiZSB1cGRhdGVkIGF0IHJ1bnRpbWUuDQo+Pj4gKyAgICAvLw0KPj4+ICsgICAgMCwg IC8vIFJlc2V0RW5kDQo+Pj4gKyAgICAwLCAgLy8gT3NMb2FkZXJMb2FkSW1hZ2VTdGFydA0KPj4+ ICsgICAgMCwgIC8vIE9zTG9hZGVyU3RhcnRJbWFnZVN0YXJ0DQo+Pj4gKyAgICAwLCAgLy8gRXhp dEJvb3RTZXJ2aWNlc0VudHJ5DQo+Pj4gKyAgICAwICAgLy8gRXhpdEJvb3RTZXJ2aWNlc0V4aXQN Cj4+PiArICB9DQo+Pj4gK307DQo+Pj4NCj4+PiAtLy8NCj4+PiAtLy8gVGhlIGN1cnJlbnQgbWF4 aW11bSBudW1iZXIgb2YgbG9nZ2luZyBlbnRyaWVzLiBJZiBjdXJyZW50IG51bWJlciBvZg0KPj4+ IC0vLyBlbnRyaWVzIGV4Y2VlZHMgdGhpcyB2YWx1ZSwgaXQgd2lsbCByZS1hbGxvY2F0ZSBhIGxh cmdlciBhcnJheSBhbmQNCj4+PiAtLy8gbWlncmF0aW9uIHRoZSBvbGQgZGF0YSB0byB0aGUgbGFy Z2VyIGFycmF5Lg0KPj4+IC0vLw0KPj4+IC1VSU5UMzIgICAgICAgICAgICAgICBtTWF4R2F1Z2VS ZWNvcmRzOw0KPj4+ICt0eXBlZGVmIHN0cnVjdCB7DQo+Pj4gKyAgRUZJX0hBTkRMRSAgICBIYW5k bGU7DQo+Pj4gKyAgQ0hBUjggICAgICAgICBOYW1lU3RyaW5nW0VES0lJX1NUUklOR19FVkVOVF9S RUNPUkRfTkFNRV9MRU5HVEhdOw0KPj4+ICsgIEVGSV9HVUlEICAgICAgTW9kdWxlR3VpZDsNCj4+ PiArfSBIQU5ETEVfR1VJRF9NQVA7DQo+Pj4NCj4+PiAtLy8NCj4+PiAtLy8gVGhlIGhhbmRsZSB0 byBpbnN0YWxsIFBlcmZvcm1hbmNlIFByb3RvY29sIGluc3RhbmNlLg0KPj4+IC0vLw0KPj4+IC1F RklfSEFORExFICAgICAgICAgICBtSGFuZGxlID0gTlVMTDsNCj4+PiArSEFORExFX0dVSURfTUFQ IG1DYWNoZUhhbmRsZUd1aWRUYWJsZVtDQUNIRV9IQU5ETEVfR1VJRF9DT1VOVF07DQo+Pj4gK1VJ TlROICAgICAgICAgICBtQ2FjaGVQYWlyQ291bnQgPSAwOw0KPj4+ICsNCj4+PiArVUlOVDMyICBt TG9hZEltYWdlQ291bnQgICAgICAgPSAwOw0KPj4+ICtVSU5UMzIgIG1QZXJmb3JtYW5jZUxlbmd0 aCAgICA9IDA7DQo+Pj4gK1VJTlQzMiAgbU1heFBlcmZvcm1hbmNlTGVuZ3RoID0gMDsNCj4+PiAr VUlOVDMyICBtQm9vdFJlY29yZFNpemUgICAgICAgPSAwOw0KPj4+ICtVSU5UMzIgIG1Cb290UmVj b3JkTWF4U2l6ZSAgICA9IDA7DQo+Pj4gKw0KPj4+ICtCT09MRUFOIG1GcGR0QnVmZmVySXNSZXBv cnRlZCA9IEZBTFNFOw0KPj4+ICtCT09MRUFOIG1MYWNrU3BhY2VJc1JlcG9ydGVkICA9IEZBTFNF Ow0KPj4+ICtDSEFSOCAgICptUGxhdGZvcm1MYW5ndWFnZSAgICA9IE5VTEw7DQo+Pj4gK1VJTlQ4 ICAgKm1QZXJmb3JtYW5jZVBvaW50ZXIgID0gTlVMTDsNCj4+PiArVUlOVDggICAqbUJvb3RSZWNv cmRCdWZmZXIgICAgPSBOVUxMOw0KPj4+ICsNCj4+PiArRUZJX0RFVklDRV9QQVRIX1RPX1RFWFRf UFJPVE9DT0wgICptRGV2aWNlUGF0aFRvVGV4dCA9IE5VTEw7DQo+Pj4NCj4+PiAgLy8NCj4+PiAg Ly8gSW50ZXJmYWNlcyBmb3IgUGVyZm9ybWFuY2UgUHJvdG9jb2wuDQo+Pj4gIC8vDQo+Pj4gIFBF UkZPUk1BTkNFX1BST1RPQ09MIG1QZXJmb3JtYW5jZUludGVyZmFjZSA9IHsNCj4+PiBAQCAtNjEs MTc5ICs5OSwxMDY5IEBAIFBFUkZPUk1BTkNFX0VYX1BST1RPQ09MIG1QZXJmb3JtYW5jZUV4SW50 ZXJmYWNlID0gew0KPj4+ICAgIEdldEdhdWdlRXgNCj4+PiAgICB9Ow0KPj4+DQo+Pj4gIFBFUkZP Uk1BTkNFX1BST1BFUlRZICBtUGVyZm9ybWFuY2VQcm9wZXJ0eTsNCj4+Pg0KPj4+IC0vLw0KPj4+ IC0vLyAgR2F1Z2UgcmVjb3JkIGxvY2sgdG8gYXZvaWQgZGF0YSBjb3JydXB0aW9uIG9yIGV2ZW4g bWVtb3J5IG92ZXJmbG93DQo+Pj4gLS8vDQo+Pj4gLVNUQVRJQyBFRklfTE9DSyBtUGVyZlJlY29y ZExvY2sgPSBFRklfSU5JVElBTElaRV9MT0NLX1ZBUklBQkxFIChUUExfTk9USUZZKTsNCj4+PiAr LyoqDQo+Pj4gK0NoZWNrIHdoZXRoZXIgdGhlIFRva2VuIGlzIGEga25vd24gb25lIHdoaWNoIGlz IHVlc2VkIGJ5IGNvcmUuDQo+Pj4gKw0KPj4+ICtAcGFyYW0gIFRva2VuICAgICAgUG9pbnRlciB0 byBhIE51bGwtdGVybWluYXRlZCBBU0NJSSBzdHJpbmcNCj4+PiArDQo+Pj4gK0ByZXR2YWwgVFJV RSAgICAgICBJcyBhIGtub3duIG9uZSB1c2VkIGJ5IGNvcmUuDQo+Pj4gK0ByZXR2YWwgRkFMU0Ug ICAgICBOb3QgYSBrbm93biBvbmUuDQo+Pj4gKw0KPj4+ICsqKi8NCj4+PiArQk9PTEVBTg0KPj4+ ICtJc0tub3duVG9rZW5zICgNCj4+PiArICBJTiBDT05TVCBDSEFSOCAgKlRva2VuDQo+Pj4gKyAg KQ0KPj4+ICt7DQo+Pj4gKyAgaWYgKEFzY2lpU3RyQ21wIChUb2tlbiwgU0VDX1RPSykgPT0gMCB8 fA0KPj4+ICsgICAgICBBc2NpaVN0ckNtcCAoVG9rZW4sIFBFSV9UT0spID09IDAgfHwNCj4+PiAr ICAgICAgQXNjaWlTdHJDbXAgKFRva2VuLCBEWEVfVE9LKSA9PSAwIHx8DQo+Pj4gKyAgICAgIEFz Y2lpU3RyQ21wIChUb2tlbiwgQkRTX1RPSykgPT0gMCB8fA0KPj4+ICsgICAgICBBc2NpaVN0ckNt cCAoVG9rZW4sIERSSVZFUkJJTkRJTkdfU1RBUlRfVE9LKSA9PSAwIHx8DQo+Pj4gKyAgICAgIEFz Y2lpU3RyQ21wIChUb2tlbiwgRFJJVkVSQklORElOR19TVVBQT1JUX1RPSykgPT0gMCB8fA0KPj4+ ICsgICAgICBBc2NpaVN0ckNtcCAoVG9rZW4sIERSSVZFUkJJTkRJTkdfU1RPUF9UT0spID09IDAg fHwNCj4+PiArICAgICAgQXNjaWlTdHJDbXAgKFRva2VuLCBMT0FEX0lNQUdFX1RPSykgPT0gMCB8 fA0KPj4+ICsgICAgICBBc2NpaVN0ckNtcCAoVG9rZW4sIFNUQVJUX0lNQUdFX1RPSykgPT0gMCB8 fA0KPj4+ICsgICAgICBBc2NpaVN0ckNtcCAoVG9rZW4sIFBFSU1fVE9LKSA9PSAwKSB7DQo+Pj4g KyAgICByZXR1cm4gVFJVRTsNCj4+PiArICB9IGVsc2Ugew0KPj4+ICsgICAgcmV0dXJuIEZBTFNF Ow0KPj4+ICsgIH0NCj4+PiArfQ0KPj4+ICsNCj4+PiArLyoqDQo+Pj4gK0NoZWNrIHdoZXRoZXIg dGhlIElEIGlzIGEga25vd24gb25lIHdoaWNoIG1hcCB0byB0aGUga25vd24gVG9rZW4uDQo+Pj4g Kw0KPj4+ICtAcGFyYW0gIElkZW50aWZpZXIgIDMyLWJpdCBpZGVudGlmaWVyLg0KPj4+ICsNCj4+ PiArQHJldHZhbCBUUlVFICAgICAgICBJcyBhIGtub3duIG9uZSB1c2VkIGJ5IGNvcmUuDQo+Pj4g K0ByZXR2YWwgRkFMU0UgICAgICAgTm90IGEga25vd24gb25lLg0KPj4+ICsNCj4+PiArKiovDQo+ Pj4gK0JPT0xFQU4NCj4+PiArSXNLbm93bklEICgNCj4+PiArICBJTiBVSU5UMzIgICAgICAgSWRl bnRpZmllcg0KPj4+ICsgICkNCj4+PiArew0KPj4+ICsgIGlmIChJZGVudGlmaWVyID09IE1PRFVM RV9TVEFSVF9JRCB8fA0KPj4+ICsgICAgICBJZGVudGlmaWVyID09IE1PRFVMRV9FTkRfSUQgfHwN Cj4+PiArICAgICAgSWRlbnRpZmllciA9PSBNT0RVTEVfTE9BRElNQUdFX1NUQVJUX0lEIHx8DQo+ Pj4gKyAgICAgIElkZW50aWZpZXIgPT0gTU9EVUxFX0xPQURJTUFHRV9FTkRfSUQgfHwNCj4+PiAr ICAgICAgSWRlbnRpZmllciA9PSBNT0RVTEVfREJfU1RBUlRfSUQgfHwNCj4+PiArICAgICAgSWRl bnRpZmllciA9PSBNT0RVTEVfREJfRU5EX0lEIHx8DQo+Pj4gKyAgICAgIElkZW50aWZpZXIgPT0g TU9EVUxFX0RCX1NVUFBPUlRfU1RBUlRfSUQgfHwNCj4+PiArICAgICAgSWRlbnRpZmllciA9PSBN T0RVTEVfREJfU1VQUE9SVF9FTkRfSUQgfHwNCj4+PiArICAgICAgSWRlbnRpZmllciA9PSBNT0RV TEVfREJfU1RPUF9TVEFSVF9JRCB8fA0KPj4+ICsgICAgICBJZGVudGlmaWVyID09IE1PRFVMRV9E Ql9TVE9QX0VORF9JRCkgew0KPj4+ICsgICAgcmV0dXJuIFRSVUU7DQo+Pj4gKyAgfSBlbHNlIHsN Cj4+PiArICAgIHJldHVybiBGQUxTRTsNCj4+PiArICB9DQo+Pj4gK30NCj4+Pg0KPj4+ICAvKioN Cj4+PiAtICBTZWFyY2hlcyBpbiB0aGUgZ2F1Z2UgYXJyYXkgd2l0aCBrZXl3b3JkIEhhbmRsZSwg VG9rZW4sIE1vZHVsZSBhbmQgSWRlbnRpZmllci4NCj4+PiArICBBbGxvY2F0ZSBFZmlSZXNlcnZl ZE1lbW9yeVR5cGUgYmVsb3cgNEcgbWVtb3J5IGFkZHJlc3MuDQo+Pj4gKw0KPj4+ICsgIFRoaXMg ZnVuY3Rpb24gYWxsb2NhdGVzIEVmaVJlc2VydmVkTWVtb3J5VHlwZSBiZWxvdyA0RyBtZW1vcnkg YWRkcmVzcy4NCj4+PiArDQo+Pj4gKyAgQHBhcmFtW2luXSAgU2l6ZSAgIFNpemUgb2YgbWVtb3J5 IHRvIGFsbG9jYXRlLg0KPj4+ICsNCj4+PiArICBAcmV0dXJuIEFsbG9jYXRlZCBhZGRyZXNzIGZv ciBvdXRwdXQuDQo+Pj4gKw0KPj4+ICsqKi8NCj4+PiArVk9JRCAqDQo+Pj4gK0ZwZHRBbGxvY2F0 ZVJlc2VydmVkTWVtb3J5QmVsb3c0RyAoDQo+Pj4gKyAgSU4gVUlOVE4gICAgICAgU2l6ZQ0KPj4+ ICsgICkNCj4+PiArew0KPj4+ICsgIFVJTlROICAgICAgICAgICAgICAgICBQYWdlczsNCj4+PiAr ICBFRklfUEhZU0lDQUxfQUREUkVTUyAgQWRkcmVzczsNCj4+PiArICBFRklfU1RBVFVTICAgICAg ICAgICAgU3RhdHVzOw0KPj4+ICsgIFZPSUQgICAgICAgICAgICAgICAgICAqQnVmZmVyOw0KPj4+ ICsNCj4+PiArICBCdWZmZXIgID0gTlVMTDsNCj4+PiArICBQYWdlcyAgID0gRUZJX1NJWkVfVE9f UEFHRVMgKFNpemUpOw0KPj4+ICsgIEFkZHJlc3MgPSAweGZmZmZmZmZmOw0KPj4+ICsNCj4+PiAr ICBTdGF0dXMgPSBnQlMtPkFsbG9jYXRlUGFnZXMgKA0KPj4+ICsgICAgICAgICAgICAgICAgICBB bGxvY2F0ZU1heEFkZHJlc3MsDQo+Pj4gKyAgICAgICAgICAgICAgICAgIEVmaVJlc2VydmVkTWVt b3J5VHlwZSwNCj4+PiArICAgICAgICAgICAgICAgICAgUGFnZXMsDQo+Pj4gKyAgICAgICAgICAg ICAgICAgICZBZGRyZXNzDQo+Pj4gKyAgICAgICAgICAgICAgICAgICk7DQo+Pj4gKyAgQVNTRVJU X0VGSV9FUlJPUiAoU3RhdHVzKTsNCj4+DQo+PiBUaGlzIGNvZGUgaXMgYnJlYWtpbmcgREVCVUcg YnVpbGRzIG9uIEFSTSBzeXN0ZW1zIHRoYXQgaGF2ZSBubyBtZW1vcnkNCj4+IGJlbG93IDQgR0Iu DQo+Pg0KPj4+ICsNCj4+PiArICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4+ICsgICAg QnVmZmVyID0gKFZPSUQgKikgKFVJTlROKSBBZGRyZXNzOw0KPj4+ICsgICAgWmVyb01lbSAoQnVm ZmVyLCBTaXplKTsNCj4+PiArICB9DQo+Pj4gKw0KPj4+ICsgIHJldHVybiBCdWZmZXI7DQo+Pj4g K30NCj4+PiArDQo+Pj4gKy8qKg0KPj4+ICsgIEFsbG9jYXRlIGJ1ZmZlciBmb3IgQm9vdCBQZXJm b3JtYW5jZSB0YWJsZS4NCj4+PiArDQo+Pj4gKyAgQHJldHVybiBTdGF0dXMgY29kZS4NCj4+PiAr DQo+Pj4gKyoqLw0KPj4+ICtFRklfU1RBVFVTDQo+Pj4gK0FsbG9jYXRlQm9vdFBlcmZvcm1hbmNl VGFibGUgKA0KPj4+ICsgICkNCj4+PiArew0KPj4+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAg ICAgICAgIFN0YXR1czsNCj4+PiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBTaXpl Ow0KPj4+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICpTbW1Cb290UmVjb3JkQ29t bUJ1ZmZlcjsNCj4+PiArICBFRklfU01NX0NPTU1VTklDQVRFX0hFQURFUiAgICAqU21tQ29tbUJ1 ZmZlckhlYWRlcjsNCj4+PiArICBTTU1fQk9PVF9SRUNPUkRfQ09NTVVOSUNBVEUgICAqU21tQ29t bURhdGE7DQo+Pj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgQ29tbVNpemU7DQo+ Pj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgQm9vdFBlcmZvcm1hbmNlRGF0YVNp emU7DQo+Pj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgKkJvb3RQZXJmb3JtYW5j ZURhdGE7DQo+Pj4gKyAgRUZJX1NNTV9DT01NVU5JQ0FUSU9OX1BST1RPQ09MICAqQ29tbXVuaWNh dGlvbjsNCj4+PiArICBGSVJNV0FSRV9QRVJGT1JNQU5DRV9WQVJJQUJMRSBQZXJmb3JtYW5jZVZh cmlhYmxlOw0KPj4+ICsgIEVES0lJX1BJX1NNTV9DT01NVU5JQ0FUSU9OX1JFR0lPTl9UQUJMRSAq U21tQ29tbVJlZ2lvblRhYmxlOw0KPj4+ICsgIEVGSV9NRU1PUllfREVTQ1JJUFRPUiAgICAgICAg ICpTbW1Db21tTWVtUmVnaW9uOw0KPj4+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAg IEluZGV4Ow0KPj4+ICsgIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICpTbW1Cb290UmVj b3JkRGF0YTsNCj4+PiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBTbW1Cb290UmVj b3JkRGF0YVNpemU7DQo+Pj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2 ZWRNZW1TaXplOw0KPj4+ICsNCj4+PiArICAvLw0KPj4+ICsgIC8vIENvbGxlY3QgYm9vdCByZWNv cmRzIGZyb20gU01NIGRyaXZlcnMuDQo+Pj4gKyAgLy8NCj4+PiArICBTbW1Cb290UmVjb3JkQ29t bUJ1ZmZlciA9IE5VTEw7DQo+Pj4gKyAgU21tQ29tbURhdGEgICAgICAgICAgICAgPSBOVUxMOw0K Pj4+ICsgIFNtbUJvb3RSZWNvcmREYXRhICAgICAgID0gTlVMTDsNCj4+PiArICBTbW1Cb290UmVj b3JkRGF0YVNpemUgICA9IDA7DQo+Pj4gKyAgUmVzZXJ2ZWRNZW1TaXplICAgICAgICAgPSAwOw0K Pj4+ICsgIFN0YXR1cyA9IGdCUy0+TG9jYXRlUHJvdG9jb2wgKCZnRWZpU21tQ29tbXVuaWNhdGlv blByb3RvY29sR3VpZCwgTlVMTCwgKFZPSUQgKiopICZDb21tdW5pY2F0aW9uKTsNCj4+PiArICBp ZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4+ICsgICAgLy8NCj4+PiArICAgIC8vIEluaXRp YWxpemUgY29tbXVuaWNhdGUgYnVmZmVyDQo+Pj4gKyAgICAvLyBHZXQgdGhlIHByZXBhcmVkIFJl c2VydmVkIE1lbW9yeSBSYW5nZQ0KPj4+ICsgICAgLy8NCj4+PiArICAgIFN0YXR1cyA9IEVmaUdl dFN5c3RlbUNvbmZpZ3VyYXRpb25UYWJsZSAoDQo+Pj4gKyAgICAgICAgICAgICAgJmdFZGtpaVBp U21tQ29tbXVuaWNhdGlvblJlZ2lvblRhYmxlR3VpZCwNCj4+PiArICAgICAgICAgICAgICAoVk9J RCAqKikgJlNtbUNvbW1SZWdpb25UYWJsZQ0KPj4+ICsgICAgICAgICAgICAgICk7DQo+Pj4gKyAg ICBpZiAoIUVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPj4+ICsgICAgICBBU1NFUlQgKFNtbUNvbW1S ZWdpb25UYWJsZSAhPSBOVUxMKTsNCj4+PiArICAgICAgU21tQ29tbU1lbVJlZ2lvbiA9IChFRklf TUVNT1JZX0RFU0NSSVBUT1IgKikgKFNtbUNvbW1SZWdpb25UYWJsZSArIDEpOw0KPj4+ICsgICAg ICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBTbW1Db21tUmVnaW9uVGFibGUtPk51bWJlck9mRW50 cmllczsgSW5kZXggKyspIHsNCj4+PiArICAgICAgICBpZiAoU21tQ29tbU1lbVJlZ2lvbi0+VHlw ZSA9PSBFZmlDb252ZW50aW9uYWxNZW1vcnkpIHsNCj4+PiArICAgICAgICAgIGJyZWFrOw0KPj4+ ICsgICAgICAgIH0NCj4+PiArICAgICAgICBTbW1Db21tTWVtUmVnaW9uID0gKEVGSV9NRU1PUllf REVTQ1JJUFRPUiAqKSAoKFVJTlQ4ICopIFNtbUNvbW1NZW1SZWdpb24gKyBTbW1Db21tUmVnaW9u VGFibGUtPkRlc2NyaXB0b3JTaXplKTsNCj4+PiArICAgICAgfQ0KPj4+ICsgICAgICBBU1NFUlQg KEluZGV4IDwgU21tQ29tbVJlZ2lvblRhYmxlLT5OdW1iZXJPZkVudHJpZXMpOw0KPj4+ICsgICAg ICBBU1NFUlQgKFNtbUNvbW1NZW1SZWdpb24tPlBoeXNpY2FsU3RhcnQgPiAwKTsNCj4+PiArICAg ICAgQVNTRVJUIChTbW1Db21tTWVtUmVnaW9uLT5OdW1iZXJPZlBhZ2VzID4gMCk7DQo+Pj4gKyAg ICAgIFJlc2VydmVkTWVtU2l6ZSA9IChVSU5UTikgU21tQ29tbU1lbVJlZ2lvbi0+TnVtYmVyT2ZQ YWdlcyAqIEVGSV9QQUdFX1NJWkU7DQo+Pj4gKw0KPj4+ICsgICAgICAvLw0KPj4+ICsgICAgICAv LyBDaGVjayBlbm91Z2ggcmVzZXJ2ZWQgbWVtb3J5IHNwYWNlDQo+Pj4gKyAgICAgIC8vDQo+Pj4g KyAgICAgIGlmIChSZXNlcnZlZE1lbVNpemUgPiBTTU1fQk9PVF9SRUNPUkRfQ09NTV9TSVpFKSB7 DQo+Pj4gKyAgICAgICAgU21tQm9vdFJlY29yZENvbW1CdWZmZXIgPSAoVk9JRCAqKSAoVUlOVE4p IFNtbUNvbW1NZW1SZWdpb24tPlBoeXNpY2FsU3RhcnQ7DQo+Pj4gKyAgICAgICAgU21tQ29tbUJ1 ZmZlckhlYWRlciA9IChFRklfU01NX0NPTU1VTklDQVRFX0hFQURFUiopU21tQm9vdFJlY29yZENv bW1CdWZmZXI7DQo+Pj4gKyAgICAgICAgU21tQ29tbURhdGEgPSAoU01NX0JPT1RfUkVDT1JEX0NP TU1VTklDQVRFKilTbW1Db21tQnVmZmVySGVhZGVyLT5EYXRhOw0KPj4+ICsgICAgICAgIFplcm9N ZW0oKFVJTlQ4KilTbW1Db21tRGF0YSwgc2l6ZW9mKFNNTV9CT09UX1JFQ09SRF9DT01NVU5JQ0FU RSkpOw0KPj4+ICsNCj4+PiArICAgICAgICBDb3B5R3VpZCAoJlNtbUNvbW1CdWZmZXJIZWFkZXIt PkhlYWRlckd1aWQsICZnRWZpRmlybXdhcmVQZXJmb3JtYW5jZUd1aWQpOw0KPj4+ICsgICAgICAg IFNtbUNvbW1CdWZmZXJIZWFkZXItPk1lc3NhZ2VMZW5ndGggPSBzaXplb2YoU01NX0JPT1RfUkVD T1JEX0NPTU1VTklDQVRFKTsNCj4+PiArICAgICAgICBDb21tU2l6ZSA9IFNNTV9CT09UX1JFQ09S RF9DT01NX1NJWkU7DQo+Pj4gKw0KPj4+ICsgICAgICAgIC8vDQo+Pj4gKyAgICAgICAgLy8gR2V0 IHRoZSBzaXplIG9mIGJvb3QgcmVjb3Jkcy4NCj4+PiArICAgICAgICAvLw0KPj4+ICsgICAgICAg IFNtbUNvbW1EYXRhLT5GdW5jdGlvbiAgICAgICA9IFNNTV9GUERUX0ZVTkNUSU9OX0dFVF9CT09U X1JFQ09SRF9TSVpFOw0KPj4+ICsgICAgICAgIFNtbUNvbW1EYXRhLT5Cb290UmVjb3JkRGF0YSA9 IE5VTEw7DQo+Pj4gKyAgICAgICAgU3RhdHVzID0gQ29tbXVuaWNhdGlvbi0+Q29tbXVuaWNhdGUg KENvbW11bmljYXRpb24sIFNtbUJvb3RSZWNvcmRDb21tQnVmZmVyLCAmQ29tbVNpemUpOw0KPj4+ ICsgICAgICAgIEFTU0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+Pj4gKw0KPj4+ICsgICAgICAg IGlmICghRUZJX0VSUk9SIChTbW1Db21tRGF0YS0+UmV0dXJuU3RhdHVzKSAmJiBTbW1Db21tRGF0 YS0+Qm9vdFJlY29yZFNpemUgIT0gMCkgew0KPj4+ICsgICAgICAgICAgLy8NCj4+PiArICAgICAg ICAgIC8vIEdldCBhbGwgYm9vdCByZWNvcmRzDQo+Pj4gKyAgICAgICAgICAvLw0KPj4+ICsgICAg ICAgICAgU21tQ29tbURhdGEtPkZ1bmN0aW9uICAgICAgID0gU01NX0ZQRFRfRlVOQ1RJT05fR0VU X0JPT1RfUkVDT1JEX0RBVEFfQllfT0ZGU0VUOw0KPj4+ICsgICAgICAgICAgU21tQm9vdFJlY29y ZERhdGFTaXplICAgICAgID0gU21tQ29tbURhdGEtPkJvb3RSZWNvcmRTaXplOw0KPj4+ICsgICAg ICAgICAgU21tQm9vdFJlY29yZERhdGEgICAgICAgICAgID0gQWxsb2NhdGVaZXJvUG9vbChTbW1C b290UmVjb3JkRGF0YVNpemUpOw0KPj4+ICsgICAgICAgICAgQVNTRVJUIChTbW1Cb290UmVjb3Jk RGF0YSAgIT0gTlVMTCk7DQo+Pj4gKyAgICAgICAgICBTbW1Db21tRGF0YS0+Qm9vdFJlY29yZE9m ZnNldCA9IDA7DQo+Pj4gKyAgICAgICAgICBTbW1Db21tRGF0YS0+Qm9vdFJlY29yZERhdGEgICA9 IChWT0lEICopICgoVUlOVE4pIFNtbUNvbW1NZW1SZWdpb24tPlBoeXNpY2FsU3RhcnQgKyBTTU1f Qk9PVF9SRUNPUkRfQ09NTV9TSVpFKTsNCj4+PiArICAgICAgICAgIFNtbUNvbW1EYXRhLT5Cb290 UmVjb3JkU2l6ZSAgID0gUmVzZXJ2ZWRNZW1TaXplIC0gU01NX0JPT1RfUkVDT1JEX0NPTU1fU0la RTsNCj4+PiArICAgICAgICAgIHdoaWxlIChTbW1Db21tRGF0YS0+Qm9vdFJlY29yZE9mZnNldCA8 IFNtbUJvb3RSZWNvcmREYXRhU2l6ZSkgew0KPj4+ICsgICAgICAgICAgICBTdGF0dXMgPSBDb21t dW5pY2F0aW9uLT5Db21tdW5pY2F0ZSAoQ29tbXVuaWNhdGlvbiwgU21tQm9vdFJlY29yZENvbW1C dWZmZXIsICZDb21tU2l6ZSk7DQo+Pj4gKyAgICAgICAgICAgIEFTU0VSVF9FRklfRVJST1IgKFN0 YXR1cyk7DQo+Pj4gKyAgICAgICAgICAgIEFTU0VSVF9FRklfRVJST1IoU21tQ29tbURhdGEtPlJl dHVyblN0YXR1cyk7DQo+Pj4gKyAgICAgICAgICAgIGlmIChTbW1Db21tRGF0YS0+Qm9vdFJlY29y ZE9mZnNldCArIFNtbUNvbW1EYXRhLT5Cb290UmVjb3JkU2l6ZSA+IFNtbUJvb3RSZWNvcmREYXRh U2l6ZSkgew0KPj4+ICsgICAgICAgICAgICAgIENvcHlNZW0gKChVSU5UOCAqKSBTbW1Cb290UmVj b3JkRGF0YSArIFNtbUNvbW1EYXRhLT5Cb290UmVjb3JkT2Zmc2V0LCBTbW1Db21tRGF0YS0+Qm9v dFJlY29yZERhdGEsIFNtbUJvb3RSZWNvcmREYXRhU2l6ZSAtIFNtbUNvbW1EYXRhLT5Cb290UmVj b3JkT2Zmc2V0KTsNCj4+PiArICAgICAgICAgICAgfSBlbHNlIHsNCj4+PiArICAgICAgICAgICAg ICBDb3B5TWVtICgoVUlOVDggKikgU21tQm9vdFJlY29yZERhdGEgKyBTbW1Db21tRGF0YS0+Qm9v dFJlY29yZE9mZnNldCwgU21tQ29tbURhdGEtPkJvb3RSZWNvcmREYXRhLCBTbW1Db21tRGF0YS0+ Qm9vdFJlY29yZFNpemUpOw0KPj4+ICsgICAgICAgICAgICB9DQo+Pj4gKyAgICAgICAgICAgIFNt bUNvbW1EYXRhLT5Cb290UmVjb3JkT2Zmc2V0ID0gU21tQ29tbURhdGEtPkJvb3RSZWNvcmRPZmZz ZXQgKyBTbW1Db21tRGF0YS0+Qm9vdFJlY29yZFNpemU7DQo+Pj4gKyAgICAgICAgICB9DQo+Pj4g KyAgICAgICAgfQ0KPj4+ICsgICAgICB9DQo+Pj4gKyAgICB9DQo+Pj4gKyAgfQ0KPj4+ICsNCj4+ PiArICAvLw0KPj4+ICsgIC8vIFByZXBhcmUgbWVtb3J5IGZvciBCb290IFBlcmZvcm1hbmNlIHRh YmxlLg0KPj4+ICsgIC8vIEJvb3QgUGVyZm9ybWFuY2UgdGFibGUgaW5jbHVkZXMgQmFzaWNCb290 IHJlY29yZCwgYW5kIG9uZSBvciBtb3JlIGFwcGVuZGVkIEJvb3QgUmVjb3Jkcy4NCj4+PiArICAv Lw0KPj4+ICsgIEJvb3RQZXJmb3JtYW5jZURhdGFTaXplID0gc2l6ZW9mIChCT09UX1BFUkZPUk1B TkNFX1RBQkxFKSArIG1QZXJmb3JtYW5jZUxlbmd0aCArIFBjZEdldDMyIChQY2RFeHRGcGR0Qm9v dFJlY29yZFBhZFNpemUpOw0KPj4+ICsgIGlmIChTbW1Db21tRGF0YSAhPSBOVUxMKSB7DQo+Pj4g KyAgICBCb290UGVyZm9ybWFuY2VEYXRhU2l6ZSArPSBTbW1Cb290UmVjb3JkRGF0YVNpemU7DQo+ Pj4gKyAgfQ0KPj4+ICsNCj4+PiArICAvLw0KPj4+ICsgIC8vIFRyeSB0byBhbGxvY2F0ZSB0aGUg c2FtZSBydW50aW1lIGJ1ZmZlciBhcyBsYXN0IHRpbWUgYm9vdC4NCj4+PiArICAvLw0KPj4+ICsg IFplcm9NZW0gKCZQZXJmb3JtYW5jZVZhcmlhYmxlLCBzaXplb2YgKFBlcmZvcm1hbmNlVmFyaWFi bGUpKTsNCj4+PiArICBTaXplID0gc2l6ZW9mIChQZXJmb3JtYW5jZVZhcmlhYmxlKTsNCj4+PiAr ICBTdGF0dXMgPSBnUlQtPkdldFZhcmlhYmxlICgNCj4+PiArICAgICAgICAgICAgICAgICAgRUZJ X0ZJUk1XQVJFX1BFUkZPUk1BTkNFX1ZBUklBQkxFX05BTUUsDQo+Pj4gKyAgICAgICAgICAgICAg ICAgICZnRWZpRmlybXdhcmVQZXJmb3JtYW5jZUd1aWQsDQo+Pj4gKyAgICAgICAgICAgICAgICAg IE5VTEwsDQo+Pj4gKyAgICAgICAgICAgICAgICAgICZTaXplLA0KPj4+ICsgICAgICAgICAgICAg ICAgICAmUGVyZm9ybWFuY2VWYXJpYWJsZQ0KPj4+ICsgICAgICAgICAgICAgICAgICApOw0KPj4+ ICsgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+Pj4gKyAgICBTdGF0dXMgPSBnQlMtPkFs bG9jYXRlUGFnZXMgKA0KPj4+ICsgICAgICAgICAgICAgICAgICAgIEFsbG9jYXRlQWRkcmVzcywN Cj4+PiArICAgICAgICAgICAgICAgICAgICBFZmlSZXNlcnZlZE1lbW9yeVR5cGUsDQo+Pj4gKyAg ICAgICAgICAgICAgICAgICAgRUZJX1NJWkVfVE9fUEFHRVMgKEJvb3RQZXJmb3JtYW5jZURhdGFT aXplKSwNCj4+PiArICAgICAgICAgICAgICAgICAgICAmUGVyZm9ybWFuY2VWYXJpYWJsZS5Cb290 UGVyZm9ybWFuY2VUYWJsZVBvaW50ZXINCj4+PiArICAgICAgICAgICAgICAgICAgICApOw0KPj4+ ICsgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+PiArICAgICAgbUFjcGlCb290UGVy Zm9ybWFuY2VUYWJsZSA9IChCT09UX1BFUkZPUk1BTkNFX1RBQkxFICopIChVSU5UTikgUGVyZm9y bWFuY2VWYXJpYWJsZS5Cb290UGVyZm9ybWFuY2VUYWJsZVBvaW50ZXI7DQo+Pj4gKyAgICB9DQo+ Pj4gKyAgfQ0KPj4+ICsNCj4+PiArICBpZiAobUFjcGlCb290UGVyZm9ybWFuY2VUYWJsZSA9PSBO VUxMKSB7DQo+Pj4gKyAgICAvLw0KPj4+ICsgICAgLy8gRmFpbCB0byBhbGxvY2F0ZSBhdCBzcGVj aWZpZWQgYWRkcmVzcywgY29udGludWUgdG8gYWxsb2NhdGUgYXQgYW55IGFkZHJlc3MuDQo+Pj4g KyAgICAvLw0KPj4+ICsgICAgbUFjcGlCb290UGVyZm9ybWFuY2VUYWJsZSA9IChCT09UX1BFUkZP Uk1BTkNFX1RBQkxFICopIEZwZHRBbGxvY2F0ZVJlc2VydmVkTWVtb3J5QmVsb3c0RyAoQm9vdFBl cmZvcm1hbmNlRGF0YVNpemUpOw0KPj4NCj4+IFdoeSBkb2VzIHRoaXMgYWxsb2NhdGlvbiBuZWVk IHRvIGxpdmUgYmVsb3cgNCBHQj8NCj4+DQo+PiBJZiB0aGVyZSBpcyBubyBnb29kIHJlYXNvbiwg Y2FuIHdlIHBsZWFzZSBnZXQgcmlkIG9mIHRoaXM/DQo+PiBJZiB0aGVyZSBpcyBhIGdvb2QgcmVh c29uLCBjYW4gd2UgcGxlYXNlIGRvY3VtZW50IGl0IGluIHRoZSBjb2RlPw0KPj4NCj4+PiArICB9 DQo+Pj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiRHhlQ29yZVBlcmZvcm1hbmNlTGliOiBBQ1BJ IEJvb3QgUGVyZm9ybWFuY2UgVGFibGUgYWRkcmVzcyA9IDB4JXhcbiIsIG1BY3BpQm9vdFBlcmZv cm1hbmNlVGFibGUpKTsNCj4+PiArDQo+Pj4gKyAgaWYgKG1BY3BpQm9vdFBlcmZvcm1hbmNlVGFi bGUgPT0gTlVMTCkgew0KPj4+ICsgICAgaWYgKFNtbUNvbW1EYXRhICE9IE5VTEwgJiYgU21tQm9v dFJlY29yZERhdGEgIT0gTlVMTCkgew0KPj4+ICsgICAgICBGcmVlUG9vbCAoU21tQm9vdFJlY29y ZERhdGEpOw0KPj4+ICsgICAgfQ0KPj4+ICsgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VT Ow0KPj4+ICsgIH0NCj4+PiArDQo+Pj4gKyAgLy8NCj4+PiArICAvLyBQcmVwYXJlIEJvb3QgUGVy Zm9ybWFuY2UgVGFibGUuDQo+Pj4gKyAgLy8NCj4+PiArICBCb290UGVyZm9ybWFuY2VEYXRhID0g KFVJTlQ4ICopIG1BY3BpQm9vdFBlcmZvcm1hbmNlVGFibGU7DQo+Pj4gKyAgLy8NCj4+PiArICAv LyBGaWxsIEJhc2ljIEJvb3QgcmVjb3JkIHRvIEJvb3QgUGVyZm9ybWFuY2UgVGFibGUuDQo+Pj4g KyAgLy8NCj4+PiArICBDb3B5TWVtIChtQWNwaUJvb3RQZXJmb3JtYW5jZVRhYmxlLCAmbUJvb3RQ ZXJmb3JtYW5jZVRhYmxlVGVtcGxhdGUsIHNpemVvZiAobUJvb3RQZXJmb3JtYW5jZVRhYmxlVGVt cGxhdGUpKTsNCj4+PiArICBCb290UGVyZm9ybWFuY2VEYXRhID0gQm9vdFBlcmZvcm1hbmNlRGF0 YSArIG1BY3BpQm9vdFBlcmZvcm1hbmNlVGFibGUtPkhlYWRlci5MZW5ndGg7DQo+Pj4gKyAgLy8N Cj4+PiArICAvLyBGaWxsIEJvb3QgcmVjb3JkcyBmcm9tIGJvb3QgZHJpdmVycy4NCj4+PiArICAv Lw0KPj4+ICsgIGlmIChtUGVyZm9ybWFuY2VQb2ludGVyICE9IE5VTEwpIHsNCj4+PiArICAgIENv cHlNZW0gKEJvb3RQZXJmb3JtYW5jZURhdGEsIG1QZXJmb3JtYW5jZVBvaW50ZXIsIG1QZXJmb3Jt YW5jZUxlbmd0aCk7DQo+Pj4gKyAgICBtQWNwaUJvb3RQZXJmb3JtYW5jZVRhYmxlLT5IZWFkZXIu TGVuZ3RoICs9IG1QZXJmb3JtYW5jZUxlbmd0aDsNCj4+PiArICAgIEJvb3RQZXJmb3JtYW5jZURh dGEgPSBCb290UGVyZm9ybWFuY2VEYXRhICsgbVBlcmZvcm1hbmNlTGVuZ3RoOw0KPj4+ICsgIH0N Cj4+PiArICBpZiAoU21tQ29tbURhdGEgIT0gTlVMTCAmJiBTbW1Cb290UmVjb3JkRGF0YSAhPSBO VUxMKSB7DQo+Pj4gKyAgICAvLw0KPj4+ICsgICAgLy8gRmlsbCBCb290IHJlY29yZHMgZnJvbSBT TU0gZHJpdmVycy4NCj4+PiArICAgIC8vDQo+Pj4gKyAgICBDb3B5TWVtIChCb290UGVyZm9ybWFu Y2VEYXRhLCBTbW1Cb290UmVjb3JkRGF0YSwgU21tQm9vdFJlY29yZERhdGFTaXplKTsNCj4+PiAr ICAgIEZyZWVQb29sIChTbW1Cb290UmVjb3JkRGF0YSk7DQo+Pj4gKyAgICBtQWNwaUJvb3RQZXJm b3JtYW5jZVRhYmxlLT5IZWFkZXIuTGVuZ3RoID0gKFVJTlQzMikgKG1BY3BpQm9vdFBlcmZvcm1h bmNlVGFibGUtPkhlYWRlci5MZW5ndGggKyBTbW1Cb290UmVjb3JkRGF0YVNpemUpOw0KPj4+ICsg ICAgQm9vdFBlcmZvcm1hbmNlRGF0YSA9IEJvb3RQZXJmb3JtYW5jZURhdGEgKyBTbW1Cb290UmVj b3JkRGF0YVNpemU7DQo+Pj4gKyAgfQ0KPj4+ICsNCj4+PiArICAvLw0KPj4+ICsgIC8vIFNhdmUg Qm9vdCBQZXJmb3JtYW5jZSBUYWJsZSBhZGRyZXNzIHRvIFZhcmlhYmxlIGZvciB1c2UgaW4gUzQg cmVzdW1lLg0KPj4+ICsgIC8vDQo+Pj4gKyAgUGVyZm9ybWFuY2VWYXJpYWJsZS5Cb290UGVyZm9y bWFuY2VUYWJsZVBvaW50ZXIgPSAoRUZJX1BIWVNJQ0FMX0FERFJFU1MpIChVSU5UTikgbUFjcGlC b290UGVyZm9ybWFuY2VUYWJsZTsNCj4+PiArDQo+Pj4gKyAgLy8NCj4+PiArICAvLyBTYXZlIFJ1 bnRpbWUgUGVyZm9ybWFuY2UgVGFibGUgcG9pbnRlcnMgdG8gVmFyaWFibGUuDQo+Pj4gKyAgLy8g RG9uJ3QgY2hlY2sgU2V0VmFyaWFibGUgcmV0dXJuIHN0YXR1cy4gSXQgZG9lc24ndCBpbXBhY3Qg RlBEVCB0YWJsZSBnZW5lcmF0aW9uLg0KPj4+ICsgIC8vDQo+Pj4gKyAgZ1JULT5TZXRWYXJpYWJs ZSAoDQo+Pj4gKyAgICAgICAgRUZJX0ZJUk1XQVJFX1BFUkZPUk1BTkNFX1ZBUklBQkxFX05BTUUs DQo+Pj4gKyAgICAgICAgJmdFZmlGaXJtd2FyZVBlcmZvcm1hbmNlR3VpZCwNCj4+PiArICAgICAg ICBFRklfVkFSSUFCTEVfTk9OX1ZPTEFUSUxFIHwgRUZJX1ZBUklBQkxFX0JPT1RTRVJWSUNFX0FD Q0VTUywNCj4+PiArICAgICAgICBzaXplb2YgKFBlcmZvcm1hbmNlVmFyaWFibGUpLA0KPj4+ICsg ICAgICAgICZQZXJmb3JtYW5jZVZhcmlhYmxlDQo+Pj4gKyAgICAgICAgKTsNCj4+PiArDQo+Pj4g KyAgbUJvb3RSZWNvcmRCdWZmZXIgID0gKFVJTlQ4ICopIG1BY3BpQm9vdFBlcmZvcm1hbmNlVGFi bGU7DQo+Pj4gKyAgbUJvb3RSZWNvcmRTaXplICAgID0gbUFjcGlCb290UGVyZm9ybWFuY2VUYWJs ZS0+SGVhZGVyLkxlbmd0aDsNCj4+PiArICBtQm9vdFJlY29yZE1heFNpemUgPSBtQm9vdFJlY29y ZFNpemUgKyBQY2RHZXQzMiAoUGNkRXh0RnBkdEJvb3RSZWNvcmRQYWRTaXplKTsNCj4+PiArDQo+ Pj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPj4+ICt9DQo+Pj4gKw0KPj4+ICsvKioNCj4+PiAr ICBHZXQgYSBodW1hbiByZWFkYWJsZSBtb2R1bGUgbmFtZSBhbmQgbW9kdWxlIGd1aWQgZm9yIHRo ZSBnaXZlbiBpbWFnZSBoYW5kbGUuDQo+Pj4gKyAgSWYgbW9kdWxlIG5hbWUgY2FuJ3QgYmUgZm91 bmQsICIiIHN0cmluZyB3aWxsIHJldHVybi4NCj4+PiArICBJZiBtb2R1bGUgZ3VpZCBjYW4ndCBi ZSBmb3VuZCwgWmVybyBHdWlkIHdpbGwgcmV0dXJuLg0KPj4+ICsNCj4+PiArICBAcGFyYW0gICAg SGFuZGxlICAgICAgICBJbWFnZSBoYW5kbGUgb3IgQ29udHJvbGxlciBoYW5kbGUuDQo+Pj4gKyAg QHBhcmFtICAgIE5hbWVTdHJpbmcgICAgVGhlIGFzY2lpIHN0cmluZyB3aWxsIGJlIGZpbGxlZCBp bnRvIGl0LiBJZiBub3QgZm91bmQsIG51bGwgc3RyaW5nIHdpbGwgcmV0dXJuLg0KPj4+ICsgIEBw YXJhbSAgICBCdWZmZXJTaXplICAgIFNpemUgb2YgdGhlIGlucHV0IE5hbWVTdHJpbmcgYnVmZmVy Lg0KPj4+ICsgIEBwYXJhbSAgICBNb2R1bGVHdWlkICAgIFBvaW50IHRvIHRoZSBndWlkIGJ1ZmZl ciB0byBzdG9yZSB0aGUgZ290IG1vZHVsZSBndWlkIHZhbHVlLg0KPj4+ICsNCj4+PiArICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICBTdWNjZXNzZnVsbHkgZ2V0IG1vZHVsZSBuYW1lIGFuZCBndWlk Lg0KPj4+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSICBUaGUgaW5wdXQgcGFyYW1l dGVyIE5hbWVTdHJpbmcgaXMgTlVMTC4NCj4+PiArICBAcmV0dmFsIG90aGVyIHZhbHVlICBNb2R1 bGUgTmFtZSBjYW4ndCBiZSBnb3QuDQo+Pj4gKyoqLw0KPj4+ICtFRklfU1RBVFVTDQo+Pj4gK0dl dE1vZHVsZUluZm9Gcm9tSGFuZGxlICgNCj4+PiArICBJTiBFRklfSEFORExFICBIYW5kbGUsDQo+ Pj4gKyAgT1VUIENIQVI4ICAgICAgICAgICAgKk5hbWVTdHJpbmcsDQo+Pj4gKyAgSU4gVUlOVE4g ICAgICAgICAgICAgQnVmZmVyU2l6ZSwNCj4+PiArICBPVVQgRUZJX0dVSUQgICAgICAgICAqTW9k dWxlR3VpZCBPUFRJT05BTA0KPj4+ICsgICkNCj4+PiArew0KPj4+ICsgIEVGSV9TVEFUVVMgICAg ICAgICAgICAgICAgICBTdGF0dXM7DQo+Pj4gKyAgRUZJX0xPQURFRF9JTUFHRV9QUk9UT0NPTCAg ICpMb2FkZWRJbWFnZTsNCj4+PiArICBFRklfRFJJVkVSX0JJTkRJTkdfUFJPVE9DT0wgKkRyaXZl ckJpbmRpbmc7DQo+Pj4gKyAgQ0hBUjggICAgICAgICAgICAgICAgICAgICAgICpQZGJGaWxlTmFt ZTsNCj4+PiArICBFRklfR1VJRCAgICAgICAgICAgICAgICAgICAgKlRlbXBHdWlkOw0KPj4+ICsg IFVJTlROICAgICAgICAgICAgICAgICAgICAgICBTdGFydEluZGV4Ow0KPj4+ICsgIFVJTlROICAg ICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4+PiArICBJTlROICAgICAgICAgICAgICAgICAg ICAgICAgQ291bnQ7DQo+Pj4gKyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgIE1vZHVsZUd1 aWRJc0dldDsNCj4+PiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nU2l6ZTsN Cj4+PiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgKlN0cmluZ1B0cjsNCj4+PiArICBF RklfQ09NUE9ORU5UX05BTUUyX1BST1RPQ09MICAgICAgKkNvbXBvbmVudE5hbWUyOw0KPj4+ICsg IE1FRElBX0ZXX1ZPTF9GSUxFUEFUSF9ERVZJQ0VfUEFUSCAqRnZGaWxlUGF0aDsNCj4+PiArDQo+ Pj4gKyAgaWYgKE5hbWVTdHJpbmcgPT0gTlVMTCB8fCBCdWZmZXJTaXplID09IDApIHsNCj4+PiAr ICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+Pj4gKyAgfQ0KPj4+ICsgIC8vDQo+ Pj4gKyAgLy8gVHJ5IHRvIGdldCB0aGUgTW9kdWxlR3VpZCBhbmQgbmFtZSBzdHJpbmcgZm9ybSB0 aGUgY2FhY2hlZCBhcnJheS4NCj4+PiArICAvLw0KPj4+ICsgIGlmIChtQ2FjaGVQYWlyQ291bnQg PiAwKSB7DQo+Pj4gKyAgICBmb3IgKENvdW50ID0gbUNhY2hlUGFpckNvdW50IC0xOyBDb3VudCA+ PSAwOyBDb3VudC0tKSB7DQo+Pj4gKyAgICAgIGlmIChIYW5kbGUgPT0gbUNhY2hlSGFuZGxlR3Vp ZFRhYmxlW0NvdW50XS5IYW5kbGUpIHsNCj4+PiArICAgICAgICBDb3B5R3VpZCAoTW9kdWxlR3Vp ZCwgJm1DYWNoZUhhbmRsZUd1aWRUYWJsZVtDb3VudF0uTW9kdWxlR3VpZCk7DQo+Pj4gKyAgICAg ICAgQXNjaWlTdHJDcHlTIChOYW1lU3RyaW5nLCBFREtJSV9TVFJJTkdfRVZFTlRfUkVDT1JEX05B TUVfTEVOR1RILCBtQ2FjaGVIYW5kbGVHdWlkVGFibGVbQ291bnRdLk5hbWVTdHJpbmcpOw0KPj4+ ICsgICAgICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4+PiArICAgICAgfQ0KPj4+ICsgICAgfQ0K Pj4+ICsgIH0NCj4+PiArDQo+Pj4gKyAgU3RhdHVzID0gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0K Pj4+ICsgIExvYWRlZEltYWdlICAgICA9IE5VTEw7DQo+Pj4gKyAgTW9kdWxlR3VpZElzR2V0ID0g RkFMU0U7DQo+Pj4gKw0KPj4+ICsgIC8vDQo+Pj4gKyAgLy8gSW5pdGlhbGl6ZSBHVUlEIGFzIHpl cm8gdmFsdWUuDQo+Pj4gKyAgLy8NCj4+PiArICBUZW1wR3VpZCAgICA9ICZnWmVyb0d1aWQ7DQo+ Pj4gKyAgLy8NCj4+PiArICAvLyBJbml0aWFsaXplIGl0IGFzICIiIHN0cmluZy4NCj4+PiArICAv Lw0KPj4+ICsgIE5hbWVTdHJpbmdbMF0gPSAwOw0KPj4+ICsNCj4+PiArICBpZiAoSGFuZGxlICE9 IE5VTEwpIHsNCj4+PiArICAgIC8vDQo+Pj4gKyAgICAvLyBUcnkgSGFuZGxlIGFzIEltYWdlSGFu ZGxlLg0KPj4+ICsgICAgLy8NCj4+PiArICAgIFN0YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wg KA0KPj4+ICsgICAgICAgICAgICAgICAgICBIYW5kbGUsDQo+Pj4gKyAgICAgICAgICAgICAgICAg ICZnRWZpTG9hZGVkSW1hZ2VQcm90b2NvbEd1aWQsDQo+Pj4gKyAgICAgICAgICAgICAgICAgIChW T0lEKiopICZMb2FkZWRJbWFnZQ0KPj4+ICsgICAgICAgICAgICAgICAgICApOw0KPj4+ICsNCj4+ PiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+PiArICAgICAgLy8NCj4+PiArICAg ICAgLy8gVHJ5IEhhbmRsZSBhcyBDb250cm9sbGVyIEhhbmRsZQ0KPj4+ICsgICAgICAvLw0KPj4+ ICsgICAgICBTdGF0dXMgPSBnQlMtPk9wZW5Qcm90b2NvbCAoDQo+Pj4gKyAgICAgICAgICAgICAg ICAgICAgSGFuZGxlLA0KPj4+ICsgICAgICAgICAgICAgICAgICAgICZnRWZpRHJpdmVyQmluZGlu Z1Byb3RvY29sR3VpZCwNCj4+PiArICAgICAgICAgICAgICAgICAgICAoVk9JRCAqKikgJkRyaXZl ckJpbmRpbmcsDQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgTlVMTCwNCj4+PiArICAgICAgICAg ICAgICAgICAgICBOVUxMLA0KPj4+ICsgICAgICAgICAgICAgICAgICAgIEVGSV9PUEVOX1BST1RP Q09MX0dFVF9QUk9UT0NPTA0KPj4+ICsgICAgICAgICAgICAgICAgICAgICk7DQo+Pj4gKyAgICAg IGlmICghRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+Pj4gKyAgICAgICAgLy8NCj4+PiArICAgICAg ICAvLyBHZXQgSW1hZ2UgcHJvdG9jb2wgZnJvbSBJbWFnZUhhbmRsZQ0KPj4+ICsgICAgICAgIC8v DQo+Pj4gKyAgICAgICAgU3RhdHVzID0gZ0JTLT5IYW5kbGVQcm90b2NvbCAoDQo+Pj4gKyAgICAg ICAgICAgICAgICAgICAgICBEcml2ZXJCaW5kaW5nLT5JbWFnZUhhbmRsZSwNCj4+PiArICAgICAg ICAgICAgICAgICAgICAgICZnRWZpTG9hZGVkSW1hZ2VQcm90b2NvbEd1aWQsDQo+Pj4gKyAgICAg ICAgICAgICAgICAgICAgICAoVk9JRCoqKSAmTG9hZGVkSW1hZ2UNCj4+PiArICAgICAgICAgICAg ICAgICAgICAgICk7DQo+Pj4gKyAgICAgIH0NCj4+PiArICAgIH0NCj4+PiArICB9DQo+Pj4gKw0K Pj4+ICsgIGlmICghRUZJX0VSUk9SIChTdGF0dXMpICYmIExvYWRlZEltYWdlICE9IE5VTEwpIHsN Cj4+PiArICAgIC8vDQo+Pj4gKyAgICAvLyBHZXQgTW9kdWxlIEd1aWQgZnJvbSBEZXZpY2VQYXRo Lg0KPj4+ICsgICAgLy8NCj4+PiArICAgIGlmIChMb2FkZWRJbWFnZS0+RmlsZVBhdGggIT0gTlVM TCAmJg0KPj4+ICsgICAgICAgIExvYWRlZEltYWdlLT5GaWxlUGF0aC0+VHlwZSA9PSBNRURJQV9E RVZJQ0VfUEFUSCAmJg0KPj4+ICsgICAgICAgIExvYWRlZEltYWdlLT5GaWxlUGF0aC0+U3ViVHlw ZSA9PSBNRURJQV9QSVdHX0ZXX0ZJTEVfRFANCj4+PiArICAgICAgICkgew0KPj4+ICsgICAgICAv Lw0KPj4+ICsgICAgICAvLyBEZXRlcm1pbmUgR1VJRCBhc3NvY2lhdGVkIHdpdGggbW9kdWxlIGxv Z2dpbmcgcGVyZm9ybWFuY2UNCj4+PiArICAgICAgLy8NCj4+PiArICAgICAgTW9kdWxlR3VpZElz R2V0ID0gVFJVRTsNCj4+PiArICAgICAgRnZGaWxlUGF0aCAgICAgID0gKE1FRElBX0ZXX1ZPTF9G SUxFUEFUSF9ERVZJQ0VfUEFUSCAqKSBMb2FkZWRJbWFnZS0+RmlsZVBhdGg7DQo+Pj4gKyAgICAg IFRlbXBHdWlkICAgICAgICA9ICZGdkZpbGVQYXRoLT5GdkZpbGVOYW1lOw0KPj4+ICsgICAgfQ0K Pj4+ICsNCj4+PiArICAgIC8vDQo+Pj4gKyAgICAvLyBNZXRob2QgMSBHZXQgTW9kdWxlIE5hbWUg ZnJvbSBQREIgc3RyaW5nLg0KPj4+ICsgICAgLy8NCj4+PiArICAgIFBkYkZpbGVOYW1lID0gUGVD b2ZmTG9hZGVyR2V0UGRiUG9pbnRlciAoTG9hZGVkSW1hZ2UtPkltYWdlQmFzZSk7DQo+Pj4gKyAg ICBpZiAoUGRiRmlsZU5hbWUgIT0gTlVMTCAmJiBCdWZmZXJTaXplID4gMCkgew0KPj4+ICsgICAg ICBTdGFydEluZGV4ID0gMDsNCj4+PiArICAgICAgZm9yIChJbmRleCA9IDA7IFBkYkZpbGVOYW1l W0luZGV4XSAhPSAwOyBJbmRleCsrKSB7DQo+Pj4gKyAgICAgICAgaWYgKChQZGJGaWxlTmFtZVtJ bmRleF0gPT0gJ1xcJykgfHwgKFBkYkZpbGVOYW1lW0luZGV4XSA9PSAnLycpKSB7DQo+Pj4gKyAg ICAgICAgICBTdGFydEluZGV4ID0gSW5kZXggKyAxOw0KPj4+ICsgICAgICAgIH0NCj4+PiArICAg ICAgfQ0KPj4+ICsgICAgICAvLw0KPj4+ICsgICAgICAvLyBDb3B5IHRoZSBQREIgZmlsZSBuYW1l IHRvIG91ciB0ZW1wb3Jhcnkgc3RyaW5nLg0KPj4+ICsgICAgICAvLyBJZiB0aGUgbGVuZ3RoIGlz IGJpZ2dlciB0aGFuIEJ1ZmZlclNpemUsIHRyaW0gdGhlIHJlZHVkYW50IGNoYXJhY3RlcnMgdG8g YXZvaWQgb3ZlcmZsb3cgaW4gYXJyYXkgYm91bmRhcnkuDQo+Pj4gKyAgICAgIC8vDQo+Pj4gKyAg ICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IEJ1ZmZlclNpemUgLSAxOyBJbmRleCsrKSB7DQo+ Pj4gKyAgICAgICAgTmFtZVN0cmluZ1tJbmRleF0gPSBQZGJGaWxlTmFtZVtJbmRleCArIFN0YXJ0 SW5kZXhdOw0KPj4+ICsgICAgICAgIGlmIChOYW1lU3RyaW5nW0luZGV4XSA9PSAwIHx8IE5hbWVT dHJpbmdbSW5kZXhdID09ICcuJykgew0KPj4+ICsgICAgICAgICAgTmFtZVN0cmluZ1tJbmRleF0g PSAwOw0KPj4+ICsgICAgICAgICAgYnJlYWs7DQo+Pj4gKyAgICAgICAgfQ0KPj4+ICsgICAgICB9 DQo+Pj4NCj4+PiAtICBUaGlzIGludGVybmFsIGZ1bmN0aW9uIHNlYXJjaGVzIGZvciB0aGUgZ2F1 Z2UgZW50cnkgaW4gdGhlIGdhdWdlIGFycmF5Lg0KPj4+IC0gIElmIHRoZXJlIGlzIGFuIGVudHJ5 IHRoYXQgZXhhY3RseSBtYXRjaGVzIHRoZSBnaXZlbiBrZXl3b3Jkcw0KPj4+IC0gIGFuZCBpdHMg ZW5kIHRpbWUgc3RhbXAgaXMgemVybywgdGhlbiB0aGUgaW5kZXggb2YgdGhhdCBnYXVnZSBlbnRy eSBpcyByZXR1cm5lZDsNCj4+PiAtICBvdGhlcndpc2UsIHRoZSB0aGUgbnVtYmVyIG9mIGdhdWdl IGVudHJpZXMgaW4gdGhlIGFycmF5IGlzIHJldHVybmVkLg0KPj4+ICsgICAgICBpZiAoSW5kZXgg PT0gQnVmZmVyU2l6ZSAtIDEpIHsNCj4+PiArICAgICAgICBOYW1lU3RyaW5nW0luZGV4XSA9IDA7 DQo+Pj4gKyAgICAgIH0NCj4+PiArICAgICAgLy8NCj4+PiArICAgICAgLy8gTW9kdWxlIE5hbWUg aXMgZ290Lg0KPj4+ICsgICAgICAvLw0KPj4+ICsgICAgICBnb3RvIERvbmU7DQo+Pj4gKyAgICB9 DQo+Pj4gKyAgfQ0KPj4+DQo+Pj4gKyAgLy8NCj4+PiArICAvLyBNZXRob2QgMjogR2V0IHRoZSBu YW1lIHN0cmluZyBmcm9tIENvbXBvbmVudE5hbWUyIHByb3RvY29sDQo+Pj4gKyAgLy8NCj4+PiAr ICBTdGF0dXMgPSBnQlMtPkhhbmRsZVByb3RvY29sICgNCj4+PiArICAgICAgICAgICAgICAgICAg SGFuZGxlLA0KPj4+ICsgICAgICAgICAgICAgICAgICAmZ0VmaUNvbXBvbmVudE5hbWUyUHJvdG9j b2xHdWlkLA0KPj4+ICsgICAgICAgICAgICAgICAgICAoVk9JRCAqKikgJkNvbXBvbmVudE5hbWUy DQo+Pj4gKyAgICAgICAgICAgICAgICAgICk7DQo+Pj4gKyAgaWYgKCFFRklfRVJST1IgKFN0YXR1 cykpIHsNCj4+PiArICAgIC8vDQo+Pj4gKyAgICAvLyBHZXQgdGhlIGN1cnJlbnQgcGxhdGZvcm0g bGFuZ3VhZ2Ugc2V0dGluZw0KPj4+ICsgICAgLy8NCj4+PiArICAgIGlmIChtUGxhdGZvcm1MYW5n dWFnZSA9PSBOVUxMKSB7DQo+Pj4gKyAgICAgIEdldEVmaUdsb2JhbFZhcmlhYmxlMiAoTCJQbGF0 Zm9ybUxhbmciLCAoVk9JRCAqKikgJm1QbGF0Zm9ybUxhbmd1YWdlLCBOVUxMKTsNCj4+PiArICAg IH0NCj4+PiArICAgIGlmIChtUGxhdGZvcm1MYW5ndWFnZSAhPSBOVUxMKSB7DQo+Pj4gKyAgICAg IFN0YXR1cyA9IENvbXBvbmVudE5hbWUyLT5HZXREcml2ZXJOYW1lICgNCj4+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9uZW50TmFtZTIsDQo+Pj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG1QbGF0Zm9ybUxhbmd1YWdlICE9IE5VTEwgPyBtUGxhdGZv cm1MYW5ndWFnZSA6ICJlbi1VUyIsDQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZTdHJpbmdQdHINCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsN Cj4+PiArICAgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+PiArICAgICAgICBmb3Ig KEluZGV4ID0gMDsgSW5kZXggPCBCdWZmZXJTaXplIC0gMSAmJiBTdHJpbmdQdHJbSW5kZXhdICE9 IDA7IEluZGV4KyspIHsNCj4+PiArICAgICAgICAgIE5hbWVTdHJpbmdbSW5kZXhdID0gKENIQVI4 KSBTdHJpbmdQdHJbSW5kZXhdOw0KPj4+ICsgICAgICAgIH0NCj4+PiArICAgICAgICBOYW1lU3Ry aW5nW0luZGV4XSA9IDA7DQo+Pj4gKyAgICAgICAgLy8NCj4+PiArICAgICAgICAvLyBNb2R1bGUg TmFtZSBpcyBnb3QuDQo+Pj4gKyAgICAgICAgLy8NCj4+PiArICAgICAgICBnb3RvIERvbmU7DQo+ Pj4gKyAgICAgIH0NCj4+PiArICAgIH0NCj4+PiArICB9DQo+Pj4gKw0KPj4+ICsgIGlmIChNb2R1 bGVHdWlkSXNHZXQpIHsNCj4+PiArICAgIC8vDQo+Pj4gKyAgICAvLyBNZXRob2QgMyBUcnkgdG8g Z2V0IHRoZSBpbWFnZSdzIEZGUyBVSSBzZWN0aW9uIGJ5IGltYWdlIEdVSUQNCj4+PiArICAgIC8v DQo+Pj4gKyAgICBTdHJpbmdQdHIgID0gTlVMTDsNCj4+PiArICAgIFN0cmluZ1NpemUgPSAwOw0K Pj4+ICsgICAgU3RhdHVzID0gR2V0U2VjdGlvbkZyb21BbnlGdiAoDQo+Pj4gKyAgICAgICAgICAg ICAgVGVtcEd1aWQsDQo+Pj4gKyAgICAgICAgICAgICAgRUZJX1NFQ1RJT05fVVNFUl9JTlRFUkZB Q0UsDQo+Pj4gKyAgICAgICAgICAgICAgMCwNCj4+PiArICAgICAgICAgICAgICAoVk9JRCAqKikg JlN0cmluZ1B0ciwNCj4+PiArICAgICAgICAgICAgICAmU3RyaW5nU2l6ZQ0KPj4+ICsgICAgICAg ICAgICAgICk7DQo+Pj4gKw0KPj4+ICsgICAgaWYgKCFFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+ PiArICAgICAgLy8NCj4+PiArICAgICAgLy8gTWV0aG9kIDMuIEdldCB0aGUgbmFtZSBzdHJpbmcg ZnJvbSBGRlMgVUkgc2VjdGlvbg0KPj4+ICsgICAgICAvLw0KPj4+ICsgICAgICBmb3IgKEluZGV4 ID0gMDsgSW5kZXggPCBCdWZmZXJTaXplIC0gMSAmJiBTdHJpbmdQdHJbSW5kZXhdICE9IDA7IElu ZGV4KyspIHsNCj4+PiArICAgICAgICBOYW1lU3RyaW5nW0luZGV4XSA9IChDSEFSOCkgU3RyaW5n UHRyW0luZGV4XTsNCj4+PiArICAgICAgfQ0KPj4+ICsgICAgICBOYW1lU3RyaW5nW0luZGV4XSA9 IDA7DQo+Pj4gKyAgICAgIEZyZWVQb29sIChTdHJpbmdQdHIpOw0KPj4+ICsgICAgfQ0KPj4+ICsg IH0NCj4+PiArDQo+Pj4gK0RvbmU6DQo+Pj4gKyAgLy8NCj4+PiArICAvLyBDb3B5IE1vZHVsZSBH dWlkDQo+Pj4gKyAgLy8NCj4+PiArICBpZiAoTW9kdWxlR3VpZCAhPSBOVUxMKSB7DQo+Pj4gKyAg ICBDb3B5R3VpZCAoTW9kdWxlR3VpZCwgVGVtcEd1aWQpOw0KPj4+ICsgICAgaWYgKElzWmVyb0d1 aWQoVGVtcEd1aWQpICYmIChIYW5kbGUgIT0gTlVMTCkgJiYgIU1vZHVsZUd1aWRJc0dldCkgew0K Pj4+ICsgICAgICAgIC8vIEhhbmRsZSBpcyBHVUlEDQo+Pj4gKyAgICAgIENvcHlHdWlkIChNb2R1 bGVHdWlkLCAoRUZJX0dVSUQgKikgSGFuZGxlKTsNCj4+PiArICAgIH0NCj4+PiArICB9DQo+Pj4g Kw0KPj4+ICsgIC8vDQo+Pj4gKyAgLy8gQ2FjaGUgdGhlIEhhbmRsZSBhbmQgR3VpZCBwYWlycy4N Cj4+PiArICAvLw0KPj4+ICsgIGlmIChtQ2FjaGVQYWlyQ291bnQgPCBDQUNIRV9IQU5ETEVfR1VJ RF9DT1VOVCkgew0KPj4+ICsgICAgbUNhY2hlSGFuZGxlR3VpZFRhYmxlW21DYWNoZVBhaXJDb3Vu dF0uSGFuZGxlID0gSGFuZGxlOw0KPj4+ICsgICAgQ29weUd1aWQgKCZtQ2FjaGVIYW5kbGVHdWlk VGFibGVbbUNhY2hlUGFpckNvdW50XS5Nb2R1bGVHdWlkLCBNb2R1bGVHdWlkKTsNCj4+PiArICAg IEFzY2lpU3RyQ3B5UyAobUNhY2hlSGFuZGxlR3VpZFRhYmxlW21DYWNoZVBhaXJDb3VudF0uTmFt ZVN0cmluZywgRURLSUlfU1RSSU5HX0VWRU5UX1JFQ09SRF9OQU1FX0xFTkdUSCwgTmFtZVN0cmlu Zyk7DQo+Pj4gKyAgICBtQ2FjaGVQYWlyQ291bnQgKys7DQo+Pj4gKyAgfQ0KPj4+ICsNCj4+PiAr ICByZXR1cm4gU3RhdHVzOw0KPj4+ICt9DQo+Pj4gKw0KPj4+ICsvKioNCj4+PiArICBHZXQgdGhl IEZQRFQgcmVjb3JkIGluZm8uDQo+Pj4gKw0KPj4+ICsgIEBwYXJhbSAgSXNTdGFydCAgICAgICAg ICAgICAgICAgVFJVRSBpZiB0aGUgcGVyZm9ybWFuY2UgbG9nIGlzIHN0YXJ0IGxvZy4NCj4+PiAg ICBAcGFyYW0gIEhhbmRsZSAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gZW52aXJvbm1lbnQg c3BlY2lmaWMgY29udGV4dCB1c2VkDQo+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0byBpZGVudGlmeSB0aGUgY29tcG9uZW50IGJlaW5nIG1lYXN1cmVkLg0KPj4+ICAgIEBw YXJhbSAgVG9rZW4gICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byBhIE51bGwtdGVybWluYXRl ZCBBU0NJSSBzdHJpbmcNCj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo YXQgaWRlbnRpZmllcyB0aGUgY29tcG9uZW50IGJlaW5nIG1lYXN1cmVkLg0KPj4+ICAgIEBwYXJh bSAgTW9kdWxlICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byBhIE51bGwtdGVybWluYXRlZCBB U0NJSSBzdHJpbmcNCj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQg aWRlbnRpZmllcyB0aGUgbW9kdWxlIGJlaW5nIG1lYXN1cmVkLg0KPj4+IC0gIEBwYXJhbSAgSWRl bnRpZmllciAgICAgICAgICAgICAgMzItYml0IGlkZW50aWZpZXIuDQo+Pj4gKyAgQHBhcmFtICBS ZWNvcmRJbmZvICAgICAgICAgICAgICBPbiByZXR1cm4sIHBvaW50ZXIgdG8gdGhlIGluZm8gb2Yg dGhlIHJlY29yZC4NCj4+PiArICBAcGFyYW0gIFVzZU1vZHVsZU5hbWUgICAgICAgICAgIE9ubHkg dXNlZnVsIGZvciBEWU5BTUlDX1NUUklOR19FVkVOVF9UWVBFLCBpbmRpY2F0ZSB0aGF0IHdoZXRo ZXIgbmVlZCB1c2UNCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vZHVs ZSBuYW1lIHRvIGZpbGwgdGhlIHN0cmluZyBmaWVsZCBpbiB0aGUgRFlOQU1JQ19TVFJJTkdfRVZF TlRfUkVDT1JELg0KPj4+DQo+Pj4gLSAgQHJldHZhbCBUaGUgaW5kZXggb2YgZ2F1Z2UgZW50cnkg aW4gdGhlIGFycmF5Lg0KPj4+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgR2V0IHJl Y29yZCBpbmZvIHN1Y2Nlc3NmdWxseS4NCj4+PiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAg ICAgIE5vIG1hdGNoZWQgRlBEVCByZWNvcmQuDQo+Pj4NCj4+PiAgKiovDQo+Pj4gLVVJTlQzMg0K Pj4+IC1JbnRlcm5hbFNlYXJjaEZvckdhdWdlRW50cnkgKA0KPj4+IC0gIElOIENPTlNUIFZPSUQg ICAgICAgICAgICAgICAgICpIYW5kbGUsICBPUFRJT05BTA0KPj4+IC0gIElOIENPTlNUIENIQVI4 ICAgICAgICAgICAgICAgICpUb2tlbiwgICBPUFRJT05BTA0KPj4+IC0gIElOIENPTlNUIENIQVI4 ICAgICAgICAgICAgICAgICpNb2R1bGUsICAgT1BUSU9OQUwNCj4+PiAtICBJTiBVSU5UMzIgICAg ICAgICAgICAgICAgICAgICBJZGVudGlmaWVyDQo+Pj4gK0VGSV9TVEFUVVMNCj4+PiArR2V0RnBk dFJlY29yZEluZm8gKA0KPj4+ICsgIElOIEJPT0xFQU4gICAgICAgICAgICAgICAgICBJc1N0YXJ0 LA0KPj4+ICsgIElOIENPTlNUIFZPSUQgICAgICAgICAgICAgICAqSGFuZGxlLA0KPj4+ICsgIElO IENPTlNUIENIQVI4ICAgICAgICAgICAgICAqVG9rZW4sDQo+Pj4gKyAgSU4gQ09OU1QgQ0hBUjgg ICAgICAgICAgICAgICpNb2R1bGUsDQo+Pj4gKyAgT1VUIEJBU0lDX1JFQ09SRF9JTkZPICAgICAg ICpSZWNvcmRJbmZvLA0KPj4+ICsgIElOIE9VVCBCT09MRUFOICAgICAgICAgICAgICAqVXNlTW9k dWxlTmFtZQ0KPj4+ICAgICkNCj4+PiAgew0KPj4+IC0gIFVJTlQzMiAgICAgICAgICAgICAgICAg ICAgSW5kZXg7DQo+Pj4gLSAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBJbmRleDI7DQo+Pj4g LSAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBOdW1iZXJPZkVudHJpZXM7DQo+Pj4gLSAgR0FV R0VfREFUQV9FTlRSWV9FWCAgICAgICAqR2F1Z2VFbnRyeUV4QXJyYXk7DQo+Pj4gKyAgVUlOVDE2 ICAgICAgICAgICAgICBSZWNvcmRUeXBlOw0KPj4+ICsgIFVJTlROICAgICAgICAgICAgICAgU3Ry aW5nU2l6ZTsNCj4+Pg0KPj4+IC0gIGlmIChUb2tlbiA9PSBOVUxMKSB7DQo+Pj4gLSAgICBUb2tl biA9ICIiOw0KPj4+IC0gIH0NCj4+PiAtICBpZiAoTW9kdWxlID09IE5VTEwpIHsNCj4+PiAtICAg IE1vZHVsZSA9ICIiOw0KPj4+ICsgIFJlY29yZFR5cGUgICAgPSBEWU5BTUlDX1NUUklOR19FVkVO VF9UWVBFOw0KPj4+ICsNCj4+PiArICAvLw0KPj4+ICsgIC8vIFRva2VuIHRvIFR5cGUgYW5kIElk Lg0KPj4+ICsgIC8vDQo+Pj4gKyAgaWYgKFRva2VuICE9IE5VTEwpIHsNCj4+PiArICAgIGlmIChB c2NpaVN0ckNtcCAoVG9rZW4sIFNUQVJUX0lNQUdFX1RPSykgPT0gMCkgeyAgICAgICAgICAgICAg ICAvLyAiU3RhcnRJbWFnZToiDQo+Pj4gKyAgICAgICpVc2VNb2R1bGVOYW1lID0gVFJVRTsNCj4+ PiArICAgICAgUmVjb3JkVHlwZSAgICAgPSBHVUlEX0VWRU5UX1RZUEU7DQo+Pj4gKyAgICAgIGlm IChJc1N0YXJ0KSB7DQo+Pj4gKyAgICAgICAgUmVjb3JkSW5mby0+UHJvZ3Jlc3NJRCAgPSBNT0RV TEVfU1RBUlRfSUQ7DQo+Pj4gKyAgICAgIH0gZWxzZSB7DQo+Pj4gKyAgICAgICAgUmVjb3JkSW5m by0+UHJvZ3Jlc3NJRCAgPSBNT0RVTEVfRU5EX0lEOw0KPj4+ICsgICAgICB9DQo+Pj4gKyAgICB9 IGVsc2UgaWYgKEFzY2lpU3RyQ21wIChUb2tlbiwgTE9BRF9JTUFHRV9UT0spID09IDApIHsgICAg ICAgICAgLy8gIkxvYWRJbWFnZToiDQo+Pj4gKyAgICAgICpVc2VNb2R1bGVOYW1lID0gVFJVRTsN Cj4+PiArICAgICAgUmVjb3JkVHlwZSA9IEdVSURfUVdPUkRfRVZFTlRfVFlQRTsNCj4+PiArICAg ICAgaWYgKElzU3RhcnQpIHsNCj4+PiArICAgICAgICBSZWNvcmRJbmZvLT5Qcm9ncmVzc0lEICA9 IE1PRFVMRV9MT0FESU1BR0VfU1RBUlRfSUQ7DQo+Pj4gKyAgICAgIH0gZWxzZSB7DQo+Pj4gKyAg ICAgICAgUmVjb3JkSW5mby0+UHJvZ3Jlc3NJRCAgPSBNT0RVTEVfTE9BRElNQUdFX0VORF9JRDsN Cj4+PiArICAgICAgfQ0KPj4+ICsgICAgfSBlbHNlIGlmIChBc2NpaVN0ckNtcCAoVG9rZW4sIERS SVZFUkJJTkRJTkdfU1RBUlRfVE9LKSA9PSAwKSB7ICAvLyAiREI6U3RhcnQ6Ig0KPj4+ICsgICAg ICAqVXNlTW9kdWxlTmFtZSA9IFRSVUU7DQo+Pj4gKyAgICAgIGlmIChJc1N0YXJ0KSB7DQo+Pj4g KyAgICAgICAgUmVjb3JkSW5mby0+UHJvZ3Jlc3NJRCAgPSBNT0RVTEVfREJfU1RBUlRfSUQ7DQo+ Pj4gKyAgICAgICAgUmVjb3JkVHlwZSAgID0gR1VJRF9RV09SRF9FVkVOVF9UWVBFOw0KPj4+ICsg ICAgICB9IGVsc2Ugew0KPj4+ICsgICAgICAgIFJlY29yZEluZm8tPlByb2dyZXNzSUQgID0gTU9E VUxFX0RCX0VORF9JRDsNCj4+PiArICAgICAgICBSZWNvcmRUeXBlICAgPSBHVUlEX1FXT1JEX1NU UklOR19FVkVOVF9UWVBFOw0KPj4+ICsgICAgICB9DQo+Pj4gKyAgICB9IGVsc2UgaWYgKEFzY2lp U3RyQ21wIChUb2tlbiwgRFJJVkVSQklORElOR19TVVBQT1JUX1RPSykgPT0gMCkgeyAvLyAiREI6 U3VwcG9ydDoiDQo+Pj4gKyAgICAgICpVc2VNb2R1bGVOYW1lID0gVFJVRTsNCj4+PiArICAgICAg aWYgKFBjZEdldEJvb2wgKFBjZEVka2lpRnBkdFN0cmluZ1JlY29yZEVuYWJsZU9ubHkpKSB7DQo+ Pj4gKyAgICAgICAgcmV0dXJuIFJFVFVSTl9VTlNVUFBPUlRFRDsNCj4+PiArICAgICAgfQ0KPj4+ ICsgICAgICBSZWNvcmRUeXBlICAgICA9IEdVSURfUVdPUkRfRVZFTlRfVFlQRTsNCj4+PiArICAg ICAgaWYgKElzU3RhcnQpIHsNCj4+PiArICAgICAgICBSZWNvcmRJbmZvLT5Qcm9ncmVzc0lEICA9 IE1PRFVMRV9EQl9TVVBQT1JUX1NUQVJUX0lEOw0KPj4+ICsgICAgICB9IGVsc2Ugew0KPj4+ICsg ICAgICAgIFJlY29yZEluZm8tPlByb2dyZXNzSUQgID0gTU9EVUxFX0RCX1NVUFBPUlRfRU5EX0lE Ow0KPj4+ICsgICAgICB9DQo+Pj4gKyAgICB9IGVsc2UgaWYgKEFzY2lpU3RyQ21wIChUb2tlbiwg RFJJVkVSQklORElOR19TVE9QX1RPSykgPT0gMCkgeyAgICAvLyAiREI6U3RvcDoiDQo+Pj4gKyAg ICAgICpVc2VNb2R1bGVOYW1lID0gVFJVRTsNCj4+PiArICAgICAgaWYgKFBjZEdldEJvb2wgKFBj ZEVka2lpRnBkdFN0cmluZ1JlY29yZEVuYWJsZU9ubHkpKSB7DQo+Pj4gKyAgICAgICAgIHJldHVy biBSRVRVUk5fVU5TVVBQT1JURUQ7DQo+Pj4gKyAgICAgIH0NCj4+PiArICAgICAgUmVjb3JkVHlw ZSAgICAgPSBHVUlEX1FXT1JEX0VWRU5UX1RZUEU7DQo+Pj4gKyAgICAgIGlmIChJc1N0YXJ0KSB7 DQo+Pj4gKyAgICAgICAgUmVjb3JkSW5mby0+UHJvZ3Jlc3NJRCAgPSBNT0RVTEVfREJfU1RPUF9T VEFSVF9JRDsNCj4+PiArICAgICAgfSBlbHNlIHsNCj4+PiArICAgICAgICBSZWNvcmRJbmZvLT5Q cm9ncmVzc0lEICA9IE1PRFVMRV9EQl9TVE9QX0VORF9JRDsNCj4+PiArICAgICAgfQ0KPj4+ICsg ICAgfSBlbHNlIGlmIChBc2NpaVN0ckNtcCAoVG9rZW4sIFBFSV9UT0spID09IDAgfHwgICAgICAg ICAgICAgICAgICAgLy8gIlBFSSINCj4+PiArICAgICAgICAgICAgICAgQXNjaWlTdHJDbXAgKFRv a2VuLCBEWEVfVE9LKSA9PSAwIHx8ICAgICAgICAgICAgICAgICAgIC8vICJEWEUiDQo+Pj4gKyAg ICAgICAgICAgICAgIEFzY2lpU3RyQ21wIChUb2tlbiwgQkRTX1RPSykgPT0gMCkgeyAgICAgICAg ICAgICAgICAgICAvLyAiQkRTIg0KPj4+ICsgICAgICBpZiAoSXNTdGFydCkgew0KPj4+ICsgICAg ICAgIFJlY29yZEluZm8tPlByb2dyZXNzSUQgID0gUEVSRl9DUk9TU01PRFVMRV9TVEFSVF9JRDsN Cj4+PiArICAgICAgfSBlbHNlIHsNCj4+PiArICAgICAgICBSZWNvcmRJbmZvLT5Qcm9ncmVzc0lE ICA9IFBFUkZfQ1JPU1NNT0RVTEVfRU5EX0lEOw0KPj4+ICsgICAgICB9DQo+Pj4gKyAgICB9IGVs c2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvLyBQcmVmIHVzZWQgaW4gTW9kdWxlcy4NCj4+PiArICAgICAgaWYgKElzU3RhcnQpIHsN Cj4+PiArICAgICAgICBSZWNvcmRJbmZvLT5Qcm9ncmVzc0lEICA9IFBFUkZfSU5NT0RVTEVfU1RB UlRfSUQ7DQo+Pj4gKyAgICAgIH0gZWxzZSB7DQo+Pj4gKyAgICAgICAgUmVjb3JkSW5mby0+UHJv Z3Jlc3NJRCAgPSBQRVJGX0lOTU9EVUxFX0VORF9JRDsNCj4+PiArICAgICAgfQ0KPj4+ICsgICAg fQ0KPj4+ICsgIH0gZWxzZSBpZiAoSGFuZGxlIT0gTlVMTCB8fCBNb2R1bGUgIT0gTlVMTCkgeyAg ICAgICAgICAgICAgICAgICAgICAgLy8gUHJlZiB1c2VkIGluIE1vZHVsZXMuDQo+Pj4gKyAgICBp ZiAoSXNTdGFydCkgew0KPj4+ICsgICAgICBSZWNvcmRJbmZvLT5Qcm9ncmVzc0lEICAgID0gUEVS Rl9JTk1PRFVMRV9TVEFSVF9JRDsNCj4+PiArICAgIH0gZWxzZSB7DQo+Pj4gKyAgICAgIFJlY29y ZEluZm8tPlByb2dyZXNzSUQgICAgPSBQRVJGX0lOTU9EVUxFX0VORF9JRDsNCj4+PiArICAgIH0N Cj4+PiArICB9IGVsc2Ugew0KPj4+ICsgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4+PiAg ICB9DQo+Pj4NCj4+PiAtICBOdW1iZXJPZkVudHJpZXMgPSBtR2F1Z2VEYXRhLT5OdW1iZXJPZkVu dHJpZXM7DQo+Pj4gLSAgR2F1Z2VFbnRyeUV4QXJyYXkgPSAoR0FVR0VfREFUQV9FTlRSWV9FWCAq KSAobUdhdWdlRGF0YSArIDEpOw0KPj4+ICsgIC8vDQo+Pj4gKyAgLy8gR2V0IFJlY29yZCBzaXpl IGJhZXNlZCBvbiB0aGUgcmVjb3JkIHR5cGUuDQo+Pj4gKyAgLy8gV2hlbiBQY2RFZGtpaUZwZHRT dHJpbmdSZWNvcmRFbmFibGVPbmx5IGlzIFRSVUUsIGFsbCByZWNvcmRzIGFyZSB3aXRoIHR5cGUg b2YgRFlOQU1JQ19TVFJJTkdfRVZFTlRfVFlQRS4NCj4+PiArICAvLw0KPj4+ICsgIGlmIChQY2RH ZXRCb29sIChQY2RFZGtpaUZwZHRTdHJpbmdSZWNvcmRFbmFibGVPbmx5KSkgew0KPj4+ICsgICAg UmVjb3JkVHlwZSAgICAgICAgICAgICAgID0gRFlOQU1JQ19TVFJJTkdfRVZFTlRfVFlQRTsNCj4+ PiArICAgIFJlY29yZEluZm8tPlJlY29yZFNpemUgICA9IHNpemVvZiAoRFlOQU1JQ19TVFJJTkdf RVZFTlRfUkVDT1JEKSArIFNUUklOR19TSVpFOw0KPj4+ICsgIH0gZWxzZSB7DQo+Pj4gKyAgICBz d2l0Y2ggKFJlY29yZFR5cGUpIHsNCj4+PiArICAgIGNhc2UgR1VJRF9FVkVOVF9UWVBFOg0KPj4+ ICsgICAgICBSZWNvcmRJbmZvLT5SZWNvcmRTaXplID0gc2l6ZW9mIChHVUlEX0VWRU5UX1JFQ09S RCk7DQo+Pj4gKyAgICAgIGJyZWFrOw0KPj4+DQo+Pj4gLSAgSW5kZXgyID0gMDsNCj4+PiArICAg IGNhc2UgRFlOQU1JQ19TVFJJTkdfRVZFTlRfVFlQRToNCj4+PiArICAgICAgaWYgKCpVc2VNb2R1 bGVOYW1lKSB7DQo+Pj4gKyAgICAgICAgU3RyaW5nU2l6ZSAgPSBTVFJJTkdfU0laRTsNCj4+PiAr ICAgICAgfSBlbHNlIGlmIChUb2tlbiAgIT0gTlVMTCkgew0KPj4+ICsgICAgICAgIFN0cmluZ1Np emUgID0gQXNjaWlTdHJTaXplIChUb2tlbik7DQo+Pj4gKyAgICAgIH0gZWxzZSBpZiAoTW9kdWxl ICE9IE5VTEwpIHsNCj4+PiArICAgICAgICBTdHJpbmdTaXplICA9IEFzY2lpU3RyU2l6ZSAoTW9k dWxlKTsNCj4+PiArICAgICAgfSBlbHNlIHsNCj4+PiArICAgICAgICBTdHJpbmdTaXplICA9IFNU UklOR19TSVpFOw0KPj4+ICsgICAgICB9DQo+Pj4gKyAgICAgIGlmIChTdHJpbmdTaXplID4gU1RS SU5HX1NJWkUpIHsNCj4+PiArICAgICAgICBTdHJpbmdTaXplICAgPSBTVFJJTkdfU0laRTsNCj4+ PiArICAgICAgfQ0KPj4+ICsgICAgICBSZWNvcmRJbmZvLT5SZWNvcmRTaXplID0gKFVJTlQ4KShz aXplb2YgKERZTkFNSUNfU1RSSU5HX0VWRU5UX1JFQ09SRCkgKyBTdHJpbmdTaXplKTsNCj4+PiAr ICAgICAgYnJlYWs7DQo+Pj4NCj4+PiAtICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBOdW1iZXJP ZkVudHJpZXM7IEluZGV4KyspIHsNCj4+PiAtICAgIEluZGV4MiA9IE51bWJlck9mRW50cmllcyAt IDEgLSBJbmRleDsNCj4+PiAtICAgIGlmIChHYXVnZUVudHJ5RXhBcnJheVtJbmRleDJdLkVuZFRp bWVTdGFtcCA9PSAwICYmDQo+Pj4gLSAgICAgICAgKEdhdWdlRW50cnlFeEFycmF5W0luZGV4Ml0u SGFuZGxlID09IChFRklfUEhZU0lDQUxfQUREUkVTUykgKFVJTlROKSBIYW5kbGUpICYmDQo+Pj4g LSAgICAgICAgQXNjaWlTdHJuQ21wIChHYXVnZUVudHJ5RXhBcnJheVtJbmRleDJdLlRva2VuLCBU b2tlbiwgRFhFX1BFUkZPUk1BTkNFX1NUUklOR19MRU5HVEgpID09IDAgJiYNCj4+PiAtICAgICAg ICBBc2NpaVN0cm5DbXAgKEdhdWdlRW50cnlFeEFycmF5W0luZGV4Ml0uTW9kdWxlLCBNb2R1bGUs IERYRV9QRVJGT1JNQU5DRV9TVFJJTkdfTEVOR1RIKSA9PSAwKSB7DQo+Pj4gLSAgICAgIEluZGV4 ID0gSW5kZXgyOw0KPj4+ICsgICAgY2FzZSBHVUlEX1FXT1JEX0VWRU5UX1RZUEU6DQo+Pj4gKyAg ICAgIFJlY29yZEluZm8tPlJlY29yZFNpemUgPSAoVUlOVDgpc2l6ZW9mIChHVUlEX1FXT1JEX0VW RU5UX1JFQ09SRCk7DQo+Pj4gICAgICAgIGJyZWFrOw0KPj4+ICsNCj4+PiArICAgIGNhc2UgR1VJ RF9RV09SRF9TVFJJTkdfRVZFTlRfVFlQRToNCj4+PiArICAgICAgUmVjb3JkSW5mby0+UmVjb3Jk U2l6ZSA9IChVSU5UOClzaXplb2YgKEdVSURfUVdPUkRfU1RSSU5HX0VWRU5UX1JFQ09SRCk7DQo+ Pj4gKyAgICAgIGJyZWFrOw0KPj4+ICsNCj4+PiArICAgIGRlZmF1bHQ6DQo+Pj4gKyAgICAgIC8v DQo+Pj4gKyAgICAgIC8vIFJlY29yZCBpcyB1bnN1cHBvcnRlZCB5ZXQsIHJldHVybiBFRklfVU5T VVBQT1JURUQNCj4+PiArICAgICAgLy8NCj4+PiArICAgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRF RDsNCj4+PiAgICAgIH0NCj4+PiAgICB9DQo+Pj4NCj4+PiAtICByZXR1cm4gSW5kZXg7DQo+Pj4g KyAgUmVjb3JkSW5mby0+VHlwZSA9IFJlY29yZFR5cGU7DQo+Pj4gKyAgcmV0dXJuIEVGSV9TVUND RVNTOw0KPj4+ICB9DQo+Pj4NCj4+PiAgLyoqDQo+Pj4gLSAgQWRkcyBhIHJlY29yZCBhdCB0aGUg ZW5kIG9mIHRoZSBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudCBsb2cNCj4+PiAtICB0aGF0IHJlY29y ZHMgdGhlIHN0YXJ0IHRpbWUgb2YgYSBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudC4NCj4+PiAtDQo+ Pj4gLSAgQWRkcyBhIHJlY29yZCB0byB0aGUgZW5kIG9mIHRoZSBwZXJmb3JtYW5jZSBtZWFzdXJl bWVudCBsb2cNCj4+PiAtICB0aGF0IGNvbnRhaW5zIHRoZSBIYW5kbGUsIFRva2VuLCBNb2R1bGUg YW5kIElkZW50aWZpZXIuDQo+Pj4gLSAgVGhlIGVuZCB0aW1lIG9mIHRoZSBuZXcgcmVjb3JkIG11 c3QgYmUgc2V0IHRvIHplcm8uDQo+Pj4gLSAgSWYgVGltZVN0YW1wIGlzIG5vdCB6ZXJvLCB0aGVu IFRpbWVTdGFtcCBpcyB1c2VkIHRvIGZpbGwgaW4gdGhlIHN0YXJ0IHRpbWUgaW4gdGhlIHJlY29y ZC4NCj4+PiAtICBJZiBUaW1lU3RhbXAgaXMgemVybywgdGhlIHN0YXJ0IHRpbWUgaW4gdGhlIHJl Y29yZCBpcyBmaWxsZWQgaW4gd2l0aCB0aGUgdmFsdWUNCj4+PiAtICByZWFkIGZyb20gdGhlIGN1 cnJlbnQgdGltZSBzdGFtcC4NCj4+PiArICBBZGQgcGVyZm9ybWFuY2UgbG9nIHRvIEZQRFQgYm9v dCByZWNvcmQgdGFibGUuDQo+Pj4NCj4+PiArICBAcGFyYW0gIElzU3RhcnQgICAgICAgICAgICAg ICAgIFRSVUUgaWYgdGhlIHBlcmZvcm1hbmNlIGxvZyBpcyBzdGFydCBsb2cuDQo+Pj4gICAgQHBh cmFtICBIYW5kbGUgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIGVudmlyb25tZW50IHNwZWNp ZmljIGNvbnRleHQgdXNlZA0KPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dG8gaWRlbnRpZnkgdGhlIGNvbXBvbmVudCBiZWluZyBtZWFzdXJlZC4NCj4+PiAgICBAcGFyYW0g IFRva2VuICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gYSBOdWxsLXRlcm1pbmF0ZWQgQVND SUkgc3RyaW5nDQo+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGlk ZW50aWZpZXMgdGhlIGNvbXBvbmVudCBiZWluZyBtZWFzdXJlZC4NCj4+PiAgICBAcGFyYW0gIE1v ZHVsZSAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gYSBOdWxsLXRlcm1pbmF0ZWQgQVNDSUkg c3RyaW5nDQo+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGlkZW50 aWZpZXMgdGhlIG1vZHVsZSBiZWluZyBtZWFzdXJlZC4NCj4+PiAtICBAcGFyYW0gIFRpbWVTdGFt cCAgICAgICAgICAgICAgIDY0LWJpdCB0aW1lIHN0YW1wLg0KPj4+ICsgIEBwYXJhbSAgVGlja2Vy ICAgICAgICAgICAgICAgICAgNjQtYml0IHRpbWUgc3RhbXAuDQo+Pj4gICAgQHBhcmFtICBJZGVu dGlmaWVyICAgICAgICAgICAgICAzMi1iaXQgaWRlbnRpZmllci4gSWYgdGhlIHZhbHVlIGlzIDAs IHRoZSBjcmVhdGVkIHJlY29yZA0KPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaXMgc2FtZSBhcyB0aGUgb25lIGNyZWF0ZWQgYnkgU3RhcnRHYXVnZSBvZiBQRVJGT1JNQU5D RV9QUk9UT0NPTC4NCj4+Pg0KPj4+IC0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAg VGhlIGRhdGEgd2FzIHJlYWQgY29ycmVjdGx5IGZyb20gdGhlIGRldmljZS4NCj4+PiArICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIEFkZCBGUERUIGJvb3QgcmVjb3JkLg0KPj4+ICAg IEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgICAgVGhlcmUgYXJlIG5vdCBlbm91Z2ggcmVz b3VyY2VzIHRvIHJlY29yZCB0aGUgbWVhc3VyZW1lbnQuDQo+Pj4gKyAgQHJldHZhbCBFRklfVU5T VVBQT1JURUQgICAgICAgICBObyBtYXRjaGVkIEZQRFQgcmVjb3JkLg0KPj4+DQo+Pj4gICoqLw0K Pj4+ICBFRklfU1RBVFVTDQo+Pj4gLUVGSUFQSQ0KPj4+IC1TdGFydEdhdWdlRXggKA0KPj4+ICtJ bnNlcnRGcGR0TWVhc3VyZW1lbnQgKA0KPj4+ICsgIElOIEJPT0xFQU4gICAgICBJc1N0YXJ0LA0K Pj4+ICAgIElOIENPTlNUIFZPSUQgICAqSGFuZGxlLCAgT1BUSU9OQUwNCj4+PiAgICBJTiBDT05T VCBDSEFSOCAgKlRva2VuLCAgIE9QVElPTkFMDQo+Pj4gICAgSU4gQ09OU1QgQ0hBUjggICpNb2R1 bGUsICBPUFRJT05BTA0KPj4+IC0gIElOIFVJTlQ2NCAgICAgICBUaW1lU3RhbXAsDQo+Pj4gKyAg SU4gVUlOVDY0ICAgICAgIFRpY2tlciwNCj4+PiAgICBJTiBVSU5UMzIgICAgICAgSWRlbnRpZmll cg0KPj4+ICAgICkNCj4+PiAgew0KPj4+IC0gIEdBVUdFX0RBVEFfRU5UUllfRVggICAgICAgKkdh dWdlRW50cnlFeEFycmF5Ow0KPj4+IC0gIFVJTlROICAgICAgICAgICAgICAgICAgICAgR2F1Z2VE YXRhU2l6ZTsNCj4+PiAtICBHQVVHRV9EQVRBX0hFQURFUiAgICAgICAgICpOZXdHYXVnZURhdGE7 DQo+Pj4gLSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBPbGRHYXVnZURhdGFTaXplOw0KPj4+ IC0gIEdBVUdFX0RBVEFfSEVBREVSICAgICAgICAgKk9sZEdhdWdlRGF0YTsNCj4+PiAtICBVSU5U MzIgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPj4+IC0gIEVGSV9TVEFUVVMgICAgICAgICAg ICAgICAgU3RhdHVzOw0KPj4+ICsgIEVGSV9HVUlEICAgICAgICAgICAgICAgICAgICAgTW9kdWxl R3VpZDsNCj4+PiArICBDSEFSOCAgICAgICAgICAgICAgICAgICAgICAgIE1vZHVsZU5hbWVbRURL SUlfU1RSSU5HX0VWRU5UX1JFQ09SRF9OQU1FX0xFTkdUSF07DQo+Pj4gKyAgVUlOVDggICAgICAg ICAgICAgICAgICAgICAgICBGcGR0UmVjb3JkW01BWF9SRUNPUkRfU0laRV07DQo+Pj4gKyAgRUZJ X1NUQVRVUyAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+Pj4gKyAgRlBEVF9SRUNPUkRfUFRS ICAgICAgICAgICAgICBGcGR0UmVjb3JkUHRyOw0KPj4+ICsgIEJBU0lDX1JFQ09SRF9JTkZPICAg ICAgICAgICAgUmVjb3JkSW5mbzsNCj4+PiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAg IFRpbWVTdGFtcDsNCj4+PiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgIERlc3RNYXg7 DQo+Pj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICBTdHJMZW5ndGg7DQo+Pj4gKyAg Q09OU1QgQ0hBUjggICAgICAgICAgICAgICAgICAqU3RyaW5nUHRyOw0KPj4+ICsgIEJPT0xFQU4g ICAgICAgICAgICAgICAgICAgICAgVXNlTW9kdWxlTmFtZTsNCj4+PiArDQo+Pj4gKyAgU3RyaW5n UHRyICAgICA9IE5VTEw7DQo+Pj4gKyAgVXNlTW9kdWxlTmFtZSA9IEZBTFNFOw0KPj4+ICsgIFpl cm9NZW0gKE1vZHVsZU5hbWUsIHNpemVvZiAoTW9kdWxlTmFtZSkpOw0KPj4+ICsgIFplcm9NZW0g KEZwZHRSZWNvcmQsIHNpemVvZiAoRnBkdFJlY29yZCkpOw0KPj4+DQo+Pj4gLSAgU3RhdHVzID0g RWZpQWNxdWlyZUxvY2tPckZhaWwgKCZtUGVyZlJlY29yZExvY2spOw0KPj4+ICsgIC8vDQo+Pj4g KyAgLy8gR2V0IHJlY29yZCBpbmZvICh0eXBlLCBzaXplLCBQcm9ncmVzc0lEIGFuZCBNb2R1bGUg R3VpZCkuDQo+Pj4gKyAgLy8NCj4+PiArICBTdGF0dXMgPSBHZXRGcGR0UmVjb3JkSW5mbyAoSXNT dGFydCwgSGFuZGxlLCBUb2tlbiwgTW9kdWxlLCAmUmVjb3JkSW5mbywgJlVzZU1vZHVsZU5hbWUp Ow0KPj4+ICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+PiAgICAgIHJldHVybiBTdGF0 dXM7DQo+Pj4gICAgfQ0KPj4+DQo+Pj4gLSAgSW5kZXggPSBtR2F1Z2VEYXRhLT5OdW1iZXJPZkVu dHJpZXM7DQo+Pj4gLSAgaWYgKEluZGV4ID49IG1NYXhHYXVnZVJlY29yZHMpIHsNCj4+PiArICAv Lw0KPj4+ICsgIC8vIElmIFBFUkZfU1RBUlQoKS9QRVJGX0VORCgpIGhhdmUgc3BlY2lmaWVkIHRo ZSBQcm9ncmVzc0lELGl0IGhhcyBoaWdoIHByaW9yaXR5Lg0KPj4+ICsgIC8vICEhISBOb3RlOiBJ ZiB0aGUgUHJlZiBpcyBub3QgdGhlIGtub3duIFRva2VuIHVzZWQgaW4gdGhlIGNvcmUgYnV0IGhh dmUgc2FtZQ0KPj4+ICsgIC8vIElEIHdpdGggdGhlIGNvcmUgVG9rZW4sIHRoaXMgY2FzZSB3aWxs IG5vdCBiZSBzdXBwb3J0ZWQuDQo+Pj4gKyAgLy8gQW5kIGluIGN1cnJ0bnQgdXNhZ2UgbW9kZSwg Zm9yIHRoZSB1bmtvd24gSUQsIHRoZXJlIGlzIGEgZ2VuZXJhbCBydWxlOg0KPj4+ICsgIC8vIElm IGl0IGlzIHN0YXJ0IHByZWY6IHRoZSBsb3dlciA0IGJpdHMgb2YgdGhlIElEIHNob3VsZCBiZSAw Lg0KPj4+ICsgIC8vIElmIGl0IGlzIGVuZCBwcmVmOiB0aGUgbG93ZXIgNCBiaXRzIG9mIHRoZSBJ RCBzaG91bGQgbm90IGJlIDAuDQo+Pj4gKyAgLy8gSWYgaW5wdXQgSUQgZG9lc24ndCBmb2xsb3cg dGhlIHJ1bGUsIHdlIHdpbGwgYWRqdXN0IGl0Lg0KPj4+ICsgIC8vDQo+Pj4gKyAgaWYgKChJZGVu dGlmaWVyICE9IDApICYmIChJc0tub3duSUQgKElkZW50aWZpZXIpKSAmJiAoIUlzS25vd25Ub2tl bnMgKFRva2VuKSkpIHsNCj4+PiArICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+Pj4gKyAg fSBlbHNlIGlmICgoSWRlbnRpZmllciAhPSAwKSAmJiAoIUlzS25vd25JRCAoSWRlbnRpZmllcikp ICYmICghSXNLbm93blRva2VucyAoVG9rZW4pKSkgew0KPj4+ICsgICAgaWYgKElzU3RhcnQgJiYg KChJZGVudGlmaWVyICYgMHgwMDBGKSAhPSAwKSkgew0KPj4+ICsgICAgICBJZGVudGlmaWVyICY9 IDB4RkZGMDsNCj4+PiArICAgIH0gZWxzZSBpZiAoKCFJc1N0YXJ0KSAmJiAoKElkZW50aWZpZXIg JiAweDAwMEYpID09IDApKSB7DQo+Pj4gKyAgICAgIElkZW50aWZpZXIgKz0gMTsNCj4+PiArICAg IH0NCj4+PiArICAgIFJlY29yZEluZm8uUHJvZ3Jlc3NJRCA9IChVSU5UMTYpSWRlbnRpZmllcjsN Cj4+PiArICB9DQo+Pj4gKw0KPj4+ICsgIGlmIChtRnBkdEJ1ZmZlcklzUmVwb3J0ZWQpIHsNCj4+ PiArICAgIEZwZHRSZWNvcmRQdHIuUmVjb3JkSGVhZGVyID0gKEVGSV9BQ1BJXzVfMF9GUERUX1BF UkZPUk1BTkNFX1JFQ09SRF9IRUFERVIgKilGcGR0UmVjb3JkOw0KPj4+ICsgIH0gZWxzZSB7DQo+ Pj4gKyAgICAvLw0KPj4+ICsgICAgLy8gQ2hlY2sgaWYgcHJlLWFsbG9jYXRlZCBidWZmZXIgaXMg ZnVsbA0KPj4+ICAgICAgLy8NCj4+PiAtICAgIC8vIFRyeSB0byBlbmxhcmdlIHRoZSBzY2FsZSBv ZiBnYXVnZSBhcnJheS4NCj4+PiArICAgIGlmIChtUGVyZm9ybWFuY2VMZW5ndGggKyBSZWNvcmRJ bmZvLlJlY29yZFNpemUgPiBtTWF4UGVyZm9ybWFuY2VMZW5ndGgpIHsNCj4+PiArICAgICAgbVBl cmZvcm1hbmNlUG9pbnRlciA9IFJlYWxsb2NhdGVQb29sICgNCj4+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbVBlcmZvcm1hbmNlTGVuZ3RoLA0KPj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBtUGVyZm9ybWFuY2VMZW5ndGggKyBSZWNvcmRJbmZvLlJlY29yZFNpemUg KyBGSVJNV0FSRV9SRUNPUkRfQlVGRkVSLA0KPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtUGVyZm9ybWFuY2VQb2ludGVyDQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7DQo+Pj4gKw0KPj4+ICsgICAgICBpZiAobVBlcmZvcm1hbmNlUG9pbnRlciA9PSBOVUxM KSB7DQo+Pj4gKyAgICAgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPj4+ICsgICAg ICB9DQo+Pj4gKyAgICAgIG1NYXhQZXJmb3JtYW5jZUxlbmd0aCA9IG1QZXJmb3JtYW5jZUxlbmd0 aCArIFJlY29yZEluZm8uUmVjb3JkU2l6ZSArIEZJUk1XQVJFX1JFQ09SRF9CVUZGRVI7DQo+Pj4g KyAgICB9DQo+Pj4gICAgICAvLw0KPj4+IC0gICAgT2xkR2F1Z2VEYXRhICAgICAgPSBtR2F1Z2VE YXRhOw0KPj4+IC0gICAgT2xkR2F1Z2VEYXRhU2l6ZSAgPSBzaXplb2YgKEdBVUdFX0RBVEFfSEVB REVSKSArIHNpemVvZiAoR0FVR0VfREFUQV9FTlRSWV9FWCkgKiBtTWF4R2F1Z2VSZWNvcmRzOw0K Pj4+ICsgICAgLy8gQ292ZXJ0IGJ1ZmZlciB0byBGUERUIFB0ciBVbmlvbiB0eXBlLg0KPj4+ICsg ICAgLy8NCj4+PiArICAgIEZwZHRSZWNvcmRQdHIuUmVjb3JkSGVhZGVyID0gKEVGSV9BQ1BJXzVf MF9GUERUX1BFUkZPUk1BTkNFX1JFQ09SRF9IRUFERVIgKikobVBlcmZvcm1hbmNlUG9pbnRlciAr IG1QZXJmb3JtYW5jZUxlbmd0aCk7DQo+Pj4gKyAgfQ0KPj4+ICsgIEZwZHRSZWNvcmRQdHIuUmVj b3JkSGVhZGVyLT5MZW5ndGggPSAwOw0KPj4+DQo+Pj4gLSAgICBHYXVnZURhdGFTaXplICAgICA9 IHNpemVvZiAoR0FVR0VfREFUQV9IRUFERVIpICsgc2l6ZW9mIChHQVVHRV9EQVRBX0VOVFJZX0VY KSAqIG1NYXhHYXVnZVJlY29yZHMgKiAyOw0KPj4+ICsgIC8vDQo+Pj4gKyAgLy8gR2V0IHRoZSBU aW1lU3RhbXAuDQo+Pj4gKyAgLy8NCj4+PiArICBpZiAoVGlja2VyID09IDApIHsNCj4+PiArICAg IFRpY2tlciAgICA9IEdldFBlcmZvcm1hbmNlQ291bnRlciAoKTsNCj4+PiArICAgIFRpbWVTdGFt cCA9IEdldFRpbWVJbk5hbm9TZWNvbmQgKFRpY2tlcik7DQo+Pj4gKyAgfSBlbHNlIGlmIChUaWNr ZXIgPT0gMSkgew0KPj4+ICsgICAgVGltZVN0YW1wID0gMDsNCj4+PiArICB9IGVsc2Ugew0KPj4+ ICsgICAgVGltZVN0YW1wID0gR2V0VGltZUluTmFub1NlY29uZCAoVGlja2VyKTsNCj4+PiArICB9 DQo+Pj4NCj4+PiAtICAgIE5ld0dhdWdlRGF0YSA9IEFsbG9jYXRlWmVyb1Bvb2wgKEdhdWdlRGF0 YVNpemUpOw0KPj4+IC0gICAgaWYgKE5ld0dhdWdlRGF0YSA9PSBOVUxMKSB7DQo+Pj4gLSAgICAg IEVmaVJlbGVhc2VMb2NrICgmbVBlcmZSZWNvcmRMb2NrKTsNCj4+PiAtICAgICAgcmV0dXJuIEVG SV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPj4+ICsgIC8vDQo+Pj4gKyAgLy8gR2V0IHRoZSBNb2R1bGVO YW1lIGFuZCBNb2R1bGVHdWlkIGZvcm0gdGhlIGhhbmRsZS4NCj4+PiArICAvLw0KPj4+ICsgIEdl dE1vZHVsZUluZm9Gcm9tSGFuZGxlICgoRUZJX0hBTkRMRSAqKUhhbmRsZSwgTW9kdWxlTmFtZSwg c2l6ZW9mIChNb2R1bGVOYW1lKSwgJk1vZHVsZUd1aWQpOw0KPj4+ICsNCj4+PiArICAvLw0KPj4+ ICsgIC8vIEZpbGwgaW4gdGhlIHJlY29yZCBpbmZvcm1hdGlvbi4NCj4+PiArICAvLw0KPj4+ICsg IHN3aXRjaCAoUmVjb3JkSW5mby5UeXBlKSB7DQo+Pj4gKyAgY2FzZSBHVUlEX0VWRU5UX1RZUEU6 DQo+Pj4gKyAgICBGcGR0UmVjb3JkUHRyLkd1aWRFdmVudC0+SGVhZGVyLlR5cGUgICAgICAgICAg ICAgICAgPSBHVUlEX0VWRU5UX1RZUEU7DQo+Pj4gKyAgICBGcGR0UmVjb3JkUHRyLkd1aWRFdmVu dC0+SGVhZGVyLkxlbmd0aCAgICAgICAgICAgICAgPSBSZWNvcmRJbmZvLlJlY29yZFNpemU7DQo+ Pj4gKyAgICBGcGR0UmVjb3JkUHRyLkd1aWRFdmVudC0+SGVhZGVyLlJldmlzaW9uICAgICAgICAg ICAgPSBSRUNPUkRfUkVWSVNJT05fMTsNCj4+PiArICAgIEZwZHRSZWNvcmRQdHIuR3VpZEV2ZW50 LT5Qcm9ncmVzc0lEICAgICAgICAgICAgICAgICA9IFJlY29yZEluZm8uUHJvZ3Jlc3NJRDsNCj4+ PiArICAgIEZwZHRSZWNvcmRQdHIuR3VpZEV2ZW50LT5UaW1lc3RhbXAgICAgICAgICAgICAgICAg ICA9IFRpbWVTdGFtcDsNCj4+PiArICAgIENvcHlNZW0gKCZGcGR0UmVjb3JkUHRyLkd1aWRFdmVu dC0+R3VpZCwgJk1vZHVsZUd1aWQsIHNpemVvZiAoRnBkdFJlY29yZFB0ci5HdWlkRXZlbnQtPkd1 aWQpKTsNCj4+PiArICAgIGJyZWFrOw0KPj4+ICsNCj4+PiArICBjYXNlIERZTkFNSUNfU1RSSU5H X0VWRU5UX1RZUEU6DQo+Pj4gKyAgICBGcGR0UmVjb3JkUHRyLkR5bmFtaWNTdHJpbmdFdmVudC0+ SGVhZGVyLlR5cGUgICAgICAgPSBEWU5BTUlDX1NUUklOR19FVkVOVF9UWVBFOw0KPj4+ICsgICAg RnBkdFJlY29yZFB0ci5EeW5hbWljU3RyaW5nRXZlbnQtPkhlYWRlci5MZW5ndGggICAgID0gUmVj b3JkSW5mby5SZWNvcmRTaXplOw0KPj4+ICsgICAgRnBkdFJlY29yZFB0ci5EeW5hbWljU3RyaW5n RXZlbnQtPkhlYWRlci5SZXZpc2lvbiAgID0gUkVDT1JEX1JFVklTSU9OXzE7DQo+Pj4gKyAgICBG cGR0UmVjb3JkUHRyLkR5bmFtaWNTdHJpbmdFdmVudC0+UHJvZ3Jlc3NJRCAgICAgICAgPSBSZWNv cmRJbmZvLlByb2dyZXNzSUQ7DQo+Pj4gKyAgICBGcGR0UmVjb3JkUHRyLkR5bmFtaWNTdHJpbmdF dmVudC0+VGltZXN0YW1wICAgICAgICAgPSBUaW1lU3RhbXA7DQo+Pj4gKyAgICBDb3B5TWVtICgm RnBkdFJlY29yZFB0ci5EeW5hbWljU3RyaW5nRXZlbnQtPkd1aWQsICZNb2R1bGVHdWlkLCBzaXpl b2YgKEZwZHRSZWNvcmRQdHIuRHluYW1pY1N0cmluZ0V2ZW50LT5HdWlkKSk7DQo+Pj4gKw0KPj4+ ICsgICAgaWYgKFVzZU1vZHVsZU5hbWUpIHsNCj4+PiArICAgICAgU3RyaW5nUHRyICAgICA9IE1v ZHVsZU5hbWU7DQo+Pj4gKyAgICB9IGVsc2UgaWYgKFRva2VuICE9IE5VTEwpIHsNCj4+PiArICAg ICAgU3RyaW5nUHRyICAgICA9IFRva2VuOw0KPj4+ICsgICAgfSBlbHNlIGlmIChNb2R1bGUgIT0g TlVMTCkgew0KPj4+ICsgICAgICBTdHJpbmdQdHIgICAgID0gTW9kdWxlOw0KPj4+ICsgICAgfSBl bHNlIGlmIChNb2R1bGVOYW1lICE9IE5VTEwpIHsNCj4+PiArICAgICAgU3RyaW5nUHRyICAgICA9 IE1vZHVsZU5hbWU7DQo+Pj4gKyAgICB9DQo+Pj4gKyAgICBpZiAoU3RyaW5nUHRyICE9IE5VTEwg JiYgQXNjaWlTdHJMZW4gKFN0cmluZ1B0cikgIT0gMCkgew0KPj4+ICsgICAgICBTdHJMZW5ndGgg ICAgID0gQXNjaWlTdHJMZW4gKFN0cmluZ1B0cik7DQo+Pj4gKyAgICAgIERlc3RNYXggICAgICAg PSAoUmVjb3JkSW5mby5SZWNvcmRTaXplIC0gc2l6ZW9mIChEWU5BTUlDX1NUUklOR19FVkVOVF9S RUNPUkQpKSAvIHNpemVvZiAoQ0hBUjgpOw0KPj4+ICsgICAgICBpZiAoU3RyTGVuZ3RoID49IERl c3RNYXgpIHsNCj4+PiArICAgICAgICBTdHJMZW5ndGggICA9IERlc3RNYXggLTE7DQo+Pj4gKyAg ICAgIH0NCj4+PiArICAgICAgQXNjaWlTdHJuQ3B5UyAoRnBkdFJlY29yZFB0ci5EeW5hbWljU3Ry aW5nRXZlbnQtPlN0cmluZywgRGVzdE1heCwgU3RyaW5nUHRyLCBTdHJMZW5ndGgpOw0KPj4+ICAg ICAgfQ0KPj4+ICsgICAgYnJlYWs7DQo+Pj4gKw0KPj4+ICsgIGNhc2UgR1VJRF9RV09SRF9FVkVO VF9UWVBFOg0KPj4+ICsgICAgRnBkdFJlY29yZFB0ci5HdWlkUXdvcmRFdmVudC0+SGVhZGVyLlR5 cGUgICAgICAgICAgID0gR1VJRF9RV09SRF9FVkVOVF9UWVBFOw0KPj4+ICsgICAgRnBkdFJlY29y ZFB0ci5HdWlkUXdvcmRFdmVudC0+SGVhZGVyLkxlbmd0aCAgICAgICAgID0gUmVjb3JkSW5mby5S ZWNvcmRTaXplOw0KPj4+ICsgICAgRnBkdFJlY29yZFB0ci5HdWlkUXdvcmRFdmVudC0+SGVhZGVy LlJldmlzaW9uICAgICAgID0gUkVDT1JEX1JFVklTSU9OXzE7DQo+Pj4gKyAgICBGcGR0UmVjb3Jk UHRyLkd1aWRRd29yZEV2ZW50LT5Qcm9ncmVzc0lEICAgICAgICAgICAgPSBSZWNvcmRJbmZvLlBy b2dyZXNzSUQ7DQo+Pj4gKyAgICBGcGR0UmVjb3JkUHRyLkd1aWRRd29yZEV2ZW50LT5UaW1lc3Rh bXAgICAgICAgICAgICAgPSBUaW1lU3RhbXA7DQo+Pj4gKyAgICBDb3B5TWVtICgmRnBkdFJlY29y ZFB0ci5HdWlkUXdvcmRFdmVudC0+R3VpZCwgJk1vZHVsZUd1aWQsIHNpemVvZiAoRnBkdFJlY29y ZFB0ci5HdWlkUXdvcmRFdmVudC0+R3VpZCkpOw0KPj4+ICsgICAgaWYgKChNT0RVTEVfTE9BRElN QUdFX1NUQVJUX0lEID09IFJlY29yZEluZm8uUHJvZ3Jlc3NJRCkgJiYgQXNjaWlTdHJDbXAgKFRv a2VuLCBMT0FEX0lNQUdFX1RPSykgPT0gMCkgew0KPj4+ICsgICAgICBtTG9hZEltYWdlQ291bnQr KzsNCj4+PiArICAgICAgRnBkdFJlY29yZFB0ci5HdWlkUXdvcmRFdmVudC0+UXdvcmQgICAgICAg ICAgICAgICA9IG1Mb2FkSW1hZ2VDb3VudDsNCj4+PiArICAgIH0NCj4+PiArICAgIGJyZWFrOw0K Pj4+ICsNCj4+PiArICBjYXNlIEdVSURfUVdPUkRfU1RSSU5HX0VWRU5UX1RZUEU6DQo+Pj4gKyAg ICBGcGR0UmVjb3JkUHRyLkd1aWRRd29yZFN0cmluZ0V2ZW50LT5IZWFkZXIuVHlwZSAgICAgPSBH VUlEX1FXT1JEX1NUUklOR19FVkVOVF9UWVBFOw0KPj4+ICsgICAgRnBkdFJlY29yZFB0ci5HdWlk UXdvcmRTdHJpbmdFdmVudC0+SGVhZGVyLkxlbmd0aCAgID0gUmVjb3JkSW5mby5SZWNvcmRTaXpl Ow0KPj4+ICsgICAgRnBkdFJlY29yZFB0ci5HdWlkUXdvcmRTdHJpbmdFdmVudC0+SGVhZGVyLlJl dmlzaW9uID0gUkVDT1JEX1JFVklTSU9OXzE7DQo+Pj4gKyAgICBGcGR0UmVjb3JkUHRyLkd1aWRR d29yZFN0cmluZ0V2ZW50LT5Qcm9ncmVzc0lEICAgICAgPSBSZWNvcmRJbmZvLlByb2dyZXNzSUQ7 DQo+Pj4gKyAgICBGcGR0UmVjb3JkUHRyLkd1aWRRd29yZFN0cmluZ0V2ZW50LT5UaW1lc3RhbXAg ICAgICAgPSBUaW1lU3RhbXA7DQo+Pj4gKyAgICBDb3B5TWVtICgmRnBkdFJlY29yZFB0ci5HdWlk UXdvcmRTdHJpbmdFdmVudC0+R3VpZCwgJk1vZHVsZUd1aWQsIHNpemVvZiAoRnBkdFJlY29yZFB0 ci5HdWlkUXdvcmRTdHJpbmdFdmVudC0+R3VpZCkpOw0KPj4+ICsgICAgYnJlYWs7DQo+Pj4gKw0K Pj4+ICsgIGRlZmF1bHQ6DQo+Pj4gKyAgICAvLw0KPj4+ICsgICAgLy8gUmVjb3JkIGlzIG5vdCBz dXBwb3J0ZWQgaW4gY3VycmVudCBEWEUgcGhhc2UsIHJldHVybiBFRklfQUJPUlRFRA0KPj4+ICsg ICAgLy8NCj4+PiArICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+Pj4gKyAgfQ0KPj4+ICsN Cj4+PiArICAvLw0KPj4+ICsgIC8vIFJlcG9ydCByZWNvcmQgb25lIGJ5IG9uZSBhZnRlciByZWNv cmRzIGhhdmUgYmVlbiByZXBvcnRlZCB0b2dldGhlci4NCj4+PiArICAvLw0KPj4+ICsgIGlmICht RnBkdEJ1ZmZlcklzUmVwb3J0ZWQpIHsNCj4+PiArICAgICAgLy8NCj4+PiArICAgICAgLy8gQXBw ZW5kIEJvb3QgcmVjb3JkcyB0byB0aGUgYm9vdCBwZXJmb3JtYW5jZSB0YWJsZS4NCj4+PiArICAg ICAgLy8NCj4+PiArICAgICAgaWYgKG1Cb290UmVjb3JkU2l6ZSArIEZwZHRSZWNvcmRQdHIuUmVj b3JkSGVhZGVyLT5MZW5ndGggPiBtQm9vdFJlY29yZE1heFNpemUpIHsNCj4+PiArICAgICAgICBp ZiAoIW1MYWNrU3BhY2VJc1JlcG9ydGVkKSB7DQo+Pj4gKyAgICAgICAgICBERUJVRyAoKERFQlVH X0lORk8sICJEeGVDb3JlUGVyZm9ybWFuY2VMaWI6IE5vIGVub3VnaCBzcGFjZSB0byBzYXZlIGJv b3QgcmVjb3Jkc1xuIikpOw0KPj4+ICsgICAgICAgICAgbUxhY2tTcGFjZUlzUmVwb3J0ZWQgPSBU UlVFOw0KPj4+ICsgICAgICAgIH0NCj4+PiArICAgICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNP VVJDRVM7DQo+Pj4gKyAgICAgIH0gZWxzZSB7DQo+Pj4gKyAgICAgICAgLy8NCj4+PiArICAgICAg ICAvLyBTYXZlIGJvb3QgcmVjb3JkIGludG8gQm9vdFBlcmZvcm1hbmNlIHRhYmxlDQo+Pj4gKyAg ICAgICAgLy8NCj4+PiArICAgICAgICBDb3B5TWVtIChtQm9vdFJlY29yZEJ1ZmZlciArIG1Cb290 UmVjb3JkU2l6ZSwgRnBkdFJlY29yZFB0ci5SZWNvcmRIZWFkZXIsIEZwZHRSZWNvcmRQdHIuUmVj b3JkSGVhZGVyLT5MZW5ndGgpOw0KPj4+ICsgICAgICAgIG1Cb290UmVjb3JkU2l6ZSArPSBGcGR0 UmVjb3JkUHRyLlJlY29yZEhlYWRlci0+TGVuZ3RoOw0KPj4+ICsgICAgICAgIG1BY3BpQm9vdFBl cmZvcm1hbmNlVGFibGUtPkhlYWRlci5MZW5ndGggKz0gRnBkdFJlY29yZFB0ci5SZWNvcmRIZWFk ZXItPkxlbmd0aDsNCj4+PiArICAgICAgfQ0KPj4+ICsgIH0gZWxzZSB7DQo+Pj4gKyAgICAvLw0K Pj4+ICsgICAgLy8gVXBkYXRlIHRoZSBjYWNoZWQgRlBEVCByZWNvcmQgYnVmZmVyLg0KPj4+ICsg ICAgLy8NCj4+PiArICAgIG1QZXJmb3JtYW5jZUxlbmd0aCArPSBGcGR0UmVjb3JkUHRyLlJlY29y ZEhlYWRlci0+TGVuZ3RoOw0KPj4+ICsgIH0NCj4+PiArDQo+Pj4gKyAgcmV0dXJuIEVGSV9TVUND RVNTOw0KPj4+ICt9DQo+Pj4gKw0KPj4+ICsvKioNCj4+PiArICBEdW1wcyBhbGwgdGhlIFBFSSBw ZXJmb3JtYW5jZS4NCj4+PiArDQo+Pj4gKyAgQHBhcmFtICBIb2JTdGFydCAgICAgIEEgcG9pbnRl ciB0byBhIEd1aWQuDQo+Pj4NCj4+PiAtICAgIG1HYXVnZURhdGEgPSBOZXdHYXVnZURhdGE7DQo+ Pj4gLSAgICBtTWF4R2F1Z2VSZWNvcmRzICo9IDI7DQo+Pj4gKyAgVGhpcyBpbnRlcm5hbCBmdW5j dGlvbiBkdW1wcyBhbGwgdGhlIFBFSSBwZXJmb3JtYW5jZSBsb2cgdG8gdGhlIERYRSBwZXJmb3Jt YW5jZSBnYXVnZSBhcnJheS4NCj4+PiArICBJdCByZXRyaWV2ZXMgdGhlIG9wdGlvbmFsIEdVSUQg SE9CIGZvciBQRUkgcGVyZm9ybWFuY2UgYW5kIHRoZW4gc2F2ZXMgdGhlIHBlcmZvcm1hbmNlIGRh dGENCj4+PiArICB0byBEWEUgcGVyZm9ybWFuY2UgZGF0YSBzdHJ1Y3R1cmVzLg0KPj4+DQo+Pj4g KyoqLw0KPj4+ICtWT0lEDQo+Pj4gK0ludGVybmFsR2V0UGVpUGVyZm9ybWFuY2UgKA0KPj4+ICsg IFZPSUQgICpIb2JTdGFydA0KPj4+ICsgICkNCj4+PiArew0KPj4+ICsgIFVJTlQ4ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqRmlybXdhcmVQZXJmb3JtYW5jZUhvYjsNCj4+PiArICBQ RUlfRVhUX0ZJUk1XQVJFX1BFUkZfSEVBREVSICAgICAgICAgKlBlaVBlcmZvcm1hbmNlTG9nSGVh ZGVyOw0KPj4+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqRXZlbnRS ZWM7DQo+Pj4gKyAgRUZJX0hPQl9HVUlEX1RZUEUgICAgICAgICAgICAgICAgICAgICpHdWlkSG9i Ow0KPj4+ICsNCj4+PiArICBHdWlkSG9iID0gR2V0TmV4dEd1aWRIb2IgKCZnRWRraWlFeHRlbmRl ZEZpcm13YXJlUGVyZm9ybWFuY2VHdWlkLCBIb2JTdGFydCk7DQo+Pj4gKyAgd2hpbGUgKEd1aWRI b2IgIT0gTlVMTCkgew0KPj4+ICsgICAgRmlybXdhcmVQZXJmb3JtYW5jZUhvYiAgPSBHRVRfR1VJ RF9IT0JfREFUQSAoR3VpZEhvYik7DQo+Pj4gKyAgICBQZWlQZXJmb3JtYW5jZUxvZ0hlYWRlciA9 IChQRUlfRVhUX0ZJUk1XQVJFX1BFUkZfSEVBREVSICopRmlybXdhcmVQZXJmb3JtYW5jZUhvYjsN Cj4+PiArDQo+Pj4gKyAgICBpZiAobVBlcmZvcm1hbmNlTGVuZ3RoICsgUGVpUGVyZm9ybWFuY2VM b2dIZWFkZXItPlNpemVPZkFsbEVudHJpZXMgPiBtTWF4UGVyZm9ybWFuY2VMZW5ndGgpIHsNCj4+ PiArICAgICAgbVBlcmZvcm1hbmNlUG9pbnRlciA9IFJlYWxsb2NhdGVQb29sICgNCj4+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbVBlcmZvcm1hbmNlTGVuZ3RoLA0KPj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBtUGVyZm9ybWFuY2VMZW5ndGggKw0KPj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoVUlOVE4pUGVpUGVyZm9ybWFuY2VMb2dIZWFkZXIt PlNpemVPZkFsbEVudHJpZXMgKw0KPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG SVJNV0FSRV9SRUNPUkRfQlVGRkVSLA0KPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBtUGVyZm9ybWFuY2VQb2ludGVyDQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7DQo+Pj4gKyAgICAgIEFTU0VSVCAobVBlcmZvcm1hbmNlUG9pbnRlciAhPSBOVUxMKTsNCj4+ PiArICAgICAgbU1heFBlcmZvcm1hbmNlTGVuZ3RoID0gbVBlcmZvcm1hbmNlTGVuZ3RoICsNCj4+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFVJTlROKShQZWlQZXJmb3JtYW5jZUxv Z0hlYWRlci0+U2l6ZU9mQWxsRW50cmllcykgKw0KPj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGSVJNV0FSRV9SRUNPUkRfQlVGRkVSOw0KPj4+ICsgICAgfQ0KPj4+ICsNCj4+PiAr ICAgIEV2ZW50UmVjID0gbVBlcmZvcm1hbmNlUG9pbnRlciArIG1QZXJmb3JtYW5jZUxlbmd0aDsN Cj4+PiArICAgIENvcHlNZW0gKEV2ZW50UmVjLCBGaXJtd2FyZVBlcmZvcm1hbmNlSG9iICsgc2l6 ZW9mIChQRUlfRVhUX0ZJUk1XQVJFX1BFUkZfSEVBREVSKSwgKFVJTlROKShQZWlQZXJmb3JtYW5j ZUxvZ0hlYWRlci0+U2l6ZU9mQWxsRW50cmllcykpOw0KPj4+ICAgICAgLy8NCj4+PiAtICAgIC8v IEluaXRpYWxpemUgbmV3IGRhdGEgYXJyYXkgYW5kIG1pZ3JhdGUgb2xkIGRhdGEgb25lLg0KPj4+ ICsgICAgLy8gVXBkYXRlIHRoZSB1c2VkIGJ1ZmZlciBzaXplLg0KPj4+ICAgICAgLy8NCj4+PiAt ICAgIG1HYXVnZURhdGEgPSBDb3B5TWVtIChtR2F1Z2VEYXRhLCBPbGRHYXVnZURhdGEsIE9sZEdh dWdlRGF0YVNpemUpOw0KPj4+ICsgICAgbVBlcmZvcm1hbmNlTGVuZ3RoICs9IChVSU5UTikoUGVp UGVyZm9ybWFuY2VMb2dIZWFkZXItPlNpemVPZkFsbEVudHJpZXMpOw0KPj4+ICsgICAgbUxvYWRJ bWFnZUNvdW50ICAgICs9IFBlaVBlcmZvcm1hbmNlTG9nSGVhZGVyLT5Mb2FkSW1hZ2VDb3VudDsN Cj4+Pg0KPj4+IC0gICAgRnJlZVBvb2wgKE9sZEdhdWdlRGF0YSk7DQo+Pj4gKyAgICAvLw0KPj4+ ICsgICAgLy8gR2V0IG5leHQgcGVyZm9ybWFuY2UgZ3VpZCBob2INCj4+PiArICAgIC8vDQo+Pj4g KyAgICBHdWlkSG9iID0gR2V0TmV4dEd1aWRIb2IgKCZnRWRraWlFeHRlbmRlZEZpcm13YXJlUGVy Zm9ybWFuY2VHdWlkLCBHRVRfTkVYVF9IT0IgKEd1aWRIb2IpKTsNCj4+PiAgICB9DQo+Pj4gK30N Cj4+Pg0KPj4+IC0gIEdhdWdlRW50cnlFeEFycmF5ICAgICAgICAgICAgICAgPSAoR0FVR0VfREFU QV9FTlRSWV9FWCAqKSAobUdhdWdlRGF0YSArIDEpOw0KPj4+IC0gIEdhdWdlRW50cnlFeEFycmF5 W0luZGV4XS5IYW5kbGUgPSAoRUZJX1BIWVNJQ0FMX0FERFJFU1MpIChVSU5UTikgSGFuZGxlOw0K Pj4+ICsvKioNCj4+PiArICBSZXBvcnQgQm9vdCBQZXJmb3JhbW5jZSB0YWJsZSBhZGRyZXNzIGFz IHJlcG9ydCBzdGF0dXMgY29kZS4NCj4+Pg0KPj4+IC0gIGlmIChUb2tlbiAhPSBOVUxMKSB7DQo+ Pj4gLSAgICBBc2NpaVN0cm5DcHlTIChHYXVnZUVudHJ5RXhBcnJheVtJbmRleF0uVG9rZW4sIERY RV9QRVJGT1JNQU5DRV9TVFJJTkdfU0laRSwgVG9rZW4sIERYRV9QRVJGT1JNQU5DRV9TVFJJTkdf TEVOR1RIKTsNCj4+PiAtICB9DQo+Pj4gLSAgaWYgKE1vZHVsZSAhPSBOVUxMKSB7DQo+Pj4gLSAg ICBBc2NpaVN0cm5DcHlTIChHYXVnZUVudHJ5RXhBcnJheVtJbmRleF0uTW9kdWxlLCBEWEVfUEVS Rk9STUFOQ0VfU1RSSU5HX1NJWkUsIE1vZHVsZSwgRFhFX1BFUkZPUk1BTkNFX1NUUklOR19MRU5H VEgpOw0KPj4+ICsgIEBwYXJhbSAgRXZlbnQgICAgVGhlIGV2ZW50IG9mIG5vdGlmeSBwcm90b2Nv bC4NCj4+PiArICBAcGFyYW0gIENvbnRleHQgIE5vdGlmeSBldmVudCBjb250ZXh0Lg0KPj4+ICsN Cj4+PiArKiovDQo+Pj4gK1ZPSUQNCj4+PiArRUZJQVBJDQo+Pj4gK1JlcG9ydEZwZHRSZWNvcmRC dWZmZXIgKA0KPj4+ICsgIElOIEVGSV9FVkVOVCAgICAgRXZlbnQsDQo+Pj4gKyAgSU4gVk9JRCAg ICAgICAgICAqQ29udGV4dA0KPj4+ICsgICkNCj4+PiArew0KPj4+ICsgIEVGSV9TVEFUVVMgICAg ICBTdGF0dXM7DQo+Pj4gKyAgVUlOVDY0ICAgICAgICAgIEJQRFRBZGRyOw0KPj4+ICsNCj4+PiAr ICBpZiAoIW1GcGR0QnVmZmVySXNSZXBvcnRlZCkgew0KPj4+ICsgICAgU3RhdHVzID0gQWxsb2Nh dGVCb290UGVyZm9ybWFuY2VUYWJsZSAoKTsNCj4+PiArICAgIGlmICghRUZJX0VSUk9SKFN0YXR1 cykpIHsNCj4+PiArICAgICAgQlBEVEFkZHIgPSAoVUlOVDY0KShVSU5UTiltQWNwaUJvb3RQZXJm b3JtYW5jZVRhYmxlOw0KPj4+ICsgICAgICBSRVBPUlRfU1RBVFVTX0NPREVfRVggKA0KPj4+ICsg ICAgICAgICAgRUZJX1BST0dSRVNTX0NPREUsDQo+Pj4gKyAgICAgICAgICBFRklfU09GVFdBUkVf RFhFX0JTX0RSSVZFUiwNCj4+PiArICAgICAgICAgIDAsDQo+Pj4gKyAgICAgICAgICBOVUxMLA0K Pj4+ICsgICAgICAgICAgJmdFZmlGaXJtd2FyZVBlcmZvcm1hbmNlR3VpZCwNCj4+PiArICAgICAg ICAgICZCUERUQWRkciwNCj4+PiArICAgICAgICAgIHNpemVvZiAoVUlOVDY0KQ0KPj4+ICsgICAg ICAgICAgKTsNCj4+PiArICAgIH0NCj4+PiArICAgIC8vDQo+Pj4gKyAgICAvLyBGcmVlIENhY2hl ZCBGUERUIHJlY29yZCBCdWZmZXINCj4+PiArICAgIC8vDQo+Pj4gKyAgICBpZiAobVBlcmZvcm1h bmNlUG9pbnRlciAhPSBOVUxMKSB7DQo+Pj4gKyAgICAgIEZyZWVQb29sIChtUGVyZm9ybWFuY2VQ b2ludGVyKTsNCj4+PiArICAgICAgbVBlcmZvcm1hbmNlUG9pbnRlciAgID0gTlVMTDsNCj4+PiAr ICAgIH0NCj4+PiArICAgIG1QZXJmb3JtYW5jZUxlbmd0aCAgICA9IDA7DQo+Pj4gKyAgICBtTWF4 UGVyZm9ybWFuY2VMZW5ndGggPSAwOw0KPj4+ICsgICAgLy8NCj4+PiArICAgIC8vIFNldCBGUERU IHJlcG9ydCBzdGF0ZSB0byBUUlVFLg0KPj4+ICsgICAgLy8NCj4+PiArICAgIG1GcGR0QnVmZmVy SXNSZXBvcnRlZCA9IFRSVUU7DQo+Pj4gICAgfQ0KPj4+ICt9DQo+Pj4NCj4+PiAtICBHYXVnZUVu dHJ5RXhBcnJheVtJbmRleF0uRW5kVGltZVN0YW1wID0gMDsNCj4+PiAtICBHYXVnZUVudHJ5RXhB cnJheVtJbmRleF0uSWRlbnRpZmllciA9IElkZW50aWZpZXI7DQo+Pj4gKy8qKg0KPj4+ICsgIEFk ZHMgYSByZWNvcmQgYXQgdGhlIGVuZCBvZiB0aGUgcGVyZm9ybWFuY2UgbWVhc3VyZW1lbnQgbG9n DQo+Pj4gKyAgdGhhdCByZWNvcmRzIHRoZSBzdGFydCB0aW1lIG9mIGEgcGVyZm9ybWFuY2UgbWVh c3VyZW1lbnQuDQo+Pj4NCj4+PiAtICBpZiAoVGltZVN0YW1wID09IDApIHsNCj4+PiAtICAgIFRp bWVTdGFtcCA9IEdldFBlcmZvcm1hbmNlQ291bnRlciAoKTsNCj4+PiAtICB9DQo+Pj4gLSAgR2F1 Z2VFbnRyeUV4QXJyYXlbSW5kZXhdLlN0YXJ0VGltZVN0YW1wID0gVGltZVN0YW1wOw0KPj4+ICsg IEFkZHMgYSByZWNvcmQgdG8gdGhlIGVuZCBvZiB0aGUgcGVyZm9ybWFuY2UgbWVhc3VyZW1lbnQg bG9nDQo+Pj4gKyAgdGhhdCBjb250YWlucyB0aGUgSGFuZGxlLCBUb2tlbiwgTW9kdWxlIGFuZCBJ ZGVudGlmaWVyLg0KPj4+ICsgIFRoZSBlbmQgdGltZSBvZiB0aGUgbmV3IHJlY29yZCBtdXN0IGJl IHNldCB0byB6ZXJvLg0KPj4+ICsgIElmIFRpbWVTdGFtcCBpcyBub3QgemVybywgdGhlbiBUaW1l U3RhbXAgaXMgdXNlZCB0byBmaWxsIGluIHRoZSBzdGFydCB0aW1lIGluIHRoZSByZWNvcmQuDQo+ Pj4gKyAgSWYgVGltZVN0YW1wIGlzIHplcm8sIHRoZSBzdGFydCB0aW1lIGluIHRoZSByZWNvcmQg aXMgZmlsbGVkIGluIHdpdGggdGhlIHZhbHVlDQo+Pj4gKyAgcmVhZCBmcm9tIHRoZSBjdXJyZW50 IHRpbWUgc3RhbXAuDQo+Pj4NCj4+PiAtICBtR2F1Z2VEYXRhLT5OdW1iZXJPZkVudHJpZXMrKzsN Cj4+PiArICBAcGFyYW0gIEhhbmRsZSAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gZW52aXJv bm1lbnQgc3BlY2lmaWMgY29udGV4dCB1c2VkDQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0byBpZGVudGlmeSB0aGUgY29tcG9uZW50IGJlaW5nIG1lYXN1cmVkLg0KPj4+ ICsgIEBwYXJhbSAgVG9rZW4gICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byBhIE51bGwtdGVy bWluYXRlZCBBU0NJSSBzdHJpbmcNCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRoYXQgaWRlbnRpZmllcyB0aGUgY29tcG9uZW50IGJlaW5nIG1lYXN1cmVkLg0KPj4+ICsg IEBwYXJhbSAgTW9kdWxlICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byBhIE51bGwtdGVybWlu YXRlZCBBU0NJSSBzdHJpbmcNCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRoYXQgaWRlbnRpZmllcyB0aGUgbW9kdWxlIGJlaW5nIG1lYXN1cmVkLg0KPj4+ICsgIEBwYXJh bSAgVGltZVN0YW1wICAgICAgICAgICAgICAgNjQtYml0IHRpbWUgc3RhbXAuDQo+Pj4gKyAgQHBh cmFtICBJZGVudGlmaWVyICAgICAgICAgICAgICAzMi1iaXQgaWRlbnRpZmllci4gSWYgdGhlIHZh bHVlIGlzIDAsIHRoZSBjcmVhdGVkIHJlY29yZA0KPj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaXMgc2FtZSBhcyB0aGUgb25lIGNyZWF0ZWQgYnkgU3RhcnRHYXVnZSBvZiBQ RVJGT1JNQU5DRV9QUk9UT0NPTC4NCj4+Pg0KPj4+IC0gIEVmaVJlbGVhc2VMb2NrICgmbVBlcmZS ZWNvcmRMb2NrKTsNCj4+PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgIFRoZSBk YXRhIHdhcyByZWFkIGNvcnJlY3RseSBmcm9tIHRoZSBkZXZpY2UuDQo+Pj4gKyAgQHJldHZhbCBF RklfT1VUX09GX1JFU09VUkNFUyAgICBUaGVyZSBhcmUgbm90IGVub3VnaCByZXNvdXJjZXMgdG8g cmVjb3JkIHRoZSBtZWFzdXJlbWVudC4NCj4+Pg0KPj4+IC0gIHJldHVybiBFRklfU1VDQ0VTUzsN Cj4+PiArKiovDQo+Pj4gK0VGSV9TVEFUVVMNCj4+PiArRUZJQVBJDQo+Pj4gK1N0YXJ0R2F1Z2VF eCAoDQo+Pj4gKyAgSU4gQ09OU1QgVk9JRCAgICpIYW5kbGUsICBPUFRJT05BTA0KPj4+ICsgIElO IENPTlNUIENIQVI4ICAqVG9rZW4sICAgT1BUSU9OQUwNCj4+PiArICBJTiBDT05TVCBDSEFSOCAg Kk1vZHVsZSwgIE9QVElPTkFMDQo+Pj4gKyAgSU4gVUlOVDY0ICAgICAgIFRpbWVTdGFtcCwNCj4+ PiArICBJTiBVSU5UMzIgICAgICAgSWRlbnRpZmllcg0KPj4+ICsgICkNCj4+PiArew0KPj4+ICsg IHJldHVybiBJbnNlcnRGcGR0TWVhc3VyZW1lbnQgKFRSVUUsIEhhbmRsZSwgVG9rZW4sIE1vZHVs ZSwgVGltZVN0YW1wLCBJZGVudGlmaWVyKTsNCj4+PiAgfQ0KPj4+DQo+Pj4gIC8qKg0KPj4+ICAg IFNlYXJjaGVzIHRoZSBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudCBsb2cgZnJvbSB0aGUgYmVnaW5u aW5nIG9mIHRoZSBsb2cNCj4+PiAgICBmb3IgdGhlIGZpcnN0IG1hdGNoaW5nIHJlY29yZCB0aGF0 IGNvbnRhaW5zIGEgemVybyBlbmQgdGltZSBhbmQgZmlsbHMgaW4gYSB2YWxpZCBlbmQgdGltZS4N Cj4+Pg0KPj4+ICAgIFNlYXJjaGVzIHRoZSBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudCBsb2cgZnJv bSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb2cNCj4+PiAtICBmb3IgdGhlIGZpcnN0IHJlY29yZCB0 aGF0IG1hdGNoZXMgSGFuZGxlLCBUb2tlbiBhbmQgTW9kdWxlIGFuZCBoYXMgYW4gZW5kIHRpbWUg dmFsdWUgb2YgemVyby4NCj4+PiArICBmb3IgdGhlIGZpcnN0IHJlY29yZCB0aGF0IG1hdGNoZXMg SGFuZGxlLCBUb2tlbiwgTW9kdWxlIGFuZCBJZGVudGlmaWVyIGFuZCBoYXMgYW4gZW5kIHRpbWUg dmFsdWUgb2YgemVyby4NCj4+PiAgICBJZiB0aGUgcmVjb3JkIGNhbiBub3QgYmUgZm91bmQgdGhl biByZXR1cm4gRUZJX05PVF9GT1VORC4NCj4+PiAgICBJZiB0aGUgcmVjb3JkIGlzIGZvdW5kIGFu ZCBUaW1lU3RhbXAgaXMgbm90IHplcm8sDQo+Pj4gICAgdGhlbiB0aGUgZW5kIHRpbWUgaW4gdGhl IHJlY29yZCBpcyBmaWxsZWQgaW4gd2l0aCB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5IFRpbWVTdGFt cC4NCj4+PiAgICBJZiB0aGUgcmVjb3JkIGlzIGZvdW5kIGFuZCBUaW1lU3RhbXAgaXMgemVybywg dGhlbiB0aGUgZW5kIHRpbWUgaW4gdGhlIG1hdGNoaW5nIHJlY29yZA0KPj4+ICAgIGlzIGZpbGxl ZCBpbiB3aXRoIHRoZSBjdXJyZW50IHRpbWUgc3RhbXAgdmFsdWUuDQo+Pj4gQEAgLTI2MCw4OSAr MTE4OCwxOSBAQCBFbmRHYXVnZUV4ICgNCj4+PiAgICBJTiBDT05TVCBDSEFSOCAgKk1vZHVsZSwg IE9QVElPTkFMDQo+Pj4gICAgSU4gVUlOVDY0ICAgICAgIFRpbWVTdGFtcCwNCj4+PiAgICBJTiBV SU5UMzIgICAgICAgSWRlbnRpZmllcg0KPj4+ICAgICkNCj4+PiAgew0KPj4+IC0gIEdBVUdFX0RB VEFfRU5UUllfRVggKkdhdWdlRW50cnlFeEFycmF5Ow0KPj4+IC0gIFVJTlQzMiAgICAgICAgICAg ICAgSW5kZXg7DQo+Pj4gLSAgRUZJX1NUQVRVUyAgICAgICAgICBTdGF0dXM7DQo+Pj4gLQ0KPj4+ IC0gIFN0YXR1cyA9IEVmaUFjcXVpcmVMb2NrT3JGYWlsICgmbVBlcmZSZWNvcmRMb2NrKTsNCj4+ PiAtICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+Pj4gLSAgICByZXR1cm4gU3RhdHVzOw0K Pj4+IC0gIH0NCj4+PiAtDQo+Pj4gLSAgaWYgKFRpbWVTdGFtcCA9PSAwKSB7DQo+Pj4gLSAgICBU aW1lU3RhbXAgPSBHZXRQZXJmb3JtYW5jZUNvdW50ZXIgKCk7DQo+Pj4gLSAgfQ0KPj4+IC0NCj4+ PiAtICBJbmRleCA9IEludGVybmFsU2VhcmNoRm9yR2F1Z2VFbnRyeSAoSGFuZGxlLCBUb2tlbiwg TW9kdWxlLCBJZGVudGlmaWVyKTsNCj4+PiAtICBpZiAoSW5kZXggPj0gbUdhdWdlRGF0YS0+TnVt YmVyT2ZFbnRyaWVzKSB7DQo+Pj4gLSAgICBFZmlSZWxlYXNlTG9jayAoJm1QZXJmUmVjb3JkTG9j ayk7DQo+Pj4gLSAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4+PiAtICB9DQo+Pj4gLSAgR2F1 Z2VFbnRyeUV4QXJyYXkgPSAoR0FVR0VfREFUQV9FTlRSWV9FWCAqKSAobUdhdWdlRGF0YSArIDEp Ow0KPj4+IC0gIEdhdWdlRW50cnlFeEFycmF5W0luZGV4XS5FbmRUaW1lU3RhbXAgPSBUaW1lU3Rh bXA7DQo+Pj4gLQ0KPj4+IC0gIEVmaVJlbGVhc2VMb2NrICgmbVBlcmZSZWNvcmRMb2NrKTsNCj4+ PiAtICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+Pj4gKyAgcmV0dXJuIEluc2VydEZwZHRNZWFzdXJl bWVudCAoRkFMU0UsIEhhbmRsZSwgVG9rZW4sIE1vZHVsZSwgVGltZVN0YW1wLCBJZGVudGlmaWVy KTsNCj4+PiAgfQ0KPj4+DQo+Pj4gIC8qKg0KPj4+ICAgIFJldHJpZXZlcyBhIHByZXZpb3VzbHkg bG9nZ2VkIHBlcmZvcm1hbmNlIG1lYXN1cmVtZW50Lg0KPj4+ICAgIEl0IGNhbiBhbHNvIHJldHJp ZXZlIHRoZSBsb2cgY3JlYXRlZCBieSBTdGFydEdhdWdlIGFuZCBFbmRHYXVnZSBvZiBQRVJGT1JN QU5DRV9QUk9UT0NPTCwNCj4+PiAgICBhbmQgdGhlbiBhc3NpZ24gdGhlIElkZW50aWZpZXIgd2l0 aCAwLg0KPj4+DQo+Pj4gLSAgUmV0cmlldmVzIHRoZSBwZXJmb3JtYW5jZSBsb2cgZW50cnkgZnJv bSB0aGUgcGVyZm9ybWFuY2UgbG9nIHNwZWNpZmllZCBieSBMb2dFbnRyeUtleS4NCj4+PiAtICBJ ZiBpdCBzdGFuZHMgZm9yIGEgdmFsaWQgZW50cnksIHRoZW4gRUZJX1NVQ0NFU1MgaXMgcmV0dXJu ZWQgYW5kDQo+Pj4gLSAgR2F1Z2VEYXRhRW50cnlFeCBzdG9yZXMgdGhlIHBvaW50ZXIgdG8gdGhh dCBlbnRyeS4NCj4+PiAtDQo+Pj4gLSAgVGhpcyBpbnRlcm5hbCBmdW5jdGlvbiBpcyBhZGRlZCB0 byBhdm9pZCByZWxlYXNpbmcgbG9jayBiZWZvcmUgZWFjaCByZXR1cm4gc3RhdGVtZW50Lg0KPj4+ IC0NCj4+PiAtICBAcGFyYW0gIExvZ0VudHJ5S2V5ICAgICAgICAgICAgIFRoZSBrZXkgZm9yIHRo ZSBwcmV2aW91cyBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudCBsb2cgZW50cnkuDQo+Pj4gLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiAwLCB0aGVuIHRoZSBmaXJzdCBwZXJmb3Jt YW5jZSBtZWFzdXJlbWVudCBsb2cgZW50cnkgaXMgcmV0cmlldmVkLg0KPj4+IC0gIEBwYXJhbSAg R2F1Z2VEYXRhRW50cnlFeCAgICAgICAgVGhlIGluZGlyZWN0IHBvaW50ZXIgdG8gdGhlIGV4dGVu ZGVkIGdhdWdlIGRhdGEgZW50cnkgc3BlY2lmaWVkIGJ5IExvZ0VudHJ5S2V5DQo+Pj4gLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGUgcmV0cmlldmFsIGlzIHN1Y2Nlc3Nm dWwuDQo+Pj4gLQ0KPj4+IC0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgVGhlIEd1 YWdlRGF0YUVudHJ5RXggaXMgc3VjY2Vzc2Z1bGx5IGZvdW5kIGJhc2VkIG9uIExvZ0VudHJ5S2V5 Lg0KPj4+IC0gIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICAgVGhlIExvZ0VudHJ5S2V5 IGlzIHRoZSBsYXN0IGVudHJ5IChlcXVhbHMgdG8gdGhlIHRvdGFsIGVudHJ5IG51bWJlcikuDQo+ Pj4gLSAgQHJldHZhbCBFRklfSU5WQUxJREVfUEFSQU1FVEVSICBUaGUgTG9nRW50cnlLZXkgaXMg bm90IGEgdmFsaWQgZW50cnkgKGdyZWF0ZXIgdGhhbiB0aGUgdG90YWwgZW50cnkgbnVtYmVyKS4N Cj4+PiAtICBAcmV0dmFsIEVGSV9JTlZBTElERV9QQVJBTUVURVIgIEdhdWdlRGF0YUVudHJ5RXgg aXMgTlVMTC4NCj4+PiAtDQo+Pj4gLSoqLw0KPj4+IC1FRklfU1RBVFVTDQo+Pj4gLUVGSUFQSQ0K Pj4+IC1JbnRlcm5hbEdldEdhdWdlRXggKA0KPj4+IC0gIElOICBVSU5UTiAgICAgICAgICAgICAg ICAgTG9nRW50cnlLZXksDQo+Pj4gLSAgT1VUIEdBVUdFX0RBVEFfRU5UUllfRVggICAqKkdhdWdl RGF0YUVudHJ5RXgNCj4+PiAtICApDQo+Pj4gLXsNCj4+PiAtICBVSU5UTiAgICAgICAgICAgICAg IE51bWJlck9mRW50cmllczsNCj4+PiAtICBHQVVHRV9EQVRBX0VOVFJZX0VYICpHYXVnZUVudHJ5 RXhBcnJheTsNCj4+PiAtDQo+Pj4gLSAgTnVtYmVyT2ZFbnRyaWVzID0gKFVJTlROKSAobUdhdWdl RGF0YS0+TnVtYmVyT2ZFbnRyaWVzKTsNCj4+PiAtICBpZiAoTG9nRW50cnlLZXkgPiBOdW1iZXJP ZkVudHJpZXMpIHsNCj4+PiAtICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+Pj4g LSAgfQ0KPj4+IC0gIGlmIChMb2dFbnRyeUtleSA9PSBOdW1iZXJPZkVudHJpZXMpIHsNCj4+PiAt ICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPj4+IC0gIH0NCj4+PiAtDQo+Pj4gLSAgR2F1Z2VF bnRyeUV4QXJyYXkgPSAoR0FVR0VfREFUQV9FTlRSWV9FWCAqKSAobUdhdWdlRGF0YSArIDEpOw0K Pj4+IC0NCj4+PiAtICBpZiAoR2F1Z2VEYXRhRW50cnlFeCA9PSBOVUxMKSB7DQo+Pj4gLSAgICBy ZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPj4+IC0gIH0NCj4+PiAtICAqR2F1Z2VEYXRh RW50cnlFeCA9ICZHYXVnZUVudHJ5RXhBcnJheVtMb2dFbnRyeUtleV07DQo+Pj4gLQ0KPj4+IC0g IHJldHVybiBFRklfU1VDQ0VTUzsNCj4+PiAtfQ0KPj4+IC0NCj4+PiAtLyoqDQo+Pj4gLSAgUmV0 cmlldmVzIGEgcHJldmlvdXNseSBsb2dnZWQgcGVyZm9ybWFuY2UgbWVhc3VyZW1lbnQuDQo+Pj4g LSAgSXQgY2FuIGFsc28gcmV0cmlldmUgdGhlIGxvZyBjcmVhdGVkIGJ5IFN0YXJ0R2F1Z2UgYW5k IEVuZEdhdWdlIG9mIFBFUkZPUk1BTkNFX1BST1RPQ09MLA0KPj4+IC0gIGFuZCB0aGVuIGFzc2ln biB0aGUgSWRlbnRpZmllciB3aXRoIDAuDQo+Pj4gKyAgICAhISEgTm90IHN1cHBvcnQhISENCj4+ Pg0KPj4+ICAgIFJldHJpZXZlcyB0aGUgcGVyZm9ybWFuY2UgbG9nIGVudHJ5IGZyb20gdGhlIHBl cmZvcm1hbmNlIGxvZyBzcGVjaWZpZWQgYnkgTG9nRW50cnlLZXkuDQo+Pj4gICAgSWYgaXQgc3Rh bmRzIGZvciBhIHZhbGlkIGVudHJ5LCB0aGVuIEVGSV9TVUNDRVNTIGlzIHJldHVybmVkIGFuZA0K Pj4+ICAgIEdhdWdlRGF0YUVudHJ5RXggc3RvcmVzIHRoZSBwb2ludGVyIHRvIHRoYXQgZW50cnku DQo+Pj4NCj4+PiBAQCAtMzYyLDIyICsxMjIwLDExIEBAIEVGSUFQSQ0KPj4+ICBHZXRHYXVnZUV4 ICgNCj4+PiAgICBJTiAgVUlOVE4gICAgICAgICAgICAgICAgIExvZ0VudHJ5S2V5LA0KPj4+ICAg IE9VVCBHQVVHRV9EQVRBX0VOVFJZX0VYICAgKipHYXVnZURhdGFFbnRyeUV4DQo+Pj4gICAgKQ0K Pj4+ICB7DQo+Pj4gLSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICBTdGF0dXM7DQo+Pj4gLQ0K Pj4+IC0gIFN0YXR1cyA9IEVmaUFjcXVpcmVMb2NrT3JGYWlsICgmbVBlcmZSZWNvcmRMb2NrKTsN Cj4+PiAtICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+Pj4gLSAgICByZXR1cm4gU3RhdHVz Ow0KPj4+IC0gIH0NCj4+PiAtDQo+Pj4gLSAgU3RhdHVzID0gSW50ZXJuYWxHZXRHYXVnZUV4IChM b2dFbnRyeUtleSwgR2F1Z2VEYXRhRW50cnlFeCk7DQo+Pj4gLQ0KPj4+IC0gIEVmaVJlbGVhc2VM b2NrICgmbVBlcmZSZWNvcmRMb2NrKTsNCj4+PiAtDQo+Pj4gLSAgcmV0dXJuIFN0YXR1czsNCj4+ PiArICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPj4+ICB9DQo+Pj4NCj4+PiAgLyoqDQo+Pj4g ICAgQWRkcyBhIHJlY29yZCBhdCB0aGUgZW5kIG9mIHRoZSBwZXJmb3JtYW5jZSBtZWFzdXJlbWVu dCBsb2cNCj4+PiAgICB0aGF0IHJlY29yZHMgdGhlIHN0YXJ0IHRpbWUgb2YgYSBwZXJmb3JtYW5j ZSBtZWFzdXJlbWVudC4NCj4+PiBAQCAtNDUyLDEwICsxMjk5LDEyIEBAIEVuZEdhdWdlICgNCj4+ PiAgLyoqDQo+Pj4gICAgUmV0cmlldmVzIGEgcHJldmlvdXNseSBsb2dnZWQgcGVyZm9ybWFuY2Ug bWVhc3VyZW1lbnQuDQo+Pj4gICAgSXQgY2FuIGFsc28gcmV0cmlldmUgdGhlIGxvZyBjcmVhdGVk IGJ5IFN0YXJ0R2F1Z2VFeCBhbmQgRW5kR2F1Z2VFeCBvZiBQRVJGT1JNQU5DRV9FWF9QUk9UT0NP TCwNCj4+PiAgICBhbmQgdGhlbiBlbGltaW5hdGUgdGhlIElkZW50aWZpZXIuDQo+Pj4NCj4+PiAr ICAgICEhISBOb3Qgc3VwcG9ydCEhIQ0KPj4+ICsNCj4+PiAgICBSZXRyaWV2ZXMgdGhlIHBlcmZv cm1hbmNlIGxvZyBlbnRyeSBmcm9tIHRoZSBwZXJmb3JtYW5jZSBsb2cgc3BlY2lmaWVkIGJ5IExv Z0VudHJ5S2V5Lg0KPj4+ICAgIElmIGl0IHN0YW5kcyBmb3IgYSB2YWxpZCBlbnRyeSwgdGhlbiBF RklfU1VDQ0VTUyBpcyByZXR1cm5lZCBhbmQNCj4+PiAgICBHYXVnZURhdGFFbnRyeSBzdG9yZXMg dGhlIHBvaW50ZXIgdG8gdGhhdCBlbnRyeS4NCj4+Pg0KPj4+ICAgIEBwYXJhbSAgTG9nRW50cnlL ZXkgICAgICAgICAgICAgVGhlIGtleSBmb3IgdGhlIHByZXZpb3VzIHBlcmZvcm1hbmNlIG1lYXN1 cmVtZW50IGxvZyBlbnRyeS4NCj4+PiBAQCAtNDc0LDgxICsxMzIzLDEzIEBAIEVGSUFQSQ0KPj4+ ICBHZXRHYXVnZSAoDQo+Pj4gICAgSU4gIFVJTlROICAgICAgICAgICAgICAgTG9nRW50cnlLZXks DQo+Pj4gICAgT1VUIEdBVUdFX0RBVEFfRU5UUlkgICAgKipHYXVnZURhdGFFbnRyeQ0KPj4+ICAg ICkNCj4+PiAgew0KPj4+IC0gIEVGSV9TVEFUVVMgICAgICAgICAgU3RhdHVzOw0KPj4+IC0gIEdB VUdFX0RBVEFfRU5UUllfRVggKkdhdWdlRW50cnlFeDsNCj4+PiAtDQo+Pj4gLSAgR2F1Z2VFbnRy eUV4ID0gTlVMTDsNCj4+PiAtDQo+Pj4gLSAgU3RhdHVzID0gR2V0R2F1Z2VFeCAoTG9nRW50cnlL ZXksICZHYXVnZUVudHJ5RXgpOw0KPj4+IC0gIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4+ PiAtICAgIHJldHVybiBTdGF0dXM7DQo+Pj4gLSAgfQ0KPj4+IC0NCj4+PiAtICBpZiAoR2F1Z2VE YXRhRW50cnkgPT0gTlVMTCkgew0KPj4+IC0gICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRF UjsNCj4+PiAtICB9DQo+Pj4gLQ0KPj4+IC0gICpHYXVnZURhdGFFbnRyeSA9IChHQVVHRV9EQVRB X0VOVFJZICopIEdhdWdlRW50cnlFeDsNCj4+PiAtDQo+Pj4gLSAgcmV0dXJuIEVGSV9TVUNDRVNT Ow0KPj4+ICsgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+Pj4gIH0NCj4+Pg0KPj4+IC0vKioN Cj4+PiAtICBEdW1wcyBhbGwgdGhlIFBFSSBwZXJmb3JtYW5jZSBsb2cgdG8gRFhFIHBlcmZvcm1h bmNlIGdhdWdlIGFycmF5Lg0KPj4+IC0NCj4+PiAtICBUaGlzIGludGVybmFsIGZ1bmN0aW9uIGR1 bXBzIGFsbCB0aGUgUEVJIHBlcmZvcm1hbmNlIGxvZyB0byB0aGUgRFhFIHBlcmZvcm1hbmNlIGdh dWdlIGFycmF5Lg0KPj4+IC0gIEl0IHJldHJpZXZlcyB0aGUgb3B0aW9uYWwgR1VJRCBIT0IgZm9y IFBFSSBwZXJmb3JtYW5jZSBhbmQgdGhlbiBzYXZlcyB0aGUgcGVyZm9ybWFuY2UgZGF0YQ0KPj4+ IC0gIHRvIERYRSBwZXJmb3JtYW5jZSBkYXRhIHN0cnVjdHVyZXMuDQo+Pj4gLQ0KPj4+IC0qKi8N Cj4+PiAtVk9JRA0KPj4+IC1JbnRlcm5hbEdldFBlaVBlcmZvcm1hbmNlICgNCj4+PiAtICBWT0lE DQo+Pj4gLSAgKQ0KPj4+IC17DQo+Pj4gLSAgRUZJX0hPQl9HVUlEX1RZUEUgICAgICAgICAgICAg ICAgICpHdWlkSG9iOw0KPj4+IC0gIFBFSV9QRVJGT1JNQU5DRV9MT0dfSEVBREVSICAgICAgICAq TG9nSG9iOw0KPj4+IC0gIFBFSV9QRVJGT1JNQU5DRV9MT0dfRU5UUlkgICAgICAgICAqTG9nRW50 cnlBcnJheTsNCj4+PiAtICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkxvZ0lk QXJyYXk7DQo+Pj4gLSAgR0FVR0VfREFUQV9FTlRSWV9FWCAgICAgICAgICAgICAgICpHYXVnZUVu dHJ5RXhBcnJheTsNCj4+PiAtICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5k ZXg7DQo+Pj4gLSAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlck9mRW50 cmllczsNCj4+PiAtDQo+Pj4gLSAgTnVtYmVyT2ZFbnRyaWVzID0gMDsNCj4+PiAtICBHYXVnZUVu dHJ5RXhBcnJheSA9IChHQVVHRV9EQVRBX0VOVFJZX0VYICopIChtR2F1Z2VEYXRhICsgMSk7DQo+ Pj4gLQ0KPj4+IC0gIC8vDQo+Pj4gLSAgLy8gRHVtcCBQRUkgTG9nIEVudHJpZXMgdG8gRFhFIEd1 YWdlIERhdGEgc3RydWN0dXJlLg0KPj4+IC0gIC8vDQo+Pj4gLSAgR3VpZEhvYiA9IEdldEZpcnN0 R3VpZEhvYiAoJmdQZXJmb3JtYW5jZVByb3RvY29sR3VpZCk7DQo+Pj4gLSAgaWYgKEd1aWRIb2Ig IT0gTlVMTCkgew0KPj4+IC0gICAgTG9nSG9iICAgICAgICAgID0gR0VUX0dVSURfSE9CX0RBVEEg KEd1aWRIb2IpOw0KPj4+IC0gICAgTG9nRW50cnlBcnJheSAgID0gKFBFSV9QRVJGT1JNQU5DRV9M T0dfRU5UUlkgKikgKExvZ0hvYiArIDEpOw0KPj4+IC0NCj4+PiAtICAgIE51bWJlck9mRW50cmll cyA9IExvZ0hvYi0+TnVtYmVyT2ZFbnRyaWVzOw0KPj4+IC0gICAgZm9yIChJbmRleCA9IDA7IElu ZGV4IDwgTnVtYmVyT2ZFbnRyaWVzOyBJbmRleCsrKSB7DQo+Pj4gLSAgICAgIEdhdWdlRW50cnlF eEFycmF5W0luZGV4XS5IYW5kbGUgICAgICAgICA9IExvZ0VudHJ5QXJyYXlbSW5kZXhdLkhhbmRs ZTsNCj4+PiAtICAgICAgQXNjaWlTdHJDcHlTIChHYXVnZUVudHJ5RXhBcnJheVtJbmRleF0uVG9r ZW4sICBEWEVfUEVSRk9STUFOQ0VfU1RSSU5HX1NJWkUsIExvZ0VudHJ5QXJyYXlbSW5kZXhdLlRv a2VuKTsNCj4+PiAtICAgICAgQXNjaWlTdHJDcHlTIChHYXVnZUVudHJ5RXhBcnJheVtJbmRleF0u TW9kdWxlLCBEWEVfUEVSRk9STUFOQ0VfU1RSSU5HX1NJWkUsIExvZ0VudHJ5QXJyYXlbSW5kZXhd Lk1vZHVsZSk7DQo+Pj4gLSAgICAgIEdhdWdlRW50cnlFeEFycmF5W0luZGV4XS5TdGFydFRpbWVT dGFtcCA9IExvZ0VudHJ5QXJyYXlbSW5kZXhdLlN0YXJ0VGltZVN0YW1wOw0KPj4+IC0gICAgICBH YXVnZUVudHJ5RXhBcnJheVtJbmRleF0uRW5kVGltZVN0YW1wICAgPSBMb2dFbnRyeUFycmF5W0lu ZGV4XS5FbmRUaW1lU3RhbXA7DQo+Pj4gLSAgICAgIEdhdWdlRW50cnlFeEFycmF5W0luZGV4XS5J ZGVudGlmaWVyICAgICA9IDA7DQo+Pj4gLSAgICB9DQo+Pj4gLQ0KPj4+IC0gICAgR3VpZEhvYiA9 IEdldEZpcnN0R3VpZEhvYiAoJmdQZXJmb3JtYW5jZUV4UHJvdG9jb2xHdWlkKTsNCj4+PiAtICAg IGlmIChHdWlkSG9iICE9IE5VTEwpIHsNCj4+PiAtICAgICAgTG9nSWRBcnJheSAgICA9IEdFVF9H VUlEX0hPQl9EQVRBIChHdWlkSG9iKTsNCj4+PiAtICAgICAgZm9yIChJbmRleCA9IDA7IEluZGV4 IDwgTnVtYmVyT2ZFbnRyaWVzOyBJbmRleCsrKSB7DQo+Pj4gLSAgICAgICAgR2F1Z2VFbnRyeUV4 QXJyYXlbSW5kZXhdLklkZW50aWZpZXIgICA9IExvZ0lkQXJyYXlbSW5kZXhdOw0KPj4+IC0gICAg ICB9DQo+Pj4gLSAgICB9DQo+Pj4gLSAgfQ0KPj4+IC0gIG1HYXVnZURhdGEtPk51bWJlck9mRW50 cmllcyA9IE51bWJlck9mRW50cmllczsNCj4+PiAtfQ0KPj4+DQo+Pj4gIC8qKg0KPj4+ICAgIFRo ZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiBpbml0aWFsaXplcyBQZXJmb3JtYW5jZSBpbmZyYXN0cnVj dHVyZSBmb3IgRFhFIHBoYXNlLg0KPj4+DQo+Pj4gICAgVGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9u IHB1Ymxpc2hlcyBQZXJmb3JtYW5jZSBhbmQgUGVyZm9ybWFuY2VFeCBwcm90b2NvbCwgYWxsb2Nh dGVzIG1lbW9yeSB0byBsb2cgRFhFIHBlcmZvcm1hbmNlDQo+Pj4gQEAgLTU2Nyw0MCArMTM0OCw1 MyBAQCBEeGVDb3JlUGVyZm9ybWFuY2VMaWJDb25zdHJ1Y3RvciAoDQo+Pj4gICAgSU4gRUZJX0hB TkRMRSAgICAgICAgSW1hZ2VIYW5kbGUsDQo+Pj4gICAgSU4gRUZJX1NZU1RFTV9UQUJMRSAgKlN5 c3RlbVRhYmxlDQo+Pj4gICAgKQ0KPj4+ICB7DQo+Pj4gICAgRUZJX1NUQVRVUyAgICAgICAgICAg ICAgICBTdGF0dXM7DQo+Pj4gKyAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICBIYW5kbGU7DQo+ Pj4gKyAgRUZJX0VWRU5UICAgICAgICAgICAgICAgICBSZWFkeVRvQm9vdEV2ZW50Ow0KPj4+ICAg IFBFUkZPUk1BTkNFX1BST1BFUlRZICAgICAgKlBlcmZvcm1hbmNlUHJvcGVydHk7DQo+Pj4NCj4+ PiAtDQo+Pj4gICAgaWYgKCFQZXJmb3JtYW5jZU1lYXN1cmVtZW50RW5hYmxlZCAoKSkgew0KPj4+ ICAgICAgLy8NCj4+PiAgICAgIC8vIERvIG5vdCBpbml0aWFsaXplIHBlcmZvcm1hbmNlIGluZnJh c3RydWN0dXJlIGlmIG5vdCByZXF1aXJlZC4NCj4+PiAgICAgIC8vDQo+Pj4gICAgICByZXR1cm4g RUZJX1NVQ0NFU1M7DQo+Pj4gICAgfQ0KPj4+ICsNCj4+PiArICAvLw0KPj4+ICsgIC8vIER1bXAg bm9ybWFsIFBFSSBwZXJmb3JtYW5jZSByZWNvcmRzDQo+Pj4gKyAgLy8NCj4+PiArICBJbnRlcm5h bEdldFBlaVBlcmZvcm1hbmNlIChHZXRIb2JMaXN0KCkpOw0KPj4+ICsNCj4+PiAgICAvLw0KPj4+ IC0gIC8vIEluc3RhbGwgdGhlIHByb3RvY29sIGludGVyZmFjZXMuDQo+Pj4gKyAgLy8gSW5zdGFs bCB0aGUgcHJvdG9jb2wgaW50ZXJmYWNlcyBmb3IgRFhFIHBlcmZvcm1hbmNlIGxpYnJhcnkgaW5z dGFuY2UuDQo+Pj4gICAgLy8NCj4+PiArICBIYW5kbGUgPSBOVUxMOw0KPj4+ICAgIFN0YXR1cyA9 IGdCUy0+SW5zdGFsbE11bHRpcGxlUHJvdG9jb2xJbnRlcmZhY2VzICgNCj4+PiAtICAgICAgICAg ICAgICAgICAgJm1IYW5kbGUsDQo+Pj4gKyAgICAgICAgICAgICAgICAgICZIYW5kbGUsDQo+Pj4g ICAgICAgICAgICAgICAgICAgICZnUGVyZm9ybWFuY2VQcm90b2NvbEd1aWQsDQo+Pj4gICAgICAg ICAgICAgICAgICAgICZtUGVyZm9ybWFuY2VJbnRlcmZhY2UsDQo+Pj4gICAgICAgICAgICAgICAg ICAgICZnUGVyZm9ybWFuY2VFeFByb3RvY29sR3VpZCwNCj4+PiAgICAgICAgICAgICAgICAgICAg Jm1QZXJmb3JtYW5jZUV4SW50ZXJmYWNlLA0KPj4+ICAgICAgICAgICAgICAgICAgICBOVUxMDQo+ Pj4gICAgICAgICAgICAgICAgICAgICk7DQo+Pj4gICAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVz KTsNCj4+Pg0KPj4+IC0gIG1NYXhHYXVnZVJlY29yZHMgPSBJTklUX0RYRV9HQVVHRV9EQVRBX0VO VFJJRVMgKyAoVUlOVDE2KSAoUGNkR2V0MTYgKFBjZE1heFBlaVBlcmZvcm1hbmNlTG9nRW50cmll czE2KSAhPSAwID8NCj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFBjZEdldDE2IChQY2RNYXhQZWlQZXJmb3JtYW5jZUxvZ0Vu dHJpZXMxNikgOg0KPj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUGNkR2V0OCAoUGNkTWF4UGVpUGVyZm9ybWFuY2VMb2dFbnRy aWVzKSk7DQo+Pj4gLQ0KPj4+IC0gIG1HYXVnZURhdGEgPSBBbGxvY2F0ZVplcm9Qb29sIChzaXpl b2YgKEdBVUdFX0RBVEFfSEVBREVSKSArIChzaXplb2YgKEdBVUdFX0RBVEFfRU5UUllfRVgpICog bU1heEdhdWdlUmVjb3JkcykpOw0KPj4+IC0gIEFTU0VSVCAobUdhdWdlRGF0YSAhPSBOVUxMKTsN Cj4+PiArICAvLw0KPj4+ICsgIC8vIFJlZ2lzdGVyIFJlYWR5VG9Cb290IGV2ZW50IHRvIHJlcG9y dCBTdGF0dXNDb2RlIGRhdGENCj4+PiArICAvLw0KPj4+ICsgIFN0YXR1cyA9IGdCUy0+Q3JlYXRl RXZlbnRFeCAoDQo+Pj4gKyAgICAgICAgICAgICAgICAgIEVWVF9OT1RJRllfU0lHTkFMLA0KPj4+ ICsgICAgICAgICAgICAgICAgICBUUExfQ0FMTEJBQ0ssDQo+Pj4gKyAgICAgICAgICAgICAgICAg IFJlcG9ydEZwZHRSZWNvcmRCdWZmZXIsDQo+Pj4gKyAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ Pj4gKyAgICAgICAgICAgICAgICAgICZnRWZpRXZlbnRSZWFkeVRvQm9vdEd1aWQsDQo+Pj4gKyAg ICAgICAgICAgICAgICAgICZSZWFkeVRvQm9vdEV2ZW50DQo+Pj4gKyAgICAgICAgICAgICAgICAg ICk7DQo+Pj4NCj4+PiAtICBJbnRlcm5hbEdldFBlaVBlcmZvcm1hbmNlICgpOw0KPj4+ICsgIEFT U0VSVF9FRklfRVJST1IgKFN0YXR1cyk7DQo+Pj4NCj4+PiAgICBTdGF0dXMgPSBFZmlHZXRTeXN0 ZW1Db25maWd1cmF0aW9uVGFibGUgKCZnUGVyZm9ybWFuY2VQcm90b2NvbEd1aWQsIChWT0lEICoq KSAmUGVyZm9ybWFuY2VQcm9wZXJ0eSk7DQo+Pj4gICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPj4+ICAgICAgLy8NCj4+PiAgICAgIC8vIEluc3RhbGwgY29uZmlndXJhdGlvbiB0YWJsZSBm b3IgcGVyZm9ybWFuY2UgcHJvcGVydHkuDQo+Pj4gQEAgLTY1MSwxOSArMTQ0NSwxOSBAQCBTdGFy dFBlcmZvcm1hbmNlTWVhc3VyZW1lbnRFeCAoDQo+Pj4gICAgSU4gQ09OU1QgQ0hBUjggICpNb2R1 bGUsICBPUFRJT05BTA0KPj4+ICAgIElOIFVJTlQ2NCAgICAgICBUaW1lU3RhbXAsDQo+Pj4gICAg SU4gVUlOVDMyICAgICAgIElkZW50aWZpZXINCj4+PiAgICApDQo+Pj4gIHsNCj4+PiAtICByZXR1 cm4gKFJFVFVSTl9TVEFUVVMpIFN0YXJ0R2F1Z2VFeCAoSGFuZGxlLCBUb2tlbiwgTW9kdWxlLCBU aW1lU3RhbXAsIElkZW50aWZpZXIpOw0KPj4+ICsgIHJldHVybiBJbnNlcnRGcGR0TWVhc3VyZW1l bnQgKFRSVUUsIEhhbmRsZSwgVG9rZW4sIE1vZHVsZSwgVGltZVN0YW1wLCBJZGVudGlmaWVyKTsN Cj4+PiAgfQ0KPj4+DQo+Pj4gIC8qKg0KPj4+ICAgIFNlYXJjaGVzIHRoZSBwZXJmb3JtYW5jZSBt ZWFzdXJlbWVudCBsb2cgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb2cNCj4+PiAgICBmb3Ig dGhlIGZpcnN0IG1hdGNoaW5nIHJlY29yZCB0aGF0IGNvbnRhaW5zIGEgemVybyBlbmQgdGltZSBh bmQgZmlsbHMgaW4gYSB2YWxpZCBlbmQgdGltZS4NCj4+Pg0KPj4+ICAgIFNlYXJjaGVzIHRoZSBw ZXJmb3JtYW5jZSBtZWFzdXJlbWVudCBsb2cgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb2cN Cj4+PiAtICBmb3IgdGhlIGZpcnN0IHJlY29yZCB0aGF0IG1hdGNoZXMgSGFuZGxlLCBUb2tlbiBh bmQgTW9kdWxlIGFuZCBoYXMgYW4gZW5kIHRpbWUgdmFsdWUgb2YgemVyby4NCj4+PiArICBmb3Ig dGhlIGZpcnN0IHJlY29yZCB0aGF0IG1hdGNoZXMgSGFuZGxlLCBUb2tlbiwgTW9kdWxlIGFuZCBJ ZGVudGlmaWVyIGFuZCBoYXMgYW4gZW5kIHRpbWUgdmFsdWUgb2YgemVyby4NCj4+PiAgICBJZiB0 aGUgcmVjb3JkIGNhbiBub3QgYmUgZm91bmQgdGhlbiByZXR1cm4gUkVUVVJOX05PVF9GT1VORC4N Cj4+PiAgICBJZiB0aGUgcmVjb3JkIGlzIGZvdW5kIGFuZCBUaW1lU3RhbXAgaXMgbm90IHplcm8s DQo+Pj4gICAgdGhlbiB0aGUgZW5kIHRpbWUgaW4gdGhlIHJlY29yZCBpcyBmaWxsZWQgaW4gd2l0 aCB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5IFRpbWVTdGFtcC4NCj4+PiAgICBJZiB0aGUgcmVjb3Jk IGlzIGZvdW5kIGFuZCBUaW1lU3RhbXAgaXMgemVybywgdGhlbiB0aGUgZW5kIHRpbWUgaW4gdGhl IG1hdGNoaW5nIHJlY29yZA0KPj4+ICAgIGlzIGZpbGxlZCBpbiB3aXRoIHRoZSBjdXJyZW50IHRp bWUgc3RhbXAgdmFsdWUuDQo+Pj4gQEAgLTY5MCwxOCArMTQ4NCwyMCBAQCBFbmRQZXJmb3JtYW5j ZU1lYXN1cmVtZW50RXggKA0KPj4+ICAgIElOIENPTlNUIENIQVI4ICAqTW9kdWxlLCAgT1BUSU9O QUwNCj4+PiAgICBJTiBVSU5UNjQgICAgICAgVGltZVN0YW1wLA0KPj4+ICAgIElOIFVJTlQzMiAg ICAgICBJZGVudGlmaWVyDQo+Pj4gICAgKQ0KPj4+ICB7DQo+Pj4gLSAgcmV0dXJuIChSRVRVUk5f U1RBVFVTKSBFbmRHYXVnZUV4IChIYW5kbGUsIFRva2VuLCBNb2R1bGUsIFRpbWVTdGFtcCwgSWRl bnRpZmllcik7DQo+Pj4gKyAgcmV0dXJuIEluc2VydEZwZHRNZWFzdXJlbWVudCAoRkFMU0UsIEhh bmRsZSwgVG9rZW4sIE1vZHVsZSwgVGltZVN0YW1wLCBJZGVudGlmaWVyKTsNCj4+PiAgfQ0KPj4+ DQo+Pj4gIC8qKg0KPj4+ICAgIEF0dGVtcHRzIHRvIHJldHJpZXZlIGEgcGVyZm9ybWFuY2UgbWVh c3VyZW1lbnQgbG9nIGVudHJ5IGZyb20gdGhlIHBlcmZvcm1hbmNlIG1lYXN1cmVtZW50IGxvZy4N Cj4+PiAgICBJdCBjYW4gYWxzbyByZXRyaWV2ZSB0aGUgbG9nIGNyZWF0ZWQgYnkgU3RhcnRQZXJm b3JtYW5jZU1lYXN1cmVtZW50IGFuZCBFbmRQZXJmb3JtYW5jZU1lYXN1cmVtZW50LA0KPj4+ICAg IGFuZCB0aGVuIGFzc2lnbiB0aGUgSWRlbnRpZmllciB3aXRoIDAuDQo+Pj4NCj4+PiArICAgICEh ISBOb3Qgc3VwcG9ydCEhIQ0KPj4+ICsNCj4+PiAgICBBdHRlbXB0cyB0byByZXRyaWV2ZSB0aGUg cGVyZm9ybWFuY2UgbG9nIGVudHJ5IHNwZWNpZmllZCBieSBMb2dFbnRyeUtleS4gIElmIExvZ0Vu dHJ5S2V5IGlzDQo+Pj4gICAgemVybyBvbiBlbnRyeSwgdGhlbiBhbiBhdHRlbXB0IGlzIG1hZGUg dG8gcmV0cmlldmUgdGhlIGZpcnN0IGVudHJ5IGZyb20gdGhlIHBlcmZvcm1hbmNlIGxvZywNCj4+ PiAgICBhbmQgdGhlIGtleSBmb3IgdGhlIHNlY29uZCBlbnRyeSBpbiB0aGUgbG9nIGlzIHJldHVy bmVkLiAgSWYgdGhlIHBlcmZvcm1hbmNlIGxvZyBpcyBlbXB0eSwNCj4+PiAgICB0aGVuIG5vIGVu dHJ5IGlzIHJldHJpZXZlZCBhbmQgemVybyBpcyByZXR1cm5lZC4gIElmIExvZ0VudHJ5S2V5IGlz IG5vdCB6ZXJvLCB0aGVuIHRoZSBwZXJmb3JtYW5jZQ0KPj4+ICAgIGxvZyBlbnRyeSBhc3NvY2lh dGVkIHdpdGggTG9nRW50cnlLZXkgaXMgcmV0cmlldmVkLCBhbmQgdGhlIGtleSBmb3IgdGhlIG5l eHQgZW50cnkgaW4gdGhlIGxvZyBpcw0KPj4+IEBAIC03MjksNjMgKzE1MjUsMjkgQEAgRW5kUGVy Zm9ybWFuY2VNZWFzdXJlbWVudEV4ICgNCj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJlaW5nIG1lYXN1cmVkLg0KPj4+ICAgIEBwYXJhbSAgU3RhcnRUaW1lU3RhbXAgICAg ICAgICAgUG9pbnRlciB0byB0aGUgNjQtYml0IHRpbWUgc3RhbXAgdGhhdCB3YXMgcmVjb3JkZWQg d2hlbiB0aGUgbWVhc3VyZW1lbnQNCj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHdhcyBzdGFydGVkLg0KPj4+ICAgIEBwYXJhbSAgRW5kVGltZVN0YW1wICAgICAgICAgICAg UG9pbnRlciB0byB0aGUgNjQtYml0IHRpbWUgc3RhbXAgdGhhdCB3YXMgcmVjb3JkZWQgd2hlbiB0 aGUgbWVhc3VyZW1lbnQNCj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdh cyBlbmRlZC4NCj4+PiAtICBAcGFyYW0gIElkZW50aWZpZXIgICAgICAgICAgICAgIFBvaW50ZXIg dG8gdGhlIDMyLWJpdCBpZGVudGlmaWVyIHRoYXQgd2FzIHJlY29yZGVkLg0KPj4+ICsgIEBwYXJh bSAgSWRlbnRpZmllciAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgMzItYml0IGlkZW50aWZp ZXIgdGhhdCB3YXMgcmVjb3JkZWQgd2hlbiB0aGUgbWVhc3VyZW1lbnQNCj4+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHdhcyBlbmRlZC4NCj4+Pg0KPj4+ICAgIEByZXR1cm4g VGhlIGtleSBmb3IgdGhlIG5leHQgcGVyZm9ybWFuY2UgbG9nIGVudHJ5IChpbiBnZW5lcmFsIGNh c2UpLg0KPj4+DQo+Pj4gICoqLw0KPj4+ICBVSU5UTg0KPj4+ICBFRklBUEkNCj4+PiAgR2V0UGVy Zm9ybWFuY2VNZWFzdXJlbWVudEV4ICgNCj4+PiAtICBJTiAgVUlOVE4gICAgICAgTG9nRW50cnlL ZXksDQo+Pj4gKyAgSU4gIFVJTlROICAgICAgIExvZ0VudHJ5S2V5LA0KPj4+ICAgIE9VVCBDT05T VCBWT0lEICAqKkhhbmRsZSwNCj4+PiAgICBPVVQgQ09OU1QgQ0hBUjggKipUb2tlbiwNCj4+PiAg ICBPVVQgQ09OU1QgQ0hBUjggKipNb2R1bGUsDQo+Pj4gICAgT1VUIFVJTlQ2NCAgICAgICpTdGFy dFRpbWVTdGFtcCwNCj4+PiAgICBPVVQgVUlOVDY0ICAgICAgKkVuZFRpbWVTdGFtcCwNCj4+PiAg ICBPVVQgVUlOVDMyICAgICAgKklkZW50aWZpZXINCj4+PiAgICApDQo+Pj4gIHsNCj4+PiAtICBF RklfU1RBVFVTICAgICAgICAgICBTdGF0dXM7DQo+Pj4gLSAgR0FVR0VfREFUQV9FTlRSWV9FWCAg KkdhdWdlRGF0YTsNCj4+PiAtDQo+Pj4gLSAgR2F1Z2VEYXRhID0gTlVMTDsNCj4+PiAtDQo+Pj4g LSAgQVNTRVJUIChIYW5kbGUgIT0gTlVMTCk7DQo+Pj4gLSAgQVNTRVJUIChUb2tlbiAhPSBOVUxM KTsNCj4+PiAtICBBU1NFUlQgKE1vZHVsZSAhPSBOVUxMKTsNCj4+PiAtICBBU1NFUlQgKFN0YXJ0 VGltZVN0YW1wICE9IE5VTEwpOw0KPj4+IC0gIEFTU0VSVCAoRW5kVGltZVN0YW1wICE9IE5VTEwp Ow0KPj4+IC0gIEFTU0VSVCAoSWRlbnRpZmllciAhPSBOVUxMKTsNCj4+PiAtDQo+Pj4gLSAgU3Rh dHVzID0gR2V0R2F1Z2VFeCAoTG9nRW50cnlLZXkrKywgJkdhdWdlRGF0YSk7DQo+Pj4gLQ0KPj4+ IC0gIC8vDQo+Pj4gLSAgLy8gTWFrZSBzdXJlIHRoYXQgTG9nRW50cnlLZXkgaXMgYSB2YWxpZCBs b2cgZW50cnkga2V5LA0KPj4+IC0gIC8vDQo+Pj4gLSAgQVNTRVJUIChTdGF0dXMgIT0gRUZJX0lO VkFMSURfUEFSQU1FVEVSKTsNCj4+PiAtDQo+Pj4gLSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPj4+IC0gICAgLy8NCj4+PiAtICAgIC8vIFRoZSBMb2dFbnRyeUtleSBpcyB0aGUgbGFzdCBl bnRyeSAoZXF1YWxzIHRvIHRoZSB0b3RhbCBlbnRyeSBudW1iZXIpLg0KPj4+IC0gICAgLy8NCj4+ PiAtICAgIHJldHVybiAwOw0KPj4+IC0gIH0NCj4+PiAtDQo+Pj4gLSAgQVNTRVJUIChHYXVnZURh dGEgIT0gTlVMTCk7DQo+Pj4gLQ0KPj4+IC0gICpIYW5kbGUgICAgICAgICA9IChWT0lEICopIChV SU5UTikgR2F1Z2VEYXRhLT5IYW5kbGU7DQo+Pj4gLSAgKlRva2VuICAgICAgICAgID0gR2F1Z2VE YXRhLT5Ub2tlbjsNCj4+PiAtICAqTW9kdWxlICAgICAgICAgPSBHYXVnZURhdGEtPk1vZHVsZTsN Cj4+PiAtICAqU3RhcnRUaW1lU3RhbXAgPSBHYXVnZURhdGEtPlN0YXJ0VGltZVN0YW1wOw0KPj4+ IC0gICpFbmRUaW1lU3RhbXAgICA9IEdhdWdlRGF0YS0+RW5kVGltZVN0YW1wOw0KPj4+IC0gICpJ ZGVudGlmaWVyICAgICA9IEdhdWdlRGF0YS0+SWRlbnRpZmllcjsNCj4+PiAtDQo+Pj4gLSAgcmV0 dXJuIExvZ0VudHJ5S2V5Ow0KPj4+ICsgIHJldHVybiAwOw0KPj4+ICB9DQo+Pj4NCj4+PiAgLyoq DQo+Pj4gICAgQWRkcyBhIHJlY29yZCBhdCB0aGUgZW5kIG9mIHRoZSBwZXJmb3JtYW5jZSBtZWFz dXJlbWVudCBsb2cNCj4+PiAgICB0aGF0IHJlY29yZHMgdGhlIHN0YXJ0IHRpbWUgb2YgYSBwZXJm b3JtYW5jZSBtZWFzdXJlbWVudC4NCj4+PiBAQCAtODE2LDExICsxNTc4LDExIEBAIFN0YXJ0UGVy Zm9ybWFuY2VNZWFzdXJlbWVudCAoDQo+Pj4gICAgSU4gQ09OU1QgQ0hBUjggICpUb2tlbiwgICBP UFRJT05BTA0KPj4+ICAgIElOIENPTlNUIENIQVI4ICAqTW9kdWxlLCAgT1BUSU9OQUwNCj4+PiAg ICBJTiBVSU5UNjQgICAgICAgVGltZVN0YW1wDQo+Pj4gICAgKQ0KPj4+ICB7DQo+Pj4gLSAgcmV0 dXJuIFN0YXJ0UGVyZm9ybWFuY2VNZWFzdXJlbWVudEV4IChIYW5kbGUsIFRva2VuLCBNb2R1bGUs IFRpbWVTdGFtcCwgMCk7DQo+Pj4gKyAgcmV0dXJuIEluc2VydEZwZHRNZWFzdXJlbWVudCAoVFJV RSwgSGFuZGxlLCBUb2tlbiwgTW9kdWxlLCBUaW1lU3RhbXAsIDApOw0KPj4+ICB9DQo+Pj4NCj4+ PiAgLyoqDQo+Pj4gICAgU2VhcmNoZXMgdGhlIHBlcmZvcm1hbmNlIG1lYXN1cmVtZW50IGxvZyBm cm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxvZw0KPj4+ICAgIGZvciB0aGUgZmlyc3QgbWF0Y2hp bmcgcmVjb3JkIHRoYXQgY29udGFpbnMgYSB6ZXJvIGVuZCB0aW1lIGFuZCBmaWxscyBpbiBhIHZh bGlkIGVuZCB0aW1lLg0KPj4+IEBAIC04NTIsMTggKzE2MTQsMjAgQEAgRW5kUGVyZm9ybWFuY2VN ZWFzdXJlbWVudCAoDQo+Pj4gICAgSU4gQ09OU1QgQ0hBUjggICpUb2tlbiwgICBPUFRJT05BTA0K Pj4+ICAgIElOIENPTlNUIENIQVI4ICAqTW9kdWxlLCAgT1BUSU9OQUwNCj4+PiAgICBJTiBVSU5U NjQgICAgICAgVGltZVN0YW1wDQo+Pj4gICAgKQ0KPj4+ICB7DQo+Pj4gLSAgcmV0dXJuIEVuZFBl cmZvcm1hbmNlTWVhc3VyZW1lbnRFeCAoSGFuZGxlLCBUb2tlbiwgTW9kdWxlLCBUaW1lU3RhbXAs IDApOw0KPj4+ICsgIHJldHVybiBJbnNlcnRGcGR0TWVhc3VyZW1lbnQgKEZBTFNFLCBIYW5kbGUs IFRva2VuLCBNb2R1bGUsIFRpbWVTdGFtcCwgMCk7DQo+Pj4gIH0NCj4+Pg0KPj4+ICAvKioNCj4+ PiAgICBBdHRlbXB0cyB0byByZXRyaWV2ZSBhIHBlcmZvcm1hbmNlIG1lYXN1cmVtZW50IGxvZyBl bnRyeSBmcm9tIHRoZSBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudCBsb2cuDQo+Pj4gICAgSXQgY2Fu IGFsc28gcmV0cmlldmUgdGhlIGxvZyBjcmVhdGVkIGJ5IFN0YXJ0UGVyZm9ybWFuY2VNZWFzdXJl bWVudEV4IGFuZCBFbmRQZXJmb3JtYW5jZU1lYXN1cmVtZW50RXgsDQo+Pj4gICAgYW5kIHRoZW4g ZWxpbWluYXRlIHRoZSBJZGVudGlmaWVyLg0KPj4+DQo+Pj4gKyAgISEhIE5vdCBzdXBwb3J0ISEh DQo+Pj4gKw0KPj4+ICAgIEF0dGVtcHRzIHRvIHJldHJpZXZlIHRoZSBwZXJmb3JtYW5jZSBsb2cg ZW50cnkgc3BlY2lmaWVkIGJ5IExvZ0VudHJ5S2V5LiAgSWYgTG9nRW50cnlLZXkgaXMNCj4+PiAg ICB6ZXJvIG9uIGVudHJ5LCB0aGVuIGFuIGF0dGVtcHQgaXMgbWFkZSB0byByZXRyaWV2ZSB0aGUg Zmlyc3QgZW50cnkgZnJvbSB0aGUgcGVyZm9ybWFuY2UgbG9nLA0KPj4+ICAgIGFuZCB0aGUga2V5 IGZvciB0aGUgc2Vjb25kIGVudHJ5IGluIHRoZSBsb2cgaXMgcmV0dXJuZWQuICBJZiB0aGUgcGVy Zm9ybWFuY2UgbG9nIGlzIGVtcHR5LA0KPj4+ICAgIHRoZW4gbm8gZW50cnkgaXMgcmV0cmlldmVk IGFuZCB6ZXJvIGlzIHJldHVybmVkLiAgSWYgTG9nRW50cnlLZXkgaXMgbm90IHplcm8sIHRoZW4g dGhlIHBlcmZvcm1hbmNlDQo+Pj4gICAgbG9nIGVudHJ5IGFzc29jaWF0ZWQgd2l0aCBMb2dFbnRy eUtleSBpcyByZXRyaWV2ZWQsIGFuZCB0aGUga2V5IGZvciB0aGUgbmV4dCBlbnRyeSBpbiB0aGUg bG9nIGlzDQo+Pj4gQEAgLTkwNSwxMiArMTY2OSwxMSBAQCBHZXRQZXJmb3JtYW5jZU1lYXN1cmVt ZW50ICgNCj4+PiAgICBPVVQgQ09OU1QgQ0hBUjggKipNb2R1bGUsDQo+Pj4gICAgT1VUIFVJTlQ2 NCAgICAgICpTdGFydFRpbWVTdGFtcCwNCj4+PiAgICBPVVQgVUlOVDY0ICAgICAgKkVuZFRpbWVT dGFtcA0KPj4+ICAgICkNCj4+PiAgew0KPj4+IC0gIFVJTlQzMiBJZGVudGlmaWVyOw0KPj4+IC0g IHJldHVybiBHZXRQZXJmb3JtYW5jZU1lYXN1cmVtZW50RXggKExvZ0VudHJ5S2V5LCBIYW5kbGUs IFRva2VuLCBNb2R1bGUsIFN0YXJ0VGltZVN0YW1wLCBFbmRUaW1lU3RhbXAsICZJZGVudGlmaWVy KTsNCj4+PiArICByZXR1cm4gMDsNCj4+PiAgfQ0KPj4+DQo+Pj4gIC8qKg0KPj4+ICAgIFJldHVy bnMgVFJVRSBpZiB0aGUgcGVyZm9ybWFuY2UgbWVhc3VyZW1lbnQgbWFjcm9zIGFyZSBlbmFibGVk Lg0KPj4+DQo+Pj4gZGlmZiAtLWdpdCBhL01kZU1vZHVsZVBrZy9MaWJyYXJ5L0R4ZUNvcmVQZXJm b3JtYW5jZUxpYi9EeGVDb3JlUGVyZm9ybWFuY2VMaWIuaW5mIGIvTWRlTW9kdWxlUGtnL0xpYnJh cnkvRHhlQ29yZVBlcmZvcm1hbmNlTGliL0R4ZUNvcmVQZXJmb3JtYW5jZUxpYi5pbmYNCj4+PiBp bmRleCA1Yjg5Y2UyLi43MWMxODFmIDEwMDY0NA0KPj4+IC0tLSBhL01kZU1vZHVsZVBrZy9MaWJy YXJ5L0R4ZUNvcmVQZXJmb3JtYW5jZUxpYi9EeGVDb3JlUGVyZm9ybWFuY2VMaWIuaW5mDQo+Pj4g KysrIGIvTWRlTW9kdWxlUGtnL0xpYnJhcnkvRHhlQ29yZVBlcmZvcm1hbmNlTGliL0R4ZUNvcmVQ ZXJmb3JtYW5jZUxpYi5pbmYNCj4+PiBAQCAtNywxMSArNywxMSBAQA0KPj4+ICAjICBJdCBpbml0 aWFsaXplcyBEWEUgcGhhc2UgcGVyZm9ybWFuY2UgbG9nZ2luZyBieSBwdWJsaXNoaW5nIHRoZSBQ ZXJmb3JtYW5jZSBhbmQgUGVyZm9ybWFuY2VFeCBQcm90b2NvbCwNCj4+PiAgIyAgd2hpY2ggaXMg Y29uc3VtZWQgYnkgRHhlUGVyZm9ybWFuY2VMaWIgdG8gbG9nZ2luZyBwZXJmb3JtYW5jZSBkYXRh IGluIERYRSBwaGFzZS4NCj4+PiAgIyAgVGhpcyBsaWJyYXJ5IGlzIG1haW5seSB1c2VkIGJ5IER4 ZUNvcmUgdG8gc3RhcnQgcGVyZm9ybWFuY2UgbG9nZ2luZyB0byBlbnN1cmUgdGhhdA0KPj4+ICAj ICBQZXJmb3JtYW5jZSBhbmQgUGVyZm9ybWFuY2VFeCBQcm90b2NvbCBhcmUgaW5zdGFsbGVkIGF0 IHRoZSB2ZXJ5IGJlZ2lubmluZyBvZiBEWEUgcGhhc2UuDQo+Pj4gICMNCj4+PiAtIyAgQ29weXJp Z2h0IChjKSAyMDA2IC0gMjAxNywgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2 ZWQuPEJSPg0KPj4+ICsjICBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDE4LCBJbnRlbCBDb3Jwb3Jh dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+Pj4gICMgKEMpIENvcHlyaWdodCAyMDE2 IEhld2xldHQgUGFja2FyZCBFbnRlcnByaXNlIERldmVsb3BtZW50IExQPEJSPg0KPj4+ICAjICBU aGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+Pj4gICMgIGFyZSBs aWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25z IG9mIHRoZSBCU0QgTGljZW5zZQ0KPj4+ICAjICB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3Ry aWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlIGZvdW5kIGF0DQo+ Pj4gICMgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4+ PiBAQCAtNDgsMjcgKzQ4LDM5IEBADQo+Pj4NCj4+Pg0KPj4+ICBbTGlicmFyeUNsYXNzZXNdDQo+ Pj4gICAgTWVtb3J5QWxsb2NhdGlvbkxpYg0KPj4+ICAgIFVlZmlCb290U2VydmljZXNUYWJsZUxp Yg0KPj4+ICsgIFVlZmlSdW50aW1lU2VydmljZXNUYWJsZUxpYg0KPj4+ICAgIFBjZExpYg0KPj4+ ICAgIFRpbWVyTGliDQo+Pj4gICAgQmFzZU1lbW9yeUxpYg0KPj4+ICAgIEJhc2VMaWINCj4+PiAg ICBIb2JMaWINCj4+PiAgICBEZWJ1Z0xpYg0KPj4+ICAgIFVlZmlMaWINCj4+PiArICBSZXBvcnRT dGF0dXNDb2RlTGliDQo+Pj4gKyAgRHhlU2VydmljZXNMaWINCj4+PiArICBQZUNvZmZHZXRFbnRy eVBvaW50TGliDQo+Pj4gKw0KPj4+ICtbUHJvdG9jb2xzXQ0KPj4+ICsgIGdFZmlTbW1Db21tdW5p Y2F0aW9uUHJvdG9jb2xHdWlkICAgICAgICAgICAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMNCj4+ Pg0KPj4+DQo+Pj4gIFtHdWlkc10NCj4+PiAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMgICAjIyBI T0INCj4+PiAgICAjIyBQUk9EVUNFUyAgICAgICAgICAgICAjIyBVTkRFRklORUQgIyBJbnN0YWxs IHByb3RvY29sDQo+Pj4gICAgIyMgUFJPRFVDRVMgICAgICAgICAgICAgIyMgU3lzdGVtVGFibGUN Cj4+PiAgICBnUGVyZm9ybWFuY2VQcm90b2NvbEd1aWQNCj4+PiAgICAjIyBTT01FVElNRVNfQ09O U1VNRVMgICAjIyBIT0INCj4+PiAgICAjIyBQUk9EVUNFUyAgICAgICAgICAgICAjIyBVTkRFRklO RUQgIyBJbnN0YWxsIHByb3RvY29sDQo+Pj4gICAgZ1BlcmZvcm1hbmNlRXhQcm90b2NvbEd1aWQN Cj4+PiArICBnWmVyb0d1aWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMg U09NRVRJTUVTX0NPTlNVTUVTICMjIEdVSUQNCj4+PiArICBnRWZpRmlybXdhcmVQZXJmb3JtYW5j ZUd1aWQgICAgICAgICAgICAgICAgICAgIyMgU09NRVRJTUVTX1BST0RVQ0VTICMjIFVOREVGSU5F RCAjIFN0YXR1c0NvZGUgRGF0YQ0KPj4+ICsgIGdFZGtpaUV4dGVuZGVkRmlybXdhcmVQZXJmb3Jt YW5jZUd1aWQgICAgICAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMgIyMgSE9CICMgU3RhdHVzQ29k ZSBEYXRhDQo+Pj4gKyAgZ0VmaUV2ZW50UmVhZHlUb0Jvb3RHdWlkICAgICAgICAgICAgICAgICAg ICAgICMjIENPTlNVTUVTICAgICAgICAgICAjIyBFdmVudA0KPj4+ICsgIGdFZGtpaVBpU21tQ29t bXVuaWNhdGlvblJlZ2lvblRhYmxlR3VpZCAgICAgICAjIyBTT01FVElNRVNfQ09OU1VNRVMgICAg IyMgU3lzdGVtVGFibGUNCj4+Pg0KPj4+ICBbUGNkXQ0KPj4+IC0gIGdFZmlNZGVNb2R1bGVQa2dU b2tlblNwYWNlR3VpZC5QY2RNYXhQZWlQZXJmb3JtYW5jZUxvZ0VudHJpZXMgICAjIyBDT05TVU1F Uw0KPj4+IC0gIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RNYXhQZWlQZXJmb3Jt YW5jZUxvZ0VudHJpZXMxNiAjIyBDT05TVU1FUw0KPj4+IC0gIGdFZmlNZGVQa2dUb2tlblNwYWNl R3VpZC5QY2RQZXJmb3JtYW5jZUxpYnJhcnlQcm9wZXJ0eU1hc2sgICAgICAjIyBDT05TVU1FUw0K Pj4+ICsgIGdFZmlNZGVQa2dUb2tlblNwYWNlR3VpZC5QY2RQZXJmb3JtYW5jZUxpYnJhcnlQcm9w ZXJ0eU1hc2sgICAgICAgICAjIyBDT05TVU1FUw0KPj4+ICsgIGdFZmlNZGVNb2R1bGVQa2dUb2tl blNwYWNlR3VpZC5QY2RFZGtpaUZwZHRTdHJpbmdSZWNvcmRFbmFibGVPbmx5ICAjIyBDT05TVU1F Uw0KPj4+ICsgIGdFZmlNZGVNb2R1bGVQa2dUb2tlblNwYWNlR3VpZC5QY2RFeHRGcGR0Qm9vdFJl Y29yZFBhZFNpemUgICAgICAgICAjIyBDT05TVU1FUw0KPj4+IGRpZmYgLS1naXQgYS9NZGVNb2R1 bGVQa2cvTGlicmFyeS9EeGVDb3JlUGVyZm9ybWFuY2VMaWIvRHhlQ29yZVBlcmZvcm1hbmNlTGli SW50ZXJuYWwuaCBiL01kZU1vZHVsZVBrZy9MaWJyYXJ5L0R4ZUNvcmVQZXJmb3JtYW5jZUxpYi9E eGVDb3JlUGVyZm9ybWFuY2VMaWJJbnRlcm5hbC5oDQo+Pj4gaW5kZXggZjE1NDBkOC4uN2U3OTY3 NSAxMDA2NDQNCj4+PiAtLS0gYS9NZGVNb2R1bGVQa2cvTGlicmFyeS9EeGVDb3JlUGVyZm9ybWFu Y2VMaWIvRHhlQ29yZVBlcmZvcm1hbmNlTGliSW50ZXJuYWwuaA0KPj4+ICsrKyBiL01kZU1vZHVs ZVBrZy9MaWJyYXJ5L0R4ZUNvcmVQZXJmb3JtYW5jZUxpYi9EeGVDb3JlUGVyZm9ybWFuY2VMaWJJ bnRlcm5hbC5oDQo+Pj4gQEAgLTIsMTEgKzIsMTEgQEANCj4+PiAgICBNYXN0ZXIgaGVhZGVyIGZp bGVzIGZvciBEeGVDb3JlUGVyZm9ybWFuY2VMaWIgaW5zdGFuY2UuDQo+Pj4NCj4+PiAgICBUaGlz IGhlYWRlciBmaWxlIGhvbGRzIHRoZSBwcm90b3R5cGVzIG9mIHRoZSBQZXJmb3JtYW5jZSBhbmQg UGVyZm9ybWFuY2VFeCBQcm90b2NvbCBwdWJsaXNoZWQgYnkgdGhpcw0KPj4+ICAgIGxpYnJhcnkg aW5zdGFuY2UgYXQgaXRzIGNvbnN0cnVjdG9yLg0KPj4+DQo+Pj4gLUNvcHlyaWdodCAoYykgMjAw NiAtIDIwMTcsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4+ PiArQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdo dHMgcmVzZXJ2ZWQuPEJSPg0KPj4+ICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcg bWF0ZXJpYWxzDQo+Pj4gIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhl IHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBCU0QgTGljZW5zZQ0KPj4+ICB3aGljaCBhY2Nv bXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2Ug bWF5IGJlIGZvdW5kIGF0DQo+Pj4gIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2Qt bGljZW5zZS5waHANCj4+Pg0KPj4+IEBAIC0yMCwyMSArMjAsMzYgQEAgV0lUSE9VVCBXQVJSQU5U SUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1Q TElFRC4NCj4+Pg0KPj4+DQo+Pj4gICNpbmNsdWRlIDxQaUR4ZS5oPg0KPj4+DQo+Pj4gICNpbmNs dWRlIDxHdWlkL1BlcmZvcm1hbmNlLmg+DQo+Pj4gKyNpbmNsdWRlIDxHdWlkL0V4dGVuZGVkRmly bXdhcmVQZXJmb3JtYW5jZS5oPg0KPj4+ICsjaW5jbHVkZSA8R3VpZC9aZXJvR3VpZC5oPg0KPj4+ ICsjaW5jbHVkZSA8R3VpZC9FdmVudEdyb3VwLmg+DQo+Pj4gKyNpbmNsdWRlIDxHdWlkL0Zpcm13 YXJlUGVyZm9ybWFuY2UuaD4NCj4+PiArI2luY2x1ZGUgPEd1aWQvUGlTbW1Db21tdW5pY2F0aW9u UmVnaW9uVGFibGUuaD4NCj4+PiArDQo+Pj4gKyNpbmNsdWRlIDxQcm90b2NvbC9Ecml2ZXJCaW5k aW5nLmg+DQo+Pj4gKyNpbmNsdWRlIDxQcm90b2NvbC9Mb2FkZWRJbWFnZS5oPg0KPj4+ICsjaW5j bHVkZSA8UHJvdG9jb2wvQ29tcG9uZW50TmFtZTIuaD4NCj4+PiArI2luY2x1ZGUgPFByb3RvY29s L0RldmljZVBhdGhUb1RleHQuaD4NCj4+PiArI2luY2x1ZGUgPFByb3RvY29sL1NtbUNvbW11bmlj YXRpb24uaD4NCj4+Pg0KPj4+ICAjaW5jbHVkZSA8TGlicmFyeS9QZXJmb3JtYW5jZUxpYi5oPg0K Pj4+ICAjaW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KPj4+ICAjaW5jbHVkZSA8TGlicmFy eS9Ib2JMaWIuaD4NCj4+PiAgI2luY2x1ZGUgPExpYnJhcnkvQmFzZUxpYi5oPg0KPj4+ICAjaW5j bHVkZSA8TGlicmFyeS9CYXNlTWVtb3J5TGliLmg+DQo+Pj4gICNpbmNsdWRlIDxMaWJyYXJ5L1Rp bWVyTGliLmg+DQo+Pj4gICNpbmNsdWRlIDxMaWJyYXJ5L1BjZExpYi5oPg0KPj4+ICAjaW5jbHVk ZSA8TGlicmFyeS9VZWZpQm9vdFNlcnZpY2VzVGFibGVMaWIuaD4NCj4+PiArI2luY2x1ZGUgPExp YnJhcnkvVWVmaVJ1bnRpbWVTZXJ2aWNlc1RhYmxlTGliLmg+DQo+Pj4gICNpbmNsdWRlIDxMaWJy YXJ5L01lbW9yeUFsbG9jYXRpb25MaWIuaD4NCj4+PiAgI2luY2x1ZGUgPExpYnJhcnkvVWVmaUxp Yi5oPg0KPj4+ICsjaW5jbHVkZSA8TGlicmFyeS9SZXBvcnRTdGF0dXNDb2RlTGliLmg+DQo+Pj4g KyNpbmNsdWRlIDxMaWJyYXJ5L0R4ZVNlcnZpY2VzTGliLmg+DQo+Pj4gKyNpbmNsdWRlIDxMaWJy YXJ5L1BlQ29mZkdldEVudHJ5UG9pbnRMaWIuaD4NCj4+Pg0KPj4+ICAvLw0KPj4+ICAvLyBJbnRl cmZhY2UgZGVjbGFyYXRpb25zIGZvciBQZXJmb3JtYW5jZUV4IFByb3RvY29sLg0KPj4+ICAvLw0K Pj4+ICAvKioNCj4+PiAtLQ0KPj4+IDEuOS41Lm1zeXNnaXQuMQ0KPj4+DQo+Pj4gX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCj4+PiBlZGsyLWRldmVsIG1h aWxpbmcgbGlzdA0KPj4+IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnDQo+Pj4gaHR0cHM6Ly9saXN0 cy4wMS5vcmcvbWFpbG1hbi9saXN0aW5mby9lZGsyLWRldmVsDQo=