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.0 required=3.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,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 37CCCC43381 for ; Thu, 21 Mar 2019 08:37:22 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id C4444218D3 for ; Thu, 21 Mar 2019 08:37:21 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=amdcloud.onmicrosoft.com header.i=@amdcloud.onmicrosoft.com header.b="rwSwWpOn" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728061AbfCUIhU (ORCPT ); Thu, 21 Mar 2019 04:37:20 -0400 Received: from mail-eopbgr710088.outbound.protection.outlook.com ([40.107.71.88]:13984 "EHLO NAM05-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727959AbfCUIhT (ORCPT ); Thu, 21 Mar 2019 04:37:19 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector1-amd-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+m5K65NfGtsDGw/2MJ3BKYCopZ6sQRG39JGdT+3h4y0=; b=rwSwWpOnSiQx9/YnKbRwMHXERtSUE3rjeww39OF5Jurbgqq/pXlYsxy+YLIMzJbHudBrtMP6mDuPq/4M1OEEKu3LCkGnUGDNFE4a64foSrj05VsWu0qzugb/KiB8RMrlKJbyWsW7whqQo9ouZqO+nCHOQqk3/7GC9A8idd/vD6w= Received: from SN1PR12MB2575.namprd12.prod.outlook.com (52.132.197.151) by SN1PR12MB0607.namprd12.prod.outlook.com (10.163.208.156) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1709.14; Thu, 21 Mar 2019 08:37:10 +0000 Received: from SN1PR12MB2575.namprd12.prod.outlook.com ([fe80::2458:b06a:5f8d:2c6b]) by SN1PR12MB2575.namprd12.prod.outlook.com ([fe80::2458:b06a:5f8d:2c6b%3]) with mapi id 15.20.1709.017; Thu, 21 Mar 2019 08:37:10 +0000 From: "Shah, Nehal-bakulchandra" To: Elie Morisse , "linux-i2c@vger.kernel.org" , Wolfram Sang , "S-k, Shyam-sundar" , "Singh, Sandeep" , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH v17] i2c: Add drivers for the AMD PCIe MP2 I2C controller Thread-Topic: [PATCH v17] i2c: Add drivers for the AMD PCIe MP2 I2C controller Thread-Index: AQHU02X9ujge6p7HnUmSZs7bEbiCOKYV26yA Date: Thu, 21 Mar 2019 08:37:09 +0000 Message-ID: <0cd7cdad-0002-b26d-9a80-f2576d61f381@amd.com> References: <20190305151319.GA22819@syn-yoga530> In-Reply-To: <20190305151319.GA22819@syn-yoga530> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: MA1PR01CA0071.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a00::11) To SN1PR12MB2575.namprd12.prod.outlook.com (2603:10b6:802:2b::23) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Nehal-bakulchandra.Shah@amd.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [165.204.157.251] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: a7d1e58f-37ba-4b0f-38f8-08d6add867ef x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(5600127)(711020)(4605104)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020);SRVR:SN1PR12MB0607; x-ms-traffictypediagnostic: SN1PR12MB0607: x-ms-exchange-purlcount: 4 x-microsoft-antispam-prvs: x-forefront-prvs: 0983EAD6B2 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(366004)(376002)(346002)(39860400002)(396003)(136003)(189003)(199004)(51914003)(53946003)(86362001)(476003)(5660300002)(256004)(53936002)(30864003)(305945005)(7736002)(81166006)(81156014)(8676002)(6486002)(6246003)(97736004)(14454004)(2906002)(6512007)(229853002)(8936002)(6306002)(3846002)(66066001)(6116002)(478600001)(106356001)(31696002)(316002)(386003)(31686004)(2501003)(14444005)(105586002)(72206003)(53546011)(76176011)(71200400001)(6506007)(71190400001)(68736007)(446003)(6436002)(36756003)(110136005)(26005)(186003)(102836004)(52116002)(25786009)(5024004)(486006)(11346002)(2616005)(99286004)(21314003)(559001)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:SN1PR12MB0607;H:SN1PR12MB2575.namprd12.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: amd.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: Zmf70IG5qt9F26850mr3Eu7lULkd5y8Tr1o8MvUrK9d0QiKmRDplYnvT7gNEXuEg8OLFb/VDWoCkKHRs8zkAbNqIg9XOA+8fMkR3Bdc89pzEne3LUqtgRVxmY/7qf7ZEoD7X+4KEfYmS2wu29i2jJc9U1IVfK0jbNsukEeCu5I0bVwGYvq1gtPGp7UcgLa3AQwAGc5mX159I/3zda6M0lA98h4sV8JWEQ8JwChYaRL+Xb9oTjOo2xdqTtAaIakU/BLFXmZ7DYsgOBpPTj/djngbiNpKq0YQoVHUAzR7aUTK9AA9V9WCH95/v5BGPZRp9+JepjqgVA9hraCcNCn0anxlCpHqD3pjXn9U2nykph86LFmF0Jcc8rtm9SZZmEkDheW88LPn2rn/dLgsr8ZouU2FRCNQo/Md+OOhW3PE3xUY= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: a7d1e58f-37ba-4b0f-38f8-08d6add867ef X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Mar 2019 08:37:09.9594 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR12MB0607 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgRWxpZSwNCg0KT24gMy81LzIwMTkgODo0MyBQTSwgRWxpZSBNb3Jpc3NlIHdyb3RlOg0KPiBN UDIgY29udHJvbGxlcnMgaGF2ZSB0d28gc2VwYXJhdGUgYnVzc2VzLCBzbyBtYXkgYWNjb21tb2Rh dGUgdXAgdG8gdHdvIEkyQw0KPiBhZGFwdGVycy4gVGhvc2UgYWRhcHRlcnMgYXJlIGxpc3RlZCBp biB0aGUgQUNQSSBuYW1lc3BhY2Ugd2l0aCB0aGUNCj4gIkFNREkwMDExIiBISUQsIGFuZCBwcm9i ZWQgYnkgYSBwbGF0Zm9ybSBkcml2ZXIuDQo+IA0KPiBDb21tdW5pY2F0aW9uIHdpdGggdGhlIE1Q MiB0YWtlcyBwbGFjZSB0aHJvdWdoIE1NSU8gcmVnaXN0ZXJzLCBvciB0aHJvdWdoDQo+IERNQSBm b3IgbW9yZSB0aGFuIDMyIGJ5dGVzIHRyYW5zZmVycy4NCj4gDQo+IFRoaXMgaXMgbWFqb3IgcmV3 b3JrIG9mIHRoZSBwYXRjaCBzdWJtaXR0ZWQgYnkgTmVoYWwtYmFrdWxjaGFuZHJhIFNoYWggZnJv bQ0KPiBBTUQgKGh0dHBzOi8vcGF0Y2h3b3JrLmtlcm5lbC5vcmcvcGF0Y2gvMTA1OTczNjkvKS4N Cj4gDQo+IE1vc3Qgb2YgdGhlIGV2ZW50IGhhbmRsaW5nIG9mIHYzIHdhcyByZXdyaXR0ZW4gdG8g bWFrZSBpdCB3b3JrIHdpdGggbW9yZQ0KPiB0aGFuIG9uZSBidXMgKGUuZyBvbiBSeXplbi1iYXNl ZCBMZW5vdm8gWW9nYSA1MzApLCBhbmQgdGhpcyB2ZXJzaW9uDQo+IGNvbnRhaW5zIG1hbnkgb3Ro ZXIgaW1wcm92ZW1lbnRzLg0KPiANCj4gU2lnbmVkLW9mZi1ieTogRWxpZSBNb3Jpc3NlIDxzeW5p dXJnZUBnbWFpbC5jb20+DQo+IC0tLQ0KPiBDaGFuZ2VzIHNpbmNlIHYxIChodHRwczovL3d3dy5z cGluaWNzLm5ldC9saXN0cy9saW51eC1pMmMvbXNnMzQ2NTAuaHRtbCk6DQo+IC0+IEFkZCBmaXgg Zm9yIElPTU1VDQo+IC0+IEFkZCBkZXBlbmRlbmN5IG9mIEFDUEkNCj4gLT4gQWRkIGxvY2tzIHRv IGF2b2lkIHRoZSBjcmFzaA0KPiANCj4gQ2hhbmdlcyBzaW5jZSB2MiAoaHR0cHM6Ly9wYXRjaHdv cmsub3psYWJzLm9yZy9wYXRjaC85NjEyNzAvKToNCj4gDQo+IC0+IGZpeCBmb3IgcmV2aWV3IGNv bW1lbnRzDQo+IC0+IGZpeCBmb3IgbW9yZSB0aGFuIDMyIGJ5dGVzIHdyaXRlIGlzc3VlDQo+IA0K PiBDaGFuZ2VzIHNpbmNlIHYzIChodHRwczovL3BhdGNod29yay5rZXJuZWwub3JnL3BhdGNoLzEw NTk3MzY5LykgYnkgRWxpZSBNLjoNCj4gDQo+IC0+IHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBidXMv YWRhcHRlcg0KPiAtPiBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgc2xhdmUgcGVyIGJ1cw0KPiAtPiB1 c2UgdGhlIGJ1cyBzcGVlZCBzcGVjaWZpZWQgYnkgdGhlIHNsYXZlcyBkZWNsYXJlZCBpbiB0aGUg RFNEVCBpbnN0ZWFkIG9mDQo+ICAgIGFzc3VtaW5nIHNwZWVkID09IDQwMGtiaXRzL3MNCj4gLT4g aW5zdGVhZCBvZiBremFsbG9jJ2luZyBhIGJ1ZmZlciBmb3IgZXZlcnkgbGVzcyB0aGFuIDMyIGJ5 dGVzIHJlYWRzLCBzaW1wbHkNCj4gICAgdXNlIGkyY19tc2cuYnVmDQo+IC0+IGZpeCBidWZmZXIg b3ZlcnJlYWRzL292ZXJmbG93cyB3aGVuICg8PTMyIGJ5dGVzKSBtZXNzYWdlIGxlbmd0aHMgYXJl bid0IGENCj4gICAgbXVsdGlwbGUgb2YgNCBieSB1c2luZyBtZW1jcHlfZnJvbWlvIGFuZCBtZW1j cHlfdG9pbw0KPiAtPiB1c2Ugc3RyZWFtaW5nIERNQSBtYXBwaW5ncyBpbnN0ZWFkIG9mIGFsbG9j YXRpbmcgYSBjb2hlcmVudCBETUEgYnVmZmVyIGZvcg0KPiAgICBldmVyeSA+MzIgYnl0ZXMgcmVh ZC93cml0ZQ0KPiAtPiBwcm9wZXJseSBjaGVjayBmb3IgdGltZW91dHMgZHVyaW5nIGkyY19hbWRf eGZlciBhbmQgaW5jcmVhc2UgaXQgZnJvbSA1MA0KPiAgICBqaWZmaWVzIHRvIDI1MCBtc2VjcyAo d2hpY2ggaXMgbW9yZSBpbiBsaW5lIHdpdGggb3RoZXIgZHJpdmVycykNCj4gLT4gY29tcGxldGUg YW1kX2kyY19kZXYubXNnIGV2ZW4gaWYgdGhlIGRldmljZSBkb2Vzbid0IHJldHVybiBhIHh4eF9z dWNjZXNzDQo+ICAgIGV2ZW50LCBpbnN0ZWFkIG9mIHN0YWxsaW5nIGkyY19hbWRfeGZlcg0KPiAt PiByZW1vdmVkIHRoZSBzcGlubG9jayBhbmQgbWRlbGF5IGR1cmluZyBpMmNfYW1kX3BjaV9jb25m aWd1cmUsIEkgZGlkbid0IHNlZQ0KPiAgICB0aGUgcG9pbnQgc2luY2UgaXQncyBhbHJlYWR5IHdh aXRpbmcgZm9yIGEgaTJjX2J1c2VuYWJsZV9jb21wbGV0ZSBldmVudA0KPiAtPiBhZGQgYW4gYWRh cHRlci1zcGVjaWZpYyBtdXRleCBsb2NrIGZvciBpMmNfYW1kX3hmZXIsIHNpbmNlIHdlIGRvbid0 IHdhbnQNCj4gICAgcGFyYWxsZWwgY2FsbHMgd3JpdGluZyB0byBBTURfQzJQX01TRzAgKG9yIEFN RF9DMlBfTVNHMSkNCj4gLT4gYWRkIGEgZ2xvYmFsIG11dGV4IGxvY2sgZm9yIHJlZ2lzdGVycyBB TURfQzJQX01TRzIgdG8gQU1EX0MyUF9NU0c5LCAgd2hpY2gNCj4gICAgYXJlIHNoYXJlZCBhY3Jv c3MgdGhlIHR3byBidXNzZXMvYWRhcHRlcnMNCj4gLT4gYWRkIE1PRFVMRV9ERVZJQ0VfVEFCTEUg dG8gYXV0b21hdGljYWxseSBsb2FkIGkyYy1hbWQtcGxhdGRydiBpZiB0aGUgRFNEVA0KPiAgICBl bnVtZXJhdGVzIGRldmljZXMgd2l0aCB0aGUgIkFNREkwMDExIiBISUQNCj4gLT4gc2V0IG1heGlt dW0gbGVuZ3RoIG9mIHJlYWRzL3dyaXRlcyB0byA0MDk1IChldmVudCdzIGxlbmd0aCBmaWVsZCBp cyAxMiBiaXRzKQ0KPiAtPiBiYXNpYyBQTSBzdXBwb3J0DQo+IC0+IHN0eWxlIGNvcnJlY3Rpb25z IHRvIG1hdGNoIHRoZSBrZXJuZWwgY29kZSBzdHlsZSwgYW5kIHRyaWVkIHRvIHJlZHVjZSBjb2Rl DQo+ICAgIGR1cGxpY2F0aW9uIHdoZW5ldmVyIHBvc3NpYmxlDQo+IA0KPiBDaGFuZ2VzIHNpbmNl IHY0IGJ5IEVsaWUgTS46DQo+IA0KPiAtPiBmaXggbWlzc2luZyB0eXBlY2FzdCB3YXJuaW5nDQo+ IC0+IHJlbW92ZWQgdGhlIGR1cGxpY2F0ZWQgZW50cnkgaW4gS2NvbmZpZw0KPiANCj4gQ2hhbmdl cyBzaW5jZSB2NSBieSBFbGllIE0uOg0KPiANCj4gLT4gbW92ZSBETUEgbWFwcGluZyBmcm9tIHRo ZSBwbGF0Zm9ybSBkcml2ZXIgdG8gdGhlIFBDSSBkcml2ZXINCj4gLT4gYXR0ZW1wdCB0byBmaW5k IHRoZSBwbGF0Zm9ybSBkZXZpY2UncyBQQ0kgcGFyZW50IHRocm91Z2ggdGhlIF9ERVAgQUNQSSBt ZXRob2QNCj4gICAgKGlmIG5vdCBmb3VuZCB0YWtlIHRoZSBmaXJzdCBNUDIgZGV2aWNlIHJlZ2lz dHJlZCBpbiB0aGUgaTJjLWFtZC1wY2ktbXAyDQo+ICAgIGRyaXZlciwgbGlrZSBiZWZvcmUpDQo+ IC0+IGRvIG5vdCBhc3N1bWUgYW55bW9yZSB0aGF0IHRoZSBQQ0kgZGV2aWNlIGlzIG93bmVkIGJ5 IHRoZSBpMmMtYW1kLXBjaS1tcDINCj4gICAgZHJpdmVyDQo+IC0+IGFkZHJlc3Mgb3RoZXIgcmV2 aWV3IGNvbW1lbnRzIGJ5IEJqb3JuIEhlbGdhYXMgKG1lYW50IGZvciB2MykNCj4gDQo+IENoYW5n ZXMgc2luY2UgdjYgYnkgRWxpZSBNLjoNCj4gDQo+IC0+IHJlbW92ZSB1bm5lY2Vzc2FyeSBtZW1j cHkgZnJvbSB0aGUgRE1BIGJ1ZmZlciBkdXJpbmcgaTJjX2FtZF9yZWFkX2NvbXBsZXRpb24NCj4g DQo+IENoYW5nZXMgc2luY2UgdjcgYnkgRWxpZSBNLjoNCj4gDQo+IC0+IG1lcmdlIHRoZSB0d28g bW9kdWxlcyBpbnRvIG9uZSBuYW1lZCBpMmMtYW1kLW1wMiwgZGVsZXRlIG5vdyB1c2VsZXNzIGV4 cG9ydHMNCj4gLT4gdW5sb2NrIHRoZSBDMlAgbXV0ZXggaWYgaTJjX2FtZF94ZmVyX21zZyB0aW1l b3V0cywgdG8gcHJldmVudCBzdGFsbGluZyB0aGUNCj4gICAgTVAyIGNvbnRyb2xsZXIgaWYgYSBz bGF2ZSBkb2Vzbid0IHJlc3BvbmQgdG8gYSByZWFkIG9yIHdyaXRlIHJlcXVlc3QNCj4gLT4gdW5t YXAgdGhlIERNQSBidWZmZXIgYmVmb3JlIHJlYWQvd3JpdGVfY29tcGxldGUNCj4gLT4gZml4IGJ1 c19kaXNhYmxlIGNvbW1hbmRzIGhhbmRsaW5nIChubyBtb3JlIGVycm9ycyBkdXJpbmcgbW9kdWxl IGV4aXQpDQo+IC0+IHByZWZlciBtYW5hZ2VkIHZlcnNpb25zIG9mIHBjaV8gYW5kIGRldl8gZnVu Y3Rpb25zIHdoZW5ldmVyIHBvc3NpYmxlDQo+IC0+IGluY3JlYXNlIGFkYXB0ZXIgcmV0cmllcyBm cm9tIDAgdG8gMw0KPiAtPiByZWR1Y2UgY29kZSBkdXBsaWNhdGlvbiBpbiBkZWJ1Z2ZzIGZ1bmN0 aW9ucw0KPiAtPiBhZGRyZXNzIG90aGVyIHJldmlldyBwb2ludHMgYnkgQmpvcm4gSGVsZ2FhcyAo ZXhjZXB0IHJlZ2FyZGluZyB0aGUgX0RFUA0KPiAgICBoaW50KQ0KPiANCj4gQ2hhbmdlcyBzaW5j ZSB2OCBieSBFbGllIE0uOg0KPiANCj4gLT4gcmVtb3ZlIG1vc3RseSByZWR1bmRhbnQgYW1kX2ky Y19yd19jb25maWcsIHJlZmVyIHRvIGkyY19tc2cgd2hlbmV2ZXINCj4gcG9zc2libGUNCj4gLT4g dXNlIGkyY19nZXRfZG1hX3NhZmVfbXNnX2J1ZiBhbmQgaTJjX3B1dF9kbWFfc2FmZV9tc2dfYnVm DQo+IC0+IGRlZmVyIHByb2JlKCkgYnkgdGhlIHBsYXRmb3JtIGRyaXZlciBpZiBubyBNUDIgZGV2 aWNlIGhhcyBiZWVuIHByb2JlZA0KPiB5ZXQgYnkgdGhlIFBDSSBkcml2ZXIgKHdoaWNoIHNob3Vs ZCBhZGRyZXNzIEJqb3JuIEhlbGdhYXMnIGNvbmNlcm4gd2hpbGUNCj4gcHJlc2VydmluZyB0aGUg cGxhdGZvcm0gZHJpdmVyKQ0KPiAtPiBpZiB0aGUgaW50ZXJydXB0IGZvbGxvd2luZyBhIGNvbW1h bmQgZG9lc24ndCBnZXQgaGFuZGxlZCBhZnRlciAyNTBtcywNCj4gemVybyBBTURfUDJDX01TR19J TlRFTiB0byBwcmV2ZW50IHRoZSBNUDIgZnJvbSBzdGFsbGluZyBmb3IgYSBmZXcgbW9yZQ0KPiBz ZWNvbmRzDQo+IC0+IGluY2x1ZGUgQU1EX1AyQ19NU0czIGFuZCBmaXggdHlwbyBpbiBkZWJ1Z2Zz IG91dHB1dA0KPiAtPiBjb3NtZXRpYyBmaXhlcywgY29kZSByZWR1Y3Rpb24sIGFuZCBiZXR0ZXIg Y29tbWVudHMNCj4gLT4gYWRkIE5laGFsIFNoYWggYW5kIFNoeWFtIFN1bmRhciBTIEsgZnJvbSBB TUQgdG8gdGhlIGxpc3Qgb2YgbWFpbnRhaW5lcnMNCj4gDQo+IENoYW5nZXMgc2luY2UgdjkgYnkg RWxpZSBNLjoNCj4gDQo+IC0+IHJlbW92ZSB0aGUgeGZlcl9sb2NrIG11dGV4IHdoaWNoIHdhcyBy ZWR1bmRhbnQgd2l0aCBpMmNfYWRhcHRlci5idXNfbG9jaw0KPiAtPiBwbGF0Zm9ybSBkZXZpY2Ug cmVtb3ZlKCkgZml4ZXMgKHByb3RlY3Rpb24gYWdhaW5zdCB0aGUgdmVyeSB1bmxpa2VseQ0KPiBj YXNlIHRoYXQgYm90aCB0aGUgUENJIGFuZCBwbGF0Zm9ybSBkZXZpY2VzIGdldCBkZXRhY2hlZCBt YW51YWxseSBhbmQNCj4gc2ltdWx0YW5lb3VzbHkpDQo+IC0+IGZpeCBtYW51YWxseSB1bmJpbmRp bmcgdGhlIFBDSSBkZXZpY2UgYW5kIHRoZW4gcmViaW5kaW5nLCB0aGVyZSB3YXMgYW4NCj4gaW50 ZXJydXB0IHRoYXQgd291bGRuJ3QgZ2V0IHNlcnZpY2VkIGFuZCB0aHVzIHRoZSBsaW5lIGdvdCBk aXNhYmxlZA0KPiAtPiBsb29rIGZvciB0aGUgTVAyIGRldmljZSBjb3JyZXNwb25kaW5nIHRvIGFu IEFNREkwMDExIEFDUEkgZGV2aWNlIGluDQo+IGV2ZXJ5IGRldmljZSBlbnVtZXJhdGVkIGJ5IF9E RVAsIG5vdCBqdXN0IHRoZSBmaXJzdCBvbmUNCj4gLT4gc2V0IGkyY19hZGFwdGVyLm5yIHRvIHBk ZXYtPmlkIGFuZCBjYWxsIGkyY19hZGRfbnVtYmVyZWRfYWRhcHRlcigpDQo+IC0+IGFkZCBEb2N1 bWVudGF0aW9uL2kyYy9idXNzZXMvIGVudHJ5DQo+IC0+IG1pbm9yIGVuaGFuY2VtZW50cw0KPiAN Cj4gQ2hhbmdlcyBzaW5jZSB2MTAgYnkgRWxpZSBNLjoNCj4gDQo+IC0+IHJ1bnRpbWUgUE0gc3Vw cG9ydA0KPiAtPiBzeW5jaHJvbmlzYXRpb24gZml4ZXMgZm9yIDw9MzIgYnl0ZXMgcmVhZHMvd3Jp dGVzIHRocm91Z2ggQzJQIHJlZ2lzdGVycywNCj4gbm8gbW9yZSB0aW1lb3V0cyBvciAiaXJxOiBu b2JvZHkgY2FyZWQiIGVycm9ycyBvbiBMZW5vdm8gSWRlYXBhZCA1MzBzDQo+IC0+IHJlbW92ZSB0 aGUgaXNyIHNwaW5sb2NrLCBub3QgbmVlZGVkIHNpbmNlIGlzciBhcmVuJ3QgcmUtZW50cmFudA0K PiAtPiByZW1vdmUgdGhlIGRlbGF5ZWRfd29yayBmaWVsZCwgbWFrZSB0aGUgaXNyIGNvbXBsZXRl IC5jbWRfY29tcGxldGUNCj4gZGlyZWN0bHkNCj4gLT4geGZlciBub3cgcmV0dXJucyAtRUlPIGlm IHRoZSBNUDIgcmVzcG9uc2UgaXNuJ3QgdGhlIGV4cGVjdGVkIG9uZQ0KPiAtPiBjaGVjayB0aGF0 IHRoZSBhZGFwdGVyIHN0aWxsIGV4aXN0cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHhmZXINCj4gLT4g bGVzcyBjb2RlIGR1cGxpY2F0aW9uIGluIGFtZF9tcDJfcmVhZC93cml0ZQ0KPiAtPiBiZXR0ZXIg bmFtZXMgKGJ1c194bmFibGUgPT4gYnVzX2VuYWJsZV9zZXQsIF9tc2cgPT4gX2NtZCkgYW5kIG90 aGVyDQo+IG1pbm9yIGVuaGFuY2VtZW50cw0KPiANCj4gQ2hhbmdlcyBzaW5jZSB2MTEgYnkgRWxp ZSBNLjoNCj4gDQo+IC0+IHJlbW92ZSB0aGUgQUNQSSBfREVQIGhpbnQsIE5laGFsIGZyb20gQU1E IHNhaWQgdGhhdCB0aGVyZSdzIG5vIHBsYW4gdG8NCj4gaGF2ZSBtb3JlIHRoYW4gb25lIE1QMiBk ZXZpY2UgcGVyIHN5c3RlbSBhbmQgdGhpcyB3YXNuJ3QgX0RFUCdzIHB1cnBvc2UNCj4gLT4gdXNl IGRldmljZSBsaW5rcyBiZXR3ZWVuIHRoZSB0d28gZHJpdmVycyB0byBzaW1wbGlmeSB0aGUgLnJl bW92ZSBsb2dpYw0KPiAtPiBkbyBub3QgaGFyZGNvZGUgdGhlIGkyYyBhZGFwdGVyIHRpbWVvdXQN Cj4gLT4gY29kZSByZWR1Y3Rpb24gYW5kIGNvbW1lbnQgZml4ZXMNCj4gDQo+IENoYW5nZXMgc2lu Y2UgdjEyIGJ5IEVsaWUgTS46DQo+IA0KPiAtPiBmaXggdGhlIHR3byB3YXJuaW5ncyBieSB0aGUg a2J1aWxkIHRlc3QgYm90DQo+IA0KPiBDaGFuZ2VzIHNpbmNlIHYxMyBieSBFbGllIE0uLCByZXF1 ZXN0ZWQgYnkgTmVoYWwgU2hhaCBmcm9tIEFNRDoNCj4gDQo+IC0+IHNwbGl0IHRoZSBpMmMtYW1k LW1wMiBtb2R1bGUgYmFjayBpbnRvIHR3bywgaTJjLWFtZC1tcDItcGNpIGFuZA0KPiBpMmMtYW1k LW1wMi1wbGF0DQo+IC0+IG1vdmUgRE1BIG1hcHBpbmcgYmFjayBpbnRvIHRoZSBwbGF0Zm9ybSBk cml2ZXINCj4gDQo+IENoYW5nZXMgc2luY2UgdjE0IGJ5IEVsaWUgTS46DQo+IA0KPiAtPiBmaXgg YnVpbGQgZmFpbHVyZSBpZiBDT05GSUdfUE0gaXNuJ3QgZGVmaW5lZA0KPiANCj4gQ2hhbmdlcyBz aW5jZSB2MTUgYnkgRWxpZSBNLjoNCj4gDQo+IC0+IGNoYW5nZXMgcmVxdWVzdGVkIGJ5IFdvbGZy YW0gU2FuZyBpbiBoaXMgdjE1IHJldmlldw0KPiANCj4gQ2hhbmdlcyBzaW5jZSB2MTYgYnkgRWxp ZSBNLjoNCj4gDQo+IC0+IGVuc3VyZSB0aGF0IHdyaXRlcSBnZXRzIGRlZmluZWQNCj4gLT4gZml4 IHRoZSBkZXZpY2UgbmFtZSBpbiBEb2N1bWVudGF0aW9uLyB0byBtYXRjaCB0aGUgZW50cnkgYXQg cGNpLWlkcyAoaHR0cHM6Ly9wY2ktaWRzLnVjdy5jei9yZWFkL1BDLzEwMjIvMTVlNikNCj4gLT4g cmVtb3ZlIHRoZSB1bnVzZWQgRFJJVkVSX3h4eCBkZWZpbmVzIChmb3Jnb3QgdG8gcmVtb3ZlIHRo ZW0gaW4gdjE2KQ0KPiANCj4gIERvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtYW1kLW1wMiAg fCAgMjMgKysNCj4gIE1BSU5UQUlORVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDgg Kw0KPiAgZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcgICAgICAgICAgICB8ICAxMCArDQo+ICBk cml2ZXJzL2kyYy9idXNzZXMvTWFrZWZpbGUgICAgICAgICAgIHwgICAxICsNCj4gIGRyaXZlcnMv aTJjL2J1c3Nlcy9pMmMtYW1kLW1wMi1wY2kuYyAgfCA0ODMgKysrKysrKysrKysrKysrKysrKysr KysrKysNCj4gIGRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kLW1wMi1wbGF0LmMgfCAzNjcgKysr KysrKysrKysrKysrKysrKw0KPiAgZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQtbXAyLmggICAg ICB8IDIxOSArKysrKysrKysrKysNCj4gIDcgZmlsZXMgY2hhbmdlZCwgMTExMSBpbnNlcnRpb25z KCspDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1h bWQtbXAyDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQt bXAyLXBjaS5jDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1h bWQtbXAyLXBsYXQuYw0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvaTJjL2J1c3Nlcy9p MmMtYW1kLW1wMi5oDQo+IA0KPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2Vz L2kyYy1hbWQtbXAyIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1hbWQtbXAyDQo+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uNjU3MTQ4NzE3MWY0DQo+ IC0tLSAvZGV2L251bGwNCj4gKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1hbWQt bXAyDQo+IEBAIC0wLDAgKzEsMjMgQEANCj4gK0tlcm5lbCBkcml2ZXIgaTJjLWFtZC1tcDINCj4g Kw0KPiArU3VwcG9ydGVkIGFkYXB0ZXJzOg0KPiArICAqIEFNRCBNUDIgUENJZSBpbnRlcmZhY2UN Cj4gKw0KPiArRGF0YXNoZWV0OiBub3QgcHVibGljbHkgYXZhaWxhYmxlLg0KPiArDQo+ICtBdXRo b3JzOg0KPiArCVNoeWFtIFN1bmRhciBTIEsgPFNoeWFtLXN1bmRhci5TLWtAYW1kLmNvbT4NCj4g KwlOZWhhbCBTaGFoIDxuZWhhbC1iYWt1bGNoYW5kcmEuc2hhaEBhbWQuY29tPg0KPiArCUVsaWUg TW9yaXNzZSA8c3luaXVyZ2VAZ21haWwuY29tPg0KPiArDQo+ICtEZXNjcmlwdGlvbg0KPiArLS0t LS0tLS0tLS0NCj4gKw0KPiArVGhlIE1QMiBpcyBhbiBBUk0gcHJvY2Vzc29yIHByb2dyYW1tZWQg YXMgYW4gSTJDIGNvbnRyb2xsZXIgYW5kIGNvbW11bmljYXRpbmcNCj4gK3dpdGggdGhlIHg4NiBo b3N0IHRocm91Z2ggUENJLg0KPiArDQo+ICtJZiB5b3Ugc2VlIHNvbWV0aGluZyBsaWtlIHRoaXM6 DQo+ICsNCj4gKzAzOjAwLjcgTVAyIEkyQyBjb250cm9sbGVyOiBBZHZhbmNlZCBNaWNybyBEZXZp Y2VzLCBJbmMuIFtBTURdIERldmljZSAxNWU2DQo+ICsNCj4gK2luIHlvdXIgJ2xzcGNpIC12Jywg dGhlbiB0aGlzIGRyaXZlciBpcyBmb3IgeW91ciBkZXZpY2UuDQo+IGRpZmYgLS1naXQgYS9NQUlO VEFJTkVSUyBiL01BSU5UQUlORVJTDQo+IGluZGV4IGQyNzQwMWRmMDkxZi4uNzZmOGIzYzQwMTMy IDEwMDY0NA0KPiAtLS0gYS9NQUlOVEFJTkVSUw0KPiArKysgYi9NQUlOVEFJTkVSUw0KPiBAQCAt ODA4LDYgKzgwOCwxNCBAQCBGOglkcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvdmlfc3RydWN0 cy5oDQo+ICBGOglkcml2ZXJzL2dwdS9kcm0vYW1kL2luY2x1ZGUvdjlfc3RydWN0cy5oDQo+ICBG OglpbmNsdWRlL3VhcGkvbGludXgva2ZkX2lvY3RsLmgNCj4gIA0KPiArQU1EIE1QMiBJMkMgRFJJ VkVSDQo+ICtNOglFbGllIE1vcmlzc2UgPHN5bml1cmdlQGdtYWlsLmNvbT4NCj4gK006CU5laGFs IFNoYWggPG5laGFsLWJha3VsY2hhbmRyYS5zaGFoQGFtZC5jb20+DQo+ICtNOglTaHlhbSBTdW5k YXIgUyBLIDxzaHlhbS1zdW5kYXIucy1rQGFtZC5jb20+DQo+ICtMOglsaW51eC1pMmNAdmdlci5r ZXJuZWwub3JnDQo+ICtTOglNYWludGFpbmVkDQo+ICtGOglkcml2ZXJzL2kyYy9idXNzZXMvaTJj LWFtZC1tcDIqDQo+ICsNCj4gIEFNRCBQT1dFUlBMQVkNCj4gIE06CVJleCBaaHUgPHJleC56aHVA YW1kLmNvbT4NCj4gIE06CUV2YW4gUXVhbiA8ZXZhbi5xdWFuQGFtZC5jb20+DQo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29u ZmlnDQo+IGluZGV4IGYyYzY4MTk3MTIwMS4uYzk3NDc4ZTY1MTAyIDEwMDY0NA0KPiAtLS0gYS9k cml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZw0KPiArKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvS2Nv bmZpZw0KPiBAQCAtNzcsNiArNzcsMTYgQEAgY29uZmlnIEkyQ19BTUQ4MTExDQo+ICAJICBUaGlz IGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxl DQo+ICAJICB3aWxsIGJlIGNhbGxlZCBpMmMtYW1kODExMS4NCj4gIA0KPiArY29uZmlnIEkyQ19B TURfTVAyDQo+ICsJdHJpc3RhdGUgIkFNRCBNUDIgUENJZSINCj4gKwlkZXBlbmRzIG9uIFBDSSAm JiBBQ1BJDQo+ICsJaGVscA0KPiArCSAgSWYgeW91IHNheSB5ZXMgdG8gdGhpcyBvcHRpb24sIHN1 cHBvcnQgd2lsbCBiZSBpbmNsdWRlZCBmb3IgdGhlIEFNRA0KPiArCSAgTVAyIFBDSWUgSTJDIGFk YXB0ZXIuDQo+ICsNCj4gKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIG1vZHVs ZXMuICBJZiBzbywgdGhlIG1vZHVsZXMgd2lsbA0KPiArCSAgYmUgY2FsbGVkIGkyYy1hbWQtbXAy LXBjaSBhbmQgaTJjLWFtZC1tcDItcGxhdC4NCj4gKw0KPiAgY29uZmlnIEkyQ19ISVg1SEQyDQo+ ICAJdHJpc3RhdGUgIkhpeDVoZDIgaGlnaC1zcGVlZCBJMkMgZHJpdmVyIg0KPiAgCWRlcGVuZHMg b24gQVJDSF9ISVNJIHx8IEFSQ0hfSElYNUhEMiB8fCBDT01QSUxFX1RFU1QNCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9NYWtlZmlsZSBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9NYWtl ZmlsZQ0KPiBpbmRleCA1ZjBjYjY5MTU5NjkuLjJlOThhNjYxOGNlNSAxMDA2NDQNCj4gLS0tIGEv ZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlDQo+ICsrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9N YWtlZmlsZQ0KPiBAQCAtMzMsNiArMzMsNyBAQCBvYmotJChDT05GSUdfSTJDX1BPV0VSTUFDKQkr PSBpMmMtcG93ZXJtYWMubw0KPiAgDQo+ICAjIEVtYmVkZGVkIHN5c3RlbSBJMkMvU01CdXMgaG9z dCBjb250cm9sbGVyIGRyaXZlcnMNCj4gIG9iai0kKENPTkZJR19JMkNfQUxURVJBKQkrPSBpMmMt YWx0ZXJhLm8NCj4gK29iai0kKENPTkZJR19JMkNfQU1EX01QMikJKz0gaTJjLWFtZC1tcDItcGNp Lm8gaTJjLWFtZC1tcDItcGxhdC5vDQo+ICBvYmotJChDT05GSUdfSTJDX0FTUEVFRCkJKz0gaTJj LWFzcGVlZC5vDQo+ICBvYmotJChDT05GSUdfSTJDX0FUOTEpCQkrPSBpMmMtYXQ5MS5vDQo+ICBv YmotJChDT05GSUdfSTJDX0FVMTU1MCkJKz0gaTJjLWF1MTU1MC5vDQo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZC1tcDItcGNpLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMv aTJjLWFtZC1tcDItcGNpLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAw MDAwMDAwLi40NTVlMWYzNmEyYTMNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9kcml2ZXJzL2ky Yy9idXNzZXMvaTJjLWFtZC1tcDItcGNpLmMNCj4gQEAgLTAsMCArMSw0ODMgQEANCj4gKy8vIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIEJTRC0zLUNsYXVzZQ0KPiArLyoNCj4g KyAqIEFNRCBNUDIgUENJZSBjb21tdW5pY2F0aW9uIGRyaXZlcg0KPiArICoNCj4gKyAqIEF1dGhv cnM6IFNoeWFtIFN1bmRhciBTIEsgPFNoeWFtLXN1bmRhci5TLWtAYW1kLmNvbT4NCj4gKyAqICAg ICAgICAgIEVsaWUgTW9yaXNzZSA8c3luaXVyZ2VAZ21haWwuY29tPg0KPiArICovDQo+ICsNCj4g KyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2ludGVy cnVwdC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4 L3BjaS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4NCj4gKw0KPiArI2luY2x1ZGUgImky Yy1hbWQtbXAyLmgiDQo+ICsNCj4gKyNpbmNsdWRlIDxsaW51eC9pby02NC1ub25hdG9taWMtbG8t aGkuaD4NCj4gKw0KPiArc3RhdGljIHZvaWQgYW1kX21wMl9jMnBfbXV0ZXhfbG9jayhzdHJ1Y3Qg YW1kX2kyY19jb21tb24gKmkyY19jb21tb24pDQo+ICt7DQo+ICsJc3RydWN0IGFtZF9tcDJfZGV2 ICpwcml2ZGF0YSA9IGkyY19jb21tb24tPm1wMl9kZXY7DQo+ICsNCj4gKwkvKiB0aGVyZSBpcyBv bmx5IG9uZSBkYXRhIG1haWxib3ggZm9yIHR3byBpMmMgYWRhcHRlcnMgKi8NCj4gKwltdXRleF9s b2NrKCZwcml2ZGF0YS0+YzJwX2xvY2spOw0KPiArCXByaXZkYXRhLT5jMnBfbG9ja19idXNpZCA9 IGkyY19jb21tb24tPmJ1c19pZDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgYW1kX21wMl9j MnBfbXV0ZXhfdW5sb2NrKHN0cnVjdCBhbWRfaTJjX2NvbW1vbiAqaTJjX2NvbW1vbikNCj4gK3sN Cj4gKwlzdHJ1Y3QgYW1kX21wMl9kZXYgKnByaXZkYXRhID0gaTJjX2NvbW1vbi0+bXAyX2RldjsN Cj4gKw0KPiArCWlmICh1bmxpa2VseShwcml2ZGF0YS0+YzJwX2xvY2tfYnVzaWQgIT0gaTJjX2Nv bW1vbi0+YnVzX2lkKSkgew0KPiArCQlkZXZfd2FybihuZGV2X2Rldihwcml2ZGF0YSksDQo+ICsJ CQkgImJ1cyAlZCBhdHRlbXB0aW5nIHRvIHVubG9jayBDMlAgbG9ja2VkIGJ5IGJ1cyAlZFxuIiwN Cj4gKwkJCSBpMmNfY29tbW9uLT5idXNfaWQsIHByaXZkYXRhLT5jMnBfbG9ja19idXNpZCk7DQo+ ICsJCXJldHVybjsNCj4gKwl9DQo+ICsNCj4gKwltdXRleF91bmxvY2soJnByaXZkYXRhLT5jMnBf bG9jayk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgYW1kX21wMl9jbWQoc3RydWN0IGFtZF9p MmNfY29tbW9uICppMmNfY29tbW9uLA0KPiArCQkgICAgICAgdW5pb24gaTJjX2NtZF9iYXNlIGky Y19jbWRfYmFzZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgYW1kX21wMl9kZXYgKnByaXZkYXRhID0gaTJj X2NvbW1vbi0+bXAyX2RldjsNCj4gKwl2b2lkIF9faW9tZW0gKnJlZzsNCj4gKw0KPiArCWkyY19j b21tb24tPnJlcWNtZCA9IGkyY19jbWRfYmFzZS5zLmkyY19jbWQ7DQo+ICsNCj4gKwlyZWcgPSBw cml2ZGF0YS0+bW1pbyArICgoaTJjX2NtZF9iYXNlLnMuYnVzX2lkID09IDEpID8NCj4gKwkJCQlB TURfQzJQX01TRzEgOiBBTURfQzJQX01TRzApOw0KPiArCXdyaXRlbChpMmNfY21kX2Jhc2UudWws IHJlZyk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiAraW50IGFtZF9tcDJfYnVz X2VuYWJsZV9zZXQoc3RydWN0IGFtZF9pMmNfY29tbW9uICppMmNfY29tbW9uLCBib29sIGVuYWJs ZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgYW1kX21wMl9kZXYgKnByaXZkYXRhID0gaTJjX2NvbW1vbi0+ bXAyX2RldjsNCj4gKwl1bmlvbiBpMmNfY21kX2Jhc2UgaTJjX2NtZF9iYXNlOw0KPiArDQo+ICsJ ZGV2X2RiZyhuZGV2X2Rldihwcml2ZGF0YSksICIlcyBpZDogJWRcbiIsIF9fZnVuY19fLA0KPiAr CQlpMmNfY29tbW9uLT5idXNfaWQpOw0KPiArDQo+ICsJaTJjX2NtZF9iYXNlLnVsID0gMDsNCj4g KwlpMmNfY21kX2Jhc2Uucy5pMmNfY21kID0gZW5hYmxlID8gaTJjX2VuYWJsZSA6IGkyY19kaXNh YmxlOw0KPiArCWkyY19jbWRfYmFzZS5zLmJ1c19pZCA9IGkyY19jb21tb24tPmJ1c19pZDsNCj4g KwlpMmNfY21kX2Jhc2Uucy5pMmNfc3BlZWQgPSBpMmNfY29tbW9uLT5pMmNfc3BlZWQ7DQo+ICsN Cj4gKwlhbWRfbXAyX2MycF9tdXRleF9sb2NrKGkyY19jb21tb24pOw0KPiArDQo+ICsJcmV0dXJu IGFtZF9tcDJfY21kKGkyY19jb21tb24sIGkyY19jbWRfYmFzZSk7DQo+ICt9DQo+ICtFWFBPUlRf U1lNQk9MX0dQTChhbWRfbXAyX2J1c19lbmFibGVfc2V0KTsNCj4gKw0KPiArc3RhdGljIHZvaWQg YW1kX21wMl9jbWRfcndfZmlsbChzdHJ1Y3QgYW1kX2kyY19jb21tb24gKmkyY19jb21tb24sDQo+ ICsJCQkJdW5pb24gaTJjX2NtZF9iYXNlICppMmNfY21kX2Jhc2UsDQo+ICsJCQkJZW51bSBpMmNf Y21kIHJlcWNtZCkNCj4gK3sNCj4gKwlpMmNfY21kX2Jhc2UtPnMuaTJjX2NtZCA9IHJlcWNtZDsN Cj4gKwlpMmNfY21kX2Jhc2UtPnMuYnVzX2lkID0gaTJjX2NvbW1vbi0+YnVzX2lkOw0KPiArCWky Y19jbWRfYmFzZS0+cy5pMmNfc3BlZWQgPSBpMmNfY29tbW9uLT5pMmNfc3BlZWQ7DQo+ICsJaTJj X2NtZF9iYXNlLT5zLnNsYXZlX2FkZHIgPSBpMmNfY29tbW9uLT5tc2ctPmFkZHI7DQo+ICsJaTJj X2NtZF9iYXNlLT5zLmxlbmd0aCA9IGkyY19jb21tb24tPm1zZy0+bGVuOw0KPiArfQ0KPiArDQo+ ICtpbnQgYW1kX21wMl9ydyhzdHJ1Y3QgYW1kX2kyY19jb21tb24gKmkyY19jb21tb24sIGVudW0g aTJjX2NtZCByZXFjbWQpDQo+ICt7DQo+ICsJc3RydWN0IGFtZF9tcDJfZGV2ICpwcml2ZGF0YSA9 IGkyY19jb21tb24tPm1wMl9kZXY7DQo+ICsJdW5pb24gaTJjX2NtZF9iYXNlIGkyY19jbWRfYmFz ZTsNCj4gKw0KPiArCWFtZF9tcDJfY21kX3J3X2ZpbGwoaTJjX2NvbW1vbiwgJmkyY19jbWRfYmFz ZSwgcmVxY21kKTsNCj4gKwlhbWRfbXAyX2MycF9tdXRleF9sb2NrKGkyY19jb21tb24pOw0KPiAr DQo+ICsJaWYgKGkyY19jb21tb24tPm1zZy0+bGVuIDw9IDMyKSB7DQo+ICsJCWkyY19jbWRfYmFz ZS5zLm1lbV90eXBlID0gdXNlX2MycG1zZzsNCj4gKwkJaWYgKHJlcWNtZCA9PSBpMmNfd3JpdGUp DQo+ICsJCQltZW1jcHlfdG9pbyhwcml2ZGF0YS0+bW1pbyArIEFNRF9DMlBfTVNHMiwNCj4gKwkJ CQkgICAgaTJjX2NvbW1vbi0+bXNnLT5idWYsDQo+ICsJCQkJICAgIGkyY19jb21tb24tPm1zZy0+ bGVuKTsNCj4gKwl9IGVsc2Ugew0KPiArCQlpMmNfY21kX2Jhc2Uucy5tZW1fdHlwZSA9IHVzZV9k cmFtOw0KPiArCQl3cml0ZXEoKHU2NClpMmNfY29tbW9uLT5kbWFfYWRkciwNCj4gKwkJICAgICAg IHByaXZkYXRhLT5tbWlvICsgQU1EX0MyUF9NU0cyKTsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4g YW1kX21wMl9jbWQoaTJjX2NvbW1vbiwgaTJjX2NtZF9iYXNlKTsNCj4gK30NCj4gK0VYUE9SVF9T WU1CT0xfR1BMKGFtZF9tcDJfcncpOw0KPiArDQo+ICtzdGF0aWMgdm9pZCBhbWRfbXAyX3BjaV9j aGVja19yd19ldmVudChzdHJ1Y3QgYW1kX2kyY19jb21tb24gKmkyY19jb21tb24pDQo+ICt7DQo+ ICsJc3RydWN0IGFtZF9tcDJfZGV2ICpwcml2ZGF0YSA9IGkyY19jb21tb24tPm1wMl9kZXY7DQo+ ICsJaW50IGxlbiA9IGkyY19jb21tb24tPmV2ZW50dmFsLnIubGVuZ3RoOw0KPiArCXUzMiBzbGF2 ZV9hZGRyID0gaTJjX2NvbW1vbi0+ZXZlbnR2YWwuci5zbGF2ZV9hZGRyOw0KPiArCWJvb2wgZXJy ID0gZmFsc2U7DQo+ICsNCj4gKwlpZiAodW5saWtlbHkobGVuICE9IGkyY19jb21tb24tPm1zZy0+ bGVuKSkgew0KPiArCQlkZXZfZXJyKG5kZXZfZGV2KHByaXZkYXRhKSwNCj4gKwkJCSJsZW5ndGgg JWQgaW4gZXZlbnQgZG9lc24ndCBtYXRjaCBidWZmZXIgbGVuZ3RoICVkIVxuIiwNCj4gKwkJCWxl biwgaTJjX2NvbW1vbi0+bXNnLT5sZW4pOw0KPiArCQllcnIgPSB0cnVlOw0KPiArCX0NCj4gKw0K PiArCWlmICh1bmxpa2VseShzbGF2ZV9hZGRyICE9IGkyY19jb21tb24tPm1zZy0+YWRkcikpIHsN Cj4gKwkJZGV2X2VycihuZGV2X2Rldihwcml2ZGF0YSksDQo+ICsJCQkidW5leHBlY3RlZCBzbGF2 ZSBhZGRyZXNzICV4IChleHBlY3RlZDogJXgpIVxuIiwNCj4gKwkJCXNsYXZlX2FkZHIsIGkyY19j b21tb24tPm1zZy0+YWRkcik7DQo+ICsJCWVyciA9IHRydWU7DQo+ICsJfQ0KPiArDQo+ICsJaWYg KCFlcnIpDQo+ICsJCWkyY19jb21tb24tPmNtZF9zdWNjZXNzID0gdHJ1ZTsNCj4gK30NCj4gKw0K PiArc3RhdGljIHZvaWQgX19hbWRfbXAyX3Byb2Nlc3NfZXZlbnQoc3RydWN0IGFtZF9pMmNfY29t bW9uICppMmNfY29tbW9uKQ0KPiArew0KPiArCXN0cnVjdCBhbWRfbXAyX2RldiAqcHJpdmRhdGEg PSBpMmNfY29tbW9uLT5tcDJfZGV2Ow0KPiArCWVudW0gc3RhdHVzX3R5cGUgc3RzID0gaTJjX2Nv bW1vbi0+ZXZlbnR2YWwuci5zdGF0dXM7DQo+ICsJZW51bSByZXNwb25zZV90eXBlIHJlcyA9IGky Y19jb21tb24tPmV2ZW50dmFsLnIucmVzcG9uc2U7DQo+ICsJaW50IGxlbiA9IGkyY19jb21tb24t PmV2ZW50dmFsLnIubGVuZ3RoOw0KPiArDQo+ICsJaWYgKHJlcyAhPSBjb21tYW5kX3N1Y2Nlc3Mp IHsNCj4gKwkJaWYgKHJlcyAhPSBjb21tYW5kX2ZhaWxlZCkNCj4gKwkJCWRldl9lcnIobmRldl9k ZXYocHJpdmRhdGEpLCAiaW52YWxpZCByZXNwb25zZSB0byBpMmMgY29tbWFuZCFcbiIpOw0KPiAr CQlyZXR1cm47DQo+ICsJfQ0KPiArDQo+ICsJc3dpdGNoIChpMmNfY29tbW9uLT5yZXFjbWQpIHsN Cj4gKwljYXNlIGkyY19yZWFkOg0KPiArCQlpZiAoc3RzID09IGkyY19yZWFkY29tcGxldGVfZXZl bnQpIHsNCj4gKwkJCWFtZF9tcDJfcGNpX2NoZWNrX3J3X2V2ZW50KGkyY19jb21tb24pOw0KPiAr CQkJaWYgKGxlbiA8PSAzMikNCj4gKwkJCQltZW1jcHlfZnJvbWlvKGkyY19jb21tb24tPm1zZy0+ YnVmLA0KPiArCQkJCQkgICAgICBwcml2ZGF0YS0+bW1pbyArIEFNRF9DMlBfTVNHMiwNCj4gKwkJ CQkJICAgICAgbGVuKTsNCj4gKwkJfSBlbHNlIGlmIChzdHMgIT0gaTJjX3JlYWRmYWlsX2V2ZW50 KSB7DQo+ICsJCQlkZXZfZXJyKG5kZXZfZGV2KHByaXZkYXRhKSwNCj4gKwkJCQkiaW52YWxpZCBp MmMgc3RhdHVzIGFmdGVyIHJlYWQgKCVkKSFcbiIsIHN0cyk7DQo+ICsJCX0NCj4gKwkJYnJlYWs7 DQo+ICsJY2FzZSBpMmNfd3JpdGU6DQo+ICsJCWlmIChzdHMgPT0gaTJjX3dyaXRlY29tcGxldGVf ZXZlbnQpDQo+ICsJCQlhbWRfbXAyX3BjaV9jaGVja19yd19ldmVudChpMmNfY29tbW9uKTsNCj4g KwkJZWxzZSBpZiAoc3RzICE9IGkyY193cml0ZWZhaWxfZXZlbnQpDQo+ICsJCQlkZXZfZXJyKG5k ZXZfZGV2KHByaXZkYXRhKSwNCj4gKwkJCQkiaW52YWxpZCBpMmMgc3RhdHVzIGFmdGVyIHdyaXRl ICglZCkhXG4iLCBzdHMpOw0KPiArCQlicmVhazsNCj4gKwljYXNlIGkyY19lbmFibGU6DQo+ICsJ CWlmIChzdHMgPT0gaTJjX2J1c2VuYWJsZV9jb21wbGV0ZSkNCj4gKwkJCWkyY19jb21tb24tPmNt ZF9zdWNjZXNzID0gdHJ1ZTsNCj4gKwkJZWxzZSBpZiAoc3RzICE9IGkyY19idXNlbmFibGVfZmFp bGVkKQ0KPiArCQkJZGV2X2VycihuZGV2X2Rldihwcml2ZGF0YSksDQo+ICsJCQkJImludmFsaWQg aTJjIHN0YXR1cyBhZnRlciBidXMgZW5hYmxlICglZCkhXG4iLA0KPiArCQkJCXN0cyk7DQo+ICsJ CWJyZWFrOw0KPiArCWNhc2UgaTJjX2Rpc2FibGU6DQo+ICsJCWlmIChzdHMgPT0gaTJjX2J1c2Rp c2FibGVfY29tcGxldGUpDQo+ICsJCQlpMmNfY29tbW9uLT5jbWRfc3VjY2VzcyA9IHRydWU7DQo+ ICsJCWVsc2UgaWYgKHN0cyAhPSBpMmNfYnVzZGlzYWJsZV9mYWlsZWQpDQo+ICsJCQlkZXZfZXJy KG5kZXZfZGV2KHByaXZkYXRhKSwNCj4gKwkJCQkiaW52YWxpZCBpMmMgc3RhdHVzIGFmdGVyIGJ1 cyBkaXNhYmxlICglZCkhXG4iLA0KPiArCQkJCXN0cyk7DQo+ICsJCWJyZWFrOw0KPiArCWRlZmF1 bHQ6DQo+ICsJCWJyZWFrOw0KPiArCX0NCj4gK30NCj4gKw0KPiArdm9pZCBhbWRfbXAyX3Byb2Nl c3NfZXZlbnQoc3RydWN0IGFtZF9pMmNfY29tbW9uICppMmNfY29tbW9uKQ0KPiArew0KPiArCXN0 cnVjdCBhbWRfbXAyX2RldiAqcHJpdmRhdGEgPSBpMmNfY29tbW9uLT5tcDJfZGV2Ow0KPiArDQo+ ICsJaWYgKHVubGlrZWx5KGkyY19jb21tb24tPnJlcWNtZCA9PSBpMmNfbm9uZSkpIHsNCj4gKwkJ ZGV2X3dhcm4obmRldl9kZXYocHJpdmRhdGEpLA0KPiArCQkJICJyZWNlaXZlZCBtc2cgYnV0IG5v IGNtZCB3YXMgc2VudCAoYnVzID0gJWQpIVxuIiwNCj4gKwkJCSBpMmNfY29tbW9uLT5idXNfaWQp Ow0KPiArCQlyZXR1cm47DQo+ICsJfQ0KPiArDQo+ICsJX19hbWRfbXAyX3Byb2Nlc3NfZXZlbnQo aTJjX2NvbW1vbik7DQo+ICsNCj4gKwlpMmNfY29tbW9uLT5yZXFjbWQgPSBpMmNfbm9uZTsNCj4g KwlhbWRfbXAyX2MycF9tdXRleF91bmxvY2soaTJjX2NvbW1vbik7DQo+ICt9DQo+ICtFWFBPUlRf U1lNQk9MX0dQTChhbWRfbXAyX3Byb2Nlc3NfZXZlbnQpOw0KPiArDQo+ICtzdGF0aWMgaXJxcmV0 dXJuX3QgYW1kX21wMl9pcnFfaXNyKGludCBpcnEsIHZvaWQgKmRldikNCj4gK3sNCj4gKwlzdHJ1 Y3QgYW1kX21wMl9kZXYgKnByaXZkYXRhID0gZGV2Ow0KPiArCXN0cnVjdCBhbWRfaTJjX2NvbW1v biAqaTJjX2NvbW1vbjsNCj4gKwl1MzIgdmFsOw0KPiArCXVuc2lnbmVkIGludCBidXNfaWQ7DQo+ ICsJdm9pZCBfX2lvbWVtICpyZWc7DQo+ICsJZW51bSBpcnFyZXR1cm4gcmV0ID0gSVJRX05PTkU7 DQo+ICsNCj4gKwlmb3IgKGJ1c19pZCA9IDA7IGJ1c19pZCA8IDI7IGJ1c19pZCsrKSB7DQo+ICsJ CWkyY19jb21tb24gPSBwcml2ZGF0YS0+YnVzc2VzW2J1c19pZF07DQo+ICsJCWlmICghaTJjX2Nv bW1vbikNCj4gKwkJCWNvbnRpbnVlOw0KPiArDQo+ICsJCXJlZyA9IHByaXZkYXRhLT5tbWlvICsg KChidXNfaWQgPT0gMCkgPw0KPiArCQkJCQlBTURfUDJDX01TRzEgOiBBTURfUDJDX01TRzIpOw0K PiArCQl2YWwgPSByZWFkbChyZWcpOw0KPiArCQlpZiAodmFsICE9IDApIHsNCj4gKwkJCXdyaXRl bCgwLCByZWcpOw0KPiArCQkJd3JpdGVsKDAsIHByaXZkYXRhLT5tbWlvICsgQU1EX1AyQ19NU0df SU5URU4pOw0KPiArCQkJaTJjX2NvbW1vbi0+ZXZlbnR2YWwudWwgPSB2YWw7DQo+ICsJCQlpMmNf Y29tbW9uLT5jbWRfY29tcGxldGlvbihpMmNfY29tbW9uKTsNCj4gKw0KPiArCQkJcmV0ID0gSVJR X0hBTkRMRUQ7DQo+ICsJCX0NCj4gKwl9DQo+ICsNCj4gKwlpZiAocmV0ICE9IElSUV9IQU5ETEVE KSB7DQo+ICsJCXZhbCA9IHJlYWRsKHByaXZkYXRhLT5tbWlvICsgQU1EX1AyQ19NU0dfSU5URU4p Ow0KPiArCQlpZiAodmFsICE9IDApIHsNCj4gKwkJCXdyaXRlbCgwLCBwcml2ZGF0YS0+bW1pbyAr IEFNRF9QMkNfTVNHX0lOVEVOKTsNCj4gKwkJCWRldl93YXJuKG5kZXZfZGV2KHByaXZkYXRhKSwN Cj4gKwkJCQkgInJlY2VpdmVkIGlycSB3aXRob3V0IG1lc3NhZ2VcbiIpOw0KPiArCQkJcmV0ID0g SVJRX0hBTkRMRUQ7DQo+ICsJCX0NCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gcmV0Ow0KPiArfQ0K PiArDQo+ICt2b2lkIGFtZF9tcDJfcndfdGltZW91dChzdHJ1Y3QgYW1kX2kyY19jb21tb24gKmky Y19jb21tb24pDQo+ICt7DQo+ICsJaTJjX2NvbW1vbi0+cmVxY21kID0gaTJjX25vbmU7DQo+ICsJ YW1kX21wMl9jMnBfbXV0ZXhfdW5sb2NrKGkyY19jb21tb24pOw0KPiArfQ0KPiArRVhQT1JUX1NZ TUJPTF9HUEwoYW1kX21wMl9yd190aW1lb3V0KTsNCj4gKw0KPiAraW50IGFtZF9tcDJfcmVnaXN0 ZXJfY2Ioc3RydWN0IGFtZF9pMmNfY29tbW9uICppMmNfY29tbW9uKQ0KPiArew0KPiArCXN0cnVj dCBhbWRfbXAyX2RldiAqcHJpdmRhdGEgPSBpMmNfY29tbW9uLT5tcDJfZGV2Ow0KPiArDQo+ICsJ aWYgKGkyY19jb21tb24tPmJ1c19pZCA+IDEpDQo+ICsJCXJldHVybiAtRUlOVkFMOw0KPiArDQo+ ICsJaWYgKHByaXZkYXRhLT5idXNzZXNbaTJjX2NvbW1vbi0+YnVzX2lkXSkgew0KPiArCQlkZXZf ZXJyKG5kZXZfZGV2KHByaXZkYXRhKSwNCj4gKwkJCSJCdXMgJWQgYWxyZWFkeSB0YWtlbiFcbiIs IGkyY19jb21tb24tPmJ1c19pZCk7DQo+ICsJCXJldHVybiAtRUlOVkFMOw0KPiArCX0NCj4gKw0K PiArCXByaXZkYXRhLT5idXNzZXNbaTJjX2NvbW1vbi0+YnVzX2lkXSA9IGkyY19jb21tb247DQo+ ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gK0VYUE9SVF9TWU1CT0xfR1BMKGFtZF9tcDJfcmVn aXN0ZXJfY2IpOw0KPiArDQo+ICtpbnQgYW1kX21wMl91bnJlZ2lzdGVyX2NiKHN0cnVjdCBhbWRf aTJjX2NvbW1vbiAqaTJjX2NvbW1vbikNCj4gK3sNCj4gKwlzdHJ1Y3QgYW1kX21wMl9kZXYgKnBy aXZkYXRhID0gaTJjX2NvbW1vbi0+bXAyX2RldjsNCj4gKw0KPiArCXByaXZkYXRhLT5idXNzZXNb aTJjX2NvbW1vbi0+YnVzX2lkXSA9IE5VTEw7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4g K0VYUE9SVF9TWU1CT0xfR1BMKGFtZF9tcDJfdW5yZWdpc3Rlcl9jYik7DQo+ICsNCj4gK3N0YXRp YyB2b2lkIGFtZF9tcDJfY2xlYXJfcmVnKHN0cnVjdCBhbWRfbXAyX2RldiAqcHJpdmRhdGEpDQo+ ICt7DQo+ICsJaW50IHJlZzsNCj4gKw0KPiArCWZvciAocmVnID0gQU1EX0MyUF9NU0cwOyByZWcg PD0gQU1EX0MyUF9NU0c5OyByZWcgKz0gNCkNCj4gKwkJd3JpdGVsKDAsIHByaXZkYXRhLT5tbWlv ICsgcmVnKTsNCj4gKw0KPiArCWZvciAocmVnID0gQU1EX1AyQ19NU0cxOyByZWcgPD0gQU1EX1Ay Q19NU0cyOyByZWcgKz0gNCkNCj4gKwkJd3JpdGVsKDAsIHByaXZkYXRhLT5tbWlvICsgcmVnKTsN Cj4gK30NCj4gKw0KPiArc3RhdGljIGludCBhbWRfbXAyX3BjaV9pbml0KHN0cnVjdCBhbWRfbXAy X2RldiAqcHJpdmRhdGEsDQo+ICsJCQkgICAgc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpDQo+ICt7 DQo+ICsJaW50IHJjOw0KPiArDQo+ICsJcGNpX3NldF9kcnZkYXRhKHBjaV9kZXYsIHByaXZkYXRh KTsNCj4gKw0KPiArCXJjID0gcGNpbV9lbmFibGVfZGV2aWNlKHBjaV9kZXYpOw0KPiArCWlmIChy Yykgew0KPiArCQlkZXZfZXJyKG5kZXZfZGV2KHByaXZkYXRhKSwgIkZhaWxlZCB0byBlbmFibGUg TVAyIFBDSSBkZXZpY2VcbiIpOw0KPiArCQlnb3RvIGVycl9wY2lfZW5hYmxlOw0KPiArCX0NCj4g Kw0KPiArCXJjID0gcGNpbV9pb21hcF9yZWdpb25zKHBjaV9kZXYsIDEgPDwgMiwgcGNpX25hbWUo cGNpX2RldikpOw0KPiArCWlmIChyYykgew0KPiArCQlkZXZfZXJyKG5kZXZfZGV2KHByaXZkYXRh KSwgIkkvTyBtZW1vcnkgcmVtYXBwaW5nIGZhaWxlZFxuIik7DQo+ICsJCWdvdG8gZXJyX3BjaV9l bmFibGU7DQo+ICsJfQ0KPiArCXByaXZkYXRhLT5tbWlvID0gcGNpbV9pb21hcF90YWJsZShwY2lf ZGV2KVsyXTsNCj4gKw0KPiArCXBjaV9zZXRfbWFzdGVyKHBjaV9kZXYpOw0KPiArDQo+ICsJcmMg PSBwY2lfc2V0X2RtYV9tYXNrKHBjaV9kZXYsIERNQV9CSVRfTUFTSyg2NCkpOw0KPiArCWlmIChy Yykgew0KPiArCQlyYyA9IHBjaV9zZXRfZG1hX21hc2socGNpX2RldiwgRE1BX0JJVF9NQVNLKDMy KSk7DQo+ICsJCWlmIChyYykNCj4gKwkJCWdvdG8gZXJyX2RtYV9tYXNrOw0KPiArCX0NCj4gKw0K PiArCS8qIFNldCB1cCBpbnR4IGlycSAqLw0KPiArCXdyaXRlbCgwLCBwcml2ZGF0YS0+bW1pbyAr IEFNRF9QMkNfTVNHX0lOVEVOKTsNCj4gKwlwY2lfaW50eChwY2lfZGV2LCAxKTsNCj4gKwlyYyA9 IGRldm1fcmVxdWVzdF9pcnEoJnBjaV9kZXYtPmRldiwgcGNpX2Rldi0+aXJxLCBhbWRfbXAyX2ly cV9pc3IsDQo+ICsJCQkgICAgICBJUlFGX1NIQVJFRCwgZGV2X25hbWUoJnBjaV9kZXYtPmRldiks IHByaXZkYXRhKTsNCj4gKwlpZiAocmMpDQo+ICsJCWRldl9lcnIoJnBjaV9kZXYtPmRldiwgIkZh aWx1cmUgcmVxdWVzdGluZyBpcnEgJWk6ICVkXG4iLA0KPiArCQkJcGNpX2Rldi0+aXJxLCByYyk7 DQo+ICsNCj4gKwlyZXR1cm4gcmM7DQo+ICsNCj4gK2Vycl9kbWFfbWFzazoNCj4gKwlwY2lfY2xl YXJfbWFzdGVyKHBjaV9kZXYpOw0KPiArZXJyX3BjaV9lbmFibGU6DQo+ICsJcGNpX3NldF9kcnZk YXRhKHBjaV9kZXYsIE5VTEwpOw0KPiArCXJldHVybiByYzsNCj4gK30NCj4gKw0KPiArc3RhdGlj IGludCBhbWRfbXAyX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwNCj4gKwkJCSAg ICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQ0KPiArew0KPiArCXN0cnVjdCBhbWRf bXAyX2RldiAqcHJpdmRhdGE7DQo+ICsJaW50IHJjOw0KPiArDQo+ICsJcHJpdmRhdGEgPSBkZXZt X2t6YWxsb2MoJnBjaV9kZXYtPmRldiwgc2l6ZW9mKCpwcml2ZGF0YSksIEdGUF9LRVJORUwpOw0K PiArCWlmICghcHJpdmRhdGEpDQo+ICsJCXJldHVybiAtRU5PTUVNOw0KPiArDQo+ICsJcmMgPSBh bWRfbXAyX3BjaV9pbml0KHByaXZkYXRhLCBwY2lfZGV2KTsNCj4gKwlpZiAocmMpDQo+ICsJCXJl dHVybiByYzsNCj4gKw0KPiArCW11dGV4X2luaXQoJnByaXZkYXRhLT5jMnBfbG9jayk7DQo+ICsJ cHJpdmRhdGEtPnBjaV9kZXYgPSBwY2lfZGV2Ow0KPiArDQo+ICsJcG1fcnVudGltZV9zZXRfYXV0 b3N1c3BlbmRfZGVsYXkoJnBjaV9kZXYtPmRldiwgMTAwMCk7DQo+ICsJcG1fcnVudGltZV91c2Vf YXV0b3N1c3BlbmQoJnBjaV9kZXYtPmRldik7DQo+ICsJcG1fcnVudGltZV9wdXRfYXV0b3N1c3Bl bmQoJnBjaV9kZXYtPmRldik7DQo+ICsJcG1fcnVudGltZV9hbGxvdygmcGNpX2Rldi0+ZGV2KTsN Cj4gKw0KPiArCXByaXZkYXRhLT5wcm9iZWQgPSB0cnVlOw0KPiArDQo+ICsJZGV2X2luZm8oJnBj aV9kZXYtPmRldiwgIk1QMiBkZXZpY2UgcmVnaXN0ZXJlZC5cbiIpOw0KPiArCXJldHVybiAwOw0K PiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBhbWRfbXAyX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9k ZXYgKnBjaV9kZXYpDQo+ICt7DQo+ICsJc3RydWN0IGFtZF9tcDJfZGV2ICpwcml2ZGF0YSA9IHBj aV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsNCj4gKw0KPiArCXBtX3J1bnRpbWVfZm9yYmlkKCZwY2lf ZGV2LT5kZXYpOw0KPiArCXBtX3J1bnRpbWVfZ2V0X25vcmVzdW1lKCZwY2lfZGV2LT5kZXYpOw0K PiArDQo+ICsJcGNpX2ludHgocGNpX2RldiwgMCk7DQo+ICsJcGNpX2NsZWFyX21hc3RlcihwY2lf ZGV2KTsNCj4gKw0KPiArCWFtZF9tcDJfY2xlYXJfcmVnKHByaXZkYXRhKTsNCj4gK30NCj4gKw0K PiArI2lmZGVmIENPTkZJR19QTQ0KPiArc3RhdGljIGludCBhbWRfbXAyX3BjaV9zdXNwZW5kKHN0 cnVjdCBkZXZpY2UgKmRldikNCj4gK3sNCj4gKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IHRv X3BjaV9kZXYoZGV2KTsNCj4gKwlzdHJ1Y3QgYW1kX21wMl9kZXYgKnByaXZkYXRhID0gcGNpX2dl dF9kcnZkYXRhKHBjaV9kZXYpOw0KPiArCXN0cnVjdCBhbWRfaTJjX2NvbW1vbiAqaTJjX2NvbW1v bjsNCj4gKwl1bnNpZ25lZCBpbnQgYnVzX2lkOw0KPiArCWludCByZXQgPSAwOw0KPiArDQo+ICsJ Zm9yIChidXNfaWQgPSAwOyBidXNfaWQgPCAyOyBidXNfaWQrKykgew0KPiArCQlpMmNfY29tbW9u ID0gcHJpdmRhdGEtPmJ1c3Nlc1tidXNfaWRdOw0KPiArCQlpZiAoaTJjX2NvbW1vbikNCj4gKwkJ CWkyY19jb21tb24tPnN1c3BlbmQoaTJjX2NvbW1vbik7DQo+ICsJfQ0KPiArDQo+ICsJcmV0ID0g cGNpX3NhdmVfc3RhdGUocGNpX2Rldik7DQo+ICsJaWYgKHJldCkgew0KPiArCQlkZXZfZXJyKG5k ZXZfZGV2KHByaXZkYXRhKSwNCj4gKwkJCSJwY2lfc2F2ZV9zdGF0ZSBmYWlsZWQgPSAlZFxuIiwg cmV0KTsNCj4gKwkJcmV0dXJuIHJldDsNCj4gKwl9DQo+ICsNCj4gKwlwY2lfZGlzYWJsZV9kZXZp Y2UocGNpX2Rldik7DQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBh bWRfbXAyX3BjaV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQ0KPiArew0KPiArCXN0cnVjdCBw Y2lfZGV2ICpwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpOw0KPiArCXN0cnVjdCBhbWRfbXAyX2Rl diAqcHJpdmRhdGEgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7DQo+ICsJc3RydWN0IGFtZF9p MmNfY29tbW9uICppMmNfY29tbW9uOw0KPiArCXVuc2lnbmVkIGludCBidXNfaWQ7DQo+ICsJaW50 IHJldCA9IDA7DQo+ICsNCj4gKwlwY2lfcmVzdG9yZV9zdGF0ZShwY2lfZGV2KTsNCj4gKwlyZXQg PSBwY2lfZW5hYmxlX2RldmljZShwY2lfZGV2KTsNCj4gKwlpZiAocmV0IDwgMCkgew0KPiArCQlk ZXZfZXJyKG5kZXZfZGV2KHByaXZkYXRhKSwNCj4gKwkJCSJwY2lfZW5hYmxlX2RldmljZSBmYWls ZWQgPSAlZFxuIiwgcmV0KTsNCj4gKwkJcmV0dXJuIHJldDsNCj4gKwl9DQo+ICsNCj4gKwlmb3Ig KGJ1c19pZCA9IDA7IGJ1c19pZCA8IDI7IGJ1c19pZCsrKSB7DQo+ICsJCWkyY19jb21tb24gPSBw cml2ZGF0YS0+YnVzc2VzW2J1c19pZF07DQo+ICsJCWlmIChpMmNfY29tbW9uKSB7DQo+ICsJCQly ZXQgPSBpMmNfY29tbW9uLT5yZXN1bWUoaTJjX2NvbW1vbik7DQo+ICsJCQlpZiAocmV0IDwgMCkN Cj4gKwkJCQlyZXR1cm4gcmV0Ow0KPiArCQl9DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIHJldDsN Cj4gK30NCj4gKw0KPiArc3RhdGljIFVOSVZFUlNBTF9ERVZfUE1fT1BTKGFtZF9tcDJfcGNpX3Bt X29wcywgYW1kX21wMl9wY2lfc3VzcGVuZCwNCj4gKwkJCSAgICBhbWRfbXAyX3BjaV9yZXN1bWUs IE5VTEwpOw0KPiArI2VuZGlmIC8qIENPTkZJR19QTSAqLw0KPiArDQo+ICtzdGF0aWMgY29uc3Qg c3RydWN0IHBjaV9kZXZpY2VfaWQgYW1kX21wMl9wY2lfdGJsW10gPSB7DQo+ICsJe1BDSV9WREVW SUNFKEFNRCwgUENJX0RFVklDRV9JRF9BTURfTVAyKX0sDQo+ICsJezB9DQo+ICt9Ow0KPiArTU9E VUxFX0RFVklDRV9UQUJMRShwY2ksIGFtZF9tcDJfcGNpX3RibCk7DQo+ICsNCj4gK3N0YXRpYyBz dHJ1Y3QgcGNpX2RyaXZlciBhbWRfbXAyX3BjaV9kcml2ZXIgPSB7DQo+ICsJLm5hbWUJCT0gImky Y19hbWRfbXAyIiwNCj4gKwkuaWRfdGFibGUJPSBhbWRfbXAyX3BjaV90YmwsDQo+ICsJLnByb2Jl CQk9IGFtZF9tcDJfcGNpX3Byb2JlLA0KPiArCS5yZW1vdmUJCT0gYW1kX21wMl9wY2lfcmVtb3Zl LA0KPiArI2lmZGVmIENPTkZJR19QTQ0KPiArCS5kcml2ZXIgPSB7DQo+ICsJCS5wbQk9ICZhbWRf bXAyX3BjaV9wbV9vcHMsDQo+ICsJfSwNCj4gKyNlbmRpZg0KPiArfTsNCj4gK21vZHVsZV9wY2lf ZHJpdmVyKGFtZF9tcDJfcGNpX2RyaXZlcik7DQo+ICsNCj4gK3N0YXRpYyBpbnQgYW1kX21wMl9k ZXZpY2VfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQ0KPiArew0KPiArCXJl dHVybiAxOw0KPiArfQ0KPiArDQo+ICtzdHJ1Y3QgYW1kX21wMl9kZXYgKmFtZF9tcDJfZmluZF9k ZXZpY2Uodm9pZCkNCj4gK3sNCj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7DQo+ICsJc3RydWN0IHBj aV9kZXYgKnBjaV9kZXY7DQo+ICsNCj4gKwlkZXYgPSBkcml2ZXJfZmluZF9kZXZpY2UoJmFtZF9t cDJfcGNpX2RyaXZlci5kcml2ZXIsIE5VTEwsIE5VTEwsDQo+ICsJCQkJIGFtZF9tcDJfZGV2aWNl X21hdGNoKTsNCj4gKwlpZiAoIWRldikNCj4gKwkJcmV0dXJuIE5VTEw7DQo+ICsNCj4gKwlwY2lf ZGV2ID0gdG9fcGNpX2RldihkZXYpOw0KPiArCXJldHVybiAoc3RydWN0IGFtZF9tcDJfZGV2ICop cGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOw0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTF9HUEwoYW1k X21wMl9maW5kX2RldmljZSk7DQo+ICsNCj4gK01PRFVMRV9ERVNDUklQVElPTigiQU1EKFIpIFBD SS1FIE1QMiBJMkMgQ29udHJvbGxlciBEcml2ZXIiKTsNCj4gK01PRFVMRV9BVVRIT1IoIlNoeWFt IFN1bmRhciBTIEsgPFNoeWFtLXN1bmRhci5TLWtAYW1kLmNvbT4iKTsNCj4gK01PRFVMRV9BVVRI T1IoIkVsaWUgTW9yaXNzZSA8c3luaXVyZ2VAZ21haWwuY29tPiIpOw0KPiArTU9EVUxFX0xJQ0VO U0UoIkR1YWwgQlNEL0dQTCIpOw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2ky Yy1hbWQtbXAyLXBsYXQuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kLW1wMi1wbGF0LmMN Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi5mNWIzZjAwYzY1 NTkNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZC1t cDItcGxhdC5jDQo+IEBAIC0wLDAgKzEsMzY3IEBADQo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1c2UNCj4gKy8qDQo+ICsgKiBBTUQgTVAyIHBsYXRm b3JtIGRyaXZlcg0KPiArICoNCj4gKyAqIFNldHVwIHRoZSBJMkMgYWRhcHRlcnMgZW51bWVyYXRl ZCBpbiB0aGUgQUNQSSBuYW1lc3BhY2UuDQo+ICsgKiBNUDIgY29udHJvbGxlcnMgaGF2ZSAyIHNl cGFyYXRlIGJ1c3NlcywgdXAgdG8gMiBJMkMgYWRhcHRlcnMgbWF5IGJlIGxpc3RlZC4NCj4gKyAq DQo+ICsgKiBBdXRob3JzOiBOZWhhbCBCYWt1bGNoYW5kcmEgU2hhaCA8TmVoYWwtYmFrdWxjaGFu ZHJhLnNoYWhAYW1kLmNvbT4NCj4gKyAqICAgICAgICAgIEVsaWUgTW9yaXNzZSA8c3luaXVyZ2VA Z21haWwuY29tPg0KPiArICovDQo+ICsNCj4gKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+DQo+ICsj aW5jbHVkZSA8bGludXgva2VybmVsLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQo+ ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQo+ICsjaW5jbHVkZSA8bGludXgv c2xhYi5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+DQo+ICsNCj4gKyNpbmNsdWRlICJp MmMtYW1kLW1wMi5oIg0KPiArDQo+ICsjZGVmaW5lIEFNRF9NUDJfSTJDX01BWF9SV19MRU5HVEgg KCgxIDw8IDEyKSAtIDEpDQo+ICsjZGVmaW5lIEFNRF9JMkNfVElNRU9VVCAobXNlY3NfdG9famlm ZmllcygyNTApKQ0KPiArDQo+ICsvKioNCj4gKyAqIHN0cnVjdCBhbWRfaTJjX2RldiAtIE1QMiBi dXMvaTJjIGFkYXB0ZXIgY29udGV4dA0KPiArICogQGNvbW1vbjogc2hhcmVkIGNvbnRleHQgd2l0 aCB0aGUgTVAyIFBDSSBkcml2ZXINCj4gKyAqIEBwZGV2OiBwbGF0Zm9ybSBkcml2ZXIgbm9kZQ0K PiArICogQGFkYXA6IGkyYyBhZGFwdGVyDQo+ICsgKiBAY21kX2NvbXBsZXRlOiB4ZmVyIGNvbXBs ZXRpb24gb2JqZWN0DQo+ICsgKi8NCj4gK3N0cnVjdCBhbWRfaTJjX2RldiB7DQo+ICsJc3RydWN0 IGFtZF9pMmNfY29tbW9uIGNvbW1vbjsNCj4gKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 Ow0KPiArCXN0cnVjdCBpMmNfYWRhcHRlciBhZGFwOw0KPiArCXN0cnVjdCBjb21wbGV0aW9uIGNt ZF9jb21wbGV0ZTsNCj4gK307DQo+ICsNCj4gKyNkZWZpbmUgYW1kX2kyY19kZXZfY29tbW9uKF9f Y29tbW9uKSBcDQo+ICsJY29udGFpbmVyX29mKF9fY29tbW9uLCBzdHJ1Y3QgYW1kX2kyY19kZXYs IGNvbW1vbikNCj4gKw0KPiArc3RhdGljIGludCBpMmNfYW1kX2RtYV9tYXAoc3RydWN0IGFtZF9p MmNfY29tbW9uICppMmNfY29tbW9uKQ0KPiArew0KPiArCXN0cnVjdCBkZXZpY2UgKmRldl9wY2kg PSAmaTJjX2NvbW1vbi0+bXAyX2Rldi0+cGNpX2Rldi0+ZGV2Ow0KPiArCXN0cnVjdCBhbWRfaTJj X2RldiAqaTJjX2RldiA9IGFtZF9pMmNfZGV2X2NvbW1vbihpMmNfY29tbW9uKTsNCj4gKwllbnVt IGRtYV9kYXRhX2RpcmVjdGlvbiBkbWFfZGlyZWN0aW9uID0NCj4gKwkJCWkyY19jb21tb24tPm1z Zy0+ZmxhZ3MgJiBJMkNfTV9SRCA/DQo+ICsJCQlETUFfRlJPTV9ERVZJQ0UgOiBETUFfVE9fREVW SUNFOw0KPiArDQo+ICsJaTJjX2NvbW1vbi0+ZG1hX2J1ZiA9IGkyY19nZXRfZG1hX3NhZmVfbXNn X2J1ZihpMmNfY29tbW9uLT5tc2csIDApOw0KPiArCWkyY19jb21tb24tPmRtYV9hZGRyID0gZG1h X21hcF9zaW5nbGUoZGV2X3BjaSwgaTJjX2NvbW1vbi0+ZG1hX2J1ZiwNCj4gKwkJCQkJICAgICAg aTJjX2NvbW1vbi0+bXNnLT5sZW4sDQo+ICsJCQkJCSAgICAgIGRtYV9kaXJlY3Rpb24pOw0KPiAr DQo+ICsJaWYgKHVubGlrZWx5KGRtYV9tYXBwaW5nX2Vycm9yKGRldl9wY2ksIGkyY19jb21tb24t PmRtYV9hZGRyKSkpIHsNCj4gKwkJZGV2X2VycigmaTJjX2Rldi0+cGRldi0+ZGV2LA0KPiArCQkJ IkVycm9yIHdoaWxlIG1hcHBpbmcgZG1hIGJ1ZmZlciAlcFxuIiwNCj4gKwkJCWkyY19jb21tb24t PmRtYV9idWYpOw0KPiArCQlyZXR1cm4gLUVJTzsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsN Cj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaTJjX2FtZF9kbWFfdW5tYXAoc3RydWN0IGFtZF9p MmNfY29tbW9uICppMmNfY29tbW9uKQ0KPiArew0KPiArCXN0cnVjdCBkZXZpY2UgKmRldl9wY2kg PSAmaTJjX2NvbW1vbi0+bXAyX2Rldi0+cGNpX2Rldi0+ZGV2Ow0KPiArCWVudW0gZG1hX2RhdGFf ZGlyZWN0aW9uIGRtYV9kaXJlY3Rpb24gPQ0KPiArCQkJaTJjX2NvbW1vbi0+bXNnLT5mbGFncyAm IEkyQ19NX1JEID8NCj4gKwkJCURNQV9GUk9NX0RFVklDRSA6IERNQV9UT19ERVZJQ0U7DQo+ICsN Cj4gKwlkbWFfdW5tYXBfc2luZ2xlKGRldl9wY2ksIGkyY19jb21tb24tPmRtYV9hZGRyLA0KPiAr CQkJIGkyY19jb21tb24tPm1zZy0+bGVuLCBkbWFfZGlyZWN0aW9uKTsNCj4gKw0KPiArCWkyY19w dXRfZG1hX3NhZmVfbXNnX2J1ZihpMmNfY29tbW9uLT5kbWFfYnVmLCBpMmNfY29tbW9uLT5tc2cs IHRydWUpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpMmNfYW1kX3N0YXJ0X2NtZChzdHJ1 Y3QgYW1kX2kyY19kZXYgKmkyY19kZXYpDQo+ICt7DQo+ICsJc3RydWN0IGFtZF9pMmNfY29tbW9u ICppMmNfY29tbW9uID0gJmkyY19kZXYtPmNvbW1vbjsNCj4gKw0KPiArCXJlaW5pdF9jb21wbGV0 aW9uKCZpMmNfZGV2LT5jbWRfY29tcGxldGUpOw0KPiArCWkyY19jb21tb24tPmNtZF9zdWNjZXNz ID0gZmFsc2U7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGkyY19hbWRfY21kX2NvbXBsZXRp b24oc3RydWN0IGFtZF9pMmNfY29tbW9uICppMmNfY29tbW9uKQ0KPiArew0KPiArCXN0cnVjdCBh bWRfaTJjX2RldiAqaTJjX2RldiA9IGFtZF9pMmNfZGV2X2NvbW1vbihpMmNfY29tbW9uKTsNCj4g Kwl1bmlvbiBpMmNfZXZlbnQgKmV2ZW50ID0gJmkyY19jb21tb24tPmV2ZW50dmFsOw0KPiArDQo+ ICsJaWYgKGV2ZW50LT5yLnN0YXR1cyA9PSBpMmNfcmVhZGNvbXBsZXRlX2V2ZW50KQ0KPiArCQlk ZXZfZGJnKCZpMmNfZGV2LT5wZGV2LT5kZXYsICIlcyByZWFkZGF0YTolKnBoXG4iLA0KPiArCQkJ X19mdW5jX18sIGV2ZW50LT5yLmxlbmd0aCwNCj4gKwkJCWkyY19jb21tb24tPm1zZy0+YnVmKTsN Cj4gKw0KPiArCWNvbXBsZXRlKCZpMmNfZGV2LT5jbWRfY29tcGxldGUpOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgaW50IGkyY19hbWRfY2hlY2tfY21kX2NvbXBsZXRpb24oc3RydWN0IGFtZF9pMmNf ZGV2ICppMmNfZGV2KQ0KPiArew0KPiArCXN0cnVjdCBhbWRfaTJjX2NvbW1vbiAqaTJjX2NvbW1v biA9ICZpMmNfZGV2LT5jb21tb247DQo+ICsJdW5zaWduZWQgbG9uZyB0aW1lb3V0Ow0KPiArDQo+ ICsJdGltZW91dCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaTJjX2Rldi0+Y21kX2Nv bXBsZXRlLA0KPiArCQkJCQkgICAgICBpMmNfZGV2LT5hZGFwLnRpbWVvdXQpOw0KPiArDQo+ICsJ aWYgKChpMmNfY29tbW9uLT5yZXFjbWQgPT0gaTJjX3JlYWQgfHwNCj4gKwkgICAgIGkyY19jb21t b24tPnJlcWNtZCA9PSBpMmNfd3JpdGUpICYmDQo+ICsJICAgIGkyY19jb21tb24tPm1zZy0+bGVu ID4gMzIpDQo+ICsJCWkyY19hbWRfZG1hX3VubWFwKGkyY19jb21tb24pOw0KPiArDQo+ICsJaWYg KHRpbWVvdXQgPT0gMCkgew0KPiArCQlhbWRfbXAyX3J3X3RpbWVvdXQoaTJjX2NvbW1vbik7DQo+ ICsJCXJldHVybiAtRVRJTUVET1VUOw0KPiArCX0NCj4gKw0KPiArCWFtZF9tcDJfcHJvY2Vzc19l dmVudChpMmNfY29tbW9uKTsNCj4gKw0KPiArCWlmICghaTJjX2NvbW1vbi0+Y21kX3N1Y2Nlc3Mp DQo+ICsJCXJldHVybiAtRUlPOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyBpbnQgaTJjX2FtZF9lbmFibGVfc2V0KHN0cnVjdCBhbWRfaTJjX2RldiAqaTJjX2Rldiwg Ym9vbCBlbmFibGUpDQo+ICt7DQo+ICsJc3RydWN0IGFtZF9pMmNfY29tbW9uICppMmNfY29tbW9u ID0gJmkyY19kZXYtPmNvbW1vbjsNCj4gKw0KPiArCWkyY19hbWRfc3RhcnRfY21kKGkyY19kZXYp Ow0KPiArCWFtZF9tcDJfYnVzX2VuYWJsZV9zZXQoaTJjX2NvbW1vbiwgZW5hYmxlKTsNCj4gKw0K PiArCXJldHVybiBpMmNfYW1kX2NoZWNrX2NtZF9jb21wbGV0aW9uKGkyY19kZXYpOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgaW50IGkyY19hbWRfeGZlcl9tc2coc3RydWN0IGFtZF9pMmNfZGV2ICpp MmNfZGV2LCBzdHJ1Y3QgaTJjX21zZyAqcG1zZykNCj4gK3sNCj4gKwlzdHJ1Y3QgYW1kX2kyY19j b21tb24gKmkyY19jb21tb24gPSAmaTJjX2Rldi0+Y29tbW9uOw0KPiArDQo+ICsJaTJjX2FtZF9z dGFydF9jbWQoaTJjX2Rldik7DQo+ICsJaTJjX2NvbW1vbi0+bXNnID0gcG1zZzsNCj4gKw0KPiAr CWlmIChwbXNnLT5sZW4gPiAzMikNCj4gKwkJaWYgKGkyY19hbWRfZG1hX21hcChpMmNfY29tbW9u KSkNCj4gKwkJCXJldHVybiAtRUlPOw0KPiArDQo+ICsJaWYgKHBtc2ctPmZsYWdzICYgSTJDX01f UkQpDQo+ICsJCWFtZF9tcDJfcncoaTJjX2NvbW1vbiwgaTJjX3JlYWQpOw0KPiArCWVsc2UNCj4g KwkJYW1kX21wMl9ydyhpMmNfY29tbW9uLCBpMmNfd3JpdGUpOw0KPiArDQo+ICsJcmV0dXJuIGky Y19hbWRfY2hlY2tfY21kX2NvbXBsZXRpb24oaTJjX2Rldik7DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyBpbnQgaTJjX2FtZF94ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgc3RydWN0IGkyY19t c2cgKm1zZ3MsIGludCBudW0pDQo+ICt7DQo+ICsJc3RydWN0IGFtZF9pMmNfZGV2ICppMmNfZGV2 ID0gaTJjX2dldF9hZGFwZGF0YShhZGFwKTsNCj4gKwlpbnQgaTsNCj4gKwlzdHJ1Y3QgaTJjX21z ZyAqcG1zZzsNCj4gKwlpbnQgZXJyOw0KPiArDQo+ICsJLyogdGhlIGFkYXB0ZXIgbWlnaHQgaGF2 ZSBiZWVuIGRlbGV0ZWQgd2hpbGUgd2FpdGluZyBmb3IgdGhlIGJ1cyBsb2NrICovDQo+ICsJaWYg KHVubGlrZWx5KCFpMmNfZGV2LT5jb21tb24ubXAyX2RldikpDQo+ICsJCXJldHVybiAtRUlOVkFM Ow0KPiArDQo+ICsJYW1kX21wMl9wbV9ydW50aW1lX2dldChpMmNfZGV2LT5jb21tb24ubXAyX2Rl dik7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsNCj4gKwkJcG1zZyA9ICZt c2dzW2ldOw0KPiArCQllcnIgPSBpMmNfYW1kX3hmZXJfbXNnKGkyY19kZXYsIHBtc2cpOw0KPiAr CQlpZiAoZXJyKQ0KPiArCQkJYnJlYWs7DQo+ICsJfQ0KPiArDQo+ICsJYW1kX21wMl9wbV9ydW50 aW1lX3B1dChpMmNfZGV2LT5jb21tb24ubXAyX2Rldik7DQo+ICsJcmV0dXJuIGVyciA/IGVyciA6 IG51bTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHUzMiBpMmNfYW1kX2Z1bmMoc3RydWN0IGkyY19h ZGFwdGVyICphKQ0KPiArew0KPiArCXJldHVybiBJMkNfRlVOQ19JMkMgfCBJMkNfRlVOQ19TTUJV U19FTVVMOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19hbGdvcml0aG0g aTJjX2FtZF9hbGdvcml0aG0gPSB7DQo+ICsJLm1hc3Rlcl94ZmVyID0gaTJjX2FtZF94ZmVyLA0K PiArCS5mdW5jdGlvbmFsaXR5ID0gaTJjX2FtZF9mdW5jLA0KPiArfTsNCj4gKw0KPiArI2lmZGVm IENPTkZJR19QTQ0KPiArc3RhdGljIGludCBpMmNfYW1kX3N1c3BlbmQoc3RydWN0IGFtZF9pMmNf Y29tbW9uICppMmNfY29tbW9uKQ0KPiArew0KPiArCXN0cnVjdCBhbWRfaTJjX2RldiAqaTJjX2Rl diA9IGFtZF9pMmNfZGV2X2NvbW1vbihpMmNfY29tbW9uKTsNCj4gKw0KPiArCWkyY19hbWRfZW5h YmxlX3NldChpMmNfZGV2LCBmYWxzZSk7DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyBpbnQgaTJjX2FtZF9yZXN1bWUoc3RydWN0IGFtZF9pMmNfY29tbW9uICppMmNfY29tbW9u KQ0KPiArew0KPiArCXN0cnVjdCBhbWRfaTJjX2RldiAqaTJjX2RldiA9IGFtZF9pMmNfZGV2X2Nv bW1vbihpMmNfY29tbW9uKTsNCj4gKw0KPiArCXJldHVybiBpMmNfYW1kX2VuYWJsZV9zZXQoaTJj X2RldiwgdHJ1ZSk7DQo+ICt9DQo+ICsjZW5kaWYNCj4gKw0KPiArc3RhdGljIGVudW0gc3BlZWRf ZW51bSBpMmNfYW1kX2dldF9idXNfc3BlZWQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikN Cj4gK3sNCj4gKwl1MzIgYWNwaV9zcGVlZDsNCj4gKwlpbnQgaTsNCj4gKwlzdGF0aWMgY29uc3Qg dTMyIHN1cHBvcnRlZF9zcGVlZHNbXSA9IHsNCj4gKwkJMCwgMTAwMDAwLCA0MDAwMDAsIDEwMDAw MDAsIDE0MDAwMDAsIDM0MDAwMDANCj4gKwl9Ow0KPiArDQo+ICsJYWNwaV9zcGVlZCA9IGkyY19h Y3BpX2ZpbmRfYnVzX3NwZWVkKCZwZGV2LT5kZXYpOw0KPiArCS8qIHJvdW5kIGRvd24gdG8gdGhl IGxvd2VzdCBzdGFuZGFyZCBzcGVlZCAqLw0KPiArCWZvciAoaSA9IDE7IGkgPCBBUlJBWV9TSVpF KHN1cHBvcnRlZF9zcGVlZHMpOyBpKyspIHsNCj4gKwkJaWYgKGFjcGlfc3BlZWQgPCBzdXBwb3J0 ZWRfc3BlZWRzW2ldKQ0KPiArCQkJYnJlYWs7DQo+ICsJfQ0KPiArCWFjcGlfc3BlZWQgPSBzdXBw b3J0ZWRfc3BlZWRzW2kgLSAxXTsNCj4gKw0KPiArCXN3aXRjaCAoYWNwaV9zcGVlZCkgew0KPiAr CWNhc2UgMTAwMDAwOg0KPiArCQlyZXR1cm4gc3BlZWQxMDBrOw0KPiArCWNhc2UgNDAwMDAwOg0K PiArCQlyZXR1cm4gc3BlZWQ0MDBrOw0KPiArCWNhc2UgMTAwMDAwMDoNCj4gKwkJcmV0dXJuIHNw ZWVkMTAwMGs7DQo+ICsJY2FzZSAxNDAwMDAwOg0KPiArCQlyZXR1cm4gc3BlZWQxNDAwazsNCj4g KwljYXNlIDM0MDAwMDA6DQo+ICsJCXJldHVybiBzcGVlZDM0MDBrOw0KPiArCWRlZmF1bHQ6DQo+ ICsJCXJldHVybiBzcGVlZDQwMGs7DQo+ICsJfQ0KPiArfQ0KPiArDQo+ICtzdGF0aWMgY29uc3Qg c3RydWN0IGkyY19hZGFwdGVyX3F1aXJrcyBhbWRfaTJjX2Rldl9xdWlya3MgPSB7DQo+ICsJLm1h eF9yZWFkX2xlbiA9IEFNRF9NUDJfSTJDX01BWF9SV19MRU5HVEgsDQo+ICsJLm1heF93cml0ZV9s ZW4gPSBBTURfTVAyX0kyQ19NQVhfUldfTEVOR1RILA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGlu dCBpMmNfYW1kX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ICt7DQo+ICsJ aW50IHJldDsNCj4gKwlzdHJ1Y3QgYW1kX2kyY19kZXYgKmkyY19kZXY7DQo+ICsJYWNwaV9oYW5k bGUgaGFuZGxlID0gQUNQSV9IQU5ETEUoJnBkZXYtPmRldik7DQo+ICsJc3RydWN0IGFjcGlfZGV2 aWNlICphZGV2Ow0KPiArCXN0cnVjdCBhbWRfbXAyX2RldiAqbXAyX2RldjsNCj4gKwljb25zdCBj aGFyICp1aWQ7DQo+ICsNCj4gKwlpZiAoYWNwaV9idXNfZ2V0X2RldmljZShoYW5kbGUsICZhZGV2 KSkNCj4gKwkJcmV0dXJuIC1FTk9ERVY7DQo+ICsNCj4gKwkvKiBUaGUgQUNQSSBuYW1lc3BhY2Ug ZG9lc24ndCBjb250YWluIGluZm9ybWF0aW9uIGFib3V0IHdoaWNoIE1QMiBQQ0kNCj4gKwkgKiBk ZXZpY2UgYW4gQU1ESTAwMTEgQUNQSSBkZXZpY2UgaXMgcmVsYXRlZCB0bywgc28gYXNzdW1lIHRo YXQgdGhlcmUncw0KPiArCSAqIG9ubHkgb25lIE1QMiBQQ0kgZGV2aWNlIHBlciBzeXN0ZW0uDQo+ ICsJICovDQo+ICsJbXAyX2RldiA9IGFtZF9tcDJfZmluZF9kZXZpY2UoKTsNCj4gKwlpZiAoIW1w Ml9kZXYgfHwgIW1wMl9kZXYtPnByb2JlZCkNCj4gKwkJLyogVGhlIE1QMiBQQ0kgZGV2aWNlIHNo b3VsZCBnZXQgcHJvYmVkIGxhdGVyICovDQo+ICsJCXJldHVybiAtRVBST0JFX0RFRkVSOw0KPiAr DQo+ICsJaTJjX2RldiA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmkyY19kZXYp LCBHRlBfS0VSTkVMKTsNCj4gKwlpZiAoIWkyY19kZXYpDQo+ICsJCXJldHVybiAtRU5PTUVNOw0K PiArDQo+ICsJaTJjX2Rldi0+Y29tbW9uLm1wMl9kZXYgPSBtcDJfZGV2Ow0KPiArCWkyY19kZXYt PnBkZXYgPSBwZGV2Ow0KPiArCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGkyY19kZXYpOw0K PiArDQo+ICsJaTJjX2Rldi0+Y29tbW9uLmNtZF9jb21wbGV0aW9uID0gJmkyY19hbWRfY21kX2Nv bXBsZXRpb247DQo+ICsjaWZkZWYgQ09ORklHX1BNDQo+ICsJaTJjX2Rldi0+Y29tbW9uLnN1c3Bl bmQgPSAmaTJjX2FtZF9zdXNwZW5kOw0KPiArCWkyY19kZXYtPmNvbW1vbi5yZXN1bWUgPSAmaTJj X2FtZF9yZXN1bWU7DQo+ICsjZW5kaWYNCj4gKw0KPiArCXVpZCA9IGFkZXYtPnBucC51bmlxdWVf aWQ7DQo+ICsJaWYgKCF1aWQpIHsNCj4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibWlzc2luZyBV SUQvYnVzIGlkIVxuIik7DQo+ICsJCXJldHVybiAtRUlOVkFMOw0KPiArCX0gZWxzZSBpZiAoc3Ry Y21wKHVpZCwgIjAiKSA9PSAwKSB7DQo+ICsJCWkyY19kZXYtPmNvbW1vbi5idXNfaWQgPSAwOw0K PiArCX0gZWxzZSBpZiAoc3RyY21wKHVpZCwgIjEiKSA9PSAwKSB7DQo+ICsJCWkyY19kZXYtPmNv bW1vbi5idXNfaWQgPSAxOw0KPiArCX0gZWxzZSB7DQo+ICsJCWRldl9lcnIoJnBkZXYtPmRldiwg ImluY29ycmVjdCBVSUQvYnVzIGlkIFwiJXNcIiFcbiIsIHVpZCk7DQo+ICsJCXJldHVybiAtRUlO VkFMOw0KPiArCX0NCj4gKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJidXMgaWQgaXMgJXVcbiIsIGky Y19kZXYtPmNvbW1vbi5idXNfaWQpOw0KPiArDQo+ICsJLyogUmVnaXN0ZXIgdGhlIGFkYXB0ZXIg Ki8NCj4gKwlhbWRfbXAyX3BtX3J1bnRpbWVfZ2V0KG1wMl9kZXYpOw0KPiArDQo+ICsJaTJjX2Rl di0+Y29tbW9uLnJlcWNtZCA9IGkyY19ub25lOw0KPiArCWlmIChhbWRfbXAyX3JlZ2lzdGVyX2Ni KCZpMmNfZGV2LT5jb21tb24pKQ0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwlkZXZpY2VfbGlu a19hZGQoJmkyY19kZXYtPnBkZXYtPmRldiwgJm1wMl9kZXYtPnBjaV9kZXYtPmRldiwNCj4gKwkJ CURMX0ZMQUdfQVVUT1JFTU9WRV9DT05TVU1FUik7DQo+ICsNCj4gKwlpMmNfZGV2LT5jb21tb24u aTJjX3NwZWVkID0gaTJjX2FtZF9nZXRfYnVzX3NwZWVkKHBkZXYpOw0KPiArDQo+ICsJLyogU2V0 dXAgaTJjIGFkYXB0ZXIgZGVzY3JpcHRpb24gKi8NCj4gKwlpMmNfZGV2LT5hZGFwLm93bmVyID0g VEhJU19NT0RVTEU7DQo+ICsJaTJjX2Rldi0+YWRhcC5hbGdvID0gJmkyY19hbWRfYWxnb3JpdGht Ow0KPiArCWkyY19kZXYtPmFkYXAucXVpcmtzID0gJmFtZF9pMmNfZGV2X3F1aXJrczsNCj4gKwlp MmNfZGV2LT5hZGFwLmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2Ow0KPiArCWkyY19kZXYtPmFkYXAu YWxnb19kYXRhID0gaTJjX2RldjsNCj4gKwlpMmNfZGV2LT5hZGFwLnRpbWVvdXQgPSBBTURfSTJD X1RJTUVPVVQ7DQo+ICsJQUNQSV9DT01QQU5JT05fU0VUKCZpMmNfZGV2LT5hZGFwLmRldiwgQUNQ SV9DT01QQU5JT04oJnBkZXYtPmRldikpOw0KPiArCWkyY19kZXYtPmFkYXAuZGV2Lm9mX25vZGUg PSBwZGV2LT5kZXYub2Zfbm9kZTsNCj4gKwlzbnByaW50ZihpMmNfZGV2LT5hZGFwLm5hbWUsIHNp emVvZihpMmNfZGV2LT5hZGFwLm5hbWUpLA0KPiArCQkgIkFNRCBNUDIgaTJjIGJ1cyAldSIsIGky Y19kZXYtPmNvbW1vbi5idXNfaWQpOw0KPiArCWkyY19zZXRfYWRhcGRhdGEoJmkyY19kZXYtPmFk YXAsIGkyY19kZXYpOw0KPiArDQo+ICsJaW5pdF9jb21wbGV0aW9uKCZpMmNfZGV2LT5jbWRfY29t cGxldGUpOw0KPiArDQo+ICsJLyogRW5hYmxlIHRoZSBidXMgKi8NCj4gKwlpZiAoaTJjX2FtZF9l bmFibGVfc2V0KGkyY19kZXYsIHRydWUpKQ0KPiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbml0 aWFsIGJ1cyBlbmFibGUgZmFpbGVkXG4iKTsNCj4gKw0KPiArCS8qIEF0dGFjaCB0byB0aGUgaTJj IGxheWVyICovDQo+ICsJcmV0ID0gaTJjX2FkZF9hZGFwdGVyKCZpMmNfZGV2LT5hZGFwKTsNCj4g Kw0KPiArCWFtZF9tcDJfcG1fcnVudGltZV9wdXQobXAyX2Rldik7DQo+ICsNCj4gKwlpZiAocmV0 IDwgMCkNCj4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiaTJjIGFkZCBhZGFwdGVyIGZhaWxlZCA9 ICVkXG4iLCByZXQpOw0KPiArDQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiArc3RhdGlj IGludCBpMmNfYW1kX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiArew0K PiArCXN0cnVjdCBhbWRfaTJjX2RldiAqaTJjX2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBk ZXYpOw0KPiArCXN0cnVjdCBhbWRfaTJjX2NvbW1vbiAqaTJjX2NvbW1vbiA9ICZpMmNfZGV2LT5j b21tb247DQo+ICsNCj4gKwlpMmNfbG9ja19idXMoJmkyY19kZXYtPmFkYXAsIEkyQ19MT0NLX1JP T1RfQURBUFRFUik7DQo+ICsNCj4gKwlpMmNfYW1kX2VuYWJsZV9zZXQoaTJjX2RldiwgZmFsc2Up Ow0KPiArCWFtZF9tcDJfdW5yZWdpc3Rlcl9jYihpMmNfY29tbW9uKTsNCj4gKwlpMmNfY29tbW9u LT5tcDJfZGV2ID0gTlVMTDsNCj4gKw0KPiArCWkyY191bmxvY2tfYnVzKCZpMmNfZGV2LT5hZGFw LCBJMkNfTE9DS19ST09UX0FEQVBURVIpOw0KPiArDQo+ICsJaTJjX2RlbF9hZGFwdGVyKCZpMmNf ZGV2LT5hZGFwKTsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBhY3BpX2RldmljZV9pZCBpMmNfYW1kX2FjcGlfbWF0Y2hbXSA9IHsNCj4gKwl7ICJBTURJ MDAxMSIgfSwNCj4gKwl7IH0sDQo+ICt9Ow0KPiArTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBp MmNfYW1kX2FjcGlfbWF0Y2gpOw0KPiArDQo+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZl ciBpMmNfYW1kX3BsYXRfZHJpdmVyID0gew0KPiArCS5wcm9iZSA9IGkyY19hbWRfcHJvYmUsDQo+ ICsJLnJlbW92ZSA9IGkyY19hbWRfcmVtb3ZlLA0KPiArCS5kcml2ZXIgPSB7DQo+ICsJCS5uYW1l ID0gImkyY19hbWRfbXAyIiwNCj4gKwkJLmFjcGlfbWF0Y2hfdGFibGUgPSBBQ1BJX1BUUihpMmNf YW1kX2FjcGlfbWF0Y2gpLA0KPiArCX0sDQo+ICt9Ow0KPiArbW9kdWxlX3BsYXRmb3JtX2RyaXZl cihpMmNfYW1kX3BsYXRfZHJpdmVyKTsNCj4gKw0KPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJBTUQo UikgTVAyIEkyQyBQbGF0Zm9ybSBEcml2ZXIiKTsNCj4gK01PRFVMRV9BVVRIT1IoIk5laGFsIFNo YWggPG5laGFsLWJha3VsY2hhbmRyYS5zaGFoQGFtZC5jb20+Iik7DQo+ICtNT0RVTEVfQVVUSE9S KCJFbGllIE1vcmlzc2UgPHN5bml1cmdlQGdtYWlsLmNvbT4iKTsNCj4gK01PRFVMRV9MSUNFTlNF KCJEdWFsIEJTRC9HUEwiKTsNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMt YW1kLW1wMi5oIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQtbXAyLmgNCj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi4wNTgzNjJlZGViYWENCj4gLS0tIC9k ZXYvbnVsbA0KPiArKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZC1tcDIuaA0KPiBAQCAt MCwwICsxLDIxOSBAQA0KPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1Ig QlNELTMtQ2xhdXNlICovDQo+ICsvKg0KPiArICogQU1EIE1QMiBJMkMgYWRhcHRlciBkcml2ZXIN Cj4gKyAqDQo+ICsgKiBBdXRob3JzOiBTaHlhbSBTdW5kYXIgUyBLIDxTaHlhbS1zdW5kYXIuUy1r QGFtZC5jb20+DQo+ICsgKiAgICAgICAgICBFbGllIE1vcmlzc2UgPHN5bml1cmdlQGdtYWlsLmNv bT4NCj4gKyAqLw0KPiArDQo+ICsjaWZuZGVmIEkyQ19BTURfUENJX01QMl9IDQo+ICsjZGVmaW5l IEkyQ19BTURfUENJX01QMl9IDQo+ICsNCj4gKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4NCj4gKyNp bmNsdWRlIDxsaW51eC9wY2kuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+DQo+ ICsNCj4gKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfTVAyCTB4MTVFNg0KPiArDQo+ICtzdHJ1 Y3QgYW1kX2kyY19jb21tb247DQo+ICtzdHJ1Y3QgYW1kX21wMl9kZXY7DQo+ICsNCj4gK2VudW0g ew0KPiArCS8qIE1QMiBDMlAgTWVzc2FnZSBSZWdpc3RlcnMgKi8NCj4gKwlBTURfQzJQX01TRzAg PSAweDEwNTAwLAkJCS8qIE1QMiBNZXNzYWdlIGZvciBJMkMwICovDQo+ICsJQU1EX0MyUF9NU0cx ID0gMHgxMDUwNCwJCQkvKiBNUDIgTWVzc2FnZSBmb3IgSTJDMSAqLw0KPiArCUFNRF9DMlBfTVNH MiA9IDB4MTA1MDgsCQkJLyogRFJBTSBBZGRyZXNzIExvIC8gRGF0YSAwICovDQo+ICsJQU1EX0My UF9NU0czID0gMHgxMDUwYywJCQkvKiBEUkFNIEFkZHJlc3MgSEkgLyBEYXRhIDEgKi8NCj4gKwlB TURfQzJQX01TRzQgPSAweDEwNTEwLAkJCS8qIERhdGEgMiAqLw0KPiArCUFNRF9DMlBfTVNHNSA9 IDB4MTA1MTQsCQkJLyogRGF0YSAzICovDQo+ICsJQU1EX0MyUF9NU0c2ID0gMHgxMDUxOCwJCQkv KiBEYXRhIDQgKi8NCj4gKwlBTURfQzJQX01TRzcgPSAweDEwNTFjLAkJCS8qIERhdGEgNSAqLw0K PiArCUFNRF9DMlBfTVNHOCA9IDB4MTA1MjAsCQkJLyogRGF0YSA2ICovDQo+ICsJQU1EX0MyUF9N U0c5ID0gMHgxMDUyNCwJCQkvKiBEYXRhIDcgKi8NCj4gKw0KPiArCS8qIE1QMiBQMkMgTWVzc2Fn ZSBSZWdpc3RlcnMgKi8NCj4gKwlBTURfUDJDX01TRzAgPSAweDEwNjgwLAkJCS8qIERvIG5vdCB1 c2UgKi8NCj4gKwlBTURfUDJDX01TRzEgPSAweDEwNjg0LAkJCS8qIEkyQzAgaW50ZXJydXB0IHJl Z2lzdGVyICovDQo+ICsJQU1EX1AyQ19NU0cyID0gMHgxMDY4OCwJCQkvKiBJMkMxIGludGVycnVw dCByZWdpc3RlciAqLw0KPiArCUFNRF9QMkNfTVNHMyA9IDB4MTA2OEMsCQkJLyogTVAyIGRlYnVn IGluZm8gKi8NCj4gKwlBTURfUDJDX01TR19JTlRFTiA9IDB4MTA2OTAsCQkvKiBNUDIgaW50ZXJy dXB0IGdlbiByZWdpc3RlciAqLw0KPiArCUFNRF9QMkNfTVNHX0lOVFNUUyA9IDB4MTA2OTQsCQkv KiBJbnRlcnJ1cHQgc3RhdHVzICovDQo+ICt9Ow0KPiArDQo+ICsvKiBDb21tYW5kIHJlZ2lzdGVy IGRhdGEgc3RydWN0dXJlcyAqLw0KPiArDQo+ICsjZGVmaW5lIGkyY19ub25lICgtMSkNCj4gK2Vu dW0gaTJjX2NtZCB7DQo+ICsJaTJjX3JlYWQgPSAwLA0KPiArCWkyY193cml0ZSwNCj4gKwlpMmNf ZW5hYmxlLA0KPiArCWkyY19kaXNhYmxlLA0KPiArCW51bWJlcl9vZl9zZW5zb3JfZGlzY292ZXJl ZCwNCj4gKwlpc19tcDJfYWN0aXZlLA0KPiArCWludmFsaWRfY21kID0gMHhGLA0KPiArfTsNCj4g Kw0KPiArZW51bSBzcGVlZF9lbnVtIHsNCj4gKwlzcGVlZDEwMGsgPSAwLA0KPiArCXNwZWVkNDAw ayA9IDEsDQo+ICsJc3BlZWQxMDAwayA9IDIsDQo+ICsJc3BlZWQxNDAwayA9IDMsDQo+ICsJc3Bl ZWQzNDAwayA9IDQNCj4gK307DQo+ICsNCj4gK2VudW0gbWVtX3R5cGUgew0KPiArCXVzZV9kcmFt ID0gMCwNCj4gKwl1c2VfYzJwbXNnID0gMSwNCj4gK307DQo+ICsNCj4gKy8qKg0KPiArICogdW5p b24gaTJjX2NtZF9iYXNlIDogYml0IGFjY2VzcyBvZiBDMlAgY29tbWFuZHMNCj4gKyAqIEBpMmNf Y21kOiBiaXQgMC4uMyBpMmMgUi9XIGNvbW1hbmQNCj4gKyAqIEBidXNfaWQ6IGJpdCA0Li43IGky YyBidXMgaW5kZXgNCj4gKyAqIEBzbGF2ZV9hZGRyOiBiaXQgOC4uMTUgc2xhdmUgYWRkcmVzcw0K PiArICogQGxlbmd0aDogYml0IDE2Li4yNyByZWFkL3dyaXRlIGxlbmd0aA0KPiArICogQGkyY19z cGVlZDogYml0IDI4Li4zMCBidXMgc3BlZWQNCj4gKyAqIEBtZW1fdHlwZTogYml0IDMxIDAtRFJB TTsgMS1DMlAgbXNnIG8vcA0KPiArICovDQo+ICt1bmlvbiBpMmNfY21kX2Jhc2Ugew0KPiArCXUz MiB1bDsNCj4gKwlzdHJ1Y3Qgew0KPiArCQllbnVtIGkyY19jbWQgaTJjX2NtZCA6IDQ7DQo+ICsJ CXU4IGJ1c19pZCA6IDQ7DQo+ICsJCXUzMiBzbGF2ZV9hZGRyIDogODsNCj4gKwkJdTMyIGxlbmd0 aCA6IDEyOw0KPiArCQllbnVtIHNwZWVkX2VudW0gaTJjX3NwZWVkIDogMzsNCj4gKwkJZW51bSBt ZW1fdHlwZSBtZW1fdHlwZSA6IDE7DQo+ICsJfSBzOw0KPiArfTsNCj4gKw0KPiArZW51bSByZXNw b25zZV90eXBlIHsNCj4gKwlpbnZhbGlkX3Jlc3BvbnNlID0gMCwNCj4gKwljb21tYW5kX3N1Y2Nl c3MgPSAxLA0KPiArCWNvbW1hbmRfZmFpbGVkID0gMiwNCj4gK307DQo+ICsNCj4gK2VudW0gc3Rh dHVzX3R5cGUgew0KPiArCWkyY19yZWFkY29tcGxldGVfZXZlbnQgPSAwLA0KPiArCWkyY19yZWFk ZmFpbF9ldmVudCA9IDEsDQo+ICsJaTJjX3dyaXRlY29tcGxldGVfZXZlbnQgPSAyLA0KPiArCWky Y193cml0ZWZhaWxfZXZlbnQgPSAzLA0KPiArCWkyY19idXNlbmFibGVfY29tcGxldGUgPSA0LA0K PiArCWkyY19idXNlbmFibGVfZmFpbGVkID0gNSwNCj4gKwlpMmNfYnVzZGlzYWJsZV9jb21wbGV0 ZSA9IDYsDQo+ICsJaTJjX2J1c2Rpc2FibGVfZmFpbGVkID0gNywNCj4gKwlpbnZhbGlkX2RhdGFf bGVuZ3RoID0gOCwNCj4gKwlpbnZhbGlkX3NsYXZlX2FkZHJlc3MgPSA5LA0KPiArCWludmFsaWRf aTJjYnVzX2lkID0gMTAsDQo+ICsJaW52YWxpZF9kcmFtX2FkZHIgPSAxMSwNCj4gKwlpbnZhbGlk X2NvbW1hbmQgPSAxMiwNCj4gKwltcDJfYWN0aXZlID0gMTMsDQo+ICsJbnVtYmVyb2Zfc2Vuc29y c19kaXNjb3ZlcmVkX3Jlc3AgPSAxNCwNCj4gKwlpMmNfYnVzX25vdGluaXRpYWxpemVkDQo+ICt9 Ow0KPiArDQo+ICsvKioNCj4gKyAqIHVuaW9uIGkyY19ldmVudCA6IGJpdCBhY2Nlc3Mgb2YgUDJD IGV2ZW50cw0KPiArICogQHJlc3BvbnNlOiBiaXQgMC4uMSBpMmMgcmVzcG9uc2UgdHlwZQ0KPiAr ICogQHN0YXR1czogYml0IDIuLjYgc3RhdHVzX3R5cGUNCj4gKyAqIEBtZW1fdHlwZTogYml0IDcg MC1EUkFNOyAxLUMyUCBtc2cgby9wDQo+ICsgKiBAYnVzX2lkOiBiaXQgOC4uMTEgaTJjIGJ1cyBp ZA0KPiArICogQGxlbmd0aDogYml0IDEyLi4yMyBtZXNzYWdlIGxlbmd0aA0KPiArICogQHNsYXZl X2FkZHI6IGJpdCAyNC0zMSBzbGF2ZSBhZGRyZXNzDQo+ICsgKi8NCj4gK3VuaW9uIGkyY19ldmVu dCB7DQo+ICsJdTMyIHVsOw0KPiArCXN0cnVjdCB7DQo+ICsJCWVudW0gcmVzcG9uc2VfdHlwZSBy ZXNwb25zZSA6IDI7DQo+ICsJCWVudW0gc3RhdHVzX3R5cGUgc3RhdHVzIDogNTsNCj4gKwkJZW51 bSBtZW1fdHlwZSBtZW1fdHlwZSA6IDE7DQo+ICsJCXU4IGJ1c19pZCA6IDQ7DQo+ICsJCXUzMiBs ZW5ndGggOiAxMjsNCj4gKwkJdTMyIHNsYXZlX2FkZHIgOiA4Ow0KPiArCX0gcjsNCj4gK307DQo+ ICsNCj4gKy8qKg0KPiArICogc3RydWN0IGFtZF9pMmNfY29tbW9uIC0gcGVyIGJ1cy9pMmMgYWRh cHRlciBjb250ZXh0LCBzaGFyZWQNCj4gKyAqCWJldHdlZW4gdGhlIHBjaSBhbmQgdGhlIHBsYXRm b3JtIGRyaXZlcg0KPiArICogQGV2ZW50dmFsOiBNUDIgZXZlbnQgdmFsdWUgc2V0IGJ5IHRoZSBJ UlEgaGFuZGxlcg0KPiArICogQG1wMl9kZXY6IE1QMiBwY2kgZGV2aWNlIHRoaXMgYWRhcHRlciBp cyBwYXJ0IG9mDQo+ICsgKiBAbXNnOiBpMmMgbWVzc2FnZQ0KPiArICogQGNtZF9jb21wbGV0aW9u OiBmdW5jdGlvbiBjYWxsZWQgYnkgdGhlIElSUSBoYW5kbGVyIHRvIHNpZ25hbA0KPiArICoJCSAg ICB0aGUgcGxhdGZvcm0gZHJpdmVyDQo+ICsgKiBAcmVxY21kOiByZXF1ZXN0ZWQgaTJjIGNvbW1h bmQgdHlwZQ0KPiArICogQGNtZF9zdWNjZXNzOiBzZXQgdG8gdHJ1ZSBpZiB0aGUgTVAyIHJlc3Bv bmRlZCB0byBhIGNvbW1hbmQgd2l0aA0KPiArICoJCSB0aGUgZXhwZWN0ZWQgc3RhdHVzIGFuZCBy ZXNwb25zZSB0eXBlDQo+ICsgKiBAYnVzX2lkOiBidXMgaW5kZXgNCj4gKyAqIEBpMmNfc3BlZWQ6 IGkyYyBidXMgc3BlZWQgZGV0ZXJtaW5lZCBieSB0aGUgc2xvd2VzdCBzbGF2ZQ0KPiArICogQGRt YV9idWY6IGlmIG1zZyBsZW5ndGggPiAzMiwgaG9sZHMgdGhlIERNQSBidWZmZXIgdmlydHVhbCBh ZGRyZXNzDQo+ICsgKiBAZG1hX2FkZHI6IGlmIG1zZyBsZW5ndGggPiAzMiwgaG9sZHMgdGhlIERN QSBidWZmZXIgYWRkcmVzcw0KPiArICovDQo+ICtzdHJ1Y3QgYW1kX2kyY19jb21tb24gew0KPiAr CXVuaW9uIGkyY19ldmVudCBldmVudHZhbDsNCj4gKwlzdHJ1Y3QgYW1kX21wMl9kZXYgKm1wMl9k ZXY7DQo+ICsJc3RydWN0IGkyY19tc2cgKm1zZzsNCj4gKwl2b2lkICgqY21kX2NvbXBsZXRpb24p KHN0cnVjdCBhbWRfaTJjX2NvbW1vbiAqaTJjX2NvbW1vbik7DQo+ICsJZW51bSBpMmNfY21kIHJl cWNtZDsNCj4gKwl1OCBjbWRfc3VjY2VzczsNCj4gKwl1OCBidXNfaWQ7DQo+ICsJZW51bSBzcGVl ZF9lbnVtIGkyY19zcGVlZDsNCj4gKwl1OCAqZG1hX2J1ZjsNCj4gKwlkbWFfYWRkcl90IGRtYV9h ZGRyOw0KPiArI2lmZGVmIENPTkZJR19QTQ0KPiArCWludCAoKnN1c3BlbmQpKHN0cnVjdCBhbWRf aTJjX2NvbW1vbiAqaTJjX2NvbW1vbik7DQo+ICsJaW50ICgqcmVzdW1lKShzdHJ1Y3QgYW1kX2ky Y19jb21tb24gKmkyY19jb21tb24pOw0KPiArI2VuZGlmIC8qIENPTkZJR19QTSAqLw0KPiArfTsN Cj4gKw0KPiArLyoqDQo+ICsgKiBzdHJ1Y3QgYW1kX21wMl9kZXYgLSBwZXIgUENJIGRldmljZSBj b250ZXh0DQo+ICsgKiBAcGNpX2RldjogUENJIGRyaXZlciBub2RlDQo+ICsgKiBAYnVzc2VzOiBN UDIgZGV2aWNlcyBtYXkgaGF2ZSB1cCB0byB0d28gYnVzc2VzLA0KPiArICoJICAgIGVhY2ggYnVz IGNvcnJlc3BvbmRpbmcgdG8gYW4gaTJjIGFkYXB0ZXINCj4gKyAqIEBtbWlvOiBpb21tYXBwZWQg cmVnaXN0ZXJzDQo+ICsgKiBAYzJwX2xvY2s6IGNvbnRyb2xzIGFjY2VzcyB0byB0aGUgQzJQIG1h aWxib3ggc2hhcmVkIGJldHdlZW4NCj4gKyAqCSAgICAgIHRoZSB0d28gYWRhcHRlcnMNCj4gKyAq IEBjMnBfbG9ja19idXNpZDogaWQgb2YgdGhlIGFkYXB0ZXIgd2hpY2ggbG9ja2VkIGMycF9sb2Nr DQo+ICsgKi8NCj4gK3N0cnVjdCBhbWRfbXAyX2RldiB7DQo+ICsJc3RydWN0IHBjaV9kZXYgKnBj aV9kZXY7DQo+ICsJc3RydWN0IGFtZF9pMmNfY29tbW9uICpidXNzZXNbMl07DQo+ICsJdm9pZCBf X2lvbWVtICptbWlvOw0KPiArCXN0cnVjdCBtdXRleCBjMnBfbG9jazsNCj4gKwl1OCBjMnBfbG9j a19idXNpZDsNCj4gKwl1bnNpZ25lZCBpbnQgcHJvYmVkOw0KPiArfTsNCj4gKw0KPiArI2RlZmlu ZSBuZGV2X3BkZXYobmRldikgKChuZGV2KS0+cGNpX2RldikNCj4gKyNkZWZpbmUgbmRldl9uYW1l KG5kZXYpIHBjaV9uYW1lKG5kZXZfcGRldihuZGV2KSkNCj4gKyNkZWZpbmUgbmRldl9kZXYobmRl dikgKCZuZGV2X3BkZXYobmRldiktPmRldikNCj4gKyNkZWZpbmUgd29ya19hbWRfaTJjX2NvbW1v bihfX3dvcmspIFwNCj4gKwljb250YWluZXJfb2YoX193b3JrLCBzdHJ1Y3QgYW1kX2kyY19jb21t b24sIHdvcmsud29yaykNCj4gKw0KPiArLyogUENJZSBjb21tdW5pY2F0aW9uIGRyaXZlciAqLw0K PiArDQo+ICtpbnQgYW1kX21wMl9ydyhzdHJ1Y3QgYW1kX2kyY19jb21tb24gKmkyY19jb21tb24s IGVudW0gaTJjX2NtZCByZXFjbWQpOw0KPiAraW50IGFtZF9tcDJfYnVzX2VuYWJsZV9zZXQoc3Ry dWN0IGFtZF9pMmNfY29tbW9uICppMmNfY29tbW9uLCBib29sIGVuYWJsZSk7DQo+ICsNCj4gK3Zv aWQgYW1kX21wMl9wcm9jZXNzX2V2ZW50KHN0cnVjdCBhbWRfaTJjX2NvbW1vbiAqaTJjX2NvbW1v bik7DQo+ICsNCj4gK3ZvaWQgYW1kX21wMl9yd190aW1lb3V0KHN0cnVjdCBhbWRfaTJjX2NvbW1v biAqaTJjX2NvbW1vbik7DQo+ICsNCj4gK2ludCBhbWRfbXAyX3JlZ2lzdGVyX2NiKHN0cnVjdCBh bWRfaTJjX2NvbW1vbiAqaTJjX2NvbW1vbik7DQo+ICtpbnQgYW1kX21wMl91bnJlZ2lzdGVyX2Ni KHN0cnVjdCBhbWRfaTJjX2NvbW1vbiAqaTJjX2NvbW1vbik7DQo+ICsNCj4gK3N0cnVjdCBhbWRf bXAyX2RldiAqYW1kX21wMl9maW5kX2RldmljZSh2b2lkKTsNCj4gKw0KPiArc3RhdGljIGlubGlu ZSB2b2lkIGFtZF9tcDJfcG1fcnVudGltZV9nZXQoc3RydWN0IGFtZF9tcDJfZGV2ICptcDJfZGV2 KQ0KPiArew0KPiArCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJm1wMl9kZXYtPnBjaV9kZXYtPmRldik7 DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBhbWRfbXAyX3BtX3J1bnRpbWVfcHV0 KHN0cnVjdCBhbWRfbXAyX2RldiAqbXAyX2RldikNCj4gK3sNCj4gKwlwbV9ydW50aW1lX21hcmtf bGFzdF9idXN5KCZtcDJfZGV2LT5wY2lfZGV2LT5kZXYpOw0KPiArCXBtX3J1bnRpbWVfcHV0X2F1 dG9zdXNwZW5kKCZtcDJfZGV2LT5wY2lfZGV2LT5kZXYpOw0KPiArfQ0KPiArDQo+ICsjZW5kaWYN Cj4gDQoNClRoYW5rcyBmb3IgdGhlIHB1c2guDQpMb29rcyBPayBhbmQgYXMgbWVudGlvbmVkIGlu IHByZXZpb3VzIG1haWwsIHdlIG5lZWQgYm90aCBtb2R1bGVzIHNlcGFyYXRlbHkuDQoNClRoYW5r cw0KTmVoYWwgU2hhaCANCg==