From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=40.107.3.72; helo=eur03-am5-obe.outbound.protection.outlook.com; envelope-from=udit.kumar@nxp.com; receiver=edk2-devel@lists.01.org Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-eopbgr30072.outbound.protection.outlook.com [40.107.3.72]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 19E212194D387 for ; Fri, 24 Aug 2018 10:45:50 -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:X-MS-Exchange-SenderADCheck; bh=ZqhVmsxNos3EwSelDGCWbG+6y9RdlMNRwyZLlenaKNM=; b=NS1FwyS8HuvspkWex0En/v3LbsvP68T9/P2r+egS95P6PJ+YiRdXoMLEA/wM8QidIW8oP4aXdUGLTEfi0yCK+9XWoV1W+0Iig/4cuW81DjY0dzrByKP9P+SD85n+ZeBvqYmsAACK3l5GpN9QFnvVCEuY42WsVfZSIqLxVF8C218= Received: from VI1PR04MB4640.eurprd04.prod.outlook.com (20.177.56.27) by VI1PR04MB4496.eurprd04.prod.outlook.com (20.177.54.92) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1080.15; Fri, 24 Aug 2018 17:45:46 +0000 Received: from VI1PR04MB4640.eurprd04.prod.outlook.com ([fe80::71e6:d77f:1276:a9f]) by VI1PR04MB4640.eurprd04.prod.outlook.com ([fe80::71e6:d77f:1276:a9f%3]) with mapi id 15.20.1059.023; Fri, 24 Aug 2018 17:45:46 +0000 From: Udit Kumar To: Ard Biesheuvel , Matteo Carlini CC: Sumit Garg , "edk2-devel@lists.01.org" , "tee-dev@lists.linaro.org" , "daniel.thompson@linaro.org" , "jens.wiklander@linaro.org" , Rod Dorris Thread-Topic: [edk2] [PATCH 1/1] ArmPkg/OpteeLib: Add APIs to communicate with OP-TEE Thread-Index: AQHUO4vs8UuJBPvtBkWU17h3sH57t6TPFMMggAAV1ACAAAFpMA== Date: Fri, 24 Aug 2018 17:45:46 +0000 Message-ID: References: <1535102474-24383-1-git-send-email-sumit.garg@linaro.org> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=udit.kumar@nxp.com; x-originating-ip: [2405:204:1287:4289:f121:efd4:711c:3c28] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; VI1PR04MB4496; 6:hxOwj26vKXD6YNS2eQcxnOFdX+9ZHINESm5U24hJlVjjxBY3sGvdeymKyHaoet+8KyOmbz5VVQIJPxZD01YBRuNeRohQV/OtoJBeaODMJuSsFIQ6+XT0GYTX6mBfmt6YNE865LsEZZY/DbmO1HwY9YCctN3bwK3jLsTSFijlgHDpoVLwiUrek2xNss8sxHg7VIyTMvlBqxXGOhhw6X2vURj6CQ8QkNXAbcKbcNdmXF640YLoEhon1eLtM2XN/v16Xs4h/suanrLh29zdFCdyOFp6FxMTfmX7UyMVog0CXDwoWaiWb4bcy5EPOLy2nuvDER3eh3nmK+RJ0RHwVsSrprOmVTbgyR8y+kwhdVhbhor2YiwJNM3t7O0vwG2AeRmqwmGQTC8Fk1RhX+uO9IUCWsNcBip6k5TcHG71TFXcflR+qHkW/sNLxVt8KLhKWdQ+/IqGUi/j3ZNT2vX9G59eNA==; 5:SLCSPEvJHsWzfxXJpqFxr60AIznXe0hQM6tUVVewKx9ASIMls4C+G1wZKEJ5YBgWGRPW+88h65CWnW7XOtidtYv3dlTnhZ/dq9fQiXP5MupzEZE7sMyvsvFZYA08Pd74fxqQ+gtA6N6BOyJqJIDLswQWv9m93ZTPpXPsvIdpzcU=; 7:ehg4meQ5ezfb+pYurjIs3JYyVHP1U9ybuqxS7EWuUp0Kqcev6gYYtlwKzfC889hriAKhZWNqh9CVxdinOh4cQXWeCAyIHK2XagEpmXbySr/KsQyHNDnvRfe4nrynEnCIKLrZmnjpL0Db7zMJSjTRfHhBLBceoccWpEgqBF8m5Cx8uOGYQ7Bpcd/t/qotkZxWsOBxHzkg7oB4t+U4nMkRjgnsti1BZy/LwlNysUObt7eK5VY89HoSOEGrKAbon/Xd x-ms-exchange-antispam-srfa-diagnostics: SOS; x-ms-office365-filtering-correlation-id: 1d7406fb-67d1-452d-189c-08d609e96c31 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989137)(5600074)(711020)(4618075)(4534165)(4627221)(201703031133081)(201702281549075)(8990107)(2017052603328)(7153060)(7193020); SRVR:VI1PR04MB4496; x-ms-traffictypediagnostic: VI1PR04MB4496: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(189930954265078)(162533806227266)(1553240931313)(45079756050767); x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(823301075)(10201501046)(93006095)(93001095)(3231311)(944501410)(52105095)(3002001)(6055026)(149027)(150027)(6041310)(20161123560045)(20161123562045)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(201708071742011)(7699016); SRVR:VI1PR04MB4496; BCL:0; PCL:0; RULEID:; SRVR:VI1PR04MB4496; x-forefront-prvs: 07749F8C42 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(136003)(346002)(39860400002)(366004)(396003)(376002)(13464003)(199004)(189003)(446003)(11346002)(6116002)(476003)(4326008)(53546011)(256004)(14444005)(25786009)(486006)(6246003)(229853002)(33656002)(46003)(16799955002)(6306002)(55016002)(9686003)(6436002)(6506007)(44832011)(53936002)(186003)(2900100001)(102836004)(81166006)(7736002)(5250100002)(7696005)(86362001)(76176011)(8936002)(99286004)(54906003)(110136005)(53946003)(316002)(575784001)(5660300001)(14454004)(478600001)(45080400002)(105586002)(68736007)(966005)(97736004)(74316002)(8676002)(81156014)(305945005)(2906002)(106356001)(579004); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB4496; H:VI1PR04MB4640.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: NaOhPSa+mDUL00McmYNOm3TK/z4U2pGS37yqEyNbpEhEbxXYwUowya9EJvKnfYG659Ty/KmgSUjnZLQdW3JI0PSquDE2TLTnu4JI1JzRM1l1gL+7AG+zff0pMoiduc/Aan8gPKy+tFj5jARM0H/B0hV4/bEG9xMj+Obe8b1Lj7jb8zU4ilG6XM4hP9V15jijErsN/BDwjBIPbK9eRKI7SA2n11LhjDIevVcjQhVjKrNy5Zg4TSdXPDhk7X+xXcVPCr/mpQSpr6fXPxNDXo6nMCCd8sLpopfJyUCmqdFKeBbbROTw/bFoAF5BYJaIsaGLTwvRRotTjhMx3LMt4mdtw9qbeqvVr0b0j8uneOKg9IQ= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1d7406fb-67d1-452d-189c-08d609e96c31 X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Aug 2018 17:45:46.4939 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4496 Subject: Re: [PATCH 1/1] ArmPkg/OpteeLib: Add APIs to communicate with OP-TEE X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 24 Aug 2018 17:45:52 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgQXJkIA0KIA0KPiBJZiBNTSBtb2RlIGlzIGZ1bmRhbWVudGFsbHkgaW5jb21wYXRpYmxlIHdp dGggT1AtVEVFLCB0aGVuIHlvdSBjYW5ub3QNCj4gcnVuIGJvdGggYXQgdGhlIHNhbWUgdGltZSwN Cg0KQm90aCBjYW5ub3QgY29leGlzdCB1bmxlc3MgeW91IGhhdmUgdjguNCBDUFUNCg0KUmVnYXJk cw0KVWRpdA0KIA0KPiANCj4gDQo+ID4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4+ IEZyb206IGVkazItZGV2ZWwgPGVkazItZGV2ZWwtYm91bmNlc0BsaXN0cy4wMS5vcmc+IE9uIEJl aGFsZiBPZiBTdW1pdA0KPiA+PiBHYXJnDQo+ID4+IFNlbnQ6IEZyaWRheSwgQXVndXN0IDI0LCAy MDE4IDI6NTEgUE0NCj4gPj4gVG86IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnDQo+ID4+IENjOiBk YW5pZWwudGhvbXBzb25AbGluYXJvLm9yZzsgdGVlLWRldkBsaXN0cy5saW5hcm8ub3JnOw0KPiA+ PiBqZW5zLndpa2xhbmRlckBsaW5hcm8ub3JnDQo+ID4+IFN1YmplY3Q6IFtlZGsyXSBbUEFUQ0gg MS8xXSBBcm1Qa2cvT3B0ZWVMaWI6IEFkZCBBUElzIHRvIGNvbW11bmljYXRlDQo+ID4+IHdpdGgg T1AtVEVFDQo+ID4+DQo+ID4+IEFkZCBmb2xsb3dpbmcgQVBJcyB0byBjb21tdW5pY2F0ZSB3aXRo IE9QLVRFRSBzdGF0aWMgVEE6DQo+ID4+IDEuIE9wdGVlSW5pdA0KPiA+PiAyLiBPcHRlZU9wZW5T ZXNzaW9uDQo+ID4+IDMuIE9wdGVlQ2xvc2VTZXNzaW9uDQo+ID4+IDQuIE9wdGVlSW52b2tlRnVu Yw0KPiA+Pg0KPiA+PiBDYzogQXJkIEJpZXNoZXV2ZWwgPGFyZC5iaWVzaGV1dmVsQGxpbmFyby5v cmc+DQo+ID4+IENjOiBMZWlmIExpbmRob2xtIDxsZWlmLmxpbmRob2xtQGxpbmFyby5vcmc+DQo+ ID4+IENvbnRyaWJ1dGVkLXVuZGVyOiBUaWFub0NvcmUgQ29udHJpYnV0aW9uIEFncmVlbWVudCAx LjENCj4gPj4gU2lnbmVkLW9mZi1ieTogU3VtaXQgR2FyZyA8c3VtaXQuZ2FyZ0BsaW5hcm8ub3Jn Pg0KPiA+PiAtLS0NCj4gPj4gIEFybVBrZy9JbmNsdWRlL0xpYnJhcnkvT3B0ZWVMaWIuaCAgICAg ICAgICAgICAgICAgIHwgMTAyICsrKysrKw0KPiA+PiAgQXJtUGtnL0xpYnJhcnkvT3B0ZWVMaWIv T3B0ZWUuYyAgICAgICAgICAgICAgICAgICAgfCAzNTgNCj4gPj4gKysrKysrKysrKysrKysrKysr KysrDQo+ID4+ICBBcm1Qa2cvTGlicmFyeS9PcHRlZUxpYi9PcHRlZUxpYi5pbmYgICAgICAgICAg ICAgICB8ICAgMiArDQo+ID4+ICBBcm1Qa2cvTGlicmFyeS9PcHRlZUxpYi9PcHRlZVNtYy5oICAg ICAgICAgICAgICAgICB8ICA0MyArKysNCj4gPj4gIC4uLi9JbmNsdWRlL0luZHVzdHJ5U3RhbmRh cmQvR2xvYmFsUGxhdGZvcm0uaCAgICAgIHwgIDYwICsrLS0NCj4gPj4gIDUgZmlsZXMgY2hhbmdl ZCwgNTMxIGluc2VydGlvbnMoKyksIDM0IGRlbGV0aW9ucygtKSAgY3JlYXRlIG1vZGUNCj4gPj4g MTAwNjQ0IEFybVBrZy9MaWJyYXJ5L09wdGVlTGliL09wdGVlU21jLmgNCj4gPj4gIGNvcHkgQXJt UGtnL0luY2x1ZGUvTGlicmFyeS9PcHRlZUxpYi5oID0+DQo+ID4+IE1kZVBrZy9JbmNsdWRlL0lu ZHVzdHJ5U3RhbmRhcmQvR2xvYmFsUGxhdGZvcm0uaCAoNTMlKQ0KPiA+Pg0KPiA+PiBkaWZmIC0t Z2l0IGEvQXJtUGtnL0luY2x1ZGUvTGlicmFyeS9PcHRlZUxpYi5oDQo+ID4+IGIvQXJtUGtnL0lu Y2x1ZGUvTGlicmFyeS9PcHRlZUxpYi5oDQo+ID4+IGluZGV4IGY2NWQ4Njc0ZDliOC4uYzMyM2Y0 OTA3MmY4IDEwMDY0NA0KPiA+PiAtLS0gYS9Bcm1Qa2cvSW5jbHVkZS9MaWJyYXJ5L09wdGVlTGli LmgNCj4gPj4gKysrIGIvQXJtUGtnL0luY2x1ZGUvTGlicmFyeS9PcHRlZUxpYi5oDQo+ID4+IEBA IC0yNSwxMCArMjUsMTEyIEBADQo+ID4+ICAjZGVmaW5lIE9QVEVFX09TX1VJRDIgICAgICAgICAg MHhhZjYzMDAwMg0KPiA+PiAgI2RlZmluZSBPUFRFRV9PU19VSUQzICAgICAgICAgIDB4YTVkNWM1 MWINCj4gPj4NCj4gPj4gKyNkZWZpbmUgT1BURUVfTVNHX0FUVFJfVFlQRV9OT05FICAgICAgICAg ICAgICAgIDB4MA0KPiA+PiArI2RlZmluZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1ZBTFVFX0lOUFVU ICAgICAgICAgMHgxDQo+ID4+ICsjZGVmaW5lIE9QVEVFX01TR19BVFRSX1RZUEVfVkFMVUVfT1VU UFVUICAgICAgICAweDINCj4gPj4gKyNkZWZpbmUgT1BURUVfTVNHX0FUVFJfVFlQRV9WQUxVRV9J Tk9VVCAgICAgICAgIDB4Mw0KPiA+PiArI2RlZmluZSBPUFRFRV9NU0dfQVRUUl9UWVBFX01FTV9J TlBVVCAgICAgICAgICAgMHg5DQo+ID4+ICsjZGVmaW5lIE9QVEVFX01TR19BVFRSX1RZUEVfTUVN X09VVFBVVCAgICAgICAgICAweGENCj4gPj4gKyNkZWZpbmUgT1BURUVfTVNHX0FUVFJfVFlQRV9N RU1fSU5PVVQgICAgICAgICAgIDB4Yg0KPiA+PiArDQo+ID4+ICsjZGVmaW5lIE9QVEVFX01TR19B VFRSX1RZUEVfTUFTSyAgICAgICAgICAgICAgICAweGZmDQo+ID4+ICsNCj4gPj4gK3R5cGVkZWYg c3RydWN0IHsNCj4gPj4gKyAgVUlOVDY0ICAgIEJ1ZlB0cjsNCj4gPj4gKyAgVUlOVDY0ICAgIFNp emU7DQo+ID4+ICsgIFVJTlQ2NCAgICBTaG1SZWY7DQo+ID4+ICt9IE9QVEVFX01TR19QQVJBTV9N RU07DQo+ID4+ICsNCj4gPj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gPj4gKyAgVUlOVDY0ICAgIEE7 DQo+ID4+ICsgIFVJTlQ2NCAgICBCOw0KPiA+PiArICBVSU5UNjQgICAgQzsNCj4gPj4gK30gT1BU RUVfTVNHX1BBUkFNX1ZBTFVFOw0KPiA+PiArDQo+ID4+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ID4+ ICsgIFVJTlQ2NCBBdHRyOw0KPiA+PiArICB1bmlvbiB7DQo+ID4+ICsgICAgT1BURUVfTVNHX1BB UkFNX01FTSAgICAgIE1lbTsNCj4gPj4gKyAgICBPUFRFRV9NU0dfUEFSQU1fVkFMVUUgICAgVmFs dWU7DQo+ID4+ICsgIH0gVTsNCj4gPj4gK30gT1BURUVfTVNHX1BBUkFNOw0KPiA+PiArDQo+ID4+ ICsjZGVmaW5lIE1BWF9QQVJBTVMgICAgICAgICAgIDQNCj4gPj4gKw0KPiA+PiArdHlwZWRlZiBz dHJ1Y3Qgew0KPiA+PiArICAgICAgICBVSU5UMzIgICAgICAgICAgICAgQ21kOw0KPiA+PiArICAg ICAgICBVSU5UMzIgICAgICAgICAgICAgRnVuYzsNCj4gPj4gKyAgICAgICAgVUlOVDMyICAgICAg ICAgICAgIFNlc3Npb247DQo+ID4+ICsgICAgICAgIFVJTlQzMiAgICAgICAgICAgICBDYW5jZWxJ ZDsNCj4gPj4gKyAgICAgICAgVUlOVDMyICAgICAgICAgICAgIFBhZDsNCj4gPj4gKyAgICAgICAg VUlOVDMyICAgICAgICAgICAgIFJldDsNCj4gPj4gKyAgICAgICAgVUlOVDMyICAgICAgICAgICAg IFJldE9yaWdpbjsNCj4gPj4gKyAgICAgICAgVUlOVDMyICAgICAgICAgICAgIE51bVBhcmFtczsN Cj4gPj4gKw0KPiA+PiArICAgICAgICAvLyBOdW1QYXJhbXMgdGVsbHMgdGhlIGFjdHVhbCBudW1i ZXIgb2YgZWxlbWVudCBpbiBQYXJhbXMNCj4gPj4gKyAgICAgICAgT1BURUVfTVNHX1BBUkFNICAg IFBhcmFtc1tNQVhfUEFSQU1TXTsNCj4gPj4gK30gT1BURUVfTVNHX0FSRzsNCj4gPj4gKw0KPiA+ PiArI2RlZmluZSBPUFRFRV9VVUlEX0xFTiAgICAgICAxNg0KPiA+PiArDQo+ID4+ICsvLw0KPiA+ PiArLy8gc3RydWN0IE9QVEVFX09QRU5fU0VTU0lPTl9BUkcgLSBPcGVuIHNlc3Npb24gYXJndW1l bnQNCj4gPj4gKy8vIEBVdWlkOiAgICAgICBbaW5dIFVVSUQgb2YgdGhlIFRydXN0ZWQgQXBwbGlj YXRpb24NCj4gPj4gKy8vIEBTZXNzaW9uOiAgICBbb3V0XSBTZXNzaW9uIGlkDQo+ID4+ICsvLyBA UmV0OiAgICAgICAgW291dF0gUmV0dXJuIHZhbHVlDQo+ID4+ICsvLyBAUmV0T3JpZ2luICAgW291 dF0gT3JpZ2luIG9mIHRoZSByZXR1cm4gdmFsdWUNCj4gPj4gKy8vDQo+ID4+ICt0eXBlZGVmIHN0 cnVjdCB7DQo+ID4+ICsgICAgICAgIFVJTlQ4ICAgICBVdWlkW09QVEVFX1VVSURfTEVOXTsNCj4g Pj4gKyAgICAgICAgVUlOVDMyICAgIFNlc3Npb247DQo+ID4+ICsgICAgICAgIFVJTlQzMiAgICBS ZXQ7DQo+ID4+ICsgICAgICAgIFVJTlQzMiAgICBSZXRPcmlnaW47DQo+ID4+ICt9IE9QVEVFX09Q RU5fU0VTU0lPTl9BUkc7DQo+ID4+ICsNCj4gPj4gKy8vDQo+ID4+ICsvLyBzdHJ1Y3QgT1BURUVf SU5WT0tFX0ZVTkNfQVJHIC0gSW52b2tlIGZ1bmN0aW9uIGFyZ3VtZW50DQo+ID4+ICsvLyBARnVu YzogICAgICAgW2luXSBUcnVzdGVkIEFwcGxpY2F0aW9uIGZ1bmN0aW9uLCBzcGVjaWZpYyB0byB0 aGUgVEENCj4gPj4gKy8vIEBTZXNzaW9uOiAgICBbaW5dIFNlc3Npb24gaWQNCj4gPj4gKy8vIEBS ZXQ6ICAgICAgICBbb3V0XSBSZXR1cm4gdmFsdWUNCj4gPj4gKy8vIEBSZXRPcmlnaW4gICBbb3V0 XSBPcmlnaW4gb2YgdGhlIHJldHVybiB2YWx1ZQ0KPiA+PiArLy8gQFBhcmFtcyAgICAgIFtpbm91 dF0gUGFyYW1ldGVycyBmb3IgZnVuY3Rpb24gdG8gYmUgaW52b2tlZA0KPiA+PiArLy8NCj4gPj4g K3R5cGVkZWYgc3RydWN0IHsNCj4gPj4gKyAgICAgICAgVUlOVDMyICAgICAgICAgICAgIEZ1bmM7 DQo+ID4+ICsgICAgICAgIFVJTlQzMiAgICAgICAgICAgICBTZXNzaW9uOw0KPiA+PiArICAgICAg ICBVSU5UMzIgICAgICAgICAgICAgUmV0Ow0KPiA+PiArICAgICAgICBVSU5UMzIgICAgICAgICAg ICAgUmV0T3JpZ2luOw0KPiA+PiArICAgICAgICBPUFRFRV9NU0dfUEFSQU0gICAgUGFyYW1zW01B WF9QQVJBTVNdOw0KPiA+PiArfSBPUFRFRV9JTlZPS0VfRlVOQ19BUkc7DQo+ID4+ICsNCj4gPj4g IEJPT0xFQU4NCj4gPj4gIEVGSUFQSQ0KPiA+PiAgSXNPcHRlZVByZXNlbnQgKA0KPiA+PiAgICBW T0lEDQo+ID4+ICAgICk7DQo+ID4+DQo+ID4+ICtFRklfU1RBVFVTDQo+ID4+ICtFRklBUEkNCj4g Pj4gK09wdGVlSW5pdCAoDQo+ID4+ICsgIFZPSUQNCj4gPj4gKyAgKTsNCj4gPj4gKw0KPiA+PiAr RUZJX1NUQVRVUw0KPiA+PiArRUZJQVBJDQo+ID4+ICtPcHRlZU9wZW5TZXNzaW9uICgNCj4gPj4g KyAgSU4gT1VUIE9QVEVFX09QRU5fU0VTU0lPTl9BUkcgICAgICAqT3BlblNlc3Npb25BcmcNCj4g Pj4gKyAgKTsNCj4gPj4gKw0KPiA+PiArRUZJX1NUQVRVUw0KPiA+PiArRUZJQVBJDQo+ID4+ICtP cHRlZUNsb3NlU2Vzc2lvbiAoDQo+ID4+ICsgIElOIFVJTlQzMiAgICAgICAgICAgICAgICAgICAg ICBTZXNzaW9uDQo+ID4+ICsgICk7DQo+ID4+ICsNCj4gPj4gK0VGSV9TVEFUVVMNCj4gPj4gK0VG SUFQSQ0KPiA+PiArT3B0ZWVJbnZva2VGdW5jICgNCj4gPj4gKyAgSU4gT1VUIE9QVEVFX0lOVk9L RV9GVU5DX0FSRyAgICAgICAqSW52b2tlRnVuY0FyZw0KPiA+PiArICApOw0KPiA+PiArDQo+ID4+ ICAjZW5kaWYNCj4gPj4gZGlmZiAtLWdpdCBhL0FybVBrZy9MaWJyYXJ5L09wdGVlTGliL09wdGVl LmMNCj4gPj4gYi9Bcm1Qa2cvTGlicmFyeS9PcHRlZUxpYi9PcHRlZS5jIGluZGV4IDU3NDUyN2Y4 YjVlYS4uMjExMTAyMmQzNjYyDQo+ID4+IDEwMDY0NA0KPiA+PiAtLS0gYS9Bcm1Qa2cvTGlicmFy eS9PcHRlZUxpYi9PcHRlZS5jDQo+ID4+ICsrKyBiL0FybVBrZy9MaWJyYXJ5L09wdGVlTGliL09w dGVlLmMNCj4gPj4gQEAgLTE0LDExICsxNCwxOSBAQA0KPiA+Pg0KPiA+PiAgKiovDQo+ID4+DQo+ ID4+ICsjaW5jbHVkZSA8TGlicmFyeS9Bcm1NbXVMaWIuaD4NCj4gPj4gICNpbmNsdWRlIDxMaWJy YXJ5L0FybVNtY0xpYi5oPg0KPiA+PiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5o Pg0KPiA+PiAgI2luY2x1ZGUgPExpYnJhcnkvQmFzZUxpYi5oPg0KPiA+PiArI2luY2x1ZGUgPExp YnJhcnkvRGVidWdMaWIuaD4NCj4gPj4gICNpbmNsdWRlIDxMaWJyYXJ5L09wdGVlTGliLmg+DQo+ ID4+DQo+ID4+ICAjaW5jbHVkZSA8SW5kdXN0cnlTdGFuZGFyZC9Bcm1TdGRTbWMuaD4NCj4gPj4g KyNpbmNsdWRlIDxJbmR1c3RyeVN0YW5kYXJkL0dsb2JhbFBsYXRmb3JtLmg+DQo+ID4+ICsjaW5j bHVkZSA8T3B0ZWVTbWMuaD4NCj4gPj4gKyNpbmNsdWRlIDxVZWZpLmg+DQo+ID4+ICsNCj4gPj4g K1NUQVRJQyBPUFRFRV9TSEFSRURfTUVNT1JZX0lORk8gT3B0ZWVTaG1JbmZvID0geyAwIH07DQo+ ID4+DQo+ID4+ICAvKioNCj4gPj4gICAgQ2hlY2sgZm9yIE9QLVRFRSBwcmVzZW5jZS4NCj4gPj4g QEAgLTMxLDYgKzM5LDcgQEAgSXNPcHRlZVByZXNlbnQgKA0KPiA+PiAgew0KPiA+PiAgICBBUk1f U01DX0FSR1MgQXJtU21jQXJnczsNCj4gPj4NCj4gPj4gKyAgWmVyb01lbSAoJkFybVNtY0FyZ3Ms IHNpemVvZiAoQVJNX1NNQ19BUkdTKSk7DQo+ID4+ICAgIC8vIFNlbmQgYSBUcnVzdGVkIE9TIENh bGxzIFVJRCBjb21tYW5kDQo+ID4+ICAgIEFybVNtY0FyZ3MuQXJnMCA9IEFSTV9TTUNfSURfVE9T X1VJRDsNCj4gPj4gICAgQXJtQ2FsbFNtYyAoJkFybVNtY0FyZ3MpOw0KPiA+PiBAQCAtNDQsMyAr NTMsMzUyIEBAIElzT3B0ZWVQcmVzZW50ICgNCj4gPj4gICAgICByZXR1cm4gRkFMU0U7DQo+ID4+ ICAgIH0NCj4gPj4gIH0NCj4gPj4gKw0KPiA+PiArU1RBVElDDQo+ID4+ICtFRklfU1RBVFVTDQo+ ID4+ICtPcHRlZVNobU1lbVJlbWFwICgNCj4gPj4gKyAgVk9JRA0KPiA+PiArICApDQo+ID4+ICt7 DQo+ID4+ICsgIEFSTV9TTUNfQVJHUyAgICAgICAgICAgICAgICAgQXJtU21jQXJnczsNCj4gPj4g KyAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgICAgICAgICBQYWRkcjsNCj4gPj4gKyAgRUZJX1BIWVNJ Q0FMX0FERFJFU1MgICAgICAgICBTdGFydDsNCj4gPj4gKyAgRUZJX1BIWVNJQ0FMX0FERFJFU1Mg ICAgICAgICBFbmQ7DQo+ID4+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgU3RhdHVz Ow0KPiA+PiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgIFNpemU7DQo+ID4+ICsNCj4g Pj4gKyAgWmVyb01lbSAoJkFybVNtY0FyZ3MsIHNpemVvZiAoQVJNX1NNQ19BUkdTKSk7DQo+ID4+ ICsgIEFybVNtY0FyZ3MuQXJnMCA9IE9QVEVFX1NNQ19HRVRfU0hNX0NPTkZJRzsNCj4gPj4gKw0K PiA+PiArICBBcm1DYWxsU21jICgmQXJtU21jQXJncyk7DQo+ID4+ICsgIGlmIChBcm1TbWNBcmdz LkFyZzAgIT0gT1BURUVfU01DX1JFVFVSTl9PSykgew0KPiA+PiArICAgIERFQlVHICgoREVCVUdf V0FSTiwgIk9QLVRFRSBzaGFyZWQgbWVtb3J5IG5vdCBzdXBwb3J0ZWRcbiIpKTsNCj4gPj4gKyAg ICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiA+PiArICB9DQo+ID4+ICsNCj4gPj4gKyAgaWYg KEFybVNtY0FyZ3MuQXJnMyAhPSBPUFRFRV9TTUNfU0hNX0NBQ0hFRCkgew0KPiA+PiArICAgIERF QlVHICgoREVCVUdfV0FSTiwgIk9QLVRFRTogT25seSBub3JtYWwgY2FjaGVkIHNoYXJlZA0KPiBt ZW1vcnkNCj4gPj4gc3VwcG9ydGVkXG4iKSk7DQo+ID4+ICsgICAgcmV0dXJuIEVGSV9VTlNVUFBP UlRFRDsNCj4gPj4gKyAgfQ0KPiA+PiArDQo+ID4+ICsgIFN0YXJ0ID0gKEFybVNtY0FyZ3MuQXJn MSArIFNJWkVfNEtCIC0gMSkgJiB+KFNJWkVfNEtCIC0gMSk7ICBFbmQgPQ0KPiA+PiArIChBcm1T bWNBcmdzLkFyZzEgKyBBcm1TbWNBcmdzLkFyZzIpICYgfihTSVpFXzRLQiAtIDEpOyAgUGFkZHIg PQ0KPiA+PiArIFN0YXJ0OyBTaXplID0gRW5kIC0gU3RhcnQ7DQo+ID4+ICsNCj4gPj4gKyAgaWYg KFNpemUgPCBTSVpFXzRLQikgew0KPiA+PiArICAgIERFQlVHICgoREVCVUdfV0FSTiwgIk9QLVRF RSBzaGFyZWQgbWVtb3J5IHRvbyBzbWFsbFxuIikpOw0KPiA+PiArICAgIHJldHVybiBFRklfQlVG RkVSX1RPT19TTUFMTDsNCj4gPj4gKyAgfQ0KPiA+PiArDQo+ID4+ICsgIFN0YXR1cyA9IEFybVNl dE1lbW9yeUF0dHJpYnV0ZXMgKFBhZGRyLCBTaXplLCBFRklfTUVNT1JZX1dCKTsgIGlmDQo+ID4+ ICsgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+PiArICAgIHJldHVybiBTdGF0dXM7DQo+ID4+ ICsgIH0NCj4gPj4gKw0KPiA+PiArICBPcHRlZVNobUluZm8uQmFzZSA9IChVSU5UTilQYWRkcjsN Cj4gPj4gKyAgT3B0ZWVTaG1JbmZvLlNpemUgPSBTaXplOw0KPiA+PiArDQo+ID4+ICsgIHJldHVy biBFRklfU1VDQ0VTUzsNCj4gPj4gK30NCj4gPj4gKw0KPiA+PiArRUZJX1NUQVRVUw0KPiA+PiAr RUZJQVBJDQo+ID4+ICtPcHRlZUluaXQgKA0KPiA+PiArICBWT0lEDQo+ID4+ICsgICkNCj4gPj4g K3sNCj4gPj4gKyAgRUZJX1NUQVRVUyAgICAgIFN0YXR1czsNCj4gPj4gKw0KPiA+PiArICBpZiAo IUlzT3B0ZWVQcmVzZW50ICgpKSB7DQo+ID4+ICsgICAgREVCVUcgKChERUJVR19XQVJOLCAiT1At VEVFIG5vdCBwcmVzZW50XG4iKSk7DQo+ID4+ICsgICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsN Cj4gPj4gKyAgfQ0KPiA+PiArDQo+ID4+ICsgIFN0YXR1cyA9IE9wdGVlU2htTWVtUmVtYXAgKCk7 DQo+ID4+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPj4gKyAgICBERUJVRyAoKERF QlVHX1dBUk4sICJPUC1URUUgc2hhcmVkIG1lbW9yeSByZW1hcCBmYWlsZWRcbiIpKTsNCj4gPj4g KyAgICByZXR1cm4gU3RhdHVzOw0KPiA+PiArICB9DQo+ID4+ICsNCj4gPj4gKyAgcmV0dXJuIEVG SV9TVUNDRVNTOw0KPiA+PiArfQ0KPiA+PiArDQo+ID4+ICsvKioNCj4gPj4gKyAgRG9lcyBTdGFu ZGFyZCBTTUMgdG8gT1AtVEVFIGluIHNlY3VyZSB3b3JsZC4NCj4gPj4gKw0KPiA+PiArICBAcGFy YW1baW5dICBQYXJnICAgUGh5c2ljYWwgYWRkcmVzcyBvZiBtZXNzYWdlIHRvIHBhc3MgdG8gc2Vj dXJlIHdvcmxkDQo+ID4+ICsNCj4gPj4gKyAgQHJldHVybiAgICAgICAgICAgIDAgb24gc3VjY2Vz cywgc2VjdXJlIHdvcmxkIHJldHVybiBjb2RlIG90aGVyd2lzZQ0KPiA+PiArDQo+ID4+ICsqKi8N Cj4gPj4gK1NUQVRJQw0KPiA+PiArVUlOVDMyDQo+ID4+ICtPcHRlZUNhbGxXaXRoQXJnICgNCj4g Pj4gKyAgSU4gRUZJX1BIWVNJQ0FMX0FERFJFU1MgUGFyZw0KPiA+PiArICApDQo+ID4+ICt7DQo+ ID4+ICsgIEFSTV9TTUNfQVJHUyBBcm1TbWNBcmdzOw0KPiA+PiArDQo+ID4+ICsgIFplcm9NZW0g KCZBcm1TbWNBcmdzLCBzaXplb2YgKEFSTV9TTUNfQVJHUykpOw0KPiA+PiArICBBcm1TbWNBcmdz LkFyZzAgPSBPUFRFRV9TTUNfQ0FMTF9XSVRIX0FSRzsNCj4gPj4gKyAgQXJtU21jQXJncy5Bcmcx ID0gKFVJTlQzMikoUGFyZyA+PiAzMik7DQo+ID4+ICsgIEFybVNtY0FyZ3MuQXJnMiA9IChVSU5U MzIpUGFyZzsNCj4gPj4gKw0KPiA+PiArICB3aGlsZSAoVFJVRSkgew0KPiA+PiArICAgIEFybUNh bGxTbWMgKCZBcm1TbWNBcmdzKTsNCj4gPj4gKw0KPiA+PiArICAgIGlmIChBcm1TbWNBcmdzLkFy ZzAgPT0gT1BURUVfU01DX1JFVFVSTl9SUENfRk9SRUlHTl9JTlRSKSB7DQo+ID4+ICsgICAgICAv Lw0KPiA+PiArICAgICAgLy8gQSBmb3JlaWduIGludGVycnVwdCB3YXMgcmFpc2VkIHdoaWxlIHNl Y3VyZSB3b3JsZCB3YXMNCj4gPj4gKyAgICAgIC8vIGV4ZWN1dGluZywgc2luY2UgdGhleSBhcmUg aGFuZGxlZCBpbiBVRUZJIGEgZHVtbXkgUlBDIGlzDQo+ID4+ICsgICAgICAvLyBwZXJmb3JtZWQg dG8gbGV0IFVFRkkgdGFrZSB0aGUgaW50ZXJydXB0IHRocm91Z2ggdGhlIG5vcm1hbA0KPiA+PiAr ICAgICAgLy8gdmVjdG9yLg0KPiA+PiArICAgICAgLy8NCj4gPj4gKyAgICAgIEFybVNtY0FyZ3Mu QXJnMCA9IE9QVEVFX1NNQ19SRVRVUk5fRlJPTV9SUEM7DQo+ID4+ICsgICAgfSBlbHNlIHsNCj4g Pj4gKyAgICAgIGJyZWFrOw0KPiA+PiArICAgIH0NCj4gPj4gKyAgfQ0KPiA+PiArDQo+ID4+ICsg IHJldHVybiBBcm1TbWNBcmdzLkFyZzA7DQo+ID4+ICt9DQo+ID4+ICsNCj4gPj4gK0VGSV9TVEFU VVMNCj4gPj4gK0VGSUFQSQ0KPiA+PiArT3B0ZWVPcGVuU2Vzc2lvbiAoDQo+ID4+ICsgIElOIE9V VCBPUFRFRV9PUEVOX1NFU1NJT05fQVJHICAgICAgKk9wZW5TZXNzaW9uQXJnDQo+ID4+ICsgICkN Cj4gPj4gK3sNCj4gPj4gKyAgT1BURUVfTVNHX0FSRyAgICAqTXNnQXJnOw0KPiA+PiArDQo+ID4+ ICsgIE1zZ0FyZyA9IE5VTEw7DQo+ID4+ICsNCj4gPj4gKyAgaWYgKE9wdGVlU2htSW5mby5CYXNl ID09IDApIHsNCj4gPj4gKyAgICBERUJVRyAoKERFQlVHX1dBUk4sICJPUC1URUUgbm90IGluaXRp YWxpemVkXG4iKSk7DQo+ID4+ICsgICAgcmV0dXJuIEVGSV9OT1RfU1RBUlRFRDsNCj4gPj4gKyAg fQ0KPiA+PiArDQo+ID4+ICsgIE1zZ0FyZyA9IChPUFRFRV9NU0dfQVJHICopT3B0ZWVTaG1JbmZv LkJhc2U7ICBaZXJvTWVtIChNc2dBcmcsDQo+ID4+IHNpemVvZg0KPiA+PiArIChPUFRFRV9NU0df QVJHKSk7DQo+ID4+ICsNCj4gPj4gKyAgTXNnQXJnLT5DbWQgPSBPUFRFRV9NU0dfQ01EX09QRU5f U0VTU0lPTjsNCj4gPj4gKw0KPiA+PiArICAvLw0KPiA+PiArICAvLyBJbml0aWFsaXplIGFuZCBh ZGQgdGhlIG1ldGEgcGFyYW1ldGVycyBuZWVkZWQgd2hlbiBvcGVuaW5nIGENCj4gPj4gKyAvLyBz ZXNzaW9uLg0KPiA+PiArICAvLw0KPiA+PiArICBNc2dBcmctPlBhcmFtc1swXS5BdHRyID0gT1BU RUVfTVNHX0FUVFJfVFlQRV9WQUxVRV9JTlBVVCB8DQo+ID4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICBPUFRFRV9NU0dfQVRUUl9NRVRBOw0KPiA+PiArIE1zZ0FyZy0+UGFyYW1zWzFdLkF0 dHIgPSBPUFRFRV9NU0dfQVRUUl9UWVBFX1ZBTFVFX0lOUFVUIHwNCj4gPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIE9QVEVFX01TR19BVFRSX01FVEE7ICBDb3B5TWVtDQo+ID4+ICsgKCZN c2dBcmctPlBhcmFtc1swXS5VLlZhbHVlLCBPcGVuU2Vzc2lvbkFyZy0+VXVpZCwNCj4gT1BURUVf VVVJRF9MRU4pOw0KPiA+PiArIFplcm9NZW0gKCZNc2dBcmctPlBhcmFtc1sxXS5VLlZhbHVlLCBP UFRFRV9VVUlEX0xFTik7DQo+ID4+ICsgTXNnQXJnLT5QYXJhbXNbMV0uVS5WYWx1ZS5DID0gVEVF X0xPR0lOX1BVQkxJQzsNCj4gPj4gKw0KPiA+PiArICBNc2dBcmctPk51bVBhcmFtcyA9IDI7DQo+ ID4+ICsNCj4gPj4gKyAgaWYgKE9wdGVlQ2FsbFdpdGhBcmcgKChFRklfUEhZU0lDQUxfQUREUkVT UylNc2dBcmcpKSB7DQo+ID4+ICsgICAgTXNnQXJnLT5SZXQgPSBURUVDX0VSUk9SX0NPTU1VTklD QVRJT047DQo+ID4+ICsgICAgTXNnQXJnLT5SZXRPcmlnaW4gPSBURUVDX09SSUdJTl9DT01NUzsg IH0NCj4gPj4gKw0KPiA+PiArICBPcGVuU2Vzc2lvbkFyZy0+U2Vzc2lvbiA9IE1zZ0FyZy0+U2Vz c2lvbjsgIE9wZW5TZXNzaW9uQXJnLT5SZXQgPQ0KPiA+PiArIE1zZ0FyZy0+UmV0OyAgT3BlblNl c3Npb25BcmctPlJldE9yaWdpbiA9IE1zZ0FyZy0+UmV0T3JpZ2luOw0KPiA+PiArDQo+ID4+ICsg IHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPj4gK30NCj4gPj4gKw0KPiA+PiArRUZJX1NUQVRVUw0K PiA+PiArRUZJQVBJDQo+ID4+ICtPcHRlZUNsb3NlU2Vzc2lvbiAoDQo+ID4+ICsgIElOIFVJTlQz MiAgICAgICAgICAgICAgICAgICAgICBTZXNzaW9uDQo+ID4+ICsgICkNCj4gPj4gK3sNCj4gPj4g KyAgT1BURUVfTVNHX0FSRyAgICAqTXNnQXJnOw0KPiA+PiArDQo+ID4+ICsgIE1zZ0FyZyA9IE5V TEw7DQo+ID4+ICsNCj4gPj4gKyAgaWYgKE9wdGVlU2htSW5mby5CYXNlID09IDApIHsNCj4gPj4g KyAgICBERUJVRyAoKERFQlVHX1dBUk4sICJPUC1URUUgbm90IGluaXRpYWxpemVkXG4iKSk7DQo+ ID4+ICsgICAgcmV0dXJuIEVGSV9OT1RfU1RBUlRFRDsNCj4gPj4gKyAgfQ0KPiA+PiArDQo+ID4+ ICsgIE1zZ0FyZyA9IChPUFRFRV9NU0dfQVJHICopT3B0ZWVTaG1JbmZvLkJhc2U7ICBaZXJvTWVt IChNc2dBcmcsDQo+ID4+IHNpemVvZg0KPiA+PiArIChPUFRFRV9NU0dfQVJHKSk7DQo+ID4+ICsN Cj4gPj4gKyAgTXNnQXJnLT5DbWQgPSBPUFRFRV9NU0dfQ01EX0NMT1NFX1NFU1NJT047ICBNc2dB cmctPlNlc3Npb24NCj4gPQ0KPiA+PiArIFNlc3Npb247DQo+ID4+ICsNCj4gPj4gKyAgT3B0ZWVD YWxsV2l0aEFyZyAoKEVGSV9QSFlTSUNBTF9BRERSRVNTKU1zZ0FyZyk7DQo+ID4+ICsNCj4gPj4g KyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+PiArfQ0KPiA+PiArDQo+ID4+ICtTVEFUSUMNCj4g Pj4gK0VGSV9TVEFUVVMNCj4gPj4gK09wdGVlVG9Nc2dQYXJhbSAoDQo+ID4+ICsgIE9VVCBPUFRF RV9NU0dfUEFSQU0gICAgKk1zZ1BhcmFtcywNCj4gPj4gKyAgSU4gVUlOVDMyICAgICAgICAgICAg ICBOdW1QYXJhbXMsDQo+ID4+ICsgIElOIE9QVEVFX01TR19QQVJBTSAgICAgKkluUGFyYW1zDQo+ ID4+ICsgICkNCj4gPj4gK3sNCj4gPj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgSWR4Ow0K PiA+PiArICBVSU5UTiAgICAgICAgICAgICAgICAgICBQYXJhbVNobUFkZHI7DQo+ID4+ICsgIFVJ TlROICAgICAgICAgICAgICAgICAgIFNobVNpemU7DQo+ID4+ICsgIFVJTlROICAgICAgICAgICAg ICAgICAgIFNpemU7DQo+ID4+ICsNCj4gPj4gKyAgU2l6ZSA9IChzaXplb2YgKE9QVEVFX01TR19B UkcpICsgc2l6ZW9mIChVSU5UNjQpIC0gMSkgJiB+KHNpemVvZg0KPiA+PiArIChVSU5UNjQpIC0g MSk7ICBQYXJhbVNobUFkZHIgPSBPcHRlZVNobUluZm8uQmFzZSArIFNpemU7ICBTaG1TaXplID0N Cj4gPj4gKyBPcHRlZVNobUluZm8uU2l6ZSAtIFNpemU7DQo+ID4+ICsNCj4gPj4gKyAgZm9yIChJ ZHggPSAwOyBJZHggPCBOdW1QYXJhbXM7IElkeCsrKSB7DQo+ID4+ICsgICAgQ09OU1QgT1BURUVf TVNHX1BBUkFNICAgICpJcDsNCj4gPj4gKyAgICBPUFRFRV9NU0dfUEFSQU0gICAgICAgICAgKk1w Ow0KPiA+PiArICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICBBdHRyOw0KPiA+PiArDQo+ID4+ ICsgICAgSXAgPSBJblBhcmFtcyArIElkeDsNCj4gPj4gKyAgICBNcCA9IE1zZ1BhcmFtcyArIElk eDsNCj4gPj4gKyAgICBBdHRyID0gSXAtPkF0dHIgJiBPUFRFRV9NU0dfQVRUUl9UWVBFX01BU0s7 DQo+ID4+ICsNCj4gPj4gKyAgICBzd2l0Y2ggKEF0dHIpIHsNCj4gPj4gKyAgICBjYXNlIE9QVEVF X01TR19BVFRSX1RZUEVfTk9ORToNCj4gPj4gKyAgICAgIE1wLT5BdHRyID0gT1BURUVfTVNHX0FU VFJfVFlQRV9OT05FOw0KPiA+PiArICAgICAgWmVyb01lbSAoJk1wLT5VLCBzaXplb2YgKE1wLT5V KSk7DQo+ID4+ICsgICAgICBicmVhazsNCj4gPj4gKw0KPiA+PiArICAgIGNhc2UgT1BURUVfTVNH X0FUVFJfVFlQRV9WQUxVRV9JTlBVVDoNCj4gPj4gKyAgICBjYXNlIE9QVEVFX01TR19BVFRSX1RZ UEVfVkFMVUVfT1VUUFVUOg0KPiA+PiArICAgIGNhc2UgT1BURUVfTVNHX0FUVFJfVFlQRV9WQUxV RV9JTk9VVDoNCj4gPj4gKyAgICAgIE1wLT5BdHRyID0gQXR0cjsNCj4gPj4gKyAgICAgIE1wLT5V LlZhbHVlLkEgPSBJcC0+VS5WYWx1ZS5BOw0KPiA+PiArICAgICAgTXAtPlUuVmFsdWUuQiA9IElw LT5VLlZhbHVlLkI7DQo+ID4+ICsgICAgICBNcC0+VS5WYWx1ZS5DID0gSXAtPlUuVmFsdWUuQzsN Cj4gPj4gKyAgICAgIGJyZWFrOw0KPiA+PiArDQo+ID4+ICsgICAgY2FzZSBPUFRFRV9NU0dfQVRU Ul9UWVBFX01FTV9JTlBVVDoNCj4gPj4gKyAgICBjYXNlIE9QVEVFX01TR19BVFRSX1RZUEVfTUVN X09VVFBVVDoNCj4gPj4gKyAgICBjYXNlIE9QVEVFX01TR19BVFRSX1RZUEVfTUVNX0lOT1VUOg0K PiA+PiArICAgICAgTXAtPkF0dHIgPSBBdHRyOw0KPiA+PiArDQo+ID4+ICsgICAgICBpZiAoSXAt PlUuTWVtLlNpemUgPiBTaG1TaXplKSB7DQo+ID4+ICsgICAgICAgIHJldHVybiBFRklfT1VUX09G X1JFU09VUkNFUzsNCj4gPj4gKyAgICAgIH0NCj4gPj4gKw0KPiA+PiArICAgICAgQ29weU1lbSAo KFZPSUQgKilQYXJhbVNobUFkZHIsIChWT0lEICopSXAtPlUuTWVtLkJ1ZlB0ciwgSXAtDQo+ID4+ ID5VLk1lbS5TaXplKTsNCj4gPj4gKyAgICAgIE1wLT5VLk1lbS5CdWZQdHIgPSAoVUlOVDY0KVBh cmFtU2htQWRkcjsNCj4gPj4gKyAgICAgIE1wLT5VLk1lbS5TaXplID0gSXAtPlUuTWVtLlNpemU7 DQo+ID4+ICsNCj4gPj4gKyAgICAgIFNpemUgPSAoSXAtPlUuTWVtLlNpemUgKyBzaXplb2YgKFVJ TlQ2NCkgLSAxKSAmIH4oc2l6ZW9mIChVSU5UNjQpIC0gMSk7DQo+ID4+ICsgICAgICBQYXJhbVNo bUFkZHIgKz0gU2l6ZTsNCj4gPj4gKyAgICAgIFNobVNpemUgLT0gU2l6ZTsNCj4gPj4gKyAgICAg IGJyZWFrOw0KPiA+PiArDQo+ID4+ICsgICAgZGVmYXVsdDoNCj4gPj4gKyAgICAgIHJldHVybiBF RklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4+ICsgICAgfQ0KPiA+PiArICB9DQo+ID4+ICsNCj4g Pj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+PiArfQ0KPiA+PiArDQo+ID4+ICtTVEFUSUMN Cj4gPj4gK0VGSV9TVEFUVVMNCj4gPj4gK09wdGVlRnJvbU1zZ1BhcmFtICgNCj4gPj4gKyAgT1VU IE9QVEVFX01TR19QQVJBTSAgICAqT3V0UGFyYW1zLA0KPiA+PiArICBJTiBVSU5UMzIgICAgICAg ICAgICAgIE51bVBhcmFtcywNCj4gPj4gKyAgSU4gT1BURUVfTVNHX1BBUkFNICAgICAqTXNnUGFy YW1zDQo+ID4+ICsgICkNCj4gPj4gK3sNCj4gPj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICBJ ZHg7DQo+ID4+ICsNCj4gPj4gKyAgZm9yIChJZHggPSAwOyBJZHggPCBOdW1QYXJhbXM7IElkeCsr KSB7DQo+ID4+ICsgICAgT1BURUVfTVNHX1BBUkFNICAgICAgICAgICpPcDsNCj4gPj4gKyAgICBD T05TVCBPUFRFRV9NU0dfUEFSQU0gICAgKk1wOw0KPiA+PiArICAgIFVJTlQzMiAgICAgICAgICAg ICAgICAgICBBdHRyOw0KPiA+PiArDQo+ID4+ICsgICAgT3AgPSBPdXRQYXJhbXMgKyBJZHg7DQo+ ID4+ICsgICAgTXAgPSBNc2dQYXJhbXMgKyBJZHg7DQo+ID4+ICsgICAgQXR0ciA9IE1wLT5BdHRy ICYgT1BURUVfTVNHX0FUVFJfVFlQRV9NQVNLOw0KPiA+PiArDQo+ID4+ICsgICAgc3dpdGNoIChB dHRyKSB7DQo+ID4+ICsgICAgY2FzZSBPUFRFRV9NU0dfQVRUUl9UWVBFX05PTkU6DQo+ID4+ICsg ICAgICBPcC0+QXR0ciA9IE9QVEVFX01TR19BVFRSX1RZUEVfTk9ORTsNCj4gPj4gKyAgICAgIFpl cm9NZW0gKCZPcC0+VSwgc2l6ZW9mIChPcC0+VSkpOw0KPiA+PiArICAgICAgYnJlYWs7DQo+ID4+ ICsNCj4gPj4gKyAgICBjYXNlIE9QVEVFX01TR19BVFRSX1RZUEVfVkFMVUVfSU5QVVQ6DQo+ID4+ ICsgICAgY2FzZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1ZBTFVFX09VVFBVVDoNCj4gPj4gKyAgICBj YXNlIE9QVEVFX01TR19BVFRSX1RZUEVfVkFMVUVfSU5PVVQ6DQo+ID4+ICsgICAgICBPcC0+QXR0 ciA9IEF0dHI7DQo+ID4+ICsgICAgICBPcC0+VS5WYWx1ZS5BID0gTXAtPlUuVmFsdWUuQTsNCj4g Pj4gKyAgICAgIE9wLT5VLlZhbHVlLkIgPSBNcC0+VS5WYWx1ZS5COw0KPiA+PiArICAgICAgT3At PlUuVmFsdWUuQyA9IE1wLT5VLlZhbHVlLkM7DQo+ID4+ICsgICAgICBicmVhazsNCj4gPj4gKw0K PiA+PiArICAgIGNhc2UgT1BURUVfTVNHX0FUVFJfVFlQRV9NRU1fSU5QVVQ6DQo+ID4+ICsgICAg Y2FzZSBPUFRFRV9NU0dfQVRUUl9UWVBFX01FTV9PVVRQVVQ6DQo+ID4+ICsgICAgY2FzZSBPUFRF RV9NU0dfQVRUUl9UWVBFX01FTV9JTk9VVDoNCj4gPj4gKyAgICAgIE9wLT5BdHRyID0gQXR0cjsN Cj4gPj4gKw0KPiA+PiArICAgICAgaWYgKE1wLT5VLk1lbS5TaXplID4gT3AtPlUuTWVtLlNpemUp IHsNCj4gPj4gKyAgICAgICAgcmV0dXJuIEVGSV9CQURfQlVGRkVSX1NJWkU7DQo+ID4+ICsgICAg ICB9DQo+ID4+ICsNCj4gPj4gKyAgICAgIENvcHlNZW0gKChWT0lEICopT3AtPlUuTWVtLkJ1ZlB0 ciwgKFZPSUQgKilNcC0+VS5NZW0uQnVmUHRyLA0KPiA+PiBNcC0+VS5NZW0uU2l6ZSk7DQo+ID4+ ICsgICAgICBPcC0+VS5NZW0uU2l6ZSA9IE1wLT5VLk1lbS5TaXplOw0KPiA+PiArICAgICAgYnJl YWs7DQo+ID4+ICsNCj4gPj4gKyAgICBkZWZhdWx0Og0KPiA+PiArICAgICAgcmV0dXJuIEVGSV9J TlZBTElEX1BBUkFNRVRFUjsNCj4gPj4gKyAgICB9DQo+ID4+ICsgIH0NCj4gPj4gKw0KPiA+PiAr ICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4+ICt9DQo+ID4+ICsNCj4gPj4gK0VGSV9TVEFUVVMN Cj4gPj4gK0VGSUFQSQ0KPiA+PiArT3B0ZWVJbnZva2VGdW5jICgNCj4gPj4gKyAgSU4gT1VUIE9Q VEVFX0lOVk9LRV9GVU5DX0FSRyAgICAgICAqSW52b2tlRnVuY0FyZw0KPiA+PiArICApDQo+ID4+ ICt7DQo+ID4+ICsgIEVGSV9TVEFUVVMgICAgICAgU3RhdHVzOw0KPiA+PiArICBPUFRFRV9NU0df QVJHICAgICpNc2dBcmc7DQo+ID4+ICsNCj4gPj4gKyAgTXNnQXJnID0gTlVMTDsNCj4gPj4gKw0K PiA+PiArICBpZiAoT3B0ZWVTaG1JbmZvLkJhc2UgPT0gMCkgew0KPiA+PiArICAgIERFQlVHICgo REVCVUdfV0FSTiwgIk9QLVRFRSBub3QgaW5pdGlhbGl6ZWRcbiIpKTsNCj4gPj4gKyAgICByZXR1 cm4gRUZJX05PVF9TVEFSVEVEOw0KPiA+PiArICB9DQo+ID4+ICsNCj4gPj4gKyAgTXNnQXJnID0g KE9QVEVFX01TR19BUkcgKilPcHRlZVNobUluZm8uQmFzZTsgIFplcm9NZW0gKE1zZ0FyZywNCj4g Pj4gc2l6ZW9mDQo+ID4+ICsgKE9QVEVFX01TR19BUkcpKTsNCj4gPj4gKw0KPiA+PiArICBNc2dB cmctPkNtZCA9IE9QVEVFX01TR19DTURfSU5WT0tFX0NPTU1BTkQ7ICBNc2dBcmctDQo+ID5GdW5j ID0NCj4gPj4gKyBJbnZva2VGdW5jQXJnLT5GdW5jOyAgTXNnQXJnLT5TZXNzaW9uID0gSW52b2tl RnVuY0FyZy0+U2Vzc2lvbjsNCj4gPj4gKw0KPiA+PiArICBTdGF0dXMgPSBPcHRlZVRvTXNnUGFy YW0gKE1zZ0FyZy0+UGFyYW1zLCBNQVhfUEFSQU1TLA0KPiA+PiArIEludm9rZUZ1bmNBcmctPlBh cmFtcyk7ICBpZiAoU3RhdHVzKQ0KPiA+PiArICAgIHJldHVybiBTdGF0dXM7DQo+ID4+ICsNCj4g Pj4gKyAgTXNnQXJnLT5OdW1QYXJhbXMgPSBNQVhfUEFSQU1TOw0KPiA+PiArDQo+ID4+ICsgIGlm IChPcHRlZUNhbGxXaXRoQXJnICgoRUZJX1BIWVNJQ0FMX0FERFJFU1MpTXNnQXJnKSkgew0KPiA+ PiArICAgIE1zZ0FyZy0+UmV0ID0gVEVFQ19FUlJPUl9DT01NVU5JQ0FUSU9OOw0KPiA+PiArICAg IE1zZ0FyZy0+UmV0T3JpZ2luID0gVEVFQ19PUklHSU5fQ09NTVM7ICB9DQo+ID4+ICsNCj4gPj4g KyAgaWYgKE9wdGVlRnJvbU1zZ1BhcmFtIChJbnZva2VGdW5jQXJnLT5QYXJhbXMsIE1BWF9QQVJB TVMsDQo+ID4+IE1zZ0FyZy0+UGFyYW1zKSkgew0KPiA+PiArICAgIE1zZ0FyZy0+UmV0ID0gVEVF Q19FUlJPUl9DT01NVU5JQ0FUSU9OOw0KPiA+PiArICAgIE1zZ0FyZy0+UmV0T3JpZ2luID0gVEVF Q19PUklHSU5fQ09NTVM7ICB9DQo+ID4+ICsNCj4gPj4gKyAgSW52b2tlRnVuY0FyZy0+UmV0ID0g TXNnQXJnLT5SZXQ7DQo+ID4+ICsgIEludm9rZUZ1bmNBcmctPlJldE9yaWdpbiA9IE1zZ0FyZy0+ UmV0T3JpZ2luOw0KPiA+PiArDQo+ID4+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPj4gK30N Cj4gPj4gZGlmZiAtLWdpdCBhL0FybVBrZy9MaWJyYXJ5L09wdGVlTGliL09wdGVlTGliLmluZg0K PiA+PiBiL0FybVBrZy9MaWJyYXJ5L09wdGVlTGliL09wdGVlTGliLmluZg0KPiA+PiBpbmRleCA1 YWJkNDI3Mzc5Y2MuLmUwMzA1NGE3MTY3ZCAxMDA2NDQNCj4gPj4gLS0tIGEvQXJtUGtnL0xpYnJh cnkvT3B0ZWVMaWIvT3B0ZWVMaWIuaW5mDQo+ID4+ICsrKyBiL0FybVBrZy9MaWJyYXJ5L09wdGVl TGliL09wdGVlTGliLmluZg0KPiA+PiBAQCAtMjMsMTEgKzIzLDEzIEBAIFtEZWZpbmVzXQ0KPiA+ Pg0KPiA+PiAgW1NvdXJjZXNdDQo+ID4+ICAgIE9wdGVlLmMNCj4gPj4gKyAgT3B0ZWVTbWMuaA0K PiA+Pg0KPiA+PiAgW1BhY2thZ2VzXQ0KPiA+PiAgICBBcm1Qa2cvQXJtUGtnLmRlYw0KPiA+PiAg ICBNZGVQa2cvTWRlUGtnLmRlYw0KPiA+Pg0KPiA+PiAgW0xpYnJhcnlDbGFzc2VzXQ0KPiA+PiAr ICBBcm1NbXVMaWINCj4gPj4gICAgQXJtU21jTGliDQo+ID4+ICAgIEJhc2VMaWINCj4gPj4gZGlm ZiAtLWdpdCBhL0FybVBrZy9MaWJyYXJ5L09wdGVlTGliL09wdGVlU21jLmgNCj4gPj4gYi9Bcm1Q a2cvTGlicmFyeS9PcHRlZUxpYi9PcHRlZVNtYy5oDQo+ID4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQo+ID4+IGluZGV4IDAwMDAwMDAwMDAwMC4uZTJlYTM1Nzg0YTBhDQo+ID4+IC0tLSAvZGV2L251 bGwNCj4gPj4gKysrIGIvQXJtUGtnL0xpYnJhcnkvT3B0ZWVMaWIvT3B0ZWVTbWMuaA0KPiA+PiBA QCAtMCwwICsxLDQzIEBADQo+ID4+ICsvKiogQGZpbGUNCj4gPj4gKyAgT1AtVEVFIFNNQyBoZWFk ZXIgZmlsZS4NCj4gPj4gKw0KPiA+PiArICBDb3B5cmlnaHQgKGMpIDIwMTgsIExpbmFybyBMdGQu IEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+PiArDQo+ID4+ICsgIFRoaXMgcHJvZ3JhbSBh bmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgIGFyZSBsaWNlbnNlZCBhbmQgbWFkZQ0KPiA+ PiArIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBM aWNlbnNlICB3aGljaA0KPiA+PiArIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhl IGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUNCj4gPj4gKyBmb3VuZCBhdA0KPiA+PiAr DQo+ID4+ICsNCj4gPj4NCj4gaHR0cHM6Ly9lbWVhMDEuc2FmZWxpbmtzLnByb3RlY3Rpb24ub3V0 bG9vay5jb20vP3VybD1odHRwJTNBJTJGJTJGb3BlDQo+ID4+IG4NCj4gPj4gKyBzb3VyY2Uub3Jn JTJGbGljZW5zZXMlMkZic2QtDQo+ID4+IGxpY2Vuc2UucGhwJmFtcDtkYXRhPTAyJTdDMDElN0N1 ZGl0Lmt1bWFyJQ0KPiA+PiArDQo+ID4+DQo+IDQwbnhwLmNvbSU3Q2U5NTYzNWQwYzNjNzRlZGJm Nzk4MDhkNjA5YTMwYzdiJTdDNjg2ZWExZDNiYzJiNGM2Zg0KPiA+PiBhOTJjZDk5DQo+ID4+ICsN Cj4gPj4NCj4gYzVjMzAxNjM1JTdDMCU3QzAlN0M2MzY3MDY5OTMyNTA1MzUzNzEmYW1wO3NkYXRh PXB5WkY5S3UzcUVwcA0KPiA+PiBPT0tDeXNoYmcNCj4gPj4gKyA5b0NUNFA2QXdNMm9sS1kzJTJC MkltV3MlM0QmYW1wO3Jlc2VydmVkPTANCj4gPj4gKw0KPiA+PiArICBUSEUgUFJPR1JBTSBJUyBE SVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIg0KPiA+PiBCQVNJ UywNCj4gPj4gKyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBL SU5ELCBFSVRIRVINCj4gPj4gRVhQUkVTUyBPUiBJTVBMSUVELg0KPiA+PiArDQo+ID4+ICsqKi8N Cj4gPj4gKw0KPiA+PiArI2lmbmRlZiBfT1BURUVfU01DX0hfDQo+ID4+ICsjZGVmaW5lIF9PUFRF RV9TTUNfSF8NCj4gPj4gKw0KPiA+PiArLyogUmV0dXJuZWQgaW4gQXJnMCBvbmx5IGZyb20gVHJ1 c3RlZCBPUyBmdW5jdGlvbnMgKi8NCj4gPj4gKyNkZWZpbmUgT1BURUVfU01DX1JFVFVSTl9PSyAg ICAgICAgICAgICAgICAgICAgIDB4MA0KPiA+PiArDQo+ID4+ICsjZGVmaW5lIE9QVEVFX1NNQ19S RVRVUk5fRlJPTV9SUEMgICAgICAgICAgICAgICAweDMyMDAwMDAzDQo+ID4+ICsjZGVmaW5lIE9Q VEVFX1NNQ19DQUxMX1dJVEhfQVJHICAgICAgICAgICAgICAgICAweDMyMDAwMDA0DQo+ID4+ICsj ZGVmaW5lIE9QVEVFX1NNQ19HRVRfU0hNX0NPTkZJRyAgICAgICAgICAgICAgICAweGIyMDAwMDA3 DQo+ID4+ICsNCj4gPj4gKyNkZWZpbmUgT1BURUVfU01DX1NITV9DQUNIRUQgICAgICAgICAgICAg ICAgICAgIDENCj4gPj4gKw0KPiA+PiArI2RlZmluZSBPUFRFRV9TTUNfUkVUVVJOX1JQQ19GT1JF SUdOX0lOVFIgICAgICAgMHhmZmZmMDAwNA0KPiA+PiArDQo+ID4+ICsjZGVmaW5lIE9QVEVFX01T R19DTURfT1BFTl9TRVNTSU9OICAgICAgICAgICAgICAwDQo+ID4+ICsjZGVmaW5lIE9QVEVFX01T R19DTURfSU5WT0tFX0NPTU1BTkQgICAgICAgICAgICAxDQo+ID4+ICsjZGVmaW5lIE9QVEVFX01T R19DTURfQ0xPU0VfU0VTU0lPTiAgICAgICAgICAgICAyDQo+ID4+ICsNCj4gPj4gKyNkZWZpbmUg T1BURUVfTVNHX0FUVFJfTUVUQSAgICAgICAgICAgICAgICAgICAgIDB4MTAwDQo+ID4+ICsNCj4g Pj4gKyNkZWZpbmUgVEVFX0xPR0lOX1BVQkxJQyAgICAgICAgICAgICAgICAgICAgICAgIDB4MA0K PiA+PiArDQo+ID4+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ID4+ICsgIFVJTlROICAgIEJhc2U7DQo+ ID4+ICsgIFVJTlROICAgIFNpemU7DQo+ID4+ICt9IE9QVEVFX1NIQVJFRF9NRU1PUllfSU5GTzsN Cj4gPj4gKw0KPiA+PiArI2VuZGlmDQo+ID4+IGRpZmYgLS1naXQgYS9Bcm1Qa2cvSW5jbHVkZS9M aWJyYXJ5L09wdGVlTGliLmgNCj4gPj4gYi9NZGVQa2cvSW5jbHVkZS9JbmR1c3RyeVN0YW5kYXJk L0dsb2JhbFBsYXRmb3JtLmgNCj4gPj4gc2ltaWxhcml0eSBpbmRleCA1MyUNCj4gPj4gY29weSBm cm9tIEFybVBrZy9JbmNsdWRlL0xpYnJhcnkvT3B0ZWVMaWIuaCBjb3B5IHRvDQo+ID4+IE1kZVBr Zy9JbmNsdWRlL0luZHVzdHJ5U3RhbmRhcmQvR2xvYmFsUGxhdGZvcm0uaA0KPiA+PiBpbmRleCBm NjVkODY3NGQ5YjguLjE0YzYyMWQ4OTk3MSAxMDA2NDQNCj4gPj4gLS0tIGEvQXJtUGtnL0luY2x1 ZGUvTGlicmFyeS9PcHRlZUxpYi5oDQo+ID4+ICsrKyBiL01kZVBrZy9JbmNsdWRlL0luZHVzdHJ5 U3RhbmRhcmQvR2xvYmFsUGxhdGZvcm0uaA0KPiA+PiBAQCAtMSwzNCArMSwyNiBAQA0KPiA+PiAt LyoqIEBmaWxlDQo+ID4+IC0gIE9QLVRFRSBzcGVjaWZpYyBoZWFkZXIgZmlsZS4NCj4gPj4gLQ0K PiA+PiAtICBDb3B5cmlnaHQgKGMpIDIwMTgsIExpbmFybyBMdGQuIEFsbCByaWdodHMgcmVzZXJ2 ZWQuPEJSPg0KPiA+PiAtDQo+ID4+IC0gIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWlu ZyBtYXRlcmlhbHMNCj4gPj4gLSAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRl ciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YNCj4gPj4gdGhlIEJTRCBMaWNlbnNlDQo+ID4+ IC0gIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBv ZiB0aGUgbGljZW5zZQ0KPiA+PiBtYXkgYmUgZm91bmQgYXQNCj4gPj4gLQ0KPiA+Pg0KPiBodHRw czovL2VtZWEwMS5zYWZlbGlua3MucHJvdGVjdGlvbi5vdXRsb29rLmNvbS8/dXJsPWh0dHAlM0El MkYlMkZvcGUNCj4gPj4gbnNvdXJjZS5vcmclMkZsaWNlbnNlcyUyRmJzZC0NCj4gPj4NCj4gbGlj ZW5zZS5waHAmYW1wO2RhdGE9MDIlN0MwMSU3Q3VkaXQua3VtYXIlNDBueHAuY29tJTdDZTk1NjM1 ZDBjDQo+ID4+DQo+IDNjNzRlZGJmNzk4MDhkNjA5YTMwYzdiJTdDNjg2ZWExZDNiYzJiNGM2ZmE5 MmNkOTljNWMzMDE2MzUlN0MwJQ0KPiA+Pg0KPiA3QzAlN0M2MzY3MDY5OTMyNTA1MzUzNzEmYW1w O3NkYXRhPXB5WkY5S3UzcUVwcE9PS0N5c2hiZzlvQ1Q0DQo+ID4+IFA2QXdNMm9sS1kzJTJCMklt V3MlM0QmYW1wO3Jlc2VydmVkPTANCj4gPj4gLQ0KPiA+PiAtICBUSEUgUFJPR1JBTSBJUyBESVNU UklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIg0KPiA+PiBCQVNJUywN Cj4gPj4gLSAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lO RCwgRUlUSEVSDQo+IEVYUFJFU1MNCj4gPj4gT1IgSU1QTElFRC4NCj4gPj4gLQ0KPiA+PiAtKiov DQo+ID4+IC0NCj4gPj4gLSNpZm5kZWYgX09QVEVFX0hfDQo+ID4+IC0jZGVmaW5lIF9PUFRFRV9I Xw0KPiA+PiAtDQo+ID4+IC0vKg0KPiA+PiAtICogVGhlICdUcnVzdGVkIE9TIENhbGwgVUlEJyBp cyBzdXBwb3NlZCB0byByZXR1cm4gdGhlIGZvbGxvd2luZw0KPiA+PiBVVUlEIGZvcg0KPiA+PiAt ICogT1AtVEVFIE9TLiBUaGlzIGlzIGEgMTI4LWJpdCB2YWx1ZS4NCj4gPj4gLSAqLw0KPiA+PiAt I2RlZmluZSBPUFRFRV9PU19VSUQwICAgICAgICAgIDB4Mzg0ZmIzZTANCj4gPj4gLSNkZWZpbmUg T1BURUVfT1NfVUlEMSAgICAgICAgICAweGU3ZjgxMWUzDQo+ID4+IC0jZGVmaW5lIE9QVEVFX09T X1VJRDIgICAgICAgICAgMHhhZjYzMDAwMg0KPiA+PiAtI2RlZmluZSBPUFRFRV9PU19VSUQzICAg ICAgICAgIDB4YTVkNWM1MWINCj4gPj4gLQ0KPiA+PiAtQk9PTEVBTg0KPiA+PiAtRUZJQVBJDQo+ ID4+IC1Jc09wdGVlUHJlc2VudCAoDQo+ID4+IC0gIFZPSUQNCj4gPj4gLSAgKTsNCj4gPj4gLQ0K PiA+PiAtI2VuZGlmDQo+ID4+ICsvKiogQGZpbGUNCj4gPj4gKyAgU3RhbmRhcmRpemVkIEdsb2Jh bCBQbGF0Zm9ybSBoZWFkZXIgZmlsZS4NCj4gPj4gKw0KPiA+PiArICBDb3B5cmlnaHQgKGMpIDIw MTgsIExpbmFybyBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+PiArDQo+ID4+ICsg IFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgIGFyZSBsaWNlbnNl ZCBhbmQgbWFkZQ0KPiA+PiArIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlv bnMgb2YgdGhlIEJTRCBMaWNlbnNlICB3aGljaA0KPiA+PiArIGFjY29tcGFuaWVzIHRoaXMgZGlz dHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUNCj4gPj4gKyBm b3VuZCBhdA0KPiA+PiArDQo+ID4+ICsNCj4gPj4NCj4gaHR0cHM6Ly9lbWVhMDEuc2FmZWxpbmtz LnByb3RlY3Rpb24ub3V0bG9vay5jb20vP3VybD1odHRwJTNBJTJGJTJGb3BlDQo+ID4+IG4NCj4g Pj4gKyBzb3VyY2Uub3JnJTJGbGljZW5zZXMlMkZic2QtDQo+ID4+IGxpY2Vuc2UucGhwJmFtcDtk YXRhPTAyJTdDMDElN0N1ZGl0Lmt1bWFyJQ0KPiA+PiArDQo+ID4+DQo+IDQwbnhwLmNvbSU3Q2U5 NTYzNWQwYzNjNzRlZGJmNzk4MDhkNjA5YTMwYzdiJTdDNjg2ZWExZDNiYzJiNGM2Zg0KPiA+PiBh OTJjZDk5DQo+ID4+ICsNCj4gPj4NCj4gYzVjMzAxNjM1JTdDMCU3QzAlN0M2MzY3MDY5OTMyNTA1 MzUzNzEmYW1wO3NkYXRhPXB5WkY5S3UzcUVwcA0KPiA+PiBPT0tDeXNoYmcNCj4gPj4gKyA5b0NU NFA2QXdNMm9sS1kzJTJCMkltV3MlM0QmYW1wO3Jlc2VydmVkPTANCj4gPj4gKw0KPiA+PiArICBU SEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFT IElTIg0KPiA+PiBCQVNJUywNCj4gPj4gKyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5U QVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVINCj4gPj4gRVhQUkVTUyBPUiBJTVBMSUVELg0KPiA+ PiArDQo+ID4+ICsqKi8NCj4gPj4gKw0KPiA+PiArI2lmbmRlZiBfR0xPQkFMX1BMQVRGT1JNX0hf DQo+ID4+ICsjZGVmaW5lIF9HTE9CQUxfUExBVEZPUk1fSF8NCj4gPj4gKw0KPiA+PiArI2RlZmlu ZSBURUVDX09SSUdJTl9DT01NUyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMg0KPiA+ PiArDQo+ID4+ICsjZGVmaW5lIFRFRUNfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAweDAwMDAwMDAwDQo+ID4+ICsjZGVmaW5lIFRFRUNfRVJST1JfQkFEX1BBUkFNRVRFUlMgICAg ICAgICAgICAgICAweEZGRkYwMDA2DQo+ID4+ICsjZGVmaW5lIFRFRUNfRVJST1JfQ09NTVVOSUNB VElPTiAgICAgICAgICAgICAgICAweEZGRkYwMDBFDQo+ID4+ICsjZGVmaW5lIFRFRUNfRVJST1Jf T1VUX09GX01FTU9SWSAgICAgICAgICAgICAgICAweEZGRkYwMDBDDQo+ID4+ICsNCj4gPj4gKyNl bmRpZg0KPiA+PiAtLQ0KPiA+PiAyLjcuNA0KPiA+Pg0KPiA+PiBfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KPiA+PiBlZGsyLWRldmVsIG1haWxpbmcgbGlz dA0KPiA+PiBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZw0KPiA+Pg0KPiBodHRwczovL2VtZWEwMS5z YWZlbGlua3MucHJvdGVjdGlvbi5vdXRsb29rLmNvbS8/dXJsPWh0dHBzJTNBJTJGJTJGbGkNCj4g Pj4gc3QNCj4gPj4gcy4wMS5vcmclMkZtYWlsbWFuJTJGbGlzdGluZm8lMkZlZGsyLQ0KPiA+Pg0K PiBkZXZlbCZhbXA7ZGF0YT0wMiU3QzAxJTdDdWRpdC5rdW1hciU0MG54cC5jb20lN0NlOTU2MzVk MGMzYzc0ZQ0KPiA+Pg0KPiBkYmY3OTgwOGQ2MDlhMzBjN2IlN0M2ODZlYTFkM2JjMmI0YzZmYTky Y2Q5OWM1YzMwMTYzNSU3QzAlN0MwJQ0KPiA+Pg0KPiA3QzYzNjcwNjk5MzI1MDUzNTM3MSZhbXA7 c2RhdGE9bXNBNmpHUkFrcFdvUTMzVnNEZmJXcWdHY0lNVFANCj4gPj4gdSUyRmhjZHMzajlhRFBu VSUzRCZhbXA7cmVzZXJ2ZWQ9MA0KPiA+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fDQo+ID4gZWRrMi1kZXZlbCBtYWlsaW5nIGxpc3QNCj4gPiBlZGsyLWRl dmVsQGxpc3RzLjAxLm9yZw0KPiA+DQo+IGh0dHBzOi8vZW1lYTAxLnNhZmVsaW5rcy5wcm90ZWN0 aW9uLm91dGxvb2suY29tLz91cmw9aHR0cHMlM0ElMkYlMkZsaXMNCj4gPiB0cy4wMS5vcmclMkZt YWlsbWFuJTJGbGlzdGluZm8lMkZlZGsyLQ0KPiBkZXZlbCZhbXA7ZGF0YT0wMiU3QzAxJTdDdWRp dC5rdQ0KPiA+DQo+IG1hciU0MG54cC5jb20lN0M1MzExYzVkYzIyZDU0MDk1ZDc5ZDA4ZDYwOWU3 ZmJmNSU3QzY4NmVhMWQzYmMyDQo+IGI0YzZmYTkyDQo+ID4NCj4gY2Q5OWM1YzMwMTYzNSU3QzAl N0MwJTdDNjM2NzA3Mjg5MzA1NTE5OTAzJmFtcDtzZGF0YT1kd0xVcThqOWYNCj4gOXJ4ZWIzN1YN Cj4gPiA4ZkdaS29pV2gxVE5CbmhWRnFudUY1b04zZyUzRCZhbXA7cmVzZXJ2ZWQ9MA0K