From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 134.134.136.126, mailfrom: ray.ni@intel.com) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by groups.io with SMTP; Sun, 25 Aug 2019 16:15:54 -0700 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 25 Aug 2019 16:15:52 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.64,431,1559545200"; d="scan'208";a="331281319" Received: from fmsmsx106.amr.corp.intel.com ([10.18.124.204]) by orsmga004.jf.intel.com with ESMTP; 25 Aug 2019 16:15:52 -0700 Received: from shsmsx152.ccr.corp.intel.com (10.239.6.52) by FMSMSX106.amr.corp.intel.com (10.18.124.204) with Microsoft SMTP Server (TLS) id 14.3.439.0; Sun, 25 Aug 2019 16:15:52 -0700 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.112]) by SHSMSX152.ccr.corp.intel.com ([169.254.6.62]) with mapi id 14.03.0439.000; Mon, 26 Aug 2019 07:15:49 +0800 From: "Ni, Ray" To: "Chen, Marc W" , "Chaganty, Rangasai V" , "devel@edk2.groups.io" Subject: Re: [edk2-platforms:PATCH] Intel/IntelSiliconPkg Implement SmmAccess in IntelSiliconPkg Thread-Topic: [edk2-platforms:PATCH] Intel/IntelSiliconPkg Implement SmmAccess in IntelSiliconPkg Thread-Index: AQHVWZ1zsH4zrI0Xq0mzU2k9CqBPQKcIiUYAgACve1CAABdtgIADMmsQ Date: Sun, 25 Aug 2019 23:15:49 +0000 Message-ID: <734D49CCEBEEF84792F5B80ED585239D5C2999A5@SHSMSX104.ccr.corp.intel.com> References: <20190823102751.9944-1-marc.w.chen@intel.com> <734D49CCEBEEF84792F5B80ED585239D5C296BCB@SHSMSX104.ccr.corp.intel.com> In-Reply-To: Accept-Language: en-US, zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiZTk1MGVmMTUtYTc1Ny00MTJlLTg5OTQtMjdkZTc4MjZhNWJlIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiTUNrRjNBYjBKOElHXC9CayttdThTR0haa0JnZklhNmdoT3ZPNjNqUzFDXC9kdGUweXYxWjZCRGdGWmFwQU5hTmo3In0= x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.2.0.6 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Return-Path: ray.ni@intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 TWFyYywNCnRoZSBkZXBlbmRlbmN5IG1heSBiZSBub3QgaWRlYWwgcmlnaHQgbm93LiBidXQgcmVj b21tZW5kYXRpb24gaXMgbm90IGNoYW5nZWTwn5iKDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdl LS0tLS0NCj4gRnJvbTogQ2hlbiwgTWFyYyBXDQo+IFNlbnQ6IEZyaWRheSwgQXVndXN0IDIzLCAy MDE5IDExOjI2IFBNDQo+IFRvOiBOaSwgUmF5IDxyYXkubmlAaW50ZWwuY29tPjsgQ2hhZ2FudHks IFJhbmdhc2FpIFYgPHJhbmdhc2FpLnYuY2hhZ2FudHlAaW50ZWwuY29tPjsgZGV2ZWxAZWRrMi5n cm91cHMuaW8NCj4gU3ViamVjdDogUkU6IFtlZGsyLXBsYXRmb3JtczpQQVRDSF0gSW50ZWwvSW50 ZWxTaWxpY29uUGtnIEltcGxlbWVudCBTbW1BY2Nlc3MgaW4gSW50ZWxTaWxpY29uUGtnDQo+IA0K PiBUaGFua3MgUmF5IGFuZCBTYWkgZm9yIHJldmlld2luZywgcGxlYXNlIHNlZSBteSBiZWxvdyBy ZXBseSBmb3IgeW91ciBxdWVzdGlvbnMuDQo+IA0KPiAxLiBUaGUgcmVhc29uIHdoeSBJIHB1dCB0 aGUgTGlicmFyeSBmb2xkZXIgaW4gRmVhdHVyZS9TbW1BY2Nlc3MgZm9sZGVyIGlzIGJlY2F1c2Ug SSBzYXcgRmVhdHVyZS9DYXBzdWxlIGFsc28gZG9pbmcgaXQgdGhpcyB3YXksDQo+IHNvIEkgdGhv dWdodCB3ZSB3YW50IHRvIHB1dCBhbGwgcmVsYXRlZCBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgc2Ft ZSBmZWF0dXJlIGZvbGRlciBpbmNsdWRpbmcgbGlicmFyeSwgcGxlYXNlIGxldCBtZSBrbm93IGlm IHlvdQ0KPiB3YW50IG1lIHRvIG1vdmUgdGhlIFBlaVNtbUFjY2Vzc0xpYiB0byByb290IExpYnJh cnkgZm9sZGVyLg0KPiANCj4gMi4gSSBzYXcgdGhhdCBWdGQgYWxzbyBkZXBlbmQgb24gTWRlTW9k dWxlUGtnLCBzbyBJIHRob3VnaHQgSW50ZWxTaWxpY29uUGtnIGlzIGFsbG93ZWQgdG8gdXNlIE1k ZU1vZHVsZVBrZywgYW5kIFNtbUFjY2Vzcw0KPiBjb2RlIG5lZWQgU21tQWNjZXNzLmgsIHdoaWNo IGlzIGluIE1kZU1vZHVsZVBrZywgZXZlbiB3ZSBjYW4gY2hhbmdlIHRvIHVzZSBNbUFjY2Vzcy5o IGZyb20gTWRlUGtnIG5vdywgYnV0IEkgdGhvdWdodA0KPiB0aGUgU01NIGlzIGJlbG9uZyB0byB4 ODYgc2lsaWNvbiwgc28gdXNlIFNtbUFjY2Vzcy5oIGlzIGJldHRlciB0aGFuIE1tQWNjZXNzLmgs IGxldCBtZSBrbm93IGlmIHlvdSBwcmVmZXIgdG8gdXNlIE1tQWNjZXNzLA0KPiB0aGVuIEknbGwg bW9kaWZ5IHRoZSBQYXRjaCB0byB1c2UgdGhhdC4NCj4gDQo+IFRoYW5rcywNCj4gTWFyYw0KPiAN Cj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+IEZyb206IE5pLCBSYXkNCj4gPiBT ZW50OiBTYXR1cmRheSwgQXVndXN0IDI0LCAyMDE5IDU6MDMgQU0NCj4gPiBUbzogQ2hhZ2FudHks IFJhbmdhc2FpIFYgPHJhbmdhc2FpLnYuY2hhZ2FudHlAaW50ZWwuY29tPjsgQ2hlbiwgTWFyYyBX DQo+ID4gPG1hcmMudy5jaGVuQGludGVsLmNvbT47IGRldmVsQGVkazIuZ3JvdXBzLmlvDQo+ID4g U3ViamVjdDogUkU6IFtlZGsyLXBsYXRmb3JtczpQQVRDSF0gSW50ZWwvSW50ZWxTaWxpY29uUGtn IEltcGxlbWVudA0KPiA+IFNtbUFjY2VzcyBpbiBJbnRlbFNpbGljb25Qa2cNCj4gPg0KPiA+IEl0 J3Mgbm90IHJlY29tbWVuZGVkIHRvIG1ha2UgSW50ZWxTaWxpY29uUGtnIGRlcGVuZCBvbiBNZGVN b2R1bGVQa2cuDQo+ID4NCj4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiBG cm9tOiBDaGFnYW50eSwgUmFuZ2FzYWkgVg0KPiA+ID4gU2VudDogRnJpZGF5LCBBdWd1c3QgMjMs IDIwMTkgMTE6MzQgQU0NCj4gPiA+IFRvOiBDaGVuLCBNYXJjIFcgPG1hcmMudy5jaGVuQGludGVs LmNvbT47IGRldmVsQGVkazIuZ3JvdXBzLmlvDQo+ID4gPiBDYzogTmksIFJheSA8cmF5Lm5pQGlu dGVsLmNvbT4NCj4gPiA+IFN1YmplY3Q6IFJFOiBbZWRrMi1wbGF0Zm9ybXM6UEFUQ0hdIEludGVs L0ludGVsU2lsaWNvblBrZyBJbXBsZW1lbnQNCj4gPiBTbW1BY2Nlc3MgaW4gSW50ZWxTaWxpY29u UGtnDQo+ID4gPg0KPiA+ID4gTWF5IEkga25vdyB0aGUgcmVhc29uIHRvIGltcGxlbWVudCB0aGUg U21tQWNjZXNzTGliIGluc3RhbmNlIHVuZGVyDQo+ID4gXEZlYXR1cmUgZm9sZGVyPw0KPiA+ID4g Q2FuIHdlIG1vdmUgaXQgdW5kZXIgSW50ZWxTaWxpY29uUGtnXExpYnJhcnkgKFdlIG5lZWQgdG8g Y3JlYXRlIGEgbGlicmFyeQ0KPiA+IGZvbGRlciBpbiB0aGUgcm9vdCkgYW5kIGtlZXAganVzdCB0 aGUgbW9kdWxlIGluIHRoZQ0KPiA+ID4gXEZlYXR1cmUgZm9sZGVyPw0KPiA+ID4NCj4gPiA+IEkn dmUgbm90aWNlZCB0aGVyZSBpcyBhIGRlcGVuZGVuY3kgb24gTWRlTW9kdWxlUGtnIHdpdGggdGhp cyBjaGFuZ2UuDQo+ID4gPiBDb3VsZCB5b3UgcHJvdmlkZSB0aGUgcmVhc29uIHRvIGhhdmUgc3Vj aCBkZXBlbmRlbmN5IGFzIHBhcnQgb2YgdGhpcw0KPiA+IGNoYW5nZT8NCj4gPiA+DQo+ID4gPiBU aGFua3MsDQo+ID4gPiBTYWkNCj4gPiA+DQo+ID4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0t LQ0KPiA+ID4gRnJvbTogQ2hlbiwgTWFyYyBXDQo+ID4gPiBTZW50OiBGcmlkYXksIEF1Z3VzdCAy MywgMjAxOSAzOjI4IEFNDQo+ID4gPiBUbzogZGV2ZWxAZWRrMi5ncm91cHMuaW8NCj4gPiA+IENj OiBDaGVuLCBNYXJjIFcgPG1hcmMudy5jaGVuQGludGVsLmNvbT47IE5pLCBSYXkgPHJheS5uaUBp bnRlbC5jb20+Ow0KPiA+IENoYWdhbnR5LCBSYW5nYXNhaSBWDQo+ID4gPiA8cmFuZ2FzYWkudi5j aGFnYW50eUBpbnRlbC5jb20+DQo+ID4gPiBTdWJqZWN0OiBbZWRrMi1wbGF0Zm9ybXM6UEFUQ0hd IEludGVsL0ludGVsU2lsaWNvblBrZyBJbXBsZW1lbnQNCj4gPiBTbW1BY2Nlc3MgaW4gSW50ZWxT aWxpY29uUGtnDQo+ID4gPg0KPiA+ID4gUkVGOmh0dHBzOi8vYnVnemlsbGEudGlhbm9jb3JlLm9y Zy9zaG93X2J1Zy5jZ2k/aWQ9MjEyMQ0KPiA+ID4NCj4gPiA+IEltcGxlbWVudCBTbW1BY2Nlc3Mg Zm9yIFBFSSBhbmQgRFhFIHBoYXNlIGluIEludGVsU2lsaWNvblBrZw0KPiA+ID4NCj4gPiA+IFNp Z25lZC1vZmYtYnk6IE1hcmMgQ2hlbiA8bWFyYy53LmNoZW5AaW50ZWwuY29tPg0KPiA+ID4gQ2M6 IFJheSBOaSA8cmF5Lm5pQGludGVsLmNvbT4NCj4gPiA+IENjOiBSYW5nYXNhaSBWIENoYWdhbnR5 IDxyYW5nYXNhaS52LmNoYWdhbnR5QGludGVsLmNvbT4NCj4gPiA+IC0tLQ0KPiA+ID4gIC4uLi9M aWJyYXJ5L1BlaVNtbUFjY2Vzc0xpYi9QZWlTbW1BY2Nlc3NMaWIuYyAgICAgIHwgMzQzDQo+ID4g KysrKysrKysrKysrKysrKysrKysrDQo+ID4gPiAgLi4uL0xpYnJhcnkvUGVpU21tQWNjZXNzTGli L1BlaVNtbUFjY2Vzc0xpYi5pbmYgICAgfCAgNDIgKysrDQo+ID4gPiAgLi4uL0ZlYXR1cmUvU21t QWNjZXNzL1NtbUFjY2Vzc0R4ZS9TbW1BY2Nlc3MuaW5mICAgfCAgNDcgKysrDQo+ID4gPiAgLi4u L1NtbUFjY2Vzcy9TbW1BY2Nlc3NEeGUvU21tQWNjZXNzRHJpdmVyLmMgICAgICAgfCAyNjcNCj4g PiArKysrKysrKysrKysrKysrDQo+ID4gPiAgLi4uL1NtbUFjY2Vzcy9TbW1BY2Nlc3NEeGUvU21t QWNjZXNzRHJpdmVyLmggICAgICAgfCAxNjAgKysrKysrKysrKw0KPiA+ID4gIC4uLi9JbnRlbFNp bGljb25Qa2cvSW5jbHVkZS9MaWJyYXJ5L1NtbUFjY2Vzc0xpYi5oIHwgIDMyICsrDQo+ID4gPiAg NiBmaWxlcyBjaGFuZ2VkLCA4OTEgaW5zZXJ0aW9ucygrKQ0KPiA+ID4gIGNyZWF0ZSBtb2RlIDEw MDY0NA0KPiA+IFNpbGljb24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0ZlYXR1cmUvU21tQWNjZXNz L0xpYnJhcnkvUGVpU21tQWNjZXNzTGliLw0KPiA+IFBlaVNtbUFjY2Vzc0xpYi5jDQo+ID4gPiAg Y3JlYXRlIG1vZGUgMTAwNjQ0DQo+ID4gU2lsaWNvbi9JbnRlbC9JbnRlbFNpbGljb25Qa2cvRmVh dHVyZS9TbW1BY2Nlc3MvTGlicmFyeS9QZWlTbW1BY2Nlc3NMaWIvDQo+ID4gUGVpU21tQWNjZXNz TGliLmluZg0KPiA+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiA+IFNpbGljb24vSW50ZWwvSW50 ZWxTaWxpY29uUGtnL0ZlYXR1cmUvU21tQWNjZXNzL1NtbUFjY2Vzc0R4ZS9TbW1BY2NlDQo+ID4g c3MuaW5mDQo+ID4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+ID4gU2lsaWNvbi9JbnRlbC9JbnRl bFNpbGljb25Qa2cvRmVhdHVyZS9TbW1BY2Nlc3MvU21tQWNjZXNzRHhlL1NtbUFjY2UNCj4gPiBz c0RyaXZlci5jDQo+ID4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+ID4gU2lsaWNvbi9JbnRlbC9J bnRlbFNpbGljb25Qa2cvRmVhdHVyZS9TbW1BY2Nlc3MvU21tQWNjZXNzRHhlL1NtbUFjY2UNCj4g PiBzc0RyaXZlci5oDQo+ID4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+ID4gU2lsaWNvbi9JbnRl bC9JbnRlbFNpbGljb25Qa2cvSW5jbHVkZS9MaWJyYXJ5L1NtbUFjY2Vzc0xpYi5oDQo+ID4gPg0K PiA+ID4gZGlmZiAtLWdpdA0KPiA+IGEvU2lsaWNvbi9JbnRlbC9JbnRlbFNpbGljb25Qa2cvRmVh dHVyZS9TbW1BY2Nlc3MvTGlicmFyeS9QZWlTbW1BY2Nlc3NMaQ0KPiA+IGIvUGVpU21tQWNjZXNz TGliLmMNCj4gPiA+DQo+ID4gYi9TaWxpY29uL0ludGVsL0ludGVsU2lsaWNvblBrZy9GZWF0dXJl L1NtbUFjY2Vzcy9MaWJyYXJ5L1BlaVNtbUFjY2Vzc0xpDQo+ID4gYi9QZWlTbW1BY2Nlc3NMaWIu Yw0KPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiA+IGluZGV4IDAwMDAwMDAwMDAuLjg4 ZWIyMTdkMmENCj4gPiA+IC0tLSAvZGV2L251bGwNCj4gPiA+ICsrKw0KPiA+IGIvU2lsaWNvbi9J bnRlbC9JbnRlbFNpbGljb25Qa2cvRmVhdHVyZS9TbW1BY2Nlc3MvTGlicmFyeS9QZWlTbW1BY2Nl DQo+ID4gPiArKysgc3NMaWIvUGVpU21tQWNjZXNzTGliLmMNCj4gPiA+IEBAIC0wLDAgKzEsMzQz IEBADQo+ID4gPiArLyoqIEBmaWxlDQo+ID4gPiArICBUaGlzIGlzIHRvIHB1Ymxpc2ggdGhlIFNN TSBBY2Nlc3MgUHBpIGluc3RhbmNlLg0KPiA+ID4gKw0KPiA+ID4gKyAgQ29weXJpZ2h0IChjKSAy MDE5LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ID4gPiAr ICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ID4gKw0K PiA+ID4gKyoqLw0KPiA+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VNZW1vcnlMaWIuaD4NCj4g PiA+ICsjaW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KPiA+ID4gKyNpbmNsdWRlIDxMaWJy YXJ5L01lbW9yeUFsbG9jYXRpb25MaWIuaD4gI2luY2x1ZGUNCj4gPiA+ICs8TGlicmFyeS9QY2lT ZWdtZW50TGliLmg+ICNpbmNsdWRlIDxMaWJyYXJ5L1BlaVNlcnZpY2VzTGliLmg+ICNpbmNsdWRl DQo+ID4gPiArPExpYnJhcnkvSG9iTGliLmg+ICNpbmNsdWRlIDxVZWZpL1VlZmlCYXNlVHlwZS5o PiAjaW5jbHVkZQ0KPiA+ID4gKzxHdWlkL1NtcmFtTWVtb3J5UmVzZXJ2ZS5oPg0KPiA+ID4gKw0K PiA+ID4gKyNpbmNsdWRlIDxQcGkvU21tQWNjZXNzLmg+DQo+ID4gPiArI2luY2x1ZGUgPEluZHVz dHJ5U3RhbmRhcmQvUGNpMjIuaD4NCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIFNNTV9BQ0NFU1Nf UFJJVkFURV9EQVRBX1NJR05BVFVSRSBTSUdOQVRVUkVfMzIgKCc0JywNCj4gPiAnNScsICdzJywN Cj4gPiA+ICsnYScpDQo+ID4gPiArDQo+ID4gPiArLy8vDQo+ID4gPiArLy8vIFByaXZhdGUgZGF0 YQ0KPiA+ID4gKy8vLw0KPiA+ID4gK3R5cGVkZWYgc3RydWN0IHsNCj4gPiA+ICsgIFVJTlROICAg ICAgICAgICAgICAgICBTaWduYXR1cmU7DQo+ID4gPiArICBFRklfSEFORExFICAgICAgICAgICAg SGFuZGxlOw0KPiA+ID4gKyAgUEVJX1NNTV9BQ0NFU1NfUFBJICAgIFNtbUFjY2VzczsNCj4gPiA+ ICsgIC8vDQo+ID4gPiArICAvLyBMb2NhbCBEYXRhIGZvciBTTU0gQWNjZXNzIGludGVyZmFjZSBn b2VzIGhlcmUNCj4gPiA+ICsgIC8vDQo+ID4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgTnVt YmVyUmVnaW9uczsNCj4gPiA+ICsgIEVGSV9TTVJBTV9ERVNDUklQVE9SICAqU21yYW1EZXNjOw0K PiA+ID4gK30gU01NX0FDQ0VTU19QUklWQVRFX0RBVEE7DQo+ID4gPiArDQo+ID4gPiArI2RlZmlu ZSBTTU1fQUNDRVNTX1BSSVZBVEVfREFUQV9GUk9NX1RISVMoYSkgXA0KPiA+ID4gKyAgICAgICAg Q1IgKGEsIFwNCj4gPiA+ICsgICAgICAgICAgU01NX0FDQ0VTU19QUklWQVRFX0RBVEEsIFwNCj4g PiA+ICsgICAgICAgICAgU21tQWNjZXNzLCBcDQo+ID4gPiArICAgICAgICAgIFNNTV9BQ0NFU1Nf UFJJVkFURV9EQVRBX1NJR05BVFVSRSBcDQo+ID4gPiArICAgICAgKQ0KPiA+ID4gKw0KPiA+ID4g Ky8qKg0KPiA+ID4gKyAgVGhpcyByb3V0aW5lIGFjY2VwdHMgYSByZXF1ZXN0IHRvICJvcGVuIiBh IHJlZ2lvbiBvZiBTTVJBTS4gIFRoZQ0KPiA+ID4gKyAgcmVnaW9uIGNvdWxkIGJlIGxlZ2FjeSBB QlNFRywgSFNFRywgb3IgVFNFRyBuZWFyIHRvcCBvZiBwaHlzaWNhbA0KPiA+IG1lbW9yeS4NCj4g PiA+ICsgIFRoZSB1c2Ugb2YgIm9wZW4iIG1lYW5zIHRoYXQgdGhlIG1lbW9yeSBpcyB2aXNpYmxl IGZyb20gYWxsIFBFSU0NCj4gPiA+ICsgIGFuZCBTTU0gYWdlbnRzLg0KPiA+ID4gKw0KPiA+ID4g KyAgQHBhcmFtW2luXSBUaGlzICAgICAgICAgICAgIC0gIFBvaW50ZXIgdG8gdGhlIFNNTSBBY2Nl c3MgSW50ZXJmYWNlLg0KPiA+ID4gKyAgQHBhcmFtW2luXSBEZXNjcmlwdG9ySW5kZXggIC0gIFJl Z2lvbiBvZiBTTVJBTSB0byBPcGVuLg0KPiA+ID4gKyAgQHBhcmFtW2luXSBQZWlTZXJ2aWNlcyAg ICAgIC0gIEdlbmVyYWwgcHVycG9zZSBzZXJ2aWNlcyBhdmFpbGFibGUgdG8gZXZlcnkNCj4gPiBQ RUlNLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIC0g IFRoZSByZWdpb24gd2FzIHN1Y2Nlc3NmdWxseSBvcGVuZWQuDQo+ID4gPiArICBAcmV0dmFsIEVG SV9ERVZJQ0VfRVJST1IgICAgICAgLSAgVGhlIHJlZ2lvbiBjb3VsZCBub3QgYmUgb3BlbmVkDQo+ ID4gYmVjYXVzZSBsb2NrZWQgYnkNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaGlwc2V0Lg0KPiA+ID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIg IC0gIFRoZSBkZXNjcmlwdG9yIGluZGV4IHdhcyBvdXQgb2YNCj4gPiBib3VuZHMuDQo+ID4gPiAr KiovDQo+ID4gPiArRUZJX1NUQVRVUw0KPiA+ID4gK0VGSUFQSQ0KPiA+ID4gK09wZW4gKA0KPiA+ ID4gKyAgSU4gRUZJX1BFSV9TRVJWSUNFUyAgICAgICAgICAgKipQZWlTZXJ2aWNlcywNCj4gPiA+ ICsgIElOIFBFSV9TTU1fQUNDRVNTX1BQSSAgICAgICAgICpUaGlzLA0KPiA+ID4gKyAgSU4gVUlO VE4gICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRvckluZGV4DQo+ID4gPiArICApDQo+ID4g PiArew0KPiA+ID4gKyAgU01NX0FDQ0VTU19QUklWQVRFX0RBVEEgKlNtbUFjY2VzczsNCj4gPiA+ ICsNCj4gPiA+ICsgIFNtbUFjY2VzcyA9IFNNTV9BQ0NFU1NfUFJJVkFURV9EQVRBX0ZST01fVEhJ UyAoVGhpcyk7ICBpZg0KPiA+ID4gKyAoRGVzY3JpcHRvckluZGV4ID49IFNtbUFjY2Vzcy0+TnVt YmVyUmVnaW9ucykgew0KPiA+ID4gKyAgICBERUJVRyAoKERFQlVHX1dBUk4sICJTTVJBTSByZWdp b24gb3V0IG9mIHJhbmdlXG4iKSk7DQo+ID4gPiArDQo+ID4gPiArICAgIHJldHVybiBFRklfSU5W QUxJRF9QQVJBTUVURVI7DQo+ID4gPiArICB9IGVsc2UgaWYgKFNtbUFjY2Vzcy0+U21yYW1EZXNj W0Rlc2NyaXB0b3JJbmRleF0uUmVnaW9uU3RhdGUgJg0KPiA+IEVGSV9TTVJBTV9MT0NLRUQpIHsN Cj4gPiA+ICsgICAgLy8NCj4gPiA+ICsgICAgLy8gQ2Fubm90IG9wZW4gYSAibG9ja2VkIiByZWdp b24NCj4gPiA+ICsgICAgLy8NCj4gPiA+ICsgICAgREVCVUcgKChERUJVR19XQVJOLCAiQ2Fubm90 IG9wZW4gYSBsb2NrZWQgU01SQU0gcmVnaW9uXG4iKSk7DQo+ID4gPiArDQo+ID4gPiArICAgIHJl dHVybiBFRklfREVWSUNFX0VSUk9SOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgU21t QWNjZXNzLT5TbXJhbURlc2NbRGVzY3JpcHRvckluZGV4XS5SZWdpb25TdGF0ZSAmPSAoVUlOVDY0 KQ0KPiA+ID4gK34oRUZJX1NNUkFNX0NMT1NFRCB8IEVGSV9BTExPQ0FURUQpOw0KPiA+ID4gKyAg U21tQWNjZXNzLT5TbXJhbURlc2NbRGVzY3JpcHRvckluZGV4XS5SZWdpb25TdGF0ZSB8PSAoVUlO VDY0KQ0KPiA+ID4gK0VGSV9TTVJBTV9PUEVOOw0KPiA+ID4gKyAgU21tQWNjZXNzLT5TbW1BY2Nl c3MuT3BlblN0YXRlID0gVFJVRTsNCj4gPiA+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiA+ ICt9DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICBUaGlzIHJvdXRpbmUgYWNjZXB0cyBh IHJlcXVlc3QgdG8gImNsb3NlIiBhIHJlZ2lvbiBvZiBTTVJBTS4gIFRoaXMgaXMNCj4gPiA+ICt2 YWxpZCBmb3INCj4gPiA+ICsgIGNvbXBhdGlibGUgU01SQU0gcmVnaW9uLg0KPiA+ID4gKw0KPiA+ ID4gKyAgQHBhcmFtW2luXSBQZWlTZXJ2aWNlcyAgICAgIC0gIEdlbmVyYWwgcHVycG9zZSBzZXJ2 aWNlcyBhdmFpbGFibGUgdG8gZXZlcnkNCj4gPiBQRUlNLg0KPiA+ID4gKyAgQHBhcmFtW2luXSBU aGlzICAgICAgICAgICAgIC0gIFBvaW50ZXIgdG8gdGhlIFNNTSBBY2Nlc3MgSW50ZXJmYWNlLg0K PiA+ID4gKyAgQHBhcmFtW2luXSBEZXNjcmlwdG9ySW5kZXggIC0gIFJlZ2lvbiBvZiBTTVJBTSB0 byBDbG9zZS4NCj4gPiA+ICsNCj4gPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAg ICAtICBUaGUgcmVnaW9uIHdhcyBzdWNjZXNzZnVsbHkgY2xvc2VkLg0KPiA+ID4gKyAgQHJldHZh bCBFRklfREVWSUNFX0VSUk9SICAgICAgIC0gIFRoZSByZWdpb24gY291bGQgbm90IGJlIGNsb3Nl ZCBiZWNhdXNlDQo+ID4gbG9ja2VkIGJ5DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2hpcHNldC4NCj4gPiA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1F VEVSICAtICBUaGUgZGVzY3JpcHRvciBpbmRleCB3YXMgb3V0IG9mDQo+ID4gYm91bmRzLg0KPiA+ ID4gKyoqLw0KPiA+ID4gK0VGSV9TVEFUVVMNCj4gPiA+ICtFRklBUEkNCj4gPiA+ICtDbG9zZSAo DQo+ID4gPiArICBJTiBFRklfUEVJX1NFUlZJQ0VTICAgICAgICAqKlBlaVNlcnZpY2VzLA0KPiA+ ID4gKyAgSU4gUEVJX1NNTV9BQ0NFU1NfUFBJICAgICAgKlRoaXMsDQo+ID4gPiArICBJTiBVSU5U TiAgICAgICAgICAgICAgICAgICBEZXNjcmlwdG9ySW5kZXgNCj4gPiA+ICsgICkNCj4gPiA+ICt7 DQo+ID4gPiArICBTTU1fQUNDRVNTX1BSSVZBVEVfREFUQSAqU21tQWNjZXNzOw0KPiA+ID4gKyAg Qk9PTEVBTiAgICAgICAgICAgICAgICAgT3BlblN0YXRlOw0KPiA+ID4gKyAgVUlOVDggICAgICAg ICAgICAgICAgICAgSW5kZXg7DQo+ID4gPiArDQo+ID4gPiArICBTbW1BY2Nlc3MgPSBTTU1fQUND RVNTX1BSSVZBVEVfREFUQV9GUk9NX1RISVMgKFRoaXMpOyAgaWYNCj4gPiA+ICsgKERlc2NyaXB0 b3JJbmRleCA+PSBTbW1BY2Nlc3MtPk51bWJlclJlZ2lvbnMpIHsNCj4gPiA+ICsgICAgREVCVUcg KChERUJVR19XQVJOLCAiU01SQU0gcmVnaW9uIG91dCBvZiByYW5nZVxuIikpOw0KPiA+ID4gKw0K PiA+ID4gKyAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ID4gKyAgfSBlbHNl IGlmIChTbW1BY2Nlc3MtPlNtcmFtRGVzY1tEZXNjcmlwdG9ySW5kZXhdLlJlZ2lvblN0YXRlICYN Cj4gPiBFRklfU01SQU1fTE9DS0VEKSB7DQo+ID4gPiArICAgIC8vDQo+ID4gPiArICAgIC8vIENh bm5vdCBjbG9zZSBhICJsb2NrZWQiIHJlZ2lvbg0KPiA+ID4gKyAgICAvLw0KPiA+ID4gKyAgICBE RUJVRyAoKERFQlVHX1dBUk4sICJDYW5ub3QgY2xvc2UgYSBsb2NrZWQgU01SQU0gcmVnaW9uXG4i KSk7DQo+ID4gPiArDQo+ID4gPiArICAgIHJldHVybiBFRklfREVWSUNFX0VSUk9SOw0KPiA+ID4g KyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgaWYgKFNtbUFjY2Vzcy0+U21yYW1EZXNjW0Rlc2NyaXB0 b3JJbmRleF0uUmVnaW9uU3RhdGUgJg0KPiA+IEVGSV9TTVJBTV9DTE9TRUQpIHsNCj4gPiA+ICsg ICAgcmV0dXJuIEVGSV9ERVZJQ0VfRVJST1I7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiAr ICBTbW1BY2Nlc3MtPlNtcmFtRGVzY1tEZXNjcmlwdG9ySW5kZXhdLlJlZ2lvblN0YXRlICY9IChV SU5UNjQpDQo+ID4gPiArIH5FRklfU01SQU1fT1BFTjsgIFNtbUFjY2Vzcy0NCj4gPiA+U21yYW1E ZXNjW0Rlc2NyaXB0b3JJbmRleF0uUmVnaW9uU3RhdGUgfD0NCj4gPiA+ICsgKFVJTlQ2NCkgKEVG SV9TTVJBTV9DTE9TRUQgfCBFRklfQUxMT0NBVEVEKTsNCj4gPiA+ICsNCj4gPiA+ICsgIC8vDQo+ ID4gPiArICAvLyBGaW5kIG91dCBpZiBhbnkgcmVnaW9ucyBhcmUgc3RpbGwgb3BlbiAgLy8gIE9w ZW5TdGF0ZSA9IEZBTFNFOw0KPiA+ID4gKyBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBTbW1BY2Nl c3MtPk51bWJlclJlZ2lvbnM7IEluZGV4KyspIHsNCj4gPiA+ICsgICAgaWYgKChTbW1BY2Nlc3Mt PlNtcmFtRGVzY1tJbmRleF0uUmVnaW9uU3RhdGUgJiBFRklfU01SQU1fT1BFTikNCj4gPiA9PSBF RklfU01SQU1fT1BFTikgew0KPiA+ID4gKyAgICAgIE9wZW5TdGF0ZSA9IFRSVUU7DQo+ID4gPiAr ICAgIH0NCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIFNtbUFjY2Vzcy0+U21tQWNjZXNz Lk9wZW5TdGF0ZSA9IE9wZW5TdGF0ZTsNCj4gPiA+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4g PiA+ICt9DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICBUaGlzIHJvdXRpbmUgYWNjZXB0 cyBhIHJlcXVlc3QgdG8gImxvY2siIFNNUkFNLiAgVGhlDQo+ID4gPiArICByZWdpb24gY291bGQg YmUgbGVnYWN5IEFCIG9yIFRTRUcgbmVhciB0b3Agb2YgcGh5c2ljYWwgbWVtb3J5Lg0KPiA+ID4g KyAgVGhlIHVzZSBvZiAibG9jayIgbWVhbnMgdGhhdCB0aGUgbWVtb3J5IGNhbiBubyBsb25nZXIg YmUgb3BlbmVkDQo+ID4gPiArICB0byBQRUlNLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHBhcmFtW2lu XSBQZWlTZXJ2aWNlcyAgICAgIC0gR2VuZXJhbCBwdXJwb3NlIHNlcnZpY2VzIGF2YWlsYWJsZSB0 byBldmVyeQ0KPiA+IFBFSU0uDQo+ID4gPiArICBAcGFyYW1baW5dIFRoaXMgICAgICAgICAgICAg LSAgUG9pbnRlciB0byB0aGUgU01NIEFjY2VzcyBJbnRlcmZhY2UuDQo+ID4gPiArICBAcGFyYW1b aW5dIERlc2NyaXB0b3JJbmRleCAgLSAgUmVnaW9uIG9mIFNNUkFNIHRvIExvY2suDQo+ID4gPiAr DQo+ID4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgLSAgVGhlIHJlZ2lvbiB3 YXMgc3VjY2Vzc2Z1bGx5IGxvY2tlZC4NCj4gPiA+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJP UiAgICAgICAtICBUaGUgcmVnaW9uIGNvdWxkIG5vdCBiZSBsb2NrZWQgYmVjYXVzZQ0KPiA+IGF0 IGxlYXN0DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25lIHJh bmdlIGlzIHN0aWxsIG9wZW4uDQo+ID4gPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRF UiAgLSAgVGhlIGRlc2NyaXB0b3IgaW5kZXggd2FzIG91dCBvZg0KPiA+IGJvdW5kcy4NCj4gPiA+ ICsqKi8NCj4gPiA+ICtFRklfU1RBVFVTDQo+ID4gPiArRUZJQVBJDQo+ID4gPiArTG9jayAoDQo+ ID4gPiArICBJTiBFRklfUEVJX1NFUlZJQ0VTICAgICAgICAgICoqUGVpU2VydmljZXMsDQo+ID4g PiArICBJTiBQRUlfU01NX0FDQ0VTU19QUEkgICAgICAgICpUaGlzLA0KPiA+ID4gKyAgSU4gVUlO VE4gICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdG9ySW5kZXgNCj4gPiA+ICsgICkNCj4gPiA+ ICt7DQo+ID4gPiArICBTTU1fQUNDRVNTX1BSSVZBVEVfREFUQSAqU21tQWNjZXNzOw0KPiA+ID4g Kw0KPiA+ID4gKyAgU21tQWNjZXNzID0gU01NX0FDQ0VTU19QUklWQVRFX0RBVEFfRlJPTV9USElT IChUaGlzKTsgIGlmDQo+ID4gPiArIChEZXNjcmlwdG9ySW5kZXggPj0gU21tQWNjZXNzLT5OdW1i ZXJSZWdpb25zKSB7DQo+ID4gPiArICAgIERFQlVHICgoREVCVUdfV0FSTiwgIlNNUkFNIHJlZ2lv biBvdXQgb2YgcmFuZ2VcbiIpKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgcmV0dXJuIEVGSV9JTlZB TElEX1BBUkFNRVRFUjsNCj4gPiA+ICsgIH0gZWxzZSBpZiAoU21tQWNjZXNzLT5TbW1BY2Nlc3Mu T3BlblN0YXRlKSB7DQo+ID4gPiArICAgIERFQlVHICgoREVCVUdfV0FSTiwgIkNhbm5vdCBsb2Nr IFNNUkFNIHdoZW4gU01SQU0gcmVnaW9ucw0KPiA+IGFyZSBzdGlsbA0KPiA+ID4gKyBvcGVuXG4i KSk7DQo+ID4gPiArDQo+ID4gPiArICAgIHJldHVybiBFRklfREVWSUNFX0VSUk9SOw0KPiA+ID4g KyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgU21tQWNjZXNzLT5TbXJhbURlc2NbRGVzY3JpcHRvcklu ZGV4XS5SZWdpb25TdGF0ZSB8PSAoVUlOVDY0KQ0KPiA+ID4gKyBFRklfU01SQU1fTE9DS0VEOyAg U21tQWNjZXNzLT5TbW1BY2Nlc3MuTG9ja1N0YXRlID0gVFJVRTsNCj4gPiA+ICsNCj4gPiA+ICsg IHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4g PiArICBUaGlzIHJvdXRpbmUgc2VydmljZXMgYSB1c2VyIHJlcXVlc3QgdG8gZGlzY292ZXIgdGhl IFNNUkFNDQo+ID4gPiArICBjYXBhYmlsaXRpZXMgb2YgdGhpcyBwbGF0Zm9ybS4gIFRoaXMgd2ls bCByZXBvcnQgdGhlIHBvc3NpYmxlDQo+ID4gPiArICByYW5nZXMgdGhhdCBhcmUgcG9zc2libGUg Zm9yIFNNUkFNIGFjY2VzcywgYmFzZWQgdXBvbiB0aGUNCj4gPiA+ICsgIG1lbW9yeSBjb250cm9s bGVyIGNhcGFiaWxpdGllcy4NCj4gPiA+ICsNCj4gPiA+ICsgIEBwYXJhbVtpbl0gUGVpU2Vydmlj ZXMgICAtIEdlbmVyYWwgcHVycG9zZSBzZXJ2aWNlcyBhdmFpbGFibGUgdG8gZXZlcnkNCj4gPiBQ RUlNLg0KPiA+ID4gKyAgQHBhcmFtW2luXSBUaGlzICAgICAgICAgIC0gIFBvaW50ZXIgdG8gdGhl IFNNUkFNIEFjY2VzcyBJbnRlcmZhY2UuDQo+ID4gPiArICBAcGFyYW1baW5dIFNtcmFtTWFwU2l6 ZSAgLSAgUG9pbnRlciB0byB0aGUgdmFyaWFibGUgY29udGFpbmluZyBzaXplIG9mDQo+ID4gdGhl DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyIHRvIGNvbnRhaW4g dGhlIGRlc2NyaXB0aW9uIGluZm9ybWF0aW9uLg0KPiA+ID4gKyAgQHBhcmFtW2luXSBTbXJhbU1h cCAgICAgIC0gIEJ1ZmZlciBjb250YWluaW5nIHRoZSBkYXRhIGRlc2NyaWJpbmcgdGhlDQo+ID4g U21yYW0NCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpb24gZGVzY3Jp cHRvcnMuDQo+ID4gPiArDQo+ID4gPiArICBAcmV0dmFsIEVGSV9CVUZGRVJfVE9PX1NNQUxMICAt ICBUaGUgdXNlciBkaWQgbm90IHByb3ZpZGUgYSBzdWZmaWNpZW50DQo+ID4gYnVmZmVyLg0KPiA+ ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgLSAgVGhlIHVzZXIgcHJvdmlkZWQg YSBzdWZmaWNpZW50bHktc2l6ZWQgYnVmZmVyLg0KPiA+ID4gKyoqLw0KPiA+ID4gK0VGSV9TVEFU VVMNCj4gPiA+ICtFRklBUEkNCj4gPiA+ICtHZXRDYXBhYmlsaXRpZXMgKA0KPiA+ID4gKyAgSU4g RUZJX1BFSV9TRVJWSUNFUyAgICAgICAgICAgICAgICAqKlBlaVNlcnZpY2VzLA0KPiA+ID4gKyAg SU4gUEVJX1NNTV9BQ0NFU1NfUFBJICAgICAgICAgICAgICAqVGhpcywNCj4gPiA+ICsgIElOIE9V VCBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgKlNtcmFtTWFwU2l6ZSwNCj4gPiA+ICsgIElO IE9VVCBFRklfU01SQU1fREVTQ1JJUFRPUiAgICAgICAgKlNtcmFtTWFwDQo+ID4gPiArICApDQo+ ID4gPiArew0KPiA+ID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ID4g KyAgU01NX0FDQ0VTU19QUklWQVRFX0RBVEEgKlNtbUFjY2VzczsNCj4gPiA+ICsgIFVJTlROICAg ICAgICAgICAgICAgICAgIE5lY2Vzc2FyeUJ1ZmZlclNpemU7DQo+ID4gPiArDQo+ID4gPiArICBT bW1BY2Nlc3MgICAgICAgICAgID0gU01NX0FDQ0VTU19QUklWQVRFX0RBVEFfRlJPTV9USElTIChU aGlzKTsNCj4gPiA+ICsgIE5lY2Vzc2FyeUJ1ZmZlclNpemUgPSBTbW1BY2Nlc3MtPk51bWJlclJl Z2lvbnMgKiBzaXplb2YNCj4gPiA+ICsgKEVGSV9TTVJBTV9ERVNDUklQVE9SKTsgIGlmICgqU21y YW1NYXBTaXplIDwgTmVjZXNzYXJ5QnVmZmVyU2l6ZSkNCj4gPiB7DQo+ID4gPiArICAgIERFQlVH ICgoREVCVUdfV0FSTiwgIlNNUkFNIE1hcCBCdWZmZXIgdG9vIHNtYWxsXG4iKSk7DQo+ID4gPiAr DQo+ID4gPiArICAgIFN0YXR1cyA9IEVGSV9CVUZGRVJfVE9PX1NNQUxMOw0KPiA+ID4gKyAgfSBl bHNlIHsNCj4gPiA+ICsgICAgQ29weU1lbSAoU21yYW1NYXAsIFNtbUFjY2Vzcy0+U21yYW1EZXNj LA0KPiA+IE5lY2Vzc2FyeUJ1ZmZlclNpemUpOw0KPiA+ID4gKyAgICBTdGF0dXMgPSBFRklfU1VD Q0VTUzsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICpTbXJhbU1hcFNpemUgPSBOZWNl c3NhcnlCdWZmZXJTaXplOw0KPiA+ID4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPiA+ICt9DQo+ID4g PiArDQo+ID4gPiArLyoqDQo+ID4gPiArICBUaGlzIGZ1bmN0aW9uIGlzIHRvIGluc3RhbGwgYW4g U01NIEFjY2VzcyBQUEkNCj4gPiA+ICsgIC0gPGI+SW50cm9kdWN0aW9uPC9iPiBcbg0KPiA+ID4g KyAgICBBIG1vZHVsZSB0byBpbnN0YWxsIGEgUFBJIGZvciBjb250cm9sbGluZyBTTU0gbW9kZSBt ZW1vcnkgYWNjZXNzDQo+ID4gYmFzaWNhbGx5IGZvciBTMyByZXN1bWUgdXNhZ2UuDQo+ID4gPiAr DQo+ID4gPiArICAtIEBwcmUNCj4gPiA+ICsgICAgLSBfUEVJX01BU1RFUl9CT09UX01PREVfUEVJ TV9QUEk6IEEgUFBJIHB1Ymxpc2hlZCBieQ0KPiA+IGZvdW5kYXRpb24gdG8gZ2V0IGJvb3Rtb2Rl IGV4ZWN1dGVkIGVhcmxpZXIuDQo+ID4gPiArICAgIC0gX1BFSV9QRVJNQU5FTlRfTUVNT1JZX0lO U1RBTExFRF9QUEk6IGEgUFBJIHRoYXQgd2lsbCBiZQ0KPiA+IGluc3RhbGxlZCBhZnRlciBtZW1v cnkgY29udHJvbGxlciBpbml0aWFsaXphdGlvbiBjb21wbGV0ZWQNCj4gPiA+IHRvIGluZGljYXRl IHRoYXQgcGh5c2ljYWwgbWVtb3J5IGlzIHVzYWJsZSBhZnRlciB0aGlzIHBvaW50Lg0KPiA+ID4g Kw0KPiA+ID4gKyAgLSBAcmVzdWx0DQo+ID4gPiArICAgIFB1Ymxpc2ggX1BFSV9TTU1fQUNDRVNT X1BQSS4NCj4gPiA+ICsNCj4gPiA+ICsgICAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAg LSBQcGkgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgYW5kIGluc3RhbGxlZC4NCj4gPiA+ICsgICAgQHJl dHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgLSBQcGkgY2FuJ3QgYmUgZm91bmQuDQo+ID4gPiAr ICAgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgIC0gUHBpIGRvZXMgbm90IGhhdmUgZW5v dWdoDQo+ID4gcmVzb3VyY2VzIHRvIGluaXRpYWxpemUgdGhlIGRyaXZlci4NCj4gPiA+ICsqKi8N Cj4gPiA+ICtFRklfU1RBVFVTDQo+ID4gPiArRUZJQVBJDQo+ID4gPiArUGVpSW5zdGFsbFNtbUFj Y2Vzc1BwaSAoDQo+ID4gPiArICBWT0lEDQo+ID4gPiArICApDQo+ID4gPiArew0KPiA+ID4gKyAg RUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4gPiArICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiA+ID4gKyAgRUZJX1BFSV9QUElfREVT Q1JJUFRPUiAgICAgICAgICAqUHBpTGlzdDsNCj4gPiA+ICsgIEVGSV9TTVJBTV9IT0JfREVTQ1JJ UFRPUl9CTE9DSyAgKkRlc2NyaXB0b3JCbG9jazsNCj4gPiA+ICsgIFNNTV9BQ0NFU1NfUFJJVkFU RV9EQVRBICAgICAgICAgKlNtbUFjY2Vzc1ByaXZhdGU7DQo+ID4gPiArICBWT0lEICAgICAgICAg ICAgICAgICAgICAgICAgICAgICpIb2JMaXN0Ow0KPiA+ID4gKyAgRUZJX0JPT1RfTU9ERSAgICAg ICAgICAgICAgICAgICBCb290TW9kZTsNCj4gPiA+ICsNCj4gPiA+ICsgIFN0YXR1cyA9IFBlaVNl cnZpY2VzR2V0Qm9vdE1vZGUgKCZCb290TW9kZSk7ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKQ0K PiA+ID4gKyB7DQo+ID4gPiArICAgIC8vDQo+ID4gPiArICAgIC8vIElmIG5vdCBpbiBTMyBib290 IHBhdGguIGRvIG5vdGhpbmcNCj4gPiA+ICsgICAgLy8NCj4gPiA+ICsgICAgcmV0dXJuIEVGSV9T VUNDRVNTOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgaWYgKEJvb3RNb2RlICE9IEJP T1RfT05fUzNfUkVTVU1FKSB7DQo+ID4gPiArICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiA+ ICsgIH0NCj4gPiA+ICsgIC8vDQo+ID4gPiArICAvLyBJbml0aWFsaXplIHByaXZhdGUgZGF0YQ0K PiA+ID4gKyAgLy8NCj4gPiA+ICsgIFNtbUFjY2Vzc1ByaXZhdGUgID0gQWxsb2NhdGVaZXJvUG9v bCAoc2l6ZW9mICgqU21tQWNjZXNzUHJpdmF0ZSkpOw0KPiA+ID4gKyBBU1NFUlQgKFNtbUFjY2Vz c1ByaXZhdGUgIT0gTlVMTCk7ICBpZiAoU21tQWNjZXNzUHJpdmF0ZSA9PSBOVUxMKSB7DQo+ID4g PiArICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPiA+ICsgIH0NCj4gPiA+ICsg IFBwaUxpc3QgICAgICAgICAgID0gQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mICgqUHBpTGlzdCkp Ow0KPiA+ID4gKyAgQVNTRVJUIChQcGlMaXN0ICE9IE5VTEwpOw0KPiA+ID4gKyAgaWYgKFBwaUxp c3QgPT0gTlVMTCkgew0KPiA+ID4gKyAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICBTbW1BY2Nlc3NQcml2YXRlLT5TaWduYXR1cmUg PQ0KPiA+IFNNTV9BQ0NFU1NfUFJJVkFURV9EQVRBX1NJR05BVFVSRTsNCj4gPiA+ICsgIFNtbUFj Y2Vzc1ByaXZhdGUtPkhhbmRsZSAgICA9IE5VTEw7DQo+ID4gPiArDQo+ID4gPiArICAvLw0KPiA+ ID4gKyAgLy8gR2V0IEhvYiBsaXN0DQo+ID4gPiArICAvLw0KPiA+ID4gKyAgSG9iTGlzdCA9IEdl dEZpcnN0R3VpZEhvYiAoJmdFZmlTbW1TbXJhbU1lbW9yeUd1aWQpOyAgaWYgKEhvYkxpc3QNCj4g PiA9PQ0KPiA+ID4gKyBOVUxMKSB7DQo+ID4gPiArICAgIERFQlVHICgoREVCVUdfV0FSTiwgIlNt cmFtTWVtb3J5UmVzZXJ2ZSBIT0Igbm90IGZvdW5kXG4iKSk7DQo+ID4gPiArICAgIHJldHVybiBF RklfTk9UX0ZPVU5EOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgRGVzY3JpcHRvckJs b2NrID0gKEVGSV9TTVJBTV9IT0JfREVTQ1JJUFRPUl9CTE9DSyAqKSAoKFVJTlQ4ICopDQo+ID4g PiArIEhvYkxpc3QgKyBzaXplb2YgKEVGSV9IT0JfR1VJRF9UWVBFKSk7DQo+ID4gPiArDQo+ID4g PiArICAvLw0KPiA+ID4gKyAgLy8gQWxsb2Mgc3BhY2UgZm9yIFNtbUFjY2Vzc1ByaXZhdGUtPlNt cmFtRGVzYyAgLy8NCj4gPiA+ICsgU21tQWNjZXNzUHJpdmF0ZS0+U21yYW1EZXNjID0gQWxsb2Nh dGVaZXJvUG9vbA0KPiA+ID4gKyAoKERlc2NyaXB0b3JCbG9jay0+TnVtYmVyT2ZTbW1SZXNlcnZl ZFJlZ2lvbnMpICogc2l6ZW9mDQo+ID4gKEVGSV9TTVJBTV9ERVNDUklQVE9SKSk7ICBpZiAoU21t QWNjZXNzUHJpdmF0ZS0+U21yYW1EZXNjDQo+ID4gPiA9PSBOVUxMKSB7DQo+ID4gPiArICAgIERF QlVHICgoREVCVUdfV0FSTiwgIkFsbG9jIFNtbUFjY2Vzc1ByaXZhdGUtPlNtcmFtRGVzYw0KPiA+ IGZhaWwuXG4iKSk7DQo+ID4gPiArICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4g PiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIkFsbG9jIFNt bUFjY2Vzc1ByaXZhdGUtPlNtcmFtRGVzYw0KPiA+IHN1Y2Nlc3MuXG4iKSk7DQo+ID4gPiArDQo+ ID4gPiArICAvLw0KPiA+ID4gKyAgLy8gdXNlIHRoZSBob2IgdG8gcHVibGlzaCBTTVJBTSBjYXBh YmlsaXRpZXMgIC8vICBmb3IgKEluZGV4ID0gMDsNCj4gPiA+ICsgSW5kZXggPCBEZXNjcmlwdG9y QmxvY2stPk51bWJlck9mU21tUmVzZXJ2ZWRSZWdpb25zOyBJbmRleCsrKSB7DQo+ID4gPiArICAg IFNtbUFjY2Vzc1ByaXZhdGUtPlNtcmFtRGVzY1tJbmRleF0uUGh5c2ljYWxTdGFydCAgPQ0KPiA+ IERlc2NyaXB0b3JCbG9jay0+RGVzY3JpcHRvcltJbmRleF0uUGh5c2ljYWxTdGFydDsNCj4gPiA+ ICsgICAgU21tQWNjZXNzUHJpdmF0ZS0+U21yYW1EZXNjW0luZGV4XS5DcHVTdGFydCAgICAgICA9 IERlc2NyaXB0b3JCbG9jay0NCj4gPiA+RGVzY3JpcHRvcltJbmRleF0uQ3B1U3RhcnQ7DQo+ID4g PiArICAgIFNtbUFjY2Vzc1ByaXZhdGUtPlNtcmFtRGVzY1tJbmRleF0uUGh5c2ljYWxTaXplICAg PQ0KPiA+IERlc2NyaXB0b3JCbG9jay0+RGVzY3JpcHRvcltJbmRleF0uUGh5c2ljYWxTaXplOw0K PiA+ID4gKyAgICBTbW1BY2Nlc3NQcml2YXRlLT5TbXJhbURlc2NbSW5kZXhdLlJlZ2lvblN0YXRl ICAgID0NCj4gPiBEZXNjcmlwdG9yQmxvY2stPkRlc2NyaXB0b3JbSW5kZXhdLlJlZ2lvblN0YXRl Ow0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgU21tQWNjZXNzUHJpdmF0ZS0+TnVtYmVy UmVnaW9ucyAgICAgICAgICAgICA9IEluZGV4Ow0KPiA+ID4gKyAgU21tQWNjZXNzUHJpdmF0ZS0+ U21tQWNjZXNzLk9wZW4gICAgICAgICAgICA9IE9wZW47DQo+ID4gPiArICBTbW1BY2Nlc3NQcml2 YXRlLT5TbW1BY2Nlc3MuQ2xvc2UgICAgICAgICAgID0gQ2xvc2U7DQo+ID4gPiArICBTbW1BY2Nl c3NQcml2YXRlLT5TbW1BY2Nlc3MuTG9jayAgICAgICAgICAgID0gTG9jazsNCj4gPiA+ICsgIFNt bUFjY2Vzc1ByaXZhdGUtPlNtbUFjY2Vzcy5HZXRDYXBhYmlsaXRpZXMgPSBHZXRDYXBhYmlsaXRp ZXM7DQo+ID4gPiArICBTbW1BY2Nlc3NQcml2YXRlLT5TbW1BY2Nlc3MuTG9ja1N0YXRlICAgICAg ID0gRkFMU0U7DQo+ID4gPiArICBTbW1BY2Nlc3NQcml2YXRlLT5TbW1BY2Nlc3MuT3BlblN0YXRl ICAgICAgID0gRkFMU0U7DQo+ID4gPiArDQo+ID4gPiArICAvLw0KPiA+ID4gKyAgLy8gSW5zdGFs bCBQUEkNCj4gPiA+ICsgIC8vDQo+ID4gPiArICBQcGlMaXN0LT5GbGFncyAgPSAoRUZJX1BFSV9Q UElfREVTQ1JJUFRPUl9QUEkgfA0KPiA+IEVGSV9QRUlfUFBJX0RFU0NSSVBUT1JfVEVSTUlOQVRF X0xJU1QpOw0KPiA+ID4gKyAgUHBpTGlzdC0+R3VpZCAgID0gJmdQZWlTbW1BY2Nlc3NQcGlHdWlk Ow0KPiA+ID4gKyAgUHBpTGlzdC0+UHBpICAgID0gJlNtbUFjY2Vzc1ByaXZhdGUtPlNtbUFjY2Vz czsNCj4gPiA+ICsNCj4gPiA+ICsgIFN0YXR1cyAgICAgICAgICA9IFBlaVNlcnZpY2VzSW5zdGFs bFBwaSAoUHBpTGlzdCk7DQo+ID4gPiArICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KPiA+ ID4gKw0KPiA+ID4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+ID4gK30NCj4gPiA+IGRpZmYg LS1naXQNCj4gPiBhL1NpbGljb24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0ZlYXR1cmUvU21tQWNj ZXNzL0xpYnJhcnkvUGVpU21tQWNjZXNzTGkNCj4gPiBiL1BlaVNtbUFjY2Vzc0xpYi5pbmYNCj4g PiA+DQo+ID4gYi9TaWxpY29uL0ludGVsL0ludGVsU2lsaWNvblBrZy9GZWF0dXJlL1NtbUFjY2Vz cy9MaWJyYXJ5L1BlaVNtbUFjY2Vzc0xpDQo+ID4gYi9QZWlTbW1BY2Nlc3NMaWIuaW5mDQo+ID4g PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+ID4gaW5kZXggMDAwMDAwMDAwMC4uMGM2ZjVmNjVk OA0KPiA+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ID4gKysrDQo+ID4gYi9TaWxpY29uL0ludGVsL0lu dGVsU2lsaWNvblBrZy9GZWF0dXJlL1NtbUFjY2Vzcy9MaWJyYXJ5L1BlaVNtbUFjY2UNCj4gPiA+ ICsrKyBzc0xpYi9QZWlTbW1BY2Nlc3NMaWIuaW5mDQo+ID4gPiBAQCAtMCwwICsxLDQyIEBADQo+ ID4gPiArIyMgQGZpbGUNCj4gPiA+ICsjIExpYnJhcnkgZGVzY3JpcHRpb24gZmlsZSBmb3IgdGhl IFNtbUFjY2VzcyBtb2R1bGUgIyAjIENvcHlyaWdodCAoYykNCj4gPiA+ICsyMDE5LCBJbnRlbCBD b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+ICMNCj4gPiA+ICtTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudCAjICMjDQo+ID4gPiArDQo+ID4gPiAr DQo+ID4gPiArW0RlZmluZXNdDQo+ID4gPiArSU5GX1ZFUlNJT04gPSAweDAwMDEwMDE3DQo+ID4g PiArQkFTRV9OQU1FID0gUGVpU21tQWNjZXNzTGliDQo+ID4gPiArRklMRV9HVUlEID0gNTQwMjA4 ODEtQjU5NC00NDJBLTgzNzctQTU3QUZGOThDN0NGDQo+ID4gPiArVkVSU0lPTl9TVFJJTkcgPSAx LjANCj4gPiA+ICtNT0RVTEVfVFlQRSA9IFBFSU0NCj4gPiA+ICtMSUJSQVJZX0NMQVNTID0gU21t QWNjZXNzTGliDQo+ID4gPiArDQo+ID4gPiArDQo+ID4gPiArW0xpYnJhcnlDbGFzc2VzXQ0KPiA+ ID4gK0Jhc2VMaWINCj4gPiA+ICtCYXNlTWVtb3J5TGliDQo+ID4gPiArSG9iTGliDQo+ID4gPiAr UGNpU2VnbWVudExpYg0KPiA+ID4gK1BlaVNlcnZpY2VzTGliDQo+ID4gPiArDQo+ID4gPiArDQo+ ID4gPiArW1BhY2thZ2VzXQ0KPiA+ID4gK01kZVBrZy9NZGVQa2cuZGVjDQo+ID4gPiArTWRlTW9k dWxlUGtnL01kZU1vZHVsZVBrZy5kZWMNCj4gPiA+ICtJbnRlbFNpbGljb25Qa2cvSW50ZWxTaWxp Y29uUGtnLmRlYw0KPiA+ID4gKw0KPiA+ID4gKw0KPiA+ID4gK1tTb3VyY2VzXQ0KPiA+ID4gK1Bl aVNtbUFjY2Vzc0xpYi5jDQo+ID4gPiArDQo+ID4gPiArDQo+ID4gPiArW1BwaXNdDQo+ID4gPiAr Z1BlaVNtbUFjY2Vzc1BwaUd1aWQgIyMgUFJPRFVDRVMNCj4gPiA+ICsNCj4gPiA+ICsNCj4gPiA+ ICtbR3VpZHNdDQo+ID4gPiArZ0VmaVNtbVNtcmFtTWVtb3J5R3VpZA0KPiA+ID4gZGlmZiAtLWdp dA0KPiA+IGEvU2lsaWNvbi9JbnRlbC9JbnRlbFNpbGljb25Qa2cvRmVhdHVyZS9TbW1BY2Nlc3Mv U21tQWNjZXNzRHhlL1NtbUFjDQo+ID4gY2Vzcy5pbmYNCj4gPiA+DQo+ID4gYi9TaWxpY29uL0lu dGVsL0ludGVsU2lsaWNvblBrZy9GZWF0dXJlL1NtbUFjY2Vzcy9TbW1BY2Nlc3NEeGUvU21tQWMN Cj4gPiBjZXNzLmluZg0KPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiA+IGluZGV4IDAw MDAwMDAwMDAuLmIxYzk4ODg0NGYNCj4gPiA+IC0tLSAvZGV2L251bGwNCj4gPiA+ICsrKw0KPiA+ IGIvU2lsaWNvbi9JbnRlbC9JbnRlbFNpbGljb25Qa2cvRmVhdHVyZS9TbW1BY2Nlc3MvU21tQWNj ZXNzRHhlL1NtbUFjDQo+ID4gPiArKysgY2Vzcy5pbmYNCj4gPiA+IEBAIC0wLDAgKzEsNDcgQEAN Cj4gPiA+ICsjIyBAZmlsZQ0KPiA+ID4gKyMgQ29tcG9uZW50IGRlc2NyaXB0aW9uIGZpbGUgZm9y IHRoZSBTbW1BY2Nlc3MgbW9kdWxlICMgIyBDb3B5cmlnaHQgKGMpDQo+ID4gPiArMjAxOSwgSW50 ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPiAjDQo+ID4gPiArU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQgIyAjIw0KPiA+ID4gKw0KPiA+ ID4gKw0KPiA+ID4gK1tEZWZpbmVzXQ0KPiA+ID4gK0lORl9WRVJTSU9OID0gMHgwMDAxMDAxNw0K PiA+ID4gK0JBU0VfTkFNRSA9IFNtbUFjY2Vzcw0KPiA+ID4gK0ZJTEVfR1VJRCA9IDEzMjNDN0Y4 LURBRDUtNDEyNi1BNTRCLTdBMDVGQkY0MTUxNQ0KPiA+ID4gK1ZFUlNJT05fU1RSSU5HID0gMS4w DQo+ID4gPiArTU9EVUxFX1RZUEUgPSBEWEVfRFJJVkVSDQo+ID4gPiArRU5UUllfUE9JTlQgPSBT bW1BY2Nlc3NEcml2ZXJFbnRyeVBvaW50DQo+ID4gPiArDQo+ID4gPiArDQo+ID4gPiArW0xpYnJh cnlDbGFzc2VzXQ0KPiA+ID4gK1VlZmlEcml2ZXJFbnRyeVBvaW50DQo+ID4gPiArQmFzZUxpYg0K PiA+ID4gK0Jhc2VNZW1vcnlMaWINCj4gPiA+ICtEZWJ1Z0xpYg0KPiA+ID4gK0hvYkxpYg0KPiA+ ID4gKw0KPiA+ID4gKw0KPiA+ID4gK1tQYWNrYWdlc10NCj4gPiA+ICtNZGVQa2cvTWRlUGtnLmRl Yw0KPiA+ID4gK01kZU1vZHVsZVBrZy9NZGVNb2R1bGVQa2cuZGVjDQo+ID4gPiArSW50ZWxTaWxp Y29uUGtnL0ludGVsU2lsaWNvblBrZy5kZWMNCj4gPiA+ICsNCj4gPiA+ICsNCj4gPiA+ICtbU291 cmNlc10NCj4gPiA+ICtTbW1BY2Nlc3NEcml2ZXIuaA0KPiA+ID4gK1NtbUFjY2Vzc0RyaXZlci5j DQo+ID4gPiArDQo+ID4gPiArDQo+ID4gPiArW1Byb3RvY29sc10NCj4gPiA+ICtnRWZpU21tQWNj ZXNzMlByb3RvY29sR3VpZCAgICAgICAjIyBQUk9EVUNFUw0KPiA+ID4gKw0KPiA+ID4gKw0KPiA+ ID4gK1tHdWlkc10NCj4gPiA+ICtnRWZpU21tU21yYW1NZW1vcnlHdWlkDQo+ID4gPiArDQo+ID4g PiArDQo+ID4gPiArW0RlcGV4XQ0KPiA+ID4gK1RSVUUNCj4gPiA+IGRpZmYgLS1naXQNCj4gPiBh L1NpbGljb24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0ZlYXR1cmUvU21tQWNjZXNzL1NtbUFjY2Vz c0R4ZS9TbW1BYw0KPiA+IGNlc3NEcml2ZXIuYw0KPiA+ID4NCj4gPiBiL1NpbGljb24vSW50ZWwv SW50ZWxTaWxpY29uUGtnL0ZlYXR1cmUvU21tQWNjZXNzL1NtbUFjY2Vzc0R4ZS9TbW1BYw0KPiA+ IGNlc3NEcml2ZXIuYw0KPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiA+IGluZGV4IDAw MDAwMDAwMDAuLjNkM2M0YWIyMDYNCj4gPiA+IC0tLSAvZGV2L251bGwNCj4gPiA+ICsrKw0KPiA+ IGIvU2lsaWNvbi9JbnRlbC9JbnRlbFNpbGljb25Qa2cvRmVhdHVyZS9TbW1BY2Nlc3MvU21tQWNj ZXNzRHhlL1NtbUFjDQo+ID4gPiArKysgY2Vzc0RyaXZlci5jDQo+ID4gPiBAQCAtMCwwICsxLDI2 NyBAQA0KPiA+ID4gKy8qKiBAZmlsZQ0KPiA+ID4gKyAgVGhpcyBpcyB0aGUgZHJpdmVyIHRoYXQg cHVibGlzaGVzIHRoZSBTTU0gQWNjZXNzIFByb3RvY29sDQo+ID4gPiArICBpbnN0YW5jZSBmb3Ig U3lzdGVtIEFnZW50Lg0KPiA+ID4gKw0KPiA+ID4gKyAgQ29weXJpZ2h0IChjKSAyMDE5LCBJbnRl bCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ID4gPiArICBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ID4gKw0KPiA+ID4gKyoq Lw0KPiA+ID4gKyNpbmNsdWRlICJTbW1BY2Nlc3NEcml2ZXIuaCINCj4gPiA+ICsNCj4gPiA+ICtz dGF0aWMgU01NX0FDQ0VTU19QUklWQVRFX0RBVEEgIG1TbW1BY2Nlc3M7DQo+ID4gPiArDQo+ID4g PiArLyoqDQo+ID4gPiArICBUaGlzIGlzIHRoZSBzdGFuZGFyZCBFRkkgZHJpdmVyIHBvaW50IHRo YXQNCj4gPiA+ICsgIGluc3RhbGxzIGFuIFNNTSBBY2Nlc3MgUHJvdG9jb2wNCj4gPiA+ICsNCj4g PiA+ICsgIEBwYXJhbVtpbl0gSW1hZ2VIYW5kbGUgICAgIC0gSGFuZGxlIGZvciB0aGUgaW1hZ2Ug b2YgdGhpcyBkcml2ZXINCj4gPiA+ICsgIEBwYXJhbVtpbl0gU3lzdGVtVGFibGUgICAgIC0gUG9p bnRlciB0byB0aGUgRUZJIFN5c3RlbSBUYWJsZQ0KPiA+ID4gKw0KPiA+ID4gKyAgQHJldHZhbCBF RklfU1VDQ0VTUyAgICAgICAgICAgLSBQcm90b2NvbCB3YXMgaW5zdGFsbGVkIHN1Y2Nlc3NmdWxs eQ0KPiA+ID4gKyAgQGV4Y2VwdGlvbiBFRklfVU5TVVBQT1JURUQgICAgLSBQcm90b2NvbCB3YXMg bm90IGluc3RhbGxlZA0KPiA+ID4gKyAgQHJldHZhbCBFRklfTk9UX0ZPVU5EICAgICAgICAgLSBQ cm90b2NvbCBjYW4ndCBiZSBmb3VuZC4NCj4gPiA+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNP VVJDRVMgIC0gUHJvdG9jb2wgZG9lcyBub3QgaGF2ZSBlbm91Z2gNCj4gPiByZXNvdXJjZXMgdG8g aW5pdGlhbGl6ZSB0aGUgZHJpdmVyLg0KPiA+ID4gKyoqLw0KPiA+ID4gK0VGSV9TVEFUVVMNCj4g PiA+ICtFRklBUEkNCj4gPiA+ICtTbW1BY2Nlc3NEcml2ZXJFbnRyeVBvaW50ICgNCj4gPiA+ICsg IElOIEVGSV9IQU5ETEUgICAgICAgICBJbWFnZUhhbmRsZSwNCj4gPiA+ICsgIElOIEVGSV9TWVNU RU1fVEFCTEUgICAqU3lzdGVtVGFibGUNCj4gPiA+ICsgICkNCj4gPiA+ICt7DQo+ID4gPiArICBF RklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gPiA+ICsgIFVJTlROICAg ICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+ID4gPiArICBFRklfU01SQU1fSE9CX0RF U0NSSVBUT1JfQkxPQ0sgICpEZXNjcmlwdG9yQmxvY2s7DQo+ID4gPiArICBFRklfUEVJX0hPQl9Q T0lOVEVSUyAgICAgICAgICAgICpIb2I7DQo+ID4gPiArDQo+ID4gPiArICAvLw0KPiA+ID4gKyAg Ly8gSW5pdGlhbGl6ZSBHbG9iYWwgdmFyaWFibGVzDQo+ID4gPiArICAvLw0KPiA+ID4gKyAgWmVy b01lbSAoJm1TbW1BY2Nlc3MsIHNpemVvZiAobVNtbUFjY2VzcykpOw0KPiA+ID4gKw0KPiA+ID4g KyAgbVNtbUFjY2Vzcy5TaWduYXR1cmUgICAgICAgID0NCj4gPiBTTU1fQUNDRVNTX1BSSVZBVEVf REFUQV9TSUdOQVRVUkU7DQo+ID4gPiArICBtU21tQWNjZXNzLkhhbmRsZSAgICAgICAgICAgPSBO VUxMOw0KPiA+ID4gKw0KPiA+ID4gKyAgLy8NCj4gPiA+ICsgIC8vIEdldCBIb2IgbGlzdA0KPiA+ ID4gKyAgLy8NCj4gPiA+ICsgIEhvYiA9IEdldEZpcnN0R3VpZEhvYiAoJmdFZmlTbW1TbXJhbU1l bW9yeUd1aWQpOyAgaWYgKEhvYiA9PQ0KPiA+IE5VTEwpIHsNCj4gPiA+ICsgICAgREVCVUcgKChE RUJVR19XQVJOLCAiU21yYW1NZW1vcnlSZXNlcnZlIEhPQiBub3QgZm91bmRcbiIpKTsNCj4gPiA+ ICsgICAgcmV0dXJuIEVGSV9OT1RfRk9VTkQ7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiAr ICBEZXNjcmlwdG9yQmxvY2sgPSAoVk9JRCAqKSAoKFVJTlQ4ICopIEhvYiArIHNpemVvZg0KPiA+ ID4gKyAoRUZJX0hPQl9HVUlEX1RZUEUpKTsNCj4gPiA+ICsNCj4gPiA+ICsgIC8vDQo+ID4gPiAr ICAvLyBBbGxvYyBzcGFjZSBmb3IgbVNtbUFjY2Vzcy5TbXJhbURlc2MgIC8vDQo+ID4gbVNtbUFj Y2Vzcy5TbXJhbURlc2MgPQ0KPiA+ID4gKyBBbGxvY2F0ZVplcm9Qb29sICgoRGVzY3JpcHRvckJs b2NrLT5OdW1iZXJPZlNtbVJlc2VydmVkUmVnaW9ucykgKg0KPiA+ID4gKyBzaXplb2YgKEVGSV9T TVJBTV9ERVNDUklQVE9SKSk7ICBpZiAobVNtbUFjY2Vzcy5TbXJhbURlc2MgPT0NCj4gPiBOVUxM KSB7DQo+ID4gPiArICAgIERFQlVHICgoREVCVUdfV0FSTiwgIkFsbG9jIG1TbW1BY2Nlc3MuU21y YW1EZXNjIGZhaWwuXG4iKSk7DQo+ID4gPiArICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNF UzsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIERFQlVHICgoREVCVUdfSU5GTywgIkFs bG9jIG1TbW1BY2Nlc3MuU21yYW1EZXNjIHN1Y2Nlc3MuXG4iKSk7DQo+ID4gPiArDQo+ID4gPiAr ICAvLw0KPiA+ID4gKyAgLy8gVXNlIHRoZSBIT0IgdG8gcHVibGlzaCBTTVJBTSBjYXBhYmlsaXRp ZXMgIC8vICBmb3IgKEluZGV4ID0gMDsNCj4gPiA+ICsgSW5kZXggPCBEZXNjcmlwdG9yQmxvY2st Pk51bWJlck9mU21tUmVzZXJ2ZWRSZWdpb25zOyBJbmRleCsrKSB7DQo+ID4gPiArICAgIG1TbW1B Y2Nlc3MuU21yYW1EZXNjW0luZGV4XS5QaHlzaWNhbFN0YXJ0ID0gRGVzY3JpcHRvckJsb2NrLQ0K PiA+ID5EZXNjcmlwdG9yW0luZGV4XS5QaHlzaWNhbFN0YXJ0Ow0KPiA+ID4gKyAgICBtU21tQWNj ZXNzLlNtcmFtRGVzY1tJbmRleF0uQ3B1U3RhcnQgICAgICA9IERlc2NyaXB0b3JCbG9jay0NCj4g PiA+RGVzY3JpcHRvcltJbmRleF0uQ3B1U3RhcnQ7DQo+ID4gPiArICAgIG1TbW1BY2Nlc3MuU21y YW1EZXNjW0luZGV4XS5QaHlzaWNhbFNpemUgID0gRGVzY3JpcHRvckJsb2NrLQ0KPiA+ID5EZXNj cmlwdG9yW0luZGV4XS5QaHlzaWNhbFNpemU7DQo+ID4gPiArICAgIG1TbW1BY2Nlc3MuU21yYW1E ZXNjW0luZGV4XS5SZWdpb25TdGF0ZSAgID0gRGVzY3JpcHRvckJsb2NrLQ0KPiA+ID5EZXNjcmlw dG9yW0luZGV4XS5SZWdpb25TdGF0ZTsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIG1T bW1BY2Nlc3MuTnVtYmVyUmVnaW9ucyAgICAgICAgICAgICAgPSBJbmRleDsNCj4gPiA+ICsgIG1T bW1BY2Nlc3MuU21tQWNjZXNzLk9wZW4gICAgICAgICAgICAgPSBPcGVuOw0KPiA+ID4gKyAgbVNt bUFjY2Vzcy5TbW1BY2Nlc3MuQ2xvc2UgICAgICAgICAgICA9IENsb3NlOw0KPiA+ID4gKyAgbVNt bUFjY2Vzcy5TbW1BY2Nlc3MuTG9jayAgICAgICAgICAgICA9IExvY2s7DQo+ID4gPiArICBtU21t QWNjZXNzLlNtbUFjY2Vzcy5HZXRDYXBhYmlsaXRpZXMgID0gR2V0Q2FwYWJpbGl0aWVzOw0KPiA+ ID4gKyAgbVNtbUFjY2Vzcy5TbW1BY2Nlc3MuTG9ja1N0YXRlICAgICAgICA9IEZBTFNFOw0KPiA+ ID4gKyAgbVNtbUFjY2Vzcy5TbW1BY2Nlc3MuT3BlblN0YXRlICAgICAgICA9IEZBTFNFOw0KPiA+ ID4gKw0KPiA+ID4gKyAgLy8NCj4gPiA+ICsgIC8vIEluc3RhbGwgb3VyIHByb3RvY29sIGludGVy ZmFjZXMgb24gdGhlIGRldmljZSdzIGhhbmRsZSAgLy8gIFN0YXR1cw0KPiA+ID4gKyA9IGdCUy0+ SW5zdGFsbE11bHRpcGxlUHJvdG9jb2xJbnRlcmZhY2VzICgNCj4gPiA+ICsgICAgICAgICAgICAg ICAgICAmbVNtbUFjY2Vzcy5IYW5kbGUsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgJmdFZmlT bW1BY2Nlc3MyUHJvdG9jb2xHdWlkLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICZtU21tQWNj ZXNzLlNtbUFjY2VzcywNCj4gPiA+ICsgICAgICAgICAgICAgICAgICBOVUxMDQo+ID4gPiArICAg ICAgICAgICAgICAgICAgKTsNCj4gPiA+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4g PiA+ICsgICAgREVCVUcgKChERUJVR19XQVJOLCAiSW5zdGFsbE11bHRpcGxlUHJvdG9jb2xJbnRl cmZhY2VzIHJldHVybmVkDQo+ID4gJXJcbiIsIFN0YXR1cykpOw0KPiA+ID4gKyAgICByZXR1cm4g RUZJX1VOU1VQUE9SVEVEOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgcmV0dXJuIEVG SV9TVUNDRVNTOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgIFRoaXMg cm91dGluZSBhY2NlcHRzIGEgcmVxdWVzdCB0byAib3BlbiIgYSByZWdpb24gb2YgU01SQU0uICBU aGUNCj4gPiA+ICsgIHJlZ2lvbiBjb3VsZCBiZSBsZWdhY3kgQUJTRUcsIEhTRUcsIG9yIFRTRUcg bmVhciB0b3Agb2YgcGh5c2ljYWwNCj4gPiBtZW1vcnkuDQo+ID4gPiArICBUaGUgdXNlIG9mICJv cGVuIiBtZWFucyB0aGF0IHRoZSBtZW1vcnkgaXMgdmlzaWJsZSBmcm9tIGFsbA0KPiA+ID4gK2Jv b3Qtc2VydmljZQ0KPiA+ID4gKyAgYW5kIFNNTSBhZ2VudHMuDQo+ID4gPiArDQo+ID4gPiArICBA cGFyYW1baW5dIFRoaXMgICAgICAgICAgICAgICAtIFBvaW50ZXIgdG8gdGhlIFNNTSBBY2Nlc3Mg SW50ZXJmYWNlLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAg ICAgLSBUaGUgcmVnaW9uIHdhcyBzdWNjZXNzZnVsbHkgb3BlbmVkLg0KPiA+ID4gKyAgQHJldHZh bCBFRklfREVWSUNFX0VSUk9SICAgICAgLSBUaGUgcmVnaW9uIGNvdWxkIG5vdCBiZSBvcGVuZWQg YmVjYXVzZQ0KPiA+IGxvY2tlZCBieQ0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg Y2hpcHNldC4NCj4gPiA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIC0gVGhlIGRl c2NyaXB0b3IgaW5kZXggd2FzIG91dCBvZg0KPiA+IGJvdW5kcy4NCj4gPiA+ICsqKi8NCj4gPiA+ ICtFRklfU1RBVFVTDQo+ID4gPiArRUZJQVBJDQo+ID4gPiArT3BlbiAoDQo+ID4gPiArICBJTiBF RklfU01NX0FDQ0VTUzJfUFJPVE9DT0wgKlRoaXMNCj4gPiA+ICsgICkNCj4gPiA+ICt7DQo+ID4g PiArICBTTU1fQUNDRVNTX1BSSVZBVEVfREFUQSAqU21tQWNjZXNzOw0KPiA+ID4gKyAgVUlOVE4g ICAgICAgICAgICAgICAgICAgRGVzY3JpcHRvckluZGV4Ow0KPiA+ID4gKw0KPiA+ID4gKyAgU21t QWNjZXNzID0gU01NX0FDQ0VTU19QUklWQVRFX0RBVEFfRlJPTV9USElTIChUaGlzKTsgIGZvcg0K PiA+ID4gKyAoRGVzY3JpcHRvckluZGV4ID0gMDsgRGVzY3JpcHRvckluZGV4IDwgU21tQWNjZXNz LT5OdW1iZXJSZWdpb25zOw0KPiA+IERlc2NyaXB0b3JJbmRleCsrKSB7DQo+ID4gPiArICAgIGlm IChTbW1BY2Nlc3MtPlNtcmFtRGVzY1tEZXNjcmlwdG9ySW5kZXhdLlJlZ2lvblN0YXRlICYNCj4g PiBFRklfU01SQU1fTE9DS0VEKSB7DQo+ID4gPiArICAgICAgREVCVUcgKChERUJVR19XQVJOLCAi Q2Fubm90IG9wZW4gYSBsb2NrZWQgU01SQU0gcmVnaW9uXG4iKSk7DQo+ID4gPiArICAgICAgcmV0 dXJuIEVGSV9ERVZJQ0VfRVJST1I7DQo+ID4gPiArICAgIH0NCj4gPiA+ICsgIH0NCj4gPiA+ICsN Cj4gPiA+ICsgIGZvciAoRGVzY3JpcHRvckluZGV4ID0gMDsgRGVzY3JpcHRvckluZGV4IDwgU21t QWNjZXNzLQ0KPiA+ID5OdW1iZXJSZWdpb25zOyBEZXNjcmlwdG9ySW5kZXgrKykgew0KPiA+ID4g KyAgICBTbW1BY2Nlc3MtPlNtcmFtRGVzY1tEZXNjcmlwdG9ySW5kZXhdLlJlZ2lvblN0YXRlICY9 IChVSU5UNjQpDQo+ID4gfihFRklfU01SQU1fQ0xPU0VEIHwgRUZJX0FMTE9DQVRFRCk7DQo+ID4g PiArICAgIFNtbUFjY2Vzcy0+U21yYW1EZXNjW0Rlc2NyaXB0b3JJbmRleF0uUmVnaW9uU3RhdGUg fD0gKFVJTlQ2NCkNCj4gPiA+ICtFRklfU01SQU1fT1BFTjsNCj4gPiA+ICsgIH0NCj4gPiA+ICsg IFNtbUFjY2Vzcy0+U21tQWNjZXNzLk9wZW5TdGF0ZSA9IFRSVUU7DQo+ID4gPiArICByZXR1cm4g RUZJX1NVQ0NFU1M7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAgVGhp cyByb3V0aW5lIGFjY2VwdHMgYSByZXF1ZXN0IHRvICJjbG9zZSIgYSByZWdpb24gb2YgU01SQU0u ICBUaGUNCj4gPiA+ICsgIHJlZ2lvbiBjb3VsZCBiZSBsZWdhY3kgQUIgb3IgVFNFRyBuZWFyIHRv cCBvZiBwaHlzaWNhbCBtZW1vcnkuDQo+ID4gPiArICBUaGUgdXNlIG9mICJjbG9zZSIgbWVhbnMg dGhhdCB0aGUgbWVtb3J5IGlzIG9ubHkgdmlzaWJsZSBmcm9tIFNNTQ0KPiA+ID4gK2FnZW50cywN Cj4gPiA+ICsgIG5vdCBmcm9tIEJTIG9yIFJUIGNvZGUuDQo+ID4gPiArDQo+ID4gPiArICBAcGFy YW1baW5dIFRoaXMgICAgICAgICAgICAgICAtIFBvaW50ZXIgdG8gdGhlIFNNTSBBY2Nlc3MgSW50 ZXJmYWNlLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAg LSBUaGUgcmVnaW9uIHdhcyBzdWNjZXNzZnVsbHkgY2xvc2VkLg0KPiA+ID4gKyAgQHJldHZhbCBF RklfREVWSUNFX0VSUk9SICAgICAgLSBUaGUgcmVnaW9uIGNvdWxkIG5vdCBiZSBjbG9zZWQgYmVj YXVzZQ0KPiA+IGxvY2tlZCBieSBjaGlwc2V0Lg0KPiA+ID4gKyAgQHJldHZhbCBFRklfSU5WQUxJ RF9QQVJBTUVURVIgLSBUaGUgZGVzY3JpcHRvciBpbmRleCB3YXMgb3V0IG9mDQo+ID4gYm91bmRz Lg0KPiA+ID4gKyoqLw0KPiA+ID4gK0VGSV9TVEFUVVMNCj4gPiA+ICtFRklBUEkNCj4gPiA+ICtD bG9zZSAoDQo+ID4gPiArICBJTiBFRklfU01NX0FDQ0VTUzJfUFJPVE9DT0wgICpUaGlzDQo+ID4g PiArICApDQo+ID4gPiArew0KPiA+ID4gKyAgU01NX0FDQ0VTU19QUklWQVRFX0RBVEEgKlNtbUFj Y2VzczsNCj4gPiA+ICsgIEJPT0xFQU4gICAgICAgICAgICAgICAgIE9wZW5TdGF0ZTsNCj4gPiA+ ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiA+ID4gKyAgVUlOVE4gICAgICAg ICAgICAgICAgICAgRGVzY3JpcHRvckluZGV4Ow0KPiA+ID4gKw0KPiA+ID4gKyAgU21tQWNjZXNz ID0gU01NX0FDQ0VTU19QUklWQVRFX0RBVEFfRlJPTV9USElTIChUaGlzKTsNCj4gPiA+ICsNCj4g PiA+ICsgIGZvciAoRGVzY3JpcHRvckluZGV4ID0gMDsgRGVzY3JpcHRvckluZGV4IDwgU21tQWNj ZXNzLQ0KPiA+ID5OdW1iZXJSZWdpb25zOyBEZXNjcmlwdG9ySW5kZXgrKykgew0KPiA+ID4gKyAg ICBpZiAoU21tQWNjZXNzLT5TbXJhbURlc2NbRGVzY3JpcHRvckluZGV4XS5SZWdpb25TdGF0ZSAm DQo+ID4gRUZJX1NNUkFNX0xPQ0tFRCkgew0KPiA+ID4gKyAgICAgIERFQlVHICgoREVCVUdfV0FS TiwgIkNhbm5vdCBjbG9zZSBhIGxvY2tlZCBTTVJBTSByZWdpb25cbiIpKTsNCj4gPiA+ICsgICAg ICBjb250aW51ZTsNCj4gPiA+ICsgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICBTbW1BY2Nlc3Mt PlNtcmFtRGVzY1tEZXNjcmlwdG9ySW5kZXhdLlJlZ2lvblN0YXRlICY9IChVSU5UNjQpDQo+ID4g fkVGSV9TTVJBTV9PUEVOOw0KPiA+ID4gKyAgICBTbW1BY2Nlc3MtPlNtcmFtRGVzY1tEZXNjcmlw dG9ySW5kZXhdLlJlZ2lvblN0YXRlIHw9IChVSU5UNjQpDQo+ID4gPiArIChFRklfU01SQU1fQ0xP U0VEIHwgRUZJX0FMTE9DQVRFRCk7ICB9DQo+ID4gPiArDQo+ID4gPiArICAvLw0KPiA+ID4gKyAg Ly8gRmluZCBvdXQgaWYgYW55IHJlZ2lvbnMgYXJlIHN0aWxsIG9wZW4gIC8vICBPcGVuU3RhdGUg PSBGQUxTRTsNCj4gPiA+ICsgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgbVNtbUFjY2Vzcy5OdW1i ZXJSZWdpb25zOyBJbmRleCsrKSB7DQo+ID4gPiArICAgIGlmICgoU21tQWNjZXNzLT5TbXJhbURl c2NbSW5kZXhdLlJlZ2lvblN0YXRlICYgRUZJX1NNUkFNX09QRU4pDQo+ID4gPT0gRUZJX1NNUkFN X09QRU4pIHsNCj4gPiA+ICsgICAgICBPcGVuU3RhdGUgPSBUUlVFOw0KPiA+ID4gKyAgICB9DQo+ ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICBTbW1BY2Nlc3MtPlNtbUFjY2Vzcy5PcGVuU3Rh dGUgPSBPcGVuU3RhdGU7DQo+ID4gPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4gPiArfQ0K PiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAgVGhpcyByb3V0aW5lIGFjY2VwdHMgYSByZXF1 ZXN0IHRvICJsb2NrIiBTTVJBTS4gIFRoZQ0KPiA+ID4gKyAgcmVnaW9uIGNvdWxkIGJlIGxlZ2Fj eSBBQiBvciBUU0VHIG5lYXIgdG9wIG9mIHBoeXNpY2FsIG1lbW9yeS4NCj4gPiA+ICsgIFRoZSB1 c2Ugb2YgImxvY2siIG1lYW5zIHRoYXQgdGhlIG1lbW9yeSBjYW4gbm8gbG9uZ2VyIGJlIG9wZW5l ZA0KPiA+ID4gKyAgdG8gQlMgc3RhdGUuLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHBhcmFtW2luXSBU aGlzICAgICAgICAgICAgICAgLSBQb2ludGVyIHRvIHRoZSBTTU0gQWNjZXNzIEludGVyZmFjZS4N Cj4gPiA+ICsNCj4gPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIC0gVGhlIHJl Z2lvbiB3YXMgc3VjY2Vzc2Z1bGx5IGxvY2tlZC4NCj4gPiA+ICsgIEByZXR2YWwgRUZJX0RFVklD RV9FUlJPUiAgICAgIC0gVGhlIHJlZ2lvbiBjb3VsZCBub3QgYmUgbG9ja2VkIGJlY2F1c2UNCj4g PiBhdCBsZWFzdA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmUg cmFuZ2UgaXMgc3RpbGwgb3Blbi4NCj4gPiA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1F VEVSIC0gVGhlIGRlc2NyaXB0b3IgaW5kZXggd2FzIG91dCBvZg0KPiA+IGJvdW5kcy4NCj4gPiA+ ICsqKi8NCj4gPiA+ICtFRklfU1RBVFVTDQo+ID4gPiArRUZJQVBJDQo+ID4gPiArTG9jayAoDQo+ ID4gPiArICBJTiBFRklfU01NX0FDQ0VTUzJfUFJPVE9DT0wgKlRoaXMNCj4gPiA+ICsgICkNCj4g PiA+ICt7DQo+ID4gPiArICBTTU1fQUNDRVNTX1BSSVZBVEVfREFUQSAqU21tQWNjZXNzOw0KPiA+ ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgRGVzY3JpcHRvckluZGV4Ow0KPiA+ID4gKw0K PiA+ID4gKyAgU21tQWNjZXNzID0gU01NX0FDQ0VTU19QUklWQVRFX0RBVEFfRlJPTV9USElTIChU aGlzKTsNCj4gPiA+ICsNCj4gPiA+ICsgIGlmIChTbW1BY2Nlc3MtPlNtbUFjY2Vzcy5PcGVuU3Rh dGUpIHsNCj4gPiA+ICsgICAgREVCVUcgKChERUJVR19XQVJOLCAiQ2Fubm90IGxvY2sgU01SQU0g d2hlbiBTTVJBTSByZWdpb25zDQo+ID4gYXJlIHN0aWxsIG9wZW5cbiIpKTsNCj4gPiA+ICsgICAg cmV0dXJuIEVGSV9ERVZJQ0VfRVJST1I7DQo+ID4gPiArICB9DQo+ID4gPiArICBmb3IgKERlc2Ny aXB0b3JJbmRleCA9IDA7IERlc2NyaXB0b3JJbmRleCA8IFNtbUFjY2Vzcy0NCj4gPiA+TnVtYmVy UmVnaW9uczsgRGVzY3JpcHRvckluZGV4KyspIHsNCj4gPiA+ICsgICAgU21tQWNjZXNzLT5TbXJh bURlc2NbRGVzY3JpcHRvckluZGV4XS5SZWdpb25TdGF0ZSB8PQ0KPiA+ID4gKyBFRklfU01SQU1f TE9DS0VEOyAgfSAgU21tQWNjZXNzLT5TbW1BY2Nlc3MuTG9ja1N0YXRlID0gVFJVRTsNCj4gPiA+ ICsNCj4gPiA+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4g PiArLyoqDQo+ID4gPiArICBUaGlzIHJvdXRpbmUgc2VydmljZXMgYSB1c2VyIHJlcXVlc3QgdG8g ZGlzY292ZXIgdGhlIFNNUkFNDQo+ID4gPiArICBjYXBhYmlsaXRpZXMgb2YgdGhpcyBwbGF0Zm9y bS4gIFRoaXMgd2lsbCByZXBvcnQgdGhlIHBvc3NpYmxlDQo+ID4gPiArICByYW5nZXMgdGhhdCBh cmUgcG9zc2libGUgZm9yIFNNUkFNIGFjY2VzcywgYmFzZWQgdXBvbiB0aGUNCj4gPiA+ICsgIG1l bW9yeSBjb250cm9sbGVyIGNhcGFiaWxpdGllcy4NCj4gPiA+ICsNCj4gPiA+ICsgIEBwYXJhbVtp bl0gVGhpcyAgICAgICAgICAgICAgICAgIC0gUG9pbnRlciB0byB0aGUgU01SQU0gQWNjZXNzIElu dGVyZmFjZS4NCj4gPiA+ICsgIEBwYXJhbVtpbl0gU21yYW1NYXBTaXplICAgICAgICAgIC0gUG9p bnRlciB0byB0aGUgdmFyaWFibGUgY29udGFpbmluZyBzaXplDQo+ID4gb2YgdGhlDQo+ID4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciB0byBjb250YWluIHRo ZSBkZXNjcmlwdGlvbiBpbmZvcm1hdGlvbi4NCj4gPiA+ICsgIEBwYXJhbVtpbl0gU21yYW1NYXAg ICAgICAgICAgICAgIC0gQnVmZmVyIGNvbnRhaW5pbmcgdGhlIGRhdGEgZGVzY3JpYmluZyB0aGUN Cj4gPiBTbXJhbQ0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZWdpb24gZGVzY3JpcHRvcnMuDQo+ID4gPiArDQo+ID4gPiArICBAcmV0dmFsIEVGSV9CVUZGRVJf VE9PX1NNQUxMICAtIFRoZSB1c2VyIGRpZCBub3QgcHJvdmlkZSBhIHN1ZmZpY2llbnQNCj4gPiBi dWZmZXIuDQo+ID4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAtIFRoZSB1c2Vy IHByb3ZpZGVkIGEgc3VmZmljaWVudGx5LXNpemVkIGJ1ZmZlci4NCj4gPiA+ICsqKi8NCj4gPiA+ ICtFRklfU1RBVFVTDQo+ID4gPiArRUZJQVBJDQo+ID4gPiArR2V0Q2FwYWJpbGl0aWVzICgNCj4g PiA+ICsgIElOIENPTlNUIEVGSV9TTU1fQUNDRVNTMl9QUk9UT0NPTCAgKlRoaXMsDQo+ID4gPiAr ICBJTiBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICpTbXJhbU1hcFNpemUsDQo+ID4g PiArICBJTiBPVVQgRUZJX1NNUkFNX0RFU0NSSVBUT1IgICAgICAgICpTbXJhbU1hcA0KPiA+ID4g KyAgKQ0KPiA+ID4gK3sNCj4gPiA+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgIFN0YXR1czsN Cj4gPiA+ICsgIFNNTV9BQ0NFU1NfUFJJVkFURV9EQVRBICpTbW1BY2Nlc3M7DQo+ID4gPiArICBV SU5UTiAgICAgICAgICAgICAgICAgICBOZWNlc3NhcnlCdWZmZXJTaXplOw0KPiA+ID4gKw0KPiA+ ID4gKyAgU21tQWNjZXNzICAgICAgICAgICA9IFNNTV9BQ0NFU1NfUFJJVkFURV9EQVRBX0ZST01f VEhJUyAoVGhpcyk7DQo+ID4gPiArDQo+ID4gPiArICBOZWNlc3NhcnlCdWZmZXJTaXplID0gU21t QWNjZXNzLT5OdW1iZXJSZWdpb25zICogc2l6ZW9mDQo+ID4gPiArIChFRklfU01SQU1fREVTQ1JJ UFRPUik7DQo+ID4gPiArDQo+ID4gPiArICBpZiAoKlNtcmFtTWFwU2l6ZSA8IE5lY2Vzc2FyeUJ1 ZmZlclNpemUpIHsNCj4gPiA+ICsgICAgREVCVUcgKChERUJVR19XQVJOLCAiU01SQU0gTWFwIEJ1 ZmZlciB0b28gc21hbGxcbiIpKTsNCj4gPiA+ICsgICAgU3RhdHVzID0gRUZJX0JVRkZFUl9UT09f U01BTEw7DQo+ID4gPiArICB9IGVsc2Ugew0KPiA+ID4gKyAgICBDb3B5TWVtIChTbXJhbU1hcCwg U21tQWNjZXNzLT5TbXJhbURlc2MsDQo+ID4gTmVjZXNzYXJ5QnVmZmVyU2l6ZSk7DQo+ID4gPiAr ICAgIFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KPiA+ID4gKyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAg KlNtcmFtTWFwU2l6ZSA9IE5lY2Vzc2FyeUJ1ZmZlclNpemU7DQo+ID4gPiArDQo+ID4gPiArICBy ZXR1cm4gU3RhdHVzOw0KPiA+ID4gK30NCj4gPiA+IGRpZmYgLS1naXQNCj4gPiBhL1NpbGljb24v SW50ZWwvSW50ZWxTaWxpY29uUGtnL0ZlYXR1cmUvU21tQWNjZXNzL1NtbUFjY2Vzc0R4ZS9TbW1B Yw0KPiA+IGNlc3NEcml2ZXIuaA0KPiA+ID4NCj4gPiBiL1NpbGljb24vSW50ZWwvSW50ZWxTaWxp Y29uUGtnL0ZlYXR1cmUvU21tQWNjZXNzL1NtbUFjY2Vzc0R4ZS9TbW1BYw0KPiA+IGNlc3NEcml2 ZXIuaA0KPiA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiA+IGluZGV4IDAwMDAwMDAwMDAu LmMwZmYzYTI1MGINCj4gPiA+IC0tLSAvZGV2L251bGwNCj4gPiA+ICsrKw0KPiA+IGIvU2lsaWNv bi9JbnRlbC9JbnRlbFNpbGljb25Qa2cvRmVhdHVyZS9TbW1BY2Nlc3MvU21tQWNjZXNzRHhlL1Nt bUFjDQo+ID4gPiArKysgY2Vzc0RyaXZlci5oDQo+ID4gPiBAQCAtMCwwICsxLDE2MCBAQA0KPiA+ ID4gKy8qKiBAZmlsZQ0KPiA+ID4gKyAgSGVhZGVyIGZpbGUgZm9yIFNNTSBBY2Nlc3MgRHJpdmVy Lg0KPiA+ID4gKw0KPiA+ID4gKyAgQ29weXJpZ2h0IChjKSAyMDE5LCBJbnRlbCBDb3Jwb3JhdGlv bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ID4gPiArICBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ID4gKw0KPiA+ID4gKyoqLw0KPiA+ID4gKyNp Zm5kZWYgX1NNTV9BQ0NFU1NfRFJJVkVSX0hfDQo+ID4gPiArI2RlZmluZSBfU01NX0FDQ0VTU19E UklWRVJfSF8NCj4gPiA+ICsNCj4gPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9CYXNlTWVtb3J5TGli Lmg+DQo+ID4gPiArI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCj4gPiA+ICsjaW5jbHVk ZSA8TGlicmFyeS9Ib2JMaWIuaD4NCj4gPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9QY2lMaWIuaD4N Cj4gPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9NZW1vcnlBbGxvY2F0aW9uTGliLmg+ICNpbmNsdWRl DQo+ID4gPiArPExpYnJhcnkvVWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliLmg+DQo+ID4gPiArI2lu Y2x1ZGUgPFVlZmkvVWVmaUJhc2VUeXBlLmg+DQo+ID4gPiArDQo+ID4gPiArI2luY2x1ZGUgPEd1 aWQvU21yYW1NZW1vcnlSZXNlcnZlLmg+DQo+ID4gPiArI2luY2x1ZGUgPFByb3RvY29sL1NtbUFj Y2VzczIuaD4NCj4gPiA+ICsjaW5jbHVkZSA8SW5kdXN0cnlTdGFuZGFyZC9QY2kyMi5oPg0KPiA+ ID4gKw0KPiA+ID4gKyNkZWZpbmUgU01NX0FDQ0VTU19QUklWQVRFX0RBVEFfU0lHTkFUVVJFIFNJ R05BVFVSRV8zMiAoJzQnLA0KPiA+ICc1JywgJ3MnLA0KPiA+ID4gKydhJykNCj4gPiA+ICsNCj4g PiA+ICsvLy8NCj4gPiA+ICsvLy8gUHJpdmF0ZSBkYXRhDQo+ID4gPiArLy8vDQo+ID4gPiArdHlw ZWRlZiBzdHJ1Y3Qgew0KPiA+ID4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICBT aWduYXR1cmU7DQo+ID4gPiArICBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICAgIEhhbmRs ZTsNCj4gPiA+ICsgIEVGSV9TTU1fQUNDRVNTMl9QUk9UT0NPTCAgICAgICAgU21tQWNjZXNzOw0K PiA+ID4gKw0KPiA+ID4gKyAgLy8vDQo+ID4gPiArICAvLy8gTG9jYWwgRGF0YSBmb3IgU01NIEFj Y2VzcyBpbnRlcmZhY2UgZ29lcyBoZXJlDQo+ID4gPiArICAvLy8NCj4gPiA+ICsgIFVJTlROICAg ICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyUmVnaW9uczsNCj4gPiA+ICsgIEVGSV9TTVJB TV9ERVNDUklQVE9SICAgICAgICAgICAgKlNtcmFtRGVzYzsNCj4gPiA+ICt9IFNNTV9BQ0NFU1Nf UFJJVkFURV9EQVRBOw0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgU01NX0FDQ0VTU19QUklWQVRF X0RBVEFfRlJPTV9USElTKGEpIFwNCj4gPiA+ICsgIENSIChhLCBcDQo+ID4gPiArICAgICAgU01N X0FDQ0VTU19QUklWQVRFX0RBVEEsIFwNCj4gPiA+ICsgICAgICBTbW1BY2Nlc3MsIFwNCj4gPiA+ ICsgICAgICBTTU1fQUNDRVNTX1BSSVZBVEVfREFUQV9TSUdOQVRVUkUgXA0KPiA+ID4gKyAgICAg ICkNCj4gPiA+ICsNCj4gPiA+ICsvLw0KPiA+ID4gKy8vIFByb3RvdHlwZXMNCj4gPiA+ICsvLyBE cml2ZXIgbW9kZWwgcHJvdG9jb2wgaW50ZXJmYWNlDQo+ID4gPiArLy8NCj4gPiA+ICsvKioNCj4g PiA+ICsgIDxiPlNNTSBBY2Nlc3MgRHJpdmVyIEVudHJ5IFBvaW50PC9iPg0KPiA+ID4gKyAgVGhp cyBkcml2ZXIgaW5zdGFsbHMgYW4gU01NIEFjY2VzcyBQcm90b2NvbA0KPiA+ID4gKyAgLSA8Yj5J bnRyb2R1Y3Rpb248L2I+IFxuDQo+ID4gPiArICAgIFRoaXMgbW9kdWxlIHB1Ymxpc2hlcyB0aGUg U01NIGFjY2VzcyBwcm90b2NvbC4gIFRoZSBwcm90b2NvbCBpcyB1c2VkDQo+ID4gYnkgdGhlIFNN TSBCYXNlIGRyaXZlciB0byBhY2Nlc3MgdGhlIFNNUkFNIHJlZ2lvbg0KPiA+ID4gd2hlbiB0aGUg cHJvY2Vzc29yIGlzIG5vdCBpbiBTTU0uDQo+ID4gPiArICAgIFRoZSBTTU0gQmFzZSBkcml2ZXIg dXNlcyB0aGUgc2VydmljZXMgcHJvdmlkZWQgYnkgdGhlIFNNTSBhY2Nlc3MNCj4gPiBwcm90b2Nv bCB0byBvcGVuIFNNUkFNIGR1cmluZyBwb3N0IGFuZCBjb3B5IHRoZSBTTU0NCj4gPiA+IGhhbmRs ZXIuDQo+ID4gPiArICAgIFNNTSBhY2Nlc3MgcHJvdG9jb2wgaXMgYWxzbyB1c2VkIHRvIGNsb3Nl IHRoZSBTTVJBTSByZWdpb24gb25jZSB0aGUNCj4gPiBjb3B5aW5nIGlzIGRvbmUuDQo+ID4gPiAr ICAgIEZpbmFsbHksIHRoZSBTTU0gYWNjZXNzIHByb3RvY29sIHByb3ZpZGVzIHNlcnZpY2VzIHRv ICJMb2NrIiB0aGUNCj4gPiBTTVJBTSByZWdpb24uDQo+ID4gPiArICAgIFBsZWFzZSByZWZlciB0 aGUgU01NIFByb3RvY29scyBzZWN0aW9uIGluIHRoZSBhdHRhY2hlZCBTTU0gQ0lTDQo+ID4gU3Bl Y2lmaWNhdGlvbiB2ZXJzaW9uIDAuOSBmb3IgZnVydGhlciBkZXRhaWxzLg0KPiA+ID4gKyAgICBU aGlzIGRyaXZlciBpcyByZXF1aXJlZCBpZiBTTU0gaXMgc3VwcG9ydGVkLiBQcm9wZXIgY29uZmln dXJhdGlvbiBvZg0KPiA+IFNNTSByZWdpc3RlcnMgaXMgcmVjb21tZW5kZWQgZXZlbiBpZiBTTU0g aXMgbm90DQo+ID4gPiBzdXBwb3J0ZWQuDQo+ID4gPiArDQo+ID4gPiArICAtIEByZXN1bHQNCj4g PiA+ICsgICAgUHVibGlzaGVzIHRoZSBfRUZJX1NNTV9BQ0NFU1NfUFJPVE9DT0w6IERvY3VtZW50 ZWQgaW4gdGhlDQo+ID4gU3lzdGVtDQo+ID4gPiArIE1hbmFnZW1lbnQgTW9kZSBDb3JlIEludGVy ZmFjZSBTcGVjaWZpY2F0aW9uLCBhdmFpbGFibGUgYXQgdGhlIFVSTDoNCj4gPiA+ICsgaHR0cDov L3d3dy5pbnRlbC5jb20vdGVjaG5vbG9neS9mcmFtZXdvcmsvc3BlYy5odG0NCj4gPiA+ICsNCj4g PiA+ICsgIC0gPGI+UG9ydGluZyBSZWNvbW1lbmRhdGlvbnM8L2I+IFxuDQo+ID4gPiArICAgIE5v IG1vZGlmaWNhdGlvbiBvZiB0aGlzIG1vZHVsZSBpcyByZWNvbW1lbmRlZC4gIEFueSBtb2RpZmlj YXRpb24NCj4gPiBzaG91bGQgYmUgZG9uZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlDQo+ID4gPiBf RUZJX1NNTV9BQ0NFU1NfUFJPVE9DT0wgcHJvdG9jb2wgZGVmaW5pdGlvbi4NCj4gPiA+ICsNCj4g PiA+ICsgIEBwYXJhbVtpbl0gSW1hZ2VIYW5kbGUgICAgIC0gSGFuZGxlIGZvciB0aGUgaW1hZ2Ug b2YgdGhpcyBkcml2ZXINCj4gPiA+ICsgIEBwYXJhbVtpbl0gU3lzdGVtVGFibGUgICAgIC0gUG9p bnRlciB0byB0aGUgRUZJIFN5c3RlbSBUYWJsZQ0KPiA+ID4gKw0KPiA+ID4gKyAgQHJldHZhbCBF RklfU1VDQ0VTUyAgICAgLSBQcm90b2NvbCB3YXMgaW5zdGFsbGVkIHN1Y2Nlc3NmdWxseQ0KPiA+ ID4gKyAgQGV4Y2VwdGlvbiBFRklfVU5TVVBQT1JURUQgLSBQcm90b2NvbCB3YXMgbm90IGluc3Rh bGxlZCAqKi8NCj4gPiA+ICtFRklfU1RBVFVTIEVGSUFQSSBTbW1BY2Nlc3NEcml2ZXJFbnRyeVBv aW50ICgNCj4gPiA+ICsgIElOIEVGSV9IQU5ETEUgICAgICAgICBJbWFnZUhhbmRsZSwNCj4gPiA+ ICsgIElOIEVGSV9TWVNURU1fVEFCTEUgICAqU3lzdGVtVGFibGUNCj4gPiA+ICsgICk7DQo+ID4g PiArDQo+ID4gPiArLyoqDQo+ID4gPiArICBUaGlzIHJvdXRpbmUgYWNjZXB0cyBhIHJlcXVlc3Qg dG8gIm9wZW4iIGEgcmVnaW9uIG9mIFNNUkFNLiAgVGhlDQo+ID4gPiArICByZWdpb24gY291bGQg YmUgbGVnYWN5IEFCU0VHLCBIU0VHLCBvciBUU0VHIG5lYXIgdG9wIG9mIHBoeXNpY2FsDQo+ID4g bWVtb3J5Lg0KPiA+ID4gKyAgVGhlIHVzZSBvZiAib3BlbiIgbWVhbnMgdGhhdCB0aGUgbWVtb3J5 IGlzIHZpc2libGUgZnJvbSBhbGwNCj4gPiA+ICtib290LXNlcnZpY2UNCj4gPiA+ICsgIGFuZCBT TU0gYWdlbnRzLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHBhcmFtW2luXSBUaGlzICAgICAgICAgICAg ICAgICAgLSBQb2ludGVyIHRvIHRoZSBTTU0gQWNjZXNzIEludGVyZmFjZS4NCj4gPiA+ICsNCj4g PiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIC0gVGhlIHJlZ2lvbiB3YXMgc3Vj Y2Vzc2Z1bGx5IG9wZW5lZC4NCj4gPiA+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAg IC0gVGhlIHJlZ2lvbiBjb3VsZCBub3QgYmUgb3BlbmVkIGJlY2F1c2UNCj4gPiBsb2NrZWQgYnkN Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaXBzZXQuDQo+ID4gPiArICBAcmV0 dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAtIFRoZSBkZXNjcmlwdG9yIGluZGV4IHdhcyBvdXQg b2YNCj4gPiBib3VuZHMuDQo+ID4gPiArKiovDQo+ID4gPiArRUZJX1NUQVRVUw0KPiA+ID4gK0VG SUFQSQ0KPiA+ID4gK09wZW4gKA0KPiA+ID4gKyAgSU4gRUZJX1NNTV9BQ0NFU1MyX1BST1RPQ09M ICpUaGlzDQo+ID4gPiArICApOw0KPiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAgVGhpcyBy b3V0aW5lIGFjY2VwdHMgYSByZXF1ZXN0IHRvICJjbG9zZSIgYSByZWdpb24gb2YgU01SQU0uICBU aGUNCj4gPiA+ICsgIHJlZ2lvbiBjb3VsZCBiZSBsZWdhY3kgQUIgb3IgVFNFRyBuZWFyIHRvcCBv ZiBwaHlzaWNhbCBtZW1vcnkuDQo+ID4gPiArICBUaGUgdXNlIG9mICJjbG9zZSIgbWVhbnMgdGhh dCB0aGUgbWVtb3J5IGlzIG9ubHkgdmlzaWJsZSBmcm9tIFNNTQ0KPiA+ID4gK2FnZW50cywNCj4g PiA+ICsgIG5vdCBmcm9tIEJTIG9yIFJUIGNvZGUuDQo+ID4gPiArDQo+ID4gPiArICBAcGFyYW1b aW5dIFRoaXMgICAgICAgICAgICAgICAgICAtIFBvaW50ZXIgdG8gdGhlIFNNTSBBY2Nlc3MgSW50 ZXJmYWNlLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAg LSBUaGUgcmVnaW9uIHdhcyBzdWNjZXNzZnVsbHkgY2xvc2VkLg0KPiA+ID4gKyAgQHJldHZhbCBF RklfREVWSUNFX0VSUk9SICAgICAgLSBUaGUgcmVnaW9uIGNvdWxkIG5vdCBiZSBjbG9zZWQgYmVj YXVzZQ0KPiA+IGxvY2tlZCBieQ0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj aGlwc2V0Lg0KPiA+ID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgLSBUaGUgZGVz Y3JpcHRvciBpbmRleCB3YXMgb3V0IG9mDQo+ID4gYm91bmRzLg0KPiA+ID4gKyoqLw0KPiA+ID4g K0VGSV9TVEFUVVMNCj4gPiA+ICtFRklBUEkNCj4gPiA+ICtDbG9zZSAoDQo+ID4gPiArICBJTiBF RklfU01NX0FDQ0VTUzJfUFJPVE9DT0wgICpUaGlzDQo+ID4gPiArICApOw0KPiA+ID4gKw0KPiA+ ID4gKy8qKg0KPiA+ID4gKyAgVGhpcyByb3V0aW5lIGFjY2VwdHMgYSByZXF1ZXN0IHRvICJsb2Nr IiBTTVJBTS4gIFRoZQ0KPiA+ID4gKyAgcmVnaW9uIGNvdWxkIGJlIGxlZ2FjeSBBQiBvciBUU0VH IG5lYXIgdG9wIG9mIHBoeXNpY2FsIG1lbW9yeS4NCj4gPiA+ICsgIFRoZSB1c2Ugb2YgImxvY2si IG1lYW5zIHRoYXQgdGhlIG1lbW9yeSBjYW4gbm8gbG9uZ2VyIGJlIG9wZW5lZA0KPiA+ID4gKyAg dG8gQlMgc3RhdGUuLg0KPiA+ID4gKw0KPiA+ID4gKyAgQHBhcmFtW2luXSBUaGlzICAgICAgICAg ICAgICAgICAgLSBQb2ludGVyIHRvIHRoZSBTTU0gQWNjZXNzIEludGVyZmFjZS4NCj4gPiA+ICsN Cj4gPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIC0gVGhlIHJlZ2lvbiB3YXMg c3VjY2Vzc2Z1bGx5IGxvY2tlZC4NCj4gPiA+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAg ICAgIC0gVGhlIHJlZ2lvbiBjb3VsZCBub3QgYmUgbG9ja2VkIGJlY2F1c2UNCj4gPiBhdCBsZWFz dA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgb25lIHJhbmdlIGlzIHN0aWxsIG9w ZW4uDQo+ID4gPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAtIFRoZSBkZXNjcmlw dG9yIGluZGV4IHdhcyBvdXQgb2YNCj4gPiBib3VuZHMuDQo+ID4gPiArKiovDQo+ID4gPiArRUZJ X1NUQVRVUw0KPiA+ID4gK0VGSUFQSQ0KPiA+ID4gK0xvY2sgKA0KPiA+ID4gKyAgSU4gRUZJX1NN TV9BQ0NFU1MyX1BST1RPQ09MICpUaGlzDQo+ID4gPiArICApOw0KPiA+ID4gKw0KPiA+ID4gKy8q Kg0KPiA+ID4gKyAgVGhpcyByb3V0aW5lIHNlcnZpY2VzIGEgdXNlciByZXF1ZXN0IHRvIGRpc2Nv dmVyIHRoZSBTTVJBTQ0KPiA+ID4gKyAgY2FwYWJpbGl0aWVzIG9mIHRoaXMgcGxhdGZvcm0uICBU aGlzIHdpbGwgcmVwb3J0IHRoZSBwb3NzaWJsZQ0KPiA+ID4gKyAgcmFuZ2VzIHRoYXQgYXJlIHBv c3NpYmxlIGZvciBTTVJBTSBhY2Nlc3MsIGJhc2VkIHVwb24gdGhlDQo+ID4gPiArICBtZW1vcnkg Y29udHJvbGxlciBjYXBhYmlsaXRpZXMuDQo+ID4gPiArDQo+ID4gPiArICBAcGFyYW1baW5dIFRo aXMgICAgICAgICAgICAgICAgICAtIFBvaW50ZXIgdG8gdGhlIFNNUkFNIEFjY2VzcyBJbnRlcmZh Y2UuDQo+ID4gPiArICBAcGFyYW1baW5dIFNtcmFtTWFwU2l6ZSAgICAgICAgICAtIFBvaW50ZXIg dG8gdGhlIHZhcmlhYmxlIGNvbnRhaW5pbmcgc2l6ZQ0KPiA+IG9mIHRoZQ0KPiA+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgdG8gY29udGFpbiB0aGUgZGVzY3JpcHRpb24g aW5mb3JtYXRpb24uDQo+ID4gPiArICBAcGFyYW1baW5dIFNtcmFtTWFwICAgICAgICAgICAgICAt IEJ1ZmZlciBjb250YWluaW5nIHRoZSBkYXRhIGRlc2NyaWJpbmcgdGhlDQo+ID4gU21yYW0NCj4g PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaW9uIGRlc2NyaXB0b3JzLg0KPiA+ ID4gKw0KPiA+ID4gKyAgQHJldHZhbCBFRklfQlVGRkVSX1RPT19TTUFMTCAgLSBUaGUgdXNlciBk aWQgbm90IHByb3ZpZGUgYSBzdWZmaWNpZW50DQo+ID4gYnVmZmVyLg0KPiA+ID4gKyAgQHJldHZh bCBFRklfU1VDQ0VTUyAgICAgICAgICAgLSBUaGUgdXNlciBwcm92aWRlZCBhIHN1ZmZpY2llbnRs eS1zaXplZCBidWZmZXIuDQo+ID4gPiArKiovDQo+ID4gPiArRUZJX1NUQVRVUw0KPiA+ID4gK0VG SUFQSQ0KPiA+ID4gK0dldENhcGFiaWxpdGllcyAoDQo+ID4gPiArICBJTiBDT05TVCBFRklfU01N X0FDQ0VTUzJfUFJPVE9DT0wgICpUaGlzLA0KPiA+ID4gKyAgSU4gT1VUIFVJTlROICAgICAgICAg ICAgICAgICAgICpTbXJhbU1hcFNpemUsDQo+ID4gPiArICBJTiBPVVQgRUZJX1NNUkFNX0RFU0NS SVBUT1IgICAgKlNtcmFtTWFwDQo+ID4gPiArICApOw0KPiA+ID4gKyNlbmRpZg0KPiA+ID4gZGlm ZiAtLWdpdCBhL1NpbGljb24vSW50ZWwvSW50ZWxTaWxpY29uUGtnL0luY2x1ZGUvTGlicmFyeS9T bW1BY2Nlc3NMaWIuaA0KPiA+ID4gYi9TaWxpY29uL0ludGVsL0ludGVsU2lsaWNvblBrZy9JbmNs dWRlL0xpYnJhcnkvU21tQWNjZXNzTGliLmgNCj4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ ID4gPiBpbmRleCAwMDAwMDAwMDAwLi5iN2NiODhmNmNhDQo+ID4gPiAtLS0gL2Rldi9udWxsDQo+ ID4gPiArKysgYi9TaWxpY29uL0ludGVsL0ludGVsU2lsaWNvblBrZy9JbmNsdWRlL0xpYnJhcnkv U21tQWNjZXNzTGliLmgNCj4gPiA+IEBAIC0wLDAgKzEsMzIgQEANCj4gPiA+ICsvKiogQGZpbGUN Cj4gPiA+ICsgIEhlYWRlciBmaWxlIGZvciBTTU0gQWNjZXNzIERyaXZlci4NCj4gPiA+ICsNCj4g PiA+ICsgIENvcHlyaWdodCAoYykgMjAxOSwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMg cmVzZXJ2ZWQuPEJSPg0KPiA+ID4gKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNs YXVzZS1QYXRlbnQNCj4gPiA+ICsNCj4gPiA+ICsqKi8NCj4gPiA+ICsjaWZuZGVmIF9TTU1fQUND RVNTX0hfDQo+ID4gPiArI2RlZmluZSBfU01NX0FDQ0VTU19IXw0KPiA+ID4gKw0KPiA+ID4gKy8q Kg0KPiA+ID4gKyAgVGhpcyBmdW5jdGlvbiBpcyB0byBpbnN0YWxsIGFuIFNNTSBBY2Nlc3MgUFBJ DQo+ID4gPiArICAtIDxiPkludHJvZHVjdGlvbjwvYj4gXG4NCj4gPiA+ICsgICAgQSBtb2R1bGUg dG8gaW5zdGFsbCBhIFBQSSBmb3IgY29udHJvbGxpbmcgU01NIG1vZGUgbWVtb3J5IGFjY2Vzcw0K PiA+IGJhc2ljYWxseSBmb3IgUzMgcmVzdW1lIHVzYWdlLg0KPiA+ID4gKw0KPiA+ID4gKyAgLSBA cHJlDQo+ID4gPiArICAgIC0gX1BFSV9NQVNURVJfQk9PVF9NT0RFX1BFSU1fUFBJOiBBIFBQSSBw dWJsaXNoZWQgYnkNCj4gPiBmb3VuZGF0aW9uIHRvIGdldCBib290bW9kZSBleGVjdXRlZCBlYXJs aWVyLg0KPiA+ID4gKyAgICAtIF9QRUlfUEVSTUFORU5UX01FTU9SWV9JTlNUQUxMRURfUFBJOiBh IFBQSSB0aGF0IHdpbGwgYmUNCj4gPiBpbnN0YWxsZWQgYWZ0ZXIgbWVtb3J5IGNvbnRyb2xsZXIg aW5pdGlhbGl6YXRpb24gY29tcGxldGVkDQo+ID4gPiB0byBpbmRpY2F0ZSB0aGF0IHBoeXNpY2Fs IG1lbW9yeSBpcyB1c2FibGUgYWZ0ZXIgdGhpcyBwb2ludC4NCj4gPiA+ICsNCj4gPiA+ICsgIC0g QHJlc3VsdA0KPiA+ID4gKyAgICBQdWJsaXNoIF9QRUlfU01NX0FDQ0VTU19QUEkuDQo+ID4gPiAr DQo+ID4gPiArICAgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIC0gUHBpIHN1Y2Nlc3Nm dWxseSBzdGFydGVkIGFuZCBpbnN0YWxsZWQuDQo+ID4gPiArICAgIEByZXR2YWwgRUZJX05PVF9G T1VORCAgICAgICAgIC0gUHBpIGNhbid0IGJlIGZvdW5kLg0KPiA+ID4gKyAgICBAcmV0dmFsIEVG SV9PVVRfT0ZfUkVTT1VSQ0VTICAtIFBwaSBkb2VzIG5vdCBoYXZlIGVub3VnaA0KPiA+IHJlc291 cmNlcyB0byBpbml0aWFsaXplIHRoZSBkcml2ZXIuDQo+ID4gPiArKiovDQo+ID4gPiArRUZJX1NU QVRVUw0KPiA+ID4gK0VGSUFQSQ0KPiA+ID4gK1BlaUluc3RhbGxTbW1BY2Nlc3NQcGkgKA0KPiA+ ID4gKyAgVk9JRA0KPiA+ID4gKyAgKTsNCj4gPiA+ICsjZW5kaWYNCj4gPiA+IC0tDQo+ID4gPiAy LjE2LjIud2luZG93cy4xDQoNCg==