From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id BA47FC43381 for ; Fri, 15 Mar 2019 06:05:17 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 5F6CF218AC for ; Fri, 15 Mar 2019 06:05:17 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=nxp.com header.i=@nxp.com header.b="Gb5M4K7y" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728301AbfCOGFQ (ORCPT ); Fri, 15 Mar 2019 02:05:16 -0400 Received: from mail-eopbgr140058.outbound.protection.outlook.com ([40.107.14.58]:1280 "EHLO EUR01-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728267AbfCOGFQ (ORCPT ); Fri, 15 Mar 2019 02:05:16 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/BPC2r1rEGCNvnZsNbeyzr5XhOkZ59wOlhWTN3bP/F4=; b=Gb5M4K7yK0Z/Ts2Z9CSO+fAfq+MxIomtFdLDuk8+ffjo3uwfQThCZf8RQGpVblEsddyajjP8p/O1YwjcTQgGRGBCqLX/lxym4HACPg8qm2y/ksVGdKIVmZm1Zq8NtR0Lq9R9yC4XTEw6e2PK8LLy90hKyr8Hxd+d65RC/mCGNic= Received: from AM0PR0402MB3570.eurprd04.prod.outlook.com (52.133.46.11) by AM0PR0402MB3489.eurprd04.prod.outlook.com (52.133.43.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1709.13; Fri, 15 Mar 2019 06:05:00 +0000 Received: from AM0PR0402MB3570.eurprd04.prod.outlook.com ([fe80::c9e:21a8:3eae:bdeb]) by AM0PR0402MB3570.eurprd04.prod.outlook.com ([fe80::c9e:21a8:3eae:bdeb%3]) with mapi id 15.20.1709.011; Fri, 15 Mar 2019 06:04:59 +0000 From: Richard Zhu To: Andrey Smirnov CC: "bhelgaas@google.com" , "lorenzo.pieralisi@arm.com" , "l.stach@pengutronix.de" , "linux-pci@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" Subject: RE: [RFC 2/2] PCI: imx6: Add support for i.MX8QM/QXP PCIe Thread-Topic: [RFC 2/2] PCI: imx6: Add support for i.MX8QM/QXP PCIe Thread-Index: AQHU2X1O5tXI+QNdtk+AGc08yLg3pKYKAU2AgACYQfCAAV4ogIAADL8A Date: Fri, 15 Mar 2019 06:04:59 +0000 Message-ID: References: <1552467452-538-1-git-send-email-hongxing.zhu@nxp.com> <1552467452-538-2-git-send-email-hongxing.zhu@nxp.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=hongxing.zhu@nxp.com; x-originating-ip: [119.31.174.66] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 49fa28f6-9d83-4879-527f-08d6a90c2847 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600127)(711020)(4605104)(4618075)(2017052603328)(7153060)(7193020);SRVR:AM0PR0402MB3489; x-ms-traffictypediagnostic: AM0PR0402MB3489: x-ms-exchange-purlcount: 1 x-microsoft-antispam-prvs: x-forefront-prvs: 09778E995A x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(136003)(376002)(396003)(366004)(39860400002)(346002)(51874003)(189003)(199004)(13464003)(106356001)(105586002)(66066001)(26005)(33656002)(68736007)(54906003)(186003)(476003)(6436002)(6916009)(5660300002)(486006)(229853002)(53546011)(4326008)(6506007)(30864003)(256004)(14444005)(5024004)(14454004)(8936002)(45080400002)(81156014)(81166006)(8676002)(52536014)(446003)(966005)(99286004)(6246003)(97736004)(11346002)(2906002)(478600001)(7736002)(74316002)(102836004)(305945005)(316002)(55016002)(25786009)(86362001)(76176011)(53936002)(53946003)(93886005)(3846002)(7696005)(6306002)(9686003)(71200400001)(71190400001)(6116002)(21314003)(579004)(559001)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:AM0PR0402MB3489;H:AM0PR0402MB3570.eurprd04.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: FinV83zCkaxUm5N7/SV7P8+KLi1fTWBSnpvS7+Brkh/FJ74gvRFzj4kUKq0KIQqPWrPl8R9+EANwXfhM9Qwo5cK863de9sjmqN30g7DNEfOfSoBsLbiomQQxNU4h/gPXhiCqSwpW+AbV5T4JFnPwBfBku9+YTYICSBPRO4VXmh7md6/s+0pAqaCl73ipGguhg9A47AcJq0FV+ifmQsmMe2IHDYZ2kkH37njIQj7SosHEjzk8aHjB0iwzrH/Ng6VoHviFrI9TBvq+gkTCQAdgpoZop9pZD+gsDRJrlkNneM8XTGMm4CCnPUNZ23RfJcqSTJL7fVw1xR86PjwRup6hxsTppvqbhHBzGSZGYSneGInqSgua3NSHqOE9x6ffVxFwKz2UaaHXlfAvx5CBW48qwVFUJOYkxznz0n5XdBzDtTU= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 49fa28f6-9d83-4879-527f-08d6a90c2847 X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Mar 2019 06:04:59.9037 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR0402MB3489 Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org SGkgQW5kcmV5Og0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEFuZHJl eSBTbWlybm92IFttYWlsdG86YW5kcmV3LnNtaXJub3ZAZ21haWwuY29tXQ0KPiBTZW50OiAyMDE5 5bm0M+aciDE15pelIDEwOjE4DQo+IFRvOiBSaWNoYXJkIFpodSA8aG9uZ3hpbmcuemh1QG54cC5j b20+DQo+IENjOiBiaGVsZ2Fhc0Bnb29nbGUuY29tOyBsb3JlbnpvLnBpZXJhbGlzaUBhcm0uY29t Ow0KPiBsLnN0YWNoQHBlbmd1dHJvbml4LmRlOyBsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnOw0K PiBsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmc7IGxpbnV4LWtlcm5lbEB2Z2Vy Lmtlcm5lbC5vcmcNCj4gU3ViamVjdDogUmU6IFtSRkMgMi8yXSBQQ0k6IGlteDY6IEFkZCBzdXBw b3J0IGZvciBpLk1YOFFNL1FYUCBQQ0llDQo+IA0KPiBPbiBUaHUsIE1hciAxNCwgMjAxOSBhdCAy OjE4IEFNIFJpY2hhcmQgWmh1IDxob25neGluZy56aHVAbnhwLmNvbT4NCj4gd3JvdGU6DQo+ID4N Cj4gPiBIaSBBbmRyZXk6DQo+ID4gVGhhbmtzIGEgbG90IGZvciB5b3VyIHJldmlldyBjb21tZW50 cy4NCj4gPg0KPiA+IEJlc3QgUmVnYXJkcw0KPiA+IFJpY2hhcmQgWmh1DQo+ID4gT2ZmaWNlOiA4 Ni0yMS0yODkzNzE4OQ0KPiA+IE1vYmlsZTogODYtMTMzODYwNTk3ODYNCj4gPg0KPiA+DQo+ID4g PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gRnJvbTogQW5kcmV5IFNtaXJub3Yg W21haWx0bzphbmRyZXcuc21pcm5vdkBnbWFpbC5jb21dDQo+ID4gPiBTZW50OiAyMDE55bm0M+ac iDE05pelIDQ6MjANCj4gPiA+IFRvOiBSaWNoYXJkIFpodSA8aG9uZ3hpbmcuemh1QG54cC5jb20+ DQo+ID4gPiBDYzogYmhlbGdhYXNAZ29vZ2xlLmNvbTsgbG9yZW56by5waWVyYWxpc2lAYXJtLmNv bTsNCj4gPiA+IGwuc3RhY2hAcGVuZ3V0cm9uaXguZGU7IGxpbnV4LXBjaUB2Z2VyLmtlcm5lbC5v cmc7DQo+ID4gPiBsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmc7IGxpbnV4LWtl cm5lbEB2Z2VyLmtlcm5lbC5vcmcNCj4gPiA+IFN1YmplY3Q6IFJlOiBbUkZDIDIvMl0gUENJOiBp bXg2OiBBZGQgc3VwcG9ydCBmb3IgaS5NWDhRTS9RWFAgUENJZQ0KPiA+ID4NCj4gPiA+IE9uIFdl ZCwgTWFyIDEzLCAyMDE5IGF0IDI6MTUgQU0gUmljaGFyZCBaaHUgPGhvbmd4aW5nLnpodUBueHAu Y29tPg0KPiA+ID4gd3JvdGU6DQo+ID4gPiA+DQo+ID4gPiA+IEFkZCBjb2RlcyBuZWVkZWQgdG8g c3VwcG9ydCBpLk1YOFFNL1FYUCBQQ0llLg0KPiA+ID4gPiAtIEhTSU8oSGlnaCBTcGVlZCBJTykg c3Vic3lzdGVtIGlzIG5ldyBkZWZpbmVkIG9uIGkuTVg4UU0vUVhQLg0KPiA+ID4gPiAgIFRoZSBQ Q0llIGFuZCBTQVRBIG1vZHVsZXMgYXJlIGNvbnRhaW5lZCBpbiB0aGUgSFNJTyBzdWJzeXN0ZW0u DQo+IFRoZXJlDQo+ID4gPiA+ICAgYXJlIHR3byBQQ0llLCBvbmUgU0FUQSBjb250cm9sbGVycyBh bmQgdGhyZWUgbWl4ZWQgbGFuZSBQSFlzIG9uDQo+ID4gPiA+ICAgaS5NWDhRTS4gVGhlcmUgYXJl IHRocmVlIHVzZSBjYXNlcyBvZiB0aGUgSFNJTyBzdWJzeXN0ZW0gb24NCj4gPiA+IGkuTVg4UU0u DQo+ID4gPiA+ICAgMS4gUENJZWEgMiBsYW5lcyBhbmQgb25lIFNBVEEgQUhDSSBwb3J0Lg0KPiA+ ID4gPiAgIDIuIFBDSWVhIDEgbGFuZSwgUENJZWIgMSBsYW5lIGFuZCBvbmUgU0FUQSBBSENJIHBv cnQuDQo+ID4gPiA+ICAgMy4gUENJZWEgMiBsYW5lcywgUENJZWIgMSBsYW5lLg0KPiA+ID4gPiAg IGkuTVg4UVhQIG9ubHkgaGFzIFBDSWViIGNvbnRyb2xsZXIgYW5kIG9uZSBsYW5lIFBIWS4NCj4g PiA+ID4gLSBUaGUgSFNJTyBhZGRyZXNzIG1hcCBhcyB2aWV3ZWQgZnJvbSBzeXN0ZW0gbGV2ZWwg aXMgYXMgc2hvd24gYmVsb3cuDQo+ID4gPiA+ICAgYWRkcmVzcyBbMzE6MjRdICAgIExvY2FsIGFk ZHJlc3MgICAgVGFyZ2V0ICAgIEFkZHJlc3MgU2l6ZQ0KPiA+ID4gPiAgIDVGICAgICAgICAgICAg ICAgICAwICAgICAgICAgICAgICAgIEhTSU8gICAgICAxNk1CDQo+ID4gPiA+ICAgNjAtNkYgICAg ICAgICAgICAgIDQwLTRGICAgICAgICAgICAgSFNJTyAgICAgIDI1Nk1CDQo+ID4gPiA+ICAgNzAt N0YgICAgICAgICAgICAgIDgwLThGICAgICAgICAgICAgSFNJTyAgICAgIDI1Nk1CDQo+ID4gPiA+ ICAgU28sIHRoZSBjcHVfYWRkcl9maXh1cCBpcyByZXF1aXJlZCB0byBlbmFibGUgaS5NWDhRTS9R WFAgUENJZS4NCj4gPiA+ID4gLSBCb3RoIGV4dGVybmFsIE9TQyBhbmQgaW50ZXJuYWwgUExMIGNh biBiZSB1c2VkIGFzIFBDSWUgcmVmZXJlbmNlDQo+ID4gPiA+ICAgY2xvY2suDQo+ID4gPiA+IC0g Y2xvY2sgcmVxdWVzdCBHUElPIGZvciBjb250cm9sbGluZyB0aGUgUENJIHJlZmVyZW5jZSBjbG9j ayByZXF1ZXN0DQo+ID4gPiA+ICAgc2lnbmFsLiBBbmQgc2hvdWxkIGJlIGNvbmZpZ3VyZSBPRCB3 aGVuIEwxU1MgbWF5YmUgZW5hYmxlZCBsYXRlci4NCj4gPiA+ID4gLSBPbmUgbW9yZSBwb3dlciBk b21haW4gSFNJT19HUElPIGFuZCBjbG9jayBQQ0lFX1BFUiBhcmUgcmVxdWlyZWQNCj4gYnkNCj4g PiA+ID4gICBpLk1YOFFNL1FYUCBQQ0llLg0KPiA+ID4gPg0KPiA+ID4gPiBTaWduZWQtb2ZmLWJ5 OiBSaWNoYXJkIFpodSA8aG9uZ3hpbmcuemh1QG54cC5jb20+DQo+ID4gPiA+IC0tLQ0KPiA+ID4g PiAgZHJpdmVycy9wY2kvY29udHJvbGxlci9kd2MvcGNpLWlteDYuYyB8IDM5Mg0KPiA+ID4gPiAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystDQo+ID4gPiA+ICAxIGZpbGUgY2hhbmdl ZCwgMzg3IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pDQo+ID4gPiA+DQo+ID4gPiA+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL2R3Yy9wY2ktaW14Ni5jDQo+ID4gPiA+ IGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9kd2MvcGNpLWlteDYuYw0KPiA+ID4gPiBpbmRleCBh YWE5NDg5Li5hYWNlZmI2IDEwMDY0NA0KPiA+ID4gPiAtLS0gYS9kcml2ZXJzL3BjaS9jb250cm9s bGVyL2R3Yy9wY2ktaW14Ni5jDQo+ID4gPiA+ICsrKyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIv ZHdjL3BjaS1pbXg2LmMNCj4gPiA+ID4gQEAgLTM5LDYgKzM5LDcgQEANCj4gPiA+ID4gICNkZWZp bmUgSU1YOE1RX0dQUl9QQ0lFX0NMS19SRVFfT1ZFUlJJREUgICAgICAgQklUKDExKQ0KPiA+ID4g PiAgI2RlZmluZSBJTVg4TVFfR1BSMTJfUENJRTJfQ1RSTF9ERVZJQ0VfVFlQRQ0KPiBHRU5NQVNL KDExLA0KPiA+ID4gOCkNCj4gPiA+ID4gICNkZWZpbmUgSU1YOE1RX1BDSUUyX0JBU0VfQUREUg0K PiAweDMzYzAwMDAwDQo+ID4gPiA+ICsjZGVmaW5lIElNWDhfSFNJT19QQ0lFQl9CQVNFX0FERFIg ICAgICAgICAgICAgIDB4NWYwMTAwMDANCj4gPiA+ID4NCj4gPiA+ID4gICNkZWZpbmUgdG9faW14 Nl9wY2llKHgpICAgICAgICBkZXZfZ2V0X2RydmRhdGEoKHgpLT5kZXYpDQo+ID4gPiA+DQo+ID4g PiA+IEBAIC00OCwxMCArNDksMTMgQEAgZW51bSBpbXg2X3BjaWVfdmFyaWFudHMgew0KPiA+ID4g PiAgICAgICAgIElNWDZRUCwNCj4gPiA+ID4gICAgICAgICBJTVg3RCwNCj4gPiA+ID4gICAgICAg ICBJTVg4TVEsDQo+ID4gPiA+ICsgICAgICAgSU1YOFFNLA0KPiA+ID4gPiArICAgICAgIElNWDhR WFAsDQo+ID4gPiA+ICB9Ow0KPiA+ID4gPg0KPiA+ID4gPiAgI2RlZmluZSBJTVg2X1BDSUVfRkxB R19JTVg2X1BIWQ0KPiBCSVQoMCkNCj4gPiA+ID4gICNkZWZpbmUgSU1YNl9QQ0lFX0ZMQUdfSU1Y Nl9TUEVFRF9DSEFOR0UgICAgICAgQklUKDEpDQo+ID4gPiA+ICsjZGVmaW5lIElNWDZfUENJRV9G TEFHX0lNWDZfQ1BVX0FERFJfRklYVVAgICAgIEJJVCgyKQ0KPiA+ID4NCj4gPiA+IFRoaXMgaXMg YW4gSU1YOFEqIHNwZWNpZmljIGZsYWcsIHNvIGl0IHByb2JhYmx5IHNob3VsZCBiZSBjYWxsZWQN Cj4gPiA+IHNvbWV0aGluZyBsaWtlIElNWDZfUENJRV9GTEFHX0lNWDhReF9DUFVfQUREX0ZJWFVQ Lg0KPiA+IFtSaWNoYXJkIFpodV0gT2theSwgd291bGQgY2hhbmdlIGl0IGxhdGVyLg0KPiA+ID4N Cj4gPiA+ID4NCj4gPiA+ID4gIHN0cnVjdCBpbXg2X3BjaWVfZHJ2ZGF0YSB7DQo+ID4gPiA+ICAg ICAgICAgZW51bSBpbXg2X3BjaWVfdmFyaWFudHMgdmFyaWFudDsgQEAgLTYwLDEwICs2NCwxMiBA QA0KPiA+ID4gPiBzdHJ1Y3QgaW14Nl9wY2llX2RydmRhdGEgew0KPiA+ID4gPg0KPiA+ID4gPiAg c3RydWN0IGlteDZfcGNpZSB7DQo+ID4gPiA+ICAgICAgICAgc3RydWN0IGR3X3BjaWUgICAgICAg ICAgKnBjaTsNCj4gPiA+ID4gKyAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICBjbGtyZXFf Z3BpbzsNCj4gPiA+DQo+ID4gPiBJcyB0aGlzIHJlYWxseSBuZWNlc3Nhcnk/IE9uIGkuTVg4TVEg dmVuZG9yIHRyZWUgZm9yIHNvbWUgdW5rbm93bg0KPiA+ID4gcmVhc29uIHdvdWxkIHJlY29uZmln dXJlIGEgZGVkaWNhdGVkIENMS1JFUV9CIHNpZ25hbCBhcyBhIEdQSU8gYW5kDQo+ID4gPiB0aGVu IHVzZSBpdCBhcyBDTEtSRVEgc2lnbmFsIHRoYXQgd2F5IGluc3RlYWQgb2YgY29udHJvbGxpbmcg aXQgdmlhDQo+ID4gPiBkZWRpY2F0ZWQgYml0cyBpbiByZWdpc3RlciBmaWxlLCBzbyBJIGFtIHdv bmRlcmluZyBpZiB0aGF0IGlzIHRoZSBjYXNlIHdpdGggUU0NCj4gYW5kIFFYUC4NCj4gPiBbUmlj aGFyZCBaaHVdIFRoZXJlIGlzIGEgc2FtZSBtZWNoYW5pc20gb2YgdGhlIENMS1JFUSBvbg0KPiBp TVg4UU0vUVhQL01RLg0KPiA+IFVwIHRvIG5vdywgdGhpcyBwaW4gaXMgY29uZmlndXJlZCBhcyBH UElPLCBiZWNhdXNlIHRoYXQgdGhpcyBwaW4gd291bGQNCj4gPiBiZSBwdWxsIHVwIHdoZW4gT0Qg aXMgc2V0IGFuZCB0aGUgRVAgZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgTDFTUyBhdCBhbGwu DQo+ID4gVGh1cywgdGhlIGV4dGVybmFsIENMSyB3b3VsZCBiZSB0dXJuZWQgb2ZmIGluIHRoaXMg c2NlbmFyaW8uDQo+ID4gVGhpcyBwaW4gd291bGQgYmUgdXNlZCBpbiBPRChPcGVuIERyYWluKSBt b2RlIHdoZW4gTDFTUyBpcyBlbmFibGVkLg0KPiA+IFRoZSBMMVNTIGhhcyBiZWVuIHZlcmlmaWVk IG9uIGlNWDhNUS4gQnV0IEkgZG9uJ3QgaGF2ZSBhIGR5bmFtaWMNCj4gPiBtZXRob2QgdG8gdHVy biB0aGUgTDFTUyBmZWF0dXJlIG9uIGF0IFJDIHNpZGUgeWV0IHdoZW4gdGhlIEwxU1MgaXMNCj4g c3VwcG9ydGVkIGJ5IEVQLg0KPiA+IENvbmZpZ3VyZSBDTEtfUkVRIGFzIEdQSU8gaGVyZSBjdXJy ZW50bHksIGFuZCBob3BlIHRvIGZpZ3VyZSBvdXQgb25lDQo+IHNvbHV0aW9uIGluIGZ1dHVyZS4N Cj4gPg0KPiANCj4gSG1tLCBJIGFtIGFmcmFpZCBJIHN0aWxsIGRvbid0IHVuZGVyc3RhbmQgd2h5 IHRoYXQgcGluIGhhcyB0byBiZSBjb250cm9sbGVkIHZpYQ0KPiBHUElPIHN1YnN5c3RlbS4gSGVy ZSBhcmUgbXkgYXNzdW1wdGlvbnM6DQo+IA0KPiAxLiBXZSBjYW4gY29uZmlndXJlLCBzYXksIFBD SUUwJ3MgQ0xLUkVRIGFzDQo+IFNDX1BfUENJRV9DVFJMMF9DTEtSRVFfQl9IU0lPX1BDSUUwX0NM S1JFUV9CIG9uIGkuTVg4UU0sIHdoaWNoDQo+IHNob3VsZCBiZSBvcGVuIGRyYWluIGp1c3QgYnkg Q0xLUkVRJ3MgZGVmaW5pdGlvbiwgYW5kIHdlIGNhbiwgaWYgbmVlZCBiZSwNCj4gY29uZmlndXJl IGludGVybmFsIHB1bGwgdXAgaW4gdGhlIHNhbWUgcGlubXV4IGVudHJ5DQo+IA0KPiAyLiBJdCBp cyBwb3NzaWJsZSB0byBkcml2ZXIgdGhhdCBwaW4gb3Blbi9jbG9zZWQgdmlhIHNvbWUgYml0cyBp biByZWdpc3RlciBmaWxlLg0KPiBJTVg4TVFfR1BSX1BDSUVfQ0xLX1JFUV9PVkVSUklERSBpbiBj YXNlIG9mIGkuTVg4TVEsIG1heWJlDQo+IHNvbWV0aGluZyBlbHNlIGZvciBvdGhlciBpLk1YOCBT b0MNCj4gDQo+IGdpdmVuIHRob3NlIGFzc3VtcHRpb25zLCB3aHkgd291bGQgd2UgbmVlZCB0byBp bnRyb2R1Y2UgYSBuZXcgRFQgYmluZGluZw0KPiB0byBzcGVjaWZ5IGEgR1BJTyBhbmQgdGhlbiBj b250cm9sIGl0IHZpYSBncGlvX3NldF92YWx1ZSgpPw0KPiBBRkFJQ1QsIGFic2VuY2Ugb3IgcHJl c2VuY2Ugb2YgTDFTUyBzdXBwb3J0IHNob3VsZCBiZSBpcnJlbGV2YW50Lg0KPiBQZXJoYXBzIHNv bWUgb2YgbXkgYXNzdW1wdGlvbnMgaXMgd3Jvbmc/IE9yIG1heWJlIHlvdXIgdXNlLWNhc2UgZG9l cyB1c2UNCj4gYSBkZWRpY2F0ZWQgR1BJTyBwaW4gdGhhdCBjYW4ndCBiZSBjb25maWd1cmUgYXMg Q0xLUkVRX0IgdmlhIHBpbm11eD8NCltSaWNoYXJkIFpodV0gWW91J3JlIHJpZ2h0LiBUaGUgOE1R J3Mgc2ltaWxhciBvdmVycmlkZSBtZWNoYW5pc20gdG8gZm9yY2UgdGhlIHBpbiB0byBsb3cgb3Ig aGlnaCBieSByZWdpc3RlciBiaXQgb3BlcmF0aW9ucy4NCk90aGVyd2lzZSB1c2VkIHRoaXMgcGlu IGFzIEdQSU8uIFRodXMsIHRoZXNlIGNvZGVzIGNhbiBiZSByZW1vdmUuIFRoYW5rcyBmb3IgeW91 ciBjb21tZW50cyBoZXJlLiDwn5iKLg0KDQo+IA0KPiA+ID4NCj4gPiA+ID4gICAgICAgICBpbnQg ICAgICAgICAgICAgICAgICAgICByZXNldF9ncGlvOw0KPiA+ID4gPiAgICAgICAgIGJvb2wgICAg ICAgICAgICAgICAgICAgIGdwaW9fYWN0aXZlX2hpZ2g7DQo+ID4gPiA+ICAgICAgICAgc3RydWN0 IGNsayAgICAgICAgICAgICAgKnBjaWVfYnVzOw0KPiA+ID4gPiAgICAgICAgIHN0cnVjdCBjbGsg ICAgICAgICAgICAgICpwY2llX3BoeTsNCj4gPiA+ID4gKyAgICAgICBzdHJ1Y3QgY2xrICAgICAg ICAgICAgICAqcGNpZV9wZXI7DQo+ID4gPiA+ICAgICAgICAgc3RydWN0IGNsayAgICAgICAgICAg ICAgKnBjaWVfaW5ib3VuZF9heGk7DQo+ID4gPiA+ICAgICAgICAgc3RydWN0IGNsayAgICAgICAg ICAgICAgKnBjaWU7DQo+ID4gPiA+ICAgICAgICAgc3RydWN0IGNsayAgICAgICAgICAgICAgKnBj aWVfYXV4Ow0KPiA+ID4gPiBAQCAtNzcsNiArODMsOSBAQCBzdHJ1Y3QgaW14Nl9wY2llIHsNCj4g PiA+ID4gICAgICAgICB1MzIgICAgICAgICAgICAgICAgICAgICB0eF9kZWVtcGhfZ2VuMl82ZGI7 DQo+ID4gPiA+ICAgICAgICAgdTMyICAgICAgICAgICAgICAgICAgICAgdHhfc3dpbmdfZnVsbDsN Cj4gPiA+ID4gICAgICAgICB1MzIgICAgICAgICAgICAgICAgICAgICB0eF9zd2luZ19sb3c7DQo+ ID4gPiA+ICsgICAgICAgdTMyICAgICAgICAgICAgICAgICAgICAgaHNpb19jZmc7DQo+ID4gPiA+ ICsgICAgICAgdTMyICAgICAgICAgICAgICAgICAgICAgZXh0X29zYzsNCj4gPiA+ID4gKyAgICAg ICB1MzIgICAgICAgICAgICAgICAgICAgICBsb2NhbF9hZGRyOw0KPiA+ID4gPiAgICAgICAgIGlu dCAgICAgICAgICAgICAgICAgICAgIGxpbmtfZ2VuOw0KPiA+ID4gPiAgICAgICAgIHN0cnVjdCBy ZWd1bGF0b3IgICAgICAgICp2cGNpZTsNCj4gPiA+ID4gICAgICAgICB2b2lkIF9faW9tZW0gICAg ICAgICAgICAqcGh5X2Jhc2U7DQo+ID4gPiA+IEBAIC04NSw2ICs5NCw4IEBAIHN0cnVjdCBpbXg2 X3BjaWUgew0KPiA+ID4gPiAgICAgICAgIHN0cnVjdCBkZXZpY2UgICAgICAgICAgICpwZF9wY2ll Ow0KPiA+ID4gPiAgICAgICAgIC8qIHBvd2VyIGRvbWFpbiBmb3IgcGNpZSBwaHkgKi8NCj4gPiA+ ID4gICAgICAgICBzdHJ1Y3QgZGV2aWNlICAgICAgICAgICAqcGRfcGNpZV9waHk7DQo+ID4gPiA+ ICsgICAgICAgLyogcG93ZXIgZG9tYWluIGZvciBoc2lvIGdwaW8gdXNlZCBieSBwY2llICovDQo+ ID4gPiA+ICsgICAgICAgc3RydWN0IGRldmljZSAgICAgICAgICAgKnBkX2hzaW9fZ3BpbzsNCj4g PiA+ID4gICAgICAgICBjb25zdCBzdHJ1Y3QgaW14Nl9wY2llX2RydmRhdGEgKmRydmRhdGE7ICB9 Ow0KPiA+ID4gPg0KPiA+ID4gPiBAQCAtOTIsNiArMTAzLDcgQEAgc3RydWN0IGlteDZfcGNpZSB7 ICAjZGVmaW5lDQo+ID4gPiA+IFBIWV9QTExfTE9DS19XQUlUX01BWF9SRVRSSUVTICAyMDAwDQo+ ID4gPiA+ICAjZGVmaW5lIFBIWV9QTExfTE9DS19XQUlUX1VTTEVFUF9NSU4gICA1MA0KPiA+ID4g PiAgI2RlZmluZSBQSFlfUExMX0xPQ0tfV0FJVF9VU0xFRVBfTUFYICAgMjAwDQo+ID4gPiA+ICsj ZGVmaW5lIEwyX0VOVFJZX1dBSVRfTUFYX1JFVFJJRVMgICAgICAxMDAwMA0KPiA+ID4gPg0KPiA+ ID4gPiAgLyogUENJZSBSb290IENvbXBsZXggcmVnaXN0ZXJzIChtZW1vcnktbWFwcGVkKSAqLw0K PiA+ID4gPiAgI2RlZmluZSBQQ0lFX1JDX0lNWDZfTVNJX0NBUCAgICAgICAgICAgICAgICAgICAw eDUwDQo+ID4gPiA+IEBAIC0xNTcsNiArMTY5LDQzIEBAIHN0cnVjdCBpbXg2X3BjaWUgeyAgI2Rl ZmluZQ0KPiA+ID4gPiBQSFlfUlhfT1ZSRF9JTl9MT19SWF9EQVRBX0VOICgxIDw8IDUpICAjZGVm aW5lDQo+ID4gPiA+IFBIWV9SWF9PVlJEX0lOX0xPX1JYX1BMTF9FTiAoMSA8PCAzKQ0KPiA+ID4g Pg0KPiA+ID4gPiArLyogaU1YOCBIU0lPIHJlZ2lzdGVycyAqLw0KPiA+ID4gPiArI2RlZmluZSBJ TVg4UU1fQ1NSX1BIWVgyX09GRlNFVA0KPiA+ID4gMHgwMDAwMA0KPiA+ID4gPiArI2RlZmluZSBJ TVg4UU1fQ1NSX1BIWVgxX09GRlNFVA0KPiA+ID4gMHgxMDAwMA0KPiA+ID4gPiArI2RlZmluZSBJ TVg4UU1fQ1NSX1BIWVhfU1RUUzBfT0ZGU0VUICAgICAgICAgICAweDQNCj4gPiA+ID4gKyNkZWZp bmUgSU1YOFFNX0NTUl9QQ0lFQV9PRkZTRVQNCj4gPiA+IDB4MjAwMDANCj4gPiA+ID4gKyNkZWZp bmUgSU1YOFFNX0NTUl9QQ0lFQl9PRkZTRVQNCj4gPiA+IDB4MzAwMDANCj4gPiA+ID4gKyNkZWZp bmUgSU1YOFFNX0NTUl9QQ0lFX0NUUkwxX09GRlNFVCAgICAgICAgICAgMHg0DQo+ID4gPiA+ICsj ZGVmaW5lIElNWDhRTV9DU1JfUENJRV9DVFJMMl9PRkZTRVQgICAgICAgICAgIDB4OA0KPiA+ID4g PiArI2RlZmluZSBJTVg4UU1fQ1NSX1BDSUVfU1RUUzBfT0ZGU0VUICAgICAgICAgICAweEMNCj4g PiA+ID4gKyNkZWZpbmUgSU1YOFFNX0NTUl9NSVNDX09GRlNFVCAgICAgICAgICAgICAgICAgMHg1 MDAwMA0KPiA+ID4gPiArDQo+ID4gPiA+ICsjZGVmaW5lIElNWDhRTV9DVFJMX0xUU1NNX0VOQUJM RSAgICAgICAgICAgICAgIEJJVCg0KQ0KPiA+ID4gPiArI2RlZmluZSBJTVg4UU1fQ1RSTF9SRUFE WV9FTlRSX0wyMyAgICAgICAgICAgICBCSVQoNSkNCj4gPiA+ID4gKyNkZWZpbmUgSU1YOFFNX0NU UkxfUE1fWE1UX1RVUk5PRkYgICAgICAgICAgICAgQklUKDkpDQo+ID4gPiA+ICsjZGVmaW5lIElN WDhRTV9DVFJMX0JVVFRPTl9SU1RfTiAgICAgICAgICAgICAgIEJJVCgyMSkNCj4gPiA+ID4gKyNk ZWZpbmUgSU1YOFFNX0NUUkxfUEVSU1RfTiAgICAgICAgICAgICAgICAgICAgQklUKDIyKQ0KPiA+ ID4gPiArI2RlZmluZSBJTVg4UU1fQ1RSTF9QT1dFUl9VUF9SU1RfTiAgICAgICAgICAgICBCSVQo MjMpDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyNkZWZpbmUgSU1YOFFNX0NUUkxfU1RUUzBfUE1fTElO S1NUX0lOX0wyICAgICAgQklUKDEzKQ0KPiA+ID4gPiArI2RlZmluZSBJTVg4UU1fQ1RSTF9TVFRT MF9QTV9SRVFfQ09SRV9SU1QgICAgICBCSVQoMTkpDQo+ID4gPiA+ICsjZGVmaW5lIElNWDhRTV9T VFRTMF9MQU5FMF9UWF9QTExfTE9DSyAgICAgICAgIEJJVCg0KQ0KPiA+ID4gPiArI2RlZmluZSBJ TVg4UU1fU1RUUzBfTEFORTFfVFhfUExMX0xPQ0sgICAgICAgICBCSVQoMTIpDQo+ID4gPiA+ICsN Cj4gPiA+ID4gKyNkZWZpbmUgSU1YOFFNX1BDSUVfVFlQRV9NQVNLDQo+IEdFTk1BU0soMjcsDQo+ ID4gPiAyNCkNCj4gPiA+ID4gKw0KPiA+ID4gPiArI2RlZmluZSBJTVg4UU1fUEhZWDJfQ1RSTDBf QVBCX01BU0sNCj4gR0VOTUFTSygxLA0KPiA+ID4gMCkNCj4gPiA+ID4gKyNkZWZpbmUgSU1YOFFN X1BIWV9BUEJfUlNUTl8wICAgICAgICAgICAgICAgICAgQklUKDApDQo+ID4gPiA+ICsjZGVmaW5l IElNWDhRTV9QSFlfQVBCX1JTVE5fMSAgICAgICAgICAgICAgICAgIEJJVCgxKQ0KPiA+ID4gPiAr DQo+ID4gPiA+ICsjZGVmaW5lIElNWDhRTV9NSVNDX0lPQl9SWEVOQSAgICAgICAgICAgICAgICAg IEJJVCgwKQ0KPiA+ID4gPiArI2RlZmluZSBJTVg4UU1fTUlTQ19JT0JfVFhFTkEgICAgICAgICAg ICAgICAgICBCSVQoMSkNCj4gPiA+ID4gKyNkZWZpbmUgSU1YOFFNX0NTUl9NSVNDX0lPQl9BXzBf VFhPRSAgICAgICAgICAgQklUKDIpDQo+ID4gPiA+ICsjZGVmaW5lIElNWDhRTV9DU1JfTUlTQ19J T0JfQV8wX00xTTBfTUFTSw0KPiBHRU5NQVNLKDQsDQo+ID4gPiAzKQ0KPiA+ID4gPiArI2RlZmlu ZSBJTVg4UU1fQ1NSX01JU0NfSU9CX0FfMF9NMU0wXzIgICAgICAgICBCSVQoNCkNCj4gPiA+ID4g KyNkZWZpbmUgSU1YOFFNX01JU0NfUEhZWDFfRVBDU19TRUwgICAgICAgICAgICAgQklUKDEyKQ0K PiA+ID4gPiArI2RlZmluZSBJTVg4UU1fTUlTQ19QQ0lFX0FCX1NFTEVDVCAgICAgICAgICAgICBC SVQoMTMpDQo+ID4gPiA+ICsNCj4gPiA+ID4gIHN0YXRpYyBpbnQgcGNpZV9waHlfcG9sbF9hY2so c3RydWN0IGlteDZfcGNpZSAqaW14Nl9wY2llLCBpbnQNCj4gPiA+ID4gZXhwX3ZhbCkgIHsNCj4g PiA+ID4gICAgICAgICBzdHJ1Y3QgZHdfcGNpZSAqcGNpID0gaW14Nl9wY2llLT5wY2k7IEBAIC0z NzMsMTQgKzQyMiw2NQ0KPiA+ID4gPiBAQCBzdGF0aWMgaW50IGlteDZfcGNpZV9hdHRhY2hfcGQo c3RydWN0IGRldmljZSAqZGV2KQ0KPiA+ID4gPiAgICAgICAgICAgICAgICAgcmV0dXJuIFBUUl9F UlIobGluayk7DQo+ID4gPiA+ICAgICAgICAgfQ0KPiA+ID4gPg0KPiA+ID4gPiArICAgICAgIHN3 aXRjaCAoaW14Nl9wY2llLT5kcnZkYXRhLT52YXJpYW50KSB7DQo+ID4gPiA+ICsgICAgICAgY2Fz ZSBJTVg4UU06DQo+ID4gPiA+ICsgICAgICAgY2FzZSBJTVg4UVhQOg0KPiA+ID4gPiArICAgICAg ICAgICAgICAgaW14Nl9wY2llLT5wZF9oc2lvX2dwaW8gPQ0KPiA+ID4gZGV2X3BtX2RvbWFpbl9h dHRhY2hfYnlfbmFtZShkZXYsDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgImhzaW9fZ3BpbyIpOw0KPiA+ID4gPiArICAgICAgICAgICAgICAgaWYgKElTX0VSUihpbXg2 X3BjaWUtPnBkX2hzaW9fZ3BpbykpDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJl dHVybg0KPiBQVFJfRVJSKGlteDZfcGNpZS0+cGRfaHNpb19ncGlvKTsNCj4gPiA+ID4gKw0KPiA+ ID4gPiArICAgICAgICAgICAgICAgbGluayA9IGRldmljZV9saW5rX2FkZChkZXYsDQo+IGlteDZf cGNpZS0+cGRfaHNpb19ncGlvLA0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIERMX0ZMQUdfU1RBVEVMRVNTIHwNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBETF9GTEFHX1BNX1JVTlRJTUUgfA0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIERMX0ZMQUdfUlBNX0FDVElWRSk7DQo+ID4gPiA+ICsgICAgICAgICAgICAg ICBpZiAoIWxpbmspIHsNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZGV2X2Vycihk ZXYsICJGYWlsZWQgdG8gYWRkIGRldmljZV9saW5rIHRvDQo+ID4gPiA+ICsgZ3Bpbw0KPiA+ID4g cGQuXG4iKTsNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7 DQo+ID4gPiA+ICsgICAgICAgICAgICAgICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAgICAg ICAgICAgIGJyZWFrOw0KPiA+ID4gPiArICAgICAgIGRlZmF1bHQ6DQo+ID4gPiA+ICsgICAgICAg ICAgICAgICBicmVhazsNCj4gPiA+ID4gKyAgICAgICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gICAg ICAgICByZXR1cm4gMDsNCj4gPiA+ID4gIH0NCj4gPiA+ID4NCj4gPiA+ID4gIHN0YXRpYyB2b2lk IGlteDZfcGNpZV9hc3NlcnRfY29yZV9yZXNldChzdHJ1Y3QgaW14Nl9wY2llDQo+ID4gPiA+ICpp bXg2X3BjaWUpIHsNCj4gPiA+ID4gKyAgICAgICB1MzIgYWRkcjsNCj4gPiA+ID4gKyAgICAgICBp bnQgaTsNCj4gPiA+ID4gICAgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpbXg2X3BjaWUtPnBj aS0+ZGV2Ow0KPiA+ID4gPg0KPiA+ID4gPiAgICAgICAgIHN3aXRjaCAoaW14Nl9wY2llLT5kcnZk YXRhLT52YXJpYW50KSB7DQo+ID4gPiA+ICsgICAgICAgY2FzZSBJTVg4UVhQOg0KPiA+ID4gPiAr ICAgICAgICAgICAgICAgYWRkciA9IElNWDhRTV9DU1JfUENJRUJfT0ZGU0VUICsNCj4gPiA+ID4g KyBJTVg4UU1fQ1NSX1BDSUVfQ1RSTDJfT0ZGU0VUOw0KPiA+ID4NCj4gPiA+IFRoaXMgYW5kIHNp bWlsYXIgIklNWDhRTV9DU1JfUENJRUFfT0ZGU0VUICsgaSAqIFNaXzY0SyIgcGF0dGVybg0KPiA+ ID4ga2VlcHMgcG9wcGluZyB1cCBxdWl0ZSBmcmVxdWVudGx5IGluIHRoZSBjb2RlLiBJIHRoaW5r IGF0IHRoZSB2ZXJ5DQo+ID4gPiBsZWFzdCBpdCB3b3VsZCBiZSBnb29kIHRvIGNhbGN1bGF0ZSB0 aGlzIG9mZnNldCBpbiBwcm9iZSBhbmQgc3RvcmUNCj4gPiA+IGl0IGFzIGEgbWVtYmVyIG9mIHN0 cnVjdCBpbXg2X3BjaWUuIEhvd2V2ZXIgSSBkbyB3b25kZXIgaWYgdGhpcw0KPiA+ID4gc2hvdWxk IGFjdHVhbGx5IGJlIGhhbmRsZSBieSBlaXRoZXIgZGVjbGFyaW5nIGFuIGFkZGl0aW9uYWwgc3lz Y29uIHJlZ21hcA0KPiBvZiBhZGRpdGlvbmFsIHJlZy9yZWctbmFtZSBwcm9wZXJ0eS4NCj4gPiA+ DQo+ID4gW1JpY2hhcmQgWmh1XSBJTUhPLCBJIGp1c3QgcmVkdWNlIHNvbWUgbW9yZSBNQUNSTyBk ZWZpbml0aW9ucyBpbiB0aGUNCj4gY29kZXMuDQo+ID4gQWN0dWFsbHksIHRoZSAiSU1YOFFNX0NT Ul9QQ0lFQV9PRkZTRVQgKyBTWl82NEsiIHNob3VsZCBiZSB0aGUNCj4gSU1YOFFNX0NTUl9QQ0lF Ql9PRkZTRVQuDQo+ID4gSSBjYW4gYWRkIHNvbWUgbW9yZSBtYWNyby1kZWZpbml0aW9ucywgZm9y IGV4YW1wbGUgIg0KPiBJTVg4UU1fQ1NSX1BDSUVCX09GRlNFVCAiIHRvIHJlbW92ZSB0aGUgY2Fs Y3VsYXRpb25zIGxhdGVyLg0KPiA+IEhvdyBkbyB5b3UgdGhpbmsgYWJvdXQgdGhhdD8NCj4gPg0K PiANCj4gSXQncyB1bHRpbWF0ZWx5IHVwIHRvIHlvdS4gSSB3YXMganVzdCBwb2ludGluZyBvdXQg dGhhdCB0aGUgY29kZSBrZWVwcw0KPiByZS1jYWxjdWxhdGluZyB0aGUgc2FtZSB0aGluZyBhZ2Fp biBhbmQgYWdhaW4sIHNvIGl0IG1pZ2h0IGhhdmUgYmVuZWZpdGVkIGZyb20NCj4gY2FjaGluZyB0 aGF0IHZhbHVlLg0KW1JpY2hhcmQgWmh1XSBUaGFua3MsIHNvbWUgZXh0cmEgTUFDUk8tZGVmaW5p dGlvbnMgd291bGQgYmUgYWRkZWQgbGF0ZXIuDQo+IA0KPiA+ID4gPiArICAgICAgICAgICAgICAg cmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dwciwgYWRkciwNCj4gPiA+ID4g Kw0KPiBJTVg4UU1fQ1RSTF9CVVRUT05fUlNUX04sDQo+ID4gPiA+ICsNCj4gSU1YOFFNX0NUUkxf QlVUVE9OX1JTVF9OKTsNCj4gPiA+ID4gKyAgICAgICAgICAgICAgIHJlZ21hcF91cGRhdGVfYml0 cyhpbXg2X3BjaWUtPmlvbXV4Y19ncHIsIGFkZHIsDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgSU1YOFFNX0NUUkxfUEVSU1RfTiwNCj4gPiA+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBJTVg4UU1fQ1RSTF9QRVJTVF9OKTsNCj4gPiA+ID4gKyAgICAg ICAgICAgICAgIHJlZ21hcF91cGRhdGVfYml0cyhpbXg2X3BjaWUtPmlvbXV4Y19ncHIsIGFkZHIs DQo+ID4gPiA+ICsNCj4gPiA+IElNWDhRTV9DVFJMX1BPV0VSX1VQX1JTVF9OLA0KPiA+ID4gPiAr DQo+ID4gPiBJTVg4UU1fQ1RSTF9QT1dFUl9VUF9SU1RfTik7DQo+ID4gPiA+ICsgICAgICAgICAg ICAgICBicmVhazsNCj4gPiA+ID4gKyAgICAgICBjYXNlIElNWDhRTToNCj4gPiA+ID4gKyAgICAg ICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gaW14Nl9wY2llLT5jb250cm9sbGVyX2lkOyBpKysp IHsNCj4gPiA+DQo+ID4gPiBUaGlzIGxvb3AgaXMgYSBiaXQgc3VycHJpc2luZyB0byBtZS4gSXQn cyBoYXJkIHRvIHRlbGwgd2h5IHlvdSdkDQo+ID4gPiBpdGVyYXRlIGZyb20gMCB0byBjb250cm9s bGVyX2lkLiBJIHRoaW5rIGl0J2QgYmUgZ29vZCB0byBhZGQgYQ0KPiA+ID4gY29tbWVudCBleHBs YWluaW5nIHRoZSBsb2dpYyBiZWhpbmQgdGhpcyBjb2RlLg0KPiA+ID4NCj4gPiBbUmljaGFyZCBa aHVdIE9rYXksIGNvbW1lbnRzIHdvdWxkIGJlIGFkZGVkIGhlcmUuDQo+ID4gLyoNCj4gPiAgKiAg SW4gaS5NWDhRTSwgdHdvIGxhbmVzIFBIWSBhbmQgb25lIGxhbmUgUEhZIHNoYXJlIHRoZQ0KPiA+ ICAqICBzYW1lIGNhbGlicmF0aW9uIHNpZ25hbC4gQW5kIG9uZSBsYW5lIFBIWSB3b3VsZCB1c2UN Cj4gPiAgKiAgdGhlIGNhbGlicmF0aW9uIG91dHB1dCBmcm9tIHR3byBsYW5lcyBQSFkuIFNvIFBD SWVBDQo+ID4gICogIHJlbGF0ZWQgcmVzZXRzIGFyZSBjb25maWd1cmVkIGJlZm9yZSBjb25maWd1 cmF0aW5nIFBDSWVCLg0KPiA+ICAqLw0KPiANCj4gSXQgc291bmRzIGxpa2UgdGhpcyBjb2RlIHJl bGllcyBvbiB0aGUgZmFjdCB0aGF0IFBDSWVBIHdpbGwgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlDQo+ IFBDSWVCLiBJIGFtIG5vdCBzdXJlIHRoaXMgY2FuIGJlIGd1YXJhbnRlZWQgYnkgdGhpcyBkcml2 ZXIsIHNpbmNlIGl0IHN1cHBvcnRzDQo+IHByb2JlIGRlZmVycmFsIGFuZCBQQ0llQSdzIHByb2Jp bmcgY2FuIGJlIGRlbGF5ZWQgc28gdGhhdCAgUENJZUIncyB3b3VsZA0KPiBoYXBwZW4gZmlyc3Qu IEFtIEkgbWlzaW50ZXJwcmV0aW5nIHRoaXM/IElmIG5vdCBtYXliZSB0aGlzIHNob3VsZCBiZSBt b3ZlZCBvdXQNCj4gdG8gUEhZIGRyaXZlciBhcyB3ZWxsPw0KPiANCltSaWNoYXJkIFpodV0gWWVz LCBpdCBpcy4gVGhlc2UgSFNJTyBjb25maWd1cmF0aW9uIGNvZGVzIHNob3VsZCBiZSBtb3ZlZCB0 byBzdGFuZGFsb25lIFBIWSBkcml2ZXIgcG9pbnRlZCBieSBMdWNhcyBpbiBhbm90aGVyIGVtYWls Lg0KPiA+ID4NCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgYWRkciA9IElNWDhRTV9D U1JfUENJRUFfT0ZGU0VUICsgaSAqDQo+ID4gPiBTWl82NEs7DQo+ID4gPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgIGFkZHIgKz0NCj4gSU1YOFFNX0NTUl9QQ0lFX0NUUkwyX09GRlNFVDsNCj4g PiA+ID4gKw0KPiByZWdtYXBfdXBkYXRlX2JpdHMoaW14Nl9wY2llLT5pb211eGNfZ3ByLA0KPiA+ ID4gYWRkciwNCj4gPiA+ID4gKw0KPiA+ID4gSU1YOFFNX0NUUkxfQlVUVE9OX1JTVF9OLA0KPiA+ ID4gPiArDQo+ID4gPiBJTVg4UU1fQ1RSTF9CVVRUT05fUlNUX04pOw0KPiA+ID4gPiArDQo+IHJl Z21hcF91cGRhdGVfYml0cyhpbXg2X3BjaWUtPmlvbXV4Y19ncHIsDQo+ID4gPiBhZGRyLA0KPiA+ ID4gPiArDQo+ID4gPiBJTVg4UU1fQ1RSTF9QRVJTVF9OLA0KPiA+ID4gPiArDQo+ID4gPiBJTVg4 UU1fQ1RSTF9QRVJTVF9OKTsNCj4gPiA+ID4gKw0KPiByZWdtYXBfdXBkYXRlX2JpdHMoaW14Nl9w Y2llLT5pb211eGNfZ3ByLA0KPiA+ID4gYWRkciwNCj4gPiA+ID4gKw0KPiA+ID4gSU1YOFFNX0NU UkxfUE9XRVJfVVBfUlNUX04sDQo+ID4gPiA+ICsNCj4gPiA+IElNWDhRTV9DVFJMX1BPV0VSX1VQ X1JTVF9OKTsNCj4gPiA+ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiA+ID4gKyAgICAgICAgICAg ICAgIGJyZWFrOw0KPiA+ID4gPiAgICAgICAgIGNhc2UgSU1YN0Q6DQo+ID4gPiA+ICAgICAgICAg Y2FzZSBJTVg4TVE6DQo+ID4gPiA+ICAgICAgICAgICAgICAgICByZXNldF9jb250cm9sX2Fzc2Vy dChpbXg2X3BjaWUtPnBjaWVwaHlfcmVzZXQpOw0KPiA+ID4gPiBAQCAtNDc3LDYgKzU3NywyMSBA QCBzdGF0aWMgaW50IGlteDZfcGNpZV9lbmFibGVfcmVmX2NsayhzdHJ1Y3QNCj4gPiA+IGlteDZf cGNpZSAqaW14Nl9wY2llKQ0KPiA+ID4gPg0KPiA+ID4gSU1YOE1RX0dQUl9QQ0lFX0NMS19SRVFf T1ZFUlJJREVfRU4sDQo+ID4gPiA+DQo+ID4gPiBJTVg4TVFfR1BSX1BDSUVfQ0xLX1JFUV9PVkVS UklERV9FTik7DQo+ID4gPiA+ICAgICAgICAgICAgICAgICBicmVhazsNCj4gPiA+ID4gKyAgICAg ICBjYXNlIElNWDhRWFA6DQo+ID4gPiA+ICsgICAgICAgY2FzZSBJTVg4UU06DQo+ID4gPiA+ICsg ICAgICAgICAgICAgICByZXQgPQ0KPiA+ID4gY2xrX3ByZXBhcmVfZW5hYmxlKGlteDZfcGNpZS0+ cGNpZV9pbmJvdW5kX2F4aSk7DQo+ID4gPiA+ICsgICAgICAgICAgICAgICBpZiAocmV0KSB7DQo+ ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoZGV2LCAidW5hYmxlIHRvIGVu YWJsZSBwY2llX2F4aQ0KPiA+ID4gY2xvY2tcbiIpOw0KPiA+ID4gPiArICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsNCj4gPiA+ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiA+ID4gKyAgICAg ICAgICAgICAgIHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShpbXg2X3BjaWUtPnBjaWVfcGVyKTsN Cj4gPiA+ID4gKyAgICAgICAgICAgICAgIGlmIChyZXQpIHsNCj4gPiA+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgZGV2X2VycihkZXYsICJ1bmFibGUgdG8gZW5hYmxlIHBjaWVfcGVyDQo+ID4g PiBjbG9ja1xuIik7DQo+ID4gPiA+ICsNCj4gPiA+IGNsa19kaXNhYmxlX3VucHJlcGFyZShpbXg2 X3BjaWUtPnBjaWVfaW5ib3VuZF9heGkpOw0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsNCj4gPiA+ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiAr ICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gPiA+ICAgICAgICAgfQ0KPiA+ID4gPg0KPiA+ID4g PiAgICAgICAgIHJldHVybiByZXQ7DQo+ID4gPiA+IEBAIC01MDEsNiArNjE2LDYzIEBAIHN0YXRp YyB2b2lkDQo+ID4gPiBpbXg3ZF9wY2llX3dhaXRfZm9yX3BoeV9wbGxfbG9jayhzdHJ1Y3QgaW14 Nl9wY2llICppbXg2X3BjaWUpDQo+ID4gPiA+ICAgICAgICAgZGV2X2VycihkZXYsICJQQ0llIFBM TCBsb2NrIHRpbWVvdXRcbiIpOyAgfQ0KPiA+ID4gPg0KPiA+ID4gPiArc3RhdGljIGludCBpbXg4 X2hzaW9fcGNpZV93YWl0X2Zvcl9waHlfcGxsX2xvY2soc3RydWN0IGlteDZfcGNpZQ0KPiA+ID4g PiArKmlteDZfcGNpZSkgew0KPiA+ID4gPiArICAgICAgIHUzMiByZXRyaWVzLCBhZGRyLCB2YWws IGxvY2sgPSAwOw0KPiA+ID4gPiArICAgICAgIGludCByZXQ7DQo+ID4gPiA+ICsgICAgICAgc3Ry dWN0IGR3X3BjaWUgKnBjaSA9IGlteDZfcGNpZS0+cGNpOw0KPiA+ID4gPiArICAgICAgIHN0cnVj dCBkZXZpY2UgKmRldiA9IHBjaS0+ZGV2Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgICAgYWRk ciA9IElNWDhRTV9DU1JfUENJRUFfT0ZGU0VUICsNCj4gaW14Nl9wY2llLT5jb250cm9sbGVyX2lk DQo+ID4gPiAqIFNaXzY0SzsNCj4gPiA+ID4gKyAgICAgICBhZGRyICs9IElNWDhRTV9DU1JfUENJ RV9TVFRTMF9PRkZTRVQ7DQo+ID4gPiA+ICsgICAgICAgZm9yIChyZXRyaWVzID0gMDsgcmV0cmll cyA8IFBIWV9QTExfTE9DS19XQUlUX01BWF9SRVRSSUVTOw0KPiA+ID4gcmV0cmllcysrKSB7DQo+ ID4gPiA+ICsgICAgICAgICAgICAgICByZWdtYXBfcmVhZChpbXg2X3BjaWUtPmlvbXV4Y19ncHIs IGFkZHIsICZ2YWwpOw0KPiA+ID4gPiArICAgICAgICAgICAgICAgaWYgKCh2YWwgJg0KPiBJTVg4 UU1fQ1RSTF9TVFRTMF9QTV9SRVFfQ09SRV9SU1QpDQo+ID4gPiA9PSAwKQ0KPiA+ID4gPiArICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gPiA+ID4gKyAgICAgICAgICAgICAgIHVkZWxh eSgxKTsNCj4gPiA+ID4gKyAgICAgICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgICAgICBpZiAo KHZhbCAmIElNWDhRTV9DVFJMX1NUVFMwX1BNX1JFUV9DT1JFX1JTVCkgIT0gMCkgew0KPiA+ID4g PiArICAgICAgICAgICAgICAgZGV2X2VycihkZXYsICJFUlJPUjogUE1fUkVRX0NPUkVfUlNUIGlz IHN0aWxsDQo+ID4gPiBzZXQuXG4iKTsNCj4gPiA+ID4gKyAgICAgICAgICAgICAgIHJldHVybiAt RU5PREVWOw0KPiA+ID4gPiArICAgICAgIH0NCj4gPiA+ID4gKw0KPiA+ID4NCj4gPiA+IFlvdSBj YW4gcmVhbGx5IGN1dCBkb3duIG9uIGJvaWxlcnBsYXRlIGhlcmUgYnkgdXNpbmcNCj4gPiA+IHJl Z21hcF9yZWFkX3BvbGxfdGltZW91dCgpDQo+ID4gPg0KPiA+IFtSaWNoYXJkIFpodV0gT2theSwg d291bGQgY2hhbmdlIGl0IGxhdGVyLg0KPiA+DQo+ID4gPiA+ICsgICAgICAgYWRkciA9IElNWDhR TV9DU1JfUEhZWDJfT0ZGU0VUICsNCj4gaW14Nl9wY2llLT5jb250cm9sbGVyX2lkDQo+ID4gPiAq IFNaXzY0SzsNCj4gPiA+ID4gKyAgICAgICBhZGRyICs9IElNWDhRTV9DU1JfUEhZWF9TVFRTMF9P RkZTRVQ7DQo+ID4gPiA+ICsgICAgICAgZm9yIChyZXRyaWVzID0gMDsgcmV0cmllcyA8IFBIWV9Q TExfTE9DS19XQUlUX01BWF9SRVRSSUVTOw0KPiA+ID4gcmV0cmllcysrKSB7DQo+ID4gPiA+ICsg ICAgICAgICAgICAgICByZWdtYXBfcmVhZChpbXg2X3BjaWUtPmlvbXV4Y19ncHIsIGFkZHIsICZ2 YWwpOw0KPiA+ID4gPiArICAgICAgICAgICAgICAgaWYgKGlteDZfcGNpZS0+aHNpb19jZmcgPT0g Mikgew0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW14Nl9wY2llLT5jb250 cm9sbGVyX2lkID09IDApDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bG9jayA9DQo+ID4gPiBJTVg4UU1fU1RUUzBfTEFORTBfVFhfUExMX0xPQ0s7DQo+ID4gPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBsb2NrID0NCj4gPiA+IElNWDhRTV9TVFRTMF9MQU5FMV9UWF9QTExfTE9DSzsN Cj4gPiA+ID4gKyAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW14Nl9wY2llLT5oc2lvX2NmZyA9 PSAzKSB7DQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGxvY2sgPQ0KPiA+ID4gSU1Y OFFNX1NUVFMwX0xBTkUwX1RYX1BMTF9MT0NLOw0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAg ICAgICBpZiAoaW14Nl9wY2llLT5jb250cm9sbGVyX2lkID09IDApDQo+ID4gPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbG9jayB8PQ0KPiA+ID4gSU1YOFFNX1NUVFMwX0xBTkUx X1RYX1BMTF9MT0NLOw0KPiA+ID4gPiArICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbXg2X3Bj aWUtPmhzaW9fY2ZnID09IDEpIHsNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgbG9j ayA9DQo+ID4gPiBJTVg4UU1fU1RUUzBfTEFORTBfVFhfUExMX0xPQ0s7DQo+ID4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgIGxvY2sgfD0NCj4gPiA+IElNWDhRTV9TVFRTMF9MQU5FMV9UWF9Q TExfTE9DSzsNCj4gPiA+ID4gKyAgICAgICAgICAgICAgIH0gZWxzZSB7DQo+ID4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgIGRldl9lcnIoZGV2LCAiRVJST1I6IGlsbGVnYWwgaHNpb19jZmcN Cj4gPiA+IHZhbHVlLlxuIik7DQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biAtRUlOVkFMOw0KPiA+ID4gPiArICAgICAgICAgICAgICAgfQ0KPiA+ID4gPiArICAgICAgICAg ICAgICAgdmFsICY9IGxvY2s7DQo+ID4gPiA+ICsgICAgICAgICAgICAgICBpZiAodmFsID09IGxv Y2spDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ID4gPiArICAg ICAgICAgICAgICAgdWRlbGF5KDEwKTsNCj4gPiA+ID4gKyAgICAgICB9DQo+ID4gPiA+ICsNCj4g PiA+ID4gKyAgICAgICBpZiAocmV0cmllcyA+PSBQSFlfUExMX0xPQ0tfV0FJVF9NQVhfUkVUUklF Uykgew0KPiA+ID4gPiArICAgICAgICAgICAgICAgZGV2X2luZm8oZGV2LCAicGNpZSBwaHkgcGxs IGNhbid0IGJlIGxvY2tlZC5cbiIpOw0KPiA+ID4gPiArICAgICAgICAgICAgICAgcmV0ID0gLUVO T0RFVjsNCj4gPiA+ID4gKyAgICAgICB9IGVsc2Ugew0KPiA+ID4gPiArICAgICAgICAgICAgICAg ZGV2X2luZm8oZGV2LCAicGNpZSBwaHkgcGxsIGlzIGxvY2tlZC5cbiIpOw0KPiA+ID4gPiArICAg ICAgIH0NCj4gPiA+ID4gKw0KPiA+ID4NCj4gPiA+IERpdHRvLg0KPiA+IFtSaWNoYXJkIFpodV0g R290IHRoYXQuIFRoYW5rcy4NCj4gPiA+DQo+ID4gPiA+ICsgICAgICAgcmV0dXJuIHJldDsNCj4g PiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiAgc3RhdGljIHZvaWQgaW14Nl9wY2llX2RlYXNz ZXJ0X2NvcmVfcmVzZXQoc3RydWN0IGlteDZfcGNpZQ0KPiA+ID4gPiAqaW14Nl9wY2llKSAgew0K PiA+ID4gPiAgICAgICAgIHN0cnVjdCBkd19wY2llICpwY2kgPSBpbXg2X3BjaWUtPnBjaTsgQEAg LTU1Myw2ICs3MjUsMTENCj4gQEANCj4gPiA+ID4gc3RhdGljIHZvaWQgaW14Nl9wY2llX2RlYXNz ZXJ0X2NvcmVfcmVzZXQoc3RydWN0IGlteDZfcGNpZQ0KPiAqaW14Nl9wY2llKQ0KPiA+ID4gPiAg ICAgICAgIH0NCj4gPiA+ID4NCj4gPiA+ID4gICAgICAgICBzd2l0Y2ggKGlteDZfcGNpZS0+ZHJ2 ZGF0YS0+dmFyaWFudCkgew0KPiA+ID4gPiArICAgICAgIGNhc2UgSU1YOFFYUDoNCj4gPiA+ID4g KyAgICAgICBjYXNlIElNWDhRTToNCj4gPiA+ID4gKyAgICAgICAgICAgICAgIC8qIHdhaXQgZm9y IHBoeSBwbGwgbG9jayBmaXJzdGx5LiAqLw0KPiA+ID4gPiArICAgICAgICAgICAgICAgaW14OF9o c2lvX3BjaWVfd2FpdF9mb3JfcGh5X3BsbF9sb2NrKGlteDZfcGNpZSk7DQo+ID4gPiA+ICsgICAg ICAgICAgICAgICBicmVhazsNCj4gPiA+ID4gICAgICAgICBjYXNlIElNWDhNUToNCj4gPiA+ID4g ICAgICAgICAgICAgICAgIHJlc2V0X2NvbnRyb2xfZGVhc3NlcnQoaW14Nl9wY2llLT5wY2llcGh5 X3Jlc2V0KTsNCj4gPiA+ID4gICAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ID4gPiBAQCAtNjEz LDI1ICs3OTAsMTE0IEBAIHN0YXRpYyB2b2lkDQo+ID4gPiA+IGlteDZfcGNpZV9kZWFzc2VydF9j b3JlX3Jlc2V0KHN0cnVjdCBpbXg2X3BjaWUgKmlteDZfcGNpZSkNCj4gPiA+ID4NCj4gPiA+ID4g IHN0YXRpYyB2b2lkIGlteDZfcGNpZV9jb25maWd1cmVfdHlwZShzdHJ1Y3QgaW14Nl9wY2llICpp bXg2X3BjaWUpICB7DQo+ID4gPiA+IC0gICAgICAgdW5zaWduZWQgaW50IG1hc2ssIHZhbDsNCj4g PiA+ID4gLQ0KPiA+ID4gPiAtICAgICAgIGlmIChpbXg2X3BjaWUtPmRydmRhdGEtPnZhcmlhbnQg PT0gSU1YOE1RICYmDQo+ID4gPiA+ICsgICAgICAgdW5zaWduZWQgaW50IG9mZnNldCwgbWFzaywg dmFsOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgICAgaWYgKGlteDZfcGNpZS0+ZHJ2ZGF0YS0+ dmFyaWFudCA9PSBJTVg4UU0gfHwNCj4gPiA+ID4gKyAgICAgICAgICAgaW14Nl9wY2llLT5kcnZk YXRhLT52YXJpYW50ID09IElNWDhRWFApIHsNCj4gPiA+DQo+ID4gPiBTaW5jZSB0aGVyZSdzIG5v dyBtb3JlIHRoYW4gdHdvIHBvc3NpYmlsaXRpZXMsIGl0J2QgcHJvYmFibHkgbWFrZQ0KPiA+ID4g c2Vuc2UgdG8gY29udmVydCB0aGlzIGNvZGUgdG8gdXNlIHN3aXRjaCBzdGF0ZW1lbnQuDQo+ID4g W1JpY2hhcmQgWmh1XSBPa2F5LCB3b3VsZCB1c2Ugc3dpdGNoIHN0YXRlbWVudCBsYXRlci4NCj4g Pg0KPiA+ID4NCj4gPiA+ID4gKyAgICAgICAgICAgICAgIG9mZnNldCA9IElNWDhRTV9DU1JfUENJ RUFfT0ZGU0VUICsNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgaW14Nl9wY2llLT5j b250cm9sbGVyX2lkICogU1pfNjRLOw0KPiA+ID4gPiArICAgICAgICAgICAgICAgbWFzayAgID0g SU1YOFFNX1BDSUVfVFlQRV9NQVNLOw0KPiA+ID4gPiArICAgICAgICAgICAgICAgdmFsICAgID0g RklFTERfUFJFUChJTVg4UU1fUENJRV9UWVBFX01BU0ssDQo+ID4gPiA+ICsNCj4gUENJX0VYUF9U WVBFX1JPT1RfUE9SVCk7DQo+ID4gPiA+ICsgICAgICAgfSBlbHNlIGlmIChpbXg2X3BjaWUtPmRy dmRhdGEtPnZhcmlhbnQgPT0gSU1YOE1RICYmDQo+ID4gPiA+ICAgICAgICAgICAgIGlteDZfcGNp ZS0+Y29udHJvbGxlcl9pZCA9PSAxKSB7DQo+ID4gPiA+ICsgICAgICAgICAgICAgICBvZmZzZXQg PSBJT01VWENfR1BSMTI7DQo+ID4gPiA+ICAgICAgICAgICAgICAgICBtYXNrICAgPQ0KPiA+ID4g SU1YOE1RX0dQUjEyX1BDSUUyX0NUUkxfREVWSUNFX1RZUEU7DQo+ID4gPiA+ICAgICAgICAgICAg ICAgICB2YWwgICAgPQ0KPiA+ID4gRklFTERfUFJFUChJTVg4TVFfR1BSMTJfUENJRTJfQ1RSTF9E RVZJQ0VfVFlQRSwNCj4gPiA+ID4NCj4gUENJX0VYUF9UWVBFX1JPT1RfUE9SVCk7DQo+ID4gPiA+ ICAgICAgICAgfSBlbHNlIHsNCj4gPiA+ID4gKyAgICAgICAgICAgICAgIG9mZnNldCA9IElPTVVY Q19HUFIxMjsNCj4gPiA+ID4gICAgICAgICAgICAgICAgIG1hc2sgPSBJTVg2UV9HUFIxMl9ERVZJ Q0VfVFlQRTsNCj4gPiA+ID4gICAgICAgICAgICAgICAgIHZhbCAgPSBGSUVMRF9QUkVQKElNWDZR X0dQUjEyX0RFVklDRV9UWVBFLA0KPiA+ID4gPg0KPiBQQ0lfRVhQX1RZUEVfUk9PVF9QT1JUKTsN Cj4gPiA+ID4gICAgICAgICB9DQo+ID4gPiA+DQo+ID4gPiA+IC0gICAgICAgcmVnbWFwX3VwZGF0 ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dwciwNCj4gSU9NVVhDX0dQUjEyLA0KPiA+ID4gbWFz aywgdmFsKTsNCj4gPiA+ID4gKyAgICAgICByZWdtYXBfdXBkYXRlX2JpdHMoaW14Nl9wY2llLT5p b211eGNfZ3ByLCBvZmZzZXQsIG1hc2ssDQo+ID4gPiA+ICsgdmFsKTsNCj4gPiA+ID4gIH0NCj4g PiA+ID4NCj4gPiA+ID4gIHN0YXRpYyB2b2lkIGlteDZfcGNpZV9pbml0X3BoeShzdHJ1Y3QgaW14 Nl9wY2llICppbXg2X3BjaWUpICB7DQo+ID4gPiA+ICAgICAgICAgc3dpdGNoIChpbXg2X3BjaWUt PmRydmRhdGEtPnZhcmlhbnQpIHsNCj4gPiA+ID4gKyAgICAgICBjYXNlIElNWDhRWFA6DQo+ID4g PiA+ICsgICAgICAgY2FzZSBJTVg4UU06DQo+ID4gPiA+ICsgICAgICAgICAgICAgICBpZiAoaW14 Nl9wY2llLT5oc2lvX2NmZyA9PSAxKSB7DQo+ID4gPiA+ICsNCj4gcmVnbWFwX3VwZGF0ZV9iaXRz KGlteDZfcGNpZS0+aW9tdXhjX2dwciwNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBJTVg4UU1fQ1NSX1BIWVgyX09GRlNFVCwNCj4gPiA+ID4gKw0KPiA+ID4gSU1YOFFN X1BIWVgyX0NUUkwwX0FQQl9NQVNLLA0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIElNWDhRTV9QSFlfQVBCX1JTVE5fMCB8DQo+ID4gPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgSU1YOFFNX1BIWV9BUEJfUlNUTl8xKTsNCj4gPiA+ID4gKw0KPiA+ID4g PiArDQo+IHJlZ21hcF91cGRhdGVfYml0cyhpbXg2X3BjaWUtPmlvbXV4Y19ncHIsDQo+ID4gPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1YOFFNX0NTUl9NSVNDX09GRlNFVCwN Cj4gPiA+ID4gKw0KPiBJTVg4UU1fTUlTQ19QSFlYMV9FUENTX1NFTCwNCj4gPiA+ID4gKw0KPiBJ TVg4UU1fTUlTQ19QSFlYMV9FUENTX1NFTCk7DQo+ID4gPiA+ICsNCj4gcmVnbWFwX3VwZGF0ZV9i aXRzKGlteDZfcGNpZS0+aW9tdXhjX2dwciwNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBJTVg4UU1fQ1NSX01JU0NfT0ZGU0VULA0KPiA+ID4gPiArDQo+IElNWDhRTV9N SVNDX1BDSUVfQUJfU0VMRUNULA0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDApOw0KPiA+ID4gPiArICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbXg2X3BjaWUtPmhz aW9fY2ZnID09IDIpIHsNCj4gPiA+ID4gKw0KPiByZWdtYXBfdXBkYXRlX2JpdHMoaW14Nl9wY2ll LT5pb211eGNfZ3ByLA0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElN WDhRTV9DU1JfUEhZWDJfT0ZGU0VULA0KPiA+ID4gPiArDQo+ID4gPiBJTVg4UU1fUEhZWDJfQ1RS TDBfQVBCX01BU0ssDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1Y OFFNX1BIWV9BUEJfUlNUTl8wIHwNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBJTVg4UU1fUEhZX0FQQl9SU1ROXzEpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsNCj4gcmVn bWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dwciwNCj4gPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBJTVg4UU1fQ1NSX01JU0NfT0ZGU0VULA0KPiA+ID4gPiAr DQo+IElNWDhRTV9NSVNDX1BIWVgxX0VQQ1NfU0VMLA0KPiA+ID4gPiArDQo+IElNWDhRTV9NSVND X1BIWVgxX0VQQ1NfU0VMKTsNCj4gPiA+ID4gKw0KPiByZWdtYXBfdXBkYXRlX2JpdHMoaW14Nl9w Y2llLT5pb211eGNfZ3ByLA0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IElNWDhRTV9DU1JfTUlTQ19PRkZTRVQsDQo+ID4gPiA+ICsNCj4gSU1YOFFNX01JU0NfUENJRV9B Ql9TRUxFQ1QsDQo+ID4gPiA+ICsNCj4gSU1YOFFNX01JU0NfUENJRV9BQl9TRUxFQ1QpOw0KPiA+ ID4gPiArICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbXg2X3BjaWUtPmhzaW9fY2ZnID09IDMp IHsNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlteDZfcGNpZS0+Y29udHJv bGxlcl9pZCkNCj4gPiA+ID4gKw0KPiA+ID4gcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+ aW9tdXhjX2dwciwNCj4gPiA+ID4gKw0KPiA+ID4gSU1YOFFNX0NTUl9QSFlYMV9PRkZTRVQsDQo+ ID4gPiA+ICsNCj4gPiA+IElNWDhRTV9QSFlfQVBCX1JTVE5fMCwNCj4gPiA+ID4gKw0KPiA+ID4g SU1YOFFNX1BIWV9BUEJfUlNUTl8wKTsNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ZWxzZQ0KPiA+ID4gPiArDQo+ID4gPiByZWdtYXBfdXBkYXRlX2JpdHMoaW14Nl9wY2llLT5pb211 eGNfZ3ByLA0KPiA+ID4gPiArDQo+ID4gPiBJTVg4UU1fQ1NSX1BIWVgyX09GRlNFVCwNCj4gPiA+ ID4gKw0KPiA+ID4gSU1YOFFNX1BIWVgyX0NUUkwwX0FQQl9NQVNLLA0KPiA+ID4gPiArDQo+ID4g PiBJTVg4UU1fUEhZX0FQQl9SU1ROXzAgfA0KPiA+ID4gPiArDQo+ID4gPiBJTVg4UU1fUEhZX0FQ Ql9SU1ROXzEpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsNCj4gcmVnbWFwX3VwZGF0ZV9iaXRzKGlt eDZfcGNpZS0+aW9tdXhjX2dwciwNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBJTVg4UU1fQ1NSX01JU0NfT0ZGU0VULA0KPiA+ID4gPiArDQo+IElNWDhRTV9NSVNDX1BI WVgxX0VQQ1NfU0VMLA0KPiA+ID4gMCk7DQo+ID4gPiA+ICsNCj4gcmVnbWFwX3VwZGF0ZV9iaXRz KGlteDZfcGNpZS0+aW9tdXhjX2dwciwNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBJTVg4UU1fQ1NSX01JU0NfT0ZGU0VULA0KPiA+ID4gPiArDQo+IElNWDhRTV9NSVND X1BDSUVfQUJfU0VMRUNULA0KPiA+ID4gPiArDQo+IElNWDhRTV9NSVNDX1BDSUVfQUJfU0VMRUNU KTsNCj4gPiA+ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiA+ID4gKw0KPiA+ID4NCj4gPiA+IFRo aXMgZG9lc24ndCBsb29rIGNvbnRyb2xsZXIgaW5kZXBlbmRlbnQvbG9jYWwuIFdoYXQgd291bGQg aGFwcGVuIGlmDQo+ID4gPiBjb250cm9sbGVyIDAgc3BlY2lmaWVzIGhzaW9fY2ZnID09IDIgYW5k IGNvbnRyb2xsZXIgMSBzcGVjaWZpZXMgaHNpb19jZmcgPT0gMT8NCj4gPiA+DQo+ID4gW1JpY2hh cmQgWmh1XVllcywgaXQgaXMuIFRoZXJlIGFyZSB1c2FnZSBkZXBlbmRlbmNlcyBiZXR3ZWVuIFBD SWVBL1BDSWVCDQo+IGFuZCBTQVRBIGluIEhTSU8gc3Vic3lzdGVtLg0KPiA+IEJUVywgSXQncyBp bXBvc3NpYmxlIGZvciBjb250cm9sbGVyIDEgdG8gc3BlY2lmeSB0aGUgaHNpb19jZmcgdG8gIjEi LCB3aGVuDQo+IGNvbnRyb2xsZXIgMCBzcGVjaWZpZXMgaHNpb19jZmc9PTIuDQo+ID4gVGhlcmUg YXJlIHRocmVlIHVzYWdlIGNhc2VzIG9mIHRoZSBIU0lPLg0KPiA+IEhzaW9fY2ZnICAgIHBjaWVh ICAgIHBjaWViICAgIHNhdGENCj4gPiAxICAgICAgICAgIDJsYW5lcyAgIE5vICAgICAgRW5hYmxl ZA0KPiA+IDIgICAgICAgICAgMWxhbmUgICAgMWxhbmUgICAgRW5hYmxlZA0KPiA+IDMgICAgICAg ICAgMmxhbmVzICAgMWxhbmUgICAgTm8NCj4gPiBTbywgdGhlIHBvc3NpYmxlIGhzaW9fY2ZnIHZh bHVlcyBmb3IgUENJZUIgaXMgMiBvciAzLg0KPiANCj4gSWYgSSB1bmRlcnN0YW5kIHlvdSBjb3Jy ZWN0bHksIEkgdGhpbmsgd2hhdCB5b3UgbWVhbiBieSAiaW1wb3NzaWJsZSINCj4gaXMgdGhhdCBp biBvcmRlciB0aGluZ3MgdG8gd29yayBjb3JyZWN0bHkgd2hlbiBmaXJzdCBjb250cm9sbGVyIGlz IGNvbmZpZ3VyZWQgYXMNCj4gaHNpb19jZmcgPT0gMSwgc2Vjb25kIGNvbnRvbGxlciBfaGFzXyB0 byBiZSBzcGVjaWZpZWQgd2l0aCBoc2lvX2NmZyAhPSAxLg0KPiBIb3dldmVyLCB3aGF0IEkgYW0g dHJ5aW5nIHRvIHBvaW50IG91dCBpcyB0aGF0IGl0IGlzIGFuIGltcGxpY2l0IGRlcGVuZGVuY3kN Cj4gYmV0d2VlbiB0aGUgdHdvIGNvbnRyb2xsZXJzIGFuZCBBRkFJQ1QgdGhlcmUncyBubyBlbmZv cmNlbWVudCBvZiBpdA0KPiBwcmV2ZW50aW5nIG1lL3VzZXIgZnJvbSBjcmVhdGluZyBhIERUIGZp bGUgd2hlcmUgaHNpb19jZmcgPSA8MT4gZm9yIGJvdGgNCj4gY29udHJvbGxlcnMuIE1vdmluZyB0 aGlzIGNvbmZpZ3VyYXRpb24gaW50byBhIHNlcGFyYXRlIFBIWSBkcml2ZXIgc2hvdWxkIHNvbHZl DQo+IHRoaXMsIGhvd2V2ZXIuDQo+IA0KW1JpY2hhcmQgWmh1XSBZZXMgaXQgaXMuIFlvdSdyZSBj b3JyZWN0LiBUaGVyZSBpcyBhbiBpbXBsaWNpdCBkZXBlbmRlbmN5IGJldHdlZW4gdGhlIHVzYWdl cyBvZiB0aGUgUENJZUEvQiBhbmQgU0FUQS4NCiBSZWdhcmRpbmcgdG8gTHVjYXMnIGNvbW1lbnRz LCBhbGwgdGhlIEhTSU8gcmVsYXRlZCBjb2RlcyBzaG91bGQgYmUgbW92ZWQgdG8gc3RhbmRhbG9u ZSBQSFkgZHJpdmVyLg0KDQo+ID4NCj4gPiA+ID4gKyAgICAgICAgICAgICAgIGlmIChpbXg2X3Bj aWUtPmV4dF9vc2MpIHsNCj4gPiA+ID4gKw0KPiByZWdtYXBfdXBkYXRlX2JpdHMoaW14Nl9wY2ll LT5pb211eGNfZ3ByLA0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElN WDhRTV9DU1JfTUlTQ19PRkZTRVQsDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgSU1YOFFNX01JU0NfSU9CX1JYRU5BLA0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIElNWDhRTV9NSVNDX0lPQl9SWEVOQSk7DQo+ID4gPiA+ICsNCj4gcmVnbWFw X3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dwciwNCj4gPiA+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBJTVg4UU1fQ1NSX01JU0NfT0ZGU0VULA0KPiA+ID4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNWDhRTV9NSVNDX0lPQl9UWEVOQSwgMCk7DQo+ ID4gPiA+ICsgICAgICAgICAgICAgICB9IGVsc2Ugew0KPiA+ID4gPiArICAgICAgICAgICAgICAg ICAgICAgICAvKiBUcnkgdG8gdXNlZCB0aGUgaW50ZXJuYWwgcGxsIGFzIHJlZiBjbGsgKi8NCj4g PiA+ID4gKw0KPiByZWdtYXBfdXBkYXRlX2JpdHMoaW14Nl9wY2llLT5pb211eGNfZ3ByLA0KPiA+ ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNWDhRTV9DU1JfTUlTQ19PRkZT RVQsDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1YOFFNX01JU0Nf SU9CX1JYRU5BLA0KPiAwKTsNCj4gPiA+ID4gKw0KPiByZWdtYXBfdXBkYXRlX2JpdHMoaW14Nl9w Y2llLT5pb211eGNfZ3ByLA0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IElNWDhRTV9DU1JfTUlTQ19PRkZTRVQsDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgSU1YOFFNX01JU0NfSU9CX1RYRU5BLA0KPiA+ID4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIElNWDhRTV9NSVNDX0lPQl9UWEVOQSk7DQo+ID4gPiA+ICsNCj4gcmVn bWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNpZS0+aW9tdXhjX2dwciwNCj4gPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBJTVg4UU1fQ1NSX01JU0NfT0ZGU0VULA0KPiA+ID4gPiAr DQo+ID4gPiBJTVg4UU1fQ1NSX01JU0NfSU9CX0FfMF9UWE9FIHwNCj4gPiA+ID4gKw0KPiA+ID4g SU1YOFFNX0NTUl9NSVNDX0lPQl9BXzBfTTFNMF9NQVNLLA0KPiA+ID4gPiArDQo+ID4gPiBJTVg4 UU1fQ1NSX01JU0NfSU9CX0FfMF9UWE9FIHwNCj4gPiA+ID4gKw0KPiA+ID4gSU1YOFFNX0NTUl9N SVNDX0lPQl9BXzBfTTFNMF8yKTsNCj4gPiA+ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiA+DQo+ ID4gPiBTYW1lIGhlcmUuIEl0IGxvb2tzIGxpa2Ugc3BlY2lmeWluZyAiZXh0X29zYyIgZm9yIG9u ZSBjb250cm9sbGVyIGFuZA0KPiA+ID4gbGVhdmluZyBpdCBvdXQgZm9yIGFub3RoZXIgd291bGQg bGVhZCB0byBkaWZmZXJlbnQgb3V0Y29tZSBiYXNlZCBvbg0KPiA+ID4gd2hpY2ggY29udHJvbGxl ciBnZXRzIGluaXRpYWxpemVkIGZpcnN0Lg0KPiA+ID4NCj4gPiA+IEl0IHNlZW1zIHRoYXQgbWF5 YmUgYWJzdHJhY3RpbmcgYWxsIG9mIHRoaXMgYXdheSB2aWEgYSBnZW5lcmljIFBIWQ0KPiA+ID4g c3Vic3lzdGVtIHdvdWxkIGJlIGEgYmV0dGVyIHBhdGguIFNlZSBmb3IgZXhhbXBsZSBwY2ktZHJh N3h4LmMgd2hpY2gNCj4gPiA+IGxvb2tzIGxpa2UgaXQgbWlnaHQgYmUgYSBnb29kIGV4YW1wbGUu DQo+ID4gPg0KPiA+IFtSaWNoYXJkIFpodV0gT2theSwgd291bGQgZm9sbG93aW5nIHlvdXIgc3Vn Z2VzdGlvbnMuDQo+ID4gVGhhbmtzIGEgbG90Lg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgICAg ICAgICAgICBicmVhazsNCj4gPiA+ID4gICAgICAgICBjYXNlIElNWDhNUToNCj4gPiA+ID4gICAg ICAgICAgICAgICAgIC8qDQo+ID4gPiA+ICAgICAgICAgICAgICAgICAgKiBUT0RPOiBDdXJyZW50 bHkgdGhpcyBjb2RlIGFzc3VtZXMgZXh0ZXJuYWwNCj4gQEANCj4gPiA+ID4gLTc2Myw2ICsxMDI5 LDcgQEAgc3RhdGljIGludA0KPiA+ID4gPiBpbXg2X3BjaWVfd2FpdF9mb3Jfc3BlZWRfY2hhbmdl KHN0cnVjdA0KPiA+ID4gPiBpbXg2X3BjaWUgKmlteDZfcGNpZSkNCj4gPiA+ID4NCj4gPiA+ID4g IHN0YXRpYyB2b2lkIGlteDZfcGNpZV9sdHNzbV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2KSAg ew0KPiA+ID4gPiArICAgICAgIHUzMiB2YWw7DQo+ID4gPiA+ICAgICAgICAgc3RydWN0IGlteDZf cGNpZSAqaW14Nl9wY2llID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQo+ID4gPiA+DQo+ID4gPiA+ ICAgICAgICAgc3dpdGNoIChpbXg2X3BjaWUtPmRydmRhdGEtPnZhcmlhbnQpIHsgQEAgLTc3Nyw2 ICsxMDQ0LDE1DQo+ID4gPiBAQA0KPiA+ID4gPiBzdGF0aWMgdm9pZCBpbXg2X3BjaWVfbHRzc21f ZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldikNCj4gPiA+ID4gICAgICAgICBjYXNlIElNWDhNUToN Cj4gPiA+ID4gICAgICAgICAgICAgICAgIHJlc2V0X2NvbnRyb2xfZGVhc3NlcnQoaW14Nl9wY2ll LT5hcHBzX3Jlc2V0KTsNCj4gPiA+ID4gICAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ID4gPiAr ICAgICAgIGNhc2UgSU1YOFFYUDoNCj4gPiA+ID4gKyAgICAgICBjYXNlIElNWDhRTToNCj4gPiA+ ID4gKyAgICAgICAgICAgICAgIHZhbCA9IElNWDhRTV9DU1JfUENJRUFfT0ZGU0VUICsNCj4gPiA+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgaW14Nl9wY2llLT5jb250cm9sbGVyX2lkICogU1pf NjRLOw0KPiA+ID4gPiArICAgICAgICAgICAgICAgcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNp ZS0+aW9tdXhjX2dwciwNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 YWwgKw0KPiA+ID4gSU1YOFFNX0NTUl9QQ0lFX0NUUkwyX09GRlNFVCwNCj4gPiA+ID4gKw0KPiBJ TVg4UU1fQ1RSTF9MVFNTTV9FTkFCTEUsDQo+ID4gPiA+ICsNCj4gSU1YOFFNX0NUUkxfTFRTU01f RU5BQkxFKTsNCj4gPiA+ID4gKyAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ID4gPiAgICAgICAg IH0NCj4gPiA+ID4gIH0NCj4gPiA+ID4NCj4gPiA+ID4gQEAgLTkwOCwxMyArMTE4NCwyNSBAQCBz dGF0aWMgaW50IGlteDZfYWRkX3BjaWVfcG9ydChzdHJ1Y3QNCj4gPiA+ID4gaW14Nl9wY2llDQo+ ID4gPiAqaW14Nl9wY2llLA0KPiA+ID4gPiAgICAgICAgIHJldHVybiAwOw0KPiA+ID4gPiAgfQ0K PiA+ID4gPg0KPiA+ID4gPiArc3RhdGljIHU2NCBpbXg2X3BjaWVfY3B1X2FkZHJfZml4dXAoc3Ry dWN0IGR3X3BjaWUgKnBjaWUsIHU2NA0KPiA+ID4gPiArY3B1X2FkZHIpIHsNCj4gPiA+ID4gKyAg ICAgICBzdHJ1Y3QgcGNpZV9wb3J0ICpwcCA9ICZwY2llLT5wcDsNCj4gPiA+ID4gKyAgICAgICBz dHJ1Y3QgaW14Nl9wY2llICppbXg2X3BjaWUgPSB0b19pbXg2X3BjaWUocGNpZSk7DQo+ID4gPiA+ ICsNCj4gPiA+ID4gKyAgICAgICBpZiAoaW14Nl9wY2llLT5kcnZkYXRhLT5mbGFncyAmDQo+ID4g PiBJTVg2X1BDSUVfRkxBR19JTVg2X0NQVV9BRERSX0ZJWFVQKQ0KPiA+ID4gPiArICAgICAgICAg ICAgICAgcmV0dXJuIChjcHVfYWRkciArIGlteDZfcGNpZS0+bG9jYWxfYWRkciAtDQo+ID4gPiA+ ICsgcHAtPm1lbV9iYXNlKTsNCj4gPiA+DQo+ID4gPiBJZiB5b3UgZG8NCj4gPiA+DQo+ID4gPiBj cHVfYWRkciArPSBteDZfcGNpZS0+bG9jYWxfYWRkciAtIHBwLT5tZW1fYmFzZTsNCj4gPiA+DQo+ ID4gPiB5b3Ugd29uJ3QgbmVlZCBhbiBlbHNlIGJlbG93Lg0KPiA+ID4NCj4gPiBbUmljaGFyZCBa aHVdIFlvdSdyZSByaWdodC4gVGhhbmtzLg0KPiA+DQo+ID4gPiA+ICsgICAgICAgZWxzZQ0KPiA+ ID4gPiArICAgICAgICAgICAgICAgcmV0dXJuIGNwdV9hZGRyOw0KPiA+ID4gPiArfQ0KPiA+ID4g PiArDQo+ID4gPiA+ICBzdGF0aWMgY29uc3Qgc3RydWN0IGR3X3BjaWVfb3BzIGR3X3BjaWVfb3Bz ID0gew0KPiA+ID4gPiAtICAgICAgIC8qIE5vIHNwZWNpYWwgb3BzIG5lZWRlZCwgYnV0IHBjaWUt ZGVzaWdud2FyZSBzdGlsbCBleHBlY3RzDQo+IHRoaXMNCj4gPiA+IHN0cnVjdCAqLw0KPiA+ID4g PiArICAgICAgIC5jcHVfYWRkcl9maXh1cCA9IGlteDZfcGNpZV9jcHVfYWRkcl9maXh1cCwNCj4g PiA+ID4gIH07DQo+ID4gPiA+DQo+ID4gPiA+ICAjaWZkZWYgQ09ORklHX1BNX1NMRUVQDQo+ID4g PiA+ICBzdGF0aWMgdm9pZCBpbXg2X3BjaWVfbHRzc21fZGlzYWJsZShzdHJ1Y3QgZGV2aWNlICpk ZXYpICB7DQo+ID4gPiA+ICsgICAgICAgdTMyIHZhbDsNCj4gPiA+ID4gICAgICAgICBzdHJ1Y3Qg aW14Nl9wY2llICppbXg2X3BjaWUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gPiA+ID4NCj4g PiA+ID4gICAgICAgICBzd2l0Y2ggKGlteDZfcGNpZS0+ZHJ2ZGF0YS0+dmFyaWFudCkgeyBAQCAt OTI2LDYgKzEyMTQsMTcNCj4gPiA+IEBADQo+ID4gPiA+IHN0YXRpYyB2b2lkIGlteDZfcGNpZV9s dHNzbV9kaXNhYmxlKHN0cnVjdCBkZXZpY2UgKmRldikNCj4gPiA+ID4gICAgICAgICBjYXNlIElN WDdEOg0KPiA+ID4gPiAgICAgICAgICAgICAgICAgcmVzZXRfY29udHJvbF9hc3NlcnQoaW14Nl9w Y2llLT5hcHBzX3Jlc2V0KTsNCj4gPiA+ID4gICAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ID4g PiArICAgICAgIGNhc2UgSU1YOFFYUDoNCj4gPiA+ID4gKyAgICAgICBjYXNlIElNWDhRTToNCj4g PiA+ID4gKyAgICAgICAgICAgICAgIHZhbCA9IElNWDhRTV9DU1JfUENJRUFfT0ZGU0VUICsNCj4g PiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgaW14Nl9wY2llLT5jb250cm9sbGVyX2lkICog U1pfNjRLOw0KPiA+ID4gPiArICAgICAgICAgICAgICAgcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZf cGNpZS0+aW9tdXhjX2dwciwNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB2YWwgKw0KPiA+ID4gSU1YOFFNX0NTUl9QQ0lFX0NUUkwyX09GRlNFVCwNCj4gPiA+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTVg4UU1fQ1RSTF9MVFNTTV9FTkFCTEUsDQo+ IDApOw0KPiA+ID4gPiArICAgICAgICAgICAgICAgcmVnbWFwX3VwZGF0ZV9iaXRzKGlteDZfcGNp ZS0+aW9tdXhjX2dwciwNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 YWwgKw0KPiA+ID4gSU1YOFFNX0NTUl9QQ0lFX0NUUkwyX09GRlNFVCwNCj4gPiA+ID4gKw0KPiBJ TVg4UU1fQ1RSTF9SRUFEWV9FTlRSX0wyMywNCj4gPiA+IDApOw0KPiA+ID4gPiArICAgICAgICAg ICAgICAgYnJlYWs7DQo+ID4gPiA+ICAgICAgICAgZGVmYXVsdDoNCj4gPiA+ID4gICAgICAgICAg ICAgICAgIGRldl9lcnIoZGV2LCAibHRzc21fZGlzYWJsZSBub3Qgc3VwcG9ydGVkXG4iKTsNCj4g PiA+ID4gICAgICAgICB9DQo+ID4gPiA+IEBAIC05MzMsNiArMTIzMiw4IEBAIHN0YXRpYyB2b2lk IGlteDZfcGNpZV9sdHNzbV9kaXNhYmxlKHN0cnVjdA0KPiA+ID4gPiBkZXZpY2UNCj4gPiA+ID4g KmRldikNCj4gPiA+ID4NCj4gPiA+ID4gIHN0YXRpYyB2b2lkIGlteDZfcGNpZV9wbV90dXJub2Zm KHN0cnVjdCBpbXg2X3BjaWUgKmlteDZfcGNpZSkgIHsNCj4gPiA+ID4gKyAgICAgICBpbnQgaTsN Cj4gPiA+ID4gKyAgICAgICB1MzIgYWRkciwgdmFsOw0KPiA+ID4gPiAgICAgICAgIHN0cnVjdCBk ZXZpY2UgKmRldiA9IGlteDZfcGNpZS0+cGNpLT5kZXY7DQo+ID4gPiA+DQo+ID4gPiA+ICAgICAg ICAgLyogU29tZSB2YXJpYW50cyBoYXZlIGEgdHVybm9mZiByZXNldCBpbiBEVCAqLyBAQCAtOTUx LDYNCj4gPiA+ID4gKzEyNTIsMzQgQEAgc3RhdGljIHZvaWQgaW14Nl9wY2llX3BtX3R1cm5vZmYo c3RydWN0IGlteDZfcGNpZQ0KPiA+ID4gKmlteDZfcGNpZSkNCj4gPiA+ID4gICAgICAgICAgICAg ICAgIHJlZ21hcF91cGRhdGVfYml0cyhpbXg2X3BjaWUtPmlvbXV4Y19ncHIsDQo+ID4gPiBJT01V WENfR1BSMTIsDQo+ID4gPiA+DQo+ID4gPiBJTVg2U1hfR1BSMTJfUENJRV9QTV9UVVJOX09GRiwg MCk7DQo+ID4gPiA+ICAgICAgICAgICAgICAgICBicmVhazsNCj4gPiA+ID4gKyAgICAgICBjYXNl IElNWDhRWFA6DQo+ID4gPiA+ICsgICAgICAgY2FzZSBJTVg4UU06DQo+ID4gPiA+ICsgICAgICAg ICAgICAgICBhZGRyID0gSU1YOFFNX0NTUl9QQ0lFQV9PRkZTRVQgKw0KPiA+ID4gPiArICAgICAg ICAgICAgICAgICAgICAgICBpbXg2X3BjaWUtPmNvbnRyb2xsZXJfaWQgKiBTWl82NEs7DQo+ID4g PiA+ICsgICAgICAgICAgICAgICByZWdtYXBfdXBkYXRlX2JpdHMoaW14Nl9wY2llLT5pb211eGNf Z3ByLA0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHIgKw0KPiA+ ID4gSU1YOFFNX0NTUl9QQ0lFX0NUUkwyX09GRlNFVCwNCj4gPiA+ID4gKw0KPiA+ID4gSU1YOFFN X0NUUkxfUE1fWE1UX1RVUk5PRkYsDQo+ID4gPiA+ICsNCj4gPiA+IElNWDhRTV9DVFJMX1BNX1hN VF9UVVJOT0ZGKTsNCj4gPiA+ID4gKyAgICAgICAgICAgICAgIHJlZ21hcF91cGRhdGVfYml0cyhp bXg2X3BjaWUtPmlvbXV4Y19ncHIsDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYWRkciArDQo+ID4gPiBJTVg4UU1fQ1NSX1BDSUVfQ1RSTDJfT0ZGU0VULA0KPiA+ID4g PiArDQo+ID4gPiBJTVg4UU1fQ1RSTF9QTV9YTVRfVFVSTk9GRiwgMCk7DQo+ID4gPg0KPiA+ID4g SXMgc2V0dGluZyBJTVg4UU1fQ1RSTF9QTV9YTVRfVFVSTk9GRiBvbiBhbmQgdGhlbiBvZmYgbmVj ZXNzYXJ5Pw0KPiBJJ2QNCj4gPiA+IGFkZCBhIGNvbW1lbnQgdG8gaGlnaGxpZ2h0IHRoYXQgdGhp cyBpcyBpbnRlbnRpb25hbC4NCj4gPiA+DQo+ID4gW1JpY2hhcmQgWmh1XSBEZXNpZ25lciBzdWdn ZXN0IHRvIGRvIHNvLiBPbmUgUE1FIG1lc3NhZ2Ugd291bGQgYmUga2lja2VkDQo+IG9mZiBvbiB0 aGUgbGluayBhZnRlciB0aGVzZSB0dXJuIG9uL29mZiBvcGVyYXRpb25zLg0KPiA+DQo+IA0KPiBZ dXAsIGdvb2QgdG8gaGVhciwgdGhhdCdzIGV4YWN0bHkgd2hhdCBJJ2QgcHV0IGluIHRoZSBjb21t ZW50IDotKQ0KPiANCj4gPiA+ID4gKyAgICAgICAgICAgICAgIHJlZ21hcF91cGRhdGVfYml0cyhp bXg2X3BjaWUtPmlvbXV4Y19ncHIsDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYWRkciArDQo+ID4gPiBJTVg4UU1fQ1NSX1BDSUVfQ1RSTDJfT0ZGU0VULA0KPiA+ID4g PiArDQo+IElNWDhRTV9DVFJMX1JFQURZX0VOVFJfTDIzLA0KPiA+ID4gPiArDQo+ID4gPiBJTVg4 UU1fQ1RSTF9SRUFEWV9FTlRSX0wyMyk7DQo+ID4gPiA+ICsgICAgICAgICAgICAgICAvKiBjaGVj ayB0aGUgTDIgaXMgZW50ZXJlZCBvciBub3QuICovDQo+ID4gPiA+ICsgICAgICAgICAgICAgICBm b3IgKGkgPSAwOyBpIDwgTDJfRU5UUllfV0FJVF9NQVhfUkVUUklFUzsgaSsrKSB7DQo+ID4gPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgIHJlZ21hcF9yZWFkKGlteDZfcGNpZS0+aW9tdXhjX2dw ciwNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHIg Kw0KPiA+ID4gSU1YOFFNX0NTUl9QQ0lFX1NUVFMwX09GRlNFVCwNCj4gPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YWwpOw0KPiA+ID4gPiArICAgICAgICAg ICAgICAgICAgICAgICBpZiAodmFsICYNCj4gPiA+IElNWDhRTV9DVFJMX1NUVFMwX1BNX0xJTktT VF9JTl9MMikNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsN Cj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgdWRlbGF5KDEwKTsNCj4gPiA+ID4gKyAg ICAgICAgICAgICAgIH0NCj4gPiA+ID4gKyAgICAgICAgICAgICAgIGlmICgodmFsICYgSU1YOFFN X0NUUkxfU1RUUzBfUE1fTElOS1NUX0lOX0wyKQ0KPiA9PQ0KPiA+ID4gMCkNCj4gPiA+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgZGV2X2VycihkZXYsICJQQ0lFJWQgY2FuJ3QgZW50ZXIgaW50 bw0KPiA+ID4gPiArIEwyLlxuIiwNCj4gPiA+ID4gKw0KPiA+ID4gaW14Nl9wY2llLT5jb250cm9s bGVyX2lkKTsNCj4gPiA+DQo+ID4gPiByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQoKQ0KPiA+ID4N Cj4gPiBbUmljaGFyZCBaaHVdIE9rYXksIHdvdWxkIHVzZSByZWdtYXBfcmVhZF9wb2xsX3RpbWVv dXQoKSBpbiBuZXh0IHZlcnNpb24uDQo+ID4NCj4gPiA+ID4gKyAgICAgICAgICAgICAgIGJyZWFr Ow0KPiA+ID4gPiAgICAgICAgIGRlZmF1bHQ6DQo+ID4gPiA+ICAgICAgICAgICAgICAgICBkZXZf ZXJyKGRldiwgIlBNRV9UdXJuX09mZiBub3QgaW1wbGVtZW50ZWRcbiIpOw0KPiA+ID4gPiAgICAg ICAgICAgICAgICAgcmV0dXJuOw0KPiA+ID4gPiBAQCAtOTg1LDYgKzEzMTQsMTEgQEAgc3RhdGlj IHZvaWQgaW14Nl9wY2llX2Nsa19kaXNhYmxlKHN0cnVjdA0KPiA+ID4gaW14Nl9wY2llICppbXg2 X3BjaWUpDQo+ID4gPiA+ICAgICAgICAgY2FzZSBJTVg4TVE6DQo+ID4gPiA+ICAgICAgICAgICAg ICAgICBjbGtfZGlzYWJsZV91bnByZXBhcmUoaW14Nl9wY2llLT5wY2llX2F1eCk7DQo+ID4gPiA+ ICAgICAgICAgICAgICAgICBicmVhazsNCj4gPiA+ID4gKyAgICAgICBjYXNlIElNWDhRWFA6DQo+ ID4gPiA+ICsgICAgICAgY2FzZSBJTVg4UU06DQo+ID4gPiA+ICsgICAgICAgICAgICAgICBjbGtf ZGlzYWJsZV91bnByZXBhcmUoaW14Nl9wY2llLT5wY2llX3Blcik7DQo+ID4gPiA+ICsNCj4gPiA+ ID4gKyBjbGtfZGlzYWJsZV91bnByZXBhcmUoaW14Nl9wY2llLT5wY2llX2luYm91bmRfYXhpKTsN Cj4gPiA+DQo+ID4gPiBZb3UgY2FuIHByb2JhYmx5IHBpZ2d5IGJhY2sgb24gSU1YNlNYIHNpbmNl IGl0IGhhcw0KPiA+ID4gInBjaWVfaW5ib3VuZF9heGkiIGFzIHdlbGwuDQo+ID4gPg0KPiA+IFtS aWNoYXJkIFpodV0gT2theSwgd291bGQgZm9sbG93IHlvdXIgc3VnZ2VzdGlvbi4gVGhhbmtzLg0K PiA+IFdvdWxkIGNoYW5nZSBsaWtlIGJlbG93Lg0KPiA+ICAgICAgICAgY2FzZSBJTVg4UVhQOg0K PiA+ICAgICAgICAgY2FzZSBJTVg4UU06DQo+ID4gICAgICAgICAgICAgICAgIGNsa19kaXNhYmxl X3VucHJlcGFyZShpbXg2X3BjaWUtPnBjaWVfcGVyKTsNCj4gPiAgICAgICAgIGNhc2UgSU1YNlNY Og0KPiA+ICAgICAgICAgICAgICAgICBjbGtfZGlzYWJsZV91bnByZXBhcmUoaW14Nl9wY2llLT5w Y2llX2luYm91bmRfYXhpKTsNCj4gPiAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4NCj4gPiA+ ID4gKyAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ID4gPiAgICAgICAgIGRlZmF1bHQ6DQo+ID4g PiA+ICAgICAgICAgICAgICAgICBicmVhazsNCj4gPiA+ID4gICAgICAgICB9DQo+ID4gPiA+IEBA IC0xMDg0LDcgKzE0MTgsMjYgQEAgc3RhdGljIGludCBpbXg2X3BjaWVfcHJvYmUoc3RydWN0DQo+ ID4gPiBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ID4gPiA+ICAgICAgICAgaWYgKElTX0VSUihw Y2ktPmRiaV9iYXNlKSkNCj4gPiA+ID4gICAgICAgICAgICAgICAgIHJldHVybiBQVFJfRVJSKHBj aS0+ZGJpX2Jhc2UpOw0KPiA+ID4gPg0KPiA+ID4gPiArICAgICAgIGlmIChvZl9wcm9wZXJ0eV9y ZWFkX3UzMihub2RlLCAiaHNpby1jZmciLA0KPiA+ID4gJmlteDZfcGNpZS0+aHNpb19jZmcpKQ0K PiA+ID4gPiArICAgICAgICAgICAgICAgaW14Nl9wY2llLT5oc2lvX2NmZyA9IDA7DQo+ID4gPiA+ ICsgICAgICAgaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJleHRfb3NjIiwNCj4gPiA+ ID4gKyAmaW14Nl9wY2llLT5leHRfb3NjKQ0KPiA+ID4gPCAwKQ0KPiA+ID4gPiArICAgICAgICAg ICAgICAgaW14Nl9wY2llLT5leHRfb3NjID0gMDsNCj4gPiA+ID4gKyAgICAgICBpZiAob2ZfcHJv cGVydHlfcmVhZF91MzIobm9kZSwgImxvY2FsLWFkZHIiLA0KPiA+ID4gJmlteDZfcGNpZS0+bG9j YWxfYWRkcikpDQo+ID4gPiA+ICsgICAgICAgICAgICAgICBpbXg2X3BjaWUtPmxvY2FsX2FkZHIg PSAwOw0KPiA+ID4NCj4gPiA+IEFsbCBvZiB0aGVzZSBwcm9wZXJ0aWVzIHdpbGwgYmUgaW5pdGlh bGl6ZWQgdG8gemVybyBieSBremFsbG9jIGFuZA0KPiA+ID4gb2ZfcHJvcGVydHlfcmVhZF91MzIo KSB3b24ndCBtb2RpZnkgb3V0cHV0IHZhcmlhYmxlIHVubGVzcyBpdCBpcw0KPiA+ID4gc3VjY2Vz c2Z1bCwgc28geW91IGNhbiBwcm9iYWJseSBza2lwIGVycm9yIGNoZWNraW5nLg0KPiA+IFtSaWNo YXJkIFpodV0gT2theSwgd291bGQgcmVtb3ZlIHRoZSBlcnJvciBjaGVja2luZy4NCj4gPg0KPiA+ ID4NCj4gPiA+ID4gKw0KPiA+ID4gPiAgICAgICAgIC8qIEZldGNoIEdQSU9zICovDQo+ID4gPiA+ ICsgICAgICAgaW14Nl9wY2llLT5jbGtyZXFfZ3BpbyA9IG9mX2dldF9uYW1lZF9ncGlvKG5vZGUs DQo+ID4gPiA+ICsgImNsa3JlcS1ncGlvIiwNCj4gPiA+IDApOw0KPiA+ID4gPiArICAgICAgIGlm IChncGlvX2lzX3ZhbGlkKGlteDZfcGNpZS0+Y2xrcmVxX2dwaW8pKSB7DQo+ID4gPiA+ICsgICAg ICAgICAgICAgICByZXQgPSBkZXZtX2dwaW9fcmVxdWVzdF9vbmUoJnBkZXYtPmRldiwNCj4gPiA+ IGlteDZfcGNpZS0+Y2xrcmVxX2dwaW8sDQo+ID4gPiA+ICsNCj4gPiA+IEdQSU9GX09VVF9JTklU X0xPVywgIlBDSWUgQ0xLUkVRIik7DQo+ID4gPiA+ICsgICAgICAgICAgICAgICBpZiAocmV0KSB7 DQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJnBkZXYtPmRldiwgInVu YWJsZSB0byBnZXQgY2xrcmVxDQo+ID4gPiBncGlvXG4iKTsNCj4gPiA+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gPiA+ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiA+ ID4gKyAgICAgICB9IGVsc2UgaWYgKGlteDZfcGNpZS0+Y2xrcmVxX2dwaW8gPT0gLUVQUk9CRV9E RUZFUikgew0KPiA+ID4gPiArICAgICAgICAgICAgICAgcmV0dXJuIGlteDZfcGNpZS0+Y2xrcmVx X2dwaW87DQo+ID4gPiA+ICsgICAgICAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICAgICAgICAgaW14 Nl9wY2llLT5yZXNldF9ncGlvID0gb2ZfZ2V0X25hbWVkX2dwaW8obm9kZSwNCj4gPiA+ID4gInJl c2V0LWdwaW8iLA0KPiA+ID4gMCk7DQo+ID4gPiA+ICAgICAgICAgaW14Nl9wY2llLT5ncGlvX2Fj dGl2ZV9oaWdoID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKG5vZGUsDQo+ID4gPiA+DQo+ID4gPiA+ ICJyZXNldC1ncGlvLWFjdGl2ZS1oaWdoIik7IEBAIC0xMTU1LDYgKzE1MDgsMjUgQEAgc3RhdGlj IGludA0KPiA+ID4gaW14Nl9wY2llX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYp DQo+ID4gPiA+ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQVFJfRVJSKGlteDZfcGNp ZS0+cGNpZV9hdXgpOw0KPiA+ID4gPiAgICAgICAgICAgICAgICAgfQ0KPiA+ID4gPiAgICAgICAg ICAgICAgICAgYnJlYWs7DQo+ID4gPiA+ICsgICAgICAgY2FzZSBJTVg4UU06DQo+ID4gPiA+ICsg ICAgICAgY2FzZSBJTVg4UVhQOg0KPiA+ID4gPiArICAgICAgICAgICAgICAgaWYgKGRiaV9iYXNl LT5zdGFydCA9PQ0KPiBJTVg4X0hTSU9fUENJRUJfQkFTRV9BRERSKQ0KPiA+ID4gPiArICAgICAg ICAgICAgICAgICAgICAgICBpbXg2X3BjaWUtPmNvbnRyb2xsZXJfaWQgPSAxOw0KPiA+ID4gPiAr DQo+ID4gPiA+ICsgICAgICAgICAgICAgICBpbXg2X3BjaWUtPnBjaWVfcGVyID0gZGV2bV9jbGtf Z2V0KGRldiwNCj4gInBjaWVfcGVyIik7DQo+ID4gPiA+ICsgICAgICAgICAgICAgICBpZiAoSVNf RVJSKGlteDZfcGNpZS0+cGNpZV9wZXIpKSB7DQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgIGRldl9lcnIoZGV2LCAicGNpZV9wZXIgY2xvY2sgc291cmNlDQo+ID4gPiA+ICsgbWlzc2lu Zw0KPiA+ID4gb3IgaW52YWxpZFxuIik7DQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAg IHJldHVybiBQVFJfRVJSKGlteDZfcGNpZS0+cGNpZV9wZXIpOw0KPiA+ID4gPiArICAgICAgICAg ICAgICAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsgICAgICAgICAgICAgICBpbXg2X3BjaWUtPnBj aWVfaW5ib3VuZF9heGkgPQ0KPiA+ID4gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsDQo+ID4gPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBjaWVfaW5ib3VuZF9heGkiKTsNCj4g PiA+ID4gKyAgICAgICAgICAgICAgIGlmIChJU19FUlIoaW14Nl9wY2llLT5wY2llX2luYm91bmRf YXhpKSkgew0KPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZwZGV2LT5k ZXYsDQo+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBjaWUgY2xvY2sg c291cmNlIG1pc3Npbmcgb3INCj4gPiA+IGludmFsaWRcbiIpOw0KPiA+ID4gPiArICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4NCj4gPiA+IFBUUl9FUlIoaW14Nl9wY2llLT5wY2llX2luYm91 bmRfYXhpKTsNCj4gPiA+ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiA+DQo+ID4gPiBPbiBpLk1Y OE1RICJwY2llX2J1cyIgY2xvY2sgaW4gdmVuZG9yIHRyZWUgd2Fzbid0IGFjdHVhbGx5IHBvaW50 aW5nDQo+ID4gPiB0byBhY3R1YWwgUENJRSBidXMgY2xvY2ssIHNvIGl0IG1pZ2h0IGJlIHdvcnRo IGNoZWNraW5nIGlmIHRoYXQncw0KPiA+ID4gdGhlIGNhc2UgZm9yIGkuTVg4UU0vWCBhbmQgeW91 IGFjdHVhbGx5IG5lZWQgb25lIG1vcmUgY2xvY2suDQo+ID4gW1JpY2hhcmQgWmh1XSBSZWdhcmRp bmcgdG8gbXkgdW5kZXJzdGFuZGluZywgaU1YIFBDSWUgbW9kdWxlIGlzDQo+IGNvbm5lY3RlZCB0 byBBWEkgYnVzLg0KPiA+IFRodXMsIHRoZSBBWEkgcmVsYXRlZCBjbG9jayBjYW4gYmUgdHJlYXRl ZCBhcyBidXMgY2xvY2suIENvcnJlY3QgbWUgaWYgbXkNCj4gdW5kZXJzdGFuZCBpcyB3cm9uZy4N Cj4gPiBTbywgSSB1c2UgdGhlIHBjaWVfYnVzIGNsb2NrIGZvciBpLk1YOFFNL1FYUCBQQ0llIGlu IHRoZSBkdHMgYmluZGluZy4NCj4gPiBPdGhlcndpc2UsIEkgY2FuIHVzZSBhbm90aGVyIG5ldyBj bG9jayBpbiBjb2RlcyB0byBzdXBwb3J0IGkuTVg4UU0vUVhQDQo+IFBDSWVzLg0KPiA+DQo+IA0K PiBTbywgInBjaWVfYnVzIiBpcyBzdXBwb3NlZCB0byBiZSB0aGUgY2xvY2sgZHJpdmluZyBQQ0lF IGJ1cyBpdHNlbGYuIEluIHRoaXMgY2FzZQ0KPiB0aGUgY2xvY2sgdGhhdCBpcyBjb250cm9sbGVk IGJ5IENMS1JFUV9CLiBPbiBpLk1YOE1RIEVWSyB0aGF0IHdhcyBhbg0KPiBleHRlcm5hbCAxMDAg TWh6IG9zY2lsbGF0b3IsIHNvIHRoZSBmaW5hbCBwYXRjaCBoYXMgInBjaWVfYnVzIiBwb2ludGlu ZyB0byBhDQo+IGRlZGljYXRlZCAiZml4ZWQtY2xvY2siOg0KPiBodHRwczovL2V1cjAxLnNhZmVs aW5rcy5wcm90ZWN0aW9uLm91dGxvb2suY29tLz91cmw9aHR0cHMlM0ElMkYlMkZsb3JlLmtlDQo+ IHJuZWwub3JnJTJGbGttbCUyRjIwMTkwMjIwMDE1ODU3LjcxMzYtNi1hbmRyZXcuc21pcm5vdiU0 MGdtYWlsLmNvbQ0KPiAlMkZUJTJGJTIzdSZhbXA7ZGF0YT0wMiU3QzAxJTdDaG9uZ3hpbmcuemh1 JTQwbnhwLmNvbSU3Q2I3NDUNCj4gNWZlNTllMzg0NzIzZjQ0MjA4ZDZhOGVjODM1YSU3QzY4NmVh MWQzYmMyYjRjNmZhOTJjZDk5YzVjMzAxNjM1DQo+ICU3QzAlN0MwJTdDNjM2ODgyMTMxMTA1MTYy MTM4JmFtcDtzZGF0YT1zNzQzOHhCU054bld3VE14Wlhrag0KPiBMaGdkUGlTNnB1Q1JkcmdyOXN1 WnBQUSUzRCZhbXA7cmVzZXJ2ZWQ9MA0KPiANCj4gT3JpZ2luYWxseSB2ZW5kb3IgdHJlZSB3YXMg dXNpbmcgInBjaWVfYnVzIiB0byBwb2ludCBhdA0KPiBJTVg4TVFfQ0xLX1BDSUUxX0FVWC4gSWYg dGhlIHNpdHVhdGlvbiBvbiBpLk1YOFFNL1FYUCBpcyBzaW1pbGFyLCB0aGVuLA0KPiB5ZWFoLCBJ IHRoaW5rIGl0IHNob3VsZCBiZSBtb3ZlZCBvdXQgaW50byBhIHNlcGFyYXRlIGNsb2NrLg0KPiAN CltSaWNoYXJkIFpodV0gVGhlIGNsb2NrcyBvZiB0aGUgaS5NWDhRTS9RWFAgUENJZSBhcmUgZGlm ZmVyZW50IHRvIHRoZSBpTVg4TVEgUENJZSdzLg0KRml2ZSBjbG9ja3MgTUFTVEVSX0FYSSwgU0xB VkVfQVhJLCBEQklfQVhJLCBQSVBFX0NMSyBhbmQgUEVSX0NMSyBhcmUgbWFuZGF0b3J5IHJlcXVp cmVkLg0KQ3VycmVudGx5LCBUaGV5IGFyZSBuYW1lZCAicGNpZSIsICJwY2llX2J1cyIsICJwY2ll X2luYm91bmRfYXhpIiwgInBjaWVfcGh5IiwgInBjaWVfcGVyIiBpbiB0aGUgdmVuZG9yIHRyZWUu DQpQSVBFX0NMSyBpcyBvdXRwdXQgdG8gUEhZLCBzbyAicGNpZV9waHkiIGNsb2NrIG5hbWUgaXMg dXNlZCBieSBpdC4NCkknbSBub3Qgc3VyZSB0aGF0IHRoZSBuYW1lcyBvZiB0aGUgeHh4X0FYSSBj bG9ja3MgYXJlIHByb3BlciBvciBub3QuDQpXaGF0J3JlIHlvdXIgc3VnZ2VzdHMgYWJvdXQgdGhl IG5hbWVzIG9mIHh4eF9BWEkgY2xvY2tzPw0KRGlkIG5ldyBjbG9jayBuYW1lcyBmb3IgYWxsIG9y IHBhcnQgb2YgdGhlc2UgdGhyZWUgeHh4X0FYSSBjbG9ja3Mgc2hhbGwgYmUgYWRkZWQgaW4gdG8g dGhlIGNvZGVzPw0KVGhhbmtzIGluIGFkdmFuY2VkLg0KDQo+IFRoYW5rcywNCj4gQW5kcmV5IFNt aXJub3YNCg==