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=-14.1 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS 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 5DEADC47082 for ; Sat, 5 Jun 2021 11:53:27 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (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 1227260238 for ; Sat, 5 Jun 2021 11:53:27 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1227260238 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de 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=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Date:Cc:To:From:Subject:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=MxfUVMAP/ifGmuQ8S1jf9OuhKjibIrbMtgnx1IdrifQ=; b=BdSsyIw4nAOhaR sRgIj/IJZYQDj69PR0fGyypZGBEs+vM+usu/kUvOrETZYOk5pEiV0ieesO1RqHLI6UHumDUdT3dSd sgkfybLuxrVfJs95M89r/u9NTZGhZaPko7HJVv2qTPYY4uX92Rms36olUqML64Oi2qB4MQ4GAk6ba Wwh493JS1CkcRuElvKMVspbkVx5sQ5jqUdumXbdayRBbp4Y91JSa1rviLmTgt+It9c97rcI1ftkdF i+BIe8Yz0qh9Tzm6FgLxgyLVzgRrxpPRpkxoodTaPixiofqLuAB6WIcYSM6CpkBFeBkqCU2KodbZs 2ZS8jO3Eqt0+pvTnpRTg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1lpUpo-00GWGR-T5; Sat, 05 Jun 2021 11:51:25 +0000 Received: from metis.ext.pengutronix.de ([2001:67c:670:201:290:27ff:fe1d:cc33]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1lpUpj-00GWFi-2d for linux-arm-kernel@lists.infradead.org; Sat, 05 Jun 2021 11:51:23 +0000 Received: from ptx.hi.pengutronix.de ([2001:67c:670:100:1d::c0] helo=[IPv6:::1]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lpUpP-00049f-Oy; Sat, 05 Jun 2021 13:50:59 +0200 Message-ID: Subject: Re: [PATCH v3 3/3] iommu: dart: Add DART iommu driver From: Rouven Czerwinski To: Sven Peter , Will Deacon , Robin Murphy , Joerg Roedel , Rob Herring Cc: Arnd Bergmann , devicetree@vger.kernel.org, Hector Martin , linux-kernel@vger.kernel.org, Marc Zyngier , Mohamed Mediouni , Stan Skowronek , linux-arm-kernel@lists.infradead.org, Mark Kettenis , iommu@lists.linux-foundation.org, Alexander Graf Date: Sat, 05 Jun 2021 13:50:55 +0200 In-Reply-To: <20210603085003.50465-4-sven@svenpeter.dev> References: <20210603085003.50465-1-sven@svenpeter.dev> <20210603085003.50465-4-sven@svenpeter.dev> Organization: Pengutronix e.K. User-Agent: Evolution 3.40.1 MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2001:67c:670:100:1d::c0 X-SA-Exim-Mail-From: r.czerwinski@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-arm-kernel@lists.infradead.org X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210605_045119_503533_D79FA1DB X-CRM114-Status: GOOD ( 50.16 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgU3ZlbiwKCmp1c3QgYSBzbWFsbCBjb21tZW50LCBzZWUgaW5saW5lLgoKT24gVGh1LCAyMDIx LTA2LTAzIGF0IDEwOjUwICswMjAwLCBTdmVuIFBldGVyIHdyb3RlOgo+IEFwcGxlJ3MgbmV3IFNv Q3MgdXNlIGlvbW11cyBmb3IgYWxtb3N0IGFsbCBwZXJpcGhlcmFscy4gVGhlc2UgRGV2aWNlCj4g QWRkcmVzcyBSZXNvbHV0aW9uIFRhYmxlcyBtdXN0IGJlIHNldHVwIGJlZm9yZSB0aGVzZSBwZXJp cGhlcmFscyBjYW4KPiBhY3QgYXMgRE1BIG1hc3RlcnMuCj4gCj4gU2lnbmVkLW9mZi1ieTogU3Zl biBQZXRlciA8c3ZlbkBzdmVucGV0ZXIuZGV2Pgo+IC0tLQo+ICBNQUlOVEFJTkVSUyAgICAgICAg ICAgICAgICAgICAgICB8ICAgMSArCj4gIGRyaXZlcnMvaW9tbXUvS2NvbmZpZyAgICAgICAgICAg IHwgIDE1ICsKPiAgZHJpdmVycy9pb21tdS9NYWtlZmlsZSAgICAgICAgICAgfCAgIDEgKwo+ICBk cml2ZXJzL2lvbW11L2FwcGxlLWRhcnQtaW9tbXUuYyB8IDk2NiArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrCj4gIDQgZmlsZXMgY2hhbmdlZCwgOTgzIGluc2VydGlvbnMoKykKPiAgY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvaW9tbXUvYXBwbGUtZGFydC1pb21tdS5jCj4gCj4gZGlm ZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKPiBpbmRleCA0MzczZDYzZjljY2Yu LmNiOTIwMGFkMDVmZSAxMDA2NDQKPiAtLS0gYS9NQUlOVEFJTkVSUwo+ICsrKyBiL01BSU5UQUlO RVJTCj4gQEAgLTEyNDUsNiArMTI0NSw3IEBAIE06CVN2ZW4gUGV0ZXIgPHN2ZW5Ac3ZlbnBldGVy LmRldj4KPiAgTDoJaW9tbXVAbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcKPiAgUzoJTWFpbnRh aW5lZAo+ICBGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaW9tbXUvYXBwbGUs ZGFydC55YW1sCj4gK0Y6CWRyaXZlcnMvaW9tbXUvYXBwbGUtZGFydC1pb21tdS5jCj4gIAo+ICBB UFBMRSBTTUMgRFJJVkVSCj4gIE06CUhlbnJpayBSeWRiZXJnIDxyeWRiZXJnQGJpdG1hdGgub3Jn Pgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L0tjb25maWcgYi9kcml2ZXJzL2lvbW11L0tj b25maWcKPiBpbmRleCAxZjExMWIzOTliY2EuLjg3ODgyYzYyOGI0NiAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL2lvbW11L0tjb25maWcKPiArKysgYi9kcml2ZXJzL2lvbW11L0tjb25maWcKPiBAQCAt MjQ5LDYgKzI0OSwyMSBAQCBjb25maWcgU1BBUFJfVENFX0lPTU1VCj4gIAkgIEVuYWJsZXMgYml0 cyBvZiBJT01NVSBBUEkgcmVxdWlyZWQgYnkgVkZJTy4gVGhlIGlvbW11X29wcwo+ICAJICBpcyBu b3QgaW1wbGVtZW50ZWQgYXMgaXQgaXMgbm90IG5lY2Vzc2FyeSBmb3IgVkZJTy4KPiAgCj4gK2Nv bmZpZyBJT01NVV9BUFBMRV9EQVJUCj4gKwl0cmlzdGF0ZSAiQXBwbGUgREFSVCBJT01NVSBTdXBw b3J0Igo+ICsJZGVwZW5kcyBvbiBBUk02NCB8fCAoQ09NUElMRV9URVNUICYmICFHRU5FUklDX0FU T01JQzY0KQo+ICsJc2VsZWN0IElPTU1VX0FQSQo+ICsJc2VsZWN0IElPTU1VX0lPX1BHVEFCTEUK PiArCXNlbGVjdCBJT01NVV9JT19QR1RBQkxFX0xQQUUKPiArCWRlZmF1bHQgQVJDSF9BUFBMRQo+ ICsJaGVscAo+ICsJICBTdXBwb3J0IGZvciBBcHBsZSBEQVJUIChEZXZpY2UgQWRkcmVzcyBSZXNv bHV0aW9uIFRhYmxlKSBJT01NVXMKPiArCSAgZm91bmQgaW4gQXBwbGUgQVJNIFNvQ3MgbGlrZSB0 aGUgTTEuCj4gKwkgIFRoaXMgSU9NTVUgaXMgcmVxdWlyZWQgZm9yIG1vc3QgcGVyaXBoZXJhbHMg dXNpbmcgRE1BIHRvIGFjY2Vzcwo+ICsJICB0aGUgbWFpbiBtZW1vcnkuCj4gKwo+ICsJICBTYXkg WSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgYW4gQXBwbGUgU29DIHdpdGggYSBEQVJUIElPTU1VLgo+ ICsKPiAgIyBBUk0gSU9NTVUgc3VwcG9ydAo+ICBjb25maWcgQVJNX1NNTVUKPiAgCXRyaXN0YXRl ICJBUk0gTHRkLiBTeXN0ZW0gTU1VIChTTU1VKSBTdXBwb3J0Igo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2lvbW11L01ha2VmaWxlIGIvZHJpdmVycy9pb21tdS9NYWtlZmlsZQo+IGluZGV4IGMwZmIw YmE4ODE0My4uOGM4MTNmMGViYzU0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvaW9tbXUvTWFrZWZp bGUKPiArKysgYi9kcml2ZXJzL2lvbW11L01ha2VmaWxlCj4gQEAgLTI5LDMgKzI5LDQgQEAgb2Jq LSQoQ09ORklHX0hZUEVSVl9JT01NVSkgKz0gaHlwZXJ2LWlvbW11Lm8KPiAgb2JqLSQoQ09ORklH X1ZJUlRJT19JT01NVSkgKz0gdmlydGlvLWlvbW11Lm8KPiAgb2JqLSQoQ09ORklHX0lPTU1VX1NW QV9MSUIpICs9IGlvbW11LXN2YS1saWIubyBpby1wZ2ZhdWx0Lm8KPiAgb2JqLSQoQ09ORklHX1NQ UkRfSU9NTVUpICs9IHNwcmQtaW9tbXUubwo+ICtvYmotJChDT05GSUdfSU9NTVVfQVBQTEVfREFS VCkgKz0gYXBwbGUtZGFydC1pb21tdS5vCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvYXBw bGUtZGFydC1pb21tdS5jIGIvZHJpdmVycy9pb21tdS9hcHBsZS1kYXJ0LWlvbW11LmMKPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uMjc3Nzg1MjQ5OGRlCj4gLS0t IC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvaW9tbXUvYXBwbGUtZGFydC1pb21tdS5jCj4gQEAg LTAsMCArMSw5NjYgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25s eQo+ICsvKgo+ICsgKiBBcHBsZSBEQVJUIChEZXZpY2UgQWRkcmVzcyBSZXNvbHV0aW9uIFRhYmxl KSBJT01NVSBkcml2ZXIKPiArICoKPiArICogQ29weXJpZ2h0IChDKSAyMDIxIFRoZSBBc2FoaSBM aW51eCBDb250cmlidXRvcnMKPiArICoKPiArICogQmFzZWQgb24gYXJtL2FybS1zbW11L2FybS1z c211LmMgYW5kIGFybS9hcm0tc21tdS12My9hcm0tc21tdS12My5jCj4gKyAqICBDb3B5cmlnaHQg KEMpIDIwMTMgQVJNIExpbWl0ZWQKPiArICogIENvcHlyaWdodCAoQykgMjAxNSBBUk0gTGltaXRl ZAo+ICsgKiBhbmQgb24gZXh5bm9zLWlvbW11LmMKPiArICogIENvcHlyaWdodCAoYykgMjAxMSwy MDE2IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUg PGxpbnV4L2JpdGZpZWxkLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KPiArI2luY2x1ZGUg PGxpbnV4L2RtYS1pb21tdS5oPgo+ICsjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KPiAr I2luY2x1ZGUgPGxpbnV4L2Vyci5oPgo+ICsjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Cj4g KyNpbmNsdWRlIDxsaW51eC9pby1wZ3RhYmxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pb3BvbGwu aD4KPiArI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5o Pgo+ICsjaW5jbHVkZSA8bGludXgvb2YuaD4KPiArI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3Mu aD4KPiArI2luY2x1ZGUgPGxpbnV4L29mX2lvbW11Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZl9w bGF0Zm9ybS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGNpLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9w bGF0Zm9ybV9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3JhdGVsaW1pdC5oPgo+ICsjaW5j bHVkZSA8bGludXgvc2xhYi5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGNpLmg+Cj4gKwo+ICsjZGVm aW5lIERBUlRfTUFYX1NUUkVBTVMgMTYKPiArI2RlZmluZSBEQVJUX01BWF9UVEJSIDQKPiArCj4g KyNkZWZpbmUgREFSVF9TVFJFQU1fQUxMIDB4ZmZmZgo+ICsKPiArI2RlZmluZSBEQVJUX1BBUkFN UzEgMHgwMAo+ICsjZGVmaW5lIERBUlRfUEFSQU1TX1BBR0VfU0hJRlQgR0VOTUFTSygyNywgMjQp Cj4gKwo+ICsjZGVmaW5lIERBUlRfUEFSQU1TMiAweDA0Cj4gKyNkZWZpbmUgREFSVF9QQVJBTVNf QllQQVNTX1NVUFBPUlQgQklUKDApCj4gKwo+ICsjZGVmaW5lIERBUlRfU1RSRUFNX0NPTU1BTkQg MHgyMAo+ICsjZGVmaW5lIERBUlRfU1RSRUFNX0NPTU1BTkRfQlVTWSBCSVQoMikKPiArI2RlZmlu ZSBEQVJUX1NUUkVBTV9DT01NQU5EX0lOVkFMSURBVEUgQklUKDIwKQo+ICsKPiArI2RlZmluZSBE QVJUX1NUUkVBTV9TRUxFQ1QgMHgzNAo+ICsKPiArI2RlZmluZSBEQVJUX0VSUk9SIDB4NDAKPiAr I2RlZmluZSBEQVJUX0VSUk9SX1NUUkVBTSBHRU5NQVNLKDI3LCAyNCkKPiArI2RlZmluZSBEQVJU X0VSUk9SX0NPREUgR0VOTUFTSygyMywgMCkKPiArI2RlZmluZSBEQVJUX0VSUk9SX0ZMQUcgQklU KDMxKQo+ICsjZGVmaW5lIERBUlRfRVJST1JfUkVBRF9GQVVMVCBCSVQoNCkKPiArI2RlZmluZSBE QVJUX0VSUk9SX1dSSVRFX0ZBVUxUIEJJVCgzKQo+ICsjZGVmaW5lIERBUlRfRVJST1JfTk9fUFRF IEJJVCgyKQo+ICsjZGVmaW5lIERBUlRfRVJST1JfTk9fUE1EIEJJVCgxKQo+ICsjZGVmaW5lIERB UlRfRVJST1JfTk9fVFRCUiBCSVQoMCkKPiArCj4gKyNkZWZpbmUgREFSVF9DT05GSUcgMHg2MAo+ ICsjZGVmaW5lIERBUlRfQ09ORklHX0xPQ0sgQklUKDE1KQo+ICsKPiArI2RlZmluZSBEQVJUX1NU UkVBTV9DT01NQU5EX0JVU1lfVElNRU9VVCAxMDAKPiArCj4gKyNkZWZpbmUgREFSVF9TVFJFQU1f UkVNQVAgMHg4MAo+ICsKPiArI2RlZmluZSBEQVJUX0VSUk9SX0FERFJfSEkgMHg1NAo+ICsjZGVm aW5lIERBUlRfRVJST1JfQUREUl9MTyAweDUwCj4gKwo+ICsjZGVmaW5lIERBUlRfVENSKHNpZCkg KDB4MTAwICsgNCAqIChzaWQpKQo+ICsjZGVmaW5lIERBUlRfVENSX1RSQU5TTEFURV9FTkFCTEUg QklUKDcpCj4gKyNkZWZpbmUgREFSVF9UQ1JfQllQQVNTMF9FTkFCTEUgQklUKDgpCj4gKyNkZWZp bmUgREFSVF9UQ1JfQllQQVNTMV9FTkFCTEUgQklUKDEyKQo+ICsKPiArI2RlZmluZSBEQVJUX1RU QlIoc2lkLCBpZHgpICgweDIwMCArIDE2ICogKHNpZCkgKyA0ICogKGlkeCkpCj4gKyNkZWZpbmUg REFSVF9UVEJSX1ZBTElEIEJJVCgzMSkKPiArI2RlZmluZSBEQVJUX1RUQlJfU0hJRlQgMTIKPiAr Cj4gKy8qCj4gKyAqIFByaXZhdGUgc3RydWN0dXJlIGFzc29jaWF0ZWQgd2l0aCBlYWNoIERBUlQg ZGV2aWNlLgo+ICsgKgo+ICsgKiBAZGV2OiBkZXZpY2Ugc3RydWN0Cj4gKyAqIEByZWdzOiBtYXBw ZWQgTU1JTyByZWdpb24KPiArICogQGlycTogaW50ZXJydXB0IG51bWJlciwgY2FuIGJlIHNoYXJl ZCB3aXRoIG90aGVyIERBUlRzCj4gKyAqIEBjbGtzOiBjbG9ja3MgYXNzb2NpYXRlZCB3aXRoIHRo aXMgREFSVAo+ICsgKiBAbnVtX2Nsa3M6IG51bWJlciBvZiBAY2xrcwo+ICsgKiBAbG9jazogbG9j ayBmb3IgQHVzZWRfc2lkcyBhbmQgaGFyZHdhcmUgb3BlcmF0aW9ucyBpbnZvbHZpbmcgdGhpcyBk YXJ0Cj4gKyAqIEB1c2VkX3NpZHM6IGJpdG1hcCBvZiBzdHJlYW1zIGF0dGFjaGVkIHRvIGEgZG9t YWluCj4gKyAqIEBwZ3NpemU6IHBhZ2VzaXplIHN1cHBvcnRlZCBieSB0aGlzIERBUlQKPiArICog QHN1cHBvcnRzX2J5cGFzczogaW5kaWNhdGVzIGlmIHRoaXMgREFSVCBzdXBwb3J0cyBieXBhc3Mg bW9kZQo+ICsgKiBAZm9yY2VfYnlwYXNzOiBmb3JjZSBieXBhc3MgbW9kZSBkdWUgdG8gcGFnZXNp emUgbWlzbWF0Y2g/Cj4gKyAqIEBpb21tdTogaW9tbXUgY29yZSBkZXZpY2UKPiArICovCj4gK3N0 cnVjdCBhcHBsZV9kYXJ0IHsKPiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPiArCj4gKwl2b2lkIF9f aW9tZW0gKnJlZ3M7Cj4gKwo+ICsJaW50IGlycTsKPiArCXN0cnVjdCBjbGtfYnVsa19kYXRhICpj bGtzOwo+ICsJaW50IG51bV9jbGtzOwo+ICsKPiArCXNwaW5sb2NrX3QgbG9jazsKPiArCj4gKwl1 MzIgdXNlZF9zaWRzOwo+ICsJdTMyIHBnc2l6ZTsKPiArCj4gKwl1MzIgc3VwcG9ydHNfYnlwYXNz IDogMTsKPiArCXUzMiBmb3JjZV9ieXBhc3MgOiAxOwo+ICsJdTY0IGZvcmNlX2J5cGFzc19vZmZz ZXQ7Cj4gKwl1NjQgZm9yY2VfYnlwYXNzX2xlbjsKPiArCj4gKwlzdHJ1Y3QgaW9tbXVfZGV2aWNl IGlvbW11Owo+ICt9Owo+ICsKPiArLyoKPiArICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBp ZGVudGlmeSBhIHNpbmdsZSBzdHJlYW0gYXR0YWNoZWQgdG8gYSBkb21haW4uCj4gKyAqIEl0J3Mg dXNlZCBhcyBhIGxpc3QgaW5zaWRlIHRoYXQgZG9tYWluIHRvIGJlIGFibGUgdG8gYXR0YWNoIG11 bHRpcGxlCj4gKyAqIHN0cmVhbXMgdG8gYSBzaW5nbGUgZG9tYWluLiBTaW5jZSBtdWx0aXBsZSBk ZXZpY2VzIGNhbiB1c2UgYSBzaW5nbGUgc3RyZWFtCj4gKyAqIGl0IGFkZGl0aW9uYWxseSBrZWVw cyB0cmFjayBvZiBob3cgbWFueSBkZXZpY2VzIGFyZSByZXByZXNlbnRlZCBieSB0aGlzCj4gKyAq IHN0cmVhbS4gT25jZSB0aGF0IG51bWJlciByZWFjaGVzIHplcm8gaXQgaXMgZGV0YWNoZWQgZnJv bSB0aGUgSU9NTVUgZG9tYWluCj4gKyAqIGFuZCBhbGwgdHJhbnNsYXRpb25zIGZyb20gdGhpcyBz dHJlYW0gYXJlIGRpc2FibGVkLgo+ICsgKgo+ICsgKiBAZGFydDogREFSVCBpbnN0YW5jZSB0byB3 aGljaCB0aGlzIHN0cmVhbSBiZWxvbmdzCj4gKyAqIEBzaWQ6IHN0cmVhbSBpZCB3aXRoaW4gdGhl IERBUlQgaW5zdGFuY2UKPiArICogQG51bV9kZXZpY2VzOiBjb3VudCBvZiBkZXZpY2VzIGF0dGFj aGVkIHRvIHRoaXMgc3RyZWFtCj4gKyAqIEBzdHJlYW1faGVhZDogbGlzdCBoZWFkIGZvciB0aGUg bmV4dCBzdHJlYW0KPiArICovCj4gK3N0cnVjdCBhcHBsZV9kYXJ0X3N0cmVhbSB7Cj4gKwlzdHJ1 Y3QgYXBwbGVfZGFydCAqZGFydDsKPiArCXUzMiBzaWQ7Cj4gKwo+ICsJdTMyIG51bV9kZXZpY2Vz Owo+ICsKPiArCXN0cnVjdCBsaXN0X2hlYWQgc3RyZWFtX2hlYWQ7Cj4gK307Cj4gKwo+ICsvKgo+ ICsgKiBUaGlzIHN0cnVjdHVyZSBpcyBhdHRhY2hlZCB0byBlYWNoIGlvbW11IGRvbWFpbiBoYW5k bGVkIGJ5IGEgREFSVC4KPiArICogQSBzaW5nbGUgZG9tYWluIGlzIHVzZWQgdG8gcmVwcmVzZW50 IGEgc2luZ2xlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXMuCj4gKyAqIEl0IGlzIGFsd2F5cyBhbGxv Y2F0ZWQgdG9nZXRoZXIgd2l0aCBhIHBhZ2UgdGFibGUuCj4gKyAqCj4gKyAqIFN0cmVhbXMgYXJl IHRoZSBzbWFsbGVzdCB1bml0cyB0aGUgREFSVCBoYXJkd2FyZSBjYW4gZGlmZmVyZW50aWF0ZS4K PiArICogVGhlc2UgYXJlIHBvaW50ZWQgdG8gdGhlIHBhZ2UgdGFibGUgb2YgYSBkb21haW4gd2hl bmV2ZXIgYSBkZXZpY2UgaXMKPiArICogYXR0YWNoZWQgdG8gaXQuIEEgc2luZ2xlIHN0cmVhbSBj YW4gb25seSBiZSBhc3NpZ25lZCB0byBhIHNpbmdsZSBkb21haW4uCj4gKyAqCj4gKyAqIERldmlj ZXMgYXJlIGFzc2lnbmVkIHRvIGF0IGxlYXN0IGEgc2luZ2xlIGFuZCBzb21ldGltZXMgbXVsdGlw bGUgaW5kaXZpZHVhbAo+ICsgKiBzdHJlYW1zICh1c2luZyB0aGUgaW9tbXVzIHByb3BlcnR5IGlu IHRoZSBkZXZpY2UgdHJlZSkuIE11bHRpcGxlIGRldmljZXMKPiArICogY2FuIHRoZW9yZXRpY2Fs bHkgYmUgcmVwcmVzZW50ZWQgYnkgdGhlIHNhbWUgc3RyZWFtLCB0aG91Z2ggdGhpcyBpcyB1c3Vh bGx5Cj4gKyAqIG5vdCB0aGUgY2FzZS4KPiArICoKPiArICogV2Ugb25seSBrZWVwIHRyYWNrIG9m IHN0cmVhbXMgaGVyZSBhbmQganVzdCBjb3VudCBob3cgbWFueSBkZXZpY2VzIGFyZQo+ICsgKiBy ZXByZXNlbnRlZCBieSBlYWNoIHN0cmVhbS4gV2hlbiB0aGUgbGFzdCBkZXZpY2UgaXMgcmVtb3Zl ZCB0aGUgd2hvbGUgc3RyZWFtCj4gKyAqIGlzIHJlbW92ZWQgZnJvbSB0aGUgZG9tYWluLgo+ICsg Kgo+ICsgKiBAZGFydDogcG9pbnRlciB0byB0aGUgREFSVCBpbnN0YW5jZQo+ICsgKiBAcGd0Ymxf b3BzOiBwYWdldGFibGUgb3BzIGFsbG9jYXRlZCBieSBpby1wZ3RhYmxlCj4gKyAqIEB0eXBlOiBk b21haW4gdHlwZSBJT01NVV9ET01BSU5fSURFTlRJVFlfe0lERU5USVRZLERNQSxVTk1BTkFHRUQs QkxPQ0tFRH0KPiArICogQHN0cmVhbXM6IGxpc3Qgb2Ygc3RyZWFtcyBhdHRhY2hlZCB0byB0aGlz IGRvbWFpbgo+ICsgKiBAbG9jazogc3BpbmxvY2sgZm9yIG9wZXJhdGlvbnMgaW52b2x2aW5nIHRo ZSBsaXN0IG9mIHN0cmVhbXMKPiArICogQGRvbWFpbjogY29yZSBpb21tdSBkb21haW4gcG9pbnRl cgo+ICsgKi8KPiArc3RydWN0IGFwcGxlX2RhcnRfZG9tYWluIHsKPiArCXN0cnVjdCBhcHBsZV9k YXJ0ICpkYXJ0Owo+ICsJc3RydWN0IGlvX3BndGFibGVfb3BzICpwZ3RibF9vcHM7Cj4gKwo+ICsJ dW5zaWduZWQgaW50IHR5cGU7Cj4gKwo+ICsJc3RydWN0IGxpc3RfaGVhZCBzdHJlYW1zOwo+ICsK PiArCXNwaW5sb2NrX3QgbG9jazsKPiArCj4gKwlzdHJ1Y3QgaW9tbXVfZG9tYWluIGRvbWFpbjsK PiArfTsKPiArCj4gKy8qCj4gKyAqIFRoaXMgc3RydWN0dXJlIGlzIGF0dGFjaGVkIHRvIGRldmlj ZXMgd2l0aCBkZXZfaW9tbXVfcHJpdl9zZXQoKSBvbiBvZl94bGF0ZQo+ICsgKiBhbmQgY29udGFp bnMgYSBsaXN0IG9mIHN0cmVhbXMgYm91bmQgdG8gdGhpcyBkZXZpY2UgYXMgZGVmaW5lZCBpbiB0 aGUKPiArICogZGV2aWNlIHRyZWUuIE11bHRpcGxlIERBUlQgaW5zdGFuY2VzIGNhbiBiZSBhdHRh Y2hlZCB0byBhIHNpbmdsZSBkZXZpY2UKPiArICogYW5kIGVhY2ggc3RyZWFtIGlzIGlkZW50aWZp ZWQgYnkgaXRzIHN0cmVhbSBpZC4KPiArICogSXQncyB1c3VhbGx5IHJlZmVyZW5jZSBieSBhIHBv aW50ZXIgY2FsbGVkICpjZmcuCj4gKyAqCj4gKyAqIEEgZHluYW1pYyBhcnJheSBpbnN0ZWFkIG9m IGEgbGlua2VkIGxpc3QgaXMgdXNlZCBoZXJlIHNpbmNlIGluIGFsbW9zdAo+ICsgKiBhbGwgY2Fz ZXMgYSBkZXZpY2Ugd2lsbCBqdXN0IGJlIGF0dGFjaGVkIHRvIGEgc2luZ2xlIHN0cmVhbSBhbmQg c3RyZWFtcwo+ICsgKiBhcmUgbmV2ZXIgcmVtb3ZlZCBhZnRlciB0aGV5IGhhdmUgYmVlbiBhZGRl ZC4KPiArICoKPiArICogQG51bV9zdHJlYW1zOiBudW1iZXIgb2Ygc3RyZWFtcyBhdHRhY2hlZAo+ ICsgKiBAc3RyZWFtczogYXJyYXkgb2Ygc3RydWN0cyB0byBpZGVudGlmeSBhdHRhY2hlZCBzdHJl YW1zIGFuZCB0aGUgZGV2aWNlIGxpbmsKPiArICogICAgICAgICAgIHRvIHRoZSBpb21tdQo+ICsg Ki8KPiArc3RydWN0IGFwcGxlX2RhcnRfbWFzdGVyX2NmZyB7Cj4gKwlpbnQgbnVtX3N0cmVhbXM7 Cj4gKwlzdHJ1Y3Qgewo+ICsJCXN0cnVjdCBhcHBsZV9kYXJ0ICpkYXJ0Owo+ICsJCXUzMiBzaWQ7 Cj4gKwo+ICsJCXN0cnVjdCBkZXZpY2VfbGluayAqbGluazsKPiArCX0gc3RyZWFtc1tdOwo+ICt9 Owo+ICsKPiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXBwbGVfZGFydF9kcml2ZXI7 Cj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tbXVfb3BzIGFwcGxlX2RhcnRfaW9tbXVfb3BzOwo+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IGlvbW11X2ZsdXNoX29wcyBhcHBsZV9kYXJ0X3RsYl9vcHM7 Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGFwcGxlX2RhcnRfZG9tYWluICp0b19kYXJ0X2RvbWFpbihz dHJ1Y3QgaW9tbXVfZG9tYWluICpkb20pCj4gK3sKPiArCXJldHVybiBjb250YWluZXJfb2YoZG9t LCBzdHJ1Y3QgYXBwbGVfZGFydF9kb21haW4sIGRvbWFpbik7Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIGFwcGxlX2RhcnRfaHdfZW5hYmxlX3RyYW5zbGF0aW9uKHN0cnVjdCBhcHBsZV9kYXJ0ICpk YXJ0LCB1MTYgc2lkKQo+ICt7Cj4gKwl3cml0ZWwoREFSVF9UQ1JfVFJBTlNMQVRFX0VOQUJMRSwg ZGFydC0+cmVncyArIERBUlRfVENSKHNpZCkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBhcHBs ZV9kYXJ0X2h3X2Rpc2FibGVfZG1hKHN0cnVjdCBhcHBsZV9kYXJ0ICpkYXJ0LCB1MTYgc2lkKQo+ ICt7Cj4gKwl3cml0ZWwoMCwgZGFydC0+cmVncyArIERBUlRfVENSKHNpZCkpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCBhcHBsZV9kYXJ0X2h3X2VuYWJsZV9ieXBhc3Moc3RydWN0IGFwcGxlX2Rh cnQgKmRhcnQsIHUxNiBzaWQpCj4gK3sKPiArCVdBUk5fT04oIWRhcnQtPnN1cHBvcnRzX2J5cGFz cyk7Cj4gKwl3cml0ZWwoREFSVF9UQ1JfQllQQVNTMF9FTkFCTEUgfCBEQVJUX1RDUl9CWVBBU1Mx X0VOQUJMRSwKPiArCSAgICAgICBkYXJ0LT5yZWdzICsgREFSVF9UQ1Ioc2lkKSk7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIGFwcGxlX2RhcnRfaHdfc2V0X3R0YnIoc3RydWN0IGFwcGxlX2RhcnQg KmRhcnQsIHUxNiBzaWQsIHUxNiBpZHgsCj4gKwkJCQkgICBwaHlzX2FkZHJfdCBwYWRkcikKPiAr ewo+ICsJd3JpdGVsKERBUlRfVFRCUl9WQUxJRCB8IChwYWRkciA+PiBEQVJUX1RUQlJfU0hJRlQp LAo+ICsJICAgICAgIGRhcnQtPnJlZ3MgKyBEQVJUX1RUQlIoc2lkLCBpZHgpKTsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgYXBwbGVfZGFydF9od19jbGVhcl90dGJyKHN0cnVjdCBhcHBsZV9kYXJ0 ICpkYXJ0LCB1MTYgc2lkLCB1MTYgaWR4KQo+ICt7Cj4gKwl3cml0ZWwoMCwgZGFydC0+cmVncyAr IERBUlRfVFRCUihzaWQsIGlkeCkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBhcHBsZV9kYXJ0 X2h3X2NsZWFyX2FsbF90dGJycyhzdHJ1Y3QgYXBwbGVfZGFydCAqZGFydCwgdTE2IHNpZCkKPiAr ewo+ICsJaW50IGk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkKPiArCQlhcHBsZV9k YXJ0X2h3X2NsZWFyX3R0YnIoZGFydCwgc2lkLCBpKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBh cHBsZV9kYXJ0X2h3X3N0cmVhbV9jb21tYW5kKHN0cnVjdCBhcHBsZV9kYXJ0ICpkYXJ0LCB1MTYg c2lkX2JpdG1hcCwKPiArCQkJCQl1MzIgY29tbWFuZCkKPiArewo+ICsJdW5zaWduZWQgbG9uZyBm bGFnczsKPiArCWludCByZXQ7Cj4gKwl1MzIgY29tbWFuZF9yZWc7Cj4gKwo+ICsJc3Bpbl9sb2Nr X2lycXNhdmUoJmRhcnQtPmxvY2ssIGZsYWdzKTsKPiArCj4gKwl3cml0ZWwoc2lkX2JpdG1hcCwg ZGFydC0+cmVncyArIERBUlRfU1RSRUFNX1NFTEVDVCk7Cj4gKwl3cml0ZWwoY29tbWFuZCwgZGFy dC0+cmVncyArIERBUlRfU1RSRUFNX0NPTU1BTkQpOwo+ICsKPiArCXJldCA9IHJlYWRsX3BvbGxf dGltZW91dF9hdG9taWMoCj4gKwkJZGFydC0+cmVncyArIERBUlRfU1RSRUFNX0NPTU1BTkQsIGNv bW1hbmRfcmVnLAo+ICsJCSEoY29tbWFuZF9yZWcgJiBEQVJUX1NUUkVBTV9DT01NQU5EX0JVU1kp LCAxLAo+ICsJCURBUlRfU1RSRUFNX0NPTU1BTkRfQlVTWV9USU1FT1VUKTsKPiArCj4gKwlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZkYXJ0LT5sb2NrLCBmbGFncyk7Cj4gKwo+ICsJaWYgKHJldCkg ewo+ICsJCWRldl9lcnIoZGFydC0+ZGV2LAo+ICsJCQkiYnVzeSBiaXQgZGlkIG5vdCBjbGVhciBh ZnRlciBjb21tYW5kICV4IGZvciBzdHJlYW1zICV4XG4iLAo+ICsJCQljb21tYW5kLCBzaWRfYml0 bWFwKTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IGFwcGxlX2RhcnRfaHdfaW52YWxpZGF0ZV90bGJfZ2xvYmFsKHN0cnVjdCBh cHBsZV9kYXJ0ICpkYXJ0KQo+ICt7Cj4gKwlyZXR1cm4gYXBwbGVfZGFydF9od19zdHJlYW1fY29t bWFuZChkYXJ0LCBEQVJUX1NUUkVBTV9BTEwsCj4gKwkJCQkJICAgIERBUlRfU1RSRUFNX0NPTU1B TkRfSU5WQUxJREFURSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYXBwbGVfZGFydF9od19pbnZh bGlkYXRlX3RsYl9zdHJlYW0oc3RydWN0IGFwcGxlX2RhcnQgKmRhcnQsIHUxNiBzaWQpCj4gK3sK PiArCXJldHVybiBhcHBsZV9kYXJ0X2h3X3N0cmVhbV9jb21tYW5kKGRhcnQsIDEgPDwgc2lkLAo+ ICsJCQkJCSAgICBEQVJUX1NUUkVBTV9DT01NQU5EX0lOVkFMSURBVEUpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IGFwcGxlX2RhcnRfaHdfcmVzZXQoc3RydWN0IGFwcGxlX2RhcnQgKmRhcnQpCj4g K3sKPiArCWludCBzaWQ7Cj4gKwl1MzIgY29uZmlnOwo+ICsKPiArCWNvbmZpZyA9IHJlYWRsKGRh cnQtPnJlZ3MgKyBEQVJUX0NPTkZJRyk7Cj4gKwlpZiAoY29uZmlnICYgREFSVF9DT05GSUdfTE9D Sykgewo+ICsJCWRldl9lcnIoZGFydC0+ZGV2LCAiREFSVCBpcyBsb2NrZWQgZG93biB1bnRpbCBy ZWJvb3Q6ICUwOHhcbiIsCj4gKwkJCWNvbmZpZyk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9 Cj4gKwo+ICsJZm9yIChzaWQgPSAwOyBzaWQgPCBEQVJUX01BWF9TVFJFQU1TOyArK3NpZCkgewo+ ICsJCWFwcGxlX2RhcnRfaHdfZGlzYWJsZV9kbWEoZGFydCwgc2lkKTsKPiArCQlhcHBsZV9kYXJ0 X2h3X2NsZWFyX2FsbF90dGJycyhkYXJ0LCBzaWQpOwo+ICsJCWFwcGxlX2RhcnRfaHdfZW5hYmxl X3RyYW5zbGF0aW9uKGRhcnQsIHNpZCk7Cj4gKwl9Cj4gKwo+ICsJLyogcmVzdG9yZSBzdHJlYW0g aWRlbnRpdHkgbWFwICovCj4gKwl3cml0ZWwoMHgwMzAyMDEwMCwgZGFydC0+cmVncyArIERBUlRf U1RSRUFNX1JFTUFQKTsKPiArCXdyaXRlbCgweDA3MDYwNTA0LCBkYXJ0LT5yZWdzICsgREFSVF9T VFJFQU1fUkVNQVAgKyA0KTsKPiArCXdyaXRlbCgweDBiMGEwOTA4LCBkYXJ0LT5yZWdzICsgREFS VF9TVFJFQU1fUkVNQVAgKyA4KTsKPiArCXdyaXRlbCgweDBmMGUwZDBjLCBkYXJ0LT5yZWdzICsg REFSVF9TVFJFQU1fUkVNQVAgKyAxMik7Cj4gKwo+ICsJLyogY2xlYXIgYW55IHBlbmRpbmcgZXJy b3JzIGJlZm9yZSB0aGUgaW50ZXJydXB0IGlzIHVubWFza2VkICovCj4gKwl3cml0ZWwocmVhZGwo ZGFydC0+cmVncyArIERBUlRfRVJST1IpLCBkYXJ0LT5yZWdzICsgREFSVF9FUlJPUik7Cj4gKwo+ ICsJcmV0dXJuIGFwcGxlX2RhcnRfaHdfaW52YWxpZGF0ZV90bGJfZ2xvYmFsKGRhcnQpOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCBhcHBsZV9kYXJ0X2RvbWFpbl9mbHVzaF90bGIoc3RydWN0IGFw cGxlX2RhcnRfZG9tYWluICpkb21haW4pCj4gK3sKPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4g KwlzdHJ1Y3QgYXBwbGVfZGFydF9zdHJlYW0gKnN0cmVhbTsKPiArCXN0cnVjdCBhcHBsZV9kYXJ0 ICpkYXJ0ID0gZG9tYWluLT5kYXJ0Owo+ICsKPiArCWlmICghZGFydCkKPiArCQlyZXR1cm47Cj4g Kwo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmRvbWFpbi0+bG9jaywgZmxhZ3MpOwo+ICsJbGlzdF9m b3JfZWFjaF9lbnRyeShzdHJlYW0sICZkb21haW4tPnN0cmVhbXMsIHN0cmVhbV9oZWFkKSB7Cj4g KwkJYXBwbGVfZGFydF9od19pbnZhbGlkYXRlX3RsYl9zdHJlYW0oc3RyZWFtLT5kYXJ0LCBzdHJl YW0tPnNpZCk7Cj4gKwl9Cj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkb21haW4tPmxvY2ss IGZsYWdzKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYXBwbGVfZGFydF9mbHVzaF9pb3RsYl9h bGwoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluKQo+ICt7Cj4gKwlzdHJ1Y3QgYXBwbGVfZGFy dF9kb21haW4gKmRhcnRfZG9tYWluID0gdG9fZGFydF9kb21haW4oZG9tYWluKTsKPiArCj4gKwlh cHBsZV9kYXJ0X2RvbWFpbl9mbHVzaF90bGIoZGFydF9kb21haW4pOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBhcHBsZV9kYXJ0X2lvdGxiX3N5bmMoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWlu LAo+ICsJCQkJICBzdHJ1Y3QgaW9tbXVfaW90bGJfZ2F0aGVyICpnYXRoZXIpCj4gK3sKPiArCXN0 cnVjdCBhcHBsZV9kYXJ0X2RvbWFpbiAqZGFydF9kb21haW4gPSB0b19kYXJ0X2RvbWFpbihkb21h aW4pOwo+ICsKPiArCWFwcGxlX2RhcnRfZG9tYWluX2ZsdXNoX3RsYihkYXJ0X2RvbWFpbik7Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIGFwcGxlX2RhcnRfaW90bGJfc3luY19tYXAoc3RydWN0IGlv bW11X2RvbWFpbiAqZG9tYWluLAo+ICsJCQkJICAgICAgdW5zaWduZWQgbG9uZyBpb3ZhLCBzaXpl X3Qgc2l6ZSkKPiArewo+ICsJc3RydWN0IGFwcGxlX2RhcnRfZG9tYWluICpkYXJ0X2RvbWFpbiA9 IHRvX2RhcnRfZG9tYWluKGRvbWFpbik7Cj4gKwo+ICsJYXBwbGVfZGFydF9kb21haW5fZmx1c2hf dGxiKGRhcnRfZG9tYWluKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYXBwbGVfZGFydF90bGJf Zmx1c2hfYWxsKHZvaWQgKmNvb2tpZSkKPiArewo+ICsJc3RydWN0IGFwcGxlX2RhcnRfZG9tYWlu ICpkb21haW4gPSBjb29raWU7Cj4gKwo+ICsJYXBwbGVfZGFydF9kb21haW5fZmx1c2hfdGxiKGRv bWFpbik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGFwcGxlX2RhcnRfdGxiX2ZsdXNoX3dhbGso dW5zaWduZWQgbG9uZyBpb3ZhLCBzaXplX3Qgc2l6ZSwKPiArCQkJCSAgICAgIHNpemVfdCBncmFu dWxlLCB2b2lkICpjb29raWUpCj4gK3sKPiArCXN0cnVjdCBhcHBsZV9kYXJ0X2RvbWFpbiAqZG9t YWluID0gY29va2llOwo+ICsKPiArCWFwcGxlX2RhcnRfZG9tYWluX2ZsdXNoX3RsYihkb21haW4p Owo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGlvbW11X2ZsdXNoX29wcyBhcHBsZV9k YXJ0X3RsYl9vcHMgPSB7Cj4gKwkudGxiX2ZsdXNoX2FsbCA9IGFwcGxlX2RhcnRfdGxiX2ZsdXNo X2FsbCwKPiArCS50bGJfZmx1c2hfd2FsayA9IGFwcGxlX2RhcnRfdGxiX2ZsdXNoX3dhbGssCj4g KwkudGxiX2FkZF9wYWdlID0gTlVMTCwKPiArfTsKPiArCj4gK3N0YXRpYyBwaHlzX2FkZHJfdCBh cHBsZV9kYXJ0X2lvdmFfdG9fcGh5cyhzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sCj4gKwkJ CQkJICAgZG1hX2FkZHJfdCBpb3ZhKQo+ICt7Cj4gKwlzdHJ1Y3QgYXBwbGVfZGFydF9kb21haW4g KmRhcnRfZG9tYWluID0gdG9fZGFydF9kb21haW4oZG9tYWluKTsKPiArCXN0cnVjdCBpb19wZ3Rh YmxlX29wcyAqb3BzID0gZGFydF9kb21haW4tPnBndGJsX29wczsKPiArCj4gKwlpZiAoZG9tYWlu LT50eXBlID09IElPTU1VX0RPTUFJTl9JREVOVElUWSkKPiArCQlyZXR1cm4gaW92YTsKPiArCWlm ICghb3BzKQo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsKPiArCXJldHVybiBvcHMtPmlvdmFfdG9f cGh5cyhvcHMsIGlvdmEpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGFwcGxlX2RhcnRfbWFwKHN0 cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgbG9uZyBpb3ZhLAo+ICsJCQkgIHBo eXNfYWRkcl90IHBhZGRyLCBzaXplX3Qgc2l6ZSwgaW50IHByb3QsIGdmcF90IGdmcCkKPiArewo+ ICsJc3RydWN0IGFwcGxlX2RhcnRfZG9tYWluICpkYXJ0X2RvbWFpbiA9IHRvX2RhcnRfZG9tYWlu KGRvbWFpbik7Cj4gKwlzdHJ1Y3QgaW9fcGd0YWJsZV9vcHMgKm9wcyA9IGRhcnRfZG9tYWluLT5w Z3RibF9vcHM7Cj4gKwo+ICsJaWYgKCFvcHMpCj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwlpZiAo cHJvdCAmIElPTU1VX01NSU8pCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwlpZiAocHJvdCAmIElP TU1VX05PRVhFQykKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlyZXR1cm4gb3BzLT5tYXAo b3BzLCBpb3ZhLCBwYWRkciwgc2l6ZSwgcHJvdCwgZ2ZwKTsKPiArfQo+ICsKPiArc3RhdGljIHNp emVfdCBhcHBsZV9kYXJ0X3VubWFwKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwgdW5zaWdu ZWQgbG9uZyBpb3ZhLAo+ICsJCQkgICAgICAgc2l6ZV90IHNpemUsIHN0cnVjdCBpb21tdV9pb3Rs Yl9nYXRoZXIgKmdhdGhlcikKPiArewo+ICsJc3RydWN0IGFwcGxlX2RhcnRfZG9tYWluICpkYXJ0 X2RvbWFpbiA9IHRvX2RhcnRfZG9tYWluKGRvbWFpbik7Cj4gKwlzdHJ1Y3QgaW9fcGd0YWJsZV9v cHMgKm9wcyA9IGRhcnRfZG9tYWluLT5wZ3RibF9vcHM7Cj4gKwo+ICsJaWYgKCFvcHMpCj4gKwkJ cmV0dXJuIDA7Cj4gKwo+ICsJcmV0dXJuIG9wcy0+dW5tYXAob3BzLCBpb3ZhLCBzaXplLCBnYXRo ZXIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGFwcGxlX2RhcnRfZG9tYWluX25lZWRzX3BndGJs X29wcyhzdHJ1Y3QgYXBwbGVfZGFydCAqZGFydCwKPiArCQkJCQkgICAgIHN0cnVjdCBpb21tdV9k b21haW4gKmRvbWFpbikKPiArewo+ICsJaWYgKGRvbWFpbi0+dHlwZSA9PSBJT01NVV9ET01BSU5f RE1BKQo+ICsJCXJldHVybiAxOwo+ICsJaWYgKGRvbWFpbi0+dHlwZSA9PSBJT01NVV9ET01BSU5f VU5NQU5BR0VEKQo+ICsJCXJldHVybiAxOwo+ICsJaWYgKCFkYXJ0LT5zdXBwb3J0c19ieXBhc3Mg JiYgZG9tYWluLT50eXBlID09IElPTU1VX0RPTUFJTl9JREVOVElUWSkKPiArCQlyZXR1cm4gMTsK PiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKiBtdXN0IGJlIGNhbGxlZCB3aXRoIGhlbGQgZGFy dF9kb21haW4tPmxvY2sgKi8KCllvdSBjYW4gcmVtb3ZlIHRoaXMgY29tbWVudCwgaW5jbHVkZSBs b2NrZGVwLmggYW5k4oCmCgo+ICtzdGF0aWMgaW50IGFwcGxlX2RhcnRfZmluYWxpemVfZG9tYWlu KHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbikKPiArewo+ICsJc3RydWN0IGFwcGxlX2RhcnRf ZG9tYWluICpkYXJ0X2RvbWFpbiA9IHRvX2RhcnRfZG9tYWluKGRvbWFpbik7Cj4gKwlzdHJ1Y3Qg YXBwbGVfZGFydCAqZGFydCA9IGRhcnRfZG9tYWluLT5kYXJ0Owo+ICsJc3RydWN0IGlvX3BndGFi bGVfY2ZnIHBndGJsX2NmZzsKPiArCgoJbG9ja2RlcF9hc3NlcnRfaGVsZCgmZGFydF9kb21haW4t PmxvY2spOwoKQSBsb2NrZGVwIGVuYWJsZWQga2VybmVsIHdpbGwgd2FybiBpZiB0aGlzIGZ1bmN0 aW9uIGlzIGNhbGxlZCB3aXRob3V0CnRoZSBsb2NrIGhlbGQsIG90aGVyd2lzZSB0aGlzIGdldHMg b3B0aW1pemVkIG91dC4gU2FtZSBmb3IgdGhlIHNpbWlsYXIKY29tbWVudHMgYmVsb3cuCgo+ICsJ aWYgKGRhcnRfZG9tYWluLT5wZ3RibF9vcHMpCj4gKwkJcmV0dXJuIDA7Cj4gKwlpZiAoIWFwcGxl X2RhcnRfZG9tYWluX25lZWRzX3BndGJsX29wcyhkYXJ0LCBkb21haW4pKQo+ICsJCXJldHVybiAw Owo+ICsKPiArCXBndGJsX2NmZyA9IChzdHJ1Y3QgaW9fcGd0YWJsZV9jZmcpewo+ICsJCS5wZ3Np emVfYml0bWFwID0gZGFydC0+cGdzaXplLAo+ICsJCS5pYXMgPSAzMiwKPiArCQkub2FzID0gMzYs Cj4gKwkJLmNvaGVyZW50X3dhbGsgPSAxLAo+ICsJCS50bGIgPSAmYXBwbGVfZGFydF90bGJfb3Bz LAo+ICsJCS5pb21tdV9kZXYgPSBkYXJ0LT5kZXYsCj4gKwl9Owo+ICsKPiArCWRhcnRfZG9tYWlu LT5wZ3RibF9vcHMgPQo+ICsJCWFsbG9jX2lvX3BndGFibGVfb3BzKEFSTV9BUFBMRV9EQVJULCAm cGd0YmxfY2ZnLCBkb21haW4pOwo+ICsJaWYgKCFkYXJ0X2RvbWFpbi0+cGd0Ymxfb3BzKQo+ICsJ CXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWRvbWFpbi0+cGdzaXplX2JpdG1hcCA9IHBndGJsX2Nm Zy5wZ3NpemVfYml0bWFwOwo+ICsJZG9tYWluLT5nZW9tZXRyeS5hcGVydHVyZV9zdGFydCA9IDA7 Cj4gKwlkb21haW4tPmdlb21ldHJ5LmFwZXJ0dXJlX2VuZCA9IERNQV9CSVRfTUFTSygzMik7Cj4g Kwlkb21haW4tPmdlb21ldHJ5LmZvcmNlX2FwZXJ0dXJlID0gdHJ1ZTsKPiArCj4gKwkvLyBIQUNL OiBjcmVhdGUgYSBzdGF0aWMgcGFnZXRhYmxlIHRvIGZha2UgYnlwYXNzIG1vZGUKPiArCWlmIChk b21haW4tPnR5cGUgPT0gSU9NTVVfRE9NQUlOX0lERU5USVRZKSB7Cj4gKwkJdTY0IGFkZHI7Cj4g Kwo+ICsJCWZvciAoYWRkciA9IDA7IGFkZHIgPCBkYXJ0LT5mb3JjZV9ieXBhc3NfbGVuOwo+ICsJ CSAgICAgYWRkciArPSBkYXJ0LT5wZ3NpemUpCj4gKwkJCWRhcnRfZG9tYWluLT5wZ3RibF9vcHMt Pm1hcCgKPiArCQkJCWRhcnRfZG9tYWluLT5wZ3RibF9vcHMsIGFkZHIsCj4gKwkJCQlkYXJ0LT5m b3JjZV9ieXBhc3Nfb2Zmc2V0ICsgYWRkciwgZGFydC0+cGdzaXplLAo+ICsJCQkJSU9NTVVfUkVB RCB8IElPTU1VX1dSSVRFLCBHRlBfQVRPTUlDKTsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgYXBwbGVfZGFydF9zdHJlYW1fc2V0dXBfdHRicnMoc3RydWN0 IGFwcGxlX2RhcnRfZG9tYWluICpkb21haW4sCj4gKwkJCQkJICBzdHJ1Y3QgYXBwbGVfZGFydCAq ZGFydCwgdTMyIHNpZCkKPiArewo+ICsJaW50IGk7Cj4gKwlzdHJ1Y3QgaW9fcGd0YWJsZV9jZmcg KnBndGJsX2NmZyA9Cj4gKwkJJmlvX3BndGFibGVfb3BzX3RvX3BndGFibGUoZG9tYWluLT5wZ3Ri bF9vcHMpLT5jZmc7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IHBndGJsX2NmZy0+YXBwbGVfZGFy dF9jZmcubl90dGJyczsgKytpKQo+ICsJCWFwcGxlX2RhcnRfaHdfc2V0X3R0YnIoZGFydCwgc2lk LCBpLAo+ICsJCQkJICAgICAgIHBndGJsX2NmZy0+YXBwbGVfZGFydF9jZmcudHRicltpXSk7Cj4g Kwlmb3IgKDsgaSA8IERBUlRfTUFYX1RUQlI7ICsraSkKPiArCQlhcHBsZV9kYXJ0X2h3X2NsZWFy X3R0YnIoZGFydCwgc2lkLCBpKTsKPiArfQo+ICsKPiArLyogbXVzdCBiZSBjYWxsZWQgd2l0aCBo ZWxkIGRvbWFpbi0+bG9jayAqLwo+ICtzdGF0aWMgaW50IGFwcGxlX2RhcnRfYXR0YWNoX3N0cmVh bShzdHJ1Y3QgYXBwbGVfZGFydF9kb21haW4gKmRvbWFpbiwKPiArCQkJCSAgICBzdHJ1Y3QgYXBw bGVfZGFydCAqZGFydCwgdTMyIHNpZCkKPiArewo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsKPiAr CXN0cnVjdCBhcHBsZV9kYXJ0X3N0cmVhbSAqc3RyZWFtOwo+ICsJaW50IHJldDsKPiArCj4gKwlp ZiAoV0FSTl9PTihkYXJ0LT5mb3JjZV9ieXBhc3MgJiYKPiArCQkgICAgZG9tYWluLT50eXBlICE9 IElPTU1VX0RPTUFJTl9JREVOVElUWSkpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJLyoK PiArCSAqIHdlIGNhbid0IG1peCBhbmQgbWF0Y2ggREFSVHMgdGhhdCBzdXBwb3J0IGJ5cGFzcyBt b2RlIHdpdGggdGhvc2Ugd2hvIGRvbid0Cj4gKwkgKiBiZWNhdXNlIHRoZSBpb3ZhIHNwYWNlIGlu IGZha2UgYnlwYXNzIG1vZGUgZ2VuZXJhbGx5IGhhcyBhbiBvZmZzZXQKPiArCSAqLwo+ICsJaWYg KFdBUk5fT04oZG9tYWluLT50eXBlID09IElPTU1VX0RPTUFJTl9JREVOVElUWSAmJgo+ICsJCSAg ICAoZG9tYWluLT5kYXJ0LT5zdXBwb3J0c19ieXBhc3MgIT0gZGFydC0+c3VwcG9ydHNfYnlwYXNz KSkpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShzdHJl YW0sICZkb21haW4tPnN0cmVhbXMsIHN0cmVhbV9oZWFkKSB7Cj4gKwkJaWYgKHN0cmVhbS0+ZGFy dCA9PSBkYXJ0ICYmIHN0cmVhbS0+c2lkID09IHNpZCkgewo+ICsJCQlzdHJlYW0tPm51bV9kZXZp Y2VzKys7Cj4gKwkJCXJldHVybiAwOwo+ICsJCX0KPiArCX0KPiArCj4gKwlzcGluX2xvY2tfaXJx c2F2ZSgmZGFydC0+bG9jaywgZmxhZ3MpOwo+ICsKPiArCWlmIChXQVJOX09OKGRhcnQtPnVzZWRf c2lkcyAmIEJJVChzaWQpKSkgewo+ICsJCXJldCA9IC1FSU5WQUw7Cj4gKwkJZ290byBlcnJvcjsK PiArCX0KPiArCj4gKwlzdHJlYW0gPSBremFsbG9jKHNpemVvZigqc3RyZWFtKSwgR0ZQX0FUT01J Qyk7Cj4gKwlpZiAoIXN0cmVhbSkgewo+ICsJCXJldCA9IC1FTk9NRU07Cj4gKwkJZ290byBlcnJv cjsKPiArCX0KPiArCj4gKwlzdHJlYW0tPmRhcnQgPSBkYXJ0Owo+ICsJc3RyZWFtLT5zaWQgPSBz aWQ7Cj4gKwlzdHJlYW0tPm51bV9kZXZpY2VzID0gMTsKPiArCWxpc3RfYWRkKCZzdHJlYW0tPnN0 cmVhbV9oZWFkLCAmZG9tYWluLT5zdHJlYW1zKTsKPiArCj4gKwlkYXJ0LT51c2VkX3NpZHMgfD0g QklUKHNpZCk7Cj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYXJ0LT5sb2NrLCBmbGFncyk7 Cj4gKwo+ICsJYXBwbGVfZGFydF9od19jbGVhcl9hbGxfdHRicnMoc3RyZWFtLT5kYXJ0LCBzdHJl YW0tPnNpZCk7Cj4gKwo+ICsJc3dpdGNoIChkb21haW4tPnR5cGUpIHsKPiArCWNhc2UgSU9NTVVf RE9NQUlOX0lERU5USVRZOgo+ICsJCWlmIChzdHJlYW0tPmRhcnQtPnN1cHBvcnRzX2J5cGFzcykg ewo+ICsJCQlhcHBsZV9kYXJ0X2h3X2VuYWJsZV9ieXBhc3Moc3RyZWFtLT5kYXJ0LCBzdHJlYW0t PnNpZCk7Cj4gKwkJfSBlbHNlIHsKPiArCQkJYXBwbGVfZGFydF9zdHJlYW1fc2V0dXBfdHRicnMo ZG9tYWluLCBzdHJlYW0tPmRhcnQsCj4gKwkJCQkJCSAgICAgIHN0cmVhbS0+c2lkKTsKPiArCQkJ YXBwbGVfZGFydF9od19lbmFibGVfdHJhbnNsYXRpb24oc3RyZWFtLT5kYXJ0LAo+ICsJCQkJCQkJ IHN0cmVhbS0+c2lkKTsKPiArCQkJYXBwbGVfZGFydF9od19pbnZhbGlkYXRlX3RsYl9zdHJlYW0o c3RyZWFtLT5kYXJ0LAo+ICsJCQkJCQkJICAgIHN0cmVhbS0+c2lkKTsKPiArCQl9Cj4gKwkJYnJl YWs7Cj4gKwljYXNlIElPTU1VX0RPTUFJTl9CTE9DS0VEOgo+ICsJCWFwcGxlX2RhcnRfaHdfZGlz YWJsZV9kbWEoc3RyZWFtLT5kYXJ0LCBzdHJlYW0tPnNpZCk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNl IElPTU1VX0RPTUFJTl9VTk1BTkFHRUQ6Cj4gKwljYXNlIElPTU1VX0RPTUFJTl9ETUE6Cj4gKwkJ YXBwbGVfZGFydF9zdHJlYW1fc2V0dXBfdHRicnMoZG9tYWluLCBzdHJlYW0tPmRhcnQsCj4gKwkJ CQkJICAgICAgc3RyZWFtLT5zaWQpOwo+ICsJCWFwcGxlX2RhcnRfaHdfZW5hYmxlX3RyYW5zbGF0 aW9uKHN0cmVhbS0+ZGFydCwgc3RyZWFtLT5zaWQpOwo+ICsJCWFwcGxlX2RhcnRfaHdfaW52YWxp ZGF0ZV90bGJfc3RyZWFtKHN0cmVhbS0+ZGFydCwgc3RyZWFtLT5zaWQpOwo+ICsJCWJyZWFrOwo+ ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArZXJyb3I6Cj4gKwlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZkYXJ0LT5sb2NrLCBmbGFncyk7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBhcHBsZV9kYXJ0X2Rpc2FibGVfc3RyZWFtKHN0cnVjdCBhcHBsZV9kYXJ0ICpk YXJ0LCB1MzIgc2lkKQo+ICt7Cj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICsKPiArCWFwcGxl X2RhcnRfaHdfZGlzYWJsZV9kbWEoZGFydCwgc2lkKTsKPiArCWFwcGxlX2RhcnRfaHdfY2xlYXJf YWxsX3R0YnJzKGRhcnQsIHNpZCk7Cj4gKwlhcHBsZV9kYXJ0X2h3X2ludmFsaWRhdGVfdGxiX3N0 cmVhbShkYXJ0LCBzaWQpOwo+ICsKPiArCXNwaW5fbG9ja19pcnFzYXZlKCZkYXJ0LT5sb2NrLCBm bGFncyk7Cj4gKwlkYXJ0LT51c2VkX3NpZHMgJj0gfkJJVChzaWQpOwo+ICsJc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmZGFydC0+bG9jaywgZmxhZ3MpOwo+ICt9Cj4gKwo+ICsvKiBtdXN0IGJlIGNh bGxlZCB3aXRoIGhlbGQgZG9tYWluLT5sb2NrICovCj4gK3N0YXRpYyB2b2lkIGFwcGxlX2RhcnRf ZGV0YWNoX3N0cmVhbShzdHJ1Y3QgYXBwbGVfZGFydF9kb21haW4gKmRvbWFpbiwKPiArCQkJCSAg ICAgc3RydWN0IGFwcGxlX2RhcnQgKmRhcnQsIHUzMiBzaWQpCj4gK3sKPiArCXN0cnVjdCBhcHBs ZV9kYXJ0X3N0cmVhbSAqc3RyZWFtOwo+ICsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnkoc3RyZWFt LCAmZG9tYWluLT5zdHJlYW1zLCBzdHJlYW1faGVhZCkgewo+ICsJCWlmIChzdHJlYW0tPmRhcnQg PT0gZGFydCAmJiBzdHJlYW0tPnNpZCA9PSBzaWQpIHsKPiArCQkJc3RyZWFtLT5udW1fZGV2aWNl cy0tOwo+ICsKPiArCQkJaWYgKHN0cmVhbS0+bnVtX2RldmljZXMgPT0gMCkgewo+ICsJCQkJYXBw bGVfZGFydF9kaXNhYmxlX3N0cmVhbShkYXJ0LCBzaWQpOwo+ICsJCQkJbGlzdF9kZWwoJnN0cmVh bS0+c3RyZWFtX2hlYWQpOwo+ICsJCQkJa2ZyZWUoc3RyZWFtKTsKPiArCQkJfQo+ICsJCQlyZXR1 cm47Cj4gKwkJfQo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGFwcGxlX2RhcnRfYXR0YWNo X2RldihzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sCj4gKwkJCQkgc3RydWN0IGRldmljZSAq ZGV2KQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsJaW50IGksIGo7Cj4gKwl1bnNpZ25lZCBsb25nIGZs YWdzOwo+ICsJc3RydWN0IGFwcGxlX2RhcnRfbWFzdGVyX2NmZyAqY2ZnID0gZGV2X2lvbW11X3By aXZfZ2V0KGRldik7Cj4gKwlzdHJ1Y3QgYXBwbGVfZGFydF9kb21haW4gKmRhcnRfZG9tYWluID0g dG9fZGFydF9kb21haW4oZG9tYWluKTsKPiArCXN0cnVjdCBhcHBsZV9kYXJ0ICpkYXJ0ID0gY2Zn LT5zdHJlYW1zWzBdLmRhcnQ7Cj4gKwo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmRhcnRfZG9tYWlu LT5sb2NrLCBmbGFncyk7Cj4gKwo+ICsJaWYgKCFkYXJ0X2RvbWFpbi0+ZGFydCkKPiArCQlkYXJ0 X2RvbWFpbi0+ZGFydCA9IGRhcnQ7Cj4gKwo+ICsJaWYgKFdBUk5fT04oZGFydC0+Zm9yY2VfYnlw YXNzICYmCj4gKwkJICAgIGRhcnRfZG9tYWluLT50eXBlICE9IElPTU1VX0RPTUFJTl9JREVOVElU WSkpIHsKPiArCQlkZXZfd2FybigKPiArCQkJZGV2LAo+ICsJCQkiSU9NTVUgbXVzdCBiZSBpbiBi eXBhc3MgbW9kZSBidXQgdHJ5aW5nIHRvIGF0dGFjaCB0byB0cmFuc2xhdGVkIGRvbWFpbi5cbiIp Owo+ICsJCXJldCA9IC1FSU5WQUw7Cj4gKwkJZ290byBvdXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0g YXBwbGVfZGFydF9maW5hbGl6ZV9kb21haW4oZG9tYWluKTsKPiArCWlmIChyZXQpCj4gKwkJZ290 byBvdXQ7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IGNmZy0+bnVtX3N0cmVhbXM7ICsraSkgewo+ ICsJCXJldCA9IGFwcGxlX2RhcnRfYXR0YWNoX3N0cmVhbSgKPiArCQkJZGFydF9kb21haW4sIGNm Zy0+c3RyZWFtc1tpXS5kYXJ0LCBjZmctPnN0cmVhbXNbaV0uc2lkKTsKPiArCQlpZiAocmV0KSB7 Cj4gKwkJCS8qIHRyeSB0byB1bmRvIHdoYXQgd2UgZGlkIGJlZm9yZSByZXR1cm5pbmcgKi8KPiAr CQkJZm9yIChqID0gMDsgaiA8IGk7ICsraikKPiArCQkJCWFwcGxlX2RhcnRfZGV0YWNoX3N0cmVh bShkYXJ0X2RvbWFpbiwKPiArCQkJCQkJCSBjZmctPnN0cmVhbXNbal0uZGFydCwKPiArCQkJCQkJ CSBjZmctPnN0cmVhbXNbal0uc2lkKTsKPiArCj4gKwkJCWdvdG8gb3V0Owo+ICsJCX0KPiArCX0K PiArCj4gKwlyZXQgPSAwOwo+ICsKPiArb3V0Ogo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm ZGFydF9kb21haW4tPmxvY2ssIGZsYWdzKTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIGFwcGxlX2RhcnRfZGV0YWNoX2RldihzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21h aW4sCj4gKwkJCQkgIHN0cnVjdCBkZXZpY2UgKmRldikKPiArewo+ICsJaW50IGk7Cj4gKwl1bnNp Z25lZCBsb25nIGZsYWdzOwo+ICsJc3RydWN0IGFwcGxlX2RhcnRfbWFzdGVyX2NmZyAqY2ZnID0g ZGV2X2lvbW11X3ByaXZfZ2V0KGRldik7Cj4gKwlzdHJ1Y3QgYXBwbGVfZGFydF9kb21haW4gKmRh cnRfZG9tYWluID0gdG9fZGFydF9kb21haW4oZG9tYWluKTsKPiArCj4gKwlzcGluX2xvY2tfaXJx c2F2ZSgmZGFydF9kb21haW4tPmxvY2ssIGZsYWdzKTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwg Y2ZnLT5udW1fc3RyZWFtczsgKytpKQo+ICsJCWFwcGxlX2RhcnRfZGV0YWNoX3N0cmVhbShkYXJ0 X2RvbWFpbiwgY2ZnLT5zdHJlYW1zW2ldLmRhcnQsCj4gKwkJCQkJIGNmZy0+c3RyZWFtc1tpXS5z aWQpOwo+ICsKPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRhcnRfZG9tYWluLT5sb2NrLCBm bGFncyk7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgaW9tbXVfZGV2aWNlICphcHBsZV9kYXJ0 X3Byb2JlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCBhcHBsZV9k YXJ0X21hc3Rlcl9jZmcgKmNmZyA9IGRldl9pb21tdV9wcml2X2dldChkZXYpOwo+ICsJaW50IGk7 Cj4gKwo+ICsJaWYgKCFjZmcpCj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7Cj4gKwo+ICsJ Zm9yIChpID0gMDsgaSA8IGNmZy0+bnVtX3N0cmVhbXM7ICsraSkgewo+ICsJCWNmZy0+c3RyZWFt c1tpXS5saW5rID0KPiArCQkJZGV2aWNlX2xpbmtfYWRkKGRldiwgY2ZnLT5zdHJlYW1zW2ldLmRh cnQtPmRldiwKPiArCQkJCQlETF9GTEFHX1BNX1JVTlRJTUUgfCBETF9GTEFHX1NUQVRFTEVTUyk7 Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuICZjZmctPnN0cmVhbXNbMF0uZGFydC0+aW9tbXU7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIGFwcGxlX2RhcnRfcmVsZWFzZV9kZXZpY2Uoc3RydWN0IGRldmlj ZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgYXBwbGVfZGFydF9tYXN0ZXJfY2ZnICpjZmcgPSBkZXZf aW9tbXVfcHJpdl9nZXQoZGV2KTsKPiArCWludCBpOwo+ICsKPiArCWlmICghY2ZnKQo+ICsJCXJl dHVybjsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5udW1fc3RyZWFtczsgKytpKQo+ICsJ CWRldmljZV9saW5rX2RlbChjZmctPnN0cmVhbXNbaV0ubGluayk7Cj4gKwo+ICsJZGV2X2lvbW11 X3ByaXZfc2V0KGRldiwgTlVMTCk7Cj4gKwlrZnJlZShjZmcpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg c3RydWN0IGlvbW11X2RvbWFpbiAqYXBwbGVfZGFydF9kb21haW5fYWxsb2ModW5zaWduZWQgaW50 IHR5cGUpCj4gK3sKPiArCXN0cnVjdCBhcHBsZV9kYXJ0X2RvbWFpbiAqZGFydF9kb21haW47Cj4g Kwo+ICsJaWYgKHR5cGUgIT0gSU9NTVVfRE9NQUlOX0RNQSAmJiB0eXBlICE9IElPTU1VX0RPTUFJ Tl9VTk1BTkFHRUQgJiYKPiArCSAgICB0eXBlICE9IElPTU1VX0RPTUFJTl9JREVOVElUWSAmJiB0 eXBlICE9IElPTU1VX0RPTUFJTl9CTE9DS0VEKQo+ICsJCXJldHVybiBOVUxMOwo+ICsKPiArCWRh cnRfZG9tYWluID0ga3phbGxvYyhzaXplb2YoKmRhcnRfZG9tYWluKSwgR0ZQX0tFUk5FTCk7Cj4g KwlpZiAoIWRhcnRfZG9tYWluKQo+ICsJCXJldHVybiBOVUxMOwo+ICsKPiArCUlOSVRfTElTVF9I RUFEKCZkYXJ0X2RvbWFpbi0+c3RyZWFtcyk7Cj4gKwlzcGluX2xvY2tfaW5pdCgmZGFydF9kb21h aW4tPmxvY2spOwo+ICsJaW9tbXVfZ2V0X2RtYV9jb29raWUoJmRhcnRfZG9tYWluLT5kb21haW4p Owo+ICsJZGFydF9kb21haW4tPnR5cGUgPSB0eXBlOwo+ICsKPiArCXJldHVybiAmZGFydF9kb21h aW4tPmRvbWFpbjsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYXBwbGVfZGFydF9kb21haW5fZnJl ZShzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4pCj4gK3sKPiArCXN0cnVjdCBhcHBsZV9kYXJ0 X2RvbWFpbiAqZGFydF9kb21haW4gPSB0b19kYXJ0X2RvbWFpbihkb21haW4pOwo+ICsKPiArCVdB Uk5fT04oIWxpc3RfZW1wdHkoJmRhcnRfZG9tYWluLT5zdHJlYW1zKSk7Cj4gKwo+ICsJa2ZyZWUo ZGFydF9kb21haW4pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGFwcGxlX2RhcnRfb2ZfeGxhdGUo c3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb2ZfcGhhbmRsZV9hcmdzICphcmdzKQo+ICt7Cj4g KwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICppb21tdV9wZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlf bm9kZShhcmdzLT5ucCk7Cj4gKwlzdHJ1Y3QgYXBwbGVfZGFydF9tYXN0ZXJfY2ZnICpjZmcgPSBk ZXZfaW9tbXVfcHJpdl9nZXQoZGV2KTsKPiArCXVuc2lnbmVkIGludCBudW1fc3RyZWFtcyA9IGNm ZyA/IGNmZy0+bnVtX3N0cmVhbXMgOiAwOwo+ICsJc3RydWN0IGFwcGxlX2RhcnRfbWFzdGVyX2Nm ZyAqY2ZnX25ldzsKPiArCXN0cnVjdCBhcHBsZV9kYXJ0ICpkYXJ0ID0gcGxhdGZvcm1fZ2V0X2Ry dmRhdGEoaW9tbXVfcGRldik7Cj4gKwo+ICsJaWYgKGFyZ3MtPmFyZ3NfY291bnQgIT0gMSkKPiAr CQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwljZmdfbmV3ID0ga3JlYWxsb2MoY2ZnLCBzdHJ1Y3Rf c2l6ZShjZmcsIHN0cmVhbXMsIG51bV9zdHJlYW1zICsgMSksCj4gKwkJCSAgIEdGUF9LRVJORUwp Owo+ICsJaWYgKCFjZmdfbmV3KQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWNmZyA9IGNm Z19uZXc7Cj4gKwlkZXZfaW9tbXVfcHJpdl9zZXQoZGV2LCBjZmcpOwo+ICsKPiArCWNmZy0+bnVt X3N0cmVhbXMgPSBudW1fc3RyZWFtczsKPiArCWNmZy0+c3RyZWFtc1tjZmctPm51bV9zdHJlYW1z XS5kYXJ0ID0gZGFydDsKPiArCWNmZy0+c3RyZWFtc1tjZmctPm51bV9zdHJlYW1zXS5zaWQgPSBh cmdzLT5hcmdzWzBdOwo+ICsJY2ZnLT5udW1fc3RyZWFtcysrOwo+ICsKPiArCXJldHVybiAwOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGlvbW11X2dyb3VwICphcHBsZV9kYXJ0X2RldmljZV9n cm91cChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArI2lmZGVmIENPTkZJR19QQ0kKPiArCXN0 cnVjdCBpb21tdV9ncm91cCAqZ3JvdXA7Cj4gKwo+ICsJaWYgKGRldl9pc19wY2koZGV2KSkKPiAr CQlncm91cCA9IHBjaV9kZXZpY2VfZ3JvdXAoZGV2KTsKPiArCWVsc2UKPiArCQlncm91cCA9IGdl bmVyaWNfZGV2aWNlX2dyb3VwKGRldik7Cj4gKwo+ICsJcmV0dXJuIGdyb3VwOwo+ICsjZWxzZQo+ ICsJcmV0dXJuIGdlbmVyaWNfZGV2aWNlX2dyb3VwKGRldik7Cj4gKyNlbmRpZgo+ICt9Cj4gKwo+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IGlvbW11X29wcyBhcHBsZV9kYXJ0X2lvbW11X29wcyA9IHsK PiArCS5kb21haW5fYWxsb2MgPSBhcHBsZV9kYXJ0X2RvbWFpbl9hbGxvYywKPiArCS5kb21haW5f ZnJlZSA9IGFwcGxlX2RhcnRfZG9tYWluX2ZyZWUsCj4gKwkuYXR0YWNoX2RldiA9IGFwcGxlX2Rh cnRfYXR0YWNoX2RldiwKPiArCS5kZXRhY2hfZGV2ID0gYXBwbGVfZGFydF9kZXRhY2hfZGV2LAo+ ICsJLm1hcCA9IGFwcGxlX2RhcnRfbWFwLAo+ICsJLnVubWFwID0gYXBwbGVfZGFydF91bm1hcCwK PiArCS5mbHVzaF9pb3RsYl9hbGwgPSBhcHBsZV9kYXJ0X2ZsdXNoX2lvdGxiX2FsbCwKPiArCS5p b3RsYl9zeW5jID0gYXBwbGVfZGFydF9pb3RsYl9zeW5jLAo+ICsJLmlvdGxiX3N5bmNfbWFwID0g YXBwbGVfZGFydF9pb3RsYl9zeW5jX21hcCwKPiArCS5pb3ZhX3RvX3BoeXMgPSBhcHBsZV9kYXJ0 X2lvdmFfdG9fcGh5cywKPiArCS5wcm9iZV9kZXZpY2UgPSBhcHBsZV9kYXJ0X3Byb2JlX2Rldmlj ZSwKPiArCS5yZWxlYXNlX2RldmljZSA9IGFwcGxlX2RhcnRfcmVsZWFzZV9kZXZpY2UsCj4gKwku ZGV2aWNlX2dyb3VwID0gYXBwbGVfZGFydF9kZXZpY2VfZ3JvdXAsCj4gKwkub2ZfeGxhdGUgPSBh cHBsZV9kYXJ0X29mX3hsYXRlLAo+ICsJLnBnc2l6ZV9iaXRtYXAgPSAtMVVMLCAvKiBSZXN0cmlj dGVkIGR1cmluZyBkYXJ0IHByb2JlICovCj4gK307Cj4gKwo+ICtzdGF0aWMgaXJxcmV0dXJuX3Qg YXBwbGVfZGFydF9pcnEoaW50IGlycSwgdm9pZCAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgYXBwbGVf ZGFydCAqZGFydCA9IGRldjsKPiArCXN0YXRpYyBERUZJTkVfUkFURUxJTUlUX1NUQVRFKHJzLCBE RUZBVUxUX1JBVEVMSU1JVF9JTlRFUlZBTCwKPiArCQkJCSAgICAgIERFRkFVTFRfUkFURUxJTUlU X0JVUlNUKTsKPiArCWNvbnN0IGNoYXIgKmZhdWx0X25hbWUgPSBOVUxMOwo+ICsJdTMyIGVycm9y ID0gcmVhZGwoZGFydC0+cmVncyArIERBUlRfRVJST1IpOwo+ICsJdTMyIGVycm9yX2NvZGUgPSBG SUVMRF9HRVQoREFSVF9FUlJPUl9DT0RFLCBlcnJvcik7Cj4gKwl1MzIgYWRkcl9sbyA9IHJlYWRs KGRhcnQtPnJlZ3MgKyBEQVJUX0VSUk9SX0FERFJfTE8pOwo+ICsJdTMyIGFkZHJfaGkgPSByZWFk bChkYXJ0LT5yZWdzICsgREFSVF9FUlJPUl9BRERSX0hJKTsKPiArCXU2NCBhZGRyID0gYWRkcl9s byB8ICgoKHU2NClhZGRyX2hpKSA8PCAzMik7Cj4gKwl1OCBzdHJlYW1faWR4ID0gRklFTERfR0VU KERBUlRfRVJST1JfU1RSRUFNLCBlcnJvcik7Cj4gKwo+ICsJaWYgKCEoZXJyb3IgJiBEQVJUX0VS Uk9SX0ZMQUcpKQo+ICsJCXJldHVybiBJUlFfTk9ORTsKPiArCj4gKwlpZiAoZXJyb3JfY29kZSAm IERBUlRfRVJST1JfUkVBRF9GQVVMVCkKPiArCQlmYXVsdF9uYW1lID0gIlJFQUQgRkFVTFQiOwo+ ICsJZWxzZSBpZiAoZXJyb3JfY29kZSAmIERBUlRfRVJST1JfV1JJVEVfRkFVTFQpCj4gKwkJZmF1 bHRfbmFtZSA9ICJXUklURSBGQVVMVCI7Cj4gKwllbHNlIGlmIChlcnJvcl9jb2RlICYgREFSVF9F UlJPUl9OT19QVEUpCj4gKwkJZmF1bHRfbmFtZSA9ICJOTyBQVEUgRk9SIElPVkEiOwo+ICsJZWxz ZSBpZiAoZXJyb3JfY29kZSAmIERBUlRfRVJST1JfTk9fUE1EKQo+ICsJCWZhdWx0X25hbWUgPSAi Tk8gUE1EIEZPUiBJT1ZBIjsKPiArCWVsc2UgaWYgKGVycm9yX2NvZGUgJiBEQVJUX0VSUk9SX05P X1RUQlIpCj4gKwkJZmF1bHRfbmFtZSA9ICJOTyBUVEJSIEZPUiBJT1ZBIjsKPiArCj4gKwlpZiAo V0FSTl9PTihmYXVsdF9uYW1lID09IE5VTEwpKQo+ICsJCWZhdWx0X25hbWUgPSAidW5rbm93biI7 Cj4gKwo+ICsJaWYgKF9fcmF0ZWxpbWl0KCZycykpIHsKPiArCQlkZXZfZXJyKGRhcnQtPmRldiwK PiArCQkJInRyYW5zbGF0aW9uIGZhdWx0OiBzdGF0dXM6MHgleCBzdHJlYW06JWQgY29kZToweCV4 ICglcykgYXQgMHglbGx4IiwKPiArCQkJZXJyb3IsIHN0cmVhbV9pZHgsIGVycm9yX2NvZGUsIGZh dWx0X25hbWUsIGFkZHIpOwo+ICsJfQo+ICsKPiArCXdyaXRlbChlcnJvciwgZGFydC0+cmVncyAr IERBUlRfRVJST1IpOwo+ICsJcmV0dXJuIElSUV9IQU5ETEVEOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IGFwcGxlX2RhcnRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ ICsJaW50IHJldDsKPiArCXUzMiBkYXJ0X3BhcmFtc1syXTsKPiArCXN0cnVjdCByZXNvdXJjZSAq cmVzOwo+ICsJc3RydWN0IGFwcGxlX2RhcnQgKmRhcnQ7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYg PSAmcGRldi0+ZGV2Owo+ICsKPiArCWRhcnQgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRh cnQpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghZGFydCkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiAr Cj4gKwlkYXJ0LT5kZXYgPSBkZXY7Cj4gKwlzcGluX2xvY2tfaW5pdCgmZGFydC0+bG9jayk7Cj4g Kwo+ICsJaWYgKHBkZXYtPm51bV9yZXNvdXJjZXMgPCAxKQo+ICsJCXJldHVybiAtRU5PREVWOwo+ ICsKPiArCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwg MCk7Cj4gKwlpZiAocmVzb3VyY2Vfc2l6ZShyZXMpIDwgMHg0MDAwKSB7Cj4gKwkJZGV2X2Vycihk ZXYsICJNTUlPIHJlZ2lvbiB0b28gc21hbGwgKCVwcilcbiIsIHJlcyk7Cj4gKwkJcmV0dXJuIC1F SU5WQUw7Cj4gKwl9Cj4gKwo+ICsJZGFydC0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShk ZXYsIHJlcyk7Cj4gKwlpZiAoSVNfRVJSKGRhcnQtPnJlZ3MpKQo+ICsJCXJldHVybiBQVFJfRVJS KGRhcnQtPnJlZ3MpOwo+ICsKPiArCXJldCA9IGRldm1fY2xrX2J1bGtfZ2V0X2FsbChkZXYsICZk YXJ0LT5jbGtzKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwlkYXJ0LT5u dW1fY2xrcyA9IHJldDsKPiArCj4gKwlyZXQgPSBjbGtfYnVsa19wcmVwYXJlX2VuYWJsZShkYXJ0 LT5udW1fY2xrcywgZGFydC0+Y2xrcyk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4g Kwo+ICsJcmV0ID0gYXBwbGVfZGFydF9od19yZXNldChkYXJ0KTsKPiArCWlmIChyZXQpCj4gKwkJ cmV0dXJuIHJldDsKPiArCj4gKwlkYXJ0X3BhcmFtc1swXSA9IHJlYWRsKGRhcnQtPnJlZ3MgKyBE QVJUX1BBUkFNUzEpOwo+ICsJZGFydF9wYXJhbXNbMV0gPSByZWFkbChkYXJ0LT5yZWdzICsgREFS VF9QQVJBTVMyKTsKPiArCWRhcnQtPnBnc2l6ZSA9IDEgPDwgRklFTERfR0VUKERBUlRfUEFSQU1T X1BBR0VfU0hJRlQsIGRhcnRfcGFyYW1zWzBdKTsKPiArCWRhcnQtPnN1cHBvcnRzX2J5cGFzcyA9 IGRhcnRfcGFyYW1zWzFdICYgREFSVF9QQVJBTVNfQllQQVNTX1NVUFBPUlQ7Cj4gKwlkYXJ0LT5m b3JjZV9ieXBhc3MgPSBkYXJ0LT5wZ3NpemUgPiBQQUdFX1NJWkU7Cj4gKwo+ICsJLy8gSEFDSzog dGhlc2Ugc2hvdWxkbid0IGJlIGhhcmRjb2RlZCBoZXJlIGJ1dCBjb21lIGZyb20gdGhlIGRldmlj ZSB0cmVlCj4gKwlkYXJ0LT5mb3JjZV9ieXBhc3Nfb2Zmc2V0ID0gMHgwODAwMDAwMDAwOwo+ICsJ ZGFydC0+Zm9yY2VfYnlwYXNzX2xlbiA9IDB4MDEwMDAwMDAwMDsKPiArCj4gKwlkYXJ0LT5pcnEg PSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwo+ICsJaWYgKGRhcnQtPmlycSA8IDApCj4gKwkJ cmV0dXJuIC1FTk9ERVY7Cj4gKwo+ICsJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycShkYXJ0LT5kZXYs IGRhcnQtPmlycSwgYXBwbGVfZGFydF9pcnEsCj4gKwkJCSAgICAgICBJUlFGX1NIQVJFRCwgImFw cGxlLWRhcnQgZmF1bHQgaGFuZGxlciIsIGRhcnQpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4g cmV0Owo+ICsKPiArCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRhcnQpOwo+ICsKPiArCXJl dCA9IGlvbW11X2RldmljZV9zeXNmc19hZGQoJmRhcnQtPmlvbW11LCBkZXYsIE5VTEwsICJhcHBs ZS1kYXJ0LiVzIiwKPiArCQkJCSAgICAgZGV2X25hbWUoJnBkZXYtPmRldikpOwo+ICsJaWYgKHJl dCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCXJldCA9IGlvbW11X2RldmljZV9yZWdpc3Rlcigm ZGFydC0+aW9tbXUsICZhcHBsZV9kYXJ0X2lvbW11X29wcywgZGV2KTsKPiArCWlmIChyZXQpCj4g KwkJcmV0dXJuIHJldDsKPiArCj4gKwlpZiAoZGV2LT5idXMtPmlvbW11X29wcyAhPSAmYXBwbGVf ZGFydF9pb21tdV9vcHMpIHsKPiArCQlyZXQgPSBidXNfc2V0X2lvbW11KGRldi0+YnVzLCAmYXBw bGVfZGFydF9pb21tdV9vcHMpOwo+ICsJCWlmIChyZXQpCj4gKwkJCXJldHVybiByZXQ7Cj4gKwl9 Cj4gKyNpZmRlZiBDT05GSUdfUENJCj4gKwlpZiAoZGV2LT5idXMtPmlvbW11X29wcyAhPSBwY2lf YnVzX3R5cGUuaW9tbXVfb3BzKSB7Cj4gKwkJcmV0ID0gYnVzX3NldF9pb21tdSgmcGNpX2J1c190 eXBlLCAmYXBwbGVfZGFydF9pb21tdV9vcHMpOwo+ICsJCWlmIChyZXQpCj4gKwkJCXJldHVybiBy ZXQ7Cj4gKwl9Cj4gKyNlbmRpZgo+ICsKPiArCWRldl9pbmZvKAo+ICsJCSZwZGV2LT5kZXYsCj4g KwkJIkRBUlQgW3BhZ2VzaXplICV4LCBieXBhc3Mgc3VwcG9ydDogJWQsIGJ5cGFzcyBmb3JjZWQ6 ICVkXSBpbml0aWFsaXplZFxuIiwKPiArCQlkYXJ0LT5wZ3NpemUsIGRhcnQtPnN1cHBvcnRzX2J5 cGFzcywgZGFydC0+Zm9yY2VfYnlwYXNzKTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IGFwcGxlX2RhcnRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4g K3sKPiArCXN0cnVjdCBhcHBsZV9kYXJ0ICpkYXJ0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRl dik7Cj4gKwo+ICsJZGV2bV9mcmVlX2lycShkYXJ0LT5kZXYsIGRhcnQtPmlycSwgZGFydCk7Cj4g Kwo+ICsJaW9tbXVfZGV2aWNlX3VucmVnaXN0ZXIoJmRhcnQtPmlvbW11KTsKPiArCWlvbW11X2Rl dmljZV9zeXNmc19yZW1vdmUoJmRhcnQtPmlvbW11KTsKPiArCj4gKwljbGtfYnVsa19kaXNhYmxl KGRhcnQtPm51bV9jbGtzLCBkYXJ0LT5jbGtzKTsKPiArCWNsa19idWxrX3VucHJlcGFyZShkYXJ0 LT5udW1fY2xrcywgZGFydC0+Y2xrcyk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIGFwcGxlX2RhcnRfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl dikKPiArewo+ICsJYXBwbGVfZGFydF9yZW1vdmUocGRldik7Cj4gK30KPiArCj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGFwcGxlX2RhcnRfb2ZfbWF0Y2hbXSA9IHsKPiArCXsg LmNvbXBhdGlibGUgPSAiYXBwbGUsdDgxMDMtZGFydCIsIC5kYXRhID0gTlVMTCB9LAo+ICsJe30s Cj4gK307Cj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGFwcGxlX2RhcnRfb2ZfbWF0Y2gpOwo+ ICsKPiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXBwbGVfZGFydF9kcml2ZXIgPSB7 Cj4gKwkuZHJpdmVyCT0gewo+ICsJCS5uYW1lCQkJPSAiYXBwbGUtZGFydCIsCj4gKwkJLm9mX21h dGNoX3RhYmxlCQk9IGFwcGxlX2RhcnRfb2ZfbWF0Y2gsCj4gKwl9LAo+ICsJLnByb2JlCT0gYXBw bGVfZGFydF9wcm9iZSwKPiArCS5yZW1vdmUJPSBhcHBsZV9kYXJ0X3JlbW92ZSwKPiArCS5zaHV0 ZG93biA9IGFwcGxlX2RhcnRfc2h1dGRvd24sCj4gK307Cj4gK21vZHVsZV9wbGF0Zm9ybV9kcml2 ZXIoYXBwbGVfZGFydF9kcml2ZXIpOwo+ICsKPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJJT01NVSBB UEkgZm9yIEFwcGxlJ3MgREFSVCIpOwo+ICtNT0RVTEVfQVVUSE9SKCJTdmVuIFBldGVyIDxzdmVu QHN2ZW5wZXRlci5kZXY+Iik7Cj4gK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKClJlZ2FyZHMs ClJvdXZlbgoKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmlu ZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9s aW51eC1hcm0ta2VybmVsCg==