From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 67310606A31A for ; Thu, 22 Oct 2026 06:01:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key, unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=LarxhVyA; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20260515 header.b=P5ukIY0p 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:MIME-Version:Reply-To:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:Date:References: In-Reply-To:Cc:To:Subject:From:Message-ID:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=mM2mfmop8bzfjNI8lrJKaPIk7lVrUc7zYr/8KO3OriE=; b=LarxhVyAwUKWSE vtQdMpZYKa7vcdYrifqA1SncWHzPV9T096jPWzm/+LxaR5HviPdy3XMYGWw/wkVHcUpjo8830qCYC KjP6gwptwOeDMXwqBxVgjtKeYjX22CiFfvEoCmAJhFjjWcNR1fSs4hu5xQDoDDcHQZJzbXHI+0VXL YwRw1P24pwfFhZQZSW+RFk9nxViyXTp86PbfuQpzVAyGBiVDhT1lBL6bCvp4uHXvwHuhX8IAcptU9 7WwReqIBBzH+MTIbPXfo9cJUuhxfVFJigDnB1pKgdxJAut+a2Clhazt3sHU8l8u8kyjfmwbiZMhvy WdX6eFdjpwsacxvx35rg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1xJlrd-0000000DRLl-3WME; Thu, 22 Oct 2026 06:01:21 +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 1xJlrc-0000000DRLX-16th for linux-amlogic@lists.infradead.org; Thu, 22 Oct 2026 06:01:20 +0000 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id B2B7140545; Thu, 22 Oct 2026 06:01:19 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2A3541F000C1; Thu, 22 Oct 2026 06:01:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1792648879; bh=4UYII/jxqMf0Quc8mwHI4jTBZTgUQarKMX32yAjEysA=; h=From:Subject:Reply-To:To:Cc:In-Reply-To:References:Date; b=P5ukIY0pmciuJ3ESYXxuJNznGL7xRM+JIpLf9K9mdsPenrSQKjyE3WMkSv0DxwM7J LjVSNmcoBK8HSzI5CAbXmriLh/96UNe+JSKHwYYcv4zpx6zBsgxnRaC2AllYbVH2+J vLg8lJ+LnyChlUXWHkyXLiTGFJmYzCP6+qVo85Ao8hsqt7n6HR8DFyc2Hugm2djc2a RntP6YgLuGX2rkbxVDHcQDL/op4RN7AupXvyi86M4T6Kuowmk0jTy0ajmRxwrXkkgG yArE+JABw1PsmD/i0k3QjVuXTTu98bXWazooY4VFBc9TTSNrEuuaSe63KAjMJCOd8/ FXKx8st78VODw== Message-ID: From: sashiko-bot@kernel.org Subject: Re: [PATCH v12 5/6] arm64: dts: amlogic: Add video decoder driver support for S4 SOCs To: "Zhentao Guo" Cc: linux-amlogic@lists.infradead.org, devicetree@vger.kernel.org, robh@kernel.org, conor+dt@kernel.org, neil.armstrong@linaro.org, media-ci@linuxtv.org In-Reply-To: <20261022-b4-s4-vdec-upstream-v12-5-616240978792@amlogic.com> References: <20261022-b4-s4-vdec-upstream-v12-0-616240978792@amlogic.com> <20261022-b4-s4-vdec-upstream-v12-5-616240978792@amlogic.com> Date: Thu, 22 Oct 2026 06:01:18 +0000 X-BeenThere: linux-amlogic@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: sashiko-reviews@lists.linux.dev X-Archived-By: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-amlogic" X-Spam-Status: No, score=-8.9 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=4.0.1 X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on aws-us-west-2-korg-listserv-alma10-1 VGhhbmsgeW91IGZvciB5b3VyIGNvbnRyaWJ1dGlvbiEgU2FzaGlrbyBBSSByZXZpZXcgZm91bmQg MTMgcG90ZW50aWFsIGlzc3VlKHMpIHRvIGNvbnNpZGVyOgotIFtDcml0aWNhbF0gbWVkaWE6IGFt bG9naWM6IHZkZWM6IE9PQiByZWFkIGFuZCBjYW52YXMgbGVha3MgaW4gaDI2NCByZWZlcmVuY2Ug bGlzdCBoYW5kbGluZwotIFtDcml0aWNhbF0gbWVkaWE6IGFtbG9naWM6IHZkZWM6IGNvbG9jYXRl IGJ1ZmZlciBPT0IgRE1BIHdyaXRlIGluIGgyNjRfY29uZmlnX2RlY29kZV9idWYoKQotIFtIaWdo XSBtZWRpYTogYW1sb2dpYzogdmRlYzogYW1sX3ZkZWNfaW5pdF9kZWNfaW5zdCgpIHJldHVybnMg LTEgb24gcXVldWUgcmVzdGFydAotIFtIaWdoXSBtZWRpYTogYW1sb2dpYzogdmRlYzogaW52YWxp ZCBJU19FUlIoKSBjaGVjayBvbiBtZXNvbl9zbV9nZXQoKSBpbiBwcm9iZQotIFtIaWdoXSBtZWRp YTogYW1sb2dpYzogdmRlYzogcG9jX2lzX2luX2RwYigpIGFuZCBnZXRfZHBiX2J5X3BvYygpIGln bm9yZSBhY3RpdmUgZmxhZwotIFtIaWdoXSBtZWRpYTogYW1sb2dpYzogdmRlYzogZG9zIGNsb2Nr IGluIHZkZWNfY2xvY2tfZ2F0ZV9pbml0KCkgaXMgbmV2ZXIgZW5hYmxlZAotIFtIaWdoXSBtZWRp YTogYW1sb2dpYzogdmRlYzogaWdub3JlZCBwb3dlciBhbmQgY2xvY2sgZXJyb3JzIGluIGFtbF92 ZGVjX2h3LmMKLSBbSGlnaF0gbWVkaWE6IGFtbG9naWM6IHZkZWM6IGFtbF92ZGVjX2Rydl9yZW1v dmUoKSBwb3dlcnMgb2ZmIGh3IGJlZm9yZSB1bnJlZ2lzdGVyaW5nCi0gW0hpZ2hdIG1lZGlhOiBh bWxvZ2ljOiB2ZGVjOiBicm9rZW4gVEVFIGRlZmVycmFsIGFuZCBlcnJvciBjb2RlcyBpbiBhbWxf dmRlY190ZWVfZncuYwotIFtIaWdoXSBtZWRpYTogYW1sb2dpYzogdmRlYzogaW5maW5pdGUgcG9s bCB1bmRlciBjdHhfbXV0ZXggaW4gaDI2NF9jb25maWdfZGVjb2RlX2J1ZigpCi0gW01lZGl1bV0g bWVkaWE6IGFtbG9naWM6IHZkZWM6IG1pc3NpbmcgUkVHTUFQX01NSU8gYW5kIE1FRElBX0NPTlRS T0xMRVIgc2VsZWN0cwotIFtNZWRpdW1dIG1lZGlhOiBhbWxvZ2ljOiB2ZGVjOiBhbWxfdmRlY19k cnZfcHJvYmUoKSByZWdpc3RlcnMgdmlkZW9fZGV2aWNlIHRvbyBlYXJseQotIFtNZWRpdW1dIG1l ZGlhOiBhbWxvZ2ljOiB2ZGVjOiBtaXNzaW5nIHNldF9waWNfaW5mbygpIGluIHJlc2V0X291dHB1 dF9mbXRzKCkKLS0KCmNvbW1pdCA3ZDc3YjBlNTU2MGRkNmY3YzlmZGQ0NjVjMDBmZmZkZmY5MWM3 ZTU1CkF1dGhvcjogWmhlbnRhbyBHdW8gPHpoZW50YW8uZ3VvQGFtbG9naWMuY29tPgoKYXJtNjQ6 IGR0czogYW1sb2dpYzogQWRkIHZpZGVvIGRlY29kZXIgZHJpdmVyIHN1cHBvcnQgZm9yIFM0IFNP Q3MKClRoaXMgc2VyaWVzIGFkZHMgdGhlIEFtbG9naWMgUzQgVjRMMiBzdGF0ZWxlc3MgSC4yNjQg dmlkZW8gZGVjb2RlciBkcml2ZXIgaW4KY29tbWl0IDE4YTExYjJjNzBhN2VmNTVjNDJlZDg5N2Jj MTYyNDM5N2VjMzQzMGMgKCJkZWNvZGVyOiBBZGQgVjRMMiBzdGF0ZWxlc3MKSC4yNjQgZGVjb2Rl ciBkcml2ZXIiKSBhbmQgZW5hYmxlcyB0aGUgY29ycmVzcG9uZGluZyB2ZGVjLCBjYW52YXMsIGFu ZCBvcHRlZQpkZXZpY2UgdHJlZSBub2RlcyBpbiBtZXNvbi1zNC5kdHNpLgoKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbWxvZ2ljL3ZkZWMvS2NvbmZpZyBiL2RyaXZlcnMv bWVkaWEvcGxhdGZvcm0vYW1sb2dpYy92ZGVjL0tjb25maWcKPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NAo+IGluZGV4IDAwMDAwMDAwMDAwMDAuLjJjNWRkODQ1Mjk2MjEKPiAtLS0gL2Rldi9udWxsCj4g KysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbWxvZ2ljL3ZkZWMvS2NvbmZpZwo+IEBAIC0w LDAgKzEsMTggQEAKPiArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBP UiBNSVQpCj4gKwo+ICtjb25maWcgVklERU9fQU1MT0dJQ19WREVDCj4gKyAgICB0cmlzdGF0ZSAi QW1sb2dpYyBWaWRlbyBEZWNvZGVyIERyaXZlciIKPiArICAgIGRlcGVuZHMgb24gQVJDSF9NRVNP TiB8fCBDT01QSUxFX1RFU1QKPiArICAgIGRlcGVuZHMgb24gVklERU9fREVWCj4gKyAgICBkZXBl bmRzIG9uIFY0TF9NRU0yTUVNX0RSSVZFUlMKPiArICAgIGRlcGVuZHMgb24gVEVFCj4gKyAgICBk ZXBlbmRzIG9uIE1FU09OX1NNCj4gKyAgICBzZWxlY3QgVklERU9CVUYyX0RNQV9DT05USUcKPiAr ICAgIHNlbGVjdCBWNEwyX0gyNjQKPiArICAgIHNlbGVjdCBWNEwyX01FTTJNRU1fREVWCj4gKyAg ICBzZWxlY3QgTUVTT05fQ0FOVkFTCgpbU2V2ZXJpdHk6IE1lZGl1bV0KU2hvdWxkIFZJREVPX0FN TE9HSUNfVkRFQyBhbHNvIHNlbGVjdCBSRUdNQVBfTU1JTyBhbmQgTUVESUFfQ09OVFJPTExFUiBo ZXJlPwoKSW4gZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbWxvZ2ljL3ZkZWMvYW1sX3ZkZWNfaHcu YywKZGV2X3JlcXVlc3RfaHdfcmVzb3VyY2VzKCkgY2FsbHMgZGV2bV9yZWdtYXBfaW5pdF9tbWlv KCksIHdoaWNoIGZhaWxzIHRvIGxpbmsKd2hlbiBDT05GSUdfUkVHTUFQX01NSU8gaXMgZGlzYWJs ZWQuCgpJbiBhZGRpdGlvbiwgYW1sX3ZkZWNfZHJ2X3Byb2JlKCkgaW4KZHJpdmVycy9tZWRpYS9w bGF0Zm9ybS9hbWxvZ2ljL3ZkZWMvYW1sX3ZkZWNfZHJ2LmMgcmVnaXN0ZXJzIGEgbWVkaWEgZGV2 aWNlCndpdGggYW1sX20ybV9tZWRpYV9vcHMgKHZiMl9yZXF1ZXN0X3ZhbGlkYXRlIGFuZCB2NGwy X20ybV9yZXF1ZXN0X3F1ZXVlKSBmb3IKc3RhdGVsZXNzIEguMjY0IGRlY29kaW5nLCB3aGljaCBj b21waWxlcyB0byBuby1vcCBzdHVicyBpZgpDT05GSUdfTUVESUFfQ09OVFJPTExFUiBpcyBkaXNh YmxlZC4gSW4KZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbWxvZ2ljL3ZkZWMvYW1sX3ZkZWMuYywg c2hvdWxkIGFtbF92ZGVjX3F1ZXVlX2luaXQoKQphbHNvIHNldCBzcmNfdnEtPnJlcXVpcmVzX3Jl cXVlc3RzID0gdHJ1ZSBhbG9uZ3NpZGUKc3JjX3ZxLT5zdXBwb3J0c19yZXF1ZXN0cyA9IHRydWUg c28gbm9uLXJlcXVlc3QgYnVmZmVycyBhcmUgcmVqZWN0ZWQ/CgpbIC4uLiBdCgo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtbG9naWMvdmRlYy9hbWxfdmRlYy5jIGIvZHJp dmVycy9tZWRpYS9wbGF0Zm9ybS9hbWxvZ2ljL3ZkZWMvYW1sX3ZkZWMuYwo+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwMC4uZTY1ZWJiMmNlMzExZgo+IC0tLSAvZGV2 L251bGwKPiArKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtbG9naWMvdmRlYy9hbWxfdmRl Yy5jCgpbIC4uLiBdCgo+ICtzdGF0aWMgaW50IGFtbF92ZGVjX2luaXRfZGVjX2luc3Qoc3RydWN0 IGFtbF92ZGVjX2N0eCAqY3R4KQo+ICt7Cj4gKwlzdHJ1Y3QgYW1sX3ZkZWNfZGV2ICpkZXYgPSBj dHgtPmRldjsKPiArCXN0cnVjdCBhbWxfdmlkZW9fZm10ICpmbXRfb3V0ID0gJmN0eC0+ZGVjX2Zt dFtBTUxfRk1UX1NSQ107Cj4gKwlpbnQgcmV0ID0gLTE7Cj4gKwo+ICsJY3R4LT5jb2RlY19vcHMg PSAmZGV2LT5wdmRlY19kYXRhLT5jb2RlY19vcHNbZm10X291dC0+Y29kZWNfdHlwZV07Cj4gKwkv Kgo+ICsJICogVGhlIGNvZGVjIGluc3RhbmNlIGlzIG9ubHkgcmVsZWFzZWQgd2hlbiBib3RoIHF1 ZXVlcyBhcmUKPiArCSAqIHN0cmVhbWVkIG9mZjogZG8gbm90IGFsbG9jYXRlIGEgbmV3IG9uZSAo bGVha2luZyB0aGUgcHJldmlvdXMKPiArCSAqIGluc3RhbmNlKSB3aGVuIHRoZSBvdXRwdXQgcXVl dWUgaXMgcmVzdGFydGVkIHdoaWxlIHRoZQo+ICsJICogY2FwdHVyZSBxdWV1ZSBpcyBzdGlsbCBz dHJlYW1pbmcuCj4gKwkgKi8KPiArCWlmIChjdHgtPmNvZGVjX29wcy0+aW5pdCAmJiAhY3R4LT5j b2RlY19wcml2KSB7Cj4gKwkJcmV0ID0gY3R4LT5jb2RlY19vcHMtPmluaXQoY3R4KTsKPiArCQlp ZiAocmV0IDwgMCkKPiArCQkJcmV0dXJuIHJldDsKPiArCX0KPiArCWN0eC0+Y3Vycl9kZWNfdHlw ZSA9IGZtdF9vdXQtPmNvZGVjX3R5cGU7Cj4gKwlkZXZfaW5mbygmZGV2LT5wbGF0X2Rldi0+ZGV2 LCAiJXMgc2V0IGN1cnJfZGVjX3R5cGUgJXNcbiIsCj4gKwkJIF9fZnVuY19fLCBkZWNfdHlwZV90 b19uYW1lKGN0eC0+Y3Vycl9kZWNfdHlwZSkpOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KCltT ZXZlcml0eTogSGlnaF0KV2hlbiB0aGUgb3V0cHV0IHF1ZXVlIGlzIHN0b3BwZWQgYW5kIHJlc3Rh cnRlZCB3aGlsZSB0aGUgY2FwdHVyZSBxdWV1ZSByZW1haW5zCnN0cmVhbWluZywgY3R4LT5jb2Rl Y19wcml2IGlzIGFscmVhZHkgbm9uLU5VTEwsIHNvIGFtbF92ZGVjX2luaXRfZGVjX2luc3QoKQpz a2lwcyBjdHgtPmNvZGVjX29wcy0+aW5pdChjdHgpIGFuZCByZXR1cm5zIHRoZSBpbml0aWFsIHJl dCA9IC0xLgoKSW4gdmIyb3BzX3ZkZWNfc3RhcnRfc3RyZWFtaW5nKCk6CgogICAgaWYgKGFtbF92 ZGVjX2luaXRfZGVjX2luc3QoY3R4KSA8IDApIHsKICAgICAgICB3aGlsZSAoKHNyY19idWYgPSB2 NGwyX20ybV9zcmNfYnVmX3JlbW92ZShjdHgtPm0ybV9jdHgpKSkKICAgICAgICAgICAgdjRsMl9t Mm1fYnVmX2RvbmUoc3JjX2J1ZiwgVkIyX0JVRl9TVEFURV9RVUVVRUQpOwogICAgICAgIHJldHVy biAtRUlOVkFMOwogICAgfQoKV29uJ3QgdGhpcyBjYXVzZSB2YjJvcHNfdmRlY19zdGFydF9zdHJl YW1pbmcoKSB0byBhbHdheXMgZmFpbCB3aXRoIC1FSU5WQUwgb24Kb3V0cHV0IHF1ZXVlIHJlc3Rh cnQgdW5sZXNzIHJldCBpcyBpbml0aWFsaXplZCB0byAwIGluCmFtbF92ZGVjX2luaXRfZGVjX2lu c3QoKT8KClsgLi4uIF0KCj4gK3N0YXRpYyBpbnQgdmRlY190cnlfZm10X21wKHN0cnVjdCBhbWxf dmRlY19jdHggKmN0eCwgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUsCj4gKwkJCSAgIHN0cnVjdCB2 NGwyX3BpeF9mb3JtYXRfbXBsYW5lICpwaXhfbXAsCj4gKwkJCSAgIGNvbnN0IHN0cnVjdCBhbWxf dmlkZW9fZm10ICpkZWNfZm10KQo+ICt7Cj4gKwlpbnQgaSwgYWxpZ247Cj4gKwo+ICsJcGl4X21w LT5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKPiArCWFsaWduID0gZGVjX2ZtdC0+YWxpZ247Cj4g Kwo+ICsJaWYgKFY0TDJfVFlQRV9JU19PVVRQVVQodHlwZSkpIHsKPiArCQlwaXhfbXAtPm51bV9w bGFuZXMgPSBkZWNfZm10LT5udW1fcGxhbmVzOwo+ICsJCXBpeF9tcC0+cGl4ZWxmb3JtYXQgPSBk ZWNfZm10LT5mb3VyY2M7Cj4gKwkJaWYgKCFwaXhfbXAtPnBsYW5lX2ZtdFswXS5zaXplaW1hZ2Up Cj4gKwkJCXBpeF9tcC0+cGxhbmVfZm10WzBdLnNpemVpbWFnZSA9Cj4gKwkJCSAgICAocGl4X21w LT5oZWlnaHQgKiBwaXhfbXAtPndpZHRoICogMykgLyAyOwo+ICsJCXBpeF9tcC0+aGVpZ2h0ID0g QUxJR04ocGl4X21wLT5oZWlnaHQsIGFsaWduKTsKPiArCQlwaXhfbXAtPndpZHRoID0gQUxJR04o cGl4X21wLT53aWR0aCwgYWxpZ24pOwo+ICsJfSBlbHNlIHsKPiArCQlwaXhfbXAtPmhlaWdodCA9 IGN0eC0+cGl4X2ZtdFtBTUxfRk1UX1NSQ10uaGVpZ2h0Owo+ICsJCXBpeF9tcC0+d2lkdGggPSBj dHgtPnBpeF9mbXRbQU1MX0ZNVF9TUkNdLndpZHRoOwo+ICsJfQo+ICsKPiArCXY0bDJfYXBwbHlf ZnJtc2l6ZV9jb25zdHJhaW50cygmcGl4X21wLT53aWR0aCwgJnBpeF9tcC0+aGVpZ2h0LAo+ICsJ CQkJICAgICAgICZkZWNfZm10LT5zdGVwd2lzZSk7CgpbIC4uLiBdCgo+ICtzdGF0aWMgaW50IHZk ZWNfc19mbXRfb3V0cHV0KHN0cnVjdCBhbWxfdmRlY19jdHggKmN0eCwgc3RydWN0IHY0bDJfZm9y bWF0ICpmKQo+ICt7Cj4gKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0X21wbGFuZSAqcGl4X21wID0g JmYtPmZtdC5waXhfbXA7Cj4gKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0X21wbGFuZSAqY2FwX2Zt dCA9ICZjdHgtPnBpeF9mbXRbQU1MX0ZNVF9EU1RdOwo+ICsJY29uc3Qgc3RydWN0IGFtbF92aWRl b19mbXQgKm91dF9mbXQ7Cj4gKwlzdHJ1Y3QgdmIyX3F1ZXVlICp2cSwgKnBlZXJfdnE7Cj4gKwlp bnQgcmV0Owo+ICsKPiArCXZxID0gdjRsMl9tMm1fZ2V0X3ZxKGN0eC0+bTJtX2N0eCwgVjRMMl9C VUZfVFlQRV9WSURFT19PVVRQVVRfTVBMQU5FKTsKPiArCWlmICh2YjJfaXNfYnVzeSh2cSkgJiYK PiArCSAgICBwaXhfbXAtPnBpeGVsZm9ybWF0ICE9IGN0eC0+cGl4X2ZtdFtBTUxfRk1UX1NSQ10u cGl4ZWxmb3JtYXQpCj4gKwkJcmV0dXJuIC1FQlVTWTsKPiArCj4gKwkvKgo+ICsJICogU2luY2Ug c19mbXQgb3V0cHV0IHdpbGwgcmVzZXQgdGhlIHdpZHRoIGFuZCBoZWlnaHQgaW4gdGhlIGNhcHR1 cmUgcXVldWUsCj4gKwkgKiBzX2ZtdF9vdXRwdXQgd2l0aCByZXNvbHV0aW9uIGNoYW5nZSBzaG91 bGQgbm90IHRha2UgZWZmZWN0IHdoZW4gY2FwdHVyZQo+ICsJICogcXVldWUgaXMgYnVzeS4KPiAr CSAqLwo+ICsJcGVlcl92cSA9IHY0bDJfbTJtX2dldF92cShjdHgtPm0ybV9jdHgsIFY0TDJfQlVG X1RZUEVfVklERU9fQ0FQVFVSRV9NUExBTkUpOwo+ICsJaWYgKHZiMl9pc19idXN5KHBlZXJfdnEp ICYmCj4gKwkgICAgKHBpeF9tcC0+d2lkdGggIT0gY2FwX2ZtdC0+d2lkdGggfHwKPiArCSAgICBw aXhfbXAtPmhlaWdodCAhPSBjYXBfZm10LT5oZWlnaHQpKQo+ICsJCXJldHVybiAtRUJVU1k7Cgpb IC4uLiBdCgo+ICtzdGF0aWMgdm9pZCByZXNldF9vdXRwdXRfZm10cyhzdHJ1Y3QgYW1sX3ZkZWNf Y3R4ICpjdHgpCj4gK3sKPiArCXN0cnVjdCBhbWxfdmRlY19kZXYgKmRldiA9IGN0eC0+ZGV2Owo+ ICsJY29uc3Qgc3RydWN0IGFtbF92aWRlb19mbXQgKm91dF9mbXQ7Cj4gKwlzdHJ1Y3QgdjRsMl9w aXhfZm9ybWF0X21wbGFuZSBmbXQ7Cj4gKwo+ICsJLyogcmVzZXQgZGVmYXVsdCBvdXRwdXQgZm10 IHRvIFY0TDJfUElYX0ZNVF9IMjY0X1NMSUNFICovCj4gKwlvdXRfZm10ID0gYW1sX3ZkZWNfZ2V0 X3ZpZGVvX2ZtdChkZXYsIFY0TDJfUElYX0ZNVF9IMjY0X1NMSUNFKTsKPiArCWlmICghb3V0X2Zt dCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJY3R4LT5kZWNfZm10W0FNTF9GTVRfU1JDXSA9ICpvdXRf Zm10Owo+ICsKPiArCW1lbXNldCgmZm10LCAwLCBzaXplb2Yoc3RydWN0IHY0bDJfcGl4X2Zvcm1h dF9tcGxhbmUpKTsKPiArCj4gKwlmbXQuaGVpZ2h0ID0gb3V0X2ZtdC0+c3RlcHdpc2UubWluX2hl aWdodDsKPiArCWZtdC53aWR0aCA9IG91dF9mbXQtPnN0ZXB3aXNlLm1pbl93aWR0aDsKPiArCS8q IHJlc2V0IGJ5dGVzcGVybGluZSB0byAwIGZvciBvdXRwdXQgZm10cyAqLwo+ICsJZm10LnBsYW5l X2ZtdFswXS5ieXRlc3BlcmxpbmUgPSAwOwo+ICsJZm10LmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9S U1BBQ0VfREVGQVVMVDsKPiArCWZtdC55Y2Jjcl9lbmMgPSBWNEwyX1lDQkNSX0VOQ19ERUZBVUxU Owo+ICsJZm10LnF1YW50aXphdGlvbiA9IFY0TDJfUVVBTlRJWkFUSU9OX0RFRkFVTFQ7Cj4gKwlm bXQueGZlcl9mdW5jID0gVjRMMl9YRkVSX0ZVTkNfREVGQVVMVDsKPiArCXZkZWNfdHJ5X2ZtdF9t cChjdHgsIFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUX01QTEFORSwgJmZtdCwKPiArCQkJb3V0 X2ZtdCk7Cj4gKwo+ICsJY3R4LT5waXhfZm10W0FNTF9GTVRfU1JDXSA9IGZtdDsKPiArfQoKW1Nl dmVyaXR5OiBNZWRpdW1dCkluIGZvcHNfdmNvZGVjX29wZW4oKSAtPiBhbWxfdmRlY19yZXNldF9m bXRzKCkgLT4gcmVzZXRfb3V0cHV0X2ZtdHMoKSwKc2V0X3BpY19pbmZvKCkgaXMgbm90IGNhbGxl ZCBhZnRlciB2ZGVjX3RyeV9mbXRfbXAoKS4gSWYgdXNlcnNwYWNlIHN0YXJ0cwpzdHJlYW1pbmcg d2l0aG91dCBjYWxsaW5nIHZkZWNfc19mbXRfb3V0cHV0KCksIHdvbid0IGN0eC0+cGljX2luZm8u ZmJfc2l6ZVswXQpyZW1haW4gMCwgY2F1c2luZyBoMjY0X2NvbmZpZ19kZWNvZGVfc3BlYygpIGFu ZCBoMjY0X2NvbmZpZ19yZWZfc3BlYygpIGluCmRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1sb2dp Yy92ZGVjL2gyNjQuYyB0byBzZXQgY19kbWFfYWRkciBlcXVhbCB0bwp5X2RtYV9hZGRyIGZvciBz aW5nbGUtcGxhbmFyIE5WMTIvTlYyMSBjYXB0dXJlIGJ1ZmZlcnM/CgpBbHNvIGluIHZkZWNfdHJ5 X2ZtdF9tcCgpLCBwaXhfbXAtPnBsYW5lX2ZtdFswXS5zaXplaW1hZ2UgaXMgY2FsY3VsYXRlZCBm cm9tCnBpeF9tcC0+aGVpZ2h0ICogcGl4X21wLT53aWR0aCBiZWZvcmUgQUxJR04oKSBhbmQKdjRs Ml9hcHBseV9mcm1zaXplX2NvbnN0cmFpbnRzKCkgY2xhbXAgdGhlIGRpbWVuc2lvbnMsIGFuZCBp bgp2ZGVjX3NfZm10X291dHB1dCgpLCBwaXhfbXAtPndpZHRoIGFuZCBwaXhfbXAtPmhlaWdodCBh cmUgY29tcGFyZWQgYWdhaW5zdCB0aGUKNjQtYWxpZ25lZCBjYXBfZm10IGRpbWVuc2lvbnMgYmVm b3JlIHZkZWNfdHJ5X2ZtdF9tcCgpIGFsaWducyB0aGVtLiBTaG91bGQKc2l6ZWltYWdlIGFuZCB0 aGUgYnVzeSByZXNvbHV0aW9uIGNoZWNrIHVzZSB0aGUgYWxpZ25lZCBhbmQgY2xhbXBlZCBkaW1l bnNpb25zCmluc3RlYWQ/CgpbIC4uLiBdCgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3Bs YXRmb3JtL2FtbG9naWMvdmRlYy9hbWxfdmRlY19kcnYuYyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZv cm0vYW1sb2dpYy92ZGVjL2FtbF92ZGVjX2Rydi5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBp bmRleCAwMDAwMDAwMDAwMDAwLi4xODcwZDU2NjU5Y2Y0Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBi L2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1sb2dpYy92ZGVjL2FtbF92ZGVjX2Rydi5jCgpbIC4u LiBdCgo+ICsJcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHZmZF9kZWMsIFZGTF9UWVBFX1ZJ REVPLCAtMSk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJG YWlsZWQgdG8gcmVnaXN0ZXIgdmlkZW8gZGV2aWNlIik7Cj4gKwkJZ290byBlcnJfdmlkX2Rldl9y ZWdpc3RlcjsKPiArCX0KPiArCj4gKwlkZXYtPm1kZXYuZGV2ID0gJnBkZXYtPmRldjsKPiArCXN0 cnNjcHkoZGV2LT5tZGV2Lm1vZGVsLCBBTUxfVkRFQ19EUlZfTkFNRSwgc2l6ZW9mKGRldi0+bWRl di5tb2RlbCkpOwo+ICsJbWVkaWFfZGV2aWNlX2luaXQoJmRldi0+bWRldik7Cj4gKwlkZXYtPm1k ZXYub3BzID0gJmFtbF9tMm1fbWVkaWFfb3BzOwo+ICsJZGV2LT52NGwyX2Rldi5tZGV2ID0gJmRl di0+bWRldjsKPiArCj4gKwlyZXQgPSB2NGwyX20ybV9yZWdpc3Rlcl9tZWRpYV9jb250cm9sbGVy KGRldi0+bTJtX2Rldl9kZWMsIHZmZF9kZWMsCj4gKwkJCQkJCSBNRURJQV9FTlRfRl9QUk9DX1ZJ REVPX0RFQ09ERVIpOwo+ICsJaWYgKHJldCkgewo+ICsJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2 LCAiRmFpbGVkIHRvIGluaXQgbWVtMm1lbSBtZWRpYSBjb250cm9sbGVyXG4iKTsKPiArCQlnb3Rv IGVycm9yX20ybV9tY19yZWdpc3RlcjsKPiArCX0KPiArCj4gKwlyZXQgPSBtZWRpYV9kZXZpY2Vf cmVnaXN0ZXIoJmRldi0+bWRldik7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJdjRsMl9lcnIoJmRldi0+ djRsMl9kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgbWVkaWEgZGV2aWNlIik7Cj4gKwkJZ290byBl cnJfbWVkaWFfZGV2X3JlZ2lzdGVyOwo+ICsJfQo+ICsJdmRlY19lbmFibGUoZGV2LT5kZWNfaHcp Owo+ICsJcmV0dXJuIDA7CgpbU2V2ZXJpdHk6IE1lZGl1bV0KSW4gYW1sX3ZkZWNfZHJ2X3Byb2Jl KCksIHZpZGVvX3JlZ2lzdGVyX2RldmljZSgpIGV4cG9zZXMgdGhlIHZpZGVvIG5vZGUgdG8KdXNl cnNwYWNlIGJlZm9yZSBkZXYtPnY0bDJfZGV2Lm1kZXYgaXMgaW5pdGlhbGl6ZWQsIGJlZm9yZSB0 aGUgbWVkaWEKY29udHJvbGxlciBlbnRpdGllcyBhcmUgcmVnaXN0ZXJlZCwgYW5kIGJlZm9yZSB2 ZGVjX2VuYWJsZShkZXYtPmRlY19odykgcG93ZXJzCm9uIHRoZSBWREVDIGhhcmR3YXJlIGRvbWFp biBhbmQgY2xvY2suCgpDb3VsZCBhIHVzZXJzcGFjZSBwcm9jZXNzIG9wZW4gdGhlIHZpZGVvIGRl dmljZSBpbW1lZGlhdGVseSBhZnRlcgp2aWRlb19yZWdpc3Rlcl9kZXZpY2UoKSBhbmQgcmFjZSB3 aXRoIG1lZGlhIGNvbnRyb2xsZXIgc2V0dXAgb3IgdHJpZ2dlcgptMm1vcHNfdmRlY19kZXZpY2Vf cnVuKCkgYmVmb3JlIHZkZWNfZW5hYmxlKCkgaGFzIHJ1bj8KClsgLi4uIF0KCj4gK3N0YXRpYyB2 b2lkIGFtbF92ZGVjX2Rydl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiAr ewo+ICsJc3RydWN0IGFtbF92ZGVjX2RldiAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRl dik7Cj4gKwo+ICsJLyoKPiArCSAqIFRoZSBJUlEgaXMgZGV2bS1tYW5hZ2VkIGFuZCBvbmx5IHJl bGVhc2VkIGFmdGVyIHJlbW92ZSgpCj4gKwkgKiByZXR1cm5zOiBtYXNrIGl0IGFuZCB3YWl0IGZv ciBhbnkgaW4tZmxpZ2h0IHRocmVhZGVkIGhhbmRsZXIKPiArCSAqIGJlZm9yZSBwb3dlcmluZyBv ZmYgdGhlIFZERUMgZG9tYWluLCBvdGhlcndpc2UgdGhlIGhhbmRsZXIKPiArCSAqIGNvdWxkIGFj Y2VzcyBwb3dlcmVkLWRvd24gcmVnaXN0ZXJzLgo+ICsJICovCj4gKwlkaXNhYmxlX2lycShkZXYt PmRlY19ody0+ZGVjX2lycSk7Cj4gKwl2ZGVjX2Rpc2FibGUoZGV2LT5kZWNfaHcpOwo+ICsJbWVk aWFfZGV2aWNlX3VucmVnaXN0ZXIoJmRldi0+bWRldik7Cj4gKwl2NGwyX20ybV91bnJlZ2lzdGVy X21lZGlhX2NvbnRyb2xsZXIoZGV2LT5tMm1fZGV2X2RlYyk7Cj4gKwl2aWRlb191bnJlZ2lzdGVy X2RldmljZShkZXYtPnZmZCk7Cj4gKwltZWRpYV9kZXZpY2VfY2xlYW51cCgmZGV2LT5tZGV2KTsK PiArCj4gKwl2NGwyX20ybV9yZWxlYXNlKGRldi0+bTJtX2Rldl9kZWMpOwo+ICsJZGV2LT5wdmRl Y19kYXRhLT5kZXN0cm95X2h3X3Jlc291cmNlKGRldik7Cj4gKwl2NGwyX2RldmljZV91bnJlZ2lz dGVyKCZkZXYtPnY0bDJfZGV2KTsKPiArfQoKW1NldmVyaXR5OiBIaWdoXQpJbiBhbWxfdmRlY19k cnZfcmVtb3ZlKCksIGRpc2FibGVfaXJxKCkgYW5kIHZkZWNfZGlzYWJsZShkZXYtPmRlY19odykg cG93ZXIKb2ZmIHRoZSBWREVDIGRvbWFpbiBhbmQgZGlzYWJsZSB0aGUgVkRFQyBjbG9jayBiZWZv cmUgdW5yZWdpc3RlcmluZyB0aGUgbWVkaWEKYW5kIHZpZGVvIGRldmljZXMgb3IgcmVsZWFzaW5n IE0yTSBjb250ZXh0cy4KCklmIGEgZGVjb2RlIGpvYiBpcyBpbiBmbGlnaHQgaW4gYW1sX2gyNjRf ZGVjX3J1bigpIG9yIGFuIG9wZW4gZmlsZSBoYW5kbGUgaXMKc3Vic2VxdWVudGx5IGNsb3NlZCB2 aWEgZm9wc192Y29kZWNfcmVsZWFzZSgpIC0+IHZiMm9wc192ZGVjX3N0b3Bfc3RyZWFtaW5nKCkK LT4gYW1sX2gyNjRfZXhpdCgpLCB3b24ndCByZWFkX2Rvc19yZWcoKSBhbmQgYW1sX3N0b3BfdmRl Y19odygpIHBlcmZvcm0gTU1JTwphY2Nlc3NlcyB0byBET1NfQlVTIHJlZ2lzdGVycyB0aGF0IGhh dmUgYWxyZWFkeSBiZWVuIHBvd2VyZWQgZG93biBhbmQKdW5jbG9ja2VkPwoKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbWxvZ2ljL3ZkZWMvYW1sX3ZkZWNfaHcuYyBiL2Ry aXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1sb2dpYy92ZGVjL2FtbF92ZGVjX2h3LmMKPiBuZXcgZmls ZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMDAuLjA0M2YwYmJmMzI1MTYKPiAtLS0g L2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbWxvZ2ljL3ZkZWMvYW1s X3ZkZWNfaHcuYwoKWyAuLi4gXQoKPiArdm9pZCBkb3NfZW5hYmxlKHN0cnVjdCBhbWxfdmRlY19o dyAqaHcpCj4gK3sKPiArCWRvc19yZWdfd3JpdGVfYml0cyhodywgRE9TX0dDTEtfRU4wLCAweDNm ZiwgMCwgMTApOwo+ICsKPiArCXJlZ21hcF93cml0ZShody0+bWFwW0RPU19CVVNdLCBHQ0xLX0VO LCAweDNmZik7Cj4gKwo+ICsJcmVnbWFwX3VwZGF0ZV9iaXRzKGh3LT5tYXBbRE9TX0JVU10sIE1E RUNfUElDX0RDX0NUUkwsICgxIDw8IDMxKSwgMCk7Cj4gK30KClsgLi4uIF0KCj4gK3N0YXRpYyBp bnQgdmRlY19jbG9ja19nYXRlX2luaXQoc3RydWN0IGFtbF92ZGVjX2h3ICpodykKPiArewo+ICsJ aHctPmdhdGVzW0NMS19ET1NdLmlkID0gImRvcyI7Cj4gKwlody0+Z2F0ZXNbQ0xLX1ZERUNdLmlk ID0gInZkZWMiOwo+ICsJaHctPmdhdGVzW0NMS19IVkRFQ10uaWQgPSAiaHZkZWMiOwo+ICsKPiAr CXJldHVybiBkZXZtX2Nsa19idWxrX2dldChody0+ZGV2LCBDTEtfTUFYLCBody0+Z2F0ZXMpOwo+ ICt9CgpbU2V2ZXJpdHk6IEhpZ2hdCnZkZWNfY2xvY2tfZ2F0ZV9pbml0KCkgYWNxdWlyZXMgaHct PmdhdGVzW0NMS19ET1NdICgiZG9zIiksIGJ1dApwbV92ZGVjX3Bvd2VyX2RvbWFpbl9wb3dlcl9v bigpIGFuZCBwbV92ZGVjX3Bvd2VyX2RvbWFpbl9wb3dlcl9vZmYoKSBvbmx5CmVuYWJsZSBhbmQg ZGlzYWJsZSB0aGUgInZkZWMiIGFuZCAiaHZkZWMiIGNsb2NrcywgYW5kIGRvc19lbmFibGUoKSBv bmx5IHdyaXRlcwppbnRlcm5hbCBET1MgcmVnaXN0ZXJzLgoKV2hlcmUgaXMgaHctPmdhdGVzW0NM S19ET1NdLmNsayBwcmVwYXJlZCBhbmQgZW5hYmxlZCBiZWZvcmUgZG9zX2xvY2FsX2NvbmZpZygp CmFuZCBkb3NfZW5hYmxlKCkgYWNjZXNzIERPU19CVVMgcmVnaXN0ZXJzPyBJZiBDTEtJRF9ET1Mg aXMgZ2F0ZWQgYnkgdGhlCmJvb3Rsb2FkZXIgb3IgY2xrX2Rpc2FibGVfdW51c2VkLCB3b24ndCB0 aGVzZSBNTUlPIGFjY2Vzc2VzIGhhbmcgb3IgYWJvcnQ/CgpbIC4uLiBdCgo+ICtzdGF0aWMgaW50 IHBtX3ZkZWNfcG93ZXJfZG9tYWluX2luaXQoc3RydWN0IGFtbF92ZGVjX2h3ICpodykKPiArewo+ ICsJaW50IGksIGVycjsKPiArCWNvbnN0IHN0cnVjdCBwb3dlcl9tYW5hZ2VyX3MgKnBtID0gaHct PnBtOwo+ICsJc3RydWN0IHBtX3BkX3MgKnBkID0gcG0tPnBkX2RhdGE7Cj4gKwo+ICsJbXV0ZXhf aW5pdCgmaHctPnBtX211dGV4KTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgVkRFQ19NQVg7IGkr Kykgewo+ICsJCXBkW2ldLmRldiA9IGRldl9wbV9kb21haW5fYXR0YWNoX2J5X25hbWUoaHctPmRl diwgcGRbaV0ubmFtZSk7Cj4gKwkJaWYgKElTX0VSUl9PUl9OVUxMKHBkW2ldLmRldikpIHsKPiAr CQkJZXJyID0gUFRSX0VSUihwZFtpXS5kZXYpOwo+ICsJCQlkZXZfZGJnKGh3LT5kZXYsICJHZXQg JXMgZmFpbGVkLCBwbS1kb21haW46ICVkXG4iLAo+ICsJCQkJcGRbaV0ubmFtZSwgZXJyKTsKPiAr CQkJcGRbaV0uZGV2ID0gTlVMTDsKPiArCQkJY29udGludWU7Cj4gKwkJfQoKWyAuLi4gXQoKPiAr c3RhdGljIHZvaWQgcG1fdmRlY19wb3dlcl9kb21haW5fcG93ZXJfb24oc3RydWN0IGFtbF92ZGVj X2h3ICpodywgaW50IGlkKQo+ICt7Cj4gKwljb25zdCBzdHJ1Y3QgcG93ZXJfbWFuYWdlcl9zICpw bSA9IGh3LT5wbTsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBtLT5wZF9kYXRhW2lkXS5kZXY7 Cj4gKwlzdHJ1Y3QgY2xrX2J1bGtfZGF0YSAqZ2F0ZV9ub2RlID0gTlVMTDsKPiArCWludCByZXQg PSAwOwo+ICsKPiArCWlmIChpZCA9PSBWREVDKQo+ICsJCWdhdGVfbm9kZSA9IHZkZWNfZ2V0X2Ns a19ieV9uYW1lKGh3LCAidmRlYyIpOwo+ICsJZWxzZSBpZiAoaWQgPT0gSFZERUMpCj4gKwkJZ2F0 ZV9ub2RlID0gdmRlY19nZXRfY2xrX2J5X25hbWUoaHcsICJodmRlYyIpOwo+ICsKPiArCWlmIChn YXRlX25vZGUpIHsKPiArCQlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZ2F0ZV9ub2RlLT5jbGsp Owo+ICsJCWlmIChyZXQpIHsKPiArCQkJZGV2X2Vycihody0+ZGV2LCAiZmFpbGVkIHRvIGVuYWJs ZSAlcyBjbG9jazogJWRcbiIsCj4gKwkJCQlnYXRlX25vZGUtPmlkLCByZXQpOwo+ICsJCX0gZWxz ZSB7Cj4gKwkJCWlmIChpZCA9PSBWREVDKSB7Cj4gKwkJCQljbGtfc2V0X3JhdGUoZ2F0ZV9ub2Rl LT5jbGssIDQ5OTk5OTk5Mik7Cj4gKwkJCQlkZXZfZGJnKGh3LT5kZXYsICJhZnRlciBzZXQsIHZk ZWMgY2xvY2sgaXMgJWx1IEh6XG4iLAo+ICsJCQkJCWNsa19nZXRfcmF0ZShnYXRlX25vZGUtPmNs aykpOwo+ICsJCQl9Cj4gKwkJCWRldl9kYmcoaHctPmRldiwgInRoZSAlLTE1cyBjbG9jayBvblxu IiwgZ2F0ZV9ub2RlLT5pZCk7Cj4gKwkJfQo+ICsJfSBlbHNlIHsKPiArCQlkZXZfaW5mbyhody0+ ZGV2LCAiY2xrICVkLCB1bnJlYWNoYWJsZVxuIiwgaWQpOwo+ICsJCXJldCA9IC1FTk9ERVY7Cj4g Kwl9Cj4gKwo+ICsJaWYgKCFyZXQgJiYgZGV2KSB7Cj4gKwkJcmV0ID0gcG1fcnVudGltZV9yZXN1 bWVfYW5kX2dldChkZXYpOwo+ICsJCWlmIChyZXQgPCAwKQo+ICsJCQlkZXZfZXJyKGh3LT5kZXYs ICJmYWlsZWQgdG8gcG93ZXIgb24gJXMgZG9tYWluOiAlZFxuIiwKPiArCQkJCXBtLT5wZF9kYXRh W2lkXS5uYW1lLCByZXQpOwo+ICsJCWVsc2UKPiArCQkJZGV2X2RiZyhkZXYsICJkZXY6ICVwIGxp bmsgJXAgdGhlICUtMTVzIHBvd2VyIG9uXG4iLAo+ICsJCQkJZGV2LCBwbS0+cGRfZGF0YVtpZF0u bGluaywgcG0tPnBkX2RhdGFbaWRdLm5hbWUpOwo+ICsJfQo+ICsKPiArCS8qCj4gKwkgKiBEbyBu b3QgdG91Y2ggdGhlIERPUyByZWdpc3RlcnMgd2hlbiB0aGUgY2xvY2sgb3IgdGhlIHBvd2VyCj4g KwkgKiBkb21haW4gY291bGQgbm90IGJlIGVuYWJsZWQsIHRoZSBNTUlPIGFjY2VzcyB3b3VsZCBh Ym9ydC4KPiArCSAqLwo+ICsJaWYgKCFyZXQpCj4gKwkJZG9zX2xvY2FsX2NvbmZpZyhodywgMSwg aWQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBwbV92ZGVjX3Bvd2VyX2RvbWFpbl9wb3dlcl9v ZmYoc3RydWN0IGFtbF92ZGVjX2h3ICpodywgaW50IGlkKQo+ICt7Cj4gKwljb25zdCBzdHJ1Y3Qg cG93ZXJfbWFuYWdlcl9zICpwbSA9IGh3LT5wbTsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBt LT5wZF9kYXRhW2lkXS5kZXY7Cj4gKwlzdHJ1Y3QgY2xrX2J1bGtfZGF0YSAqZ2F0ZV9ub2RlID0g TlVMTDsKPiArCj4gKwlkb3NfbG9jYWxfY29uZmlnKGh3LCAwLCBpZCk7Cj4gKwo+ICsJaWYgKGRl dikgewo+ICsJCXBtX3J1bnRpbWVfcHV0X3N5bmMoZGV2KTsKPiArCQlkZXZfZGJnKGRldiwgImRl djogJXAgbGluayAlcCB0aGUgJS0xNXMgcG93ZXIgb2ZmXG4iLAo+ICsJCQlkZXYsIHBtLT5wZF9k YXRhW2lkXS5saW5rLCBwbS0+cGRfZGF0YVtpZF0ubmFtZSk7Cj4gKwl9Cj4gKwo+ICsJaWYgKGlk ID09IFZERUMpCj4gKwkJZ2F0ZV9ub2RlID0gdmRlY19nZXRfY2xrX2J5X25hbWUoaHcsICJ2ZGVj Iik7Cj4gKwllbHNlIGlmIChpZCA9PSBIVkRFQykKPiArCQlnYXRlX25vZGUgPSB2ZGVjX2dldF9j bGtfYnlfbmFtZShodywgImh2ZGVjIik7Cj4gKwo+ICsJaWYgKGdhdGVfbm9kZSkgewo+ICsJCWNs a19kaXNhYmxlX3VucHJlcGFyZShnYXRlX25vZGUtPmNsayk7Cj4gKwkJZGV2X2RiZyhody0+ZGV2 LCAidGhlICUtMTVzIGNsb2NrIG9mZlxuIiwgZ2F0ZV9ub2RlLT5pZCk7Cj4gKwl9IGVsc2Ugewo+ ICsJCWRldl9pbmZvKGh3LT5kZXYsICJjbGsgJWQsIHVucmVhY2hhYmxlXG4iLCBpZCk7Cj4gKwl9 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHZkZWNfcG93ZXJvbihzdHJ1Y3QgYW1sX3ZkZWNfaHcg Kmh3LCBlbnVtIHZkZWNfdHlwZV9lIGNvcmUpCj4gK3sKPiArCWlmIChjb3JlID49IFZERUNfTUFY KQo+ICsJCXJldHVybjsKPiArCj4gKwltdXRleF9sb2NrKCZody0+cG1fbXV0ZXgpOwo+ICsJaWYg KCFody0+cG0tPnBkX2RhdGFbY29yZV0uZGV2KQo+ICsJCWdvdG8gb3V0Owo+ICsKPiArCWh3LT5w bS0+cGRfZGF0YVtjb3JlXS5yZWZfY291bnQrKzsKPiArCWlmIChody0+cG0tPnBkX2RhdGFbY29y ZV0ucmVmX2NvdW50ID4gMSkKPiArCQlnb3RvIG91dDsKPiArCj4gKwlody0+cG0tPnBvd2VyX29u KGh3LCBjb3JlKTsKPiArCj4gK291dDoKPiArCW11dGV4X3VubG9jaygmaHctPnBtX211dGV4KTsK PiArfQoKW1NldmVyaXR5OiBIaWdoXQpUaGVyZSBhcHBlYXIgdG8gYmUgdHdvIGVycm9yLWhhbmRs aW5nIGlzc3VlcyBpbiB0aGUgcG93ZXIgZG9tYWluIGFuZCBjbG9jawpoZWxwZXJzIGhlcmU6Cgox LiBJbiBwbV92ZGVjX3Bvd2VyX2RvbWFpbl9pbml0KCksIGlmIGRldl9wbV9kb21haW5fYXR0YWNo X2J5X25hbWUoKSByZXR1cm5zCmFuIGVycm9yIHBvaW50ZXIgKHN1Y2ggYXMgLUVQUk9CRV9ERUZF Uikgb3IgTlVMTCwgcGRbaV0uZGV2IGlzIHNldCB0byBOVUxMIGFuZAp0aGUgbG9vcCBjb250aW51 ZXMgd2hpbGUgcmV0dXJuaW5nIDAuIFRoZW4gdmRlY19wb3dlcm9uKCkgc2VlcwohaHctPnBtLT5w ZF9kYXRhW2NvcmVdLmRldiBhbmQgZXhpdHMgd2l0aG91dCBlbmFibGluZyB0aGUgY2xvY2sgb3Ig cG93ZXIKZG9tYWluLCB3aGlsZSB2ZGVjX2VuYWJsZSgpIHN0aWxsIHJldHVybnMgMC4gV29uJ3Qg c3Vic2VxdWVudCBNTUlPIHdyaXRlcyBpbgptMm1vcHNfdmRlY19kZXZpY2VfcnVuKCkgLT4gZG9z X2VuYWJsZSgpIGFjY2VzcyB1bnBvd2VyZWQgYW5kIHVuY2xvY2tlZCBET1MKcmVnaXN0ZXJzPwoK Mi4gSW4gcG1fdmRlY19wb3dlcl9kb21haW5fcG93ZXJfb24oKSwgaWYgY2xrX3ByZXBhcmVfZW5h YmxlKGdhdGVfbm9kZS0+Y2xrKQpzdWNjZWVkcyBhbmQgcG1fcnVudGltZV9yZXN1bWVfYW5kX2dl dChkZXYpIGZhaWxzLCBnYXRlX25vZGUtPmNsayBpcyBsZWZ0CmVuYWJsZWQgYW5kIHRoZSBmYWls dXJlIGlzIG5vdCBwcm9wYWdhdGVkIHRvIHZkZWNfcG93ZXJvbigpIG9yIHZkZWNfZW5hYmxlKCks CmxlYXZpbmcgcmVmX2NvdW50IGF0IDEuIFdoZW4gdmRlY19kaXNhYmxlKCkgLT4gdmRlY19wb3dl cm9mZigpIC0+CnBtX3ZkZWNfcG93ZXJfZG9tYWluX3Bvd2VyX29mZigpIGxhdGVyIHJ1bnMsIHdv bid0IGl0IGNhbGwKZG9zX2xvY2FsX2NvbmZpZyhodywgMCwgaWQpIG9uIHRoZSB1bnBvd2VyZWQg ZG9tYWluIGFuZCBjYWxsCnBtX3J1bnRpbWVfcHV0X3N5bmMoZGV2KSBkZXNwaXRlIHBtX3J1bnRp bWVfcmVzdW1lX2FuZF9nZXQoZGV2KSBoYXZpbmcgZmFpbGVkPwoKWyAuLi4gXQoKPiArCWh3LT5j YW52YXMgPSBtZXNvbl9jYW52YXNfZ2V0KCZwZGV2LT5kZXYpOwo+ICsJaWYgKElTX0VSUl9PUl9O VUxMKGh3LT5jYW52YXMpKQo+ICsJCXJldHVybiBQVFJfRVJSKGh3LT5jYW52YXMpOwo+ICsKPiAr CXNtX25wID0gb2ZfcGFyc2VfcGhhbmRsZShwZGV2LT5kZXYub2Zfbm9kZSwgImFtbG9naWMsc2Vj dXJlLW1vbml0b3IiLCAwKTsKPiArCWlmICghc21fbnApCj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4g Kwo+ICsJaHctPnNlY19mdyA9IG1lc29uX3NtX2dldChzbV9ucCk7Cj4gKwlvZl9ub2RlX3B1dChz bV9ucCk7Cj4gKwlpZiAoSVNfRVJSKGh3LT5zZWNfZncpKQo+ICsJCXJldHVybiBQVFJfRVJSKGh3 LT5zZWNfZncpOwoKW1NldmVyaXR5OiBIaWdoXQpJbiBkcml2ZXJzL2Zpcm13YXJlL21lc29uL21l c29uX3NtLmMsIG1lc29uX3NtX2dldCgpIHJldHVybnMgTlVMTCAobm90IGFuCkVSUl9QVFIpIHdo ZW4gdGhlIHNlY3VyZS1tb25pdG9yIHBsYXRmb3JtIGRldmljZSBoYXMgbm90IHByb2JlZCB5ZXQu CgpCZWNhdXNlIElTX0VSUihOVUxMKSBpcyBmYWxzZSwgZGV2X3JlcXVlc3RfaHdfcmVzb3VyY2Vz KCkgc3VjY2VlZHMgd2l0aApody0+c2VjX2Z3ID09IE5VTEwgaW5zdGVhZCBvZiByZXR1cm5pbmcg LUVQUk9CRV9ERUZFUi4gV2hlbiBkZWNvZGluZyBzdGFydHMgaW4KbTJtb3BzX3ZkZWNfZGV2aWNl X3J1bigpIC0+IGxvYWRfZmlybXdhcmUoKSAtPiBtZXNvbl9zbV9jYWxsKGh3LT5zZWNfZncsIC4u LiksCndvbid0IG1lc29uX3NtX2NhbGwoKSBkZXJlZmVyZW5jZSBhIE5VTEwgaHctPnNlY19mdyBw b2ludGVyIG9uIGZ3LT5jaGlwPwoKU2ltaWxhcmx5LCBhYm92ZSB0aGF0IGNoZWNrLCBpZiBtZXNv bl9jYW52YXNfZ2V0KCkgd2VyZSB0byByZXR1cm4gTlVMTCwKaWYgKElTX0VSUl9PUl9OVUxMKGh3 LT5jYW52YXMpKSByZXR1cm4gUFRSX0VSUihody0+Y2FudmFzKTsgd291bGQgcmV0dXJuIDAuClNo b3VsZCBody0+Y2FudmFzIHVzZSBJU19FUlIoaHctPmNhbnZhcykgYW5kIGh3LT5zZWNfZncgY2hl Y2sgIWh3LT5zZWNfZncgYW5kCnJldHVybiAtRVBST0JFX0RFRkVSPwoKWyAuLi4gXQoKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbWxvZ2ljL3ZkZWMvYW1sX3ZkZWNfdGVl X2Z3LmMgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtbG9naWMvdmRlYy9hbWxfdmRlY190ZWVf ZncuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwMC4uOWFmOWVh ZTg4ZmI4OQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2Ft bG9naWMvdmRlYy9hbWxfdmRlY190ZWVfZncuYwoKWyAuLi4gXQoKPiArCS8qIE9wZW4gc2Vzc2lv biAqLwo+ICsJbWVtY3B5KHNlc3NfYXJnLnV1aWQsIHV1aWQuYiwgVEVFX0lPQ1RMX1VVSURfTEVO KTsKPiArCXNlc3NfYXJnLmNsbnRfbG9naW4gPSBURUVfSU9DVExfTE9HSU5fUFVCTElDOwo+ICsJ c2Vzc19hcmcubnVtX3BhcmFtcyA9IFRFRV9QQVJBTV9OVU07Cj4gKwlyZXQgPSB0ZWVfY2xpZW50 X29wZW5fc2Vzc2lvbihjdHgsICZzZXNzX2FyZywgcGFyYW1faW5pdCk7Cj4gKwlpZiAocmV0IDwg MCB8fCBzZXNzX2FyZy5yZXQgIT0gVEVFQ19TVUNDRVNTKSB7Cj4gKwkJZGV2X2luZm8oaHctPmRl diwKPiArCQkJICIlcyBvcGVuIHNlc3Npb24gZmFpbGVkLCBjbWQgPSAldSwgcmV0ID0gJWQsIHJl cyA9IDB4JXgsIG9yaWdpbiA9IDB4JXhcbiIsCj4gKwkJCSBfX2Z1bmNfXywgY21kLCByZXQsIHNl c3NfYXJnLnJldCwgc2Vzc19hcmcucmV0X29yaWdpbik7Cj4gKwkJaWYgKCFyZXQpCj4gKwkJCXJl dCA9IHNlc3NfYXJnLnJldDsKPiArCQlnb3RvIGZyZWVfc2htOwo+ICsJfQo+ICsKPiArCWludl9h cmcuZnVuYyA9IGNtZDsKPiArCWludl9hcmcuc2Vzc2lvbiA9IHNlc3NfYXJnLnNlc3Npb247Cj4g KwlpbnZfYXJnLm51bV9wYXJhbXMgPSBURUVfUEFSQU1fTlVNOwo+ICsKPiArCXdoaWxlIChzZW50 X3NpemUgPCBmd19zaXplKSB7Cj4gKwkJbWVtc2V0KHNobV92YSwgMCwgT05DRV9TRU5UX1NJWkUp Owo+ICsJCWlmIChmd19zaXplIC0gc2VudF9zaXplID4gT05DRV9TRU5UX1NJWkUpIHsKPiArCQkJ bWVtY3B5KHNobV92YSwgKGZpcm13YXJlX2RhdGEgKyBzZW50X3NpemUpLAo+ICsJCQkgICAgICAg T05DRV9TRU5UX1NJWkUpOwo+ICsJCQlwYXJhbV9pbnZva2VbMF0udS5tZW1yZWYuc2l6ZSA9IE9O Q0VfU0VOVF9TSVpFOwo+ICsJCX0gZWxzZSB7Cj4gKwkJCW1lbWNweShzaG1fdmEsIChmaXJtd2Fy ZV9kYXRhICsgc2VudF9zaXplKSwKPiArCQkJICAgICAgIGZ3X3NpemUgLSBzZW50X3NpemUpOwo+ ICsJCQlwYXJhbV9pbnZva2VbMF0udS5tZW1yZWYuc2l6ZSA9IChmd19zaXplIC0gc2VudF9zaXpl KTsKPiArCQl9Cj4gKwkJcGFyYW1faW52b2tlWzBdLnUubWVtcmVmLnNobSA9IHNobTsKPiArCQly ZXQgPSB0ZWVfY2xpZW50X2ludm9rZV9mdW5jKGN0eCwgJmludl9hcmcsIHBhcmFtX2ludm9rZSk7 Cj4gKwkJaWYgKHJldCA8IDAgfHwgKGludl9hcmcucmV0ICE9IFRFRUNfU1VDQ0VTUyAmJiBpbnZf YXJnLnJldCAhPSBURUVDX0VSUk9SX0JVU1kpKSB7Cj4gKwkJCWRldl9pbmZvKGh3LT5kZXYsCj4g KwkJCQkgIiVzIGludm9rZSBmdW5jIGZhaWxlZCwgY21kID0gJXUsIHJldD0gJWQsIHJlcyA9IDB4 JXgsIG9yaWdpbiA9IDB4JXhcbiIsCj4gKwkJCQkgX19mdW5jX18sIGNtZCwgcmV0LCBpbnZfYXJn LnJldCwKPiArCQkJCSBpbnZfYXJnLnJldF9vcmlnaW4pOwo+ICsJCQlpZiAoIXJldCkKPiArCQkJ CXJldCA9IGludl9hcmcucmV0Owo+ICsJCQlnb3RvIGNsb3NlX3Nlc3Npb247Cj4gKwkJfQo+ICsJ CXNlbnRfc2l6ZSArPSBwYXJhbV9pbnZva2VbMF0udS5tZW1yZWYuc2l6ZTsKPiArCX0KClsgLi4u IF0KCj4gKwljdHggPSB0ZWVfY2xpZW50X29wZW5fY29udGV4dChOVUxMLCBvcHRlZV9jdHhfbWF0 Y2gsIE5VTEwsIE5VTEwpOwo+ICsJaWYgKElTX0VSUihjdHgpKSB7Cj4gKwkJZGV2X2luZm8oaHct PmRldiwgIkZhaWxlZCB0byBvcGVuIFRFRSBjb250ZXh0XG4iKTsKPiArCQlyZXQgPSBQVFJfRVJS KGN0eCk7Cj4gKwkJZ290byBmcmVlX2Zpcm13YXJlOwo+ICsJfQoKW1NldmVyaXR5OiBIaWdoXQpJ biBhbWxfdmRlY19kcnZfcHJvYmUoKSAtPiBkZXZfcmVxdWVzdF9od19yZXNvdXJjZXMoKSAtPiBh bWxfdGVlX2Z3X3ByZWxvYWQoKQotPiBwYXNzX2Zpcm13YXJlX3RvX3RlZSgpOgoKMS4gV2hlbiB0 aGUgT1AtVEVFIGRyaXZlciBoYXMgbm90IHJlZ2lzdGVyZWQgaXRzIFRFRSBkZXZpY2UgeWV0LAp0 ZWVfY2xpZW50X29wZW5fY29udGV4dCgpIHJldHVybnMgRVJSX1BUUigtRU5PRU5UKS4gUHJvcGFn YXRpbmcgLUVOT0VOVCBjYXVzZXMKYW1sX3ZkZWNfZHJ2X3Byb2JlKCkgdG8gZmFpbCBwZXJtYW5l bnRseSBpbnN0ZWFkIG9mIGRlZmVycmluZyBwcm9iZSB3aXRoCi1FUFJPQkVfREVGRVIuCgoyLiBJ biB0ZWVfcHRhX2ludm9rZV9jbWQoKSwgd2hlbiB0ZWVfY2xpZW50X29wZW5fc2Vzc2lvbigpIG9y CnRlZV9jbGllbnRfaW52b2tlX2Z1bmMoKSByZXR1cm5zIDAgd2l0aCBzZXNzX2FyZy5yZXQgIT0g VEVFQ19TVUNDRVNTIG9yCmludl9hcmcucmV0ICE9IFRFRUNfU1VDQ0VTUywgcmV0IGlzIGFzc2ln bmVkIHRoZSByYXcgdTMyIFRFRUMgc3RhdHVzIGNvZGUKcmF0aGVyIHRoYW4gYSBuZWdhdGl2ZSBl cnJubyAod2hpY2ggYW1sX3ZkZWNfZHJ2X3Byb2JlKCkgb25seSBjaGVja3MgZm9yCnJldCA8IDAp LgoKMy4gSW4gdGVlX3B0YV9pbnZva2VfY21kKCksIHdoZW4gaW52X2FyZy5yZXQgPT0gVEVFQ19F UlJPUl9CVVNZLCB0aGUgZXJyb3IKYnJhbmNoIGlzIHNraXBwZWQgYW5kIHNlbnRfc2l6ZSArPSBw YXJhbV9pbnZva2VbMF0udS5tZW1yZWYuc2l6ZSBhZHZhbmNlcyBwYXN0CnRoZSBjdXJyZW50IDEy OCBLQiBjaHVuayB3aXRob3V0IHJldHJ5aW5nIGl0LiBXb24ndCB0aGlzIHNpbGVudGx5IGRyb3Ag YQpjaHVuayBvZiBmaXJtd2FyZSBkYXRhPwoKWyAuLi4gXQoKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9tZWRpYS9wbGF0Zm9ybS9hbWxvZ2ljL3ZkZWMvaDI2NC5jIGIvZHJpdmVycy9tZWRpYS9wbGF0 Zm9ybS9hbWxvZ2ljL3ZkZWMvaDI2NC5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAw MDAwMDAwMDAwMDAwLi43ZWM3YWY3M2Q0NGM3Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZl cnMvbWVkaWEvcGxhdGZvcm0vYW1sb2dpYy92ZGVjL2gyNjQuYwoKWyAuLi4gXQoKPiArc3RhdGlj IGludCBwb2NfaXNfaW5fZHBiKGludCBwb2MsIGNvbnN0IHN0cnVjdCB2NGwyX2gyNjRfZHBiX2Vu dHJ5ICpkcGIpCj4gK3sKPiArCWludCBpOwo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJZm9yIChp ID0gMDsgaSA8IFY0TDJfSDI2NF9OVU1fRFBCX0VOVFJJRVM7IGkrKykgewo+ICsJCWlmIChwb2Mg PT0gZHBiW2ldLnRvcF9maWVsZF9vcmRlcl9jbnQpIHsKPiArCQkJcmV0ID0gMTsKPiArCQkJYnJl YWs7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KCltTZXZlcml0eTogSGln aF0KSW4gcG9jX2lzX2luX2RwYigpLCBkcGJbaV0udG9wX2ZpZWxkX29yZGVyX2NudCBpcyBtYXRj aGVkIGFjcm9zcyBhbGwgMTYKZW50cmllcyBvZiBkcGJbXSB3aXRob3V0IGNoZWNraW5nIGRwYltp XS5mbGFncyAmIFY0TDJfSDI2NF9EUEJfRU5UUllfRkxBR19BQ1RJVkUuClRoZSBzYW1lIGlzc3Vl IGFsc28gb2NjdXJzIGluIGdldF9kcGJfYnlfcG9jKCkgZnVydGhlciBiZWxvdzoKCiAgICBzdGF0 aWMgc3RydWN0IHY0bDJfaDI2NF9kcGJfZW50cnkgKgogICAgZ2V0X2RwYl9ieV9wb2Moc3RydWN0 IHY0bDJfY3RybF9oMjY0X2RlY29kZV9wYXJhbXMgKmRlY29kZSwgaW50IHBvYykKICAgIHsKICAg ICAgICBpbnQgaTsKCiAgICAgICAgZm9yIChpID0gMDsgaSA8IFY0TDJfSDI2NF9OVU1fRFBCX0VO VFJJRVM7IGkrKykgewogICAgICAgICAgICBpZiAoZGVjb2RlLT5kcGJbaV0udG9wX2ZpZWxkX29y ZGVyX2NudCA9PSBwb2MpCiAgICAgICAgICAgICAgICByZXR1cm4gJmRlY29kZS0+ZHBiW2ldOwog ICAgICAgIH0KICAgICAgICByZXR1cm4gTlVMTDsKICAgIH0KCkJlY2F1c2UgdW51c2VkIERQQiBl bnRyaWVzIGhhdmUgZmxhZ3MgPT0gMCBhbmQgdG9wX2ZpZWxkX29yZGVyX2NudCA9PSAwIChhbmQK ZXZpY3RlZCBlbnRyaWVzIG1heSByZXRhaW4gdGhlaXIgc3RhbGUgdG9wX2ZpZWxkX29yZGVyX2Nu dCB3aXRoIHRoZSBhY3RpdmUKZmxhZyBjbGVhcmVkKToKCjEuIEluIGgyNjRfY29uZmlnX2RlY29k ZV9zcGVjKCkgLT4gY2xlYXJfdW51c2VkX2NvbF9idWYoKSwgcG9jX2lzX2luX2RwYigpCm1hdGNo ZXMgaW5hY3RpdmUgRFBCIHNsb3RzLCBwcmV2ZW50aW5nIGNhbnZhc19wb3MgYW5kIGNvbG9jYXRl ZF9idWYgc2xvdHMgZnJvbQpiZWluZyByZWxlYXNlZCBvbiBub24tSURSIGZyYW1lcyBhbmQgZXho YXVzdGluZyB0aGUgMTcgY2FudmFzX3BvcyBzbG90cwooZXNwZWNpYWxseSBvbiBtdWx0aS1zbGlj ZSBmcmFtZXMgd2hlcmUgaDI2NF9jb25maWdfZGVjb2RlX3NwZWMoKSBpcyBjYWxsZWQgb24KZXZl cnkgc2xpY2UpLgoKMi4gSW4gaDI2NF9jb25maWdfZGVjb2RlX2J1ZigpLCBpZiBhbiBpbmFjdGl2 ZSBEUEIgc2xvdCB3aXRoCnRvcF9maWVsZF9vcmRlcl9jbnQgPT0gMCBwcmVjZWRlcyBhbiBhY3Rp dmUgcmVmZXJlbmNlIHBpY3R1cmUgd2l0aCBQT0MgMCwKZ2V0X2RwYl9ieV9wb2MoZGVjb2RlLCAw KSByZXR1cm5zIHRoZSBpbmFjdGl2ZSBzbG90LCBzbwppZiAoZHBiICYmIChkcGItPmZsYWdzICYg VjRMMl9IMjY0X0RQQl9FTlRSWV9GTEFHX0FDVElWRSkpIGV2YWx1YXRlcyB0byBmYWxzZQphbmQg d3JpdGVzIDAgaW50byBIMjY0X0JVRkZFUl9JTkZPX0RBVEEgZm9yIHRoZSBhY3RpdmUgcmVmZXJl bmNlIGZyYW1lLgoKU2hvdWxkIGJvdGggcG9jX2lzX2luX2RwYigpIGFuZCBnZXRfZHBiX2J5X3Bv YygpIHJlcXVpcmUKKGRwYltpXS5mbGFncyAmIFY0TDJfSDI2NF9EUEJfRU5UUllfRkxBR19BQ1RJ VkUpPwoKWyAuLi4gXQoKPiArc3RhdGljIGludCBnZXRfcmVmaWR4X2J5X3BpY251bShzdHJ1Y3Qg YW1sX2gyNjRfY3R4ICpoMjY0X2N0eCwgaW50IHBpY19udW0sCj4gKwkJCQlpbnQgY3Vycl9saXN0 KQo+ICt7Cj4gKwlpbnQgaTsKPiArCXN0cnVjdCBoMjY0X2RlY29kZV9idWZfc3BlYyAqcmVmX2xp c3Q7Cj4gKwo+ICsJaWYgKGN1cnJfbGlzdCA9PSAwKQo+ICsJCXJlZl9saXN0ID0gJmgyNjRfY3R4 LT5yZWZfbGlzdDBbMF07Cj4gKwllbHNlCj4gKwkJcmVmX2xpc3QgPSAmaDI2NF9jdHgtPnJlZl9s aXN0MVswXTsKPiArCj4gKwlmb3IgKGkgPSAwOyByZWZfbGlzdFtpXS5kcGI7IGkrKykgewo+ICsJ CWlmIChwaWNfbnVtID09IHJlZl9saXN0W2ldLmRwYi0+cGljX251bSkKPiArCQkJcmV0dXJuIGk7 Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIC0xOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGgyNjRf ZGVjb2RlX2J1Zl9zcGVjICpnZXRfc3RfcmVmcGljX2J5X251bShzdHJ1Y3QgYW1sX2gyNjRfY3R4 ICpoMjY0X2N0eCwKPiArCQkJCQkJCSBpbnQgcGljX251bSwgaW50IGN1cnJfbGlzdCkKPiArewo+ ICsJaW50IGk7Cj4gKwlzdHJ1Y3QgaDI2NF9kZWNvZGVfYnVmX3NwZWMgKnJlZl9saXN0Owo+ICsK PiArCWlmIChjdXJyX2xpc3QgPT0gMCkKPiArCQlyZWZfbGlzdCA9ICZoMjY0X2N0eC0+cmVmX2xp c3QwX3VucmVvcmRlcmVkWzBdOwo+ICsJZWxzZQo+ICsJCXJlZl9saXN0ID0gJmgyNjRfY3R4LT5y ZWZfbGlzdDFfdW5yZW9yZGVyZWRbMF07Cj4gKwo+ICsJZm9yIChpID0gMDsgcmVmX2xpc3RbaV0u ZHBiOyBpKyspIHsKPiArCQlpZiAocGljX251bSA9PSByZWZfbGlzdFtpXS5kcGItPnBpY19udW0g JiYgcmVmX2xpc3RbaV0ubG9uZ190ZXJtX2ZsYWcgPT0gMCkKPiArCQkJcmV0dXJuICZyZWZfbGlz dFtpXTsKPiArCX0KPiArCj4gKwlyZXR1cm4gTlVMTDsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVj dCBoMjY0X2RlY29kZV9idWZfc3BlYyAqZ2V0X2x0X3JlZnBpY19ieV9udW0oc3RydWN0IGFtbF9o MjY0X2N0eCAqaDI2NF9jdHgsCj4gKwkJCQkJCQkgaW50IHBpY19udW0sIGludCBjdXJyX2xpc3Qp Cj4gK3sKPiArCWludCBpOwo+ICsJc3RydWN0IGgyNjRfZGVjb2RlX2J1Zl9zcGVjICpyZWZfbGlz dDsKPiArCj4gKwlpZiAoY3Vycl9saXN0ID09IDApCj4gKwkJcmVmX2xpc3QgPSAmaDI2NF9jdHgt PnJlZl9saXN0MF91bnJlb3JkZXJlZFswXTsKPiArCWVsc2UKPiArCQlyZWZfbGlzdCA9ICZoMjY0 X2N0eC0+cmVmX2xpc3QxX3VucmVvcmRlcmVkWzBdOwo+ICsKPiArCWZvciAoaSA9IDA7IHJlZl9s aXN0W2ldLmRwYjsgaSsrKSB7Cj4gKwkJaWYgKHBpY19udW0gPT0gcmVmX2xpc3RbaV0uZHBiLT5w aWNfbnVtICYmIHJlZl9saXN0W2ldLmxvbmdfdGVybV9mbGFnID09IDEpCj4gKwkJCXJldHVybiAm cmVmX2xpc3RbaV07Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIE5VTEw7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIHJlb3JkZXJfc2hvcnRfdGVybShzdHJ1Y3Qgc2xpY2UgKmN1cnJfc2xpY2UsIGludCBj dXJfbGlzdCwKPiArCQkJICAgICAgIGludCBwaWNfbnVtX2x4LCBpbnQgKnJlZl9pZHhfbHgpCj4g K3sKClsgLi4uIF0KCj4gKwlmb3IgKGNfaWR4ID0gbnVtX3JlZl9pZHhfbHhfYWN0aXZlOyBjX2lk eCA+ICpyZWZfaWR4X2x4OyBjX2lkeC0tKQo+ICsJCW1lbWNweSgmcmVmX2xpc3RfcmVvcmRlcmVk W2NfaWR4XSwgJnJlZl9saXN0X3Jlb3JkZXJlZFtjX2lkeCAtIDFdLAo+ICsJCSAgICAgICBzaXpl b2Yoc3RydWN0IGgyNjRfZGVjb2RlX2J1Zl9zcGVjKSk7Cj4gKwo+ICsJbWVtY3B5KCZyZWZfbGlz dF9yZW9yZGVyZWRbKnJlZl9pZHhfbHhdLCBwaWNfbHgsIHNpemVvZihzdHJ1Y3QgaDI2NF9kZWNv ZGVfYnVmX3NwZWMpKTsKPiArCWRldl9kYmcoJmN0eC0+ZGV2LT5wbGF0X2Rldi0+ZGV2LCAiJXMg OiBSZWZQaWNMaXN0WFslZCBdID0gcGljICVwIHBpY19udW0oJWQpXG4iLCBfX2Z1bmNfXywKPiAr CQkqcmVmX2lkeF9seCwgcGljX2x4LCByZWZfbGlzdF9yZW9yZGVyZWRbKnJlZl9pZHhfbHhdLmRw Yi0+cGljX251bSk7Cj4gKwkqcmVmX2lkeF9seCA9ICpyZWZfaWR4X2x4ICsgMTsKPiArCj4gKwlu X2lkeCA9ICpyZWZfaWR4X2x4Owo+ICsJZm9yIChjX2lkeCA9ICpyZWZfaWR4X2x4OyBjX2lkeCA8 PSBudW1fcmVmX2lkeF9seF9hY3RpdmU7IGNfaWR4KyspIHsKPiArCQlpZiAocmVmX2xpc3RfcmVv cmRlcmVkW2NfaWR4XS5sb25nX3Rlcm1fZmxhZyB8fCAhcmVmX2xpc3RfcmVvcmRlcmVkW2NfaWR4 XS5kcGIgfHwKPiArCQkgICAgcmVmX2xpc3RfcmVvcmRlcmVkW2NfaWR4XS5kcGItPnBpY19udW0g IT0gcGljX251bV9seCkKPiArCQkJbWVtY3B5KCZyZWZfbGlzdF9yZW9yZGVyZWRbbl9pZHgrK10s ICZyZWZfbGlzdF9yZW9yZGVyZWRbY19pZHhdLAo+ICsJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBo MjY0X2RlY29kZV9idWZfc3BlYykpOwo+ICsJfQo+ICsKPiArCWgyNjRfY3R4LT5saXN0X3NpemVb Y3VyX2xpc3RdID0gbnVtX3JlZl9pZHhfbHhfYWN0aXZlOwo+ICt9CgpbU2V2ZXJpdHk6IENyaXRp Y2FsXQpDYW4gcmVmZXJlbmNlIGxpc3QgcmVvcmRlcmluZyBhbmQgY2FudmFzIGFsbG9jYXRpb24g cmVhZCBvdXQgb2YgYm91bmRzLApkZXJlZmVyZW5jZSBhIE5VTEwgZHBiIHBvaW50ZXIsIGFuZCBs ZWFrIGhhcmR3YXJlIGNhbnZhc2VzPwoKMS4gSW4gcmVvcmRlcl9zaG9ydF90ZXJtKCkgYW5kIHJl b3JkZXJfbG9uZ190ZXJtKCksIHdoZW4KbnVtX3JlZl9pZHhfbHhfYWN0aXZlID09IDE2IChWNEwy X0gyNjRfTlVNX0RQQl9FTlRSSUVTKSwgdGhlIHNoaWZ0IGxvb3AgY29waWVzCnJlZl9saXN0WzE1 XSBpbnRvIHJlZl9saXN0WzE2XSBhbmQgc2V0cyBsaXN0X3NpemVbY3VyX2xpc3RdID0gMTYuIEJl Y2F1c2UKaDI2NF9yZWxlYXNlX2RlY29kZV9zcGVjKCkgb25seSBjbGVhcnMgaW5kaWNlcyAwIC4u IGxpc3Rfc2l6ZVtjdXJfbGlzdF0gLSAxLApyZWZfbGlzdFsxNl0uZHBiIHJlbWFpbnMgbm9uLU5V TEwuIE9uIGEgc3Vic2VxdWVudCBjYWxsIHdoZXJlCnJlZl9saXN0WzAuLjE2XS5kcGIgYXJlIGFs bCBub24tTlVMTCwgdGhlIGxvb3BzIGluIGdldF9yZWZpZHhfYnlfcGljbnVtKCksCmdldF9zdF9y ZWZwaWNfYnlfbnVtKCksIGFuZCBnZXRfbHRfcmVmcGljX2J5X251bSgpIGhhdmUgbm8gdXBwZXIg Ym91bmQgb24gaQphbmQgcmVhZCBwYXN0IHRoZSBlbmQgb2YgcmVmX2xpc3QwW10gLyByZWZfbGlz dDFbXS4KCjIuIFdoZW4gbnVtX3JlZl9pZHhfbHhfYWN0aXZlIGV4Y2VlZHMgdGhlIG51bWJlciBv ZiB2YWxpZCBlbnRyaWVzIGJ1aWx0IGJ5CmgyNjRfY29uZmlnX3JlZl9saXN0cygpIChvciB3aGVu IGgyNjRfY29uZmlnX3JlZl9zcGVjKCkgZmFpbHMgb24gYW4gZW50cnkpLApyZW9yZGVyX3Nob3J0 X3Rlcm0oKSBhbmQgcmVvcmRlcl9sb25nX3Rlcm0oKSBzZXQKaDI2NF9jdHgtPmxpc3Rfc2l6ZVtj dXJfbGlzdF0gPSBudW1fcmVmX2lkeF9seF9hY3RpdmUuIFRoZW4gZ2V0X2NhbnZhc19pbmRleCgp CmFsbG9jYXRlcyBoYXJkd2FyZSBjYW52YXNlcyB2aWEgY29uZmlnX2RlY29kZV9jYW52YXMoKSBm b3IgZXZlcnkgZW50cnkgdXAgdG8KbGlzdF9zaXplW2N1cl9saXN0XSB3aXRob3V0IGNoZWNraW5n IGJ1Zi0+dXNlZCBvciBidWYtPnZhbGlkIChhbHNvIHdyaXRpbmcgRE1BCmFkZHJlc3MgMCB0byBB TkMwX0NBTlZBU19BRERSIGZvciBjYW52YXNfcG9zIDApLCB3aGVyZWFzCmgyNjRfcmVsZWFzZV9k ZWNvZGVfc3BlYygpIG9ubHkgZnJlZXMgY2FudmFzZXMgd2hlbiBpZiAoYnVmLT51c2VkKSBpcyB0 cnVlLApwZXJtYW5lbnRseSBsZWFraW5nIGNhbnZhc2VzIGZyb20gdGhlIG1lc29uX2NhbnZhcyBw b29sLiBJbiBhZGRpdGlvbiwgaW4KaDI2NF90aHJlYWRlZF9pc3JfZnVuYygpLCBoMjY0X3JlbGVh c2VfZGVjb2RlX3NwZWMoKSBpcyBvbmx5IGNhbGxlZCBiZWZvcmUKZ2V0X2NhbnZhc19pbmRleCgp IHdoZW4gZmlyc3RfbWJfaW5fc2xpY2UgIT0gMCwgc28gYSBzZWNvbmQKSDI2NF9TTElDRV9IRUFE RVJfRE9ORSBpbnRlcnJ1cHQgd2l0aCBmaXJzdF9tYl9pbl9zbGljZSA9PSAwIGxlYWtzIHRoZQpj YW52YXNlcyBhbGxvY2F0ZWQgZm9yIHRoZSBmaXJzdCBzbGljZS4KCjMuIEluIGgyNjRfY29uZmln X2RlY29kZV9idWYoKSwgd2hlbiBoMjY0X2N0eC0+bGlzdF9zaXplWzFdID4gMCwKY29sb2NhdGVf cGljID0gJmgyNjRfY3R4LT5yZWZfbGlzdDFbMF0gZGVyZWZlcmVuY2VzCmNvbG9jYXRlX3BpYy0+ ZHBiLT50b3BfZmllbGRfb3JkZXJfY250IHdpdGhvdXQgY2hlY2tpbmcgY29sb2NhdGVfcGljLT52 YWxpZCBvcgpjb2xvY2F0ZV9waWMtPmRwYiAhPSBOVUxMLgoKWyAuLi4gXQoKPiArCXJlYWRfcG9s bF90aW1lb3V0KHJlYWRfZG9zX3JlZywgcmVnX3ZhbCwKPiArCQkJICAhKHJlZ192YWwgJiAweDgw MCksCj4gKwkJCSAgMTAsIDAsIHRydWUsIGh3LCBIMjY0X0NPX01CX1JXX0NUTCk7CgpbU2V2ZXJp dHk6IEhpZ2hdCkluIGgyNjRfY29uZmlnX2RlY29kZV9idWYoKSwgcmVhZF9wb2xsX3RpbWVvdXQo KSBpcyBjYWxsZWQgd2l0aCB0aW1lb3V0X3VzID0gMAp3aGlsZSB2ZGVjX3RocmVhZGVkX2lzcl9o YW5kbGVyKCkgaG9sZHMgaHctPmN0eF9tdXRleC4KClNpbmNlIHRpbWVvdXRfdXMgPSAwIHBvbGxz IGluZGVmaW5pdGVseSBpbiByZWFkX3BvbGxfdGltZW91dCgpLCBpZiBiaXQgMTEKKDB4ODAwKSBv ZiBIMjY0X0NPX01CX1JXX0NUTCBkb2VzIG5vdCBjbGVhciwgd29uJ3QgdmRlY190aHJlYWRlZF9p c3JfaGFuZGxlcigpCnNwaW4gZm9yZXZlciB1bmRlciBody0+Y3R4X211dGV4IGFuZCBjYXVzZSBh bWxfaDI2NF9kZWNfcnVuKCkgdG8gZGVhZGxvY2sgb24KbXV0ZXhfbG9jaygmZGVjX2h3LT5jdHhf bXV0ZXgpIHdoZW4gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoKQpleHBpcmVzPwoK PiArCj4gKwkvKiBjb2wgYnVmIGZvciBjdXJyIGZyYW1lICovCj4gKwljb2xvY2F0ZV9hZHJfb2Zm c2V0ID0gQ09MX1NJWkVfRk9SX09ORV9NQjsKPiArCWlmICh1c2VfbW9kZV84eDhfZmxhZykKPiAr CQljb2xvY2F0ZV9hZHJfb2Zmc2V0ID4+PSAyOwo+ICsJY29sb2NhdGVfYWRyX29mZnNldCAqPSBj dXJyX3NsaWNlLT5maXJzdF9tYl9pbl9zbGljZTsKPiArCj4gKwlpZiAoaDI2NF9jdHgtPmN1cnJf c3BlYy5jb2xfYnVmX2luZGV4ID49IDAgJiYKPiArCSAgICBoMjY0X2N0eC0+Y3Vycl9zcGVjLmNv bF9idWZfaW5kZXggPCBoMjY0X2N0eC0+Y29sb2NhdGVkX2J1Zl9udW0pIHsKPiArCSAgICAvKiBj b2xsYXRlZF9jbWFfYWRkciBpcyBsaW1pdGVkIHRvIDMyYml0IGJ5IGZsYWcgR0ZQX0RNQTMyIHdo ZW4gYWxsb2NhdGVkICovCj4gKwkJY29sb2NhdGVfd3JfYWRyID0gKHVuc2lnbmVkIGludCloMjY0 X2N0eC0+Y29sbGF0ZWRfY21hX2FkZHIgKwo+ICsJCSAgICAoKGgyNjRfY3R4LT5vbmVfY29sX2J1 Zl9zaXplICoKPiArCQkgICAgICBoMjY0X2N0eC0+Y3Vycl9zcGVjLmNvbF9idWZfaW5kZXgpID4+ ICh1c2VfbW9kZV84eDhfZmxhZyA/IDIgOiAwKSk7Cj4gKwkJaWYgKGNvbG9jYXRlX2Fkcl9vZmZz ZXQgPiBoMjY0X2N0eC0+b25lX2NvbF9idWZfc2l6ZSB8fAo+ICsJCSAgICBjb2xvY2F0ZV93cl9h ZHIgKyBoMjY0X2N0eC0+b25lX2NvbF9idWZfc2l6ZSA+Cj4gKwkJICAgICh1bnNpZ25lZCBpbnQp aDI2NF9jdHgtPmNvbGxhdGVkX2NtYV9hZGRyX2VuZCkgewo+ICsJCQlkZXZfZXJyKGh3LT5kZXYs Cj4gKwkJCQkiRXJyb3IsIGNvbG9jYXRlIGJ1ZiBpcyBub3QgZW5vdWdoLCBpbmRleCBpcyAlZFxu IiwKPiArCQkJCWgyNjRfY3R4LT5jdXJyX3NwZWMuY29sX2J1Zl9pbmRleCk7Cj4gKwkJCXJldHVy biAtMTsKPiArCQl9Cj4gKwkJcmVnbWFwX3dyaXRlKGh3LT5tYXBbRE9TX0JVU10sIEgyNjRfQ09f TUJfV1JfQUREUiwKPiArCQkJICAgICAoY29sb2NhdGVfd3JfYWRyICsgY29sb2NhdGVfYWRyX29m ZnNldCkpOwo+ICsJCWRldl9kYmcoaHctPmRldiwgImNvbCBidWZmZXIgYWRkciA9IDB4JXggY29s X2J1Zl9pbmRleCAlZFxuIiwKPiArCQkJKGNvbG9jYXRlX3dyX2FkciArIGNvbG9jYXRlX2Fkcl9v ZmZzZXQpLAo+ICsJCQloMjY0X2N0eC0+Y3Vycl9zcGVjLmNvbF9idWZfaW5kZXgpOwo+ICsJfSBl bHNlIHsKPiArCQlyZWdtYXBfd3JpdGUoaHctPm1hcFtET1NfQlVTXSwgSDI2NF9DT19NQl9XUl9B RERSLCAweGZmZmZmZmZmKTsKPiArCQlkZXZfZGJnKGh3LT5kZXYsICJjb2wgYnVmZmVyIGFkZHIg PSAweGZmZmZmZmZmXG4iKTsKPiArCX0KPiArCj4gKwlpZiAoaDI2NF9jdHgtPmxpc3Rfc2l6ZVsx XSA+IDApIHsKPiArCQlzdHJ1Y3QgaDI2NF9kZWNvZGVfYnVmX3NwZWMgKmNvbG9jYXRlX3BpYyA9 Cj4gKwkJICAgICZoMjY0X2N0eC0+cmVmX2xpc3QxWzBdOwo+ICsJCXN0cnVjdCBoMjY0X2RlY29k ZV9idWZfc3BlYyAqY3Vycl9waWMgPSAmaDI2NF9jdHgtPmN1cnJfc3BlYzsKPiArCQlpbnQgbDEw X3N0cnVjdHVyZSA9IDI7CS8qIGZvciBwaWMgc3RydWN0ID09IEZSQU1FLCBkZWZhdWx0IHRvIDIg Ki8KPiArCQlpbnQgY3VyX2NvbG9jYXRlX3JlZl90eXBlOwo+ICsJCXVuc2lnbmVkIGludCBjb2xv Y2F0ZV9yZF9hZHI7Cj4gKwkJdW5zaWduZWQgaW50IGNvbG9jYXRlX3JkX2Fkcl9vZmZzZXQgPSAw Owo+ICsJCXVuc2lnbmVkIGludCB2YWw7Cj4gKwo+ICsJCWN1cl9jb2xvY2F0ZV9yZWZfdHlwZSA9 Cj4gKwkJICAgIChhYnMoY3Vycl9waWMtPnBvYyAtIGNvbG9jYXRlX3BpYy0+ZHBiLT50b3BfZmll bGRfb3JkZXJfY250KSA8Cj4gKwkJICAgICBhYnMoY3Vycl9waWMtPnBvYyAtIGNvbG9jYXRlX3Bp Yy0+ZHBiLT5ib3R0b21fZmllbGRfb3JkZXJfY250KSkgPyAwIDogMTsKPiArCQljb2xvY2F0ZV9y ZF9hZHJfb2Zmc2V0ID0gQ09MX1NJWkVfRk9SX09ORV9NQjsKPiArCQlpZiAodXNlX21vZGVfOHg4 X2ZsYWcpCj4gKwkJCWNvbG9jYXRlX3JkX2Fkcl9vZmZzZXQgPj49IDI7Cj4gKwo+ICsJCWNvbG9j YXRlX3JkX2Fkcl9vZmZzZXQgKj0gY3Vycl9zbGljZS0+Zmlyc3RfbWJfaW5fc2xpY2U7Cj4gKwkJ aWYgKGNvbG9jYXRlX3BpYy0+Y29sX2J1Zl9pbmRleCA+PSAwICYmCj4gKwkJICAgIGNvbG9jYXRl X3BpYy0+Y29sX2J1Zl9pbmRleCA8IGgyNjRfY3R4LT5jb2xvY2F0ZWRfYnVmX251bSkgewo+ICsJ CSAgICAvKiBjb2xsYXRlZF9jbWFfYWRkciBpcyBsaW1pdGVkIHRvIDMyYml0IGJ5IGZsYWcgR0ZQ X0RNQTMyIHdoZW4gYWxsb2NhdGVkICovCj4gKwkJCWNvbG9jYXRlX3JkX2FkciA9ICh1bnNpZ25l ZCBpbnQpaDI2NF9jdHgtPmNvbGxhdGVkX2NtYV9hZGRyICsKPiArCQkJICAgICgoaDI2NF9jdHgt Pm9uZV9jb2xfYnVmX3NpemUgKgo+ICsJCQkgICAgICBjb2xvY2F0ZV9waWMtPmNvbF9idWZfaW5k ZXgpID4+ICh1c2VfbW9kZV84eDhfZmxhZwo+ICsJCQkJCQkJICAgICAgID8gMiA6IDApKTsKPiAr CQkJaWYgKGNvbG9jYXRlX3JkX2Fkcl9vZmZzZXQgPiBoMjY0X2N0eC0+b25lX2NvbF9idWZfc2l6 ZSB8fAo+ICsJCQkgICAgY29sb2NhdGVfcmRfYWRyICsgaDI2NF9jdHgtPm9uZV9jb2xfYnVmX3Np emUgPgo+ICsJCQkgICAgKHVuc2lnbmVkIGludCloMjY0X2N0eC0+Y29sbGF0ZWRfY21hX2FkZHJf ZW5kKSB7Cj4gKwkJCQlkZXZfZXJyKGh3LT5kZXYsCj4gKwkJCQkJIkVycm9yLCBjb2xvY2F0ZSBy ZCBidWYgaXMgbm90IGVub3VnaCwgaW5kZXggaXMgJWRcbiIsCj4gKwkJCQkJY29sb2NhdGVfcGlj LT5jb2xfYnVmX2luZGV4KTsKPiArCQkJCXJldHVybiAtMTsKPiArCQkJfQo+ICsJCQl2YWwgID0g KChjb2xvY2F0ZV9yZF9hZHJfb2Zmc2V0ICsgY29sb2NhdGVfcmRfYWRyKSA+PiAzKSB8Cj4gKwkJ CQkoY3VyX2NvbG9jYXRlX3JlZl90eXBlIDw8IDI5KSB8Cj4gKwkJCQkobDEwX3N0cnVjdHVyZSA8 PCAzMCk7Cj4gKwkJCXJlZ21hcF93cml0ZShody0+bWFwW0RPU19CVVNdLCBIMjY0X0NPX01CX1JE X0FERFIsIHZhbCk7CgpbU2V2ZXJpdHk6IENyaXRpY2FsXQpJbiBoMjY0X2NvbmZpZ19kZWNvZGVf YnVmKCksIGNhbiBhIHNsaWNlIHdpdGggYSBub24temVybyBmaXJzdF9tYl9pbl9zbGljZQpwcm9n cmFtIEgyNjRfQ09fTUJfV1JfQUREUiBhbmQgSDI2NF9DT19NQl9SRF9BRERSIHRvIERNQSBwYXN0 IHRoZSBlbmQgb2YgdGhlCmNvbG9jYXRlZCBidWZmZXIgc2xvdCBvciBwYXN0IGgyNjRfY3R4LT5j b2xsYXRlZF9jbWFfYWRkcl9lbmQ/CgpXaGVuIHVzZV9tb2RlXzh4OF9mbGFnIGlzIHNldCwgZWFj aCBzbG90J3Mgc3RyaWRlIGlzCmgyNjRfY3R4LT5vbmVfY29sX2J1Zl9zaXplID4+IDIsIGJ1dCBj b2xvY2F0ZV9hZHJfb2Zmc2V0IGFuZApjb2xvY2F0ZV9yZF9hZHJfb2Zmc2V0IGFyZSBjb21wYXJl ZCBhZ2FpbnN0IHRoZSB1bnNoaWZ0ZWQKaDI2NF9jdHgtPm9uZV9jb2xfYnVmX3NpemUsIGFsbG93 aW5nIHRoZSBvZmZzZXQgdG8gY3Jvc3MgaW50byB0aGUgbmV4dCAzCmNvbG9jYXRlZCBidWZmZXIg c2xvdHMuCgpGdXJ0aGVybW9yZSwgdGhlIGVuZC1hZGRyZXNzIGNoZWNrIHRlc3RzCmNvbG9jYXRl X3dyX2FkciArIGgyNjRfY3R4LT5vbmVfY29sX2J1Zl9zaXplID4gaDI2NF9jdHgtPmNvbGxhdGVk X2NtYV9hZGRyX2VuZAp3aXRob3V0IGFkZGluZyBjb2xvY2F0ZV9hZHJfb2Zmc2V0IChhbmQgbGlr ZXdpc2UgZm9yIGNvbG9jYXRlX3JkX2FkciB3aXRob3V0CmNvbG9jYXRlX3JkX2Fkcl9vZmZzZXQp LCBzbyB3aGVuIGNvbF9idWZfaW5kZXggaXMgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIGFuZApj b2xvY2F0ZV9hZHJfb2Zmc2V0ID4gMCwgY29sb2NhdGVfd3JfYWRyICsgY29sb2NhdGVfYWRyX29m ZnNldCBjYW4gcG9pbnQgdXAgdG8Kb25lX2NvbF9idWZfc2l6ZSBieXRlcyBwYXN0IGNvbGxhdGVk X2NtYV9hZGRyX2VuZC4KClsgLi4uIF0KCj4gK30KClsgLi4uIF0KCj4gLS0gCj4gMi40My4wCgot LSAKU2FzaGlrbyBBSSByZXZpZXcgwrcgaHR0cHM6Ly9zYXNoaWtvLmRldi8jL3BhdGNoc2V0LzIw MjYxMDIyLWI0LXM0LXZkZWMtdXBzdHJlYW0tdjEyLTAtNjE2MjQwOTc4NzkyQGFtbG9naWMuY29t P3BhcnQ9NQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K bGludXgtYW1sb2dpYyBtYWlsaW5nIGxpc3QKbGludXgtYW1sb2dpY0BsaXN0cy5pbmZyYWRlYWQu b3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYW1s b2dpYwo=