From mboxrd@z Thu Jan 1 00:00:00 1970
From: Philipp Zabel
Subject: [PATCH v13 02/14] drm/mediatek: Add DRM Driver for Mediatek SoC
MT8173.
Date: Tue, 8 Mar 2016 14:27:17 +0100
Message-ID: <1457443649-12133-3-git-send-email-p.zabel@pengutronix.de>
References: <1457443649-12133-1-git-send-email-p.zabel@pengutronix.de>
Mime-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Return-path:
In-Reply-To: <1457443649-12133-1-git-send-email-p.zabel@pengutronix.de>
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
Errors-To: dri-devel-bounces@lists.freedesktop.org
Sender: "dri-devel"
To: dri-devel@lists.freedesktop.org
Cc: Mark Rutland , Stephen Boyd , Michael Turquette , Jie Qiu , Cawa Cheng , Mao Huang , YT Shen , Yingjoe Chen , devicetree@vger.kernel.org, Jitao Shi , kernel@pengutronix.de, Pawel Moll , Ian Campbell , Rob Herring , linux-mediatek@lists.infradead.org, Matthias Brugger , Paul Bolle , Emil Velikov , Tomasz Figa , Kumar Gala
List-Id: devicetree@vger.kernel.org
RnJvbTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KClRoaXMgcGF0Y2ggYWRkcyBhbiBpbml0
aWFsIERSTSBkcml2ZXIgZm9yIHRoZSBNZWRpYXRlayBNVDgxNzMgRElTUApzdWJzeXN0ZW0uIEl0
IGN1cnJlbnRseSBzdXBwb3J0cyB0d28gZml4ZWQgb3V0cHV0IHN0cmVhbXMgZnJvbSB0aGUKT1ZM
MC9PVkwxIHNvdXJjZXMgdG8gdGhlIERTSTAvRFBJMCBzaW5rcywgcmVzcGVjdGl2ZWx5LgoKU2ln
bmVkLW9mZi1ieTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KU2lnbmVkLW9mZi1ieTogWVQg
U2hlbiA8eXQuc2hlbkBtZWRpYXRlay5jb20+ClNpZ25lZC1vZmYtYnk6IERhbmllbCBLdXJ0eiA8
ZGprdXJ0ekBjaHJvbWl1bS5vcmc+ClNpZ25lZC1vZmYtYnk6IEJpYmJ5IEhzaWVoIDxiaWJieS5o
c2llaEBtZWRpYXRlay5jb20+ClNpZ25lZC1vZmYtYnk6IE1hbyBIdWFuZyA8bGl0dGxlY3ZyQGNo
cm9taXVtLm9yZz4KU2lnbmVkLW9mZi1ieTogUGhpbGlwcCBaYWJlbCA8cC56YWJlbEBwZW5ndXRy
b25peC5kZT4KLS0tCkNoYW5nZXMgc2luY2UgdjEyOgogLSB1c2UgT1ZMIGRldmljZSBpbnN0ZWFk
IG9mIG1tc3lzIGRldmljZSBmb3IgRE1BIGFsbG9jYXRpb25zCi0tLQogZHJpdmVycy9ncHUvZHJt
L0tjb25maWcgICAgICAgICAgICAgICAgICAgICB8ICAgMiArCiBkcml2ZXJzL2dwdS9kcm0vTWFr
ZWZpbGUgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRl
ay9LY29uZmlnICAgICAgICAgICAgfCAgMTIgKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01h
a2VmaWxlICAgICAgICAgICB8ICAxMSArCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Rp
c3Bfb3ZsLmMgICAgIHwgMzAyICsrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0
ZWsvbXRrX2Rpc3BfcmRtYS5jICAgIHwgMjQwICsrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMgICAgIHwgNTgyICsrKysrKysrKysrKysrKysrKysrKysr
KysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5oICAgICB8ICAzMiAr
KwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmMgICAgICB8IDM1NSArKysr
KysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmggICAg
ICB8ICA0MSArKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAuYyB8
IDIyNSArKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2Nv
bXAuaCB8IDE1MCArKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYu
YyAgICAgIHwgNTkyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2Ry
bS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oICAgICAgfCAgNTQgKysrCiBkcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvbXRrX2RybV9mYi5jICAgICAgIHwgMTY1ICsrKysrKysrCiBkcml2ZXJzL2dwdS9k
cm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5oICAgICAgIHwgIDIzICsrCiBkcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvbXRrX2RybV9nZW0uYyAgICAgIHwgMjY5ICsrKysrKysrKysrKysKIGRyaXZlcnMv
Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oICAgICAgfCAgNTkgKysrCiBkcml2ZXJzL2dw
dS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5jICAgIHwgMjQwICsrKysrKysrKysrCiBkcml2
ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5oICAgIHwgIDU5ICsrKwogMjAgZmls
ZXMgY2hhbmdlZCwgMzQxNCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy
cy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw
dS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k
cm0vbWVkaWF0ZWsvbXRrX2Rpc3Bfb3ZsLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw
dS9kcm0vbWVkaWF0ZWsvbXRrX2Rpc3BfcmRtYS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy
cy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp
dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg
ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmMKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuaAogY3JlYXRlIG1vZGUgMTAw
NjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9jb21wLmMKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5oCiBj
cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYu
aAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Zi
LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9m
Yi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1f
Z2VtLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry
bV9nZW0uaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf
ZHJtX3BsYW5lLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv
bXRrX2RybV9wbGFuZS5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcgYi9k
cml2ZXJzL2dwdS9kcm0vS2NvbmZpZwppbmRleCA4YWU3YWI2Li5mN2IwZDc5IDEwMDY0NAotLS0g
YS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwpA
QCAtMjY5LDMgKzI2OSw1IEBAIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2lteC9LY29uZmlnIgog
c291cmNlICJkcml2ZXJzL2dwdS9kcm0vdmM0L0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9n
cHUvZHJtL2V0bmF2aXYvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL2dwdS9kcm0vbWVkaWF0
ZWsvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZl
cnMvZ3B1L2RybS9NYWtlZmlsZQppbmRleCA2MTc2NmRlLi43YjBkMWFiIDEwMDY0NAotLS0gYS9k
cml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCkBA
IC02OSw2ICs2OSw3IEBAIG9iai0kKENPTkZJR19EUk1fTVNNKSArPSBtc20vCiBvYmotJChDT05G
SUdfRFJNX1RFR1JBKSArPSB0ZWdyYS8KIG9iai0kKENPTkZJR19EUk1fU1RJKSArPSBzdGkvCiBv
YmotJChDT05GSUdfRFJNX0lNWCkgKz0gaW14Lworb2JqLSQoQ09ORklHX0RSTV9NRURJQVRFSykg
Kz0gbWVkaWF0ZWsvCiBvYmoteQkJCSs9IGkyYy8KIG9iai15CQkJKz0gcGFuZWwvCiBvYmoteQkJ
CSs9IGJyaWRnZS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmln
IGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uOGRhZDg5MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry
bS9tZWRpYXRlay9LY29uZmlnCkBAIC0wLDAgKzEsMTIgQEAKK2NvbmZpZyBEUk1fTUVESUFURUsK
Kwl0cmlzdGF0ZSAiRFJNIFN1cHBvcnQgZm9yIE1lZGlhdGVrIFNvQ3MiCisJZGVwZW5kcyBvbiBE
Uk0KKwlkZXBlbmRzIG9uIEFSQ0hfTUVESUFURUsgfHwgKEFSTSAmJiBDT01QSUxFX1RFU1QpCisJ
c2VsZWN0IERSTV9LTVNfSEVMUEVSCisJc2VsZWN0IElPTU1VX0RNQQorCXNlbGVjdCBNVEtfU01J
CisJaGVscAorCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGEgTWVkaWF0ZWsgU29D
cy4KKwkgIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbWVkaWF0ZWstZHJtCisJICBUaGlzIGRy
aXZlciBwcm92aWRlcyBrZXJuZWwgbW9kZSBzZXR0aW5nIGFuZAorCSAgYnVmZmVyIG1hbmFnZW1l
bnQgdG8gdXNlcnNwYWNlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01h
a2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0YmRlN2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz
L2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKQEAgLTAsMCArMSwxMSBAQAorbWVkaWF0ZWstZHJt
LXkgOj0gbXRrX2Rpc3Bfb3ZsLm8gXAorCQkgIG10a19kaXNwX3JkbWEubyBcCisJCSAgbXRrX2Ry
bV9jcnRjLm8gXAorCQkgIG10a19kcm1fZGRwLm8gXAorCQkgIG10a19kcm1fZGRwX2NvbXAubyBc
CisJCSAgbXRrX2RybV9kcnYubyBcCisJCSAgbXRrX2RybV9mYi5vIFwKKwkJICBtdGtfZHJtX2dl
bS5vIFwKKwkJICBtdGtfZHJtX3BsYW5lLm8KKworb2JqLSQoQ09ORklHX0RSTV9NRURJQVRFSykg
Kz0gbWVkaWF0ZWstZHJtLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t
dGtfZGlzcF9vdmwuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZGlzcF9vdmwuYwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjYyNjcxZgotLS0gL2Rldi9udWxs
CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZGlzcF9vdmwuYwpAQCAtMCwwICsx
LDMwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICog
VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRl
IDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Nv
bXBvbmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4
L29mX2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVk
ZSAibXRrX2RybV9jcnRjLmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorCisjZGVm
aW5lIERJU1BfUkVHX09WTF9JTlRFTgkJCTB4MDAwNAorI2RlZmluZSBPVkxfRk1FX0NQTF9JTlQJ
CQkJCUJJVCgxKQorI2RlZmluZSBESVNQX1JFR19PVkxfSU5UU1RBCQkJMHgwMDA4CisjZGVmaW5l
IERJU1BfUkVHX09WTF9FTgkJCQkweDAwMGMKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX1JTVAkJCTB4
MDAxNAorI2RlZmluZSBESVNQX1JFR19PVkxfUk9JX1NJWkUJCQkweDAwMjAKKyNkZWZpbmUgRElT
UF9SRUdfT1ZMX1JPSV9CR0NMUgkJCTB4MDAyOAorI2RlZmluZSBESVNQX1JFR19PVkxfU1JDX0NP
TgkJCTB4MDAyYworI2RlZmluZSBESVNQX1JFR19PVkxfQ09OKG4pCQkJKDB4MDAzMCArIDB4MjAg
KiAobikpCisjZGVmaW5lIERJU1BfUkVHX09WTF9TUkNfU0laRShuKQkJKDB4MDAzOCArIDB4MjAg
KiAobikpCisjZGVmaW5lIERJU1BfUkVHX09WTF9PRkZTRVQobikJCQkoMHgwMDNjICsgMHgyMCAq
IChuKSkKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX1BJVENIKG4pCQkJKDB4MDA0NCArIDB4MjAgKiAo
bikpCisjZGVmaW5lIERJU1BfUkVHX09WTF9SRE1BX0NUUkwobikJCSgweDAwYzAgKyAweDIwICog
KG4pKQorI2RlZmluZSBESVNQX1JFR19PVkxfUkRNQV9HTUMobikJCSgweDAwYzggKyAweDIwICog
KG4pKQorI2RlZmluZSBESVNQX1JFR19PVkxfQUREUihuKQkJCSgweDBmNDAgKyAweDIwICogKG4p
KQorCisjZGVmaW5lCU9WTF9SRE1BX01FTV9HTUMJMHg0MDQwMjAyMAorCisjZGVmaW5lIE9WTF9D
T05fQllURV9TV0FQCUJJVCgyNCkKKyNkZWZpbmUgT1ZMX0NPTl9DTFJGTVRfUkdCNTY1CSgwIDw8
IDEyKQorI2RlZmluZSBPVkxfQ09OX0NMUkZNVF9SR0I4ODgJKDEgPDwgMTIpCisjZGVmaW5lIE9W
TF9DT05fQ0xSRk1UX1JHQkE4ODg4CSgyIDw8IDEyKQorI2RlZmluZSBPVkxfQ09OX0NMUkZNVF9B
UkdCODg4OAkoMyA8PCAxMikKKyNkZWZpbmUJT1ZMX0NPTl9BRU4JCUJJVCg4KQorI2RlZmluZQlP
VkxfQ09OX0FMUEhBCQkweGZmCisKKy8qKgorICogc3RydWN0IG10a19kaXNwX292bCAtIERJU1Bf
T1ZMIGRyaXZlciBzdHJ1Y3R1cmUKKyAqIEBkZHBfY29tcCAtIHN0cnVjdHVyZSBjb250YWluaW5n
IHR5cGUgZW51bSBhbmQgaGFyZHdhcmUgcmVzb3VyY2VzCisgKiBAY3J0YyAtIGFzc29jaWF0ZWQg
Y3J0YyB0byByZXBvcnQgdmJsYW5rIGV2ZW50cyB0bworICovCitzdHJ1Y3QgbXRrX2Rpc3Bfb3Zs
IHsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21wCQlkZHBfY29tcDsKKwlzdHJ1Y3QgZHJtX2NydGMJCQkq
Y3J0YzsKK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtdGtfZGlzcF9vdmxfaXJxX2hhbmRsZXIo
aW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBtdGtfZGlzcF9vdmwgKnByaXYgPSBk
ZXZfaWQ7CisJc3RydWN0IG10a19kZHBfY29tcCAqb3ZsID0gJnByaXYtPmRkcF9jb21wOworCisJ
LyogQ2xlYXIgZnJhbWUgY29tcGxldGlvbiBpbnRlcnJ1cHQgKi8KKwl3cml0ZWwoMHgwLCBvdmwt
PnJlZ3MgKyBESVNQX1JFR19PVkxfSU5UU1RBKTsKKworCWlmICghcHJpdi0+Y3J0YykKKwkJcmV0
dXJuIElSUV9OT05FOworCisJbXRrX2NydGNfZGRwX2lycShwcml2LT5jcnRjLCBvdmwpOworCisJ
cmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBtdGtfb3ZsX2VuYWJsZV92Ymxh
bmsoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwKKwkJCQkgIHN0cnVjdCBkcm1fY3J0YyAqY3J0
YykKK3sKKwlzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsICpwcml2ID0gY29udGFpbmVyX29mKGNvbXAsIHN0
cnVjdCBtdGtfZGlzcF9vdmwsCisJCQkJCQkgZGRwX2NvbXApOworCisJcHJpdi0+Y3J0YyA9IGNy
dGM7CisJd3JpdGVsX3JlbGF4ZWQoT1ZMX0ZNRV9DUExfSU5ULCBjb21wLT5yZWdzICsgRElTUF9S
RUdfT1ZMX0lOVEVOKTsKK30KKworc3RhdGljIHZvaWQgbXRrX292bF9kaXNhYmxlX3ZibGFuayhz
dHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXN0cnVjdCBtdGtfZGlzcF9vdmwgKnByaXYg
PSBjb250YWluZXJfb2YoY29tcCwgc3RydWN0IG10a19kaXNwX292bCwKKwkJCQkJCSBkZHBfY29t
cCk7CisKKwlwcml2LT5jcnRjID0gTlVMTDsKKwl3cml0ZWxfcmVsYXhlZCgweDAsIGNvbXAtPnJl
Z3MgKyBESVNQX1JFR19PVkxfSU5URU4pOworfQorCitzdGF0aWMgdm9pZCBtdGtfb3ZsX3N0YXJ0
KHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJd3JpdGVsX3JlbGF4ZWQoMHgxLCBjb21w
LT5yZWdzICsgRElTUF9SRUdfT1ZMX0VOKTsKK30KKworc3RhdGljIHZvaWQgbXRrX292bF9zdG9w
KHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJd3JpdGVsX3JlbGF4ZWQoMHgwLCBjb21w
LT5yZWdzICsgRElTUF9SRUdfT1ZMX0VOKTsKK30KKworc3RhdGljIHZvaWQgbXRrX292bF9jb25m
aWcoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgdW5zaWduZWQgaW50IHcsCisJCQkgICB1bnNp
Z25lZCBpbnQgaCwgdW5zaWduZWQgaW50IHZyZWZyZXNoKQoreworCWlmICh3ICE9IDAgJiYgaCAh
PSAwKQorCQl3cml0ZWxfcmVsYXhlZChoIDw8IDE2IHwgdywgY29tcC0+cmVncyArIERJU1BfUkVH
X09WTF9ST0lfU0laRSk7CisJd3JpdGVsX3JlbGF4ZWQoMHgwLCBjb21wLT5yZWdzICsgRElTUF9S
RUdfT1ZMX1JPSV9CR0NMUik7CisKKwl3cml0ZWwoMHgxLCBjb21wLT5yZWdzICsgRElTUF9SRUdf
T1ZMX1JTVCk7CisJd3JpdGVsKDB4MCwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9SU1QpOwor
fQorCitzdGF0aWMgdm9pZCBtdGtfb3ZsX2xheWVyX29uKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNv
bXAsIHVuc2lnbmVkIGludCBpZHgpCit7CisJdW5zaWduZWQgaW50IHJlZzsKKworCXdyaXRlbCgw
eDEsIGNvbXAtPnJlZ3MgKyBESVNQX1JFR19PVkxfUkRNQV9DVFJMKGlkeCkpOworCXdyaXRlbChP
VkxfUkRNQV9NRU1fR01DLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1JETUFfR01DKGlkeCkp
OworCisJcmVnID0gcmVhZGwoY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9TUkNfQ09OKTsKKwly
ZWcgPSByZWcgfCBCSVQoaWR4KTsKKwl3cml0ZWwocmVnLCBjb21wLT5yZWdzICsgRElTUF9SRUdf
T1ZMX1NSQ19DT04pOworfQorCitzdGF0aWMgdm9pZCBtdGtfb3ZsX2xheWVyX29mZihzdHJ1Y3Qg
bXRrX2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQgaWR4KQoreworCXVuc2lnbmVkIGludCBy
ZWc7CisKKwlyZWcgPSByZWFkbChjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1NSQ19DT04pOwor
CXJlZyA9IHJlZyAmIH5CSVQoaWR4KTsKKwl3cml0ZWwocmVnLCBjb21wLT5yZWdzICsgRElTUF9S
RUdfT1ZMX1NSQ19DT04pOworCisJd3JpdGVsKDB4MCwgY29tcC0+cmVncyArIERJU1BfUkVHX09W
TF9SRE1BX0NUUkwoaWR4KSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgb3ZsX2ZtdF9jb252
ZXJ0KHVuc2lnbmVkIGludCBmbXQpCit7CisJc3dpdGNoIChmbXQpIHsKKwlkZWZhdWx0OgorCWNh
c2UgRFJNX0ZPUk1BVF9SR0I1NjU6CisJCXJldHVybiBPVkxfQ09OX0NMUkZNVF9SR0I1NjU7CisJ
Y2FzZSBEUk1fRk9STUFUX0JHUjU2NToKKwkJcmV0dXJuIE9WTF9DT05fQ0xSRk1UX1JHQjU2NSB8
IE9WTF9DT05fQllURV9TV0FQOworCWNhc2UgRFJNX0ZPUk1BVF9SR0I4ODg6CisJCXJldHVybiBP
VkxfQ09OX0NMUkZNVF9SR0I4ODg7CisJY2FzZSBEUk1fRk9STUFUX0JHUjg4ODoKKwkJcmV0dXJu
IE9WTF9DT05fQ0xSRk1UX1JHQjg4OCB8IE9WTF9DT05fQllURV9TV0FQOworCWNhc2UgRFJNX0ZP
Uk1BVF9SR0JYODg4ODoKKwljYXNlIERSTV9GT1JNQVRfUkdCQTg4ODg6CisJCXJldHVybiBPVkxf
Q09OX0NMUkZNVF9BUkdCODg4ODsKKwljYXNlIERSTV9GT1JNQVRfQkdSWDg4ODg6CisJY2FzZSBE
Uk1fRk9STUFUX0JHUkE4ODg4OgorCQlyZXR1cm4gT1ZMX0NPTl9DTFJGTVRfQVJHQjg4ODggfCBP
VkxfQ09OX0JZVEVfU1dBUDsKKwljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6CisJY2FzZSBEUk1f
Rk9STUFUX0FSR0I4ODg4OgorCQlyZXR1cm4gT1ZMX0NPTl9DTFJGTVRfUkdCQTg4ODg7CisJY2Fz
ZSBEUk1fRk9STUFUX1hCR1I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKKwkJcmV0
dXJuIE9WTF9DT05fQ0xSRk1UX1JHQkE4ODg4IHwgT1ZMX0NPTl9CWVRFX1NXQVA7CisJfQorfQor
CitzdGF0aWMgdm9pZCBtdGtfb3ZsX2xheWVyX2NvbmZpZyhzdHJ1Y3QgbXRrX2RkcF9jb21wICpj
b21wLCB1bnNpZ25lZCBpbnQgaWR4LAorCQkJCSBzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0
ZSkKK3sKKwlzdHJ1Y3QgbXRrX3BsYW5lX3BlbmRpbmdfc3RhdGUgKnBlbmRpbmcgPSAmc3RhdGUt
PnBlbmRpbmc7CisJdW5zaWduZWQgaW50IGFkZHIgPSBwZW5kaW5nLT5hZGRyOworCXVuc2lnbmVk
IGludCBwaXRjaCA9IHBlbmRpbmctPnBpdGNoICYgMHhmZmZmOworCXVuc2lnbmVkIGludCBmbXQg
PSBwZW5kaW5nLT5mb3JtYXQ7CisJdW5zaWduZWQgaW50IG9mZnNldCA9IChwZW5kaW5nLT55IDw8
IDE2KSB8IHBlbmRpbmctPng7CisJdW5zaWduZWQgaW50IHNyY19zaXplID0gKHBlbmRpbmctPmhl
aWdodCA8PCAxNikgfCBwZW5kaW5nLT53aWR0aDsKKwl1bnNpZ25lZCBpbnQgY29uOworCisJaWYg
KCFwZW5kaW5nLT5lbmFibGUpCisJCW10a19vdmxfbGF5ZXJfb2ZmKGNvbXAsIGlkeCk7CisKKwlj
b24gPSBvdmxfZm10X2NvbnZlcnQoZm10KTsKKwlpZiAoaWR4ICE9IDApCisJCWNvbiB8PSBPVkxf
Q09OX0FFTiB8IE9WTF9DT05fQUxQSEE7CisKKwl3cml0ZWxfcmVsYXhlZChjb24sIGNvbXAtPnJl
Z3MgKyBESVNQX1JFR19PVkxfQ09OKGlkeCkpOworCXdyaXRlbF9yZWxheGVkKHBpdGNoLCBjb21w
LT5yZWdzICsgRElTUF9SRUdfT1ZMX1BJVENIKGlkeCkpOworCXdyaXRlbF9yZWxheGVkKHNyY19z
aXplLCBjb21wLT5yZWdzICsgRElTUF9SRUdfT1ZMX1NSQ19TSVpFKGlkeCkpOworCXdyaXRlbF9y
ZWxheGVkKG9mZnNldCwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9PRkZTRVQoaWR4KSk7CisJ
d3JpdGVsX3JlbGF4ZWQoYWRkciwgY29tcC0+cmVncyArIERJU1BfUkVHX09WTF9BRERSKGlkeCkp
OworCisJaWYgKHBlbmRpbmctPmVuYWJsZSkKKwkJbXRrX292bF9sYXllcl9vbihjb21wLCBpZHgp
OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5jcyBtdGtfZGlzcF9v
dmxfZnVuY3MgPSB7CisJLmNvbmZpZyA9IG10a19vdmxfY29uZmlnLAorCS5zdGFydCA9IG10a19v
dmxfc3RhcnQsCisJLnN0b3AgPSBtdGtfb3ZsX3N0b3AsCisJLmVuYWJsZV92YmxhbmsgPSBtdGtf
b3ZsX2VuYWJsZV92YmxhbmssCisJLmRpc2FibGVfdmJsYW5rID0gbXRrX292bF9kaXNhYmxlX3Zi
bGFuaywKKwkubGF5ZXJfb24gPSBtdGtfb3ZsX2xheWVyX29uLAorCS5sYXllcl9vZmYgPSBtdGtf
b3ZsX2xheWVyX29mZiwKKwkubGF5ZXJfY29uZmlnID0gbXRrX292bF9sYXllcl9jb25maWcsCit9
OworCitzdGF0aWMgaW50IG10a19kaXNwX292bF9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3Ry
dWN0IGRldmljZSAqbWFzdGVyLAorCQkJICAgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBtdGtf
ZGlzcF9vdmwgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHJtX2Rldmlj
ZSAqZHJtX2RldiA9IGRhdGE7CisJaW50IHJldDsKKworCXJldCA9IG10a19kZHBfY29tcF9yZWdp
c3Rlcihkcm1fZGV2LCAmcHJpdi0+ZGRwX2NvbXApOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9l
cnIoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvbXBvbmVudCAlczogJWRcbiIsCisJCQlkZXYt
Pm9mX25vZGUtPmZ1bGxfbmFtZSwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4g
MDsKK30KKworc3RhdGljIHZvaWQgbXRrX2Rpc3Bfb3ZsX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpk
ZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJCQl2b2lkICpkYXRhKQoreworCXN0cnVjdCBt
dGtfZGlzcF9vdmwgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHJtX2Rl
dmljZSAqZHJtX2RldiA9IGRhdGE7CisKKwltdGtfZGRwX2NvbXBfdW5yZWdpc3Rlcihkcm1fZGV2
LCAmcHJpdi0+ZGRwX2NvbXApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9v
cHMgbXRrX2Rpc3Bfb3ZsX2NvbXBvbmVudF9vcHMgPSB7CisJLmJpbmQJPSBtdGtfZGlzcF9vdmxf
YmluZCwKKwkudW5iaW5kID0gbXRrX2Rpc3Bfb3ZsX3VuYmluZCwKK307CisKK3N0YXRpYyBpbnQg
bXRrX2Rpc3Bfb3ZsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3Ry
dWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgbXRrX2Rpc3Bfb3ZsICpwcml2
OworCWludCBjb21wX2lkOworCWludCBpcnE7CisJaW50IHJldDsKKworCXByaXYgPSBkZXZtX2t6
YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpCisJCXJl
dHVybiAtRU5PTUVNOworCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAo
aXJxIDwgMCkKKwkJcmV0dXJuIGlycTsKKworCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBp
cnEsIG10a19kaXNwX292bF9pcnFfaGFuZGxlciwKKwkJCSAgICAgICBJUlFGX1RSSUdHRVJfTk9O
RSwgZGV2X25hbWUoZGV2KSwgcHJpdik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYs
ICJGYWlsZWQgdG8gcmVxdWVzdCBpcnEgJWQ6ICVkXG4iLCBpcnEsIHJldCk7CisJCXJldHVybiBy
ZXQ7CisJfQorCisJY29tcF9pZCA9IG10a19kZHBfY29tcF9nZXRfaWQoZGV2LT5vZl9ub2RlLCBN
VEtfRElTUF9PVkwpOworCWlmIChjb21wX2lkIDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxl
ZCB0byBpZGVudGlmeSBieSBhbGlhczogJWRcbiIsIGNvbXBfaWQpOworCQlyZXR1cm4gY29tcF9p
ZDsKKwl9CisKKwlyZXQgPSBtdGtfZGRwX2NvbXBfaW5pdChkZXYsIGRldi0+b2Zfbm9kZSwgJnBy
aXYtPmRkcF9jb21wLCBjb21wX2lkLAorCQkJCSZtdGtfZGlzcF9vdmxfZnVuY3MpOworCWlmIChy
ZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb21wb25lbnQ6ICVk
XG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBk
ZXYsIHByaXYpOworCisJcmV0ID0gY29tcG9uZW50X2FkZChkZXYsICZtdGtfZGlzcF9vdmxfY29t
cG9uZW50X29wcyk7CisJaWYgKHJldCkKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gYWRkIGNv
bXBvbmVudDogJWRcbiIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10
a19kaXNwX292bF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwljb21w
b25lbnRfZGVsKCZwZGV2LT5kZXYsICZtdGtfZGlzcF9vdmxfY29tcG9uZW50X29wcyk7CisKKwly
ZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRrX2Rpc3Bf
b3ZsX2RyaXZlcl9kdF9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4
MTczLWRpc3Atb3ZsIiwgfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtdGtf
ZGlzcF9vdmxfZHJpdmVyX2R0X21hdGNoKTsKKworc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtf
ZGlzcF9vdmxfZHJpdmVyID0geworCS5wcm9iZQkJPSBtdGtfZGlzcF9vdmxfcHJvYmUsCisJLnJl
bW92ZQkJPSBtdGtfZGlzcF9vdmxfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJt
ZWRpYXRlay1kaXNwLW92bCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkub2ZfbWF0Y2hf
dGFibGUgPSBtdGtfZGlzcF9vdmxfZHJpdmVyX2R0X21hdGNoLAorCX0sCit9OwpkaWZmIC0tZ2l0
IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kaXNwX3JkbWEuYyBiL2RyaXZlcnMvZ3B1
L2RybS9tZWRpYXRlay9tdGtfZGlzcF9yZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMzY4YWU4NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRp
YXRlay9tdGtfZGlzcF9yZG1hLmMKQEAgLTAsMCArMSwyNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwor
ICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhp
cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxs
aW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wb25lbnQuaD4KKyNpbmNsdWRlIDxsaW51
eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KKyNpbmNsdWRlIDxsaW51
eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgIm10a19kcm1fY3J0Yy5oIgorI2luY2x1
ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKKworI2RlZmluZSBESVNQX1JFR19SRE1BX0lOVF9FTkFC
TEUJCTB4MDAwMAorI2RlZmluZSBESVNQX1JFR19SRE1BX0lOVF9TVEFUVVMJCTB4MDAwNAorI2Rl
ZmluZSBSRE1BX1RBUkdFVF9MSU5FX0lOVAkJCQlCSVQoNSkKKyNkZWZpbmUgUkRNQV9GSUZPX1VO
REVSRkxPV19JTlQJCQkJQklUKDQpCisjZGVmaW5lIFJETUFfRU9GX0FCTk9STUFMX0lOVAkJCQlC
SVQoMykKKyNkZWZpbmUgUkRNQV9GUkFNRV9FTkRfSU5UCQkJCUJJVCgyKQorI2RlZmluZSBSRE1B
X0ZSQU1FX1NUQVJUX0lOVAkJCQlCSVQoMSkKKyNkZWZpbmUgUkRNQV9SRUdfVVBEQVRFX0lOVAkJ
CQlCSVQoMCkKKyNkZWZpbmUgRElTUF9SRUdfUkRNQV9HTE9CQUxfQ09OCQkweDAwMTAKKyNkZWZp
bmUgUkRNQV9FTkdJTkVfRU4JCQkJCUJJVCgwKQorI2RlZmluZSBESVNQX1JFR19SRE1BX1NJWkVf
Q09OXzAJCTB4MDAxNAorI2RlZmluZSBESVNQX1JFR19SRE1BX1NJWkVfQ09OXzEJCTB4MDAxOAor
I2RlZmluZSBESVNQX1JFR19SRE1BX1RBUkdFVF9MSU5FCQkweDAwMWMKKyNkZWZpbmUgRElTUF9S
RUdfUkRNQV9GSUZPX0NPTgkJCTB4MDA0MAorI2RlZmluZSBSRE1BX0ZJRk9fVU5ERVJGTE9XX0VO
CQkJCUJJVCgzMSkKKyNkZWZpbmUgUkRNQV9GSUZPX1BTRVVET19TSVpFKGJ5dGVzKQkJCSgoKGJ5
dGVzKSAvIDE2KSA8PCAxNikKKyNkZWZpbmUgUkRNQV9PVVRQVVRfVkFMSURfRklGT19USFJFU0hP
TEQoYnl0ZXMpCQkoKGJ5dGVzKSAvIDE2KQorCisvKioKKyAqIHN0cnVjdCBtdGtfZGlzcF9yZG1h
IC0gRElTUF9SRE1BIGRyaXZlciBzdHJ1Y3R1cmUKKyAqIEBkZHBfY29tcCAtIHN0cnVjdHVyZSBj
b250YWluaW5nIHR5cGUgZW51bSBhbmQgaGFyZHdhcmUgcmVzb3VyY2VzCisgKiBAY3J0YyAtIGFz
c29jaWF0ZWQgY3J0YyB0byByZXBvcnQgaXJxIGV2ZW50cyB0bworICovCitzdHJ1Y3QgbXRrX2Rp
c3BfcmRtYSB7CisJc3RydWN0IG10a19kZHBfY29tcAkJZGRwX2NvbXA7CisJc3RydWN0IGRybV9j
cnRjCQkJKmNydGM7Cit9OworCitzdGF0aWMgaXJxcmV0dXJuX3QgbXRrX2Rpc3BfcmRtYV9pcnFf
aGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG10a19kaXNwX3JkbWEg
KnByaXYgPSBkZXZfaWQ7CisJc3RydWN0IG10a19kZHBfY29tcCAqcmRtYSA9ICZwcml2LT5kZHBf
Y29tcDsKKworCS8qIENsZWFyIGZyYW1lIGNvbXBsZXRpb24gaW50ZXJydXB0ICovCisJd3JpdGVs
KDB4MCwgcmRtYS0+cmVncyArIERJU1BfUkVHX1JETUFfSU5UX1NUQVRVUyk7CisKKwlpZiAoIXBy
aXYtPmNydGMpCisJCXJldHVybiBJUlFfTk9ORTsKKworCW10a19jcnRjX2RkcF9pcnEocHJpdi0+
Y3J0YywgcmRtYSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIHJk
bWFfdXBkYXRlX2JpdHMoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgdW5zaWduZWQgaW50IHJl
ZywKKwkJCSAgICAgdW5zaWduZWQgaW50IG1hc2ssIHVuc2lnbmVkIGludCB2YWwpCit7CisJdW5z
aWduZWQgaW50IHRtcCA9IHJlYWRsKGNvbXAtPnJlZ3MgKyByZWcpOworCisJdG1wID0gKHRtcCAm
IH5tYXNrKSB8ICh2YWwgJiBtYXNrKTsKKwl3cml0ZWwodG1wLCBjb21wLT5yZWdzICsgcmVnKTsK
K30KKworc3RhdGljIHZvaWQgbXRrX3JkbWFfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgbXRrX2RkcF9j
b21wICpjb21wLAorCQkJCSAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgbXRr
X2Rpc3BfcmRtYSAqcHJpdiA9IGNvbnRhaW5lcl9vZihjb21wLCBzdHJ1Y3QgbXRrX2Rpc3BfcmRt
YSwKKwkJCQkJCSAgZGRwX2NvbXApOworCisJcHJpdi0+Y3J0YyA9IGNydGM7CisJcmRtYV91cGRh
dGVfYml0cyhjb21wLCBESVNQX1JFR19SRE1BX0lOVF9FTkFCTEUsIFJETUFfRlJBTUVfRU5EX0lO
VCwKKwkJCSBSRE1BX0ZSQU1FX0VORF9JTlQpOworfQorCitzdGF0aWMgdm9pZCBtdGtfcmRtYV9k
aXNhYmxlX3ZibGFuayhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXN0cnVjdCBtdGtf
ZGlzcF9yZG1hICpwcml2ID0gY29udGFpbmVyX29mKGNvbXAsIHN0cnVjdCBtdGtfZGlzcF9yZG1h
LAorCQkJCQkJICBkZHBfY29tcCk7CisKKwlwcml2LT5jcnRjID0gTlVMTDsKKwlyZG1hX3VwZGF0
ZV9iaXRzKGNvbXAsIERJU1BfUkVHX1JETUFfSU5UX0VOQUJMRSwgUkRNQV9GUkFNRV9FTkRfSU5U
LCAwKTsKK30KKworc3RhdGljIHZvaWQgbXRrX3JkbWFfc3RhcnQoc3RydWN0IG10a19kZHBfY29t
cCAqY29tcCkKK3sKKwlyZG1hX3VwZGF0ZV9iaXRzKGNvbXAsIERJU1BfUkVHX1JETUFfR0xPQkFM
X0NPTiwgUkRNQV9FTkdJTkVfRU4sCisJCQkgUkRNQV9FTkdJTkVfRU4pOworfQorCitzdGF0aWMg
dm9pZCBtdGtfcmRtYV9zdG9wKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7CisJcmRtYV91
cGRhdGVfYml0cyhjb21wLCBESVNQX1JFR19SRE1BX0dMT0JBTF9DT04sIFJETUFfRU5HSU5FX0VO
LCAwKTsKK30KKworc3RhdGljIHZvaWQgbXRrX3JkbWFfY29uZmlnKHN0cnVjdCBtdGtfZGRwX2Nv
bXAgKmNvbXAsIHVuc2lnbmVkIHdpZHRoLAorCQkJICAgIHVuc2lnbmVkIGhlaWdodCwgdW5zaWdu
ZWQgaW50IHZyZWZyZXNoKQoreworCXVuc2lnbmVkIGludCB0aHJlc2hvbGQ7CisJdW5zaWduZWQg
aW50IHJlZzsKKworCXJkbWFfdXBkYXRlX2JpdHMoY29tcCwgRElTUF9SRUdfUkRNQV9TSVpFX0NP
Tl8wLCAweGZmZiwgd2lkdGgpOworCXJkbWFfdXBkYXRlX2JpdHMoY29tcCwgRElTUF9SRUdfUkRN
QV9TSVpFX0NPTl8xLCAweGZmZmZmLCBoZWlnaHQpOworCisJLyoKKwkgKiBFbmFibGUgRklGTyB1
bmRlcmZsb3cgc2luY2UgRFNJIGFuZCBEUEkgY2FuJ3QgYmUgYmxvY2tlZC4KKwkgKiBLZWVwIHRo
ZSBGSUZPIHBzZXVkbyBzaXplIHJlc2V0IGRlZmF1bHQgb2YgOCBLaUIuIFNldCB0aGUKKwkgKiBv
dXRwdXQgdGhyZXNob2xkIHRvIDYgbWljcm9zZWNvbmRzIHdpdGggNy82IG92ZXJoZWFkIHRvCisJ
ICogYWNjb3VudCBmb3IgYmxhbmtpbmcsIGFuZCB3aXRoIGEgcGl4ZWwgZGVwdGggb2YgNCBieXRl
czoKKwkgKi8KKwl0aHJlc2hvbGQgPSB3aWR0aCAqIGhlaWdodCAqIHZyZWZyZXNoICogNCAqIDcg
LyAxMDAwMDAwOworCXJlZyA9IFJETUFfRklGT19VTkRFUkZMT1dfRU4gfAorCSAgICAgIFJETUFf
RklGT19QU0VVRE9fU0laRShTWl84SykgfAorCSAgICAgIFJETUFfT1VUUFVUX1ZBTElEX0ZJRk9f
VEhSRVNIT0xEKHRocmVzaG9sZCk7CisJd3JpdGVsKHJlZywgY29tcC0+cmVncyArIERJU1BfUkVH
X1JETUFfRklGT19DT04pOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9m
dW5jcyBtdGtfZGlzcF9yZG1hX2Z1bmNzID0geworCS5jb25maWcgPSBtdGtfcmRtYV9jb25maWcs
CisJLnN0YXJ0ID0gbXRrX3JkbWFfc3RhcnQsCisJLnN0b3AgPSBtdGtfcmRtYV9zdG9wLAorCS5l
bmFibGVfdmJsYW5rID0gbXRrX3JkbWFfZW5hYmxlX3ZibGFuaywKKwkuZGlzYWJsZV92Ymxhbmsg
PSBtdGtfcmRtYV9kaXNhYmxlX3ZibGFuaywKK307CisKK3N0YXRpYyBpbnQgbXRrX2Rpc3BfcmRt
YV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAorCQkJICAg
ICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbXRrX2Rpc3BfcmRtYSAqcHJpdiA9IGRldl9nZXRf
ZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gZGF0YTsKKwlpbnQg
cmV0OworCisJcmV0ID0gbXRrX2RkcF9jb21wX3JlZ2lzdGVyKGRybV9kZXYsICZwcml2LT5kZHBf
Y29tcCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVnaXN0
ZXIgY29tcG9uZW50ICVzOiAlZFxuIiwKKwkJCWRldi0+b2Zfbm9kZS0+ZnVsbF9uYW1lLCByZXQp
OworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworCit9CisKK3N0YXRpYyB2b2lkIG10
a19kaXNwX3JkbWFfdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFz
dGVyLAorCQkJCSB2b2lkICpkYXRhKQoreworCXN0cnVjdCBtdGtfZGlzcF9yZG1hICpwcml2ID0g
ZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBkYXRh
OworCisJbXRrX2RkcF9jb21wX3VucmVnaXN0ZXIoZHJtX2RldiwgJnByaXYtPmRkcF9jb21wKTsK
K30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25lbnRfb3BzIG10a19kaXNwX3JkbWFfY29t
cG9uZW50X29wcyA9IHsKKwkuYmluZAk9IG10a19kaXNwX3JkbWFfYmluZCwKKwkudW5iaW5kID0g
bXRrX2Rpc3BfcmRtYV91bmJpbmQsCit9OworCitzdGF0aWMgaW50IG10a19kaXNwX3JkbWFfcHJv
YmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYg
PSAmcGRldi0+ZGV2OworCXN0cnVjdCBtdGtfZGlzcF9yZG1hICpwcml2OworCWludCBjb21wX2lk
OworCWludCBpcnE7CisJaW50IHJldDsKKworCXByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXpl
b2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpCisJCXJldHVybiAtRU5PTUVNOwor
CisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkKKwkJcmV0
dXJuIGlycTsKKworCWNvbXBfaWQgPSBtdGtfZGRwX2NvbXBfZ2V0X2lkKGRldi0+b2Zfbm9kZSwg
TVRLX0RJU1BfUkRNQSk7CisJaWYgKGNvbXBfaWQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFp
bGVkIHRvIGlkZW50aWZ5IGJ5IGFsaWFzOiAlZFxuIiwgY29tcF9pZCk7CisJCXJldHVybiBjb21w
X2lkOworCX0KKworCXJldCA9IG10a19kZHBfY29tcF9pbml0KGRldiwgZGV2LT5vZl9ub2RlLCAm
cHJpdi0+ZGRwX2NvbXAsIGNvbXBfaWQsCisJCQkJJm10a19kaXNwX3JkbWFfZnVuY3MpOworCWlm
IChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb21wb25lbnQ6
ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIERpc2FibGUgYW5kIGNsZWFy
IHBlbmRpbmcgaW50ZXJydXB0cyAqLworCXdyaXRlbCgweDAsIHByaXYtPmRkcF9jb21wLnJlZ3Mg
KyBESVNQX1JFR19SRE1BX0lOVF9FTkFCTEUpOworCXdyaXRlbCgweDAsIHByaXYtPmRkcF9jb21w
LnJlZ3MgKyBESVNQX1JFR19SRE1BX0lOVF9TVEFUVVMpOworCisJcmV0ID0gZGV2bV9yZXF1ZXN0
X2lycShkZXYsIGlycSwgbXRrX2Rpc3BfcmRtYV9pcnFfaGFuZGxlciwKKwkJCSAgICAgICBJUlFG
X1RSSUdHRVJfTk9ORSwgZGV2X25hbWUoZGV2KSwgcHJpdik7CisJaWYgKHJldCA8IDApIHsKKwkJ
ZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBpcnEgJWQ6ICVkXG4iLCBpcnEsIHJldCk7
CisJCXJldHVybiByZXQ7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7
CisKKwlyZXQgPSBjb21wb25lbnRfYWRkKGRldiwgJm10a19kaXNwX3JkbWFfY29tcG9uZW50X29w
cyk7CisJaWYgKHJldCkKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gYWRkIGNvbXBvbmVudDog
JWRcbiIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10a19kaXNwX3Jk
bWFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29tcG9uZW50X2Rl
bCgmcGRldi0+ZGV2LCAmbXRrX2Rpc3BfcmRtYV9jb21wb25lbnRfb3BzKTsKKworCXJldHVybiAw
OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfZGlzcF9yZG1hX2Ry
aXZlcl9kdF9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRp
c3AtcmRtYSIsIH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXRrX2Rpc3Bf
cmRtYV9kcml2ZXJfZHRfbWF0Y2gpOworCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19kaXNw
X3JkbWFfZHJpdmVyID0geworCS5wcm9iZQkJPSBtdGtfZGlzcF9yZG1hX3Byb2JlLAorCS5yZW1v
dmUJCT0gbXRrX2Rpc3BfcmRtYV9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIm1l
ZGlhdGVrLWRpc3AtcmRtYSIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkub2ZfbWF0Y2hf
dGFibGUgPSBtdGtfZGlzcF9yZG1hX2RyaXZlcl9kdF9tYXRjaCwKKwl9LAorfTsKZGlmZiAtLWdp
dCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuYyBiL2RyaXZlcnMvZ3B1
L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5jZTNlZmEwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlh
dGVrL210a19kcm1fY3J0Yy5jCkBAIC0wLDAgKzEsNTgyIEBACisvKgorICogQ29weXJpZ2h0IChj
KSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAq
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMg
cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGFzbS9iYXJyaWVyLmg+CisjaW5jbHVkZSA8
ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRl
IDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wbGFuZV9oZWxwZXIu
aD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+
CisjaW5jbHVkZSA8c29jL21lZGlhdGVrL3NtaS5oPgorCisjaW5jbHVkZSAibXRrX2RybV9kcnYu
aCIKKyNpbmNsdWRlICJtdGtfZHJtX2NydGMuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2RkcC5oIgor
I2luY2x1ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2dlbS5oIgor
I2luY2x1ZGUgIm10a19kcm1fcGxhbmUuaCIKKworLyoqCisgKiBzdHJ1Y3QgbXRrX2RybV9jcnRj
IC0gTWVkaWFUZWsgc3BlY2lmaWMgY3J0YyBzdHJ1Y3R1cmUuCisgKiBAYmFzZTogY3J0YyBvYmpl
Y3QuCisgKiBAZW5hYmxlZDogcmVjb3JkcyB3aGV0aGVyIGNydGNfZW5hYmxlIHN1Y2NlZWRlZAor
ICogQHBsYW5lczogYXJyYXkgb2YgNCBtdGtfZHJtX3BsYW5lIHN0cnVjdHVyZXMsIG9uZSBmb3Ig
ZWFjaCBvdmVybGF5IHBsYW5lCisgKiBAcGVuZGluZ19wbGFuZXM6IHdoZXRoZXIgYW55IHBsYW5l
IGhhcyBwZW5kaW5nIGNoYW5nZXMgdG8gYmUgYXBwbGllZAorICogQGNvbmZpZ19yZWdzOiBtZW1v
cnkgbWFwcGVkIG1tc3lzIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgc3BhY2UKKyAqIEBtdXRleDog
aGFuZGxlIHRvIG9uZSBvZiB0aGUgdGVuIGRpc3BfbXV0ZXggc3RyZWFtcworICogQGRkcF9jb21w
X25yOiBudW1iZXIgb2YgY29tcG9uZW50cyBpbiBkZHBfY29tcAorICogQGRkcF9jb21wOiBhcnJh
eSBvZiBwb2ludGVycyB0aGUgbXRrX2RkcF9jb21wIHN0cnVjdHVyZXMgdXNlZCBieSB0aGlzIGNy
dGMKKyAqLworc3RydWN0IG10a19kcm1fY3J0YyB7CisJc3RydWN0IGRybV9jcnRjCQkJYmFzZTsK
Kwlib29sCQkJCWVuYWJsZWQ7CisKKwlib29sCQkJCXBlbmRpbmdfbmVlZHNfdmJsYW5rOworCXN0
cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQJKmV2ZW50OworCisJc3RydWN0IG10a19kcm1f
cGxhbmUJCXBsYW5lc1tPVkxfTEFZRVJfTlJdOworCWJvb2wJCQkJcGVuZGluZ19wbGFuZXM7CisK
Kwl2b2lkIF9faW9tZW0JCQkqY29uZmlnX3JlZ3M7CisJc3RydWN0IG10a19kaXNwX211dGV4CQkq
bXV0ZXg7CisJdW5zaWduZWQgaW50CQkJZGRwX2NvbXBfbnI7CisJc3RydWN0IG10a19kZHBfY29t
cAkJKipkZHBfY29tcDsKK307CisKK3N0cnVjdCBtdGtfY3J0Y19zdGF0ZSB7CisJc3RydWN0IGRy
bV9jcnRjX3N0YXRlCQliYXNlOworCisJYm9vbAkJCQlwZW5kaW5nX2NvbmZpZzsKKwl1bnNpZ25l
ZCBpbnQJCQlwZW5kaW5nX3dpZHRoOworCXVuc2lnbmVkIGludAkJCXBlbmRpbmdfaGVpZ2h0Owor
CXVuc2lnbmVkIGludAkJCXBlbmRpbmdfdnJlZnJlc2g7Cit9OworCitzdGF0aWMgaW5saW5lIHN0
cnVjdCBtdGtfZHJtX2NydGMgKnRvX210a19jcnRjKHN0cnVjdCBkcm1fY3J0YyAqYykKK3sKKwly
ZXR1cm4gY29udGFpbmVyX29mKGMsIHN0cnVjdCBtdGtfZHJtX2NydGMsIGJhc2UpOworfQorCitz
dGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfY3J0Y19zdGF0ZSAqdG9fbXRrX2NydGNfc3RhdGUoc3Ry
dWN0IGRybV9jcnRjX3N0YXRlICpzKQoreworCXJldHVybiBjb250YWluZXJfb2Yocywgc3RydWN0
IG10a19jcnRjX3N0YXRlLCBiYXNlKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RybV9jcnRjX2Zp
bmlzaF9wYWdlX2ZsaXAoc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMpCit7CisJc3RydWN0
IGRybV9jcnRjICpjcnRjID0gJm10a19jcnRjLT5iYXNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7
CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CisJ
ZHJtX3NlbmRfdmJsYW5rX2V2ZW50KGNydGMtPmRldiwgbXRrX2NydGMtPmV2ZW50LT5waXBlLCBt
dGtfY3J0Yy0+ZXZlbnQpOworCWRybV9jcnRjX3ZibGFua19wdXQoY3J0Yyk7CisJbXRrX2NydGMt
PmV2ZW50ID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcnRjLT5kZXYtPmV2ZW50
X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RybV9maW5pc2hfcGFnZV9mbGlw
KHN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjKQoreworCWRybV9jcnRjX2hhbmRsZV92Ymxh
bmsoJm10a19jcnRjLT5iYXNlKTsKKwlpZiAobXRrX2NydGMtPnBlbmRpbmdfbmVlZHNfdmJsYW5r
KSB7CisJCW10a19kcm1fY3J0Y19maW5pc2hfcGFnZV9mbGlwKG10a19jcnRjKTsKKwkJbXRrX2Ny
dGMtPnBlbmRpbmdfbmVlZHNfdmJsYW5rID0gZmFsc2U7CisJfQorfQorCitzdGF0aWMgdm9pZCBt
dGtfZHJtX2NydGNfZGVzdHJveShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IG10
a19kcm1fY3J0YyAqbXRrX2NydGMgPSB0b19tdGtfY3J0YyhjcnRjKTsKKwlpbnQgaTsKKworCWZv
ciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7IGkrKykKKwkJY2xrX3VucHJlcGFy
ZShtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmNsayk7CisKKwltdGtfZGlzcF9tdXRleF9wdXQobXRr
X2NydGMtPm11dGV4KTsKKworCWRybV9jcnRjX2NsZWFudXAoY3J0Yyk7Cit9CisKK3N0YXRpYyB2
b2lkIG10a19kcm1fY3J0Y19yZXNldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0
IG10a19jcnRjX3N0YXRlICpzdGF0ZTsKKworCWlmIChjcnRjLT5zdGF0ZSkgeworCQlpZiAoY3J0
Yy0+c3RhdGUtPm1vZGVfYmxvYikKKwkJCWRybV9wcm9wZXJ0eV91bnJlZmVyZW5jZV9ibG9iKGNy
dGMtPnN0YXRlLT5tb2RlX2Jsb2IpOworCisJCXN0YXRlID0gdG9fbXRrX2NydGNfc3RhdGUoY3J0
Yy0+c3RhdGUpOworCQltZW1zZXQoc3RhdGUsIDAsIHNpemVvZigqc3RhdGUpKTsKKwl9IGVsc2Ug
eworCQlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOworCQlpZiAo
IXN0YXRlKQorCQkJcmV0dXJuOworCQljcnRjLT5zdGF0ZSA9ICZzdGF0ZS0+YmFzZTsKKwl9CisK
KwlzdGF0ZS0+YmFzZS5jcnRjID0gY3J0YzsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fY3J0Y19z
dGF0ZSAqbXRrX2RybV9jcnRjX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMp
Cit7CisJc3RydWN0IG10a19jcnRjX3N0YXRlICpzdGF0ZTsKKworCXN0YXRlID0ga3phbGxvYyhz
aXplb2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdGF0ZSkKKwkJcmV0dXJuIE5VTEw7
CisKKwlfX2RybV9hdG9taWNfaGVscGVyX2NydGNfZHVwbGljYXRlX3N0YXRlKGNydGMsICZzdGF0
ZS0+YmFzZSk7CisKKwlXQVJOX09OKHN0YXRlLT5iYXNlLmNydGMgIT0gY3J0Yyk7CisJc3RhdGUt
PmJhc2UuY3J0YyA9IGNydGM7CisKKwlyZXR1cm4gJnN0YXRlLT5iYXNlOworfQorCitzdGF0aWMg
dm9pZCBtdGtfZHJtX2NydGNfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJ
CQkJICAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCit7CisJX19kcm1fYXRvbWlj
X2hlbHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUoY3J0Yywgc3RhdGUpOworCWtmcmVlKHRvX210a19j
cnRjX3N0YXRlKHN0YXRlKSk7Cit9CisKK3N0YXRpYyBib29sIG10a19kcm1fY3J0Y19tb2RlX2Zp
eHVwKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCQkgICAgY29uc3Qgc3RydWN0IGRybV9kaXNw
bGF5X21vZGUgKm1vZGUsCisJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3Rl
ZF9tb2RlKQoreworCS8qIE5vdGhpbmcgdG8gZG8gaGVyZSwgYnV0IHRoaXMgY2FsbGJhY2sgaXMg
bWFuZGF0b3J5LiAqLworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2Ny
dGNfbW9kZV9zZXRfbm9mYihzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IG10a19j
cnRjX3N0YXRlICpzdGF0ZSA9IHRvX210a19jcnRjX3N0YXRlKGNydGMtPnN0YXRlKTsKKworCXN0
YXRlLT5wZW5kaW5nX3dpZHRoID0gY3J0Yy0+bW9kZS5oZGlzcGxheTsKKwlzdGF0ZS0+cGVuZGlu
Z19oZWlnaHQgPSBjcnRjLT5tb2RlLnZkaXNwbGF5OworCXN0YXRlLT5wZW5kaW5nX3ZyZWZyZXNo
ID0gY3J0Yy0+bW9kZS52cmVmcmVzaDsKKwl3bWIoKTsJLyogTWFrZSBzdXJlIHRoZSBhYm92ZSBw
YXJhbWV0ZXJzIGFyZSBzZXQgYmVmb3JlIHVwZGF0ZSAqLworCXN0YXRlLT5wZW5kaW5nX2NvbmZp
ZyA9IHRydWU7Cit9CisKK2ludCBtdGtfZHJtX2NydGNfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJt
X2RldmljZSAqZHJtLCB1bnNpZ25lZCBpbnQgcGlwZSkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2
YXRlICpwcml2ID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtf
Y3J0YyA9IHRvX210a19jcnRjKHByaXYtPmNydGNbcGlwZV0pOworCXN0cnVjdCBtdGtfZGRwX2Nv
bXAgKm92bCA9IG10a19jcnRjLT5kZHBfY29tcFswXTsKKworCW10a19kZHBfY29tcF9lbmFibGVf
dmJsYW5rKG92bCwgJm10a19jcnRjLT5iYXNlKTsKKworCXJldHVybiAwOworfQorCit2b2lkIG10
a19kcm1fY3J0Y19kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNpZ25l
ZCBpbnQgcGlwZSkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2ID0gZHJtLT5kZXZf
cHJpdmF0ZTsKKwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YyA9IHRvX210a19jcnRjKHBy
aXYtPmNydGNbcGlwZV0pOworCXN0cnVjdCBtdGtfZGRwX2NvbXAgKm92bCA9IG10a19jcnRjLT5k
ZHBfY29tcFswXTsKKworCW10a19kZHBfY29tcF9kaXNhYmxlX3ZibGFuayhvdmwpOworfQorCitz
dGF0aWMgaW50IG10a19jcnRjX2RkcF9jbGtfZW5hYmxlKHN0cnVjdCBtdGtfZHJtX2NydGMgKm10
a19jcnRjKQoreworCWludCByZXQ7CisJaW50IGk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCIlc1xu
IiwgX19mdW5jX18pOworCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7IGkr
KykgeworCQlyZXQgPSBjbGtfZW5hYmxlKG10a19jcnRjLT5kZHBfY29tcFtpXS0+Y2xrKTsKKwkJ
aWYgKHJldCkgeworCQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZW5hYmxlIGNsb2NrICVkOiAlZFxu
IiwgaSwgcmV0KTsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCisJcmV0dXJuIDA7CitlcnI6CisJ
d2hpbGUgKC0taSA+PSAwKQorCQljbGtfZGlzYWJsZShtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmNs
ayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXRrX2NydGNfZGRwX2Nsa19kaXNh
YmxlKHN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjKQoreworCWludCBpOworCisJRFJNX0RF
QlVHX0RSSVZFUigiJXNcbiIsIF9fZnVuY19fKTsKKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMt
PmRkcF9jb21wX25yOyBpKyspCisJCWNsa19kaXNhYmxlKG10a19jcnRjLT5kZHBfY29tcFtpXS0+
Y2xrKTsKK30KKworc3RhdGljIGludCBtdGtfY3J0Y19kZHBfaHdfaW5pdChzdHJ1Y3QgbXRrX2Ry
bV9jcnRjICptdGtfY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSAmbXRrX2NydGMt
PmJhc2U7CisJdW5zaWduZWQgaW50IHdpZHRoLCBoZWlnaHQsIHZyZWZyZXNoOworCWludCByZXQ7
CisJaW50IGk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCIlc1xuIiwgX19mdW5jX18pOworCWlmIChX
QVJOX09OKCFjcnRjLT5zdGF0ZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJd2lkdGggPSBjcnRj
LT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZS5oZGlzcGxheTsKKwloZWlnaHQgPSBjcnRjLT5zdGF0ZS0+
YWRqdXN0ZWRfbW9kZS52ZGlzcGxheTsKKwl2cmVmcmVzaCA9IGNydGMtPnN0YXRlLT5hZGp1c3Rl
ZF9tb2RlLnZyZWZyZXNoOworCisJcmV0ID0gcG1fcnVudGltZV9nZXRfc3luYyhjcnRjLT5kZXYt
PmRldik7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZW5hYmxlIHBv
d2VyIGRvbWFpbjogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gbXRr
X2Rpc3BfbXV0ZXhfcHJlcGFyZShtdGtfY3J0Yy0+bXV0ZXgpOworCWlmIChyZXQgPCAwKSB7CisJ
CURSTV9FUlJPUigiRmFpbGVkIHRvIGVuYWJsZSBtdXRleCBjbG9jazogJWRcbiIsIHJldCk7CisJ
CWdvdG8gZXJyX3BtX3J1bnRpbWVfcHV0OworCX0KKworCXJldCA9IG10a19jcnRjX2RkcF9jbGtf
ZW5hYmxlKG10a19jcnRjKTsKKwlpZiAocmV0IDwgMCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0
byBlbmFibGUgY29tcG9uZW50IGNsb2NrczogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX211dGV4
X3VucHJlcGFyZTsKKwl9CisKKwlEUk1fREVCVUdfRFJJVkVSKCJtZWRpYXRla19kZHBfZGRwX3Bh
dGhfc2V0dXBcbiIpOworCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnIgLSAx
OyBpKyspIHsKKwkJbXRrX2RkcF9hZGRfY29tcF90b19wYXRoKG10a19jcnRjLT5jb25maWdfcmVn
cywKKwkJCQkJIG10a19jcnRjLT5kZHBfY29tcFtpXS0+aWQsCisJCQkJCSBtdGtfY3J0Yy0+ZGRw
X2NvbXBbaSArIDFdLT5pZCk7CisJCW10a19kaXNwX211dGV4X2FkZF9jb21wKG10a19jcnRjLT5t
dXRleCwKKwkJCQkJbXRrX2NydGMtPmRkcF9jb21wW2ldLT5pZCk7CisJfQorCW10a19kaXNwX211
dGV4X2FkZF9jb21wKG10a19jcnRjLT5tdXRleCwgbXRrX2NydGMtPmRkcF9jb21wW2ldLT5pZCk7
CisJbXRrX2Rpc3BfbXV0ZXhfZW5hYmxlKG10a19jcnRjLT5tdXRleCk7CisKKwlmb3IgKGkgPSAw
OyBpIDwgbXRrX2NydGMtPmRkcF9jb21wX25yOyBpKyspIHsKKwkJc3RydWN0IG10a19kZHBfY29t
cCAqY29tcCA9IG10a19jcnRjLT5kZHBfY29tcFtpXTsKKworCQltdGtfZGRwX2NvbXBfY29uZmln
KGNvbXAsIHdpZHRoLCBoZWlnaHQsIHZyZWZyZXNoKTsKKwkJbXRrX2RkcF9jb21wX3N0YXJ0KGNv
bXApOworCX0KKworCS8qIEluaXRpYWxseSBjb25maWd1cmUgYWxsIHBsYW5lcyAqLworCWZvciAo
aSA9IDA7IGkgPCBPVkxfTEFZRVJfTlI7IGkrKykgeworCQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu
ZSA9ICZtdGtfY3J0Yy0+cGxhbmVzW2ldLmJhc2U7CisJCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUg
KnBsYW5lX3N0YXRlOworCisJCXBsYW5lX3N0YXRlID0gdG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5l
LT5zdGF0ZSk7CisJCW10a19kZHBfY29tcF9sYXllcl9jb25maWcobXRrX2NydGMtPmRkcF9jb21w
WzBdLCBpLAorCQkJCQkgIHBsYW5lX3N0YXRlKTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX211
dGV4X3VucHJlcGFyZToKKwltdGtfZGlzcF9tdXRleF91bnByZXBhcmUobXRrX2NydGMtPm11dGV4
KTsKK2Vycl9wbV9ydW50aW1lX3B1dDoKKwlwbV9ydW50aW1lX3B1dChjcnRjLT5kZXYtPmRldik7
CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXRrX2NydGNfZGRwX2h3X2Zpbmkoc3Ry
dWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9
IG10a19jcnRjLT5iYXNlLmRldjsKKwlpbnQgaTsKKworCURSTV9ERUJVR19EUklWRVIoIiVzXG4i
LCBfX2Z1bmNfXyk7CisJZm9yIChpID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9ucjsgaSsr
KQorCQltdGtfZGRwX2NvbXBfc3RvcChtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0pOworCWZvciAoaSA9
IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7IGkrKykKKwkJbXRrX2Rpc3BfbXV0ZXhfcmVt
b3ZlX2NvbXAobXRrX2NydGMtPm11dGV4LAorCQkJCQkgICBtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0t
PmlkKTsKKwltdGtfZGlzcF9tdXRleF9kaXNhYmxlKG10a19jcnRjLT5tdXRleCk7CisJZm9yIChp
ID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9uciAtIDE7IGkrKykgeworCQltdGtfZGRwX3Jl
bW92ZV9jb21wX2Zyb21fcGF0aChtdGtfY3J0Yy0+Y29uZmlnX3JlZ3MsCisJCQkJCSAgICAgIG10
a19jcnRjLT5kZHBfY29tcFtpXS0+aWQsCisJCQkJCSAgICAgIG10a19jcnRjLT5kZHBfY29tcFtp
ICsgMV0tPmlkKTsKKwkJbXRrX2Rpc3BfbXV0ZXhfcmVtb3ZlX2NvbXAobXRrX2NydGMtPm11dGV4
LAorCQkJCQkgICBtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmlkKTsKKwl9CisJbXRrX2Rpc3BfbXV0
ZXhfcmVtb3ZlX2NvbXAobXRrX2NydGMtPm11dGV4LCBtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmlk
KTsKKwltdGtfY3J0Y19kZHBfY2xrX2Rpc2FibGUobXRrX2NydGMpOworCW10a19kaXNwX211dGV4
X3VucHJlcGFyZShtdGtfY3J0Yy0+bXV0ZXgpOworCisJcG1fcnVudGltZV9wdXQoZHJtLT5kZXYp
OworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfZW5hYmxlKHN0cnVjdCBkcm1fY3J0YyAq
Y3J0YykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YyA9IHRvX210a19jcnRjKGNy
dGMpOworCXN0cnVjdCBtdGtfZGRwX2NvbXAgKm92bCA9IG10a19jcnRjLT5kZHBfY29tcFswXTsK
KwlpbnQgcmV0OworCisJRFJNX0RFQlVHX0RSSVZFUigiJXMgJWRcbiIsIF9fZnVuY19fLCBjcnRj
LT5iYXNlLmlkKTsKKworCXJldCA9IG10a19zbWlfbGFyYl9nZXQob3ZsLT5sYXJiX2Rldik7CisJ
aWYgKHJldCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBnZXQgbGFyYjogJWRcbiIsIHJldCk7
CisJCXJldHVybjsKKwl9CisKKwlyZXQgPSBtdGtfY3J0Y19kZHBfaHdfaW5pdChtdGtfY3J0Yyk7
CisJaWYgKHJldCkgeworCQltdGtfc21pX2xhcmJfcHV0KG92bC0+bGFyYl9kZXYpOworCQlyZXR1
cm47CisJfQorCisJZHJtX2NydGNfdmJsYW5rX29uKGNydGMpOworCW10a19jcnRjLT5lbmFibGVk
ID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RybV9jcnRjX2Rpc2FibGUoc3RydWN0IGRy
bV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRr
X2NydGMoY3J0Yyk7CisJc3RydWN0IG10a19kZHBfY29tcCAqb3ZsID0gbXRrX2NydGMtPmRkcF9j
b21wWzBdOworCWludCBpOworCisJRFJNX0RFQlVHX0RSSVZFUigiJXMgJWRcbiIsIF9fZnVuY19f
LCBjcnRjLT5iYXNlLmlkKTsKKwlpZiAoV0FSTl9PTighbXRrX2NydGMtPmVuYWJsZWQpKQorCQly
ZXR1cm47CisKKwkvKiBTZXQgYWxsIHBlbmRpbmcgcGxhbmUgc3RhdGUgdG8gZGlzYWJsZWQgKi8K
Kwlmb3IgKGkgPSAwOyBpIDwgT1ZMX0xBWUVSX05SOyBpKyspIHsKKwkJc3RydWN0IGRybV9wbGFu
ZSAqcGxhbmUgPSAmbXRrX2NydGMtPnBsYW5lc1tpXS5iYXNlOworCQlzdHJ1Y3QgbXRrX3BsYW5l
X3N0YXRlICpwbGFuZV9zdGF0ZTsKKworCQlwbGFuZV9zdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0
ZShwbGFuZS0+c3RhdGUpOworCQlwbGFuZV9zdGF0ZS0+cGVuZGluZy5lbmFibGUgPSBmYWxzZTsK
KwkJcGxhbmVfc3RhdGUtPnBlbmRpbmcuY29uZmlnID0gdHJ1ZTsKKwl9CisJbXRrX2NydGMtPnBl
bmRpbmdfcGxhbmVzID0gdHJ1ZTsKKworCS8qIFdhaXQgZm9yIHBsYW5lcyB0byBiZSBkaXNhYmxl
ZCAqLworCWRybV9jcnRjX3dhaXRfb25lX3ZibGFuayhjcnRjKTsKKworCWRybV9jcnRjX3ZibGFu
a19vZmYoY3J0Yyk7CisJbXRrX2NydGNfZGRwX2h3X2ZpbmkobXRrX2NydGMpOworCW10a19zbWlf
bGFyYl9wdXQob3ZsLT5sYXJiX2Rldik7CisKKwltdGtfY3J0Yy0+ZW5hYmxlZCA9IGZhbHNlOwor
fQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfYXRvbWljX2JlZ2luKHN0cnVjdCBkcm1fY3J0
YyAqY3J0YywKKwkJCQkgICAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRl
KQoreworCXN0cnVjdCBtdGtfY3J0Y19zdGF0ZSAqc3RhdGUgPSB0b19tdGtfY3J0Y19zdGF0ZShj
cnRjLT5zdGF0ZSk7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMgPSB0b19tdGtfY3J0
YyhjcnRjKTsKKworCWlmIChtdGtfY3J0Yy0+ZXZlbnQgJiYgc3RhdGUtPmJhc2UuZXZlbnQpCisJ
CURSTV9FUlJPUigibmV3IGV2ZW50IHdoaWxlIHRoZXJlIGlzIHN0aWxsIGEgcGVuZGluZyBldmVu
dFxuIik7CisKKwlpZiAoc3RhdGUtPmJhc2UuZXZlbnQpIHsKKwkJc3RhdGUtPmJhc2UuZXZlbnQt
PnBpcGUgPSBkcm1fY3J0Y19pbmRleChjcnRjKTsKKwkJV0FSTl9PTihkcm1fY3J0Y192Ymxhbmtf
Z2V0KGNydGMpICE9IDApOworCQltdGtfY3J0Yy0+ZXZlbnQgPSBzdGF0ZS0+YmFzZS5ldmVudDsK
KwkJc3RhdGUtPmJhc2UuZXZlbnQgPSBOVUxMOworCX0KK30KKworc3RhdGljIHZvaWQgbXRrX2Ry
bV9jcnRjX2F0b21pY19mbHVzaChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJICAgICAgc3Ry
dWN0IGRybV9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9j
cnRjICptdGtfY3J0YyA9IHRvX210a19jcnRjKGNydGMpOworCXVuc2lnbmVkIGludCBwZW5kaW5n
X3BsYW5lcyA9IDA7CisJaW50IGk7CisKKwlpZiAobXRrX2NydGMtPmV2ZW50KQorCQltdGtfY3J0
Yy0+cGVuZGluZ19uZWVkc192YmxhbmsgPSB0cnVlOworCWZvciAoaSA9IDA7IGkgPCBPVkxfTEFZ
RVJfTlI7IGkrKykgeworCQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9ICZtdGtfY3J0Yy0+cGxh
bmVzW2ldLmJhc2U7CisJCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlOworCisJ
CXBsYW5lX3N0YXRlID0gdG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7CisJCWlmIChw
bGFuZV9zdGF0ZS0+cGVuZGluZy5kaXJ0eSkgeworCQkJcGxhbmVfc3RhdGUtPnBlbmRpbmcuY29u
ZmlnID0gdHJ1ZTsKKwkJCXBsYW5lX3N0YXRlLT5wZW5kaW5nLmRpcnR5ID0gZmFsc2U7CisJCQlw
ZW5kaW5nX3BsYW5lcyB8PSBCSVQoaSk7CisJCX0KKwl9CisJaWYgKHBlbmRpbmdfcGxhbmVzKQor
CQltdGtfY3J0Yy0+cGVuZGluZ19wbGFuZXMgPSB0cnVlOworfQorCitzdGF0aWMgY29uc3Qgc3Ry
dWN0IGRybV9jcnRjX2Z1bmNzIG10a19jcnRjX2Z1bmNzID0geworCS5zZXRfY29uZmlnCQk9IGRy
bV9hdG9taWNfaGVscGVyX3NldF9jb25maWcsCisJLnBhZ2VfZmxpcAkJPSBkcm1fYXRvbWljX2hl
bHBlcl9wYWdlX2ZsaXAsCisJLmRlc3Ryb3kJCT0gbXRrX2RybV9jcnRjX2Rlc3Ryb3ksCisJLnJl
c2V0CQkJPSBtdGtfZHJtX2NydGNfcmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUJPSBt
dGtfZHJtX2NydGNfZHVwbGljYXRlX3N0YXRlLAorCS5hdG9taWNfZGVzdHJveV9zdGF0ZQk9IG10
a19kcm1fY3J0Y19kZXN0cm95X3N0YXRlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1f
Y3J0Y19oZWxwZXJfZnVuY3MgbXRrX2NydGNfaGVscGVyX2Z1bmNzID0geworCS5tb2RlX2ZpeHVw
CT0gbXRrX2RybV9jcnRjX21vZGVfZml4dXAsCisJLm1vZGVfc2V0X25vZmIJPSBtdGtfZHJtX2Ny
dGNfbW9kZV9zZXRfbm9mYiwKKwkuZW5hYmxlCQk9IG10a19kcm1fY3J0Y19lbmFibGUsCisJLmRp
c2FibGUJPSBtdGtfZHJtX2NydGNfZGlzYWJsZSwKKwkuYXRvbWljX2JlZ2luCT0gbXRrX2RybV9j
cnRjX2F0b21pY19iZWdpbiwKKwkuYXRvbWljX2ZsdXNoCT0gbXRrX2RybV9jcnRjX2F0b21pY19m
bHVzaCwKK307CisKK3N0YXRpYyBpbnQgbXRrX2RybV9jcnRjX2luaXQoc3RydWN0IGRybV9kZXZp
Y2UgKmRybSwKKwkJCSAgICAgc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMsCisJCQkgICAg
IHN0cnVjdCBkcm1fcGxhbmUgKnByaW1hcnksCisJCQkgICAgIHN0cnVjdCBkcm1fcGxhbmUgKmN1
cnNvciwgdW5zaWduZWQgaW50IHBpcGUpCit7CisJaW50IHJldDsKKworCXJldCA9IGRybV9jcnRj
X2luaXRfd2l0aF9wbGFuZXMoZHJtLCAmbXRrX2NydGMtPmJhc2UsIHByaW1hcnksIGN1cnNvciwK
KwkJCQkJJm10a19jcnRjX2Z1bmNzLCBOVUxMKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9jbGVh
bnVwX2NydGM7CisKKwlkcm1fY3J0Y19oZWxwZXJfYWRkKCZtdGtfY3J0Yy0+YmFzZSwgJm10a19j
cnRjX2hlbHBlcl9mdW5jcyk7CisKKwlyZXR1cm4gMDsKKworZXJyX2NsZWFudXBfY3J0YzoKKwlk
cm1fY3J0Y19jbGVhbnVwKCZtdGtfY3J0Yy0+YmFzZSk7CisJcmV0dXJuIHJldDsKK30KKwordm9p
ZCBtdGtfY3J0Y19kZHBfaXJxKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IG10a19kZHBf
Y29tcCAqb3ZsKQoreworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRrX2Ny
dGMoY3J0Yyk7CisJc3RydWN0IG10a19jcnRjX3N0YXRlICpzdGF0ZSA9IHRvX210a19jcnRjX3N0
YXRlKG10a19jcnRjLT5iYXNlLnN0YXRlKTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCS8qCisJICog
VE9ETzogaW5zdGVhZCBvZiB1cGRhdGluZyB0aGUgcmVnaXN0ZXJzIGhlcmUsIHdlIHNob3VsZCBw
cmVwYXJlCisJICogd29ya2luZyByZWdpc3RlcnMgaW4gYXRvbWljX2NvbW1pdCBhbmQgbGV0IHRo
ZSBoYXJkd2FyZSBjb21tYW5kCisJICogcXVldWUgdXBkYXRlIG1vZHVsZSByZWdpc3RlcnMgb24g
dmJsYW5rLgorCSAqLworCWlmIChzdGF0ZS0+cGVuZGluZ19jb25maWcpIHsKKwkJbXRrX2RkcF9j
b21wX2NvbmZpZyhvdmwsIHN0YXRlLT5wZW5kaW5nX3dpZHRoLAorCQkJCSAgICBzdGF0ZS0+cGVu
ZGluZ19oZWlnaHQsCisJCQkJICAgIHN0YXRlLT5wZW5kaW5nX3ZyZWZyZXNoKTsKKworCQlzdGF0
ZS0+cGVuZGluZ19jb25maWcgPSBmYWxzZTsKKwl9CisKKwlpZiAobXRrX2NydGMtPnBlbmRpbmdf
cGxhbmVzKSB7CisJCWZvciAoaSA9IDA7IGkgPCBPVkxfTEFZRVJfTlI7IGkrKykgeworCQkJc3Ry
dWN0IGRybV9wbGFuZSAqcGxhbmUgPSAmbXRrX2NydGMtPnBsYW5lc1tpXS5iYXNlOworCQkJc3Ry
dWN0IG10a19wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGU7CisKKwkJCXBsYW5lX3N0YXRlID0gdG9f
bXRrX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7CisKKwkJCWlmIChwbGFuZV9zdGF0ZS0+cGVu
ZGluZy5jb25maWcpIHsKKwkJCQltdGtfZGRwX2NvbXBfbGF5ZXJfY29uZmlnKG92bCwgaSwgcGxh
bmVfc3RhdGUpOworCQkJCXBsYW5lX3N0YXRlLT5wZW5kaW5nLmNvbmZpZyA9IGZhbHNlOworCQkJ
fQorCQl9CisJCW10a19jcnRjLT5wZW5kaW5nX3BsYW5lcyA9IGZhbHNlOworCX0KKworCW10a19k
cm1fZmluaXNoX3BhZ2VfZmxpcChtdGtfY3J0Yyk7Cit9CisKK2ludCBtdGtfZHJtX2NydGNfY3Jl
YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2LAorCQkJY29uc3QgZW51bSBtdGtfZGRwX2Nv
bXBfaWQgKnBhdGgsIHVuc2lnbmVkIGludCBwYXRoX2xlbikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9w
cml2YXRlICpwcml2ID0gZHJtX2Rldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRldmljZSAqZGV2
ID0gZHJtX2Rldi0+ZGV2OworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjOworCWVudW0g
ZHJtX3BsYW5lX3R5cGUgdHlwZTsKKwl1bnNpZ25lZCBpbnQgenBvczsKKwlpbnQgcGlwZSA9IHBy
aXYtPm51bV9waXBlczsKKwlpbnQgcmV0OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHBh
dGhfbGVuOyBpKyspIHsKKwkJZW51bSBtdGtfZGRwX2NvbXBfaWQgY29tcF9pZCA9IHBhdGhbaV07
CisJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKKworCQlub2RlID0gcHJpdi0+Y29tcF9ub2Rl
W2NvbXBfaWRdOworCQlpZiAoIW5vZGUpIHsKKwkJCWRldl9pbmZvKGRldiwKKwkJCQkgIk5vdCBj
cmVhdGluZyBjcnRjICVkIGJlY2F1c2UgY29tcG9uZW50ICVkIGlzIGRpc2FibGVkIG9yIG1pc3Np
bmdcbiIsCisJCQkJIHBpcGUsIGNvbXBfaWQpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlt
dGtfY3J0YyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbXRrX2NydGMpLCBHRlBfS0VSTkVM
KTsKKwlpZiAoIW10a19jcnRjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW10a19jcnRjLT5jb25m
aWdfcmVncyA9IHByaXYtPmNvbmZpZ19yZWdzOworCW10a19jcnRjLT5kZHBfY29tcF9uciA9IHBh
dGhfbGVuOworCW10a19jcnRjLT5kZHBfY29tcCA9IGRldm1fa21hbGxvY19hcnJheShkZXYsIG10
a19jcnRjLT5kZHBfY29tcF9uciwKKwkJCQkJCXNpemVvZigqbXRrX2NydGMtPmRkcF9jb21wKSwK
KwkJCQkJCUdGUF9LRVJORUwpOworCisJbXRrX2NydGMtPm11dGV4ID0gbXRrX2Rpc3BfbXV0ZXhf
Z2V0KHByaXYtPm11dGV4X2RldiwgcGlwZSk7CisJaWYgKElTX0VSUihtdGtfY3J0Yy0+bXV0ZXgp
KSB7CisJCXJldCA9IFBUUl9FUlIobXRrX2NydGMtPm11dGV4KTsKKwkJZGV2X2VycihkZXYsICJG
YWlsZWQgdG8gZ2V0IG11dGV4OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlm
b3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRkcF9jb21wX25yOyBpKyspIHsKKwkJZW51bSBtdGtf
ZGRwX2NvbXBfaWQgY29tcF9pZCA9IHBhdGhbaV07CisJCXN0cnVjdCBtdGtfZGRwX2NvbXAgKmNv
bXA7CisJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKKworCQlub2RlID0gcHJpdi0+Y29tcF9u
b2RlW2NvbXBfaWRdOworCQljb21wID0gcHJpdi0+ZGRwX2NvbXBbY29tcF9pZF07CisJCWlmICgh
Y29tcCkgeworCQkJZGV2X2VycihkZXYsICJDb21wb25lbnQgJXMgbm90IGluaXRpYWxpemVkXG4i
LAorCQkJCW5vZGUtPmZ1bGxfbmFtZSk7CisJCQlyZXQgPSAtRU5PREVWOworCQkJZ290byB1bnBy
ZXBhcmU7CisJCX0KKworCQlyZXQgPSBjbGtfcHJlcGFyZShjb21wLT5jbGspOworCQlpZiAocmV0
KSB7CisJCQlkZXZfZXJyKGRldiwKKwkJCQkiRmFpbGVkIHRvIHByZXBhcmUgY2xvY2sgZm9yIGNv
bXBvbmVudCAlczogJWRcbiIsCisJCQkJbm9kZS0+ZnVsbF9uYW1lLCByZXQpOworCQkJZ290byB1
bnByZXBhcmU7CisJCX0KKworCQltdGtfY3J0Yy0+ZGRwX2NvbXBbaV0gPSBjb21wOworCX0KKwor
CWZvciAoenBvcyA9IDA7IHpwb3MgPCBPVkxfTEFZRVJfTlI7IHpwb3MrKykgeworCQl0eXBlID0g
KHpwb3MgPT0gMCkgPyBEUk1fUExBTkVfVFlQRV9QUklNQVJZIDoKKwkJCQkoenBvcyA9PSAxKSA/
IERSTV9QTEFORV9UWVBFX0NVUlNPUiA6CisJCQkJCQlEUk1fUExBTkVfVFlQRV9PVkVSTEFZOwor
CQlyZXQgPSBtdGtfcGxhbmVfaW5pdChkcm1fZGV2LCAmbXRrX2NydGMtPnBsYW5lc1t6cG9zXSwK
KwkJCQkgICAgIEJJVChwaXBlKSwgdHlwZSwgenBvcyk7CisJCWlmIChyZXQpCisJCQlnb3RvIHVu
cHJlcGFyZTsKKwl9CisKKwlyZXQgPSBtdGtfZHJtX2NydGNfaW5pdChkcm1fZGV2LCBtdGtfY3J0
YywgJm10a19jcnRjLT5wbGFuZXNbMF0uYmFzZSwKKwkJCQkmbXRrX2NydGMtPnBsYW5lc1sxXS5i
YXNlLCBwaXBlKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byB1bnByZXBhcmU7CisKKwlwcml2LT5j
cnRjW3BpcGVdID0gJm10a19jcnRjLT5iYXNlOworCXByaXYtPm51bV9waXBlcysrOworCisJcmV0
dXJuIDA7CisKK3VucHJlcGFyZToKKwl3aGlsZSAoLS1pID49IDApCisJCWNsa191bnByZXBhcmUo
bXRrX2NydGMtPmRkcF9jb21wW2ldLT5jbGspOworCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdp
dCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuaCBiL2RyaXZlcnMvZ3B1
L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi44MWU1NTY2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlh
dGVrL210a19kcm1fY3J0Yy5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp
IDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICog
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBw
cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIE1US19EUk1fQ1JUQ19ICisjZGVmaW5lIE1US19E
Uk1fQ1JUQ19ICisKKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlICJtdGtfZHJt
X2RkcF9jb21wLmgiCisjaW5jbHVkZSAibXRrX2RybV9wbGFuZS5oIgorCisjZGVmaW5lIE9WTF9M
QVlFUl9OUgk0CisKK2ludCBtdGtfZHJtX2NydGNfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgZHJtX2Rl
dmljZSAqZHJtLCB1bnNpZ25lZCBpbnQgcGlwZSk7Cit2b2lkIG10a19kcm1fY3J0Y19kaXNhYmxl
X3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNpZ25lZCBpbnQgcGlwZSk7Cit2b2lk
IG10a19kcm1fY3J0Y19jaGVja19mbHVzaChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwordm9pZCBt
dGtfZHJtX2NydGNfY29tbWl0KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cit2b2lkIG10a19jcnRj
X2RkcF9pcnEoc3RydWN0IGRybV9jcnRjICpjcnRjLCBzdHJ1Y3QgbXRrX2RkcF9jb21wICpvdmwp
OworaW50IG10a19kcm1fY3J0Y19jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYsCisJ
CQljb25zdCBlbnVtIG10a19kZHBfY29tcF9pZCAqcGF0aCwKKwkJCXVuc2lnbmVkIGludCBwYXRo
X2xlbik7CisKKyNlbmRpZiAvKiBNVEtfRFJNX0NSVENfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVy
cy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0
ZWsvbXRrX2RybV9kZHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjU4
NGU0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1f
ZGRwLmMKQEAgLTAsMCArMSwzNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFU
ZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+
CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1f
ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisKKyNpbmNsdWRlICJtdGtfZHJt
X2RkcC5oIgorI2luY2x1ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKKworI2RlZmluZSBESVNQX1JF
R19DT05GSUdfRElTUF9PVkwwX01PVVRfRU4JMHgwNDAKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklH
X0RJU1BfT1ZMMV9NT1VUX0VOCTB4MDQ0CisjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19ESVNQX09E
X01PVVRfRU4JCTB4MDQ4CisjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19ESVNQX0dBTU1BX01PVVRf
RU4JMHgwNGMKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1BfVUZPRV9NT1VUX0VOCTB4MDUw
CisjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19ESVNQX0NPTE9SMF9TRUxfSU4JMHgwODQKKyNkZWZp
bmUgRElTUF9SRUdfQ09ORklHX0RJU1BfQ09MT1IxX1NFTF9JTgkweDA4OAorI2RlZmluZSBESVNQ
X1JFR19DT05GSUdfRFBJX1NFTF9JTgkJMHgwYWMKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJ
U1BfUkRNQTFfTU9VVF9FTgkweDBjOAorI2RlZmluZSBESVNQX1JFR19DT05GSUdfTU1TWVNfQ0df
Q09OMAkJMHgxMDAKKworI2RlZmluZSBESVNQX1JFR19NVVRFWF9FTihuKQkoMHgyMCArIDB4MjAg
KiAobikpCisjZGVmaW5lIERJU1BfUkVHX01VVEVYX1JTVChuKQkoMHgyOCArIDB4MjAgKiAobikp
CisjZGVmaW5lIERJU1BfUkVHX01VVEVYX01PRChuKQkoMHgyYyArIDB4MjAgKiAobikpCisjZGVm
aW5lIERJU1BfUkVHX01VVEVYX1NPRihuKQkoMHgzMCArIDB4MjAgKiAobikpCisKKyNkZWZpbmUg
TVVURVhfTU9EX0RJU1BfT1ZMMAkJQklUKDExKQorI2RlZmluZSBNVVRFWF9NT0RfRElTUF9PVkwx
CQlCSVQoMTIpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1JETUEwCQlCSVQoMTMpCisjZGVmaW5l
IE1VVEVYX01PRF9ESVNQX1JETUExCQlCSVQoMTQpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1JE
TUEyCQlCSVQoMTUpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1dETUEwCQlCSVQoMTYpCisjZGVm
aW5lIE1VVEVYX01PRF9ESVNQX1dETUExCQlCSVQoMTcpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQ
X0NPTE9SMAkJQklUKDE4KQorI2RlZmluZSBNVVRFWF9NT0RfRElTUF9DT0xPUjEJCUJJVCgxOSkK
KyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfQUFMCQlCSVQoMjApCisjZGVmaW5lIE1VVEVYX01PRF9E
SVNQX0dBTU1BCQlCSVQoMjEpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1VGT0UJCUJJVCgyMikK
KyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfUFdNMAkJQklUKDIzKQorI2RlZmluZSBNVVRFWF9NT0Rf
RElTUF9QV00xCQlCSVQoMjQpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX09ECQlCSVQoMjUpCisK
KyNkZWZpbmUgTVVURVhfU09GX1NJTkdMRV9NT0RFCQkwCisjZGVmaW5lIE1VVEVYX1NPRl9EU0kw
CQkJMQorI2RlZmluZSBNVVRFWF9TT0ZfRFNJMQkJCTIKKyNkZWZpbmUgTVVURVhfU09GX0RQSTAJ
CQkzCisKKyNkZWZpbmUgT1ZMMF9NT1VUX0VOX0NPTE9SMAkJMHgxCisjZGVmaW5lIE9EX01PVVRf
RU5fUkRNQTAJCTB4MQorI2RlZmluZSBVRk9FX01PVVRfRU5fRFNJMAkJMHgxCisjZGVmaW5lIENP
TE9SMF9TRUxfSU5fT1ZMMAkJMHgxCisjZGVmaW5lIE9WTDFfTU9VVF9FTl9DT0xPUjEJCTB4MQor
I2RlZmluZSBHQU1NQV9NT1VUX0VOX1JETUExCQkweDEKKyNkZWZpbmUgUkRNQTFfTU9VVF9EUEkw
CQkJMHgyCisjZGVmaW5lIERQSTBfU0VMX0lOX1JETUExCQkweDEKKyNkZWZpbmUgQ09MT1IxX1NF
TF9JTl9PVkwxCQkweDEKKworc3RydWN0IG10a19kaXNwX211dGV4IHsKKwlpbnQgaWQ7CisJYm9v
bCBjbGFpbWVkOworfTsKKworc3RydWN0IG10a19kZHAgeworCXN0cnVjdCBkZXZpY2UJCQkqZGV2
OworCXN0cnVjdCBjbGsJCQkqY2xrOworCXZvaWQgX19pb21lbQkJCSpyZWdzOworCXN0cnVjdCBt
dGtfZGlzcF9tdXRleAkJbXV0ZXhbMTBdOworfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGlu
dCBtdXRleF9tb2RbRERQX0NPTVBPTkVOVF9JRF9NQVhdID0geworCVtERFBfQ09NUE9ORU5UX0FB
TF0gPSBNVVRFWF9NT0RfRElTUF9BQUwsCisJW0REUF9DT01QT05FTlRfQ09MT1IwXSA9IE1VVEVY
X01PRF9ESVNQX0NPTE9SMCwKKwlbRERQX0NPTVBPTkVOVF9DT0xPUjFdID0gTVVURVhfTU9EX0RJ
U1BfQ09MT1IxLAorCVtERFBfQ09NUE9ORU5UX0dBTU1BXSA9IE1VVEVYX01PRF9ESVNQX0dBTU1B
LAorCVtERFBfQ09NUE9ORU5UX09EXSA9IE1VVEVYX01PRF9ESVNQX09ELAorCVtERFBfQ09NUE9O
RU5UX09WTDBdID0gTVVURVhfTU9EX0RJU1BfT1ZMMCwKKwlbRERQX0NPTVBPTkVOVF9PVkwxXSA9
IE1VVEVYX01PRF9ESVNQX09WTDEsCisJW0REUF9DT01QT05FTlRfUFdNMF0gPSBNVVRFWF9NT0Rf
RElTUF9QV00wLAorCVtERFBfQ09NUE9ORU5UX1BXTTFdID0gTVVURVhfTU9EX0RJU1BfUFdNMSwK
KwlbRERQX0NPTVBPTkVOVF9SRE1BMF0gPSBNVVRFWF9NT0RfRElTUF9SRE1BMCwKKwlbRERQX0NP
TVBPTkVOVF9SRE1BMV0gPSBNVVRFWF9NT0RfRElTUF9SRE1BMSwKKwlbRERQX0NPTVBPTkVOVF9S
RE1BMl0gPSBNVVRFWF9NT0RfRElTUF9SRE1BMiwKKwlbRERQX0NPTVBPTkVOVF9VRk9FXSA9IE1V
VEVYX01PRF9ESVNQX1VGT0UsCisJW0REUF9DT01QT05FTlRfV0RNQTBdID0gTVVURVhfTU9EX0RJ
U1BfV0RNQTAsCisJW0REUF9DT01QT05FTlRfV0RNQTFdID0gTVVURVhfTU9EX0RJU1BfV0RNQTEs
Cit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IG10a19kZHBfbW91dF9lbihlbnVtIG10a19kZHBf
Y29tcF9pZCBjdXIsCisJCQkJICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQsCisJCQkJICAg
IHVuc2lnbmVkIGludCAqYWRkcikKK3sKKwl1bnNpZ25lZCBpbnQgdmFsdWU7CisKKwlpZiAoY3Vy
ID09IEREUF9DT01QT05FTlRfT1ZMMCAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfQ09MT1IwKSB7
CisJCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RJU1BfT1ZMMF9NT1VUX0VOOworCQl2YWx1ZSA9
IE9WTDBfTU9VVF9FTl9DT0xPUjA7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9P
RCAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfUkRNQTApIHsKKwkJKmFkZHIgPSBESVNQX1JFR19D
T05GSUdfRElTUF9PRF9NT1VUX0VOOworCQl2YWx1ZSA9IE9EX01PVVRfRU5fUkRNQTA7CisJfSBl
bHNlIGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9VRk9FICYmIG5leHQgPT0gRERQX0NPTVBPTkVO
VF9EU0kwKSB7CisJCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RJU1BfVUZPRV9NT1VUX0VOOwor
CQl2YWx1ZSA9IFVGT0VfTU9VVF9FTl9EU0kwOworCX0gZWxzZSBpZiAoY3VyID09IEREUF9DT01Q
T05FTlRfT1ZMMSAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfQ09MT1IxKSB7CisJCSphZGRyID0g
RElTUF9SRUdfQ09ORklHX0RJU1BfT1ZMMV9NT1VUX0VOOworCQl2YWx1ZSA9IE9WTDFfTU9VVF9F
Tl9DT0xPUjE7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9HQU1NQSAmJiBuZXh0
ID09IEREUF9DT01QT05FTlRfUkRNQTEpIHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElT
UF9HQU1NQV9NT1VUX0VOOworCQl2YWx1ZSA9IEdBTU1BX01PVVRfRU5fUkRNQTE7CisJfSBlbHNl
IGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9SRE1BMSAmJiBuZXh0ID09IEREUF9DT01QT05FTlRf
RFBJMCkgeworCQkqYWRkciA9IERJU1BfUkVHX0NPTkZJR19ESVNQX1JETUExX01PVVRfRU47CisJ
CXZhbHVlID0gUkRNQTFfTU9VVF9EUEkwOworCX0gZWxzZSB7CisJCXZhbHVlID0gMDsKKwl9CisK
KwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXRrX2RkcF9zZWxfaW4o
ZW51bSBtdGtfZGRwX2NvbXBfaWQgY3VyLAorCQkJCSAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5l
eHQsCisJCQkJICAgdW5zaWduZWQgaW50ICphZGRyKQoreworCXVuc2lnbmVkIGludCB2YWx1ZTsK
KworCWlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9PVkwwICYmIG5leHQgPT0gRERQX0NPTVBPTkVO
VF9DT0xPUjApIHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9DT0xPUjBfU0VMX0lO
OworCQl2YWx1ZSA9IENPTE9SMF9TRUxfSU5fT1ZMMDsKKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBf
Q09NUE9ORU5UX1JETUExICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9EUEkwKSB7CisJCSphZGRy
ID0gRElTUF9SRUdfQ09ORklHX0RQSV9TRUxfSU47CisJCXZhbHVlID0gRFBJMF9TRUxfSU5fUkRN
QTE7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9PVkwxICYmIG5leHQgPT0gRERQ
X0NPTVBPTkVOVF9DT0xPUjEpIHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9DT0xP
UjFfU0VMX0lOOworCQl2YWx1ZSA9IENPTE9SMV9TRUxfSU5fT1ZMMTsKKwl9IGVsc2UgeworCQl2
YWx1ZSA9IDA7CisJfQorCisJcmV0dXJuIHZhbHVlOworfQorCit2b2lkIG10a19kZHBfYWRkX2Nv
bXBfdG9fcGF0aCh2b2lkIF9faW9tZW0gKmNvbmZpZ19yZWdzLAorCQkJICAgICAgZW51bSBtdGtf
ZGRwX2NvbXBfaWQgY3VyLAorCQkJICAgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgbmV4dCkKK3sK
Kwl1bnNpZ25lZCBpbnQgYWRkciwgdmFsdWUsIHJlZzsKKworCXZhbHVlID0gbXRrX2RkcF9tb3V0
X2VuKGN1ciwgbmV4dCwgJmFkZHIpOworCWlmICh2YWx1ZSkgeworCQlyZWcgPSByZWFkbF9yZWxh
eGVkKGNvbmZpZ19yZWdzICsgYWRkcikgfCB2YWx1ZTsKKwkJd3JpdGVsX3JlbGF4ZWQocmVnLCBj
b25maWdfcmVncyArIGFkZHIpOworCX0KKworCXZhbHVlID0gbXRrX2RkcF9zZWxfaW4oY3VyLCBu
ZXh0LCAmYWRkcik7CisJaWYgKHZhbHVlKSB7CisJCXJlZyA9IHJlYWRsX3JlbGF4ZWQoY29uZmln
X3JlZ3MgKyBhZGRyKSB8IHZhbHVlOworCQl3cml0ZWxfcmVsYXhlZChyZWcsIGNvbmZpZ19yZWdz
ICsgYWRkcik7CisJfQorfQorCit2b2lkIG10a19kZHBfcmVtb3ZlX2NvbXBfZnJvbV9wYXRoKHZv
aWQgX19pb21lbSAqY29uZmlnX3JlZ3MsCisJCQkJICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgY3Vy
LAorCQkJCSAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQpCit7CisJdW5zaWduZWQgaW50IGFk
ZHIsIHZhbHVlLCByZWc7CisKKwl2YWx1ZSA9IG10a19kZHBfbW91dF9lbihjdXIsIG5leHQsICZh
ZGRyKTsKKwlpZiAodmFsdWUpIHsKKwkJcmVnID0gcmVhZGxfcmVsYXhlZChjb25maWdfcmVncyAr
IGFkZHIpICYgfnZhbHVlOworCQl3cml0ZWxfcmVsYXhlZChyZWcsIGNvbmZpZ19yZWdzICsgYWRk
cik7CisJfQorCisJdmFsdWUgPSBtdGtfZGRwX3NlbF9pbihjdXIsIG5leHQsICZhZGRyKTsKKwlp
ZiAodmFsdWUpIHsKKwkJcmVnID0gcmVhZGxfcmVsYXhlZChjb25maWdfcmVncyArIGFkZHIpICYg
fnZhbHVlOworCQl3cml0ZWxfcmVsYXhlZChyZWcsIGNvbmZpZ19yZWdzICsgYWRkcik7CisJfQor
fQorCitzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm10a19kaXNwX211dGV4X2dldChzdHJ1Y3QgZGV2
aWNlICpkZXYsIHVuc2lnbmVkIGludCBpZCkKK3sKKwlzdHJ1Y3QgbXRrX2RkcCAqZGRwID0gZGV2
X2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoaWQgPj0gMTApCisJCXJldHVybiBFUlJfUFRSKC1F
SU5WQUwpOworCWlmIChkZHAtPm11dGV4W2lkXS5jbGFpbWVkKQorCQlyZXR1cm4gRVJSX1BUUigt
RUJVU1kpOworCisJZGRwLT5tdXRleFtpZF0uY2xhaW1lZCA9IHRydWU7CisKKwlyZXR1cm4gJmRk
cC0+bXV0ZXhbaWRdOworfQorCit2b2lkIG10a19kaXNwX211dGV4X3B1dChzdHJ1Y3QgbXRrX2Rp
c3BfbXV0ZXggKm11dGV4KQoreworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBjb250YWluZXJfb2Yo
bXV0ZXgsIHN0cnVjdCBtdGtfZGRwLAorCQkJCQkgICBtdXRleFttdXRleC0+aWRdKTsKKworCVdB
Uk5fT04oJmRkcC0+bXV0ZXhbbXV0ZXgtPmlkXSAhPSBtdXRleCk7CisKKwltdXRleC0+Y2xhaW1l
ZCA9IGZhbHNlOworfQorCitpbnQgbXRrX2Rpc3BfbXV0ZXhfcHJlcGFyZShzdHJ1Y3QgbXRrX2Rp
c3BfbXV0ZXggKm11dGV4KQoreworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBjb250YWluZXJfb2Yo
bXV0ZXgsIHN0cnVjdCBtdGtfZGRwLAorCQkJCQkgICBtdXRleFttdXRleC0+aWRdKTsKKwlyZXR1
cm4gY2xrX3ByZXBhcmVfZW5hYmxlKGRkcC0+Y2xrKTsKK30KKwordm9pZCBtdGtfZGlzcF9tdXRl
eF91bnByZXBhcmUoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCkKK3sKKwlzdHJ1Y3QgbXRr
X2RkcCAqZGRwID0gY29udGFpbmVyX29mKG11dGV4LCBzdHJ1Y3QgbXRrX2RkcCwKKwkJCQkJICAg
bXV0ZXhbbXV0ZXgtPmlkXSk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRkcC0+Y2xrKTsKK30K
Kwordm9pZCBtdGtfZGlzcF9tdXRleF9hZGRfY29tcChzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11
dGV4LAorCQkJICAgICBlbnVtIG10a19kZHBfY29tcF9pZCBpZCkKK3sKKwlzdHJ1Y3QgbXRrX2Rk
cCAqZGRwID0gY29udGFpbmVyX29mKG11dGV4LCBzdHJ1Y3QgbXRrX2RkcCwKKwkJCQkJICAgbXV0
ZXhbbXV0ZXgtPmlkXSk7CisJdW5zaWduZWQgaW50IHJlZzsKKworCVdBUk5fT04oJmRkcC0+bXV0
ZXhbbXV0ZXgtPmlkXSAhPSBtdXRleCk7CisKKwlzd2l0Y2ggKGlkKSB7CisJY2FzZSBERFBfQ09N
UE9ORU5UX0RTSTA6CisJCXJlZyA9IE1VVEVYX1NPRl9EU0kwOworCQlicmVhazsKKwljYXNlIERE
UF9DT01QT05FTlRfRFNJMToKKwkJcmVnID0gTVVURVhfU09GX0RTSTA7CisJCWJyZWFrOworCWNh
c2UgRERQX0NPTVBPTkVOVF9EUEkwOgorCQlyZWcgPSBNVVRFWF9TT0ZfRFBJMDsKKwkJYnJlYWs7
CisJZGVmYXVsdDoKKwkJcmVnID0gcmVhZGxfcmVsYXhlZChkZHAtPnJlZ3MgKyBESVNQX1JFR19N
VVRFWF9NT0QobXV0ZXgtPmlkKSk7CisJCXJlZyB8PSBtdXRleF9tb2RbaWRdOworCQl3cml0ZWxf
cmVsYXhlZChyZWcsIGRkcC0+cmVncyArIERJU1BfUkVHX01VVEVYX01PRChtdXRleC0+aWQpKTsK
KwkJcmV0dXJuOworCX0KKworCXdyaXRlbF9yZWxheGVkKHJlZywgZGRwLT5yZWdzICsgRElTUF9S
RUdfTVVURVhfU09GKG11dGV4LT5pZCkpOworfQorCit2b2lkIG10a19kaXNwX211dGV4X3JlbW92
ZV9jb21wKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgsCisJCQkJZW51bSBtdGtfZGRwX2Nv
bXBfaWQgaWQpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9IGNvbnRhaW5lcl9vZihtdXRleCwg
c3RydWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4LT5pZF0pOworCXVuc2lnbmVkIGlu
dCByZWc7CisKKwlXQVJOX09OKCZkZHAtPm11dGV4W211dGV4LT5pZF0gIT0gbXV0ZXgpOworCisJ
c3dpdGNoIChpZCkgeworCWNhc2UgRERQX0NPTVBPTkVOVF9EU0kwOgorCWNhc2UgRERQX0NPTVBP
TkVOVF9EU0kxOgorCWNhc2UgRERQX0NPTVBPTkVOVF9EUEkwOgorCQl3cml0ZWxfcmVsYXhlZChN
VVRFWF9TT0ZfU0lOR0xFX01PREUsCisJCQkgICAgICAgZGRwLT5yZWdzICsgRElTUF9SRUdfTVVU
RVhfU09GKG11dGV4LT5pZCkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZWcgPSByZWFkbF9y
ZWxheGVkKGRkcC0+cmVncyArIERJU1BfUkVHX01VVEVYX01PRChtdXRleC0+aWQpKTsKKwkJcmVn
ICY9IH5tdXRleF9tb2RbaWRdOworCQl3cml0ZWxfcmVsYXhlZChyZWcsIGRkcC0+cmVncyArIERJ
U1BfUkVHX01VVEVYX01PRChtdXRleC0+aWQpKTsKKwkJYnJlYWs7CisJfQorfQorCit2b2lkIG10
a19kaXNwX211dGV4X2VuYWJsZShzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KQoreworCXN0
cnVjdCBtdGtfZGRwICpkZHAgPSBjb250YWluZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtfZGRwLAor
CQkJCQkgICBtdXRleFttdXRleC0+aWRdKTsKKworCVdBUk5fT04oJmRkcC0+bXV0ZXhbbXV0ZXgt
PmlkXSAhPSBtdXRleCk7CisKKwl3cml0ZWwoMSwgZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhf
RU4obXV0ZXgtPmlkKSk7Cit9CisKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfZGlzYWJsZShzdHJ1Y3Qg
bXRrX2Rpc3BfbXV0ZXggKm11dGV4KQoreworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBjb250YWlu
ZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtfZGRwLAorCQkJCQkgICBtdXRleFttdXRleC0+aWRdKTsK
KworCVdBUk5fT04oJmRkcC0+bXV0ZXhbbXV0ZXgtPmlkXSAhPSBtdXRleCk7CisKKwl3cml0ZWwo
MCwgZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhfRU4obXV0ZXgtPmlkKSk7Cit9CisKK3N0YXRp
YyBpbnQgbXRrX2RkcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0
cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IG10a19kZHAgKmRkcDsKKwlz
dHJ1Y3QgcmVzb3VyY2UgKnJlZ3M7CisJaW50IGk7CisKKwlkZHAgPSBkZXZtX2t6YWxsb2MoZGV2
LCBzaXplb2YoKmRkcCksIEdGUF9LRVJORUwpOworCWlmICghZGRwKQorCQlyZXR1cm4gLUVOT01F
TTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQorCQlkZHAtPm11dGV4W2ldLmlkID0gaTsK
KworCWRkcC0+Y2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgTlVMTCk7CisJaWYgKElTX0VSUihkZHAt
PmNsaykpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IGNsb2NrXG4iKTsKKwkJcmV0
dXJuIFBUUl9FUlIoZGRwLT5jbGspOworCX0KKworCXJlZ3MgPSBwbGF0Zm9ybV9nZXRfcmVzb3Vy
Y2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWRkcC0+cmVncyA9IGRldm1faW9yZW1hcF9y
ZXNvdXJjZShkZXYsIHJlZ3MpOworCWlmIChJU19FUlIoZGRwLT5yZWdzKSkgeworCQlkZXZfZXJy
KGRldiwgIkZhaWxlZCB0byBtYXAgbXV0ZXggcmVnaXN0ZXJzXG4iKTsKKwkJcmV0dXJuIFBUUl9F
UlIoZGRwLT5yZWdzKTsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkZHApOwor
CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RkcF9yZW1vdmUoc3RydWN0IHBsYXRm
b3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVj
dCBvZl9kZXZpY2VfaWQgZGRwX2RyaXZlcl9kdF9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUg
PSAibWVkaWF0ZWssbXQ4MTczLWRpc3AtbXV0ZXgiIH0sCisJe30sCit9OworTU9EVUxFX0RFVklD
RV9UQUJMRShvZiwgZGRwX2RyaXZlcl9kdF9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZv
cm1fZHJpdmVyIG10a19kZHBfZHJpdmVyID0geworCS5wcm9iZQkJPSBtdGtfZGRwX3Byb2JlLAor
CS5yZW1vdmUJCT0gbXRrX2RkcF9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIm1l
ZGlhdGVrLWRkcCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkub2ZfbWF0Y2hfdGFibGUg
PSBkZHBfZHJpdmVyX2R0X21hdGNoLAorCX0sCit9OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVy
KG10a19kZHBfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t
dGtfZHJtX2RkcC5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJjMTE3NQotLS0gL2Rldi9udWxsCisr
KyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcC5oCkBAIC0wLDAgKzEsNDEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMg
cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig
bW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIE1US19E
Uk1fRERQX0gKKyNkZWZpbmUgTVRLX0RSTV9ERFBfSAorCisjaW5jbHVkZSAibXRrX2RybV9kZHBf
Y29tcC5oIgorCitzdHJ1Y3QgcmVnbWFwOworc3RydWN0IGRldmljZTsKK3N0cnVjdCBtdGtfZGlz
cF9tdXRleDsKKwordm9pZCBtdGtfZGRwX2FkZF9jb21wX3RvX3BhdGgodm9pZCBfX2lvbWVtICpj
b25maWdfcmVncywKKwkJCSAgICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIGN1ciwKKwkJCSAgICAg
IGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQpOwordm9pZCBtdGtfZGRwX3JlbW92ZV9jb21wX2Zy
b21fcGF0aCh2b2lkIF9faW9tZW0gKmNvbmZpZ19yZWdzLAorCQkJCSAgIGVudW0gbXRrX2RkcF9j
b21wX2lkIGN1ciwKKwkJCQkgICBlbnVtIG10a19kZHBfY29tcF9pZCBuZXh0KTsKKworc3RydWN0
IG10a19kaXNwX211dGV4ICptdGtfZGlzcF9tdXRleF9nZXQoc3RydWN0IGRldmljZSAqZGV2LCB1
bnNpZ25lZCBpbnQgaWQpOworaW50IG10a19kaXNwX211dGV4X3ByZXBhcmUoc3RydWN0IG10a19k
aXNwX211dGV4ICptdXRleCk7Cit2b2lkIG10a19kaXNwX211dGV4X2FkZF9jb21wKHN0cnVjdCBt
dGtfZGlzcF9tdXRleCAqbXV0ZXgsCisJCQkgICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIGlkKTsK
K3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfZW5hYmxlKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgp
Owordm9pZCBtdGtfZGlzcF9tdXRleF9kaXNhYmxlKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0
ZXgpOwordm9pZCBtdGtfZGlzcF9tdXRleF9yZW1vdmVfY29tcChzdHJ1Y3QgbXRrX2Rpc3BfbXV0
ZXggKm11dGV4LAorCQkJCWVudW0gbXRrX2RkcF9jb21wX2lkIGlkKTsKK3ZvaWQgbXRrX2Rpc3Bf
bXV0ZXhfdW5wcmVwYXJlKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpOwordm9pZCBtdGtf
ZGlzcF9tdXRleF9wdXQoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCk7CisKKyNlbmRpZiAv
KiBNVEtfRFJNX0REUF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv
bXRrX2RybV9kZHBfY29tcC5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRw
X2NvbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTcwZmNmCi0tLSAv
ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAu
YwpAQCAtMCwwICsxLDIyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJ
bmMuCisgKiBBdXRob3JzOgorICoJWVQgU2hlbiA8eXQuc2hlbkBtZWRpYXRlay5jb20+CisgKglD
SyBIdSA8Y2suaHVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBh
cworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICog
VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVk
ZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8
bGludXgvb2ZfaXJxLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRl
IDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1
ZGUgIm10a19kcm1fZHJ2LmgiCisjaW5jbHVkZSAibXRrX2RybV9wbGFuZS5oIgorI2luY2x1ZGUg
Im10a19kcm1fZGRwX2NvbXAuaCIKKworI2RlZmluZSBESVNQX09EX0VOCQkJCTB4MDAwMAorI2Rl
ZmluZSBESVNQX09EX0lOVEVOCQkJCTB4MDAwOAorI2RlZmluZSBESVNQX09EX0lOVFNUQQkJCQkw
eDAwMGMKKyNkZWZpbmUgRElTUF9PRF9DRkcJCQkJMHgwMDIwCisjZGVmaW5lIERJU1BfT0RfU0la
RQkJCQkweDAwMzAKKworI2RlZmluZSBESVNQX1JFR19VRk9fU1RBUlQJCQkweDAwMDAKKworI2Rl
ZmluZSBESVNQX0NPTE9SX0NGR19NQUlOCQkJMHgwNDAwCisjZGVmaW5lIERJU1BfQ09MT1JfU1RB
UlQJCQkweDBjMDAKKyNkZWZpbmUgRElTUF9DT0xPUl9XSURUSAkJCTB4MGM1MAorI2RlZmluZSBE
SVNQX0NPTE9SX0hFSUdIVAkJCTB4MGM1NAorCisjZGVmaW5lCU9EX1JFTEFZX01PREUJCUJJVCgw
KQorCisjZGVmaW5lCVVGT19CWVBBU1MJCUJJVCgyKQorCisjZGVmaW5lCUNPTE9SX0JZUEFTU19B
TEwJQklUKDcpCisjZGVmaW5lCUNPTE9SX1NFUV9TRUwJCUJJVCgxMykKKworc3RhdGljIHZvaWQg
bXRrX2NvbG9yX2NvbmZpZyhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQg
dywKKwkJCSAgICAgdW5zaWduZWQgaW50IGgsIHVuc2lnbmVkIGludCB2cmVmcmVzaCkKK3sKKwl3
cml0ZWwodywgY29tcC0+cmVncyArIERJU1BfQ09MT1JfV0lEVEgpOworCXdyaXRlbChoLCBjb21w
LT5yZWdzICsgRElTUF9DT0xPUl9IRUlHSFQpOworfQorCitzdGF0aWMgdm9pZCBtdGtfY29sb3Jf
c3RhcnQoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwl3cml0ZWwoQ09MT1JfQllQQVNT
X0FMTCB8IENPTE9SX1NFUV9TRUwsCisJICAgICAgIGNvbXAtPnJlZ3MgKyBESVNQX0NPTE9SX0NG
R19NQUlOKTsKKwl3cml0ZWwoMHgxLCBjb21wLT5yZWdzICsgRElTUF9DT0xPUl9TVEFSVCk7Cit9
CisKK3N0YXRpYyB2b2lkIG10a19vZF9jb25maWcoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwg
dW5zaWduZWQgaW50IHcsCisJCQkgIHVuc2lnbmVkIGludCBoLCB1bnNpZ25lZCBpbnQgdnJlZnJl
c2gpCit7CisJd3JpdGVsKHcgPDwgMTYgfCBoLCBjb21wLT5yZWdzICsgRElTUF9PRF9TSVpFKTsK
K30KKworc3RhdGljIHZvaWQgbXRrX29kX3N0YXJ0KHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAp
Cit7CisJd3JpdGVsKE9EX1JFTEFZX01PREUsIGNvbXAtPnJlZ3MgKyBESVNQX09EX0NGRyk7CisJ
d3JpdGVsKDEsIGNvbXAtPnJlZ3MgKyBESVNQX09EX0VOKTsKK30KKworc3RhdGljIHZvaWQgbXRr
X3Vmb2Vfc3RhcnQoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwl3cml0ZWwoVUZPX0JZ
UEFTUywgY29tcC0+cmVncyArIERJU1BfUkVHX1VGT19TVEFSVCk7Cit9CisKK3N0YXRpYyBjb25z
dCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzIGRkcF9jb2xvciA9IHsKKwkuY29uZmlnID0gbXRr
X2NvbG9yX2NvbmZpZywKKwkuc3RhcnQgPSBtdGtfY29sb3Jfc3RhcnQsCit9OworCitzdGF0aWMg
Y29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5jcyBkZHBfb2QgPSB7CisJLmNvbmZpZyA9IG10
a19vZF9jb25maWcsCisJLnN0YXJ0ID0gbXRrX29kX3N0YXJ0LAorfTsKKworc3RhdGljIGNvbnN0
IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVuY3MgZGRwX3Vmb2UgPSB7CisJLnN0YXJ0ID0gbXRrX3Vm
b2Vfc3RhcnQsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG10a19kZHBfY29tcF9z
dGVtW01US19ERFBfQ09NUF9UWVBFX01BWF0gPSB7CisJW01US19ESVNQX09WTF0gPSAib3ZsIiwK
KwlbTVRLX0RJU1BfUkRNQV0gPSAicmRtYSIsCisJW01US19ESVNQX1dETUFdID0gIndkbWEiLAor
CVtNVEtfRElTUF9DT0xPUl0gPSAiY29sb3IiLAorCVtNVEtfRElTUF9BQUxdID0gImFhbCIsCisJ
W01US19ESVNQX0dBTU1BXSA9ICJnYW1tYSIsCisJW01US19ESVNQX1VGT0VdID0gInVmb2UiLAor
CVtNVEtfRFNJXSA9ICJkc2kiLAorCVtNVEtfRFBJXSA9ICJkcGkiLAorCVtNVEtfRElTUF9QV01d
ID0gInB3bSIsCisJW01US19ESVNQX01VVEVYXSA9ICJtdXRleCIsCisJW01US19ESVNQX09EXSA9
ICJvZCIsCit9OworCitzdHJ1Y3QgbXRrX2RkcF9jb21wX21hdGNoIHsKKwllbnVtIG10a19kZHBf
Y29tcF90eXBlIHR5cGU7CisJaW50IGFsaWFzX2lkOworCWNvbnN0IHN0cnVjdCBtdGtfZGRwX2Nv
bXBfZnVuY3MgKmZ1bmNzOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBf
bWF0Y2ggbXRrX2RkcF9tYXRjaGVzW0REUF9DT01QT05FTlRfSURfTUFYXSA9IHsKKwlbRERQX0NP
TVBPTkVOVF9BQUxdCT0geyBNVEtfRElTUF9BQUwsCTAsIE5VTEwgfSwKKwlbRERQX0NPTVBPTkVO
VF9DT0xPUjBdCT0geyBNVEtfRElTUF9DT0xPUiwJMCwgJmRkcF9jb2xvciB9LAorCVtERFBfQ09N
UE9ORU5UX0NPTE9SMV0JPSB7IE1US19ESVNQX0NPTE9SLAkxLCAmZGRwX2NvbG9yIH0sCisJW0RE
UF9DT01QT05FTlRfRFBJMF0JPSB7IE1US19EUEksCQkwLCBOVUxMIH0sCisJW0REUF9DT01QT05F
TlRfRFNJMF0JPSB7IE1US19EU0ksCQkwLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRfRFNJMV0J
PSB7IE1US19EU0ksCQkxLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRfR0FNTUFdCT0geyBNVEtf
RElTUF9HQU1NQSwJMCwgTlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX09EXQk9IHsgTVRLX0RJU1Bf
T0QsCTAsICZkZHBfb2QgfSwKKwlbRERQX0NPTVBPTkVOVF9PVkwwXQk9IHsgTVRLX0RJU1BfT1ZM
LAkwLCBOVUxMIH0sCisJW0REUF9DT01QT05FTlRfT1ZMMV0JPSB7IE1US19ESVNQX09WTCwJMSwg
TlVMTCB9LAorCVtERFBfQ09NUE9ORU5UX1BXTTBdCT0geyBNVEtfRElTUF9QV00sCTAsIE5VTEwg
fSwKKwlbRERQX0NPTVBPTkVOVF9SRE1BMF0JPSB7IE1US19ESVNQX1JETUEsCTAsIE5VTEwgfSwK
KwlbRERQX0NPTVBPTkVOVF9SRE1BMV0JPSB7IE1US19ESVNQX1JETUEsCTEsIE5VTEwgfSwKKwlb
RERQX0NPTVBPTkVOVF9SRE1BMl0JPSB7IE1US19ESVNQX1JETUEsCTIsIE5VTEwgfSwKKwlbRERQ
X0NPTVBPTkVOVF9VRk9FXQk9IHsgTVRLX0RJU1BfVUZPRSwJMCwgJmRkcF91Zm9lIH0sCisJW0RE
UF9DT01QT05FTlRfV0RNQTBdCT0geyBNVEtfRElTUF9XRE1BLAkwLCBOVUxMIH0sCisJW0REUF9D
T01QT05FTlRfV0RNQTFdCT0geyBNVEtfRElTUF9XRE1BLAkxLCBOVUxMIH0sCit9OworCitpbnQg
bXRrX2RkcF9jb21wX2dldF9pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJCQllbnVtIG10
a19kZHBfY29tcF90eXBlIGNvbXBfdHlwZSkKK3sKKwlpbnQgaWQgPSBvZl9hbGlhc19nZXRfaWQo
bm9kZSwgbXRrX2RkcF9jb21wX3N0ZW1bY29tcF90eXBlXSk7CisJaW50IGk7CisKKwlmb3IgKGkg
PSAwOyBpIDwgQVJSQVlfU0laRShtdGtfZGRwX21hdGNoZXMpOyBpKyspIHsKKwkJaWYgKGNvbXBf
dHlwZSA9PSBtdGtfZGRwX21hdGNoZXNbaV0udHlwZSAmJgorCQkgICAgKGlkIDwgMCB8fCBpZCA9
PSBtdGtfZGRwX21hdGNoZXNbaV0uYWxpYXNfaWQpKQorCQkJcmV0dXJuIGk7CisJfQorCisJcmV0
dXJuIC1FSU5WQUw7Cit9CisKK2ludCBtdGtfZGRwX2NvbXBfaW5pdChzdHJ1Y3QgZGV2aWNlICpk
ZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKKwkJICAgICAgc3RydWN0IG10a19kZHBfY29t
cCAqY29tcCwgZW51bSBtdGtfZGRwX2NvbXBfaWQgY29tcF9pZCwKKwkJICAgICAgY29uc3Qgc3Ry
dWN0IG10a19kZHBfY29tcF9mdW5jcyAqZnVuY3MpCit7CisJZW51bSBtdGtfZGRwX2NvbXBfdHlw
ZSB0eXBlOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbGFyYl9ub2RlOworCXN0cnVjdCBwbGF0Zm9y
bV9kZXZpY2UgKmxhcmJfcGRldjsKKworCWlmIChjb21wX2lkIDwgMCB8fCBjb21wX2lkID49IERE
UF9DT01QT05FTlRfSURfTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNvbXAtPmlkID0gY29t
cF9pZDsKKwljb21wLT5mdW5jcyA9IGZ1bmNzID86IG10a19kZHBfbWF0Y2hlc1tjb21wX2lkXS5m
dW5jczsKKworCWlmIChjb21wX2lkID09IEREUF9DT01QT05FTlRfRFBJMCB8fAorCSAgICBjb21w
X2lkID09IEREUF9DT01QT05FTlRfRFNJMCB8fAorCSAgICBjb21wX2lkID09IEREUF9DT01QT05F
TlRfUFdNMCkgeworCQljb21wLT5yZWdzID0gTlVMTDsKKwkJY29tcC0+Y2xrID0gTlVMTDsKKwkJ
Y29tcC0+aXJxID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCisJY29tcC0+cmVncyA9IG9mX2lvbWFw
KG5vZGUsIDApOworCWNvbXAtPmlycSA9IG9mX2lycV9nZXQobm9kZSwgMCk7CisJY29tcC0+Y2xr
ID0gb2ZfY2xrX2dldChub2RlLCAwKTsKKwlpZiAoSVNfRVJSKGNvbXAtPmNsaykpCisJCWNvbXAt
PmNsayA9IE5VTEw7CisKKwl0eXBlID0gbXRrX2RkcF9tYXRjaGVzW2NvbXBfaWRdLnR5cGU7CisK
KwkvKiBPbmx5IERNQSBjYXBhYmxlIGNvbXBvbmVudHMgbmVlZCB0aGUgTEFSQiBwcm9wZXJ0eSAq
LworCWNvbXAtPmxhcmJfZGV2ID0gTlVMTDsKKwlpZiAodHlwZSAhPSBNVEtfRElTUF9PVkwgJiYK
KwkgICAgdHlwZSAhPSBNVEtfRElTUF9SRE1BICYmCisJICAgIHR5cGUgIT0gTVRLX0RJU1BfV0RN
QSkKKwkJcmV0dXJuIDA7CisKKwlsYXJiX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKG5vZGUsICJt
ZWRpYXRlayxsYXJiIiwgMCk7CisJaWYgKCFsYXJiX25vZGUpIHsKKwkJZGV2X2VycihkZXYsCisJ
CQkiTWlzc2luZyBtZWRpYWRlayxsYXJiIHBoYW5kbGUgaW4gJXMgbm9kZVxuIiwKKwkJCW5vZGUt
PmZ1bGxfbmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWxhcmJfcGRldiA9IG9mX2Zp
bmRfZGV2aWNlX2J5X25vZGUobGFyYl9ub2RlKTsKKwlpZiAoIWxhcmJfcGRldikgeworCQlkZXZf
d2FybihkZXYsICJXYWl0aW5nIGZvciBsYXJiIGRldmljZSAlc1xuIiwKKwkJCSBsYXJiX25vZGUt
PmZ1bGxfbmFtZSk7CisJCW9mX25vZGVfcHV0KGxhcmJfbm9kZSk7CisJCXJldHVybiAtRVBST0JF
X0RFRkVSOworCX0KKwlvZl9ub2RlX3B1dChsYXJiX25vZGUpOworCisJY29tcC0+bGFyYl9kZXYg
PSAmbGFyYl9wZGV2LT5kZXY7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG10a19kZHBfY29tcF9y
ZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21w
KQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUgPSBkcm0tPmRldl9wcml2YXRl
OworCisJaWYgKHByaXZhdGUtPmRkcF9jb21wW2NvbXAtPmlkXSkKKwkJcmV0dXJuIC1FQlVTWTsK
KworCXByaXZhdGUtPmRkcF9jb21wW2NvbXAtPmlkXSA9IGNvbXA7CisJcmV0dXJuIDA7Cit9CisK
K3ZvaWQgbXRrX2RkcF9jb21wX3VucmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3Ry
dWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2
YXRlID0gZHJtLT5kZXZfcHJpdmF0ZTsKKworCXByaXZhdGUtPmRkcF9jb21wW2NvbXAtPmlkXSA9
IE5VTEw7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9k
ZHBfY29tcC5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjEzYmE5Ci0tLSAvZGV2L251bGwK
KysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAuaApAQCAtMCww
ICsxLDE1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgor
ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5k
ZWYgTVRLX0RSTV9ERFBfQ09NUF9ICisjZGVmaW5lIE1US19EUk1fRERQX0NPTVBfSAorCisjaW5j
bHVkZSA8bGludXgvaW8uaD4KKworc3RydWN0IGRldmljZTsKK3N0cnVjdCBkZXZpY2Vfbm9kZTsK
K3N0cnVjdCBkcm1fY3J0YzsKK3N0cnVjdCBkcm1fZGV2aWNlOworc3RydWN0IG10a19wbGFuZV9z
dGF0ZTsKKworZW51bSBtdGtfZGRwX2NvbXBfdHlwZSB7CisJTVRLX0RJU1BfT1ZMLAorCU1US19E
SVNQX1JETUEsCisJTVRLX0RJU1BfV0RNQSwKKwlNVEtfRElTUF9DT0xPUiwKKwlNVEtfRElTUF9B
QUwsCisJTVRLX0RJU1BfR0FNTUEsCisJTVRLX0RJU1BfVUZPRSwKKwlNVEtfRFNJLAorCU1US19E
UEksCisJTVRLX0RJU1BfUFdNLAorCU1US19ESVNQX01VVEVYLAorCU1US19ESVNQX09ELAorCU1U
S19ERFBfQ09NUF9UWVBFX01BWCwKK307CisKK2VudW0gbXRrX2RkcF9jb21wX2lkIHsKKwlERFBf
Q09NUE9ORU5UX0FBTCwKKwlERFBfQ09NUE9ORU5UX0NPTE9SMCwKKwlERFBfQ09NUE9ORU5UX0NP
TE9SMSwKKwlERFBfQ09NUE9ORU5UX0RQSTAsCisJRERQX0NPTVBPTkVOVF9EU0kwLAorCUREUF9D
T01QT05FTlRfRFNJMSwKKwlERFBfQ09NUE9ORU5UX0dBTU1BLAorCUREUF9DT01QT05FTlRfT0Qs
CisJRERQX0NPTVBPTkVOVF9PVkwwLAorCUREUF9DT01QT05FTlRfT1ZMMSwKKwlERFBfQ09NUE9O
RU5UX1BXTTAsCisJRERQX0NPTVBPTkVOVF9QV00xLAorCUREUF9DT01QT05FTlRfUkRNQTAsCisJ
RERQX0NPTVBPTkVOVF9SRE1BMSwKKwlERFBfQ09NUE9ORU5UX1JETUEyLAorCUREUF9DT01QT05F
TlRfVUZPRSwKKwlERFBfQ09NUE9ORU5UX1dETUEwLAorCUREUF9DT01QT05FTlRfV0RNQTEsCisJ
RERQX0NPTVBPTkVOVF9JRF9NQVgsCit9OworCitzdHJ1Y3QgbXRrX2RkcF9jb21wOworCitzdHJ1
Y3QgbXRrX2RkcF9jb21wX2Z1bmNzIHsKKwl2b2lkICgqY29uZmlnKShzdHJ1Y3QgbXRrX2RkcF9j
b21wICpjb21wLCB1bnNpZ25lZCBpbnQgdywKKwkJICAgICAgIHVuc2lnbmVkIGludCBoLCB1bnNp
Z25lZCBpbnQgdnJlZnJlc2gpOworCXZvaWQgKCpzdGFydCkoc3RydWN0IG10a19kZHBfY29tcCAq
Y29tcCk7CisJdm9pZCAoKnN0b3ApKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApOworCXZvaWQg
KCplbmFibGVfdmJsYW5rKShzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCBzdHJ1Y3QgZHJtX2Ny
dGMgKmNydGMpOworCXZvaWQgKCpkaXNhYmxlX3ZibGFuaykoc3RydWN0IG10a19kZHBfY29tcCAq
Y29tcCk7CisJdm9pZCAoKmxheWVyX29uKShzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCB1bnNp
Z25lZCBpbnQgaWR4KTsKKwl2b2lkICgqbGF5ZXJfb2ZmKShzdHJ1Y3QgbXRrX2RkcF9jb21wICpj
b21wLCB1bnNpZ25lZCBpbnQgaWR4KTsKKwl2b2lkICgqbGF5ZXJfY29uZmlnKShzdHJ1Y3QgbXRr
X2RkcF9jb21wICpjb21wLCB1bnNpZ25lZCBpbnQgaWR4LAorCQkJICAgICBzdHJ1Y3QgbXRrX3Bs
YW5lX3N0YXRlICpzdGF0ZSk7Cit9OworCitzdHJ1Y3QgbXRrX2RkcF9jb21wIHsKKwlzdHJ1Y3Qg
Y2xrICpjbGs7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCWludCBpcnE7CisJc3RydWN0IGRldmlj
ZSAqbGFyYl9kZXY7CisJZW51bSBtdGtfZGRwX2NvbXBfaWQgaWQ7CisJY29uc3Qgc3RydWN0IG10
a19kZHBfY29tcF9mdW5jcyAqZnVuY3M7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgbXRrX2Rk
cF9jb21wX2NvbmZpZyhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLAorCQkJCSAgICAgICB1bnNp
Z25lZCBpbnQgdywgdW5zaWduZWQgaW50IGgsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCB2cmVm
cmVzaCkKK3sKKwlpZiAoY29tcC0+ZnVuY3MgJiYgY29tcC0+ZnVuY3MtPmNvbmZpZykKKwkJY29t
cC0+ZnVuY3MtPmNvbmZpZyhjb21wLCB3LCBoLCB2cmVmcmVzaCk7Cit9CisKK3N0YXRpYyBpbmxp
bmUgdm9pZCBtdGtfZGRwX2NvbXBfc3RhcnQoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sK
KwlpZiAoY29tcC0+ZnVuY3MgJiYgY29tcC0+ZnVuY3MtPnN0YXJ0KQorCQljb21wLT5mdW5jcy0+
c3RhcnQoY29tcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBfc3RvcChz
dHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCWlmIChjb21wLT5mdW5jcyAmJiBjb21wLT5m
dW5jcy0+c3RvcCkKKwkJY29tcC0+ZnVuY3MtPnN0b3AoY29tcCk7Cit9CisKK3N0YXRpYyBpbmxp
bmUgdm9pZCBtdGtfZGRwX2NvbXBfZW5hYmxlX3ZibGFuayhzdHJ1Y3QgbXRrX2RkcF9jb21wICpj
b21wLAorCQkJCQkgICAgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJaWYgKGNvbXAtPmZ1
bmNzICYmIGNvbXAtPmZ1bmNzLT5lbmFibGVfdmJsYW5rKQorCQljb21wLT5mdW5jcy0+ZW5hYmxl
X3ZibGFuayhjb21wLCBjcnRjKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG10a19kZHBfY29t
cF9kaXNhYmxlX3ZibGFuayhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCWlmIChjb21w
LT5mdW5jcyAmJiBjb21wLT5mdW5jcy0+ZGlzYWJsZV92YmxhbmspCisJCWNvbXAtPmZ1bmNzLT5k
aXNhYmxlX3ZibGFuayhjb21wKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG10a19kZHBfY29t
cF9sYXllcl9vbihzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLAorCQkJCQkgdW5zaWduZWQgaW50
IGlkeCkKK3sKKwlpZiAoY29tcC0+ZnVuY3MgJiYgY29tcC0+ZnVuY3MtPmxheWVyX29uKQorCQlj
b21wLT5mdW5jcy0+bGF5ZXJfb24oY29tcCwgaWR4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lk
IG10a19kZHBfY29tcF9sYXllcl9vZmYoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwKKwkJCQkJ
ICB1bnNpZ25lZCBpbnQgaWR4KQoreworCWlmIChjb21wLT5mdW5jcyAmJiBjb21wLT5mdW5jcy0+
bGF5ZXJfb2ZmKQorCQljb21wLT5mdW5jcy0+bGF5ZXJfb2ZmKGNvbXAsIGlkeCk7Cit9CisKK3N0
YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBfbGF5ZXJfY29uZmlnKHN0cnVjdCBtdGtfZGRw
X2NvbXAgKmNvbXAsCisJCQkJCSAgICAgdW5zaWduZWQgaW50IGlkeCwKKwkJCQkJICAgICBzdHJ1
Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZSkKK3sKKwlpZiAoY29tcC0+ZnVuY3MgJiYgY29tcC0+
ZnVuY3MtPmxheWVyX2NvbmZpZykKKwkJY29tcC0+ZnVuY3MtPmxheWVyX2NvbmZpZyhjb21wLCBp
ZHgsIHN0YXRlKTsKK30KKworaW50IG10a19kZHBfY29tcF9nZXRfaWQoc3RydWN0IGRldmljZV9u
b2RlICpub2RlLAorCQkJZW51bSBtdGtfZGRwX2NvbXBfdHlwZSBjb21wX3R5cGUpOworaW50IG10
a19kZHBfY29tcF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9ub2RlICpj
b21wX25vZGUsCisJCSAgICAgIHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsIGVudW0gbXRrX2Rk
cF9jb21wX2lkIGNvbXBfaWQsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2NvbXBfZnVu
Y3MgKmZ1bmNzKTsKK2ludCBtdGtfZGRwX2NvbXBfcmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2Ug
KmRybSwgc3RydWN0IG10a19kZHBfY29tcCAqY29tcCk7Cit2b2lkIG10a19kZHBfY29tcF91bnJl
Z2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAp
OworCisjZW5kaWYgLyogTVRLX0RSTV9ERFBfQ09NUF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJz
L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl
ay9tdGtfZHJtX2Rydi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMjFj
YTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9k
cnYuYwpAQCAtMCwwICsxLDU5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRl
ayBJbmMuCisgKiBBdXRob3I6IFlUIFNIRU4gPHl0LnNoZW5AbWVkaWF0ZWsuY29tPgorICoKKyAq
IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVk
ZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgorI2luY2x1ZGUgPGRy
bS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4K
KyNpbmNsdWRlIDxkcm0vZHJtX2dlbS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgor
I2luY2x1ZGUgPGxpbnV4L2lvbW11Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgor
I2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGlt
ZS5oPgorCisjaW5jbHVkZSAibXRrX2RybV9jcnRjLmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHAu
aCIKKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCisjaW5jbHVkZSAibXRrX2RybV9kcnYu
aCIKKyNpbmNsdWRlICJtdGtfZHJtX2ZiLmgiCisjaW5jbHVkZSAibXRrX2RybV9nZW0uaCIKKwor
I2RlZmluZSBEUklWRVJfTkFNRSAibWVkaWF0ZWsiCisjZGVmaW5lIERSSVZFUl9ERVNDICJNZWRp
YXRlayBTb0MgRFJNIgorI2RlZmluZSBEUklWRVJfREFURSAiMjAxNTA1MTMiCisjZGVmaW5lIERS
SVZFUl9NQUpPUiAxCisjZGVmaW5lIERSSVZFUl9NSU5PUiAwCisKK3N0YXRpYyB2b2lkIG10a19h
dG9taWNfc2NoZWR1bGUoc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSwKKwkJCQlzdHJ1
Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCit7CisJcHJpdmF0ZS0+Y29tbWl0LnN0YXRlID0g
c3RhdGU7CisJc2NoZWR1bGVfd29yaygmcHJpdmF0ZS0+Y29tbWl0LndvcmspOworfQorCitzdGF0
aWMgdm9pZCBtdGtfYXRvbWljX3dhaXRfZm9yX2ZlbmNlcyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0
ZSAqc3RhdGUpCit7CisJc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7CisJc3RydWN0IGRybV9wbGFu
ZV9zdGF0ZSAqcGxhbmVfc3RhdGU7CisJaW50IGk7CisKKwlmb3JfZWFjaF9wbGFuZV9pbl9zdGF0
ZShzdGF0ZSwgcGxhbmUsIHBsYW5lX3N0YXRlLCBpKQorCQltdGtfZmJfd2FpdChwbGFuZS0+c3Rh
dGUtPmZiKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2F0b21pY19jb21wbGV0ZShzdHJ1Y3QgbXRr
X2RybV9wcml2YXRlICpwcml2YXRlLAorCQkJCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0
ZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gcHJpdmF0ZS0+ZHJtOworCisJbXRrX2F0
b21pY193YWl0X2Zvcl9mZW5jZXMoc3RhdGUpOworCisJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0
X21vZGVzZXRfZGlzYWJsZXMoZHJtLCBzdGF0ZSk7CisJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0
X3BsYW5lcyhkcm0sIHN0YXRlLCBmYWxzZSk7CisJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X21v
ZGVzZXRfZW5hYmxlcyhkcm0sIHN0YXRlKTsKKwlkcm1fYXRvbWljX2hlbHBlcl93YWl0X2Zvcl92
YmxhbmtzKGRybSwgc3RhdGUpOworCWRybV9hdG9taWNfaGVscGVyX2NsZWFudXBfcGxhbmVzKGRy
bSwgc3RhdGUpOworCWRybV9hdG9taWNfc3RhdGVfZnJlZShzdGF0ZSk7Cit9CisKK3N0YXRpYyB2
b2lkIG10a19hdG9taWNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0
IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGNvbnRhaW5lcl9vZih3b3JrLAorCQkJc3RydWN0
IG10a19kcm1fcHJpdmF0ZSwgY29tbWl0LndvcmspOworCisJbXRrX2F0b21pY19jb21wbGV0ZShw
cml2YXRlLCBwcml2YXRlLT5jb21taXQuc3RhdGUpOworfQorCitzdGF0aWMgaW50IG10a19hdG9t
aWNfY29tbWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sCisJCQkgICAgIHN0cnVjdCBkcm1fYXRv
bWljX3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgYm9vbCBhc3luYykKK3sKKwlzdHJ1Y3QgbXRrX2Ry
bV9wcml2YXRlICpwcml2YXRlID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlpbnQgcmV0OworCisJcmV0
ID0gZHJtX2F0b21pY19oZWxwZXJfcHJlcGFyZV9wbGFuZXMoZHJtLCBzdGF0ZSk7CisJaWYgKHJl
dCkKKwkJcmV0dXJuIHJldDsKKworCW11dGV4X2xvY2soJnByaXZhdGUtPmNvbW1pdC5sb2NrKTsK
KwlmbHVzaF93b3JrKCZwcml2YXRlLT5jb21taXQud29yayk7CisKKwlkcm1fYXRvbWljX2hlbHBl
cl9zd2FwX3N0YXRlKGRybSwgc3RhdGUpOworCisJaWYgKGFzeW5jKQorCQltdGtfYXRvbWljX3Nj
aGVkdWxlKHByaXZhdGUsIHN0YXRlKTsKKwllbHNlCisJCW10a19hdG9taWNfY29tcGxldGUocHJp
dmF0ZSwgc3RhdGUpOworCisJbXV0ZXhfdW5sb2NrKCZwcml2YXRlLT5jb21taXQubG9jayk7CisK
KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVu
Y3MgbXRrX2RybV9tb2RlX2NvbmZpZ19mdW5jcyA9IHsKKwkuZmJfY3JlYXRlID0gbXRrX2RybV9t
b2RlX2ZiX2NyZWF0ZSwKKwkuYXRvbWljX2NoZWNrID0gZHJtX2F0b21pY19oZWxwZXJfY2hlY2ss
CisJLmF0b21pY19jb21taXQgPSBtdGtfYXRvbWljX2NvbW1pdCwKK307CisKK3N0YXRpYyBjb25z
dCBlbnVtIG10a19kZHBfY29tcF9pZCBtdGtfZGRwX21haW5bXSA9IHsKKwlERFBfQ09NUE9ORU5U
X09WTDAsCisJRERQX0NPTVBPTkVOVF9DT0xPUjAsCisJRERQX0NPTVBPTkVOVF9BQUwsCisJRERQ
X0NPTVBPTkVOVF9PRCwKKwlERFBfQ09NUE9ORU5UX1JETUEwLAorCUREUF9DT01QT05FTlRfVUZP
RSwKKwlERFBfQ09NUE9ORU5UX0RTSTAsCisJRERQX0NPTVBPTkVOVF9QV00wLAorfTsKKworc3Rh
dGljIGNvbnN0IGVudW0gbXRrX2RkcF9jb21wX2lkIG10a19kZHBfZXh0W10gPSB7CisJRERQX0NP
TVBPTkVOVF9PVkwxLAorCUREUF9DT01QT05FTlRfQ09MT1IxLAorCUREUF9DT01QT05FTlRfR0FN
TUEsCisJRERQX0NPTVBPTkVOVF9SRE1BMSwKKwlERFBfQ09NUE9ORU5UX0RQSTAsCit9OworCitz
dGF0aWMgaW50IG10a19kcm1fa21zX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKK3sKKwlz
dHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlzdHJ1
Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJaW50
IHJldDsKKworCWlmICghaW9tbXVfcHJlc2VudCgmcGxhdGZvcm1fYnVzX3R5cGUpKQorCQlyZXR1
cm4gLUVQUk9CRV9ERUZFUjsKKworCXBkZXYgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKHByaXZh
dGUtPm11dGV4X25vZGUpOworCWlmICghcGRldikgeworCQlkZXZfZXJyKGRybS0+ZGV2LCAiV2Fp
dGluZyBmb3IgZGlzcC1tdXRleCBkZXZpY2UgJXNcbiIsCisJCQlwcml2YXRlLT5tdXRleF9ub2Rl
LT5mdWxsX25hbWUpOworCQlvZl9ub2RlX3B1dChwcml2YXRlLT5tdXRleF9ub2RlKTsKKwkJcmV0
dXJuIC1FUFJPQkVfREVGRVI7CisJfQorCXByaXZhdGUtPm11dGV4X2RldiA9ICZwZGV2LT5kZXY7
CisKKwlkcm1fbW9kZV9jb25maWdfaW5pdChkcm0pOworCisJZHJtLT5tb2RlX2NvbmZpZy5taW5f
d2lkdGggPSA2NDsKKwlkcm0tPm1vZGVfY29uZmlnLm1pbl9oZWlnaHQgPSA2NDsKKworCS8qCisJ
ICogc2V0IG1heCB3aWR0aCBhbmQgaGVpZ2h0IGFzIGRlZmF1bHQgdmFsdWUoNDA5Nng0MDk2KS4K
KwkgKiB0aGlzIHZhbHVlIHdvdWxkIGJlIHVzZWQgdG8gY2hlY2sgZnJhbWVidWZmZXIgc2l6ZSBs
aW1pdGF0aW9uCisJICogYXQgZHJtX21vZGVfYWRkZmIoKS4KKwkgKi8KKwlkcm0tPm1vZGVfY29u
ZmlnLm1heF93aWR0aCA9IDQwOTY7CisJZHJtLT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0ID0gNDA5
NjsKKwlkcm0tPm1vZGVfY29uZmlnLmZ1bmNzID0gJm10a19kcm1fbW9kZV9jb25maWdfZnVuY3M7
CisKKwlyZXQgPSBjb21wb25lbnRfYmluZF9hbGwoZHJtLT5kZXYsIGRybSk7CisJaWYgKHJldCkK
KwkJZ290byBlcnJfY29uZmlnX2NsZWFudXA7CisKKwkvKgorCSAqIFdlIGN1cnJlbnRseSBzdXBw
b3J0IHR3byBmaXhlZCBkYXRhIHN0cmVhbXMsIGVhY2ggb3B0aW9uYWwsCisJICogYW5kIGVhY2gg
c3RhdGljYWxseSBhc3NpZ25lZCB0byBhIGNydGM6CisJICogT1ZMMCAtPiBDT0xPUjAgLT4gQUFM
IC0+IE9EIC0+IFJETUEwIC0+IFVGT0UgLT4gRFNJMCAuLi4KKwkgKi8KKwlyZXQgPSBtdGtfZHJt
X2NydGNfY3JlYXRlKGRybSwgbXRrX2RkcF9tYWluLCBBUlJBWV9TSVpFKG10a19kZHBfbWFpbikp
OworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9jb21wb25lbnRfdW5iaW5kOworCS8qIC4uLiBh
bmQgT1ZMMSAtPiBDT0xPUjEgLT4gR0FNTUEgLT4gUkRNQTEgLT4gRFBJMC4gKi8KKwlyZXQgPSBt
dGtfZHJtX2NydGNfY3JlYXRlKGRybSwgbXRrX2RkcF9leHQsIEFSUkFZX1NJWkUobXRrX2RkcF9l
eHQpKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfY29tcG9uZW50X3VuYmluZDsKKworCS8q
IFVzZSBPVkwgZGV2aWNlIGZvciBhbGwgRE1BIG1lbW9yeSBhbGxvY2F0aW9ucyAqLworCW5wID0g
cHJpdmF0ZS0+Y29tcF9ub2RlW210a19kZHBfbWFpblswXV0gPzoKKwkgICAgIHByaXZhdGUtPmNv
bXBfbm9kZVttdGtfZGRwX2V4dFswXV07CisJcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUo
bnApOworCWlmICghcGRldikgeworCQlyZXQgPSAtRU5PREVWOworCQlkZXZfZXJyKGRybS0+ZGV2
LCAiTmVlZCBhdCBsZWFzdCBvbmUgT1ZMIGRldmljZVxuIik7CisJCWdvdG8gZXJyX2NvbXBvbmVu
dF91bmJpbmQ7CisJfQorCisJcHJpdmF0ZS0+ZG1hX2RldiA9ICZwZGV2LT5kZXY7CisKKwkvKgor
CSAqIFdlIGRvbid0IHVzZSB0aGUgZHJtX2lycV9pbnN0YWxsKCkgaGVscGVycyBwcm92aWRlZCBi
eSB0aGUgRFJNCisJICogY29yZSwgc28gd2UgbmVlZCB0byBzZXQgdGhpcyBtYW51YWxseSBpbiBv
cmRlciB0byBhbGxvdyB0aGUKKwkgKiBEUk1fSU9DVExfV0FJVF9WQkxBTksgdG8gb3BlcmF0ZSBj
b3JyZWN0bHkuCisJICovCisJZHJtLT5pcnFfZW5hYmxlZCA9IHRydWU7CisJcmV0ID0gZHJtX3Zi
bGFua19pbml0KGRybSwgTUFYX0NSVEMpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9jb21w
b25lbnRfdW5iaW5kOworCisJZHJtX2ttc19oZWxwZXJfcG9sbF9pbml0KGRybSk7CisJZHJtX21v
ZGVfY29uZmlnX3Jlc2V0KGRybSk7CisKKwlyZXR1cm4gMDsKKworZXJyX2NvbXBvbmVudF91bmJp
bmQ6CisJY29tcG9uZW50X3VuYmluZF9hbGwoZHJtLT5kZXYsIGRybSk7CitlcnJfY29uZmlnX2Ns
ZWFudXA6CisJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZHJtKTsKKworCXJldHVybiByZXQ7Cit9
CisKK3N0YXRpYyB2b2lkIG10a19kcm1fa21zX2RlaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJt
KQoreworCWRybV9rbXNfaGVscGVyX3BvbGxfZmluaShkcm0pOworCisJZHJtX3ZibGFua19jbGVh
bnVwKGRybSk7CisJY29tcG9uZW50X3VuYmluZF9hbGwoZHJtLT5kZXYsIGRybSk7CisJZHJtX21v
ZGVfY29uZmlnX2NsZWFudXAoZHJtKTsKK30KKworc3RhdGljIGludCBtdGtfZHJtX3VubG9hZChz
dHJ1Y3QgZHJtX2RldmljZSAqZHJtKQoreworCW10a19kcm1fa21zX2RlaW5pdChkcm0pOworCWRy
bS0+ZGV2X3ByaXZhdGUgPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBz
dHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbXRrX2RybV9nZW1fdm1fb3BzID0geworCS5vcGVu
ID0gZHJtX2dlbV92bV9vcGVuLAorCS5jbG9zZSA9IGRybV9nZW1fdm1fY2xvc2UsCit9OworCitz
dGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtdGtfZHJtX2ZvcHMgPSB7CisJLm93
bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSBkcm1fb3BlbiwKKwkucmVsZWFzZSA9IGRybV9y
ZWxlYXNlLAorCS51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKKwkubW1hcCA9IG10a19kcm1f
Z2VtX21tYXAsCisJLnBvbGwgPSBkcm1fcG9sbCwKKwkucmVhZCA9IGRybV9yZWFkLAorI2lmZGVm
IENPTkZJR19DT01QQVQKKwkuY29tcGF0X2lvY3RsID0gZHJtX2NvbXBhdF9pb2N0bCwKKyNlbmRp
ZgorfTsKKworc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIG10a19kcm1fZHJpdmVyID0geworCS5k
cml2ZXJfZmVhdHVyZXMgPSBEUklWRVJfTU9ERVNFVCB8IERSSVZFUl9HRU0gfCBEUklWRVJfUFJJ
TUUgfAorCQkJICAgRFJJVkVSX0FUT01JQywKKwkudW5sb2FkID0gbXRrX2RybV91bmxvYWQsCisK
KwkuZ2V0X3ZibGFua19jb3VudGVyID0gZHJtX3ZibGFua19jb3VudCwKKwkuZW5hYmxlX3ZibGFu
ayA9IG10a19kcm1fY3J0Y19lbmFibGVfdmJsYW5rLAorCS5kaXNhYmxlX3ZibGFuayA9IG10a19k
cm1fY3J0Y19kaXNhYmxlX3ZibGFuaywKKworCS5nZW1fZnJlZV9vYmplY3QgPSBtdGtfZHJtX2dl
bV9mcmVlX29iamVjdCwKKwkuZ2VtX3ZtX29wcyA9ICZtdGtfZHJtX2dlbV92bV9vcHMsCisJLmR1
bWJfY3JlYXRlID0gbXRrX2RybV9nZW1fZHVtYl9jcmVhdGUsCisJLmR1bWJfbWFwX29mZnNldCA9
IG10a19kcm1fZ2VtX2R1bWJfbWFwX29mZnNldCwKKwkuZHVtYl9kZXN0cm95ID0gZHJtX2dlbV9k
dW1iX2Rlc3Ryb3ksCisKKwkucHJpbWVfaGFuZGxlX3RvX2ZkID0gZHJtX2dlbV9wcmltZV9oYW5k
bGVfdG9fZmQsCisJLnByaW1lX2ZkX3RvX2hhbmRsZSA9IGRybV9nZW1fcHJpbWVfZmRfdG9faGFu
ZGxlLAorCS5nZW1fcHJpbWVfZXhwb3J0ID0gZHJtX2dlbV9wcmltZV9leHBvcnQsCisJLmdlbV9w
cmltZV9pbXBvcnQgPSBkcm1fZ2VtX3ByaW1lX2ltcG9ydCwKKwkuZ2VtX3ByaW1lX2dldF9zZ190
YWJsZSA9IG10a19nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlLAorCS5nZW1fcHJpbWVfaW1wb3J0X3Nn
X3RhYmxlID0gbXRrX2dlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUsCisJLmdlbV9wcmltZV9tbWFw
ID0gbXRrX2RybV9nZW1fbW1hcF9idWYsCisJLmZvcHMgPSAmbXRrX2RybV9mb3BzLAorCisJLm5h
bWUgPSBEUklWRVJfTkFNRSwKKwkuZGVzYyA9IERSSVZFUl9ERVNDLAorCS5kYXRlID0gRFJJVkVS
X0RBVEUsCisJLm1ham9yID0gRFJJVkVSX01BSk9SLAorCS5taW5vciA9IERSSVZFUl9NSU5PUiwK
K307CisKK3N0YXRpYyBpbnQgY29tcGFyZV9vZihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRh
dGEpCit7CisJcmV0dXJuIGRldi0+b2Zfbm9kZSA9PSBkYXRhOworfQorCitzdGF0aWMgaW50IG10
a19kcm1fYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0
ZSAqcHJpdmF0ZSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpk
cm07CisJaW50IHJldDsKKworCWRybSA9IGRybV9kZXZfYWxsb2MoJm10a19kcm1fZHJpdmVyLCBk
ZXYpOworCWlmICghZHJtKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRybV9kZXZfc2V0X3VuaXF1
ZShkcm0sIGRldl9uYW1lKGRldikpOworCisJcmV0ID0gZHJtX2Rldl9yZWdpc3Rlcihkcm0sIDAp
OworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9mcmVlOworCisJZHJtLT5kZXZfcHJpdmF0ZSA9
IHByaXZhdGU7CisJcHJpdmF0ZS0+ZHJtID0gZHJtOworCisJcmV0ID0gbXRrX2RybV9rbXNfaW5p
dChkcm0pOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl91bnJlZ2lzdGVyOworCisJcmV0dXJu
IDA7CisKK2Vycl91bnJlZ2lzdGVyOgorCWRybV9kZXZfdW5yZWdpc3Rlcihkcm0pOworZXJyX2Zy
ZWU6CisJZHJtX2Rldl91bnJlZihkcm0pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lk
IG10a19kcm1fdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9w
cml2YXRlICpwcml2YXRlID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlkcm1fcHV0X2Rldihw
cml2YXRlLT5kcm0pOworCXByaXZhdGUtPmRybSA9IE5VTEw7Cit9CisKK3N0YXRpYyBjb25zdCBz
dHJ1Y3QgY29tcG9uZW50X21hc3Rlcl9vcHMgbXRrX2RybV9vcHMgPSB7CisJLmJpbmQJCT0gbXRr
X2RybV9iaW5kLAorCS51bmJpbmQJCT0gbXRrX2RybV91bmJpbmQsCit9OworCitzdGF0aWMgY29u
c3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfZGRwX2NvbXBfZHRfaWRzW10gPSB7CisJeyAuY29t
cGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1vdmwiLCAgIC5kYXRhID0gKHZvaWQgKilN
VEtfRElTUF9PVkwgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLXJk
bWEiLCAgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQX1JETUEgfSwKKwl7IC5jb21wYXRpYmxlID0g
Im1lZGlhdGVrLG10ODE3My1kaXNwLXdkbWEiLCAgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQX1dE
TUEgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLWNvbG9yIiwgLmRh
dGEgPSAodm9pZCAqKU1US19ESVNQX0NPTE9SIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRl
ayxtdDgxNzMtZGlzcC1hYWwiLCAgIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9BQUx9LAorCXsg
LmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRpc3AtZ2FtbWEiLCAuZGF0YSA9ICh2b2lk
ICopTVRLX0RJU1BfR0FNTUEsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMt
ZGlzcC11Zm9lIiwgIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9VRk9FIH0sCisJeyAuY29tcGF0
aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZHNpIiwgICAgICAgIC5kYXRhID0gKHZvaWQgKilNVEtf
RFNJIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZHBpIiwgICAgICAgIC5k
YXRhID0gKHZvaWQgKilNVEtfRFBJIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgx
NzMtZGlzcC1tdXRleCIsIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9NVVRFWCB9LAorCXsgLmNv
bXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRpc3AtcHdtIiwgICAuZGF0YSA9ICh2b2lkICop
TVRLX0RJU1BfUFdNIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1v
ZCIsICAgIC5kYXRhID0gKHZvaWQgKilNVEtfRElTUF9PRCB9LAorCXsgfQorfTsKKworc3RhdGlj
IGludCBtdGtfZHJtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3Ry
dWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpw
cml2YXRlOworCXN0cnVjdCByZXNvdXJjZSAqbWVtOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9k
ZTsKKwlzdHJ1Y3QgY29tcG9uZW50X21hdGNoICptYXRjaCA9IE5VTEw7CisJaW50IHJldDsKKwlp
bnQgaTsKKworCXByaXZhdGUgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXZhdGUpLCBH
RlBfS0VSTkVMKTsKKwlpZiAoIXByaXZhdGUpCisJCXJldHVybiAtRU5PTUVNOworCisJbXV0ZXhf
aW5pdCgmcHJpdmF0ZS0+Y29tbWl0LmxvY2spOworCUlOSVRfV09SSygmcHJpdmF0ZS0+Y29tbWl0
LndvcmssIG10a19hdG9taWNfd29yayk7CisKKwltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2Uo
cGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXByaXZhdGUtPmNvbmZpZ19yZWdzID0gZGV2bV9p
b3JlbWFwX3Jlc291cmNlKGRldiwgbWVtKTsKKwlpZiAoSVNfRVJSKHByaXZhdGUtPmNvbmZpZ19y
ZWdzKSkgeworCQlyZXQgPSBQVFJfRVJSKHByaXZhdGUtPmNvbmZpZ19yZWdzKTsKKwkJZGV2X2Vy
cihkZXYsICJGYWlsZWQgdG8gaW9yZW1hcCBtbXN5cy1jb25maWcgcmVzb3VyY2U6ICVkXG4iLAor
CQkJcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBJdGVyYXRlIG92ZXIgc2libGluZyBE
SVNQIGZ1bmN0aW9uIGJsb2NrcyAqLworCWZvcl9lYWNoX2NoaWxkX29mX25vZGUoZGV2LT5vZl9u
b2RlLT5wYXJlbnQsIG5vZGUpIHsKKwkJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZfaWQ7
CisJCWVudW0gbXRrX2RkcF9jb21wX3R5cGUgY29tcF90eXBlOworCQlpbnQgY29tcF9pZDsKKwor
CQlvZl9pZCA9IG9mX21hdGNoX25vZGUobXRrX2RkcF9jb21wX2R0X2lkcywgbm9kZSk7CisJCWlm
ICghb2ZfaWQpCisJCQljb250aW51ZTsKKworCQlpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUo
bm9kZSkpIHsKKwkJCWRldl9kYmcoZGV2LCAiU2tpcHBpbmcgZGlzYWJsZWQgY29tcG9uZW50ICVz
XG4iLAorCQkJCW5vZGUtPmZ1bGxfbmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWNvbXBf
dHlwZSA9IChlbnVtIG10a19kZHBfY29tcF90eXBlKW9mX2lkLT5kYXRhOworCisJCWlmIChjb21w
X3R5cGUgPT0gTVRLX0RJU1BfTVVURVgpIHsKKwkJCXByaXZhdGUtPm11dGV4X25vZGUgPSBvZl9u
b2RlX2dldChub2RlKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJY29tcF9pZCA9IG10a19kZHBf
Y29tcF9nZXRfaWQobm9kZSwgY29tcF90eXBlKTsKKwkJaWYgKGNvbXBfaWQgPCAwKSB7CisJCQlk
ZXZfd2FybihkZXYsICJTa2lwcGluZyB1bmtub3duIGNvbXBvbmVudCAlc1xuIiwKKwkJCQkgbm9k
ZS0+ZnVsbF9uYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcHJpdmF0ZS0+Y29tcF9ub2Rl
W2NvbXBfaWRdID0gb2Zfbm9kZV9nZXQobm9kZSk7CisKKwkJLyoKKwkJICogQ3VycmVudGx5IG9u
bHkgdGhlIE9WTCwgUkRNQSwgRFNJLCBhbmQgRFBJIGJsb2NrcyBoYXZlCisJCSAqIHNlcGFyYXRl
IGNvbXBvbmVudCBwbGF0Zm9ybSBkcml2ZXJzIGFuZCBpbml0aWFsaXplIHRoZWlyIG93bgorCQkg
KiBERFAgY29tcG9uZW50IHN0cnVjdHVyZS4gVGhlIG90aGVycyBhcmUgaW5pdGlhbGl6ZWQgaGVy
ZS4KKwkJICovCisJCWlmIChjb21wX3R5cGUgPT0gTVRLX0RJU1BfT1ZMIHx8CisJCSAgICBjb21w
X3R5cGUgPT0gTVRLX0RJU1BfUkRNQSB8fAorCQkgICAgY29tcF90eXBlID09IE1US19EU0kgfHwK
KwkJICAgIGNvbXBfdHlwZSA9PSBNVEtfRFBJKSB7CisJCQlkZXZfaW5mbyhkZXYsICJBZGRpbmcg
Y29tcG9uZW50IG1hdGNoIGZvciAlc1xuIiwKKwkJCQkgbm9kZS0+ZnVsbF9uYW1lKTsKKwkJCWNv
bXBvbmVudF9tYXRjaF9hZGQoZGV2LCAmbWF0Y2gsIGNvbXBhcmVfb2YsIG5vZGUpOworCQl9IGVs
c2UgeworCQkJc3RydWN0IG10a19kZHBfY29tcCAqY29tcDsKKworCQkJY29tcCA9IGRldm1fa3ph
bGxvYyhkZXYsIHNpemVvZigqY29tcCksIEdGUF9LRVJORUwpOworCQkJaWYgKCFjb21wKSB7CisJ
CQkJcmV0ID0gLUVOT01FTTsKKwkJCQlnb3RvIGVycl9ub2RlOworCQkJfQorCisJCQlyZXQgPSBt
dGtfZGRwX2NvbXBfaW5pdChkZXYsIG5vZGUsIGNvbXAsIGNvbXBfaWQsIE5VTEwpOworCQkJaWYg
KHJldCkKKwkJCQlnb3RvIGVycl9ub2RlOworCisJCQlwcml2YXRlLT5kZHBfY29tcFtjb21wX2lk
XSA9IGNvbXA7CisJCX0KKwl9CisKKwlpZiAoIXByaXZhdGUtPm11dGV4X25vZGUpIHsKKwkJZGV2
X2VycihkZXYsICJGYWlsZWQgdG8gZmluZCBkaXNwLW11dGV4IG5vZGVcbiIpOworCQlyZXQgPSAt
RU5PREVWOworCQlnb3RvIGVycl9ub2RlOworCX0KKworCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7
CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2YXRlKTsKKworCXJldCA9IGNvbXBv
bmVudF9tYXN0ZXJfYWRkX3dpdGhfbWF0Y2goZGV2LCAmbXRrX2RybV9vcHMsIG1hdGNoKTsKKwlp
ZiAocmV0KQorCQlnb3RvIGVycl9wbTsKKworCXJldHVybiAwOworCitlcnJfcG06CisJcG1fcnVu
dGltZV9kaXNhYmxlKGRldik7CitlcnJfbm9kZToKKwlvZl9ub2RlX3B1dChwcml2YXRlLT5tdXRl
eF9ub2RlKTsKKwlmb3IgKGkgPSAwOyBpIDwgRERQX0NPTVBPTkVOVF9JRF9NQVg7IGkrKykKKwkJ
b2Zfbm9kZV9wdXQocHJpdmF0ZS0+Y29tcF9ub2RlW2ldKTsKKwlyZXR1cm4gcmV0OworfQorCitz
dGF0aWMgaW50IG10a19kcm1fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7
CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IHBsYXRmb3JtX2dldF9kcnZkYXRh
KHBkZXYpOworCWludCBpOworCisJY29tcG9uZW50X21hc3Rlcl9kZWwoJnBkZXYtPmRldiwgJm10
a19kcm1fb3BzKTsKKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CisJb2Zfbm9kZV9w
dXQocHJpdmF0ZS0+bXV0ZXhfbm9kZSk7CisJZm9yIChpID0gMDsgaSA8IEREUF9DT01QT05FTlRf
SURfTUFYOyBpKyspCisJCW9mX25vZGVfcHV0KHByaXZhdGUtPmNvbXBfbm9kZVtpXSk7CisKKwly
ZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTV9TTEVFUAorc3RhdGljIGludCBtdGtfZHJt
X3N5c19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2
YXRlICpwcml2YXRlID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRybV9kZXZpY2Ug
KmRybSA9IHByaXZhdGUtPmRybTsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubjsKKworCWRy
bV9rbXNfaGVscGVyX3BvbGxfZGlzYWJsZShkcm0pOworCisJZHJtX21vZGVzZXRfbG9ja19hbGwo
ZHJtKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm4sICZkcm0tPm1vZGVfY29uZmlnLmNvbm5l
Y3Rvcl9saXN0LCBoZWFkKSB7CisJCWludCBvbGRfZHBtcyA9IGNvbm4tPmRwbXM7CisKKwkJaWYg
KGNvbm4tPmZ1bmNzLT5kcG1zKQorCQkJY29ubi0+ZnVuY3MtPmRwbXMoY29ubiwgRFJNX01PREVf
RFBNU19PRkYpOworCisJCS8qIFNldCB0aGUgb2xkIG1vZGUgYmFjayB0byB0aGUgY29ubmVjdG9y
IGZvciByZXN1bWUgKi8KKwkJY29ubi0+ZHBtcyA9IG9sZF9kcG1zOworCX0KKwlkcm1fbW9kZXNl
dF91bmxvY2tfYWxsKGRybSk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJtdGtfZHJtX3N5c19zdXNw
ZW5kXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfZHJtX3N5c19yZXN1bWUo
c3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUg
PSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gcHJpdmF0
ZS0+ZHJtOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uOworCisJZHJtX21vZGVzZXRfbG9j
a19hbGwoZHJtKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm4sICZkcm0tPm1vZGVfY29uZmln
LmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7CisJCWludCBkZXNpcmVkX21vZGUgPSBjb25uLT5kcG1z
OworCisJCS8qCisJCSAqIGF0IHN1c3BlbmQgdGltZSwgd2Ugc2F2ZSBkcG1zIHRvIGNvbm5lY3Rv
ci0+ZHBtcywKKwkJICogcmVzdG9yZSB0aGUgb2xkX2RwbXMsIGFuZCBhdCBjdXJyZW50IHRpbWUs
IHRoZSBjb25uZWN0b3IKKwkJICogZHBtcyBzdGF0dXMgbXVzdCBiZSBEUk1fTU9ERV9EUE1TX09G
Ri4KKwkJICovCisJCWNvbm4tPmRwbXMgPSBEUk1fTU9ERV9EUE1TX09GRjsKKworCQkvKgorCQkg
KiBJZiB0aGUgY29ubmVjdG9yIGhhcyBiZWVuIGRpc2Nvbm5lY3RlZCBkdXJpbmcgc3VzcGVuZCwK
KwkJICogZGlzY29ubmVjdCBpdCBmcm9tIHRoZSBlbmNvZGVyIGFuZCBsZWF2ZSBpdCBvZmYuIFdl
J2xsIG5vdGlmeQorCQkgKiB1c2Vyc3BhY2UgYXQgdGhlIGVuZC4KKwkJICovCisJCWlmIChjb25u
LT5mdW5jcy0+ZHBtcykKKwkJCWNvbm4tPmZ1bmNzLT5kcG1zKGNvbm4sIGRlc2lyZWRfbW9kZSk7
CisJfQorCWRybV9tb2Rlc2V0X3VubG9ja19hbGwoZHJtKTsKKworCWRybV9rbXNfaGVscGVyX3Bv
bGxfZW5hYmxlKGRybSk7CisKKwlEUk1fREVCVUdfRFJJVkVSKCJtdGtfZHJtX3N5c19yZXN1bWVc
biIpOworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBTSU1QTEVfREVWX1BNX09QUyht
dGtfZHJtX3BtX29wcywgbXRrX2RybV9zeXNfc3VzcGVuZCwKKwkJCSBtdGtfZHJtX3N5c19yZXN1
bWUpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfZHJtX29mX2lkc1td
ID0geworCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLW1tc3lzIiwgfSwKKwl7IH0K
K307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19kcm1fcGxhdGZvcm1fZHJp
dmVyID0geworCS5wcm9iZQk9IG10a19kcm1fcHJvYmUsCisJLnJlbW92ZQk9IG10a19kcm1fcmVt
b3ZlLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lCT0gIm1lZGlhdGVrLWRybSIsCisJCS5vZl9tYXRj
aF90YWJsZSA9IG10a19kcm1fb2ZfaWRzLAorCQkucG0gICAgID0gJm10a19kcm1fcG1fb3BzLAor
CX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqIGNvbnN0IG10a19kcm1f
ZHJpdmVyc1tdID0geworCSZtdGtfZHJtX3BsYXRmb3JtX2RyaXZlciwKKwkmbXRrX2Rpc3Bfb3Zs
X2RyaXZlciwKKwkmbXRrX2Rpc3BfcmRtYV9kcml2ZXIsCit9OworCitzdGF0aWMgaW50IF9faW5p
dCBtdGtfZHJtX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCWludCBpOworCisJZm9yIChpID0g
MDsgaSA8IEFSUkFZX1NJWkUobXRrX2RybV9kcml2ZXJzKTsgaSsrKSB7CisJCXJldCA9IHBsYXRm
b3JtX2RyaXZlcl9yZWdpc3RlcihtdGtfZHJtX2RyaXZlcnNbaV0pOworCQlpZiAocmV0IDwgMCkg
eworCQkJcHJfZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIgJXMgZHJpdmVyOiAlZFxuIiwKKwkJCSAg
ICAgICBtdGtfZHJtX2RyaXZlcnNbaV0tPmRyaXZlci5uYW1lLCByZXQpOworCQkJZ290byBlcnI7
CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKworZXJyOgorCXdoaWxlICgtLWkgPj0gMCkKKwkJcGxh
dGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIobXRrX2RybV9kcml2ZXJzW2ldKTsKKworCXJldHVybiBy
ZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtdGtfZHJtX2V4aXQodm9pZCkKK3sKKwlpbnQg
aTsKKworCWZvciAoaSA9IEFSUkFZX1NJWkUobXRrX2RybV9kcml2ZXJzKSAtIDE7IGkgPj0gMDsg
aS0tKQorCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcihtdGtfZHJtX2RyaXZlcnNbaV0pOwor
fQorCittb2R1bGVfaW5pdChtdGtfZHJtX2luaXQpOworbW9kdWxlX2V4aXQobXRrX2RybV9leGl0
KTsKKworTU9EVUxFX0FVVEhPUigiWVQgU0hFTiA8eXQuc2hlbkBtZWRpYXRlay5jb20+Iik7CitN
T0RVTEVfREVTQ1JJUFRJT04oIk1lZGlhdGVrIFNvQyBEUk0gZHJpdmVyIik7CitNT0RVTEVfTElD
RU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr
X2RybV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYjc0NGMKLS0tIC9kZXYvbnVsbAorKysg
Yi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuaApAQCAtMCwwICsxLDU0IEBA
CisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqCisgKiBUaGlzIHBy
b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v
ZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBNVEtfRFJN
X0RSVl9ICisjZGVmaW5lIE1US19EUk1fRFJWX0gKKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+Cisj
aW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorCisjZGVmaW5lIE1BWF9DUlRDCTIKKyNkZWZp
bmUgTUFYX0NPTk5FQ1RPUgkyCisKK3N0cnVjdCBkZXZpY2U7CitzdHJ1Y3QgZGV2aWNlX25vZGU7
CitzdHJ1Y3QgZHJtX2NydGM7CitzdHJ1Y3QgZHJtX2RldmljZTsKK3N0cnVjdCBkcm1fZmJfaGVs
cGVyOworc3RydWN0IGRybV9wcm9wZXJ0eTsKK3N0cnVjdCByZWdtYXA7CisKK3N0cnVjdCBtdGtf
ZHJtX3ByaXZhdGUgeworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm07CisJc3RydWN0IGRldmljZSAq
ZG1hX2RldjsKKworCXN0cnVjdCBkcm1fY3J0YyAqY3J0Y1tNQVhfQ1JUQ107CisJdW5zaWduZWQg
aW50IG51bV9waXBlczsKKworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbXV0ZXhfbm9kZTsKKwlzdHJ1
Y3QgZGV2aWNlICptdXRleF9kZXY7CisJdm9pZCBfX2lvbWVtICpjb25maWdfcmVnczsKKwlzdHJ1
Y3QgZGV2aWNlX25vZGUgKmNvbXBfbm9kZVtERFBfQ09NUE9ORU5UX0lEX01BWF07CisJc3RydWN0
IG10a19kZHBfY29tcCAqZGRwX2NvbXBbRERQX0NPTVBPTkVOVF9JRF9NQVhdOworCisJc3RydWN0
IHsKKwkJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlOworCQlzdHJ1Y3Qgd29ya19zdHJ1
Y3Qgd29yazsKKwkJc3RydWN0IG11dGV4IGxvY2s7CisJfSBjb21taXQ7Cit9OworCitleHRlcm4g
c3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZGlzcF9vdmxfZHJpdmVyOworZXh0ZXJuIHN0cnVj
dCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2Rpc3BfcmRtYV9kcml2ZXI7CisKKyNlbmRpZiAvKiBNVEtf
RFJNX0RSVl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry
bV9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuYwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2QzMGMxCi0tLSAvZGV2L251bGwKKysrIGIvZHJp
dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIuYwpAQCAtMCwwICsxLDE2NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFt
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK
KyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
dmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5o
PgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2Zi
X2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+CisjaW5jbHVkZSA8bGludXgvZG1h
LWJ1Zi5oPgorI2luY2x1ZGUgPGxpbnV4L3Jlc2VydmF0aW9uLmg+CisKKyNpbmNsdWRlICJtdGtf
ZHJtX2Rydi5oIgorI2luY2x1ZGUgIm10a19kcm1fZmIuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2dl
bS5oIgorCisvKgorICogbXRrIHNwZWNpZmljIGZyYW1lYnVmZmVyIHN0cnVjdHVyZS4KKyAqCisg
KiBAZmI6IGRybSBmcmFtZWJ1ZmZlciBvYmplY3QuCisgKiBAZ2VtX29iajogYXJyYXkgb2YgZ2Vt
IG9iamVjdHMuCisgKi8KK3N0cnVjdCBtdGtfZHJtX2ZiIHsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVm
ZmVyCWJhc2U7CisJLyogRm9yIG5vdyB3ZSBvbmx5IHN1cHBvcnQgYSBzaW5nbGUgcGxhbmUgKi8K
KwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QJKmdlbV9vYmo7Cit9OworCisjZGVmaW5lIHRvX210a19m
Yih4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IG10a19kcm1fZmIsIGJhc2UpCisKK3N0cnVjdCBk
cm1fZ2VtX29iamVjdCAqbXRrX2ZiX2dldF9nZW1fb2JqKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIg
KmZiKQoreworCXN0cnVjdCBtdGtfZHJtX2ZiICptdGtfZmIgPSB0b19tdGtfZmIoZmIpOworCisJ
cmV0dXJuIG10a19mYi0+Z2VtX29iajsKK30KKworc3RhdGljIGludCBtdGtfZHJtX2ZiX2NyZWF0
ZV9oYW5kbGUoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJCQkJICAgIHN0cnVjdCBkcm1f
ZmlsZSAqZmlsZV9wcml2LAorCQkJCSAgICB1bnNpZ25lZCBpbnQgKmhhbmRsZSkKK3sKKwlzdHJ1
Y3QgbXRrX2RybV9mYiAqbXRrX2ZiID0gdG9fbXRrX2ZiKGZiKTsKKworCXJldHVybiBkcm1fZ2Vt
X2hhbmRsZV9jcmVhdGUoZmlsZV9wcml2LCBtdGtfZmItPmdlbV9vYmosIGhhbmRsZSk7Cit9CisK
K3N0YXRpYyB2b2lkIG10a19kcm1fZmJfZGVzdHJveShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm
YikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9mYiAqbXRrX2ZiID0gdG9fbXRrX2ZiKGZiKTsKKworCWRy
bV9mcmFtZWJ1ZmZlcl9jbGVhbnVwKGZiKTsKKworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNl
X3VubG9ja2VkKG10a19mYi0+Z2VtX29iaik7CisKKwlrZnJlZShtdGtfZmIpOworfQorCitzdGF0
aWMgY29uc3Qgc3RydWN0IGRybV9mcmFtZWJ1ZmZlcl9mdW5jcyBtdGtfZHJtX2ZiX2Z1bmNzID0g
eworCS5jcmVhdGVfaGFuZGxlID0gbXRrX2RybV9mYl9jcmVhdGVfaGFuZGxlLAorCS5kZXN0cm95
ID0gbXRrX2RybV9mYl9kZXN0cm95LAorfTsKKworc3RhdGljIHN0cnVjdCBtdGtfZHJtX2ZiICpt
dGtfZHJtX2ZyYW1lYnVmZmVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJY29u
c3Qgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKm1vZGUsCisJCQkJCXN0cnVjdCBkcm1fZ2VtX29i
amVjdCAqb2JqKQoreworCXN0cnVjdCBtdGtfZHJtX2ZiICptdGtfZmI7CisJaW50IHJldDsKKwor
CWlmIChkcm1fZm9ybWF0X251bV9wbGFuZXMobW9kZS0+cGl4ZWxfZm9ybWF0KSAhPSAxKQorCQly
ZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCW10a19mYiA9IGt6YWxsb2Moc2l6ZW9mKCptdGtf
ZmIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW10a19mYikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01F
TSk7CisKKwlkcm1faGVscGVyX21vZGVfZmlsbF9mYl9zdHJ1Y3QoJm10a19mYi0+YmFzZSwgbW9k
ZSk7CisKKwltdGtfZmItPmdlbV9vYmogPSBvYmo7CisKKwlyZXQgPSBkcm1fZnJhbWVidWZmZXJf
aW5pdChkZXYsICZtdGtfZmItPmJhc2UsICZtdGtfZHJtX2ZiX2Z1bmNzKTsKKwlpZiAocmV0KSB7
CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGluaXRpYWxpemUgZnJhbWVidWZmZXJcbiIpOworCQlr
ZnJlZShtdGtfZmIpOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCXJldHVybiBtdGtf
ZmI7Cit9CisKKy8qCisgKiBXYWl0IGZvciBhbnkgZXhjbHVzaXZlIGZlbmNlIGluIGZiJ3MgZ2Vt
IG9iamVjdCdzIHJlc2VydmF0aW9uIG9iamVjdC4KKyAqCisgKiBSZXR1cm5zIC1FUkVTVEFSVFNZ
UyBpZiBpbnRlcnJ1cHRlZCwgZWxzZSAwLgorICovCitpbnQgbXRrX2ZiX3dhaXQoc3RydWN0IGRy
bV9mcmFtZWJ1ZmZlciAqZmIpCit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW07CisJc3Ry
dWN0IHJlc2VydmF0aW9uX29iamVjdCAqcmVzdjsKKwlsb25nIHJldDsKKworCWlmICghZmIpCisJ
CXJldHVybiAwOworCisJZ2VtID0gbXRrX2ZiX2dldF9nZW1fb2JqKGZiKTsKKwlpZiAoIWdlbSB8
fCAhZ2VtLT5kbWFfYnVmIHx8ICFnZW0tPmRtYV9idWYtPnJlc3YpCisJCXJldHVybiAwOworCisJ
cmVzdiA9IGdlbS0+ZG1hX2J1Zi0+cmVzdjsKKwlyZXQgPSByZXNlcnZhdGlvbl9vYmplY3Rfd2Fp
dF90aW1lb3V0X3JjdShyZXN2LCBmYWxzZSwgdHJ1ZSwKKwkJCQkJCSAgTUFYX1NDSEVEVUxFX1RJ
TUVPVVQpOworCS8qIE1BWF9TQ0hFRFVMRV9USU1FT1VUIG9uIHN1Y2Nlc3MsIC1FUkVTVEFSVFNZ
UyBpZiBpbnRlcnJ1cHRlZCAqLworCWlmIChXQVJOX09OKHJldCA8IDApKQorCQlyZXR1cm4gcmV0
OworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm10a19kcm1fbW9k
ZV9mYl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgIHN0cnVjdCBk
cm1fZmlsZSAqZmlsZSwKKwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQy
ICpjbWQpCit7CisJc3RydWN0IG10a19kcm1fZmIgKm10a19mYjsKKwlzdHJ1Y3QgZHJtX2dlbV9v
YmplY3QgKmdlbTsKKwl1bnNpZ25lZCBpbnQgd2lkdGggPSBjbWQtPndpZHRoOworCXVuc2lnbmVk
IGludCBoZWlnaHQgPSBjbWQtPmhlaWdodDsKKwl1bnNpZ25lZCBpbnQgc2l6ZSwgYnBwOworCWlu
dCByZXQ7CisKKwlpZiAoZHJtX2Zvcm1hdF9udW1fcGxhbmVzKGNtZC0+cGl4ZWxfZm9ybWF0KSAh
PSAxKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCWdlbSA9IGRybV9nZW1fb2JqZWN0
X2xvb2t1cChkZXYsIGZpbGUsIGNtZC0+aGFuZGxlc1swXSk7CisJaWYgKCFnZW0pCisJCXJldHVy
biBFUlJfUFRSKC1FTk9FTlQpOworCisJYnBwID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoY21kLT5w
aXhlbF9mb3JtYXQsIDApOworCXNpemUgPSAoaGVpZ2h0IC0gMSkgKiBjbWQtPnBpdGNoZXNbMF0g
KyB3aWR0aCAqIGJwcDsKKwlzaXplICs9IGNtZC0+b2Zmc2V0c1swXTsKKworCWlmIChnZW0tPnNp
emUgPCBzaXplKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gdW5yZWZlcmVuY2U7CisJfQor
CisJbXRrX2ZiID0gbXRrX2RybV9mcmFtZWJ1ZmZlcl9pbml0KGRldiwgY21kLCBnZW0pOworCWlm
IChJU19FUlIobXRrX2ZiKSkgeworCQlyZXQgPSBQVFJfRVJSKG10a19mYik7CisJCWdvdG8gdW5y
ZWZlcmVuY2U7CisJfQorCisJcmV0dXJuICZtdGtfZmItPmJhc2U7CisKK3VucmVmZXJlbmNlOgor
CWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGdlbSk7CisJcmV0dXJuIEVSUl9Q
VFIocmV0KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt
X2ZiLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMmFlMzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2
ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg
KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZl
cnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u
CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIE1US19EUk1fRkJfSAor
I2RlZmluZSBNVEtfRFJNX0ZCX0gKKworc3RydWN0IGRybV9nZW1fb2JqZWN0ICptdGtfZmJfZ2V0
X2dlbV9vYmooc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpOworaW50IG10a19mYl93YWl0KHN0
cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiKTsKK3N0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm10a19k
cm1fbW9kZV9mYl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgIHN0
cnVjdCBkcm1fZmlsZSAqZmlsZSwKKwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9m
Yl9jbWQyICpjbWQpOworCisjZW5kaWYgLyogTVRLX0RSTV9GQl9IICovCmRpZmYgLS1naXQgYS9k
cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9t
ZWRpYXRlay9tdGtfZHJtX2dlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmE3NzNiZmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr
X2RybV9nZW0uYwpAQCAtMCwwICsxLDI2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBN
ZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0g
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2Vt
Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgorCisjaW5jbHVkZSAibXRrX2RybV9kcnYu
aCIKKyNpbmNsdWRlICJtdGtfZHJtX2dlbS5oIgorCitzdGF0aWMgc3RydWN0IG10a19kcm1fZ2Vt
X29iaiAqbXRrX2RybV9nZW1faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkJdW5z
aWduZWQgbG9uZyBzaXplKQoreworCXN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19nZW1fb2Jq
OworCWludCByZXQ7CisKKwlzaXplID0gcm91bmRfdXAoc2l6ZSwgUEFHRV9TSVpFKTsKKworCW10
a19nZW1fb2JqID0ga3phbGxvYyhzaXplb2YoKm10a19nZW1fb2JqKSwgR0ZQX0tFUk5FTCk7CisJ
aWYgKCFtdGtfZ2VtX29iaikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlyZXQgPSBk
cm1fZ2VtX29iamVjdF9pbml0KGRldiwgJm10a19nZW1fb2JqLT5iYXNlLCBzaXplKTsKKwlpZiAo
cmV0IDwgMCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBpbml0aWFsaXplIGdlbSBvYmplY3Rc
biIpOworCQlrZnJlZShtdGtfZ2VtX29iaik7CisJCXJldHVybiBFUlJfUFRSKHJldCk7CisJfQor
CisJcmV0dXJuIG10a19nZW1fb2JqOworfQorCitzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtf
ZHJtX2dlbV9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgc2l6ZV90IHNp
emUsIGJvb2wgYWxsb2Nfa21hcCkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2ID0g
ZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtOworCXN0
cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCWludCByZXQ7CisKKwltdGtfZ2VtID0gbXRrX2Ry
bV9nZW1faW5pdChkZXYsIHNpemUpOworCWlmIChJU19FUlIobXRrX2dlbSkpCisJCXJldHVybiBF
UlJfQ0FTVChtdGtfZ2VtKTsKKworCW9iaiA9ICZtdGtfZ2VtLT5iYXNlOworCisJaW5pdF9kbWFf
YXR0cnMoJm10a19nZW0tPmRtYV9hdHRycyk7CisJZG1hX3NldF9hdHRyKERNQV9BVFRSX1dSSVRF
X0NPTUJJTkUsICZtdGtfZ2VtLT5kbWFfYXR0cnMpOworCisJaWYgKCFhbGxvY19rbWFwKQorCQlk
bWFfc2V0X2F0dHIoRE1BX0FUVFJfTk9fS0VSTkVMX01BUFBJTkcsICZtdGtfZ2VtLT5kbWFfYXR0
cnMpOworCisJbXRrX2dlbS0+Y29va2llID0gZG1hX2FsbG9jX2F0dHJzKHByaXYtPmRtYV9kZXYs
IG9iai0+c2l6ZSwKKwkJCQkJICAmbXRrX2dlbS0+ZG1hX2FkZHIsIEdGUF9LRVJORUwsCisJCQkJ
CSAgJm10a19nZW0tPmRtYV9hdHRycyk7CisJaWYgKCFtdGtfZ2VtLT5jb29raWUpIHsKKwkJRFJN
X0VSUk9SKCJmYWlsZWQgdG8gYWxsb2NhdGUgJXp4IGJ5dGUgZG1hIGJ1ZmZlciIsIG9iai0+c2l6
ZSk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2dlbV9mcmVlOworCX0KKworCWlmIChh
bGxvY19rbWFwKQorCQltdGtfZ2VtLT5rdmFkZHIgPSBtdGtfZ2VtLT5jb29raWU7CisKKwlEUk1f
REVCVUdfRFJJVkVSKCJjb29raWUgPSAlcCBkbWFfYWRkciA9ICVwYWQgc2l6ZSA9ICV6dVxuIiwK
KwkJCSBtdGtfZ2VtLT5jb29raWUsICZtdGtfZ2VtLT5kbWFfYWRkciwKKwkJCSBzaXplKTsKKwor
CXJldHVybiBtdGtfZ2VtOworCitlcnJfZ2VtX2ZyZWU6CisJZHJtX2dlbV9vYmplY3RfcmVsZWFz
ZShvYmopOworCWtmcmVlKG10a19nZW0pOworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CisKK3Zv
aWQgbXRrX2RybV9nZW1fZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7
CisJc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dlbSA9IHRvX210a19nZW1fb2JqKG9iaik7
CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdiA9IG9iai0+ZGV2LT5kZXZfcHJpdmF0ZTsK
KworCWlmIChtdGtfZ2VtLT5zZykKKwkJZHJtX3ByaW1lX2dlbV9kZXN0cm95KG9iaiwgbXRrX2dl
bS0+c2cpOworCWVsc2UKKwkJZG1hX2ZyZWVfYXR0cnMocHJpdi0+ZG1hX2Rldiwgb2JqLT5zaXpl
LCBtdGtfZ2VtLT5jb29raWUsCisJCQkgICAgICAgbXRrX2dlbS0+ZG1hX2FkZHIsICZtdGtfZ2Vt
LT5kbWFfYXR0cnMpOworCisJLyogcmVsZWFzZSBmaWxlIHBvaW50ZXIgdG8gZ2VtIG9iamVjdC4g
Ki8KKwlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKG9iaik7CisKKwlrZnJlZShtdGtfZ2VtKTsKK30K
KworaW50IG10a19kcm1fZ2VtX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2
LCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVf
ZHVtYiAqYXJncykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtOworCWludCBy
ZXQ7CisKKwlhcmdzLT5waXRjaCA9IERJVl9ST1VORF9VUChhcmdzLT53aWR0aCAqIGFyZ3MtPmJw
cCwgOCk7CisJYXJncy0+c2l6ZSA9IGFyZ3MtPnBpdGNoICogYXJncy0+aGVpZ2h0OworCisJbXRr
X2dlbSA9IG10a19kcm1fZ2VtX2NyZWF0ZShkZXYsIGFyZ3MtPnNpemUsIGZhbHNlKTsKKwlpZiAo
SVNfRVJSKG10a19nZW0pKQorCQlyZXR1cm4gUFRSX0VSUihtdGtfZ2VtKTsKKworCS8qCisJICog
YWxsb2NhdGUgYSBpZCBvZiBpZHIgdGFibGUgd2hlcmUgdGhlIG9iaiBpcyByZWdpc3RlcmVkCisJ
ICogYW5kIGhhbmRsZSBoYXMgdGhlIGlkIHdoYXQgdXNlciBjYW4gc2VlLgorCSAqLworCXJldCA9
IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlX3ByaXYsICZtdGtfZ2VtLT5iYXNlLCAmYXJncy0+
aGFuZGxlKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9oYW5kbGVfY3JlYXRlOworCisJLyogZHJv
cCByZWZlcmVuY2UgZnJvbSBhbGxvY2F0ZSAtIGhhbmRsZSBob2xkcyBpdCBub3cuICovCisJZHJt
X2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoJm10a19nZW0tPmJhc2UpOworCisJcmV0
dXJuIDA7CisKK2Vycl9oYW5kbGVfY3JlYXRlOgorCW10a19kcm1fZ2VtX2ZyZWVfb2JqZWN0KCZt
dGtfZ2VtLT5iYXNlKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgbXRrX2RybV9nZW1fZHVtYl9t
YXBfb2Zmc2V0KHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCXN0cnVjdCBkcm1fZGV2
aWNlICpkZXYsIHVpbnQzMl90IGhhbmRsZSwKKwkJCQl1aW50NjRfdCAqb2Zmc2V0KQoreworCXN0
cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCWludCByZXQ7CisKKwlvYmogPSBkcm1fZ2VtX29i
amVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIGhhbmRsZSk7CisJaWYgKCFvYmopIHsKKwkJRFJN
X0VSUk9SKCJmYWlsZWQgdG8gbG9va3VwIGdlbSBvYmplY3QuXG4iKTsKKwkJcmV0dXJuIC1FSU5W
QUw7CisJfQorCisJcmV0ID0gZHJtX2dlbV9jcmVhdGVfbW1hcF9vZmZzZXQob2JqKTsKKwlpZiAo
cmV0KQorCQlnb3RvIG91dDsKKworCSpvZmZzZXQgPSBkcm1fdm1hX25vZGVfb2Zmc2V0X2FkZHIo
Jm9iai0+dm1hX25vZGUpOworCURSTV9ERUJVR19LTVMoIm9mZnNldCA9IDB4JWxseFxuIiwgKm9m
ZnNldCk7CisKK291dDoKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChvYmop
OworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RybV9nZW1fb2JqZWN0X21tYXAo
c3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCQkJICAgc3RydWN0IHZtX2FyZWFfc3RydWN0
ICp2bWEpCisKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19nZW0g
PSB0b19tdGtfZ2VtX29iaihvYmopOworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXYgPSBv
YmotPmRldi0+ZGV2X3ByaXZhdGU7CisKKwkvKgorCSAqIGRtYV9hbGxvY19hdHRycygpIGFsbG9j
YXRlZCBhIHN0cnVjdCBwYWdlIHRhYmxlIGZvciBtdGtfZ2VtLCBzbyBjbGVhcgorCSAqIFZNX1BG
Tk1BUCBmbGFnIHRoYXQgd2FzIHNldCBieSBkcm1fZ2VtX21tYXBfb2JqKCkvZHJtX2dlbV9tbWFw
KCkuCisJICovCisJdm1hLT52bV9mbGFncyAmPSB+Vk1fUEZOTUFQOworCXZtYS0+dm1fcGdvZmYg
PSAwOworCisJcmV0ID0gZG1hX21tYXBfYXR0cnMocHJpdi0+ZG1hX2Rldiwgdm1hLCBtdGtfZ2Vt
LT5jb29raWUsCisJCQkgICAgIG10a19nZW0tPmRtYV9hZGRyLCBvYmotPnNpemUsICZtdGtfZ2Vt
LT5kbWFfYXR0cnMpOworCWlmIChyZXQpCisJCWRybV9nZW1fdm1fY2xvc2Uodm1hKTsKKworCXJl
dHVybiByZXQ7Cit9CisKK2ludCBtdGtfZHJtX2dlbV9tbWFwX2J1ZihzdHJ1Y3QgZHJtX2dlbV9v
YmplY3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJaW50IHJldDsKKwor
CXJldCA9IGRybV9nZW1fbW1hcF9vYmoob2JqLCBvYmotPnNpemUsIHZtYSk7CisJaWYgKHJldCkK
KwkJcmV0dXJuIHJldDsKKworCXJldHVybiBtdGtfZHJtX2dlbV9vYmplY3RfbW1hcChvYmosIHZt
YSk7Cit9CisKK2ludCBtdGtfZHJtX2dlbV9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qg
dm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlp
bnQgcmV0OworCisJcmV0ID0gZHJtX2dlbV9tbWFwKGZpbHAsIHZtYSk7CisJaWYgKHJldCkKKwkJ
cmV0dXJuIHJldDsKKworCW9iaiA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOworCisJcmV0dXJuIG10
a19kcm1fZ2VtX29iamVjdF9tbWFwKG9iaiwgdm1hKTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEg
c2dfdGFibGUgZm9yIHRoaXMgR0VNIG9iamVjdC4KKyAqIE5vdGU6IEJvdGggdGhlIHRhYmxlJ3Mg
Y29udGVudHMsIGFuZCB0aGUgc2dfdGFibGUgaXRzZWxmIG11c3QgYmUgZnJlZWQgYnkKKyAqICAg
ICAgIHRoZSBjYWxsZXIuCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbmV3bHkgYWxsb2Nh
dGVkIHNnX3RhYmxlLCBvciBhbiBFUlJfUFRSKCkgZXJyb3IuCisgKi8KK3N0cnVjdCBzZ190YWJs
ZSAqbXRrX2dlbV9wcmltZV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmop
Cit7CisJc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dlbSA9IHRvX210a19nZW1fb2JqKG9i
aik7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdiA9IG9iai0+ZGV2LT5kZXZfcHJpdmF0
ZTsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnNndDsKKwlpbnQgcmV0OworCisJc2d0ID0ga3phbGxvYyhz
aXplb2YoKnNndCksIEdGUF9LRVJORUwpOworCWlmICghc2d0KQorCQlyZXR1cm4gRVJSX1BUUigt
RU5PTUVNKTsKKworCXJldCA9IGRtYV9nZXRfc2d0YWJsZV9hdHRycyhwcml2LT5kbWFfZGV2LCBz
Z3QsIG10a19nZW0tPmNvb2tpZSwKKwkJCQkgICAgbXRrX2dlbS0+ZG1hX2FkZHIsIG9iai0+c2l6
ZSwKKwkJCQkgICAgJm10a19nZW0tPmRtYV9hdHRycyk7CisJaWYgKHJldCkgeworCQlEUk1fRVJS
T1IoImZhaWxlZCB0byBhbGxvY2F0ZSBzZ3QsICVkXG4iLCByZXQpOworCQlrZnJlZShzZ3QpOwor
CQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCXJldHVybiBzZ3Q7Cit9CisKK3N0cnVjdCBk
cm1fZ2VtX29iamVjdCAqbXRrX2dlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRybV9k
ZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCwgc3RydWN0
IHNnX3RhYmxlICpzZykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZ2VtOworCWlu
dCByZXQ7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzOworCXVuc2lnbmVkIGludCBpOworCWRtYV9h
ZGRyX3QgZXhwZWN0ZWQ7CisKKwltdGtfZ2VtID0gbXRrX2RybV9nZW1faW5pdChkZXYsIGF0dGFj
aC0+ZG1hYnVmLT5zaXplKTsKKworCWlmIChJU19FUlIobXRrX2dlbSkpCisJCXJldHVybiBFUlJf
UFRSKFBUUl9FUlIobXRrX2dlbSkpOworCisJZXhwZWN0ZWQgPSBzZ19kbWFfYWRkcmVzcyhzZy0+
c2dsKTsKKwlmb3JfZWFjaF9zZyhzZy0+c2dsLCBzLCBzZy0+bmVudHMsIGkpIHsKKwkJaWYgKHNn
X2RtYV9hZGRyZXNzKHMpICE9IGV4cGVjdGVkKSB7CisJCQlEUk1fRVJST1IoInNnX3RhYmxlIGlz
IG5vdCBjb250aWd1b3VzIik7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBlcnJfZ2VtX2Zy
ZWU7CisJCX0KKwkJZXhwZWN0ZWQgPSBzZ19kbWFfYWRkcmVzcyhzKSArIHNnX2RtYV9sZW4ocyk7
CisJfQorCisJbXRrX2dlbS0+ZG1hX2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZy0+c2dsKTsKKwlt
dGtfZ2VtLT5zZyA9IHNnOworCisJcmV0dXJuICZtdGtfZ2VtLT5iYXNlOworCitlcnJfZ2VtX2Zy
ZWU6CisJa2ZyZWUobXRrX2dlbSk7CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KZGlmZiAtLWdp
dCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oIGIvZHJpdmVycy9ncHUv
ZHJtL21lZGlhdGVrL210a19kcm1fZ2VtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uM2EyYTU2MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl
ay9tdGtfZHJtX2dlbS5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIw
MTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9n
cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9NVEtfRFJNX0dFTV9IXworI2RlZmluZSBfTVRLX0RS
TV9HRU1fSF8KKworI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+CisKKy8qCisgKiBtdGsgZHJtIGJ1
ZmZlciBzdHJ1Y3R1cmUuCisgKgorICogQGJhc2U6IGEgZ2VtIG9iamVjdC4KKyAqCS0gYSBuZXcg
aGFuZGxlIHRvIHRoaXMgZ2VtIG9iamVjdCB3b3VsZCBiZSBjcmVhdGVkCisgKglieSBkcm1fZ2Vt
X2hhbmRsZV9jcmVhdGUoKS4KKyAqIEBjb29raWU6IHRoZSByZXR1cm4gdmFsdWUgb2YgZG1hX2Fs
bG9jX2F0dHJzKCksIGtlZXAgaXQgZm9yIGRtYV9mcmVlX2F0dHJzKCkKKyAqIEBrdmFkZHI6IGtl
cm5lbCB2aXJ0dWFsIGFkZHJlc3Mgb2YgZ2VtIGJ1ZmZlci4KKyAqIEBkbWFfYWRkcjogZG1hIGFk
ZHJlc3Mgb2YgZ2VtIGJ1ZmZlci4KKyAqIEBkbWFfYXR0cnM6IGRtYSBhdHRyaWJ1dGVzIG9mIGdl
bSBidWZmZXIuCisgKgorICogUC5TLiB0aGlzIG9iamVjdCB3b3VsZCBiZSB0cmFuc2ZlcnJlZCB0
byB1c2VyIGFzIGttc19iby5oYW5kbGUgc28KKyAqCXVzZXIgY2FuIGFjY2VzcyB0aGUgYnVmZmVy
IHRocm91Z2gga21zX2JvLmhhbmRsZS4KKyAqLworc3RydWN0IG10a19kcm1fZ2VtX29iaiB7CisJ
c3RydWN0IGRybV9nZW1fb2JqZWN0CWJhc2U7CisJdm9pZAkJCSpjb29raWU7CisJdm9pZAkJCSpr
dmFkZHI7CisJZG1hX2FkZHJfdAkJZG1hX2FkZHI7CisJc3RydWN0IGRtYV9hdHRycwlkbWFfYXR0
cnM7CisJc3RydWN0IHNnX3RhYmxlCQkqc2c7Cit9OworCisjZGVmaW5lIHRvX210a19nZW1fb2Jq
KHgpCWNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqLCBiYXNlKQorCit2b2lk
IG10a19kcm1fZ2VtX2ZyZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtKTsKK3N0
cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19kcm1fZ2VtX2NyZWF0ZShzdHJ1Y3QgZHJtX2Rldmlj
ZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCQkJICAgYm9vbCBhbGxvY19rbWFwKTsKK2ludCBtdGtf
ZHJtX2dlbV9kdW1iX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwgc3RydWN0IGRy
bV9kZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgKmFyZ3Mp
OworaW50IG10a19kcm1fZ2VtX2R1bWJfbWFwX29mZnNldChzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVf
cHJpdiwKKwkJCQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50MzJfdCBoYW5kbGUsCisJCQkJ
dWludDY0X3QgKm9mZnNldCk7CitpbnQgbXRrX2RybV9nZW1fbW1hcChzdHJ1Y3QgZmlsZSAqZmls
cCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworaW50IG10a19kcm1fZ2VtX21tYXBfYnVm
KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAorCQkJIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq
dm1hKTsKK3N0cnVjdCBzZ190YWJsZSAqbXRrX2dlbV9wcmltZV9nZXRfc2dfdGFibGUoc3RydWN0
IGRybV9nZW1fb2JqZWN0ICpvYmopOworc3RydWN0IGRybV9nZW1fb2JqZWN0ICptdGtfZ2VtX3By
aW1lX2ltcG9ydF9zZ190YWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJc3RydWN0IGRt
YV9idWZfYXR0YWNobWVudCAqYXR0YWNoLCBzdHJ1Y3Qgc2dfdGFibGUgKnNnKTsKKworI2VuZGlm
CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5jIGIv
ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuYwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5jODk4Nzg4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9n
cHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuYwpAQCAtMCwwICsxLDI0MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IENLIEh1IDxjay5o
dUBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dy
YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1f
YXRvbWljLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8
ZHJtL2RybV9wbGFuZV9oZWxwZXIuaD4KKworI2luY2x1ZGUgIm10a19kcm1fY3J0Yy5oIgorI2lu
Y2x1ZGUgIm10a19kcm1fZGRwX2NvbXAuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2Rydi5oIgorI2lu
Y2x1ZGUgIm10a19kcm1fZmIuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2dlbS5oIgorI2luY2x1ZGUg
Im10a19kcm1fcGxhbmUuaCIKKworc3RhdGljIGNvbnN0IHUzMiBmb3JtYXRzW10gPSB7CisJRFJN
X0ZPUk1BVF9YUkdCODg4OCwKKwlEUk1fRk9STUFUX0FSR0I4ODg4LAorCURSTV9GT1JNQVRfUkdC
NTY1LAorfTsKKworc3RhdGljIHZvaWQgbXRrX3BsYW5lX2VuYWJsZShzdHJ1Y3QgbXRrX2RybV9w
bGFuZSAqbXRrX3BsYW5lLCBib29sIGVuYWJsZSwKKwkJCSAgICAgZG1hX2FkZHJfdCBhZGRyLCBz
dHJ1Y3QgZHJtX3JlY3QgKmRlc3QpCit7CisJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUgPSAmbXRr
X3BsYW5lLT5iYXNlOworCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnN0YXRlID0gdG9fbXRrX3Bs
YW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7CisJdW5zaWduZWQgaW50IHBpdGNoLCBmb3JtYXQ7CisJ
aW50IHgsIHk7CisKKwlpZiAoV0FSTl9PTighcGxhbmUtPnN0YXRlIHx8IChlbmFibGUgJiYgIXBs
YW5lLT5zdGF0ZS0+ZmIpKSkKKwkJcmV0dXJuOworCisJaWYgKHBsYW5lLT5zdGF0ZS0+ZmIpIHsK
KwkJcGl0Y2ggPSBwbGFuZS0+c3RhdGUtPmZiLT5waXRjaGVzWzBdOworCQlmb3JtYXQgPSBwbGFu
ZS0+c3RhdGUtPmZiLT5waXhlbF9mb3JtYXQ7CisJfSBlbHNlIHsKKwkJcGl0Y2ggPSAwOworCQlm
b3JtYXQgPSBEUk1fRk9STUFUX1JHQkE4ODg4OworCX0KKworCXggPSBwbGFuZS0+c3RhdGUtPmNy
dGNfeDsKKwl5ID0gcGxhbmUtPnN0YXRlLT5jcnRjX3k7CisKKwlpZiAoeCA8IDApIHsKKwkJYWRk
ciAtPSB4ICogNDsKKwkJeCA9IDA7CisJfQorCisJaWYgKHkgPCAwKSB7CisJCWFkZHIgLT0geSAq
IHBpdGNoOworCQl5ID0gMDsKKwl9CisKKwlzdGF0ZS0+cGVuZGluZy5lbmFibGUgPSBlbmFibGU7
CisJc3RhdGUtPnBlbmRpbmcucGl0Y2ggPSBwaXRjaDsKKwlzdGF0ZS0+cGVuZGluZy5mb3JtYXQg
PSBmb3JtYXQ7CisJc3RhdGUtPnBlbmRpbmcuYWRkciA9IGFkZHI7CisJc3RhdGUtPnBlbmRpbmcu
eCA9IHg7CisJc3RhdGUtPnBlbmRpbmcueSA9IHk7CisJc3RhdGUtPnBlbmRpbmcud2lkdGggPSBk
ZXN0LT54MiAtIGRlc3QtPngxOworCXN0YXRlLT5wZW5kaW5nLmhlaWdodCA9IGRlc3QtPnkyIC0g
ZGVzdC0+eTE7CisJd21iKCk7IC8qIE1ha2Ugc3VyZSB0aGUgYWJvdmUgcGFyYW1ldGVycyBhcmUg
c2V0IGJlZm9yZSB1cGRhdGUgKi8KKwlzdGF0ZS0+cGVuZGluZy5kaXJ0eSA9IHRydWU7Cit9CisK
K3N0YXRpYyB2b2lkIG10a19wbGFuZV9yZXNldChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKK3sK
KwlzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZTsKKworCWlmIChwbGFuZS0+c3RhdGUpIHsK
KwkJaWYgKHBsYW5lLT5zdGF0ZS0+ZmIpCisJCQlkcm1fZnJhbWVidWZmZXJfdW5yZWZlcmVuY2Uo
cGxhbmUtPnN0YXRlLT5mYik7CisKKwkJc3RhdGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUt
PnN0YXRlKTsKKwkJbWVtc2V0KHN0YXRlLCAwLCBzaXplb2YoKnN0YXRlKSk7CisJfSBlbHNlIHsK
KwkJc3RhdGUgPSBremFsbG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFz
dGF0ZSkKKwkJCXJldHVybjsKKwkJcGxhbmUtPnN0YXRlID0gJnN0YXRlLT5iYXNlOworCX0KKwor
CXN0YXRlLT5iYXNlLnBsYW5lID0gcGxhbmU7CisJc3RhdGUtPnBlbmRpbmcuZm9ybWF0ID0gRFJN
X0ZPUk1BVF9SR0I1NjU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICptdGtf
cGxhbmVfZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQoreworCXN0cnVj
dCBtdGtfcGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShwbGFuZS0+
c3RhdGUpOworCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnN0YXRlOworCisJc3RhdGUgPSBremFs
bG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0YXRlKQorCQlyZXR1cm4g
TlVMTDsKKworCV9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRlKHBsYW5l
LCAmc3RhdGUtPmJhc2UpOworCisJV0FSTl9PTihzdGF0ZS0+YmFzZS5wbGFuZSAhPSBwbGFuZSk7
CisKKwlzdGF0ZS0+cGVuZGluZyA9IG9sZF9zdGF0ZS0+cGVuZGluZzsKKworCXJldHVybiAmc3Rh
dGUtPmJhc2U7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcm1fcGxhbmVfZGVzdHJveV9zdGF0ZShz
dHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3Rh
dGUpCit7CisJX19kcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kZXN0cm95X3N0YXRlKHBsYW5lLCBz
dGF0ZSk7CisJa2ZyZWUodG9fbXRrX3BsYW5lX3N0YXRlKHN0YXRlKSk7Cit9CisKK3N0YXRpYyBj
b25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIG10a19wbGFuZV9mdW5jcyA9IHsKKwkudXBkYXRl
X3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfdXBkYXRlX3BsYW5lLAorCS5kaXNhYmxlX3BsYW5l
ID0gZHJtX2F0b21pY19oZWxwZXJfZGlzYWJsZV9wbGFuZSwKKwkuZGVzdHJveSA9IGRybV9wbGFu
ZV9jbGVhbnVwLAorCS5yZXNldCA9IG10a19wbGFuZV9yZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0
ZV9zdGF0ZSA9IG10a19wbGFuZV9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0
YXRlID0gbXRrX2RybV9wbGFuZV9kZXN0cm95X3N0YXRlLAorfTsKKworc3RhdGljIGludCBtdGtf
cGxhbmVfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJCSAgc3RydWN0
IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIg
PSBzdGF0ZS0+ZmI7CisJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOworCWJvb2wg
dmlzaWJsZTsKKwlzdHJ1Y3QgZHJtX3JlY3QgZGVzdCA9IHsKKwkJLngxID0gc3RhdGUtPmNydGNf
eCwKKwkJLnkxID0gc3RhdGUtPmNydGNfeSwKKwkJLngyID0gc3RhdGUtPmNydGNfeCArIHN0YXRl
LT5jcnRjX3csCisJCS55MiA9IHN0YXRlLT5jcnRjX3kgKyBzdGF0ZS0+Y3J0Y19oLAorCX07CisJ
c3RydWN0IGRybV9yZWN0IHNyYyA9IHsKKwkJLyogMTYuMTYgZml4ZWQgcG9pbnQgKi8KKwkJLngx
ID0gc3RhdGUtPnNyY194LAorCQkueTEgPSBzdGF0ZS0+c3JjX3ksCisJCS54MiA9IHN0YXRlLT5z
cmNfeCArIHN0YXRlLT5zcmNfdywKKwkJLnkyID0gc3RhdGUtPnNyY195ICsgc3RhdGUtPnNyY19o
LAorCX07CisJc3RydWN0IGRybV9yZWN0IGNsaXAgPSB7IDAsIH07CisKKwlpZiAoIWZiKQorCQly
ZXR1cm4gMDsKKworCWlmICghbXRrX2ZiX2dldF9nZW1fb2JqKGZiKSkgeworCQlEUk1fREVCVUdf
S01TKCJidWZmZXIgaXMgbnVsbFxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWlmICgh
c3RhdGUtPmNydGMpCisJCXJldHVybiAwOworCisJY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0
X2NydGNfc3RhdGUoc3RhdGUtPnN0YXRlLCBzdGF0ZS0+Y3J0Yyk7CisJaWYgKElTX0VSUihjcnRj
X3N0YXRlKSkKKwkJcmV0dXJuIFBUUl9FUlIoY3J0Y19zdGF0ZSk7CisKKwljbGlwLngyID0gY3J0
Y19zdGF0ZS0+bW9kZS5oZGlzcGxheTsKKwljbGlwLnkyID0gY3J0Y19zdGF0ZS0+bW9kZS52ZGlz
cGxheTsKKworCXJldHVybiBkcm1fcGxhbmVfaGVscGVyX2NoZWNrX3VwZGF0ZShwbGFuZSwgc3Rh
dGUtPmNydGMsIGZiLAorCQkJCQkgICAgICZzcmMsICZkZXN0LCAmY2xpcCwKKwkJCQkJICAgICBE
Uk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkcsCisJCQkJCSAgICAgRFJNX1BMQU5FX0hFTFBFUl9O
T19TQ0FMSU5HLAorCQkJCQkgICAgIHRydWUsIHRydWUsICZ2aXNpYmxlKTsKK30KKworc3RhdGlj
IHZvaWQgbXRrX3BsYW5lX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJ
CQkJICAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSkKK3sKKwlzdHJ1Y3QgbXRr
X3BsYW5lX3N0YXRlICpzdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpOwor
CXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IHN0YXRlLT5iYXNlLmNydGM7CisJc3RydWN0IGRybV9n
ZW1fb2JqZWN0ICpnZW07CisJc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dlbTsKKwlzdHJ1
Y3QgbXRrX2RybV9wbGFuZSAqbXRrX3BsYW5lID0gdG9fbXRrX3BsYW5lKHBsYW5lKTsKKwlzdHJ1
Y3QgZHJtX3JlY3QgZGVzdCA9IHsKKwkJLngxID0gc3RhdGUtPmJhc2UuY3J0Y194LAorCQkueTEg
PSBzdGF0ZS0+YmFzZS5jcnRjX3ksCisJCS54MiA9IHN0YXRlLT5iYXNlLmNydGNfeCArIHN0YXRl
LT5iYXNlLmNydGNfdywKKwkJLnkyID0gc3RhdGUtPmJhc2UuY3J0Y195ICsgc3RhdGUtPmJhc2Uu
Y3J0Y19oLAorCX07CisJc3RydWN0IGRybV9yZWN0IGNsaXAgPSB7IDAsIH07CisKKwlpZiAoIWNy
dGMpCisJCXJldHVybjsKKworCWNsaXAueDIgPSBzdGF0ZS0+YmFzZS5jcnRjLT5zdGF0ZS0+bW9k
ZS5oZGlzcGxheTsKKwljbGlwLnkyID0gc3RhdGUtPmJhc2UuY3J0Yy0+c3RhdGUtPm1vZGUudmRp
c3BsYXk7CisJZHJtX3JlY3RfaW50ZXJzZWN0KCZkZXN0LCAmY2xpcCk7CisKKwlnZW0gPSBtdGtf
ZmJfZ2V0X2dlbV9vYmooc3RhdGUtPmJhc2UuZmIpOworCW10a19nZW0gPSB0b19tdGtfZ2VtX29i
aihnZW0pOworCW10a19wbGFuZV9lbmFibGUobXRrX3BsYW5lLCB0cnVlLCBtdGtfZ2VtLT5kbWFf
YWRkciwgJmRlc3QpOworfQorCitzdGF0aWMgdm9pZCBtdGtfcGxhbmVfYXRvbWljX2Rpc2FibGUo
c3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRl
ICpvbGRfc3RhdGUpCit7CisJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqc3RhdGUgPSB0b19tdGtf
cGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKworCXN0YXRlLT5wZW5kaW5nLmVuYWJsZSA9IGZh
bHNlOworCXdtYigpOyAvKiBNYWtlIHN1cmUgdGhlIGFib3ZlIHBhcmFtZXRlciBpcyBzZXQgYmVm
b3JlIHVwZGF0ZSAqLworCXN0YXRlLT5wZW5kaW5nLmRpcnR5ID0gdHJ1ZTsKK30KKworc3RhdGlj
IGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfaGVscGVyX2Z1bmNzIG10a19wbGFuZV9oZWxwZXJfZnVu
Y3MgPSB7CisJLmF0b21pY19jaGVjayA9IG10a19wbGFuZV9hdG9taWNfY2hlY2ssCisJLmF0b21p
Y191cGRhdGUgPSBtdGtfcGxhbmVfYXRvbWljX3VwZGF0ZSwKKwkuYXRvbWljX2Rpc2FibGUgPSBt
dGtfcGxhbmVfYXRvbWljX2Rpc2FibGUsCit9OworCitpbnQgbXRrX3BsYW5lX2luaXQoc3RydWN0
IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IG10a19kcm1fcGxhbmUgKm10a19wbGFuZSwKKwkJICAg
dW5zaWduZWQgbG9uZyBwb3NzaWJsZV9jcnRjcywgZW51bSBkcm1fcGxhbmVfdHlwZSB0eXBlLAor
CQkgICB1bnNpZ25lZCBpbnQgenBvcykKK3sKKwlpbnQgZXJyOworCisJZXJyID0gZHJtX3VuaXZl
cnNhbF9wbGFuZV9pbml0KGRldiwgJm10a19wbGFuZS0+YmFzZSwgcG9zc2libGVfY3J0Y3MsCisJ
CQkJICAgICAgICZtdGtfcGxhbmVfZnVuY3MsIGZvcm1hdHMsCisJCQkJICAgICAgIEFSUkFZX1NJ
WkUoZm9ybWF0cyksIHR5cGUsIE5VTEwpOworCWlmIChlcnIpIHsKKwkJRFJNX0VSUk9SKCJmYWls
ZWQgdG8gaW5pdGlhbGl6ZSBwbGFuZVxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJZHJtX3Bs
YW5lX2hlbHBlcl9hZGQoJm10a19wbGFuZS0+YmFzZSwgJm10a19wbGFuZV9oZWxwZXJfZnVuY3Mp
OworCW10a19wbGFuZS0+aWR4ID0genBvczsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEv
ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuaCBiL2RyaXZlcnMvZ3B1L2Ry
bS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNzJhN2IzZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl
ay9tdGtfZHJtX3BsYW5lLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg
MjAxNSBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IENLIEh1IDxjay5odUBtZWRpYXRlay5jb20+
CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
CisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisK
KyNpZm5kZWYgX01US19EUk1fUExBTkVfSF8KKyNkZWZpbmUgX01US19EUk1fUExBTkVfSF8KKwor
I2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0
cnVjdCBtdGtfZHJtX3BsYW5lIHsKKwlzdHJ1Y3QgZHJtX3BsYW5lCQliYXNlOworCXVuc2lnbmVk
IGludAkJCWlkeDsKK307CisKK3N0cnVjdCBtdGtfcGxhbmVfcGVuZGluZ19zdGF0ZSB7CisJYm9v
bAkJCQljb25maWc7CisJYm9vbAkJCQllbmFibGU7CisJZG1hX2FkZHJfdAkJCWFkZHI7CisJdW5z
aWduZWQgaW50CQkJcGl0Y2g7CisJdW5zaWduZWQgaW50CQkJZm9ybWF0OworCXVuc2lnbmVkIGlu
dAkJCXg7CisJdW5zaWduZWQgaW50CQkJeTsKKwl1bnNpZ25lZCBpbnQJCQl3aWR0aDsKKwl1bnNp
Z25lZCBpbnQJCQloZWlnaHQ7CisJYm9vbAkJCQlkaXJ0eTsKK307CisKK3N0cnVjdCBtdGtfcGxh
bmVfc3RhdGUgeworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUJCWJhc2U7CisJc3RydWN0IG10a19w
bGFuZV9wZW5kaW5nX3N0YXRlCXBlbmRpbmc7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBt
dGtfZHJtX3BsYW5lICp0b19tdGtfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCit7CisJ
cmV0dXJuIGNvbnRhaW5lcl9vZihwbGFuZSwgc3RydWN0IG10a19kcm1fcGxhbmUsIGJhc2UpOwor
fQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKgordG9fbXRrX3BsYW5l
X3N0YXRlKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQoreworCXJldHVybiBjb250YWlu
ZXJfb2Yoc3RhdGUsIHN0cnVjdCBtdGtfcGxhbmVfc3RhdGUsIGJhc2UpOworfQorCitpbnQgbXRr
X3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IG10a19kcm1fcGxhbmUg
Km10a19wbGFuZSwKKwkJICAgdW5zaWduZWQgbG9uZyBwb3NzaWJsZV9jcnRjcywgZW51bSBkcm1f
cGxhbmVfdHlwZSB0eXBlLAorCQkgICB1bnNpZ25lZCBpbnQgenBvcyk7CisKKyNlbmRpZgotLSAK
Mi43LjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRy
aS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRw
czovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=