Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 15 Jul 2015 17:33:11 +0000
From:      "zbb (Zbigniew Bodek)" <phabric-noreply@FreeBSD.org>
To:        freebsd-arm@freebsd.org
Subject:   [Differential] [Updated, 2, 078 lines] D2378: Introduce ITS support for ARM64
Message-ID:  <4bdeef8ca26e31550e57aedc792dfc9a@localhost.localdomain>
In-Reply-To: <differential-rev-PHID-DREV-xmqmcfafyun443233vly-req@FreeBSD.org>
References:  <differential-rev-PHID-DREV-xmqmcfafyun443233vly-req@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help

--b1_4bdeef8ca26e31550e57aedc792dfc9a
Content-Type: text/plain; charset = "utf-8"
Content-Transfer-Encoding: 8bit

zbb updated this revision to Diff 6978.

CHANGES SINCE LAST UPDATE
  https://reviews.freebsd.org/D2378?vs=5978&id=6978

REVISION DETAIL
  https://reviews.freebsd.org/D2378

AFFECTED FILES
  sys/arm64/arm64/gic_v3.c
  sys/arm64/arm64/gic_v3_fdt.c
  sys/arm64/arm64/gic_v3_its.c
  sys/arm64/arm64/gic_v3_reg.h
  sys/arm64/arm64/gic_v3_var.h
  sys/arm64/include/param.h
  sys/conf/files.arm64

EMAIL PREFERENCES
  https://reviews.freebsd.org/settings/panel/emailpreferences/

To: zbb, imp, ian, emaste, manpages, andrew
Cc: eadler, gnn, kib, emaste, andrew, freebsd-arm-list, imp

--b1_4bdeef8ca26e31550e57aedc792dfc9a
Content-Type: text/x-patch; charset=utf-8; name="D2378.6978.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="D2378.6978.patch"

