Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp444029ybi; Thu, 30 May 2019 00:53:45 -0700 (PDT) X-Google-Smtp-Source: APXvYqzsELzUdVC8kW7ITMFPNEilL7ZNMP6uIKAmLXCHzdm8C8TdrKrBQLwSaqnRWbuclFXafvyw X-Received: by 2002:a05:6a00:43:: with SMTP id i3mr2414089pfk.113.1559202825121; Thu, 30 May 2019 00:53:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1559202825; cv=none; d=google.com; s=arc-20160816; b=ooup7fxMLdMVbhYsndfKg7nkYi/cdRDj5AbuD42WVjiiGK2VjCsi96qAW/WWl0+Ukc 4JjepxABjhOe4hI9AwJV2B3jjw1ffee1Pas4yrS9P8yqHBnDtxSroN42t4bbMpBlCIv9 S1bP2ifC0NXgFDX85W4/gJceUUsR/sZ3mxOGyzVEjInsEDmYWlm5jcIyUNPxzpQXjyuO 55abDKLPZd3zVBe7uNhOZLrSCbTh9pz6zHlSXu8M2htA8ClFBgN48PVKFg1A9j2j5jI/ wK1vAC9qYpBg3bYkPPaej8hrkIdwRsetf4FjNZtB/QPKK8c3xKisL2yALx/d0uX4hCPB qc1g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-language:accept-language:message-id:date:thread-index :thread-topic:subject:cc:to:from:dkim-signature; bh=guiPO6O1KwPveo9mvltQyxFsJwnwQjE9KfdzRhmwPLM=; b=VKmHu4181nTHhM+h2CWMPPazMA7H/9X13fNAG0V2SMMOE3ZicoN9cVbHi2k/ex6+LX shzgr1wvNYS2dkXD2oVCifRaA3ofgYpweHzKQHTziTxJGXR2ZLUWFJjfNLSjHUnMk0A+ 3gcNonnb0LMVhnqH6888sJZefp4/AWCLxP4nFBqCyKRjpXXCU3XtUo1v9UaUJe0t4ZCo 4UULC8eqZe3W6ivHmAnNnpBkC+FPe2cyeEEct/XnOV3i3ypI1G8h/p8Vn2n9v3u0G6p8 OkAPjAn7VTKUBuv7KUj4E3B95mJsC2FpEI5POcwHy22fnU3ztG9GTuUaLdPuYy04WXI7 UY6g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@microchiptechnology.onmicrosoft.com header.s=selector1-microchiptechnology-onmicrosoft-com header.b=fYm3qpba; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=microchip.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id g7si2550241pgb.109.2019.05.30.00.53.27; Thu, 30 May 2019 00:53:45 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@microchiptechnology.onmicrosoft.com header.s=selector1-microchiptechnology-onmicrosoft-com header.b=fYm3qpba; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=microchip.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727702AbfE3Huo (ORCPT + 99 others); Thu, 30 May 2019 03:50:44 -0400 Received: from esa4.microchip.iphmx.com ([68.232.154.123]:14403 "EHLO esa4.microchip.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726027AbfE3Hun (ORCPT ); Thu, 30 May 2019 03:50:43 -0400 Received-SPF: Pass (esa4.microchip.iphmx.com: domain of Eugen.Hristev@microchip.com designates 198.175.253.82 as permitted sender) identity=mailfrom; client-ip=198.175.253.82; receiver=esa4.microchip.iphmx.com; envelope-from="Eugen.Hristev@microchip.com"; x-sender="Eugen.Hristev@microchip.com"; x-conformance=spf_only; x-record-type="v=spf1"; x-record-text="v=spf1 mx a:ushub1.microchip.com a:smtpout.microchip.com a:mx1.microchip.iphmx.com a:mx2.microchip.iphmx.com include:servers.mcsv.net include:mktomail.com include:spf.protection.outlook.com ~all" Received-SPF: None (esa4.microchip.iphmx.com: no sender authenticity information available from domain of postmaster@email.microchip.com) identity=helo; client-ip=198.175.253.82; receiver=esa4.microchip.iphmx.com; envelope-from="Eugen.Hristev@microchip.com"; x-sender="postmaster@email.microchip.com"; x-conformance=spf_only Authentication-Results: esa4.microchip.iphmx.com; spf=Pass smtp.mailfrom=Eugen.Hristev@microchip.com; spf=None smtp.helo=postmaster@email.microchip.com; dkim=pass (signature verified) header.i=@microchiptechnology.onmicrosoft.com; dmarc=pass (p=none dis=none) d=microchip.com X-IronPort-AV: E=Sophos;i="5.60,530,1549954800"; d="scan'208";a="34836246" Received: from smtpout.microchip.com (HELO email.microchip.com) ([198.175.253.82]) by esa4.microchip.iphmx.com with ESMTP/TLS/AES256-SHA256; 30 May 2019 00:50:35 -0700 Received: from chn-vm-ex02.mchp-main.com (10.10.87.72) by chn-vm-ex01.mchp-main.com (10.10.87.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 30 May 2019 00:50:22 -0700 Received: from NAM04-BN3-obe.outbound.protection.outlook.com (10.10.215.89) by email.microchip.com (10.10.87.72) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.1713.5 via Frontend Transport; Thu, 30 May 2019 00:50:22 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microchiptechnology.onmicrosoft.com; s=selector1-microchiptechnology-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=guiPO6O1KwPveo9mvltQyxFsJwnwQjE9KfdzRhmwPLM=; b=fYm3qpbam0TkAJWc2yjKHhuv9b3nk92b512AOr6vfWCtcWS7A21wmmBrP5eInfSKfNCHgSFEWpvw1LCKwsz/dUtw9l1+1Y/J1DjVseKXDW9Es2YGvyRQJ4BSAmV/Z+6EpLu0lyXqUxxesvZG5cteMHufo798NnoDFl3xUJN3XOM= Received: from DM5PR11MB1242.namprd11.prod.outlook.com (10.168.108.8) by DM5PR11MB2025.namprd11.prod.outlook.com (10.168.102.17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1922.18; Thu, 30 May 2019 07:50:18 +0000 Received: from DM5PR11MB1242.namprd11.prod.outlook.com ([fe80::2807:f606:3b7c:cce9]) by DM5PR11MB1242.namprd11.prod.outlook.com ([fe80::2807:f606:3b7c:cce9%9]) with mapi id 15.20.1922.021; Thu, 30 May 2019 07:50:18 +0000 From: To: , , , CC: , Subject: [PATCH v2] media: atmel: atmel-isc: split driver into driver base and isc Thread-Topic: [PATCH v2] media: atmel: atmel-isc: split driver into driver base and isc Thread-Index: AQHVFrxThsCvxgIDlEymA9iRK8Mn9g== Date: Thu, 30 May 2019 07:50:18 +0000 Message-ID: <1559202331-15397-1-git-send-email-eugen.hristev@microchip.com> Accept-Language: ro-RO, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: VI1PR08CA0193.eurprd08.prod.outlook.com (2603:10a6:800:d2::23) To DM5PR11MB1242.namprd11.prod.outlook.com (2603:10b6:3:14::8) x-ms-exchange-messagesentrepresentingtype: 1 x-mailer: git-send-email 2.7.4 x-originating-ip: [94.177.32.154] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: cb2b9774-b4ca-4687-237e-08d6e4d37539 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(2017052603328)(7193020);SRVR:DM5PR11MB2025; x-ms-traffictypediagnostic: DM5PR11MB2025: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:6790; x-forefront-prvs: 00531FAC2C x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(366004)(136003)(396003)(39860400002)(346002)(376002)(199004)(189003)(478600001)(6486002)(14444005)(81166006)(71200400001)(486006)(86362001)(71190400001)(81156014)(6506007)(4326008)(3846002)(6116002)(64756008)(107886003)(73956011)(256004)(66446008)(66946007)(25786009)(66476007)(66556008)(30864003)(14454004)(8936002)(2906002)(53936002)(54906003)(72206003)(6512007)(5660300002)(36756003)(66066001)(386003)(186003)(102836004)(26005)(53946003)(476003)(2616005)(68736007)(52116002)(2501003)(99286004)(50226002)(8676002)(316002)(2201001)(305945005)(110136005)(7736002)(6436002)(461764006)(2004002)(579004)(559001)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:DM5PR11MB2025;H:DM5PR11MB1242.namprd11.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: microchip.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: 5eyjBZN9x4FPtZJJFY+ECCHBiCEKcZBSbvT/kvqCyWaKCtU/L10oMEBS/AiwYCJOZFRZUqdv454VU+AD4vXn0bVuOd80nAbYPJOfdxWlDYlJ7ynWUh2l1pnzv5gs6B5SCFOV+Ng3l5UlhbTccJohEkQjoGm3Klex7hWm+G9CnZl6hxfP7OJ+JCi6zU9P1tv4rmXi7hqFMlUqycjZBAfm5dHzKL8693X/h6fJal/mqHeZ1ga7DRYwn1nHFI8TmXKiKLVxrerQXjrkcz6X+jir0AmSKMgf+SwjZZFcbpiH4rOUHc82ZzK+e6dVnwsJdWf6+FQoGXsZmuzP41JSVYH40jUMTG8acnZUrd5jZ8aA60FpbzryMTXf/r6B595imn4mBk/puvkcuy4Zo+blnGIvHkuE5OWSxS3l0xjMSqw8YUQ= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: cb2b9774-b4ca-4687-237e-08d6e4d37539 X-MS-Exchange-CrossTenant-originalarrivaltime: 30 May 2019 07:50:18.2761 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3f4057f3-b418-4d4e-ba84-d55b4e897d88 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: eugen.hristev@microchip.com X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR11MB2025 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org RnJvbTogRXVnZW4gSHJpc3RldiA8ZXVnZW4uaHJpc3RldkBtaWNyb2NoaXAuY29tPg0KDQpUaGlz IHNwbGl0cyB0aGUgQXRtZWwgSVNDIGRyaXZlciBpbnRvIGEgY29tbW9uIGJhc2U6IGF0bWVsLWlz Yy1iYXNlLmMNCmFuZCB0aGUgZHJpdmVyIHByb2JlL2R0IHBhcnQgLCBhdG1lbC1zYW1hNWQyLWlz Yy5jDQpUaGlzIGlzIG5lZWRlZCB0byBrZWVwIGEgY29tbW9uIGdyb3VuZCBmb3IgdGhlIHNlbnNv ciBjb250cm9sbGVyIHdoaWNoIHdpbGwNCmJlIHJldXNlZC4NClRoZSBhdG1lbC1pc2Mgd2lsbCB1 c2UgdGhlIGNvbW1vbiBzeW1ib2xzIGluc2lkZSB0aGUgYXRtZWwtaXNjLWJhc2UNCkZ1dHVyZSBk cml2ZXIgd2lsbCBhbHNvIHVzZSB0aGUgc2FtZSBzeW1ib2xzIGFuZCByZWRlZmluZSBkaWZmZXJl bnQgYXNwZWN0cywNCmZvciBhIGRpZmZlcmVudCB2ZXJzaW9uIG9mIHRoZSBJU0MuDQpUaGlzIGlz IGRvbmUgdG8gYXZvaWQgY29tcGxldGUgY29kZSBkdXBsaWNhdGlvbiBieSBjcmVhdGluZyBhIHRv dGFsbHkNCmRpZmZlcmVudCBkcml2ZXIgZm9yIHRoZSBuZXcgdmFyaWFudCBvZiB0aGUgSVNDLg0K DQpTaWduZWQtb2ZmLWJ5OiBFdWdlbiBIcmlzdGV2IDxldWdlbi5ocmlzdGV2QG1pY3JvY2hpcC5j b20+DQotLS0NCg0KSGVsbG8gSGFucywNCg0KSSBhbSByZXNlbmRpbmcgdGhpcyB3aXRoIHRoZSBy ZXF1aXJlZCBmaXhlcy4NCllvdSBhc2tlZCBtZSBhYm91dCB0aGUgI2lmZGVmIGFyb3VuZCBBVE1F TF9JU0NfTkFNRSwgaXQncyBiZWNhdXNlIEkgd2FzDQp0aGlua2luZyB0byBoYXZlIHRoZSBBVE1F TF9JU0NfTkFNRSBkaWZmZXJlbnQgYnkgZWFjaCBkcml2ZXIgdGhhdCB1c2UNCnRoZSBhdG1lbC1p c2MuaCwgYnV0IGZvciBub3cgSSByZW1vdmVkIGFueSBpZmRlZiBhcm91bmQgaXQsIGFuZCB3aWxs DQpjb25zaWRlciBhIGRpZmZlcmVudCBkZWZpbmUgZm9yIG5ldyBkcml2ZXJzLg0KDQpDaGFuZ2Vz IGluIHYyOg0KLSByZW5hbWVkIGF0bWVsLWlzYy5jIHRvIGF0bWVsLXNhbWE1ZDItaXNjLmMgYXMg c2FtYTVkMiBpcyB0aGUgU29DIHRoYXQNCiAgaW5jbHVkZXMgdGhpcyBoYXJkd2FyZSBibG9jay4g VGhlIG1vZHVsZSB3aWxsIHN0aWxsIGJlIG5hbWVkIGF0bWVsLWlzYy5rbw0KLSByZW1vdmVkIGlm ZGVmIGFyb3VuZCBkZWZpbml0aW9uIG9mIEFUTUVMX0lTQ19OQU1FDQotIG1vdmVkIGV4dGVybmFs IGRlY2xhcmF0aW9ucyBpbiB0aGUgc3BlY2lmaWMgZmlsZXMsIHRoaXMgd2FzIGJyZWFraW5nDQog IG1vZHVsZSBsb2FkaW5nDQoNCnY0bDItY29tcGxpYW5jZSBTSEE6IDBkNjFkZGVkZTdkMzQwZmZh MWM3NWEyODgyZTMwYzQ1NWVmM2Q4YjgsIDMyIGJpdGF0bWVsLWlzYyBmMDAwODAwMC5pc2M6ID09 PT09PT09PT09PT09PT09ICBTVEFSVCBTVEFUVVMgID09PT09PT09PT09PT09PT09DQoNCmF0bWVs cGxpYW5jZSB0ZXN0IGZvciBhdG1lbC1pc2MgZGV2aWNlIC9kZXYvdmlkZW8wOg0KDQpEcml2ZXIg SW5mbzoNCiAgICAgICAgRHJpdmVyIG5hbWUgICAgICA6IGF0bWVsLWlzYw0KICAgICAgICBDYXJk IHR5cGUgICAgICAgIDogQXRtZWwgSW1hZ2UgU2Vuc29yIENvbnRyb2xsZXINCiAgICAgICAgQnVz IGluZm8gICAgICAgICA6IHBsYXRmb3JtOmF0bWVsLWlzYyBmMDAwODAwMC5pc2MNCiAgICAgICAg RHJpdmVyIHZlcnNpb24gICA6IDUuMi4wDQogICAgICAgIENhcGFiaWxpdGllcyAgICAgOiAweDg0 MjAwMDAxDQogICAgICAgICAgICAgICAgVmlkZW8gQ2FwdHVyZQ0KICAgICAgICAgICAgICAgIFN0 cmVhbWluZw0KICAgICAgICAgICAgICAgIEV4dGVuZGVkIFBpeCBGb3JtYXQNCiAgICAgICAgICAg ICAgICBEZXZpY2UgQ2FwYWJpbGl0aWVzDQogICAgICAgIERldmljZSBDYXBzICAgICAgOiAweDA0 MjAwMDAxDQogICAgICAgICAgICAgICAgVmlkZW8gQ2FwdHVyZQ0KICAgICAgICAgICAgICAgIFN0 cmVhbWluZw0KICAgICAgICAgICAgICAgIEV4dGVuZGVkIFBpeCBGb3JtYXQNCg0KUmVxdWlyZWQg aW9jdGxzOg0KICAgICAgICB0ZXN0IFZJRElPQ19RVUVSWUNBUDogT0sNCg0KQWxsb3cgZm9yIG11 bHRpcGxlIG9wZW5zOg0KICAgICAgICB0ZXN0IHNlY29uZCAvZGV2L3ZpZGVvMCBvcGVuOiBPSw0K ICAgICAgICB0ZXN0IFZJRElPQ19RVUVSWUNBUDogT0sNCiAgICAgICAgdGVzdCBWSURJT0NfRy9T X1BSSU9SSVRZOiBPSw0KICAgICAgICB0ZXN0IGZvciB1bmxpbWl0ZWQgb3BlbnM6IE9LDQoNCkRl YnVnIGlvY3RsczoNCiAgICAgICAgdGVzdCBWSURJT0NfREJHX0cvU19SRUdJU1RFUjogT0sgKE5v dCBTdXBwb3J0ZWQpDQotaXNjIGYwMDA4MDAwLmlzYzogQnJpZ2h0bmVzczogMA0KYXRtZWwtaXNj IGYwMDA4MDAwLmlzYzogQ29udHJhc3Q6IDI1Ng0KYXRtZWwtaXNjIGYwMDA4MDAwLmlzYzogR2Ft bWE6IDINCmF0bWVsLWlzYyBmMDAwODAwMC5pc2M6IFdoaXRlIEJhbGFuY2UsIEF1dG9tYXRpYzog dHJ1ZQ0KYXRtZWwtaXNjIGYwMDA4MDAwLmlzYzogPT09PT09PT09PT09PT09PT09ICBFTkQgU1RB VFVTICA9PT09PT09PT09PT09PT09PT0NCiAgICAgICAgdGVzdCBWSURJT0NfTE9HX1NUQVRVUzog T0sNCg0KSW5wdXQgaW9jdGxzOg0KICAgICAgICB0ZXN0IFZJRElPQ19HL1NfVFVORVIvRU5VTV9G UkVRX0JBTkRTOiBPSyAoTm90IFN1cHBvcnRlZCkNCiAgICAgICAgdGVzdCBWSURJT0NfRy9TX0ZS RVFVRU5DWTogT0sgKE5vdCBTdXBwb3J0ZWQpDQogICAgICAgIHRlc3QgVklESU9DX1NfSFdfRlJF UV9TRUVLOiBPSyAoTm90IFN1cHBvcnRlZCkNCiAgICAgICAgdGVzdCBWSURJT0NfRU5VTUFVRElP OiBPSyAoTm90IFN1cHBvcnRlZCkNCiAgICAgICAgdGVzdCBWSURJT0NfRy9TL0VOVU1JTlBVVDog T0sNCiAgICAgICAgdGVzdCBWSURJT0NfRy9TX0FVRElPOiBPSyAoTm90IFN1cHBvcnRlZCkNCiAg ICAgICAgSW5wdXRzOiAxIEF1ZGlvIElucHV0czogMCBUdW5lcnM6IDANCg0KT3V0cHV0IGlvY3Rs czoNCiAgICAgICAgdGVzdCBWSURJT0NfRy9TX01PRFVMQVRPUjogT0sgKE5vdCBTdXBwb3J0ZWQp DQogICAgICAgIHRlc3QgVklESU9DX0cvU19GUkVRVUVOQ1k6IE9LIChOb3QgU3VwcG9ydGVkKQ0K ICAgICAgICB0ZXN0IFZJRElPQ19FTlVNQVVET1VUOiBPSyAoTm90IFN1cHBvcnRlZCkNCiAgICAg ICAgdGVzdCBWSURJT0NfRy9TL0VOVU1PVVRQVVQ6IE9LIChOb3QgU3VwcG9ydGVkKQ0KICAgICAg ICB0ZXN0IFZJRElPQ19HL1NfQVVET1VUOiBPSyAoTm90IFN1cHBvcnRlZCkNCiAgICAgICAgT3V0 cHV0czogMCBBdWRpbyBPdXRwdXRzOiAwIE1vZHVsYXRvcnM6IDANCg0KSW5wdXQvT3V0cHV0IGNv bmZpZ3VyYXRpb24gaW9jdGxzOg0KICAgICAgICB0ZXN0IFZJRElPQ19FTlVNL0cvUy9RVUVSWV9T VEQ6IE9LIChOb3QgU3VwcG9ydGVkKQ0KICAgICAgICB0ZXN0IFZJRElPQ19FTlVNL0cvUy9RVUVS WV9EVl9USU1JTkdTOiBPSyAoTm90IFN1cHBvcnRlZCkNCiAgICAgICAgdGVzdCBWSURJT0NfRFZf VElNSU5HU19DQVA6IE9LIChOb3QgU3VwcG9ydGVkKQ0KICAgICAgICB0ZXN0IFZJRElPQ19HL1Nf RURJRDogT0sgKE5vdCBTdXBwb3J0ZWQpDQoNCkNvbnRyb2wgaW9jdGxzIChJbnB1dCAwKToNCiAg ICAgICAgdGVzdCBWSURJT0NfUVVFUllfRVhUX0NUUkwvUVVFUllNRU5VOiBPSw0KICAgICAgICB0 ZXN0IFZJRElPQ19RVUVSWUNUUkw6IE9LDQogICAgICAgIHRlc3QgVklESU9DX0cvU19DVFJMOiBP Sw0KICAgICAgICB0ZXN0IFZJRElPQ19HL1MvVFJZX0VYVF9DVFJMUzogT0sNCiAgICAgICAgdGVz dCBWSURJT0NfKFVOKVNVQlNDUklCRV9FVkVOVC9EUUVWRU5UOiBPSw0KICAgICAgICB0ZXN0IFZJ RElPQ19HL1NfSlBFR0NPTVA6IE9LIChOb3QgU3VwcG9ydGVkKQ0KICAgICAgICBTdGFuZGFyZCBD b250cm9sczogNiBQcml2YXRlIENvbnRyb2xzOiAwDQoNCkZvcm1hdCBpb2N0bHMgKElucHV0IDAp Og0KICAgICAgICB0ZXN0IFZJRElPQ19FTlVNX0ZNVC9GUkFNRVNJWkVTL0ZSQU1FSU5URVJWQUxT OiBPSw0KICAgICAgICB0ZXN0IFZJRElPQ19HL1NfUEFSTTogT0sNCiAgICAgICAgdGVzdCBWSURJ T0NfR19GQlVGOiBPSyAoTm90IFN1cHBvcnRlZCkNCiAgICAgICAgdGVzdCBWSURJT0NfR19GTVQ6 IE9LDQogICAgICAgIHRlc3QgVklESU9DX1RSWV9GTVQ6IE9LDQogICAgICAgIHRlc3QgVklESU9D X1NfRk1UOiBPSw0KICAgICAgICB0ZXN0IFZJRElPQ19HX1NMSUNFRF9WQklfQ0FQOiBPSyAoTm90 IFN1cHBvcnRlZCkNCiAgICAgICAgdGVzdCBDcm9wcGluZzogT0sgKE5vdCBTdXBwb3J0ZWQpDQog ICAgICAgIHRlc3QgQ29tcG9zaW5nOiBPSyAoTm90IFN1cHBvcnRlZCkNCiAgICAgICAgdGVzdCBT Y2FsaW5nOiBPSyAoTm90IFN1cHBvcnRlZCkNCg0KQ29kZWMgaW9jdGxzIChJbnB1dCAwKToNCiAg ICAgICAgdGVzdCBWSURJT0NfKFRSWV8pRU5DT0RFUl9DTUQ6IE9LIChOb3QgU3VwcG9ydGVkKQ0K ICAgICAgICB0ZXN0IFZJRElPQ19HX0VOQ19JTkRFWDogT0sgKE5vdCBTdXBwb3J0ZWQpDQogICAg ICAgIHRlc3QgVklESU9DXyhUUllfKURFQ09ERVJfQ01EOiBPSyAoTm90IFN1cHBvcnRlZCkNCg0K QnVmZmVyIGlvY3RscyAoSW5wdXQgMCk6DQogICAgICAgIHRlc3QgVklESU9DX1JFUUJVRlMvQ1JF QVRFX0JVRlMvUVVFUllCVUY6IE9LDQogICAgICAgIHRlc3QgVklESU9DX0VYUEJVRjogT0sNCiAg ICAgICAgdGVzdCBSZXF1ZXN0czogT0sgKE5vdCBTdXBwb3J0ZWQpDQoNClRvdGFsIGZvciBhdG1l bC1pc2MgZGV2aWNlIC9kZXYvdmlkZW8wOiA0NCwgU3VjY2VlZGVkOiA0NCwgRmFpbGVkOiAwLCBX YXJuaW5nczogMA0KDQoNCiBNQUlOVEFJTkVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAgICA0ICstDQogZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hdG1lbC9NYWtlZmls ZSAgICAgICAgICAgIHwgICAgNCArLQ0KIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRtZWwvYXRt ZWwtaXNjLWJhc2UuYyAgICB8IDIxNDggKysrKysrKysrKysrKysrKysrDQogZHJpdmVycy9tZWRp YS9wbGF0Zm9ybS9hdG1lbC9hdG1lbC1pc2MuYyAgICAgICAgIHwgMjYzNCAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tDQogZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hdG1lbC9hdG1lbC1pc2MuaCAgICAg ICAgIHwgIDE5MiArKw0KIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRtZWwvYXRtZWwtc2FtYTVk Mi1pc2MuYyB8ICAzNjUgKysrDQogNiBmaWxlcyBjaGFuZ2VkLCAyNzExIGluc2VydGlvbnMoKyks IDI2MzYgZGVsZXRpb25zKC0pDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxh dGZvcm0vYXRtZWwvYXRtZWwtaXNjLWJhc2UuYw0KIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L21lZGlhL3BsYXRmb3JtL2F0bWVsL2F0bWVsLWlzYy5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRtZWwvYXRtZWwtaXNjLmgNCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hdG1lbC9hdG1lbC1zYW1hNWQyLWlzYy5jDQoNCmRp ZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTDQppbmRleCA1Y2ZiZWE0Li4zZGM4 Mjg5IDEwMDY0NA0KLS0tIGEvTUFJTlRBSU5FUlMNCisrKyBiL01BSU5UQUlORVJTDQpAQCAtMTAy NzAsNyArMTAyNzAsOSBAQCBNSUNST0NISVAgSVNDIERSSVZFUg0KIE06CUV1Z2VuIEhyaXN0ZXYg PGV1Z2VuLmhyaXN0ZXZAbWljcm9jaGlwLmNvbT4NCiBMOglsaW51eC1tZWRpYUB2Z2VyLmtlcm5l bC5vcmcNCiBTOglTdXBwb3J0ZWQNCi1GOglkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2F0bWVsL2F0 bWVsLWlzYy5jDQorRjoJZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hdG1lbC9hdG1lbC1zYW1hNWQy LWlzYy5jDQorRjoJZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hdG1lbC9hdG1lbC1pc2MuaA0KK0Y6 CWRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRtZWwvYXRtZWwtaXNjLWJhc2UuYw0KIEY6CWRyaXZl cnMvbWVkaWEvcGxhdGZvcm0vYXRtZWwvYXRtZWwtaXNjLXJlZ3MuaA0KIEY6CURvY3VtZW50YXRp b24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZWRpYS9hdG1lbC1pc2MudHh0DQogDQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hdG1lbC9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEv cGxhdGZvcm0vYXRtZWwvTWFrZWZpbGUNCmluZGV4IDI3MDAwZDAuLjk0NjI3MzYgMTAwNjQ0DQot LS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2F0bWVsL01ha2VmaWxlDQorKysgYi9kcml2ZXJz L21lZGlhL3BsYXRmb3JtL2F0bWVsL01ha2VmaWxlDQpAQCAtMSwyICsxLDQgQEANCi1vYmotJChD T05GSUdfVklERU9fQVRNRUxfSVNDKSArPSBhdG1lbC1pc2Mubw0KK2F0bWVsLWlzYy1vYmpzID0g YXRtZWwtc2FtYTVkMi1pc2MubyBhdG1lbC1pc2MtYmFzZS5vDQorDQogb2JqLSQoQ09ORklHX1ZJ REVPX0FUTUVMX0lTSSkgKz0gYXRtZWwtaXNpLm8NCitvYmotJChDT05GSUdfVklERU9fQVRNRUxf SVNDKSArPSBhdG1lbC1pc2Mubw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0v YXRtZWwvYXRtZWwtaXNjLWJhc2UuYyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRtZWwvYXRt ZWwtaXNjLWJhc2UuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLjI0MWE5 YjINCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRtZWwvYXRt ZWwtaXNjLWJhc2UuYw0KQEAgLTAsMCArMSwyMTQ4IEBADQorLy8gU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjANCisvKg0KKyAqIE1pY3JvY2hpcCBJbWFnZSBTZW5zb3IgQ29udHJvbGxl ciAoSVNDKSBjb21tb24gZHJpdmVyIGJhc2UNCisgKg0KKyAqIENvcHlyaWdodCAoQykgMjAxNi0y MDE5IE1pY3JvY2hpcCBUZWNobm9sb2d5LCBJbmMuDQorICoNCisgKiBBdXRob3I6IFNvbmdqdW4g V3UgPHNvbmdqdW4ud3VAbWljcm9jaGlwLmNvbT4NCisgKiBBdXRob3I6IEV1Z2VuIEhyaXN0ZXYg PGV1Z2VuLmhyaXN0ZXZAbWljcm9jaGlwLmNvbT4NCisgKg0KKyAqLw0KKw0KKyNpbmNsdWRlIDxs aW51eC9jbGsuaD4NCisjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+DQorI2luY2x1ZGUgPGxpbnV4 L2Nsay1wcm92aWRlci5oPg0KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KKyNpbmNsdWRlIDxs aW51eC9pbnRlcnJ1cHQuaD4NCisjaW5jbHVkZSA8bGludXgvbWF0aDY0Lmg+DQorI2luY2x1ZGUg PGxpbnV4L21vZHVsZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9vZi5oPg0KKyNpbmNsdWRlIDxsaW51 eC9vZl9ncmFwaC5oPg0KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4NCisjaW5j bHVkZSA8bGludXgvcG1fcnVudGltZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4NCisj aW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+DQorDQorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY3Ry bHMuaD4NCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4NCisjaW5jbHVkZSA8bWVkaWEv djRsMi1ldmVudC5oPg0KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWltYWdlLXNpemVzLmg+DQorI2lu Y2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4NCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1md25vZGUu aD4NCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1zdWJkZXYuaD4NCisjaW5jbHVkZSA8bWVkaWEvdmlk ZW9idWYyLWRtYS1jb250aWcuaD4NCisNCisjaW5jbHVkZSAiYXRtZWwtaXNjLXJlZ3MuaCINCisj aW5jbHVkZSAiYXRtZWwtaXNjLmgiDQorDQorLyogbW9kdWxlIHBhcmFtZXRlcnMgKi8NCitleHRl cm4gdW5zaWduZWQgaW50IGRlYnVnOw0KK2V4dGVybiB1bnNpZ25lZCBpbnQgc2Vuc29yX3ByZWZl cnJlZDsNCisNCisvKiBUaGlzIGlzIGEgbGlzdCBvZiB0aGUgZm9ybWF0cyB0aGF0IHRoZSBJU0Mg Y2FuICpvdXRwdXQqICovDQorc3RydWN0IGlzY19mb3JtYXQgY29udHJvbGxlcl9mb3JtYXRzW10g PSB7DQorCXsNCisJCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX0FSR0I0NDQsDQorCX0sDQorCXsN CisJCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX0FSR0I1NTUsDQorCX0sDQorCXsNCisJCS5mb3Vy Y2MJCT0gVjRMMl9QSVhfRk1UX1JHQjU2NSwNCisJfSwNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwy X1BJWF9GTVRfQUJHUjMyLA0KKwl9LA0KKwl7DQorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9Y QkdSMzIsDQorCX0sDQorCXsNCisJCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1lVVjQyMCwNCisJ fSwNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfWVVZViwNCisJfSwNCisJew0KKwkJ LmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfWVVWNDIyUCwNCisJfSwNCisJew0KKwkJLmZvdXJjYwkJ PSBWNEwyX1BJWF9GTVRfR1JFWSwNCisJfSwNCit9Ow0KKw0KKy8qIFRoaXMgaXMgYSBsaXN0IG9m IGZvcm1hdHMgdGhhdCB0aGUgSVNDIGNhbiByZWNlaXZlIGFzICppbnB1dCogKi8NCitzdHJ1Y3Qg aXNjX2Zvcm1hdCBmb3JtYXRzX2xpc3RbXSA9IHsNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJ WF9GTVRfU0JHR1I4LA0KKwkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfU0JHR1I4XzFYOCwN CisJCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZFX0NGRzBfQlBTX0VJR0hULA0KKwkJLmNmYV9iYXlj ZmcJPSBJU0NfQkFZX0NGR19CR0JHLA0KKwl9LA0KKwl7DQorCQkuZm91cmNjCQk9IFY0TDJfUElY X0ZNVF9TR0JSRzgsDQorCQkubWJ1c19jb2RlCT0gTUVESUFfQlVTX0ZNVF9TR0JSRzhfMVg4LA0K KwkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkVfQ0ZHMF9CUFNfRUlHSFQsDQorCQkuY2ZhX2JheWNm Zwk9IElTQ19CQVlfQ0ZHX0dCR0IsDQorCX0sDQorCXsNCisJCS5mb3VyY2MJCT0gVjRMMl9QSVhf Rk1UX1NHUkJHOCwNCisJCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NHUkJHOF8xWDgsDQor CQkucGZlX2NmZzBfYnBzCT0gSVNDX1BGRV9DRkcwX0JQU19FSUdIVCwNCisJCS5jZmFfYmF5Y2Zn CT0gSVNDX0JBWV9DRkdfR1JHUiwNCisJfSwNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9G TVRfU1JHR0I4LA0KKwkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfU1JHR0I4XzFYOCwNCisJ CS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZFX0NGRzBfQlBTX0VJR0hULA0KKwkJLmNmYV9iYXljZmcJ PSBJU0NfQkFZX0NGR19SR1JHLA0KKwl9LA0KKwl7DQorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZN VF9TQkdHUjEwLA0KKwkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfU0JHR1IxMF8xWDEwLA0K KwkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkdfQ0ZHMF9CUFNfVEVOLA0KKwkJLmNmYV9iYXljZmcJ PSBJU0NfQkFZX0NGR19SR1JHLA0KKwl9LA0KKwl7DQorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZN VF9TR0JSRzEwLA0KKwkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfU0dCUkcxMF8xWDEwLA0K KwkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkdfQ0ZHMF9CUFNfVEVOLA0KKwkJLmNmYV9iYXljZmcJ PSBJU0NfQkFZX0NGR19HQkdCLA0KKwl9LA0KKwl7DQorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZN VF9TR1JCRzEwLA0KKwkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfU0dSQkcxMF8xWDEwLA0K KwkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkdfQ0ZHMF9CUFNfVEVOLA0KKwkJLmNmYV9iYXljZmcJ PSBJU0NfQkFZX0NGR19HUkdSLA0KKwl9LA0KKwl7DQorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZN VF9TUkdHQjEwLA0KKwkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfU1JHR0IxMF8xWDEwLA0K KwkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkdfQ0ZHMF9CUFNfVEVOLA0KKwkJLmNmYV9iYXljZmcJ PSBJU0NfQkFZX0NGR19SR1JHLA0KKwl9LA0KKwl7DQorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZN VF9TQkdHUjEyLA0KKwkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfU0JHR1IxMl8xWDEyLA0K KwkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkdfQ0ZHMF9CUFNfVFdFTFZFLA0KKwkJLmNmYV9iYXlj ZmcJPSBJU0NfQkFZX0NGR19CR0JHLA0KKwl9LA0KKwl7DQorCQkuZm91cmNjCQk9IFY0TDJfUElY X0ZNVF9TR0JSRzEyLA0KKwkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfU0dCUkcxMl8xWDEy LA0KKwkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkdfQ0ZHMF9CUFNfVFdFTFZFLA0KKwkJLmNmYV9i YXljZmcJPSBJU0NfQkFZX0NGR19HQkdCLA0KKwl9LA0KKwl7DQorCQkuZm91cmNjCQk9IFY0TDJf UElYX0ZNVF9TR1JCRzEyLA0KKwkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfU0dSQkcxMl8x WDEyLA0KKwkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkdfQ0ZHMF9CUFNfVFdFTFZFLA0KKwkJLmNm YV9iYXljZmcJPSBJU0NfQkFZX0NGR19HUkdSLA0KKwl9LA0KKwl7DQorCQkuZm91cmNjCQk9IFY0 TDJfUElYX0ZNVF9TUkdHQjEyLA0KKwkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfU1JHR0Ix Ml8xWDEyLA0KKwkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkdfQ0ZHMF9CUFNfVFdFTFZFLA0KKwkJ LmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19SR1JHLA0KKwl9LA0KKwl7DQorCQkuZm91cmNjCQk9 IFY0TDJfUElYX0ZNVF9HUkVZLA0KKwkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfWThfMVg4 LA0KKwkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkVfQ0ZHMF9CUFNfRUlHSFQsDQorCX0sDQorCXsN CisJCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1lVWVYsDQorCQkubWJ1c19jb2RlCT0gTUVESUFf QlVTX0ZNVF9ZVVlWOF8yWDgsDQorCQkucGZlX2NmZzBfYnBzCT0gSVNDX1BGRV9DRkcwX0JQU19F SUdIVCwNCisJfSwNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfUkdCNTY1LA0KKwkJ Lm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfUkdCNTY1XzJYOF9MRSwNCisJCS5wZmVfY2ZnMF9i cHMJPSBJU0NfUEZFX0NGRzBfQlBTX0VJR0hULA0KKwl9LA0KK307DQorDQorLyogR2FtbWEgdGFi bGUgd2l0aCBnYW1tYSAxLzIuMiAqLw0KK2NvbnN0IHUzMiBpc2NfZ2FtbWFfdGFibGVbR0FNTUFf TUFYICsgMV1bR0FNTUFfRU5UUklFU10gPSB7DQorCS8qIDAgLS0+IGdhbW1hIDEvMS44ICovDQor CXsgICAgICAweDY1LCAgMHg2NjAwMkYsICAweDk1MDAyNSwgIDB4QkIwMDIwLCAgMHhEQjAwMUQs ICAweEY4MDAxQSwNCisJICAweDExMzAwMTgsIDB4MTJCMDAxNywgMHgxNDIwMDE2LCAweDE1ODAw MTQsIDB4MTZEMDAxMywgMHgxODEwMDEyLA0KKwkgIDB4MTk0MDAxMiwgMHgxQTYwMDEyLCAweDFC ODAwMTEsIDB4MUM5MDAxMCwgMHgxREEwMDEwLCAweDFFQTAwMEYsDQorCSAgMHgxRkEwMDBGLCAw eDIwOTAwMEYsIDB4MjE4MDAwRiwgMHgyMjcwMDBFLCAweDIzNTAwMEUsIDB4MjQzMDAwRSwNCisJ ICAweDI1MTAwMEUsIDB4MjVGMDAwRCwgMHgyNkMwMDBELCAweDI3OTAwMEQsIDB4Mjg2MDAwRCwg MHgyOTMwMDBDLA0KKwkgIDB4MkEwMDAwQywgMHgyQUMwMDBDLCAweDJCODAwMEMsIDB4MkM0MDAw QywgMHgyRDAwMDBCLCAweDJEQzAwMEIsDQorCSAgMHgyRTcwMDBCLCAweDJGMzAwMEIsIDB4MkZF MDAwQiwgMHgzMDkwMDBCLCAweDMxNDAwMEIsIDB4MzFGMDAwQSwNCisJICAweDMyQTAwMEEsIDB4 MzM0MDAwQiwgMHgzM0YwMDBBLCAweDM0OTAwMEEsIDB4MzU0MDAwQSwgMHgzNUUwMDBBLA0KKwkg IDB4MzY4MDAwQSwgMHgzNzIwMDBBLCAweDM3QzAwMEEsIDB4Mzg2MDAwQSwgMHgzOTAwMDA5LCAw eDM5OTAwMEEsDQorCSAgMHgzQTMwMDA5LCAweDNBRDAwMDksIDB4M0I2MDAwOSwgMHgzQkYwMDBB LCAweDNDOTAwMDksIDB4M0QyMDAwOSwNCisJICAweDNEQjAwMDksIDB4M0U0MDAwOSwgMHgzRUQw MDA5LCAweDNGNjAwMDkgfSwNCisNCisJLyogMSAtLT4gZ2FtbWEgMS8yICovDQorCXsgICAgICAw eDdGLCAgMHg4MDAwMzQsICAweEI1MDAyOCwgIDB4REUwMDIxLCAweDEwMDAwMUUsIDB4MTFFMDAx QiwNCisJICAweDEzOTAwMTksIDB4MTUyMDAxNywgMHgxNkEwMDE1LCAweDE4MDAwMTQsIDB4MTk0 MDAxNCwgMHgxQTgwMDEzLA0KKwkgIDB4MUJCMDAxMiwgMHgxQ0QwMDExLCAweDFERjAwMTAsIDB4 MUVGMDAxMCwgMHgyMDAwMDBGLCAweDIwRjAwMEYsDQorCSAgMHgyMUYwMDBFLCAweDIyRDAwMEYs IDB4MjNDMDAwRSwgMHgyNEEwMDBFLCAweDI1ODAwMEQsIDB4MjY1MDAwRCwNCisJICAweDI3MzAw MEMsIDB4MjdGMDAwRCwgMHgyOEMwMDBDLCAweDI5OTAwMEMsIDB4MkE1MDAwQywgMHgyQjEwMDBC LA0KKwkgIDB4MkJDMDAwQywgMHgyQzgwMDBCLCAweDJEMzAwMEMsIDB4MkRGMDAwQiwgMHgyRUEw MDBBLCAweDJGNTAwMEEsDQorCSAgMHgyRkYwMDBCLCAweDMwQTAwMEEsIDB4MzE0MDAwQiwgMHgz MUYwMDBBLCAweDMyOTAwMEEsIDB4MzMzMDAwQSwNCisJICAweDMzRDAwMDksIDB4MzQ3MDAwOSwg MHgzNTAwMDBBLCAweDM1QTAwMDksIDB4MzYzMDAwQSwgMHgzNkQwMDA5LA0KKwkgIDB4Mzc2MDAw OSwgMHgzN0YwMDA5LCAweDM4ODAwMDksIDB4MzkxMDAwOSwgMHgzOUEwMDA5LCAweDNBMzAwMDks DQorCSAgMHgzQUMwMDA4LCAweDNCNDAwMDksIDB4M0JEMDAwOCwgMHgzQzYwMDA4LCAweDNDRTAw MDgsIDB4M0Q2MDAwOSwNCisJICAweDNERjAwMDgsIDB4M0U3MDAwOCwgMHgzRUYwMDA4LCAweDNG NzAwMDggfSwNCisNCisJLyogMiAtLT4gZ2FtbWEgMS8yLjIgKi8NCisJeyAgICAgIDB4OTksICAw eDlCMDAzOCwgIDB4RDQwMDJBLCAgMHhGRjAwMjMsIDB4MTIyMDAxRiwgMHgxNDEwMDFCLA0KKwkg IDB4MTVEMDAxOSwgMHgxNzYwMDE3LCAweDE4RTAwMTUsIDB4MUEzMDAxNSwgMHgxQjgwMDEzLCAw eDFDQzAwMTIsDQorCSAgMHgxREUwMDExLCAweDFGMDAwMTAsIDB4MjAxMDAxMCwgMHgyMTEwMDEw LCAweDIyMTAwMEYsIDB4MjMwMDAwRiwNCisJICAweDIzRjAwMEUsIDB4MjREMDAwRSwgMHgyNUIw MDBELCAweDI2OTAwMEMsIDB4Mjc2MDAwQywgMHgyODMwMDBDLA0KKwkgIDB4MjhGMDAwQywgMHgy OUIwMDBDLCAweDJBNzAwMEMsIDB4MkIzMDAwQiwgMHgyQkYwMDBCLCAweDJDQTAwMEIsDQorCSAg MHgyRDUwMDBCLCAweDJFMDAwMEEsIDB4MkVCMDAwQSwgMHgyRjUwMDBBLCAweDJGRjAwMEEsIDB4 MzBBMDAwQSwNCisJICAweDMxNDAwMDksIDB4MzFFMDAwOSwgMHgzMjcwMDBBLCAweDMzMTAwMDks IDB4MzNBMDAwOSwgMHgzNDQwMDA5LA0KKwkgIDB4MzREMDAwOSwgMHgzNTYwMDA5LCAweDM1RjAw MDksIDB4MzY4MDAwOCwgMHgzNzEwMDA4LCAweDM3OTAwMDksDQorCSAgMHgzODIwMDA4LCAweDM4 QTAwMDgsIDB4MzkzMDAwOCwgMHgzOUIwMDA4LCAweDNBMzAwMDgsIDB4M0FCMDAwOCwNCisJICAw eDNCMzAwMDgsIDB4M0JCMDAwOCwgMHgzQzMwMDA4LCAweDNDQjAwMDcsIDB4M0QyMDAwOCwgMHgz REEwMDA3LA0KKwkgIDB4M0UyMDAwNywgMHgzRTkwMDA3LCAweDNGMDAwMDgsIDB4M0Y4MDAwNyB9 LA0KK307DQorDQorI2RlZmluZSBJU0NfSVNfRk9STUFUX1JBVyhtYnVzX2NvZGUpIFwNCisJKCgo bWJ1c19jb2RlKSAmIDB4ZjAwMCkgPT0gMHgzMDAwKQ0KKw0KK3N0YXRpYyBpbmxpbmUgdm9pZCBp c2NfdXBkYXRlX2F3Yl9jdHJscyhzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KK3sNCisJc3RydWN0 IGlzY19jdHJscyAqY3RybHMgPSAmaXNjLT5jdHJsczsNCisNCisJcmVnbWFwX3dyaXRlKGlzYy0+ cmVnbWFwLCBJU0NfV0JfT19SR1IsDQorCQkgICAgIChJU0NfV0JfT19aRVJPX1ZBTCAtIChjdHJs cy0+b2Zmc2V0W0lTQ19ISVNfQ0ZHX01PREVfUl0pKSB8DQorCQkgICAgICgoSVNDX1dCX09fWkVS T19WQUwgLSBjdHJscy0+b2Zmc2V0W0lTQ19ISVNfQ0ZHX01PREVfR1JdKSA8PCAxNikpOw0KKwly ZWdtYXBfd3JpdGUoaXNjLT5yZWdtYXAsIElTQ19XQl9PX0JHQiwNCisJCSAgICAgKElTQ19XQl9P X1pFUk9fVkFMIC0gKGN0cmxzLT5vZmZzZXRbSVNDX0hJU19DRkdfTU9ERV9CXSkpIHwNCisJCSAg ICAgKChJU0NfV0JfT19aRVJPX1ZBTCAtIGN0cmxzLT5vZmZzZXRbSVNDX0hJU19DRkdfTU9ERV9H Ql0pIDw8IDE2KSk7DQorCXJlZ21hcF93cml0ZShpc2MtPnJlZ21hcCwgSVNDX1dCX0dfUkdSLA0K KwkJICAgICBjdHJscy0+Z2FpbltJU0NfSElTX0NGR19NT0RFX1JdIHwNCisJCSAgICAgKGN0cmxz LT5nYWluW0lTQ19ISVNfQ0ZHX01PREVfR1JdIDw8IDE2KSk7DQorCXJlZ21hcF93cml0ZShpc2Mt PnJlZ21hcCwgSVNDX1dCX0dfQkdCLA0KKwkJICAgICBjdHJscy0+Z2FpbltJU0NfSElTX0NGR19N T0RFX0JdIHwNCisJCSAgICAgKGN0cmxzLT5nYWluW0lTQ19ISVNfQ0ZHX01PREVfR0JdIDw8IDE2 KSk7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgdm9pZCBpc2NfcmVzZXRfYXdiX2N0cmxzKHN0cnVj dCBpc2NfZGV2aWNlICppc2MpDQorew0KKwlpbnQgYzsNCisNCisJZm9yIChjID0gSVNDX0hJU19D RkdfTU9ERV9HUjsgYyA8PSBJU0NfSElTX0NGR19NT0RFX0I7IGMrKykgew0KKwkJLyogZ2FpbnMg aGF2ZSBhIGZpeGVkIHBvaW50IGF0IDkgZGVjaW1hbHMgKi8NCisJCWlzYy0+Y3RybHMuZ2Fpbltj XSA9IDEgPDwgOTsNCisJCS8qIG9mZnNldHMgYXJlIGluIDIncyBjb21wbGVtZW50cywgdGhlIHZh bHVlDQorCQkgKiB3aWxsIGJlIHN1YnN0cmFjdGVkIGZyb20gSVNDX1dCX09fWkVST19WQUwgdG8g b2J0YWluDQorCQkgKiAyJ3MgY29tcGxlbWVudCBvZiBhIHZhbHVlIGJldHdlZW4gMCBhbmQNCisJ CSAqIElTQ19XQl9PX1pFUk9fVkFMID4+IDENCisJCSAqLw0KKwkJaXNjLT5jdHJscy5vZmZzZXRb Y10gPSBJU0NfV0JfT19aRVJPX1ZBTDsNCisJfQ0KK30NCisNCitzdGF0aWMgaW50IGlzY193YWl0 X2Nsa19zdGFibGUoc3RydWN0IGNsa19odyAqaHcpDQorew0KKwlzdHJ1Y3QgaXNjX2NsayAqaXNj X2NsayA9IHRvX2lzY19jbGsoaHcpOw0KKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBpc2NfY2xr LT5yZWdtYXA7DQorCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyB1c2Vjc190b19q aWZmaWVzKDEwMDApOw0KKwl1bnNpZ25lZCBpbnQgc3RhdHVzOw0KKw0KKwl3aGlsZSAodGltZV9i ZWZvcmUoamlmZmllcywgdGltZW91dCkpIHsNCisJCXJlZ21hcF9yZWFkKHJlZ21hcCwgSVNDX0NM S1NSLCAmc3RhdHVzKTsNCisJCWlmICghKHN0YXR1cyAmIElTQ19DTEtTUl9TSVApKQ0KKwkJCXJl dHVybiAwOw0KKw0KKwkJdXNsZWVwX3JhbmdlKDEwLCAyNTApOw0KKwl9DQorDQorCXJldHVybiAt RVRJTUVET1VUOw0KK30NCisNCitzdGF0aWMgaW50IGlzY19jbGtfcHJlcGFyZShzdHJ1Y3QgY2xr X2h3ICpodykNCit7DQorCXN0cnVjdCBpc2NfY2xrICppc2NfY2xrID0gdG9faXNjX2Nsayhodyk7 DQorDQorCWlmIChpc2NfY2xrLT5pZCA9PSBJU0NfSVNQQ0spDQorCQlwbV9ydW50aW1lX2dldF9z eW5jKGlzY19jbGstPmRldik7DQorDQorCXJldHVybiBpc2Nfd2FpdF9jbGtfc3RhYmxlKGh3KTsN Cit9DQorDQorc3RhdGljIHZvaWQgaXNjX2Nsa191bnByZXBhcmUoc3RydWN0IGNsa19odyAqaHcp DQorew0KKwlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsayA9IHRvX2lzY19jbGsoaHcpOw0KKw0KKwlp c2Nfd2FpdF9jbGtfc3RhYmxlKGh3KTsNCisNCisJaWYgKGlzY19jbGstPmlkID09IElTQ19JU1BD SykNCisJCXBtX3J1bnRpbWVfcHV0X3N5bmMoaXNjX2Nsay0+ZGV2KTsNCit9DQorDQorc3RhdGlj IGludCBpc2NfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrX2h3ICpodykNCit7DQorCXN0cnVjdCBpc2Nf Y2xrICppc2NfY2xrID0gdG9faXNjX2Nsayhodyk7DQorCXUzMiBpZCA9IGlzY19jbGstPmlkOw0K KwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBpc2NfY2xrLT5yZWdtYXA7DQorCXVuc2lnbmVkIGxv bmcgZmxhZ3M7DQorCXVuc2lnbmVkIGludCBzdGF0dXM7DQorDQorCWRldl9kYmcoaXNjX2Nsay0+ ZGV2LCAiSVNDIENMSzogJXMsIGRpdiA9ICVkLCBwYXJlbnQgaWQgPSAlZFxuIiwNCisJCV9fZnVu Y19fLCBpc2NfY2xrLT5kaXYsIGlzY19jbGstPnBhcmVudF9pZCk7DQorDQorCXNwaW5fbG9ja19p cnFzYXZlKCZpc2NfY2xrLT5sb2NrLCBmbGFncyk7DQorCXJlZ21hcF91cGRhdGVfYml0cyhyZWdt YXAsIElTQ19DTEtDRkcsDQorCQkJICAgSVNDX0NMS0NGR19ESVZfTUFTSyhpZCkgfCBJU0NfQ0xL Q0ZHX1NFTF9NQVNLKGlkKSwNCisJCQkgICAoaXNjX2Nsay0+ZGl2IDw8IElTQ19DTEtDRkdfRElW X1NISUZUKGlkKSkgfA0KKwkJCSAgIChpc2NfY2xrLT5wYXJlbnRfaWQgPDwgSVNDX0NMS0NGR19T RUxfU0hJRlQoaWQpKSk7DQorDQorCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DTEtFTiwgSVND X0NMSyhpZCkpOw0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc2NfY2xrLT5sb2NrLCBmbGFn cyk7DQorDQorCXJlZ21hcF9yZWFkKHJlZ21hcCwgSVNDX0NMS1NSLCAmc3RhdHVzKTsNCisJaWYg KHN0YXR1cyAmIElTQ19DTEsoaWQpKQ0KKwkJcmV0dXJuIDA7DQorCWVsc2UNCisJCXJldHVybiAt RUlOVkFMOw0KK30NCisNCitzdGF0aWMgdm9pZCBpc2NfY2xrX2Rpc2FibGUoc3RydWN0IGNsa19o dyAqaHcpDQorew0KKwlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsayA9IHRvX2lzY19jbGsoaHcpOw0K Kwl1MzIgaWQgPSBpc2NfY2xrLT5pZDsNCisJdW5zaWduZWQgbG9uZyBmbGFnczsNCisNCisJc3Bp bl9sb2NrX2lycXNhdmUoJmlzY19jbGstPmxvY2ssIGZsYWdzKTsNCisJcmVnbWFwX3dyaXRlKGlz Y19jbGstPnJlZ21hcCwgSVNDX0NMS0RJUywgSVNDX0NMSyhpZCkpOw0KKwlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZpc2NfY2xrLT5sb2NrLCBmbGFncyk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNj X2Nsa19pc19lbmFibGVkKHN0cnVjdCBjbGtfaHcgKmh3KQ0KK3sNCisJc3RydWN0IGlzY19jbGsg KmlzY19jbGsgPSB0b19pc2NfY2xrKGh3KTsNCisJdTMyIHN0YXR1czsNCisNCisJaWYgKGlzY19j bGstPmlkID09IElTQ19JU1BDSykNCisJCXBtX3J1bnRpbWVfZ2V0X3N5bmMoaXNjX2Nsay0+ZGV2 KTsNCisNCisJcmVnbWFwX3JlYWQoaXNjX2Nsay0+cmVnbWFwLCBJU0NfQ0xLU1IsICZzdGF0dXMp Ow0KKw0KKwlpZiAoaXNjX2Nsay0+aWQgPT0gSVNDX0lTUENLKQ0KKwkJcG1fcnVudGltZV9wdXRf c3luYyhpc2NfY2xrLT5kZXYpOw0KKw0KKwlyZXR1cm4gc3RhdHVzICYgSVNDX0NMSyhpc2NfY2xr LT5pZCkgPyAxIDogMDsNCit9DQorDQorc3RhdGljIHVuc2lnbmVkIGxvbmcNCitpc2NfY2xrX3Jl Y2FsY19yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQ0K K3sNCisJc3RydWN0IGlzY19jbGsgKmlzY19jbGsgPSB0b19pc2NfY2xrKGh3KTsNCisNCisJcmV0 dXJuIERJVl9ST1VORF9DTE9TRVNUKHBhcmVudF9yYXRlLCBpc2NfY2xrLT5kaXYgKyAxKTsNCit9 DQorDQorc3RhdGljIGludCBpc2NfY2xrX2RldGVybWluZV9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3 LA0KKwkJCQkgICBzdHJ1Y3QgY2xrX3JhdGVfcmVxdWVzdCAqcmVxKQ0KK3sNCisJc3RydWN0IGlz Y19jbGsgKmlzY19jbGsgPSB0b19pc2NfY2xrKGh3KTsNCisJbG9uZyBiZXN0X3JhdGUgPSAtRUlO VkFMOw0KKwlpbnQgYmVzdF9kaWZmID0gLTE7DQorCXVuc2lnbmVkIGludCBpLCBkaXY7DQorDQor CWZvciAoaSA9IDA7IGkgPCBjbGtfaHdfZ2V0X251bV9wYXJlbnRzKGh3KTsgaSsrKSB7DQorCQlz dHJ1Y3QgY2xrX2h3ICpwYXJlbnQ7DQorCQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOw0KKw0K KwkJcGFyZW50ID0gY2xrX2h3X2dldF9wYXJlbnRfYnlfaW5kZXgoaHcsIGkpOw0KKwkJaWYgKCFw YXJlbnQpDQorCQkJY29udGludWU7DQorDQorCQlwYXJlbnRfcmF0ZSA9IGNsa19od19nZXRfcmF0 ZShwYXJlbnQpOw0KKwkJaWYgKCFwYXJlbnRfcmF0ZSkNCisJCQljb250aW51ZTsNCisNCisJCWZv ciAoZGl2ID0gMTsgZGl2IDwgSVNDX0NMS19NQVhfRElWICsgMjsgZGl2KyspIHsNCisJCQl1bnNp Z25lZCBsb25nIHJhdGU7DQorCQkJaW50IGRpZmY7DQorDQorCQkJcmF0ZSA9IERJVl9ST1VORF9D TE9TRVNUKHBhcmVudF9yYXRlLCBkaXYpOw0KKwkJCWRpZmYgPSBhYnMocmVxLT5yYXRlIC0gcmF0 ZSk7DQorDQorCQkJaWYgKGJlc3RfZGlmZiA8IDAgfHwgYmVzdF9kaWZmID4gZGlmZikgew0KKwkJ CQliZXN0X3JhdGUgPSByYXRlOw0KKwkJCQliZXN0X2RpZmYgPSBkaWZmOw0KKwkJCQlyZXEtPmJl c3RfcGFyZW50X3JhdGUgPSBwYXJlbnRfcmF0ZTsNCisJCQkJcmVxLT5iZXN0X3BhcmVudF9odyA9 IHBhcmVudDsNCisJCQl9DQorDQorCQkJaWYgKCFiZXN0X2RpZmYgfHwgcmF0ZSA8IHJlcS0+cmF0 ZSkNCisJCQkJYnJlYWs7DQorCQl9DQorDQorCQlpZiAoIWJlc3RfZGlmZikNCisJCQlicmVhazsN CisJfQ0KKw0KKwlkZXZfZGJnKGlzY19jbGstPmRldiwNCisJCSJJU0MgQ0xLOiAlcywgYmVzdF9y YXRlID0gJWxkLCBwYXJlbnQgY2xrOiAlcyBAICVsZFxuIiwNCisJCV9fZnVuY19fLCBiZXN0X3Jh dGUsDQorCQlfX2Nsa19nZXRfbmFtZSgocmVxLT5iZXN0X3BhcmVudF9odyktPmNsayksDQorCQly ZXEtPmJlc3RfcGFyZW50X3JhdGUpOw0KKw0KKwlpZiAoYmVzdF9yYXRlIDwgMCkNCisJCXJldHVy biBiZXN0X3JhdGU7DQorDQorCXJlcS0+cmF0ZSA9IGJlc3RfcmF0ZTsNCisNCisJcmV0dXJuIDA7 DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNjX2Nsa19zZXRfcGFyZW50KHN0cnVjdCBjbGtfaHcgKmh3 LCB1OCBpbmRleCkNCit7DQorCXN0cnVjdCBpc2NfY2xrICppc2NfY2xrID0gdG9faXNjX2Nsayho dyk7DQorDQorCWlmIChpbmRleCA+PSBjbGtfaHdfZ2V0X251bV9wYXJlbnRzKGh3KSkNCisJCXJl dHVybiAtRUlOVkFMOw0KKw0KKwlpc2NfY2xrLT5wYXJlbnRfaWQgPSBpbmRleDsNCisNCisJcmV0 dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB1OCBpc2NfY2xrX2dldF9wYXJlbnQoc3RydWN0IGNsa19o dyAqaHcpDQorew0KKwlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsayA9IHRvX2lzY19jbGsoaHcpOw0K Kw0KKwlyZXR1cm4gaXNjX2Nsay0+cGFyZW50X2lkOw0KK30NCisNCitzdGF0aWMgaW50IGlzY19j bGtfc2V0X3JhdGUoc3RydWN0IGNsa19odyAqaHcsDQorCQkJICAgICB1bnNpZ25lZCBsb25nIHJh dGUsDQorCQkJICAgICB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQ0KK3sNCisJc3RydWN0IGlz Y19jbGsgKmlzY19jbGsgPSB0b19pc2NfY2xrKGh3KTsNCisJdTMyIGRpdjsNCisNCisJaWYgKCFy YXRlKQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorDQorCWRpdiA9IERJVl9ST1VORF9DTE9TRVNUKHBh cmVudF9yYXRlLCByYXRlKTsNCisJaWYgKGRpdiA+IChJU0NfQ0xLX01BWF9ESVYgKyAxKSB8fCAh ZGl2KQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorDQorCWlzY19jbGstPmRpdiA9IGRpdiAtIDE7DQor DQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgaXNjX2Ns a19vcHMgPSB7DQorCS5wcmVwYXJlCT0gaXNjX2Nsa19wcmVwYXJlLA0KKwkudW5wcmVwYXJlCT0g aXNjX2Nsa191bnByZXBhcmUsDQorCS5lbmFibGUJCT0gaXNjX2Nsa19lbmFibGUsDQorCS5kaXNh YmxlCT0gaXNjX2Nsa19kaXNhYmxlLA0KKwkuaXNfZW5hYmxlZAk9IGlzY19jbGtfaXNfZW5hYmxl ZCwNCisJLnJlY2FsY19yYXRlCT0gaXNjX2Nsa19yZWNhbGNfcmF0ZSwNCisJLmRldGVybWluZV9y YXRlCT0gaXNjX2Nsa19kZXRlcm1pbmVfcmF0ZSwNCisJLnNldF9wYXJlbnQJPSBpc2NfY2xrX3Nl dF9wYXJlbnQsDQorCS5nZXRfcGFyZW50CT0gaXNjX2Nsa19nZXRfcGFyZW50LA0KKwkuc2V0X3Jh dGUJPSBpc2NfY2xrX3NldF9yYXRlLA0KK307DQorDQorc3RhdGljIGludCBpc2NfY2xrX3JlZ2lz dGVyKHN0cnVjdCBpc2NfZGV2aWNlICppc2MsIHVuc2lnbmVkIGludCBpZCkNCit7DQorCXN0cnVj dCByZWdtYXAgKnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0KKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5w ID0gaXNjLT5kZXYtPm9mX25vZGU7DQorCXN0cnVjdCBpc2NfY2xrICppc2NfY2xrOw0KKwlzdHJ1 Y3QgY2xrX2luaXRfZGF0YSBpbml0Ow0KKwljb25zdCBjaGFyICpjbGtfbmFtZSA9IG5wLT5uYW1l Ow0KKwljb25zdCBjaGFyICpwYXJlbnRfbmFtZXNbM107DQorCWludCBudW1fcGFyZW50czsNCisN CisJbnVtX3BhcmVudHMgPSBvZl9jbGtfZ2V0X3BhcmVudF9jb3VudChucCk7DQorCWlmIChudW1f cGFyZW50cyA8IDEgfHwgbnVtX3BhcmVudHMgPiAzKQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorDQor CWlmIChudW1fcGFyZW50cyA+IDIgJiYgaWQgPT0gSVNDX0lTUENLKQ0KKwkJbnVtX3BhcmVudHMg PSAyOw0KKw0KKwlvZl9jbGtfcGFyZW50X2ZpbGwobnAsIHBhcmVudF9uYW1lcywgbnVtX3BhcmVu dHMpOw0KKw0KKwlpZiAoaWQgPT0gSVNDX01DSykNCisJCW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5n KG5wLCAiY2xvY2stb3V0cHV0LW5hbWVzIiwgJmNsa19uYW1lKTsNCisJZWxzZQ0KKwkJY2xrX25h bWUgPSAiaXNjLWlzcGNrIjsNCisNCisJaW5pdC5wYXJlbnRfbmFtZXMJPSBwYXJlbnRfbmFtZXM7 DQorCWluaXQubnVtX3BhcmVudHMJPSBudW1fcGFyZW50czsNCisJaW5pdC5uYW1lCQk9IGNsa19u YW1lOw0KKwlpbml0Lm9wcwkJPSAmaXNjX2Nsa19vcHM7DQorCWluaXQuZmxhZ3MJCT0gQ0xLX1NF VF9SQVRFX0dBVEUgfCBDTEtfU0VUX1BBUkVOVF9HQVRFOw0KKw0KKwlpc2NfY2xrID0gJmlzYy0+ aXNjX2Nsa3NbaWRdOw0KKwlpc2NfY2xrLT5ody5pbml0CT0gJmluaXQ7DQorCWlzY19jbGstPnJl Z21hcAkJPSByZWdtYXA7DQorCWlzY19jbGstPmlkCQk9IGlkOw0KKwlpc2NfY2xrLT5kZXYJCT0g aXNjLT5kZXY7DQorCXNwaW5fbG9ja19pbml0KCZpc2NfY2xrLT5sb2NrKTsNCisNCisJaXNjX2Ns ay0+Y2xrID0gY2xrX3JlZ2lzdGVyKGlzYy0+ZGV2LCAmaXNjX2Nsay0+aHcpOw0KKwlpZiAoSVNf RVJSKGlzY19jbGstPmNsaykpIHsNCisJCWRldl9lcnIoaXNjLT5kZXYsICIlczogY2xvY2sgcmVn aXN0ZXIgZmFpbFxuIiwgY2xrX25hbWUpOw0KKwkJcmV0dXJuIFBUUl9FUlIoaXNjX2Nsay0+Y2xr KTsNCisJfSBlbHNlIGlmIChpZCA9PSBJU0NfTUNLKQ0KKwkJb2ZfY2xrX2FkZF9wcm92aWRlcihu cCwgb2ZfY2xrX3NyY19zaW1wbGVfZ2V0LCBpc2NfY2xrLT5jbGspOw0KKw0KKwlyZXR1cm4gMDsN Cit9DQorDQoraW50IGlzY19jbGtfaW5pdChzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KK3sNCisJ dW5zaWduZWQgaW50IGk7DQorCWludCByZXQ7DQorDQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9T SVpFKGlzYy0+aXNjX2Nsa3MpOyBpKyspDQorCQlpc2MtPmlzY19jbGtzW2ldLmNsayA9IEVSUl9Q VFIoLUVJTlZBTCk7DQorDQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlzYy0+aXNjX2Ns a3MpOyBpKyspIHsNCisJCXJldCA9IGlzY19jbGtfcmVnaXN0ZXIoaXNjLCBpKTsNCisJCWlmIChy ZXQpDQorCQkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQordm9pZCBp c2NfY2xrX2NsZWFudXAoc3RydWN0IGlzY19kZXZpY2UgKmlzYykNCit7DQorCXVuc2lnbmVkIGlu dCBpOw0KKw0KKwlvZl9jbGtfZGVsX3Byb3ZpZGVyKGlzYy0+ZGV2LT5vZl9ub2RlKTsNCisNCisJ Zm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaXNjLT5pc2NfY2xrcyk7IGkrKykgew0KKwkJc3Ry dWN0IGlzY19jbGsgKmlzY19jbGsgPSAmaXNjLT5pc2NfY2xrc1tpXTsNCisNCisJCWlmICghSVNf RVJSKGlzY19jbGstPmNsaykpDQorCQkJY2xrX3VucmVnaXN0ZXIoaXNjX2Nsay0+Y2xrKTsNCisJ fQ0KK30NCisNCitzdGF0aWMgaW50IGlzY19xdWV1ZV9zZXR1cChzdHJ1Y3QgdmIyX3F1ZXVlICp2 cSwNCisJCQkgICAgdW5zaWduZWQgaW50ICpuYnVmZmVycywgdW5zaWduZWQgaW50ICpucGxhbmVz LA0KKwkJCSAgICB1bnNpZ25lZCBpbnQgc2l6ZXNbXSwgc3RydWN0IGRldmljZSAqYWxsb2NfZGV2 c1tdKQ0KK3sNCisJc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHZiMl9nZXRfZHJ2X3ByaXYodnEp Ow0KKwl1bnNpZ25lZCBpbnQgc2l6ZSA9IGlzYy0+Zm10LmZtdC5waXguc2l6ZWltYWdlOw0KKw0K KwlpZiAoKm5wbGFuZXMpDQorCQlyZXR1cm4gc2l6ZXNbMF0gPCBzaXplID8gLUVJTlZBTCA6IDA7 DQorDQorCSpucGxhbmVzID0gMTsNCisJc2l6ZXNbMF0gPSBzaXplOw0KKw0KKwlyZXR1cm4gMDsN Cit9DQorDQorc3RhdGljIGludCBpc2NfYnVmZmVyX3ByZXBhcmUoc3RydWN0IHZiMl9idWZmZXIg KnZiKQ0KK3sNCisJc3RydWN0IHZiMl92NGwyX2J1ZmZlciAqdmJ1ZiA9IHRvX3ZiMl92NGwyX2J1 ZmZlcih2Yik7DQorCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2YjJfZ2V0X2Rydl9wcml2KHZi LT52YjJfcXVldWUpOw0KKwl1bnNpZ25lZCBsb25nIHNpemUgPSBpc2MtPmZtdC5mbXQucGl4LnNp emVpbWFnZTsNCisNCisJaWYgKHZiMl9wbGFuZV9zaXplKHZiLCAwKSA8IHNpemUpIHsNCisJCXY0 bDJfZXJyKCZpc2MtPnY0bDJfZGV2LCAiYnVmZmVyIHRvbyBzbWFsbCAoJWx1IDwgJWx1KVxuIiwN CisJCQkgdmIyX3BsYW5lX3NpemUodmIsIDApLCBzaXplKTsNCisJCXJldHVybiAtRUlOVkFMOw0K Kwl9DQorDQorCXZiMl9zZXRfcGxhbmVfcGF5bG9hZCh2YiwgMCwgc2l6ZSk7DQorDQorCXZidWYt PmZpZWxkID0gaXNjLT5mbXQuZm10LnBpeC5maWVsZDsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0K K3N0YXRpYyB2b2lkIGlzY19zdGFydF9kbWEoc3RydWN0IGlzY19kZXZpY2UgKmlzYykNCit7DQor CXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0KKwl1MzIgc2l6ZWltYWdlID0g aXNjLT5mbXQuZm10LnBpeC5zaXplaW1hZ2U7DQorCXUzMiBkY3RybF9kdmlldzsNCisJZG1hX2Fk ZHJfdCBhZGRyMDsNCisJdTMyIGgsIHc7DQorDQorCWggPSBpc2MtPmZtdC5mbXQucGl4LmhlaWdo dDsNCisJdyA9IGlzYy0+Zm10LmZtdC5waXgud2lkdGg7DQorDQorCS8qDQorCSAqIEluIGNhc2Ug dGhlIHNlbnNvciBpcyBub3QgUkFXLCBpdCB3aWxsIG91dHB1dCBhIHBpeGVsICgxMi0xNiBiaXRz KQ0KKwkgKiB3aXRoIHR3byBzYW1wbGVzIG9uIHRoZSBJU0MgRGF0YSBidXMgKHdoaWNoIGlzIDgt MTIpDQorCSAqIElTQyB3aWxsIGNvdW50IGVhY2ggc2FtcGxlLCBzbywgd2UgbmVlZCB0byBtdWx0 aXBseSB0aGVzZSB2YWx1ZXMNCisJICogYnkgdHdvLCB0byBnZXQgdGhlIHJlYWwgbnVtYmVyIG9m IHNhbXBsZXMgZm9yIHRoZSByZXF1aXJlZCBwaXhlbHMuDQorCSAqLw0KKwlpZiAoIUlTQ19JU19G T1JNQVRfUkFXKGlzYy0+Y29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2RlKSkgew0KKwkJaCA8PD0g MTsNCisJCXcgPDw9IDE7DQorCX0NCisNCisJLyoNCisJICogV2UgbGltaXQgdGhlIGNvbHVtbi9y b3cgY291bnQgdGhhdCB0aGUgSVNDIHdpbGwgb3V0cHV0IGFjY29yZGluZw0KKwkgKiB0byB0aGUg Y29uZmlndXJlZCByZXNvbHV0aW9uIHRoYXQgd2Ugd2FudC4NCisJICogVGhpcyB3aWxsIGF2b2lk IHRoZSBzaXR1YXRpb24gd2hlcmUgdGhlIHNlbnNvciBpcyBtaXNjb25maWd1cmVkLA0KKwkgKiBz ZW5kaW5nIG1vcmUgZGF0YSwgYW5kIHRoZSBJU0Mgd2lsbCBqdXN0IHRha2UgaXQgYW5kIERNQSB0 byBtZW1vcnksDQorCSAqIGNhdXNpbmcgY29ycnVwdGlvbi4NCisJICovDQorCXJlZ21hcF93cml0 ZShyZWdtYXAsIElTQ19QRkVfQ0ZHMSwNCisJCSAgICAgKElTQ19QRkVfQ0ZHMV9DT0xNSU4oMCkg JiBJU0NfUEZFX0NGRzFfQ09MTUlOX01BU0spIHwNCisJCSAgICAgKElTQ19QRkVfQ0ZHMV9DT0xN QVgodyAtIDEpICYgSVNDX1BGRV9DRkcxX0NPTE1BWF9NQVNLKSk7DQorDQorCXJlZ21hcF93cml0 ZShyZWdtYXAsIElTQ19QRkVfQ0ZHMiwNCisJCSAgICAgKElTQ19QRkVfQ0ZHMl9ST1dNSU4oMCkg JiBJU0NfUEZFX0NGRzJfUk9XTUlOX01BU0spIHwNCisJCSAgICAgKElTQ19QRkVfQ0ZHMl9ST1dN QVgoaCAtIDEpICYgSVNDX1BGRV9DRkcyX1JPV01BWF9NQVNLKSk7DQorDQorCXJlZ21hcF91cGRh dGVfYml0cyhyZWdtYXAsIElTQ19QRkVfQ0ZHMCwNCisJCQkgICBJU0NfUEZFX0NGRzBfQ09MRU4g fCBJU0NfUEZFX0NGRzBfUk9XRU4sDQorCQkJICAgSVNDX1BGRV9DRkcwX0NPTEVOIHwgSVNDX1BG RV9DRkcwX1JPV0VOKTsNCisNCisJYWRkcjAgPSB2YjJfZG1hX2NvbnRpZ19wbGFuZV9kbWFfYWRk cigmaXNjLT5jdXJfZnJtLT52Yi52YjJfYnVmLCAwKTsNCisJcmVnbWFwX3dyaXRlKHJlZ21hcCwg SVNDX0RBRDAsIGFkZHIwKTsNCisNCisJc3dpdGNoIChpc2MtPmNvbmZpZy5mb3VyY2MpIHsNCisJ Y2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIwOg0KKwkJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0RB RDEsIGFkZHIwICsgKHNpemVpbWFnZSAqIDIpIC8gMyk7DQorCQlyZWdtYXBfd3JpdGUocmVnbWFw LCBJU0NfREFEMiwgYWRkcjAgKyAoc2l6ZWltYWdlICogNSkgLyA2KTsNCisJCWJyZWFrOw0KKwlj YXNlIFY0TDJfUElYX0ZNVF9ZVVY0MjJQOg0KKwkJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0RB RDEsIGFkZHIwICsgc2l6ZWltYWdlIC8gMik7DQorCQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0Nf REFEMiwgYWRkcjAgKyAoc2l6ZWltYWdlICogMykgLyA0KTsNCisJCWJyZWFrOw0KKwlkZWZhdWx0 Og0KKwkJYnJlYWs7DQorCX0NCisNCisJZGN0cmxfZHZpZXcgPSBpc2MtPmNvbmZpZy5kY3RybF9k dmlldzsNCisNCisJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0RDVFJMLCBkY3RybF9kdmlldyB8 IElTQ19EQ1RSTF9JRV9JUyk7DQorCXNwaW5fbG9jaygmaXNjLT5hd2JfbG9jayk7DQorCXJlZ21h cF93cml0ZShyZWdtYXAsIElTQ19DVFJMRU4sIElTQ19DVFJMX0NBUFRVUkUpOw0KKwlzcGluX3Vu bG9jaygmaXNjLT5hd2JfbG9jayk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGlzY19zZXRfcGlwZWxp bmUoc3RydWN0IGlzY19kZXZpY2UgKmlzYywgdTMyIHBpcGVsaW5lKQ0KK3sNCisJc3RydWN0IHJl Z21hcCAqcmVnbWFwID0gaXNjLT5yZWdtYXA7DQorCXN0cnVjdCBpc2NfY3RybHMgKmN0cmxzID0g JmlzYy0+Y3RybHM7DQorCXUzMiB2YWwsIGJheV9jZmc7DQorCWNvbnN0IHUzMiAqZ2FtbWE7DQor CXVuc2lnbmVkIGludCBpOw0KKw0KKwkvKiBXQi0tPkNGQS0tPkNDLS0+R0FNLS0+Q1NDLS0+Q0JD LS0+U1VCNDIyLS0+U1VCNDIwICovDQorCWZvciAoaSA9IDA7IGkgPCBJU0NfUElQRV9MSU5FX05P REVfTlVNOyBpKyspIHsNCisJCXZhbCA9IHBpcGVsaW5lICYgQklUKGkpID8gMSA6IDA7DQorCQly ZWdtYXBfZmllbGRfd3JpdGUoaXNjLT5waXBlbGluZVtpXSwgdmFsKTsNCisJfQ0KKw0KKwlpZiAo IXBpcGVsaW5lKQ0KKwkJcmV0dXJuOw0KKw0KKwliYXlfY2ZnID0gaXNjLT5jb25maWcuc2RfZm9y bWF0LT5jZmFfYmF5Y2ZnOw0KKw0KKwlpZiAoY3RybHMtPmF3YiA9PSBJU0NfV0JfTk9ORSkNCisJ CWlzY19yZXNldF9hd2JfY3RybHMoaXNjKTsNCisNCisJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVND X1dCX0NGRywgYmF5X2NmZyk7DQorCWlzY191cGRhdGVfYXdiX2N0cmxzKGlzYyk7DQorDQorCXJl Z21hcF93cml0ZShyZWdtYXAsIElTQ19DRkFfQ0ZHLCBiYXlfY2ZnIHwgSVNDX0NGQV9DRkdfRUlU UE9MKTsNCisNCisJZ2FtbWEgPSAmaXNjX2dhbW1hX3RhYmxlW2N0cmxzLT5nYW1tYV9pbmRleF1b MF07DQorCXJlZ21hcF9idWxrX3dyaXRlKHJlZ21hcCwgSVNDX0dBTV9CRU5UUlksIGdhbW1hLCBH QU1NQV9FTlRSSUVTKTsNCisJcmVnbWFwX2J1bGtfd3JpdGUocmVnbWFwLCBJU0NfR0FNX0dFTlRS WSwgZ2FtbWEsIEdBTU1BX0VOVFJJRVMpOw0KKwlyZWdtYXBfYnVsa193cml0ZShyZWdtYXAsIElT Q19HQU1fUkVOVFJZLCBnYW1tYSwgR0FNTUFfRU5UUklFUyk7DQorDQorCS8qIENvbnZlcnQgUkdC IHRvIFlVViAqLw0KKwlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfQ1NDX1lSX1lHLCAweDQyIHwg KDB4ODEgPDwgMTYpKTsNCisJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0NTQ19ZQl9PWSwgMHgx OSB8ICgweDEwIDw8IDE2KSk7DQorCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DU0NfQ0JSX0NC RywgMHhGREEgfCAoMHhGQjYgPDwgMTYpKTsNCisJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0NT Q19DQkJfT0NCLCAweDcwIHwgKDB4ODAgPDwgMTYpKTsNCisJcmVnbWFwX3dyaXRlKHJlZ21hcCwg SVNDX0NTQ19DUlJfQ1JHLCAweDcwIHwgKDB4RkEyIDw8IDE2KSk7DQorCXJlZ21hcF93cml0ZShy ZWdtYXAsIElTQ19DU0NfQ1JCX09DUiwgMHhGRUUgfCAoMHg4MCA8PCAxNikpOw0KKw0KKwlyZWdt YXBfd3JpdGUocmVnbWFwLCBJU0NfQ0JDX0JSSUdIVCwgY3RybHMtPmJyaWdodG5lc3MpOw0KKwly ZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfQ0JDX0NPTlRSQVNULCBjdHJscy0+Y29udHJhc3QpOw0K K30NCisNCitzdGF0aWMgaW50IGlzY191cGRhdGVfcHJvZmlsZShzdHJ1Y3QgaXNjX2RldmljZSAq aXNjKQ0KK3sNCisJc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNjLT5yZWdtYXA7DQorCXUzMiBz cjsNCisJaW50IGNvdW50ZXIgPSAxMDA7DQorDQorCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19D VFJMRU4sIElTQ19DVFJMX1VQUFJPKTsNCisNCisJcmVnbWFwX3JlYWQocmVnbWFwLCBJU0NfQ1RS TFNSLCAmc3IpOw0KKwl3aGlsZSAoKHNyICYgSVNDX0NUUkxfVVBQUk8pICYmIGNvdW50ZXItLSkg ew0KKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOw0KKwkJcmVnbWFwX3JlYWQocmVnbWFwLCBJ U0NfQ1RSTFNSLCAmc3IpOw0KKwl9DQorDQorCWlmIChjb3VudGVyIDwgMCkgew0KKwkJdjRsMl93 YXJuKCZpc2MtPnY0bDJfZGV2LCAiVGltZSBvdXQgdG8gdXBkYXRlIHByb2ZpbGVcbiIpOw0KKwkJ cmV0dXJuIC1FVElNRURPVVQ7DQorCX0NCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB2 b2lkIGlzY19zZXRfaGlzdG9ncmFtKHN0cnVjdCBpc2NfZGV2aWNlICppc2MsIGJvb2wgZW5hYmxl KQ0KK3sNCisJc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNjLT5yZWdtYXA7DQorCXN0cnVjdCBp c2NfY3RybHMgKmN0cmxzID0gJmlzYy0+Y3RybHM7DQorDQorCWlmIChlbmFibGUpIHsNCisJCXJl Z21hcF93cml0ZShyZWdtYXAsIElTQ19ISVNfQ0ZHLA0KKwkJCSAgICAgSVNDX0hJU19DRkdfTU9E RV9HUiB8DQorCQkJICAgICAoaXNjLT5jb25maWcuc2RfZm9ybWF0LT5jZmFfYmF5Y2ZnDQorCQkJ CQk8PCBJU0NfSElTX0NGR19CQVlTRUxfU0hJRlQpIHwNCisJCQkJCUlTQ19ISVNfQ0ZHX1JBUik7 DQorCQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfSElTX0NUUkwsIElTQ19ISVNfQ1RSTF9FTik7 DQorCQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfSU5URU4sIElTQ19JTlRfSElTRE9ORSk7DQor CQljdHJscy0+aGlzdF9pZCA9IElTQ19ISVNfQ0ZHX01PREVfR1I7DQorCQlpc2NfdXBkYXRlX3By b2ZpbGUoaXNjKTsNCisJCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DVFJMRU4sIElTQ19DVFJM X0hJU1JFUSk7DQorDQorCQljdHJscy0+aGlzdF9zdGF0ID0gSElTVF9FTkFCTEVEOw0KKwl9IGVs c2Ugew0KKwkJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0lOVERJUywgSVNDX0lOVF9ISVNET05F KTsNCisJCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19ISVNfQ1RSTCwgSVNDX0hJU19DVFJMX0RJ Uyk7DQorDQorCQljdHJscy0+aGlzdF9zdGF0ID0gSElTVF9ESVNBQkxFRDsNCisJfQ0KK30NCisN CitzdGF0aWMgaW50IGlzY19jb25maWd1cmUoc3RydWN0IGlzY19kZXZpY2UgKmlzYykNCit7DQor CXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0KKwl1MzIgcGZlX2NmZzAsIHJs cF9tb2RlLCBkY2ZnLCBtYXNrLCBwaXBlbGluZTsNCisJc3RydWN0IGlzY19zdWJkZXZfZW50aXR5 ICpzdWJkZXYgPSBpc2MtPmN1cnJlbnRfc3ViZGV2Ow0KKw0KKwlwZmVfY2ZnMCA9IGlzYy0+Y29u ZmlnLnNkX2Zvcm1hdC0+cGZlX2NmZzBfYnBzOw0KKwlybHBfbW9kZSA9IGlzYy0+Y29uZmlnLnJs cF9jZmdfbW9kZTsNCisJcGlwZWxpbmUgPSBpc2MtPmNvbmZpZy5iaXRzX3BpcGVsaW5lOw0KKw0K KwlkY2ZnID0gaXNjLT5jb25maWcuZGNmZ19pbW9kZSB8DQorCQkgICAgICAgSVNDX0RDRkdfWU1C U0laRV9CRUFUUzggfCBJU0NfRENGR19DTUJTSVpFX0JFQVRTODsNCisNCisJcGZlX2NmZzAgIHw9 IHN1YmRldi0+cGZlX2NmZzAgfCBJU0NfUEZFX0NGRzBfTU9ERV9QUk9HUkVTU0lWRTsNCisJbWFz ayA9IElTQ19QRkVfQ0ZHMF9CUFNfTUFTSyB8IElTQ19QRkVfQ0ZHMF9IUE9MX0xPVyB8DQorCSAg ICAgICBJU0NfUEZFX0NGRzBfVlBPTF9MT1cgfCBJU0NfUEZFX0NGRzBfUFBPTF9MT1cgfA0KKwkg ICAgICAgSVNDX1BGRV9DRkcwX01PREVfTUFTSyB8IElTQ19QRkVfQ0ZHMF9DQ0lSX0NSQyB8DQor CQkgICBJU0NfUEZFX0NGRzBfQ0NJUjY1NjsNCisNCisJcmVnbWFwX3VwZGF0ZV9iaXRzKHJlZ21h cCwgSVNDX1BGRV9DRkcwLCBtYXNrLCBwZmVfY2ZnMCk7DQorDQorCXJlZ21hcF91cGRhdGVfYml0 cyhyZWdtYXAsIElTQ19STFBfQ0ZHLCBJU0NfUkxQX0NGR19NT0RFX01BU0ssDQorCQkJICAgcmxw X21vZGUpOw0KKw0KKwlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfRENGRywgZGNmZyk7DQorDQor CS8qIFNldCB0aGUgcGlwZWxpbmUgKi8NCisJaXNjX3NldF9waXBlbGluZShpc2MsIHBpcGVsaW5l KTsNCisNCisJLyoNCisJICogVGhlIGN1cnJlbnQgaW1wbGVtZW50ZWQgaGlzdG9ncmFtIGlzIGF2 YWlsYWJsZSBmb3IgUkFXIFIsIEIsIEdCLCBHUg0KKwkgKiBjaGFubmVscy4gV2UgbmVlZCB0byBj aGVjayBpZiBzZW5zb3IgaXMgb3V0cHV0dGluZyBSQVcgQkFZRVINCisJICovDQorCWlmIChpc2Mt PmN0cmxzLmF3YiAmJg0KKwkgICAgSVNDX0lTX0ZPUk1BVF9SQVcoaXNjLT5jb25maWcuc2RfZm9y bWF0LT5tYnVzX2NvZGUpKQ0KKwkJaXNjX3NldF9oaXN0b2dyYW0oaXNjLCB0cnVlKTsNCisJZWxz ZQ0KKwkJaXNjX3NldF9oaXN0b2dyYW0oaXNjLCBmYWxzZSk7DQorDQorCS8qIFVwZGF0ZSBwcm9m aWxlICovDQorCXJldHVybiBpc2NfdXBkYXRlX3Byb2ZpbGUoaXNjKTsNCit9DQorDQorc3RhdGlj IGludCBpc2Nfc3RhcnRfc3RyZWFtaW5nKHN0cnVjdCB2YjJfcXVldWUgKnZxLCB1bnNpZ25lZCBp bnQgY291bnQpDQorew0KKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmIyX2dldF9kcnZfcHJp dih2cSk7DQorCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0KKwlzdHJ1Y3Qg aXNjX2J1ZmZlciAqYnVmOw0KKwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KKwlpbnQgcmV0Ow0KKw0K KwkvKiBFbmFibGUgc3RyZWFtIG9uIHRoZSBzdWIgZGV2aWNlICovDQorCXJldCA9IHY0bDJfc3Vi ZGV2X2NhbGwoaXNjLT5jdXJyZW50X3N1YmRldi0+c2QsIHZpZGVvLCBzX3N0cmVhbSwgMSk7DQor CWlmIChyZXQgJiYgcmV0ICE9IC1FTk9JT0NUTENNRCkgew0KKwkJdjRsMl9lcnIoJmlzYy0+djRs Ml9kZXYsICJzdHJlYW0gb24gZmFpbGVkIGluIHN1YmRldiAlZFxuIiwNCisJCQkgcmV0KTsNCisJ CWdvdG8gZXJyX3N0YXJ0X3N0cmVhbTsNCisJfQ0KKw0KKwlwbV9ydW50aW1lX2dldF9zeW5jKGlz Yy0+ZGV2KTsNCisNCisJcmV0ID0gaXNjX2NvbmZpZ3VyZShpc2MpOw0KKwlpZiAodW5saWtlbHko cmV0KSkNCisJCWdvdG8gZXJyX2NvbmZpZ3VyZTsNCisNCisJLyogRW5hYmxlIERNQSBpbnRlcnJ1 cHQgKi8NCisJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0lOVEVOLCBJU0NfSU5UX0RET05FKTsN CisNCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlzYy0+ZG1hX3F1ZXVlX2xvY2ssIGZsYWdzKTsNCisN CisJaXNjLT5zZXF1ZW5jZSA9IDA7DQorCWlzYy0+c3RvcCA9IGZhbHNlOw0KKwlyZWluaXRfY29t cGxldGlvbigmaXNjLT5jb21wKTsNCisNCisJaXNjLT5jdXJfZnJtID0gbGlzdF9maXJzdF9lbnRy eSgmaXNjLT5kbWFfcXVldWUsDQorCQkJCQlzdHJ1Y3QgaXNjX2J1ZmZlciwgbGlzdCk7DQorCWxp c3RfZGVsKCZpc2MtPmN1cl9mcm0tPmxpc3QpOw0KKw0KKwlpc2Nfc3RhcnRfZG1hKGlzYyk7DQor DQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlzYy0+ZG1hX3F1ZXVlX2xvY2ssIGZsYWdzKTsN CisNCisJLyogaWYgd2Ugc3RyZWFtaW5nIGZyb20gUkFXLCB3ZSBjYW4gZG8gb25lLXNob3Qgd2hp dGUgYmFsYW5jZSBhZGogKi8NCisJaWYgKElTQ19JU19GT1JNQVRfUkFXKGlzYy0+Y29uZmlnLnNk X2Zvcm1hdC0+bWJ1c19jb2RlKSkNCisJCXY0bDJfY3RybF9hY3RpdmF0ZShpc2MtPmRvX3diX2N0 cmwsIHRydWUpOw0KKw0KKwlyZXR1cm4gMDsNCisNCitlcnJfY29uZmlndXJlOg0KKwlwbV9ydW50 aW1lX3B1dF9zeW5jKGlzYy0+ZGV2KTsNCisNCisJdjRsMl9zdWJkZXZfY2FsbChpc2MtPmN1cnJl bnRfc3ViZGV2LT5zZCwgdmlkZW8sIHNfc3RyZWFtLCAwKTsNCisNCitlcnJfc3RhcnRfc3RyZWFt Og0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXNjLT5kbWFfcXVldWVfbG9jaywgZmxhZ3MpOw0KKwls aXN0X2Zvcl9lYWNoX2VudHJ5KGJ1ZiwgJmlzYy0+ZG1hX3F1ZXVlLCBsaXN0KQ0KKwkJdmIyX2J1 ZmZlcl9kb25lKCZidWYtPnZiLnZiMl9idWYsIFZCMl9CVUZfU1RBVEVfUVVFVUVEKTsNCisJSU5J VF9MSVNUX0hFQUQoJmlzYy0+ZG1hX3F1ZXVlKTsNCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm aXNjLT5kbWFfcXVldWVfbG9jaywgZmxhZ3MpOw0KKw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitz dGF0aWMgdm9pZCBpc2Nfc3RvcF9zdHJlYW1pbmcoc3RydWN0IHZiMl9xdWV1ZSAqdnEpDQorew0K KwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmIyX2dldF9kcnZfcHJpdih2cSk7DQorCXVuc2ln bmVkIGxvbmcgZmxhZ3M7DQorCXN0cnVjdCBpc2NfYnVmZmVyICpidWY7DQorCWludCByZXQ7DQor DQorCXY0bDJfY3RybF9hY3RpdmF0ZShpc2MtPmRvX3diX2N0cmwsIGZhbHNlKTsNCisNCisJaXNj LT5zdG9wID0gdHJ1ZTsNCisNCisJLyogV2FpdCB1bnRpbCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50 IGZyYW1lICovDQorCWlmIChpc2MtPmN1cl9mcm0gJiYgIXdhaXRfZm9yX2NvbXBsZXRpb25fdGlt ZW91dCgmaXNjLT5jb21wLCA1ICogSFopKQ0KKwkJdjRsMl9lcnIoJmlzYy0+djRsMl9kZXYsDQor CQkJICJUaW1lb3V0IHdhaXRpbmcgZm9yIGVuZCBvZiB0aGUgY2FwdHVyZVxuIik7DQorDQorCS8q IERpc2FibGUgRE1BIGludGVycnVwdCAqLw0KKwlyZWdtYXBfd3JpdGUoaXNjLT5yZWdtYXAsIElT Q19JTlRESVMsIElTQ19JTlRfRERPTkUpOw0KKw0KKwlwbV9ydW50aW1lX3B1dF9zeW5jKGlzYy0+ ZGV2KTsNCisNCisJLyogRGlzYWJsZSBzdHJlYW0gb24gdGhlIHN1YiBkZXZpY2UgKi8NCisJcmV0 ID0gdjRsMl9zdWJkZXZfY2FsbChpc2MtPmN1cnJlbnRfc3ViZGV2LT5zZCwgdmlkZW8sIHNfc3Ry ZWFtLCAwKTsNCisJaWYgKHJldCAmJiByZXQgIT0gLUVOT0lPQ1RMQ01EKQ0KKwkJdjRsMl9lcnIo JmlzYy0+djRsMl9kZXYsICJzdHJlYW0gb2ZmIGZhaWxlZCBpbiBzdWJkZXZcbiIpOw0KKw0KKwkv KiBSZWxlYXNlIGFsbCBhY3RpdmUgYnVmZmVycyAqLw0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXNj LT5kbWFfcXVldWVfbG9jaywgZmxhZ3MpOw0KKwlpZiAodW5saWtlbHkoaXNjLT5jdXJfZnJtKSkg ew0KKwkJdmIyX2J1ZmZlcl9kb25lKCZpc2MtPmN1cl9mcm0tPnZiLnZiMl9idWYsDQorCQkJCVZC Ml9CVUZfU1RBVEVfRVJST1IpOw0KKwkJaXNjLT5jdXJfZnJtID0gTlVMTDsNCisJfQ0KKwlsaXN0 X2Zvcl9lYWNoX2VudHJ5KGJ1ZiwgJmlzYy0+ZG1hX3F1ZXVlLCBsaXN0KQ0KKwkJdmIyX2J1ZmZl cl9kb25lKCZidWYtPnZiLnZiMl9idWYsIFZCMl9CVUZfU1RBVEVfRVJST1IpOw0KKwlJTklUX0xJ U1RfSEVBRCgmaXNjLT5kbWFfcXVldWUpOw0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc2Mt PmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGlzY19idWZmZXJf cXVldWUoc3RydWN0IHZiMl9idWZmZXIgKnZiKQ0KK3sNCisJc3RydWN0IHZiMl92NGwyX2J1ZmZl ciAqdmJ1ZiA9IHRvX3ZiMl92NGwyX2J1ZmZlcih2Yik7DQorCXN0cnVjdCBpc2NfYnVmZmVyICpi dWYgPSBjb250YWluZXJfb2YodmJ1Ziwgc3RydWN0IGlzY19idWZmZXIsIHZiKTsNCisJc3RydWN0 IGlzY19kZXZpY2UgKmlzYyA9IHZiMl9nZXRfZHJ2X3ByaXYodmItPnZiMl9xdWV1ZSk7DQorCXVu c2lnbmVkIGxvbmcgZmxhZ3M7DQorDQorCXNwaW5fbG9ja19pcnFzYXZlKCZpc2MtPmRtYV9xdWV1 ZV9sb2NrLCBmbGFncyk7DQorCWlmICghaXNjLT5jdXJfZnJtICYmIGxpc3RfZW1wdHkoJmlzYy0+ ZG1hX3F1ZXVlKSAmJg0KKwkJdmIyX2lzX3N0cmVhbWluZyh2Yi0+dmIyX3F1ZXVlKSkgew0KKwkJ aXNjLT5jdXJfZnJtID0gYnVmOw0KKwkJaXNjX3N0YXJ0X2RtYShpc2MpOw0KKwl9IGVsc2UNCisJ CWxpc3RfYWRkX3RhaWwoJmJ1Zi0+bGlzdCwgJmlzYy0+ZG1hX3F1ZXVlKTsNCisJc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZSgmaXNjLT5kbWFfcXVldWVfbG9jaywgZmxhZ3MpOw0KK30NCisNCitzdGF0 aWMgc3RydWN0IGlzY19mb3JtYXQgKmZpbmRfZm9ybWF0X2J5X2ZvdXJjYyhzdHJ1Y3QgaXNjX2Rl dmljZSAqaXNjLA0KKwkJCQkJCSB1bnNpZ25lZCBpbnQgZm91cmNjKQ0KK3sNCisJdW5zaWduZWQg aW50IG51bV9mb3JtYXRzID0gaXNjLT5udW1fdXNlcl9mb3JtYXRzOw0KKwlzdHJ1Y3QgaXNjX2Zv cm1hdCAqZm10Ow0KKwl1bnNpZ25lZCBpbnQgaTsNCisNCisJZm9yIChpID0gMDsgaSA8IG51bV9m b3JtYXRzOyBpKyspIHsNCisJCWZtdCA9IGlzYy0+dXNlcl9mb3JtYXRzW2ldOw0KKwkJaWYgKGZt dC0+Zm91cmNjID09IGZvdXJjYykNCisJCQlyZXR1cm4gZm10Ow0KKwl9DQorDQorCXJldHVybiBO VUxMOw0KK30NCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IHZiMl9vcHMgaXNjX3ZiMl9vcHMgPSB7 DQorCS5xdWV1ZV9zZXR1cAkJPSBpc2NfcXVldWVfc2V0dXAsDQorCS53YWl0X3ByZXBhcmUJCT0g dmIyX29wc193YWl0X3ByZXBhcmUsDQorCS53YWl0X2ZpbmlzaAkJPSB2YjJfb3BzX3dhaXRfZmlu aXNoLA0KKwkuYnVmX3ByZXBhcmUJCT0gaXNjX2J1ZmZlcl9wcmVwYXJlLA0KKwkuc3RhcnRfc3Ry ZWFtaW5nCT0gaXNjX3N0YXJ0X3N0cmVhbWluZywNCisJLnN0b3Bfc3RyZWFtaW5nCQk9IGlzY19z dG9wX3N0cmVhbWluZywNCisJLmJ1Zl9xdWV1ZQkJPSBpc2NfYnVmZmVyX3F1ZXVlLA0KK307DQor DQorc3RhdGljIGludCBpc2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYs DQorCQkJIHN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCkNCit7DQorCXN0cnVjdCBpc2NfZGV2 aWNlICppc2MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KKw0KKwlzdHJzY3B5KGNhcC0+ZHJpdmVy LCBBVE1FTF9JU0NfTkFNRSwgc2l6ZW9mKGNhcC0+ZHJpdmVyKSk7DQorCXN0cnNjcHkoY2FwLT5j YXJkLCAiQXRtZWwgSW1hZ2UgU2Vuc29yIENvbnRyb2xsZXIiLCBzaXplb2YoY2FwLT5jYXJkKSk7 DQorCXNucHJpbnRmKGNhcC0+YnVzX2luZm8sIHNpemVvZihjYXAtPmJ1c19pbmZvKSwNCisJCSAi cGxhdGZvcm06JXMiLCBpc2MtPnY0bDJfZGV2Lm5hbWUpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQor DQorc3RhdGljIGludCBpc2NfZW51bV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9p ZCAqcHJpdiwNCisJCQkJIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpDQorew0KKwl1MzIgaW5kZXgg PSBmLT5pbmRleDsNCisJdTMyIGksIHN1cHBvcnRlZF9pbmRleDsNCisNCisJaWYgKGluZGV4IDwg QVJSQVlfU0laRShjb250cm9sbGVyX2Zvcm1hdHMpKSB7DQorCQlmLT5waXhlbGZvcm1hdCA9IGNv bnRyb2xsZXJfZm9ybWF0c1tpbmRleF0uZm91cmNjOw0KKwkJcmV0dXJuIDA7DQorCX0NCisNCisJ aW5kZXggLT0gQVJSQVlfU0laRShjb250cm9sbGVyX2Zvcm1hdHMpOw0KKw0KKwlpID0gMDsNCisJ c3VwcG9ydGVkX2luZGV4ID0gMDsNCisNCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZm9y bWF0c19saXN0KTsgaSsrKSB7DQorCQlpZiAoIUlTQ19JU19GT1JNQVRfUkFXKGZvcm1hdHNfbGlz dFtpXS5tYnVzX2NvZGUpIHx8DQorCQkgICAgIWZvcm1hdHNfbGlzdFtpXS5zZF9zdXBwb3J0KQ0K KwkJCWNvbnRpbnVlOw0KKwkJaWYgKHN1cHBvcnRlZF9pbmRleCA9PSBpbmRleCkgew0KKwkJCWYt PnBpeGVsZm9ybWF0ID0gZm9ybWF0c19saXN0W2ldLmZvdXJjYzsNCisJCQlyZXR1cm4gMDsNCisJ CX0NCisJCXN1cHBvcnRlZF9pbmRleCsrOw0KKwl9DQorDQorCXJldHVybiAtRUlOVkFMOw0KK30N CisNCitzdGF0aWMgaW50IGlzY19nX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lk ICpwcml2LA0KKwkJCSAgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQ0KK3sNCisJc3RydWN0 IGlzY19kZXZpY2UgKmlzYyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7DQorDQorCSpmbXQgPSBpc2Mt PmZtdDsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KKy8qDQorICogQ2hlY2tzIHRoZSBjdXJyZW50 IGNvbmZpZ3VyZWQgZm9ybWF0LCBpZiBJU0MgY2FuIG91dHB1dCBpdCwNCisgKiBjb25zaWRlcmlu ZyB3aGljaCB0eXBlIG9mIGZvcm1hdCB0aGUgSVNDIHJlY2VpdmVzIGZyb20gdGhlIHNlbnNvcg0K KyAqLw0KK3N0YXRpYyBpbnQgaXNjX3RyeV92YWxpZGF0ZV9mb3JtYXRzKHN0cnVjdCBpc2NfZGV2 aWNlICppc2MpDQorew0KKwlpbnQgcmV0Ow0KKwlib29sIGJheWVyID0gZmFsc2UsIHl1diA9IGZh bHNlLCByZ2IgPSBmYWxzZSwgZ3JleSA9IGZhbHNlOw0KKw0KKwkvKiBhbGwgZm9ybWF0cyBzdXBw b3J0ZWQgYnkgdGhlIFJMUCBtb2R1bGUgYXJlIE9LICovDQorCXN3aXRjaCAoaXNjLT50cnlfY29u ZmlnLmZvdXJjYykgew0KKwljYXNlIFY0TDJfUElYX0ZNVF9TQkdHUjg6DQorCWNhc2UgVjRMMl9Q SVhfRk1UX1NHQlJHODoNCisJY2FzZSBWNEwyX1BJWF9GTVRfU0dSQkc4Og0KKwljYXNlIFY0TDJf UElYX0ZNVF9TUkdHQjg6DQorCWNhc2UgVjRMMl9QSVhfRk1UX1NCR0dSMTA6DQorCWNhc2UgVjRM Ml9QSVhfRk1UX1NHQlJHMTA6DQorCWNhc2UgVjRMMl9QSVhfRk1UX1NHUkJHMTA6DQorCWNhc2Ug VjRMMl9QSVhfRk1UX1NSR0dCMTA6DQorCWNhc2UgVjRMMl9QSVhfRk1UX1NCR0dSMTI6DQorCWNh c2UgVjRMMl9QSVhfRk1UX1NHQlJHMTI6DQorCWNhc2UgVjRMMl9QSVhfRk1UX1NHUkJHMTI6DQor CWNhc2UgVjRMMl9QSVhfRk1UX1NSR0dCMTI6DQorCQlyZXQgPSAwOw0KKwkJYmF5ZXIgPSB0cnVl Ow0KKwkJYnJlYWs7DQorDQorCWNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyMDoNCisJY2FzZSBWNEwy X1BJWF9GTVRfWVVWNDIyUDoNCisJY2FzZSBWNEwyX1BJWF9GTVRfWVVZVjoNCisJCXJldCA9IDA7 DQorCQl5dXYgPSB0cnVlOw0KKwkJYnJlYWs7DQorDQorCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU2 NToNCisJY2FzZSBWNEwyX1BJWF9GTVRfQUJHUjMyOg0KKwljYXNlIFY0TDJfUElYX0ZNVF9YQkdS MzI6DQorCWNhc2UgVjRMMl9QSVhfRk1UX0FSR0I0NDQ6DQorCWNhc2UgVjRMMl9QSVhfRk1UX0FS R0I1NTU6DQorCQlyZXQgPSAwOw0KKwkJcmdiID0gdHJ1ZTsNCisJCWJyZWFrOw0KKwljYXNlIFY0 TDJfUElYX0ZNVF9HUkVZOg0KKwkJcmV0ID0gMDsNCisJCWdyZXkgPSB0cnVlOw0KKwkJYnJlYWs7 DQorCWRlZmF1bHQ6DQorCS8qIGFueSBvdGhlciBkaWZmZXJlbnQgZm9ybWF0cyBhcmUgbm90IHN1 cHBvcnRlZCAqLw0KKwkJcmV0ID0gLUVJTlZBTDsNCisJfQ0KKw0KKwkvKiB3ZSBjYW5ub3Qgb3V0 cHV0IFJBVy9HcmV5IGlmIHdlIGRvIG5vdCByZWNlaXZlIFJBVyAqLw0KKwlpZiAoKGJheWVyIHx8 IGdyZXkpICYmDQorCSAgICAhSVNDX0lTX0ZPUk1BVF9SQVcoaXNjLT50cnlfY29uZmlnLnNkX2Zv cm1hdC0+bWJ1c19jb2RlKSkNCisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwl2NGwyX2RiZygxLCBk ZWJ1ZywgJmlzYy0+djRsMl9kZXYsDQorCQkgIkZvcm1hdCB2YWxpZGF0aW9uLCByZXF1ZXN0ZWQg cmdiPSV1LCB5dXY9JXUsIGdyZXk9JXUsIGJheWVyPSV1XG4iLA0KKwkJIHJnYiwgeXV2LCBncmV5 LCBiYXllcik7DQorDQorCXJldHVybiByZXQ7DQorfQ0KKw0KKy8qDQorICogQ29uZmlndXJlcyB0 aGUgUkxQIGFuZCBETUEgbW9kdWxlcywgZGVwZW5kaW5nIG9uIHRoZSBvdXRwdXQgZm9ybWF0DQor ICogY29uZmlndXJlZCBmb3IgdGhlIElTQy4NCisgKiBJZiBkaXJlY3RfZHVtcCA9PSB0cnVlLCBq dXN0IGR1bXAgcmF3IGRhdGEgOCBiaXRzLg0KKyAqLw0KK3N0YXRpYyBpbnQgaXNjX3RyeV9jb25m aWd1cmVfcmxwX2RtYShzdHJ1Y3QgaXNjX2RldmljZSAqaXNjLCBib29sIGRpcmVjdF9kdW1wKQ0K K3sNCisJaWYgKGRpcmVjdF9kdW1wKSB7DQorCQlpc2MtPnRyeV9jb25maWcucmxwX2NmZ19tb2Rl ID0gSVNDX1JMUF9DRkdfTU9ERV9EQVQ4Ow0KKwkJaXNjLT50cnlfY29uZmlnLmRjZmdfaW1vZGUg PSBJU0NfRENGR19JTU9ERV9QQUNLRUQ4Ow0KKwkJaXNjLT50cnlfY29uZmlnLmRjdHJsX2R2aWV3 ID0gSVNDX0RDVFJMX0RWSUVXX1BBQ0tFRDsNCisJCWlzYy0+dHJ5X2NvbmZpZy5icHAgPSAxNjsN CisJCXJldHVybiAwOw0KKwl9DQorDQorCXN3aXRjaCAoaXNjLT50cnlfY29uZmlnLmZvdXJjYykg ew0KKwljYXNlIFY0TDJfUElYX0ZNVF9TQkdHUjg6DQorCWNhc2UgVjRMMl9QSVhfRk1UX1NHQlJH ODoNCisJY2FzZSBWNEwyX1BJWF9GTVRfU0dSQkc4Og0KKwljYXNlIFY0TDJfUElYX0ZNVF9TUkdH Qjg6DQorCQlpc2MtPnRyeV9jb25maWcucmxwX2NmZ19tb2RlID0gSVNDX1JMUF9DRkdfTU9ERV9E QVQ4Ow0KKwkJaXNjLT50cnlfY29uZmlnLmRjZmdfaW1vZGUgPSBJU0NfRENGR19JTU9ERV9QQUNL RUQ4Ow0KKwkJaXNjLT50cnlfY29uZmlnLmRjdHJsX2R2aWV3ID0gSVNDX0RDVFJMX0RWSUVXX1BB Q0tFRDsNCisJCWlzYy0+dHJ5X2NvbmZpZy5icHAgPSA4Ow0KKwkJYnJlYWs7DQorCWNhc2UgVjRM Ml9QSVhfRk1UX1NCR0dSMTA6DQorCWNhc2UgVjRMMl9QSVhfRk1UX1NHQlJHMTA6DQorCWNhc2Ug VjRMMl9QSVhfRk1UX1NHUkJHMTA6DQorCWNhc2UgVjRMMl9QSVhfRk1UX1NSR0dCMTA6DQorCQlp c2MtPnRyeV9jb25maWcucmxwX2NmZ19tb2RlID0gSVNDX1JMUF9DRkdfTU9ERV9EQVQxMDsNCisJ CWlzYy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdfSU1PREVfUEFDS0VEMTY7DQor CQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZpZXcgPSBJU0NfRENUUkxfRFZJRVdfUEFDS0VEOw0K KwkJaXNjLT50cnlfY29uZmlnLmJwcCA9IDE2Ow0KKwkJYnJlYWs7DQorCWNhc2UgVjRMMl9QSVhf Rk1UX1NCR0dSMTI6DQorCWNhc2UgVjRMMl9QSVhfRk1UX1NHQlJHMTI6DQorCWNhc2UgVjRMMl9Q SVhfRk1UX1NHUkJHMTI6DQorCWNhc2UgVjRMMl9QSVhfRk1UX1NSR0dCMTI6DQorCQlpc2MtPnRy eV9jb25maWcucmxwX2NmZ19tb2RlID0gSVNDX1JMUF9DRkdfTU9ERV9EQVQxMjsNCisJCWlzYy0+ dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdfSU1PREVfUEFDS0VEMTY7DQorCQlpc2Mt PnRyeV9jb25maWcuZGN0cmxfZHZpZXcgPSBJU0NfRENUUkxfRFZJRVdfUEFDS0VEOw0KKwkJaXNj LT50cnlfY29uZmlnLmJwcCA9IDE2Ow0KKwkJYnJlYWs7DQorCWNhc2UgVjRMMl9QSVhfRk1UX1JH QjU2NToNCisJCWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJU0NfUkxQX0NGR19NT0RF X1JHQjU2NTsNCisJCWlzYy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdfSU1PREVf UEFDS0VEMTY7DQorCQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZpZXcgPSBJU0NfRENUUkxfRFZJ RVdfUEFDS0VEOw0KKwkJaXNjLT50cnlfY29uZmlnLmJwcCA9IDE2Ow0KKwkJYnJlYWs7DQorCWNh c2UgVjRMMl9QSVhfRk1UX0FSR0I0NDQ6DQorCQlpc2MtPnRyeV9jb25maWcucmxwX2NmZ19tb2Rl ID0gSVNDX1JMUF9DRkdfTU9ERV9BUkdCNDQ0Ow0KKwkJaXNjLT50cnlfY29uZmlnLmRjZmdfaW1v ZGUgPSBJU0NfRENGR19JTU9ERV9QQUNLRUQxNjsNCisJCWlzYy0+dHJ5X2NvbmZpZy5kY3RybF9k dmlldyA9IElTQ19EQ1RSTF9EVklFV19QQUNLRUQ7DQorCQlpc2MtPnRyeV9jb25maWcuYnBwID0g MTY7DQorCQlicmVhazsNCisJY2FzZSBWNEwyX1BJWF9GTVRfQVJHQjU1NToNCisJCWlzYy0+dHJ5 X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJU0NfUkxQX0NGR19NT0RFX0FSR0I1NTU7DQorCQlpc2Mt PnRyeV9jb25maWcuZGNmZ19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1BBQ0tFRDE2Ow0KKwkJaXNj LT50cnlfY29uZmlnLmRjdHJsX2R2aWV3ID0gSVNDX0RDVFJMX0RWSUVXX1BBQ0tFRDsNCisJCWlz Yy0+dHJ5X2NvbmZpZy5icHAgPSAxNjsNCisJCWJyZWFrOw0KKwljYXNlIFY0TDJfUElYX0ZNVF9B QkdSMzI6DQorCWNhc2UgVjRMMl9QSVhfRk1UX1hCR1IzMjoNCisJCWlzYy0+dHJ5X2NvbmZpZy5y bHBfY2ZnX21vZGUgPSBJU0NfUkxQX0NGR19NT0RFX0FSR0IzMjsNCisJCWlzYy0+dHJ5X2NvbmZp Zy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdfSU1PREVfUEFDS0VEMzI7DQorCQlpc2MtPnRyeV9jb25m aWcuZGN0cmxfZHZpZXcgPSBJU0NfRENUUkxfRFZJRVdfUEFDS0VEOw0KKwkJaXNjLT50cnlfY29u ZmlnLmJwcCA9IDMyOw0KKwkJYnJlYWs7DQorCWNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyMDoNCisJ CWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJU0NfUkxQX0NGR19NT0RFX1lZQ0M7DQor CQlpc2MtPnRyeV9jb25maWcuZGNmZ19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1lDNDIwUDsNCisJ CWlzYy0+dHJ5X2NvbmZpZy5kY3RybF9kdmlldyA9IElTQ19EQ1RSTF9EVklFV19QTEFOQVI7DQor CQlpc2MtPnRyeV9jb25maWcuYnBwID0gMTI7DQorCQlicmVhazsNCisJY2FzZSBWNEwyX1BJWF9G TVRfWVVWNDIyUDoNCisJCWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJU0NfUkxQX0NG R19NT0RFX1lZQ0M7DQorCQlpc2MtPnRyeV9jb25maWcuZGNmZ19pbW9kZSA9IElTQ19EQ0ZHX0lN T0RFX1lDNDIyUDsNCisJCWlzYy0+dHJ5X2NvbmZpZy5kY3RybF9kdmlldyA9IElTQ19EQ1RSTF9E VklFV19QTEFOQVI7DQorCQlpc2MtPnRyeV9jb25maWcuYnBwID0gMTY7DQorCQlicmVhazsNCisJ Y2FzZSBWNEwyX1BJWF9GTVRfWVVZVjoNCisJCWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUg PSBJU0NfUkxQX0NGR19NT0RFX1lZQ0M7DQorCQlpc2MtPnRyeV9jb25maWcuZGNmZ19pbW9kZSA9 IElTQ19EQ0ZHX0lNT0RFX1BBQ0tFRDMyOw0KKwkJaXNjLT50cnlfY29uZmlnLmRjdHJsX2R2aWV3 ID0gSVNDX0RDVFJMX0RWSUVXX1BBQ0tFRDsNCisJCWlzYy0+dHJ5X2NvbmZpZy5icHAgPSAxNjsN CisJCWJyZWFrOw0KKwljYXNlIFY0TDJfUElYX0ZNVF9HUkVZOg0KKwkJaXNjLT50cnlfY29uZmln LnJscF9jZmdfbW9kZSA9IElTQ19STFBfQ0ZHX01PREVfREFUWTg7DQorCQlpc2MtPnRyeV9jb25m aWcuZGNmZ19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1BBQ0tFRDg7DQorCQlpc2MtPnRyeV9jb25m aWcuZGN0cmxfZHZpZXcgPSBJU0NfRENUUkxfRFZJRVdfUEFDS0VEOw0KKwkJaXNjLT50cnlfY29u ZmlnLmJwcCA9IDg7DQorCQlicmVhazsNCisJZGVmYXVsdDoNCisJCXJldHVybiAtRUlOVkFMOw0K Kwl9DQorCXJldHVybiAwOw0KK30NCisNCisvKg0KKyAqIENvbmZpZ3VyaW5nIHBpcGVsaW5lIG1v ZHVsZXMsIGRlcGVuZGluZyBvbiB3aGljaCBmb3JtYXQgdGhlIElTQyBvdXRwdXRzDQorICogYW5k IGNvbnNpZGVyaW5nIHdoaWNoIGZvcm1hdCBpdCBoYXMgYXMgaW5wdXQgZnJvbSB0aGUgc2Vuc29y Lg0KKyAqLw0KK3N0YXRpYyBpbnQgaXNjX3RyeV9jb25maWd1cmVfcGlwZWxpbmUoc3RydWN0IGlz Y19kZXZpY2UgKmlzYykNCit7DQorCXN3aXRjaCAoaXNjLT50cnlfY29uZmlnLmZvdXJjYykgew0K KwljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NjU6DQorCWNhc2UgVjRMMl9QSVhfRk1UX0FSR0I1NTU6 DQorCWNhc2UgVjRMMl9QSVhfRk1UX0FSR0I0NDQ6DQorCWNhc2UgVjRMMl9QSVhfRk1UX0FCR1Iz MjoNCisJY2FzZSBWNEwyX1BJWF9GTVRfWEJHUjMyOg0KKwkJLyogaWYgc2Vuc29yIGZvcm1hdCBp cyBSQVcsIHdlIGNvbnZlcnQgaW5zaWRlIElTQyAqLw0KKwkJaWYgKElTQ19JU19GT1JNQVRfUkFX KGlzYy0+dHJ5X2NvbmZpZy5zZF9mb3JtYXQtPm1idXNfY29kZSkpIHsNCisJCQlpc2MtPnRyeV9j b25maWcuYml0c19waXBlbGluZSA9IENGQV9FTkFCTEUgfA0KKwkJCQlXQl9FTkFCTEUgfCBHQU1f RU5BQkxFUzsNCisJCX0gZWxzZSB7DQorCQkJaXNjLT50cnlfY29uZmlnLmJpdHNfcGlwZWxpbmUg PSAweDA7DQorCQl9DQorCQlicmVhazsNCisJY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIwOg0KKwkJ LyogaWYgc2Vuc29yIGZvcm1hdCBpcyBSQVcsIHdlIGNvbnZlcnQgaW5zaWRlIElTQyAqLw0KKwkJ aWYgKElTQ19JU19GT1JNQVRfUkFXKGlzYy0+dHJ5X2NvbmZpZy5zZF9mb3JtYXQtPm1idXNfY29k ZSkpIHsNCisJCQlpc2MtPnRyeV9jb25maWcuYml0c19waXBlbGluZSA9IENGQV9FTkFCTEUgfA0K KwkJCQlDU0NfRU5BQkxFIHwgV0JfRU5BQkxFIHwgR0FNX0VOQUJMRVMgfA0KKwkJCQlTVUI0MjBf RU5BQkxFIHwgU1VCNDIyX0VOQUJMRSB8IENCQ19FTkFCTEU7DQorCQl9IGVsc2Ugew0KKwkJCWlz Yy0+dHJ5X2NvbmZpZy5iaXRzX3BpcGVsaW5lID0gMHgwOw0KKwkJfQ0KKwkJYnJlYWs7DQorCWNh c2UgVjRMMl9QSVhfRk1UX1lVVjQyMlA6DQorCQkvKiBpZiBzZW5zb3IgZm9ybWF0IGlzIFJBVywg d2UgY29udmVydCBpbnNpZGUgSVNDICovDQorCQlpZiAoSVNDX0lTX0ZPUk1BVF9SQVcoaXNjLT50 cnlfY29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2RlKSkgew0KKwkJCWlzYy0+dHJ5X2NvbmZpZy5i aXRzX3BpcGVsaW5lID0gQ0ZBX0VOQUJMRSB8DQorCQkJCUNTQ19FTkFCTEUgfCBXQl9FTkFCTEUg fCBHQU1fRU5BQkxFUyB8DQorCQkJCVNVQjQyMl9FTkFCTEUgfCBDQkNfRU5BQkxFOw0KKwkJfSBl bHNlIHsNCisJCQlpc2MtPnRyeV9jb25maWcuYml0c19waXBlbGluZSA9IDB4MDsNCisJCX0NCisJ CWJyZWFrOw0KKwljYXNlIFY0TDJfUElYX0ZNVF9ZVVlWOg0KKwkJLyogaWYgc2Vuc29yIGZvcm1h dCBpcyBSQVcsIHdlIGNvbnZlcnQgaW5zaWRlIElTQyAqLw0KKwkJaWYgKElTQ19JU19GT1JNQVRf UkFXKGlzYy0+dHJ5X2NvbmZpZy5zZF9mb3JtYXQtPm1idXNfY29kZSkpIHsNCisJCQlpc2MtPnRy eV9jb25maWcuYml0c19waXBlbGluZSA9IENGQV9FTkFCTEUgfA0KKwkJCQlDU0NfRU5BQkxFIHwg V0JfRU5BQkxFIHwgR0FNX0VOQUJMRVMgfA0KKwkJCQlTVUI0MjJfRU5BQkxFIHwgQ0JDX0VOQUJM RTsNCisJCX0gZWxzZSB7DQorCQkJaXNjLT50cnlfY29uZmlnLmJpdHNfcGlwZWxpbmUgPSAweDA7 DQorCQl9DQorCQlicmVhazsNCisJY2FzZSBWNEwyX1BJWF9GTVRfR1JFWToNCisJCWlmIChJU0Nf SVNfRk9STUFUX1JBVyhpc2MtPnRyeV9jb25maWcuc2RfZm9ybWF0LT5tYnVzX2NvZGUpKSB7DQor CQkvKiBpZiBzZW5zb3IgZm9ybWF0IGlzIFJBVywgd2UgY29udmVydCBpbnNpZGUgSVNDICovDQor CQkJaXNjLT50cnlfY29uZmlnLmJpdHNfcGlwZWxpbmUgPSBDRkFfRU5BQkxFIHwNCisJCQkJQ1ND X0VOQUJMRSB8IFdCX0VOQUJMRSB8IEdBTV9FTkFCTEVTIHwNCisJCQkJQ0JDX0VOQUJMRTsNCisJ CX0gZWxzZSB7DQorCQkJaXNjLT50cnlfY29uZmlnLmJpdHNfcGlwZWxpbmUgPSAweDA7DQorCQl9 DQorCQlicmVhazsNCisJZGVmYXVsdDoNCisJCWlzYy0+dHJ5X2NvbmZpZy5iaXRzX3BpcGVsaW5l ID0gMHgwOw0KKwl9DQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IGlzY190cnlfZm10 KHN0cnVjdCBpc2NfZGV2aWNlICppc2MsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZiwNCisJCQl1MzIg KmNvZGUpDQorew0KKwlpbnQgaTsNCisJc3RydWN0IGlzY19mb3JtYXQgKnNkX2ZtdCA9IE5VTEws ICpkaXJlY3RfZm10ID0gTlVMTDsNCisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4Zm10ID0g JmYtPmZtdC5waXg7DQorCXN0cnVjdCB2NGwyX3N1YmRldl9wYWRfY29uZmlnIHBhZF9jZmc7DQor CXN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgZm9ybWF0ID0gew0KKwkJLndoaWNoID0gVjRMMl9T VUJERVZfRk9STUFUX1RSWSwNCisJfTsNCisJdTMyIG1idXNfY29kZTsNCisJaW50IHJldDsNCisJ Ym9vbCBybHBfZG1hX2RpcmVjdF9kdW1wID0gZmFsc2U7DQorDQorCWlmIChmLT50eXBlICE9IFY0 TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkNCisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwkvKiBT dGVwIDE6IGZpbmQgYSBSQVcgZm9ybWF0IHRoYXQgaXMgc3VwcG9ydGVkICovDQorCWZvciAoaSA9 IDA7IGkgPCBpc2MtPm51bV91c2VyX2Zvcm1hdHM7IGkrKykgew0KKwkJaWYgKElTQ19JU19GT1JN QVRfUkFXKGlzYy0+dXNlcl9mb3JtYXRzW2ldLT5tYnVzX2NvZGUpKSB7DQorCQkJc2RfZm10ID0g aXNjLT51c2VyX2Zvcm1hdHNbaV07DQorCQkJYnJlYWs7DQorCQl9DQorCX0NCisJLyogU3RlcCAy OiBXZSBjYW4gY29udGludWUgd2l0aCB0aGlzIFJBVyBmb3JtYXQsIG9yIHdlIGNhbiBsb29rDQor CSAqIGZvciBiZXR0ZXI6IG1heWJlIHNlbnNvciBzdXBwb3J0cyBkaXJlY3RseSB3aGF0IHdlIG5l ZWQuDQorCSAqLw0KKwlkaXJlY3RfZm10ID0gZmluZF9mb3JtYXRfYnlfZm91cmNjKGlzYywgcGl4 Zm10LT5waXhlbGZvcm1hdCk7DQorDQorCS8qIFN0ZXAgMzogV2UgaGF2ZSBib3RoLiBXZSBkZWNp ZGUgZ2l2ZW4gdGhlIG1vZHVsZSBwYXJhbWV0ZXIgd2hpY2gNCisJICogb25lIHRvIHVzZS4NCisJ ICovDQorCWlmIChkaXJlY3RfZm10ICYmIHNkX2ZtdCAmJiBzZW5zb3JfcHJlZmVycmVkKQ0KKwkJ c2RfZm10ID0gZGlyZWN0X2ZtdDsNCisNCisJLyogU3RlcCA0OiB3ZSBkbyBub3QgaGF2ZSBSQVcg YnV0IHdlIGhhdmUgYSBkaXJlY3QgZm9ybWF0LiBVc2UgaXQuICovDQorCWlmIChkaXJlY3RfZm10 ICYmICFzZF9mbXQpDQorCQlzZF9mbXQgPSBkaXJlY3RfZm10Ow0KKw0KKwkvKiBTdGVwIDU6IGlm IHdlIGFyZSB1c2luZyBhIGRpcmVjdCBmb3JtYXQsIHdlIG5lZWQgdG8gcGFja2FnZQ0KKwkgKiBl dmVyeXRoaW5nIGFzIDggYml0IGRhdGEgYW5kIGp1c3QgZHVtcCBpdA0KKwkgKi8NCisJaWYgKHNk X2ZtdCA9PSBkaXJlY3RfZm10KQ0KKwkJcmxwX2RtYV9kaXJlY3RfZHVtcCA9IHRydWU7DQorDQor CS8qIFN0ZXAgNjogV2UgaGF2ZSBubyBmb3JtYXQuIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgdXNl cnNwYWNlDQorCSAqIHJlcXVlc3RzIHNvbWUgd2VpcmQvaW52YWxpZCBmb3JtYXQuDQorCSAqIElu IHRoaXMgY2FzZSwgZGVmYXVsdCB0byB3aGF0ZXZlciB3ZSBoYXZlDQorCSAqLw0KKwlpZiAoIXNk X2ZtdCAmJiAhZGlyZWN0X2ZtdCkgew0KKwkJc2RfZm10ID0gaXNjLT51c2VyX2Zvcm1hdHNbaXNj LT5udW1fdXNlcl9mb3JtYXRzIC0gMV07DQorCQl2NGwyX2RiZygxLCBkZWJ1ZywgJmlzYy0+djRs Ml9kZXYsDQorCQkJICJTZW5zb3Igbm90IHN1cHBvcnRpbmcgJS40cywgdXNpbmcgJS40c1xuIiwN CisJCQkgKGNoYXIgKikmcGl4Zm10LT5waXhlbGZvcm1hdCwgKGNoYXIgKikmc2RfZm10LT5mb3Vy Y2MpOw0KKwl9DQorDQorCWlmICghc2RfZm10KSB7DQorCQlyZXQgPSAtRUlOVkFMOw0KKwkJZ290 byBpc2NfdHJ5X2ZtdF9lcnI7DQorCX0NCisNCisJLyogU3RlcCA3OiBQcmludCBvdXQgd2hhdCB3 ZSBkZWNpZGVkIGZvciBkZWJ1Z2dpbmcgKi8NCisJdjRsMl9kYmcoMSwgZGVidWcsICZpc2MtPnY0 bDJfZGV2LA0KKwkJICJQcmVmZXJyaW5nIHRvIGhhdmUgc2Vuc29yIHVzaW5nIGZvcm1hdCAlLjRz XG4iLA0KKwkJIChjaGFyICopJnNkX2ZtdC0+Zm91cmNjKTsNCisNCisJLyogU3RlcCA4OiBhdCB0 aGlzIG1vbWVudCB3ZSBkZWNpZGVkIHdoaWNoIGZvcm1hdCB0aGUgc3ViZGV2IHdpbGwgdXNlICov DQorCWlzYy0+dHJ5X2NvbmZpZy5zZF9mb3JtYXQgPSBzZF9mbXQ7DQorDQorCS8qIExpbWl0IHRv IEF0bWVsIElTQyBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgKi8NCisJaWYgKHBpeGZtdC0+d2lkdGgg PiBJU0NfTUFYX1NVUFBPUlRfV0lEVEgpDQorCQlwaXhmbXQtPndpZHRoID0gSVNDX01BWF9TVVBQ T1JUX1dJRFRIOw0KKwlpZiAocGl4Zm10LT5oZWlnaHQgPiBJU0NfTUFYX1NVUFBPUlRfSEVJR0hU KQ0KKwkJcGl4Zm10LT5oZWlnaHQgPSBJU0NfTUFYX1NVUFBPUlRfSEVJR0hUOw0KKw0KKwkvKg0K KwkgKiBUaGUgbWJ1cyBmb3JtYXQgaXMgdGhlIG9uZSB0aGUgc3ViZGV2IG91dHB1dHMuDQorCSAq IFRoZSBwaXhlbHMgd2lsbCBiZSB0cmFuc2ZlcnJlZCBpbiB0aGlzIGZvcm1hdCBTZW5zb3IgLT4g SVNDDQorCSAqLw0KKwltYnVzX2NvZGUgPSBzZF9mbXQtPm1idXNfY29kZTsNCisNCisJLyoNCisJ ICogVmFsaWRhdGUgZm9ybWF0cy4gSWYgdGhlIHJlcXVpcmVkIGZvcm1hdCBpcyBub3QgT0ssIGRl ZmF1bHQgdG8gcmF3Lg0KKwkgKi8NCisNCisJaXNjLT50cnlfY29uZmlnLmZvdXJjYyA9IHBpeGZt dC0+cGl4ZWxmb3JtYXQ7DQorDQorCWlmIChpc2NfdHJ5X3ZhbGlkYXRlX2Zvcm1hdHMoaXNjKSkg ew0KKwkJcGl4Zm10LT5waXhlbGZvcm1hdCA9IGlzYy0+dHJ5X2NvbmZpZy5mb3VyY2MgPSBzZF9m bXQtPmZvdXJjYzsNCisJCS8qIFJlLXRyeSB0byB2YWxpZGF0ZSB0aGUgbmV3IGZvcm1hdCAqLw0K KwkJcmV0ID0gaXNjX3RyeV92YWxpZGF0ZV9mb3JtYXRzKGlzYyk7DQorCQlpZiAocmV0KQ0KKwkJ CWdvdG8gaXNjX3RyeV9mbXRfZXJyOw0KKwl9DQorDQorCXJldCA9IGlzY190cnlfY29uZmlndXJl X3JscF9kbWEoaXNjLCBybHBfZG1hX2RpcmVjdF9kdW1wKTsNCisJaWYgKHJldCkNCisJCWdvdG8g aXNjX3RyeV9mbXRfZXJyOw0KKw0KKwlyZXQgPSBpc2NfdHJ5X2NvbmZpZ3VyZV9waXBlbGluZShp c2MpOw0KKwlpZiAocmV0KQ0KKwkJZ290byBpc2NfdHJ5X2ZtdF9lcnI7DQorDQorCXY0bDJfZmls bF9tYnVzX2Zvcm1hdCgmZm9ybWF0LmZvcm1hdCwgcGl4Zm10LCBtYnVzX2NvZGUpOw0KKwlyZXQg PSB2NGwyX3N1YmRldl9jYWxsKGlzYy0+Y3VycmVudF9zdWJkZXYtPnNkLCBwYWQsIHNldF9mbXQs DQorCQkJICAgICAgICZwYWRfY2ZnLCAmZm9ybWF0KTsNCisJaWYgKHJldCA8IDApDQorCQlnb3Rv IGlzY190cnlfZm10X3N1YmRldl9lcnI7DQorDQorCXY0bDJfZmlsbF9waXhfZm9ybWF0KHBpeGZt dCwgJmZvcm1hdC5mb3JtYXQpOw0KKw0KKwlwaXhmbXQtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05F Ow0KKwlwaXhmbXQtPmJ5dGVzcGVybGluZSA9IChwaXhmbXQtPndpZHRoICogaXNjLT50cnlfY29u ZmlnLmJwcCkgPj4gMzsNCisJcGl4Zm10LT5zaXplaW1hZ2UgPSBwaXhmbXQtPmJ5dGVzcGVybGlu ZSAqIHBpeGZtdC0+aGVpZ2h0Ow0KKw0KKwlpZiAoY29kZSkNCisJCSpjb2RlID0gbWJ1c19jb2Rl Ow0KKw0KKwlyZXR1cm4gMDsNCisNCitpc2NfdHJ5X2ZtdF9lcnI6DQorCXY0bDJfZXJyKCZpc2Mt PnY0bDJfZGV2LCAiQ291bGQgbm90IGZpbmQgYW55IHBvc3NpYmxlIGZvcm1hdCBmb3IgYSB3b3Jr aW5nIHBpcGVsaW5lXG4iKTsNCitpc2NfdHJ5X2ZtdF9zdWJkZXZfZXJyOg0KKwltZW1zZXQoJmlz Yy0+dHJ5X2NvbmZpZywgMCwgc2l6ZW9mKGlzYy0+dHJ5X2NvbmZpZykpOw0KKw0KKwlyZXR1cm4g cmV0Ow0KK30NCisNCitzdGF0aWMgaW50IGlzY19zZXRfZm10KHN0cnVjdCBpc2NfZGV2aWNlICpp c2MsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikNCit7DQorCXN0cnVjdCB2NGwyX3N1YmRldl9mb3Jt YXQgZm9ybWF0ID0gew0KKwkJLndoaWNoID0gVjRMMl9TVUJERVZfRk9STUFUX0FDVElWRSwNCisJ fTsNCisJdTMyIG1idXNfY29kZSA9IDA7DQorCWludCByZXQ7DQorDQorCXJldCA9IGlzY190cnlf Zm10KGlzYywgZiwgJm1idXNfY29kZSk7DQorCWlmIChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0K Kwl2NGwyX2ZpbGxfbWJ1c19mb3JtYXQoJmZvcm1hdC5mb3JtYXQsICZmLT5mbXQucGl4LCBtYnVz X2NvZGUpOw0KKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKGlzYy0+Y3VycmVudF9zdWJkZXYtPnNk LCBwYWQsDQorCQkJICAgICAgIHNldF9mbXQsIE5VTEwsICZmb3JtYXQpOw0KKwlpZiAocmV0IDwg MCkNCisJCXJldHVybiByZXQ7DQorDQorCWlzYy0+Zm10ID0gKmY7DQorDQorCWlmIChpc2MtPnRy eV9jb25maWcuc2RfZm9ybWF0ICYmIGlzYy0+Y29uZmlnLnNkX2Zvcm1hdCAmJg0KKwkgICAgaXNj LT50cnlfY29uZmlnLnNkX2Zvcm1hdCAhPSBpc2MtPmNvbmZpZy5zZF9mb3JtYXQpIHsNCisJCWlz Yy0+Y3RybHMuaGlzdF9zdGF0ID0gSElTVF9JTklUOw0KKwkJaXNjX3Jlc2V0X2F3Yl9jdHJscyhp c2MpOw0KKwl9DQorCS8qIG1ha2UgdGhlIHRyeSBjb25maWd1cmF0aW9uIGFjdGl2ZSAqLw0KKwlp c2MtPmNvbmZpZyA9IGlzYy0+dHJ5X2NvbmZpZzsNCisNCisJdjRsMl9kYmcoMSwgZGVidWcsICZp c2MtPnY0bDJfZGV2LCAiTmV3IElTQyBjb25maWd1cmF0aW9uIGluIHBsYWNlXG4iKTsNCisNCisJ cmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNjX3NfZm10X3ZpZF9jYXAoc3RydWN0IGZp bGUgKmZpbGUsIHZvaWQgKnByaXYsDQorCQkJICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQ0K K3sNCisJc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7DQorDQor CWlmICh2YjJfaXNfc3RyZWFtaW5nKCZpc2MtPnZiMl92aWRxKSkNCisJCXJldHVybiAtRUJVU1k7 DQorDQorCXJldHVybiBpc2Nfc2V0X2ZtdChpc2MsIGYpOw0KK30NCisNCitzdGF0aWMgaW50IGlz Y190cnlfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsDQorCQkJCXN0 cnVjdCB2NGwyX2Zvcm1hdCAqZikNCit7DQorCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2aWRl b19kcnZkYXRhKGZpbGUpOw0KKw0KKwlyZXR1cm4gaXNjX3RyeV9mbXQoaXNjLCBmLCBOVUxMKTsN Cit9DQorDQorc3RhdGljIGludCBpc2NfZW51bV9pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9p ZCAqcHJpdiwNCisJCQkgICBzdHJ1Y3QgdjRsMl9pbnB1dCAqaW5wKQ0KK3sNCisJaWYgKGlucC0+ aW5kZXggIT0gMCkNCisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwlpbnAtPnR5cGUgPSBWNEwyX0lO UFVUX1RZUEVfQ0FNRVJBOw0KKwlpbnAtPnN0ZCA9IDA7DQorCXN0cnNjcHkoaW5wLT5uYW1lLCAi Q2FtZXJhIiwgc2l6ZW9mKGlucC0+bmFtZSkpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3Rh dGljIGludCBpc2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWdu ZWQgaW50ICppKQ0KK3sNCisJKmkgPSAwOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGlj IGludCBpc2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQg aW50IGkpDQorew0KKwlpZiAoaSA+IDApDQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJcmV0dXJu IDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNjX2dfcGFybShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9p ZCAqZmgsIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKmEpDQorew0KKwlzdHJ1Y3QgaXNjX2Rldmlj ZSAqaXNjID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsNCisNCisJcmV0dXJuIHY0bDJfZ19wYXJtX2Nh cCh2aWRlb19kZXZkYXRhKGZpbGUpLCBpc2MtPmN1cnJlbnRfc3ViZGV2LT5zZCwgYSk7DQorfQ0K Kw0KK3N0YXRpYyBpbnQgaXNjX3NfcGFybShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0 cnVjdCB2NGwyX3N0cmVhbXBhcm0gKmEpDQorew0KKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0g dmlkZW9fZHJ2ZGF0YShmaWxlKTsNCisNCisJcmV0dXJuIHY0bDJfc19wYXJtX2NhcCh2aWRlb19k ZXZkYXRhKGZpbGUpLCBpc2MtPmN1cnJlbnRfc3ViZGV2LT5zZCwgYSk7DQorfQ0KKw0KK3N0YXRp YyBpbnQgaXNjX2VudW1fZnJhbWVzaXplcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsDQor CQkJICAgICAgIHN0cnVjdCB2NGwyX2ZybXNpemVlbnVtICpmc2l6ZSkNCit7DQorCXN0cnVjdCBp c2NfZGV2aWNlICppc2MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KKwlzdHJ1Y3QgdjRsMl9zdWJk ZXZfZnJhbWVfc2l6ZV9lbnVtIGZzZSA9IHsNCisJCS5pbmRleCA9IGZzaXplLT5pbmRleCwNCisJ CS53aGljaCA9IFY0TDJfU1VCREVWX0ZPUk1BVF9BQ1RJVkUsDQorCX07DQorCWludCByZXQgPSAt RUlOVkFMOw0KKwlpbnQgaTsNCisNCisJZm9yIChpID0gMDsgaSA8IGlzYy0+bnVtX3VzZXJfZm9y bWF0czsgaSsrKQ0KKwkJaWYgKGlzYy0+dXNlcl9mb3JtYXRzW2ldLT5mb3VyY2MgPT0gZnNpemUt PnBpeGVsX2Zvcm1hdCkNCisJCQlyZXQgPSAwOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlf U0laRShjb250cm9sbGVyX2Zvcm1hdHMpOyBpKyspDQorCQlpZiAoY29udHJvbGxlcl9mb3JtYXRz W2ldLmZvdXJjYyA9PSBmc2l6ZS0+cGl4ZWxfZm9ybWF0KQ0KKwkJCXJldCA9IDA7DQorDQorCWlm IChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKGlzYy0+ Y3VycmVudF9zdWJkZXYtPnNkLCBwYWQsIGVudW1fZnJhbWVfc2l6ZSwNCisJCQkgICAgICAgTlVM TCwgJmZzZSk7DQorCWlmIChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwlmc2UuY29kZSA9IGlz Yy0+Y29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2RlOw0KKw0KKwlmc2l6ZS0+dHlwZSA9IFY0TDJf RlJNU0laRV9UWVBFX0RJU0NSRVRFOw0KKwlmc2l6ZS0+ZGlzY3JldGUud2lkdGggPSBmc2UubWF4 X3dpZHRoOw0KKwlmc2l6ZS0+ZGlzY3JldGUuaGVpZ2h0ID0gZnNlLm1heF9oZWlnaHQ7DQorDQor CXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IGlzY19lbnVtX2ZyYW1laW50ZXJ2YWxzKHN0 cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwNCisJCQkJICAgIHN0cnVjdCB2NGwyX2ZybWl2YWxl bnVtICpmaXZhbCkNCit7DQorCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2aWRlb19kcnZkYXRh KGZpbGUpOw0KKwlzdHJ1Y3QgdjRsMl9zdWJkZXZfZnJhbWVfaW50ZXJ2YWxfZW51bSBmaWUgPSB7 DQorCQkuaW5kZXggPSBmaXZhbC0+aW5kZXgsDQorCQkud2lkdGggPSBmaXZhbC0+d2lkdGgsDQor CQkuaGVpZ2h0ID0gZml2YWwtPmhlaWdodCwNCisJCS53aGljaCA9IFY0TDJfU1VCREVWX0ZPUk1B VF9BQ1RJVkUsDQorCX07DQorCWludCByZXQgPSAtRUlOVkFMOw0KKwlpbnQgaTsNCisNCisJZm9y IChpID0gMDsgaSA8IGlzYy0+bnVtX3VzZXJfZm9ybWF0czsgaSsrKQ0KKwkJaWYgKGlzYy0+dXNl cl9mb3JtYXRzW2ldLT5mb3VyY2MgPT0gZml2YWwtPnBpeGVsX2Zvcm1hdCkNCisJCQlyZXQgPSAw Ow0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb250cm9sbGVyX2Zvcm1hdHMpOyBp KyspDQorCQlpZiAoY29udHJvbGxlcl9mb3JtYXRzW2ldLmZvdXJjYyA9PSBmaXZhbC0+cGl4ZWxf Zm9ybWF0KQ0KKwkJCXJldCA9IDA7DQorDQorCWlmIChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0K KwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKGlzYy0+Y3VycmVudF9zdWJkZXYtPnNkLCBwYWQsDQor CQkJICAgICAgIGVudW1fZnJhbWVfaW50ZXJ2YWwsIE5VTEwsICZmaWUpOw0KKwlpZiAocmV0KQ0K KwkJcmV0dXJuIHJldDsNCisNCisJZmllLmNvZGUgPSBpc2MtPmNvbmZpZy5zZF9mb3JtYXQtPm1i dXNfY29kZTsNCisJZml2YWwtPnR5cGUgPSBWNEwyX0ZSTUlWQUxfVFlQRV9ESVNDUkVURTsNCisJ Zml2YWwtPmRpc2NyZXRlID0gZmllLmludGVydmFsOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQor c3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyBpc2NfaW9jdGxfb3BzID0gew0KKwku dmlkaW9jX3F1ZXJ5Y2FwCQk9IGlzY19xdWVyeWNhcCwNCisJLnZpZGlvY19lbnVtX2ZtdF92aWRf Y2FwCT0gaXNjX2VudW1fZm10X3ZpZF9jYXAsDQorCS52aWRpb2NfZ19mbXRfdmlkX2NhcAkJPSBp c2NfZ19mbXRfdmlkX2NhcCwNCisJLnZpZGlvY19zX2ZtdF92aWRfY2FwCQk9IGlzY19zX2ZtdF92 aWRfY2FwLA0KKwkudmlkaW9jX3RyeV9mbXRfdmlkX2NhcAkJPSBpc2NfdHJ5X2ZtdF92aWRfY2Fw LA0KKw0KKwkudmlkaW9jX2VudW1faW5wdXQJCT0gaXNjX2VudW1faW5wdXQsDQorCS52aWRpb2Nf Z19pbnB1dAkJCT0gaXNjX2dfaW5wdXQsDQorCS52aWRpb2Nfc19pbnB1dAkJCT0gaXNjX3NfaW5w dXQsDQorDQorCS52aWRpb2NfcmVxYnVmcwkJCT0gdmIyX2lvY3RsX3JlcWJ1ZnMsDQorCS52aWRp b2NfcXVlcnlidWYJCT0gdmIyX2lvY3RsX3F1ZXJ5YnVmLA0KKwkudmlkaW9jX3FidWYJCQk9IHZi Ml9pb2N0bF9xYnVmLA0KKwkudmlkaW9jX2V4cGJ1ZgkJCT0gdmIyX2lvY3RsX2V4cGJ1ZiwNCisJ LnZpZGlvY19kcWJ1ZgkJCT0gdmIyX2lvY3RsX2RxYnVmLA0KKwkudmlkaW9jX2NyZWF0ZV9idWZz CQk9IHZiMl9pb2N0bF9jcmVhdGVfYnVmcywNCisJLnZpZGlvY19wcmVwYXJlX2J1ZgkJPSB2YjJf aW9jdGxfcHJlcGFyZV9idWYsDQorCS52aWRpb2Nfc3RyZWFtb24JCT0gdmIyX2lvY3RsX3N0cmVh bW9uLA0KKwkudmlkaW9jX3N0cmVhbW9mZgkJPSB2YjJfaW9jdGxfc3RyZWFtb2ZmLA0KKw0KKwku dmlkaW9jX2dfcGFybQkJCT0gaXNjX2dfcGFybSwNCisJLnZpZGlvY19zX3Bhcm0JCQk9IGlzY19z X3Bhcm0sDQorCS52aWRpb2NfZW51bV9mcmFtZXNpemVzCQk9IGlzY19lbnVtX2ZyYW1lc2l6ZXMs DQorCS52aWRpb2NfZW51bV9mcmFtZWludGVydmFscwk9IGlzY19lbnVtX2ZyYW1laW50ZXJ2YWxz LA0KKw0KKwkudmlkaW9jX2xvZ19zdGF0dXMJCT0gdjRsMl9jdHJsX2xvZ19zdGF0dXMsDQorCS52 aWRpb2Nfc3Vic2NyaWJlX2V2ZW50CQk9IHY0bDJfY3RybF9zdWJzY3JpYmVfZXZlbnQsDQorCS52 aWRpb2NfdW5zdWJzY3JpYmVfZXZlbnQJPSB2NGwyX2V2ZW50X3Vuc3Vic2NyaWJlLA0KK307DQor DQorc3RhdGljIGludCBpc2Nfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkNCit7DQorCXN0cnVjdCBp c2NfZGV2aWNlICppc2MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KKwlzdHJ1Y3QgdjRsMl9zdWJk ZXYgKnNkID0gaXNjLT5jdXJyZW50X3N1YmRldi0+c2Q7DQorCWludCByZXQ7DQorDQorCWlmICht dXRleF9sb2NrX2ludGVycnVwdGlibGUoJmlzYy0+bG9jaykpDQorCQlyZXR1cm4gLUVSRVNUQVJU U1lTOw0KKw0KKwlyZXQgPSB2NGwyX2ZoX29wZW4oZmlsZSk7DQorCWlmIChyZXQgPCAwKQ0KKwkJ Z290byB1bmxvY2s7DQorDQorCWlmICghdjRsMl9maF9pc19zaW5ndWxhcl9maWxlKGZpbGUpKQ0K KwkJZ290byB1bmxvY2s7DQorDQorCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIGNvcmUsIHNf cG93ZXIsIDEpOw0KKwlpZiAocmV0IDwgMCAmJiByZXQgIT0gLUVOT0lPQ1RMQ01EKSB7DQorCQl2 NGwyX2ZoX3JlbGVhc2UoZmlsZSk7DQorCQlnb3RvIHVubG9jazsNCisJfQ0KKw0KKwlyZXQgPSBp c2Nfc2V0X2ZtdChpc2MsICZpc2MtPmZtdCk7DQorCWlmIChyZXQpIHsNCisJCXY0bDJfc3ViZGV2 X2NhbGwoc2QsIGNvcmUsIHNfcG93ZXIsIDApOw0KKwkJdjRsMl9maF9yZWxlYXNlKGZpbGUpOw0K Kwl9DQorDQordW5sb2NrOg0KKwltdXRleF91bmxvY2soJmlzYy0+bG9jayk7DQorCXJldHVybiBy ZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNjX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpDQor ew0KKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsNCisJc3Ry dWN0IHY0bDJfc3ViZGV2ICpzZCA9IGlzYy0+Y3VycmVudF9zdWJkZXYtPnNkOw0KKwlib29sIGZo X3Npbmd1bGFyOw0KKwlpbnQgcmV0Ow0KKw0KKwltdXRleF9sb2NrKCZpc2MtPmxvY2spOw0KKw0K KwlmaF9zaW5ndWxhciA9IHY0bDJfZmhfaXNfc2luZ3VsYXJfZmlsZShmaWxlKTsNCisNCisJcmV0 ID0gX3ZiMl9mb3BfcmVsZWFzZShmaWxlLCBOVUxMKTsNCisNCisJaWYgKGZoX3Npbmd1bGFyKQ0K KwkJdjRsMl9zdWJkZXZfY2FsbChzZCwgY29yZSwgc19wb3dlciwgMCk7DQorDQorCW11dGV4X3Vu bG9jaygmaXNjLT5sb2NrKTsNCisNCisJcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIGNvbnN0 IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyBpc2NfZm9wcyA9IHsNCisJLm93bmVyCQk9IFRI SVNfTU9EVUxFLA0KKwkub3BlbgkJPSBpc2Nfb3BlbiwNCisJLnJlbGVhc2UJPSBpc2NfcmVsZWFz ZSwNCisJLnVubG9ja2VkX2lvY3RsCT0gdmlkZW9faW9jdGwyLA0KKwkucmVhZAkJPSB2YjJfZm9w X3JlYWQsDQorCS5tbWFwCQk9IHZiMl9mb3BfbW1hcCwNCisJLnBvbGwJCT0gdmIyX2ZvcF9wb2xs LA0KK307DQorDQoraXJxcmV0dXJuX3QgaXNjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZf aWQpDQorew0KKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gKHN0cnVjdCBpc2NfZGV2aWNlICop ZGV2X2lkOw0KKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBpc2MtPnJlZ21hcDsNCisJdTMyIGlz Y19pbnRzciwgaXNjX2ludG1hc2ssIHBlbmRpbmc7DQorCWlycXJldHVybl90IHJldCA9IElSUV9O T05FOw0KKw0KKwlyZWdtYXBfcmVhZChyZWdtYXAsIElTQ19JTlRTUiwgJmlzY19pbnRzcik7DQor CXJlZ21hcF9yZWFkKHJlZ21hcCwgSVNDX0lOVE1BU0ssICZpc2NfaW50bWFzayk7DQorDQorCXBl bmRpbmcgPSBpc2NfaW50c3IgJiBpc2NfaW50bWFzazsNCisNCisJaWYgKGxpa2VseShwZW5kaW5n ICYgSVNDX0lOVF9ERE9ORSkpIHsNCisJCXNwaW5fbG9jaygmaXNjLT5kbWFfcXVldWVfbG9jayk7 DQorCQlpZiAoaXNjLT5jdXJfZnJtKSB7DQorCQkJc3RydWN0IHZiMl92NGwyX2J1ZmZlciAqdmJ1 ZiA9ICZpc2MtPmN1cl9mcm0tPnZiOw0KKwkJCXN0cnVjdCB2YjJfYnVmZmVyICp2YiA9ICZ2YnVm LT52YjJfYnVmOw0KKw0KKwkJCXZiLT50aW1lc3RhbXAgPSBrdGltZV9nZXRfbnMoKTsNCisJCQl2 YnVmLT5zZXF1ZW5jZSA9IGlzYy0+c2VxdWVuY2UrKzsNCisJCQl2YjJfYnVmZmVyX2RvbmUodmIs IFZCMl9CVUZfU1RBVEVfRE9ORSk7DQorCQkJaXNjLT5jdXJfZnJtID0gTlVMTDsNCisJCX0NCisN CisJCWlmICghbGlzdF9lbXB0eSgmaXNjLT5kbWFfcXVldWUpICYmICFpc2MtPnN0b3ApIHsNCisJ CQlpc2MtPmN1cl9mcm0gPSBsaXN0X2ZpcnN0X2VudHJ5KCZpc2MtPmRtYV9xdWV1ZSwNCisJCQkJ CQkgICAgIHN0cnVjdCBpc2NfYnVmZmVyLCBsaXN0KTsNCisJCQlsaXN0X2RlbCgmaXNjLT5jdXJf ZnJtLT5saXN0KTsNCisNCisJCQlpc2Nfc3RhcnRfZG1hKGlzYyk7DQorCQl9DQorDQorCQlpZiAo aXNjLT5zdG9wKQ0KKwkJCWNvbXBsZXRlKCZpc2MtPmNvbXApOw0KKw0KKwkJcmV0ID0gSVJRX0hB TkRMRUQ7DQorCQlzcGluX3VubG9jaygmaXNjLT5kbWFfcXVldWVfbG9jayk7DQorCX0NCisNCisJ aWYgKHBlbmRpbmcgJiBJU0NfSU5UX0hJU0RPTkUpIHsNCisJCXNjaGVkdWxlX3dvcmsoJmlzYy0+ YXdiX3dvcmspOw0KKwkJcmV0ID0gSVJRX0hBTkRMRUQ7DQorCX0NCisNCisJcmV0dXJuIHJldDsN Cit9DQorDQorc3RhdGljIHZvaWQgaXNjX2hpc3RfY291bnQoc3RydWN0IGlzY19kZXZpY2UgKmlz YywgdTMyICptaW4sIHUzMiAqbWF4KQ0KK3sNCisJc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNj LT5yZWdtYXA7DQorCXN0cnVjdCBpc2NfY3RybHMgKmN0cmxzID0gJmlzYy0+Y3RybHM7DQorCXUz MiAqaGlzdF9jb3VudCA9ICZjdHJscy0+aGlzdF9jb3VudFtjdHJscy0+aGlzdF9pZF07DQorCXUz MiAqaGlzdF9lbnRyeSA9ICZjdHJscy0+aGlzdF9lbnRyeVswXTsNCisJdTMyIGk7DQorDQorCSpt aW4gPSAwOw0KKwkqbWF4ID0gSElTVF9FTlRSSUVTOw0KKw0KKwlyZWdtYXBfYnVsa19yZWFkKHJl Z21hcCwgSVNDX0hJU19FTlRSWSwgaGlzdF9lbnRyeSwgSElTVF9FTlRSSUVTKTsNCisNCisJKmhp c3RfY291bnQgPSAwOw0KKwkvKg0KKwkgKiB3ZSBkZWxpYmVyYXRlbHkgaWdub3JlIHRoZSBlbmQg b2YgdGhlIGhpc3RvZ3JhbSwNCisJICogdGhlIG1vc3Qgd2hpdGUgcGl4ZWxzDQorCSAqLw0KKwlm b3IgKGkgPSAxOyBpIDwgSElTVF9FTlRSSUVTOyBpKyspIHsNCisJCWlmICgqaGlzdF9lbnRyeSAm JiAhKm1pbikNCisJCQkqbWluID0gaTsNCisJCWlmICgqaGlzdF9lbnRyeSkNCisJCQkqbWF4ID0g aTsNCisJCSpoaXN0X2NvdW50ICs9IGkgKiAoKmhpc3RfZW50cnkrKyk7DQorCX0NCisNCisJaWYg KCEqbWluKQ0KKwkJKm1pbiA9IDE7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGlzY193Yl91cGRhdGUo c3RydWN0IGlzY19jdHJscyAqY3RybHMpDQorew0KKwl1MzIgKmhpc3RfY291bnQgPSAmY3RybHMt Pmhpc3RfY291bnRbMF07DQorCXUzMiBjLCBvZmZzZXRbNF07DQorCXU2NCBhdmcgPSAwOw0KKwkv KiBXZSBjb21wdXRlIHR3byBnYWlucywgc3RyZXRjaCBnYWluIGFuZCBncmV5IHdvcmxkIGdhaW4g Ki8NCisJdTMyIHNfZ2Fpbls0XSwgZ3dfZ2Fpbls0XTsNCisNCisJLyoNCisJICogQWNjb3JkaW5n IHRvIEdyZXkgV29ybGQsIHdlIG5lZWQgdG8gc2V0IGdhaW5zIGZvciBSL0IgdG8gbm9ybWFsaXpl DQorCSAqIHRoZW0gdG93YXJkcyB0aGUgZ3JlZW4gY2hhbm5lbC4NCisJICogVGh1cyB3ZSB3YW50 IHRvIGtlZXAgR3JlZW4gYXMgZml4ZWQgYW5kIGFkanVzdCBvbmx5IFJlZC9CbHVlDQorCSAqIENv bXB1dGUgdGhlIGF2ZXJhZ2Ugb2YgdGhlIGJvdGggZ3JlZW4gY2hhbm5lbHMgZmlyc3QNCisJICov DQorCWF2ZyA9ICh1NjQpaGlzdF9jb3VudFtJU0NfSElTX0NGR19NT0RFX0dSXSArDQorCQkodTY0 KWhpc3RfY291bnRbSVNDX0hJU19DRkdfTU9ERV9HQl07DQorCWF2ZyA+Pj0gMTsNCisNCisJLyog R3JlZW4gaGlzdG9ncmFtIGlzIG51bGwsIG5vdGhpbmcgdG8gZG8gKi8NCisJaWYgKCFhdmcpDQor CQlyZXR1cm47DQorDQorCWZvciAoYyA9IElTQ19ISVNfQ0ZHX01PREVfR1I7IGMgPD0gSVNDX0hJ U19DRkdfTU9ERV9COyBjKyspIHsNCisJCS8qDQorCQkgKiB0aGUgY29sb3Igb2Zmc2V0IGlzIHRo ZSBtaW5pbXVtIHZhbHVlIG9mIHRoZSBoaXN0b2dyYW0uDQorCQkgKiB3ZSBzdHJldGNoIHRoaXMg Y29sb3IgdG8gdGhlIGZ1bGwgcmFuZ2UgYnkgc3Vic3RyYWN0aW5nDQorCQkgKiB0aGlzIHZhbHVl IGZyb20gdGhlIGNvbG9yIGNvbXBvbmVudC4NCisJCSAqLw0KKwkJb2Zmc2V0W2NdID0gY3RybHMt Pmhpc3RfbWlubWF4W2NdW0hJU1RfTUlOX0lOREVYXTsNCisJCS8qDQorCQkgKiBUaGUgb2Zmc2V0 IGlzIGFsd2F5cyBhdCBsZWFzdCAxLiBJZiB0aGUgb2Zmc2V0IGlzIDEsIHdlIGRvDQorCQkgKiBu b3QgbmVlZCB0byBhZGp1c3QgaXQsIHNvIG91ciByZXN1bHQgbXVzdCBiZSB6ZXJvLg0KKwkJICog dGhlIG9mZnNldCBpcyBjb21wdXRlZCBpbiBhIGhpc3RvZ3JhbSBvbiA5IGJpdHMgKDAuLjUxMikN CisJCSAqIGJ1dCB0aGUgb2Zmc2V0IGluIHJlZ2lzdGVyIGlzIGJhc2VkIG9uDQorCQkgKiAxMiBi aXRzIHBpcGVsaW5lICgwLi40MDk2KS4NCisJCSAqIHdlIG5lZWQgdG8gc2hpZnQgd2l0aCB0aGUg MyBiaXRzIHRoYXQgdGhlIGhpc3RvZ3JhbSBpcw0KKwkJICogaWdub3JpbmcNCisJCSAqLw0KKwkJ Y3RybHMtPm9mZnNldFtjXSA9IChvZmZzZXRbY10gLSAxKSA8PCAzOw0KKw0KKwkJLyogdGhlIG9m ZnNldCBpcyB0aGVuIHRha2VuIGFuZCBjb252ZXJ0ZWQgdG8gMidzIGNvbXBsZW1lbnRzICovDQor CQlpZiAoIWN0cmxzLT5vZmZzZXRbY10pDQorCQkJY3RybHMtPm9mZnNldFtjXSA9IElTQ19XQl9P X1pFUk9fVkFMOw0KKw0KKwkJLyoNCisJCSAqIHRoZSBzdHJldGNoIGdhaW4gaXMgdGhlIHRvdGFs IG51bWJlciBvZiBoaXN0b2dyYW0gYmlucw0KKwkJICogZGl2aWRlZCBieSB0aGUgYWN0dWFsIHJh bmdlIG9mIGNvbG9yIGNvbXBvbmVudCAoTWF4IC0gTWluKQ0KKwkJICogSWYgd2UgY29tcHV0ZSBn YWluIGxpa2UgdGhpcywgdGhlIGFjdHVhbCBjb2xvciBjb21wb25lbnQNCisJCSAqIHdpbGwgYmUg c3RyZXRjaGVkIHRvIHRoZSBmdWxsIGhpc3RvZ3JhbS4NCisJCSAqIFdlIG5lZWQgdG8gc2hpZnQg OSBiaXRzIGZvciBwcmVjaXNpb24sIHdlIGhhdmUgOSBiaXRzIGZvcg0KKwkJICogZGVjaW1hbHMN CisJCSAqLw0KKwkJc19nYWluW2NdID0gKEhJU1RfRU5UUklFUyA8PCA5KSAvDQorCQkJKGN0cmxz LT5oaXN0X21pbm1heFtjXVtISVNUX01BWF9JTkRFWF0gLQ0KKwkJCWN0cmxzLT5oaXN0X21pbm1h eFtjXVtISVNUX01JTl9JTkRFWF0gKyAxKTsNCisNCisJCS8qDQorCQkgKiBOb3cgd2UgaGF2ZSB0 byBjb21wdXRlIHRoZSBnYWluIHcuci50LiB0aGUgYXZlcmFnZS4NCisJCSAqIEFkZC9sb3NlIGdh aW4gdG8gdGhlIGNvbXBvbmVudCB0b3dhcmRzIHRoZSBhdmVyYWdlLg0KKwkJICogSWYgaXQgaGFw cGVucyB0aGF0IHRoZSBjb21wb25lbnQgaXMgemVybywgdXNlIHRoZQ0KKwkJICogZml4ZWQgcG9p bnQgdmFsdWUgOiAxLjAgZ2Fpbi4NCisJCSAqLw0KKwkJaWYgKGhpc3RfY291bnRbY10pDQorCQkJ Z3dfZ2FpbltjXSA9IGRpdl91NjQoYXZnIDw8IDksIGhpc3RfY291bnRbY10pOw0KKwkJZWxzZQ0K KwkJCWd3X2dhaW5bY10gPSAxIDw8IDk7DQorDQorCQkvKiBtdWx0aXBseSBib3RoIGdhaW5zIGFu ZCBhZGp1c3QgZm9yIGRlY2ltYWxzICovDQorCQljdHJscy0+Z2FpbltjXSA9IHNfZ2FpbltjXSAq IGd3X2dhaW5bY107DQorCQljdHJscy0+Z2FpbltjXSA+Pj0gOTsNCisJfQ0KK30NCisNCitzdGF0 aWMgdm9pZCBpc2NfYXdiX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3KQ0KK3sNCisJc3RydWN0 IGlzY19kZXZpY2UgKmlzYyA9DQorCQljb250YWluZXJfb2Yodywgc3RydWN0IGlzY19kZXZpY2Us IGF3Yl93b3JrKTsNCisJc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNjLT5yZWdtYXA7DQorCXN0 cnVjdCBpc2NfY3RybHMgKmN0cmxzID0gJmlzYy0+Y3RybHM7DQorCXUzMiBoaXN0X2lkID0gY3Ry bHMtPmhpc3RfaWQ7DQorCXUzMiBiYXlzZWw7DQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQorCXUz MiBtaW4sIG1heDsNCisNCisJLyogc3RyZWFtaW5nIGlzIG5vdCBhY3RpdmUgYW55bW9yZSAqLw0K KwlpZiAoaXNjLT5zdG9wKQ0KKwkJcmV0dXJuOw0KKw0KKwlpZiAoY3RybHMtPmhpc3Rfc3RhdCAh PSBISVNUX0VOQUJMRUQpDQorCQlyZXR1cm47DQorDQorCWlzY19oaXN0X2NvdW50KGlzYywgJm1p biwgJm1heCk7DQorCWN0cmxzLT5oaXN0X21pbm1heFtoaXN0X2lkXVtISVNUX01JTl9JTkRFWF0g PSBtaW47DQorCWN0cmxzLT5oaXN0X21pbm1heFtoaXN0X2lkXVtISVNUX01BWF9JTkRFWF0gPSBt YXg7DQorDQorCWlmIChoaXN0X2lkICE9IElTQ19ISVNfQ0ZHX01PREVfQikgew0KKwkJaGlzdF9p ZCsrOw0KKwl9IGVsc2Ugew0KKwkJaXNjX3diX3VwZGF0ZShjdHJscyk7DQorCQloaXN0X2lkID0g SVNDX0hJU19DRkdfTU9ERV9HUjsNCisJfQ0KKw0KKwljdHJscy0+aGlzdF9pZCA9IGhpc3RfaWQ7 DQorCWJheXNlbCA9IGlzYy0+Y29uZmlnLnNkX2Zvcm1hdC0+Y2ZhX2JheWNmZyA8PCBJU0NfSElT X0NGR19CQVlTRUxfU0hJRlQ7DQorDQorCS8qIGlmIG5vIG1vcmUgYXV0byB3aGl0ZSBiYWxhbmNl LCByZXNldCBjb250cm9scy4gKi8NCisJaWYgKGN0cmxzLT5hd2IgPT0gSVNDX1dCX05PTkUpDQor CQlpc2NfcmVzZXRfYXdiX2N0cmxzKGlzYyk7DQorDQorCXBtX3J1bnRpbWVfZ2V0X3N5bmMoaXNj LT5kZXYpOw0KKw0KKwkvKg0KKwkgKiBvbmx5IHVwZGF0ZSBpZiB3ZSBoYXZlIGFsbCB0aGUgcmVx dWlyZWQgaGlzdG9ncmFtcyBhbmQgY29udHJvbHMNCisJICogaWYgYXdiIGhhcyBiZWVuIGRpc2Fi bGVkLCB3ZSBuZWVkIHRvIHJlc2V0IHJlZ2lzdGVycyBhcyB3ZWxsLg0KKwkgKi8NCisJaWYgKGhp c3RfaWQgPT0gSVNDX0hJU19DRkdfTU9ERV9HUiB8fCBjdHJscy0+YXdiID09IElTQ19XQl9OT05F KSB7DQorCQkvKg0KKwkJICogSXQgbWF5IGhhcHBlbiB0aGF0IERNQSBEb25lIElSUSB3aWxsIHRy aWdnZXIgd2hpbGUgd2UgYXJlDQorCQkgKiB1cGRhdGluZyB3aGl0ZSBiYWxhbmNlIHJlZ2lzdGVy cyBoZXJlLg0KKwkJICogSW4gdGhhdCBjYXNlLCBvbmx5IHBhcnRzIG9mIHRoZSBjb250cm9scyBo YXZlIGJlZW4gdXBkYXRlZC4NCisJCSAqIFdlIGNhbiBhdm9pZCB0aGF0IGJ5IGxvY2tpbmcgdGhl IHNlY3Rpb24uDQorCQkgKi8NCisJCXNwaW5fbG9ja19pcnFzYXZlKCZpc2MtPmF3Yl9sb2NrLCBm bGFncyk7DQorCQlpc2NfdXBkYXRlX2F3Yl9jdHJscyhpc2MpOw0KKwkJc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmaXNjLT5hd2JfbG9jaywgZmxhZ3MpOw0KKw0KKwkJLyoNCisJCSAqIGlmIHdlIGFy ZSBkb2luZyBqdXN0IHRoZSBvbmUgdGltZSB3aGl0ZSBiYWxhbmNlIGFkanVzdG1lbnQsDQorCQkg KiB3ZSBhcmUgYmFzaWNhbGx5IGRvbmUuDQorCQkgKi8NCisJCWlmIChjdHJscy0+YXdiID09IElT Q19XQl9PTkVUSU1FKSB7DQorCQkJdjRsMl9pbmZvKCZpc2MtPnY0bDJfZGV2LA0KKwkJCQkgICJD b21wbGV0ZWQgb25lIHRpbWUgd2hpdGUtYmFsYW5jZSBhZGp1c3RtZW50LlxuIik7DQorCQkJY3Ry bHMtPmF3YiA9IElTQ19XQl9OT05FOw0KKwkJfQ0KKwl9DQorCXJlZ21hcF93cml0ZShyZWdtYXAs IElTQ19ISVNfQ0ZHLCBoaXN0X2lkIHwgYmF5c2VsIHwgSVNDX0hJU19DRkdfUkFSKTsNCisJaXNj X3VwZGF0ZV9wcm9maWxlKGlzYyk7DQorCS8qIGlmIGF3YiBoYXMgYmVlbiBkaXNhYmxlZCwgd2Ug ZG9uJ3QgbmVlZCB0byBzdGFydCBhbm90aGVyIGhpc3RvZ3JhbSAqLw0KKwlpZiAoY3RybHMtPmF3 YikNCisJCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DVFJMRU4sIElTQ19DVFJMX0hJU1JFUSk7 DQorDQorCXBtX3J1bnRpbWVfcHV0X3N5bmMoaXNjLT5kZXYpOw0KK30NCisNCitzdGF0aWMgaW50 IGlzY19zX2N0cmwoc3RydWN0IHY0bDJfY3RybCAqY3RybCkNCit7DQorCXN0cnVjdCBpc2NfZGV2 aWNlICppc2MgPSBjb250YWluZXJfb2YoY3RybC0+aGFuZGxlciwNCisJCQkJCSAgICAgc3RydWN0 IGlzY19kZXZpY2UsIGN0cmxzLmhhbmRsZXIpOw0KKwlzdHJ1Y3QgaXNjX2N0cmxzICpjdHJscyA9 ICZpc2MtPmN0cmxzOw0KKw0KKwlpZiAoY3RybC0+ZmxhZ3MgJiBWNEwyX0NUUkxfRkxBR19JTkFD VElWRSkNCisJCXJldHVybiAwOw0KKw0KKwlzd2l0Y2ggKGN0cmwtPmlkKSB7DQorCWNhc2UgVjRM Ml9DSURfQlJJR0hUTkVTUzoNCisJCWN0cmxzLT5icmlnaHRuZXNzID0gY3RybC0+dmFsICYgSVND X0NCQ19CUklHSFRfTUFTSzsNCisJCWJyZWFrOw0KKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOg0K KwkJY3RybHMtPmNvbnRyYXN0ID0gY3RybC0+dmFsICYgSVNDX0NCQ19DT05UUkFTVF9NQVNLOw0K KwkJYnJlYWs7DQorCWNhc2UgVjRMMl9DSURfR0FNTUE6DQorCQljdHJscy0+Z2FtbWFfaW5kZXgg PSBjdHJsLT52YWw7DQorCQlicmVhazsNCisJY2FzZSBWNEwyX0NJRF9BVVRPX1dISVRFX0JBTEFO Q0U6DQorCQlpZiAoY3RybC0+dmFsID09IDEpDQorCQkJY3RybHMtPmF3YiA9IElTQ19XQl9BVVRP Ow0KKwkJZWxzZQ0KKwkJCWN0cmxzLT5hd2IgPSBJU0NfV0JfTk9ORTsNCisNCisJCS8qIHdlIGRp ZCBub3QgY29uZmlndXJlIElTQyB5ZXQgKi8NCisJCWlmICghaXNjLT5jb25maWcuc2RfZm9ybWF0 KQ0KKwkJCWJyZWFrOw0KKw0KKwkJaWYgKGN0cmxzLT5oaXN0X3N0YXQgIT0gSElTVF9FTkFCTEVE KQ0KKwkJCWlzY19yZXNldF9hd2JfY3RybHMoaXNjKTsNCisNCisJCWlmIChpc2MtPmN0cmxzLmF3 YiA9PSBJU0NfV0JfQVVUTyAmJg0KKwkJICAgIHZiMl9pc19zdHJlYW1pbmcoJmlzYy0+dmIyX3Zp ZHEpICYmDQorCQkgICAgSVNDX0lTX0ZPUk1BVF9SQVcoaXNjLT5jb25maWcuc2RfZm9ybWF0LT5t YnVzX2NvZGUpKQ0KKwkJCWlzY19zZXRfaGlzdG9ncmFtKGlzYywgdHJ1ZSk7DQorDQorCQlicmVh azsNCisJY2FzZSBWNEwyX0NJRF9ET19XSElURV9CQUxBTkNFOg0KKwkJLyogaWYgQVdCIGlzIGVu YWJsZWQsIGRvIG5vdGhpbmcgKi8NCisJCWlmIChjdHJscy0+YXdiID09IElTQ19XQl9BVVRPKQ0K KwkJCXJldHVybiAwOw0KKw0KKwkJY3RybHMtPmF3YiA9IElTQ19XQl9PTkVUSU1FOw0KKwkJaXNj X3NldF9oaXN0b2dyYW0oaXNjLCB0cnVlKTsNCisJCXY0bDJfZGJnKDEsIGRlYnVnLCAmaXNjLT52 NGwyX2RldiwNCisJCQkgIk9uZSB0aW1lIHdoaXRlLWJhbGFuY2Ugc3RhcnRlZC5cbiIpOw0KKwkJ YnJlYWs7DQorCWRlZmF1bHQ6DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KKwlyZXR1cm4g MDsNCit9DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfb3BzIGlzY19jdHJsX29w cyA9IHsNCisJLnNfY3RybAk9IGlzY19zX2N0cmwsDQorfTsNCisNCitzdGF0aWMgaW50IGlzY19j dHJsX2luaXQoc3RydWN0IGlzY19kZXZpY2UgKmlzYykNCit7DQorCWNvbnN0IHN0cnVjdCB2NGwy X2N0cmxfb3BzICpvcHMgPSAmaXNjX2N0cmxfb3BzOw0KKwlzdHJ1Y3QgaXNjX2N0cmxzICpjdHJs cyA9ICZpc2MtPmN0cmxzOw0KKwlzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmhkbCA9ICZjdHJs cy0+aGFuZGxlcjsNCisJaW50IHJldDsNCisNCisJY3RybHMtPmhpc3Rfc3RhdCA9IEhJU1RfSU5J VDsNCisJaXNjX3Jlc2V0X2F3Yl9jdHJscyhpc2MpOw0KKw0KKwlyZXQgPSB2NGwyX2N0cmxfaGFu ZGxlcl9pbml0KGhkbCwgNSk7DQorCWlmIChyZXQgPCAwKQ0KKwkJcmV0dXJuIHJldDsNCisNCisJ Y3RybHMtPmJyaWdodG5lc3MgPSAwOw0KKwljdHJscy0+Y29udHJhc3QgPSAyNTY7DQorDQorCXY0 bDJfY3RybF9uZXdfc3RkKGhkbCwgb3BzLCBWNEwyX0NJRF9CUklHSFRORVNTLCAtMTAyNCwgMTAy MywgMSwgMCk7DQorCXY0bDJfY3RybF9uZXdfc3RkKGhkbCwgb3BzLCBWNEwyX0NJRF9DT05UUkFT VCwgLTIwNDgsIDIwNDcsIDEsIDI1Nik7DQorCXY0bDJfY3RybF9uZXdfc3RkKGhkbCwgb3BzLCBW NEwyX0NJRF9HQU1NQSwgMCwgR0FNTUFfTUFYLCAxLCAyKTsNCisJdjRsMl9jdHJsX25ld19zdGQo aGRsLCBvcHMsIFY0TDJfQ0lEX0FVVE9fV0hJVEVfQkFMQU5DRSwgMCwgMSwgMSwgMSk7DQorDQor CS8qIGRvX3doaXRlX2JhbGFuY2UgaXMgYSBidXR0b24sIHNvIG1pbixtYXgsc3RlcCxkZWZhdWx0 IGFyZSBpZ25vcmVkICovDQorCWlzYy0+ZG9fd2JfY3RybCA9IHY0bDJfY3RybF9uZXdfc3RkKGhk bCwgb3BzLCBWNEwyX0NJRF9ET19XSElURV9CQUxBTkNFLA0KKwkJCQkJICAgIDAsIDAsIDAsIDAp Ow0KKw0KKwl2NGwyX2N0cmxfYWN0aXZhdGUoaXNjLT5kb193Yl9jdHJsLCBmYWxzZSk7DQorDQor CXY0bDJfY3RybF9oYW5kbGVyX3NldHVwKGhkbCk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitz dGF0aWMgaW50IGlzY19hc3luY19ib3VuZChzdHJ1Y3QgdjRsMl9hc3luY19ub3RpZmllciAqbm90 aWZpZXIsDQorCQkJICAgIHN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2LA0KKwkJCSAgICBzdHJ1 Y3QgdjRsMl9hc3luY19zdWJkZXYgKmFzZCkNCit7DQorCXN0cnVjdCBpc2NfZGV2aWNlICppc2Mg PSBjb250YWluZXJfb2Yobm90aWZpZXItPnY0bDJfZGV2LA0KKwkJCQkJICAgICAgc3RydWN0IGlz Y19kZXZpY2UsIHY0bDJfZGV2KTsNCisJc3RydWN0IGlzY19zdWJkZXZfZW50aXR5ICpzdWJkZXZf ZW50aXR5ID0NCisJCWNvbnRhaW5lcl9vZihub3RpZmllciwgc3RydWN0IGlzY19zdWJkZXZfZW50 aXR5LCBub3RpZmllcik7DQorDQorCWlmICh2aWRlb19pc19yZWdpc3RlcmVkKCZpc2MtPnZpZGVv X2RldikpIHsNCisJCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2LCAib25seSBzdXBwb3J0cyBvbmUg c3ViLWRldmljZS5cbiIpOw0KKwkJcmV0dXJuIC1FQlVTWTsNCisJfQ0KKw0KKwlzdWJkZXZfZW50 aXR5LT5zZCA9IHN1YmRldjsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGlz Y19hc3luY191bmJpbmQoc3RydWN0IHY0bDJfYXN5bmNfbm90aWZpZXIgKm5vdGlmaWVyLA0KKwkJ CSAgICAgIHN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2LA0KKwkJCSAgICAgIHN0cnVjdCB2NGwy X2FzeW5jX3N1YmRldiAqYXNkKQ0KK3sNCisJc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IGNvbnRh aW5lcl9vZihub3RpZmllci0+djRsMl9kZXYsDQorCQkJCQkgICAgICBzdHJ1Y3QgaXNjX2Rldmlj ZSwgdjRsMl9kZXYpOw0KKwljYW5jZWxfd29ya19zeW5jKCZpc2MtPmF3Yl93b3JrKTsNCisJdmlk ZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmlzYy0+dmlkZW9fZGV2KTsNCisJdjRsMl9jdHJsX2hhbmRs ZXJfZnJlZSgmaXNjLT5jdHJscy5oYW5kbGVyKTsNCit9DQorDQorc3RhdGljIHN0cnVjdCBpc2Nf Zm9ybWF0ICpmaW5kX2Zvcm1hdF9ieV9jb2RlKHVuc2lnbmVkIGludCBjb2RlLCBpbnQgKmluZGV4 KQ0KK3sNCisJc3RydWN0IGlzY19mb3JtYXQgKmZtdCA9ICZmb3JtYXRzX2xpc3RbMF07DQorCXVu c2lnbmVkIGludCBpOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmb3JtYXRzX2xp c3QpOyBpKyspIHsNCisJCWlmIChmbXQtPm1idXNfY29kZSA9PSBjb2RlKSB7DQorCQkJKmluZGV4 ID0gaTsNCisJCQlyZXR1cm4gZm10Ow0KKwkJfQ0KKw0KKwkJZm10Kys7DQorCX0NCisNCisJcmV0 dXJuIE5VTEw7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNjX2Zvcm1hdHNfaW5pdChzdHJ1Y3QgaXNj X2RldmljZSAqaXNjKQ0KK3sNCisJc3RydWN0IGlzY19mb3JtYXQgKmZtdDsNCisJc3RydWN0IHY0 bDJfc3ViZGV2ICpzdWJkZXYgPSBpc2MtPmN1cnJlbnRfc3ViZGV2LT5zZDsNCisJdW5zaWduZWQg aW50IG51bV9mbXRzLCBpLCBqOw0KKwl1MzIgbGlzdF9zaXplID0gQVJSQVlfU0laRShmb3JtYXRz X2xpc3QpOw0KKwlzdHJ1Y3QgdjRsMl9zdWJkZXZfbWJ1c19jb2RlX2VudW0gbWJ1c19jb2RlID0g ew0KKwkJLndoaWNoID0gVjRMMl9TVUJERVZfRk9STUFUX0FDVElWRSwNCisJfTsNCisNCisJbnVt X2ZtdHMgPSAwOw0KKwl3aGlsZSAoIXY0bDJfc3ViZGV2X2NhbGwoc3ViZGV2LCBwYWQsIGVudW1f bWJ1c19jb2RlLA0KKwkgICAgICAgTlVMTCwgJm1idXNfY29kZSkpIHsNCisJCW1idXNfY29kZS5p bmRleCsrOw0KKw0KKwkJZm10ID0gZmluZF9mb3JtYXRfYnlfY29kZShtYnVzX2NvZGUuY29kZSwg JmkpOw0KKwkJaWYgKCFmbXQpIHsNCisJCQl2NGwyX3dhcm4oJmlzYy0+djRsMl9kZXYsICJNYnVz IGNvZGUgJXggbm90IHN1cHBvcnRlZFxuIiwNCisJCQkJICBtYnVzX2NvZGUuY29kZSk7DQorCQkJ Y29udGludWU7DQorCQl9DQorDQorCQlmbXQtPnNkX3N1cHBvcnQgPSB0cnVlOw0KKwkJbnVtX2Zt dHMrKzsNCisJfQ0KKw0KKwlpZiAoIW51bV9mbXRzKQ0KKwkJcmV0dXJuIC1FTlhJTzsNCisNCisJ aXNjLT5udW1fdXNlcl9mb3JtYXRzID0gbnVtX2ZtdHM7DQorCWlzYy0+dXNlcl9mb3JtYXRzID0g ZGV2bV9rY2FsbG9jKGlzYy0+ZGV2LA0KKwkJCQkJIG51bV9mbXRzLCBzaXplb2YoKmlzYy0+dXNl cl9mb3JtYXRzKSwNCisJCQkJCSBHRlBfS0VSTkVMKTsNCisJaWYgKCFpc2MtPnVzZXJfZm9ybWF0 cykNCisJCXJldHVybiAtRU5PTUVNOw0KKw0KKwlmbXQgPSAmZm9ybWF0c19saXN0WzBdOw0KKwlm b3IgKGkgPSAwLCBqID0gMDsgaSA8IGxpc3Rfc2l6ZTsgaSsrKSB7DQorCQlpZiAoZm10LT5zZF9z dXBwb3J0KQ0KKwkJCWlzYy0+dXNlcl9mb3JtYXRzW2orK10gPSBmbXQ7DQorCQlmbXQrKzsNCisJ fQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBpc2Nfc2V0X2RlZmF1bHRfZm10 KHN0cnVjdCBpc2NfZGV2aWNlICppc2MpDQorew0KKwlzdHJ1Y3QgdjRsMl9mb3JtYXQgZiA9IHsN CisJCS50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLA0KKwkJLmZtdC5waXggPSB7 DQorCQkJLndpZHRoCQk9IFZHQV9XSURUSCwNCisJCQkuaGVpZ2h0CQk9IFZHQV9IRUlHSFQsDQor CQkJLmZpZWxkCQk9IFY0TDJfRklFTERfTk9ORSwNCisJCQkucGl4ZWxmb3JtYXQJPSBpc2MtPnVz ZXJfZm9ybWF0c1swXS0+Zm91cmNjLA0KKwkJfSwNCisJfTsNCisJaW50IHJldDsNCisNCisJcmV0 ID0gaXNjX3RyeV9mbXQoaXNjLCAmZiwgTlVMTCk7DQorCWlmIChyZXQpDQorCQlyZXR1cm4gcmV0 Ow0KKw0KKwlpc2MtPmZtdCA9IGY7DQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IGlz Y19hc3luY19jb21wbGV0ZShzdHJ1Y3QgdjRsMl9hc3luY19ub3RpZmllciAqbm90aWZpZXIpDQor ew0KKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gY29udGFpbmVyX29mKG5vdGlmaWVyLT52NGwy X2RldiwNCisJCQkJCSAgICAgIHN0cnVjdCBpc2NfZGV2aWNlLCB2NGwyX2Rldik7DQorCXN0cnVj dCB2aWRlb19kZXZpY2UgKnZkZXYgPSAmaXNjLT52aWRlb19kZXY7DQorCXN0cnVjdCB2YjJfcXVl dWUgKnEgPSAmaXNjLT52YjJfdmlkcTsNCisJaW50IHJldDsNCisNCisJSU5JVF9XT1JLKCZpc2Mt PmF3Yl93b3JrLCBpc2NfYXdiX3dvcmspOw0KKw0KKwlyZXQgPSB2NGwyX2RldmljZV9yZWdpc3Rl cl9zdWJkZXZfbm9kZXMoJmlzYy0+djRsMl9kZXYpOw0KKwlpZiAocmV0IDwgMCkgew0KKwkJdjRs Ml9lcnIoJmlzYy0+djRsMl9kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgc3ViZGV2IG5vZGVzXG4i KTsNCisJCXJldHVybiByZXQ7DQorCX0NCisNCisJaXNjLT5jdXJyZW50X3N1YmRldiA9IGNvbnRh aW5lcl9vZihub3RpZmllciwNCisJCQkJCSAgIHN0cnVjdCBpc2Nfc3ViZGV2X2VudGl0eSwgbm90 aWZpZXIpOw0KKwltdXRleF9pbml0KCZpc2MtPmxvY2spOw0KKwlpbml0X2NvbXBsZXRpb24oJmlz Yy0+Y29tcCk7DQorDQorCS8qIEluaXRpYWxpemUgdmlkZW9idWYyIHF1ZXVlICovDQorCXEtPnR5 cGUJCQk9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsNCisJcS0+aW9fbW9kZXMJCT0gVkIy X01NQVAgfCBWQjJfRE1BQlVGIHwgVkIyX1JFQUQ7DQorCXEtPmRydl9wcml2CQk9IGlzYzsNCisJ cS0+YnVmX3N0cnVjdF9zaXplCT0gc2l6ZW9mKHN0cnVjdCBpc2NfYnVmZmVyKTsNCisJcS0+b3Bz CQkJPSAmaXNjX3ZiMl9vcHM7DQorCXEtPm1lbV9vcHMJCT0gJnZiMl9kbWFfY29udGlnX21lbW9w czsNCisJcS0+dGltZXN0YW1wX2ZsYWdzCT0gVjRMMl9CVUZfRkxBR19USU1FU1RBTVBfTU9OT1RP TklDOw0KKwlxLT5sb2NrCQkJPSAmaXNjLT5sb2NrOw0KKwlxLT5taW5fYnVmZmVyc19uZWVkZWQJ PSAxOw0KKwlxLT5kZXYJCQk9IGlzYy0+ZGV2Ow0KKw0KKwlyZXQgPSB2YjJfcXVldWVfaW5pdChx KTsNCisJaWYgKHJldCA8IDApIHsNCisJCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2LA0KKwkJCSAi dmIyX3F1ZXVlX2luaXQoKSBmYWlsZWQ6ICVkXG4iLCByZXQpOw0KKwkJcmV0dXJuIHJldDsNCisJ fQ0KKw0KKwkvKiBJbml0IHZpZGVvIGRtYSBxdWV1ZXMgKi8NCisJSU5JVF9MSVNUX0hFQUQoJmlz Yy0+ZG1hX3F1ZXVlKTsNCisJc3Bpbl9sb2NrX2luaXQoJmlzYy0+ZG1hX3F1ZXVlX2xvY2spOw0K KwlzcGluX2xvY2tfaW5pdCgmaXNjLT5hd2JfbG9jayk7DQorDQorCXJldCA9IGlzY19mb3JtYXRz X2luaXQoaXNjKTsNCisJaWYgKHJldCA8IDApIHsNCisJCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2 LA0KKwkJCSAiSW5pdCBmb3JtYXQgZmFpbGVkOiAlZFxuIiwgcmV0KTsNCisJCXJldHVybiByZXQ7 DQorCX0NCisNCisJcmV0ID0gaXNjX3NldF9kZWZhdWx0X2ZtdChpc2MpOw0KKwlpZiAocmV0KSB7 DQorCQl2NGwyX2VycigmaXNjLT52NGwyX2RldiwgIkNvdWxkIG5vdCBzZXQgZGVmYXVsdCBmb3Jt YXRcbiIpOw0KKwkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKwlyZXQgPSBpc2NfY3RybF9pbml0KGlz Yyk7DQorCWlmIChyZXQpIHsNCisJCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2LCAiSW5pdCBpc2Mg Y3Ryb2xzIGZhaWxlZDogJWRcbiIsIHJldCk7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCS8q IFJlZ2lzdGVyIHZpZGVvIGRldmljZSAqLw0KKwlzdHJzY3B5KHZkZXYtPm5hbWUsIEFUTUVMX0lT Q19OQU1FLCBzaXplb2YodmRldi0+bmFtZSkpOw0KKwl2ZGV2LT5yZWxlYXNlCQk9IHZpZGVvX2Rl dmljZV9yZWxlYXNlX2VtcHR5Ow0KKwl2ZGV2LT5mb3BzCQk9ICZpc2NfZm9wczsNCisJdmRldi0+ aW9jdGxfb3BzCQk9ICZpc2NfaW9jdGxfb3BzOw0KKwl2ZGV2LT52NGwyX2RldgkJPSAmaXNjLT52 NGwyX2RldjsNCisJdmRldi0+dmZsX2RpcgkJPSBWRkxfRElSX1JYOw0KKwl2ZGV2LT5xdWV1ZQkJ PSBxOw0KKwl2ZGV2LT5sb2NrCQk9ICZpc2MtPmxvY2s7DQorCXZkZXYtPmN0cmxfaGFuZGxlcgk9 ICZpc2MtPmN0cmxzLmhhbmRsZXI7DQorCXZkZXYtPmRldmljZV9jYXBzCT0gVjRMMl9DQVBfU1RS RUFNSU5HIHwgVjRMMl9DQVBfVklERU9fQ0FQVFVSRTsNCisJdmlkZW9fc2V0X2RydmRhdGEodmRl diwgaXNjKTsNCisNCisJcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHZkZXYsIFZGTF9UWVBF X0dSQUJCRVIsIC0xKTsNCisJaWYgKHJldCA8IDApIHsNCisJCXY0bDJfZXJyKCZpc2MtPnY0bDJf ZGV2LA0KKwkJCSAidmlkZW9fcmVnaXN0ZXJfZGV2aWNlIGZhaWxlZDogJWRcbiIsIHJldCk7DQor CQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCitjb25zdCBzdHJ1Y3Qg djRsMl9hc3luY19ub3RpZmllcl9vcGVyYXRpb25zIGlzY19hc3luY19vcHMgPSB7DQorCS5ib3Vu ZCA9IGlzY19hc3luY19ib3VuZCwNCisJLnVuYmluZCA9IGlzY19hc3luY191bmJpbmQsDQorCS5j b21wbGV0ZSA9IGlzY19hc3luY19jb21wbGV0ZSwNCit9Ow0KKw0KK3ZvaWQgaXNjX3N1YmRldl9j bGVhbnVwKHN0cnVjdCBpc2NfZGV2aWNlICppc2MpDQorew0KKwlzdHJ1Y3QgaXNjX3N1YmRldl9l bnRpdHkgKnN1YmRldl9lbnRpdHk7DQorDQorCWxpc3RfZm9yX2VhY2hfZW50cnkoc3ViZGV2X2Vu dGl0eSwgJmlzYy0+c3ViZGV2X2VudGl0aWVzLCBsaXN0KSB7DQorCQl2NGwyX2FzeW5jX25vdGlm aWVyX3VucmVnaXN0ZXIoJnN1YmRldl9lbnRpdHktPm5vdGlmaWVyKTsNCisJCXY0bDJfYXN5bmNf bm90aWZpZXJfY2xlYW51cCgmc3ViZGV2X2VudGl0eS0+bm90aWZpZXIpOw0KKwl9DQorDQorCUlO SVRfTElTVF9IRUFEKCZpc2MtPnN1YmRldl9lbnRpdGllcyk7DQorfQ0KKw0KK2ludCBpc2NfcGlw ZWxpbmVfaW5pdChzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KK3sNCisJc3RydWN0IGRldmljZSAq ZGV2ID0gaXNjLT5kZXY7DQorCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0K KwlzdHJ1Y3QgcmVnbWFwX2ZpZWxkICpyZWdzOw0KKwl1bnNpZ25lZCBpbnQgaTsNCisNCisJLyog V0ItLT5DRkEtLT5DQy0tPkdBTS0tPkNTQy0tPkNCQy0tPlNVQjQyMi0tPlNVQjQyMCAqLw0KKwlj b25zdCBzdHJ1Y3QgcmVnX2ZpZWxkIHJlZ2ZpZWxkc1tJU0NfUElQRV9MSU5FX05PREVfTlVNXSA9 IHsNCisJCVJFR19GSUVMRChJU0NfV0JfQ1RSTCwgMCwgMCksDQorCQlSRUdfRklFTEQoSVNDX0NG QV9DVFJMLCAwLCAwKSwNCisJCVJFR19GSUVMRChJU0NfQ0NfQ1RSTCwgMCwgMCksDQorCQlSRUdf RklFTEQoSVNDX0dBTV9DVFJMLCAwLCAwKSwNCisJCVJFR19GSUVMRChJU0NfR0FNX0NUUkwsIDEs IDEpLA0KKwkJUkVHX0ZJRUxEKElTQ19HQU1fQ1RSTCwgMiwgMiksDQorCQlSRUdfRklFTEQoSVND X0dBTV9DVFJMLCAzLCAzKSwNCisJCVJFR19GSUVMRChJU0NfQ1NDX0NUUkwsIDAsIDApLA0KKwkJ UkVHX0ZJRUxEKElTQ19DQkNfQ1RSTCwgMCwgMCksDQorCQlSRUdfRklFTEQoSVNDX1NVQjQyMl9D VFJMLCAwLCAwKSwNCisJCVJFR19GSUVMRChJU0NfU1VCNDIwX0NUUkwsIDAsIDApLA0KKwl9Ow0K Kw0KKwlmb3IgKGkgPSAwOyBpIDwgSVNDX1BJUEVfTElORV9OT0RFX05VTTsgaSsrKSB7DQorCQly ZWdzID0gZGV2bV9yZWdtYXBfZmllbGRfYWxsb2MoZGV2LCByZWdtYXAsIHJlZ2ZpZWxkc1tpXSk7 DQorCQlpZiAoSVNfRVJSKHJlZ3MpKQ0KKwkJCXJldHVybiBQVFJfRVJSKHJlZ3MpOw0KKw0KKwkJ aXNjLT5waXBlbGluZVtpXSA9ICByZWdzOw0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCisv KiByZWdtYXAgY29uZmlndXJhdGlvbiAqLw0KKyNkZWZpbmUgQVRNRUxfSVNDX1JFR19NQVggICAg MHhiZmMNCitjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBpc2NfcmVnbWFwX2NvbmZpZyA9IHsN CisJLnJlZ19iaXRzICAgICAgID0gMzIsDQorCS5yZWdfc3RyaWRlICAgICA9IDQsDQorCS52YWxf Yml0cyAgICAgICA9IDMyLA0KKwkubWF4X3JlZ2lzdGVyCT0gQVRNRUxfSVNDX1JFR19NQVgsDQor fTsNCisNCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2F0bWVsL2F0bWVsLWlz Yy5jIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hdG1lbC9hdG1lbC1pc2MuYw0KZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0DQppbmRleCBkYTNiNDQxLi4wMDAwMDAwDQotLS0gYS9kcml2ZXJzL21l ZGlhL3BsYXRmb3JtL2F0bWVsL2F0bWVsLWlzYy5jDQorKysgL2Rldi9udWxsDQpAQCAtMSwyNjM0 ICswLDAgQEANCi0vKg0KLSAqIEF0bWVsIEltYWdlIFNlbnNvciBDb250cm9sbGVyIChJU0MpIGRy aXZlcg0KLSAqDQotICogQ29weXJpZ2h0IChDKSAyMDE2IEF0bWVsDQotICoNCi0gKiBBdXRob3I6 IFNvbmdqdW4gV3UgPHNvbmdqdW4ud3VAbWljcm9jaGlwLmNvbT4NCi0gKg0KLSAqIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgbWF5IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5DQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkNCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2 ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuDQotICoNCi0gKiBTZW5zb3ItLT5QRkUtLT5XQi0tPkNG QS0tPkNDLS0+R0FNLS0+Q1NDLS0+Q0JDLS0+U1VCLS0+UkxQLS0+RE1BDQotICoNCi0gKiBJU0Mg dmlkZW8gcGlwZWxpbmUgaW50ZWdyYXRlcyB0aGUgZm9sbG93aW5nIHN1Ym1vZHVsZXM6DQotICog UEZFOiBQYXJhbGxlbCBGcm9udCBFbmQgdG8gc2FtcGxlIHRoZSBjYW1lcmEgc2Vuc29yIGlucHV0 IHN0cmVhbQ0KLSAqICBXQjogUHJvZ3JhbW1hYmxlIHdoaXRlIGJhbGFuY2UgaW4gdGhlIEJheWVy IGRvbWFpbg0KLSAqIENGQTogQ29sb3IgZmlsdGVyIGFycmF5IGludGVycG9sYXRpb24gbW9kdWxl DQotICogIENDOiBQcm9ncmFtbWFibGUgY29sb3IgY29ycmVjdGlvbg0KLSAqIEdBTTogR2FtbWEg Y29ycmVjdGlvbg0KLSAqIENTQzogUHJvZ3JhbW1hYmxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24N Ci0gKiBDQkM6IENvbnRyYXN0IGFuZCBCcmlnaHRuZXNzIGNvbnRyb2wNCi0gKiBTVUI6IFRoaXMg bW9kdWxlIHBlcmZvcm1zIFlDYkNyNDQ0IHRvIFlDYkNyNDIwIGNocm9taW5hbmNlIHN1YnNhbXBs aW5nDQotICogUkxQOiBUaGlzIG1vZHVsZSBwZXJmb3JtcyByb3VuZGluZywgcmFuZ2UgbGltaXRp bmcNCi0gKiAgICAgIGFuZCBwYWNraW5nIG9mIHRoZSBpbmNvbWluZyBkYXRhDQotICovDQotDQot I2luY2x1ZGUgPGxpbnV4L2Nsay5oPg0KLSNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4NCi0jaW5j bHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+DQotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQot I2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPg0KLSNpbmNsdWRlIDxsaW51eC9tYXRoNjQuaD4N Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQotI2luY2x1ZGUgPGxpbnV4L29mLmg+DQotI2lu Y2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+DQotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2Rldmlj ZS5oPg0KLSNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+DQotI2luY2x1ZGUgPGxpbnV4L3Jl Z21hcC5oPg0KLSNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4NCi0NCi0jaW5jbHVkZSA8bWVk aWEvdjRsMi1jdHJscy5oPg0KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPg0KLSNpbmNs dWRlIDxtZWRpYS92NGwyLWV2ZW50Lmg+DQotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW1hZ2Utc2l6 ZXMuaD4NCi0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPg0KLSNpbmNsdWRlIDxtZWRpYS92 NGwyLWZ3bm9kZS5oPg0KLSNpbmNsdWRlIDxtZWRpYS92NGwyLXN1YmRldi5oPg0KLSNpbmNsdWRl IDxtZWRpYS92aWRlb2J1ZjItZG1hLWNvbnRpZy5oPg0KLQ0KLSNpbmNsdWRlICJhdG1lbC1pc2Mt cmVncy5oIg0KLQ0KLSNkZWZpbmUgQVRNRUxfSVNDX05BTUUJCSJhdG1lbF9pc2MiDQotDQotI2Rl ZmluZSBJU0NfTUFYX1NVUFBPUlRfV0lEVEggICAyNTkyDQotI2RlZmluZSBJU0NfTUFYX1NVUFBP UlRfSEVJR0hUICAxOTQ0DQotDQotI2RlZmluZSBJU0NfQ0xLX01BWF9ESVYJCTI1NQ0KLQ0KLWVu dW0gaXNjX2Nsa19pZCB7DQotCUlTQ19JU1BDSyA9IDAsDQotCUlTQ19NQ0sgPSAxLA0KLX07DQot DQotc3RydWN0IGlzY19jbGsgew0KLQlzdHJ1Y3QgY2xrX2h3ICAgaHc7DQotCXN0cnVjdCBjbGsg ICAgICAqY2xrOw0KLQlzdHJ1Y3QgcmVnbWFwICAgKnJlZ21hcDsNCi0Jc3BpbmxvY2tfdAlsb2Nr Ow0KLQl1OAkJaWQ7DQotCXU4CQlwYXJlbnRfaWQ7DQotCXUzMgkJZGl2Ow0KLQlzdHJ1Y3QgZGV2 aWNlCSpkZXY7DQotfTsNCi0NCi0jZGVmaW5lIHRvX2lzY19jbGsoaHcpIGNvbnRhaW5lcl9vZiho dywgc3RydWN0IGlzY19jbGssIGh3KQ0KLQ0KLXN0cnVjdCBpc2NfYnVmZmVyIHsNCi0Jc3RydWN0 IHZiMl92NGwyX2J1ZmZlciAgdmI7DQotCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsNCi19Ow0KLQ0K LXN0cnVjdCBpc2Nfc3ViZGV2X2VudGl0eSB7DQotCXN0cnVjdCB2NGwyX3N1YmRldgkJKnNkOw0K LQlzdHJ1Y3QgdjRsMl9hc3luY19zdWJkZXYJKmFzZDsNCi0Jc3RydWN0IHY0bDJfYXN5bmNfbm90 aWZpZXIgICAgICBub3RpZmllcjsNCi0NCi0JdTMyIHBmZV9jZmcwOw0KLQ0KLQlzdHJ1Y3QgbGlz dF9oZWFkIGxpc3Q7DQotfTsNCi0NCi0vKg0KLSAqIHN0cnVjdCBpc2NfZm9ybWF0IC0gSVNDIG1l ZGlhIGJ1cyBmb3JtYXQgaW5mb3JtYXRpb24NCi0JCQlUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRz IHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgSVNDDQotCQkJYW5kIHRoZSBzZW5zb3IuIEl0J3Mg dGhlIGlucHV0IGZvcm1hdCByZWNlaXZlZCBieQ0KLQkJCXRoZSBJU0MuDQotICogQGZvdXJjYzoJ CUZvdXJjYyBjb2RlIGZvciB0aGlzIGZvcm1hdA0KLSAqIEBtYnVzX2NvZGU6CQlWNEwyIG1lZGlh IGJ1cyBmb3JtYXQgY29kZS4NCi0gKiBAY2ZhX2JheWNmZzoJCUlmIHRoaXMgZm9ybWF0IGlzIFJB VyBCQVlFUiwgaW5kaWNhdGUgdGhlIHR5cGUgb2YgYmF5ZXIuDQotCQkJdGhpcyBpcyBlaXRoZXIg QkdCRywgUkdSRywgZXRjLg0KLSAqIEBwZmVfY2ZnMF9icHM6CU51bWJlciBvZiBoYXJkd2FyZSBk YXRhIGxpbmVzIGNvbm5lY3RlZCB0byB0aGUgSVNDDQotICovDQotDQotc3RydWN0IGlzY19mb3Jt YXQgew0KLQl1MzIJZm91cmNjOw0KLQl1MzIJbWJ1c19jb2RlOw0KLQl1MzIJY2ZhX2JheWNmZzsN Ci0NCi0JYm9vbAlzZF9zdXBwb3J0Ow0KLQl1MzIJcGZlX2NmZzBfYnBzOw0KLX07DQotDQotLyog UGlwZWxpbmUgYml0bWFwICovDQotI2RlZmluZSBXQl9FTkFCTEUJQklUKDApDQotI2RlZmluZSBD RkFfRU5BQkxFCUJJVCgxKQ0KLSNkZWZpbmUgQ0NfRU5BQkxFCUJJVCgyKQ0KLSNkZWZpbmUgR0FN X0VOQUJMRQlCSVQoMykNCi0jZGVmaW5lIEdBTV9CRU5BQkxFCUJJVCg0KQ0KLSNkZWZpbmUgR0FN X0dFTkFCTEUJQklUKDUpDQotI2RlZmluZSBHQU1fUkVOQUJMRQlCSVQoNikNCi0jZGVmaW5lIENT Q19FTkFCTEUJQklUKDcpDQotI2RlZmluZSBDQkNfRU5BQkxFCUJJVCg4KQ0KLSNkZWZpbmUgU1VC NDIyX0VOQUJMRQlCSVQoOSkNCi0jZGVmaW5lIFNVQjQyMF9FTkFCTEUJQklUKDEwKQ0KLQ0KLSNk ZWZpbmUgR0FNX0VOQUJMRVMJKEdBTV9SRU5BQkxFIHwgR0FNX0dFTkFCTEUgfCBHQU1fQkVOQUJM RSB8IEdBTV9FTkFCTEUpDQotDQotLyoNCi0gKiBzdHJ1Y3QgZm10X2NvbmZpZyAtIElTQyBmb3Jt YXQgY29uZmlndXJhdGlvbiBhbmQgaW50ZXJuYWwgcGlwZWxpbmUNCi0JCQlUaGlzIHN0cnVjdHVy ZSByZXByZXNlbnRzIHRoZSBpbnRlcm5hbCBjb25maWd1cmF0aW9uDQotCQkJb2YgdGhlIElTQy4N Ci0JCQlJdCBhbHNvIGhvbGRzIHRoZSBmb3JtYXQgdGhhdCBJU0Mgd2lsbCBwcmVzZW50IHRvIHY0 bDIuDQotICogQHNkX2Zvcm1hdDoJCVBvaW50ZXIgdG8gYW4gaXNjX2Zvcm1hdCBzdHJ1Y3QgdGhh dCBob2xkcyB0aGUgc2Vuc29yDQotCQkJY29uZmlndXJhdGlvbi4NCi0gKiBAZm91cmNjOgkJRm91 cmNjIGNvZGUgZm9yIHRoaXMgZm9ybWF0Lg0KLSAqIEBicHA6CQlCeXRlcyBwZXIgcGl4ZWwgaW4g dGhlIGN1cnJlbnQgZm9ybWF0Lg0KLSAqIEBybHBfY2ZnX21vZGU6CUNvbmZpZ3VyYXRpb24gb2Yg dGhlIFJMUCAocm91bmRpbmcsIGxpbWl0aW5nIHBhY2thZ2luZykNCi0gKiBAZGNmZ19pbW9kZToJ CUNvbmZpZ3VyYXRpb24gb2YgdGhlIGlucHV0IG9mIHRoZSBETUEgbW9kdWxlDQotICogQGRjdHJs X2R2aWV3OglDb25maWd1cmF0aW9uIG9mIHRoZSBvdXRwdXQgb2YgdGhlIERNQSBtb2R1bGUNCi0g KiBAYml0c19waXBlbGluZToJQ29uZmlndXJhdGlvbiBvZiB0aGUgcGlwZWxpbmUsIHdoaWNoIG1v ZHVsZXMgYXJlIGVuYWJsZWQNCi0gKi8NCi1zdHJ1Y3QgZm10X2NvbmZpZyB7DQotCXN0cnVjdCBp c2NfZm9ybWF0CSpzZF9mb3JtYXQ7DQotDQotCXUzMgkJCWZvdXJjYzsNCi0JdTgJCQlicHA7DQot DQotCXUzMgkJCXJscF9jZmdfbW9kZTsNCi0JdTMyCQkJZGNmZ19pbW9kZTsNCi0JdTMyCQkJZGN0 cmxfZHZpZXc7DQotDQotCXUzMgkJCWJpdHNfcGlwZWxpbmU7DQotfTsNCi0NCi0jZGVmaW5lIEhJ U1RfRU5UUklFUwkJNTEyDQotI2RlZmluZSBISVNUX0JBWUVSCQkoSVNDX0hJU19DRkdfTU9ERV9C ICsgMSkNCi0NCi1lbnVtew0KLQlISVNUX0lOSVQgPSAwLA0KLQlISVNUX0VOQUJMRUQsDQotCUhJ U1RfRElTQUJMRUQsDQotfTsNCi0NCi1zdHJ1Y3QgaXNjX2N0cmxzIHsNCi0Jc3RydWN0IHY0bDJf Y3RybF9oYW5kbGVyIGhhbmRsZXI7DQotDQotCXUzMiBicmlnaHRuZXNzOw0KLQl1MzIgY29udHJh c3Q7DQotCXU4IGdhbW1hX2luZGV4Ow0KLSNkZWZpbmUgSVNDX1dCX05PTkUJMA0KLSNkZWZpbmUg SVNDX1dCX0FVVE8JMQ0KLSNkZWZpbmUgSVNDX1dCX09ORVRJTUUJMg0KLQl1OCBhd2I7DQotDQot CS8qIG9uZSBmb3IgZWFjaCBjb21wb25lbnQgOiBHUiwgUiwgR0IsIEIgKi8NCi0JdTMyIGdhaW5b SElTVF9CQVlFUl07DQotCXUzMiBvZmZzZXRbSElTVF9CQVlFUl07DQotDQotCXUzMiBoaXN0X2Vu dHJ5W0hJU1RfRU5UUklFU107DQotCXUzMiBoaXN0X2NvdW50W0hJU1RfQkFZRVJdOw0KLQl1OCBo aXN0X2lkOw0KLQl1OCBoaXN0X3N0YXQ7DQotI2RlZmluZSBISVNUX01JTl9JTkRFWAkJMA0KLSNk ZWZpbmUgSElTVF9NQVhfSU5ERVgJCTENCi0JdTMyIGhpc3RfbWlubWF4W0hJU1RfQkFZRVJdWzJd Ow0KLX07DQotDQotI2RlZmluZSBJU0NfUElQRV9MSU5FX05PREVfTlVNCTExDQotDQotc3RydWN0 IGlzY19kZXZpY2Ugew0KLQlzdHJ1Y3QgcmVnbWFwCQkqcmVnbWFwOw0KLQlzdHJ1Y3QgY2xrCQkq aGNsb2NrOw0KLQlzdHJ1Y3QgY2xrCQkqaXNwY2s7DQotCXN0cnVjdCBpc2NfY2xrCQlpc2NfY2xr c1syXTsNCi0NCi0Jc3RydWN0IGRldmljZQkJKmRldjsNCi0Jc3RydWN0IHY0bDJfZGV2aWNlCXY0 bDJfZGV2Ow0KLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlCXZpZGVvX2RldjsNCi0NCi0Jc3RydWN0IHZi Ml9xdWV1ZQl2YjJfdmlkcTsNCi0Jc3BpbmxvY2tfdAkJZG1hX3F1ZXVlX2xvY2s7DQotCXN0cnVj dCBsaXN0X2hlYWQJZG1hX3F1ZXVlOw0KLQlzdHJ1Y3QgaXNjX2J1ZmZlcgkqY3VyX2ZybTsNCi0J dW5zaWduZWQgaW50CQlzZXF1ZW5jZTsNCi0JYm9vbAkJCXN0b3A7DQotCXN0cnVjdCBjb21wbGV0 aW9uCWNvbXA7DQotDQotCXN0cnVjdCB2NGwyX2Zvcm1hdAlmbXQ7DQotCXN0cnVjdCBpc2NfZm9y bWF0CSoqdXNlcl9mb3JtYXRzOw0KLQl1bnNpZ25lZCBpbnQJCW51bV91c2VyX2Zvcm1hdHM7DQot DQotCXN0cnVjdCBmbXRfY29uZmlnCWNvbmZpZzsNCi0Jc3RydWN0IGZtdF9jb25maWcJdHJ5X2Nv bmZpZzsNCi0NCi0Jc3RydWN0IGlzY19jdHJscwljdHJsczsNCi0Jc3RydWN0IHY0bDJfY3RybAkq ZG9fd2JfY3RybDsNCi0Jc3RydWN0IHdvcmtfc3RydWN0CWF3Yl93b3JrOw0KLQ0KLQlzdHJ1Y3Qg bXV0ZXgJCWxvY2s7DQotCXNwaW5sb2NrX3QJCWF3Yl9sb2NrOw0KLQ0KLQlzdHJ1Y3QgcmVnbWFw X2ZpZWxkCSpwaXBlbGluZVtJU0NfUElQRV9MSU5FX05PREVfTlVNXTsNCi0NCi0Jc3RydWN0IGlz Y19zdWJkZXZfZW50aXR5CSpjdXJyZW50X3N1YmRldjsNCi0Jc3RydWN0IGxpc3RfaGVhZAkJc3Vi ZGV2X2VudGl0aWVzOw0KLX07DQotDQotLyogVGhpcyBpcyBhIGxpc3Qgb2YgdGhlIGZvcm1hdHMg dGhhdCB0aGUgSVNDIGNhbiAqb3V0cHV0KiAqLw0KLXN0YXRpYyBzdHJ1Y3QgaXNjX2Zvcm1hdCBj b250cm9sbGVyX2Zvcm1hdHNbXSA9IHsNCi0Jew0KLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRf QVJHQjQ0NCwNCi0JfSwNCi0Jew0KLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfQVJHQjU1NSwN Ci0JfSwNCi0Jew0KLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfUkdCNTY1LA0KLQl9LA0KLQl7 DQotCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9BQkdSMzIsDQotCX0sDQotCXsNCi0JCS5mb3Vy Y2MJCT0gVjRMMl9QSVhfRk1UX1hCR1IzMiwNCi0JfSwNCi0Jew0KLQkJLmZvdXJjYwkJPSBWNEwy X1BJWF9GTVRfWVVWNDIwLA0KLQl9LA0KLQl7DQotCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9Z VVlWLA0KLQl9LA0KLQl7DQotCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9ZVVY0MjJQLA0KLQl9 LA0KLQl7DQotCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9HUkVZLA0KLQl9LA0KLX07DQotDQot LyogVGhpcyBpcyBhIGxpc3Qgb2YgZm9ybWF0cyB0aGF0IHRoZSBJU0MgY2FuIHJlY2VpdmUgYXMg KmlucHV0KiAqLw0KLXN0YXRpYyBzdHJ1Y3QgaXNjX2Zvcm1hdCBmb3JtYXRzX2xpc3RbXSA9IHsN Ci0Jew0KLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0JHR1I4LA0KLQkJLm1idXNfY29kZQk9 IE1FRElBX0JVU19GTVRfU0JHR1I4XzFYOCwNCi0JCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZFX0NG RzBfQlBTX0VJR0hULA0KLQkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19CR0JHLA0KLQl9LA0K LQl7DQotCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TR0JSRzgsDQotCQkubWJ1c19jb2RlCT0g TUVESUFfQlVTX0ZNVF9TR0JSRzhfMVg4LA0KLQkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkVfQ0ZH MF9CUFNfRUlHSFQsDQotCQkuY2ZhX2JheWNmZwk9IElTQ19CQVlfQ0ZHX0dCR0IsDQotCX0sDQot CXsNCi0JCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1NHUkJHOCwNCi0JCS5tYnVzX2NvZGUJPSBN RURJQV9CVVNfRk1UX1NHUkJHOF8xWDgsDQotCQkucGZlX2NmZzBfYnBzCT0gSVNDX1BGRV9DRkcw X0JQU19FSUdIVCwNCi0JCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdfR1JHUiwNCi0JfSwNCi0J ew0KLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU1JHR0I4LA0KLQkJLm1idXNfY29kZQk9IE1F RElBX0JVU19GTVRfU1JHR0I4XzFYOCwNCi0JCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZFX0NGRzBf QlBTX0VJR0hULA0KLQkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19SR1JHLA0KLQl9LA0KLQl7 DQotCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TQkdHUjEwLA0KLQkJLm1idXNfY29kZQk9IE1F RElBX0JVU19GTVRfU0JHR1IxMF8xWDEwLA0KLQkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkdfQ0ZH MF9CUFNfVEVOLA0KLQkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19SR1JHLA0KLQl9LA0KLQl7 DQotCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TR0JSRzEwLA0KLQkJLm1idXNfY29kZQk9IE1F RElBX0JVU19GTVRfU0dCUkcxMF8xWDEwLA0KLQkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkdfQ0ZH MF9CUFNfVEVOLA0KLQkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19HQkdCLA0KLQl9LA0KLQl7 DQotCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TR1JCRzEwLA0KLQkJLm1idXNfY29kZQk9IE1F RElBX0JVU19GTVRfU0dSQkcxMF8xWDEwLA0KLQkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkdfQ0ZH MF9CUFNfVEVOLA0KLQkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19HUkdSLA0KLQl9LA0KLQl7 DQotCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TUkdHQjEwLA0KLQkJLm1idXNfY29kZQk9IE1F RElBX0JVU19GTVRfU1JHR0IxMF8xWDEwLA0KLQkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkdfQ0ZH MF9CUFNfVEVOLA0KLQkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19SR1JHLA0KLQl9LA0KLQl7 DQotCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TQkdHUjEyLA0KLQkJLm1idXNfY29kZQk9IE1F RElBX0JVU19GTVRfU0JHR1IxMl8xWDEyLA0KLQkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkdfQ0ZH MF9CUFNfVFdFTFZFLA0KLQkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19CR0JHLA0KLQl9LA0K LQl7DQotCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TR0JSRzEyLA0KLQkJLm1idXNfY29kZQk9 IE1FRElBX0JVU19GTVRfU0dCUkcxMl8xWDEyLA0KLQkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkdf Q0ZHMF9CUFNfVFdFTFZFLA0KLQkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19HQkdCLA0KLQl9 LA0KLQl7DQotCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TR1JCRzEyLA0KLQkJLm1idXNfY29k ZQk9IE1FRElBX0JVU19GTVRfU0dSQkcxMl8xWDEyLA0KLQkJLnBmZV9jZmcwX2Jwcwk9IElTQ19Q RkdfQ0ZHMF9CUFNfVFdFTFZFLA0KLQkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19HUkdSLA0K LQl9LA0KLQl7DQotCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TUkdHQjEyLA0KLQkJLm1idXNf Y29kZQk9IE1FRElBX0JVU19GTVRfU1JHR0IxMl8xWDEyLA0KLQkJLnBmZV9jZmcwX2Jwcwk9IElT Q19QRkdfQ0ZHMF9CUFNfVFdFTFZFLA0KLQkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19SR1JH LA0KLQl9LA0KLQl7DQotCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9HUkVZLA0KLQkJLm1idXNf Y29kZQk9IE1FRElBX0JVU19GTVRfWThfMVg4LA0KLQkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkVf Q0ZHMF9CUFNfRUlHSFQsDQotCX0sDQotCXsNCi0JCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1lV WVYsDQotCQkubWJ1c19jb2RlCT0gTUVESUFfQlVTX0ZNVF9ZVVlWOF8yWDgsDQotCQkucGZlX2Nm ZzBfYnBzCT0gSVNDX1BGRV9DRkcwX0JQU19FSUdIVCwNCi0JfSwNCi0Jew0KLQkJLmZvdXJjYwkJ PSBWNEwyX1BJWF9GTVRfUkdCNTY1LA0KLQkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfUkdC NTY1XzJYOF9MRSwNCi0JCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZFX0NGRzBfQlBTX0VJR0hULA0K LQl9LA0KLX07DQotDQotI2RlZmluZSBHQU1NQV9NQVgJMg0KLSNkZWZpbmUgR0FNTUFfRU5UUklF Uwk2NA0KLQ0KLS8qIEdhbW1hIHRhYmxlIHdpdGggZ2FtbWEgMS8yLjIgKi8NCi1zdGF0aWMgY29u c3QgdTMyIGlzY19nYW1tYV90YWJsZVtHQU1NQV9NQVggKyAxXVtHQU1NQV9FTlRSSUVTXSA9IHsN Ci0JLyogMCAtLT4gZ2FtbWEgMS8xLjggKi8NCi0JeyAgICAgIDB4NjUsICAweDY2MDAyRiwgIDB4 OTUwMDI1LCAgMHhCQjAwMjAsICAweERCMDAxRCwgIDB4RjgwMDFBLA0KLQkgIDB4MTEzMDAxOCwg MHgxMkIwMDE3LCAweDE0MjAwMTYsIDB4MTU4MDAxNCwgMHgxNkQwMDEzLCAweDE4MTAwMTIsDQot CSAgMHgxOTQwMDEyLCAweDFBNjAwMTIsIDB4MUI4MDAxMSwgMHgxQzkwMDEwLCAweDFEQTAwMTAs IDB4MUVBMDAwRiwNCi0JICAweDFGQTAwMEYsIDB4MjA5MDAwRiwgMHgyMTgwMDBGLCAweDIyNzAw MEUsIDB4MjM1MDAwRSwgMHgyNDMwMDBFLA0KLQkgIDB4MjUxMDAwRSwgMHgyNUYwMDBELCAweDI2 QzAwMEQsIDB4Mjc5MDAwRCwgMHgyODYwMDBELCAweDI5MzAwMEMsDQotCSAgMHgyQTAwMDBDLCAw eDJBQzAwMEMsIDB4MkI4MDAwQywgMHgyQzQwMDBDLCAweDJEMDAwMEIsIDB4MkRDMDAwQiwNCi0J ICAweDJFNzAwMEIsIDB4MkYzMDAwQiwgMHgyRkUwMDBCLCAweDMwOTAwMEIsIDB4MzE0MDAwQiwg MHgzMUYwMDBBLA0KLQkgIDB4MzJBMDAwQSwgMHgzMzQwMDBCLCAweDMzRjAwMEEsIDB4MzQ5MDAw QSwgMHgzNTQwMDBBLCAweDM1RTAwMEEsDQotCSAgMHgzNjgwMDBBLCAweDM3MjAwMEEsIDB4MzdD MDAwQSwgMHgzODYwMDBBLCAweDM5MDAwMDksIDB4Mzk5MDAwQSwNCi0JICAweDNBMzAwMDksIDB4 M0FEMDAwOSwgMHgzQjYwMDA5LCAweDNCRjAwMEEsIDB4M0M5MDAwOSwgMHgzRDIwMDA5LA0KLQkg IDB4M0RCMDAwOSwgMHgzRTQwMDA5LCAweDNFRDAwMDksIDB4M0Y2MDAwOSB9LA0KLQ0KLQkvKiAx IC0tPiBnYW1tYSAxLzIgKi8NCi0JeyAgICAgIDB4N0YsICAweDgwMDAzNCwgIDB4QjUwMDI4LCAg MHhERTAwMjEsIDB4MTAwMDAxRSwgMHgxMUUwMDFCLA0KLQkgIDB4MTM5MDAxOSwgMHgxNTIwMDE3 LCAweDE2QTAwMTUsIDB4MTgwMDAxNCwgMHgxOTQwMDE0LCAweDFBODAwMTMsDQotCSAgMHgxQkIw MDEyLCAweDFDRDAwMTEsIDB4MURGMDAxMCwgMHgxRUYwMDEwLCAweDIwMDAwMEYsIDB4MjBGMDAw RiwNCi0JICAweDIxRjAwMEUsIDB4MjJEMDAwRiwgMHgyM0MwMDBFLCAweDI0QTAwMEUsIDB4MjU4 MDAwRCwgMHgyNjUwMDBELA0KLQkgIDB4MjczMDAwQywgMHgyN0YwMDBELCAweDI4QzAwMEMsIDB4 Mjk5MDAwQywgMHgyQTUwMDBDLCAweDJCMTAwMEIsDQotCSAgMHgyQkMwMDBDLCAweDJDODAwMEIs IDB4MkQzMDAwQywgMHgyREYwMDBCLCAweDJFQTAwMEEsIDB4MkY1MDAwQSwNCi0JICAweDJGRjAw MEIsIDB4MzBBMDAwQSwgMHgzMTQwMDBCLCAweDMxRjAwMEEsIDB4MzI5MDAwQSwgMHgzMzMwMDBB LA0KLQkgIDB4MzNEMDAwOSwgMHgzNDcwMDA5LCAweDM1MDAwMEEsIDB4MzVBMDAwOSwgMHgzNjMw MDBBLCAweDM2RDAwMDksDQotCSAgMHgzNzYwMDA5LCAweDM3RjAwMDksIDB4Mzg4MDAwOSwgMHgz OTEwMDA5LCAweDM5QTAwMDksIDB4M0EzMDAwOSwNCi0JICAweDNBQzAwMDgsIDB4M0I0MDAwOSwg MHgzQkQwMDA4LCAweDNDNjAwMDgsIDB4M0NFMDAwOCwgMHgzRDYwMDA5LA0KLQkgIDB4M0RGMDAw OCwgMHgzRTcwMDA4LCAweDNFRjAwMDgsIDB4M0Y3MDAwOCB9LA0KLQ0KLQkvKiAyIC0tPiBnYW1t YSAxLzIuMiAqLw0KLQl7ICAgICAgMHg5OSwgIDB4OUIwMDM4LCAgMHhENDAwMkEsICAweEZGMDAy MywgMHgxMjIwMDFGLCAweDE0MTAwMUIsDQotCSAgMHgxNUQwMDE5LCAweDE3NjAwMTcsIDB4MThF MDAxNSwgMHgxQTMwMDE1LCAweDFCODAwMTMsIDB4MUNDMDAxMiwNCi0JICAweDFERTAwMTEsIDB4 MUYwMDAxMCwgMHgyMDEwMDEwLCAweDIxMTAwMTAsIDB4MjIxMDAwRiwgMHgyMzAwMDBGLA0KLQkg IDB4MjNGMDAwRSwgMHgyNEQwMDBFLCAweDI1QjAwMEQsIDB4MjY5MDAwQywgMHgyNzYwMDBDLCAw eDI4MzAwMEMsDQotCSAgMHgyOEYwMDBDLCAweDI5QjAwMEMsIDB4MkE3MDAwQywgMHgyQjMwMDBC LCAweDJCRjAwMEIsIDB4MkNBMDAwQiwNCi0JICAweDJENTAwMEIsIDB4MkUwMDAwQSwgMHgyRUIw MDBBLCAweDJGNTAwMEEsIDB4MkZGMDAwQSwgMHgzMEEwMDBBLA0KLQkgIDB4MzE0MDAwOSwgMHgz MUUwMDA5LCAweDMyNzAwMEEsIDB4MzMxMDAwOSwgMHgzM0EwMDA5LCAweDM0NDAwMDksDQotCSAg MHgzNEQwMDA5LCAweDM1NjAwMDksIDB4MzVGMDAwOSwgMHgzNjgwMDA4LCAweDM3MTAwMDgsIDB4 Mzc5MDAwOSwNCi0JICAweDM4MjAwMDgsIDB4MzhBMDAwOCwgMHgzOTMwMDA4LCAweDM5QjAwMDgs IDB4M0EzMDAwOCwgMHgzQUIwMDA4LA0KLQkgIDB4M0IzMDAwOCwgMHgzQkIwMDA4LCAweDNDMzAw MDgsIDB4M0NCMDAwNywgMHgzRDIwMDA4LCAweDNEQTAwMDcsDQotCSAgMHgzRTIwMDA3LCAweDNF OTAwMDcsIDB4M0YwMDAwOCwgMHgzRjgwMDA3IH0sDQotfTsNCi0NCi0jZGVmaW5lIElTQ19JU19G T1JNQVRfUkFXKG1idXNfY29kZSkgXA0KLQkoKChtYnVzX2NvZGUpICYgMHhmMDAwKSA9PSAweDMw MDApDQotDQotc3RhdGljIHVuc2lnbmVkIGludCBkZWJ1ZzsNCi1tb2R1bGVfcGFyYW0oZGVidWcs IGludCwgMDY0NCk7DQotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgImRlYnVnIGxldmVsICgwLTIp Iik7DQotDQotc3RhdGljIHVuc2lnbmVkIGludCBzZW5zb3JfcHJlZmVycmVkID0gMTsNCi1tb2R1 bGVfcGFyYW0oc2Vuc29yX3ByZWZlcnJlZCwgdWludCwgMDY0NCk7DQotTU9EVUxFX1BBUk1fREVT QyhzZW5zb3JfcHJlZmVycmVkLA0KLQkJICJTZW5zb3IgaXMgcHJlZmVycmVkIHRvIG91dHB1dCB0 aGUgc3BlY2lmaWVkIGZvcm1hdCAoMS1vbiAwLW9mZiksIGRlZmF1bHQgMSIpOw0KLQ0KLXN0YXRp YyBpbmxpbmUgdm9pZCBpc2NfdXBkYXRlX2F3Yl9jdHJscyhzdHJ1Y3QgaXNjX2RldmljZSAqaXNj KQ0KLXsNCi0Jc3RydWN0IGlzY19jdHJscyAqY3RybHMgPSAmaXNjLT5jdHJsczsNCi0NCi0JcmVn bWFwX3dyaXRlKGlzYy0+cmVnbWFwLCBJU0NfV0JfT19SR1IsDQotCQkgICAgIChJU0NfV0JfT19a RVJPX1ZBTCAtIChjdHJscy0+b2Zmc2V0W0lTQ19ISVNfQ0ZHX01PREVfUl0pKSB8DQotCQkgICAg ICgoSVNDX1dCX09fWkVST19WQUwgLSBjdHJscy0+b2Zmc2V0W0lTQ19ISVNfQ0ZHX01PREVfR1Jd KSA8PCAxNikpOw0KLQlyZWdtYXBfd3JpdGUoaXNjLT5yZWdtYXAsIElTQ19XQl9PX0JHQiwNCi0J CSAgICAgKElTQ19XQl9PX1pFUk9fVkFMIC0gKGN0cmxzLT5vZmZzZXRbSVNDX0hJU19DRkdfTU9E RV9CXSkpIHwNCi0JCSAgICAgKChJU0NfV0JfT19aRVJPX1ZBTCAtIGN0cmxzLT5vZmZzZXRbSVND X0hJU19DRkdfTU9ERV9HQl0pIDw8IDE2KSk7DQotCXJlZ21hcF93cml0ZShpc2MtPnJlZ21hcCwg SVNDX1dCX0dfUkdSLA0KLQkJICAgICBjdHJscy0+Z2FpbltJU0NfSElTX0NGR19NT0RFX1JdIHwN Ci0JCSAgICAgKGN0cmxzLT5nYWluW0lTQ19ISVNfQ0ZHX01PREVfR1JdIDw8IDE2KSk7DQotCXJl Z21hcF93cml0ZShpc2MtPnJlZ21hcCwgSVNDX1dCX0dfQkdCLA0KLQkJICAgICBjdHJscy0+Z2Fp bltJU0NfSElTX0NGR19NT0RFX0JdIHwNCi0JCSAgICAgKGN0cmxzLT5nYWluW0lTQ19ISVNfQ0ZH X01PREVfR0JdIDw8IDE2KSk7DQotfQ0KLQ0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpc2NfcmVzZXRf YXdiX2N0cmxzKHN0cnVjdCBpc2NfZGV2aWNlICppc2MpDQotew0KLQlpbnQgYzsNCi0NCi0JZm9y IChjID0gSVNDX0hJU19DRkdfTU9ERV9HUjsgYyA8PSBJU0NfSElTX0NGR19NT0RFX0I7IGMrKykg ew0KLQkJLyogZ2FpbnMgaGF2ZSBhIGZpeGVkIHBvaW50IGF0IDkgZGVjaW1hbHMgKi8NCi0JCWlz Yy0+Y3RybHMuZ2FpbltjXSA9IDEgPDwgOTsNCi0JCS8qIG9mZnNldHMgYXJlIGluIDIncyBjb21w bGVtZW50cywgdGhlIHZhbHVlDQotCQkgKiB3aWxsIGJlIHN1YnN0cmFjdGVkIGZyb20gSVNDX1dC X09fWkVST19WQUwgdG8gb2J0YWluDQotCQkgKiAyJ3MgY29tcGxlbWVudCBvZiBhIHZhbHVlIGJl dHdlZW4gMCBhbmQNCi0JCSAqIElTQ19XQl9PX1pFUk9fVkFMID4+IDENCi0JCSAqLw0KLQkJaXNj LT5jdHJscy5vZmZzZXRbY10gPSBJU0NfV0JfT19aRVJPX1ZBTDsNCi0JfQ0KLX0NCi0NCi1zdGF0 aWMgaW50IGlzY193YWl0X2Nsa19zdGFibGUoc3RydWN0IGNsa19odyAqaHcpDQotew0KLQlzdHJ1 Y3QgaXNjX2NsayAqaXNjX2NsayA9IHRvX2lzY19jbGsoaHcpOw0KLQlzdHJ1Y3QgcmVnbWFwICpy ZWdtYXAgPSBpc2NfY2xrLT5yZWdtYXA7DQotCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZp ZXMgKyB1c2Vjc190b19qaWZmaWVzKDEwMDApOw0KLQl1bnNpZ25lZCBpbnQgc3RhdHVzOw0KLQ0K LQl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpIHsNCi0JCXJlZ21hcF9yZWFk KHJlZ21hcCwgSVNDX0NMS1NSLCAmc3RhdHVzKTsNCi0JCWlmICghKHN0YXR1cyAmIElTQ19DTEtT Ul9TSVApKQ0KLQkJCXJldHVybiAwOw0KLQ0KLQkJdXNsZWVwX3JhbmdlKDEwLCAyNTApOw0KLQl9 DQotDQotCXJldHVybiAtRVRJTUVET1VUOw0KLX0NCi0NCi1zdGF0aWMgaW50IGlzY19jbGtfcHJl cGFyZShzdHJ1Y3QgY2xrX2h3ICpodykNCi17DQotCXN0cnVjdCBpc2NfY2xrICppc2NfY2xrID0g dG9faXNjX2Nsayhodyk7DQotDQotCWlmIChpc2NfY2xrLT5pZCA9PSBJU0NfSVNQQ0spDQotCQlw bV9ydW50aW1lX2dldF9zeW5jKGlzY19jbGstPmRldik7DQotDQotCXJldHVybiBpc2Nfd2FpdF9j bGtfc3RhYmxlKGh3KTsNCi19DQotDQotc3RhdGljIHZvaWQgaXNjX2Nsa191bnByZXBhcmUoc3Ry dWN0IGNsa19odyAqaHcpDQotew0KLQlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsayA9IHRvX2lzY19j bGsoaHcpOw0KLQ0KLQlpc2Nfd2FpdF9jbGtfc3RhYmxlKGh3KTsNCi0NCi0JaWYgKGlzY19jbGst PmlkID09IElTQ19JU1BDSykNCi0JCXBtX3J1bnRpbWVfcHV0X3N5bmMoaXNjX2Nsay0+ZGV2KTsN Ci19DQotDQotc3RhdGljIGludCBpc2NfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrX2h3ICpodykNCi17 DQotCXN0cnVjdCBpc2NfY2xrICppc2NfY2xrID0gdG9faXNjX2Nsayhodyk7DQotCXUzMiBpZCA9 IGlzY19jbGstPmlkOw0KLQlzdHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBpc2NfY2xrLT5yZWdtYXA7 DQotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQotCXVuc2lnbmVkIGludCBzdGF0dXM7DQotDQotCWRl dl9kYmcoaXNjX2Nsay0+ZGV2LCAiSVNDIENMSzogJXMsIGRpdiA9ICVkLCBwYXJlbnQgaWQgPSAl ZFxuIiwNCi0JCV9fZnVuY19fLCBpc2NfY2xrLT5kaXYsIGlzY19jbGstPnBhcmVudF9pZCk7DQot DQotCXNwaW5fbG9ja19pcnFzYXZlKCZpc2NfY2xrLT5sb2NrLCBmbGFncyk7DQotCXJlZ21hcF91 cGRhdGVfYml0cyhyZWdtYXAsIElTQ19DTEtDRkcsDQotCQkJICAgSVNDX0NMS0NGR19ESVZfTUFT SyhpZCkgfCBJU0NfQ0xLQ0ZHX1NFTF9NQVNLKGlkKSwNCi0JCQkgICAoaXNjX2Nsay0+ZGl2IDw8 IElTQ19DTEtDRkdfRElWX1NISUZUKGlkKSkgfA0KLQkJCSAgIChpc2NfY2xrLT5wYXJlbnRfaWQg PDwgSVNDX0NMS0NGR19TRUxfU0hJRlQoaWQpKSk7DQotDQotCXJlZ21hcF93cml0ZShyZWdtYXAs IElTQ19DTEtFTiwgSVNDX0NMSyhpZCkpOw0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc2Nf Y2xrLT5sb2NrLCBmbGFncyk7DQotDQotCXJlZ21hcF9yZWFkKHJlZ21hcCwgSVNDX0NMS1NSLCAm c3RhdHVzKTsNCi0JaWYgKHN0YXR1cyAmIElTQ19DTEsoaWQpKQ0KLQkJcmV0dXJuIDA7DQotCWVs c2UNCi0JCXJldHVybiAtRUlOVkFMOw0KLX0NCi0NCi1zdGF0aWMgdm9pZCBpc2NfY2xrX2Rpc2Fi bGUoc3RydWN0IGNsa19odyAqaHcpDQotew0KLQlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsayA9IHRv X2lzY19jbGsoaHcpOw0KLQl1MzIgaWQgPSBpc2NfY2xrLT5pZDsNCi0JdW5zaWduZWQgbG9uZyBm bGFnczsNCi0NCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlzY19jbGstPmxvY2ssIGZsYWdzKTsNCi0J cmVnbWFwX3dyaXRlKGlzY19jbGstPnJlZ21hcCwgSVNDX0NMS0RJUywgSVNDX0NMSyhpZCkpOw0K LQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc2NfY2xrLT5sb2NrLCBmbGFncyk7DQotfQ0KLQ0K LXN0YXRpYyBpbnQgaXNjX2Nsa19pc19lbmFibGVkKHN0cnVjdCBjbGtfaHcgKmh3KQ0KLXsNCi0J c3RydWN0IGlzY19jbGsgKmlzY19jbGsgPSB0b19pc2NfY2xrKGh3KTsNCi0JdTMyIHN0YXR1czsN Ci0NCi0JaWYgKGlzY19jbGstPmlkID09IElTQ19JU1BDSykNCi0JCXBtX3J1bnRpbWVfZ2V0X3N5 bmMoaXNjX2Nsay0+ZGV2KTsNCi0NCi0JcmVnbWFwX3JlYWQoaXNjX2Nsay0+cmVnbWFwLCBJU0Nf Q0xLU1IsICZzdGF0dXMpOw0KLQ0KLQlpZiAoaXNjX2Nsay0+aWQgPT0gSVNDX0lTUENLKQ0KLQkJ cG1fcnVudGltZV9wdXRfc3luYyhpc2NfY2xrLT5kZXYpOw0KLQ0KLQlyZXR1cm4gc3RhdHVzICYg SVNDX0NMSyhpc2NfY2xrLT5pZCkgPyAxIDogMDsNCi19DQotDQotc3RhdGljIHVuc2lnbmVkIGxv bmcNCi1pc2NfY2xrX3JlY2FsY19yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25n IHBhcmVudF9yYXRlKQ0KLXsNCi0Jc3RydWN0IGlzY19jbGsgKmlzY19jbGsgPSB0b19pc2NfY2xr KGh3KTsNCi0NCi0JcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKHBhcmVudF9yYXRlLCBpc2NfY2xr LT5kaXYgKyAxKTsNCi19DQotDQotc3RhdGljIGludCBpc2NfY2xrX2RldGVybWluZV9yYXRlKHN0 cnVjdCBjbGtfaHcgKmh3LA0KLQkJCQkgICBzdHJ1Y3QgY2xrX3JhdGVfcmVxdWVzdCAqcmVxKQ0K LXsNCi0Jc3RydWN0IGlzY19jbGsgKmlzY19jbGsgPSB0b19pc2NfY2xrKGh3KTsNCi0JbG9uZyBi ZXN0X3JhdGUgPSAtRUlOVkFMOw0KLQlpbnQgYmVzdF9kaWZmID0gLTE7DQotCXVuc2lnbmVkIGlu dCBpLCBkaXY7DQotDQotCWZvciAoaSA9IDA7IGkgPCBjbGtfaHdfZ2V0X251bV9wYXJlbnRzKGh3 KTsgaSsrKSB7DQotCQlzdHJ1Y3QgY2xrX2h3ICpwYXJlbnQ7DQotCQl1bnNpZ25lZCBsb25nIHBh cmVudF9yYXRlOw0KLQ0KLQkJcGFyZW50ID0gY2xrX2h3X2dldF9wYXJlbnRfYnlfaW5kZXgoaHcs IGkpOw0KLQkJaWYgKCFwYXJlbnQpDQotCQkJY29udGludWU7DQotDQotCQlwYXJlbnRfcmF0ZSA9 IGNsa19od19nZXRfcmF0ZShwYXJlbnQpOw0KLQkJaWYgKCFwYXJlbnRfcmF0ZSkNCi0JCQljb250 aW51ZTsNCi0NCi0JCWZvciAoZGl2ID0gMTsgZGl2IDwgSVNDX0NMS19NQVhfRElWICsgMjsgZGl2 KyspIHsNCi0JCQl1bnNpZ25lZCBsb25nIHJhdGU7DQotCQkJaW50IGRpZmY7DQotDQotCQkJcmF0 ZSA9IERJVl9ST1VORF9DTE9TRVNUKHBhcmVudF9yYXRlLCBkaXYpOw0KLQkJCWRpZmYgPSBhYnMo cmVxLT5yYXRlIC0gcmF0ZSk7DQotDQotCQkJaWYgKGJlc3RfZGlmZiA8IDAgfHwgYmVzdF9kaWZm ID4gZGlmZikgew0KLQkJCQliZXN0X3JhdGUgPSByYXRlOw0KLQkJCQliZXN0X2RpZmYgPSBkaWZm Ow0KLQkJCQlyZXEtPmJlc3RfcGFyZW50X3JhdGUgPSBwYXJlbnRfcmF0ZTsNCi0JCQkJcmVxLT5i ZXN0X3BhcmVudF9odyA9IHBhcmVudDsNCi0JCQl9DQotDQotCQkJaWYgKCFiZXN0X2RpZmYgfHwg cmF0ZSA8IHJlcS0+cmF0ZSkNCi0JCQkJYnJlYWs7DQotCQl9DQotDQotCQlpZiAoIWJlc3RfZGlm ZikNCi0JCQlicmVhazsNCi0JfQ0KLQ0KLQlkZXZfZGJnKGlzY19jbGstPmRldiwNCi0JCSJJU0Mg Q0xLOiAlcywgYmVzdF9yYXRlID0gJWxkLCBwYXJlbnQgY2xrOiAlcyBAICVsZFxuIiwNCi0JCV9f ZnVuY19fLCBiZXN0X3JhdGUsDQotCQlfX2Nsa19nZXRfbmFtZSgocmVxLT5iZXN0X3BhcmVudF9o dyktPmNsayksDQotCQlyZXEtPmJlc3RfcGFyZW50X3JhdGUpOw0KLQ0KLQlpZiAoYmVzdF9yYXRl IDwgMCkNCi0JCXJldHVybiBiZXN0X3JhdGU7DQotDQotCXJlcS0+cmF0ZSA9IGJlc3RfcmF0ZTsN Ci0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLXN0YXRpYyBpbnQgaXNjX2Nsa19zZXRfcGFyZW50KHN0 cnVjdCBjbGtfaHcgKmh3LCB1OCBpbmRleCkNCi17DQotCXN0cnVjdCBpc2NfY2xrICppc2NfY2xr ID0gdG9faXNjX2Nsayhodyk7DQotDQotCWlmIChpbmRleCA+PSBjbGtfaHdfZ2V0X251bV9wYXJl bnRzKGh3KSkNCi0JCXJldHVybiAtRUlOVkFMOw0KLQ0KLQlpc2NfY2xrLT5wYXJlbnRfaWQgPSBp bmRleDsNCi0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLXN0YXRpYyB1OCBpc2NfY2xrX2dldF9wYXJl bnQoc3RydWN0IGNsa19odyAqaHcpDQotew0KLQlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsayA9IHRv X2lzY19jbGsoaHcpOw0KLQ0KLQlyZXR1cm4gaXNjX2Nsay0+cGFyZW50X2lkOw0KLX0NCi0NCi1z dGF0aWMgaW50IGlzY19jbGtfc2V0X3JhdGUoc3RydWN0IGNsa19odyAqaHcsDQotCQkJICAgICB1 bnNpZ25lZCBsb25nIHJhdGUsDQotCQkJICAgICB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQ0K LXsNCi0Jc3RydWN0IGlzY19jbGsgKmlzY19jbGsgPSB0b19pc2NfY2xrKGh3KTsNCi0JdTMyIGRp djsNCi0NCi0JaWYgKCFyYXRlKQ0KLQkJcmV0dXJuIC1FSU5WQUw7DQotDQotCWRpdiA9IERJVl9S T1VORF9DTE9TRVNUKHBhcmVudF9yYXRlLCByYXRlKTsNCi0JaWYgKGRpdiA+IChJU0NfQ0xLX01B WF9ESVYgKyAxKSB8fCAhZGl2KQ0KLQkJcmV0dXJuIC1FSU5WQUw7DQotDQotCWlzY19jbGstPmRp diA9IGRpdiAtIDE7DQotDQotCXJldHVybiAwOw0KLX0NCi0NCi1zdGF0aWMgY29uc3Qgc3RydWN0 IGNsa19vcHMgaXNjX2Nsa19vcHMgPSB7DQotCS5wcmVwYXJlCT0gaXNjX2Nsa19wcmVwYXJlLA0K LQkudW5wcmVwYXJlCT0gaXNjX2Nsa191bnByZXBhcmUsDQotCS5lbmFibGUJCT0gaXNjX2Nsa19l bmFibGUsDQotCS5kaXNhYmxlCT0gaXNjX2Nsa19kaXNhYmxlLA0KLQkuaXNfZW5hYmxlZAk9IGlz Y19jbGtfaXNfZW5hYmxlZCwNCi0JLnJlY2FsY19yYXRlCT0gaXNjX2Nsa19yZWNhbGNfcmF0ZSwN Ci0JLmRldGVybWluZV9yYXRlCT0gaXNjX2Nsa19kZXRlcm1pbmVfcmF0ZSwNCi0JLnNldF9wYXJl bnQJPSBpc2NfY2xrX3NldF9wYXJlbnQsDQotCS5nZXRfcGFyZW50CT0gaXNjX2Nsa19nZXRfcGFy ZW50LA0KLQkuc2V0X3JhdGUJPSBpc2NfY2xrX3NldF9yYXRlLA0KLX07DQotDQotc3RhdGljIGlu dCBpc2NfY2xrX3JlZ2lzdGVyKHN0cnVjdCBpc2NfZGV2aWNlICppc2MsIHVuc2lnbmVkIGludCBp ZCkNCi17DQotCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0KLQlzdHJ1Y3Qg ZGV2aWNlX25vZGUgKm5wID0gaXNjLT5kZXYtPm9mX25vZGU7DQotCXN0cnVjdCBpc2NfY2xrICpp c2NfY2xrOw0KLQlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0Ow0KLQljb25zdCBjaGFyICpjbGtf bmFtZSA9IG5wLT5uYW1lOw0KLQljb25zdCBjaGFyICpwYXJlbnRfbmFtZXNbM107DQotCWludCBu dW1fcGFyZW50czsNCi0NCi0JbnVtX3BhcmVudHMgPSBvZl9jbGtfZ2V0X3BhcmVudF9jb3VudChu cCk7DQotCWlmIChudW1fcGFyZW50cyA8IDEgfHwgbnVtX3BhcmVudHMgPiAzKQ0KLQkJcmV0dXJu IC1FSU5WQUw7DQotDQotCWlmIChudW1fcGFyZW50cyA+IDIgJiYgaWQgPT0gSVNDX0lTUENLKQ0K LQkJbnVtX3BhcmVudHMgPSAyOw0KLQ0KLQlvZl9jbGtfcGFyZW50X2ZpbGwobnAsIHBhcmVudF9u YW1lcywgbnVtX3BhcmVudHMpOw0KLQ0KLQlpZiAoaWQgPT0gSVNDX01DSykNCi0JCW9mX3Byb3Bl cnR5X3JlYWRfc3RyaW5nKG5wLCAiY2xvY2stb3V0cHV0LW5hbWVzIiwgJmNsa19uYW1lKTsNCi0J ZWxzZQ0KLQkJY2xrX25hbWUgPSAiaXNjLWlzcGNrIjsNCi0NCi0JaW5pdC5wYXJlbnRfbmFtZXMJ PSBwYXJlbnRfbmFtZXM7DQotCWluaXQubnVtX3BhcmVudHMJPSBudW1fcGFyZW50czsNCi0JaW5p dC5uYW1lCQk9IGNsa19uYW1lOw0KLQlpbml0Lm9wcwkJPSAmaXNjX2Nsa19vcHM7DQotCWluaXQu ZmxhZ3MJCT0gQ0xLX1NFVF9SQVRFX0dBVEUgfCBDTEtfU0VUX1BBUkVOVF9HQVRFOw0KLQ0KLQlp c2NfY2xrID0gJmlzYy0+aXNjX2Nsa3NbaWRdOw0KLQlpc2NfY2xrLT5ody5pbml0CT0gJmluaXQ7 DQotCWlzY19jbGstPnJlZ21hcAkJPSByZWdtYXA7DQotCWlzY19jbGstPmlkCQk9IGlkOw0KLQlp c2NfY2xrLT5kZXYJCT0gaXNjLT5kZXY7DQotCXNwaW5fbG9ja19pbml0KCZpc2NfY2xrLT5sb2Nr KTsNCi0NCi0JaXNjX2Nsay0+Y2xrID0gY2xrX3JlZ2lzdGVyKGlzYy0+ZGV2LCAmaXNjX2Nsay0+ aHcpOw0KLQlpZiAoSVNfRVJSKGlzY19jbGstPmNsaykpIHsNCi0JCWRldl9lcnIoaXNjLT5kZXYs ICIlczogY2xvY2sgcmVnaXN0ZXIgZmFpbFxuIiwgY2xrX25hbWUpOw0KLQkJcmV0dXJuIFBUUl9F UlIoaXNjX2Nsay0+Y2xrKTsNCi0JfSBlbHNlIGlmIChpZCA9PSBJU0NfTUNLKQ0KLQkJb2ZfY2xr X2FkZF9wcm92aWRlcihucCwgb2ZfY2xrX3NyY19zaW1wbGVfZ2V0LCBpc2NfY2xrLT5jbGspOw0K LQ0KLQlyZXR1cm4gMDsNCi19DQotDQotc3RhdGljIGludCBpc2NfY2xrX2luaXQoc3RydWN0IGlz Y19kZXZpY2UgKmlzYykNCi17DQotCXVuc2lnbmVkIGludCBpOw0KLQlpbnQgcmV0Ow0KLQ0KLQlm b3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpc2MtPmlzY19jbGtzKTsgaSsrKQ0KLQkJaXNjLT5p c2NfY2xrc1tpXS5jbGsgPSBFUlJfUFRSKC1FSU5WQUwpOw0KLQ0KLQlmb3IgKGkgPSAwOyBpIDwg QVJSQVlfU0laRShpc2MtPmlzY19jbGtzKTsgaSsrKSB7DQotCQlyZXQgPSBpc2NfY2xrX3JlZ2lz dGVyKGlzYywgaSk7DQotCQlpZiAocmV0KQ0KLQkJCXJldHVybiByZXQ7DQotCX0NCi0NCi0JcmV0 dXJuIDA7DQotfQ0KLQ0KLXN0YXRpYyB2b2lkIGlzY19jbGtfY2xlYW51cChzdHJ1Y3QgaXNjX2Rl dmljZSAqaXNjKQ0KLXsNCi0JdW5zaWduZWQgaW50IGk7DQotDQotCW9mX2Nsa19kZWxfcHJvdmlk ZXIoaXNjLT5kZXYtPm9mX25vZGUpOw0KLQ0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShp c2MtPmlzY19jbGtzKTsgaSsrKSB7DQotCQlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsayA9ICZpc2Mt PmlzY19jbGtzW2ldOw0KLQ0KLQkJaWYgKCFJU19FUlIoaXNjX2Nsay0+Y2xrKSkNCi0JCQljbGtf dW5yZWdpc3Rlcihpc2NfY2xrLT5jbGspOw0KLQl9DQotfQ0KLQ0KLXN0YXRpYyBpbnQgaXNjX3F1 ZXVlX3NldHVwKHN0cnVjdCB2YjJfcXVldWUgKnZxLA0KLQkJCSAgICB1bnNpZ25lZCBpbnQgKm5i dWZmZXJzLCB1bnNpZ25lZCBpbnQgKm5wbGFuZXMsDQotCQkJICAgIHVuc2lnbmVkIGludCBzaXpl c1tdLCBzdHJ1Y3QgZGV2aWNlICphbGxvY19kZXZzW10pDQotew0KLQlzdHJ1Y3QgaXNjX2Rldmlj ZSAqaXNjID0gdmIyX2dldF9kcnZfcHJpdih2cSk7DQotCXVuc2lnbmVkIGludCBzaXplID0gaXNj LT5mbXQuZm10LnBpeC5zaXplaW1hZ2U7DQotDQotCWlmICgqbnBsYW5lcykNCi0JCXJldHVybiBz aXplc1swXSA8IHNpemUgPyAtRUlOVkFMIDogMDsNCi0NCi0JKm5wbGFuZXMgPSAxOw0KLQlzaXpl c1swXSA9IHNpemU7DQotDQotCXJldHVybiAwOw0KLX0NCi0NCi1zdGF0aWMgaW50IGlzY19idWZm ZXJfcHJlcGFyZShzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIpDQotew0KLQlzdHJ1Y3QgdmIyX3Y0bDJf YnVmZmVyICp2YnVmID0gdG9fdmIyX3Y0bDJfYnVmZmVyKHZiKTsNCi0Jc3RydWN0IGlzY19kZXZp Y2UgKmlzYyA9IHZiMl9nZXRfZHJ2X3ByaXYodmItPnZiMl9xdWV1ZSk7DQotCXVuc2lnbmVkIGxv bmcgc2l6ZSA9IGlzYy0+Zm10LmZtdC5waXguc2l6ZWltYWdlOw0KLQ0KLQlpZiAodmIyX3BsYW5l X3NpemUodmIsIDApIDwgc2l6ZSkgew0KLQkJdjRsMl9lcnIoJmlzYy0+djRsMl9kZXYsICJidWZm ZXIgdG9vIHNtYWxsICglbHUgPCAlbHUpXG4iLA0KLQkJCSB2YjJfcGxhbmVfc2l6ZSh2YiwgMCks IHNpemUpOw0KLQkJcmV0dXJuIC1FSU5WQUw7DQotCX0NCi0NCi0JdmIyX3NldF9wbGFuZV9wYXls b2FkKHZiLCAwLCBzaXplKTsNCi0NCi0JdmJ1Zi0+ZmllbGQgPSBpc2MtPmZtdC5mbXQucGl4LmZp ZWxkOw0KLQ0KLQlyZXR1cm4gMDsNCi19DQotDQotc3RhdGljIHZvaWQgaXNjX3N0YXJ0X2RtYShz dHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KLXsNCi0Jc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNj LT5yZWdtYXA7DQotCXUzMiBzaXplaW1hZ2UgPSBpc2MtPmZtdC5mbXQucGl4LnNpemVpbWFnZTsN Ci0JdTMyIGRjdHJsX2R2aWV3Ow0KLQlkbWFfYWRkcl90IGFkZHIwOw0KLQl1MzIgaCwgdzsNCi0N Ci0JaCA9IGlzYy0+Zm10LmZtdC5waXguaGVpZ2h0Ow0KLQl3ID0gaXNjLT5mbXQuZm10LnBpeC53 aWR0aDsNCi0NCi0JLyoNCi0JICogSW4gY2FzZSB0aGUgc2Vuc29yIGlzIG5vdCBSQVcsIGl0IHdp bGwgb3V0cHV0IGEgcGl4ZWwgKDEyLTE2IGJpdHMpDQotCSAqIHdpdGggdHdvIHNhbXBsZXMgb24g dGhlIElTQyBEYXRhIGJ1cyAod2hpY2ggaXMgOC0xMikNCi0JICogSVNDIHdpbGwgY291bnQgZWFj aCBzYW1wbGUsIHNvLCB3ZSBuZWVkIHRvIG11bHRpcGx5IHRoZXNlIHZhbHVlcw0KLQkgKiBieSB0 d28sIHRvIGdldCB0aGUgcmVhbCBudW1iZXIgb2Ygc2FtcGxlcyBmb3IgdGhlIHJlcXVpcmVkIHBp eGVscy4NCi0JICovDQotCWlmICghSVNDX0lTX0ZPUk1BVF9SQVcoaXNjLT5jb25maWcuc2RfZm9y bWF0LT5tYnVzX2NvZGUpKSB7DQotCQloIDw8PSAxOw0KLQkJdyA8PD0gMTsNCi0JfQ0KLQ0KLQkv Kg0KLQkgKiBXZSBsaW1pdCB0aGUgY29sdW1uL3JvdyBjb3VudCB0aGF0IHRoZSBJU0Mgd2lsbCBv dXRwdXQgYWNjb3JkaW5nDQotCSAqIHRvIHRoZSBjb25maWd1cmVkIHJlc29sdXRpb24gdGhhdCB3 ZSB3YW50Lg0KLQkgKiBUaGlzIHdpbGwgYXZvaWQgdGhlIHNpdHVhdGlvbiB3aGVyZSB0aGUgc2Vu c29yIGlzIG1pc2NvbmZpZ3VyZWQsDQotCSAqIHNlbmRpbmcgbW9yZSBkYXRhLCBhbmQgdGhlIElT QyB3aWxsIGp1c3QgdGFrZSBpdCBhbmQgRE1BIHRvIG1lbW9yeSwNCi0JICogY2F1c2luZyBjb3Jy dXB0aW9uLg0KLQkgKi8NCi0JcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX1BGRV9DRkcxLA0KLQkJ ICAgICAoSVNDX1BGRV9DRkcxX0NPTE1JTigwKSAmIElTQ19QRkVfQ0ZHMV9DT0xNSU5fTUFTSykg fA0KLQkJICAgICAoSVNDX1BGRV9DRkcxX0NPTE1BWCh3IC0gMSkgJiBJU0NfUEZFX0NGRzFfQ09M TUFYX01BU0spKTsNCi0NCi0JcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX1BGRV9DRkcyLA0KLQkJ ICAgICAoSVNDX1BGRV9DRkcyX1JPV01JTigwKSAmIElTQ19QRkVfQ0ZHMl9ST1dNSU5fTUFTSykg fA0KLQkJICAgICAoSVNDX1BGRV9DRkcyX1JPV01BWChoIC0gMSkgJiBJU0NfUEZFX0NGRzJfUk9X TUFYX01BU0spKTsNCi0NCi0JcmVnbWFwX3VwZGF0ZV9iaXRzKHJlZ21hcCwgSVNDX1BGRV9DRkcw LA0KLQkJCSAgIElTQ19QRkVfQ0ZHMF9DT0xFTiB8IElTQ19QRkVfQ0ZHMF9ST1dFTiwNCi0JCQkg ICBJU0NfUEZFX0NGRzBfQ09MRU4gfCBJU0NfUEZFX0NGRzBfUk9XRU4pOw0KLQ0KLQlhZGRyMCA9 IHZiMl9kbWFfY29udGlnX3BsYW5lX2RtYV9hZGRyKCZpc2MtPmN1cl9mcm0tPnZiLnZiMl9idWYs IDApOw0KLQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfREFEMCwgYWRkcjApOw0KLQ0KLQlzd2l0 Y2ggKGlzYy0+Y29uZmlnLmZvdXJjYykgew0KLQljYXNlIFY0TDJfUElYX0ZNVF9ZVVY0MjA6DQot CQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfREFEMSwgYWRkcjAgKyAoc2l6ZWltYWdlICogMikg LyAzKTsNCi0JCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19EQUQyLCBhZGRyMCArIChzaXplaW1h Z2UgKiA1KSAvIDYpOw0KLQkJYnJlYWs7DQotCWNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyMlA6DQot CQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfREFEMSwgYWRkcjAgKyBzaXplaW1hZ2UgLyAyKTsN Ci0JCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19EQUQyLCBhZGRyMCArIChzaXplaW1hZ2UgKiAz KSAvIDQpOw0KLQkJYnJlYWs7DQotCWRlZmF1bHQ6DQotCQlicmVhazsNCi0JfQ0KLQ0KLQlkY3Ry bF9kdmlldyA9IGlzYy0+Y29uZmlnLmRjdHJsX2R2aWV3Ow0KLQ0KLQlyZWdtYXBfd3JpdGUocmVn bWFwLCBJU0NfRENUUkwsIGRjdHJsX2R2aWV3IHwgSVNDX0RDVFJMX0lFX0lTKTsNCi0Jc3Bpbl9s b2NrKCZpc2MtPmF3Yl9sb2NrKTsNCi0JcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0NUUkxFTiwg SVNDX0NUUkxfQ0FQVFVSRSk7DQotCXNwaW5fdW5sb2NrKCZpc2MtPmF3Yl9sb2NrKTsNCi19DQot DQotc3RhdGljIHZvaWQgaXNjX3NldF9waXBlbGluZShzdHJ1Y3QgaXNjX2RldmljZSAqaXNjLCB1 MzIgcGlwZWxpbmUpDQotew0KLQlzdHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBpc2MtPnJlZ21hcDsN Ci0Jc3RydWN0IGlzY19jdHJscyAqY3RybHMgPSAmaXNjLT5jdHJsczsNCi0JdTMyIHZhbCwgYmF5 X2NmZzsNCi0JY29uc3QgdTMyICpnYW1tYTsNCi0JdW5zaWduZWQgaW50IGk7DQotDQotCS8qIFdC LS0+Q0ZBLS0+Q0MtLT5HQU0tLT5DU0MtLT5DQkMtLT5TVUI0MjItLT5TVUI0MjAgKi8NCi0JZm9y IChpID0gMDsgaSA8IElTQ19QSVBFX0xJTkVfTk9ERV9OVU07IGkrKykgew0KLQkJdmFsID0gcGlw ZWxpbmUgJiBCSVQoaSkgPyAxIDogMDsNCi0JCXJlZ21hcF9maWVsZF93cml0ZShpc2MtPnBpcGVs aW5lW2ldLCB2YWwpOw0KLQl9DQotDQotCWlmICghcGlwZWxpbmUpDQotCQlyZXR1cm47DQotDQot CWJheV9jZmcgPSBpc2MtPmNvbmZpZy5zZF9mb3JtYXQtPmNmYV9iYXljZmc7DQotDQotCWlmIChj dHJscy0+YXdiID09IElTQ19XQl9OT05FKQ0KLQkJaXNjX3Jlc2V0X2F3Yl9jdHJscyhpc2MpOw0K LQ0KLQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfV0JfQ0ZHLCBiYXlfY2ZnKTsNCi0JaXNjX3Vw ZGF0ZV9hd2JfY3RybHMoaXNjKTsNCi0NCi0JcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0NGQV9D RkcsIGJheV9jZmcgfCBJU0NfQ0ZBX0NGR19FSVRQT0wpOw0KLQ0KLQlnYW1tYSA9ICZpc2NfZ2Ft bWFfdGFibGVbY3RybHMtPmdhbW1hX2luZGV4XVswXTsNCi0JcmVnbWFwX2J1bGtfd3JpdGUocmVn bWFwLCBJU0NfR0FNX0JFTlRSWSwgZ2FtbWEsIEdBTU1BX0VOVFJJRVMpOw0KLQlyZWdtYXBfYnVs a193cml0ZShyZWdtYXAsIElTQ19HQU1fR0VOVFJZLCBnYW1tYSwgR0FNTUFfRU5UUklFUyk7DQot CXJlZ21hcF9idWxrX3dyaXRlKHJlZ21hcCwgSVNDX0dBTV9SRU5UUlksIGdhbW1hLCBHQU1NQV9F TlRSSUVTKTsNCi0NCi0JLyogQ29udmVydCBSR0IgdG8gWVVWICovDQotCXJlZ21hcF93cml0ZShy ZWdtYXAsIElTQ19DU0NfWVJfWUcsIDB4NDIgfCAoMHg4MSA8PCAxNikpOw0KLQlyZWdtYXBfd3Jp dGUocmVnbWFwLCBJU0NfQ1NDX1lCX09ZLCAweDE5IHwgKDB4MTAgPDwgMTYpKTsNCi0JcmVnbWFw X3dyaXRlKHJlZ21hcCwgSVNDX0NTQ19DQlJfQ0JHLCAweEZEQSB8ICgweEZCNiA8PCAxNikpOw0K LQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfQ1NDX0NCQl9PQ0IsIDB4NzAgfCAoMHg4MCA8PCAx NikpOw0KLQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfQ1NDX0NSUl9DUkcsIDB4NzAgfCAoMHhG QTIgPDwgMTYpKTsNCi0JcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0NTQ19DUkJfT0NSLCAweEZF RSB8ICgweDgwIDw8IDE2KSk7DQotDQotCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DQkNfQlJJ R0hULCBjdHJscy0+YnJpZ2h0bmVzcyk7DQotCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DQkNf Q09OVFJBU1QsIGN0cmxzLT5jb250cmFzdCk7DQotfQ0KLQ0KLXN0YXRpYyBpbnQgaXNjX3VwZGF0 ZV9wcm9maWxlKHN0cnVjdCBpc2NfZGV2aWNlICppc2MpDQotew0KLQlzdHJ1Y3QgcmVnbWFwICpy ZWdtYXAgPSBpc2MtPnJlZ21hcDsNCi0JdTMyIHNyOw0KLQlpbnQgY291bnRlciA9IDEwMDsNCi0N Ci0JcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0NUUkxFTiwgSVNDX0NUUkxfVVBQUk8pOw0KLQ0K LQlyZWdtYXBfcmVhZChyZWdtYXAsIElTQ19DVFJMU1IsICZzcik7DQotCXdoaWxlICgoc3IgJiBJ U0NfQ1RSTF9VUFBSTykgJiYgY291bnRlci0tKSB7DQotCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAw MCk7DQotCQlyZWdtYXBfcmVhZChyZWdtYXAsIElTQ19DVFJMU1IsICZzcik7DQotCX0NCi0NCi0J aWYgKGNvdW50ZXIgPCAwKSB7DQotCQl2NGwyX3dhcm4oJmlzYy0+djRsMl9kZXYsICJUaW1lIG91 dCB0byB1cGRhdGUgcHJvZmlsZVxuIik7DQotCQlyZXR1cm4gLUVUSU1FRE9VVDsNCi0JfQ0KLQ0K LQlyZXR1cm4gMDsNCi19DQotDQotc3RhdGljIHZvaWQgaXNjX3NldF9oaXN0b2dyYW0oc3RydWN0 IGlzY19kZXZpY2UgKmlzYywgYm9vbCBlbmFibGUpDQotew0KLQlzdHJ1Y3QgcmVnbWFwICpyZWdt YXAgPSBpc2MtPnJlZ21hcDsNCi0Jc3RydWN0IGlzY19jdHJscyAqY3RybHMgPSAmaXNjLT5jdHJs czsNCi0NCi0JaWYgKGVuYWJsZSkgew0KLQkJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0hJU19D RkcsDQotCQkJICAgICBJU0NfSElTX0NGR19NT0RFX0dSIHwNCi0JCQkgICAgIChpc2MtPmNvbmZp Zy5zZF9mb3JtYXQtPmNmYV9iYXljZmcNCi0JCQkJCTw8IElTQ19ISVNfQ0ZHX0JBWVNFTF9TSElG VCkgfA0KLQkJCQkJSVNDX0hJU19DRkdfUkFSKTsNCi0JCXJlZ21hcF93cml0ZShyZWdtYXAsIElT Q19ISVNfQ1RSTCwgSVNDX0hJU19DVFJMX0VOKTsNCi0JCXJlZ21hcF93cml0ZShyZWdtYXAsIElT Q19JTlRFTiwgSVNDX0lOVF9ISVNET05FKTsNCi0JCWN0cmxzLT5oaXN0X2lkID0gSVNDX0hJU19D RkdfTU9ERV9HUjsNCi0JCWlzY191cGRhdGVfcHJvZmlsZShpc2MpOw0KLQkJcmVnbWFwX3dyaXRl KHJlZ21hcCwgSVNDX0NUUkxFTiwgSVNDX0NUUkxfSElTUkVRKTsNCi0NCi0JCWN0cmxzLT5oaXN0 X3N0YXQgPSBISVNUX0VOQUJMRUQ7DQotCX0gZWxzZSB7DQotCQlyZWdtYXBfd3JpdGUocmVnbWFw LCBJU0NfSU5URElTLCBJU0NfSU5UX0hJU0RPTkUpOw0KLQkJcmVnbWFwX3dyaXRlKHJlZ21hcCwg SVNDX0hJU19DVFJMLCBJU0NfSElTX0NUUkxfRElTKTsNCi0NCi0JCWN0cmxzLT5oaXN0X3N0YXQg PSBISVNUX0RJU0FCTEVEOw0KLQl9DQotfQ0KLQ0KLXN0YXRpYyBpbnQgaXNjX2NvbmZpZ3VyZShz dHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KLXsNCi0Jc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNj LT5yZWdtYXA7DQotCXUzMiBwZmVfY2ZnMCwgcmxwX21vZGUsIGRjZmcsIG1hc2ssIHBpcGVsaW5l Ow0KLQlzdHJ1Y3QgaXNjX3N1YmRldl9lbnRpdHkgKnN1YmRldiA9IGlzYy0+Y3VycmVudF9zdWJk ZXY7DQotDQotCXBmZV9jZmcwID0gaXNjLT5jb25maWcuc2RfZm9ybWF0LT5wZmVfY2ZnMF9icHM7 DQotCXJscF9tb2RlID0gaXNjLT5jb25maWcucmxwX2NmZ19tb2RlOw0KLQlwaXBlbGluZSA9IGlz Yy0+Y29uZmlnLmJpdHNfcGlwZWxpbmU7DQotDQotCWRjZmcgPSBpc2MtPmNvbmZpZy5kY2ZnX2lt b2RlIHwNCi0JCSAgICAgICBJU0NfRENGR19ZTUJTSVpFX0JFQVRTOCB8IElTQ19EQ0ZHX0NNQlNJ WkVfQkVBVFM4Ow0KLQ0KLQlwZmVfY2ZnMCAgfD0gc3ViZGV2LT5wZmVfY2ZnMCB8IElTQ19QRkVf Q0ZHMF9NT0RFX1BST0dSRVNTSVZFOw0KLQltYXNrID0gSVNDX1BGRV9DRkcwX0JQU19NQVNLIHwg SVNDX1BGRV9DRkcwX0hQT0xfTE9XIHwNCi0JICAgICAgIElTQ19QRkVfQ0ZHMF9WUE9MX0xPVyB8 IElTQ19QRkVfQ0ZHMF9QUE9MX0xPVyB8DQotCSAgICAgICBJU0NfUEZFX0NGRzBfTU9ERV9NQVNL IHwgSVNDX1BGRV9DRkcwX0NDSVJfQ1JDIHwNCi0JCSAgIElTQ19QRkVfQ0ZHMF9DQ0lSNjU2Ow0K LQ0KLQlyZWdtYXBfdXBkYXRlX2JpdHMocmVnbWFwLCBJU0NfUEZFX0NGRzAsIG1hc2ssIHBmZV9j ZmcwKTsNCi0NCi0JcmVnbWFwX3VwZGF0ZV9iaXRzKHJlZ21hcCwgSVNDX1JMUF9DRkcsIElTQ19S TFBfQ0ZHX01PREVfTUFTSywNCi0JCQkgICBybHBfbW9kZSk7DQotDQotCXJlZ21hcF93cml0ZShy ZWdtYXAsIElTQ19EQ0ZHLCBkY2ZnKTsNCi0NCi0JLyogU2V0IHRoZSBwaXBlbGluZSAqLw0KLQlp c2Nfc2V0X3BpcGVsaW5lKGlzYywgcGlwZWxpbmUpOw0KLQ0KLQkvKg0KLQkgKiBUaGUgY3VycmVu dCBpbXBsZW1lbnRlZCBoaXN0b2dyYW0gaXMgYXZhaWxhYmxlIGZvciBSQVcgUiwgQiwgR0IsIEdS DQotCSAqIGNoYW5uZWxzLiBXZSBuZWVkIHRvIGNoZWNrIGlmIHNlbnNvciBpcyBvdXRwdXR0aW5n IFJBVyBCQVlFUg0KLQkgKi8NCi0JaWYgKGlzYy0+Y3RybHMuYXdiICYmDQotCSAgICBJU0NfSVNf Rk9STUFUX1JBVyhpc2MtPmNvbmZpZy5zZF9mb3JtYXQtPm1idXNfY29kZSkpDQotCQlpc2Nfc2V0 X2hpc3RvZ3JhbShpc2MsIHRydWUpOw0KLQllbHNlDQotCQlpc2Nfc2V0X2hpc3RvZ3JhbShpc2Ms IGZhbHNlKTsNCi0NCi0JLyogVXBkYXRlIHByb2ZpbGUgKi8NCi0JcmV0dXJuIGlzY191cGRhdGVf cHJvZmlsZShpc2MpOw0KLX0NCi0NCi1zdGF0aWMgaW50IGlzY19zdGFydF9zdHJlYW1pbmcoc3Ry dWN0IHZiMl9xdWV1ZSAqdnEsIHVuc2lnbmVkIGludCBjb3VudCkNCi17DQotCXN0cnVjdCBpc2Nf ZGV2aWNlICppc2MgPSB2YjJfZ2V0X2Rydl9wcml2KHZxKTsNCi0Jc3RydWN0IHJlZ21hcCAqcmVn bWFwID0gaXNjLT5yZWdtYXA7DQotCXN0cnVjdCBpc2NfYnVmZmVyICpidWY7DQotCXVuc2lnbmVk IGxvbmcgZmxhZ3M7DQotCWludCByZXQ7DQotDQotCS8qIEVuYWJsZSBzdHJlYW0gb24gdGhlIHN1 YiBkZXZpY2UgKi8NCi0JcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChpc2MtPmN1cnJlbnRfc3ViZGV2 LT5zZCwgdmlkZW8sIHNfc3RyZWFtLCAxKTsNCi0JaWYgKHJldCAmJiByZXQgIT0gLUVOT0lPQ1RM Q01EKSB7DQotCQl2NGwyX2VycigmaXNjLT52NGwyX2RldiwgInN0cmVhbSBvbiBmYWlsZWQgaW4g c3ViZGV2ICVkXG4iLA0KLQkJCSByZXQpOw0KLQkJZ290byBlcnJfc3RhcnRfc3RyZWFtOw0KLQl9 DQotDQotCXBtX3J1bnRpbWVfZ2V0X3N5bmMoaXNjLT5kZXYpOw0KLQ0KLQlyZXQgPSBpc2NfY29u ZmlndXJlKGlzYyk7DQotCWlmICh1bmxpa2VseShyZXQpKQ0KLQkJZ290byBlcnJfY29uZmlndXJl Ow0KLQ0KLQkvKiBFbmFibGUgRE1BIGludGVycnVwdCAqLw0KLQlyZWdtYXBfd3JpdGUocmVnbWFw LCBJU0NfSU5URU4sIElTQ19JTlRfRERPTkUpOw0KLQ0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaXNj LT5kbWFfcXVldWVfbG9jaywgZmxhZ3MpOw0KLQ0KLQlpc2MtPnNlcXVlbmNlID0gMDsNCi0JaXNj LT5zdG9wID0gZmFsc2U7DQotCXJlaW5pdF9jb21wbGV0aW9uKCZpc2MtPmNvbXApOw0KLQ0KLQlp c2MtPmN1cl9mcm0gPSBsaXN0X2ZpcnN0X2VudHJ5KCZpc2MtPmRtYV9xdWV1ZSwNCi0JCQkJCXN0 cnVjdCBpc2NfYnVmZmVyLCBsaXN0KTsNCi0JbGlzdF9kZWwoJmlzYy0+Y3VyX2ZybS0+bGlzdCk7 DQotDQotCWlzY19zdGFydF9kbWEoaXNjKTsNCi0NCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm aXNjLT5kbWFfcXVldWVfbG9jaywgZmxhZ3MpOw0KLQ0KLQkvKiBpZiB3ZSBzdHJlYW1pbmcgZnJv bSBSQVcsIHdlIGNhbiBkbyBvbmUtc2hvdCB3aGl0ZSBiYWxhbmNlIGFkaiAqLw0KLQlpZiAoSVND X0lTX0ZPUk1BVF9SQVcoaXNjLT5jb25maWcuc2RfZm9ybWF0LT5tYnVzX2NvZGUpKQ0KLQkJdjRs Ml9jdHJsX2FjdGl2YXRlKGlzYy0+ZG9fd2JfY3RybCwgdHJ1ZSk7DQotDQotCXJldHVybiAwOw0K LQ0KLWVycl9jb25maWd1cmU6DQotCXBtX3J1bnRpbWVfcHV0X3N5bmMoaXNjLT5kZXYpOw0KLQ0K LQl2NGwyX3N1YmRldl9jYWxsKGlzYy0+Y3VycmVudF9zdWJkZXYtPnNkLCB2aWRlbywgc19zdHJl YW0sIDApOw0KLQ0KLWVycl9zdGFydF9zdHJlYW06DQotCXNwaW5fbG9ja19pcnFzYXZlKCZpc2Mt PmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7DQotCWxpc3RfZm9yX2VhY2hfZW50cnkoYnVmLCAmaXNj LT5kbWFfcXVldWUsIGxpc3QpDQotCQl2YjJfYnVmZmVyX2RvbmUoJmJ1Zi0+dmIudmIyX2J1Ziwg VkIyX0JVRl9TVEFURV9RVUVVRUQpOw0KLQlJTklUX0xJU1RfSEVBRCgmaXNjLT5kbWFfcXVldWUp Ow0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc2MtPmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7 DQotDQotCXJldHVybiByZXQ7DQotfQ0KLQ0KLXN0YXRpYyB2b2lkIGlzY19zdG9wX3N0cmVhbWlu ZyhzdHJ1Y3QgdmIyX3F1ZXVlICp2cSkNCi17DQotCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2 YjJfZ2V0X2Rydl9wcml2KHZxKTsNCi0JdW5zaWduZWQgbG9uZyBmbGFnczsNCi0Jc3RydWN0IGlz Y19idWZmZXIgKmJ1ZjsNCi0JaW50IHJldDsNCi0NCi0JdjRsMl9jdHJsX2FjdGl2YXRlKGlzYy0+ ZG9fd2JfY3RybCwgZmFsc2UpOw0KLQ0KLQlpc2MtPnN0b3AgPSB0cnVlOw0KLQ0KLQkvKiBXYWl0 IHVudGlsIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgZnJhbWUgKi8NCi0JaWYgKGlzYy0+Y3VyX2Zy bSAmJiAhd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpc2MtPmNvbXAsIDUgKiBIWikpDQot CQl2NGwyX2VycigmaXNjLT52NGwyX2RldiwNCi0JCQkgIlRpbWVvdXQgd2FpdGluZyBmb3IgZW5k IG9mIHRoZSBjYXB0dXJlXG4iKTsNCi0NCi0JLyogRGlzYWJsZSBETUEgaW50ZXJydXB0ICovDQot CXJlZ21hcF93cml0ZShpc2MtPnJlZ21hcCwgSVNDX0lOVERJUywgSVNDX0lOVF9ERE9ORSk7DQot DQotCXBtX3J1bnRpbWVfcHV0X3N5bmMoaXNjLT5kZXYpOw0KLQ0KLQkvKiBEaXNhYmxlIHN0cmVh bSBvbiB0aGUgc3ViIGRldmljZSAqLw0KLQlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKGlzYy0+Y3Vy cmVudF9zdWJkZXYtPnNkLCB2aWRlbywgc19zdHJlYW0sIDApOw0KLQlpZiAocmV0ICYmIHJldCAh PSAtRU5PSU9DVExDTUQpDQotCQl2NGwyX2VycigmaXNjLT52NGwyX2RldiwgInN0cmVhbSBvZmYg ZmFpbGVkIGluIHN1YmRldlxuIik7DQotDQotCS8qIFJlbGVhc2UgYWxsIGFjdGl2ZSBidWZmZXJz ICovDQotCXNwaW5fbG9ja19pcnFzYXZlKCZpc2MtPmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7DQot CWlmICh1bmxpa2VseShpc2MtPmN1cl9mcm0pKSB7DQotCQl2YjJfYnVmZmVyX2RvbmUoJmlzYy0+ Y3VyX2ZybS0+dmIudmIyX2J1ZiwNCi0JCQkJVkIyX0JVRl9TVEFURV9FUlJPUik7DQotCQlpc2Mt PmN1cl9mcm0gPSBOVUxMOw0KLQl9DQotCWxpc3RfZm9yX2VhY2hfZW50cnkoYnVmLCAmaXNjLT5k bWFfcXVldWUsIGxpc3QpDQotCQl2YjJfYnVmZmVyX2RvbmUoJmJ1Zi0+dmIudmIyX2J1ZiwgVkIy X0JVRl9TVEFURV9FUlJPUik7DQotCUlOSVRfTElTVF9IRUFEKCZpc2MtPmRtYV9xdWV1ZSk7DQot CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlzYy0+ZG1hX3F1ZXVlX2xvY2ssIGZsYWdzKTsNCi19 DQotDQotc3RhdGljIHZvaWQgaXNjX2J1ZmZlcl9xdWV1ZShzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIp DQotew0KLQlzdHJ1Y3QgdmIyX3Y0bDJfYnVmZmVyICp2YnVmID0gdG9fdmIyX3Y0bDJfYnVmZmVy KHZiKTsNCi0Jc3RydWN0IGlzY19idWZmZXIgKmJ1ZiA9IGNvbnRhaW5lcl9vZih2YnVmLCBzdHJ1 Y3QgaXNjX2J1ZmZlciwgdmIpOw0KLQlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmIyX2dldF9k cnZfcHJpdih2Yi0+dmIyX3F1ZXVlKTsNCi0JdW5zaWduZWQgbG9uZyBmbGFnczsNCi0NCi0Jc3Bp bl9sb2NrX2lycXNhdmUoJmlzYy0+ZG1hX3F1ZXVlX2xvY2ssIGZsYWdzKTsNCi0JaWYgKCFpc2Mt PmN1cl9mcm0gJiYgbGlzdF9lbXB0eSgmaXNjLT5kbWFfcXVldWUpICYmDQotCQl2YjJfaXNfc3Ry ZWFtaW5nKHZiLT52YjJfcXVldWUpKSB7DQotCQlpc2MtPmN1cl9mcm0gPSBidWY7DQotCQlpc2Nf c3RhcnRfZG1hKGlzYyk7DQotCX0gZWxzZQ0KLQkJbGlzdF9hZGRfdGFpbCgmYnVmLT5saXN0LCAm aXNjLT5kbWFfcXVldWUpOw0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc2MtPmRtYV9xdWV1 ZV9sb2NrLCBmbGFncyk7DQotfQ0KLQ0KLXN0YXRpYyBzdHJ1Y3QgaXNjX2Zvcm1hdCAqZmluZF9m b3JtYXRfYnlfZm91cmNjKHN0cnVjdCBpc2NfZGV2aWNlICppc2MsDQotCQkJCQkJIHVuc2lnbmVk IGludCBmb3VyY2MpDQotew0KLQl1bnNpZ25lZCBpbnQgbnVtX2Zvcm1hdHMgPSBpc2MtPm51bV91 c2VyX2Zvcm1hdHM7DQotCXN0cnVjdCBpc2NfZm9ybWF0ICpmbXQ7DQotCXVuc2lnbmVkIGludCBp Ow0KLQ0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX2Zvcm1hdHM7IGkrKykgew0KLQkJZm10ID0gaXNj LT51c2VyX2Zvcm1hdHNbaV07DQotCQlpZiAoZm10LT5mb3VyY2MgPT0gZm91cmNjKQ0KLQkJCXJl dHVybiBmbXQ7DQotCX0NCi0NCi0JcmV0dXJuIE5VTEw7DQotfQ0KLQ0KLXN0YXRpYyBjb25zdCBz dHJ1Y3QgdmIyX29wcyBpc2NfdmIyX29wcyA9IHsNCi0JLnF1ZXVlX3NldHVwCQk9IGlzY19xdWV1 ZV9zZXR1cCwNCi0JLndhaXRfcHJlcGFyZQkJPSB2YjJfb3BzX3dhaXRfcHJlcGFyZSwNCi0JLndh aXRfZmluaXNoCQk9IHZiMl9vcHNfd2FpdF9maW5pc2gsDQotCS5idWZfcHJlcGFyZQkJPSBpc2Nf YnVmZmVyX3ByZXBhcmUsDQotCS5zdGFydF9zdHJlYW1pbmcJPSBpc2Nfc3RhcnRfc3RyZWFtaW5n LA0KLQkuc3RvcF9zdHJlYW1pbmcJCT0gaXNjX3N0b3Bfc3RyZWFtaW5nLA0KLQkuYnVmX3F1ZXVl CQk9IGlzY19idWZmZXJfcXVldWUsDQotfTsNCi0NCi1zdGF0aWMgaW50IGlzY19xdWVyeWNhcChz dHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwNCi0JCQkgc3RydWN0IHY0bDJfY2FwYWJpbGl0 eSAqY2FwKQ0KLXsNCi0Jc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHZpZGVvX2RydmRhdGEoZmls ZSk7DQotDQotCXN0cnNjcHkoY2FwLT5kcml2ZXIsIEFUTUVMX0lTQ19OQU1FLCBzaXplb2YoY2Fw LT5kcml2ZXIpKTsNCi0Jc3Ryc2NweShjYXAtPmNhcmQsICJBdG1lbCBJbWFnZSBTZW5zb3IgQ29u dHJvbGxlciIsIHNpemVvZihjYXAtPmNhcmQpKTsNCi0Jc25wcmludGYoY2FwLT5idXNfaW5mbywg c2l6ZW9mKGNhcC0+YnVzX2luZm8pLA0KLQkJICJwbGF0Zm9ybTolcyIsIGlzYy0+djRsMl9kZXYu bmFtZSk7DQotDQotCXJldHVybiAwOw0KLX0NCi0NCi1zdGF0aWMgaW50IGlzY19lbnVtX2ZtdF92 aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LA0KLQkJCQkgc3RydWN0IHY0bDJf Zm10ZGVzYyAqZikNCi17DQotCXUzMiBpbmRleCA9IGYtPmluZGV4Ow0KLQl1MzIgaSwgc3VwcG9y dGVkX2luZGV4Ow0KLQ0KLQlpZiAoaW5kZXggPCBBUlJBWV9TSVpFKGNvbnRyb2xsZXJfZm9ybWF0 cykpIHsNCi0JCWYtPnBpeGVsZm9ybWF0ID0gY29udHJvbGxlcl9mb3JtYXRzW2luZGV4XS5mb3Vy Y2M7DQotCQlyZXR1cm4gMDsNCi0JfQ0KLQ0KLQlpbmRleCAtPSBBUlJBWV9TSVpFKGNvbnRyb2xs ZXJfZm9ybWF0cyk7DQotDQotCWkgPSAwOw0KLQlzdXBwb3J0ZWRfaW5kZXggPSAwOw0KLQ0KLQlm b3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmb3JtYXRzX2xpc3QpOyBpKyspIHsNCi0JCWlmICgh SVNDX0lTX0ZPUk1BVF9SQVcoZm9ybWF0c19saXN0W2ldLm1idXNfY29kZSkgfHwNCi0JCSAgICAh Zm9ybWF0c19saXN0W2ldLnNkX3N1cHBvcnQpDQotCQkJY29udGludWU7DQotCQlpZiAoc3VwcG9y dGVkX2luZGV4ID09IGluZGV4KSB7DQotCQkJZi0+cGl4ZWxmb3JtYXQgPSBmb3JtYXRzX2xpc3Rb aV0uZm91cmNjOw0KLQkJCXJldHVybiAwOw0KLQkJfQ0KLQkJc3VwcG9ydGVkX2luZGV4Kys7DQot CX0NCi0NCi0JcmV0dXJuIC1FSU5WQUw7DQotfQ0KLQ0KLXN0YXRpYyBpbnQgaXNjX2dfZm10X3Zp ZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsDQotCQkJICAgICAgc3RydWN0IHY0 bDJfZm9ybWF0ICpmbXQpDQotew0KLQlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmlkZW9fZHJ2 ZGF0YShmaWxlKTsNCi0NCi0JKmZtdCA9IGlzYy0+Zm10Ow0KLQ0KLQlyZXR1cm4gMDsNCi19DQot DQotLyoNCi0gKiBDaGVja3MgdGhlIGN1cnJlbnQgY29uZmlndXJlZCBmb3JtYXQsIGlmIElTQyBj YW4gb3V0cHV0IGl0LA0KLSAqIGNvbnNpZGVyaW5nIHdoaWNoIHR5cGUgb2YgZm9ybWF0IHRoZSBJ U0MgcmVjZWl2ZXMgZnJvbSB0aGUgc2Vuc29yDQotICovDQotc3RhdGljIGludCBpc2NfdHJ5X3Zh bGlkYXRlX2Zvcm1hdHMoc3RydWN0IGlzY19kZXZpY2UgKmlzYykNCi17DQotCWludCByZXQ7DQot CWJvb2wgYmF5ZXIgPSBmYWxzZSwgeXV2ID0gZmFsc2UsIHJnYiA9IGZhbHNlLCBncmV5ID0gZmFs c2U7DQotDQotCS8qIGFsbCBmb3JtYXRzIHN1cHBvcnRlZCBieSB0aGUgUkxQIG1vZHVsZSBhcmUg T0sgKi8NCi0Jc3dpdGNoIChpc2MtPnRyeV9jb25maWcuZm91cmNjKSB7DQotCWNhc2UgVjRMMl9Q SVhfRk1UX1NCR0dSODoNCi0JY2FzZSBWNEwyX1BJWF9GTVRfU0dCUkc4Og0KLQljYXNlIFY0TDJf UElYX0ZNVF9TR1JCRzg6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NSR0dCODoNCi0JY2FzZSBWNEwy X1BJWF9GTVRfU0JHR1IxMDoNCi0JY2FzZSBWNEwyX1BJWF9GTVRfU0dCUkcxMDoNCi0JY2FzZSBW NEwyX1BJWF9GTVRfU0dSQkcxMDoNCi0JY2FzZSBWNEwyX1BJWF9GTVRfU1JHR0IxMDoNCi0JY2Fz ZSBWNEwyX1BJWF9GTVRfU0JHR1IxMjoNCi0JY2FzZSBWNEwyX1BJWF9GTVRfU0dCUkcxMjoNCi0J Y2FzZSBWNEwyX1BJWF9GTVRfU0dSQkcxMjoNCi0JY2FzZSBWNEwyX1BJWF9GTVRfU1JHR0IxMjoN Ci0JCXJldCA9IDA7DQotCQliYXllciA9IHRydWU7DQotCQlicmVhazsNCi0NCi0JY2FzZSBWNEwy X1BJWF9GTVRfWVVWNDIwOg0KLQljYXNlIFY0TDJfUElYX0ZNVF9ZVVY0MjJQOg0KLQljYXNlIFY0 TDJfUElYX0ZNVF9ZVVlWOg0KLQkJcmV0ID0gMDsNCi0JCXl1diA9IHRydWU7DQotCQlicmVhazsN Ci0NCi0JY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTY1Og0KLQljYXNlIFY0TDJfUElYX0ZNVF9BQkdS MzI6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1hCR1IzMjoNCi0JY2FzZSBWNEwyX1BJWF9GTVRfQVJH QjQ0NDoNCi0JY2FzZSBWNEwyX1BJWF9GTVRfQVJHQjU1NToNCi0JCXJldCA9IDA7DQotCQlyZ2Ig PSB0cnVlOw0KLQkJYnJlYWs7DQotCWNhc2UgVjRMMl9QSVhfRk1UX0dSRVk6DQotCQlyZXQgPSAw Ow0KLQkJZ3JleSA9IHRydWU7DQotCQlicmVhazsNCi0JZGVmYXVsdDoNCi0JLyogYW55IG90aGVy IGRpZmZlcmVudCBmb3JtYXRzIGFyZSBub3Qgc3VwcG9ydGVkICovDQotCQlyZXQgPSAtRUlOVkFM Ow0KLQl9DQotDQotCS8qIHdlIGNhbm5vdCBvdXRwdXQgUkFXL0dyZXkgaWYgd2UgZG8gbm90IHJl Y2VpdmUgUkFXICovDQotCWlmICgoYmF5ZXIgfHwgZ3JleSkgJiYNCi0JICAgICFJU0NfSVNfRk9S TUFUX1JBVyhpc2MtPnRyeV9jb25maWcuc2RfZm9ybWF0LT5tYnVzX2NvZGUpKQ0KLQkJcmV0dXJu IC1FSU5WQUw7DQotDQotCXY0bDJfZGJnKDEsIGRlYnVnLCAmaXNjLT52NGwyX2RldiwNCi0JCSAi Rm9ybWF0IHZhbGlkYXRpb24sIHJlcXVlc3RlZCByZ2I9JXUsIHl1dj0ldSwgZ3JleT0ldSwgYmF5 ZXI9JXVcbiIsDQotCQkgcmdiLCB5dXYsIGdyZXksIGJheWVyKTsNCi0NCi0JcmV0dXJuIHJldDsN Ci19DQotDQotLyoNCi0gKiBDb25maWd1cmVzIHRoZSBSTFAgYW5kIERNQSBtb2R1bGVzLCBkZXBl bmRpbmcgb24gdGhlIG91dHB1dCBmb3JtYXQNCi0gKiBjb25maWd1cmVkIGZvciB0aGUgSVNDLg0K LSAqIElmIGRpcmVjdF9kdW1wID09IHRydWUsIGp1c3QgZHVtcCByYXcgZGF0YSA4IGJpdHMuDQot ICovDQotc3RhdGljIGludCBpc2NfdHJ5X2NvbmZpZ3VyZV9ybHBfZG1hKHN0cnVjdCBpc2NfZGV2 aWNlICppc2MsIGJvb2wgZGlyZWN0X2R1bXApDQotew0KLQlpZiAoZGlyZWN0X2R1bXApIHsNCi0J CWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJU0NfUkxQX0NGR19NT0RFX0RBVDg7DQot CQlpc2MtPnRyeV9jb25maWcuZGNmZ19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1BBQ0tFRDg7DQot CQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZpZXcgPSBJU0NfRENUUkxfRFZJRVdfUEFDS0VEOw0K LQkJaXNjLT50cnlfY29uZmlnLmJwcCA9IDE2Ow0KLQkJcmV0dXJuIDA7DQotCX0NCi0NCi0Jc3dp dGNoIChpc2MtPnRyeV9jb25maWcuZm91cmNjKSB7DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NCR0dS ODoNCi0JY2FzZSBWNEwyX1BJWF9GTVRfU0dCUkc4Og0KLQljYXNlIFY0TDJfUElYX0ZNVF9TR1JC Rzg6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NSR0dCODoNCi0JCWlzYy0+dHJ5X2NvbmZpZy5ybHBf Y2ZnX21vZGUgPSBJU0NfUkxQX0NGR19NT0RFX0RBVDg7DQotCQlpc2MtPnRyeV9jb25maWcuZGNm Z19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1BBQ0tFRDg7DQotCQlpc2MtPnRyeV9jb25maWcuZGN0 cmxfZHZpZXcgPSBJU0NfRENUUkxfRFZJRVdfUEFDS0VEOw0KLQkJaXNjLT50cnlfY29uZmlnLmJw cCA9IDg7DQotCQlicmVhazsNCi0JY2FzZSBWNEwyX1BJWF9GTVRfU0JHR1IxMDoNCi0JY2FzZSBW NEwyX1BJWF9GTVRfU0dCUkcxMDoNCi0JY2FzZSBWNEwyX1BJWF9GTVRfU0dSQkcxMDoNCi0JY2Fz ZSBWNEwyX1BJWF9GTVRfU1JHR0IxMDoNCi0JCWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUg PSBJU0NfUkxQX0NGR19NT0RFX0RBVDEwOw0KLQkJaXNjLT50cnlfY29uZmlnLmRjZmdfaW1vZGUg PSBJU0NfRENGR19JTU9ERV9QQUNLRUQxNjsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5kY3RybF9kdmll dyA9IElTQ19EQ1RSTF9EVklFV19QQUNLRUQ7DQotCQlpc2MtPnRyeV9jb25maWcuYnBwID0gMTY7 DQotCQlicmVhazsNCi0JY2FzZSBWNEwyX1BJWF9GTVRfU0JHR1IxMjoNCi0JY2FzZSBWNEwyX1BJ WF9GTVRfU0dCUkcxMjoNCi0JY2FzZSBWNEwyX1BJWF9GTVRfU0dSQkcxMjoNCi0JY2FzZSBWNEwy X1BJWF9GTVRfU1JHR0IxMjoNCi0JCWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJU0Nf UkxQX0NGR19NT0RFX0RBVDEyOw0KLQkJaXNjLT50cnlfY29uZmlnLmRjZmdfaW1vZGUgPSBJU0Nf RENGR19JTU9ERV9QQUNLRUQxNjsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5kY3RybF9kdmlldyA9IElT Q19EQ1RSTF9EVklFV19QQUNLRUQ7DQotCQlpc2MtPnRyeV9jb25maWcuYnBwID0gMTY7DQotCQli cmVhazsNCi0JY2FzZSBWNEwyX1BJWF9GTVRfUkdCNTY1Og0KLQkJaXNjLT50cnlfY29uZmlnLnJs cF9jZmdfbW9kZSA9IElTQ19STFBfQ0ZHX01PREVfUkdCNTY1Ow0KLQkJaXNjLT50cnlfY29uZmln LmRjZmdfaW1vZGUgPSBJU0NfRENGR19JTU9ERV9QQUNLRUQxNjsNCi0JCWlzYy0+dHJ5X2NvbmZp Zy5kY3RybF9kdmlldyA9IElTQ19EQ1RSTF9EVklFV19QQUNLRUQ7DQotCQlpc2MtPnRyeV9jb25m aWcuYnBwID0gMTY7DQotCQlicmVhazsNCi0JY2FzZSBWNEwyX1BJWF9GTVRfQVJHQjQ0NDoNCi0J CWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJU0NfUkxQX0NGR19NT0RFX0FSR0I0NDQ7 DQotCQlpc2MtPnRyeV9jb25maWcuZGNmZ19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1BBQ0tFRDE2 Ow0KLQkJaXNjLT50cnlfY29uZmlnLmRjdHJsX2R2aWV3ID0gSVNDX0RDVFJMX0RWSUVXX1BBQ0tF RDsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5icHAgPSAxNjsNCi0JCWJyZWFrOw0KLQljYXNlIFY0TDJf UElYX0ZNVF9BUkdCNTU1Og0KLQkJaXNjLT50cnlfY29uZmlnLnJscF9jZmdfbW9kZSA9IElTQ19S TFBfQ0ZHX01PREVfQVJHQjU1NTsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0gSVND X0RDRkdfSU1PREVfUEFDS0VEMTY7DQotCQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZpZXcgPSBJ U0NfRENUUkxfRFZJRVdfUEFDS0VEOw0KLQkJaXNjLT50cnlfY29uZmlnLmJwcCA9IDE2Ow0KLQkJ YnJlYWs7DQotCWNhc2UgVjRMMl9QSVhfRk1UX0FCR1IzMjoNCi0JY2FzZSBWNEwyX1BJWF9GTVRf WEJHUjMyOg0KLQkJaXNjLT50cnlfY29uZmlnLnJscF9jZmdfbW9kZSA9IElTQ19STFBfQ0ZHX01P REVfQVJHQjMyOw0KLQkJaXNjLT50cnlfY29uZmlnLmRjZmdfaW1vZGUgPSBJU0NfRENGR19JTU9E RV9QQUNLRUQzMjsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5kY3RybF9kdmlldyA9IElTQ19EQ1RSTF9E VklFV19QQUNLRUQ7DQotCQlpc2MtPnRyeV9jb25maWcuYnBwID0gMzI7DQotCQlicmVhazsNCi0J Y2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIwOg0KLQkJaXNjLT50cnlfY29uZmlnLnJscF9jZmdfbW9k ZSA9IElTQ19STFBfQ0ZHX01PREVfWVlDQzsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2Rl ID0gSVNDX0RDRkdfSU1PREVfWUM0MjBQOw0KLQkJaXNjLT50cnlfY29uZmlnLmRjdHJsX2R2aWV3 ID0gSVNDX0RDVFJMX0RWSUVXX1BMQU5BUjsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5icHAgPSAxMjsN Ci0JCWJyZWFrOw0KLQljYXNlIFY0TDJfUElYX0ZNVF9ZVVY0MjJQOg0KLQkJaXNjLT50cnlfY29u ZmlnLnJscF9jZmdfbW9kZSA9IElTQ19STFBfQ0ZHX01PREVfWVlDQzsNCi0JCWlzYy0+dHJ5X2Nv bmZpZy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdfSU1PREVfWUM0MjJQOw0KLQkJaXNjLT50cnlfY29u ZmlnLmRjdHJsX2R2aWV3ID0gSVNDX0RDVFJMX0RWSUVXX1BMQU5BUjsNCi0JCWlzYy0+dHJ5X2Nv bmZpZy5icHAgPSAxNjsNCi0JCWJyZWFrOw0KLQljYXNlIFY0TDJfUElYX0ZNVF9ZVVlWOg0KLQkJ aXNjLT50cnlfY29uZmlnLnJscF9jZmdfbW9kZSA9IElTQ19STFBfQ0ZHX01PREVfWVlDQzsNCi0J CWlzYy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdfSU1PREVfUEFDS0VEMzI7DQot CQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZpZXcgPSBJU0NfRENUUkxfRFZJRVdfUEFDS0VEOw0K LQkJaXNjLT50cnlfY29uZmlnLmJwcCA9IDE2Ow0KLQkJYnJlYWs7DQotCWNhc2UgVjRMMl9QSVhf Rk1UX0dSRVk6DQotCQlpc2MtPnRyeV9jb25maWcucmxwX2NmZ19tb2RlID0gSVNDX1JMUF9DRkdf TU9ERV9EQVRZODsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdfSU1P REVfUEFDS0VEODsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5kY3RybF9kdmlldyA9IElTQ19EQ1RSTF9E VklFV19QQUNLRUQ7DQotCQlpc2MtPnRyeV9jb25maWcuYnBwID0gODsNCi0JCWJyZWFrOw0KLQlk ZWZhdWx0Og0KLQkJcmV0dXJuIC1FSU5WQUw7DQotCX0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLS8q DQotICogQ29uZmlndXJpbmcgcGlwZWxpbmUgbW9kdWxlcywgZGVwZW5kaW5nIG9uIHdoaWNoIGZv cm1hdCB0aGUgSVNDIG91dHB1dHMNCi0gKiBhbmQgY29uc2lkZXJpbmcgd2hpY2ggZm9ybWF0IGl0 IGhhcyBhcyBpbnB1dCBmcm9tIHRoZSBzZW5zb3IuDQotICovDQotc3RhdGljIGludCBpc2NfdHJ5 X2NvbmZpZ3VyZV9waXBlbGluZShzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KLXsNCi0Jc3dpdGNo IChpc2MtPnRyeV9jb25maWcuZm91cmNjKSB7DQotCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU2NToN Ci0JY2FzZSBWNEwyX1BJWF9GTVRfQVJHQjU1NToNCi0JY2FzZSBWNEwyX1BJWF9GTVRfQVJHQjQ0 NDoNCi0JY2FzZSBWNEwyX1BJWF9GTVRfQUJHUjMyOg0KLQljYXNlIFY0TDJfUElYX0ZNVF9YQkdS MzI6DQotCQkvKiBpZiBzZW5zb3IgZm9ybWF0IGlzIFJBVywgd2UgY29udmVydCBpbnNpZGUgSVND ICovDQotCQlpZiAoSVNDX0lTX0ZPUk1BVF9SQVcoaXNjLT50cnlfY29uZmlnLnNkX2Zvcm1hdC0+ bWJ1c19jb2RlKSkgew0KLQkJCWlzYy0+dHJ5X2NvbmZpZy5iaXRzX3BpcGVsaW5lID0gQ0ZBX0VO QUJMRSB8DQotCQkJCVdCX0VOQUJMRSB8IEdBTV9FTkFCTEVTOw0KLQkJfSBlbHNlIHsNCi0JCQlp c2MtPnRyeV9jb25maWcuYml0c19waXBlbGluZSA9IDB4MDsNCi0JCX0NCi0JCWJyZWFrOw0KLQlj YXNlIFY0TDJfUElYX0ZNVF9ZVVY0MjA6DQotCQkvKiBpZiBzZW5zb3IgZm9ybWF0IGlzIFJBVywg d2UgY29udmVydCBpbnNpZGUgSVNDICovDQotCQlpZiAoSVNDX0lTX0ZPUk1BVF9SQVcoaXNjLT50 cnlfY29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2RlKSkgew0KLQkJCWlzYy0+dHJ5X2NvbmZpZy5i aXRzX3BpcGVsaW5lID0gQ0ZBX0VOQUJMRSB8DQotCQkJCUNTQ19FTkFCTEUgfCBXQl9FTkFCTEUg fCBHQU1fRU5BQkxFUyB8DQotCQkJCVNVQjQyMF9FTkFCTEUgfCBTVUI0MjJfRU5BQkxFIHwgQ0JD X0VOQUJMRTsNCi0JCX0gZWxzZSB7DQotCQkJaXNjLT50cnlfY29uZmlnLmJpdHNfcGlwZWxpbmUg PSAweDA7DQotCQl9DQotCQlicmVhazsNCi0JY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIyUDoNCi0J CS8qIGlmIHNlbnNvciBmb3JtYXQgaXMgUkFXLCB3ZSBjb252ZXJ0IGluc2lkZSBJU0MgKi8NCi0J CWlmIChJU0NfSVNfRk9STUFUX1JBVyhpc2MtPnRyeV9jb25maWcuc2RfZm9ybWF0LT5tYnVzX2Nv ZGUpKSB7DQotCQkJaXNjLT50cnlfY29uZmlnLmJpdHNfcGlwZWxpbmUgPSBDRkFfRU5BQkxFIHwN Ci0JCQkJQ1NDX0VOQUJMRSB8IFdCX0VOQUJMRSB8IEdBTV9FTkFCTEVTIHwNCi0JCQkJU1VCNDIy X0VOQUJMRSB8IENCQ19FTkFCTEU7DQotCQl9IGVsc2Ugew0KLQkJCWlzYy0+dHJ5X2NvbmZpZy5i aXRzX3BpcGVsaW5lID0gMHgwOw0KLQkJfQ0KLQkJYnJlYWs7DQotCWNhc2UgVjRMMl9QSVhfRk1U X1lVWVY6DQotCQkvKiBpZiBzZW5zb3IgZm9ybWF0IGlzIFJBVywgd2UgY29udmVydCBpbnNpZGUg SVNDICovDQotCQlpZiAoSVNDX0lTX0ZPUk1BVF9SQVcoaXNjLT50cnlfY29uZmlnLnNkX2Zvcm1h dC0+bWJ1c19jb2RlKSkgew0KLQkJCWlzYy0+dHJ5X2NvbmZpZy5iaXRzX3BpcGVsaW5lID0gQ0ZB X0VOQUJMRSB8DQotCQkJCUNTQ19FTkFCTEUgfCBXQl9FTkFCTEUgfCBHQU1fRU5BQkxFUyB8DQot CQkJCVNVQjQyMl9FTkFCTEUgfCBDQkNfRU5BQkxFOw0KLQkJfSBlbHNlIHsNCi0JCQlpc2MtPnRy eV9jb25maWcuYml0c19waXBlbGluZSA9IDB4MDsNCi0JCX0NCi0JCWJyZWFrOw0KLQljYXNlIFY0 TDJfUElYX0ZNVF9HUkVZOg0KLQkJaWYgKElTQ19JU19GT1JNQVRfUkFXKGlzYy0+dHJ5X2NvbmZp Zy5zZF9mb3JtYXQtPm1idXNfY29kZSkpIHsNCi0JCS8qIGlmIHNlbnNvciBmb3JtYXQgaXMgUkFX LCB3ZSBjb252ZXJ0IGluc2lkZSBJU0MgKi8NCi0JCQlpc2MtPnRyeV9jb25maWcuYml0c19waXBl bGluZSA9IENGQV9FTkFCTEUgfA0KLQkJCQlDU0NfRU5BQkxFIHwgV0JfRU5BQkxFIHwgR0FNX0VO QUJMRVMgfA0KLQkJCQlDQkNfRU5BQkxFOw0KLQkJfSBlbHNlIHsNCi0JCQlpc2MtPnRyeV9jb25m aWcuYml0c19waXBlbGluZSA9IDB4MDsNCi0JCX0NCi0JCWJyZWFrOw0KLQlkZWZhdWx0Og0KLQkJ aXNjLT50cnlfY29uZmlnLmJpdHNfcGlwZWxpbmUgPSAweDA7DQotCX0NCi0JcmV0dXJuIDA7DQot fQ0KLQ0KLXN0YXRpYyBpbnQgaXNjX3RyeV9mbXQoc3RydWN0IGlzY19kZXZpY2UgKmlzYywgc3Ry dWN0IHY0bDJfZm9ybWF0ICpmLA0KLQkJCXUzMiAqY29kZSkNCi17DQotCWludCBpOw0KLQlzdHJ1 Y3QgaXNjX2Zvcm1hdCAqc2RfZm10ID0gTlVMTCwgKmRpcmVjdF9mbXQgPSBOVUxMOw0KLQlzdHJ1 Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXhmbXQgPSAmZi0+Zm10LnBpeDsNCi0Jc3RydWN0IHY0bDJf c3ViZGV2X3BhZF9jb25maWcgcGFkX2NmZzsNCi0Jc3RydWN0IHY0bDJfc3ViZGV2X2Zvcm1hdCBm b3JtYXQgPSB7DQotCQkud2hpY2ggPSBWNEwyX1NVQkRFVl9GT1JNQVRfVFJZLA0KLQl9Ow0KLQl1 MzIgbWJ1c19jb2RlOw0KLQlpbnQgcmV0Ow0KLQlib29sIHJscF9kbWFfZGlyZWN0X2R1bXAgPSBm YWxzZTsNCi0NCi0JaWYgKGYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQ0K LQkJcmV0dXJuIC1FSU5WQUw7DQotDQotCS8qIFN0ZXAgMTogZmluZCBhIFJBVyBmb3JtYXQgdGhh dCBpcyBzdXBwb3J0ZWQgKi8NCi0JZm9yIChpID0gMDsgaSA8IGlzYy0+bnVtX3VzZXJfZm9ybWF0 czsgaSsrKSB7DQotCQlpZiAoSVNDX0lTX0ZPUk1BVF9SQVcoaXNjLT51c2VyX2Zvcm1hdHNbaV0t Pm1idXNfY29kZSkpIHsNCi0JCQlzZF9mbXQgPSBpc2MtPnVzZXJfZm9ybWF0c1tpXTsNCi0JCQli cmVhazsNCi0JCX0NCi0JfQ0KLQkvKiBTdGVwIDI6IFdlIGNhbiBjb250aW51ZSB3aXRoIHRoaXMg UkFXIGZvcm1hdCwgb3Igd2UgY2FuIGxvb2sNCi0JICogZm9yIGJldHRlcjogbWF5YmUgc2Vuc29y IHN1cHBvcnRzIGRpcmVjdGx5IHdoYXQgd2UgbmVlZC4NCi0JICovDQotCWRpcmVjdF9mbXQgPSBm aW5kX2Zvcm1hdF9ieV9mb3VyY2MoaXNjLCBwaXhmbXQtPnBpeGVsZm9ybWF0KTsNCi0NCi0JLyog U3RlcCAzOiBXZSBoYXZlIGJvdGguIFdlIGRlY2lkZSBnaXZlbiB0aGUgbW9kdWxlIHBhcmFtZXRl ciB3aGljaA0KLQkgKiBvbmUgdG8gdXNlLg0KLQkgKi8NCi0JaWYgKGRpcmVjdF9mbXQgJiYgc2Rf Zm10ICYmIHNlbnNvcl9wcmVmZXJyZWQpDQotCQlzZF9mbXQgPSBkaXJlY3RfZm10Ow0KLQ0KLQkv KiBTdGVwIDQ6IHdlIGRvIG5vdCBoYXZlIFJBVyBidXQgd2UgaGF2ZSBhIGRpcmVjdCBmb3JtYXQu IFVzZSBpdC4gKi8NCi0JaWYgKGRpcmVjdF9mbXQgJiYgIXNkX2ZtdCkNCi0JCXNkX2ZtdCA9IGRp cmVjdF9mbXQ7DQotDQotCS8qIFN0ZXAgNTogaWYgd2UgYXJlIHVzaW5nIGEgZGlyZWN0IGZvcm1h dCwgd2UgbmVlZCB0byBwYWNrYWdlDQotCSAqIGV2ZXJ5dGhpbmcgYXMgOCBiaXQgZGF0YSBhbmQg anVzdCBkdW1wIGl0DQotCSAqLw0KLQlpZiAoc2RfZm10ID09IGRpcmVjdF9mbXQpDQotCQlybHBf ZG1hX2RpcmVjdF9kdW1wID0gdHJ1ZTsNCi0NCi0JLyogU3RlcCA2OiBXZSBoYXZlIG5vIGZvcm1h dC4gVGhpcyBjYW4gaGFwcGVuIGlmIHRoZSB1c2Vyc3BhY2UNCi0JICogcmVxdWVzdHMgc29tZSB3 ZWlyZC9pbnZhbGlkIGZvcm1hdC4NCi0JICogSW4gdGhpcyBjYXNlLCBkZWZhdWx0IHRvIHdoYXRl dmVyIHdlIGhhdmUNCi0JICovDQotCWlmICghc2RfZm10ICYmICFkaXJlY3RfZm10KSB7DQotCQlz ZF9mbXQgPSBpc2MtPnVzZXJfZm9ybWF0c1tpc2MtPm51bV91c2VyX2Zvcm1hdHMgLSAxXTsNCi0J CXY0bDJfZGJnKDEsIGRlYnVnLCAmaXNjLT52NGwyX2RldiwNCi0JCQkgIlNlbnNvciBub3Qgc3Vw cG9ydGluZyAlLjRzLCB1c2luZyAlLjRzXG4iLA0KLQkJCSAoY2hhciAqKSZwaXhmbXQtPnBpeGVs Zm9ybWF0LCAoY2hhciAqKSZzZF9mbXQtPmZvdXJjYyk7DQotCX0NCi0NCi0JaWYgKCFzZF9mbXQp IHsNCi0JCXJldCA9IC1FSU5WQUw7DQotCQlnb3RvIGlzY190cnlfZm10X2VycjsNCi0JfQ0KLQ0K LQkvKiBTdGVwIDc6IFByaW50IG91dCB3aGF0IHdlIGRlY2lkZWQgZm9yIGRlYnVnZ2luZyAqLw0K LQl2NGwyX2RiZygxLCBkZWJ1ZywgJmlzYy0+djRsMl9kZXYsDQotCQkgIlByZWZlcnJpbmcgdG8g aGF2ZSBzZW5zb3IgdXNpbmcgZm9ybWF0ICUuNHNcbiIsDQotCQkgKGNoYXIgKikmc2RfZm10LT5m b3VyY2MpOw0KLQ0KLQkvKiBTdGVwIDg6IGF0IHRoaXMgbW9tZW50IHdlIGRlY2lkZWQgd2hpY2gg Zm9ybWF0IHRoZSBzdWJkZXYgd2lsbCB1c2UgKi8NCi0JaXNjLT50cnlfY29uZmlnLnNkX2Zvcm1h dCA9IHNkX2ZtdDsNCi0NCi0JLyogTGltaXQgdG8gQXRtZWwgSVNDIGhhcmR3YXJlIGNhcGFiaWxp dGllcyAqLw0KLQlpZiAocGl4Zm10LT53aWR0aCA+IElTQ19NQVhfU1VQUE9SVF9XSURUSCkNCi0J CXBpeGZtdC0+d2lkdGggPSBJU0NfTUFYX1NVUFBPUlRfV0lEVEg7DQotCWlmIChwaXhmbXQtPmhl aWdodCA+IElTQ19NQVhfU1VQUE9SVF9IRUlHSFQpDQotCQlwaXhmbXQtPmhlaWdodCA9IElTQ19N QVhfU1VQUE9SVF9IRUlHSFQ7DQotDQotCS8qDQotCSAqIFRoZSBtYnVzIGZvcm1hdCBpcyB0aGUg b25lIHRoZSBzdWJkZXYgb3V0cHV0cy4NCi0JICogVGhlIHBpeGVscyB3aWxsIGJlIHRyYW5zZmVy cmVkIGluIHRoaXMgZm9ybWF0IFNlbnNvciAtPiBJU0MNCi0JICovDQotCW1idXNfY29kZSA9IHNk X2ZtdC0+bWJ1c19jb2RlOw0KLQ0KLQkvKg0KLQkgKiBWYWxpZGF0ZSBmb3JtYXRzLiBJZiB0aGUg cmVxdWlyZWQgZm9ybWF0IGlzIG5vdCBPSywgZGVmYXVsdCB0byByYXcuDQotCSAqLw0KLQ0KLQlp c2MtPnRyeV9jb25maWcuZm91cmNjID0gcGl4Zm10LT5waXhlbGZvcm1hdDsNCi0NCi0JaWYgKGlz Y190cnlfdmFsaWRhdGVfZm9ybWF0cyhpc2MpKSB7DQotCQlwaXhmbXQtPnBpeGVsZm9ybWF0ID0g aXNjLT50cnlfY29uZmlnLmZvdXJjYyA9IHNkX2ZtdC0+Zm91cmNjOw0KLQkJLyogUmUtdHJ5IHRv IHZhbGlkYXRlIHRoZSBuZXcgZm9ybWF0ICovDQotCQlyZXQgPSBpc2NfdHJ5X3ZhbGlkYXRlX2Zv cm1hdHMoaXNjKTsNCi0JCWlmIChyZXQpDQotCQkJZ290byBpc2NfdHJ5X2ZtdF9lcnI7DQotCX0N Ci0NCi0JcmV0ID0gaXNjX3RyeV9jb25maWd1cmVfcmxwX2RtYShpc2MsIHJscF9kbWFfZGlyZWN0 X2R1bXApOw0KLQlpZiAocmV0KQ0KLQkJZ290byBpc2NfdHJ5X2ZtdF9lcnI7DQotDQotCXJldCA9 IGlzY190cnlfY29uZmlndXJlX3BpcGVsaW5lKGlzYyk7DQotCWlmIChyZXQpDQotCQlnb3RvIGlz Y190cnlfZm10X2VycjsNCi0NCi0JdjRsMl9maWxsX21idXNfZm9ybWF0KCZmb3JtYXQuZm9ybWF0 LCBwaXhmbXQsIG1idXNfY29kZSk7DQotCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoaXNjLT5jdXJy ZW50X3N1YmRldi0+c2QsIHBhZCwgc2V0X2ZtdCwNCi0JCQkgICAgICAgJnBhZF9jZmcsICZmb3Jt YXQpOw0KLQlpZiAocmV0IDwgMCkNCi0JCWdvdG8gaXNjX3RyeV9mbXRfc3ViZGV2X2VycjsNCi0N Ci0JdjRsMl9maWxsX3BpeF9mb3JtYXQocGl4Zm10LCAmZm9ybWF0LmZvcm1hdCk7DQotDQotCXBp eGZtdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7DQotCXBpeGZtdC0+Ynl0ZXNwZXJsaW5lID0g KHBpeGZtdC0+d2lkdGggKiBpc2MtPnRyeV9jb25maWcuYnBwKSA+PiAzOw0KLQlwaXhmbXQtPnNp emVpbWFnZSA9IHBpeGZtdC0+Ynl0ZXNwZXJsaW5lICogcGl4Zm10LT5oZWlnaHQ7DQotDQotCWlm IChjb2RlKQ0KLQkJKmNvZGUgPSBtYnVzX2NvZGU7DQotDQotCXJldHVybiAwOw0KLQ0KLWlzY190 cnlfZm10X2VycjoNCi0JdjRsMl9lcnIoJmlzYy0+djRsMl9kZXYsICJDb3VsZCBub3QgZmluZCBh bnkgcG9zc2libGUgZm9ybWF0IGZvciBhIHdvcmtpbmcgcGlwZWxpbmVcbiIpOw0KLWlzY190cnlf Zm10X3N1YmRldl9lcnI6DQotCW1lbXNldCgmaXNjLT50cnlfY29uZmlnLCAwLCBzaXplb2YoaXNj LT50cnlfY29uZmlnKSk7DQotDQotCXJldHVybiByZXQ7DQotfQ0KLQ0KLXN0YXRpYyBpbnQgaXNj X3NldF9mbXQoc3RydWN0IGlzY19kZXZpY2UgKmlzYywgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQ0K LXsNCi0Jc3RydWN0IHY0bDJfc3ViZGV2X2Zvcm1hdCBmb3JtYXQgPSB7DQotCQkud2hpY2ggPSBW NEwyX1NVQkRFVl9GT1JNQVRfQUNUSVZFLA0KLQl9Ow0KLQl1MzIgbWJ1c19jb2RlID0gMDsNCi0J aW50IHJldDsNCi0NCi0JcmV0ID0gaXNjX3RyeV9mbXQoaXNjLCBmLCAmbWJ1c19jb2RlKTsNCi0J aWYgKHJldCkNCi0JCXJldHVybiByZXQ7DQotDQotCXY0bDJfZmlsbF9tYnVzX2Zvcm1hdCgmZm9y bWF0LmZvcm1hdCwgJmYtPmZtdC5waXgsIG1idXNfY29kZSk7DQotCXJldCA9IHY0bDJfc3ViZGV2 X2NhbGwoaXNjLT5jdXJyZW50X3N1YmRldi0+c2QsIHBhZCwNCi0JCQkgICAgICAgc2V0X2ZtdCwg TlVMTCwgJmZvcm1hdCk7DQotCWlmIChyZXQgPCAwKQ0KLQkJcmV0dXJuIHJldDsNCi0NCi0JaXNj LT5mbXQgPSAqZjsNCi0NCi0JaWYgKGlzYy0+dHJ5X2NvbmZpZy5zZF9mb3JtYXQgJiYgaXNjLT5j b25maWcuc2RfZm9ybWF0ICYmDQotCSAgICBpc2MtPnRyeV9jb25maWcuc2RfZm9ybWF0ICE9IGlz Yy0+Y29uZmlnLnNkX2Zvcm1hdCkgew0KLQkJaXNjLT5jdHJscy5oaXN0X3N0YXQgPSBISVNUX0lO SVQ7DQotCQlpc2NfcmVzZXRfYXdiX2N0cmxzKGlzYyk7DQotCX0NCi0JLyogbWFrZSB0aGUgdHJ5 IGNvbmZpZ3VyYXRpb24gYWN0aXZlICovDQotCWlzYy0+Y29uZmlnID0gaXNjLT50cnlfY29uZmln Ow0KLQ0KLQl2NGwyX2RiZygxLCBkZWJ1ZywgJmlzYy0+djRsMl9kZXYsICJOZXcgSVNDIGNvbmZp Z3VyYXRpb24gaW4gcGxhY2VcbiIpOw0KLQ0KLQlyZXR1cm4gMDsNCi19DQotDQotc3RhdGljIGlu dCBpc2Nfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwNCi0JCQkg ICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpDQotew0KLQlzdHJ1Y3QgaXNjX2RldmljZSAqaXNj ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsNCi0NCi0JaWYgKHZiMl9pc19zdHJlYW1pbmcoJmlzYy0+ dmIyX3ZpZHEpKQ0KLQkJcmV0dXJuIC1FQlVTWTsNCi0NCi0JcmV0dXJuIGlzY19zZXRfZm10KGlz YywgZik7DQotfQ0KLQ0KLXN0YXRpYyBpbnQgaXNjX3RyeV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmls ZSAqZmlsZSwgdm9pZCAqcHJpdiwNCi0JCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQ0KLXsNCi0J c3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7DQotDQotCXJldHVy biBpc2NfdHJ5X2ZtdChpc2MsIGYsIE5VTEwpOw0KLX0NCi0NCi1zdGF0aWMgaW50IGlzY19lbnVt X2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LA0KLQkJCSAgIHN0cnVjdCB2NGwy X2lucHV0ICppbnApDQotew0KLQlpZiAoaW5wLT5pbmRleCAhPSAwKQ0KLQkJcmV0dXJuIC1FSU5W QUw7DQotDQotCWlucC0+dHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7DQotCWlucC0+c3Rk ID0gMDsNCi0Jc3Ryc2NweShpbnAtPm5hbWUsICJDYW1lcmEiLCBzaXplb2YoaW5wLT5uYW1lKSk7 DQotDQotCXJldHVybiAwOw0KLX0NCi0NCi1zdGF0aWMgaW50IGlzY19nX2lucHV0KHN0cnVjdCBm aWxlICpmaWxlLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgKmkpDQotew0KLQkqaSA9IDA7DQot DQotCXJldHVybiAwOw0KLX0NCi0NCi1zdGF0aWMgaW50IGlzY19zX2lucHV0KHN0cnVjdCBmaWxl ICpmaWxlLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkNCi17DQotCWlmIChpID4gMCkNCi0J CXJldHVybiAtRUlOVkFMOw0KLQ0KLQlyZXR1cm4gMDsNCi19DQotDQotc3RhdGljIGludCBpc2Nf Z19wYXJtKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfc3RyZWFtcGFy bSAqYSkNCi17DQotCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2aWRlb19kcnZkYXRhKGZpbGUp Ow0KLQ0KLQlyZXR1cm4gdjRsMl9nX3Bhcm1fY2FwKHZpZGVvX2RldmRhdGEoZmlsZSksIGlzYy0+ Y3VycmVudF9zdWJkZXYtPnNkLCBhKTsNCi19DQotDQotc3RhdGljIGludCBpc2Nfc19wYXJtKHN0 cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqYSkNCi17 DQotCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KLQ0KLQly ZXR1cm4gdjRsMl9zX3Bhcm1fY2FwKHZpZGVvX2RldmRhdGEoZmlsZSksIGlzYy0+Y3VycmVudF9z dWJkZXYtPnNkLCBhKTsNCi19DQotDQotc3RhdGljIGludCBpc2NfZW51bV9mcmFtZXNpemVzKHN0 cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwNCi0JCQkgICAgICAgc3RydWN0IHY0bDJfZnJtc2l6 ZWVudW0gKmZzaXplKQ0KLXsNCi0Jc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHZpZGVvX2RydmRh dGEoZmlsZSk7DQotCXN0cnVjdCB2NGwyX3N1YmRldl9mcmFtZV9zaXplX2VudW0gZnNlID0gew0K LQkJLmluZGV4ID0gZnNpemUtPmluZGV4LA0KLQkJLndoaWNoID0gVjRMMl9TVUJERVZfRk9STUFU X0FDVElWRSwNCi0JfTsNCi0JaW50IHJldCA9IC1FSU5WQUw7DQotCWludCBpOw0KLQ0KLQlmb3Ig KGkgPSAwOyBpIDwgaXNjLT5udW1fdXNlcl9mb3JtYXRzOyBpKyspDQotCQlpZiAoaXNjLT51c2Vy X2Zvcm1hdHNbaV0tPmZvdXJjYyA9PSBmc2l6ZS0+cGl4ZWxfZm9ybWF0KQ0KLQkJCXJldCA9IDA7 DQotDQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvbnRyb2xsZXJfZm9ybWF0cyk7IGkr KykNCi0JCWlmIChjb250cm9sbGVyX2Zvcm1hdHNbaV0uZm91cmNjID09IGZzaXplLT5waXhlbF9m b3JtYXQpDQotCQkJcmV0ID0gMDsNCi0NCi0JaWYgKHJldCkNCi0JCXJldHVybiByZXQ7DQotDQot CXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoaXNjLT5jdXJyZW50X3N1YmRldi0+c2QsIHBhZCwgZW51 bV9mcmFtZV9zaXplLA0KLQkJCSAgICAgICBOVUxMLCAmZnNlKTsNCi0JaWYgKHJldCkNCi0JCXJl dHVybiByZXQ7DQotDQotCWZzZS5jb2RlID0gaXNjLT5jb25maWcuc2RfZm9ybWF0LT5tYnVzX2Nv ZGU7DQotDQotCWZzaXplLT50eXBlID0gVjRMMl9GUk1TSVpFX1RZUEVfRElTQ1JFVEU7DQotCWZz aXplLT5kaXNjcmV0ZS53aWR0aCA9IGZzZS5tYXhfd2lkdGg7DQotCWZzaXplLT5kaXNjcmV0ZS5o ZWlnaHQgPSBmc2UubWF4X2hlaWdodDsNCi0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLXN0YXRpYyBp bnQgaXNjX2VudW1fZnJhbWVpbnRlcnZhbHMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLA0K LQkJCQkgICAgc3RydWN0IHY0bDJfZnJtaXZhbGVudW0gKmZpdmFsKQ0KLXsNCi0Jc3RydWN0IGlz Y19kZXZpY2UgKmlzYyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7DQotCXN0cnVjdCB2NGwyX3N1YmRl dl9mcmFtZV9pbnRlcnZhbF9lbnVtIGZpZSA9IHsNCi0JCS5pbmRleCA9IGZpdmFsLT5pbmRleCwN Ci0JCS53aWR0aCA9IGZpdmFsLT53aWR0aCwNCi0JCS5oZWlnaHQgPSBmaXZhbC0+aGVpZ2h0LA0K LQkJLndoaWNoID0gVjRMMl9TVUJERVZfRk9STUFUX0FDVElWRSwNCi0JfTsNCi0JaW50IHJldCA9 IC1FSU5WQUw7DQotCWludCBpOw0KLQ0KLQlmb3IgKGkgPSAwOyBpIDwgaXNjLT5udW1fdXNlcl9m b3JtYXRzOyBpKyspDQotCQlpZiAoaXNjLT51c2VyX2Zvcm1hdHNbaV0tPmZvdXJjYyA9PSBmaXZh bC0+cGl4ZWxfZm9ybWF0KQ0KLQkJCXJldCA9IDA7DQotDQotCWZvciAoaSA9IDA7IGkgPCBBUlJB WV9TSVpFKGNvbnRyb2xsZXJfZm9ybWF0cyk7IGkrKykNCi0JCWlmIChjb250cm9sbGVyX2Zvcm1h dHNbaV0uZm91cmNjID09IGZpdmFsLT5waXhlbF9mb3JtYXQpDQotCQkJcmV0ID0gMDsNCi0NCi0J aWYgKHJldCkNCi0JCXJldHVybiByZXQ7DQotDQotCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoaXNj LT5jdXJyZW50X3N1YmRldi0+c2QsIHBhZCwNCi0JCQkgICAgICAgZW51bV9mcmFtZV9pbnRlcnZh bCwgTlVMTCwgJmZpZSk7DQotCWlmIChyZXQpDQotCQlyZXR1cm4gcmV0Ow0KLQ0KLQlmaWUuY29k ZSA9IGlzYy0+Y29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2RlOw0KLQlmaXZhbC0+dHlwZSA9IFY0 TDJfRlJNSVZBTF9UWVBFX0RJU0NSRVRFOw0KLQlmaXZhbC0+ZGlzY3JldGUgPSBmaWUuaW50ZXJ2 YWw7DQotDQotCXJldHVybiAwOw0KLX0NCi0NCi1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9j dGxfb3BzIGlzY19pb2N0bF9vcHMgPSB7DQotCS52aWRpb2NfcXVlcnljYXAJCT0gaXNjX3F1ZXJ5 Y2FwLA0KLQkudmlkaW9jX2VudW1fZm10X3ZpZF9jYXAJPSBpc2NfZW51bV9mbXRfdmlkX2NhcCwN Ci0JLnZpZGlvY19nX2ZtdF92aWRfY2FwCQk9IGlzY19nX2ZtdF92aWRfY2FwLA0KLQkudmlkaW9j X3NfZm10X3ZpZF9jYXAJCT0gaXNjX3NfZm10X3ZpZF9jYXAsDQotCS52aWRpb2NfdHJ5X2ZtdF92 aWRfY2FwCQk9IGlzY190cnlfZm10X3ZpZF9jYXAsDQotDQotCS52aWRpb2NfZW51bV9pbnB1dAkJ PSBpc2NfZW51bV9pbnB1dCwNCi0JLnZpZGlvY19nX2lucHV0CQkJPSBpc2NfZ19pbnB1dCwNCi0J LnZpZGlvY19zX2lucHV0CQkJPSBpc2Nfc19pbnB1dCwNCi0NCi0JLnZpZGlvY19yZXFidWZzCQkJ PSB2YjJfaW9jdGxfcmVxYnVmcywNCi0JLnZpZGlvY19xdWVyeWJ1ZgkJPSB2YjJfaW9jdGxfcXVl cnlidWYsDQotCS52aWRpb2NfcWJ1ZgkJCT0gdmIyX2lvY3RsX3FidWYsDQotCS52aWRpb2NfZXhw YnVmCQkJPSB2YjJfaW9jdGxfZXhwYnVmLA0KLQkudmlkaW9jX2RxYnVmCQkJPSB2YjJfaW9jdGxf ZHFidWYsDQotCS52aWRpb2NfY3JlYXRlX2J1ZnMJCT0gdmIyX2lvY3RsX2NyZWF0ZV9idWZzLA0K LQkudmlkaW9jX3ByZXBhcmVfYnVmCQk9IHZiMl9pb2N0bF9wcmVwYXJlX2J1ZiwNCi0JLnZpZGlv Y19zdHJlYW1vbgkJPSB2YjJfaW9jdGxfc3RyZWFtb24sDQotCS52aWRpb2Nfc3RyZWFtb2ZmCQk9 IHZiMl9pb2N0bF9zdHJlYW1vZmYsDQotDQotCS52aWRpb2NfZ19wYXJtCQkJPSBpc2NfZ19wYXJt LA0KLQkudmlkaW9jX3NfcGFybQkJCT0gaXNjX3NfcGFybSwNCi0JLnZpZGlvY19lbnVtX2ZyYW1l c2l6ZXMJCT0gaXNjX2VudW1fZnJhbWVzaXplcywNCi0JLnZpZGlvY19lbnVtX2ZyYW1laW50ZXJ2 YWxzCT0gaXNjX2VudW1fZnJhbWVpbnRlcnZhbHMsDQotDQotCS52aWRpb2NfbG9nX3N0YXR1cwkJ PSB2NGwyX2N0cmxfbG9nX3N0YXR1cywNCi0JLnZpZGlvY19zdWJzY3JpYmVfZXZlbnQJCT0gdjRs Ml9jdHJsX3N1YnNjcmliZV9ldmVudCwNCi0JLnZpZGlvY191bnN1YnNjcmliZV9ldmVudAk9IHY0 bDJfZXZlbnRfdW5zdWJzY3JpYmUsDQotfTsNCi0NCi1zdGF0aWMgaW50IGlzY19vcGVuKHN0cnVj dCBmaWxlICpmaWxlKQ0KLXsNCi0Jc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHZpZGVvX2RydmRh dGEoZmlsZSk7DQotCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpc2MtPmN1cnJlbnRfc3ViZGV2 LT5zZDsNCi0JaW50IHJldDsNCi0NCi0JaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaXNj LT5sb2NrKSkNCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7DQotDQotCXJldCA9IHY0bDJfZmhfb3Bl bihmaWxlKTsNCi0JaWYgKHJldCA8IDApDQotCQlnb3RvIHVubG9jazsNCi0NCi0JaWYgKCF2NGwy X2ZoX2lzX3Npbmd1bGFyX2ZpbGUoZmlsZSkpDQotCQlnb3RvIHVubG9jazsNCi0NCi0JcmV0ID0g djRsMl9zdWJkZXZfY2FsbChzZCwgY29yZSwgc19wb3dlciwgMSk7DQotCWlmIChyZXQgPCAwICYm IHJldCAhPSAtRU5PSU9DVExDTUQpIHsNCi0JCXY0bDJfZmhfcmVsZWFzZShmaWxlKTsNCi0JCWdv dG8gdW5sb2NrOw0KLQl9DQotDQotCXJldCA9IGlzY19zZXRfZm10KGlzYywgJmlzYy0+Zm10KTsN Ci0JaWYgKHJldCkgew0KLQkJdjRsMl9zdWJkZXZfY2FsbChzZCwgY29yZSwgc19wb3dlciwgMCk7 DQotCQl2NGwyX2ZoX3JlbGVhc2UoZmlsZSk7DQotCX0NCi0NCi11bmxvY2s6DQotCW11dGV4X3Vu bG9jaygmaXNjLT5sb2NrKTsNCi0JcmV0dXJuIHJldDsNCi19DQotDQotc3RhdGljIGludCBpc2Nf cmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkNCi17DQotCXN0cnVjdCBpc2NfZGV2aWNlICppc2Mg PSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KLQlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaXNjLT5j dXJyZW50X3N1YmRldi0+c2Q7DQotCWJvb2wgZmhfc2luZ3VsYXI7DQotCWludCByZXQ7DQotDQot CW11dGV4X2xvY2soJmlzYy0+bG9jayk7DQotDQotCWZoX3Npbmd1bGFyID0gdjRsMl9maF9pc19z aW5ndWxhcl9maWxlKGZpbGUpOw0KLQ0KLQlyZXQgPSBfdmIyX2ZvcF9yZWxlYXNlKGZpbGUsIE5V TEwpOw0KLQ0KLQlpZiAoZmhfc2luZ3VsYXIpDQotCQl2NGwyX3N1YmRldl9jYWxsKHNkLCBjb3Jl LCBzX3Bvd2VyLCAwKTsNCi0NCi0JbXV0ZXhfdW5sb2NrKCZpc2MtPmxvY2spOw0KLQ0KLQlyZXR1 cm4gcmV0Ow0KLX0NCi0NCi1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25z IGlzY19mb3BzID0gew0KLQkub3duZXIJCT0gVEhJU19NT0RVTEUsDQotCS5vcGVuCQk9IGlzY19v cGVuLA0KLQkucmVsZWFzZQk9IGlzY19yZWxlYXNlLA0KLQkudW5sb2NrZWRfaW9jdGwJPSB2aWRl b19pb2N0bDIsDQotCS5yZWFkCQk9IHZiMl9mb3BfcmVhZCwNCi0JLm1tYXAJCT0gdmIyX2ZvcF9t bWFwLA0KLQkucG9sbAkJPSB2YjJfZm9wX3BvbGwsDQotfTsNCi0NCi1zdGF0aWMgaXJxcmV0dXJu X3QgaXNjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpDQotew0KLQlzdHJ1Y3QgaXNj X2RldmljZSAqaXNjID0gKHN0cnVjdCBpc2NfZGV2aWNlICopZGV2X2lkOw0KLQlzdHJ1Y3QgcmVn bWFwICpyZWdtYXAgPSBpc2MtPnJlZ21hcDsNCi0JdTMyIGlzY19pbnRzciwgaXNjX2ludG1hc2ss IHBlbmRpbmc7DQotCWlycXJldHVybl90IHJldCA9IElSUV9OT05FOw0KLQ0KLQlyZWdtYXBfcmVh ZChyZWdtYXAsIElTQ19JTlRTUiwgJmlzY19pbnRzcik7DQotCXJlZ21hcF9yZWFkKHJlZ21hcCwg SVNDX0lOVE1BU0ssICZpc2NfaW50bWFzayk7DQotDQotCXBlbmRpbmcgPSBpc2NfaW50c3IgJiBp c2NfaW50bWFzazsNCi0NCi0JaWYgKGxpa2VseShwZW5kaW5nICYgSVNDX0lOVF9ERE9ORSkpIHsN Ci0JCXNwaW5fbG9jaygmaXNjLT5kbWFfcXVldWVfbG9jayk7DQotCQlpZiAoaXNjLT5jdXJfZnJt KSB7DQotCQkJc3RydWN0IHZiMl92NGwyX2J1ZmZlciAqdmJ1ZiA9ICZpc2MtPmN1cl9mcm0tPnZi Ow0KLQkJCXN0cnVjdCB2YjJfYnVmZmVyICp2YiA9ICZ2YnVmLT52YjJfYnVmOw0KLQ0KLQkJCXZi LT50aW1lc3RhbXAgPSBrdGltZV9nZXRfbnMoKTsNCi0JCQl2YnVmLT5zZXF1ZW5jZSA9IGlzYy0+ c2VxdWVuY2UrKzsNCi0JCQl2YjJfYnVmZmVyX2RvbmUodmIsIFZCMl9CVUZfU1RBVEVfRE9ORSk7 DQotCQkJaXNjLT5jdXJfZnJtID0gTlVMTDsNCi0JCX0NCi0NCi0JCWlmICghbGlzdF9lbXB0eSgm aXNjLT5kbWFfcXVldWUpICYmICFpc2MtPnN0b3ApIHsNCi0JCQlpc2MtPmN1cl9mcm0gPSBsaXN0 X2ZpcnN0X2VudHJ5KCZpc2MtPmRtYV9xdWV1ZSwNCi0JCQkJCQkgICAgIHN0cnVjdCBpc2NfYnVm ZmVyLCBsaXN0KTsNCi0JCQlsaXN0X2RlbCgmaXNjLT5jdXJfZnJtLT5saXN0KTsNCi0NCi0JCQlp c2Nfc3RhcnRfZG1hKGlzYyk7DQotCQl9DQotDQotCQlpZiAoaXNjLT5zdG9wKQ0KLQkJCWNvbXBs ZXRlKCZpc2MtPmNvbXApOw0KLQ0KLQkJcmV0ID0gSVJRX0hBTkRMRUQ7DQotCQlzcGluX3VubG9j aygmaXNjLT5kbWFfcXVldWVfbG9jayk7DQotCX0NCi0NCi0JaWYgKHBlbmRpbmcgJiBJU0NfSU5U X0hJU0RPTkUpIHsNCi0JCXNjaGVkdWxlX3dvcmsoJmlzYy0+YXdiX3dvcmspOw0KLQkJcmV0ID0g SVJRX0hBTkRMRUQ7DQotCX0NCi0NCi0JcmV0dXJuIHJldDsNCi19DQotDQotc3RhdGljIHZvaWQg aXNjX2hpc3RfY291bnQoc3RydWN0IGlzY19kZXZpY2UgKmlzYywgdTMyICptaW4sIHUzMiAqbWF4 KQ0KLXsNCi0Jc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNjLT5yZWdtYXA7DQotCXN0cnVjdCBp c2NfY3RybHMgKmN0cmxzID0gJmlzYy0+Y3RybHM7DQotCXUzMiAqaGlzdF9jb3VudCA9ICZjdHJs cy0+aGlzdF9jb3VudFtjdHJscy0+aGlzdF9pZF07DQotCXUzMiAqaGlzdF9lbnRyeSA9ICZjdHJs cy0+aGlzdF9lbnRyeVswXTsNCi0JdTMyIGk7DQotDQotCSptaW4gPSAwOw0KLQkqbWF4ID0gSElT VF9FTlRSSUVTOw0KLQ0KLQlyZWdtYXBfYnVsa19yZWFkKHJlZ21hcCwgSVNDX0hJU19FTlRSWSwg aGlzdF9lbnRyeSwgSElTVF9FTlRSSUVTKTsNCi0NCi0JKmhpc3RfY291bnQgPSAwOw0KLQkvKg0K LQkgKiB3ZSBkZWxpYmVyYXRlbHkgaWdub3JlIHRoZSBlbmQgb2YgdGhlIGhpc3RvZ3JhbSwNCi0J ICogdGhlIG1vc3Qgd2hpdGUgcGl4ZWxzDQotCSAqLw0KLQlmb3IgKGkgPSAxOyBpIDwgSElTVF9F TlRSSUVTOyBpKyspIHsNCi0JCWlmICgqaGlzdF9lbnRyeSAmJiAhKm1pbikNCi0JCQkqbWluID0g aTsNCi0JCWlmICgqaGlzdF9lbnRyeSkNCi0JCQkqbWF4ID0gaTsNCi0JCSpoaXN0X2NvdW50ICs9 IGkgKiAoKmhpc3RfZW50cnkrKyk7DQotCX0NCi0NCi0JaWYgKCEqbWluKQ0KLQkJKm1pbiA9IDE7 DQotfQ0KLQ0KLXN0YXRpYyB2b2lkIGlzY193Yl91cGRhdGUoc3RydWN0IGlzY19jdHJscyAqY3Ry bHMpDQotew0KLQl1MzIgKmhpc3RfY291bnQgPSAmY3RybHMtPmhpc3RfY291bnRbMF07DQotCXUz MiBjLCBvZmZzZXRbNF07DQotCXU2NCBhdmcgPSAwOw0KLQkvKiBXZSBjb21wdXRlIHR3byBnYWlu cywgc3RyZXRjaCBnYWluIGFuZCBncmV5IHdvcmxkIGdhaW4gKi8NCi0JdTMyIHNfZ2Fpbls0XSwg Z3dfZ2Fpbls0XTsNCi0NCi0JLyoNCi0JICogQWNjb3JkaW5nIHRvIEdyZXkgV29ybGQsIHdlIG5l ZWQgdG8gc2V0IGdhaW5zIGZvciBSL0IgdG8gbm9ybWFsaXplDQotCSAqIHRoZW0gdG93YXJkcyB0 aGUgZ3JlZW4gY2hhbm5lbC4NCi0JICogVGh1cyB3ZSB3YW50IHRvIGtlZXAgR3JlZW4gYXMgZml4 ZWQgYW5kIGFkanVzdCBvbmx5IFJlZC9CbHVlDQotCSAqIENvbXB1dGUgdGhlIGF2ZXJhZ2Ugb2Yg dGhlIGJvdGggZ3JlZW4gY2hhbm5lbHMgZmlyc3QNCi0JICovDQotCWF2ZyA9ICh1NjQpaGlzdF9j b3VudFtJU0NfSElTX0NGR19NT0RFX0dSXSArDQotCQkodTY0KWhpc3RfY291bnRbSVNDX0hJU19D RkdfTU9ERV9HQl07DQotCWF2ZyA+Pj0gMTsNCi0NCi0JLyogR3JlZW4gaGlzdG9ncmFtIGlzIG51 bGwsIG5vdGhpbmcgdG8gZG8gKi8NCi0JaWYgKCFhdmcpDQotCQlyZXR1cm47DQotDQotCWZvciAo YyA9IElTQ19ISVNfQ0ZHX01PREVfR1I7IGMgPD0gSVNDX0hJU19DRkdfTU9ERV9COyBjKyspIHsN Ci0JCS8qDQotCQkgKiB0aGUgY29sb3Igb2Zmc2V0IGlzIHRoZSBtaW5pbXVtIHZhbHVlIG9mIHRo ZSBoaXN0b2dyYW0uDQotCQkgKiB3ZSBzdHJldGNoIHRoaXMgY29sb3IgdG8gdGhlIGZ1bGwgcmFu Z2UgYnkgc3Vic3RyYWN0aW5nDQotCQkgKiB0aGlzIHZhbHVlIGZyb20gdGhlIGNvbG9yIGNvbXBv bmVudC4NCi0JCSAqLw0KLQkJb2Zmc2V0W2NdID0gY3RybHMtPmhpc3RfbWlubWF4W2NdW0hJU1Rf TUlOX0lOREVYXTsNCi0JCS8qDQotCQkgKiBUaGUgb2Zmc2V0IGlzIGFsd2F5cyBhdCBsZWFzdCAx LiBJZiB0aGUgb2Zmc2V0IGlzIDEsIHdlIGRvDQotCQkgKiBub3QgbmVlZCB0byBhZGp1c3QgaXQs IHNvIG91ciByZXN1bHQgbXVzdCBiZSB6ZXJvLg0KLQkJICogdGhlIG9mZnNldCBpcyBjb21wdXRl ZCBpbiBhIGhpc3RvZ3JhbSBvbiA5IGJpdHMgKDAuLjUxMikNCi0JCSAqIGJ1dCB0aGUgb2Zmc2V0 IGluIHJlZ2lzdGVyIGlzIGJhc2VkIG9uDQotCQkgKiAxMiBiaXRzIHBpcGVsaW5lICgwLi40MDk2 KS4NCi0JCSAqIHdlIG5lZWQgdG8gc2hpZnQgd2l0aCB0aGUgMyBiaXRzIHRoYXQgdGhlIGhpc3Rv Z3JhbSBpcw0KLQkJICogaWdub3JpbmcNCi0JCSAqLw0KLQkJY3RybHMtPm9mZnNldFtjXSA9IChv ZmZzZXRbY10gLSAxKSA8PCAzOw0KLQ0KLQkJLyogdGhlIG9mZnNldCBpcyB0aGVuIHRha2VuIGFu ZCBjb252ZXJ0ZWQgdG8gMidzIGNvbXBsZW1lbnRzICovDQotCQlpZiAoIWN0cmxzLT5vZmZzZXRb Y10pDQotCQkJY3RybHMtPm9mZnNldFtjXSA9IElTQ19XQl9PX1pFUk9fVkFMOw0KLQ0KLQkJLyoN Ci0JCSAqIHRoZSBzdHJldGNoIGdhaW4gaXMgdGhlIHRvdGFsIG51bWJlciBvZiBoaXN0b2dyYW0g Ymlucw0KLQkJICogZGl2aWRlZCBieSB0aGUgYWN0dWFsIHJhbmdlIG9mIGNvbG9yIGNvbXBvbmVu dCAoTWF4IC0gTWluKQ0KLQkJICogSWYgd2UgY29tcHV0ZSBnYWluIGxpa2UgdGhpcywgdGhlIGFj dHVhbCBjb2xvciBjb21wb25lbnQNCi0JCSAqIHdpbGwgYmUgc3RyZXRjaGVkIHRvIHRoZSBmdWxs IGhpc3RvZ3JhbS4NCi0JCSAqIFdlIG5lZWQgdG8gc2hpZnQgOSBiaXRzIGZvciBwcmVjaXNpb24s IHdlIGhhdmUgOSBiaXRzIGZvcg0KLQkJICogZGVjaW1hbHMNCi0JCSAqLw0KLQkJc19nYWluW2Nd ID0gKEhJU1RfRU5UUklFUyA8PCA5KSAvDQotCQkJKGN0cmxzLT5oaXN0X21pbm1heFtjXVtISVNU X01BWF9JTkRFWF0gLQ0KLQkJCWN0cmxzLT5oaXN0X21pbm1heFtjXVtISVNUX01JTl9JTkRFWF0g KyAxKTsNCi0NCi0JCS8qDQotCQkgKiBOb3cgd2UgaGF2ZSB0byBjb21wdXRlIHRoZSBnYWluIHcu ci50LiB0aGUgYXZlcmFnZS4NCi0JCSAqIEFkZC9sb3NlIGdhaW4gdG8gdGhlIGNvbXBvbmVudCB0 b3dhcmRzIHRoZSBhdmVyYWdlLg0KLQkJICogSWYgaXQgaGFwcGVucyB0aGF0IHRoZSBjb21wb25l bnQgaXMgemVybywgdXNlIHRoZQ0KLQkJICogZml4ZWQgcG9pbnQgdmFsdWUgOiAxLjAgZ2Fpbi4N Ci0JCSAqLw0KLQkJaWYgKGhpc3RfY291bnRbY10pDQotCQkJZ3dfZ2FpbltjXSA9IGRpdl91NjQo YXZnIDw8IDksIGhpc3RfY291bnRbY10pOw0KLQkJZWxzZQ0KLQkJCWd3X2dhaW5bY10gPSAxIDw8 IDk7DQotDQotCQkvKiBtdWx0aXBseSBib3RoIGdhaW5zIGFuZCBhZGp1c3QgZm9yIGRlY2ltYWxz ICovDQotCQljdHJscy0+Z2FpbltjXSA9IHNfZ2FpbltjXSAqIGd3X2dhaW5bY107DQotCQljdHJs cy0+Z2FpbltjXSA+Pj0gOTsNCi0JfQ0KLX0NCi0NCi1zdGF0aWMgdm9pZCBpc2NfYXdiX3dvcmso c3RydWN0IHdvcmtfc3RydWN0ICp3KQ0KLXsNCi0Jc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9DQot CQljb250YWluZXJfb2Yodywgc3RydWN0IGlzY19kZXZpY2UsIGF3Yl93b3JrKTsNCi0Jc3RydWN0 IHJlZ21hcCAqcmVnbWFwID0gaXNjLT5yZWdtYXA7DQotCXN0cnVjdCBpc2NfY3RybHMgKmN0cmxz ID0gJmlzYy0+Y3RybHM7DQotCXUzMiBoaXN0X2lkID0gY3RybHMtPmhpc3RfaWQ7DQotCXUzMiBi YXlzZWw7DQotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQotCXUzMiBtaW4sIG1heDsNCi0NCi0JLyog c3RyZWFtaW5nIGlzIG5vdCBhY3RpdmUgYW55bW9yZSAqLw0KLQlpZiAoaXNjLT5zdG9wKQ0KLQkJ cmV0dXJuOw0KLQ0KLQlpZiAoY3RybHMtPmhpc3Rfc3RhdCAhPSBISVNUX0VOQUJMRUQpDQotCQly ZXR1cm47DQotDQotCWlzY19oaXN0X2NvdW50KGlzYywgJm1pbiwgJm1heCk7DQotCWN0cmxzLT5o aXN0X21pbm1heFtoaXN0X2lkXVtISVNUX01JTl9JTkRFWF0gPSBtaW47DQotCWN0cmxzLT5oaXN0 X21pbm1heFtoaXN0X2lkXVtISVNUX01BWF9JTkRFWF0gPSBtYXg7DQotDQotCWlmIChoaXN0X2lk ICE9IElTQ19ISVNfQ0ZHX01PREVfQikgew0KLQkJaGlzdF9pZCsrOw0KLQl9IGVsc2Ugew0KLQkJ aXNjX3diX3VwZGF0ZShjdHJscyk7DQotCQloaXN0X2lkID0gSVNDX0hJU19DRkdfTU9ERV9HUjsN Ci0JfQ0KLQ0KLQljdHJscy0+aGlzdF9pZCA9IGhpc3RfaWQ7DQotCWJheXNlbCA9IGlzYy0+Y29u ZmlnLnNkX2Zvcm1hdC0+Y2ZhX2JheWNmZyA8PCBJU0NfSElTX0NGR19CQVlTRUxfU0hJRlQ7DQot DQotCS8qIGlmIG5vIG1vcmUgYXV0byB3aGl0ZSBiYWxhbmNlLCByZXNldCBjb250cm9scy4gKi8N Ci0JaWYgKGN0cmxzLT5hd2IgPT0gSVNDX1dCX05PTkUpDQotCQlpc2NfcmVzZXRfYXdiX2N0cmxz KGlzYyk7DQotDQotCXBtX3J1bnRpbWVfZ2V0X3N5bmMoaXNjLT5kZXYpOw0KLQ0KLQkvKg0KLQkg KiBvbmx5IHVwZGF0ZSBpZiB3ZSBoYXZlIGFsbCB0aGUgcmVxdWlyZWQgaGlzdG9ncmFtcyBhbmQg Y29udHJvbHMNCi0JICogaWYgYXdiIGhhcyBiZWVuIGRpc2FibGVkLCB3ZSBuZWVkIHRvIHJlc2V0 IHJlZ2lzdGVycyBhcyB3ZWxsLg0KLQkgKi8NCi0JaWYgKGhpc3RfaWQgPT0gSVNDX0hJU19DRkdf TU9ERV9HUiB8fCBjdHJscy0+YXdiID09IElTQ19XQl9OT05FKSB7DQotCQkvKg0KLQkJICogSXQg bWF5IGhhcHBlbiB0aGF0IERNQSBEb25lIElSUSB3aWxsIHRyaWdnZXIgd2hpbGUgd2UgYXJlDQot CQkgKiB1cGRhdGluZyB3aGl0ZSBiYWxhbmNlIHJlZ2lzdGVycyBoZXJlLg0KLQkJICogSW4gdGhh dCBjYXNlLCBvbmx5IHBhcnRzIG9mIHRoZSBjb250cm9scyBoYXZlIGJlZW4gdXBkYXRlZC4NCi0J CSAqIFdlIGNhbiBhdm9pZCB0aGF0IGJ5IGxvY2tpbmcgdGhlIHNlY3Rpb24uDQotCQkgKi8NCi0J CXNwaW5fbG9ja19pcnFzYXZlKCZpc2MtPmF3Yl9sb2NrLCBmbGFncyk7DQotCQlpc2NfdXBkYXRl X2F3Yl9jdHJscyhpc2MpOw0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNjLT5hd2JfbG9j aywgZmxhZ3MpOw0KLQ0KLQkJLyoNCi0JCSAqIGlmIHdlIGFyZSBkb2luZyBqdXN0IHRoZSBvbmUg dGltZSB3aGl0ZSBiYWxhbmNlIGFkanVzdG1lbnQsDQotCQkgKiB3ZSBhcmUgYmFzaWNhbGx5IGRv bmUuDQotCQkgKi8NCi0JCWlmIChjdHJscy0+YXdiID09IElTQ19XQl9PTkVUSU1FKSB7DQotCQkJ djRsMl9pbmZvKCZpc2MtPnY0bDJfZGV2LA0KLQkJCQkgICJDb21wbGV0ZWQgb25lIHRpbWUgd2hp dGUtYmFsYW5jZSBhZGp1c3RtZW50LlxuIik7DQotCQkJY3RybHMtPmF3YiA9IElTQ19XQl9OT05F Ow0KLQkJfQ0KLQl9DQotCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19ISVNfQ0ZHLCBoaXN0X2lk IHwgYmF5c2VsIHwgSVNDX0hJU19DRkdfUkFSKTsNCi0JaXNjX3VwZGF0ZV9wcm9maWxlKGlzYyk7 DQotCS8qIGlmIGF3YiBoYXMgYmVlbiBkaXNhYmxlZCwgd2UgZG9uJ3QgbmVlZCB0byBzdGFydCBh bm90aGVyIGhpc3RvZ3JhbSAqLw0KLQlpZiAoY3RybHMtPmF3YikNCi0JCXJlZ21hcF93cml0ZShy ZWdtYXAsIElTQ19DVFJMRU4sIElTQ19DVFJMX0hJU1JFUSk7DQotDQotCXBtX3J1bnRpbWVfcHV0 X3N5bmMoaXNjLT5kZXYpOw0KLX0NCi0NCi1zdGF0aWMgaW50IGlzY19zX2N0cmwoc3RydWN0IHY0 bDJfY3RybCAqY3RybCkNCi17DQotCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSBjb250YWluZXJf b2YoY3RybC0+aGFuZGxlciwNCi0JCQkJCSAgICAgc3RydWN0IGlzY19kZXZpY2UsIGN0cmxzLmhh bmRsZXIpOw0KLQlzdHJ1Y3QgaXNjX2N0cmxzICpjdHJscyA9ICZpc2MtPmN0cmxzOw0KLQ0KLQlp ZiAoY3RybC0+ZmxhZ3MgJiBWNEwyX0NUUkxfRkxBR19JTkFDVElWRSkNCi0JCXJldHVybiAwOw0K LQ0KLQlzd2l0Y2ggKGN0cmwtPmlkKSB7DQotCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoNCi0J CWN0cmxzLT5icmlnaHRuZXNzID0gY3RybC0+dmFsICYgSVNDX0NCQ19CUklHSFRfTUFTSzsNCi0J CWJyZWFrOw0KLQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOg0KLQkJY3RybHMtPmNvbnRyYXN0ID0g Y3RybC0+dmFsICYgSVNDX0NCQ19DT05UUkFTVF9NQVNLOw0KLQkJYnJlYWs7DQotCWNhc2UgVjRM Ml9DSURfR0FNTUE6DQotCQljdHJscy0+Z2FtbWFfaW5kZXggPSBjdHJsLT52YWw7DQotCQlicmVh azsNCi0JY2FzZSBWNEwyX0NJRF9BVVRPX1dISVRFX0JBTEFOQ0U6DQotCQlpZiAoY3RybC0+dmFs ID09IDEpDQotCQkJY3RybHMtPmF3YiA9IElTQ19XQl9BVVRPOw0KLQkJZWxzZQ0KLQkJCWN0cmxz LT5hd2IgPSBJU0NfV0JfTk9ORTsNCi0NCi0JCS8qIHdlIGRpZCBub3QgY29uZmlndXJlIElTQyB5 ZXQgKi8NCi0JCWlmICghaXNjLT5jb25maWcuc2RfZm9ybWF0KQ0KLQkJCWJyZWFrOw0KLQ0KLQkJ aWYgKGN0cmxzLT5oaXN0X3N0YXQgIT0gSElTVF9FTkFCTEVEKQ0KLQkJCWlzY19yZXNldF9hd2Jf Y3RybHMoaXNjKTsNCi0NCi0JCWlmIChpc2MtPmN0cmxzLmF3YiA9PSBJU0NfV0JfQVVUTyAmJg0K LQkJICAgIHZiMl9pc19zdHJlYW1pbmcoJmlzYy0+dmIyX3ZpZHEpICYmDQotCQkgICAgSVNDX0lT X0ZPUk1BVF9SQVcoaXNjLT5jb25maWcuc2RfZm9ybWF0LT5tYnVzX2NvZGUpKQ0KLQkJCWlzY19z ZXRfaGlzdG9ncmFtKGlzYywgdHJ1ZSk7DQotDQotCQlicmVhazsNCi0JY2FzZSBWNEwyX0NJRF9E T19XSElURV9CQUxBTkNFOg0KLQkJLyogaWYgQVdCIGlzIGVuYWJsZWQsIGRvIG5vdGhpbmcgKi8N Ci0JCWlmIChjdHJscy0+YXdiID09IElTQ19XQl9BVVRPKQ0KLQkJCXJldHVybiAwOw0KLQ0KLQkJ Y3RybHMtPmF3YiA9IElTQ19XQl9PTkVUSU1FOw0KLQkJaXNjX3NldF9oaXN0b2dyYW0oaXNjLCB0 cnVlKTsNCi0JCXY0bDJfZGJnKDEsIGRlYnVnLCAmaXNjLT52NGwyX2RldiwNCi0JCQkgIk9uZSB0 aW1lIHdoaXRlLWJhbGFuY2Ugc3RhcnRlZC5cbiIpOw0KLQkJYnJlYWs7DQotCWRlZmF1bHQ6DQot CQlyZXR1cm4gLUVJTlZBTDsNCi0JfQ0KLQ0KLQlyZXR1cm4gMDsNCi19DQotDQotc3RhdGljIGNv bnN0IHN0cnVjdCB2NGwyX2N0cmxfb3BzIGlzY19jdHJsX29wcyA9IHsNCi0JLnNfY3RybAk9IGlz Y19zX2N0cmwsDQotfTsNCi0NCi1zdGF0aWMgaW50IGlzY19jdHJsX2luaXQoc3RydWN0IGlzY19k ZXZpY2UgKmlzYykNCi17DQotCWNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfb3BzICpvcHMgPSAmaXNj X2N0cmxfb3BzOw0KLQlzdHJ1Y3QgaXNjX2N0cmxzICpjdHJscyA9ICZpc2MtPmN0cmxzOw0KLQlz dHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmhkbCA9ICZjdHJscy0+aGFuZGxlcjsNCi0JaW50IHJl dDsNCi0NCi0JY3RybHMtPmhpc3Rfc3RhdCA9IEhJU1RfSU5JVDsNCi0JaXNjX3Jlc2V0X2F3Yl9j dHJscyhpc2MpOw0KLQ0KLQlyZXQgPSB2NGwyX2N0cmxfaGFuZGxlcl9pbml0KGhkbCwgNSk7DQot CWlmIChyZXQgPCAwKQ0KLQkJcmV0dXJuIHJldDsNCi0NCi0JY3RybHMtPmJyaWdodG5lc3MgPSAw Ow0KLQljdHJscy0+Y29udHJhc3QgPSAyNTY7DQotDQotCXY0bDJfY3RybF9uZXdfc3RkKGhkbCwg b3BzLCBWNEwyX0NJRF9CUklHSFRORVNTLCAtMTAyNCwgMTAyMywgMSwgMCk7DQotCXY0bDJfY3Ry bF9uZXdfc3RkKGhkbCwgb3BzLCBWNEwyX0NJRF9DT05UUkFTVCwgLTIwNDgsIDIwNDcsIDEsIDI1 Nik7DQotCXY0bDJfY3RybF9uZXdfc3RkKGhkbCwgb3BzLCBWNEwyX0NJRF9HQU1NQSwgMCwgR0FN TUFfTUFYLCAxLCAyKTsNCi0JdjRsMl9jdHJsX25ld19zdGQoaGRsLCBvcHMsIFY0TDJfQ0lEX0FV VE9fV0hJVEVfQkFMQU5DRSwgMCwgMSwgMSwgMSk7DQotDQotCS8qIGRvX3doaXRlX2JhbGFuY2Ug aXMgYSBidXR0b24sIHNvIG1pbixtYXgsc3RlcCxkZWZhdWx0IGFyZSBpZ25vcmVkICovDQotCWlz Yy0+ZG9fd2JfY3RybCA9IHY0bDJfY3RybF9uZXdfc3RkKGhkbCwgb3BzLCBWNEwyX0NJRF9ET19X SElURV9CQUxBTkNFLA0KLQkJCQkJICAgIDAsIDAsIDAsIDApOw0KLQ0KLQl2NGwyX2N0cmxfYWN0 aXZhdGUoaXNjLT5kb193Yl9jdHJsLCBmYWxzZSk7DQotDQotCXY0bDJfY3RybF9oYW5kbGVyX3Nl dHVwKGhkbCk7DQotDQotCXJldHVybiAwOw0KLX0NCi0NCi1zdGF0aWMgaW50IGlzY19hc3luY19i b3VuZChzdHJ1Y3QgdjRsMl9hc3luY19ub3RpZmllciAqbm90aWZpZXIsDQotCQkJICAgIHN0cnVj dCB2NGwyX3N1YmRldiAqc3ViZGV2LA0KLQkJCSAgICBzdHJ1Y3QgdjRsMl9hc3luY19zdWJkZXYg KmFzZCkNCi17DQotCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSBjb250YWluZXJfb2Yobm90aWZp ZXItPnY0bDJfZGV2LA0KLQkJCQkJICAgICAgc3RydWN0IGlzY19kZXZpY2UsIHY0bDJfZGV2KTsN Ci0Jc3RydWN0IGlzY19zdWJkZXZfZW50aXR5ICpzdWJkZXZfZW50aXR5ID0NCi0JCWNvbnRhaW5l cl9vZihub3RpZmllciwgc3RydWN0IGlzY19zdWJkZXZfZW50aXR5LCBub3RpZmllcik7DQotDQot CWlmICh2aWRlb19pc19yZWdpc3RlcmVkKCZpc2MtPnZpZGVvX2RldikpIHsNCi0JCXY0bDJfZXJy KCZpc2MtPnY0bDJfZGV2LCAib25seSBzdXBwb3J0cyBvbmUgc3ViLWRldmljZS5cbiIpOw0KLQkJ cmV0dXJuIC1FQlVTWTsNCi0JfQ0KLQ0KLQlzdWJkZXZfZW50aXR5LT5zZCA9IHN1YmRldjsNCi0N Ci0JcmV0dXJuIDA7DQotfQ0KLQ0KLXN0YXRpYyB2b2lkIGlzY19hc3luY191bmJpbmQoc3RydWN0 IHY0bDJfYXN5bmNfbm90aWZpZXIgKm5vdGlmaWVyLA0KLQkJCSAgICAgIHN0cnVjdCB2NGwyX3N1 YmRldiAqc3ViZGV2LA0KLQkJCSAgICAgIHN0cnVjdCB2NGwyX2FzeW5jX3N1YmRldiAqYXNkKQ0K LXsNCi0Jc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IGNvbnRhaW5lcl9vZihub3RpZmllci0+djRs Ml9kZXYsDQotCQkJCQkgICAgICBzdHJ1Y3QgaXNjX2RldmljZSwgdjRsMl9kZXYpOw0KLQljYW5j ZWxfd29ya19zeW5jKCZpc2MtPmF3Yl93b3JrKTsNCi0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2Uo JmlzYy0+dmlkZW9fZGV2KTsNCi0JdjRsMl9jdHJsX2hhbmRsZXJfZnJlZSgmaXNjLT5jdHJscy5o YW5kbGVyKTsNCi19DQotDQotc3RhdGljIHN0cnVjdCBpc2NfZm9ybWF0ICpmaW5kX2Zvcm1hdF9i eV9jb2RlKHVuc2lnbmVkIGludCBjb2RlLCBpbnQgKmluZGV4KQ0KLXsNCi0Jc3RydWN0IGlzY19m b3JtYXQgKmZtdCA9ICZmb3JtYXRzX2xpc3RbMF07DQotCXVuc2lnbmVkIGludCBpOw0KLQ0KLQlm b3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmb3JtYXRzX2xpc3QpOyBpKyspIHsNCi0JCWlmIChm bXQtPm1idXNfY29kZSA9PSBjb2RlKSB7DQotCQkJKmluZGV4ID0gaTsNCi0JCQlyZXR1cm4gZm10 Ow0KLQkJfQ0KLQ0KLQkJZm10Kys7DQotCX0NCi0NCi0JcmV0dXJuIE5VTEw7DQotfQ0KLQ0KLXN0 YXRpYyBpbnQgaXNjX2Zvcm1hdHNfaW5pdChzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KLXsNCi0J c3RydWN0IGlzY19mb3JtYXQgKmZtdDsNCi0Jc3RydWN0IHY0bDJfc3ViZGV2ICpzdWJkZXYgPSBp c2MtPmN1cnJlbnRfc3ViZGV2LT5zZDsNCi0JdW5zaWduZWQgaW50IG51bV9mbXRzLCBpLCBqOw0K LQl1MzIgbGlzdF9zaXplID0gQVJSQVlfU0laRShmb3JtYXRzX2xpc3QpOw0KLQlzdHJ1Y3QgdjRs Ml9zdWJkZXZfbWJ1c19jb2RlX2VudW0gbWJ1c19jb2RlID0gew0KLQkJLndoaWNoID0gVjRMMl9T VUJERVZfRk9STUFUX0FDVElWRSwNCi0JfTsNCi0NCi0JbnVtX2ZtdHMgPSAwOw0KLQl3aGlsZSAo IXY0bDJfc3ViZGV2X2NhbGwoc3ViZGV2LCBwYWQsIGVudW1fbWJ1c19jb2RlLA0KLQkgICAgICAg TlVMTCwgJm1idXNfY29kZSkpIHsNCi0JCW1idXNfY29kZS5pbmRleCsrOw0KLQ0KLQkJZm10ID0g ZmluZF9mb3JtYXRfYnlfY29kZShtYnVzX2NvZGUuY29kZSwgJmkpOw0KLQkJaWYgKCFmbXQpIHsN Ci0JCQl2NGwyX3dhcm4oJmlzYy0+djRsMl9kZXYsICJNYnVzIGNvZGUgJXggbm90IHN1cHBvcnRl ZFxuIiwNCi0JCQkJICBtYnVzX2NvZGUuY29kZSk7DQotCQkJY29udGludWU7DQotCQl9DQotDQot CQlmbXQtPnNkX3N1cHBvcnQgPSB0cnVlOw0KLQkJbnVtX2ZtdHMrKzsNCi0JfQ0KLQ0KLQlpZiAo IW51bV9mbXRzKQ0KLQkJcmV0dXJuIC1FTlhJTzsNCi0NCi0JaXNjLT5udW1fdXNlcl9mb3JtYXRz ID0gbnVtX2ZtdHM7DQotCWlzYy0+dXNlcl9mb3JtYXRzID0gZGV2bV9rY2FsbG9jKGlzYy0+ZGV2 LA0KLQkJCQkJIG51bV9mbXRzLCBzaXplb2YoKmlzYy0+dXNlcl9mb3JtYXRzKSwNCi0JCQkJCSBH RlBfS0VSTkVMKTsNCi0JaWYgKCFpc2MtPnVzZXJfZm9ybWF0cykNCi0JCXJldHVybiAtRU5PTUVN Ow0KLQ0KLQlmbXQgPSAmZm9ybWF0c19saXN0WzBdOw0KLQlmb3IgKGkgPSAwLCBqID0gMDsgaSA8 IGxpc3Rfc2l6ZTsgaSsrKSB7DQotCQlpZiAoZm10LT5zZF9zdXBwb3J0KQ0KLQkJCWlzYy0+dXNl cl9mb3JtYXRzW2orK10gPSBmbXQ7DQotCQlmbXQrKzsNCi0JfQ0KLQ0KLQlyZXR1cm4gMDsNCi19 DQotDQotc3RhdGljIGludCBpc2Nfc2V0X2RlZmF1bHRfZm10KHN0cnVjdCBpc2NfZGV2aWNlICpp c2MpDQotew0KLQlzdHJ1Y3QgdjRsMl9mb3JtYXQgZiA9IHsNCi0JCS50eXBlID0gVjRMMl9CVUZf VFlQRV9WSURFT19DQVBUVVJFLA0KLQkJLmZtdC5waXggPSB7DQotCQkJLndpZHRoCQk9IFZHQV9X SURUSCwNCi0JCQkuaGVpZ2h0CQk9IFZHQV9IRUlHSFQsDQotCQkJLmZpZWxkCQk9IFY0TDJfRklF TERfTk9ORSwNCi0JCQkucGl4ZWxmb3JtYXQJPSBpc2MtPnVzZXJfZm9ybWF0c1swXS0+Zm91cmNj LA0KLQkJfSwNCi0JfTsNCi0JaW50IHJldDsNCi0NCi0JcmV0ID0gaXNjX3RyeV9mbXQoaXNjLCAm ZiwgTlVMTCk7DQotCWlmIChyZXQpDQotCQlyZXR1cm4gcmV0Ow0KLQ0KLQlpc2MtPmZtdCA9IGY7 DQotCXJldHVybiAwOw0KLX0NCi0NCi1zdGF0aWMgaW50IGlzY19hc3luY19jb21wbGV0ZShzdHJ1 Y3QgdjRsMl9hc3luY19ub3RpZmllciAqbm90aWZpZXIpDQotew0KLQlzdHJ1Y3QgaXNjX2Rldmlj ZSAqaXNjID0gY29udGFpbmVyX29mKG5vdGlmaWVyLT52NGwyX2RldiwNCi0JCQkJCSAgICAgIHN0 cnVjdCBpc2NfZGV2aWNlLCB2NGwyX2Rldik7DQotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYg PSAmaXNjLT52aWRlb19kZXY7DQotCXN0cnVjdCB2YjJfcXVldWUgKnEgPSAmaXNjLT52YjJfdmlk cTsNCi0JaW50IHJldDsNCi0NCi0JSU5JVF9XT1JLKCZpc2MtPmF3Yl93b3JrLCBpc2NfYXdiX3dv cmspOw0KLQ0KLQlyZXQgPSB2NGwyX2RldmljZV9yZWdpc3Rlcl9zdWJkZXZfbm9kZXMoJmlzYy0+ djRsMl9kZXYpOw0KLQlpZiAocmV0IDwgMCkgew0KLQkJdjRsMl9lcnIoJmlzYy0+djRsMl9kZXYs ICJGYWlsZWQgdG8gcmVnaXN0ZXIgc3ViZGV2IG5vZGVzXG4iKTsNCi0JCXJldHVybiByZXQ7DQot CX0NCi0NCi0JaXNjLT5jdXJyZW50X3N1YmRldiA9IGNvbnRhaW5lcl9vZihub3RpZmllciwNCi0J CQkJCSAgIHN0cnVjdCBpc2Nfc3ViZGV2X2VudGl0eSwgbm90aWZpZXIpOw0KLQltdXRleF9pbml0 KCZpc2MtPmxvY2spOw0KLQlpbml0X2NvbXBsZXRpb24oJmlzYy0+Y29tcCk7DQotDQotCS8qIElu aXRpYWxpemUgdmlkZW9idWYyIHF1ZXVlICovDQotCXEtPnR5cGUJCQk9IFY0TDJfQlVGX1RZUEVf VklERU9fQ0FQVFVSRTsNCi0JcS0+aW9fbW9kZXMJCT0gVkIyX01NQVAgfCBWQjJfRE1BQlVGIHwg VkIyX1JFQUQ7DQotCXEtPmRydl9wcml2CQk9IGlzYzsNCi0JcS0+YnVmX3N0cnVjdF9zaXplCT0g c2l6ZW9mKHN0cnVjdCBpc2NfYnVmZmVyKTsNCi0JcS0+b3BzCQkJPSAmaXNjX3ZiMl9vcHM7DQot CXEtPm1lbV9vcHMJCT0gJnZiMl9kbWFfY29udGlnX21lbW9wczsNCi0JcS0+dGltZXN0YW1wX2Zs YWdzCT0gVjRMMl9CVUZfRkxBR19USU1FU1RBTVBfTU9OT1RPTklDOw0KLQlxLT5sb2NrCQkJPSAm aXNjLT5sb2NrOw0KLQlxLT5taW5fYnVmZmVyc19uZWVkZWQJPSAxOw0KLQlxLT5kZXYJCQk9IGlz Yy0+ZGV2Ow0KLQ0KLQlyZXQgPSB2YjJfcXVldWVfaW5pdChxKTsNCi0JaWYgKHJldCA8IDApIHsN Ci0JCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2LA0KLQkJCSAidmIyX3F1ZXVlX2luaXQoKSBmYWls ZWQ6ICVkXG4iLCByZXQpOw0KLQkJcmV0dXJuIHJldDsNCi0JfQ0KLQ0KLQkvKiBJbml0IHZpZGVv IGRtYSBxdWV1ZXMgKi8NCi0JSU5JVF9MSVNUX0hFQUQoJmlzYy0+ZG1hX3F1ZXVlKTsNCi0Jc3Bp bl9sb2NrX2luaXQoJmlzYy0+ZG1hX3F1ZXVlX2xvY2spOw0KLQlzcGluX2xvY2tfaW5pdCgmaXNj LT5hd2JfbG9jayk7DQotDQotCXJldCA9IGlzY19mb3JtYXRzX2luaXQoaXNjKTsNCi0JaWYgKHJl dCA8IDApIHsNCi0JCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2LA0KLQkJCSAiSW5pdCBmb3JtYXQg ZmFpbGVkOiAlZFxuIiwgcmV0KTsNCi0JCXJldHVybiByZXQ7DQotCX0NCi0NCi0JcmV0ID0gaXNj X3NldF9kZWZhdWx0X2ZtdChpc2MpOw0KLQlpZiAocmV0KSB7DQotCQl2NGwyX2VycigmaXNjLT52 NGwyX2RldiwgIkNvdWxkIG5vdCBzZXQgZGVmYXVsdCBmb3JtYXRcbiIpOw0KLQkJcmV0dXJuIHJl dDsNCi0JfQ0KLQ0KLQlyZXQgPSBpc2NfY3RybF9pbml0KGlzYyk7DQotCWlmIChyZXQpIHsNCi0J CXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2LCAiSW5pdCBpc2MgY3Ryb2xzIGZhaWxlZDogJWRcbiIs IHJldCk7DQotCQlyZXR1cm4gcmV0Ow0KLQl9DQotDQotCS8qIFJlZ2lzdGVyIHZpZGVvIGRldmlj ZSAqLw0KLQlzdHJzY3B5KHZkZXYtPm5hbWUsIEFUTUVMX0lTQ19OQU1FLCBzaXplb2YodmRldi0+ bmFtZSkpOw0KLQl2ZGV2LT5yZWxlYXNlCQk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5Ow0K LQl2ZGV2LT5mb3BzCQk9ICZpc2NfZm9wczsNCi0JdmRldi0+aW9jdGxfb3BzCQk9ICZpc2NfaW9j dGxfb3BzOw0KLQl2ZGV2LT52NGwyX2RldgkJPSAmaXNjLT52NGwyX2RldjsNCi0JdmRldi0+dmZs X2RpcgkJPSBWRkxfRElSX1JYOw0KLQl2ZGV2LT5xdWV1ZQkJPSBxOw0KLQl2ZGV2LT5sb2NrCQk9 ICZpc2MtPmxvY2s7DQotCXZkZXYtPmN0cmxfaGFuZGxlcgk9ICZpc2MtPmN0cmxzLmhhbmRsZXI7 DQotCXZkZXYtPmRldmljZV9jYXBzCT0gVjRMMl9DQVBfU1RSRUFNSU5HIHwgVjRMMl9DQVBfVklE RU9fQ0FQVFVSRTsNCi0JdmlkZW9fc2V0X2RydmRhdGEodmRldiwgaXNjKTsNCi0NCi0JcmV0ID0g dmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHZkZXYsIFZGTF9UWVBFX0dSQUJCRVIsIC0xKTsNCi0JaWYg KHJldCA8IDApIHsNCi0JCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2LA0KLQkJCSAidmlkZW9fcmVn aXN0ZXJfZGV2aWNlIGZhaWxlZDogJWRcbiIsIHJldCk7DQotCQlyZXR1cm4gcmV0Ow0KLQl9DQot DQotCXJldHVybiAwOw0KLX0NCi0NCi1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfYXN5bmNfbm90 aWZpZXJfb3BlcmF0aW9ucyBpc2NfYXN5bmNfb3BzID0gew0KLQkuYm91bmQgPSBpc2NfYXN5bmNf Ym91bmQsDQotCS51bmJpbmQgPSBpc2NfYXN5bmNfdW5iaW5kLA0KLQkuY29tcGxldGUgPSBpc2Nf YXN5bmNfY29tcGxldGUsDQotfTsNCi0NCi1zdGF0aWMgdm9pZCBpc2Nfc3ViZGV2X2NsZWFudXAo c3RydWN0IGlzY19kZXZpY2UgKmlzYykNCi17DQotCXN0cnVjdCBpc2Nfc3ViZGV2X2VudGl0eSAq c3ViZGV2X2VudGl0eTsNCi0NCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShzdWJkZXZfZW50aXR5LCAm aXNjLT5zdWJkZXZfZW50aXRpZXMsIGxpc3QpIHsNCi0JCXY0bDJfYXN5bmNfbm90aWZpZXJfdW5y ZWdpc3Rlcigmc3ViZGV2X2VudGl0eS0+bm90aWZpZXIpOw0KLQkJdjRsMl9hc3luY19ub3RpZmll cl9jbGVhbnVwKCZzdWJkZXZfZW50aXR5LT5ub3RpZmllcik7DQotCX0NCi0NCi0JSU5JVF9MSVNU X0hFQUQoJmlzYy0+c3ViZGV2X2VudGl0aWVzKTsNCi19DQotDQotc3RhdGljIGludCBpc2NfcGlw ZWxpbmVfaW5pdChzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KLXsNCi0Jc3RydWN0IGRldmljZSAq ZGV2ID0gaXNjLT5kZXY7DQotCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0K LQlzdHJ1Y3QgcmVnbWFwX2ZpZWxkICpyZWdzOw0KLQl1bnNpZ25lZCBpbnQgaTsNCi0NCi0JLyog V0ItLT5DRkEtLT5DQy0tPkdBTS0tPkNTQy0tPkNCQy0tPlNVQjQyMi0tPlNVQjQyMCAqLw0KLQlj b25zdCBzdHJ1Y3QgcmVnX2ZpZWxkIHJlZ2ZpZWxkc1tJU0NfUElQRV9MSU5FX05PREVfTlVNXSA9 IHsNCi0JCVJFR19GSUVMRChJU0NfV0JfQ1RSTCwgMCwgMCksDQotCQlSRUdfRklFTEQoSVNDX0NG QV9DVFJMLCAwLCAwKSwNCi0JCVJFR19GSUVMRChJU0NfQ0NfQ1RSTCwgMCwgMCksDQotCQlSRUdf RklFTEQoSVNDX0dBTV9DVFJMLCAwLCAwKSwNCi0JCVJFR19GSUVMRChJU0NfR0FNX0NUUkwsIDEs IDEpLA0KLQkJUkVHX0ZJRUxEKElTQ19HQU1fQ1RSTCwgMiwgMiksDQotCQlSRUdfRklFTEQoSVND X0dBTV9DVFJMLCAzLCAzKSwNCi0JCVJFR19GSUVMRChJU0NfQ1NDX0NUUkwsIDAsIDApLA0KLQkJ UkVHX0ZJRUxEKElTQ19DQkNfQ1RSTCwgMCwgMCksDQotCQlSRUdfRklFTEQoSVNDX1NVQjQyMl9D VFJMLCAwLCAwKSwNCi0JCVJFR19GSUVMRChJU0NfU1VCNDIwX0NUUkwsIDAsIDApLA0KLQl9Ow0K LQ0KLQlmb3IgKGkgPSAwOyBpIDwgSVNDX1BJUEVfTElORV9OT0RFX05VTTsgaSsrKSB7DQotCQly ZWdzID0gZGV2bV9yZWdtYXBfZmllbGRfYWxsb2MoZGV2LCByZWdtYXAsIHJlZ2ZpZWxkc1tpXSk7 DQotCQlpZiAoSVNfRVJSKHJlZ3MpKQ0KLQkJCXJldHVybiBQVFJfRVJSKHJlZ3MpOw0KLQ0KLQkJ aXNjLT5waXBlbGluZVtpXSA9ICByZWdzOw0KLQl9DQotDQotCXJldHVybiAwOw0KLX0NCi0NCi1z dGF0aWMgaW50IGlzY19wYXJzZV9kdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBpc2NfZGV2 aWNlICppc2MpDQotew0KLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOw0K LQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmVwbiA9IE5VTEwsICpyZW07DQotCXN0cnVjdCBpc2Nfc3Vi ZGV2X2VudGl0eSAqc3ViZGV2X2VudGl0eTsNCi0JdW5zaWduZWQgaW50IGZsYWdzOw0KLQlpbnQg cmV0Ow0KLQ0KLQlJTklUX0xJU1RfSEVBRCgmaXNjLT5zdWJkZXZfZW50aXRpZXMpOw0KLQ0KLQl3 aGlsZSAoMSkgew0KLQkJc3RydWN0IHY0bDJfZndub2RlX2VuZHBvaW50IHY0bDJfZXBuID0geyAu YnVzX3R5cGUgPSAwIH07DQotDQotCQllcG4gPSBvZl9ncmFwaF9nZXRfbmV4dF9lbmRwb2ludChu cCwgZXBuKTsNCi0JCWlmICghZXBuKQ0KLQkJCXJldHVybiAwOw0KLQ0KLQkJcmVtID0gb2ZfZ3Jh cGhfZ2V0X3JlbW90ZV9wb3J0X3BhcmVudChlcG4pOw0KLQkJaWYgKCFyZW0pIHsNCi0JCQlkZXZf bm90aWNlKGRldiwgIlJlbW90ZSBkZXZpY2UgYXQgJXBPRiBub3QgZm91bmRcbiIsDQotCQkJCSAg IGVwbik7DQotCQkJY29udGludWU7DQotCQl9DQotDQotCQlyZXQgPSB2NGwyX2Z3bm9kZV9lbmRw b2ludF9wYXJzZShvZl9md25vZGVfaGFuZGxlKGVwbiksDQotCQkJCQkJICZ2NGwyX2Vwbik7DQot CQlpZiAocmV0KSB7DQotCQkJb2Zfbm9kZV9wdXQocmVtKTsNCi0JCQlyZXQgPSAtRUlOVkFMOw0K LQkJCWRldl9lcnIoZGV2LCAiQ291bGQgbm90IHBhcnNlIHRoZSBlbmRwb2ludFxuIik7DQotCQkJ YnJlYWs7DQotCQl9DQotDQotCQlzdWJkZXZfZW50aXR5ID0gZGV2bV9remFsbG9jKGRldiwNCi0J CQkJCSAgc2l6ZW9mKCpzdWJkZXZfZW50aXR5KSwgR0ZQX0tFUk5FTCk7DQotCQlpZiAoIXN1YmRl dl9lbnRpdHkpIHsNCi0JCQlvZl9ub2RlX3B1dChyZW0pOw0KLQkJCXJldCA9IC1FTk9NRU07DQot CQkJYnJlYWs7DQotCQl9DQotDQotCQkvKiBhc2Qgd2lsbCBiZSBmcmVlZCBieSB0aGUgc3Vic3lz dGVtIG9uY2UgaXQncyBhZGRlZCB0byB0aGUNCi0JCSAqIG5vdGlmaWVyIGxpc3QNCi0JCSAqLw0K LQkJc3ViZGV2X2VudGl0eS0+YXNkID0ga3phbGxvYyhzaXplb2YoKnN1YmRldl9lbnRpdHktPmFz ZCksDQotCQkJCQkgICAgIEdGUF9LRVJORUwpOw0KLQkJaWYgKCFzdWJkZXZfZW50aXR5LT5hc2Qp IHsNCi0JCQlvZl9ub2RlX3B1dChyZW0pOw0KLQkJCXJldCA9IC1FTk9NRU07DQotCQkJYnJlYWs7 DQotCQl9DQotDQotCQlmbGFncyA9IHY0bDJfZXBuLmJ1cy5wYXJhbGxlbC5mbGFnczsNCi0NCi0J CWlmIChmbGFncyAmIFY0TDJfTUJVU19IU1lOQ19BQ1RJVkVfTE9XKQ0KLQkJCXN1YmRldl9lbnRp dHktPnBmZV9jZmcwID0gSVNDX1BGRV9DRkcwX0hQT0xfTE9XOw0KLQ0KLQkJaWYgKGZsYWdzICYg VjRMMl9NQlVTX1ZTWU5DX0FDVElWRV9MT1cpDQotCQkJc3ViZGV2X2VudGl0eS0+cGZlX2NmZzAg fD0gSVNDX1BGRV9DRkcwX1ZQT0xfTE9XOw0KLQ0KLQkJaWYgKGZsYWdzICYgVjRMMl9NQlVTX1BD TEtfU0FNUExFX0ZBTExJTkcpDQotCQkJc3ViZGV2X2VudGl0eS0+cGZlX2NmZzAgfD0gSVNDX1BG RV9DRkcwX1BQT0xfTE9XOw0KLQ0KLQkJaWYgKHY0bDJfZXBuLmJ1c190eXBlID09IFY0TDJfTUJV U19CVDY1NikNCi0JCQlzdWJkZXZfZW50aXR5LT5wZmVfY2ZnMCB8PSBJU0NfUEZFX0NGRzBfQ0NJ Ul9DUkMgfA0KLQkJCQkJSVNDX1BGRV9DRkcwX0NDSVI2NTY7DQotDQotCQlzdWJkZXZfZW50aXR5 LT5hc2QtPm1hdGNoX3R5cGUgPSBWNEwyX0FTWU5DX01BVENIX0ZXTk9ERTsNCi0JCXN1YmRldl9l bnRpdHktPmFzZC0+bWF0Y2guZndub2RlID0NCi0JCQlvZl9md25vZGVfaGFuZGxlKHJlbSk7DQot CQlsaXN0X2FkZF90YWlsKCZzdWJkZXZfZW50aXR5LT5saXN0LCAmaXNjLT5zdWJkZXZfZW50aXRp ZXMpOw0KLQl9DQotDQotCW9mX25vZGVfcHV0KGVwbik7DQotCXJldHVybiByZXQ7DQotfQ0KLQ0K LS8qIHJlZ21hcCBjb25maWd1cmF0aW9uICovDQotI2RlZmluZSBBVE1FTF9JU0NfUkVHX01BWCAg ICAweGJmYw0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBpc2NfcmVnbWFwX2Nv bmZpZyA9IHsNCi0JLnJlZ19iaXRzICAgICAgID0gMzIsDQotCS5yZWdfc3RyaWRlICAgICA9IDQs DQotCS52YWxfYml0cyAgICAgICA9IDMyLA0KLQkubWF4X3JlZ2lzdGVyCT0gQVRNRUxfSVNDX1JF R19NQVgsDQotfTsNCi0NCi1zdGF0aWMgaW50IGF0bWVsX2lzY19wcm9iZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQ0KLXsNCi0Jc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsN Ci0Jc3RydWN0IGlzY19kZXZpY2UgKmlzYzsNCi0Jc3RydWN0IHJlc291cmNlICpyZXM7DQotCXZv aWQgX19pb21lbSAqaW9fYmFzZTsNCi0Jc3RydWN0IGlzY19zdWJkZXZfZW50aXR5ICpzdWJkZXZf ZW50aXR5Ow0KLQlpbnQgaXJxOw0KLQlpbnQgcmV0Ow0KLQ0KLQlpc2MgPSBkZXZtX2t6YWxsb2Mo ZGV2LCBzaXplb2YoKmlzYyksIEdGUF9LRVJORUwpOw0KLQlpZiAoIWlzYykNCi0JCXJldHVybiAt RU5PTUVNOw0KLQ0KLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpc2MpOw0KLQlpc2MtPmRl diA9IGRldjsNCi0NCi0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VS Q0VfTUVNLCAwKTsNCi0JaW9fYmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7 DQotCWlmIChJU19FUlIoaW9fYmFzZSkpDQotCQlyZXR1cm4gUFRSX0VSUihpb19iYXNlKTsNCi0N Ci0JaXNjLT5yZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X21taW8oZGV2LCBpb19iYXNlLCAmaXNj X3JlZ21hcF9jb25maWcpOw0KLQlpZiAoSVNfRVJSKGlzYy0+cmVnbWFwKSkgew0KLQkJcmV0ID0g UFRSX0VSUihpc2MtPnJlZ21hcCk7DQotCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBpbml0IHJl Z2lzdGVyIG1hcDogJWRcbiIsIHJldCk7DQotCQlyZXR1cm4gcmV0Ow0KLQl9DQotDQotCWlycSA9 IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7DQotCWlmIChpcnEgPCAwKSB7DQotCQlyZXQgPSBp cnE7DQotCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgaXJxOiAlZFxuIiwgcmV0KTsNCi0J CXJldHVybiByZXQ7DQotCX0NCi0NCi0JcmV0ID0gZGV2bV9yZXF1ZXN0X2lycShkZXYsIGlycSwg aXNjX2ludGVycnVwdCwgMCwNCi0JCQkgICAgICAgQVRNRUxfSVNDX05BTUUsIGlzYyk7DQotCWlm IChyZXQgPCAwKSB7DQotCQlkZXZfZXJyKGRldiwgImNhbid0IHJlZ2lzdGVyIElTUiBmb3IgSVJR ICV1IChyZXQ9JWkpXG4iLA0KLQkJCWlycSwgcmV0KTsNCi0JCXJldHVybiByZXQ7DQotCX0NCi0N Ci0JcmV0ID0gaXNjX3BpcGVsaW5lX2luaXQoaXNjKTsNCi0JaWYgKHJldCkNCi0JCXJldHVybiBy ZXQ7DQotDQotCWlzYy0+aGNsb2NrID0gZGV2bV9jbGtfZ2V0KGRldiwgImhjbG9jayIpOw0KLQlp ZiAoSVNfRVJSKGlzYy0+aGNsb2NrKSkgew0KLQkJcmV0ID0gUFRSX0VSUihpc2MtPmhjbG9jayk7 DQotCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgaGNsb2NrOiAlZFxuIiwgcmV0KTsNCi0J CXJldHVybiByZXQ7DQotCX0NCi0NCi0JcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGlzYy0+aGNs b2NrKTsNCi0JaWYgKHJldCkgew0KLQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZW5hYmxlIGhj bG9jazogJWRcbiIsIHJldCk7DQotCQlyZXR1cm4gcmV0Ow0KLQl9DQotDQotCXJldCA9IGlzY19j bGtfaW5pdChpc2MpOw0KLQlpZiAocmV0KSB7DQotCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBp bml0IGlzYyBjbG9jazogJWRcbiIsIHJldCk7DQotCQlnb3RvIHVucHJlcGFyZV9oY2xrOw0KLQl9 DQotDQotCWlzYy0+aXNwY2sgPSBpc2MtPmlzY19jbGtzW0lTQ19JU1BDS10uY2xrOw0KLQ0KLQly ZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoaXNjLT5pc3Bjayk7DQotCWlmIChyZXQpIHsNCi0JCWRl dl9lcnIoZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBpc3BjazogJWRcbiIsIHJldCk7DQotCQlnb3Rv IHVucHJlcGFyZV9oY2xrOw0KLQl9DQotDQotCS8qIGlzcGNrIHNob3VsZCBiZSBncmVhdGVyIG9y IGVxdWFsIHRvIGhjbG9jayAqLw0KLQlyZXQgPSBjbGtfc2V0X3JhdGUoaXNjLT5pc3BjaywgY2xr X2dldF9yYXRlKGlzYy0+aGNsb2NrKSk7DQotCWlmIChyZXQpIHsNCi0JCWRldl9lcnIoZGV2LCAi ZmFpbGVkIHRvIHNldCBpc3BjayByYXRlOiAlZFxuIiwgcmV0KTsNCi0JCWdvdG8gdW5wcmVwYXJl X2NsazsNCi0JfQ0KLQ0KLQlyZXQgPSB2NGwyX2RldmljZV9yZWdpc3RlcihkZXYsICZpc2MtPnY0 bDJfZGV2KTsNCi0JaWYgKHJldCkgew0KLQkJZGV2X2VycihkZXYsICJ1bmFibGUgdG8gcmVnaXN0 ZXIgdjRsMiBkZXZpY2UuXG4iKTsNCi0JCWdvdG8gdW5wcmVwYXJlX2NsazsNCi0JfQ0KLQ0KLQly ZXQgPSBpc2NfcGFyc2VfZHQoZGV2LCBpc2MpOw0KLQlpZiAocmV0KSB7DQotCQlkZXZfZXJyKGRl diwgImZhaWwgdG8gcGFyc2UgZGV2aWNlIHRyZWVcbiIpOw0KLQkJZ290byB1bnJlZ2lzdGVyX3Y0 bDJfZGV2aWNlOw0KLQl9DQotDQotCWlmIChsaXN0X2VtcHR5KCZpc2MtPnN1YmRldl9lbnRpdGll cykpIHsNCi0JCWRldl9lcnIoZGV2LCAibm8gc3ViZGV2IGZvdW5kXG4iKTsNCi0JCXJldCA9IC1F Tk9ERVY7DQotCQlnb3RvIHVucmVnaXN0ZXJfdjRsMl9kZXZpY2U7DQotCX0NCi0NCi0JbGlzdF9m b3JfZWFjaF9lbnRyeShzdWJkZXZfZW50aXR5LCAmaXNjLT5zdWJkZXZfZW50aXRpZXMsIGxpc3Qp IHsNCi0JCXY0bDJfYXN5bmNfbm90aWZpZXJfaW5pdCgmc3ViZGV2X2VudGl0eS0+bm90aWZpZXIp Ow0KLQ0KLQkJcmV0ID0gdjRsMl9hc3luY19ub3RpZmllcl9hZGRfc3ViZGV2KCZzdWJkZXZfZW50 aXR5LT5ub3RpZmllciwNCi0JCQkJCQkgICAgIHN1YmRldl9lbnRpdHktPmFzZCk7DQotCQlpZiAo cmV0KSB7DQotCQkJZndub2RlX2hhbmRsZV9wdXQoc3ViZGV2X2VudGl0eS0+YXNkLT5tYXRjaC5m d25vZGUpOw0KLQkJCWtmcmVlKHN1YmRldl9lbnRpdHktPmFzZCk7DQotCQkJZ290byBjbGVhbnVw X3N1YmRldjsNCi0JCX0NCi0NCi0JCXN1YmRldl9lbnRpdHktPm5vdGlmaWVyLm9wcyA9ICZpc2Nf YXN5bmNfb3BzOw0KLQ0KLQkJcmV0ID0gdjRsMl9hc3luY19ub3RpZmllcl9yZWdpc3RlcigmaXNj LT52NGwyX2RldiwNCi0JCQkJCQkgICAmc3ViZGV2X2VudGl0eS0+bm90aWZpZXIpOw0KLQkJaWYg KHJldCkgew0KLQkJCWRldl9lcnIoZGV2LCAiZmFpbCB0byByZWdpc3RlciBhc3luYyBub3RpZmll clxuIik7DQotCQkJZ290byBjbGVhbnVwX3N1YmRldjsNCi0JCX0NCi0NCi0JCWlmICh2aWRlb19p c19yZWdpc3RlcmVkKCZpc2MtPnZpZGVvX2RldikpDQotCQkJYnJlYWs7DQotCX0NCi0NCi0JcG1f cnVudGltZV9zZXRfYWN0aXZlKGRldik7DQotCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7DQotCXBt X3JlcXVlc3RfaWRsZShkZXYpOw0KLQ0KLQlyZXR1cm4gMDsNCi0NCi1jbGVhbnVwX3N1YmRldjoN Ci0JaXNjX3N1YmRldl9jbGVhbnVwKGlzYyk7DQotDQotdW5yZWdpc3Rlcl92NGwyX2RldmljZToN Ci0JdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmaXNjLT52NGwyX2Rldik7DQotDQotdW5wcmVwYXJl X2NsazoNCi0JY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGlzYy0+aXNwY2spOw0KLXVucHJlcGFyZV9o Y2xrOg0KLQljbGtfZGlzYWJsZV91bnByZXBhcmUoaXNjLT5oY2xvY2spOw0KLQ0KLQlpc2NfY2xr X2NsZWFudXAoaXNjKTsNCi0NCi0JcmV0dXJuIHJldDsNCi19DQotDQotc3RhdGljIGludCBhdG1l bF9pc2NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQotew0KLQlzdHJ1Y3Qg aXNjX2RldmljZSAqaXNjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7DQotDQotCXBtX3J1 bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsNCi0JY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGlzYy0+ aXNwY2spOw0KLQljbGtfZGlzYWJsZV91bnByZXBhcmUoaXNjLT5oY2xvY2spOw0KLQ0KLQlpc2Nf c3ViZGV2X2NsZWFudXAoaXNjKTsNCi0NCi0JdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmaXNjLT52 NGwyX2Rldik7DQotDQotCWlzY19jbGtfY2xlYW51cChpc2MpOw0KLQ0KLQlyZXR1cm4gMDsNCi19 DQotDQotc3RhdGljIGludCBfX21heWJlX3VudXNlZCBpc2NfcnVudGltZV9zdXNwZW5kKHN0cnVj dCBkZXZpY2UgKmRldikNCi17DQotCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSBkZXZfZ2V0X2Ry dmRhdGEoZGV2KTsNCi0NCi0JY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGlzYy0+aXNwY2spOw0KLQlj bGtfZGlzYWJsZV91bnByZXBhcmUoaXNjLT5oY2xvY2spOw0KLQ0KLQlyZXR1cm4gMDsNCi19DQot DQotc3RhdGljIGludCBfX21heWJlX3VudXNlZCBpc2NfcnVudGltZV9yZXN1bWUoc3RydWN0IGRl dmljZSAqZGV2KQ0KLXsNCi0Jc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IGRldl9nZXRfZHJ2ZGF0 YShkZXYpOw0KLQlpbnQgcmV0Ow0KLQ0KLQlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoaXNjLT5o Y2xvY2spOw0KLQlpZiAocmV0KQ0KLQkJcmV0dXJuIHJldDsNCi0NCi0JcmV0dXJuIGNsa19wcmVw YXJlX2VuYWJsZShpc2MtPmlzcGNrKTsNCi19DQotDQotc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZf cG1fb3BzIGF0bWVsX2lzY19kZXZfcG1fb3BzID0gew0KLQlTRVRfUlVOVElNRV9QTV9PUFMoaXNj X3J1bnRpbWVfc3VzcGVuZCwgaXNjX3J1bnRpbWVfcmVzdW1lLCBOVUxMKQ0KLX07DQotDQotc3Rh dGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXRtZWxfaXNjX29mX21hdGNoW10gPSB7DQot CXsgLmNvbXBhdGlibGUgPSAiYXRtZWwsc2FtYTVkMi1pc2MiIH0sDQotCXsgfQ0KLX07DQotTU9E VUxFX0RFVklDRV9UQUJMRShvZiwgYXRtZWxfaXNjX29mX21hdGNoKTsNCi0NCi1zdGF0aWMgc3Ry dWN0IHBsYXRmb3JtX2RyaXZlciBhdG1lbF9pc2NfZHJpdmVyID0gew0KLQkucHJvYmUJPSBhdG1l bF9pc2NfcHJvYmUsDQotCS5yZW1vdmUJPSBhdG1lbF9pc2NfcmVtb3ZlLA0KLQkuZHJpdmVyCT0g ew0KLQkJLm5hbWUJCT0gQVRNRUxfSVNDX05BTUUsDQotCQkucG0JCT0gJmF0bWVsX2lzY19kZXZf cG1fb3BzLA0KLQkJLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKGF0bWVsX2lzY19vZl9t YXRjaCksDQotCX0sDQotfTsNCi0NCi1tb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGF0bWVsX2lzY19k cml2ZXIpOw0KLQ0KLU1PRFVMRV9BVVRIT1IoIlNvbmdqdW4gV3UgPHNvbmdqdW4ud3VAbWljcm9j aGlwLmNvbT4iKTsNCi1NT0RVTEVfREVTQ1JJUFRJT04oIlRoZSBWNEwyIGRyaXZlciBmb3IgQXRt ZWwtSVNDIik7DQotTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOw0KLU1PRFVMRV9TVVBQT1JURURf REVWSUNFKCJ2aWRlbyIpOw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRt ZWwvYXRtZWwtaXNjLmggYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2F0bWVsL2F0bWVsLWlzYy5o DQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uM2VhOTdmMQ0KLS0tIC9kZXYv bnVsbA0KKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hdG1lbC9hdG1lbC1pc2MuaA0KQEAg LTAsMCArMSwxOTIgQEANCisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0K Ky8qDQorICogTWljcm9jaGlwIEltYWdlIFNlbnNvciBDb250cm9sbGVyIChJU0MpIGRyaXZlciBo ZWFkZXIgZmlsZQ0KKyAqDQorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgTWljcm9jaGlwIFRl Y2hub2xvZ3ksIEluYy4NCisgKg0KKyAqIEF1dGhvcjogU29uZ2p1biBXdSA8c29uZ2p1bi53dUBt aWNyb2NoaXAuY29tPg0KKyAqIEF1dGhvcjogRXVnZW4gSHJpc3RldiA8ZXVnZW4uaHJpc3RldkBt aWNyb2NoaXAuY29tPg0KKyAqDQorICovDQorI2lmbmRlZiBfQVRNRUxfSVNDX0hfDQorDQorI2Rl ZmluZSBJU0NfTUFYX1NVUFBPUlRfV0lEVEggICAyNTkyDQorI2RlZmluZSBJU0NfTUFYX1NVUFBP UlRfSEVJR0hUICAxOTQ0DQorDQorI2RlZmluZSBJU0NfQ0xLX01BWF9ESVYJCTI1NQ0KKw0KK2Vu dW0gaXNjX2Nsa19pZCB7DQorCUlTQ19JU1BDSyA9IDAsDQorCUlTQ19NQ0sgPSAxLA0KK307DQor DQorc3RydWN0IGlzY19jbGsgew0KKwlzdHJ1Y3QgY2xrX2h3ICAgaHc7DQorCXN0cnVjdCBjbGsg ICAgICAqY2xrOw0KKwlzdHJ1Y3QgcmVnbWFwICAgKnJlZ21hcDsNCisJc3BpbmxvY2tfdAlsb2Nr Ow0KKwl1OAkJaWQ7DQorCXU4CQlwYXJlbnRfaWQ7DQorCXUzMgkJZGl2Ow0KKwlzdHJ1Y3QgZGV2 aWNlCSpkZXY7DQorfTsNCisNCisjZGVmaW5lIHRvX2lzY19jbGsoaHcpIGNvbnRhaW5lcl9vZiho dywgc3RydWN0IGlzY19jbGssIGh3KQ0KKw0KK3N0cnVjdCBpc2NfYnVmZmVyIHsNCisJc3RydWN0 IHZiMl92NGwyX2J1ZmZlciAgdmI7DQorCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsNCit9Ow0KKw0K K3N0cnVjdCBpc2Nfc3ViZGV2X2VudGl0eSB7DQorCXN0cnVjdCB2NGwyX3N1YmRldgkJKnNkOw0K KwlzdHJ1Y3QgdjRsMl9hc3luY19zdWJkZXYJKmFzZDsNCisJc3RydWN0IHY0bDJfYXN5bmNfbm90 aWZpZXIgICAgICBub3RpZmllcjsNCisNCisJdTMyIHBmZV9jZmcwOw0KKw0KKwlzdHJ1Y3QgbGlz dF9oZWFkIGxpc3Q7DQorfTsNCisNCisvKg0KKyAqIHN0cnVjdCBpc2NfZm9ybWF0IC0gSVNDIG1l ZGlhIGJ1cyBmb3JtYXQgaW5mb3JtYXRpb24NCisJCQlUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRz IHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgSVNDDQorCQkJYW5kIHRoZSBzZW5zb3IuIEl0J3Mg dGhlIGlucHV0IGZvcm1hdCByZWNlaXZlZCBieQ0KKwkJCXRoZSBJU0MuDQorICogQGZvdXJjYzoJ CUZvdXJjYyBjb2RlIGZvciB0aGlzIGZvcm1hdA0KKyAqIEBtYnVzX2NvZGU6CQlWNEwyIG1lZGlh IGJ1cyBmb3JtYXQgY29kZS4NCisgKiBAY2ZhX2JheWNmZzoJCUlmIHRoaXMgZm9ybWF0IGlzIFJB VyBCQVlFUiwgaW5kaWNhdGUgdGhlIHR5cGUgb2YgYmF5ZXIuDQorCQkJdGhpcyBpcyBlaXRoZXIg QkdCRywgUkdSRywgZXRjLg0KKyAqIEBwZmVfY2ZnMF9icHM6CU51bWJlciBvZiBoYXJkd2FyZSBk YXRhIGxpbmVzIGNvbm5lY3RlZCB0byB0aGUgSVNDDQorICovDQorDQorc3RydWN0IGlzY19mb3Jt YXQgew0KKwl1MzIJZm91cmNjOw0KKwl1MzIJbWJ1c19jb2RlOw0KKwl1MzIJY2ZhX2JheWNmZzsN CisNCisJYm9vbAlzZF9zdXBwb3J0Ow0KKwl1MzIJcGZlX2NmZzBfYnBzOw0KK307DQorDQorLyog UGlwZWxpbmUgYml0bWFwICovDQorI2RlZmluZSBXQl9FTkFCTEUJQklUKDApDQorI2RlZmluZSBD RkFfRU5BQkxFCUJJVCgxKQ0KKyNkZWZpbmUgQ0NfRU5BQkxFCUJJVCgyKQ0KKyNkZWZpbmUgR0FN X0VOQUJMRQlCSVQoMykNCisjZGVmaW5lIEdBTV9CRU5BQkxFCUJJVCg0KQ0KKyNkZWZpbmUgR0FN X0dFTkFCTEUJQklUKDUpDQorI2RlZmluZSBHQU1fUkVOQUJMRQlCSVQoNikNCisjZGVmaW5lIENT Q19FTkFCTEUJQklUKDcpDQorI2RlZmluZSBDQkNfRU5BQkxFCUJJVCg4KQ0KKyNkZWZpbmUgU1VC NDIyX0VOQUJMRQlCSVQoOSkNCisjZGVmaW5lIFNVQjQyMF9FTkFCTEUJQklUKDEwKQ0KKw0KKyNk ZWZpbmUgR0FNX0VOQUJMRVMJKEdBTV9SRU5BQkxFIHwgR0FNX0dFTkFCTEUgfCBHQU1fQkVOQUJM RSB8IEdBTV9FTkFCTEUpDQorDQorLyoNCisgKiBzdHJ1Y3QgZm10X2NvbmZpZyAtIElTQyBmb3Jt YXQgY29uZmlndXJhdGlvbiBhbmQgaW50ZXJuYWwgcGlwZWxpbmUNCisJCQlUaGlzIHN0cnVjdHVy ZSByZXByZXNlbnRzIHRoZSBpbnRlcm5hbCBjb25maWd1cmF0aW9uDQorCQkJb2YgdGhlIElTQy4N CisJCQlJdCBhbHNvIGhvbGRzIHRoZSBmb3JtYXQgdGhhdCBJU0Mgd2lsbCBwcmVzZW50IHRvIHY0 bDIuDQorICogQHNkX2Zvcm1hdDoJCVBvaW50ZXIgdG8gYW4gaXNjX2Zvcm1hdCBzdHJ1Y3QgdGhh dCBob2xkcyB0aGUgc2Vuc29yDQorCQkJY29uZmlndXJhdGlvbi4NCisgKiBAZm91cmNjOgkJRm91 cmNjIGNvZGUgZm9yIHRoaXMgZm9ybWF0Lg0KKyAqIEBicHA6CQlCeXRlcyBwZXIgcGl4ZWwgaW4g dGhlIGN1cnJlbnQgZm9ybWF0Lg0KKyAqIEBybHBfY2ZnX21vZGU6CUNvbmZpZ3VyYXRpb24gb2Yg dGhlIFJMUCAocm91bmRpbmcsIGxpbWl0aW5nIHBhY2thZ2luZykNCisgKiBAZGNmZ19pbW9kZToJ CUNvbmZpZ3VyYXRpb24gb2YgdGhlIGlucHV0IG9mIHRoZSBETUEgbW9kdWxlDQorICogQGRjdHJs X2R2aWV3OglDb25maWd1cmF0aW9uIG9mIHRoZSBvdXRwdXQgb2YgdGhlIERNQSBtb2R1bGUNCisg KiBAYml0c19waXBlbGluZToJQ29uZmlndXJhdGlvbiBvZiB0aGUgcGlwZWxpbmUsIHdoaWNoIG1v ZHVsZXMgYXJlIGVuYWJsZWQNCisgKi8NCitzdHJ1Y3QgZm10X2NvbmZpZyB7DQorCXN0cnVjdCBp c2NfZm9ybWF0CSpzZF9mb3JtYXQ7DQorDQorCXUzMgkJCWZvdXJjYzsNCisJdTgJCQlicHA7DQor DQorCXUzMgkJCXJscF9jZmdfbW9kZTsNCisJdTMyCQkJZGNmZ19pbW9kZTsNCisJdTMyCQkJZGN0 cmxfZHZpZXc7DQorDQorCXUzMgkJCWJpdHNfcGlwZWxpbmU7DQorfTsNCisNCisjZGVmaW5lIEhJ U1RfRU5UUklFUwkJNTEyDQorI2RlZmluZSBISVNUX0JBWUVSCQkoSVNDX0hJU19DRkdfTU9ERV9C ICsgMSkNCisNCitlbnVtew0KKwlISVNUX0lOSVQgPSAwLA0KKwlISVNUX0VOQUJMRUQsDQorCUhJ U1RfRElTQUJMRUQsDQorfTsNCisNCitzdHJ1Y3QgaXNjX2N0cmxzIHsNCisJc3RydWN0IHY0bDJf Y3RybF9oYW5kbGVyIGhhbmRsZXI7DQorDQorCXUzMiBicmlnaHRuZXNzOw0KKwl1MzIgY29udHJh c3Q7DQorCXU4IGdhbW1hX2luZGV4Ow0KKyNkZWZpbmUgSVNDX1dCX05PTkUJMA0KKyNkZWZpbmUg SVNDX1dCX0FVVE8JMQ0KKyNkZWZpbmUgSVNDX1dCX09ORVRJTUUJMg0KKwl1OCBhd2I7DQorDQor CS8qIG9uZSBmb3IgZWFjaCBjb21wb25lbnQgOiBHUiwgUiwgR0IsIEIgKi8NCisJdTMyIGdhaW5b SElTVF9CQVlFUl07DQorCXUzMiBvZmZzZXRbSElTVF9CQVlFUl07DQorDQorCXUzMiBoaXN0X2Vu dHJ5W0hJU1RfRU5UUklFU107DQorCXUzMiBoaXN0X2NvdW50W0hJU1RfQkFZRVJdOw0KKwl1OCBo aXN0X2lkOw0KKwl1OCBoaXN0X3N0YXQ7DQorI2RlZmluZSBISVNUX01JTl9JTkRFWAkJMA0KKyNk ZWZpbmUgSElTVF9NQVhfSU5ERVgJCTENCisJdTMyIGhpc3RfbWlubWF4W0hJU1RfQkFZRVJdWzJd Ow0KK307DQorDQorI2RlZmluZSBJU0NfUElQRV9MSU5FX05PREVfTlVNCTExDQorDQorc3RydWN0 IGlzY19kZXZpY2Ugew0KKwlzdHJ1Y3QgcmVnbWFwCQkqcmVnbWFwOw0KKwlzdHJ1Y3QgY2xrCQkq aGNsb2NrOw0KKwlzdHJ1Y3QgY2xrCQkqaXNwY2s7DQorCXN0cnVjdCBpc2NfY2xrCQlpc2NfY2xr c1syXTsNCisNCisJc3RydWN0IGRldmljZQkJKmRldjsNCisJc3RydWN0IHY0bDJfZGV2aWNlCXY0 bDJfZGV2Ow0KKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlCXZpZGVvX2RldjsNCisNCisJc3RydWN0IHZi Ml9xdWV1ZQl2YjJfdmlkcTsNCisJc3BpbmxvY2tfdAkJZG1hX3F1ZXVlX2xvY2s7DQorCXN0cnVj dCBsaXN0X2hlYWQJZG1hX3F1ZXVlOw0KKwlzdHJ1Y3QgaXNjX2J1ZmZlcgkqY3VyX2ZybTsNCisJ dW5zaWduZWQgaW50CQlzZXF1ZW5jZTsNCisJYm9vbAkJCXN0b3A7DQorCXN0cnVjdCBjb21wbGV0 aW9uCWNvbXA7DQorDQorCXN0cnVjdCB2NGwyX2Zvcm1hdAlmbXQ7DQorCXN0cnVjdCBpc2NfZm9y bWF0CSoqdXNlcl9mb3JtYXRzOw0KKwl1bnNpZ25lZCBpbnQJCW51bV91c2VyX2Zvcm1hdHM7DQor DQorCXN0cnVjdCBmbXRfY29uZmlnCWNvbmZpZzsNCisJc3RydWN0IGZtdF9jb25maWcJdHJ5X2Nv bmZpZzsNCisNCisJc3RydWN0IGlzY19jdHJscwljdHJsczsNCisJc3RydWN0IHY0bDJfY3RybAkq ZG9fd2JfY3RybDsNCisJc3RydWN0IHdvcmtfc3RydWN0CWF3Yl93b3JrOw0KKw0KKwlzdHJ1Y3Qg bXV0ZXgJCWxvY2s7DQorCXNwaW5sb2NrX3QJCWF3Yl9sb2NrOw0KKw0KKwlzdHJ1Y3QgcmVnbWFw X2ZpZWxkCSpwaXBlbGluZVtJU0NfUElQRV9MSU5FX05PREVfTlVNXTsNCisNCisJc3RydWN0IGlz Y19zdWJkZXZfZW50aXR5CSpjdXJyZW50X3N1YmRldjsNCisJc3RydWN0IGxpc3RfaGVhZAkJc3Vi ZGV2X2VudGl0aWVzOw0KK307DQorDQorI2RlZmluZSBHQU1NQV9NQVgJMg0KKyNkZWZpbmUgR0FN TUFfRU5UUklFUwk2NA0KKw0KKyNkZWZpbmUgQVRNRUxfSVNDX05BTUUgImF0bWVsLWlzYyINCisN CisjZW5kaWYNCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2F0bWVsL2F0bWVs LXNhbWE1ZDItaXNjLmMgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2F0bWVsL2F0bWVsLXNhbWE1 ZDItaXNjLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi43MzkzYTIxDQot LS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2F0bWVsL2F0bWVsLXNh bWE1ZDItaXNjLmMNCkBAIC0wLDAgKzEsMzY1IEBADQorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjANCisvKg0KKyAqIE1pY3JvY2hpcCBJbWFnZSBTZW5zb3IgQ29udHJvbGxlciAo SVNDKSBkcml2ZXINCisgKg0KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IE1pY3JvY2hpcCBU ZWNobm9sb2d5LCBJbmMuDQorICoNCisgKiBBdXRob3I6IFNvbmdqdW4gV3UgPHNvbmdqdW4ud3VA bWljcm9jaGlwLmNvbT4NCisgKiBBdXRob3I6IEV1Z2VuIEhyaXN0ZXYgPGV1Z2VuLmhyaXN0ZXZA bWljcm9jaGlwLmNvbT4NCisgKg0KKyAqDQorICogU2Vuc29yLS0+UEZFLS0+V0ItLT5DRkEtLT5D Qy0tPkdBTS0tPkNTQy0tPkNCQy0tPlNVQi0tPlJMUC0tPkRNQQ0KKyAqDQorICogSVNDIHZpZGVv IHBpcGVsaW5lIGludGVncmF0ZXMgdGhlIGZvbGxvd2luZyBzdWJtb2R1bGVzOg0KKyAqIFBGRTog UGFyYWxsZWwgRnJvbnQgRW5kIHRvIHNhbXBsZSB0aGUgY2FtZXJhIHNlbnNvciBpbnB1dCBzdHJl YW0NCisgKiAgV0I6IFByb2dyYW1tYWJsZSB3aGl0ZSBiYWxhbmNlIGluIHRoZSBCYXllciBkb21h aW4NCisgKiBDRkE6IENvbG9yIGZpbHRlciBhcnJheSBpbnRlcnBvbGF0aW9uIG1vZHVsZQ0KKyAq ICBDQzogUHJvZ3JhbW1hYmxlIGNvbG9yIGNvcnJlY3Rpb24NCisgKiBHQU06IEdhbW1hIGNvcnJl Y3Rpb24NCisgKiBDU0M6IFByb2dyYW1tYWJsZSBjb2xvciBzcGFjZSBjb252ZXJzaW9uDQorICog Q0JDOiBDb250cmFzdCBhbmQgQnJpZ2h0bmVzcyBjb250cm9sDQorICogU1VCOiBUaGlzIG1vZHVs ZSBwZXJmb3JtcyBZQ2JDcjQ0NCB0byBZQ2JDcjQyMCBjaHJvbWluYW5jZSBzdWJzYW1wbGluZw0K KyAqIFJMUDogVGhpcyBtb2R1bGUgcGVyZm9ybXMgcm91bmRpbmcsIHJhbmdlIGxpbWl0aW5nDQor ICogICAgICBhbmQgcGFja2luZyBvZiB0aGUgaW5jb21pbmcgZGF0YQ0KKyAqLw0KKw0KKyNpbmNs dWRlIDxsaW51eC9jbGsuaD4NCisjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+DQorI2luY2x1ZGUg PGxpbnV4L2Nsay1wcm92aWRlci5oPg0KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KKyNpbmNs dWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4NCisjaW5jbHVkZSA8bGludXgvbWF0aDY0Lmg+DQorI2lu Y2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9vZi5oPg0KKyNpbmNsdWRl IDxsaW51eC9vZl9ncmFwaC5oPg0KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4N CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAu aD4NCisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+DQorDQorI2luY2x1ZGUgPG1lZGlhL3Y0 bDItY3RybHMuaD4NCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4NCisjaW5jbHVkZSA8 bWVkaWEvdjRsMi1ldmVudC5oPg0KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWltYWdlLXNpemVzLmg+ DQorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4NCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1m d25vZGUuaD4NCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1zdWJkZXYuaD4NCisjaW5jbHVkZSA8bWVk aWEvdmlkZW9idWYyLWRtYS1jb250aWcuaD4NCisNCisjaW5jbHVkZSAiYXRtZWwtaXNjLXJlZ3Mu aCINCisjaW5jbHVkZSAiYXRtZWwtaXNjLmgiDQorDQorI2RlZmluZSBJU0NfTUFYX1NVUFBPUlRf V0lEVEggICAyNTkyDQorI2RlZmluZSBJU0NfTUFYX1NVUFBPUlRfSEVJR0hUICAxOTQ0DQorDQor I2RlZmluZSBJU0NfQ0xLX01BWF9ESVYJCTI1NQ0KKw0KK2V4dGVybiBzdHJ1Y3QgaXNjX2Zvcm1h dCBmb3JtYXRzX2xpc3RbXTsNCitleHRlcm4gc3RydWN0IGlzY19mb3JtYXQgY29udHJvbGxlcl9m b3JtYXRzW107DQorZXh0ZXJuIGNvbnN0IHUzMiBpc2NfZ2FtbWFfdGFibGVbR0FNTUFfTUFYICsg MV1bR0FNTUFfRU5UUklFU107DQorZXh0ZXJuIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIGlz Y19yZWdtYXBfY29uZmlnOw0KK2V4dGVybiBjb25zdCBzdHJ1Y3QgdjRsMl9hc3luY19ub3RpZmll cl9vcGVyYXRpb25zIGlzY19hc3luY19vcHM7DQorDQorZXh0ZXJuIGlycXJldHVybl90IGlzY19p bnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsNCitleHRlcm4gaW50IGlzY19waXBlbGlu ZV9pbml0KHN0cnVjdCBpc2NfZGV2aWNlICppc2MpOw0KK2V4dGVybiBpbnQgaXNjX2Nsa19pbml0 KHN0cnVjdCBpc2NfZGV2aWNlICppc2MpOw0KK2V4dGVybiB2b2lkIGlzY19zdWJkZXZfY2xlYW51 cChzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKTsNCitleHRlcm4gdm9pZCBpc2NfY2xrX2NsZWFudXAo c3RydWN0IGlzY19kZXZpY2UgKmlzYyk7DQorDQordW5zaWduZWQgaW50IGRlYnVnOw0KK21vZHVs ZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsNCitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZGVi dWcgbGV2ZWwgKDAtMikiKTsNCisNCit1bnNpZ25lZCBpbnQgc2Vuc29yX3ByZWZlcnJlZCA9IDE7 DQorbW9kdWxlX3BhcmFtKHNlbnNvcl9wcmVmZXJyZWQsIHVpbnQsIDA2NDQpOw0KK01PRFVMRV9Q QVJNX0RFU0Moc2Vuc29yX3ByZWZlcnJlZCwNCisJCSAiU2Vuc29yIGlzIHByZWZlcnJlZCB0byBv dXRwdXQgdGhlIHNwZWNpZmllZCBmb3JtYXQgKDEtb24gMC1vZmYpLCBkZWZhdWx0IDEiKTsNCisN CitzdGF0aWMgaW50IGlzY19wYXJzZV9kdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBpc2Nf ZGV2aWNlICppc2MpDQorew0KKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2Rl Ow0KKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmVwbiA9IE5VTEwsICpyZW07DQorCXN0cnVjdCBpc2Nf c3ViZGV2X2VudGl0eSAqc3ViZGV2X2VudGl0eTsNCisJdW5zaWduZWQgaW50IGZsYWdzOw0KKwlp bnQgcmV0Ow0KKw0KKwlJTklUX0xJU1RfSEVBRCgmaXNjLT5zdWJkZXZfZW50aXRpZXMpOw0KKw0K Kwl3aGlsZSAoMSkgew0KKwkJc3RydWN0IHY0bDJfZndub2RlX2VuZHBvaW50IHY0bDJfZXBuID0g eyAuYnVzX3R5cGUgPSAwIH07DQorDQorCQllcG4gPSBvZl9ncmFwaF9nZXRfbmV4dF9lbmRwb2lu dChucCwgZXBuKTsNCisJCWlmICghZXBuKQ0KKwkJCXJldHVybiAwOw0KKw0KKwkJcmVtID0gb2Zf Z3JhcGhfZ2V0X3JlbW90ZV9wb3J0X3BhcmVudChlcG4pOw0KKwkJaWYgKCFyZW0pIHsNCisJCQlk ZXZfbm90aWNlKGRldiwgIlJlbW90ZSBkZXZpY2UgYXQgJXBPRiBub3QgZm91bmRcbiIsDQorCQkJ CSAgIGVwbik7DQorCQkJY29udGludWU7DQorCQl9DQorDQorCQlyZXQgPSB2NGwyX2Z3bm9kZV9l bmRwb2ludF9wYXJzZShvZl9md25vZGVfaGFuZGxlKGVwbiksDQorCQkJCQkJICZ2NGwyX2Vwbik7 DQorCQlpZiAocmV0KSB7DQorCQkJb2Zfbm9kZV9wdXQocmVtKTsNCisJCQlyZXQgPSAtRUlOVkFM Ow0KKwkJCWRldl9lcnIoZGV2LCAiQ291bGQgbm90IHBhcnNlIHRoZSBlbmRwb2ludFxuIik7DQor CQkJYnJlYWs7DQorCQl9DQorDQorCQlzdWJkZXZfZW50aXR5ID0gZGV2bV9remFsbG9jKGRldiwN CisJCQkJCSAgc2l6ZW9mKCpzdWJkZXZfZW50aXR5KSwgR0ZQX0tFUk5FTCk7DQorCQlpZiAoIXN1 YmRldl9lbnRpdHkpIHsNCisJCQlvZl9ub2RlX3B1dChyZW0pOw0KKwkJCXJldCA9IC1FTk9NRU07 DQorCQkJYnJlYWs7DQorCQl9DQorDQorCQkvKiBhc2Qgd2lsbCBiZSBmcmVlZCBieSB0aGUgc3Vi c3lzdGVtIG9uY2UgaXQncyBhZGRlZCB0byB0aGUNCisJCSAqIG5vdGlmaWVyIGxpc3QNCisJCSAq Lw0KKwkJc3ViZGV2X2VudGl0eS0+YXNkID0ga3phbGxvYyhzaXplb2YoKnN1YmRldl9lbnRpdHkt PmFzZCksDQorCQkJCQkgICAgIEdGUF9LRVJORUwpOw0KKwkJaWYgKCFzdWJkZXZfZW50aXR5LT5h c2QpIHsNCisJCQlvZl9ub2RlX3B1dChyZW0pOw0KKwkJCXJldCA9IC1FTk9NRU07DQorCQkJYnJl YWs7DQorCQl9DQorDQorCQlmbGFncyA9IHY0bDJfZXBuLmJ1cy5wYXJhbGxlbC5mbGFnczsNCisN CisJCWlmIChmbGFncyAmIFY0TDJfTUJVU19IU1lOQ19BQ1RJVkVfTE9XKQ0KKwkJCXN1YmRldl9l bnRpdHktPnBmZV9jZmcwID0gSVNDX1BGRV9DRkcwX0hQT0xfTE9XOw0KKw0KKwkJaWYgKGZsYWdz ICYgVjRMMl9NQlVTX1ZTWU5DX0FDVElWRV9MT1cpDQorCQkJc3ViZGV2X2VudGl0eS0+cGZlX2Nm ZzAgfD0gSVNDX1BGRV9DRkcwX1ZQT0xfTE9XOw0KKw0KKwkJaWYgKGZsYWdzICYgVjRMMl9NQlVT X1BDTEtfU0FNUExFX0ZBTExJTkcpDQorCQkJc3ViZGV2X2VudGl0eS0+cGZlX2NmZzAgfD0gSVND X1BGRV9DRkcwX1BQT0xfTE9XOw0KKw0KKwkJaWYgKHY0bDJfZXBuLmJ1c190eXBlID09IFY0TDJf TUJVU19CVDY1NikNCisJCQlzdWJkZXZfZW50aXR5LT5wZmVfY2ZnMCB8PSBJU0NfUEZFX0NGRzBf Q0NJUl9DUkMgfA0KKwkJCQkJSVNDX1BGRV9DRkcwX0NDSVI2NTY7DQorDQorCQlzdWJkZXZfZW50 aXR5LT5hc2QtPm1hdGNoX3R5cGUgPSBWNEwyX0FTWU5DX01BVENIX0ZXTk9ERTsNCisJCXN1YmRl dl9lbnRpdHktPmFzZC0+bWF0Y2guZndub2RlID0NCisJCQlvZl9md25vZGVfaGFuZGxlKHJlbSk7 DQorCQlsaXN0X2FkZF90YWlsKCZzdWJkZXZfZW50aXR5LT5saXN0LCAmaXNjLT5zdWJkZXZfZW50 aXRpZXMpOw0KKwl9DQorDQorCW9mX25vZGVfcHV0KGVwbik7DQorCXJldHVybiByZXQ7DQorfQ0K Kw0KK3N0YXRpYyBpbnQgYXRtZWxfaXNjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpDQorew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Ow0KKwlzdHJ1Y3QgaXNj X2RldmljZSAqaXNjOw0KKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsNCisJdm9pZCBfX2lvbWVtICpp b19iYXNlOw0KKwlzdHJ1Y3QgaXNjX3N1YmRldl9lbnRpdHkgKnN1YmRldl9lbnRpdHk7DQorCWlu dCBpcnE7DQorCWludCByZXQ7DQorDQorCWlzYyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigq aXNjKSwgR0ZQX0tFUk5FTCk7DQorCWlmICghaXNjKQ0KKwkJcmV0dXJuIC1FTk9NRU07DQorDQor CXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGlzYyk7DQorCWlzYy0+ZGV2ID0gZGV2Ow0KKw0K KwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOw0K Kwlpb19iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsNCisJaWYgKElTX0VS Uihpb19iYXNlKSkNCisJCXJldHVybiBQVFJfRVJSKGlvX2Jhc2UpOw0KKw0KKwlpc2MtPnJlZ21h cCA9IGRldm1fcmVnbWFwX2luaXRfbW1pbyhkZXYsIGlvX2Jhc2UsICZpc2NfcmVnbWFwX2NvbmZp Zyk7DQorCWlmIChJU19FUlIoaXNjLT5yZWdtYXApKSB7DQorCQlyZXQgPSBQVFJfRVJSKGlzYy0+ cmVnbWFwKTsNCisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGluaXQgcmVnaXN0ZXIgbWFwOiAl ZFxuIiwgcmV0KTsNCisJCXJldHVybiByZXQ7DQorCX0NCisNCisJaXJxID0gcGxhdGZvcm1fZ2V0 X2lycShwZGV2LCAwKTsNCisJaWYgKGlycSA8IDApIHsNCisJCXJldCA9IGlycTsNCisJCWRldl9l cnIoZGV2LCAiZmFpbGVkIHRvIGdldCBpcnE6ICVkXG4iLCByZXQpOw0KKwkJcmV0dXJuIHJldDsN CisJfQ0KKw0KKwlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgaXJxLCBpc2NfaW50ZXJydXB0 LCAwLA0KKwkJCSAgICAgICBBVE1FTF9JU0NfTkFNRSwgaXNjKTsNCisJaWYgKHJldCA8IDApIHsN CisJCWRldl9lcnIoZGV2LCAiY2FuJ3QgcmVnaXN0ZXIgSVNSIGZvciBJUlEgJXUgKHJldD0laSlc biIsDQorCQkJaXJxLCByZXQpOw0KKwkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKwlyZXQgPSBpc2Nf cGlwZWxpbmVfaW5pdChpc2MpOw0KKwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJldDsNCisNCisJaXNj LT5oY2xvY2sgPSBkZXZtX2Nsa19nZXQoZGV2LCAiaGNsb2NrIik7DQorCWlmIChJU19FUlIoaXNj LT5oY2xvY2spKSB7DQorCQlyZXQgPSBQVFJfRVJSKGlzYy0+aGNsb2NrKTsNCisJCWRldl9lcnIo ZGV2LCAiZmFpbGVkIHRvIGdldCBoY2xvY2s6ICVkXG4iLCByZXQpOw0KKwkJcmV0dXJuIHJldDsN CisJfQ0KKw0KKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoaXNjLT5oY2xvY2spOw0KKwlpZiAo cmV0KSB7DQorCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBlbmFibGUgaGNsb2NrOiAlZFxuIiwg cmV0KTsNCisJCXJldHVybiByZXQ7DQorCX0NCisNCisJcmV0ID0gaXNjX2Nsa19pbml0KGlzYyk7 DQorCWlmIChyZXQpIHsNCisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGluaXQgaXNjIGNsb2Nr OiAlZFxuIiwgcmV0KTsNCisJCWdvdG8gdW5wcmVwYXJlX2hjbGs7DQorCX0NCisNCisJaXNjLT5p c3BjayA9IGlzYy0+aXNjX2Nsa3NbSVNDX0lTUENLXS5jbGs7DQorDQorCXJldCA9IGNsa19wcmVw YXJlX2VuYWJsZShpc2MtPmlzcGNrKTsNCisJaWYgKHJldCkgew0KKwkJZGV2X2VycihkZXYsICJm YWlsZWQgdG8gZW5hYmxlIGlzcGNrOiAlZFxuIiwgcmV0KTsNCisJCWdvdG8gdW5wcmVwYXJlX2hj bGs7DQorCX0NCisNCisJLyogaXNwY2sgc2hvdWxkIGJlIGdyZWF0ZXIgb3IgZXF1YWwgdG8gaGNs b2NrICovDQorCXJldCA9IGNsa19zZXRfcmF0ZShpc2MtPmlzcGNrLCBjbGtfZ2V0X3JhdGUoaXNj LT5oY2xvY2spKTsNCisJaWYgKHJldCkgew0KKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gc2V0 IGlzcGNrIHJhdGU6ICVkXG4iLCByZXQpOw0KKwkJZ290byB1bnByZXBhcmVfY2xrOw0KKwl9DQor DQorCXJldCA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKGRldiwgJmlzYy0+djRsMl9kZXYpOw0KKwlp ZiAocmV0KSB7DQorCQlkZXZfZXJyKGRldiwgInVuYWJsZSB0byByZWdpc3RlciB2NGwyIGRldmlj ZS5cbiIpOw0KKwkJZ290byB1bnByZXBhcmVfY2xrOw0KKwl9DQorDQorCXJldCA9IGlzY19wYXJz ZV9kdChkZXYsIGlzYyk7DQorCWlmIChyZXQpIHsNCisJCWRldl9lcnIoZGV2LCAiZmFpbCB0byBw YXJzZSBkZXZpY2UgdHJlZVxuIik7DQorCQlnb3RvIHVucmVnaXN0ZXJfdjRsMl9kZXZpY2U7DQor CX0NCisNCisJaWYgKGxpc3RfZW1wdHkoJmlzYy0+c3ViZGV2X2VudGl0aWVzKSkgew0KKwkJZGV2 X2VycihkZXYsICJubyBzdWJkZXYgZm91bmRcbiIpOw0KKwkJcmV0ID0gLUVOT0RFVjsNCisJCWdv dG8gdW5yZWdpc3Rlcl92NGwyX2RldmljZTsNCisJfQ0KKw0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5 KHN1YmRldl9lbnRpdHksICZpc2MtPnN1YmRldl9lbnRpdGllcywgbGlzdCkgew0KKwkJdjRsMl9h c3luY19ub3RpZmllcl9pbml0KCZzdWJkZXZfZW50aXR5LT5ub3RpZmllcik7DQorDQorCQlyZXQg PSB2NGwyX2FzeW5jX25vdGlmaWVyX2FkZF9zdWJkZXYoJnN1YmRldl9lbnRpdHktPm5vdGlmaWVy LA0KKwkJCQkJCSAgICAgc3ViZGV2X2VudGl0eS0+YXNkKTsNCisJCWlmIChyZXQpIHsNCisJCQlm d25vZGVfaGFuZGxlX3B1dChzdWJkZXZfZW50aXR5LT5hc2QtPm1hdGNoLmZ3bm9kZSk7DQorCQkJ a2ZyZWUoc3ViZGV2X2VudGl0eS0+YXNkKTsNCisJCQlnb3RvIGNsZWFudXBfc3ViZGV2Ow0KKwkJ fQ0KKw0KKwkJc3ViZGV2X2VudGl0eS0+bm90aWZpZXIub3BzID0gJmlzY19hc3luY19vcHM7DQor DQorCQlyZXQgPSB2NGwyX2FzeW5jX25vdGlmaWVyX3JlZ2lzdGVyKCZpc2MtPnY0bDJfZGV2LA0K KwkJCQkJCSAgICZzdWJkZXZfZW50aXR5LT5ub3RpZmllcik7DQorCQlpZiAocmV0KSB7DQorCQkJ ZGV2X2VycihkZXYsICJmYWlsIHRvIHJlZ2lzdGVyIGFzeW5jIG5vdGlmaWVyXG4iKTsNCisJCQln b3RvIGNsZWFudXBfc3ViZGV2Ow0KKwkJfQ0KKw0KKwkJaWYgKHZpZGVvX2lzX3JlZ2lzdGVyZWQo JmlzYy0+dmlkZW9fZGV2KSkNCisJCQlicmVhazsNCisJfQ0KKw0KKwlwbV9ydW50aW1lX3NldF9h Y3RpdmUoZGV2KTsNCisJcG1fcnVudGltZV9lbmFibGUoZGV2KTsNCisJcG1fcmVxdWVzdF9pZGxl KGRldik7DQorDQorCXJldHVybiAwOw0KKw0KK2NsZWFudXBfc3ViZGV2Og0KKwlpc2Nfc3ViZGV2 X2NsZWFudXAoaXNjKTsNCisNCit1bnJlZ2lzdGVyX3Y0bDJfZGV2aWNlOg0KKwl2NGwyX2Rldmlj ZV91bnJlZ2lzdGVyKCZpc2MtPnY0bDJfZGV2KTsNCisNCit1bnByZXBhcmVfY2xrOg0KKwljbGtf ZGlzYWJsZV91bnByZXBhcmUoaXNjLT5pc3Bjayk7DQordW5wcmVwYXJlX2hjbGs6DQorCWNsa19k aXNhYmxlX3VucHJlcGFyZShpc2MtPmhjbG9jayk7DQorDQorCWlzY19jbGtfY2xlYW51cChpc2Mp Ow0KKw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgaW50IGF0bWVsX2lzY19yZW1vdmUo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCit7DQorCXN0cnVjdCBpc2NfZGV2aWNlICpp c2MgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsNCisNCisJcG1fcnVudGltZV9kaXNhYmxl KCZwZGV2LT5kZXYpOw0KKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaXNjLT5pc3Bjayk7DQorCWNs a19kaXNhYmxlX3VucHJlcGFyZShpc2MtPmhjbG9jayk7DQorDQorCWlzY19zdWJkZXZfY2xlYW51 cChpc2MpOw0KKw0KKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZpc2MtPnY0bDJfZGV2KTsNCisN CisJaXNjX2Nsa19jbGVhbnVwKGlzYyk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMg aW50IF9fbWF5YmVfdW51c2VkIGlzY19ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2 KQ0KK3sNCisJc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0K Kw0KKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaXNjLT5pc3Bjayk7DQorCWNsa19kaXNhYmxlX3Vu cHJlcGFyZShpc2MtPmhjbG9jayk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50 IF9fbWF5YmVfdW51c2VkIGlzY19ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpDQor ew0KKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQorCWlu dCByZXQ7DQorDQorCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShpc2MtPmhjbG9jayk7DQorCWlm IChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwlyZXR1cm4gY2xrX3ByZXBhcmVfZW5hYmxlKGlz Yy0+aXNwY2spOw0KK30NCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgYXRtZWxf aXNjX2Rldl9wbV9vcHMgPSB7DQorCVNFVF9SVU5USU1FX1BNX09QUyhpc2NfcnVudGltZV9zdXNw ZW5kLCBpc2NfcnVudGltZV9yZXN1bWUsIE5VTEwpDQorfTsNCisNCitzdGF0aWMgY29uc3Qgc3Ry dWN0IG9mX2RldmljZV9pZCBhdG1lbF9pc2Nfb2ZfbWF0Y2hbXSA9IHsNCisJeyAuY29tcGF0aWJs ZSA9ICJhdG1lbCxzYW1hNWQyLWlzYyIgfSwNCisJeyB9DQorfTsNCitNT0RVTEVfREVWSUNFX1RB QkxFKG9mLCBhdG1lbF9pc2Nfb2ZfbWF0Y2gpOw0KKw0KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1f ZHJpdmVyIGF0bWVsX2lzY19kcml2ZXIgPSB7DQorCS5wcm9iZQk9IGF0bWVsX2lzY19wcm9iZSwN CisJLnJlbW92ZQk9IGF0bWVsX2lzY19yZW1vdmUsDQorCS5kcml2ZXIJPSB7DQorCQkubmFtZQkJ PSBBVE1FTF9JU0NfTkFNRSwNCisJCS5wbQkJPSAmYXRtZWxfaXNjX2Rldl9wbV9vcHMsDQorCQku b2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIoYXRtZWxfaXNjX29mX21hdGNoKSwNCisJfSwN Cit9Ow0KKw0KK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYXRtZWxfaXNjX2RyaXZlcik7DQorDQor TU9EVUxFX0FVVEhPUigiU29uZ2p1biBXdSA8c29uZ2p1bi53dUBtaWNyb2NoaXAuY29tPiIpOw0K K01PRFVMRV9ERVNDUklQVElPTigiVGhlIFY0TDIgZHJpdmVyIGZvciBBdG1lbC1JU0MiKTsNCitN T0RVTEVfTElDRU5TRSgiR1BMIHYyIik7DQorTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInZpZGVv Iik7DQotLSANCjIuNy40DQoNCg==