Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 3 Jan 2010 21:33:41 +0700
From:      Yohanes Nugroho <yohanes@gmail.com>
To:        Rui Paulo <rpaulo@freebsd.org>
Cc:        freebsd-arm@freebsd.org
Subject:   Re: CNS11XX FreeBSD port completed
Message-ID:  <260bb65e1001030633n4f9ad138w388600d82ed9f2d1@mail.gmail.com>
In-Reply-To: <4DC598C4-2CB4-4D98-8101-3CA7B3985BE9@freebsd.org>
References:  <260bb65e0912110627o6b67b399vabaae57477b91023@mail.gmail.com>  <260bb65e0912250948w6f714367w672a1ebf037fb7f7@mail.gmail.com>  <BEE46B4D-5280-48DF-B2FD-36D1FEFA332A@freebsd.org> <260bb65e1001030033s9782689xedfd54520c62b01d@mail.gmail.com>  <4DC598C4-2CB4-4D98-8101-3CA7B3985BE9@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
--001636b14743f0e22e047c437eff
Content-Type: text/plain; charset=UTF-8

On Sun, Jan 3, 2010 at 9:15 PM, Rui Paulo <rpaulo@freebsd.org> wrote:
>>> * did you forget to add a kernel config file for this board?
>>
>> it is in sys/arm/conf/CNS11XXNAS
>
> Did you forget to svn add the file? I can't see sys/arm/conf/CNS11XXNAS in the diff.

Sorry, I forgot :(

I have added the config file in this latest patch.

-- 
Regards
Yohanes
http://yohan.es/

--001636b14743f0e22e047c437eff
Content-Type: text/x-patch; charset=US-ASCII; name="cns11xx_20090103_3.diff"
Content-Disposition: attachment; filename="cns11xx_20090103_3.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_g3zx9ifn0

SW5kZXg6IGFybS9hcm0vZWxmX3RyYW1wb2xpbmUuYwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBhcm0vYXJtL2Vs
Zl90cmFtcG9saW5lLmMJKHJldmlzaW9uIDIwMTM1OCkKKysrIGFybS9hcm0vZWxmX3RyYW1wb2xp
bmUuYwkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsOCBAQAogI2RlZmluZSBjcHVfaWRjYWNo
ZV93Ymludl9hbGwJYXJtOF9jYWNoZV9wdXJnZUlECiAjZWxpZiBkZWZpbmVkKENQVV9BUk05KQog
I2RlZmluZSBjcHVfaWRjYWNoZV93Ymludl9hbGwJYXJtOV9pZGNhY2hlX3diaW52X2FsbAorI2Vs
aWYgZGVmaW5lZChDUFVfRkE1MjYpCisjZGVmaW5lIGNwdV9pZGNhY2hlX3diaW52X2FsbAlmYTUy
Nl9pZGNhY2hlX3diaW52X2FsbAogI2VsaWYgZGVmaW5lZChDUFVfQVJNOUUpCiAjZGVmaW5lIGNw
dV9pZGNhY2hlX3diaW52X2FsbAlhcm12NV9lY19pZGNhY2hlX3diaW52X2FsbAogI2VsaWYgZGVm
aW5lZChDUFVfQVJNMTApCkluZGV4OiBhcm0vYXJtL2NwdWZ1bmMuYwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBh
cm0vYXJtL2NwdWZ1bmMuYwkocmV2aXNpb24gMjAxMzU4KQorKysgYXJtL2FybS9jcHVmdW5jLmMJ
KHdvcmtpbmcgY29weSkKQEAgLTc4MSw2ICs3ODEsNzMgQEAKIAl4c2NhbGVfc2V0dXAJCQkvKiBj
cHUgc2V0dXAJCSovCiB9OwogI2VuZGlmIC8qIENQVV9YU0NBTEVfODEzNDIgKi8KKworCisjaWYg
ZGVmaW5lZChDUFVfRkE1MjYpCitzdHJ1Y3QgY3B1X2Z1bmN0aW9ucyBmYTUyNl9jcHVmdW5jcyA9
IHsKKwkvKiBDUFUgZnVuY3Rpb25zICovCisKKwkuY2ZfaWQJCQk9IGNwdWZ1bmNfaWQsCisJLmNm
X2Nwd2FpdAkJPSBjcHVmdW5jX251bGxvcCwKKworCS8qIE1NVSBmdW5jdGlvbnMgKi8KKworCS5j
Zl9jb250cm9sCQk9IGNwdWZ1bmNfY29udHJvbCwKKwkuY2ZfZG9tYWlucwkJPSBjcHVmdW5jX2Rv
bWFpbnMsCisJLmNmX3NldHR0YgkJPSBmYTUyNl9zZXR0dGIsCisJLmNmX2ZhdWx0c3RhdHVzCQk9
IGNwdWZ1bmNfZmF1bHRzdGF0dXMsCisJLmNmX2ZhdWx0YWRkcmVzcwk9IGNwdWZ1bmNfZmF1bHRh
ZGRyZXNzLAorCisJLyogVExCIGZ1bmN0aW9ucyAqLworCisJLmNmX3RsYl9mbHVzaElECQk9IGFy
bXY0X3RsYl9mbHVzaElELAorCS5jZl90bGJfZmx1c2hJRF9TRQk9IGZhNTI2X3RsYl9mbHVzaElE
X1NFLAorCS5jZl90bGJfZmx1c2hJCQk9IGFybXY0X3RsYl9mbHVzaEksCisJLmNmX3RsYl9mbHVz
aElfU0UJPSBmYTUyNl90bGJfZmx1c2hJX1NFLAorCS5jZl90bGJfZmx1c2hECQk9IGFybXY0X3Rs
Yl9mbHVzaEQsCisJLmNmX3RsYl9mbHVzaERfU0UJPSBhcm12NF90bGJfZmx1c2hEX1NFLAorCisJ
LyogQ2FjaGUgb3BlcmF0aW9ucyAqLworCisJLmNmX2ljYWNoZV9zeW5jX2FsbAk9IGZhNTI2X2lj
YWNoZV9zeW5jX2FsbCwKKwkuY2ZfaWNhY2hlX3N5bmNfcmFuZ2UJPSBmYTUyNl9pY2FjaGVfc3lu
Y19yYW5nZSwKKworCS5jZl9kY2FjaGVfd2JpbnZfYWxsCT0gZmE1MjZfZGNhY2hlX3diaW52X2Fs
bCwKKwkuY2ZfZGNhY2hlX3diaW52X3JhbmdlCT0gZmE1MjZfZGNhY2hlX3diaW52X3JhbmdlLAor
CS5jZl9kY2FjaGVfaW52X3JhbmdlCT0gZmE1MjZfZGNhY2hlX2ludl9yYW5nZSwKKwkuY2ZfZGNh
Y2hlX3diX3JhbmdlCT0gZmE1MjZfZGNhY2hlX3diX3JhbmdlLAorCisJLmNmX2lkY2FjaGVfd2Jp
bnZfYWxsCT0gZmE1MjZfaWRjYWNoZV93Ymludl9hbGwsCisJLmNmX2lkY2FjaGVfd2JpbnZfcmFu
Z2UJPSBmYTUyNl9pZGNhY2hlX3diaW52X3JhbmdlLAorCisKKwkuY2ZfbDJjYWNoZV93Ymludl9h
bGwgPSBjcHVmdW5jX251bGxvcCwKKwkuY2ZfbDJjYWNoZV93Ymludl9yYW5nZSA9ICh2b2lkICop
Y3B1ZnVuY19udWxsb3AsCisJLmNmX2wyY2FjaGVfaW52X3JhbmdlID0gKHZvaWQgKiljcHVmdW5j
X251bGxvcCwKKwkuY2ZfbDJjYWNoZV93Yl9yYW5nZSA9ICh2b2lkICopY3B1ZnVuY19udWxsb3As
CisKKworCS8qIE90aGVyIGZ1bmN0aW9ucyAqLworCisJLmNmX2ZsdXNoX3ByZWZldGNoYnVmCT0g
ZmE1MjZfZmx1c2hfcHJlZmV0Y2hidWYsCisJLmNmX2RyYWluX3dyaXRlYnVmCT0gYXJtdjRfZHJh
aW5fd3JpdGVidWYsCisJLmNmX2ZsdXNoX2JybmNodGd0X0MJPSBjcHVmdW5jX251bGxvcCwKKwku
Y2ZfZmx1c2hfYnJuY2h0Z3RfRQk9IGZhNTI2X2ZsdXNoX2JybmNodGd0X0UsCisKKwkuY2Zfc2xl
ZXAJCT0gZmE1MjZfY3B1X3NsZWVwLAorCisJLyogU29mdCBmdW5jdGlvbnMgKi8KKworCS5jZl9k
YXRhYWJ0X2ZpeHVwCT0gY3B1ZnVuY19udWxsX2ZpeHVwLAorCS5jZl9wcmVmZXRjaGFidF9maXh1
cAk9IGNwdWZ1bmNfbnVsbF9maXh1cCwKKworCS5jZl9jb250ZXh0X3N3aXRjaAk9IGZhNTI2X2Nv
bnRleHRfc3dpdGNoLAorCisJLmNmX3NldHVwCQk9IGZhNTI2X3NldHVwCit9OworI2VuZGlmCS8q
IENQVV9GQTUyNiAqLworCisKIC8qCiAgKiBHbG9iYWwgY29uc3RhbnRzIGFsc28gdXNlZCBieSBs
b2NvcmUucwogICovCkBAIC03OTMsNiArODYwLDcgQEAKICAgZGVmaW5lZCAoQ1BVX0FSTTlFKSB8
fCBkZWZpbmVkIChDUFVfQVJNMTApIHx8CQkJICAgICAgIFwKICAgZGVmaW5lZChDUFVfWFNDQUxF
XzgwMjAwKSB8fCBkZWZpbmVkKENQVV9YU0NBTEVfODAzMjEpIHx8CSAgICAgICBcCiAgIGRlZmlu
ZWQoQ1BVX1hTQ0FMRV9QWEEyWDApIHx8IGRlZmluZWQoQ1BVX1hTQ0FMRV9JWFA0MjUpIHx8CSAg
ICAgICBcCisgIGRlZmluZWQoQ1BVX0ZBNTI2KSB8fAkJCQkJICAgICAgIFwKICAgZGVmaW5lZChD
UFVfWFNDQUxFXzgwMjE5KSB8fCBkZWZpbmVkKENQVV9YU0NBTEVfODEzNDIpCiAKIHN0YXRpYyB2
b2lkIGdldF9jYWNoZXR5cGVfY3AxNSh2b2lkKTsKQEAgLTEwNzMsNiArMTE0MSwxOSBAQAogCQln
b3RvIG91dDsKIAl9CiAjZW5kaWYJLyogQ1BVX1NBMTExMCAqLworI2lmZGVmIENQVV9GQTUyNgor
CWlmIChjcHV0eXBlID09IENQVV9JRF9GQTUyNikgeworCQljcHVmdW5jcyA9IGZhNTI2X2NwdWZ1
bmNzOworCQljcHVfcmVzZXRfbmVlZHNfdjRfTU1VX2Rpc2FibGUgPSAxOwkvKiBTQSBuZWVkcyBp
dAkqLworCQlnZXRfY2FjaGV0eXBlX2NwMTUoKTsKKwkJcG1hcF9wdGVfaW5pdF9nZW5lcmljKCk7
CisKKwkJLyogVXNlIHBvd2Vyc2F2ZSBvbiB0aGlzIENQVS4gKi8KKwkJY3B1X2RvX3Bvd2Vyc2F2
ZSA9IDE7CisKKwkJZ290byBvdXQ7CisJfQorI2VuZGlmCS8qIENQVV9GQTUyNiAqLwogI2lmZGVm
IENQVV9JWFAxMlgwCiAgICAgICAgIGlmIChjcHV0eXBlID09IENQVV9JRF9JWFAxMjAwKSB7CiAg
ICAgICAgICAgICAgICAgY3B1ZnVuY3MgPSBpeHAxMngwX2NwdWZ1bmNzOwpAQCAtMTU0Nyw3ICsx
NjI4LDggQEAKICAgZGVmaW5lZChDUFVfWFNDQUxFXzgwMjAwKSB8fCBkZWZpbmVkKENQVV9YU0NB
TEVfODAzMjEpIHx8CQlcCiAgIGRlZmluZWQoQ1BVX1hTQ0FMRV9QWEEyWDApIHx8IGRlZmluZWQo
Q1BVX1hTQ0FMRV9JWFA0MjUpIHx8CQlcCiAgIGRlZmluZWQoQ1BVX1hTQ0FMRV84MDIxOSkgfHwg
ZGVmaW5lZChDUFVfWFNDQUxFXzgxMzQyKSB8fCBcCi0gIGRlZmluZWQoQ1BVX0FSTTEwKSB8fCAg
ZGVmaW5lZChDUFVfQVJNMTEpCisgIGRlZmluZWQoQ1BVX0FSTTEwKSB8fCAgZGVmaW5lZChDUFVf
QVJNMTEpIHx8IFwKKyAgZGVmaW5lZChDUFVfRkE1MjYpCiAKICNkZWZpbmUgSUdOCTAKICNkZWZp
bmUgT1IJMQpAQCAtMjAxMyw2ICsyMDk1LDYyIEBACiB9CiAjZW5kaWYJLyogQ1BVX1NBMTEwMCB8
fCBDUFVfU0ExMTEwICovCiAKKyNpZiBkZWZpbmVkKENQVV9GQTUyNikKK3N0cnVjdCBjcHVfb3B0
aW9uIGZhNTI2X29wdGlvbnNbXSA9IHsKKyNpZmRlZiBDT01QQVRfMTIKKwl7ICJub2NhY2hlIiwJ
CUlHTiwgQklDLCAoQ1BVX0NPTlRST0xfSUNfRU5BQkxFIHwKKwkJCQkJICAgQ1BVX0NPTlRST0xf
RENfRU5BQkxFKSB9LAorCXsgIm5vd3JpdGVidWYiLAkJSUdOLCBCSUMsIENQVV9DT05UUk9MX1dC
VUZfRU5BQkxFIH0sCisjZW5kaWYJLyogQ09NUEFUXzEyICovCisJeyAiY3B1LmNhY2hlIiwJCUJJ
QywgT1IsICAoQ1BVX0NPTlRST0xfSUNfRU5BQkxFIHwKKwkJCQkJICAgQ1BVX0NPTlRST0xfRENf
RU5BQkxFKSB9LAorCXsgImNwdS5ub2NhY2hlIiwJT1IsICBCSUMsIChDUFVfQ09OVFJPTF9JQ19F
TkFCTEUgfAorCQkJCQkgICBDUFVfQ09OVFJPTF9EQ19FTkFCTEUpIH0sCisJeyAiY3B1LndyaXRl
YnVmIiwJQklDLCBPUiwgIENQVV9DT05UUk9MX1dCVUZfRU5BQkxFIH0sCisJeyAiY3B1Lm5vd3Jp
dGVidWYiLAlPUiwgIEJJQywgQ1BVX0NPTlRST0xfV0JVRl9FTkFCTEUgfSwKKwl7IE5VTEwsCQkJ
SUdOLCBJR04sIDAgfQorfTsKKwordm9pZAorZmE1MjZfc2V0dXAoY2hhciAqYXJncykKK3sKKwlp
bnQgY3B1Y3RybCwgY3B1Y3RybG1hc2s7CisKKwljcHVjdHJsID0gQ1BVX0NPTlRST0xfTU1VX0VO
QUJMRSB8IENQVV9DT05UUk9MXzMyQlBfRU5BQkxFCisJCSB8IENQVV9DT05UUk9MXzMyQkRfRU5B
QkxFIHwgQ1BVX0NPTlRST0xfU1lTVF9FTkFCTEUKKwkJIHwgQ1BVX0NPTlRST0xfSUNfRU5BQkxF
IHwgQ1BVX0NPTlRST0xfRENfRU5BQkxFCisJCSB8IENQVV9DT05UUk9MX1dCVUZfRU5BQkxFIHwg
Q1BVX0NPTlRST0xfTEFCVF9FTkFCTEU7CisJY3B1Y3RybG1hc2sgPSBDUFVfQ09OVFJPTF9NTVVf
RU5BQkxFIHwgQ1BVX0NPTlRST0xfMzJCUF9FTkFCTEUKKwkJIHwgQ1BVX0NPTlRST0xfMzJCRF9F
TkFCTEUgfCBDUFVfQ09OVFJPTF9TWVNUX0VOQUJMRQorCQkgfCBDUFVfQ09OVFJPTF9JQ19FTkFC
TEUgfCBDUFVfQ09OVFJPTF9EQ19FTkFCTEUKKwkJIHwgQ1BVX0NPTlRST0xfV0JVRl9FTkFCTEUg
fCBDUFVfQ09OVFJPTF9ST01fRU5BQkxFCisJCSB8IENQVV9DT05UUk9MX0JFTkRfRU5BQkxFIHwg
Q1BVX0NPTlRST0xfQUZMVF9FTkFCTEUKKwkJIHwgQ1BVX0NPTlRST0xfTEFCVF9FTkFCTEUgfCBD
UFVfQ09OVFJPTF9CUFJEX0VOQUJMRQorCQkgfCBDUFVfQ09OVFJPTF9DUENMSyB8IENQVV9DT05U
Uk9MX1ZFQ1JFTE9DOworCisjaWZuZGVmIEFSTTMyX0RJU0FCTEVfQUxJR05NRU5UX0ZBVUxUUwor
CWNwdWN0cmwgfD0gQ1BVX0NPTlRST0xfQUZMVF9FTkFCTEU7CisjZW5kaWYKKworCWNwdWN0cmwg
PSBwYXJzZV9jcHVfb3B0aW9ucyhhcmdzLCBmYTUyNl9vcHRpb25zLCBjcHVjdHJsKTsKKworI2lm
ZGVmIF9fQVJNRUJfXworCWNwdWN0cmwgfD0gQ1BVX0NPTlRST0xfQkVORF9FTkFCTEU7CisjZW5k
aWYKKworCWlmICh2ZWN0b3JfcGFnZSA9PSBBUk1fVkVDVE9SU19ISUdIKQorCQljcHVjdHJsIHw9
IENQVV9DT05UUk9MX1ZFQ1JFTE9DOworCisJLyogQ2xlYXIgb3V0IHRoZSBjYWNoZSAqLworCWNw
dV9pZGNhY2hlX3diaW52X2FsbCgpOworCisJLyogU2V0IHRoZSBjb250cm9sIHJlZ2lzdGVyICov
CisJY3RybCA9IGNwdWN0cmw7CisJY3B1X2NvbnRyb2woMHhmZmZmZmZmZiwgY3B1Y3RybCk7Cit9
CisjZW5kaWYJLyogQ1BVX0ZBNTI2ICovCisKKwogI2lmIGRlZmluZWQoQ1BVX0lYUDEyWDApCiBz
dHJ1Y3QgY3B1X29wdGlvbiBpeHAxMngwX29wdGlvbnNbXSA9IHsKIAl7ICJjcHUuY2FjaGUiLAkJ
QklDLCBPUiwgIChDUFVfQ09OVFJPTF9JQ19FTkFCTEUgfCBDUFVfQ09OVFJPTF9EQ19FTkFCTEUp
IH0sCkluZGV4OiBhcm0vYXJtL2NwdWZ1bmNfYXNtX2ZhNTI2LlMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXJt
L2FybS9jcHVmdW5jX2FzbV9mYTUyNi5TCShyZXZpc2lvbiAwKQorKysgYXJtL2FybS9jcHVmdW5j
X2FzbV9mYTUyNi5TCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwOCBAQAorLyoJJE5ldEJTRDog
Y3B1ZnVuY19hc21fZmE1MjYuUyx2IDEuMyAyMDA4LzEwLzE1IDE2OjU2OjQ5IG1hdHQgRXhwICQq
LworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMu
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZy
b20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCisgKiBieSBN
YXR0IFRob21hcyA8bWF0dEAzYW0tc29mdHdhcmUuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJTkMuIEFORCBD
T05UUklCVVRPUlMKKyAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRB
VElPTiBPUiBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKworI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisKKyNkZWZpbmUJQ0FDSEVMSU5FX1NJWkUJ
MTYKKworRU5UUlkoZmE1MjZfc2V0dHRiKQorCW1vdglyMSwgIzAKKwltY3IJcDE1LCAwLCByMSwg
YzcsIGMxNCwgMAkvKiBjbGVhbiBhbmQgaW52YWxpZGF0ZSBEJCAqLworCW1jcglwMTUsIDAsIHIx
LCBjNywgYzUsIDAJLyogaW52YWxpZGF0ZSBJJCAqLworCW1jcglwMTUsIDAsIHIxLCBjNywgYzUs
IDYJLyogaW52YWxpZGF0ZSBCVEIgKi8KKwltY3IJcDE1LCAwLCByMSwgYzcsIGMxMCwgNAkvKiBk
cmFpbiB3cml0ZSBhbmQgZmlsbCBidWZmZXIgKi8KKworCW1jcglwMTUsIDAsIHIwLCBjMiwgYzAs
IDAJLyogV3JpdGUgdGhlIFRUQiAqLworCisJLyogSWYgd2UgaGF2ZSB1cGRhdGVkIHRoZSBUVEIg
d2UgbXVzdCBmbHVzaCB0aGUgVExCICovCisJbWNyCXAxNSwgMCwgcjEsIGM4LCBjNywgMAkvKiBp
bnZhbGlkYXRlIEkrRCBUTEIgKi8KKworCS8qIE1ha2Ugc3VyZSB0aGF0IHBpcGVsaW5lIGlzIGVt
cHRpZWQgKi8KKwltb3YJcjAsIHIwCisJbW92CXIwLCByMAorCW1vdglwYywgbHIKKworLyoKKyAq
IFRMQiBmdW5jdGlvbnMKKyAqLworRU5UUlkoZmE1MjZfdGxiX2ZsdXNoSURfU0UpCisJbWNyCXAx
NSwgMCwgcjAsIGM4LCBjNywgMQkvKiBmbHVzaCBVdGxiIHNpbmdsZSBlbnRyeSAqLworCW1vdglw
YywgbHIKKworLyoKKyAqIFRMQiBmdW5jdGlvbnMKKyAqLworRU5UUlkoZmE1MjZfdGxiX2ZsdXNo
SV9TRSkKKwltY3IJcDE1LCAwLCByMCwgYzgsIGM1LCAxCS8qIGZsdXNoIEl0bGIgc2luZ2xlIGVu
dHJ5ICovCisJbW92CXBjLCBscgorCitFTlRSWShmYTUyNl9jcHVfc2xlZXApCisJbW92CXIwLCAj
MAorLyoJbm9wCisJbm9wKi8KKwltY3IJcDE1LCAwLCByMCwgYzcsIGMwLCA0CS8qIFdhaXQgZm9y
IGludGVycnVwdCovCisJbW92CXBjLCBscgorCitFTlRSWShmYTUyNl9mbHVzaF9wcmVmZXRjaGJ1
ZikKKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgNAkvKiBQcmUtZmV0Y2gg
Zmx1c2ggKi8KKwltb3YJcGMsIGxyCisKKy8qCisgKiBDYWNoZSBmdW5jdGlvbnMKKyAqLworRU5U
UlkoZmE1MjZfaWRjYWNoZV93Ymludl9hbGwpCisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIw
LCBjNywgYzE0LCAwCS8qIGNsZWFuIGFuZCBpbnZhbGlkYXRlIEQkICovCisJbWNyCXAxNSwgMCwg
cjAsIGM3LCBjNSwgMAkvKiBpbnZhbGlkYXRlIEkkICovCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBj
MTAsIDQJLyogZHJhaW4gd3JpdGUgYnVmZmVyICovCisJbW92CXBjLCBscgorCitFTlRSWShmYTUy
Nl9pY2FjaGVfc3luY19hbGwpCisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzUs
IDAJLyogaW52YWxpZGF0ZSBJJCAqLworCW1vdglwYywgbHIKKworRU5UUlkoZmE1MjZfZGNhY2hl
X3diaW52X2FsbCkKKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDAJLyog
Y2xlYW4gYW5kIGludmFsaWRhdGUgRCQgKi8KKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkv
KiBkcmFpbiB3cml0ZSBidWZmZXIgKi8KKwltb3YJcGMsIGxyCisKKy8qCisgKiBTb2Z0IGZ1bmN0
aW9ucworICovCitFTlRSWShmYTUyNl9kY2FjaGVfd2JpbnZfcmFuZ2UpCisJY21wCXIxLCAjMHg0
MDAwCisJYmhzCV9DX0xBQkVMKGZhNTI2X2RjYWNoZV93Ymludl9hbGwpCisKKwlhbmQJcjIsIHIw
LCAjKENBQ0hFTElORV9TSVpFIC0gMSkKKwlhZGQJcjEsIHIxLCByMgorCWJpYwlyMCwgcjAsICMo
Q0FDSEVMSU5FX1NJWkUgLSAxKQorCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkvKiBj
bGVhbiBhbmQgaW52YWxpZGF0ZSBEJCBlbnRyeSAqLworCWFkZAlyMCwgcjAsICNDQUNIRUxJTkVf
U0laRQorCXN1YnMJcjEsIHIxLCAjQ0FDSEVMSU5FX1NJWkUKKwliaGkJMWIKKworCW1jcglwMTUs
IDAsIHIwLCBjNywgYzEwLCA0CS8qIGRyYWluIHdyaXRlIGJ1ZmZlciAqLworCW1vdglwYywgbHIK
KworRU5UUlkoZmE1MjZfZGNhY2hlX3diX3JhbmdlKQorCWNtcAlyMSwgIzB4NDAwMAorCWJscwkx
ZgorCisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAwCS8qIGNsZWFuIGVu
dGlyZSBEJCAqLworCWIJM2YKKworMToJYW5kCXIyLCByMCwgIyhDQUNIRUxJTkVfU0laRSAtIDEp
CisJYWRkCXIxLCByMSwgcjIKKwliaWMJcjAsIHIwLCAjKENBQ0hFTElORV9TSVpFIC0gMSkKKwor
MjoJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJLyogY2xlYW4gRCQgZW50cnkgKi8KKwlhZGQJ
cjAsIHIwLCAjQ0FDSEVMSU5FX1NJWkUKKwlzdWJzCXIxLCByMSwgI0NBQ0hFTElORV9TSVpFCisJ
YmhpCTJiCisKKzM6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CS8qIGRyYWluIHdyaXRlIGJ1
ZmZlciAqLworCW1vdglwYywgbHIKKworRU5UUlkoZmE1MjZfZGNhY2hlX2ludl9yYW5nZSkKKwlh
bmQJcjIsIHIwLCAjKENBQ0hFTElORV9TSVpFIC0gMSkKKwlhZGQJcjEsIHIxLCByMgorCWJpYwly
MCwgcjAsICMoQ0FDSEVMSU5FX1NJWkUgLSAxKQorCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGM2
LCAxCS8qIGludmFsaWRhdGUgRCQgc2luZ2xlIGVudHJ5ICovCisJYWRkCXIwLCByMCwgI0NBQ0hF
TElORV9TSVpFCisJc3VicwlyMSwgcjEsICNDQUNIRUxJTkVfU0laRQorCWJoaQkxYgorCisJbW92
CXBjLCBscgorCitFTlRSWShmYTUyNl9pZGNhY2hlX3diaW52X3JhbmdlKQorCWNtcAlyMSwgIzB4
NDAwMAorCWJocwlfQ19MQUJFTChmYTUyNl9pZGNhY2hlX3diaW52X2FsbCkKKworCWFuZAlyMiwg
cjAsICMoQ0FDSEVMSU5FX1NJWkUgLSAxKQorCWFkZAlyMSwgcjEsIHIyCisJYmljCXIwLCByMCwg
IyhDQUNIRUxJTkVfU0laRSAtIDEpCisKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCS8q
IGNsZWFuIGFuZCBpbnZhbGlkYXRlIEQkIGVudHJ5ICovCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBj
NSwgMQkvKiBpbnZhbGlkYXRlIEkkIGVudHJ5ICovCisJYWRkCXIwLCByMCwgI0NBQ0hFTElORV9T
SVpFCisJc3VicwlyMSwgcjEsICNDQUNIRUxJTkVfU0laRQorCWJoaQkxYgorCisyOgltY3IJcDE1
LCAwLCByMCwgYzcsIGMxMCwgNAkvKiBkcmFpbiB3cml0ZSBidWZmZXIgKi8KKwltb3YJcGMsIGxy
CisKK0VOVFJZKGZhNTI2X2ljYWNoZV9zeW5jX3JhbmdlKQorCWNtcAlyMSwgIzB4NDAwMAorCWJo
cwlfQ19MQUJFTChmYTUyNl9pY2FjaGVfc3luY19hbGwpCisKKwlhbmQJcjIsIHIwLCAjKENBQ0hF
TElORV9TSVpFIC0gMSkKKwlhZGQJcjEsIHIxLCByMgorCWJpYwlyMCwgcjAsICMoQ0FDSEVMSU5F
X1NJWkUgLSAxKQorCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkvKiBjbGVhbiBEJCBl
bnRyeSAqLworCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDEJLyogaW52YWxpZGF0ZSBJJCBlbnRy
eSAqLworCWFkZAlyMCwgcjAsICNDQUNIRUxJTkVfU0laRQorCXN1YnMJcjEsIHIxLCAjQ0FDSEVM
SU5FX1NJWkUKKwliaGkJMWIKKworMjoJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJLyogZHJh
aW4gd3JpdGUgYnVmZmVyICovCisJbW92CXBjLCBscgorCitFTlRSWShmYTUyNl9mbHVzaF9icm5j
aHRndF9FKQorCW1vdglyMCwgIzAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCA2CS8qIGludmFs
aWRhdGUgQlRCIGNhY2hlICovCisJbW92CXBjLCBscgorCitFTlRSWShmYTUyNl9jb250ZXh0X3N3
aXRjaCkKKwkvKgorCSAqIENGX0NBQ0hFX1BVUkdFX0lEIHdpbGwgKkFMV0FZUyogYmUgY2FsbGVk
IHByaW9yIHRvIHRoaXMuCisJICogVGh1cyB0aGUgZGF0YSBjYWNoZSB3aWxsIGNvbnRhaW4gb25s
eSBrZXJuZWwgZGF0YSBhbmQgdGhlCisJICogaW5zdHJ1Y3Rpb24gY2FjaGUgd2lsbCBjb250YWlu
IG9ubHkga2VybmVsIGNvZGUsIGFuZCBhbGwKKwkgKiBrZXJuZWwgbWFwcGluZ3MgYXJlIHNoYXJl
ZCBieSBhbGwgcHJvY2Vzc2VzLgorCSAqLworCisJbWNyCXAxNSwgMCwgcjAsIGMyLCBjMCwgMAkv
KiBXcml0ZSB0aGUgVFRCICovCisKKwkvKiBJZiB3ZSBoYXZlIHVwZGF0ZWQgdGhlIFRUQiB3ZSBt
dXN0IGZsdXNoIHRoZSBUTEIgKi8KKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM4LCBj
NywgMAkvKiBmbHVzaCB0aGUgSStEIHRsYiAqLworCisJLyogTWFrZSBzdXJlIHRoYXQgcGlwZWxp
bmUgaXMgZW1wdGllZCAqLworCW1vdglyMCwgcjAKKwltb3YJcjAsIHIwCisJbW92CXBjLCBscgor
CkluZGV4OiBhcm0vaW5jbHVkZS9jcHVjb25mLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXJtL2luY2x1ZGUv
Y3B1Y29uZi5oCShyZXZpc2lvbiAyMDEzNTgpCisrKyBhcm0vaW5jbHVkZS9jcHVjb25mLmgJKHdv
cmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcgQEAKIAkJCSBkZWZpbmVkKENQVV9YU0NBTEVfODAy
MDApICsJCQlcCiAJCQkgZGVmaW5lZChDUFVfWFNDQUxFXzgwMzIxKSArCQkJXAogCQkJIGRlZmlu
ZWQoQ1BVX1hTQ0FMRV9QWEEyWDApICsJCQlcCisJCQkgZGVmaW5lZChDUFVfRkE1MjYpICsJCQkJ
XAogCQkJIGRlZmluZWQoQ1BVX1hTQ0FMRV9JWFA0MjUpKQogCiAvKgpAQCAtNjgsNyArNjksNyBA
QAogICovCiAjaWYgKGRlZmluZWQoQ1BVX0FSTTdURE1JKSB8fCBkZWZpbmVkKENQVV9BUk04KSB8
fCBkZWZpbmVkKENQVV9BUk05KSB8fAlcCiAgICAgIGRlZmluZWQoQ1BVX1NBMTEwKSB8fCBkZWZp
bmVkKENQVV9TQTExMDApIHx8IGRlZmluZWQoQ1BVX1NBMTExMCkgfHwgXAotICAgIGRlZmluZWQo
Q1BVX0lYUDEyWDApIHx8IGRlZmluZWQoQ1BVX1hTQ0FMRV9JWFA0MjUpKQorICAgICBkZWZpbmVk
KENQVV9JWFAxMlgwKSB8fCBkZWZpbmVkKENQVV9YU0NBTEVfSVhQNDI1KSB8fCBkZWZpbmVkKENQ
VV9GQTUyNikpCiAjZGVmaW5lCUFSTV9BUkNIXzQJMQogI2Vsc2UKICNkZWZpbmUJQVJNX0FSQ0hf
NAkwCkBAIC0xMjUsNyArMTI2LDcgQEAKIAogI2lmIChkZWZpbmVkKENQVV9BUk02KSB8fCBkZWZp
bmVkKENQVV9BUk03KSB8fCBkZWZpbmVkKENQVV9BUk03VERNSSkgfHwJXAogICAgICBkZWZpbmVk
KENQVV9BUk04KSB8fCBkZWZpbmVkKENQVV9BUk05KSB8fCBkZWZpbmVkKENQVV9BUk05RSkgfHwJ
XAotICAgICBkZWZpbmVkKENQVV9BUk0xMCkgfHwgZGVmaW5lZChDUFVfQVJNMTEpKQorICAgICBk
ZWZpbmVkKENQVV9BUk0xMCkgfHwgZGVmaW5lZChDUFVfQVJNMTEpIHx8IGRlZmluZWQoQ1BVX0ZB
NTI2KSkKICNkZWZpbmUJQVJNX01NVV9HRU5FUklDCQkxCiAjZWxzZQogI2RlZmluZQlBUk1fTU1V
X0dFTkVSSUMJCTAKSW5kZXg6IGFybS9pbmNsdWRlL2NwdWZ1bmMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBh
cm0vaW5jbHVkZS9jcHVmdW5jLmgJKHJldmlzaW9uIDIwMTM1OCkKKysrIGFybS9pbmNsdWRlL2Nw
dWZ1bmMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgzLDYgKzI4MywyOCBAQAogdV9pbnQJYXJtOF9j
bG9ja19jb25maWcJKHVfaW50LCB1X2ludCk7CiAjZW5kaWYKIAorCisjaWZkZWYgQ1BVX0ZBNTI2
Cit2b2lkCWZhNTI2X3NldHVwCQkoY2hhciAqYXJnKTsKK3ZvaWQJZmE1MjZfc2V0dHRiCQkodV9p
bnQgdHRiKTsKK3ZvaWQJZmE1MjZfY29udGV4dF9zd2l0Y2gJKHZvaWQpOwordm9pZAlmYTUyNl9j
cHVfc2xlZXAJCShpbnQpOwordm9pZAlmYTUyNl90bGJfZmx1c2hJX1NFCSh1X2ludCk7Cit2b2lk
CWZhNTI2X3RsYl9mbHVzaElEX1NFCSh1X2ludCk7Cit2b2lkCWZhNTI2X2ZsdXNoX3ByZWZldGNo
YnVmCSh2b2lkKTsKK3ZvaWQJZmE1MjZfZmx1c2hfYnJuY2h0Z3RfRQkodV9pbnQpOworCit2b2lk
CWZhNTI2X2ljYWNoZV9zeW5jX2FsbAkodm9pZCk7Cit2b2lkCWZhNTI2X2ljYWNoZV9zeW5jX3Jh
bmdlKHZtX29mZnNldF90IHN0YXJ0LCB2bV9zaXplX3QgZW5kKTsKK3ZvaWQJZmE1MjZfZGNhY2hl
X3diaW52X2FsbAkodm9pZCk7Cit2b2lkCWZhNTI2X2RjYWNoZV93Ymludl9yYW5nZSh2bV9vZmZz
ZXRfdCBzdGFydCwgdm1fc2l6ZV90IGVuZCk7Cit2b2lkCWZhNTI2X2RjYWNoZV9pbnZfcmFuZ2UJ
KHZtX29mZnNldF90IHN0YXJ0LCB2bV9zaXplX3QgZW5kKTsKK3ZvaWQJZmE1MjZfZGNhY2hlX3di
X3JhbmdlCSh2bV9vZmZzZXRfdCBzdGFydCwgdm1fc2l6ZV90IGVuZCk7Cit2b2lkCWZhNTI2X2lk
Y2FjaGVfd2JpbnZfYWxsKHZvaWQpOwordm9pZAlmYTUyNl9pZGNhY2hlX3diaW52X3JhbmdlKHZt
X29mZnNldF90IHN0YXJ0LCB2bV9zaXplX3QgZW5kKTsKKyNlbmRpZgorCisKICNpZmRlZiBDUFVf
U0ExMTAKIHZvaWQJc2ExMTBfc2V0dXAJCShjaGFyICpzdHJpbmcpOwogdm9pZAlzYTExMF9jb250
ZXh0X3N3aXRjaAkodm9pZCk7CkBAIC00NDUsNiArNDY3LDcgQEAKICNpZiBkZWZpbmVkKENQVV9B
Uk05KSB8fCBkZWZpbmVkKENQVV9BUk05RSkgfHwgZGVmaW5lZChDUFVfQVJNMTApIHx8IFwKICAg
ZGVmaW5lZChDUFVfU0ExMTApIHx8IGRlZmluZWQoQ1BVX1NBMTEwMCkgfHwgZGVmaW5lZChDUFVf
U0ExMTEwKSB8fCBcCiAgIGRlZmluZWQoQ1BVX1hTQ0FMRV84MDIwMCkgfHwgZGVmaW5lZChDUFVf
WFNDQUxFXzgwMzIxKSB8fAkgICAgIFwKKyAgICBkZWZpbmVkKENQVV9GQTUyNikgfHwgXAogICBk
ZWZpbmVkKENQVV9YU0NBTEVfUFhBMlgwKSB8fCBkZWZpbmVkKENQVV9YU0NBTEVfSVhQNDI1KSB8
fAkgICAgIFwKICAgZGVmaW5lZChDUFVfWFNDQUxFXzgwMjE5KSB8fCBkZWZpbmVkKENQVV9YU0NB
TEVfODEzNDIpCiAgIApJbmRleDogYXJtL2NvbmYvQ05TMTFYWE5BUy5oaW50cwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBhcm0vY29uZi9DTlMxMVhYTkFTLmhpbnRzCShyZXZpc2lvbiAwKQorKysgYXJtL2NvbmYv
Q05TMTFYWE5BUy5oaW50cwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorI2N1cnJlbnRseSBu
byBoaW50cwpJbmRleDogYXJtL2NvbmYvQ05TMTFYWE5BUwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBhcm0vY29u
Zi9DTlMxMVhYTkFTCShyZXZpc2lvbiAwKQorKysgYXJtL2NvbmYvQ05TMTFYWE5BUwkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMjYgQEAKKyMgQ05TMTFYWE5BUyAtICBTdGFyU2VtaSBTVFI5MTA0
L0Nhdml1bSBDTlMxMTAyIE5BUworIyBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciBGcmVl
QlNEL2FybQorIworIyBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIGZpbGUsIHBsZWFzZSBy
ZWFkIHRoZSBoYW5kYm9vayBzZWN0aW9uIG9uCisjIEtlcm5lbCBDb25maWd1cmF0aW9uIEZpbGVz
OgorIworIyAgICBodHRwOi8vd3d3LkZyZWVCU0Qub3JnL2RvYy9lbl9VUy5JU084ODU5LTEvYm9v
a3MvaGFuZGJvb2sva2VybmVsY29uZmlnLWNvbmZpZy5odG1sCisjCisjIFRoZSBoYW5kYm9vayBp
cyBhbHNvIGF2YWlsYWJsZSBsb2NhbGx5IGluIC91c3Ivc2hhcmUvZG9jL2hhbmRib29rCisjIGlm
IHlvdSd2ZSBpbnN0YWxsZWQgdGhlIGRvYyBkaXN0cmlidXRpb24sIG90aGVyd2lzZSBhbHdheXMg
c2VlIHRoZQorIyBGcmVlQlNEIFdvcmxkIFdpZGUgV2ViIHNlcnZlciAoaHR0cDovL3d3dy5GcmVl
QlNELm9yZy8pIGZvciB0aGUKKyMgbGF0ZXN0IGluZm9ybWF0aW9uLgorIworIyBBbiBleGhhdXN0
aXZlIGxpc3Qgb2Ygb3B0aW9ucyBhbmQgbW9yZSBkZXRhaWxlZCBleHBsYW5hdGlvbnMgb2YgdGhl
CisjIGRldmljZSBsaW5lcyBpcyBhbHNvIHByZXNlbnQgaW4gdGhlIC4uLy4uL2NvbmYvTk9URVMg
YW5kIE5PVEVTIGZpbGVzLiAKKyMgSWYgeW91IGFyZSBpbiBkb3VidCBhcyB0byB0aGUgcHVycG9z
ZSBvciBuZWNlc3NpdHkgb2YgYSBsaW5lLCBjaGVjayBmaXJzdCAKKyMgaW4gTk9URVMuCisjCisj
ICRGcmVlQlNEJAorCitpZGVudAkJQ05TMTFYWE5BUworCisjb3B0aW9ucyAJUEhZU0FERFI9MHgx
MDAwMDAwMAorI29wdGlvbnMgCUtFUk5QSFlTQUREUj0weDEwMjAwMDAwCisjb3B0aW9ucyAJS0VS
TlZJUlRBRERSPTB4YzAyMDAwMDAJCSMgVXNlZCBpbiBsZHNjcmlwdC5hcm0KKyNvcHRpb25zIAlG
TEFTSEFERFI9MHg1MDAwMDAwMAorI29wdGlvbnMgCUxPQURFUlJBTUFERFI9MHgwMDAwMDAwMAor
I29wdGlvbnMgCVNUQVJUVVBfUEFHRVRBQkxFX0FERFI9MHgxMDAwMDAwMAorCitpbmNsdWRlCQki
Li4vZWNvbmEvc3RkLmVjb25hIgorCisjVG8gc3RhdGljYWxseSBjb21waWxlIGluIGRldmljZSB3
aXJpbmcgaW5zdGVhZCBvZiAvYm9vdC9kZXZpY2UuaGludHMKK2hpbnRzCQkiQ05TMTFYWE5BUy5o
aW50cyIJI0RlZmF1bHQgcGxhY2VzIHRvIGxvb2sgZm9yIGRldmljZXMuCittYWtlb3B0aW9ucwlN
T0RVTEVTX09WRVJSSURFPSIiCisKK21ha2VvcHRpb25zCURFQlVHPS1nCQkjQnVpbGQga2VybmVs
IHdpdGggZ2RiKDEpIGRlYnVnIHN5bWJvbHMKK29wdGlvbnMgCUhaPTEwMAorb3B0aW9ucyAJREVW
SUNFX1BPTExJTkcKKworIyBEZWJ1Z2dpbmcgZm9yIHVzZSBpbiAtY3VycmVudAorb3B0aW9ucyAJ
S0RCCisjb3B0aW9ucyAJR0RCCitvcHRpb25zIAlEREIJCQkjRW5hYmxlIHRoZSBrZXJuZWwgZGVi
dWdnZXIKKyNvcHRpb25zIAlJTlZBUklBTlRTCQkjRW5hYmxlIGNhbGxzIG9mIGV4dHJhIHNhbml0
eSBjaGVja2luZworI29wdGlvbnMgCUlOVkFSSUFOVF9TVVBQT1JUCSNFeHRyYSBzYW5pdHkgY2hl
Y2tzIG9mIGludGVybmFsIHN0cnVjdHVyZXMsIHJlcXVpcmVkIGJ5IElOVkFSSUFOVFMKKyNvcHRp
b25zIAlXSVRORVNTCQkjRW5hYmxlIGNoZWNrcyB0byBkZXRlY3QgZGVhZGxvY2tzIGFuZCBjeWNs
ZXMKKyMjb3B0aW9ucyAJV0lUTkVTU19TS0lQU1BJTgkjRG9uJ3QgcnVuIHdpdG5lc3Mgb24gc3Bp
bmxvY2tzIGZvciBzcGVlZAorI29wdGlvbnMgCURJQUdOT1NUSUMKKworCisjb3B0aW9ucwkJQ09N
UEFUX0ZSRUVCU0Q1Cisjb3B0aW9ucwkJQ09NUEFUX0ZSRUVCU0Q2Cisjb3B0aW9ucwkJQ09NUEFU
X0ZSRUVCU0Q3CisKKworb3B0aW9ucyAJU0NIRURfVUxFCQkjVUxFIHNjaGVkdWxlcgorI29wdGlv
bnMgCVNDSEVEXzRCU0QJCSM0QlNEIHNjaGVkdWxlcgorb3B0aW9ucyAJR0VPTV9QQVJUX0dQVAkJ
IyBHVUlEIFBhcnRpdGlvbiBUYWJsZXMuCisjb3B0aW9ucyAJR0VPTV9QQVJUX0VCUgorI29wdGlv
bnMgCUdFT01fUEFSVF9FQlJfQ09NUEFUCitvcHRpb25zIAlHRU9NX0xBQkVMCQkjIFByb3ZpZGVz
IGxhYmVsaXphdGlvbgorCisKK29wdGlvbnMgCUlORVQJCQkjSW50ZXJORVR3b3JraW5nCitvcHRp
b25zIAlJTkVUNgkJCSNJUHY2IGNvbW11bmljYXRpb25zIHByb3RvY29scworb3B0aW9ucyAJRkZT
CQkJI0JlcmtlbGV5IEZhc3QgRmlsZXN5c3RlbQorb3B0aW9ucyAJU09GVFVQREFURVMJCSNFbmFi
bGUgRkZTIHNvZnQgdXBkYXRlcyBzdXBwb3J0CitvcHRpb25zIAlVRlNfQUNMCQkJI1N1cHBvcnQg
Zm9yIGFjY2VzcyBjb250cm9sIGxpc3RzCitvcHRpb25zIAlVRlNfRElSSEFTSAkJI0ltcHJvdmUg
cGVyZm9ybWFuY2Ugb24gYmlnIGRpcmVjdG9yaWVzCitvcHRpb25zIAlORlNDTElFTlQJCSNOZXR3
b3JrIEZpbGVzeXN0ZW0gQ2xpZW50Cisjb3B0aW9ucyAJTkZTU0VSVkVSCQkjTmV0d29yayBGaWxl
c3lzdGVtIFNlcnZlcgorI29wdGlvbnMgCU5GU0xPQ0tECQkjTmV0d29yayBMb2NrIE1hbmFnZXIK
K29wdGlvbnMgCU5GU19ST09UCQkjTkZTIHVzYWJsZSBhcyAvLCByZXF1aXJlcyBORlNDTElFTlQK
K29wdGlvbnMgCU1TRE9TRlMJCQkjTVNET1MgRmlsZXN5c3RlbQorI29wdGlvbnMgCUNEOTY2MAkJ
CSNJU08gOTY2MCBGaWxlc3lzdGVtCisjb3B0aW9ucyAJUFJPQ0ZTCQkJI1Byb2Nlc3MgZmlsZXN5
c3RlbSAocmVxdWlyZXMgUFNFVURPRlMpCitvcHRpb25zIAlQU0VVRE9GUwkJI1BzZXVkby1maWxl
c3lzdGVtIGZyYW1ld29yaworb3B0aW9ucyAJU0NTSV9ERUxBWT01MDAwCQkjRGVsYXkgKGluIG1z
KSBiZWZvcmUgcHJvYmluZyBTQ1NJCitvcHRpb25zIAlLVFJBQ0UJCQkja3RyYWNlKDEpIHN1cHBv
cnQKK29wdGlvbnMgCVNZU1ZTSE0JCQkjU1lTVi1zdHlsZSBzaGFyZWQgbWVtb3J5CitvcHRpb25z
IAlTWVNWTVNHCQkJI1NZU1Ytc3R5bGUgbWVzc2FnZSBxdWV1ZXMKK29wdGlvbnMgCVNZU1ZTRU0J
CQkjU1lTVi1zdHlsZSBzZW1hcGhvcmVzCitvcHRpb25zIAlfS1BPU0lYX1BSSU9SSVRZX1NDSEVE
VUxJTkcgI1Bvc2l4IFAxMDAzXzFCIHJlYWwtdGltZSBleHRlbnNpb25zCitvcHRpb25zIAlNVVRF
WF9OT0lOTElORQkJI011dGV4IGlubGluZXMgYXJlIHNwYWNlIGhvZ3MKK29wdGlvbnMgCVJXTE9D
S19OT0lOTElORQkJI3J3bG9jayBpbmxpbmVzIGFyZSBzcGFjZSBob2dzCitvcHRpb25zIAlTWF9O
T0lOTElORQkJI3N4IGlubGllbnMgYXJlIHNwYWNlIGhvZ3MKKyNvcHRpb25zIAlCT09UUAorI29w
dGlvbnMgCUJPT1RQX05GU1JPT1QKKyNvcHRpb25zIAlCT09UUF9ORlNWMworI29wdGlvbnMgCUJP
T1RQX1dJUkVEX1RPPW5wZTAKKyNvcHRpb25zIAlCT09UUF9DT01QQVQKKworI2RldmljZQkJcGNp
CitkZXZpY2UJCXVhcnQKKworCitkZXZpY2UJCWZpcm13YXJlCitkZXZpY2UJCW1paQkJIyBNaW5p
bWFsIG1paSByb3V0aW5lcworZGV2aWNlCQlldGhlcgorZGV2aWNlCQlicGYKKworZGV2aWNlCQlw
dHkKK2RldmljZQkJbG9vcAorCitkZXZpY2UJCW1kCitkZXZpY2UgICAgICAgICAgcmFuZG9tICAg
ICAgICAgICMgRW50cm9weSBkZXZpY2UKKworI29wdGlvbnMgCUFSTV9VU0VfU01BTExfQUxMT0MK
KworZGV2aWNlCQl1c2IKKyNvcHRpb25zIAlVU0JfREVCVUcKK2RldmljZQkJb2hjaQorZGV2aWNl
CQllaGNpCitkZXZpY2UJCXVtYXNzCitkZXZpY2UJCXNjYnVzCQkjIFNDU0kgYnVzIChyZXF1aXJl
ZCBmb3IgU0NTSSkKK2RldmljZQkJZGEJCSMgRGlyZWN0IEFjY2VzcyAoZGlza3MpCitkZXZpY2UJ
CXBhc3MKK2RldmljZSAJCWNmaQorCisjZGV2aWNlCQl1ZGF2CQkjIERhdmljb20gRE05NjAxRSBV
U0IKKworZGV2aWNlCQlnZW9tX2xhYmVsCitkZXZpY2UJCWdlb21fam91cm5hbAorZGV2aWNlIAkJ
Z2VvbV9wYXJ0X2JzZAorCitvcHRpb25zCQlST09UREVWTkFNRT1cInVmczpkYTBzMWFcIgpJbmRl
eDogYXJtL2Vjb25hL2Vjb25hX3Zhci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGFybS9lY29uYS9lY29uYV92
YXIuaAkocmV2aXNpb24gMCkKKysrIGFybS9lY29uYS9lY29uYV92YXIuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw1MCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgWW9oYW5lcyBOdWdy
b2hvIDx5b2hhbmVzQGdtYWlsLmNvbT4uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVVUSE9SIEFORCBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBVVRIT1IgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
CisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmCV9B
Uk1fRUNPTkFfVkFSX0gKKyNkZWZpbmUJX0FSTV9FQ09OQV9WQVJfSAorCitleHRlcm4gYnVzX3Nw
YWNlX3RhZ190IG9iaW9fdGFnOworCitzdHJ1Y3QgZWNvbmFfc29mdGMgeworCWRldmljZV90IGRl
djsKKwlidXNfc3BhY2VfdGFnX3QgZWNfc3Q7CisJYnVzX3NwYWNlX2hhbmRsZV90IGVjX3NoOwor
CWJ1c19zcGFjZV9oYW5kbGVfdCBlY19zeXNfc2g7CisJYnVzX3NwYWNlX2hhbmRsZV90IGVjX3N5
c3RlbV9zaDsKKwlzdHJ1Y3Qgcm1hbiBlY19pcnFfcm1hbjsKKwlzdHJ1Y3Qgcm1hbiBlY19tZW1f
cm1hbjsKK307CisKK3N0cnVjdCBlY29uYV9pdmFyIHsKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdCBy
ZXNvdXJjZXM7Cit9OworCit2b2lkCXBvd2VyX29uX25ldHdvcmtfaW50ZXJmYWNlCSh2b2lkKTsK
K3Vuc2lnbmVkIGludAlnZXRfdGNsawkodm9pZCk7CisKKworI2VuZGlmCkluZGV4OiBhcm0vZWNv
bmEvZmlsZXMuZWNvbmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXJtL2Vjb25hL2ZpbGVzLmVjb25hCShyZXZp
c2lvbiAwKQorKysgYXJtL2Vjb25hL2ZpbGVzLmVjb25hCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE0IEBACisjICRGcmVlQlNEICQKK2FybS9hcm0vY3B1ZnVuY19hc21fZmE1MjYuUwlzdGFuZGFy
ZAorYXJtL2Vjb25hL2Vjb25hX21hY2hkZXAuYwkJc3RhbmRhcmQKK2FybS9lY29uYS9lY29uYS5j
CQkJc3RhbmRhcmQKK2FybS9lY29uYS90aW1lci5jCQkJc3RhbmRhcmQKK2FybS9lY29uYS91YXJ0
X2J1c19lYy5jCQlvcHRpb25hbAl1YXJ0Cithcm0vZWNvbmEvdWFydF9jcHVfZWMuYwkJb3B0aW9u
YWwJdWFydAorZGV2L3VhcnQvdWFydF9kZXZfbnM4MjUwLmMJb3B0aW9uYWwJdWFydAorYXJtL2Fy
bS9pcnFfZGlzcGF0Y2guUwkJc3RhbmRhcmQKK2FybS9hcm0vYnVzX3NwYWNlX2dlbmVyaWMuYwkJ
c3RhbmRhcmQKK2FybS9lY29uYS9laGNpX2VidXMuYwlzdGFuZGFyZAllaGNpCithcm0vZWNvbmEv
b2hjaV9lYy5jCXN0YW5kYXJkCW9oY2kKK2FybS9lY29uYS9pZl9lY2UuYwkJc3RhbmRhcmQKK2Fy
bS9lY29uYS9jZmlfYnVzX2Vjb25hLmMJCW9wdGlvbmFsCWNmaQpJbmRleDogYXJtL2Vjb25hL2Vj
b25hX21hY2hkZXAuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBhcm0vZWNvbmEvZWNvbmFfbWFjaGRlcC5jCShy
ZXZpc2lvbiAwKQorKysgYXJtL2Vjb25hL2Vjb25hX21hY2hkZXAuYwkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwzOTYgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA5IFlvaGFuZXMgTnVncm9o
byA8eW9oYW5lc0BnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKGMpIDE5OTQtMTk5OCBNYXJrIEJy
aW5pY29tYmUuCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQgQnJpbmkuCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgd3JpdHRl
biBmb3IgQnJpbmkgYnkgTWFyayBCcmluaWNvbWJlCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0
aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdh
cmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAq
ICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBCcmluaS4K
KyAqIDQuIFRoZSBuYW1lIG9mIHRoZSBjb21wYW55IG5vciB0aGUgbmFtZSBvZiB0aGUgYXV0aG9y
IG1heSBiZSB1c2VkIHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYworICogICAgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQlJJTkkg
YGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICog
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIEJSSU5JIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICog
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICog
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpbmNsdWRlICJvcHRf
bXNnYnVmLmgiCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQi
KTsKKworI2RlZmluZQlfQVJNMzJfQlVTX0RNQV9QUklWQVRFCisjaW5jbHVkZSA8c3lzL3BhcmFt
Lmg+CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL3N5c3Byb3RvLmg+Cisj
aW5jbHVkZSA8c3lzL3NpZ25hbHZhci5oPgorI2luY2x1ZGUgPHN5cy9pbWdhY3QuaD4KKyNpbmNs
dWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8c3lzL2t0ci5oPgorI2luY2x1ZGUgPHN5cy9s
aW5rZXIuaD4KKyNpbmNsdWRlIDxzeXMvbG9jay5oPgorI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4K
KyNpbmNsdWRlIDxzeXMvbXV0ZXguaD4KKyNpbmNsdWRlIDxzeXMvcGNwdS5oPgorI2luY2x1ZGUg
PHN5cy9wcm9jLmg+CisjaW5jbHVkZSA8c3lzL3B0cmFjZS5oPgorI2luY2x1ZGUgPHN5cy9jb25z
Lmg+CisjaW5jbHVkZSA8c3lzL2Jpby5oPgorI2luY2x1ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRl
IDxzeXMvYnVmLmg+CisjaW5jbHVkZSA8c3lzL2V4ZWMuaD4KKyNpbmNsdWRlIDxzeXMva2RiLmg+
CisjaW5jbHVkZSA8c3lzL21zZ2J1Zi5oPgorI2luY2x1ZGUgPG1hY2hpbmUvcmVnLmg+CisjaW5j
bHVkZSA8bWFjaGluZS9jcHUuaD4KKworI2luY2x1ZGUgPHZtL3ZtLmg+CisjaW5jbHVkZSA8dm0v
cG1hcC5oPgorI2luY2x1ZGUgPHZtL3ZtX29iamVjdC5oPgorI2luY2x1ZGUgPHZtL3ZtX3BhZ2Uu
aD4KKyNpbmNsdWRlIDx2bS92bV9wYWdlci5oPgorI2luY2x1ZGUgPHZtL3ZtX21hcC5oPgorI2lu
Y2x1ZGUgPHZtL3Zub2RlX3BhZ2VyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9wbWFwLmg+CisjaW5j
bHVkZSA8bWFjaGluZS92bXBhcmFtLmg+CisjaW5jbHVkZSA8bWFjaGluZS9wY2IuaD4KKyNpbmNs
dWRlIDxtYWNoaW5lL3VuZGVmaW5lZC5oPgorI2luY2x1ZGUgPG1hY2hpbmUvbWFjaGRlcC5oPgor
I2luY2x1ZGUgPG1hY2hpbmUvbWV0YWRhdGEuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FybXJlZy5o
PgorI2luY2x1ZGUgPG1hY2hpbmUvYnVzLmg+CisjaW5jbHVkZSA8c3lzL3JlYm9vdC5oPgorI2lu
Y2x1ZGUgImVjb25hX3JlZy5oIgorCisvKiBQYWdlIHRhYmxlIGZvciBtYXBwaW5nIHByb2MwIHpl
cm8gcGFnZSAqLworI2RlZmluZQlLRVJORUxfUFRfU1lTCQkwCisjZGVmaW5lCUtFUk5FTF9QVF9L
RVJOCQkxCisjZGVmaW5lCUtFUk5FTF9QVF9LRVJOX05VTQkyMgorLyogTDIgdGFibGUgZm9yIG1h
cHBpbmcgYWZ0ZXIga2VybmVsICovCisjZGVmaW5lCUtFUk5FTF9QVF9BRktFUk5FTAlLRVJORUxf
UFRfS0VSTiArIEtFUk5FTF9QVF9LRVJOX05VTQorI2RlZmluZQlLRVJORUxfUFRfQUZLRVJORUxf
TlVNCTUKKworLyogdGhpcyBzaG91bGQgYmUgZXZlbmx5IGRpdmlzYWJsZSBieSBQQUdFX1NJWkUg
LyBMMl9UQUJMRV9TSVpFX1JFQUwgKG9yIDQpICovCisjZGVmaW5lCU5VTV9LRVJORUxfUFRTCShL
RVJORUxfUFRfQUZLRVJORUwgKyBLRVJORUxfUFRfQUZLRVJORUxfTlVNKQorCisvKiBEZWZpbmUg
dmFyaW91cyBzdGFjayBzaXplcyBpbiBwYWdlcyAqLworI2RlZmluZQlJUlFfU1RBQ0tfU0laRQkx
CisjZGVmaW5lCUFCVF9TVEFDS19TSVpFCTEKKyNkZWZpbmUJVU5EX1NUQUNLX1NJWkUJMQorCitl
eHRlcm4gdV9pbnQgZGF0YV9hYm9ydF9oYW5kbGVyX2FkZHJlc3M7CitleHRlcm4gdV9pbnQgcHJl
ZmV0Y2hfYWJvcnRfaGFuZGxlcl9hZGRyZXNzOworZXh0ZXJuIHVfaW50IHVuZGVmaW5lZF9oYW5k
bGVyX2FkZHJlc3M7CisKK3N0cnVjdCBwdl9hZGRyIGtlcm5lbF9wdF90YWJsZVtOVU1fS0VSTkVM
X1BUU107CisKK2V4dGVybiB2b2lkICpfZW5kOworCitleHRlcm4gaW50ICplbmQ7CisKK3N0cnVj
dCBwY3B1IF9fcGNwdTsKK3N0cnVjdCBwY3B1ICpwY3B1cCA9ICZfX3BjcHU7CisKKy8qIFBoeXNp
Y2FsIGFuZCB2aXJ0dWFsIGFkZHJlc3NlcyBmb3Igc29tZSBnbG9iYWwgcGFnZXMgKi8KKwordm1f
cGFkZHJfdCBwaHlzX2F2YWlsWzEwXTsKK3ZtX3BhZGRyX3QgZHVtcF9hdmFpbFs0XTsKK3ZtX29m
ZnNldF90IHBoeXNpY2FsX3BhZ2VzOworCitzdHJ1Y3QgcHZfYWRkciBzeXN0ZW1wYWdlOworc3Ry
dWN0IHB2X2FkZHIgbXNnYnVmcHY7CitzdHJ1Y3QgcHZfYWRkciBpcnFzdGFjazsKK3N0cnVjdCBw
dl9hZGRyIHVuZHN0YWNrOworc3RydWN0IHB2X2FkZHIgYWJ0c3RhY2s7CitzdHJ1Y3QgcHZfYWRk
ciBrZXJuZWxzdGFjazsKKworc3RhdGljIHZvaWQgKmJvb3RfYXJnMTsKK3N0YXRpYyB2b2lkICpi
b290X2FyZzI7CisKK3N0YXRpYyBzdHJ1Y3QgdHJhcGZyYW1lIHByb2MwX3RmOworCisvKiBTdGF0
aWMgZGV2aWNlIG1hcHBpbmdzLiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBwbWFwX2Rldm1hcCBl
Y29uYV9kZXZtYXBbXSA9IHsKKwl7CisJCS8qCisJCSAqIFRoaXMgbWFwcyBERFIgU0RSQU0KKwkJ
ICovCisJCUVDT05BX1NEUkFNX0JBU0UsIC8qdmlydHVhbCovCisJCUVDT05BX1NEUkFNX0JBU0Us
IC8qcGh5c2ljYWwqLworCQlFQ09OQV9TRFJBTV9TSVpFLCAvKnNpemUqLworCQlWTV9QUk9UX1JF
QUR8Vk1fUFJPVF9XUklURSwKKwkJUFRFX05PQ0FDSEUsCisJfSwKKwkvKgorCSAqIE1hcCB0aGUg
b24tYm9hcmQgZGV2aWNlcyBWQSA9PSBQQSBzbyB0aGF0IHdlIGNhbiBhY2Nlc3MgdGhlbQorCSAq
IHdpdGggdGhlIE1NVSBvbiBvciBvZmYuCisJICovCisJeworCQkvKgorCQkgKiBUaGlzIG1hcHMg
dGhlIGludGVycnVwdCBjb250cm9sbGVyLCB0aGUgVUFSVAorCQkgKiBhbmQgdGhlIHRpbWVyLgor
CQkgKi8KKwkJRUNPTkFfSU9fQkFTRSwgLyp2aXJ0dWFsKi8KKwkJRUNPTkFfSU9fQkFTRSwgLypw
aHlzaWNhbCovCisJCUVDT05BX0lPX1NJWkUsIC8qc2l6ZSovCisJCVZNX1BST1RfUkVBRHxWTV9Q
Uk9UX1dSSVRFLAorCQlQVEVfTk9DQUNIRSwKKwl9LAorCXsKKwkJLyoKKwkJICogT0hDSSArIEVI
Q0kKKwkJICovCisJCUVDT05BX09IQ0lfVkJBU0UsIC8qdmlydHVhbCovCisJCUVDT05BX09IQ0lf
UEJBU0UsIC8qcGh5c2ljYWwqLworCQlFQ09OQV9VU0JfU0laRSwgLypzaXplKi8KKwkJVk1fUFJP
VF9SRUFEfFZNX1BST1RfV1JJVEUsCisJCVBURV9OT0NBQ0hFLAorCX0sCisJeworCQkvKgorCQkg
KiBDRkkKKwkJICovCisJCUVDT05BX0NGSV9WQkFTRSwgLyp2aXJ0dWFsKi8KKwkJRUNPTkFfQ0ZJ
X1BCQVNFLCAvKnBoeXNpY2FsKi8KKwkJRUNPTkFfQ0ZJX1NJWkUsCisJCVZNX1BST1RfUkVBRHxW
TV9QUk9UX1dSSVRFLAorCQlQVEVfTk9DQUNIRSwKKwl9LAorCXsKKwkJMCwKKwkJMCwKKwkJMCwK
KwkJMCwKKwkJMCwKKwl9Cit9OworCisKK3ZvaWQgKgoraW5pdGFybSh2b2lkICphcmcsIHZvaWQg
KmFyZzIpCit7CisJc3RydWN0IHB2X2FkZHIgIGtlcm5lbF9sMXB0OworCXZvbGF0aWxlIHVpbnQz
Ml90ICogZGRyID0gKHVpbnQzMl90ICopMHg0MDAwMDAwQzsKKwlpbnQgbG9vcCwgaTsKKwl1X2lu
dCBsMXBhZ2V0YWJsZTsKKwl2bV9vZmZzZXRfdCBhZnRlcmtlcm47CisJdm1fb2Zmc2V0X3QgZnJl
ZW1lbXBvczsKKwl2bV9vZmZzZXRfdCBsYXN0YWRkcjsKKwl1aW50MzJfdCBtZW1zaXplOworCWlu
dCBtZW1faW5mbzsKKworCisJYm9vdF9hcmcxID0gYXJnOworCWJvb3RfYXJnMiA9IGFyZzI7CisJ
Ym9vdGhvd3RvID0gUkJfVkVSQk9TRTsKKworCXNldF9jcHVmdW5jcygpOworCWxhc3RhZGRyID0g
ZmFrZV9wcmVsb2FkX21ldGFkYXRhKCk7CisJcGNwdV9pbml0KHBjcHVwLCAwLCBzaXplb2Yoc3Ry
dWN0IHBjcHUpKTsKKwlQQ1BVX1NFVChjdXJ0aHJlYWQsICZ0aHJlYWQwKTsKKworCisJZnJlZW1l
bXBvcyA9IChsYXN0YWRkciArIFBBR0VfTUFTSykgJiB+UEFHRV9NQVNLOworCS8qIERlZmluZSBh
IG1hY3JvIHRvIHNpbXBsaWZ5IG1lbW9yeSBhbGxvY2F0aW9uICovCisjZGVmaW5lCXZhbGxvY19w
YWdlcyh2YXIsIG5wKSAgICAgICAgICAgICAgICAgICBcCisJYWxsb2NfcGFnZXMoKHZhcikucHZf
dmEsIChucCkpOyAgICAgICAgIFwKKwkodmFyKS5wdl9wYSA9ICh2YXIpLnB2X3ZhICsgKEtFUk5Q
SFlTQUREUiAtIEtFUk5WSVJUQUREUik7CisKKyNkZWZpbmUJYWxsb2NfcGFnZXModmFyLCBucCkJ
CQlcCisJKHZhcikgPSBmcmVlbWVtcG9zOwkJXAorCWZyZWVtZW1wb3MgKz0gKG5wICogUEFHRV9T
SVpFKTsJCVwKKwltZW1zZXQoKGNoYXIgKikodmFyKSwgMCwgKChucCkgKiBQQUdFX1NJWkUpKTsK
KworCXdoaWxlICgoKGZyZWVtZW1wb3MgLSBMMV9UQUJMRV9TSVpFKSAmIChMMV9UQUJMRV9TSVpF
IC0gMSkpICE9IDApCisJCWZyZWVtZW1wb3MgKz0gUEFHRV9TSVpFOworCXZhbGxvY19wYWdlcyhr
ZXJuZWxfbDFwdCwgTDFfVEFCTEVfU0laRSAvIFBBR0VfU0laRSk7CisJZm9yIChsb29wID0gMDsg
bG9vcCA8IE5VTV9LRVJORUxfUFRTOyArK2xvb3ApIHsKKwkJaWYgKCEobG9vcCAlIChQQUdFX1NJ
WkUgLyBMMl9UQUJMRV9TSVpFX1JFQUwpKSkgeworCQkJdmFsbG9jX3BhZ2VzKGtlcm5lbF9wdF90
YWJsZVtsb29wXSwKKwkJCSAgICBMMl9UQUJMRV9TSVpFIC8gUEFHRV9TSVpFKTsKKwkJfSBlbHNl
IHsKKwkJCWtlcm5lbF9wdF90YWJsZVtsb29wXS5wdl92YSA9IGZyZWVtZW1wb3MgLQorCQkJICAg
IChsb29wICUgKFBBR0VfU0laRSAvIEwyX1RBQkxFX1NJWkVfUkVBTCkpICoKKwkJCSAgICBMMl9U
QUJMRV9TSVpFX1JFQUw7CisJCQlrZXJuZWxfcHRfdGFibGVbbG9vcF0ucHZfcGEgPQorCQkJICAg
IGtlcm5lbF9wdF90YWJsZVtsb29wXS5wdl92YSAtIEtFUk5WSVJUQUREUiArCisJCQkgICAgS0VS
TlBIWVNBRERSOworCQl9CisJCWkrKzsKKwl9CisJLyoKKwkgKiBBbGxvY2F0ZSBhIHBhZ2UgZm9y
IHRoZSBzeXN0ZW0gcGFnZSBtYXBwZWQgdG8gVjB4MDAwMDAwMDAKKwkgKiBUaGlzIHBhZ2Ugd2ls
bCBqdXN0IGNvbnRhaW4gdGhlIHN5c3RlbSB2ZWN0b3JzIGFuZCBjYW4gYmUKKwkgKiBzaGFyZWQg
YnkgYWxsIHByb2Nlc3Nlcy4KKwkgKi8KKwl2YWxsb2NfcGFnZXMoc3lzdGVtcGFnZSwgMSk7CisK
KwkvKiBBbGxvY2F0ZSBzdGFja3MgZm9yIGFsbCBtb2RlcyAqLworCXZhbGxvY19wYWdlcyhpcnFz
dGFjaywgSVJRX1NUQUNLX1NJWkUpOworCXZhbGxvY19wYWdlcyhhYnRzdGFjaywgQUJUX1NUQUNL
X1NJWkUpOworCXZhbGxvY19wYWdlcyh1bmRzdGFjaywgVU5EX1NUQUNLX1NJWkUpOworCXZhbGxv
Y19wYWdlcyhrZXJuZWxzdGFjaywgS1NUQUNLX1BBR0VTKTsKKwl2YWxsb2NfcGFnZXMobXNnYnVm
cHYsIHJvdW5kX3BhZ2UoTVNHQlVGX1NJWkUpIC8gUEFHRV9TSVpFKTsKKworCS8qCisJICogTm93
IHdlIHN0YXJ0IGNvbnN0cnVjdGlvbiBvZiB0aGUgTDEgcGFnZSB0YWJsZQorCSAqIFdlIHN0YXJ0
IGJ5IG1hcHBpbmcgdGhlIEwyIHBhZ2UgdGFibGVzIGludG8gdGhlIEwxLgorCSAqIFRoaXMgbWVh
bnMgdGhhdCB3ZSBjYW4gcmVwbGFjZSBMMSBtYXBwaW5ncyBsYXRlciBvbiBpZiBuZWNlc3NhcnkK
KwkgKi8KKwlsMXBhZ2V0YWJsZSA9IGtlcm5lbF9sMXB0LnB2X3ZhOworCisJLyogTWFwIHRoZSBM
MiBwYWdlcyB0YWJsZXMgaW4gdGhlIEwxIHBhZ2UgdGFibGUgKi8KKwlwbWFwX2xpbmtfbDJwdChs
MXBhZ2V0YWJsZSwgQVJNX1ZFQ1RPUlNfSElHSCwKKwkgICAgJmtlcm5lbF9wdF90YWJsZVtLRVJO
RUxfUFRfU1lTXSk7CisJZm9yIChpID0gMDsgaSA8IEtFUk5FTF9QVF9LRVJOX05VTTsgaSsrKQor
CQlwbWFwX2xpbmtfbDJwdChsMXBhZ2V0YWJsZSwgS0VSTkJBU0UgKyBpICogTDFfU19TSVpFLAor
CQkgICAgJmtlcm5lbF9wdF90YWJsZVtLRVJORUxfUFRfS0VSTiArIGldKTsKKwlwbWFwX21hcF9j
aHVuayhsMXBhZ2V0YWJsZSwgS0VSTkJBU0UsIFBIWVNBRERSLAorCSAgICgoKHVpbnQzMl90KWxh
c3RhZGRyIC0gS0VSTkJBU0UpICsgUEFHRV9TSVpFKSAmIH4oUEFHRV9TSVpFIC0gMSksCisJICAg
IFZNX1BST1RfUkVBRHxWTV9QUk9UX1dSSVRFLCBQVEVfQ0FDSEUpOworCWFmdGVya2VybiA9IHJv
dW5kX3BhZ2UoKGxhc3RhZGRyICsgTDFfU19TSVpFKSAmIH4oTDFfU19TSVpFIC0gMSkpOworCWZv
ciAoaSA9IDA7IGkgPCBLRVJORUxfUFRfQUZLRVJORUxfTlVNOyBpKyspIHsKKwkJcG1hcF9saW5r
X2wycHQobDFwYWdldGFibGUsIGFmdGVya2VybiArIGkgKiBMMV9TX1NJWkUsCisJCSAgICAma2Vy
bmVsX3B0X3RhYmxlW0tFUk5FTF9QVF9BRktFUk5FTCArIGldKTsKKwl9CisKKwkvKiBNYXAgdGhl
IHZlY3RvciBwYWdlLiAqLworCXBtYXBfbWFwX2VudHJ5KGwxcGFnZXRhYmxlLCBBUk1fVkVDVE9S
U19ISUdILCBzeXN0ZW1wYWdlLnB2X3BhLAorCSAgICBWTV9QUk9UX1JFQUR8Vk1fUFJPVF9XUklU
RSwgUFRFX0NBQ0hFKTsKKworCisJLyogTWFwIHRoZSBzdGFjayBwYWdlcyAqLworCXBtYXBfbWFw
X2NodW5rKGwxcGFnZXRhYmxlLCBpcnFzdGFjay5wdl92YSwgaXJxc3RhY2sucHZfcGEsCisJICAg
IElSUV9TVEFDS19TSVpFICogUEFHRV9TSVpFLCBWTV9QUk9UX1JFQUR8Vk1fUFJPVF9XUklURSwg
UFRFX0NBQ0hFKTsKKwlwbWFwX21hcF9jaHVuayhsMXBhZ2V0YWJsZSwgYWJ0c3RhY2sucHZfdmEs
IGFidHN0YWNrLnB2X3BhLAorCSAgICBBQlRfU1RBQ0tfU0laRSAqIFBBR0VfU0laRSwgVk1fUFJP
VF9SRUFEfFZNX1BST1RfV1JJVEUsIFBURV9DQUNIRSk7CisJcG1hcF9tYXBfY2h1bmsobDFwYWdl
dGFibGUsIHVuZHN0YWNrLnB2X3ZhLCB1bmRzdGFjay5wdl9wYSwKKwkgICAgVU5EX1NUQUNLX1NJ
WkUgKiBQQUdFX1NJWkUsIFZNX1BST1RfUkVBRHxWTV9QUk9UX1dSSVRFLCBQVEVfQ0FDSEUpOwor
CXBtYXBfbWFwX2NodW5rKGwxcGFnZXRhYmxlLCBrZXJuZWxzdGFjay5wdl92YSwga2VybmVsc3Rh
Y2sucHZfcGEsCisJICAgIEtTVEFDS19QQUdFUyAqIFBBR0VfU0laRSwgVk1fUFJPVF9SRUFEfFZN
X1BST1RfV1JJVEUsIFBURV9DQUNIRSk7CisKKwlwbWFwX21hcF9jaHVuayhsMXBhZ2V0YWJsZSwg
a2VybmVsX2wxcHQucHZfdmEsIGtlcm5lbF9sMXB0LnB2X3BhLAorCSAgICBMMV9UQUJMRV9TSVpF
LCBWTV9QUk9UX1JFQUR8Vk1fUFJPVF9XUklURSwgUFRFX1BBR0VUQUJMRSk7CisJcG1hcF9tYXBf
Y2h1bmsobDFwYWdldGFibGUsIG1zZ2J1ZnB2LnB2X3ZhLCBtc2didWZwdi5wdl9wYSwKKwkgICAg
TVNHQlVGX1NJWkUsIFZNX1BST1RfUkVBRHxWTV9QUk9UX1dSSVRFLCBQVEVfQ0FDSEUpOworCisJ
Zm9yIChsb29wID0gMDsgbG9vcCA8IE5VTV9LRVJORUxfUFRTOyArK2xvb3ApIHsKKwkJcG1hcF9t
YXBfY2h1bmsobDFwYWdldGFibGUsIGtlcm5lbF9wdF90YWJsZVtsb29wXS5wdl92YSwKKwkJICAg
IGtlcm5lbF9wdF90YWJsZVtsb29wXS5wdl9wYSwgTDJfVEFCTEVfU0laRSwKKwkJICAgIFZNX1BS
T1RfUkVBRHxWTV9QUk9UX1dSSVRFLCBQVEVfUEFHRVRBQkxFKTsKKwl9CisKKwlwbWFwX2Rldm1h
cF9ib290c3RyYXAobDFwYWdldGFibGUsIGVjb25hX2Rldm1hcCk7CisJY3B1X2RvbWFpbnMoKERP
TUFJTl9DTElFTlQgPDwgKFBNQVBfRE9NQUlOX0tFUk5FTCoyKSkgfCBET01BSU5fQ0xJRU5UKTsK
KwlzZXR0dGIoa2VybmVsX2wxcHQucHZfcGEpOworCWNwdV90bGJfZmx1c2hJRCgpOworCWNwdV9k
b21haW5zKERPTUFJTl9DTElFTlQgPDwgKFBNQVBfRE9NQUlOX0tFUk5FTCoyKSk7CisJY25pbml0
KCk7CisJbWVtX2luZm8gPSAoKCpkZHIpID4+IDQpICYgMHgzOworCW1lbXNpemUgPSAoODw8bWVt
X2luZm8pKjEwMjQqMTAyNDsKKwlwaHlzbWVtID0gbWVtc2l6ZSAvIFBBR0VfU0laRTsKKworCS8q
CisJICogUGFnZXMgd2VyZSBhbGxvY2F0ZWQgZHVyaW5nIHRoZSBzZWNvbmRhcnkgYm9vdHN0cmFw
IGZvciB0aGUKKwkgKiBzdGFja3MgZm9yIGRpZmZlcmVudCBDUFUgbW9kZXMuCisJICogV2UgbXVz
dCBub3cgc2V0IHRoZSByMTMgcmVnaXN0ZXJzIGluIHRoZSBkaWZmZXJlbnQgQ1BVIG1vZGVzIHRv
CisJICogcG9pbnQgdG8gdGhlc2Ugc3RhY2tzLgorCSAqIFNpbmNlIHRoZSBBUk0gc3RhY2tzIHVz
ZSBTVE1GRCBldGMuIHdlIG11c3Qgc2V0IHIxMyB0byB0aGUgdG9wIGVuZAorCSAqIG9mIHRoZSBz
dGFjayBtZW1vcnkuCisJICovCisJY3B1X2NvbnRyb2woQ1BVX0NPTlRST0xfTU1VX0VOQUJMRSwg
Q1BVX0NPTlRST0xfTU1VX0VOQUJMRSk7CisKKwlzZXRfc3RhY2twdHIoUFNSX0lSUTMyX01PREUs
CisJICAgIGlycXN0YWNrLnB2X3ZhICsgSVJRX1NUQUNLX1NJWkUgKiBQQUdFX1NJWkUpOworCXNl
dF9zdGFja3B0cihQU1JfQUJUMzJfTU9ERSwKKwkgICAgYWJ0c3RhY2sucHZfdmEgKyBBQlRfU1RB
Q0tfU0laRSAqIFBBR0VfU0laRSk7CisJc2V0X3N0YWNrcHRyKFBTUl9VTkQzMl9NT0RFLAorCSAg
ICB1bmRzdGFjay5wdl92YSArIFVORF9TVEFDS19TSVpFICogUEFHRV9TSVpFKTsKKworCS8qCisJ
ICogV2UgbXVzdCBub3cgY2xlYW4gdGhlIGNhY2hlIGFnYWluLi4uLgorCSAqIENsZWFuaW5nIG1h
eSBiZSBkb25lIGJ5IHJlYWRpbmcgbmV3IGRhdGEgdG8gZGlzcGxhY2UgYW55CisJICogZGlydHkg
ZGF0YSBpbiB0aGUgY2FjaGUuIFRoaXMgd2lsbCBoYXZlIGhhcHBlbmVkIGluIHNldHR0YigpCisJ
ICogYnV0IHNpbmNlIHdlIGFyZSBib290IHN0cmFwcGluZyB0aGUgYWRkcmVzc2VzIHVzZWQgZm9y
IHRoZSByZWFkCisJICogbWF5IGhhdmUganVzdCBiZWVuIHJlbWFwcGVkIGFuZCB0aHVzIHRoZSBj
YWNoZSBjb3VsZCBiZSBvdXQKKwkgKiBvZiBzeW5jLiBBIHJlLWNsZWFuIGFmdGVyIHRoZSBzd2l0
Y2ggd2lsbCBjdXJlIHRoaXMuCisJICogQWZ0ZXIgYm9vdGluZyB0aGVyZSBhcmUgbm8gZ3Jvc3Mg
cmVsb2NhdGlvbnMgb2YgdGhlIGtlcm5lbCB0aHVzCisJICogdGhpcyBwcm9ibGVtIHdpbGwgbm90
IG9jY3VyIGFmdGVyIGluaXRhcm0oKS4KKwkgKi8KKwljcHVfaWRjYWNoZV93Ymludl9hbGwoKTsK
KworCS8qIFNldCBzdGFjayBmb3IgZXhjZXB0aW9uIGhhbmRsZXJzICovCisJZGF0YV9hYm9ydF9o
YW5kbGVyX2FkZHJlc3MgPSAodV9pbnQpZGF0YV9hYm9ydF9oYW5kbGVyOworCXByZWZldGNoX2Fi
b3J0X2hhbmRsZXJfYWRkcmVzcyA9ICh1X2ludClwcmVmZXRjaF9hYm9ydF9oYW5kbGVyOworCXVu
ZGVmaW5lZF9oYW5kbGVyX2FkZHJlc3MgPSAodV9pbnQpdW5kZWZpbmVkaW5zdHJ1Y3Rpb25fYm91
bmNlOworCXVuZGVmaW5lZF9pbml0KCk7CisKKwlwcm9jX2xpbmt1cDAoJnByb2MwLCAmdGhyZWFk
MCk7CisJdGhyZWFkMC50ZF9rc3RhY2sgPSBrZXJuZWxzdGFjay5wdl92YTsKKwl0aHJlYWQwLnRk
X3BjYiA9IChzdHJ1Y3QgcGNiICopCisJCSh0aHJlYWQwLnRkX2tzdGFjayArIEtTVEFDS19QQUdF
UyAqIFBBR0VfU0laRSkgLSAxOworCXRocmVhZDAudGRfcGNiLT5wY2JfZmxhZ3MgPSAwOworCXRo
cmVhZDAudGRfZnJhbWUgPSAmcHJvYzBfdGY7CisJcGNwdXAtPnBjX2N1cnBjYiA9IHRocmVhZDAu
dGRfcGNiOworCisJYXJtX3ZlY3Rvcl9pbml0KEFSTV9WRUNUT1JTX0hJR0gsIEFSTV9WRUNfQUxM
KTsKKworCXBtYXBfY3VybWF4a3ZhZGRyID0gYWZ0ZXJrZXJuICsgTDFfU19TSVpFICogKEtFUk5F
TF9QVF9LRVJOX05VTSAtIDEpOworCisJLyoKKwkgKiBBUk1fVVNFX1NNQUxMX0FMTE9DIHVzZXMg
ZHVtcF9hdmFpbCwgc28gaXQgbXVzdCBiZSBmaWxsZWQgYmVmb3JlCisJICogY2FsbGluZyBwbWFw
X2Jvb3RzdHJhcC4KKwkgKi8KKwlkdW1wX2F2YWlsWzBdID0gUEhZU0FERFI7CisJZHVtcF9hdmFp
bFsxXSA9IFBIWVNBRERSICsgbWVtc2l6ZTsKKwlkdW1wX2F2YWlsWzJdID0gMDsKKwlkdW1wX2F2
YWlsWzNdID0gMDsKKworCXBtYXBfYm9vdHN0cmFwKGZyZWVtZW1wb3MsCisJICAgIEtFUk5WSVJU
QUREUiArIDMgKiBtZW1zaXplLAorCSAgICAma2VybmVsX2wxcHQpOworCisJbXNnYnVmcCA9ICh2
b2lkKiltc2didWZwdi5wdl92YTsKKwltc2didWZpbml0KG1zZ2J1ZnAsIE1TR0JVRl9TSVpFKTsK
KworCW11dGV4X2luaXQoKTsKKworCWkgPSAwOworI2lmIFBIWVNBRERSICE9IEtFUk5QSFlTQURE
UgorCXBoeXNfYXZhaWxbaSsrXSA9IFBIWVNBRERSOworCXBoeXNfYXZhaWxbaSsrXSA9IEtFUk5Q
SFlTQUREUjsKKyNlbmRpZgorCXBoeXNfYXZhaWxbaSsrXSA9IHZpcnR1YWxfYXZhaWwgLSBLRVJO
VklSVEFERFIgKyBLRVJOUEhZU0FERFI7CisKKwlwaHlzX2F2YWlsW2krK10gPSBQSFlTQUREUiAr
IG1lbXNpemU7CisJcGh5c19hdmFpbFtpKytdID0gMDsKKwlwaHlzX2F2YWlsW2krK10gPSAwOwor
CS8qIERvIGJhc2ljIHR1bmluZywgaHogZXRjICovCisJaW5pdF9wYXJhbTEoKTsKKwlpbml0X3Bh
cmFtMihwaHlzbWVtKTsKKwlrZGJfaW5pdCgpOworCisJcmV0dXJuICgodm9pZCAqKShrZXJuZWxz
dGFjay5wdl92YSArIFVTUEFDRV9TVkNfU1RBQ0tfVE9QIC0KKwkgICAgc2l6ZW9mKHN0cnVjdCBw
Y2IpKSk7Cit9CkluZGV4OiBhcm0vZWNvbmEvaWZfZWNlLmMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXJtL2Vj
b25hL2lmX2VjZS5jCShyZXZpc2lvbiAwKQorKysgYXJtL2Vjb25hL2lmX2VjZS5jCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDE5NDggQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA5IFlvaGFu
ZXMgTnVncm9obyA8eW9oYW5lc0BnbWFpbC5jb20+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVVUSE9SIEFORCBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBVVRIT1IgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0Q6IHNyYy9zeXMvYXJtL2Vjb25h
L2lmX2VjZS5jJCIpOworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3N5
c3RtLmg+CisjaW5jbHVkZSA8c3lzL2J1cy5oPgorI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KKyNp
bmNsdWRlIDxzeXMvbWJ1Zi5oPgorI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4KKyNpbmNsdWRlIDxz
eXMvbW9kdWxlLmg+CisjaW5jbHVkZSA8c3lzL3JtYW4uaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0
Lmg+CisjaW5jbHVkZSA8c3lzL3NvY2tpby5oPgorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKyNp
bmNsdWRlIDxzeXMvdGFza3F1ZXVlLmg+CisKKyNpbmNsdWRlIDxuZXQvZXRoZXJuZXQuaD4KKyNp
bmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxuZXQvaWZfYXJwLmg+CisjaW5jbHVkZSA8bmV0
L2lmX2RsLmg+CisjaW5jbHVkZSA8bmV0L2lmX21lZGlhLmg+CisjaW5jbHVkZSA8bmV0L2lmX3R5
cGVzLmg+CisjaW5jbHVkZSA8bmV0L2lmX3ZsYW5fdmFyLmg+CisKKyNpZmRlZiBJTkVUCisjaW5j
bHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW5fc3lzdG0uaD4KKyNpbmNs
dWRlIDxuZXRpbmV0L2luX3Zhci5oPgorI2luY2x1ZGUgPG5ldGluZXQvaXAuaD4KKyNlbmRpZgor
CisjaW5jbHVkZSA8bmV0L2JwZi5oPgorI2luY2x1ZGUgPG5ldC9icGZkZXNjLmg+CisKKyNpbmNs
dWRlIDxkZXYvbWlpL21paS5oPgorI2luY2x1ZGUgPGRldi9taWkvbWlpdmFyLmg+CisKKyNpbmNs
dWRlIDxhcm0vZWNvbmEvaWZfZWNlcmVnLmg+CisjaW5jbHVkZSA8YXJtL2Vjb25hL2lmX2VjZXZh
ci5oPgorI2luY2x1ZGUgPGFybS9lY29uYS9lY29uYV92YXIuaD4KKworI2luY2x1ZGUgPG1hY2hp
bmUvYnVzLmg+CisjaW5jbHVkZSA8bWFjaGluZS9pbnRyLmg+CisKKy8qICJkZXZpY2UgbWlpYnVz
IiByZXF1aXJlZC4gIFNlZSBHRU5FUklDIGlmIHlvdSBnZXQgZXJyb3JzIGhlcmUuICovCisjaW5j
bHVkZSAibWlpYnVzX2lmLmgiCisKK3N0YXRpYyB1aW50OF90Cit2bGFuMF9tYWNbRVRIRVJfQURE
Ul9MRU5dID0gezB4MDAsIDB4YWEsIDB4YmIsIDB4Y2MsIDB4ZGQsIDB4MTl9OworCisvKgorICog
Qm9vdCBsb2FkZXIgZXhwZWN0cyB0aGUgaGFyZHdhcmUgc3RhdGUgdG8gYmUgdGhlIHNhbWUgd2hl
biB3ZQorICogcmVzdGFydCB0aGUgZGV2aWNlICh3YXJtIGJvb3QpLCBzbyB3ZSBuZWVkIHRvIHNh
dmUgdGhlIGluaXRpYWwKKyAqIGNvbmZpZyB2YWx1ZXMuCisgKi8KK2ludCBpbml0aWFsX3N3aXRj
aF9jb25maWc7CitpbnQgaW5pdGlhbF9jcHVfY29uZmlnOworaW50IGluaXRpYWxfcG9ydDBfY29u
ZmlnOworaW50IGluaXRpYWxfcG9ydDFfY29uZmlnOworCitzdGF0aWMgaW5saW5lIHVpbnQzMl90
CityZWFkXzQoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIGJ1c19zaXplX3Qgb2ZmKQoreworCisJcmV0
dXJuIChidXNfcmVhZF80KHNjLT5tZW1fcmVzLCBvZmYpKTsKK30KKworc3RhdGljIGlubGluZSB2
b2lkCit3cml0ZV80KHN0cnVjdCBlY2Vfc29mdGMgKnNjLCBidXNfc2l6ZV90IG9mZiwgdWludDMy
X3QgdmFsKQoreworCisJYnVzX3dyaXRlXzQoc2MtPm1lbV9yZXMsIG9mZiwgdmFsKTsKK30KKwor
I2RlZmluZQlFQ0VfTE9DSyhfc2MpCQltdHhfbG9jaygmKF9zYyktPnNjX210eCkKKyNkZWZpbmUJ
RUNFX1VOTE9DSyhfc2MpCQltdHhfdW5sb2NrKCYoX3NjKS0+c2NfbXR4KQorI2RlZmluZQlFQ0Vf
TE9DS19JTklUKF9zYykgXAorCW10eF9pbml0KCZfc2MtPnNjX210eCwgZGV2aWNlX2dldF9uYW1l
dW5pdChfc2MtPmRldiksCVwKKwkJIE1UWF9ORVRXT1JLX0xPQ0ssIE1UWF9ERUYpCisKKyNkZWZp
bmUJRUNFX1RYTE9DSyhfc2MpCQltdHhfbG9jaygmKF9zYyktPnNjX210eF90eCkKKyNkZWZpbmUJ
RUNFX1RYVU5MT0NLKF9zYykJCW10eF91bmxvY2soJihfc2MpLT5zY19tdHhfdHgpCisjZGVmaW5l
CUVDRV9UWExPQ0tfSU5JVChfc2MpIFwKKwltdHhfaW5pdCgmX3NjLT5zY19tdHhfdHgsIGRldmlj
ZV9nZXRfbmFtZXVuaXQoX3NjLT5kZXYpLAlcCisJCSAiRUNFIFRYIExvY2siLCBNVFhfREVGKQor
CisjZGVmaW5lCUVDRV9DTEVBTlVQTE9DSyhfc2MpCW10eF9sb2NrKCYoX3NjKS0+c2NfbXR4X2Ns
ZWFudXApCisjZGVmaW5lCUVDRV9DTEVBTlVQVU5MT0NLKF9zYykJbXR4X3VubG9jaygmKF9zYykt
PnNjX210eF9jbGVhbnVwKQorI2RlZmluZQlFQ0VfQ0xFQU5VUExPQ0tfSU5JVChfc2MpIFwKKwlt
dHhfaW5pdCgmX3NjLT5zY19tdHhfY2xlYW51cCwgZGV2aWNlX2dldF9uYW1ldW5pdChfc2MtPmRl
diksCVwKKwkJICJFQ0UgY2xlYW51cCBMb2NrIiwgTVRYX0RFRikKKworI2RlZmluZQlFQ0VfUlhM
T0NLKF9zYykJCW10eF9sb2NrKCYoX3NjKS0+c2NfbXR4X3J4KQorI2RlZmluZQlFQ0VfUlhVTkxP
Q0soX3NjKQkJbXR4X3VubG9jaygmKF9zYyktPnNjX210eF9yeCkKKyNkZWZpbmUJRUNFX1JYTE9D
S19JTklUKF9zYykgXAorCW10eF9pbml0KCZfc2MtPnNjX210eF9yeCwgZGV2aWNlX2dldF9uYW1l
dW5pdChfc2MtPmRldiksCVwKKwkJICJFQ0UgUlggTG9jayIsIE1UWF9ERUYpCisKKyNkZWZpbmUJ
RUNFX0xPQ0tfREVTVFJPWShfc2MpCW10eF9kZXN0cm95KCZfc2MtPnNjX210eCk7CisjZGVmaW5l
CUVDRV9UWExPQ0tfREVTVFJPWShfc2MpCW10eF9kZXN0cm95KCZfc2MtPnNjX210eF90eCk7Cisj
ZGVmaW5lCUVDRV9SWExPQ0tfREVTVFJPWShfc2MpCW10eF9kZXN0cm95KCZfc2MtPnNjX210eF9y
eCk7CisjZGVmaW5lCUVDRV9DTEVBTlVQTE9DS19ERVNUUk9ZKF9zYykJXAorCW10eF9kZXN0cm95
KCZfc2MtPnNjX210eF9jbGVhbnVwKTsKKworI2RlZmluZQlFQ0VfQVNTRVJUX0xPQ0tFRChfc2Mp
CW10eF9hc3NlcnQoJl9zYy0+c2NfbXR4LCBNQV9PV05FRCk7CisjZGVmaW5lCUVDRV9BU1NFUlRf
VU5MT0NLRUQoX3NjKSBtdHhfYXNzZXJ0KCZfc2MtPnNjX210eCwgTUFfTk9UT1dORUQpOworCitz
dGF0aWMgZGV2Y2xhc3NfdCBlY2VfZGV2Y2xhc3M7CisKKy8qIGlmbmV0IGVudHJ5IHBvaW50cyAq
LworCitzdGF0aWMgdm9pZAllY2Vpbml0X2xvY2tlZCh2b2lkICopOworc3RhdGljIHZvaWQJZWNl
c3RhcnRfbG9ja2VkKHN0cnVjdCBpZm5ldCAqKTsKKworc3RhdGljIHZvaWQJZWNlaW5pdCh2b2lk
ICopOworc3RhdGljIHZvaWQJZWNlc3RhcnQoc3RydWN0IGlmbmV0ICopOworc3RhdGljIHZvaWQJ
ZWNlc3RvcChzdHJ1Y3QgZWNlX3NvZnRjICopOworc3RhdGljIGludAllY2Vpb2N0bChzdHJ1Y3Qg
aWZuZXQgKiBpZnAsIHVfbG9uZywgY2FkZHJfdCk7CisKKy8qIGJ1cyBlbnRyeSBwb2ludHMgKi8K
Kworc3RhdGljIGludAllY2VfcHJvYmUoZGV2aWNlX3QgZGV2KTsKK3N0YXRpYyBpbnQJZWNlX2F0
dGFjaChkZXZpY2VfdCBkZXYpOworc3RhdGljIGludAllY2VfZGV0YWNoKGRldmljZV90IGRldik7
CitzdGF0aWMgdm9pZAllY2VfaW50cih2b2lkICopOworc3RhdGljIHZvaWQJZWNlX2ludHJfcWYo
dm9pZCAqKTsKK3N0YXRpYyB2b2lkCWVjZV9pbnRyX3N0YXR1cyh2b2lkICp4c2MpOworCisvKiBo
ZWxwZXIgcm91dGluZXMgKi8KK3N0YXRpYyBpbnQJZWNlX2FjdGl2YXRlKGRldmljZV90IGRldik7
CitzdGF0aWMgdm9pZAllY2VfZGVhY3RpdmF0ZShkZXZpY2VfdCBkZXYpOworc3RhdGljIGludAll
Y2VfaWZtZWRpYV91cGQoc3RydWN0IGlmbmV0ICppZnApOworc3RhdGljIHZvaWQJZWNlX2lmbWVk
aWFfc3RzKHN0cnVjdCBpZm5ldCAqaWZwLCBzdHJ1Y3QgaWZtZWRpYXJlcSAqaWZtcik7CitzdGF0
aWMgaW50CWVjZV9nZXRfbWFjKHN0cnVjdCBlY2Vfc29mdGMgKnNjLCB1X2NoYXIgKmVhZGRyKTsK
K3N0YXRpYyB2b2lkCWVjZV9zZXRfbWFjKHN0cnVjdCBlY2Vfc29mdGMgKnNjLCB1X2NoYXIgKmVh
ZGRyKTsKK3N0YXRpYyBpbnQJY29uZmlndXJlX2NwdV9wb3J0KHN0cnVjdCBlY2Vfc29mdGMgKnNj
KTsKK3N0YXRpYyBpbnQJY29uZmlndXJlX2xhbl9wb3J0KHN0cnVjdCBlY2Vfc29mdGMgKnNjLCBp
bnQgcGh5X3R5cGUpOworc3RhdGljIHZvaWQJc2V0X3B2aWQoc3RydWN0IGVjZV9zb2Z0YyAqc2Ms
IGludCBwb3J0MCwgaW50IHBvcnQxLCBpbnQgY3B1KTsKK3N0YXRpYyB2b2lkCXNldF92bGFuX3Zp
ZChzdHJ1Y3QgZWNlX3NvZnRjICpzYywgaW50IHZsYW4pOworc3RhdGljIHZvaWQJc2V0X3ZsYW5f
bWVtYmVyKHN0cnVjdCBlY2Vfc29mdGMgKnNjLCBpbnQgdmxhbik7CitzdGF0aWMgdm9pZAlzZXRf
dmxhbl90YWcoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIGludCB2bGFuKTsKK3N0YXRpYyBpbnQJaGFy
ZHdhcmVfaW5pdChzdHJ1Y3QgZWNlX3NvZnRjICpzYyk7CitzdGF0aWMgdm9pZAllY2VfaW50cl9y
eF9sb2NrZWQoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIGludCBjb3VudCk7CisKK3N0YXRpYyB2b2lk
CWVjZV9mcmVlX2Rlc2NfZG1hX3R4KHN0cnVjdCBlY2Vfc29mdGMgKnNjKTsKK3N0YXRpYyB2b2lk
CWVjZV9mcmVlX2Rlc2NfZG1hX3J4KHN0cnVjdCBlY2Vfc29mdGMgKnNjKTsKKworc3RhdGljIHZv
aWQJZWNlX2ludHJfdGFzayh2b2lkICphcmcsIGludCBwZW5kaW5nIF9fdW51c2VkKTsKK3N0YXRp
YyB2b2lkCWVjZV90eF90YXNrKHZvaWQgKmFyZywgaW50IHBlbmRpbmcgX191bnVzZWQpOworc3Rh
dGljIHZvaWQJZWNlX2NsZWFudXBfdGFzayh2b2lkICphcmcsIGludCBwZW5kaW5nIF9fdW51c2Vk
KTsKKworc3RhdGljIGludAllY2VfYWxsb2NhdGVfZG1hKHN0cnVjdCBlY2Vfc29mdGMgKnNjKTsK
Kworc3RhdGljIHZvaWQJZWNlX2ludHJfdHgodm9pZCAqeHNjKTsKKworc3RhdGljIHZvaWQJY2xl
YXJfbWFjX2VudHJpZXMoc3RydWN0IGVjZV9zb2Z0YyAqZWMsIGludCBpbmNsdWRlX3RoaXNfbWFj
KTsKKworc3RhdGljIHVpbnQzMl90IHJlYWRfbWFjX2VudHJ5KHN0cnVjdCBlY2Vfc29mdGMgKmVj
LAorCSAgICB1aW50OF90ICptYWNfcmVzdWx0LAorCSAgICBpbnQgZmlyc3QpOworCisvKlBIWSBy
ZWxhdGVkIGZ1bmN0aW9ucyovCitzdGF0aWMgaW5saW5lIGludAorcGh5X3JlYWQoc3RydWN0IGVj
ZV9zb2Z0YyAqc2MsIGludCBwaHksIGludCByZWcpCit7CisJaW50IHZhbDsKKwlpbnQgaWk7CisJ
aW50IHN0YXR1czsKKworCXdyaXRlXzQoc2MsIFBIWV9DT05UUk9MLCBQSFlfUldfT0spOworCXdy
aXRlXzQoc2MsIFBIWV9DT05UUk9MLAorCSAgICAoUEhZX0FERFJFU1MocGh5KXxQSFlfUkVBRF9D
T01NQU5EIHwKKwkgICAgUEhZX1JFR0lTVEVSKHJlZykpKTsKKworCWZvciAoaWkgPSAwOyBpaSA8
IDB4MTAwMDsgaWkrKykgeworCQlzdGF0dXMgPSByZWFkXzQoc2MsIFBIWV9DT05UUk9MKTsKKwkJ
aWYgKHN0YXR1cyAmIFBIWV9SV19PSykgeworCQkJLyogQ2xlYXIgdGhlIHJ3X29rIHN0YXR1cywg
YW5kIGNsZWFyIG90aGVyCisJCQkgKiBiaXRzIHZhbHVlLiAqLworCQkJd3JpdGVfNChzYywgUEhZ
X0NPTlRST0wsIFBIWV9SV19PSyk7CisJCQl2YWwgPSBQSFlfR0VUX0RBVEEoc3RhdHVzKTsKKwkJ
CXJldHVybiAodmFsKTsKKwkJfQorCX0KKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW5saW5l
IHZvaWQKK3BoeV93cml0ZShzdHJ1Y3QgZWNlX3NvZnRjICpzYywgaW50IHBoeSwgaW50IHJlZywg
aW50IGRhdGEpCit7CisJaW50IGlpOworCisJd3JpdGVfNChzYywgUEhZX0NPTlRST0wsIFBIWV9S
V19PSyk7CisJd3JpdGVfNChzYywgUEhZX0NPTlRST0wsCisJICAgIFBIWV9BRERSRVNTKHBoeSkg
fCBQSFlfUkVHSVNURVIocmVnKSB8CisJICAgIFBIWV9XUklURV9DT01NQU5EIHwgUEhZX0RBVEEo
ZGF0YSkpOworCWZvciAoaWkgPSAwOyBpaSA8IDB4MTAwMDsgaWkrKykgeworCQlpZiAocmVhZF80
KHNjLCBQSFlfQ09OVFJPTCkgJiBQSFlfUldfT0spIHsKKwkJCS8qIENsZWFyIHRoZSByd19vayBz
dGF0dXMsIGFuZCBjbGVhciBvdGhlcgorCQkJICogYml0cyB2YWx1ZS4KKwkJCSAqLworCQkJd3Jp
dGVfNChzYywgUEhZX0NPTlRST0wsIFBIWV9SV19PSyk7CisJCQlyZXR1cm47CisJCX0KKwl9Cit9
CisKK3N0YXRpYyBpbnQgZ2V0X3BoeV90eXBlKHN0cnVjdCBlY2Vfc29mdGMgKnNjKQoreworCXVp
bnQxNl90IHBoeTBfaWQgPSAwLCBwaHkxX2lkID0gMDsKKworCS8qCisJICogVXNlIFNNSSAoTURD
L01ESU8pIHRvIHJlYWQgTGluayBQYXJ0bmVyJ3MgUEhZIElkZW50aWZpZXIKKwkgKiBSZWdpc3Rl
ciAxLgorCSAqLworCXBoeTBfaWQgPSBwaHlfcmVhZChzYywgMCwgMHgyKTsKKwlwaHkxX2lkID0g
cGh5X3JlYWQoc2MsIDEsIDB4Mik7CisKKwlpZiAoKHBoeTBfaWQgPT0gMHhGRkZGKSAmJiAocGh5
MV9pZCA9PSAweDAwMEYpKQorCQlyZXR1cm4gKEFTSVhfR0lHQV9QSFkpOworCWVsc2UgaWYgKChw
aHkwX2lkID09IDB4MDI0MykgJiYgKHBoeTFfaWQgPT0gMHgwMjQzKSkKKwkJcmV0dXJuIChUV09f
U0lOR0xFX1BIWSk7CisJZWxzZSBpZiAoKHBoeTBfaWQgPT0gMHhGRkZGKSAmJiAocGh5MV9pZCA9
PSAweDAwMDcpKQorCQlyZXR1cm4gKFZTQzg2MDFfR0lHQV9QSFkpOworCWVsc2UgaWYgKChwaHkw
X2lkID09IDB4MDI0MykgJiYgKHBoeTFfaWQgPT0gMHhGRkZGKSkKKwkJcmV0dXJuIChJQ19QTFVT
X1BIWSk7CisKKwlyZXR1cm4gKE5PVF9GT1VORF9QSFkpOworfQorCitzdGF0aWMgaW50CitlY2Vf
cHJvYmUoZGV2aWNlX3QgZGV2KQoreworCisJZGV2aWNlX3NldF9kZXNjKGRldiwgIkVjb25hIEV0
aGVybmV0IENvbnRyb2xsZXIiKTsKKwlyZXR1cm4gKDApOworfQorCisKK3N0YXRpYyBpbnQKK2Vj
ZV9hdHRhY2goZGV2aWNlX3QgZGV2KQoreworCXN0cnVjdCBlY2Vfc29mdGMgKnNjOworCXN0cnVj
dCBpZm5ldCAqaWZwID0gTlVMTDsKKwlzdHJ1Y3Qgc3lzY3RsX2N0eF9saXN0ICpzY3R4OworCXN0
cnVjdCBzeXNjdGxfb2lkICpzb2lkOworCXVfY2hhciBlYWRkcltFVEhFUl9BRERSX0xFTl07CisJ
aW50IGVycjsKKwlpbnQgaSwgcmlkOworCXVpbnQzMl90IHJuZDsKKworCWVyciA9IDA7CisKKwlz
YyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKworCXNjLT5kZXYgPSBkZXY7CisKKwlyaWQgPSAw
OworCXNjLT5tZW1fcmVzID0gYnVzX2FsbG9jX3Jlc291cmNlX2FueShkZXYsIFNZU19SRVNfTUVN
T1JZLCAmcmlkLAorCQkgICAgUkZfQUNUSVZFKTsKKwlpZiAoc2MtPm1lbV9yZXMgPT0gTlVMTCkK
KwkJZ290byBvdXQ7CisKKwlwb3dlcl9vbl9uZXR3b3JrX2ludGVyZmFjZSgpOworCisJcmlkID0g
MDsKKwlzYy0+aXJxX3Jlc19zdGF0dXMgPSBidXNfYWxsb2NfcmVzb3VyY2VfYW55KGRldiwgU1lT
X1JFU19JUlEsICZyaWQsCisJICAgIFJGX0FDVElWRSk7CisJaWYgKHNjLT5pcnFfcmVzX3N0YXR1
cyA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCXJpZCA9IDE7CisJLypUU1RDOiBGbS1Td2l0Y2gt
VHgtQ29tcGxldGUqLworCXNjLT5pcnFfcmVzX3R4ID0gYnVzX2FsbG9jX3Jlc291cmNlX2FueShk
ZXYsIFNZU19SRVNfSVJRLCAmcmlkLAorCSAgICBSRl9BQ1RJVkUpOworCWlmIChzYy0+aXJxX3Jl
c190eCA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCXJpZCA9IDI7CisJLypGU1JDOiBGbS1Td2l0
Y2gtUngtQ29tcGxldGUqLworCXNjLT5pcnFfcmVzX3JlYyA9IGJ1c19hbGxvY19yZXNvdXJjZV9h
bnkoZGV2LCBTWVNfUkVTX0lSUSwgJnJpZCwKKwkgICAgUkZfQUNUSVZFKTsKKwlpZiAoc2MtPmly
cV9yZXNfcmVjID09IE5VTEwpCisJCWdvdG8gb3V0OworCisJcmlkID0gNDsKKwkvKkZTUUY6IEZt
LVN3aXRjaC1RdWV1ZS1GdWxsKi8KKwlzYy0+aXJxX3Jlc19xZiA9IGJ1c19hbGxvY19yZXNvdXJj
ZV9hbnkoZGV2LCBTWVNfUkVTX0lSUSwgJnJpZCwKKwkgICAgUkZfQUNUSVZFKTsKKwlpZiAoc2Mt
PmlycV9yZXNfcWYgPT0gTlVMTCkKKwkJZ290byBvdXQ7CisKKwllcnIgPSBlY2VfYWN0aXZhdGUo
ZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCS8qIFN5c2N0bHMgKi8KKwlzY3R4ID0g
ZGV2aWNlX2dldF9zeXNjdGxfY3R4KGRldik7CisJc29pZCA9IGRldmljZV9nZXRfc3lzY3RsX3Ry
ZWUoZGV2KTsKKworCUVDRV9MT0NLX0lOSVQoc2MpOworCisJY2FsbG91dF9pbml0X210eCgmc2Mt
PnRpY2tfY2gsICZzYy0+c2NfbXR4LCAwKTsKKworCWlmICgoZXJyID0gZWNlX2dldF9tYWMoc2Ms
IGVhZGRyKSkgIT0gMCkgeworCQkvKiBObyBNQUMgYWRkcmVzcyBjb25maWd1cmVkLiBHZW5lcmF0
ZSB0aGUgcmFuZG9tIG9uZS4gKi8KKwkJaWYgKGJvb3R2ZXJib3NlKQorCQkJZGV2aWNlX3ByaW50
ZihkZXYsCisJCQkgICAgIkdlbmVyYXRpbmcgcmFuZG9tIGV0aGVybmV0IGFkZHJlc3MuXG4iKTsK
KwkJcm5kID0gYXJjNHJhbmRvbSgpOworCisJCS8qZnJvbSBpZl9hZS5jL2lmX2F0ZS5jKi8KKwkJ
LyoKKwkJICogU2V0IE9VSSB0byBjb252ZW5pZW50IGxvY2FsbHkgYXNzaWduZWQgYWRkcmVzcy4g
J2InCisJCSAqIGlzIDB4NjIsIHdoaWNoIGhhcyB0aGUgbG9jYWxseSBhc3NpZ25lZCBiaXQgc2V0
LCBhbmQKKwkJICogdGhlIGJyb2FkY2FzdC9tdWx0aWNhc3QgYml0IGNsZWFyLgorCQkgKi8KKwkJ
ZWFkZHJbMF0gPSAnYic7CisJCWVhZGRyWzFdID0gJ3MnOworCQllYWRkclsyXSA9ICdkJzsKKwkJ
ZWFkZHJbM10gPSAocm5kID4+IDE2KSAmIDB4ZmY7CisJCWVhZGRyWzRdID0gKHJuZCA+PiA4KSAm
IDB4ZmY7CisJCWVhZGRyWzVdID0gcm5kICYgMHhmZjsKKworCQlmb3IgKGkgPSAwOyBpIDwgRVRI
RVJfQUREUl9MRU47IGkrKykKKwkJCWVhZGRyW2ldID0gdmxhbjBfbWFjW2ldOworCX0KKwllY2Vf
c2V0X21hYyhzYywgZWFkZHIpOworCXNjLT5pZnAgPSBpZnAgPSBpZl9hbGxvYyhJRlRfRVRIRVIp
OworCWlmIChtaWlfcGh5X3Byb2JlKGRldiwgJnNjLT5taWlidXMsIGVjZV9pZm1lZGlhX3VwZCwK
KwkJICAgIGVjZV9pZm1lZGlhX3N0cykpIHsKKwkJZGV2aWNlX3ByaW50ZihkZXYsICJDYW5ub3Qg
ZmluZCBteSBQSFkuXG4iKTsKKwkJZXJyID0gRU5YSU87CisJCWdvdG8gb3V0OworCX0KKwlpZnAt
PmlmX3NvZnRjID0gc2M7CisJaWZfaW5pdG5hbWUoaWZwLCBkZXZpY2VfZ2V0X25hbWUoZGV2KSwg
ZGV2aWNlX2dldF91bml0KGRldikpOworCWlmcC0+aWZfZmxhZ3MgPSBJRkZfQlJPQURDQVNUIHwg
SUZGX1NJTVBMRVggfCBJRkZfTVVMVElDQVNUOworCisJaWZwLT5pZl9jYXBhYmlsaXRpZXMgPSBJ
RkNBUF9IV0NTVU07CisKKwlpZnAtPmlmX2h3YXNzaXN0ID0gKENTVU1fSVAgfCBDU1VNX1RDUCB8
IENTVU1fVURQKTsKKwlpZnAtPmlmX2NhcGVuYWJsZSA9IGlmcC0+aWZfY2FwYWJpbGl0aWVzOwor
CWlmcC0+aWZfc3RhcnQgPSBlY2VzdGFydDsKKwlpZnAtPmlmX2lvY3RsID0gZWNlaW9jdGw7CisJ
aWZwLT5pZl9pbml0ID0gZWNlaW5pdDsKKwlpZnAtPmlmX3NuZC5pZnFfZHJ2X21heGxlbiA9IEVD
RV9NQVhfVFhfQlVGRkVSUyAtIDE7CisJSUZRX1NFVF9NQVhMRU4oJmlmcC0+aWZfc25kLCBFQ0Vf
TUFYX1RYX0JVRkZFUlMgLSAxKTsKKwlJRlFfU0VUX1JFQURZKCZpZnAtPmlmX3NuZCk7CisKKwkv
KiBDcmVhdGUgbG9jYWwgdGFza3EuICovCisKKwlUQVNLX0lOSVQoJnNjLT5zY19pbnRyX3Rhc2ss
IDAsIGVjZV9pbnRyX3Rhc2ssIHNjKTsKKwlUQVNLX0lOSVQoJnNjLT5zY190eF90YXNrLCAxLCBl
Y2VfdHhfdGFzaywgaWZwKTsKKwlUQVNLX0lOSVQoJnNjLT5zY19jbGVhbnVwX3Rhc2ssIDIsIGVj
ZV9jbGVhbnVwX3Rhc2ssIHNjKTsKKwlzYy0+c2NfdHEgPSB0YXNrcXVldWVfY3JlYXRlX2Zhc3Qo
ImVjZV90YXNrcSIsIE1fV0FJVE9LLAorCSAgICB0YXNrcXVldWVfdGhyZWFkX2VucXVldWUsCisJ
ICAgICZzYy0+c2NfdHEpOworCWlmIChzYy0+c2NfdHEgPT0gTlVMTCkgeworCQlkZXZpY2VfcHJp
bnRmKHNjLT5kZXYsICJjb3VsZCBub3QgY3JlYXRlIHRhc2txdWV1ZVxuIik7CisJCWdvdG8gb3V0
OworCX0KKworCWV0aGVyX2lmYXR0YWNoKGlmcCwgZWFkZHIpOworCisJLyoKKwkgKiBBY3RpdmF0
ZSBpbnRlcnJ1cHRzCisJICovCisJZXJyID0gYnVzX3NldHVwX2ludHIoZGV2LCBzYy0+aXJxX3Jl
c19yZWMsIElOVFJfVFlQRV9ORVQgfCBJTlRSX01QU0FGRSwKKwkgICAgTlVMTCwgZWNlX2ludHIs
IHNjLCAmc2MtPmludHJoYW5kKTsKKwlpZiAoZXJyKSB7CisJCWV0aGVyX2lmZGV0YWNoKGlmcCk7
CisJCUVDRV9MT0NLX0RFU1RST1koc2MpOworCQlnb3RvIG91dDsKKwl9CisKKwllcnIgPSBidXNf
c2V0dXBfaW50cihkZXYsIHNjLT5pcnFfcmVzX3N0YXR1cywKKwkgICAgSU5UUl9UWVBFX05FVCB8
IElOVFJfTVBTQUZFLAorCSAgICBOVUxMLCBlY2VfaW50cl9zdGF0dXMsIHNjLCAmc2MtPmludHJo
YW5kX3N0YXR1cyk7CisJaWYgKGVycikgeworCQlldGhlcl9pZmRldGFjaChpZnApOworCQlFQ0Vf
TE9DS19ERVNUUk9ZKHNjKTsKKwkJZ290byBvdXQ7CisJfQorCisJZXJyID0gYnVzX3NldHVwX2lu
dHIoZGV2LCBzYy0+aXJxX3Jlc19xZiwgSU5UUl9UWVBFX05FVCB8IElOVFJfTVBTQUZFLAorCSAg
ICBOVUxMLGVjZV9pbnRyX3FmLCBzYywgJnNjLT5pbnRyaGFuZF9xZik7CisKKwlpZiAoZXJyKSB7
CisJCWV0aGVyX2lmZGV0YWNoKGlmcCk7CisJCUVDRV9MT0NLX0RFU1RST1koc2MpOworCQlnb3Rv
IG91dDsKKwl9CisKKwllcnIgPSBidXNfc2V0dXBfaW50cihkZXYsIHNjLT5pcnFfcmVzX3R4LCBJ
TlRSX1RZUEVfTkVUIHwgSU5UUl9NUFNBRkUsCisJICAgIE5VTEwsIGVjZV9pbnRyX3R4LCBzYywg
JnNjLT5pbnRyaGFuZF90eCk7CisKKwlpZiAoZXJyKSB7CisJCWV0aGVyX2lmZGV0YWNoKGlmcCk7
CisJCUVDRV9MT0NLX0RFU1RST1koc2MpOworCQlnb3RvIG91dDsKKwl9CisKKwlFQ0VfVFhMT0NL
X0lOSVQoc2MpOworCUVDRV9SWExPQ0tfSU5JVChzYyk7CisJRUNFX0NMRUFOVVBMT0NLX0lOSVQo
c2MpOworCisJLyogRW5hYmxlIGFsbCBpbnRlcnJ1cHQgc291cmNlcy4gKi8KKwl3cml0ZV80KHNj
LCBJTlRFUlJVUFRfTUFTSywgMHgwMDAwMDAwMCk7CisKKwkvKiBFbmFibGUgcG9ydCAwLiAqLwor
CXdyaXRlXzQoc2MsIFBPUlRfMF9DT05GSUcsIHJlYWRfNChzYywgUE9SVF8wX0NPTkZJRykgJiB+
KFBPUlRfRElTQUJMRSkpOworCisJdGFza3F1ZXVlX3N0YXJ0X3RocmVhZHMoJnNjLT5zY190cSwg
MSwgUElfTkVULCAiJXMgdGFza3EiLAorCSAgICBkZXZpY2VfZ2V0X25hbWV1bml0KHNjLT5kZXYp
KTsKKworb3V0OjsKKwlpZiAoZXJyKQorCQllY2VfZGVhY3RpdmF0ZShkZXYpOworCWlmIChlcnIg
JiYgaWZwKQorCQlpZl9mcmVlKGlmcCk7CisJcmV0dXJuIChlcnIpOworfQorCitzdGF0aWMgaW50
CitlY2VfZGV0YWNoKGRldmljZV90IGRldikKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYyA9IGRl
dmljZV9nZXRfc29mdGMoZGV2KTsKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IHNjLT5pZnA7CisKKwll
Y2VzdG9wKHNjKTsKKwlpZiAoaWZwICE9IE5VTEwpIHsKKwkJZXRoZXJfaWZkZXRhY2goaWZwKTsK
KwkJaWZfZnJlZShpZnApOworCX0KKwllY2VfZGVhY3RpdmF0ZShkZXYpOworCXJldHVybiAoMCk7
Cit9CisKK3N0YXRpYyB2b2lkCitlY2VfZ2V0YWRkcih2b2lkICphcmcsIGJ1c19kbWFfc2VnbWVu
dF90ICpzZWdzLCBpbnQgbnNlZ3MsIGludCBlcnJvcikKK3sKKwl1X2ludDMyX3QgKnBhZGRyOwor
CUtBU1NFUlQobnNlZ3MgPT0gMSwgKCJ3cm9uZyBudW1iZXIgb2Ygc2VnbWVudHMsIHNob3VsZCBi
ZSAxIikpOworCXBhZGRyID0gYXJnOworCSpwYWRkciA9IHNlZ3MtPmRzX2FkZHI7Cit9CisKK3N0
YXRpYyBpbnQKK2VjZV9hbGxvY19kZXNjX2RtYV90eChzdHJ1Y3QgZWNlX3NvZnRjICpzYykKK3sK
KwlpbnQgaTsKKwlpbnQgZXJyb3I7CisKKwkvKiBBbGxvY2F0ZSBhIGJ1c2RtYSB0YWcgYW5kIERN
QSBzYWZlIG1lbW9yeSBmb3IgVFgvUlggZGVzY3JpcHRvcnMuICovCisJZXJyb3IgPSBidXNfZG1h
X3RhZ19jcmVhdGUoc2MtPnNjX3BhcmVudF90YWcsCS8qIHBhcmVudCAqLworCSAgICAxNiwgMCwg
LyogYWxpZ25tZW50LCBib3VuZGFyeSAqLworCSAgICBCVVNfU1BBQ0VfTUFYQUREUl8zMkJJVCwJ
LyogbG93YWRkciAqLworCSAgICBCVVNfU1BBQ0VfTUFYQUREUiwJLyogaGlnaGFkZHIgKi8KKwkg
ICAgTlVMTCwgTlVMTCwJLyogZmlsdGZ1bmMsIGZpbHRmdW5jYXJnICovCisJICAgIHNpemVvZihl
dGhfdHhfZGVzY190KSpFQ0VfTUFYX1RYX0JVRkZFUlMsIC8qIG1heCBzaXplICovCisJICAgIDEs
IC8qbnNlZ21lbnRzICovCisJICAgIHNpemVvZihldGhfdHhfZGVzY190KSpFQ0VfTUFYX1RYX0JV
RkZFUlMsCisJICAgIDAsIC8qIGZsYWdzICovCisJICAgIE5VTEwsIE5VTEwsCS8qIGxvY2tmdW5j
LCBsb2NrZnVuY2FyZyAqLworCSAgICAmc2MtPmRtYXRhZ19kYXRhX3R4KTsgLyogZG1hdCAqLwor
CisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBUWCByaW5nLiAqLworCWVycm9yID0gYnVzX2RtYW1l
bV9hbGxvYyhzYy0+ZG1hdGFnX2RhdGFfdHgsCisJICAgICh2b2lkKiopJihzYy0+ZGVzY190eCks
CisJICAgIEJVU19ETUFfTk9XQUlUIHwgQlVTX0RNQV9aRVJPIHwKKwkgICAgQlVTX0RNQV9DT0hF
UkVOVCwKKwkgICAgJihzYy0+ZG1hbWFwX3JpbmdfdHgpKTsKKworCWlmIChlcnJvcikgeworCQlp
Zl9wcmludGYoc2MtPmlmcCwgImZhaWxlZCB0byBhbGxvY2F0ZSBETUEgbWVtb3J5XG4iKTsKKwkJ
YnVzX2RtYV90YWdfZGVzdHJveShzYy0+ZG1hdGFnX2RhdGFfdHgpOworCQlzYy0+ZG1hdGFnX2Rh
dGFfdHggPSAwOworCQlyZXR1cm4gKEVOWElPKTsKKwl9CisKKwkvKiBMb2FkIFJpbmcgRE1BLiAq
LworCWVycm9yID0gYnVzX2RtYW1hcF9sb2FkKHNjLT5kbWF0YWdfZGF0YV90eCwgc2MtPmRtYW1h
cF9yaW5nX3R4LAorCSAgICBzYy0+ZGVzY190eCwKKwkgICAgc2l6ZW9mKGV0aF90eF9kZXNjX3Qp
KkVDRV9NQVhfVFhfQlVGRkVSUywKKwkgICAgZWNlX2dldGFkZHIsCisJICAgICYoc2MtPnJpbmdf
cGFkZHJfdHgpLCBCVVNfRE1BX05PV0FJVCk7CisKKwlpZiAoZXJyb3IpIHsKKwkJaWZfcHJpbnRm
KHNjLT5pZnAsICJjYW4ndCBsb2FkIGRlc2NyaXB0b3JcbiIpOworCQlidXNfZG1hbWVtX2ZyZWUo
c2MtPmRtYXRhZ19kYXRhX3R4LCBzYy0+ZGVzY190eCwKKwkJICAgIHNjLT5kbWFtYXBfcmluZ190
eCk7CisJCXNjLT5kZXNjX3R4ID0gTlVMTDsKKwkJYnVzX2RtYV90YWdfZGVzdHJveShzYy0+ZG1h
dGFnX2RhdGFfdHgpOworCQlzYy0+ZG1hdGFnX2RhdGFfdHggPSAwOworCQlyZXR1cm4gKEVOWElP
KTsKKwl9CisKKwkvKiBBbGxvY2F0ZSBhIGJ1c2RtYSB0YWcgZm9yIG1idWZzLiBBbGlnbm1lbnQg
aXMgMiBieXRlcyAqLworCWVycm9yID0gYnVzX2RtYV90YWdfY3JlYXRlKHNjLT5zY19wYXJlbnRf
dGFnLAkvKiBwYXJlbnQgKi8KKwkgICAgMSwgMCwJCQkvKiBhbGlnbm1lbnQsIGJvdW5kYXJ5ICov
CisJICAgIEJVU19TUEFDRV9NQVhBRERSXzMyQklULAkvKiBsb3dhZGRyICovCisJICAgIEJVU19T
UEFDRV9NQVhBRERSLAkJLyogaGlnaGFkZHIgKi8KKwkgICAgTlVMTCwgTlVMTCwJCS8qIGZpbHRm
dW5jLCBmaWx0ZnVuY2FyZyAqLworCSAgIE1DTEJZVEVTKk1BWF9GUkFHTUVOVCwJLyogbWF4c2l6
ZSAqLworCSAgIE1BWF9GUkFHTUVOVCwJCSAvKiBuc2VnbWVudHMgKi8KKwkgICAgTUNMQllURVMs
IDAsCQkvKiBtYXhzZWdzeiwgZmxhZ3MgKi8KKwkgICAgTlVMTCwgTlVMTCwJCS8qIGxvY2tmdW5j
LCBsb2NrZnVuY2FyZyAqLworCSAgICAmc2MtPmRtYXRhZ19yaW5nX3R4KTsJLyogZG1hdCAqLwor
CisJaWYgKGVycm9yKSB7CisJCWlmX3ByaW50ZihzYy0+aWZwLCAiZmFpbGVkIHRvIGNyZWF0ZSBi
dXNkbWEgdGFnIGZvciBtYnVmc1xuIik7CisJCXJldHVybiAoRU5YSU8pOworCX0KKworCWZvciAo
aSA9IDA7IGkgPCBFQ0VfTUFYX1RYX0JVRkZFUlM7IGkrKykgeworCQkvKiBDcmVhdGUgZG1hIG1h
cCBmb3IgZWFjaCBkZXNjcmlwdG9yLiAqLworCQllcnJvciA9IGJ1c19kbWFtYXBfY3JlYXRlKHNj
LT5kbWF0YWdfcmluZ190eCwgMCwKKwkJICAgICYoc2MtPnR4X2Rlc2NbaV0uZG1hbWFwKSk7CisJ
CWlmIChlcnJvcikgeworCQkJaWZfcHJpbnRmKHNjLT5pZnAsICJmYWlsZWQgdG8gY3JlYXRlIG1h
cCBmb3IgbWJ1ZlxuIik7CisJCQlyZXR1cm4gKEVOWElPKTsKKwkJfQorCX0KKwlyZXR1cm4gKDAp
OworfQorCitzdGF0aWMgdm9pZAorZWNlX2ZyZWVfZGVzY19kbWFfdHgoc3RydWN0IGVjZV9zb2Z0
YyAqc2MpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRUNFX01BWF9UWF9CVUZGRVJT
OyBpKyspIHsKKwkJaWYgKHNjLT50eF9kZXNjW2ldLmJ1ZmYpIHsKKwkJCW1fZnJlZW0oc2MtPnR4
X2Rlc2NbaV0uYnVmZik7CisJCQlzYy0+dHhfZGVzY1tpXS5idWZmPSAwOworCQl9CisJfQorCisJ
aWYgKHNjLT5kbWFtYXBfcmluZ190eCkgeworCQlidXNfZG1hbWFwX3VubG9hZChzYy0+ZG1hdGFn
X2RhdGFfdHgsIHNjLT5kbWFtYXBfcmluZ190eCk7CisJCWlmIChzYy0+ZGVzY190eCkgeworCQkJ
YnVzX2RtYW1lbV9mcmVlKHNjLT5kbWF0YWdfZGF0YV90eCwKKwkJCSAgICBzYy0+ZGVzY190eCwg
c2MtPmRtYW1hcF9yaW5nX3R4KTsKKwkJfQorCQlzYy0+ZG1hbWFwX3JpbmdfdHggPSAwOworCX0K
KworCWlmIChzYy0+ZG1hdGFnX2RhdGFfdHgpIHsKKwkJYnVzX2RtYV90YWdfZGVzdHJveShzYy0+
ZG1hdGFnX2RhdGFfdHgpOworCQlzYy0+ZG1hdGFnX2RhdGFfdHggPSAwOworCX0KKworCWlmIChz
Yy0+ZG1hdGFnX3JpbmdfdHgpIHsKKwkJZm9yIChpID0gMDsgaTxFQ0VfTUFYX1RYX0JVRkZFUlM7
IGkrKykgeworCQkJYnVzX2RtYW1hcF9kZXN0cm95KHNjLT5kbWF0YWdfcmluZ190eCwKKwkJCSAg
ICBzYy0+dHhfZGVzY1tpXS5kbWFtYXApOworCQkJc2MtPnR4X2Rlc2NbaV0uZG1hbWFwID0gMDsK
KwkJfQorCQlidXNfZG1hX3RhZ19kZXN0cm95KHNjLT5kbWF0YWdfcmluZ190eCk7CisJCXNjLT5k
bWF0YWdfcmluZ190eCA9IDA7CisJfQorfQorCitzdGF0aWMgaW50CitlY2VfYWxsb2NfZGVzY19k
bWFfcngoc3RydWN0IGVjZV9zb2Z0YyAqc2MpCit7CisJaW50IGVycm9yOworCWludCBpOworCisJ
LyogQWxsb2NhdGUgYSBidXNkbWEgdGFnIGFuZCBETUEgc2FmZSBtZW1vcnkgZm9yIFJYIGRlc2Ny
aXB0b3JzLiAqLworCWVycm9yID0gYnVzX2RtYV90YWdfY3JlYXRlKHNjLT5zY19wYXJlbnRfdGFn
LAkvKiBwYXJlbnQgKi8KKwkgICAgMTYsIDAsCQkJLyogYWxpZ25tZW50LCBib3VuZGFyeSAqLwor
CSAgICBCVVNfU1BBQ0VfTUFYQUREUl8zMkJJVCwJLyogbG93YWRkciAqLworCSAgICBCVVNfU1BB
Q0VfTUFYQUREUiwJCS8qIGhpZ2hhZGRyICovCisJICAgIE5VTEwsIE5VTEwsCQkvKiBmaWx0ZnVu
YywgZmlsdGZ1bmNhcmcgKi8KKwkgICAgLyogbWF4c2l6ZSwgbnNlZ21lbnRzICovCisJICAgIHNp
emVvZihldGhfcnhfZGVzY190KSpFQ0VfTUFYX1JYX0JVRkZFUlMsIDEsCisJICAgIC8qIG1heHNl
Z3N6LCBmbGFncyAqLworCSAgICBzaXplb2YoZXRoX3J4X2Rlc2NfdCkqRUNFX01BWF9SWF9CVUZG
RVJTLCAwLAorCSAgICBOVUxMLCBOVUxMLAkJLyogbG9ja2Z1bmMsIGxvY2tmdW5jYXJnICovCisJ
ICAgICZzYy0+ZG1hdGFnX2RhdGFfcngpOwkvKiBkbWF0ICovCisKKwkvKiBBbGxvY2F0ZSBSWCBy
aW5nLiAqLworCWVycm9yID0gYnVzX2RtYW1lbV9hbGxvYyhzYy0+ZG1hdGFnX2RhdGFfcngsCisJ
ICAgICh2b2lkKiopJihzYy0+ZGVzY19yeCksCisJICAgIEJVU19ETUFfTk9XQUlUIHwgQlVTX0RN
QV9aRVJPIHwKKwkgICAgQlVTX0RNQV9DT0hFUkVOVCwKKwkgICAgJihzYy0+ZG1hbWFwX3Jpbmdf
cngpKTsKKworCWlmIChlcnJvcikgeworCQlpZl9wcmludGYoc2MtPmlmcCwgImZhaWxlZCB0byBh
bGxvY2F0ZSBETUEgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIChFTlhJTyk7CisJfQorCisJLyogTG9h
ZCBkbWFtYXAuICovCisJZXJyb3IgPSBidXNfZG1hbWFwX2xvYWQoc2MtPmRtYXRhZ19kYXRhX3J4
LCBzYy0+ZG1hbWFwX3JpbmdfcngsCisJICAgIHNjLT5kZXNjX3J4LAorCSAgICBzaXplb2YoZXRo
X3J4X2Rlc2NfdCkqRUNFX01BWF9SWF9CVUZGRVJTLAorCSAgICBlY2VfZ2V0YWRkciwKKwkgICAg
JihzYy0+cmluZ19wYWRkcl9yeCksIEJVU19ETUFfTk9XQUlUKTsKKworCWlmIChlcnJvcikgewor
CQlpZl9wcmludGYoc2MtPmlmcCwgImNhbid0IGxvYWQgZGVzY3JpcHRvclxuIik7CisJCWJ1c19k
bWFtZW1fZnJlZShzYy0+ZG1hdGFnX2RhdGFfcngsIHNjLT5kZXNjX3J4LAorCQkgICAgc2MtPmRt
YW1hcF9yaW5nX3J4KTsKKwkJYnVzX2RtYV90YWdfZGVzdHJveShzYy0+ZG1hdGFnX2RhdGFfcngp
OworCQlzYy0+ZGVzY19yeCA9IE5VTEw7CisJCXJldHVybiAoRU5YSU8pOworCX0KKworCS8qIEFs
bG9jYXRlIGEgYnVzZG1hIHRhZyBmb3IgbWJ1ZnMuICovCisJZXJyb3IgPSBidXNfZG1hX3RhZ19j
cmVhdGUoc2MtPnNjX3BhcmVudF90YWcsLyogcGFyZW50ICovCisJICAgIDE2LCAwLAkJCS8qIGFs
aWdubWVudCwgYm91bmRhcnkgKi8KKwkgICAgQlVTX1NQQUNFX01BWEFERFJfMzJCSVQsCS8qIGxv
d2FkZHIgKi8KKwkgICAgQlVTX1NQQUNFX01BWEFERFIsCQkvKiBoaWdoYWRkciAqLworCSAgICBO
VUxMLCBOVUxMLAkJLyogZmlsdGZ1bmMsIGZpbHRmdW5jYXJnICovCisJICAgIE1DTEJZVEVTLCAx
LAkJLyogbWF4c2l6ZSwgbnNlZ21lbnRzICovCisJICAgIE1DTEJZVEVTLCAwLAkJLyogbWF4c2Vn
c3osIGZsYWdzICovCisJICAgIE5VTEwsIE5VTEwsCQkvKiBsb2NrZnVuYywgbG9ja2Z1bmNhcmcg
Ki8KKwkgICAgJnNjLT5kbWF0YWdfcmluZ19yeCk7CS8qIGRtYXQgKi8KKworCWlmIChlcnJvcikg
eworCQlpZl9wcmludGYoc2MtPmlmcCwgImZhaWxlZCB0byBjcmVhdGUgYnVzZG1hIHRhZyBmb3Ig
bWJ1ZnNcbiIpOworCQlyZXR1cm4gKEVOWElPKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpPEVDRV9N
QVhfUlhfQlVGRkVSUzsgaSsrKSB7CisJCWVycm9yID0gYnVzX2RtYW1hcF9jcmVhdGUoc2MtPmRt
YXRhZ19yaW5nX3J4LCAwLAorCQkgICAgJnNjLT5yeF9kZXNjW2ldLmRtYW1hcCk7CisJCWlmIChl
cnJvcikgeworCQkJaWZfcHJpbnRmKHNjLT5pZnAsICJmYWlsZWQgdG8gY3JlYXRlIG1hcCBmb3Ig
bWJ1ZlxuIik7CisJCQlyZXR1cm4gKEVOWElPKTsKKwkJfQorCX0KKworCWVycm9yID0gYnVzX2Rt
YW1hcF9jcmVhdGUoc2MtPmRtYXRhZ19yaW5nX3J4LCAwLCAmc2MtPnJ4X3NwYXJlbWFwKTsKKwlp
ZiAoZXJyb3IpIHsKKwkJaWZfcHJpbnRmKHNjLT5pZnAsICJmYWlsZWQgdG8gY3JlYXRlIHNwYXJl
IG1hcFxuIik7CisJCXJldHVybiAoRU5YSU8pOworCX0KKworCXJldHVybiAoMCk7Cit9CisKK3N0
YXRpYyB2b2lkCitlY2VfZnJlZV9kZXNjX2RtYV9yeChzdHJ1Y3QgZWNlX3NvZnRjICpzYykKK3sK
KwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBFQ0VfTUFYX1JYX0JVRkZFUlM7IGkrKykgewor
CQlpZiAoc2MtPnJ4X2Rlc2NbaV0uYnVmZikgeworCQkJbV9mcmVlbShzYy0+cnhfZGVzY1tpXS5i
dWZmKTsKKwkJCXNjLT5yeF9kZXNjW2ldLmJ1ZmY9IDA7CisJCX0KKwl9CisKKwlpZiAoc2MtPmRt
YXRhZ19kYXRhX3J4KSB7CisJCWJ1c19kbWFtYXBfdW5sb2FkKHNjLT5kbWF0YWdfZGF0YV9yeCwg
c2MtPmRtYW1hcF9yaW5nX3J4KTsKKwkJYnVzX2RtYW1lbV9mcmVlKHNjLT5kbWF0YWdfZGF0YV9y
eCwgc2MtPmRlc2NfcngsCisJCSAgICBzYy0+ZG1hbWFwX3JpbmdfcngpOworCQlidXNfZG1hX3Rh
Z19kZXN0cm95KHNjLT5kbWF0YWdfZGF0YV9yeCk7CisJCXNjLT5kbWF0YWdfZGF0YV9yeCA9IDA7
CisJCXNjLT5kbWFtYXBfcmluZ19yeCA9IDA7CisJCXNjLT5kZXNjX3J4ID0gMDsKKwl9CisKKwlp
ZiAoc2MtPmRtYXRhZ19yaW5nX3J4KSB7CisJCWZvciAoaSA9IDA7IGkgPCBFQ0VfTUFYX1JYX0JV
RkZFUlM7IGkrKykKKwkJCWJ1c19kbWFtYXBfZGVzdHJveShzYy0+ZG1hdGFnX3JpbmdfcngsCisJ
CQkgICAgc2MtPnJ4X2Rlc2NbaV0uZG1hbWFwKTsKKwkJYnVzX2RtYW1hcF9kZXN0cm95KHNjLT5k
bWF0YWdfcmluZ19yeCwgc2MtPnJ4X3NwYXJlbWFwKTsKKwkJYnVzX2RtYV90YWdfZGVzdHJveShz
Yy0+ZG1hdGFnX3JpbmdfcngpOworCQlzYy0+ZG1hdGFnX3JpbmdfcnggPSAwOworCX0KK30KKwor
c3RhdGljIGludAorZWNlX25ld19yeGJ1ZihzdHJ1Y3QgZWNlX3NvZnRjICpzYywgc3RydWN0IHJ4
X2Rlc2NfaW5mbyogZGVzY2luZm8pCit7CisJc3RydWN0IG1idWYgKm5ld19tYnVmOworCWJ1c19k
bWFfc2VnbWVudF90IHNlZ1sxXTsKKwlidXNfZG1hbWFwX3QgbWFwOworCWludCBlcnJvcjsKKwlp
bnQgbnNlZ3M7CisJYnVzX2RtYV90YWdfdCB0YWc7CisKKwl0YWcgPSBzYy0+ZG1hdGFnX3Jpbmdf
cng7CisKKwluZXdfbWJ1ZiA9IG1fZ2V0Y2woTV9ET05UV0FJVCwgTVRfREFUQSwgTV9QS1RIRFIp
OworCisJaWYgKG5ld19tYnVmID09IE5VTEwpCisJCXJldHVybiAoRU5PQlVGUyk7CisKKwluZXdf
bWJ1Zi0+bV9sZW4gPSBuZXdfbWJ1Zi0+bV9wa3RoZHIubGVuID0gTUNMQllURVM7CisKKwllcnJv
ciA9IGJ1c19kbWFtYXBfbG9hZF9tYnVmX3NnKHRhZywgc2MtPnJ4X3NwYXJlbWFwLCBuZXdfbWJ1
ZiwKKwkgICAgc2VnLCAmbnNlZ3MsIEJVU19ETUFfTk9XQUlUKTsKKworCUtBU1NFUlQobnNlZ3Mg
PT0gMSwgKCJUb28gbWFueSBzZWdtZW50cyByZXR1cm5lZCEiKSk7CisKKwlpZiAobnNlZ3MgIT0g
MSB8fCBlcnJvcikgeworCQltX2ZyZWUobmV3X21idWYpOworCQlyZXR1cm4gKEVOT0JVRlMpOwor
CX0KKworCWlmIChkZXNjaW5mby0+YnVmZiAhPSBOVUxMKSB7CisJCWJ1c19kbWFtYXBfc3luYyh0
YWcsIGRlc2NpbmZvLT5kbWFtYXAsIEJVU19ETUFTWU5DX1BPU1RSRUFEKTsKKwkJYnVzX2RtYW1h
cF91bmxvYWQodGFnLCBkZXNjaW5mby0+ZG1hbWFwKTsKKwl9CisKKwltYXAgPSBkZXNjaW5mby0+
ZG1hbWFwOworCWRlc2NpbmZvLT5kbWFtYXAgPSBzYy0+cnhfc3BhcmVtYXA7CisJc2MtPnJ4X3Nw
YXJlbWFwID0gbWFwOworCisJYnVzX2RtYW1hcF9zeW5jKHRhZywgZGVzY2luZm8tPmRtYW1hcCwg
QlVTX0RNQVNZTkNfUFJFUkVBRCk7CisKKwlkZXNjaW5mby0+YnVmZiA9IG5ld19tYnVmOworCWRl
c2NpbmZvLT5kZXNjLT5kYXRhX3B0ciA9IHNlZy0+ZHNfYWRkcjsKKwlkZXNjaW5mby0+ZGVzYy0+
bGVuZ3RoID0gc2VnLT5kc19sZW4gLSAyOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGlu
dAorZWNlX2FsbG9jYXRlX2RtYShzdHJ1Y3QgZWNlX3NvZnRjICpzYykKK3sKKwlldGhfdHhfZGVz
Y190ICpkZXNjdHg7CisJZXRoX3J4X2Rlc2NfdCAqZGVzY3J4OworCWludCBpOworCWludCBlcnJv
cjsKKworCS8qIENyZWF0ZSBwYXJlbnQgdGFnIGZvciB0eCBhbmQgcnggKi8KKwllcnJvciA9IGJ1
c19kbWFfdGFnX2NyZWF0ZSgKKwkgICAgYnVzX2dldF9kbWFfdGFnKHNjLT5kZXYpLC8qIHBhcmVu
dCAqLworCSAgICAxLCAwLAkJLyogYWxpZ25tZW50LCBib3VuZGFyeSAqLworCSAgICBCVVNfU1BB
Q0VfTUFYQUREUiwJLyogbG93YWRkciAqLworCSAgICBCVVNfU1BBQ0VfTUFYQUREUiwJLyogaGln
aGFkZHIgKi8KKwkgICAgTlVMTCwgTlVMTCwJLyogZmlsdGVyLCBmaWx0ZXJhcmcgKi8KKwkgICAg
QlVTX1NQQUNFX01BWFNJWkVfMzJCSVQsIDAsLyogbWF4c2l6ZSwgbnNlZ21lbnRzICovCisJICAg
IEJVU19TUEFDRV9NQVhTSVpFXzMyQklULAkvKiBtYXhzZWdzaXplICovCisJICAgIDAsCQkJLyog
ZmxhZ3MgKi8KKwkgICAgTlVMTCwgTlVMTCwJLyogbG9ja2Z1bmMsIGxvY2thcmcgKi8KKwkgICAg
JnNjLT5zY19wYXJlbnRfdGFnKTsKKworCWVjZV9hbGxvY19kZXNjX2RtYV90eChzYyk7CisKKwlm
b3IgKGkgPSAwOyBpIDwgRUNFX01BWF9UWF9CVUZGRVJTOyBpKyspIHsKKwkJZGVzY3R4ID0gKGV0
aF90eF9kZXNjX3QgKikoJnNjLT5kZXNjX3R4W2ldKTsKKwkJbWVtc2V0KGRlc2N0eCwgMCwgc2l6
ZW9mKGV0aF90eF9kZXNjX3QpKTsKKwkJZGVzY3R4LT5sZW5ndGggPSBNQVhfUEFDS0VUX0xFTjsK
KwkJZGVzY3R4LT5jb3duID0gMTsKKwkJaWYgKGkgPT0gRUNFX01BWF9UWF9CVUZGRVJTIC0gMSkK
KwkJCWRlc2N0eC0+ZW9yID0gMTsKKwl9CisKKwllY2VfYWxsb2NfZGVzY19kbWFfcngoc2MpOwor
CisJZm9yIChpID0gMDsgaSA8IEVDRV9NQVhfUlhfQlVGRkVSUzsgaSsrKSB7CisJCWRlc2NyeCA9
ICYoc2MtPmRlc2NfcnhbaV0pOworCQltZW1zZXQoZGVzY3J4LCAwLCBzaXplb2YoZXRoX3J4X2Rl
c2NfdCkpOworCQlzYy0+cnhfZGVzY1tpXS5kZXNjID0gZGVzY3J4OworCQlzYy0+cnhfZGVzY1tp
XS5idWZmID0gMDsKKwkJZWNlX25ld19yeGJ1ZihzYywgJihzYy0+cnhfZGVzY1tpXSkpOworCisJ
CWlmIChpID09IEVDRV9NQVhfUlhfQlVGRkVSUyAtIDEpCisJCQlkZXNjcngtPmVvciA9IDE7CisJ
fQorCXNjLT50eF9wcm9kID0gMDsKKwlzYy0+dHhfY29ucyA9IDA7CisJc2MtPmxhc3RfcnggPSAw
OworCXNjLT5kZXNjX2N1cnJfdHggPSAwOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGlu
dAorZWNlX2FjdGl2YXRlKGRldmljZV90IGRldikKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYzsK
KwlpbnQgZXJyOworCXVpbnQzMl90IG1hY19wb3J0X2NvbmZpZzsKKwlzdHJ1Y3QgaWZuZXQgKmlm
cDsKKworCXNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCWlmcCA9IHNjLT5pZnA7CisKKwlp
bml0aWFsX3N3aXRjaF9jb25maWcgPSByZWFkXzQoc2MsIFNXSVRDSF9DT05GSUcpOworCWluaXRp
YWxfY3B1X2NvbmZpZyA9IHJlYWRfNChzYywgQ1BVX1BPUlRfQ09ORklHKTsKKwlpbml0aWFsX3Bv
cnQwX2NvbmZpZyA9IHJlYWRfNChzYywgTUFDX1BPUlRfMF9DT05GSUcpOworCWluaXRpYWxfcG9y
dDFfY29uZmlnID0gcmVhZF80KHNjLCBNQUNfUE9SVF8xX0NPTkZJRyk7CisKKwkvKiBEaXNhYmxl
IFBvcnQgMCAqLworCW1hY19wb3J0X2NvbmZpZyA9IHJlYWRfNChzYywgTUFDX1BPUlRfMF9DT05G
SUcpOworCW1hY19wb3J0X2NvbmZpZyB8PSAoUE9SVF9ESVNBQkxFKTsKKwl3cml0ZV80KHNjLCBN
QUNfUE9SVF8wX0NPTkZJRywgbWFjX3BvcnRfY29uZmlnKTsKKworCS8qIERpc2FibGUgUG9ydCAx
ICovCisJbWFjX3BvcnRfY29uZmlnID0gcmVhZF80KHNjLCBNQUNfUE9SVF8xX0NPTkZJRyk7CisJ
bWFjX3BvcnRfY29uZmlnIHw9IChQT1JUX0RJU0FCTEUpOworCXdyaXRlXzQoc2MsIE1BQ19QT1JU
XzFfQ09ORklHLCBtYWNfcG9ydF9jb25maWcpOworCisJZXJyID0gZWNlX2FsbG9jYXRlX2RtYShz
Yyk7CisJaWYgKGVycikgeworCQlpZl9wcmludGYoc2MtPmlmcCwgImZhaWxlZCBhbGxvY2F0aW5n
IGRtYVxuIik7CisJCWdvdG8gb3V0OworCX0KKworCXdyaXRlXzQoc2MsIFRTX0RFU0NSSVBUT1Jf
UE9JTlRFUiwgc2MtPnJpbmdfcGFkZHJfdHgpOworCXdyaXRlXzQoc2MsIFRTX0RFU0NSSVBUT1Jf
QkFTRV9BRERSLCBzYy0+cmluZ19wYWRkcl90eCk7CisKKwl3cml0ZV80KHNjLCBGU19ERVNDUklQ
VE9SX1BPSU5URVIsIHNjLT5yaW5nX3BhZGRyX3J4KTsKKwl3cml0ZV80KHNjLCBGU19ERVNDUklQ
VE9SX0JBU0VfQUREUiwgc2MtPnJpbmdfcGFkZHJfcngpOworCisJd3JpdGVfNChzYywgRlNfRE1B
X0NPTlRST0wsIDEpOworCisJcmV0dXJuICgwKTsKK291dDoKKwlyZXR1cm4gKEVOWElPKTsKKwor
fQorCitzdGF0aWMgdm9pZAorZWNlX2RlYWN0aXZhdGUoZGV2aWNlX3QgZGV2KQoreworCXN0cnVj
dCBlY2Vfc29mdGMgKnNjOworCisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisKKwlpZiAo
c2MtPmludHJoYW5kKQorCQlidXNfdGVhcmRvd25faW50cihkZXYsIHNjLT5pcnFfcmVzX3JlYywg
c2MtPmludHJoYW5kKTsKKworCXNjLT5pbnRyaGFuZCA9IDA7CisKKwlpZiAoc2MtPmludHJoYW5k
X3FmKQorCQlidXNfdGVhcmRvd25faW50cihkZXYsIHNjLT5pcnFfcmVzX3FmLCBzYy0+aW50cmhh
bmRfcWYpOworCisJc2MtPmludHJoYW5kX3FmID0gMDsKKworCWJ1c19nZW5lcmljX2RldGFjaChz
Yy0+ZGV2KTsKKwlpZiAoc2MtPm1paWJ1cykKKwkJZGV2aWNlX2RlbGV0ZV9jaGlsZChzYy0+ZGV2
LCBzYy0+bWlpYnVzKTsKKwlpZiAoc2MtPm1lbV9yZXMpCisJCWJ1c19yZWxlYXNlX3Jlc291cmNl
KGRldiwgU1lTX1JFU19JT1BPUlQsCisJCSAgICBybWFuX2dldF9yaWQoc2MtPm1lbV9yZXMpLCBz
Yy0+bWVtX3Jlcyk7CisJc2MtPm1lbV9yZXMgPSAwOworCisJaWYgKHNjLT5pcnFfcmVzX3JlYykK
KwkJYnVzX3JlbGVhc2VfcmVzb3VyY2UoZGV2LCBTWVNfUkVTX0lSUSwKKwkJICAgIHJtYW5fZ2V0
X3JpZChzYy0+aXJxX3Jlc19yZWMpLCBzYy0+aXJxX3Jlc19yZWMpOworCisJaWYgKHNjLT5pcnFf
cmVzX3FmKQorCQlidXNfcmVsZWFzZV9yZXNvdXJjZShkZXYsIFNZU19SRVNfSVJRLAorCQkgICAg
cm1hbl9nZXRfcmlkKHNjLT5pcnFfcmVzX3FmKSwgc2MtPmlycV9yZXNfcWYpOworCisJaWYgKHNj
LT5pcnFfcmVzX3FmKQorCQlidXNfcmVsZWFzZV9yZXNvdXJjZShkZXYsIFNZU19SRVNfSVJRLAor
CQkgICAgcm1hbl9nZXRfcmlkKHNjLT5pcnFfcmVzX3N0YXR1cyksIHNjLT5pcnFfcmVzX3N0YXR1
cyk7CisKKwlzYy0+aXJxX3Jlc19yZWMgPSAwOworCXNjLT5pcnFfcmVzX3FmID0gMDsKKwlzYy0+
aXJxX3Jlc19zdGF0dXMgPSAwOworCUVDRV9UWExPQ0tfREVTVFJPWShzYyk7CisJRUNFX1JYTE9D
S19ERVNUUk9ZKHNjKTsKKworCWVjZV9mcmVlX2Rlc2NfZG1hX3R4KHNjKTsKKwllY2VfZnJlZV9k
ZXNjX2RtYV9yeChzYyk7CisKKwlyZXR1cm47Cit9CisKKy8qCisgKiBDaGFuZ2UgbWVkaWEgYWNj
b3JkaW5nIHRvIHJlcXVlc3QuCisgKi8KK3N0YXRpYyBpbnQKK2VjZV9pZm1lZGlhX3VwZChzdHJ1
Y3QgaWZuZXQgKmlmcCkKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYyA9IGlmcC0+aWZfc29mdGM7
CisJc3RydWN0IG1paV9kYXRhICptaWk7CisJaW50IGVycm9yOworCisJbWlpID0gZGV2aWNlX2dl
dF9zb2Z0YyhzYy0+bWlpYnVzKTsKKwlFQ0VfTE9DSyhzYyk7CisJZXJyb3IgPSBtaWlfbWVkaWFj
aGcobWlpKTsKKwlFQ0VfVU5MT0NLKHNjKTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworLyoKKyAq
IE5vdGlmeSB0aGUgd29ybGQgd2hpY2ggbWVkaWEgd2UncmUgdXNpbmcuCisgKi8KK3N0YXRpYyB2
b2lkCitlY2VfaWZtZWRpYV9zdHMoc3RydWN0IGlmbmV0ICppZnAsIHN0cnVjdCBpZm1lZGlhcmVx
ICppZm1yKQoreworCXN0cnVjdCBlY2Vfc29mdGMgKnNjID0gaWZwLT5pZl9zb2Z0YzsKKwlzdHJ1
Y3QgbWlpX2RhdGEgKm1paTsKKworCW1paSA9IGRldmljZV9nZXRfc29mdGMoc2MtPm1paWJ1cyk7
CisJRUNFX0xPQ0soc2MpOworCW1paV9wb2xsc3RhdChtaWkpOworCWlmbXItPmlmbV9hY3RpdmUg
PSBtaWktPm1paV9tZWRpYV9hY3RpdmU7CisJaWZtci0+aWZtX3N0YXR1cyA9IG1paS0+bWlpX21l
ZGlhX3N0YXR1czsKKwlFQ0VfVU5MT0NLKHNjKTsKK30KKworc3RhdGljIHZvaWQKK2VjZV90aWNr
KHZvaWQgKnhzYykKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYyA9IHhzYzsKKwlzdHJ1Y3QgbWlp
X2RhdGEgKm1paTsKKwlpbnQgYWN0aXZlOworCisJbWlpID0gZGV2aWNlX2dldF9zb2Z0YyhzYy0+
bWlpYnVzKTsKKwlhY3RpdmUgPSBtaWktPm1paV9tZWRpYV9hY3RpdmU7CisJbWlpX3RpY2sobWlp
KTsKKworCS8qCisJICogU2NoZWR1bGUgYW5vdGhlciB0aW1lb3V0IG9uZSBzZWNvbmQgZnJvbSBu
b3cuCisJICovCisJY2FsbG91dF9yZXNldCgmc2MtPnRpY2tfY2gsIGh6LCBlY2VfdGljaywgc2Mp
OworfQorCitzdGF0aWMgdWludDMyX3QKK3JlYWRfbWFjX2VudHJ5KHN0cnVjdCBlY2Vfc29mdGMg
KmVjLAorICAgIHVpbnQ4X3QgKm1hY19yZXN1bHQsCisgICAgaW50IGZpcnN0KQoreworCXVpbnQz
Ml90IGlpOworCXN0cnVjdCBhcmxfdGFibGVfZW50cnlfdCBlbnRyeTsKKwl1aW50MzJfdCAqZW50
cnlfdmFsOworCXdyaXRlXzQoZWMsIEFSTF9UQUJMRV9BQ0NFU1NfQ09OVFJPTF8wLCAwKTsKKwl3
cml0ZV80KGVjLCBBUkxfVEFCTEVfQUNDRVNTX0NPTlRST0xfMSwgMCk7CisJd3JpdGVfNChlYywg
QVJMX1RBQkxFX0FDQ0VTU19DT05UUk9MXzIsIDApOworCWlmIChmaXJzdCkKKwkJd3JpdGVfNChl
YywgQVJMX1RBQkxFX0FDQ0VTU19DT05UUk9MXzAsIDB4MSk7CisJZWxzZQorCQl3cml0ZV80KGVj
LCBBUkxfVEFCTEVfQUNDRVNTX0NPTlRST0xfMCwgMHgyKTsKKworCWZvciAoaWkgPSAwOyBpaSA8
IDB4MTAwMDsgaWkrKykKKwkJaWYgKHJlYWRfNChlYywgQVJMX1RBQkxFX0FDQ0VTU19DT05UUk9M
XzEpICYgKDB4MSkpCisJCQlicmVhazsKKworCWVudHJ5X3ZhbCA9ICh1aW50MzJfdCopICgmZW50
cnkpOworCWVudHJ5X3ZhbFswXSA9IHJlYWRfNChlYywgQVJMX1RBQkxFX0FDQ0VTU19DT05UUk9M
XzEpOworCWVudHJ5X3ZhbFsxXSA9IHJlYWRfNChlYywgQVJMX1RBQkxFX0FDQ0VTU19DT05UUk9M
XzIpOworCisJaWYgKG1hY19yZXN1bHQpCisJCW1lbWNweShtYWNfcmVzdWx0LCBlbnRyeS5tYWNf
YWRkciwgRVRIRVJfQUREUl9MRU4pOworCisJcmV0dXJuIChlbnRyeS50YWJsZV9lbmQpOworfQor
CitzdGF0aWMgdWludDMyX3QKK3dyaXRlX2FybF90YWJsZV9lbnRyeShzdHJ1Y3QgZWNlX3NvZnRj
ICplYywKKyAgICB1aW50MzJfdCBmaWx0ZXIsCisgICAgdWludDMyX3Qgdmxhbl9tYWMsCisgICAg
dWludDMyX3Qgdmxhbl9naWQsCisgICAgdWludDMyX3QgYWdlX2ZpZWxkLAorICAgIHVpbnQzMl90
IHBvcnRfbWFwLAorICAgIGNvbnN0IHVpbnQ4X3QgKm1hY19hZGRyKQoreworCXVpbnQzMl90IGlp
OworCXVpbnQzMl90ICplbnRyeV92YWw7CisJc3RydWN0IGFybF90YWJsZV9lbnRyeV90IGVudHJ5
OworCisJbWVtc2V0KCZlbnRyeSwgMCwgc2l6ZW9mKGVudHJ5KSk7CisKKwllbnRyeS5maWx0ZXIg
PSBmaWx0ZXI7CisJZW50cnkudmxhbl9tYWMgPSB2bGFuX21hYzsKKwllbnRyeS52bGFuX2dpZCA9
IHZsYW5fZ2lkOworCWVudHJ5LmFnZV9maWVsZCA9IGFnZV9maWVsZDsKKwllbnRyeS5wb3J0X21h
cCA9IHBvcnRfbWFwOworCW1lbWNweShlbnRyeS5tYWNfYWRkciwgbWFjX2FkZHIsIEVUSEVSX0FE
RFJfTEVOKTsKKworCWVudHJ5X3ZhbCA9ICh1aW50MzJfdCopICgmZW50cnkpOworCisJd3JpdGVf
NChlYywgQVJMX1RBQkxFX0FDQ0VTU19DT05UUk9MXzAsIDApOworCXdyaXRlXzQoZWMsIEFSTF9U
QUJMRV9BQ0NFU1NfQ09OVFJPTF8xLCAwKTsKKwl3cml0ZV80KGVjLCBBUkxfVEFCTEVfQUNDRVNT
X0NPTlRST0xfMiwgMCk7CisKKwl3cml0ZV80KGVjLCBBUkxfVEFCTEVfQUNDRVNTX0NPTlRST0xf
MSwgZW50cnlfdmFsWzBdKTsKKwl3cml0ZV80KGVjLCBBUkxfVEFCTEVfQUNDRVNTX0NPTlRST0xf
MiwgZW50cnlfdmFsWzFdKTsKKworCXdyaXRlXzQoZWMsIEFSTF9UQUJMRV9BQ0NFU1NfQ09OVFJP
TF8wLCBBUkxfV1JJVEVfQ09NTUFORCk7CisKKwlmb3IgKGlpID0gMDsgaWkgPCAweDEwMDA7IGlp
KyspCisJCWlmIChyZWFkXzQoZWMsIEFSTF9UQUJMRV9BQ0NFU1NfQ09OVFJPTF8xKSAmCisJCSAg
ICBBUkxfQ09NTUFORF9DT01QTEVURSkKKwkJCXJldHVybiAoMSk7IC8qIFdyaXRlIE9LLiAqLwor
CisJLyogV3JpdGUgZmFpbGVkLiAqLworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyB2b2lkCity
ZW1vdmVfbWFjX2VudHJ5KHN0cnVjdCBlY2Vfc29mdGMgKnNjLAorICAgIHVpbnQ4X3QgKm1hYykK
K3sKKworCS8qIEludmFsaWQgYWdlX2ZpZWxkIG1lYW4gZXJhc2UgdGhpcyBlbnRyeS4gKi8KKwl3
cml0ZV9hcmxfdGFibGVfZW50cnkoc2MsIDAsIDEsIFZMQU4wX0dST1VQX0lELAorCSAgICBJTlZB
TElEX0VOVFJZLCBWTEFOMF9HUk9VUCwKKwkgICAgbWFjKTsKK30KKworc3RhdGljIHZvaWQKK2Fk
ZF9tYWNfZW50cnkoc3RydWN0IGVjZV9zb2Z0YyAqc2MsCisgICAgdWludDhfdCAqbWFjKQorewor
CisJd3JpdGVfYXJsX3RhYmxlX2VudHJ5KHNjLCAwLCAxLCBWTEFOMF9HUk9VUF9JRCwKKwkgICAg
TkVXX0VOVFJZLCBWTEFOMF9HUk9VUCwKKwkgICAgbWFjKTsKK30KKworLyoqCisgKiBUaGUgYmVo
YXZpb3Igb2YgQVJMIHRhYmxlIHJlYWRpbmcgYW5kIGRlbGV0aW9uIGlzIG5vdCB3ZWxsIGRlZmlu
ZWQKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uLiBUbyBiZSBzYWZlLCBhbGwgbWFjIGFkZHJlc3Nl
cyBhcmUgcHV0IHRvIGEKKyAqIGxpc3QsIHRoZW4gZGVsZXRlZC4KKyAqCisgKi8KK3N0YXRpYyB2
b2lkCitjbGVhcl9tYWNfZW50cmllcyhzdHJ1Y3QgZWNlX3NvZnRjICplYywgaW50IGluY2x1ZGVf
dGhpc19tYWMpCit7CisJaW50IHRhYmxlX2VuZDsKKwlzdHJ1Y3QgbWFjX2xpc3QgKiB0ZW1wOwor
CXN0cnVjdCBtYWNfbGlzdCAqIG1hY19saXN0X2hlYWRlcjsKKwlzdHJ1Y3QgbWFjX2xpc3QgKiBj
dXJyZW50OworCWNoYXIgbWFjW0VUSEVSX0FERFJfTEVOXTsKKworCWN1cnJlbnQgPSAwOworCW1h
Y19saXN0X2hlYWRlciA9IDA7CisKKwl0YWJsZV9lbmQgPSByZWFkX21hY19lbnRyeShlYywgbWFj
LCAxKTsKKwl3aGlsZSAoIXRhYmxlX2VuZCkgeworCQlpZiAoIWluY2x1ZGVfdGhpc19tYWMgJiYK
KwkJICAgIG1lbWNtcChtYWMsIHZsYW4wX21hYywgRVRIRVJfQUREUl9MRU4pID09IDApIHsKKwkJ
CS8qIFJlYWQgbmV4dCBlbnRyeS4gKi8KKwkJCXRhYmxlX2VuZCA9IHJlYWRfbWFjX2VudHJ5KGVj
LCBtYWMsIDApOworCQkJY29udGludWU7CisJCX0KKworCQl0ZW1wID0gKHN0cnVjdCBtYWNfbGlz
dCopbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWFjX2xpc3QpLAorCQkgICAgTV9ERVZCVUYsCisJCSAg
ICBNX05PV0FJVCB8IE1fWkVSTyk7CisJCW1lbWNweSh0ZW1wLT5tYWNfYWRkciwgbWFjLCBFVEhF
Ul9BRERSX0xFTik7CisJCXRlbXAtPm5leHQgPSAwOworCQlpZiAobWFjX2xpc3RfaGVhZGVyKSB7
CisJCQljdXJyZW50LT5uZXh0ID0gdGVtcDsKKwkJCWN1cnJlbnQgPSB0ZW1wOworCQl9IGVsc2Ug
eworCQkJbWFjX2xpc3RfaGVhZGVyID0gdGVtcDsKKwkJCWN1cnJlbnQgPSB0ZW1wOworCQl9CisJ
CS8qIFJlYWQgbmV4dCBFbnRyeSAqLworCQl0YWJsZV9lbmQgPSByZWFkX21hY19lbnRyeShlYywg
bWFjLCAwKTsKKwl9CisKKwljdXJyZW50ID0gbWFjX2xpc3RfaGVhZGVyOworCisJd2hpbGUgKGN1
cnJlbnQpIHsKKwkJcmVtb3ZlX21hY19lbnRyeShlYywgY3VycmVudC0+bWFjX2FkZHIpOworCQl0
ZW1wID0gY3VycmVudDsKKwkJY3VycmVudCA9IGN1cnJlbnQtPm5leHQ7CisJCWZyZWUodGVtcCwg
TV9ERVZCVUYpOworCX0KK30KKworc3RhdGljIGludAorY29uZmlndXJlX2xhbl9wb3J0KHN0cnVj
dCBlY2Vfc29mdGMgKnNjLCBpbnQgcGh5X3R5cGUpCit7CisJdWludDMyX3Qgc3dfY29uZmlnOwor
CXVpbnQzMl90IG1hY19wb3J0X2NvbmZpZzsKKworCS8qCisJICogQ29uZmlndXJlIHN3aXRjaAor
CSAqLworCXN3X2NvbmZpZyA9IHJlYWRfNChzYywgU1dJVENIX0NPTkZJRyk7CisJLyogRW5hYmxl
IGZhc3QgYWdpbmcuICovCisJc3dfY29uZmlnIHw9IEZBU1RfQUdJTkc7CisJLyogRW5hYmxlIElW
TCBsZWFybmluZy4gKi8KKwlzd19jb25maWcgfD0gSVZMX0xFQVJOSU5HOworCS8qIERpc2FibGUg
aGFyZHdhcmUgTkFULiAqLworCXN3X2NvbmZpZyAmPSB+KEhBUkRXQVJFX05BVCk7CisKKwlzd19j
b25maWcgfD0gU0tJUF9MMl9MT09LVVBfUE9SVF8wIHwgU0tJUF9MMl9MT09LVVBfUE9SVF8xfCBO
SUNfTU9ERTsKKworCXdyaXRlXzQoc2MsIFNXSVRDSF9DT05GSUcsIHN3X2NvbmZpZyk7CisKKwlz
d19jb25maWcgPSByZWFkXzQoc2MsIFNXSVRDSF9DT05GSUcpOworCisJbWFjX3BvcnRfY29uZmln
ID0gcmVhZF80KHNjLCBNQUNfUE9SVF8wX0NPTkZJRyk7CisKKwlpZiAoIShtYWNfcG9ydF9jb25m
aWcgJiAweDEpIHx8IChtYWNfcG9ydF9jb25maWcgJiAweDIpKQorCQlpZl9wcmludGYoc2MtPmlm
cCwgIkxpbmsgRG93blxuIik7CisJZWxzZQorCQl3cml0ZV80KHNjLCBNQUNfUE9SVF8wX0NPTkZJ
RywgbWFjX3BvcnRfY29uZmlnKTsKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgdm9pZAorc2V0
X3B2aWQoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIGludCBwb3J0MCwgaW50IHBvcnQxLCBpbnQgY3B1
KQoreworCXVpbnQzMl90IHZhbDsKKwl2YWwgPSByZWFkXzQoc2MsIFZMQU5fUE9SVF9QVklEKSAm
ICh+KDB4NyA8PCAwKSk7CisJd3JpdGVfNChzYywgVkxBTl9QT1JUX1BWSUQsIHZhbCk7CisJdmFs
ID0gcmVhZF80KHNjLCBWTEFOX1BPUlRfUFZJRCkgfCAoKHBvcnQwKSAmIDB4MDcpOworCXdyaXRl
XzQoc2MsIFZMQU5fUE9SVF9QVklELCB2YWwpOworCXZhbCA9IHJlYWRfNChzYywgVkxBTl9QT1JU
X1BWSUQpICYgKH4oMHg3IDw8IDQpKTsKKwl3cml0ZV80KHNjLCBWTEFOX1BPUlRfUFZJRCwgdmFs
KTsKKwl2YWwgPSByZWFkXzQoc2MsIFZMQU5fUE9SVF9QVklEKSB8ICgoKHBvcnQxKSAmIDB4MDcp
IDw8IDQpOworCXdyaXRlXzQoc2MsIFZMQU5fUE9SVF9QVklELCB2YWwpOworCisJdmFsID0gcmVh
ZF80KHNjLCBWTEFOX1BPUlRfUFZJRCkgJiAofigweDcgPDwgOCkpOworCXdyaXRlXzQoc2MsIFZM
QU5fUE9SVF9QVklELCB2YWwpOworCXZhbCA9IHJlYWRfNChzYywgVkxBTl9QT1JUX1BWSUQpIHwg
KCgoY3B1KSAmIDB4MDcpIDw8IDgpOworCXdyaXRlXzQoc2MsIFZMQU5fUE9SVF9QVklELCB2YWwp
OworCit9CisKKy8qIFZMQU4gcmVsYXRlZCBmdW5jdGlvbnMgKi8KK3N0YXRpYyB2b2lkCitzZXRf
dmxhbl92aWQoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIGludCB2bGFuKQoreworCWNvbnN0IHVpbnQz
Ml90IHJlZ3NbXSA9IHsKKwkgICAgVkxBTl9WSURfMF8xLAorCSAgICBWTEFOX1ZJRF8wXzEsCisJ
ICAgIFZMQU5fVklEXzJfMywKKwkgICAgVkxBTl9WSURfMl8zLAorCSAgICBWTEFOX1ZJRF80XzUs
CisJICAgIFZMQU5fVklEXzRfNSwKKwkgICAgVkxBTl9WSURfNl83LAorCSAgICBWTEFOX1ZJRF82
XzcKKwl9OworCisJY29uc3QgaW50IHZpZHNbXSA9IHsKKwkgICAgVkxBTjBfVklELAorCSAgICBW
TEFOMV9WSUQsCisJICAgIFZMQU4yX1ZJRCwKKwkgICAgVkxBTjNfVklELAorCSAgICBWTEFONF9W
SUQsCisJICAgIFZMQU41X1ZJRCwKKwkgICAgVkxBTjZfVklELAorCSAgICBWTEFON19WSUQKKwl9
OworCisJdWludDMyX3QgdmFsOworCXVpbnQzMl90IHJlZzsKKwlpbnQgdmlkOworCisJcmVnID0g
cmVnc1t2bGFuXTsKKwl2aWQgPSB2aWRzW3ZsYW5dOworCisJaWYgKHZsYW4gJiAxKSB7CisJCXZh
bCA9IHJlYWRfNChzYywgcmVnKTsKKwkJd3JpdGVfNChzYywgcmVnLCB2YWwgJiAofigweEZGRiA8
PCAwKSkpOworCQl2YWwgPSByZWFkXzQoc2MsIHJlZyk7CisJCXdyaXRlXzQoc2MsIHJlZywgdmFs
fCgodmlkICYgMHhGRkYpIDw8IDApKTsKKwl9IGVsc2UgeworCQl2YWwgPSByZWFkXzQoc2MsIHJl
Zyk7CisJCXdyaXRlXzQoc2MsIHJlZywgdmFsICYgKH4oMHhGRkYgPDwgMTIpKSk7CisJCXZhbCA9
IHJlYWRfNChzYywgcmVnKTsKKwkJd3JpdGVfNChzYywgcmVnLCB2YWx8KCh2aWQgJiAweEZGRikg
PDwgMTIpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitzZXRfdmxhbl9tZW1iZXIoc3RydWN0IGVj
ZV9zb2Z0YyAqc2MsIGludCB2bGFuKQoreworCXVuc2lnbmVkIGNoYXIgc2hpZnQ7CisJdWludDMy
X3QgdmFsOworCWludCBncm91cDsKKwljb25zdCBpbnQgZ3JvdXBzW10gPSB7CisJICAgIFZMQU4w
X0dST1VQLAorCSAgICBWTEFOMV9HUk9VUCwKKwkgICAgVkxBTjJfR1JPVVAsCisJICAgIFZMQU4z
X0dST1VQLAorCSAgICBWTEFONF9HUk9VUCwKKwkgICAgVkxBTjVfR1JPVVAsCisJICAgIFZMQU42
X0dST1VQLAorCSAgICBWTEFON19HUk9VUAorCX07CisKKwlncm91cCA9IGdyb3Vwc1t2bGFuXTsK
KworCXNoaWZ0ID0gdmxhbiozOworCXZhbCA9IHJlYWRfNChzYywgVkxBTl9NRU1CRVJfUE9SVF9N
QVApICYgKH4oMHg3IDw8IHNoaWZ0KSk7CisJd3JpdGVfNChzYywgVkxBTl9NRU1CRVJfUE9SVF9N
QVAsIHZhbCk7CisJdmFsID0gcmVhZF80KHNjLCBWTEFOX01FTUJFUl9QT1JUX01BUCk7CisJd3Jp
dGVfNChzYywgVkxBTl9NRU1CRVJfUE9SVF9NQVAsIHZhbCB8ICgoZ3JvdXAgJiAweDcpIDw8IHNo
aWZ0KSk7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRfdmxhbl90YWcoc3RydWN0IGVjZV9zb2Z0YyAq
c2MsIGludCB2bGFuKQoreworCXVuc2lnbmVkIGNoYXIgc2hpZnQ7CisJdWludDMyX3QgdmFsOwor
CisJaW50IHRhZyA9IDA7CisKKwlzaGlmdCA9IHZsYW4qMzsKKwl2YWwgPSByZWFkXzQoc2MsIFZM
QU5fVEFHX1BPUlRfTUFQKSAmICh+KDB4NyA8PCBzaGlmdCkpOworCXdyaXRlXzQoc2MsIFZMQU5f
VEFHX1BPUlRfTUFQLCB2YWwpOworCXZhbCA9IHJlYWRfNChzYywgVkxBTl9UQUdfUE9SVF9NQVAp
OworCXdyaXRlXzQoc2MsIFZMQU5fVEFHX1BPUlRfTUFQLCB2YWwgfCAoKHRhZyAmIDB4NykgPDwg
c2hpZnQpKTsKK30KKworc3RhdGljIGludAorY29uZmlndXJlX2NwdV9wb3J0KHN0cnVjdCBlY2Vf
c29mdGMgKnNjKQoreworCXVpbnQzMl90IGNwdV9wb3J0X2NvbmZpZzsKKwlpbnQgaTsKKworCWNw
dV9wb3J0X2NvbmZpZyA9IHJlYWRfNChzYywgQ1BVX1BPUlRfQ09ORklHKTsKKwkvKiBTQSBsZWFy
bmluZyBEaXNhYmxlICovCisJY3B1X3BvcnRfY29uZmlnIHw9IChTQV9MRUFSTklOR19ESVNBQkxF
KTsKKwkvKiBzZXQgZGF0YSBvZmZzZXQgKyAyICovCisJY3B1X3BvcnRfY29uZmlnICY9IH4oMSA8
PCAzMSk7CisKKwl3cml0ZV80KHNjLCBDUFVfUE9SVF9DT05GSUcsIGNwdV9wb3J0X2NvbmZpZyk7
CisKKwlpZiAoIXdyaXRlX2FybF90YWJsZV9lbnRyeShzYywgMCwgMSwgVkxBTjBfR1JPVVBfSUQs
CisJICAgIFNUQVRJQ19FTlRSWSwgVkxBTjBfR1JPVVAsCisJICAgIHZsYW4wX21hYykpCisJCXJl
dHVybiAoMSk7CisKKwlzZXRfcHZpZChzYywgUE9SVDBfUFZJRCwgUE9SVDFfUFZJRCwgQ1BVX1BP
UlRfUFZJRCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCXNldF92bGFuX3ZpZChz
YywgaSk7CisJCXNldF92bGFuX21lbWJlcihzYywgaSk7CisJCXNldF92bGFuX3RhZyhzYywgaSk7
CisJfQorCisJLyogZGlzYWJsZSBhbGwgaW50ZXJydXB0IHN0YXR1cyBzb3VyY2VzICovCisJd3Jp
dGVfNChzYywgSU5URVJSVVBUX01BU0ssIDB4ZmZmZjFmZmYpOworCisJLyogY2xlYXIgcHJldmlv
dXMgaW50ZXJydXB0IHNvdXJjZXMgKi8KKwl3cml0ZV80KHNjLCBJTlRFUlJVUFRfU1RBVFVTLCAw
eDAwMDAxRkZGKTsKKworCXdyaXRlXzQoc2MsIFRTX0RNQV9DT05UUk9MLCAwKTsKKwl3cml0ZV80
KHNjLCBGU19ETUFfQ09OVFJPTCwgMCk7CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAor
aGFyZHdhcmVfaW5pdChzdHJ1Y3QgZWNlX3NvZnRjICpzYykKK3sKKwlpbnQgc3RhdHVzID0gMDsK
KwlzdGF0aWMgaW50IGd3X3BoeV90eXBlOworCisJZ3dfcGh5X3R5cGUgPSBnZXRfcGh5X3R5cGUo
c2MpOworCS8qIEN1cnJlbnRseSBvbmx5IGljX3BsdXMgcGh5IGlzIHN1cHBvcnRlZC4gKi8KKwlp
ZiAoZ3dfcGh5X3R5cGUgIT0gSUNfUExVU19QSFkpIHsKKwkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2
LCAiUEhZIHR5cGUgaXMgbm90IHN1cHBvcnRlZCAoJWQpXG4iLAorCQkgICAgZ3dfcGh5X3R5cGUp
OworCQlyZXR1cm4gKC0xKTsKKwl9CisJc3RhdHVzID0gY29uZmlndXJlX2xhbl9wb3J0KHNjLCBn
d19waHlfdHlwZSk7CisJY29uZmlndXJlX2NwdV9wb3J0KHNjKTsKKwlyZXR1cm4gKDApOworfQor
CitzdGF0aWMgdm9pZAorc2V0X21hY19hZGRyZXNzKHN0cnVjdCBlY2Vfc29mdGMgKnNjLCBjb25z
dCBjaGFyICptYWMsIGludCBtYWNfbGVuKQoreworCisJLyogSW52YWxpZCBhZ2VfZmllbGQgbWVh
biBlcmFzZSB0aGlzIGVudHJ5LiAqLworCXdyaXRlX2FybF90YWJsZV9lbnRyeShzYywgMCwgMSwg
VkxBTjBfR1JPVVBfSUQsCisJICAgIElOVkFMSURfRU5UUlksIFZMQU4wX0dST1VQLAorCSAgICBt
YWMpOworCW1lbWNweSh2bGFuMF9tYWMsIG1hYywgRVRIRVJfQUREUl9MRU4pOworCisJd3JpdGVf
YXJsX3RhYmxlX2VudHJ5KHNjLCAwLCAxLCBWTEFOMF9HUk9VUF9JRCwKKwkgICAgU1RBVElDX0VO
VFJZLCBWTEFOMF9HUk9VUCwKKwkgICAgbWFjKTsKK30KKworc3RhdGljIHZvaWQKK2VjZV9zZXRf
bWFjKHN0cnVjdCBlY2Vfc29mdGMgKnNjLCB1X2NoYXIgKmVhZGRyKQoreworCW1lbWNweSh2bGFu
MF9tYWMsIGVhZGRyLCBFVEhFUl9BRERSX0xFTik7CisJc2V0X21hY19hZGRyZXNzKHNjLCBlYWRk
ciwgRVRIRVJfQUREUl9MRU4pOworfQorCisvKgorICogVE9ETzogdGhlIGRldmljZSBkb2Vzbid0
IGhhdmUgTUFDIHN0b3JlZCwgd2Ugc2hvdWxkIHJlYWQgdGhlCisgKiBjb25maWd1cmF0aW9uIHN0
b3JlZCBpbiBGTEFTSCwgYnV0IHRoZSBmb3JtYXQgZGVwZW5kcyBvbiB0aGUKKyAqIGJvb3Rsb2Fk
ZXIgdXNlZC4qCisgKi8KK3N0YXRpYyBpbnQKK2VjZV9nZXRfbWFjKHN0cnVjdCBlY2Vfc29mdGMg
KnNjLCB1X2NoYXIgKmVhZGRyKQoreworCXJldHVybiAoRU5YSU8pOworfQorCitzdGF0aWMgdm9p
ZAorZWNlX2ludHJfcnhfbG9ja2VkKHN0cnVjdCBlY2Vfc29mdGMgKnNjLCBpbnQgY291bnQpCit7
CisJc3RydWN0IGlmbmV0ICppZnAgPSBzYy0+aWZwOworCXN0cnVjdCBtYnVmICptYjsKKwlzdHJ1
Y3QgcnhfZGVzY19pbmZvICpyeGRlc2M7CisJZXRoX3J4X2Rlc2NfdCAqZGVzYzsKKworCWludCBm
c3NkX2N1cnI7CisJaW50IGZzc2Q7CisJaW50IGk7CisJaW50IGlkeDsKKwlpbnQgcnhjb3VudDsK
Kwl1aW50MzJfdCBzdGF0dXM7CisKKwlmc3NkX2N1cnIgPSByZWFkXzQoc2MsIEZTX0RFU0NSSVBU
T1JfUE9JTlRFUik7CisKKwlmc3NkID0gKGZzc2RfY3VyciAtICh1aW50MzJfdClzYy0+cmluZ19w
YWRkcl9yeCk+PjQ7CisKKwlkZXNjID0gc2MtPnJ4X2Rlc2Nbc2MtPmxhc3RfcnhdLmRlc2M7CisK
KwkvKiBQcmVwYXJlIHRvIHJlYWQgdGhlIGRhdGEgaW4gdGhlIHJpbmcuICovCisJYnVzX2RtYW1h
cF9zeW5jKHNjLT5kbWF0YWdfcmluZ19yeCwKKwkgICAgc2MtPmRtYW1hcF9yaW5nX3J4LAorCSAg
ICBCVVNfRE1BU1lOQ19QT1NUUkVBRCB8IEJVU19ETUFTWU5DX1BPU1RXUklURSk7CisKKwlpZiAo
ZnNzZCA+IHNjLT5sYXN0X3J4KQorCQlyeGNvdW50ID0gZnNzZCAtIHNjLT5sYXN0X3J4OworCWVs
c2UgaWYgKGZzc2QgPCBzYy0+bGFzdF9yeCkKKwkJcnhjb3VudCA9IChFQ0VfTUFYX1JYX0JVRkZF
UlMgLSBzYy0+bGFzdF9yeCkgKyBmc3NkOworCWVsc2UgeworCQlpZiAoZGVzYy0+Y293biA9PSAw
KQorCQkJcmV0dXJuOworCQllbHNlCisJCQlyeGNvdW50ID0gRUNFX01BWF9SWF9CVUZGRVJTOwor
CX0KKworCWZvciAoaT0gMDsgaSA8IHJ4Y291bnQ7IGkrKykgeworCQlzdGF0dXMgPSBkZXNjLT5j
b3duOworCQlpZiAoIXN0YXR1cykKKwkJCWJyZWFrOworCisJCWlkeCA9IHNjLT5sYXN0X3J4Owor
CQlyeGRlc2MgPSAmc2MtPnJ4X2Rlc2NbaWR4XTsKKwkJbWIgPSByeGRlc2MtPmJ1ZmY7CisKKwkJ
aWYgKGRlc2MtPmxlbmd0aCA8IEVUSEVSX01JTl9MRU4gLSBFVEhFUl9DUkNfTEVOIHx8CisJCSAg
ICBkZXNjLT5sZW5ndGggPiBFVEhFUl9NQVhfTEVOIC0gRVRIRVJfQ1JDX0xFTiArCisJCSAgICBF
VEhFUl9WTEFOX0VOQ0FQX0xFTikgeworCQkJaWZwLT5pZl9pZXJyb3JzKys7CisJCQlkZXNjLT5j
b3duID0gMDsKKwkJCWRlc2MtPmxlbmd0aCA9IE1DTEJZVEVTIC0gMjsKKwkJCS8qIEludmFsaWQg
cGFja2V0LCBza2lwIGFuZCBwcm9jZXNzIG5leHQKKwkJCSAqIHBhY2tldC4KKwkJCSAqLworCQkJ
Y29udGludWU7CisJCX0KKworCQlpZiAoZWNlX25ld19yeGJ1ZihzYywgcnhkZXNjKSAhPSAwKSB7
CisJCQlpZnAtPmlmX2lxZHJvcHMrKzsKKwkJCWRlc2MtPmNvd24gPSAwOworCQkJZGVzYy0+bGVu
Z3RoID0gTUNMQllURVMgLSAyOworCQkJYnJlYWs7CisJCX0KKworCQkvKioKKwkJICogVGhlIGRl
dmljZSB3aWxsIHdyaXRlIHRvIGFkZHJyZXNzICsgMiBTbyB3ZSBuZWVkIHRvIGFkanVzdAorCQkg
KiB0aGUgYWRkcmVzcyBhZnRlciB0aGUgcGFja2V0IGlzIHJlY2VpdmVkLgorCQkgKi8KKwkJbWIt
Pm1fZGF0YSArPSAyOworCQltYi0+bV9sZW4gPSBtYi0+bV9wa3RoZHIubGVuID0gZGVzYy0+bGVu
Z3RoOworCisJCW1iLT5tX2ZsYWdzIHw9IE1fUEtUSERSOworCQltYi0+bV9wa3RoZHIucmN2aWYg
PSBpZnA7CisJCWlmICgoaWZwLT5pZl9jYXBlbmFibGUgJiBJRkNBUF9SWENTVU0pICE9IDApIHsK
KwkJCS8qY2hlY2sgZm9yIHZhbGlkIGNoZWNrc3VtKi8KKwkJCWlmICggKCFkZXNjLT5sNGYpICAm
JiAoZGVzYy0+cHJvdCAhPSAzKSkgeworCQkJCW1iLT5tX3BrdGhkci5jc3VtX2ZsYWdzIHw9IENT
VU1fSVBfQ0hFQ0tFRDsKKwkJCQltYi0+bV9wa3RoZHIuY3N1bV9mbGFncyB8PSBDU1VNX0lQX1ZB
TElEOworCQkJCW1iLT5tX3BrdGhkci5jc3VtX2RhdGEgPSAweGZmZmY7CisJCQl9CisJCX0KKwkJ
RUNFX1JYVU5MT0NLKHNjKTsKKwkJKCppZnAtPmlmX2lucHV0KShpZnAsIG1iKTsKKwkJRUNFX1JY
TE9DSyhzYyk7CisKKwkJZGVzYy0+Y293biA9IDA7CisJCWRlc2MtPmxlbmd0aCA9IE1DTEJZVEVT
IC0gMjsKKworCQlidXNfZG1hbWFwX3N5bmMoc2MtPmRtYXRhZ19yaW5nX3J4LAorCQkgICAgc2Mt
PmRtYW1hcF9yaW5nX3J4LAorCQkgICAgQlVTX0RNQVNZTkNfUFJFUkVBRCB8IEJVU19ETUFTWU5D
X1BSRVdSSVRFKTsKKworCQlpZiAoc2MtPmxhc3RfcnggPT0gRUNFX01BWF9SWF9CVUZGRVJTIC0g
MSkKKwkJCXNjLT5sYXN0X3J4ID0gMDsKKwkJZWxzZQorCQkJc2MtPmxhc3RfcngrKzsKKworCQlk
ZXNjID0gc2MtPnJ4X2Rlc2Nbc2MtPmxhc3RfcnhdLmRlc2M7CisJfQorCisJLyogU3luYyB1cGRh
dGVkIGZsYWdzLiAqLworCWJ1c19kbWFtYXBfc3luYyhzYy0+ZG1hdGFnX3JpbmdfcngsCisJICAg
IHNjLT5kbWFtYXBfcmluZ19yeCwKKwkgICAgQlVTX0RNQVNZTkNfUFJFUkVBRCB8IEJVU19ETUFT
WU5DX1BSRVdSSVRFKTsKKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK2VjZV9pbnRyX3Rh
c2sodm9pZCAqYXJnLCBpbnQgcGVuZGluZyBfX3VudXNlZCkKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRj
ICpzYyA9IGFyZzsKKwlFQ0VfUlhMT0NLKHNjKTsKKwllY2VfaW50cl9yeF9sb2NrZWQoc2MsIC0x
KTsKKwlFQ0VfUlhVTkxPQ0soc2MpOworfQorCitzdGF0aWMgdm9pZAorZWNlX2ludHIodm9pZCAq
eHNjKQoreworCXN0cnVjdCBlY2Vfc29mdGMgKnNjID0geHNjOworCXN0cnVjdCBpZm5ldCAqaWZw
ID0gc2MtPmlmcDsKKworCWlmICgoaWZwLT5pZl9kcnZfZmxhZ3MgJiBJRkZfRFJWX1JVTk5JTkcp
ID09IDApIHsKKwkJd3JpdGVfNChzYywgRlNfRE1BX0NPTlRST0wsIDApOworCQlyZXR1cm47CisJ
fQorCisJdGFza3F1ZXVlX2VucXVldWUoc2MtPnNjX3RxLCAmc2MtPnNjX2ludHJfdGFzayk7CisK
KwlpZiAoIUlGUV9EUlZfSVNfRU1QVFkoJmlmcC0+aWZfc25kKSkKKwkJdGFza3F1ZXVlX2VucXVl
dWUoc2MtPnNjX3RxLCAmc2MtPnNjX3R4X3Rhc2spOworfQorCitzdGF0aWMgdm9pZAorZWNlX2lu
dHJfc3RhdHVzKHZvaWQgKnhzYykKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYyA9IHhzYzsKKwlz
dHJ1Y3QgaWZuZXQgKmlmcCA9IHNjLT5pZnA7CisJaW50IHN0YXQ7CisKKwlzdGF0ID0gcmVhZF80
KHNjLCBJTlRFUlJVUFRfU1RBVFVTKTsKKworCXdyaXRlXzQoc2MsIElOVEVSUlVQVF9TVEFUVVMs
IHN0YXQpOworCisJaWYgKChpZnAtPmlmX2Rydl9mbGFncyAmIElGRl9EUlZfUlVOTklORykgIT0g
MCkgeworCQlpZiAoKHN0YXQgJiBFUlJPUl9NQVNLKSAhPSAwKQorCQkJaWZwLT5pZl9pcWRyb3Bz
Kys7CisJfQorfQorCitzdGF0aWMgdm9pZAorZWNlX2NsZWFudXBfbG9ja2VkKHN0cnVjdCBlY2Vf
c29mdGMgKnNjKQoreworCWV0aF90eF9kZXNjX3QgKmRlc2M7CisKKwlpZiAoc2MtPnR4X2NvbnMg
PT0gc2MtPnR4X3Byb2QpIHJldHVybjsKKworCS8qIFByZXBhcmUgdG8gcmVhZCB0aGUgcmluZyAo
b3duZXIgYml0KS4gKi8KKwlidXNfZG1hbWFwX3N5bmMoc2MtPmRtYXRhZ19yaW5nX3R4LAorCSAg
ICBzYy0+ZG1hbWFwX3JpbmdfdHgsCisJICAgIEJVU19ETUFTWU5DX1BPU1RSRUFEIHwgQlVTX0RN
QVNZTkNfUE9TVFdSSVRFKTsKKworCXdoaWxlIChzYy0+dHhfY29ucyAhPSBzYy0+dHhfcHJvZCkg
eworCQlkZXNjID0gc2MtPnR4X2Rlc2Nbc2MtPnR4X2NvbnNdLmRlc2M7CisJCWlmIChkZXNjLT5j
b3duICE9IDApIHsKKwkJCXN0cnVjdCB0eF9kZXNjX2luZm8gKnRkID0gJihzYy0+dHhfZGVzY1tz
Yy0+dHhfY29uc10pOworCQkJLyogV2UgYXJlIGZpbmlzaGVkIHdpdGggdGhpcyBkZXNjcmlwdG9y
IC4uLiAqLworCQkJYnVzX2RtYW1hcF9zeW5jKHNjLT5kbWF0YWdfZGF0YV90eCwgdGQtPmRtYW1h
cCwKKwkJCSAgICBCVVNfRE1BU1lOQ19QT1NUV1JJVEUpOworCQkJLyogLi4uIGFuZCB1bmxvYWQs
IHNvIHdlIGNhbiByZXVzZS4gKi8KKwkJCWJ1c19kbWFtYXBfdW5sb2FkKHNjLT5kbWF0YWdfZGF0
YV90eCwgdGQtPmRtYW1hcCk7CisJCQltX2ZyZWVtKHRkLT5idWZmKTsKKwkJCXRkLT5idWZmID0g
MDsKKwkJCXNjLT50eF9jb25zID0gKHNjLT50eF9jb25zICsgMSkgJSBFQ0VfTUFYX1RYX0JVRkZF
UlM7CisJCX0gZWxzZSB7CisJCQlicmVhazsKKwkJfQorCX0KKworfQorCitzdGF0aWMgdm9pZAor
ZWNlX2NsZWFudXBfdGFzayh2b2lkICphcmcsIGludCBwZW5kaW5nIF9fdW51c2VkKQoreworCXN0
cnVjdCBlY2Vfc29mdGMgKnNjID0gYXJnOworCUVDRV9DTEVBTlVQTE9DSyhzYyk7CisJZWNlX2Ns
ZWFudXBfbG9ja2VkKHNjKTsKKwlFQ0VfQ0xFQU5VUFVOTE9DSyhzYyk7Cit9CisKK3N0YXRpYyB2
b2lkCitlY2VfaW50cl90eCh2b2lkICp4c2MpCit7CisJc3RydWN0IGVjZV9zb2Z0YyAqc2MgPSB4
c2M7CisJc3RydWN0IGlmbmV0ICppZnAgPSBzYy0+aWZwOworCWlmICgoaWZwLT5pZl9kcnZfZmxh
Z3MgJiBJRkZfRFJWX1JVTk5JTkcpID09IDApIHsKKwkJLyogVGhpcyBzaG91bGQgbm90IGhhcHBl
biwgc3RvcCBETUEuICovCisJCXdyaXRlXzQoc2MsIEZTX0RNQV9DT05UUk9MLCAwKTsKKwkJcmV0
dXJuOworCX0KKwl0YXNrcXVldWVfZW5xdWV1ZShzYy0+c2NfdHEsICZzYy0+c2NfY2xlYW51cF90
YXNrKTsKK30KKworc3RhdGljIHZvaWQKK2VjZV9pbnRyX3FmKHZvaWQgKnhzYykKK3sKKwlzdHJ1
Y3QgZWNlX3NvZnRjICpzYyA9IHhzYzsKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IHNjLT5pZnA7CisJ
aWYgKChpZnAtPmlmX2Rydl9mbGFncyAmIElGRl9EUlZfUlVOTklORykgPT0gMCkgeworCQkvKiBU
aGlzIHNob3VsZCBub3QgaGFwcGVuLCBzdG9wIERNQS4gKi8KKwkJd3JpdGVfNChzYywgRlNfRE1B
X0NPTlRST0wsIDApOworCQlyZXR1cm47CisJfQorCXRhc2txdWV1ZV9lbnF1ZXVlKHNjLT5zY190
cSwgJnNjLT5zY19pbnRyX3Rhc2spOworCXdyaXRlXzQoc2MsIEZTX0RNQV9DT05UUk9MLCAxKTsK
K30KKworLyoKKyAqIFJlc2V0IGFuZCBpbml0aWFsaXplIHRoZSBjaGlwCisgKi8KK3N0YXRpYyB2
b2lkCitlY2Vpbml0X2xvY2tlZCh2b2lkICp4c2MpCit7CisJc3RydWN0IGVjZV9zb2Z0YyAqc2Mg
PSB4c2M7CisJc3RydWN0IGlmbmV0ICppZnAgPSBzYy0+aWZwOworCXN0cnVjdCBtaWlfZGF0YSAq
bWlpOworCXVpbnQzMl90IGNmZ19yZWc7CisJdWludDMyX3QgY3B1X3BvcnRfY29uZmlnOworCXVp
bnQzMl90IG1hY19wb3J0X2NvbmZpZzsKKworCXdoaWxlICgxKSB7CisJCWNmZ19yZWcgPSByZWFk
XzQoc2MsIEJJU1RfUkVTVUxUX1RFU1RfMCk7CisJCWlmICgoY2ZnX3JlZyAmICgxPDwxNykpKQor
CQkJYnJlYWs7CisJCURFTEFZKDEwMCk7CisJfQorCS8qIFNldCB0byBkZWZhdWx0IHZhbHVlcy4g
Ki8KKwl3cml0ZV80KHNjLCBTV0lUQ0hfQ09ORklHLCAweDAwN0FBN0ExKTsKKwl3cml0ZV80KHNj
LCBNQUNfUE9SVF8wX0NPTkZJRywgMHgwMDQyM0QwMCk7CisJd3JpdGVfNChzYywgTUFDX1BPUlRf
MV9DT05GSUcsIDB4MDA0MjNEODApOworCXdyaXRlXzQoc2MsIENQVV9QT1JUX0NPTkZJRywgMHgw
MDRDMDAwMCk7CisKKwloYXJkd2FyZV9pbml0KHNjKTsKKworCW1hY19wb3J0X2NvbmZpZyA9IHJl
YWRfNChzYywgTUFDX1BPUlRfMF9DT05GSUcpOworCisJIC8qIEVuYWJsZSBQb3J0IDAgKi8KKwlt
YWNfcG9ydF9jb25maWcgJj0gKH4oUE9SVF9ESVNBQkxFKSk7CisJd3JpdGVfNChzYywgTUFDX1BP
UlRfMF9DT05GSUcsIG1hY19wb3J0X2NvbmZpZyk7CisKKwljcHVfcG9ydF9jb25maWcgPSByZWFk
XzQoc2MsIENQVV9QT1JUX0NPTkZJRyk7CisJLyogRW5hYmxlIENQVS4gKi8KKwljcHVfcG9ydF9j
b25maWcgJj0gfihQT1JUX0RJU0FCTEUpOworCXdyaXRlXzQoc2MsIENQVV9QT1JUX0NPTkZJRywg
Y3B1X3BvcnRfY29uZmlnKTsKKworCS8qCisJICogU2V0ICdydW5uaW5nJyBmbGFnLCBhbmQgY2xl
YXIgb3V0cHV0IGFjdGl2ZSBmbGFnCisJICogYW5kIGF0dGVtcHQgdG8gc3RhcnQgdGhlIG91dHB1
dAorCSAqLworCWlmcC0+aWZfZHJ2X2ZsYWdzIHw9IElGRl9EUlZfUlVOTklORzsKKwlpZnAtPmlm
X2Rydl9mbGFncyAmPSB+SUZGX0RSVl9PQUNUSVZFOworCisJbWlpID0gZGV2aWNlX2dldF9zb2Z0
YyhzYy0+bWlpYnVzKTsKKwltaWlfcG9sbHN0YXQobWlpKTsKKwkvKiBFbmFibGUgRE1BLiAqLwor
CXdyaXRlXzQoc2MsIEZTX0RNQV9DT05UUk9MLCAxKTsKKworCWNhbGxvdXRfcmVzZXQoJnNjLT50
aWNrX2NoLCBoeiwgZWNlX3RpY2ssIHNjKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2VjZV9l
bmNhcChzdHJ1Y3QgZWNlX3NvZnRjICpzYywgc3RydWN0IG1idWYgKm0wKQoreworCXN0cnVjdCBp
Zm5ldCAqaWZwOworCWJ1c19kbWFfc2VnbWVudF90IHNlZ3NbTUFYX0ZSQUdNRU5UXTsKKwlidXNf
ZG1hbWFwX3QgbWFwcDsKKwlldGhfdHhfZGVzY190ICpkZXNjID0gMDsKKwlpbnQgY3N1bV9mbGFn
czsKKwlpbnQgZGVzY19ubzsKKwlpbnQgZXJyb3I7CisJaW50IG5zZWdzOworCWludCBzZWc7CisK
KwlpZnAgPSBzYy0+aWZwOworCisJLyogRmV0Y2ggdW51c2VkIG1hcCAqLworCW1hcHAgPSBzYy0+
dHhfZGVzY1tzYy0+dHhfcHJvZF0uZG1hbWFwOworCisJZXJyb3IgPSBidXNfZG1hbWFwX2xvYWRf
bWJ1Zl9zZyhzYy0+ZG1hdGFnX3JpbmdfdHgsIG1hcHAsCisJICAgIG0wLCBzZWdzLCAmbnNlZ3Ms
CisJICAgIEJVU19ETUFfTk9XQUlUKTsKKworCWlmIChlcnJvciAhPSAwKSB7CisJCWJ1c19kbWFt
YXBfdW5sb2FkKHNjLT5kbWF0YWdfcmluZ190eCwgbWFwcCk7CisJCXJldHVybiAoKGVycm9yICE9
IDApID8gZXJyb3IgOiAtMSk7CisJfQorCisJZGVzYyA9ICYoc2MtPmRlc2NfdHhbc2MtPmRlc2Nf
Y3Vycl90eF0pOworCXNjLT50eF9kZXNjW3NjLT50eF9wcm9kXS5kZXNjID0gZGVzYzsKKwlzYy0+
dHhfZGVzY1tzYy0+dHhfcHJvZF0uYnVmZiA9IG0wOworCWRlc2Nfbm8gPSBzYy0+ZGVzY19jdXJy
X3R4OworCisJZm9yIChzZWcgPSAwOyBzZWcgPCBuc2Vnczsgc2VnKyspIHsKKwkJaWYgKGRlc2Mt
PmNvd24gPT0gMCApIHsKKwkJCWlmX3ByaW50ZihpZnAsICJFUlJPUjogZGVzY3JpcHRvciBpcyBz
dGlsbCB1c2VkXG4iKTsKKwkJCXJldHVybiAoLTEpOworCQl9CisKKwkJZGVzYy0+bGVuZ3RoID0g
c2Vnc1tzZWddLmRzX2xlbjsKKwkJZGVzYy0+ZGF0YV9wdHIgPSBzZWdzW3NlZ10uZHNfYWRkcjsK
KworCQlpZiAoc2VnID09IDApIHsKKwkJCWRlc2MtPmZzID0gMTsKKwkJfSBlbHNlIHsKKwkJCWRl
c2MtPmZzID0gMDsKKwkJfQorCQlpZiAoc2VnID09IG5zZWdzIC0gMSkgeworCQkJZGVzYy0+bHMg
PSAxOworCQl9IGVsc2UgeworCQkJZGVzYy0+bHMgPSAwOworCQl9CisKKwkJY3N1bV9mbGFncyA9
IG0wLT5tX3BrdGhkci5jc3VtX2ZsYWdzOworCisJCWRlc2MtPmZyID0gIDE7CisJCWRlc2MtPnBt
YXAgPSAgMTsKKwkJZGVzYy0+aW5zdiA9ICAwOworCQlkZXNjLT5pY28gPSAwOworCQlkZXNjLT50
Y28gPSAwOworCQlkZXNjLT51Y28gPSAwOworCQlkZXNjLT5pbnRlcnJ1cHQgPSAxOworCisJCWlm
IChjc3VtX2ZsYWdzICYgQ1NVTV9JUCkgeworCQkJZGVzYy0+aWNvID0gMTsKKwkJCWlmIChjc3Vt
X2ZsYWdzICYgQ1NVTV9UQ1ApCisJCQkJZGVzYy0+dGNvID0gMTsKKwkJCWlmIChjc3VtX2ZsYWdz
ICYgQ1NVTV9VRFApCisJCQkJZGVzYy0+dWNvID0gMTsKKwkJfQorCisJCWRlc2MrKzsKKwkJc2Mt
PmRlc2NfY3Vycl90eCA9IChzYy0+ZGVzY19jdXJyX3R4ICsgMSkgJSBFQ0VfTUFYX1RYX0JVRkZF
UlM7CisJCWlmIChzYy0+ZGVzY19jdXJyX3R4ID09IDApIHsKKwkJCWRlc2MgPSAoZXRoX3R4X2Rl
c2NfdCAqKSYoc2MtPmRlc2NfdHhbMF0pOworCQl9CisJfQorCisJZGVzYyA9IHNjLT50eF9kZXNj
W3NjLT50eF9wcm9kXS5kZXNjOworCisJc2MtPnR4X3Byb2QgPSAoc2MtPnR4X3Byb2QgKyAxKSAl
IEVDRV9NQVhfVFhfQlVGRkVSUzsKKworCS8qCisJICogQWZ0ZXIgYWxsIGRlc2NyaXB0b3JzIGFy
ZSBzZXQsIHdlIHNldCB0aGUgZmxhZ3MgdG8gc3RhcnQgdGhlCisJICogc2VuZGluZyBwcm9jZXMu
CisJICovCisJZm9yIChzZWcgPSAwOyBzZWcgPCBuc2Vnczsgc2VnKyspIHsKKwkJZGVzYy0+Y293
biA9IDA7CisJCWRlc2MrKzsKKwkJZGVzY19ubyA9IChkZXNjX25vICsgMSkgJSBFQ0VfTUFYX1RY
X0JVRkZFUlM7CisJCWlmIChkZXNjX25vID09IDApCisJCQlkZXNjID0gKGV0aF90eF9kZXNjX3Qg
KikmKHNjLT5kZXNjX3R4WzBdKTsKKwl9CisKKwlidXNfZG1hbWFwX3N5bmMoc2MtPmRtYXRhZ19k
YXRhX3R4LCBtYXBwLCBCVVNfRE1BU1lOQ19QUkVXUklURSk7CisJcmV0dXJuICgwKTsKK30KKwor
LyoKKyAqIGRlcXVldSBwYWNrZXRzIGFuZCB0cmFuc21pdAorICovCitzdGF0aWMgdm9pZAorZWNl
c3RhcnRfbG9ja2VkKHN0cnVjdCBpZm5ldCAqaWZwKQoreworCXN0cnVjdCBlY2Vfc29mdGMgKnNj
OworCXN0cnVjdCBtYnVmICptMDsKKwl1aW50MzJfdCBxdWV1ZWQgPSAwOworCisJc2MgPSBpZnAt
PmlmX3NvZnRjOworCWlmICgoaWZwLT5pZl9kcnZfZmxhZ3MgJiAoSUZGX0RSVl9SVU5OSU5HIHwg
SUZGX0RSVl9PQUNUSVZFKSkgIT0KKwkgICAgSUZGX0RSVl9SVU5OSU5HKQorCQlyZXR1cm47CisK
KwlidXNfZG1hbWFwX3N5bmMoc2MtPmRtYXRhZ19yaW5nX3R4LAorCSAgICBzYy0+ZG1hbWFwX3Jp
bmdfdHgsCisJICAgIEJVU19ETUFTWU5DX1BPU1RSRUFEIHwgQlVTX0RNQVNZTkNfUE9TVFdSSVRF
KTsKKworCWZvciAoOzspIHsKKwkJLyogR2V0IHBhY2tldCBmcm9tIHRoZSBxdWV1ZSAqLworCQlJ
Rl9ERVFVRVVFKCZpZnAtPmlmX3NuZCwgbTApOworCQlpZiAobTAgPT0gTlVMTCkKKwkJCWJyZWFr
OworCQlpZiAoZWNlX2VuY2FwKHNjLCBtMCkpIHsKKwkJCUlGX1BSRVBFTkQoJmlmcC0+aWZfc25k
LCBtMCk7CisJCQlpZnAtPmlmX2Rydl9mbGFncyB8PSBJRkZfRFJWX09BQ1RJVkU7CisJCQlicmVh
azsKKwkJfQorCQlxdWV1ZWQrKzsKKwkJQlBGX01UQVAoaWZwLCBtMCk7CisJfQorCWlmIChxdWV1
ZWQpIHsKKwkJYnVzX2RtYW1hcF9zeW5jKHNjLT5kbWF0YWdfcmluZ190eCwgc2MtPmRtYW1hcF9y
aW5nX3R4LAorCQkgICAgQlVTX0RNQVNZTkNfUFJFUkVBRHxCVVNfRE1BU1lOQ19QUkVXUklURSk7
CisJCXdyaXRlXzQoc2MsIFRTX0RNQV9DT05UUk9MLCAxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lk
CitlY2Vpbml0KHZvaWQgKnhzYykKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYyA9IHhzYzsKKwlF
Q0VfTE9DSyhzYyk7CisJZWNlaW5pdF9sb2NrZWQoc2MpOworCUVDRV9VTkxPQ0soc2MpOworfQor
CitzdGF0aWMgdm9pZAorZWNlX3R4X3Rhc2sodm9pZCAqYXJnLCBpbnQgcGVuZGluZyBfX3VudXNl
ZCkKK3sKKwlzdHJ1Y3QgaWZuZXQgKmlmcDsKKwlpZnAgPSAoc3RydWN0IGlmbmV0ICopYXJnOwor
CWVjZXN0YXJ0KGlmcCk7Cit9CisKK3N0YXRpYyB2b2lkCitlY2VzdGFydChzdHJ1Y3QgaWZuZXQg
KmlmcCkKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYyA9IGlmcC0+aWZfc29mdGM7CisJRUNFX1RY
TE9DSyhzYyk7CisJZWNlc3RhcnRfbG9ja2VkKGlmcCk7CisJRUNFX1RYVU5MT0NLKHNjKTsKK30K
KworLyoKKyAqIFR1cm4gb2ZmIGludGVycnVwdHMsIGFuZCBzdG9wIHRoZSBuaWMuICBDYW4gYmUg
Y2FsbGVkIHdpdGggc2MtPmlmcAorICogTlVMTCBzbyBiZSBjYXJlZnVsLgorICovCitzdGF0aWMg
dm9pZAorZWNlc3RvcChzdHJ1Y3QgZWNlX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgaWZuZXQgKmlm
cCA9IHNjLT5pZnA7CisJdWludDMyX3QgbWFjX3BvcnRfY29uZmlnOworCisJd3JpdGVfNChzYywg
VFNfRE1BX0NPTlRST0wsIDApOworCXdyaXRlXzQoc2MsIEZTX0RNQV9DT05UUk9MLCAwKTsKKwor
CWlmIChpZnApCisJCWlmcC0+aWZfZHJ2X2ZsYWdzICY9IH4oSUZGX0RSVl9SVU5OSU5HIHwgSUZG
X0RSVl9PQUNUSVZFKTsKKworCWNhbGxvdXRfc3RvcCgmc2MtPnRpY2tfY2gpOworCisJLypEaXNh
YmxlIFBvcnQgMCAqLworCW1hY19wb3J0X2NvbmZpZyA9IHJlYWRfNChzYywgTUFDX1BPUlRfMF9D
T05GSUcpOworCW1hY19wb3J0X2NvbmZpZyB8PSAoUE9SVF9ESVNBQkxFKTsKKwl3cml0ZV80KHNj
LCBNQUNfUE9SVF8wX0NPTkZJRywgbWFjX3BvcnRfY29uZmlnKTsKKworCS8qRGlzYWJsZSBQb3J0
IDEgKi8KKwltYWNfcG9ydF9jb25maWcgPSByZWFkXzQoc2MsIE1BQ19QT1JUXzFfQ09ORklHKTsK
KwltYWNfcG9ydF9jb25maWcgfD0gKFBPUlRfRElTQUJMRSk7CisJd3JpdGVfNChzYywgTUFDX1BP
UlRfMV9DT05GSUcsIG1hY19wb3J0X2NvbmZpZyk7CisKKwkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1
cHQgc3RhdHVzIHNvdXJjZXMuICovCisJd3JpdGVfNChzYywgSU5URVJSVVBUX01BU0ssIDB4MDAw
MDFGRkYpOworCisJLyogQ2xlYXIgcHJldmlvdXMgaW50ZXJydXB0IHNvdXJjZXMuICovCisJd3Jp
dGVfNChzYywgSU5URVJSVVBUX1NUQVRVUywgMHgwMDAwMUZGRik7CisKKwl3cml0ZV80KHNjLCBT
V0lUQ0hfQ09ORklHLCBpbml0aWFsX3N3aXRjaF9jb25maWcpOworCXdyaXRlXzQoc2MsIENQVV9Q
T1JUX0NPTkZJRywgaW5pdGlhbF9jcHVfY29uZmlnKTsKKwl3cml0ZV80KHNjLCBNQUNfUE9SVF8w
X0NPTkZJRywgaW5pdGlhbF9wb3J0MF9jb25maWcpOworCXdyaXRlXzQoc2MsIE1BQ19QT1JUXzFf
Q09ORklHLCBpbml0aWFsX3BvcnQxX2NvbmZpZyk7CisKKwljbGVhcl9tYWNfZW50cmllcyhzYywg
MSk7Cit9CisKK3N0YXRpYyB2b2lkCitlY2VfcmVzdGFydChzdHJ1Y3QgZWNlX3NvZnRjICpzYykK
K3sKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IHNjLT5pZnA7CisKKwlpZnAtPmlmX2Rydl9mbGFncyB8
PSBJRkZfRFJWX1JVTk5JTkc7CisJaWZwLT5pZl9kcnZfZmxhZ3MgJj0gfklGRl9EUlZfT0FDVElW
RTsKKwkvKiBFbmFibGUgcG9ydCAwLiAqLworCXdyaXRlXzQoc2MsIFBPUlRfMF9DT05GSUcsCisJ
ICAgIHJlYWRfNChzYywgUE9SVF8wX0NPTkZJRykgJiB+KFBPUlRfRElTQUJMRSkpOworCXdyaXRl
XzQoc2MsIElOVEVSUlVQVF9NQVNLLCAweDAwMDAwMDAwKTsKKwl3cml0ZV80KHNjLCBGU19ETUFf
Q09OVFJPTCwgMSk7CisJY2FsbG91dF9yZXNldCgmc2MtPnRpY2tfY2gsIGh6LCBlY2VfdGljaywg
c2MpOworfQorCitzdGF0aWMgdm9pZAorc2V0X2ZpbHRlcihzdHJ1Y3QgZWNlX3NvZnRjICpzYykK
K3sKKwlzdHJ1Y3QgaWZuZXQJCSppZnA7CisJc3RydWN0IGlmbXVsdGlhZGRyCSppZm1hOworCXVp
bnQzMl90IG1hY19wb3J0X2NvbmZpZzsKKworCWlmcCA9IHNjLT5pZnA7CisKKwljbGVhcl9tYWNf
ZW50cmllcyhzYywgMCk7CisJaWYgKGlmcC0+aWZfZmxhZ3MgJiBJRkZfQUxMTVVMVEkgfHwgaWZw
LT5pZl9mbGFncyAmIElGRl9QUk9NSVNDKSB7CisJCW1hY19wb3J0X2NvbmZpZyA9IHJlYWRfNChz
YywgTUFDX1BPUlRfMF9DT05GSUcpOworCQltYWNfcG9ydF9jb25maWcgJj0gfihESVNBQkxFX0JS
T0FEQ0FTVF9QQUNLRVQpOworCQltYWNfcG9ydF9jb25maWcgJj0gfihESVNBQkxFX01VTFRJQ0FT
VF9QQUNLRVQpOworCQl3cml0ZV80KHNjLCBNQUNfUE9SVF8wX0NPTkZJRywgbWFjX3BvcnRfY29u
ZmlnKTsKKwkJcmV0dXJuOworCX0KKwlpZl9tYWRkcl9ybG9jayhpZnApOworCVRBSUxRX0ZPUkVB
Q0goaWZtYSwgJmlmcC0+aWZfbXVsdGlhZGRycywgaWZtYV9saW5rKSB7CisJCWlmIChpZm1hLT5p
Zm1hX2FkZHItPnNhX2ZhbWlseSAhPSBBRl9MSU5LKQorCQkJY29udGludWU7CisJCWFkZF9tYWNf
ZW50cnkoc2MsCisJCSAgICBMTEFERFIoKHN0cnVjdCBzb2NrYWRkcl9kbCAqKWlmbWEtPmlmbWFf
YWRkcikpOworCX0KKwlpZl9tYWRkcl9ydW5sb2NrKGlmcCk7Cit9CisKK3N0YXRpYyBpbnQKK2Vj
ZWlvY3RsKHN0cnVjdCBpZm5ldCAqaWZwLCB1X2xvbmcgY21kLCBjYWRkcl90IGRhdGEpCit7CisJ
c3RydWN0IGVjZV9zb2Z0YyAqc2MgPSBpZnAtPmlmX3NvZnRjOworCXN0cnVjdCBtaWlfZGF0YSAq
bWlpOworCXN0cnVjdCBpZnJlcSAqaWZyID0gKHN0cnVjdCBpZnJlcSAqKWRhdGE7CisJaW50IG1h
c2ssIGVycm9yID0gMDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTSU9DU0lGRkxBR1M6CisJ
CUVDRV9MT0NLKHNjKTsKKwkJaWYgKChpZnAtPmlmX2ZsYWdzICYgSUZGX1VQKSA9PSAwICYmCisJ
CSAgICBpZnAtPmlmX2Rydl9mbGFncyAmIElGRl9EUlZfUlVOTklORykgeworCQkJaWZwLT5pZl9k
cnZfZmxhZ3MgJj0gfklGRl9EUlZfUlVOTklORzsKKwkJCWVjZXN0b3Aoc2MpOworCQl9IGVsc2Ug
eworCQkJLyogUmVpbml0aWFsaXplIGNhcmQgb24gYW55IHBhcmFtZXRlciBjaGFuZ2UuICovCisJ
CQlpZiAoKGlmcC0+aWZfZmxhZ3MgJiBJRkZfVVApICYmCisJCQkgICAgIShpZnAtPmlmX2Rydl9m
bGFncyAmIElGRl9EUlZfUlVOTklORykpCisJCQkJZWNlX3Jlc3RhcnQoc2MpOworCQl9CisJCUVD
RV9VTkxPQ0soc2MpOworCQlicmVhazsKKworCWNhc2UgU0lPQ0FERE1VTFRJOgorCWNhc2UgU0lP
Q0RFTE1VTFRJOgorCQlFQ0VfTE9DSyhzYyk7CisJCXNldF9maWx0ZXIoc2MpOworCQlFQ0VfVU5M
T0NLKHNjKTsKKwkJYnJlYWs7CisKKwljYXNlIFNJT0NTSUZNRURJQToKKwljYXNlIFNJT0NHSUZN
RURJQToKKwkJbWlpID0gZGV2aWNlX2dldF9zb2Z0YyhzYy0+bWlpYnVzKTsKKwkJZXJyb3IgPSBp
Zm1lZGlhX2lvY3RsKGlmcCwgaWZyLCAmbWlpLT5taWlfbWVkaWEsIGNtZCk7CisJCWJyZWFrOwor
CWNhc2UgU0lPQ1NJRkNBUDoKKwkJbWFzayA9IGlmcC0+aWZfY2FwZW5hYmxlIF4gaWZyLT5pZnJf
cmVxY2FwOworCQlpZiAobWFzayAmIElGQ0FQX1ZMQU5fTVRVKSB7CisJCQlFQ0VfTE9DSyhzYyk7
CisJCQlFQ0VfVU5MT0NLKHNjKTsKKwkJfQorCWRlZmF1bHQ6CisJCWVycm9yID0gZXRoZXJfaW9j
dGwoaWZwLCBjbWQsIGRhdGEpOworCQlicmVhazsKKwl9CisJcmV0dXJuIChlcnJvcik7Cit9CisK
K3N0YXRpYyB2b2lkCitlY2VfY2hpbGRfZGV0YWNoZWQoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBj
aGlsZCkKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYzsKKworCXNjID0gZGV2aWNlX2dldF9zb2Z0
YyhkZXYpOworCWlmIChjaGlsZCA9PSBzYy0+bWlpYnVzKQorCQlzYy0+bWlpYnVzID0gTlVMTDsK
K30KKworLyoKKyAqIE1JSSBidXMgc3VwcG9ydCByb3V0aW5lcy4KKyAqLworc3RhdGljIGludAor
ZWNlX21paWJ1c19yZWFkcmVnKGRldmljZV90IGRldiwgaW50IHBoeSwgaW50IHJlZykKK3sKKwlz
dHJ1Y3QgZWNlX3NvZnRjICpzYzsKKwkvKiBPbmx5IG9uZSBwaHkgaW4gdGhpcyBkZXZpY2UuICov
CisJaWYgKHBoeT4wKQorCQlyZXR1cm4gKDApOworCXNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYp
OworCXJldHVybiAocGh5X3JlYWQoc2MsIHBoeSwgcmVnKSk7Cit9CisKK3N0YXRpYyBpbnQKK2Vj
ZV9taWlidXNfd3JpdGVyZWcoZGV2aWNlX3QgZGV2LCBpbnQgcGh5LCBpbnQgcmVnLCBpbnQgZGF0
YSkKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYzsKKwlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2
KTsKKwlwaHlfd3JpdGUoc2MsIHBoeSwgcmVnLCBkYXRhKTsKKwlyZXR1cm4gKDApOworfQorCitz
dGF0aWMgZGV2aWNlX21ldGhvZF90IGVjZV9tZXRob2RzW10gPSB7CisJLyogRGV2aWNlIGludGVy
ZmFjZSAqLworCURFVk1FVEhPRChkZXZpY2VfcHJvYmUsCWVjZV9wcm9iZSksCisJREVWTUVUSE9E
KGRldmljZV9hdHRhY2gsCWVjZV9hdHRhY2gpLAorCURFVk1FVEhPRChkZXZpY2VfZGV0YWNoLAll
Y2VfZGV0YWNoKSwKKworCS8qIEJ1cyBpbnRlcmZhY2UgKi8KKwlERVZNRVRIT0QoYnVzX2NoaWxk
X2RldGFjaGVkLAllY2VfY2hpbGRfZGV0YWNoZWQpLAorCisJLyogTUlJIGludGVyZmFjZSAqLwor
CURFVk1FVEhPRChtaWlidXNfcmVhZHJlZywJZWNlX21paWJ1c19yZWFkcmVnKSwKKwlERVZNRVRI
T0QobWlpYnVzX3dyaXRlcmVnLAllY2VfbWlpYnVzX3dyaXRlcmVnKSwKKworCXsgMCwgMCB9Cit9
OworCitzdGF0aWMgZHJpdmVyX3QgZWNlX2RyaXZlciA9IHsKKwkiZWNlIiwKKwllY2VfbWV0aG9k
cywKKwlzaXplb2Yoc3RydWN0IGVjZV9zb2Z0YyksCit9OworCitEUklWRVJfTU9EVUxFKGVjZSwg
ZWNvbmFhcm0sIGVjZV9kcml2ZXIsIGVjZV9kZXZjbGFzcywgMCwgMCk7CitEUklWRVJfTU9EVUxF
KG1paWJ1cywgZWNlLCBtaWlidXNfZHJpdmVyLCBtaWlidXNfZGV2Y2xhc3MsIDAsIDApOworTU9E
VUxFX0RFUEVORChlY2UsIG1paWJ1cywgMSwgMSwgMSk7CitNT0RVTEVfREVQRU5EKGVjZSwgZXRo
ZXIsIDEsIDEsIDEpOwpJbmRleDogYXJtL2Vjb25hL2lmX2VjZXJlZy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGFybS9lY29uYS9pZl9lY2VyZWcuaAkocmV2aXNpb24gMCkKKysrIGFybS9lY29uYS9pZl9lY2Vy
ZWcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTQgQEAKKy8qLQorICogQ29weXJpZ2h0IChj
KSAyMDA5LCBZb2hhbmVzIE51Z3JvaG8gPHlvaGFuZXNAZ21haWwuY29tPgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UgdW5tb2RpZmllZCwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0QgJAorICovCisKKyNp
Zm5kZWYJX0lGX0VDRVJFR19ICisjZGVmaW5lCV9JRl9FQ0VSRUdfSAorCisjZGVmaW5lCUVUSF9D
RkcJCTB4MDgKKyNkZWZpbmUJRVRIX0NGR19STUlJCQkoMSA8PCAxNSkKKyNkZWZpbmUJUEhZX0NP
TlRST0wJCTB4MDAKKyNkZWZpbmUJUEhZX1JXX09LCQkoMTw8MTUpCisKKyNkZWZpbmUJUEhZX0FE
RFJFU1MoeCkJCSgoeCkgJiAweDEpCisjZGVmaW5lCVBIWV9SRUdJU1RFUihyKQkoKChyKSAmIDB4
MUYpIDw8IDgpCisjZGVmaW5lCVBIWV9XUklURV9DT01NQU5ECSgxPDwxMykKKyNkZWZpbmUJUEhZ
X1JFQURfQ09NTUFORAkoMTw8MTQpCisjZGVmaW5lCVBIWV9HRVRfREFUQShkKQkoKChkKSA+PiAx
NikgJiAweEZGRkYpCisjZGVmaW5lCVBIWV9EQVRBKGQpCQkoKChkKSAmIDB4RkZGRikgPDwgMTYp
CisKKyNkZWZpbmUJUE9SVF8wX0NPTkZJRwkJMHgwOAorCisjZGVmaW5lCUFSTF9UQUJMRV9BQ0NF
U1NfQ09OVFJPTF8wCTB4MDUwCisjZGVmaW5lCUFSTF9UQUJMRV9BQ0NFU1NfQ09OVFJPTF8xCTB4
MDU0CisjZGVmaW5lCUFSTF9UQUJMRV9BQ0NFU1NfQ09OVFJPTF8yCTB4MDU4CisKKyNkZWZpbmUJ
QVJMX1dSSVRFX0NPTU1BTkQJKDE8PDMpCisjZGVmaW5lCUFSTF9MT09LVVBfQ09NTUFORAkoMTw8
MikKKyNkZWZpbmUJQVJMX0NPTU1BTkRfQ09NUExFVEUJKDEpCisKKworI2RlZmluZQlQT1JUMAkJ
CSgxIDw8IDApCisjZGVmaW5lCVBPUlQxCQkJKDEgPDwgMSkKKyNkZWZpbmUJQ1BVX1BPUlQJCSgx
IDw8IDIpCisKKworI2RlZmluZQlWTEFOMF9HUk9VUF9JRAkJKDApCisjZGVmaW5lCVZMQU4xX0dS
T1VQX0lECQkoMSkKKyNkZWZpbmUJVkxBTjJfR1JPVVBfSUQJCSgyKQorI2RlZmluZQlWTEFOM19H
Uk9VUF9JRAkJKDMpCisjZGVmaW5lCVZMQU40X0dST1VQX0lECQkoNCkKKyNkZWZpbmUJVkxBTjVf
R1JPVVBfSUQJCSg1KQorI2RlZmluZQlWTEFONl9HUk9VUF9JRAkJKDYpCisjZGVmaW5lCVZMQU43
X0dST1VQX0lECQkoNykKKworI2RlZmluZQlQT1JUMF9QVklECQkoVkxBTjFfR1JPVVBfSUQpCisj
ZGVmaW5lCVBPUlQxX1BWSUQJCShWTEFOMl9HUk9VUF9JRCkKKyNkZWZpbmUJQ1BVX1BPUlRfUFZJ
RAkJKFZMQU4wX0dST1VQX0lEKQorCisjZGVmaW5lCVZMQU4wX1ZJRAkJKDB4MTExKQorI2RlZmlu
ZQlWTEFOMV9WSUQJCSgweDIyMikKKyNkZWZpbmUJVkxBTjJfVklECQkoMHgzMzMpCisjZGVmaW5l
CVZMQU4zX1ZJRAkJKDB4NDQ0KQorI2RlZmluZQlWTEFONF9WSUQJCSgweDU1NSkKKyNkZWZpbmUJ
VkxBTjVfVklECQkoMHg2NjYpCisjZGVmaW5lCVZMQU42X1ZJRAkJKDB4Nzc3KQorI2RlZmluZQlW
TEFON19WSUQJCSgweDg4OCkKKworI2RlZmluZQlWTEFOMF9HUk9VUAkJKFBPUlQwIHwgUE9SVDEg
fCBDUFVfUE9SVCkKKyNkZWZpbmUJVkxBTjFfR1JPVVAJCShQT1JUMCB8IENQVV9QT1JUKQorI2Rl
ZmluZQlWTEFOMl9HUk9VUAkJKFBPUlQxIHwgQ1BVX1BPUlQpCisjZGVmaW5lCVZMQU4zX0dST1VQ
CQkoMCkKKyNkZWZpbmUJVkxBTjRfR1JPVVAJCSgwKQorI2RlZmluZQlWTEFONV9HUk9VUAkJKDAp
CisjZGVmaW5lCVZMQU42X0dST1VQCQkoMCkKKyNkZWZpbmUJVkxBTjdfR1JPVVAJCSgwKQorCisj
ZGVmaW5lCVNXSVRDSF9DT05GSUcJCTB4MDA0CisjZGVmaW5lCU1BQ19QT1JUXzBfQ09ORklHCTB4
MDA4CisjZGVmaW5lCU1BQ19QT1JUXzFfQ09ORklHCTB4MDBDCisjZGVmaW5lCUNQVV9QT1JUX0NP
TkZJRwkweDAxMAorI2RlZmluZQlCSVNUX1JFU1VMVF9URVNUXzAJMHgwOTQKKworI2RlZmluZQlG
U19ETUFfQ09OVFJPTAkJMHgxMDQKKyNkZWZpbmUJVFNfRE1BX0NPTlRST0wJCTB4MTAwCisKKyNk
ZWZpbmUJSU5URVJSVVBUX01BU0sJCTB4MDhDCisjZGVmaW5lCUlOVEVSUlVQVF9TVEFUVVMJMHgw
ODgKKworI2RlZmluZQlUU19ERVNDUklQVE9SX1BPSU5URVIJCTB4MTA4CisjZGVmaW5lCVRTX0RF
U0NSSVBUT1JfQkFTRV9BRERSCTB4MTEwCisjZGVmaW5lCUZTX0RFU0NSSVBUT1JfUE9JTlRFUgkJ
MHgxMEMKKyNkZWZpbmUJRlNfREVTQ1JJUFRPUl9CQVNFX0FERFIJMHgxMTQKKworCisjZGVmaW5l
CVZMQU5fVklEXzBfMQkJMHgwNjAKKyNkZWZpbmUJVkxBTl9WSURfMl8zCQkweDA2NAorI2RlZmlu
ZQlWTEFOX1ZJRF80XzUJCTB4MDY4CisjZGVmaW5lCVZMQU5fVklEXzZfNwkJMHgwNkMKKworI2Rl
ZmluZQlWTEFOX1BPUlRfUFZJRAkJMHgwNUMKKyNkZWZpbmUJVkxBTl9NRU1CRVJfUE9SVF9NQVAJ
CTB4MDcwCisjZGVmaW5lCVZMQU5fVEFHX1BPUlRfTUFQCQkweDA3NAorCisKKyNkZWZpbmUJQVNJ
WF9HSUdBX1BIWQkJMQorI2RlZmluZQlUV09fU0lOR0xFX1BIWQkJMgorI2RlZmluZQlBR0VSRV9H
SUdBX1BIWQkJMworI2RlZmluZQlWU0M4NjAxX0dJR0FfUEhZCTQKKyNkZWZpbmUJSUNfUExVU19Q
SFkJCTUKKyNkZWZpbmUJTk9UX0ZPVU5EX1BIWQkJKC0xKQorCisjZGVmaW5lCU1BWF9QQUNLRVRf
TEVOCQkoMTUzNikKKworI2RlZmluZQlJTlZBTElEX0VOVFJZCQkwCisjZGVmaW5lCU5FV19FTlRS
WQkJMHgxCisjZGVmaW5lCVNUQVRJQ19FTlRSWQkJMHg3CisKKy8qbWFzayBzdGF0dXMgZXhjZXB0
IGZvciBsaW5rIGNoYW5nZSovCisjZGVmaW5lCUVSUk9SX01BU0sJCTB4RkZGRkZGN0YKKworLypo
YXJkd2FyZSBpbnRlcmZhY2UgZmxhZ3MqLworCisjZGVmaW5lCUZBU1RfQUdJTkcJCSgweGYpCisj
ZGVmaW5lCUlWTF9MRUFSTklORwkJKDB4MSA8PCAyMikKKy8qaGFyZHdhcmUgTkFUIGFjY2VsZXJh
dG9yKi8KKyNkZWZpbmUJSEFSRFdBUkVfTkFUCQkoMHgxIDw8IDIzKQorLyphZ2luZwkJdGltZQkJ
c2V0dGluZyovCisKKy8qc2tpcCBsb29rdXAqLworI2RlZmluZQlTS0lQX0wyX0xPT0tVUF9QT1JU
XzEJKDEgPDwgMjkpCisjZGVmaW5lCVNLSVBfTDJfTE9PS1VQX1BPUlRfMAkoMSA8PCAyOCkKKwor
I2RlZmluZQlOSUNfTU9ERQkJKDEgPDwgMzApCisjZGVmaW5lCVBPUlRfRElTQUJMRQkJKDEgPDwg
MTgpCisjZGVmaW5lCVNBX0xFQVJOSU5HX0RJU0FCTEUJCSgxIDw8IDE5KQorI2RlZmluZQlESVNB
QkxFX0JST0FEQ0FTVF9QQUNLRVQJKDEgPDwgMjcpCisjZGVmaW5lCURJU0FCTEVfTVVMVElDQVNU
X1BBQ0tFVAkoIDEgPDwgMjYpCisKKyNlbmRpZgpJbmRleDogYXJtL2Vjb25hL2NmaV9idXNfZWNv
bmEuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBhcm0vZWNvbmEvY2ZpX2J1c19lY29uYS5jCShyZXZpc2lvbiAw
KQorKysgYXJtL2Vjb25hL2NmaV9idXNfZWNvbmEuYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2
NyBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgWW9oYW5lcyBOdWdyb2hvIDx5b2hhbmVz
QGdtYWlsLmNvbT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVY
UFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2lu
Y2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zeXN0bS5oPgorI2luY2x1ZGUgPHN5
cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMvY29uZi5oPgorI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4K
KyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjaW5jbHVkZSA8c3lzL21vZHVsZS5oPgorI2luY2x1
ZGUgPHN5cy9ybWFuLmg+CisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorCisjaW5jbHVkZSA8bWFj
aGluZS9idXMuaD4KKworI2luY2x1ZGUgPGRldi9jZmkvY2ZpX3Zhci5oPgorCisjaW5jbHVkZSA8
YXJtL2Vjb25hL2Vjb25hX3JlZy5oPgorI2luY2x1ZGUgPGFybS9lY29uYS9lY29uYV92YXIuaD4K
Kworc3RhdGljIGludAorY2ZpX2Vjb25hX3Byb2JlKGRldmljZV90IGRldikKK3sKKworCXJldHVy
biBjZmlfcHJvYmUoZGV2KTsKK30KKworc3RhdGljIGRldmljZV9tZXRob2RfdCBjZmlfZWNvbmFf
bWV0aG9kc1tdID0geworCS8qIGRldmljZSBpbnRlcmZhY2UgKi8KKwlERVZNRVRIT0QoZGV2aWNl
X3Byb2JlLAkJY2ZpX2Vjb25hX3Byb2JlKSwKKwlERVZNRVRIT0QoZGV2aWNlX2F0dGFjaCwJY2Zp
X2F0dGFjaCksCisJREVWTUVUSE9EKGRldmljZV9kZXRhY2gsCWNmaV9kZXRhY2gpLAorCisJezAs
IDB9Cit9OworCitzdGF0aWMgZHJpdmVyX3QgY2ZpX2Vjb25hX2RyaXZlciA9IHsKKwljZmlfZHJp
dmVyX25hbWUsCisJY2ZpX2Vjb25hX21ldGhvZHMsCisJc2l6ZW9mKHN0cnVjdCBjZmlfc29mdGMp
LAorfTsKK0RSSVZFUl9NT0RVTEUoY2ZpLCBlY29uYWFybSwgY2ZpX2Vjb25hX2RyaXZlciwgY2Zp
X2RldmNsYXNzLCAwLCAwKTsKSW5kZXg6IGFybS9lY29uYS90aW1lci5jCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGFybS9lY29uYS90aW1lci5jCShyZXZpc2lvbiAwKQorKysgYXJtL2Vjb25hL3RpbWVyLmMJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMzgxIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBZ
b2hhbmVzIE51Z3JvaG8gPHlvaGFuZXNAZ21haWwuY29tPi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVVRIT1Ig
QU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFVVEhP
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisj
aW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QgJCIpOworI2luY2x1ZGUg
PHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zeXN0bS5oPgorI2luY2x1ZGUgPHN5cy9idXMu
aD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8c3lzL21vZHVsZS5oPgorI2lu
Y2x1ZGUgPHN5cy9tYWxsb2MuaD4KKyNpbmNsdWRlIDxzeXMvcm1hbi5oPgorI2luY2x1ZGUgPHN5
cy90aW1ldGMuaD4KKyNpbmNsdWRlIDxzeXMvd2F0Y2hkb2cuaD4KKyNpbmNsdWRlIDxtYWNoaW5l
L2J1cy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvY3B1Lmg+CisjaW5jbHVkZSA8bWFjaGluZS9mcmFt
ZS5oPgorI2luY2x1ZGUgPG1hY2hpbmUvaW50ci5oPgorCisjaW5jbHVkZSAiZWNvbmFfcmVnLmgi
CisjaW5jbHVkZSAiZWNvbmFfdmFyLmgiCisKKyNkZWZpbmUJSU5JVElBTF9USU1FQ09VTlRFUgko
MHhmZmZmZmZmZikKKworc3RhdGljIGludCB0aW1lcnNfaW5pdGlhbGl6ZWQgPSAwOworCisjZGVm
aW5lCUhaCTEwMAorCitleHRlcm4gdW5zaWduZWQgaW50IENQVV9jbG9jazsKK2V4dGVybiB1bnNp
Z25lZCBpbnQgQUhCX2Nsb2NrOworZXh0ZXJuIHVuc2lnbmVkIGludCBBUEJfY2xvY2s7CisKK3N0
YXRpYyB1bnNpZ25lZCBsb25nIHRpbWVyX2NvdW50ZXIgPSAwOworCitzdHJ1Y3QgZWNfdGltZXJf
c29mdGMgeworCXN0cnVjdCByZXNvdXJjZQkqCXRpbWVyX3Jlc1szXTsKKwlidXNfc3BhY2VfdGFn
X3QJCXRpbWVyX2JzdDsKKwlidXNfc3BhY2VfaGFuZGxlX3QJdGltZXJfYnNoOworCXN0cnVjdCBt
dHgJCXRpbWVyX210eDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Vfc3BlYyBlY190aW1l
cl9zcGVjW10gPSB7CisJeyBTWVNfUkVTX01FTU9SWSwJMCwJUkZfQUNUSVZFIH0sCisJeyBTWVNf
UkVTX0lSUSwJCTAsCVJGX0FDVElWRSB9LAorCXsgU1lTX1JFU19JUlEsCQkxLAlSRl9BQ1RJVkUg
fSwKKwl7IC0xLCAwIH0KK307CisKK3N0YXRpYyB1bnNpZ25lZCBlY190aW1lcl9nZXRfdGltZWNv
dW50KHN0cnVjdCB0aW1lY291bnRlciAqKTsKKworc3RhdGljIHN0cnVjdCB0aW1lY291bnRlciBl
Y190aW1lY291bnRlciA9IHsKKwkudGNfZ2V0X3RpbWVjb3VudCA9IGVjX3RpbWVyX2dldF90aW1l
Y291bnQsCisJLnRjX25hbWUgPSAiQ1BVIFRpbWVyIiwKKwkvKiBUaGlzIGlzIGFzc2lnbmVkIG9u
IHRoZSBmbHkgaW4gdGhlIGluaXQgc2VxdWVuY2UgKi8KKwkudGNfZnJlcXVlbmN5ID0gMCwKKwku
dGNfY291bnRlcl9tYXNrID0gfjB1LAorCS50Y19xdWFsaXR5ID0gMTAwMCwKK307CisKK3N0YXRp
YyBzdHJ1Y3QgZWNfdGltZXJfc29mdGMgKnRpbWVyX3NvZnRjID0gTlVMTDsKKworc3RhdGljIGlu
bGluZQordm9pZCB3cml0ZV80KHVuc2lnbmVkIGludCB2YWwsIHVuc2lnbmVkIGludCBhZGRyKQor
eworCWJ1c19zcGFjZV93cml0ZV80KHRpbWVyX3NvZnRjLT50aW1lcl9ic3QsCisJCQkgIHRpbWVy
X3NvZnRjLT50aW1lcl9ic2gsIGFkZHIsIHZhbCk7CisKK30KKworc3RhdGljIGlubGluZQordW5z
aWduZWQgaW50IHJlYWRfNCh1bnNpZ25lZCBpbnQgYWRkcikKK3sKKworCXJldHVybiBidXNfc3Bh
Y2VfcmVhZF80KHRpbWVyX3NvZnRjLT50aW1lcl9ic3QsCisJICAgIHRpbWVyX3NvZnRjLT50aW1l
cl9ic2gsIGFkZHIpOworfQorCisjZGVmaW5lCXVTRUNTX1BFUl9USUNLCSgxMDAwMDAwIC8gQVBC
X2Nsb2NrKQorI2RlZmluZQlUSUNLUzJVU0VDUyh4KQkoKHgpICogdVNFQ1NfUEVSX1RJQ0spCisK
K3N0YXRpYyB1bnNpZ25lZAorcmVhZF90aW1lcl9jb3VudGVyX25vaW50KHZvaWQpCit7CisKKwlh
cm1fbWFza19pcnEoMCk7CisJdW5zaWduZWQgaW50IHYgPSByZWFkXzQoVElNRVJfVE0xX0NPVU5U
RVJfUkVHKTsKKwlhcm1fdW5tYXNrX2lycSgwKTsKKwlyZXR1cm4gdjsKK30KKwordm9pZAorREVM
QVkoaW50IHVzZWMpCit7CisJdWludDMyX3QgdmFsLCB2YWxfdGVtcDsKKwlpbnQgbnRpY2tzOwor
CisJaWYgKCF0aW1lcnNfaW5pdGlhbGl6ZWQpIHsKKwkJZm9yICg7IHVzZWMgPiAwOyB1c2VjLS0p
CisJCQlmb3IgKHZhbCA9IDEwMDsgdmFsID4gMDsgdmFsLS0pCisJCQkJOworCQlyZXR1cm47CisJ
fQorCisJdmFsID0gcmVhZF90aW1lcl9jb3VudGVyX25vaW50KCk7CisJbnRpY2tzID0gKCgoQVBC
X2Nsb2NrIC8gMTAwMCkgKiB1c2VjKSAvIDEwMDApICsgMTAwOworCisJd2hpbGUgKG50aWNrcyA+
IDApIHsKKwkJdmFsX3RlbXAgPSByZWFkX3RpbWVyX2NvdW50ZXJfbm9pbnQoKTsKKwkJaWYgKHZh
bCA+IHZhbF90ZW1wKQorCQkJbnRpY2tzIC09ICh2YWwgLSB2YWxfdGVtcCk7CisJCWVsc2UKKwkJ
CW50aWNrcyAtPSAodmFsICsgKHRpbWVyX2NvdW50ZXIgLSB2YWxfdGVtcCkpOworCisJCXZhbCA9
IHZhbF90ZW1wOworCX0KKworfQorCisvKgorICogU2V0dXAgdGltZXIKKyAqLworc3RhdGljIGlu
bGluZSB2b2lkCitzZXR1cF90aW1lcih1bnNpZ25lZCBpbnQgY291bnRlcl92YWx1ZSkKK3sKKwl1
bnNpZ25lZCBpbnQgY29udHJvbF92YWx1ZTsKKwl1bnNpZ25lZCBpbnQgbWFza192YWx1ZTsKKwor
CWNvbnRyb2xfdmFsdWUgPSByZWFkXzQoVElNRVJfVE1fQ1JfUkVHKTsKKworCW1hc2tfdmFsdWUg
PSByZWFkXzQoVElNRVJfVE1fSU5UUl9NQVNLX1JFRyk7CisJd3JpdGVfNChjb3VudGVyX3ZhbHVl
LCBUSU1FUl9UTTFfQ09VTlRFUl9SRUcpOworCXdyaXRlXzQoY291bnRlcl92YWx1ZSwgVElNRVJf
VE0xX0xPQURfUkVHKTsKKwl3cml0ZV80KDAsIFRJTUVSX1RNMV9NQVRDSDFfUkVHKTsKKwl3cml0
ZV80KDAsVElNRVJfVE0xX01BVENIMl9SRUcpOworCisJY29udHJvbF92YWx1ZSAmPSB+KFRJTUVS
MV9DTE9DS19TT1VSQ0UpOworCWNvbnRyb2xfdmFsdWUgfD0gVElNRVIxX1VQX0RPV05fQ09VTlQ7
CisKKwl3cml0ZV80KDAsIFRJTUVSX1RNMl9DT1VOVEVSX1JFRyk7CisJd3JpdGVfNCgwLCBUSU1F
Ul9UTTJfTE9BRF9SRUcpOworCXdyaXRlXzQofjB1LCBUSU1FUl9UTTJfTUFUQ0gxX1JFRyk7CisJ
d3JpdGVfNCh+MHUsVElNRVJfVE0yX01BVENIMl9SRUcpOworCisJY29udHJvbF92YWx1ZSAmPSB+
KFRJTUVSMl9DTE9DS19TT1VSQ0UpOworCWNvbnRyb2xfdmFsdWUgJj0gfihUSU1FUjJfVVBfRE9X
Tl9DT1VOVCk7CisKKwltYXNrX3ZhbHVlICY9IH4oNjMpOworCisJd3JpdGVfNChjb250cm9sX3Zh
bHVlLCBUSU1FUl9UTV9DUl9SRUcpOworCXdyaXRlXzQobWFza192YWx1ZSwgVElNRVJfVE1fSU5U
Ul9NQVNLX1JFRyk7Cit9CisKKy8qCisgKiBFbmFibGUgdGltZXIKKyAqLworc3RhdGljIGlubGlu
ZSB2b2lkCit0aW1lcl9lbmFibGUodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgY29udHJvbF92YWx1
ZTsKKworCWNvbnRyb2xfdmFsdWUgPSByZWFkXzQoVElNRVJfVE1fQ1JfUkVHKTsKKworCWNvbnRy
b2xfdmFsdWUgfD0gVElNRVIxX09WRVJGTE9XX0VOQUJMRTsKKwljb250cm9sX3ZhbHVlIHw9IFRJ
TUVSMV9FTkFCTEU7CisJY29udHJvbF92YWx1ZSB8PSBUSU1FUjJfT1ZFUkZMT1dfRU5BQkxFOwor
CWNvbnRyb2xfdmFsdWUgfD0gVElNRVIyX0VOQUJMRTsKKworCXdyaXRlXzQoY29udHJvbF92YWx1
ZSwgVElNRVJfVE1fQ1JfUkVHKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK3Jl
YWRfc2Vjb25kX3RpbWVyX2NvdW50ZXIodm9pZCkKK3sKKworCXJldHVybiByZWFkXzQoVElNRVJf
VE0yX0NPVU5URVJfUkVHKTsKK30KKworLyoKKyAqIEdldCB0aW1lciBpbnRlcnJ1cHQgc3RhdHVz
CisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CityZWFkX3RpbWVyX2ludGVycnVwdF9z
dGF0dXModm9pZCkKK3sKKworCXJldHVybiByZWFkXzQoVElNRVJfVE1fSU5UUl9TVEFUVVNfUkVH
KTsKK30KKworLyoKKyAqIENsZWFyIHRpbWVyIGludGVycnVwdCBzdGF0dXMKKyAqLworc3RhdGlj
IGlubGluZSB2b2lkCitjbGVhcl90aW1lcl9pbnRlcnJ1cHRfc3RhdHVzKHVuc2lnbmVkIGludCBp
cnEpCit7CisJdW5zaWduZWQgaW50IGludGVycnVwdF9zdGF0dXM7CisKKwlpbnRlcnJ1cHRfc3Rh
dHVzID0gICByZWFkXzQoVElNRVJfVE1fSU5UUl9TVEFUVVNfUkVHKTsKKwlpZiAoaXJxID09IDAp
IHsKKwkJaWYgKGludGVycnVwdF9zdGF0dXMgJiAoVElNRVIxX01BVENIMV9JTlRSKSkKKwkJCWlu
dGVycnVwdF9zdGF0dXMgJj0gfihUSU1FUjFfTUFUQ0gxX0lOVFIpOworCQlpZiAoaW50ZXJydXB0
X3N0YXR1cyAmIChUSU1FUjFfTUFUQ0gyX0lOVFIpKQorCQkJaW50ZXJydXB0X3N0YXR1cyAmPSB+
KFRJTUVSMV9NQVRDSDJfSU5UUik7CisJCWlmIChpbnRlcnJ1cHRfc3RhdHVzICYgKFRJTUVSMV9P
VkVSRkxPV19JTlRSKSkKKwkJCWludGVycnVwdF9zdGF0dXMgJj0gfihUSU1FUjFfT1ZFUkZMT1df
SU5UUik7CisJfQorCWlmIChpcnEgPT0gMSkgeworCQlpZiAoaW50ZXJydXB0X3N0YXR1cyAmIChU
SU1FUjJfTUFUQ0gxX0lOVFIpKQorCQkJaW50ZXJydXB0X3N0YXR1cyAmPSB+KFRJTUVSMl9NQVRD
SDFfSU5UUik7CisJCWlmIChpbnRlcnJ1cHRfc3RhdHVzICYgKFRJTUVSMl9NQVRDSDJfSU5UUikp
CisJCQlpbnRlcnJ1cHRfc3RhdHVzICY9IH4oVElNRVIyX01BVENIMl9JTlRSKTsKKwkJaWYgKGlu
dGVycnVwdF9zdGF0dXMgJiAoVElNRVIyX09WRVJGTE9XX0lOVFIpKQorCQkJaW50ZXJydXB0X3N0
YXR1cyAmPSB+KFRJTUVSMl9PVkVSRkxPV19JTlRSKTsKKwl9CisKKwl3cml0ZV80KGludGVycnVw
dF9zdGF0dXMsIFRJTUVSX1RNX0lOVFJfU1RBVFVTX1JFRyk7Cit9CisKK3N0YXRpYyB1bnNpZ25l
ZAorZWNfdGltZXJfZ2V0X3RpbWVjb3VudChzdHJ1Y3QgdGltZWNvdW50ZXIgKmEpCit7CisJdW5z
aWduZWQgaW50IHRpY2tzMTsKKwlhcm1fbWFza19pcnEoMSk7CisJdGlja3MxID0gcmVhZF9zZWNv
bmRfdGltZXJfY291bnRlcigpOworCWFybV91bm1hc2tfaXJxKDEpOworCXJldHVybiB0aWNrczE7
Cit9CisKKy8qCisgKiBTZXR1cCB0aW1lcgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2RvX3Nl
dHVwX3RpbWVyKHZvaWQpCit7CisKKwl0aW1lcl9jb3VudGVyID0gQVBCX2Nsb2NrL0haOworCS8q
CisJICogc2V0dXAgdGltZXItcmVsYXRlZCB2YWx1ZXMKKwkgKi8KKwlzZXR1cF90aW1lcih0aW1l
cl9jb3VudGVyKTsKK30KKwordm9pZAorY3B1X2luaXRjbG9ja3Modm9pZCkKK3sKKworCWVjX3Rp
bWVjb3VudGVyLnRjX2ZyZXF1ZW5jeSA9IEFQQl9jbG9jazsKKwl0Y19pbml0KCZlY190aW1lY291
bnRlcik7CisJdGltZXJfZW5hYmxlKCk7CisJdGltZXJzX2luaXRpYWxpemVkID0gMTsKK30KKwor
dm9pZAorY3B1X3N0YXJ0cHJvZmNsb2NrKHZvaWQpCit7CisKK30KKwordm9pZAorY3B1X3N0b3Bw
cm9mY2xvY2sodm9pZCkKK3sKKworfQorCitzdGF0aWMgaW50CitlY190aW1lcl9wcm9iZShkZXZp
Y2VfdCBkZXYpCit7CisKKwlkZXZpY2Vfc2V0X2Rlc2MoZGV2LCAiRWNvbmEgQ1BVIFRpbWVyIik7
CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorZWNfcmVzZXQodm9pZCAqYXJnKQorewor
CisJYXJtX21hc2tfaXJxKDEpOworCWNsZWFyX3RpbWVyX2ludGVycnVwdF9zdGF0dXMoMSk7CisJ
YXJtX3VubWFza19pcnEoMSk7CisJcmV0dXJuIChGSUxURVJfSEFORExFRCk7Cit9CisKK3N0YXRp
YyBpbnQKK2VjX2hhcmRjbG9jayh2b2lkICphcmcpCit7CisJc3RydWN0CXRyYXBmcmFtZSAqZnJh
bWU7CisJdW5zaWduZWQgaW50IHZhbDsKKwkvKmNsZWFyIHRpbWVyIGludGVycnVwdCBzdGF0dXMq
LworCisJYXJtX21hc2tfaXJxKDApOworCisJdmFsID0gcmVhZF80KFRJTUVSX0lOVEVSUlVQVF9T
VEFUVVNfUkVHKTsKKwl2YWwgJj0gfihUSU1FUjFfT1ZFUkZMT1dfSU5URVJSVVBUKTsKKwl3cml0
ZV80KHZhbCwgVElNRVJfSU5URVJSVVBUX1NUQVRVU19SRUcpOworCisJZnJhbWUgPSAoc3RydWN0
IHRyYXBmcmFtZSAqKWFyZzsKKwloYXJkY2xvY2soVFJBUEZfVVNFUk1PREUoZnJhbWUpLCBUUkFQ
Rl9QQyhmcmFtZSkpOworCisJYXJtX3VubWFza19pcnEoMCk7CisKKwlyZXR1cm4gKEZJTFRFUl9I
QU5ETEVEKTsKK30KKworc3RhdGljIGludAorZWNfdGltZXJfYXR0YWNoKGRldmljZV90IGRldikK
K3sKKwlzdHJ1Y3QJZWNfdGltZXJfc29mdGMgKnNjOworCWludAllcnJvcjsKKwl2b2lkCSppaGw7
CisKKworCWlmICh0aW1lcl9zb2Z0YyAhPSBOVUxMKQorCQlyZXR1cm4gKEVOWElPKTsKKworCXNj
ID0gKHN0cnVjdCBlY190aW1lcl9zb2Z0YyAqKWRldmljZV9nZXRfc29mdGMoZGV2KTsKKworCXRp
bWVyX3NvZnRjID0gc2M7CisKKwllcnJvciA9IGJ1c19hbGxvY19yZXNvdXJjZXMoZGV2LCBlY190
aW1lcl9zcGVjLCBzYy0+dGltZXJfcmVzKTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2aWNlX3ByaW50
ZihkZXYsICJjb3VsZCBub3QgYWxsb2NhdGUgcmVzb3VyY2VzXG4iKTsKKwkJcmV0dXJuIChFTlhJ
Tyk7CisJfQorCisJc2MtPnRpbWVyX2JzdCA9IHJtYW5fZ2V0X2J1c3RhZyhzYy0+dGltZXJfcmVz
WzBdKTsKKwlzYy0+dGltZXJfYnNoID0gcm1hbl9nZXRfYnVzaGFuZGxlKHNjLT50aW1lcl9yZXNb
MF0pOworCisJZG9fc2V0dXBfdGltZXIoKTsKKworCWlmIChidXNfc2V0dXBfaW50cihkZXYsIHNj
LT50aW1lcl9yZXNbMV0sIElOVFJfVFlQRV9DTEssCisJICAgIGVjX2hhcmRjbG9jaywgTlVMTCwg
TlVMTCwgJmlobCkgIT0gMCkgeworCQlidXNfcmVsZWFzZV9yZXNvdXJjZXMoZGV2LCBlY190aW1l
cl9zcGVjLCBzYy0+dGltZXJfcmVzKTsKKwkJZGV2aWNlX3ByaW50ZihkZXYsICJjb3VsZCBub3Qg
c2V0dXAgaGFyZGNsb2NrIGludGVycnVwdFxuIik7CisJCXJldHVybiAoRU5YSU8pOworCX0KKwor
CWlmIChidXNfc2V0dXBfaW50cihkZXYsIHNjLT50aW1lcl9yZXNbMl0sIElOVFJfVFlQRV9DTEss
CisJICAgIGVjX3Jlc2V0LCBOVUxMLCBOVUxMLCAmaWhsKSAhPSAwKSB7CisJCWJ1c19yZWxlYXNl
X3Jlc291cmNlcyhkZXYsIGVjX3RpbWVyX3NwZWMsIHNjLT50aW1lcl9yZXMpOworCQlkZXZpY2Vf
cHJpbnRmKGRldiwgImNvdWxkIG5vdCBzZXR1cCB0aW1lciBpbnRlcnJ1cHRcbiIpOworCQlyZXR1
cm4gKEVOWElPKTsKKwl9CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgZGV2aWNlX21ldGhv
ZF90IGVjX3RpbWVyX21ldGhvZHNbXSA9IHsKKwlERVZNRVRIT0QoZGV2aWNlX3Byb2JlLCBlY190
aW1lcl9wcm9iZSksCisJREVWTUVUSE9EKGRldmljZV9hdHRhY2gsIGVjX3RpbWVyX2F0dGFjaCks
CisJeyAwLCAwIH0KK307CisKK3N0YXRpYyBkcml2ZXJfdCBlY190aW1lcl9kcml2ZXIgPSB7CisJ
InRpbWVyIiwKKwllY190aW1lcl9tZXRob2RzLAorCXNpemVvZihzdHJ1Y3QgZWNfdGltZXJfc29m
dGMpLAorfTsKKworc3RhdGljIGRldmNsYXNzX3QgZWNfdGltZXJfZGV2Y2xhc3M7CisKK0RSSVZF
Ul9NT0RVTEUodGltZXIsIGVjb25hYXJtLCBlY190aW1lcl9kcml2ZXIsIGVjX3RpbWVyX2RldmNs
YXNzLCAwLCAwKTsKSW5kZXg6IGFybS9lY29uYS9lY29uYS5jCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGFybS9l
Y29uYS9lY29uYS5jCShyZXZpc2lvbiAwKQorKysgYXJtL2Vjb25hL2Vjb25hLmMJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNzU4IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBZb2hhbmVz
IE51Z3JvaG8gPHlvaGFuZXNAZ21haWwuY29tPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFVVEhPUiBBTkQgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVVUSE9SIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEICQiKTsKKworI2luY2x1ZGUgPHN5
cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zeXN0bS5oPgorI2luY2x1ZGUgPHN5cy9idXMuaD4K
KyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVk
ZSA8c3lzL21hbGxvYy5oPgorI2luY2x1ZGUgPHN5cy9tb2R1bGUuaD4KKyNpbmNsdWRlIDxzeXMv
cm1hbi5oPgorI2luY2x1ZGUgPHZtL3ZtLmg+CisjaW5jbHVkZSA8dm0vdm1fa2Vybi5oPgorI2lu
Y2x1ZGUgPHZtL3BtYXAuaD4KKyNpbmNsdWRlIDx2bS92bV9wYWdlLmg+CisjaW5jbHVkZSA8dm0v
dm1fZXh0ZXJuLmg+CisKKyNkZWZpbmUJX0FSTTMyX0JVU19ETUFfUFJJVkFURQorI2luY2x1ZGUg
PG1hY2hpbmUvYnVzLmg+CisjaW5jbHVkZSA8bWFjaGluZS9pbnRyLmg+CisjaW5jbHVkZSA8bWFj
aGluZS9yZXNvdXJjZS5oPgorCisjaW5jbHVkZSAiZWNvbmFfcmVnLmgiCisjaW5jbHVkZSAiZWNv
bmFfdmFyLmgiCisKK3N0YXRpYyBzdHJ1Y3QgZWNvbmFfc29mdGMgKmVjb25hX3NvZnRjOworCit1
bnNpZ25lZCBpbnQgQ1BVX2Nsb2NrID0gMjAwMDAwMDAwOwordW5zaWduZWQgaW50IEFIQl9jbG9j
azsKK3Vuc2lnbmVkIGludCBBUEJfY2xvY2s7CisKK2JzX3Byb3RvcyhnZW5lcmljKTsKK2JzX3By
b3RvcyhnZW5lcmljX2FybXY0KTsKKworc3RydWN0IGJ1c19zcGFjZSBlY29uYV9ic190YWcgPSB7
CisJLyogY29va2llICovCisJKHZvaWQgKikgMCwKKworCS8qIG1hcHBpbmcvdW5tYXBwaW5nICov
CisJZ2VuZXJpY19ic19tYXAsCisJZ2VuZXJpY19ic191bm1hcCwKKwlnZW5lcmljX2JzX3N1YnJl
Z2lvbiwKKworCS8qIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uICovCisJZ2VuZXJpY19ic19hbGxv
YywKKwlnZW5lcmljX2JzX2ZyZWUsCisKKwkvKiBiYXJyaWVyICovCisJZ2VuZXJpY19ic19iYXJy
aWVyLAorCisJLyogcmVhZCAoc2luZ2xlKSAqLworCWdlbmVyaWNfYnNfcl8xLAorCWdlbmVyaWNf
YXJtdjRfYnNfcl8yLAorCWdlbmVyaWNfYnNfcl80LAorCU5VTEwsCisKKwkvKiByZWFkIG11bHRp
cGxlICovCisJZ2VuZXJpY19ic19ybV8xLAorCWdlbmVyaWNfYXJtdjRfYnNfcm1fMiwKKwlnZW5l
cmljX2JzX3JtXzQsCisJTlVMTCwKKworCS8qIHJlYWQgcmVnaW9uICovCisJZ2VuZXJpY19ic19y
cl8xLAorCWdlbmVyaWNfYXJtdjRfYnNfcnJfMiwKKwlnZW5lcmljX2JzX3JyXzQsCisJTlVMTCwK
KworCS8qIHdyaXRlIChzaW5nbGUpICovCisJZ2VuZXJpY19ic193XzEsCisJZ2VuZXJpY19hcm12
NF9ic193XzIsCisJZ2VuZXJpY19ic193XzQsCisJTlVMTCwKKworCS8qIHdyaXRlIG11bHRpcGxl
ICovCisJZ2VuZXJpY19ic193bV8xLAorCWdlbmVyaWNfYXJtdjRfYnNfd21fMiwKKwlnZW5lcmlj
X2JzX3dtXzQsCisJTlVMTCwKKworCS8qIHdyaXRlIHJlZ2lvbiAqLworCU5VTEwsCisJTlVMTCwK
KwlOVUxMLAorCU5VTEwsCisKKwkvKiBzZXQgbXVsdGlwbGUgKi8KKwlOVUxMLAorCU5VTEwsCisJ
TlVMTCwKKwlOVUxMLAorCisJLyogc2V0IHJlZ2lvbiAqLworCU5VTEwsCisJTlVMTCwKKwlOVUxM
LAorCU5VTEwsCisKKwkvKiBjb3B5ICovCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisJTlVMTCwK
KworCS8qIHJlYWQgKHNpbmdsZSkgc3RyZWFtICovCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisJ
TlVMTCwKKworCS8qIHJlYWQgbXVsdGlwbGUgc3RyZWFtICovCisJTlVMTCwKKwlnZW5lcmljX2Fy
bXY0X2JzX3JtXzIsCisJTlVMTCwKKwlOVUxMLAorCisJLyogcmVhZCByZWdpb24gc3RyZWFtICov
CisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKworCS8qIHdyaXRlIChzaW5nbGUpIHN0
cmVhbSAqLworCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisKKwkvKiB3cml0ZSBtdWx0
aXBsZSBzdHJlYW0gKi8KKwlOVUxMLAorCWdlbmVyaWNfYXJtdjRfYnNfd21fMiwKKwlOVUxMLAor
CU5VTEwsCisKKwkvKiB3cml0ZSByZWdpb24gc3RyZWFtICovCisJTlVMTCwKKwlOVUxMLAorCU5V
TEwsCisJTlVMTAorfTsKKworYnVzX3NwYWNlX3RhZ190IG9iaW9fdGFnID0gJmVjb25hX2JzX3Rh
ZzsKKworc3RhdGljIGludAorZWNvbmFfcHJvYmUoZGV2aWNlX3QgZGV2KQoreworCisJZGV2aWNl
X3NldF9kZXNjKGRldiwgIkVDT05BIGRldmljZSBidXMiKTsKKwlyZXR1cm4gKDApOworfQorCitz
dGF0aWMgdm9pZAorZWNvbmFfaWRlbnRpZnkoZHJpdmVyX3QgKmRydiwgZGV2aWNlX3QgcGFyZW50
KQoreworCisJQlVTX0FERF9DSElMRChwYXJlbnQsIDAsICJlY29uYWFybSIsIDApOworfQorCitz
dHJ1Y3QgYXJtMzJfZG1hX3JhbmdlICoKK2J1c19kbWFfZ2V0X3JhbmdlKHZvaWQpCit7CisKKwly
ZXR1cm4gKE5VTEwpOworfQorCitpbnQKK2J1c19kbWFfZ2V0X3JhbmdlX25iKHZvaWQpCit7CisK
KwlyZXR1cm4gKDApOworfQorCitleHRlcm4gdm9pZCBpcnFfZW50cnkodm9pZCk7CisKK3N0YXRp
YyB2b2lkCitlY29uYV9hZGRfY2hpbGQoZGV2aWNlX3QgZGV2LCBpbnQgcHJpbywgY29uc3QgY2hh
ciAqbmFtZSwgaW50IHVuaXQsCisgICAgYnVzX2FkZHJfdCBhZGRyLCBidXNfc2l6ZV90IHNpemUs
CisgICAgaW50IGlycTAsIGludCBpcnExLAorICAgIGludCBpcnEyLCBpbnQgaXJxMywgaW50IGly
cTQpCit7CisJZGV2aWNlX3Qga2lkOworCXN0cnVjdCBlY29uYV9pdmFyICppdmFyOworCisJa2lk
ID0gZGV2aWNlX2FkZF9jaGlsZF9vcmRlcmVkKGRldiwgcHJpbywgbmFtZSwgdW5pdCk7CisJaWYg
KGtpZCA9PSBOVUxMKSB7CisJCXByaW50ZigiQ2FuJ3QgYWRkIGNoaWxkICVzJWQgb3JkZXJlZFxu
IiwgbmFtZSwgdW5pdCk7CisJCXJldHVybjsKKwl9CisJaXZhciA9IG1hbGxvYyhzaXplb2YoKml2
YXIpLCBNX0RFVkJVRiwgTV9OT1dBSVQgfCBNX1pFUk8pOworCWlmIChpdmFyID09IE5VTEwpIHsK
KwkJZGV2aWNlX2RlbGV0ZV9jaGlsZChkZXYsIGtpZCk7CisJCXJldHVybjsKKwl9CisJZGV2aWNl
X3NldF9pdmFycyhraWQsIGl2YXIpOworCXJlc291cmNlX2xpc3RfaW5pdCgmaXZhci0+cmVzb3Vy
Y2VzKTsKKwlpZiAoaXJxMCAhPSAtMSkKKwkJYnVzX3NldF9yZXNvdXJjZShraWQsIFNZU19SRVNf
SVJRLCAwLCBpcnEwLCAxKTsKKwlpZiAoaXJxMSAhPSAwKQorCQlidXNfc2V0X3Jlc291cmNlKGtp
ZCwgU1lTX1JFU19JUlEsIDEsIGlycTEsIDEpOworCWlmIChpcnEyICE9IDApCisJCWJ1c19zZXRf
cmVzb3VyY2Uoa2lkLCBTWVNfUkVTX0lSUSwgMiwgaXJxMiwgMSk7CisJaWYgKGlycTMgIT0gMCkK
KwkJYnVzX3NldF9yZXNvdXJjZShraWQsIFNZU19SRVNfSVJRLCAzLCBpcnEzLCAxKTsKKwlpZiAo
aXJxNCAhPSAwKQorCQlidXNfc2V0X3Jlc291cmNlKGtpZCwgU1lTX1JFU19JUlEsIDQsIGlycTQs
IDEpOworCisJaWYgKGFkZHIgIT0gMCkKKwkJYnVzX3NldF9yZXNvdXJjZShraWQsIFNZU19SRVNf
TUVNT1JZLCAwLCBhZGRyLCBzaXplKTsKKworfQorCitzdHJ1Y3QgY3B1X2RldnMKK3sKKwljb25z
dCBjaGFyICpuYW1lOworCWludCB1bml0OworCWJ1c19hZGRyX3QgbWVtX2Jhc2U7CisJYnVzX3Np
emVfdCBtZW1fbGVuOworCWludCBpcnEwOworCWludCBpcnExOworCWludCBpcnEyOworCWludCBp
cnEzOworCWludCBpcnE0OworfTsKKworc3RydWN0IGNwdV9kZXZzIGVjb25hcm1fZGV2c1tdID0K
K3sKKwl7CisJCSJlY29uYV9pYyIsIDAsCisJCUVDT05BX0lPX0JBU0UgKyBFQ09OQV9QSUNfQkFT
RSwgRUNPTkFfUElDX1NJWkUsCisJCTAKKwl9LAorCXsKKwkJInN5c3RlbSIsIDAsCisJCUVDT05B
X0lPX0JBU0UgKyBFQ09OQV9TWVNURU1fQkFTRSwgRUNPTkFfU1lTVEVNX1NJWkUsCisJCTAKKwl9
LAorCXsKKwkJInVhcnQiLCAwLAorCQlFQ09OQV9JT19CQVNFICsgRUNPTkFfVUFSVF9CQVNFLCBF
Q09OQV9VQVJUX1NJWkUsCisJCUVDT05BX0lSUV9VQVJUCisJfSwKKwl7CisJCSJ0aW1lciIsIDAs
CisJCUVDT05BX0lPX0JBU0UgKyBFQ09OQV9USU1FUl9CQVNFLCBFQ09OQV9USU1FUl9TSVpFLAor
CQlFQ09OQV9JUlFfVElNRVJfMSwgRUNPTkFfSVJRX1RJTUVSXzIKKwl9LAorCXsKKwkJIm9oY2ki
LCAwLAorCQlFQ09OQV9PSENJX1ZCQVNFLCBFQ09OQV9PSENJX1NJWkUsCisJCUVDT05BX0lSUV9P
SENJCisJCX0sCisJeworCQkiZWhjaSIsIDAsCisJCUVDT05BX0VIQ0lfVkJBU0UsIEVDT05BX0VI
Q0lfU0laRSwKKwkJRUNPTkFfSVJRX0VIQ0kKKwl9LAorCXsKKwkJImNmaSIsIDAsCisJCUVDT05B
X0NGSV9WQkFTRSwgRUNPTkFfQ0ZJX1NJWkUsCisJCTAKKwl9LAorCXsKKwkJImVjZSIsIDAsCisJ
CUVDT05BX0lPX0JBU0UgKyBFQ09OQV9ORVRfQkFTRSwgRUNPTkFfTkVUX1NJWkUsCisJCUVDT05B
X0lSUV9TVEFUVVMsCisJCUVDT05BX0lSUV9UU1RDLCBFQ09OQV9JUlFfRlNSQywKKwkJRUNPTkFf
SVJRX1RTUUUsIEVDT05BX0lSUV9GU1FGLAorCX0sCisJewkwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwIH0KK307CisKK3N0YXRpYyB2b2lkCitlY29uYV9jcHVfYWRkX2J1aWx0aW5fY2hpbGRyZW4o
ZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgZWNvbmFfc29mdGMgKnNjKQoreworCWludCBpOworCXN0cnVj
dCBjcHVfZGV2cyAqd2Fsa2VyOworCisJZm9yIChpID0gMCwgd2Fsa2VyID0gZWNvbmFybV9kZXZz
OyB3YWxrZXItPm5hbWU7IGkrKywgd2Fsa2VyKyspIHsKKwkJZWNvbmFfYWRkX2NoaWxkKGRldiwg
aSwgd2Fsa2VyLT5uYW1lLCB3YWxrZXItPnVuaXQsCisJCSAgICB3YWxrZXItPm1lbV9iYXNlLCB3
YWxrZXItPm1lbV9sZW4sCisJCSAgICB3YWxrZXItPmlycTAsd2Fsa2VyLT5pcnExLCB3YWxrZXIt
PmlycTIsCisJCSAgICB3YWxrZXItPmlycTMsIHdhbGtlci0+aXJxNCk7CisJfQorCit9CisKK3N0
cnVjdCBpbnRjX3RyaWdnZXJfdCB7CisJaW50IG1vZGU7CisJaW50IGxldmVsOworfTsKKworc3Rh
dGljIHN0cnVjdCBpbnRjX3RyaWdnZXJfdCBpbnRjX3RyaWdnZXJfdGFibGVbXSA9IHsKKwl7SU5U
Q19FREdFX1RSSUdHRVIsIElOVENfUklTSU5HX0VER0V9LAorCXtJTlRDX0VER0VfVFJJR0dFUiwg
SU5UQ19SSVNJTkdfRURHRX0sCisJe0lOVENfRURHRV9UUklHR0VSLCBJTlRDX0ZBTExJTkdfRURH
RX0sCisJe0lOVENfRURHRV9UUklHR0VSLCBJTlRDX1JJU0lOR19FREdFfSwKKwl7SU5UQ19UUklH
R0VSX1VOS05PV04sIElOVENfVFJJR0dFUl9VTktOT1dOfSwKKwl7SU5UQ19MRVZFTF9UUklHR0VS
LCBJTlRDX0FDVElWRV9MT1d9LAorCXtJTlRDX0xFVkVMX1RSSUdHRVIsIElOVENfQUNUSVZFX0xP
V30sCisJe0lOVENfTEVWRUxfVFJJR0dFUiwgSU5UQ19BQ1RJVkVfSElHSH0sCisJe0lOVENfVFJJ
R0dFUl9VTktOT1dOLCBJTlRDX1RSSUdHRVJfVU5LTk9XTn0sCisJe0lOVENfTEVWRUxfVFJJR0dF
UiwgSU5UQ19BQ1RJVkVfSElHSH0sCisJe0lOVENfTEVWRUxfVFJJR0dFUiwgSU5UQ19BQ1RJVkVf
SElHSH0sCisJe0lOVENfTEVWRUxfVFJJR0dFUiwgSU5UQ19BQ1RJVkVfSElHSH0sCisJe0lOVENf
TEVWRUxfVFJJR0dFUiwgSU5UQ19BQ1RJVkVfSElHSH0sCisJe0lOVENfVFJJR0dFUl9VTktOT1dO
LCBJTlRDX1RSSUdHRVJfVU5LTk9XTn0sCisJe0lOVENfTEVWRUxfVFJJR0dFUiwgSU5UQ19BQ1RJ
VkVfSElHSH0sCisJe0lOVENfRURHRV9UUklHR0VSLCBJTlRDX0ZBTExJTkdfRURHRX0sCisJe0lO
VENfVFJJR0dFUl9VTktOT1dOLCBJTlRDX1RSSUdHRVJfVU5LTk9XTn0sCisJe0lOVENfVFJJR0dF
Ul9VTktOT1dOLCBJTlRDX1RSSUdHRVJfVU5LTk9XTn0sCisJe0lOVENfTEVWRUxfVFJJR0dFUiwg
SU5UQ19BQ1RJVkVfSElHSH0sCisJe0lOVENfRURHRV9UUklHR0VSLCBJTlRDX1JJU0lOR19FREdF
fSwKKwl7SU5UQ19FREdFX1RSSUdHRVIsIElOVENfUklTSU5HX0VER0V9LAorCXtJTlRDX0VER0Vf
VFJJR0dFUiwgSU5UQ19SSVNJTkdfRURHRX0sCisJe0lOVENfRURHRV9UUklHR0VSLCBJTlRDX1JJ
U0lOR19FREdFfSwKKwl7SU5UQ19MRVZFTF9UUklHR0VSLCBJTlRDX0FDVElWRV9MT1d9LAorCXtJ
TlRDX0xFVkVMX1RSSUdHRVIsIElOVENfQUNUSVZFX0xPV30sCit9OworCitzdGF0aWMgaW5saW5l
IHVpbnQzMl90CityZWFkXzQoc3RydWN0IGVjb25hX3NvZnRjICpzYywgYnVzX3NpemVfdCBvZmYp
Cit7CisKKwlyZXR1cm4gYnVzX3NwYWNlX3JlYWRfNChzYy0+ZWNfc3QsIHNjLT5lY19zeXNfc2gs
IG9mZik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAord3JpdGVfNChzdHJ1Y3QgZWNvbmFfc29m
dGMgKnNjLCBidXNfc2l6ZV90IG9mZiwgdWludDMyX3QgdmFsKQoreworCisJcmV0dXJuIGJ1c19z
cGFjZV93cml0ZV80KHNjLT5lY19zdCwgc2MtPmVjX3N5c19zaCwgb2ZmLCB2YWwpOworfQorCitz
dGF0aWMgaW5saW5lIHVpbnQzMl90CitzeXN0ZW1fcmVhZF80KHN0cnVjdCBlY29uYV9zb2Z0YyAq
c2MsIGJ1c19zaXplX3Qgb2ZmKQoreworCisJcmV0dXJuIGJ1c19zcGFjZV9yZWFkXzQoc2MtPmVj
X3N0LCBzYy0+ZWNfc3lzdGVtX3NoLCBvZmYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3N5
c3RlbV93cml0ZV80KHN0cnVjdCBlY29uYV9zb2Z0YyAqc2MsIGJ1c19zaXplX3Qgb2ZmLCB1aW50
MzJfdCB2YWwpCit7CisKKwlyZXR1cm4gYnVzX3NwYWNlX3dyaXRlXzQoc2MtPmVjX3N0LCBzYy0+
ZWNfc3lzdGVtX3NoLCBvZmYsIHZhbCk7Cit9CisKKworCitzdGF0aWMgaW5saW5lIHZvaWQKK2Vj
b25hX3NldF9pcnFfbW9kZShzdHJ1Y3QgZWNvbmFfc29mdGMgKiBzYywgdW5zaWduZWQgaW50IGly
cSwKKwkJICAgdW5zaWduZWQgaW50IG1vZGUpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKworCWlm
ICgobW9kZSAhPSBJTlRDX0xFVkVMX1RSSUdHRVIpICYmIChtb2RlICE9IElOVENfRURHRV9UUklH
R0VSKSkKKwkJcmV0dXJuOworCisJdmFsID0JcmVhZF80KHNjLCBJTlRDX0lOVEVSUlVQVF9UUklH
R0VSX01PREVfUkVHX09GRlNFVCk7CisKKwlpZiAobW9kZSA9PSBJTlRDX0xFVkVMX1RSSUdHRVIp
IHsKKwkJaWYgKHZhbCAmICgxVUwgPDwgaXJxKSkgeworCQkJdmFsICY9IH4oMVVMIDw8IGlycSk7
CisJCQl3cml0ZV80KHNjLCBJTlRDX0lOVEVSUlVQVF9UUklHR0VSX01PREVfUkVHX09GRlNFVCwK
KwkJCSAgICB2YWwpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKCEodmFsICYgKDFVTCA8PCBpcnEp
KSkgeworCQkJdmFsIHw9ICgxVUwgPDwgaXJxKTsKKwkJCXdyaXRlXzQoc2MsIElOVENfSU5URVJS
VVBUX1RSSUdHRVJfTU9ERV9SRUdfT0ZGU0VULAorCQkJICAgIHZhbCk7CisJCX0KKwl9Cit9CisK
Ky8qCisgKiBDb25maWd1cmUgaW50ZXJydXB0IHRyaWdnZXIgbGV2ZWwgdG8gYmUgQWN0aXZlIEhp
Z2gvTG93CisgKiBvciBSaXNpbmcvRmFsbGluZyBFZGdlCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9p
ZAorZWNvbmFfc2V0X2lycV9sZXZlbChzdHJ1Y3QgZWNvbmFfc29mdGMgKiBzYywKKyAgICB1bnNp
Z25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgbGV2ZWwpCit7CisJdW5zaWduZWQgaW50IHZhbDsK
KworCWlmICgobGV2ZWwgIT0gSU5UQ19BQ1RJVkVfSElHSCkgJiYKKwkgICAgKGxldmVsICE9IElO
VENfQUNUSVZFX0xPVykgJiYKKwkgICAgKGxldmVsICE9IElOVENfUklTSU5HX0VER0UpICYmCisJ
ICAgIChsZXZlbCAhPSBJTlRDX0ZBTExJTkdfRURHRSkpIHsKKwkJcmV0dXJuOworCX0KKworCXZh
bCA9IHJlYWRfNChzYywgSU5UQ19JTlRFUlJVUFRfVFJJR0dFUl9MRVZFTF9SRUdfT0ZGU0VUKTsK
KworCWlmICgobGV2ZWwgPT0gSU5UQ19BQ1RJVkVfSElHSCkgfHwgKGxldmVsID09IElOVENfUklT
SU5HX0VER0UpKSB7CisJCWlmICh2YWwgJiAoMVVMIDw8IGlycSkpIHsKKwkJCXZhbCAmPSB+KDFV
TCA8PCBpcnEpOworCQkJd3JpdGVfNChzYywgSU5UQ19JTlRFUlJVUFRfVFJJR0dFUl9MRVZFTF9S
RUdfT0ZGU0VULAorCQkJICAgIHZhbCk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoISh2YWwgJiAo
MVVMIDw8IGlycSkpKSB7CisJCQl2YWwgfD0gKDFVTCA8PCBpcnEpOworCQkJd3JpdGVfNChzYywg
SU5UQ19JTlRFUlJVUFRfVFJJR0dFUl9MRVZFTF9SRUdfT0ZGU0VULAorCQkJICAgIHZhbCk7CisJ
CX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCitnZXRfc3lzdGVtX2Nsb2NrKHZvaWQpCit7CisJdWlu
dDMyX3Qgc2Nsb2NrID0gc3lzdGVtX3JlYWRfNChlY29uYV9zb2Z0YywgU1lTVEVNX0NMT0NLKTsK
KworCXNjbG9jayA9IChzY2xvY2sgPj4gNikgJiAweDAzOworCisJc3dpdGNoIChzY2xvY2spIHsK
KwljYXNlIDA6CisJCUNQVV9jbG9jayA9IDE3NTAwMDAwMDsKKwkJYnJlYWs7CisJY2FzZSAxOgor
CQlDUFVfY2xvY2sgPSAyMDAwMDAwMDA7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJQ1BVX2Nsb2Nr
ID0gMjI1MDAwMDAwOworCQlicmVhazsKKwljYXNlIDM6CisJCUNQVV9jbG9jayA9IDI1MDAwMDAw
MDsKKwkJYnJlYWs7CisJfQorCUFIQl9jbG9jayA9IENQVV9jbG9jayA+PiAxOworCUFQQl9jbG9j
ayA9IEFIQl9jbG9jayA+PiAxOworfQorCitzdGF0aWMgaW50CitlY29uYV9hdHRhY2goZGV2aWNl
X3QgZGV2KQoreworCXN0cnVjdCBlY29uYV9zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRl
dik7CisJaW50IGk7CisKKwllY29uYV9zb2Z0YyA9IHNjOworCXNjLT5lY19zdCA9ICZlY29uYV9i
c190YWc7CisJc2MtPmVjX3NoID0gRUNPTkFfSU9fQkFTRTsKKwlzYy0+ZGV2ID0gZGV2OworCWlm
IChidXNfc3BhY2Vfc3VicmVnaW9uKHNjLT5lY19zdCwgc2MtPmVjX3NoLCBFQ09OQV9QSUNfQkFT
RSwKKwkgICAgRUNPTkFfUElDX1NJWkUsICZzYy0+ZWNfc3lzX3NoKSAhPSAwKQorCQlwYW5pYygi
VW5hYmxlIHRvIG1hcCBJUlEgcmVnaXN0ZXJzIik7CisKKwlpZiAoYnVzX3NwYWNlX3N1YnJlZ2lv
bihzYy0+ZWNfc3QsIHNjLT5lY19zaCwgRUNPTkFfU1lTVEVNX0JBU0UsCisJICAgIEVDT05BX1NZ
U1RFTV9TSVpFLCAmc2MtPmVjX3N5c3RlbV9zaCkgIT0gMCkKKwkJcGFuaWMoIlVuYWJsZSB0byBt
YXAgSVJRIHJlZ2lzdGVycyIpOworCisJc2MtPmVjX2lycV9ybWFuLnJtX3R5cGUgPSBSTUFOX0FS
UkFZOworCXNjLT5lY19pcnFfcm1hbi5ybV9kZXNjciA9ICJFQ09OQSBJUlFzIjsKKwlzYy0+ZWNf
bWVtX3JtYW4ucm1fdHlwZSA9IFJNQU5fQVJSQVk7CisJc2MtPmVjX21lbV9ybWFuLnJtX2Rlc2Ny
ID0gIkVDT05BIE1lbW9yeSI7CisJaWYgKHJtYW5faW5pdCgmc2MtPmVjX2lycV9ybWFuKSAhPSAw
IHx8CisJICAgIHJtYW5fbWFuYWdlX3JlZ2lvbigmc2MtPmVjX2lycV9ybWFuLCAwLCAzMSkgIT0g
MCkKKwkJcGFuaWMoImVjb25hX2F0dGFjaDogZmFpbGVkIHRvIHNldCB1cCBJUlEgcm1hbiIpOwor
CWlmIChybWFuX2luaXQoJnNjLT5lY19tZW1fcm1hbikgIT0gMCB8fAorCSAgICBybWFuX21hbmFn
ZV9yZWdpb24oJnNjLT5lY19tZW1fcm1hbiwgMCwKKwkgICAgfjApICE9IDApCisJCXBhbmljKCJl
Y29uYV9hdHRhY2g6IGZhaWxlZCB0byBzZXQgdXAgbWVtb3J5IHJtYW4iKTsKKworCXdyaXRlXzQo
c2MsIElOVENfSU5URVJSVVBUX0NMRUFSX0VER0VfVFJJR0dFUl9SRUdfT0ZGU0VULCAweGZmZmZm
ZmZmKTsKKworCXdyaXRlXzQoc2MsIElOVENfSU5URVJSVVBUX01BU0tfUkVHX09GRlNFVCwgMHhm
ZmZmZmZmZik7CisKKwl3cml0ZV80KHNjLCBJTlRDX0ZJUV9NT0RFX1NFTEVDVF9SRUdfT0ZGU0VU
LCAwKTsKKworCS8qaW5pdGlhbGl6ZSBpcnEqLworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7
CisJCWlmIChpbnRjX3RyaWdnZXJfdGFibGVbaV0ubW9kZSAhPSBJTlRDX1RSSUdHRVJfVU5LTk9X
TikgeworCQkJZWNvbmFfc2V0X2lycV9tb2RlKHNjLGksIGludGNfdHJpZ2dlcl90YWJsZVtpXS5t
b2RlKTsKKwkJCWVjb25hX3NldF9pcnFfbGV2ZWwoc2MsIGksIGludGNfdHJpZ2dlcl90YWJsZVtp
XS5sZXZlbCk7CisJCX0KKwl9CisKKwlnZXRfc3lzdGVtX2Nsb2NrKCk7CisKKwllY29uYV9jcHVf
YWRkX2J1aWx0aW5fY2hpbGRyZW4oZGV2LCBzYyk7CisKKwlidXNfZ2VuZXJpY19wcm9iZShkZXYp
OworCWJ1c19nZW5lcmljX2F0dGFjaChkZXYpOworCWVuYWJsZV9pbnRlcnJ1cHRzKEkzMl9iaXQg
fCBGMzJfYml0KTsKKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ug
KgorZWNvbmFfYWxsb2NfcmVzb3VyY2UoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCwgaW50
IHR5cGUsIGludCAqcmlkLAorICAgIHVfbG9uZyBzdGFydCwgdV9sb25nIGVuZCwgdV9sb25nIGNv
dW50LCB1X2ludCBmbGFncykKK3sKKwlzdHJ1Y3QgZWNvbmFfc29mdGMgKnNjID0gZGV2aWNlX2dl
dF9zb2Z0YyhkZXYpOworCXN0cnVjdCByZXNvdXJjZV9saXN0X2VudHJ5ICpybGU7CisJc3RydWN0
IGVjb25hX2l2YXIgKml2YXIgPSBkZXZpY2VfZ2V0X2l2YXJzKGNoaWxkKTsKKwlzdHJ1Y3QgcmVz
b3VyY2VfbGlzdCAqcmwgPSAmaXZhci0+cmVzb3VyY2VzOworCisJaWYgKGRldmljZV9nZXRfcGFy
ZW50KGNoaWxkKSAhPSBkZXYpCisJCXJldHVybiAoQlVTX0FMTE9DX1JFU09VUkNFKGRldmljZV9n
ZXRfcGFyZW50KGRldiksIGNoaWxkLAorCQkJICAgdHlwZSwgcmlkLCBzdGFydCwgZW5kLCBjb3Vu
dCwgZmxhZ3MpKTsKKworCXJsZSA9IHJlc291cmNlX2xpc3RfZmluZChybCwgdHlwZSwgKnJpZCk7
CisJaWYgKHJsZSA9PSBOVUxMKSB7CisJCXJldHVybiAoTlVMTCk7CisJfQorCWlmIChybGUtPnJl
cykKKwkJcGFuaWMoIlJlc291cmNlIHJpZCAlZCB0eXBlICVkIGFscmVhZHkgaW4gdXNlIiwgKnJp
ZCwgdHlwZSk7CisJaWYgKHN0YXJ0ID09IDBVTCAmJiBlbmQgPT0gfjBVTCkgeworCQlzdGFydCA9
IHJsZS0+c3RhcnQ7CisJCWNvdW50ID0gdWxtYXgoY291bnQsIHJsZS0+Y291bnQpOworCQllbmQg
PSB1bG1heChybGUtPmVuZCwgc3RhcnQgKyBjb3VudCAtIDEpOworCX0KKwlzd2l0Y2ggKHR5cGUp
CisJeworCWNhc2UgU1lTX1JFU19JUlE6CisJCXJsZS0+cmVzID0gcm1hbl9yZXNlcnZlX3Jlc291
cmNlKCZzYy0+ZWNfaXJxX3JtYW4sCisJCSAgICBzdGFydCwgZW5kLCBjb3VudCwgZmxhZ3MsIGNo
aWxkKTsKKwkJYnJlYWs7CisJY2FzZSBTWVNfUkVTX01FTU9SWToKKwkJcmxlLT5yZXMgPSBybWFu
X3Jlc2VydmVfcmVzb3VyY2UoJnNjLT5lY19tZW1fcm1hbiwKKwkJICAgIHN0YXJ0LCBlbmQsIGNv
dW50LCBmbGFncywgY2hpbGQpOworCQlpZiAocmxlLT5yZXMgIT0gTlVMTCkgeworCQkJcm1hbl9z
ZXRfYnVzdGFnKHJsZS0+cmVzLCAmZWNvbmFfYnNfdGFnKTsKKwkJCXJtYW5fc2V0X2J1c2hhbmRs
ZShybGUtPnJlcywgc3RhcnQpOworCQl9CisJCWJyZWFrOworCX0KKwlpZiAocmxlLT5yZXMpIHsK
KwkJcmxlLT5zdGFydCA9IHJtYW5fZ2V0X3N0YXJ0KHJsZS0+cmVzKTsKKwkJcmxlLT5lbmQgPSBy
bWFuX2dldF9lbmQocmxlLT5yZXMpOworCQlybGUtPmNvdW50ID0gY291bnQ7CisJCXJtYW5fc2V0
X3JpZChybGUtPnJlcywgKnJpZCk7CisJfQorCXJldHVybiAocmxlLT5yZXMpOworfQorCitzdGF0
aWMgc3RydWN0IHJlc291cmNlX2xpc3QgKgorZWNvbmFfZ2V0X3Jlc291cmNlX2xpc3QoZGV2aWNl
X3QgZGV2LCBkZXZpY2VfdCBjaGlsZCkKK3sKKwlzdHJ1Y3QgZWNvbmFfaXZhciAqaXZhcjsKKwlp
dmFyID0gZGV2aWNlX2dldF9pdmFycyhjaGlsZCk7CisJcmV0dXJuICgmKGl2YXItPnJlc291cmNl
cykpOworfQorCitzdGF0aWMgaW50CitlY29uYV9yZWxlYXNlX3Jlc291cmNlKGRldmljZV90IGRl
diwgZGV2aWNlX3QgY2hpbGQsIGludCB0eXBlLAorICAgIGludCByaWQsIHN0cnVjdCByZXNvdXJj
ZSAqcikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdCAqcmw7CisJc3RydWN0IHJlc291cmNlX2xp
c3RfZW50cnkgKnJsZTsKKworCXJsID0gZWNvbmFfZ2V0X3Jlc291cmNlX2xpc3QoZGV2LCBjaGls
ZCk7CisJaWYgKHJsID09IE5VTEwpCisJCXJldHVybiAoRUlOVkFMKTsKKwlybGUgPSByZXNvdXJj
ZV9saXN0X2ZpbmQocmwsIHR5cGUsIHJpZCk7CisJaWYgKHJsZSA9PSBOVUxMKQorCQlyZXR1cm4g
KEVJTlZBTCk7CisJcm1hbl9yZWxlYXNlX3Jlc291cmNlKHIpOworCXJsZS0+cmVzID0gTlVMTDsK
KwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitlY29uYV9zZXR1cF9pbnRyKGRldmljZV90
IGRldiwgZGV2aWNlX3QgY2hpbGQsCisgICAgc3RydWN0IHJlc291cmNlICppcmVzLCBpbnQgZmxh
Z3MsIGRyaXZlcl9maWx0ZXJfdCAqZmlsdCwKKyAgICBkcml2ZXJfaW50cl90ICppbnRyLCB2b2lk
ICphcmcsIHZvaWQgKipjb29raWVwKQoreworCisJaWYgKHJtYW5fZ2V0X3N0YXJ0KGlyZXMpID09
IEVDT05BX0lSUV9TWVNURU0gJiYgZmlsdCA9PSBOVUxMKQorCQlwYW5pYygiQWxsIHN5c3RlbSBp
bnRlcnJ1cHQgSVNScyBtdXN0IGJlIEZJTFRFUiIpOworCisJQlVTX1NFVFVQX0lOVFIoZGV2aWNl
X2dldF9wYXJlbnQoZGV2KSwgY2hpbGQsIGlyZXMsIGZsYWdzLCBmaWx0LAorCSAgICBpbnRyLCBh
cmcsIGNvb2tpZXApOworCisJYXJtX3VubWFza19pcnEocm1hbl9nZXRfc3RhcnQoaXJlcykpOwor
CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorZWNvbmFfdGVhcmRvd25faW50cihkZXZp
Y2VfdCBkZXYsIGRldmljZV90IGNoaWxkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKyAgICB2b2lk
ICpjb29raWUpCit7CisKKwlyZXR1cm4gKEJVU19URUFSRE9XTl9JTlRSKGRldmljZV9nZXRfcGFy
ZW50KGRldiksIGNoaWxkLCByZXMsIGNvb2tpZSkpOworfQorCitzdGF0aWMgaW50CitlY29uYV9h
Y3RpdmF0ZV9yZXNvdXJjZShkZXZpY2VfdCBidXMsIGRldmljZV90IGNoaWxkLCBpbnQgdHlwZSwg
aW50IHJpZCwKKyAgICBzdHJ1Y3QgcmVzb3VyY2UgKnIpCit7CisKKwlyZXR1cm4gKHJtYW5fYWN0
aXZhdGVfcmVzb3VyY2UocikpOworfQorCitzdGF0aWMgaW50CitlY29uYV9wcmludF9jaGlsZChk
ZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkKQoreworCXN0cnVjdCBlY29uYV9pdmFyICppdmFy
czsKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdCAqcmw7CisJaW50IHJldHZhbCA9IDA7CisKKwlpdmFy
cyA9IGRldmljZV9nZXRfaXZhcnMoY2hpbGQpOworCXJsID0gJml2YXJzLT5yZXNvdXJjZXM7CisK
KwlyZXR2YWwgKz0gYnVzX3ByaW50X2NoaWxkX2hlYWRlcihkZXYsIGNoaWxkKTsKKworCXJldHZh
bCArPSByZXNvdXJjZV9saXN0X3ByaW50X3R5cGUocmwsICJwb3J0IiwgU1lTX1JFU19JT1BPUlQs
ICIlI2x4Iik7CisJcmV0dmFsICs9IHJlc291cmNlX2xpc3RfcHJpbnRfdHlwZShybCwgIm1lbSIs
IFNZU19SRVNfTUVNT1JZLCAiJSNseCIpOworCXJldHZhbCArPSByZXNvdXJjZV9saXN0X3ByaW50
X3R5cGUocmwsICJpcnEiLCBTWVNfUkVTX0lSUSwgIiVsZCIpOworCWlmIChkZXZpY2VfZ2V0X2Zs
YWdzKGRldikpCisJCXJldHZhbCArPSBwcmludGYoIiBmbGFncyAlI3giLCBkZXZpY2VfZ2V0X2Zs
YWdzKGRldikpOworCisJcmV0dmFsICs9IGJ1c19wcmludF9jaGlsZF9mb290ZXIoZGV2LCBjaGls
ZCk7CisKKwlyZXR1cm4gKHJldHZhbCk7Cit9CisKK3ZvaWQKK2FybV9tYXNrX2lycSh1aW50cHRy
X3QgbmIpCit7CisJdW5zaWduZWQgaW50IHZhbHVlOworCisJdmFsdWUgPSByZWFkXzQoZWNvbmFf
c29mdGMsSU5UQ19JTlRFUlJVUFRfTUFTS19SRUdfT0ZGU0VUKSB8IDE8PG5iOworCXdyaXRlXzQo
ZWNvbmFfc29mdGMsIElOVENfSU5URVJSVVBUX01BU0tfUkVHX09GRlNFVCwgdmFsdWUpOworfQor
Cit2b2lkCithcm1fdW5tYXNrX2lycSh1aW50cHRyX3QgbmIpCit7CisJdW5zaWduZWQgaW50IHZh
bHVlOworCisJdmFsdWUgPSByZWFkXzQoZWNvbmFfc29mdGMsCisJICAgIElOVENfSU5URVJSVVBU
X0NMRUFSX0VER0VfVFJJR0dFUl9SRUdfT0ZGU0VUKSB8ICgxIDw8IG5iKTsKKwl3cml0ZV80KGVj
b25hX3NvZnRjLAorCSAgICBJTlRDX0lOVEVSUlVQVF9DTEVBUl9FREdFX1RSSUdHRVJfUkVHX09G
RlNFVCwgdmFsdWUpOworCXZhbHVlID0gcmVhZF80KGVjb25hX3NvZnRjLCBJTlRDX0lOVEVSUlVQ
VF9NQVNLX1JFR19PRkZTRVQpJiB+KDEgPDwgbmIpOworCXdyaXRlXzQoZWNvbmFfc29mdGMsIElO
VENfSU5URVJSVVBUX01BU0tfUkVHX09GRlNFVCwgdmFsdWUpOworfQorCitpbnQKK2FybV9nZXRf
bmV4dF9pcnEoaW50IHgpCit7CisJaW50IGlycTsKKworCWlycSA9IHJlYWRfNChlY29uYV9zb2Z0
YywgSU5UQ19JTlRFUlJVUFRfU1RBVFVTX1JFR19PRkZTRVQpICYKKwkgICAgfihyZWFkXzQoZWNv
bmFfc29mdGMsIElOVENfSU5URVJSVVBUX01BU0tfUkVHX09GRlNFVCkpOworCisJaWYgKGlycSE9
MCkgeworCQlyZXR1cm4gKGZmcyhpcnEpIC0gMSk7CisJfQorCisJcmV0dXJuICgtMSk7Cit9CisK
K3ZvaWQKK2NwdV9yZXNldCh2b2lkKQoreworCXVpbnQzMl90IGNvbnRyb2w7CisKKwljb250cm9s
ID0gc3lzdGVtX3JlYWRfNChlY29uYV9zb2Z0YywgUkVTRVRfQ09OVFJPTCk7CisJY29udHJvbCB8
PSBHTE9CQUxfUkVTRVQ7CisJc3lzdGVtX3dyaXRlXzQoZWNvbmFfc29mdGMsIFJFU0VUX0NPTlRS
T0wsIGNvbnRyb2wpOworCWNvbnRyb2wgPSBzeXN0ZW1fcmVhZF80KGVjb25hX3NvZnRjLCBSRVNF
VF9DT05UUk9MKTsKKwljb250cm9sICY9ICh+KEdMT0JBTF9SRVNFVCkpOworCXN5c3RlbV93cml0
ZV80KGVjb25hX3NvZnRjLCBSRVNFVF9DT05UUk9MLCBjb250cm9sKTsKKwl3aGlsZSAoMSk7Cit9
CisKKworCit2b2lkCitwb3dlcl9vbl9uZXR3b3JrX2ludGVyZmFjZSh2b2lkKQoreworCXVpbnQz
Ml90IGNmZ19yZWc7CisJaW50IGlpOworCisJY2ZnX3JlZyA9ICBzeXN0ZW1fcmVhZF80KGVjb25h
X3NvZnRjLCBSRVNFVF9DT05UUk9MKTsKKwljZmdfcmVnIHw9IE5FVF9JTlRFUkZBQ0VfUkVTRVQ7
CisJLyogc2V0IHJlc2V0IGJpdCB0byBISUdIIGFjdGl2ZTsgKi8KKwlzeXN0ZW1fd3JpdGVfNChl
Y29uYV9zb2Z0YywgUkVTRVRfQ09OVFJPTCwgY2ZnX3JlZyk7CisKKwkvKnB1bHNlIGRlbGF5ICov
CisJZm9yIChpaSA9IDA7IGlpIDwgMHhGRkY7IGlpKyspCisJCURFTEFZKDEwMCk7CisJLyogc2V0
IHJlc2V0IGJpdCB0byBMT1cgYWN0aXZlOyAqLworCWNmZ19yZWcgPSAgc3lzdGVtX3JlYWRfNChl
Y29uYV9zb2Z0YywgUkVTRVRfQ09OVFJPTCk7CisJY2ZnX3JlZyAmPSB+KE5FVF9JTlRFUkZBQ0Vf
UkVTRVQpOworCXN5c3RlbV93cml0ZV80KGVjb25hX3NvZnRjLCBSRVNFVF9DT05UUk9MLCBjZmdf
cmVnKTsKKworCS8qcHVsc2UgZGVsYXkgKi8KKwlmb3IgKGlpID0gMDsgaWkgPCAweEZGRjsgaWkr
KykKKwkJREVMQVkoMTAwKTsKKwljZmdfcmVnID0gc3lzdGVtX3JlYWRfNChlY29uYV9zb2Z0Yywg
UkVTRVRfQ09OVFJPTCk7CisJY2ZnX3JlZyB8PSBORVRfSU5URVJGQUNFX1JFU0VUOworCS8qIHNl
dCByZXNldCBiaXQgdG8gSElHSCBhY3RpdmU7ICovCisJc3lzdGVtX3dyaXRlXzQoZWNvbmFfc29m
dGMsIFJFU0VUX0NPTlRST0wsIGNmZ19yZWcpOworfQorCit1bnNpZ25lZCBpbnQKK2dldF90Y2xr
KHZvaWQpCit7CisKKwlyZXR1cm4gQ1BVX2Nsb2NrOworfQorCitzdGF0aWMgZGV2aWNlX21ldGhv
ZF90IGVjb25hX21ldGhvZHNbXSA9IHsKKwlERVZNRVRIT0QoZGV2aWNlX3Byb2JlLAkJZWNvbmFf
cHJvYmUpLAorCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLAkJZWNvbmFfYXR0YWNoKSwKKwlERVZN
RVRIT0QoZGV2aWNlX2lkZW50aWZ5LAkJZWNvbmFfaWRlbnRpZnkpLAorCURFVk1FVEhPRChidXNf
YWxsb2NfcmVzb3VyY2UsCQllY29uYV9hbGxvY19yZXNvdXJjZSksCisJREVWTUVUSE9EKGJ1c19z
ZXR1cF9pbnRyLAkJZWNvbmFfc2V0dXBfaW50ciksCisJREVWTUVUSE9EKGJ1c190ZWFyZG93bl9p
bnRyLAkJZWNvbmFfdGVhcmRvd25faW50ciksCisJREVWTUVUSE9EKGJ1c19hY3RpdmF0ZV9yZXNv
dXJjZSwJZWNvbmFfYWN0aXZhdGVfcmVzb3VyY2UpLAorCURFVk1FVEhPRChidXNfZGVhY3RpdmF0
ZV9yZXNvdXJjZSwgYnVzX2dlbmVyaWNfZGVhY3RpdmF0ZV9yZXNvdXJjZSksCisJREVWTUVUSE9E
KGJ1c19nZXRfcmVzb3VyY2VfbGlzdCwJZWNvbmFfZ2V0X3Jlc291cmNlX2xpc3QpLAorCURFVk1F
VEhPRChidXNfc2V0X3Jlc291cmNlLAkJYnVzX2dlbmVyaWNfcmxfc2V0X3Jlc291cmNlKSwKKwlE
RVZNRVRIT0QoYnVzX2dldF9yZXNvdXJjZSwJCWJ1c19nZW5lcmljX3JsX2dldF9yZXNvdXJjZSks
CisJREVWTUVUSE9EKGJ1c19yZWxlYXNlX3Jlc291cmNlLAllY29uYV9yZWxlYXNlX3Jlc291cmNl
KSwKKwlERVZNRVRIT0QoYnVzX3ByaW50X2NoaWxkLAkJZWNvbmFfcHJpbnRfY2hpbGQpLAorCXsw
LCAwfSwKK307CisKK3N0YXRpYyBkcml2ZXJfdCBlY29uYV9kcml2ZXIgPSB7CisJImVjb25hYXJt
IiwKKwllY29uYV9tZXRob2RzLAorCXNpemVvZihzdHJ1Y3QgZWNvbmFfc29mdGMpLAorfTsKK3N0
YXRpYyBkZXZjbGFzc190IGVjb25hX2RldmNsYXNzOworCitEUklWRVJfTU9EVUxFKGVjb25hYXJt
LCBuZXh1cywgZWNvbmFfZHJpdmVyLCBlY29uYV9kZXZjbGFzcywgMCwgMCk7CkluZGV4OiBhcm0v
ZWNvbmEvZWhjaV9lYnVzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXJtL2Vjb25hL2VoY2lfZWJ1cy5jCShy
ZXZpc2lvbiAwKQorKysgYXJtL2Vjb25hL2VoY2lfZWJ1cy5jCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDMwMCBAQAorLyotCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgWW9oYW5lcyBOdWdyb2hvIDx5
b2hhbmVzQGdtYWlsLmNvbT4KKyAqIGJhc2VkIG9uIGVoY2lfbWJ1cy5jCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggTUFSVkVMTCBJTlRFUk5BVElPTkFMIExURC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBNQVJWRUxMIG5vciB0
aGUgbmFtZXMgb2YgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAor
ICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICog
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAq
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
CisgKiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJT
RElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgIm9wdF9idXMuaCIKKworI2luY2x1ZGUgPG1h
Y2hpbmUvcmVzb3VyY2UuaD4KKworI2luY2x1ZGUgPHN5cy9zdGRpbnQuaD4KKyNpbmNsdWRlIDxz
eXMvc3RkZGVmLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3F1ZXVl
Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisjaW5j
bHVkZSA8c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMv
bGlua2VyX3NldC5oPgorI2luY2x1ZGUgPHN5cy9tb2R1bGUuaD4KKyNpbmNsdWRlIDxzeXMvbG9j
ay5oPgorI2luY2x1ZGUgPHN5cy9tdXRleC5oPgorI2luY2x1ZGUgPHN5cy9jb25kdmFyLmg+Cisj
aW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2luY2x1ZGUgPHN5cy9zeC5oPgorI2luY2x1ZGUgPHN5
cy91bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvY2FsbG91dC5oPgorI2luY2x1ZGUgPHN5cy9tYWxs
b2MuaD4KKyNpbmNsdWRlIDxzeXMvcHJpdi5oPgorCisjaW5jbHVkZSA8c3lzL3JtYW4uaD4KKwor
I2luY2x1ZGUgPGRldi91c2IvdXNiLmg+CisjaW5jbHVkZSA8ZGV2L3VzYi91c2JkaS5oPgorCisj
aW5jbHVkZSA8ZGV2L3VzYi91c2JfY29yZS5oPgorI2luY2x1ZGUgPGRldi91c2IvdXNiX2J1c2Rt
YS5oPgorI2luY2x1ZGUgPGRldi91c2IvdXNiX3Byb2Nlc3MuaD4KKyNpbmNsdWRlIDxkZXYvdXNi
L3VzYl91dGlsLmg+CisKKyNpbmNsdWRlIDxkZXYvdXNiL3VzYl9jb250cm9sbGVyLmg+CisjaW5j
bHVkZSA8ZGV2L3VzYi91c2JfYnVzLmg+CisjaW5jbHVkZSA8ZGV2L3VzYi9jb250cm9sbGVyL2Vo
Y2kuaD4KKyNpbmNsdWRlIDxkZXYvdXNiL2NvbnRyb2xsZXIvZWhjaXJlZy5oPgorCisKK3N0YXRp
YyBkZXZpY2VfYXR0YWNoX3QgZWhjaV9lYnVzX2F0dGFjaDsKK3N0YXRpYyBkZXZpY2VfZGV0YWNo
X3QgZWhjaV9lYnVzX2RldGFjaDsKK3N0YXRpYyBkZXZpY2Vfc2h1dGRvd25fdCBlaGNpX2VidXNf
c2h1dGRvd247CitzdGF0aWMgZGV2aWNlX3N1c3BlbmRfdCBlaGNpX2VidXNfc3VzcGVuZDsKK3N0
YXRpYyBkZXZpY2VfcmVzdW1lX3QgZWhjaV9lYnVzX3Jlc3VtZTsKKworCitzdGF0aWMgdm9pZCAq
aWhfZXJyOworCisjZGVmaW5lCUVIQ0lfSENfREVWU1RSICJDTlMxMVhYIFVTQiBFSENJIgorI2Rl
ZmluZQlVU0JfQlJJREdFX0lOVFJfTUFTSyAgIDB4MjE0CisKK3N0YXRpYyBpbnQKK2VoY2lfZWJ1
c19zdXNwZW5kKGRldmljZV90IHNlbGYpCit7CisJZWhjaV9zb2Z0Y190ICpzYyA9IGRldmljZV9n
ZXRfc29mdGMoc2VsZik7CisJaW50IGVycjsKKworCWVyciA9IGJ1c19nZW5lcmljX3N1c3BlbmQo
c2VsZik7CisJaWYgKGVycikKKwkJcmV0dXJuIChlcnIpOworCWVoY2lfc3VzcGVuZChzYyk7CisJ
cmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorZWhjaV9lYnVzX3Jlc3VtZShkZXZpY2VfdCBz
ZWxmKQoreworCWVoY2lfc29mdGNfdCAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKHNlbGYpOworCisJ
ZWhjaV9yZXN1bWUoc2MpOworCisJYnVzX2dlbmVyaWNfcmVzdW1lKHNlbGYpOworCisJcmV0dXJu
ICgwKTsKK30KKworc3RhdGljIGludAorZWhjaV9lYnVzX3NodXRkb3duKGRldmljZV90IHNlbGYp
Cit7CisJZWhjaV9zb2Z0Y190ICpzYyA9IGRldmljZV9nZXRfc29mdGMoc2VsZik7CisJaW50IGVy
cjsKKworCWVyciA9IGJ1c19nZW5lcmljX3NodXRkb3duKHNlbGYpOworCWlmIChlcnIpCisJCXJl
dHVybiAoZXJyKTsKKwllaGNpX3NodXRkb3duKHNjKTsKKworCXJldHVybiAoMCk7Cit9CisKK3N0
YXRpYyBpbnQKK2VoY2lfZWJ1c19wcm9iZShkZXZpY2VfdCBzZWxmKQoreworCisJZGV2aWNlX3Nl
dF9kZXNjKHNlbGYsIEVIQ0lfSENfREVWU1RSKTsKKworCXJldHVybiAoQlVTX1BST0JFX0RFRkFV
TFQpOworfQorCitzdGF0aWMgaW50CitlaGNpX2VidXNfYXR0YWNoKGRldmljZV90IHNlbGYpCit7
CisJZWhjaV9zb2Z0Y190ICpzYyA9IGRldmljZV9nZXRfc29mdGMoc2VsZik7CisJYnVzX3NwYWNl
X2hhbmRsZV90IGJzaDsKKwlpbnQgZXJyOworCWludCByaWQ7CisKKwkvKiBpbml0aWFsaXNlIHNv
bWUgYnVzIGZpZWxkcyAqLworCXNjLT5zY19idXMucGFyZW50ID0gc2VsZjsKKwlzYy0+c2NfYnVz
LmRldmljZXMgPSBzYy0+c2NfZGV2aWNlczsKKwlzYy0+c2NfYnVzLmRldmljZXNfbWF4ID0gRUhD
SV9NQVhfREVWSUNFUzsKKworCS8qIGdldCBhbGwgRE1BIG1lbW9yeSAqLworCWlmICh1c2JfYnVz
X21lbV9hbGxvY19hbGwoJnNjLT5zY19idXMsCisJICAgIFVTQl9HRVRfRE1BX1RBRyhzZWxmKSwg
JmVoY2lfaXRlcmF0ZV9od19zb2Z0YykpIHsKKwkJcmV0dXJuIChFTk9NRU0pOworCX0KKworCXNj
LT5zY19idXMudXNicmV2ID0gVVNCX1JFVl8yXzA7CisKKwlyaWQgPSAwOworCXNjLT5zY19pb19y
ZXMgPSBidXNfYWxsb2NfcmVzb3VyY2VfYW55KHNlbGYsIFNZU19SRVNfTUVNT1JZLAorCSAgICAm
cmlkLCBSRl9BQ1RJVkUpOworCWlmICghc2MtPnNjX2lvX3JlcykgeworCQlkZXZpY2VfcHJpbnRm
KHNlbGYsICJDb3VsZCBub3QgbWFwIG1lbW9yeVxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCXNj
LT5zY19pb190YWcgPSBybWFuX2dldF9idXN0YWcoc2MtPnNjX2lvX3Jlcyk7CisJYnNoID0gcm1h
bl9nZXRfYnVzaGFuZGxlKHNjLT5zY19pb19yZXMpOworCisJLyptYWdpYywgdW5kb2N1bWVudGVk
IGluaXRpYWxpemF0aW9uKi8KKwlidXNfc3BhY2Vfd3JpdGVfNCgoc2MpLT5zY19pb190YWcsIGJz
aCwgMHgwNCwgMHgxMDYpOworCisJYnVzX3NwYWNlX3dyaXRlXzQoKHNjKS0+c2NfaW9fdGFnLCBi
c2gsIDB4NDAsICgzIDw8IDUpfDB4MjAwMCk7CisKKwlERUxBWSgxMDAwKTsKKworCXNjLT5zY19p
b19zaXplID0gIDQwOTY7CisKKwlpZiAoYnVzX3NwYWNlX3N1YnJlZ2lvbihzYy0+c2NfaW9fdGFn
LCBic2gsIDB4NDAwMDAwMCwKKwkgICAgc2MtPnNjX2lvX3NpemUsICZzYy0+c2NfaW9faGRsKSAh
PSAwKQorCQlwYW5pYygiJXM6IHVuYWJsZSB0byBzdWJyZWdpb24gVVNCIGhvc3QgcmVnaXN0ZXJz
IiwKKwkJICAgIGRldmljZV9nZXRfbmFtZShzZWxmKSk7CisKKwlyaWQgPSAwOworCXNjLT5zY19p
cnFfcmVzID0gYnVzX2FsbG9jX3Jlc291cmNlX2FueShzZWxmLCBTWVNfUkVTX0lSUSwgJnJpZCwK
KwkgICAgUkZfU0hBUkVBQkxFIHwgUkZfQUNUSVZFKTsKKwlpZiAoc2MtPnNjX2lycV9yZXMgPT0g
TlVMTCkgeworCQlkZXZpY2VfcHJpbnRmKHNlbGYsICJDb3VsZCBub3QgYWxsb2NhdGUgaXJxXG4i
KTsKKwkJZWhjaV9lYnVzX2RldGFjaChzZWxmKTsKKwkJcmV0dXJuIChFTlhJTyk7CisJfQorCisJ
c2MtPnNjX2J1cy5iZGV2ID0gZGV2aWNlX2FkZF9jaGlsZChzZWxmLCAidXNidXMiLCAtMSk7CisJ
aWYgKCFzYy0+c2NfYnVzLmJkZXYpIHsKKwkJZGV2aWNlX3ByaW50ZihzZWxmLCAiQ291bGQgbm90
IGFkZCBVU0IgZGV2aWNlXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisJZGV2aWNlX3NldF9pdmFy
cyhzYy0+c2NfYnVzLmJkZXYsICZzYy0+c2NfYnVzKTsKKwlkZXZpY2Vfc2V0X2Rlc2Moc2MtPnNj
X2J1cy5iZGV2LCBFSENJX0hDX0RFVlNUUik7CisKKwlzcHJpbnRmKHNjLT5zY192ZW5kb3IsICJD
YXZpdW0iKTsKKworCWVyciA9IGJ1c19zZXR1cF9pbnRyKHNlbGYsc2MtPnNjX2lycV9yZXMsCisJ
ICAgIElOVFJfVFlQRV9CSU8gfCBJTlRSX01QU0FGRSwgTlVMTCwKKwkgICAgKGRyaXZlcl9pbnRy
X3QgKillaGNpX2ludGVycnVwdCwgc2MsCisJICAgICZzYy0+c2NfaW50cl9oZGwpOworCWlmIChl
cnIpIHsKKwkJZGV2aWNlX3ByaW50ZihzZWxmLCAiQ291bGQgbm90IHNldHVwIGVycm9yIGlycSwg
JWRcbiIsIGVycik7CisJCWloX2VyciA9IE5VTEw7CisJCWdvdG8gZXJyb3I7CisJfQorCisJZXJy
ID0gZWhjaV9pbml0KHNjKTsKKwlpZiAoIWVycikgeworCQllcnIgPSBkZXZpY2VfcHJvYmVfYW5k
X2F0dGFjaChzYy0+c2NfYnVzLmJkZXYpOworCX0KKwlpZiAoZXJyKSB7CisJCWRldmljZV9wcmlu
dGYoc2VsZiwgIlVTQiBpbml0IGZhaWxlZCBlcnI9JWRcbiIsIGVycik7CisJCWdvdG8gZXJyb3I7
CisJfQorCXJldHVybiAoMCk7CisKK2Vycm9yOgorCWVoY2lfZWJ1c19kZXRhY2goc2VsZik7CisJ
cmV0dXJuIChFTlhJTyk7Cit9CisKK3N0YXRpYyBpbnQKK2VoY2lfZWJ1c19kZXRhY2goZGV2aWNl
X3Qgc2VsZikKK3sKKwllaGNpX3NvZnRjX3QgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhzZWxmKTsK
KwlkZXZpY2VfdCBiZGV2OworCWludCBlcnI7CisKKwlpZiAoc2MtPnNjX2J1cy5iZGV2KSB7CisJ
CWJkZXYgPSBzYy0+c2NfYnVzLmJkZXY7CisJCWRldmljZV9kZXRhY2goYmRldik7CisJCWRldmlj
ZV9kZWxldGVfY2hpbGQoc2VsZiwgYmRldik7CisJfQorCS8qIGR1cmluZyBtb2R1bGUgdW5sb2Fk
IHRoZXJlIGFyZSBsb3RzIG9mIGNoaWxkcmVuIGxlZnRvdmVyICovCisJZGV2aWNlX2RlbGV0ZV9h
bGxfY2hpbGRyZW4oc2VsZik7CisKKwkvKgorCSAqIGRpc2FibGUgaW50ZXJydXB0cyB0aGF0IG1p
Z2h0IGhhdmUgYmVlbiBzd2l0Y2hlZCBvbiBpbiBlaGNpX2luaXQKKwkgKi8KKwlpZiAoc2MtPnNj
X2lvX3JlcykgeworCQlFV1JJVEU0KHNjLCBFSENJX1VTQklOVFIsIDApOworCQlFV1JJVEU0KHNj
LCBVU0JfQlJJREdFX0lOVFJfTUFTSywgMCk7CisJfQorCWlmIChzYy0+c2NfaXJxX3JlcyAmJiBz
Yy0+c2NfaW50cl9oZGwpIHsKKwkJLyoKKwkJICogb25seSBjYWxsIGVoY2lfZGV0YWNoKCkgYWZ0
ZXIgZWhjaV9pbml0KCkKKwkJICovCisJCWVoY2lfZGV0YWNoKHNjKTsKKworCQllcnIgPSBidXNf
dGVhcmRvd25faW50cihzZWxmLCBzYy0+c2NfaXJxX3Jlcywgc2MtPnNjX2ludHJfaGRsKTsKKwor
CQlpZiAoZXJyKQorCQkJLyogWFhYIG9yIHNob3VsZCB3ZSBwYW5pYz8gKi8KKwkJCWRldmljZV9w
cmludGYoc2VsZiwgIkNvdWxkIG5vdCB0ZWFyIGRvd24gaXJxLCAlZFxuIiwKKwkJCSAgICBlcnIp
OworCQlzYy0+c2NfaW50cl9oZGwgPSBOVUxMOworCX0KKwlpZiAoc2MtPnNjX2lycV9yZXMpIHsK
KwkJYnVzX3JlbGVhc2VfcmVzb3VyY2Uoc2VsZiwgU1lTX1JFU19JUlEsIDEsIHNjLT5zY19pcnFf
cmVzKTsKKwkJc2MtPnNjX2lycV9yZXMgPSBOVUxMOworCX0KKwlpZiAoc2MtPnNjX2lvX3Jlcykg
eworCQlidXNfcmVsZWFzZV9yZXNvdXJjZShzZWxmLCBTWVNfUkVTX01FTU9SWSwgMCwKKwkJICAg
IHNjLT5zY19pb19yZXMpOworCQlzYy0+c2NfaW9fcmVzID0gTlVMTDsKKwl9CisJdXNiX2J1c19t
ZW1fZnJlZV9hbGwoJnNjLT5zY19idXMsICZlaGNpX2l0ZXJhdGVfaHdfc29mdGMpOworCisJcmV0
dXJuICgwKTsKK30KKworc3RhdGljIGRldmljZV9tZXRob2RfdCBlaGNpX21ldGhvZHNbXSA9IHsK
KwkvKiBEZXZpY2UgaW50ZXJmYWNlICovCisJREVWTUVUSE9EKGRldmljZV9wcm9iZSwgZWhjaV9l
YnVzX3Byb2JlKSwKKwlERVZNRVRIT0QoZGV2aWNlX2F0dGFjaCwgZWhjaV9lYnVzX2F0dGFjaCks
CisJREVWTUVUSE9EKGRldmljZV9kZXRhY2gsIGVoY2lfZWJ1c19kZXRhY2gpLAorCURFVk1FVEhP
RChkZXZpY2Vfc3VzcGVuZCwgZWhjaV9lYnVzX3N1c3BlbmQpLAorCURFVk1FVEhPRChkZXZpY2Vf
cmVzdW1lLCBlaGNpX2VidXNfcmVzdW1lKSwKKwlERVZNRVRIT0QoZGV2aWNlX3NodXRkb3duLCBl
aGNpX2VidXNfc2h1dGRvd24pLAorCisJLyogQnVzIGludGVyZmFjZSAqLworCURFVk1FVEhPRChi
dXNfcHJpbnRfY2hpbGQsIGJ1c19nZW5lcmljX3ByaW50X2NoaWxkKSwKKworCXswLCAwfQorfTsK
Kworc3RhdGljIGRyaXZlcl90IGVoY2lfZHJpdmVyID0geworCSJlaGNpIiwKKwllaGNpX21ldGhv
ZHMsCisJc2l6ZW9mKGVoY2lfc29mdGNfdCksCit9OworCitzdGF0aWMgZGV2Y2xhc3NfdCBlaGNp
X2RldmNsYXNzOworCitEUklWRVJfTU9EVUxFKGVoY2ksIGVjb25hYXJtLCBlaGNpX2RyaXZlciwg
ZWhjaV9kZXZjbGFzcywgMCwgMCk7CitNT0RVTEVfREVQRU5EKGVoY2ksIHVzYiwgMSwgMSwgMSk7
CkluZGV4OiBhcm0vZWNvbmEvZWNvbmFfcmVnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXJtL2Vjb25hL2Vj
b25hX3JlZy5oCShyZXZpc2lvbiAwKQorKysgYXJtL2Vjb25hL2Vjb25hX3JlZy5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDE3OCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgWW9oYW5l
cyBOdWdyb2hvIDx5b2hhbmVzQGdtYWlsLmNvbT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVVRIT1IgQU5EIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFVVEhPUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVm
CV9BUk1fRUNPTkFfUkVHX0gKKyNkZWZpbmUJX0FSTV9FQ09OQV9SRUdfSAorCisjZGVmaW5lCUVD
T05BX1NSQU1fU0laRQkweDEwMDAwMDAwCisjZGVmaW5lCUVDT05BX0RSQU1fQkFTRQkweDAwMDAw
MDAwIC8qIERSQU0gKHZpYSBERFIgQ29udHJvbCBNb2R1bGUpICovCisKKyNkZWZpbmUJRUNPTkFf
U0RSQU1fQkFTRQkweDQwMDAwMDAwCisjZGVmaW5lCUVDT05BX1NEUkFNX1NJWkUJMHgxMDAwMDAw
CisKKworI2RlZmluZQlFQ09OQV9JT19CQVNFCQkweDcwMDAwMDAwCisjZGVmaW5lCUVDT05BX0lP
X1NJWkUJCTB4MEUwMDAwMDAKKyNkZWZpbmUJRUNPTkFfUElDX0JBU0UJCTB4MEQwMDAwMDAKKyNk
ZWZpbmUJRUNPTkFfUElDX1NJWkUJCTB4MDEwMDAwMDAKKworI2RlZmluZQlFQ09OQV9VQVJUX0JB
U0UJMHgwODAwMDAwMAorI2RlZmluZQlFQ09OQV9VQVJUX1NJWkUJMHgwMTAwMDAwMAorI2RlZmlu
ZQlFQ09OQV9JUlFfVUFSVAkJMHhBCisKKyNkZWZpbmUJRUNPTkFfVElNRVJfQkFTRQkweDA5MDAw
MDAwCisjZGVmaW5lCUVDT05BX1RJTUVSX1NJWkUJMHgwMTAwMDAwMAorI2RlZmluZQlFQ09OQV9J
UlFfVElNRVJfMQkwCisjZGVmaW5lCUVDT05BX0lSUV9USU1FUl8yCTEKKyNkZWZpbmUJRUNPTkFf
SVJRX09IQ0kJCTIzCisjZGVmaW5lCUVDT05BX0lSUV9FSENJCQkyNAorCisjZGVmaW5lCUVDT05B
X05FVF9CQVNFCQkweDAwMDAwMDAwCisKKyNkZWZpbmUJRUNPTkFfU1lTVEVNX0JBU0UJMHgwNzAw
MDAwMAorI2RlZmluZQlFQ09OQV9TWVNURU1fU0laRQkweDAxMDAwMDAwCisKKyNkZWZpbmUJRUNP
TkFfTkVUX1NJWkUJCTB4MDEwMDAwMDAKKworI2RlZmluZQlFQ09OQV9DRklfUEJBU0UJMHgxMDAw
MDAwMAorI2RlZmluZQlFQ09OQV9DRklfVkJBU0UJMHhEMDAwMDAwMAorI2RlZmluZQlFQ09OQV9D
RklfU0laRQkJMHgxMDAwMDAwMAorCisjZGVmaW5lCUVDT05BX0lSUV9TVEFUVVMJMTgKKyNkZWZp
bmUJRUNPTkFfSVJRX1RTVEMJCTE5CisjZGVmaW5lCUVDT05BX0lSUV9GU1JDCQkyMAorI2RlZmlu
ZQlFQ09OQV9JUlFfVFNRRQkJMjEKKyNkZWZpbmUJRUNPTkFfSVJRX0ZTUUYJCTIyCisKKyNkZWZp
bmUJRUNPTkFfSVJRX1NZU1RFTQkwCisKKyNkZWZpbmUJRUNPTkFfRUhDSV9QQkFTRQkweEM4MDAw
MDAwCisjZGVmaW5lCUVDT05BX0VIQ0lfVkJBU0UJMHhGODAwMDAwMAorI2RlZmluZQlFQ09OQV9F
SENJX1NJWkUJMHg4MDAwMDAwCisKKyNkZWZpbmUJRUNPTkFfT0hDSV9QQkFTRQkweEMwMDAwMDAw
CisjZGVmaW5lCUVDT05BX09IQ0lfVkJBU0UJMHhGMDAwMDAwMAorI2RlZmluZQlFQ09OQV9PSENJ
X1NJWkUJMHg4MDAwMDAwCisKKyNkZWZpbmUJRUNPTkFfVVNCX1NJWkUJCTB4ZjAwMDAwMAorCisv
KkludGVycnVwdCBjb250cm9sbGVyKi8KKyNkZWZpbmUJSU5UQ19MRVZFTF9UUklHR0VSCTAKKyNk
ZWZpbmUJSU5UQ19FREdFX1RSSUdHRVIJMQorI2RlZmluZQlJTlRDX0FDVElWRV9ISUdICTAKKyNk
ZWZpbmUJSU5UQ19BQ1RJVkVfTE9XCTEKKy8qCisgKiBkZWZpbmUgcmlzaW5nL2ZhbGxpbmcgZWRn
ZSBmb3IgZWRnZSB0cmlnZ2VyIG1vZGUKKyAqLworI2RlZmluZQlJTlRDX1JJU0lOR19FREdFCTAK
KyNkZWZpbmUJSU5UQ19GQUxMSU5HX0VER0UJMQorCisjZGVmaW5lCUlOVENfSU5URVJSVVBUX1NP
VVJDRV9SRUdfT0ZGU0VUCQkweDAwCisjZGVmaW5lCUlOVENfSU5URVJSVVBUX01BU0tfUkVHX09G
RlNFVAkJCTB4MDQKKyNkZWZpbmUJSU5UQ19JTlRFUlJVUFRfQ0xFQVJfRURHRV9UUklHR0VSX1JF
R19PRkZTRVQJMHgwOAorI2RlZmluZQlJTlRDX0lOVEVSUlVQVF9UUklHR0VSX01PREVfUkVHX09G
RlNFVAkJMHgwQworI2RlZmluZQlJTlRDX0lOVEVSUlVQVF9UUklHR0VSX0xFVkVMX1JFR19PRkZT
RVQJMHgxMAorI2RlZmluZQlJTlRDX0lOVEVSUlVQVF9TVEFUVVNfUkVHX09GRlNFVAkJMHgxNAor
I2RlZmluZQlJTlRDX0ZJUV9NT0RFX1NFTEVDVF9SRUdfT0ZGU0VUCQkweDE4CisjZGVmaW5lCUlO
VENfU09GVFdBUkVfSU5URVJSVVBUX1JFR19PRkZTRVQJCTB4MUMKKworCisvKgorICogZGVmaW5l
IHJpc2luZy9mYWxsaW5nIGVkZ2UgZm9yIGVkZ2UgdHJpZ2dlciBtb2RlCisgKi8KKyNkZWZpbmUJ
SU5UQ19SSVNJTkdfRURHRQkwCisjZGVmaW5lCUlOVENfRkFMTElOR19FREdFCTEKKworCisjZGVm
aW5lCVRJTUVSX1RNMV9DT1VOVEVSX1JFRwkJMHgwMAorI2RlZmluZQlUSU1FUl9UTTFfTE9BRF9S
RUcJCTB4MDQKKyNkZWZpbmUJVElNRVJfVE0xX01BVENIMV9SRUcJCTB4MDgKKyNkZWZpbmUJVElN
RVJfVE0xX01BVENIMl9SRUcJCTB4MEMKKworI2RlZmluZQlUSU1FUl9UTTJfQ09VTlRFUl9SRUcJ
CTB4MTAKKyNkZWZpbmUJVElNRVJfVE0yX0xPQURfUkVHCQkweDE0CisjZGVmaW5lCVRJTUVSX1RN
Ml9NQVRDSDFfUkVHCQkweDE4CisjZGVmaW5lCVRJTUVSX1RNMl9NQVRDSDJfUkVHCQkweDFDCisK
KyNkZWZpbmUJVElNRVJfVE1fQ1JfUkVHCQkweDMwCisjZGVmaW5lCVRJTUVSX1RNX0lOVFJfU1RB
VFVTX1JFRwkweDM0CisjZGVmaW5lCVRJTUVSX1RNX0lOVFJfTUFTS19SRUcJCTB4MzgKKworI2Rl
ZmluZQlUSU1FUl9UTV9SRVZJU0lPTl9SRUcJCTB4M0MKKworCisjZGVmaW5lCUlOVENfVElNRVIx
X0JJVF9JTkRFWAkJMAorCisjZGVmaW5lCVRJTUVSMV9VUF9ET1dOX0NPVU5UCQkoMTw8OSkKKyNk
ZWZpbmUJVElNRVIyX1VQX0RPV05fQ09VTlQJCSgxPDwxMCkKKworI2RlZmluZQlUSU1FUjFfTUFU
Q0gxX0lOVFIJCSgxPDwwKQorI2RlZmluZQlUSU1FUjFfTUFUQ0gyX0lOVFIJCSgxPDwxKQorI2Rl
ZmluZQlUSU1FUjFfT1ZFUkZMT1dfSU5UUgkJKDE8PDIpCisKKworI2RlZmluZQlUSU1FUjJfTUFU
Q0gxX0lOVFIJCSgxPDwzKQorI2RlZmluZQlUSU1FUjJfTUFUQ0gyX0lOVFIJCSgxPDw0KQorI2Rl
ZmluZQlUSU1FUjJfT1ZFUkZMT1dfSU5UUgkJKDE8PDUpCisKKworI2RlZmluZQlUSU1FUl9DTE9D
S19TT1VSQ0VfUENMSwkwCisjZGVmaW5lCVRJTUVSX0NMT0NLX1NPVVJDRV9FWFRfQ0xLCTEKKwor
LyoKKyAqIGRlZmluZSBpbnRlcnJ1cHQgdHJpZ2dlciBtb2RlCisgKi8KKyNkZWZpbmUJSU5UQ19M
RVZFTF9UUklHR0VSCQkwCisjZGVmaW5lCUlOVENfRURHRV9UUklHR0VSCQkxCisKKworI2RlZmlu
ZQlJTlRDX1RSSUdHRVJfVU5LTk9XTiAtMQorCisjZGVmaW5lCVRJTUVSMV9PVkVSRkxPV19JTlRF
UlJVUFQJKDE8PDIpCisjZGVmaW5lCVRJTUVSMl9PVkVSRkxPV19JTlRFUlJVUFQJKDE8PDUpCisj
ZGVmaW5lCVRJTUVSX0lOVEVSUlVQVF9TVEFUVVNfUkVHCTB4MzQKKworCisjZGVmaW5lCVRJTUVS
MV9FTkFCTEUJCQkoMTw8MCkKKyNkZWZpbmUJVElNRVIxX0NMT0NLX1NPVVJDRQkJKDE8PDEpCisj
ZGVmaW5lCVRJTUVSMV9PVkVSRkxPV19FTkFCTEUJCSgxPDwyKQorCisKKyNkZWZpbmUJVElNRVIy
X0VOQUJMRQkJCSgxPDwzKQorI2RlZmluZQlUSU1FUjJfQ0xPQ0tfU09VUkNFCQkoMTw8NCkKKyNk
ZWZpbmUJVElNRVIyX09WRVJGTE9XX0VOQUJMRQkJKDE8PDUpCisKKworI2RlZmluZQlUSU1FUl8x
CQkJMQorCisjZGVmaW5lCUVDX1VBUlRfQ0xPQ0sJCQkxNDc2OTIwMAorI2RlZmluZQlFQ19VQVJU
X1JFR1NISUZUCQkyCisKKyNkZWZpbmUJU1lTVEVNX0NMT0NLCQkJMHgxNAorI2RlZmluZQlSRVNF
VF9DT05UUk9MCQkJMHg0CisjZGVmaW5lCUdMT0JBTF9SRVNFVAkJCTB4MQorI2RlZmluZQlORVRf
SU5URVJGQUNFX1JFU0VUCQkoMHgxIDw8IDQpCisKKyNlbmRpZgpJbmRleDogYXJtL2Vjb25hL2lm
X2VjZXZhci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGFybS9lY29uYS9pZl9lY2V2YXIuaAkocmV2aXNpb24g
MCkKKysrIGFybS9lY29uYS9pZl9lY2V2YXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOTEg
QEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA5IFlvaGFuZXMgTnVncm9obyA8eW9oYW5lc0Bn
bWFpbC5jb20+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmCV9JRkVDRVZBUl9ICisjZGVm
aW5lCV9JRkVDRVZBUl9ICisKKyNkZWZpbmUJRUNFX01BWF9UWF9CVUZGRVJTCTEyOAorI2RlZmlu
ZQlFQ0VfTUFYX1JYX0JVRkZFUlMJMTI4CisjZGVmaW5lCU1BWF9GUkFHTUVOVAkJMzIKKwordHlw
ZWRlZiBzdHJ1Y3QgeworCS8qIDFzdCAzMkJpdHMgKi8KKwl1aW50MzJfdAkJZGF0YV9wdHI7CisJ
LyogMm5kCTMyQml0cyovCisJdWludDMyX3QJCWxlbmd0aDoxNjsKKworCXVpbnQzMl90CQl0Y286
MTsgLyp0Y3AgY2hlY2tzdW0gb2ZmbG9hZCovCisJdWludDMyX3QJCXVjbzoxOyAvKnVkcCBjaGVj
a3N1bSBvZmZsb2FkKi8KKwl1aW50MzJfdAkJaWNvOjE7IC8qaXAgY2hlY2tzdW0gb2ZmbG9hZCov
CisJLyogZm9yY2Vfcm91dGVfcG9ydF9tYXAqLworCXVpbnQzMl90CQlwbWFwOjM7CisJLyogZm9y
Y2Vfcm91dGUgKi8KKwl1aW50MzJfdAkJZnI6MTsKKwkvKiBmb3JjZV9wcmlvcml0eV92YWx1ZSAq
LworCXVpbnQzMl90CQlwcmk6MzsKKwkvKiBmb3JjZV9wcmlvcml0eSAqLworCXVpbnQzMl90CQlm
cDoxOworCS8qaW50ZXJydXB0X2JpdCovCisJdWludDMyX3QJCWludGVycnVwdDoxOworCS8qbGFz
dF9zZWcqLworCXVpbnQzMl90CQlsczoxOworCS8qZmlyc3Rfc2VnKi8KKwl1aW50MzJfdAkJZnM6
MTsKKwkvKiBlbmRfYml0ICovCisJdWludDMyX3QJCWVvcjoxOworCS8qIGNfYml0ICovCisJdWlu
dDMyX3QJCWNvd246MTsKKwkvKiAzcmQgMzJCaXRzKi8KKwkvKnZpZF9pbmRleCovCisJdWludDMy
X3QJCXZpZDozOworCS8qaW5zZXJ0X3ZpZF90YWcqLworCXVpbnQzMl90CQlpbnN2OjE7CisJLypw
cHBvZV9zZWN0aW9uX2luZGV4Ki8KKwl1aW50MzJfdAkJc2lkOjM7CisJLyppbnNlcnRfcHBwb2Vf
c2VjdGlvbiovCisJdWludDMyX3QJCWluc3M6MTsKKwl1aW50MzJfdAkJdW51c2VkOjI0OworCS8q
IDR0aCAzMkJpdHMqLworCXVpbnQzMl90CQl1bnVzZWQyOworCit9IGV0aF90eF9kZXNjX3Q7CisK
K3R5cGVkZWYgc3RydWN0eworCXVpbnQzMl90CQlkYXRhX3B0cjsKKwl1aW50MzJfdAkJbGVuZ3Ro
OjE2OworCXVpbnQzMl90CQlsNGY6MTsKKwl1aW50MzJfdAkJaXBmOjE7CisJdWludDMyX3QJCXBy
b3Q6MjsKKwl1aW50MzJfdAkJaHI6NjsKKwl1aW50MzJfdAkJc3A6MjsKKwl1aW50MzJfdAkJbHM6
MTsKKwl1aW50MzJfdAkJZnM6MTsKKwl1aW50MzJfdAkJZW9yOjE7CisJdWludDMyX3QJCWNvd246
MTsKKwl1aW50MzJfdAkJdW51c2VkOworCXVpbnQzMl90CQl1bnVzZWQyOworfSBldGhfcnhfZGVz
Y190OworCisKK3N0cnVjdCByeF9kZXNjX2luZm8geworCXN0cnVjdCBtYnVmKmJ1ZmY7CisJYnVz
X2RtYW1hcF90IGRtYW1hcDsKKwlldGhfcnhfZGVzY190ICpkZXNjOworfTsKKworc3RydWN0IHR4
X2Rlc2NfaW5mbyB7CisJc3RydWN0IG1idWYqYnVmZjsKKwlidXNfZG1hbWFwX3QgZG1hbWFwOwor
CWV0aF90eF9kZXNjX3QgKmRlc2M7Cit9OworCisKK3N0cnVjdCBlY2Vfc29mdGMKK3sKKwlzdHJ1
Y3QgaWZuZXQgKmlmcDsJCS8qIGlmbmV0IHBvaW50ZXIgKi8KKwlzdHJ1Y3QgbXR4IHNjX210eDsJ
CS8qIGdsb2JhbCBtdXRleCAqLworCXN0cnVjdCBtdHggc2NfbXR4X3R4OwkJLyogdHggbXV0ZXgg
Ki8KKwlzdHJ1Y3QgbXR4IHNjX210eF9yeDsJCS8qIHJ4IG11dGV4ICovCisJc3RydWN0IG10eCBz
Y19tdHhfY2xlYW51cDsJLyogcnggbXV0ZXggKi8KKworCWJ1c19kbWFfdGFnX3QJc2NfcGFyZW50
X3RhZzsJLyogcGFyZW50IGJ1cyBETUEgdGFnICovCisKKwlkZXZpY2VfdCBkZXY7CQkJLyogTXlz
ZWxmICovCisJZGV2aWNlX3QgbWlpYnVzOwkJLyogTXkgY2hpbGQgbWlpYnVzICovCisJdm9pZCAq
aW50cmhhbmQ7CQkJLyogSW50ZXJydXB0IGhhbmRsZSAqLworCXZvaWQgKmludHJoYW5kX3FmOwkJ
LyogcXVldWUgZnVsbCAqLworCXZvaWQgKmludHJoYW5kX3R4OwkJLyogdHggY29tcGxldGUgKi8K
Kwl2b2lkICppbnRyaGFuZF9zdGF0dXM7CQkvKiBlcnJvciBzdGF0dXMgKi8KKworCXN0cnVjdCBy
ZXNvdXJjZSAqaXJxX3Jlc190eDsJLyogdHJhbnNtaXQgKi8KKwlzdHJ1Y3QgcmVzb3VyY2UgKmly
cV9yZXNfcmVjOwkvKiByZWNlaXZlICovCisJc3RydWN0IHJlc291cmNlICppcnFfcmVzX3FmOwkv
KiBxdWV1ZSBmdWxsICovCisJc3RydWN0IHJlc291cmNlICppcnFfcmVzX3N0YXR1czsgLyogc3Rh
dHVzICovCisKKwlzdHJ1Y3QgcmVzb3VyY2UJKm1lbV9yZXM7CS8qIE1lbW9yeSByZXNvdXJjZSAq
LworCisJc3RydWN0IGNhbGxvdXQgdGlja19jaDsJCS8qIFRpY2sgY2FsbG91dCAqLworCisJc3Ry
dWN0IHRhc2txdWV1ZSAqc2NfdHE7CisJc3RydWN0IHRhc2sJc2NfaW50cl90YXNrOworCXN0cnVj
dCB0YXNrCXNjX2NsZWFudXBfdGFzazsKKwlzdHJ1Y3QgdGFzawlzY190eF90YXNrOworCisJYnVz
X2RtYW1hcF90CWRtYW1hcF9yaW5nX3R4OworCWJ1c19kbWFtYXBfdAlkbWFtYXBfcmluZ19yeDsK
KwlidXNfZG1hbWFwX3QJcnhfc3BhcmVtYXA7CisKKwkvKmRtYSB0YWcgZm9yIHJpbmcqLworCWJ1
c19kbWFfdGFnX3QJZG1hdGFnX3JpbmdfdHg7CisJYnVzX2RtYV90YWdfdAlkbWF0YWdfcmluZ19y
eDsKKworCS8qZG1hIHRhZyBmb3IgZGF0YSovCisJYnVzX2RtYV90YWdfdAlkbWF0YWdfZGF0YV90
eDsKKwlidXNfZG1hX3RhZ190CWRtYXRhZ19kYXRhX3J4OworCisJLyp0aGUgcmluZyovCisJZXRo
X3R4X2Rlc2NfdCoJZGVzY190eDsKKwlldGhfcnhfZGVzY190KglkZXNjX3J4OworCisJLypyaW5n
IHBoeXNpY2FsIGFkZHJlc3MqLworCWJ1c19hZGRyX3QJcmluZ19wYWRkcl90eDsKKwlidXNfYWRk
cl90CXJpbmdfcGFkZHJfcng7CisKKwkvKmluZGV4IG9mIGxhc3QgcmVjZWl2ZWQgZGVzY3JpcHRv
ciovCisJdWludDMyX3QgbGFzdF9yeDsKKwlzdHJ1Y3QgcnhfZGVzY19pbmZvIHJ4X2Rlc2NbRUNF
X01BWF9SWF9CVUZGRVJTXTsKKworCS8qIHR4IHByb2R1Y2VyIGluZGV4ICovCisJdWludDMyX3Qg
dHhfcHJvZDsKKwkvKiB0eCBjb25zdW1lciBpbmRleCAqLworCXVpbnQzMl90IHR4X2NvbnM7CisJ
LyogdHggcmluZyBpbmRleCovCisJdWludDMyX3QgZGVzY19jdXJyX3R4OworCisJc3RydWN0IHR4
X2Rlc2NfaW5mbyB0eF9kZXNjW0VDRV9NQVhfVFhfQlVGRkVSU107Cit9OworCisKK3N0cnVjdCBh
cmxfdGFibGVfZW50cnlfdCB7CisJdWludDMyX3QgY21kX2NvbXBsZXRlOiAxOworCXVpbnQzMl90
IHRhYmxlX2VuZDogMTsKKwl1aW50MzJfdCBzZWFyY2hfbWF0Y2g6IDE7CisJdWludDMyX3QgZmls
dGVyOjE7IC8qaWYgc2V0LCBwYWNrZXQgd2lsbCBiZSBkcm9wcGVkICovCisJdWludDMyX3Qgdmxh
bl9tYWM6MTsgLyppbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBnYXRld2F5IG1hYyBhZGRyZXNz
Ki8KKwl1aW50MzJfdCB2bGFuX2dpZDozOyAvKnZsYW4gaWQqLworCXVpbnQzMl90IGFnZV9maWVs
ZDozOworCXVpbnQzMl90IHBvcnRfbWFwOjM7CisJIC8qNDggYml0IG1hYyBhZGRyZXNzKi8KKwl1
aW50OF90IG1hY19hZGRyWzZdOworCXVpbnQ4X3QgcGFkWzJdOworfTsKKworc3RydWN0IG1hY19s
aXN0eworCWNoYXIgbWFjX2FkZHJbNl07CisJc3RydWN0IG1hY19saXN0ICpuZXh0OworfTsKKwor
I2VuZGlmCkluZGV4OiBhcm0vZWNvbmEvb2hjaV9lYy5jCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGFybS9lY29u
YS9vaGNpX2VjLmMJKHJldmlzaW9uIDApCisrKyBhcm0vZWNvbmEvb2hjaV9lYy5jCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDI0MSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgWW9oYW5l
cyBOdWdyb2hvIDx5b2hhbmVzQGdtYWlsLmNvbT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBg
QVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIk
RnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPHN5cy9zdGRpbnQuaD4KKyNpbmNsdWRlIDxzeXMvc3Rk
ZGVmLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+Cisj
aW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8
c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMvbGlua2Vy
X3NldC5oPgorI2luY2x1ZGUgPHN5cy9tb2R1bGUuaD4KKyNpbmNsdWRlIDxzeXMvbG9jay5oPgor
I2luY2x1ZGUgPHN5cy9tdXRleC5oPgorI2luY2x1ZGUgPHN5cy9jb25kdmFyLmg+CisjaW5jbHVk
ZSA8c3lzL3N5c2N0bC5oPgorI2luY2x1ZGUgPHN5cy9zeC5oPgorI2luY2x1ZGUgPHN5cy91bmlz
dGQuaD4KKyNpbmNsdWRlIDxzeXMvY2FsbG91dC5oPgorI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4K
KyNpbmNsdWRlIDxzeXMvcHJpdi5oPgorCisjaW5jbHVkZSA8ZGV2L3VzYi91c2IuaD4KKyNpbmNs
dWRlIDxkZXYvdXNiL3VzYmRpLmg+CisKKyNpbmNsdWRlIDxkZXYvdXNiL3VzYl9jb3JlLmg+Cisj
aW5jbHVkZSA8ZGV2L3VzYi91c2JfYnVzZG1hLmg+CisjaW5jbHVkZSA8ZGV2L3VzYi91c2JfcHJv
Y2Vzcy5oPgorI2luY2x1ZGUgPGRldi91c2IvdXNiX3V0aWwuaD4KKworI2luY2x1ZGUgPGRldi91
c2IvdXNiX2NvbnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxkZXYvdXNiL3VzYl9idXMuaD4KKyNpbmNs
dWRlIDxkZXYvdXNiL2NvbnRyb2xsZXIvb2hjaS5oPgorI2luY2x1ZGUgPGRldi91c2IvY29udHJv
bGxlci9vaGNpcmVnLmg+CisKKyNpbmNsdWRlIDxzeXMvcm1hbi5oPgorCisjaW5jbHVkZSA8YXJt
L2Vjb25hL2Vjb25hX3JlZy5oPgorCisjZGVmaW5lCU1FTV9SSUQJMAorCitzdGF0aWMgZGV2aWNl
X3Byb2JlX3Qgb2hjaV9lY19wcm9iZTsKK3N0YXRpYyBkZXZpY2VfYXR0YWNoX3Qgb2hjaV9lY19h
dHRhY2g7CitzdGF0aWMgZGV2aWNlX2RldGFjaF90IG9oY2lfZWNfZGV0YWNoOworCitzdHJ1Y3Qg
ZWNfb2hjaV9zb2Z0YyB7CisJc3RydWN0IG9oY2lfc29mdGMgc2Nfb2hjaTsJLyogbXVzdCBiZSBm
aXJzdCAqLworfTsKKworc3RhdGljIGludAorb2hjaV9lY19wcm9iZShkZXZpY2VfdCBkZXYpCit7
CisJZGV2aWNlX3NldF9kZXNjKGRldiwgIkVjb25hIGludGVncmF0ZWQgT0hDSSBjb250cm9sbGVy
Iik7CisJcmV0dXJuIChCVVNfUFJPQkVfREVGQVVMVCk7Cit9CisKK3N0YXRpYyBpbnQKK29oY2lf
ZWNfYXR0YWNoKGRldmljZV90IGRldikKK3sKKwlzdHJ1Y3QgZWNfb2hjaV9zb2Z0YyAqc2MgPSBk
ZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJYnVzX3NwYWNlX2hhbmRsZV90IGJzaDsKKwlpbnQgZXJy
OworCWludCByaWQ7CisKKwkvKiBpbml0aWFsaXNlIHNvbWUgYnVzIGZpZWxkcyAqLworCXNjLT5z
Y19vaGNpLnNjX2J1cy5wYXJlbnQgPSBkZXY7CisJc2MtPnNjX29oY2kuc2NfYnVzLmRldmljZXMg
PSBzYy0+c2Nfb2hjaS5zY19kZXZpY2VzOworCXNjLT5zY19vaGNpLnNjX2J1cy5kZXZpY2VzX21h
eCA9IE9IQ0lfTUFYX0RFVklDRVM7CisKKwkvKiBnZXQgYWxsIERNQSBtZW1vcnkgKi8KKwlpZiAo
dXNiX2J1c19tZW1fYWxsb2NfYWxsKCZzYy0+c2Nfb2hjaS5zY19idXMsCisJICAgIFVTQl9HRVRf
RE1BX1RBRyhkZXYpLCAmb2hjaV9pdGVyYXRlX2h3X3NvZnRjKSkgeworCQlyZXR1cm4gKEVOT01F
TSk7CisJfQorCXNjLT5zY19vaGNpLnNjX2RldiA9IGRldjsKKworCXJpZCA9IE1FTV9SSUQ7CisK
KwlzYy0+c2Nfb2hjaS5zY19pb19yZXMgPSBidXNfYWxsb2NfcmVzb3VyY2VfYW55KGRldiwgU1lT
X1JFU19NRU1PUlksCisJICAgICZyaWQsIFJGX0FDVElWRSk7CisKKwlpZiAoIShzYy0+c2Nfb2hj
aS5zY19pb19yZXMpKSB7CisJCWVyciA9IEVOT01FTTsKKwkJZ290byBlcnJvcjsKKwl9CisJc2Mt
PnNjX29oY2kuc2NfaW9fdGFnID0gcm1hbl9nZXRfYnVzdGFnKHNjLT5zY19vaGNpLnNjX2lvX3Jl
cyk7CisJYnNoID0gcm1hbl9nZXRfYnVzaGFuZGxlKHNjLT5zY19vaGNpLnNjX2lvX3Jlcyk7CisJ
LyogVW5kb2N1bWVudGVkIG1hZ2ljIGluaXRpYWxpemF0aW9uICovCisJYnVzX3NwYWNlX3dyaXRl
XzQoKHNjKS0+c2Nfb2hjaS5zY19pb190YWcsIGJzaCwweDA0LCAweDE0Nik7CisKKwlidXNfc3Bh
Y2Vfd3JpdGVfNCgoc2MpLT5zY19vaGNpLnNjX2lvX3RhZywgYnNoLDB4NDQsIDB4MDIwMCk7CisK
KwlERUxBWSgxMDAwKTsKKworCXNjLT5zY19vaGNpLnNjX2lvX3NpemUgPSBybWFuX2dldF9zaXpl
KHNjLT5zY19vaGNpLnNjX2lvX3Jlcyk7CisKKwlpZiAoYnVzX3NwYWNlX3N1YnJlZ2lvbihzYy0+
c2Nfb2hjaS5zY19pb190YWcsIGJzaCwgMHg0MDAwMDAwLAorCSAgICBzYy0+c2Nfb2hjaS5zY19p
b19zaXplLCAmc2MtPnNjX29oY2kuc2NfaW9faGRsKSAhPSAwKQorCQlwYW5pYygiJXM6IHVuYWJs
ZSB0byBzdWJyZWdpb24gVVNCIGhvc3QgcmVnaXN0ZXJzIiwKKwkJICAgIGRldmljZV9nZXRfbmFt
ZShkZXYpKTsKKworCXJpZCA9IDA7CisJc2MtPnNjX29oY2kuc2NfaXJxX3JlcyA9IGJ1c19hbGxv
Y19yZXNvdXJjZV9hbnkoZGV2LCBTWVNfUkVTX0lSUSwgJnJpZCwKKwkgICAgUkZfQUNUSVZFKTsK
KwlpZiAoIShzYy0+c2Nfb2hjaS5zY19pcnFfcmVzKSkgeworCQlnb3RvIGVycm9yOworCX0KKwlz
Yy0+c2Nfb2hjaS5zY19idXMuYmRldiA9IGRldmljZV9hZGRfY2hpbGQoZGV2LCAidXNidXMiLCAt
MSk7CisJaWYgKCEoc2MtPnNjX29oY2kuc2NfYnVzLmJkZXYpKSB7CisJCWdvdG8gZXJyb3I7CisJ
fQorCWRldmljZV9zZXRfaXZhcnMoc2MtPnNjX29oY2kuc2NfYnVzLmJkZXYsICZzYy0+c2Nfb2hj
aS5zY19idXMpOworCisJc3RybGNweShzYy0+c2Nfb2hjaS5zY192ZW5kb3IsICJDYXZpdW0iLAor
CQlzaXplb2Yoc2MtPnNjX29oY2kuc2NfdmVuZG9yKSk7CisKKyNpZiAoX19GcmVlQlNEX3ZlcnNp
b24gPj0gNzAwMDMxKQorCWVyciA9IGJ1c19zZXR1cF9pbnRyKGRldiwgc2MtPnNjX29oY2kuc2Nf
aXJxX3JlcywKKwkgICAgSU5UUl9UWVBFX0JJTyB8IElOVFJfTVBTQUZFLCAgTlVMTCwKKwkgICAg
KGRyaXZlcl9pbnRyX3QgKilvaGNpX2ludGVycnVwdCwgc2MsCisJICAgICZzYy0+c2Nfb2hjaS5z
Y19pbnRyX2hkbCk7CisjZWxzZQorCWVyciA9IGJ1c19zZXR1cF9pbnRyKGRldiwgc2MtPnNjX29o
Y2kuc2NfaXJxX3JlcywKKwkgICAgSU5UUl9UWVBFX0JJTyB8IElOVFJfTVBTQUZFLAorCSAgICAo
ZHJpdmVyX2ludHJfdCAqKW9oY2lfaW50ZXJydXB0LCBzYywKKwkgICAgJnNjLT5zY19vaGNpLnNj
X2ludHJfaGRsKTsKKyNlbmRpZgorCWlmIChlcnIpIHsKKwkJc2MtPnNjX29oY2kuc2NfaW50cl9o
ZGwgPSBOVUxMOworCQlnb3RvIGVycm9yOworCX0KKworCWJ1c19zcGFjZV93cml0ZV80KHNjLT5z
Y19vaGNpLnNjX2lvX3RhZywgc2MtPnNjX29oY2kuc2NfaW9faGRsLAorCSAgICBPSENJX0NPTlRS
T0wsIDApOworCisJZXJyID0gb2hjaV9pbml0KCZzYy0+c2Nfb2hjaSk7CisJaWYgKCFlcnIpIHsK
KwkJZXJyID0gZGV2aWNlX3Byb2JlX2FuZF9hdHRhY2goc2MtPnNjX29oY2kuc2NfYnVzLmJkZXYp
OworCX0KKwlpZiAoZXJyKSB7CisJCWdvdG8gZXJyb3I7CisJfQorCXJldHVybiAoMCk7CisKK2Vy
cm9yOgorCW9oY2lfZWNfZGV0YWNoKGRldik7CisJcmV0dXJuIChFTlhJTyk7Cit9CisKK3N0YXRp
YyBpbnQKK29oY2lfZWNfZGV0YWNoKGRldmljZV90IGRldikKK3sKKwlzdHJ1Y3QgZWNfb2hjaV9z
b2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJZGV2aWNlX3QgYmRldjsKKwlpbnQg
ZXJyOworCisJaWYgKHNjLT5zY19vaGNpLnNjX2J1cy5iZGV2KSB7CisJCWJkZXYgPSBzYy0+c2Nf
b2hjaS5zY19idXMuYmRldjsKKwkJZGV2aWNlX2RldGFjaChiZGV2KTsKKwkJZGV2aWNlX2RlbGV0
ZV9jaGlsZChkZXYsIGJkZXYpOworCX0KKwkvKiBkdXJpbmcgbW9kdWxlIHVubG9hZCB0aGVyZSBh
cmUgbG90cyBvZiBjaGlsZHJlbiBsZWZ0b3ZlciAqLworCWRldmljZV9kZWxldGVfYWxsX2NoaWxk
cmVuKGRldik7CisKKwlidXNfc3BhY2Vfd3JpdGVfNChzYy0+c2Nfb2hjaS5zY19pb190YWcsIHNj
LT5zY19vaGNpLnNjX2lvX2hkbCwKKwkgICAgT0hDSV9DT05UUk9MLCAwKTsKKworCWlmIChzYy0+
c2Nfb2hjaS5zY19pcnFfcmVzICYmIHNjLT5zY19vaGNpLnNjX2ludHJfaGRsKSB7CisJCS8qCisJ
CSAqIG9ubHkgY2FsbCBvaGNpX2RldGFjaCgpIGFmdGVyIG9oY2lfaW5pdCgpCisJCSAqLworCQlv
aGNpX2RldGFjaCgmc2MtPnNjX29oY2kpOworCisJCWVyciA9IGJ1c190ZWFyZG93bl9pbnRyKGRl
diwgc2MtPnNjX29oY2kuc2NfaXJxX3JlcywKKwkJICAgIHNjLT5zY19vaGNpLnNjX2ludHJfaGRs
KTsKKwkJc2MtPnNjX29oY2kuc2NfaW50cl9oZGwgPSBOVUxMOworCX0KKwlpZiAoc2MtPnNjX29o
Y2kuc2NfaXJxX3JlcykgeworCQlidXNfcmVsZWFzZV9yZXNvdXJjZShkZXYsIFNZU19SRVNfSVJR
LCAwLAorCQkgICAgc2MtPnNjX29oY2kuc2NfaXJxX3Jlcyk7CisJCXNjLT5zY19vaGNpLnNjX2ly
cV9yZXMgPSBOVUxMOworCX0KKwlpZiAoc2MtPnNjX29oY2kuc2NfaW9fcmVzKSB7CisJCWJ1c19y
ZWxlYXNlX3Jlc291cmNlKGRldiwgU1lTX1JFU19NRU1PUlksIE1FTV9SSUQsCisJCSAgICBzYy0+
c2Nfb2hjaS5zY19pb19yZXMpOworCQlzYy0+c2Nfb2hjaS5zY19pb19yZXMgPSBOVUxMOworCX0K
Kwl1c2JfYnVzX21lbV9mcmVlX2FsbCgmc2MtPnNjX29oY2kuc2NfYnVzLCAmb2hjaV9pdGVyYXRl
X2h3X3NvZnRjKTsKKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBkZXZpY2VfbWV0aG9kX3Qg
b2hjaV9tZXRob2RzW10gPSB7CisJLyogRGV2aWNlIGludGVyZmFjZSAqLworCURFVk1FVEhPRChk
ZXZpY2VfcHJvYmUsIG9oY2lfZWNfcHJvYmUpLAorCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLCBv
aGNpX2VjX2F0dGFjaCksCisJREVWTUVUSE9EKGRldmljZV9kZXRhY2gsIG9oY2lfZWNfZGV0YWNo
KSwKKwlERVZNRVRIT0QoZGV2aWNlX3NodXRkb3duLCBidXNfZ2VuZXJpY19zaHV0ZG93biksCisK
KwkvKiBCdXMgaW50ZXJmYWNlICovCisJREVWTUVUSE9EKGJ1c19wcmludF9jaGlsZCwgYnVzX2dl
bmVyaWNfcHJpbnRfY2hpbGQpLAorCisJezAsIDB9Cit9OworCitzdGF0aWMgZHJpdmVyX3Qgb2hj
aV9kcml2ZXIgPSB7CisJIm9oY2kiLAorCW9oY2lfbWV0aG9kcywKKwlzaXplb2Yoc3RydWN0IGVj
X29oY2lfc29mdGMpLAorfTsKKworc3RhdGljIGRldmNsYXNzX3Qgb2hjaV9kZXZjbGFzczsKKwor
RFJJVkVSX01PRFVMRShvaGNpLCBlY29uYWFybSwgb2hjaV9kcml2ZXIsIG9oY2lfZGV2Y2xhc3Ms
IDAsIDApOworTU9EVUxFX0RFUEVORChvaGNpLCB1c2IsIDEsIDEsIDEpOwpJbmRleDogYXJtL2Vj
b25hL3VhcnRfY3B1X2VjLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXJtL2Vjb25hL3VhcnRfY3B1X2VjLmMJ
KHJldmlzaW9uIDApCisrKyBhcm0vZWNvbmEvdWFydF9jcHVfZWMuYwkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw4NyBAQAorLyotCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgWW9oYW5lcyBOdWdyb2hv
IDx5b2hhbmVzQGdtYWlsLmNvbT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2
ZWxvcGVkIGJ5IFNlbWloYWxmLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBN
QVJWRUxMIG5vciB0aGUgbmFtZXMgb2YgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUK
KyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAib3B0X3VhcnQu
aCIKKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisj
aW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8
c3lzL2J1cy5oPgorI2luY2x1ZGUgPHN5cy9jb25zLmg+CisKKyNpbmNsdWRlIDxtYWNoaW5lL2J1
cy5oPgorCisjaW5jbHVkZSA8ZGV2L3VhcnQvdWFydC5oPgorI2luY2x1ZGUgPGRldi91YXJ0L3Vh
cnRfY3B1Lmg+CisKKyNpbmNsdWRlIDxzeXMvcm1hbi5oPgorCisjaW5jbHVkZSA8YXJtL2Vjb25h
L2Vjb25hX3JlZy5oPgorI2luY2x1ZGUgPGFybS9lY29uYS9lY29uYV92YXIuaD4KKworYnVzX3Nw
YWNlX3RhZ190IHVhcnRfYnVzX3NwYWNlX2lvOworYnVzX3NwYWNlX3RhZ190IHVhcnRfYnVzX3Nw
YWNlX21lbTsKKworaW50Cit1YXJ0X2NwdV9lcXJlcyhzdHJ1Y3QgdWFydF9iYXMgKmIxLCBzdHJ1
Y3QgdWFydF9iYXMgKmIyKQoreworCisJcmV0dXJuICgoYjEtPmJzaCA9PSBiMi0+YnNoICYmIGIx
LT5ic3QgPT0gYjItPmJzdCkgPyAxIDogMCk7Cit9CisKK2ludAordWFydF9jcHVfZ2V0ZGV2KGlu
dCBkZXZ0eXBlLCBzdHJ1Y3QgdWFydF9kZXZpbmZvICpkaSkKK3sKKwlzdHJ1Y3QgdWFydF9jbGFz
cyAqY2xhc3MgPSAmdWFydF9uczgyNTBfY2xhc3M7CisKKwlkaS0+b3BzID0gdWFydF9nZXRvcHMo
Y2xhc3MpOworCWRpLT5iYXMuY2hhbiA9IDA7CisJZGktPmJhcy5ic3QgPSBvYmlvX3RhZzsKKwor
CWlmIChidXNfc3BhY2VfbWFwKGRpLT5iYXMuYnN0LCBFQ09OQV9JT19CQVNFICsgRUNPTkFfVUFS
VF9CQVNFLAorCSAgICBFQ09OQV9VQVJUX1NJWkUsCisJICAgIDAsICZkaS0+YmFzLmJzaCkgIT0g
MCkgeworCQlyZXR1cm4gKEVOWElPKTsKKwl9CisKKwlkaS0+YmF1ZHJhdGUgPSAwOworCWRpLT5i
YXMucmVnc2hmdCA9IEVDX1VBUlRfUkVHU0hJRlQ7CisJZGktPmJhcy5yY2xrID0gRUNfVUFSVF9D
TE9DSyA7CisJZGktPmRhdGFiaXRzID0gODsKKwlkaS0+c3RvcGJpdHMgPSAxOworCWRpLT5wYXJp
dHkgPSBVQVJUX1BBUklUWV9OT05FOworCXVhcnRfYnVzX3NwYWNlX21lbSA9IG9iaW9fdGFnOwor
CXVhcnRfYnVzX3NwYWNlX2lvID0gTlVMTDsKKworCXJldHVybiAoMCk7Cit9CkluZGV4OiBhcm0v
ZWNvbmEvdWFydF9idXNfZWMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBhcm0vZWNvbmEvdWFydF9idXNfZWMu
YwkocmV2aXNpb24gMCkKKysrIGFybS9lY29uYS91YXJ0X2J1c19lYy5jCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDc5IEBACisvKi0KKyAqIENvcHlyaWdodCAoQykgMjAwOSBZb2hhbmVzIE51Z3Jv
aG8gPHlvaGFuZXNAZ21haWwuY29tPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE1BUlZFTEwgbm9yIHRoZSBuYW1lcyBvZiBj
b250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQi
KTsKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zeXN0bS5oPgorI2lu
Y2x1ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMvY29uZi5oPgorI2luY2x1ZGUgPHN5cy9r
ZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMvbW9kdWxlLmg+CisKKyNpbmNsdWRlIDxtYWNoaW5lL2J1
cy5oPgorI2luY2x1ZGUgPHN5cy9ybWFuLmg+CisjaW5jbHVkZSA8bWFjaGluZS9yZXNvdXJjZS5o
PgorCisjaW5jbHVkZSA8ZGV2L3VhcnQvdWFydC5oPgorI2luY2x1ZGUgPGRldi91YXJ0L3VhcnRf
YnVzLmg+CisjaW5jbHVkZSA8ZGV2L3VhcnQvdWFydF9jcHUuaD4KKworI2luY2x1ZGUgPGFybS9l
Y29uYS9lY29uYV9yZWcuaD4KKworc3RhdGljIGludCB1YXJ0X2VjX3Byb2JlKGRldmljZV90IGRl
dik7CisKK3N0YXRpYyBkZXZpY2VfbWV0aG9kX3QgdWFydF9lY19tZXRob2RzW10gPSB7CisJLyog
RGV2aWNlIGludGVyZmFjZSAqLworCURFVk1FVEhPRChkZXZpY2VfcHJvYmUsCXVhcnRfZWNfcHJv
YmUpLAorCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLAl1YXJ0X2J1c19hdHRhY2gpLAorCURFVk1F
VEhPRChkZXZpY2VfZGV0YWNoLAl1YXJ0X2J1c19kZXRhY2gpLAorCXsgMCwgMCB9Cit9OworCitz
dGF0aWMgZHJpdmVyX3QgdWFydF9lY19kcml2ZXIgPSB7CisJdWFydF9kcml2ZXJfbmFtZSwKKwl1
YXJ0X2VjX21ldGhvZHMsCisJc2l6ZW9mKHN0cnVjdCB1YXJ0X3NvZnRjKSwKK307CisKK3N0YXRp
YyBpbnQKK3VhcnRfZWNfcHJvYmUoZGV2aWNlX3QgZGV2KQoreworCXN0cnVjdAl1YXJ0X3NvZnRj
ICpzYzsKKwlpbnQgc3RhdHVzOworCisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJc2Mt
PnNjX2NsYXNzID0gJnVhcnRfbnM4MjUwX2NsYXNzOworCXN0YXR1cyA9IHVhcnRfYnVzX3Byb2Jl
KGRldiwgRUNfVUFSVF9SRUdTSElGVCwgRUNfVUFSVF9DTE9DSywgMCwgMCk7CisJcmV0dXJuIChz
dGF0dXMpOworfQorCitEUklWRVJfTU9EVUxFKHVhcnQsIGVjb25hYXJtLCB1YXJ0X2VjX2RyaXZl
ciwgdWFydF9kZXZjbGFzcywgMCwgMCk7CkluZGV4OiBhcm0vZWNvbmEvc3RkLmVjb25hCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGFybS9lY29uYS9zdGQuZWNvbmEJKHJldmlzaW9uIDApCisrKyBhcm0vZWNvbmEv
c3RkLmVjb25hCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0IEBACisjICRGcmVlQlNEJAorCitm
aWxlcwkiLi4vZWNvbmEvZmlsZXMuZWNvbmEiCitjcHUJCUNQVV9GQTUyNgorbWFrZW9wdGlvbnMJ
Q09ORl9DRkxBR1M9LW1hcmNoPWFybXY0CitvcHRpb25zCVBIWVNBRERSPTB4MDAwMDAwMDAKK21h
a2VvcHRpb25zCUtFUk5QSFlTQUREUj0weDAxMDAwMDAwCittYWtlb3B0aW9ucwlLRVJOVklSVEFE
RFI9MHhjMTAwMDAwMAorCitvcHRpb25zCUtFUk5QSFlTQUREUj0weDAxMDAwMDAwCitvcHRpb25z
CUtFUk5WSVJUQUREUj0weGMxMDAwMDAwCSMgVXNlZCBpbiBsZHNjcmlwdC5hcm0KK29wdGlvbnMJ
RkxBU0hBRERSPTB4RDAwMDAwMDAKK29wdGlvbnMJTE9BREVSUkFNQUREUj0weDAwMDAwMDAwCitv
cHRpb25zCVNUQVJUVVBfUEFHRVRBQkxFX0FERFI9MHgwMDEwMDAwMApJbmRleDogY29uZi9NYWtl
ZmlsZS5hcm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gY29uZi9NYWtlZmlsZS5hcm0JKHJldmlzaW9uIDIwMTM1
OCkKKysrIGNvbmYvTWFrZWZpbGUuYXJtCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBA
CiAJJFMvJE0vJE0vY3B1ZnVuY19hc21fc2ExLlMgJFMvJE0vJE0vY3B1ZnVuY19hc21fYXJtMTAu
UyBcCiAJJFMvJE0vJE0vY3B1ZnVuY19hc21feHNjYWxlLlMgJFMvJE0vJE0vY3B1ZnVuY19hc20u
UyBcCiAJJFMvJE0vJE0vY3B1ZnVuY19hc21feHNjYWxlX2MzLlMgJFMvJE0vJE0vY3B1ZnVuY19h
c21fYXJtdjVfZWMuUyBcCi0JJFMvJE0vJE0vY3B1ZnVuY19hc21fc2hlZXZhLlMKKwkkUy8kTS8k
TS9jcHVmdW5jX2FzbV9zaGVldmEuUyAkUy8kTS8kTS9jcHVmdW5jX2FzbV9mYTUyNi5TCiBLRVJO
RUxfRVhUUkE9dHJhbXBvbGluZQogS0VSTkVMX0VYVFJBX0lOU1RBTEw9a2VybmVsLmd6LnRyYW1w
CiB0cmFtcG9saW5lOiAke0tFUk5FTF9LT30udHJhbXAKSW5kZXg6IGNvbmYvb3B0aW9ucy5hcm0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gY29uZi9vcHRpb25zLmFybQkocmV2aXNpb24gMjAxMzU4KQorKysgY29u
Zi9vcHRpb25zLmFybQkod29ya2luZyBjb3B5KQpAQCAtMzYsMyArMzYsNCBAQAogQVQ5MV9CV0NU
CQlvcHRfYXQ5MS5oCiBBVDkxX1RTQwkJb3B0X2F0OTEuaAogQVQ5MV9LV0lLQllURQkJb3B0X2F0
OTEuaAorQ1BVX0ZBNTI2CQlvcHRfZ2xvYmFsLmgKSW5kZXg6IGtlcm4vdmZzX21vdW50LmMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0ga2Vybi92ZnNfbW91bnQuYwkocmV2aXNpb24gMjAxMzU4KQorKysga2Vybi92
ZnNfbW91bnQuYwkod29ya2luZyBjb3B5KQpAQCAtMTQwMyw2ICsxNDAzLDExIEBACiAJc3RydWN0
IHRpbWV2YWwgbGFzdGZhaWw7CiAJaW50IGN1cmZhaWwgPSAwOwogCisJLyogdGVtcG9yYXJ5IHNv
bHV0aW9uIGZvciB0aW1lb3V0IHdhaXRpbmcgZm9yIFVTQiBkaXNrIHJvb3QKKwkgKiBmaWxlc3lz
dGVtCisJICovCisJcGF1c2UoIldBSVQiLCBoeiAqIDEwKTsKKwogCWZvciAoOzspIHsKIAkJRFJP
UF9HSUFOVCgpOwogCQlnX3dhaXRpZGxlKCk7Cg==
--001636b14743f0e22e047c437eff--



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