Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 6 Jun 2015 22:52:58 +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:  <adb5d13ff260a628786bac2bb4d29cbf@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_adb5d13ff260a628786bac2bb4d29cbf
Content-Type: text/plain; charset = "utf-8"
Content-Transfer-Encoding: 8bit

zbb removed rS FreeBSD src repository as the repository for this revision.
zbb updated this revision to Diff 5978.

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

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, andrew, emaste, manpages
Cc: gnn, kib, emaste, andrew, freebsd-arm-list, imp

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

ZGlmZiAtLWdpdCBhL3N5cy9jb25mL2ZpbGVzLmFybTY0IGIvc3lzL2NvbmYvZmlsZXMuYXJtNjQK
LS0tIGEvc3lzL2NvbmYvZmlsZXMuYXJtNjQKKysrIGIvc3lzL2NvbmYvZmlsZXMuYXJtNjQKQEAg
LTIyLDYgKzIyLDcgQEAKIGFybTY0L2FybTY0L2dpYy5jCQlzdGFuZGFyZAogYXJtNjQvYXJtNjQv
Z2ljX3YzLmMJCXN0YW5kYXJkCiBhcm02NC9hcm02NC9naWNfdjNfZmR0LmMJb3B0aW9uYWwJZmR0
Cithcm02NC9hcm02NC9naWNfdjNfaXRzLmMJc3RhbmRhcmQKIGFybTY0L2FybTY0L2lkZW50Y3B1
LmMJCXN0YW5kYXJkCiBhcm02NC9hcm02NC9pbnRyX21hY2hkZXAuYwlzdGFuZGFyZAogYXJtNjQv
YXJtNjQvaW5fY2tzdW0uYwkJb3B0aW9uYWwJaW5ldCB8IGluZXQ2CmRpZmYgLS1naXQgYS9zeXMv
YXJtNjQvaW5jbHVkZS9wYXJhbS5oIGIvc3lzL2FybTY0L2luY2x1ZGUvcGFyYW0uaAotLS0gYS9z
eXMvYXJtNjQvaW5jbHVkZS9wYXJhbS5oCisrKyBiL3N5cy9hcm02NC9pbmNsdWRlL3BhcmFtLmgK
QEAgLTgyLDYgKzgyLDEwIEBACiAjZGVmaW5lCVBBR0VfU0laRQkoMSA8PCBQQUdFX1NISUZUKQkv
KiBQYWdlIHNpemUgKi8KICNkZWZpbmUJUEFHRV9NQVNLCShQQUdFX1NJWkUgLSAxKQogCisjZGVm
aW5lCVBBR0VfU0hJRlRfMTZLCTE0CisjZGVmaW5lCVBBR0VfU0laRV8xNksJKDEgPDwgUEFHRV9T
SElGVF8xNkspCisjZGVmaW5lCVBBR0VfTUFTS18xNksJKFBBR0VfU0laRV8xNksgLSAxKQorCiAj
ZGVmaW5lCVBBR0VfU0hJRlRfNjRLCTE2CiAjZGVmaW5lCVBBR0VfU0laRV82NEsJKDEgPDwgUEFH
RV9TSElGVF82NEspCiAjZGVmaW5lCVBBR0VfTUFTS182NEsJKFBBR0VfU0laRV82NEsgLSAxKQpk
aWZmIC0tZ2l0IGEvc3lzL2FybTY0L2FybTY0L2dpY192M192YXIuaCBiL3N5cy9hcm02NC9hcm02
NC9naWNfdjNfdmFyLmgKLS0tIGEvc3lzL2FybTY0L2FybTY0L2dpY192M192YXIuaAorKysgYi9z
eXMvYXJtNjQvYXJtNjQvZ2ljX3YzX3Zhci5oCkBAIC0zNiw2ICszNiwxNyBAQAogCiBERUNMQVJF
X0NMQVNTKGdpY192M19kcml2ZXIpOwogCisjZGVmaW5lCUxQSV9GTEFHU19DT05GX0ZMVVNICSgx
VUwgPDwgMCkKKyNkZWZpbmUJTFBJX0NPTkZUQUJfU0laRQlQQUdFX1NJWkVfNjRLCisvKiAxIGJp
dCBwZXIgTFBJICsgMSBLQiBtb3JlIGZvciB0aGUgb2JsaWdhdG9yeSBQUEksIFNHSSwgU1BJIHN0
dWZmICovCisjZGVmaW5lCUxQSV9QRU5EVEFCX1NJWkUJKChMUElfQ09ORlRBQl9TSVpFIC8gOCkg
KyAweDQwMCkKKworc3RydWN0IHJlZGlzdF9scGlzIHsKKwl2bV9vZmZzZXRfdAkJY29uZl9iYXNl
OworCXZtX29mZnNldF90CQlwZW5kX2Jhc2VbTUFYQ1BVXTsKKwl1aW50NjRfdAkJZmxhZ3M7Cit9
OworCiBzdHJ1Y3QgZ2ljX3JlZGlzdHMgewogCS8qCiAJICogUmUtRGlzdHJpYnV0b3IgcmVnaW9u
IGRlc2NyaXB0aW9uLgpAQCAtNDcsNiArNTgsOCBAQAogCXVfaW50CQkJbnJlZ2lvbnM7CiAJLyog
UGVyLUNQVSBSZS1EaXN0cmlidXRvciBoYW5kbGVyICovCiAJc3RydWN0IHJlc291cmNlICoJcGNw
dVtNQVhDUFVdOworCS8qIExQSXMgZGF0YSAqLworCXN0cnVjdCByZWRpc3RfbHBpcwlscGlzOwog
fTsKIAogc3RydWN0IGdpY192M19zb2Z0YyB7CkBAIC03MSw2ICs4NCwxNjcgQEAKIGludCBnaWNf
djNfZGV0YWNoKGRldmljZV90IGRldik7CiAKIC8qCisgKiBJVFMKKyAqLworI2RlZmluZQlHSUNf
VjNfSVRTX0RFVlNUUgkiQVJNIEdJQyBJbnRlcnJ1cHQgVHJhbnNsYXRpb24gU2VydmljZSIKKyNk
ZWZpbmUJR0lDX1YzX0lUU19DT01QU1RSCSJhcm0sZ2ljLXYzLWl0cyIKKworREVDTEFSRV9DTEFT
UyhnaWNfdjNfaXRzX2RyaXZlcik7CisKKy8qIExQSSBjaHVuayBvd25lZCBieSBJVFMgZGV2aWNl
ICovCitzdHJ1Y3QgbHBpX2NodW5rIHsKKwl1X2ludAlscGlfYmFzZTsKKwl1X2ludAlscGlfbnVt
OworCXVfaW50CWxwaV9mcmVlOwkvKiBGaXJzdCBmcmVlIExQSSBpbiBzZXQgKi8KK307CisKKy8q
IElUUyBkZXZpY2UgKi8KK3N0cnVjdCBpdHNfZGV2IHsKKwlUQUlMUV9FTlRSWShpdHNfZGV2KQll
bnRyeTsKKwkvKiBQQ0kgZGV2aWNlICovCisJZGV2aWNlX3QJCXBjaV9kZXY7CisJLyogRGV2aWNl
IElEIChpLmUuIFBDSSBkZXZpY2UgSUQpICovCisJdWludDMyX3QJCWRldmlkOworCS8qIExpc3Qg
b2YgYXNzaWduZWQgTFBJcyAqLworCXN0cnVjdCBscGlfY2h1bmsJbHBpczsKKwkvKiBWaXJ0dWFs
IGFkZHJlc3Mgb2YgSVRUICovCisJdm1fb2Zmc2V0X3QJCWl0dDsKKwkvKiBJbnRlcnJ1cHQgY29s
bGVjdGlvbiAqLworCXN0cnVjdCBpdHNfY29sICoJY29sOworfTsKK1RBSUxRX0hFQUQoaXRzX2Rl
dl9saXN0LCBpdHNfZGV2KTsKKworLyogSVRTIHByaXZhdGUgdGFibGUgZGVzY3JpcHRpb24gKi8K
K3N0cnVjdCBpdHNfcHRhYiB7CisJdm1fb2Zmc2V0X3QJcHRhYl92YWRkcjsJLyogVmlydHVhbCBB
ZGRyZXNzIG9mIHRhYmxlICovCisJc2l6ZV90CQlwdGFiX3Bnc3o7CS8qIFBhZ2Ugc2l6ZSAqLwor
CXNpemVfdAkJcHRhYl9ucGFnZXM7CS8qIE51bWJlciBvZiBwYWdlcyAqLworfTsKKworLyogSVRT
IGNvbGxlY3Rpb24gZGVzY3JpcHRpb24uICovCitzdHJ1Y3QgaXRzX2NvbCB7CisJdWludDY0X3QJ
Y29sX3RhcmdldDsJLyogVGFyZ2V0IFJlLURpc3RyaWJ1dG9yICovCisJdWludDY0X3QJY29sX2lk
OwkJLyogQ29sbGVjdGlvbiBJRCAqLworfTsKKworLyogSVRTIGNvbW1hbmQuIEVhY2ggY29tbWFu
ZCBpcyAzMiBieXRlcyBsb25nICovCitzdHJ1Y3QgaXRzX2NtZCB7CisJdWludDY0X3QJY21kX2R3
b3JkWzRdOwkvKiBJVFMgY29tbWFuZCBkb3VibGUgd29yZCAqLworfTsKKworLyogSVRTIGNvbW1h
bmRzIGVuY29kaW5nICovCisjZGVmaW5lCUlUU19DTURfU1lOQwkJKDB4MDUpCisjZGVmaW5lCUlU
U19DTURfTUFQRAkJKDB4MDgpCisjZGVmaW5lCUlUU19DTURfTUFQQwkJKDB4MDkpCisjZGVmaW5l
CUlUU19DTURfTUFQVkkJCSgweDBhKQorI2RlZmluZQlJVFNfQ01EX01BUEkJCSgweDBiKQorI2Rl
ZmluZQlJVFNfQ01EX0lOVgkJKDB4MGMpCisjZGVmaW5lCUlUU19DTURfSU5WQUxMCQkoMHgwZCkK
Ky8qIENvbW1hbmQgKi8KKyNkZWZpbmUJQ01EX0NPTU1BTkRfTUFTSwkoMHhGRlVMKQorLyogUENJ
IGRldmljZSBJRCAqLworI2RlZmluZQlDTURfREVWSURfU0hJRlQJCSgzMikKKyNkZWZpbmUJQ01E
X0RFVklEX01BU0sJCSgweEZGRkZGRkZGVUwgPDwgQ01EX0RFVklEX1NISUZUKQorLyogU2l6ZSBv
ZiBJUlEgSUQgYml0ZmllbGQgKi8KKyNkZWZpbmUJQ01EX1NJWkVfTUFTSwkJKDB4RkZVTCkKKy8q
IFZpcnR1YWwgTFBJIElEICovCisjZGVmaW5lCUNNRF9JRF9NQVNLCQkoMHhGRkZGRkZGRlVMKQor
LyogUGh5c2ljYWwgTFBJIElEICovCisjZGVmaW5lCUNNRF9QSURfU0hJRlQJCSgzMikKKyNkZWZp
bmUJQ01EX1BJRF9NQVNLCQkoMHhGRkZGRkZGRlVMIDw8IENNRF9QSURfU0hJRlQpCisvKiBDb2xs
ZWN0aW9uICovCisjZGVmaW5lCUNNRF9DT0xfTUFTSwkJKDB4RkZGRlVMKQorLyogVGFyZ2V0IChD
UFUgb3IgUmUtRGlzdHJpYnV0b3IpICovCisjZGVmaW5lCUNNRF9UQVJHRVRfU0hJRlQJKDE2KQor
I2RlZmluZQlDTURfVEFSR0VUX01BU0sJCSgweEZGRkZGRkZGVUwgPDwgQ01EX1RBUkdFVF9TSElG
VCkKKy8qIEludGVycnVwdCBUcmFuc2xhdGlvbiBUYWJsZSBhZGRyZXNzICovCisjZGVmaW5lCUNN
RF9JVFRfTUFTSwkJKDB4RkZGRkZGRkZGRjAwVUwpCisvKiBWYWxpZCBjb21tYW5kIGJpdCAqLwor
I2RlZmluZQlDTURfVkFMSURfU0hJRlQJCSg2MykKKyNkZWZpbmUJQ01EX1ZBTElEX01BU0sJCSgx
VUwgPDwgQ01EX1ZBTElEX1NISUZUKQorCisvKgorICogSVRTIGNvbW1hbmQgZGVzY3JpcHRvci4K
KyAqIElkZWEgZm9yIGNvbW1hbmQgZGVzY3JpcHRpb24gcGFzc2luZyB0YWtlbiBmcm9tIExpbnV4
LgorICovCitzdHJ1Y3QgaXRzX2NtZF9kZXNjIHsKKwl1aW50OF90IGNtZF90eXBlOworCisJdW5p
b24geworCQlzdHJ1Y3QgeworCQkJc3RydWN0IGl0c19jb2wgKmNvbDsKKwkJfSBjbWRfZGVzY19z
eW5jOworCisJCXN0cnVjdCB7CisJCQlzdHJ1Y3QgaXRzX2NvbCAqY29sOworCQkJdWludDhfdCB2
YWxpZDsKKwkJfSBjbWRfZGVzY19tYXBjOworCisJCXN0cnVjdCB7CisJCQlzdHJ1Y3QgaXRzX2Rl
diAqaXRzX2RldjsKKwkJCXVpbnQzMl90IHBpZDsKKwkJCXVpbnQzMl90IGlkOworCQl9IGNtZF9k
ZXNjX21hcHZpOworCisJCXN0cnVjdCB7CisJCQlzdHJ1Y3QgaXRzX2RldiAqaXRzX2RldjsKKwkJ
CXVpbnQzMl90IGxwaW51bTsKKwkJfSBjbWRfZGVzY19tYXBpOworCisJCXN0cnVjdCB7CisJCQlz
dHJ1Y3QgaXRzX2RldiAqaXRzX2RldjsKKwkJCXVpbnQ4X3QgdmFsaWQ7CisJCX0gY21kX2Rlc2Nf
bWFwZDsKKworCQlzdHJ1Y3QgeworCQkJc3RydWN0IGl0c19kZXYgKml0c19kZXY7CisJCQl1aW50
MzJfdCBscGludW07CisJCX0gY21kX2Rlc2NfaW52OworCisJCXN0cnVjdCB7CisJCQlzdHJ1Y3Qg
aXRzX2NvbCAqY29sOworCQl9IGNtZF9kZXNjX2ludmFsbDsKKwl9OworfTsKKworI2RlZmluZQlJ
VFNfQ01EUV9TSVpFCQlQQUdFX1NJWkVfNjRLCisjZGVmaW5lCUlUU19DTURRX05FTlRSSUVTCShJ
VFNfQ01EUV9TSVpFIC8gc2l6ZW9mKHN0cnVjdCBpdHNfY21kKSkKKworI2RlZmluZQlJVFNfRkxB
R1NfQ01EUV9GTFVTSAkoMVVMIDw8IDApCisKKyNkZWZpbmUJSVRTX1RBUkdFVF9OT05FCQkweEZC
QURCRUVGCisKK3N0cnVjdCBnaWNfdjNfaXRzX3NvZnRjIHsKKwlkZXZpY2VfdAkJZGV2OworCXN0
cnVjdCByZXNvdXJjZQkqCWl0c19yZXM7CisKKwlzdHJ1Y3QgaXRzX2NtZCAqCWl0c19jbWRxX2Jh
c2U7CS8qIElUUyBjb21tYW5kIHF1ZXVlIGJhc2UgKi8KKwlzdHJ1Y3QgaXRzX2NtZCAqCWl0c19j
bWRxX3dyaXRlOwkvKiBJVFMgY29tbWFuZCBxdWV1ZSB3cml0ZSBwdHIgKi8KKwlzdHJ1Y3QgaXRz
X3B0YWIJCWl0c19wdGFic1tHSVRTX0JBU0VSX05VTV07LyogSVRTIHByaXZhdGUgdGFibGVzICov
CisJc3RydWN0IGl0c19jb2wgKglpdHNfY29sczsJLyogUGVyLUNQVSBjb2xsZWN0aW9ucyAqLwor
CisJdWludDY0X3QJCWl0c19mbGFnczsKKworCXN0cnVjdCBpdHNfZGV2X2xpc3QJaXRzX2Rldl9s
aXN0OworCisJdW5zaWduZWQgbG9uZyAqCQlpdHNfbHBpX2JpdG1hcDsKKwl1aW50MzJfdAkJaXRz
X2xwaV9tYXhpZDsKKworCXN0cnVjdCBtdHgJCWl0c19tdHg7CisJc3RydWN0IG10eAkJaXRzX3Nw
aW5fbXR4OworfTsKKworZXh0ZXJuIGRldmNsYXNzX3QgZ2ljX3YzX2l0c19kZXZjbGFzczsKKwor
aW50IGdpY192M19pdHNfZGV0YWNoKGRldmljZV90KTsKKworaW50IGdpY192M19pdHNfYWxsb2Nf
bXNpeChkZXZpY2VfdCwgZGV2aWNlX3QsIGludCAqKTsKK2ludCBnaWNfdjNfaXRzX2FsbG9jX21z
aShkZXZpY2VfdCwgZGV2aWNlX3QsIGludCwgaW50ICopOworaW50IGdpY192M19pdHNfbWFwX21z
aXgoZGV2aWNlX3QsIGRldmljZV90LCBpbnQsIHVpbnQ2NF90ICosIHVpbnQzMl90ICopOworCit2
b2lkIGxwaV91bm1hc2tfaXJxKGRldmljZV90LCB1aW50MzJfdCk7Cit2b2lkIGxwaV9tYXNrX2ly
cShkZXZpY2VfdCwgdWludDMyX3QpOworLyoKICAqIEdJQyBEaXN0cmlidXRvciBhY2Nlc3NvcnMu
CiAgKiBOb3RpY2UgdGhhdCBvbmx5IEdJQyBzb2ZjIGNhbiBiZSBwYXNzZWQuCiAgKi8KQEAgLTEw
Myw0ICsyNzcsMjggQEAKIAkgICAgcmVnLCB2YWwpOwkJCQlcCiB9KQogCisjZGVmaW5lCVBDSV9E
RVZJRChwY2lfZGV2KQkJCQlcCisoewkJCQkJCQlcCisJKCgocGNpX2dldF9kb21haW4ocGNpX2Rl
dikgPj4gMikgPDwgMTkpIHwJXAorCSAoKHBjaV9nZXRfZG9tYWluKHBjaV9kZXYpICUgNCkgPDwg
MTYpIHwJXAorCSAocGNpX2dldF9idXMocGNpX2RldikgPDwgOCkgfAkJCVwKKwkgKHBjaV9nZXRf
c2xvdChwY2lfZGV2KSA8PCAzKSB8CQkJXAorCSAocGNpX2dldF9mdW5jdGlvbihwY2lfZGV2KSA8
PCAwKSk7CQlcCit9KQorCisvKgorICogUmVxdWVzdCBudW1iZXIgb2YgbWF4aW11bSBNU0ktWCB2
ZWN0b3JzIGZvciB0aGlzIGRldmljZS4KKyAqIERldmljZSBjYW4gYXNrIGZvciBsZXNzIHZlY3Rv
cnMgdGhhbiBtYXhpbXVtIHN1cHBvcnRlZCBidXQgbm90IG1vcmUuCisgKi8KKyNkZWZpbmUJUENJ
X01TSVhfTlVNKHBjaV9kZXYpCQkJXAorKHsJCQkJCQlcCisJc3RydWN0IHBjaV9kZXZpbmZvICpk
aW5mbzsJCVwKKwlwY2ljZmdyZWdzICpjZmc7CQkJXAorCQkJCQkJXAorCWRpbmZvID0gZGV2aWNl
X2dldF9pdmFycyhwY2lfZGV2KTsJXAorCWNmZyA9ICZkaW5mby0+Y2ZnOwkJCVwKKwkJCQkJCVwK
KwljZmctPm1zaXgubXNpeF9tc2dudW07CQkJXAorfSkKKwogI2VuZGlmIC8qIF9HSUNfVjNfVkFS
X0hfICovCmRpZmYgLS1naXQgYS9zeXMvYXJtNjQvYXJtNjQvZ2ljX3YzX3JlZy5oIGIvc3lzL2Fy
bTY0L2FybTY0L2dpY192M19yZWcuaAotLS0gYS9zeXMvYXJtNjQvYXJtNjQvZ2ljX3YzX3JlZy5o
CisrKyBiL3N5cy9hcm02NC9hcm02NC9naWNfdjNfcmVnLmgKQEAgLTEwMSwxNyArMTAxLDEwMCBA
QAogI2RlZmluZQlHSUNSX1BJRFIyX0FSQ0hfR0lDdjQJKDB4NDApCiAKIC8qIFJlZGlzdHJpYnV0
b3IgcmVnaXN0ZXJzICovCisjZGVmaW5lCUdJQ1JfQ1RMUgkJR0lDRF9DVExSCisjZGVmaW5lCQlH
SUNSX0NUTFJfTFBJX0VOQUJMRQkoMSA8PCAwKQorCiAjZGVmaW5lCUdJQ1JfUElEUjIJCUdJQ0Rf
UElEUjIKIAogI2RlZmluZQlHSUNSX1RZUEVSCQkoMHgwMDA4KQorI2RlZmluZQlHSUNSX1RZUEVS
X1BMUElTCSgxIDw8IDApCiAjZGVmaW5lCUdJQ1JfVFlQRVJfVkxQSVMJKDEgPDwgMSkKICNkZWZp
bmUJR0lDUl9UWVBFUl9MQVNUCQkoMSA8PCA0KQorI2RlZmluZQlHSUNSX1RZUEVSX0NQVU5VTV9T
SElGVAkoOCkKKyNkZWZpbmUJR0lDUl9UWVBFUl9DUFVOVU1fTUFTSwkoMHhGRkZVTCA8PCBHSUNS
X1RZUEVSX0NQVU5VTV9TSElGVCkKKyNkZWZpbmUJR0lDUl9UWVBFUl9DUFVOVU0oeCkJXAorCSAg
ICAoKCh4KSAmIEdJQ1JfVFlQRVJfQ1BVTlVNX01BU0spID4+IEdJQ1JfVFlQRVJfQ1BVTlVNX1NI
SUZUKQogI2RlZmluZQlHSUNSX1RZUEVSX0FGRl9TSElGVAkoMzIpCiAKICNkZWZpbmUJR0lDUl9X
QUtFUgkJKDB4MDAxNCkKICNkZWZpbmUJR0lDUl9XQUtFUl9QUwkJKDEgPDwgMSkgLyogUHJvY2Vz
c29yIHNsZWVwICovCiAjZGVmaW5lCUdJQ1JfV0FLRVJfQ0EJCSgxIDw8IDIpIC8qIENoaWxkcmVu
IGFzbGVlcCAqLwogCisjZGVmaW5lCUdJQ1JfUFJPUEJBU0VSCQkoMHgwMDcwKQorI2RlZmluZQkJ
R0lDUl9QUk9QQkFTRVJfSURCSVRTX01BU0sJMHgxRlVMCisvKgorICogQ2FjaGVhYmlsaXR5Cisg
KiAweDAgLSBEZXZpY2UtbkduUm5FCisgKiAweDEgLSBOb3JtYWwgSW5uZXIgTm9uLWNhY2hlYWJs
ZQorICogMHgyIC0gTm9ybWFsIElubmVyIFJlYWQtYWxsb2NhdGUsIFdyaXRlLXRocm91Z2gKKyAq
IDB4MyAtIE5vcm1hbCBJbm5lciBSZWFkLWFsbG9jYXRlLCBXcml0ZS1iYWNrCisgKiAweDQgLSBO
b3JtYWwgSW5uZXIgV3JpdGUtYWxsb2NhdGUsIFdyaXRlLXRocm91Z2gKKyAqIDB4NSAtIE5vcm1h
bCBJbm5lciBXcml0ZS1hbGxvY2F0ZSwgV3JpdGUtYmFjaworICogMHg2IC0gTm9ybWFsIElubmVy
IFJlYWQtYWxsb2NhdGUsIFdyaXRlLWFsbG9jYXRlLCBXcml0ZS10aHJvdWdoCisgKiAweDcgLSBO
b3JtYWwgSW5uZXIgUmVhZC1hbGxvY2F0ZSwgV3JpdGUtYWxsb2NhdGUsIFdyaXRlLWJhY2sKKyAq
LworI2RlZmluZQkJR0lDUl9QUk9QQkFTRVJfQ0FDSEVfU0hJRlQJNworI2RlZmluZQkJR0lDUl9Q
Uk9QQkFTRVJfQ0FDSEVfRG5HblJuRQkweDBVTAorI2RlZmluZQkJR0lDUl9QUk9QQkFTRVJfQ0FD
SEVfTklOCTB4MVVMCisjZGVmaW5lCQlHSUNSX1BST1BCQVNFUl9DQUNIRV9OSVJBV1QJMHgyVUwK
KyNkZWZpbmUJCUdJQ1JfUFJPUEJBU0VSX0NBQ0hFX05JUkFXQgkweDNVTAorI2RlZmluZQkJR0lD
Ul9QUk9QQkFTRVJfQ0FDSEVfTklXQVdUCTB4NFVMCisjZGVmaW5lCQlHSUNSX1BST1BCQVNFUl9D
QUNIRV9OSVdBV0IJMHg1VUwKKyNkZWZpbmUJCUdJQ1JfUFJPUEJBU0VSX0NBQ0hFX05JUkFXQVdU
CTB4NlVMCisjZGVmaW5lCQlHSUNSX1BST1BCQVNFUl9DQUNIRV9OSVJBV0FXQgkweDdVTAorCisv
KgorICogU2hhcmVhYmlsaXR5CisgKiAweDAgLSBOb24tc2hhcmVhYmxlCisgKiAweDEgLSBJbm5l
ci1zaGFyZWFibGUKKyAqIDB4MiAtIE91dGVyLXNoYXJlYWJsZQorICogMHgzIC0gUmVzZXJ2ZWQu
IFRocmVhdGVkIGFzIDB4MAorICovCisjZGVmaW5lCQlHSUNSX1BST1BCQVNFUl9TSEFSRV9TSElG
VAkxMAorI2RlZmluZQkJR0lDUl9QUk9QQkFTRVJfU0hBUkVfTlMJCTB4MFVMCisjZGVmaW5lCQlH
SUNSX1BST1BCQVNFUl9TSEFSRV9JUwkJMHgxVUwKKyNkZWZpbmUJCUdJQ1JfUFJPUEJBU0VSX1NI
QVJFX09TCQkweDJVTAorI2RlZmluZQkJR0lDUl9QUk9QQkFTRVJfU0hBUkVfUkVTCTB4M1VMCisj
ZGVmaW5lCQlHSUNSX1BST1BCQVNFUl9TSEFSRV9NQVNLCVwKKwkJICAgICgweDNVTCA8PCBHSUNS
X1BST1BCQVNFUl9TSEFSRV9TSElGVCkKKworI2RlZmluZQlHSUNSX1BFTkRCQVNFUgkJKDB4MDA3
OCkKKy8qCisgKiBDYWNoZWFiaWxpdHkKKyAqIDB4MCAtIERldmljZS1uR25SbkUKKyAqIDB4MSAt
IE5vcm1hbCBJbm5lciBOb24tY2FjaGVhYmxlCisgKiAweDIgLSBOb3JtYWwgSW5uZXIgUmVhZC1h
bGxvY2F0ZSwgV3JpdGUtdGhyb3VnaAorICogMHgzIC0gTm9ybWFsIElubmVyIFJlYWQtYWxsb2Nh
dGUsIFdyaXRlLWJhY2sKKyAqIDB4NCAtIE5vcm1hbCBJbm5lciBXcml0ZS1hbGxvY2F0ZSwgV3Jp
dGUtdGhyb3VnaAorICogMHg1IC0gTm9ybWFsIElubmVyIFdyaXRlLWFsbG9jYXRlLCBXcml0ZS1i
YWNrCisgKiAweDYgLSBOb3JtYWwgSW5uZXIgUmVhZC1hbGxvY2F0ZSwgV3JpdGUtYWxsb2NhdGUs
IFdyaXRlLXRocm91Z2gKKyAqIDB4NyAtIE5vcm1hbCBJbm5lciBSZWFkLWFsbG9jYXRlLCBXcml0
ZS1hbGxvY2F0ZSwgV3JpdGUtYmFjaworICovCisjZGVmaW5lCQlHSUNSX1BFTkRCQVNFUl9DQUNI
RV9TSElGVAk3CisjZGVmaW5lCQlHSUNSX1BFTkRCQVNFUl9DQUNIRV9EbkduUm5FCTB4MFVMCisj
ZGVmaW5lCQlHSUNSX1BFTkRCQVNFUl9DQUNIRV9OSU4JMHgxVUwKKyNkZWZpbmUJCUdJQ1JfUEVO
REJBU0VSX0NBQ0hFX05JUkFXVAkweDJVTAorI2RlZmluZQkJR0lDUl9QRU5EQkFTRVJfQ0FDSEVf
TklSQVdCCTB4M1VMCisjZGVmaW5lCQlHSUNSX1BFTkRCQVNFUl9DQUNIRV9OSVdBV1QJMHg0VUwK
KyNkZWZpbmUJCUdJQ1JfUEVOREJBU0VSX0NBQ0hFX05JV0FXQgkweDVVTAorI2RlZmluZQkJR0lD
Ul9QRU5EQkFTRVJfQ0FDSEVfTklSQVdBV1QJMHg2VUwKKyNkZWZpbmUJCUdJQ1JfUEVOREJBU0VS
X0NBQ0hFX05JUkFXQVdCCTB4N1VMCisKKy8qCisgKiBTaGFyZWFiaWxpdHkKKyAqIDB4MCAtIE5v
bi1zaGFyZWFibGUKKyAqIDB4MSAtIElubmVyLXNoYXJlYWJsZQorICogMHgyIC0gT3V0ZXItc2hh
cmVhYmxlCisgKiAweDMgLSBSZXNlcnZlZC4gVGhyZWF0ZWQgYXMgMHgwCisgKi8KKyNkZWZpbmUJ
CUdJQ1JfUEVOREJBU0VSX1NIQVJFX1NISUZUCTEwCisjZGVmaW5lCQlHSUNSX1BFTkRCQVNFUl9T
SEFSRV9OUwkJMHgwVUwKKyNkZWZpbmUJCUdJQ1JfUEVOREJBU0VSX1NIQVJFX0lTCQkweDFVTAor
I2RlZmluZQkJR0lDUl9QRU5EQkFTRVJfU0hBUkVfT1MJCTB4MlVMCisjZGVmaW5lCQlHSUNSX1BF
TkRCQVNFUl9TSEFSRV9SRVMJMHgzVUwKKyNkZWZpbmUJCUdJQ1JfUEVOREJBU0VSX1NIQVJFX01B
U0sJXAorCQkgICAgKDB4M1VMIDw8IEdJQ1JfUEVOREJBU0VSX1NIQVJFX1NISUZUKQorCiAvKiBS
ZS1kaXN0cmlidXRvciByZWdpc3RlcnMgZm9yIFNHSXMgYW5kIFBQSXMgKi8KICNkZWZpbmUJR0lD
Ul9SRF9CQVNFX1NJWkUJUEFHRV9TSVpFXzY0SwogI2RlZmluZQlHSUNSX1NHSV9CQVNFX1NJWkUJ
UEFHRV9TSVpFXzY0SwpAQCAtMTI1LDYgKzIwOCwxNTEgQEAKIAogI2RlZmluZQkJR0lDUl9JX1BF
Ul9JUFJJT1JJVFluCQkoR0lDRF9JX1BFUl9JUFJJT1JJVFluKQogCisvKiBJVFMgcmVnaXN0ZXJz
ICovCisjZGVmaW5lCUdJVFNfUElEUjIJCUdJQ1JfUElEUjIKKyNkZWZpbmUJR0lUU19QSURSMl9B
UkNIX01BU0sJR0lDUl9QSURSMl9BUkNIX01BU0sKKyNkZWZpbmUJR0lUU19QSURSMl9BUkNIX0dJ
Q3YzCUdJQ1JfUElEUjJfQVJDSF9HSUN2MworI2RlZmluZQlHSVRTX1BJRFIyX0FSQ0hfR0lDdjQJ
R0lDUl9QSURSMl9BUkNIX0dJQ3Y0CisKKyNkZWZpbmUJR0lUU19DVExSCQkoMHgwMDAwKQorI2Rl
ZmluZQkJR0lUU19DVExSX0VOCSgxIDw8IDApCisKKyNkZWZpbmUJR0lUU19DQkFTRVIJCSgweDAw
ODApCisjZGVmaW5lCQlHSVRTX0NCQVNFUl9WQUxJRAkoMVVMIDw8IDYzKQorLyoKKyAqIENhY2hl
YWJpbGl0eQorICogMHgwIC0gRGV2aWNlLW5HblJuRQorICogMHgxIC0gTm9ybWFsIElubmVyIE5v
bi1jYWNoZWFibGUKKyAqIDB4MiAtIE5vcm1hbCBJbm5lciBSZWFkLWFsbG9jYXRlLCBXcml0ZS10
aHJvdWdoCisgKiAweDMgLSBOb3JtYWwgSW5uZXIgUmVhZC1hbGxvY2F0ZSwgV3JpdGUtYmFjawor
ICogMHg0IC0gTm9ybWFsIElubmVyIFdyaXRlLWFsbG9jYXRlLCBXcml0ZS10aHJvdWdoCisgKiAw
eDUgLSBOb3JtYWwgSW5uZXIgV3JpdGUtYWxsb2NhdGUsIFdyaXRlLWJhY2sKKyAqIDB4NiAtIE5v
cm1hbCBJbm5lciBSZWFkLWFsbG9jYXRlLCBXcml0ZS1hbGxvY2F0ZSwgV3JpdGUtdGhyb3VnaAor
ICogMHg3IC0gTm9ybWFsIElubmVyIFJlYWQtYWxsb2NhdGUsIFdyaXRlLWFsbG9jYXRlLCBXcml0
ZS1iYWNrCisgKi8KKyNkZWZpbmUJCUdJVFNfQ0JBU0VSX0NBQ0hFX1NISUZUCQk1OQorI2RlZmlu
ZQkJR0lUU19DQkFTRVJfQ0FDSEVfRG5HblJuRQkweDBVTAorI2RlZmluZQkJR0lUU19DQkFTRVJf
Q0FDSEVfTklOCQkweDFVTAorI2RlZmluZQkJR0lUU19DQkFTRVJfQ0FDSEVfTklSQVdUCTB4MlVM
CisjZGVmaW5lCQlHSVRTX0NCQVNFUl9DQUNIRV9OSVJBV0IJMHgzVUwKKyNkZWZpbmUJCUdJVFNf
Q0JBU0VSX0NBQ0hFX05JV0FXVAkweDRVTAorI2RlZmluZQkJR0lUU19DQkFTRVJfQ0FDSEVfTklX
QVdCCTB4NVVMCisjZGVmaW5lCQlHSVRTX0NCQVNFUl9DQUNIRV9OSVJBV0FXVAkweDZVTAorI2Rl
ZmluZQkJR0lUU19DQkFTRVJfQ0FDSEVfTklSQVdBV0IJMHg3VUwKKyNkZWZpbmUJCUdJVFNfQ0JB
U0VSX0NBQ0hFX01BU0sJKDB4N1VMIDw8IEdJVFNfQ0JBU0VSX1RZUEVfU0hJRlQpCisvKgorICog
U2hhcmVhYmlsaXR5CisgKiAweDAgLSBOb24tc2hhcmVhYmxlCisgKiAweDEgLSBJbm5lci1zaGFy
ZWFibGUKKyAqIDB4MiAtIE91dGVyLXNoYXJlYWJsZQorICogMHgzIC0gUmVzZXJ2ZWQuIFRocmVh
dGVkIGFzIDB4MAorICovCisjZGVmaW5lCQlHSVRTX0NCQVNFUl9TSEFSRV9TSElGVAkJMTAKKyNk
ZWZpbmUJCUdJVFNfQ0JBU0VSX1NIQVJFX05TCQkweDBVTAorI2RlZmluZQkJR0lUU19DQkFTRVJf
U0hBUkVfSVMJCTB4MVVMCisjZGVmaW5lCQlHSVRTX0NCQVNFUl9TSEFSRV9PUwkJMHgyVUwKKyNk
ZWZpbmUJCUdJVFNfQ0JBU0VSX1NIQVJFX1JFUwkJMHgzVUwKKyNkZWZpbmUJCUdJVFNfQ0JBU0VS
X1NIQVJFX01BU0sJCVwKKwkJICAgICgweDNVTCA8PCBHSVRTX0NCQVNFUl9TSEFSRV9TSElGVCkK
KworI2RlZmluZQkJR0lUU19DQkFTRVJfUEFfU0hJRlQJMTIKKyNkZWZpbmUJCUdJVFNfQ0JBU0VS
X1BBX01BU0sJKDB4RkZGRkZGRkZGVUwgPDwgR0lUU19DQkFTRVJfUEFfU0hJRlQpCisKKyNkZWZp
bmUJR0lUU19DV1JJVEVSCQkoMHgwMDg4KQorI2RlZmluZQlHSVRTX0NSRUFEUgkJKDB4MDA5MCkK
KworI2RlZmluZQlHSVRTX0JBU0VSX0JBU0UJCSgweDAxMDApCisjZGVmaW5lCUdJVFNfQkFTRVIo
eCkJCShHSVRTX0JBU0VSX0JBU0UgKyAoeCkgKiA4KQorCisjZGVmaW5lCQlHSVRTX0JBU0VSX1ZB
TElECSgxVUwgPDwgNjMpCisKKyNkZWZpbmUJCUdJVFNfQkFTRVJfVFlQRV9TSElGVAk1NgorI2Rl
ZmluZQkJR0lUU19CQVNFUl9UWVBFKHgpCVwKKwkJICAgICgoKHgpICYgR0lUU19CQVNFUl9UWVBF
X01BU0spID4+IEdJVFNfQkFTRVJfVFlQRV9TSElGVCkKKyNkZWZpbmUJCUdJVFNfQkFTRVJfVFlQ
RV9VTklNUEwJMHgwVUwJLyogVW5pbXBsZW1lbnRlZCAqLworI2RlZmluZQkJR0lUU19CQVNFUl9U
WVBFX0RFVgkweDFVTAkvKiBEZXZpY2VzICovCisjZGVmaW5lCQlHSVRTX0JBU0VSX1RZUEVfVlAJ
MHgyVUwJLyogVmlydHVhbCBQcm9jZXNzb3JzICovCisjZGVmaW5lCQlHSVRTX0JBU0VSX1RZUEVf
UFAJMHgzVUwJLyogUGh5c2ljYWwgUHJvY2Vzc29ycyAqLworI2RlZmluZQkJR0lUU19CQVNFUl9U
WVBFX0lDCTB4NFVMCS8qIEludGVycnVwdCBDb2xsZWN0aW9ucyAqLworI2RlZmluZQkJR0lUU19C
QVNFUl9UWVBFX1JFUzUJMHg1VUwJLyogUmVzZXJ2ZWQgKi8KKyNkZWZpbmUJCUdJVFNfQkFTRVJf
VFlQRV9SRVM2CTB4NlVMCS8qIFJlc2VydmVkICovCisjZGVmaW5lCQlHSVRTX0JBU0VSX1RZUEVf
UkVTNwkweDdVTAkvKiBSZXNlcnZlZCAqLworI2RlZmluZQkJR0lUU19CQVNFUl9UWVBFX01BU0sJ
KDB4N1VMIDw8IEdJVFNfQkFTRVJfVFlQRV9TSElGVCkKKy8qCisgKiBDYWNoZWFiaWxpdHkKKyAq
IDB4MCAtIE5vbi1jYWNoZWFibGUsIG5vbi1idWZmZXJhYmxlCisgKiAweDEgLSBOb24tY2FjaGVh
YmxlCisgKiAweDIgLSBSZWFkLWFsbG9jYXRlLCBXcml0ZS10aHJvdWdoCisgKiAweDMgLSBSZWFk
LWFsbG9jYXRlLCBXcml0ZS1iYWNrCisgKiAweDQgLSBXcml0ZS1hbGxvY2F0ZSwgV3JpdGUtdGhy
b3VnaAorICogMHg1IC0gV3JpdGUtYWxsb2NhdGUsIFdyaXRlLWJhY2sKKyAqIDB4NiAtIFJlYWQt
YWxsb2NhdGUsIFdyaXRlLWFsbG9jYXRlLCBXcml0ZS10aHJvdWdoCisgKiAweDcgLSBSZWFkLWFs
bG9jYXRlLCBXcml0ZS1hbGxvY2F0ZSwgV3JpdGUtYmFjaworICovCisjZGVmaW5lCQlHSVRTX0JB
U0VSX0NBQ0hFX1NISUZUCTU5CisjZGVmaW5lCQlHSVRTX0JBU0VSX0NBQ0hFX05DTkIJMHgwVUwK
KyNkZWZpbmUJCUdJVFNfQkFTRVJfQ0FDSEVfTkMJMHgxVUwKKyNkZWZpbmUJCUdJVFNfQkFTRVJf
Q0FDSEVfUkFXVAkweDJVTAorI2RlZmluZQkJR0lUU19CQVNFUl9DQUNIRV9SQVdCCTB4M1VMCisj
ZGVmaW5lCQlHSVRTX0JBU0VSX0NBQ0hFX1dBV1QJMHg0VUwKKyNkZWZpbmUJCUdJVFNfQkFTRVJf
Q0FDSEVfV0FXQgkweDVVTAorI2RlZmluZQkJR0lUU19CQVNFUl9DQUNIRV9SQVdBV1QJMHg2VUwK
KyNkZWZpbmUJCUdJVFNfQkFTRVJfQ0FDSEVfUkFXQVdCCTB4N1VMCisjZGVmaW5lCQlHSVRTX0JB
U0VSX0NBQ0hFX01BU0sJKDB4N1VMIDw8IEdJVFNfQkFTRVJfQ0FDSEVfU0hJRlQpCisKKyNkZWZp
bmUJCUdJVFNfQkFTRVJfRVNJWkVfU0hJRlQJNDgKKyNkZWZpbmUJCUdJVFNfQkFTRVJfRVNJWkVf
TUFTSwkoMHgxRlVMIDw8IEdJVFNfQkFTRVJfRVNJWkVfU0hJRlQpCisjZGVmaW5lCQlHSVRTX0JB
U0VSX0VTSVpFKHgpCVwKKwkJICAgICgoKCh4KSAmIEdJVFNfQkFTRVJfRVNJWkVfTUFTSykgPj4g
R0lUU19CQVNFUl9FU0laRV9TSElGVCkgKyAxKQorCisjZGVmaW5lCQlHSVRTX0JBU0VSX1BBX1NI
SUZUCTEyCisjZGVmaW5lCQlHSVRTX0JBU0VSX1BBX01BU0sJKDB4RkZGRkZGRkZGVUwgPDwgR0lU
U19CQVNFUl9QQV9TSElGVCkKKworLyoKKyAqIFNoYXJlYWJpbGl0eQorICogMHgwIC0gTm9uLXNo
YXJlYWJsZQorICogMHgxIC0gSW5uZXItc2hhcmVhYmxlCisgKiAweDIgLSBPdXRlci1zaGFyZWFi
bGUKKyAqIDB4MyAtIFJlc2VydmVkLiBUaHJlYXRlZCBhcyAweDAKKyAqLworI2RlZmluZQkJR0lU
U19CQVNFUl9TSEFSRV9TSElGVAkxMAorI2RlZmluZQkJR0lUU19CQVNFUl9TSEFSRV9OUwkweDBV
TAorI2RlZmluZQkJR0lUU19CQVNFUl9TSEFSRV9JUwkweDFVTAorI2RlZmluZQkJR0lUU19CQVNF
Ul9TSEFSRV9PUwkweDJVTAorI2RlZmluZQkJR0lUU19CQVNFUl9TSEFSRV9SRVMJMHgzVUwKKyNk
ZWZpbmUJCUdJVFNfQkFTRVJfU0hBUkVfTUFTSwkoMHgzVUwgPDwgR0lUU19CQVNFUl9TSEFSRV9T
SElGVCkKKworI2RlZmluZQkJR0lUU19CQVNFUl9QU1pfU0hJRlQJOAorI2RlZmluZQkJR0lUU19C
QVNFUl9QU1pfNEsJMHgwVUwKKyNkZWZpbmUJCUdJVFNfQkFTRVJfUFNaXzE2SwkweDFVTAorI2Rl
ZmluZQkJR0lUU19CQVNFUl9QU1pfNjRLCTB4MlVMCisjZGVmaW5lCQlHSVRTX0JBU0VSX1BTWl9N
QVNLCSgweDNVTCA8PCBHSVRTX0JBU0VSX1BTWl9TSElGVCkKKworI2RlZmluZQkJR0lUU19CQVNF
Ul9TSVpFX01BU0sJMHhGRlVMCisKKyNkZWZpbmUJCUdJVFNfQkFTRVJfTlVNCQk4CisKKyNkZWZp
bmUJR0lUU19UWVBFUgkJKDB4MDAwOCkKKyNkZWZpbmUJCUdJVFNfVFlQRVJfUFRBCQkoMVVMIDw8
IDE5KQorI2RlZmluZQkJR0lUU19UWVBFUl9ERVZCX1NISUZUCTEzCisjZGVmaW5lCQlHSVRTX1RZ
UEVSX0RFVkJfTUFTSwkoMHgxRlVMIDw8IEdJVFNfVFlQRVJfREVWQl9TSElGVCkKKy8qIE51bWJl
ciBvZiBkZXZpY2UgaWRlbnRpZmllcnMgaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUJCUdJVFNfVFlQ
RVJfREVWQih4KQlcCisJCSAgICAoKCgoeCkgJiBHSVRTX1RZUEVSX0RFVkJfTUFTSykgPj4gR0lU
U19UWVBFUl9ERVZCX1NISUZUKSArIDEpCisjZGVmaW5lCQlHSVRTX1RZUEVSX0lUVEVTX1NISUZU
CTQKKyNkZWZpbmUJCUdJVFNfVFlQRVJfSVRURVNfTUFTSwkoMHhGVUwgPDwgR0lUU19UWVBFUl9J
VFRFU19TSElGVCkKKy8qIE51bWJlciBvZiBieXRlcyBwZXIgSVRUIEVudHJ5ICovCisjZGVmaW5l
CQlHSVRTX1RZUEVSX0lUVEVTKHgpCVwKKwkJICAgICgoKCh4KSAmIEdJVFNfVFlQRVJfSVRURVNf
TUFTSykgPj4gR0lUU19UWVBFUl9JVFRFU19TSElGVCkgKyAxKQorCisjZGVmaW5lCUdJVFNfVFJB
TlNMQVRFUgkJKDB4MTAwNDApCisvKgorICogTFBJIHJlbGF0ZWQKKyAqLworI2RlZmluZQkJTFBJ
X0NPTkZfUFJJT19NQVNLCSgweEZDKQorI2RlZmluZQkJTFBJX0NPTkZfR1JPVVAxCQkoMSA8PCAx
KQorI2RlZmluZQkJTFBJX0NPTkZfRU5BQkxFCQkoMSA8PCAwKQorCiAvKgogICogQ1BVIGludGVy
ZmFjZQogICovCmRpZmYgLS1naXQgYS9zeXMvYXJtNjQvYXJtNjQvZ2ljX3YzX2l0cy5jIGIvc3lz
L2FybTY0L2FybTY0L2dpY192M19pdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9u
dWxsCisrKyBiL3N5cy9hcm02NC9hcm02NC9naWNfdjNfaXRzLmMKQEAgLTAsMCArMSwxNDQ4IEBA
CisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgRnJlZUJTRCBGb3VuZGF0aW9uCisgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgd2FzIGRldmVsb3BlZCBi
eSBTZW1paGFsZiB1bmRlcgorICogdGhlIHNwb25zb3JzaGlwIG9mIHRoZSBGcmVlQlNEIEZvdW5k
YXRpb24uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
QVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7
CisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNs
dWRlIDxzeXMvYml0c2V0Lmg+CisjaW5jbHVkZSA8c3lzL2JpdHN0cmluZy5oPgorI2luY2x1ZGUg
PHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMvZW5kaWFuLmg+CisjaW5jbHVkZSA8c3lzL2tlcm5l
bC5oPgorI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4KKyNpbmNsdWRlIDxzeXMvcm1hbi5oPgorI2lu
Y2x1ZGUgPHN5cy9wY2lpby5oPgorI2luY2x1ZGUgPHN5cy9wY3B1Lmg+CisjaW5jbHVkZSA8c3lz
L2xvY2suaD4KKyNpbmNsdWRlIDxzeXMvbXV0ZXguaD4KKworI2luY2x1ZGUgPGRldi9wY2kvcGNp
dmFyLmg+CisKKyNpbmNsdWRlIDx2bS92bS5oPgorI2luY2x1ZGUgPHZtL3BtYXAuaD4KKworI2lu
Y2x1ZGUgPG1hY2hpbmUvYnVzLmg+CisjaW5jbHVkZSA8bWFjaGluZS9jcHUuaD4KKyNpbmNsdWRl
IDxtYWNoaW5lL2NwdWZ1bmMuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2ludHIuaD4KKworI2luY2x1
ZGUgImdpY192M19yZWcuaCIKKyNpbmNsdWRlICJnaWNfdjNfdmFyLmgiCisKKyNpbmNsdWRlICJw
aWNfaWYuaCIKKworLyogRGV2aWNlIGFuZCBQSUMgbWV0aG9kcyAqLworc3RhdGljIGludCBnaWNf
djNfaXRzX2F0dGFjaChkZXZpY2VfdCk7CisKK3N0YXRpYyBkZXZpY2VfbWV0aG9kX3QgZ2ljX3Yz
X2l0c19tZXRob2RzW10gPSB7CisJLyogRGV2aWNlIGludGVyZmFjZSAqLworCURFVk1FVEhPRChk
ZXZpY2VfYXR0YWNoLAlnaWNfdjNfaXRzX2F0dGFjaCksCisJLyoKKwkgKiBQSUMgaW50ZXJmYWNl
CisJICovCisJLyogTVNJLVggKi8KKwlERVZNRVRIT0QocGljX2FsbG9jX21zaXgsCWdpY192M19p
dHNfYWxsb2NfbXNpeCksCisJREVWTUVUSE9EKHBpY19tYXBfbXNpeCwJCWdpY192M19pdHNfbWFw
X21zaXgpLAorCS8qIE1TSSAqLworCURFVk1FVEhPRChwaWNfYWxsb2NfbXNpLAlnaWNfdjNfaXRz
X2FsbG9jX21zaSksCisJREVWTUVUSE9EKHBpY19tYXBfbXNpLAkJZ2ljX3YzX2l0c19tYXBfbXNp
eCksCisKKwkvKiBFbmQgKi8KKwlERVZNRVRIT0RfRU5ECit9OworCitERUZJTkVfQ0xBU1NfMChn
aWNfdjNfaXRzLCBnaWNfdjNfaXRzX2RyaXZlciwgZ2ljX3YzX2l0c19tZXRob2RzLAorICAgIHNp
emVvZihzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YykpOworCitNQUxMT0NfREVGSU5FKE1fR0lDX1Yz
X0lUUywgIkdJQ3YzIElUUyIsIEdJQ19WM19JVFNfREVWU1RSKTsKKworc3RhdGljIGludCBpdHNf
YWxsb2NfdGFibGVzKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICopOworc3RhdGljIHZvaWQgaXRz
X2ZyZWVfdGFibGVzKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICopOworc3RhdGljIHZvaWQgaXRz
X2luaXRfY29tbWFuZHEoc3RydWN0IGdpY192M19pdHNfc29mdGMgKik7CitzdGF0aWMgaW50IGl0
c19pbml0X2NwdShzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqKTsKK3N0YXRpYyB2b2lkIGl0c19p
bml0X2NwdV9jb2xsZWN0aW9uKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICopOworCitzdGF0aWMg
aW50IGl0c19jbWRfc2VuZChzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqLCBzdHJ1Y3QgaXRzX2Nt
ZF9kZXNjICopOworCitzdGF0aWMgdm9pZCBpdHNfY21kX21hcGMoc3RydWN0IGdpY192M19pdHNf
c29mdGMgKiwgc3RydWN0IGl0c19jb2wgKiwgdWludDhfdCk7CitzdGF0aWMgdm9pZCBpdHNfY21k
X21hcHZpKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICosIHN0cnVjdCBpdHNfZGV2ICosIHVpbnQz
Ml90LAorICAgIHVpbnQzMl90KTsKK3N0YXRpYyB2b2lkIGl0c19jbWRfbWFwaShzdHJ1Y3QgZ2lj
X3YzX2l0c19zb2Z0YyAqLCBzdHJ1Y3QgaXRzX2RldiAqLCB1aW50MzJfdCk7CitzdGF0aWMgdm9p
ZCBpdHNfY21kX2ludihzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqLCBzdHJ1Y3QgaXRzX2RldiAq
LCB1aW50MzJfdCk7CitzdGF0aWMgdm9pZCBpdHNfY21kX2ludmFsbChzdHJ1Y3QgZ2ljX3YzX2l0
c19zb2Z0YyAqLCBzdHJ1Y3QgaXRzX2NvbCAqKTsKKworc3RhdGljIHZvaWQgbHBpX2luaXRfY29u
ZnRhYmxlKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICopOworc3RhdGljIHZvaWQgbHBpX2JpdG1h
cF9pbml0KHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICopOworc3RhdGljIHZvaWQgbHBpX2luaXRf
Y3B1KHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICopOworc3RhdGljIGludCBscGlfY29uZmlnX2Nw
dShzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqKTsKKworY29uc3QgY2hhciAqaXRzX3B0YWJfY2Fj
aGVbXSA9IHsKKwlbR0lUU19CQVNFUl9DQUNIRV9OQ05CXSA9ICIoTkMsTkIpIiwKKwlbR0lUU19C
QVNFUl9DQUNIRV9OQ10gPSAiKE5DKSIsCisJW0dJVFNfQkFTRVJfQ0FDSEVfUkFXVF0gPSAiKFJB
LFdUKSIsCisJW0dJVFNfQkFTRVJfQ0FDSEVfUkFXQl0gPSAiKFJBLFdCKSIsCisJW0dJVFNfQkFT
RVJfQ0FDSEVfV0FXVF0gPSAiKFdBLFdUKSIsCisJW0dJVFNfQkFTRVJfQ0FDSEVfV0FXQl0gPSAi
KFdBLFdCKSIsCisJW0dJVFNfQkFTRVJfQ0FDSEVfUkFXQVdUXSA9ICIoUkFXQSxXVCkiLAorCVtH
SVRTX0JBU0VSX0NBQ0hFX1JBV0FXQl0gPSAiKFJBV0EsV0IpIiwKK307CisKK2NvbnN0IGNoYXIg
Kml0c19wdGFiX3NoYXJlW10gPSB7CisJW0dJVFNfQkFTRVJfU0hBUkVfTlNdID0gIm5vbmUiLAor
CVtHSVRTX0JBU0VSX1NIQVJFX0lTXSA9ICJpbm5lciIsCisJW0dJVFNfQkFTRVJfU0hBUkVfT1Nd
ID0gIm91dGVyIiwKKwlbR0lUU19CQVNFUl9TSEFSRV9SRVNdID0gIm5vbmUiLAorfTsKKworY29u
c3QgY2hhciAqaXRzX3B0YWJfdHlwZVtdID0geworCVtHSVRTX0JBU0VSX1RZUEVfVU5JTVBMXSA9
ICJVbmltcGxlbWVudGVkIiwKKwlbR0lUU19CQVNFUl9UWVBFX0RFVl0gPSAiRGV2aWNlcyIsCisJ
W0dJVFNfQkFTRVJfVFlQRV9WUF0gPSAiVmlydHVhbCBQcm9jZXNzb3JzIiwKKwlbR0lUU19CQVNF
Ul9UWVBFX1BQXSA9ICJQaHlzaWNhbCBQcm9jZXNzb3JzIiwKKwlbR0lUU19CQVNFUl9UWVBFX0lD
XSA9ICJJbnRlcnJ1cHQgQ29sbGVjdGlvbnMiLAorCVtHSVRTX0JBU0VSX1RZUEVfUkVTNV0gPSAi
UmVzZXJ2ZWQgKDUpIiwKKwlbR0lUU19CQVNFUl9UWVBFX1JFUzZdID0gIlJlc2VydmVkICg2KSIs
CisJW0dJVFNfQkFTRVJfVFlQRV9SRVM3XSA9ICJSZXNlcnZlZCAoNykiLAorfTsKKworc3RhdGlj
IHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICppdHNfc2M7CisKKyNkZWZpbmUJZ2ljX2l0c19yZWFk
KHNjLCBsZW4sIHJlZykJCVwKKyAgICBidXNfcmVhZF8jI2xlbigmc2MtPml0c19yZXNbMF0sIHJl
ZykKKworI2RlZmluZQlnaWNfaXRzX3dyaXRlKHNjLCBsZW4sIHJlZywgdmFsKQlcCisgICAgYnVz
X3dyaXRlXyMjbGVuKCZzYy0+aXRzX3Jlc1swXSwgcmVnLCB2YWwpCisKK3N0YXRpYyBpbnQKK2dp
Y192M19pdHNfYXR0YWNoKGRldmljZV90IGRldikKK3sKKwlzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0
YyAqc2M7CisJdWludDY0X3QgZ2l0c190bXA7CisJdWludDMyX3QgZ2l0c19waWRyMjsKKwlpbnQg
cmlkOworCWludCByZXQ7CisKKwlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKworCS8qCisJ
ICogSW5pdGlhbGl6ZSBzbGVlcCAmIHNwaW4gbXV0ZXggZm9yIElUUworCSAqLworCS8qIFByb3Rl
Y3RzIElUUyBkZXZpY2UgbGlzdCBhbmQgYXNzaWduZWQgTFBJcyBiaXRtYXBzLiAqLworCW10eF9p
bml0KCZzYy0+aXRzX210eCwgIklUUyBzbGVlcCBsb2NrIiwgTlVMTCwgTVRYX0RFRik7CisJLyog
UHJvdGVjdHMgYWNjZXNzIHRvIElUUyBjb21tYW5kIGNpcmN1bGFyIGJ1ZmZlci4gKi8KKwltdHhf
aW5pdCgmc2MtPml0c19zcGluX210eCwgIklUUyBzcGluIGxvY2siLCBOVUxMLCBNVFhfU1BJTik7
CisKKwlyaWQgPSAwOworCXNjLT5pdHNfcmVzID0gYnVzX2FsbG9jX3Jlc291cmNlX2FueShkZXYs
IFNZU19SRVNfTUVNT1JZLCAmcmlkLAorCSAgICBSRl9BQ1RJVkUpOworCWlmIChzYy0+aXRzX3Jl
cyA9PSBOVUxMKSB7CisJCWRldmljZV9wcmludGYoZGV2LCAiQ291bGQgbm90IGFsbG9jYXRlIG1l
bW9yeVxuIik7CisJCXJldHVybiAoRU5YSU8pOworCX0KKworCXNjLT5kZXYgPSBkZXY7CisKKwln
aXRzX3BpZHIyID0gZ2ljX2l0c19yZWFkKHNjLCA0LCBHSVRTX1BJRFIyKTsKKwlzd2l0Y2ggKGdp
dHNfcGlkcjIgJiBHSVRTX1BJRFIyX0FSQ0hfTUFTSykgeworCWNhc2UgR0lUU19QSURSMl9BUkNI
X0dJQ3YzOiAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIEdJVFNfUElEUjJfQVJDSF9HSUN2NDoK
KwkJaWYgKGJvb3R2ZXJib3NlKSB7CisJCQlkZXZpY2VfcHJpbnRmKGRldiwgIklUUyBmb3VuZC4g
QXJjaGl0ZWN0dXJlIHJldi4gJXVcbiIsCisJCQkgICAgKHVfaW50KShnaXRzX3BpZHIyICYgR0lU
U19QSURSMl9BUkNIX01BU0spID4+IDQpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRl
dmljZV9wcmludGYoZGV2LCAiTm8gSVRTIGZvdW5kIGluIHRoZSBzeXN0ZW1cbiIpOworCQlnaWNf
djNfaXRzX2RldGFjaChkZXYpOworCQlyZXR1cm4gKEVOT0RFVik7CisJfQorCisJLyogMS4gSW5p
dGlhbGl6ZSBjb21tYW5kcyBxdWV1ZSAqLworCWl0c19pbml0X2NvbW1hbmRxKHNjKTsKKworCS8q
IDIuIFByb3ZpZGUgbWVtb3J5IGZvciBhbnkgcHJpdmF0ZSBJVFMgdGFibGVzICovCisJcmV0ID0g
aXRzX2FsbG9jX3RhYmxlcyhzYyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWdpY192M19pdHNfZGV0
YWNoKGRldik7CisJCXJldHVybiAocmV0KTsKKwl9CisKKwkvKiAzLiBBbGxvY2F0ZSBjb2xsZWN0
aW9ucy4gT25lIHBlci1DUFUgKi8KKwlzYy0+aXRzX2NvbHMgPSBtYWxsb2Moc2l6ZW9mKCpzYy0+
aXRzX2NvbHMpICogTUFYQ1BVLAorCSAgICBNX0dJQ19WM19JVFMsIChNX1dBSVRPSyB8IE1fWkVS
TykpOworCisJLyogNC4gRW5hYmxlIElUUyBpbiBHSVRTX0NUTFIgKi8KKwlnaXRzX3RtcCA9IGdp
Y19pdHNfcmVhZChzYywgNCwgR0lUU19DVExSKTsKKwlnaWNfaXRzX3dyaXRlKHNjLCA0LCBHSVRT
X0NUTFIsIGdpdHNfdG1wIHwgR0lUU19DVExSX0VOKTsKKworCS8qIDUuIEluaXRpYWxpemUgTFBJ
cyBjb25maWd1cmF0aW9uIHRhYmxlICovCisJbHBpX2luaXRfY29uZnRhYmxlKHNjKTsKKworCS8q
IDYuIExQSXMgYml0bWFwIGluaXQgKi8KKwlscGlfYml0bWFwX2luaXQoc2MpOworCisJLyogNy4g
Q1BVIGluaXQgKi8KKwkodm9pZClpdHNfaW5pdF9jcHUoc2MpOworCisJLyogOC4gSW5pdCBJVFMg
ZGV2aWNlcyBsaXN0ICovCisJVEFJTFFfSU5JVCgmc2MtPml0c19kZXZfbGlzdCk7CisKKwlhcm1f
cmVnaXN0ZXJfbXNpX3BpYyhkZXYpOworCisJLyoKKwkgKiBYWFggQVJNNjRUT0RPOiBXZSBuZWVk
IHRvIGhhdmUgSVRTIHNvZnR3YXJlIGNvbnRleHQKKwkgKiB3aGVuIGJlaW5nIGNhbGxlZCBieSB0
aGUgaW50ZXJydXB0IGNvZGUgKG1hc2svdW5tYXNrKS4KKwkgKiBUaGlzIG1heSBiZSB1c2VkIG9u
bHkgd2hlbiBvbmUgSVRTIGlzIHByZXNlbnQgaW4KKwkgKiB0aGUgc3lzdGVtIGFuZCBldmVudHVh
bGx5IHNob3VsZCBiZSByZW1vdmVkLgorCSAqLworCUtBU1NFUlQoaXRzX3NjID09IE5VTEwsCisJ
ICAgICgiVHJ5aW5nIHRvIGFzc2lnbiBpdHNfc2MgdGhhdCBpcyBhbHJlYWR5IHNldCIpKTsKKwlp
dHNfc2MgPSBzYzsKKworCXJldHVybiAoMCk7Cit9CisKKy8qIFdpbGwgbm90IGRldGFjaCBidXQg
dXNlIGl0IGZvciBjb252ZW5pZW5jZSAqLworaW50CitnaWNfdjNfaXRzX2RldGFjaChkZXZpY2Vf
dCBkZXYpCit7CisJZGV2aWNlX3QgcGFyZW50OworCXN0cnVjdCBnaWNfdjNfc29mdGMgKmdpY19z
YzsKKwlzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqc2M7CisJdV9pbnQgY3B1aWQ7CisJaW50IHJp
ZCA9IDA7CisKKwlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwljcHVpZCA9IFBDUFVfR0VU
KGNwdWlkKTsKKworCS8qIFJlbGVhc2Ugd2hhdCdzIHBvc3NpYmxlICovCisKKwkvKiBDb21tYW5k
IHF1ZXVlICovCisJaWYgKCh2b2lkICopc2MtPml0c19jbWRxX2Jhc2UgIT0gTlVMTCkgeworCQlj
b250aWdmcmVlKCh2b2lkICopc2MtPml0c19jbWRxX2Jhc2UsCisJCSAgICBJVFNfQ01EUV9TSVpF
LCBNX0dJQ19WM19JVFMpOworCX0KKwkvKiBJVFRzICovCisJaXRzX2ZyZWVfdGFibGVzKHNjKTsK
KwkvKiBDb2xsZWN0aW9ucyAqLworCWZyZWUoc2MtPml0c19jb2xzLCBNX0dJQ19WM19JVFMpOwor
CS8qIExQSSBjb25maWcgdGFibGUgKi8KKwlwYXJlbnQgPSBkZXZpY2VfZ2V0X3BhcmVudChzYy0+
ZGV2KTsKKwlnaWNfc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKHBhcmVudCk7CisJaWYgKCh2b2lkICop
Z2ljX3NjLT5naWNfcmVkaXN0cy5scGlzLmNvbmZfYmFzZSAhPSBOVUxMKSB7CisJCWNvbnRpZ2Zy
ZWUoKHZvaWQgKilnaWNfc2MtPmdpY19yZWRpc3RzLmxwaXMuY29uZl9iYXNlLAorCQkgICAgTFBJ
X0NPTkZUQUJfU0laRSwgTV9HSUNfVjNfSVRTKTsKKwl9CisJaWYgKCh2b2lkICopZ2ljX3NjLT5n
aWNfcmVkaXN0cy5scGlzLnBlbmRfYmFzZVtjcHVpZF0gIT0gTlVMTCkgeworCQljb250aWdmcmVl
KCh2b2lkICopZ2ljX3NjLT5naWNfcmVkaXN0cy5scGlzLnBlbmRfYmFzZVtjcHVpZF0sCisJCSAg
ICByb3VuZHVwMihMUElfUEVORFRBQl9TSVpFLCBQQUdFX1NJWkVfNjRLKSwgTV9HSUNfVjNfSVRT
KTsKKwl9CisKKwkvKiBSZXNvdXJjZS4uLiAqLworCWJ1c19yZWxlYXNlX3Jlc291cmNlKGRldiwg
U1lTX1JFU19NRU1PUlksIHJpZCwgc2MtPml0c19yZXMpOworCisJLyogWFhYIEFSTTY0VE9ETzog
UmVzZXQgZ2xvYmFsIHBvaW50ZXIgdG8gSVRTIHNvZnR3YXJlIGNvbnRleHQgKi8KKwlpdHNfc2Mg
PSBOVUxMOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAoraXRzX2FsbG9jX3RhYmxl
cyhzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqc2MpCit7CisJdWludDY0X3QgZ2l0c19iYXNlciwg
Z2l0c190bXA7CisJdWludDY0X3QgdHlwZSwgZXNpemUsIGNhY2hlLCBzaGFyZSwgcHN6OworCXVp
bnQ2NF90IGdpdHNfdHlwZXI7CisJc2l6ZV90IHBhZ2Vfc2l6ZSwgbnBhZ2VzLCBuaXRzcGFnZXMs
IG5pZGVudHMsIHRuOworCXNpemVfdCBpdHNfdGJsX3NpemU7CisJdm1fb2Zmc2V0X3QgcHRhYl92
YWRkcjsKKwl2bV9wYWRkcl90IHB0YWJfcGFkZHI7CisJYm9vbGVhbl90IGZpcnN0ID0gVFJVRTsK
KworCXBhZ2Vfc2l6ZSA9IFBBR0VfU0laRV82NEs7CisKKwkvKiBSZWFkIGZlYXR1cmVzIGZpcnN0
ICovCisJZ2l0c190eXBlciA9IGdpY19pdHNfcmVhZChzYywgOCwgR0lUU19UWVBFUik7CisKKwlm
b3IgKHRuID0gMDsgdG4gPCBHSVRTX0JBU0VSX05VTTsgdG4rKykgeworCQlnaXRzX2Jhc2VyID0g
Z2ljX2l0c19yZWFkKHNjLCA4LCBHSVRTX0JBU0VSKHRuKSk7CisJCXR5cGUgPSBHSVRTX0JBU0VS
X1RZUEUoZ2l0c19iYXNlcik7CisJCS8qIEdldCB0aGUgVGFibGUgRW50cnkgc2l6ZSAqLworCQll
c2l6ZSA9IEdJVFNfQkFTRVJfRVNJWkUoZ2l0c19iYXNlcik7CisKKwkJc3dpdGNoICh0eXBlKSB7
CisJCWNhc2UgR0lUU19CQVNFUl9UWVBFX1VOSU1QTDogLyogZmFsbCB0aHJvdWdoICovCisJCWNh
c2UgR0lUU19CQVNFUl9UWVBFX1JFUzU6CisJCWNhc2UgR0lUU19CQVNFUl9UWVBFX1JFUzY6CisJ
CWNhc2UgR0lUU19CQVNFUl9UWVBFX1JFUzc6CisJCQljb250aW51ZTsKKwkJY2FzZSBHSVRTX0JB
U0VSX1RZUEVfREVWOgorCQkJbmlkZW50cyA9ICgxIDw8IEdJVFNfVFlQRVJfREVWQihnaXRzX3R5
cGVyKSk7CisJCQlpdHNfdGJsX3NpemUgPSBlc2l6ZSAqIG5pZGVudHM7CisJCQlpdHNfdGJsX3Np
emUgPSByb3VuZHVwMihpdHNfdGJsX3NpemUsIHBhZ2Vfc2l6ZSk7CisJCQlucGFnZXMgPSBob3dt
YW55KGl0c190Ymxfc2l6ZSwgUEFHRV9TSVpFKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJ
bnBhZ2VzID0gaG93bWFueShwYWdlX3NpemUsIFBBR0VfU0laRSk7CisJCQlicmVhazsKKwkJfQor
CisJCS8qIEFsbG9jYXRlIHJlcXVpcmVkIHNwYWNlICovCisJCXB0YWJfdmFkZHIgPSAodm1fb2Zm
c2V0X3QpY29udGlnbWFsbG9jKG5wYWdlcyAqIFBBR0VfU0laRSwKKwkJICAgIE1fR0lDX1YzX0lU
UywgKE1fV0FJVE9LIHwgTV9aRVJPKSwgMCwgfjBVTCwgUEFHRV9TSVpFLCAwKTsKKworCQlzYy0+
aXRzX3B0YWJzW3RuXS5wdGFiX3ZhZGRyID0gcHRhYl92YWRkcjsKKwkJc2MtPml0c19wdGFic1t0
bl0ucHRhYl9wZ3N6ID0gUEFHRV9TSVpFOworCQlzYy0+aXRzX3B0YWJzW3RuXS5wdGFiX25wYWdl
cyA9IG5wYWdlczsKKworCQlwdGFiX3BhZGRyID0gdnRvcGh5cyhwdGFiX3ZhZGRyKTsKKwkJS0FT
U0VSVCgocHRhYl9wYWRkciAmIEdJVFNfQkFTRVJfUEFfTUFTSykgPT0gcHRhYl9wYWRkciwKKwkJ
ICAgICgiJXM6IFVuYWxpZ25lZCBQQSBmb3IgSW50ZXJydXB0IFRyYW5zbGF0aW9uIFRhYmxlIiwK
KwkJICAgIGRldmljZV9nZXRfbmFtZShzYy0+ZGV2KSkpOworCisJCS8qIFNldCBkZWZhdWx0czog
V0FXQiwgSVMgKi8KKwkJY2FjaGUgPSBHSVRTX0JBU0VSX0NBQ0hFX1dBV0I7CisJCXNoYXJlID0g
R0lUU19CQVNFUl9TSEFSRV9JUzsKKworCQlmb3IgKDs7KSB7CisJCQluaXRzcGFnZXMgPSBob3dt
YW55KGl0c190Ymxfc2l6ZSwgcGFnZV9zaXplKTsKKworCQkJc3dpdGNoIChwYWdlX3NpemUpIHsK
KwkJCWNhc2UgUEFHRV9TSVpFOgkJLyogNEtCICovCisJCQkJcHN6ID0gR0lUU19CQVNFUl9QU1pf
NEs7CisJCQkJYnJlYWs7CisJCQljYXNlIFBBR0VfU0laRV8xNks6CS8qIDE2S0IgKi8KKwkJCQlw
c3ogPSBHSVRTX0JBU0VSX1BTWl80SzsKKwkJCQlicmVhazsKKwkJCWNhc2UgUEFHRV9TSVpFXzY0
SzoJLyogNjRLQiAqLworCQkJCXBzeiA9IEdJVFNfQkFTRVJfUFNaXzY0SzsKKwkJCQlicmVhazsK
KwkJCWRlZmF1bHQ6CisJCQkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2LAorCQkJCSAgICAiVW5zdXBw
b3J0ZWQgcGFnZSBzaXplOiAlenVLQlxuIiwKKwkJCQkgICAgKHBhZ2Vfc2l6ZSAvIDEwMjQpKTsK
KwkJCQlpdHNfZnJlZV90YWJsZXMoc2MpOworCQkJCXJldHVybiAoRU5YSU8pOworCQkJfQorCisJ
CQkvKiBDbGVhciBmaWVsZHMgdW5kZXIgbW9kaWZpY2F0aW9uIGZpcnN0ICovCisJCQlnaXRzX2Jh
c2VyICY9IH4oR0lUU19CQVNFUl9WQUxJRCB8CisJCQkgICAgR0lUU19CQVNFUl9DQUNIRV9NQVNL
IHwgR0lUU19CQVNFUl9UWVBFX01BU0sgfAorCQkJICAgIEdJVFNfQkFTRVJfRVNJWkVfTUFTSyB8
IEdJVFNfQkFTRVJfUEFfTUFTSyB8CisJCQkgICAgR0lUU19CQVNFUl9TSEFSRV9NQVNLIHwgR0lU
U19CQVNFUl9QU1pfTUFTSyB8CisJCQkgICAgR0lUU19CQVNFUl9TSVpFX01BU0spOworCQkJLyog
Q29uc3RydWN0IHJlZ2lzdGVyIHZhbHVlICovCisJCQlnaXRzX2Jhc2VyIHw9CisJCQkgICAgKHR5
cGUgPDwgR0lUU19CQVNFUl9UWVBFX1NISUZUKSB8CisJCQkgICAgKChlc2l6ZSAtIDEpIDw8IEdJ
VFNfQkFTRVJfRVNJWkVfU0hJRlQpIHwKKwkJCSAgICAoY2FjaGUgPDwgR0lUU19CQVNFUl9DQUNI
RV9TSElGVCkgfAorCQkJICAgIChzaGFyZSA8PCBHSVRTX0JBU0VSX1NIQVJFX1NISUZUKSB8CisJ
CQkgICAgKHBzeiA8PCBHSVRTX0JBU0VSX1BTWl9TSElGVCkgfAorCQkJICAgIHB0YWJfcGFkZHIg
fCAobml0c3BhZ2VzIC0gMSkgfAorCQkJICAgIEdJVFNfQkFTRVJfVkFMSUQ7CisKKwkJCWdpY19p
dHNfd3JpdGUoc2MsIDgsIEdJVFNfQkFTRVIodG4pLCBnaXRzX2Jhc2VyKTsKKwkJCS8qCisJCQkg
KiBWZXJpZnkuCisJCQkgKiBEZXBlbmRpbmcgb24gaW1wbGVtZW50YXRpb24gd2UgbWF5IGVuY291
bnRlcgorCQkJICogc2hhcmVhYmlsaXR5IGFuZCBwYWdlIHNpemUgbWlzbWF0Y2guCisJCQkgKi8K
KwkJCWdpdHNfdG1wID0gZ2ljX2l0c19yZWFkKHNjLCA4LCBHSVRTX0JBU0VSKHRuKSk7CisJCQlp
ZiAoKChnaXRzX3RtcCBeIGdpdHNfYmFzZXIpICYgR0lUU19CQVNFUl9TSEFSRV9NQVNLKSAhPSAw
KSB7CisJCQkJc2hhcmUgPSBnaXRzX3RtcCAmIEdJVFNfQkFTRVJfU0hBUkVfTUFTSzsKKwkJCQlz
aGFyZSA+Pj0gR0lUU19CQVNFUl9TSEFSRV9TSElGVDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwor
CQkJaWYgKCgoZ2l0c190bXAgXiBnaXRzX2Jhc2VyKSAmIEdJVFNfQkFTRVJfUFNaX01BU0spICE9
IDApIHsKKwkJCQlzd2l0Y2ggKHBhZ2Vfc2l6ZSkgeworCQkJCWNhc2UgUEFHRV9TSVpFXzE2SzoK
KwkJCQkJLyogRHJvcCB0byA0S0IgcGFnZSAqLworCQkJCQlwYWdlX3NpemUgPSBQQUdFX1NJWkU7
CisJCQkJCWNvbnRpbnVlOworCQkJCWNhc2UgUEFHRV9TSVpFXzY0SzoKKwkJCQkJLyogRHJvcCB0
byAxNktCIHBhZ2UgKi8KKwkJCQkJcGFnZV9zaXplID0gUEFHRV9TSVpFXzE2SzsKKwkJCQkJY29u
dGludWU7CisJCQkJfQorCQkJfQorCQkJLyoKKwkJCSAqIEFsbCBwb3NzaWJsZSBhZGp1c3RtZW50
cyBzaG91bGQKKwkJCSAqIGJlIGFwcGxpZWQgYnkgbm93IHNvIGp1c3QgYnJlYWsgdGhlIGxvb3Au
CisJCQkgKi8KKwkJCWJyZWFrOworCQl9CisJCS8qCisJCSAqIERvIG5vdCBjb21wYXJlIENhY2hl
YWJpbGl0eSBmaWVsZCBzaW5jZQorCQkgKiBpdCBpcyBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkLgor
CQkgKi8KKwkJZ2l0c190bXAgJj0gfkdJVFNfQkFTRVJfQ0FDSEVfTUFTSzsKKwkJZ2l0c19iYXNl
ciAmPSB+R0lUU19CQVNFUl9DQUNIRV9NQVNLOworCisJCWlmIChnaXRzX3RtcCAhPSBnaXRzX2Jh
c2VyKSB7CisJCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsCisJCQkgICAgIkNvdWxkIG5vdCBhbGxv
Y2F0ZSBJVFMgdGFibGVzXG4iKTsKKwkJCWl0c19mcmVlX3RhYmxlcyhzYyk7CisJCQlyZXR1cm4g
KEVOWElPKTsKKwkJfQorCisJCWlmIChib290dmVyYm9zZSkgeworCQkJaWYgKGZpcnN0KSB7CisJ
CQkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2LAorCQkJCSAgICAiQWxsb2NhdGVkIElUUyBwcml2YXRl
IHRhYmxlczpcbiIpOworCQkJCWZpcnN0ID0gRkFMU0U7CisJCQl9CisJCQlkZXZpY2VfcHJpbnRm
KHNjLT5kZXYsCisJCQkgICAgIlx0UFRBQiV6dSBmb3IgJXM6IFBBIDB4JWx4LCIKKwkJCSAgICAi
ICVsdSBlbnRyaWVzLCIKKwkJCSAgICAiIGNhY2hlIHBvbGljeSAlcywgJXMgc2hhcmVhYmxlLCIK
KwkJCSAgICAiIHBhZ2Ugc2l6ZSAlenVLQlxuIiwKKwkJCSAgICB0biwgaXRzX3B0YWJfdHlwZVt0
eXBlXSwgcHRhYl9wYWRkciwKKwkJCSAgICAocGFnZV9zaXplICogbml0c3BhZ2VzKSAvIGVzaXpl
LAorCQkJICAgIGl0c19wdGFiX2NhY2hlW2NhY2hlXSwgaXRzX3B0YWJfc2hhcmVbc2hhcmVdLAor
CQkJICAgIHBhZ2Vfc2l6ZSAvIDEwMjQpOworCQl9CisJfQorCisJcmV0dXJuICgwKTsKK30KKwor
c3RhdGljIHZvaWQKK2l0c19mcmVlX3RhYmxlcyhzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqc2Mp
Cit7CisJdm1fb2Zmc2V0X3QgcHRhYl92YWRkcjsKKwlzaXplX3Qgc2l6ZTsKKwlzaXplX3QgdG47
CisKKwlmb3IgKHRuID0gMDsgdG4gPCBHSVRTX0JBU0VSX05VTTsgdG4rKykgeworCQlwdGFiX3Zh
ZGRyID0gc2MtPml0c19wdGFic1t0bl0ucHRhYl92YWRkcjsKKwkJaWYgKHB0YWJfdmFkZHIgPT0g
MCkKKwkJCWNvbnRpbnVlOworCQlzaXplID0gc2MtPml0c19wdGFic1t0bl0ucHRhYl9wZ3N6Owor
CQlzaXplICo9IHNjLT5pdHNfcHRhYnNbdG5dLnB0YWJfbnBhZ2VzOworCisJCWlmICgodm9pZCAq
KXB0YWJfdmFkZHIgIT0gTlVMTCkKKwkJCWNvbnRpZ2ZyZWUoKHZvaWQgKilwdGFiX3ZhZGRyLCBz
aXplLCBNX0dJQ19WM19JVFMpOworCisJCS8qIENsZWFyIHRoZSB0YWJsZSBkZXNjcmlwdGlvbiAq
LworCQltZW1zZXQoJnNjLT5pdHNfcHRhYnNbdG5dLCAwLCBzaXplb2Yoc2MtPml0c19wdGFic1t0
bl0pKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitpdHNfaW5pdF9jb21tYW5kcShzdHJ1Y3QgZ2lj
X3YzX2l0c19zb2Z0YyAqc2MpCit7CisJdWludDY0X3QgZ2l0c19jYmFzZXIsIGdpdHNfdG1wOwor
CXVpbnQ2NF90IGNhY2hlLCBzaGFyZTsKKwl2bV9wYWRkcl90IGNtZHFfcGFkZHI7CisJZGV2aWNl
X3QgZGV2OworCisJZGV2ID0gc2MtPmRldjsKKwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIGNvbW1h
bmQgcXVldWUgKi8KKwlzYy0+aXRzX2NtZHFfYmFzZSA9IGNvbnRpZ21hbGxvYyhJVFNfQ01EUV9T
SVpFLCBNX0dJQ19WM19JVFMsCisJICAgIChNX1dBSVRPSyB8IE1fWkVSTyksIDAsIH4wVUwsIElU
U19DTURRX1NJWkUsIDApOworCS8qIFNldCBjb21tYW5kIHF1ZXVlIHdyaXRlIHBvaW50ZXIgKGNv
bW1hbmQgcXVldWUgZW1wdHkpICovCisJc2MtPml0c19jbWRxX3dyaXRlID0gc2MtPml0c19jbWRx
X2Jhc2U7CisKKwkvKiBTYXZlIGNvbW1hbmQgcXVldWUgcG9pbnRlciBhbmQgYXR0cmlidXRlcyAq
LworCWNtZHFfcGFkZHIgPSB2dG9waHlzKHNjLT5pdHNfY21kcV9iYXNlKTsKKworCS8qIFNldCBk
ZWZhdWx0czogTm9ybWFsIElubmVyIFdBV0IsIElTICovCisJY2FjaGUgPSBHSVRTX0NCQVNFUl9D
QUNIRV9OSVdBV0I7CisJc2hhcmUgPSBHSVRTX0NCQVNFUl9TSEFSRV9JUzsKKworCWdpdHNfY2Jh
c2VyID0gKGNtZHFfcGFkZHIgfAorCSAgICAoY2FjaGUgPDwgR0lUU19DQkFTRVJfQ0FDSEVfU0hJ
RlQpIHwKKwkgICAgKHNoYXJlIDw8IEdJVFNfQ0JBU0VSX1NIQVJFX1NISUZUKSB8CisJICAgIC8q
IE51bWJlciBvZiA0S0IgcGFnZXMgLSAxICovCisJICAgICgoSVRTX0NNRFFfU0laRSAvIFBBR0Vf
U0laRSkgLSAxKSB8CisJICAgIC8qIFZhbGlkIGJpdCAqLworCSAgICBHSVRTX0NCQVNFUl9WQUxJ
RCk7CisKKwlnaWNfaXRzX3dyaXRlKHNjLCA4LCBHSVRTX0NCQVNFUiwgZ2l0c19jYmFzZXIpOwor
CWdpdHNfdG1wID0gZ2ljX2l0c19yZWFkKHNjLCA4LCBHSVRTX0NCQVNFUik7CisKKwlpZiAoKChn
aXRzX3RtcCBeIGdpdHNfY2Jhc2VyKSAmIEdJVFNfQ0JBU0VSX1NIQVJFX01BU0spICE9IDApIHsK
KwkJaWYgKGJvb3R2ZXJib3NlKSB7CisJCQlkZXZpY2VfcHJpbnRmKGRldiwKKwkJCSAgICAiV2ls
bCB1c2UgY2FjaGUgZmx1c2hpbmcgZm9yIGNvbW1hbmRzIHF1ZXVlXG4iKTsKKwkJfQorCQkvKiBD
b21tYW5kIHF1ZXVlIG5lZWRzIGNhY2hlIGZsdXNoaW5nICovCisJCXNjLT5pdHNfZmxhZ3MgfD0g
SVRTX0ZMQUdTX0NNRFFfRkxVU0g7CisJfQorCisJZ2ljX2l0c193cml0ZShzYywgOCwgR0lUU19D
V1JJVEVSLCAweDApOworfQorCitzdGF0aWMgaW50CitpdHNfaW5pdF9jcHUoc3RydWN0IGdpY192
M19pdHNfc29mdGMgKnNjKQoreworCWRldmljZV90IHBhcmVudDsKKwlzdHJ1Y3QgZ2ljX3YzX3Nv
ZnRjICpnaWNfc2M7CisKKwkvKgorCSAqIENoZWNrIGZvciBMUElzIHN1cHBvcnQgb24gdGhpcyBS
ZS1EaXN0cmlidXRvci4KKwkgKi8KKwlwYXJlbnQgPSBkZXZpY2VfZ2V0X3BhcmVudChzYy0+ZGV2
KTsKKwlnaWNfc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKHBhcmVudCk7CisJaWYgKChnaWNfcl9yZWFk
KGdpY19zYywgNCwgR0lDUl9UWVBFUikgJiBHSUNSX1RZUEVSX1BMUElTKSA9PSAwKSB7CisJCWlm
IChib290dmVyYm9zZSkgeworCQkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2LAorCQkJICAgICJMUElz
IG5vdCBzdXBwb3J0ZWQgb24gQ1BVJXVcbiIsIFBDUFVfR0VUKGNwdWlkKSk7CisJCX0KKwkJcmV0
dXJuIChFTlhJTyk7CisJfQorCisJLyogSW5pdGlhbGl6ZSBMUElzIGZvciB0aGlzIENQVSAqLwor
CWxwaV9pbml0X2NwdShzYyk7CisKKwkvKiBJbml0aWFsaXplIGNvbGxlY3Rpb25zICovCisJaXRz
X2luaXRfY3B1X2NvbGxlY3Rpb24oc2MpOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIHZv
aWQKK2l0c19pbml0X2NwdV9jb2xsZWN0aW9uKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICpzYykK
K3sKKwlkZXZpY2VfdCBwYXJlbnQ7CisJc3RydWN0IGdpY192M19zb2Z0YyAqZ2ljX3NjOworCXVp
bnQ2NF90IHR5cGVyOworCXVpbnQ2NF90IHRhcmdldDsKKwl2bV9vZmZzZXRfdCByZWRpc3RfYmFz
ZTsKKwl1X2ludCBjcHVpZDsKKworCWNwdWlkID0gUENQVV9HRVQoY3B1aWQpOworCXBhcmVudCA9
IGRldmljZV9nZXRfcGFyZW50KHNjLT5kZXYpOworCWdpY19zYyA9IGRldmljZV9nZXRfc29mdGMo
cGFyZW50KTsKKworCXR5cGVyID0gZ2ljX2l0c19yZWFkKHNjLCA4LCBHSVRTX1RZUEVSKTsKKwlp
ZiAoKHR5cGVyICYgR0lUU19UWVBFUl9QVEEpICE9IDApIHsKKwkJcmVkaXN0X2Jhc2UgPQorCQkg
ICAgcm1hbl9nZXRfYnVzaGFuZGxlKGdpY19zYy0+Z2ljX3JlZGlzdHMucGNwdVtjcHVpZF0pOwor
CQkvKgorCQkgKiBUYXJnZXQgQWRkcmVzcyBjb3JyZXNwb25kIHRvIHRoZSBiYXNlIHBoeXNpY2Fs
CisJCSAqIGFkZHJlc3Mgb2YgUmUtRGlzdHJpYnV0b3JzLgorCQkgKi8KKwkJdGFyZ2V0ID0gdnRv
cGh5cyhyZWRpc3RfYmFzZSk7CisJfSBlbHNlIHsKKwkJLyogVGFyZ2V0IEFkZHJlc3MgY29ycmVz
cG9uZCB0byB1bmlxdWUgcHJvY2Vzc29yIG51bWJlcnMgKi8KKwkJdHlwZXIgPSBnaWNfcl9yZWFk
KGdpY19zYywgOCwgR0lDUl9UWVBFUik7CisJCXRhcmdldCA9IEdJQ1JfVFlQRVJfQ1BVTlVNKHR5
cGVyKTsKKwl9CisKKwlzYy0+aXRzX2NvbHNbY3B1aWRdLmNvbF90YXJnZXQgPSB0YXJnZXQ7CisJ
c2MtPml0c19jb2xzW2NwdWlkXS5jb2xfaWQgPSBjcHVpZDsKKworCWl0c19jbWRfbWFwYyhzYywg
JnNjLT5pdHNfY29sc1tjcHVpZF0sIDEpOworCWl0c19jbWRfaW52YWxsKHNjLCAmc2MtPml0c19j
b2xzW2NwdWlkXSk7Cit9CisKK3N0YXRpYyB2b2lkCitscGlfaW5pdF9jb25mdGFibGUoc3RydWN0
IGdpY192M19pdHNfc29mdGMgKnNjKQoreworCWRldmljZV90IHBhcmVudDsKKwlzdHJ1Y3QgZ2lj
X3YzX3NvZnRjICpnaWNfc2M7CisJdm1fb2Zmc2V0X3QgY29uZl9iYXNlOworCXVpbnQ4X3QgcHJp
b19kZWZhdWx0OworCisJcGFyZW50ID0gZGV2aWNlX2dldF9wYXJlbnQoc2MtPmRldik7CisJZ2lj
X3NjID0gZGV2aWNlX2dldF9zb2Z0YyhwYXJlbnQpOworCS8qCisJICogTFBJIENvbmZpZ3VyYXRp
b24gVGFibGUgc2V0dGluZ3MuCisJICogTm90aWNlIHRoYXQgQ29uZmlndXJhdGlvbiBUYWJsZSBp
cyBzaGFyZWQgYW1vbmcgYWxsCisJICogUmUtRGlzdHJpYnV0b3JzLCBzbyB0aGlzIGlzIGdvaW5n
IHRvIGJlIGNyZWF0ZWQganVzdCBvbmNlLgorCSAqLworCWNvbmZfYmFzZSA9ICh2bV9vZmZzZXRf
dCljb250aWdtYWxsb2MoTFBJX0NPTkZUQUJfU0laRSwKKwkgICAgTV9HSUNfVjNfSVRTLCAoTV9X
QUlUT0sgfCBNX1pFUk8pLCAwLCB+MFVMLCBQQUdFX1NJWkVfNjRLLCAwKTsKKworCWlmIChib290
dmVyYm9zZSkgeworCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsCisJCSAgICAiTFBJIENvbmZpZ3Vy
YXRpb24gVGFibGUgYXQgUEE6IDB4JWx4XG4iLAorCQkgICAgdnRvcGh5cyhjb25mX2Jhc2UpKTsK
Kwl9CisKKwkvKgorCSAqIExldCB0aGUgZGVmYXVsdCBwcmlvcml0eSBiZSBhbGlnbmVkIHdpdGgg
YWxsIG90aGVyCisJICogaW50ZXJydXB0cyBhc3N1bWluZyB0aGF0IGVhY2ggaW50ZXJydXB0IGlz
IGFzc2lnbmVkCisJICogTUFYIHByaW9yaXR5IGF0IHN0YXJ0dXAuIE1BWCBwcmlvcml0eSBvbiB0
aGUgb3RoZXIKKwkgKiBoYW5kIGNhbm5vdCBiZSBoaWdoZXIgdGhhbiAweEZDIGZvciBMUElzLgor
CSAqLworCXByaW9fZGVmYXVsdCA9IEdJQ19QUklPUklUWV9NQVg7CisKKwkvKiBXcml0ZSBlYWNo
IHNldHRpbmdzIGJ5dGUgdG8gTFBJIGNvbmZpZ3VyYXRpb24gdGFibGUgKi8KKwltZW1zZXQoKHZv
aWQgKiljb25mX2Jhc2UsCisJICAgIChwcmlvX2RlZmF1bHQgJiBMUElfQ09ORl9QUklPX01BU0sp
IHwgTFBJX0NPTkZfR1JPVVAxLAorCSAgICBMUElfQ09ORlRBQl9TSVpFKTsKKworCWNwdV9kY2Fj
aGVfd2JfcmFuZ2UoKHZtX29mZnNldF90KWNvbmZfYmFzZSwgcm91bmR1cDIoTFBJX0NPTkZUQUJf
U0laRSwKKwkgICAgUEFHRV9TSVpFXzY0SykpOworCisJZ2ljX3NjLT5naWNfcmVkaXN0cy5scGlz
LmNvbmZfYmFzZSA9IGNvbmZfYmFzZTsKK30KKworc3RhdGljIHZvaWQKK2xwaV9pbml0X2NwdShz
dHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqc2MpCit7CisJZGV2aWNlX3QgcGFyZW50OworCXN0cnVj
dCBnaWNfdjNfc29mdGMgKmdpY19zYzsKKwl2bV9vZmZzZXRfdCBwZW5kX2Jhc2U7CisJdV9pbnQg
Y3B1aWQ7CisKKwlwYXJlbnQgPSBkZXZpY2VfZ2V0X3BhcmVudChzYy0+ZGV2KTsKKwlnaWNfc2Mg
PSBkZXZpY2VfZ2V0X3NvZnRjKHBhcmVudCk7CisKKwkvKgorCSAqIExQSSBQZW5kaW5nIFRhYmxl
IHNldHRpbmdzLgorCSAqIFRoaXMgaGFzIHRvIGJlIGRvbmUgZm9yIGVhY2ggUmUtRGlzdHJpYnV0
b3IsIGhlbmNlIGZvciBlYWNoIENQVS4KKwkgKi8KKwljcHVpZCA9IFBDUFVfR0VUKGNwdWlkKTsK
KworCXBlbmRfYmFzZSA9ICh2bV9vZmZzZXRfdCljb250aWdtYWxsb2MoCisJICAgIHJvdW5kdXAy
KExQSV9QRU5EVEFCX1NJWkUsIFBBR0VfU0laRV82NEspLCBNX0dJQ19WM19JVFMsCisJICAgIChN
X1dBSVRPSyB8IE1fWkVSTyksIDAsIH4wVUwsIFBBR0VfU0laRV82NEssIDApOworCisJLyogQ2xl
YW4gRC1jYWNoZSBzbyB0aGF0IElUUyBjYW4gc2VlIHplcm9lZCBwYWdlcyAqLworCWNwdV9kY2Fj
aGVfd2JfcmFuZ2UoKHZtX29mZnNldF90KXBlbmRfYmFzZSwKKwkgICAgcm91bmR1cDIoTFBJX1BF
TkRUQUJfU0laRSwgUEFHRV9TSVpFXzY0SykpOworCisJaWYgKGJvb3R2ZXJib3NlKSB7CisJCWRl
dmljZV9wcmludGYoc2MtPmRldiwKKwkJICAgICJMUEkgUGVuZGluZyBUYWJsZSBmb3IgQ1BVJXUg
YXQgUEE6IDB4JWx4XG4iLAorCQkgICAgY3B1aWQsIHZ0b3BoeXMocGVuZF9iYXNlKSk7CisJfQor
CisJZ2ljX3NjLT5naWNfcmVkaXN0cy5scGlzLnBlbmRfYmFzZVtjcHVpZF0gPSBwZW5kX2Jhc2U7
CisKKwlscGlfY29uZmlnX2NwdShzYyk7Cit9CisKK3N0YXRpYyBpbnQKK2xwaV9jb25maWdfY3B1
KHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICpzYykKK3sKKwlkZXZpY2VfdCBwYXJlbnQ7CisJc3Ry
dWN0IGdpY192M19zb2Z0YyAqZ2ljX3NjOworCXZtX29mZnNldF90IGNvbmZfYmFzZSwgcGVuZF9i
YXNlOworCXVpbnQ2NF90IGdpY3JfeGJhc2VyLCBnaWNyX3RlbXA7CisJdWludDY0X3QgY2FjaGUs
IHNoYXJlLCBpZGJpdHM7CisJdWludDMyX3QgZ2ljcl9jdGxyOworCXVfaW50IGNwdWlkOworCisJ
cGFyZW50ID0gZGV2aWNlX2dldF9wYXJlbnQoc2MtPmRldik7CisJZ2ljX3NjID0gZGV2aWNlX2dl
dF9zb2Z0YyhwYXJlbnQpOworCWNwdWlkID0gUENQVV9HRVQoY3B1aWQpOworCisJY29uZl9iYXNl
ID0gZ2ljX3NjLT5naWNfcmVkaXN0cy5scGlzLmNvbmZfYmFzZTsKKwlwZW5kX2Jhc2UgPSBnaWNf
c2MtPmdpY19yZWRpc3RzLmxwaXMucGVuZF9iYXNlW2NwdWlkXTsKKworCS8qIERpc2FibGUgTFBJ
cyAqLworCWdpY3JfY3RsciA9IGdpY19yX3JlYWQoZ2ljX3NjLCA0LCBHSUNSX0NUTFIpOworCWdp
Y3JfY3RsciAmPSB+R0lDUl9DVExSX0xQSV9FTkFCTEU7CisJZ2ljX3Jfd3JpdGUoZ2ljX3NjLCA0
LCBHSUNSX0NUTFIsIGdpY3JfY3Rscik7CisJLyogUGVyZm9ybSBmdWxsIHN5c3RlbSBiYXJyaWVy
ICovCisJZHNiKHN5KTsKKworCS8qCisJICogU2V0IEdJQ1JfUFJPUEJBU0VSCisJICovCisKKwkv
KgorCSAqIEZpbmQgb3V0IGhvdyBtYW55IGJpdHMgZG8gd2UgbmVlZCBmb3IgTFBJIGlkZW50aWZp
ZXJzLgorCSAqIFJlbWFyayAxLjogRXZlbiB0aG91Z2ggd2UgaGF2ZSAoTFBJX0NPTkZUQUJfU0la
RSAvIDgpIExQSXMKKwkgKgkgICAgICB0aGUgbm90aWZpZWQgTFBJIElEIHN0aWxsIHN0YXJ0cyBm
cm9tIDgxOTIKKwkgKgkgICAgICAoR0lDX0ZJUlNUX0xQSSkuCisJICogUmVtYXJrIDIuOiBUaGlz
IGNvdWxkIGJlIGRvbmUgb24gY29tcGlsYXRpb24gdGltZSBidXQgdGhlcmUKKwkgKgkgICAgICBz
ZWVtcyB0byBiZSBubyBzdWZmaWNpZW50IG1hY3JvLgorCSAqLworCWlkYml0cyA9IGZsc2woTFBJ
X0NPTkZUQUJfU0laRSArIEdJQ19GSVJTVF9MUEkpIC0gMTsKKworCS8qIFNldCBkZWZhdWx0czog
Tm9ybWFsIElubmVyIFdBV0IsIElTICovCisJY2FjaGUgPSBHSUNSX1BST1BCQVNFUl9DQUNIRV9O
SVdBV0I7CisJc2hhcmUgPSBHSUNSX1BST1BCQVNFUl9TSEFSRV9JUzsKKworCWdpY3JfeGJhc2Vy
ID0gdnRvcGh5cyhjb25mX2Jhc2UpIHwKKwkgICAgKChpZGJpdHMgLSAxKSAmIEdJQ1JfUFJPUEJB
U0VSX0lEQklUU19NQVNLKSB8CisJICAgIChjYWNoZSA8PCBHSUNSX1BST1BCQVNFUl9DQUNIRV9T
SElGVCkgfAorCSAgICAoc2hhcmUgPDwgR0lDUl9QUk9QQkFTRVJfU0hBUkVfU0hJRlQpOworCisJ
Z2ljX3Jfd3JpdGUoZ2ljX3NjLCA4LCBHSUNSX1BST1BCQVNFUiwgZ2ljcl94YmFzZXIpOworCWdp
Y3JfdGVtcCA9IGdpY19yX3JlYWQoZ2ljX3NjLCA4LCBHSUNSX1BST1BCQVNFUik7CisKKwlpZiAo
KChnaWNyX3hiYXNlciBeIGdpY3JfdGVtcCkgJiBHSUNSX1BST1BCQVNFUl9TSEFSRV9NQVNLKSAh
PSAwKSB7CisJCWlmIChib290dmVyYm9zZSkgeworCQkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2LAor
CQkJICAgICJXaWxsIHVzZSBjYWNoZSBmbHVzaGluZyBmb3IgTFBJICIKKwkJCSAgICAiQ29uZmln
dXJhdGlvbiBUYWJsZVxuIik7CisJCX0KKwkJZ2ljX3NjLT5naWNfcmVkaXN0cy5scGlzLmZsYWdz
IHw9IExQSV9GTEFHU19DT05GX0ZMVVNIOworCX0KKworCS8qCisJICogU2V0IEdJQ1JfUEVOREJB
U0VSCisJICovCisKKwkvKiBTZXQgZGVmYXVsdHM6IE5vcm1hbCBJbm5lciBXQVdCLCBJUyAqLwor
CWNhY2hlID0gR0lDUl9QRU5EQkFTRVJfQ0FDSEVfTklXQVdCOworCXNoYXJlID0gR0lDUl9QRU5E
QkFTRVJfU0hBUkVfSVM7CisKKwlnaWNyX3hiYXNlciA9IHZ0b3BoeXMocGVuZF9iYXNlKSB8CisJ
ICAgIChjYWNoZSA8PCBHSUNSX1BFTkRCQVNFUl9DQUNIRV9TSElGVCkgfAorCSAgICAoc2hhcmUg
PDwgR0lDUl9QRU5EQkFTRVJfU0hBUkVfU0hJRlQpOworCisJZ2ljX3Jfd3JpdGUoZ2ljX3NjLCA4
LCBHSUNSX1BFTkRCQVNFUiwgZ2ljcl94YmFzZXIpOworCisJLyogRW5hYmxlIExQSXMgKi8KKwln
aWNyX2N0bHIgPSBnaWNfcl9yZWFkKGdpY19zYywgNCwgR0lDUl9DVExSKTsKKwlnaWNyX2N0bHIg
fD0gR0lDUl9DVExSX0xQSV9FTkFCTEU7CisJZ2ljX3Jfd3JpdGUoZ2ljX3NjLCA0LCBHSUNSX0NU
TFIsIGdpY3JfY3Rscik7CisKKwlkc2Ioc3kpOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGlj
IHZvaWQKK2xwaV9iaXRtYXBfaW5pdChzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqc2MpCit7CisJ
ZGV2aWNlX3QgcGFyZW50OworCXN0cnVjdCBnaWNfdjNfc29mdGMgKmdpY19zYzsKKwl1aW50MzJf
dCBscGlfaWRfbnVtOworCXNpemVfdCBscGlfY2h1bmtzX251bTsKKwlzaXplX3QgYml0c19pbl9j
aHVuazsKKworCXBhcmVudCA9IGRldmljZV9nZXRfcGFyZW50KHNjLT5kZXYpOworCWdpY19zYyA9
IGRldmljZV9nZXRfc29mdGMocGFyZW50KTsKKworCWxwaV9pZF9udW0gPSAoMSA8PCBnaWNfc2Mt
PmdpY19pZGJpdHMpIC0gMTsKKwkvKiBTdWJzdHJhY3QgSURzIGRlZGljYXRlZCBmb3IgU0dJcywg
UFBJcyBhbmQgU1BJcyAqLworCWxwaV9pZF9udW0gLT0gR0lDX0ZJUlNUX0xQSTsKKworCXNjLT5p
dHNfbHBpX21heGlkID0gbHBpX2lkX251bTsKKworCWJpdHNfaW5fY2h1bmsgPSBzaXplb2YoKnNj
LT5pdHNfbHBpX2JpdG1hcCkgKiBOQkJZOworCisJLyoKKwkgKiBSb3VuZCB1cCB0byB0aGUgbnVt
YmVyIG9mIGJpdHMgaW4gY2h1bmsuCisJICogV2Ugd2lsbCBuZWVkIHRvIHRha2UgY2FyZSB0byBh
dm9pZCB1c2luZyBpbnZhbGlkIExQSSBJRHMgbGF0ZXIuCisJICovCisJbHBpX2lkX251bSA9IHJv
dW5kdXAyKGxwaV9pZF9udW0sIGJpdHNfaW5fY2h1bmspOworCWxwaV9jaHVua3NfbnVtID0gbHBp
X2lkX251bSAvIGJpdHNfaW5fY2h1bms7CisKKwlzYy0+aXRzX2xwaV9iaXRtYXAgPQorCSAgICBj
b250aWdtYWxsb2MoKGxwaV9jaHVua3NfbnVtICogc2l6ZW9mKCpzYy0+aXRzX2xwaV9iaXRtYXAp
KSwKKwkgICAgTV9HSUNfVjNfSVRTLCAoTV9XQUlUT0sgfCBNX1pFUk8pLCAwLCB+MFVMLAorCSAg
ICBzaXplb2YoKnNjLT5pdHNfbHBpX2JpdG1hcCksIDApOworfQorCitzdGF0aWMgaW50CitscGlf
YWxsb2NfY2h1bmsoc3RydWN0IGdpY192M19pdHNfc29mdGMgKnNjLCBzdHJ1Y3QgbHBpX2NodW5r
ICpscGljLAorICAgIHVfaW50IG52ZWNzKQoreworCWludCBmY2xyOyAvKiBGaXJzdCBjbGVhcmVk
IGJpdCAqLworCXVpbnQ4X3QgKmJpdG1hcDsKKwlzaXplX3QgbmIsIGk7CisKKwliaXRtYXAgPSAo
dWludDhfdCAqKXNjLT5pdHNfbHBpX2JpdG1hcDsKKworCWZjbHIgPSAwOworcmV0cnk6CisJLyog
Q2hlY2sgb3RoZXIgYml0cyAtIHNsb29vb3cgKi8KKwlmb3IgKGkgPSAwLCBuYiA9IGZjbHI7IGkg
PCBudmVjczsgaSsrLCBuYisrKSB7CisJCWlmIChuYiA+IHNjLT5pdHNfbHBpX21heGlkKQorCQkJ
cmV0dXJuIChFSU5WQUwpOworCisJCWlmIChpc3NldChiaXRtYXAsIG5iKSkgeworCQkJLyogVG8g
bGl0dGxlIGZyZWUgYml0cyBpbiB0aGlzIGFyZWEuIE1vdmUgb24uICovCisJCQlmY2xyID0gbmIg
KyAxOworCQkJZ290byByZXRyeTsKKwkJfQorCX0KKwkvKiBUaGlzIGFyZWEgaXMgZnJlZS4gVGFr
ZSBpdC4gKi8KKwliaXRfbnNldChiaXRtYXAsIGZjbHIsIGZjbHIgKyBudmVjcyAtIDEpOworCWxw
aWMtPmxwaV9iYXNlID0gZmNsciArIEdJQ19GSVJTVF9MUEk7CisJbHBpYy0+bHBpX251bSA9IG52
ZWNzOworCWxwaWMtPmxwaV9mcmVlID0gbHBpYy0+bHBpX251bTsKKworCXJldHVybiAoMCk7Cit9
CisKK3N0YXRpYyB2b2lkCitscGlfY29uZmlndXJlKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICpz
Yywgc3RydWN0IGl0c19kZXYgKml0c19kZXYsCisgICAgdWludDMyX3QgbHBpbnVtLCBib29sZWFu
X3QgdW5tYXNrKQoreworCWRldmljZV90IHBhcmVudDsKKwlzdHJ1Y3QgZ2ljX3YzX3NvZnRjICpn
aWNfc2M7CisJdWludDhfdCAqY29uZl9ieXRlOworCisJcGFyZW50ID0gZGV2aWNlX2dldF9wYXJl
bnQoc2MtPmRldik7CisJZ2ljX3NjID0gZGV2aWNlX2dldF9zb2Z0YyhwYXJlbnQpOworCisJY29u
Zl9ieXRlID0gKHVpbnQ4X3QgKilnaWNfc2MtPmdpY19yZWRpc3RzLmxwaXMuY29uZl9iYXNlOwor
CWNvbmZfYnl0ZSArPSAobHBpbnVtIC0gR0lDX0ZJUlNUX0xQSSk7CisKKwlpZiAodW5tYXNrKQor
CQkqY29uZl9ieXRlIHw9IExQSV9DT05GX0VOQUJMRTsKKwllbHNlCisJCSpjb25mX2J5dGUgJj0g
fkxQSV9DT05GX0VOQUJMRTsKKworCWlmICgoZ2ljX3NjLT5naWNfcmVkaXN0cy5scGlzLmZsYWdz
ICYgTFBJX0ZMQUdTX0NPTkZfRkxVU0gpICE9IDApIHsKKwkJLyogQ2xlYW4gRC1jYWNoZSB1bmRl
ciBjb25maWd1cmF0aW9uIGJ5dGUgKi8KKwkJY3B1X2RjYWNoZV93Yl9yYW5nZSgodm1fb2Zmc2V0
X3QpY29uZl9ieXRlLCBzaXplb2YoKmNvbmZfYnl0ZSkpOworCX0gZWxzZSB7CisJCS8qIERTQiBp
bm5lciBzaGFyZWFibGUsIHN0b3JlICovCisJCWRzYihpc2hzdCk7CisJfQorCisJaXRzX2NtZF9p
bnYoc2MsIGl0c19kZXYsIGxwaW51bSk7Cit9CisKK3N0YXRpYyB2b2lkCitscGlfbWFwX3RvX2Rl
dmljZShzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqc2MsIHN0cnVjdCBpdHNfZGV2ICppdHNfZGV2
LAorICAgIHVpbnQzMl90IGlkLCB1aW50MzJfdCBwaWQpCit7CisKKwlpZiAoKHBpZCA8IGl0c19k
ZXYtPmxwaXMubHBpX2Jhc2UpIHx8CisJICAgIChwaWQgPj0gKGl0c19kZXYtPmxwaXMubHBpX2Jh
c2UgKyBpdHNfZGV2LT5scGlzLmxwaV9udW0pKSkKKwkJcGFuaWMoIlRyeWluZyB0byBtYXAgaXZh
bGlkIExQSSAldSBmb3IgdGhlIGRldmljZVxuIiwgcGlkKTsKKworCWl0c19jbWRfbWFwdmkoc2Ms
IGl0c19kZXYsIGlkLCBwaWQpOworfQorCitzdGF0aWMgdm9pZAorbHBpX3htYXNrX2lycShkZXZp
Y2VfdCBwYXJlbnQsIHVpbnQzMl90IGlycSwgYm9vbGVhbl90IHVubWFzaykKK3sKKwlzdHJ1Y3Qg
aXRzX2RldiAqaXRzX2RldjsKKworCVRBSUxRX0ZPUkVBQ0goaXRzX2RldiwgJml0c19zYy0+aXRz
X2Rldl9saXN0LCBlbnRyeSkgeworCQlpZiAoaXJxID49IGl0c19kZXYtPmxwaXMubHBpX2Jhc2Ug
JiYKKwkJICAgIGlycSA8IChpdHNfZGV2LT5scGlzLmxwaV9iYXNlICsgaXRzX2Rldi0+bHBpcy5s
cGlfbnVtKSkgeworCQkJbHBpX2NvbmZpZ3VyZShpdHNfc2MsIGl0c19kZXYsIGlycSwgdW5tYXNr
KTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCXBhbmljKCJUcnlpbmcgdG8gJXMgbm90IGV4aXN0
aW5nIExQSTogJXVcbiIsCisJICAgICh1bm1hc2sgPT0gVFJVRSkgPyAidW5tYXNrIiA6ICJtYXNr
IiwgaXJxKTsKK30KKwordm9pZAorbHBpX3VubWFza19pcnEoZGV2aWNlX3QgcGFyZW50LCB1aW50
MzJfdCBpcnEpCit7CisKKwlscGlfeG1hc2tfaXJxKHBhcmVudCwgaXJxLCAxKTsKK30KKwordm9p
ZAorbHBpX21hc2tfaXJxKGRldmljZV90IHBhcmVudCwgdWludDMyX3QgaXJxKQoreworCisJbHBp
X3htYXNrX2lycShwYXJlbnQsIGlycSwgMCk7Cit9CisKKy8qCisgKiBDb21tYW5kcyBoYW5kbGlu
Zy4KKyAqLworCitzdGF0aWMgX19pbmxpbmUgdm9pZAorY21kX2Zvcm1hdF9jb21tYW5kKHN0cnVj
dCBpdHNfY21kICpjbWQsIHVpbnQ4X3QgY21kX3R5cGUpCit7CisJLyogQ29tbWFuZCBmaWVsZDog
RFcwIFs3OjBdICovCisJY21kLT5jbWRfZHdvcmRbMF0gJj0gfkNNRF9DT01NQU5EX01BU0s7CisJ
Y21kLT5jbWRfZHdvcmRbMF0gfD0gY21kX3R5cGU7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lk
CitjbWRfZm9ybWF0X2RldmlkKHN0cnVjdCBpdHNfY21kICpjbWQsIHVpbnQzMl90IGRldmlkKQor
eworCS8qIERldmljZSBJRCBmaWVsZDogRFcwIFs2MzozMl0gKi8KKwljbWQtPmNtZF9kd29yZFsw
XSAmPSB+Q01EX0RFVklEX01BU0s7CisJY21kLT5jbWRfZHdvcmRbMF0gfD0gKCh1aW50NjRfdClk
ZXZpZCA8PCBDTURfREVWSURfU0hJRlQpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAorY21k
X2Zvcm1hdF9zaXplKHN0cnVjdCBpdHNfY21kICpjbWQsIHVpbnQxNl90IHNpemUpCit7CisJLyog
U2l6ZSBmaWVsZDogRFcxIFs0OjBdICovCisJY21kLT5jbWRfZHdvcmRbMV0gJj0gfkNNRF9TSVpF
X01BU0s7CisJY21kLT5jbWRfZHdvcmRbMV0gfD0gKHNpemUgJiBDTURfU0laRV9NQVNLKTsKK30K
Kworc3RhdGljIF9faW5saW5lIHZvaWQKK2NtZF9mb3JtYXRfaWQoc3RydWN0IGl0c19jbWQgKmNt
ZCwgdWludDMyX3QgaWQpCit7CisJLyogSUQgZmllbGQ6IERXMSBbMzE6MF0gKi8KKwljbWQtPmNt
ZF9kd29yZFsxXSAmPSB+Q01EX0lEX01BU0s7CisJY21kLT5jbWRfZHdvcmRbMV0gfD0gaWQ7Cit9
CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitjbWRfZm9ybWF0X3BpZChzdHJ1Y3QgaXRzX2NtZCAq
Y21kLCB1aW50MzJfdCBwaWQpCit7CisJLyogUGh5c2ljYWwgSUQgZmllbGQ6IERXMSBbNjM6MzJd
ICovCisJY21kLT5jbWRfZHdvcmRbMV0gJj0gfkNNRF9QSURfTUFTSzsKKwljbWQtPmNtZF9kd29y
ZFsxXSB8PSAoKHVpbnQ2NF90KXBpZCA8PCBDTURfUElEX1NISUZUKTsKK30KKworc3RhdGljIF9f
aW5saW5lIHZvaWQKK2NtZF9mb3JtYXRfY29sKHN0cnVjdCBpdHNfY21kICpjbWQsIHVpbnQxNl90
IGNvbF9pZCkKK3sKKwkvKiBDb2xsZWN0aW9uIGZpZWxkOiBEVzIgWzE2OjBdICovCisJY21kLT5j
bWRfZHdvcmRbMl0gJj0gfkNNRF9DT0xfTUFTSzsKKwljbWQtPmNtZF9kd29yZFsyXSB8PSBjb2xf
aWQ7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitjbWRfZm9ybWF0X3RhcmdldChzdHJ1Y3Qg
aXRzX2NtZCAqY21kLCB1aW50NjRfdCB0YXJnZXQpCit7CisJLyogVGFyZ2V0IEFkZHJlc3MgZmll
bGQ6IERXMiBbNDc6MTZdICovCisJY21kLT5jbWRfZHdvcmRbMl0gJj0gfkNNRF9UQVJHRVRfTUFT
SzsKKwljbWQtPmNtZF9kd29yZFsyXSB8PSAodGFyZ2V0ICYgQ01EX1RBUkdFVF9NQVNLKTsKK30K
Kworc3RhdGljIF9faW5saW5lIHZvaWQKK2NtZF9mb3JtYXRfaXR0KHN0cnVjdCBpdHNfY21kICpj
bWQsIHVpbnQ2NF90IGl0dCkKK3sKKwkvKiBJVFQgQWRkcmVzcyBmaWVsZDogRFcyIFs0Nzo4XSAq
LworCWNtZC0+Y21kX2R3b3JkWzJdICY9IH5DTURfSVRUX01BU0s7CisJY21kLT5jbWRfZHdvcmRb
Ml0gfD0gKGl0dCAmIENNRF9JVFRfTUFTSyk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitj
bWRfZm9ybWF0X3ZhbGlkKHN0cnVjdCBpdHNfY21kICpjbWQsIHVpbnQ4X3QgdmFsaWQpCit7CisJ
LyogVmFsaWQgZmllbGQ6IERXMiBbNjNdICovCisJY21kLT5jbWRfZHdvcmRbMl0gJj0gfkNNRF9W
QUxJRF9NQVNLOworCWNtZC0+Y21kX2R3b3JkWzJdIHw9ICgodWludDY0X3QpdmFsaWQgPDwgQ01E
X1ZBTElEX1NISUZUKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2NtZF9maXhfZW5kaWFu
KHN0cnVjdCBpdHNfY21kICpjbWQpCit7CisJc2l6ZV90IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwg
bml0ZW1zKGNtZC0+Y21kX2R3b3JkKTsgaSsrKQorCQljbWQtPmNtZF9kd29yZFtpXSA9IGh0b2xl
NjQoY21kLT5jbWRfZHdvcmRbaV0pOworfQorCitzdGF0aWMgdm9pZAoraXRzX2NtZF9tYXBjKHN0
cnVjdCBnaWNfdjNfaXRzX3NvZnRjICpzYywgc3RydWN0IGl0c19jb2wgKmNvbCwgdWludDhfdCB2
YWxpZCkKK3sKKwlzdHJ1Y3QgaXRzX2NtZF9kZXNjIGRlc2M7CisKKwlkZXNjLmNtZF90eXBlID0g
SVRTX0NNRF9NQVBDOworCWRlc2MuY21kX2Rlc2NfbWFwYy5jb2wgPSBjb2w7CisJLyoKKwkgKiBW
YWxpZCBiaXQgc2V0IC0gbWFwIHRoZSBjb2xsZWN0aW9uLgorCSAqIFZhbGlkIGJpdCBjbGVhcmVk
IC0gdW5tYXAgdGhlIGNvbGxlY3Rpb24uCisJICovCisJZGVzYy5jbWRfZGVzY19tYXBjLnZhbGlk
ID0gdmFsaWQ7CisKKwlpdHNfY21kX3NlbmQoc2MsICZkZXNjKTsKK30KKworc3RhdGljIHZvaWQK
K2l0c19jbWRfbWFwdmkoc3RydWN0IGdpY192M19pdHNfc29mdGMgKnNjLCBzdHJ1Y3QgaXRzX2Rl
diAqaXRzX2RldiwKKyAgICB1aW50MzJfdCBpZCwgdWludDMyX3QgcGlkKQoreworCXN0cnVjdCBp
dHNfY21kX2Rlc2MgZGVzYzsKKworCWRlc2MuY21kX3R5cGUgPSBJVFNfQ01EX01BUFZJOworCWRl
c2MuY21kX2Rlc2NfbWFwdmkuaXRzX2RldiA9IGl0c19kZXY7CisJZGVzYy5jbWRfZGVzY19tYXB2
aS5pZCA9IGlkOworCWRlc2MuY21kX2Rlc2NfbWFwdmkucGlkID0gcGlkOworCisJaXRzX2NtZF9z
ZW5kKHNjLCAmZGVzYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fdW51c2VkCitpdHNfY21kX21hcGko
c3RydWN0IGdpY192M19pdHNfc29mdGMgKnNjLCBzdHJ1Y3QgaXRzX2RldiAqaXRzX2RldiwKKyAg
ICB1aW50MzJfdCBscGludW0pCit7CisJc3RydWN0IGl0c19jbWRfZGVzYyBkZXNjOworCisJZGVz
Yy5jbWRfdHlwZSA9IElUU19DTURfTUFQSTsKKwlkZXNjLmNtZF9kZXNjX21hcGkuaXRzX2RldiA9
IGl0c19kZXY7CisJZGVzYy5jbWRfZGVzY19tYXBpLmxwaW51bSA9IGxwaW51bTsKKworCWl0c19j
bWRfc2VuZChzYywgJmRlc2MpOworfQorCitzdGF0aWMgdm9pZAoraXRzX2NtZF9tYXBkKHN0cnVj
dCBnaWNfdjNfaXRzX3NvZnRjICpzYywgc3RydWN0IGl0c19kZXYgKml0c19kZXYsCisgICAgdWlu
dDhfdCB2YWxpZCkKK3sKKwlzdHJ1Y3QgaXRzX2NtZF9kZXNjIGRlc2M7CisKKwlkZXNjLmNtZF90
eXBlID0gSVRTX0NNRF9NQVBEOworCWRlc2MuY21kX2Rlc2NfbWFwZC5pdHNfZGV2ID0gaXRzX2Rl
djsKKwlkZXNjLmNtZF9kZXNjX21hcGQudmFsaWQgPSB2YWxpZDsKKworCWl0c19jbWRfc2VuZChz
YywgJmRlc2MpOworfQorCitzdGF0aWMgdm9pZAoraXRzX2NtZF9pbnYoc3RydWN0IGdpY192M19p
dHNfc29mdGMgKnNjLCBzdHJ1Y3QgaXRzX2RldiAqaXRzX2RldiwKKyAgICB1aW50MzJfdCBscGlu
dW0pCit7CisJc3RydWN0IGl0c19jbWRfZGVzYyBkZXNjOworCisJZGVzYy5jbWRfdHlwZSA9IElU
U19DTURfSU5WOworCWRlc2MuY21kX2Rlc2NfaW52LmxwaW51bSA9IGxwaW51bSAtIGl0c19kZXYt
PmxwaXMubHBpX2Jhc2U7CisJZGVzYy5jbWRfZGVzY19pbnYuaXRzX2RldiA9IGl0c19kZXY7CisK
KwlpdHNfY21kX3NlbmQoc2MsICZkZXNjKTsKK30KKworc3RhdGljIHZvaWQKK2l0c19jbWRfaW52
YWxsKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICpzYywgc3RydWN0IGl0c19jb2wgKmNvbCkKK3sK
KwlzdHJ1Y3QgaXRzX2NtZF9kZXNjIGRlc2M7CisKKwlkZXNjLmNtZF90eXBlID0gSVRTX0NNRF9J
TlZBTEw7CisJZGVzYy5jbWRfZGVzY19pbnZhbGwuY29sID0gY29sOworCisJaXRzX2NtZF9zZW5k
KHNjLCAmZGVzYyk7Cit9CisKKy8qCisgKiBIZWxwZXIgcm91dGluZXMgZm9yIGNvbW1hbmRzIHBy
b2Nlc3NpbmcuCisgKi8KK3N0YXRpYyBfX2lubGluZSBib29sZWFuX3QKK2l0c19jbWRfcXVldWVf
ZnVsbChzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqc2MpCit7CisJc2l6ZV90IHJlYWRfaWR4LCB3
cml0ZV9pZHg7CisKKwl3cml0ZV9pZHggPSAoc2l6ZV90KShzYy0+aXRzX2NtZHFfd3JpdGUgLSBz
Yy0+aXRzX2NtZHFfYmFzZSk7CisJcmVhZF9pZHggPSBnaWNfaXRzX3JlYWQoc2MsIDQsIEdJVFNf
Q1JFQURSKSAvIHNpemVvZihzdHJ1Y3QgaXRzX2NtZCk7CisKKwkvKgorCSAqIFRoZSBxdWV1ZSBp
cyBmdWxsIHdoZW4gdGhlIHdyaXRlIG9mZnNldCBwb2ludHMKKwkgKiBhdCB0aGUgY29tbWFuZCBi
ZWZvcmUgdGhlIGN1cnJlbnQgcmVhZCBvZmZzZXQuCisJICovCisJaWYgKCgod3JpdGVfaWR4ICsg
MSkgJSBJVFNfQ01EUV9ORU5UUklFUykgPT0gcmVhZF9pZHgpCisJCXJldHVybiAoVFJVRSk7CisK
KwlyZXR1cm4gKEZBTFNFKTsKK30KKworc3RhdGljIF9faW5saW5lIHZvaWQKK2l0c19jbWRfc3lu
YyhzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqc2MsIHN0cnVjdCBpdHNfY21kICpjbWQpCit7CisK
KwlpZiAoKHNjLT5pdHNfZmxhZ3MgJiBJVFNfRkxBR1NfQ01EUV9GTFVTSCkgIT0gMCkgeworCQkv
KiBDbGVhbiBELWNhY2hlIHVuZGVyIGNvbW1hbmQuICovCisJCWNwdV9kY2FjaGVfd2JfcmFuZ2Uo
KHZtX29mZnNldF90KWNtZCwgc2l6ZW9mKCpjbWQpKTsKKwl9IGVsc2UgeworCQkvKiBEU0IgaW5u
ZXIgc2hhcmVhYmxlLCBzdG9yZSAqLworCQlkc2IoaXNoc3QpOworCX0KKworfQorCitzdGF0aWMg
c3RydWN0IGl0c19jbWQgKgoraXRzX2NtZF9hbGxvY19sb2NrZWQoc3RydWN0IGdpY192M19pdHNf
c29mdGMgKnNjKQoreworCXN0cnVjdCBpdHNfY21kICpjbWQ7CisJc2l6ZV90IHVzX2xlZnQ7CisK
KwkvKgorCSAqIFhYWCBBUk02NFRPRE86IFRoaXMgaXMgb2J2aW91c2x5IGEgc2lnbmlmaWNhbnQg
ZGVsYXkuCisJICogVGhlIHJlYXNvbiBmb3IgdGhhdCBpcyB0aGF0IGN1cnJlbnRseSB0aGUgdGlt
ZSBmcmFtZXMgZm9yCisJICogdGhlIGNvbW1hbmQgdG8gY29tcGxldGUgKGFuZCB0aGVyZWZvcmUg
ZnJlZSB0aGUgZGVzY3JpcHRvcikKKwkgKiBhcmUgbm90IGtub3duLgorCSAqLworCXVzX2xlZnQg
PSAxMDAwMDAwOworCisJbXR4X2Fzc2VydCgmc2MtPml0c19zcGluX210eCwgTUFfT1dORUQpOwor
CXdoaWxlIChpdHNfY21kX3F1ZXVlX2Z1bGwoc2MpKSB7CisJCWlmICh1c19sZWZ0LS0gPT0gMCkg
eworCQkJLyogVGltZW91dCB3aGlsZSB3YWl0aW5nIGZvciBmcmVlIGNvbW1hbmQgKi8KKwkJCWRl
dmljZV9wcmludGYoc2MtPmRldiwKKwkJCSAgICAiVGltZW91dCB3aGlsZSB3YWl0aW5nIGZvciBm
cmVlIGNvbW1hbmRcbiIpOworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCQlERUxBWSgxKTsKKwl9
CisKKwljbWQgPSBzYy0+aXRzX2NtZHFfd3JpdGU7CisJc2MtPml0c19jbWRxX3dyaXRlKys7CisK
KwlpZiAoc2MtPml0c19jbWRxX3dyaXRlID09IChzYy0+aXRzX2NtZHFfYmFzZSArIElUU19DTURR
X05FTlRSSUVTKSkgeworCQkvKiBXcmFwIHRoZSBxdWV1ZSAqLworCQlzYy0+aXRzX2NtZHFfd3Jp
dGUgPSBzYy0+aXRzX2NtZHFfYmFzZTsKKwl9CisKKwlyZXR1cm4gKGNtZCk7Cit9CisKK3N0YXRp
YyB1aW50NjRfdAoraXRzX2NtZF9wcmVwYXJlKHN0cnVjdCBpdHNfY21kICpjbWQsIHN0cnVjdCBp
dHNfY21kX2Rlc2MgKmRlc2MpCit7CisJdWludDY0X3QgdGFyZ2V0OworCXVpbnQ4X3QgY21kX3R5
cGU7CisJdV9pbnQgc2l6ZTsKKwlib29sZWFuX3QgZXJyb3I7CisKKwllcnJvciA9IEZBTFNFOwor
CWNtZF90eXBlID0gZGVzYy0+Y21kX3R5cGU7CisJdGFyZ2V0ID0gSVRTX1RBUkdFVF9OT05FOwor
CisJc3dpdGNoIChjbWRfdHlwZSkgeworCWNhc2UgSVRTX0NNRF9TWU5DOgkvKiBXYWl0IGZvciBw
cmV2aW91cyBjb21tYW5kcyBjb21wbGV0aW9uICovCisJCXRhcmdldCA9IGRlc2MtPmNtZF9kZXNj
X3N5bmMuY29sLT5jb2xfdGFyZ2V0OworCQljbWRfZm9ybWF0X2NvbW1hbmQoY21kLCBJVFNfQ01E
X1NZTkMpOworCQljbWRfZm9ybWF0X3RhcmdldChjbWQsIHRhcmdldCk7CisJCWJyZWFrOworCWNh
c2UgSVRTX0NNRF9NQVBEOgkvKiBBc3NpZ24gSVRUIHRvIGRldmljZSAqLworCQl0YXJnZXQgPSBk
ZXNjLT5jbWRfZGVzY19tYXBkLml0c19kZXYtPmNvbC0+Y29sX3RhcmdldDsKKwkJY21kX2Zvcm1h
dF9jb21tYW5kKGNtZCwgSVRTX0NNRF9NQVBEKTsKKwkJY21kX2Zvcm1hdF9pdHQoY21kLCB2dG9w
aHlzKGRlc2MtPmNtZF9kZXNjX21hcGQuaXRzX2Rldi0+aXR0KSk7CisJCS8qCisJCSAqIFNpemUg
ZGVzY3JpYmVzIG51bWJlciBvZiBiaXRzIHRvIGVuY29kZSBpbnRlcnJ1cHQgSURzCisJCSAqIHN1
cHBvcnRlZCBieSB0aGUgZGV2aWNlIG1pbnVzIG9uZS4KKwkJICogV2hlbiBWICh2YWxpZCkgYml0
IGlzIHplcm8sIHRoaXMgZmllbGQgc2hvdWxkIGJlIHdyaXR0ZW4KKwkJICogYXMgemVyby4KKwkJ
ICovCisJCWlmIChkZXNjLT5jbWRfZGVzY19tYXBkLnZhbGlkICE9IDApIHsKKwkJCXNpemUgPSBm
bHMoZGVzYy0+Y21kX2Rlc2NfbWFwZC5pdHNfZGV2LT5scGlzLmxwaV9udW0pOworCQkJc2l6ZSA9
IE1BWCgxLCBzaXplKSAtIDE7CisJCX0gZWxzZQorCQkJc2l6ZSA9IDA7CisKKwkJY21kX2Zvcm1h
dF9zaXplKGNtZCwgc2l6ZSk7CisJCWNtZF9mb3JtYXRfZGV2aWQoY21kLCBkZXNjLT5jbWRfZGVz
Y19tYXBkLml0c19kZXYtPmRldmlkKTsKKwkJY21kX2Zvcm1hdF92YWxpZChjbWQsIGRlc2MtPmNt
ZF9kZXNjX21hcGQudmFsaWQpOworCQlicmVhazsKKwljYXNlIElUU19DTURfTUFQQzoJLyogTWFw
IGNvbGxlY3Rpb24gdG8gUmUtRGlzdHJpYnV0b3IgKi8KKwkJdGFyZ2V0ID0gZGVzYy0+Y21kX2Rl
c2NfbWFwYy5jb2wtPmNvbF90YXJnZXQ7CisJCWNtZF9mb3JtYXRfY29tbWFuZChjbWQsIElUU19D
TURfTUFQQyk7CisJCWNtZF9mb3JtYXRfY29sKGNtZCwgZGVzYy0+Y21kX2Rlc2NfbWFwYy5jb2wt
PmNvbF9pZCk7CisJCWNtZF9mb3JtYXRfdmFsaWQoY21kLCBkZXNjLT5jbWRfZGVzY19tYXBjLnZh
bGlkKTsKKwkJY21kX2Zvcm1hdF90YXJnZXQoY21kLCB0YXJnZXQpOworCQlicmVhazsKKwljYXNl
IElUU19DTURfTUFQVkk6CisJCXRhcmdldCA9IGRlc2MtPmNtZF9kZXNjX21hcHZpLml0c19kZXYt
PmNvbC0+Y29sX3RhcmdldDsKKwkJY21kX2Zvcm1hdF9jb21tYW5kKGNtZCwgSVRTX0NNRF9NQVBW
SSk7CisJCWNtZF9mb3JtYXRfZGV2aWQoY21kLCBkZXNjLT5jbWRfZGVzY19tYXB2aS5pdHNfZGV2
LT5kZXZpZCk7CisJCWNtZF9mb3JtYXRfaWQoY21kLCBkZXNjLT5jbWRfZGVzY19tYXB2aS5pZCk7
CisJCWNtZF9mb3JtYXRfcGlkKGNtZCwgZGVzYy0+Y21kX2Rlc2NfbWFwdmkucGlkKTsKKwkJY21k
X2Zvcm1hdF9jb2woY21kLCBkZXNjLT5jbWRfZGVzY19tYXB2aS5pdHNfZGV2LT5jb2wtPmNvbF9p
ZCk7CisJCWJyZWFrOworCWNhc2UgSVRTX0NNRF9NQVBJOgorCQl0YXJnZXQgPSBkZXNjLT5jbWRf
ZGVzY19tYXBpLml0c19kZXYtPmNvbC0+Y29sX3RhcmdldDsKKwkJY21kX2Zvcm1hdF9jb21tYW5k
KGNtZCwgSVRTX0NNRF9NQVBJKTsKKwkJY21kX2Zvcm1hdF9kZXZpZChjbWQsIGRlc2MtPmNtZF9k
ZXNjX21hcGkuaXRzX2Rldi0+ZGV2aWQpOworCQljbWRfZm9ybWF0X2lkKGNtZCwgZGVzYy0+Y21k
X2Rlc2NfbWFwaS5scGludW0pOworCQljbWRfZm9ybWF0X2NvbChjbWQsIGRlc2MtPmNtZF9kZXNj
X21hcGkuaXRzX2Rldi0+Y29sLT5jb2xfaWQpOworCQlicmVhazsKKwljYXNlIElUU19DTURfSU5W
OgorCQl0YXJnZXQgPSBkZXNjLT5jbWRfZGVzY19pbnYuaXRzX2Rldi0+Y29sLT5jb2xfdGFyZ2V0
OworCQljbWRfZm9ybWF0X2NvbW1hbmQoY21kLCBJVFNfQ01EX0lOVik7CisJCWNtZF9mb3JtYXRf
ZGV2aWQoY21kLCBkZXNjLT5jbWRfZGVzY19pbnYuaXRzX2Rldi0+ZGV2aWQpOworCQljbWRfZm9y
bWF0X2lkKGNtZCwgZGVzYy0+Y21kX2Rlc2NfaW52LmxwaW51bSk7CisJCWJyZWFrOworCWNhc2Ug
SVRTX0NNRF9JTlZBTEw6CisJCWNtZF9mb3JtYXRfY29tbWFuZChjbWQsIElUU19DTURfSU5WQUxM
KTsKKwkJY21kX2Zvcm1hdF9jb2woY21kLCBkZXNjLT5jbWRfZGVzY19pbnZhbGwuY29sLT5jb2xf
aWQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnJvciA9IFRSVUU7CisJCWJyZWFrOworCX0K
KworCWlmICghZXJyb3IpCisJCWNtZF9maXhfZW5kaWFuKGNtZCk7CisKKwlyZXR1cm4gKHRhcmdl
dCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1aW50NjRfdAoraXRzX2NtZF9jd3JpdGVyX29mZnNl
dChzdHJ1Y3QgZ2ljX3YzX2l0c19zb2Z0YyAqc2MsIHN0cnVjdCBpdHNfY21kICpjbWQpCit7CisJ
dWludDY0X3Qgb2ZmOworCisJb2ZmID0gKGNtZCAtIHNjLT5pdHNfY21kcV9iYXNlKSAqIHNpemVv
ZigqY21kKTsKKworCXJldHVybiAob2ZmKTsKK30KKworc3RhdGljIHZvaWQKK2l0c19jbWRfd2Fp
dF9jb21wbGV0aW9uKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICpzYywgc3RydWN0IGl0c19jbWQg
KmNtZF9maXJzdCwKKyAgICBzdHJ1Y3QgaXRzX2NtZCAqY21kX2xhc3QpCit7CisJdWludDY0X3Qg
Zmlyc3QsIGxhc3QsIHJlYWQ7CisJc2l6ZV90IHVzX2xlZnQ7CisKKwkvKgorCSAqIFhYWCBBUk02
NFRPRE86IFRoaXMgaXMgb2J2aW91c2x5IGEgc2lnbmlmaWNhbnQgZGVsYXkuCisJICogVGhlIHJl
YXNvbiBmb3IgdGhhdCBpcyB0aGF0IGN1cnJlbnRseSB0aGUgdGltZSBmcmFtZXMgZm9yCisJICog
dGhlIGNvbW1hbmQgdG8gY29tcGxldGUgYXJlIG5vdCBrbm93bi4KKwkgKi8KKwl1c19sZWZ0ID0g
MTAwMDAwMDsKKworCWZpcnN0ID0gaXRzX2NtZF9jd3JpdGVyX29mZnNldChzYywgY21kX2ZpcnN0
KTsKKwlsYXN0ID0gaXRzX2NtZF9jd3JpdGVyX29mZnNldChzYywgY21kX2xhc3QpOworCisJZm9y
ICg7OykgeworCQlyZWFkID0gZ2ljX2l0c19yZWFkKHNjLCA4LCBHSVRTX0NSRUFEUik7CisJCWlm
IChyZWFkIDwgZmlyc3QgfHwgcmVhZCA+PSBsYXN0KQorCQkJYnJlYWs7CisKKwkJaWYgKHVzX2xl
ZnQtLSA9PSAwKSB7CisJCQkvKiBUaGlzIG1lYW5zIHRpbWVvdXQgKi8KKwkJCWRldmljZV9wcmlu
dGYoc2MtPmRldiwKKwkJCSAgICAiVGltZW91dCB3aGlsZSB3YWl0aW5nIGZvciBDTUQgY29tcGxl
dGlvbi5cbiIpOworCQkJcmV0dXJuOworCQl9CisJCURFTEFZKDEpOworCX0KK30KKworc3RhdGlj
IGludAoraXRzX2NtZF9zZW5kKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICpzYywgc3RydWN0IGl0
c19jbWRfZGVzYyAqZGVzYykKK3sKKwlzdHJ1Y3QgaXRzX2NtZCAqY21kLCAqY21kX3N5bmM7CisJ
c3RydWN0IGl0c19jb2wgY29sX3N5bmM7CisJc3RydWN0IGl0c19jbWRfZGVzYyBkZXNjX3N5bmM7
CisJdWludDY0X3QgdGFyZ2V0LCBjd3JpdGVyOworCisJbXR4X2xvY2tfc3Bpbigmc2MtPml0c19z
cGluX210eCk7CisJY21kID0gaXRzX2NtZF9hbGxvY19sb2NrZWQoc2MpOworCW10eF91bmxvY2tf
c3Bpbigmc2MtPml0c19zcGluX210eCk7CisJaWYgKGNtZCA9PSBOVUxMKSB7CisJCWRldmljZV9w
cmludGYoc2MtPmRldiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBJVFMgY29tbWFuZFxuIik7CisJCXJl
dHVybiAoRUJVU1kpOworCX0KKworCXRhcmdldCA9IGl0c19jbWRfcHJlcGFyZShjbWQsIGRlc2Mp
OworCWl0c19jbWRfc3luYyhzYywgY21kKTsKKworCWlmICh0YXJnZXQgIT0gSVRTX1RBUkdFVF9O
T05FKSB7CisJCW10eF9sb2NrX3NwaW4oJnNjLT5pdHNfc3Bpbl9tdHgpOworCQljbWRfc3luYyA9
IGl0c19jbWRfYWxsb2NfbG9ja2VkKHNjKTsKKwkJbXR4X3VubG9ja19zcGluKCZzYy0+aXRzX3Nw
aW5fbXR4KTsKKwkJaWYgKGNtZF9zeW5jID09IE5VTEwpCisJCQlnb3RvIGVuZDsKKwkJZGVzY19z
eW5jLmNtZF90eXBlID0gSVRTX0NNRF9TWU5DOworCQljb2xfc3luYy5jb2xfdGFyZ2V0ID0gdGFy
Z2V0OworCQlkZXNjX3N5bmMuY21kX2Rlc2Nfc3luYy5jb2wgPSAmY29sX3N5bmM7CisJCWl0c19j
bWRfcHJlcGFyZShjbWRfc3luYywgJmRlc2Nfc3luYyk7CisJCWl0c19jbWRfc3luYyhzYywgY21k
X3N5bmMpOworCX0KK2VuZDoKKwkvKiBVcGRhdGUgR0lUU19DV1JJVEVSICovCisJbXR4X2xvY2tf
c3Bpbigmc2MtPml0c19zcGluX210eCk7CisJY3dyaXRlciA9IGl0c19jbWRfY3dyaXRlcl9vZmZz
ZXQoc2MsIHNjLT5pdHNfY21kcV93cml0ZSk7CisJZ2ljX2l0c193cml0ZShzYywgOCwgR0lUU19D
V1JJVEVSLCBjd3JpdGVyKTsKKwltdHhfdW5sb2NrX3NwaW4oJnNjLT5pdHNfc3Bpbl9tdHgpOwor
CisJaXRzX2NtZF93YWl0X2NvbXBsZXRpb24oc2MsIGNtZCwgc2MtPml0c19jbWRxX3dyaXRlKTsK
KworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXRzX2RldiAqCitpdHNfZGV2aWNl
X2ZpbmRfbG9ja2VkKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICpzYywgZGV2aWNlX3QgcGNpX2Rl
dikKK3sKKwlzdHJ1Y3QgaXRzX2RldiAqaXRzX2RldjsKKworCW10eF9hc3NlcnQoJnNjLT5pdHNf
bXR4LCBNQV9PV05FRCk7CisJLyogRmluZCBleGlzdGluZyBkZXZpY2UgaWYgYW55ICovCisJVEFJ
TFFfRk9SRUFDSChpdHNfZGV2LCAmc2MtPml0c19kZXZfbGlzdCwgZW50cnkpIHsKKwkJaWYgKGl0
c19kZXYtPnBjaV9kZXYgPT0gcGNpX2RldikKKwkJCXJldHVybiAoaXRzX2Rldik7CisJfQorCisJ
cmV0dXJuIChOVUxMKTsKK30KKworc3RhdGljIHN0cnVjdCBpdHNfZGV2ICoKK2l0c19kZXZpY2Vf
YWxsb2NfbG9ja2VkKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICpzYywgZGV2aWNlX3QgcGNpX2Rl
diwKKyAgICB1X2ludCBudmVjcykKK3sKKwlzdHJ1Y3QgaXRzX2RldiAqbmV3ZGV2OworCXVpbnQ2
NF90IHR5cGVyOworCXVpbnQzMl90IGRldmlkOworCXVfaW50IGNwdWlkOworCXNpemVfdCBlc2l6
ZTsKKworCW10eF9hc3NlcnQoJnNjLT5pdHNfbXR4LCBNQV9PV05FRCk7CisJLyogRmluZCBleGlz
dGluZyBkZXZpY2UgaWYgYW55ICovCisJbmV3ZGV2ID0gaXRzX2RldmljZV9maW5kX2xvY2tlZChz
YywgcGNpX2Rldik7CisJaWYgKG5ld2RldiAhPSBOVUxMKQorCQlyZXR1cm4gKG5ld2Rldik7CisK
KwlkZXZpZCA9IFBDSV9ERVZJRChwY2lfZGV2KTsKKworCS8qIFRoZXJlIHdhcyBubyBwcmV2aW91
c2x5IGNyZWF0ZWQgZGV2aWNlLiBDcmVhdGUgb25lIG5vdyAqLworCW5ld2RldiA9IG1hbGxvYyhz
aXplb2YoKm5ld2RldiksIE1fR0lDX1YzX0lUUywgKE1fV0FJVE9LIHwgTV9aRVJPKSk7CisJbmV3
ZGV2LT5wY2lfZGV2ID0gcGNpX2RldjsKKwluZXdkZXYtPmRldmlkID0gZGV2aWQ7CisKKwlpZiAo
bHBpX2FsbG9jX2NodW5rKHNjLCAmbmV3ZGV2LT5scGlzLCBudmVjcykgIT0gMCkgeworCQlmcmVl
KG5ld2RldiwgTV9HSUNfVjNfSVRTKTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisKKwkvKiBHZXQg
SVRUIGVudHJ5IHNpemUgKi8KKwl0eXBlciA9IGdpY19pdHNfcmVhZChzYywgOCwgR0lUU19UWVBF
Uik7CisJZXNpemUgPSBHSVRTX1RZUEVSX0lUVEVTKHR5cGVyKTsKKwkvKgorCSAqIEFsbG9jYXRl
IElUVCBmb3IgdGhpcyBkZXZpY2UuCisJICogUEEgaGFzIHRvIGJlIDI1NiBCIGFsaWduZWQuIEF0
IGxlYXN0IHR3byBlbnRyaWVzIGZvciBkZXZpY2UuCisJICovCisJbmV3ZGV2LT5pdHQgPSAodm1f
b2Zmc2V0X3QpY29udGlnbWFsbG9jKAorCSAgICByb3VuZHVwMihyb3VuZHVwMihudmVjcywgMikg
KiBlc2l6ZSwgMHgxMDApLCBNX0dJQ19WM19JVFMsCisJICAgIChNX1dBSVRPSyB8IE1fWkVSTyks
IDAsIH4wVUwsIDB4MTAwLCAwKTsKKworCS8qCisJICogWFhYIEFSTTY0VE9ETzogQ3VycmVudGx5
IGFsbCBpbnRlcnJ1cHRzIGFyZSBnb2luZworCSAqIHRvIGJlIGJvdW5kIHRvIHRoZSBDUFUgdGhh
dCBwZXJmb3JtcyB0aGUgY29uZmlndXJhdGlvbi4KKwkgKi8KKwljcHVpZCA9IFBDUFVfR0VUKGNw
dWlkKTsKKwluZXdkZXYtPmNvbCA9ICZzYy0+aXRzX2NvbHNbY3B1aWRdOworCisJVEFJTFFfSU5T
RVJUX1RBSUwoJnNjLT5pdHNfZGV2X2xpc3QsIG5ld2RldiwgZW50cnkpOworCisJLyogTWFwIGRl
dmljZSB0byBpdHMgSVRUICovCisJaXRzX2NtZF9tYXBkKHNjLCBuZXdkZXYsIDEpOworCisJcmV0
dXJuIChuZXdkZXYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdm9pZAoraXRzX2RldmljZV9hc2ln
bl9scGlfbG9ja2VkKHN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICpzYywKKyAgICBzdHJ1Y3QgaXRz
X2RldiAqaXRzX2RldiwgdV9pbnQgKmlycSkKK3sKKworCW10eF9hc3NlcnQoJnNjLT5pdHNfbXR4
LCBNQV9PV05FRCk7CisJaWYgKGl0c19kZXYtPmxwaXMubHBpX2ZyZWUgPT0gMCkgeworCQlwYW5p
YygiUmVxdWVzdGluZyBtb3JlIExQSXMgdGhhbiBhbGxvY2F0ZWQgZm9yIHRoaXMgZGV2aWNlLiAi
CisJCSAgICAiTFBJIG51bTogJXUsIGZyZWUgJXUiLCBpdHNfZGV2LT5scGlzLmxwaV9udW0sCisJ
CSAgICBpdHNfZGV2LT5scGlzLmxwaV9mcmVlKTsKKwl9CisJKmlycSA9IGl0c19kZXYtPmxwaXMu
bHBpX2Jhc2UgKyAoaXRzX2Rldi0+bHBpcy5scGlfbnVtIC0KKwkgICAgaXRzX2Rldi0+bHBpcy5s
cGlfZnJlZSk7CisJaXRzX2Rldi0+bHBpcy5scGlfZnJlZS0tOworfQorLyoKKyAqIE1lc3NhZ2Ug
c2lnbmFsbGVkIGludGVycnVwdHMgaGFuZGxpbmcuCisgKi8KKworLyoKKyAqIFhYWCBBUk02NFRP
RE86IFdhdGNoIG91dCBmb3IgImlycSIgdHlwZS4KKyAqCisgKiBJbiB0aGVvcnkgR0lDIGNhbiBo
YW5kbGUgdXAgdG8gKDJeMzIgLSAxKSBpbnRlcnJ1cHQgSURzIHdoZXJlYXMKKyAqIHdlIHBhc3Mg
ImlycSIgcG9pbnRlciBvZiB0eXBlIGludGVnZXIuIFRoaXMgaXMgb2J2aW91c2x5IHdyb25nIGJ1
dAorICogaXMgZGV0ZXJtaW5lZCBieSB0aGUgd2F5IGFzIFBDSSBsYXllciB3YW50cyBpdCB0byBi
ZSBkb25lLgorICovCitpbnQKK2dpY192M19pdHNfYWxsb2NfbXNpeChkZXZpY2VfdCBkZXYsIGRl
dmljZV90IHBjaV9kZXYsIGludCAqaXJxKQoreworCXN0cnVjdCBnaWNfdjNfaXRzX3NvZnRjICpz
YzsKKwlzdHJ1Y3QgaXRzX2RldiAqaXRzX2RldjsKKwl1X2ludCBudmVjczsKKworCXNjID0gZGV2
aWNlX2dldF9zb2Z0YyhkZXYpOworCisJbXR4X2xvY2soJnNjLT5pdHNfbXR4KTsKKwludmVjcyA9
IFBDSV9NU0lYX05VTShwY2lfZGV2KTsKKworCS8qCisJICogQWxsb2NhdGUgZGV2aWNlIGFzIHNl
ZW4gYnkgSVRTIGlmIG5vdCBhbHJlYWR5IGF2YWlsYWJsZS4KKwkgKiBOb3RpY2UgdGhhdCBNU0kt
WCBpbnRlcnJ1cHRzIGFyZSBhbGxvY2F0ZWQgb24gb25lLWJ5LW9uZSBiYXNpcy4KKwkgKi8KKwlp
dHNfZGV2ID0gaXRzX2RldmljZV9hbGxvY19sb2NrZWQoc2MsIHBjaV9kZXYsIG52ZWNzKTsKKwlp
ZiAoaXRzX2RldiA9PSBOVUxMKSB7CisJCW10eF91bmxvY2soJnNjLT5pdHNfbXR4KTsKKwkJcmV0
dXJuIChFTk9NRU0pOworCX0KKworCWl0c19kZXZpY2VfYXNpZ25fbHBpX2xvY2tlZChzYywgaXRz
X2RldiwgaXJxKTsKKwltdHhfdW5sb2NrKCZzYy0+aXRzX210eCk7CisKKwlyZXR1cm4gKDApOwor
fQorCitpbnQKK2dpY192M19pdHNfYWxsb2NfbXNpKGRldmljZV90IGRldiwgZGV2aWNlX3QgcGNp
X2RldiwgaW50IGNvdW50LCBpbnQgKmlycXMpCit7CisJc3RydWN0IGdpY192M19pdHNfc29mdGMg
KnNjOworCXN0cnVjdCBpdHNfZGV2ICppdHNfZGV2OworCisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRj
KGRldik7CisKKwkvKiBBbGxvY2F0ZSBkZXZpY2UgYXMgc2VlbiBieSBJVFMgaWYgbm90IGFscmVh
ZHkgYXZhaWxhYmxlLiAqLworCW10eF9sb2NrKCZzYy0+aXRzX210eCk7CisJaXRzX2RldiA9IGl0
c19kZXZpY2VfYWxsb2NfbG9ja2VkKHNjLCBwY2lfZGV2LCBjb3VudCk7CisJaWYgKGl0c19kZXYg
PT0gTlVMTCkgeworCQltdHhfdW5sb2NrKCZzYy0+aXRzX210eCk7CisJCXJldHVybiAoRU5PTUVN
KTsKKwl9CisKKwlmb3IgKDsgY291bnQgPiAwOyBjb3VudC0tKSB7CisJCWl0c19kZXZpY2VfYXNp
Z25fbHBpX2xvY2tlZChzYywgaXRzX2RldiwgaXJxcyk7CisJCWlycXMrKzsKKwl9CisJbXR4X3Vu
bG9jaygmc2MtPml0c19tdHgpOworCisJcmV0dXJuICgwKTsKK30KKworaW50CitnaWNfdjNfaXRz
X21hcF9tc2l4KGRldmljZV90IGRldiwgZGV2aWNlX3QgcGNpX2RldiwgaW50IGlycSwgdWludDY0
X3QgKmFkZHIsCisgICAgdWludDMyX3QgKmRhdGEpCit7CisJc3RydWN0IGdpY192M19pdHNfc29m
dGMgKnNjOworCWJ1c19zcGFjZV9oYW5kbGVfdCBpdHNfYnNoOworCXN0cnVjdCBpdHNfZGV2ICpp
dHNfZGV2OworCXVpbnQ2NF90IGl0c19wYTsKKwl1aW50MzJfdCBpZDsKKworCXNjID0gZGV2aWNl
X2dldF9zb2Z0YyhkZXYpOworCS8qIFZlcmlmeSB0aGF0IHRoaXMgZGV2aWNlIGlzIGFsbG9jYXRl
ZCBhbmQgb3ducyB0aGlzIExQSSAqLworCW10eF9sb2NrKCZzYy0+aXRzX210eCk7CisJaXRzX2Rl
diA9IGl0c19kZXZpY2VfZmluZF9sb2NrZWQoc2MsIHBjaV9kZXYpOworCW10eF91bmxvY2soJnNj
LT5pdHNfbXR4KTsKKwlpZiAoaXRzX2RldiA9PSBOVUxMKQorCQlyZXR1cm4gKEVJTlZBTCk7CisK
KwlpZCA9IGlycSAtIGl0c19kZXYtPmxwaXMubHBpX2Jhc2U7CisJbHBpX21hcF90b19kZXZpY2Uo
c2MsIGl0c19kZXYsIGlkLCBpcnEpOworCisJaXRzX2JzaCA9IHJtYW5fZ2V0X2J1c2hhbmRsZSgm
c2MtPml0c19yZXNbMF0pOworCWl0c19wYSA9IHZ0b3BoeXMoaXRzX2JzaCk7CisKKwkqYWRkciA9
IChpdHNfcGEgKyBHSVRTX1RSQU5TTEFURVIpOworCSpkYXRhID0gaWQ7CisKKwlyZXR1cm4gKDAp
OworfQpkaWZmIC0tZ2l0IGEvc3lzL2FybTY0L2FybTY0L2dpY192M19mZHQuYyBiL3N5cy9hcm02
NC9hcm02NC9naWNfdjNfZmR0LmMKLS0tIGEvc3lzL2FybTY0L2FybTY0L2dpY192M19mZHQuYwor
KysgYi9zeXMvYXJtNjQvYXJtNjQvZ2ljX3YzX2ZkdC5jCkBAIC0zNSw2ICszNSw4IEBACiAjaW5j
bHVkZSA8c3lzL2tlcm5lbC5oPgogI2luY2x1ZGUgPHN5cy9tb2R1bGUuaD4KIAorI2luY2x1ZGUg
PG1hY2hpbmUvcmVzb3VyY2UuaD4KKwogI2luY2x1ZGUgPGRldi9mZHQvZmR0X2NvbW1vbi5oPgog
I2luY2x1ZGUgPGRldi9vZncvb3BlbmZpcm0uaD4KICNpbmNsdWRlIDxkZXYvb2Z3L29md19idXMu
aD4KQEAgLTUxLDExICs1MywyNyBAQAogc3RhdGljIGludCBnaWNfdjNfZmR0X3Byb2JlKGRldmlj
ZV90KTsKIHN0YXRpYyBpbnQgZ2ljX3YzX2ZkdF9hdHRhY2goZGV2aWNlX3QpOwogCitzdGF0aWMg
c3RydWN0IHJlc291cmNlICpnaWNfdjNfb2Z3X2J1c19hbGxvY19yZXMoZGV2aWNlX3QsIGRldmlj
ZV90LCBpbnQsIGludCAqLAorICAgIHVfbG9uZywgdV9sb25nLCB1X2xvbmcsIHVfaW50KTsKK3N0
YXRpYyBjb25zdCBzdHJ1Y3Qgb2Z3X2J1c19kZXZpbmZvICpnaWNfdjNfb2Z3X2dldF9kZXZpbmZv
KGRldmljZV90LCBkZXZpY2VfdCk7CisKIHN0YXRpYyBkZXZpY2VfbWV0aG9kX3QgZ2ljX3YzX2Zk
dF9tZXRob2RzW10gPSB7CiAJLyogRGV2aWNlIGludGVyZmFjZSAqLwogCURFVk1FVEhPRChkZXZp
Y2VfcHJvYmUsCQlnaWNfdjNfZmR0X3Byb2JlKSwKIAlERVZNRVRIT0QoZGV2aWNlX2F0dGFjaCwJ
Z2ljX3YzX2ZkdF9hdHRhY2gpLAogCisJLyogQnVzIGludGVyZmFjZSAqLworCURFVk1FVEhPRChi
dXNfYWxsb2NfcmVzb3VyY2UsCQlnaWNfdjNfb2Z3X2J1c19hbGxvY19yZXMpLAorCURFVk1FVEhP
RChidXNfYWN0aXZhdGVfcmVzb3VyY2UsCWJ1c19nZW5lcmljX2FjdGl2YXRlX3Jlc291cmNlKSwK
KworCS8qIG9md19idXMgaW50ZXJmYWNlICovCisJREVWTUVUSE9EKG9md19idXNfZ2V0X2Rldmlu
Zm8sCWdpY192M19vZndfZ2V0X2RldmluZm8pLAorCURFVk1FVEhPRChvZndfYnVzX2dldF9jb21w
YXQsCW9md19idXNfZ2VuX2dldF9jb21wYXQpLAorCURFVk1FVEhPRChvZndfYnVzX2dldF9tb2Rl
bCwJb2Z3X2J1c19nZW5fZ2V0X21vZGVsKSwKKwlERVZNRVRIT0Qob2Z3X2J1c19nZXRfbmFtZSwJ
b2Z3X2J1c19nZW5fZ2V0X25hbWUpLAorCURFVk1FVEhPRChvZndfYnVzX2dldF9ub2RlLAlvZndf
YnVzX2dlbl9nZXRfbm9kZSksCisJREVWTUVUSE9EKG9md19idXNfZ2V0X3R5cGUsCW9md19idXNf
Z2VuX2dldF90eXBlKSwKKwogCS8qIEVuZCAqLwogCURFVk1FVEhPRF9FTkQKIH07CkBAIC03MSw2
ICs4OSwxMSBAQAogICAgIDAsIDAsIEJVU19QQVNTX0lOVEVSUlVQVCArIEJVU19QQVNTX09SREVS
X01JRERMRSk7CiAKIC8qCisgKiBIZWxwZXIgZnVuY3Rpb25zIGRlY2xhcmF0aW9ucy4KKyAqLwor
c3RhdGljIGludCBnaWNfdjNfb2Z3X2J1c19hdHRhY2goZGV2aWNlX3QpOworCisvKgogICogRGV2
aWNlIGludGVyZmFjZS4KICAqLwogc3RhdGljIGludApAQCAtMTA5LDYgKzEzMiwxNyBAQAogCWVy
ciA9IGdpY192M19hdHRhY2goZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycm9yOworCS8qCisJ
ICogVHJ5IHRvIHJlZ2lzdGVyIElUUyB0byB0aGlzIEdJQy4KKwkgKiBHSUMgd2lsbCBhY3QgYXMg
YSBidXMgaW4gdGhhdCBjYXNlLgorCSAqIEZhaWx1cmUgaGVyZSB3aWxsIG5vdCBhZmZlY3QgbWFp
biBHSUMgZnVuY3Rpb25hbGl0eS4KKwkgKi8KKwlpZiAoZ2ljX3YzX29md19idXNfYXR0YWNoKGRl
dikpIHsKKwkJaWYgKGJvb3R2ZXJib3NlKSB7CisJCQlkZXZpY2VfcHJpbnRmKGRldiwKKwkJCSAg
ICAiRmFpbGVkIHRvIGF0dGFjaCBJVFMgdG8gdGhpcyBHSUNcbiIpOworCQl9CisJfQogCiAJcmV0
dXJuIChlcnIpOwogCkBAIC0xMjIsMyArMTU2LDE1NSBAQAogCiAJcmV0dXJuIChlcnIpOwogfQor
CisvKiBPRlcgYnVzIGludGVyZmFjZSAqLworc3RydWN0IGdpY192M19vZndfZGV2aW5mbyB7CisJ
c3RydWN0IG9md19idXNfZGV2aW5mbwlkaV9kaW5mbzsKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdAlk
aV9ybDsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2Z3X2J1c19kZXZpbmZvICoKK2dpY192
M19vZndfZ2V0X2RldmluZm8oZGV2aWNlX3QgYnVzIF9fdW51c2VkLCBkZXZpY2VfdCBjaGlsZCkK
K3sKKwlzdHJ1Y3QgZ2ljX3YzX29md19kZXZpbmZvICpkaTsKKworCWRpID0gZGV2aWNlX2dldF9p
dmFycyhjaGlsZCk7CisJcmV0dXJuICgmZGktPmRpX2RpbmZvKTsKK30KKworc3RhdGljIHN0cnVj
dCByZXNvdXJjZSAqCitnaWNfdjNfb2Z3X2J1c19hbGxvY19yZXMoZGV2aWNlX3QgYnVzLCBkZXZp
Y2VfdCBjaGlsZCwgaW50IHR5cGUsIGludCAqcmlkLAorICAgIHVfbG9uZyBzdGFydCwgdV9sb25n
IGVuZCwgdV9sb25nIGNvdW50LCB1X2ludCBmbGFncykKK3sKKwlzdHJ1Y3QgZ2ljX3YzX29md19k
ZXZpbmZvICpkaTsKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdF9lbnRyeSAqcmxlOworCWludCByYW5n
ZXNfbGVuOworCisJaWYgKChzdGFydCA9PSAwVUwpICYmIChlbmQgPT0gfjBVTCkpIHsKKwkJaWYg
KChkaSA9IGRldmljZV9nZXRfaXZhcnMoY2hpbGQpKSA9PSBOVUxMKQorCQkJcmV0dXJuIChOVUxM
KTsKKwkJaWYgKHR5cGUgIT0gU1lTX1JFU19NRU1PUlkpCisJCQlyZXR1cm4gKE5VTEwpOworCisJ
CS8qIEZpbmQgZGVmYXVsdHMgZm9yIHRoaXMgcmlkICovCisJCXJsZSA9IHJlc291cmNlX2xpc3Rf
ZmluZCgmZGktPmRpX3JsLCB0eXBlLCAqcmlkKTsKKwkJaWYgKHJsZSA9PSBOVUxMKQorCQkJcmV0
dXJuIChOVUxMKTsKKworCQlzdGFydCA9IHJsZS0+c3RhcnQ7CisJCWVuZCA9IHJsZS0+ZW5kOwor
CQljb3VudCA9IHJsZS0+Y291bnQ7CisJfQorCS8qCisJICogWFhYOiBObyByYW5nZXMgcmVtYXAh
CisJICoJQWJzb2x1dGUgYWRkcmVzcyBpcyBleHBlY3RlZC4KKwkgKi8KKwlpZiAob2Z3X2J1c19o
YXNfcHJvcChidXMsICJyYW5nZXMiKSkgeworCQlyYW5nZXNfbGVuID0gT0ZfZ2V0cHJvcGxlbihv
ZndfYnVzX2dldF9ub2RlKGJ1cyksICJyYW5nZXMiKTsKKwkJaWYgKHJhbmdlc19sZW4gIT0gMCkg
eworCQkJaWYgKGJvb3R2ZXJib3NlKSB7CisJCQkJZGV2aWNlX3ByaW50ZihjaGlsZCwKKwkJCQkg
ICAgIlJhbmdlcyByZW1hcCBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCX0KKwkJCXJldHVybiAoTlVM
TCk7CisJCX0KKwl9CisJcmV0dXJuIChidXNfZ2VuZXJpY19hbGxvY19yZXNvdXJjZShidXMsIGNo
aWxkLCB0eXBlLCByaWQsIHN0YXJ0LCBlbmQsCisJICAgIGNvdW50LCBmbGFncykpOworfQorCisv
KiBIZWxwZXIgZnVuY3Rpb25zICovCisKKy8qCisgKiBCdXMgY2FwYWJpbGl0eSBzdXBwb3J0IGZv
ciBHSUN2My4KKyAqIENvbGxlY3RzIGFuZCBjb25maWd1cmVzIGRldmljZSBpbmZvcm1hdGlvbnMg
YW5kIGZpbmFsbHkKKyAqIGFkZHMgSVRTIGRldmljZSBhcyBhIGNoaWxkIG9mIEdJQ3YzIGluIE5l
d2J1cyBoaWVyYXJjaHkuCisgKi8KK3N0YXRpYyBpbnQKK2dpY192M19vZndfYnVzX2F0dGFjaChk
ZXZpY2VfdCBkZXYpCit7CisJc3RydWN0IGdpY192M19vZndfZGV2aW5mbyAqZGk7CisJZGV2aWNl
X3QgY2hpbGQ7CisJcGhhbmRsZV90IHBhcmVudCwgbm9kZTsKKwlwY2VsbF90IGFkZHJfY2VsbHMs
IHNpemVfY2VsbHM7CisKKwlwYXJlbnQgPSBvZndfYnVzX2dldF9ub2RlKGRldik7CisJaWYgKHBh
cmVudCA+IDApIHsKKwkJYWRkcl9jZWxscyA9IDI7CisJCU9GX2dldGVuY3Byb3AocGFyZW50LCAi
I2FkZHJlc3MtY2VsbHMiLCAmYWRkcl9jZWxscywKKwkJICAgIHNpemVvZihhZGRyX2NlbGxzKSk7
CisJCXNpemVfY2VsbHMgPSAyOworCQlPRl9nZXRlbmNwcm9wKHBhcmVudCwgIiNzaXplLWNlbGxz
IiwgJnNpemVfY2VsbHMsCisJCSAgICBzaXplb2Yoc2l6ZV9jZWxscykpOworCQkvKiBJdGVyYXRl
IHRocm91Z2ggYWxsIEdJQyBzdWJvcmRpbmF0ZXMgKi8KKwkJZm9yIChub2RlID0gT0ZfY2hpbGQo
cGFyZW50KTsgbm9kZSA+IDA7IG5vZGUgPSBPRl9wZWVyKG5vZGUpKSB7CisJCQkvKiBBbGxvY2F0
ZSBhbmQgcG9wdWxhdGUgZGV2aW5mby4gKi8KKwkJCWRpID0gbWFsbG9jKHNpemVvZigqZGkpLCBN
X0dJQ19WMywgTV9XQUlUT0sgfCBNX1pFUk8pOworCQkJaWYgKG9md19idXNfZ2VuX3NldHVwX2Rl
dmluZm8oJmRpLT5kaV9kaW5mbywgbm9kZSkpIHsKKwkJCQlpZiAoYm9vdHZlcmJvc2UpIHsKKwkJ
CQkJZGV2aWNlX3ByaW50ZihkZXYsCisJCQkJCSAgICAiQ291bGQgbm90IHNldCB1cCBkZXZpbmZv
IGZvciBJVFNcbiIpOworCQkJCX0KKwkJCQlmcmVlKGRpLCBNX0dJQ19WMyk7CisJCQkJY29udGlu
dWU7CisJCQl9CisKKwkJCS8qIEluaXRpYWxpemUgYW5kIHBvcHVsYXRlIHJlc291cmNlIGxpc3Qu
ICovCisJCQlyZXNvdXJjZV9saXN0X2luaXQoJmRpLT5kaV9ybCk7CisJCQlvZndfYnVzX3JlZ190
b19ybChkZXYsIG5vZGUsIGFkZHJfY2VsbHMsIHNpemVfY2VsbHMsCisJCQkgICAgJmRpLT5kaV9y
bCk7CisKKwkJCS8qIFNob3VsZCBub3QgaGF2ZSBhbnkgaW50ZXJydXB0cywgc28gZG9uJ3QgYWRk
IGFueSAqLworCisJCQkvKiBBZGQgbmV3YnVzIGRldmljZSBmb3IgdGhpcyBGRFQgbm9kZSAqLwor
CQkJY2hpbGQgPSBkZXZpY2VfYWRkX2NoaWxkKGRldiwgTlVMTCwgLTEpOworCQkJaWYgKCFjaGls
ZCkgeworCQkJCWlmIChib290dmVyYm9zZSkgeworCQkJCQlkZXZpY2VfcHJpbnRmKGRldiwKKwkJ
CQkJICAgICJDb3VsZCBub3QgYWRkIGNoaWxkOiAlc1xuIiwKKwkJCQkJICAgIGRpLT5kaV9kaW5m
by5vYmRfbmFtZSk7CisJCQkJfQorCQkJCXJlc291cmNlX2xpc3RfZnJlZSgmZGktPmRpX3JsKTsK
KwkJCQlvZndfYnVzX2dlbl9kZXN0cm95X2RldmluZm8oJmRpLT5kaV9kaW5mbyk7CisJCQkJZnJl
ZShkaSwgTV9HSUNfVjMpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlkZXZpY2Vfc2V0X2l2
YXJzKGNoaWxkLCBkaSk7CisJCX0KKwl9CisKKwlyZXR1cm4gKGJ1c19nZW5lcmljX2F0dGFjaChk
ZXYpKTsKK30KKworc3RhdGljIGludCBnaWNfdjNfaXRzX2ZkdF9wcm9iZShkZXZpY2VfdCBkZXYp
OworCitzdGF0aWMgZGV2aWNlX21ldGhvZF90IGdpY192M19pdHNfZmR0X21ldGhvZHNbXSA9IHsK
KwkvKiBEZXZpY2UgaW50ZXJmYWNlICovCisJREVWTUVUSE9EKGRldmljZV9wcm9iZSwJCWdpY192
M19pdHNfZmR0X3Byb2JlKSwKKworCS8qIEVuZCAqLworCURFVk1FVEhPRF9FTkQKK307CisKK0RF
RklORV9DTEFTU18xKGdpY192M19pdHMsIGdpY192M19pdHNfZmR0X2RyaXZlciwgZ2ljX3YzX2l0
c19mZHRfbWV0aG9kcywKKyAgICBzaXplb2Yoc3RydWN0IGdpY192M19pdHNfc29mdGMpLCBnaWNf
djNfaXRzX2RyaXZlcik7CisKK3N0YXRpYyBkZXZjbGFzc190IGdpY192M19pdHNfZmR0X2RldmNs
YXNzOworCitFQVJMWV9EUklWRVJfTU9EVUxFKGdpY192M19pdHMsIGdpY192MywgZ2ljX3YzX2l0
c19mZHRfZHJpdmVyLAorICAgIGdpY192M19pdHNfZmR0X2RldmNsYXNzLCAwLCAwLCBCVVNfUEFT
U19JTlRFUlJVUFQgKyBCVVNfUEFTU19PUkRFUl9NSURETEUpOworCitzdGF0aWMgaW50CitnaWNf
djNfaXRzX2ZkdF9wcm9iZShkZXZpY2VfdCBkZXYpCit7CisKKwlpZiAoIW9md19idXNfc3RhdHVz
X29rYXkoZGV2KSkKKwkJcmV0dXJuIChFTlhJTyk7CisKKwlpZiAoIW9md19idXNfaXNfY29tcGF0
aWJsZShkZXYsIEdJQ19WM19JVFNfQ09NUFNUUikpCisJCXJldHVybiAoRU5YSU8pOworCisJZGV2
aWNlX3NldF9kZXNjKGRldiwgR0lDX1YzX0lUU19ERVZTVFIpOworCXJldHVybiAoQlVTX1BST0JF
X0RFRkFVTFQpOworfQpkaWZmIC0tZ2l0IGEvc3lzL2FybTY0L2FybTY0L2dpY192My5jIGIvc3lz
L2FybTY0L2FybTY0L2dpY192My5jCi0tLSBhL3N5cy9hcm02NC9hcm02NC9naWNfdjMuYworKysg
Yi9zeXMvYXJtNjQvYXJtNjQvZ2ljX3YzLmMKQEAgLTIzNiwxOSArMjM2LDE4IEBACiAJCQlicmVh
azsKIAogCQlpZiAoX19wcmVkaWN0X3RydWUoKGFjdGl2ZV9pcnEgPj0gR0lDX0ZJUlNUX1BQSSAm
JgotCQkgICAgYWN0aXZlX2lycSA8PSBHSUNfTEFTVF9TUEkpKSkgeworCQkgICAgYWN0aXZlX2ly
cSA8PSBHSUNfTEFTVF9TUEkpIHx8IGFjdGl2ZV9pcnEgPj0gR0lDX0ZJUlNUX0xQSSkpIHsKIAkJ
CWFybV9kaXNwYXRjaF9pbnRyKGFjdGl2ZV9pcnEsIGZyYW1lKTsKIAkJCWNvbnRpbnVlOwogCQl9
CiAKLQkJaWYgKGFjdGl2ZV9pcnEgPD0gR0lDX0xBU1RfU0dJIHx8IGFjdGl2ZV9pcnEgPj0gR0lD
X0ZJUlNUX0xQSSkgeworCQlpZiAoYWN0aXZlX2lycSA8PSBHSUNfTEFTVF9TR0kpIHsKIAkJCS8q
Ci0JCQkgKiBUT0RPOiBJbXBsZW1lbnQgcHJvcGVyIFNHSS9MUEkgaGFuZGxpbmcuCisJCQkgKiBU
T0RPOiBJbXBsZW1lbnQgcHJvcGVyIFNHSSBoYW5kbGluZy4KIAkJCSAqICAgICAgIE1hc2sgaXQg
aWYgc3VjaCBpcyByZWNlaXZlZCBmb3Igc29tZSByZWFzb24uCiAJCQkgKi8KIAkJCWRldmljZV9w
cmludGYoZGV2LAotCQkJICAgICJSZWNlaXZlZCB1bnN1cHBvcnRlZCBpbnRlcnJ1cHQgdHlwZTog
JXNcbiIsCi0JCQkgICAgYWN0aXZlX2lycSA+PSBHSUNfRklSU1RfTFBJID8gIkxQSSIgOiAiU0dJ
Iik7CisJCQkgICAgIlJlY2VpdmVkIHVuc3VwcG9ydGVkIGludGVycnVwdCB0eXBlOiBTR0lcbiIp
OwogCQkJUElDX01BU0soZGV2LCBhY3RpdmVfaXJxKTsKIAkJfQogCX0KQEAgLTI3NSw2ICsyNzQs
OCBAQAogCX0gZWxzZSBpZiAoaXJxID49IEdJQ19GSVJTVF9TUEkgJiYgaXJxIDw9IEdJQ19MQVNU
X1NQSSkgeyAvKiBTUElzIGluIGRpc3RyaWJ1dG9yICovCiAJCWdpY19yX3dyaXRlKHNjLCA0LCBH
SUNEX0lDRU5BQkxFUihpcnEpLCBHSUNEX0lfTUFTSyhpcnEpKTsKIAkJZ2ljX3YzX3dhaXRfZm9y
X3J3cChzYywgRElTVCk7CisJfSBlbHNlIGlmIChpcnEgPj0gR0lDX0ZJUlNUX0xQSSkgeyAvKiBM
UElzICovCisJCWxwaV9tYXNrX2lycShkZXYsIGlycSk7CiAJfSBlbHNlCiAJCXBhbmljKCIlczog
VW5zdXBwb3J0ZWQgSVJRIG51bWJlciAldSIsIF9fZnVuY19fLCBpcnEpOwogfQpAQCAtMjkzLDYg
KzI5NCw4IEBACiAJfSBlbHNlIGlmIChpcnEgPj0gR0lDX0ZJUlNUX1NQSSAmJiBpcnEgPD0gR0lD
X0xBU1RfU1BJKSB7IC8qIFNQSXMgaW4gZGlzdHJpYnV0b3IgKi8KIAkJZ2ljX2Rfd3JpdGUoc2Ms
IDQsIEdJQ0RfSVNFTkFCTEVSKGlycSksIEdJQ0RfSV9NQVNLKGlycSkpOwogCQlnaWNfdjNfd2Fp
dF9mb3JfcndwKHNjLCBESVNUKTsKKwl9IGVsc2UgaWYgKGlycSA+PSBHSUNfRklSU1RfTFBJKSB7
IC8qIExQSXMgKi8KKwkJbHBpX3VubWFza19pcnEoZGV2LCBpcnEpOwogCX0gZWxzZQogCQlwYW5p
YygiJXM6IFVuc3VwcG9ydGVkIElSUSBudW1iZXIgJXUiLCBfX2Z1bmNfXywgaXJxKTsKIH0KCg==


--b1_adb5d13ff260a628786bac2bb4d29cbf--



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