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.52; helo=eur03-am5-obe.outbound.protection.outlook.com; envelope-from=evan.lloyd@arm.com; receiver=edk2-devel@lists.01.org Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-eopbgr30052.outbound.protection.outlook.com [40.107.3.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id B1D3722146721 for ; Wed, 21 Mar 2018 05:48:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector1-arm-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=T/6xVYnJTgR66lker4PuGvtpd7xSuOrXd/E63YwfSLc=; b=KHftKXexMNzd/7LliRZjzg+N9UhblQnvG6ykajI3AP/gnvA7P/woEnYUgbq9ecwZdlegD2nThMyfCTIEaOMgqeNngg7Ch7BC28+fkPkugtPNCmX1eabSDvi43u0Fx7cQyTqwqrIZj4PTLwL1mUqWRTVWI2GFNAs/l1MEkx1JsOw= Received: from HE1PR0801MB1771.eurprd08.prod.outlook.com (10.168.150.14) by HE1PR0801MB1786.eurprd08.prod.outlook.com (10.168.150.17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.588.14; Wed, 21 Mar 2018 12:54:40 +0000 Received: from HE1PR0801MB1771.eurprd08.prod.outlook.com ([fe80::69cc:3ecf:9c8c:f5a3]) by HE1PR0801MB1771.eurprd08.prod.outlook.com ([fe80::69cc:3ecf:9c8c:f5a3%17]) with mapi id 15.20.0588.017; Wed, 21 Mar 2018 12:54:40 +0000 From: Evan Lloyd To: Girish Pathak , "edk2-devel@lists.01.org" CC: nd , Stephanie Hughes-Fitt , "leif.lindholm@linaro.org" , "ard.biesheuvel@linaro.org" Thread-Topic: [edk2] [PATCH v3 16/16] ArmPkg: Introduce SCMI protocol Thread-Index: AQHTwGZeuf18k8X1+Um2fyIM92Zqi6PaprVw Date: Wed, 21 Mar 2018 12:54:40 +0000 Message-ID: References: <20180320161212.79120-1-girish.pathak@arm.com> <20180320161212.79120-17-girish.pathak@arm.com> In-Reply-To: <20180320161212.79120-17-girish.pathak@arm.com> Accept-Language: en-GB, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [217.140.96.140] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; HE1PR0801MB1786; 7:KiVscIVgF1755DV5rvTbeJfY0XG6LO9Y5QO6XiUpdehtXT8rlbriidra6sxrSo6/hbW+RoqbWcnbePBZ+Es0FIk16sdHSAhMB5ebSQ0fb9XJ0zv9ienecZHLm4pYNps9/wV9QKLV0GpgLuaJFdCcyGBDjthQwEXl+onscG704wEPR3VXyw9CkKS5OzxvqkxGajUXL93+QkRHcQbhWf/hfcevrG27lKQ3BKQSMywMifL9Vs8F30c9wwysHsEsvmJ/ x-ms-exchange-antispam-srfa-diagnostics: SOS;SOR; x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 2bca2427-9020-4c2c-4658-08d58f2ae945 x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(48565401081)(5600026)(4604075)(3008032)(2017052603328)(7153060)(7193020); SRVR:HE1PR0801MB1786; x-ms-traffictypediagnostic: HE1PR0801MB1786: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Evan.Lloyd@arm.com; nodisclaimer: True x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(180628864354917)(131327999870524)(788757137089)(162533806227266); x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3231221)(944501323)(52105095)(10201501046)(3002001)(93006095)(93001095)(6055026)(6041310)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123562045)(20161123564045)(6072148)(201708071742011); SRVR:HE1PR0801MB1786; BCL:0; PCL:0; RULEID:; SRVR:HE1PR0801MB1786; x-forefront-prvs: 0618E4E7E1 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39380400002)(366004)(346002)(376002)(396003)(39860400002)(13464003)(189003)(199004)(2950100002)(97736004)(16799955002)(15188155005)(105586002)(3280700002)(2906002)(25786009)(81156014)(99286004)(316002)(59450400001)(7696005)(966005)(26005)(110136005)(14454004)(478600001)(76176011)(6506007)(102836004)(72206003)(2900100001)(8676002)(54906003)(81166006)(5660300001)(86362001)(5250100002)(4326008)(53376002)(33656002)(6246003)(6436002)(9686003)(229853002)(53546011)(2501003)(575784001)(3846002)(106356001)(3660700001)(6116002)(66066001)(53936002)(7736002)(68736007)(305945005)(55016002)(6306002)(16200700003)(53946003)(8936002)(74316002)(290074003)(569006); DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR0801MB1786; H:HE1PR0801MB1771.eurprd08.prod.outlook.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: 3QxxN19R4XP+5W5A0H0+pxSyb6+g5bULm1+dRIaCoM7NY0wM1E6SwN6KFCg/ZQWALGXGAH6tZGBuLi0tGKVrtzFf5ETyU/lVO2Nr4xXpCUguhcOGpz3BBbvQAC/IVPpnBCQyoY5L6HrpqhZI9LZVUK7AbLq24OKGSd84gLExhOXL3W6c9cx2DVP+h40HmKjA8rkR/2UH07pWPeMItjPTAauELdNISOlAijsuWUtzY1UjIRDyy3wzhtKCrYTn/x8gQQdrVbf/tUTUN4LBXaexZZCNR6CwuZPWnQLqIAUWldPoEuOzk4HATRlU9XWrXr/9N1QX4ZE7uauioV+CnfAX6g== spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2bca2427-9020-4c2c-4658-08d58f2ae945 X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Mar 2018 12:54:40.5791 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0801MB1786 Subject: Re: [PATCH v3 16/16] ArmPkg: Introduce SCMI protocol X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 21 Mar 2018 12:48:15 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 UmV2aWV3ZWQtYnk6IEV2YW4gTGxveWQgPGV2YW4ubGxveWRAYXJtLmNvbT4NCg0KPiAtLS0tLU9y aWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBlZGsyLWRldmVsIDxlZGsyLWRldmVsLWJvdW5j ZXNAbGlzdHMuMDEub3JnPiBPbiBCZWhhbGYgT2YgR2lyaXNoDQo+IFBhdGhhaw0KPiBTZW50OiAy MCBNYXJjaCAyMDE4IDE2OjEyDQo+IFRvOiBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZw0KPiBDYzog bmQgPG5kQGFybS5jb20+OyBTdGVwaGFuaWUgSHVnaGVzLUZpdHQgPFN0ZXBoYW5pZS5IdWdoZXMt DQo+IEZpdHRAYXJtLmNvbT47IGxlaWYubGluZGhvbG1AbGluYXJvLm9yZzsgYXJkLmJpZXNoZXV2 ZWxAbGluYXJvLm9yZw0KPiBTdWJqZWN0OiBbZWRrMl0gW1BBVENIIHYzIDE2LzE2XSBBcm1Qa2c6 IEludHJvZHVjZSBTQ01JIHByb3RvY29sDQo+IA0KPiBUaGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGEg bmV3IFNDTUkgcHJvdG9jb2wgZHJpdmVyIGZvcg0KPiBBcm0gc3lzdGVtcy4gVGhlIGRyaXZlciBj dXJyZW50bHkgc3VwcG9ydHMgb25seSBjbG9jaw0KPiBhbmQgcGVyZm9ybWFuY2UgbWFuYWdlbWVu dCBwcm90b2NvbHMuIE90aGVyIHByb3RvY29scw0KPiB3aWxsIGJlIGFkZGVkIGFzIGFuZCB3aGVu IG5lZWRlZC4NCj4gDQo+IENsb2NrIG1hbmFnZW1lbnQgcHJvdG9jb2wgaXMgdXNlZCB0byBjb25m aWd1cmUgdmFyaW91cyBjbG9ja3MNCj4gYXZhaWxhYmxlIG9uIHRoZSBwbGF0Zm9ybSBlLmcuIEhE TENEIGNsb2NrIG9uIHRoZSBKdW5vIHBsYXRmb3Jtcy4NCj4gDQo+IFdoZXJlYXMgcGVyZm9ybWFu Y2UgbWFuYWdlbWVudCBwcm90b2NvbCBhbGxvd3MgYWRqdXN0bWVudA0KPiBvZiB2YXJpb3VzIHBl cmZvcm1hbmNlIGRvbWFpbnMuIEN1cnJlbnRseSB0aGlzIGlzIHVzZWQgdG8gZXZhbHVhdGUNCj4g cGVyZm9ybWFuY2Ugb2YgdGhlIEp1bm8gcGxhdGZvcm0uDQo+IA0KPiBDb250cmlidXRlZC11bmRl cjogVGlhbm9Db3JlIENvbnRyaWJ1dGlvbiBBZ3JlZW1lbnQgMS4xDQo+IFNpZ25lZC1vZmYtYnk6 IEdpcmlzaCBQYXRoYWsgPGdpcmlzaC5wYXRoYWtAYXJtLmNvbT4NCj4gU2lnbmVkLW9mZi1ieTog RXZhbiBMbG95ZCA8ZXZhbi5sbG95ZEBhcm0uY29tPg0KPiAtLS0NCj4gDQo+IE5vdGVzOg0KPiAg ICAgdjM6DQo+ICAgICAtIFBsZWFzZSByZW5hbWUgQXJtTXRsLmggdG8gQXJtTXRsTGliaS5oLCBh bmQNCj4gICAgICAgZGVjbGFyZSBpdCBhcyBhIGxpYnJhcnkgY2xhc3MgaW4gdGhlIHBhY2thZ2Ug ZmlsZS4gICAgICAgICAgW0FyZF0NCj4gDQo+ICAgICAgIERvbmUsIGhvd2V2ZXIgQXJtTXRsTGli LmggaXMgbm93IHBhcnQgb2YgZWFybGllciBjb21taXQgICAgIFtHaXJpc2hdDQo+IA0KPiAgICAg LSBNb3ZlIEFybVNjbWlEeGUgdG8gQXJtUGtnIGZyb20gQXJtUGxhdGZvcm1Qa2cgICAgICAgICAg ICAgICBbQXJkXQ0KPiANCj4gICAgICAgRG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgW0dpcmlzaF0NCj4gDQo+ICAgICAtIERlY2xhcmUg Z0FybVNjbWlCYXNlUHJvdG9jb2xHdWlkIGFuZCBzaW1pbGFyDQo+ICAgICAgIHByb3RvY29scyBH dWlkcyBpbiBBcm1Qa2cuZGVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBcmRdDQo+ IA0KPiAgICAgICBEb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBbR2lyaXNoXQ0KPiANCj4gICAgIC0gUmVwbGFjZSBmbGV4aWJsZSBhcnJh eSBtZW1iZXIgW10gd2l0aCBbMV0gICAgICAgICAgICAgICAgICAgW0FyZF0NCj4gDQo+ICAgICAg IERvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFtHaXJpc2hdDQo+IA0KPiAgICAgLSBNb3ZlIHByb3RvY29sIGluaXQgZnVuY3Rpb24gd2hp Y2ggYXJlIG5vdCBwYXJ0IG9mDQo+ICAgICAgIG9mIHByb3RvY29sIGxpa2UgIFNjbWlCYXNlUHJv dG9jb2xJbml0IGVsc2V3aGVyZSAgICAgICAgICAgIFtBcmRdDQo+IA0KPiAgICAgICBEb25lICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbR2ly aXNoXQ0KPiANCj4gICAgIC0gUGxlYXNlIGRvbid0IHB1dCBzdHVmZiBpbiBJbmNsdWRlL0RyaXZl cnMuICAgICAgICAgICAgICAgICAgW0FyZF0NCj4gDQo+ICAgICAgIE1vdmVkIGhlYWRlcnMgdG8g SW5jbHVkZS9Qcm90b2NvbC4gICAgICAgICAgICAgICAgICAgICAgICAgIFtHaXJpc2hdDQo+IA0K PiAgQXJtUGtnL0FybVBrZy5kZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAxMyArDQo+ICBBcm1Qa2cvQXJtUGtnLmRzYyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA2ICstDQo+ICBBcm1Qa2cvRHJpdmVycy9Bcm1T Y21pRHhlL0FybVNjbWlCYXNlUHJvdG9jb2xQcml2YXRlLmggICAgICAgIHwgIDQ2ICsrDQo+ICBB cm1Qa2cvRHJpdmVycy9Bcm1TY21pRHhlL0FybVNjbWlDbG9ja1Byb3RvY29sUHJpdmF0ZS5oICAg ICAgIHwgIDg0DQo+ICsrKysNCj4gIEFybVBrZy9Ecml2ZXJzL0FybVNjbWlEeGUvQXJtU2NtaUR4 ZS5pbmYgICAgICAgICAgICAgICAgICAgICAgfCAgNTMgKysrDQo+ICBBcm1Qa2cvRHJpdmVycy9B cm1TY21pRHhlL0FybVNjbWlQZXJmb3JtYW5jZVByb3RvY29sUHJpdmF0ZS5oIHwgIDU1DQo+ICsr Kw0KPiAgQXJtUGtnL0RyaXZlcnMvQXJtU2NtaUR4ZS9TY21pLmMgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8IDI2MiArKysrKysrKysrKw0KPiAgQXJtUGtnL0RyaXZlcnMvQXJtU2NtaUR4 ZS9TY21pQmFzZVByb3RvY29sLmMgICAgICAgICAgICAgICAgICB8IDMxOA0KPiArKysrKysrKysr KysrKw0KPiAgQXJtUGtnL0RyaXZlcnMvQXJtU2NtaUR4ZS9TY21pQ2xvY2tQcm90b2NvbC5jICAg ICAgICAgICAgICAgICB8IDQxOA0KPiArKysrKysrKysrKysrKysrKysNCj4gIEFybVBrZy9Ecml2 ZXJzL0FybVNjbWlEeGUvU2NtaUR4ZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMzgg KysrKysrDQo+ICBBcm1Qa2cvRHJpdmVycy9Bcm1TY21pRHhlL1NjbWlEeGUuaCAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgIDQxICsrDQo+ICBBcm1Qa2cvRHJpdmVycy9Bcm1TY21pRHhlL1Nj bWlQZXJmb3JtYW5jZVByb3RvY29sLmMgICAgICAgICAgIHwgNDU3DQo+ICsrKysrKysrKysrKysr KysrKysrDQo+ICBBcm1Qa2cvRHJpdmVycy9Bcm1TY21pRHhlL1NjbWlQcml2YXRlLmggICAgICAg ICAgICAgICAgICAgICAgIHwgMTc0ICsrKysrKysrDQo+ICBBcm1Qa2cvSW5jbHVkZS9Qcm90b2Nv bC9Bcm1TY21pLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDI3ICsrDQo+ICBBcm1Q a2cvSW5jbHVkZS9Qcm90b2NvbC9Bcm1TY21pQmFzZVByb3RvY29sLmggICAgICAgICAgICAgICAg IHwgMTc0DQo+ICsrKysrKysrDQo+ICBBcm1Qa2cvSW5jbHVkZS9Qcm90b2NvbC9Bcm1TY21pQ2xv Y2tQcm90b2NvbC5oICAgICAgICAgICAgICAgIHwgMjE4DQo+ICsrKysrKysrKysNCj4gIEFybVBr Zy9JbmNsdWRlL1Byb3RvY29sL0FybVNjbWlQZXJmb3JtYW5jZVByb3RvY29sLmggICAgICAgICAg fCAyNjUNCj4gKysrKysrKysrKysrDQo+ICAxNyBmaWxlcyBjaGFuZ2VkLCAyNzQ4IGluc2VydGlv bnMoKyksIDEgZGVsZXRpb24oLSkNCj4gDQo+IGRpZmYgLS1naXQgYS9Bcm1Qa2cvQXJtUGtnLmRl YyBiL0FybVBrZy9Bcm1Qa2cuZGVjDQo+IGluZGV4DQo+IDg4MTc1MWQ4MWM2Mzg0YTNlYjBiNGMx ODBjNzZkMDFhNTgyNjZhNzQuLjE2ZjdlNDAwNDY0MjkxNDJiNDQNCj4gYjUyNjA0M2I2MWEzZDVl MDg5ZDJjIDEwMDY0NA0KPiAtLS0gYS9Bcm1Qa2cvQXJtUGtnLmRlYw0KPiArKysgYi9Bcm1Qa2cv QXJtUGtnLmRlYw0KPiBAQCAtNTEsNiArNTEsMTkgQEAgW0d1aWRzLmNvbW1vbl0NCj4gDQo+ICAg IGdBcm1HaWNEeGVGaWxlR3VpZCA9IHsgMHhkZTM3MWY3YywgMHhkZWM0LCAweDRkMjEsIHsgMHhh ZCwgMHhmMSwgMHg1OSwNCj4gMHgzYSwgMHhiYywgMHhjMSwgMHg1OCwgMHg4MiB9IH0NCj4gDQo+ ICtbUHJvdG9jb2xzLmNvbW1vbl0NCj4gKyAgIyMgQXJtIFN5c3RlbSBDb250cm9sIGFuZCBNYW5h Z2VtZW50IEludGVyZmFjZShTQ01JKSBCYXNlIHByb3RvY29sDQo+ICsgICMjIEFybVBrZy9JbmNs dWRlL1Byb3RvY29sL0FybVNjbWlCYXNlUHJvdG9jb2wuaA0KPiArICBnQXJtU2NtaUJhc2VQcm90 b2NvbEd1aWQgPSB7IDB4ZDdlNWFiZTksIDB4MzNhYiwgMHg0MThlLCB7IDB4OWYsDQo+IDB4OTEs IDB4NzIsIDB4ZGEsIDB4ZTIsIDB4YmEsIDB4OGUsIDB4MmYgfSB9DQo+ICsNCj4gKyAgIyMgQXJt IFN5c3RlbSBDb250cm9sIGFuZCBNYW5hZ2VtZW50IEludGVyZmFjZShTQ01JKSBDbG9jaw0KPiBt YW5hZ2VtZW50IHByb3RvY29sDQo+ICsgICMjIEFybVBrZy9JbmNsdWRlL1Byb3RvY29sL0FybVNj bWlDbG9ja1Byb3RvY29sLmgNCj4gKyAgZ0FybVNjbWlDbG9ja1Byb3RvY29sR3VpZCA9IHsgMHg5 MWNlNjdhOCwgMHhlMGFhLCAweDQwMTIsIHsgMHhiOSwNCj4gMHg5ZiwgMHhiNiwgMHhmYywgMHhm MywgMHg0LCAweDhlLCAweGFhIH0gfQ0KPiArDQo+ICsgICMjIEFybSBTeXN0ZW0gQ29udHJvbCBh bmQgTWFuYWdlbWVudCBJbnRlcmZhY2UoU0NNSSkgQ2xvY2sNCj4gbWFuYWdlbWVudCBwcm90b2Nv bA0KPiArICAjIyBBcm1Qa2cvSW5jbHVkZS9Qcm90b2NvbC9Bcm1TY21pUGVyZm9ybWFuY2VQcm90 b2NvbC5oDQo+ICsgIGdBcm1TY21pUGVyZm9ybWFuY2VQcm90b2NvbEd1aWQgPSB7IDB4OWI4YmE4 NCwgMHgzZGQzLCAweDQ5YTYsDQo+IHsgMHhhMCwgMHg1YSwgMHgzMSwgMHgzNCwgMHhhNSwgMHhm MCwgMHg3YiwgMHhhZCB9IH0NCj4gKw0KPiAgW1BwaXNdDQo+ICAgICMjIEluY2x1ZGUvUHBpL0Fy bU1wQ29yZUluZm8uaA0KPiAgICBnQXJtTXBDb3JlSW5mb1BwaUd1aWQgPSB7IDB4Njg0N2NjNzQs IDB4ZTllYywgMHg0ZjhmLCB7MHhhMiwgMHg5ZCwNCj4gMHhhYiwgMHg0NCwgMHhlNywgMHg1NCwg MHhhOCwgMHhmY30gfQ0KPiBkaWZmIC0tZ2l0IGEvQXJtUGtnL0FybVBrZy5kc2MgYi9Bcm1Qa2cv QXJtUGtnLmRzYw0KPiBpbmRleA0KPiA1MjY5MDk0NThlMGQ4MGRiYzVhNjVjOGFkMTJlYzEwOTVk ZGE0OGQyLi4yMjMzMjA5MGRiNzExMWUwNjY4DQo+IDYwN2ExNjI4OGNlZmMxYmFjZTkyNiAxMDA2 NDQNCj4gLS0tIGEvQXJtUGtnL0FybVBrZy5kc2MNCj4gKysrIGIvQXJtUGtnL0FybVBrZy5kc2MN Cj4gQEAgLTIsNyArMiw3IEBADQo+ICAjIEFSTSBwcm9jZXNzb3IgcGFja2FnZS4NCj4gICMNCj4g ICMgQ29weXJpZ2h0IChjKSAyMDA5IC0gMjAxMCwgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLjxCUj4NCj4gLSMgQ29weXJpZ2h0IChjKSAyMDExIC0gMjAxNSwgQVJNIEx0ZC4gQWxsIHJp Z2h0cyByZXNlcnZlZC48QlI+DQo+ICsjIENvcHlyaWdodCAoYykgMjAxMSAtIDIwMTgsIEFSTSBM dGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiAgIyBDb3B5cmlnaHQgKGMpIDIwMTYsIExp bmFybyBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiAgIw0KPiAgIyAgICBUaGlzIHBy b2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+IEBAIC04Nyw2ICs4Nyw4IEBA IFtMaWJyYXJ5Q2xhc3Nlcy5jb21tb25dDQo+ICAgIEFybUxpYnxBcm1Qa2cvTGlicmFyeS9Bcm1M aWIvQXJtQmFzZUxpYi5pbmYNCj4gICAgQXJtTW11TGlifEFybVBrZy9MaWJyYXJ5L0FybU1tdUxp Yi9Bcm1NbXVCYXNlTGliLmluZg0KPiANCj4gKyAgQXJtTXRsTGlifEFybVBrZy9MaWJyYXJ5L0Fy bU10bE51bGxMaWIvQXJtTXRsTnVsbExpYi5pbmYNCj4gKw0KPiAgW0xpYnJhcnlDbGFzc2VzLmNv bW1vbi5QRUlNXQ0KPiAgICBIb2JMaWJ8TWRlUGtnL0xpYnJhcnkvUGVpSG9iTGliL1BlaUhvYkxp Yi5pbmYNCj4gICAgUGVpbUVudHJ5UG9pbnR8TWRlUGtnL0xpYnJhcnkvUGVpbUVudHJ5UG9pbnQv UGVpbUVudHJ5UG9pbnQuaW5mDQo+IEBAIC0xNDQsNSArMTQ2LDcgQEAgW0NvbXBvbmVudHMuY29t bW9uXQ0KPiAgICBBcm1Qa2cvTGlicmFyeS9QZWlTZXJ2aWNlc1RhYmxlUG9pbnRlckxpYi9QZWlT ZXJ2aWNlc1RhYmxlUG9pbnRlckxpYi5pbmYNCj4gICAgQXJtUGtnL0xpYnJhcnkvUGxhdGZvcm1C b290TWFuYWdlckxpYi9QbGF0Zm9ybUJvb3RNYW5hZ2VyTGliLmluZg0KPiANCj4gKyAgQXJtUGtn L0RyaXZlcnMvQXJtU2NtaUR4ZS9Bcm1TY21pRHhlLmluZg0KPiArDQo+ICBbQ29tcG9uZW50cy5B QVJDSDY0XQ0KPiAgICBBcm1Qa2cvTGlicmFyeS9Bcm1NbXVMaWIvQXJtTW11UGVpTGliLmluZg0K PiBkaWZmIC0tZ2l0IGEvQXJtUGtnL0RyaXZlcnMvQXJtU2NtaUR4ZS9Bcm1TY21pQmFzZVByb3Rv Y29sUHJpdmF0ZS5oDQo+IGIvQXJtUGtnL0RyaXZlcnMvQXJtU2NtaUR4ZS9Bcm1TY21pQmFzZVBy b3RvY29sUHJpdmF0ZS5oDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4DQo+IDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc5YzA1N2Q0NDEyODAwOGVjMg0K PiA3NmUzZDU4ZDhmMTA5OGM2YTc3OWIyDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvQXJtUGtn L0RyaXZlcnMvQXJtU2NtaUR4ZS9Bcm1TY21pQmFzZVByb3RvY29sUHJpdmF0ZS5oDQo+IEBAIC0w LDAgKzEsNDYgQEANCj4gKy8qKiBAZmlsZQ0KPiArDQo+ICsgIENvcHlyaWdodCAoYykgMjAxNy0y MDE4LCBBcm0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gKw0KPiArICBUaGlzIHBy b2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+ICsgIGFyZSBsaWNlbnNlZCBh bmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQ0K PiBCU0QgTGljZW5zZQ0KPiArICB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4g IFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+IGZvdW5kIGF0DQo+ICsgIGh0 dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4gKw0KPiArICBU SEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFT IElTIg0KPiBCQVNJUywNCj4gKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9O UyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+IEVYUFJFU1MgT1IgSU1QTElFRC4NCj4gKw0KPiArICBT eXN0ZW0gQ29udHJvbCBhbmQgTWFuYWdlbWVudCBJbnRlcmZhY2UgVjEuMA0KPiArICAgIGh0dHA6 Ly9pbmZvY2VudGVyLmFybS5jb20vaGVscC90b3BpYy9jb20uYXJtLmRvYy5kZW4wMDU2YS8NCj4g KyAgICBERU4wMDU2QV9TeXN0ZW1fQ29udHJvbF9hbmRfTWFuYWdlbWVudF9JbnRlcmZhY2UucGRm DQo+ICsqKi8NCj4gKw0KPiArI2lmbmRlZiBBUk1fU0NNSV9CQVNFX1BST1RPQ09MX1BSSVZBVEVf SF8NCj4gKyNkZWZpbmUgQVJNX1NDTUlfQkFTRV9QUk9UT0NPTF9QUklWQVRFX0hfDQo+ICsNCj4g Ky8vIFJldHVybiB2YWx1ZXMgb2YgQkFTRV9ESVNDT1ZFUl9MSVNUX1BST1RPQ09MUyBjb21tYW5k Lg0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UMzIgTnVtUHJvdG9jb2xzOw0KPiArDQo+ ICsgIC8vIEFycmF5IG9mIGZvdXIgcHJvdG9jb2xzIGluIGVhY2ggZWxlbWVudA0KPiArICAvLyBU b3RhbCBlbGVtZW50cyA9IDEgKyAoTnVtUHJvdG9jb2xzLTEpLzQNCj4gKw0KPiArICAvLyBOT1RF OiBTaW5jZSBFREsyIGRvZXMgbm90IGFsbG93IGZsZXhpYmxlIGFycmF5IG1lbWJlciBbXSB3ZSBk ZWNsYXJlDQo+ICsgIC8vIGhlcmUgYXJyYXkgb2YgMSBlbGVtZW50IGxlbmd0aC4gSG93ZXZlciBi ZWxvdyBpcyB1c2VkIGFzIGEgdmFyaWFibGUNCj4gKyAgLy8gbGVuZ3RoIGFycmF5Lg0KPiArICBV SU5UOCBQcm90b2NvbHNbMV07DQo+ICt9IEJBU0VfRElTQ09WRVJfTElTVDsNCj4gKw0KPiArLyoq IEluaXRpYWxpemUgQmFzZSBwcm90b2NvbCBhbmQgaW5zdGFsbCBwcm90b2NvbCBvbiBhIGdpdmVu IGhhbmRsZS4NCj4gKw0KPiArICAgQHBhcmFtW2luXSBIYW5kbGUgICAgICAgICAgICAgIEhhbmRs ZSB0byBpbnN0YWxsIEJhc2UgcHJvdG9jb2wuDQo+ICsNCj4gKyAgIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgICAgICAgICBCYXNlIHByb3RvY29sIGludGVyZmFjZSBpbnN0YWxsZWQNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzZnVsbHkuDQo+ICsqKi8NCj4gK0VG SV9TVEFUVVMNCj4gK1NjbWlCYXNlUHJvdG9jb2xJbml0ICgNCj4gKyAgSU4gT1VUIEVGSV9IQU5E TEUqIEhhbmRsZQ0KPiArICApOw0KPiArDQo+ICsjZW5kaWYgLyogQVJNX1NDTUlfQkFTRV9QUk9U T0NPTF9QUklWQVRFX0hfICovDQo+IGRpZmYgLS1naXQgYS9Bcm1Qa2cvRHJpdmVycy9Bcm1TY21p RHhlL0FybVNjbWlDbG9ja1Byb3RvY29sUHJpdmF0ZS5oDQo+IGIvQXJtUGtnL0RyaXZlcnMvQXJt U2NtaUR4ZS9Bcm1TY21pQ2xvY2tQcm90b2NvbFByaXZhdGUuaA0KPiBuZXcgZmlsZSBtb2RlIDEw MDY0NA0KPiBpbmRleA0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw Li43MTI0NWMxNjQ3NWQ0ZDM4ZDYNCj4gZGM2NjU3MWIzZmUzNTIwYzFjZjFkYQ0KPiAtLS0gL2Rl di9udWxsDQo+ICsrKyBiL0FybVBrZy9Ecml2ZXJzL0FybVNjbWlEeGUvQXJtU2NtaUNsb2NrUHJv dG9jb2xQcml2YXRlLmgNCj4gQEAgLTAsMCArMSw4NCBAQA0KPiArLyoqIEBmaWxlDQo+ICsNCj4g KyAgQ29weXJpZ2h0IChjKSAyMDE3LTIwMTgsIEFybSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLg0KPiArDQo+ICsgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlh bHMNCj4gKyAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMg YW5kIGNvbmRpdGlvbnMgb2YgdGhlDQo+IEJTRCBMaWNlbnNlDQo+ICsgIHdoaWNoIGFjY29tcGFu aWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBtYXkg YmUNCj4gZm91bmQgYXQNCj4gKyAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1s aWNlbnNlLnBocA0KPiArDQo+ICsgIFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVSIFRI RSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiDQo+IEJBU0lTLA0KPiArICBXSVRIT1VUIFdBUlJB TlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVINCj4gRVhQUkVTUyBP UiBJTVBMSUVELg0KPiArDQo+ICsgIFN5c3RlbSBDb250cm9sIGFuZCBNYW5hZ2VtZW50IEludGVy ZmFjZSBWMS4wDQo+ICsgICAgaHR0cDovL2luZm9jZW50ZXIuYXJtLmNvbS9oZWxwL3RvcGljL2Nv bS5hcm0uZG9jLmRlbjAwNTZhLw0KPiArICAgIERFTjAwNTZBX1N5c3RlbV9Db250cm9sX2FuZF9N YW5hZ2VtZW50X0ludGVyZmFjZS5wZGYNCj4gKyoqLw0KPiArDQo+ICsjaWZuZGVmIEFSTV9TQ01J X0NMT0NLX1BST1RPQ09MX1BSSVZBVEVfSF8NCj4gKyNkZWZpbmUgQVJNX1NDTUlfQ0xPQ0tfUFJP VE9DT0xfUFJJVkFURV9IXw0KPiArDQo+ICsjcHJhZ21hIHBhY2soMSkNCj4gKw0KPiArLy8gQ2xv Y2sgcmF0ZSBpbiB0d28gMzJiaXQgd29yZHMuDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFVJ TlQzMiBMb3c7DQo+ICsgIFVJTlQzMiBIaWdoOw0KPiArfSBDTE9DS19SQVRFX0RXT1JEOw0KPiAr DQo+ICsvLyBGb3JtYXQgb2YgdGhlIHJldHVybmVkIHJhdGUgYXJyYXkuIExpbmVhciBvciBOb24t bGluZWFyLC5SYXRlc0ZsYWcgQml0WzEyXQ0KPiArI2RlZmluZSBSQVRFX0ZPUk1BVF9TSElGVCAg ICAgICAgICAgMTINCj4gKyNkZWZpbmUgUkFURV9GT1JNQVRfTUFTSyAgICAgICAgICAgIDB4MDAw MQ0KPiArI2RlZmluZSBSQVRFX0ZPUk1BVChSYXRlc0ZsYWdzKSAgICAgKChSYXRlc0ZsYWdzID4+ DQo+IFJBVEVfRk9STUFUX1NISUZUKSAgXA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmIFJBVEVfRk9STUFUX01BU0spDQo+ICsNCj4gKy8vIE51bWJlciBvZiByZW1h aW5pbmcgcmF0ZXMgYWZ0ZXIgYSBjYWxsIHRvIHRoZSBTQ1AsIFJhdGVzRmxhZyBCaXRzWzMxOjE2 XQ0KPiArI2RlZmluZSBOVU1fUkVNQUlOX1JBVEVTX1NISUZUICAgICAgICAxNg0KPiArI2RlZmlu ZSBOVU1fUkVNQUlOX1JBVEVTKFJhdGVzRmxhZ3MpICAoKFJhdGVzRmxhZ3MgPj4NCj4gTlVNX1JF TUFJTl9SQVRFU19TSElGVCkpDQo+ICsNCj4gKy8vIE51bWJlciBvZiByYXRlcyB0aGF0IGFyZSBy ZXR1cm5lZCBieSBhIGNhbGwudG8gdGhlIFNDUCwgUmF0ZXNGbGFnDQo+IEJpdHNbMTE6MF0NCj4g KyNkZWZpbmUgTlVNX1JBVEVTX01BU0sgICAgICAgICAgICAgIDB4MEZGRg0KPiArI2RlZmluZSBO VU1fUkFURVMoUmF0ZXNGbGFncykgICAgICAgKFJhdGVzRmxhZ3MgJiBOVU1fUkFURVNfTUFTSykN Cj4gKw0KPiArLy8gUmV0dXJuIHZhbHVlcyBmb3IgdGhlIENMT0NLX0RFU0NSSUJFUl9SQVRFIGNv bW1hbmQuDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFVJTlQzMiBOdW1SYXRlc0ZsYWdzOw0K PiArDQo+ICsgIC8vIE5PVEU6IFNpbmNlIEVESzIgZG9lcyBub3QgYWxsb3cgZmxleGlibGUgYXJy YXkgbWVtYmVyIFtdIHdlIGRlY2xhcmUNCj4gKyAgLy8gaGVyZSBhcnJheSBvZiAxIGVsZW1lbnQg bGVuZ3RoLiBIb3dldmVyIGJlbG93IGlzIHVzZWQgYXMgYSB2YXJpYWJsZQ0KPiArICAvLyBsZW5n dGggYXJyYXkuDQo+ICsgIENMT0NLX1JBVEVfRFdPUkQgUmF0ZXNbMV07DQo+ICt9IENMT0NLX0RF U0NSSUJFX1JBVEVTOw0KPiArDQo+ICsjZGVmaW5lIENMT0NLX1NFVF9ERUZBVUxUX0ZMQUdTICAg MA0KPiArDQo+ICsvLyBNZXNzYWdlIHBhcmFtZXRlcnMgZm9yIENMT0NLX1JBVEVfU0VUIGNvbW1h bmQuDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFVJTlQzMiBGbGFnczsNCj4gKyAgVUlOVDMy IENsb2NrSWQ7DQo+ICsgIENMT0NLX1JBVEVfRFdPUkQgUmF0ZTsNCj4gK30gQ0xPQ0tfUkFURV9T RVRfQVRUUklCVVRFUzsNCj4gKw0KPiArLy8gIGlmIENsb2NrQXR0ciBCaXRbMF0gaXMgc2V0IHRo ZW4gY2xvY2sgZGV2aWNlIGlzIGVuYWJsZWQuDQo+ICsjZGVmaW5lIENMT0NLX0VOQUJMRV9NQVNL ICAgICAgICAgMHgxDQo+ICsjZGVmaW5lIENMT0NLX0VOQUJMRUQoQ2xvY2tBdHRyKSAgKChDbG9j a0F0dHIgJiBDTE9DS19FTkFCTEVfTUFTSykNCj4gPT0gMSkNCj4gKw0KPiArdHlwZWRlZiBzdHJ1 Y3Qgew0KPiArICBVSU5UMzIgQXR0cmlidXRlczsNCj4gKyAgVUlOVDggIENsb2NrTmFtZVtTQ01J X01BWF9TVFJfTEVOXTsNCj4gK30gQ0xPQ0tfQVRUUklCVVRFUzsNCj4gKw0KPiArI3ByYWdtYSBw YWNrKCkNCj4gKw0KPiArLyoqIEluaXRpYWxpemUgY2xvY2sgbWFuYWdlbWVudCBwcm90b2NvbCBh bmQgaW5zdGFsbCBwcm90b2NvbCBvbiBhIGdpdmVuDQo+IGhhbmRsZS4NCj4gKw0KPiArICBAcGFy YW1baW5dIEhhbmRsZSAgICAgICAgICAgICAgSGFuZGxlIHRvIGluc3RhbGwgY2xvY2sgbWFuYWdl bWVudCBwcm90b2NvbC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAg Q2xvY2sgcHJvdG9jb2wgaW50ZXJmYWNlIGluc3RhbGxlZCBzdWNjZXNzZnVsbHkuDQo+ICsqKi8N Cj4gK0VGSV9TVEFUVVMNCj4gK1NjbWlDbG9ja1Byb3RvY29sSW5pdCAoDQo+ICsgIElOIEVGSV9I QU5ETEUgKkhhbmRsZQ0KPiArICApOw0KPiArDQo+ICsjZW5kaWYgLyogQVJNX1NDTUlfQ0xPQ0tf UFJPVE9DT0xfUFJJVkFURV9IXyAqLw0KPiBkaWZmIC0tZ2l0IGEvQXJtUGtnL0RyaXZlcnMvQXJt U2NtaUR4ZS9Bcm1TY21pRHhlLmluZg0KPiBiL0FybVBrZy9Ecml2ZXJzL0FybVNjbWlEeGUvQXJt U2NtaUR4ZS5pbmYNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXgNCj4gMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDVjZTljMDRjZTQ2OGQ3NGU1Yw0KPiA2 ZDM4NzM5ZjkwNTZmM2ZjNDg2OTQNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9Bcm1Qa2cvRHJp dmVycy9Bcm1TY21pRHhlL0FybVNjbWlEeGUuaW5mDQo+IEBAIC0wLDAgKzEsNTMgQEANCj4gKyMv KiogQGZpbGUNCj4gKyMNCj4gKyMgIENvcHlyaWdodCAoYykgMjAxNy0yMDE4LCBBcm0gTGltaXRl ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gKyMNCj4gKyMgIFRoaXMgcHJvZ3JhbSBhbmQgdGhl IGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4gKyMgIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFp bGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQ0KPiBCU0QgTGljZW5z ZQ0KPiArIyAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0 ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPiBmb3VuZCBhdA0KPiArIyAgaHR0cDovL29wZW5z b3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPiArIw0KPiArIyAgVEhFIFBST0dS QU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyINCj4g QkFTSVMsDQo+ICsjICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFO WSBLSU5ELCBFSVRIRVINCj4gRVhQUkVTUyBPUiBJTVBMSUVELg0KPiArIw0KPiArIyAgU3lzdGVt IENvbnRyb2wgYW5kIE1hbmFnZW1lbnQgSW50ZXJmYWNlIFYxLjANCj4gKyMgICAgaHR0cDovL2lu Zm9jZW50ZXIuYXJtLmNvbS9oZWxwL3RvcGljL2NvbS5hcm0uZG9jLmRlbjAwNTZhLw0KPiArIyAg ICBERU4wMDU2QV9TeXN0ZW1fQ29udHJvbF9hbmRfTWFuYWdlbWVudF9JbnRlcmZhY2UucGRmDQo+ ICsjKiovDQo+ICsNCj4gK1tEZWZpbmVzXQ0KPiArICBJTkZfVkVSU0lPTiAgICAgICAgICAgICAg ICAgICAgPSAweDAwMDEwMDE5DQo+ICsgIEJBU0VfTkFNRSAgICAgICAgICAgICAgICAgICAgICA9 IEFybVNjbWlEeGUNCj4gKyAgRklMRV9HVUlEICAgICAgICAgICAgICAgICAgICAgID0gOTU4NTk4 NEMtRjAyNy00NUU5LUFGREYtQURBQTZERkFBQUM3DQo+ICsgIE1PRFVMRV9UWVBFICAgICAgICAg ICAgICAgICAgICA9IERYRV9EUklWRVINCj4gKyAgVkVSU0lPTl9TVFJJTkcgICAgICAgICAgICAg ICAgID0gMS4wDQo+ICsgIEVOVFJZX1BPSU5UICAgICAgICAgICAgICAgICAgICA9IEFybVNjbWlE eGVFbnRyeVBvaW50DQo+ICsNCj4gK1tTb3VyY2VzLmNvbW1vbl0NCj4gKyAgU2NtaS5jDQo+ICsg IFNjbWlCYXNlUHJvdG9jb2wuYw0KPiArICBTY21pQ2xvY2tQcm90b2NvbC5jDQo+ICsgIFNjbWlE eGUuYw0KPiArICBTY21pUGVyZm9ybWFuY2VQcm90b2NvbC5jDQo+ICsNCj4gK1tQYWNrYWdlc10N Cj4gKyAgQXJtUGtnL0FybVBrZy5kZWMNCj4gKyAgQXJtUGxhdGZvcm1Qa2cvQXJtUGxhdGZvcm1Q a2cuZGVjDQo+ICsgIE1kZVBrZy9NZGVQa2cuZGVjDQo+ICsNCj4gK1tMaWJyYXJ5Q2xhc3Nlc10N Cj4gKyAgQXJtTGliDQo+ICsgIEFybU10bExpYg0KPiArICBEZWJ1Z0xpYg0KPiArICBJb0xpYg0K PiArICBVZWZpQm9vdFNlcnZpY2VzVGFibGVMaWINCj4gKyAgVWVmaURyaXZlckVudHJ5UG9pbnQN Cj4gKw0KPiArW1Byb3RvY29sc10NCj4gKyAgZ0FybVNjbWlCYXNlUHJvdG9jb2xHdWlkDQo+ICsg IGdBcm1TY21pQ2xvY2tQcm90b2NvbEd1aWQNCj4gKyAgZ0FybVNjbWlQZXJmb3JtYW5jZVByb3Rv Y29sR3VpZA0KPiArDQo+ICtbRGVwZXhdDQo+ICsgIFRSVUUNCj4gKw0KPiBkaWZmIC0tZ2l0DQo+ IGEvQXJtUGtnL0RyaXZlcnMvQXJtU2NtaUR4ZS9Bcm1TY21pUGVyZm9ybWFuY2VQcm90b2NvbFBy aXZhdGUuaA0KPiBiL0FybVBrZy9Ecml2ZXJzL0FybVNjbWlEeGUvQXJtU2NtaVBlcmZvcm1hbmNl UHJvdG9jb2xQcml2YXRlLmgNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXgNCj4gMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDUxNGY0NWE5ZjVkZDk2MGQy DQo+IDg0NGExOWI1N2E5MWI5MzE0OWYxYjkNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysNCj4gYi9B cm1Qa2cvRHJpdmVycy9Bcm1TY21pRHhlL0FybVNjbWlQZXJmb3JtYW5jZVByb3RvY29sUHJpdmF0 ZS5oDQo+IEBAIC0wLDAgKzEsNTUgQEANCj4gKy8qKiBAZmlsZQ0KPiArDQo+ICsgIENvcHlyaWdo dCAoYykgMjAxNy0yMDE4LCBBcm0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gKw0K PiArICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+ICsgIGFy ZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRp b25zIG9mIHRoZQ0KPiBCU0QgTGljZW5zZQ0KPiArICB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRp c3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+IGZvdW5k IGF0DQo+ICsgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHAN Cj4gKw0KPiArICBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VO U0UgT04gQU4gIkFTIElTIg0KPiBCQVNJUywNCj4gKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJF UFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+IEVYUFJFU1MgT1IgSU1QTElFRC4N Cj4gKw0KPiArICBTeXN0ZW0gQ29udHJvbCBhbmQgTWFuYWdlbWVudCBJbnRlcmZhY2UgVjEuMA0K PiArICAgIGh0dHA6Ly9pbmZvY2VudGVyLmFybS5jb20vaGVscC90b3BpYy9jb20uYXJtLmRvYy5k ZW4wMDU2YS8NCj4gKyAgICBERU4wMDU2QV9TeXN0ZW1fQ29udHJvbF9hbmRfTWFuYWdlbWVudF9J bnRlcmZhY2UucGRmDQo+ICsqKi8NCj4gKw0KPiArI2lmbmRlZiBBUk1fU0NNSV9QRVJGT1JNQU5D RV9QUk9UT0NPTF9QUklWQVRFX0hfDQo+ICsjZGVmaW5lIEFSTV9TQ01JX1BFUkZPUk1BTkNFX1BS T1RPQ09MX1BSSVZBVEVfSF8NCj4gKw0KPiArI2luY2x1ZGUgPFByb3RvY29sL0FybVNjbWlQZXJm b3JtYW5jZVByb3RvY29sLmg+DQo+ICsNCj4gKy8vIE51bWJlciBvZiBwZXJmb3JtYW5jZSBsZXZl bHMgcmV0dXJuZWQgYnkgYSBjYWxsIHRvIHRoZSBTQ1AsIEx2bHMNCj4gQml0c1sxMTowXQ0KPiAr I2RlZmluZSBOVU1fUEVSRl9MRVZFTFNfTUFTSyAgICAgICAgICAweDBGRkYNCj4gKyNkZWZpbmUg TlVNX1BFUkZfTEVWRUxTKEx2bHMpIChMdmxzICYgTlVNX1BFUkZfTEVWRUxTX01BU0spDQo+ICsN Cj4gKy8vIE51bWJlciBvZiBwZXJmb3JtYW5jZSBsZXZlbHMgcmVtYWluaW5nIGFmdGVyIGEgY2Fs bCB0byB0aGUgU0NQLCBMdmxzDQo+IEJpdHNbMzE6MTZdDQo+ICsjZGVmaW5lIE5VTV9SRU1BSU5f UEVSRl9MRVZFTFNfU0hJRlQgIDE2DQo+ICsjZGVmaW5lIE5VTV9SRU1BSU5fUEVSRl9MRVZFTFMo THZscykgKEx2bHMgPj4NCj4gTlVNX1JFTUFJTl9QRVJGX0xFVkVMU19TSElGVCkNCj4gKw0KPiAr LyoqIFJldHVybiB2YWx1ZXMgZm9yDQo+IFNDTUlfTUVTU0FHRV9JRF9QRVJGT1JNQU5DRV9ERVND UklCRV9MRVZFTFMgY29tbWFuZC4NCj4gKyAgU0NNSSBTcGVjIO+/vSA0LjUuMi41DQo+ICsqKi8N Cj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgVUlOVDMyIE51bUxldmVsczsNCj4gKw0KPiArICAv LyBOT1RFOiBTaW5jZSBFREsyIGRvZXMgbm90IGFsbG93IGZsZXhpYmxlIGFycmF5IG1lbWJlciBb XSB3ZSBkZWNsYXJlDQo+ICsgIC8vIGhlcmUgYXJyYXkgb2YgMSBlbGVtZW50IGxlbmd0aC4gSG93 ZXZlciBiZWxvdyBpcyB1c2VkIGFzIGEgdmFyaWFibGUNCj4gKyAgLy8gbGVuZ3RoIGFycmF5Lg0K PiArICBTQ01JX1BFUkZPUk1BTkNFX0xFVkVMIFBlcmZMZXZlbFsxXTsgLy8gT2Zmc2V0IHRvIGFy cmF5IG9mDQo+IHBlcmZvcm1hbmNlIGxldmVscw0KPiArfSBQRVJGX0RFU0NSSUJFX0xFVkVMUzsN Cj4gKw0KPiArLyoqIEluaXRpYWxpemUgcGVyZm9ybWFuY2UgbWFuYWdlbWVudCBwcm90b2NvbCBh bmQgaW5zdGFsbCBvbiBhIGdpdmVuDQo+IEhhbmRsZS4NCj4gKw0KPiArICBAcGFyYW1baW5dIEhh bmRsZSAgICAgICAgICAgICAgSGFuZGxlIHRvIGluc3RhbGwgcGVyZm9ybWFuY2UgbWFuYWdlbWVu dA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2wuDQo+ICsNCj4g KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFBlcmZvcm1hbmNlIHByb3RvY29sIGlu c3RhbGxlZCBzdWNjZXNzZnVsbHkuDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1NjbWlQZXJm b3JtYW5jZVByb3RvY29sSW5pdCAoDQo+ICsgIElOIEVGSV9IQU5ETEUqIEhhbmRsZQ0KPiArICAp Ow0KPiArDQo+ICsjZW5kaWYgLyogQVJNX1NDTUlfUEVSRk9STUFOQ0VfUFJPVE9DT0xfUFJJVkFU RV9IXyAqLw0KPiBkaWZmIC0tZ2l0IGEvQXJtUGtnL0RyaXZlcnMvQXJtU2NtaUR4ZS9TY21pLmMN Cj4gYi9Bcm1Qa2cvRHJpdmVycy9Bcm1TY21pRHhlL1NjbWkuYw0KPiBuZXcgZmlsZSBtb2RlIDEw MDY0NA0KPiBpbmRleA0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw Li4xZTI3OWY2OWNmNjE1NDI4ZGJiDQo+IDY0NzdiOGFjN2RlMzI1ODYyOGRmMw0KPiAtLS0gL2Rl di9udWxsDQo+ICsrKyBiL0FybVBrZy9Ecml2ZXJzL0FybVNjbWlEeGUvU2NtaS5jDQo+IEBAIC0w LDAgKzEsMjYyIEBADQo+ICsvKiogQGZpbGUNCj4gKw0KPiArICBDb3B5cmlnaHQgKGMpIDIwMTct MjAxOCwgQXJtIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQo+ICsNCj4gKyAgVGhpcyBw cm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPiArICBhcmUgbGljZW5zZWQg YW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUN Cj4gQlNEIExpY2Vuc2UNCj4gKyAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24u ICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPiBmb3VuZCBhdA0KPiArICBo dHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+ICsNCj4gKyAg VEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJB UyBJUyINCj4gQkFTSVMsDQo+ICsgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElP TlMgT0YgQU5ZIEtJTkQsIEVJVEhFUg0KPiBFWFBSRVNTIE9SIElNUExJRUQuDQo+ICsNCj4gKyAg U3lzdGVtIENvbnRyb2wgYW5kIE1hbmFnZW1lbnQgSW50ZXJmYWNlIFYxLjANCj4gKyAgICBodHRw Oi8vaW5mb2NlbnRlci5hcm0uY29tL2hlbHAvdG9waWMvY29tLmFybS5kb2MuZGVuMDA1NmEvDQo+ ICsgICAgREVOMDA1NkFfU3lzdGVtX0NvbnRyb2xfYW5kX01hbmFnZW1lbnRfSW50ZXJmYWNlLnBk Zg0KPiArKiovDQo+ICsNCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0FybU10bExpYi5oPg0KPiArI2lu Y2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFs bG9jYXRpb25MaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlCb290U2VydmljZXNUYWJs ZUxpYi5oPg0KPiArDQo+ICsjaW5jbHVkZSAiU2NtaVByaXZhdGUuaCINCj4gKw0KPiArLy8gU0NN SSBTcGVjaWZpY2F0aW9uIDEuMA0KPiArI2RlZmluZSAgTUFYX1BST1RPQ09MUyAgICAgICA2DQo+ ICsNCj4gKyNkZWZpbmUgIFBST1RPQ09MX01BU0sgICAgIDB4Rg0KPiArDQo+ICsvLyBBcmJpdHJh cnkgdGltZW91dCB2YWx1ZSAyMG1zLg0KPiArI2RlZmluZSAgUkVTUE9OU0VfVElNRU9VVCAgMjAw MDANCj4gKw0KPiArLyoqIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIG1lc3NhZ2UgcGF5bG9hZC4N Cj4gKw0KPiArICBAcGFyYW1bb3V0XSBQYXlsb2FkICAgICAgICAgSG9sZHMgcG9pbnRlciB0byB0 aGUgbWVzc2FnZSBwYXlsb2FkLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAg ICBQYXlsb2FkIGhvbGRzIGEgdmFsaWQgbWVzc2FnZSBwYXlsb2FkIHBvaW50ZXIuDQo+ICsgIEBy ZXR2YWwgRUZJX1RJTUVPVVQgICAgICAgICBUaW1lIG91dCBlcnJvciBpZiBNVEwgY2hhbm5lbCBp cyBidXN5Lg0KPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRFRCAgICAgSWYgTVRMIGNoYW5uZWwg aXMgdW5zdXBwb3J0ZWQuDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1NjbWlDb21tYW5kR2V0 UGF5bG9hZCAoDQo+ICsgIE9VVCBVSU5UMzIqKiBQYXlsb2FkDQo+ICsgICkNCj4gK3sNCj4gKyAg RUZJX1NUQVRVUyAgIFN0YXR1czsNCj4gKyAgTVRMX0NIQU5ORUwgICpDaGFubmVsOw0KPiArDQo+ ICsgIC8vIEdldCBoYW5kbGUgdG8gdGhlIENoYW5uZWwuDQo+ICsgIFN0YXR1cyA9IE10bEdldENo YW5uZWwgKE1UTF9DSEFOTkVMX1RZUEVfTE9XLCAmQ2hhbm5lbCk7DQo+ICsgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAg Ly8gUGF5bG9hZCB3aWxsIG5vdCBiZSBwb3B1bGF0ZWQgdW50aWwgY2hhbm5lbCBpcyBmcmVlLg0K PiArICBTdGF0dXMgPSBNdGxXYWl0VW50aWxDaGFubmVsRnJlZSAoQ2hhbm5lbCwgUkVTUE9OU0Vf VElNRU9VVCk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4g U3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgLy8gR2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBwYXls b2FkLg0KPiArICAqUGF5bG9hZCA9IE10bEdldENoYW5uZWxQYXlsb2FkIChDaGFubmVsKTsNCj4g Kw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ICsNCj4gKy8qKiBFeGVjdXRlIGEg U0NNSSBjb21tYW5kIGFuZCByZWNlaXZlIGEgcmVzcG9uc2UuDQo+ICsNCj4gKyAgVGhpcyBmdW5j dGlvbiB1c2VzIGEgTVRMIGNoYW5uZWwgdG8gdHJhbnNmZXIgbWVzc2FnZSB0byBTQ1ANCj4gKyAg YW5kIHdhaXRzIGZvciBhIHJlc3BvbnNlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICBDb21tYW5k ICAgICAgUG9pbnRlciB0byB0aGUgU0NNSSBjb21tYW5kIChQcm90b2NvbCBJRA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGFuZCBNZXNzYWdlIElEKQ0KPiArDQo+ICsgIEBwYXJhbVtp bixvdXRdIFBheWxvYWRMZW5ndGggICBTQ01JIGNvbW1hbmQgbWVzc2FnZSBsZW5ndGguDQo+ICsN Cj4gKyAgQHBhcmFtW291dF0gT1BUSU9OQUwgIFJldHVyblZhbHVlcyAgIFBvaW50ZXIgdG8gU0NN SSByZXNwb25zZS4NCj4gKw0KPiArICBAcmV0dmFsIE9VVCBFRklfU1VDQ0VTUyAgICAgICBDb21t YW5kIHNlbnQgYW5kIG1lc3NhZ2UgcmVjZWl2ZWQNCj4gc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0 dmFsIE9VVCBFRklfVU5TVVBQT1JURUQgICBDaGFubmVsIG5vdCBzdXBwb3J0ZWQuDQo+ICsgIEBy ZXR2YWwgT1VUIEVGSV9USU1FT1VUICAgICAgIFRpbWVvdXQgb24gdGhlIGNoYW5uZWwuDQo+ICsg IEByZXR2YWwgT1VUIEVGSV9ERVZJQ0VfRVJST1IgIENoYW5uZWwgbm90IHJlYWR5Lg0KPiArICBA cmV0dmFsIE9VVCBFRklfREVWSUNFX0VSUk9SICBNZXNzYWdlIEhlYWRlciBjb3JydXB0ZWQuDQo+ ICsgIEByZXR2YWwgT1VUIEVGSV9ERVZJQ0VfRVJST1IgIFNDTUkgZXJyb3IuDQo+ICsqKi8NCj4g K0VGSV9TVEFUVVMNCj4gK1NjbWlDb21tYW5kRXhlY3V0ZSAoDQo+ICsgIElOICAgICBTQ01JX0NP TU1BTkQgICpDb21tYW5kLA0KPiArICBJTiBPVVQgVUlOVDMyICAgICAgICAqUGF5bG9hZExlbmd0 aCwNCj4gKyAgT1VUICAgIFVJTlQzMiAgICAgICAqKlJldHVyblZhbHVlcyBPUFRJT05BTA0KPiAr ICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBTQ01J X01FU1NBR0VfUkVTUE9OU0UgICpSZXNwb25zZTsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAg ICBNZXNzYWdlSGVhZGVyOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgIFJlc3BvbnNlSGVh ZGVyOw0KPiArICBNVExfQ0hBTk5FTCAgICAgICAgICAgICpDaGFubmVsOw0KPiArDQo+ICsgIEFT U0VSVCAoUGF5bG9hZExlbmd0aCAhPSBOVUxMKTsNCj4gKw0KPiArICBTdGF0dXMgPSBNdGxHZXRD aGFubmVsIChNVExfQ0hBTk5FTF9UWVBFX0xPVywgJkNoYW5uZWwpOw0KPiArICBpZiAoRUZJX0VS Uk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsg IC8vIEZpbGwgaW4gbWVzc2FnZSBoZWFkZXIuDQo+ICsgIE1lc3NhZ2VIZWFkZXIgPSBTQ01JX01F U1NBR0VfSEVBREVSICgNCj4gKyAgICAgICAgICAgICAgICAgICAgQ29tbWFuZC0+TWVzc2FnZUlk LA0KPiArICAgICAgICAgICAgICAgICAgICBTQ01JX01FU1NBR0VfVFlQRV9DT01NQU5ELA0KPiAr ICAgICAgICAgICAgICAgICAgICBDb21tYW5kLT5Qcm90b2NvbElkDQo+ICsgICAgICAgICAgICAg ICAgICAgICk7DQo+ICsNCj4gKyAgLy8gU2VuZCBwYXlsb2FkIHVzaW5nIE1UTCBjaGFubmVsLg0K PiArICBTdGF0dXMgPSBNdGxTZW5kTWVzc2FnZSAoDQo+ICsgICAgICAgICAgICAgQ2hhbm5lbCwN Cj4gKyAgICAgICAgICAgICBNZXNzYWdlSGVhZGVyLA0KPiArICAgICAgICAgICAgICpQYXlsb2Fk TGVuZ3RoDQo+ICsgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICAvLyBXYWl0IGZvciB0 aGUgcmVzcG9uc2Ugb24gdGhlIGNoYW5uZWwuDQo+ICsgIFN0YXR1cyA9IE10bFJlY2VpdmVNZXNz YWdlIChDaGFubmVsLCAmUmVzcG9uc2VIZWFkZXIsDQo+IFBheWxvYWRMZW5ndGgpOw0KPiArICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0K PiArDQo+ICsgIC8vIFNDTUkgbXVzdCByZXR1cm4gTWVzc2FnZUhlYWRlciB1bm1vZGlmaWVkLg0K PiArICBpZiAoTWVzc2FnZUhlYWRlciAhPSBSZXNwb25zZUhlYWRlcikgew0KPiArICAgIEFTU0VS VCAoRkFMU0UpOw0KPiArICAgIHJldHVybiBFRklfREVWSUNFX0VSUk9SOw0KPiArICB9DQo+ICsN Cj4gKyAgUmVzcG9uc2UgPSAoU0NNSV9NRVNTQUdFX1JFU1BPTlNFKilNdGxHZXRDaGFubmVsUGF5 bG9hZA0KPiAoQ2hhbm5lbCk7DQo+ICsNCj4gKyAgaWYgKFJlc3BvbnNlLT5TdGF0dXMgIT0gU0NN SV9TVUNDRVNTKSB7DQo+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIlNDTUkgZXJyb3I6IFBy b3RvY29sSWQgPSAweCV4LCBNZXNzYWdlSWQgPQ0KPiAweCV4LCBlcnJvciA9ICVkXG4iLA0KPiAr ICAgICAgQ29tbWFuZC0+UHJvdG9jb2xJZCwNCj4gKyAgICAgIENvbW1hbmQtPk1lc3NhZ2VJZCwN Cj4gKyAgICAgIFJlc3BvbnNlLT5TdGF0dXMNCj4gKyAgICAgICkpOw0KPiArDQo+ICsgICAgQVNT RVJUIChGQUxTRSk7DQo+ICsgICAgcmV0dXJuIEVGSV9ERVZJQ0VfRVJST1I7DQo+ICsgIH0NCj4g Kw0KPiArICBpZiAoUmV0dXJuVmFsdWVzICE9IE5VTEwpIHsNCj4gKyAgICAqUmV0dXJuVmFsdWVz ID0gUmVzcG9uc2UtPlJldHVyblZhbHVlczsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBFRklf U1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyoqIEludGVybmFsIGNvbW1vbiBmdW5jdGlvbiB1c2Vm dWwgZm9yIGNvbW1vbiBwcm90b2NvbCBkaXNjb3ZlcnkNCj4gbWVzc2FnZXMuDQo+ICsNCj4gKyAg QHBhcmFtW2luXSBQcm90b2NvbElkICAgIFByb3RvY29sIElkIG9mIHRoZSB0aGUgcHJvdG9jb2wu DQo+ICsgIEBwYXJhbVtpbl0gTWVzYWFnZUlkICAgICBNZXNzYWdlIElkIG9mIHRoZSBtZXNzYWdl Lg0KPiArDQo+ICsgIEBwYXJhbVtvdXRdIFJldHVyblZhbHVlcyBTQ01JIHJlc3BvbnNlIHJldHVy biB2YWx1ZXMuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgIFN1Y2Nlc3Mgd2l0 aCB2YWxpZCByZXR1cm4gdmFsdWVzLg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgU0NN SSBlcnJvci4NCj4gKyAgQHJldHZhbCAhKEVGSV9TVUNDRVNTKSAgIE90aGVyIGVycm9ycy4NCj4g KyoqLw0KPiArU1RBVElDDQo+ICtFRklfU1RBVFVTDQo+ICtTY21pUHJvdG9jb2xEaXNjb3ZlcnlD b21tb24gKA0KPiArICBJTiBTQ01JX1BST1RPQ09MX0lEICBQcm90b2NvbElkLA0KPiArICBJTiBT Q01JX01FU1NBR0VfSUQgICBNZXNzYWdlSWQsDQo+ICsgIE9VVCBVSU5UMzIgICAgICAgICAgICoq UmV0dXJuVmFsdWVzDQo+ICsgICkNCj4gK3sNCj4gKyAgU0NNSV9DT01NQU5EICBDb21tYW5kOw0K PiArICBVSU5UMzIgICAgICAgIFBheWxvYWRMZW5ndGggPSAwOw0KPiArDQo+ICsgIENvbW1hbmQu UHJvdG9jb2xJZCA9IFByb3RvY29sSWQ7DQo+ICsgIENvbW1hbmQuTWVzc2FnZUlkICA9IE1lc3Nh Z2VJZDsNCj4gKw0KPiArICByZXR1cm4gU2NtaUNvbW1hbmRFeGVjdXRlICgNCj4gKyAgICAgICAg ICAgJkNvbW1hbmQsDQo+ICsgICAgICAgICAgICZQYXlsb2FkTGVuZ3RoLA0KPiArICAgICAgICAg ICBSZXR1cm5WYWx1ZXMNCj4gKyAgICAgICAgICAgKTsNCj4gK30NCj4gKw0KPiArLyoqIFJldHVy biBwcm90b2NvbCB2ZXJzaW9uIGZyb20gU0NQIGZvciBhIGdpdmVuIHByb3RvY29sIElELg0KPiAr DQo+ICsgIEBwYXJhbVtpbl0gIFByb3RvY29sIElEICAgIFByb3RvY29sIElELg0KPiArICBAcGFy YW1bb3V0XSBWZXJzaW9uICAgICAgICBQb2ludGVyIHRvIHZlcnNpb24gb2YgdGhlIHByb3RvY29s Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgVmVyc2lvbiBob2xkcyBhIHZh bGlkIHZlcnNpb24gcmVjZWl2ZWQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJv bSB0aGUgU0NQLg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgIFNDTUkgZXJyb3IuDQo+ ICsgIEByZXR2YWwgIShFRklfU1VDQ0VTUykgICAgT3RoZXIgZXJyb3JzLg0KPiArKiovDQo+ICtF RklfU1RBVFVTDQo+ICtTY21pR2V0UHJvdG9jb2xWZXJzaW9uICgNCj4gKyAgSU4gIFNDTUlfUFJP VE9DT0xfSUQgIFByb3RvY29sSWQsDQo+ICsgIE9VVCBVSU5UMzIgICAgICAgICAgICAqVmVyc2lv bg0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgU3RhdHVzOw0KPiAr ICBVSU5UMzIgICAgICAgICAgICAgICAgICpQcm90b2NvbFZlcnNpb247DQo+ICsNCj4gKyAgU3Rh dHVzID0gU2NtaVByb3RvY29sRGlzY292ZXJ5Q29tbW9uICgNCj4gKyAgICAgICAgICAgICBQcm90 b2NvbElkLA0KPiArICAgICAgICAgICAgIFNDTUlfTUVTU0FHRV9JRF9QUk9UT0NPTF9WRVJTSU9O LA0KPiArICAgICAgICAgICAgIChVSU5UMzIqKikmUHJvdG9jb2xWZXJzaW9uDQo+ICsgICAgICAg ICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBT dGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICAqVmVyc2lvbiA9ICpQcm90b2NvbFZlcnNpb247DQo+ ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKiogUmV0dXJuIHBy b3RvY29sIGF0dHJpYnV0ZXMgZnJvbSBTQ1AgZm9yIGEgZ2l2ZW4gcHJvdG9jb2wgSUQuDQo+ICsN Cj4gKyAgQHBhcmFtW2luXSAgUHJvdG9jb2wgSUQgICAgUHJvdG9jb2wgSUQuDQo+ICsgIEBwYXJh bVtvdXRdIFJldHVyblZhbHVlcyAgIFBvaW50ZXIgdG8gYXR0cmlidXRlcyBvZiB0aGUgcHJvdG9j b2wuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICBSZXR1cm5WYWx1ZXMgcG9p bnRzIHRvIHByb3RvY29sIGF0dHJpYnV0ZXMuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJP UiAgU0NNSSBlcnJvci4NCj4gKyAgQHJldHZhbCAhKEVGSV9TVUNDRVNTKSAgICBPdGhlciBlcnJv cnMuDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1NjbWlHZXRQcm90b2NvbEF0dHJpYnV0ZXMg KA0KPiArICBJTiAgU0NNSV9QUk9UT0NPTF9JRCAgUHJvdG9jb2xJZCwNCj4gKyAgT1VUIFVJTlQz MiAgICAgICAgICAgICoqUmV0dXJuVmFsdWVzDQo+ICsgICkNCj4gK3sNCj4gKyAgcmV0dXJuIFNj bWlQcm90b2NvbERpc2NvdmVyeUNvbW1vbiAoDQo+ICsgICAgICAgICAgIFByb3RvY29sSWQsDQo+ ICsgICAgICAgICAgIFNDTUlfTUVTU0FHRV9JRF9QUk9UT0NPTF9BVFRSSUJVVEVTLA0KPiArICAg ICAgICAgICBSZXR1cm5WYWx1ZXMNCj4gKyAgICAgICAgICAgKTsNCj4gK30NCj4gKw0KPiArLyoq IFJldHVybiBwcm90b2NvbCBtZXNzYWdlIGF0dHJpYnV0ZXMgZnJvbSBTQ1AgZm9yIGEgZ2l2ZW4g cHJvdG9jb2wgSUQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgUHJvdG9jb2wgSUQgICAgUHJvdG9j b2wgSUQuDQo+ICsgIEBwYXJhbVtvdXRdIEF0dHJpYnV0ZXMgICAgIFBvaW50ZXIgdG8gYXR0cmli dXRlcyBvZiB0aGUgcHJvdG9jb2wuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAg ICBSZXR1cm5WYWx1ZXMgcG9pbnRzIHRvIHByb3RvY29sIG1lc3NhZ2UNCj4gYXR0cmlidXRlcy4N Cj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICBTQ01JIGVycm9yLg0KPiArICBAcmV0dmFs ICEoRUZJX1NVQ0NFU1MpICAgIE90aGVyIGVycm9ycy4NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0K PiArU2NtaUdldFByb3RvY29sTWVzc2FnZUF0dHJpYnV0ZXMgKA0KPiArICBJTiAgU0NNSV9QUk9U T0NPTF9JRCAgUHJvdG9jb2xJZCwNCj4gKyAgT1VUIFVJTlQzMiAgICAgICAgICAgICoqUmV0dXJu VmFsdWVzDQo+ICsgICkNCj4gK3sNCj4gKyAgcmV0dXJuIFNjbWlQcm90b2NvbERpc2NvdmVyeUNv bW1vbiAoDQo+ICsgICAgICAgICAgIFByb3RvY29sSWQsDQo+ICsgICAgICAgICAgIFNDTUlfTUVT U0FHRV9JRF9QUk9UT0NPTF9NRVNTQUdFX0FUVFJJQlVURVMsDQo+ICsgICAgICAgICAgIFJldHVy blZhbHVlcw0KPiArICAgICAgICAgICApOw0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEvQXJtUGtnL0Ry aXZlcnMvQXJtU2NtaUR4ZS9TY21pQmFzZVByb3RvY29sLmMNCj4gYi9Bcm1Qa2cvRHJpdmVycy9B cm1TY21pRHhlL1NjbWlCYXNlUHJvdG9jb2wuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBp bmRleA0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wODI5NDM4 YzgyZWM1NzIzY2ZiDQo+IGJmOWM0MTFkMTBmY2YyMmEyMmQ4OQ0KPiAtLS0gL2Rldi9udWxsDQo+ ICsrKyBiL0FybVBrZy9Ecml2ZXJzL0FybVNjbWlEeGUvU2NtaUJhc2VQcm90b2NvbC5jDQo+IEBA IC0wLDAgKzEsMzE4IEBADQo+ICsvKiogQGZpbGUNCj4gKw0KPiArICBDb3B5cmlnaHQgKGMpIDIw MTctMjAxOCwgQXJtIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQo+ICsNCj4gKyAgVGhp cyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPiArICBhcmUgbGljZW5z ZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0 aGUNCj4gQlNEIExpY2Vuc2UNCj4gKyAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRp b24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPiBmb3VuZCBhdA0KPiAr ICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+ICsNCj4g KyAgVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFO ICJBUyBJUyINCj4gQkFTSVMsDQo+ICsgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRB VElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUg0KPiBFWFBSRVNTIE9SIElNUExJRUQuDQo+ICsNCj4g KyAgU3lzdGVtIENvbnRyb2wgYW5kIE1hbmFnZW1lbnQgSW50ZXJmYWNlIFYxLjANCj4gKyAgICBo dHRwOi8vaW5mb2NlbnRlci5hcm0uY29tL2hlbHAvdG9waWMvY29tLmFybS5kb2MuZGVuMDA1NmEv DQo+ICsgICAgREVOMDA1NkFfU3lzdGVtX0NvbnRyb2xfYW5kX01hbmFnZW1lbnRfSW50ZXJmYWNl LnBkZg0KPiArKiovDQo+ICsNCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VMaWIuaD4NCj4gKyNp bmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpQm9v dFNlcnZpY2VzVGFibGVMaWIuaD4NCj4gKyNpbmNsdWRlIDxQcm90b2NvbC9Bcm1TY21pQmFzZVBy b3RvY29sLmg+DQo+ICsNCj4gKyNpbmNsdWRlICJBcm1TY21pQmFzZVByb3RvY29sUHJpdmF0ZS5o Ig0KPiArI2luY2x1ZGUgIlNjbWlQcml2YXRlLmgiDQo+ICsNCj4gKy8qKiBSZXR1cm4gdmVyc2lv biBvZiB0aGUgQmFzZSBwcm90b2NvbCBzdXBwb3J0ZWQgYnkgU0NQIGZpcm13YXJlLg0KPiArDQo+ ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgIEEgUG9pbnRlciB0byBTQ01JX0JBU0VfUFJPVE9DT0wg SW5zdGFuY2UuDQo+ICsNCj4gKyAgQHBhcmFtW291dF0gVmVyc2lvbiAgVmVyc2lvbiBvZiB0aGUg c3VwcG9ydGVkIFNDTUkgQmFzZSBwcm90b2NvbC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUND RVNTICAgICAgIFRoZSB2ZXJzaW9uIG9mIHRoZSBwcm90b2NvbCBpcyByZXR1cm5lZC4NCj4gKyAg QHJldHZhbCBFRklfREVWSUNFX0VSUk9SICBTQ1AgcmV0dXJucyBhbiBTQ01JIGVycm9yLg0KPiAr ICBAcmV0dmFsICEoRUZJX1NVQ0NFU1MpICAgIE90aGVyIGVycm9ycy4NCj4gKyoqLw0KPiArU1RB VElDDQo+ICtFRklfU1RBVFVTDQo+ICtCYXNlR2V0VmVyc2lvbiAoDQo+ICsgIElOICBTQ01JX0JB U0VfUFJPVE9DT0wgICpUaGlzLA0KPiArICBPVVQgVUlOVDMyICAgICAgICAgICAgICAqVmVyc2lv bg0KPiArICApDQo+ICt7DQo+ICsgIHJldHVybiBTY21pR2V0UHJvdG9jb2xWZXJzaW9uIChTQ01J X1BST1RPQ09MX0lEX0JBU0UsIFZlcnNpb24pOw0KPiArfQ0KPiArDQo+ICsvKiogUmV0dXJuIHRv dGFsIG51bWJlciBvZiBTQ01JIHByb3RvY29scyBzdXBwb3J0ZWQgYnkgdGhlIFNDUA0KPiBmaXJt d2FyZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICBBIFBvaW50ZXIgdG8g U0NNSV9CQVNFX1BST1RPQ09MIEluc3RhbmNlLg0KPiArDQo+ICsgIEBwYXJhbVtvdXRdIFRvdGFs UHJvdG9jb2xzIFRvdGFsIG51bWJlciBvZiBTQ01JIHByb3RvY29scyBzdXBwb3J0ZWQuDQo+ICsN Cj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICBUb3RhbCBudW1iZXIgb2YgcHJvdG9jb2xz IHN1cHBvcnRlZCBhcmUNCj4gcmV0dXJuZWQuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJP UiAgU0NQIHJldHVybnMgYSBTQ01JIGVycm9yLg0KPiArICBAcmV0dmFsICEoRUZJX1NVQ0NFU1Mp ICAgIE90aGVyIGVycm9ycy4NCj4gKyoqLw0KPiArU1RBVElDDQo+ICtFRklfU1RBVFVTDQo+ICtC YXNlR2V0VG90YWxQcm90b2NvbHMgKA0KPiArICBJTiAgU0NNSV9CQVNFX1BST1RPQ09MICAqVGhp cywNCj4gKyAgT1VUIFVJTlQzMiAgICAgICAgICAgICAgKlRvdGFsUHJvdG9jb2xzDQo+ICsgICkN Cj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiArICBVSU5UMzIgICAgICAqUmV0dXJu VmFsdWVzOw0KPiArDQo+ICsgIFN0YXR1cyA9IFNjbWlHZXRQcm90b2NvbEF0dHJpYnV0ZXMgKFND TUlfUFJPVE9DT0xfSURfQkFTRSwNCj4gJlJldHVyblZhbHVlcyk7DQo+ICsgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAg KlRvdGFsUHJvdG9jb2xzID0gU0NNSV9UT1RBTF9QUk9UT0NPTFMgKFJldHVyblZhbHVlc1swXSk7 DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKiogQ29tbW9u IGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgdmVuZG9yIGRldGFpbHMuDQo+ICsNCj4gKyAgQHBhcmFt W2luXSBNZXNzYWdlSWQNCj4gU0NNSV9NRVNTQUdFX0lEX0JBU0VfRElTQ09WRVJfVkVORE9SDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9SDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFNDTUlfTUVTU0FHRV9JRF9CQVNFX0RJU0NPVkVSX1NVQl9WRU5ET1INCj4gKw0K PiArICBAcGFyYW1bb3V0XSBWZW5kb3JJZGVudGlmaWVyIEFTQ0lJIG5hbWUgb2YgdGhlIHZlbmRv ci9zdWJ2ZW5kb3IuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICBWZW5kb3JJ ZGVudGlmaWVyIGlzIHJldHVybmVkLg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgIFND UCByZXR1cm5zIGFuIFNDTUkgZXJyb3IuDQo+ICsgIEByZXR2YWwgIShFRklfU1VDQ0VTUykgICAg T3RoZXIgZXJyb3JzLg0KPiArKiovDQo+ICtTVEFUSUMNCj4gK0VGSV9TVEFUVVMNCj4gK0Jhc2VE aXNjb3ZlclZlbmRvckRldGFpbHMgKA0KPiArICBJTiAgU0NNSV9NRVNTQUdFX0lEX0JBU0UgIE1l c3NhZ2VJZCwNCj4gKyAgT1VUIFVJTlQ4ICAgICAgICAgICAgICAgICBWZW5kb3JJZGVudGlmaWVy W1NDTUlfTUFYX1NUUl9MRU5dDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICBTdGF0 dXM7DQo+ICsgIFVJTlQzMiAgICAgICAgKlJldHVyblZhbHVlczsNCj4gKyAgU0NNSV9DT01NQU5E ICBDbWQ7DQo+ICsgIFVJTlQzMiAgICAgICAgUGF5bG9hZExlbmd0aDsNCj4gKw0KPiArICBDbWQu UHJvdG9jb2xJZCA9IFNDTUlfUFJPVE9DT0xfSURfQkFTRTsNCj4gKyAgQ21kLk1lc3NhZ2VJZCAg PSBNZXNzYWdlSWQ7DQo+ICsNCj4gKyAgUGF5bG9hZExlbmd0aCA9IDA7DQo+ICsNCj4gKyAgU3Rh dHVzID0gU2NtaUNvbW1hbmRFeGVjdXRlICgNCj4gKyAgICAgICAgICAgICAmQ21kLA0KPiArICAg ICAgICAgICAgICZQYXlsb2FkTGVuZ3RoLA0KPiArICAgICAgICAgICAgICZSZXR1cm5WYWx1ZXMN Cj4gKyAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsg ICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIEFzY2lpU3RyQ3B5UyAoDQo+ICsg ICAgKENIQVI4KilWZW5kb3JJZGVudGlmaWVyLA0KPiArICAgIFNDTUlfTUFYX1NUUl9MRU4sDQo+ ICsgICAgKENPTlNUIENIQVI4KilSZXR1cm5WYWx1ZXMNCj4gKyAgICApOw0KPiArDQo+ICsgIHJl dHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyoqIFJldHVybiB2ZW5kb3IgbmFtZS4N Cj4gKw0KPiArICBAcGFyYW1baW5dIFRoaXMgICAgICAgICAgIEEgUG9pbnRlciB0byBTQ01JX0JB U0VfUFJPVE9DT0wgSW5zdGFuY2UuDQo+ICsNCj4gKyAgQHBhcmFtW291dF0gVmVuZG9ySWRlbnRp ZmllciBOdWxsIHRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5nIG9mIHVwIHRvDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMTYgYnl0ZXMgd2l0aCBhIHZlbmRvciBuYW1lLg0KPiArDQo+ ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgVmVuZG9ySWRlbnRpZmllciBpcyByZXR1cm5l ZC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICBTQ1AgcmV0dXJucyBhIFNDTUkgZXJy b3IuDQo+ICsgIEByZXR2YWwgIShFRklfU1VDQ0VTUykgICAgT3RoZXIgZXJyb3JzLg0KPiArKiov DQo+ICtTVEFUSUMNCj4gK0VGSV9TVEFUVVMNCj4gK0Jhc2VEaXNjb3ZlclZlbmRvciAoDQo+ICsg IElOICBTQ01JX0JBU0VfUFJPVE9DT0wgICpUaGlzLA0KPiArICBPVVQgVUlOVDggICAgICAgICAg ICAgICBWZW5kb3JJZGVudGlmaWVyW1NDTUlfTUFYX1NUUl9MRU5dDQo+ICsgICkNCj4gK3sNCj4g KyAgcmV0dXJuIEJhc2VEaXNjb3ZlclZlbmRvckRldGFpbHMgKA0KPiArICAgICAgICAgICBTQ01J X01FU1NBR0VfSURfQkFTRV9ESVNDT1ZFUl9WRU5ET1IsDQo+ICsgICAgICAgICAgIFZlbmRvcklk ZW50aWZpZXINCj4gKyAgICAgICAgICAgKTsNCj4gK30NCj4gKw0KPiArLyoqIFJldHVybiBzdWIg dmVuZG9yIG5hbWUuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgQSBQb2lu dGVyIHRvIFNDTUlfQkFTRV9QUk9UT0NPTCBJbnN0YW5jZS4NCj4gKw0KPiArICBAcGFyYW1bb3V0 XSBWZW5kb3JJZGVudGlmaWVyIE51bGwgdGVybWluYXRlZCBBU0NJSSBzdHJpbmcgb2YgdXAgdG8N Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNiBieXRlcyB3aXRoIGEgc3ViIHZl bmRvciBuYW1lLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgVmVuZG9ySWRl bnRpZmllciBpcyByZXR1cm5lZC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICBTQ1Ag cmV0dXJucyBhIFNDTUkgZXJyb3IuDQo+ICsgIEByZXR2YWwgIShFRklfU1VDQ0VTUykgICAgT3Ro ZXIgZXJyb3JzLg0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtCYXNlRGlzY292ZXJTdWJWZW5k b3IgKA0KPiArICBJTiAgU0NNSV9CQVNFX1BST1RPQ09MICAqVGhpcywNCj4gKyAgT1VUIFVJTlQ4 ICAgICAgICAgICAgICAgVmVuZG9ySWRlbnRpZmllcltTQ01JX01BWF9TVFJfTEVOXQ0KPiArICAp DQo+ICt7DQo+ICsgIHJldHVybiBCYXNlRGlzY292ZXJWZW5kb3JEZXRhaWxzICgNCj4gKyAgICAg ICAgICAgU0NNSV9NRVNTQUdFX0lEX0JBU0VfRElTQ09WRVJfU1VCX1ZFTkRPUiwNCj4gKyAgICAg ICAgICAgVmVuZG9ySWRlbnRpZmllcg0KPiArICAgICAgICAgICApOw0KPiArfQ0KPiArDQo+ICsv KiogUmV0dXJuIGltcGxlbWVudGF0aW9uIHZlcnNpb24uDQo+ICsNCj4gKyAgQHBhcmFtW2luXSBU aGlzICAgICAgICAgICBBIFBvaW50ZXIgdG8gU0NNSV9CQVNFX1BST1RPQ09MIEluc3RhbmNlLg0K PiArDQo+ICsgIEBwYXJhbVtvdXRdIEltcGxlbWVudGF0aW9uVmVyc2lvbiBWZW5kb3Igc3BlY2lm aWMgaW1wbGVtZW50YXRpb24NCj4gdmVyc2lvbi4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUND RVNTICAgICAgIEltcGxlbWVudGF0aW9uIHZlcnNpb24gaXMgcmV0dXJuZWQuDQo+ICsgIEByZXR2 YWwgRUZJX0RFVklDRV9FUlJPUiAgU0NQIHJldHVybnMgYSBTQ01JIGVycm9yLg0KPiArICBAcmV0 dmFsICEoRUZJX1NVQ0NFU1MpICAgIE90aGVyIGVycm9ycy4NCj4gKyoqLw0KPiArU1RBVElDDQo+ ICtFRklfU1RBVFVTDQo+ICtCYXNlRGlzY292ZXJJbXBsVmVyc2lvbiAoDQo+ICsgIElOICBTQ01J X0JBU0VfUFJPVE9DT0wgICpUaGlzLA0KPiArICBPVVQgVUlOVDMyICAgICAgICAgICAgICAqSW1w bGVtZW50YXRpb25WZXJzaW9uDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICBTdGF0 dXM7DQo+ICsgIFVJTlQzMiAgICAgICAgKlJldHVyblZhbHVlczsNCj4gKyAgU0NNSV9DT01NQU5E ICBDbWQ7DQo+ICsgIFVJTlQzMiAgICAgICAgUGF5bG9hZExlbmd0aDsNCj4gKw0KPiArICBDbWQu UHJvdG9jb2xJZCA9IFNDTUlfUFJPVE9DT0xfSURfQkFTRTsNCj4gKyAgQ21kLk1lc3NhZ2VJZCAg PQ0KPiBTQ01JX01FU1NBR0VfSURfQkFTRV9ESVNDT1ZFUl9JTVBMRU1FTlRBVElPTl9WRVJTSU9O Ow0KPiArDQo+ICsgIFBheWxvYWRMZW5ndGggPSAwOw0KPiArDQo+ICsgIFN0YXR1cyA9IFNjbWlD b21tYW5kRXhlY3V0ZSAoDQo+ICsgICAgICAgICAgICAgJkNtZCwNCj4gKyAgICAgICAgICAgICAm UGF5bG9hZExlbmd0aCwNCj4gKyAgICAgICAgICAgICAmUmV0dXJuVmFsdWVzDQo+ICsgICAgICAg ICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBT dGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICAqSW1wbGVtZW50YXRpb25WZXJzaW9uID0gUmV0dXJu VmFsdWVzWzBdOw0KPiArDQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiAr LyoqIFJldHVybiBsaXN0IG9mIHByb3RvY29scy4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlz ICAgICAgICAgICBBIFBvaW50ZXIgdG8gU0NNSV9CQVNFX1BST1RPQ09MIEluc3RhbmNlLg0KPiAr DQo+ICsgIEBwYXJhbVtvdXRdIFByb3RvY29sTGlzdFNpemUgIFNpemUgb2YgdGhlIFByb3RvY29s TGlzdC4NCj4gKw0KPiArICBAcGFyYW1bb3V0XSBQcm90b2NvbExpc3QgICBQcm90b2NvbCBsaXN0 Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgTGlzdCBvZiBwcm90b2Nv bHMgaXMgcmV0dXJuZWQuDQo+ICsgIEByZXR2YWwgRUZJX0JVRkZFUl9UT09fU01BTEwgUHJvdG9j b2xMaXN0U2l6ZSBpcyB0b28gc21hbGwgZm9yIHRoZQ0KPiByZXN1bHQuDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEl0IGhhcyBiZWVuIHVwZGF0ZWQgdG8gdGhlIHNpemUgbmVl ZGVkLg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgIFNDUCByZXR1cm5zIGEgU0NN SSBlcnJvci4NCj4gKyAgQHJldHZhbCAhKEVGSV9TVUNDRVNTKSAgICAgICBPdGhlciBlcnJvcnMu DQo+ICsqKi8NCj4gK1NUQVRJQw0KPiArRUZJX1NUQVRVUw0KPiArQmFzZURpc2NvdmVyTGlzdFBy b3RvY29scyAoDQo+ICsgIElOICAgICBTQ01JX0JBU0VfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJ TiBPVVQgVUlOVDMyICAgICAgICAgICAgICAqUHJvdG9jb2xMaXN0U2l6ZSwNCj4gKyAgT1VUICAg IFVJTlQ4ICAgICAgICAgICAgICAgKlByb3RvY29sTGlzdA0KPiArICApDQo+ICt7DQo+ICsgIEVG SV9TVEFUVVMgICAgICAgICAgU3RhdHVzOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgIFRvdGFs UHJvdG9jb2xzOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICpNZXNzYWdlUGFyYW1zOw0KPiAr ICBCQVNFX0RJU0NPVkVSX0xJU1QgICpEaXNjb3Zlckxpc3Q7DQo+ICsgIFVJTlQzMiAgICAgICAg ICAgICAgU2tpcDsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICBJbmRleDsNCj4gKyAgU0NNSV9D T01NQU5EICAgICAgICBDbWQ7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgUGF5bG9hZExlbmd0 aDsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICBSZXF1aXJlZFNpemU7DQo+ICsNCj4gKyAgU3Rh dHVzID0gQmFzZUdldFRvdGFsUHJvdG9jb2xzIChUaGlzLCAmVG90YWxQcm90b2NvbHMpOw0KPiAr ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAg fQ0KPiArDQo+ICsgIFN0YXR1cyA9IFNjbWlDb21tYW5kR2V0UGF5bG9hZCAoJk1lc3NhZ2VQYXJh bXMpOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1 czsNCj4gKyAgfQ0KPiArDQo+ICsgIFJlcXVpcmVkU2l6ZSA9IHNpemVvZiAoVUlOVDgpICogVG90 YWxQcm90b2NvbHM7DQo+ICsgIGlmICgqUHJvdG9jb2xMaXN0U2l6ZSA8IFJlcXVpcmVkU2l6ZSkg ew0KPiArICAgICpQcm90b2NvbExpc3RTaXplID0gUmVxdWlyZWRTaXplOw0KPiArICAgIHJldHVy biBFRklfQlVGRkVSX1RPT19TTUFMTDsNCj4gKyAgfQ0KPiArDQo+ICsgIENtZC5Qcm90b2NvbElk ID0gU0NNSV9QUk9UT0NPTF9JRF9CQVNFOw0KPiArICBDbWQuTWVzc2FnZUlkICA9DQo+IFNDTUlf TUVTU0FHRV9JRF9CQVNFX0RJU0NPVkVSX0xJU1RfUFJPVE9DT0xTOw0KPiArDQo+ICsgIFNraXAg PSAwOw0KPiArDQo+ICsgIHdoaWxlIChTa2lwIDwgVG90YWxQcm90b2NvbHMpIHsNCj4gKw0KPiAr ICAgICpNZXNzYWdlUGFyYW1zID0gU2tpcDsNCj4gKw0KPiArICAgIC8vIE5vdGUgUGF5bG9hZExl bmd0aCBpcyBhIElOL09VVCBwYXJhbWV0ZXIuDQo+ICsgICAgUGF5bG9hZExlbmd0aCA9IHNpemVv ZiAoU2tpcCk7DQo+ICsNCj4gKyAgICBTdGF0dXMgPSBTY21pQ29tbWFuZEV4ZWN1dGUgKA0KPiAr ICAgICAgICAgICAgICAgJkNtZCwNCj4gKyAgICAgICAgICAgICAgICZQYXlsb2FkTGVuZ3RoLA0K PiArICAgICAgICAgICAgICAgKFVJTlQzMioqKSZEaXNjb3Zlckxpc3QNCj4gKyAgICAgICAgICAg ICAgICk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgcmV0dXJu IFN0YXR1czsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBE aXNjb3Zlckxpc3QtPk51bVByb3RvY29sczsgSW5kZXgrKykgew0KPiArICAgICAgUHJvdG9jb2xM aXN0W1NraXArK10gPSBEaXNjb3Zlckxpc3QtPlByb3RvY29sc1tJbmRleF07DQo+ICsgICAgfQ0K PiArICB9DQo+ICsNCj4gKyAgKlByb3RvY29sTGlzdFNpemUgPSBSZXF1aXJlZFNpemU7DQo+ICsN Cj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvLyBJbnN0YW5jZSBvZiB0 aGUgU0NNSSBCYXNlIHByb3RvY29sLg0KPiArU1RBVElDIENPTlNUIFNDTUlfQkFTRV9QUk9UT0NP TCBCYXNlUHJvdG9jb2wgPSB7DQo+ICsgIEJhc2VHZXRWZXJzaW9uLA0KPiArICBCYXNlR2V0VG90 YWxQcm90b2NvbHMsDQo+ICsgIEJhc2VEaXNjb3ZlclZlbmRvciwNCj4gKyAgQmFzZURpc2NvdmVy U3ViVmVuZG9yLA0KPiArICBCYXNlRGlzY292ZXJJbXBsVmVyc2lvbiwNCj4gKyAgQmFzZURpc2Nv dmVyTGlzdFByb3RvY29scw0KPiArfTsNCj4gKw0KPiArLyoqIEluaXRpYWxpemUgQmFzZSBwcm90 b2NvbCBhbmQgaW5zdGFsbCBwcm90b2NvbCBvbiBhIGdpdmVuIGhhbmRsZS4NCj4gKw0KPiArICAg QHBhcmFtW2luXSBIYW5kbGUgICAgICAgICAgICAgIEhhbmRsZSB0byBpbnN0YWxsIEJhc2UgcHJv dG9jb2wuDQo+ICsNCj4gKyAgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBCYXNlIHBy b3RvY29sIGludGVyZmFjZSBpbnN0YWxsZWQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdWNjZXNzZnVsbHkuDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1NjbWlCYXNl UHJvdG9jb2xJbml0ICgNCj4gKyAgSU4gT1VUIEVGSV9IQU5ETEUqIEhhbmRsZQ0KPiArICApDQo+ ICt7DQo+ICsgIHJldHVybiBnQlMtPkluc3RhbGxNdWx0aXBsZVByb3RvY29sSW50ZXJmYWNlcyAo DQo+ICsgICAgICAgICAgICAgICAgSGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICZnQXJtU2Nt aUJhc2VQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgJkJhc2VQcm90b2NvbCwNCj4g KyAgICAgICAgICAgICAgICBOVUxMDQo+ICsgICAgICAgICAgICAgICAgKTsNCj4gK30NCj4gZGlm ZiAtLWdpdCBhL0FybVBrZy9Ecml2ZXJzL0FybVNjbWlEeGUvU2NtaUNsb2NrUHJvdG9jb2wuYw0K PiBiL0FybVBrZy9Ecml2ZXJzL0FybVNjbWlEeGUvU2NtaUNsb2NrUHJvdG9jb2wuYw0KPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleA0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwLi5mZTdlZGQyYThjOGI3NzYxZmIzDQo+IDAwOGU2NmQxOTJlZjFlZTFhZGUy ZQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL0FybVBrZy9Ecml2ZXJzL0FybVNjbWlEeGUvU2Nt aUNsb2NrUHJvdG9jb2wuYw0KPiBAQCAtMCwwICsxLDQxOCBAQA0KPiArLyoqIEBmaWxlDQo+ICsN Cj4gKyAgQ29weXJpZ2h0IChjKSAyMDE3LTIwMTgsIEFybSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJl c2VydmVkLg0KPiArDQo+ICsgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRl cmlhbHMNCj4gKyAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVy bXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlDQo+IEJTRCBMaWNlbnNlDQo+ICsgIHdoaWNoIGFjY29t cGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBt YXkgYmUNCj4gZm91bmQgYXQNCj4gKyAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2Jz ZC1saWNlbnNlLnBocA0KPiArDQo+ICsgIFRIRSBQUk9HUkFNIElTIERJU1RSSUJVVEVEIFVOREVS IFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiDQo+IEJBU0lTLA0KPiArICBXSVRIT1VUIFdB UlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVINCj4gRVhQUkVT UyBPUiBJTVBMSUVELg0KPiArDQo+ICsgIFN5c3RlbSBDb250cm9sIGFuZCBNYW5hZ2VtZW50IElu dGVyZmFjZSBWMS4wDQo+ICsgICAgaHR0cDovL2luZm9jZW50ZXIuYXJtLmNvbS9oZWxwL3RvcGlj L2NvbS5hcm0uZG9jLmRlbjAwNTZhLw0KPiArICAgIERFTjAwNTZBX1N5c3RlbV9Db250cm9sX2Fu ZF9NYW5hZ2VtZW50X0ludGVyZmFjZS5wZGYNCj4gKyoqLw0KPiArDQo+ICsjaW5jbHVkZSA8TGli cmFyeS9CYXNlTGliLmg+DQo+ICsjaW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KPiArI2lu Y2x1ZGUgPExpYnJhcnkvVWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliLmg+DQo+ICsjaW5jbHVkZSA8 UHJvdG9jb2wvQXJtU2NtaUNsb2NrUHJvdG9jb2wuaD4NCj4gKw0KPiArI2luY2x1ZGUgIkFybVNj bWlDbG9ja1Byb3RvY29sUHJpdmF0ZS5oIg0KPiArI2luY2x1ZGUgIlNjbWlQcml2YXRlLmgiDQo+ ICsNCj4gKy8qKiBDb252ZXJ0IHRvIDY0IGJpdCB2YWx1ZSBmcm9tIHR3byAzMiBiaXQgd29yZHMu DQo+ICsNCj4gKyAgQHBhcmFtW2luXSBMb3cgICBMb3dlciAzMiBiaXRzLg0KPiArICBAcGFyYW1b aW5dIEhpZ2ggIEhpZ2hlciAzMiBiaXRzLg0KPiArDQo+ICsgIEByZXR2YWwgVUlOVDY0ICAgNjQg Yml0IHZhbHVlLg0KPiArKiovDQo+ICtTVEFUSUMNCj4gK1VJTlQ2NA0KPiArQ29udmVydFRvNjRC aXQgKA0KPiArICBJTiBVSU5UMzIgTG93LA0KPiArICBJTiBVSU5UMzIgSGlnaA0KPiArICApDQo+ ICt7DQo+ICsgICByZXR1cm4gKExvdyB8ICgoVUlOVDY0KUhpZ2ggPDwgMzIpKTsNCj4gK30NCj4g Kw0KPiArLyoqIFJldHVybiB2ZXJzaW9uIG9mIHRoZSBjbG9jayBtYW5hZ2VtZW50IHByb3RvY29s IHN1cHBvcnRlZCBieSBTQ1ANCj4gZmlybXdhcmUuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhp cyAgICAgQSBQb2ludGVyIHRvIFNDTUlfQ0xPQ0tfUFJPVE9DT0wgSW5zdGFuY2UuDQo+ICsNCj4g KyAgQHBhcmFtW291dF0gVmVyc2lvbiAgVmVyc2lvbiBvZiB0aGUgc3VwcG9ydGVkIFNDTUkgQ2xv Y2sgbWFuYWdlbWVudA0KPiBwcm90b2NvbC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNT ICAgICAgIFRoZSB2ZXJzaW9uIGlzIHJldHVybmVkLg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0Vf RVJST1IgIFNDUCByZXR1cm5zIGFuIFNDTUkgZXJyb3IuDQo+ICsgIEByZXR2YWwgIShFRklfU1VD Q0VTUykgICAgT3RoZXIgZXJyb3JzLg0KPiArKiovDQo+ICtTVEFUSUMNCj4gK0VGSV9TVEFUVVMN Cj4gK0Nsb2NrR2V0VmVyc2lvbiAoDQo+ICsgIElOICBTQ01JX0NMT0NLX1BST1RPQ09MICAqVGhp cywNCj4gKyAgT1VUIFVJTlQzMiAgICAgICAgICAgICAgICpWZXJzaW9uDQo+ICsgICkNCj4gK3sN Cj4gKyAgcmV0dXJuIFNjbWlHZXRQcm90b2NvbFZlcnNpb24gKFNDTUlfUFJPVE9DT0xfSURfQ0xP Q0ssIFZlcnNpb24pOw0KPiArfQ0KPiArDQo+ICsvKiogUmV0dXJuIHRvdGFsIG51bWJlciBvZiBj bG9jayBkZXZpY2VzIHN1cHBvcnRlZCBieSB0aGUgY2xvY2sNCj4gbWFuYWdlbWVudA0KPiArICBw cm90b2NvbC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgQSBQb2ludGVyIHRv IFNDTUlfQ0xPQ0tfUFJPVE9DT0wgSW5zdGFuY2UuDQo+ICsNCj4gKyAgQHBhcmFtW291dF0gVG90 YWxDbG9ja3MgIFRvdGFsIG51bWJlciBvZiBjbG9ja3Mgc3VwcG9ydGVkLg0KPiArDQo+ICsgIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgVG90YWwgbnVtYmVyIG9mIGNsb2NrcyBzdXBwb3J0ZWQg aXMgcmV0dXJuZWQuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgU0NQIHJldHVybnMg YW4gU0NNSSBlcnJvci4NCj4gKyAgQHJldHZhbCAhKEVGSV9TVUNDRVNTKSAgICBPdGhlciBlcnJv cnMuDQo+ICsqKi8NCj4gK1NUQVRJQw0KPiArRUZJX1NUQVRVUw0KPiArQ2xvY2tHZXRUb3RhbENs b2NrcyAoDQo+ICsgIElOICBTQ01JX0NMT0NLX1BST1RPQ09MICAqVGhpcywNCj4gKyAgT1VUIFVJ TlQzMiAgICAgICAgICAgICAgICpUb3RhbENsb2Nrcw0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9T VEFUVVMgIFN0YXR1czsNCj4gKyAgVUlOVDMyICAgICAqUmV0dXJuVmFsdWVzOw0KPiArDQo+ICsg IFN0YXR1cyA9IFNjbWlHZXRQcm90b2NvbEF0dHJpYnV0ZXMgKFNDTUlfUFJPVE9DT0xfSURfQ0xP Q0ssDQo+ICZSZXR1cm5WYWx1ZXMpOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ ICsgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgKlRvdGFsQ2xvY2tzID0gU0NN SV9DTE9DS19QUk9UT0NPTF9UT1RBTF9DTEtTIChSZXR1cm5WYWx1ZXNbMF0pOw0KPiArDQo+ICsg IHJldHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyoqIFJldHVybiBhdHRyaWJ1dGVz IG9mIGEgY2xvY2sgZGV2aWNlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgIEEg UG9pbnRlciB0byBTQ01JX0NMT0NLX1BST1RPQ09MIEluc3RhbmNlLg0KPiArICBAcGFyYW1baW5d ICBDbG9ja0lkICAgICBJZGVudGlmaWVyIGZvciB0aGUgY2xvY2sgZGV2aWNlLg0KPiArDQo+ICsg IEBwYXJhbVtvdXRdIEVuYWJsZWQgICAgICAgICBJZiBUUlVFLCB0aGUgY2xvY2sgZGV2aWNlIGlz IGVuYWJsZWQuDQo+ICsgIEBwYXJhbVtvdXRdIENsb2NrQXNjaWlOYW1lICBBIE5VTEwgdGVybWlu YXRlZCBBU0NJSSBzdHJpbmcgd2l0aCB0aGUNCj4gY2xvY2sNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG5hbWUsIG9mIHVwIHRvIDE2IGJ5dGVzLg0KPiArDQo+ICsgIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgICAgQ2xvY2sgZGV2aWNlIGF0dHJpYnV0ZXMgYXJlIHJldHVybmVk Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgIFNDUCByZXR1cm5zIGFuIFNDTUkg ZXJyb3IuDQo+ICsgIEByZXR2YWwgIShFRklfU1VDQ0VTUykgICAgICAgT3RoZXIgZXJyb3JzLg0K PiArKiovDQo+ICtTVEFUSUMNCj4gK0VGSV9TVEFUVVMNCj4gK0Nsb2NrR2V0Q2xvY2tBdHRyaWJ1 dGVzICgNCj4gKyAgSU4gIFNDTUlfQ0xPQ0tfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiAgVUlO VDMyICAgICAgICAgICAgICAgQ2xvY2tJZCwNCj4gKyAgT1VUIEJPT0xFQU4gICAgICAgICAgICAg ICpFbmFibGVkLA0KPiArICBPVVQgQ0hBUjggICAgICAgICAgICAgICAgKkNsb2NrQXNjaWlOYW1l DQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICBTdGF0dXM7DQo+ICsNCj4g KyAgVUlOVDMyICAgICAgICAgICAgICAqTWVzc2FnZVBhcmFtczsNCj4gKyAgQ0xPQ0tfQVRUUklC VVRFUyAgICAqQ2xvY2tBdHRyaWJ1dGVzOw0KPiArICBTQ01JX0NPTU1BTkQgICAgICAgIENtZDsN Cj4gKyAgVUlOVDMyICAgICAgICAgICAgICBQYXlsb2FkTGVuZ3RoOw0KPiArDQo+ICsgIFN0YXR1 cyA9IFNjbWlDb21tYW5kR2V0UGF5bG9hZCAoJk1lc3NhZ2VQYXJhbXMpOw0KPiArICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ ICsgICpNZXNzYWdlUGFyYW1zID0gQ2xvY2tJZDsNCj4gKw0KPiArICBDbWQuUHJvdG9jb2xJZCA9 IFNDTUlfUFJPVE9DT0xfSURfQ0xPQ0s7DQo+ICsgIENtZC5NZXNzYWdlSWQgID0gU0NNSV9NRVNT QUdFX0lEX0NMT0NLX0FUVFJJQlVURVM7DQo+ICsNCj4gKyAgUGF5bG9hZExlbmd0aCA9IHNpemVv ZiAoQ2xvY2tJZCk7DQo+ICsNCj4gKyAgU3RhdHVzID0gU2NtaUNvbW1hbmRFeGVjdXRlICgNCj4g KyAgICAgICAgICAgICAmQ21kLA0KPiArICAgICAgICAgICAgICZQYXlsb2FkTGVuZ3RoLA0KPiAr ICAgICAgICAgICAgIChVSU5UMzIqKikmQ2xvY2tBdHRyaWJ1dGVzDQo+ICsgICAgICAgICAgICAg KTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7 DQo+ICsgIH0NCj4gKyAgIC8vIFRSVUUgaWYgYml0IDAgb2YgQ2xvY2tBdHRyaWJ1dGVzLT5BdHRy aWJ1dGVzIGlzIHNldC4NCj4gKyAgKkVuYWJsZWQgPSBDTE9DS19FTkFCTEVEIChDbG9ja0F0dHJp YnV0ZXMtPkF0dHJpYnV0ZXMpOw0KPiArDQo+ICsgIEFzY2lpU3RyQ3B5UyAoDQo+ICsgICAgQ2xv Y2tBc2NpaU5hbWUsDQo+ICsgICAgU0NNSV9NQVhfU1RSX0xFTiwNCj4gKyAgICAoQ09OU1QgQ0hB UjgqKUNsb2NrQXR0cmlidXRlcy0+Q2xvY2tOYW1lDQo+ICsgICAgKTsNCj4gKw0KPiArICByZXR1 cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ICsNCj4gKy8qKiBSZXR1cm4gbGlzdCBvZiByYXRlcyBz dXBwb3J0ZWQgYnkgYSBnaXZlbiBjbG9jayBkZXZpY2UuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSBU aGlzICAgICAgICBBIHBvaW50ZXIgdG8gU0NNSV9DTE9DS19QUk9UT0NPTCBJbnN0YW5jZS4NCj4g KyAgQHBhcmFtW2luXSBDbG9ja0lkICAgICBJZGVudGlmaWVyIGZvciB0aGUgY2xvY2sgZGV2aWNl Lg0KPiArDQo+ICsgIEBwYXJhbVtvdXRdIEZvcm1hdCAgICAgIFNDTUlfQ0xPQ0tfUkFURV9GT1JN QVRfRElTQ1JFVEU6IENsb2NrDQo+IGRldmljZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICBzdXBwb3J0cyByYW5nZSBvZiBjbG9jayByYXRlcyB3aGljaCBhcmUgbm9uLWxpbmVhci4NCj4g Kw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICBTQ01JX0NMT0NLX1JBVEVfRk9STUFUX0xJ TkVBUjogQ2xvY2sgZGV2aWNlDQo+IHN1cHBvcnRzDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgIHJhbmdlIG9mIGxpbmVhciBjbG9jayByYXRlcyBmcm9tIE1pbiB0byBNYXggaW4gc3RlcHMu DQo+ICsNCj4gKyAgQHBhcmFtW291dF0gVG90YWxSYXRlcyAgVG90YWwgbnVtYmVyIG9mIHJhdGVz Lg0KPiArDQo+ICsgIEBwYXJhbVtpbixvdXRdIFJhdGVBcnJheVNpemUgIFNpemUgb2YgdGhlIFJh dGVBcnJheS4NCj4gKw0KPiArICBAcGFyYW1bb3V0XSBSYXRlQXJyYXkgICBMaXN0IG9mIGNsb2Nr IHJhdGVzLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgTGlzdCBvZiBj bG9jayByYXRlcyBpcyByZXR1cm5lZC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAg ICBTQ1AgcmV0dXJucyBhbiBTQ01JIGVycm9yLg0KPiArICBAcmV0dmFsIEVGSV9CVUZGRVJfVE9P X1NNQUxMIFJhdGVBcnJheVNpemUgaXMgdG9vIHNtYWxsIGZvciB0aGUNCj4gcmVzdWx0Lg0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGhhcyBiZWVuIHVwZGF0ZWQgdG8gdGhl IHNpemUgbmVlZGVkLg0KPiArICBAcmV0dmFsICEoRUZJX1NVQ0NFU1MpICAgICAgIE90aGVyIGVy cm9ycy4NCj4gKyoqLw0KPiArU1RBVElDDQo+ICtFRklfU1RBVFVTDQo+ICtDbG9ja0Rlc2NyaWJl UmF0ZXMgKA0KPiArICBJTiAgICAgU0NNSV9DTE9DS19QUk9UT0NPTCAgICAgKlRoaXMsDQo+ICsg IElOICAgICBVSU5UMzIgICAgICAgICAgICAgICAgICAgQ2xvY2tJZCwNCj4gKyAgT1VUICAgIFND TUlfQ0xPQ0tfUkFURV9GT1JNQVQgICpGb3JtYXQsDQo+ICsgIE9VVCAgICBVSU5UMzIgICAgICAg ICAgICAgICAgICAqVG90YWxSYXRlcywNCj4gKyAgSU4gT1VUIFVJTlQzMiAgICAgICAgICAgICAg ICAgICpSYXRlQXJyYXlTaXplLA0KPiArICBPVVQgICAgU0NNSV9DTE9DS19SQVRFICAgICAgICAg KlJhdGVBcnJheQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgU3Rh dHVzOw0KPiArDQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgUGF5bG9hZExlbmd0aDsNCj4g KyAgU0NNSV9DT01NQU5EICAgICAgICAgICBDbWQ7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAg ICAgKk1lc3NhZ2VQYXJhbXM7DQo+ICsgIENMT0NLX0RFU0NSSUJFX1JBVEVTICAgKkRlc2NyaWJl UmF0ZXM7DQo+ICsgIENMT0NLX1JBVEVfRFdPUkQgICAgICAgKlJhdGU7DQo+ICsNCj4gKyAgVUlO VDMyICAgICAgICAgICAgICAgICBSZXF1aXJlZEFycmF5U2l6ZSA9IDA7DQo+ICsgIFVJTlQzMiAg ICAgICAgICAgICAgICAgUmF0ZUluZGV4ID0gMDsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAg ICBSYXRlTm87DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgUmF0ZU9mZnNldDsNCj4gKw0K PiArICAqVG90YWxSYXRlcyA9IDA7DQo+ICsNCj4gKyAgU3RhdHVzID0gU2NtaUNvbW1hbmRHZXRQ YXlsb2FkICgmTWVzc2FnZVBhcmFtcyk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgQ21kLlByb3RvY29sSWQg PSBTQ01JX1BST1RPQ09MX0lEX0NMT0NLOw0KPiArICBDbWQuTWVzc2FnZUlkICA9IFNDTUlfTUVT U0FHRV9JRF9DTE9DS19ERVNDUklCRV9SQVRFUzsNCj4gKw0KPiArICAqTWVzc2FnZVBhcmFtcysr ICA9IENsb2NrSWQ7DQo+ICsNCj4gKyAgZG8gew0KPiArDQo+ICsgICAgKk1lc3NhZ2VQYXJhbXMg PSBSYXRlSW5kZXg7DQo+ICsNCj4gKyAgICAvLyBTZXQgUGF5bG9hZCBsZW5ndGgsIG5vdGUgUGF5 bG9hZExlbmd0aCBpcyBhIElOL09VVCBwYXJhbWV0ZXIuDQo+ICsgICAgUGF5bG9hZExlbmd0aCAg PSBzaXplb2YgKENsb2NrSWQpICsgc2l6ZW9mIChSYXRlSW5kZXgpOw0KPiArDQo+ICsgICAgLy8g RXhlY3V0ZSBhbmQgd2FpdCBmb3IgcmVzcG9uc2Ugb24gYSBTQ01JIGNoYW5uZWwuDQo+ICsgICAg U3RhdHVzID0gU2NtaUNvbW1hbmRFeGVjdXRlICgNCj4gKyAgICAgICAgICAgICAgICZDbWQsDQo+ ICsgICAgICAgICAgICAgICAmUGF5bG9hZExlbmd0aCwNCj4gKyAgICAgICAgICAgICAgIChVSU5U MzIqKikmRGVzY3JpYmVSYXRlcw0KPiArICAgICAgICAgICAgICAgKTsNCj4gKyAgICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAgIH0NCj4g Kw0KPiArICAgIGlmICgqVG90YWxSYXRlcyA9PSAwKSB7DQo+ICsgICAgICAvLyBJbiB0aGUgZmly c3QgaXRlcmF0aW9uIHdlIHdpbGwgZ2V0IG51bWJlciBvZiByZXR1cm5lZCByYXRlcyBhbmQNCj4g bnVtYmVyDQo+ICsgICAgICAvLyBvZiByZW1haW5pbmcgcmF0ZXMuIFdpdGggdGhpcyBpbmZvcm1h dGlvbiBjYWxjdWxhdGUgcmVxdWlyZWQgc2l6ZQ0KPiArICAgICAgLy8gZm9yIHJhdGUgYXJyYXku IElmIHByb3ZpZGVkIFJhdGVBcnJheVNpemUgaXMgbGVzcywgcmV0dXJuIGFuDQo+ICsgICAgICAv LyBlcnJvci4NCj4gKw0KPiArICAgICAgKkZvcm1hdCA9IFJBVEVfRk9STUFUIChEZXNjcmliZVJh dGVzLT5OdW1SYXRlc0ZsYWdzKTsNCj4gKw0KPiArICAgICAgKlRvdGFsUmF0ZXMgPSBOVU1fUkFU RVMgKERlc2NyaWJlUmF0ZXMtPk51bVJhdGVzRmxhZ3MpDQo+ICsgICAgICAgICAgICAgICAgICAg ICsgTlVNX1JFTUFJTl9SQVRFUyAoRGVzY3JpYmVSYXRlcy0+TnVtUmF0ZXNGbGFncyk7DQo+ICsN Cj4gKyAgICAgIGlmICgqRm9ybWF0ID09IFNDTUlfQ0xPQ0tfUkFURV9GT1JNQVRfRElTQ1JFVEUp IHsNCj4gKyAgICAgICAgIFJlcXVpcmVkQXJyYXlTaXplID0gKCpUb3RhbFJhdGVzKSAqIHNpemVv ZiAoVUlOVDY0KTsNCj4gKyAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAvLyBXZSBuZWVkIHRv IHJldHVybiB0cmlwbGV0IG9mIDY0IGJpdCB2YWx1ZSBmb3IgZWFjaCByYXRlDQo+ICsgICAgICAg ICBSZXF1aXJlZEFycmF5U2l6ZSA9ICgqVG90YWxSYXRlcykgKiAzICogc2l6ZW9mIChVSU5UNjQp Ow0KPiArICAgICAgfQ0KPiArDQo+ICsgICAgICBpZiAoUmVxdWlyZWRBcnJheVNpemUgPiAoKlJh dGVBcnJheVNpemUpKSB7DQo+ICsgICAgICAgICpSYXRlQXJyYXlTaXplID0gUmVxdWlyZWRBcnJh eVNpemU7DQo+ICsgICAgICAgIHJldHVybiBFRklfQlVGRkVSX1RPT19TTUFMTDsNCj4gKyAgICAg IH0NCj4gKyAgICB9DQo+ICsNCj4gKyAgICBSYXRlT2Zmc2V0ID0gMDsNCj4gKw0KPiArICAgIGlm ICgqRm9ybWF0ID09IFNDTUlfQ0xPQ0tfUkFURV9GT1JNQVRfRElTQ1JFVEUpIHsNCj4gKyAgICAg IGZvciAoUmF0ZU5vID0gMDsgUmF0ZU5vIDwgTlVNX1JBVEVTIChEZXNjcmliZVJhdGVzLQ0KPiA+ TnVtUmF0ZXNGbGFncyk7IFJhdGVObysrKSB7DQo+ICsgICAgICAgIFJhdGUgPSAmRGVzY3JpYmVS YXRlcy0+UmF0ZXNbUmF0ZU9mZnNldCsrXTsNCj4gKyAgICAgICAgLy8gTm9uLWxpbmVhciBkaXNj cmV0ZSByYXRlcy4NCj4gKyAgICAgICAgUmF0ZUFycmF5W1JhdGVJbmRleCsrXS5SYXRlID0gQ29u dmVydFRvNjRCaXQgKFJhdGUtPkxvdywgUmF0ZS0NCj4gPkhpZ2gpOw0KPiArICAgICAgfQ0KPiAr ICAgIH0gZWxzZSB7DQo+ICsgICAgICBmb3IgKFJhdGVObyA9IDA7IFJhdGVObyA8IE5VTV9SQVRF UyAoRGVzY3JpYmVSYXRlcy0NCj4gPk51bVJhdGVzRmxhZ3MpOyBSYXRlTm8rKykgew0KPiArICAg ICAgICAvLyBMaW5lYXIgY2xvY2sgcmF0ZXMgZnJvbSBtaW5pbXVtIHRvIG1heGltdW0gaW4gc3Rl cHMNCj4gKyAgICAgICAgLy8gTWluaW11bSBjbG9jayByYXRlLg0KPiArICAgICAgICBSYXRlID0g JkRlc2NyaWJlUmF0ZXMtPlJhdGVzW1JhdGVPZmZzZXQrK107DQo+ICsgICAgICAgIFJhdGVBcnJh eVtSYXRlSW5kZXhdLk1pbiA9IENvbnZlcnRUbzY0Qml0IChSYXRlLT5Mb3csIFJhdGUtPkhpZ2gp Ow0KPiArDQo+ICsgICAgICAgIFJhdGUgPSAmRGVzY3JpYmVSYXRlcy0+UmF0ZXNbUmF0ZU9mZnNl dCsrXTsNCj4gKyAgICAgICAgLy8gTWF4aW11bSBjbG9jayByYXRlLg0KPiArICAgICAgICBSYXRl QXJyYXlbUmF0ZUluZGV4XS5NYXggPSBDb252ZXJ0VG82NEJpdCAoUmF0ZS0+TG93LCBSYXRlLT5I aWdoKTsNCj4gKw0KPiArICAgICAgICBSYXRlID0gJkRlc2NyaWJlUmF0ZXMtPlJhdGVzW1JhdGVP ZmZzZXQrK107DQo+ICsgICAgICAgIC8vIFN0ZXAuDQo+ICsgICAgICAgIFJhdGVBcnJheVtSYXRl SW5kZXgrK10uU3RlcCA9IENvbnZlcnRUbzY0Qml0IChSYXRlLT5Mb3csIFJhdGUtDQo+ID5IaWdo KTsNCj4gKyAgICAgIH0NCj4gKyAgICB9DQo+ICsgIH0gd2hpbGUgKE5VTV9SRU1BSU5fUkFURVMg KERlc2NyaWJlUmF0ZXMtPk51bVJhdGVzRmxhZ3MpICE9IDApOw0KPiArDQo+ICsgIC8vIFVwZGF0 ZSBSYXRlQXJyYXlTaXplIHdpdGggUmVxdWlyZWRBcnJheVNpemUuDQo+ICsgICpSYXRlQXJyYXlT aXplID0gUmVxdWlyZWRBcnJheVNpemU7DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0K PiArfQ0KPiArDQo+ICsvKiogR2V0IGNsb2NrIHJhdGUuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAg VGhpcyAgICAgICAgQSBQb2ludGVyIHRvIFNDTUlfQ0xPQ0tfUFJPVE9DT0wgSW5zdGFuY2UuDQo+ ICsgIEBwYXJhbVtpbl0gIENsb2NrSWQgICAgIElkZW50aWZpZXIgZm9yIHRoZSBjbG9jayBkZXZp Y2UuDQo+ICsNCj4gKyAgQHBhcmFtW291dF0gIFJhdGUgICAgICAgQ2xvY2sgcmF0ZS4NCj4gKw0K PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgIENsb2NrIHJhdGUgaXMgcmV0dXJuZWQu DQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgU0NQIHJldHVybnMgYW4gU0NNSSBl cnJvci4NCj4gKyAgQHJldHZhbCAhKEVGSV9TVUNDRVNTKSAgICAgICBPdGhlciBlcnJvcnMuDQo+ ICsqKi8NCj4gK1NUQVRJQw0KPiArRUZJX1NUQVRVUw0KPiArQ2xvY2tSYXRlR2V0ICgNCj4gKyAg SU4gIFNDTUlfQ0xPQ0tfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiAgVUlOVDMyICAgICAgICAg ICAgICAgQ2xvY2tJZCwNCj4gKyAgT1VUIFVJTlQ2NCAgICAgICAgICAgICAgICpSYXRlDQo+ICsg ICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgU3RhdHVzOw0KPiArDQo+ICsgIFVJTlQzMiAg ICAgICAgICAgICpNZXNzYWdlUGFyYW1zOw0KPiArICBDTE9DS19SQVRFX0RXT1JEICAqQ2xvY2tS YXRlOw0KPiArICBTQ01JX0NPTU1BTkQgICAgICBDbWQ7DQo+ICsNCj4gKyAgVUlOVDMyICAgICAg ICAgUGF5bG9hZExlbmd0aDsNCj4gKw0KPiArICBTdGF0dXMgPSBTY21pQ29tbWFuZEdldFBheWxv YWQgKCZNZXNzYWdlUGFyYW1zKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiAr ICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICAvLyBGaWxsIGFyZ3VtZW50cyBm b3IgY2xvY2sgcHJvdG9jb2wgY29tbWFuZC4NCj4gKyAgKk1lc3NhZ2VQYXJhbXMgID0gQ2xvY2tJ ZDsNCj4gKw0KPiArICBDbWQuUHJvdG9jb2xJZCAgPSBTQ01JX1BST1RPQ09MX0lEX0NMT0NLOw0K PiArICBDbWQuTWVzc2FnZUlkICAgPSBTQ01JX01FU1NBR0VfSURfQ0xPQ0tfUkFURV9HRVQ7DQo+ ICsNCj4gKyAgUGF5bG9hZExlbmd0aCA9IHNpemVvZiAoQ2xvY2tJZCk7DQo+ICsNCj4gKyAgLy8g RXhlY3V0ZSBhbmQgd2FpdCBmb3IgcmVzcG9uc2Ugb24gYSBTQ01JIGNoYW5uZWwuDQo+ICsgIFN0 YXR1cyA9IFNjbWlDb21tYW5kRXhlY3V0ZSAoDQo+ICsgICAgICAgICAgICAgJkNtZCwNCj4gKyAg ICAgICAgICAgICAmUGF5bG9hZExlbmd0aCwNCj4gKyAgICAgICAgICAgICAoVUlOVDMyKiopJkNs b2NrUmF0ZQ0KPiArICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgKlJhdGUgPSAoKFVJ TlQ2NClDbG9ja1JhdGUtPkhpZ2ggPDwgMzIpIHwgQ2xvY2tSYXRlLT5Mb3c7DQo+ICsNCj4gKyAg cmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKiogU2V0IGNsb2NrIHJhdGUuDQo+ ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgQSBQb2ludGVyIHRvIFNDTUlfQ0xPQ0tf UFJPVE9DT0wgSW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIENsb2NrSWQgICAgIElkZW50aWZp ZXIgZm9yIHRoZSBjbG9jayBkZXZpY2UuDQo+ICsgIEBwYXJhbVtpbl0gIFJhdGUgICAgICAgIENs b2NrIHJhdGUuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICBDbG9jayBy YXRlIHNldCBzdWNjZXNzLg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgIFNDUCBy ZXR1cm5zIGFuIFNDTUkgZXJyb3IuDQo+ICsgIEByZXR2YWwgIShFRklfU1VDQ0VTUykgICAgICAg T3RoZXIgZXJyb3JzLg0KPiArKiovDQo+ICtTVEFUSUMNCj4gK0VGSV9TVEFUVVMNCj4gK0Nsb2Nr UmF0ZVNldCAoDQo+ICsgIElOIFNDTUlfQ0xPQ0tfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJTiBV SU5UMzIgICAgICAgICAgICAgICBDbG9ja0lkLA0KPiArICBJTiBVSU5UNjQgICAgICAgICAgICAg ICBSYXRlDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgIFN0 YXR1czsNCj4gKyAgQ0xPQ0tfUkFURV9TRVRfQVRUUklCVVRFUyAgICpDbG9ja1JhdGVTZXRBdHRy aWJ1dGVzOw0KPiArICBTQ01JX0NPTU1BTkQgICAgICAgICAgICAgICAgQ21kOw0KPiArICBVSU5U MzIgICAgICAgICAgICAgICAgICAgICAgUGF5bG9hZExlbmd0aDsNCj4gKw0KPiArICBTdGF0dXMg PSBTY21pQ29tbWFuZEdldFBheWxvYWQNCj4gKChVSU5UMzIqKikmQ2xvY2tSYXRlU2V0QXR0cmli dXRlcyk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gU3Rh dHVzOw0KPiArICB9DQo+ICsNCj4gKyAgLy8gRmlsbCBhcmd1bWVudHMgZm9yIGNsb2NrIHByb3Rv Y29sIGNvbW1hbmQuDQo+ICsgIENsb2NrUmF0ZVNldEF0dHJpYnV0ZXMtPkNsb2NrSWQgICAgPSBD bG9ja0lkOw0KPiArICBDbG9ja1JhdGVTZXRBdHRyaWJ1dGVzLT5GbGFncyAgICAgID0gQ0xPQ0tf U0VUX0RFRkFVTFRfRkxBR1M7DQo+ICsgIENsb2NrUmF0ZVNldEF0dHJpYnV0ZXMtPlJhdGUuTG93 ICAgPSAoVUlOVDMyKVJhdGU7DQo+ICsgIENsb2NrUmF0ZVNldEF0dHJpYnV0ZXMtPlJhdGUuSGln aCAgPSAoVUlOVDMyKShSYXRlID4+IDMyKTsNCj4gKw0KPiArICBDbWQuUHJvdG9jb2xJZCA9IFND TUlfUFJPVE9DT0xfSURfQ0xPQ0s7DQo+ICsgIENtZC5NZXNzYWdlSWQgID0gU0NNSV9NRVNTQUdF X0lEX0NMT0NLX1JBVEVfU0VUOw0KPiArDQo+ICsgIFBheWxvYWRMZW5ndGggPSBzaXplb2YgKENM T0NLX1JBVEVfU0VUX0FUVFJJQlVURVMpOw0KPiArDQo+ICsgIC8vIEV4ZWN1dGUgYW5kIHdhaXQg Zm9yIHJlc3BvbnNlIG9uIGEgU0NNSSBjaGFubmVsLg0KPiArICBTdGF0dXMgPSBTY21pQ29tbWFu ZEV4ZWN1dGUgKA0KPiArICAgICAgICAgICAgICZDbWQsDQo+ICsgICAgICAgICAgICAgJlBheWxv YWRMZW5ndGgsDQo+ICsgICAgICAgICAgICAgTlVMTA0KPiArICAgICAgICAgICAgICk7DQo+ICsN Cj4gKyAgcmV0dXJuIFN0YXR1czsNCj4gK30NCj4gKw0KPiArLy8gSW5zdGFuY2Ugb2YgdGhlIFND TUkgY2xvY2sgbWFuYWdlbWVudCBwcm90b2NvbC4NCj4gK1NUQVRJQyBDT05TVCBTQ01JX0NMT0NL X1BST1RPQ09MIFNjbWlDbG9ja1Byb3RvY29sID0gew0KPiArICBDbG9ja0dldFZlcnNpb24sDQo+ ICsgIENsb2NrR2V0VG90YWxDbG9ja3MsDQo+ICsgIENsb2NrR2V0Q2xvY2tBdHRyaWJ1dGVzLA0K PiArICBDbG9ja0Rlc2NyaWJlUmF0ZXMsDQo+ICsgIENsb2NrUmF0ZUdldCwNCj4gKyAgQ2xvY2tS YXRlU2V0DQo+ICsgfTsNCj4gKw0KPiArLyoqIEluaXRpYWxpemUgY2xvY2sgbWFuYWdlbWVudCBw cm90b2NvbCBhbmQgaW5zdGFsbCBwcm90b2NvbCBvbiBhIGdpdmVuDQo+IGhhbmRsZS4NCj4gKw0K PiArICBAcGFyYW1baW5dIEhhbmRsZSAgICAgICAgICAgICAgSGFuZGxlIHRvIGluc3RhbGwgY2xv Y2sgbWFuYWdlbWVudCBwcm90b2NvbC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgICAgQ2xvY2sgcHJvdG9jb2wgaW50ZXJmYWNlIGluc3RhbGxlZCBzdWNjZXNzZnVsbHku DQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1NjbWlDbG9ja1Byb3RvY29sSW5pdCAoDQo+ICsg IElOIEVGSV9IQU5ETEUqIEhhbmRsZQ0KPiArICApDQo+ICt7DQo+ICsgIHJldHVybiBnQlMtPklu c3RhbGxNdWx0aXBsZVByb3RvY29sSW50ZXJmYWNlcyAoDQo+ICsgICAgICAgICAgICAgICAgSGFu ZGxlLA0KPiArICAgICAgICAgICAgICAgICZnQXJtU2NtaUNsb2NrUHJvdG9jb2xHdWlkLA0KPiAr ICAgICAgICAgICAgICAgICZTY21pQ2xvY2tQcm90b2NvbCwNCj4gKyAgICAgICAgICAgICAgICBO VUxMDQo+ICsgICAgICAgICAgICAgICAgKTsNCj4gK30NCj4gZGlmZiAtLWdpdCBhL0FybVBrZy9E cml2ZXJzL0FybVNjbWlEeGUvU2NtaUR4ZS5jDQo+IGIvQXJtUGtnL0RyaXZlcnMvQXJtU2NtaUR4 ZS9TY21pRHhlLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXgNCj4gMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjkyMGM2ZjZmMzNjNWJiOGFjMA0KPiAw YzkwM2EwYjE5OWJhNWYwNmY0ZGUNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9Bcm1Qa2cvRHJp dmVycy9Bcm1TY21pRHhlL1NjbWlEeGUuYw0KPiBAQCAtMCwwICsxLDEzOCBAQA0KPiArLyoqIEBm aWxlDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAyMDE3LTIwMTgsIEFybSBMaW1pdGVkLiBBbGwg cmlnaHRzIHJlc2VydmVkLg0KPiArDQo+ICsgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFu eWluZyBtYXRlcmlhbHMNCj4gKyAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1bmRl ciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlDQo+IEJTRCBMaWNlbnNlDQo+ICsgIHdo aWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0aGUg bGljZW5zZSBtYXkgYmUNCj4gZm91bmQgYXQNCj4gKyAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xp Y2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPiArDQo+ICsgIFRIRSBQUk9HUkFNIElTIERJU1RSSUJV VEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiDQo+IEJBU0lTLA0KPiArICBX SVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIN Cj4gRVhQUkVTUyBPUiBJTVBMSUVELg0KPiArDQo+ICsgIFN5c3RlbSBDb250cm9sIGFuZCBNYW5h Z2VtZW50IEludGVyZmFjZSBWMS4wDQo+ICsgICAgaHR0cDovL2luZm9jZW50ZXIuYXJtLmNvbS9o ZWxwL3RvcGljL2NvbS5hcm0uZG9jLmRlbjAwNTZhLw0KPiArICAgIERFTjAwNTZBX1N5c3RlbV9D b250cm9sX2FuZF9NYW5hZ2VtZW50X0ludGVyZmFjZS5wZGYNCj4gKyoqLw0KPiArDQo+ICsjaW5j bHVkZSA8QmFzZS5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4NCj4gKyNpbmNs dWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRpb25MaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5 L1VlZmlCb290U2VydmljZXNUYWJsZUxpYi5oPg0KPiArI2luY2x1ZGUgPFByb3RvY29sL0FybVNj bWlCYXNlUHJvdG9jb2wuaD4NCj4gKyNpbmNsdWRlIDxQcm90b2NvbC9Bcm1TY21pQ2xvY2tQcm90 b2NvbC5oPg0KPiArI2luY2x1ZGUgPFByb3RvY29sL0FybVNjbWlQZXJmb3JtYW5jZVByb3RvY29s Lmg+DQo+ICsNCj4gKyNpbmNsdWRlICJBcm1TY21pQmFzZVByb3RvY29sUHJpdmF0ZS5oIg0KPiAr I2luY2x1ZGUgIkFybVNjbWlDbG9ja1Byb3RvY29sUHJpdmF0ZS5oIg0KPiArI2luY2x1ZGUgIkFy bVNjbWlQZXJmb3JtYW5jZVByb3RvY29sUHJpdmF0ZS5oIg0KPiArI2luY2x1ZGUgIlNjbWlEeGUu aCINCj4gKyNpbmNsdWRlICJTY21pUHJpdmF0ZS5oIg0KPiArDQo+ICtTVEFUSUMgQ09OU1QgU0NN SV9QUk9UT0NPTF9JTklUX1RBQkxFDQo+IFByb3RvY29sSW5pdEZ4bnNbTUFYX1BST1RPQ09MU10g PSB7DQo+ICsgIHsgU2NtaUJhc2VQcm90b2NvbEluaXQgfSwNCj4gKyAgeyBOVUxMIH0sDQo+ICsg IHsgTlVMTCB9LA0KPiArICB7IFNjbWlQZXJmb3JtYW5jZVByb3RvY29sSW5pdCB9LA0KPiArICB7 IFNjbWlDbG9ja1Byb3RvY29sSW5pdCB9LA0KPiArICB7IE5VTEwgfQ0KPiArfTsNCj4gKw0KPiAr LyoqIEFSTSBTQ01JIGRyaXZlciBlbnRyeSBwb2ludCBmdW5jdGlvbi4NCj4gKw0KPiArICBUaGlz IGZ1bmN0aW9uIGluc3RhbGxzIHRoZSBTQ01JIEJhc2UgcHJvdG9jb2wgYW5kIGEgbGlzdCBvZiBv dGhlcg0KPiArICBwcm90b2NvbHMgaXMgcXVlcmllZCB1c2luZyB0aGUgQmFzZSBwcm90b2NvbC4g SWYgcHJvdG9jb2wgaXMgc3VwcG9ydGVkLA0KPiArICBkcml2ZXIgd2lsbCBjYWxsIGVhY2ggcHJv dG9jb2wgaW5pdCBmdW5jdGlvbiB0byBpbnN0YWxsIHRoZSBwcm90b2NvbCBvbg0KPiArICB0aGUg SW1hZ2VIYW5kbGUuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSBJbWFnZUhhbmRsZSAgICAgSGFuZGxl IHRvIHRoaXMgRUZJIEltYWdlIHdoaWNoIHdpbGwgYmUgdXNlZA0KPiB0bw0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnN0YWxsIEJhc2UsIENsb2NrIGFuZCBQZXJmb3JtYW5jZSBw cm90b2NvbHMuDQo+ICsgIEBwYXJhbVtpbl0gU3lzdGVtVGFibGUgICAgIEEgcG9pbnRlciB0byBi b290IHRpbWUgc3lzdGVtIHRhYmxlLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgRHJpdmVyIGluaXRhbGl6ZWQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9VTlNV UFBPUlRFRCAgIElmIFNDTUkgYmFzZSBwcm90b2NvbCB2ZXJzaW9uIGlzIG5vdA0KPiBzdXBwb3J0 ZWQuDQo+ICsgIEByZXR2YWwgIShFRklfU1VDQ0VTUykgICAgT3RoZXIgZXJyb3JzLg0KPiArKiov DQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0FybVNjbWlEeGVFbnRyeVBvaW50ICgNCj4g KyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICBJbWFnZUhhbmRsZSwNCj4gKyAgSU4gRUZJX1NZ U1RFTV9UQUJMRSAgICAgICAqU3lzdGVtVGFibGUNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RB VFVTICAgICAgICAgIFN0YXR1czsNCj4gKyAgU0NNSV9CQVNFX1BST1RPQ09MICAqQmFzZVByb3Rv Y29sOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgIFZlcnNpb247DQo+ICsgIFVJTlQzMiAgICAg ICAgICAgICAgSW5kZXg7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgTnVtUHJvdG9jb2xzOw0K PiArICBVSU5UMzIgICAgICAgICAgICAgIFByb3RvY29sTm87DQo+ICsgIFVJTlQ4ICAgICAgICAg ICAgICAgU3VwcG9ydGVkTGlzdFtNQVhfUFJPVE9DT0xTXTsNCj4gKyAgVUlOVDMyICAgICAgICAg ICAgICBTdXBwb3J0ZWRMaXN0U2l6ZSA9IHNpemVvZiAoU3VwcG9ydGVkTGlzdCk7DQo+ICsNCj4g KyAgUHJvdG9jb2xObyA9IFNDTUlfUFJPVE9DT0xfSURfQkFTRSAmIFBST1RPQ09MX0lEX01BU0s7 DQo+ICsNCj4gKyAgLy8gRXZlcnkgU0NNSSBpbXBsZW1lbnRhdGlvbiBtdXN0IGltcGxlbWVudCB0 aGUgYmFzZSBwcm90b2NvbC4NCj4gKyAgU3RhdHVzID0gUHJvdG9jb2xJbml0Rnhuc1tQcm90b2Nv bE5vXS5Jbml0ICgmSW1hZ2VIYW5kbGUpOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQo+ICsgICAgQVNTRVJUIChGQUxTRSk7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0K PiArDQo+ICsgIFN0YXR1cyA9IGdCUy0+TG9jYXRlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAg ICAgICAgJmdBcm1TY21pQmFzZVByb3RvY29sR3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgIE5V TEwsDQo+ICsgICAgICAgICAgICAgICAgICAoVk9JRCoqKSZCYXNlUHJvdG9jb2wNCj4gKyAgICAg ICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBB U1NFUlQgKEZBTFNFKTsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAg Ly8gR2V0IFNDTUkgQmFzZSBwcm90b2NvbCB2ZXJzaW9uLg0KPiArICBTdGF0dXMgPSBCYXNlUHJv dG9jb2wtPkdldFZlcnNpb24gKEJhc2VQcm90b2NvbCwgJlZlcnNpb24pOw0KPiArICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgQVNTRVJUIChGQUxTRSk7DQo+ICsgICAgcmV0dXJu IFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChWZXJzaW9uICE9IEJBU0VfUFJPVE9DT0xf VkVSU0lPTikgew0KPiArICAgIEFTU0VSVCAoRkFMU0UpOw0KPiArICAgIHJldHVybiBFRklfVU5T VVBQT1JURUQ7DQo+ICsgIH0NCj4gKw0KPiArICAvLyBBcGFydCBmcm9tIEJhc2UgcHJvdG9jb2ws IFNDTUkgbWF5IGltcGxlbWVudCB2YXJpb3VzIG90aGVyDQo+IHByb3RvY29scywNCj4gKyAgLy8g cXVlcnkgdG90YWwgcHJvdG9jb2xzIGltcGxlbWVudGVkIGJ5IHRoZSBTQ1AgZmlybXdhcmUuDQo+ ICsgIE51bVByb3RvY29scyA9IDA7DQo+ICsgIFN0YXR1cyA9IEJhc2VQcm90b2NvbC0+R2V0VG90 YWxQcm90b2NvbHMgKEJhc2VQcm90b2NvbCwNCj4gJk51bVByb3RvY29scyk7DQo+ICsgIGlmIChF RklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgICByZXR1 cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgQVNTRVJUIChOdW1Qcm90b2NvbHMgIT0gMCk7 DQo+ICsNCj4gKyAgLy8gR2V0IHRoZSBsaXN0IG9mIHByb3RvY29scyBzdXBwb3J0ZWQgYnkgU0NQ IGZpcm13YXJlIG9uIHRoZSBwbGF0Zm9ybS4NCj4gKyAgU3RhdHVzID0gQmFzZVByb3RvY29sLT5E aXNjb3Zlckxpc3RQcm90b2NvbHMgKA0KPiArICAgICAgICAgICAgIEJhc2VQcm90b2NvbCwNCj4g KyAgICAgICAgICAgICAmU3VwcG9ydGVkTGlzdFNpemUsDQo+ICsgICAgICAgICAgICAgU3VwcG9y dGVkTGlzdA0KPiArICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gKyAgICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9 DQo+ICsNCj4gKyAgLy8gSW5zdGFsbCBzdXBwb3J0ZWQgcHJvdG9jb2wgb24gSW1hZ2VIYW5kbGUu DQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IE51bVByb3RvY29sczsgSW5kZXgrKykgew0K PiArICAgIFByb3RvY29sTm8gPSBTdXBwb3J0ZWRMaXN0W0luZGV4XSAmIFBST1RPQ09MX0lEX01B U0s7DQo+ICsgICAgaWYgKFByb3RvY29sSW5pdEZ4bnNbUHJvdG9jb2xOb10uSW5pdCAhPSBOVUxM KSB7DQo+ICsgICAgICBTdGF0dXMgPSBQcm90b2NvbEluaXRGeG5zW1Byb3RvY29sTm9dLkluaXQg KCZJbWFnZUhhbmRsZSk7DQo+ICsgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsg ICAgICAgIEFTU0VSVCAoRkFMU0UpOw0KPiArICAgICAgICByZXR1cm4gU3RhdHVzOw0KPiArICAg ICAgfQ0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4g K30NCj4gZGlmZiAtLWdpdCBhL0FybVBrZy9Ecml2ZXJzL0FybVNjbWlEeGUvU2NtaUR4ZS5oDQo+ IGIvQXJtUGtnL0RyaXZlcnMvQXJtU2NtaUR4ZS9TY21pRHhlLmgNCj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQNCj4gaW5kZXgNCj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MC4uMjljZGRlMTczNjU5YzcwMTExDQo+IDZiMDIxYTNjNDM3YTkyYjQ3M2U0ZTUNCj4gLS0tIC9k ZXYvbnVsbA0KPiArKysgYi9Bcm1Qa2cvRHJpdmVycy9Bcm1TY21pRHhlL1NjbWlEeGUuaA0KPiBA QCAtMCwwICsxLDQxIEBADQo+ICsvKiogQGZpbGUNCj4gKw0KPiArICBDb3B5cmlnaHQgKGMpIDIw MTctMjAxOCwgQXJtIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQo+ICsNCj4gKyAgVGhp cyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KPiArICBhcmUgbGljZW5z ZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0 aGUNCj4gQlNEIExpY2Vuc2UNCj4gKyAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRp b24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPiBmb3VuZCBhdA0KPiAr ICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+ICsNCj4g KyAgVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFO ICJBUyBJUyINCj4gQkFTSVMsDQo+ICsgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRB VElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUg0KPiBFWFBSRVNTIE9SIElNUExJRUQuDQo+ICsNCj4g KyAgU3lzdGVtIENvbnRyb2wgYW5kIE1hbmFnZW1lbnQgSW50ZXJmYWNlIFYxLjANCj4gKyAgICBo dHRwOi8vaW5mb2NlbnRlci5hcm0uY29tL2hlbHAvdG9waWMvY29tLmFybS5kb2MuZGVuMDA1NmEv DQo+ICsgICAgREVOMDA1NkFfU3lzdGVtX0NvbnRyb2xfYW5kX01hbmFnZW1lbnRfSW50ZXJmYWNl LnBkZg0KPiArKiovDQo+ICsjaWZuZGVmIFNDTUlfRFhFX0hfDQo+ICsjZGVmaW5lIFNDTUlfRFhF X0hfDQo+ICsNCj4gKyNkZWZpbmUgTUFYX1BST1RPQ09MUyAgICAgICAgNg0KPiArI2RlZmluZSBQ Uk9UT0NPTF9JRF9NQVNLICAgICAweEYNCj4gKyNkZWZpbmUgTUFYX1ZFTkRPUl9MRU4gICAgICAg U0NNSV9NQVhfU1RSX0xFTg0KPiArDQo+ICsvKiogUG9pbnRlciB0byBwcm90b2NvbCBpbml0aWFs aXphdGlvbiBmdW5jdGlvbi4NCj4gKw0KPiArICBAcGFyYW1baW5dICBIYW5kbGUgIEEgcG9pbnRl ciB0byB0aGUgRUZJX0hBTkRMRSBvbiB3aGljaCB0aGUgcHJvdG9jb2wNCj4gKyAgICAgICAgICAg ICAgICAgICAgICBpbnRlcmZhY2UgaXMgdG8gYmUgaW5zdGFsbGVkLg0KPiArDQo+ICsgIEByZXR2 YWwgRUZJX1NVQ0NFU1MgIFByb3RvY29sIGludGVyZmFjZSBpbnN0YWxsZWQgc3VjY2Vzc2Z1bGx5 Lg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpTQ01JX1BS T1RPQ09MX0lOSVRfRlhOKSgNCj4gKyAgSU4gIEVGSV9IQU5ETEUgICpIYW5kbGUNCj4gKyAgKTsN Cj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBTQ01JX1BST1RPQ09MX0lOSVRfRlhOIElu aXQ7DQo+ICt9IFNDTUlfUFJPVE9DT0xfSU5JVF9UQUJMRTsNCj4gKw0KPiArI2VuZGlmIC8qIFND TUlfRFhFX0hfICovDQo+IGRpZmYgLS1naXQgYS9Bcm1Qa2cvRHJpdmVycy9Bcm1TY21pRHhlL1Nj bWlQZXJmb3JtYW5jZVByb3RvY29sLmMNCj4gYi9Bcm1Qa2cvRHJpdmVycy9Bcm1TY21pRHhlL1Nj bWlQZXJmb3JtYW5jZVByb3RvY29sLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXgN Cj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWMzMjQ0MmFkODM4 MDQwNzIxDQo+IGZkNjJmYWE4MDZlODIxODRmMmIyODgNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysg Yi9Bcm1Qa2cvRHJpdmVycy9Bcm1TY21pRHhlL1NjbWlQZXJmb3JtYW5jZVByb3RvY29sLmMNCj4g QEAgLTAsMCArMSw0NTcgQEANCj4gKy8qKiBAZmlsZQ0KPiArDQo+ICsgIENvcHlyaWdodCAoYykg MjAxNy0yMDE4LCBBcm0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gKw0KPiArICBU aGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+ICsgIGFyZSBsaWNl bnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9m IHRoZQ0KPiBCU0QgTGljZW5zZQ0KPiArICB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1 dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+IGZvdW5kIGF0DQo+ ICsgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4gKw0K PiArICBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04g QU4gIkFTIElTIg0KPiBCQVNJUywNCj4gKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VO VEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+IEVYUFJFU1MgT1IgSU1QTElFRC4NCj4gKw0K PiArICBTeXN0ZW0gQ29udHJvbCBhbmQgTWFuYWdlbWVudCBJbnRlcmZhY2UgVjEuMA0KPiArICAg IGh0dHA6Ly9pbmZvY2VudGVyLmFybS5jb20vaGVscC90b3BpYy9jb20uYXJtLmRvYy5kZW4wMDU2 YS8NCj4gKyAgICBERU4wMDU2QV9TeXN0ZW1fQ29udHJvbF9hbmRfTWFuYWdlbWVudF9JbnRlcmZh Y2UucGRmDQo+ICsqKi8NCj4gKw0KPiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaUJvb3RTZXJ2aWNl c1RhYmxlTGliLmg+DQo+ICsjaW5jbHVkZSA8UHJvdG9jb2wvQXJtU2NtaVBlcmZvcm1hbmNlUHJv dG9jb2wuaD4NCj4gKyNpbmNsdWRlIDxzdHJpbmcuaD4NCj4gKw0KPiArI2luY2x1ZGUgIkFybVNj bWlQZXJmb3JtYW5jZVByb3RvY29sUHJpdmF0ZS5oIg0KPiArI2luY2x1ZGUgIlNjbWlQcml2YXRl LmgiDQo+ICsNCj4gKy8qKiBSZXR1cm4gdmVyc2lvbiBvZiB0aGUgcGVyZm9ybWFuY2UgbWFuYWdl bWVudCBwcm90b2NvbCBzdXBwb3J0ZWQNCj4gYnkgU0NQLg0KPiArICAgZmlybXdhcmUuDQo+ICsN Cj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgIEEgUG9pbnRlciB0byBTQ01JX1BFUkZPUk1BTkNF X1BST1RPQ09MDQo+IEluc3RhbmNlLg0KPiArDQo+ICsgIEBwYXJhbVtvdXRdIFZlcnNpb24gICBW ZXJzaW9uIG9mIHRoZSBzdXBwb3J0ZWQgU0NNSSBwZXJmb3JtYW5jZQ0KPiBtYW5hZ2VtZW50DQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICBwcm90b2NvbC4NCj4gKw0KPiArICBAcmV0dmFsIEVG SV9TVUNDRVNTICAgICAgIFRoZSB2ZXJzaW9uIGlzIHJldHVybmVkLg0KPiArICBAcmV0dmFsIEVG SV9ERVZJQ0VfRVJST1IgIFNDUCByZXR1cm5zIGFuIFNDTUkgZXJyb3IuDQo+ICsgIEByZXR2YWwg IShFRklfU1VDQ0VTUykgICAgT3RoZXIgZXJyb3JzLg0KPiArKiovDQo+ICtTVEFUSUMNCj4gK0VG SV9TVEFUVVMNCj4gK1BlcmZvcm1hbmNlR2V0VmVyc2lvbiAoDQo+ICsgIElOICBTQ01JX1BFUkZP Uk1BTkNFX1BST1RPQ09MICAqVGhpcywNCj4gKyAgT1VUIFVJTlQzMiAgICAgICAgICAgICAgICAg ICAgICpWZXJzaW9uDQo+ICsgICkNCj4gK3sNCj4gKyAgcmV0dXJuIFNjbWlHZXRQcm90b2NvbFZl cnNpb24gKFNDTUlfUFJPVE9DT0xfSURfUEVSRk9STUFOQ0UsDQo+IFZlcnNpb24pOw0KPiArfQ0K PiArDQo+ICsvKiogUmV0dXJuIHByb3RvY29sIGF0dHJpYnV0ZXMgb2YgdGhlIHBlcmZvcm1hbmNl IG1hbmFnZW1lbnQgcHJvdG9jb2wuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSBUaGlzICAgICAgICAg QSBQb2ludGVyIHRvIFNDTUlfUEVSRk9STUFOQ0VfUFJPVE9DT0wNCj4gSW5zdGFuY2UuDQo+ICsN Cj4gKyAgQHBhcmFtW291dF0gQXR0cmlidXRlcyAgUHJvdG9jb2wgYXR0cmlidXRlcy4NCj4gKw0K PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgIFByb3RvY29sIGF0dHJpYnV0ZXMgYXJlIHJl dHVybmVkLg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgIFNDUCByZXR1cm5zIGFuIFND TUkgZXJyb3IuDQo+ICsgIEByZXR2YWwgIShFRklfU1VDQ0VTUykgICAgT3RoZXIgZXJyb3JzLg0K PiArKiovDQo+ICtTVEFUSUMNCj4gK0VGSV9TVEFUVVMNCj4gK1BlcmZvcm1hbmNlR2V0QXR0cmli dXRlcyAoDQo+ICsgIElOICBTQ01JX1BFUkZPUk1BTkNFX1BST1RPQ09MICAgICAgICAgICAgICAq VGhpcywNCj4gKyAgT1VUIFNDTUlfUEVSRk9STUFOQ0VfUFJPVE9DT0xfQVRUUklCVVRFUyAgICpB dHRyaWJ1dGVzDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgU3RhdHVzOw0KPiArICBV SU5UMzIqIFJldHVyblZhbHVlczsNCj4gKw0KPiArICBTdGF0dXMgPSBTY21pR2V0UHJvdG9jb2xB dHRyaWJ1dGVzICgNCj4gKyAgICAgICAgICAgICBTQ01JX1BST1RPQ09MX0lEX1BFUkZPUk1BTkNF LA0KPiArICAgICAgICAgICAgICZSZXR1cm5WYWx1ZXMNCj4gKyAgICAgICAgICAgICApOw0KPiAr ICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAg fQ0KPiArDQo+ICsgIG1lbWNweSAoDQo+ICsgICAgQXR0cmlidXRlcywNCj4gKyAgICBSZXR1cm5W YWx1ZXMsDQo+ICsgICAgc2l6ZW9mIChTQ01JX1BFUkZPUk1BTkNFX1BST1RPQ09MX0FUVFJJQlVU RVMpDQo+ICsgICAgKTsNCj4gKw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ICsN Cj4gKy8qKiBSZXR1cm4gcGVyZm9ybWFuY2UgZG9tYWluIGF0dHJpYnV0ZXMuDQo+ICsNCj4gKyAg QHBhcmFtW2luXSAgVGhpcyAgICAgICAgQSBQb2ludGVyIHRvIFNDTUlfUEVSRk9STUFOQ0VfUFJP VE9DT0wNCj4gSW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIERvbWFpbklkICAgIElkZW50aWZp ZXIgZm9yIHRoZSBwZXJmb3JtYW5jZSBkb21haW4uDQo+ICsNCj4gKyAgQHBhcmFtW291dF0gQXR0 cmlidXRlcyAgUGVyZm9ybWFuY2UgZG9tYWluIGF0dHJpYnV0ZXMuDQo+ICsNCj4gKyAgQHJldHZh bCBFRklfU1VDQ0VTUyAgICAgICBEb21haW4gYXR0cmlidXRlcyBhcmUgcmV0dXJuZWQuDQo+ICsg IEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgU0NQIHJldHVybnMgYW4gU0NNSSBlcnJvci4NCj4g KyAgQHJldHZhbCAhKEVGSV9TVUNDRVNTKSAgICBPdGhlciBlcnJvcnMuDQo+ICsqKi8NCj4gK1NU QVRJQw0KPiArRUZJX1NUQVRVUw0KPiArUGVyZm9ybWFuY2VEb21haW5BdHRyaWJ1dGVzICgNCj4g KyAgSU4gIFNDTUlfUEVSRk9STUFOQ0VfUFJPVE9DT0wgICAgICAgICAgICpUaGlzLA0KPiArICBJ TiAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvbWFpbklkLA0KPiArICBP VVQgU0NNSV9QRVJGT1JNQU5DRV9ET01BSU5fQVRUUklCVVRFUyAgKkRvbWFpbkF0dHJpYnV0ZXMN Cj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgIFN0YXR1czsNCj4gKyAgVUlOVDMyICAg ICAgICAqTWVzc2FnZVBhcmFtczsNCj4gKyAgVUlOVDMyICAgICAgICAqUmV0dXJuVmFsdWVzOw0K PiArICBVSU5UMzIgICAgICAgIFBheWxvYWRMZW5ndGg7DQo+ICsgIFNDTUlfQ09NTUFORCAgQ21k Ow0KPiArDQo+ICsgIFN0YXR1cyA9IFNjbWlDb21tYW5kR2V0UGF5bG9hZCAoJk1lc3NhZ2VQYXJh bXMpOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1 czsNCj4gKyAgfQ0KPiArDQo+ICsgICpNZXNzYWdlUGFyYW1zID0gRG9tYWluSWQ7DQo+ICsNCj4g KyAgQ21kLlByb3RvY29sSWQgPSBTQ01JX1BST1RPQ09MX0lEX1BFUkZPUk1BTkNFOw0KPiArICBD bWQuTWVzc2FnZUlkICA9DQo+IFNDTUlfTUVTU0FHRV9JRF9QRVJGT1JNQU5DRV9ET01BSU5fQVRU UklCVVRFUzsNCj4gKw0KPiArICBQYXlsb2FkTGVuZ3RoID0gc2l6ZW9mIChEb21haW5JZCk7DQo+ ICsNCj4gKyAgU3RhdHVzID0gU2NtaUNvbW1hbmRFeGVjdXRlICgNCj4gKyAgICAgICAgICAgICAm Q21kLA0KPiArICAgICAgICAgICAgICZQYXlsb2FkTGVuZ3RoLA0KPiArICAgICAgICAgICAgICZS ZXR1cm5WYWx1ZXMNCj4gKyAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIG1lbWNweSAo DQo+ICsgICAgRG9tYWluQXR0cmlidXRlcywNCj4gKyAgICBSZXR1cm5WYWx1ZXMsDQo+ICsgICAg c2l6ZW9mIChTQ01JX1BFUkZPUk1BTkNFX0RPTUFJTl9BVFRSSUJVVEVTKQ0KPiArICAgICk7DQo+ ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKiogUmV0dXJuIGxp c3Qgb2YgcGVyZm9ybWFuY2UgZG9tYWluIGxldmVscyBvZiBhIGdpdmVuIGRvbWFpbi4NCj4gKw0K PiArICBAcGFyYW1baW5dIFRoaXMgICAgICAgIEEgUG9pbnRlciB0byBTQ01JX1BFUkZPUk1BTkNF X1BST1RPQ09MDQo+IEluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dIERvbWFpbklkICAgIElkZW50 aWZpZXIgZm9yIHRoZSBwZXJmb3JtYW5jZSBkb21haW4uDQo+ICsNCj4gKyAgQHBhcmFtW291dF0g TnVtTGV2ZWxzICAgVG90YWwgbnVtYmVyIG9mIGxldmVscyBhIGRvbWFpbiBjYW4gc3VwcG9ydC4N Cj4gKw0KPiArICBAcGFyYW1baW4sb3V0XSAgTGV2ZWxBcnJheVNpemUgU2l6ZSBvZiB0aGUgcGVy Zm9ybWFuY2UgbGV2ZWwgYXJyYXkuDQo+ICsNCj4gKyAgQHBhcmFtW291dF0gTGV2ZWxBcnJheSAg IEFycmF5IG9mIHRoZSBwZXJmb3JtYW5jZSBsZXZlbHMuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICAgICBEb21haW4gbGV2ZWxzIGFyZSByZXR1cm5lZC4NCj4gKyAgQHJldHZh bCBFRklfREVWSUNFX0VSUk9SICAgICBTQ1AgcmV0dXJucyBhbiBTQ01JIGVycm9yLg0KPiArICBA cmV0dmFsIEVGSV9CVUZGRVJfVE9PX1NNQUxMIExldmVsQXJyYXlTaXplIGlzIHRvbyBzbWFsbCBm b3IgdGhlDQo+IHJlc3VsdC4NCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBo YXMgYmVlbiB1cGRhdGVkIHRvIHRoZSBzaXplIG5lZWRlZC4NCj4gKyAgQHJldHZhbCAhKEVGSV9T VUNDRVNTKSAgICAgICBPdGhlciBlcnJvcnMuDQo+ICsqKi8NCj4gK1NUQVRJQw0KPiArRUZJX1NU QVRVUw0KPiArUGVyZm9ybWFuY2VEZXNjcmliZUxldmVscyAoDQo+ICsgIElOICAgICBTQ01JX1BF UkZPUk1BTkNFX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gICAgIFVJTlQzMiAgICAgICAgICAg ICAgICAgICAgIERvbWFpbklkLA0KPiArICBPVVQgICAgVUlOVDMyICAgICAgICAgICAgICAgICAg ICAgKk51bUxldmVscywNCj4gKyAgSU4gT1VUIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICpM ZXZlbEFycmF5U2l6ZSwNCj4gKyAgT1VUICAgIFNDTUlfUEVSRk9STUFOQ0VfTEVWRUwgICAgICpM ZXZlbEFycmF5DQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICBTdGF0dXM7DQo+ICsg IFVJTlQzMiAgICAgICAgUGF5bG9hZExlbmd0aDsNCj4gKyAgU0NNSV9DT01NQU5EICBDbWQ7DQo+ ICsgIFVJTlQzMiogICAgICAgTWVzc2FnZVBhcmFtczsNCj4gKyAgVUlOVDMyICAgICAgICBMZXZl bEluZGV4Ow0KPiArICBVSU5UMzIgICAgICAgIFJlcXVpcmVkU2l6ZTsNCj4gKyAgVUlOVDMyICAg ICAgICBMZXZlbE5vOw0KPiArICBVSU5UMzIgICAgICAgIFJldHVybk51bUxldmVsczsNCj4gKyAg VUlOVDMyICAgICAgICBSZXR1cm5SZW1haW5OdW1MZXZlbHM7DQo+ICsNCj4gKyAgUEVSRl9ERVND UklCRV9MRVZFTFMgKkxldmVsczsNCj4gKw0KPiArICBTdGF0dXMgPSBTY21pQ29tbWFuZEdldFBh eWxvYWQgKCZNZXNzYWdlUGFyYW1zKTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K PiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICBMZXZlbEluZGV4ID0gMDsN Cj4gKyAgUmVxdWlyZWRTaXplID0gMDsNCj4gKw0KPiArICAqTWVzc2FnZVBhcmFtcysrID0gRG9t YWluSWQ7DQo+ICsNCj4gKyAgQ21kLlByb3RvY29sSWQgPSBTQ01JX1BST1RPQ09MX0lEX1BFUkZP Uk1BTkNFOw0KPiArICBDbWQuTWVzc2FnZUlkICA9DQo+IFNDTUlfTUVTU0FHRV9JRF9QRVJGT1JN QU5DRV9ERVNDUklCRV9MRVZFTFM7DQo+ICsNCj4gKyAgZG8gew0KPiArDQo+ICsgICAgKk1lc3Nh Z2VQYXJhbXMgPSBMZXZlbEluZGV4Ow0KPiArDQo+ICsgICAgLy8gTm90ZSwgUGF5bG9hZExlbmd0 aCBpcyBhbiBJTi9PVVQgcGFyYW1ldGVyLg0KPiArICAgIFBheWxvYWRMZW5ndGggPSBzaXplb2Yg KERvbWFpbklkKSArIHNpemVvZiAoTGV2ZWxJbmRleCk7DQo+ICsNCj4gKyAgICBTdGF0dXMgPSBT Y21pQ29tbWFuZEV4ZWN1dGUgKA0KPiArICAgICAgICAgICAgICAgJkNtZCwNCj4gKyAgICAgICAg ICAgICAgICZQYXlsb2FkTGVuZ3RoLA0KPiArICAgICAgICAgICAgICAgKFVJTlQzMioqKSZMZXZl bHMNCj4gKyAgICAgICAgICAgICAgICk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPiArICAgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBSZXR1cm5O dW1MZXZlbHMgPSBOVU1fUEVSRl9MRVZFTFMgKExldmVscy0+TnVtTGV2ZWxzKTsNCj4gKyAgICBS ZXR1cm5SZW1haW5OdW1MZXZlbHMgPSBOVU1fUkVNQUlOX1BFUkZfTEVWRUxTIChMZXZlbHMtDQo+ ID5OdW1MZXZlbHMpOw0KPiArDQo+ICsgICAgaWYgKFJlcXVpcmVkU2l6ZSA9PSAwKSB7DQo+ICsg ICAgICAqTnVtTGV2ZWxzID0gUmV0dXJuTnVtTGV2ZWxzICsgUmV0dXJuUmVtYWluTnVtTGV2ZWxz Ow0KPiArDQo+ICsgICAgICBSZXF1aXJlZFNpemUgPSAgKCpOdW1MZXZlbHMpICogc2l6ZW9mIChT Q01JX1BFUkZPUk1BTkNFX0xFVkVMKTsNCj4gKyAgICAgIGlmIChSZXF1aXJlZFNpemUgPiAoKkxl dmVsQXJyYXlTaXplKSkgew0KPiArICAgICAgICAvLyBVcGRhdGUgTGV2ZWxBcnJheVNpemUgd2l0 aCByZXF1aXJlZCBzaXplLg0KPiArICAgICAgICAqTGV2ZWxBcnJheVNpemUgPSBSZXF1aXJlZFNp emU7DQo+ICsgICAgICAgIHJldHVybiBFRklfQlVGRkVSX1RPT19TTUFMTDsNCj4gKyAgICAgIH0N Cj4gKyAgICB9DQo+ICsNCj4gKyAgICBmb3IgKExldmVsTm8gPSAwOyBMZXZlbE5vIDwgUmV0dXJu TnVtTGV2ZWxzOyBMZXZlbE5vKyspIHsNCj4gKyAgICAgICBtZW1jcHkgKA0KPiArICAgICAgICAg JkxldmVsQXJyYXlbTGV2ZWxJbmRleCsrXSwNCj4gKyAgICAgICAgICZMZXZlbHMtPlBlcmZMZXZl bFtMZXZlbE5vXSwNCj4gKyAgICAgICAgIHNpemVvZiAoU0NNSV9QRVJGT1JNQU5DRV9MRVZFTCkN Cj4gKyAgICAgICAgICk7DQo+ICsgICAgfQ0KPiArDQo+ICsgIH0gd2hpbGUgKFJldHVyblJlbWFp bk51bUxldmVscyAhPSAwKTsNCj4gKw0KPiArICAqTGV2ZWxBcnJheVNpemUgPSBSZXF1aXJlZFNp emU7DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKiogU2V0 IHBlcmZvcm1hbmNlIGxpbWl0cyBvZiBhIGRvbWFpbi4NCj4gKw0KPiArICBAcGFyYW1baW5dIFRo aXMgICAgICAgIEEgUG9pbnRlciB0byBTQ01JX1BFUkZPUk1BTkNFX1BST1RPQ09MDQo+IEluc3Rh bmNlLg0KPiArICBAcGFyYW1baW5dIERvbWFpbklkICAgIElkZW50aWZpZXIgZm9yIHRoZSBwZXJm b3JtYW5jZSBkb21haW4uDQo+ICsgIEBwYXJhbVtpbl0gTGltaXQgICAgICAgUGVyZm9ybWFuY2Ug bGltaXQgdG8gc2V0Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgUGVy Zm9ybWFuY2UgbGltaXRzIHNldCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklD RV9FUlJPUiAgICAgU0NQIHJldHVybnMgYW4gU0NNSSBlcnJvci4NCj4gKyAgQHJldHZhbCAhKEVG SV9TVUNDRVNTKSAgICAgICBPdGhlciBlcnJvcnMuDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4g K1BlcmZvcm1hbmNlTGltaXRzU2V0ICgNCj4gKyAgSU4gU0NNSV9QRVJGT1JNQU5DRV9QUk9UT0NP TCAqVGhpcywNCj4gKyAgSU4gVUlOVDMyICAgICAgICAgICAgICAgICAgICBEb21haW5JZCwNCj4g KyAgSU4gU0NNSV9QRVJGT1JNQU5DRV9MSU1JVFMgICAqTGltaXRzDQo+ICsgICkNCj4gK3sNCj4g KyAgRUZJX1NUQVRVUyAgICBTdGF0dXM7DQo+ICsgIFVJTlQzMiAgICAgICAgUGF5bG9hZExlbmd0 aDsNCj4gKyAgU0NNSV9DT01NQU5EICBDbWQ7DQo+ICsgIFVJTlQzMiAgICAgICAgKk1lc3NhZ2VQ YXJhbXM7DQo+ICsNCj4gKyAgU3RhdHVzID0gU2NtaUNvbW1hbmRHZXRQYXlsb2FkICgmTWVzc2Fn ZVBhcmFtcyk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4g U3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgKk1lc3NhZ2VQYXJhbXMrKyA9IERvbWFpbklkOw0K PiArICAqTWVzc2FnZVBhcmFtcysrID0gTGltaXRzLT5SYW5nZU1heDsNCj4gKyAgKk1lc3NhZ2VQ YXJhbXMgICA9IExpbWl0cy0+UmFuZ2VNaW47DQo+ICsNCj4gKyAgQ21kLlByb3RvY29sSWQgPSBT Q01JX1BST1RPQ09MX0lEX1BFUkZPUk1BTkNFOw0KPiArICBDbWQuTWVzc2FnZUlkICA9IFNDTUlf TUVTU0FHRV9JRF9QRVJGT1JNQU5DRV9MSU1JVFNfU0VUOw0KPiArDQo+ICsgIFBheWxvYWRMZW5n dGggPSBzaXplb2YgKERvbWFpbklkKSArIHNpemVvZg0KPiAoU0NNSV9QRVJGT1JNQU5DRV9MSU1J VFMpOw0KPiArDQo+ICsgIFN0YXR1cyA9IFNjbWlDb21tYW5kRXhlY3V0ZSAoDQo+ICsgICAgICAg ICAgICAgJkNtZCwNCj4gKyAgICAgICAgICAgICAmUGF5bG9hZExlbmd0aCwNCj4gKyAgICAgICAg ICAgICBOVUxMDQo+ICsgICAgICAgICAgICAgKTsNCj4gKw0KPiArICByZXR1cm4gU3RhdHVzOw0K PiArfQ0KPiArDQo+ICsvKiogR2V0IHBlcmZvcm1hbmNlIGxpbWl0cyBvZiBhIGRvbWFpbi4NCj4g Kw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICBBIFBvaW50ZXIgdG8gU0NNSV9QRVJGT1JN QU5DRV9QUk9UT0NPTA0KPiBJbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgRG9tYWluSWQgICAg SWRlbnRpZmllciBmb3IgdGhlIHBlcmZvcm1hbmNlIGRvbWFpbi4NCj4gKw0KPiArICBAcGFyYW1b b3V0XSBMaW1pdCAgICAgICBQZXJmb3JtYW5jZSBMaW1pdHMgb2YgdGhlIGRvbWFpbi4NCj4gKw0K PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgIFBlcmZvcm1hbmNlIGxpbWl0cyBhcmUg cmV0dXJuZWQuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgICAgU0NQIHJldHVybnMg YW4gU0NNSSBlcnJvci4NCj4gKyAgQHJldHZhbCAhKEVGSV9TVUNDRVNTKSAgICAgICBPdGhlciBl cnJvcnMuDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1BlcmZvcm1hbmNlTGltaXRzR2V0ICgN Cj4gKyAgU0NNSV9QRVJGT1JNQU5DRV9QUk9UT0NPTCAqVGhpcywNCj4gKyAgVUlOVDMyICAgICAg ICAgICAgICAgICAgICBEb21haW5JZCwNCj4gKyAgU0NNSV9QRVJGT1JNQU5DRV9MSU1JVFMgICAq TGltaXRzDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICBTdGF0dXM7DQo+ICsgIFVJ TlQzMiAgICAgICAgUGF5bG9hZExlbmd0aDsNCj4gKyAgU0NNSV9DT01NQU5EICBDbWQ7DQo+ICsg IFVJTlQzMiAgICAgICAgKk1lc3NhZ2VQYXJhbXM7DQo+ICsNCj4gKyAgU0NNSV9QRVJGT1JNQU5D RV9MSU1JVFMgICpSZXR1cm5WYWx1ZXM7DQo+ICsNCj4gKyAgU3RhdHVzID0gU2NtaUNvbW1hbmRH ZXRQYXlsb2FkICgmTWVzc2FnZVBhcmFtcyk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgKk1lc3NhZ2VQYXJh bXMgPSBEb21haW5JZDsNCj4gKw0KPiArICBDbWQuUHJvdG9jb2xJZCA9IFNDTUlfUFJPVE9DT0xf SURfUEVSRk9STUFOQ0U7DQo+ICsgIENtZC5NZXNzYWdlSWQgID0gU0NNSV9NRVNTQUdFX0lEX1BF UkZPUk1BTkNFX0xJTUlUU19HRVQ7DQo+ICsNCj4gKyAgUGF5bG9hZExlbmd0aCA9IHNpemVvZiAo RG9tYWluSWQpOw0KPiArDQo+ICsgIFN0YXR1cyA9IFNjbWlDb21tYW5kRXhlY3V0ZSAoDQo+ICsg ICAgICAgICAgICAgJkNtZCwNCj4gKyAgICAgICAgICAgICAmUGF5bG9hZExlbmd0aCwNCj4gKyAg ICAgICAgICAgICAoVUlOVDMyKiopJlJldHVyblZhbHVlcw0KPiArICAgICAgICAgICAgICk7DQo+ ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiAr ICB9DQo+ICsNCj4gKyAgTGltaXRzLT5SYW5nZU1heCA9IFJldHVyblZhbHVlcy0+UmFuZ2VNYXg7 DQo+ICsgIExpbWl0cy0+UmFuZ2VNaW4gPSBSZXR1cm5WYWx1ZXMtPlJhbmdlTWluOw0KPiArDQo+ ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyoqIFNldCBwZXJmb3JtYW5j ZSBsZXZlbCBvZiBhIGRvbWFpbi4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICBB IFBvaW50ZXIgdG8gU0NNSV9QRVJGT1JNQU5DRV9QUk9UT0NPTA0KPiBJbnN0YW5jZS4NCj4gKyAg QHBhcmFtW2luXSAgRG9tYWluSWQgICAgSWRlbnRpZmllciBmb3IgdGhlIHBlcmZvcm1hbmNlIGRv bWFpbi4NCj4gKyAgQHBhcmFtW2luXSAgTGV2ZWwgICAgICAgUGVyZm9ybWFuY2UgbGV2ZWwgb2Yg dGhlIGRvbWFpbi4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgIFBlcmZv cm1hbmNlIGxldmVsIHNldCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9F UlJPUiAgICAgU0NQIHJldHVybnMgYW4gU0NNSSBlcnJvci4NCj4gKyAgQHJldHZhbCAhKEVGSV9T VUNDRVNTKSAgICAgICBPdGhlciBlcnJvcnMuDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1Bl cmZvcm1hbmNlTGV2ZWxTZXQgKA0KPiArICBJTiBTQ01JX1BFUkZPUk1BTkNFX1BST1RPQ09MICpU aGlzLA0KPiArICBJTiBVSU5UMzIgICAgICAgICAgICAgICAgICAgIERvbWFpbklkLA0KPiArICBJ TiBVSU5UMzIgICAgICAgICAgICAgICAgICAgIExldmVsDQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJ X1NUQVRVUyAgICBTdGF0dXM7DQo+ICsgIFVJTlQzMiAgICAgICAgUGF5bG9hZExlbmd0aDsNCj4g KyAgU0NNSV9DT01NQU5EICBDbWQ7DQo+ICsgIFVJTlQzMiAgICAgICAgKk1lc3NhZ2VQYXJhbXM7 DQo+ICsNCj4gKyAgU3RhdHVzID0gU2NtaUNvbW1hbmRHZXRQYXlsb2FkICgmTWVzc2FnZVBhcmFt cyk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gU3RhdHVz Ow0KPiArICB9DQo+ICsNCj4gKyAgKk1lc3NhZ2VQYXJhbXMrKyA9IERvbWFpbklkOw0KPiArICAq TWVzc2FnZVBhcmFtcyAgID0gTGV2ZWw7DQo+ICsNCj4gKyAgQ21kLlByb3RvY29sSWQgPSBTQ01J X1BST1RPQ09MX0lEX1BFUkZPUk1BTkNFOw0KPiArICBDbWQuTWVzc2FnZUlkICA9IFNDTUlfTUVT U0FHRV9JRF9QRVJGT1JNQU5DRV9MRVZFTF9TRVQ7DQo+ICsNCj4gKyAgUGF5bG9hZExlbmd0aCA9 IHNpemVvZiAoRG9tYWluSWQpICsgc2l6ZW9mIChMZXZlbCk7DQo+ICsNCj4gKyAgU3RhdHVzID0g U2NtaUNvbW1hbmRFeGVjdXRlICgNCj4gKyAgICAgICAgICAgICAmQ21kLA0KPiArICAgICAgICAg ICAgICZQYXlsb2FkTGVuZ3RoLA0KPiArICAgICAgICAgICAgIE5VTEwNCj4gKyAgICAgICAgICAg ICApOw0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKiBHZXQgcGVy Zm9ybWFuY2UgbGV2ZWwgb2YgYSBkb21haW4uDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAg ICAgICAgQSBQb2ludGVyIHRvIFNDTUlfUEVSRk9STUFOQ0VfUFJPVE9DT0wNCj4gSW5zdGFuY2Uu DQo+ICsgIEBwYXJhbVtpbl0gIERvbWFpbklkICAgIElkZW50aWZpZXIgZm9yIHRoZSBwZXJmb3Jt YW5jZSBkb21haW4uDQo+ICsNCj4gKyAgQHBhcmFtW291dF0gTGV2ZWwgICAgICAgUGVyZm9ybWFu Y2UgbGV2ZWwgb2YgdGhlIGRvbWFpbi4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgICAgIFBlcmZvcm1hbmNlIGxldmVsIGdvdCBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2YWwg RUZJX0RFVklDRV9FUlJPUiAgICAgU0NQIHJldHVybnMgYW4gU0NNSSBlcnJvci4NCj4gKyAgQHJl dHZhbCAhKEVGSV9TVUNDRVNTKSAgICAgICBPdGhlciBlcnJvcnMuDQo+ICsqKi8NCj4gK0VGSV9T VEFUVVMNCj4gK1BlcmZvcm1hbmNlTGV2ZWxHZXQgKA0KPiArICBJTiAgU0NNSV9QRVJGT1JNQU5D RV9QUk9UT0NPTCAqVGhpcywNCj4gKyAgSU4gIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgRG9t YWluSWQsDQo+ICsgIE9VVCBVSU5UMzIgICAgICAgICAgICAgICAgICAgICpMZXZlbA0KPiArICAp DQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgU3RhdHVzOw0KPiArICBVSU5UMzIgICAgICAgIFBh eWxvYWRMZW5ndGg7DQo+ICsgIFNDTUlfQ09NTUFORCAgQ21kOw0KPiArICBVSU5UMzIgICAgICAg ICpSZXR1cm5WYWx1ZXM7DQo+ICsgIFVJTlQzMiAgICAgICAgKk1lc3NhZ2VQYXJhbXM7DQo+ICsN Cj4gKyAgU3RhdHVzID0gU2NtaUNvbW1hbmRHZXRQYXlsb2FkICgmTWVzc2FnZVBhcmFtcyk7DQo+ ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiAr ICB9DQo+ICsNCj4gKyAgKk1lc3NhZ2VQYXJhbXMgPSBEb21haW5JZDsNCj4gKw0KPiArICBDbWQu UHJvdG9jb2xJZCA9IFNDTUlfUFJPVE9DT0xfSURfUEVSRk9STUFOQ0U7DQo+ICsgIENtZC5NZXNz YWdlSWQgID0gU0NNSV9NRVNTQUdFX0lEX1BFUkZPUk1BTkNFX0xFVkVMX0dFVDsNCj4gKw0KPiAr ICBQYXlsb2FkTGVuZ3RoID0gc2l6ZW9mIChEb21haW5JZCk7DQo+ICsNCj4gKyAgU3RhdHVzID0g U2NtaUNvbW1hbmRFeGVjdXRlICgNCj4gKyAgICAgICAgICAgICAmQ21kLA0KPiArICAgICAgICAg ICAgICZQYXlsb2FkTGVuZ3RoLA0KPiArICAgICAgICAgICAgICZSZXR1cm5WYWx1ZXMNCj4gKyAg ICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgcmV0 dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgICpMZXZlbCA9ICpSZXR1cm5WYWx1ZXM7DQo+ ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvLyBJbnN0YW5jZSBv ZiB0aGUgU0NNSSBwZXJmb3JtYW5jZSBtYW5hZ2VtZW50IHByb3RvY29sLg0KPiArU1RBVElDIENP TlNUIFNDTUlfUEVSRk9STUFOQ0VfUFJPVE9DT0wgUGVyZm9ybWFuY2VQcm90b2NvbCA9IHsNCj4g KyAgUGVyZm9ybWFuY2VHZXRWZXJzaW9uLA0KPiArICBQZXJmb3JtYW5jZUdldEF0dHJpYnV0ZXMs DQo+ICsgIFBlcmZvcm1hbmNlRG9tYWluQXR0cmlidXRlcywNCj4gKyAgUGVyZm9ybWFuY2VEZXNj cmliZUxldmVscywNCj4gKyAgUGVyZm9ybWFuY2VMaW1pdHNTZXQsDQo+ICsgIFBlcmZvcm1hbmNl TGltaXRzR2V0LA0KPiArICBQZXJmb3JtYW5jZUxldmVsU2V0LA0KPiArICBQZXJmb3JtYW5jZUxl dmVsR2V0DQo+ICt9Ow0KPiArDQo+ICsvKiogSW5pdGlhbGl6ZSBwZXJmb3JtYW5jZSBtYW5hZ2Vt ZW50IHByb3RvY29sIGFuZCBpbnN0YWxsIG9uIGEgZ2l2ZW4NCj4gSGFuZGxlLg0KPiArDQo+ICsg IEBwYXJhbVtpbl0gSGFuZGxlICAgICAgICAgICAgICBIYW5kbGUgdG8gaW5zdGFsbCBwZXJmb3Jt YW5jZSBtYW5hZ2VtZW50DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90 b2NvbC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgUGVyZm9ybWFu Y2UgcHJvdG9jb2wgaW5zdGFsbGVkIHN1Y2Nlc3NmdWxseS4NCj4gKyoqLw0KPiArRUZJX1NUQVRV Uw0KPiArU2NtaVBlcmZvcm1hbmNlUHJvdG9jb2xJbml0ICgNCj4gKyAgSU4gRUZJX0hBTkRMRSog SGFuZGxlDQo+ICsgICkNCj4gK3sNCj4gKyAgcmV0dXJuIGdCUy0+SW5zdGFsbE11bHRpcGxlUHJv dG9jb2xJbnRlcmZhY2VzICgNCj4gKyAgICAgICAgICAgICAgICBIYW5kbGUsDQo+ICsgICAgICAg ICAgICAgICAgJmdBcm1TY21pUGVyZm9ybWFuY2VQcm90b2NvbEd1aWQsDQo+ICsgICAgICAgICAg ICAgICAgJlBlcmZvcm1hbmNlUHJvdG9jb2wsDQo+ICsgICAgICAgICAgICAgICAgTlVMTA0KPiAr ICAgICAgICAgICAgICAgICk7DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9Bcm1Qa2cvRHJpdmVycy9B cm1TY21pRHhlL1NjbWlQcml2YXRlLmgNCj4gYi9Bcm1Qa2cvRHJpdmVycy9Bcm1TY21pRHhlL1Nj bWlQcml2YXRlLmgNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXgNCj4gMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGYwMzY1NWI4YjAyMWZlNWZkNg0KPiAz Y2VhYjBkZDQxNDkwNmQyZmIyNDgNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9Bcm1Qa2cvRHJp dmVycy9Bcm1TY21pRHhlL1NjbWlQcml2YXRlLmgNCj4gQEAgLTAsMCArMSwxNzQgQEANCj4gKy8q KiBAZmlsZQ0KPiArDQo+ICsgIENvcHlyaWdodCAoYykgMjAxNy0yMDE4LCBBcm0gTGltaXRlZC4g QWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gKw0KPiArICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2Nv bXBhbnlpbmcgbWF0ZXJpYWxzDQo+ICsgIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUg dW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZQ0KPiBCU0QgTGljZW5zZQ0KPiAr ICB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2Yg dGhlIGxpY2Vuc2UgbWF5IGJlDQo+IGZvdW5kIGF0DQo+ICsgIGh0dHA6Ly9vcGVuc291cmNlLm9y Zy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4gKw0KPiArICBUSEUgUFJPR1JBTSBJUyBESVNU UklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIg0KPiBCQVNJUywNCj4g KyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlU SEVSDQo+IEVYUFJFU1MgT1IgSU1QTElFRC4NCj4gKw0KPiArICBTeXN0ZW0gQ29udHJvbCBhbmQg TWFuYWdlbWVudCBJbnRlcmZhY2UgVjEuMA0KPiArICAgIGh0dHA6Ly9pbmZvY2VudGVyLmFybS5j b20vaGVscC90b3BpYy9jb20uYXJtLmRvYy5kZW4wMDU2YS8NCj4gKyAgICBERU4wMDU2QV9TeXN0 ZW1fQ29udHJvbF9hbmRfTWFuYWdlbWVudF9JbnRlcmZhY2UucGRmDQo+ICsqKi8NCj4gKyNpZm5k ZWYgU0NNSV9QUklWQVRFX0hfDQo+ICsjZGVmaW5lIFNDTUlfUFJJVkFURV9IXw0KPiArDQo+ICsv LyBTQ01JIHByb3RvY29sIElEcy4NCj4gK3R5cGVkZWYgZW51bSB7DQo+ICsgIFNDTUlfUFJPVE9D T0xfSURfQkFTRSAgICAgICAgID0gMHgxMCwNCj4gKyAgU0NNSV9QUk9UT0NPTF9JRF9QT1dFUl9E T01BSU4gPSAweDExLA0KPiArICBTQ01JX1BST1RPQ09MX0lEX1NZU1RFTV9QT1dFUiA9IDB4MTIs DQo+ICsgIFNDTUlfUFJPVE9DT0xfSURfUEVSRk9STUFOQ0UgID0gMHgxMywNCj4gKyAgU0NNSV9Q Uk9UT0NPTF9JRF9DTE9DSyAgICAgICAgPSAweDE0LA0KPiArICBTQ01JX1BST1RPQ09MX0lEX1NF TlNPUiAgICAgICA9IDB4MTUNCj4gK30gU0NNSV9QUk9UT0NPTF9JRDsNCj4gKw0KPiArLy8gU0NN SSBtZXNzYWdlIHR5cGVzLg0KPiArdHlwZWRlZiBlbnVtIHsNCj4gKyAgU0NNSV9NRVNTQUdFX1RZ UEVfQ09NTUFORCAgICAgICAgICA9IDAsDQo+ICsgIFNDTUlfTUVTU0FHRV9UWVBFX0RFTEFZRURf UkVTUE9OU0UgPSAyLCAvLyBTa2lwcGluZyAxIGlzDQo+IGRlbGliZXJhdGUuDQo+ICsgIFNDTUlf TUVTU0FHRV9UWVBFX05PVElGSUNBVElPTiAgICAgPSAzDQo+ICt9IFNDTUlfTUVTU0FHRV9UWVBF Ow0KPiArDQo+ICsvLyBTQ01JIHJlc3BvbnNlIGVycm9yIGNvZGVzLg0KPiArdHlwZWRlZiBlbnVt IHsNCj4gKyAgU0NNSV9TVUNDRVNTICAgICAgICAgICAgPSAgMCwNCj4gKyAgU0NNSV9OT1RfU1VQ UE9SVEVEICAgICAgPSAtMSwNCj4gKyAgU0NNSV9JTlZBTElEX1BBUkFNRVRFUlMgPSAtMiwNCj4g KyAgU0NNSV9ERU5JRUQgICAgICAgICAgICAgPSAtMywNCj4gKyAgU0NNSV9OT1RfRk9VTkQgICAg ICAgICAgPSAtNCwNCj4gKyAgU0NNSV9PVVRfT0ZfUkFOR0UgICAgICAgPSAtNSwNCj4gKyAgU0NN SV9CVVNZICAgICAgICAgICAgICAgPSAtNiwNCj4gKyAgU0NNSV9DT01NU19FUlJPUiAgICAgICAg PSAtNywNCj4gKyAgU0NNSV9HRU5FUklDX0VSUk9SICAgICAgPSAtOCwNCj4gKyAgU0NNSV9IQVJE V0FSRV9FUlJPUiAgICAgPSAtOSwNCj4gKyAgU0NNSV9QUk9UT0NPTF9FUlJPUiAgICAgPSAtMTAN Cj4gK30gU0NNSV9TVEFUVVM7DQo+ICsNCj4gKy8vIFNDTUkgbWVzc2FnZSBJRHMgY29tbW9uIHRv IGFsbCBwcm90b2NvbHMuDQo+ICt0eXBlZGVmIGVudW0gew0KPiArICBTQ01JX01FU1NBR0VfSURf UFJPVE9DT0xfVkVSU0lPTiAgICAgICAgICAgID0gMHgwLA0KPiArICBTQ01JX01FU1NBR0VfSURf UFJPVE9DT0xfQVRUUklCVVRFUyAgICAgICAgID0gMHgxLA0KPiArICBTQ01JX01FU1NBR0VfSURf UFJPVE9DT0xfTUVTU0FHRV9BVFRSSUJVVEVTID0gMHgyDQo+ICt9IFNDTUlfTUVTU0FHRV9JRDsN Cj4gKw0KPiArLy8gTm90IGRlZmluZWQgaW4gU0NNSSBzcGVjaWZpY2F0aW9uIGJ1dCB3aWxsIGhl bHAgdG8gaWRlbnRpZnkgYSBtZXNzYWdlLg0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBTQ01J X1BST1RPQ09MX0lEIFByb3RvY29sSWQ7DQo+ICsgIFVJTlQzMiBNZXNzYWdlSWQ7DQo+ICt9IFND TUlfQ09NTUFORDsNCj4gKw0KPiArI3ByYWdtYSBwYWNrKDEpDQo+ICsNCj4gKy8vIFJlc3BvbnNl IHRvIGEgU0NNSSBjb21tYW5kLg0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBJTlQzMiBTdGF0 dXM7DQo+ICsgIFVJTlQzMiBSZXR1cm5WYWx1ZXNbXTsNCj4gK30gU0NNSV9NRVNTQUdFX1JFU1BP TlNFOw0KPiArDQo+ICsvLyBNZXNzYWdlIGhlYWRlci4gTXNnSWRbNzowXSwgTXNnVHlwZVs5Ojhd LCBQcm90b2NvbElkWzE3OjEwXQ0KPiArI2RlZmluZSBNRVNTQUdFX1RZUEVfU0hJRlQgICAgICAg OA0KPiArI2RlZmluZSBQUk9UT0NPTF9JRF9TSElGVCAgICAgICAxMA0KPiArI2RlZmluZSBTQ01J X01FU1NBR0VfSEVBREVSKE1zZ0lkLCBNc2dUeXBlLCBQcm90b2NvbElkKSAgKCAgICAgICAgICAg XA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1zZ1R5cGUgPDwgTUVTU0FHRV9UWVBF X1NISUZUICAgfCAgICAgICAgXA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb3Rv Y29sSWQgPDwgUFJPVE9DT0xfSURfU0hJRlQgfCAgICAgICAgXA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE1zZ0lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCj4gKy8vIFNDTUkgbWVzc2FnZSBoZWFk ZXIuDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsgIFVJTlQzMiBNZXNzYWdlSGVhZGVyOw0KPiAr fSBTQ01JX01FU1NBR0VfSEVBREVSOw0KPiArDQo+ICsjcHJhZ21hIHBhY2soKQ0KPiArDQo+ICsv KiogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgbWVzc2FnZSBwYXlsb2FkLg0KPiArDQo+ICsgIEBw YXJhbVtvdXRdIFBheWxvYWQgICAgICAgICBIb2xkcyBwb2ludGVyIHRvIHRoZSBtZXNzYWdlIHBh eWxvYWQuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgIFBheWxvYWQgaG9s ZHMgYSB2YWxpZCBtZXNzYWdlIHBheWxvYWQgcG9pbnRlci4NCj4gKyAgQHJldHZhbCBFRklfVElN RU9VVCAgICAgICAgIFRpbWUgb3V0IGVycm9yIGlmIE1UTCBjaGFubmVsIGlzIGJ1c3kuDQo+ICsg IEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICBJZiBNVEwgY2hhbm5lbCBpcyB1bnN1cHBvcnRl ZC4NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArU2NtaUNvbW1hbmRHZXRQYXlsb2FkICgNCj4g KyAgT1VUIFVJTlQzMioqIFBheWxvYWQNCj4gKyAgKTsNCj4gKw0KPiArLyoqIEV4ZWN1dGUgYSBT Q01JIGNvbW1hbmQgYW5kIHJlY2VpdmUgYSByZXNwb25zZS4NCj4gKw0KPiArICBUaGlzIGZ1bmN0 aW9uIHVzZXMgYSBNVEwgY2hhbm5lbCB0byB0cmFuc2ZlciBtZXNzYWdlIHRvIFNDUA0KPiArICBh bmQgd2FpdHMgZm9yIGEgcmVzcG9uc2UuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgIENvbW1hbmQg ICAgICBQb2ludGVyIHRvIHRoZSBTQ01JIGNvbW1hbmQgKFByb3RvY29sIElEDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYW5kIE1lc3NhZ2UgSUQpDQo+ICsNCj4gKyAgQHBhcmFtW2lu LG91dF0gUGF5bG9hZExlbmd0aCAgIFNDTUkgY29tbWFuZCBtZXNzYWdlIGxlbmd0aC4NCj4gKw0K PiArICBAcGFyYW1bb3V0XSBPUFRJT05BTCAgUmV0dXJuVmFsdWVzICAgUG9pbnRlciB0byBTQ01J IHJlc3BvbnNlLg0KPiArDQo+ICsgIEByZXR2YWwgT1VUIEVGSV9TVUNDRVNTICAgICAgIENvbW1h bmQgc2VudCBhbmQgbWVzc2FnZSByZWNlaXZlZA0KPiBzdWNjZXNzZnVsbHkuDQo+ICsgIEByZXR2 YWwgT1VUIEVGSV9VTlNVUFBPUlRFRCAgIENoYW5uZWwgbm90IHN1cHBvcnRlZC4NCj4gKyAgQHJl dHZhbCBPVVQgRUZJX1RJTUVPVVQgICAgICAgVGltZW91dCBvbiB0aGUgY2hhbm5lbC4NCj4gKyAg QHJldHZhbCBPVVQgRUZJX0RFVklDRV9FUlJPUiAgQ2hhbm5lbCBub3QgcmVhZHkuDQo+ICsgIEBy ZXR2YWwgT1VUIEVGSV9ERVZJQ0VfRVJST1IgIE1lc3NhZ2UgSGVhZGVyIGNvcnJ1cHRlZC4NCj4g KyAgQHJldHZhbCBPVVQgRUZJX0RFVklDRV9FUlJPUiAgU0NNSSBlcnJvci4NCj4gKyoqLw0KPiAr RUZJX1NUQVRVUw0KPiArU2NtaUNvbW1hbmRFeGVjdXRlICgNCj4gKyAgSU4gICAgIFNDTUlfQ09N TUFORCAgKkNvbW1hbmQsDQo+ICsgIElOIE9VVCBVSU5UMzIgICAgICAgICpQYXlsb2FkTGVuZ3Ro LA0KPiArICBPVVQgICAgVUlOVDMyICAgICAgICoqUmV0dXJuVmFsdWVzIE9QVElPTkFMDQo+ICsg ICk7DQo+ICsNCj4gKy8qKiBSZXR1cm4gcHJvdG9jb2wgdmVyc2lvbiBmcm9tIFNDUCBmb3IgYSBn aXZlbiBwcm90b2NvbCBJRC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBQcm90b2NvbCBJRCAgICBQ cm90b2NvbCBJRC4NCj4gKyAgQHBhcmFtW291dF0gVmVyc2lvbiAgICAgICAgUG9pbnRlciB0byB2 ZXJzaW9uIG9mIHRoZSBwcm90b2NvbC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAg ICAgIFZlcnNpb24gaG9sZHMgYSB2YWxpZCB2ZXJzaW9uIHJlY2VpdmVkDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIFNDUC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNF X0VSUk9SICBTQ01JIGVycm9yLg0KPiArICBAcmV0dmFsICEoRUZJX1NVQ0NFU1MpICAgIE90aGVy IGVycm9ycy4NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArU2NtaUdldFByb3RvY29sVmVyc2lv biAoDQo+ICsgIElOICBTQ01JX1BST1RPQ09MX0lEICBQcm90b2NvbElkLA0KPiArICBPVVQgVUlO VDMyICAgICAgICAgICAgKlZlcnNpb24NCj4gKyAgKTsNCj4gKw0KPiArLyoqIFJldHVybiBwcm90 b2NvbCBhdHRyaWJ1dGVzIGZyb20gU0NQIGZvciBhIGdpdmVuIHByb3RvY29sIElELg0KPiArDQo+ ICsgIEBwYXJhbVtpbl0gIFByb3RvY29sIElEICAgIFByb3RvY29sIElELg0KPiArICBAcGFyYW1b b3V0XSBSZXR1cm5WYWx1ZXMgICBQb2ludGVyIHRvIGF0dHJpYnV0ZXMgb2YgdGhlIHByb3RvY29s Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgUmV0dXJuVmFsdWVzIHBvaW50 cyB0byBwcm90b2NvbCBhdHRyaWJ1dGVzLg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1Ig IFNDTUkgZXJyb3IuDQo+ICsgIEByZXR2YWwgIShFRklfU1VDQ0VTUykgICAgT3RoZXIgZXJyb3Jz Lg0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtTY21pR2V0UHJvdG9jb2xBdHRyaWJ1dGVzICgN Cj4gKyAgSU4gIFNDTUlfUFJPVE9DT0xfSUQgIFByb3RvY29sSWQsDQo+ICsgIE9VVCBVSU5UMzIg ICAgICAgICAgICAqKlJldHVyblZhbHVlcw0KPiArICApOw0KPiArDQo+ICsvKiogUmV0dXJuIHBy b3RvY29sIG1lc3NhZ2UgYXR0cmlidXRlcyBmcm9tIFNDUCBmb3IgYSBnaXZlbiBwcm90b2NvbCBJ RC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBQcm90b2NvbCBJRCAgICBQcm90b2NvbCBJRC4NCj4g Kw0KPiArICBAcGFyYW1bb3V0XSBBdHRyaWJ1dGVzICAgICBQb2ludGVyIHRvIGF0dHJpYnV0ZXMg b2YgdGhlIHByb3RvY29sLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgUmV0 dXJuVmFsdWVzIHBvaW50cyB0byBwcm90b2NvbCBtZXNzYWdlDQo+IGF0dHJpYnV0ZXMuDQo+ICsg IEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgU0NNSSBlcnJvci4NCj4gKyAgQHJldHZhbCAhKEVG SV9TVUNDRVNTKSAgICBPdGhlciBlcnJvcnMuDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK1Nj bWlHZXRQcm90b2NvbE1lc3NhZ2VBdHRyaWJ1dGVzICgNCj4gKyAgSU4gIFNDTUlfUFJPVE9DT0xf SUQgIFByb3RvY29sSWQsDQo+ICsgIE9VVCBVSU5UMzIgICAgICAgICAgICAqKlJldHVyblZhbHVl cw0KPiArICApOw0KPiArDQo+ICsjZW5kaWYgLyogU0NNSV9QUklWQVRFX0hfICovDQo+IGRpZmYg LS1naXQgYS9Bcm1Qa2cvSW5jbHVkZS9Qcm90b2NvbC9Bcm1TY21pLmgNCj4gYi9Bcm1Qa2cvSW5j bHVkZS9Qcm90b2NvbC9Bcm1TY21pLmgNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXgN Cj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjM5YWJiOTcwNjQ1 NzhjOTQ5DQo+IDYxNGY3OWE2YTMzZmUxODgxYzNjNjgNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysg Yi9Bcm1Qa2cvSW5jbHVkZS9Qcm90b2NvbC9Bcm1TY21pLmgNCj4gQEAgLTAsMCArMSwyNyBAQA0K PiArLyoqIEBmaWxlDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAyMDE3LTIwMTgsIEFybSBMaW1p dGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KPiArDQo+ICsgIFRoaXMgcHJvZ3JhbSBhbmQgdGhl IGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4gKyAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWls YWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlDQo+IEJTRCBMaWNlbnNl DQo+ICsgIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4 dCBvZiB0aGUgbGljZW5zZSBtYXkgYmUNCj4gZm91bmQgYXQNCj4gKyAgaHR0cDovL29wZW5zb3Vy Y2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPiArDQo+ICsgIFRIRSBQUk9HUkFNIElT IERJU1RSSUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiDQo+IEJBU0lT LA0KPiArICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5E LCBFSVRIRVINCj4gRVhQUkVTUyBPUiBJTVBMSUVELg0KPiArDQo+ICsgIFN5c3RlbSBDb250cm9s IGFuZCBNYW5hZ2VtZW50IEludGVyZmFjZSBWMS4wDQo+ICsgICAgaHR0cDovL2luZm9jZW50ZXIu YXJtLmNvbS9oZWxwL3RvcGljL2NvbS5hcm0uZG9jLmRlbjAwNTZhLw0KPiArICAgIERFTjAwNTZB X1N5c3RlbV9Db250cm9sX2FuZF9NYW5hZ2VtZW50X0ludGVyZmFjZS5wZGYNCj4gKyoqLw0KPiAr DQo+ICsjaWZuZGVmIEFSTV9TQ01JX0hfDQo+ICsjZGVmaW5lIEFSTV9TQ01JX0hfDQo+ICsNCj4g Ky8qIEFzIHBlciBTQ01JIHNwZWNpZmljYXRpb24sIG1heGltdW0gYWxsb3dlZCBBU0NJSSBzdHJp bmcgbGVuZ3RoDQo+ICsgICBmb3IgdmFyaW91cyByZXR1cm4gdmFsdWVzL3BhcmFtZXRlcnMgb2Yg YSBTQ01JIG1lc3NhZ2UuDQo+ICsqLw0KPiArI2RlZmluZSBTQ01JX01BWF9TVFJfTEVOICAgICAg ICAgIDE2DQo+ICsNCj4gKyNlbmRpZiAvKiBBUk1fU0NNSV9IXyAqLw0KPiArDQo+IGRpZmYgLS1n aXQgYS9Bcm1Qa2cvSW5jbHVkZS9Qcm90b2NvbC9Bcm1TY21pQmFzZVByb3RvY29sLmgNCj4gYi9B cm1Qa2cvSW5jbHVkZS9Qcm90b2NvbC9Bcm1TY21pQmFzZVByb3RvY29sLmgNCj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQNCj4gaW5kZXgNCj4gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMC4uZWNjNDFmMjE4MWVjYzlmODM1OQ0KPiA1MGFiNDZjN2NmZDJlNDc2YTcwNzMNCj4g LS0tIC9kZXYvbnVsbA0KPiArKysgYi9Bcm1Qa2cvSW5jbHVkZS9Qcm90b2NvbC9Bcm1TY21pQmFz ZVByb3RvY29sLmgNCj4gQEAgLTAsMCArMSwxNzQgQEANCj4gKy8qKiBAZmlsZQ0KPiArDQo+ICsg IENvcHlyaWdodCAoYykgMjAxNy0yMDE4LCBBcm0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZl ZC4NCj4gKw0KPiArICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxz DQo+ICsgIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFu ZCBjb25kaXRpb25zIG9mIHRoZQ0KPiBCU0QgTGljZW5zZQ0KPiArICB3aGljaCBhY2NvbXBhbmll cyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJl DQo+IGZvdW5kIGF0DQo+ICsgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGlj ZW5zZS5waHANCj4gKw0KPiArICBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUg QlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIg0KPiBCQVNJUywNCj4gKyAgV0lUSE9VVCBXQVJSQU5U SUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+IEVYUFJFU1MgT1Ig SU1QTElFRC4NCj4gKw0KPiArICBTeXN0ZW0gQ29udHJvbCBhbmQgTWFuYWdlbWVudCBJbnRlcmZh Y2UgVjEuMA0KPiArICAgIGh0dHA6Ly9pbmZvY2VudGVyLmFybS5jb20vaGVscC90b3BpYy9jb20u YXJtLmRvYy5kZW4wMDU2YS8NCj4gKyAgICBERU4wMDU2QV9TeXN0ZW1fQ29udHJvbF9hbmRfTWFu YWdlbWVudF9JbnRlcmZhY2UucGRmDQo+ICsqKi8NCj4gKw0KPiArI2lmbmRlZiBBUk1fU0NNSV9C QVNFX1BST1RPQ09MX0hfDQo+ICsjZGVmaW5lIEFSTV9TQ01JX0JBU0VfUFJPVE9DT0xfSF8NCj4g Kw0KPiArI2luY2x1ZGUgPFByb3RvY29sL0FybVNjbWkuaD4NCj4gKw0KPiArI2RlZmluZSBCQVNF X1BST1RPQ09MX1ZFUlNJT04gIDB4MTAwMDANCj4gKw0KPiArI2RlZmluZSBOVU1fUFJPVE9DT0xf TUFTSyAgICAgIDB4RkZVDQo+ICsjZGVmaW5lIE5VTV9BR0VOVF9NQVNLICAgICAgICAgMHhGRlUN Cj4gKw0KPiArI2RlZmluZSBOVU1fQUdFTlRfU0hJRlQgICAgICAgIDB4OA0KPiArDQo+ICsvKiog UmV0dXJucyB0b3RhbCBudW1iZXIgb2YgcHJvdG9jb2xzIHRoYXQgYXJlDQo+ICsgIGltcGxlbWVu dGVkIChleGNsdWRpbmcgdGhlIEJhc2UgcHJvdG9jb2wpDQo+ICsqLw0KPiArI2RlZmluZSBTQ01J X1RPVEFMX1BST1RPQ09MUyhBdHRyKSAoQXR0ciAmIE5VTV9QUk9UT0NPTF9NQVNLKQ0KPiArDQo+ ICsvLyBSZXR1cm5zIHRvdGFsIG51bWJlciBvZiBhZ2VudHMgaW4gdGhlIHN5c3RlbS4NCj4gKyNk ZWZpbmUgU0NNSV9UT1RBTF9BR0VOVFMoQXR0cikgICAgKChBdHRyID4+IE5VTV9BR0VOVF9TSElG VCkgJg0KPiBOVU1fQUdFTlRfTUFTSykNCj4gKw0KPiArI2RlZmluZSBBUk1fU0NNSV9CQVNFX1BS T1RPQ09MX0dVSUQgIHsgXA0KPiArICAweGQ3ZTVhYmU5LCAweDMzYWIsIDB4NDE4ZSwgezB4OWYs IDB4OTEsIDB4NzIsIDB4ZGEsIDB4ZTIsIDB4YmEsIDB4OGUsDQo+IDB4MmZ9IFwNCj4gKyAgfQ0K PiArDQo+ICtleHRlcm4gRUZJX0dVSUQgZ0FybVNjbWlCYXNlUHJvdG9jb2xHdWlkOw0KPiArDQo+ ICt0eXBlZGVmIHN0cnVjdCBfU0NNSV9CQVNFX1BST1RPQ09MIFNDTUlfQkFTRV9QUk9UT0NPTDsN Cj4gKw0KPiArLyoqIFJldHVybiB2ZXJzaW9uIG9mIHRoZSBCYXNlIHByb3RvY29sIHN1cHBvcnRl ZCBieSBTQ1AgZmlybXdhcmUuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgQSBQb2lu dGVyIHRvIFNDTUlfQkFTRV9QUk9UT0NPTCBJbnN0YW5jZS4NCj4gKw0KPiArICBAcGFyYW1bb3V0 XSBWZXJzaW9uICBWZXJzaW9uIG9mIHRoZSBzdXBwb3J0ZWQgU0NNSSBCYXNlIHByb3RvY29sLg0K PiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgVGhlIHZlcnNpb24gb2YgdGhlIHBy b3RvY29sIGlzIHJldHVybmVkLg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgIFNDUCBy ZXR1cm5zIGFuIFNDTUkgZXJyb3IuDQo+ICsgIEByZXR2YWwgIShFRklfU1VDQ0VTUykgICAgT3Ro ZXIgZXJyb3JzLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJ ICpTQ01JX0JBU0VfR0VUX1ZFUlNJT04pICgNCj4gKyAgSU4gIFNDTUlfQkFTRV9QUk9UT0NPTCAg KlRoaXMsDQo+ICsgIE9VVCBVSU5UMzIgICAgICAgICAgICAgICpWZXJzaW9uDQo+ICsgICk7DQo+ ICsNCj4gKy8qKiBSZXR1cm4gdG90YWwgbnVtYmVyIG9mIFNDTUkgcHJvdG9jb2xzIHN1cHBvcnRl ZCBieSB0aGUgU0NQDQo+IGZpcm13YXJlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAg ICAgICAgIEEgUG9pbnRlciB0byBTQ01JX0JBU0VfUFJPVE9DT0wgSW5zdGFuY2UuDQo+ICsNCj4g KyAgQHBhcmFtW291dF0gVG90YWxQcm90b2NvbHMgVG90YWwgbnVtYmVyIG9mIFNDTUkgcHJvdG9j b2xzIHN1cHBvcnRlZC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgIFRvdGFs IG51bWJlciBvZiBwcm90b2NvbHMgc3VwcG9ydGVkIGFyZQ0KPiByZXR1cm5lZC4NCj4gKyAgQHJl dHZhbCBFRklfREVWSUNFX0VSUk9SICBTQ1AgcmV0dXJucyBhIFNDTUkgZXJyb3IuDQo+ICsgIEBy ZXR2YWwgIShFRklfU1VDQ0VTUykgICAgT3RoZXIgZXJyb3JzLg0KPiArKiovDQo+ICt0eXBlZGVm DQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpTQ01JX0JBU0VfR0VUX1RPVEFMX1BST1RPQ09M UykgKA0KPiArICBJTiAgU0NNSV9CQVNFX1BST1RPQ09MICAqVGhpcywNCj4gKyAgT1VUIFVJTlQz MiAgICAgICAgICAgICAgKlRvdGFsUHJvdG9jb2xzDQo+ICsgICk7DQo+ICsNCj4gKy8qKiBSZXR1 cm4gdmVuZG9yIG5hbWUuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSBUaGlzICAgICAgICAgICBBIFBv aW50ZXIgdG8gU0NNSV9CQVNFX1BST1RPQ09MIEluc3RhbmNlLg0KPiArDQo+ICsgIEBwYXJhbVtv dXRdIFZlbmRvcklkZW50aWZpZXIgTnVsbCB0ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZyBvZiB1cCB0 bw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2IGJ5dGVzIHdpdGggYSB2ZW5k b3IgbmFtZS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgIFZlbmRvcklkZW50 aWZpZXIgaXMgcmV0dXJuZWQuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgU0NQIHJl dHVybnMgYSBTQ01JIGVycm9yLg0KPiArICBAcmV0dmFsICEoRUZJX1NVQ0NFU1MpICAgIE90aGVy IGVycm9ycy4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAq U0NNSV9CQVNFX0RJU0NPVkVSX1ZFTkRPUikgKA0KPiArICBJTiAgU0NNSV9CQVNFX1BST1RPQ09M ICAqVGhpcywNCj4gKyAgT1VUIFVJTlQ4ICAgICAgICAgICAgICAgVmVuZG9ySWRlbnRpZmllcltT Q01JX01BWF9TVFJfTEVOXQ0KPiArICApOw0KPiArDQo+ICsvKiogUmV0dXJuIHN1YiB2ZW5kb3Ig bmFtZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgICBBIFBvaW50ZXIgdG8g U0NNSV9CQVNFX1BST1RPQ09MIEluc3RhbmNlLg0KPiArDQo+ICsgIEBwYXJhbVtvdXRdIFZlbmRv cklkZW50aWZpZXIgTnVsbCB0ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZyBvZiB1cCB0bw0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2IGJ5dGVzIHdpdGggYSB2ZW5kb3IgbmFtZS4N Cj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgIFZlbmRvcklkZW50aWZpZXIgaXMg cmV0dXJuZWQuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgU0NQIHJldHVybnMgYSBT Q01JIGVycm9yLg0KPiArICBAcmV0dmFsICEoRUZJX1NVQ0NFU1MpICAgIE90aGVyIGVycm9ycy4N Cj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqU0NNSV9CQVNF X0RJU0NPVkVSX1NVQl9WRU5ET1IpICgNCj4gKyAgSU4gIFNDTUlfQkFTRV9QUk9UT0NPTCAgKlRo aXMsDQo+ICsgIE9VVCBVSU5UOCAgICAgICAgICAgICAgIFZlbmRvcklkZW50aWZpZXJbU0NNSV9N QVhfU1RSX0xFTl0NCj4gKyAgKTsNCj4gKw0KPiArLyoqIFJldHVybiBpbXBsZW1lbnRhdGlvbiB2 ZXJzaW9uLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gVGhpcyAgICAgICAgICAgQSBQb2ludGVyIHRv IFNDTUlfQkFTRV9QUk9UT0NPTCBJbnN0YW5jZS4NCj4gKw0KPiArICBAcGFyYW1bb3V0XSBJbXBs ZW1lbnRhdGlvblZlcnNpb24gVmVuZG9yIHNwZWNpZmljIGltcGxlbWVudGF0aW9uDQo+IHZlcnNp b24uDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICBJbXBsZW1lbnRhdGlvbiB2 ZXJzaW9uIGlzIHJldHVybmVkLg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgIFNDUCBy ZXR1cm5zIGEgU0NNSSBlcnJvci4NCj4gKyAgQHJldHZhbCAhKEVGSV9TVUNDRVNTKSAgICBPdGhl ciBlcnJvcnMuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkg KlNDTUlfQkFTRV9ESVNDT1ZFUl9JTVBMRU1FTlRBVElPTl9WRVJTSU9OKSAoDQo+ICsgIElOICBT Q01JX0JBU0VfUFJPVE9DT0wgICpUaGlzLA0KPiArICBPVVQgVUlOVDMyICAgICAgICAgICAgICAq SW1wbGVtZW50YXRpb25WZXJzaW9uDQo+ICsgICk7DQo+ICsNCj4gKy8qKiBSZXR1cm4gbGlzdCBv ZiBwcm90b2NvbHMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgICAgQSBQb2lu dGVyIHRvIFNDTUlfQkFTRV9QUk9UT0NPTCBJbnN0YW5jZS4NCj4gKw0KPiArICBAcGFyYW1bb3V0 XSBQcm90b2NvbExpc3RTaXplICBTaXplIG9mIHRoZSBQcm90b2NvbExpc3QuDQo+ICsNCj4gKyAg QHBhcmFtW291dF0gUHJvdG9jb2xMaXN0ICAgUHJvdG9jb2wgbGlzdC4NCj4gKw0KPiArICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICAgIExpc3Qgb2YgcHJvdG9jb2xzIGlzIHJldHVybmVkLg0K PiArICBAcmV0dmFsIEVGSV9CVUZGRVJfVE9PX1NNQUxMIFByb3RvY29sTGlzdFNpemUgaXMgdG9v IHNtYWxsIGZvciB0aGUNCj4gcmVzdWx0Lg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBJdCBoYXMgYmVlbiB1cGRhdGVkIHRvIHRoZSBzaXplIG5lZWRlZC4NCj4gKyAgQHJldHZh bCBFRklfREVWSUNFX0VSUk9SICAgICBTQ1AgcmV0dXJucyBhIFNDTUkgZXJyb3IuDQo+ICsgIEBy ZXR2YWwgIShFRklfU1VDQ0VTUykgICAgICAgT3RoZXIgZXJyb3JzLg0KPiArKiovDQo+ICt0eXBl ZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpTQ01JX0JBU0VfRElTQ09WRVJfTElTVF9Q Uk9UT0NPTFMpICgNCj4gKyAgSU4gICAgIFNDTUlfQkFTRV9QUk9UT0NPTCAgKlRoaXMsDQo+ICsg IElOIE9VVCBVSU5UMzIgICAgICAgICAgICAgICpQcm90b2NvbExpc3RTaXplLA0KPiArICBPVVQg ICAgVUlOVDggICAgICAgICAgICAgICAqUHJvdG9jb2xMaXN0DQo+ICsgICk7DQo+ICsNCj4gKy8v IEJhc2UgcHJvdG9jb2wuDQo+ICt0eXBlZGVmIHN0cnVjdCBfU0NNSV9CQVNFX1BST1RPQ09MIHsN Cj4gKyAgU0NNSV9CQVNFX0dFVF9WRVJTSU9OICAgICAgICAgICAgICAgICAgICAgIEdldFZlcnNp b247DQo+ICsgIFNDTUlfQkFTRV9HRVRfVE9UQUxfUFJPVE9DT0xTICAgICAgICAgICAgICBHZXRU b3RhbFByb3RvY29sczsNCj4gKyAgU0NNSV9CQVNFX0RJU0NPVkVSX1ZFTkRPUiAgICAgICAgICAg ICAgICAgIERpc2NvdmVyVmVuZG9yOw0KPiArICBTQ01JX0JBU0VfRElTQ09WRVJfU1VCX1ZFTkRP UiAgICAgICAgICAgICAgRGlzY292ZXJTdWJWZW5kb3I7DQo+ICsgIFNDTUlfQkFTRV9ESVNDT1ZF Ul9JTVBMRU1FTlRBVElPTl9WRVJTSU9ODQo+IERpc2NvdmVySW1wbGVtZW50YXRpb25WZXJzaW9u Ow0KPiArICBTQ01JX0JBU0VfRElTQ09WRVJfTElTVF9QUk9UT0NPTFMgICAgICAgICAgRGlzY292 ZXJMaXN0UHJvdG9jb2xzOw0KPiArfSBTQ01JX0JBU0VfUFJPVE9DT0w7DQo+ICsNCj4gKy8vIFND TUkgTWVzc2FnZSBJRHMgZm9yIEJhc2UgcHJvdG9jb2wuDQo+ICt0eXBlZGVmIGVudW0gew0KPiAr ICBTQ01JX01FU1NBR0VfSURfQkFTRV9ESVNDT1ZFUl9WRU5ET1IgICAgICAgICAgICAgICAgICA9 IDB4MywNCj4gKyAgU0NNSV9NRVNTQUdFX0lEX0JBU0VfRElTQ09WRVJfU1VCX1ZFTkRPUiAgICAg ICAgICAgICAgPSAweDQsDQo+ICsgIFNDTUlfTUVTU0FHRV9JRF9CQVNFX0RJU0NPVkVSX0lNUExF TUVOVEFUSU9OX1ZFUlNJT04gID0gMHg1LA0KPiArICBTQ01JX01FU1NBR0VfSURfQkFTRV9ESVND T1ZFUl9MSVNUX1BST1RPQ09MUyAgICAgICAgICA9IDB4Ng0KPiArfSBTQ01JX01FU1NBR0VfSURf QkFTRTsNCj4gKw0KPiArI2VuZGlmIC8qIEFSTV9TQ01JX0JBU0VfUFJPVE9DT0xfSF8gKi8NCj4g Kw0KPiBkaWZmIC0tZ2l0IGEvQXJtUGtnL0luY2x1ZGUvUHJvdG9jb2wvQXJtU2NtaUNsb2NrUHJv dG9jb2wuaA0KPiBiL0FybVBrZy9JbmNsdWRlL1Byb3RvY29sL0FybVNjbWlDbG9ja1Byb3RvY29s LmgNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXgNCj4gMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2RiMjZjYjA2NDFjNzM3N2MwDQo+IDIyYThlMDBiZTlh NTFlZTVkYzczNjENCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9Bcm1Qa2cvSW5jbHVkZS9Qcm90 b2NvbC9Bcm1TY21pQ2xvY2tQcm90b2NvbC5oDQo+IEBAIC0wLDAgKzEsMjE4IEBADQo+ICsvKiog QGZpbGUNCj4gKw0KPiArICBDb3B5cmlnaHQgKGMpIDIwMTctMjAxOCwgQXJtIExpbWl0ZWQuIEFs bCByaWdodHMgcmVzZXJ2ZWQuDQo+ICsNCj4gKyAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21w YW55aW5nIG1hdGVyaWFscw0KPiArICBhcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVu ZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUNCj4gQlNEIExpY2Vuc2UNCj4gKyAg d2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRo ZSBsaWNlbnNlIG1heSBiZQ0KPiBmb3VuZCBhdA0KPiArICBodHRwOi8vb3BlbnNvdXJjZS5vcmcv bGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwDQo+ICsNCj4gKyAgVEhFIFBST0dSQU0gSVMgRElTVFJJ QlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyINCj4gQkFTSVMsDQo+ICsg IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhF Ug0KPiBFWFBSRVNTIE9SIElNUExJRUQuDQo+ICsNCj4gKyAgU3lzdGVtIENvbnRyb2wgYW5kIE1h bmFnZW1lbnQgSW50ZXJmYWNlIFYxLjANCj4gKyAgICBodHRwOi8vaW5mb2NlbnRlci5hcm0uY29t L2hlbHAvdG9waWMvY29tLmFybS5kb2MuZGVuMDA1NmEvDQo+ICsgICAgREVOMDA1NkFfU3lzdGVt X0NvbnRyb2xfYW5kX01hbmFnZW1lbnRfSW50ZXJmYWNlLnBkZg0KPiArKiovDQo+ICsNCj4gKyNp Zm5kZWYgQVJNX1NDTUlfQ0xPQ0tfUFJPVE9DT0xfSF8NCj4gKyNkZWZpbmUgQVJNX1NDTUlfQ0xP Q0tfUFJPVE9DT0xfSF8NCj4gKw0KPiArI2luY2x1ZGUgPFByb3RvY29sL0FybVNjbWkuaD4NCj4g Kw0KPiArI2RlZmluZSBBUk1fU0NNSV9DTE9DS19QUk9UT0NPTF9HVUlEIHsgXA0KPiArICAweDkx Y2U2N2E4LCAweGUwYWEsIDB4NDAxMiwgezB4YjksIDB4OWYsIDB4YjYsIDB4ZmMsIDB4ZjMsIDB4 NCwgMHg4ZSwNCj4gMHhhYX0gXA0KPiArICB9DQo+ICsNCj4gK2V4dGVybiBFRklfR1VJRCBnQXJt U2NtaUNsb2NrUHJvdG9jb2xHdWlkOw0KPiArDQo+ICsvLyBNZXNzYWdlIFR5cGUgZm9yIGNsb2Nr IG1hbmFnZW1lbnQgcHJvdG9jb2wuDQo+ICt0eXBlZGVmIGVudW0gew0KPiArICBTQ01JX01FU1NB R0VfSURfQ0xPQ0tfQVRUUklCVVRFUyAgICAgPSAweDMsDQo+ICsgIFNDTUlfTUVTU0FHRV9JRF9D TE9DS19ERVNDUklCRV9SQVRFUyA9IDB4NCwNCj4gKyAgU0NNSV9NRVNTQUdFX0lEX0NMT0NLX1JB VEVfU0VUICAgICAgID0gMHg1LA0KPiArICBTQ01JX01FU1NBR0VfSURfQ0xPQ0tfUkFURV9HRVQg ICAgICAgPSAweDYsDQo+ICsgIFNDTUlfTUVTU0FHRV9JRF9DTE9DS19DT05GSUdfU0VUICAgICA9 IDB4Nw0KPiArfSBTQ01JX01FU1NBR0VfSURfQ0xPQ0s7DQo+ICsNCj4gK3R5cGVkZWYgZW51bSB7 DQo+ICsgIFNDTUlfQ0xPQ0tfUkFURV9GT1JNQVRfRElTQ1JFVEUsIC8vIE5vbi1saW5lYXIgcmFu Z2UuDQo+ICsgIFNDTUlfQ0xPQ0tfUkFURV9GT1JNQVRfTElORUFSICAgIC8vIExpbmVhciByYW5n ZS4NCj4gK30gU0NNSV9DTE9DS19SQVRFX0ZPUk1BVDsNCj4gKw0KPiArLy8gQ2xvY2sgbWFuYWdl bWVudCBwcm90b2NvbCB2ZXJzaW9uLg0KPiArI2RlZmluZSBTQ01JX0NMT0NLX1BST1RPQ09MX1ZF UlNJT04gMHgxMDAwMA0KPiArDQo+ICsjZGVmaW5lIFNDTUlfQ0xPQ0tfUFJPVE9DT0xfUEVORElO R19BU1lOQ19SQVRFU19NQVNLDQo+IDB4RkZVDQo+ICsjZGVmaW5lIFNDTUlfQ0xPQ0tfUFJPVE9D T0xfUEVORElOR19BU1lOQ19SQVRFU19TSElGVCAgICAgMTYNCj4gKyNkZWZpbmUgU0NNSV9DTE9D S19QUk9UT0NPTF9OVU1fQ0xPQ0tTX01BU0sgICAgICAgICAgICAgICAweEZGRkZVDQo+ICsNCj4g Ky8qKiBUb3RhbCBudW1iZXIgb2YgcGVuZGluZyBhc3luY2hyb25vdXMgY2xvY2sgcmF0ZXMgY2hh bmdlcw0KPiArICBzdXBwb3J0ZWQgYnkgdGhlIFNDUCwgQXR0ciBCaXRzWzIzOjE2XQ0KPiArKi8N Cj4gKyNkZWZpbmUgU0NNSV9DTE9DS19QUk9UT0NPTF9NQVhfQVNZTkNfQ0xLX1JBVEVTKEF0dHIp DQo+ICggICAgICAgICAgICAgICAgICAgICAgIFwNCj4gKyAgICAgICAgICAgICAgICAgIChBdHRy ID4+DQo+IFNDTUlfQ0xPQ0tfUFJPVE9DT0xfUEVORElOR19BU1lOQ19SQVRFU19TSElGVCkgJiYg IFwNCj4gKyAgICAgICAgICAgICAgICAgICBTQ01JX0NMT0NLX1BST1RPQ09MX1BFTkRJTkdfQVNZ TkNfUkFURVNfTUFTSykNCj4gKw0KPiArLy8gVG90YWwgb2YgY2xvY2sgZGV2aWNlcyBzdXBwb3J0 ZWQgYnkgdGhlIFNDUCwgQXR0ciBCaXRzWzE1OjBdDQo+ICsjZGVmaW5lIFNDTUlfQ0xPQ0tfUFJP VE9DT0xfVE9UQUxfQ0xLUyhBdHRyKSAoQXR0ciAmDQo+IFNDTUlfQ0xPQ0tfUFJPVE9DT0xfTlVN X0NMT0NLU19NQVNLKQ0KPiArDQo+ICsjcHJhZ21hIHBhY2soMSkNCj4gKw0KPiArLyogRGVwZW5k aW5nIG9uIHRoZSBmb3JtYXQgKGxpbmVhci9ub24tbGluZWFyKSBzdXBwb3J0ZWQgYnkgYSBjbG9j aw0KPiBkZXZpY2UNCj4gKyAgIGVpdGhlciBSYXRlIG9yIE1pbi9NYXgvU3RlcCB0cmlwbGV0IGlz IHZhbGlkLg0KPiArKi8NCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAgdW5pb24gew0KPiArICBV SU5UNjQgTWluOw0KPiArICBVSU5UNjQgUmF0ZTsNCj4gKyAgfTsNCj4gKyAgVUlOVDY0IE1heDsN Cj4gKyAgVUlOVDY0IFN0ZXA7DQo+ICt9IFNDTUlfQ0xPQ0tfUkFURTsNCj4gKw0KPiArI3ByYWdt YSBwYWNrKCkNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3QgX1NDTUlfQ0xPQ0tfUFJPVE9DT0wgU0NN SV9DTE9DS19QUk9UT0NPTDsNCj4gKw0KPiArLy8gUHJvdG9jb2wgSW50ZXJmYWNlIGZ1bmN0aW9u cy4NCj4gKw0KPiArLyoqIFJldHVybiB2ZXJzaW9uIG9mIHRoZSBjbG9jayBtYW5hZ2VtZW50IHBy b3RvY29sIHN1cHBvcnRlZCBieSBTQ1ANCj4gZmlybXdhcmUuDQo+ICsNCj4gKyAgQHBhcmFtW2lu XSAgVGhpcyAgICAgQSBQb2ludGVyIHRvIFNDTUlfQ0xPQ0tfUFJPVE9DT0wgSW5zdGFuY2UuDQo+ ICsNCj4gKyAgQHBhcmFtW291dF0gVmVyc2lvbiAgVmVyc2lvbiBvZiB0aGUgc3VwcG9ydGVkIFND TUkgQ2xvY2sgbWFuYWdlbWVudA0KPiBwcm90b2NvbC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9T VUNDRVNTICAgICAgIFRoZSB2ZXJzaW9uIGlzIHJldHVybmVkLg0KPiArICBAcmV0dmFsIEVGSV9E RVZJQ0VfRVJST1IgIFNDUCByZXR1cm5zIGFuIFNDTUkgZXJyb3IuDQo+ICsgIEByZXR2YWwgIShF RklfU1VDQ0VTUykgICAgT3RoZXIgZXJyb3JzLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtFRklf U1RBVFVTDQo+ICsoRUZJQVBJICpTQ01JX0NMT0NLX0dFVF9WRVJTSU9OKSAoDQo+ICsgIElOICBT Q01JX0NMT0NLX1BST1RPQ09MICAqVGhpcywNCj4gKyAgT1VUIFVJTlQzMiAgICAgICAgICAgICAg ICpWZXJzaW9uDQo+ICsgICk7DQo+ICsNCj4gKy8qKiBSZXR1cm4gdG90YWwgbnVtYmVyIG9mIGNs b2NrIGRldmljZXMgc3VwcG9ydGVkIGJ5IHRoZSBjbG9jaw0KPiBtYW5hZ2VtZW50DQo+ICsgICBw cm90b2NvbC4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICAgQSBQb2ludGVyIHRv IFNDTUlfQ0xPQ0tfUFJPVE9DT0wgSW5zdGFuY2UuDQo+ICsNCj4gKyAgQHBhcmFtW291dF0gVG90 YWxDbG9ja3MgIFRvdGFsIG51bWJlciBvZiBjbG9ja3Mgc3VwcG9ydGVkLg0KPiArDQo+ICsgIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgVG90YWwgbnVtYmVyIG9mIGNsb2NrcyBzdXBwb3J0ZWQg aXMgcmV0dXJuZWQuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgU0NQIHJldHVybnMg YW4gU0NNSSBlcnJvci4NCj4gKyAgQHJldHZhbCAhKEVGSV9TVUNDRVNTKSAgICBPdGhlciBlcnJv cnMuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKlNDTUlf Q0xPQ0tfR0VUX1RPVEFMX0NMT0NLUykgKA0KPiArICBJTiAgU0NNSV9DTE9DS19QUk9UT0NPTCAg KlRoaXMsDQo+ICsgIE9VVCBVSU5UMzIgICAgICAgICAgICAgICAqVG90YWxDbG9ja3MNCj4gKyAg KTsNCj4gKw0KPiArLyoqIFJldHVybiBhdHRyaWJ1dGVzIG9mIGEgY2xvY2sgZGV2aWNlLg0KPiAr DQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgIEEgUG9pbnRlciB0byBTQ01JX0NMT0NLX1BS T1RPQ09MIEluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBDbG9ja0lkICAgICBJZGVudGlmaWVy IGZvciB0aGUgY2xvY2sgZGV2aWNlLg0KPiArDQo+ICsgIEBwYXJhbVtvdXRdIEVuYWJsZWQgICAg ICAgICBJZiBUUlVFLCB0aGUgY2xvY2sgZGV2aWNlIGlzIGVuYWJsZWQuDQo+ICsgIEBwYXJhbVtv dXRdIENsb2NrQXNjaWlOYW1lICBBIE5VTEwgdGVybWluYXRlZCBBU0NJSSBzdHJpbmcgd2l0aCB0 aGUNCj4gY2xvY2sNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIG9mIHVw IHRvIDE2IGJ5dGVzLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgQ2xv Y2sgZGV2aWNlIGF0dHJpYnV0ZXMgYXJlIHJldHVybmVkLg0KPiArICBAcmV0dmFsIEVGSV9ERVZJ Q0VfRVJST1IgICAgIFNDUCByZXR1cm5zIGFuIFNDTUkgZXJyb3IuDQo+ICsgIEByZXR2YWwgIShF RklfU1VDQ0VTUykgICAgICAgT3RoZXIgZXJyb3JzLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtF RklfU1RBVFVTDQo+ICsoRUZJQVBJICpTQ01JX0NMT0NLX0dFVF9DTE9DS19BVFRSSUJVVEVTKSAo DQo+ICsgIElOICBTQ01JX0NMT0NLX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gIFVJTlQzMiAg ICAgICAgICAgICAgIENsb2NrSWQsDQo+ICsgIE9VVCBCT09MRUFOICAgICAgICAgICAgICAqRW5h YmxlZCwNCj4gKyAgT1VUIENIQVI4ICAgICAgICAgICAgICAgICpDbG9ja0FzY2lpTmFtZQ0KPiAr ICApOw0KPiArDQo+ICsvKiogUmV0dXJuIGxpc3Qgb2YgcmF0ZXMgc3VwcG9ydGVkIGJ5IGEgZ2l2 ZW4gY2xvY2sgZGV2aWNlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gVGhpcyAgICAgICAgQSBwb2lu dGVyIHRvIFNDTUlfQ0xPQ0tfUFJPVE9DT0wgSW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gQ2xv Y2tJZCAgICAgSWRlbnRpZmllciBmb3IgdGhlIGNsb2NrIGRldmljZS4NCj4gKw0KPiArICBAcGFy YW1bb3V0XSBGb3JtYXQgICAgICBTQ01JX0NMT0NLX1JBVEVfRk9STUFUX0RJU0NSRVRFOiBDbG9j aw0KPiBkZXZpY2UNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydHMgcmFuZ2Ug b2YgY2xvY2sgcmF0ZXMgd2hpY2ggYXJlIG5vbi1saW5lYXIuDQo+ICsNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgU0NNSV9DTE9DS19SQVRFX0ZPUk1BVF9MSU5FQVI6IENsb2NrIGRldmlj ZQ0KPiBzdXBwb3J0cw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZSBvZiBsaW5l YXIgY2xvY2sgcmF0ZXMgZnJvbSBNaW4gdG8gTWF4IGluIHN0ZXBzLg0KPiArDQo+ICsgIEBwYXJh bVtvdXRdIFRvdGFsUmF0ZXMgIFRvdGFsIG51bWJlciBvZiByYXRlcy4NCj4gKw0KPiArICBAcGFy YW1baW4sb3V0XSBSYXRlQXJyYXlTaXplICBTaXplIG9mIHRoZSBSYXRlQXJyYXkuDQo+ICsNCj4g KyAgQHBhcmFtW291dF0gUmF0ZUFycmF5ICAgTGlzdCBvZiBjbG9jayByYXRlcy4NCj4gKw0KPiAr ICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgIExpc3Qgb2YgY2xvY2sgcmF0ZXMgYXJlIHJl dHVybmVkLg0KPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgIFNDUCByZXR1cm5zIGFu IFNDTUkgZXJyb3IuDQo+ICsgIEByZXR2YWwgRUZJX0JVRkZFUl9UT09fU01BTEwgUmF0ZUFycmF5 U2l6ZSBpcyB0b28gc21hbGwgZm9yIHRoZQ0KPiByZXN1bHQuDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgSXQgaGFzIGJlZW4gdXBkYXRlZCB0byB0aGUgc2l6ZSBuZWVkZWQuDQo+ ICsgIEByZXR2YWwgIShFRklfU1VDQ0VTUykgICAgICAgT3RoZXIgZXJyb3JzLg0KPiArKiovDQo+ ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpTQ01JX0NMT0NLX0RFU0NSSUJF X1JBVEVTKSAoDQo+ICsgIElOICAgICBTQ01JX0NMT0NLX1BST1RPQ09MICAgICAqVGhpcywNCj4g KyAgSU4gICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICBDbG9ja0lkLA0KPiArICBPVVQgICAg U0NNSV9DTE9DS19SQVRFX0ZPUk1BVCAgKkZvcm1hdCwNCj4gKyAgT1VUICAgIFVJTlQzMiAgICAg ICAgICAgICAgICAgICpUb3RhbFJhdGVzLA0KPiArICBJTiBPVVQgVUlOVDMyICAgICAgICAgICAg ICAgICAgKlJhdGVBcnJheVNpemUsDQo+ICsgIE9VVCAgICBTQ01JX0NMT0NLX1JBVEUgICAgICAg ICAqUmF0ZUFycmF5DQo+ICsgICk7DQo+ICsNCj4gKy8qKiBHZXQgY2xvY2sgcmF0ZS4NCj4gKw0K PiArICBAcGFyYW1baW5dICBUaGlzICAgICAgICBBIFBvaW50ZXIgdG8gU0NNSV9DTE9DS19QUk9U T0NPTCBJbnN0YW5jZS4NCj4gKyAgQHBhcmFtW2luXSAgQ2xvY2tJZCAgICAgSWRlbnRpZmllciBm b3IgdGhlIGNsb2NrIGRldmljZS4NCj4gKw0KPiArICBAcGFyYW1bb3V0XSAgUmF0ZSAgICAgICBD bG9jayByYXRlLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgQ2xvY2sg cmF0ZSBpcyByZXR1cm5lZC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICBTQ1Ag cmV0dXJucyBhbiBTQ01JIGVycm9yLg0KPiArICBAcmV0dmFsICEoRUZJX1NVQ0NFU1MpICAgICAg IE90aGVyIGVycm9ycy4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVG SUFQSSAqU0NNSV9DTE9DS19SQVRFX0dFVCkgKA0KPiArICBJTiAgU0NNSV9DTE9DS19QUk9UT0NP TCAgKlRoaXMsDQo+ICsgIElOICBVSU5UMzIgICAgICAgICAgICAgICBDbG9ja0lkLA0KPiArICBP VVQgVUlOVDY0ICAgICAgICAgICAgICAgKlJhdGUNCj4gKyAgKTsNCj4gKw0KPiArLyoqIFNldCBj bG9jayByYXRlLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgIEEgUG9pbnRlciB0 byBTQ01JX0NMT0NLX1BST1RPQ09MIEluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBDbG9ja0lk ICAgICBJZGVudGlmaWVyIGZvciB0aGUgY2xvY2sgZGV2aWNlLg0KPiArICBAcGFyYW1baW5dICBS YXRlICAgICAgICBDbG9jayByYXRlLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAg ICAgICAgQ2xvY2sgcmF0ZSBzZXQgc3VjY2Vzcy4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VS Uk9SICAgICBTQ1AgcmV0dXJucyBhbiBTQ01JIGVycm9yLg0KPiArICBAcmV0dmFsICEoRUZJX1NV Q0NFU1MpICAgICAgIE90aGVyIGVycm9ycy4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NU QVRVUw0KPiArKEVGSUFQSSAqU0NNSV9DTE9DS19SQVRFX1NFVCkgKA0KPiArICBJTiBTQ01JX0NM T0NLX1BST1RPQ09MICAqVGhpcywNCj4gKyAgSU4gVUlOVDMyICAgICAgICAgICAgICAgQ2xvY2tJ ZCwNCj4gKyAgSU4gVUlOVDY0ICAgICAgICAgICAgICAgUmF0ZQ0KPiArICApOw0KPiArDQo+ICt0 eXBlZGVmIHN0cnVjdCBfU0NNSV9DTE9DS19QUk9UT0NPTCB7DQo+ICsgIFNDTUlfQ0xPQ0tfR0VU X1ZFUlNJT04gR2V0VmVyc2lvbjsNCj4gKyAgU0NNSV9DTE9DS19HRVRfVE9UQUxfQ0xPQ0tTIEdl dFRvdGFsQ2xvY2tzOw0KPiArICBTQ01JX0NMT0NLX0dFVF9DTE9DS19BVFRSSUJVVEVTIEdldENs b2NrQXR0cmlidXRlczsNCj4gKyAgU0NNSV9DTE9DS19ERVNDUklCRV9SQVRFUyBEZXNjcmliZVJh dGVzOw0KPiArICBTQ01JX0NMT0NLX1JBVEVfR0VUIFJhdGVHZXQ7DQo+ICsgIFNDTUlfQ0xPQ0tf UkFURV9TRVQgUmF0ZVNldDsNCj4gK30gU0NNSV9DTE9DS19QUk9UT0NPTDsNCj4gKw0KPiArI2Vu ZGlmIC8qIEFSTV9TQ01JX0NMT0NLX1BST1RPQ09MX0hfICovDQo+ICsNCj4gZGlmZiAtLWdpdCBh L0FybVBrZy9JbmNsdWRlL1Byb3RvY29sL0FybVNjbWlQZXJmb3JtYW5jZVByb3RvY29sLmgNCj4g Yi9Bcm1Qa2cvSW5jbHVkZS9Qcm90b2NvbC9Bcm1TY21pUGVyZm9ybWFuY2VQcm90b2NvbC5oDQo+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4DQo+IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAuLjFkMWFmNmY4YmVlMGMwMGJiZTYNCj4gYjQ3NzQwMzZjODdjOTg4 YTRmNGFmDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvQXJtUGtnL0luY2x1ZGUvUHJvdG9jb2wv QXJtU2NtaVBlcmZvcm1hbmNlUHJvdG9jb2wuaA0KPiBAQCAtMCwwICsxLDI2NSBAQA0KPiArLyoq IEBmaWxlDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAyMDE3LTIwMTgsIEFybSBMaW1pdGVkLiBB bGwgcmlnaHRzIHJlc2VydmVkLg0KPiArDQo+ICsgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29t cGFueWluZyBtYXRlcmlhbHMNCj4gKyAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlIGF2YWlsYWJsZSB1 bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlDQo+IEJTRCBMaWNlbnNlDQo+ICsg IHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBvZiB0 aGUgbGljZW5zZSBtYXkgYmUNCj4gZm91bmQgYXQNCj4gKyAgaHR0cDovL29wZW5zb3VyY2Uub3Jn L2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPiArDQo+ICsgIFRIRSBQUk9HUkFNIElTIERJU1RS SUJVVEVEIFVOREVSIFRIRSBCU0QgTElDRU5TRSBPTiBBTiAiQVMgSVMiDQo+IEJBU0lTLA0KPiAr ICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5ELCBFSVRI RVINCj4gRVhQUkVTUyBPUiBJTVBMSUVELg0KPiArDQo+ICsgIFN5c3RlbSBDb250cm9sIGFuZCBN YW5hZ2VtZW50IEludGVyZmFjZSBWMS4wDQo+ICsgICAgaHR0cDovL2luZm9jZW50ZXIuYXJtLmNv bS9oZWxwL3RvcGljL2NvbS5hcm0uZG9jLmRlbjAwNTZhLw0KPiArICAgIERFTjAwNTZBX1N5c3Rl bV9Db250cm9sX2FuZF9NYW5hZ2VtZW50X0ludGVyZmFjZS5wZGYNCj4gKyoqLw0KPiArDQo+ICsj aWZuZGVmIEFSTV9TQ01JX1BFUkZPUk1BTkNFX1BST1RPQ09MX0hfDQo+ICsjZGVmaW5lIEFSTV9T Q01JX1BFUkZPUk1BTkNFX1BST1RPQ09MX0hfDQo+ICsNCj4gKyNpbmNsdWRlIDxQcm90b2NvbC9B cm1TY21pLmg+DQo+ICsNCj4gKyNkZWZpbmUgUEVSRk9STUFOQ0VfUFJPVE9DT0xfVkVSU0lPTiAg MHgxMDAwMA0KPiArDQo+ICsjZGVmaW5lIEFSTV9TQ01JX1BFUkZPUk1BTkNFX1BST1RPQ09MX0dV SUQgIHsgXA0KPiArICAweDliOGJhODQsIDB4M2RkMywgMHg0OWE2LCB7MHhhMCwgMHg1YSwgMHgz MSwgMHgzNCwgMHhhNSwgMHhmMCwgMHg3YiwNCj4gMHhhZH0gXA0KPiArICB9DQo+ICsNCj4gK2V4 dGVybiBFRklfR1VJRCBnQXJtU2NtaVBlcmZvcm1hbmNlUHJvdG9jb2xHdWlkOw0KPiArDQo+ICt0 eXBlZGVmIHN0cnVjdCBfU0NNSV9QRVJGT1JNQU5DRV9QUk9UT0NPTA0KPiBTQ01JX1BFUkZPUk1B TkNFX1BST1RPQ09MOw0KPiArDQo+ICsjcHJhZ21hIHBhY2soMSkNCj4gKw0KPiArI2RlZmluZSBQ T1dFUl9JTl9NV19TSElGVCAgICAgICAxNg0KPiArI2RlZmluZSBQT1dFUl9JTl9NV19NQVNLICAg ICAgICAweDENCj4gKyNkZWZpbmUgTlVNX1BFUkZfRE9NQUlOU19NQVNLICAgMHhGRkZGDQo+ICsN Cj4gKy8vIFRvdGFsIG51bWJlciBvZiBwZXJmb3JtYW5jZSBkb21haW5zLCBBdHRyIEJpdHMgWzE1 OjBdDQo+ICsjZGVmaW5lIFNDTUlfUEVSRl9UT1RBTF9ET01BSU5TKEF0dHIpICAoQXR0ciAmDQo+ IE5VTV9QRVJGX0RPTUFJTlNfTUFTSykNCj4gKw0KPiArLy8gQSBmbGFnIHRvIGV4cHJlc3MgcG93 ZXIgdmFsdWVzIGluIG1XIG9yIHBsYXRmb3JtIHNwZWNpZmljIHdheSwgQXR0ciBCaXQNCj4gWzE2 XQ0KPiArI2RlZmluZSBTQ01JX1BFUkZfUE9XRVJfSU5fTVcoQXR0cikgICgoQXR0ciA+Pg0KPiBQ T1dFUl9JTl9NV19TSElGVCkgJiAgICBcDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFBPV0VSX0lOX01XX01BU0spDQo+ICsNCj4gKy8vIFBlcmZvcm1hbmNlIHByb3Rv Y29sIGF0dHJpYnV0ZXMgcmV0dXJuIHZhbHVlcy4NCj4gK3R5cGVkZWYgc3RydWN0IHsNCj4gKyAg VUlOVDMyIEF0dHJpYnV0ZXM7DQo+ICsgIFVJTlQ2NCBTdGF0aXN0aWNzQWRkcmVzczsNCj4gKyAg VUlOVDMyIFN0YXRpc3RpY3NMZW47DQo+ICt9IFNDTUlfUEVSRk9STUFOQ0VfUFJPVE9DT0xfQVRU UklCVVRFUzsNCj4gKw0KPiArI2RlZmluZSBTQ01JX1BFUkZfU1VQUE9SVF9MVkxfQ0hBTkdFX05P VElGWShBdHRyKSAoKEF0dHIgPj4gMjgpICYNCj4gMHgxKQ0KPiArI2RlZmluZSBTQ01JX1BFUkZf U1VQUE9SVF9MSU1fQ0hBTkdFX05PVElGWShBdHRyKSAoKEF0dHIgPj4gMjkpICYNCj4gMHgxKQ0K PiArI2RlZmluZSBTQ01JX1BFUkZfU1VQUE9SVF9TRVRfTFZMKEF0dHIpICgoQXR0ciA+PiAzMCkg JiAweDEpDQo+ICsjZGVmaW5lIFNDTUlfUEVSRl9TVVBQT1JUX1NFVF9MSU0oQXR0cikgKChBdHRy ID4+IDMxKSAmIDB4MSkNCj4gKyNkZWZpbmUgU0NNSV9QRVJGX1JBVEVfTElNSVQoUmF0ZUxpbWl0 KSAoUmF0ZUxpbWl0ICYgMHhGRkYpDQo+ICsNCj4gKy8vIFBlcmZvcm1hbmNlIHByb3RvY29sIGRv bWFpbiBhdHRyaWJ1dGVzLg0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiArICBVSU5UMzIgQXR0cmli dXRlczsNCj4gKyAgVUlOVDMyIFJhdGVMaW1pdDsNCj4gKyAgVUlOVDMyIFN1c3RhaW5lZEZyZXE7 DQo+ICsgIFVJTlQzMiBTdXN0YWluZWRQZXJmTGV2ZWw7DQo+ICsgIFVJTlQ4ICBOYW1lW1NDTUlf TUFYX1NUUl9MRU5dOw0KPiArfSBTQ01JX1BFUkZPUk1BTkNFX0RPTUFJTl9BVFRSSUJVVEVTOw0K PiArDQo+ICsvLyBXb3JzdCBjYXNlIGxhdGVuY3kgaW4gbWljcm9zZWNvbmRzLCBCaXRzWzE1OjBd DQo+ICsjZGVmaW5lIFBFUkZfTEFURU5DWV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAw eEZGRkYNCj4gKyNkZWZpbmUgU0NNSV9QRVJGT1JNQU5DRV9QUk9UT0NPTF9MQVRFTkNZKExhdGVu Y3kpIChMYXRlbmN5ICYNCj4gUEVSRl9MQVRFTkNZX01BU0spDQo+ICsNCj4gKy8vIFBlcmZvcm1h bmNlIHByb3RvY29sIHBlcmZvcm1hbmNlIGxldmVsLg0KPiArdHlwZWRlZiAgc3RydWN0IHsNCj4g KyAgVUlOVDMyIExldmVsOw0KPiArICBVSU5UMzIgUG93ZXJDb3N0Ow0KPiArICBVSU5UMzIgTGF0 ZW5jeTsNCj4gK30gU0NNSV9QRVJGT1JNQU5DRV9MRVZFTDsNCj4gKw0KPiArLy8gUGVyZm9ybWFu Y2UgcHJvdG9jb2wgcGVyZm9ybWFuY2UgbGltaXQuDQo+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ICsg IFVJTlQzMiBSYW5nZU1heDsNCj4gKyAgVUlOVDMyIFJhbmdlTWluOw0KPiArfSBTQ01JX1BFUkZP Uk1BTkNFX0xJTUlUUzsNCj4gKw0KPiArI3ByYWdtYSBwYWNrKCkNCj4gKw0KPiArLyoqIFJldHVy biB2ZXJzaW9uIG9mIHRoZSBwZXJmb3JtYW5jZSBtYW5hZ2VtZW50IHByb3RvY29sIHN1cHBvcnRl ZA0KPiBieSBTQ1AuDQo+ICsgICBmaXJtd2FyZS4NCj4gKw0KPiArICBAcGFyYW1baW5dICBUaGlz ICAgICAgQSBQb2ludGVyIHRvIFNDTUlfUEVSRk9STUFOQ0VfUFJPVE9DT0wNCj4gSW5zdGFuY2Uu DQo+ICsNCj4gKyAgQHBhcmFtW291dF0gVmVyc2lvbiAgIFZlcnNpb24gb2YgdGhlIHN1cHBvcnRl ZCBTQ01JIHBlcmZvcm1hbmNlDQo+IG1hbmFnZW1lbnQNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgIHByb3RvY29sLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgVGhlIHZl cnNpb24gaXMgcmV0dXJuZWQuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgU0NQIHJl dHVybnMgYW4gU0NNSSBlcnJvci4NCj4gKyAgQHJldHZhbCAhKEVGSV9TVUNDRVNTKSAgICBPdGhl ciBlcnJvcnMuDQo+ICsqKi8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkg KlNDTUlfUEVSRk9STUFOQ0VfR0VUX1ZFUlNJT04pICgNCj4gKyAgSU4gIFNDTUlfUEVSRk9STUFO Q0VfUFJPVE9DT0wgICpUaGlzLA0KPiArICBPVVQgVUlOVDMyICAgICAgICAgICAgICAgICAgICAg KlZlcnNpb24NCj4gKyAgKTsNCj4gKw0KPiArLyoqIFJldHVybiBwcm90b2NvbCBhdHRyaWJ1dGVz IG9mIHRoZSBwZXJmb3JtYW5jZSBtYW5hZ2VtZW50IHByb3RvY29sLg0KPiArDQo+ICsgIEBwYXJh bVtpbl0gVGhpcyAgICAgICAgIEEgUG9pbnRlciB0byBTQ01JX1BFUkZPUk1BTkNFX1BST1RPQ09M DQo+IEluc3RhbmNlLg0KPiArDQo+ICsgIEBwYXJhbVtvdXRdIEF0dHJpYnV0ZXMgIFByb3RvY29s IGF0dHJpYnV0ZXMuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICBQcm90b2Nv bCBhdHRyaWJ1dGVzIGFyZSByZXR1cm5lZC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9S ICBTQ1AgcmV0dXJucyBhbiBTQ01JIGVycm9yLg0KPiArICBAcmV0dmFsICEoRUZJX1NVQ0NFU1Mp ICAgIE90aGVyIGVycm9ycy4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiAr KEVGSUFQSSAqU0NNSV9QRVJGT1JNQU5DRV9HRVRfQVRUUklCVVRFUykgKA0KPiArICBJTiAgU0NN SV9QRVJGT1JNQU5DRV9QUk9UT0NPTCAgICAgICAgICAgICAgKlRoaXMsDQo+ICsgIE9VVCBTQ01J X1BFUkZPUk1BTkNFX1BST1RPQ09MX0FUVFJJQlVURVMgICAqQXR0cmlidXRlcw0KPiArDQo+ICsg ICk7DQo+ICsNCj4gKy8qKiBSZXR1cm4gcGVyZm9ybWFuY2UgZG9tYWluIGF0dHJpYnV0ZXMuDQo+ ICsNCj4gKyAgQHBhcmFtW2luXSAgVGhpcyAgICAgICAgQSBQb2ludGVyIHRvIFNDTUlfUEVSRk9S TUFOQ0VfUFJPVE9DT0wNCj4gSW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gIERvbWFpbklkICAg IElkZW50aWZpZXIgZm9yIHRoZSBwZXJmb3JtYW5jZSBkb21haW4uDQo+ICsNCj4gKyAgQHBhcmFt W291dF0gQXR0cmlidXRlcyAgUGVyZm9ybWFuY2UgZG9tYWluIGF0dHJpYnV0ZXMuDQo+ICsNCj4g KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICBEb21haW4gYXR0cmlidXRlcyBhcmUgcmV0dXJu ZWQuDQo+ICsgIEByZXR2YWwgRUZJX0RFVklDRV9FUlJPUiAgU0NQIHJldHVybnMgYW4gU0NNSSBl cnJvci4NCj4gKyAgQHJldHZhbCAhKEVGSV9TVUNDRVNTKSAgICBPdGhlciBlcnJvcnMuDQo+ICsq Ki8NCj4gK3R5cGVkZWYNCj4gK0VGSV9TVEFUVVMNCj4gKyhFRklBUEkgKlNDTUlfUEVSRk9STUFO Q0VfR0VUX0RPTUFJTl9BVFRSSUJVVEVTKSAoDQo+ICsgIElOICBTQ01JX1BFUkZPUk1BTkNFX1BS T1RPQ09MICAgICAgICAgICAqVGhpcywNCj4gKyAgSU4gIFVJTlQzMiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBEb21haW5JZCwNCj4gKyAgT1VUIFNDTUlfUEVSRk9STUFOQ0VfRE9NQUlO X0FUVFJJQlVURVMgICpEb21haW5BdHRyaWJ1dGVzDQo+ICsgICk7DQo+ICsNCj4gKy8qKiBSZXR1 cm4gbGlzdCBvZiBwZXJmb3JtYW5jZSBkb21haW4gbGV2ZWxzIG9mIGEgZ2l2ZW4gZG9tYWluLg0K PiArDQo+ICsgIEBwYXJhbVtpbl0gVGhpcyAgICAgICAgQSBQb2ludGVyIHRvIFNDTUlfUEVSRk9S TUFOQ0VfUFJPVE9DT0wNCj4gSW5zdGFuY2UuDQo+ICsgIEBwYXJhbVtpbl0gRG9tYWluSWQgICAg SWRlbnRpZmllciBmb3IgdGhlIHBlcmZvcm1hbmNlIGRvbWFpbi4NCj4gKw0KPiArICBAcGFyYW1b b3V0XSBOdW1MZXZlbHMgICBUb3RhbCBudW1iZXIgb2YgbGV2ZWxzIGEgZG9tYWluIGNhbiBzdXBw b3J0Lg0KPiArDQo+ICsgIEBwYXJhbVtpbixvdXRdICBMZXZlbEFycmF5U2l6ZSBTaXplIG9mIHRo ZSBwZXJmb3JtYW5jZSBsZXZlbCBhcnJheS4NCj4gKw0KPiArICBAcGFyYW1bb3V0XSBMZXZlbEFy cmF5ICAgQXJyYXkgb2YgdGhlIHBlcmZvcm1hbmNlIGxldmVscy4NCj4gKw0KPiArICBAcmV0dmFs IEVGSV9TVUNDRVNTICAgICAgICAgIERvbWFpbiBsZXZlbHMgYXJlIHJldHVybmVkLg0KPiArICBA cmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgIFNDUCByZXR1cm5zIGFuIFNDTUkgZXJyb3IuDQo+ ICsgIEByZXR2YWwgRUZJX0JVRkZFUl9UT09fU01BTEwgTGV2ZWxBcnJheVNpemUgaXMgdG9vIHNt YWxsIGZvciB0aGUNCj4gcmVzdWx0Lg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEl0IGhhcyBiZWVuIHVwZGF0ZWQgdG8gdGhlIHNpemUgbmVlZGVkLg0KPiArICBAcmV0dmFsICEo RUZJX1NVQ0NFU1MpICAgICAgIE90aGVyIGVycm9ycy4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiAr RUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqU0NNSV9QRVJGT1JNQU5DRV9ERVNDUklCRV9MRVZFTFMp ICgNCj4gKyAgSU4gICAgIFNDTUlfUEVSRk9STUFOQ0VfUFJPVE9DT0wgICpUaGlzLA0KPiArICBJ TiAgICAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgRG9tYWluSWQsDQo+ICsgIE9VVCAgICBV SU5UMzIgICAgICAgICAgICAgICAgICAgICAqTnVtTGV2ZWxzLA0KPiArICBJTiBPVVQgVUlOVDMy ICAgICAgICAgICAgICAgICAgICAgKkxldmVsQXJyYXlTaXplLA0KPiArICBPVVQgICAgU0NNSV9Q RVJGT1JNQU5DRV9MRVZFTCAgICAgKkxldmVsQXJyYXkNCj4gKyAgKTsNCj4gKw0KPiArLyoqIFNl dCBwZXJmb3JtYW5jZSBsaW1pdHMgb2YgYSBkb21haW4uDQo+ICsNCj4gKyAgQHBhcmFtW2luXSBU aGlzICAgICAgICBBIFBvaW50ZXIgdG8gU0NNSV9QRVJGT1JNQU5DRV9QUk9UT0NPTA0KPiBJbnN0 YW5jZS4NCj4gKyAgQHBhcmFtW2luXSBEb21haW5JZCAgICBJZGVudGlmaWVyIGZvciB0aGUgcGVy Zm9ybWFuY2UgZG9tYWluLg0KPiArICBAcGFyYW1baW5dIExpbWl0ICAgICAgIFBlcmZvcm1hbmNl IGxpbWl0IHRvIHNldC4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgIFBl cmZvcm1hbmNlIGxpbWl0cyBzZXQgc3VjY2Vzc2Z1bGx5Lg0KPiArICBAcmV0dmFsIEVGSV9ERVZJ Q0VfRVJST1IgICAgIFNDUCByZXR1cm5zIGFuIFNDTUkgZXJyb3IuDQo+ICsgIEByZXR2YWwgIShF RklfU1VDQ0VTUykgICAgICAgT3RoZXIgZXJyb3JzLg0KPiArKiovDQo+ICt0eXBlZGVmDQo+ICtF RklfU1RBVFVTDQo+ICsoRUZJQVBJICpTQ01JX1BFUkZPUk1BTkNFX0xJTUlUU19TRVQpICgNCj4g KyAgSU4gU0NNSV9QRVJGT1JNQU5DRV9QUk9UT0NPTCAqVGhpcywNCj4gKyAgSU4gVUlOVDMyICAg ICAgICAgICAgICAgICAgICBEb21haW5JZCwNCj4gKyAgSU4gU0NNSV9QRVJGT1JNQU5DRV9MSU1J VFMgICAqTGltaXRzDQo+ICsgICk7DQo+ICsNCj4gKy8qKiBHZXQgcGVyZm9ybWFuY2UgbGltaXRz IG9mIGEgZG9tYWluLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgIEEgUG9pbnRl ciB0byBTQ01JX1BFUkZPUk1BTkNFX1BST1RPQ09MDQo+IEluc3RhbmNlLg0KPiArICBAcGFyYW1b aW5dICBEb21haW5JZCAgICBJZGVudGlmaWVyIGZvciB0aGUgcGVyZm9ybWFuY2UgZG9tYWluLg0K PiArDQo+ICsgIEBwYXJhbVtvdXRdIExpbWl0ICAgICAgIFBlcmZvcm1hbmNlIExpbWl0cyBvZiB0 aGUgZG9tYWluLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgUGVyZm9y bWFuY2UgbGltaXRzIGFyZSByZXR1cm5lZC4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9S ICAgICBTQ1AgcmV0dXJucyBhbiBTQ01JIGVycm9yLg0KPiArICBAcmV0dmFsICEoRUZJX1NVQ0NF U1MpICAgICAgIE90aGVyIGVycm9ycy4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRV Uw0KPiArKEVGSUFQSSAqU0NNSV9QRVJGT1JNQU5DRV9MSU1JVFNfR0VUKSAoDQo+ICsgIFNDTUlf UEVSRk9STUFOQ0VfUFJPVE9DT0wgKlRoaXMsDQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAg ICAgRG9tYWluSWQsDQo+ICsgIFNDTUlfUEVSRk9STUFOQ0VfTElNSVRTICAgKkxpbWl0cw0KPiAr ICApOw0KPiArDQo+ICsvKiogU2V0IHBlcmZvcm1hbmNlIGxldmVsIG9mIGEgZG9tYWluLg0KPiAr DQo+ICsgIEBwYXJhbVtpbl0gIFRoaXMgICAgICAgIEEgUG9pbnRlciB0byBTQ01JX1BFUkZPUk1B TkNFX1BST1RPQ09MDQo+IEluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBEb21haW5JZCAgICBJ ZGVudGlmaWVyIGZvciB0aGUgcGVyZm9ybWFuY2UgZG9tYWluLg0KPiArICBAcGFyYW1baW5dICBM ZXZlbCAgICAgICBQZXJmb3JtYW5jZSBsZXZlbCBvZiB0aGUgZG9tYWluLg0KPiArDQo+ICsgIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgUGVyZm9ybWFuY2UgbGV2ZWwgc2V0IHN1Y2Nlc3Nm dWxseS4NCj4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICBTQ1AgcmV0dXJucyBhbiBT Q01JIGVycm9yLg0KPiArICBAcmV0dmFsICEoRUZJX1NVQ0NFU1MpICAgICAgIE90aGVyIGVycm9y cy4NCj4gKyoqLw0KPiArdHlwZWRlZg0KPiArRUZJX1NUQVRVUw0KPiArKEVGSUFQSSAqU0NNSV9Q RVJGT1JNQU5DRV9MRVZFTF9TRVQpICgNCj4gKyAgSU4gU0NNSV9QRVJGT1JNQU5DRV9QUk9UT0NP TCAqVGhpcywNCj4gKyAgSU4gVUlOVDMyICAgICAgICAgICAgICAgICAgICBEb21haW5JZCwNCj4g KyAgSU4gVUlOVDMyICAgICAgICAgICAgICAgICAgICBMZXZlbA0KPiArICApOw0KPiArDQo+ICsv KiogR2V0IHBlcmZvcm1hbmNlIGxldmVsIG9mIGEgZG9tYWluLg0KPiArDQo+ICsgIEBwYXJhbVtp bl0gIFRoaXMgICAgICAgIEEgUG9pbnRlciB0byBTQ01JX1BFUkZPUk1BTkNFX1BST1RPQ09MDQo+ IEluc3RhbmNlLg0KPiArICBAcGFyYW1baW5dICBEb21haW5JZCAgICBJZGVudGlmaWVyIGZvciB0 aGUgcGVyZm9ybWFuY2UgZG9tYWluLg0KPiArDQo+ICsgIEBwYXJhbVtvdXRdIExldmVsICAgICAg IFBlcmZvcm1hbmNlIGxldmVsIG9mIHRoZSBkb21haW4uDQo+ICsNCj4gKyAgQHJldHZhbCBFRklf U1VDQ0VTUyAgICAgICAgICBQZXJmb3JtYW5jZSBsZXZlbCBnb3Qgc3VjY2Vzc2Z1bGx5Lg0KPiAr ICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgIFNDUCByZXR1cm5zIGFuIFNDTUkgZXJyb3Iu DQo+ICsgIEByZXR2YWwgIShFRklfU1VDQ0VTUykgICAgICAgT3RoZXIgZXJyb3JzLg0KPiArKiov DQo+ICt0eXBlZGVmDQo+ICtFRklfU1RBVFVTDQo+ICsoRUZJQVBJICpTQ01JX1BFUkZPUk1BTkNF X0xFVkVMX0dFVCkgKA0KPiArICBJTiAgU0NNSV9QRVJGT1JNQU5DRV9QUk9UT0NPTCAqVGhpcywN Cj4gKyAgSU4gIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgRG9tYWluSWQsDQo+ICsgIE9VVCBV SU5UMzIgICAgICAgICAgICAgICAgICAgICpMZXZlbA0KPiArICApOw0KPiArDQo+ICt0eXBlZGVm IHN0cnVjdCBfU0NNSV9QRVJGT1JNQU5DRV9QUk9UT0NPTCB7DQo+ICsgIFNDTUlfUEVSRk9STUFO Q0VfR0VUX1ZFUlNJT04gR2V0VmVyc2lvbjsNCj4gKyAgU0NNSV9QRVJGT1JNQU5DRV9HRVRfQVRU UklCVVRFUyBHZXRQcm90b2NvbEF0dHJpYnV0ZXM7DQo+ICsgIFNDTUlfUEVSRk9STUFOQ0VfR0VU X0RPTUFJTl9BVFRSSUJVVEVTIEdldERvbWFpbkF0dHJpYnV0ZXM7DQo+ICsgIFNDTUlfUEVSRk9S TUFOQ0VfREVTQ1JJQkVfTEVWRUxTIERlc2NyaWJlTGV2ZWxzOw0KPiArICBTQ01JX1BFUkZPUk1B TkNFX0xJTUlUU19TRVQgTGltaXRzU2V0Ow0KPiArICBTQ01JX1BFUkZPUk1BTkNFX0xJTUlUU19H RVQgTGltaXRzR2V0Ow0KPiArICBTQ01JX1BFUkZPUk1BTkNFX0xFVkVMX1NFVCBMZXZlbFNldDsN Cj4gKyAgU0NNSV9QRVJGT1JNQU5DRV9MRVZFTF9HRVQgTGV2ZWxHZXQ7DQo+ICt9IFNDTUlfUEVS Rk9STUFOQ0VfUFJPVE9DT0w7DQo+ICsNCj4gK3R5cGVkZWYgZW51bSB7DQo+ICsgIFNDTUlfTUVT U0FHRV9JRF9QRVJGT1JNQU5DRV9ET01BSU5fQVRUUklCVVRFUyA9IDB4MywNCj4gKyAgU0NNSV9N RVNTQUdFX0lEX1BFUkZPUk1BTkNFX0RFU0NSSUJFX0xFVkVMUyAgID0gMHg0LA0KPiArICBTQ01J X01FU1NBR0VfSURfUEVSRk9STUFOQ0VfTElNSVRTX1NFVCAgICAgICAgPSAweDUsDQo+ICsgIFND TUlfTUVTU0FHRV9JRF9QRVJGT1JNQU5DRV9MSU1JVFNfR0VUICAgICAgICA9IDB4NiwNCj4gKyAg U0NNSV9NRVNTQUdFX0lEX1BFUkZPUk1BTkNFX0xFVkVMX1NFVCAgICAgICAgID0gMHg3LA0KPiAr ICBTQ01JX01FU1NBR0VfSURfUEVSRk9STUFOQ0VfTEVWRUxfR0VUICAgICAgICAgPSAweDgsDQo+ ICt9IFNDTUlfTUVTU0FHRV9JRF9QRVJGT1JNQU5DRTsNCj4gKw0KPiArI2VuZGlmIC8qIEFSTV9T Q01JX1BFUkZPUk1BTkNFX1BST1RPQ09MX0hfICovDQo+ICsNCj4gLS0NCj4gJ0d1aWQoQ0UxNjU2 NjktM0VGMy00OTNGLUI4NUQtNjE5MEVFNUI5NzU5KScNCj4gDQoNCg==