From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.2 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id F141DC433E0 for ; Sat, 30 Jan 2021 20:39:02 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 9C07E64E0E for ; Sat, 30 Jan 2021 20:39:02 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9C07E64E0E Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Type: Content-Transfer-Encoding:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=BGDyMZaG/KrEZz1mhfQuzbkj5xFjdjt+R/zFb805yEA=; b=VjIAaFBmMYOcxjQAUceDhm02k dPU7PNQMjwGnp8lhOdzAROP7KBs8HGmL6i6rAfJgT+6kQRCm7uW+1n/XCu6tXjbkuxRDNs9t2/xv3 4vGIY34Qj2YQlM+vpK/lbsKI3A7rC/s0+X5vO/IVnu2u4G/yu7FHkz32hKYaKDlZJB4h8oA34Xm8c ncbjb3kNaXGF4aMM4FGVOJxDy1oS46ssd2aVDiMD42MJZF5L2Hnw8KLF6mxNfbgj/SPajslKb1P77 HNaBIP/KrTvFEuoMf6aUSG+rzDopMLror2ET8BjTj0ZlRFdJ5G1Iwz55GL2J1cuWknC0FqRr9mTfq v+H38j7Kw==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1l5wzw-0007Bj-Qb; Sat, 30 Jan 2021 20:37:36 +0000 Received: from mail-lj1-x229.google.com ([2a00:1450:4864:20::229]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1l5wzr-0007B3-Sr for linux-arm-kernel@lists.infradead.org; Sat, 30 Jan 2021 20:37:33 +0000 Received: by mail-lj1-x229.google.com with SMTP id f19so14684265ljn.5 for ; Sat, 30 Jan 2021 12:37:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=Nfs6hN0eAUlD+Ox08DuQxwnEjzSCR+BxOMHfG+RG2Ws=; b=veD5i5dyJXTDrZJJOUEecZt0QXJs+SfUlHfUlsI/mHMCrEEdmQ1lnF67SYviCqL9mo /0KHLguW9dSon3i8xicJK9sRKVCUNvB0KxWpGmBHHrGAa2eITpjKlSGfTYn3+9Ctabq4 IvtLmDvMGaBEOT/CIfSdKBXRLaF2VRnpyNI2khQgfrSXdFeuZ8mt9tDuowK3gFdmrCAX Z3xvQMXj8N8n+J+nBKmSfdGiwD7UHBjPwoA2pQk5c92GFkLgqIuyrtR1x/xNGPK2hxjk EO0HO8xP38iEPWddwns7Ba1LbtXgSGVWfEQKu9OTJJBna4rz5NtVfoqCFr8IdfPo03K9 JwPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=Nfs6hN0eAUlD+Ox08DuQxwnEjzSCR+BxOMHfG+RG2Ws=; b=mrhj6dmZYpHibgxkd+tOxZP6axy7MLOAOPkuG+G/y1zcSA6JfE06b2l6e6phMC60P3 CIf29kdXX2yqqopx4SdQ8jpWZ0jQ+h//hrH7rHiZbe3qxjTFNqgCS42Z1Q+afnQzVh+0 wgGtFQdmaCcBsXesnBJIhiLBVNM/AdlkpYcFEazdIpFk5xjQTJKVVwRXHdwFXNFPDymG 3y+iiif4ta5Iw0nxYerhHHjM5PQv+juUFUcIJCMTmUxcY8RHD6RfNwAhPi7R2SF192YU COjgMspCd2J2wZRMmzpHzzo3kC1b+8qr/T/E6ApALXndsxKr6dCVUT5pGZz751ofZyDG HY0g== X-Gm-Message-State: AOAM533DqJTCZkitGbI/WgfkDrsegG9i+Z7X4Vf/sSMl+ceggMSdYd7Y MmlOI4ERMEJdkuqRyTjpDpk= X-Google-Smtp-Source: ABdhPJzWrc6tTpwUclXuZIxKIjdWjyBqV7FLWMUlR+SNpwRdmK7nHzDet8p2jIJRIPtV2TuI0YYB1A== X-Received: by 2002:a2e:9998:: with SMTP id w24mr5681412lji.334.1612039049995; Sat, 30 Jan 2021 12:37:29 -0800 (PST) Received: from [192.168.0.131] ([194.183.54.57]) by smtp.gmail.com with ESMTPSA id e15sm691348lfn.80.2021.01.30.12.37.28 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 30 Jan 2021 12:37:29 -0800 (PST) Subject: Re: [PATCH v2 2/4] leds: Add driver for QCOM SPMI Flash LEDs To: =?UTF-8?B?TsOtY29sYXMgRi4gUi4gQS4gUHJhZG8=?= , Pavel Machek , Dan Murphy , Bjorn Andersson , Andy Gross , Rob Herring References: <20210126140240.1517044-1-nfraprado@protonmail.com> <20210126140240.1517044-3-nfraprado@protonmail.com> From: Jacek Anaszewski Message-ID: Date: Sat, 30 Jan 2021 21:37:23 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.6.0 MIME-Version: 1.0 In-Reply-To: <20210126140240.1517044-3-nfraprado@protonmail.com> Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210130_153731_997451_DF0B1BE8 X-CRM114-Status: GOOD ( 37.75 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, linux-arm-msm@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, Russell King , linux-kernel@vger.kernel.org, Luca Weiss , lkcamp@lists.libreplanetbr.org, linux-leds@vger.kernel.org, andrealmeid@collabora.com, Georgi Djakov , linux-arm-kernel@lists.infradead.org, Brian Masney Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgTmljb2xhcywKCk9uIDEvMjYvMjEgMzowNSBQTSwgTsOtY29sYXMgRi4gUi4gQS4gUHJhZG8g d3JvdGU6Cj4gQWRkIGRyaXZlciBmb3IgdGhlIFF1YWxjb21tIFNQTUkgRmxhc2ggTEVEcy4gVGhl c2UgYXJlIGNvbnRyb2xsZWQKPiB0aHJvdWdoIGFuIFNQTUkgYnVzIGFuZCBhcmUgcGFydCBvZiB0 aGUgUE04OTQxIFBNSUMuIFRoZXJlIGFyZSB0d28gTEVEcwo+IHByZXNlbnQgaW4gdGhlIGNoaXAs IGFuZCBjYW4gYmUgdXNlZCBpbmRlcGVuZGVudGx5IGFzIGNhbWVyYSBmbGFzaCBvcgo+IHRvZ2V0 aGVyIGluIHRvcmNoIG1vZGUgdG8gYWN0IGFzIGEgbGFudGVybi4KPiAKPiBTaWduZWQtb2ZmLWJ5 OiBOw61jb2xhcyBGLiBSLiBBLiBQcmFkbyA8bmZyYXByYWRvQHByb3Rvbm1haWwuY29tPgo+IC0t LQo+IENoYW5nZXMgaW4gdjI6Cj4gLSBUaGFua3MgdG8gSmFjZWs6Cj4gICAgLSBJbXBsZW1lbnRl ZCBmbGFzaCBMRUQgY2xhc3MgZnJhbWV3b3JrCj4gLSBUaGFua3MgdG8gQmpvcm46Cj4gICAgLSBS ZW5hbWVkIGRyaXZlciB0byAicWNvbSBzcG1pIGZsYXNoIgo+IC0gUmVmYWN0b3JlZCBjb2RlCj4g LSBBZGRlZCBtaXNzaW5nIGNvcHlyaWdodAo+IAo+ICAgZHJpdmVycy9sZWRzL0tjb25maWcgICAg ICAgICAgICAgICAgfCAgICA4ICsKPiAgIGRyaXZlcnMvbGVkcy9NYWtlZmlsZSAgICAgICAgICAg ICAgIHwgICAgMSArCj4gICBkcml2ZXJzL2xlZHMvbGVkcy1xY29tLXNwbWktZmxhc2guYyB8IDEx NTMgKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gICAzIGZpbGVzIGNoYW5nZWQsIDExNjIg aW5zZXJ0aW9ucygrKQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbGVkcy9sZWRzLXFj b20tc3BtaS1mbGFzaC5jCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9LY29uZmlnIGIv ZHJpdmVycy9sZWRzL0tjb25maWcKPiBpbmRleCA4NDlkM2M1ZjkwOGUuLmFkMWM3ODQ2ZjliMyAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL2xlZHMvS2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMvbGVkcy9L Y29uZmlnCj4gQEAgLTkyOCw2ICs5MjgsMTQgQEAgY29uZmlnIExFRFNfQUNFUl9BNTAwCj4gICAJ ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBQb3dlciBCdXR0b24gTEVEIG9m Cj4gICAJICBBY2VyIEljb25pYSBUYWIgQTUwMC4KPiAgIAo+ICtjb25maWcgTEVEU19RQ09NX1NQ TUlfRkxBU0gKPiArCXRyaXN0YXRlICJTdXBwb3J0IGZvciBRQ09NIFNQTUkgRmxhc2ggTEVEcyIK PiArCWRlcGVuZHMgb24gU1BNSQo+ICsJZGVwZW5kcyBvbiBMRURTX0NMQVNTX0ZMQVNICj4gKwlo ZWxwCj4gKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBGbGFzaC9Ub3JjaCBMRUQgcHJlc2Vu dCBpbiBRdWFsY29tbSdzIFBNODk0MQo+ICsJICBQTUlDLgo+ICsKPiAgIGNvbW1lbnQgIkxFRCBU cmlnZ2VycyIKPiAgIHNvdXJjZSAiZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZyIKPiAgIAo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvTWFrZWZpbGUgYi9kcml2ZXJzL2xlZHMvTWFrZWZp bGUKPiBpbmRleCA3M2U2MDNlMTcyN2UuLmU4NmJjZmJhMDE2YiAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2xlZHMvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2xlZHMvTWFrZWZpbGUKPiBAQCAtOTMs NiArOTMsNyBAQCBvYmotJChDT05GSUdfTEVEU19UVVJSSVNfT01OSUEpCQkrPSBsZWRzLXR1cnJp cy1vbW5pYS5vCj4gICBvYmotJChDT05GSUdfTEVEU19XTTgzMVhfU1RBVFVTKQkrPSBsZWRzLXdt ODMxeC1zdGF0dXMubwo+ICAgb2JqLSQoQ09ORklHX0xFRFNfV004MzUwKQkJKz0gbGVkcy13bTgz NTAubwo+ICAgb2JqLSQoQ09ORklHX0xFRFNfV1JBUCkJCQkrPSBsZWRzLXdyYXAubwo+ICtvYmot JChDT05GSUdfTEVEU19RQ09NX1NQTUlfRkxBU0gpCSs9IGxlZHMtcWNvbS1zcG1pLWZsYXNoLm8K PiAgIAo+ICAgIyBMRUQgU1BJIERyaXZlcnMKPiAgIG9iai0kKENPTkZJR19MRURTX0NSMDAxNDEx NCkJCSs9IGxlZHMtY3IwMDE0MTE0Lm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMt cWNvbS1zcG1pLWZsYXNoLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1xY29tLXNwbWktZmxhc2guYwo+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi4wMjNmYzEwN2FiY2UK PiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtcWNvbS1zcG1pLWZsYXNo LmMKPiBAQCAtMCwwICsxLDExNTMgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ TC0yLjAtb25seQo+ICsvKgo+ICsgKiBRdWFsY29tbSBTUE1JIEZsYXNoIERyaXZlcgo+ICsgKgo+ ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjAsIE7DrWNvbGFzIEYuIFIuIEEuIFByYWRvIDxuZnJhcHJh ZG9AcHJvdG9ubWFpbC5jb20+Cj4gKyAqCj4gKyAqIEJhc2VkIG9uIFFQTlAgTEVEcyBkcml2ZXIg ZnJvbSBkb3duc3RyZWFtIE1TTSBrZXJuZWwgc291cmNlcy4KPiArICogQ29weXJpZ2h0IChjKSAy MDEyLTIwMTMsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICsg Ki8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21v ZHVsZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvc3BtaS5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2Zf ZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxpbnV4 L3R5cGVzLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KPiArI2luY2x1ZGUgPGxpbnV4 L211dGV4Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgo+ICsjaW5jbHVkZSA8bGludXgv bGVkLWNsYXNzLWZsYXNoLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIu aD4KPiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAu aD4KPiArI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2xlZHMvbGVkcy1xY29tLXNwbWktZmxhc2guaD4K ClBsZWFzZSBzb3J0IGluY2x1ZGVzIGFscGhhYmV0aWNhbGx5LgoKPiArCj4gKyNkZWZpbmUgRkxB U0hfU0FGRVRZX1RJTUVSCQkweDQwCgpOYW1lc3BhY2luZyBwcmVmaXggaXMgbmVlZGVkIGZvciBt YWNyb3MsIGUuZy4gUUNPTV9GTEFTSCouCgo+ICsjZGVmaW5lIEZMQVNIX01BWF9DVVJSCQkJMHg0 MQo+ICsjZGVmaW5lIEZMQVNIX0xFRF8wX0NVUlIJCTB4NDIKPiArI2RlZmluZSBGTEFTSF9MRURf MV9DVVJSCQkweDQzCj4gKyNkZWZpbmUgRkxBU0hfQ0xBTVBfQ1VSUgkJMHg0NAo+ICsjZGVmaW5l IEZMQVNIX0xFRF9UTVJfQ1RSTAkJMHg0OAo+ICsjZGVmaW5lIEZMQVNIX0hFQURST09NCQkJMHg0 QQo+ICsjZGVmaW5lIEZMQVNIX1NUQVJUVVBfREVMQVkJCTB4NEIKPiArI2RlZmluZSBGTEFTSF9N QVNLX0VOQUJMRQkJMHg0Qwo+ICsjZGVmaW5lIEZMQVNIX1ZSRUdfT0tfRk9SQ0UJCTB4NEYKPiAr I2RlZmluZSBGTEFTSF9FTkFCTEVfQ09OVFJPTAkJMHg0Ngo+ICsjZGVmaW5lIEZMQVNIX0xFRF9T VFJPQkVfQ1RSTAkJMHg0Nwo+ICsjZGVmaW5lIEZMQVNIX0xFRF9VTkxPQ0tfU0VDVVJFCQkweEQw Cj4gKyNkZWZpbmUgRkxBU0hfTEVEX1RPUkNICQkJMHhFNAo+ICsjZGVmaW5lIEZMQVNIX0ZBVUxU X0RFVEVDVAkJMHg1MQo+ICsjZGVmaW5lIEZMQVNIX1JBTVBfUkFURQkJCTB4NTQKPiArI2RlZmlu ZSBGTEFTSF9QRVJJUEhFUkFMX1NVQlRZUEUJMHgwNQo+ICsjZGVmaW5lIEZMQVNIX1ZQSF9QV1Jf RFJPT1AJCTB4NUEKPiArCj4gKyNkZWZpbmUgRkxBU0hfTUFYX0xFVkVMCQkJMHg0Rgo+ICsjZGVm aW5lIFRPUkNIX01BWF9MRVZFTAkJCTB4MEYKPiArI2RlZmluZQlGTEFTSF9OT19NQVNLCQkJMHgw MAo+ICsKPiArI2RlZmluZSBGTEFTSF9NQVNLXzEJCQkweDIwCj4gKyNkZWZpbmUgRkxBU0hfTUFT S19SRUdfTUFTSwkJMHhFMAo+ICsjZGVmaW5lIEZMQVNIX0hFQURST09NX01BU0sJCTB4MDMKPiAr I2RlZmluZSBGTEFTSF9TQUZFVFlfVElNRVJfTUFTSwkJMHg3Rgo+ICsjZGVmaW5lIEZMQVNIX0NV UlJFTlRfTUFTSwkJMHhGRgo+ICsjZGVmaW5lIEZMQVNIX01BWF9DVVJSRU5UX01BU0sJCTB4N0YK PiArI2RlZmluZSBGTEFTSF9UTVJfTUFTSwkJCTB4MDMKPiArI2RlZmluZSBGTEFTSF9UTVJfV0FU Q0hET0cJCTB4MDMKPiArI2RlZmluZSBGTEFTSF9UTVJfU0FGRVRZCQkweDAwCj4gKyNkZWZpbmUg RkxBU0hfRkFVTFRfREVURUNUX01BU0sJCTBYODAKPiArI2RlZmluZSBGTEFTSF9IV19WUkVHX09L CQkweDQwCj4gKyNkZWZpbmUgRkxBU0hfVlJFR19NQVNLCQkJMHhDMAo+ICsjZGVmaW5lIEZMQVNI X1NUQVJUVVBfRExZX01BU0sJCTB4MDIKPiArI2RlZmluZSBGTEFTSF9SQU1QX1JBVEVfTUFTSwkJ MHhCRgo+ICsjZGVmaW5lIEZMQVNIX1ZQSF9QV1JfRFJPT1BfTUFTSwkweEYzCj4gKwo+ICsjZGVm aW5lIEZMQVNIX0VOQUJMRV9BTEwJCTB4RTAKPiArI2RlZmluZSBGTEFTSF9FTkFCTEVfTU9EVUxF CQkweDgwCj4gKyNkZWZpbmUgRkxBU0hfRU5BQkxFX01PRFVMRV9NQVNLCTB4ODAKPiArI2RlZmlu ZSBGTEFTSF9ESVNBQkxFX0FMTAkJMHgwMAo+ICsjZGVmaW5lIEZMQVNIX0VOQUJMRV9NQVNLCQkw eEUwCj4gKyNkZWZpbmUgRkxBU0hfRU5BQkxFX0xFRF8wCQkweEMwCj4gKyNkZWZpbmUgRkxBU0hf RU5BQkxFX0xFRF8xCQkweEEwCj4gKyNkZWZpbmUgRkxBU0hfSU5JVF9NQVNLCQkJMHhFMAo+ICsj ZGVmaW5lIEZMQVNIX1NFTEZDSEVDS19FTkFCTEUJCTB4ODAKPiArI2RlZmluZSBGTEFTSF9TRUxG Q0hFQ0tfRElTQUJMRQkJMHgwMAo+ICsKPiArI2RlZmluZSBGTEFTSF9TVFJPQkVfU1cJCQkweEMw Cj4gKyNkZWZpbmUgRkxBU0hfU1RST0JFX0hXCQkJMHgwNAo+ICsjZGVmaW5lIEZMQVNIX1NUUk9C RV9NQVNLCQkweEM3Cj4gKyNkZWZpbmUgRkxBU0hfTEVEXzBfT1VUUFVUCQkweDgwCj4gKyNkZWZp bmUgRkxBU0hfTEVEXzFfT1VUUFVUCQkweDQwCj4gKwo+ICsjZGVmaW5lIEZMQVNIX1RPUkNIX01B U0sJCTB4MDMKPiArI2RlZmluZSBGTEFTSF9MRURfVE9SQ0hfRU5BQkxFCQkweDAwCj4gKyNkZWZp bmUgRkxBU0hfTEVEX1RPUkNIX0RJU0FCTEUJCTB4MDMKPiArI2RlZmluZSBGTEFTSF9VTkxPQ0tf U0VDVVJFCQkweEE1Cj4gKyNkZWZpbmUgRkxBU0hfU0VDVVJFX01BU0sJCTB4RkYKPiArCj4gKyNk ZWZpbmUgRkxBU0hfU1VCVFlQRV9EVUFMCQkweDAxCj4gKyNkZWZpbmUgRkxBU0hfU1VCVFlQRV9T SU5HTEUJCTB4MDIKPiArCj4gKyNkZWZpbmUgRkxBU0hfRFVSQVRJT05fU1RFUAkJMTAwMDAKPiAr I2RlZmluZSBGTEFTSF9EVVJBVElPTl9NSU4JCTEwMDAwCj4gKyNkZWZpbmUgRkxBU0hfRFVSQVRJ T05fTUFYCQkxMjgwMDAwIC8vVE9ETzogZmluZCByZWFsIHZhbHVlCj4gKwo+ICsjZGVmaW5lIEZM QVNIX0NVUlJFTlRfU1RFUAkJMTI1MDAKPiArI2RlZmluZSBGTEFTSF9DVVJSRU5UX01JTgkJMTI1 MDAKPiArI2RlZmluZSBGTEFTSF9DVVJSRU5UX01BWAkJMTAwMDAwMAo+ICsjZGVmaW5lIEZMQVNI X1RPUkNIX0NVUlJFTlRfTUFYCQkyMDAwMDAKPiArCj4gKyNkZWZpbmUgRkxBU0hfREVGQVVMVF9D TEFNUAkJMjAwMDAwCj4gKwo+ICtlbnVtIHFjb21fZmxhc2hfaWRzIHsKPiArCVFDT01fRkxBU0hf SURfTEVEMCwKPiArCVFDT01fRkxBU0hfSURfTEVEMSwKPiArfTsKPiArCj4gK3N0YXRpYyB1OCBm bGFzaF9kZWJ1Z19yZWdzW10gPSB7Cj4gKwkweDQwLCAweDQxLCAweDQyLCAweDQzLCAweDQ0LCAw eDQ4LCAweDQ5LCAweDRiLCAweDRjLAo+ICsJMHg0ZiwgMHg0NiwgMHg0NywKPiArfTsKPiArCj4g Ky8qKgo+ICsgKiBzdHJ1Y3QgcWNvbV9mbGFzaF9sZWQgLSBSZXByZXNlbnRzIGVhY2ggaW5kaXZp ZHVhbCBmbGFzaCBMRUQKPiArICogQGNkZXY6IGZsYXNoIExFRCBjbGFzc2Rldgo+ICsgKiBAaWQ6 IGxlZCBJRCBhcyBnaXZlbiBieSBlbnVtIHFjb21fZmxhc2hfaWRzCgpzL2xlZC9MRUQvCgo+ICsg KiBAZGVmYXVsdF9vbjogZGVmYXVsdCBzdGF0ZSBmb3IgdGhlIExFRAo+ICsgKiBAdHVybl9vZmZf ZGVsYXlfbXM6IG51bWJlciBvZiBtc2VjIGJlZm9yZSB0dXJuaW5nIG9mZiB0aGUgTEVECj4gKyAq IEBjbGFtcF9jdXJyOiBDbGFtcCBjdXJyZW50IHRvIHVzZQoKIEZyb20gd2hhdCBJIGluZmVyIHRo aXMgaXMgZmxhc2ggTEVEIG1heCBjdXJyZW50LCBzbyBpdCBzaG91bGQKYmUgc3RvcmVkIGluIHN0 cnVjdCBsZWRfY2xhc3NkZXZfZmxhc2gncyBicmlnaHRuZXNzLm1heCBwcm9wZXJ0eS4KUGxlYXNl IGRyb3AgY2xhbXBfY3VyciB0byBhdm9pZCB0aGlzIHJlZHVuZGFuY3kuCgo+ICsgKiBAaGVhZHJv b206IEhlYWRyb29tIHZhbHVlIHRvIHVzZSwgYXMgZ2l2ZW4gYnkgbGVkcy1xY29tLXNwbWktZmxh c2guaAo+ICsgKiBAZW5hYmxlX21vZHVsZTogZW5hYmxlIGFkZHJlc3MgZm9yIHBhcnRpY3VsYXIg Zmxhc2gKCmZsYXNoX2VuYWJsZV9jbWQgPwoKPiArICogQHRyaWdnZXJfZmxhc2g6IHRyaWdnZXIg Zmxhc2gKCmZsYXNoX3N0cm9iZV9jbWQgPyBBbnl3YXksIHRyaWdnZXIgaGFzIGRpZmZlcmVudCBt ZWFuaW5nIGluIHRoZSBMRUQKc3Vic3lzdGVtIHNvIGl0cyB1c2Ugc2hvdWxkIGJlIGF2b2lkZWQg aW4gb3RoZXIgY29udGV4dHMuCgo+ICsgKiBAc3RhcnR1cF9kbHk6IHN0YXJ0dXAgZGVsYXkgZm9y IGZsYXNoLCBhcyBnaXZlbiBieSBsZWRzLXFjb20tc3BtaS1mbGFzaC5oCgpPdXQgb2YgY3VyaW9z aXR5IC0gdGhlc2UgdmFsdWVzIHJhbmdlIGZyb20gMjh1cyB0byAxMjh1cyAtIGlzIHRoZQpkaWZm ZXJlbmNlIGJldHdlZW4gc2V0dGluZ3MgYXQgYWxsIG5vdGljZWFibGUgPyBXaGF0J3MgaXRzIHB1 cnBvc2U/Ck1heWJlIGl0IGhhcyBzb21lIG1lYW5pbmcgZm9yIHRoZSBhc3NvY2lhdGVkIElTUCB3 aGVuIGhhcmR3YXJlIHN0cm9iZQptZG9lIGlzIHVzZWQ/Cgo+ICsgKiBAc3Ryb2JlX3R5cGU6IHNl bGVjdCBiZXR3ZWVuIHN3IGFuZCBodyBzdHJvYmUKClBsZWFzZSBjaGFuZ2UgaXQgdG8gc3Ryb2Jl X21vZGUuCgo+ICsgKiBAY3VycmVudF9hZGRyOiBhZGRyZXNzIHRvIHdyaXRlIGZvciBjdXJyZW50 Cj4gKyAqIEBzZWNvbmRfYWRkcjogYWRkcmVzcyBvZiBzZWNvbmRhcnkgZmxhc2ggdG8gYmUgd3Jp dHRlbgoKV2hhdCBpcyBzZWNvbmRhcnkgZmxhc2g/IE1heWJlIGl0IGlzIGZvciBib29zdCBtb2Rl IHdoZW4gb25lIExFRCBpcwpjb25uZWN0ZWQgdG8gdGhlIHRvIGlvdXRzID8KCj4gKyAqIEBzYWZl dHlfdGltZXI6IGVuYWJsZSBzYWZldHkgdGltZXIgb3Igd2F0Y2hkb2cgdGltZXIKCkNvdWxkIHlv dSBwbGVhc2UgZGVzY3JpYmUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdHdvPwoKPiArICog QHRvcmNoX2VuYWJsZTogd2hldGhlciB0b3JjaCBtb2RlIGlzIGVuYWJsZWQgb3IgaW5kaXZpZHVh bCBmbGFzaCBMRUQKCkRvZXMgaXQgbWVhbiB0aGF0IHRvcmNoIG1vZGUgY2Fubm90IGJlIGVuYWJs ZWQgZm9yIGluZGl2aWR1YWwgTEVEID8KCj4gKyAqLwo+ICtzdHJ1Y3QgcWNvbV9mbGFzaF9sZWQg ewo+ICsJc3RydWN0IGxlZF9jbGFzc2Rldl9mbGFzaCBjZGV2OwoKUGxlYXNlIHVzZSBmbGVkX2Nk ZXYgaGVyZSB0byBhdm9pZCBjb25mdXNpb24uCgo+ICsJaW50IGlkOwoKcy9pbnQvZW51bSBxY29t X2ZsYXNoX2lkcy8KCj4gKwlib29sIGRlZmF1bHRfb247Cj4gKwlpbnQgdHVybl9vZmZfZGVsYXlf bXM7CgpZb3UncmUgbm90IHVzaW5nIHRoaXMgdmFsdWUgYW55d2hlcmUgaW4gdGhlIGRyaXZlciBh ZnRlciBwYXJzaW5nCmZyb20gRFQuCgo+ICsJdTMyIGNsYW1wX2N1cnI7Cj4gKwl1OCBoZWFkcm9v bTsKPiArCXU4IGVuYWJsZV9tb2R1bGU7Cj4gKwl1OCB0cmlnZ2VyX2ZsYXNoOwo+ICsJdTggc3Rh cnR1cF9kbHk7Cj4gKwl1OCBzdHJvYmVfdHlwZTsKPiArCXUxNiBjdXJyZW50X2FkZHI7Cj4gKwl1 MTYgc2Vjb25kX2FkZHI7Cj4gKwlib29sIHNhZmV0eV90aW1lcjsKPiArCWJvb2wgdG9yY2hfZW5h YmxlOwo+ICt9Owo+ICsKPiArLyoqCj4gKyAqIHN0cnVjdCBxY29tX2ZsYXNoX2RldmljZSAtIFFD T00gU1BNSSBGbGFzaCBkZXZpY2UsIGNvbnRhaW5zIDIgZmxhc2ggTEVEcwo+ICsgKiBAcmVnbWFw OiByZWdtYXAgdXNlZCB0byBhY2Nlc3MgTEVEIHJlZ2lzdGVycyBvdmVyIFNQTUkKPiArICogQGJh c2U6IGJhc2UgcmVnaXN0ZXIgZ2l2ZW4gaW4gZGV2aWNlIHRyZWUKPiArICogQHBkZXY6IHBsYXRm b3JtIGRldmljZSBmcm9tIGRldmljZXRyZWUKPiArICogQGZsYXNoX2Jvb3N0X3JlZzogdm9sdGFn ZSByZWd1bGF0b3IgdG8gc3VwcGx5IHRoZSBmbGFzaGVzCj4gKyAqIEB0b3JjaF9ib29zdF9yZWc6 IHZvbHRhZ2UgcmVndWxhdG9yIHRvIHN1cHBseSB0b3JjaCBtb2RlCj4gKyAqIEBsZWRzOiBmbGFz aCBMRURzCj4gKyAqIEBudW1fbGVkczogbnVtYmVyIG9mIExFRHMgcmVnaXN0ZXJlZCAoYmV0d2Vl biAwIGFuZCAyKQo+ICsgKiBAbG9jazogbG9jayB0byBwcm90ZWN0IFNQTUkgdHJhbnNhY3Rpb25z Cj4gKyAqIEB0b3JjaF9lbmFibGU6IGVuYWJsZSBmbGFzaCBMRUQgdG9yY2ggbW9kZQo+ICsgKiBA cGVyaXBoZXJhbF9zdWJ0eXBlOiBtb2R1bGUgcGVyaXBoZXJhbCBzdWJ0eXBlCgpXaGF0IGRldGVy bWluZXMgdGhlIHBlcmlwaGVyaWFsIHN1YnR5cGU/IEkgc2VlIHRoaXMgaXMgcmVhZCBmcm9tIHRo ZQpkZXZpY2UuIElzIHRoaXMgdmFsdWUgYnVybnQgaW4gdGhlIGNoaXBzZXQsIG9yIHRoZSBkZXZp Y2UgZGV0ZWN0cwp3aGV0aGVyIHRoZSBMRUQgaW91dHMgYXJlIGNvbm5lY3RlZD8KCj4gKyAqIEBm bGFzaF9yZWd1bGF0b3Jfb246IGZsYXNoIHJlZ3VsYXRvciBzdGF0dXMKPiArICogQHRvcmNoX3Jl Z3VsYXRvcl9vbjogdG9yY2ggcmVndWxhdG9yIHN0YXR1cwo+ICsgKi8KPiArc3RydWN0IHFjb21f Zmxhc2hfZGV2aWNlIHsKPiArCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKPiArCXUxNiBiYXNlOwo+ ICsJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKPiArCXN0cnVjdCByZWd1bGF0b3IgKmZs YXNoX2Jvb3N0X3JlZzsKPiArCXN0cnVjdCByZWd1bGF0b3IgKnRvcmNoX2Jvb3N0X3JlZzsKPiAr CXN0cnVjdCBxY29tX2ZsYXNoX2xlZCBsZWRzWzJdOwo+ICsJdTggbnVtX2xlZHM7Cj4gKwlzdHJ1 Y3QgbXV0ZXggbG9jazsKPiArCXU4IHRvcmNoX2VuYWJsZTsKPiArCXU4IHBlcmlwaGVyYWxfc3Vi dHlwZTsKPiArCWJvb2wgZmxhc2hfcmVndWxhdG9yX29uOwo+ICsJYm9vbCB0b3JjaF9yZWd1bGF0 b3Jfb247Cj4gK307Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBxY29tX2ZsYXNoX2xlZCAq ZmxjZGV2X3RvX2xlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2X2ZsYXNoICpmbGVkX2NkZXYpCj4gK3sK PiArCXJldHVybiBjb250YWluZXJfb2YoZmxlZF9jZGV2LCBzdHJ1Y3QgcWNvbV9mbGFzaF9sZWQs IGNkZXYpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBxY29tX2ZsYXNoX2Rldmlj ZSAqbGVkX3RvX2xlZHNfZGV2KHN0cnVjdCBxY29tX2ZsYXNoX2xlZCAqbGVkKQo+ICt7Cj4gKwly ZXR1cm4gY29udGFpbmVyX29mKGxlZCwgc3RydWN0IHFjb21fZmxhc2hfZGV2aWNlLCBsZWRzW2xl ZC0+aWRdKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBsZWRfcmVhZF9yZWcoc3RydWN0IHFjb21f Zmxhc2hfZGV2aWNlICpsZWRzX2RldiwgdTE2IG9mZnNldCwgdTggKmRhdGEpCj4gK3sKPiArCXVu c2lnbmVkIGludCB2YWw7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IHJlZ21hcF9yZWFkKGxl ZHNfZGV2LT5yZWdtYXAsIGxlZHNfZGV2LT5iYXNlICsgb2Zmc2V0LCAmdmFsKTsKPiArCWlmIChy ZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJKmRhdGEgPSB2YWw7Cj4gKwlyZXR1cm4g MDsKPiArfQo+ICsKPiArc3RhdGljIGludCBsZWRfd3JpdGVfcmVnKHN0cnVjdCBxY29tX2ZsYXNo X2RldmljZSAqbGVkc19kZXYsIHUxNiBvZmZzZXQsIHU4IGRhdGEpCj4gK3sKPiArCXJldHVybiBy ZWdtYXBfd3JpdGUobGVkc19kZXYtPnJlZ21hcCwgbGVkc19kZXYtPmJhc2UgKyBvZmZzZXQsIGRh dGEpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHFjb21fZmxhc2hfbWFza2VkX3dyaXRlKHN0cnVj dCBxY29tX2ZsYXNoX2RldmljZSAqbGVkc19kZXYsCj4gKwkJCQkgICB1MTYgYWRkciwKPiArCQkJ CSAgIHU4IG1hc2ssCj4gKwkJCQkgICB1OCB2YWwpCj4gK3sKPiArCWludCByYzsKPiArCXU4IHJl ZzsKPiArCj4gKwlyYyA9IGxlZF9yZWFkX3JlZyhsZWRzX2RldiwgYWRkciwgJnJlZyk7Cj4gKwlp ZiAocmMpCj4gKwkJZGV2X2VycigmbGVkc19kZXYtPnBkZXYtPmRldiwKPiArCQkJIlVuYWJsZSB0 byByZWFkIGZyb20gYWRkcj0leCwgcmMoJWQpXG4iLCBhZGRyLCByYyk7Cj4gKwo+ICsJcmVnICY9 IH5tYXNrOwo+ICsJcmVnIHw9IHZhbDsKPiArCj4gKwlyYyA9IGxlZF93cml0ZV9yZWcobGVkc19k ZXYsIGFkZHIsIHJlZyk7Cj4gKwlpZiAocmMpCj4gKwkJZGV2X2VycigmbGVkc19kZXYtPnBkZXYt PmRldiwKPiArCQkJIlVuYWJsZSB0byB3cml0ZSB0byBhZGRyPSV4LCByYyglZClcbiIsIGFkZHIs IHJjKTsKPiArCXJldHVybiByYzsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgcWNvbV9mbGFzaF9k dW1wX3JlZ3Moc3RydWN0IHFjb21fZmxhc2hfZGV2aWNlICpsZWRzX2RldiwKPiArCQkJCSB1OCBy ZWdzW10sCj4gKwkJCQkgdTggYXJyYXlfc2l6ZSkKPiArewo+ICsJaW50IGk7Cj4gKwl1OCB2YWw7 Cj4gKwo+ICsJcHJfZGVidWcoIj09PT09IExFRCByZWdpc3RlciBkdW1wIHN0YXJ0ID09PT09XG4i KTsKPiArCWZvciAoaSA9IDA7IGkgPCBhcnJheV9zaXplOyBpKyspIHsKPiArCQlsZWRfcmVhZF9y ZWcobGVkc19kZXYsIHJlZ3NbaV0sICZ2YWwpOwo+ICsJCXByX2RlYnVnKCIweCV4ID0gMHgleFxu IiwgbGVkc19kZXYtPmJhc2UgKyByZWdzW2ldLCB2YWwpOwo+ICsJfQo+ICsJcHJfZGVidWcoIj09 PT09IExFRCByZWdpc3RlciBkdW1wIGVuZCA9PT09PVxuIik7Cj4gK30KPiArCj4gK3N0YXRpYyB1 OCBxY29tX2ZsYXNoX2R1cmF0aW9uX3RvX3JlZyh1MzIgdXMpCj4gK3sKPiArCWlmICh1cyA8IEZM QVNIX0RVUkFUSU9OX01JTikKPiArCQl1cyA9IEZMQVNIX0RVUkFUSU9OX01JTjsKPiArCXJldHVy biAodXMgLSBGTEFTSF9EVVJBVElPTl9NSU4pIC8gRkxBU0hfRFVSQVRJT05fU1RFUDsKPiArfQo+ ICsKPiArc3RhdGljIHU4IHFjb21fZmxhc2hfY3VycmVudF90b19yZWcodTMyIHVhKQo+ICt7Cj4g KwlpZiAodWEgPCBGTEFTSF9DVVJSRU5UX01JTikKPiArCQl1YSA9IEZMQVNIX0NVUlJFTlRfTUlO Owo+ICsJcmV0dXJuICh1YSAtIEZMQVNIX0NVUlJFTlRfTUlOKSAvIEZMQVNIX0NVUlJFTlRfU1RF UDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgY2xhbXBfYWxpZ24odTMyICp2LCB1MzIgbWluLCB1 MzIgbWF4LCB1MzIgc3RlcCkKPiArewo+ICsJKnYgPSBjbGFtcF92YWwoKnYsIG1pbiwgbWF4KTsK PiArCWlmIChzdGVwID4gMSkKPiArCQkqdiA9ICgqdiAtIG1pbikgLyBzdGVwICogc3RlcCArIG1p bjsKPiArfQo+ICsKPiArc3RhdGljIGludCBxY29tX2ZsYXNoX2ZsZWRfcmVndWxhdG9yX29wZXJh dGUoc3RydWN0IHFjb21fZmxhc2hfZGV2aWNlICpsZWRzX2RldiwKPiArCQkJCQkgICAgIGJvb2wg b24pCj4gK3sKPiArCWludCByYzsKPiArCj4gKwlpZiAoIW9uKQo+ICsJCWdvdG8gcmVndWxhdG9y X3R1cm5fb2ZmOwo+ICsKPiArCWlmICghbGVkc19kZXYtPmZsYXNoX3JlZ3VsYXRvcl9vbikgewo+ ICsJCWlmIChsZWRzX2Rldi0+Zmxhc2hfYm9vc3RfcmVnKSB7Cj4gKwkJCXJjID0gcmVndWxhdG9y X2VuYWJsZShsZWRzX2Rldi0+Zmxhc2hfYm9vc3RfcmVnKTsKPiArCQkJaWYgKHJjKSB7Cj4gKwkJ CQlkZXZfZXJyKCZsZWRzX2Rldi0+cGRldi0+ZGV2LAo+ICsJCQkJCSJSZWd1bGF0b3IgZW5hYmxl IGZhaWxlZCglZClcbiIsIHJjKTsKPiArCQkJCXJldHVybiByYzsKPiArCQkJfQo+ICsJCQlsZWRz X2Rldi0+Zmxhc2hfcmVndWxhdG9yX29uID0gdHJ1ZTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJcmV0 dXJuIDA7Cj4gKwo+ICtyZWd1bGF0b3JfdHVybl9vZmY6Cj4gKwlpZiAobGVkc19kZXYtPmZsYXNo X3JlZ3VsYXRvcl9vbikgewo+ICsJCWlmIChsZWRzX2Rldi0+Zmxhc2hfYm9vc3RfcmVnKSB7Cj4g KwkJCXJjID0gcWNvbV9mbGFzaF9tYXNrZWRfd3JpdGUobGVkc19kZXYsCj4gKwkJCQlGTEFTSF9F TkFCTEVfQ09OVFJPTCwKPiArCQkJCUZMQVNIX0VOQUJMRV9NQVNLLAo+ICsJCQkJRkxBU0hfRElT QUJMRV9BTEwpOwo+ICsJCQlpZiAocmMpCj4gKwkJCQlkZXZfZXJyKCZsZWRzX2Rldi0+cGRldi0+ ZGV2LAo+ICsJCQkJCSJFbmFibGUgcmVnIHdyaXRlIGZhaWxlZCglZClcbiIsIHJjKTsKPiArCj4g KwkJCXJjID0gcmVndWxhdG9yX2Rpc2FibGUobGVkc19kZXYtPmZsYXNoX2Jvb3N0X3JlZyk7Cj4g KwkJCWlmIChyYykgewo+ICsJCQkJZGV2X2VycigmbGVkc19kZXYtPnBkZXYtPmRldiwKPiArCQkJ CQkiUmVndWxhdG9yIGRpc2FibGUgZmFpbGVkKCVkKVxuIiwgcmMpOwo+ICsJCQkJcmV0dXJuIHJj Owo+ICsJCQl9Cj4gKwkJCWxlZHNfZGV2LT5mbGFzaF9yZWd1bGF0b3Jfb24gPSBmYWxzZTsKPiAr CQl9Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcWNvbV9m bGFzaF90b3JjaF9yZWd1bGF0b3Jfb3BlcmF0ZShzdHJ1Y3QgcWNvbV9mbGFzaF9kZXZpY2UgKmxl ZHNfZGV2LAo+ICsJCQkJCSAgICAgIGJvb2wgb24pCj4gK3sKPiArCWludCByYzsKPiArCj4gKwlp ZiAoIW9uKQo+ICsJCWdvdG8gcmVndWxhdG9yX3R1cm5fb2ZmOwo+ICsKPiArCWlmICghbGVkc19k ZXYtPnRvcmNoX3JlZ3VsYXRvcl9vbikgewo+ICsJCXJjID0gcmVndWxhdG9yX2VuYWJsZShsZWRz X2Rldi0+dG9yY2hfYm9vc3RfcmVnKTsKPiArCQlpZiAocmMpIHsKPiArCQkJZGV2X2VycigmbGVk c19kZXYtPnBkZXYtPmRldiwKPiArCQkJCSJSZWd1bGF0b3IgZW5hYmxlIGZhaWxlZCglZClcbiIs IHJjKTsKPiArCQkJcmV0dXJuIHJjOwo+ICsJCX0KPiArCQlsZWRzX2Rldi0+dG9yY2hfcmVndWxh dG9yX29uID0gdHJ1ZTsKPiArCX0KPiArCXJldHVybiAwOwo+ICsKPiArcmVndWxhdG9yX3R1cm5f b2ZmOgo+ICsJaWYgKGxlZHNfZGV2LT50b3JjaF9yZWd1bGF0b3Jfb24pIHsKPiArCQlyYyA9IHFj b21fZmxhc2hfbWFza2VkX3dyaXRlKGxlZHNfZGV2LCBGTEFTSF9FTkFCTEVfQ09OVFJPTCwKPiAr CQkJCUZMQVNIX0VOQUJMRV9NT0RVTEVfTUFTSywgRkxBU0hfRElTQUJMRV9BTEwpOwo+ICsJCWlm IChyYykKPiArCQkJZGV2X2VycigmbGVkc19kZXYtPnBkZXYtPmRldiwKPiArCQkJCSJFbmFibGUg cmVnIHdyaXRlIGZhaWxlZCglZClcbiIsIHJjKTsKPiArCj4gKwkJcmMgPSByZWd1bGF0b3JfZGlz YWJsZShsZWRzX2Rldi0+dG9yY2hfYm9vc3RfcmVnKTsKPiArCQlpZiAocmMpIHsKPiArCQkJZGV2 X2VycigmbGVkc19kZXYtPnBkZXYtPmRldiwKPiArCQkJCSJSZWd1bGF0b3IgZGlzYWJsZSBmYWls ZWQoJWQpXG4iLCByYyk7Cj4gKwkJCXJldHVybiByYzsKPiArCQl9Cj4gKwkJbGVkc19kZXYtPnRv cmNoX3JlZ3VsYXRvcl9vbiA9IGZhbHNlOwo+ICsJfQo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgcWNvbV9mbGFzaF9mbGVkX3NldChzdHJ1Y3QgcWNvbV9mbGFzaF9sZWQgKmxl ZCwgYm9vbCBvbikKPiArewo+ICsJaW50IHJjLCBlcnJvcjsKPiArCXU4IGN1cnI7Cj4gKwlzdHJ1 Y3QgcWNvbV9mbGFzaF9kZXZpY2UgKmxlZHNfZGV2ID0gbGVkX3RvX2xlZHNfZGV2KGxlZCk7Cj4g KwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmbGVkc19kZXYtPnBkZXYtPmRldjsKPiArCj4gKwkvKiBk dW1wIGZsYXNoIHJlZ2lzdGVycyAqLwo+ICsJcHJfZGVidWcoIlJlZ2R1bXAgYmVmb3JlXG4iKTsK PiArCXFjb21fZmxhc2hfZHVtcF9yZWdzKGxlZHNfZGV2LCBmbGFzaF9kZWJ1Z19yZWdzLAo+ICsJ CQkgICAgIEFSUkFZX1NJWkUoZmxhc2hfZGVidWdfcmVncykpOwo+ICsKPiArCS8qIFNldCBsZWQg Y3VycmVudCAqLwo+ICsJaWYgKG9uKSB7CgpBcyBCam9ybiBoYXMgYWxyZWFkeSBub3RpY2VkIHRo aXMgZnVuY3Rpb24gc2hvdWxkIGJlIHJlZmFjdG9yZWQuCgo+ICsJCWlmIChsZWQtPnRvcmNoX2Vu YWJsZSkKPiArCQkJY3VyciA9IHFjb21fZmxhc2hfY3VycmVudF90b19yZWcobGVkLT5jZGV2Lmxl ZF9jZGV2LmJyaWdodG5lc3MpOwo+ICsJCWVsc2UKPiArCQkJY3VyciA9IHFjb21fZmxhc2hfY3Vy cmVudF90b19yZWcobGVkLT5jZGV2LmJyaWdodG5lc3MudmFsKTsKPiArCj4gKwkJaWYgKGxlZC0+ dG9yY2hfZW5hYmxlKSB7Cj4gKwkJCWlmIChsZWRzX2Rldi0+cGVyaXBoZXJhbF9zdWJ0eXBlID09 IEZMQVNIX1NVQlRZUEVfRFVBTCkgewo+ICsJCQkJcmMgPSBxY29tX2ZsYXNoX3RvcmNoX3JlZ3Vs YXRvcl9vcGVyYXRlKGxlZHNfZGV2LCB0cnVlKTsKPiArCQkJCWlmIChyYykgewo+ICsJCQkJCWRl dl9lcnIoZGV2LAo+ICsJCQkJCSJUb3JjaCByZWd1bGF0b3Igb3BlcmF0ZSBmYWlsZWQoJWQpXG4i LAo+ICsJCQkJCXJjKTsKPiArCQkJCQlyZXR1cm4gcmM7Cj4gKwkJCQl9Cj4gKwkJCX0gZWxzZSBp ZiAobGVkc19kZXYtPnBlcmlwaGVyYWxfc3VidHlwZSA9PSBGTEFTSF9TVUJUWVBFX1NJTkdMRSkg ewo+ICsJCQkJcmMgPSBxY29tX2ZsYXNoX2ZsZWRfcmVndWxhdG9yX29wZXJhdGUobGVkc19kZXYs IHRydWUpOwo+ICsJCQkJaWYgKHJjKSB7Cj4gKwkJCQkJZGV2X2VycihkZXYsCj4gKwkJCQkJIkZs YXNoIHJlZ3VsYXRvciBvcGVyYXRlIGZhaWxlZCglZClcbiIsCj4gKwkJCQkJcmMpOwo+ICsJCQkJ CWdvdG8gZXJyb3JfZmxhc2hfc2V0Owo+ICsJCQkJfQo+ICsKPiArCQkJCS8qCj4gKwkJCQkgKiBX cml0ZSAweDgwIHRvIE1PRFVMRV9FTkFCTEUgYmVmb3JlIHdyaXRpbmcKPiArCQkJCSAqIDB4RTAg aW4gb3JkZXIgdG8gYXZvaWQgYSBoYXJkd2FyZSBidWcgY2F1c2VkCj4gKwkJCQkgKiBieSByZWdp c3RlciB2YWx1ZSBnb2luZyBmcm9tIDB4MDAgdG8gMHhFMC4KPiArCQkJCSAqLwo+ICsJCQkJcmMg PSBxY29tX2ZsYXNoX21hc2tlZF93cml0ZShsZWRzX2RldiwKPiArCQkJCQlGTEFTSF9FTkFCTEVf Q09OVFJPTCwKPiArCQkJCQlGTEFTSF9FTkFCTEVfTU9EVUxFX01BU0ssCj4gKwkJCQkJRkxBU0hf RU5BQkxFX01PRFVMRSk7Cj4gKwkJCQlpZiAocmMpIHsKPiArCQkJCQlkZXZfZXJyKGRldiwKPiAr CQkJCQkJIkVuYWJsZSByZWcgd3JpdGUgZmFpbGVkKCVkKVxuIiwKPiArCQkJCQkJcmMpOwo+ICsJ CQkJCXJldHVybiByYzsKPiArCQkJCX0KPiArCQkJfQo+ICsKPiArCQkJcmMgPSBxY29tX2ZsYXNo X21hc2tlZF93cml0ZShsZWRzX2RldiwKPiArCQkJCUZMQVNIX0xFRF9VTkxPQ0tfU0VDVVJFLAo+ ICsJCQkJRkxBU0hfU0VDVVJFX01BU0ssIEZMQVNIX1VOTE9DS19TRUNVUkUpOwo+ICsJCQlpZiAo cmMpIHsKPiArCQkJCWRldl9lcnIoZGV2LCAiU2VjdXJlIHJlZyB3cml0ZSBmYWlsZWQoJWQpXG4i LCByYyk7Cj4gKwkJCQlnb3RvIGVycm9yX3JlZ193cml0ZTsKPiArCQkJfQo+ICsKPiArCQkJcmMg PSBxY29tX2ZsYXNoX21hc2tlZF93cml0ZShsZWRzX2RldiwKPiArCQkJCUZMQVNIX0xFRF9UT1JD SCwKPiArCQkJCUZMQVNIX1RPUkNIX01BU0ssIEZMQVNIX0xFRF9UT1JDSF9FTkFCTEUpOwo+ICsJ CQlpZiAocmMpIHsKPiArCQkJCWRldl9lcnIoZGV2LCAiVG9yY2ggcmVnIHdyaXRlIGZhaWxlZCgl ZClcbiIsIHJjKTsKPiArCQkJCWdvdG8gZXJyb3JfcmVnX3dyaXRlOwo+ICsJCQl9CgpEbyB5b3Ug aGF2ZSB0byBkbyBpdCBhbHdheXMsIGV2ZW4gaWYgdG9yY2ggaXMgYWxyZWFkeSBlbmFibGVkIGFu ZCB5b3UKd2FudCB0byBvbmx5IGNoYW5nZSBicmlnaHRuZXNzPwoKPiArCQkJcmMgPSBxY29tX2Zs YXNoX21hc2tlZF93cml0ZShsZWRzX2RldiwKPiArCQkJCWxlZC0+Y3VycmVudF9hZGRyLAo+ICsJ CQkJRkxBU0hfQ1VSUkVOVF9NQVNLLAo+ICsJCQkJY3Vycik7Cj4gKwkJCWlmIChyYykgewo+ICsJ CQkJZGV2X2VycihkZXYsICJDdXJyZW50IHJlZyB3cml0ZSBmYWlsZWQoJWQpXG4iLCByYyk7Cj4g KwkJCQlnb3RvIGVycm9yX3JlZ193cml0ZTsKPiArCQkJfQo+ICsKPiArCQkJcmMgPSBxY29tX2Zs YXNoX21hc2tlZF93cml0ZShsZWRzX2RldiwKPiArCQkJCWxlZC0+c2Vjb25kX2FkZHIsCj4gKwkJ CQlGTEFTSF9DVVJSRU5UX01BU0ssCj4gKwkJCQljdXJyKTsKPiArCQkJaWYgKHJjKSB7Cj4gKwkJ CQlkZXZfZXJyKGRldiwKPiArCQkJCQkiMm5kIEN1cnJlbnQgcmVnIHdyaXRlIGZhaWxlZCglZClc biIsCj4gKwkJCQkJcmMpOwo+ICsJCQkJZ290byBlcnJvcl9yZWdfd3JpdGU7Cj4gKwkJCX0KPiAr Cj4gKwkJCXFjb21fZmxhc2hfbWFza2VkX3dyaXRlKGxlZHNfZGV2LCBGTEFTSF9NQVhfQ1VSUiwK PiArCQkJCUZMQVNIX0NVUlJFTlRfTUFTSywKPiArCQkJCVRPUkNIX01BWF9MRVZFTCk7CgpDYW4n dCB0aGlzIGJlIHNldCBvbmNlIGF0IHByb2JlPwoKPiArCQkJaWYgKHJjKSB7Cj4gKwkJCQlkZXZf ZXJyKGRldiwKPiArCQkJCQkiTWF4IGN1cnJlbnQgcmVnIHdyaXRlIGZhaWxlZCglZClcbiIsCj4g KwkJCQkJcmMpOwo+ICsJCQkJZ290byBlcnJvcl9yZWdfd3JpdGU7Cj4gKwkJCX0KPiArCj4gKwkJ CXJjID0gcWNvbV9mbGFzaF9tYXNrZWRfd3JpdGUobGVkc19kZXYsCj4gKwkJCQlGTEFTSF9FTkFC TEVfQ09OVFJPTCwKPiArCQkJCUZMQVNIX0VOQUJMRV9NQVNLLAo+ICsJCQkJbGVkc19kZXYtPnRv cmNoX2VuYWJsZSk7Cj4gKwkJCWlmIChyYykgewo+ICsJCQkJZGV2X2VycihkZXYsICJFbmFibGUg cmVnIHdyaXRlIGZhaWxlZCglZClcbiIsIHJjKTsKPiArCQkJCWdvdG8gZXJyb3JfcmVnX3dyaXRl Owo+ICsJCQl9Cj4gKwo+ICsJCQlyYyA9IHFjb21fZmxhc2hfbWFza2VkX3dyaXRlKGxlZHNfZGV2 LAo+ICsJCQkJRkxBU0hfTEVEX1NUUk9CRV9DVFJMLAo+ICsJCQkJRkxBU0hfU1RST0JFX1NXLAo+ ICsJCQkJRkxBU0hfU1RST0JFX1NXKTsKCkZvciBub3csIGxldCdzIGNvbmZpZ3VyZSBzdHJvYmUg bW9kZSBhbHdheXMgdG8gc29mdHdhcmUuIENhbiBpdCBiZSBkb25lIApvbmNlIGF0IHByb2JlPyBI YXJkd2FyZSBzdHJvYmUgbW9kZSBpcyB1c2VmdWwgb25seSBpbiBjb29wZXJhdGlvbiB3aXRoCklT UCBkZXZpY2UsIGFuZCB0aHVzIG5lZWRzIHRvIGJlIGltcGxlbWVudGVkIG9ubHkgaWYgdjRsMiBm bGFzaCBzdXBwb3J0IAppcyBhZGRlZC4KCj4gKwkJCWlmIChyYykgewo+ICsJCQkJZGV2X2Vycihk ZXYsCj4gKwkJCQkJIkxFRCAlZCBzdHJvYmUgcmVnIHdyaXRlIGZhaWxlZCglZClcbiIsCj4gKwkJ CQkJbGVkLT5pZCwgcmMpOwo+ICsJCQkJZ290byBlcnJvcl9yZWdfd3JpdGU7Cj4gKwkJCX0KPiAr CQl9IGVsc2Ugewo+ICsJCQlyYyA9IHFjb21fZmxhc2hfZmxlZF9yZWd1bGF0b3Jfb3BlcmF0ZShs ZWRzX2RldiwgdHJ1ZSk7Cj4gKwkJCWlmIChyYykgewo+ICsJCQkJZGV2X2VycihkZXYsCj4gKwkJ CQkJIkZsYXNoIHJlZ3VsYXRvciBvcGVyYXRlIGZhaWxlZCglZClcbiIsCj4gKwkJCQkJcmMpOwo+ ICsJCQkJZ290byBlcnJvcl9mbGFzaF9zZXQ7Cj4gKwkJCX0KPiArCj4gKwkJCS8qIFNldCBmbGFz aCBzYWZldHkgdGltZXIgKi8KPiArCQkJcmMgPSBxY29tX2ZsYXNoX21hc2tlZF93cml0ZShsZWRz X2RldiwKPiArCQkJCUZMQVNIX1NBRkVUWV9USU1FUiwKPiArCQkJCUZMQVNIX1NBRkVUWV9USU1F Ul9NQVNLLAoKQ2FuJ3QgaXQgYmUgc2V0IGluIHRpbWVvdXRfc2V0IG9wPwoKPiArCQkJCXFjb21f Zmxhc2hfZHVyYXRpb25fdG9fcmVnKGxlZC0+Y2Rldi50aW1lb3V0LnZhbCkpOwo+ICsJCQlpZiAo cmMpIHsKPiArCQkJCWRldl9lcnIoZGV2LAo+ICsJCQkJCSJTYWZldHkgdGltZXIgcmVnIHdyaXRl IGZhaWxlZCglZClcbiIsCj4gKwkJCQkJcmMpOwo+ICsJCQkJZ290byBlcnJvcl9mbGFzaF9zZXQ7 Cj4gKwkJCX0KPiArCj4gKwkJCS8qIFNldCBtYXggY3VycmVudCAqLwo+ICsJCQlyYyA9IHFjb21f Zmxhc2hfbWFza2VkX3dyaXRlKGxlZHNfZGV2LAo+ICsJCQkJRkxBU0hfTUFYX0NVUlIsIEZMQVNI X0NVUlJFTlRfTUFTSywKPiArCQkJCUZMQVNIX01BWF9MRVZFTCk7Cj4gKwkJCWlmIChyYykgewo+ ICsJCQkJZGV2X2VycihkZXYsCj4gKwkJCQkJIk1heCBjdXJyZW50IHJlZyB3cml0ZSBmYWlsZWQo JWQpXG4iLAo+ICsJCQkJCXJjKTsKPiArCQkJCWdvdG8gZXJyb3JfZmxhc2hfc2V0Owo+ICsJCQl9 Cj4gKwo+ICsJCQkvKiBTZXQgY2xhbXAgY3VycmVudCAqLwo+ICsJCQlyYyA9IHFjb21fZmxhc2hf bWFza2VkX3dyaXRlKGxlZHNfZGV2LAo+ICsJCQkJRkxBU0hfQ0xBTVBfQ1VSUiwKPiArCQkJCUZM QVNIX0NVUlJFTlRfTUFTSywKCkNhbid0IGl0IGJlIHNldCBvbmNlLCBhdCBwcm9iZT8KCj4gKwkJ CQlxY29tX2ZsYXNoX2N1cnJlbnRfdG9fcmVnKGxlZC0+Y2xhbXBfY3VycikpOwo+ICsJCQlpZiAo cmMpIHsKPiArCQkJCWRldl9lcnIoZGV2LAo+ICsJCQkJCSJDbGFtcCBjdXJyZW50IHJlZyB3cml0 ZSBmYWlsZWQoJWQpXG4iLAo+ICsJCQkJCXJjKTsKPiArCQkJCWdvdG8gZXJyb3JfZmxhc2hfc2V0 Owo+ICsJCQl9Cj4gKwo+ICsJCQlyYyA9IHFjb21fZmxhc2hfbWFza2VkX3dyaXRlKGxlZHNfZGV2 LAo+ICsJCQkJbGVkLT5jdXJyZW50X2FkZHIsCj4gKwkJCQlGTEFTSF9DVVJSRU5UX01BU0ssCj4g KwkJCQljdXJyKTsKCkNhbid0IGl0IGJlIHNldCBpbiBmbGFzaF9icmlnaHRuZXNzX3NldCBvcCA/ Cgo+ICsJCQlpZiAocmMpIHsKPiArCQkJCWRldl9lcnIoZGV2LCAiQ3VycmVudCByZWcgd3JpdGUg ZmFpbGVkKCVkKVxuIiwgcmMpOwo+ICsJCQkJZ290byBlcnJvcl9mbGFzaF9zZXQ7Cj4gKwkJCX0K PiArCj4gKwkJCXJjID0gcWNvbV9mbGFzaF9tYXNrZWRfd3JpdGUobGVkc19kZXYsCj4gKwkJCQlG TEFTSF9FTkFCTEVfQ09OVFJPTCwKPiArCQkJCWxlZC0+ZW5hYmxlX21vZHVsZSwKPiArCQkJCWxl ZC0+ZW5hYmxlX21vZHVsZSk7Cj4gKwkJCWlmIChyYykgewo+ICsJCQkJZGV2X2VycihkZXYsICJF bmFibGUgcmVnIHdyaXRlIGZhaWxlZCglZClcbiIsIHJjKTsKPiArCQkJCWdvdG8gZXJyb3JfZmxh c2hfc2V0Owo+ICsJCQl9Cj4gKwo+ICsJCQkvKiBUT0RPIHRyeSB0byBub3QgYnVzeSB3YWl0Ki8K PiArCQkJbWRlbGF5KDEpOwo+ICsKPiArCQkJaWYgKCFsZWQtPnN0cm9iZV90eXBlKSB7Cj4gKwkJ CQlyYyA9IHFjb21fZmxhc2hfbWFza2VkX3dyaXRlKGxlZHNfZGV2LAo+ICsJCQkJCUZMQVNIX0xF RF9TVFJPQkVfQ1RSTCwKPiArCQkJCQlsZWQtPnRyaWdnZXJfZmxhc2gsCj4gKwkJCQkJbGVkLT50 cmlnZ2VyX2ZsYXNoKTsKPiArCQkJCWlmIChyYykgewo+ICsJCQkJCWRldl9lcnIoZGV2LAo+ICsJ CQkJCSJMRUQgJWQgc3Ryb2JlIHJlZyB3cml0ZSBmYWlsZWQoJWQpXG4iLAo+ICsJCQkJCWxlZC0+ aWQsIHJjKTsKPiArCQkJCQlnb3RvIGVycm9yX2ZsYXNoX3NldDsKPiArCQkJCX0KPiArCQkJfSBl bHNlIHsKPiArCQkJCXJjID0gcWNvbV9mbGFzaF9tYXNrZWRfd3JpdGUobGVkc19kZXYsCj4gKwkJ CQkJRkxBU0hfTEVEX1NUUk9CRV9DVFJMLAo+ICsJCQkJCShsZWQtPnRyaWdnZXJfZmxhc2ggfCBG TEFTSF9TVFJPQkVfSFcpLAo+ICsJCQkJCShsZWQtPnRyaWdnZXJfZmxhc2ggfCBGTEFTSF9TVFJP QkVfSFcpKTsKPiArCQkJCWlmIChyYykgewo+ICsJCQkJCWRldl9lcnIoZGV2LAo+ICsJCQkJCSJM RUQgJWQgc3Ryb2JlIHJlZyB3cml0ZSBmYWlsZWQoJWQpXG4iLAo+ICsJCQkJCWxlZC0+aWQsIHJj KTsKPiArCQkJCQlnb3RvIGVycm9yX2ZsYXNoX3NldDsKPiArCQkJCX0KPiArCQkJfQo+ICsJCX0K PiArCX0gZWxzZSB7Cj4gKwkJcmMgPSBxY29tX2ZsYXNoX21hc2tlZF93cml0ZShsZWRzX2RldiwK PiArCQkJRkxBU0hfTEVEX1NUUk9CRV9DVFJMLAo+ICsJCQlsZWQtPnRyaWdnZXJfZmxhc2gsCj4g KwkJCUZMQVNIX0RJU0FCTEVfQUxMKTsKPiArCQlpZiAocmMpIHsKPiArCQkJZGV2X2VycihkZXYs Cj4gKwkJCQkiTEVEICVkIGZsYXNoIHdyaXRlIGZhaWxlZCglZClcbiIsIGxlZC0+aWQsIHJjKTsK PiArCQkJaWYgKGxlZC0+dG9yY2hfZW5hYmxlKQo+ICsJCQkJZ290byBlcnJvcl90b3JjaF9zZXQ7 Cj4gKwkJCWVsc2UKPiArCQkJCWdvdG8gZXJyb3JfZmxhc2hfc2V0Owo+ICsJCX0KPiArCj4gKwkJ LyogVE9ETyB0cnkgdG8gbm90IGJ1c3kgd2FpdCovCj4gKwkJbWRlbGF5KDIpOwo+ICsJCXVkZWxh eSgxNjApOwo+ICsKPiArCQlpZiAobGVkLT50b3JjaF9lbmFibGUpIHsKPiArCQkJcmMgPSBxY29t X2ZsYXNoX21hc2tlZF93cml0ZShsZWRzX2RldiwKPiArCQkJCUZMQVNIX0xFRF9VTkxPQ0tfU0VD VVJFLAo+ICsJCQkJRkxBU0hfU0VDVVJFX01BU0ssIEZMQVNIX1VOTE9DS19TRUNVUkUpOwo+ICsJ CQlpZiAocmMpIHsKPiArCQkJCWRldl9lcnIoZGV2LCAiU2VjdXJlIHJlZyB3cml0ZSBmYWlsZWQo JWQpXG4iLCByYyk7Cj4gKwkJCQlnb3RvIGVycm9yX3RvcmNoX3NldDsKPiArCQkJfQo+ICsKPiAr CQkJcmMgPSBxY29tX2ZsYXNoX21hc2tlZF93cml0ZShsZWRzX2RldiwKPiArCQkJCQlGTEFTSF9M RURfVE9SQ0gsCj4gKwkJCQkJRkxBU0hfVE9SQ0hfTUFTSywKPiArCQkJCQlGTEFTSF9MRURfVE9S Q0hfRElTQUJMRSk7Cj4gKwkJCWlmIChyYykgewo+ICsJCQkJZGV2X2VycihkZXYsICJUb3JjaCBy ZWcgd3JpdGUgZmFpbGVkKCVkKVxuIiwgcmMpOwo+ICsJCQkJZ290byBlcnJvcl90b3JjaF9zZXQ7 Cj4gKwkJCX0KPiArCj4gKwkJCWlmIChsZWRzX2Rldi0+cGVyaXBoZXJhbF9zdWJ0eXBlID09IEZM QVNIX1NVQlRZUEVfRFVBTCkgewo+ICsJCQkJcmMgPSBxY29tX2ZsYXNoX3RvcmNoX3JlZ3VsYXRv cl9vcGVyYXRlKGxlZHNfZGV2LGZhbHNlKTsKPiArCQkJCWlmIChyYykgewo+ICsJCQkJCWRldl9l cnIoZGV2LAo+ICsJCQkJCQkiVG9yY2ggcmVndWxhdG9yIG9wZXJhdGUgZmFpbGVkKCVkKVxuIiwK PiArCQkJCQkJcmMpOwo+ICsJCQkJCXJldHVybiByYzsKPiArCQkJCX0KPiArCQkJfSBlbHNlIGlm IChsZWRzX2Rldi0+cGVyaXBoZXJhbF9zdWJ0eXBlID09IEZMQVNIX1NVQlRZUEVfU0lOR0xFKSB7 Cj4gKwkJCQlyYyA9IHFjb21fZmxhc2hfZmxlZF9yZWd1bGF0b3Jfb3BlcmF0ZShsZWRzX2Rldiwg ZmFsc2UpOwo+ICsJCQkJaWYgKHJjKSB7Cj4gKwkJCQkJZGV2X2VycihkZXYsCj4gKwkJCQkJCSJG bGFzaCByZWd1bGF0b3Igb3BlcmF0ZSBmYWlsZWQoJWQpXG4iLAo+ICsJCQkJCQlyYyk7Cj4gKwkJ CQkJcmV0dXJuIHJjOwo+ICsJCQkJfQo+ICsJCQl9Cj4gKwkJfSBlbHNlIHsKPiArCQkJcmMgPSBx Y29tX2ZsYXNoX21hc2tlZF93cml0ZShsZWRzX2RldiwKPiArCQkJCUZMQVNIX0VOQUJMRV9DT05U Uk9MLAo+ICsJCQkJbGVkLT5lbmFibGVfbW9kdWxlICYKPiArCQkJCX5GTEFTSF9FTkFCTEVfTU9E VUxFX01BU0ssCj4gKwkJCQlGTEFTSF9ESVNBQkxFX0FMTCk7Cj4gKwkJCWlmIChyYykgewo+ICsJ CQkJZGV2X2VycihkZXYsICJFbmFibGUgcmVnIHdyaXRlIGZhaWxlZCglZClcbiIsIHJjKTsKPiAr CQkJCWlmIChsZWQtPnRvcmNoX2VuYWJsZSkKPiArCQkJCQlnb3RvIGVycm9yX3RvcmNoX3NldDsK PiArCQkJCWVsc2UKPiArCQkJCQlnb3RvIGVycm9yX2ZsYXNoX3NldDsKPiArCQkJfQo+ICsKPiAr CQkJcmMgPSBxY29tX2ZsYXNoX2ZsZWRfcmVndWxhdG9yX29wZXJhdGUobGVkc19kZXYsIGZhbHNl KTsKPiArCQkJaWYgKHJjKSB7Cj4gKwkJCQlkZXZfZXJyKGRldiwKPiArCQkJCQkiRmxhc2ggcmVn dWxhdG9yIG9wZXJhdGUgZmFpbGVkKCVkKVxuIiwKPiArCQkJCQlyYyk7Cj4gKwkJCQlyZXR1cm4g cmM7Cj4gKwkJCX0KPiArCQl9Cj4gKwl9Cj4gKwo+ICsJcHJfZGVidWcoIlJlZ2R1bXAgYWZ0ZXJc biIpOwo+ICsJcWNvbV9mbGFzaF9kdW1wX3JlZ3MobGVkc19kZXYsIGZsYXNoX2RlYnVnX3JlZ3Ms IEFSUkFZX1NJWkUoZmxhc2hfZGVidWdfcmVncykpOwo+ICsKPiArCXJldHVybiAwOwo+ICsKPiAr ZXJyb3JfcmVnX3dyaXRlOgo+ICsJaWYgKGxlZHNfZGV2LT5wZXJpcGhlcmFsX3N1YnR5cGUgPT0g RkxBU0hfU1VCVFlQRV9TSU5HTEUpCj4gKwkJZ290byBlcnJvcl9mbGFzaF9zZXQ7Cj4gKwo+ICtl cnJvcl90b3JjaF9zZXQ6Cj4gKwllcnJvciA9IHFjb21fZmxhc2hfdG9yY2hfcmVndWxhdG9yX29w ZXJhdGUobGVkc19kZXYsIGZhbHNlKTsKPiArCWlmIChlcnJvcikgewo+ICsJCWRldl9lcnIoZGV2 LCAiVG9yY2ggcmVndWxhdG9yIG9wZXJhdGUgZmFpbGVkKCVkKVxuIiwgcmMpOwo+ICsJCXJldHVy biBlcnJvcjsKPiArCX0KPiArCXJldHVybiByYzsKPiArCj4gK2Vycm9yX2ZsYXNoX3NldDoKPiAr CWVycm9yID0gcWNvbV9mbGFzaF9mbGVkX3JlZ3VsYXRvcl9vcGVyYXRlKGxlZHNfZGV2LCBmYWxz ZSk7Cj4gKwlpZiAoZXJyb3IpIHsKPiArCQlkZXZfZXJyKGRldiwgIkZsYXNoIHJlZ3VsYXRvciBv cGVyYXRlIGZhaWxlZCglZClcbiIsIHJjKTsKPiArCQlyZXR1cm4gZXJyb3I7Cj4gKwl9Cj4gKwly ZXR1cm4gcmM7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcWNvbV9mbGFzaF9sZWRfc2V0KHN0cnVj dCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAo+ICsJCQkgICAgICBlbnVtIGxlZF9icmlnaHRuZXNz IHZhbHVlKQo+ICt7Cj4gKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2X2ZsYXNoICpmbGVkX2NkZXYgPSBs Y2Rldl90b19mbGNkZXYobGVkX2NkZXYpOwo+ICsJc3RydWN0IHFjb21fZmxhc2hfbGVkICpsZWQg PSBmbGNkZXZfdG9fbGVkKGZsZWRfY2Rldik7Cj4gKwlzdHJ1Y3QgcWNvbV9mbGFzaF9kZXZpY2Ug KmxlZHNfZGV2ID0gbGVkX3RvX2xlZHNfZGV2KGxlZCk7Cj4gKwl1MzIgdmFsID0gdmFsdWU7Cj4g KwlpbnQgcmM7Cj4gKwlib29sIG9uOwo+ICsKPiArCWlmICh2YWwgPiBsZWRfY2Rldi0+bWF4X2Jy aWdodG5lc3MpIHsKPiArCQlkZXZfZXJyKCZsZWRzX2Rldi0+cGRldi0+ZGV2LCAiSW52YWxpZCBi cmlnaHRuZXNzIHZhbHVlXG4iKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlp ZiAodmFsKSB7Cj4gKwkJb24gPSB0cnVlOwo+ICsJCWNsYW1wX2FsaWduKCZ2YWwsIEZMQVNIX0NV UlJFTlRfTUlOLCBsZWRfY2Rldi0+bWF4X2JyaWdodG5lc3MsCj4gKwkJCSAgICBGTEFTSF9DVVJS RU5UX1NURVApOwo+ICsJCWxlZF9jZGV2LT5icmlnaHRuZXNzID0gdmFsOwo+ICsJCWxlZC0+dG9y Y2hfZW5hYmxlID0gdHJ1ZTsKPiArCX0gZWxzZSB7Cj4gKwkJb24gPSBmYWxzZTsKPiArCX0KPiAr Cj4gKwltdXRleF9sb2NrKCZsZWRzX2Rldi0+bG9jayk7Cj4gKwlyYyA9IHFjb21fZmxhc2hfZmxl ZF9zZXQobGVkLCBvbik7Cj4gKwlpZiAocmMgPCAwKQo+ICsJCWRldl9lcnIoJmxlZHNfZGV2LT5w ZGV2LT5kZXYsICJGTEFTSCBzZXQgYnJpZ2h0bmVzcyBmYWlsZWQgKCVkKVxuIiwgcmMpOwo+ICsJ bXV0ZXhfdW5sb2NrKCZsZWRzX2Rldi0+bG9jayk7Cj4gKwlyZXR1cm4gcmM7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgcWNvbV9mbGFzaF9mbGVkX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xh c3NkZXZfZmxhc2ggKmZsZWRfY2RldiwKPiArCQkJCQkgIHUzMiBicmlnaHRuZXNzKQo+ICt7Cj4g KwljbGFtcF9hbGlnbigmYnJpZ2h0bmVzcywgRkxBU0hfQ1VSUkVOVF9NSU4sIGZsZWRfY2Rldi0+ YnJpZ2h0bmVzcy5tYXgsCj4gKwkJICAgIEZMQVNIX0NVUlJFTlRfU1RFUCk7Cj4gKwlmbGVkX2Nk ZXYtPmJyaWdodG5lc3MudmFsID0gYnJpZ2h0bmVzczsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IHFjb21fZmxhc2hfZmxlZF9zdHJvYmVfc2V0KHN0cnVjdCBsZWRfY2xhc3Nk ZXZfZmxhc2ggKmZsZWRfY2RldiwKPiArCQkJCSAgICAgIGJvb2wgc3RhdGUpCj4gK3sKPiArCXN0 cnVjdCBxY29tX2ZsYXNoX2xlZCAqbGVkID0gZmxjZGV2X3RvX2xlZChmbGVkX2NkZXYpOwo+ICsJ c3RydWN0IHFjb21fZmxhc2hfZGV2aWNlICpsZWRzX2RldiA9IGxlZF90b19sZWRzX2RldihsZWQp Owo+ICsJaW50IHJjOwo+ICsKPiArCWxlZC0+dG9yY2hfZW5hYmxlID0gZmFsc2U7Cj4gKwo+ICsJ bXV0ZXhfbG9jaygmbGVkc19kZXYtPmxvY2spOwo+ICsJcmMgPSBxY29tX2ZsYXNoX2ZsZWRfc2V0 KGxlZCwgc3RhdGUpOwo+ICsJaWYgKHJjIDwgMCkKPiArCQlyZXR1cm4gcmM7Cj4gKwltdXRleF91 bmxvY2soJmxlZHNfZGV2LT5sb2NrKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3Rh dGljIGludCBxY29tX2ZsYXNoX2ZsZWRfc3Ryb2JlX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2X2Zs YXNoICpmbGVkX2NkZXYsCj4gKwkJCQkgICAgICBib29sICpzdGF0ZSkKPiArewo+ICsJLy9UT0RP Cj4gKwkqc3RhdGUgPSAwOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcWNv bV9mbGFzaF9mbGVkX3RpbWVvdXRfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXZfZmxhc2ggKmZsZWRf Y2RldiwKPiArCQkJCSAgICAgICB1MzIgdGltZW91dCkKPiArewo+ICsJZmxlZF9jZGV2LT50aW1l b3V0LnZhbCA9IHRpbWVvdXQ7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBx Y29tX2ZsYXNoX2ZsZWRfZmF1bHRfZ2V0KHN0cnVjdCBsZWRfY2xhc3NkZXZfZmxhc2ggKmZsZWRf Y2RldiwKPiArCQkJCSAgICAgdTMyICpmYXVsdCkKPiArewo+ICsJLy9UT0RPCj4gKwkqZmF1bHQg PSAwOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbGVkX2Zs YXNoX29wcyBmbGFzaF9vcHMgPSB7Cj4gKwkuZmxhc2hfYnJpZ2h0bmVzc19zZXQJPSBxY29tX2Zs YXNoX2ZsZWRfYnJpZ2h0bmVzc19zZXQsCj4gKwkuc3Ryb2JlX3NldAkJPSBxY29tX2ZsYXNoX2Zs ZWRfc3Ryb2JlX3NldCwKPiArCS5zdHJvYmVfZ2V0CQk9IHFjb21fZmxhc2hfZmxlZF9zdHJvYmVf Z2V0LAo+ICsJLnRpbWVvdXRfc2V0CQk9IHFjb21fZmxhc2hfZmxlZF90aW1lb3V0X3NldCwKPiAr CS5mYXVsdF9nZXQJCT0gcWNvbV9mbGFzaF9mbGVkX2ZhdWx0X2dldCwKPiArfTsKPiArCj4gK3N0 YXRpYyBpbnQgcWNvbV9mbGFzaF9mbGNkZXZfc2V0dXAoc3RydWN0IHFjb21fZmxhc2hfbGVkICps ZWQsCj4gKwkJCQkgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCj4gK3sKPiArCWludCByYzsK PiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBsZWRfdG9fbGVkc19kZXYobGVkKS0+ cGRldjsKPiArCXN0cnVjdCBsZWRfaW5pdF9kYXRhIGluaXRfZGF0YSA9IHt9Owo+ICsKPiArCWlu aXRfZGF0YS5md25vZGUgPSBvZl9md25vZGVfaGFuZGxlKG5vZGUpOwo+ICsJaW5pdF9kYXRhLmRl dmljZW5hbWUgPSAicWNvbS1zcG1pLWZsYXNoIjsKPiArCWluaXRfZGF0YS5kZWZhdWx0X2xhYmVs ID0gImZsYXNoIjsKClBsZWFzZSBkcm9wIGRldmljZW5hbWUgYW5kIGRlZmF1bHRfbGFiZWwgLSB0 aGV5IGFyZSBmb3IgYmFja3dhcmRzCmNvbXBhdGliaWxpdHkgb25seSwgZm9yIG9sZGVyIGRyaXZl cnMuCgo+ICsKPiArCWxlZC0+Y2Rldi5sZWRfY2Rldi5icmlnaHRuZXNzX3NldF9ibG9ja2luZyAg ICA9IHFjb21fZmxhc2hfbGVkX3NldDsKPiArCj4gKwlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfdTMy KG5vZGUsICJsZWQtbWF4LW1pY3JvYW1wIiwKPiArCQkJCSAgJmxlZC0+Y2Rldi5sZWRfY2Rldi5t YXhfYnJpZ2h0bmVzcyk7Cj4gKwlpZiAocmMgPCAwKSB7Cj4gKwkJZGV2X2VycigmcGRldi0+ZGV2 LCAiRmFpbHVyZSByZWFkaW5nIG1heF9jdXJyZW50LCByYyA9ICAlZFxuIiwgcmMpOwo+ICsJCXJl dHVybiByYzsKPiArCX0KPiArCWxlZC0+Y2Rldi5sZWRfY2Rldi5tYXhfYnJpZ2h0bmVzcyA9IG1p bigodTMyKSBsZWQtPmNkZXYubGVkX2NkZXYubWF4X2JyaWdodG5lc3MsCj4gKwkJCQkJCSh1MzIp IEZMQVNIX1RPUkNIX0NVUlJFTlRfTUFYKTsKCkxFRCBjbGFzcyBicmlnaHRuZXNzIGlzIGV4cHJl c3NlZCBpbiBsZXZlbHMgc28geW91IG5lZWQgdG8gY29udmVydCB0aGlzCnRvIHRoZSBudW1iZXIg b2YgYnJpZ2h0bmVzcyBsZXZlbHMgKGkuZS4gZGl2aWRlIGJ5IEZMQVNIX0NVUlJFTlRfU1RFUCku CkFuZCBJIGNhbid0IHNlZSB3aHkgeW91J3JlIHVzaW5nIG1pbigpIGhlcmUgPyBJdCB3aWxsIHJl c3VsdCBpbgptYXhfYnJpZ2h0bmVzcyBiZWluZyBhbHdheXMgc2V0IHRvIDAuCgo+ICsKPiArCXJj ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgImZsYXNoLW1heC1taWNyb2FtcCIsICZsZWQt PmNkZXYuYnJpZ2h0bmVzcy5tYXgpOwo+ICsJaWYgKHJjIDwgMCkgewo+ICsJCWRldl9lcnIoJnBk ZXYtPmRldiwgIkZhaWx1cmUgcmVhZGluZyBtYXhfY3VycmVudCwgcmMgPSAgJWRcbiIsIHJjKTsK PiArCQlyZXR1cm4gcmM7Cj4gKwl9Cj4gKwlsZWQtPmNkZXYuYnJpZ2h0bmVzcy5tYXggPSBtaW4o KHUzMikgbGVkLT5jZGV2LmJyaWdodG5lc3MubWF4LAo+ICsJCQkJKHUzMikgRkxBU0hfQ1VSUkVO VF9NQVgpOwo+ICsJbGVkLT5jZGV2LmJyaWdodG5lc3MubWluID0gRkxBU0hfQ1VSUkVOVF9NSU47 Cj4gKwlsZWQtPmNkZXYuYnJpZ2h0bmVzcy5zdGVwID0gRkxBU0hfQ1VSUkVOVF9TVEVQOwo+ICsJ bGVkLT5jZGV2LmJyaWdodG5lc3MudmFsID0gbGVkLT5jZGV2LmJyaWdodG5lc3MubWF4Owo+ICsK PiArCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgImZsYXNoLW1heC10aW1lb3V0LXVz IiwgJmxlZC0+Y2Rldi50aW1lb3V0Lm1heCk7Cj4gKwlpZiAocmMgPCAwKSB7Cj4gKwkJZGV2X2Vy cigmcGRldi0+ZGV2LCAiRmFpbHVyZSByZWFkaW5nIG1heF90aW1lb3V0LCByYyA9ICAlZFxuIiwg cmMpOwo+ICsJCXJldHVybiByYzsKPiArCX0KPiArCWxlZC0+Y2Rldi50aW1lb3V0Lm1heCA9IG1p bigodTMyKSBsZWQtPmNkZXYudGltZW91dC5tYXgsCj4gKwkJCQkgICAgKHUzMikgRkxBU0hfRFVS QVRJT05fTUFYKTsKPiArCWxlZC0+Y2Rldi50aW1lb3V0Lm1pbiA9IEZMQVNIX0RVUkFUSU9OX01J TjsKPiArCWxlZC0+Y2Rldi50aW1lb3V0LnN0ZXAgPSBGTEFTSF9EVVJBVElPTl9TVEVQOwo+ICsJ bGVkLT5jZGV2LnRpbWVvdXQudmFsID0gbGVkLT5jZGV2LnRpbWVvdXQubWF4Owo+ICsKPiArCWxl ZC0+Y2Rldi5vcHMgPSAmZmxhc2hfb3BzOwo+ICsJbGVkLT5jZGV2LmxlZF9jZGV2LmZsYWdzIHw9 IExFRF9ERVZfQ0FQX0ZMQVNIOwo+ICsKPiArCXJjID0gbGVkX2NsYXNzZGV2X2ZsYXNoX3JlZ2lz dGVyX2V4dCgmcGRldi0+ZGV2LCAmbGVkLT5jZGV2LCAmaW5pdF9kYXRhKTsKClBsZWFzZSB1c2Ug ZGV2bV8qIHZlcnNpb24uCgo+ICsJaWYgKHJjKSB7Cj4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAi dW5hYmxlIHRvIHJlZ2lzdGVyIGxlZCAlZCxyYz0lZFxuIiwgbGVkLT5pZCwgcmMpOwo+ICsJCXJl dHVybiByYzsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBx Y29tX2ZsYXNoX3NldHVwX2ZsYXNoX3JlZ3Moc3RydWN0IHFjb21fZmxhc2hfbGVkICpsZWQpCj4g K3sKPiArCWludCByYzsKPiArCXN0cnVjdCBxY29tX2ZsYXNoX2RldmljZSAqbGVkc19kZXYgPSBs ZWRfdG9fbGVkc19kZXYobGVkKTsKPiArCj4gKwkvKiBTZXQgaGVhZHJvb20gKi8KPiArCXJjID0g cWNvbV9mbGFzaF9tYXNrZWRfd3JpdGUobGVkc19kZXYsIEZMQVNIX0hFQURST09NLAo+ICsJCUZM QVNIX0hFQURST09NX01BU0ssIGxlZC0+aGVhZHJvb20pOwo+ICsJaWYgKHJjKSB7Cj4gKwkJZGV2 X2VycigmbGVkc19kZXYtPnBkZXYtPmRldiwgIkhlYWRyb29tIHJlZyB3cml0ZSBmYWlsZWQoJWQp XG4iLCByYyk7Cj4gKwkJcmV0dXJuIHJjOwo+ICsJfQo+ICsKPiArCS8qIFNldCBzdGFydHVwIGRl bGF5ICovCj4gKwlyYyA9IHFjb21fZmxhc2hfbWFza2VkX3dyaXRlKGxlZHNfZGV2LAo+ICsJCUZM QVNIX1NUQVJUVVBfREVMQVksIEZMQVNIX1NUQVJUVVBfRExZX01BU0ssCj4gKwkJbGVkLT5zdGFy dHVwX2RseSk7Cj4gKwlpZiAocmMpIHsKPiArCQlkZXZfZXJyKCZsZWRzX2Rldi0+cGRldi0+ZGV2 LAo+ICsJCQkiU3RhcnR1cCBkZWxheSByZWcgd3JpdGUgZmFpbGVkKCVkKVxuIiwgcmMpOwo+ICsJ CXJldHVybiByYzsKPiArCX0KPiArCj4gKwkvKiBTZXQgdGltZXIgY29udHJvbCAtIHNhZmV0eSBv ciB3YXRjaGRvZyAqLwo+ICsJaWYgKGxlZC0+c2FmZXR5X3RpbWVyKSB7Cj4gKwkJcmMgPSBxY29t X2ZsYXNoX21hc2tlZF93cml0ZShsZWRzX2RldiwKPiArCQkJRkxBU0hfTEVEX1RNUl9DVFJMLAo+ ICsJCQlGTEFTSF9UTVJfTUFTSywgRkxBU0hfVE1SX1NBRkVUWSk7Cj4gKwkJaWYgKHJjKSB7Cj4g KwkJCWRldl9lcnIoJmxlZHNfZGV2LT5wZGV2LT5kZXYsCj4gKwkJCQkiTEVEIHRpbWVyIGN0cmwg cmVnIHdyaXRlIGZhaWxlZCglZClcbiIsIHJjKTsKPiArCQkJcmV0dXJuIHJjOwo+ICsJCX0KPiAr CX0KPiArCj4gKwkvKiBkdW1wIGZsYXNoIHJlZ2lzdGVycyAqLwo+ICsJcWNvbV9mbGFzaF9kdW1w X3JlZ3MobGVkc19kZXYsIGZsYXNoX2RlYnVnX3JlZ3MsIEFSUkFZX1NJWkUoZmxhc2hfZGVidWdf cmVncykpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHFjb21fZmxh c2hfZ2V0X2NvbmZpZ19mbGFzaChzdHJ1Y3QgcWNvbV9mbGFzaF9sZWQgKmxlZCwKPiArCQkJCSAg ICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCj4gK3sKPiArCWludCByYzsKPiArCXUzMiB2 YWw7Cj4gKwljb25zdCBjaGFyICp0ZW1wX3N0cmluZzsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9 ICZsZWRfdG9fbGVkc19kZXYobGVkKS0+cGRldi0+ZGV2Owo+ICsKPiArCXJjID0gb2ZfcHJvcGVy dHlfcmVhZF91MzIobm9kZSwgImxlZC1zb3VyY2VzIiwgJmxlZC0+aWQpOwo+ICsJaWYgKHJjIDwg MCkgewo+ICsJCWRldl9lcnIoZGV2LCAiRmFpbHVyZSByZWFkaW5nIGxlZCBpZCwgcmMgPSAgJWRc biIsIHJjKTsKPiArCQlyZXR1cm4gcmM7Cj4gKwl9Cj4gKwo+ICsJbGVkLT5kZWZhdWx0X29uID0g ZmFsc2U7Cj4gKwlyYyA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5vZGUsICJkZWZhdWx0LXN0 YXRlIiwgJnRlbXBfc3RyaW5nKTsKPiArCWlmICghcmMpIHsKPiArCQlpZiAoc3RybmNtcCh0ZW1w X3N0cmluZywgIm9uIiwgc2l6ZW9mKCJvbiIpKSA9PSAwKQo+ICsJCQlsZWQtPmRlZmF1bHRfb24g PSB0cnVlOwo+ICsJfSBlbHNlIGlmIChyYyAhPSAtRUlOVkFMKQo+ICsJCXJldHVybiByYzsKPiAr Cj4gKwlsZWQtPnR1cm5fb2ZmX2RlbGF5X21zID0gMDsKPiArCXJjID0gb2ZfcHJvcGVydHlfcmVh ZF91MzIobm9kZSwgInFjb20sdHVybi1vZmYtZGVsYXktbXMiLCAmdmFsKTsKPiArCWlmICghcmMp Cj4gKwkJbGVkLT50dXJuX29mZl9kZWxheV9tcyA9IHZhbDsKPiArCWVsc2UgaWYgKHJjICE9IC1F SU5WQUwpCj4gKwkJcmV0dXJuIHJjOwo+ICsKPiArCWlmIChsZWQtPmlkID09IFFDT01fRkxBU0hf SURfTEVEMCkgewo+ICsJCWxlZC0+ZW5hYmxlX21vZHVsZSA9IEZMQVNIX0VOQUJMRV9MRURfMDsK PiArCQlsZWQtPmN1cnJlbnRfYWRkciA9IEZMQVNIX0xFRF8wX0NVUlI7Cj4gKwkJbGVkLT50cmln Z2VyX2ZsYXNoID0gRkxBU0hfTEVEXzBfT1VUUFVUOwo+ICsKPiArCQlsZWQtPnNlY29uZF9hZGRy ID0gRkxBU0hfTEVEXzFfQ1VSUjsKPiArCX0gZWxzZSBpZiAobGVkLT5pZCA9PSBRQ09NX0ZMQVNI X0lEX0xFRDEpIHsKPiArCQlsZWQtPmVuYWJsZV9tb2R1bGUgPSBGTEFTSF9FTkFCTEVfTEVEXzE7 Cj4gKwkJbGVkLT5jdXJyZW50X2FkZHIgPSBGTEFTSF9MRURfMV9DVVJSOwo+ICsJCWxlZC0+dHJp Z2dlcl9mbGFzaCA9IEZMQVNIX0xFRF8xX09VVFBVVDsKPiArCj4gKwkJbGVkLT5zZWNvbmRfYWRk ciA9IEZMQVNIX0xFRF8wX0NVUlI7Cj4gKwl9IGVsc2Ugewo+ICsJCWRldl9lcnIoZGV2LCAiVW5r bm93biBmbGFzaCBMRUQgbmFtZSBnaXZlblxuIik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9 Cj4gKwo+ICsJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCAicWNvbSxoZWFkcm9vbSIs ICZ2YWwpOwo+ICsJaWYgKCFyYykKPiArCQlsZWQtPmhlYWRyb29tID0gKHU4KSB2YWw7Cj4gKwll bHNlIGlmIChyYyA9PSAtRUlOVkFMKQo+ICsJCWxlZC0+aGVhZHJvb20gPSBRQ09NX1NQTUlfRkxB U0hfSEVBRFJPT01fNTAwTVY7Cj4gKwo+ICsJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihub2Rl LCAicWNvbSxjbGFtcC1jdXJyIiwgJnZhbCk7Cj4gKwlpZiAoIXJjKQo+ICsJCWxlZC0+Y2xhbXBf Y3VyciA9IHZhbDsKPiArCWVsc2UgaWYgKHJjID09IC1FSU5WQUwpCj4gKwkJbGVkLT5jbGFtcF9j dXJyID0gRkxBU0hfREVGQVVMVF9DTEFNUDsKPiArCj4gKwlyYyA9IG9mX3Byb3BlcnR5X3JlYWRf dTMyKG5vZGUsICJxY29tLHN0YXJ0dXAtZGx5IiwgJnZhbCk7Cj4gKwlpZiAoIXJjKQo+ICsJCWxl ZC0+c3RhcnR1cF9kbHkgPSAodTgpIHZhbDsKPiArCWVsc2UgaWYgKHJjID09IC1FSU5WQUwpCj4g KwkJbGVkLT5zdGFydHVwX2RseSA9IFFDT01fU1BNSV9GTEFTSF9TVEFSVFVQX0RMWV8xMjhVUzsK PiArCj4gKwlsZWQtPnNhZmV0eV90aW1lciA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChub2RlLCAi cWNvbSxzYWZldHktdGltZXIiKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGlj IGludCBxY29tX2ZsYXNoX3NldHVwX3JlZ3Moc3RydWN0IHFjb21fZmxhc2hfZGV2aWNlICpsZWRz X2RldikKPiArewo+ICsJaW50IHJjOwo+ICsKPiArCXJjID0gcWNvbV9mbGFzaF9tYXNrZWRfd3Jp dGUobGVkc19kZXYsCj4gKwkJRkxBU0hfTEVEX1NUUk9CRV9DVFJMLAo+ICsJCUZMQVNIX1NUUk9C RV9NQVNLLCBGTEFTSF9ESVNBQkxFX0FMTCk7Cj4gKwlpZiAocmMpIHsKPiArCQlkZXZfZXJyKCZs ZWRzX2Rldi0+cGRldi0+ZGV2LCAiTEVEIGZsYXNoIHdyaXRlIGZhaWxlZCglZClcbiIsIHJjKTsK PiArCQlyZXR1cm4gcmM7Cj4gKwl9Cj4gKwo+ICsJLyogRGlzYWJsZSBmbGFzaCBMRUQgbW9kdWxl ICovCj4gKwlyYyA9IHFjb21fZmxhc2hfbWFza2VkX3dyaXRlKGxlZHNfZGV2LCBGTEFTSF9FTkFC TEVfQ09OVFJPTCwKPiArCQlGTEFTSF9FTkFCTEVfTU9EVUxFX01BU0ssIEZMQVNIX0RJU0FCTEVf QUxMKTsKPiArCWlmIChyYykgewo+ICsJCWRldl9lcnIoJmxlZHNfZGV2LT5wZGV2LT5kZXYsICJF bmFibGUgcmVnIHdyaXRlIGZhaWxlZCglZClcbiIsIHJjKTsKPiArCQlyZXR1cm4gcmM7Cj4gKwl9 Cj4gKwo+ICsJLyogU2V0IFZyZWcgZm9yY2UgKi8KPiArCXJjID0gcWNvbV9mbGFzaF9tYXNrZWRf d3JpdGUobGVkc19kZXYsIEZMQVNIX1ZSRUdfT0tfRk9SQ0UsCj4gKwkJRkxBU0hfVlJFR19NQVNL LCBGTEFTSF9IV19WUkVHX09LKTsKPiArCWlmIChyYykgewo+ICsJCWRldl9lcnIoJmxlZHNfZGV2 LT5wZGV2LT5kZXYsICJWcmVnIE9LIHJlZyB3cml0ZSBmYWlsZWQoJWQpXG4iLCByYyk7Cj4gKwkJ cmV0dXJuIHJjOwo+ICsJfQo+ICsKPiArCS8qIFNldCBzZWxmIGZhdWx0IGNoZWNrICovCj4gKwly YyA9IHFjb21fZmxhc2hfbWFza2VkX3dyaXRlKGxlZHNfZGV2LCBGTEFTSF9GQVVMVF9ERVRFQ1Qs Cj4gKwkJRkxBU0hfRkFVTFRfREVURUNUX01BU0ssIEZMQVNIX1NFTEZDSEVDS19ESVNBQkxFKTsK PiArCWlmIChyYykgewo+ICsJCWRldl9lcnIoJmxlZHNfZGV2LT5wZGV2LT5kZXYsCj4gKwkJCSJG YXVsdCBkZXRlY3QgcmVnIHdyaXRlIGZhaWxlZCglZClcbiIsIHJjKTsKPiArCQlyZXR1cm4gcmM7 Cj4gKwl9Cj4gKwo+ICsJLyogU2V0IG1hc2sgZW5hYmxlICovCj4gKwlyYyA9IHFjb21fZmxhc2hf bWFza2VkX3dyaXRlKGxlZHNfZGV2LCBGTEFTSF9NQVNLX0VOQUJMRSwKPiArCQlGTEFTSF9NQVNL X1JFR19NQVNLLCBGTEFTSF9NQVNLXzEpOwo+ICsJaWYgKHJjKSB7Cj4gKwkJZGV2X2VycigmbGVk c19kZXYtPnBkZXYtPmRldiwgIk1hc2sgZW5hYmxlIHJlZyB3cml0ZSBmYWlsZWQoJWQpXG4iLCBy Yyk7Cj4gKwkJcmV0dXJuIHJjOwo+ICsJfQo+ICsKPiArCS8qIFNldCByYW1wIHJhdGUgKi8KPiAr CXJjID0gcWNvbV9mbGFzaF9tYXNrZWRfd3JpdGUobGVkc19kZXYsIEZMQVNIX1JBTVBfUkFURSwK PiArCQlGTEFTSF9SQU1QX1JBVEVfTUFTSywgMHhCRik7Cj4gKwlpZiAocmMpIHsKPiArCQlkZXZf ZXJyKCZsZWRzX2Rldi0+cGRldi0+ZGV2LCAiUmFtcCByYXRlIHJlZyB3cml0ZSBmYWlsZWQoJWQp XG4iLCByYyk7Cj4gKwkJcmV0dXJuIHJjOwo+ICsJfQo+ICsKPiArCS8qIEVuYWJsZSBWUEhfUFdS X0RST09QIGFuZCBzZXQgdGhyZXNob2xkIHRvIDIuOVYgKi8KPiArCXJjID0gcWNvbV9mbGFzaF9t YXNrZWRfd3JpdGUobGVkc19kZXYsIEZMQVNIX1ZQSF9QV1JfRFJPT1AsCj4gKwkJCQkJRkxBU0hf VlBIX1BXUl9EUk9PUF9NQVNLLCAweEMyKTsKPiArCWlmIChyYykgewo+ICsJCWRldl9lcnIoJmxl ZHNfZGV2LT5wZGV2LT5kZXYsCj4gKwkJCSJGTEFTSF9WUEhfUFdSX0RST09QIHJlZyB3cml0ZSBm YWlsZWQoJWQpXG4iLCByYyk7Cj4gKwkJcmV0dXJuIHJjOwo+ICsJfQo+ICsKPiArCXJldHVybiAw Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHFjb21fZmxhc2hfc2V0dXBfbGVkKHN0cnVjdCBxY29t X2ZsYXNoX2xlZCAqbGVkLAo+ICsJCQkJc3RydWN0IGRldmljZV9ub2RlICpub2RlKQo+ICt7Cj4g KwlpbnQgcmM7Cj4gKwo+ICsJcmMgPSBxY29tX2ZsYXNoX2dldF9jb25maWdfZmxhc2gobGVkLCBu b2RlKTsKPiArCWlmIChyYyA8IDApIHsKPiArCQlkZXZfZXJyKCZsZWRfdG9fbGVkc19kZXYobGVk KS0+cGRldi0+ZGV2LAo+ICsJCQkiVW5hYmxlIHRvIHJlYWQgZmxhc2ggY29uZmlnIGRhdGFcbiIp Owo+ICsJCXJldHVybiByYzsKPiArCX0KPiArCj4gKwlyYyA9IHFjb21fZmxhc2hfc2V0dXBfZmxh c2hfcmVncyhsZWQpOwo+ICsJaWYgKHJjKSB7Cj4gKwkJZGV2X2VycigmbGVkX3RvX2xlZHNfZGV2 KGxlZCktPnBkZXYtPmRldiwKPiArCQkJIkZMQVNIIGluaXRpYWxpemUgZmFpbGVkKCVkKVxuIiwg cmMpOwo+ICsJCXJldHVybiByYzsKPiArCX0KPiArCj4gKwlyYyA9IHFjb21fZmxhc2hfZmxjZGV2 X3NldHVwKGxlZCwgbm9kZSk7Cj4gKwlpZiAocmMgPCAwKQo+ICsJCXJldHVybiByYzsKPiArCj4g KwkvKiBjb25maWd1cmUgZGVmYXVsdCBzdGF0ZSAqLwo+ICsJaWYgKGxlZC0+ZGVmYXVsdF9vbikg ewo+ICsJCWxlZC0+Y2Rldi5sZWRfY2Rldi5icmlnaHRuZXNzID0gbGVkLT5jZGV2LmxlZF9jZGV2 Lm1heF9icmlnaHRuZXNzOwo+ICsJCWxlZC0+dG9yY2hfZW5hYmxlID0gdHJ1ZTsKPiArCQltdXRl eF9sb2NrKCZsZWRfdG9fbGVkc19kZXYobGVkKS0+bG9jayk7Cj4gKwkJcmMgPSBxY29tX2ZsYXNo X2ZsZWRfc2V0KGxlZCwgdHJ1ZSk7Cj4gKwkJaWYgKHJjIDwgMCkKPiArCQkJcmV0dXJuIHJjOwo+ ICsJCW11dGV4X3VubG9jaygmbGVkX3RvX2xlZHNfZGV2KGxlZCktPmxvY2spOwo+ICsJfSBlbHNl IHsKPiArCQlsZWQtPmNkZXYubGVkX2NkZXYuYnJpZ2h0bmVzcyA9IExFRF9PRkY7Cj4gKwl9Cj4g Kwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcWNvbV9mbGFzaF9zZXR1cF9s ZWRzX2RldmljZShzdHJ1Y3QgcWNvbV9mbGFzaF9kZXZpY2UgKmxlZHNfZGV2LAo+ICsJCQkJCXN0 cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKPiArCQkJCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQo+ICt7Cj4gKwl1MzIgcmVnOwo+ICsJaW50IHJjOwo+ICsKPiArCWxlZHNfZGV2LT5wZGV2 ID0gcGRldjsKPiArCj4gKwlsZWRzX2Rldi0+cmVnbWFwID0gZGV2X2dldF9yZWdtYXAocGRldi0+ ZGV2LnBhcmVudCwgTlVMTCk7Cj4gKwlpZiAoIWxlZHNfZGV2LT5yZWdtYXApCj4gKwkJcmV0dXJu IC1FTk9ERVY7Cj4gKwo+ICsJcmMgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCAicmVnIiwg JnJlZyk7Cj4gKwlpZiAocmMgPCAwKSB7Cj4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbHVy ZSByZWFkaW5nIHJlZywgcmMgPSAlZFxuIiwgcmMpOwo+ICsJCXJldHVybiByYzsKPiArCX0KPiAr CWxlZHNfZGV2LT5iYXNlID0gcmVnOwo+ICsKPiArCXFjb21fZmxhc2hfc2V0dXBfcmVncyhsZWRz X2Rldik7Cj4gKwo+ICsJaWYgKG9mX2ZpbmRfcHJvcGVydHkobm9kZSwgImZsYXNoLWJvb3N0LXN1 cHBseSIsIE5VTEwpKSB7Cj4gKwkJbGVkc19kZXYtPmZsYXNoX2Jvb3N0X3JlZyA9IHJlZ3VsYXRv cl9nZXQoJnBkZXYtPmRldiwgImZsYXNoLWJvb3N0Iik7Cj4gKwkJaWYgKElTX0VSUihsZWRzX2Rl di0+Zmxhc2hfYm9vc3RfcmVnKSkgewo+ICsJCQlyYyA9IFBUUl9FUlIobGVkc19kZXYtPmZsYXNo X2Jvb3N0X3JlZyk7Cj4gKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIlJlZ3VsYXRvciBnZXQgZmFp bGVkKCVkKVxuIiwgcmMpOwo+ICsJCQlyZWd1bGF0b3JfcHV0KGxlZHNfZGV2LT5mbGFzaF9ib29z dF9yZWcpOwo+ICsJCQlsZWRzX2Rldi0+Zmxhc2hfYm9vc3RfcmVnID0gTlVMTDsKPiArCQkJcmV0 dXJuIHJjOwo+ICsJCX0KPiArCX0KPiArCj4gKwlpZiAob2ZfZmluZF9wcm9wZXJ0eShub2RlLCAi dG9yY2gtYm9vc3Qtc3VwcGx5IiwgTlVMTCkpIHsKPiArCQlsZWRzX2Rldi0+dG9yY2hfYm9vc3Rf cmVnID0gcmVndWxhdG9yX2dldCgmcGRldi0+ZGV2LCAidG9yY2gtYm9vc3QiKTsKPiArCQlpZiAo SVNfRVJSKGxlZHNfZGV2LT50b3JjaF9ib29zdF9yZWcpKSB7Cj4gKwkJCXJjID0gUFRSX0VSUihs ZWRzX2Rldi0+dG9yY2hfYm9vc3RfcmVnKTsKPiArCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiVG9y Y2ggcmVndWxhdG9yIGdldCBmYWlsZWQoJWQpXG4iLCByYyk7Cj4gKwkJCXJlZ3VsYXRvcl9wdXQo bGVkc19kZXYtPmZsYXNoX2Jvb3N0X3JlZyk7Cj4gKwkJCXJlZ3VsYXRvcl9wdXQobGVkc19kZXYt PnRvcmNoX2Jvb3N0X3JlZyk7Cj4gKwkJCWxlZHNfZGV2LT5mbGFzaF9ib29zdF9yZWcgPSBOVUxM Owo+ICsJCQlsZWRzX2Rldi0+dG9yY2hfYm9vc3RfcmVnID0gTlVMTDsKPiArCQkJcmV0dXJuIHJj Owo+ICsJCX0KPiArCQlsZWRzX2Rldi0+dG9yY2hfZW5hYmxlID0gRkxBU0hfRU5BQkxFX01PRFVM RTsKPiArCX0gZWxzZSB7Cj4gKwkJbGVkc19kZXYtPnRvcmNoX2VuYWJsZSA9IEZMQVNIX0VOQUJM RV9BTEw7Cj4gKwl9Cj4gKwo+ICsJcmMgPSBsZWRfcmVhZF9yZWcobGVkc19kZXYsIEZMQVNIX1BF UklQSEVSQUxfU1VCVFlQRSwKPiArCQkJICAmbGVkc19kZXYtPnBlcmlwaGVyYWxfc3VidHlwZSk7 Cj4gKwlpZiAocmMpIHsKPiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsCj4gKwkJCSJVbmFibGUgdG8g cmVhZCBmcm9tIGFkZHI9JXgsIHJjKCVkKVxuIiwKPiArCQkJRkxBU0hfUEVSSVBIRVJBTF9TVUJU WVBFLCByYyk7Cj4gKwl9Cj4gKwo+ICsJbXV0ZXhfaW5pdCgmbGVkc19kZXYtPmxvY2spOwo+ICsK PiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHFjb21fZmxhc2hfcHJvYmUoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0g JnBkZXYtPmRldjsKPiArCXN0cnVjdCBxY29tX2ZsYXNoX2RldmljZSAqbGVkc19kZXY7Cj4gKwlz dHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBkZXYtPm9mX25vZGU7Cj4gKwlzdHJ1Y3QgcWNvbV9m bGFzaF9sZWQgKmxlZDsKPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqdGVtcDsKPiArCWludCByYywg aSwgcGFyc2VkX2xlZHMgPSAwOwo+ICsKPiArCWxlZHNfZGV2ID0gZGV2bV9remFsbG9jKGRldiwg c2l6ZW9mKHN0cnVjdCBxY29tX2ZsYXNoX2RldmljZSksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFs ZWRzX2RldikKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlyYyA9IHFjb21fZmxhc2hfc2V0 dXBfbGVkc19kZXZpY2UobGVkc19kZXYsIG5vZGUsIHBkZXYpOwo+ICsJaWYgKHJjKSB7Cj4gKwkJ cHJfZGVidWcoIlByb2JlIGZhaWxlZCBzZXR0aW5nIHVwIGJhc2UgKCVkKVxuIiwgcmMpOwo+ICsJ CXJldHVybiByYzsKPiArCX0KClBsZWFzZSBpbXBsZW1lbnQgcWNvbV9mbGFzaF9wcm9iZV9kdCgp IGZ1bmN0aW9uIHRoYXQgd2lsbCBmaXJzdCBwYXJzZQphbGwgRFQgc2V0dGluZ3MgZ2xvYmFsIGZv ciB0aGlzIGRldmljZSBhbmQgdGhlbiBpdGVyYXRlIHRocm91Z2ggdGhlCmNoaWxkIG5vZGVzIGFu ZCBwYXJzZSBjaGlsZCBMRUQgcHJvcGVydGllcy4gQWZ0ZXJ3YXJkcyB5b3UgY2FuIGNhbGwgYQpm dW5jdGlvbiB0aGF0IHdpbGwgY29uZmlndXJlIGFsbCBkZXZpY2UgZ2xvYmFsIHNldHRpbmdzIGFu ZCBwYXJ0aWN1bGFyCkxFRHMuIFlvdSBjYW4gY29tcGFyZSBleGlzdGluZyBMRUQgY2xhc3MgZHJp dmVycy4gSXQgc2ltcGxpZmllcyBjb2RlCmFuYWx5c2lzIGlmIGFsbCBEVCBwYXJzaW5nIGlzIGlu IG9uZSBwbGFjZS4KCj4gKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBsZWRzX2Rldik7Cj4g Kwo+ICsJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShub2RlLCB0ZW1wKSB7Cj4gKwkJbGVkID0gJmxl ZHNfZGV2LT5sZWRzW3BhcnNlZF9sZWRzXTsKPiArCj4gKwkJcmMgPSBxY29tX2ZsYXNoX3NldHVw X2xlZChsZWQsIHRlbXApOwo+ICsJCWlmIChyYykgewo+ICsJCQlmb3IgKGkgPSAwOyBpIDwgcGFy c2VkX2xlZHM7IGkrKykKPiArCQkJCWxlZF9jbGFzc2Rldl9mbGFzaF91bnJlZ2lzdGVyKCZsZWRz X2Rldi0+bGVkc1tpXS5jZGV2KTsKPiArCQkJcHJfZGVidWcoIlByb2JlIGZhaWxlZCBzZXR0aW5n IHVwIGxlZHMgKCVkKVxuIiwgcmMpOwo+ICsJCQlyZXR1cm4gcmM7Cj4gKwkJfQo+ICsKPiArCQlw YXJzZWRfbGVkcysrOwo+ICsJfQo+ICsJbGVkc19kZXYtPm51bV9sZWRzID0gcGFyc2VkX2xlZHM7 Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBxY29tX2ZsYXNoX3JlbW92ZShz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgcWNvbV9mbGFzaF9k ZXZpY2UgKmxlZHNfZGV2ICA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwo+ICsJaW50IGks IHBhcnNlZF9sZWRzID0gbGVkc19kZXYtPm51bV9sZWRzOwo+ICsKPiArCW11dGV4X2Rlc3Ryb3ko JmxlZHNfZGV2LT5sb2NrKTsKPiArCWlmIChsZWRzX2Rldi0+Zmxhc2hfYm9vc3RfcmVnKQo+ICsJ CXJlZ3VsYXRvcl9wdXQobGVkc19kZXYtPmZsYXNoX2Jvb3N0X3JlZyk7Cj4gKwlpZiAobGVkc19k ZXYtPnRvcmNoX2Jvb3N0X3JlZykKPiArCQlyZWd1bGF0b3JfcHV0KGxlZHNfZGV2LT50b3JjaF9i b29zdF9yZWcpOwo+ICsJZm9yIChpID0gMDsgaSA8IHBhcnNlZF9sZWRzOyBpKyspCj4gKwkJbGVk X2NsYXNzZGV2X2ZsYXNoX3VucmVnaXN0ZXIoJmxlZHNfZGV2LT5sZWRzW2ldLmNkZXYpOwo+ICsK PiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9p ZCBxY29tX2ZsYXNoX3NwbWlfb2ZfbWF0Y2hbXSA9IHsKPiArCXsgLmNvbXBhdGlibGUgPSAicWNv bSxzcG1pLWZsYXNoIiB9LAo+ICsJe30sCj4gK307Cj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2Ys IHFjb21fZmxhc2hfc3BtaV9vZl9tYXRjaCk7Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3Jt X2RyaXZlciBxY29tX2ZsYXNoX2RyaXZlciA9IHsKPiArCS5kcml2ZXIJCT0gewo+ICsJCS5uYW1l CT0gInFjb20sc3BtaS1mbGFzaCIsCj4gKwkJLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRy KHFjb21fZmxhc2hfc3BtaV9vZl9tYXRjaCksCj4gKwl9LAo+ICsJLnByb2JlCQk9IHFjb21fZmxh c2hfcHJvYmUsCj4gKwkucmVtb3ZlCQk9IHFjb21fZmxhc2hfcmVtb3ZlLAo+ICt9Owo+ICttb2R1 bGVfcGxhdGZvcm1fZHJpdmVyKHFjb21fZmxhc2hfZHJpdmVyKTsKPiArCj4gK01PRFVMRV9ERVND UklQVElPTigiUXVhbGNvbW0gU1BNSSBGbGFzaCBMRUQgZHJpdmVyIik7Cj4gK01PRFVMRV9MSUNF TlNFKCJHUEwgdjIiKTsKPiArTU9EVUxFX0FVVEhPUigiTsOtY29sYXMgRi4gUi4gQS4gUHJhZG8g PG5mcmFwcmFkb0Bwcm90b25tYWlsLmNvbT4iKTsKPiAKCi0tIApCZXN0IHJlZ2FyZHMsCkphY2Vr IEFuYXN6ZXdza2kKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMu aW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2xpbnV4LWFybS1rZXJuZWwK