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 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 smtp.lore.kernel.org (Postfix) with ESMTPS id AB3EFC982DA for ; Thu, 17 Sep 2026 18:38:28 +0000 (UTC) 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: Message-ID:Date:Cc:To:From:Subject:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=W25eQFMsR+mkN18VQWgf02/62ANPzp2k3+kXbvpPyJs=; b=H1tjiT939204rd IoGTHiPMLa88OdizBMF7ESq3qGVabjwFJ1Kql29Ym40zgeqQ6zjmcZQk/cMNn/Y3ZnOEVILLdCcLi V2TQ9aYMNRN+O4iPnmWITk2/XIHwwqSK2XtzXzWvhuoZwAyY2xYmjLJdj1qjXBME4aM2l1zp9PlSt zNQIVNOjnNHORWgvfuSvu/0YQnHmyAwPW7zbCDtG6Ghq1UTEgLdiqMYyhDsO+nHBV1ZVT8qwJWTfF weuZOhQiHLxKDqSoWuHdr5DFTABCOGeEUFyYVK5jIgHsXEYnHpAjEml+a3Ue+7hf6bJKoX+/Ou+uB AHD3O+RO3WIiAFTgW3gw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1x7H08-0000000CFPJ-1Qx8; Thu, 17 Sep 2026 18:38:28 +0000 Received: from sea.source.kernel.org ([2600:3c0a:e001:78e:0:1991:8:25]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1x7H00-0000000CFIl-1Lzv; Thu, 17 Sep 2026 18:38:20 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id 0ACB740611; Thu, 17 Sep 2026 18:38:20 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 75C0D1F00893; Thu, 17 Sep 2026 18:38:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1789670299; bh=vFJ83dMavxspRJfLpFnxL1Ynn4WHazaHxF4+mLoUoh0=; h=Subject:From:To:Cc:Date:In-Reply-To:References; b=TtT0qAncIsE0NdFY499mMj//R50cs4AdsXWOfmeM8g2EHmgl+yPNKVetgo5+4znqp Pked6mWyZWn9a6UCikf4Nlz2Z3y3OV2E2YwcT/jGCyJtV33fCjDZA45dxLWDN92I+Q hw0ReQFMJbDTzzO+CX/whVzGNiMKR3yVuRwfngI4eji7WkthrkBUyzvPOAWgNMl2ou oeaArbMA+ThOZN1dBM6z1RUUmOr11rLEUQSUQ3PKAR1+xHgT+5Q3lRBC8ZYgtk9Kup y6IO1+EkVloopQfNBvRuU5//iGNEZgNrV7m30+PqaBjoit0gJ2KdglSkLG07BpbLrA sJDl7z+xPG0iQ== Subject: Re: [PATCH net-next v6 07/11] net: pcs: xpcs: add Rockchip RK3568 platform glue driver From: netdev-bot+sashiko@kernel.org To: coiaprant@gmail.com Cc: andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, heiko@sntech.de, vkoul@kernel.org, maxime.chevallier@bootlin.com, mcoquelin.stm32@gmail.com, alexandre.torgue@foss.st.com, prabhakar.mahadev-lad.rj@bp.renesas.com, romain.gantois@bootlin.com, hkallweit1@gmail.com, neil.armstrong@linaro.org, linux@armlinux.org.uk, shawn.lin@rock-chips.com, david@ixit.cz, netdev@vger.kernel.org, linux-rockchip@lists.infradead.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, linux-stm32@st-md-mailman.stormreply.com, linux-renesas-soc@vger.kernel.org Date: Thu, 17 Sep 2026 18:38:18 +0000 Message-ID: <178967029805.22033.5645939036963586824@kernel.org> In-Reply-To: <20260915123802.1561724-8-coiaprant@gmail.com> References: <20260915123802.1561724-8-coiaprant@gmail.com> X-sashiko-severity: High MIME-Version: 1.0 X-BeenThere: linux-phy@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux Phy Mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-phy" Errors-To: linux-phy-bounces+linux-phy=archiver.kernel.org@lists.infradead.org VGhhbmsgeW91IGZvciB5b3VyIGNvbnRyaWJ1dGlvbiEgU2FzaGlrbyBBSSByZXZpZXcgZm91bmQg MTAgcG90ZW50aWFsCmlzc3VlKHMpIHRvIGNvbnNpZGVyOgoKQ3JpdGljYWw6IDAgwrcgSGlnaDog MiDCtyBNZWRpdW06IDMgwrcgTG93OiA1CgotIFtIaWdoXSB4cGNzX3JrX2NyZWF0ZSgpIGNyZWF0 ZXMgYW4gaW1wbGljaXRseSBtYW5hZ2VkIGRldmljZSBsaW5rCiAgKGRldmljZV9saW5rX2FkZCgp IHdpdGggb25seSBETF9GTEFHX0FVVE9SRU1PVkVfQ09OU1VNRVIsIHNv4oCmCi0gW0hpZ2hdIHhw Y3NfcmtfY3JlYXRlKCkgcmVhZHMgYW5vdGhlciBkZXZpY2UncyBkcml2ZXItcHJpdmF0ZSBkYXRh IHdpdGgKICBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSgpIHdpdGhvdXQgaG9sZGluZyBkZXZpY2VfbG9j aygmcGRldi0+ZGV2KSBhbmTigKYKLSBbTWVkaXVtXSBQQ1NfWFBDU19ST0NLQ0hJUCBkb2VzICdz ZWxlY3QgUE1fR0VORVJJQ19ET01BSU5TJyB3aXRob3V0CiAgJ2RlcGVuZHMgb24gUE0nLgotIFtN ZWRpdW1dIFJlYWQvd3JpdGUgTU1EIGFzeW1tZXRyeSBmb3IgdGhlIHZlbmRvciByZWdpc3RlcnM6 CiAgeHBjc19ya19tZGlvX3JlYWRfcmVtYXBwaW5nKCkgbWFwcyBldmVyeSBNRElPX01NRF9WRU5E MiByZWFkIGJ5IHBvcnTigKYKLSBbTWVkaXVtXSB4cGNzX2dldF9zdGF0ZV9jMzdfc2dtaWkoKSBu b3cgdW5jb25kaXRpb25hbGx5IGNsZWFycwogIERXX1ZSX01JSV9BTl9JTlRSX1NUUyBhbmQgd3Jp dGVzIEJNQ1JfQU5SRVNUQVJUIGZvciBldmVyeSBsYXRjaGVkIEFOLeKApgotIFtMb3ddIHhwY3Nf cmtfY3JlYXRlKCkgaXMgZXhwb3J0ZWQgd2l0aCBubyBpbi10cmVlIGNhbGxlciBhdCB0aGlzCiAg Y29tbWl0IChkcml2ZXJzL25ldC9wY3MvcGNzLXhwY3MtcmsuYyksIGFuZCBpbmNsdWRlL2xpbnV4 L3Bjcy9wY3Mt4oCmCi0gW0xvd10gVGhlIGJpbmRpbmcgbWFya3MgcGh5cy9waHktbmFtZXMgYXMg cmVxdWlyZWQgYW5kIHRoZSBkcml2ZXIKICB0cmVhdHMgYSBtaXNzaW5nICJzZXJkZXMiIFBIWSBh cyBhIGZhdGFsIHByb2JlIGVycm9y4oCmCi0gW0xvd10gVGhlIFJLMzU2OCBiaW5kaW5nIGRlc2Ny aXB0aW9uIGFkdmVydGlzZXMgUVNHTUlJIHdoaWxlIHRoZQogIGdlbmVyaWMgU3lub3BzeXMgWFBD UyBjb21wYXRpYmlsaXR5IHRhYmxlIGhhcyBub+KApgotIFtMb3ddIFdoZW4gTU1EIHJlbWFwcGlu ZyBmYWlscyAoYW55IE1NRCBvdGhlciB0aGFuIE1ESU9fTU1EX1BNQVBNRCBvcgogIE1ESU9fTU1E X1ZFTkQyLCBmb3Igd2hpY2ggdGhlIHJlbWFwcGVycyByZXR1cm4gLUVOWElPKSwgdGhlIE1ESU8g YnVz4oCmCi0gW0xvd10gbmV0OiBwY3M6IGludGVnZXIgdW5kZXJmbG93IGluIEVFRSBtdWx0aXBs aWVyIGNhbGN1bGF0aW9uCgotLQoKbmV0OiBwY3M6IHhwY3M6IGFkZCBSb2NrY2hpcCBSSzM1Njgg cGxhdGZvcm0gZ2x1ZSBkcml2ZXIKClRoaXMgYWRkcyBhIFJvY2tjaGlwIFJLMzU2OCBnbHVlIGRy aXZlciB0aGF0IGV4cG9zZXMgdGhlIFNvQydzIEFQQjMtbWFwcGVkCkRlc2lnbldhcmUgWFBDUyBh cyBhIHZpcnR1YWwgTURJTyBidXMgZm9yIHRoZSBnZW5lcmljIHBjcy14cGNzIGNvcmUsIHdpdGgK cGVyLXBvcnQgTU1EIHJlbWFwcGluZyBmb3IgdGhlIGZvdXIgTUlJIHBvcnRzLiAgSXQgYWxzbyBz cGxpdHMgdGhlIGdlbmVyaWMKcGxhdGZvcm0gZ2x1ZSBvdXQgb2YgdGhlIHBjc194cGNzIGNvbXBv c2l0ZSBvYmplY3QgYmVoaW5kIGEgbmV3ClBDU19YUENTX1BMQVRGT1JNIHN5bWJvbC4KCkxpbms6 IGh0dHBzOi8vZGwucmFkeGEuY29tL3JvY2szL2RvY3MvaHcvZGF0YXNoZWV0L1JvY2tjaGlwJTIw UkszNTY4JTIwVFJNJTIwUGFydDElMjBWMS4xLTIwMjEwMzAxLnBkZiAoUGFnZSA1OSwgQ1JVX0NM S1NFTF9DT04yOSkKTGluazogaHR0cHM6Ly9kbC5yYWR4YS5jb20vcm9jazMvZG9jcy9ody9kYXRh c2hlZXQvUm9ja2NoaXAlMjBSSzM1NjglMjBUUk0lMjBQYXJ0MiUyMFYxLjEtMjAyMTAzMDEucGRm IChQYWdlIDIwNzgpCgpBIGZldyBxdWVzdGlvbnMgYmVsb3cuCgo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL25ldC9wY3MvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3Bjcy9LY29uZmlnCj4gaW5kZXggZTQx N2ZkNjZmNjYwYS4uM2RiOWIzNDNhYzBjNyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL25ldC9wY3Mv S2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMvbmV0L3Bjcy9LY29uZmlnCj4gQEAgLTEyLDYgKzEyLDMx IEBAIGNvbmZpZyBQQ1NfWFBDUwo+ICAJICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhIGRyaXZlciBh bmQgaGVscGVyIGZ1bmN0aW9ucyBmb3IgU3lub3BzeXMKPiAgCSAgRGVzaWduV2FyZSBYUENTIGNv bnRyb2xsZXJzLgo+ICAKPiAraWYgUENTX1hQQ1MKPiArCj4gK2NvbmZpZyBQQ1NfWFBDU19QTEFU Rk9STQo+ICsJdHJpc3RhdGUgIkdlbmVyaWMgWFBDUyBjb250cm9sbGVyIHN1cHBvcnQiCj4gKwlk ZWZhdWx0IFBDU19YUENTCj4gKwloZWxwCj4gKwkgIEdlbmVyaWMgRFdYUENTIGRyaXZlciBmb3Ig cGxhdGZvcm1zIHRoYXQgZG9uJ3QgcmVxdWlyZSBhbnkKPiArCSAgcGxhdGZvcm0gc3BlY2lmaWMg Y29kZSB0byBmdW5jdGlvbiBvciBpcyB1c2luZyBwbGF0Zm9ybQo+ICsJICBkYXRhIGZvciBzZXR1 cC4KPiArCj4gKwkgIElmIHlvdSBoYXZlIGEgY29udHJvbGxlciB3aXRoIHRoaXMgaW50ZXJmYWNl LCBzYXkgWSBvciBNIGhlcmUuCj4gKwo+ICtjb25maWcgUENTX1hQQ1NfUk9DS0NISVAKPiArCXRy aXN0YXRlICJSb2NrY2hpcCBYUENTIGNvbnRyb2xsZXIgc3VwcG9ydCIKPiArCWRlZmF1bHQgQVJD SF9ST0NLQ0hJUAo+ICsJZGVwZW5kcyBvbiBPRiAmJiAoQVJDSF9ST0NLQ0hJUCB8fCBDT01QSUxF X1RFU1QpCj4gKwlzZWxlY3QgR0VORVJJQ19QSFkKPiArCXNlbGVjdCBQTV9HRU5FUklDX0RPTUFJ TlMKCltTZXZlcml0eTogTWVkaXVtXQpTaG91bGQgUENTX1hQQ1NfUk9DS0NISVAgYWxzbyBjYXJy eSAiZGVwZW5kcyBvbiBQTSI/CgpQTV9HRU5FUklDX0RPTUFJTlMgaW4ga2VybmVsL3Bvd2VyL0tj b25maWcgaXM6CgogIGNvbmZpZyBQTV9HRU5FUklDX0RPTUFJTlMKCWJvb2wKCWRlcGVuZHMgb24g UE0KClNpbmNlIHNlbGVjdCBkb2VzIG5vdCBwcm9wYWdhdGUgZGVwZW5kZW5jaWVzLCBkb2VzIGEg Q09NUElMRV9URVNUIG9yCnJhbmRjb25maWcgYnVpbGQgd2l0aCBDT05GSUdfUE09biBmb3JjZSBQ TV9HRU5FUklDX0RPTUFJTlMgb24gd2l0aCB1bm1ldApkaXJlY3QgZGVwZW5kZW5jaWVzLCBpLmUu IHRoZSBzeW1fd2Fybl91bm1ldF9kZXAoKSB3YXJuaW5nPwoKVGhlIHNhbWUgbWlzc2luZyBkZXBl bmRlbmN5IGxvb2tzIGZ1bmN0aW9uYWwgYXMgd2VsbC4gIFRoZSBBUEIzL0NTUiBjbG9jawppcyBv bmx5IGV2ZXIgcHJlcGFyZWQgaW4gdGhlIHJ1bnRpbWUgcmVzdW1lIGNhbGxiYWNrOgoKICBzdGF0 aWMgaW50IHhwY3NfcmtfcG1fcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogIHsK CXN0cnVjdCBkd194cGNzX3JrICpweHBjcyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwoKCXJldHVy biBjbGtfcHJlcGFyZV9lbmFibGUocHhwY3MtPmNzcl9jbGspOwogIH0KCndoaWNoIGlzIHJlYWNo YWJsZSBvbmx5IHRocm91Z2ggLnBtID0gcG1fcHRyKCZ4cGNzX3JrX3BtX29wcyksIGFuZCBwbV9w dHIoKQppcyBOVUxMIHdoZW4gQ09ORklHX1BNPW4uICBJbiB0aGF0IGNvbmZpZ3VyYXRpb24KcG1f cnVudGltZV9yZXN1bWVfYW5kX2dldCgpIGluIHhwY3NfcmtfcmVhZF9yZWcoKS94cGNzX3JrX3dy aXRlX3JlZygpCnJldHVybnMgMCB3aXRob3V0IGludm9raW5nIGFueSBjYWxsYmFjaywgc28gZG9l cyBldmVyeSByZWFkbCgpL3dyaXRlbCgpIG9uCnJlZ19iYXNlIHRoZW4gcnVuIHdpdGggdGhlIENT UiBjbG9jayBnYXRlZD8gIFRoYXQgaXMgdGhlIGFib3J0IGNhc2UgdGhlCnByb2JlIGNvbW1lbnQg d2FybnMgYWJvdXQuCgpXb3VsZCAiZGVwZW5kcyBvbiBQTSIgKG9yICJkZXBlbmRzIG9uIFBNX0dF TkVSSUNfRE9NQUlOUyIpIGluc3RlYWQgb2YKInNlbGVjdCBQTV9HRU5FUklDX0RPTUFJTlMiIGJl IHRoZSByaWdodCBleHByZXNzaW9uIGhlcmU/Cgo+ICsJaGVscAo+ICsJICBTdXBwb3J0IGZvciBY UENTIGNvbnRyb2xsZXIgb24gUm9ja2NoaXAgUkszNTZ4IFNvQy4KPiArCj4gKwkgIElmIHlvdSBo YXZlIGEgUm9ja2NoaXAgU29DIHdpdGggdGhpcyBpbnRlcmZhY2UsIHNheSBZIG9yIE0gaGVyZS4K PiArCj4gK2VuZGlmICMgUENTX1hQQ1MKPiArCj4gIGNvbmZpZyBQQ1NfTFlOWAo+ICAJdHJpc3Rh dGUKPiAgCWhlbHAKClsgLi4uIF0KCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Bjcy9wY3Mt eHBjcy1yay5jIGIvZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmMKPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMDAuLmQ1ZTBmMjJjOTczYzIKPiAtLS0gL2Rldi9u dWxsCj4gKysrIGIvZHJpdmVycy9uZXQvcGNzL3Bjcy14cGNzLXJrLmMKClsgLi4uIF0KCj4gKyNk ZWZpbmUgUk9DS0NISVBfTU1EX01JSTEJMgo+ICsjZGVmaW5lIFJPQ0tDSElQX01NRF9NSUkyCTMK PiArI2RlZmluZSBST0NLQ0hJUF9NTURfTUlJMwk0Cj4gKyNkZWZpbmUgUk9DS0NISVBfTU1EX1BN QVBNRAk2Cj4gKyNkZWZpbmUgUk9DS0NISVBfTU1EX01JSQk3CgpbIC4uLiBdCgo+ICtzdGF0aWMg aW50IHhwY3NfcmtfbWRpb19yZWFkX3JlbWFwcGluZyhpbnQgYWRkciwgaW50IGRldiwgaW50IHJl ZykKPiArewo+ICsJc3dpdGNoIChkZXYpIHsKPiArCWNhc2UgTURJT19NTURfUE1BUE1EOgo+ICsJ CXJldHVybiBST0NLQ0hJUF9NTURfUE1BUE1EOwo+ICsJY2FzZSBNRElPX01NRF9WRU5EMjoKPiAr CQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJcmV0dXJuIC1FTlhJTzsKPiArCX0KPiArCj4gKwkv Kgo+ICsJICogUmVhZHMgYXJlIHJlZGlyZWN0ZWQgYnkgaGFyZHdhcmUgdG8gdGhlIHBvcnQncyBy ZWFkLW9ubHkgbWlycm9yOwo+ICsJICogb25seSB3cml0ZXMgaGF2ZSB0byBiZSB0YXJnZXRlZCBh dCBNSUkgKHNlZSB0aGUgd3JpdGUgcGF0aCkuCj4gKwkgKi8KPiArCXN3aXRjaCAoYWRkcikgewo+ ICsJY2FzZSAwOgo+ICsJCXJldHVybiBST0NLQ0hJUF9NTURfTUlJOwo+ICsJY2FzZSAxOgo+ICsJ CXJldHVybiBST0NLQ0hJUF9NTURfTUlJMTsKPiArCWNhc2UgMjoKPiArCQlyZXR1cm4gUk9DS0NI SVBfTU1EX01JSTI7Cj4gKwljYXNlIDM6Cj4gKwkJcmV0dXJuIFJPQ0tDSElQX01NRF9NSUkzOwo+ ICsJZGVmYXVsdDoKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCX0KPiArfQo+ICsKPiArc3RhdGlj IGludCB4cGNzX3JrX21kaW9fd3JpdGVfcmVtYXBwaW5nKGludCBhZGRyLCBpbnQgZGV2LCBpbnQg cmVnKQo+ICt7Cj4gKwlzd2l0Y2ggKGRldikgewo+ICsJY2FzZSBNRElPX01NRF9QTUFQTUQ6Cj4g KwkJcmV0dXJuIFJPQ0tDSElQX01NRF9QTUFQTUQ7Cj4gKwljYXNlIE1ESU9fTU1EX1ZFTkQyOgo+ ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiArCQlyZXR1cm4gLUVOWElPOwo+ICsJfQo+ICsKPiAr CS8qCj4gKwkgKiBUaGVzZSByZWdpc3RlcnMgcGh5c2ljYWxseSBsaXZlIG9ubHkgaW4gTUlJICh0 aGUgbWFuYWdlbWVudCBwb3J0KS4KPiArCSAqIFBvcnRzIDEtMyBleHBvc2UgcmVhZC1vbmx5IG1p cnJvcnMgb2YgdGhlc2UgYml0cywgc28gd3JpdGVzIG11c3QKPiArCSAqIGFsd2F5cyB0YXJnZXQg TUlJOyB0aGUgcmVhZCBwYXRoIHJlbWFwcyBwZXIgYWRkcmVzcyBhbmQgdGhlCj4gKwkgKiBoYXJk d2FyZSByZWRpcmVjdHMgdG8gdGhlIHBvcnQncyBtaXJyb3IuCj4gKwkgKi8KPiArCXN3aXRjaCAo cmVnKSB7Cj4gKwljYXNlIERXX1ZSX01JSV9BTl9DVFJMOgo+ICsJY2FzZSBEV19WUl9NSUlfQU5f SU5UUl9TVFM6Cj4gKwljYXNlIERXX1ZSX01JSV9FRUVfTUNUUkwwOgo+ICsJY2FzZSBEV19WUl9N SUlfRUVFX01DVFJMMToKPiArCWNhc2UgRFdfVlJfTUlJX0RJR19DVFJMMjoKPiArCQlyZXR1cm4g Uk9DS0NISVBfTU1EX01JSTsKCltTZXZlcml0eTogTWVkaXVtXQpSZWFkcyBvZiBNRElPX01NRF9W RU5EMiBhcmUgcmVtYXBwZWQgcGVyIHBvcnQgYWRkcmVzcyAoTU1EIDcvMi8zLzQpLCB3aGlsZQp3 cml0ZXMgb2YgdGhlc2UgZml2ZSByZWdpc3RlcnMgYWx3YXlzIGdvIHRvIE1NRCA3LiAgSG93IGRv ZXMgdGhhdCBpbnRlcmFjdAp3aXRoIHRoZSByZWFkLW1vZGlmeS13cml0ZSBzZXF1ZW5jZXMgdGhl IGNvcmUgcGVyZm9ybXMgb24gZXhhY3RseSB0aGVzZQpyZWdpc3RlcnM/CgpGb3IgYSBQQ1Mgb24g cG9ydCAxLCB4cGNzX2RvX2NvbmZpZygpIGRvZXM6CgogIHhwY3NfbW9kaWZ5KHhwY3MsIE1ESU9f TU1EX1ZFTkQyLCBEV19WUl9NSUlfQU5fQ1RSTCwgbWFzaywgdmFsKTsKCndoaWNoIHJlYWRzIE1N RCAyIGFuZCB3cml0ZXMgdGhlIGNvbXB1dGVkIHZhbHVlIGludG8gTU1EIDcuICBJcyB0aGUgdmFs dWUKd3JpdHRlbiBkZXJpdmVkIGZyb20gdGhlIHJlZ2lzdGVyIHRoYXQgaXMgYWN0dWFsbHkgYmVp bmcgbW9kaWZpZWQsIGFuZCBjYW4KdGhlIG1kaW9fbG9jayBtYWtlIHRoYXQgcGFpciBhdG9taWMg d2hlbiB0aGUgdHdvIGhhbHZlcyBsYW5kIGluIGRpZmZlcmVudApwaHlzaWNhbCBibG9ja3M/CgpU d28gZnVydGhlciBjYXNlcyBsb29rIHJlbGF0ZWQ6CgogIC0gRFdfVlJfTUlJX0FOX0lOVFJfU1RT IGlzIHdyaXRlLXRvLWNsZWFyIGFuZCBpcyBjbGVhcmVkIGJ5CiAgICB4cGNzX2dldF9zdGF0ZV9j Mzdfc2dtaWkoKSBhbmQgYnkgdGhlIEFOIGhhbmRsaW5nIHBhdGhzLiAgV2l0aCBldmVyeQogICAg cG9ydCBjbGVhcmluZyBNTUQgNywgY2FuIG9uZSBwb3J0IGNvbnN1bWUgYW5vdGhlciBwb3J0J3Mg bGF0Y2hlZAogICAgQU4tY29tcGxldGUgaW5kaWNhdGlvbj8KCiAgLSB4cGNzX2NvbmZpZ19lZWUo KSBjbGVhcnMgRFdfVlJfTUlJX0VFRV9NQ1RSTDAvMSBvbiBkaXNhYmxlLiAgV2l0aCB0d28KICAg IHBvcnRzIHJvdXRlZCB0byBkaWZmZXJlbnQgR01BQ3MsIGRvZXMgZGlzYWJsaW5nIEVFRSBvbiBv bmUgcG9ydCBjbGVhcgogICAgdGhlIExQSSBjb250cm9scyBvZiB0aGUgb3RoZXI/CgpJZiB0aGVz ZSByZWdpc3RlcnMgcmVhbGx5IGFyZSBnbG9iYWwgdG8gdGhlIGJsb2NrLCBzaG91bGQgdGhlIHBy b3ZpZGVyCmFyYml0cmF0ZSB0aGVtIChvciByZWZ1c2UgbW9yZSB0aGFuIG9uZSBhY3RpdmUgcG9y dCkgcmF0aGVyIHRoYW4gbGV0dGluZwplYWNoIHBoeWxpbmtfcGNzIGluc3RhbmNlIHByb2dyYW0g dGhlbSBpbmRlcGVuZGVudGx5PwoKPiArCWRlZmF1bHQ6Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwo+ ICsJc3dpdGNoIChhZGRyKSB7Cj4gKwljYXNlIDA6Cj4gKwkJcmV0dXJuIFJPQ0tDSElQX01NRF9N SUk7Cj4gKwljYXNlIDE6Cj4gKwkJcmV0dXJuIFJPQ0tDSElQX01NRF9NSUkxOwo+ICsJY2FzZSAy Ogo+ICsJCXJldHVybiBST0NLQ0hJUF9NTURfTUlJMjsKPiArCWNhc2UgMzoKPiArCQlyZXR1cm4g Uk9DS0NISVBfTU1EX01JSTM7Cj4gKwlkZWZhdWx0Ogo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsJ fQo+ICt9CgpbIC4uLiBdCgo+ICtzdGF0aWMgaW50IHhwY3NfcmtfcmVhZF9jNDUoc3RydWN0IG1p aV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXYsIGludCByZWcpCj4gK3sKPiArCXN0cnVjdCBk d194cGNzX3JrICpweHBjcyA9IGJ1cy0+cHJpdjsKPiArCj4gKwlpZiAoIXhwY3NfcmtfbWRpb19h ZGRyX3ZhbGlkYXRlKGFkZHIpKQo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsKPiArCWRldiA9IHhw Y3NfcmtfbWRpb19yZWFkX3JlbWFwcGluZyhhZGRyLCBkZXYsIHJlZyk7Cj4gKwlpZiAoZGV2IDwg MCkKPiArCQlyZXR1cm4gMHhmZmZmOwo+ICsKPiArCXJldHVybiB4cGNzX3JrX3JlYWRfcmVnKHB4 cGNzLCBkZXYsIHJlZyk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgeHBjc19ya193cml0ZV9jNDUo c3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXYsIGludCByZWcsIHUxNiB2YWwp Cj4gK3sKPiArCXN0cnVjdCBkd194cGNzX3JrICpweHBjcyA9IGJ1cy0+cHJpdjsKPiArCj4gKwlp ZiAoIXhwY3NfcmtfbWRpb19hZGRyX3ZhbGlkYXRlKGFkZHIpKQo+ICsJCXJldHVybiAtRU5PREVW Owo+ICsKPiArCWRldiA9IHhwY3NfcmtfbWRpb193cml0ZV9yZW1hcHBpbmcoYWRkciwgZGV2LCBy ZWcpOwo+ICsJaWYgKGRldiA8IDApCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJcmV0dXJuIHhwY3Nf cmtfd3JpdGVfcmVnKHB4cGNzLCBkZXYsIHJlZywgdmFsKTsKPiArfQoKW1NldmVyaXR5OiBMb3dd CldoZW4gdGhlIHJlbWFwcGluZyByZXR1cm5zIC1FTlhJTyAoYW55IE1NRCBvdGhlciB0aGFuIE1E SU9fTU1EX1BNQVBNRCBvcgpNRElPX01NRF9WRU5EMiksIHRoZSBidXMgY2FsbGJhY2tzIGZhYnJp Y2F0ZSBhIHJlc3VsdCBpbnN0ZWFkIG9mIHJlcG9ydGluZwp0aGUgZXJyb3I6IHRoZSByZWFkIHBh dGhzIHJldHVybiAweGZmZmYgYW5kIHRoZSB3cml0ZSBwYXRocyByZXR1cm4gMCBhcyBpZgp0aGUg QVBCMyB0cmFuc2FjdGlvbiBoYWQgaGFwcGVuZWQuICBUaGUgYzIyIHdyYXBwZXJzIGRvIHRoZSBz YW1lLgoKRm9yIHRoZSBtb2RlcyB0aGlzIGdsdWUgc3VwcG9ydHMgdGhlIG9ubHkgcmVhY2hhYmxl IHVzZXIgYXBwZWFycyB0byBiZQp4cGNzX3JlYWRfaWRzKCksIHdoaWNoIHRvbGVyYXRlcyBpZCA9 PSAweGZmZmZmZmZmIGFuZCBmYWxscyBiYWNrIHRvCk1ESU9fTU1EX1ZFTkQyLCBzbyB0aGUgZmFi cmljYXRlZCB2YWx1ZSBpcyBsb2FkLWJlYXJpbmcgZm9yIHByb2JlIGFuZApyZXR1cm5pbmcgdGhl IGVycm5vIGluc3RlYWQgd291bGQgbWFrZSB4cGNzX3JlYWRfaWRzKCkgZmFpbCB3aXRoIC1FTk9E RVYuCgpHaXZlbiB0aGF0LCBjb3VsZCB0aGlzIGJlaGF2aW91ciBhdCBsZWFzdCBnZXQgYSBjb21t ZW50IHNheWluZyB0aGF0CnVuc3VwcG9ydGVkIE1NRHMgYXJlIGRlbGliZXJhdGVseSBmYWtlZCBz byBwcm9iZSBrZWVwcyB3b3JraW5nPyAgQW5kIHdvdWxkCml0IGJlIGJldHRlciBmb3IgdGhlIGlu c3RhbmNlIHRvIGFkdmVydGlzZSBvbmx5IHRoZSBpbnRlcmZhY2VzIHRoaXMgTU1EIG1hcApjYW4g YWN0dWFsbHkgc2VydmUsIHNvIGEgZnV0dXJlIEM3MyBwYXRoIGRvZXMgbm90IHNpbGVudGx5IHdy aXRlIGludG8Kbm90aGluZz8KCj4gKwo+ICtzdGF0aWMgc3RydWN0IGR3X3hwY3NfcmsgKnhwY3Nf cmtfY3JlYXRlX2RhdGEoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewoKWyAuLi4g XQoKPiArc3RhdGljIGludCB4cGNzX3JrX3NlcmRlc19waHlfaW5pdChzdHJ1Y3QgZHdfeHBjc19y ayAqcHhwY3MpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZweHBjcy0+cGRldi0+ZGV2 Owo+ICsKPiArCXB4cGNzLT5zZXJkZXNfcGh5ID0gZGV2bV9waHlfZ2V0KGRldiwgInNlcmRlcyIp Owo+ICsJaWYgKElTX0VSUihweHBjcy0+c2VyZGVzX3BoeSkpCj4gKwkJcmV0dXJuIGRldl9lcnJf cHJvYmUoZGV2LCBQVFJfRVJSKHB4cGNzLT5zZXJkZXNfcGh5KSwKPiArCQkJCQkiRmFpbGVkIHRv IGdldCBTZXJEZXMgUEhZXG4iKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQoKW1NldmVyaXR5OiBM b3ddClRoaXMgbWFrZXMgYSBtaXNzaW5nICJzZXJkZXMiIHBoeSBmYXRhbCBmb3IgcHJvYmUsIGFu ZCB0aGUgYmluZGluZyBhZGRlZAplYXJsaWVyIGluIHRoZSBzZXJpZXMgbGlzdHMgcGh5cyBhbmQg cGh5LW5hbWVzIHVuZGVyIHJlcXVpcmVkOiwgYnV0IHRoZQpTb0MtbGV2ZWwgbm9kZSBpbiBhcmNo L2FybTY0L2Jvb3QvZHRzL3JvY2tjaGlwL3JrMzU2OC5kdHNpCihldGhlcm5ldC1wY3NAZmRhMDAw MDApIGhhcyBuZWl0aGVyIHByb3BlcnR5IC0gb25seQpyazM1NjgtcGhvdG9uaWNhdC5kdHMgYWRk czoKCiAgcGh5cyA9IDwmY29tYnBoeTIgUEhZX1RZUEVfU0dNSUk+OwogIHBoeS1uYW1lcyA9ICJz ZXJkZXMiOwoKRG9lcyAibWFrZSBkdGJzX2NoZWNrIiB0aGVuIHJlcG9ydCAiJ3BoeXMnIGlzIGEg cmVxdWlyZWQgcHJvcGVydHkiIGZvcgpldmVyeSByazM1NjggZHRiIHRoYXQgaW5jbHVkZXMgcmsz NTY4LmR0c2ksIGdpdmVuIHRoYXQgZHQtdmFsaWRhdGUgYWxzbwpjaGVja3MgZGlzYWJsZWQgbm9k ZXM/ICBBbmQgZG9lcyBhIGJvYXJkIHRoYXQgb25seSBmbGlwcyAmeHBjcyB0bwpzdGF0dXMgPSAi b2theSIgZ2V0IGFuIHVuZXhwbGFpbmVkIHByb2JlIGZhaWx1cmUgaGVyZT8KCldvdWxkIGRyb3Bw aW5nIHBoeXMvcGh5LW5hbWVzIGZyb20gcmVxdWlyZWQ6IChsZWF2aW5nIHRoZW0gdG8gYm9hcmQg bGV2ZWwpCm9yIGFkZGluZyB0aGUgcGh5cyByZWZlcmVuY2UgdG8gdGhlIFNvQyBkdHNpIGJlIHRo ZSBpbnRlbmRlZCBhcnJhbmdlbWVudD8KClsgLi4uIF0KCj4gK3N0cnVjdCBkd194cGNzICp4cGNz X3JrX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCj4g K3sKClsgLi4uIF0KCj4gKwlwZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShwY3NfbnApOwo+ ICsJb2Zfbm9kZV9wdXQocGNzX25wKTsKPiArCWlmICghcGRldikKPiArCQlyZXR1cm4gRVJSX1BU UigtRVBST0JFX0RFRkVSKTsKPiArCj4gKwlpZiAoIWRldmljZV9saW5rX2FkZChkZXYsICZwZGV2 LT5kZXYsIERMX0ZMQUdfQVVUT1JFTU9WRV9DT05TVU1FUikpIHsKPiArCQlwdXRfZGV2aWNlKCZw ZGV2LT5kZXYpOwo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ICsJfQo+ICsKPiArCXB4 cGNzID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Cj4gKwlpZiAoIXB4cGNzIHx8ICFweHBj cy0+YnVzKSB7Cj4gKwkJZGV2aWNlX2xpbmtfcmVtb3ZlKGRldiwgJnBkZXYtPmRldik7CgpbU2V2 ZXJpdHk6IEhpZ2hdCkNhbiBkZXZpY2VfbGlua19yZW1vdmUoKSBhY3R1YWxseSBkcm9wIHRoaXMg bGluaz8KCmRldmljZV9saW5rX2FkZCgpIGlzIGNhbGxlZCB3aXRoIG9ubHkgRExfRkxBR19BVVRP UkVNT1ZFX0NPTlNVTUVSLCBzbwpETF9GTEFHX1NUQVRFTEVTUyBpcyBhYnNlbnQgYW5kIHRoZSBj b3JlIGFkZHMgRExfRkxBR19NQU5BR0VELiAgSW4KZHJpdmVycy9iYXNlL2NvcmUuYywgZGV2aWNl X2xpbmtfcmVtb3ZlKCkgLT4gZGV2aWNlX2xpbmtfcHV0X2tyZWYoKSB0aGVuCnRha2VzOgoKICBp ZiAoZGV2aWNlX2xpbmtfdGVzdChsaW5rLCBETF9GTEFHX1NUQVRFTEVTUykpCglrcmVmX3B1dCgm bGluay0+a3JlZiwgX19kZXZpY2VfbGlua19kZWwpOwogIGVsc2UgaWYgKCFkZXZpY2VfaXNfcmVn aXN0ZXJlZChsaW5rLT5jb25zdW1lcikpCglfX2RldmljZV9saW5rX2RlbCgmbGluay0+a3JlZik7 CiAgZWxzZQoJV0FSTigxLCAiVW5hYmxlIHRvIGRyb3AgYSBtYW5hZ2VkIGRldmljZSBsaW5rIHJl ZmVyZW5jZVxuIik7CgpUaGUgY29uc3VtZXIgaGVyZSBpcyB0aGUgc3RtbWFjIGRldmljZSwgd2hp Y2ggaXMgcmVnaXN0ZXJlZCwgc28gZG9lcyB0aGlzCmhpdCB0aGUgV0FSTigxKSBzcGxhdCAoYW5k IHBhbmljIHdpdGggcGFuaWNfb25fd2Fybikgd2hpbGUgbGVhdmluZyB0aGUgbGluawppbiBwbGFj ZT8KClRoZSAtRVBST0JFX0RFRkVSIHBhdGggbG9va3MgZWFzeSB0byByZWFjaDogInBjcy1oYW5k bGUiIGlzIG5vdCBhbW9uZyB0aGUKZndfZGV2bGluay1wYXJzZWQgcHJvcGVydGllcyBpbiBkcml2 ZXJzL29mL3Byb3BlcnR5LmMsIHNvIG5vdGhpbmcgb3JkZXJzCnRoZSBHTUFDIHByb2JlIGFmdGVy IHRoZSBYUENTIHByb2JlLiAgV2hlbmV2ZXIgdGhlIEdNQUMgcHJvYmVzIGZpcnN0LApkZXZpY2Vf bGlua19hZGQoKSBzdWNjZWVkcyBhbmQgcGxhdGZvcm1fZ2V0X2RydmRhdGEoKSByZXR1cm5zIE5V TEwuCgpXb3VsZCBpdCBiZSBzaW1wbGVyIHRvIGNyZWF0ZSB0aGUgbGluayBvbmx5IGFmdGVyIHRo ZSBmYWxsaWJsZSBYUENTCmNyZWF0aW9uIGhhcyBzdWNjZWVkZWQgKGNhbGxpbmcgeHBjc19kZXN0 cm95KCkgaWYgdGhlIGxpbmsgdGhlbiBmYWlscyksIG9yCnRvIHVzZSBkZXZpY2VfbGlua19kZWwo KSAvIGEgc3RhdGVsZXNzIGxpbmsgY29uc2lzdGVudGx5PwoKPiArCQlwdXRfZGV2aWNlKCZwZGV2 LT5kZXYpOwo+ICsJCXJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpOwo+ICsJfQo+ICsKPiAr CXhwY3MgPSB4cGNzX2NyZWF0ZV9tZGlvZGV2KHB4cGNzLT5idXMsIChpbnQpcG9ydCk7CgpbU2V2 ZXJpdHk6IEhpZ2hdCklzIHJlYWRpbmcgdGhlIHN1cHBsaWVyJ3MgZHJ2ZGF0YSBoZXJlIHNhZmUg YWdhaW5zdCB0aGUgc3VwcGxpZXIKdW5iaW5kaW5nPwoKVGhpcyBydW5zIGZyb20gYW5vdGhlciBk ZXZpY2UncyBwcm9iZSAocmtfcGNzX2luaXQoKSBkdXJpbmcgc3RtbWFjIHByb2JlKSwKd2l0aG91 dCBkZXZpY2VfbG9jaygmcGRldi0+ZGV2KSBhbmQgd2l0aG91dCBhIGRldmljZV9pc19ib3VuZCgp IGNoZWNrLiAgSW4KZHJpdmVycy9iYXNlL2RkLmMsIGRldmljZV91bmJpbmRfY2xlYW51cCgpIGRv ZXM6CgogIGRldnJlc19yZWxlYXNlX2FsbChkZXYpOwogIC4uLgogIGRldmljZV9zZXRfZHJpdmVy KGRldiwgTlVMTCk7CiAgZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CgpTbyBpZiB0aGUgWFBD UyBwcm9iZSBmYWlscyAoZm9yIGV4YW1wbGUgLUVQUk9CRV9ERUZFUiBmcm9tCmRldm1fcGh5X2dl dChkZXYsICJzZXJkZXMiKSkgb3IgdGhlIGRldmljZSBpcyB1bmJvdW5kIHdoaWxlIHRoaXMgZnVu Y3Rpb24Kc2l0cyBiZXR3ZWVuIGRldmljZV9saW5rX2FkZCgpIGFuZCBwbGF0Zm9ybV9nZXRfZHJ2 ZGF0YSgpLCB0aGUgZGV2bQphbGxvY2F0aW9uIGhvbGRpbmcgcHhwY3MgaXMgYWxyZWFkeSBmcmVl ZCB3aGlsZSBkcnZkYXRhIHN0aWxsIHBvaW50cyBhdAppdC4gIERvZXMgdGhlICIhcHhwY3MgfHwg IXB4cGNzLT5idXMiIHRlc3QgdGhlbiByZWFkIGZyZWVkIG1lbW9yeSwgYW5kIGNhbgp0aGUgZnJl ZWQgZGV2bSBtaWlfYnVzIGJlIGhhbmRlZCB0byB4cGNzX2NyZWF0ZV9tZGlvZGV2KCk/CgpOb3Rl IGFsc28gdGhhdCBkZXZpY2VfbGlua19hZGQoKSBkb2VzIG5vdCBibG9jayBhbiB1bmJpbmRpbmcg c3VwcGxpZXIKKGRldmljZV9saW5rX2luaXRfc3RhdHVzKCkganVzdCBhc3NpZ25zIERMX1NUQVRF X1NVUFBMSUVSX1VOQklORCksIGFuZApfX2RldmljZV9yZWxlYXNlX2RyaXZlcigpIGRvZXMgbm90 IHJlLWNoZWNrIGZvciBjb25zdW1lcnMgYXBwZWFyaW5nIGFmdGVyCml0cyBkZXZpY2VfbGlua3Nf YnVzeSgpIGxvb3AuCgpSZWxhdGVkIHRvIHRoaXMsIHhwY3NfcmtfY3JlYXRlX2RhdGEoKSBwdWJs aXNoZXMgdGhlIHN0cnVjdHVyZSBhdCB0aGUgdmVyeQpzdGFydCBvZiBwcm9iZToKCiAgcHhwY3Mt PnBkZXYgPSBwZGV2OwoKICBkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgcHhwY3MpOwoKd2hp bGUgcmVnX2Jhc2UsIHRoZSBjbG9ja3MsIGVlZV9tdWx0X2ZhY3QgYW5kIGJ1cyBhcmUgZmlsbGVk IGluIGxhdGVyLCBhbmQKeHBjc19ya19pbml0X2J1cygpIGVuZHMgd2l0aCBhIHBsYWluICJweHBj cy0+YnVzID0gYnVzOyIuICBJcyB0aGUgbm9uLU5VTEwKYnVzIGZpZWxkIGJlaW5nIHVzZWQgYXMg YSBjcm9zcy1kZXZpY2UgcmVhZGluZXNzIGZsYWcgd2l0aG91dCBhbnkKcmVsZWFzZS9hY3F1aXJl IHBhaXJpbmc/CgpXb3VsZCB2YWxpZGF0aW5nIHRoZSBzdXBwbGllciB1bmRlciBkZXZpY2VfbG9j aygmcGRldi0+ZGV2KSB3aXRoCmRldmljZV9pc19ib3VuZCgpLCBhbmQgaG9sZGluZyBhIHJlZmVy ZW5jZSBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSByZXR1cm5lZApkd194cGNzICh0aGUgcGRldiBy ZWZlcmVuY2UgaXMgZHJvcHBlZCB3aXRoIHB1dF9kZXZpY2UoKSBiZWZvcmUgcmV0dXJuaW5nLAph bmQgbWRpb19kZXZpY2VfY3JlYXRlKCkgbmV2ZXIgcmVnaXN0ZXJzIG9uIHRoZSBidXMpLCBjbG9z ZSB0aGlzPwoKPiArCWlmIChJU19FUlIoeHBjcykpIHsKPiArCQlkZXZpY2VfbGlua19yZW1vdmUo ZGV2LCAmcGRldi0+ZGV2KTsKPiArCQlwdXRfZGV2aWNlKCZwZGV2LT5kZXYpOwo+ICsJCXJldHVy biB4cGNzOwo+ICsJfQo+ICsKPiArCXhwY3NfY29uZmlnX2VlZV9tdWx0X2ZhY3QoeHBjcywgcHhw Y3MtPmVlZV9tdWx0X2ZhY3QpOwo+ICsJcHV0X2RldmljZSgmcGRldi0+ZGV2KTsKPiArCXJldHVy biB4cGNzOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKHhwY3NfcmtfY3JlYXRlKTsKClsgLi4u IF0KCk9uZSBtb3JlIHF1ZXN0aW9uIGFib3V0IGEgZGlmZmVyZW50IHBhdGNoIGluIHRoZSBzYW1l IHNlcmllcywgIm5ldDogcGNzOgp4cGNzOiBhZGQgQU5SRVNUQVJUIHN1cHBvcnQgZm9yIFNHTUlJ IGxpbmsgcmVjb3ZlcnkiLCBzaW5jZSBpdCBpbnRlcmFjdHMKd2l0aCB0aGlzIGRyaXZlcjoKCltT ZXZlcml0eTogTWVkaXVtXQpJbiB4cGNzX2dldF9zdGF0ZV9jMzdfc2dtaWkoKSAoZHJpdmVycy9u ZXQvcGNzL3Bjcy14cGNzLmMpIHRoZSBzdGF0dXMKY2xlYXIgd2FzIHR1cm5lZCBpbnRvIGEgY2xl YXIgcGx1cyBhbiBBTiByZXN0YXJ0OgoKICBpZiAoc3RhdGUtPmFuX2NvbXBsZXRlKSB7CgkvKiBD bGVhciBBTiBjb21wbGV0ZSBzdGF0dXMgb3IgaW50ZXJydXB0ICovCglyZXQgPSB4cGNzX3dyaXRl KHhwY3MsIE1ESU9fTU1EX1ZFTkQyLCBEV19WUl9NSUlfQU5fSU5UUl9TVFMsIDApOwoJLi4uCgkv KiBJbml0aWF0ZSB0aGUgbmV4dCByb3VuZCBvZiBBTiAqLwoJcmV0ID0geHBjc19tb2RpZnkoeHBj cywgTURJT19NTURfVkVORDIsIE1JSV9CTUNSLCBCTUNSX0FOUkVTVEFSVCwKCQkJICBCTUNSX0FO UkVTVEFSVCk7CgpUaGUgY2hhbmdlbG9nIGRlc2NyaWJlcyB0aGlzIGFzIGFuIFJLMzU2OCB0aW1p bmcgcXVpcmssIGJ1dCB0aGUgY29kZSBoYXMgbm8KZGV2aWNlLUlEIG9yIHF1aXJrIGdhdGUgYW5k IG5vIGxpbmstdHJhbnNpdGlvbiB0cmFja2luZywgc28gaXQgYXBwbGllcyB0bwpldmVyeSBEZXNp Z25XYXJlIFhQQ1MgaW4gRFdfQU5fQzM3X1NHTUlJIG1vZGUuCgpUaGUgYmxvY2sgaXMgZW50ZXJl ZCB3aGVuZXZlciBEV19WUl9NSUlfQU5fU1RTX0MzN19BTkNNUExUX0lOVFIgaXMgc2V0IGFuZApE V19WUl9NSUlfQzM3X0FOU0dNX1NQX0xOS1NUUyBpcyBjbGVhciwgd2hpY2ggaXMgYSBsZWdpdGlt YXRlIHN0YXRlIChQQ1MKY29uZmlndXJhdGlvbiBleGNoYW5nZSBjb21wbGV0ZSwgUEhZIGxpbmsg c3RpbGwgZG93bikuCgpEb2VzIHRoYXQgbWVhbiBhbiBBTiByZXN0YXJ0IGlzIGlzc3VlZCBvbmNl IHBlciBwb2xsIGludGVydmFsLCBmb3IgYXMgbG9uZwphcyB0aGUgYXR0YWNoZWQgUEhZIHJlcG9y dHMgQU4gY29tcGxldGUgd2l0aCBsaW5rIGRvd24sIG9uIHBhcnRzIHRoYXQgZG8Kbm90IG5lZWQg dGhlIHdvcmthcm91bmQ/ICBTaG91bGQgdGhlIHJlc3RhcnQgYmUgZ2F0ZWQgb24gYSBwZXItZGV2 aWNlCnF1aXJrPwoKWyAuLi4gXQoKPiBAQCAtMCwwICsxLDU3MyBAQAo+ICsvLyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ICsvKgo+ICsgKiBSb2NrY2hpcCBYUENTIHBsYXRmb3Jt IGRldmljZSBkcml2ZXIKPiArICoKPiArICogQmFzZWQgb24gdGhlIFN5bm9wc3lzIERlc2lnbldh cmUgWFBDUyBwbGF0Zm9ybSBkcml2ZXIuCj4gKyAqIENvcHlyaWdodCAoQykgMjAyNCBTZXJnZSBT ZW1pbgo+ICsgKgo+ICsgKiBBZGFwdGVkIGZvciBSb2NrY2hpcCBTb0NzLCB3aXRoIHJlZmVyZW5j ZSB0byB0aGUgUm9ja2NoaXAgT0VNIGRyaXZlci4KPiArICogQ29weXJpZ2h0IChDKSAyMDI2IENv aWEgUHJhbnQKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvYXRvbWljLmg+Cj4gKyNpbmNs dWRlIDxsaW51eC9iaXRmaWVsZC5oPgo+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4gKyNpbmNs dWRlIDxsaW51eC9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+Cj4gKyNpbmNsdWRl IDxsaW51eC9pb3BvbGwuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21hdGguaD4KPiArI2luY2x1ZGUg PGxpbnV4L21kaW8uaD4KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ICsjaW5jbHVkZSA8 bGludXgvb2YuaD4KPiArI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Cj4gKyNpbmNsdWRl IDxsaW51eC9wY3MvcGNzLXhwY3MtcmsuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgo+ICsj aW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2 aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wbV9kb21haW4uaD4KPiArI2luY2x1ZGUgPGxpbnV4 L3BtX3J1bnRpbWUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3Byb3BlcnR5Lmg+Cj4gKyNpbmNsdWRl IDxsaW51eC9zaXplcy5oPgo+ICsjaW5jbHVkZSA8bGludXgvdGltZS5oPgo+ICsKPiArI2luY2x1 ZGUgInBjcy14cGNzLmgiCj4gKwo+ICtzdHJ1Y3QgZHdfeHBjc19yayB7Cj4gKwlzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2Owo+ICsJc3RydWN0IG1paV9idXMgKmJ1czsKPiArCXZvaWQgX19p b21lbSAqcmVnX2Jhc2U7Cj4gKwlzdHJ1Y3QgcGh5ICpzZXJkZXNfcGh5Owo+ICsJc3RydWN0IGNs ayAqY3NyX2NsazsKPiArCXN0cnVjdCBjbGsgKmVlZV9jbGs7Cj4gKwl1OCBlZWVfbXVsdF9mYWN0 Owo+ICt9Owo+ICsKPiArc3RhdGljIHB0cmRpZmZfdCB4cGNzX3JrX2FkZHJfZm9ybWF0KGludCBk ZXYsIGludCByZWcpCj4gK3sKPiArCXJldHVybiBGSUVMRF9QUkVQKDB4NzAwMDAsIGRldikgfCBG SUVMRF9QUkVQKDB4ZmZmZiwgcmVnKTsKPiArfQo+ICsKPiArc3RhdGljIGludCB4cGNzX3JrX3Jl YWRfcmVnKHN0cnVjdCBkd194cGNzX3JrICpweHBjcywgaW50IGRldiwgaW50IHJlZykKPiArewo+ ICsJcHRyZGlmZl90IGNzcjsKPiArCWludCByZXQ7Cj4gKwo+ICsJY3NyID0geHBjc19ya19hZGRy X2Zvcm1hdChkZXYsIHJlZyk7Cj4gKwo+ICsJcmV0ID0gcG1fcnVudGltZV9yZXN1bWVfYW5kX2dl dCgmcHhwY3MtPnBkZXYtPmRldik7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ ICsJcmV0ID0gcmVhZGwocHhwY3MtPnJlZ19iYXNlICsgKGNzciA8PCAyKSkgJiAweGZmZmY7Cj4g Kwo+ICsJcG1fcnVudGltZV9wdXQoJnB4cGNzLT5wZGV2LT5kZXYpOwo+ICsJcmV0dXJuIHJldDsK PiArfQo+ICsKPiArc3RhdGljIGludCB4cGNzX3JrX3dyaXRlX3JlZyhzdHJ1Y3QgZHdfeHBjc19y ayAqcHhwY3MsIGludCBkZXYsIGludCByZWcsIHUxNiB2YWwpCj4gK3sKPiArCXB0cmRpZmZfdCBj c3I7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWNzciA9IHhwY3NfcmtfYWRkcl9mb3JtYXQoZGV2LCBy ZWcpOwo+ICsKPiArCXJldCA9IHBtX3J1bnRpbWVfcmVzdW1lX2FuZF9nZXQoJnB4cGNzLT5wZGV2 LT5kZXYpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCXdyaXRlbCh2YWws IHB4cGNzLT5yZWdfYmFzZSArIChjc3IgPDwgMikpOwo+ICsKPiArCXBtX3J1bnRpbWVfcHV0KCZw eHBjcy0+cGRldi0+ZGV2KTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsjZGVmaW5lIFJPQ0tD SElQX01NRF9NSUkxCTIKPiArI2RlZmluZSBST0NLQ0hJUF9NTURfTUlJMgkzCj4gKyNkZWZpbmUg Uk9DS0NISVBfTU1EX01JSTMJNAo+ICsjZGVmaW5lIFJPQ0tDSElQX01NRF9QTUFQTUQJNgo+ICsj ZGVmaW5lIFJPQ0tDSElQX01NRF9NSUkJNwo+ICsKPiArc3RhdGljIGJvb2wgeHBjc19ya19tZGlv X2FkZHJfdmFsaWRhdGUoaW50IGFkZHIpCj4gK3sKPiArCXJldHVybiAhKGFkZHIgPCAwIHx8IGFk ZHIgPiAzKTsKPiArfQo+ICsKPiArc3RhdGljIGludCB4cGNzX3JrX21kaW9fcmVhZF9yZW1hcHBp bmcoaW50IGFkZHIsIGludCBkZXYsIGludCByZWcpCj4gK3sKPiArCXN3aXRjaCAoZGV2KSB7Cj4g KwljYXNlIE1ESU9fTU1EX1BNQVBNRDoKPiArCQlyZXR1cm4gUk9DS0NISVBfTU1EX1BNQVBNRDsK PiArCWNhc2UgTURJT19NTURfVkVORDI6Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCXJl dHVybiAtRU5YSU87Cj4gKwl9Cj4gKwo+ICsJLyoKPiArCSAqIFJlYWRzIGFyZSByZWRpcmVjdGVk IGJ5IGhhcmR3YXJlIHRvIHRoZSBwb3J0J3MgcmVhZC1vbmx5IG1pcnJvcjsKPiArCSAqIG9ubHkg d3JpdGVzIGhhdmUgdG8gYmUgdGFyZ2V0ZWQgYXQgTUlJIChzZWUgdGhlIHdyaXRlIHBhdGgpLgo+ ICsJICovCj4gKwlzd2l0Y2ggKGFkZHIpIHsKPiArCWNhc2UgMDoKPiArCQlyZXR1cm4gUk9DS0NI SVBfTU1EX01JSTsKPiArCWNhc2UgMToKPiArCQlyZXR1cm4gUk9DS0NISVBfTU1EX01JSTE7Cj4g KwljYXNlIDI6Cj4gKwkJcmV0dXJuIFJPQ0tDSElQX01NRF9NSUkyOwo+ICsJY2FzZSAzOgo+ICsJ CXJldHVybiBST0NLQ0hJUF9NTURfTUlJMzsKPiArCWRlZmF1bHQ6Cj4gKwkJcmV0dXJuIC1FTk9E RVY7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgeHBjc19ya19tZGlvX3dyaXRlX3JlbWFw cGluZyhpbnQgYWRkciwgaW50IGRldiwgaW50IHJlZykKPiArewo+ICsJc3dpdGNoIChkZXYpIHsK PiArCWNhc2UgTURJT19NTURfUE1BUE1EOgo+ICsJCXJldHVybiBST0NLQ0hJUF9NTURfUE1BUE1E Owo+ICsJY2FzZSBNRElPX01NRF9WRU5EMjoKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJ cmV0dXJuIC1FTlhJTzsKPiArCX0KPiArCj4gKwkvKgo+ICsJICogVGhlc2UgcmVnaXN0ZXJzIHBo eXNpY2FsbHkgbGl2ZSBvbmx5IGluIE1JSSAodGhlIG1hbmFnZW1lbnQgcG9ydCkuCj4gKwkgKiBQ b3J0cyAxLTMgZXhwb3NlIHJlYWQtb25seSBtaXJyb3JzIG9mIHRoZXNlIGJpdHMsIHNvIHdyaXRl cyBtdXN0Cj4gKwkgKiBhbHdheXMgdGFyZ2V0IE1JSTsgdGhlIHJlYWQgcGF0aCByZW1hcHMgcGVy IGFkZHJlc3MgYW5kIHRoZQo+ICsJICogaGFyZHdhcmUgcmVkaXJlY3RzIHRvIHRoZSBwb3J0J3Mg bWlycm9yLgo+ICsJICovCj4gKwlzd2l0Y2ggKHJlZykgewo+ICsJY2FzZSBEV19WUl9NSUlfQU5f Q1RSTDoKPiArCWNhc2UgRFdfVlJfTUlJX0FOX0lOVFJfU1RTOgo+ICsJY2FzZSBEV19WUl9NSUlf RUVFX01DVFJMMDoKPiArCWNhc2UgRFdfVlJfTUlJX0VFRV9NQ1RSTDE6Cj4gKwljYXNlIERXX1ZS X01JSV9ESUdfQ1RSTDI6Cj4gKwkJcmV0dXJuIFJPQ0tDSElQX01NRF9NSUk7Cj4gKwlkZWZhdWx0 Ogo+ICsJCWJyZWFrOwo+ICsJfQo+ICsKPiArCXN3aXRjaCAoYWRkcikgewo+ICsJY2FzZSAwOgo+ ICsJCXJldHVybiBST0NLQ0hJUF9NTURfTUlJOwo+ICsJY2FzZSAxOgo+ICsJCXJldHVybiBST0NL Q0hJUF9NTURfTUlJMTsKPiArCWNhc2UgMjoKPiArCQlyZXR1cm4gUk9DS0NISVBfTU1EX01JSTI7 Cj4gKwljYXNlIDM6Cj4gKwkJcmV0dXJuIFJPQ0tDSElQX01NRF9NSUkzOwo+ICsJZGVmYXVsdDoK PiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIGludCB4cGNzX3Jr X3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnKQo+ICt7Cj4g KwlzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBidXMtPnByaXY7Cj4gKwlpbnQgZGV2Owo+ICsK PiArCWlmICgheHBjc19ya19tZGlvX2FkZHJfdmFsaWRhdGUoYWRkcikpCj4gKwkJcmV0dXJuIC1F Tk9ERVY7Cj4gKwo+ICsJZGV2ID0geHBjc19ya19tZGlvX3JlYWRfcmVtYXBwaW5nKGFkZHIsIE1E SU9fTU1EX1ZFTkQyLCByZWcpOwo+ICsJaWYgKGRldiA8IDApCj4gKwkJcmV0dXJuIDB4ZmZmZjsK PiArCj4gKwlyZXR1cm4geHBjc19ya19yZWFkX3JlZyhweHBjcywgZGV2LCByZWcpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IHhwY3Nfcmtfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGlu dCBhZGRyLCBpbnQgcmVnLCB1MTYgdmFsKQo+ICt7Cj4gKwlzdHJ1Y3QgZHdfeHBjc19yayAqcHhw Y3MgPSBidXMtPnByaXY7Cj4gKwlpbnQgZGV2Owo+ICsKPiArCWlmICgheHBjc19ya19tZGlvX2Fk ZHJfdmFsaWRhdGUoYWRkcikpCj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwo+ICsJZGV2ID0geHBj c19ya19tZGlvX3dyaXRlX3JlbWFwcGluZyhhZGRyLCBNRElPX01NRF9WRU5EMiwgcmVnKTsKPiAr CWlmIChkZXYgPCAwKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCXJldHVybiB4cGNzX3JrX3dyaXRl X3JlZyhweHBjcywgZGV2LCByZWcsIHZhbCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgeHBjc19y a19yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IGRldiwgaW50IHJl ZykKPiArewo+ICsJc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gYnVzLT5wcml2Owo+ICsKPiAr CWlmICgheHBjc19ya19tZGlvX2FkZHJfdmFsaWRhdGUoYWRkcikpCj4gKwkJcmV0dXJuIC1FTk9E RVY7Cj4gKwo+ICsJZGV2ID0geHBjc19ya19tZGlvX3JlYWRfcmVtYXBwaW5nKGFkZHIsIGRldiwg cmVnKTsKPiArCWlmIChkZXYgPCAwKQo+ICsJCXJldHVybiAweGZmZmY7Cj4gKwo+ICsJcmV0dXJu IHhwY3NfcmtfcmVhZF9yZWcocHhwY3MsIGRldiwgcmVnKTsKPiArfQo+ICsKPiArc3RhdGljIGlu dCB4cGNzX3JrX3dyaXRlX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IGRl diwgaW50IHJlZywgdTE2IHZhbCkKPiArewo+ICsJc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzID0g YnVzLT5wcml2Owo+ICsKPiArCWlmICgheHBjc19ya19tZGlvX2FkZHJfdmFsaWRhdGUoYWRkcikp Cj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwo+ICsJZGV2ID0geHBjc19ya19tZGlvX3dyaXRlX3Jl bWFwcGluZyhhZGRyLCBkZXYsIHJlZyk7Cj4gKwlpZiAoZGV2IDwgMCkKPiArCQlyZXR1cm4gMDsK PiArCj4gKwlyZXR1cm4geHBjc19ya193cml0ZV9yZWcocHhwY3MsIGRldiwgcmVnLCB2YWwpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGR3X3hwY3NfcmsgKnhwY3NfcmtfY3JlYXRlX2RhdGEo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsJc3RydWN0IGR3X3hwY3Nfcmsg KnB4cGNzOwo+ICsKPiArCXB4cGNzID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigq cHhwY3MpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghcHhwY3MpCj4gKwkJcmV0dXJuIEVSUl9QVFIo LUVOT01FTSk7Cj4gKwo+ICsJcHhwY3MtPnBkZXYgPSBwZGV2Owo+ICsKPiArCWRldl9zZXRfZHJ2 ZGF0YSgmcGRldi0+ZGV2LCBweHBjcyk7Cj4gKwo+ICsJcmV0dXJuIHB4cGNzOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IHhwY3Nfcmtfc2VyZGVzX3BoeV9pbml0KHN0cnVjdCBkd194cGNzX3JrICpw eHBjcykKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJnB4cGNzLT5wZGV2LT5kZXY7Cj4g Kwo+ICsJcHhwY3MtPnNlcmRlc19waHkgPSBkZXZtX3BoeV9nZXQoZGV2LCAic2VyZGVzIik7Cj4g KwlpZiAoSVNfRVJSKHB4cGNzLT5zZXJkZXNfcGh5KSkKPiArCQlyZXR1cm4gZGV2X2Vycl9wcm9i ZShkZXYsIFBUUl9FUlIocHhwY3MtPnNlcmRlc19waHkpLAo+ICsJCQkJCSJGYWlsZWQgdG8gZ2V0 IFNlckRlcyBQSFlcbiIpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCB4cGNzX3JrX3NlcmRlc19waHlfcG93ZXJvZmYodm9pZCAqZGF0YSkKPiArewo+ICsJc3RydWN0 IGR3X3hwY3NfcmsgKnB4cGNzID0gZGF0YTsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZweHBj cy0+cGRldi0+ZGV2Owo+ICsKPiArCXBoeV9wb3dlcl9vZmYocHhwY3MtPnNlcmRlc19waHkpOwo+ ICsJcGh5X2V4aXQocHhwY3MtPnNlcmRlc19waHkpOwo+ICsKPiArCWRldl9wbV9nZW5wZF9ycG1f YWx3YXlzX29uKGRldiwgZmFsc2UpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHhwY3Nfcmtfc2Vy ZGVzX3BoeV9wb3dlcm9uKHN0cnVjdCBkd194cGNzX3JrICpweHBjcykKPiArewo+ICsJc3RydWN0 IGRldmljZSAqZGV2ID0gJnB4cGNzLT5wZGV2LT5kZXY7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCS8q Cj4gKwkgKiBUaGUgcG93ZXIgZG9tYWluIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGVuYWJsZWQs IHdoaWNoIGFsbG93cyB1cyB0bwo+ICsJICogZHluYW1pY2FsbHkgdHVybiB0aGUgQ1NSIGNsb2Nr IG9uL29mZiB1c2luZyBQTSB3aGlsZSBrZWVwaW5nIHRoZSBQQ1MKPiArCSAqIHBvd2VyZWQgb24u Cj4gKwkgKi8KPiArCXJldCA9IGRldl9wbV9nZW5wZF9ycG1fYWx3YXlzX29uKGRldiwgdHJ1ZSk7 Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcG93ZXIgb24gcG93 ZXItZG9tYWluc1xuIik7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlyZXQgPSBwaHlf aW5pdChweHBjcy0+c2VyZGVzX3BoeSk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2VycihkZXYs ICJGYWlsZWQgdG8gaW5pdCBTZXJEZXMgUEhZXG4iKTsKPiArCQlnb3RvIHBtX2RvbWFpbjsKPiAr CX0KPiArCj4gKwlyZXQgPSBwaHlfcG93ZXJfb24ocHhwY3MtPnNlcmRlc19waHkpOwo+ICsJaWYg KHJldCkgewo+ICsJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHBvd2VyIG9uIFNlckRlcyBQSFlc biIpOwo+ICsJCWdvdG8gc2VyZGVzX3BoeTsKPiArCX0KPiArCj4gKwlyZXQgPSBkZXZtX2FkZF9h Y3Rpb25fb3JfcmVzZXQoZGV2LCB4cGNzX3JrX3NlcmRlc19waHlfcG93ZXJvZmYsIHB4cGNzKTsK PiArCWlmIChyZXQpIHsKPiArCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBkZXZt IGZvciBTZXJEZXMgUEhZOiAlZFxuIiwgcmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsK PiArCXJldHVybiAwOwo+ICsKPiArc2VyZGVzX3BoeToKPiArCXBoeV9leGl0KHB4cGNzLT5zZXJk ZXNfcGh5KTsKPiArcG1fZG9tYWluOgo+ICsJZGV2X3BtX2dlbnBkX3JwbV9hbHdheXNfb24oZGV2 LCBmYWxzZSk7Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHhwY3Nfcmtf aW5pdF9yZXMoc3RydWN0IGR3X3hwY3NfcmsgKnB4cGNzKQo+ICt7Cj4gKwlzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2ID0gcHhwY3MtPnBkZXY7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAm cGRldi0+ZGV2Owo+ICsJc3RydWN0IHJlc291cmNlICpyZXM7Cj4gKwo+ICsJcmVzID0gcGxhdGZv cm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKPiArCWlmICghcmVzKSB7 Cj4gKwkJZGV2X2VycihkZXYsICJObyByZWctc3BhY2UgZm91bmRcbiIpOwo+ICsJCXJldHVybiAt RUlOVkFMOwo+ICsJfQo+ICsKPiArCWlmIChyZXNvdXJjZV9zaXplKHJlcykgPCBTWl8yTSkgewo+ ICsJCWRldl9lcnIoZGV2LCAiSW52YWxpZCByZWctc3BhY2Ugc2l6ZVxuIik7Cj4gKwkJcmV0dXJu IC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJcHhwY3MtPnJlZ19iYXNlID0gZGV2bV9pb3JlbWFwX3Jl c291cmNlKGRldiwgcmVzKTsKPiArCWlmIChJU19FUlIocHhwY3MtPnJlZ19iYXNlKSkgewo+ICsJ CWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIG1hcCByZWctc3BhY2VcbiIpOwo+ICsJCXJldHVybiBQ VFJfRVJSKHB4cGNzLT5yZWdfYmFzZSk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIHhwY3NfcmtfZXhpdF9jbGsodm9pZCAqZGF0YSkKPiArewo+ICsJc3Ry dWN0IGR3X3hwY3NfcmsgKnB4cGNzID0gZGF0YTsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZw eHBjcy0+cGRldi0+ZGV2Owo+ICsKPiArCXBtX3J1bnRpbWVfZm9yY2Vfc3VzcGVuZChkZXYpOwo+ ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHB4cGNzLT5lZWVfY2xrKTsKPiArfQo+ICsKPiArc3Rh dGljIGludCB4cGNzX3JrX2luaXRfY2xrKHN0cnVjdCBkd194cGNzX3JrICpweHBjcykKPiArewo+ ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJnB4cGNzLT5wZGV2LT5kZXY7Cj4gKwl1bnNpZ25lZCBs b25nIHJhdGU7Cj4gKwl1NjQgbXVsdDsKPiArCWludCByZXQ7Cj4gKwo+ICsJcHhwY3MtPmNzcl9j bGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAiY3NyIik7Cj4gKwlpZiAoSVNfRVJSKHB4cGNzLT5jc3Jf Y2xrKSkKPiArCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIocHhwY3MtPmNzcl9j bGspLAo+ICsJCQkJCSAiRmFpbGVkIHRvIGdldCBDU1IgY2xvY2tcbiIpOwo+ICsKPiArCXB4cGNz LT5lZWVfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgImVlZSIpOwo+ICsJaWYgKElTX0VSUihweHBj cy0+ZWVlX2NsaykpCj4gKwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHB4cGNz LT5lZWVfY2xrKSwKPiArCQkJCQkgIkZhaWxlZCB0byBnZXQgRUVFIGNsb2NrXG4iKTsKPiArCj4g KwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHhwY3MtPmVlZV9jbGspOwo+ICsJaWYgKHJldCkg ewo+ICsJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBFRUUgY2xvY2tcbiIpOwo+ICsJ CXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcG1fcnVudGltZV9zZXRfc3VzcGVuZGVkKGRldik7 Cj4gKwlwbV9ydW50aW1lX2VuYWJsZShkZXYpOwo+ICsKPiArCXJldCA9IGRldm1fYWRkX2FjdGlv bl9vcl9yZXNldChkZXYsIHhwY3NfcmtfZXhpdF9jbGssIHB4cGNzKTsKPiArCWlmIChyZXQpIHsK PiArCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBkZXZtIGZvciBFRUUgY2xvY2s6 ICVkXG4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJLyoKPiArCSAqIENv bXB1dGUgdGhlIG11bHRpcGxpZXIgZm9yIHRoZSBFRUUgY2xvY2sgc28gdGhhdAo+ICsJICogY2xr X2VlZV9wZXJpb2QgKiAobXVsdF9mYWN0ICsgMSkgZmFsbHMgd2l0aGluIDgwLi4xMjAgbnMuCj4g KwkgKgo+ICsJICogT24gUkszNTY4LCBjbGtfeHBjc19lZWUgaXMgbXV4ZWQgYmV0d2VlbiBncGxs MjAwICgyMDAgTUh6LCA1IG5zKQo+ICsJICogYW5kIGNwbGwxMjUgKDEyNSBNSHosIDggbnMpLCBz ZWxlY3RlZCBieSBDUlVfQ0xLU0VMX0NPTjI5IGJpdCAxMy4KPiArCSAqIFRoZSByZXNldCB2YWx1 ZSBpcyAwICgyMDAgTUh6KSwgYnV0IGRlcml2ZSB0aGUgdmFsdWUgYXQgcnVudGltZSB0bwo+ICsJ ICogc3RheSBjb3JyZWN0IGlmIHRoZSBtdXggaXMgY2hhbmdlZCBieSBhIGJvYXJkLgo+ICsJICoK PiArCSAqIFVzZSBhIDY0LWJpdCBpbnRlcm1lZGlhdGU6IG9uIDMyLWJpdCBidWlsZHMsIDEwMCAq IDIwMDAwMDAwMAo+ICsJICogZG9lcyBub3QgZml0IGluIHVuc2lnbmVkIGxvbmcuIENsYW1wIHRv IHRoZSA0LWJpdAo+ICsJICogRFdfVlJfTUlJX0VFRV9NVUxUX0ZBQ1RfMTAwTlMgZmllbGQuCj4g KwkgKi8KPiArCXJhdGUgPSBjbGtfZ2V0X3JhdGUocHhwY3MtPmVlZV9jbGspOwo+ICsJaWYgKCFy YXRlKQo+ICsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVJTlZBTCwgIkludmFsaWQgRUVF IGNsb2NrIHJhdGVcbiIpOwo+ICsKPiArCW11bHQgPSBESVZfUk9VTkRfQ0xPU0VTVF9VTEwoMTAw VUxMICogcmF0ZSwgTlNFQ19QRVJfU0VDKSAtIDE7Cj4gKwlweHBjcy0+ZWVlX211bHRfZmFjdCA9 IG1pbl90KHU2NCwgbXVsdCwgMTUpOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBp bnQgeHBjc19ya19pbml0X2J1cyhzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MpCj4gK3sKPiArCXN0 cnVjdCBkZXZpY2UgKmRldiA9ICZweHBjcy0+cGRldi0+ZGV2Owo+ICsJc3RhdGljIGF0b21pY190 IGlkID0gQVRPTUlDX0lOSVQoLTEpOwo+ICsJc3RydWN0IG1paV9idXMgKmJ1czsKPiArCWludCBy ZXQ7Cj4gKwo+ICsJYnVzID0gZGV2bV9tZGlvYnVzX2FsbG9jX3NpemUoZGV2LCAwKTsKPiArCWlm ICghYnVzKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWJ1cy0+bmFtZSA9ICJSb2NrY2hp cCBEVyBYUENTIE1DSS9BUEIzIjsKPiArCWJ1cy0+cmVhZCA9IHhwY3NfcmtfcmVhZF9jMjI7Cj4g KwlidXMtPndyaXRlID0geHBjc19ya193cml0ZV9jMjI7Cj4gKwlidXMtPnJlYWRfYzQ1ID0geHBj c19ya19yZWFkX2M0NTsKPiArCWJ1cy0+d3JpdGVfYzQ1ID0geHBjc19ya193cml0ZV9jNDU7Cj4g KwlidXMtPnBoeV9tYXNrID0gfjA7Cj4gKwlidXMtPnBhcmVudCA9IGRldjsKPiArCWJ1cy0+cHJp diA9IHB4cGNzOwo+ICsKPiArCXNucHJpbnRmKGJ1cy0+aWQsIE1JSV9CVVNfSURfU0laRSwKPiAr CQkgInJvY2tjaGlwX2R3eHBjcy0leCIsIGF0b21pY19pbmNfcmV0dXJuKCZpZCkpOwo+ICsKPiAr CS8qCj4gKwkgKiBNRElPLWJ1cyBoZXJlIHNlcnZlcyBhcyBqdXN0IGEgYmFjay1lbmQgZW5naW5l IGFic3RyYWN0aW5nIG91dAo+ICsJICogdGhlIE1ESU8gYW5kIE1DSS9BUEIzIElPIGludGVyZmFj ZXMgdXRpbGl6ZWQgZm9yIHRoZSBSb2NrY2hpcCBEV1hQQ1MgQ1NScwo+ICsJICogYWNjZXNzLgo+ ICsJICovCj4gKwlyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBidXMpOwo+ICsJaWYg KHJldCkgewo+ICsJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGNyZWF0ZSBNRElPIGJ1c1xuIik7 Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlweHBjcy0+YnVzID0gYnVzOwo+ICsJcmV0 dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgeHBjc19ya19wcm9iZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3M7Cj4gKwlp bnQgcmV0Owo+ICsKPiArCXB4cGNzID0geHBjc19ya19jcmVhdGVfZGF0YShwZGV2KTsKPiArCWlm IChJU19FUlIocHhwY3MpKQo+ICsJCXJldHVybiBQVFJfRVJSKHB4cGNzKTsKPiArCj4gKwkvKgo+ ICsJICogVGhlIFhQQ1MgbWF5IGJlIGF0dGFjaGVkIHRvIGEgcG93ZXIgZG9tYWluIChlLmcuIFBE X1BJUEUpLiBUaGUgZG9tYWluCj4gKwkgKiBtdXN0IGJlIHBvd2VyZWQgb24gYmVmb3JlIGFueSBy ZWdpc3RlciBhY2Nlc3MsIG90aGVyd2lzZSB0aGUgU29DIHdpbGwKPiArCSAqIHRyaWdnZXIgYSBz eW5jaHJvbm91cyBleHRlcm5hbCBhYm9ydCAoU0Vycm9yKS4KPiArCSAqCj4gKwkgKiBBY2Nlc3Np bmcgdGhlIFhQQ1MgcmVnaXN0ZXJzIGFsc28gcmVxdWlyZXMgYSBUWCBjbG9jayBmcm9tIHRoZSBT ZXJEZXMsCj4gKwkgKiB3aGljaCBpcyBuZWVkZWQgZm9yIHRoZSBzb2Z0IHJlc2V0Lgo+ICsJICov Cj4gKwlyZXQgPSB4cGNzX3JrX3NlcmRlc19waHlfaW5pdChweHBjcyk7Cj4gKwlpZiAocmV0KQo+ ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0ID0geHBjc19ya19zZXJkZXNfcGh5X3Bvd2Vyb24o cHhwY3MpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCXJldCA9IHhwY3Nf cmtfaW5pdF9yZXMocHhwY3MpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiAr CXJldCA9IHhwY3NfcmtfaW5pdF9jbGsocHhwY3MpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4g cmV0Owo+ICsKPiArCXJldCA9IHhwY3NfcmtfaW5pdF9idXMocHhwY3MpOwo+ICsJaWYgKHJldCkK PiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29u c3Qgc3RydWN0IG9mX2RldmljZV9pZCB4cGNzX3JrX29mX2lkc1tdID0gewo+ICsJeyAuY29tcGF0 aWJsZSA9ICJyb2NrY2hpcCxyazM1NjgteHBjcyIgfSwKPiArCXsgLyogc2VudGluZWwgKi8gfSwK PiArfTsKPiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgeHBjc19ya19vZl9pZHMpOwo+ICsKPiAr c3RydWN0IGR3X3hwY3MgKnhwY3NfcmtfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0 IGRldmljZV9ub2RlICpucCkKPiArewo+ICsJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsK PiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGNzX25wOwo+ICsJc3RydWN0IGR3X3hwY3NfcmsgKnB4 cGNzOwo+ICsJc3RydWN0IGR3X3hwY3MgKnhwY3M7Cj4gKwl1MzIgcG9ydDsKPiArCj4gKwlpZiAo IW9mX2RldmljZV9pc19hdmFpbGFibGUobnApKQo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYp Owo+ICsKPiArCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgInJlZyIsICZwb3J0KSkKPiAr CQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPiArCj4gKwlpZiAoIXhwY3NfcmtfbWRpb19hZGRy X3ZhbGlkYXRlKChpbnQpcG9ydCkpCj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cj4gKwo+ ICsJLyogVGhlIFhQQ1MgcGRldiBpcyBhdHRhY2hlZCB0byB0aGUgcGFyZW50IG5vZGUgKi8KPiAr CXBjc19ucCA9IG9mX2dldF9wYXJlbnQobnApOwo+ICsJaWYgKCFwY3NfbnApCj4gKwkJcmV0dXJu IEVSUl9QVFIoLUVOT0RFVik7Cj4gKwo+ICsJaWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKHBj c19ucCkpIHsKPiArCQlvZl9ub2RlX3B1dChwY3NfbnApOwo+ICsJCXJldHVybiBFUlJfUFRSKC1F Tk9ERVYpOwo+ICsJfQo+ICsKPiArCWlmICghb2ZfbWF0Y2hfbm9kZSh4cGNzX3JrX29mX2lkcywg cGNzX25wKSkgewo+ICsJCW9mX25vZGVfcHV0KHBjc19ucCk7Cj4gKwkJcmV0dXJuIEVSUl9QVFIo LUVJTlZBTCk7Cj4gKwl9Cj4gKwo+ICsJcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUocGNz X25wKTsKPiArCW9mX25vZGVfcHV0KHBjc19ucCk7Cj4gKwlpZiAoIXBkZXYpCj4gKwkJcmV0dXJu IEVSUl9QVFIoLUVQUk9CRV9ERUZFUik7Cj4gKwo+ICsJaWYgKCFkZXZpY2VfbGlua19hZGQoZGV2 LCAmcGRldi0+ZGV2LCBETF9GTEFHX0FVVE9SRU1PVkVfQ09OU1VNRVIpKSB7Cj4gKwkJcHV0X2Rl dmljZSgmcGRldi0+ZGV2KTsKPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiArCX0KPiAr Cj4gKwlweHBjcyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwo+ICsJaWYgKCFweHBjcyB8 fCAhcHhwY3MtPmJ1cykgewo+ICsJCWRldmljZV9saW5rX3JlbW92ZShkZXYsICZwZGV2LT5kZXYp Owo+ICsJCXB1dF9kZXZpY2UoJnBkZXYtPmRldik7Cj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVQUk9C RV9ERUZFUik7Cj4gKwl9Cj4gKwo+ICsJeHBjcyA9IHhwY3NfY3JlYXRlX21kaW9kZXYocHhwY3Mt PmJ1cywgKGludClwb3J0KTsKPiArCWlmIChJU19FUlIoeHBjcykpIHsKPiArCQlkZXZpY2VfbGlu a19yZW1vdmUoZGV2LCAmcGRldi0+ZGV2KTsKPiArCQlwdXRfZGV2aWNlKCZwZGV2LT5kZXYpOwo+ ICsJCXJldHVybiB4cGNzOwo+ICsJfQo+ICsKPiArCXhwY3NfY29uZmlnX2VlZV9tdWx0X2ZhY3Qo eHBjcywgcHhwY3MtPmVlZV9tdWx0X2ZhY3QpOwo+ICsJcHV0X2RldmljZSgmcGRldi0+ZGV2KTsK PiArCXJldHVybiB4cGNzOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0xfR1BMKHhwY3NfcmtfY3JlYXRl KTsKPiArCj4gK3N0YXRpYyBpbnQgeHBjc19ya19wbV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRl dmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZHdfeHBjc19yayAqcHhwY3MgPSBkZXZfZ2V0X2Ry dmRhdGEoZGV2KTsKPiArCj4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUocHhwY3MtPmNzcl9jbGsp Owo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHhwY3NfcmtfcG1fcnVu dGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZHdfeHBjc19y ayAqcHhwY3MgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiArCj4gKwlyZXR1cm4gY2xrX3ByZXBh cmVfZW5hYmxlKHB4cGNzLT5jc3JfY2xrKTsKPiArfQo+ICsKPiArc3RhdGljIERFRklORV9SVU5U SU1FX0RFVl9QTV9PUFMoeHBjc19ya19wbV9vcHMsCj4gKwkJCSAgIHhwY3NfcmtfcG1fcnVudGlt ZV9zdXNwZW5kLAo+ICsJCQkgICB4cGNzX3JrX3BtX3J1bnRpbWVfcmVzdW1lLAo+ICsJCQkgICBO VUxMKTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHhwY3NfcmtfZHJpdmVy ID0gewo+ICsJLnByb2JlID0geHBjc19ya19wcm9iZSwKPiArCS5kcml2ZXIgPSB7Cj4gKwkJLm5h bWUgPSAicmtfeHBjcy1kd3hwY3MiLAo+ICsJCS5wbSA9IHBtX3B0cigmeHBjc19ya19wbV9vcHMp LAo+ICsJCS5vZl9tYXRjaF90YWJsZSA9IHhwY3Nfcmtfb2ZfaWRzLAo+ICsJfSwKPiArfTsKPiAr bW9kdWxlX3BsYXRmb3JtX2RyaXZlcih4cGNzX3JrX2RyaXZlcik7Cj4gKwo+ICtNT0RVTEVfREVT Q1JJUFRJT04oIlJvY2tjaGlwIFhQQ1MgcGxhdGZvcm0gZGV2aWNlIGRyaXZlciIpOwo+ICtNT0RV TEVfQVVUSE9SKCJDb2lhIFByYW50IDxjb2lhcHJhbnRAZ21haWwuY29tPiIpOwo+ICtNT0RVTEVf TElDRU5TRSgiR1BMIik7CgpbU2V2ZXJpdHk6IExvd10KSXMgdGhlICItIDEiIGhlcmUgc2FmZSBm b3IgZXZlcnkgcmF0ZSBjbGtfZ2V0X3JhdGUoKSBjYW4gcmV0dXJuPwoKbXVsdCBpcyB1NjQsIHNv IGlmIHRoZSBFRUUgY2xvY2sgZW5kcyB1cCBzbG93ZXIgdGhhbiB+NSBNSHogKGEKbWlzLWRlc2Ny aWJlZCBjbG9jayBpbiBEVCwgYSBtdXggbGVmdCBpbiBhbiB1bmV4cGVjdGVkIHBvc2l0aW9uLCBh CmJvYXJkIHRoYXQgcmVwYXJlbnRzIGNsa194cGNzX2VlZSkgdGhlbgpESVZfUk9VTkRfQ0xPU0VT VF9VTEwoMTAwVUxMICogcmF0ZSwgTlNFQ19QRVJfU0VDKSBldmFsdWF0ZXMgdG8gMCBhbmQKdGhl IHN1YnRyYWN0aW9uIHdyYXBzIHRvIFU2NF9NQVguICBUaGUgY2xhbXAgb24gdGhlIG5leHQgbGlu ZSBkb2VzIG5vdApjYXRjaCB0aGF0OiBtaW5fdCh1NjQsIG11bHQsIDE1KSBjb21wYXJlcyBVNjRf TUFYIGFnYWluc3QgMTUgYW5kIGtlZXBzCjE1LCBzbyB0aGUgc2xvd2VzdCBwb3NzaWJsZSBjbG9j ayBwcm9ncmFtcyB0aGUgbGFyZ2VzdApEV19WUl9NSUlfRUVFX01VTFRfRkFDVF8xMDBOUyB2YWx1 ZSBpbnN0ZWFkIG9mIHRoZSBzbWFsbGVzdC4gIFRoZSBvbmx5CnJhdGUgdGhhdCBpcyByZWplY3Rl ZCB0b2RheSBpcyBleGFjdGx5IDAsIHZpYSB0aGUgIXJhdGUgY2hlY2sganVzdAphYm92ZS4KClNv IHRoZSBmYWlsdXJlIG1vZGUgaXMgdGhlIG9wcG9zaXRlIG9mIHdoYXQgdGhlIGNvbW1lbnQgaW50 ZW5kczoKY2xrX2VlZV9wZXJpb2QgKiAobXVsdF9mYWN0ICsgMSkgd291bGQgYmUgZmFyIG91dHNp ZGUgdGhlIDgwLi4xMjAgbnMKd2luZG93IHJhdGhlciB0aGFuIGNsYW1wZWQgdG8gdGhlIG5lYXJl c3QgZW5kIG9mIGl0LgoKV291bGQgaXQgYmUgY2xlYXJlciB0byBjb21wdXRlIHRoZSBwcm9kdWN0 IGZpcnN0IGFuZCBjbGFtcCBiZWZvcmUKZGVjcmVtZW50aW5nLCBlLmcuIGtlZXAgdGhlIERJVl9S T1VORF9DTE9TRVNUX1VMTCgpIHJlc3VsdCBpbiBtdWx0LApjbGFtcCBpdCBpbnRvIDEuLjE2LCBh bmQgb25seSB0aGVuIHN1YnRyYWN0IDE/ICBPciwgaWYgYSByYXRlIHRoYXQgbG93CmlzIHNpbXBs eSBub3QgYSB2YWxpZCBjb25maWd1cmF0aW9uIGZvciB0aGlzIGJsb2NrLCBzaG91bGQKeHBjc19y a19pbml0X2NsaygpIHJlamVjdCBpdCB3aXRoIGRldl9lcnJfcHJvYmUoKSB0aGUgd2F5IGl0IGFs cmVhZHkKcmVqZWN0cyByYXRlID09IDAsIHJhdGhlciB0aGFuIHNpbGVudGx5IHBpY2tpbmcgYSBt dWx0aXBsaWVyPwoKLS0gClNhc2hpa28gQUkgcmV2aWV3IMK3IGh0dHBzOi8vbmV0ZGV2LWFpLmJv dHMubGludXguZGV2L3Nhc2hpa28vIy9wYXRjaHNldC8yMDI2MDkxNTEyMzgwMi4xNTYxNzI0LTEt Y29pYXByYW50JTQwZ21haWwuY29tCgotLSAKbGludXgtcGh5IG1haWxpbmcgbGlzdApsaW51eC1w aHlAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwczovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1h bi9saXN0aW5mby9saW51eC1waHkK