ZGlmZiAtLWdpdCBhL3N5cy9jb25mL2ZpbGVzLmFybTY0IGIvc3lzL2NvbmYvZmlsZXMuYXJtNjQK
LS0tIGEvc3lzL2NvbmYvZmlsZXMuYXJtNjQKKysrIGIvc3lzL2NvbmYvZmlsZXMuYXJtNjQKQEAg
LTI3LDYgKzI3LDcgQEAKIGFybTY0L2FybTY0L2dpY19mZHQuYwkJb3B0aW9uYWwJZmR0CiBhcm02
NC9hcm02NC9naWNfdjMuYwkJc3RhbmRhcmQKIGFybTY0L2FybTY0L2dpY192M19mZHQuYwlvcHRp
b25hbAlmZHQKK2FybTY0L2FybTY0L2dpY192M19pdHMuYwlzdGFuZGFyZAogYXJtNjQvYXJtNjQv
aWRlbnRjcHUuYwkJc3RhbmRhcmQKIGFybTY0L2FybTY0L2ludHJfbWFjaGRlcC5jCXN0YW5kYXJk
CiBhcm02NC9hcm02NC9pbl9ja3N1bS5jCQlvcHRpb25hbAlpbmV0IHwgaW5ldDYKZGlmZiAtLWdp
dCBhL3N5cy9hcm02NC9pbmNsdWRlL3BhcmFtLmggYi9zeXMvYXJtNjQvaW5jbHVkZS9wYXJhbS5o
Ci0tLSBhL3N5cy9hcm02NC9pbmNsdWRlL3BhcmFtLmgKKysrIGIvc3lzL2FybTY0L2luY2x1ZGUv
cGFyYW0uaApAQCAtODIsNiArODIsMTAgQEAKICNkZWZpbmUJUEFHRV9TSVpFCSgxIDw8IFBBR0Vf
U0hJRlQpCS8qIFBhZ2Ugc2l6ZSAqLwogI2RlZmluZQlQQUdFX01BU0sJKFBBR0VfU0laRSAtIDEp
CiAKKyNkZWZpbmUJUEFHRV9TSElGVF8xNksJMTQKKyNkZWZpbmUJUEFHRV9TSVpFXzE2SwkoMSA8
PCBQQUdFX1NISUZUXzE2SykKKyNkZWZpbmUJUEFHRV9NQVNLXzE2SwkoUEFHRV9TSVpFXzE2SyAt
IDEpCisKICNkZWZpbmUJUEFHRV9TSElGVF82NEsJMTYKICNkZWZpbmUJUEFHRV9TSVpFXzY0Swko
MSA8PCBQQUdFX1NISUZUXzY0SykKICNkZWZpbmUJUEFHRV9NQVNLXzY0SwkoUEFHRV9TSVpFXzY0
SyAtIDEpCmRpZmYgLS1naXQgYS9zeXMvYXJtNjQvYXJtNjQvZ2ljX3YzX3Zhci5oIGIvc3lzL2Fy
bTY0L2FybTY0L2dpY192M192YXIuaAotLS0gYS9zeXMvYXJtNjQvYXJtNjQvZ2ljX3YzX3Zhci5o
CisrKyBiL3N5cy9hcm02NC9hcm02NC9naWNfdjNfdmFyLmgKQEAgLTM2LDYgKzM2LDE3IEBACiAK
IERFQ0xBUkVfQ0xBU1MoZ2ljX3YzX2RyaXZlcik7CiAKKyNkZWZpbmUJTFBJX0ZMQUdTX0NPTkZf
RkxVU0gJKDFVTCA8PCAwKQorI2RlZmluZQlMUElfQ09ORlRBQl9TSVpFCVBBR0VfU0laRV82NEsK
Ky8qIDEgYml0IHBlciBMUEkgKyAxIEtCIG1vcmUgZm9yIHRoZSBvYmxpZ2F0b3J5IFBQSSwgU0dJ
LCBTUEkgc3R1ZmYgKi8KKyNkZWZpbmUJTFBJX1BFTkRUQUJfU0laRQkoKExQSV9DT05GVEFCX1NJ
WkUgLyA4KSArIDB4NDAwKQorCitzdHJ1Y3QgcmVkaXN0X2xwaXMgeworCXZtX29mZnNldF90CQlj
b25mX2Jhc2U7CisJdm1fb2Zmc2V0X3QJCXBlbmRfYmFzZVtNQVhDUFVdOworCXVpbnQ2NF90CQlm
bGFnczsKK307CisKIHN0cnVjdCBnaWNfcmVkaXN0cyB7CiAJLyoKIAkgKiBSZS1EaXN0cmlidXRv
ciByZWdpb24gZGVzY3JpcHRpb24uCkBAIC00Nyw2ICs1OCw4IEBACiAJdV9pbnQJCQlucmVnaW9u
czsKIAkvKiBQZXItQ1BVIFJlLURpc3RyaWJ1dG9yIGhhbmRsZXIgKi8KIAlzdHJ1Y3QgcmVzb3Vy
Y2UgKglwY3B1W01BWENQVV07CisJLyogTFBJcyBkYXRhICovCisJc3RydWN0IHJlZGlzdF9scGlz
CWxwaXM7CiB9OwogCiBzdHJ1Y3QgZ2ljX3YzX3NvZnRjIHsKQEAgLTcxLDYgKzg0LDE2NyBAQAog
aW50IGdpY192M19kZXRhY2goZGV2aWNlX3QgZGV2KTsKIAogLyoKKyAqIElUUworICovCisjZGVm
aW5lCUdJQ19WM19JVFNfREVWU1RSCSJBUk0gR0lDIEludGVycnVwdCBUcmFuc2xhdGlvbiBTZXJ2
aWNlIgorI2RlZmluZQlHSUNfVjNfSVRTX0NPTVBTVFIJImFybSxnaWMtdjMtaXRzIgorCitERUNM
QVJFX0NMQVNTKGdpY192M19pdHNfZHJpdmVyKTsKKworLyogTFBJIGNodW5rIG93bmVkIGJ5IElU
UyBkZXZpY2UgKi8KK3N0cnVjdCBscGlfY2h1bmsgeworCXVfaW50CWxwaV9iYXNlOworCXVfaW50
CWxwaV9udW07CisJdV9pbnQJbHBpX2ZyZWU7CS8qIEZpcnN0IGZyZWUgTFBJIGluIHNldCAqLwor
fTsKKworLyogSVRTIGRldmljZSAqLworc3RydWN0IGl0c19kZXYgeworCVRBSUxRX0VOVFJZKGl0
c19kZXYpCWVudHJ5OworCS8qIFBDSSBkZXZpY2UgKi8KKwlkZXZpY2VfdAkJcGNpX2RldjsKKwkv
KiBEZXZpY2UgSUQgKGkuZS4gUENJIGRldmljZSBJRCkgKi8KKwl1aW50MzJfdAkJZGV2aWQ7CisJ
LyogTGlzdCBvZiBhc3NpZ25lZCBMUElzICovCisJc3RydWN0IGxwaV9jaHVuawlscGlzOworCS8q
IFZpcnR1YWwgYWRkcmVzcyBvZiBJVFQgKi8KKwl2bV9vZmZzZXRfdAkJaXR0OworCS8qIEludGVy
cnVwdCBjb2xsZWN0aW9uICovCisJc3RydWN0IGl0c19jb2wgKgljb2w7Cit9OworVEFJTFFfSEVB
RChpdHNfZGV2X2xpc3QsIGl0c19kZXYpOworCisvKiBJVFMgcHJpdmF0ZSB0YWJsZSBkZXNjcmlw
dGlvbiAqLworc3RydWN0IGl0c19wdGFiIHsKKwl2bV9vZmZzZXRfdAlwdGFiX3ZhZGRyOwkvKiBW
aXJ0dWFsIEFkZHJlc3Mgb2YgdGFibGUgKi8KKwlzaXplX3QJCXB0YWJfcGdzejsJLyogUGFnZSBz
aXplICovCisJc2l6ZV90CQlwdGFiX25wYWdlczsJLyogTnVtYmVyIG9mIHBhZ2VzICovCit9Owor
CisvKiBJVFMgY29sbGVjdGlvbiBkZXNjcmlwdGlvbi4gKi8KK3N0cnVjdCBpdHNfY29sIHsKKwl1
aW50NjRfdAljb2xfdGFyZ2V0OwkvKiBUYXJnZXQgUmUtRGlzdHJpYnV0b3IgKi8KKwl1aW50NjRf
dAljb2xfaWQ7CQkvKiBDb2xsZWN0aW9uIElEICovCit9OworCisvKiBJVFMgY29tbWFuZC4gRWFj
aCBjb21tYW5kIGlzIDMyIGJ5dGVzIGxvbmcgKi8KK3N0cnVjdCBpdHNfY21kIHsKKwl1aW50NjRf
dAljbWRfZHdvcmRbNF07CS8qIElUUyBjb21tYW5kIGRvdWJsZSB3b3JkICovCit9OworCisvKiBJ
VFMgY29tbWFuZHMgZW5jb2RpbmcgKi8KKyNkZWZpbmUJSVRTX0NNRF9TWU5DCQkoMHgwNSkKKyNk
ZWZpbmUJSVRTX0NNRF9NQVBECQkoMHgwOCkKKyNkZWZpbmUJSVRTX0NNRF9NQVBDCQkoMHgwOSkK
KyNkZWZpbmUJSVRTX0NNRF9NQVBWSQkJKDB4MGEpCisjZGVmaW5lCUlUU19DTURfTUFQSQkJKDB4
MGIpCisjZGVmaW5lCUlUU19DTURfSU5WCQkoMHgwYykKKyNkZWZpbmUJSVRTX0NNRF9JTlZBTEwJ
CSgweDBkKQorLyogQ29tbWFuZCAqLworI2RlZmluZQlDTURfQ09NTUFORF9NQVNLCSgweEZGVUwp
CisvKiBQQ0kgZGV2aWNlIElEICovCisjZGVmaW5lCUNNRF9ERVZJRF9TSElGVAkJKDMyKQorI2Rl
ZmluZQlDTURfREVWSURfTUFTSwkJKDB4RkZGRkZGRkZVTCA8PCBDTURfREVWSURfU0hJRlQpCisv
KiBTaXplIG9mIElSUSBJRCBiaXRmaWVsZCAqLworI2RlZmluZQlDTURfU0laRV9NQVNLCQkoMHhG
RlVMKQorLyogVmlydHVhbCBMUEkgSUQgKi8KKyNkZWZpbmUJQ01EX0lEX01BU0sJCSgweEZGRkZG
RkZGVUwpCisvKiBQaHlzaWNhbCBMUEkgSUQgKi8KKyNkZWZpbmUJQ01EX1BJRF9TSElGVAkJKDMy
KQorI2RlZmluZQlDTURfUElEX01BU0sJCSgweEZGRkZGRkZGVUwgPDwgQ01EX1BJRF9TSElGVCkK
Ky8qIENvbGxlY3Rpb24gKi8KKyNkZWZpbmUJQ01EX0NPTF9NQVNLCQkoMHhGRkZGVUwpCisvKiBU
YXJnZXQgKENQVSBvciBSZS1EaXN0cmlidXRvcikgKi8KKyNkZWZpbmUJQ01EX1RBUkdFVF9TSElG
VAkoMTYpCisjZGVmaW5lCUNNRF9UQVJHRVRfTUFTSwkJKDB4RkZGRkZGRkZVTCA8PCBDTURfVEFS
R0VUX1NISUZUKQorLyogSW50ZXJydXB0IFRyYW5zbGF0aW9uIFRhYmxlIGFkZHJlc3MgKi8KKyNk
ZWZpbmUJQ01EX0lUVF9NQVNLCQkoMHhGRkZGRkZGRkZGMDBVTCkKKy8qIFZhbGlkIGNvbW1hbmQg
Yml0ICovCisjZGVmaW5lCUNNRF9WQUxJRF9TSElGVAkJKDYzKQorI2RlZmluZQlDTURfVkFMSURf
TUFTSwkJKDFVTCA8PCBDTURfVkFMSURfU0hJRlQpCisKKy8qCisgKiBJVFMgY29tbWFuZCBkZXNj
cmlwdG9yLgorICogSWRlYSBmb3IgY29tbWFuZCBkZXNjcmlwdGlvbiBwYXNzaW5nIHRha2VuIGZy
b20gTGludXguCisgKi8KK3N0cnVjdCBpdHNfY21kX2Rlc2MgeworCXVpbnQ4X3QgY21kX3R5cGU7
CisKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlzdHJ1Y3QgaXRzX2NvbCAqY29sOworCQl9IGNt
ZF9kZXNjX3N5bmM7CisKKwkJc3RydWN0IHsKKwkJCXN0cnVjdCBpdHNfY29sICpjb2w7CisJCQl1
aW50OF90IHZhbGlkOworCQl9IGNtZF9kZXNjX21hcGM7CisKKwkJc3RydWN0IHsKKwkJCXN0cnVj
dCBpdHNfZGV2ICppdHNfZGV2OworCQkJdWludDMyX3QgcGlkOworCQkJdWludDMyX3QgaWQ7CisJ
CX0gY21kX2Rlc2NfbWFwdmk7CisKKwkJc3RydWN0IHsKKwkJCXN0cnVjdCBpdHNfZGV2ICppdHNf
ZGV2OworCQkJdWludDMyX3QgbHBpbnVtOworCQl9IGNtZF9kZXNjX21hcGk7CisKKwkJc3RydWN0
IHsKKwkJCXN0cnVjdCBpdHNfZGV2ICppdHNfZGV2OworCQkJdWludDhfdCB2YWxpZDsKKwkJfSBj
bWRfZGVzY19tYXBkOworCisJCXN0cnVjdCB7CisJCQlzdHJ1Y3QgaXRzX2RldiAqaXRzX2RldjsK
KwkJCXVpbnQzMl90IGxwaW51bTsKKwkJfSBjbWRfZGVzY19pbnY7CisKKwkJc3RydWN0IHsKKwkJ
CXN0cnVjdCBpdHNfY29sICpjb2w7CisJCX0gY21kX2Rlc2NfaW52YWxsOworCX07Cit9OworCisj
ZGVmaW5lCUlUU19DTURRX1NJWkUJCVBBR0VfU0laRV82NEsKKyNkZWZpbmUJSVRTX0NNRFFfTkVO
VFJJRVMJKElUU19DTURRX1NJWkUgLyBzaXplb2Yoc3RydWN0IGl0c19jbWQpKQorCisjZGVmaW5l
CUlUU19GTEFHU19DTURRX0ZMVVNICSgxVUwgPDwgMCkKKworI2RlZmluZQlJVFNfVEFSR0VUX05P
TkUJCTB4RkJBREJFRUYKKworc3RydWN0IGdpY192M19pdHNfc29mdGMgeworCWRldmljZV90CQlk
ZXY7CisJc3RydWN0IHJlc291cmNlCSoJaXRzX3JlczsKKworCXN0cnVjdCBpdHNfY21kICoJaXRz
X2NtZHFfYmFzZTsJLyogSVRTIGNvbW1hbmQgcXVldWUgYmFzZSAqLworCXN0cnVjdCBpdHNfY21k
ICoJaXRzX2NtZHFfd3JpdGU7CS8qIElUUyBjb21tYW5kIHF1ZXVlIHdyaXRlIHB0ciAqLworCXN0
cnVjdCBpdHNfcHRhYgkJaXRzX3B0YWJzW0dJVFNfQkFTRVJfTlVNXTsvKiBJVFMgcHJpdmF0ZSB0
YWJsZXMgKi8KKwlzdHJ1Y3QgaXRzX2NvbCAqCWl0c19jb2xzOwkvKiBQZXItQ1BVIGNvbGxlY3Rp
b25zICovCisKKwl1aW50NjRfdAkJaXRzX2ZsYWdzOworCisJc3RydWN0IGl0c19kZXZfbGlzdAlp
dHNfZGV2X2xpc3Q7CisKKwl1bnNpZ25lZCBsb25nICoJCWl0c19scGlfYml0bWFwOworCXVpbnQz
Ml90CQlpdHNfbHBpX21heGlkOworCisJc3RydWN0IG10eAkJaXRzX210eDsKKwlzdHJ1Y3QgbXR4
CQlpdHNfc3Bpbl9tdHg7Cit9OworCitleHRlcm4gZGV2Y2xhc3NfdCBnaWNfdjNfaXRzX2RldmNs
YXNzOworCitpbnQgZ2ljX3YzX2l0c19kZXRhY2goZGV2aWNlX3QpOworCitpbnQgZ2ljX3YzX2l0
c19hbGxvY19tc2l4KGRldmljZV90LCBkZXZpY2VfdCwgaW50ICopOworaW50IGdpY192M19pdHNf
YWxsb2NfbXNpKGRldmljZV90LCBkZXZpY2VfdCwgaW50LCBpbnQgKik7CitpbnQgZ2ljX3YzX2l0
c19tYXBfbXNpeChkZXZpY2VfdCwgZGV2aWNlX3QsIGludCwgdWludDY0X3QgKiwgdWludDMyX3Qg
Kik7CisKK3ZvaWQgbHBpX3VubWFza19pcnEoZGV2aWNlX3QsIHVpbnQzMl90KTsKK3ZvaWQgbHBp
X21hc2tfaXJxKGRldmljZV90LCB1aW50MzJfdCk7CisvKgogICogR0lDIERpc3RyaWJ1dG9yIGFj
Y2Vzc29ycy4KICAqIE5vdGljZSB0aGF0IG9ubHkgR0lDIHNvZmMgY2FuIGJlIHBhc3NlZC4KICAq
LwpAQCAtMTAzLDQgKzI3NywyOCBAQAogCSAgICByZWcsIHZhbCk7CQkJCVwKIH0pCiAKKyNkZWZp
bmUJUENJX0RFVklEKHBjaV9kZXYpCQkJCVwKKyh7CQkJCQkJCVwKKwkoKChwY2lfZ2V0X2RvbWFp
bihwY2lfZGV2KSA+PiAyKSA8PCAxOSkgfAlcCisJICgocGNpX2dldF9kb21haW4ocGNpX2Rldikg
JSA0KSA8PCAxNikgfAlcCisJIChwY2lfZ2V0X2J1cyhwY2lfZGV2KSA8PCA4KSB8CQkJXAorCSAo
cGNpX2dldF9zbG90KHBjaV9kZXYpIDw8IDMpIHwJCQlcCisJIChwY2lfZ2V0X2Z1bmN0aW9uKHBj
aV9kZXYpIDw8IDApKTsJCVwKK30pCisKKy8qCisgKiBSZXF1ZXN0IG51bWJlciBvZiBtYXhpbXVt
IE1TSS1YIHZlY3RvcnMgZm9yIHRoaXMgZGV2aWNlLgorICogRGV2aWNlIGNhbiBhc2sgZm9yIGxl
c3MgdmVjdG9ycyB0aGFuIG1heGltdW0gc3VwcG9ydGVkIGJ1dCBub3QgbW9yZS4KKyAqLworI2Rl
ZmluZQlQQ0lfTVNJWF9OVU0ocGNpX2RldikJCQlcCisoewkJCQkJCVwKKwlzdHJ1Y3QgcGNpX2Rl
dmluZm8gKmRpbmZvOwkJXAorCXBjaWNmZ3JlZ3MgKmNmZzsJCQlcCisJCQkJCQlcCisJZGluZm8g
PSBkZXZpY2VfZ2V0X2l2YXJzKHBjaV9kZXYpOwlcCisJY2ZnID0gJmRpbmZvLT5jZmc7CQkJXAor
CQkJCQkJXAorCWNmZy0+bXNpeC5tc2l4X21zZ251bTsJCQlcCit9KQorCiAjZW5kaWYgLyogX0dJ
Q19WM19WQVJfSF8gKi8KZGlmZiAtLWdpdCBhL3N5cy9hcm02NC9hcm02NC9naWNfdjNfcmVnLmgg
Yi9zeXMvYXJtNjQvYXJtNjQvZ2ljX3YzX3JlZy5oCi0tLSBhL3N5cy9hcm02NC9hcm02NC9naWNf
djNfcmVnLmgKKysrIGIvc3lzL2FybTY0L2FybTY0L2dpY192M19yZWcuaApAQCAtMTAxLDE3ICsx
MDEsMTAwIEBACiAjZGVmaW5lCUdJQ1JfUElEUjJfQVJDSF9HSUN2NAkoMHg0MCkKIAogLyogUmVk
aXN0cmlidXRvciByZWdpc3RlcnMgKi8KKyNkZWZpbmUJR0lDUl9DVExSCQlHSUNEX0NUTFIKKyNk
ZWZpbmUJCUdJQ1JfQ1RMUl9MUElfRU5BQkxFCSgxIDw8IDApCisKICNkZWZpbmUJR0lDUl9QSURS
MgkJR0lDRF9QSURSMgogCiAjZGVmaW5lCUdJQ1JfVFlQRVIJCSgweDAwMDgpCisjZGVmaW5lCUdJ
Q1JfVFlQRVJfUExQSVMJKDEgPDwgMCkKICNkZWZpbmUJR0lDUl9UWVBFUl9WTFBJUwkoMSA8PCAx
KQogI2RlZmluZQlHSUNSX1RZUEVSX0xBU1QJCSgxIDw8IDQpCisjZGVmaW5lCUdJQ1JfVFlQRVJf
Q1BVTlVNX1NISUZUCSg4KQorI2RlZmluZQlHSUNSX1RZUEVSX0NQVU5VTV9NQVNLCSgweEZGRlVM
IDw8IEdJQ1JfVFlQRVJfQ1BVTlVNX1NISUZUKQorI2RlZmluZQlHSUNSX1RZUEVSX0NQVU5VTSh4
KQlcCisJICAgICgoKHgpICYgR0lDUl9UWVBFUl9DUFVOVU1fTUFTSykgPj4gR0lDUl9UWVBFUl9D
UFVOVU1fU0hJRlQpCiAjZGVmaW5lCUdJQ1JfVFlQRVJfQUZGX1NISUZUCSgzMikKIAogI2RlZmlu
ZQlHSUNSX1dBS0VSCQkoMHgwMDE0KQogI2RlZmluZQlHSUNSX1dBS0VSX1BTCQkoMSA8PCAxKSAv
KiBQcm9jZXNzb3Igc2xlZXAgKi8KICNkZWZpbmUJR0lDUl9XQUtFUl9DQQkJKDEgPDwgMikgLyog
Q2hpbGRyZW4gYXNsZWVwICovCiAKKyNkZWZpbmUJR0lDUl9QUk9QQkFTRVIJCSgweDAwNzApCisj
ZGVmaW5lCQlHSUNSX1BST1BCQVNFUl9JREJJVFNfTUFTSwkweDFGVUwKKy8qCisgKiBDYWNoZWFi
aWxpdHkKKyAqIDB4MCAtIERldmljZS1uR25SbkUKKyAqIDB4MSAtIE5vcm1hbCBJbm5lciBOb24t
Y2FjaGVhYmxlCisgKiAweDIgLSBOb3JtYWwgSW5uZXIgUmVhZC1hbGxvY2F0ZSwgV3JpdGUtdGhy
b3VnaAorICogMHgzIC0gTm9ybWFsIElubmVyIFJlYWQtYWxsb2NhdGUsIFdyaXRlLWJhY2sKKyAq
IDB4NCAtIE5vcm1hbCBJbm5lciBXcml0ZS1hbGxvY2F0ZSwgV3JpdGUtdGhyb3VnaAorICogMHg1
IC0gTm9ybWFsIElubmVyIFdyaXRlLWFsbG9jYXRlLCBXcml0ZS1iYWNrCisgKiAweDYgLSBOb3Jt
YWwgSW5uZXIgUmVhZC1hbGxvY2F0ZSwgV3JpdGUtYWxsb2NhdGUsIFdyaXRlLXRocm91Z2gKKyAq
IDB4NyAtIE5vcm1hbCBJbm5lciBSZWFkLWFsbG9jYXRlLCBXcml0ZS1hbGxvY2F0ZSwgV3JpdGUt
YmFjaworICovCisjZGVmaW5lCQlHSUNSX1BST1BCQVNFUl9DQUNIRV9TSElGVAk3CisjZGVmaW5l
CQlHSUNSX1BST1BCQVNFUl9DQUNIRV9EbkduUm5FCTB4MFVMCisjZGVmaW5lCQlHSUNSX1BST1BC
QVNFUl9DQUNIRV9OSU4JMHgxVUwKKyNkZWZpbmUJCUdJQ1JfUFJPUEJBU0VSX0NBQ0hFX05JUkFX
VAkweDJVTAorI2RlZmluZQkJR0lDUl9QUk9QQkFTRVJfQ0FDSEVfTklSQVdCCTB4M1VMCisjZGVm
aW5lCQlHSUNSX1BST1BCQVNFUl9DQUNIRV9OSVdBV1QJMHg0VUwKKyNkZWZpbmUJCUdJQ1JfUFJP
UEJBU0VSX0NBQ0hFX05JV0FXQgkweDVVTAorI2RlZmluZQkJR0lDUl9QUk9QQkFTRVJfQ0FDSEVf
TklSQVdBV1QJMHg2VUwKKyNkZWZpbmUJCUdJQ1JfUFJPUEJBU0VSX0NBQ0hFX05JUkFXQVdCCTB4
N1VMCisKKy8qCisgKiBTaGFyZWFiaWxpdHkKKyAqIDB4MCAtIE5vbi1zaGFyZWFibGUKKyAqIDB4
MSAtIElubmVyLXNoYXJlYWJsZQorICogMHgyIC0gT3V0ZXItc2hhcmVhYmxlCisgKiAweDMgLSBS
ZXNlcnZlZC4gVGhyZWF0ZWQgYXMgMHgwCisgKi8KKyNkZWZpbmUJCUdJQ1JfUFJPUEJBU0VSX1NI
QVJFX1NISUZUCTEwCisjZGVmaW5lCQlHSUNSX1BST1BCQVNFUl9TSEFSRV9OUwkJMHgwVUwKKyNk
ZWZpbmUJCUdJQ1JfUFJPUEJBU0VSX1NIQVJFX0lTCQkweDFVTAorI2RlZmluZQkJR0lDUl9QUk9Q
QkFTRVJfU0hBUkVfT1MJCTB4MlVMCisjZGVmaW5lCQlHSUNSX1BST1BCQVNFUl9TSEFSRV9SRVMJ
MHgzVUwKKyNkZWZpbmUJCUdJQ1JfUFJPUEJBU0VSX1NIQVJFX01BU0sJXAorCQkgICAgKDB4M1VM
IDw8IEdJQ1JfUFJPUEJBU0VSX1NIQVJFX1NISUZUKQorCisjZGVmaW5lCUdJQ1JfUEVOREJBU0VS
CQkoMHgwMDc4KQorLyoKKyAqIENhY2hlYWJpbGl0eQorICogMHgwIC0gRGV2aWNlLW5HblJuRQor
ICogMHgxIC0gTm9ybWFsIElubmVyIE5vbi1jYWNoZWFibGUKKyAqIDB4MiAtIE5vcm1hbCBJbm5l
ciBSZWFkLWFsbG9jYXRlLCBXcml0ZS10aHJvdWdoCisgKiAweDMgLSBOb3JtYWwgSW5uZXIgUmVh
ZC1hbGxvY2F0ZSwgV3JpdGUtYmFjaworICogMHg0IC0gTm9ybWFsIElubmVyIFdyaXRlLWFsbG9j
YXRlLCBXcml0ZS10aHJvdWdoCisgKiAweDUgLSBOb3JtYWwgSW5uZXIgV3JpdGUtYWxsb2NhdGUs
IFdyaXRlLWJhY2sKKyAqIDB4NiAtIE5vcm1hbCBJbm5lciBSZWFkLWFsbG9jYXRlLCBXcml0ZS1h
bGxvY2F0ZSwgV3JpdGUtdGhyb3VnaAorICogMHg3IC0gTm9ybWFsIElubmVyIFJlYWQtYWxsb2Nh
dGUsIFdyaXRlLWFsbG9jYXRlLCBXcml0ZS1iYWNrCisgKi8KKyNkZWZpbmUJCUdJQ1JfUEVOREJB
U0VSX0NBQ0hFX1NISUZUCTcKKyNkZWZpbmUJCUdJQ1JfUEVOREJBU0VSX0NBQ0hFX0RuR25SbkUJ
MHgwVUwKKyNkZWZpbmUJCUdJQ1JfUEVOREJBU0VSX0NBQ0hFX05JTgkweDFVTAorI2RlZmluZQkJ
R0lDUl9QRU5EQkFTRVJfQ0FDSEVfTklSQVdUCTB4MlVMCisjZGVmaW5lCQlHSUNSX1BFTkRCQVNF
Ul9DQUNIRV9OSVJBV0IJMHgzVUwKKyNkZWZpbmUJCUdJQ1JfUEVOREJBU0VSX0NBQ0hFX05JV0FX
VAkweDRVTAorI2RlZmluZQkJR0lDUl9QRU5EQkFTRVJfQ0FDSEVfTklXQVdCCTB4NVVMCisjZGVm
aW5lCQlHSUNSX1BFTkRCQVNFUl9DQUNIRV9OSVJBV0FXVAkweDZVTAorI2RlZmluZQkJR0lDUl9Q
RU5EQkFTRVJfQ0FDSEVfTklSQVdBV0IJMHg3VUwKKworLyoKKyAqIFNoYXJlYWJpbGl0eQorICog
MHgwIC0gTm9uLXNoYXJlYWJsZQorICogMHgxIC0gSW5uZXItc2hhcmVhYmxlCisgKiAweDIgLSBP
dXRlci1zaGFyZWFibGUKKyAqIDB4MyAtIFJlc2VydmVkLiBUaHJlYXRlZCBhcyAweDAKKyAqLwor
I2RlZmluZQkJR0lDUl9QRU5EQkFTRVJfU0hBUkVfU0hJRlQJMTAKKyNkZWZpbmUJCUdJQ1JfUEVO
REJBU0VSX1NIQVJFX05TCQkweDBVTAorI2RlZmluZQkJR0lDUl9QRU5EQkFTRVJfU0hBUkVfSVMJ
CTB4MVVMCisjZGVmaW5lCQlHSUNSX1BFTkRCQVNFUl9TSEFSRV9PUwkJMHgyVUwKKyNkZWZpbmUJ
CUdJQ1JfUEVOREJBU0VSX1NIQVJFX1JFUwkweDNVTAorI2RlZmluZQkJR0lDUl9QRU5EQkFTRVJf
U0hBUkVfTUFTSwlcCisJCSAgICAoMHgzVUwgPDwgR0lDUl9QRU5EQkFTRVJfU0hBUkVfU0hJRlQp
CisKIC8qIFJlLWRpc3RyaWJ1dG9yIHJlZ2lzdGVycyBmb3IgU0dJcyBhbmQgUFBJcyAqLwogI2Rl
ZmluZQlHSUNSX1JEX0JBU0VfU0laRQlQQUdFX1NJWkVfNjRLCiAjZGVmaW5lCUdJQ1JfU0dJX0JB
U0VfU0laRQlQQUdFX1NJWkVfNjRLCkBAIC0xMjUsNiArMjA4LDE1MSBAQAogCiAjZGVmaW5lCQlH
SUNSX0lfUEVSX0lQUklPUklUWW4JCShHSUNEX0lfUEVSX0lQUklPUklUWW4pCiAKKy8qIElUUyBy
ZWdpc3RlcnMgKi8KKyNkZWZpbmUJR0lUU19QSURSMgkJR0lDUl9QSURSMgorI2RlZmluZQlHSVRT
X1BJRFIyX0FSQ0hfTUFTSwlHSUNSX1BJRFIyX0FSQ0hfTUFTSworI2RlZmluZQlHSVRTX1BJRFIy
X0FSQ0hfR0lDdjMJR0lDUl9QSURSMl9BUkNIX0dJQ3YzCisjZGVmaW5lCUdJVFNfUElEUjJfQVJD
SF9HSUN2NAlHSUNSX1BJRFIyX0FSQ0hfR0lDdjQKKworI2RlZmluZQlHSVRTX0NUTFIJCSgweDAw
MDApCisjZGVmaW5lCQlHSVRTX0NUTFJfRU4JKDEgPDwgMCkKKworI2RlZmluZQlHSVRTX0NCQVNF
UgkJKDB4MDA4MCkKKyNkZWZpbmUJCUdJVFNfQ0JBU0VSX1ZBTElECSgxVUwgPDwgNjMpCisvKgor
ICogQ2FjaGVhYmlsaXR5CisgKiAweDAgLSBEZXZpY2UtbkduUm5FCisgKiAweDEgLSBOb3JtYWwg
SW5uZXIgTm9uLWNhY2hlYWJsZQorICogMHgyIC0gTm9ybWFsIElubmVyIFJlYWQtYWxsb2NhdGUs
IFdyaXRlLXRocm91Z2gKKyAqIDB4MyAtIE5vcm1hbCBJbm5lciBSZWFkLWFsbG9jYXRlLCBXcml0
ZS1iYWNrCisgKiAweDQgLSBOb3JtYWwgSW5uZXIgV3JpdGUtYWxsb2NhdGUsIFdyaXRlLXRocm91
Z2gKKyAqIDB4NSAtIE5vcm1hbCBJbm5lciBXcml0ZS1hbGxvY2F0ZSwgV3JpdGUtYmFjaworICog
MHg2IC0gTm9ybWFsIElubmVyIFJlYWQtYWxsb2NhdGUsIFdyaXRlLWFsbG9jYXRlLCBXcml0ZS10
aHJvdWdoCisgKiAweDcgLSBOb3JtYWwgSW5uZXIgUmVhZC1hbGxvY2F0ZSwgV3JpdGUtYWxsb2Nh
dGUsIFdyaXRlLWJhY2sKKyAqLworI2RlZmluZQkJR0lUU19DQkFTRVJfQ0FDSEVfU0hJRlQJCTU5
CisjZGVmaW5lCQlHSVRTX0NCQVNFUl9DQUNIRV9EbkduUm5FCTB4MFVMCisjZGVmaW5lCQlHSVRT
X0NCQVNFUl9DQUNIRV9OSU4JCTB4MVVMCisjZGVmaW5lCQlHSVRTX0NCQVNFUl9DQUNIRV9OSVJB
V1QJMHgyVUwKKyNkZWZpbmUJCUdJVFNfQ0JBU0VSX0NBQ0hFX05JUkFXQgkweDNVTAorI2RlZmlu
ZQkJR0lUU19DQkFTRVJfQ0FDSEVfTklXQVdUCTB4NFVMCisjZGVmaW5lCQlHSVRTX0NCQVNFUl9D
QUNIRV9OSVdBV0IJMHg1VUwKKyNkZWZpbmUJCUdJVFNfQ0JBU0VSX0NBQ0hFX05JUkFXQVdUCTB4
NlVMCisjZGVmaW5lCQlHSVRTX0NCQVNFUl9DQUNIRV9OSVJBV0FXQgkweDdVTAorI2RlZmluZQkJ
R0lUU19DQkFTRVJfQ0FDSEVfTUFTSwkoMHg3VUwgPDwgR0lUU19DQkFTRVJfVFlQRV9TSElGVCkK
Ky8qCisgKiBTaGFyZWFiaWxpdHkKKyAqIDB4MCAtIE5vbi1zaGFyZWFibGUKKyAqIDB4MSAtIElu
bmVyLXNoYXJlYWJsZQorICogMHgyIC0gT3V0ZXItc2hhcmVhYmxlCisgKiAweDMgLSBSZXNlcnZl
ZC4gVGhyZWF0ZWQgYXMgMHgwCisgKi8KKyNkZWZpbmUJCUdJVFNfQ0JBU0VSX1NIQVJFX1NISUZU
CQkxMAorI2RlZmluZQkJR0lUU19DQkFTRVJfU0hBUkVfTlMJCTB4MFVMCisjZGVmaW5lCQlHSVRT
X0NCQVNFUl9TSEFSRV9JUwkJMHgxVUwKKyNkZWZpbmUJCUdJVFNfQ0JBU0VSX1NIQVJFX09TCQkw
eDJVTAorI2RlZmluZQkJR0lUU19DQkFTRVJfU0hBUkVfUkVTCQkweDNVTAorI2RlZmluZQkJR0lU
U19DQkFTRVJfU0hBUkVfTUFTSwkJXAorCQkgICAgKDB4M1VMIDw8IEdJVFNfQ0JBU0VSX1NIQVJF
X1NISUZUKQorCisjZGVmaW5lCQlHSVRTX0NCQVNFUl9QQV9TSElGVAkxMgorI2RlZmluZQkJR0lU
U19DQkFTRVJfUEFfTUFTSwkoMHhGRkZGRkZGRkZVTCA8PCBHSVRTX0NCQVNFUl9QQV9TSElGVCkK
KworI2RlZmluZQlHSVRTX0NXUklURVIJCSgweDAwODgpCisjZGVmaW5lCUdJVFNfQ1JFQURSCQko
MHgwMDkwKQorCisjZGVmaW5lCUdJVFNfQkFTRVJfQkFTRQkJKDB4MDEwMCkKKyNkZWZpbmUJR0lU
U19CQVNFUih4KQkJKEdJVFNfQkFTRVJfQkFTRSArICh4KSAqIDgpCisKKyNkZWZpbmUJCUdJVFNf
QkFTRVJfVkFMSUQJKDFVTCA8PCA2MykKKworI2RlZmluZQkJR0lUU19CQVNFUl9UWVBFX1NISUZU
CTU2CisjZGVmaW5lCQlHSVRTX0JBU0VSX1RZUEUoeCkJXAorCQkgICAgKCgoeCkgJiBHSVRTX0JB
U0VSX1RZUEVfTUFTSykgPj4gR0lUU19CQVNFUl9UWVBFX1NISUZUKQorI2RlZmluZQkJR0lUU19C
QVNFUl9UWVBFX1VOSU1QTAkweDBVTAkvKiBVbmltcGxlbWVudGVkICovCisjZGVmaW5lCQlHSVRT
X0JBU0VSX1RZUEVfREVWCTB4MVVMCS8qIERldmljZXMgKi8KKyNkZWZpbmUJCUdJVFNfQkFTRVJf
VFlQRV9WUAkweDJVTAkvKiBWaXJ0dWFsIFByb2Nlc3NvcnMgKi8KKyNkZWZpbmUJCUdJVFNfQkFT
RVJfVFlQRV9QUAkweDNVTAkvKiBQaHlzaWNhbCBQcm9jZXNzb3JzICovCisjZGVmaW5lCQlHSVRT
X0JBU0VSX1RZUEVfSUMJMHg0VUwJLyogSW50ZXJydXB0IENvbGxlY3Rpb25zICovCisjZGVmaW5l
CQlHSVRTX0JBU0VSX1RZUEVfUkVTNQkweDVVTAkvKiBSZXNlcnZlZCAqLworI2RlZmluZQkJR0lU
U19CQVNFUl9UWVBFX1JFUzYJMHg2VUwJLyogUmVzZXJ2ZWQgKi8KKyNkZWZpbmUJCUdJVFNfQkFT
RVJfVFlQRV9SRVM3CTB4N1VMCS8qIFJlc2VydmVkICovCisjZGVmaW5lCQlHSVRTX0JBU0VSX1RZ
UEVfTUFTSwkoMHg3VUwgPDwgR0lUU19CQVNFUl9UWVBFX1NISUZUKQorLyoKKyAqIENhY2hlYWJp
bGl0eQorICogMHgwIC0gTm9uLWNhY2hlYWJsZSwgbm9uLWJ1ZmZlcmFibGUKKyAqIDB4MSAtIE5v
bi1jYWNoZWFibGUKKyAqIDB4MiAtIFJlYWQtYWxsb2NhdGUsIFdyaXRlLXRocm91Z2gKKyAqIDB4
MyAtIFJlYWQtYWxsb2NhdGUsIFdyaXRlLWJhY2sKKyAqIDB4NCAtIFdyaXRlLWFsbG9jYXRlLCBX
cml0ZS10aHJvdWdoCisgKiAweDUgLSBXcml0ZS1hbGxvY2F0ZSwgV3JpdGUtYmFjaworICogMHg2
IC0gUmVhZC1hbGxvY2F0ZSwgV3JpdGUtYWxsb2NhdGUsIFdyaXRlLXRocm91Z2gKKyAqIDB4NyAt
IFJlYWQtYWxsb2NhdGUsIFdyaXRlLWFsbG9jYXRlLCBXcml0ZS1iYWNrCisgKi8KKyNkZWZpbmUJ
CUdJVFNfQkFTRVJfQ0FDSEVfU0hJRlQJNTkKKyNkZWZpbmUJCUdJVFNfQkFTRVJfQ0FDSEVfTkNO
QgkweDBVTAorI2RlZmluZQkJR0lUU19CQVNFUl9DQUNIRV9OQwkweDFVTAorI2RlZmluZQkJR0lU
U19CQVNFUl9DQUNIRV9SQVdUCTB4MlVMCisjZGVmaW5lCQlHSVRTX0JBU0VSX0NBQ0hFX1JBV0IJ
MHgzVUwKKyNkZWZpbmUJCUdJVFNfQkFTRVJfQ0FDSEVfV0FXVAkweDRVTAorI2RlZmluZQkJR0lU
U19CQVNFUl9DQUNIRV9XQVdCCTB4NVVMCisjZGVmaW5lCQlHSVRTX0JBU0VSX0NBQ0hFX1JBV0FX
VAkweDZVTAorI2RlZmluZQkJR0lUU19CQVNFUl9DQUNIRV9SQVdBV0IJMHg3VUwKKyNkZWZpbmUJ
CUdJVFNfQkFTRVJfQ0FDSEVfTUFTSwkoMHg3VUwgPDwgR0lUU19CQVNFUl9DQUNIRV9TSElGVCkK
KworI2RlZmluZQkJR0lUU19CQVNFUl9FU0laRV9TSElGVAk0OAorI2RlZmluZQkJR0lUU19CQVNF
Ul9FU0laRV9NQVNLCSgweDFGVUwgPDwgR0lUU19CQVNFUl9FU0laRV9TSElGVCkKKyNkZWZpbmUJ
CUdJVFNfQkFTRVJfRVNJWkUoeCkJXAorCQkgICAgKCgoKHgpICYgR0lUU19CQVNFUl9FU0laRV9N
QVNLKSA+PiBHSVRTX0JBU0VSX0VTSVpFX1NISUZUKSArIDEpCisKKyNkZWZpbmUJCUdJVFNfQkFT
RVJfUEFfU0hJRlQJMTIKKyNkZWZpbmUJCUdJVFNfQkFTRVJfUEFfTUFTSwkoMHhGRkZGRkZGRkZV
TCA8PCBHSVRTX0JBU0VSX1BBX1NISUZUKQorCisvKgorICogU2hhcmVhYmlsaXR5CisgKiAweDAg
LSBOb24tc2hhcmVhYmxlCisgKiAweDEgLSBJbm5lci1zaGFyZWFibGUKKyAqIDB4MiAtIE91dGVy
LXNoYXJlYWJsZQorICogMHgzIC0gUmVzZXJ2ZWQuIFRocmVhdGVkIGFzIDB4MAorICovCisjZGVm
aW5lCQlHSVRTX0JBU0VSX1NIQVJFX1NISUZUCTEwCisjZGVmaW5lCQlHSVRTX0JBU0VSX1NIQVJF
X05TCTB4MFVMCisjZGVmaW5lCQlHSVRTX0JBU0VSX1NIQVJFX0lTCTB4MVVMCisjZGVmaW5lCQlH
SVRTX0JBU0VSX1NIQVJFX09TCTB4MlVMCisjZGVmaW5lCQlHSVRTX0JBU0VSX1NIQVJFX1JFUwkw
eDNVTAorI2RlZmluZQkJR0lUU19CQVNFUl9TSEFSRV9NQVNLCSgweDNVTCA8PCBHSVRTX0JBU0VS
X1NIQVJFX1NISUZUKQorCisjZGVmaW5lCQlHSVRTX0JBU0VSX1BTWl9TSElGVAk4CisjZGVmaW5l
CQlHSVRTX0JBU0VSX1BTWl80SwkweDBVTAorI2RlZmluZQkJR0lUU19CQVNFUl9QU1pfMTZLCTB4
MVVMCisjZGVmaW5lCQlHSVRTX0JBU0VSX1BTWl82NEsJMHgyVUwKKyNkZWZpbmUJCUdJVFNfQkFT
RVJfUFNaX01BU0sJKDB4M1VMIDw8IEdJVFNfQkFTRVJfUFNaX1NISUZUKQorCisjZGVmaW5lCQlH
SVRTX0JBU0VSX1NJWkVfTUFTSwkweEZGVUwKKworI2RlZmluZQkJR0lUU19CQVNFUl9OVU0JCTgK
KworI2RlZmluZQlHSVRTX1RZUEVSCQkoMHgwMDA4KQorI2RlZmluZQkJR0lUU19UWVBFUl9QVEEJ
CSgxVUwgPDwgMTkpCisjZGVmaW5lCQlHSVRTX1RZUEVSX0RFVkJfU0hJRlQJMTMKKyNkZWZpbmUJ
CUdJVFNfVFlQRVJfREVWQl9NQVNLCSgweDFGVUwgPDwgR0lUU19UWVBFUl9ERVZCX1NISUZUKQor
LyogTnVtYmVyIG9mIGRldmljZSBpZGVudGlmaWVycyBpbXBsZW1lbnRlZCAqLworI2RlZmluZQkJ
R0lUU19UWVBFUl9ERVZCKHgpCVwKKwkJICAgICgoKCh4KSAmIEdJVFNfVFlQRVJfREVWQl9NQVNL
KSA+PiBHSVRTX1RZUEVSX0RFVkJfU0hJRlQpICsgMSkKKyNkZWZpbmUJCUdJVFNfVFlQRVJfSVRU
RVNfU0hJRlQJNAorI2RlZmluZQkJR0lUU19UWVBFUl9JVFRFU19NQVNLCSgweEZVTCA8PCBHSVRT
X1RZUEVSX0lUVEVTX1NISUZUKQorLyogTnVtYmVyIG9mIGJ5dGVzIHBlciBJVFQgRW50cnkgKi8K
KyNkZWZpbmUJCUdJVFNfVFlQRVJfSVRURVMoeCkJXAorCQkgICAgKCgoKHgpICYgR0lUU19UWVBF
Ul9JVFRFU19NQVNLKSA+PiBHSVRTX1RZUEVSX0lUVEVTX1NISUZUKSArIDEpCisKKyNkZWZpbmUJ
R0lUU19UUkFOU0xBVEVSCQkoMHgxMDA0MCkKKy8qCisgKiBMUEkgcmVsYXRlZAorICovCisjZGVm
aW5lCQlMUElfQ09ORl9QUklPX01BU0sJKDB4RkMpCisjZGVmaW5lCQlMUElfQ09ORl9HUk9VUDEJ
CSgxIDw8IDEpCisjZGVmaW5lCQlMUElfQ09ORl9FTkFCTEUJCSgxIDw8IDApCisKIC8qCiAgKiBD
UFUgaW50ZXJmYWNlCiAgKi8KZGlmZiAtLWdpdCBhL3N5cy9hcm02NC9hcm02NC9naWNfdjNfaXRz
LmMgYi9zeXMvYXJtNjQvYXJtNjQvZ2ljX3YzX2l0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0t
LSAvZGV2L251bGwKKysrIGIvc3lzL2FybTY0L2FybTY0L2dpY192M19pdHMuYwpAQCAtMCwwICsx
LDE0NDggQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBGcmVlQlNEIEZvdW5kYXRp
b24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSB3YXMgZGV2
ZWxvcGVkIGJ5IFNlbWloYWxmIHVuZGVyCisgKiB0aGUgc3BvbnNvcnNoaXAgb2YgdGhlIEZyZWVC
U0QgRm91bmRhdGlvbi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJl
ZUJTRCQiKTsKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zeXN0bS5o
PgorI2luY2x1ZGUgPHN5cy9iaXRzZXQuaD4KKyNpbmNsdWRlIDxzeXMvYml0c3RyaW5nLmg+Cisj
aW5jbHVkZSA8c3lzL2J1cy5oPgorI2luY2x1ZGUgPHN5cy9lbmRpYW4uaD4KKyNpbmNsdWRlIDxz
eXMva2VybmVsLmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgorI2luY2x1ZGUgPHN5cy9ybWFu
Lmg+CisjaW5jbHVkZSA8c3lzL3BjaWlvLmg+CisjaW5jbHVkZSA8c3lzL3BjcHUuaD4KKyNpbmNs
dWRlIDxzeXMvbG9jay5oPgorI2luY2x1ZGUgPHN5cy9tdXRleC5oPgorCisjaW5jbHVkZSA8ZGV2
L3BjaS9wY2l2YXIuaD4KKworI2luY2x1ZGUgPHZtL3ZtLmg+CisjaW5jbHVkZSA8dm0vcG1hcC5o
PgorCisjaW5jbHVkZSA8bWFjaGluZS9idXMuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2NwdS5oPgor
I2luY2x1ZGUgPG1hY2hpbmUvY3B1ZnVuYy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvaW50ci5oPgor
CisjaW5jbHVkZSAiZ2ljX3YzX3JlZy5oIgorI2luY2x1ZGUgImdpY192M192YXIuaCIKKworI2lu
Y2x1ZGUgInBpY19pZi5oIgorCisvKiBEZXZpY2UgYW5kIFBJQyBtZXRob2RzICovCitzdGF0aWMg
aW50IGdpY192M19pdHNfYXR0YWNoKGRldmljZV90KTsKKworc3RhdGljIGRldmljZV9tZXRob2Rf
dCBnaWNfdjNfaXRzX21ldGhvZHNbXSA9IHsKKwkvKiBEZXZpY2UgaW50ZXJmYWNlICovCisJREVW
TUVUSE9EKGRldmljZV9hdHRhY2gsCWdpY192M19pdHNfYXR0YWNoKSwKKwkvKgorCSAqIFBJQyBp
bnRlcmZhY2UKKwkgKi8KKwkvKiBNU0ktWCAqLworCURFVk1FVEhPRChwaWNfYWxsb2NfbXNpeCwJ
Z2ljX3YzX2l0c19hbGxvY19tc2l4KSwKKwlERVZNRVRIT0QocGljX21hcF9tc2l4LAkJZ2ljX3Yz
X2l0c19tYXBfbXNpeCksCisJLyogTVNJICovCisJREVWTUVUSE9EKHBpY19hbGxvY19tc2ksCWdp
Y192M19pdHNfYWxsb2NfbXNpKSwKKwlERVZNRVRIT0QocGljX21hcF9tc2ksCQlnaWNfdjNfaXRz
X21hcF9tc2l4KSwKKworCS8qIEVuZCAqLworCURFVk1FVEhPRF9FTkQKK307CisKK0RFRklORV9D
TEFTU18wKGdpY192M19pdHMsIGdpY192M19pdHNfZHJpdmVyLCBnaWNfdjNfaXRzX21ldGhvZHMs
CisgICAgc2l6ZW9mKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjKSk7CisKK01BTExPQ19ERUZJTkUo
TV9HSUNfVjNfSVRTLCAiR0lDdjMgSVRTIiwgR0lDX1YzX0lUU19ERVZTVFIpOworCitzdGF0aWMg
aW50IGl0c19hbGxvY190YWJsZXMoc3RydWN0IGdpY192M19pdHNfc29mdGMgKik7CitzdGF0aWMg
dm9pZCBpdHNfZnJlZV90YWJsZXMoc3RydWN0IGdpY192M19pdHNfc29mdGMgKik7CitzdGF0aWMg
dm9pZCBpdHNfaW5pdF9jb21tYW5kcShzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqKTsKK3N0YXRp
YyBpbnQgaXRzX2luaXRfY3B1KHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICopOworc3RhdGljIHZv
aWQgaXRzX2luaXRfY3B1X2NvbGxlY3Rpb24oc3RydWN0IGdpY192M19pdHNfc29mdGMgKik7CisK
K3N0YXRpYyBpbnQgaXRzX2NtZF9zZW5kKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICosIHN0cnVj
dCBpdHNfY21kX2Rlc2MgKik7CisKK3N0YXRpYyB2b2lkIGl0c19jbWRfbWFwYyhzdHJ1Y3QgZ2lj
X3YzX2l0c19zb2Z0YyAqLCBzdHJ1Y3QgaXRzX2NvbCAqLCB1aW50OF90KTsKK3N0YXRpYyB2b2lk
IGl0c19jbWRfbWFwdmkoc3RydWN0IGdpY192M19pdHNfc29mdGMgKiwgc3RydWN0IGl0c19kZXYg
KiwgdWludDMyX3QsCisgICAgdWludDMyX3QpOworc3RhdGljIHZvaWQgaXRzX2NtZF9tYXBpKHN0
cnVjdCBnaWNfdjNfaXRzX3NvZnRjICosIHN0cnVjdCBpdHNfZGV2ICosIHVpbnQzMl90KTsKK3N0
YXRpYyB2b2lkIGl0c19jbWRfaW52KHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICosIHN0cnVjdCBp
dHNfZGV2ICosIHVpbnQzMl90KTsKK3N0YXRpYyB2b2lkIGl0c19jbWRfaW52YWxsKHN0cnVjdCBn
aWNfdjNfaXRzX3NvZnRjICosIHN0cnVjdCBpdHNfY29sICopOworCitzdGF0aWMgdm9pZCBscGlf
aW5pdF9jb25mdGFibGUoc3RydWN0IGdpY192M19pdHNfc29mdGMgKik7CitzdGF0aWMgdm9pZCBs
cGlfYml0bWFwX2luaXQoc3RydWN0IGdpY192M19pdHNfc29mdGMgKik7CitzdGF0aWMgdm9pZCBs
cGlfaW5pdF9jcHUoc3RydWN0IGdpY192M19pdHNfc29mdGMgKik7CitzdGF0aWMgaW50IGxwaV9j
b25maWdfY3B1KHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICopOworCitjb25zdCBjaGFyICppdHNf
cHRhYl9jYWNoZVtdID0geworCVtHSVRTX0JBU0VSX0NBQ0hFX05DTkJdID0gIihOQyxOQikiLAor
CVtHSVRTX0JBU0VSX0NBQ0hFX05DXSA9ICIoTkMpIiwKKwlbR0lUU19CQVNFUl9DQUNIRV9SQVdU
XSA9ICIoUkEsV1QpIiwKKwlbR0lUU19CQVNFUl9DQUNIRV9SQVdCXSA9ICIoUkEsV0IpIiwKKwlb
R0lUU19CQVNFUl9DQUNIRV9XQVdUXSA9ICIoV0EsV1QpIiwKKwlbR0lUU19CQVNFUl9DQUNIRV9X
QVdCXSA9ICIoV0EsV0IpIiwKKwlbR0lUU19CQVNFUl9DQUNIRV9SQVdBV1RdID0gIihSQVdBLFdU
KSIsCisJW0dJVFNfQkFTRVJfQ0FDSEVfUkFXQVdCXSA9ICIoUkFXQSxXQikiLAorfTsKKworY29u
c3QgY2hhciAqaXRzX3B0YWJfc2hhcmVbXSA9IHsKKwlbR0lUU19CQVNFUl9TSEFSRV9OU10gPSAi
bm9uZSIsCisJW0dJVFNfQkFTRVJfU0hBUkVfSVNdID0gImlubmVyIiwKKwlbR0lUU19CQVNFUl9T
SEFSRV9PU10gPSAib3V0ZXIiLAorCVtHSVRTX0JBU0VSX1NIQVJFX1JFU10gPSAibm9uZSIsCit9
OworCitjb25zdCBjaGFyICppdHNfcHRhYl90eXBlW10gPSB7CisJW0dJVFNfQkFTRVJfVFlQRV9V
TklNUExdID0gIlVuaW1wbGVtZW50ZWQiLAorCVtHSVRTX0JBU0VSX1RZUEVfREVWXSA9ICJEZXZp
Y2VzIiwKKwlbR0lUU19CQVNFUl9UWVBFX1ZQXSA9ICJWaXJ0dWFsIFByb2Nlc3NvcnMiLAorCVtH
SVRTX0JBU0VSX1RZUEVfUFBdID0gIlBoeXNpY2FsIFByb2Nlc3NvcnMiLAorCVtHSVRTX0JBU0VS
X1RZUEVfSUNdID0gIkludGVycnVwdCBDb2xsZWN0aW9ucyIsCisJW0dJVFNfQkFTRVJfVFlQRV9S
RVM1XSA9ICJSZXNlcnZlZCAoNSkiLAorCVtHSVRTX0JBU0VSX1RZUEVfUkVTNl0gPSAiUmVzZXJ2
ZWQgKDYpIiwKKwlbR0lUU19CQVNFUl9UWVBFX1JFUzddID0gIlJlc2VydmVkICg3KSIsCit9Owor
CitzdGF0aWMgc3RydWN0IGdpY192M19pdHNfc29mdGMgKml0c19zYzsKKworI2RlZmluZQlnaWNf
aXRzX3JlYWQoc2MsIGxlbiwgcmVnKQkJXAorICAgIGJ1c19yZWFkXyMjbGVuKCZzYy0+aXRzX3Jl
c1swXSwgcmVnKQorCisjZGVmaW5lCWdpY19pdHNfd3JpdGUoc2MsIGxlbiwgcmVnLCB2YWwpCVwK
KyAgICBidXNfd3JpdGVfIyNsZW4oJnNjLT5pdHNfcmVzWzBdLCByZWcsIHZhbCkKKworc3RhdGlj
IGludAorZ2ljX3YzX2l0c19hdHRhY2goZGV2aWNlX3QgZGV2KQoreworCXN0cnVjdCBnaWNfdjNf
aXRzX3NvZnRjICpzYzsKKwl1aW50NjRfdCBnaXRzX3RtcDsKKwl1aW50MzJfdCBnaXRzX3BpZHIy
OworCWludCByaWQ7CisJaW50IHJldDsKKworCXNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOwor
CisJLyoKKwkgKiBJbml0aWFsaXplIHNsZWVwICYgc3BpbiBtdXRleCBmb3IgSVRTCisJICovCisJ
LyogUHJvdGVjdHMgSVRTIGRldmljZSBsaXN0IGFuZCBhc3NpZ25lZCBMUElzIGJpdG1hcHMuICov
CisJbXR4X2luaXQoJnNjLT5pdHNfbXR4LCAiSVRTIHNsZWVwIGxvY2siLCBOVUxMLCBNVFhfREVG
KTsKKwkvKiBQcm90ZWN0cyBhY2Nlc3MgdG8gSVRTIGNvbW1hbmQgY2lyY3VsYXIgYnVmZmVyLiAq
LworCW10eF9pbml0KCZzYy0+aXRzX3NwaW5fbXR4LCAiSVRTIHNwaW4gbG9jayIsIE5VTEwsIE1U
WF9TUElOKTsKKworCXJpZCA9IDA7CisJc2MtPml0c19yZXMgPSBidXNfYWxsb2NfcmVzb3VyY2Vf
YW55KGRldiwgU1lTX1JFU19NRU1PUlksICZyaWQsCisJICAgIFJGX0FDVElWRSk7CisJaWYgKHNj
LT5pdHNfcmVzID09IE5VTEwpIHsKKwkJZGV2aWNlX3ByaW50ZihkZXYsICJDb3VsZCBub3QgYWxs
b2NhdGUgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIChFTlhJTyk7CisJfQorCisJc2MtPmRldiA9IGRl
djsKKworCWdpdHNfcGlkcjIgPSBnaWNfaXRzX3JlYWQoc2MsIDQsIEdJVFNfUElEUjIpOworCXN3
aXRjaCAoZ2l0c19waWRyMiAmIEdJVFNfUElEUjJfQVJDSF9NQVNLKSB7CisJY2FzZSBHSVRTX1BJ
RFIyX0FSQ0hfR0lDdjM6IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgR0lUU19QSURSMl9BUkNI
X0dJQ3Y0OgorCQlpZiAoYm9vdHZlcmJvc2UpIHsKKwkJCWRldmljZV9wcmludGYoZGV2LCAiSVRT
IGZvdW5kLiBBcmNoaXRlY3R1cmUgcmV2LiAldVxuIiwKKwkJCSAgICAodV9pbnQpKGdpdHNfcGlk
cjIgJiBHSVRTX1BJRFIyX0FSQ0hfTUFTSykgPj4gNCk7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVs
dDoKKwkJZGV2aWNlX3ByaW50ZihkZXYsICJObyBJVFMgZm91bmQgaW4gdGhlIHN5c3RlbVxuIik7
CisJCWdpY192M19pdHNfZGV0YWNoKGRldik7CisJCXJldHVybiAoRU5PREVWKTsKKwl9CisKKwkv
KiAxLiBJbml0aWFsaXplIGNvbW1hbmRzIHF1ZXVlICovCisJaXRzX2luaXRfY29tbWFuZHEoc2Mp
OworCisJLyogMi4gUHJvdmlkZSBtZW1vcnkgZm9yIGFueSBwcml2YXRlIElUUyB0YWJsZXMgKi8K
KwlyZXQgPSBpdHNfYWxsb2NfdGFibGVzKHNjKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZ2ljX3Yz
X2l0c19kZXRhY2goZGV2KTsKKwkJcmV0dXJuIChyZXQpOworCX0KKworCS8qIDMuIEFsbG9jYXRl
IGNvbGxlY3Rpb25zLiBPbmUgcGVyLUNQVSAqLworCXNjLT5pdHNfY29scyA9IG1hbGxvYyhzaXpl
b2YoKnNjLT5pdHNfY29scykgKiBNQVhDUFUsCisJICAgIE1fR0lDX1YzX0lUUywgKE1fV0FJVE9L
IHwgTV9aRVJPKSk7CisKKwkvKiA0LiBFbmFibGUgSVRTIGluIEdJVFNfQ1RMUiAqLworCWdpdHNf
dG1wID0gZ2ljX2l0c19yZWFkKHNjLCA0LCBHSVRTX0NUTFIpOworCWdpY19pdHNfd3JpdGUoc2Ms
IDQsIEdJVFNfQ1RMUiwgZ2l0c190bXAgfCBHSVRTX0NUTFJfRU4pOworCisJLyogNS4gSW5pdGlh
bGl6ZSBMUElzIGNvbmZpZ3VyYXRpb24gdGFibGUgKi8KKwlscGlfaW5pdF9jb25mdGFibGUoc2Mp
OworCisJLyogNi4gTFBJcyBiaXRtYXAgaW5pdCAqLworCWxwaV9iaXRtYXBfaW5pdChzYyk7CisK
KwkvKiA3LiBDUFUgaW5pdCAqLworCSh2b2lkKWl0c19pbml0X2NwdShzYyk7CisKKwkvKiA4LiBJ
bml0IElUUyBkZXZpY2VzIGxpc3QgKi8KKwlUQUlMUV9JTklUKCZzYy0+aXRzX2Rldl9saXN0KTsK
KworCWFybV9yZWdpc3Rlcl9tc2lfcGljKGRldik7CisKKwkvKgorCSAqIFhYWCBBUk02NFRPRE86
IFdlIG5lZWQgdG8gaGF2ZSBJVFMgc29mdHdhcmUgY29udGV4dAorCSAqIHdoZW4gYmVpbmcgY2Fs
bGVkIGJ5IHRoZSBpbnRlcnJ1cHQgY29kZSAobWFzay91bm1hc2spLgorCSAqIFRoaXMgbWF5IGJl
IHVzZWQgb25seSB3aGVuIG9uZSBJVFMgaXMgcHJlc2VudCBpbgorCSAqIHRoZSBzeXN0ZW0gYW5k
IGV2ZW50dWFsbHkgc2hvdWxkIGJlIHJlbW92ZWQuCisJICovCisJS0FTU0VSVChpdHNfc2MgPT0g
TlVMTCwKKwkgICAgKCJUcnlpbmcgdG8gYXNzaWduIGl0c19zYyB0aGF0IGlzIGFscmVhZHkgc2V0
IikpOworCWl0c19zYyA9IHNjOworCisJcmV0dXJuICgwKTsKK30KKworLyogV2lsbCBub3QgZGV0
YWNoIGJ1dCB1c2UgaXQgZm9yIGNvbnZlbmllbmNlICovCitpbnQKK2dpY192M19pdHNfZGV0YWNo
KGRldmljZV90IGRldikKK3sKKwlkZXZpY2VfdCBwYXJlbnQ7CisJc3RydWN0IGdpY192M19zb2Z0
YyAqZ2ljX3NjOworCXN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICpzYzsKKwl1X2ludCBjcHVpZDsK
KwlpbnQgcmlkID0gMDsKKworCXNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCWNwdWlkID0g
UENQVV9HRVQoY3B1aWQpOworCisJLyogUmVsZWFzZSB3aGF0J3MgcG9zc2libGUgKi8KKworCS8q
IENvbW1hbmQgcXVldWUgKi8KKwlpZiAoKHZvaWQgKilzYy0+aXRzX2NtZHFfYmFzZSAhPSBOVUxM
KSB7CisJCWNvbnRpZ2ZyZWUoKHZvaWQgKilzYy0+aXRzX2NtZHFfYmFzZSwKKwkJICAgIElUU19D
TURRX1NJWkUsIE1fR0lDX1YzX0lUUyk7CisJfQorCS8qIElUVHMgKi8KKwlpdHNfZnJlZV90YWJs
ZXMoc2MpOworCS8qIENvbGxlY3Rpb25zICovCisJZnJlZShzYy0+aXRzX2NvbHMsIE1fR0lDX1Yz
X0lUUyk7CisJLyogTFBJIGNvbmZpZyB0YWJsZSAqLworCXBhcmVudCA9IGRldmljZV9nZXRfcGFy
ZW50KHNjLT5kZXYpOworCWdpY19zYyA9IGRldmljZV9nZXRfc29mdGMocGFyZW50KTsKKwlpZiAo
KHZvaWQgKilnaWNfc2MtPmdpY19yZWRpc3RzLmxwaXMuY29uZl9iYXNlICE9IE5VTEwpIHsKKwkJ
Y29udGlnZnJlZSgodm9pZCAqKWdpY19zYy0+Z2ljX3JlZGlzdHMubHBpcy5jb25mX2Jhc2UsCisJ
CSAgICBMUElfQ09ORlRBQl9TSVpFLCBNX0dJQ19WM19JVFMpOworCX0KKwlpZiAoKHZvaWQgKiln
aWNfc2MtPmdpY19yZWRpc3RzLmxwaXMucGVuZF9iYXNlW2NwdWlkXSAhPSBOVUxMKSB7CisJCWNv
bnRpZ2ZyZWUoKHZvaWQgKilnaWNfc2MtPmdpY19yZWRpc3RzLmxwaXMucGVuZF9iYXNlW2NwdWlk
XSwKKwkJICAgIHJvdW5kdXAyKExQSV9QRU5EVEFCX1NJWkUsIFBBR0VfU0laRV82NEspLCBNX0dJ
Q19WM19JVFMpOworCX0KKworCS8qIFJlc291cmNlLi4uICovCisJYnVzX3JlbGVhc2VfcmVzb3Vy
Y2UoZGV2LCBTWVNfUkVTX01FTU9SWSwgcmlkLCBzYy0+aXRzX3Jlcyk7CisKKwkvKiBYWFggQVJN
NjRUT0RPOiBSZXNldCBnbG9iYWwgcG9pbnRlciB0byBJVFMgc29mdHdhcmUgY29udGV4dCAqLwor
CWl0c19zYyA9IE5VTEw7CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitpdHNfYWxs
b2NfdGFibGVzKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICpzYykKK3sKKwl1aW50NjRfdCBnaXRz
X2Jhc2VyLCBnaXRzX3RtcDsKKwl1aW50NjRfdCB0eXBlLCBlc2l6ZSwgY2FjaGUsIHNoYXJlLCBw
c3o7CisJdWludDY0X3QgZ2l0c190eXBlcjsKKwlzaXplX3QgcGFnZV9zaXplLCBucGFnZXMsIG5p
dHNwYWdlcywgbmlkZW50cywgdG47CisJc2l6ZV90IGl0c190Ymxfc2l6ZTsKKwl2bV9vZmZzZXRf
dCBwdGFiX3ZhZGRyOworCXZtX3BhZGRyX3QgcHRhYl9wYWRkcjsKKwlib29sZWFuX3QgZmlyc3Qg
PSBUUlVFOworCisJcGFnZV9zaXplID0gUEFHRV9TSVpFXzY0SzsKKworCS8qIFJlYWQgZmVhdHVy
ZXMgZmlyc3QgKi8KKwlnaXRzX3R5cGVyID0gZ2ljX2l0c19yZWFkKHNjLCA4LCBHSVRTX1RZUEVS
KTsKKworCWZvciAodG4gPSAwOyB0biA8IEdJVFNfQkFTRVJfTlVNOyB0bisrKSB7CisJCWdpdHNf
YmFzZXIgPSBnaWNfaXRzX3JlYWQoc2MsIDgsIEdJVFNfQkFTRVIodG4pKTsKKwkJdHlwZSA9IEdJ
VFNfQkFTRVJfVFlQRShnaXRzX2Jhc2VyKTsKKwkJLyogR2V0IHRoZSBUYWJsZSBFbnRyeSBzaXpl
ICovCisJCWVzaXplID0gR0lUU19CQVNFUl9FU0laRShnaXRzX2Jhc2VyKTsKKworCQlzd2l0Y2gg
KHR5cGUpIHsKKwkJY2FzZSBHSVRTX0JBU0VSX1RZUEVfVU5JTVBMOiAvKiBmYWxsIHRocm91Z2gg
Ki8KKwkJY2FzZSBHSVRTX0JBU0VSX1RZUEVfUkVTNToKKwkJY2FzZSBHSVRTX0JBU0VSX1RZUEVf
UkVTNjoKKwkJY2FzZSBHSVRTX0JBU0VSX1RZUEVfUkVTNzoKKwkJCWNvbnRpbnVlOworCQljYXNl
IEdJVFNfQkFTRVJfVFlQRV9ERVY6CisJCQluaWRlbnRzID0gKDEgPDwgR0lUU19UWVBFUl9ERVZC
KGdpdHNfdHlwZXIpKTsKKwkJCWl0c190Ymxfc2l6ZSA9IGVzaXplICogbmlkZW50czsKKwkJCWl0
c190Ymxfc2l6ZSA9IHJvdW5kdXAyKGl0c190Ymxfc2l6ZSwgcGFnZV9zaXplKTsKKwkJCW5wYWdl
cyA9IGhvd21hbnkoaXRzX3RibF9zaXplLCBQQUdFX1NJWkUpOworCQkJYnJlYWs7CisJCWRlZmF1
bHQ6CisJCQlucGFnZXMgPSBob3dtYW55KHBhZ2Vfc2l6ZSwgUEFHRV9TSVpFKTsKKwkJCWJyZWFr
OworCQl9CisKKwkJLyogQWxsb2NhdGUgcmVxdWlyZWQgc3BhY2UgKi8KKwkJcHRhYl92YWRkciA9
ICh2bV9vZmZzZXRfdCljb250aWdtYWxsb2MobnBhZ2VzICogUEFHRV9TSVpFLAorCQkgICAgTV9H
SUNfVjNfSVRTLCAoTV9XQUlUT0sgfCBNX1pFUk8pLCAwLCB+MFVMLCBQQUdFX1NJWkUsIDApOwor
CisJCXNjLT5pdHNfcHRhYnNbdG5dLnB0YWJfdmFkZHIgPSBwdGFiX3ZhZGRyOworCQlzYy0+aXRz
X3B0YWJzW3RuXS5wdGFiX3Bnc3ogPSBQQUdFX1NJWkU7CisJCXNjLT5pdHNfcHRhYnNbdG5dLnB0
YWJfbnBhZ2VzID0gbnBhZ2VzOworCisJCXB0YWJfcGFkZHIgPSB2dG9waHlzKHB0YWJfdmFkZHIp
OworCQlLQVNTRVJUKChwdGFiX3BhZGRyICYgR0lUU19CQVNFUl9QQV9NQVNLKSA9PSBwdGFiX3Bh
ZGRyLAorCQkgICAgKCIlczogVW5hbGlnbmVkIFBBIGZvciBJbnRlcnJ1cHQgVHJhbnNsYXRpb24g
VGFibGUiLAorCQkgICAgZGV2aWNlX2dldF9uYW1lKHNjLT5kZXYpKSk7CisKKwkJLyogU2V0IGRl
ZmF1bHRzOiBXQVdCLCBJUyAqLworCQljYWNoZSA9IEdJVFNfQkFTRVJfQ0FDSEVfV0FXQjsKKwkJ
c2hhcmUgPSBHSVRTX0JBU0VSX1NIQVJFX0lTOworCisJCWZvciAoOzspIHsKKwkJCW5pdHNwYWdl
cyA9IGhvd21hbnkoaXRzX3RibF9zaXplLCBwYWdlX3NpemUpOworCisJCQlzd2l0Y2ggKHBhZ2Vf
c2l6ZSkgeworCQkJY2FzZSBQQUdFX1NJWkU6CQkvKiA0S0IgKi8KKwkJCQlwc3ogPSBHSVRTX0JB
U0VSX1BTWl80SzsKKwkJCQlicmVhazsKKwkJCWNhc2UgUEFHRV9TSVpFXzE2SzoJLyogMTZLQiAq
LworCQkJCXBzeiA9IEdJVFNfQkFTRVJfUFNaXzRLOworCQkJCWJyZWFrOworCQkJY2FzZSBQQUdF
X1NJWkVfNjRLOgkvKiA2NEtCICovCisJCQkJcHN6ID0gR0lUU19CQVNFUl9QU1pfNjRLOworCQkJ
CWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsCisJCQkJICAg
ICJVbnN1cHBvcnRlZCBwYWdlIHNpemU6ICV6dUtCXG4iLAorCQkJCSAgICAocGFnZV9zaXplIC8g
MTAyNCkpOworCQkJCWl0c19mcmVlX3RhYmxlcyhzYyk7CisJCQkJcmV0dXJuIChFTlhJTyk7CisJ
CQl9CisKKwkJCS8qIENsZWFyIGZpZWxkcyB1bmRlciBtb2RpZmljYXRpb24gZmlyc3QgKi8KKwkJ
CWdpdHNfYmFzZXIgJj0gfihHSVRTX0JBU0VSX1ZBTElEIHwKKwkJCSAgICBHSVRTX0JBU0VSX0NB
Q0hFX01BU0sgfCBHSVRTX0JBU0VSX1RZUEVfTUFTSyB8CisJCQkgICAgR0lUU19CQVNFUl9FU0la
RV9NQVNLIHwgR0lUU19CQVNFUl9QQV9NQVNLIHwKKwkJCSAgICBHSVRTX0JBU0VSX1NIQVJFX01B
U0sgfCBHSVRTX0JBU0VSX1BTWl9NQVNLIHwKKwkJCSAgICBHSVRTX0JBU0VSX1NJWkVfTUFTSyk7
CisJCQkvKiBDb25zdHJ1Y3QgcmVnaXN0ZXIgdmFsdWUgKi8KKwkJCWdpdHNfYmFzZXIgfD0KKwkJ
CSAgICAodHlwZSA8PCBHSVRTX0JBU0VSX1RZUEVfU0hJRlQpIHwKKwkJCSAgICAoKGVzaXplIC0g
MSkgPDwgR0lUU19CQVNFUl9FU0laRV9TSElGVCkgfAorCQkJICAgIChjYWNoZSA8PCBHSVRTX0JB
U0VSX0NBQ0hFX1NISUZUKSB8CisJCQkgICAgKHNoYXJlIDw8IEdJVFNfQkFTRVJfU0hBUkVfU0hJ
RlQpIHwKKwkJCSAgICAocHN6IDw8IEdJVFNfQkFTRVJfUFNaX1NISUZUKSB8CisJCQkgICAgcHRh
Yl9wYWRkciB8IChuaXRzcGFnZXMgLSAxKSB8CisJCQkgICAgR0lUU19CQVNFUl9WQUxJRDsKKwor
CQkJZ2ljX2l0c193cml0ZShzYywgOCwgR0lUU19CQVNFUih0biksIGdpdHNfYmFzZXIpOworCQkJ
LyoKKwkJCSAqIFZlcmlmeS4KKwkJCSAqIERlcGVuZGluZyBvbiBpbXBsZW1lbnRhdGlvbiB3ZSBt
YXkgZW5jb3VudGVyCisJCQkgKiBzaGFyZWFiaWxpdHkgYW5kIHBhZ2Ugc2l6ZSBtaXNtYXRjaC4K
KwkJCSAqLworCQkJZ2l0c190bXAgPSBnaWNfaXRzX3JlYWQoc2MsIDgsIEdJVFNfQkFTRVIodG4p
KTsKKwkJCWlmICgoKGdpdHNfdG1wIF4gZ2l0c19iYXNlcikgJiBHSVRTX0JBU0VSX1NIQVJFX01B
U0spICE9IDApIHsKKwkJCQlzaGFyZSA9IGdpdHNfdG1wICYgR0lUU19CQVNFUl9TSEFSRV9NQVNL
OworCQkJCXNoYXJlID4+PSBHSVRTX0JBU0VSX1NIQVJFX1NISUZUOworCQkJCWNvbnRpbnVlOwor
CQkJfQorCisJCQlpZiAoKChnaXRzX3RtcCBeIGdpdHNfYmFzZXIpICYgR0lUU19CQVNFUl9QU1pf
TUFTSykgIT0gMCkgeworCQkJCXN3aXRjaCAocGFnZV9zaXplKSB7CisJCQkJY2FzZSBQQUdFX1NJ
WkVfMTZLOgorCQkJCQkvKiBEcm9wIHRvIDRLQiBwYWdlICovCisJCQkJCXBhZ2Vfc2l6ZSA9IFBB
R0VfU0laRTsKKwkJCQkJY29udGludWU7CisJCQkJY2FzZSBQQUdFX1NJWkVfNjRLOgorCQkJCQkv
KiBEcm9wIHRvIDE2S0IgcGFnZSAqLworCQkJCQlwYWdlX3NpemUgPSBQQUdFX1NJWkVfMTZLOwor
CQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisJCQkvKgorCQkJICogQWxsIHBvc3NpYmxlIGFk
anVzdG1lbnRzIHNob3VsZAorCQkJICogYmUgYXBwbGllZCBieSBub3cgc28ganVzdCBicmVhayB0
aGUgbG9vcC4KKwkJCSAqLworCQkJYnJlYWs7CisJCX0KKwkJLyoKKwkJICogRG8gbm90IGNvbXBh
cmUgQ2FjaGVhYmlsaXR5IGZpZWxkIHNpbmNlCisJCSAqIGl0IGlzIGltcGxlbWVudGF0aW9uIGRl
ZmluZWQuCisJCSAqLworCQlnaXRzX3RtcCAmPSB+R0lUU19CQVNFUl9DQUNIRV9NQVNLOworCQln
aXRzX2Jhc2VyICY9IH5HSVRTX0JBU0VSX0NBQ0hFX01BU0s7CisKKwkJaWYgKGdpdHNfdG1wICE9
IGdpdHNfYmFzZXIpIHsKKwkJCWRldmljZV9wcmludGYoc2MtPmRldiwKKwkJCSAgICAiQ291bGQg
bm90IGFsbG9jYXRlIElUUyB0YWJsZXNcbiIpOworCQkJaXRzX2ZyZWVfdGFibGVzKHNjKTsKKwkJ
CXJldHVybiAoRU5YSU8pOworCQl9CisKKwkJaWYgKGJvb3R2ZXJib3NlKSB7CisJCQlpZiAoZmly
c3QpIHsKKwkJCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsCisJCQkJICAgICJBbGxvY2F0ZWQgSVRT
IHByaXZhdGUgdGFibGVzOlxuIik7CisJCQkJZmlyc3QgPSBGQUxTRTsKKwkJCX0KKwkJCWRldmlj
ZV9wcmludGYoc2MtPmRldiwKKwkJCSAgICAiXHRQVEFCJXp1IGZvciAlczogUEEgMHglbHgsIgor
CQkJICAgICIgJWx1IGVudHJpZXMsIgorCQkJICAgICIgY2FjaGUgcG9saWN5ICVzLCAlcyBzaGFy
ZWFibGUsIgorCQkJICAgICIgcGFnZSBzaXplICV6dUtCXG4iLAorCQkJICAgIHRuLCBpdHNfcHRh
Yl90eXBlW3R5cGVdLCBwdGFiX3BhZGRyLAorCQkJICAgIChwYWdlX3NpemUgKiBuaXRzcGFnZXMp
IC8gZXNpemUsCisJCQkgICAgaXRzX3B0YWJfY2FjaGVbY2FjaGVdLCBpdHNfcHRhYl9zaGFyZVtz
aGFyZV0sCisJCQkgICAgcGFnZV9zaXplIC8gMTAyNCk7CisJCX0KKwl9CisKKwlyZXR1cm4gKDAp
OworfQorCitzdGF0aWMgdm9pZAoraXRzX2ZyZWVfdGFibGVzKHN0cnVjdCBnaWNfdjNfaXRzX3Nv
ZnRjICpzYykKK3sKKwl2bV9vZmZzZXRfdCBwdGFiX3ZhZGRyOworCXNpemVfdCBzaXplOworCXNp
emVfdCB0bjsKKworCWZvciAodG4gPSAwOyB0biA8IEdJVFNfQkFTRVJfTlVNOyB0bisrKSB7CisJ
CXB0YWJfdmFkZHIgPSBzYy0+aXRzX3B0YWJzW3RuXS5wdGFiX3ZhZGRyOworCQlpZiAocHRhYl92
YWRkciA9PSAwKQorCQkJY29udGludWU7CisJCXNpemUgPSBzYy0+aXRzX3B0YWJzW3RuXS5wdGFi
X3Bnc3o7CisJCXNpemUgKj0gc2MtPml0c19wdGFic1t0bl0ucHRhYl9ucGFnZXM7CisKKwkJaWYg
KCh2b2lkICopcHRhYl92YWRkciAhPSBOVUxMKQorCQkJY29udGlnZnJlZSgodm9pZCAqKXB0YWJf
dmFkZHIsIHNpemUsIE1fR0lDX1YzX0lUUyk7CisKKwkJLyogQ2xlYXIgdGhlIHRhYmxlIGRlc2Ny
aXB0aW9uICovCisJCW1lbXNldCgmc2MtPml0c19wdGFic1t0bl0sIDAsIHNpemVvZihzYy0+aXRz
X3B0YWJzW3RuXSkpOworCX0KK30KKworc3RhdGljIHZvaWQKK2l0c19pbml0X2NvbW1hbmRxKHN0
cnVjdCBnaWNfdjNfaXRzX3NvZnRjICpzYykKK3sKKwl1aW50NjRfdCBnaXRzX2NiYXNlciwgZ2l0
c190bXA7CisJdWludDY0X3QgY2FjaGUsIHNoYXJlOworCXZtX3BhZGRyX3QgY21kcV9wYWRkcjsK
KwlkZXZpY2VfdCBkZXY7CisKKwlkZXYgPSBzYy0+ZGV2OworCS8qIEFsbG9jYXRlIG1lbW9yeSBm
b3IgY29tbWFuZCBxdWV1ZSAqLworCXNjLT5pdHNfY21kcV9iYXNlID0gY29udGlnbWFsbG9jKElU
U19DTURRX1NJWkUsIE1fR0lDX1YzX0lUUywKKwkgICAgKE1fV0FJVE9LIHwgTV9aRVJPKSwgMCwg
fjBVTCwgSVRTX0NNRFFfU0laRSwgMCk7CisJLyogU2V0IGNvbW1hbmQgcXVldWUgd3JpdGUgcG9p
bnRlciAoY29tbWFuZCBxdWV1ZSBlbXB0eSkgKi8KKwlzYy0+aXRzX2NtZHFfd3JpdGUgPSBzYy0+
aXRzX2NtZHFfYmFzZTsKKworCS8qIFNhdmUgY29tbWFuZCBxdWV1ZSBwb2ludGVyIGFuZCBhdHRy
aWJ1dGVzICovCisJY21kcV9wYWRkciA9IHZ0b3BoeXMoc2MtPml0c19jbWRxX2Jhc2UpOworCisJ
LyogU2V0IGRlZmF1bHRzOiBOb3JtYWwgSW5uZXIgV0FXQiwgSVMgKi8KKwljYWNoZSA9IEdJVFNf
Q0JBU0VSX0NBQ0hFX05JV0FXQjsKKwlzaGFyZSA9IEdJVFNfQ0JBU0VSX1NIQVJFX0lTOworCisJ
Z2l0c19jYmFzZXIgPSAoY21kcV9wYWRkciB8CisJICAgIChjYWNoZSA8PCBHSVRTX0NCQVNFUl9D
QUNIRV9TSElGVCkgfAorCSAgICAoc2hhcmUgPDwgR0lUU19DQkFTRVJfU0hBUkVfU0hJRlQpIHwK
KwkgICAgLyogTnVtYmVyIG9mIDRLQiBwYWdlcyAtIDEgKi8KKwkgICAgKChJVFNfQ01EUV9TSVpF
IC8gUEFHRV9TSVpFKSAtIDEpIHwKKwkgICAgLyogVmFsaWQgYml0ICovCisJICAgIEdJVFNfQ0JB
U0VSX1ZBTElEKTsKKworCWdpY19pdHNfd3JpdGUoc2MsIDgsIEdJVFNfQ0JBU0VSLCBnaXRzX2Ni
YXNlcik7CisJZ2l0c190bXAgPSBnaWNfaXRzX3JlYWQoc2MsIDgsIEdJVFNfQ0JBU0VSKTsKKwor
CWlmICgoKGdpdHNfdG1wIF4gZ2l0c19jYmFzZXIpICYgR0lUU19DQkFTRVJfU0hBUkVfTUFTSykg
IT0gMCkgeworCQlpZiAoYm9vdHZlcmJvc2UpIHsKKwkJCWRldmljZV9wcmludGYoZGV2LAorCQkJ
ICAgICJXaWxsIHVzZSBjYWNoZSBmbHVzaGluZyBmb3IgY29tbWFuZHMgcXVldWVcbiIpOworCQl9
CisJCS8qIENvbW1hbmQgcXVldWUgbmVlZHMgY2FjaGUgZmx1c2hpbmcgKi8KKwkJc2MtPml0c19m
bGFncyB8PSBJVFNfRkxBR1NfQ01EUV9GTFVTSDsKKwl9CisKKwlnaWNfaXRzX3dyaXRlKHNjLCA4
LCBHSVRTX0NXUklURVIsIDB4MCk7Cit9CisKK3N0YXRpYyBpbnQKK2l0c19pbml0X2NwdShzdHJ1
Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqc2MpCit7CisJZGV2aWNlX3QgcGFyZW50OworCXN0cnVjdCBn
aWNfdjNfc29mdGMgKmdpY19zYzsKKworCS8qCisJICogQ2hlY2sgZm9yIExQSXMgc3VwcG9ydCBv
biB0aGlzIFJlLURpc3RyaWJ1dG9yLgorCSAqLworCXBhcmVudCA9IGRldmljZV9nZXRfcGFyZW50
KHNjLT5kZXYpOworCWdpY19zYyA9IGRldmljZV9nZXRfc29mdGMocGFyZW50KTsKKwlpZiAoKGdp
Y19yX3JlYWQoZ2ljX3NjLCA0LCBHSUNSX1RZUEVSKSAmIEdJQ1JfVFlQRVJfUExQSVMpID09IDAp
IHsKKwkJaWYgKGJvb3R2ZXJib3NlKSB7CisJCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsCisJCQkg
ICAgIkxQSXMgbm90IHN1cHBvcnRlZCBvbiBDUFUldVxuIiwgUENQVV9HRVQoY3B1aWQpKTsKKwkJ
fQorCQlyZXR1cm4gKEVOWElPKTsKKwl9CisKKwkvKiBJbml0aWFsaXplIExQSXMgZm9yIHRoaXMg
Q1BVICovCisJbHBpX2luaXRfY3B1KHNjKTsKKworCS8qIEluaXRpYWxpemUgY29sbGVjdGlvbnMg
Ki8KKwlpdHNfaW5pdF9jcHVfY29sbGVjdGlvbihzYyk7CisKKwlyZXR1cm4gKDApOworfQorCitz
dGF0aWMgdm9pZAoraXRzX2luaXRfY3B1X2NvbGxlY3Rpb24oc3RydWN0IGdpY192M19pdHNfc29m
dGMgKnNjKQoreworCWRldmljZV90IHBhcmVudDsKKwlzdHJ1Y3QgZ2ljX3YzX3NvZnRjICpnaWNf
c2M7CisJdWludDY0X3QgdHlwZXI7CisJdWludDY0X3QgdGFyZ2V0OworCXZtX29mZnNldF90IHJl
ZGlzdF9iYXNlOworCXVfaW50IGNwdWlkOworCisJY3B1aWQgPSBQQ1BVX0dFVChjcHVpZCk7CisJ
cGFyZW50ID0gZGV2aWNlX2dldF9wYXJlbnQoc2MtPmRldik7CisJZ2ljX3NjID0gZGV2aWNlX2dl
dF9zb2Z0YyhwYXJlbnQpOworCisJdHlwZXIgPSBnaWNfaXRzX3JlYWQoc2MsIDgsIEdJVFNfVFlQ
RVIpOworCWlmICgodHlwZXIgJiBHSVRTX1RZUEVSX1BUQSkgIT0gMCkgeworCQlyZWRpc3RfYmFz
ZSA9CisJCSAgICBybWFuX2dldF9idXNoYW5kbGUoZ2ljX3NjLT5naWNfcmVkaXN0cy5wY3B1W2Nw
dWlkXSk7CisJCS8qCisJCSAqIFRhcmdldCBBZGRyZXNzIGNvcnJlc3BvbmQgdG8gdGhlIGJhc2Ug
cGh5c2ljYWwKKwkJICogYWRkcmVzcyBvZiBSZS1EaXN0cmlidXRvcnMuCisJCSAqLworCQl0YXJn
ZXQgPSB2dG9waHlzKHJlZGlzdF9iYXNlKTsKKwl9IGVsc2UgeworCQkvKiBUYXJnZXQgQWRkcmVz
cyBjb3JyZXNwb25kIHRvIHVuaXF1ZSBwcm9jZXNzb3IgbnVtYmVycyAqLworCQl0eXBlciA9IGdp
Y19yX3JlYWQoZ2ljX3NjLCA4LCBHSUNSX1RZUEVSKTsKKwkJdGFyZ2V0ID0gR0lDUl9UWVBFUl9D
UFVOVU0odHlwZXIpOworCX0KKworCXNjLT5pdHNfY29sc1tjcHVpZF0uY29sX3RhcmdldCA9IHRh
cmdldDsKKwlzYy0+aXRzX2NvbHNbY3B1aWRdLmNvbF9pZCA9IGNwdWlkOworCisJaXRzX2NtZF9t
YXBjKHNjLCAmc2MtPml0c19jb2xzW2NwdWlkXSwgMSk7CisJaXRzX2NtZF9pbnZhbGwoc2MsICZz
Yy0+aXRzX2NvbHNbY3B1aWRdKTsKK30KKworc3RhdGljIHZvaWQKK2xwaV9pbml0X2NvbmZ0YWJs
ZShzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqc2MpCit7CisJZGV2aWNlX3QgcGFyZW50OworCXN0
cnVjdCBnaWNfdjNfc29mdGMgKmdpY19zYzsKKwl2bV9vZmZzZXRfdCBjb25mX2Jhc2U7CisJdWlu
dDhfdCBwcmlvX2RlZmF1bHQ7CisKKwlwYXJlbnQgPSBkZXZpY2VfZ2V0X3BhcmVudChzYy0+ZGV2
KTsKKwlnaWNfc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKHBhcmVudCk7CisJLyoKKwkgKiBMUEkgQ29u
ZmlndXJhdGlvbiBUYWJsZSBzZXR0aW5ncy4KKwkgKiBOb3RpY2UgdGhhdCBDb25maWd1cmF0aW9u
IFRhYmxlIGlzIHNoYXJlZCBhbW9uZyBhbGwKKwkgKiBSZS1EaXN0cmlidXRvcnMsIHNvIHRoaXMg
aXMgZ29pbmcgdG8gYmUgY3JlYXRlZCBqdXN0IG9uY2UuCisJICovCisJY29uZl9iYXNlID0gKHZt
X29mZnNldF90KWNvbnRpZ21hbGxvYyhMUElfQ09ORlRBQl9TSVpFLAorCSAgICBNX0dJQ19WM19J
VFMsIChNX1dBSVRPSyB8IE1fWkVSTyksIDAsIH4wVUwsIFBBR0VfU0laRV82NEssIDApOworCisJ
aWYgKGJvb3R2ZXJib3NlKSB7CisJCWRldmljZV9wcmludGYoc2MtPmRldiwKKwkJICAgICJMUEkg
Q29uZmlndXJhdGlvbiBUYWJsZSBhdCBQQTogMHglbHhcbiIsCisJCSAgICB2dG9waHlzKGNvbmZf
YmFzZSkpOworCX0KKworCS8qCisJICogTGV0IHRoZSBkZWZhdWx0IHByaW9yaXR5IGJlIGFsaWdu
ZWQgd2l0aCBhbGwgb3RoZXIKKwkgKiBpbnRlcnJ1cHRzIGFzc3VtaW5nIHRoYXQgZWFjaCBpbnRl
cnJ1cHQgaXMgYXNzaWduZWQKKwkgKiBNQVggcHJpb3JpdHkgYXQgc3RhcnR1cC4gTUFYIHByaW9y
aXR5IG9uIHRoZSBvdGhlcgorCSAqIGhhbmQgY2Fubm90IGJlIGhpZ2hlciB0aGFuIDB4RkMgZm9y
IExQSXMuCisJICovCisJcHJpb19kZWZhdWx0ID0gR0lDX1BSSU9SSVRZX01BWDsKKworCS8qIFdy
aXRlIGVhY2ggc2V0dGluZ3MgYnl0ZSB0byBMUEkgY29uZmlndXJhdGlvbiB0YWJsZSAqLworCW1l
bXNldCgodm9pZCAqKWNvbmZfYmFzZSwKKwkgICAgKHByaW9fZGVmYXVsdCAmIExQSV9DT05GX1BS
SU9fTUFTSykgfCBMUElfQ09ORl9HUk9VUDEsCisJICAgIExQSV9DT05GVEFCX1NJWkUpOworCisJ
Y3B1X2RjYWNoZV93Yl9yYW5nZSgodm1fb2Zmc2V0X3QpY29uZl9iYXNlLCByb3VuZHVwMihMUElf
Q09ORlRBQl9TSVpFLAorCSAgICBQQUdFX1NJWkVfNjRLKSk7CisKKwlnaWNfc2MtPmdpY19yZWRp
c3RzLmxwaXMuY29uZl9iYXNlID0gY29uZl9iYXNlOworfQorCitzdGF0aWMgdm9pZAorbHBpX2lu
aXRfY3B1KHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICpzYykKK3sKKwlkZXZpY2VfdCBwYXJlbnQ7
CisJc3RydWN0IGdpY192M19zb2Z0YyAqZ2ljX3NjOworCXZtX29mZnNldF90IHBlbmRfYmFzZTsK
Kwl1X2ludCBjcHVpZDsKKworCXBhcmVudCA9IGRldmljZV9nZXRfcGFyZW50KHNjLT5kZXYpOwor
CWdpY19zYyA9IGRldmljZV9nZXRfc29mdGMocGFyZW50KTsKKworCS8qCisJICogTFBJIFBlbmRp
bmcgVGFibGUgc2V0dGluZ3MuCisJICogVGhpcyBoYXMgdG8gYmUgZG9uZSBmb3IgZWFjaCBSZS1E
aXN0cmlidXRvciwgaGVuY2UgZm9yIGVhY2ggQ1BVLgorCSAqLworCWNwdWlkID0gUENQVV9HRVQo
Y3B1aWQpOworCisJcGVuZF9iYXNlID0gKHZtX29mZnNldF90KWNvbnRpZ21hbGxvYygKKwkgICAg
cm91bmR1cDIoTFBJX1BFTkRUQUJfU0laRSwgUEFHRV9TSVpFXzY0SyksIE1fR0lDX1YzX0lUUywK
KwkgICAgKE1fV0FJVE9LIHwgTV9aRVJPKSwgMCwgfjBVTCwgUEFHRV9TSVpFXzY0SywgMCk7CisK
KwkvKiBDbGVhbiBELWNhY2hlIHNvIHRoYXQgSVRTIGNhbiBzZWUgemVyb2VkIHBhZ2VzICovCisJ
Y3B1X2RjYWNoZV93Yl9yYW5nZSgodm1fb2Zmc2V0X3QpcGVuZF9iYXNlLAorCSAgICByb3VuZHVw
MihMUElfUEVORFRBQl9TSVpFLCBQQUdFX1NJWkVfNjRLKSk7CisKKwlpZiAoYm9vdHZlcmJvc2Up
IHsKKwkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2LAorCQkgICAgIkxQSSBQZW5kaW5nIFRhYmxlIGZv
ciBDUFUldSBhdCBQQTogMHglbHhcbiIsCisJCSAgICBjcHVpZCwgdnRvcGh5cyhwZW5kX2Jhc2Up
KTsKKwl9CisKKwlnaWNfc2MtPmdpY19yZWRpc3RzLmxwaXMucGVuZF9iYXNlW2NwdWlkXSA9IHBl
bmRfYmFzZTsKKworCWxwaV9jb25maWdfY3B1KHNjKTsKK30KKworc3RhdGljIGludAorbHBpX2Nv
bmZpZ19jcHUoc3RydWN0IGdpY192M19pdHNfc29mdGMgKnNjKQoreworCWRldmljZV90IHBhcmVu
dDsKKwlzdHJ1Y3QgZ2ljX3YzX3NvZnRjICpnaWNfc2M7CisJdm1fb2Zmc2V0X3QgY29uZl9iYXNl
LCBwZW5kX2Jhc2U7CisJdWludDY0X3QgZ2ljcl94YmFzZXIsIGdpY3JfdGVtcDsKKwl1aW50NjRf
dCBjYWNoZSwgc2hhcmUsIGlkYml0czsKKwl1aW50MzJfdCBnaWNyX2N0bHI7CisJdV9pbnQgY3B1
aWQ7CisKKwlwYXJlbnQgPSBkZXZpY2VfZ2V0X3BhcmVudChzYy0+ZGV2KTsKKwlnaWNfc2MgPSBk
ZXZpY2VfZ2V0X3NvZnRjKHBhcmVudCk7CisJY3B1aWQgPSBQQ1BVX0dFVChjcHVpZCk7CisKKwlj
b25mX2Jhc2UgPSBnaWNfc2MtPmdpY19yZWRpc3RzLmxwaXMuY29uZl9iYXNlOworCXBlbmRfYmFz
ZSA9IGdpY19zYy0+Z2ljX3JlZGlzdHMubHBpcy5wZW5kX2Jhc2VbY3B1aWRdOworCisJLyogRGlz
YWJsZSBMUElzICovCisJZ2ljcl9jdGxyID0gZ2ljX3JfcmVhZChnaWNfc2MsIDQsIEdJQ1JfQ1RM
Uik7CisJZ2ljcl9jdGxyICY9IH5HSUNSX0NUTFJfTFBJX0VOQUJMRTsKKwlnaWNfcl93cml0ZShn
aWNfc2MsIDQsIEdJQ1JfQ1RMUiwgZ2ljcl9jdGxyKTsKKwkvKiBQZXJmb3JtIGZ1bGwgc3lzdGVt
IGJhcnJpZXIgKi8KKwlkc2Ioc3kpOworCisJLyoKKwkgKiBTZXQgR0lDUl9QUk9QQkFTRVIKKwkg
Ki8KKworCS8qCisJICogRmluZCBvdXQgaG93IG1hbnkgYml0cyBkbyB3ZSBuZWVkIGZvciBMUEkg
aWRlbnRpZmllcnMuCisJICogUmVtYXJrIDEuOiBFdmVuIHRob3VnaCB3ZSBoYXZlIChMUElfQ09O
RlRBQl9TSVpFIC8gOCkgTFBJcworCSAqCSAgICAgIHRoZSBub3RpZmllZCBMUEkgSUQgc3RpbGwg
c3RhcnRzIGZyb20gODE5MgorCSAqCSAgICAgIChHSUNfRklSU1RfTFBJKS4KKwkgKiBSZW1hcmsg
Mi46IFRoaXMgY291bGQgYmUgZG9uZSBvbiBjb21waWxhdGlvbiB0aW1lIGJ1dCB0aGVyZQorCSAq
CSAgICAgIHNlZW1zIHRvIGJlIG5vIHN1ZmZpY2llbnQgbWFjcm8uCisJICovCisJaWRiaXRzID0g
ZmxzbChMUElfQ09ORlRBQl9TSVpFICsgR0lDX0ZJUlNUX0xQSSkgLSAxOworCisJLyogU2V0IGRl
ZmF1bHRzOiBOb3JtYWwgSW5uZXIgV0FXQiwgSVMgKi8KKwljYWNoZSA9IEdJQ1JfUFJPUEJBU0VS
X0NBQ0hFX05JV0FXQjsKKwlzaGFyZSA9IEdJQ1JfUFJPUEJBU0VSX1NIQVJFX0lTOworCisJZ2lj
cl94YmFzZXIgPSB2dG9waHlzKGNvbmZfYmFzZSkgfAorCSAgICAoKGlkYml0cyAtIDEpICYgR0lD
Ul9QUk9QQkFTRVJfSURCSVRTX01BU0spIHwKKwkgICAgKGNhY2hlIDw8IEdJQ1JfUFJPUEJBU0VS
X0NBQ0hFX1NISUZUKSB8CisJICAgIChzaGFyZSA8PCBHSUNSX1BST1BCQVNFUl9TSEFSRV9TSElG
VCk7CisKKwlnaWNfcl93cml0ZShnaWNfc2MsIDgsIEdJQ1JfUFJPUEJBU0VSLCBnaWNyX3hiYXNl
cik7CisJZ2ljcl90ZW1wID0gZ2ljX3JfcmVhZChnaWNfc2MsIDgsIEdJQ1JfUFJPUEJBU0VSKTsK
KworCWlmICgoKGdpY3JfeGJhc2VyIF4gZ2ljcl90ZW1wKSAmIEdJQ1JfUFJPUEJBU0VSX1NIQVJF
X01BU0spICE9IDApIHsKKwkJaWYgKGJvb3R2ZXJib3NlKSB7CisJCQlkZXZpY2VfcHJpbnRmKHNj
LT5kZXYsCisJCQkgICAgIldpbGwgdXNlIGNhY2hlIGZsdXNoaW5nIGZvciBMUEkgIgorCQkJICAg
ICJDb25maWd1cmF0aW9uIFRhYmxlXG4iKTsKKwkJfQorCQlnaWNfc2MtPmdpY19yZWRpc3RzLmxw
aXMuZmxhZ3MgfD0gTFBJX0ZMQUdTX0NPTkZfRkxVU0g7CisJfQorCisJLyoKKwkgKiBTZXQgR0lD
Ul9QRU5EQkFTRVIKKwkgKi8KKworCS8qIFNldCBkZWZhdWx0czogTm9ybWFsIElubmVyIFdBV0Is
IElTICovCisJY2FjaGUgPSBHSUNSX1BFTkRCQVNFUl9DQUNIRV9OSVdBV0I7CisJc2hhcmUgPSBH
SUNSX1BFTkRCQVNFUl9TSEFSRV9JUzsKKworCWdpY3JfeGJhc2VyID0gdnRvcGh5cyhwZW5kX2Jh
c2UpIHwKKwkgICAgKGNhY2hlIDw8IEdJQ1JfUEVOREJBU0VSX0NBQ0hFX1NISUZUKSB8CisJICAg
IChzaGFyZSA8PCBHSUNSX1BFTkRCQVNFUl9TSEFSRV9TSElGVCk7CisKKwlnaWNfcl93cml0ZShn
aWNfc2MsIDgsIEdJQ1JfUEVOREJBU0VSLCBnaWNyX3hiYXNlcik7CisKKwkvKiBFbmFibGUgTFBJ
cyAqLworCWdpY3JfY3RsciA9IGdpY19yX3JlYWQoZ2ljX3NjLCA0LCBHSUNSX0NUTFIpOworCWdp
Y3JfY3RsciB8PSBHSUNSX0NUTFJfTFBJX0VOQUJMRTsKKwlnaWNfcl93cml0ZShnaWNfc2MsIDQs
IEdJQ1JfQ1RMUiwgZ2ljcl9jdGxyKTsKKworCWRzYihzeSk7CisKKwlyZXR1cm4gKDApOworfQor
CitzdGF0aWMgdm9pZAorbHBpX2JpdG1hcF9pbml0KHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICpz
YykKK3sKKwlkZXZpY2VfdCBwYXJlbnQ7CisJc3RydWN0IGdpY192M19zb2Z0YyAqZ2ljX3NjOwor
CXVpbnQzMl90IGxwaV9pZF9udW07CisJc2l6ZV90IGxwaV9jaHVua3NfbnVtOworCXNpemVfdCBi
aXRzX2luX2NodW5rOworCisJcGFyZW50ID0gZGV2aWNlX2dldF9wYXJlbnQoc2MtPmRldik7CisJ
Z2ljX3NjID0gZGV2aWNlX2dldF9zb2Z0YyhwYXJlbnQpOworCisJbHBpX2lkX251bSA9ICgxIDw8
IGdpY19zYy0+Z2ljX2lkYml0cykgLSAxOworCS8qIFN1YnN0cmFjdCBJRHMgZGVkaWNhdGVkIGZv
ciBTR0lzLCBQUElzIGFuZCBTUElzICovCisJbHBpX2lkX251bSAtPSBHSUNfRklSU1RfTFBJOwor
CisJc2MtPml0c19scGlfbWF4aWQgPSBscGlfaWRfbnVtOworCisJYml0c19pbl9jaHVuayA9IHNp
emVvZigqc2MtPml0c19scGlfYml0bWFwKSAqIE5CQlk7CisKKwkvKgorCSAqIFJvdW5kIHVwIHRv
IHRoZSBudW1iZXIgb2YgYml0cyBpbiBjaHVuay4KKwkgKiBXZSB3aWxsIG5lZWQgdG8gdGFrZSBj
YXJlIHRvIGF2b2lkIHVzaW5nIGludmFsaWQgTFBJIElEcyBsYXRlci4KKwkgKi8KKwlscGlfaWRf
bnVtID0gcm91bmR1cDIobHBpX2lkX251bSwgYml0c19pbl9jaHVuayk7CisJbHBpX2NodW5rc19u
dW0gPSBscGlfaWRfbnVtIC8gYml0c19pbl9jaHVuazsKKworCXNjLT5pdHNfbHBpX2JpdG1hcCA9
CisJICAgIGNvbnRpZ21hbGxvYygobHBpX2NodW5rc19udW0gKiBzaXplb2YoKnNjLT5pdHNfbHBp
X2JpdG1hcCkpLAorCSAgICBNX0dJQ19WM19JVFMsIChNX1dBSVRPSyB8IE1fWkVSTyksIDAsIH4w
VUwsCisJICAgIHNpemVvZigqc2MtPml0c19scGlfYml0bWFwKSwgMCk7Cit9CisKK3N0YXRpYyBp
bnQKK2xwaV9hbGxvY19jaHVuayhzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqc2MsIHN0cnVjdCBs
cGlfY2h1bmsgKmxwaWMsCisgICAgdV9pbnQgbnZlY3MpCit7CisJaW50IGZjbHI7IC8qIEZpcnN0
IGNsZWFyZWQgYml0ICovCisJdWludDhfdCAqYml0bWFwOworCXNpemVfdCBuYiwgaTsKKworCWJp
dG1hcCA9ICh1aW50OF90ICopc2MtPml0c19scGlfYml0bWFwOworCisJZmNsciA9IDA7CityZXRy
eToKKwkvKiBDaGVjayBvdGhlciBiaXRzIC0gc2xvb29vdyAqLworCWZvciAoaSA9IDAsIG5iID0g
ZmNscjsgaSA8IG52ZWNzOyBpKyssIG5iKyspIHsKKwkJaWYgKG5iID4gc2MtPml0c19scGlfbWF4
aWQpCisJCQlyZXR1cm4gKEVJTlZBTCk7CisKKwkJaWYgKGlzc2V0KGJpdG1hcCwgbmIpKSB7CisJ
CQkvKiBUbyBsaXR0bGUgZnJlZSBiaXRzIGluIHRoaXMgYXJlYS4gTW92ZSBvbi4gKi8KKwkJCWZj
bHIgPSBuYiArIDE7CisJCQlnb3RvIHJldHJ5OworCQl9CisJfQorCS8qIFRoaXMgYXJlYSBpcyBm
cmVlLiBUYWtlIGl0LiAqLworCWJpdF9uc2V0KGJpdG1hcCwgZmNsciwgZmNsciArIG52ZWNzIC0g
MSk7CisJbHBpYy0+bHBpX2Jhc2UgPSBmY2xyICsgR0lDX0ZJUlNUX0xQSTsKKwlscGljLT5scGlf
bnVtID0gbnZlY3M7CisJbHBpYy0+bHBpX2ZyZWUgPSBscGljLT5scGlfbnVtOworCisJcmV0dXJu
ICgwKTsKK30KKworc3RhdGljIHZvaWQKK2xwaV9jb25maWd1cmUoc3RydWN0IGdpY192M19pdHNf
c29mdGMgKnNjLCBzdHJ1Y3QgaXRzX2RldiAqaXRzX2RldiwKKyAgICB1aW50MzJfdCBscGludW0s
IGJvb2xlYW5fdCB1bm1hc2spCit7CisJZGV2aWNlX3QgcGFyZW50OworCXN0cnVjdCBnaWNfdjNf
c29mdGMgKmdpY19zYzsKKwl1aW50OF90ICpjb25mX2J5dGU7CisKKwlwYXJlbnQgPSBkZXZpY2Vf
Z2V0X3BhcmVudChzYy0+ZGV2KTsKKwlnaWNfc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKHBhcmVudCk7
CisKKwljb25mX2J5dGUgPSAodWludDhfdCAqKWdpY19zYy0+Z2ljX3JlZGlzdHMubHBpcy5jb25m
X2Jhc2U7CisJY29uZl9ieXRlICs9IChscGludW0gLSBHSUNfRklSU1RfTFBJKTsKKworCWlmICh1
bm1hc2spCisJCSpjb25mX2J5dGUgfD0gTFBJX0NPTkZfRU5BQkxFOworCWVsc2UKKwkJKmNvbmZf
Ynl0ZSAmPSB+TFBJX0NPTkZfRU5BQkxFOworCisJaWYgKChnaWNfc2MtPmdpY19yZWRpc3RzLmxw
aXMuZmxhZ3MgJiBMUElfRkxBR1NfQ09ORl9GTFVTSCkgIT0gMCkgeworCQkvKiBDbGVhbiBELWNh
Y2hlIHVuZGVyIGNvbmZpZ3VyYXRpb24gYnl0ZSAqLworCQljcHVfZGNhY2hlX3diX3JhbmdlKCh2
bV9vZmZzZXRfdCljb25mX2J5dGUsIHNpemVvZigqY29uZl9ieXRlKSk7CisJfSBlbHNlIHsKKwkJ
LyogRFNCIGlubmVyIHNoYXJlYWJsZSwgc3RvcmUgKi8KKwkJZHNiKGlzaHN0KTsKKwl9CisKKwlp
dHNfY21kX2ludihzYywgaXRzX2RldiwgbHBpbnVtKTsKK30KKworc3RhdGljIHZvaWQKK2xwaV9t
YXBfdG9fZGV2aWNlKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICpzYywgc3RydWN0IGl0c19kZXYg
Kml0c19kZXYsCisgICAgdWludDMyX3QgaWQsIHVpbnQzMl90IHBpZCkKK3sKKworCWlmICgocGlk
IDwgaXRzX2Rldi0+bHBpcy5scGlfYmFzZSkgfHwKKwkgICAgKHBpZCA+PSAoaXRzX2Rldi0+bHBp
cy5scGlfYmFzZSArIGl0c19kZXYtPmxwaXMubHBpX251bSkpKQorCQlwYW5pYygiVHJ5aW5nIHRv
IG1hcCBpdmFsaWQgTFBJICV1IGZvciB0aGUgZGV2aWNlXG4iLCBwaWQpOworCisJaXRzX2NtZF9t
YXB2aShzYywgaXRzX2RldiwgaWQsIHBpZCk7Cit9CisKK3N0YXRpYyB2b2lkCitscGlfeG1hc2tf
aXJxKGRldmljZV90IHBhcmVudCwgdWludDMyX3QgaXJxLCBib29sZWFuX3QgdW5tYXNrKQorewor
CXN0cnVjdCBpdHNfZGV2ICppdHNfZGV2OworCisJVEFJTFFfRk9SRUFDSChpdHNfZGV2LCAmaXRz
X3NjLT5pdHNfZGV2X2xpc3QsIGVudHJ5KSB7CisJCWlmIChpcnEgPj0gaXRzX2Rldi0+bHBpcy5s
cGlfYmFzZSAmJgorCQkgICAgaXJxIDwgKGl0c19kZXYtPmxwaXMubHBpX2Jhc2UgKyBpdHNfZGV2
LT5scGlzLmxwaV9udW0pKSB7CisJCQlscGlfY29uZmlndXJlKGl0c19zYywgaXRzX2RldiwgaXJx
LCB1bm1hc2spOworCQkJcmV0dXJuOworCQl9CisJfQorCisJcGFuaWMoIlRyeWluZyB0byAlcyBu
b3QgZXhpc3RpbmcgTFBJOiAldVxuIiwKKwkgICAgKHVubWFzayA9PSBUUlVFKSA/ICJ1bm1hc2si
IDogIm1hc2siLCBpcnEpOworfQorCit2b2lkCitscGlfdW5tYXNrX2lycShkZXZpY2VfdCBwYXJl
bnQsIHVpbnQzMl90IGlycSkKK3sKKworCWxwaV94bWFza19pcnEocGFyZW50LCBpcnEsIDEpOwor
fQorCit2b2lkCitscGlfbWFza19pcnEoZGV2aWNlX3QgcGFyZW50LCB1aW50MzJfdCBpcnEpCit7
CisKKwlscGlfeG1hc2tfaXJxKHBhcmVudCwgaXJxLCAwKTsKK30KKworLyoKKyAqIENvbW1hbmRz
IGhhbmRsaW5nLgorICovCisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitjbWRfZm9ybWF0X2NvbW1h
bmQoc3RydWN0IGl0c19jbWQgKmNtZCwgdWludDhfdCBjbWRfdHlwZSkKK3sKKwkvKiBDb21tYW5k
IGZpZWxkOiBEVzAgWzc6MF0gKi8KKwljbWQtPmNtZF9kd29yZFswXSAmPSB+Q01EX0NPTU1BTkRf
TUFTSzsKKwljbWQtPmNtZF9kd29yZFswXSB8PSBjbWRfdHlwZTsKK30KKworc3RhdGljIF9faW5s
aW5lIHZvaWQKK2NtZF9mb3JtYXRfZGV2aWQoc3RydWN0IGl0c19jbWQgKmNtZCwgdWludDMyX3Qg
ZGV2aWQpCit7CisJLyogRGV2aWNlIElEIGZpZWxkOiBEVzAgWzYzOjMyXSAqLworCWNtZC0+Y21k
X2R3b3JkWzBdICY9IH5DTURfREVWSURfTUFTSzsKKwljbWQtPmNtZF9kd29yZFswXSB8PSAoKHVp
bnQ2NF90KWRldmlkIDw8IENNRF9ERVZJRF9TSElGVCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2
b2lkCitjbWRfZm9ybWF0X3NpemUoc3RydWN0IGl0c19jbWQgKmNtZCwgdWludDE2X3Qgc2l6ZSkK
K3sKKwkvKiBTaXplIGZpZWxkOiBEVzEgWzQ6MF0gKi8KKwljbWQtPmNtZF9kd29yZFsxXSAmPSB+
Q01EX1NJWkVfTUFTSzsKKwljbWQtPmNtZF9kd29yZFsxXSB8PSAoc2l6ZSAmIENNRF9TSVpFX01B
U0spOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAorY21kX2Zvcm1hdF9pZChzdHJ1Y3QgaXRz
X2NtZCAqY21kLCB1aW50MzJfdCBpZCkKK3sKKwkvKiBJRCBmaWVsZDogRFcxIFszMTowXSAqLwor
CWNtZC0+Y21kX2R3b3JkWzFdICY9IH5DTURfSURfTUFTSzsKKwljbWQtPmNtZF9kd29yZFsxXSB8
PSBpZDsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2NtZF9mb3JtYXRfcGlkKHN0cnVjdCBp
dHNfY21kICpjbWQsIHVpbnQzMl90IHBpZCkKK3sKKwkvKiBQaHlzaWNhbCBJRCBmaWVsZDogRFcx
IFs2MzozMl0gKi8KKwljbWQtPmNtZF9kd29yZFsxXSAmPSB+Q01EX1BJRF9NQVNLOworCWNtZC0+
Y21kX2R3b3JkWzFdIHw9ICgodWludDY0X3QpcGlkIDw8IENNRF9QSURfU0hJRlQpOworfQorCitz
dGF0aWMgX19pbmxpbmUgdm9pZAorY21kX2Zvcm1hdF9jb2woc3RydWN0IGl0c19jbWQgKmNtZCwg
dWludDE2X3QgY29sX2lkKQoreworCS8qIENvbGxlY3Rpb24gZmllbGQ6IERXMiBbMTY6MF0gKi8K
KwljbWQtPmNtZF9kd29yZFsyXSAmPSB+Q01EX0NPTF9NQVNLOworCWNtZC0+Y21kX2R3b3JkWzJd
IHw9IGNvbF9pZDsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2NtZF9mb3JtYXRfdGFyZ2V0
KHN0cnVjdCBpdHNfY21kICpjbWQsIHVpbnQ2NF90IHRhcmdldCkKK3sKKwkvKiBUYXJnZXQgQWRk
cmVzcyBmaWVsZDogRFcyIFs0NzoxNl0gKi8KKwljbWQtPmNtZF9kd29yZFsyXSAmPSB+Q01EX1RB
UkdFVF9NQVNLOworCWNtZC0+Y21kX2R3b3JkWzJdIHw9ICh0YXJnZXQgJiBDTURfVEFSR0VUX01B
U0spOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAorY21kX2Zvcm1hdF9pdHQoc3RydWN0IGl0
c19jbWQgKmNtZCwgdWludDY0X3QgaXR0KQoreworCS8qIElUVCBBZGRyZXNzIGZpZWxkOiBEVzIg
WzQ3OjhdICovCisJY21kLT5jbWRfZHdvcmRbMl0gJj0gfkNNRF9JVFRfTUFTSzsKKwljbWQtPmNt
ZF9kd29yZFsyXSB8PSAoaXR0ICYgQ01EX0lUVF9NQVNLKTsKK30KKworc3RhdGljIF9faW5saW5l
IHZvaWQKK2NtZF9mb3JtYXRfdmFsaWQoc3RydWN0IGl0c19jbWQgKmNtZCwgdWludDhfdCB2YWxp
ZCkKK3sKKwkvKiBWYWxpZCBmaWVsZDogRFcyIFs2M10gKi8KKwljbWQtPmNtZF9kd29yZFsyXSAm
PSB+Q01EX1ZBTElEX01BU0s7CisJY21kLT5jbWRfZHdvcmRbMl0gfD0gKCh1aW50NjRfdCl2YWxp
ZCA8PCBDTURfVkFMSURfU0hJRlQpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAorY21kX2Zp
eF9lbmRpYW4oc3RydWN0IGl0c19jbWQgKmNtZCkKK3sKKwlzaXplX3QgaTsKKworCWZvciAoaSA9
IDA7IGkgPCBuaXRlbXMoY21kLT5jbWRfZHdvcmQpOyBpKyspCisJCWNtZC0+Y21kX2R3b3JkW2ld
ID0gaHRvbGU2NChjbWQtPmNtZF9kd29yZFtpXSk7Cit9CisKK3N0YXRpYyB2b2lkCitpdHNfY21k
X21hcGMoc3RydWN0IGdpY192M19pdHNfc29mdGMgKnNjLCBzdHJ1Y3QgaXRzX2NvbCAqY29sLCB1
aW50OF90IHZhbGlkKQoreworCXN0cnVjdCBpdHNfY21kX2Rlc2MgZGVzYzsKKworCWRlc2MuY21k
X3R5cGUgPSBJVFNfQ01EX01BUEM7CisJZGVzYy5jbWRfZGVzY19tYXBjLmNvbCA9IGNvbDsKKwkv
KgorCSAqIFZhbGlkIGJpdCBzZXQgLSBtYXAgdGhlIGNvbGxlY3Rpb24uCisJICogVmFsaWQgYml0
IGNsZWFyZWQgLSB1bm1hcCB0aGUgY29sbGVjdGlvbi4KKwkgKi8KKwlkZXNjLmNtZF9kZXNjX21h
cGMudmFsaWQgPSB2YWxpZDsKKworCWl0c19jbWRfc2VuZChzYywgJmRlc2MpOworfQorCitzdGF0
aWMgdm9pZAoraXRzX2NtZF9tYXB2aShzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqc2MsIHN0cnVj
dCBpdHNfZGV2ICppdHNfZGV2LAorICAgIHVpbnQzMl90IGlkLCB1aW50MzJfdCBwaWQpCit7CisJ
c3RydWN0IGl0c19jbWRfZGVzYyBkZXNjOworCisJZGVzYy5jbWRfdHlwZSA9IElUU19DTURfTUFQ
Vkk7CisJZGVzYy5jbWRfZGVzY19tYXB2aS5pdHNfZGV2ID0gaXRzX2RldjsKKwlkZXNjLmNtZF9k
ZXNjX21hcHZpLmlkID0gaWQ7CisJZGVzYy5jbWRfZGVzY19tYXB2aS5waWQgPSBwaWQ7CisKKwlp
dHNfY21kX3NlbmQoc2MsICZkZXNjKTsKK30KKworc3RhdGljIHZvaWQgX191bnVzZWQKK2l0c19j
bWRfbWFwaShzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqc2MsIHN0cnVjdCBpdHNfZGV2ICppdHNf
ZGV2LAorICAgIHVpbnQzMl90IGxwaW51bSkKK3sKKwlzdHJ1Y3QgaXRzX2NtZF9kZXNjIGRlc2M7
CisKKwlkZXNjLmNtZF90eXBlID0gSVRTX0NNRF9NQVBJOworCWRlc2MuY21kX2Rlc2NfbWFwaS5p
dHNfZGV2ID0gaXRzX2RldjsKKwlkZXNjLmNtZF9kZXNjX21hcGkubHBpbnVtID0gbHBpbnVtOwor
CisJaXRzX2NtZF9zZW5kKHNjLCAmZGVzYyk7Cit9CisKK3N0YXRpYyB2b2lkCitpdHNfY21kX21h
cGQoc3RydWN0IGdpY192M19pdHNfc29mdGMgKnNjLCBzdHJ1Y3QgaXRzX2RldiAqaXRzX2RldiwK
KyAgICB1aW50OF90IHZhbGlkKQoreworCXN0cnVjdCBpdHNfY21kX2Rlc2MgZGVzYzsKKworCWRl
c2MuY21kX3R5cGUgPSBJVFNfQ01EX01BUEQ7CisJZGVzYy5jbWRfZGVzY19tYXBkLml0c19kZXYg
PSBpdHNfZGV2OworCWRlc2MuY21kX2Rlc2NfbWFwZC52YWxpZCA9IHZhbGlkOworCisJaXRzX2Nt
ZF9zZW5kKHNjLCAmZGVzYyk7Cit9CisKK3N0YXRpYyB2b2lkCitpdHNfY21kX2ludihzdHJ1Y3Qg
Z2ljX3YzX2l0c19zb2Z0YyAqc2MsIHN0cnVjdCBpdHNfZGV2ICppdHNfZGV2LAorICAgIHVpbnQz
Ml90IGxwaW51bSkKK3sKKwlzdHJ1Y3QgaXRzX2NtZF9kZXNjIGRlc2M7CisKKwlkZXNjLmNtZF90
eXBlID0gSVRTX0NNRF9JTlY7CisJZGVzYy5jbWRfZGVzY19pbnYubHBpbnVtID0gbHBpbnVtIC0g
aXRzX2Rldi0+bHBpcy5scGlfYmFzZTsKKwlkZXNjLmNtZF9kZXNjX2ludi5pdHNfZGV2ID0gaXRz
X2RldjsKKworCWl0c19jbWRfc2VuZChzYywgJmRlc2MpOworfQorCitzdGF0aWMgdm9pZAoraXRz
X2NtZF9pbnZhbGwoc3RydWN0IGdpY192M19pdHNfc29mdGMgKnNjLCBzdHJ1Y3QgaXRzX2NvbCAq
Y29sKQoreworCXN0cnVjdCBpdHNfY21kX2Rlc2MgZGVzYzsKKworCWRlc2MuY21kX3R5cGUgPSBJ
VFNfQ01EX0lOVkFMTDsKKwlkZXNjLmNtZF9kZXNjX2ludmFsbC5jb2wgPSBjb2w7CisKKwlpdHNf
Y21kX3NlbmQoc2MsICZkZXNjKTsKK30KKworLyoKKyAqIEhlbHBlciByb3V0aW5lcyBmb3IgY29t
bWFuZHMgcHJvY2Vzc2luZy4KKyAqLworc3RhdGljIF9faW5saW5lIGJvb2xlYW5fdAoraXRzX2Nt
ZF9xdWV1ZV9mdWxsKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICpzYykKK3sKKwlzaXplX3QgcmVh
ZF9pZHgsIHdyaXRlX2lkeDsKKworCXdyaXRlX2lkeCA9IChzaXplX3QpKHNjLT5pdHNfY21kcV93
cml0ZSAtIHNjLT5pdHNfY21kcV9iYXNlKTsKKwlyZWFkX2lkeCA9IGdpY19pdHNfcmVhZChzYywg
NCwgR0lUU19DUkVBRFIpIC8gc2l6ZW9mKHN0cnVjdCBpdHNfY21kKTsKKworCS8qCisJICogVGhl
IHF1ZXVlIGlzIGZ1bGwgd2hlbiB0aGUgd3JpdGUgb2Zmc2V0IHBvaW50cworCSAqIGF0IHRoZSBj
b21tYW5kIGJlZm9yZSB0aGUgY3VycmVudCByZWFkIG9mZnNldC4KKwkgKi8KKwlpZiAoKCh3cml0
ZV9pZHggKyAxKSAlIElUU19DTURRX05FTlRSSUVTKSA9PSByZWFkX2lkeCkKKwkJcmV0dXJuIChU
UlVFKTsKKworCXJldHVybiAoRkFMU0UpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAoraXRz
X2NtZF9zeW5jKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICpzYywgc3RydWN0IGl0c19jbWQgKmNt
ZCkKK3sKKworCWlmICgoc2MtPml0c19mbGFncyAmIElUU19GTEFHU19DTURRX0ZMVVNIKSAhPSAw
KSB7CisJCS8qIENsZWFuIEQtY2FjaGUgdW5kZXIgY29tbWFuZC4gKi8KKwkJY3B1X2RjYWNoZV93
Yl9yYW5nZSgodm1fb2Zmc2V0X3QpY21kLCBzaXplb2YoKmNtZCkpOworCX0gZWxzZSB7CisJCS8q
IERTQiBpbm5lciBzaGFyZWFibGUsIHN0b3JlICovCisJCWRzYihpc2hzdCk7CisJfQorCit9CisK
K3N0YXRpYyBzdHJ1Y3QgaXRzX2NtZCAqCitpdHNfY21kX2FsbG9jX2xvY2tlZChzdHJ1Y3QgZ2lj
X3YzX2l0c19zb2Z0YyAqc2MpCit7CisJc3RydWN0IGl0c19jbWQgKmNtZDsKKwlzaXplX3QgdXNf
bGVmdDsKKworCS8qCisJICogWFhYIEFSTTY0VE9ETzogVGhpcyBpcyBvYnZpb3VzbHkgYSBzaWdu
aWZpY2FudCBkZWxheS4KKwkgKiBUaGUgcmVhc29uIGZvciB0aGF0IGlzIHRoYXQgY3VycmVudGx5
IHRoZSB0aW1lIGZyYW1lcyBmb3IKKwkgKiB0aGUgY29tbWFuZCB0byBjb21wbGV0ZSAoYW5kIHRo
ZXJlZm9yZSBmcmVlIHRoZSBkZXNjcmlwdG9yKQorCSAqIGFyZSBub3Qga25vd24uCisJICovCisJ
dXNfbGVmdCA9IDEwMDAwMDA7CisKKwltdHhfYXNzZXJ0KCZzYy0+aXRzX3NwaW5fbXR4LCBNQV9P
V05FRCk7CisJd2hpbGUgKGl0c19jbWRfcXVldWVfZnVsbChzYykpIHsKKwkJaWYgKHVzX2xlZnQt
LSA9PSAwKSB7CisJCQkvKiBUaW1lb3V0IHdoaWxlIHdhaXRpbmcgZm9yIGZyZWUgY29tbWFuZCAq
LworCQkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2LAorCQkJICAgICJUaW1lb3V0IHdoaWxlIHdhaXRp
bmcgZm9yIGZyZWUgY29tbWFuZFxuIik7CisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJCURFTEFZ
KDEpOworCX0KKworCWNtZCA9IHNjLT5pdHNfY21kcV93cml0ZTsKKwlzYy0+aXRzX2NtZHFfd3Jp
dGUrKzsKKworCWlmIChzYy0+aXRzX2NtZHFfd3JpdGUgPT0gKHNjLT5pdHNfY21kcV9iYXNlICsg
SVRTX0NNRFFfTkVOVFJJRVMpKSB7CisJCS8qIFdyYXAgdGhlIHF1ZXVlICovCisJCXNjLT5pdHNf
Y21kcV93cml0ZSA9IHNjLT5pdHNfY21kcV9iYXNlOworCX0KKworCXJldHVybiAoY21kKTsKK30K
Kworc3RhdGljIHVpbnQ2NF90CitpdHNfY21kX3ByZXBhcmUoc3RydWN0IGl0c19jbWQgKmNtZCwg
c3RydWN0IGl0c19jbWRfZGVzYyAqZGVzYykKK3sKKwl1aW50NjRfdCB0YXJnZXQ7CisJdWludDhf
dCBjbWRfdHlwZTsKKwl1X2ludCBzaXplOworCWJvb2xlYW5fdCBlcnJvcjsKKworCWVycm9yID0g
RkFMU0U7CisJY21kX3R5cGUgPSBkZXNjLT5jbWRfdHlwZTsKKwl0YXJnZXQgPSBJVFNfVEFSR0VU
X05PTkU7CisKKwlzd2l0Y2ggKGNtZF90eXBlKSB7CisJY2FzZSBJVFNfQ01EX1NZTkM6CS8qIFdh
aXQgZm9yIHByZXZpb3VzIGNvbW1hbmRzIGNvbXBsZXRpb24gKi8KKwkJdGFyZ2V0ID0gZGVzYy0+
Y21kX2Rlc2Nfc3luYy5jb2wtPmNvbF90YXJnZXQ7CisJCWNtZF9mb3JtYXRfY29tbWFuZChjbWQs
IElUU19DTURfU1lOQyk7CisJCWNtZF9mb3JtYXRfdGFyZ2V0KGNtZCwgdGFyZ2V0KTsKKwkJYnJl
YWs7CisJY2FzZSBJVFNfQ01EX01BUEQ6CS8qIEFzc2lnbiBJVFQgdG8gZGV2aWNlICovCisJCXRh
cmdldCA9IGRlc2MtPmNtZF9kZXNjX21hcGQuaXRzX2Rldi0+Y29sLT5jb2xfdGFyZ2V0OworCQlj
bWRfZm9ybWF0X2NvbW1hbmQoY21kLCBJVFNfQ01EX01BUEQpOworCQljbWRfZm9ybWF0X2l0dChj
bWQsIHZ0b3BoeXMoZGVzYy0+Y21kX2Rlc2NfbWFwZC5pdHNfZGV2LT5pdHQpKTsKKwkJLyoKKwkJ
ICogU2l6ZSBkZXNjcmliZXMgbnVtYmVyIG9mIGJpdHMgdG8gZW5jb2RlIGludGVycnVwdCBJRHMK
KwkJICogc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UgbWludXMgb25lLgorCQkgKiBXaGVuIFYgKHZh
bGlkKSBiaXQgaXMgemVybywgdGhpcyBmaWVsZCBzaG91bGQgYmUgd3JpdHRlbgorCQkgKiBhcyB6
ZXJvLgorCQkgKi8KKwkJaWYgKGRlc2MtPmNtZF9kZXNjX21hcGQudmFsaWQgIT0gMCkgeworCQkJ
c2l6ZSA9IGZscyhkZXNjLT5jbWRfZGVzY19tYXBkLml0c19kZXYtPmxwaXMubHBpX251bSk7CisJ
CQlzaXplID0gTUFYKDEsIHNpemUpIC0gMTsKKwkJfSBlbHNlCisJCQlzaXplID0gMDsKKworCQlj
bWRfZm9ybWF0X3NpemUoY21kLCBzaXplKTsKKwkJY21kX2Zvcm1hdF9kZXZpZChjbWQsIGRlc2Mt
PmNtZF9kZXNjX21hcGQuaXRzX2Rldi0+ZGV2aWQpOworCQljbWRfZm9ybWF0X3ZhbGlkKGNtZCwg
ZGVzYy0+Y21kX2Rlc2NfbWFwZC52YWxpZCk7CisJCWJyZWFrOworCWNhc2UgSVRTX0NNRF9NQVBD
OgkvKiBNYXAgY29sbGVjdGlvbiB0byBSZS1EaXN0cmlidXRvciAqLworCQl0YXJnZXQgPSBkZXNj
LT5jbWRfZGVzY19tYXBjLmNvbC0+Y29sX3RhcmdldDsKKwkJY21kX2Zvcm1hdF9jb21tYW5kKGNt
ZCwgSVRTX0NNRF9NQVBDKTsKKwkJY21kX2Zvcm1hdF9jb2woY21kLCBkZXNjLT5jbWRfZGVzY19t
YXBjLmNvbC0+Y29sX2lkKTsKKwkJY21kX2Zvcm1hdF92YWxpZChjbWQsIGRlc2MtPmNtZF9kZXNj
X21hcGMudmFsaWQpOworCQljbWRfZm9ybWF0X3RhcmdldChjbWQsIHRhcmdldCk7CisJCWJyZWFr
OworCWNhc2UgSVRTX0NNRF9NQVBWSToKKwkJdGFyZ2V0ID0gZGVzYy0+Y21kX2Rlc2NfbWFwdmku
aXRzX2Rldi0+Y29sLT5jb2xfdGFyZ2V0OworCQljbWRfZm9ybWF0X2NvbW1hbmQoY21kLCBJVFNf
Q01EX01BUFZJKTsKKwkJY21kX2Zvcm1hdF9kZXZpZChjbWQsIGRlc2MtPmNtZF9kZXNjX21hcHZp
Lml0c19kZXYtPmRldmlkKTsKKwkJY21kX2Zvcm1hdF9pZChjbWQsIGRlc2MtPmNtZF9kZXNjX21h
cHZpLmlkKTsKKwkJY21kX2Zvcm1hdF9waWQoY21kLCBkZXNjLT5jbWRfZGVzY19tYXB2aS5waWQp
OworCQljbWRfZm9ybWF0X2NvbChjbWQsIGRlc2MtPmNtZF9kZXNjX21hcHZpLml0c19kZXYtPmNv
bC0+Y29sX2lkKTsKKwkJYnJlYWs7CisJY2FzZSBJVFNfQ01EX01BUEk6CisJCXRhcmdldCA9IGRl
c2MtPmNtZF9kZXNjX21hcGkuaXRzX2Rldi0+Y29sLT5jb2xfdGFyZ2V0OworCQljbWRfZm9ybWF0
X2NvbW1hbmQoY21kLCBJVFNfQ01EX01BUEkpOworCQljbWRfZm9ybWF0X2RldmlkKGNtZCwgZGVz
Yy0+Y21kX2Rlc2NfbWFwaS5pdHNfZGV2LT5kZXZpZCk7CisJCWNtZF9mb3JtYXRfaWQoY21kLCBk
ZXNjLT5jbWRfZGVzY19tYXBpLmxwaW51bSk7CisJCWNtZF9mb3JtYXRfY29sKGNtZCwgZGVzYy0+
Y21kX2Rlc2NfbWFwaS5pdHNfZGV2LT5jb2wtPmNvbF9pZCk7CisJCWJyZWFrOworCWNhc2UgSVRT
X0NNRF9JTlY6CisJCXRhcmdldCA9IGRlc2MtPmNtZF9kZXNjX2ludi5pdHNfZGV2LT5jb2wtPmNv
bF90YXJnZXQ7CisJCWNtZF9mb3JtYXRfY29tbWFuZChjbWQsIElUU19DTURfSU5WKTsKKwkJY21k
X2Zvcm1hdF9kZXZpZChjbWQsIGRlc2MtPmNtZF9kZXNjX2ludi5pdHNfZGV2LT5kZXZpZCk7CisJ
CWNtZF9mb3JtYXRfaWQoY21kLCBkZXNjLT5jbWRfZGVzY19pbnYubHBpbnVtKTsKKwkJYnJlYWs7
CisJY2FzZSBJVFNfQ01EX0lOVkFMTDoKKwkJY21kX2Zvcm1hdF9jb21tYW5kKGNtZCwgSVRTX0NN
RF9JTlZBTEwpOworCQljbWRfZm9ybWF0X2NvbChjbWQsIGRlc2MtPmNtZF9kZXNjX2ludmFsbC5j
b2wtPmNvbF9pZCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVycm9yID0gVFJVRTsKKwkJYnJl
YWs7CisJfQorCisJaWYgKCFlcnJvcikKKwkJY21kX2ZpeF9lbmRpYW4oY21kKTsKKworCXJldHVy
biAodGFyZ2V0KTsKK30KKworc3RhdGljIF9faW5saW5lIHVpbnQ2NF90CitpdHNfY21kX2N3cml0
ZXJfb2Zmc2V0KHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICpzYywgc3RydWN0IGl0c19jbWQgKmNt
ZCkKK3sKKwl1aW50NjRfdCBvZmY7CisKKwlvZmYgPSAoY21kIC0gc2MtPml0c19jbWRxX2Jhc2Up
ICogc2l6ZW9mKCpjbWQpOworCisJcmV0dXJuIChvZmYpOworfQorCitzdGF0aWMgdm9pZAoraXRz
X2NtZF93YWl0X2NvbXBsZXRpb24oc3RydWN0IGdpY192M19pdHNfc29mdGMgKnNjLCBzdHJ1Y3Qg
aXRzX2NtZCAqY21kX2ZpcnN0LAorICAgIHN0cnVjdCBpdHNfY21kICpjbWRfbGFzdCkKK3sKKwl1
aW50NjRfdCBmaXJzdCwgbGFzdCwgcmVhZDsKKwlzaXplX3QgdXNfbGVmdDsKKworCS8qCisJICog
WFhYIEFSTTY0VE9ETzogVGhpcyBpcyBvYnZpb3VzbHkgYSBzaWduaWZpY2FudCBkZWxheS4KKwkg
KiBUaGUgcmVhc29uIGZvciB0aGF0IGlzIHRoYXQgY3VycmVudGx5IHRoZSB0aW1lIGZyYW1lcyBm
b3IKKwkgKiB0aGUgY29tbWFuZCB0byBjb21wbGV0ZSBhcmUgbm90IGtub3duLgorCSAqLworCXVz
X2xlZnQgPSAxMDAwMDAwOworCisJZmlyc3QgPSBpdHNfY21kX2N3cml0ZXJfb2Zmc2V0KHNjLCBj
bWRfZmlyc3QpOworCWxhc3QgPSBpdHNfY21kX2N3cml0ZXJfb2Zmc2V0KHNjLCBjbWRfbGFzdCk7
CisKKwlmb3IgKDs7KSB7CisJCXJlYWQgPSBnaWNfaXRzX3JlYWQoc2MsIDgsIEdJVFNfQ1JFQURS
KTsKKwkJaWYgKHJlYWQgPCBmaXJzdCB8fCByZWFkID49IGxhc3QpCisJCQlicmVhazsKKworCQlp
ZiAodXNfbGVmdC0tID09IDApIHsKKwkJCS8qIFRoaXMgbWVhbnMgdGltZW91dCAqLworCQkJZGV2
aWNlX3ByaW50ZihzYy0+ZGV2LAorCQkJICAgICJUaW1lb3V0IHdoaWxlIHdhaXRpbmcgZm9yIENN
RCBjb21wbGV0aW9uLlxuIik7CisJCQlyZXR1cm47CisJCX0KKwkJREVMQVkoMSk7CisJfQorfQor
CitzdGF0aWMgaW50CitpdHNfY21kX3NlbmQoc3RydWN0IGdpY192M19pdHNfc29mdGMgKnNjLCBz
dHJ1Y3QgaXRzX2NtZF9kZXNjICpkZXNjKQoreworCXN0cnVjdCBpdHNfY21kICpjbWQsICpjbWRf
c3luYzsKKwlzdHJ1Y3QgaXRzX2NvbCBjb2xfc3luYzsKKwlzdHJ1Y3QgaXRzX2NtZF9kZXNjIGRl
c2Nfc3luYzsKKwl1aW50NjRfdCB0YXJnZXQsIGN3cml0ZXI7CisKKwltdHhfbG9ja19zcGluKCZz
Yy0+aXRzX3NwaW5fbXR4KTsKKwljbWQgPSBpdHNfY21kX2FsbG9jX2xvY2tlZChzYyk7CisJbXR4
X3VubG9ja19zcGluKCZzYy0+aXRzX3NwaW5fbXR4KTsKKwlpZiAoY21kID09IE5VTEwpIHsKKwkJ
ZGV2aWNlX3ByaW50ZihzYy0+ZGV2LCAiY291bGQgbm90IGFsbG9jYXRlIElUUyBjb21tYW5kXG4i
KTsKKwkJcmV0dXJuIChFQlVTWSk7CisJfQorCisJdGFyZ2V0ID0gaXRzX2NtZF9wcmVwYXJlKGNt
ZCwgZGVzYyk7CisJaXRzX2NtZF9zeW5jKHNjLCBjbWQpOworCisJaWYgKHRhcmdldCAhPSBJVFNf
VEFSR0VUX05PTkUpIHsKKwkJbXR4X2xvY2tfc3Bpbigmc2MtPml0c19zcGluX210eCk7CisJCWNt
ZF9zeW5jID0gaXRzX2NtZF9hbGxvY19sb2NrZWQoc2MpOworCQltdHhfdW5sb2NrX3NwaW4oJnNj
LT5pdHNfc3Bpbl9tdHgpOworCQlpZiAoY21kX3N5bmMgPT0gTlVMTCkKKwkJCWdvdG8gZW5kOwor
CQlkZXNjX3N5bmMuY21kX3R5cGUgPSBJVFNfQ01EX1NZTkM7CisJCWNvbF9zeW5jLmNvbF90YXJn
ZXQgPSB0YXJnZXQ7CisJCWRlc2Nfc3luYy5jbWRfZGVzY19zeW5jLmNvbCA9ICZjb2xfc3luYzsK
KwkJaXRzX2NtZF9wcmVwYXJlKGNtZF9zeW5jLCAmZGVzY19zeW5jKTsKKwkJaXRzX2NtZF9zeW5j
KHNjLCBjbWRfc3luYyk7CisJfQorZW5kOgorCS8qIFVwZGF0ZSBHSVRTX0NXUklURVIgKi8KKwlt
dHhfbG9ja19zcGluKCZzYy0+aXRzX3NwaW5fbXR4KTsKKwljd3JpdGVyID0gaXRzX2NtZF9jd3Jp
dGVyX29mZnNldChzYywgc2MtPml0c19jbWRxX3dyaXRlKTsKKwlnaWNfaXRzX3dyaXRlKHNjLCA4
LCBHSVRTX0NXUklURVIsIGN3cml0ZXIpOworCW10eF91bmxvY2tfc3Bpbigmc2MtPml0c19zcGlu
X210eCk7CisKKwlpdHNfY21kX3dhaXRfY29tcGxldGlvbihzYywgY21kLCBzYy0+aXRzX2NtZHFf
d3JpdGUpOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIHN0cnVjdCBpdHNfZGV2ICoKK2l0
c19kZXZpY2VfZmluZF9sb2NrZWQoc3RydWN0IGdpY192M19pdHNfc29mdGMgKnNjLCBkZXZpY2Vf
dCBwY2lfZGV2KQoreworCXN0cnVjdCBpdHNfZGV2ICppdHNfZGV2OworCisJbXR4X2Fzc2VydCgm
c2MtPml0c19tdHgsIE1BX09XTkVEKTsKKwkvKiBGaW5kIGV4aXN0aW5nIGRldmljZSBpZiBhbnkg
Ki8KKwlUQUlMUV9GT1JFQUNIKGl0c19kZXYsICZzYy0+aXRzX2Rldl9saXN0LCBlbnRyeSkgewor
CQlpZiAoaXRzX2Rldi0+cGNpX2RldiA9PSBwY2lfZGV2KQorCQkJcmV0dXJuIChpdHNfZGV2KTsK
Kwl9CisKKwlyZXR1cm4gKE5VTEwpOworfQorCitzdGF0aWMgc3RydWN0IGl0c19kZXYgKgoraXRz
X2RldmljZV9hbGxvY19sb2NrZWQoc3RydWN0IGdpY192M19pdHNfc29mdGMgKnNjLCBkZXZpY2Vf
dCBwY2lfZGV2LAorICAgIHVfaW50IG52ZWNzKQoreworCXN0cnVjdCBpdHNfZGV2ICpuZXdkZXY7
CisJdWludDY0X3QgdHlwZXI7CisJdWludDMyX3QgZGV2aWQ7CisJdV9pbnQgY3B1aWQ7CisJc2l6
ZV90IGVzaXplOworCisJbXR4X2Fzc2VydCgmc2MtPml0c19tdHgsIE1BX09XTkVEKTsKKwkvKiBG
aW5kIGV4aXN0aW5nIGRldmljZSBpZiBhbnkgKi8KKwluZXdkZXYgPSBpdHNfZGV2aWNlX2ZpbmRf
bG9ja2VkKHNjLCBwY2lfZGV2KTsKKwlpZiAobmV3ZGV2ICE9IE5VTEwpCisJCXJldHVybiAobmV3
ZGV2KTsKKworCWRldmlkID0gUENJX0RFVklEKHBjaV9kZXYpOworCisJLyogVGhlcmUgd2FzIG5v
IHByZXZpb3VzbHkgY3JlYXRlZCBkZXZpY2UuIENyZWF0ZSBvbmUgbm93ICovCisJbmV3ZGV2ID0g
bWFsbG9jKHNpemVvZigqbmV3ZGV2KSwgTV9HSUNfVjNfSVRTLCAoTV9XQUlUT0sgfCBNX1pFUk8p
KTsKKwluZXdkZXYtPnBjaV9kZXYgPSBwY2lfZGV2OworCW5ld2Rldi0+ZGV2aWQgPSBkZXZpZDsK
KworCWlmIChscGlfYWxsb2NfY2h1bmsoc2MsICZuZXdkZXYtPmxwaXMsIG52ZWNzKSAhPSAwKSB7
CisJCWZyZWUobmV3ZGV2LCBNX0dJQ19WM19JVFMpOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwor
CS8qIEdldCBJVFQgZW50cnkgc2l6ZSAqLworCXR5cGVyID0gZ2ljX2l0c19yZWFkKHNjLCA4LCBH
SVRTX1RZUEVSKTsKKwllc2l6ZSA9IEdJVFNfVFlQRVJfSVRURVModHlwZXIpOworCS8qCisJICog
QWxsb2NhdGUgSVRUIGZvciB0aGlzIGRldmljZS4KKwkgKiBQQSBoYXMgdG8gYmUgMjU2IEIgYWxp
Z25lZC4gQXQgbGVhc3QgdHdvIGVudHJpZXMgZm9yIGRldmljZS4KKwkgKi8KKwluZXdkZXYtPml0
dCA9ICh2bV9vZmZzZXRfdCljb250aWdtYWxsb2MoCisJICAgIHJvdW5kdXAyKHJvdW5kdXAyKG52
ZWNzLCAyKSAqIGVzaXplLCAweDEwMCksIE1fR0lDX1YzX0lUUywKKwkgICAgKE1fV0FJVE9LIHwg
TV9aRVJPKSwgMCwgfjBVTCwgMHgxMDAsIDApOworCisJLyoKKwkgKiBYWFggQVJNNjRUT0RPOiBD
dXJyZW50bHkgYWxsIGludGVycnVwdHMgYXJlIGdvaW5nCisJICogdG8gYmUgYm91bmQgdG8gdGhl
IENQVSB0aGF0IHBlcmZvcm1zIHRoZSBjb25maWd1cmF0aW9uLgorCSAqLworCWNwdWlkID0gUENQ
VV9HRVQoY3B1aWQpOworCW5ld2Rldi0+Y29sID0gJnNjLT5pdHNfY29sc1tjcHVpZF07CisKKwlU
QUlMUV9JTlNFUlRfVEFJTCgmc2MtPml0c19kZXZfbGlzdCwgbmV3ZGV2LCBlbnRyeSk7CisKKwkv
KiBNYXAgZGV2aWNlIHRvIGl0cyBJVFQgKi8KKwlpdHNfY21kX21hcGQoc2MsIG5ld2RldiwgMSk7
CisKKwlyZXR1cm4gKG5ld2Rldik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitpdHNfZGV2
aWNlX2FzaWduX2xwaV9sb2NrZWQoc3RydWN0IGdpY192M19pdHNfc29mdGMgKnNjLAorICAgIHN0
cnVjdCBpdHNfZGV2ICppdHNfZGV2LCB1X2ludCAqaXJxKQoreworCisJbXR4X2Fzc2VydCgmc2Mt
Pml0c19tdHgsIE1BX09XTkVEKTsKKwlpZiAoaXRzX2Rldi0+bHBpcy5scGlfZnJlZSA9PSAwKSB7
CisJCXBhbmljKCJSZXF1ZXN0aW5nIG1vcmUgTFBJcyB0aGFuIGFsbG9jYXRlZCBmb3IgdGhpcyBk
ZXZpY2UuICIKKwkJICAgICJMUEkgbnVtOiAldSwgZnJlZSAldSIsIGl0c19kZXYtPmxwaXMubHBp
X251bSwKKwkJICAgIGl0c19kZXYtPmxwaXMubHBpX2ZyZWUpOworCX0KKwkqaXJxID0gaXRzX2Rl
di0+bHBpcy5scGlfYmFzZSArIChpdHNfZGV2LT5scGlzLmxwaV9udW0gLQorCSAgICBpdHNfZGV2
LT5scGlzLmxwaV9mcmVlKTsKKwlpdHNfZGV2LT5scGlzLmxwaV9mcmVlLS07Cit9CisvKgorICog
TWVzc2FnZSBzaWduYWxsZWQgaW50ZXJydXB0cyBoYW5kbGluZy4KKyAqLworCisvKgorICogWFhY
IEFSTTY0VE9ETzogV2F0Y2ggb3V0IGZvciAiaXJxIiB0eXBlLgorICoKKyAqIEluIHRoZW9yeSBH
SUMgY2FuIGhhbmRsZSB1cCB0byAoMl4zMiAtIDEpIGludGVycnVwdCBJRHMgd2hlcmVhcworICog
d2UgcGFzcyAiaXJxIiBwb2ludGVyIG9mIHR5cGUgaW50ZWdlci4gVGhpcyBpcyBvYnZpb3VzbHkg
d3JvbmcgYnV0CisgKiBpcyBkZXRlcm1pbmVkIGJ5IHRoZSB3YXkgYXMgUENJIGxheWVyIHdhbnRz
IGl0IHRvIGJlIGRvbmUuCisgKi8KK2ludAorZ2ljX3YzX2l0c19hbGxvY19tc2l4KGRldmljZV90
IGRldiwgZGV2aWNlX3QgcGNpX2RldiwgaW50ICppcnEpCit7CisJc3RydWN0IGdpY192M19pdHNf
c29mdGMgKnNjOworCXN0cnVjdCBpdHNfZGV2ICppdHNfZGV2OworCXVfaW50IG52ZWNzOworCisJ
c2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisKKwltdHhfbG9jaygmc2MtPml0c19tdHgpOwor
CW52ZWNzID0gUENJX01TSVhfTlVNKHBjaV9kZXYpOworCisJLyoKKwkgKiBBbGxvY2F0ZSBkZXZp
Y2UgYXMgc2VlbiBieSBJVFMgaWYgbm90IGFscmVhZHkgYXZhaWxhYmxlLgorCSAqIE5vdGljZSB0
aGF0IE1TSS1YIGludGVycnVwdHMgYXJlIGFsbG9jYXRlZCBvbiBvbmUtYnktb25lIGJhc2lzLgor
CSAqLworCWl0c19kZXYgPSBpdHNfZGV2aWNlX2FsbG9jX2xvY2tlZChzYywgcGNpX2RldiwgbnZl
Y3MpOworCWlmIChpdHNfZGV2ID09IE5VTEwpIHsKKwkJbXR4X3VubG9jaygmc2MtPml0c19tdHgp
OworCQlyZXR1cm4gKEVOT01FTSk7CisJfQorCisJaXRzX2RldmljZV9hc2lnbl9scGlfbG9ja2Vk
KHNjLCBpdHNfZGV2LCBpcnEpOworCW10eF91bmxvY2soJnNjLT5pdHNfbXR4KTsKKworCXJldHVy
biAoMCk7Cit9CisKK2ludAorZ2ljX3YzX2l0c19hbGxvY19tc2koZGV2aWNlX3QgZGV2LCBkZXZp
Y2VfdCBwY2lfZGV2LCBpbnQgY291bnQsIGludCAqaXJxcykKK3sKKwlzdHJ1Y3QgZ2ljX3YzX2l0
c19zb2Z0YyAqc2M7CisJc3RydWN0IGl0c19kZXYgKml0c19kZXY7CisKKwlzYyA9IGRldmljZV9n
ZXRfc29mdGMoZGV2KTsKKworCS8qIEFsbG9jYXRlIGRldmljZSBhcyBzZWVuIGJ5IElUUyBpZiBu
b3QgYWxyZWFkeSBhdmFpbGFibGUuICovCisJbXR4X2xvY2soJnNjLT5pdHNfbXR4KTsKKwlpdHNf
ZGV2ID0gaXRzX2RldmljZV9hbGxvY19sb2NrZWQoc2MsIHBjaV9kZXYsIGNvdW50KTsKKwlpZiAo
aXRzX2RldiA9PSBOVUxMKSB7CisJCW10eF91bmxvY2soJnNjLT5pdHNfbXR4KTsKKwkJcmV0dXJu
IChFTk9NRU0pOworCX0KKworCWZvciAoOyBjb3VudCA+IDA7IGNvdW50LS0pIHsKKwkJaXRzX2Rl
dmljZV9hc2lnbl9scGlfbG9ja2VkKHNjLCBpdHNfZGV2LCBpcnFzKTsKKwkJaXJxcysrOworCX0K
KwltdHhfdW5sb2NrKCZzYy0+aXRzX210eCk7CisKKwlyZXR1cm4gKDApOworfQorCitpbnQKK2dp
Y192M19pdHNfbWFwX21zaXgoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBwY2lfZGV2LCBpbnQgaXJx
LCB1aW50NjRfdCAqYWRkciwKKyAgICB1aW50MzJfdCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZ2ljX3Yz
X2l0c19zb2Z0YyAqc2M7CisJYnVzX3NwYWNlX2hhbmRsZV90IGl0c19ic2g7CisJc3RydWN0IGl0
c19kZXYgKml0c19kZXY7CisJdWludDY0X3QgaXRzX3BhOworCXVpbnQzMl90IGlkOworCisJc2Mg
PSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJLyogVmVyaWZ5IHRoYXQgdGhpcyBkZXZpY2UgaXMg
YWxsb2NhdGVkIGFuZCBvd25zIHRoaXMgTFBJICovCisJbXR4X2xvY2soJnNjLT5pdHNfbXR4KTsK
KwlpdHNfZGV2ID0gaXRzX2RldmljZV9maW5kX2xvY2tlZChzYywgcGNpX2Rldik7CisJbXR4X3Vu
bG9jaygmc2MtPml0c19tdHgpOworCWlmIChpdHNfZGV2ID09IE5VTEwpCisJCXJldHVybiAoRUlO
VkFMKTsKKworCWlkID0gaXJxIC0gaXRzX2Rldi0+bHBpcy5scGlfYmFzZTsKKwlscGlfbWFwX3Rv
X2RldmljZShzYywgaXRzX2RldiwgaWQsIGlycSk7CisKKwlpdHNfYnNoID0gcm1hbl9nZXRfYnVz
aGFuZGxlKCZzYy0+aXRzX3Jlc1swXSk7CisJaXRzX3BhID0gdnRvcGh5cyhpdHNfYnNoKTsKKwor
CSphZGRyID0gKGl0c19wYSArIEdJVFNfVFJBTlNMQVRFUik7CisJKmRhdGEgPSBpZDsKKworCXJl
dHVybiAoMCk7Cit9CmRpZmYgLS1naXQgYS9zeXMvYXJtNjQvYXJtNjQvZ2ljX3YzX2ZkdC5jIGIv
c3lzL2FybTY0L2FybTY0L2dpY192M19mZHQuYwotLS0gYS9zeXMvYXJtNjQvYXJtNjQvZ2ljX3Yz
X2ZkdC5jCisrKyBiL3N5cy9hcm02NC9hcm02NC9naWNfdjNfZmR0LmMKQEAgLTM1LDYgKzM1LDgg
QEAKICNpbmNsdWRlIDxzeXMva2VybmVsLmg+CiAjaW5jbHVkZSA8c3lzL21vZHVsZS5oPgogCisj
aW5jbHVkZSA8bWFjaGluZS9yZXNvdXJjZS5oPgorCiAjaW5jbHVkZSA8ZGV2L2ZkdC9mZHRfY29t
bW9uLmg+CiAjaW5jbHVkZSA8ZGV2L29mdy9vcGVuZmlybS5oPgogI2luY2x1ZGUgPGRldi9vZncv
b2Z3X2J1cy5oPgpAQCAtNTEsMTEgKzUzLDI3IEBACiBzdGF0aWMgaW50IGdpY192M19mZHRfcHJv
YmUoZGV2aWNlX3QpOwogc3RhdGljIGludCBnaWNfdjNfZmR0X2F0dGFjaChkZXZpY2VfdCk7CiAK
K3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKmdpY192M19vZndfYnVzX2FsbG9jX3JlcyhkZXZpY2Vf
dCwgZGV2aWNlX3QsIGludCwgaW50ICosCisgICAgdV9sb25nLCB1X2xvbmcsIHVfbG9uZywgdV9p
bnQpOworc3RhdGljIGNvbnN0IHN0cnVjdCBvZndfYnVzX2RldmluZm8gKmdpY192M19vZndfZ2V0
X2RldmluZm8oZGV2aWNlX3QsIGRldmljZV90KTsKKwogc3RhdGljIGRldmljZV9tZXRob2RfdCBn
aWNfdjNfZmR0X21ldGhvZHNbXSA9IHsKIAkvKiBEZXZpY2UgaW50ZXJmYWNlICovCiAJREVWTUVU
SE9EKGRldmljZV9wcm9iZSwJCWdpY192M19mZHRfcHJvYmUpLAogCURFVk1FVEhPRChkZXZpY2Vf
YXR0YWNoLAlnaWNfdjNfZmR0X2F0dGFjaCksCiAKKwkvKiBCdXMgaW50ZXJmYWNlICovCisJREVW
TUVUSE9EKGJ1c19hbGxvY19yZXNvdXJjZSwJCWdpY192M19vZndfYnVzX2FsbG9jX3JlcyksCisJ
REVWTUVUSE9EKGJ1c19hY3RpdmF0ZV9yZXNvdXJjZSwJYnVzX2dlbmVyaWNfYWN0aXZhdGVfcmVz
b3VyY2UpLAorCisJLyogb2Z3X2J1cyBpbnRlcmZhY2UgKi8KKwlERVZNRVRIT0Qob2Z3X2J1c19n
ZXRfZGV2aW5mbywJZ2ljX3YzX29md19nZXRfZGV2aW5mbyksCisJREVWTUVUSE9EKG9md19idXNf
Z2V0X2NvbXBhdCwJb2Z3X2J1c19nZW5fZ2V0X2NvbXBhdCksCisJREVWTUVUSE9EKG9md19idXNf
Z2V0X21vZGVsLAlvZndfYnVzX2dlbl9nZXRfbW9kZWwpLAorCURFVk1FVEhPRChvZndfYnVzX2dl
dF9uYW1lLAlvZndfYnVzX2dlbl9nZXRfbmFtZSksCisJREVWTUVUSE9EKG9md19idXNfZ2V0X25v
ZGUsCW9md19idXNfZ2VuX2dldF9ub2RlKSwKKwlERVZNRVRIT0Qob2Z3X2J1c19nZXRfdHlwZSwJ
b2Z3X2J1c19nZW5fZ2V0X3R5cGUpLAorCiAJLyogRW5kICovCiAJREVWTUVUSE9EX0VORAogfTsK
QEAgLTcxLDYgKzg5LDExIEBACiAgICAgMCwgMCwgQlVTX1BBU1NfSU5URVJSVVBUICsgQlVTX1BB
U1NfT1JERVJfTUlERExFKTsKIAogLyoKKyAqIEhlbHBlciBmdW5jdGlvbnMgZGVjbGFyYXRpb25z
LgorICovCitzdGF0aWMgaW50IGdpY192M19vZndfYnVzX2F0dGFjaChkZXZpY2VfdCk7CisKKy8q
CiAgKiBEZXZpY2UgaW50ZXJmYWNlLgogICovCiBzdGF0aWMgaW50CkBAIC0xMDksNiArMTMyLDE3
IEBACiAJZXJyID0gZ2ljX3YzX2F0dGFjaChkZXYpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyb3I7
CisJLyoKKwkgKiBUcnkgdG8gcmVnaXN0ZXIgSVRTIHRvIHRoaXMgR0lDLgorCSAqIEdJQyB3aWxs
IGFjdCBhcyBhIGJ1cyBpbiB0aGF0IGNhc2UuCisJICogRmFpbHVyZSBoZXJlIHdpbGwgbm90IGFm
ZmVjdCBtYWluIEdJQyBmdW5jdGlvbmFsaXR5LgorCSAqLworCWlmIChnaWNfdjNfb2Z3X2J1c19h
dHRhY2goZGV2KSAhPSAwKSB7CisJCWlmIChib290dmVyYm9zZSkgeworCQkJZGV2aWNlX3ByaW50
ZihkZXYsCisJCQkgICAgIkZhaWxlZCB0byBhdHRhY2ggSVRTIHRvIHRoaXMgR0lDXG4iKTsKKwkJ
fQorCX0KIAogCXJldHVybiAoZXJyKTsKIApAQCAtMTIyLDMgKzE1NiwxNTUgQEAKIAogCXJldHVy
biAoZXJyKTsKIH0KKworLyogT0ZXIGJ1cyBpbnRlcmZhY2UgKi8KK3N0cnVjdCBnaWNfdjNfb2Z3
X2RldmluZm8geworCXN0cnVjdCBvZndfYnVzX2RldmluZm8JZGlfZGluZm87CisJc3RydWN0IHJl
c291cmNlX2xpc3QJZGlfcmw7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9md19idXNfZGV2
aW5mbyAqCitnaWNfdjNfb2Z3X2dldF9kZXZpbmZvKGRldmljZV90IGJ1cyBfX3VudXNlZCwgZGV2
aWNlX3QgY2hpbGQpCit7CisJc3RydWN0IGdpY192M19vZndfZGV2aW5mbyAqZGk7CisKKwlkaSA9
IGRldmljZV9nZXRfaXZhcnMoY2hpbGQpOworCXJldHVybiAoJmRpLT5kaV9kaW5mbyk7Cit9CisK
K3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKgorZ2ljX3YzX29md19idXNfYWxsb2NfcmVzKGRldmlj
ZV90IGJ1cywgZGV2aWNlX3QgY2hpbGQsIGludCB0eXBlLCBpbnQgKnJpZCwKKyAgICB1X2xvbmcg
c3RhcnQsIHVfbG9uZyBlbmQsIHVfbG9uZyBjb3VudCwgdV9pbnQgZmxhZ3MpCit7CisJc3RydWN0
IGdpY192M19vZndfZGV2aW5mbyAqZGk7CisJc3RydWN0IHJlc291cmNlX2xpc3RfZW50cnkgKnJs
ZTsKKwlpbnQgcmFuZ2VzX2xlbjsKKworCWlmICgoc3RhcnQgPT0gMFVMKSAmJiAoZW5kID09IH4w
VUwpKSB7CisJCWlmICgoZGkgPSBkZXZpY2VfZ2V0X2l2YXJzKGNoaWxkKSkgPT0gTlVMTCkKKwkJ
CXJldHVybiAoTlVMTCk7CisJCWlmICh0eXBlICE9IFNZU19SRVNfTUVNT1JZKQorCQkJcmV0dXJu
IChOVUxMKTsKKworCQkvKiBGaW5kIGRlZmF1bHRzIGZvciB0aGlzIHJpZCAqLworCQlybGUgPSBy
ZXNvdXJjZV9saXN0X2ZpbmQoJmRpLT5kaV9ybCwgdHlwZSwgKnJpZCk7CisJCWlmIChybGUgPT0g
TlVMTCkKKwkJCXJldHVybiAoTlVMTCk7CisKKwkJc3RhcnQgPSBybGUtPnN0YXJ0OworCQllbmQg
PSBybGUtPmVuZDsKKwkJY291bnQgPSBybGUtPmNvdW50OworCX0KKwkvKgorCSAqIFhYWDogTm8g
cmFuZ2VzIHJlbWFwIQorCSAqCUFic29sdXRlIGFkZHJlc3MgaXMgZXhwZWN0ZWQuCisJICovCisJ
aWYgKG9md19idXNfaGFzX3Byb3AoYnVzLCAicmFuZ2VzIikpIHsKKwkJcmFuZ2VzX2xlbiA9IE9G
X2dldHByb3BsZW4ob2Z3X2J1c19nZXRfbm9kZShidXMpLCAicmFuZ2VzIik7CisJCWlmIChyYW5n
ZXNfbGVuICE9IDApIHsKKwkJCWlmIChib290dmVyYm9zZSkgeworCQkJCWRldmljZV9wcmludGYo
Y2hpbGQsCisJCQkJICAgICJSYW5nZXMgcmVtYXAgbm90IHN1cHBvcnRlZFxuIik7CisJCQl9CisJ
CQlyZXR1cm4gKE5VTEwpOworCQl9CisJfQorCXJldHVybiAoYnVzX2dlbmVyaWNfYWxsb2NfcmVz
b3VyY2UoYnVzLCBjaGlsZCwgdHlwZSwgcmlkLCBzdGFydCwgZW5kLAorCSAgICBjb3VudCwgZmxh
Z3MpKTsKK30KKworLyogSGVscGVyIGZ1bmN0aW9ucyAqLworCisvKgorICogQnVzIGNhcGFiaWxp
dHkgc3VwcG9ydCBmb3IgR0lDdjMuCisgKiBDb2xsZWN0cyBhbmQgY29uZmlndXJlcyBkZXZpY2Ug
aW5mb3JtYXRpb25zIGFuZCBmaW5hbGx5CisgKiBhZGRzIElUUyBkZXZpY2UgYXMgYSBjaGlsZCBv
ZiBHSUN2MyBpbiBOZXdidXMgaGllcmFyY2h5LgorICovCitzdGF0aWMgaW50CitnaWNfdjNfb2Z3
X2J1c19hdHRhY2goZGV2aWNlX3QgZGV2KQoreworCXN0cnVjdCBnaWNfdjNfb2Z3X2RldmluZm8g
KmRpOworCWRldmljZV90IGNoaWxkOworCXBoYW5kbGVfdCBwYXJlbnQsIG5vZGU7CisJcGNlbGxf
dCBhZGRyX2NlbGxzLCBzaXplX2NlbGxzOworCisJcGFyZW50ID0gb2Z3X2J1c19nZXRfbm9kZShk
ZXYpOworCWlmIChwYXJlbnQgPiAwKSB7CisJCWFkZHJfY2VsbHMgPSAyOworCQlPRl9nZXRlbmNw
cm9wKHBhcmVudCwgIiNhZGRyZXNzLWNlbGxzIiwgJmFkZHJfY2VsbHMsCisJCSAgICBzaXplb2Yo
YWRkcl9jZWxscykpOworCQlzaXplX2NlbGxzID0gMjsKKwkJT0ZfZ2V0ZW5jcHJvcChwYXJlbnQs
ICIjc2l6ZS1jZWxscyIsICZzaXplX2NlbGxzLAorCQkgICAgc2l6ZW9mKHNpemVfY2VsbHMpKTsK
KwkJLyogSXRlcmF0ZSB0aHJvdWdoIGFsbCBHSUMgc3Vib3JkaW5hdGVzICovCisJCWZvciAobm9k
ZSA9IE9GX2NoaWxkKHBhcmVudCk7IG5vZGUgPiAwOyBub2RlID0gT0ZfcGVlcihub2RlKSkgewor
CQkJLyogQWxsb2NhdGUgYW5kIHBvcHVsYXRlIGRldmluZm8uICovCisJCQlkaSA9IG1hbGxvYyhz
aXplb2YoKmRpKSwgTV9HSUNfVjMsIE1fV0FJVE9LIHwgTV9aRVJPKTsKKwkJCWlmIChvZndfYnVz
X2dlbl9zZXR1cF9kZXZpbmZvKCZkaS0+ZGlfZGluZm8sIG5vZGUpKSB7CisJCQkJaWYgKGJvb3R2
ZXJib3NlKSB7CisJCQkJCWRldmljZV9wcmludGYoZGV2LAorCQkJCQkgICAgIkNvdWxkIG5vdCBz
ZXQgdXAgZGV2aW5mbyBmb3IgSVRTXG4iKTsKKwkJCQl9CisJCQkJZnJlZShkaSwgTV9HSUNfVjMp
OworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKiBJbml0aWFsaXplIGFuZCBwb3B1bGF0ZSBy
ZXNvdXJjZSBsaXN0LiAqLworCQkJcmVzb3VyY2VfbGlzdF9pbml0KCZkaS0+ZGlfcmwpOworCQkJ
b2Z3X2J1c19yZWdfdG9fcmwoZGV2LCBub2RlLCBhZGRyX2NlbGxzLCBzaXplX2NlbGxzLAorCQkJ
ICAgICZkaS0+ZGlfcmwpOworCisJCQkvKiBTaG91bGQgbm90IGhhdmUgYW55IGludGVycnVwdHMs
IHNvIGRvbid0IGFkZCBhbnkgKi8KKworCQkJLyogQWRkIG5ld2J1cyBkZXZpY2UgZm9yIHRoaXMg
RkRUIG5vZGUgKi8KKwkJCWNoaWxkID0gZGV2aWNlX2FkZF9jaGlsZChkZXYsIE5VTEwsIC0xKTsK
KwkJCWlmICghY2hpbGQpIHsKKwkJCQlpZiAoYm9vdHZlcmJvc2UpIHsKKwkJCQkJZGV2aWNlX3By
aW50ZihkZXYsCisJCQkJCSAgICAiQ291bGQgbm90IGFkZCBjaGlsZDogJXNcbiIsCisJCQkJCSAg
ICBkaS0+ZGlfZGluZm8ub2JkX25hbWUpOworCQkJCX0KKwkJCQlyZXNvdXJjZV9saXN0X2ZyZWUo
JmRpLT5kaV9ybCk7CisJCQkJb2Z3X2J1c19nZW5fZGVzdHJveV9kZXZpbmZvKCZkaS0+ZGlfZGlu
Zm8pOworCQkJCWZyZWUoZGksIE1fR0lDX1YzKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJ
ZGV2aWNlX3NldF9pdmFycyhjaGlsZCwgZGkpOworCQl9CisJfQorCisJcmV0dXJuIChidXNfZ2Vu
ZXJpY19hdHRhY2goZGV2KSk7Cit9CisKK3N0YXRpYyBpbnQgZ2ljX3YzX2l0c19mZHRfcHJvYmUo
ZGV2aWNlX3QgZGV2KTsKKworc3RhdGljIGRldmljZV9tZXRob2RfdCBnaWNfdjNfaXRzX2ZkdF9t
ZXRob2RzW10gPSB7CisJLyogRGV2aWNlIGludGVyZmFjZSAqLworCURFVk1FVEhPRChkZXZpY2Vf
cHJvYmUsCQlnaWNfdjNfaXRzX2ZkdF9wcm9iZSksCisKKwkvKiBFbmQgKi8KKwlERVZNRVRIT0Rf
RU5ECit9OworCitERUZJTkVfQ0xBU1NfMShnaWNfdjNfaXRzLCBnaWNfdjNfaXRzX2ZkdF9kcml2
ZXIsIGdpY192M19pdHNfZmR0X21ldGhvZHMsCisgICAgc2l6ZW9mKHN0cnVjdCBnaWNfdjNfaXRz
X3NvZnRjKSwgZ2ljX3YzX2l0c19kcml2ZXIpOworCitzdGF0aWMgZGV2Y2xhc3NfdCBnaWNfdjNf
aXRzX2ZkdF9kZXZjbGFzczsKKworRUFSTFlfRFJJVkVSX01PRFVMRShnaWNfdjNfaXRzLCBnaWNf
djMsIGdpY192M19pdHNfZmR0X2RyaXZlciwKKyAgICBnaWNfdjNfaXRzX2ZkdF9kZXZjbGFzcywg
MCwgMCwgQlVTX1BBU1NfSU5URVJSVVBUICsgQlVTX1BBU1NfT1JERVJfTUlERExFKTsKKworc3Rh
dGljIGludAorZ2ljX3YzX2l0c19mZHRfcHJvYmUoZGV2aWNlX3QgZGV2KQoreworCisJaWYgKCFv
ZndfYnVzX3N0YXR1c19va2F5KGRldikpCisJCXJldHVybiAoRU5YSU8pOworCisJaWYgKCFvZndf
YnVzX2lzX2NvbXBhdGlibGUoZGV2LCBHSUNfVjNfSVRTX0NPTVBTVFIpKQorCQlyZXR1cm4gKEVO
WElPKTsKKworCWRldmljZV9zZXRfZGVzYyhkZXYsIEdJQ19WM19JVFNfREVWU1RSKTsKKwlyZXR1
cm4gKEJVU19QUk9CRV9ERUZBVUxUKTsKK30KZGlmZiAtLWdpdCBhL3N5cy9hcm02NC9hcm02NC9n
aWNfdjMuYyBiL3N5cy9hcm02NC9hcm02NC9naWNfdjMuYwotLS0gYS9zeXMvYXJtNjQvYXJtNjQv
Z2ljX3YzLmMKKysrIGIvc3lzL2FybTY0L2FybTY0L2dpY192My5jCkBAIC0yMzYsMTkgKzIzNiwx
OCBAQAogCQkJYnJlYWs7CiAKIAkJaWYgKF9fcHJlZGljdF90cnVlKChhY3RpdmVfaXJxID49IEdJ
Q19GSVJTVF9QUEkgJiYKLQkJICAgIGFjdGl2ZV9pcnEgPD0gR0lDX0xBU1RfU1BJKSkpIHsKKwkJ
ICAgIGFjdGl2ZV9pcnEgPD0gR0lDX0xBU1RfU1BJKSB8fCBhY3RpdmVfaXJxID49IEdJQ19GSVJT
VF9MUEkpKSB7CiAJCQlhcm1fZGlzcGF0Y2hfaW50cihhY3RpdmVfaXJxLCBmcmFtZSk7CiAJCQlj
b250aW51ZTsKIAkJfQogCi0JCWlmIChhY3RpdmVfaXJxIDw9IEdJQ19MQVNUX1NHSSB8fCBhY3Rp
dmVfaXJxID49IEdJQ19GSVJTVF9MUEkpIHsKKwkJaWYgKGFjdGl2ZV9pcnEgPD0gR0lDX0xBU1Rf
U0dJKSB7CiAJCQkvKgotCQkJICogVE9ETzogSW1wbGVtZW50IHByb3BlciBTR0kvTFBJIGhhbmRs
aW5nLgorCQkJICogVE9ETzogSW1wbGVtZW50IHByb3BlciBTR0kgaGFuZGxpbmcuCiAJCQkgKiAg
ICAgICBNYXNrIGl0IGlmIHN1Y2ggaXMgcmVjZWl2ZWQgZm9yIHNvbWUgcmVhc29uLgogCQkJICov
CiAJCQlkZXZpY2VfcHJpbnRmKGRldiwKLQkJCSAgICAiUmVjZWl2ZWQgdW5zdXBwb3J0ZWQgaW50
ZXJydXB0IHR5cGU6ICVzXG4iLAotCQkJICAgIGFjdGl2ZV9pcnEgPj0gR0lDX0ZJUlNUX0xQSSA/
ICJMUEkiIDogIlNHSSIpOworCQkJICAgICJSZWNlaXZlZCB1bnN1cHBvcnRlZCBpbnRlcnJ1cHQg
dHlwZTogU0dJXG4iKTsKIAkJCVBJQ19NQVNLKGRldiwgYWN0aXZlX2lycSk7CiAJCX0KIAl9CkBA
IC0yNzUsNiArMjc0LDggQEAKIAl9IGVsc2UgaWYgKGlycSA+PSBHSUNfRklSU1RfU1BJICYmIGly
cSA8PSBHSUNfTEFTVF9TUEkpIHsgLyogU1BJcyBpbiBkaXN0cmlidXRvciAqLwogCQlnaWNfcl93
cml0ZShzYywgNCwgR0lDRF9JQ0VOQUJMRVIoaXJxKSwgR0lDRF9JX01BU0soaXJxKSk7CiAJCWdp
Y192M193YWl0X2Zvcl9yd3Aoc2MsIERJU1QpOworCX0gZWxzZSBpZiAoaXJxID49IEdJQ19GSVJT
VF9MUEkpIHsgLyogTFBJcyAqLworCQlscGlfbWFza19pcnEoZGV2LCBpcnEpOwogCX0gZWxzZQog
CQlwYW5pYygiJXM6IFVuc3VwcG9ydGVkIElSUSBudW1iZXIgJXUiLCBfX2Z1bmNfXywgaXJxKTsK
IH0KQEAgLTI5Myw2ICsyOTQsOCBAQAogCX0gZWxzZSBpZiAoaXJxID49IEdJQ19GSVJTVF9TUEkg
JiYgaXJxIDw9IEdJQ19MQVNUX1NQSSkgeyAvKiBTUElzIGluIGRpc3RyaWJ1dG9yICovCiAJCWdp
Y19kX3dyaXRlKHNjLCA0LCBHSUNEX0lTRU5BQkxFUihpcnEpLCBHSUNEX0lfTUFTSyhpcnEpKTsK
IAkJZ2ljX3YzX3dhaXRfZm9yX3J3cChzYywgRElTVCk7CisJfSBlbHNlIGlmIChpcnEgPj0gR0lD
X0ZJUlNUX0xQSSkgeyAvKiBMUElzICovCisJCWxwaV91bm1hc2tfaXJxKGRldiwgaXJxKTsKIAl9
IGVsc2UKIAkJcGFuaWMoIiVzOiBVbnN1cHBvcnRlZCBJUlEgbnVtYmVyICV1IiwgX19mdW5jX18s
IGlycSk7CiB9Cgo=


--b1_4bdeef8ca26e31550e57aedc792dfc9a--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4bdeef8ca26e31550e57aedc792dfc9a>