From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=104.47.0.77; helo=eur01-he1-obe.outbound.protection.outlook.com; envelope-from=vabhav.sharma@nxp.com; receiver=edk2-devel@lists.01.org Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on0077.outbound.protection.outlook.com [104.47.0.77]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id D047A2041B26A for ; Tue, 24 Apr 2018 05:17:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=pBQ5SUPptFkQ1sFBL2PPFkcBXJIXJh7rfTs+THNP0UI=; b=vDFIGb1uS1LmU18FuboGgA16Ek4qF3Y1LEqSoQkvfH9eOmYelZcjxYEj7bsxpiE5bluYZPXxBhVpqca9rbAnwwdgapGlSw9+mbUvit9IUVpEKY0b7Gq377zWBW3AqjkXvSSRGxAzRcLrsb/ZkLyAe1rxqETbII+GC4oBd2uihIM= Received: from DB4PR04MB299.eurprd04.prod.outlook.com (10.141.239.21) by DB4PR04MB265.eurprd04.prod.outlook.com (10.242.231.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.696.17; Tue, 24 Apr 2018 12:17:19 +0000 Received: from DB4PR04MB299.eurprd04.prod.outlook.com ([fe80::2dcd:1bc7:8d4e:5dc2]) by DB4PR04MB299.eurprd04.prod.outlook.com ([fe80::2dcd:1bc7:8d4e:5dc2%15]) with mapi id 15.20.0696.017; Tue, 24 Apr 2018 12:17:18 +0000 From: Vabhav Sharma To: Ard Biesheuvel , Meenakshi Aggarwal CC: Leif Lindholm , "Kinney, Michael D" , "edk2-devel@lists.01.org" , Udit Kumar , Varun Sethi Thread-Topic: [PATCH edk2-platforms 33/39] Silicon/NXP: Implement PciHostBridgeLib support Thread-Index: AQHTpwPVMw1oO3QvgUGa7cTkZqlwcaQJtteAgAaGg0A= Date: Tue, 24 Apr 2018 12:17:18 +0000 Message-ID: References: <1518771035-6733-1-git-send-email-meenakshi.aggarwal@nxp.com> <1518771035-6733-34-git-send-email-meenakshi.aggarwal@nxp.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=vabhav.sharma@nxp.com; x-originating-ip: [14.142.187.166] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; DB4PR04MB265; 7:l1AeWrQR+p1qBHb8eE21yM8pShK0U/A+9jeRRQY8j/ULfrArCl6DYbHWpkNno5lyXhc9nchk7FWob4HdD4f1nNq55Zzi5/5pGaRb8h7nv+wY3rbIRTvfYRqNDQ1wdoQFq3vWm+x4EGN6F6A8sJFSHass6utdgiobUKFMvNXsyig6EvuiWywhSI0JEP6PPQbltmZMk7bxZWJBo4Dx5oAedTl2GmVmjEg6U949flokWOivppFVYp6zpvhj7lyvWYC+ x-ms-exchange-antispam-srfa-diagnostics: SOS; x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(48565401081)(5600026)(4534165)(7168020)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:DB4PR04MB265; x-ms-traffictypediagnostic: DB4PR04MB265: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(189930954265078)(185117386973197)(162533806227266)(45079756050767)(228905959029699); x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(10201501046)(3002001)(3231232)(944501410)(52105095)(93006095)(93001095)(6055026)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123558120)(20161123560045)(20161123562045)(6072148)(201708071742011); SRVR:DB4PR04MB265; BCL:0; PCL:0; RULEID:; SRVR:DB4PR04MB265; x-forefront-prvs: 0652EA5565 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(396003)(39380400002)(346002)(366004)(39860400002)(376002)(199004)(13464003)(189003)(97736004)(76176011)(2900100001)(110136005)(33656002)(478600001)(5660300001)(45080400002)(54906003)(316002)(106356001)(7696005)(11346002)(99286004)(68736007)(102836004)(44832011)(105586002)(3280700002)(446003)(186003)(26005)(59450400001)(2906002)(3846002)(486006)(476003)(25786009)(6506007)(6246003)(3660700001)(229853002)(6636002)(81166006)(8676002)(6306002)(55236004)(9686003)(53936002)(14454004)(6116002)(5250100002)(55016002)(16799955002)(66066001)(305945005)(53946003)(74316002)(7736002)(86362001)(4326008)(8936002)(6436002)(575784001)(81156014)(559001)(579004)(19627235001); DIR:OUT; SFP:1101; SCL:1; SRVR:DB4PR04MB265; H:DB4PR04MB299.eurprd04.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: sQBlXt6iI+vXpgmZc2xfz4XKDgtjmsG+NQvwdLUom1RhaZxMqWgutnSQJw8LvKv3cAnt4mz6ERKGE/5mi4f+sWFMuPtZ8o9vVZRvNw8fbdrHKe20D6k0sOMNQwwWW63cS6qK2l5rkM1SN5cFp+KYx+JqoFWadR1+YTqXRLRm9JeTdxmeBbkHoNSBoE/iHj5Q spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: 24448bd8-cf58-4098-4a6b-08d5a9dd5305 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 24448bd8-cf58-4098-4a6b-08d5a9dd5305 X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Apr 2018 12:17:18.1015 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB4PR04MB265 Subject: Re: [PATCH edk2-platforms 33/39] Silicon/NXP: Implement PciHostBridgeLib support 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, 24 Apr 2018 12:17:30 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 DQoNCj4tLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPkZyb206IEFyZCBCaWVzaGV1dmVsIFtt YWlsdG86YXJkLmJpZXNoZXV2ZWxAbGluYXJvLm9yZ10NCj5TZW50OiBGcmlkYXksIEFwcmlsIDIw LCAyMDE4IDI6MDUgUE0NCj5UbzogTWVlbmFrc2hpIEFnZ2Fyd2FsIDxtZWVuYWtzaGkuYWdnYXJ3 YWxAbnhwLmNvbT4NCj5DYzogTGVpZiBMaW5kaG9sbSA8bGVpZi5saW5kaG9sbUBsaW5hcm8ub3Jn PjsgS2lubmV5LCBNaWNoYWVsIEQNCj48bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+OyBlZGsy LWRldmVsQGxpc3RzLjAxLm9yZzsgVWRpdCBLdW1hcg0KPjx1ZGl0Lmt1bWFyQG54cC5jb20+OyBW YXJ1biBTZXRoaSA8Vi5TZXRoaUBueHAuY29tPjsgVmFiaGF2IFNoYXJtYQ0KPjx2YWJoYXYuc2hh cm1hQG54cC5jb20+DQo+U3ViamVjdDogUmU6IFtQQVRDSCBlZGsyLXBsYXRmb3JtcyAzMy8zOV0g U2lsaWNvbi9OWFA6IEltcGxlbWVudA0KPlBjaUhvc3RCcmlkZ2VMaWIgc3VwcG9ydA0KPg0KPk9u IDE2IEZlYnJ1YXJ5IDIwMTggYXQgMDk6NTAsIE1lZW5ha3NoaSA8bWVlbmFrc2hpLmFnZ2Fyd2Fs QG54cC5jb20+DQo+d3JvdGU6DQo+PiBGcm9tOiBWYWJoYXYgPHZhYmhhdi5zaGFybWFAbnhwLmNv bT4NCj4+DQo+PiBJbXBsZW1lbnQgdGhlIGxpYnJhcnkgdGhhdCBleHBvc2VzIHRoZSBQQ0llIHJv b3QgY29tcGxleGVzIHRvIHRoZQ0KPj4gZ2VuZXJpYyBQQ0kgaG9zdCBicmlkZ2UgZHJpdmVyLFB1 dHRpbmcgU29DIFNwZWNpZmljIGxvdyBsZXZlbCBpbml0DQo+PiBjb2RlIGZvciB0aGUgUkNzLg0K Pj4NCj4+IENvbnRyaWJ1dGVkLXVuZGVyOiBUaWFub0NvcmUgQ29udHJpYnV0aW9uIEFncmVlbWVu dCAxLjENCj4+IFNpZ25lZC1vZmYtYnk6IFZhYmhhdiA8dmFiaGF2LnNoYXJtYUBueHAuY29tPg0K Pj4gU2lnbmVkLW9mZi1ieTogTWVlbmFrc2hpIEFnZ2Fyd2FsIDxtZWVuYWtzaGkuYWdnYXJ3YWxA bnhwLmNvbT4NCj4+IC0tLQ0KPj4gIC4uLi9MaWJyYXJ5L1BjaUhvc3RCcmlkZ2VMaWIvUGNpSG9z dEJyaWRnZUxpYi5jICAgIHwgNjE4DQo+KysrKysrKysrKysrKysrKysrKysrDQo+PiAgLi4uL0xp YnJhcnkvUGNpSG9zdEJyaWRnZUxpYi9QY2lIb3N0QnJpZGdlTGliLmluZiAgfCAgNTAgKysNCj4+ ICAyIGZpbGVzIGNoYW5nZWQsIDY2OCBpbnNlcnRpb25zKCspDQo+PiAgY3JlYXRlIG1vZGUgMTAw NjQ0DQo+PiBTaWxpY29uL05YUC9MaWJyYXJ5L1BjaUhvc3RCcmlkZ2VMaWIvUGNpSG9zdEJyaWRn ZUxpYi5jDQo+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+PiBTaWxpY29uL05YUC9MaWJyYXJ5L1Bj aUhvc3RCcmlkZ2VMaWIvUGNpSG9zdEJyaWRnZUxpYi5pbmYNCj4+DQo+PiBkaWZmIC0tZ2l0IGEv U2lsaWNvbi9OWFAvTGlicmFyeS9QY2lIb3N0QnJpZGdlTGliL1BjaUhvc3RCcmlkZ2VMaWIuYw0K Pj4gYi9TaWxpY29uL05YUC9MaWJyYXJ5L1BjaUhvc3RCcmlkZ2VMaWIvUGNpSG9zdEJyaWRnZUxp Yi5jDQo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPj4gaW5kZXggMDAwMDAwMC4uZTZmOWI3Yw0K Pj4gLS0tIC9kZXYvbnVsbA0KPj4gKysrIGIvU2lsaWNvbi9OWFAvTGlicmFyeS9QY2lIb3N0QnJp ZGdlTGliL1BjaUhvc3RCcmlkZ2VMaWIuYw0KPj4gQEAgLTAsMCArMSw2MTggQEANCj4+ICsvKiog QGZpbGUNCj4+ICsgIFBDSSBIb3N0IEJyaWRnZSBMaWJyYXJ5IGluc3RhbmNlIGZvciBOWFAgU29D cw0KPj4gKw0KPj4gKyAgQ29weXJpZ2h0IDIwMTggTlhQDQo+PiArDQo+PiArICBUaGlzIHByb2dy YW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBsaWNlbnNlZCBhbmQgbWFkZQ0K Pj4gKyBhdmFpbGFibGUgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNE IExpY2Vuc2Ugd2hpY2gNCj4+ICsgYWNjb21wYW5pZXMgdGhpcyAgZGlzdHJpYnV0aW9uLiAgVGhl IGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUNCj4+ICsgZm91bmQgYXQNCj5odHRwczov L2VtZWEwMS5zYWZlbGlua3MucHJvdGVjdGlvbi5vdXRsb29rLmNvbS8/dXJsPWh0dHAlM0ElMkYl MkZvcGVuc291DQo+cmNlLm9yZyUyRmxpY2Vuc2VzJTJGYnNkLQ0KPmxpY2Vuc2UucGhwJmRhdGE9 MDIlN0MwMSU3Q3ZhYmhhdi5zaGFybWElNDBueHAuY29tJTdDNDRkMGUxZGNkMTAxNA0KPmUzZGMx MzMwOGQ1YTY5OTkzNDIlN0M2ODZlYTFkM2JjMmI0YzZmYTkyY2Q5OWM1YzMwMTYzNSU3QzAlN0Mw JTdDDQo+NjM2NTk4MTAwOTA2MjM4MjM0JnNkYXRhPXNYJTJCUEFBS0hRTjQxb3FGOEJuWUxkSVZL WVlMZ0lNcVdCTnFQcw0KPjlEM05kRSUzRCZyZXNlcnZlZD0wLg0KPj4gKw0KPj4gKyAgVEhFIFBS T0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyIN Cj4+ICsgQkFTSVMsIFdJVEhPVVQgIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFO WSBLSU5ELCBFSVRIRVINCj5FWFBSRVNTIE9SIElNUExJRUQuDQo+PiArDQo+PiArKiovDQo+PiAr DQo+PiArI2luY2x1ZGUgPFBpRHhlLmg+DQo+PiArI2luY2x1ZGUgPEluZHVzdHJ5U3RhbmRhcmQv UGNpMjIuaD4NCj4+ICsjaW5jbHVkZSA8TGlicmFyeS9CZUlvTGliLmg+DQo+PiArI2luY2x1ZGUg PExpYnJhcnkvRGVidWdMaWIuaD4NCj4+ICsjaW5jbHVkZSA8TGlicmFyeS9EZXZpY2VQYXRoTGli Lmg+DQo+PiArI2luY2x1ZGUgPExpYnJhcnkvSW9MaWIuaD4NCj4+ICsjaW5jbHVkZSA8TGlicmFy eS9NZW1vcnlBbGxvY2F0aW9uTGliLmg+ICNpbmNsdWRlIDxMaWJyYXJ5L1BjZExpYi5oPg0KPj4g KyNpbmNsdWRlIDxMaWJyYXJ5L1BjaUhvc3RCcmlkZ2VMaWIuaD4gI2luY2x1ZGUgPFBjaWUuaD4g I2luY2x1ZGUNCj4+ICs8UHJvdG9jb2wvUGNpSG9zdEJyaWRnZVJlc291cmNlQWxsb2NhdGlvbi5o Pg0KPj4gKyNpbmNsdWRlIDxQcm90b2NvbC9QY2lSb290QnJpZGdlSW8uaD4NCj4+ICsNCj4+ICsj cHJhZ21hIHBhY2soMSkNCj4+ICt0eXBlZGVmIHN0cnVjdCB7DQo+PiArICBBQ1BJX0hJRF9ERVZJ Q0VfUEFUSCAgICAgQWNwaURldmljZVBhdGg7DQo+PiArICBFRklfREVWSUNFX1BBVEhfUFJPVE9D T0wgRW5kRGV2aWNlUGF0aDsgfQ0KPj4gK0VGSV9QQ0lfUk9PVF9CUklER0VfREVWSUNFX1BBVEg7 ICNwcmFnbWEgcGFjayAoKQ0KPj4gKw0KPj4gK1NUQVRJQyBDT05TVCBFRklfUENJX1JPT1RfQlJJ REdFX0RFVklDRV9QQVRIDQo+PiArbUVmaVBjaVJvb3RCcmlkZ2VEZXZpY2VQYXRoW10gPSB7DQo+ PiArICB7DQo+PiArICAgIHsNCj4+ICsgICAgICB7DQo+PiArICAgICAgICBBQ1BJX0RFVklDRV9Q QVRILA0KPj4gKyAgICAgICAgQUNQSV9EUCwNCj4+ICsgICAgICAgIHsNCj4+ICsgICAgICAgICAg KFVJTlQ4KShzaXplb2YgKEFDUElfSElEX0RFVklDRV9QQVRIKSksDQo+PiArICAgICAgICAgIChV SU5UOCkoc2l6ZW9mIChBQ1BJX0hJRF9ERVZJQ0VfUEFUSCkgPj4gOCkNCj4+ICsgICAgICAgIH0N Cj4+ICsgICAgICB9LA0KPj4gKyAgICAgIEVJU0FfUE5QX0lEICgweDBBMDgpLCAvLyBQQ0kgRXhw cmVzcw0KPj4gKyAgICAgIFBDSV9TRUcwX05VTQ0KPj4gKyAgICB9LA0KPj4gKw0KPj4gKyAgICB7 DQo+PiArICAgICAgRU5EX0RFVklDRV9QQVRIX1RZUEUsDQo+PiArICAgICAgRU5EX0VOVElSRV9E RVZJQ0VfUEFUSF9TVUJUWVBFLA0KPj4gKyAgICAgIHsNCj4+ICsgICAgICAgIEVORF9ERVZJQ0Vf UEFUSF9MRU5HVEgsDQo+PiArICAgICAgICAwDQo+PiArICAgICAgfQ0KPj4gKyAgICB9DQo+PiAr ICB9LA0KPj4gKyAgew0KPj4gKyAgICB7DQo+PiArICAgICAgew0KPj4gKyAgICAgICAgQUNQSV9E RVZJQ0VfUEFUSCwNCj4+ICsgICAgICAgIEFDUElfRFAsDQo+PiArICAgICAgICB7DQo+PiArICAg ICAgICAgIChVSU5UOCkoc2l6ZW9mIChBQ1BJX0hJRF9ERVZJQ0VfUEFUSCkpLA0KPj4gKyAgICAg ICAgICAoVUlOVDgpKHNpemVvZiAoQUNQSV9ISURfREVWSUNFX1BBVEgpID4+IDgpDQo+PiArICAg ICAgICB9DQo+PiArICAgICAgfSwNCj4+ICsgICAgICBFSVNBX1BOUF9JRCAoMHgwQTA4KSwgLy8g UENJIEV4cHJlc3MNCj4+ICsgICAgICBQQ0lfU0VHMV9OVU0NCj4+ICsgICAgfSwNCj4+ICsNCj4+ ICsgICAgew0KPj4gKyAgICAgIEVORF9ERVZJQ0VfUEFUSF9UWVBFLA0KPj4gKyAgICAgIEVORF9F TlRJUkVfREVWSUNFX1BBVEhfU1VCVFlQRSwNCj4+ICsgICAgICB7DQo+PiArICAgICAgICBFTkRf REVWSUNFX1BBVEhfTEVOR1RILA0KPj4gKyAgICAgICAgMA0KPj4gKyAgICAgIH0NCj4+ICsgICAg fQ0KPj4gKyAgfSwNCj4+ICsgIHsNCj4+ICsgICAgew0KPj4gKyAgICAgIHsNCj4+ICsgICAgICAg IEFDUElfREVWSUNFX1BBVEgsDQo+PiArICAgICAgICBBQ1BJX0RQLA0KPj4gKyAgICAgICAgew0K Pj4gKyAgICAgICAgICAoVUlOVDgpKHNpemVvZiAoQUNQSV9ISURfREVWSUNFX1BBVEgpKSwNCj4+ ICsgICAgICAgICAgKFVJTlQ4KShzaXplb2YgKEFDUElfSElEX0RFVklDRV9QQVRIKSA+PiA4KQ0K Pj4gKyAgICAgICAgfQ0KPj4gKyAgICAgIH0sDQo+PiArICAgICAgRUlTQV9QTlBfSUQgKDB4MEEw OCksIC8vIFBDSSBFeHByZXNzDQo+PiArICAgICAgUENJX1NFRzJfTlVNDQo+PiArICAgIH0sDQo+ PiArDQo+PiArICAgIHsNCj4+ICsgICAgICBFTkRfREVWSUNFX1BBVEhfVFlQRSwNCj4+ICsgICAg ICBFTkRfRU5USVJFX0RFVklDRV9QQVRIX1NVQlRZUEUsDQo+PiArICAgICAgew0KPj4gKyAgICAg ICAgRU5EX0RFVklDRV9QQVRIX0xFTkdUSCwNCj4+ICsgICAgICAgIDANCj4+ICsgICAgICB9DQo+ PiArICAgIH0NCj4+ICsgIH0sDQo+PiArICB7DQo+PiArICAgIHsNCj4+ICsgICAgICB7DQo+PiAr ICAgICAgICBBQ1BJX0RFVklDRV9QQVRILA0KPj4gKyAgICAgICAgQUNQSV9EUCwNCj4+ICsgICAg ICAgIHsNCj4+ICsgICAgICAgICAgKFVJTlQ4KShzaXplb2YgKEFDUElfSElEX0RFVklDRV9QQVRI KSksDQo+PiArICAgICAgICAgIChVSU5UOCkoc2l6ZW9mIChBQ1BJX0hJRF9ERVZJQ0VfUEFUSCkg Pj4gOCkNCj4+ICsgICAgICAgIH0NCj4+ICsgICAgICB9LA0KPj4gKyAgICAgIEVJU0FfUE5QX0lE ICgweDBBMDgpLCAvLyBQQ0kgRXhwcmVzcw0KPj4gKyAgICAgIFBDSV9TRUczX05VTQ0KPj4gKyAg ICB9LA0KPj4gKw0KPj4gKyAgICB7DQo+PiArICAgICAgRU5EX0RFVklDRV9QQVRIX1RZUEUsDQo+ PiArICAgICAgRU5EX0VOVElSRV9ERVZJQ0VfUEFUSF9TVUJUWVBFLA0KPj4gKyAgICAgIHsNCj4+ ICsgICAgICAgIEVORF9ERVZJQ0VfUEFUSF9MRU5HVEgsDQo+PiArICAgICAgICAwDQo+PiArICAg ICAgfQ0KPj4gKyAgICB9DQo+PiArICB9DQo+PiArfTsNCj4+ICsNCj4+ICtTVEFUSUMNCj4+ICtH TE9CQUxfUkVNT1ZFX0lGX1VOUkVGRVJFTkNFRA0KPj4gK0NIQVIxNiAqbVBjaUhvc3RCcmlkZ2VM aWJBY3BpQWRkcmVzc1NwYWNlVHlwZVN0cltdID0gew0KPj4gKyAgTCJNZW0iLCBMIkkvTyIsIEwi QnVzIg0KPj4gK307DQo+PiArDQo+PiArI2RlZmluZSBQQ0lfQUxMT0NBVElPTl9BVFRSSUJVVEVT DQo+RUZJX1BDSV9IT1NUX0JSSURHRV9DT01CSU5FX01FTV9QTUVNIHwgXA0KPj4gKw0KPj4gK0VG SV9QQ0lfSE9TVF9CUklER0VfTUVNNjRfREVDT0RFDQo+PiArDQo+PiArI2RlZmluZSBQQ0lfU1VQ UE9SVF9BVFRSSUJVVEVTICAgICAgICAgIEVGSV9QQ0lfQVRUUklCVVRFX0lTQV9JT18xNiB8IFwN Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUZJX1BDSV9BVFRS SUJVVEVfSVNBX01PVEhFUkJPQVJEX0lPIHwgXA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBFRklfUENJX0FUVFJJQlVURV9WR0FfTUVNT1JZIHwgXA0KPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFRklfUENJX0FUVFJJQlVURV9W R0FfSU9fMTYgIHwgXA0KPj4gKw0KPj4gK0VGSV9QQ0lfQVRUUklCVVRFX1ZHQV9QQUxFVFRFX0lP XzE2DQo+PiArDQo+PiArUENJX1JPT1RfQlJJREdFIG1QY2lSb290QnJpZGdlc1tdID0gew0KPj4g KyAgew0KPj4gKyAgICBQQ0lfU0VHMF9OVU0sICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g U2VnbWVudA0KPj4gKyAgICBQQ0lfU1VQUE9SVF9BVFRSSUJVVEVTLCAgICAgICAgICAgICAgICAg Ly8gU3VwcG9ydHMNCj4+ICsgICAgUENJX1NVUFBPUlRfQVRUUklCVVRFUywgICAgICAgICAgICAg ICAgIC8vIEF0dHJpYnV0ZXMNCj4+ICsgICAgRkFMU0UsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8vIERtYUFib3ZlNEcNCj4NCj5XaHkgaXMgdGhpcyBkaXNhYmxlZD8gVGhlIHJv b3QgYnJpZGdlIGRyaXZlciB3aWxsIGhhdmUgdG8gZG8gYm91bmNlIGJ1ZmZlcmluZw0KPndoZW4g cGVyZm9ybWluZyBETUEgb24gbWVtb3J5ID4gNCBHQi4NCk9rLg0KPg0KPj4gKyAgICBGQUxTRSwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm9FeHRlbmRlZENvbmZpZ1NwYWNl DQo+PiArICAgIEZBTFNFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXNv dXJjZUFzc2lnbmVkDQo+PiArICAgIFBDSV9BTExPQ0FUSU9OX0FUVFJJQlVURVMsICAgICAgICAg ICAgICAvLyBBbGxvY2F0aW9uQXR0cmlidXRlcw0KPj4gKyAgICB7IFBDSV9TRUcwX0JVU05VTV9N SU4sDQo+PiArICAgICAgUENJX1NFRzBfQlVTTlVNX01BWCB9LCAgICAgICAgICAgICAgICAvLyBC dXMNCj4+ICsgICAgeyBQQ0lfU0VHMF9QT1JUSU9fTUlOLA0KPj4gKyAgICAgIFBDSV9TRUcwX1BP UlRJT19NQVggfSwgICAgICAgICAgICAgICAgLy8gSW8NCj4+ICsgICAgeyBQQ0lfU0VHMF9NTUlP MzJfTUlOLA0KPj4gKyAgICAgIFBDSV9TRUcwX01NSU8zMl9NQVggfSwgICAgICAgICAgICAgICAg Ly8gTWVtDQo+PiArICAgIHsgUENJX1NFRzBfTU1JTzY0X01JTiwNCj4+ICsgICAgICBQQ0lfU0VH MF9NTUlPNjRfTUFYIH0sICAgICAgICAgICAgICAgIC8vIE1lbUFib3ZlNEcNCj4+ICsgICAgeyBN QVhfVUlOVDY0LCAweDAgfSwgICAgICAgICAgICAgICAgICAgIC8vIFBNZW0NCj4+ICsgICAgeyBN QVhfVUlOVDY0LCAweDAgfSwgICAgICAgICAgICAgICAgICAgIC8vIFBNZW1BYm92ZTRHDQo+PiAr ICAgIChFRklfREVWSUNFX1BBVEhfUFJPVE9DT0wNCj4+ICsqKSZtRWZpUGNpUm9vdEJyaWRnZURl dmljZVBhdGhbUENJX1NFRzBfTlVNXQ0KPj4gKyAgfSwgew0KPj4gKyAgICBQQ0lfU0VHMV9OVU0s ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2VnbWVudA0KPj4gKyAgICBQQ0lfU1VQUE9S VF9BVFRSSUJVVEVTLCAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydHMNCj4+ICsgICAgUENJX1NV UFBPUlRfQVRUUklCVVRFUywgICAgICAgICAgICAgICAgIC8vIEF0dHJpYnV0ZXMNCj4+ICsgICAg RkFMU0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERtYUFib3ZlNEcNCj4+ ICsgICAgRkFMU0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vRXh0ZW5k ZWRDb25maWdTcGFjZQ0KPj4gKyAgICBGQUxTRSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLy8gUmVzb3VyY2VBc3NpZ25lZA0KPj4gKyAgICBQQ0lfQUxMT0NBVElPTl9BVFRSSUJV VEVTLCAgICAgICAgICAgICAgLy8gQWxsb2NhdGlvbkF0dHJpYnV0ZXMNCj4+ICsgICAgeyBQQ0lf U0VHMV9CVVNOVU1fTUlOLA0KPj4gKyAgICAgIFBDSV9TRUcxX0JVU05VTV9NQVggfSwgICAgICAg ICAgICAgICAgLy8gQnVzDQo+PiArICAgIHsgUENJX1NFRzFfUE9SVElPX01JTiwNCj4+ICsgICAg ICBQQ0lfU0VHMV9QT1JUSU9fTUFYIH0sICAgICAgICAgICAgICAgIC8vIElvDQo+PiArICAgIHsg UENJX1NFRzFfTU1JTzMyX01JTiwNCj4+ICsgICAgICBQQ0lfU0VHMV9NTUlPMzJfTUFYIH0sICAg ICAgICAgICAgICAgIC8vIE1lbQ0KPj4gKyAgICB7IFBDSV9TRUcxX01NSU82NF9NSU4sDQo+PiAr ICAgICAgUENJX1NFRzFfTU1JTzY0X01BWCB9LCAgICAgICAgICAgICAgICAvLyBNZW1BYm92ZTRH DQo+PiArICAgIHsgTUFYX1VJTlQ2NCwgMHgwIH0sICAgICAgICAgICAgICAgICAgICAvLyBQTWVt DQo+PiArICAgIHsgTUFYX1VJTlQ2NCwgMHgwIH0sICAgICAgICAgICAgICAgICAgICAvLyBQTWVt QWJvdmU0Rw0KPj4gKyAgICAoRUZJX0RFVklDRV9QQVRIX1BST1RPQ09MDQo+PiArKikmbUVmaVBj aVJvb3RCcmlkZ2VEZXZpY2VQYXRoW1BDSV9TRUcxX05VTV0NCj4+ICsgIH0sIHsNCj4+ICsgICAg UENJX1NFRzJfTlVNLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlZ21lbnQNCj4+ICsg ICAgUENJX1NVUFBPUlRfQVRUUklCVVRFUywgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnRzDQo+ PiArICAgIFBDSV9TVVBQT1JUX0FUVFJJQlVURVMsICAgICAgICAgICAgICAgICAvLyBBdHRyaWJ1 dGVzDQo+PiArICAgIEZBTFNFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBE bWFBYm92ZTRHDQo+PiArICAgIEZBTFNFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvLyBOb0V4dGVuZGVkQ29uZmlnU3BhY2UNCj4+ICsgICAgRkFMU0UsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8vIFJlc291cmNlQXNzaWduZWQNCj4+ICsgICAgUENJX0FMTE9D QVRJT05fQVRUUklCVVRFUywgICAgICAgICAgICAgIC8vIEFsbG9jYXRpb25BdHRyaWJ1dGVzDQo+ PiArICAgIHsgUENJX1NFRzJfQlVTTlVNX01JTiwNCj4+ICsgICAgICBQQ0lfU0VHMl9CVVNOVU1f TUFYIH0sICAgICAgICAgICAgICAgIC8vIEJ1cw0KPj4gKyAgICB7IFBDSV9TRUcyX1BPUlRJT19N SU4sDQo+PiArICAgICAgUENJX1NFRzJfUE9SVElPX01BWCB9LCAgICAgICAgICAgICAgICAvLyBJ bw0KPj4gKyAgICB7IFBDSV9TRUcyX01NSU8zMl9NSU4sDQo+PiArICAgICAgUENJX1NFRzJfTU1J TzMyX01BWCB9LCAgICAgICAgICAgICAgICAvLyBNZW0NCj4+ICsgICAgeyBQQ0lfU0VHMl9NTUlP NjRfTUlOLA0KPj4gKyAgICAgIFBDSV9TRUcyX01NSU82NF9NQVggfSwgICAgICAgICAgICAgICAg Ly8gTWVtQWJvdmU0Rw0KPj4gKyAgICB7IE1BWF9VSU5UNjQsIDB4MCB9LCAgICAgICAgICAgICAg ICAgICAgLy8gUE1lbQ0KPj4gKyAgICB7IE1BWF9VSU5UNjQsIDB4MCB9LCAgICAgICAgICAgICAg ICAgICAgLy8gUE1lbUFib3ZlNEcNCj4+ICsgICAgKEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTA0K Pj4gKyopJm1FZmlQY2lSb290QnJpZGdlRGV2aWNlUGF0aFtQQ0lfU0VHMl9OVU1dDQo+PiArICB9 LCB7DQo+PiArICAgIFBDSV9TRUczX05VTSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBT ZWdtZW50DQo+PiArICAgIFBDSV9TVVBQT1JUX0FUVFJJQlVURVMsICAgICAgICAgICAgICAgICAv LyBTdXBwb3J0cw0KPj4gKyAgICBQQ0lfU1VQUE9SVF9BVFRSSUJVVEVTLCAgICAgICAgICAgICAg ICAgLy8gQXR0cmlidXRlcw0KPj4gKyAgICBGQUxTRSwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLy8gRG1hQWJvdmU0Rw0KPj4gKyAgICBGQUxTRSwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLy8gTm9FeHRlbmRlZENvbmZpZ1NwYWNlDQo+PiArICAgIEZBTFNFLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXNvdXJjZUFzc2lnbmVkDQo+PiAr ICAgIFBDSV9BTExPQ0FUSU9OX0FUVFJJQlVURVMsICAgICAgICAgICAgICAvLyBBbGxvY2F0aW9u QXR0cmlidXRlcw0KPj4gKyAgICB7IFBDSV9TRUczX0JVU05VTV9NSU4sDQo+PiArICAgICAgUENJ X1NFRzNfQlVTTlVNX01BWCB9LCAgICAgICAgICAgICAgICAvLyBCdXMNCj4+ICsgICAgeyBQQ0lf U0VHM19QT1JUSU9fTUlOLA0KPj4gKyAgICAgIFBDSV9TRUczX1BPUlRJT19NQVggfSwgICAgICAg ICAgICAgICAgLy8gSW8NCj4+ICsgICAgeyBQQ0lfU0VHM19NTUlPMzJfTUlOLA0KPj4gKyAgICAg IFBDSV9TRUczX01NSU8zMl9NQVggfSwgICAgICAgICAgICAgICAgLy8gTWVtDQo+PiArICAgIHsg UENJX1NFRzNfTU1JTzY0X01JTiwNCj4+ICsgICAgICBQQ0lfU0VHM19NTUlPNjRfTUFYIH0sICAg ICAgICAgICAgICAgIC8vIE1lbUFib3ZlNEcNCj4+ICsgICAgeyBNQVhfVUlOVDY0LCAweDAgfSwg ICAgICAgICAgICAgICAgICAgIC8vIFBNZW0NCj4+ICsgICAgeyBNQVhfVUlOVDY0LCAweDAgfSwg ICAgICAgICAgICAgICAgICAgIC8vIFBNZW1BYm92ZTRHDQo+PiArICAgIChFRklfREVWSUNFX1BB VEhfUFJPVE9DT0wNCj4+ICsqKSZtRWZpUGNpUm9vdEJyaWRnZURldmljZVBhdGhbUENJX1NFRzNf TlVNXQ0KPj4gKyAgfQ0KPj4gK307DQo+PiArDQo+PiArLyoqDQo+PiArICBGdW5jdGlvbiB0byBz ZXQtdXAgaUFUVSBvdXRib3VuZCB3aW5kb3cgZm9yIFBDSWUgY29udHJvbGxlcg0KPj4gKw0KPj4g KyAgQHBhcmFtIERiaSAgICAgQWRkcmVzcyBvZiBQQ0llIGhvc3QgY29udHJvbGxlci4NCj4+ICsg IEBwYXJhbSBJZHggICAgIEluZGV4IG9mIGlBVFUgb3V0Ym91bmQgd2luZG93Lg0KPj4gKyAgQHBh cmFtIFR5cGUgICAgVHlwZShDZmcwL0NmZzEvTWVtL0lPKSBvZiBpQVRVIG91dGJvdW5kIHdpbmRv dy4NCj4+ICsgIEBwYXJhbSBQaHlzICAgIFBDSWUgY29udHJvbGxlciBwaHkgYWRkcmVzcyBmb3Ig b3V0Ym91bmQgd2luZG93Lg0KPj4gKyAgQHBhcmFtIEJ1c0FkciAgUENJZSBjb250cm9sbGVyIGJ1 cyBhZGRyZXNzIGZvciBvdXRib3VuZCB3aW5kb3cuDQo+PiArICBAcGFyYW0gUGNpZSAgICBTaXpl IG9mIFBDSWUgY29udHJvbGxlciBzcGFjZShDZmcwL0NmZzEvTWVtL0lPKS4NCj4+ICsNCj4+ICsq Ki8NCj4+ICtTVEFUSUMNCj4+ICtWT0lEDQo+PiArUGNpZUlhdHVPdXRib3VuZFNldCAoDQo+PiAr ICBJTiBFRklfUEhZU0lDQUxfQUREUkVTUyBEYmksDQo+PiArICBJTiBVSU5UMzIgSWR4LA0KPj4g KyAgSU4gVUlOVDMyIFR5cGUsDQo+PiArICBJTiBVSU5UNjQgUGh5cywNCj4+ICsgIElOIFVJTlQ2 NCBCdXNBZGRyLA0KPj4gKyAgSU4gVUlOVDY0IFNpemUNCj4+ICsgICkNCj4+ICt7DQo+PiArICBN bWlvV3JpdGUzMiAoRGJpICsgSUFUVV9WSUVXUE9SVF9PRkYsDQo+PiArICAgICAgICAgICAgICAo VUlOVDMyKShJQVRVX1ZJRVdQT1JUX09VVEJPVU5EIHwgSWR4KSk7DQo+PiArICBNbWlvV3JpdGUz MiAoRGJpICsgSUFUVV9MV1JfQkFTRV9BRERSX09GRl9PVVRCT1VORF8wLA0KPj4gKyAgICAgICAg ICAgICAgKFVJTlQzMilQaHlzKTsNCj4+ICsgIE1taW9Xcml0ZTMyIChEYmkgKyBJQVRVX1VQUEVS X0JBU0VfQUREUl9PRkZfT1VUQk9VTkRfMCwNCj4+ICsgICAgICAgICAgICAgIChVSU5UMzIpKFBo eXMgPj4gMzIpKTsNCj4+ICsgIE1taW9Xcml0ZTMyIChEYmkgKyBJQVRVX0xJTUlUX0FERFJfT0ZG X09VVEJPVU5EXzAsDQo+PiArICAgICAgICAgICAgICAoVUlOVDMyKShQaHlzICsgU2l6ZSAtIEJJ VDApKTsNCj4+ICsgIE1taW9Xcml0ZTMyIChEYmkgKyBJQVRVX0xXUl9UQVJHRVRfQUREUl9PRkZf T1VUQk9VTkRfMCwNCj4+ICsgICAgICAgICAgICAgIChVSU5UMzIpQnVzQWRkcik7DQo+PiArICBN bWlvV3JpdGUzMiAoRGJpICsgSUFUVV9VUFBFUl9UQVJHRVRfQUREUl9PRkZfT1VUQk9VTkRfMCwN Cj4+ICsgICAgICAgICAgICAgIChVSU5UMzIpKEJ1c0FkZHIgPj4gMzIpKTsNCj4+ICsgIE1taW9X cml0ZTMyIChEYmkgKyBJQVRVX1JFR0lPTl9DVFJMXzFfT0ZGX09VVEJPVU5EXzAsDQo+PiArICAg ICAgICAgICAgICAoVUlOVDMyKVR5cGUpOw0KPj4gKyAgTW1pb1dyaXRlMzIgKERiaSArIElBVFVf UkVHSU9OX0NUUkxfMl9PRkZfT1VUQk9VTkRfMCwNCj4+ICsgICAgICAgICAgICAgIElBVFVfUkVH SU9OX0NUUkxfMl9PRkZfT1VUQk9VTkRfMF9SRUdJT05fRU4pOw0KPj4gK30NCj4+ICsNCj4+ICsv KioNCj4+ICsgICBGdW5jdGlvbiB0byBjaGVjayBQQ0llIGNvbnRyb2xsZXIgTFRTU00gc3RhdGUN Cj4+ICsNCj4+ICsgICBAcGFyYW0gUGNpZSBBZGRyZXNzIG9mIFBDSWUgaG9zdCBjb250cm9sbGVy Lg0KPj4gKw0KPj4gKyoqLw0KPj4gK1NUQVRJQw0KPj4gK0lOVE4NCj4+ICtQY2llTGlua1N0YXRl ICgNCj4+ICsgIElOIEVGSV9QSFlTSUNBTF9BRERSRVNTIFBjaWUNCj4+ICsgICkNCj4+ICt7DQo+ PiArICBVSU5UMzIgU3RhdGU7DQo+PiArDQo+PiArICAvLw0KPj4gKyAgLy8gUmVhZGluZyBQQ0ll IGNvbnRyb2xsZXIgTFRTU00gc3RhdGUgIC8vICBpZiAoRmVhdHVyZVBjZEdldA0KPj4gKyAoUGNk UGNpTHV0QmlnRW5kaWFuKSkgew0KPj4gKyAgICBTdGF0ZSA9IEJlTW1pb1JlYWQzMiAoKFVJTlRO KVBjaWUgKyBQQ0lfTFVUX0JBU0UgKyBQQ0lfTFVUX0RCRykgJg0KPj4gKyAgICAgICAgICAgIExU U1NNX1NUQVRFX01BU0s7DQo+PiArICB9IGVsc2Ugew0KPj4gKyAgIFN0YXRlID0gTW1pb1JlYWQz MiAoKFVJTlROKVBjaWUgKyBQQ0lfTFVUX0JBU0UgKyBQQ0lfTFVUX0RCRykgJg0KPj4gKyAgICAg ICAgICAgTFRTU01fU1RBVEVfTUFTSzsNCj4+ICsgIH0NCj4+ICsNCj4+ICsgIGlmIChTdGF0ZSA8 IExUU1NNX1BDSUVfTDApIHsNCj4+ICsgICAgREVCVUcgKChERUJVR19JTkZPLCIgUGNpZSBMaW5r IGVycm9yLiBMVFNTTT0weCUyeFxuIiwgU3RhdGUpKTsNCj4+ICsgICAgcmV0dXJuIEVGSV9TVUND RVNTOw0KPj4gKyAgfQ0KPj4gKw0KPj4gKyAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4+ICt9 DQo+PiArDQo+PiArLyoqDQo+PiArICAgSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIFBDSWUgbGlu ayBzdGF0ZQ0KPj4gKw0KPj4gKyAgIEBwYXJhbSBQY2llIEFkZHJlc3Mgb2YgUENJZSBob3N0IGNv bnRyb2xsZXIuDQo+PiArDQo+PiArKiovDQo+PiArU1RBVElDDQo+PiArSU5UTg0KPj4gK1BjaWVM aW5rVXAgKA0KPj4gKyAgSU4gRUZJX1BIWVNJQ0FMX0FERFJFU1MgUGNpZQ0KPj4gKyAgKQ0KPj4g K3sNCj4+ICsgIElOVE4gU3RhdGU7DQo+PiArICBVSU5UMzIgQ2FwOw0KPj4gKw0KPj4gKyAgU3Rh dGUgPSBQY2llTGlua1N0YXRlIChQY2llKTsNCj4+ICsgIGlmIChTdGF0ZSkgew0KPj4gKyAgICBy ZXR1cm4gU3RhdGU7DQo+PiArICB9DQo+PiArDQo+PiArICAvLw0KPj4gKyAgLy8gVHJ5IHRvIGRv d25sb2FkIHNwZWVkIHRvIGdlbjENCj4+ICsgIC8vDQo+PiArICBDYXAgPSBNbWlvUmVhZDMyICgo VUlOVE4pUGNpZSArIFBDSV9MSU5LX0NBUCk7DQo+PiArICBNbWlvV3JpdGUzMiAoKFVJTlROKVBj aWUgKyBQQ0lfTElOS19DQVAsIChVSU5UMzIpKENhcCAmDQo+PiArICh+UENJX0xJTktfU1BFRURf TUFTSykpIHwgQklUMCk7ICBTdGF0ZSA9IFBjaWVMaW5rU3RhdGUgKFBjaWUpOyAgaWYNCj4+ICsg KFN0YXRlKSB7DQo+PiArICAgIHJldHVybiBTdGF0ZTsNCj4+ICsgIH0NCj4+ICsNCj4+ICsgIE1t aW9Xcml0ZTMyICgoVUlOVE4pUGNpZSArIFBDSV9MSU5LX0NBUCwgQ2FwKTsNCj4+ICsNCj4+ICsg IHJldHVybiBFRklfU1VDQ0VTUzsNCj4+ICt9DQo+PiArDQo+PiArLyoqDQo+PiArICAgVGhpcyBm dW5jdGlvbiBjaGVja3Mgd2hldGhlciBQQ0llIGlzIGVuYWJsZWQgb3Igbm90DQo+PiArICAgZGVw ZW5kaW5nIHVwb24gU29DIHNlcmRlcyBwcm90b2NvbCBtYXANCj4+ICsNCj4+ICsgICBAcGFyYW0g IFBjaWVOdW0gUENJZSBudW1iZXIuDQo+PiArDQo+PiArICAgQHJldHVybiBUaGUgICAgIFBDSWUg bnVtYmVyIGVuYWJsZWQgaW4gbWFwLg0KPj4gKyAgIEByZXR1cm4gRkFMU0UgICBQQ0llIG51bWJl ciBpcyBkaXNhYmxlZCBpbiBtYXAuDQo+PiArDQo+PiArKiovDQo+PiArU1RBVElDDQo+PiArQk9P TEVBTg0KPj4gK0lzUGNpZU51bUVuYWJsZWQoDQo+PiArICBJTiBVSU5UTiBQY2llTnVtDQo+PiAr ICApDQo+PiArew0KPj4gKyAgVUlOVDY0IFNlckRlczFQcm90b2NvbE1hcDsNCj4+ICsNCj4+ICsg IFNlckRlczFQcm90b2NvbE1hcCA9IDB4MDsNCj4+ICsNCj4+ICsgIC8vDQo+PiArICAvLyBSZWFk aW5nIHNlcmRlcyBtYXANCj4+ICsgIC8vDQo+PiArICBHZXRTZXJkZXNQcm90b2NvbE1hcHMgKCZT ZXJEZXMxUHJvdG9jb2xNYXApOw0KPj4gKw0KPj4gKyAgLy8NCj4+ICsgIC8vIFZlcmlmeSBzZXJk ZXMgbGluZSBpcyBjb25maWd1cmVkIGluIHRoZSBtYXAgIC8vICBpZiAoUGNpZU51bSA8DQo+PiAr IE5VTV9QQ0lFX0NPTlRST0xMRVIpIHsNCj4+ICsgICAgcmV0dXJuIElzU2VyRGVzTGFuZVByb3Rv Y29sQ29uZmlndXJlZCAoU2VyRGVzMVByb3RvY29sTWFwLA0KPj4gKyAoUGNpZU51bSArIEJJVDAp KTsgIH0gZWxzZSB7DQo+PiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICJEZXZpY2Ugbm90IHN1 cHBvcnRlZFxuIikpOyAgfQ0KPj4gKw0KPj4gKyAgcmV0dXJuIEZBTFNFOw0KPj4gK30NCj4+ICsN Cj4+ICsvKioNCj4+ICsgIEZ1bmN0aW9uIHRvIHNldC11cCBpQVRVIG91dGJvdW5kIHdpbmRvdyBm b3IgUENJZSBjb250cm9sbGVyDQo+PiArDQo+PiArICBAcGFyYW0gUGNpZSAgICAgQWRkcmVzcyBv ZiBQQ0llIGhvc3QgY29udHJvbGxlcg0KPj4gKyAgQHBhcmFtIENmZzBCYXNlIFBDSWUgY29udHJv bGxlciBwaHkgYWRkcmVzcyBUeXBlMCBDb25maWd1cmF0aW9uIFNwYWNlLg0KPj4gKyAgQHBhcmFt IENmZzFCYXNlIFBDSWUgY29udHJvbGxlciBwaHkgYWRkcmVzcyBUeXBlMSBDb25maWd1cmF0aW9u IFNwYWNlLg0KPj4gKyAgQHBhcmFtIE1lbUJhc2UgIFBDSWUgY29udHJvbGxlciBwaHkgYWRkcmVz cyBNZW1vcnkgU3BhY2UuDQo+PiArICBAcGFyYW0gSW9CYXNlICAgUENJZSBjb250cm9sbGVyIHBo eSBhZGRyZXNzIElPIFNwYWNlLg0KPj4gKyoqLw0KPj4gK1NUQVRJQw0KPj4gK1ZPSUQNCj4+ICtQ Y2llU2V0dXBBdHUgKA0KPj4gKyAgSU4gRUZJX1BIWVNJQ0FMX0FERFJFU1MgUGNpZSwNCj4+ICsg IElOIEVGSV9QSFlTSUNBTF9BRERSRVNTIENmZzBCYXNlLA0KPj4gKyAgSU4gRUZJX1BIWVNJQ0FM X0FERFJFU1MgQ2ZnMUJhc2UsDQo+PiArICBJTiBFRklfUEhZU0lDQUxfQUREUkVTUyBNZW1CYXNl LA0KPj4gKyAgSU4gRUZJX1BIWVNJQ0FMX0FERFJFU1MgSW9CYXNlDQo+PiArICApDQo+PiArew0K Pj4gKw0KPj4gKyAgLy8NCj4+ICsgIC8vIGlBVFUgOiBPVVRCT1VORCBXSU5ET1cgMCA6IENGRzAN Cj4+ICsgIC8vDQo+PiArICBQY2llSWF0dU91dGJvdW5kU2V0IChQY2llLCBJQVRVX1JFR0lPTl9J TkRFWDAsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIElBVFVfUkVHSU9OX0NUUkxf MV9PRkZfT1VUQk9VTkRfMF9UWVBFX0NGRzAsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgIENmZzBCYXNlLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRUdfQ0ZHX0JV UywNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VHX0NGR19TSVpFKTsNCj4+ICsN Cj4+ICsgIC8vDQo+PiArICAvLyBpQVRVIDogT1VUQk9VTkQgV0lORE9XIDEgOiBDRkcxDQo+PiAr ICBQY2llSWF0dU91dGJvdW5kU2V0IChQY2llLCBJQVRVX1JFR0lPTl9JTkRFWDEsDQo+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgIElBVFVfUkVHSU9OX0NUUkxfMV9PRkZfT1VUQk9VTkRf MF9UWVBFX0NGRzEsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIENmZzFCYXNlLA0K Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRUdfQ0ZHX0JVUywNCj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgU0VHX0NGR19TSVpFKTsgIC8vICAvLyBpQVRVIDIgOiBPVVRC T1VORA0KPj4gKyBXSU5ET1cgMiA6IE1FTSAgLy8gIFBjaWVJYXR1T3V0Ym91bmRTZXQgKFBjaWUs IElBVFVfUkVHSU9OX0lOREVYMiwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUFU VV9SRUdJT05fQ1RSTF8xX09GRl9PVVRCT1VORF8wX1RZUEVfTUVNLA0KPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBNZW1CYXNlLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBTRUdfTUVNX0JVUywNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VHX01FTV9T SVpFKTsNCj4+ICsNCj4+ICsgIC8vDQo+PiArICAvLyBpQVRVIDMgOiBPVVRCT1VORCBXSU5ET1cg MzogSU8NCj4+ICsgIC8vDQo+PiArICBQY2llSWF0dU91dGJvdW5kU2V0IChQY2llLCBJQVRVX1JF R0lPTl9JTkRFWDMsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIElBVFVfUkVHSU9O X0NUUkxfMV9PRkZfT1VUQk9VTkRfMF9UWVBFX0lPLA0KPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBJb0Jhc2UsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFR19JT19C VVMsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFR19JT19TSVpFKTsNCj4+ICsN Cj4NCj5XaGF0IGhhcHBlbmVkIHRvIHRoZSA2NC1iaXQgTU1JTyB3aW5kb3c/DQpJIHdpbGwgYWRk IGl0Lg0KPg0KPj4gK30NCj4+ICsNCj4+ICsvKioNCj4+ICsgIEhlbHBlciBmdW5jdGlvbiB0byBz ZXQtdXAgUENJZSBjb250cm9sbGVyDQo+PiArDQo+PiArICBAcGFyYW0gUGNpZSAgICAgQWRkcmVz cyBvZiBQQ0llIGhvc3QgY29udHJvbGxlcg0KPj4gKyAgQHBhcmFtIENmZzBCYXNlIFBDSWUgY29u dHJvbGxlciBwaHkgYWRkcmVzcyBUeXBlMCBDb25maWd1cmF0aW9uIFNwYWNlLg0KPj4gKyAgQHBh cmFtIENmZzFCYXNlIFBDSWUgY29udHJvbGxlciBwaHkgYWRkcmVzcyBUeXBlMSBDb25maWd1cmF0 aW9uIFNwYWNlLg0KPj4gKyAgQHBhcmFtIE1lbUJhc2UgIFBDSWUgY29udHJvbGxlciBwaHkgYWRk cmVzcyBNZW1vcnkgU3BhY2UuDQo+PiArICBAcGFyYW0gSW9CYXNlICAgUENJZSBjb250cm9sbGVy IHBoeSBhZGRyZXNzIElPIFNwYWNlLg0KPj4gKw0KPj4gKyoqLw0KPj4gK1NUQVRJQw0KPj4gK1ZP SUQNCj4+ICtQY2llU2V0dXBDbnRybCAoDQo+PiArICBJTiBFRklfUEhZU0lDQUxfQUREUkVTUyBQ Y2llLA0KPj4gKyAgSU4gRUZJX1BIWVNJQ0FMX0FERFJFU1MgQ2ZnMEJhc2UsDQo+PiArICBJTiBF RklfUEhZU0lDQUxfQUREUkVTUyBDZmcxQmFzZSwNCj4+ICsgIElOIEVGSV9QSFlTSUNBTF9BRERS RVNTIE1lbUJhc2UsDQo+PiArICBJTiBFRklfUEhZU0lDQUxfQUREUkVTUyBJb0Jhc2UNCj4+ICsg ICkNCj4+ICt7DQo+PiArICAvLw0KPj4gKyAgLy8gaUFUVSBvdXRib3VuZCBzZXQtdXANCj4+ICsg IC8vDQo+PiArICBQY2llU2V0dXBBdHUgKFBjaWUsIENmZzBCYXNlLCBDZmcxQmFzZSwgTWVtQmFz ZSwgSW9CYXNlKTsNCj4+ICsNCj4+ICsgIC8vDQo+PiArICAvLyBwcm9ncmFtIGNvcnJlY3QgY2xh c3MgZm9yIFJDDQo+PiArICAvLw0KPj4gKyAgTW1pb1dyaXRlMzIgKChVSU5UTilQY2llICsgUENJ X0JBU0VfQUREUkVTU18wLCAoQklUMCAtIEJJVDApKTsNCj4+ICsgIE1taW9Xcml0ZTMyICgoVUlO VE4pUGNpZSArIFBDSV9EQklfUk9fV1JfRU4sIChVSU5UMzIpQklUMCk7DQo+PiArICBNbWlvV3Jp dGUzMiAoKFVJTlROKVBjaWUgKyBQQ0lfQ0xBU1NfREVWSUNFLA0KPj4gKyhVSU5UMzIpUENJX0NM QVNTX0JSSURHRV9QQ0kpOw0KPj4gKyAgTW1pb1dyaXRlMzIgKChVSU5UTilQY2llICsgUENJX0RC SV9ST19XUl9FTiwgKFVJTlQzMikoQklUMCAtDQo+PiArQklUMCkpOyB9DQo+PiArDQo+PiArLyoq DQo+PiArICBSZXR1cm4gYWxsIHRoZSByb290IGJyaWRnZSBpbnN0YW5jZXMgaW4gYW4gYXJyYXku DQo+PiArDQo+PiArICBAcGFyYW0gQ291bnQgIFJldHVybiB0aGUgY291bnQgb2Ygcm9vdCBicmlk Z2UgaW5zdGFuY2VzLg0KPj4gKw0KPj4gKyAgQHJldHVybiBBbGwgdGhlIHJvb3QgYnJpZGdlIGlu c3RhbmNlcyBpbiBhbiBhcnJheS4NCj4+ICsNCj4+ICsqKi8NCj4+ICtQQ0lfUk9PVF9CUklER0Ug Kg0KPj4gK0VGSUFQSQ0KPj4gK1BjaUhvc3RCcmlkZ2VHZXRSb290QnJpZGdlcyAoDQo+PiArICBP VVQgVUlOVE4gICAgICpDb3VudA0KPj4gKyAgKQ0KPj4gK3sNCj4+ICsgIFVJTlROICBJZHg7DQo+ PiArICBJTlROICAgTGlua1VwOw0KPj4gKyAgVUlOVDY0IFBjaVBoeU1lbUFkZHJbTlVNX1BDSUVf Q09OVFJPTExFUl07DQo+PiArICBVSU5UNjQgUGNpUGh5Q2ZnMEFkZHJbTlVNX1BDSUVfQ09OVFJP TExFUl07DQo+PiArICBVSU5UNjQgUGNpUGh5Q2ZnMUFkZHJbTlVNX1BDSUVfQ09OVFJPTExFUl07 DQo+PiArICBVSU5UNjQgUGNpUGh5SW9BZGRyW05VTV9QQ0lFX0NPTlRST0xMRVJdOw0KPj4gKyAg VUlOVDY0IFJlZ3NbTlVNX1BDSUVfQ09OVFJPTExFUl07DQo+PiArDQo+PiArICAqQ291bnQgPSAw Ow0KPj4gKw0KPj4gKyAgLy8NCj4+ICsgIC8vIEZpbGxpbmcgbG9jYWwgYXJyYXkgZm9yDQo+PiAr ICAvLyBQQ0llIGNvbnRyb2xsZXIgUGh5c2ljYWwgYWRkcmVzcyBzcGFjZSBmb3IgQ2ZnMCxDZmcx LE1lbSxJTyAgLy8NCj4+ICsgSG9zdCBDb250b2xsZXIgYWRkcmVzcyAgLy8gIGZvciAgKElkeCA9 IDA7IElkeCA8DQo+PiArIE5VTV9QQ0lFX0NPTlRST0xMRVI7IElkeCsrKSB7DQo+PiArICAgIFBj aVBoeU1lbUFkZHJbSWR4XSA9IFBDSV9TRUcwX1BIWV9NRU1fQkFTRSArIChQQ0lfQkFTRV9ESUZG ICogSWR4KTsNCj4+ICsgICAgUGNpUGh5Q2ZnMEFkZHJbSWR4XSA9IFBDSV9TRUcwX1BIWV9DRkcw X0JBU0UgKyAoUENJX0JBU0VfRElGRiAqIElkeCk7DQo+PiArICAgIFBjaVBoeUNmZzFBZGRyW0lk eF0gPSBQQ0lfU0VHMF9QSFlfQ0ZHMV9CQVNFICsgKFBDSV9CQVNFX0RJRkYgKiBJZHgpOw0KPj4g KyAgICBQY2lQaHlJb0FkZHIgW0lkeF0gPSAgUENJX1NFRzBfUEhZX0lPX0JBU0UgKyAoUENJX0JB U0VfRElGRiAqIElkeCk7DQo+PiArICAgIFJlZ3NbSWR4XSA9ICBQQ0lfU0VHMF9EQklfQkFTRSAr IChQQ0lfREJJX1NJWkVfRElGRiAqIElkeCk7ICB9DQo+PiArDQo+PiArICBmb3IgKElkeCA9IDA7 IElkeCA8IE5VTV9QQ0lFX0NPTlRST0xMRVI7IElkeCsrKSB7DQo+PiArICAgIC8vDQo+PiArICAg IC8vIFZlcmlmeSBQQ0llIGNvbnRyb2xsZXIgaXMgZW5hYmxlZCBpbiBTb2MgU2VyZGVzIE1hcA0K Pj4gKyAgICAvLw0KPj4gKyAgICBpZiAoIUlzUGNpZU51bUVuYWJsZWQgKElkeCkpIHsNCj4+ICsg ICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiUENJRSVkIGlzIGRpc2FibGVkXG4iLCAoSWR4ICsg QklUMCkpKTsNCj4+ICsgICAgICAvLw0KPj4gKyAgICAgIC8vIENvbnRpbnVlIHdpdGggb3RoZXIg UENJZSBjb250cm9sbGVyDQo+PiArICAgICAgLy8NCj4+ICsgICAgICBjb250aW51ZTsNCj4+ICsg ICAgfQ0KPj4gKyAgICBERUJVRyAoKERFQlVHX0lORk8sICJQQ0lFJWQgaXMgRW5hYmxlZFxuIiwg SWR4ICsgQklUMCkpOw0KPj4gKw0KPj4gKyAgICAvLw0KPj4gKyAgICAvLyBWZXJpZnkgUENJZSBj b250cm9sbGVyIExUU1NNIHN0YXRlDQo+PiArICAgIC8vDQo+PiArICAgIExpbmtVcCA9IFBjaWVM aW5rVXAoUmVnc1tJZHhdKTsNCj4+ICsgICAgaWYgKCFMaW5rVXApIHsNCj4+ICsgICAgICAvLw0K Pj4gKyAgICAgIC8vIExldCB0aGUgdXNlciBrbm93IHRoZXJlJ3Mgbm8gUENJZSBsaW5rDQo+PiAr ICAgICAgLy8NCj4+ICsgICAgICBERUJVRyAoKERFQlVHX0lORk8sIm5vIGxpbmssIHJlZ3MgQCAw eCVseFxuIiwgUmVnc1tJZHhdKSk7DQo+PiArICAgICAgLy8NCj4+ICsgICAgICAvLyBDb250aW51 ZSB3aXRoIG90aGVyIFBDSWUgY29udHJvbGxlcg0KPj4gKyAgICAgIC8vDQo+PiArICAgICAgY29u dGludWU7DQo+PiArICAgIH0NCj4+ICsgICAgREVCVUcgKChERUJVR19JTkZPLCAiUENJRSVkIFBh c3NlZCBMaW5rdXAgUGhhc2VcbiIsIElkeCArIEJJVDApKTsNCj4+ICsNCj4+ICsgICAgLy8NCj4+ ICsgICAgLy8gRnVuY3Rpb24gdG8gc2V0IHVwIGFkZHJlc3MgdHJhbnNsYXRpb24gdW5pdCBvdXRi b3VuZCB3aW5kb3cgZm9yDQo+PiArICAgIC8vIFBDSWUgQ29udHJvbGxlcg0KPj4gKyAgICAvLw0K Pj4gKyAgICBQY2llU2V0dXBDbnRybCAoUmVnc1tJZHhdLA0KPj4gKyAgICAgICAgICAgICAgICAg ICAgUGNpUGh5Q2ZnMEFkZHJbSWR4XSwNCj4+ICsgICAgICAgICAgICAgICAgICAgIFBjaVBoeUNm ZzFBZGRyW0lkeF0sDQo+PiArICAgICAgICAgICAgICAgICAgICBQY2lQaHlNZW1BZGRyW0lkeF0s DQo+PiArICAgICAgICAgICAgICAgICAgICBQY2lQaHlJb0FkZHJbSWR4XSk7DQo+PiArICAgICpD b3VudCArPSBCSVQwOw0KPj4gKyAgICBicmVhazsNCj4+ICsgIH0NCj4+ICsNCj4+ICsgIGlmICgq Q291bnQgPT0gMCkgew0KPj4gKyAgICAgcmV0dXJuIE5VTEw7DQo+PiArICB9IGVsc2Ugew0KPj4g KyAgICAgcmV0dXJuICZtUGNpUm9vdEJyaWRnZXNbSWR4XTsNCj4+ICsgIH0NCj4+ICt9DQo+PiAr DQo+PiArLyoqDQo+PiArICBGcmVlIHRoZSByb290IGJyaWRnZSBpbnN0YW5jZXMgYXJyYXkgcmV0 dXJuZWQgZnJvbQ0KPlBjaUhvc3RCcmlkZ2VHZXRSb290QnJpZGdlcygpLg0KPj4gKw0KPj4gKyAg QHBhcmFtIEJyaWRnZXMgVGhlIHJvb3QgYnJpZGdlIGluc3RhbmNlcyBhcnJheS4NCj4+ICsgIEBw YXJhbSBDb3VudCAgIFRoZSBjb3VudCBvZiB0aGUgYXJyYXkuDQo+PiArKiovDQo+PiArVk9JRA0K Pj4gK0VGSUFQSQ0KPj4gK1BjaUhvc3RCcmlkZ2VGcmVlUm9vdEJyaWRnZXMgKA0KPj4gKyAgUENJ X1JPT1RfQlJJREdFICpCcmlkZ2VzLA0KPj4gKyAgVUlOVE4gICAgICAgICAgIENvdW50DQo+PiAr ICApDQo+PiArew0KPj4gK30NCj4+ICsNCj4+ICsvKioNCj4+ICsgIEluZm9ybSB0aGUgcGxhdGZv cm0gdGhhdCB0aGUgcmVzb3VyY2UgY29uZmxpY3QgaGFwcGVucy4NCj4+ICsNCj4+ICsgIEBwYXJh bSBIb3N0QnJpZGdlSGFuZGxlIEhhbmRsZSBvZiB0aGUgSG9zdCBCcmlkZ2UuDQo+PiArICBAcGFy YW0gQ29uZmlndXJhdGlvbiAgICBQb2ludGVyIHRvIFBDSSBJL08gYW5kIFBDSSBtZW1vcnkgcmVz b3VyY2UNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JzLiBUaGUgQ29u ZmlndXJhdGlvbiBjb250YWlucyB0aGUgcmVzb3VyY2VzDQo+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICBmb3IgYWxsIHRoZSByb290IGJyaWRnZXMuIFRoZSByZXNvdXJjZSBmb3IgZWFjaCBy b290DQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICBicmlkZ2UgaXMgdGVybWluYXRlZCB3 aXRoIEVORCBkZXNjcmlwdG9yIGFuZCBhbg0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg YWRkaXRpb25hbCBFTkQgaXMgYXBwZW5kZWQgaW5kaWNhdGluZyB0aGUgZW5kIG9mIHRoZQ0KPj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXJlIHJlc291cmNlcy4gVGhlIHJlc291cmNl IGRlc2NyaXB0b3IgZmllbGQNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyBm b2xsb3cgdGhlIGRlc2NyaXB0aW9uIGluDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICBF RklfUENJX0hPU1RfQlJJREdFX1JFU09VUkNFX0FMTE9DQVRJT05fUFJPVE9DT0wNCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgIC5TdWJtaXRSZXNvdXJjZXMoKS4NCj4+ICsNCj4+ICsqKi8N Cj4+ICtWT0lEDQo+PiArRUZJQVBJDQo+PiArUGNpSG9zdEJyaWRnZVJlc291cmNlQ29uZmxpY3Qg KA0KPj4gKyAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICAgICAgIEhvc3RCcmlkZ2VIYW5k bGUsDQo+PiArICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkNvbmZpZ3VyYXRp b24NCj4+ICsgICkNCj4+ICt7DQo+PiArICBFRklfQUNQSV9BRERSRVNTX1NQQUNFX0RFU0NSSVBU T1IgKkRlc2NyaXB0b3I7DQo+PiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Um9vdEJyaWRnZUluZGV4Ow0KPj4gKyAgREVCVUcgKChERUJVR19FUlJPUiwgIlBjaUhvc3RCcmlk Z2U6IFJlc291cmNlIGNvbmZsaWN0DQo+PiAraGFwcGVucyFcbiIpKTsNCj4+ICsNCj4+ICsgIFJv b3RCcmlkZ2VJbmRleCA9IDA7DQo+PiArICBEZXNjcmlwdG9yID0gKEVGSV9BQ1BJX0FERFJFU1Nf U1BBQ0VfREVTQ1JJUFRPUiAqKSBDb25maWd1cmF0aW9uOw0KPj4gKyB3aGlsZSAoRGVzY3JpcHRv ci0+RGVzYyA9PSBBQ1BJX0FERFJFU1NfU1BBQ0VfREVTQ1JJUFRPUikgew0KPj4gKyAgICBERUJV RyAoKERFQlVHX0VSUk9SLCAiUm9vdEJyaWRnZVslZF06XG4iLCBSb290QnJpZGdlSW5kZXgrKykp Ow0KPj4gKyAgICBmb3IgKDsgRGVzY3JpcHRvci0+RGVzYyA9PSBBQ1BJX0FERFJFU1NfU1BBQ0Vf REVTQ1JJUFRPUjsNCj5EZXNjcmlwdG9yKyspIHsNCj4+ICsgICAgICBBU1NFUlQgKERlc2NyaXB0 b3ItPlJlc1R5cGUgPA0KPj4gKyAgICAgICAgICAgICAgQVJSQVlfU0laRSAobVBjaUhvc3RCcmlk Z2VMaWJBY3BpQWRkcmVzc1NwYWNlVHlwZVN0cikpOw0KPj4gKyAgICAgIERFQlVHICgoREVCVUdf RVJST1IsICIgJXM6IExlbmd0aC9BbGlnbm1lbnQgPSAweCVseCAvIDB4JWx4XG4iLA0KPj4gKyAg ICAgICAgICAgICAgbVBjaUhvc3RCcmlkZ2VMaWJBY3BpQWRkcmVzc1NwYWNlVHlwZVN0cltEZXNj cmlwdG9yLT5SZXNUeXBlXSwNCj4+ICsgICAgICAgICAgICAgIERlc2NyaXB0b3ItPkFkZHJMZW4s IERlc2NyaXB0b3ItPkFkZHJSYW5nZU1heA0KPj4gKyAgICAgICAgICAgICAgKSk7DQo+PiArICAg ICAgaWYgKERlc2NyaXB0b3ItPlJlc1R5cGUgPT0gQUNQSV9BRERSRVNTX1NQQUNFX1RZUEVfTUVN KSB7DQo+PiArICAgICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiICAgICBHcmFudWxhcml0eS9T cGVjaWZpY0ZsYWcgPSAlbGQgLyAlMDJ4JXNcbiIsDQo+PiArICAgICAgICAgICAgICAgIERlc2Ny aXB0b3ItPkFkZHJTcGFjZUdyYW51bGFyaXR5LCBEZXNjcmlwdG9yLT5TcGVjaWZpY0ZsYWcsDQo+ PiArICAgICAgICAgICAgICAgICgoRGVzY3JpcHRvci0+U3BlY2lmaWNGbGFnICYNCj4+ICsNCj5F RklfQUNQSV9NRU1PUllfUkVTT1VSQ0VfU1BFQ0lGSUNfRkxBR19DQUNIRUFCTEVfUFJFRkVUQ0hB QkxFDQo+PiArICAgICAgICAgICAgICAgICAgKSAhPSAwKSA/IEwiIChQcmVmZXRjaGFibGUpIiA6 IEwiIg0KPj4gKyAgICAgICAgICAgICAgICApKTsNCj4+ICsgICAgICB9DQo+PiArICAgIH0NCj4+ ICsgICAgLy8NCj4+ICsgICAgLy8gU2tpcCB0aGUgRU5EIGRlc2NyaXB0b3IgZm9yIHJvb3QgYnJp ZGdlDQo+PiArICAgIC8vDQo+PiArICAgIEFTU0VSVCAoRGVzY3JpcHRvci0+RGVzYyA9PSBBQ1BJ X0VORF9UQUdfREVTQ1JJUFRPUik7DQo+PiArICAgIERlc2NyaXB0b3IgPSAoRUZJX0FDUElfQURE UkVTU19TUEFDRV9ERVNDUklQVE9SICopKA0KPj4gKyAgICAgICAgICAgICAgICAgICAoRUZJX0FD UElfRU5EX1RBR19ERVNDUklQVE9SICopRGVzY3JpcHRvciArIDENCj4+ICsgICAgICAgICAgICAg ICAgICAgKTsNCj4+ICsgIH0NCj4+ICsNCj4+ICsgIHJldHVybjsNCj4+ICt9DQo+PiBkaWZmIC0t Z2l0IGEvU2lsaWNvbi9OWFAvTGlicmFyeS9QY2lIb3N0QnJpZGdlTGliL1BjaUhvc3RCcmlkZ2VM aWIuaW5mDQo+PiBiL1NpbGljb24vTlhQL0xpYnJhcnkvUGNpSG9zdEJyaWRnZUxpYi9QY2lIb3N0 QnJpZGdlTGliLmluZg0KPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4+IGluZGV4IDAwMDAwMDAu LmYwOGFjNjANCj4+IC0tLSAvZGV2L251bGwNCj4+ICsrKyBiL1NpbGljb24vTlhQL0xpYnJhcnkv UGNpSG9zdEJyaWRnZUxpYi9QY2lIb3N0QnJpZGdlTGliLmluZg0KPj4gQEAgLTAsMCArMSw1MCBA QA0KPj4gKyMjIEBmaWxlDQo+PiArIyAgUENJIEhvc3QgQnJpZGdlIExpYnJhcnkgaW5zdGFuY2Ug Zm9yIE5YUCBBUk0gU09DICMgIyAgQ29weXJpZ2h0DQo+PiArMjAxOCBOWFAgIyAjICBUaGlzIHBy b2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZQ0KPj4gK2xpY2Vuc2VkIGFu ZCBtYWRlIGF2YWlsYWJsZSAjICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhl DQo+PiArQlNEIExpY2Vuc2Ugd2hpY2ggYWNjb21wYW5pZXMgdGhpcyAjICBkaXN0cmlidXRpb24u IFRoZSBmdWxsIHRleHQgb2YNCj4+ICt0aGUgbGljZW5zZSBtYXkgYmUgZm91bmQgYXQgIw0KPj4g K2h0dHBzOi8vZW1lYTAxLnNhZmVsaW5rcy5wcm90ZWN0aW9uLm91dGxvb2suY29tLz91cmw9aHR0 cCUzQSUyRiUyRm9wZQ0KPj4gK25zb3VyY2Uub3JnJTJGbGljZW5zZXMlMkZic2QtDQo+bGljZW5z ZS5waHAmZGF0YT0wMiU3QzAxJTdDdmFiaGF2LnNoYXJtYQ0KPj4NCj4rJTQwbnhwLmNvbSU3QzQ0 ZDBlMWRjZDEwMTRlM2RjMTMzMDhkNWE2OTk5MzQyJTdDNjg2ZWExZDNiYzJiNGM2Zg0KPmE5MmNk DQo+Pg0KPis5OWM1YzMwMTYzNSU3QzAlN0MwJTdDNjM2NTk4MTAwOTA2MjM4MjM0JnNkYXRhPXNY JTJCUEFBS0hRTjQxbw0KPnFGOEJuWUwNCj4+ICtkSVZLWVlMZ0lNcVdCTnFQczlEM05kRSUzRCZy ZXNlcnZlZD0wDQo+PiArIyAgVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJT RCBMSUNFTlNFIE9OIEFOICJBUyBJUyINCj4+ICtCQVNJUywgIyAgV0lUSE9VVCBXQVJSQU5USUVT IE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwNCj5FSVRIRVINCj4+ICtFWFBSRVNTIE9S ICMgIElNUExJRUQuDQo+PiArIw0KPj4gKyMNCj4+ICsjIw0KPj4gKw0KPj4gK1tEZWZpbmVzXQ0K Pj4gKyAgSU5GX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgID0gMHgwMDAxMDAxQQ0KPj4gKyAg QkFTRV9OQU1FICAgICAgICAgICAgICAgICAgICAgID0gUGNpSG9zdEJyaWRnZUxpYg0KPj4gKyAg RklMRV9HVUlEICAgICAgICAgICAgICAgICAgICAgID0gZjRjOTliY2MtNWM5NS00OWFkLWIwZjMt ZmM1YjYxMWRjOWMxDQo+PiArICBNT0RVTEVfVFlQRSAgICAgICAgICAgICAgICAgICAgPSBCQVNF DQo+PiArICBWRVJTSU9OX1NUUklORyAgICAgICAgICAgICAgICAgPSAxLjANCj4+ICsgIExJQlJB UllfQ0xBU1MgICAgICAgICAgICAgICAgICA9IFBjaUhvc3RCcmlkZ2VMaWINCj4+ICsNCj4+ICtb U291cmNlc10NCj4+ICsgIFBjaUhvc3RCcmlkZ2VMaWIuYw0KPj4gKw0KPj4gK1tQYWNrYWdlc10N Cj4+ICsgIE1kZVBrZy9NZGVQa2cuZGVjDQo+PiArICBNZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtn LmRlYw0KPj4gKyAgU2lsaWNvbi9OWFAvTnhwUW9yaXFMcy5kZWMNCj4+ICsgIFNpbGljb24vTlhQ L0NoYXNzaXMvQ2hhc3NpczIvQ2hhc3NpczIuZGVjDQo+PiArDQo+PiArW0xpYnJhcnlDbGFzc2Vz XQ0KPj4gKyAgRGVidWdMaWINCj4+ICsgIERldmljZVBhdGhMaWINCj4+ICsgIE1lbW9yeUFsbG9j YXRpb25MaWINCj4+ICsgIFBjZExpYg0KPj4gKyAgU29jTGliDQo+PiArICBVZWZpQm9vdFNlcnZp Y2VzVGFibGVMaWINCj4+ICsNCj4+ICtbUGNkXQ0KPj4gKyAgZ054cFFvcmlxTHNUb2tlblNwYWNl R3VpZC5QY2RQY2lMdXRCaWdFbmRpYW4NCj4+ICsgIGdOeHBRb3JpcUxzVG9rZW5TcGFjZUd1aWQu UGNkTnVtUGNpQ29udHJvbGxlcg0KPj4gKyAgZ054cFFvcmlxTHNUb2tlblNwYWNlR3VpZC5QY2RQ Y2llTHV0QmFzZQ0KPj4gKyAgZ054cFFvcmlxTHNUb2tlblNwYWNlR3VpZC5QY2RQY2llTHV0RGJn DQo+PiArICBnTnhwUW9yaXFMc1Rva2VuU3BhY2VHdWlkLlBjZFBjaUV4cDFCYXNlQWRkcg0KPj4g KyAgZ054cFFvcmlxTHNUb2tlblNwYWNlR3VpZC5QY2RQY2lFeHAyQmFzZUFkZHINCj4+ICsgIGdO eHBRb3JpcUxzVG9rZW5TcGFjZUd1aWQuUGNkUGNpRXhwM0Jhc2VBZGRyDQo+PiArICBnTnhwUW9y aXFMc1Rva2VuU3BhY2VHdWlkLlBjZFBjaUV4cDRCYXNlQWRkcg0KPj4gLS0NCj4+IDEuOS4xDQo+ Pg0K