From mboxrd@z Thu Jan 1 00:00:00 1970
From: Philipp Zabel
Subject: [PATCH v15 2/6] drm/mediatek: Add HDMI support
Date: Wed, 20 Apr 2016 10:49:26 +0200
Message-ID: <1461142170-23946-3-git-send-email-p.zabel@pengutronix.de>
References: <1461142170-23946-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: <1461142170-23946-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 , 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
RnJvbTogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+CgpUaGlzIHBhdGNoIGFkZHMgZHJp
dmVycyBmb3IgdGhlIEhETUkgYnJpZGdlIGNvbm5lY3RlZCB0byB0aGUgRFBJMApkaXNwbGF5IHN1
YnN5c3RlbSBmdW5jdGlvbiBibG9jaywgZm9yIHRoZSBIRE1JIEREQyBibG9jaywgYW5kIGZvcgp0
aGUgSERNSSBQSFkgdG8gc3VwcG9ydCBIRE1JIG91dHB1dC4KVGhpcyBpbmNsdWRlcyBhbiBpbnRl
cmZhY2UgdG8gdGhlIGdlbmVyaWMgaGRtaS1jb2RlYyBkcml2ZXIgdG8gc3RhcnQKb3Igc3RvcCBh
dWRpbyBwbGF5YmFjayBhbmQgdG8gcmV0cmlldmUgRUxEIChFRElEIGxpa2UgZGF0YSkgdG8gbGlt
aXQgdGhlCnN1cHBvcnRlZCBhdWRpbyBmb3JtYXRzIHRvIHRoZSBIRE1JIHNpbmsgY2FwYWJpbGl0
aWVzLgoKU2lnbmVkLW9mZi1ieTogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+ClNpZ25l
ZC1vZmYtYnk6IFBoaWxpcHAgWmFiZWwgPHAuemFiZWxAcGVuZ3V0cm9uaXguZGU+Ci0tLQpDaGFu
Z2VzIHNpbmNlIHYxNDoKIC0gU2VsZWN0IEhETUlfQ09ERUMKIC0gQWRkIGhkbWktY29kZWMgaW50
ZXJmYWNlCiAtIFNpbXBsaWZ5IG10a19oZG1pX2h3X2F1ZF9zZXRfY2hhbm5lbF9zdGF0dXMKLS0t
CiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZyAgICAgICAgICAgICAgIHwgICAgOCAr
CiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUgICAgICAgICAgICAgIHwgICAgNyAr
CiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2NlYy5jICAgICAgICAgICAgIHwgIDI2NSAr
KysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2NlYy5oICAgICAgICAgICAgIHwgICAy
NiArCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWkuYyAgICAgICAgICAgIHwgMTgy
MyArKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf
aGRtaS5oICAgICAgICAgICAgfCAgIDIzICsKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf
aGRtaV9kZGMuYyAgICAgICAgfCAgMzU4ICsrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv
bXRrX2hkbWlfcmVncy5oICAgICAgIHwgIDIzNyArKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRl
ay9tdGtfbXQ4MTczX2hkbWlfcGh5LmMgfCAgNTE1ICsrKysrKysKIDkgZmlsZXMgY2hhbmdlZCwg
MzI2MiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21l
ZGlhdGVrL210a19jZWMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRp
YXRlay9tdGtfY2VjLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0
ZWsvbXRrX2hkbWkuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRl
ay9tdGtfaGRtaS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr
L210a19oZG1pX2RkYy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlh
dGVrL210a19oZG1pX3JlZ3MuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9t
ZWRpYXRlay9tdGtfbXQ4MTczX2hkbWlfcGh5LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k
cm0vbWVkaWF0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCmlu
ZGV4IDBjNDlhOTQuLjc0ZjFjYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl
ay9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCkBAIC0xMiwz
ICsxMiwxMSBAQCBjb25maWcgRFJNX01FRElBVEVLCiAJICBUaGUgbW9kdWxlIHdpbGwgYmUgY2Fs
bGVkIG1lZGlhdGVrLWRybQogCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMga2VybmVsIG1vZGUgc2V0
dGluZyBhbmQKIAkgIGJ1ZmZlciBtYW5hZ2VtZW50IHRvIHVzZXJzcGFjZS4KKworY29uZmlnIERS
TV9NRURJQVRFS19IRE1JCisJdHJpc3RhdGUgIkRSTSBIRE1JIFN1cHBvcnQgZm9yIE1lZGlhdGVr
IFNvQ3MiCisJZGVwZW5kcyBvbiBEUk1fTUVESUFURUsKKwlzZWxlY3QgU05EX1NPQ19IRE1JX0NP
REVDIGlmIFNORF9TT0MKKwlzZWxlY3QgR0VORVJJQ19QSFkKKwloZWxwCisJICBEUk0vS01TIEhE
TUkgZHJpdmVyIGZvciBNZWRpYXRlayBTb0NzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKaW5k
ZXggNWZjZjU4ZS4uYmYyZTViZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr
L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQpAQCAtMTIs
MyArMTIsMTAgQEAgbWVkaWF0ZWstZHJtLXkgOj0gbXRrX2Rpc3Bfb3ZsLm8gXAogCQkgIG10a19k
cGkubwogCiBvYmotJChDT05GSUdfRFJNX01FRElBVEVLKSArPSBtZWRpYXRlay1kcm0ubworCitt
ZWRpYXRlay1kcm0taGRtaS1vYmpzIDo9IG10a19jZWMubyBcCisJCQkgIG10a19oZG1pLm8gXAor
CQkJICBtdGtfaGRtaV9kZGMubyBcCisJCQkgIG10a19tdDgxNzNfaGRtaV9waHkubworCitvYmot
JChDT05GSUdfRFJNX01FRElBVEVLX0hETUkpICs9IG1lZGlhdGVrLWRybS1oZG1pLm8KZGlmZiAt
LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfY2VjLmMgYi9kcml2ZXJzL2dwdS9k
cm0vbWVkaWF0ZWsvbXRrX2NlYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjdhM2ViOGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr
X2NlYy5jCkBAIC0wLDAgKzEsMjY1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0IE1lZGlh
VGVrIEluYy4KKyAqIEF1dGhvcjogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+CisgKgor
ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVk
ZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51
eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3Bs
YXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSAibXRrX2NlYy5oIgorCisjZGVmaW5lIFRSX0NP
TkZJRwkJMHgwMAorI2RlZmluZSBDTEVBUl9DRUNfSVJRCQkJQklUKDE1KQorCisjZGVmaW5lIENF
Q19DS0dFTgkJMHgwNAorI2RlZmluZSBDRUNfMzJLX1BETgkJCUJJVCgxOSkKKyNkZWZpbmUgUERO
CQkJCUJJVCgxNikKKworI2RlZmluZSBSWF9FVkVOVAkJMHg1NAorI2RlZmluZSBIRE1JX1BPUkQJ
CQlCSVQoMjUpCisjZGVmaW5lIEhETUlfSFRQTEcJCQlCSVQoMjQpCisjZGVmaW5lIEhETUlfUE9S
RF9JTlRfRU4JCUJJVCg5KQorI2RlZmluZSBIRE1JX0hUUExHX0lOVF9FTgkJQklUKDgpCisKKyNk
ZWZpbmUgUlhfR0VOX1dECQkweDU4CisjZGVmaW5lIEhETUlfUE9SRF9JTlRfMzJLX1NUQVRVUwlC
SVQoMjYpCisjZGVmaW5lIFJYX1JJU0NfSU5UXzMyS19TVEFUVVMJCUJJVCgyNSkKKyNkZWZpbmUg
SERNSV9IVFBMR19JTlRfMzJLX1NUQVRVUwlCSVQoMjQpCisjZGVmaW5lIEhETUlfUE9SRF9JTlRf
MzJLX0NMUgkJQklUKDE4KQorI2RlZmluZSBSWF9JTlRfMzJLX0NMUgkJCUJJVCgxNykKKyNkZWZp
bmUgSERNSV9IVFBMR19JTlRfMzJLX0NMUgkJQklUKDE2KQorI2RlZmluZSBIRE1JX1BPUkRfSU5U
XzMyS19TVEFfTUFTSwlCSVQoMTApCisjZGVmaW5lIFJYX1JJU0NfSU5UXzMyS19TVEFfTUFTSwlC
SVQoOSkKKyNkZWZpbmUgSERNSV9IVFBMR19JTlRfMzJLX1NUQV9NQVNLCUJJVCg4KQorI2RlZmlu
ZSBIRE1JX1BPUkRfSU5UXzMyS19FTgkJQklUKDIpCisjZGVmaW5lIFJYX0lOVF8zMktfRU4JCQlC
SVQoMSkKKyNkZWZpbmUgSERNSV9IVFBMR19JTlRfMzJLX0VOCQlCSVQoMCkKKworI2RlZmluZSBO
T1JNQUxfSU5UX0NUUkwJCTB4NUMKKyNkZWZpbmUgSERNSV9IVFBMR19JTlRfU1RBCQlCSVQoMCkK
KyNkZWZpbmUgSERNSV9QT1JEX0lOVF9TVEEJCUJJVCgxKQorI2RlZmluZSBIRE1JX0hUUExHX0lO
VF9DTFIJCUJJVCgxNikKKyNkZWZpbmUgSERNSV9QT1JEX0lOVF9DTFIJCUJJVCgxNykKKyNkZWZp
bmUgSERNSV9GVUxMX0lOVF9DTFIJCUJJVCgyMCkKKworc3RydWN0IG10a19jZWMgeworCXZvaWQg
X19pb21lbSAqcmVnczsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJaW50IGlycTsKKwlib29sIGhwZDsK
Kwl2b2lkICgqaHBkX2V2ZW50KShib29sIGhwZCwgc3RydWN0IGRldmljZSAqZGV2KTsKKwlzdHJ1
Y3QgZGV2aWNlICpoZG1pX2RldjsKKwlzcGlubG9ja190IGxvY2s7Cit9OworCitzdGF0aWMgdm9p
ZCBtdGtfY2VjX2NsZWFyX2JpdHMoc3RydWN0IG10a19jZWMgKmNlYywgdW5zaWduZWQgaW50IG9m
ZnNldCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgYml0cykKK3sKKwl2b2lkIF9faW9tZW0gKnJl
ZyA9IGNlYy0+cmVncyArIG9mZnNldDsKKwl1MzIgdG1wOworCisJdG1wID0gcmVhZGwocmVnKTsK
Kwl0bXAgJj0gfmJpdHM7CisJd3JpdGVsKHRtcCwgcmVnKTsKK30KKworc3RhdGljIHZvaWQgbXRr
X2NlY19zZXRfYml0cyhzdHJ1Y3QgbXRrX2NlYyAqY2VjLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAor
CQkJICAgICB1bnNpZ25lZCBpbnQgYml0cykKK3sKKwl2b2lkIF9faW9tZW0gKnJlZyA9IGNlYy0+
cmVncyArIG9mZnNldDsKKwl1MzIgdG1wOworCisJdG1wID0gcmVhZGwocmVnKTsKKwl0bXAgfD0g
Yml0czsKKwl3cml0ZWwodG1wLCByZWcpOworfQorCitzdGF0aWMgdm9pZCBtdGtfY2VjX21hc2so
c3RydWN0IG10a19jZWMgKmNlYywgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJCSB1bnNpZ25lZCBp
bnQgdmFsLCB1bnNpZ25lZCBpbnQgbWFzaykKK3sKKwl1MzIgdG1wID0gcmVhZGwoY2VjLT5yZWdz
ICsgb2Zmc2V0KSAmIH5tYXNrOworCisJdG1wIHw9IHZhbCAmIG1hc2s7CisJd3JpdGVsKHZhbCwg
Y2VjLT5yZWdzICsgb2Zmc2V0KTsKK30KKwordm9pZCBtdGtfY2VjX3NldF9ocGRfZXZlbnQoc3Ry
dWN0IGRldmljZSAqZGV2LAorCQkJICAgdm9pZCAoKmhwZF9ldmVudCkoYm9vbCBocGQsIHN0cnVj
dCBkZXZpY2UgKmRldiksCisJCQkgICBzdHJ1Y3QgZGV2aWNlICpoZG1pX2RldikKK3sKKwlzdHJ1
Y3QgbXRrX2NlYyAqY2VjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgbG9uZyBm
bGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjZWMtPmxvY2ssIGZsYWdzKTsKKwljZWMtPmhk
bWlfZGV2ID0gaGRtaV9kZXY7CisJY2VjLT5ocGRfZXZlbnQgPSBocGRfZXZlbnQ7CisJc3Bpbl91
bmxvY2tfaXJxcmVzdG9yZSgmY2VjLT5sb2NrLCBmbGFncyk7Cit9CisKK2Jvb2wgbXRrX2NlY19o
cGRfaGlnaChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG10a19jZWMgKmNlYyA9IGRl
dl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGludCBzdGF0dXM7CisKKwlzdGF0dXMgPSBy
ZWFkbChjZWMtPnJlZ3MgKyBSWF9FVkVOVCk7CisKKwlyZXR1cm4gKHN0YXR1cyAmIChIRE1JX1BP
UkQgfCBIRE1JX0hUUExHKSkgPT0gKEhETUlfUE9SRCB8IEhETUlfSFRQTEcpOworfQorCitzdGF0
aWMgdm9pZCBtdGtfY2VjX2h0cGxnX2lycV9pbml0KHN0cnVjdCBtdGtfY2VjICpjZWMpCit7CisJ
bXRrX2NlY19tYXNrKGNlYywgQ0VDX0NLR0VOLCAwIHwgQ0VDXzMyS19QRE4sIFBETiB8IENFQ18z
MktfUEROKTsKKwltdGtfY2VjX3NldF9iaXRzKGNlYywgUlhfR0VOX1dELCBIRE1JX1BPUkRfSU5U
XzMyS19DTFIgfAorCQkJIFJYX0lOVF8zMktfQ0xSIHwgSERNSV9IVFBMR19JTlRfMzJLX0NMUik7
CisJbXRrX2NlY19tYXNrKGNlYywgUlhfR0VOX1dELCAwLCBIRE1JX1BPUkRfSU5UXzMyS19DTFIg
fCBSWF9JTlRfMzJLX0NMUiB8CisJCSAgICAgSERNSV9IVFBMR19JTlRfMzJLX0NMUiB8IEhETUlf
UE9SRF9JTlRfMzJLX0VOIHwKKwkJICAgICBSWF9JTlRfMzJLX0VOIHwgSERNSV9IVFBMR19JTlRf
MzJLX0VOKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2NlY19odHBsZ19pcnFfZW5hYmxlKHN0cnVj
dCBtdGtfY2VjICpjZWMpCit7CisJbXRrX2NlY19zZXRfYml0cyhjZWMsIFJYX0VWRU5ULCBIRE1J
X1BPUkRfSU5UX0VOIHwgSERNSV9IVFBMR19JTlRfRU4pOworfQorCitzdGF0aWMgdm9pZCBtdGtf
Y2VjX2h0cGxnX2lycV9kaXNhYmxlKHN0cnVjdCBtdGtfY2VjICpjZWMpCit7CisJbXRrX2NlY19j
bGVhcl9iaXRzKGNlYywgUlhfRVZFTlQsIEhETUlfUE9SRF9JTlRfRU4gfCBIRE1JX0hUUExHX0lO
VF9FTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19jZWNfY2xlYXJfaHRwbGdfaXJxKHN0cnVjdCBt
dGtfY2VjICpjZWMpCit7CisJbXRrX2NlY19zZXRfYml0cyhjZWMsIFRSX0NPTkZJRywgQ0xFQVJf
Q0VDX0lSUSk7CisJbXRrX2NlY19zZXRfYml0cyhjZWMsIE5PUk1BTF9JTlRfQ1RSTCwgSERNSV9I
VFBMR19JTlRfQ0xSIHwKKwkJCSBIRE1JX1BPUkRfSU5UX0NMUiB8IEhETUlfRlVMTF9JTlRfQ0xS
KTsKKwltdGtfY2VjX3NldF9iaXRzKGNlYywgUlhfR0VOX1dELCBIRE1JX1BPUkRfSU5UXzMyS19D
TFIgfAorCQkJIFJYX0lOVF8zMktfQ0xSIHwgSERNSV9IVFBMR19JTlRfMzJLX0NMUik7CisJdXNs
ZWVwX3JhbmdlKDUsIDEwKTsKKwltdGtfY2VjX2NsZWFyX2JpdHMoY2VjLCBOT1JNQUxfSU5UX0NU
UkwsIEhETUlfSFRQTEdfSU5UX0NMUiB8CisJCQkgICBIRE1JX1BPUkRfSU5UX0NMUiB8IEhETUlf
RlVMTF9JTlRfQ0xSKTsKKwltdGtfY2VjX2NsZWFyX2JpdHMoY2VjLCBUUl9DT05GSUcsIENMRUFS
X0NFQ19JUlEpOworCW10a19jZWNfY2xlYXJfYml0cyhjZWMsIFJYX0dFTl9XRCwgSERNSV9QT1JE
X0lOVF8zMktfQ0xSIHwKKwkJCSAgIFJYX0lOVF8zMktfQ0xSIHwgSERNSV9IVFBMR19JTlRfMzJL
X0NMUik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19jZWNfaHBkX2V2ZW50KHN0cnVjdCBtdGtfY2Vj
ICpjZWMsIGJvb2wgaHBkKQoreworCXZvaWQgKCpocGRfZXZlbnQpKGJvb2wgaHBkLCBzdHJ1Y3Qg
ZGV2aWNlICpkZXYpOworCXN0cnVjdCBkZXZpY2UgKmhkbWlfZGV2OworCXVuc2lnbmVkIGxvbmcg
ZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2VjLT5sb2NrLCBmbGFncyk7CisJaHBkX2V2
ZW50ID0gY2VjLT5ocGRfZXZlbnQ7CisJaGRtaV9kZXYgPSBjZWMtPmhkbWlfZGV2OworCXNwaW5f
dW5sb2NrX2lycXJlc3RvcmUoJmNlYy0+bG9jaywgZmxhZ3MpOworCisJaWYgKGhwZF9ldmVudCkK
KwkJaHBkX2V2ZW50KGhwZCwgaGRtaV9kZXYpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbXRr
X2NlY19odHBsZ19pc3JfdGhyZWFkKGludCBpcnEsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgZGV2
aWNlICpkZXYgPSBhcmc7CisJc3RydWN0IG10a19jZWMgKmNlYyA9IGRldl9nZXRfZHJ2ZGF0YShk
ZXYpOworCWJvb2wgaHBkOworCisJbXRrX2NlY19jbGVhcl9odHBsZ19pcnEoY2VjKTsKKwlocGQg
PSBtdGtfY2VjX2hwZF9oaWdoKGRldik7CisKKwlpZiAoY2VjLT5ocGQgIT0gaHBkKSB7CisJCWRl
dl9kYmcoZGV2LCAiaG90cGx1ZyBldmVudCEgY3VyIGhwZCA9ICVkLCBocGQgPSAlZFxuIiwKKwkJ
CWNlYy0+aHBkLCBocGQpOworCQljZWMtPmhwZCA9IGhwZDsKKwkJbXRrX2NlY19ocGRfZXZlbnQo
Y2VjLCBocGQpOworCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgbXRr
X2NlY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZp
Y2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IG10a19jZWMgKmNlYzsKKwlzdHJ1Y3QgcmVz
b3VyY2UgKnJlczsKKwlpbnQgcmV0OworCisJY2VjID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9m
KCpjZWMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNlYykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlw
bGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjZWMpOworCXNwaW5fbG9ja19pbml0KCZjZWMtPmxv
Y2spOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVN
LCAwKTsKKwljZWMtPnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOworCWlm
IChJU19FUlIoY2VjLT5yZWdzKSkgeworCQlyZXQgPSBQVFJfRVJSKGNlYy0+cmVncyk7CisJCWRl
dl9lcnIoZGV2LCAiRmFpbGVkIHRvIGlvcmVtYXAgY2VjOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJu
IHJldDsKKwl9CisKKwljZWMtPmNsayA9IGRldm1fY2xrX2dldChkZXYsIE5VTEwpOworCWlmIChJ
U19FUlIoY2VjLT5jbGspKSB7CisJCXJldCA9IFBUUl9FUlIoY2VjLT5jbGspOworCQlkZXZfZXJy
KGRldiwgIkZhaWxlZCB0byBnZXQgY2VjIGNsb2NrOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJl
dDsKKwl9CisKKwljZWMtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGNl
Yy0+aXJxIDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgY2VjIGlycTogJWRc
biIsIGNlYy0+aXJxKTsKKwkJcmV0dXJuIGNlYy0+aXJxOworCX0KKworCXJldCA9IGRldm1fcmVx
dWVzdF90aHJlYWRlZF9pcnEoZGV2LCBjZWMtPmlycSwgTlVMTCwKKwkJCQkJbXRrX2NlY19odHBs
Z19pc3JfdGhyZWFkLAorCQkJCQlJUlFGX1NIQVJFRCB8IElSUUZfVFJJR0dFUl9MT1cgfAorCQkJ
CQlJUlFGX09ORVNIT1QsICJoZG1pIGhwZCIsIGRldik7CisJaWYgKHJldCkgeworCQlkZXZfZXJy
KGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBjZWMgaXJxOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJu
IHJldDsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoY2VjLT5jbGspOworCWlmIChy
ZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZW5hYmxlIGNlYyBjbG9jazogJWRcbiIs
IHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJbXRrX2NlY19odHBsZ19pcnFfaW5pdChjZWMp
OworCW10a19jZWNfaHRwbGdfaXJxX2VuYWJsZShjZWMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0
YXRpYyBpbnQgbXRrX2NlY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sK
KwlzdHJ1Y3QgbXRrX2NlYyAqY2VjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlt
dGtfY2VjX2h0cGxnX2lycV9kaXNhYmxlKGNlYyk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGNl
Yy0+Y2xrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2Vf
aWQgbXRrX2NlY19vZl9pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3
My1jZWMiLCB9LAorCXt9Cit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19jZWNfZHJp
dmVyID0geworCS5wcm9iZSA9IG10a19jZWNfcHJvYmUsCisJLnJlbW92ZSA9IG10a19jZWNfcmVt
b3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm1lZGlhdGVrLWNlYyIsCisJCS5vZl9tYXRj
aF90YWJsZSA9IG10a19jZWNfb2ZfaWRzLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n
cHUvZHJtL21lZGlhdGVrL210a19jZWMuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf
Y2VjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAwNTdiNwotLS0gL2Rl
di9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfY2VjLmgKQEAgLTAsMCAr
MSwyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJbmMuCisgKiBBdXRo
b3I6IEppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg
KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZl
cnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u
CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfTVRLX0NFQ19ICisjZGVm
aW5lIF9NVEtfQ0VDX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBkZXZp
Y2U7CisKK3ZvaWQgbXRrX2NlY19zZXRfaHBkX2V2ZW50KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJ
CSAgIHZvaWQgKCpob3RwbHVnX2V2ZW50KShib29sIGhwZCwgc3RydWN0IGRldmljZSAqZGV2KSwK
KwkJCSAgIHN0cnVjdCBkZXZpY2UgKmhkbWlfZGV2KTsKK2Jvb2wgbXRrX2NlY19ocGRfaGlnaChz
dHJ1Y3QgZGV2aWNlICpkZXYpOworCisjZW5kaWYgLyogX01US19DRUNfSCAqLwpkaWZmIC0tZ2l0
IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pLmMgYi9kcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvbXRrX2hkbWkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4x
M2NkMzRmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19o
ZG1pLmMKQEAgLTAsMCArMSwxODIzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0IE1lZGlh
VGVrIEluYy4KKyAqIEF1dGhvcjogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+CisgKgor
ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVk
ZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNs
dWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+Cisj
aW5jbHVkZSA8ZHJtL2RybV9lZGlkLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVk
ZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9oZG1pLmg+CisjaW5jbHVkZSA8bGlu
dXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwu
aD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxh
dGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8u
aD4KKyNpbmNsdWRlIDxsaW51eC9vZl9ncmFwaC5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS9waHku
aD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9y
ZWdtYXAuaD4KKyNpbmNsdWRlIDxzb3VuZC9oZG1pLWNvZGVjLmg+CisjaW5jbHVkZSAibXRrX2Nl
Yy5oIgorI2luY2x1ZGUgIm10a19oZG1pLmgiCisjaW5jbHVkZSAibXRrX2hkbWlfcmVncy5oIgor
CisjZGVmaW5lIE5DVFNfQllURVMJNworCitlbnVtIG10a19oZG1pX2Nsa19pZCB7CisJTVRLX0hE
TUlfQ0xLX0hETUlfUElYRUwsCisJTVRLX0hETUlfQ0xLX0hETUlfUExMLAorCU1US19IRE1JX0NM
S19BVURfQkNMSywKKwlNVEtfSERNSV9DTEtfQVVEX1NQRElGLAorCU1US19IRE1JX0NMS19DT1VO
VAorfTsKKworZW51bSBoZG1pX2F1ZF9pbnB1dF90eXBlIHsKKwlIRE1JX0FVRF9JTlBVVF9JMlMg
PSAwLAorCUhETUlfQVVEX0lOUFVUX1NQRElGLAorfTsKKworZW51bSBoZG1pX2F1ZF9pMnNfZm10
IHsKKwlIRE1JX0kyU19NT0RFX1JKVF8yNEJJVCA9IDAsCisJSERNSV9JMlNfTU9ERV9SSlRfMTZC
SVQsCisJSERNSV9JMlNfTU9ERV9MSlRfMjRCSVQsCisJSERNSV9JMlNfTU9ERV9MSlRfMTZCSVQs
CisJSERNSV9JMlNfTU9ERV9JMlNfMjRCSVQsCisJSERNSV9JMlNfTU9ERV9JMlNfMTZCSVQKK307
CisKK2VudW0gaGRtaV9hdWRfbWNsayB7CisJSERNSV9BVURfTUNMS18xMjhGUywKKwlIRE1JX0FV
RF9NQ0xLXzE5MkZTLAorCUhETUlfQVVEX01DTEtfMjU2RlMsCisJSERNSV9BVURfTUNMS18zODRG
UywKKwlIRE1JX0FVRF9NQ0xLXzUxMkZTLAorCUhETUlfQVVEX01DTEtfNzY4RlMsCisJSERNSV9B
VURfTUNMS18xMTUyRlMsCit9OworCitlbnVtIGhkbWlfYXVkX2NoYW5uZWxfdHlwZSB7CisJSERN
SV9BVURfQ0hBTl9UWVBFXzFfMCA9IDAsCisJSERNSV9BVURfQ0hBTl9UWVBFXzFfMSwKKwlIRE1J
X0FVRF9DSEFOX1RZUEVfMl8wLAorCUhETUlfQVVEX0NIQU5fVFlQRV8yXzEsCisJSERNSV9BVURf
Q0hBTl9UWVBFXzNfMCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfM18xLAorCUhETUlfQVVEX0NIQU5f
VFlQRV80XzAsCisJSERNSV9BVURfQ0hBTl9UWVBFXzRfMSwKKwlIRE1JX0FVRF9DSEFOX1RZUEVf
NV8wLAorCUhETUlfQVVEX0NIQU5fVFlQRV81XzEsCisJSERNSV9BVURfQ0hBTl9UWVBFXzZfMCwK
KwlIRE1JX0FVRF9DSEFOX1RZUEVfNl8xLAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzAsCisJSERN
SV9BVURfQ0hBTl9UWVBFXzdfMSwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfM18wX0xSUywKKwlIRE1J
X0FVRF9DSEFOX1RZUEVfM18xX0xSUywKKwlIRE1JX0FVRF9DSEFOX1RZUEVfNF8wX0NMUlMsCisJ
SERNSV9BVURfQ0hBTl9UWVBFXzRfMV9DTFJTLAorCUhETUlfQVVEX0NIQU5fVFlQRV82XzFfQ1Ms
CisJSERNSV9BVURfQ0hBTl9UWVBFXzZfMV9DSCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfNl8xX09I
LAorCUhETUlfQVVEX0NIQU5fVFlQRV82XzFfQ0hSLAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzFf
TEhfUkgsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9MU1JfUlNSLAorCUhETUlfQVVEX0NIQU5f
VFlQRV83XzFfTENfUkMsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9MV19SVywKKwlIRE1JX0FV
RF9DSEFOX1RZUEVfN18xX0xTRF9SU0QsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9MU1NfUlNT
LAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzFfTEhTX1JIUywKKwlIRE1JX0FVRF9DSEFOX1RZUEVf
N18xX0NTX0NILAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzFfQ1NfT0gsCisJSERNSV9BVURfQ0hB
Tl9UWVBFXzdfMV9DU19DSFIsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9DSF9PSCwKKwlIRE1J
X0FVRF9DSEFOX1RZUEVfN18xX0NIX0NIUiwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18xX09IX0NI
UiwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xTU19SU1NfTFNSX1JTUiwKKwlIRE1JX0FVRF9D
SEFOX1RZUEVfNl8wX0NTLAorCUhETUlfQVVEX0NIQU5fVFlQRV82XzBfQ0gsCisJSERNSV9BVURf
Q0hBTl9UWVBFXzZfMF9PSCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfNl8wX0NIUiwKKwlIRE1JX0FV
RF9DSEFOX1RZUEVfN18wX0xIX1JILAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzBfTFNSX1JTUiwK
KwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xDX1JDLAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzBf
TFdfUlcsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MU0RfUlNELAorCUhETUlfQVVEX0NIQU5f
VFlQRV83XzBfTFNTX1JTUywKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xIU19SSFMsCisJSERN
SV9BVURfQ0hBTl9UWVBFXzdfMF9DU19DSCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0NTX09I
LAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzBfQ1NfQ0hSLAorCUhETUlfQVVEX0NIQU5fVFlQRV83
XzBfQ0hfT0gsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9DSF9DSFIsCisJSERNSV9BVURfQ0hB
Tl9UWVBFXzdfMF9PSF9DSFIsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MU1NfUlNTX0xTUl9S
U1IsCisJSERNSV9BVURfQ0hBTl9UWVBFXzhfMF9MSF9SSF9DUywKKwlIRE1JX0FVRF9DSEFOX1RZ
UEVfVU5LTk9XTiA9IDB4RkYKK307CisKK2VudW0gaGRtaV9hdWRfY2hhbm5lbF9zd2FwX3R5cGUg
eworCUhETUlfQVVEX1NXQVBfTFIsCisJSERNSV9BVURfU1dBUF9MRkVfQ0MsCisJSERNSV9BVURf
U1dBUF9MU1JTLAorCUhETUlfQVVEX1NXQVBfUkxTX1JSUywKKwlIRE1JX0FVRF9TV0FQX0xSX1NU
QVRVUywKK307CisKK3N0cnVjdCBoZG1pX2F1ZGlvX3BhcmFtIHsKKwllbnVtIGhkbWlfYXVkaW9f
Y29kaW5nX3R5cGUgYXVkX2NvZGVjOworCWVudW0gaGRtaV9hdWRpb19zYW1wbGVfc2l6ZSBhdWRf
c2FtcGVfc2l6ZTsKKwllbnVtIGhkbWlfYXVkX2lucHV0X3R5cGUgYXVkX2lucHV0X3R5cGU7CisJ
ZW51bSBoZG1pX2F1ZF9pMnNfZm10IGF1ZF9pMnNfZm10OworCWVudW0gaGRtaV9hdWRfbWNsayBh
dWRfbWNsazsKKwllbnVtIGhkbWlfYXVkX2NoYW5uZWxfdHlwZSBhdWRfaW5wdXRfY2hhbl90eXBl
OworCXN0cnVjdCBoZG1pX2NvZGVjX3BhcmFtcyBjb2RlY19wYXJhbXM7Cit9OworCitzdHJ1Y3Qg
bXRrX2hkbWkgeworCXN0cnVjdCBkcm1fYnJpZGdlIGJyaWRnZTsKKwlzdHJ1Y3QgZHJtX2Nvbm5l
Y3RvciBjb25uOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgcGh5ICpwaHk7CisJc3Ry
dWN0IGRldmljZSAqY2VjX2RldjsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmRkY19hZHB0OworCXN0
cnVjdCBjbGsgKmNsa1tNVEtfSERNSV9DTEtfQ09VTlRdOworCXN0cnVjdCBkcm1fZGlzcGxheV9t
b2RlIG1vZGU7CisJYm9vbCBkdmlfbW9kZTsKKwl1MzIgbWluX2Nsb2NrOworCXUzMiBtYXhfY2xv
Y2s7CisJdTMyIG1heF9oZGlzcGxheTsKKwl1MzIgbWF4X3ZkaXNwbGF5OworCXUzMiBpYmlhczsK
Kwl1MzIgaWJpYXNfdXA7CisJc3RydWN0IHJlZ21hcCAqc3lzX3JlZ21hcDsKKwl1bnNpZ25lZCBp
bnQgc3lzX29mZnNldDsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJZW51bSBoZG1pX2NvbG9yc3Bh
Y2UgY3NwOworCXN0cnVjdCBoZG1pX2F1ZGlvX3BhcmFtIGF1ZF9wYXJhbTsKKwlib29sIGF1ZGlv
X2VuYWJsZTsKKwlib29sIHBvd2VyZWQ7CisJYm9vbCBlbmFibGVkOworfTsKKworc3RhdGljIGlu
bGluZSBzdHJ1Y3QgbXRrX2hkbWkgKmhkbWlfY3R4X2Zyb21fYnJpZGdlKHN0cnVjdCBkcm1fYnJp
ZGdlICpiKQoreworCXJldHVybiBjb250YWluZXJfb2YoYiwgc3RydWN0IG10a19oZG1pLCBicmlk
Z2UpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfaGRtaSAqaGRtaV9jdHhfZnJvbV9j
b25uKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjKQoreworCXJldHVybiBjb250YWluZXJfb2YoYywg
c3RydWN0IG10a19oZG1pLCBjb25uKTsKK30KKworc3RhdGljIHUzMiBtdGtfaGRtaV9yZWFkKHN0
cnVjdCBtdGtfaGRtaSAqaGRtaSwgdTMyIG9mZnNldCkKK3sKKwlyZXR1cm4gcmVhZGwoaGRtaS0+
cmVncyArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX3dyaXRlKHN0cnVjdCBt
dGtfaGRtaSAqaGRtaSwgdTMyIG9mZnNldCwgdTMyIHZhbCkKK3sKKwl3cml0ZWwodmFsLCBoZG1p
LT5yZWdzICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfY2xlYXJfYml0cyhz
dHJ1Y3QgbXRrX2hkbWkgKmhkbWksIHUzMiBvZmZzZXQsIHUzMiBiaXRzKQoreworCXZvaWQgX19p
b21lbSAqcmVnID0gaGRtaS0+cmVncyArIG9mZnNldDsKKwl1MzIgdG1wOworCisJdG1wID0gcmVh
ZGwocmVnKTsKKwl0bXAgJj0gfmJpdHM7CisJd3JpdGVsKHRtcCwgcmVnKTsKK30KKworc3RhdGlj
IHZvaWQgbXRrX2hkbWlfc2V0X2JpdHMoc3RydWN0IG10a19oZG1pICpoZG1pLCB1MzIgb2Zmc2V0
LCB1MzIgYml0cykKK3sKKwl2b2lkIF9faW9tZW0gKnJlZyA9IGhkbWktPnJlZ3MgKyBvZmZzZXQ7
CisJdTMyIHRtcDsKKworCXRtcCA9IHJlYWRsKHJlZyk7CisJdG1wIHw9IGJpdHM7CisJd3JpdGVs
KHRtcCwgcmVnKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfbWFzayhzdHJ1Y3QgbXRrX2hk
bWkgKmhkbWksIHUzMiBvZmZzZXQsIHUzMiB2YWwsIHUzMiBtYXNrKQoreworCXZvaWQgX19pb21l
bSAqcmVnID0gaGRtaS0+cmVncyArIG9mZnNldDsKKwl1MzIgdG1wOworCisJdG1wID0gcmVhZGwo
cmVnKTsKKwl0bXAgPSAodG1wICYgfm1hc2spIHwgKHZhbCAmIG1hc2spOworCXdyaXRlbCh0bXAs
IHJlZyk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2h3X3ZpZF9ibGFjayhzdHJ1Y3QgbXRr
X2hkbWkgKmhkbWksIGJvb2wgYmxhY2spCit7CisJbXRrX2hkbWlfbWFzayhoZG1pLCBWSURFT19D
RkdfNCwgYmxhY2sgPyBHRU5fUkdCIDogTk9STUFMX1BBVEgsCisJCSAgICAgIFZJREVPX1NPVVJD
RV9TRUwpOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9od19tYWtlX3JlZ193cml0YWJsZShz
dHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKQoreworCXJlZ21hcF91cGRhdGVfYml0
cyhoZG1pLT5zeXNfcmVnbWFwLCBoZG1pLT5zeXNfb2Zmc2V0ICsgSERNSV9TWVNfQ0ZHMjAsCisJ
CQkgICBIRE1JX1BDTEtfRlJFRV9SVU4sIGVuYWJsZSA/IEhETUlfUENMS19GUkVFX1JVTiA6IDAp
OworCXJlZ21hcF91cGRhdGVfYml0cyhoZG1pLT5zeXNfcmVnbWFwLCBoZG1pLT5zeXNfb2Zmc2V0
ICsgSERNSV9TWVNfQ0ZHMUMsCisJCQkgICBIRE1JX09OIHwgQU5MR19PTiwgZW5hYmxlID8gKEhE
TUlfT04gfCBBTkxHX09OKSA6IDApOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9od18xcDRf
dmVyc2lvbl9lbmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGVuYWJsZSkKK3sKKwly
ZWdtYXBfdXBkYXRlX2JpdHMoaGRtaS0+c3lzX3JlZ21hcCwgaGRtaS0+c3lzX29mZnNldCArIEhE
TUlfU1lTX0NGRzIwLAorCQkJICAgSERNSTJQMF9FTiwgZW5hYmxlID8gMCA6IEhETUkyUDBfRU4p
OworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9od19hdWRfbXV0ZShzdHJ1Y3QgbXRrX2hkbWkg
KmhkbWkpCit7CisJbXRrX2hkbWlfc2V0X2JpdHMoaGRtaSwgR1JMX0FVRElPX0NGRywgQVVESU9f
WkVSTyk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2h3X2F1ZF91bm11dGUoc3RydWN0IG10
a19oZG1pICpoZG1pKQoreworCW10a19oZG1pX2NsZWFyX2JpdHMoaGRtaSwgR1JMX0FVRElPX0NG
RywgQVVESU9fWkVSTyk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2h3X3Jlc2V0KHN0cnVj
dCBtdGtfaGRtaSAqaGRtaSkKK3sKKwlyZWdtYXBfdXBkYXRlX2JpdHMoaGRtaS0+c3lzX3JlZ21h
cCwgaGRtaS0+c3lzX29mZnNldCArIEhETUlfU1lTX0NGRzFDLAorCQkJICAgSERNSV9SU1QsIEhE
TUlfUlNUKTsKKwlyZWdtYXBfdXBkYXRlX2JpdHMoaGRtaS0+c3lzX3JlZ21hcCwgaGRtaS0+c3lz
X29mZnNldCArIEhETUlfU1lTX0NGRzFDLAorCQkJICAgSERNSV9SU1QsIDApOworCW10a19oZG1p
X2NsZWFyX2JpdHMoaGRtaSwgR1JMX0NGRzMsIENGRzNfQ09OVFJPTF9QQUNLRVRfREVMQVkpOwor
CXJlZ21hcF91cGRhdGVfYml0cyhoZG1pLT5zeXNfcmVnbWFwLCBoZG1pLT5zeXNfb2Zmc2V0ICsg
SERNSV9TWVNfQ0ZHMUMsCisJCQkgICBBTkxHX09OLCBBTkxHX09OKTsKK30KKworc3RhdGljIHZv
aWQgbXRrX2hkbWlfaHdfZW5hYmxlX25vdGljZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wg
ZW5hYmxlX25vdGljZSkKK3sKKwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9DRkcyLCBlbmFibGVf
bm90aWNlID8gQ0ZHMl9OT1RJQ0VfRU4gOiAwLAorCQkgICAgICBDRkcyX05PVElDRV9FTik7Cit9
CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2h3X3dyaXRlX2ludF9tYXNrKHN0cnVjdCBtdGtfaGRt
aSAqaGRtaSwgdTMyIGludF9tYXNrKQoreworCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9JTlRf
TUFTSywgaW50X21hc2spOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9od19lbmFibGVfZHZp
X21vZGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGVuYWJsZSkKK3sKKwltdGtfaGRtaV9t
YXNrKGhkbWksIEdSTF9DRkcxLCBlbmFibGUgPyBDRkcxX0RWSSA6IDAsIENGRzFfRFZJKTsKK30K
Kworc3RhdGljIHZvaWQgbXRrX2hkbWlfaHdfc2VuZF9pbmZvX2ZyYW1lKHN0cnVjdCBtdGtfaGRt
aSAqaGRtaSwgdTggKmJ1ZmZlciwKKwkJCQkJdTggbGVuKQoreworCXUzMiBjdHJsX3JlZyA9IEdS
TF9DVFJMOworCWludCBpOworCXU4ICpmcmFtZV9kYXRhOworCWVudW0gaGRtaV9pbmZvZnJhbWVf
dHlwZSBmcmFtZV90eXBlOworCXU4IGZyYW1lX3ZlcjsKKwl1OCBmcmFtZV9sZW47CisJdTggY2hl
Y2tzdW07CisJaW50IGN0cmxfZnJhbWVfZW4gPSAwOworCisJZnJhbWVfdHlwZSA9ICpidWZmZXI7
CisJYnVmZmVyICs9IDE7CisJZnJhbWVfdmVyID0gKmJ1ZmZlcjsKKwlidWZmZXIgKz0gMTsKKwlm
cmFtZV9sZW4gPSAqYnVmZmVyOworCWJ1ZmZlciArPSAxOworCWNoZWNrc3VtID0gKmJ1ZmZlcjsK
KwlidWZmZXIgKz0gMTsKKwlmcmFtZV9kYXRhID0gYnVmZmVyOworCisJZGV2X2RiZyhoZG1pLT5k
ZXYsCisJCSJmcmFtZV90eXBlOjB4JXgsZnJhbWVfdmVyOjB4JXgsZnJhbWVfbGVuOjB4JXgsY2hl
Y2tzdW06MHgleFxuIiwKKwkJZnJhbWVfdHlwZSwgZnJhbWVfdmVyLCBmcmFtZV9sZW4sIGNoZWNr
c3VtKTsKKworCXN3aXRjaCAoZnJhbWVfdHlwZSkgeworCWNhc2UgSERNSV9JTkZPRlJBTUVfVFlQ
RV9BVkk6CisJCWN0cmxfZnJhbWVfZW4gPSBDVFJMX0FWSV9FTjsKKwkJY3RybF9yZWcgPSBHUkxf
Q1RSTDsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0lORk9GUkFNRV9UWVBFX1NQRDoKKwkJY3RybF9m
cmFtZV9lbiA9IENUUkxfU1BEX0VOOworCQljdHJsX3JlZyA9IEdSTF9DVFJMOworCQlicmVhazsK
KwljYXNlIEhETUlfSU5GT0ZSQU1FX1RZUEVfQVVESU86CisJCWN0cmxfZnJhbWVfZW4gPSBDVFJM
X0FVRElPX0VOOworCQljdHJsX3JlZyA9IEdSTF9DVFJMOworCQlicmVhazsKKwljYXNlIEhETUlf
SU5GT0ZSQU1FX1RZUEVfVkVORE9SOgorCQljdHJsX2ZyYW1lX2VuID0gVlNfRU47CisJCWN0cmxf
cmVnID0gR1JMX0FDUF9JU1JDX0NUUkw7CisJCWJyZWFrOworCX0KKwltdGtfaGRtaV9jbGVhcl9i
aXRzKGhkbWksIGN0cmxfcmVnLCBjdHJsX2ZyYW1lX2VuKTsKKwltdGtfaGRtaV93cml0ZShoZG1p
LCBHUkxfSU5GT0ZSTV9UWVBFLCBmcmFtZV90eXBlKTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBH
UkxfSU5GT0ZSTV9WRVIsIGZyYW1lX3Zlcik7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0lO
Rk9GUk1fTE5HLCBmcmFtZV9sZW4pOworCisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0lGTV9Q
T1JULCBjaGVja3N1bSk7CisJZm9yIChpID0gMDsgaSA8IGZyYW1lX2xlbjsgaSsrKQorCQltdGtf
aGRtaV93cml0ZShoZG1pLCBHUkxfSUZNX1BPUlQsIGZyYW1lX2RhdGFbaV0pOworCisJbXRrX2hk
bWlfc2V0X2JpdHMoaGRtaSwgY3RybF9yZWcsIGN0cmxfZnJhbWVfZW4pOworfQorCitzdGF0aWMg
dm9pZCBtdGtfaGRtaV9od19zZW5kX2F1ZF9wYWNrZXQoc3RydWN0IG10a19oZG1pICpoZG1pLCBi
b29sIGVuYWJsZSkKK3sKKwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9TSElGVF9SMiwgZW5hYmxl
ID8gMCA6IEFVRElPX1BBQ0tFVF9PRkYsCisJCSAgICAgIEFVRElPX1BBQ0tFVF9PRkYpOworfQor
CitzdGF0aWMgdm9pZCBtdGtfaGRtaV9od19jb25maWdfc3lzKHN0cnVjdCBtdGtfaGRtaSAqaGRt
aSkKK3sKKwlyZWdtYXBfdXBkYXRlX2JpdHMoaGRtaS0+c3lzX3JlZ21hcCwgaGRtaS0+c3lzX29m
ZnNldCArIEhETUlfU1lTX0NGRzIwLAorCQkJICAgSERNSV9PVVRfRklGT19FTiB8IE1ITF9NT0RF
X09OLCAwKTsKKwl1c2xlZXBfcmFuZ2UoMjAwMCwgNDAwMCk7CisJcmVnbWFwX3VwZGF0ZV9iaXRz
KGhkbWktPnN5c19yZWdtYXAsIGhkbWktPnN5c19vZmZzZXQgKyBIRE1JX1NZU19DRkcyMCwKKwkJ
CSAgIEhETUlfT1VUX0ZJRk9fRU4gfCBNSExfTU9ERV9PTiwgSERNSV9PVVRfRklGT19FTik7Cit9
CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2h3X3NldF9kZWVwX2NvbG9yX21vZGUoc3RydWN0IG10
a19oZG1pICpoZG1pKQoreworCXJlZ21hcF91cGRhdGVfYml0cyhoZG1pLT5zeXNfcmVnbWFwLCBo
ZG1pLT5zeXNfb2Zmc2V0ICsgSERNSV9TWVNfQ0ZHMjAsCisJCQkgICBERUVQX0NPTE9SX01PREVf
TUFTSyB8IERFRVBfQ09MT1JfRU4sCisJCQkgICBDT0xPUl84QklUX01PREUpOworfQorCitzdGF0
aWMgdm9pZCBtdGtfaGRtaV9od19zZW5kX2F2X211dGUoc3RydWN0IG10a19oZG1pICpoZG1pKQor
eworCW10a19oZG1pX2NsZWFyX2JpdHMoaGRtaSwgR1JMX0NGRzQsIENUUkxfQVZNVVRFKTsKKwl1
c2xlZXBfcmFuZ2UoMjAwMCwgNDAwMCk7CisJbXRrX2hkbWlfc2V0X2JpdHMoaGRtaSwgR1JMX0NG
RzQsIENUUkxfQVZNVVRFKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfaHdfc2VuZF9hdl91
bm11dGUoc3RydWN0IG10a19oZG1pICpoZG1pKQoreworCW10a19oZG1pX21hc2soaGRtaSwgR1JM
X0NGRzQsIENGRzRfQVZfVU5NVVRFX0VOLAorCQkgICAgICBDRkc0X0FWX1VOTVVURV9FTiB8IENG
RzRfQVZfVU5NVVRFX1NFVCk7CisJdXNsZWVwX3JhbmdlKDIwMDAsIDQwMDApOworCW10a19oZG1p
X21hc2soaGRtaSwgR1JMX0NGRzQsIENGRzRfQVZfVU5NVVRFX1NFVCwKKwkJICAgICAgQ0ZHNF9B
Vl9VTk1VVEVfRU4gfCBDRkc0X0FWX1VOTVVURV9TRVQpOworfQorCitzdGF0aWMgdm9pZCBtdGtf
aGRtaV9od19uY3RzX2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgb24pCit7CisJ
bXRrX2hkbWlfbWFzayhoZG1pLCBHUkxfQ1RTX0NUUkwsIG9uID8gMCA6IENUU19DVFJMX1NPRlQs
CisJCSAgICAgIENUU19DVFJMX1NPRlQpOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9od19u
Y3RzX2F1dG9fd3JpdGVfZW5hYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkJICAgICAg
IGJvb2wgZW5hYmxlKQoreworCW10a19oZG1pX21hc2soaGRtaSwgR1JMX0NUU19DVFJMLCBlbmFi
bGUgPyBOQ1RTX1dSSV9BTllUSU1FIDogMCwKKwkJICAgICAgTkNUU19XUklfQU5ZVElNRSk7Cit9
CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2h3X21zaWNfc2V0dGluZyhzdHJ1Y3QgbXRrX2hkbWkg
KmhkbWksCisJCQkJICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwltdGtf
aGRtaV9jbGVhcl9iaXRzKGhkbWksIEdSTF9DRkc0LCBDRkc0X01ITF9NT0RFKTsKKworCWlmICht
b2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFICYmCisJICAgIG1vZGUtPmNsb2Nr
ID09IDc0MjUwICYmCisJICAgIG1vZGUtPnZkaXNwbGF5ID09IDEwODApCisJCW10a19oZG1pX2Ns
ZWFyX2JpdHMoaGRtaSwgR1JMX0NGRzIsIENGRzJfTUhMX0RFX1NFTCk7CisJZWxzZQorCQltdGtf
aGRtaV9zZXRfYml0cyhoZG1pLCBHUkxfQ0ZHMiwgQ0ZHMl9NSExfREVfU0VMKTsKK30KKworc3Rh
dGljIHZvaWQgbXRrX2hkbWlfaHdfYXVkX3NldF9jaGFubmVsX3N3YXAoc3RydWN0IG10a19oZG1p
ICpoZG1pLAorCQkJCQllbnVtIGhkbWlfYXVkX2NoYW5uZWxfc3dhcF90eXBlIHN3YXApCit7CisJ
dTggc3dhcF9iaXQ7CisKKwlzd2l0Y2ggKHN3YXApIHsKKwljYXNlIEhETUlfQVVEX1NXQVBfTFI6
CisJCXN3YXBfYml0ID0gTFJfU1dBUDsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0FVRF9TV0FQX0xG
RV9DQzoKKwkJc3dhcF9iaXQgPSBMRkVfQ0NfU1dBUDsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0FV
RF9TV0FQX0xTUlM6CisJCXN3YXBfYml0ID0gTFNSU19TV0FQOworCQlicmVhazsKKwljYXNlIEhE
TUlfQVVEX1NXQVBfUkxTX1JSUzoKKwkJc3dhcF9iaXQgPSBSTFNfUlJTX1NXQVA7CisJCWJyZWFr
OworCWNhc2UgSERNSV9BVURfU1dBUF9MUl9TVEFUVVM6CisJCXN3YXBfYml0ID0gTFJfU1RBVFVT
X1NXQVA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXN3YXBfYml0ID0gTEZFX0NDX1NXQVA7CisJ
CWJyZWFrOworCX0KKwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9DSF9TV0FQLCBzd2FwX2JpdCwg
MHhmZik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfYml0X251bShzdHJ1
Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJCWVudW0gaGRtaV9hdWRpb19zYW1wbGVfc2l6ZSBiaXRf
bnVtKQoreworCXUzMiB2YWw7CisKKwlzd2l0Y2ggKGJpdF9udW0pIHsKKwljYXNlIEhETUlfQVVE
SU9fU0FNUExFX1NJWkVfMTY6CisJCXZhbCA9IEFPVVRfMTZCSVQ7CisJCWJyZWFrOworCWNhc2Ug
SERNSV9BVURJT19TQU1QTEVfU0laRV8yMDoKKwkJdmFsID0gQU9VVF8yMEJJVDsKKwkJYnJlYWs7
CisJY2FzZSBIRE1JX0FVRElPX1NBTVBMRV9TSVpFXzI0OgorCWNhc2UgSERNSV9BVURJT19TQU1Q
TEVfU0laRV9TVFJFQU06CisJCXZhbCA9IEFPVVRfMjRCSVQ7CisJCWJyZWFrOworCX0KKworCW10
a19oZG1pX21hc2soaGRtaSwgR1JMX0FPVVRfQ0ZHLCB2YWwsIEFPVVRfQk5VTV9TRUxfTUFTSyk7
Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfaTJzX2ZtdChzdHJ1Y3QgbXRr
X2hkbWkgKmhkbWksCisJCQkJCWVudW0gaGRtaV9hdWRfaTJzX2ZtdCBpMnNfZm10KQoreworCXUz
MiB2YWw7CisKKwl2YWwgPSBtdGtfaGRtaV9yZWFkKGhkbWksIEdSTF9DRkcwKTsKKwl2YWwgJj0g
fihDRkcwX1dfTEVOR1RIX01BU0sgfCBDRkcwX0kyU19NT0RFX01BU0spOworCisJc3dpdGNoIChp
MnNfZm10KSB7CisJY2FzZSBIRE1JX0kyU19NT0RFX1JKVF8yNEJJVDoKKwkJdmFsIHw9IENGRzBf
STJTX01PREVfUlRKIHwgQ0ZHMF9XX0xFTkdUSF8yNEJJVDsKKwkJYnJlYWs7CisJY2FzZSBIRE1J
X0kyU19NT0RFX1JKVF8xNkJJVDoKKwkJdmFsIHw9IENGRzBfSTJTX01PREVfUlRKIHwgQ0ZHMF9X
X0xFTkdUSF8xNkJJVDsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0kyU19NT0RFX0xKVF8yNEJJVDoK
KwlkZWZhdWx0OgorCQl2YWwgfD0gQ0ZHMF9JMlNfTU9ERV9MVEogfCBDRkcwX1dfTEVOR1RIXzI0
QklUOworCQlicmVhazsKKwljYXNlIEhETUlfSTJTX01PREVfTEpUXzE2QklUOgorCQl2YWwgfD0g
Q0ZHMF9JMlNfTU9ERV9MVEogfCBDRkcwX1dfTEVOR1RIXzE2QklUOworCQlicmVhazsKKwljYXNl
IEhETUlfSTJTX01PREVfSTJTXzI0QklUOgorCQl2YWwgfD0gQ0ZHMF9JMlNfTU9ERV9JMlMgfCBD
RkcwX1dfTEVOR1RIXzI0QklUOworCQlicmVhazsKKwljYXNlIEhETUlfSTJTX01PREVfSTJTXzE2
QklUOgorCQl2YWwgfD0gQ0ZHMF9JMlNfTU9ERV9JMlMgfCBDRkcwX1dfTEVOR1RIXzE2QklUOwor
CQlicmVhazsKKwl9CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0NGRzAsIHZhbCk7Cit9CisK
K3N0YXRpYyB2b2lkIG10a19oZG1pX2h3X2F1ZGlvX2NvbmZpZyhzdHJ1Y3QgbXRrX2hkbWkgKmhk
bWksIGJvb2wgZHN0KQoreworCWNvbnN0IHU4IG1hc2sgPSBISUdIX0JJVF9SQVRFIHwgRFNUX05P
Uk1BTF9ET1VCTEUgfCBTQUNEX0RTVCB8IERTRF9TRUw7CisJdTggdmFsOworCisJLyogRGlzYWJs
ZSBoaWdoIGJpdHJhdGUsIHNldCBEU1QgcGFja2V0IG5vcm1hbC9kb3VibGUgKi8KKwltdGtfaGRt
aV9jbGVhcl9iaXRzKGhkbWksIEdSTF9BT1VUX0NGRywgSElHSF9CSVRfUkFURV9QQUNLRVRfQUxJ
R04pOworCisJaWYgKGRzdCkKKwkJdmFsID0gRFNUX05PUk1BTF9ET1VCTEUgfCBTQUNEX0RTVDsK
KwllbHNlCisJCXZhbCA9IDA7CisKKwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9BVURJT19DRkcs
IHZhbCwgbWFzayk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfaTJzX2No
YW5fbnVtKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkJZW51bSBoZG1pX2F1ZF9jaGFubmVs
X3R5cGUgY2hhbm5lbF90eXBlLAorCQkJCQl1OCBjaGFubmVsX2NvdW50KQoreworCXVuc2lnbmVk
IGludCBjaF9zd2l0Y2g7CisJdTggaTJzX3V2OworCisJY2hfc3dpdGNoID0gQ0hfU1dJVENIKDcs
IDcpIHwgQ0hfU1dJVENIKDYsIDYpIHwKKwkJICAgIENIX1NXSVRDSCg1LCA1KSB8IENIX1NXSVRD
SCg0LCA0KSB8CisJCSAgICBDSF9TV0lUQ0goMywgMykgfCBDSF9TV0lUQ0goMSwgMikgfAorCQkg
ICAgQ0hfU1dJVENIKDIsIDEpIHwgQ0hfU1dJVENIKDAsIDApOworCisJaWYgKGNoYW5uZWxfY291
bnQgPT0gMikgeworCQlpMnNfdXYgPSBJMlNfVVZfQ0hfRU4oMCk7CisJfSBlbHNlIGlmIChjaGFu
bmVsX2NvdW50ID09IDMgfHwgY2hhbm5lbF9jb3VudCA9PSA0KSB7CisJCWlmIChjaGFubmVsX2Nv
dW50ID09IDQgJiYKKwkJICAgIChjaGFubmVsX3R5cGUgPT0gSERNSV9BVURfQ0hBTl9UWVBFXzNf
MF9MUlMgfHwKKwkJICAgIGNoYW5uZWxfdHlwZSA9PSBIRE1JX0FVRF9DSEFOX1RZUEVfNF8wKSkK
KwkJCWkyc191diA9IEkyU19VVl9DSF9FTigyKSB8IEkyU19VVl9DSF9FTigwKTsKKwkJZWxzZQor
CQkJaTJzX3V2ID0gSTJTX1VWX0NIX0VOKDMpIHwgSTJTX1VWX0NIX0VOKDIpOworCX0gZWxzZSBp
ZiAoY2hhbm5lbF9jb3VudCA9PSA2IHx8IGNoYW5uZWxfY291bnQgPT0gNSkgeworCQlpZiAoY2hh
bm5lbF9jb3VudCA9PSA2ICYmCisJCSAgICBjaGFubmVsX3R5cGUgIT0gSERNSV9BVURfQ0hBTl9U
WVBFXzVfMSAmJgorCQkgICAgY2hhbm5lbF90eXBlICE9IEhETUlfQVVEX0NIQU5fVFlQRV80XzFf
Q0xSUykgeworCQkJaTJzX3V2ID0gSTJTX1VWX0NIX0VOKDMpIHwgSTJTX1VWX0NIX0VOKDIpIHwK
KwkJCQkgSTJTX1VWX0NIX0VOKDEpIHwgSTJTX1VWX0NIX0VOKDApOworCQl9IGVsc2UgeworCQkJ
aTJzX3V2ID0gSTJTX1VWX0NIX0VOKDIpIHwgSTJTX1VWX0NIX0VOKDEpIHwKKwkJCQkgSTJTX1VW
X0NIX0VOKDApOworCQl9CisJfSBlbHNlIGlmIChjaGFubmVsX2NvdW50ID09IDggfHwgY2hhbm5l
bF9jb3VudCA9PSA3KSB7CisJCWkyc191diA9IEkyU19VVl9DSF9FTigzKSB8IEkyU19VVl9DSF9F
TigyKSB8CisJCQkgSTJTX1VWX0NIX0VOKDEpIHwgSTJTX1VWX0NIX0VOKDApOworCX0gZWxzZSB7
CisJCWkyc191diA9IEkyU19VVl9DSF9FTigwKTsKKwl9CisKKwltdGtfaGRtaV93cml0ZShoZG1p
LCBHUkxfQ0hfU1cwLCBjaF9zd2l0Y2ggJiAweGZmKTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBH
UkxfQ0hfU1cxLCAoY2hfc3dpdGNoID4+IDgpICYgMHhmZik7CisJbXRrX2hkbWlfd3JpdGUoaGRt
aSwgR1JMX0NIX1NXMiwgKGNoX3N3aXRjaCA+PiAxNikgJiAweGZmKTsKKwltdGtfaGRtaV93cml0
ZShoZG1pLCBHUkxfSTJTX1VWLCBpMnNfdXYpOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9o
d19hdWRfc2V0X2lucHV0X3R5cGUoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCQkgICBlbnVt
IGhkbWlfYXVkX2lucHV0X3R5cGUgaW5wdXRfdHlwZSkKK3sKKwl1MzIgdmFsOworCisJdmFsID0g
bXRrX2hkbWlfcmVhZChoZG1pLCBHUkxfQ0ZHMSk7CisJaWYgKGlucHV0X3R5cGUgPT0gSERNSV9B
VURfSU5QVVRfSTJTICYmCisJICAgICh2YWwgJiBDRkcxX1NQRElGKSA9PSBDRkcxX1NQRElGKSB7
CisJCXZhbCAmPSB+Q0ZHMV9TUERJRjsKKwl9IGVsc2UgaWYgKGlucHV0X3R5cGUgPT0gSERNSV9B
VURfSU5QVVRfU1BESUYgJiYKKwkJKHZhbCAmIENGRzFfU1BESUYpID09IDApIHsKKwkJdmFsIHw9
IENGRzFfU1BESUY7CisJfQorCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9DRkcxLCB2YWwpOwor
fQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X2NoYW5uZWxfc3RhdHVzKHN0cnVj
dCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkJICAgICAgIHU4ICpjaGFubmVsX3N0YXR1cykKK3sKKwlp
bnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKwkJbXRrX2hkbWlfd3JpdGUoaGRt
aSwgR1JMX0kyU19DX1NUQTAgKyBpICogNCwgY2hhbm5lbF9zdGF0dXNbaV0pOworCQltdGtfaGRt
aV93cml0ZShoZG1pLCBHUkxfTF9TVEFUVVNfMCArIGkgKiA0LCBjaGFubmVsX3N0YXR1c1tpXSk7
CisJCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9SX1NUQVRVU18wICsgaSAqIDQsIGNoYW5uZWxf
c3RhdHVzW2ldKTsKKwl9CisJZm9yICg7IGkgPCAyNDsgaSsrKSB7CisJCW10a19oZG1pX3dyaXRl
KGhkbWksIEdSTF9MX1NUQVRVU18wICsgaSAqIDQsIDApOworCQltdGtfaGRtaV93cml0ZShoZG1p
LCBHUkxfUl9TVEFUVVNfMCArIGkgKiA0LCAwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG10a19o
ZG1pX2h3X2F1ZF9zcmNfcmVlbmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pKQoreworCXUzMiB2
YWw7CisKKwl2YWwgPSBtdGtfaGRtaV9yZWFkKGhkbWksIEdSTF9NSVhfQ1RSTCk7CisJaWYgKHZh
bCAmIE1JWF9DVFJMX1NSQ19FTikgeworCQl2YWwgJj0gfk1JWF9DVFJMX1NSQ19FTjsKKwkJbXRr
X2hkbWlfd3JpdGUoaGRtaSwgR1JMX01JWF9DVFJMLCB2YWwpOworCQl1c2xlZXBfcmFuZ2UoMjU1
LCA1MTIpOworCQl2YWwgfD0gTUlYX0NUUkxfU1JDX0VOOworCQltdGtfaGRtaV93cml0ZShoZG1p
LCBHUkxfTUlYX0NUUkwsIHZhbCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9od19h
dWRfc3JjX2Rpc2FibGUoc3RydWN0IG10a19oZG1pICpoZG1pKQoreworCXUzMiB2YWw7CisKKwl2
YWwgPSBtdGtfaGRtaV9yZWFkKGhkbWksIEdSTF9NSVhfQ1RSTCk7CisJdmFsICY9IH5NSVhfQ1RS
TF9TUkNfRU47CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX01JWF9DVFJMLCB2YWwpOworCW10
a19oZG1pX3dyaXRlKGhkbWksIEdSTF9TSElGVF9MMSwgMHgwMCk7Cit9CisKK3N0YXRpYyB2b2lk
IG10a19oZG1pX2h3X2F1ZF9zZXRfbWNsayhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJICAg
ICBlbnVtIGhkbWlfYXVkX21jbGsgbWNsaykKK3sKKwl1MzIgdmFsOworCisJdmFsID0gbXRrX2hk
bWlfcmVhZChoZG1pLCBHUkxfQ0ZHNSk7CisJdmFsICY9IENGRzVfQ0RfUkFUSU9fTUFTSzsKKwor
CXN3aXRjaCAobWNsaykgeworCWNhc2UgSERNSV9BVURfTUNMS18xMjhGUzoKKwkJdmFsIHw9IENG
RzVfRlMxMjg7CisJCWJyZWFrOworCWNhc2UgSERNSV9BVURfTUNMS18yNTZGUzoKKwkJdmFsIHw9
IENGRzVfRlMyNTY7CisJCWJyZWFrOworCWNhc2UgSERNSV9BVURfTUNMS18zODRGUzoKKwkJdmFs
IHw9IENGRzVfRlMzODQ7CisJCWJyZWFrOworCWNhc2UgSERNSV9BVURfTUNMS181MTJGUzoKKwkJ
dmFsIHw9IENGRzVfRlM1MTI7CisJCWJyZWFrOworCWNhc2UgSERNSV9BVURfTUNMS183NjhGUzoK
KwkJdmFsIHw9IENGRzVfRlM3Njg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXZhbCB8PSBDRkc1
X0ZTMjU2OworCQlicmVhazsKKwl9CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0NGRzUsIHZh
bCk7Cit9CisKK3N0cnVjdCBoZG1pX2Fjcl9uIHsKKwl1bnNpZ25lZCBpbnQgY2xvY2s7CisJdW5z
aWduZWQgaW50IG5bM107Cit9OworCisvKiBSZWNvbW1lbmRlZCBOIHZhbHVlcyBmcm9tIEhETUkg
c3BlY2lmaWNhdGlvbiwgdGFibGVzIDctMSB0byA3LTMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg
aGRtaV9hY3JfbiBoZG1pX3JlY19uX3RhYmxlW10gPSB7CisJLyogQ2xvY2ssIE46IDMya0h6IDQ0
LjFrSHogNDhrSHogKi8KKwl7ICAyNTE3NSwgeyAgNDU3NiwgIDcwMDcsICA2ODY0IH0gfSwKKwl7
ICA3NDE3NiwgeyAxMTY0OCwgMTc4MzYsIDExNjQ4IH0gfSwKKwl7IDE0ODM1MiwgeyAxMTY0OCwg
IDg5MTgsICA1ODI0IH0gfSwKKwl7IDI5NjcwMywgeyAgNTgyNCwgIDQ0NTksICA1ODI0IH0gfSwK
Kwl7IDI5NzAwMCwgeyAgMzA3MiwgIDQ3MDQsICA1MTIwIH0gfSwKKwl7ICAgICAgMCwgeyAgNDA5
NiwgIDYyNzIsICA2MTQ0IH0gfSwgLyogYWxsIG90aGVyIFRNRFMgY2xvY2tzICovCit9OworCisv
KioKKyAqIGhkbWlfcmVjb21tZW5kZWRfbigpIC0gUmV0dXJuIE4gdmFsdWUgcmVjb21tZW5kZWQg
YnkgSERNSSBzcGVjaWZpY2F0aW9uCisgKiBAZnJlcTogYXVkaW8gc2FtcGxlIHJhdGUgaW4gSHoK
KyAqIEBjbG9jazogcm91bmRlZCBUTURTIGNsb2NrIGluIGtIegorICovCitzdGF0aWMgdW5zaWdu
ZWQgaW50IGhkbWlfcmVjb21tZW5kZWRfbih1bnNpZ25lZCBpbnQgZnJlcSwgdW5zaWduZWQgaW50
IGNsb2NrKQoreworCWNvbnN0IHN0cnVjdCBoZG1pX2Fjcl9uICpyZWNvbW1lbmRlZDsKKwl1bnNp
Z25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGhkbWlfcmVjX25fdGFi
bGUpIC0gMTsgaSsrKSB7CisJCWlmIChjbG9jayA9PSBoZG1pX3JlY19uX3RhYmxlW2ldLmNsb2Nr
KQorCQkJYnJlYWs7CisJfQorCXJlY29tbWVuZGVkID0gaGRtaV9yZWNfbl90YWJsZSArIGk7CisK
Kwlzd2l0Y2ggKGZyZXEpIHsKKwljYXNlIDMyMDAwOgorCQlyZXR1cm4gcmVjb21tZW5kZWQtPm5b
MF07CisJY2FzZSA0NDEwMDoKKwkJcmV0dXJuIHJlY29tbWVuZGVkLT5uWzFdOworCWNhc2UgNDgw
MDA6CisJCXJldHVybiByZWNvbW1lbmRlZC0+blsyXTsKKwljYXNlIDg4MjAwOgorCQlyZXR1cm4g
cmVjb21tZW5kZWQtPm5bMV0gKiAyOworCWNhc2UgOTYwMDA6CisJCXJldHVybiByZWNvbW1lbmRl
ZC0+blsyXSAqIDI7CisJY2FzZSAxNzY0MDA6CisJCXJldHVybiByZWNvbW1lbmRlZC0+blsxXSAq
IDQ7CisJY2FzZSAxOTIwMDA6CisJCXJldHVybiByZWNvbW1lbmRlZC0+blsyXSAqIDQ7CisJZGVm
YXVsdDoKKwkJcmV0dXJuICgxMjggKiBmcmVxKSAvIDEwMDA7CisJfQorfQorCitzdGF0aWMgdW5z
aWduZWQgaW50IGhkbWlfbW9kZV9jbG9ja190b19oeih1bnNpZ25lZCBpbnQgY2xvY2spCit7CisJ
c3dpdGNoIChjbG9jaykgeworCWNhc2UgMjUxNzU6CisJCXJldHVybiAyNTE3NDgyNTsJLyogMjUu
Mi8xLjAwMSBNSHogKi8KKwljYXNlIDc0MTc2OgorCQlyZXR1cm4gNzQxNzU4MjQ7CS8qIDc0LjI1
LzEuMDAxIE1IeiAqLworCWNhc2UgMTQ4MzUyOgorCQlyZXR1cm4gMTQ4MzUxNjQ4OwkvKiAxNDgu
NS8xLjAwMSBNSHogKi8KKwljYXNlIDI5NjcwMzoKKwkJcmV0dXJuIDI5NjcwMzI5NzsJLyogMjk3
LzEuMDAxIE1IeiAqLworCWRlZmF1bHQ6CisJCXJldHVybiBjbG9jayAqIDEwMDA7CisJfQorfQor
CitzdGF0aWMgdW5zaWduZWQgaW50IGhkbWlfZXhwZWN0ZWRfY3RzKHVuc2lnbmVkIGludCBhdWRp
b19zYW1wbGVfcmF0ZSwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgdG1kc19jbG9jaywgdW5zaWdu
ZWQgaW50IG4pCit7CisJcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUX1VMTCgodTY0KWhkbWlfbW9k
ZV9jbG9ja190b19oeih0bWRzX2Nsb2NrKSAqIG4sCisJCQkJICAgICAxMjggKiBhdWRpb19zYW1w
bGVfcmF0ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRvX2hkbWlfaHdfYXVkX3NldF9uY3RzKHN0cnVj
dCBtdGtfaGRtaSAqaGRtaSwgdW5zaWduZWQgaW50IG4sCisJCQkJICAgIHVuc2lnbmVkIGludCBj
dHMpCit7CisJdW5zaWduZWQgY2hhciB2YWxbTkNUU19CWVRFU107CisJaW50IGk7CisKKwltdGtf
aGRtaV93cml0ZShoZG1pLCBHUkxfTkNUUywgMCk7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JM
X05DVFMsIDApOworCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9OQ1RTLCAwKTsKKwltZW1zZXQo
dmFsLCAwLCBzaXplb2YodmFsKSk7CisKKwl2YWxbMF0gPSAoY3RzID4+IDI0KSAmIDB4ZmY7CisJ
dmFsWzFdID0gKGN0cyA+PiAxNikgJiAweGZmOworCXZhbFsyXSA9IChjdHMgPj4gOCkgJiAweGZm
OworCXZhbFszXSA9IGN0cyAmIDB4ZmY7CisKKwl2YWxbNF0gPSAobiA+PiAxNikgJiAweGZmOwor
CXZhbFs1XSA9IChuID4+IDgpICYgMHhmZjsKKwl2YWxbNl0gPSBuICYgMHhmZjsKKworCWZvciAo
aSA9IDA7IGkgPCBOQ1RTX0JZVEVTOyBpKyspCisJCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9O
Q1RTLCB2YWxbaV0pOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X25jdHMo
c3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCSAgICAgdW5zaWduZWQgaW50IHNhbXBsZV9yYXRl
LAorCQkJCSAgICAgdW5zaWduZWQgaW50IGNsb2NrKQoreworCXVuc2lnbmVkIGludCBuLCBjdHM7
CisKKwluID0gaGRtaV9yZWNvbW1lbmRlZF9uKHNhbXBsZV9yYXRlLCBjbG9jayk7CisJY3RzID0g
aGRtaV9leHBlY3RlZF9jdHMoc2FtcGxlX3JhdGUsIGNsb2NrLCBuKTsKKworCWRldl9kYmcoaGRt
aS0+ZGV2LCAiJXM6IHNhbXBsZV9yYXRlPSV1LCBjbG9jaz0lZCwgY3RzPSV1LCBuPSV1XG4iLAor
CQlfX2Z1bmNfXywgc2FtcGxlX3JhdGUsIGNsb2NrLCBuLCBjdHMpOworCisJbXRrX2hkbWlfbWFz
ayhoZG1pLCBEVU1NWV8zMDQsIEFVRElPX0kyU19OQ1RTX1NFTF82NCwKKwkJICAgICAgQVVESU9f
STJTX05DVFNfU0VMKTsKKwlkb19oZG1pX2h3X2F1ZF9zZXRfbmN0cyhoZG1pLCBuLCBjdHMpOwor
fQorCitzdGF0aWMgdTggbXRrX2hkbWlfYXVkX2dldF9jaG5sX2NvdW50KGVudW0gaGRtaV9hdWRf
Y2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSkKK3sKKwlzd2l0Y2ggKGNoYW5uZWxfdHlwZSkgewor
CWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzFfMDoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV8x
XzE6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfMl8wOgorCQlyZXR1cm4gMjsKKwljYXNlIEhE
TUlfQVVEX0NIQU5fVFlQRV8yXzE6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfM18wOgorCQly
ZXR1cm4gMzsKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV8zXzE6CisJY2FzZSBIRE1JX0FVRF9D
SEFOX1RZUEVfNF8wOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzNfMF9MUlM6CisJCXJldHVy
biA0OworCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzRfMToKKwljYXNlIEhETUlfQVVEX0NIQU5f
VFlQRV81XzA6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfM18xX0xSUzoKKwljYXNlIEhETUlf
QVVEX0NIQU5fVFlQRV80XzBfQ0xSUzoKKwkJcmV0dXJuIDU7CisJY2FzZSBIRE1JX0FVRF9DSEFO
X1RZUEVfNV8xOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzZfMDoKKwljYXNlIEhETUlfQVVE
X0NIQU5fVFlQRV80XzFfQ0xSUzoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV82XzBfQ1M6CisJ
Y2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNl8wX0NIOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBF
XzZfMF9PSDoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV82XzBfQ0hSOgorCQlyZXR1cm4gNjsK
KwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV82XzE6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVf
Nl8xX0NTOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzZfMV9DSDoKKwljYXNlIEhETUlfQVVE
X0NIQU5fVFlQRV82XzFfT0g6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNl8xX0NIUjoKKwlj
YXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzA6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18w
X0xIX1JIOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MU1JfUlNSOgorCWNhc2UgSERN
SV9BVURfQ0hBTl9UWVBFXzdfMF9MQ19SQzoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzBf
TFdfUlc6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xTRF9SU0Q6CisJY2FzZSBIRE1J
X0FVRF9DSEFOX1RZUEVfN18wX0xTU19SU1M6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18w
X0xIU19SSFM6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0NTX0NIOgorCWNhc2UgSERN
SV9BVURfQ0hBTl9UWVBFXzdfMF9DU19PSDoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzBf
Q1NfQ0hSOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9DSF9PSDoKKwljYXNlIEhETUlf
QVVEX0NIQU5fVFlQRV83XzBfQ0hfQ0hSOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9P
SF9DSFI6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xTU19SU1NfTFNSX1JTUjoKKwlj
YXNlIEhETUlfQVVEX0NIQU5fVFlQRV84XzBfTEhfUkhfQ1M6CisJCXJldHVybiA3OworCWNhc2Ug
SERNSV9BVURfQ0hBTl9UWVBFXzdfMToKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzFfTEhf
Ukg6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xTUl9SU1I6CisJY2FzZSBIRE1JX0FV
RF9DSEFOX1RZUEVfN18xX0xDX1JDOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9MV19S
VzoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzFfTFNEX1JTRDoKKwljYXNlIEhETUlfQVVE
X0NIQU5fVFlQRV83XzFfTFNTX1JTUzoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzFfTEhT
X1JIUzoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzFfQ1NfQ0g6CisJY2FzZSBIRE1JX0FV
RF9DSEFOX1RZUEVfN18xX0NTX09IOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9DU19D
SFI6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0NIX09IOgorCWNhc2UgSERNSV9BVURf
Q0hBTl9UWVBFXzdfMV9DSF9DSFI6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX09IX0NI
UjoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzFfTFNTX1JTU19MU1JfUlNSOgorCQlyZXR1
cm4gODsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMjsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hk
bWlfdmlkZW9fY2hhbmdlX3ZwbGwoc3RydWN0IG10a19oZG1pICpoZG1pLCB1MzIgY2xvY2spCit7
CisJdW5zaWduZWQgbG9uZyByYXRlOworCWludCByZXQ7CisKKwkvKiBUaGUgRFBJIGRyaXZlciBh
bHJlYWR5IHNob3VsZCBoYXZlIHNldCBUVkRQTEwgdG8gdGhlIGNvcnJlY3QgcmF0ZSAqLworCXJl
dCA9IGNsa19zZXRfcmF0ZShoZG1pLT5jbGtbTVRLX0hETUlfQ0xLX0hETUlfUExMXSwgY2xvY2sp
OworCWlmIChyZXQpIHsKKwkJZGV2X2VycihoZG1pLT5kZXYsICJGYWlsZWQgdG8gc2V0IFBMTCB0
byAldSBIejogJWRcbiIsIGNsb2NrLAorCQkJcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwly
YXRlID0gY2xrX2dldF9yYXRlKGhkbWktPmNsa1tNVEtfSERNSV9DTEtfSERNSV9QTExdKTsKKwor
CWlmIChESVZfUk9VTkRfQ0xPU0VTVChyYXRlLCAxMDAwKSAhPSBESVZfUk9VTkRfQ0xPU0VTVChj
bG9jaywgMTAwMCkpCisJCWRldl93YXJuKGhkbWktPmRldiwgIldhbnQgUExMICV1IEh6LCBnb3Qg
JWx1IEh6XG4iLCBjbG9jaywKKwkJCSByYXRlKTsKKwllbHNlCisJCWRldl9kYmcoaGRtaS0+ZGV2
LCAiV2FudCBQTEwgJXUgSHosIGdvdCAlbHUgSHpcbiIsIGNsb2NrLCByYXRlKTsKKworCW10a19o
ZG1pX2h3X2NvbmZpZ19zeXMoaGRtaSk7CisJbXRrX2hkbWlfaHdfc2V0X2RlZXBfY29sb3JfbW9k
ZShoZG1pKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfdmlkZW9fc2V0
X2Rpc3BsYXlfbW9kZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJCSAgICBzdHJ1Y3QgZHJt
X2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwltdGtfaGRtaV9od19yZXNldChoZG1pKTsKKwltdGtf
aGRtaV9od19lbmFibGVfbm90aWNlKGhkbWksIHRydWUpOworCW10a19oZG1pX2h3X3dyaXRlX2lu
dF9tYXNrKGhkbWksIDB4ZmYpOworCW10a19oZG1pX2h3X2VuYWJsZV9kdmlfbW9kZShoZG1pLCBo
ZG1pLT5kdmlfbW9kZSk7CisJbXRrX2hkbWlfaHdfbmN0c19hdXRvX3dyaXRlX2VuYWJsZShoZG1p
LCB0cnVlKTsKKworCW10a19oZG1pX2h3X21zaWNfc2V0dGluZyhoZG1pLCBtb2RlKTsKK30KKwor
c3RhdGljIGludCBtdGtfaGRtaV9hdWRfZW5hYmxlX3BhY2tldChzdHJ1Y3QgbXRrX2hkbWkgKmhk
bWksIGJvb2wgZW5hYmxlKQoreworCW10a19oZG1pX2h3X3NlbmRfYXVkX3BhY2tldChoZG1pLCBl
bmFibGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX2F1ZF9vbl9vZmZf
aHdfbmN0cyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgb24pCit7CisJbXRrX2hkbWlfaHdf
bmN0c19lbmFibGUoaGRtaSwgb24pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19o
ZG1pX2F1ZF9zZXRfaW5wdXQoc3RydWN0IG10a19oZG1pICpoZG1pKQoreworCWVudW0gaGRtaV9h
dWRfY2hhbm5lbF90eXBlIGNoYW5fdHlwZTsKKwl1OCBjaGFuX2NvdW50OworCWJvb2wgZHN0Owor
CisJbXRrX2hkbWlfaHdfYXVkX3NldF9jaGFubmVsX3N3YXAoaGRtaSwgSERNSV9BVURfU1dBUF9M
RkVfQ0MpOworCW10a19oZG1pX3NldF9iaXRzKGhkbWksIEdSTF9NSVhfQ1RSTCwgTUlYX0NUUkxf
RkxBVCk7CisKKwlpZiAoaGRtaS0+YXVkX3BhcmFtLmF1ZF9pbnB1dF90eXBlID09IEhETUlfQVVE
X0lOUFVUX1NQRElGICYmCisJICAgIGhkbWktPmF1ZF9wYXJhbS5hdWRfY29kZWMgPT0gSERNSV9B
VURJT19DT0RJTkdfVFlQRV9EU1QpIHsKKwkJbXRrX2hkbWlfaHdfYXVkX3NldF9iaXRfbnVtKGhk
bWksIEhETUlfQVVESU9fU0FNUExFX1NJWkVfMjQpOworCX0gZWxzZSBpZiAoaGRtaS0+YXVkX3Bh
cmFtLmF1ZF9pMnNfZm10ID09IEhETUlfSTJTX01PREVfTEpUXzI0QklUKSB7CisJCWhkbWktPmF1
ZF9wYXJhbS5hdWRfaTJzX2ZtdCA9IEhETUlfSTJTX01PREVfTEpUXzE2QklUOworCX0KKworCW10
a19oZG1pX2h3X2F1ZF9zZXRfaTJzX2ZtdChoZG1pLCBoZG1pLT5hdWRfcGFyYW0uYXVkX2kyc19m
bXQpOworCW10a19oZG1pX2h3X2F1ZF9zZXRfYml0X251bShoZG1pLCBIRE1JX0FVRElPX1NBTVBM
RV9TSVpFXzI0KTsKKworCWRzdCA9ICgoaGRtaS0+YXVkX3BhcmFtLmF1ZF9pbnB1dF90eXBlID09
IEhETUlfQVVEX0lOUFVUX1NQRElGKSAmJgorCSAgICAgICAoaGRtaS0+YXVkX3BhcmFtLmF1ZF9j
b2RlYyA9PSBIRE1JX0FVRElPX0NPRElOR19UWVBFX0RTVCkpOworCW10a19oZG1pX2h3X2F1ZGlv
X2NvbmZpZyhoZG1pLCBkc3QpOworCisJaWYgKGhkbWktPmF1ZF9wYXJhbS5hdWRfaW5wdXRfdHlw
ZSA9PSBIRE1JX0FVRF9JTlBVVF9TUERJRikKKwkJY2hhbl90eXBlID0gSERNSV9BVURfQ0hBTl9U
WVBFXzJfMDsKKwllbHNlCisJCWNoYW5fdHlwZSA9IGhkbWktPmF1ZF9wYXJhbS5hdWRfaW5wdXRf
Y2hhbl90eXBlOworCWNoYW5fY291bnQgPSBtdGtfaGRtaV9hdWRfZ2V0X2NobmxfY291bnQoY2hh
bl90eXBlKTsKKwltdGtfaGRtaV9od19hdWRfc2V0X2kyc19jaGFuX251bShoZG1pLCBjaGFuX3R5
cGUsIGNoYW5fY291bnQpOworCW10a19oZG1pX2h3X2F1ZF9zZXRfaW5wdXRfdHlwZShoZG1pLCBo
ZG1pLT5hdWRfcGFyYW0uYXVkX2lucHV0X3R5cGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp
YyBpbnQgbXRrX2hkbWlfYXVkX3NldF9zcmMoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCXN0
cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkaXNwbGF5X21vZGUpCit7CisJdW5zaWduZWQgaW50IHNh
bXBsZV9yYXRlID0gaGRtaS0+YXVkX3BhcmFtLmNvZGVjX3BhcmFtcy5zYW1wbGVfcmF0ZTsKKwor
CW10a19oZG1pX2F1ZF9vbl9vZmZfaHdfbmN0cyhoZG1pLCBmYWxzZSk7CisJbXRrX2hkbWlfaHdf
YXVkX3NyY19kaXNhYmxlKGhkbWkpOworCW10a19oZG1pX2NsZWFyX2JpdHMoaGRtaSwgR1JMX0NG
RzIsIENGRzJfQUNMS19JTlYpOworCisJaWYgKGhkbWktPmF1ZF9wYXJhbS5hdWRfaW5wdXRfdHlw
ZSA9PSBIRE1JX0FVRF9JTlBVVF9JMlMpIHsKKwkJc3dpdGNoIChzYW1wbGVfcmF0ZSkgeworCQlj
YXNlIDMyMDAwOgorCQljYXNlIDQ0MTAwOgorCQljYXNlIDQ4MDAwOgorCQljYXNlIDg4MjAwOgor
CQljYXNlIDk2MDAwOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsK
KwkJfQorCQltdGtfaGRtaV9od19hdWRfc2V0X21jbGsoaGRtaSwgaGRtaS0+YXVkX3BhcmFtLmF1
ZF9tY2xrKTsKKwl9IGVsc2UgeworCQlzd2l0Y2ggKHNhbXBsZV9yYXRlKSB7CisJCWNhc2UgMzIw
MDA6CisJCWNhc2UgNDQxMDA6CisJCWNhc2UgNDgwMDA6CisJCQlicmVhazsKKwkJZGVmYXVsdDoK
KwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCW10a19oZG1pX2h3X2F1ZF9zZXRfbWNsayhoZG1p
LCBIRE1JX0FVRF9NQ0xLXzEyOEZTKTsKKwl9CisKKwltdGtfaGRtaV9od19hdWRfc2V0X25jdHMo
aGRtaSwgc2FtcGxlX3JhdGUsIGRpc3BsYXlfbW9kZS0+Y2xvY2spOworCisJbXRrX2hkbWlfaHdf
YXVkX3NyY19yZWVuYWJsZShoZG1pKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtf
aGRtaV9hdWRfb3V0cHV0X2NvbmZpZyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJICAgICAg
c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRpc3BsYXlfbW9kZSkKK3sKKwltdGtfaGRtaV9od19h
dWRfbXV0ZShoZG1pKTsKKwltdGtfaGRtaV9hdWRfZW5hYmxlX3BhY2tldChoZG1pLCBmYWxzZSk7
CisKKwltdGtfaGRtaV9hdWRfc2V0X2lucHV0KGhkbWkpOworCW10a19oZG1pX2F1ZF9zZXRfc3Jj
KGhkbWksIGRpc3BsYXlfbW9kZSk7CisJbXRrX2hkbWlfaHdfYXVkX3NldF9jaGFubmVsX3N0YXR1
cyhoZG1pLAorCQkJaGRtaS0+YXVkX3BhcmFtLmNvZGVjX3BhcmFtcy5pZWMuc3RhdHVzKTsKKwor
CXVzbGVlcF9yYW5nZSg1MCwgMTAwKTsKKworCW10a19oZG1pX2F1ZF9vbl9vZmZfaHdfbmN0cyho
ZG1pLCB0cnVlKTsKKwltdGtfaGRtaV9hdWRfZW5hYmxlX3BhY2tldChoZG1pLCB0cnVlKTsKKwlt
dGtfaGRtaV9od19hdWRfdW5tdXRlKGhkbWkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50
IG10a19oZG1pX3NldHVwX2F2aV9pbmZvZnJhbWUoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJ
CQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlzdHJ1Y3QgaGRtaV9hdmlfaW5m
b2ZyYW1lIGZyYW1lOworCXU4IGJ1ZmZlclsxN107CisJc3NpemVfdCBlcnI7CisKKwllcnIgPSBk
cm1faGRtaV9hdmlfaW5mb2ZyYW1lX2Zyb21fZGlzcGxheV9tb2RlKCZmcmFtZSwgbW9kZSk7CisJ
aWYgKGVyciA8IDApIHsKKwkJZGV2X2VycihoZG1pLT5kZXYsCisJCQkiRmFpbGVkIHRvIGdldCBB
VkkgaW5mb2ZyYW1lIGZyb20gbW9kZTogJXpkXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0K
KworCWVyciA9IGhkbWlfYXZpX2luZm9mcmFtZV9wYWNrKCZmcmFtZSwgYnVmZmVyLCBzaXplb2Yo
YnVmZmVyKSk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycihoZG1pLT5kZXYsICJGYWlsZWQg
dG8gcGFjayBBVkkgaW5mb2ZyYW1lOiAlemRcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQor
CisJbXRrX2hkbWlfaHdfc2VuZF9pbmZvX2ZyYW1lKGhkbWksIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZl
cikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX3NldHVwX3NwZF9pbmZv
ZnJhbWUoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCQljb25zdCBjaGFyICp2ZW5kb3IsCisJ
CQkJCWNvbnN0IGNoYXIgKnByb2R1Y3QpCit7CisJc3RydWN0IGhkbWlfc3BkX2luZm9mcmFtZSBm
cmFtZTsKKwl1OCBidWZmZXJbMjldOworCXNzaXplX3QgZXJyOworCisJZXJyID0gaGRtaV9zcGRf
aW5mb2ZyYW1lX2luaXQoJmZyYW1lLCB2ZW5kb3IsIHByb2R1Y3QpOworCWlmIChlcnIgPCAwKSB7
CisJCWRldl9lcnIoaGRtaS0+ZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgU1BEIGluZm9mcmFt
ZTogJXpkXG4iLAorCQkJZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBoZG1pX3Nw
ZF9pbmZvZnJhbWVfcGFjaygmZnJhbWUsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworCWlmIChl
cnIgPCAwKSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LCAiRmFpbGVkIHRvIHBhY2sgU0RQIGluZm9m
cmFtZTogJXpkXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCW10a19oZG1pX2h3X3Nl
bmRfaW5mb19mcmFtZShoZG1pLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKwlyZXR1cm4gMDsK
K30KKworc3RhdGljIGludCBtdGtfaGRtaV9zZXR1cF9hdWRpb19pbmZvZnJhbWUoc3RydWN0IG10
a19oZG1pICpoZG1pKQoreworCXN0cnVjdCBoZG1pX2F1ZGlvX2luZm9mcmFtZSBmcmFtZTsKKwl1
OCBidWZmZXJbMTRdOworCXNzaXplX3QgZXJyOworCisJZXJyID0gaGRtaV9hdWRpb19pbmZvZnJh
bWVfaW5pdCgmZnJhbWUpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LCAi
RmFpbGVkIHRvIHNldHVwIGF1ZGlvIGluZm9mcmFtZTogJXpkXG4iLAorCQkJZXJyKTsKKwkJcmV0
dXJuIGVycjsKKwl9CisKKwlmcmFtZS5jb2RpbmdfdHlwZSA9IEhETUlfQVVESU9fQ09ESU5HX1RZ
UEVfU1RSRUFNOworCWZyYW1lLnNhbXBsZV9mcmVxdWVuY3kgPSBIRE1JX0FVRElPX1NBTVBMRV9G
UkVRVUVOQ1lfU1RSRUFNOworCWZyYW1lLnNhbXBsZV9zaXplID0gSERNSV9BVURJT19TQU1QTEVf
U0laRV9TVFJFQU07CisJZnJhbWUuY2hhbm5lbHMgPSBtdGtfaGRtaV9hdWRfZ2V0X2NobmxfY291
bnQoCisJCQkJCWhkbWktPmF1ZF9wYXJhbS5hdWRfaW5wdXRfY2hhbl90eXBlKTsKKworCWVyciA9
IGhkbWlfYXVkaW9faW5mb2ZyYW1lX3BhY2soJmZyYW1lLCBidWZmZXIsIHNpemVvZihidWZmZXIp
KTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKGhkbWktPmRldiwgIkZhaWxlZCB0byBwYWNr
IGF1ZGlvIGluZm9mcmFtZTogJXpkXG4iLAorCQkJZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisK
KwltdGtfaGRtaV9od19zZW5kX2luZm9fZnJhbWUoaGRtaSwgYnVmZmVyLCBzaXplb2YoYnVmZmVy
KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfc2V0dXBfdmVuZG9yX3Nw
ZWNpZmljX2luZm9mcmFtZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJCQlzdHJ1Y3QgZHJt
X2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlzdHJ1Y3QgaGRtaV92ZW5kb3JfaW5mb2ZyYW1lIGZy
YW1lOworCXU4IGJ1ZmZlclsxMF07CisJc3NpemVfdCBlcnI7CisKKwllcnIgPSBkcm1faGRtaV92
ZW5kb3JfaW5mb2ZyYW1lX2Zyb21fZGlzcGxheV9tb2RlKCZmcmFtZSwgbW9kZSk7CisJaWYgKGVy
cikgeworCQlkZXZfZXJyKGhkbWktPmRldiwKKwkJCSJGYWlsZWQgdG8gZ2V0IHZlbmRvciBpbmZv
ZnJhbWUgZnJvbSBtb2RlOiAlemRcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJy
ID0gaGRtaV92ZW5kb3JfaW5mb2ZyYW1lX3BhY2soJmZyYW1lLCBidWZmZXIsIHNpemVvZihidWZm
ZXIpKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LCAiRmFpbGVkIHRvIHBhY2sg
dmVuZG9yIGluZm9mcmFtZTogJXpkXG4iLAorCQkJZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisK
KwltdGtfaGRtaV9od19zZW5kX2luZm9fZnJhbWUoaGRtaSwgYnVmZmVyLCBzaXplb2YoYnVmZmVy
KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfb3V0cHV0X2luaXQoc3Ry
dWN0IG10a19oZG1pICpoZG1pKQoreworCXN0cnVjdCBoZG1pX2F1ZGlvX3BhcmFtICphdWRfcGFy
YW0gPSAmaGRtaS0+YXVkX3BhcmFtOworCisJaGRtaS0+Y3NwID0gSERNSV9DT0xPUlNQQUNFX1JH
QjsKKwlhdWRfcGFyYW0tPmF1ZF9jb2RlYyA9IEhETUlfQVVESU9fQ09ESU5HX1RZUEVfUENNOwor
CWF1ZF9wYXJhbS0+YXVkX3NhbXBlX3NpemUgPSBIRE1JX0FVRElPX1NBTVBMRV9TSVpFXzE2Owor
CWF1ZF9wYXJhbS0+YXVkX2lucHV0X3R5cGUgPSBIRE1JX0FVRF9JTlBVVF9JMlM7CisJYXVkX3Bh
cmFtLT5hdWRfaTJzX2ZtdCA9IEhETUlfSTJTX01PREVfSTJTXzI0QklUOworCWF1ZF9wYXJhbS0+
YXVkX21jbGsgPSBIRE1JX0FVRF9NQ0xLXzEyOEZTOworCWF1ZF9wYXJhbS0+YXVkX2lucHV0X2No
YW5fdHlwZSA9IEhETUlfQVVEX0NIQU5fVFlQRV8yXzA7CisKKwlyZXR1cm4gMDsKK30KKwordm9p
ZCBtdGtfaGRtaV9hdWRpb19lbmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pKQoreworCW10a19o
ZG1pX2F1ZF9lbmFibGVfcGFja2V0KGhkbWksIHRydWUpOworCWhkbWktPmF1ZGlvX2VuYWJsZSA9
IHRydWU7Cit9CisKK3ZvaWQgbXRrX2hkbWlfYXVkaW9fZGlzYWJsZShzdHJ1Y3QgbXRrX2hkbWkg
KmhkbWkpCit7CisJbXRrX2hkbWlfYXVkX2VuYWJsZV9wYWNrZXQoaGRtaSwgZmFsc2UpOworCWhk
bWktPmF1ZGlvX2VuYWJsZSA9IGZhbHNlOworfQorCitpbnQgbXRrX2hkbWlfYXVkaW9fc2V0X3Bh
cmFtKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCSAgICAgc3RydWN0IGhkbWlfYXVkaW9fcGFy
YW0gKnBhcmFtKQoreworCWlmICghaGRtaS0+YXVkaW9fZW5hYmxlKSB7CisJCWRldl9lcnIoaGRt
aS0+ZGV2LCAiaGRtaSBhdWRpbyBpcyBpbiBkaXNhYmxlIHN0YXRlIVxuIik7CisJCXJldHVybiAt
RUlOVkFMOworCX0KKwlkZXZfZGJnKGhkbWktPmRldiwgImNvZGVjOiVkLCBpbnB1dDolZCwgY2hh
bm5lbDolZCwgZnM6JWRcbiIsCisJCXBhcmFtLT5hdWRfY29kZWMsIHBhcmFtLT5hdWRfaW5wdXRf
dHlwZSwKKwkJcGFyYW0tPmF1ZF9pbnB1dF9jaGFuX3R5cGUsIHBhcmFtLT5jb2RlY19wYXJhbXMu
c2FtcGxlX3JhdGUpOworCW1lbWNweSgmaGRtaS0+YXVkX3BhcmFtLCBwYXJhbSwgc2l6ZW9mKCpw
YXJhbSkpOworCXJldHVybiBtdGtfaGRtaV9hdWRfb3V0cHV0X2NvbmZpZyhoZG1pLCAmaGRtaS0+
bW9kZSk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfb3V0cHV0X3NldF9kaXNwbGF5X21vZGUo
c3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUg
Km1vZGUpCit7CisJaW50IHJldDsKKworCW10a19oZG1pX2h3X3ZpZF9ibGFjayhoZG1pLCB0cnVl
KTsKKwltdGtfaGRtaV9od19hdWRfbXV0ZShoZG1pKTsKKwltdGtfaGRtaV9od19zZW5kX2F2X211
dGUoaGRtaSk7CisJcGh5X3Bvd2VyX29mZihoZG1pLT5waHkpOworCisJcmV0ID0gbXRrX2hkbWlf
dmlkZW9fY2hhbmdlX3ZwbGwoaGRtaSwKKwkJCQkJIG1vZGUtPmNsb2NrICogMTAwMCk7CisJaWYg
KHJldCkgeworCQlkZXZfZXJyKGhkbWktPmRldiwgIkZhaWxlZCB0byBzZXQgdnBsbDogJWRcbiIs
IHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCW10a19oZG1pX3ZpZGVvX3NldF9kaXNwbGF5X21v
ZGUoaGRtaSwgbW9kZSk7CisKKwlwaHlfcG93ZXJfb24oaGRtaS0+cGh5KTsKKwltdGtfaGRtaV9h
dWRfb3V0cHV0X2NvbmZpZyhoZG1pLCBtb2RlKTsKKworCW10a19oZG1pX3NldHVwX2F1ZGlvX2lu
Zm9mcmFtZShoZG1pKTsKKwltdGtfaGRtaV9zZXR1cF9hdmlfaW5mb2ZyYW1lKGhkbWksIG1vZGUp
OworCW10a19oZG1pX3NldHVwX3NwZF9pbmZvZnJhbWUoaGRtaSwgIm1lZGlhdGVrIiwgIk9uLWNo
aXAgSERNSSIpOworCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfM0RfTUFTSykKKwkJ
bXRrX2hkbWlfc2V0dXBfdmVuZG9yX3NwZWNpZmljX2luZm9mcmFtZShoZG1pLCBtb2RlKTsKKwor
CW10a19oZG1pX2h3X3ZpZF9ibGFjayhoZG1pLCBmYWxzZSk7CisJbXRrX2hkbWlfaHdfYXVkX3Vu
bXV0ZShoZG1pKTsKKwltdGtfaGRtaV9od19zZW5kX2F2X3VubXV0ZShoZG1pKTsKKworCXJldHVy
biAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG10a19oZG1pX2Nsa19uYW1lc1tN
VEtfSERNSV9DTEtfQ09VTlRdID0geworCVtNVEtfSERNSV9DTEtfSERNSV9QSVhFTF0gPSAicGl4
ZWwiLAorCVtNVEtfSERNSV9DTEtfSERNSV9QTExdID0gInBsbCIsCisJW01US19IRE1JX0NMS19B
VURfQkNMS10gPSAiYmNsayIsCisJW01US19IRE1JX0NMS19BVURfU1BESUZdID0gInNwZGlmIiwK
K307CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfZ2V0X2FsbF9jbGsoc3RydWN0IG10a19oZG1pICpo
ZG1pLAorCQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJaW50IGk7CisKKwlmb3IgKGkg
PSAwOyBpIDwgQVJSQVlfU0laRShtdGtfaGRtaV9jbGtfbmFtZXMpOyBpKyspIHsKKwkJaGRtaS0+
Y2xrW2ldID0gb2ZfY2xrX2dldF9ieV9uYW1lKG5wLAorCQkJCQkJICBtdGtfaGRtaV9jbGtfbmFt
ZXNbaV0pOworCQlpZiAoSVNfRVJSKGhkbWktPmNsa1tpXSkpCisJCQlyZXR1cm4gUFRSX0VSUiho
ZG1pLT5jbGtbaV0pOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9j
bGtfZW5hYmxlX2F1ZGlvKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwlpbnQgcmV0OworCisJ
cmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGhkbWktPmNsa1tNVEtfSERNSV9DTEtfQVVEX0JDTEtd
KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxl
KGhkbWktPmNsa1tNVEtfSERNSV9DTEtfQVVEX1NQRElGXSk7CisJaWYgKHJldCkKKwkJZ290byBl
cnI7CisKKwlyZXR1cm4gMDsKK2VycjoKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaGRtaS0+Y2xr
W01US19IRE1JX0NMS19BVURfQkNMS10pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lk
IG10a19oZG1pX2Nsa19kaXNhYmxlX2F1ZGlvKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwlj
bGtfZGlzYWJsZV91bnByZXBhcmUoaGRtaS0+Y2xrW01US19IRE1JX0NMS19BVURfQkNMS10pOwor
CWNsa19kaXNhYmxlX3VucHJlcGFyZShoZG1pLT5jbGtbTVRLX0hETUlfQ0xLX0FVRF9TUERJRl0p
OworfQorCitzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBoZG1pX2Nvbm5fZGV0ZWN0
KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uLAorCQkJCQkJICBib29sIGZvcmNlKQoreworCXN0
cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21fY29ubihjb25uKTsKKworCXJldHVy
biBtdGtfY2VjX2hwZF9oaWdoKGhkbWktPmNlY19kZXYpID8KKwkgICAgICAgY29ubmVjdG9yX3N0
YXR1c19jb25uZWN0ZWQgOiBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKK30KKworc3Rh
dGljIHZvaWQgaGRtaV9jb25uX2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm4pCit7
CisJc3RydWN0IG10a19oZG1pICpoZG1pID0gaGRtaV9jdHhfZnJvbV9jb25uKGNvbm4pOworCisJ
bXRrX2NlY19zZXRfaHBkX2V2ZW50KGhkbWktPmNlY19kZXYsIE5VTEwsIE5VTEwpOworCisJZHJt
X2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKGNvbm4pOworCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25u
KTsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9jb25uX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nv
bm5lY3RvciAqY29ubikKK3sKKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBoZG1pX2N0eF9mcm9t
X2Nvbm4oY29ubik7CisJc3RydWN0IGVkaWQgKmVkaWQ7CisJaW50IHJldDsKKworCWlmICghaGRt
aS0+ZGRjX2FkcHQpCisJCXJldHVybiAtRU5PREVWOworCisJZWRpZCA9IGRybV9nZXRfZWRpZChj
b25uLCBoZG1pLT5kZGNfYWRwdCk7CisJaWYgKCFlZGlkKQorCQlyZXR1cm4gLUVOT0RFVjsKKwor
CWhkbWktPmR2aV9tb2RlID0gIWRybV9kZXRlY3RfbW9uaXRvcl9hdWRpbyhlZGlkKTsKKworCWRy
bV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eShjb25uLCBlZGlkKTsKKworCXJl
dCA9IGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uLCBlZGlkKTsKKwlkcm1fZWRpZF90b19lbGQoY29u
biwgZWRpZCk7CisJa2ZyZWUoZWRpZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBt
dGtfaGRtaV9jb25uX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm4sCisJCQkJ
ICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXN0cnVjdCBtdGtfaGRtaSAq
aGRtaSA9IGhkbWlfY3R4X2Zyb21fY29ubihjb25uKTsKKworCWRldl9kYmcoaGRtaS0+ZGV2LCAi
eHJlcz0lZCwgeXJlcz0lZCwgcmVmcmVzaD0lZCwgaW50bD0lZCBjbG9jaz0lZFxuIiwKKwkJbW9k
ZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5LCBtb2RlLT52cmVmcmVzaCwKKwkJISEobW9kZS0+
ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSksIG1vZGUtPmNsb2NrICogMTAwMCk7CisK
KwlpZiAoaGRtaS0+YnJpZGdlLm5leHQpIHsKKwkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgYWRq
dXN0ZWRfbW9kZTsKKworCQlkcm1fbW9kZV9jb3B5KCZhZGp1c3RlZF9tb2RlLCBtb2RlKTsKKwkJ
aWYgKCFkcm1fYnJpZGdlX21vZGVfZml4dXAoaGRtaS0+YnJpZGdlLm5leHQsIG1vZGUsCisJCQkJ
CSAgICZhZGp1c3RlZF9tb2RlKSkKKwkJCXJldHVybiBNT0RFX0JBRDsKKwl9CisKKwlpZiAobW9k
ZS0+Y2xvY2sgPCAyNzAwMCkKKwkJcmV0dXJuIE1PREVfQ0xPQ0tfTE9XOworCWlmIChtb2RlLT5j
bG9jayA+IDI5NzAwMCkKKwkJcmV0dXJuIE1PREVfQ0xPQ0tfSElHSDsKKworCXJldHVybiBkcm1f
bW9kZV92YWxpZGF0ZV9zaXplKG1vZGUsIDB4MWZmZiwgMHgxZmZmKTsKK30KKworc3RhdGljIHN0
cnVjdCBkcm1fZW5jb2RlciAqbXRrX2hkbWlfY29ubl9iZXN0X2VuYyhzdHJ1Y3QgZHJtX2Nvbm5l
Y3RvciAqY29ubikKK3sKKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBoZG1pX2N0eF9mcm9tX2Nv
bm4oY29ubik7CisKKwlyZXR1cm4gaGRtaS0+YnJpZGdlLmVuY29kZXI7Cit9CisKK3N0YXRpYyBj
b25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyBtdGtfaGRtaV9jb25uZWN0b3JfZnVuY3Mg
PSB7CisJLmRwbXMgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHBtcywKKwkuZGV0ZWN0
ID0gaGRtaV9jb25uX2RldGVjdCwKKwkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2lu
Z2xlX2Nvbm5lY3Rvcl9tb2RlcywKKwkuZGVzdHJveSA9IGhkbWlfY29ubl9kZXN0cm95LAorCS5y
ZXNldCA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwKKwkuYXRvbWljX2R1cGxp
Y2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUs
CisJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rl
c3Ryb3lfc3RhdGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfaGVs
cGVyX2Z1bmNzCisJCW10a19oZG1pX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7CisJLmdldF9t
b2RlcyA9IG10a19oZG1pX2Nvbm5fZ2V0X21vZGVzLAorCS5tb2RlX3ZhbGlkID0gbXRrX2hkbWlf
Y29ubl9tb2RlX3ZhbGlkLAorCS5iZXN0X2VuY29kZXIgPSBtdGtfaGRtaV9jb25uX2Jlc3RfZW5j
LAorfTsKKworc3RhdGljIHZvaWQgbXRrX2hkbWlfaHBkX2V2ZW50KGJvb2wgaHBkLCBzdHJ1Y3Qg
ZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG10a19oZG1pICpoZG1pID0gZGV2X2dldF9kcnZkYXRh
KGRldik7CisKKwlpZiAoaGRtaSAmJiBoZG1pLT5icmlkZ2UuZW5jb2RlciAmJiBoZG1pLT5icmlk
Z2UuZW5jb2Rlci0+ZGV2KQorCQlkcm1faGVscGVyX2hwZF9pcnFfZXZlbnQoaGRtaS0+YnJpZGdl
LmVuY29kZXItPmRldik7Cit9CisKKy8qCisgKiBCcmlkZ2UgY2FsbGJhY2tzCisgKi8KKworc3Rh
dGljIGludCBtdGtfaGRtaV9icmlkZ2VfYXR0YWNoKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2Up
Cit7CisJc3RydWN0IG10a19oZG1pICpoZG1pID0gaGRtaV9jdHhfZnJvbV9icmlkZ2UoYnJpZGdl
KTsKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9pbml0KGJyaWRnZS0+ZW5jb2Rl
ci0+ZGV2LCAmaGRtaS0+Y29ubiwKKwkJCQkgJm10a19oZG1pX2Nvbm5lY3Rvcl9mdW5jcywKKwkJ
CQkgRFJNX01PREVfQ09OTkVDVE9SX0hETUlBKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoaGRt
aS0+ZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgY29ubmVjdG9yOiAlZFxuIiwgcmV0KTsKKwkJ
cmV0dXJuIHJldDsKKwl9CisJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZoZG1pLT5jb25uLCAm
bXRrX2hkbWlfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisKKwloZG1pLT5jb25uLnBvbGxlZCA9
IERSTV9DT05ORUNUT1JfUE9MTF9IUEQ7CisJaGRtaS0+Y29ubi5pbnRlcmxhY2VfYWxsb3dlZCA9
IHRydWU7CisJaGRtaS0+Y29ubi5kb3VibGVzY2FuX2FsbG93ZWQgPSBmYWxzZTsKKworCXJldCA9
IGRybV9jb25uZWN0b3JfcmVnaXN0ZXIoJmhkbWktPmNvbm4pOworCWlmIChyZXQpIHsKKwkJZGV2
X2VycihoZG1pLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgY29ubmVjdG9yOiAlZFxuIiwgcmV0
KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBkcm1fbW9kZV9jb25uZWN0b3JfYXR0YWNo
X2VuY29kZXIoJmhkbWktPmNvbm4sCisJCQkJCQlicmlkZ2UtPmVuY29kZXIpOworCWlmIChyZXQp
IHsKKwkJZGV2X2VycihoZG1pLT5kZXYsCisJCQkiRmFpbGVkIHRvIGF0dGFjaCBjb25uZWN0b3Ig
dG8gZW5jb2RlcjogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGJyaWRn
ZS0+bmV4dCkgeworCQlicmlkZ2UtPm5leHQtPmVuY29kZXIgPSBicmlkZ2UtPmVuY29kZXI7CisJ
CXJldCA9IGRybV9icmlkZ2VfYXR0YWNoKGJyaWRnZS0+ZW5jb2Rlci0+ZGV2LCBicmlkZ2UtPm5l
eHQpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGhkbWktPmRldiwKKwkJCQkiRmFpbGVkIHRv
IGF0dGFjaCBleHRlcm5hbCBicmlkZ2U6ICVkXG4iLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJ
fQorCX0KKworCW10a19jZWNfc2V0X2hwZF9ldmVudChoZG1pLT5jZWNfZGV2LCBtdGtfaGRtaV9o
cGRfZXZlbnQsIGhkbWktPmRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGJvb2wgbXRr
X2hkbWlfYnJpZGdlX21vZGVfZml4dXAoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKKwkJCQkg
ICAgICAgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJICAgICAgIHN0
cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQoreworCXJldHVybiB0cnVlOwor
fQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9icmlkZ2VfZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRn
ZSAqYnJpZGdlKQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21fYnJp
ZGdlKGJyaWRnZSk7CisKKwlpZiAoIWhkbWktPmVuYWJsZWQpCisJCXJldHVybjsKKworCXBoeV9w
b3dlcl9vZmYoaGRtaS0+cGh5KTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaGRtaS0+Y2xrW01U
S19IRE1JX0NMS19IRE1JX1BJWEVMXSk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhkbWktPmNs
a1tNVEtfSERNSV9DTEtfSERNSV9QTExdKTsKKworCWhkbWktPmVuYWJsZWQgPSBmYWxzZTsKK30K
Kworc3RhdGljIHZvaWQgbXRrX2hkbWlfYnJpZGdlX3Bvc3RfZGlzYWJsZShzdHJ1Y3QgZHJtX2Jy
aWRnZSAqYnJpZGdlKQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21f
YnJpZGdlKGJyaWRnZSk7CisKKwlpZiAoIWhkbWktPnBvd2VyZWQpCisJCXJldHVybjsKKworCW10
a19oZG1pX2h3XzFwNF92ZXJzaW9uX2VuYWJsZShoZG1pLCB0cnVlKTsKKwltdGtfaGRtaV9od19t
YWtlX3JlZ193cml0YWJsZShoZG1pLCBmYWxzZSk7CisKKwloZG1pLT5wb3dlcmVkID0gZmFsc2U7
Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2JyaWRnZV9tb2RlX3NldChzdHJ1Y3QgZHJtX2Jy
aWRnZSAqYnJpZGdlLAorCQkJCSAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJ
CQkJICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlzdHJ1
Y3QgbXRrX2hkbWkgKmhkbWkgPSBoZG1pX2N0eF9mcm9tX2JyaWRnZShicmlkZ2UpOworCisJZGV2
X2RiZyhoZG1pLT5kZXYsICJjdXIgaW5mbzogbmFtZTolcywgaGRpc3BsYXk6JWRcbiIsCisJCWFk
anVzdGVkX21vZGUtPm5hbWUsIGFkanVzdGVkX21vZGUtPmhkaXNwbGF5KTsKKwlkZXZfZGJnKGhk
bWktPmRldiwgImhzeW5jX3N0YXJ0OiVkLGhzeW5jX2VuZDolZCwgaHRvdGFsOiVkIiwKKwkJYWRq
dXN0ZWRfbW9kZS0+aHN5bmNfc3RhcnQsIGFkanVzdGVkX21vZGUtPmhzeW5jX2VuZCwKKwkJYWRq
dXN0ZWRfbW9kZS0+aHRvdGFsKTsKKwlkZXZfZGJnKGhkbWktPmRldiwgImhza2V3OiVkLCB2ZGlz
cGxheTolZFxuIiwKKwkJYWRqdXN0ZWRfbW9kZS0+aHNrZXcsIGFkanVzdGVkX21vZGUtPnZkaXNw
bGF5KTsKKwlkZXZfZGJnKGhkbWktPmRldiwgInZzeW5jX3N0YXJ0OiVkLCB2c3luY19lbmQ6JWQs
IHZ0b3RhbDolZCIsCisJCWFkanVzdGVkX21vZGUtPnZzeW5jX3N0YXJ0LCBhZGp1c3RlZF9tb2Rl
LT52c3luY19lbmQsCisJCWFkanVzdGVkX21vZGUtPnZ0b3RhbCk7CisJZGV2X2RiZyhoZG1pLT5k
ZXYsICJ2c2NhbjolZCwgZmxhZzolZFxuIiwKKwkJYWRqdXN0ZWRfbW9kZS0+dnNjYW4sIGFkanVz
dGVkX21vZGUtPmZsYWdzKTsKKworCWRybV9tb2RlX2NvcHkoJmhkbWktPm1vZGUsIGFkanVzdGVk
X21vZGUpOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9icmlkZ2VfcHJlX2VuYWJsZShzdHJ1
Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGhkbWlf
Y3R4X2Zyb21fYnJpZGdlKGJyaWRnZSk7CisKKwltdGtfaGRtaV9od19tYWtlX3JlZ193cml0YWJs
ZShoZG1pLCB0cnVlKTsKKwltdGtfaGRtaV9od18xcDRfdmVyc2lvbl9lbmFibGUoaGRtaSwgdHJ1
ZSk7CisKKwloZG1pLT5wb3dlcmVkID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlf
YnJpZGdlX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQoreworCXN0cnVjdCBtdGtf
aGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21fYnJpZGdlKGJyaWRnZSk7CisKKwltdGtfaGRtaV9v
dXRwdXRfc2V0X2Rpc3BsYXlfbW9kZShoZG1pLCAmaGRtaS0+bW9kZSk7CisJY2xrX3ByZXBhcmVf
ZW5hYmxlKGhkbWktPmNsa1tNVEtfSERNSV9DTEtfSERNSV9QTExdKTsKKwljbGtfcHJlcGFyZV9l
bmFibGUoaGRtaS0+Y2xrW01US19IRE1JX0NMS19IRE1JX1BJWEVMXSk7CisJcGh5X3Bvd2VyX29u
KGhkbWktPnBoeSk7CisKKwloZG1pLT5lbmFibGVkID0gdHJ1ZTsKK30KKworc3RhdGljIGNvbnN0
IHN0cnVjdCBkcm1fYnJpZGdlX2Z1bmNzIG10a19oZG1pX2JyaWRnZV9mdW5jcyA9IHsKKwkuYXR0
YWNoID0gbXRrX2hkbWlfYnJpZGdlX2F0dGFjaCwKKwkubW9kZV9maXh1cCA9IG10a19oZG1pX2Jy
aWRnZV9tb2RlX2ZpeHVwLAorCS5kaXNhYmxlID0gbXRrX2hkbWlfYnJpZGdlX2Rpc2FibGUsCisJ
LnBvc3RfZGlzYWJsZSA9IG10a19oZG1pX2JyaWRnZV9wb3N0X2Rpc2FibGUsCisJLm1vZGVfc2V0
ID0gbXRrX2hkbWlfYnJpZGdlX21vZGVfc2V0LAorCS5wcmVfZW5hYmxlID0gbXRrX2hkbWlfYnJp
ZGdlX3ByZV9lbmFibGUsCisJLmVuYWJsZSA9IG10a19oZG1pX2JyaWRnZV9lbmFibGUsCit9Owor
CitzdGF0aWMgaW50IG10a19oZG1pX2R0X3BhcnNlX3BkYXRhKHN0cnVjdCBtdGtfaGRtaSAqaGRt
aSwKKwkJCQkgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZp
Y2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zf
bm9kZTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNlY19ucCwgKnBvcnQsICplcCwgKnJlbW90ZSwg
KmkyY19ucDsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpjZWNfcGRldjsKKwlzdHJ1Y3QgcmVn
bWFwICpyZWdtYXA7CisJc3RydWN0IHJlc291cmNlICptZW07CisJaW50IHJldDsKKworCXJldCA9
IG10a19oZG1pX2dldF9hbGxfY2xrKGhkbWksIG5wKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIo
ZGV2LCAiRmFpbGVkIHRvIGdldCBjbG9ja3M6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0Owor
CX0KKworCS8qIFRoZSBDRUMgbW9kdWxlIGhhbmRsZXMgSERNSSBob3RwbHVnIGRldGVjdGlvbiAq
LworCWNlY19ucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKG5wLT5wYXJlbnQsIE5VTEwsCisJ
CQkJCSAibWVkaWF0ZWssbXQ4MTczLWNlYyIpOworCWlmICghY2VjX25wKSB7CisJCWRldl9lcnIo
ZGV2LCAiRmFpbGVkIHRvIGZpbmQgQ0VDIG5vZGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9
CisKKwljZWNfcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUoY2VjX25wKTsKKwlpZiAoIWNl
Y19wZGV2KSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LCAiV2FpdGluZyBmb3IgQ0VDIGRldmljZSAl
c1xuIiwKKwkJCWNlY19ucC0+ZnVsbF9uYW1lKTsKKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisJ
fQorCWhkbWktPmNlY19kZXYgPSAmY2VjX3BkZXYtPmRldjsKKworCS8qCisJICogVGhlIG1lZGlh
dGVrLHN5c2Nvbi1oZG1pIHByb3BlcnR5IGNvbnRhaW5zIGEgcGhhbmRsZSBsaW5rIHRvIHRoZQor
CSAqIE1NU1lTX0NPTkZJRyBkZXZpY2UgYW5kIHRoZSByZWdpc3RlciBvZmZzZXQgb2YgdGhlIEhE
TUlfU1lTX0NGRworCSAqIHJlZ2lzdGVycyBpdCBjb250YWlucy4KKwkgKi8KKwlyZWdtYXAgPSBz
eXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKG5wLCAibWVkaWF0ZWssc3lzY29uLWhkbWki
KTsKKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChucCwgIm1lZGlhdGVrLHN5c2Nv
bi1oZG1pIiwgMSwKKwkJCQkJICZoZG1pLT5zeXNfb2Zmc2V0KTsKKwlpZiAoSVNfRVJSKHJlZ21h
cCkpCisJCXJldCA9IFBUUl9FUlIocmVnbWFwKTsKKwlpZiAocmV0KSB7CisJCXJldCA9IFBUUl9F
UlIocmVnbWFwKTsKKwkJZGV2X2VycihkZXYsCisJCQkiRmFpbGVkIHRvIGdldCBzeXN0ZW0gY29u
ZmlndXJhdGlvbiByZWdpc3RlcnM6ICVkXG4iLAorCQkJcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9
CisJaGRtaS0+c3lzX3JlZ21hcCA9IHJlZ21hcDsKKworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNv
dXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaGRtaS0+cmVncyA9IGRldm1faW9yZW1h
cF9yZXNvdXJjZShkZXYsIG1lbSk7CisJaWYgKElTX0VSUihoZG1pLT5yZWdzKSkKKwkJcmV0dXJu
IFBUUl9FUlIoaGRtaS0+cmVncyk7CisKKwlwb3J0ID0gb2ZfZ3JhcGhfZ2V0X3BvcnRfYnlfaWQo
bnAsIDEpOworCWlmICghcG9ydCkgeworCQlkZXZfZXJyKGRldiwgIk1pc3Npbmcgb3V0cHV0IHBv
cnQgbm9kZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWVwID0gb2ZfZ2V0X2NoaWxk
X2J5X25hbWUocG9ydCwgImVuZHBvaW50Iik7CisJaWYgKCFlcCkgeworCQlkZXZfZXJyKGRldiwg
Ik1pc3NpbmcgZW5kcG9pbnQgbm9kZSBpbiBwb3J0ICVzXG4iLAorCQkJcG9ydC0+ZnVsbF9uYW1l
KTsKKwkJb2Zfbm9kZV9wdXQocG9ydCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlvZl9ub2Rl
X3B1dChwb3J0KTsKKworCXJlbW90ZSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfcG9ydF9wYXJlbnQo
ZXApOworCWlmICghcmVtb3RlKSB7CisJCWRldl9lcnIoZGV2LCAiTWlzc2luZyBjb25uZWN0b3Iv
YnJpZGdlIG5vZGUgZm9yIGVuZHBvaW50ICVzXG4iLAorCQkJZXAtPmZ1bGxfbmFtZSk7CisJCW9m
X25vZGVfcHV0KGVwKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCW9mX25vZGVfcHV0KGVwKTsK
KworCWlmICghb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocmVtb3RlLCAiaGRtaS1jb25uZWN0b3Ii
KSkgeworCQloZG1pLT5icmlkZ2UubmV4dCA9IG9mX2RybV9maW5kX2JyaWRnZShyZW1vdGUpOwor
CQlpZiAoIWhkbWktPmJyaWRnZS5uZXh0KSB7CisJCQlkZXZfZXJyKGRldiwgIldhaXRpbmcgZm9y
IGV4dGVybmFsIGJyaWRnZVxuIik7CisJCQlvZl9ub2RlX3B1dChyZW1vdGUpOworCQkJcmV0dXJu
IC1FUFJPQkVfREVGRVI7CisJCX0KKwl9CisKKwlpMmNfbnAgPSBvZl9wYXJzZV9waGFuZGxlKHJl
bW90ZSwgImRkYy1pMmMtYnVzIiwgMCk7CisJaWYgKCFpMmNfbnApIHsKKwkJZGV2X2VycihkZXYs
ICJGYWlsZWQgdG8gZmluZCBkZGMtaTJjLWJ1cyBub2RlIGluICVzXG4iLAorCQkJcmVtb3RlLT5m
dWxsX25hbWUpOworCQlvZl9ub2RlX3B1dChyZW1vdGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9
CisJb2Zfbm9kZV9wdXQocmVtb3RlKTsKKworCWhkbWktPmRkY19hZHB0ID0gb2ZfZmluZF9pMmNf
YWRhcHRlcl9ieV9ub2RlKGkyY19ucCk7CisJaWYgKCFoZG1pLT5kZGNfYWRwdCkgeworCQlkZXZf
ZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgZGRjIGkyYyBhZGFwdGVyIGJ5IG5vZGVcbiIpOworCQly
ZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEhETUkgYXVkaW8g
Y29kZWMgY2FsbGJhY2tzCisgKi8KKworc3RhdGljIGludCBtdGtfaGRtaV9hdWRpb19od19wYXJh
bXMoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgaGRtaV9jb2RlY19kYWlmbXQg
KmRhaWZtdCwKKwkJCQkgICAgc3RydWN0IGhkbWlfY29kZWNfcGFyYW1zICpwYXJhbXMpCit7CisJ
c3RydWN0IG10a19oZG1pICpoZG1pID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGhk
bWlfYXVkaW9fcGFyYW0gaGRtaV9wYXJhbXM7CisJdW5zaWduZWQgaW50IGNoYW4gPSBwYXJhbXMt
PmNlYS5jaGFubmVsczsKKworCWRldl9kYmcoaGRtaS0+ZGV2LCAiJXM6ICV1IEh6LCAlZCBiaXQs
ICVkIGNoYW5uZWxzXG4iLCBfX2Z1bmNfXywKKwkJcGFyYW1zLT5zYW1wbGVfcmF0ZSwgcGFyYW1z
LT5zYW1wbGVfd2lkdGgsIGNoYW4pOworCisJaWYgKCFoZG1pLT5icmlkZ2UuZW5jb2RlcikKKwkJ
cmV0dXJuIC1FTk9ERVY7CisKKwlzd2l0Y2ggKGNoYW4pIHsKKwljYXNlIDI6CisJCWhkbWlfcGFy
YW1zLmF1ZF9pbnB1dF9jaGFuX3R5cGUgPSBIRE1JX0FVRF9DSEFOX1RZUEVfMl8wOworCQlicmVh
azsKKwljYXNlIDQ6CisJCWhkbWlfcGFyYW1zLmF1ZF9pbnB1dF9jaGFuX3R5cGUgPSBIRE1JX0FV
RF9DSEFOX1RZUEVfNF8wOworCQlicmVhazsKKwljYXNlIDY6CisJCWhkbWlfcGFyYW1zLmF1ZF9p
bnB1dF9jaGFuX3R5cGUgPSBIRE1JX0FVRF9DSEFOX1RZUEVfNV8xOworCQlicmVhazsKKwljYXNl
IDg6CisJCWhkbWlfcGFyYW1zLmF1ZF9pbnB1dF9jaGFuX3R5cGUgPSBIRE1JX0FVRF9DSEFOX1RZ
UEVfN18xOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGhkbWktPmRldiwgImNoYW5u
ZWxbJWRdIG5vdCBzdXBwb3J0ZWQhXG4iLCBjaGFuKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQor
CisJc3dpdGNoIChwYXJhbXMtPnNhbXBsZV9yYXRlKSB7CisJY2FzZSAzMjAwMDoKKwljYXNlIDQ0
MTAwOgorCWNhc2UgNDgwMDA6CisJY2FzZSA4ODIwMDoKKwljYXNlIDk2MDAwOgorCWNhc2UgMTc2
NDAwOgorCWNhc2UgMTkyMDAwOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGhkbWkt
PmRldiwgInJhdGVbJWRdIG5vdCBzdXBwb3J0ZWQhXG4iLAorCQkJcGFyYW1zLT5zYW1wbGVfcmF0
ZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZGFpZm10LT5mbXQpIHsKKwlj
YXNlIEhETUlfSTJTOgorCQloZG1pX3BhcmFtcy5hdWRfY29kZWMgPSBIRE1JX0FVRElPX0NPRElO
R19UWVBFX1BDTTsKKwkJaGRtaV9wYXJhbXMuYXVkX3NhbXBlX3NpemUgPSBIRE1JX0FVRElPX1NB
TVBMRV9TSVpFXzE2OworCQloZG1pX3BhcmFtcy5hdWRfaW5wdXRfdHlwZSA9IEhETUlfQVVEX0lO
UFVUX0kyUzsKKwkJaGRtaV9wYXJhbXMuYXVkX2kyc19mbXQgPSBIRE1JX0kyU19NT0RFX0kyU18y
NEJJVDsKKwkJaGRtaV9wYXJhbXMuYXVkX21jbGsgPSBIRE1JX0FVRF9NQ0xLXzEyOEZTOworCQli
cmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGhkbWktPmRldiwgIiVzOiBJbnZhbGlkIERBSSBm
b3JtYXQgJWRcbiIsIF9fZnVuY19fLAorCQkJZGFpZm10LT5mbXQpOworCQlyZXR1cm4gLUVJTlZB
TDsKKwl9CisKKwltZW1jcHkoJmhkbWlfcGFyYW1zLmNvZGVjX3BhcmFtcywgcGFyYW1zLAorCSAg
ICAgICBzaXplb2YoaGRtaV9wYXJhbXMuY29kZWNfcGFyYW1zKSk7CisKKwltdGtfaGRtaV9hdWRp
b19zZXRfcGFyYW0oaGRtaSwgJmhkbWlfcGFyYW1zKTsKKworCXJldHVybiAwOworfQorCitzdGF0
aWMgaW50IG10a19oZG1pX2F1ZGlvX3N0YXJ0dXAoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0
cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJZGV2X2RiZyhk
ZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJbXRrX2hkbWlfYXVkaW9fZW5hYmxlKGhkbWkpOwor
CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2F1ZGlvX3NodXRkb3duKHN0
cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBkZXZfZ2V0X2Ry
dmRhdGEoZGV2KTsKKworCWRldl9kYmcoZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKworCW10a19o
ZG1pX2F1ZGlvX2Rpc2FibGUoaGRtaSk7Cit9CisKK2ludCBtdGtfaGRtaV9hdWRpb19kaWdpdGFs
X211dGUoc3RydWN0IGRldmljZSAqZGV2LCBib29sIGVuYWJsZSkKK3sKKwlzdHJ1Y3QgbXRrX2hk
bWkgKmhkbWkgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWRldl9kYmcoZGV2LCAiJXMoJWQp
XG4iLCBfX2Z1bmNfXywgZW5hYmxlKTsKKworCWlmIChlbmFibGUpCisJCW10a19oZG1pX2h3X2F1
ZF9tdXRlKGhkbWkpOworCWVsc2UKKwkJbXRrX2hkbWlfaHdfYXVkX3VubXV0ZShoZG1pKTsKKwor
CXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX2F1ZGlvX2dldF9lbGQoc3RydWN0
IGRldmljZSAqZGV2LCB1aW50OF90ICpidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IG10a19o
ZG1pICpoZG1pID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlkZXZfZGJnKGRldiwgIiVzXG4i
LCBfX2Z1bmNfXyk7CisKKwltZW1jcHkoYnVmLCBoZG1pLT5jb25uLmVsZCwgbWluKHNpemVvZiho
ZG1pLT5jb25uLmVsZCksIGxlbikpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBz
dHJ1Y3QgaGRtaV9jb2RlY19vcHMgbXRrX2hkbWlfYXVkaW9fY29kZWNfb3BzID0geworCS5od19w
YXJhbXMgPSBtdGtfaGRtaV9hdWRpb19od19wYXJhbXMsCisJLmF1ZGlvX3N0YXJ0dXAgPSBtdGtf
aGRtaV9hdWRpb19zdGFydHVwLAorCS5hdWRpb19zaHV0ZG93biA9IG10a19oZG1pX2F1ZGlvX3No
dXRkb3duLAorCS5kaWdpdGFsX211dGUgPSBtdGtfaGRtaV9hdWRpb19kaWdpdGFsX211dGUsCisJ
LmdldF9lbGQgPSBtdGtfaGRtaV9hdWRpb19nZXRfZWxkLAorfTsKKworc3RhdGljIHZvaWQgbXRr
X2hkbWlfcmVnaXN0ZXJfYXVkaW9fZHJpdmVyKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1
Y3QgaGRtaV9jb2RlY19wZGF0YSBjb2RlY19kYXRhID0geworCQkub3BzID0gJm10a19oZG1pX2F1
ZGlvX2NvZGVjX29wcywKKwkJLm1heF9pMnNfY2hhbm5lbHMgPSAyLAorCQkuaTJzID0gMSwKKwl9
OworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisKKwlwZGV2ID0gcGxhdGZvcm1fZGV2
aWNlX3JlZ2lzdGVyX2RhdGEoZGV2LCBIRE1JX0NPREVDX0RSVl9OQU1FLAorCQkJCQkgICAgIFBM
QVRGT1JNX0RFVklEX0FVVE8sICZjb2RlY19kYXRhLAorCQkJCQkgICAgIHNpemVvZihjb2RlY19k
YXRhKSk7CisJaWYgKElTX0VSUihwZGV2KSkKKwkJcmV0dXJuOworCisJRFJNX0lORk8oIiVzIGRy
aXZlciBib3VuZCB0byBIRE1JXG4iLCBIRE1JX0NPREVDX0RSVl9OQU1FKTsKK30KKworc3RhdGlj
IGludCBtdGtfZHJtX2hkbWlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sK
KwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRl
djsKKwlpbnQgcmV0OworCisJaGRtaSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqaGRtaSks
IEdGUF9LRVJORUwpOworCWlmICghaGRtaSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwloZG1pLT5k
ZXYgPSBkZXY7CisKKwlyZXQgPSBtdGtfaGRtaV9kdF9wYXJzZV9wZGF0YShoZG1pLCBwZGV2KTsK
KwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaGRtaS0+cGh5ID0gZGV2bV9waHlfZ2V0KGRl
diwgImhkbWkiKTsKKwlpZiAoSVNfRVJSKGhkbWktPnBoeSkpIHsKKwkJcmV0ID0gUFRSX0VSUiho
ZG1pLT5waHkpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgSERNSSBQSFk6ICVkXG4i
LCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYs
IGhkbWkpOworCisJcmV0ID0gbXRrX2hkbWlfb3V0cHV0X2luaXQoaGRtaSk7CisJaWYgKHJldCkg
eworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIGhkbWkgb3V0cHV0XG4iKTsK
KwkJcmV0dXJuIHJldDsKKwl9CisKKwltdGtfaGRtaV9yZWdpc3Rlcl9hdWRpb19kcml2ZXIoZGV2
KTsKKworCWhkbWktPmJyaWRnZS5mdW5jcyA9ICZtdGtfaGRtaV9icmlkZ2VfZnVuY3M7CisJaGRt
aS0+YnJpZGdlLm9mX25vZGUgPSBwZGV2LT5kZXYub2Zfbm9kZTsKKwlyZXQgPSBkcm1fYnJpZGdl
X2FkZCgmaGRtaS0+YnJpZGdlKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVk
IHRvIGFkZCBicmlkZ2UsIHJldCA9ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwor
CXJldCA9IG10a19oZG1pX2Nsa19lbmFibGVfYXVkaW8oaGRtaSk7CisJaWYgKHJldCkgeworCQlk
ZXZfZXJyKGRldiwgIkZhaWxlZCB0byBlbmFibGUgYXVkaW8gY2xvY2tzOiAlZFxuIiwgcmV0KTsK
KwkJZ290byBlcnJfYnJpZGdlX3JlbW92ZTsKKwl9CisKKwlkZXZfZGJnKGRldiwgIm1lZGlhdGVr
IGhkbWkgcHJvYmUgc3VjY2Vzc1xuIik7CisJcmV0dXJuIDA7CisKK2Vycl9icmlkZ2VfcmVtb3Zl
OgorCWRybV9icmlkZ2VfcmVtb3ZlKCZoZG1pLT5icmlkZ2UpOworCXJldHVybiByZXQ7Cit9CisK
K3N0YXRpYyBpbnQgbXRrX2RybV9oZG1pX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw
ZGV2KQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBk
ZXYpOworCisJZHJtX2JyaWRnZV9yZW1vdmUoJmhkbWktPmJyaWRnZSk7CisJbXRrX2hkbWlfY2xr
X2Rpc2FibGVfYXVkaW8oaGRtaSk7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE1f
U0xFRVAKK3N0YXRpYyBpbnQgbXRrX2hkbWlfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7
CisJc3RydWN0IG10a19oZG1pICpoZG1pID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwltdGtf
aGRtaV9jbGtfZGlzYWJsZV9hdWRpbyhoZG1pKTsKKwlkZXZfZGJnKGRldiwgImhkbWkgc3VzcGVu
ZCBzdWNjZXNzIVxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfcmVz
dW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBkZXZf
Z2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0ID0gMDsKKworCXJldCA9IG10a19oZG1pX2Nsa19l
bmFibGVfYXVkaW8oaGRtaSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImhkbWkgcmVz
dW1lIGZhaWxlZCFcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRldl9kYmcoZGV2LCAiaGRt
aSByZXN1bWUgc3VjY2VzcyFcbiIpOworCXJldHVybiAwOworfQorI2VuZGlmCitzdGF0aWMgU0lN
UExFX0RFVl9QTV9PUFMobXRrX2hkbWlfcG1fb3BzLAorCQkJIG10a19oZG1pX3N1c3BlbmQsIG10
a19oZG1pX3Jlc3VtZSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19k
cm1faGRtaV9vZl9pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1o
ZG1pIiwgfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2hk
bWlfZHJpdmVyID0geworCS5wcm9iZSA9IG10a19kcm1faGRtaV9wcm9iZSwKKwkucmVtb3ZlID0g
bXRrX2RybV9oZG1pX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJtZWRpYXRlay1k
cm0taGRtaSIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG10a19kcm1faGRtaV9vZl9pZHMsCisJCS5w
bSA9ICZtdGtfaGRtaV9wbV9vcHMsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1f
ZHJpdmVyICogY29uc3QgbXRrX2hkbWlfZHJpdmVyc1tdID0geworCSZtdGtfaGRtaV9waHlfZHJp
dmVyLAorCSZtdGtfaGRtaV9kZGNfZHJpdmVyLAorCSZtdGtfY2VjX2RyaXZlciwKKwkmbXRrX2hk
bWlfZHJpdmVyLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXRrX2hkbWl0eF9pbml0KHZvaWQp
Cit7CisJaW50IHJldDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG10
a19oZG1pX2RyaXZlcnMpOyBpKyspIHsKKwkJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVy
KG10a19oZG1pX2RyaXZlcnNbaV0pOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJfZXJyKCJGYWls
ZWQgdG8gcmVnaXN0ZXIgJXMgZHJpdmVyOiAlZFxuIiwKKwkJCSAgICAgICBtdGtfaGRtaV9kcml2
ZXJzW2ldLT5kcml2ZXIubmFtZSwgcmV0KTsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCisJcmV0
dXJuIDA7CisKK2VycjoKKwl3aGlsZSAoLS1pID49IDApCisJCXBsYXRmb3JtX2RyaXZlcl91bnJl
Z2lzdGVyKG10a19oZG1pX2RyaXZlcnNbaV0pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGlj
IHZvaWQgX19leGl0IG10a19oZG1pdHhfZXhpdCh2b2lkKQoreworCWludCBpOworCisJZm9yIChp
ID0gQVJSQVlfU0laRShtdGtfaGRtaV9kcml2ZXJzKSAtIDE7IGkgPj0gMDsgaS0tKQorCQlwbGF0
Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcihtdGtfaGRtaV9kcml2ZXJzW2ldKTsKK30KKworbW9kdWxl
X2luaXQobXRrX2hkbWl0eF9pbml0KTsKK21vZHVsZV9leGl0KG10a19oZG1pdHhfZXhpdCk7CisK
K01PRFVMRV9BVVRIT1IoIkppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPiIpOworTU9EVUxF
X0RFU0NSSVBUSU9OKCJNZWRpYVRlayBIRE1JIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQ
TCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pLmgg
Yi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWkuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi42MzcxYjNkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUv
ZHJtL21lZGlhdGVrL210a19oZG1pLmgKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoYykgMjAxNCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IEppZSBRaXUgPGppZS5xaXVAbWVk
aWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqLworI2lmbmRlZiBfTVRLX0hETUlfQ1RSTF9ICisjZGVmaW5lIF9NVEtfSERNSV9DVFJM
X0gKKworc3RydWN0IHBsYXRmb3JtX2RyaXZlcjsKKworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9k
cml2ZXIgbXRrX2NlY19kcml2ZXI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtf
aGRtaV9kZGNfZHJpdmVyOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2hkbWlf
cGh5X2RyaXZlcjsKKworI2VuZGlmIC8qIF9NVEtfSERNSV9DVFJMX0ggKi8KZGlmZiAtLWdpdCBh
L2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9kZGMuYyBiL2RyaXZlcnMvZ3B1L2Ry
bS9tZWRpYXRlay9tdGtfaGRtaV9kZGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5jZjdkZDVkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr
L210a19oZG1pX2RkYy5jCkBAIC0wLDAgKzEsMzU4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAy
MDE0IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5j
b20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICov
CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cisj
aW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUg
PGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51
eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxs
aW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW8u
aD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNz
Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZv
cm0uaD4KKworI2RlZmluZSBTSUYxX0NMT0sJCSgyODgpCisjZGVmaW5lIEREQ19ERENNQ1RMMAkJ
KDB4MCkKKyNkZWZpbmUgRERDTV9PRFJBSU4JCQlCSVQoMzEpCisjZGVmaW5lIEREQ01fQ0xLX0RJ
Vl9PRkZTRVQJCSgxNikKKyNkZWZpbmUgRERDTV9DTEtfRElWX01BU0sJCSgweGZmZiA8PCAxNikK
KyNkZWZpbmUgRERDTV9DU19TVEFUVVMJCQlCSVQoNCkKKyNkZWZpbmUgRERDTV9TQ0xfU1RBVEUJ
CQlCSVQoMykKKyNkZWZpbmUgRERDTV9TREFfU1RBVEUJCQlCSVQoMikKKyNkZWZpbmUgRERDTV9T
TTBFTgkJCUJJVCgxKQorI2RlZmluZSBERENNX1NDTF9TVFJFQ0gJCQlCSVQoMCkKKyNkZWZpbmUg
RERDX0REQ01DVEwxCQkoMHg0KQorI2RlZmluZSBERENNX0FDS19PRkZTRVQJCQkoMTYpCisjZGVm
aW5lIEREQ01fQUNLX01BU0sJCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUgRERDTV9QR0xFTl9PRkZT
RVQJCSg4KQorI2RlZmluZSBERENNX1BHTEVOX01BU0sJCQkoMHg3IDw8IDgpCisjZGVmaW5lIERE
Q01fU0lGX01PREVfT0ZGU0VUCQkoNCkKKyNkZWZpbmUgRERDTV9TSUZfTU9ERV9NQVNLCQkoMHg3
IDw8IDQpCisjZGVmaW5lIEREQ01fU1RBUlQJCQkoMHgxKQorI2RlZmluZSBERENNX1dSSVRFX0RB
VEEJCQkoMHgyKQorI2RlZmluZSBERENNX1NUT1AJCQkoMHgzKQorI2RlZmluZSBERENNX1JFQURf
REFUQV9OT19BQ0sJCSgweDQpCisjZGVmaW5lIEREQ01fUkVBRF9EQVRBX0FDSwkJKDB4NSkKKyNk
ZWZpbmUgRERDTV9UUkkJCQlCSVQoMCkKKyNkZWZpbmUgRERDX0REQ01EMAkJKDB4OCkKKyNkZWZp
bmUgRERDTV9EQVRBMwkJCSgweGZmIDw8IDI0KQorI2RlZmluZSBERENNX0RBVEEyCQkJKDB4ZmYg
PDwgMTYpCisjZGVmaW5lIEREQ01fREFUQTEJCQkoMHhmZiA8PCA4KQorI2RlZmluZSBERENNX0RB
VEEwCQkJKDB4ZmYgPDwgMCkKKyNkZWZpbmUgRERDX0REQ01EMQkJKDB4YykKKyNkZWZpbmUgRERD
TV9EQVRBNwkJCSgweGZmIDw8IDI0KQorI2RlZmluZSBERENNX0RBVEE2CQkJKDB4ZmYgPDwgMTYp
CisjZGVmaW5lIEREQ01fREFUQTUJCQkoMHhmZiA8PCA4KQorI2RlZmluZSBERENNX0RBVEE0CQkJ
KDB4ZmYgPDwgMCkKKworc3RydWN0IG10a19oZG1pX2RkYyB7CisJc3RydWN0IGkyY19hZGFwdGVy
IGFkYXA7CisJc3RydWN0IGNsayAqY2xrOworCXZvaWQgX19pb21lbSAqcmVnczsKK307CisKK3N0
YXRpYyBpbmxpbmUgdm9pZCBzaWZfc2V0X2JpdChzdHJ1Y3QgbXRrX2hkbWlfZGRjICpkZGMsIHVu
c2lnbmVkIGludCBvZmZzZXQsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHZhbCkKK3sKKwl3cml0
ZWwocmVhZGwoZGRjLT5yZWdzICsgb2Zmc2V0KSB8IHZhbCwgZGRjLT5yZWdzICsgb2Zmc2V0KTsK
K30KKworc3RhdGljIGlubGluZSB2b2lkIHNpZl9jbHJfYml0KHN0cnVjdCBtdGtfaGRtaV9kZGMg
KmRkYywgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgdmFsKQor
eworCXdyaXRlbChyZWFkbChkZGMtPnJlZ3MgKyBvZmZzZXQpICYgfnZhbCwgZGRjLT5yZWdzICsg
b2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNpZl9iaXRfaXNfc2V0KHN0cnVjdCBt
dGtfaGRtaV9kZGMgKmRkYywgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJCQkgIHVuc2lnbmVkIGlu
dCB2YWwpCit7CisJcmV0dXJuIChyZWFkbChkZGMtPnJlZ3MgKyBvZmZzZXQpICYgdmFsKSA9PSB2
YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaWZfd3JpdGVfbWFzayhzdHJ1Y3QgbXRrX2hk
bWlfZGRjICpkZGMsIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCQkJICB1bnNpZ25lZCBpbnQgbWFz
aywgdW5zaWduZWQgaW50IHNoaWZ0LAorCQkJCSAgdW5zaWduZWQgaW50IHZhbCkKK3sKKwl1bnNp
Z25lZCBpbnQgdG1wOworCisJdG1wID0gcmVhZGwoZGRjLT5yZWdzICsgb2Zmc2V0KTsKKwl0bXAg
Jj0gfm1hc2s7CisJdG1wIHw9ICh2YWwgPDwgc2hpZnQpICYgbWFzazsKKwl3cml0ZWwodG1wLCBk
ZGMtPnJlZ3MgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzaWZf
cmVhZF9tYXNrKHN0cnVjdCBtdGtfaGRtaV9kZGMgKmRkYywKKwkJCQkJIHVuc2lnbmVkIGludCBv
ZmZzZXQsIHVuc2lnbmVkIGludCBtYXNrLAorCQkJCQkgdW5zaWduZWQgaW50IHNoaWZ0KQorewor
CXJldHVybiAocmVhZGwoZGRjLT5yZWdzICsgb2Zmc2V0KSAmIG1hc2spID4+IHNoaWZ0OworfQor
CitzdGF0aWMgdm9pZCBkZGNtX3RyaWdnZXJfbW9kZShzdHJ1Y3QgbXRrX2hkbWlfZGRjICpkZGMs
IGludCBtb2RlKQoreworCXUzMiB2YWw7CisKKwlzaWZfd3JpdGVfbWFzayhkZGMsIEREQ19ERENN
Q1RMMSwgRERDTV9TSUZfTU9ERV9NQVNLLAorCQkgICAgICAgRERDTV9TSUZfTU9ERV9PRkZTRVQs
IG1vZGUpOworCXNpZl9zZXRfYml0KGRkYywgRERDX0REQ01DVEwxLCBERENNX1RSSSk7CisJcmVh
ZGxfcG9sbF90aW1lb3V0KGRkYy0+cmVncyArIEREQ19ERENNQ1RMMSwgdmFsLCB2YWwgJiBERENN
X1RSSSwgNCwKKwkJCSAgIDIwMDAwKTsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9kZGNfcmVh
ZF9tc2coc3RydWN0IG10a19oZG1pX2RkYyAqZGRjLCBzdHJ1Y3QgaTJjX21zZyAqbXNnKQorewor
CXN0cnVjdCBkZXZpY2UgKmRldiA9IGRkYy0+YWRhcC5kZXYucGFyZW50OworCXUzMiByZW1haW5f
Y291bnQsIGFja19jb3VudCwgYWNrX2ZpbmFsLCByZWFkX2NvdW50LCB0ZW1wX2NvdW50OworCXUz
MiBpbmRleCA9IDA7CisJdTMyIGFjazsKKwlpbnQgaTsKKworCWRkY21fdHJpZ2dlcl9tb2RlKGRk
YywgRERDTV9TVEFSVCk7CisJc2lmX3dyaXRlX21hc2soZGRjLCBERENfRERDTUQwLCAweGZmLCAw
LCAobXNnLT5hZGRyIDw8IDEpIHwgMHgwMSk7CisJc2lmX3dyaXRlX21hc2soZGRjLCBERENfRERD
TUNUTDEsIEREQ01fUEdMRU5fTUFTSywgRERDTV9QR0xFTl9PRkZTRVQsCisJCSAgICAgICAweDAw
KTsKKwlkZGNtX3RyaWdnZXJfbW9kZShkZGMsIEREQ01fV1JJVEVfREFUQSk7CisJYWNrID0gc2lm
X3JlYWRfbWFzayhkZGMsIEREQ19ERENNQ1RMMSwgRERDTV9BQ0tfTUFTSywgRERDTV9BQ0tfT0ZG
U0VUKTsKKwlkZXZfZGJnKGRldiwgImFjayA9IDB4JXhcbiIsIGFjayk7CisJaWYgKGFjayAhPSAw
eDAxKSB7CisJCWRldl9lcnIoZGV2LCAiaTJjIGFjayBlcnIhXG4iKTsKKwkJcmV0dXJuIC1FTlhJ
TzsKKwl9CisKKwlyZW1haW5fY291bnQgPSBtc2ctPmxlbjsKKwlhY2tfY291bnQgPSAobXNnLT5s
ZW4gLSAxKSAvIDg7CisJYWNrX2ZpbmFsID0gMDsKKworCXdoaWxlIChyZW1haW5fY291bnQgPiAw
KSB7CisJCWlmIChhY2tfY291bnQgPiAwKSB7CisJCQlyZWFkX2NvdW50ID0gODsKKwkJCWFja19m
aW5hbCA9IDA7CisJCQlhY2tfY291bnQtLTsKKwkJfSBlbHNlIHsKKwkJCXJlYWRfY291bnQgPSBy
ZW1haW5fY291bnQ7CisJCQlhY2tfZmluYWwgPSAxOworCQl9CisKKwkJc2lmX3dyaXRlX21hc2so
ZGRjLCBERENfRERDTUNUTDEsIEREQ01fUEdMRU5fTUFTSywKKwkJCSAgICAgICBERENNX1BHTEVO
X09GRlNFVCwgcmVhZF9jb3VudCAtIDEpOworCQlkZGNtX3RyaWdnZXJfbW9kZShkZGMsIChhY2tf
ZmluYWwgPT0gMSkgPworCQkJCSAgRERDTV9SRUFEX0RBVEFfTk9fQUNLIDoKKwkJCQkgIEREQ01f
UkVBRF9EQVRBX0FDSyk7CisKKwkJYWNrID0gc2lmX3JlYWRfbWFzayhkZGMsIEREQ19ERENNQ1RM
MSwgRERDTV9BQ0tfTUFTSywKKwkJCQkgICAgRERDTV9BQ0tfT0ZGU0VUKTsKKwkJdGVtcF9jb3Vu
dCA9IDA7CisJCXdoaWxlICgoKGFjayAmICgxIDw8IHRlbXBfY291bnQpKSAhPSAwKSAmJiAodGVt
cF9jb3VudCA8IDgpKQorCQkJdGVtcF9jb3VudCsrOworCQlpZiAoKChhY2tfZmluYWwgPT0gMSkg
JiYgKHRlbXBfY291bnQgIT0gKHJlYWRfY291bnQgLSAxKSkpIHx8CisJCSAgICAoKGFja19maW5h
bCA9PSAwKSAmJiAodGVtcF9jb3VudCAhPSByZWFkX2NvdW50KSkpIHsKKwkJCWRldl9lcnIoZGV2
LCAiQWRkcmVzcyBOQUNLISBBQ0soMHgleClcbiIsIGFjayk7CisJCQlicmVhazsKKwkJfQorCisJ
CWZvciAoaSA9IHJlYWRfY291bnQ7IGkgPj0gMTsgaS0tKSB7CisJCQlpbnQgc2hpZnQ7CisJCQlp
bnQgb2Zmc2V0OworCisJCQlpZiAoaSA+IDQpIHsKKwkJCQlvZmZzZXQgPSBERENfRERDTUQxOwor
CQkJCXNoaWZ0ID0gKGkgLSA1KSAqIDg7CisJCQl9IGVsc2UgeworCQkJCW9mZnNldCA9IEREQ19E
RENNRDA7CisJCQkJc2hpZnQgPSAoaSAtIDEpICogODsKKwkJCX0KKworCQkJbXNnLT5idWZbaW5k
ZXggKyBpIC0gMV0gPSBzaWZfcmVhZF9tYXNrKGRkYywgb2Zmc2V0LAorCQkJCQkJCQkweGZmIDw8
IHNoaWZ0LAorCQkJCQkJCQlzaGlmdCk7CisJCX0KKworCQlyZW1haW5fY291bnQgLT0gcmVhZF9j
b3VudDsKKwkJaW5kZXggKz0gcmVhZF9jb3VudDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3Rh
dGljIGludCBtdGtfaGRtaV9kZGNfd3JpdGVfbXNnKHN0cnVjdCBtdGtfaGRtaV9kZGMgKmRkYywg
c3RydWN0IGkyY19tc2cgKm1zZykKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkZGMtPmFkYXAu
ZGV2LnBhcmVudDsKKwl1MzIgYWNrOworCisJZGRjbV90cmlnZ2VyX21vZGUoZGRjLCBERENNX1NU
QVJUKTsKKwlzaWZfd3JpdGVfbWFzayhkZGMsIEREQ19ERENNRDAsIEREQ01fREFUQTAsIDAsIG1z
Zy0+YWRkciA8PCAxKTsKKwlzaWZfd3JpdGVfbWFzayhkZGMsIEREQ19ERENNRDAsIEREQ01fREFU
QTEsIDgsIG1zZy0+YnVmWzBdKTsKKwlzaWZfd3JpdGVfbWFzayhkZGMsIEREQ19ERENNQ1RMMSwg
RERDTV9QR0xFTl9NQVNLLCBERENNX1BHTEVOX09GRlNFVCwKKwkJICAgICAgIDB4MSk7CisJZGRj
bV90cmlnZ2VyX21vZGUoZGRjLCBERENNX1dSSVRFX0RBVEEpOworCisJYWNrID0gc2lmX3JlYWRf
bWFzayhkZGMsIEREQ19ERENNQ1RMMSwgRERDTV9BQ0tfTUFTSywgRERDTV9BQ0tfT0ZGU0VUKTsK
KwlkZXZfZGJnKGRldiwgImFjayA9ICVkXG4iLCBhY2spOworCisJaWYgKGFjayAhPSAweDAzKSB7
CisJCWRldl9lcnIoZGV2LCAiaTJjIGFjayBlcnIhXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQor
CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfZGRjX3hmZXIoc3RydWN0IGky
Y19hZGFwdGVyICphZGFwdGVyLAorCQkJICAgICBzdHJ1Y3QgaTJjX21zZyAqbXNncywgaW50IG51
bSkKK3sKKwlzdHJ1Y3QgbXRrX2hkbWlfZGRjICpkZGMgPSBhZGFwdGVyLT5hbGdvX2RhdGE7CisJ
c3RydWN0IGRldmljZSAqZGV2ID0gYWRhcHRlci0+ZGV2LnBhcmVudDsKKwlpbnQgcmV0OworCWlu
dCBpOworCisJaWYgKCFkZGMpIHsKKwkJZGV2X2VycihkZXYsICJpbnZhbGlkIGFyZ3VtZW50c1xu
Iik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNpZl9zZXRfYml0KGRkYywgRERDX0REQ01D
VEwwLCBERENNX1NDTF9TVFJFQ0gpOworCXNpZl9zZXRfYml0KGRkYywgRERDX0REQ01DVEwwLCBE
RENNX1NNMEVOKTsKKwlzaWZfY2xyX2JpdChkZGMsIEREQ19ERENNQ1RMMCwgRERDTV9PRFJBSU4p
OworCisJaWYgKHNpZl9iaXRfaXNfc2V0KGRkYywgRERDX0REQ01DVEwxLCBERENNX1RSSSkpIHsK
KwkJZGV2X2VycihkZXYsICJkZGMgbGluZSBpcyBidXN5IVxuIik7CisJCXJldHVybiAtRUJVU1k7
CisJfQorCisJc2lmX3dyaXRlX21hc2soZGRjLCBERENfRERDTUNUTDAsIEREQ01fQ0xLX0RJVl9N
QVNLLAorCQkgICAgICAgRERDTV9DTEtfRElWX09GRlNFVCwgU0lGMV9DTE9LKTsKKworCWZvciAo
aSA9IDA7IGkgPCBudW07IGkrKykgeworCQlzdHJ1Y3QgaTJjX21zZyAqbXNnID0gJm1zZ3NbaV07
CisKKwkJZGV2X2RiZyhkZXYsICJpMmMgbXNnLCBhZHI6MHgleCwgZmxhZ3M6JWQsIGxlbiA6MHgl
eFxuIiwKKwkJCW1zZy0+YWRkciwgbXNnLT5mbGFncywgbXNnLT5sZW4pOworCisJCWlmIChtc2ct
PmZsYWdzICYgSTJDX01fUkQpCisJCQlyZXQgPSBtdGtfaGRtaV9kZGNfcmVhZF9tc2coZGRjLCBt
c2cpOworCQllbHNlCisJCQlyZXQgPSBtdGtfaGRtaV9kZGNfd3JpdGVfbXNnKGRkYywgbXNnKTsK
KwkJaWYgKHJldCA8IDApCisJCQlnb3RvIHhmZXJfZW5kOworCX0KKworCWRkY21fdHJpZ2dlcl9t
b2RlKGRkYywgRERDTV9TVE9QKTsKKworCXJldHVybiBpOworCit4ZmVyX2VuZDoKKwlkZGNtX3Ry
aWdnZXJfbW9kZShkZGMsIEREQ01fU1RPUCk7CisJZGV2X2VycihkZXYsICJkZGMgZmFpbGVkIVxu
Iik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHUzMiBtdGtfaGRtaV9kZGNfZnVuYyhzdHJ1
Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJcmV0dXJuIEkyQ19GVU5DX0kyQyB8IEkyQ19G
VU5DX1NNQlVTX0VNVUw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBt
dGtfaGRtaV9kZGNfYWxnb3JpdGhtID0geworCS5tYXN0ZXJfeGZlciA9IG10a19oZG1pX2RkY194
ZmVyLAorCS5mdW5jdGlvbmFsaXR5ID0gbXRrX2hkbWlfZGRjX2Z1bmMsCit9OworCitzdGF0aWMg
aW50IG10a19oZG1pX2RkY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorewor
CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IG10a19oZG1pX2RkYyAq
ZGRjOworCXN0cnVjdCByZXNvdXJjZSAqbWVtOworCWludCByZXQ7CisKKwlkZGMgPSBkZXZtX2t6
YWxsb2MoZGV2LCBzaXplb2Yoc3RydWN0IG10a19oZG1pX2RkYyksIEdGUF9LRVJORUwpOworCWlm
ICghZGRjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRkYy0+Y2xrID0gZGV2bV9jbGtfZ2V0KGRl
diwgImRkYy1pMmMiKTsKKwlpZiAoSVNfRVJSKGRkYy0+Y2xrKSkgeworCQlkZXZfZXJyKGRldiwg
ImdldCBkZGNfY2xrIGZhaWxlZDogJXAgLFxuIiwgZGRjLT5jbGspOworCQlyZXR1cm4gUFRSX0VS
UihkZGMtPmNsayk7CisJfQorCisJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElP
UkVTT1VSQ0VfTUVNLCAwKTsKKwlkZGMtPnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBk
ZXYtPmRldiwgbWVtKTsKKwlpZiAoSVNfRVJSKGRkYy0+cmVncykpCisJCXJldHVybiBQVFJfRVJS
KGRkYy0+cmVncyk7CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZGRjLT5jbGspOworCWlm
IChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJlbmFibGUgZGRjIGNsayBmYWlsZWQhXG4iKTsKKwkJ
cmV0dXJuIHJldDsKKwl9CisKKwlzdHJsY3B5KGRkYy0+YWRhcC5uYW1lLCAibWVkaWF0ZWstaGRt
aS1kZGMiLCBzaXplb2YoZGRjLT5hZGFwLm5hbWUpKTsKKwlkZGMtPmFkYXAub3duZXIgPSBUSElT
X01PRFVMRTsKKwlkZGMtPmFkYXAuY2xhc3MgPSBJMkNfQ0xBU1NfRERDOworCWRkYy0+YWRhcC5h
bGdvID0gJm10a19oZG1pX2RkY19hbGdvcml0aG07CisJZGRjLT5hZGFwLnJldHJpZXMgPSAzOwor
CWRkYy0+YWRhcC5kZXYub2Zfbm9kZSA9IGRldi0+b2Zfbm9kZTsKKwlkZGMtPmFkYXAuYWxnb19k
YXRhID0gZGRjOworCWRkYy0+YWRhcC5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKKworCXJldCA9
IGkyY19hZGRfYWRhcHRlcigmZGRjLT5hZGFwKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJy
KGRldiwgImZhaWxlZCB0byBhZGQgYnVzIHRvIGkyYyBjb3JlXG4iKTsKKwkJZ290byBlcnJfY2xr
X2Rpc2FibGU7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGRjKTsKKworCWRl
dl9kYmcoZGV2LCAiZGRjLT5hZGFwOiAlcFxuIiwgJmRkYy0+YWRhcCk7CisJZGV2X2RiZyhkZXYs
ICJkZGMtPmNsazogJXBcbiIsIGRkYy0+Y2xrKTsKKwlkZXZfZGJnKGRldiwgInBoeXNpY2FsIGFk
cjogMHglbGx4LCBlbmQ6IDB4JWxseFxuIiwgbWVtLT5zdGFydCwKKwkJbWVtLT5lbmQpOworCisJ
cmV0dXJuIDA7CisKK2Vycl9jbGtfZGlzYWJsZToKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZGRj
LT5jbGspOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfZGRjX3JlbW92
ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtdGtfaGRtaV9kZGMg
KmRkYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaTJjX2RlbF9hZGFwdGVyKCZk
ZGMtPmFkYXApOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShkZGMtPmNsayk7CisKKwlyZXR1cm4g
MDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRrX2hkbWlfZGRjX21h
dGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtaGRtaS1kZGMiLCB9
LAorCXt9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfaGRtaV9kZGNfZHJpdmVy
ID0geworCS5wcm9iZSA9IG10a19oZG1pX2RkY19wcm9iZSwKKwkucmVtb3ZlID0gbXRrX2hkbWlf
ZGRjX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJtZWRpYXRlay1oZG1pLWRkYyIs
CisJCS5vZl9tYXRjaF90YWJsZSA9IG10a19oZG1pX2RkY19tYXRjaCwKKwl9LAorfTsKKworTU9E
VUxFX0FVVEhPUigiSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+Iik7CitNT0RVTEVfREVT
Q1JJUFRJT04oIk1lZGlhVGVrIEhETUkgRERDIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQ
TCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX3Jl
Z3MuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9yZWdzLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA5ZmJlMQotLS0gL2Rldi9udWxsCisrKyBiL2Ry
aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9yZWdzLmgKQEAgLTAsMCArMSwyMzcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBKaWUg
UWl1IDxqaWUucWl1QG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIg
YXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAq
IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX01US19IRE1JX1JFR1NfSAorI2RlZmlu
ZSBfTVRLX0hETUlfUkVHU19ICisKKyNkZWZpbmUgR1JMX0lOVF9NQVNLCQkweDE4CisjZGVmaW5l
IEdSTF9JRk1fUE9SVAkJMHgxODgKKyNkZWZpbmUgR1JMX0NIX1NXQVAJCTB4MTk4CisjZGVmaW5l
IExSX1NXQVAJCQkJQklUKDApCisjZGVmaW5lIExGRV9DQ19TV0FQCQkJQklUKDEpCisjZGVmaW5l
IExTUlNfU1dBUAkJCUJJVCgyKQorI2RlZmluZSBSTFNfUlJTX1NXQVAJCQlCSVQoMykKKyNkZWZp
bmUgTFJfU1RBVFVTX1NXQVAJCQlCSVQoNCkKKyNkZWZpbmUgR1JMX0kyU19DX1NUQTAJCTB4MTQw
CisjZGVmaW5lIEdSTF9JMlNfQ19TVEExCQkweDE0NAorI2RlZmluZSBHUkxfSTJTX0NfU1RBMgkJ
MHgxNDgKKyNkZWZpbmUgR1JMX0kyU19DX1NUQTMJCTB4MTRDCisjZGVmaW5lIEdSTF9JMlNfQ19T
VEE0CQkweDE1MAorI2RlZmluZSBHUkxfSTJTX1VWCQkweDE1NAorI2RlZmluZSBJMlNfVVZfVgkJ
CUJJVCgwKQorI2RlZmluZSBJMlNfVVZfVQkJCUJJVCgxKQorI2RlZmluZSBJMlNfVVZfQ0hfRU5f
TUFTSwkJMHgzYworI2RlZmluZSBJMlNfVVZfQ0hfRU4oeCkJCQlCSVQoKHgpICsgMikKKyNkZWZp
bmUgSTJTX1VWX1RNRFNfREVCVUcJCUJJVCg2KQorI2RlZmluZSBJMlNfVVZfTk9STUFMX0lORk9f
SU5WCQlCSVQoNykKKyNkZWZpbmUgR1JMX0FDUF9JU1JDX0NUUkwJMHgxNTgKKyNkZWZpbmUgVlNf
RU4JCQkJQklUKDApCisjZGVmaW5lIEFDUF9FTgkJCQlCSVQoMSkKKyNkZWZpbmUgSVNSQzFfRU4J
CQlCSVQoMikKKyNkZWZpbmUgSVNSQzJfRU4JCQlCSVQoMykKKyNkZWZpbmUgR0FNVVRfRU4JCQlC
SVQoNCkKKyNkZWZpbmUgR1JMX0NUU19DVFJMCQkweDE2MAorI2RlZmluZSBDVFNfQ1RSTF9TT0ZU
CQkJQklUKDApCisjZGVmaW5lIEdSTF9JTlQJCQkweDE0CisjZGVmaW5lIElOVF9NREkJCQkJQklU
KDApCisjZGVmaW5lIElOVF9IRENQCQkJQklUKDEpCisjZGVmaW5lIElOVF9GSUZPX08JCQlCSVQo
MikKKyNkZWZpbmUgSU5UX0ZJRk9fVQkJCUJJVCgzKQorI2RlZmluZSBJTlRfSUZNX0VSUgkJCUJJ
VCg0KQorI2RlZmluZSBJTlRfSU5GX0RPTkUJCQlCSVQoNSkKKyNkZWZpbmUgSU5UX05DVFNfRE9O
RQkJCUJJVCg2KQorI2RlZmluZSBJTlRfQ1RSTF9QS1RfRE9ORQkJQklUKDcpCisjZGVmaW5lIEdS
TF9JTlRfTUFTSwkJMHgxOAorI2RlZmluZSBHUkxfQ1RSTAkJMHgxQworI2RlZmluZSBDVFJMX0dF
Tl9FTgkJCUJJVCgyKQorI2RlZmluZSBDVFJMX1NQRF9FTgkJCUJJVCgzKQorI2RlZmluZSBDVFJM
X01QRUdfRU4JCQlCSVQoNCkKKyNkZWZpbmUgQ1RSTF9BVURJT19FTgkJCUJJVCg1KQorI2RlZmlu
ZSBDVFJMX0FWSV9FTgkJCUJJVCg2KQorI2RlZmluZSBDVFJMX0FWTVVURQkJCUJJVCg3KQorI2Rl
ZmluZQlHUkxfU1RBVFVTCQkweDIwCisjZGVmaW5lIFNUQVRVU19IVFBMRwkJCUJJVCgwKQorI2Rl
ZmluZSBTVEFUVVNfUE9SRAkJCUJJVCgxKQorI2RlZmluZSBHUkxfRElWTgkJMHgxNzAKKyNkZWZp
bmUgTkNUU19XUklfQU5ZVElNRQkJQklUKDYpCisjZGVmaW5lIEdSTF9BVURJT19DRkcJCTB4MTdD
CisjZGVmaW5lIEFVRElPX1pFUk8JCQlCSVQoMCkKKyNkZWZpbmUgSElHSF9CSVRfUkFURQkJCUJJ
VCgxKQorI2RlZmluZSBTQUNEX0RTVAkJCUJJVCgyKQorI2RlZmluZSBEU1RfTk9STUFMX0RPVUJM
RQkJQklUKDMpCisjZGVmaW5lIERTRF9JTlYJCQkJQklUKDQpCisjZGVmaW5lIExSX0lOVgkJCQlC
SVQoNSkKKyNkZWZpbmUgTFJfTUlYCQkJCUJJVCg2KQorI2RlZmluZSBEU0RfU0VMCQkJCUJJVCg3
KQorI2RlZmluZSBHUkxfTkNUUwkJMHgxODQKKyNkZWZpbmUgR1JMX0NIX1NXMAkJMHgxOEMKKyNk
ZWZpbmUgR1JMX0NIX1NXMQkJMHgxOTAKKyNkZWZpbmUgR1JMX0NIX1NXMgkJMHgxOTQKKyNkZWZp
bmUgQ0hfU1dJVENIKGZyb20sIHRvKQkJKChmcm9tKSA8PCAoKHRvKSAqIDMpKQorI2RlZmluZSBH
UkxfSU5GT0ZSTV9WRVIJCTB4MTlDCisjZGVmaW5lIEdSTF9JTkZPRlJNX1RZUEUJMHgxQTAKKyNk
ZWZpbmUgR1JMX0lORk9GUk1fTE5HCQkweDFBNAorI2RlZmluZSBHUkxfTUlYX0NUUkwJCTB4MUI0
CisjZGVmaW5lIE1JWF9DVFJMX1NSQ19FTgkJCUJJVCgwKQorI2RlZmluZSBCWVBBU1NfVk9MVU1F
CQkJQklUKDEpCisjZGVmaW5lIE1JWF9DVFJMX0ZMQVQJCQlCSVQoNykKKyNkZWZpbmUgR1JMX0FP
VVRfQ0ZHCQkweDFDNAorI2RlZmluZSBBT1VUX0JOVU1fU0VMX01BU0sJCTB4MDMKKyNkZWZpbmUg
QU9VVF8yNEJJVAkJCTB4MDAKKyNkZWZpbmUgQU9VVF8yMEJJVAkJCTB4MDIKKyNkZWZpbmUgQU9V
VF8xNkJJVAkJCTB4MDMKKyNkZWZpbmUgQU9VVF9GSUZPX0FEQVBfQ1RSTAkJQklUKDYpCisjZGVm
aW5lIEFPVVRfQlVSU1RfUFJFQU1CTEVfRU4JCUJJVCg3KQorI2RlZmluZSBISUdIX0JJVF9SQVRF
X1BBQ0tFVF9BTElHTgkoQU9VVF9CVVJTVF9QUkVBTUJMRV9FTiB8IFwKKwkJCQkJIEFPVVRfRklG
T19BREFQX0NUUkwpCisjZGVmaW5lIEdSTF9TSElGVF9MMQkJMHgxQzAKKyNkZWZpbmUgR1JMX1NI
SUZUX1IyCQkweDFCMAorI2RlZmluZSBBVURJT19QQUNLRVRfT0ZGCQlCSVQoNikKKyNkZWZpbmUg
R1JMX0NGRzAJCTB4MjQKKyNkZWZpbmUgQ0ZHMF9JMlNfTU9ERV9NQVNLCQkweDMKKyNkZWZpbmUg
Q0ZHMF9JMlNfTU9ERV9SVEoJCTB4MQorI2RlZmluZSBDRkcwX0kyU19NT0RFX0xUSgkJMHgwCisj
ZGVmaW5lIENGRzBfSTJTX01PREVfSTJTCQkweDIKKyNkZWZpbmUgQ0ZHMF9XX0xFTkdUSF9NQVNL
CQkweDMwCisjZGVmaW5lIENGRzBfV19MRU5HVEhfMjRCSVQJCTB4MDAKKyNkZWZpbmUgQ0ZHMF9X
X0xFTkdUSF8xNkJJVAkJMHgxMAorI2RlZmluZSBHUkxfQ0ZHMQkJMHgyOAorI2RlZmluZSBDRkcx
X0VER19TRUwJCQlCSVQoMCkKKyNkZWZpbmUgQ0ZHMV9TUERJRgkJCUJJVCgxKQorI2RlZmluZSBD
RkcxX0RWSQkJCUJJVCgyKQorI2RlZmluZSBDRkcxX0hEQ1BfREVCVUcJCQlCSVQoMykKKyNkZWZp
bmUgR1JMX0NGRzIJCTB4MmMKKyNkZWZpbmUgQ0ZHMl9NSExfREVfU0VMCQkJQklUKDMpCisjZGVm
aW5lIENGRzJfTUhMX0ZBS0VfREVfU0VMCQlCSVQoNCkKKyNkZWZpbmUgQ0ZHMl9NSExfREFUQV9S
RU1BUAkJQklUKDUpCisjZGVmaW5lIENGRzJfTk9USUNFX0VOCQkJQklUKDYpCisjZGVmaW5lIENG
RzJfQUNMS19JTlYJCQlCSVQoNykKKyNkZWZpbmUgR1JMX0NGRzMJCTB4MzAKKyNkZWZpbmUgQ0ZH
M19BRVNfS0VZX0lOREVYX01BU0sJCTB4M2YKKyNkZWZpbmUgQ0ZHM19DT05UUk9MX1BBQ0tFVF9E
RUxBWQlCSVQoNikKKyNkZWZpbmUgQ0ZHM19LU1ZfTE9BRF9TVEFSVAkJQklUKDcpCisjZGVmaW5l
IEdSTF9DRkc0CQkweDM0CisjZGVmaW5lIENGRzRfQUVTX0tFWV9MT0FECQlCSVQoNCkKKyNkZWZp
bmUgQ0ZHNF9BVl9VTk1VVEVfRU4JCUJJVCg1KQorI2RlZmluZSBDRkc0X0FWX1VOTVVURV9TRVQJ
CUJJVCg2KQorI2RlZmluZSBDRkc0X01ITF9NT0RFCQkJQklUKDcpCisjZGVmaW5lIEdSTF9DRkc1
CQkweDM4CisjZGVmaW5lIENGRzVfQ0RfUkFUSU9fTUFTSwkweDhGCisjZGVmaW5lIENGRzVfRlMx
MjgJCQkoMHgxIDw8IDQpCisjZGVmaW5lIENGRzVfRlMyNTYJCQkoMHgyIDw8IDQpCisjZGVmaW5l
IENGRzVfRlMzODQJCQkoMHgzIDw8IDQpCisjZGVmaW5lIENGRzVfRlM1MTIJCQkoMHg0IDw8IDQp
CisjZGVmaW5lIENGRzVfRlM3NjgJCQkoMHg2IDw8IDQpCisjZGVmaW5lIERVTU1ZXzMwNAkJMHgz
MDQKKyNkZWZpbmUgQ0hNT19TRUwJCQkoMHgzIDw8IDIpCisjZGVmaW5lIENITTFfU0VMCQkJKDB4
MyA8PCA0KQorI2RlZmluZSBDSE0yX1NFTAkJCSgweDMgPDwgNikKKyNkZWZpbmUgQVVESU9fSTJT
X05DVFNfU0VMCQlCSVQoMSkKKyNkZWZpbmUgQVVESU9fSTJTX05DVFNfU0VMXzY0CQkoMSA8PCAx
KQorI2RlZmluZSBBVURJT19JMlNfTkNUU19TRUxfMTI4CQkoMCA8PCAxKQorI2RlZmluZSBORVdf
R0NQX0NUUkwJCQlCSVQoMCkKKyNkZWZpbmUgTkVXX0dDUF9DVFJMX01FUkdFCQlCSVQoMCkKKyNk
ZWZpbmUgR1JMX0xfU1RBVFVTXzAJCTB4MjAwCisjZGVmaW5lIEdSTF9MX1NUQVRVU18xCQkweDIw
NAorI2RlZmluZSBHUkxfTF9TVEFUVVNfMgkJMHgyMDgKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzMJ
CTB4MjBjCisjZGVmaW5lIEdSTF9MX1NUQVRVU180CQkweDIxMAorI2RlZmluZSBHUkxfTF9TVEFU
VVNfNQkJMHgyMTQKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzYJCTB4MjE4CisjZGVmaW5lIEdSTF9M
X1NUQVRVU183CQkweDIxYworI2RlZmluZSBHUkxfTF9TVEFUVVNfOAkJMHgyMjAKKyNkZWZpbmUg
R1JMX0xfU1RBVFVTXzkJCTB4MjI0CisjZGVmaW5lIEdSTF9MX1NUQVRVU18xMAkJMHgyMjgKKyNk
ZWZpbmUgR1JMX0xfU1RBVFVTXzExCQkweDIyYworI2RlZmluZSBHUkxfTF9TVEFUVVNfMTIJCTB4
MjMwCisjZGVmaW5lIEdSTF9MX1NUQVRVU18xMwkJMHgyMzQKKyNkZWZpbmUgR1JMX0xfU1RBVFVT
XzE0CQkweDIzOAorI2RlZmluZSBHUkxfTF9TVEFUVVNfMTUJCTB4MjNjCisjZGVmaW5lIEdSTF9M
X1NUQVRVU18xNgkJMHgyNDAKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzE3CQkweDI0NAorI2RlZmlu
ZSBHUkxfTF9TVEFUVVNfMTgJCTB4MjQ4CisjZGVmaW5lIEdSTF9MX1NUQVRVU18xOQkJMHgyNGMK
KyNkZWZpbmUgR1JMX0xfU1RBVFVTXzIwCQkweDI1MAorI2RlZmluZSBHUkxfTF9TVEFUVVNfMjEJ
CTB4MjU0CisjZGVmaW5lIEdSTF9MX1NUQVRVU18yMgkJMHgyNTgKKyNkZWZpbmUgR1JMX0xfU1RB
VFVTXzIzCQkweDI1YworI2RlZmluZSBHUkxfUl9TVEFUVVNfMAkJMHgyNjAKKyNkZWZpbmUgR1JM
X1JfU1RBVFVTXzEJCTB4MjY0CisjZGVmaW5lIEdSTF9SX1NUQVRVU18yCQkweDI2OAorI2RlZmlu
ZSBHUkxfUl9TVEFUVVNfMwkJMHgyNmMKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzQJCTB4MjcwCisj
ZGVmaW5lIEdSTF9SX1NUQVRVU181CQkweDI3NAorI2RlZmluZSBHUkxfUl9TVEFUVVNfNgkJMHgy
NzgKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzcJCTB4MjdjCisjZGVmaW5lIEdSTF9SX1NUQVRVU184
CQkweDI4MAorI2RlZmluZSBHUkxfUl9TVEFUVVNfOQkJMHgyODQKKyNkZWZpbmUgR1JMX1JfU1RB
VFVTXzEwCQkweDI4OAorI2RlZmluZSBHUkxfUl9TVEFUVVNfMTEJCTB4MjhjCisjZGVmaW5lIEdS
TF9SX1NUQVRVU18xMgkJMHgyOTAKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzEzCQkweDI5NAorI2Rl
ZmluZSBHUkxfUl9TVEFUVVNfMTQJCTB4Mjk4CisjZGVmaW5lIEdSTF9SX1NUQVRVU18xNQkJMHgy
OWMKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzE2CQkweDJhMAorI2RlZmluZSBHUkxfUl9TVEFUVVNf
MTcJCTB4MmE0CisjZGVmaW5lIEdSTF9SX1NUQVRVU18xOAkJMHgyYTgKKyNkZWZpbmUgR1JMX1Jf
U1RBVFVTXzE5CQkweDJhYworI2RlZmluZSBHUkxfUl9TVEFUVVNfMjAJCTB4MmIwCisjZGVmaW5l
IEdSTF9SX1NUQVRVU18yMQkJMHgyYjQKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzIyCQkweDJiOAor
I2RlZmluZSBHUkxfUl9TVEFUVVNfMjMJCTB4MmJjCisjZGVmaW5lIEdSTF9BQklTVF9DVFJMMAkJ
MHgyRDQKKyNkZWZpbmUgR1JMX0FCSVNUX0NUUkwxCQkweDJEOAorI2RlZmluZSBBQklTVF9FTgkJ
CUJJVCg3KQorI2RlZmluZSBBQklTVF9EQVRBX0ZNVAkJCSgweDcgPDwgMCkKKyNkZWZpbmUgVklE
RU9fQ0ZHXzAJCTB4MzgwCisjZGVmaW5lIFZJREVPX0NGR18xCQkweDM4NAorI2RlZmluZSBWSURF
T19DRkdfMgkJMHgzODgKKyNkZWZpbmUgVklERU9fQ0ZHXzMJCTB4MzhjCisjZGVmaW5lIFZJREVP
X0NGR180CQkweDM5MAorI2RlZmluZSBWSURFT19TT1VSQ0VfU0VMCQlCSVQoNykKKyNkZWZpbmUg
Tk9STUFMX1BBVEgJCQkoMSA8PCA3KQorI2RlZmluZSBHRU5fUkdCCQkJCSgwIDw8IDcpCisKKyNk
ZWZpbmUgSERNSV9TWVNfQ0ZHMUMJCTB4MDAwCisjZGVmaW5lIEhETUlfT04JCQkJQklUKDApCisj
ZGVmaW5lIEhETUlfUlNUCQkJQklUKDEpCisjZGVmaW5lIEFOTEdfT04JCQkJQklUKDIpCisjZGVm
aW5lIENGRzEwX0RWSQkJCUJJVCgzKQorI2RlZmluZSBIRE1JX1RTVAkJCUJJVCgzKQorI2RlZmlu
ZSBTWVNfS0VZTUFTSzEJCQkoMHhmZiA8PCA4KQorI2RlZmluZSBTWVNfS0VZTUFTSzIJCQkoMHhm
ZiA8PCAxNikKKyNkZWZpbmUgQVVEX09VVFNZTkNfRU4JCQlCSVQoMjQpCisjZGVmaW5lIEFVRF9P
VVRTWU5DX1BSRV9FTgkJQklUKDI1KQorI2RlZmluZSBJMkNNX09OCQkJCUJJVCgyNikKKyNkZWZp
bmUgRTJQUk9NX1RZUEVfOEJJVAkJQklUKDI3KQorI2RlZmluZSBNQ01fRTJQUk9NX09OCQkJQklU
KDI4KQorI2RlZmluZSBFWFRfRTJQUk9NX09OCQkJQklUKDI5KQorI2RlZmluZSBIVFBMR19QSU5f
U0VMX09GRgkJQklUKDMwKQorI2RlZmluZSBBRVNfRUZVU0VfRU5BQkxFCQlCSVQoMzEpCisjZGVm
aW5lIEhETUlfU1lTX0NGRzIwCQkweDAwNAorI2RlZmluZSBERUVQX0NPTE9SX01PREVfTUFTSwkJ
KDMgPDwgMSkKKyNkZWZpbmUgQ09MT1JfOEJJVF9NT0RFCQkJKDAgPDwgMSkKKyNkZWZpbmUgQ09M
T1JfMTBCSVRfTU9ERQkJKDEgPDwgMSkKKyNkZWZpbmUgQ09MT1JfMTJCSVRfTU9ERQkJKDIgPDwg
MSkKKyNkZWZpbmUgQ09MT1JfMTZCSVRfTU9ERQkJKDMgPDwgMSkKKyNkZWZpbmUgREVFUF9DT0xP
Ul9FTgkJCUJJVCgwKQorI2RlZmluZSBIRE1JX0FVRElPX1RFU1RfU0VMCQlCSVQoOCkKKyNkZWZp
bmUgSERNSTJQMF9FTgkJCUJJVCgxMSkKKyNkZWZpbmUgSERNSV9PVVRfRklGT19FTgkJQklUKDE2
KQorI2RlZmluZSBIRE1JX09VVF9GSUZPX0NMS19JTlYJCUJJVCgxNykKKyNkZWZpbmUgTUhMX01P
REVfT04JCQlCSVQoMjgpCisjZGVmaW5lIE1ITF9QUF9NT0RFCQkJQklUKDI5KQorI2RlZmluZSBN
SExfU1lOQ19BVVRPX0VOCQlCSVQoMzApCisjZGVmaW5lIEhETUlfUENMS19GUkVFX1JVTgkJQklU
KDMxKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf
bXQ4MTczX2hkbWlfcGh5LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX210ODE3M19o
ZG1pX3BoeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMjQ3NTQKLS0t
IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX210ODE3M19oZG1p
X3BoeS5jCkBAIC0wLDAgKzEsNTE1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0IE1lZGlh
VGVrIEluYy4KKyAqIEF1dGhvcjogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+CisgKgor
ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNs
dWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KKyNpbmNs
dWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGlu
dXgvbWZkL3N5c2Nvbi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxp
bnV4L3BoeS9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNs
dWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIEhETUlfQ09OMAkJMHgwMAorI2RlZmluZSBS
R19IRE1JVFhfUExMX0VOCQlCSVQoMzEpCisjZGVmaW5lIFJHX0hETUlUWF9QTExfRkJLRElWCQko
MHg3ZiA8PCAyNCkKKyNkZWZpbmUgUExMX0ZCS0RJVl9TSElGVAkJMjQKKyNkZWZpbmUgUkdfSERN
SVRYX1BMTF9GQktTRUwJCSgweDMgPDwgMjIpCisjZGVmaW5lIFBMTF9GQktTRUxfU0hJRlQJCTIy
CisjZGVmaW5lIFJHX0hETUlUWF9QTExfUFJFRElWCQkoMHgzIDw8IDIwKQorI2RlZmluZSBQUkVE
SVZfU0hJRlQJCQkyMAorI2RlZmluZSBSR19IRE1JVFhfUExMX1BPU0RJVgkJKDB4MyA8PCAxOCkK
KyNkZWZpbmUgUE9TRElWX1NISUZUCQkJMTgKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9SU1RfRExZ
CQkoMHgzIDw8IDE2KQorI2RlZmluZSBSR19IRE1JVFhfUExMX0lSCQkoMHhmIDw8IDEyKQorI2Rl
ZmluZSBQTExfSVJfU0hJRlQJCQkxMgorI2RlZmluZSBSR19IRE1JVFhfUExMX0lDCQkoMHhmIDw8
IDgpCisjZGVmaW5lIFBMTF9JQ19TSElGVAkJCTgKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9CUAkJ
KDB4ZiA8PCA0KQorI2RlZmluZSBQTExfQlBfU0hJRlQJCQk0CisjZGVmaW5lIFJHX0hETUlUWF9Q
TExfQlIJCSgweDMgPDwgMikKKyNkZWZpbmUgUExMX0JSX1NISUZUCQkJMgorI2RlZmluZSBSR19I
RE1JVFhfUExMX0JDCQkoMHgzIDw8IDApCisjZGVmaW5lIFBMTF9CQ19TSElGVAkJCTAKKyNkZWZp
bmUgSERNSV9DT04xCQkweDA0CisjZGVmaW5lIFJHX0hETUlUWF9QTExfRElWRU4JCSgweDcgPDwg
MjkpCisjZGVmaW5lIFBMTF9ESVZFTl9TSElGVAkJCTI5CisjZGVmaW5lIFJHX0hETUlUWF9QTExf
QVVUT0tfRU4JCUJJVCgyOCkKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9BVVRPS19LRgkJKDB4MyA8
PCAyNikKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9BVVRPS19LUwkJKDB4MyA8PCAyNCkKKyNkZWZp
bmUgUkdfSERNSVRYX1BMTF9BVVRPS19MT0FECUJJVCgyMykKKyNkZWZpbmUgUkdfSERNSVRYX1BM
TF9CQU5ECQkoMHgzZiA8PCAxNikKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9SRUZfU0VMCQlCSVQo
MTUpCisjZGVmaW5lIFJHX0hETUlUWF9QTExfQklBU19FTgkJQklUKDE0KQorI2RlZmluZSBSR19I
RE1JVFhfUExMX0JJQVNfTFBGX0VOCUJJVCgxMykKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9UWERJ
Vl9FTgkJQklUKDEyKQorI2RlZmluZSBSR19IRE1JVFhfUExMX1RYRElWCQkoMHgzIDw8IDEwKQor
I2RlZmluZSBQTExfVFhESVZfU0hJRlQJCQkxMAorI2RlZmluZSBSR19IRE1JVFhfUExMX0xWUk9E
X0VOCQlCSVQoOSkKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9NT05WQ19FTgkJQklUKDgpCisjZGVm
aW5lIFJHX0hETUlUWF9QTExfTU9OQ0tfRU4JCUJJVCg3KQorI2RlZmluZSBSR19IRE1JVFhfUExM
X01PTlJFRl9FTgkJQklUKDYpCisjZGVmaW5lIFJHX0hETUlUWF9QTExfVFNUX0VOCQlCSVQoNSkK
KyNkZWZpbmUgUkdfSERNSVRYX1BMTF9UU1RfQ0tfRU4JCUJJVCg0KQorI2RlZmluZSBSR19IRE1J
VFhfUExMX1RTVF9TRUwJCSgweGYgPDwgMCkKKyNkZWZpbmUgSERNSV9DT04yCQkweDA4CisjZGVm
aW5lIFJHU19IRE1JVFhfUExMX0FVVE9LX0JBTkQJKDB4N2YgPDwgOCkKKyNkZWZpbmUgUkdTX0hE
TUlUWF9QTExfQVVUT0tfRkFJTAlCSVQoMSkKKyNkZWZpbmUgUkdfSERNSVRYX0VOX1RYX0NLTERP
CQlCSVQoMCkKKyNkZWZpbmUgSERNSV9DT04zCQkweDBjCisjZGVmaW5lIFJHX0hETUlUWF9TRVJf
RU4JCSgweGYgPDwgMjgpCisjZGVmaW5lIFJHX0hETUlUWF9QUkRfRU4JCSgweGYgPDwgMjQpCisj
ZGVmaW5lIFJHX0hETUlUWF9QUkRfSU1QX0VOCQkoMHhmIDw8IDIwKQorI2RlZmluZSBSR19IRE1J
VFhfRFJWX0VOCQkoMHhmIDw8IDE2KQorI2RlZmluZSBSR19IRE1JVFhfRFJWX0lNUF9FTgkJKDB4
ZiA8PCAxMikKKyNkZWZpbmUgRFJWX0lNUF9FTl9TSElGVAkJMTIKKyNkZWZpbmUgUkdfSERNSVRY
X01ITENLX0ZPUkNFCQlCSVQoMTApCisjZGVmaW5lIFJHX0hETUlUWF9NSExDS19QUElYX0VOCQlC
SVQoOSkKKyNkZWZpbmUgUkdfSERNSVRYX01ITENLX0VOCQlCSVQoOCkKKyNkZWZpbmUgUkdfSERN
SVRYX1NFUl9ESU5fU0VMCQkoMHhmIDw8IDQpCisjZGVmaW5lIFJHX0hETUlUWF9TRVJfNVQxX0JJ
U1RfRU4JQklUKDMpCisjZGVmaW5lIFJHX0hETUlUWF9TRVJfQklTVF9UT0cJCUJJVCgyKQorI2Rl
ZmluZSBSR19IRE1JVFhfU0VSX0RJTl9UT0cJCUJJVCgxKQorI2RlZmluZSBSR19IRE1JVFhfU0VS
X0NMS0RJR19JTlYJQklUKDApCisjZGVmaW5lIEhETUlfQ09ONAkJMHgxMAorI2RlZmluZSBSR19I
RE1JVFhfUFJEX0lCSUFTX0NMSwkJKDB4ZiA8PCAyNCkKKyNkZWZpbmUgUkdfSERNSVRYX1BSRF9J
QklBU19EMgkJKDB4ZiA8PCAxNikKKyNkZWZpbmUgUkdfSERNSVRYX1BSRF9JQklBU19EMQkJKDB4
ZiA8PCA4KQorI2RlZmluZSBSR19IRE1JVFhfUFJEX0lCSUFTX0QwCQkoMHhmIDw8IDApCisjZGVm
aW5lIFBSRF9JQklBU19DTEtfU0hJRlQJCTI0CisjZGVmaW5lIFBSRF9JQklBU19EMl9TSElGVAkJ
MTYKKyNkZWZpbmUgUFJEX0lCSUFTX0QxX1NISUZUCQk4CisjZGVmaW5lIFBSRF9JQklBU19EMF9T
SElGVAkJMAorI2RlZmluZSBIRE1JX0NPTjUJCTB4MTQKKyNkZWZpbmUgUkdfSERNSVRYX0RSVl9J
QklBU19DTEsJCSgweDNmIDw8IDI0KQorI2RlZmluZSBSR19IRE1JVFhfRFJWX0lCSUFTX0QyCQko
MHgzZiA8PCAxNikKKyNkZWZpbmUgUkdfSERNSVRYX0RSVl9JQklBU19EMQkJKDB4M2YgPDwgOCkK
KyNkZWZpbmUgUkdfSERNSVRYX0RSVl9JQklBU19EMAkJKDB4M2YgPDwgMCkKKyNkZWZpbmUgRFJW
X0lCSUFTX0NMS19TSElGVAkJMjQKKyNkZWZpbmUgRFJWX0lCSUFTX0QyX1NISUZUCQkxNgorI2Rl
ZmluZSBEUlZfSUJJQVNfRDFfU0hJRlQJCTgKKyNkZWZpbmUgRFJWX0lCSUFTX0QwX1NISUZUCQkw
CisjZGVmaW5lIEhETUlfQ09ONgkJMHgxOAorI2RlZmluZSBSR19IRE1JVFhfRFJWX0lNUF9DTEsJ
CSgweDNmIDw8IDI0KQorI2RlZmluZSBSR19IRE1JVFhfRFJWX0lNUF9EMgkJKDB4M2YgPDwgMTYp
CisjZGVmaW5lIFJHX0hETUlUWF9EUlZfSU1QX0QxCQkoMHgzZiA8PCA4KQorI2RlZmluZSBSR19I
RE1JVFhfRFJWX0lNUF9EMAkJKDB4M2YgPDwgMCkKKyNkZWZpbmUgRFJWX0lNUF9DTEtfU0hJRlQJ
CTI0CisjZGVmaW5lIERSVl9JTVBfRDJfU0hJRlQJCTE2CisjZGVmaW5lIERSVl9JTVBfRDFfU0hJ
RlQJCTgKKyNkZWZpbmUgRFJWX0lNUF9EMF9TSElGVAkJMAorI2RlZmluZSBIRE1JX0NPTjcJCTB4
MWMKKyNkZWZpbmUgUkdfSERNSVRYX01ITENLX0RSVl9JQklBUwkoMHgxZiA8PCAyNykKKyNkZWZp
bmUgUkdfSERNSVRYX1NFUl9ESU4JCSgweDNmZiA8PCAxNikKKyNkZWZpbmUgUkdfSERNSVRYX0NI
TERDX1RTVAkJKDB4ZiA8PCAxMikKKyNkZWZpbmUgUkdfSERNSVRYX0NITENLX1RTVAkJKDB4ZiA8
PCA4KQorI2RlZmluZSBSR19IRE1JVFhfUkVTRVJWRQkJKDB4ZmYgPDwgMCkKKyNkZWZpbmUgSERN
SV9DT044CQkweDIwCisjZGVmaW5lIFJHU19IRE1JVFhfMlQxX0xFVgkJKDB4ZiA8PCAxNikKKyNk
ZWZpbmUgUkdTX0hETUlUWF8yVDFfRURHCQkoMHhmIDw8IDEyKQorI2RlZmluZSBSR1NfSERNSVRY
XzVUMV9MRVYJCSgweGYgPDwgOCkKKyNkZWZpbmUgUkdTX0hETUlUWF81VDFfRURHCQkoMHhmIDw8
IDQpCisjZGVmaW5lIFJHU19IRE1JVFhfUExVR19UU1QJCUJJVCgwKQorCitzdHJ1Y3QgbXRrX2hk
bWlfcGh5IHsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0
cnVjdCBjbGsgKnBsbDsKKwlzdHJ1Y3QgY2xrX2h3IHBsbF9odzsKKwl1bnNpZ25lZCBsb25nIHBs
bF9yYXRlOworCXU4IGRydl9pbXBfY2xrOworCXU4IGRydl9pbXBfZDI7CisJdTggZHJ2X2ltcF9k
MTsKKwl1OCBkcnZfaW1wX2QwOworCXUzMiBpYmlhczsKKwl1MzIgaWJpYXNfdXA7Cit9OworCitz
dGF0aWMgY29uc3QgdTggUFJFRElWWzNdWzRdID0geworCXsweDAsIDB4MCwgMHgwLCAweDB9LAkv
KiAyN01oeiAqLworCXsweDEsIDB4MSwgMHgxLCAweDF9LAkvKiA3NE1oeiAqLworCXsweDEsIDB4
MSwgMHgxLCAweDF9CS8qIDE0OE1oeiAqLworfTsKKworc3RhdGljIGNvbnN0IHU4IFRYRElWWzNd
WzRdID0geworCXsweDMsIDB4MywgMHgzLCAweDJ9LAkvKiAyN01oeiAqLworCXsweDIsIDB4MSwg
MHgxLCAweDF9LAkvKiA3NE1oeiAqLworCXsweDEsIDB4MCwgMHgwLCAweDB9CS8qIDE0OE1oeiAq
LworfTsKKworc3RhdGljIGNvbnN0IHU4IEZCS1NFTFszXVs0XSA9IHsKKwl7MHgxLCAweDEsIDB4
MSwgMHgxfSwJLyogMjdNaHogKi8KKwl7MHgxLCAweDAsIDB4MSwgMHgxfSwJLyogNzRNaHogKi8K
Kwl7MHgxLCAweDAsIDB4MSwgMHgxfQkvKiAxNDhNaHogKi8KK307CisKK3N0YXRpYyBjb25zdCB1
OCBGQktESVZbM11bNF0gPSB7CisJezE5LCAyNCwgMjksIDE5fSwJLyogMjdNaHogKi8KKwl7MTks
IDI0LCAxNCwgMTl9LAkvKiA3NE1oeiAqLworCXsxOSwgMjQsIDE0LCAxOX0JLyogMTQ4TWh6ICov
Cit9OworCitzdGF0aWMgY29uc3QgdTggRElWRU5bM11bNF0gPSB7CisJezB4MiwgMHgxLCAweDEs
IDB4Mn0sCS8qIDI3TWh6ICovCisJezB4MiwgMHgyLCAweDIsIDB4Mn0sCS8qIDc0TWh6ICovCisJ
ezB4MiwgMHgyLCAweDIsIDB4Mn0JLyogMTQ4TWh6ICovCit9OworCitzdGF0aWMgY29uc3QgdTgg
SFRQTExCUFszXVs0XSA9IHsKKwl7MHhjLCAweGMsIDB4OCwgMHhjfSwJLyogMjdNaHogKi8KKwl7
MHhjLCAweGYsIDB4ZiwgMHhjfSwJLyogNzRNaHogKi8KKwl7MHhjLCAweGYsIDB4ZiwgMHhjfQkv
KiAxNDhNaHogKi8KK307CisKK3N0YXRpYyBjb25zdCB1OCBIVFBMTEJDWzNdWzRdID0geworCXsw
eDIsIDB4MywgMHgzLCAweDJ9LAkvKiAyN01oeiAqLworCXsweDIsIDB4MywgMHgzLCAweDJ9LAkv
KiA3NE1oeiAqLworCXsweDIsIDB4MywgMHgzLCAweDJ9CS8qIDE0OE1oeiAqLworfTsKKworc3Rh
dGljIGNvbnN0IHU4IEhUUExMQlJbM11bNF0gPSB7CisJezB4MSwgMHgxLCAweDAsIDB4MX0sCS8q
IDI3TWh6ICovCisJezB4MSwgMHgyLCAweDIsIDB4MX0sCS8qIDc0TWh6ICovCisJezB4MSwgMHgy
LCAweDIsIDB4MX0JLyogMTQ4TWh6ICovCit9OworCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9waHlf
Y2xlYXJfYml0cyhzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSwgdTMyIG9mZnNldCwKKwkJ
CQkgICAgdTMyIGJpdHMpCit7CisJdm9pZCBfX2lvbWVtICpyZWcgPSBoZG1pX3BoeS0+cmVncyAr
IG9mZnNldDsKKwl1MzIgdG1wOworCisJdG1wID0gcmVhZGwocmVnKTsKKwl0bXAgJj0gfmJpdHM7
CisJd3JpdGVsKHRtcCwgcmVnKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfcGh5X3NldF9i
aXRzKHN0cnVjdCBtdGtfaGRtaV9waHkgKmhkbWlfcGh5LCB1MzIgb2Zmc2V0LAorCQkJCSAgdTMy
IGJpdHMpCit7CisJdm9pZCBfX2lvbWVtICpyZWcgPSBoZG1pX3BoeS0+cmVncyArIG9mZnNldDsK
Kwl1MzIgdG1wOworCisJdG1wID0gcmVhZGwocmVnKTsKKwl0bXAgfD0gYml0czsKKwl3cml0ZWwo
dG1wLCByZWcpOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9waHlfbWFzayhzdHJ1Y3QgbXRr
X2hkbWlfcGh5ICpoZG1pX3BoeSwgdTMyIG9mZnNldCwKKwkJCSAgICAgIHUzMiB2YWwsIHUzMiBt
YXNrKQoreworCXZvaWQgX19pb21lbSAqcmVnID0gaGRtaV9waHktPnJlZ3MgKyBvZmZzZXQ7CisJ
dTMyIHRtcDsKKworCXRtcCA9IHJlYWRsKHJlZyk7CisJdG1wID0gKHRtcCAmIH5tYXNrKSB8ICh2
YWwgJiBtYXNrKTsKKwl3cml0ZWwodG1wLCByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVj
dCBtdGtfaGRtaV9waHkgKnRvX210a19oZG1pX3BoeShzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwly
ZXR1cm4gY29udGFpbmVyX29mKGh3LCBzdHJ1Y3QgbXRrX2hkbWlfcGh5LCBwbGxfaHcpOworfQor
CitzdGF0aWMgaW50IG10a19oZG1pX3BsbF9wcmVwYXJlKHN0cnVjdCBjbGtfaHcgKmh3KQorewor
CXN0cnVjdCBtdGtfaGRtaV9waHkgKmhkbWlfcGh5ID0gdG9fbXRrX2hkbWlfcGh5KGh3KTsKKwor
CWRldl9kYmcoaGRtaV9waHktPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwltdGtfaGRtaV9w
aHlfc2V0X2JpdHMoaGRtaV9waHksIEhETUlfQ09OMSwgUkdfSERNSVRYX1BMTF9BVVRPS19FTik7
CisJbXRrX2hkbWlfcGh5X3NldF9iaXRzKGhkbWlfcGh5LCBIRE1JX0NPTjAsIFJHX0hETUlUWF9Q
TExfUE9TRElWKTsKKwltdGtfaGRtaV9waHlfY2xlYXJfYml0cyhoZG1pX3BoeSwgSERNSV9DT04z
LCBSR19IRE1JVFhfTUhMQ0tfRU4pOworCW10a19oZG1pX3BoeV9zZXRfYml0cyhoZG1pX3BoeSwg
SERNSV9DT04xLCBSR19IRE1JVFhfUExMX0JJQVNfRU4pOworCXVzbGVlcF9yYW5nZSgxMDAsIDE1
MCk7CisJbXRrX2hkbWlfcGh5X3NldF9iaXRzKGhkbWlfcGh5LCBIRE1JX0NPTjAsIFJHX0hETUlU
WF9QTExfRU4pOworCXVzbGVlcF9yYW5nZSgxMDAsIDE1MCk7CisJbXRrX2hkbWlfcGh5X3NldF9i
aXRzKGhkbWlfcGh5LCBIRE1JX0NPTjEsIFJHX0hETUlUWF9QTExfQklBU19MUEZfRU4pOworCW10
a19oZG1pX3BoeV9zZXRfYml0cyhoZG1pX3BoeSwgSERNSV9DT04xLCBSR19IRE1JVFhfUExMX1RY
RElWX0VOKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9wbGxfdW5w
cmVwYXJlKHN0cnVjdCBjbGtfaHcgKmh3KQoreworCXN0cnVjdCBtdGtfaGRtaV9waHkgKmhkbWlf
cGh5ID0gdG9fbXRrX2hkbWlfcGh5KGh3KTsKKworCWRldl9kYmcoaGRtaV9waHktPmRldiwgIiVz
XG4iLCBfX2Z1bmNfXyk7CisKKwltdGtfaGRtaV9waHlfY2xlYXJfYml0cyhoZG1pX3BoeSwgSERN
SV9DT04xLCBSR19IRE1JVFhfUExMX1RYRElWX0VOKTsKKwltdGtfaGRtaV9waHlfY2xlYXJfYml0
cyhoZG1pX3BoeSwgSERNSV9DT04xLCBSR19IRE1JVFhfUExMX0JJQVNfTFBGX0VOKTsKKwl1c2xl
ZXBfcmFuZ2UoMTAwLCAxNTApOworCW10a19oZG1pX3BoeV9jbGVhcl9iaXRzKGhkbWlfcGh5LCBI
RE1JX0NPTjAsIFJHX0hETUlUWF9QTExfRU4pOworCXVzbGVlcF9yYW5nZSgxMDAsIDE1MCk7CisJ
bXRrX2hkbWlfcGh5X2NsZWFyX2JpdHMoaGRtaV9waHksIEhETUlfQ09OMSwgUkdfSERNSVRYX1BM
TF9CSUFTX0VOKTsKKwltdGtfaGRtaV9waHlfY2xlYXJfYml0cyhoZG1pX3BoeSwgSERNSV9DT04w
LCBSR19IRE1JVFhfUExMX1BPU0RJVik7CisJbXRrX2hkbWlfcGh5X2NsZWFyX2JpdHMoaGRtaV9w
aHksIEhETUlfQ09OMSwgUkdfSERNSVRYX1BMTF9BVVRPS19FTik7CisJdXNsZWVwX3JhbmdlKDEw
MCwgMTUwKTsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9wbGxfc2V0X3JhdGUoc3RydWN0IGNs
a19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJCQkgdW5zaWduZWQgbG9uZyBwYXJlbnRf
cmF0ZSkKK3sKKwlzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSA9IHRvX210a19oZG1pX3Bo
eShodyk7CisJdW5zaWduZWQgaW50IHByZV9kaXY7CisJdW5zaWduZWQgaW50IGRpdjsKKworCWRl
dl9kYmcoaGRtaV9waHktPmRldiwgIiVzOiAlbHUgSHosIHBhcmVudDogJWx1IEh6XG4iLCBfX2Z1
bmNfXywKKwkJcmF0ZSwgcGFyZW50X3JhdGUpOworCisJaWYgKHJhdGUgPD0gMjcwMDAwMDApIHsK
KwkJcHJlX2RpdiA9IDA7CisJCWRpdiA9IDM7CisJfSBlbHNlIGlmIChyYXRlIDw9IDc0MjUwMDAw
KSB7CisJCXByZV9kaXYgPSAxOworCQlkaXYgPSAyOworCX0gZWxzZSB7CisJCXByZV9kaXYgPSAx
OworCQlkaXYgPSAxOworCX0KKworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NP
TjAsCisJCQkgIChwcmVfZGl2IDw8IFBSRURJVl9TSElGVCksIFJHX0hETUlUWF9QTExfUFJFRElW
KTsKKwltdGtfaGRtaV9waHlfc2V0X2JpdHMoaGRtaV9waHksIEhETUlfQ09OMCwgUkdfSERNSVRY
X1BMTF9QT1NESVYpOworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjAsCisJ
CQkgICgweDEgPDwgUExMX0lDX1NISUZUKSB8ICgweDEgPDwgUExMX0lSX1NISUZUKSwKKwkJCSAg
UkdfSERNSVRYX1BMTF9JQyB8IFJHX0hETUlUWF9QTExfSVIpOworCW10a19oZG1pX3BoeV9tYXNr
KGhkbWlfcGh5LCBIRE1JX0NPTjEsCisJCQkgIChkaXYgPDwgUExMX1RYRElWX1NISUZUKSwgUkdf
SERNSVRYX1BMTF9UWERJVik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09O
MCwKKwkJCSAgKDB4MSA8PCBQTExfRkJLU0VMX1NISUZUKSB8ICgxOSA8PCBQTExfRkJLRElWX1NI
SUZUKSwKKwkJCSAgUkdfSERNSVRYX1BMTF9GQktTRUwgfCBSR19IRE1JVFhfUExMX0ZCS0RJVik7
CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMSwKKwkJCSAgKDB4MiA8PCBQ
TExfRElWRU5fU0hJRlQpLCBSR19IRE1JVFhfUExMX0RJVkVOKTsKKwltdGtfaGRtaV9waHlfbWFz
ayhoZG1pX3BoeSwgSERNSV9DT04wLAorCQkJICAoMHhjIDw8IFBMTF9CUF9TSElGVCkgfCAoMHgy
IDw8IFBMTF9CQ19TSElGVCkgfAorCQkJICAoMHgxIDw8IFBMTF9CUl9TSElGVCksCisJCQkgIFJH
X0hETUlUWF9QTExfQlAgfCBSR19IRE1JVFhfUExMX0JDIHwKKwkJCSAgUkdfSERNSVRYX1BMTF9C
Uik7CisJbXRrX2hkbWlfcGh5X2NsZWFyX2JpdHMoaGRtaV9waHksIEhETUlfQ09OMywgUkdfSERN
SVRYX1BSRF9JTVBfRU4pOworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjQs
CisJCQkgICgweDMgPDwgUFJEX0lCSUFTX0NMS19TSElGVCkgfAorCQkJICAoMHgzIDw8IFBSRF9J
QklBU19EMl9TSElGVCkgfAorCQkJICAoMHgzIDw8IFBSRF9JQklBU19EMV9TSElGVCkgfAorCQkJ
ICAoMHgzIDw8IFBSRF9JQklBU19EMF9TSElGVCksCisJCQkgIFJHX0hETUlUWF9QUkRfSUJJQVNf
Q0xLIHwKKwkJCSAgUkdfSERNSVRYX1BSRF9JQklBU19EMiB8CisJCQkgIFJHX0hETUlUWF9QUkRf
SUJJQVNfRDEgfAorCQkJICBSR19IRE1JVFhfUFJEX0lCSUFTX0QwKTsKKwltdGtfaGRtaV9waHlf
bWFzayhoZG1pX3BoeSwgSERNSV9DT04zLAorCQkJICAoMHgwIDw8IERSVl9JTVBfRU5fU0hJRlQp
LCBSR19IRE1JVFhfRFJWX0lNUF9FTik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhE
TUlfQ09ONiwKKwkJCSAgKGhkbWlfcGh5LT5kcnZfaW1wX2NsayA8PCBEUlZfSU1QX0NMS19TSElG
VCkgfAorCQkJICAoaGRtaV9waHktPmRydl9pbXBfZDIgPDwgRFJWX0lNUF9EMl9TSElGVCkgfAor
CQkJICAoaGRtaV9waHktPmRydl9pbXBfZDEgPDwgRFJWX0lNUF9EMV9TSElGVCkgfAorCQkJICAo
aGRtaV9waHktPmRydl9pbXBfZDAgPDwgRFJWX0lNUF9EMF9TSElGVCksCisJCQkgIFJHX0hETUlU
WF9EUlZfSU1QX0NMSyB8IFJHX0hETUlUWF9EUlZfSU1QX0QyIHwKKwkJCSAgUkdfSERNSVRYX0RS
Vl9JTVBfRDEgfCBSR19IRE1JVFhfRFJWX0lNUF9EMCk7CisJbXRrX2hkbWlfcGh5X21hc2soaGRt
aV9waHksIEhETUlfQ09ONSwKKwkJCSAgKGhkbWlfcGh5LT5pYmlhcyA8PCBEUlZfSUJJQVNfQ0xL
X1NISUZUKSB8CisJCQkgIChoZG1pX3BoeS0+aWJpYXMgPDwgRFJWX0lCSUFTX0QyX1NISUZUKSB8
CisJCQkgIChoZG1pX3BoeS0+aWJpYXMgPDwgRFJWX0lCSUFTX0QxX1NISUZUKSB8CisJCQkgICho
ZG1pX3BoeS0+aWJpYXMgPDwgRFJWX0lCSUFTX0QwX1NISUZUKSwKKwkJCSAgUkdfSERNSVRYX0RS
Vl9JQklBU19DTEsgfCBSR19IRE1JVFhfRFJWX0lCSUFTX0QyIHwKKwkJCSAgUkdfSERNSVRYX0RS
Vl9JQklBU19EMSB8IFJHX0hETUlUWF9EUlZfSUJJQVNfRDApOworCXJldHVybiAwOworfQorCitz
dGF0aWMgbG9uZyBtdGtfaGRtaV9wbGxfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywgdW5z
aWduZWQgbG9uZyByYXRlLAorCQkJCSAgICB1bnNpZ25lZCBsb25nICpwYXJlbnRfcmF0ZSkKK3sK
KwlzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSA9IHRvX210a19oZG1pX3BoeShodyk7CisK
KwloZG1pX3BoeS0+cGxsX3JhdGUgPSByYXRlOworCWlmIChyYXRlIDw9IDc0MjUwMDAwKQorCQkq
cGFyZW50X3JhdGUgPSByYXRlOworCWVsc2UKKwkJKnBhcmVudF9yYXRlID0gcmF0ZSAvIDI7CisK
KwlyZXR1cm4gcmF0ZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbXRrX2hkbWlfcGxsX3Jl
Y2FsY19yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LAorCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHBh
cmVudF9yYXRlKQoreworCXN0cnVjdCBtdGtfaGRtaV9waHkgKmhkbWlfcGh5ID0gdG9fbXRrX2hk
bWlfcGh5KGh3KTsKKworCXJldHVybiBoZG1pX3BoeS0+cGxsX3JhdGU7Cit9CisKK3N0YXRpYyBj
b25zdCBzdHJ1Y3QgY2xrX29wcyBtdGtfaGRtaV9wbGxfb3BzID0geworCS5wcmVwYXJlID0gbXRr
X2hkbWlfcGxsX3ByZXBhcmUsCisJLnVucHJlcGFyZSA9IG10a19oZG1pX3BsbF91bnByZXBhcmUs
CisJLnNldF9yYXRlID0gbXRrX2hkbWlfcGxsX3NldF9yYXRlLAorCS5yb3VuZF9yYXRlID0gbXRr
X2hkbWlfcGxsX3JvdW5kX3JhdGUsCisJLnJlY2FsY19yYXRlID0gbXRrX2hkbWlfcGxsX3JlY2Fs
Y19yYXRlLAorfTsKKworc3RhdGljIHZvaWQgbXRrX2hkbWlfcGh5X2VuYWJsZV90bWRzKHN0cnVj
dCBtdGtfaGRtaV9waHkgKmhkbWlfcGh5KQoreworCW10a19oZG1pX3BoeV9zZXRfYml0cyhoZG1p
X3BoeSwgSERNSV9DT04zLAorCQkJICAgICAgUkdfSERNSVRYX1NFUl9FTiB8IFJHX0hETUlUWF9Q
UkRfRU4gfAorCQkJICAgICAgUkdfSERNSVRYX0RSVl9FTik7CisJdXNsZWVwX3JhbmdlKDEwMCwg
MTUwKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfcGh5X2Rpc2FibGVfdG1kcyhzdHJ1Y3Qg
bXRrX2hkbWlfcGh5ICpoZG1pX3BoeSkKK3sKKwltdGtfaGRtaV9waHlfY2xlYXJfYml0cyhoZG1p
X3BoeSwgSERNSV9DT04zLAorCQkJCVJHX0hETUlUWF9EUlZfRU4gfCBSR19IRE1JVFhfUFJEX0VO
IHwKKwkJCQlSR19IRE1JVFhfU0VSX0VOKTsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9waHlf
cG93ZXJfb24oc3RydWN0IHBoeSAqcGh5KQoreworCXN0cnVjdCBtdGtfaGRtaV9waHkgKmhkbWlf
cGh5ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7CisJaW50IHJldDsKKworCXJldCA9IGNsa19wcmVw
YXJlX2VuYWJsZShoZG1pX3BoeS0+cGxsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsK
KworCW10a19oZG1pX3BoeV9lbmFibGVfdG1kcyhoZG1pX3BoeSk7CisKKwlyZXR1cm4gMDsKK30K
Kworc3RhdGljIGludCBtdGtfaGRtaV9waHlfcG93ZXJfb2ZmKHN0cnVjdCBwaHkgKnBoeSkKK3sK
KwlzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOwor
CisJbXRrX2hkbWlfcGh5X2Rpc2FibGVfdG1kcyhoZG1pX3BoeSk7CisJY2xrX2Rpc2FibGVfdW5w
cmVwYXJlKGhkbWlfcGh5LT5wbGwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBz
dHJ1Y3QgcGh5X29wcyBtdGtfaGRtaV9waHlfb3BzID0geworCS5wb3dlcl9vbiA9IG10a19oZG1p
X3BoeV9wb3dlcl9vbiwKKwkucG93ZXJfb2ZmID0gbXRrX2hkbWlfcGh5X3Bvd2VyX29mZiwKKwku
b3duZXIgPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfcGh5X3Byb2Jl
KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0g
JnBkZXYtPmRldjsKKwlzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeTsKKwlzdHJ1Y3QgcmVz
b3VyY2UgKm1lbTsKKwlzdHJ1Y3QgY2xrICpyZWZfY2xrOworCWNvbnN0IGNoYXIgKnJlZl9jbGtf
bmFtZTsKKwlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBjbGtfaW5pdCA9IHsKKwkJLm9wcyA9ICZtdGtf
aGRtaV9wbGxfb3BzLAorCQkubnVtX3BhcmVudHMgPSAxLAorCQkucGFyZW50X25hbWVzID0gKGNv
bnN0IGNoYXIgKiBjb25zdCAqKSZyZWZfY2xrX25hbWUsCisJCS5mbGFncyA9IENMS19TRVRfUkFU
RV9QQVJFTlQgfCBDTEtfU0VUX1JBVEVfR0FURSwKKwl9OworCXN0cnVjdCBwaHkgKnBoeTsKKwlz
dHJ1Y3QgcGh5X3Byb3ZpZGVyICpwaHlfcHJvdmlkZXI7CisJaW50IHJldDsKKworCWhkbWlfcGh5
ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpoZG1pX3BoeSksIEdGUF9LRVJORUwpOworCWlm
ICghaGRtaV9waHkpCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtID0gcGxhdGZvcm1fZ2V0X3Jl
c291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwloZG1pX3BoeS0+cmVncyA9IGRldm1f
aW9yZW1hcF9yZXNvdXJjZShkZXYsIG1lbSk7CisJaWYgKElTX0VSUihoZG1pX3BoeS0+cmVncykp
IHsKKwkJcmV0ID0gUFRSX0VSUihoZG1pX3BoeS0+cmVncyk7CisJCWRldl9lcnIoZGV2LCAiRmFp
bGVkIHRvIGdldCBtZW1vcnkgcmVzb3VyY2U6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0Owor
CX0KKworCXJlZl9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAicGxsX3JlZiIpOworCWlmIChJU19F
UlIocmVmX2NsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihyZWZfY2xrKTsKKwkJZGV2X2VycigmcGRl
di0+ZGV2LCAiRmFpbGVkIHRvIGdldCBQTEwgcmVmZXJlbmNlIGNsb2NrOiAlZFxuIiwKKwkJCXJl
dCk7CisJCXJldHVybiByZXQ7CisJfQorCXJlZl9jbGtfbmFtZSA9IF9fY2xrX2dldF9uYW1lKHJl
Zl9jbGspOworCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcoZGV2LT5vZl9ub2RlLCAi
Y2xvY2stb3V0cHV0LW5hbWVzIiwKKwkJCQkgICAgICAmY2xrX2luaXQubmFtZSk7CisJaWYgKHJl
dCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVhZCBjbG9jay1vdXRwdXQtbmFt
ZXM6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWhkbWlfcGh5LT5wbGxfaHcu
aW5pdCA9ICZjbGtfaW5pdDsKKwloZG1pX3BoeS0+cGxsID0gZGV2bV9jbGtfcmVnaXN0ZXIoZGV2
LCAmaGRtaV9waHktPnBsbF9odyk7CisJaWYgKElTX0VSUihoZG1pX3BoeS0+cGxsKSkgeworCQly
ZXQgPSBQVFJfRVJSKGhkbWlfcGh5LT5wbGwpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBy
ZWdpc3RlciBQTEw6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IG9m
X3Byb3BlcnR5X3JlYWRfdTMyKGRldi0+b2Zfbm9kZSwgIm1lZGlhdGVrLGliaWFzIiwKKwkJCQkg
ICAmaGRtaV9waHktPmliaWFzKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5k
ZXYsICJGYWlsZWQgdG8gZ2V0IGliaWFzOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9
CisKKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihkZXYtPm9mX25vZGUsICJtZWRpYXRlayxp
Ymlhc191cCIsCisJCQkJICAgJmhkbWlfcGh5LT5pYmlhc191cCk7CisJaWYgKHJldCA8IDApIHsK
KwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCBpYmlhcyB1cDogJWRcbiIsIHJl
dCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZGV2X2luZm8oZGV2LCAiVXNpbmcgZGVmYXVsdCBU
WCBEUlYgaW1wZWRhbmNlOiA0LjJrLzM2XG4iKTsKKwloZG1pX3BoeS0+ZHJ2X2ltcF9jbGsgPSAw
eDMwOworCWhkbWlfcGh5LT5kcnZfaW1wX2QyID0gMHgzMDsKKwloZG1pX3BoeS0+ZHJ2X2ltcF9k
MSA9IDB4MzA7CisJaGRtaV9waHktPmRydl9pbXBfZDAgPSAweDMwOworCisJcGh5ID0gZGV2bV9w
aHlfY3JlYXRlKGRldiwgTlVMTCwgJm10a19oZG1pX3BoeV9vcHMpOworCWlmIChJU19FUlIocGh5
KSkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBjcmVhdGUgSERNSSBQSFlcbiIpOworCQly
ZXR1cm4gUFRSX0VSUihwaHkpOworCX0KKwlwaHlfc2V0X2RydmRhdGEocGh5LCBoZG1pX3BoeSk7
CisKKwlwaHlfcHJvdmlkZXIgPSBkZXZtX29mX3BoeV9wcm92aWRlcl9yZWdpc3RlcihkZXYsIG9m
X3BoeV9zaW1wbGVfeGxhdGUpOworCWlmIChJU19FUlIocGh5X3Byb3ZpZGVyKSkKKwkJcmV0dXJu
IFBUUl9FUlIocGh5X3Byb3ZpZGVyKTsKKworCWhkbWlfcGh5LT5kZXYgPSBkZXY7CisJcmV0dXJu
IG9mX2Nsa19hZGRfcHJvdmlkZXIoZGV2LT5vZl9ub2RlLCBvZl9jbGtfc3JjX3NpbXBsZV9nZXQs
CisJCQkJICAgaGRtaV9waHktPnBsbCk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfcGh5X3Jl
bW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiAwOworfQorCitz
dGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfaGRtaV9waHlfbWF0Y2hbXSA9IHsK
Kwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1oZG1pLXBoeSIsIH0sCisJe30sCit9
OworCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19oZG1pX3BoeV9kcml2ZXIgPSB7CisJLnBy
b2JlID0gbXRrX2hkbWlfcGh5X3Byb2JlLAorCS5yZW1vdmUgPSBtdGtfaGRtaV9waHlfcmVtb3Zl
LAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm1lZGlhdGVrLWhkbWktcGh5IiwKKwkJLm9mX21h
dGNoX3RhYmxlID0gbXRrX2hkbWlfcGh5X21hdGNoLAorCX0sCit9OworCitNT0RVTEVfQVVUSE9S
KCJKaWUgUWl1IDxqaWUucWl1QG1lZGlhdGVrLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigi
TWVkaWFUZWsgTVQ4MTczIEhETUkgUEhZIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2
MiIpOwotLSAKMi44LjAucmMzCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVz
a3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9k
cmktZGV2ZWwK