From mboxrd@z Thu Jan 1 00:00:00 1970
From: Philipp Zabel
Subject: [PATCH v8 04/13] drm/mediatek: Add DPI sub driver
Date: Mon, 4 Jan 2016 18:36:36 +0100
Message-ID: <1451929005-16372-5-git-send-email-p.zabel@pengutronix.de>
References: <1451929005-16372-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: <1451929005-16372-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 , 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 , Stephen Boyd , Tomasz Figa , Kumar Gala
List-Id: devicetree@vger.kernel.org
RnJvbTogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+CgpBZGQgRFBJIGNvbm5lY3Rvci9l
bmNvZGVyIHRvIHN1cHBvcnQgSERNSSBvdXRwdXQgdmlhIHRoZQphdHRhY2hlZCBIRE1JIGJyaWRn
ZS4KClNpZ25lZC1vZmYtYnk6IEppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgpTaWduZWQt
b2ZmLWJ5OiBQaGlsaXBwIFphYmVsIDxwLnphYmVsQHBlbmd1dHJvbml4LmRlPgotLS0KQ2hhbmdl
cyBzaW5jZSB2NzoKIC0gRml4IG10a19kcGlfcG93ZXJfb24gcmVmZXJlbmNlIGNvdW50aW5nCiAt
IE1ha2UgbXRrX2RwaV9wb3dlcl9vZmYgcmV0dXJuIHZvaWQKLS0tCiBkcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvTWFrZWZpbGUgICAgICAgfCAgIDMgKy0KIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRl
ay9tdGtfZHBpLmMgICAgICB8IDczNyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwog
ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcGkuaCAgICAgIHwgIDg0ICsrKysKIGRyaXZl
cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHBpX3JlZ3MuaCB8IDIyOCArKysrKysrKysrCiBkcml2
ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYyAgfCAgIDEgKwogZHJpdmVycy9ncHUv
ZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmggIHwgICAxICsKIDYgZmlsZXMgY2hhbmdlZCwgMTA1
MyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy
cy9ncHUvZHJtL21lZGlhdGVrL210a19kcGkuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv
Z3B1L2RybS9tZWRpYXRlay9tdGtfZHBpLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw
dS9kcm0vbWVkaWF0ZWsvbXRrX2RwaV9yZWdzLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k
cm0vbWVkaWF0ZWsvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUK
aW5kZXggZTFhNDBmNC4uMjE4MDcxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlh
dGVrL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQpAQCAt
Nyw2ICs3LDcgQEAgbWVkaWF0ZWstZHJtLXkgOj0gbXRrX2Rpc3Bfb3ZsLm8gXAogCQkgIG10a19k
cm1fZ2VtLm8gXAogCQkgIG10a19kcm1fcGxhbmUubyBcCiAJCSAgbXRrX2RzaS5vIFwKLQkJICBt
dGtfbWlwaV90eC5vCisJCSAgbXRrX21pcGlfdHgubyBcCisJCSAgbXRrX2RwaS5vCiAKIG9iai0k
KENPTkZJR19EUk1fTUVESUFURUspICs9IG1lZGlhdGVrLWRybS5vCmRpZmYgLS1naXQgYS9kcml2
ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RwaS5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr
L210a19kcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGVhZmEwCi0t
LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcGkuYwpAQCAt
MCwwICsxLDczNyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJbmMuCisg
KiBBdXRob3I6IEppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJv
Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k
aWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGRybS9kcm1Q
Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hl
bHBlci5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBv
bmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxp
bnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3JhcGguaD4KKyNpbmNsdWRlIDxsaW51eC9p
bnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKworI2luY2x1ZGUgIm10a19kcGku
aCIKKyNpbmNsdWRlICJtdGtfZHBpX3JlZ3MuaCIKKworZW51bSBtdGtfZHBpX3BvbGFyaXR5IHsK
KwlNVEtfRFBJX1BPTEFSSVRZX1JJU0lORywKKwlNVEtfRFBJX1BPTEFSSVRZX0ZBTExJTkcsCit9
OworCitzdHJ1Y3QgbXRrX2RwaV9wb2xhcml0aWVzIHsKKwllbnVtIG10a19kcGlfcG9sYXJpdHkg
ZGVfcG9sOworCWVudW0gbXRrX2RwaV9wb2xhcml0eSBja19wb2w7CisJZW51bSBtdGtfZHBpX3Bv
bGFyaXR5IGhzeW5jX3BvbDsKKwllbnVtIG10a19kcGlfcG9sYXJpdHkgdnN5bmNfcG9sOworfTsK
Kworc3RydWN0IG10a19kcGlfc3luY19wYXJhbSB7CisJdTMyIHN5bmNfd2lkdGg7CisJdTMyIGZy
b250X3BvcmNoOworCXUzMiBiYWNrX3BvcmNoOworCWJvb2wgc2hpZnRfaGFsZl9saW5lOworfTsK
Kworc3RydWN0IG10a19kcGlfeWNfbGltaXQgeworCXUxNiB5X3RvcDsKKwl1MTYgeV9ib3R0b207
CisJdTE2IGNfdG9wOworCXUxNiBjX2JvdHRvbTsKK307CisKK3N0YXRpYyB2b2lkIG10a19kcGlf
bWFzayhzdHJ1Y3QgbXRrX2RwaSAqZHBpLCB1MzIgb2Zmc2V0LCB1MzIgdmFsLCB1MzIgbWFzaykK
K3sKKwl1MzIgdG1wID0gcmVhZGwoZHBpLT5yZWdzICsgb2Zmc2V0KSAmIH5tYXNrOworCisJdG1w
IHw9ICh2YWwgJiBtYXNrKTsKKwl3cml0ZWwodG1wLCBkcGktPnJlZ3MgKyBvZmZzZXQpOworfQor
CitzdGF0aWMgdm9pZCBtdGtfZHBpX3N3X3Jlc2V0KHN0cnVjdCBtdGtfZHBpICpkcGksIGJvb2wg
cmVzZXQpCit7CisJbXRrX2RwaV9tYXNrKGRwaSwgRFBJX1JFVCwgcmVzZXQgPyBSU1QgOiAwLCBS
U1QpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHBpX2VuYWJsZShzdHJ1Y3QgbXRrX2RwaSAqZHBp
KQoreworCW10a19kcGlfbWFzayhkcGksIERQSV9FTiwgRU4sIEVOKTsKK30KKworc3RhdGljIHZv
aWQgbXRrX2RwaV9kaXNhYmxlKHN0cnVjdCBtdGtfZHBpICpkcGkpCit7CisJbXRrX2RwaV9tYXNr
KGRwaSwgRFBJX0VOLCAwLCBFTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcGlfY29uZmlnX2hz
eW5jKHN0cnVjdCBtdGtfZHBpICpkcGksCisJCQkJIHN0cnVjdCBtdGtfZHBpX3N5bmNfcGFyYW0g
KnN5bmMpCit7CisJbXRrX2RwaV9tYXNrKGRwaSwgRFBJX1RHRU5fSFdJRFRILAorCQkJICBzeW5j
LT5zeW5jX3dpZHRoIDw8IEhQVywgSFBXX01BU0spOworCW10a19kcGlfbWFzayhkcGksIERQSV9U
R0VOX0hQT1JDSCwKKwkJCSAgc3luYy0+YmFja19wb3JjaCA8PCBIQlAsIEhCUF9NQVNLKTsKKwlt
dGtfZHBpX21hc2soZHBpLCBEUElfVEdFTl9IUE9SQ0gsIHN5bmMtPmZyb250X3BvcmNoIDw8IEhG
UCwKKwkJCSAgSEZQX01BU0spOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHBpX2NvbmZpZ192c3lu
YyhzdHJ1Y3QgbXRrX2RwaSAqZHBpLAorCQkJCSBzdHJ1Y3QgbXRrX2RwaV9zeW5jX3BhcmFtICpz
eW5jLAorCQkJCSB1MzIgd2lkdGhfYWRkciwgdTMyIHBvcmNoX2FkZHIpCit7CisJbXRrX2RwaV9t
YXNrKGRwaSwgd2lkdGhfYWRkciwKKwkJICAgICBzeW5jLT5zeW5jX3dpZHRoIDw8IFZTWU5DX1dJ
RFRIX1NISUZULAorCQkgICAgIFZTWU5DX1dJRFRIX01BU0spOworCW10a19kcGlfbWFzayhkcGks
IHdpZHRoX2FkZHIsCisJCSAgICAgc3luYy0+c2hpZnRfaGFsZl9saW5lIDw8IFZTWU5DX0hBTEZf
TElORV9TSElGVCwKKwkJICAgICBWU1lOQ19IQUxGX0xJTkVfTUFTSyk7CisJbXRrX2RwaV9tYXNr
KGRwaSwgcG9yY2hfYWRkciwKKwkJICAgICBzeW5jLT5iYWNrX3BvcmNoIDw8IFZTWU5DX0JBQ0tf
UE9SQ0hfU0hJRlQsCisJCSAgICAgVlNZTkNfQkFDS19QT1JDSF9NQVNLKTsKKwltdGtfZHBpX21h
c2soZHBpLCBwb3JjaF9hZGRyLAorCQkgICAgIHN5bmMtPmZyb250X3BvcmNoIDw8IFZTWU5DX0ZS
T05UX1BPUkNIX1NISUZULAorCQkgICAgIFZTWU5DX0ZST05UX1BPUkNIX01BU0spOworfQorCitz
dGF0aWMgdm9pZCBtdGtfZHBpX2NvbmZpZ192c3luY19sb2RkKHN0cnVjdCBtdGtfZHBpICpkcGks
CisJCQkJICAgICAgc3RydWN0IG10a19kcGlfc3luY19wYXJhbSAqc3luYykKK3sKKwltdGtfZHBp
X2NvbmZpZ192c3luYyhkcGksIHN5bmMsIERQSV9UR0VOX1ZXSURUSCwgRFBJX1RHRU5fVlBPUkNI
KTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RwaV9jb25maWdfdnN5bmNfbGV2ZW4oc3RydWN0IG10
a19kcGkgKmRwaSwKKwkJCQkgICAgICAgc3RydWN0IG10a19kcGlfc3luY19wYXJhbSAqc3luYykK
K3sKKwltdGtfZHBpX2NvbmZpZ192c3luYyhkcGksIHN5bmMsIERQSV9UR0VOX1ZXSURUSF9MRVZF
TiwKKwkJCSAgICAgRFBJX1RHRU5fVlBPUkNIX0xFVkVOKTsKK30KKworc3RhdGljIHZvaWQgbXRr
X2RwaV9jb25maWdfdnN5bmNfcm9kZChzdHJ1Y3QgbXRrX2RwaSAqZHBpLAorCQkJCSAgICAgIHN0
cnVjdCBtdGtfZHBpX3N5bmNfcGFyYW0gKnN5bmMpCit7CisJbXRrX2RwaV9jb25maWdfdnN5bmMo
ZHBpLCBzeW5jLCBEUElfVEdFTl9WV0lEVEhfUk9ERCwKKwkJCSAgICAgRFBJX1RHRU5fVlBPUkNI
X1JPREQpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHBpX2NvbmZpZ192c3luY19yZXZlbihzdHJ1
Y3QgbXRrX2RwaSAqZHBpLAorCQkJCSAgICAgICBzdHJ1Y3QgbXRrX2RwaV9zeW5jX3BhcmFtICpz
eW5jKQoreworCW10a19kcGlfY29uZmlnX3ZzeW5jKGRwaSwgc3luYywgRFBJX1RHRU5fVldJRFRI
X1JFVkVOLAorCQkJICAgICBEUElfVEdFTl9WUE9SQ0hfUkVWRU4pOworfQorCitzdGF0aWMgdm9p
ZCBtdGtfZHBpX2NvbmZpZ19wb2woc3RydWN0IG10a19kcGkgKmRwaSwKKwkJCSAgICAgICBzdHJ1
Y3QgbXRrX2RwaV9wb2xhcml0aWVzICpkcGlfcG9sKQoreworCXVuc2lnbmVkIGludCBwb2w7CisK
Kwlwb2wgPSAoZHBpX3BvbC0+Y2tfcG9sID09IE1US19EUElfUE9MQVJJVFlfUklTSU5HID8gMCA6
IENLX1BPTCkgfAorCSAgICAgIChkcGlfcG9sLT5kZV9wb2wgPT0gTVRLX0RQSV9QT0xBUklUWV9S
SVNJTkcgPyAwIDogREVfUE9MKSB8CisJICAgICAgKGRwaV9wb2wtPmhzeW5jX3BvbCA9PSBNVEtf
RFBJX1BPTEFSSVRZX1JJU0lORyA/IDAgOiBIU1lOQ19QT0wpIHwKKwkgICAgICAoZHBpX3BvbC0+
dnN5bmNfcG9sID09IE1US19EUElfUE9MQVJJVFlfUklTSU5HID8gMCA6IFZTWU5DX1BPTCk7CisJ
bXRrX2RwaV9tYXNrKGRwaSwgRFBJX09VVFBVVF9TRVRUSU5HLCBwb2wsCisJCSAgICAgQ0tfUE9M
IHwgREVfUE9MIHwgSFNZTkNfUE9MIHwgVlNZTkNfUE9MKTsKK30KKworc3RhdGljIHZvaWQgbXRr
X2RwaV9jb25maWdfM2Qoc3RydWN0IG10a19kcGkgKmRwaSwgYm9vbCBlbl8zZCkKK3sKKwltdGtf
ZHBpX21hc2soZHBpLCBEUElfQ09OLCBlbl8zZCA/IFRERlBfRU4gOiAwLCBUREZQX0VOKTsKK30K
Kworc3RhdGljIHZvaWQgbXRrX2RwaV9jb25maWdfaW50ZXJmYWNlKHN0cnVjdCBtdGtfZHBpICpk
cGksIGJvb2wgaW50ZXIpCit7CisJbXRrX2RwaV9tYXNrKGRwaSwgRFBJX0NPTiwgaW50ZXIgPyBJ
TlRMX0VOIDogMCwgSU5UTF9FTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcGlfY29uZmlnX2Zi
X3NpemUoc3RydWN0IG10a19kcGkgKmRwaSwgdTMyIHdpZHRoLCB1MzIgaGVpZ2h0KQoreworCW10
a19kcGlfbWFzayhkcGksIERQSV9TSVpFLCB3aWR0aCA8PCBIU0laRSwgSFNJWkVfTUFTSyk7CisJ
bXRrX2RwaV9tYXNrKGRwaSwgRFBJX1NJWkUsIGhlaWdodCA8PCBWU0laRSwgVlNJWkVfTUFTSyk7
Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcGlfY29uZmlnX2NoYW5uZWxfbGltaXQoc3RydWN0IG10
a19kcGkgKmRwaSwKKwkJCQkJIHN0cnVjdCBtdGtfZHBpX3ljX2xpbWl0ICpsaW1pdCkKK3sKKwlt
dGtfZHBpX21hc2soZHBpLCBEUElfWV9MSU1JVCwgbGltaXQtPnlfYm90dG9tIDw8IFlfTElNSU5U
X0JPVCwKKwkJICAgICBZX0xJTUlOVF9CT1RfTUFTSyk7CisJbXRrX2RwaV9tYXNrKGRwaSwgRFBJ
X1lfTElNSVQsIGxpbWl0LT55X3RvcCA8PCBZX0xJTUlOVF9UT1AsCisJCSAgICAgWV9MSU1JTlRf
VE9QX01BU0spOworCW10a19kcGlfbWFzayhkcGksIERQSV9DX0xJTUlULCBsaW1pdC0+Y19ib3R0
b20gPDwgQ19MSU1JVF9CT1QsCisJCSAgICAgQ19MSU1JVF9CT1RfTUFTSyk7CisJbXRrX2RwaV9t
YXNrKGRwaSwgRFBJX0NfTElNSVQsIGxpbWl0LT5jX3RvcCA8PCBDX0xJTUlUX1RPUCwKKwkJICAg
ICBDX0xJTUlUX1RPUF9NQVNLKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RwaV9jb25maWdfYml0
X251bShzdHJ1Y3QgbXRrX2RwaSAqZHBpLAorCQkJCSAgIGVudW0gbXRrX2RwaV9vdXRfYml0X251
bSBudW0pCit7CisJdTMyIHZhbDsKKworCXN3aXRjaCAobnVtKSB7CisJY2FzZSBNVEtfRFBJX09V
VF9CSVRfTlVNXzhCSVRTOgorCQl2YWwgPSBPVVRfQklUXzg7CisJCWJyZWFrOworCWNhc2UgTVRL
X0RQSV9PVVRfQklUX05VTV8xMEJJVFM6CisJCXZhbCA9IE9VVF9CSVRfMTA7CisJCWJyZWFrOwor
CWNhc2UgTVRLX0RQSV9PVVRfQklUX05VTV8xMkJJVFM6CisJCXZhbCA9IE9VVF9CSVRfMTI7CisJ
CWJyZWFrOworCWNhc2UgTVRLX0RQSV9PVVRfQklUX05VTV8xNkJJVFM6CisJCXZhbCA9IE9VVF9C
SVRfMTY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXZhbCA9IE9VVF9CSVRfODsKKwkJYnJlYWs7
CisJfQorCW10a19kcGlfbWFzayhkcGksIERQSV9PVVRQVVRfU0VUVElORywgdmFsIDw8IE9VVF9C
SVQsCisJCSAgICAgIE9VVF9CSVRfTUFTSyk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcGlfY29u
ZmlnX3ljX21hcChzdHJ1Y3QgbXRrX2RwaSAqZHBpLAorCQkJCSAgZW51bSBtdGtfZHBpX291dF95
Y19tYXAgbWFwKQoreworCXUzMiB2YWw7CisKKwlzd2l0Y2ggKG1hcCkgeworCWNhc2UgTVRLX0RQ
SV9PVVRfWUNfTUFQX1JHQjoKKwkJdmFsID0gWUNfTUFQX1JHQjsKKwkJYnJlYWs7CisJY2FzZSBN
VEtfRFBJX09VVF9ZQ19NQVBfQ1lDWToKKwkJdmFsID0gWUNfTUFQX0NZQ1k7CisJCWJyZWFrOwor
CWNhc2UgTVRLX0RQSV9PVVRfWUNfTUFQX1lDWUM6CisJCXZhbCA9IFlDX01BUF9ZQ1lDOworCQli
cmVhazsKKwljYXNlIE1US19EUElfT1VUX1lDX01BUF9DWToKKwkJdmFsID0gWUNfTUFQX0NZOwor
CQlicmVhazsKKwljYXNlIE1US19EUElfT1VUX1lDX01BUF9ZQzoKKwkJdmFsID0gWUNfTUFQX1lD
OworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2YWwgPSBZQ19NQVBfUkdCOworCQlicmVhazsKKwl9
CisKKwltdGtfZHBpX21hc2soZHBpLCBEUElfT1VUUFVUX1NFVFRJTkcsIHZhbCA8PCBZQ19NQVAs
IFlDX01BUF9NQVNLKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2RwaV9jb25maWdfY2hhbm5lbF9z
d2FwKHN0cnVjdCBtdGtfZHBpICpkcGksCisJCQkJCWVudW0gbXRrX2RwaV9vdXRfY2hhbm5lbF9z
d2FwIHN3YXApCit7CisJdTMyIHZhbDsKKworCXN3aXRjaCAoc3dhcCkgeworCWNhc2UgTVRLX0RQ
SV9PVVRfQ0hBTk5FTF9TV0FQX1JHQjoKKwkJdmFsID0gU1dBUF9SR0I7CisJCWJyZWFrOworCWNh
c2UgTVRLX0RQSV9PVVRfQ0hBTk5FTF9TV0FQX0dCUjoKKwkJdmFsID0gU1dBUF9HQlI7CisJCWJy
ZWFrOworCWNhc2UgTVRLX0RQSV9PVVRfQ0hBTk5FTF9TV0FQX0JSRzoKKwkJdmFsID0gU1dBUF9C
Ukc7CisJCWJyZWFrOworCWNhc2UgTVRLX0RQSV9PVVRfQ0hBTk5FTF9TV0FQX1JCRzoKKwkJdmFs
ID0gU1dBUF9SQkc7CisJCWJyZWFrOworCWNhc2UgTVRLX0RQSV9PVVRfQ0hBTk5FTF9TV0FQX0dS
QjoKKwkJdmFsID0gU1dBUF9HUkI7CisJCWJyZWFrOworCWNhc2UgTVRLX0RQSV9PVVRfQ0hBTk5F
TF9TV0FQX0JHUjoKKwkJdmFsID0gU1dBUF9CR1I7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXZh
bCA9IFNXQVBfUkdCOworCQlicmVhazsKKwl9CisKKwltdGtfZHBpX21hc2soZHBpLCBEUElfT1VU
UFVUX1NFVFRJTkcsIHZhbCA8PCBDSF9TV0FQLCBDSF9TV0FQX01BU0spOworfQorCitzdGF0aWMg
dm9pZCBtdGtfZHBpX2NvbmZpZ195dXY0MjJfZW5hYmxlKHN0cnVjdCBtdGtfZHBpICpkcGksIGJv
b2wgZW5hYmxlKQoreworCW10a19kcGlfbWFzayhkcGksIERQSV9DT04sIGVuYWJsZSA/IFlVVjQy
Ml9FTiA6IDAsIFlVVjQyMl9FTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcGlfY29uZmlnX2Nz
Y19lbmFibGUoc3RydWN0IG10a19kcGkgKmRwaSwgYm9vbCBlbmFibGUpCit7CisJbXRrX2RwaV9t
YXNrKGRwaSwgRFBJX0NPTiwgZW5hYmxlID8gQ1NDX0VOQUJMRSA6IDAsIENTQ19FTkFCTEUpOwor
fQorCitzdGF0aWMgdm9pZCBtdGtfZHBpX2NvbmZpZ19zd2FwX2lucHV0KHN0cnVjdCBtdGtfZHBp
ICpkcGksIGJvb2wgZW5hYmxlKQoreworCW10a19kcGlfbWFzayhkcGksIERQSV9DT04sIGVuYWJs
ZSA/IElOX1JCX1NXQVAgOiAwLCBJTl9SQl9TV0FQKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2Rw
aV9jb25maWdfMm5faF9mcmUoc3RydWN0IG10a19kcGkgKmRwaSkKK3sKKwltdGtfZHBpX21hc2so
ZHBpLCBEUElfSF9GUkVfQ09OLCBIX0ZSRV8yTiwgSF9GUkVfMk4pOworfQorCitzdGF0aWMgdm9p
ZCBtdGtfZHBpX2NvbmZpZ19jb2xvcl9mb3JtYXQoc3RydWN0IG10a19kcGkgKmRwaSwKKwkJCQkJ
ZW51bSBtdGtfZHBpX291dF9jb2xvcl9mb3JtYXQgZm9ybWF0KQoreworCWlmICgoZm9ybWF0ID09
IE1US19EUElfQ09MT1JfRk9STUFUX1lDQkNSXzQ0NCkgfHwKKwkgICAgKGZvcm1hdCA9PSBNVEtf
RFBJX0NPTE9SX0ZPUk1BVF9ZQ0JDUl80NDRfRlVMTCkpIHsKKwkJbXRrX2RwaV9jb25maWdfeXV2
NDIyX2VuYWJsZShkcGksIGZhbHNlKTsKKwkJbXRrX2RwaV9jb25maWdfY3NjX2VuYWJsZShkcGks
IHRydWUpOworCQltdGtfZHBpX2NvbmZpZ19zd2FwX2lucHV0KGRwaSwgZmFsc2UpOworCQltdGtf
ZHBpX2NvbmZpZ19jaGFubmVsX3N3YXAoZHBpLCBNVEtfRFBJX09VVF9DSEFOTkVMX1NXQVBfQkdS
KTsKKwl9IGVsc2UgaWYgKChmb3JtYXQgPT0gTVRLX0RQSV9DT0xPUl9GT1JNQVRfWUNCQ1JfNDIy
KSB8fAorCQkgICAoZm9ybWF0ID09IE1US19EUElfQ09MT1JfRk9STUFUX1lDQkNSXzQyMl9GVUxM
KSkgeworCQltdGtfZHBpX2NvbmZpZ195dXY0MjJfZW5hYmxlKGRwaSwgdHJ1ZSk7CisJCW10a19k
cGlfY29uZmlnX2NzY19lbmFibGUoZHBpLCB0cnVlKTsKKwkJbXRrX2RwaV9jb25maWdfc3dhcF9p
bnB1dChkcGksIHRydWUpOworCQltdGtfZHBpX2NvbmZpZ19jaGFubmVsX3N3YXAoZHBpLCBNVEtf
RFBJX09VVF9DSEFOTkVMX1NXQVBfUkdCKTsKKwl9IGVsc2UgeworCQltdGtfZHBpX2NvbmZpZ195
dXY0MjJfZW5hYmxlKGRwaSwgZmFsc2UpOworCQltdGtfZHBpX2NvbmZpZ19jc2NfZW5hYmxlKGRw
aSwgZmFsc2UpOworCQltdGtfZHBpX2NvbmZpZ19zd2FwX2lucHV0KGRwaSwgZmFsc2UpOworCQlt
dGtfZHBpX2NvbmZpZ19jaGFubmVsX3N3YXAoZHBpLCBNVEtfRFBJX09VVF9DSEFOTkVMX1NXQVBf
UkdCKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcGlfcG93ZXJfb2ZmKHN0cnVjdCBtdGtf
ZHBpICpkcGkpCit7CisJaWYgKFdBUk5fT04oZHBpLT5yZWZjb3VudCA9PSAwKSkKKwkJcmV0dXJu
OworCisJaWYgKC0tZHBpLT5yZWZjb3VudCAhPSAwKQorCQlyZXR1cm47CisKKwltdGtfZHBpX2Rp
c2FibGUoZHBpKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHBpLT5waXhlbF9jbGspOworCWNs
a19kaXNhYmxlX3VucHJlcGFyZShkcGktPmVuZ2luZV9jbGspOworfQorCitzdGF0aWMgaW50IG10
a19kcGlfcG93ZXJfb24oc3RydWN0IG10a19kcGkgKmRwaSkKK3sKKwlpbnQgcmV0OworCisJaWYg
KCsrZHBpLT5yZWZjb3VudCAhPSAxKQorCQlyZXR1cm4gMDsKKworCXJldCA9IGNsa19wcmVwYXJl
X2VuYWJsZShkcGktPmVuZ2luZV9jbGspOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkcGktPmRl
diwgIkZhaWxlZCB0byBlbmFibGUgZW5naW5lIGNsb2NrOiAlZFxuIiwgcmV0KTsKKwkJZ290byBl
cnJfZGVjOworCX0KKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkcGktPnBpeGVsX2Nsayk7
CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRwaS0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBwaXhl
bCBjbG9jazogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2NsazsKKwl9CisKKwltdGtfZHBpX2Vu
YWJsZShkcGkpOworCisJcmV0dXJuIDA7CisKK2Vycl9jbGs6CisJY2xrX2Rpc2FibGVfdW5wcmVw
YXJlKGRwaS0+ZW5naW5lX2Nsayk7CitlcnJfZGVjOgorCWRwaS0+cmVmY291bnQtLTsKKwlyZXR1
cm4gcmV0OworfQorCitpbnQgbXRrX2RwaV9zZXRfZGlzcGxheV9tb2RlKHN0cnVjdCBtdGtfZHBp
ICpkcGksIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXN0cnVjdCBtdGtfZHBp
X3ljX2xpbWl0IGxpbWl0OworCXN0cnVjdCBtdGtfZHBpX3BvbGFyaXRpZXMgZHBpX3BvbDsKKwlz
dHJ1Y3QgbXRrX2RwaV9zeW5jX3BhcmFtIGhzeW5jOworCXN0cnVjdCBtdGtfZHBpX3N5bmNfcGFy
YW0gdnN5bmNfbG9kZCA9IHsgMCB9OworCXN0cnVjdCBtdGtfZHBpX3N5bmNfcGFyYW0gdnN5bmNf
bGV2ZW4gPSB7IDAgfTsKKwlzdHJ1Y3QgbXRrX2RwaV9zeW5jX3BhcmFtIHZzeW5jX3JvZGQgPSB7
IDAgfTsKKwlzdHJ1Y3QgbXRrX2RwaV9zeW5jX3BhcmFtIHZzeW5jX3JldmVuID0geyAwIH07CisJ
dW5zaWduZWQgbG9uZyBwaXhfcmF0ZTsKKwl1bnNpZ25lZCBsb25nIHBsbF9yYXRlOworCXVuc2ln
bmVkIGludCBmYWN0b3I7CisKKwlpZiAoIWRwaSkgeworCQlkZXZfZXJyKGRwaS0+ZGV2LCAiaW52
YWxpZCBhcmd1bWVudFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXBpeF9yYXRlID0g
MTAwMFVMICogbW9kZS0+Y2xvY2s7CisJaWYgKG1vZGUtPmNsb2NrIDw9IDc0MDAwKQorCQlmYWN0
b3IgPSA4ICogMzsKKwllbHNlCisJCWZhY3RvciA9IDQgKiAzOworCXBsbF9yYXRlID0gcGl4X3Jh
dGUgKiBmYWN0b3I7CisKKwlkZXZfZGJnKGRwaS0+ZGV2LCAiV2FudCBQTEwgJWx1IEh6LCBwaXhl
bCBjbG9jayAlbHUgSHpcbiIsCisJCXBsbF9yYXRlLCBwaXhfcmF0ZSk7CisKKwljbGtfc2V0X3Jh
dGUoZHBpLT50dmRfY2xrLCBwbGxfcmF0ZSk7CisJcGxsX3JhdGUgPSBjbGtfZ2V0X3JhdGUoZHBp
LT50dmRfY2xrKTsKKworCXBpeF9yYXRlID0gcGxsX3JhdGUgLyBmYWN0b3I7CisJY2xrX3NldF9y
YXRlKGRwaS0+cGl4ZWxfY2xrLCBwaXhfcmF0ZSk7CisJcGl4X3JhdGUgPSBjbGtfZ2V0X3JhdGUo
ZHBpLT5waXhlbF9jbGspOworCisJZGV2X2RiZyhkcGktPmRldiwgIkdvdCAgUExMICVsdSBIeiwg
cGl4ZWwgY2xvY2sgJWx1IEh6XG4iLAorCQlwbGxfcmF0ZSwgcGl4X3JhdGUpOworCisJbGltaXQu
Y19ib3R0b20gPSAweDAwMTA7CisJbGltaXQuY190b3AgPSAweDBGRTA7CisJbGltaXQueV9ib3R0
b20gPSAweDAwMTA7CisJbGltaXQueV90b3AgPSAweDBGRTA7CisKKwlkcGlfcG9sLmNrX3BvbCA9
IE1US19EUElfUE9MQVJJVFlfRkFMTElORzsKKwlkcGlfcG9sLmRlX3BvbCA9IE1US19EUElfUE9M
QVJJVFlfUklTSU5HOworCWRwaV9wb2wuaHN5bmNfcG9sID0gbW9kZS0+ZmxhZ3MgJiBEUk1fTU9E
RV9GTEFHX1BIU1lOQyA/CisJCQkgICAgTVRLX0RQSV9QT0xBUklUWV9GQUxMSU5HIDogTVRLX0RQ
SV9QT0xBUklUWV9SSVNJTkc7CisJZHBpX3BvbC52c3luY19wb2wgPSBtb2RlLT5mbGFncyAmIERS
TV9NT0RFX0ZMQUdfUFZTWU5DID8KKwkJCSAgICBNVEtfRFBJX1BPTEFSSVRZX0ZBTExJTkcgOiBN
VEtfRFBJX1BPTEFSSVRZX1JJU0lORzsKKworCWhzeW5jLnN5bmNfd2lkdGggPSBtb2RlLT5oc3lu
Y19lbmQgLSBtb2RlLT5oc3luY19zdGFydDsKKwloc3luYy5iYWNrX3BvcmNoID0gbW9kZS0+aHRv
dGFsIC0gbW9kZS0+aHN5bmNfZW5kOworCWhzeW5jLmZyb250X3BvcmNoID0gbW9kZS0+aHN5bmNf
c3RhcnQgLSBtb2RlLT5oZGlzcGxheTsKKwloc3luYy5zaGlmdF9oYWxmX2xpbmUgPSBmYWxzZTsK
KworCXZzeW5jX2xvZGQuc3luY193aWR0aCA9IG1vZGUtPnZzeW5jX2VuZCAtIG1vZGUtPnZzeW5j
X3N0YXJ0OworCXZzeW5jX2xvZGQuYmFja19wb3JjaCA9IG1vZGUtPnZ0b3RhbCAtIG1vZGUtPnZz
eW5jX2VuZDsKKwl2c3luY19sb2RkLmZyb250X3BvcmNoID0gbW9kZS0+dnN5bmNfc3RhcnQgLSBt
b2RlLT52ZGlzcGxheTsKKwl2c3luY19sb2RkLnNoaWZ0X2hhbGZfbGluZSA9IGZhbHNlOworCisJ
aWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UgJiYKKwkgICAgbW9kZS0+
ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHXzNEX01BU0spIHsKKwkJdnN5bmNfbGV2ZW4gPSB2c3luY19s
b2RkOworCQl2c3luY19yb2RkID0gdnN5bmNfbG9kZDsKKwkJdnN5bmNfcmV2ZW4gPSB2c3luY19s
b2RkOworCQl2c3luY19sZXZlbi5zaGlmdF9oYWxmX2xpbmUgPSB0cnVlOworCQl2c3luY19yZXZl
bi5zaGlmdF9oYWxmX2xpbmUgPSB0cnVlOworCX0gZWxzZSBpZiAobW9kZS0+ZmxhZ3MgJiBEUk1f
TU9ERV9GTEFHX0lOVEVSTEFDRSAmJgorCQkgICAhKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxB
R18zRF9NQVNLKSkgeworCQl2c3luY19sZXZlbiA9IHZzeW5jX2xvZGQ7CisJCXZzeW5jX2xldmVu
LnNoaWZ0X2hhbGZfbGluZSA9IHRydWU7CisJfSBlbHNlIGlmICghKG1vZGUtPmZsYWdzICYgRFJN
X01PREVfRkxBR19JTlRFUkxBQ0UpICYmCisJCSAgIG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxB
R18zRF9NQVNLKSB7CisJCXZzeW5jX3JvZGQgPSB2c3luY19sb2RkOworCX0KKwltdGtfZHBpX3N3
X3Jlc2V0KGRwaSwgdHJ1ZSk7CisJbXRrX2RwaV9jb25maWdfcG9sKGRwaSwgJmRwaV9wb2wpOwor
CisJbXRrX2RwaV9jb25maWdfaHN5bmMoZHBpLCAmaHN5bmMpOworCW10a19kcGlfY29uZmlnX3Zz
eW5jX2xvZGQoZHBpLCAmdnN5bmNfbG9kZCk7CisJbXRrX2RwaV9jb25maWdfdnN5bmNfcm9kZChk
cGksICZ2c3luY19yb2RkKTsKKwltdGtfZHBpX2NvbmZpZ192c3luY19sZXZlbihkcGksICZ2c3lu
Y19sZXZlbik7CisJbXRrX2RwaV9jb25maWdfdnN5bmNfcmV2ZW4oZHBpLCAmdnN5bmNfcmV2ZW4p
OworCisJbXRrX2RwaV9jb25maWdfM2QoZHBpLCAhIShtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZM
QUdfM0RfTUFTSykpOworCW10a19kcGlfY29uZmlnX2ludGVyZmFjZShkcGksICEhKG1vZGUtPmZs
YWdzICYKKwkJCQkJIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKSk7CisJaWYgKG1vZGUtPmZsYWdz
ICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UpCisJCW10a19kcGlfY29uZmlnX2ZiX3NpemUoZHBp
LCBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXkgLyAyKTsKKwllbHNlCisJCW10a19kcGlf
Y29uZmlnX2ZiX3NpemUoZHBpLCBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXkpOworCisJ
bXRrX2RwaV9jb25maWdfY2hhbm5lbF9saW1pdChkcGksICZsaW1pdCk7CisJbXRrX2RwaV9jb25m
aWdfYml0X251bShkcGksIGRwaS0+Yml0X251bSk7CisJbXRrX2RwaV9jb25maWdfY2hhbm5lbF9z
d2FwKGRwaSwgZHBpLT5jaGFubmVsX3N3YXApOworCW10a19kcGlfY29uZmlnX3ljX21hcChkcGks
IGRwaS0+eWNfbWFwKTsKKwltdGtfZHBpX2NvbmZpZ19jb2xvcl9mb3JtYXQoZHBpLCBkcGktPmNv
bG9yX2Zvcm1hdCk7CisJbXRrX2RwaV9jb25maWdfMm5faF9mcmUoZHBpKTsKKwltdGtfZHBpX3N3
X3Jlc2V0KGRwaSwgZmFsc2UpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG10a19k
cGlfZW5jb2Rlcl9kZXN0cm95KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlkcm1f
ZW5jb2Rlcl9jbGVhbnVwKGVuY29kZXIpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9l
bmNvZGVyX2Z1bmNzIG10a19kcGlfZW5jb2Rlcl9mdW5jcyA9IHsKKwkuZGVzdHJveSA9IG10a19k
cGlfZW5jb2Rlcl9kZXN0cm95LAorfTsKKworc3RhdGljIGJvb2wgbXRrX2RwaV9lbmNvZGVyX21v
ZGVfZml4dXAoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCSAgICAgICBjb25zdCBz
dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQkgICAgICAgc3RydWN0IGRybV9kaXNw
bGF5X21vZGUgKmFkanVzdGVkX21vZGUpCit7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2
b2lkIG10a19kcGlfZW5jb2Rlcl9tb2RlX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIs
CisJCQkJICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQkgICAgIHN0cnVj
dCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQoreworCXN0cnVjdCBtdGtfZHBpICpk
cGkgPSBtdGtfZHBpX2Zyb21fZW5jb2RlcihlbmNvZGVyKTsKKworCWRybV9tb2RlX2NvcHkoJmRw
aS0+bW9kZSwgYWRqdXN0ZWRfbW9kZSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcGlfZW5jb2Rl
cl9kaXNhYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgbXRrX2Rw
aSAqZHBpID0gbXRrX2RwaV9mcm9tX2VuY29kZXIoZW5jb2Rlcik7CisKKwltdGtfZHBpX3Bvd2Vy
X29mZihkcGkpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHBpX2VuY29kZXJfZW5hYmxlKHN0cnVj
dCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgbXRrX2RwaSAqZHBpID0gbXRrX2Rw
aV9mcm9tX2VuY29kZXIoZW5jb2Rlcik7CisKKwltdGtfZHBpX3Bvd2VyX29uKGRwaSk7CisJbXRr
X2RwaV9zZXRfZGlzcGxheV9tb2RlKGRwaSwgJmRwaS0+bW9kZSk7Cit9CisKK3N0YXRpYyBpbnQg
bXRrX2RwaV9hdG9taWNfY2hlY2soc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCXN0
cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rv
cl9zdGF0ZSAqY29ubl9zdGF0ZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0
cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgbXRrX2RwaV9lbmNvZGVyX2hlbHBlcl9mdW5j
cyA9IHsKKwkubW9kZV9maXh1cCA9IG10a19kcGlfZW5jb2Rlcl9tb2RlX2ZpeHVwLAorCS5tb2Rl
X3NldCA9IG10a19kcGlfZW5jb2Rlcl9tb2RlX3NldCwKKwkuZGlzYWJsZSA9IG10a19kcGlfZW5j
b2Rlcl9kaXNhYmxlLAorCS5lbmFibGUgPSBtdGtfZHBpX2VuY29kZXJfZW5hYmxlLAorCS5hdG9t
aWNfY2hlY2sgPSBtdGtfZHBpX2F0b21pY19jaGVjaywKK307CisKK3N0YXRpYyB2b2lkIG10a19k
cGlfc3RhcnQoc3RydWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlzdHJ1Y3QgbXRrX2RwaSAq
ZHBpID0gY29udGFpbmVyX29mKGNvbXAsIHN0cnVjdCBtdGtfZHBpLCBkZHBfY29tcCk7CisKKwlt
dGtfZHBpX3Bvd2VyX29uKGRwaSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kcGlfc3RvcChzdHJ1
Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXN0cnVjdCBtdGtfZHBpICpkcGkgPSBjb250YWlu
ZXJfb2YoY29tcCwgc3RydWN0IG10a19kcGksIGRkcF9jb21wKTsKKworCW10a19kcGlfcG93ZXJf
b2ZmKGRwaSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzIG10
a19kcGlfZnVuY3MgPSB7CisJLnN0YXJ0ID0gbXRrX2RwaV9zdGFydCwKKwkuc3RvcCA9IG10a19k
cGlfc3RvcCwKK307CisKK3N0YXRpYyBpbnQgbXRrX2RwaV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRl
diwgc3RydWN0IGRldmljZSAqbWFzdGVyLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBtdGtfZHBp
ICpkcGkgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2Rl
diA9IGRhdGE7CisJaW50IHJldDsKKworCXJldCA9IG10a19kZHBfY29tcF9yZWdpc3Rlcihkcm1f
ZGV2LCAmZHBpLT5kZHBfY29tcCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJG
YWlsZWQgdG8gcmVnaXN0ZXIgY29tcG9uZW50ICVzOiAlZFxuIiwKKwkJCWRldi0+b2Zfbm9kZS0+
ZnVsbF9uYW1lLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGRybV9lbmNvZGVy
X2luaXQoZHJtX2RldiwgJmRwaS0+ZW5jb2RlciwgJm10a19kcGlfZW5jb2Rlcl9mdW5jcywKKwkJ
CSAgICAgICBEUk1fTU9ERV9FTkNPREVSX1RNRFMpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihk
ZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBkZWNvZGVyOiAlZFxuIiwgcmV0KTsKKwkJZ290byBl
cnJfdW5yZWdpc3RlcjsKKwl9CisJZHJtX2VuY29kZXJfaGVscGVyX2FkZCgmZHBpLT5lbmNvZGVy
LCAmbXRrX2RwaV9lbmNvZGVyX2hlbHBlcl9mdW5jcyk7CisKKwkvKiBDdXJyZW50bHkgRFBJMCBp
cyBmaXhlZCB0byBiZSBkcml2ZW4gYnkgT1ZMMSAqLworCWRwaS0+ZW5jb2Rlci5wb3NzaWJsZV9j
cnRjcyA9IEJJVCgxKTsKKworCWRwaS0+ZW5jb2Rlci5icmlkZ2UtPmVuY29kZXIgPSAmZHBpLT5l
bmNvZGVyOworCXJldCA9IGRybV9icmlkZ2VfYXR0YWNoKGRwaS0+ZW5jb2Rlci5kZXYsIGRwaS0+
ZW5jb2Rlci5icmlkZ2UpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8g
YXR0YWNoIGJyaWRnZTogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2NsZWFudXA7CisJfQorCisJ
ZHBpLT5iaXRfbnVtID0gTVRLX0RQSV9PVVRfQklUX05VTV84QklUUzsKKwlkcGktPmNoYW5uZWxf
c3dhcCA9IE1US19EUElfT1VUX0NIQU5ORUxfU1dBUF9SR0I7CisJZHBpLT55Y19tYXAgPSBNVEtf
RFBJX09VVF9ZQ19NQVBfUkdCOworCWRwaS0+Y29sb3JfZm9ybWF0ID0gTVRLX0RQSV9DT0xPUl9G
T1JNQVRfUkdCOworCisJcmV0dXJuIDA7CisKK2Vycl9jbGVhbnVwOgorCWRybV9lbmNvZGVyX2Ns
ZWFudXAoJmRwaS0+ZW5jb2Rlcik7CitlcnJfdW5yZWdpc3RlcjoKKwltdGtfZGRwX2NvbXBfdW5y
ZWdpc3Rlcihkcm1fZGV2LCAmZHBpLT5kZHBfY29tcCk7CisJcmV0dXJuIHJldDsKK30KKworc3Rh
dGljIHZvaWQgbXRrX2RwaV91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNl
ICptYXN0ZXIsCisJCQkgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBtdGtfZHBpICpkcGkgPSBk
ZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldiA9IGRhdGE7
CisKKwlkcm1fZW5jb2Rlcl9jbGVhbnVwKCZkcGktPmVuY29kZXIpOworCW10a19kZHBfY29tcF91
bnJlZ2lzdGVyKGRybV9kZXYsICZkcGktPmRkcF9jb21wKTsKK30KKworc3RhdGljIGNvbnN0IHN0
cnVjdCBjb21wb25lbnRfb3BzIG10a19kcGlfY29tcG9uZW50X29wcyA9IHsKKwkuYmluZCA9IG10
a19kcGlfYmluZCwKKwkudW5iaW5kID0gbXRrX2RwaV91bmJpbmQsCit9OworCitzdGF0aWMgaW50
IG10a19kcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qg
ZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBtdGtfZHBpICpkcGk7CisJc3RydWN0
IHJlc291cmNlICptZW07CisJc3RydWN0IGRldmljZV9ub2RlICplcCwgKmJyaWRnZV9ub2RlID0g
TlVMTDsKKwlpbnQgY29tcF9pZDsKKwlpbnQgcmV0OworCisJZHBpID0gZGV2bV9remFsbG9jKGRl
diwgc2l6ZW9mKCpkcGkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRwaSkKKwkJcmV0dXJuIC1FTk9N
RU07CisKKwlkcGktPmRldiA9IGRldjsKKworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShw
ZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJZHBpLT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291
cmNlKGRldiwgbWVtKTsKKwlpZiAoSVNfRVJSKGRwaS0+cmVncykpIHsKKwkJcmV0ID0gUFRSX0VS
UihkcGktPnJlZ3MpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpb3JlbWFwIG1lbSByZXNv
dXJjZTogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZHBpLT5lbmdpbmVfY2xr
ID0gZGV2bV9jbGtfZ2V0KGRldiwgImVuZ2luZSIpOworCWlmIChJU19FUlIoZHBpLT5lbmdpbmVf
Y2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKGRwaS0+ZW5naW5lX2Nsayk7CisJCWRldl9lcnIoZGV2
LCAiRmFpbGVkIHRvIGdldCBlbmdpbmUgY2xvY2s6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0
OworCX0KKworCWRwaS0+cGl4ZWxfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgInBpeGVsIik7CisJ
aWYgKElTX0VSUihkcGktPnBpeGVsX2NsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihkcGktPnBpeGVs
X2Nsayk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBwaXhlbCBjbG9jazogJWRcbiIs
IHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZHBpLT50dmRfY2xrID0gZGV2bV9jbGtfZ2V0
KGRldiwgInBsbCIpOworCWlmIChJU19FUlIoZHBpLT50dmRfY2xrKSkgeworCQlyZXQgPSBQVFJf
RVJSKGRwaS0+dHZkX2Nsayk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCB0dmRwbGwg
Y2xvY2s6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRwaS0+aXJxID0gcGxh
dGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoZHBpLT5pcnEgPD0gMCkgeworCQlkZXZfZXJy
KGRldiwgIkZhaWxlZCB0byBnZXQgaXJxOiAlZFxuIiwgZHBpLT5pcnEpOworCQlyZXR1cm4gLUVJ
TlZBTDsKKwl9CisKKwllcCA9IG9mX2dyYXBoX2dldF9uZXh0X2VuZHBvaW50KGRldi0+b2Zfbm9k
ZSwgTlVMTCk7CisJaWYgKGVwKSB7CisJCWJyaWRnZV9ub2RlID0gb2ZfZ3JhcGhfZ2V0X3JlbW90
ZV9wb3J0X3BhcmVudChlcCk7CisJCW9mX25vZGVfcHV0KGVwKTsKKwl9CisJaWYgKCFicmlkZ2Vf
bm9kZSkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBmaW5kIGJyaWRnZSBub2RlOiAlZFxu
IiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkZXZfaW5mbyhkZXYsICJGb3VuZCBicmlk
Z2Ugbm9kZTogJXNcbiIsIGJyaWRnZV9ub2RlLT5mdWxsX25hbWUpOworCisJZHBpLT5lbmNvZGVy
LmJyaWRnZSA9IG9mX2RybV9maW5kX2JyaWRnZShicmlkZ2Vfbm9kZSk7CisJb2Zfbm9kZV9wdXQo
YnJpZGdlX25vZGUpOworCWlmICghZHBpLT5lbmNvZGVyLmJyaWRnZSkKKwkJcmV0dXJuIC1FUFJP
QkVfREVGRVI7CisKKwljb21wX2lkID0gbXRrX2RkcF9jb21wX2dldF9pZChkZXYtPm9mX25vZGUs
IE1US19EUEkpOworCWlmIChjb21wX2lkIDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0
byBpZGVudGlmeSBieSBhbGlhczogJWRcbiIsIGNvbXBfaWQpOworCQlyZXR1cm4gY29tcF9pZDsK
Kwl9CisKKwlyZXQgPSBtdGtfZGRwX2NvbXBfaW5pdChkZXYsIGRldi0+b2Zfbm9kZSwgJmRwaS0+
ZGRwX2NvbXAsIGNvbXBfaWQsCisJCQkJJm10a19kcGlfZnVuY3MpOworCWlmIChyZXQpIHsKKwkJ
ZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb21wb25lbnQ6ICVkXG4iLCByZXQp
OworCQlyZXR1cm4gcmV0OworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRwaSk7
CisKKwlyZXQgPSBjb21wb25lbnRfYWRkKGRldiwgJm10a19kcGlfY29tcG9uZW50X29wcyk7CisJ
aWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBhZGQgY29tcG9uZW50OiAlZFxu
IiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu
dCBtdGtfZHBpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWNvbXBv
bmVudF9kZWwoJnBkZXYtPmRldiwgJm10a19kcGlfY29tcG9uZW50X29wcyk7CisKKwlyZXR1cm4g
MDsKK30KKworI2lmZGVmIENPTkZJR19QTV9TTEVFUAorc3RhdGljIGludCBtdGtfZHBpX3N1c3Bl
bmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtfZHBpICpkcGkgPSBkZXZfZ2V0
X2RydmRhdGEoZGV2KTsKKworCWlmIChJU19FUlIoZHBpKSkgeworCQlkZXZfaW5mbyhkZXYsICJk
cGkgc3VzcGVuZCBmYWlsZWQhXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoZHBpKTsKKwl9CisKKwlt
dGtfZHBpX3Bvd2VyX29mZihkcGkpOworCisJZGV2X2luZm8oZGV2LCAiZHBpIHN1c3BlbmQgc3Vj
Y2VzcyFcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RwaV9yZXN1bWUo
c3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtfZHBpICpkcGkgPSBkZXZfZ2V0X2Ry
dmRhdGEoZGV2KTsKKwlpbnQgcmV0OworCisJaWYgKElTX0VSUihkcGkpKSB7CisJCWRldl9lcnIo
ZGV2LCAiZHBpIHJlc3VtZSBmYWlsZWQhXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoZHBpKTsKKwl9
CisKKwlyZXQgPSBtdGtfZHBpX3Bvd2VyX29uKGRwaSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJy
KGRldiwgImRwaSByZXN1bWUgZmFpbGVkIVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJZGV2
X2luZm8oZGV2LCAiZHBpIHJlc3VtZSBzdWNjZXNzIVxuIik7CisKKwlyZXR1cm4gMDsKK30KKyNl
bmRpZgorCitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMobXRrX2RwaV9wbV9vcHMsIG10a19kcGlf
c3VzcGVuZCwgbXRrX2RwaV9yZXN1bWUpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2Rldmlj
ZV9pZCBtdGtfZHBpX29mX2lkc1tdID0geworCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4
MTczLWRwaSIsIH0sCisJe30KK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2RwaV9k
cml2ZXIgPSB7CisJLnByb2JlID0gbXRrX2RwaV9wcm9iZSwKKwkucmVtb3ZlID0gbXRrX2RwaV9y
ZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAibWVkaWF0ZWstZHBpIiwKKwkJLm9mX21h
dGNoX3RhYmxlID0gbXRrX2RwaV9vZl9pZHMsCisJCS5wbSA9ICZtdGtfZHBpX3BtX29wcywKKwl9
LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHBpLmggYi9k
cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjI1ZGE1ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0v
bWVkaWF0ZWsvbXRrX2RwaS5oCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp
IDIwMTQgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBKaWUgUWl1IDxqaWUucWl1QG1lZGlhdGVr
LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
Ki8KKyNpZm5kZWYgX01US19EUElfSAorI2RlZmluZSBfTVRLX0RQSV9ICisKKyNpbmNsdWRlIDxs
aW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgorCisjaW5jbHVkZSAibXRr
X2RybV9kZHBfY29tcC5oIgorCitzdHJ1Y3QgZGV2aWNlOworc3RydWN0IGNsazsKKworZW51bSBt
dGtfZHBpX291dF9iaXRfbnVtIHsKKwlNVEtfRFBJX09VVF9CSVRfTlVNXzhCSVRTLAorCU1US19E
UElfT1VUX0JJVF9OVU1fMTBCSVRTLAorCU1US19EUElfT1VUX0JJVF9OVU1fMTJCSVRTLAorCU1U
S19EUElfT1VUX0JJVF9OVU1fMTZCSVRTCit9OworCitlbnVtIG10a19kcGlfb3V0X3ljX21hcCB7
CisJTVRLX0RQSV9PVVRfWUNfTUFQX1JHQiwKKwlNVEtfRFBJX09VVF9ZQ19NQVBfQ1lDWSwKKwlN
VEtfRFBJX09VVF9ZQ19NQVBfWUNZQywKKwlNVEtfRFBJX09VVF9ZQ19NQVBfQ1ksCisJTVRLX0RQ
SV9PVVRfWUNfTUFQX1lDCit9OworCitlbnVtIG10a19kcGlfb3V0X2NoYW5uZWxfc3dhcCB7CisJ
TVRLX0RQSV9PVVRfQ0hBTk5FTF9TV0FQX1JHQiwKKwlNVEtfRFBJX09VVF9DSEFOTkVMX1NXQVBf
R0JSLAorCU1US19EUElfT1VUX0NIQU5ORUxfU1dBUF9CUkcsCisJTVRLX0RQSV9PVVRfQ0hBTk5F
TF9TV0FQX1JCRywKKwlNVEtfRFBJX09VVF9DSEFOTkVMX1NXQVBfR1JCLAorCU1US19EUElfT1VU
X0NIQU5ORUxfU1dBUF9CR1IKK307CisKK2VudW0gbXRrX2RwaV9vdXRfY29sb3JfZm9ybWF0IHsK
KwlNVEtfRFBJX0NPTE9SX0ZPUk1BVF9SR0IsCisJTVRLX0RQSV9DT0xPUl9GT1JNQVRfUkdCX0ZV
TEwsCisJTVRLX0RQSV9DT0xPUl9GT1JNQVRfWUNCQ1JfNDQ0LAorCU1US19EUElfQ09MT1JfRk9S
TUFUX1lDQkNSXzQyMiwKKwlNVEtfRFBJX0NPTE9SX0ZPUk1BVF9YVl9ZQ0MsCisJTVRLX0RQSV9D
T0xPUl9GT1JNQVRfWUNCQ1JfNDQ0X0ZVTEwsCisJTVRLX0RQSV9DT0xPUl9GT1JNQVRfWUNCQ1Jf
NDIyX0ZVTEwKK307CisKK3N0cnVjdCBtdGtfZHBpIHsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21wIGRk
cF9jb21wOworCXN0cnVjdCBkcm1fZW5jb2RlciBlbmNvZGVyOworCXZvaWQgX19pb21lbSAqcmVn
czsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IGNsayAqZW5naW5lX2NsazsKKwlzdHJ1
Y3QgY2xrICpwaXhlbF9jbGs7CisJc3RydWN0IGNsayAqdHZkX2NsazsKKwlpbnQgaXJxOworCXN0
cnVjdCBkcm1fZGlzcGxheV9tb2RlIG1vZGU7CisJZW51bSBtdGtfZHBpX291dF9jb2xvcl9mb3Jt
YXQgY29sb3JfZm9ybWF0OworCWVudW0gbXRrX2RwaV9vdXRfeWNfbWFwIHljX21hcDsKKwllbnVt
IG10a19kcGlfb3V0X2JpdF9udW0gYml0X251bTsKKwllbnVtIG10a19kcGlfb3V0X2NoYW5uZWxf
c3dhcCBjaGFubmVsX3N3YXA7CisJaW50IHJlZmNvdW50OworfTsKKworc3RhdGljIGlubGluZSBz
dHJ1Y3QgbXRrX2RwaSAqbXRrX2RwaV9mcm9tX2VuY29kZXIoc3RydWN0IGRybV9lbmNvZGVyICpl
KQoreworCXJldHVybiBjb250YWluZXJfb2YoZSwgc3RydWN0IG10a19kcGksIGVuY29kZXIpOwor
fQorCitpbnQgbXRrX2RwaV9zZXRfZGlzcGxheV9tb2RlKHN0cnVjdCBtdGtfZHBpICpkcGksCisJ
CQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKTsKKworI2VuZGlmIC8qIF9NVEtf
RFBJX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHBpX3Jl
Z3MuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHBpX3JlZ3MuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjZhZDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJp
dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcGlfcmVncy5oCkBAIC0wLDAgKzEsMjI4IEBACisv
KgorICogQ29weXJpZ2h0IChjKSAyMDE0IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogSmllIFFp
dSA8amllLnFpdUBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFz
CisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBU
aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fTVRLX0RQSV9SRUdTX0gKKyNkZWZpbmUg
X19NVEtfRFBJX1JFR1NfSAorCisjZGVmaW5lIERQSV9FTgkJCTB4MDAKKyNkZWZpbmUgRU4JCQkJ
QklUKDApCisKKyNkZWZpbmUgRFBJX1JFVAkJCTB4MDQKKyNkZWZpbmUgUlNUCQkJCUJJVCgwKQor
CisjZGVmaW5lIERQSV9JTlRFTgkJMHgwOAorI2RlZmluZSBJTlRfVlNZTkNfRU4JCQlCSVQoMCkK
KyNkZWZpbmUgSU5UX1ZERV9FTgkJCUJJVCgxKQorI2RlZmluZSBJTlRfVU5ERVJGTE9XX0VOCQlC
SVQoMikKKworI2RlZmluZSBEUElfSU5UU1RBCQkweDBDCisjZGVmaW5lIElOVF9WU1lOQ19TVEEJ
CQlCSVQoMCkKKyNkZWZpbmUgSU5UX1ZERV9TVEEJCQlCSVQoMSkKKyNkZWZpbmUgSU5UX1VOREVS
RkxPV19TVEEJCUJJVCgyKQorCisjZGVmaW5lIERQSV9DT04JCQkweDEwCisjZGVmaW5lIEJHX0VO
QUJMRQkJCUJJVCgwKQorI2RlZmluZSBJTl9SQl9TV0FQCQkJQklUKDEpCisjZGVmaW5lIElOVExf
RU4JCQkJQklUKDIpCisjZGVmaW5lIFRERlBfRU4JCQkJQklUKDMpCisjZGVmaW5lIENMUEZfRU4J
CQkJQklUKDQpCisjZGVmaW5lIFlVVjQyMl9FTgkJCUJJVCg1KQorI2RlZmluZSBDU0NfRU5BQkxF
CQkJQklUKDYpCisjZGVmaW5lIFI2MDFfU0VMCQkJQklUKDcpCisjZGVmaW5lIEVNQlNZTkNfRU4J
CQlCSVQoOCkKKyNkZWZpbmUgVlNfTE9ERF9FTgkJCUJJVCgxNikKKyNkZWZpbmUgVlNfTEVWRU5f
RU4JCQlCSVQoMTcpCisjZGVmaW5lIFZTX1JPRERfRU4JCQlCSVQoMTgpCisjZGVmaW5lIFZTX1JF
VkVOCQkJQklUKDE5KQorI2RlZmluZSBGQUtFX0RFX0xPREQJCQlCSVQoMjApCisjZGVmaW5lIEZB
S0VfREVfTEVWRU4JCQlCSVQoMjEpCisjZGVmaW5lIEZBS0VfREVfUk9ERAkJCUJJVCgyMikKKyNk
ZWZpbmUgRkFLRV9ERV9SRVZFTgkJCUJJVCgyMykKKworI2RlZmluZSBEUElfT1VUUFVUX1NFVFRJ
TkcJMHgxNAorI2RlZmluZSBDSF9TV0FQCQkJCTAKKyNkZWZpbmUgQ0hfU1dBUF9NQVNLCQkJKDB4
NyA8PCAwKQorI2RlZmluZSBTV0FQX1JHQgkJCTB4MDAKKyNkZWZpbmUgU1dBUF9HQlIJCQkweDAx
CisjZGVmaW5lIFNXQVBfQlJHCQkJMHgwMgorI2RlZmluZSBTV0FQX1JCRwkJCTB4MDMKKyNkZWZp
bmUgU1dBUF9HUkIJCQkweDA0CisjZGVmaW5lIFNXQVBfQkdSCQkJMHgwNQorI2RlZmluZSBCSVRf
U1dBUAkJCUJJVCgzKQorI2RlZmluZSBCX01BU0sJCQkJQklUKDQpCisjZGVmaW5lIEdfTUFTSwkJ
CQlCSVQoNSkKKyNkZWZpbmUgUl9NQVNLCQkJCUJJVCg2KQorI2RlZmluZSBERV9NQVNLCQkJCUJJ
VCg4KQorI2RlZmluZSBIU19NQVNLCQkJCUJJVCg5KQorI2RlZmluZSBWU19NQVNLCQkJCUJJVCgx
MCkKKyNkZWZpbmUgREVfUE9MCQkJCUJJVCgxMikKKyNkZWZpbmUgSFNZTkNfUE9MCQkJQklUKDEz
KQorI2RlZmluZSBWU1lOQ19QT0wJCQlCSVQoMTQpCisjZGVmaW5lIENLX1BPTAkJCQlCSVQoMTUp
CisjZGVmaW5lIE9FTl9PRkYJCQkJQklUKDE2KQorI2RlZmluZSBFREdFX1NFTAkJCUJJVCgxNykK
KyNkZWZpbmUgT1VUX0JJVAkJCQkxOAorI2RlZmluZSBPVVRfQklUX01BU0sJCQkoMHgzIDw8IDE4
KQorI2RlZmluZSBPVVRfQklUXzgJCQkweDAwCisjZGVmaW5lIE9VVF9CSVRfMTAJCQkweDAxCisj
ZGVmaW5lIE9VVF9CSVRfMTIJCQkweDAyCisjZGVmaW5lIE9VVF9CSVRfMTYJCQkweDAzCisjZGVm
aW5lIFlDX01BUAkJCQkyMAorI2RlZmluZSBZQ19NQVBfTUFTSwkJCSgweDcgPDwgMjApCisjZGVm
aW5lIFlDX01BUF9SR0IJCQkweDAwCisjZGVmaW5lIFlDX01BUF9DWUNZCQkJMHgwNAorI2RlZmlu
ZSBZQ19NQVBfWUNZQwkJCTB4MDUKKyNkZWZpbmUgWUNfTUFQX0NZCQkJMHgwNgorI2RlZmluZSBZ
Q19NQVBfWUMJCQkweDA3CisKKyNkZWZpbmUgRFBJX1NJWkUJCTB4MTgKKyNkZWZpbmUgSFNJWkUJ
CQkJMAorI2RlZmluZSBIU0laRV9NQVNLCQkJKDB4MUZGRiA8PCAwKQorI2RlZmluZSBWU0laRQkJ
CQkxNgorI2RlZmluZSBWU0laRV9NQVNLCQkJKDB4MUZGRiA8PCAxNikKKworI2RlZmluZSBEUElf
RERSX1NFVFRJTkcJCTB4MUMKKyNkZWZpbmUgRERSX0VOCQkJCUJJVCgwKQorI2RlZmluZSBERERS
X1NFTAkJCUJJVCgxKQorI2RlZmluZSBERFJfNFBIQVNFCQkJQklUKDIpCisjZGVmaW5lIEREUl9X
SURUSAkJCSgweDMgPDwgNCkKKyNkZWZpbmUgRERSX1BBRF9NT0RFCQkJKDB4MSA8PCA4KQorCisj
ZGVmaW5lIERQSV9UR0VOX0hXSURUSAkJMHgyMAorI2RlZmluZSBIUFcJCQkJMAorI2RlZmluZSBI
UFdfTUFTSwkJCSgweEZGRiA8PCAwKQorCisjZGVmaW5lIERQSV9UR0VOX0hQT1JDSAkJMHgyNAor
I2RlZmluZSBIQlAJCQkJMAorI2RlZmluZSBIQlBfTUFTSwkJCSgweEZGRiA8PCAwKQorI2RlZmlu
ZSBIRlAJCQkJMTYKKyNkZWZpbmUgSEZQX01BU0sJCQkoMHhGRkYgPDwgMTYpCisKKyNkZWZpbmUg
RFBJX1RHRU5fVldJRFRICQkweDI4CisjZGVmaW5lIERQSV9UR0VOX1ZQT1JDSAkJMHgyQworCisj
ZGVmaW5lIFZTWU5DX1dJRFRIX1NISUZUCQkwCisjZGVmaW5lIFZTWU5DX1dJRFRIX01BU0sJCSgw
eEZGRiA8PCAwKQorI2RlZmluZSBWU1lOQ19IQUxGX0xJTkVfU0hJRlQJCTE2CisjZGVmaW5lIFZT
WU5DX0hBTEZfTElORV9NQVNLCQlCSVQoMTYpCisjZGVmaW5lIFZTWU5DX0JBQ0tfUE9SQ0hfU0hJ
RlQJCTAKKyNkZWZpbmUgVlNZTkNfQkFDS19QT1JDSF9NQVNLCQkoMHhGRkYgPDwgMCkKKyNkZWZp
bmUgVlNZTkNfRlJPTlRfUE9SQ0hfU0hJRlQJCTE2CisjZGVmaW5lIFZTWU5DX0ZST05UX1BPUkNI
X01BU0sJCSgweEZGRiA8PCAxNikKKworI2RlZmluZSBEUElfQkdfSENOVEwJCTB4MzAKKyNkZWZp
bmUgQkdfUklHSFQJCQkoMHgxRkZGIDw8IDApCisjZGVmaW5lIEJHX0xFRlQJCQkJKDB4MUZGRiA8
PCAxNikKKworI2RlZmluZSBEUElfQkdfVkNOVEwJCTB4MzQKKyNkZWZpbmUgQkdfQk9UCQkJCSgw
eDFGRkYgPDwgMCkKKyNkZWZpbmUgQkdfVE9QCQkJCSgweDFGRkYgPDwgMTYpCisKKyNkZWZpbmUg
RFBJX0JHX0NPTE9SCQkweDM4CisjZGVmaW5lIEJHX0IJCQkJKDB4RiA8PCAwKQorI2RlZmluZSBC
R19HCQkJCSgweEYgPDwgOCkKKyNkZWZpbmUgQkdfUgkJCQkoMHhGIDw8IDE2KQorCisjZGVmaW5l
IERQSV9GSUZPX0NUTAkJMHgzQworI2RlZmluZSBGSUZPX1ZBTElEX1NFVAkJCSgweDFGIDw8IDAp
CisjZGVmaW5lIEZJRk9fUlNUX1NFTAkJCSgweDEgPDwgOCkKKworI2RlZmluZSBEUElfU1RBVFVT
CQkweDQwCisjZGVmaW5lIFZDT1VOVEVSCQkJKDB4MUZGRiA8PCAwKQorI2RlZmluZSBEUElfQlVT
WQkJCUJJVCgxNikKKyNkZWZpbmUgT1VURU4JCQkJQklUKDE3KQorI2RlZmluZSBGSUVMRAkJCQlC
SVQoMjApCisjZGVmaW5lIFRETFIJCQkJQklUKDIxKQorCisjZGVmaW5lIERQSV9UTU9ERQkJMHg0
NAorI2RlZmluZSBEUElfT0VOX09OCQkJQklUKDApCisKKyNkZWZpbmUgRFBJX0NIRUNLU1VNCQkw
eDQ4CisjZGVmaW5lIERQSV9DSEVDS1NVTV9NQVNLCQkoMHhGRkZGRkYgPDwgMCkKKyNkZWZpbmUg
RFBJX0NIRUNLU1VNX1JFQURZCQlCSVQoMzApCisjZGVmaW5lIERQSV9DSEVDS1NVTV9FTgkJCUJJ
VCgzMSkKKworI2RlZmluZSBEUElfRFVNTVkJCTB4NTAKKyNkZWZpbmUgRFBJX0RVTU1ZX01BU0sJ
CQkoMHhGRkZGRkZGRiA8PCAwKQorCisjZGVmaW5lIERQSV9UR0VOX1ZXSURUSF9MRVZFTgkweDY4
CisjZGVmaW5lIERQSV9UR0VOX1ZQT1JDSF9MRVZFTgkweDZDCisjZGVmaW5lIERQSV9UR0VOX1ZX
SURUSF9ST0RECTB4NzAKKyNkZWZpbmUgRFBJX1RHRU5fVlBPUkNIX1JPREQJMHg3NAorI2RlZmlu
ZSBEUElfVEdFTl9WV0lEVEhfUkVWRU4JMHg3OAorI2RlZmluZSBEUElfVEdFTl9WUE9SQ0hfUkVW
RU4JMHg3QworCisjZGVmaW5lIERQSV9FU0FWX1ZUSU1JTkdfTE9ERAkweDgwCisjZGVmaW5lIEVT
QVZfVk9GU1RfTE9ERAkJCSgweEZGRiA8PCAwKQorI2RlZmluZSBFU0FWX1ZXSURfTE9ERAkJCSgw
eEZGRiA8PCAxNikKKworI2RlZmluZSBEUElfRVNBVl9WVElNSU5HX0xFVkVOCTB4ODQKKyNkZWZp
bmUgRVNBVl9WT0ZTVF9MRVZFTgkJKDB4RkZGIDw8IDApCisjZGVmaW5lIEVTQVZfVldJRF9MRVZF
TgkJCSgweEZGRiA8PCAxNikKKworI2RlZmluZSBEUElfRVNBVl9WVElNSU5HX1JPREQJMHg4OAor
I2RlZmluZSBFU0FWX1ZPRlNUX1JPREQJCQkoMHhGRkYgPDwgMCkKKyNkZWZpbmUgRVNBVl9WV0lE
X1JPREQJCQkoMHhGRkYgPDwgMTYpCisKKyNkZWZpbmUgRFBJX0VTQVZfVlRJTUlOR19SRVZFTgkw
eDhDCisjZGVmaW5lIEVTQVZfVk9GU1RfUkVWRU4JCSgweEZGRiA8PCAwKQorI2RlZmluZSBFU0FW
X1ZXSURfUkVWRU4JCQkoMHhGRkYgPDwgMTYpCisKKyNkZWZpbmUgRFBJX0VTQVZfRlRJTUlORwkw
eDkwCisjZGVmaW5lIEVTQVZfRk9GU1RfT0RECQkJKDB4RkZGIDw8IDApCisjZGVmaW5lIEVTQVZf
Rk9GU1RfRVZFTgkJCSgweEZGRiA8PCAxNikKKworI2RlZmluZSBEUElfQ0xQRl9TRVRUSU5HCTB4
OTQKKyNkZWZpbmUgQ0xQRl9UWVBFCQkJKDB4MyA8PCAwKQorI2RlZmluZSBST1VORF9FTgkJCUJJ
VCg0KQorCisjZGVmaW5lIERQSV9ZX0xJTUlUCQkweDk4CisjZGVmaW5lIFlfTElNSU5UX0JPVAkJ
CTAKKyNkZWZpbmUgWV9MSU1JTlRfQk9UX01BU0sJCSgweEZGRiA8PCAwKQorI2RlZmluZSBZX0xJ
TUlOVF9UT1AJCQkxNgorI2RlZmluZSBZX0xJTUlOVF9UT1BfTUFTSwkJKDB4RkZGIDw8IDE2KQor
CisjZGVmaW5lIERQSV9DX0xJTUlUCQkweDlDCisjZGVmaW5lIENfTElNSVRfQk9UCQkJMAorI2Rl
ZmluZSBDX0xJTUlUX0JPVF9NQVNLCQkoMHhGRkYgPDwgMCkKKyNkZWZpbmUgQ19MSU1JVF9UT1AJ
CQkxNgorI2RlZmluZSBDX0xJTUlUX1RPUF9NQVNLCQkoMHhGRkYgPDwgMTYpCisKKyNkZWZpbmUg
RFBJX1lVVjQyMl9TRVRUSU5HCTB4QTAKKyNkZWZpbmUgVVZfU1dBUAkJCQlCSVQoMCkKKyNkZWZp
bmUgQ1JfREVMU0VMCQkJQklUKDQpCisjZGVmaW5lIENCX0RFTFNFTAkJCUJJVCg1KQorI2RlZmlu
ZSBZX0RFTFNFTAkJCUJJVCg2KQorI2RlZmluZSBERV9ERUxTRUwJCQlCSVQoNykKKworI2RlZmlu
ZSBEUElfRU1CU1lOQ19TRVRUSU5HCTB4QTQKKyNkZWZpbmUgRU1CU1lOQ19SX0NSX0VOCQkJQklU
KDApCisjZGVmaW5lIEVNUFNZTkNfR19ZX0VOCQkJQklUKDEpCisjZGVmaW5lIEVNUFNZTkNfQl9D
Ql9FTgkJCUJJVCgyKQorI2RlZmluZSBFU0FWX0ZfSU5WCQkJQklUKDQpCisjZGVmaW5lIEVTQVZf
Vl9JTlYJCQlCSVQoNSkKKyNkZWZpbmUgRVNBVl9IX0lOVgkJCUJJVCg2KQorI2RlZmluZSBFU0FW
X0NPREVfTUFOCQkJQklUKDgpCisjZGVmaW5lIFZTX09VVF9TRUwJCQkoMHg3IDw8IDEyKQorCisj
ZGVmaW5lIERQSV9FU0FWX0NPREVfU0VUMAkweEE4CisjZGVmaW5lIEVTQVZfQ09ERTAJCQkoMHhG
RkYgPDwgMCkKKyNkZWZpbmUgRVNBVl9DT0RFMQkJCSgweEZGRiA8PCAxNikKKworI2RlZmluZSBE
UElfRVNBVl9DT0RFX1NFVDEJMHhBQworI2RlZmluZSBFU0FWX0NPREUyCQkJKDB4RkZGIDw8IDAp
CisjZGVmaW5lIEVTQVZfQ09ERTNfTVNCCQkJQklUKDE2KQorCisjZGVmaW5lIERQSV9IX0ZSRV9D
T04JCTB4RTAKKyNkZWZpbmUgSF9GUkVfMk4JCQlCSVQoMjUpCisjZW5kaWYgLyogX19NVEtfRFBJ
X1JFR1NfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1f
ZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYwppbmRleCAzOTI2
N2Y5Li44YjMwODJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry
bV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYwpAQCAt
NTM4LDYgKzUzOCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICogY29uc3QgbXRr
X2RybV9kcml2ZXJzW10gPSB7CiAJJm10a19kaXNwX292bF9kcml2ZXIsCiAJJm10a19kc2lfZHJp
dmVyLAogCSZtdGtfbWlwaV90eF9kcml2ZXIsCisJJm10a19kcGlfZHJpdmVyLAogfTsKIAogc3Rh
dGljIGludCBfX2luaXQgbXRrX2RybV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw
dS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t
dGtfZHJtX2Rydi5oCmluZGV4IGU4NmMxOWUuLjliNTUxNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv
Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRp
YXRlay9tdGtfZHJtX2Rydi5oCkBAIC01MCw1ICs1MCw2IEBAIHN0cnVjdCBtdGtfZHJtX3ByaXZh
dGUgewogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2Rpc3Bfb3ZsX2RyaXZlcjsK
IGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19kc2lfZHJpdmVyOwogZXh0ZXJuIHN0
cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX21pcGlfdHhfZHJpdmVyOworZXh0ZXJuIHN0cnVjdCBw
bGF0Zm9ybV9kcml2ZXIgbXRrX2RwaV9kcml2ZXI7CiAKICNlbmRpZiAvKiBNVEtfRFJNX0RSVl9I
ICovCi0tIAoyLjYuMgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Au
b3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2
ZWwK