Subject: Re: port-arm/34684 (OMAP patch 5/5: OSK5912 board support)
To: None <gnats-bugs@NetBSD.org>
From: Bucky Katz <bucky@picovex.com>
List: netbsd-bugs
Date: 01/05/2007 20:21:41
--=-=-=

christos@zoulas.com (Christos Zoulas) writes:

> The following reply was made to PR port-arm/34684; it has been noted by GNATS.
>
> From: christos@zoulas.com (Christos Zoulas)
> To: gnats-bugs@NetBSD.org, gnats-admin@netbsd.org,
> 	netbsd-bugs@netbsd.org, Bucky Katz <bucky@picovex.com>
> Cc: 
> Subject: Re: port-arm/34684 (OMAP patch 5/5: OSK5912 board support)
> Date: Fri, 5 Jan 2007 23:13:01 -0500
>
>  On Jan 6,  3:55am, bucky@picovex.com (Bucky Katz) wrote:
>  -- Subject: Re: port-arm/34684 (OMAP patch 5/5: OSK5912 board support)
>  
>  |  It's not part of that patch and it needs to be applied because it
>  |  contains the board support for the OSK591 machdep as well as the conf
>  |  files for that board.
>  
>  Bucky, can you please cvs update and send me an updated patch? I tried
>  to apply patch 5 and it seems to have reversed another patch you send us.
>  
>  chridtos
>  

Here's the patch for the missing OSK files


--=-=-=
Content-Type: application/octet-stream
Content-Disposition: attachment; filename=patch
Content-Transfer-Encoding: base64
Content-Description: New patch

c3JjL3N5cy9hcmNoL2V2YmFybS9jb25mL09TSzU5MTIKLS0tIC4uL2N2cy9zcmMvc3lzL2FyY2gv
ZXZiYXJtL2NvbmYvT1NLNTkxMgkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAor
Kysgc3JjL3N5cy9hcmNoL2V2YmFybS9jb25mL09TSzU5MTIJMjAwNy0wMS0wNSAxODo0Njo1OC4w
MDAwMDAwMDAgLTA4MDAKQEAgLTAsMCArMSwyMTUgQEAKKyMKKyMJT1NLNTkxMiAtLSBUSSBPTUFQ
IDU5MTIgT1NLIEJvYXJkIEtlcm5lbAorIworCitpbmNsdWRlCSJhcmNoL2V2YmFybS9jb25mL3N0
ZC5vc2s1OTEyIgorCisjIGVzdGltYXRlZCBudW1iZXIgb2YgdXNlcnMKKworbWF4dXNlcnMJMzIK
KworIyBTdGFuZGFyZCBzeXN0ZW0gb3B0aW9ucworCitvcHRpb25zIAlSVENfT0ZGU0VUPTAJIyBo
YXJkd2FyZSBjbG9jayBpcyB0aGlzIG1hbnkgbWlucy4gd2VzdCBvZiBHTVQKKyNvcHRpb25zIAlO
VFAJCSMgTlRQIHBoYXNlL2ZyZXF1ZW5jeSBsb2NrZWQgbG9vcAorCisjIENQVSBvcHRpb25zCisK
K29wdGlvbnMgCUNQVV9BUk05RQorCisjIEFyY2hpdGVjdHVyZSBvcHRpb25zCisKKyMgRmlsZSBz
eXN0ZW1zCisKK2ZpbGUtc3lzdGVtCUZGUwkJIyBVRlMKKyNmaWxlLXN5c3RlbQlMRlMJCSMgbG9n
LXN0cnVjdHVyZWQgZmlsZSBzeXN0ZW0KK2ZpbGUtc3lzdGVtCU1GUwkJIyBtZW1vcnkgZmlsZSBz
eXN0ZW0KK2ZpbGUtc3lzdGVtCU5GUwkJIyBOZXR3b3JrIGZpbGUgc3lzdGVtCisjZmlsZS1zeXN0
ZW0gCUFET1NGUwkJIyBBbWlnYURPUy1jb21wYXRpYmxlIGZpbGUgc3lzdGVtCisjZmlsZS1zeXN0
ZW0gCUVYVDJGUwkJIyBzZWNvbmQgZXh0ZW5kZWQgZmlsZSBzeXN0ZW0gKGxpbnV4KQorI2ZpbGUt
c3lzdGVtCUNEOTY2MAkJIyBJU08gOTY2MCArIFJvY2sgUmlkZ2UgZmlsZSBzeXN0ZW0KK2ZpbGUt
c3lzdGVtCU1TRE9TRlMJCSMgTVMtRE9TIGZpbGUgc3lzdGVtCisjZmlsZS1zeXN0ZW0JRkRFU0MJ
CSMgL2Rldi9mZAorI2ZpbGUtc3lzdGVtCUtFUk5GUwkJIyAva2VybgorI2ZpbGUtc3lzdGVtCU5V
TExGUwkJIyBsb29wYmFjayBmaWxlIHN5c3RlbQorI2ZpbGUtc3lzdGVtCVBPUlRBTAkJIyBwb3J0
YWwgZmlsZXN5c3RlbSAoc3RpbGwgZXhwZXJpbWVudGFsKQorI2ZpbGUtc3lzdGVtCVBST0NGUwkJ
IyAvcHJvYworI2ZpbGUtc3lzdGVtCVVNQVBGUwkJIyBOVUxMRlMgKyB1aWQgYW5kIGdpZCByZW1h
cHBpbmcKKyNmaWxlLXN5c3RlbQlVTklPTgkJIyB1bmlvbiBmaWxlIHN5c3RlbQorZmlsZS1zeXN0
ZW0JUFRZRlMJCSMgL2Rldi9wdHMvTiBzdXBwb3J0CisKKyMgRmlsZSBzeXN0ZW0gb3B0aW9ucwor
I29wdGlvbnMgCVFVT1RBCQkjIFVGUyBxdW90YXMKKyNvcHRpb25zIAlGRlNfRUkJCSMgRkZTIEVu
ZGlhbiBJbmRlcGVuZGFudCBzdXBwb3J0Cisjb3B0aW9ucyAJTkZTU0VSVkVSCitvcHRpb25zIAlT
T0ZUREVQCisjb3B0aW9ucyAJRkZTX05PX1NOQVBTSE9UCSMgTm8gRkZTIHNuYXBzaG90IHN1cHBv
cnQKKworIyBOZXR3b3JraW5nIG9wdGlvbnMKKworI29wdGlvbnMgCUdBVEVXQVkJCSMgcGFja2V0
IGZvcndhcmRpbmcKK29wdGlvbnMgCUlORVQJCSMgSVAgKyBJQ01QICsgVENQICsgVURQCitvcHRp
b25zIAlJTkVUNgkJIyBJUFY2Cisjb3B0aW9ucyAJSVBTRUMJCSMgSVAgc2VjdXJpdHkKKyNvcHRp
b25zIAlJUFNFQ19FU1AJIyBJUCBzZWN1cml0eSAoZW5jcnlwdGlvbiBwYXJ0OyBkZWZpbmUgdy8g
SVBTRUMpCisjb3B0aW9ucyAJSVBTRUNfTkFUX1QJIyBJUHNlYyBOQVQgdHJhdmVyc2FsIChOQVQt
VCkKKyNvcHRpb25zIAlJUFNFQ19ERUJVRwkjIGRlYnVnIGZvciBJUCBzZWN1cml0eQorI29wdGlv
bnMgCU1ST1VUSU5HCSMgSVAgbXVsdGljYXN0IHJvdXRpbmcKKyNvcHRpb25zIAlQSU0JCSMgUHJv
dG9jb2wgSW5kZXBlbmRlbnQgTXVsdGljYXN0Cisjb3B0aW9ucyAJTlMJCSMgWE5TCisjb3B0aW9u
cyAJTlNJUAkJIyBYTlMgdHVubmVsaW5nIG92ZXIgSVAKKyNvcHRpb25zIAlJU08sVFBJUAkjIE9T
SQorI29wdGlvbnMgCUVPTgkJIyBPU0kgdHVubmVsaW5nIG92ZXIgSVAKKyNvcHRpb25zIAlDQ0lU
VCxMTEMsSERMQwkjIFguMjUKKyNvcHRpb25zIAlORVRBVEFMSwkjIEFwcGxlVGFsayBuZXR3b3Jr
aW5nCisjb3B0aW9ucyAJUEZJTF9IT09LUwkjIHBmaWwoOSkgcGFja2V0IGZpbHRlciBob29rcwor
I29wdGlvbnMgCVBQUF9CU0RDT01QCSMgQlNELUNvbXByZXNzIGNvbXByZXNzaW9uIHN1cHBvcnQg
Zm9yIFBQUAorI29wdGlvbnMgCVBQUF9ERUZMQVRFCSMgRGVmbGF0ZSBjb21wcmVzc2lvbiBzdXBw
b3J0IGZvciBQUFAKKyNvcHRpb25zIAlQUFBfRklMVEVSCSMgQWN0aXZlIGZpbHRlciBzdXBwb3J0
IGZvciBQUFAgKHJlcXVpcmVzIGJwZikKKyNvcHRpb25zIAlUQ1BfREVCVUcJIyBSZWNvcmQgbGFz
dCBUQ1BfTkRFQlVHIHBhY2tldHMgd2l0aCBTT19ERUJVRworCitvcHRpb25zIAlORlNfQk9PVF9C
T09UUAorb3B0aW9ucyAJTkZTX0JPT1RfREhDUAorb3B0aW9ucwkJTkZTX0JPT1RfUldTSVpFPTEw
MjQKKworIyBDb21wYXRpYmlsaXR5IG9wdGlvbnMKKworI29wdGlvbnMgCUNPTVBBVF80MwkjIDQu
M0JTRCBjb21wYXRpYmlsaXR5Lgorb3B0aW9ucyAJQ09NUEFUXzMwCSMgTmV0QlNEIDMuMCBjb21w
YXRpYmlsaXR5LgorI29wdGlvbnMgCUNPTVBBVF8yMAkjIE5ldEJTRCAyLjAgY29tcGF0aWJpbGl0
eS4KKyNvcHRpb25zIAlDT01QQVRfMTYJIyBOZXRCU0QgMS42IGNvbXBhdGliaWxpdHkuCisjb3B0
aW9ucyAJQ09NUEFUXzE1CSMgTmV0QlNEIDEuNSBjb21wYXRpYmlsaXR5LgorI29wdGlvbnMgCUNP
TVBBVF8xNAkjIE5ldEJTRCAxLjQgY29tcGF0aWJpbGl0eS4KKyNvcHRpb25zIAlDT01QQVRfMTMJ
IyBOZXRCU0QgMS4zIGNvbXBhdGliaWxpdHkuCisjb3B0aW9ucyAJQ09NUEFUXzEyCSMgTmV0QlNE
IDEuMiBjb21wYXRpYmlsaXR5LgorI29wdGlvbnMgCUNPTVBBVF8xMQkjIE5ldEJTRCAxLjEgY29t
cGF0aWJpbGl0eS4KKyNvcHRpb25zIAlDT01QQVRfMTAJIyBOZXRCU0QgMS4wIGNvbXBhdGliaWxp
dHkuCisjb3B0aW9ucyAJQ09NUEFUXzA5CSMgTmV0QlNEIDAuOSBjb21wYXRpYmlsaXR5LgorI29w
dGlvbnMgCVRDUF9DT01QQVRfNDIJIyA0LjJCU0QgVENQL0lQIGJ1ZyBjb21wYXQuIE5vdCByZWNv
bW1lbmRlZC4KKyNvcHRpb25zCQlDT01QQVRfQlNEUFRZCSMgL2Rldi9bcHRddHk/PyBwdHlzLgor
CisjIFNoYXJlZCBtZW1vcnkgb3B0aW9ucworCitvcHRpb25zIAlTWVNWTVNHCQkjIFN5c3RlbSBW
LWxpa2UgbWVzc2FnZSBxdWV1ZXMKK29wdGlvbnMgCVNZU1ZTRU0JCSMgU3lzdGVtIFYtbGlrZSBz
ZW1hcGhvcmVzCisjb3B0aW9ucyAJU0VNTU5JPTEwCSMgbnVtYmVyIG9mIHNlbWFwaG9yZSBpZGVu
dGlmaWVycworI29wdGlvbnMgCVNFTU1OUz02MAkjIG51bWJlciBvZiBzZW1hcGhvcmVzIGluIHN5
c3RlbQorI29wdGlvbnMgCVNFTVVNRT0xMAkjIG1heCBudW1iZXIgb2YgdW5kbyBlbnRyaWVzIHBl
ciBwcm9jZXNzCisjb3B0aW9ucyAJU0VNTU5VPTMwCSMgbnVtYmVyIG9mIHVuZG8gc3RydWN0dXJl
cyBpbiBzeXN0ZW0KK29wdGlvbnMgCVNZU1ZTSE0JCSMgU3lzdGVtIFYtbGlrZSBtZW1vcnkgc2hh
cmluZworI29wdGlvbnMgCVNITU1BWFBHUz0xMDI0CSMgMTAyNCBwYWdlcyBpcyB0aGUgZGVmYXVs
dAorCisjIERldmljZSBvcHRpb25zCisKKyNvcHRpb25zIAlNRU1PUllfRElTS19IT09LUwkjIGJv
b3R0aW1lIHNldHVwIG9mIHJhbWRpc2sKKyNvcHRpb25zIAlNRU1PUllfRElTS19ST09UX1NJWkU9
ODE5MgkjIFNpemUgaW4gYmxvY2tzCisjb3B0aW9ucyAJTUVNT1JZX0RJU0tfRFlOQU1JQworI29w
dGlvbnMgCU1JTklST09UU0laRT0xMDAwCSMgU2l6ZSBpbiBibG9ja3MKKyNvcHRpb25zIAlNRU1P
UllfRElTS19JU19ST09UCSMgdXNlIG1lbW9yeSBkaXNrIGFzIHJvb3QKKworIyBNaXNjZWxsYW5l
b3VzIGtlcm5lbCBvcHRpb25zCitvcHRpb25zIAlLVFJBQ0UJCSMgc3lzdGVtIGNhbGwgdHJhY2lu
ZywgYSBsYSBrdHJhY2UoMSkKKyNvcHRpb25zIAlMS00JCSMgbG9hZGFibGUga2VybmVsIG1vZHVs
ZXMKKyNvcHRpb25zIAlLTUVNU1RBVFMJIyBrZXJuZWwgbWVtb3J5IHN0YXRpc3RpY3MKKyNvcHRp
b25zIAlTQ1NJVkVSQk9TRQkjIFZlcmJvc2UgU0NTSSBlcnJvcnMKKyNvcHRpb25zIAlNSUlWRVJC
T1NFCSMgVmVyYm9zZSBNSUkgYXV0b2NvbmZ1cmF0aW9uIG1lc3NhZ2VzCisjb3B0aW9ucyAJRERC
X0tFWUNPREU9MHg0MAorI29wdGlvbnMgCVVTRVJDT05GCSMgdXNlcmNvbmYoNCkgc3VwcG9ydAor
I29wdGlvbnMJUElQRV9TT0NLRVRQQUlSCSMgc21hbGxlciwgYnV0IHNsb3dlciBwaXBlKDIpCisK
KyMgRGV2ZWxvcG1lbnQgYW5kIERlYnVnZ2luZyBvcHRpb25zCisKKyNvcHRpb25zIAlQRVJGQ1RS
UwkjIHBlcmZvcm1hbmNlIGNvdW50ZXJzCitvcHRpb25zIAlESUFHTk9TVElDCSMgaW50ZXJuYWxs
eSBjb25zaXN0ZW5jeSBjaGVja3MKKyNvcHRpb25zIAlERUJVRworI29wdGlvbnMgCVBNQVBfREVC
VUcJIyBFbmFibGUgcG1hcF9kZWJ1Z19sZXZlbCBjb2RlCisjb3B0aW9ucyAJSVBLREIJCSMgcmVt
b3RlIGtlcm5lbCBkZWJ1Z2dpbmcKK29wdGlvbnMgCVZFUkJPU0VfSU5JVF9BUk0gIyB2ZXJib3Nl
IGJvb3RzdHJhcGluZyBtZXNzYWdlcworb3B0aW9ucyAJRERCCQkjIGluLWtlcm5lbCBkZWJ1Z2dl
cgorb3B0aW9ucwkJRERCX09OUEFOSUM9MQorb3B0aW9ucyAJRERCX0hJU1RPUllfU0laRT0xMDAJ
IyBFbmFibGUgaGlzdG9yeSBlZGl0aW5nIGluIEREQgorI29wdGlvbnMgCUtHREIKKyNtYWtlb3B0
aW9ucwlERUJVRz0iLWciCSMgY29tcGlsZSBmdWxsIHN5bWJvbCB0YWJsZQorI29wdGlvbnMgCVNZ
TVRBQl9TUEFDRT0yMDAwMDAKKworIyBWYWxpZCBvcHRpb25zIGZvciBCT09UX0FSR1M6CisjICBz
aW5nbGUJCUJvb3QgdG8gc2luZ2xlIHVzZXIgb25seQorIyAga2RiCQkJR2l2ZSBjb250cm9sIHRv
IGtlcm5lbCBkZWJ1Z2dlcgorIyAgYXNrCQkJQXNrIGZvciBmaWxlIG5hbWUgdG8gcmVib290IGZy
b20KKyMgIHBtYXBkZWJ1Zz08bj4JSWYgUE1BUF9ERUJVRywgc2V0IHBtYXBfZGVidWdfbGV2ZWwg
dG8gPG4+CisjICBtZW1vcnlkaXNrPTxuPglTZXQgbWVtb3J5ZGlzayBzaXplIHRvIDxuPiBLQgor
IyAgcXVpZXQJCVNob3cgYXByaW50X25haXZlIG91dHB1dAorIyAgdmVyYm9zZQkJU2hvdyBhcHJp
bnRfbm9ybWFsIGFuZCBhcHJpbnRfdmVyYm9zZSBvdXRwdXQKK29wdGlvbnMJCUJPT1RfQVJHUz0i
XCJcIiIKKworY29uZmlnCQluZXRic2QJCXJvb3Qgb24gPyB0eXBlID8KK2NvbmZpZwkJbmV0YnNk
LXNtMAlyb290IG9uIHNtMCB0eXBlIG5mcworCisjIFRoZSBtYWluIGJ1cyBkZXZpY2UKK21haW5i
dXMwCWF0IHJvb3QKKworIyBUaGUgYm9vdCBjcHUKK2NwdTAJCWF0IG1haW5idXM/CisKKyMgU3Bl
Y2lmeSB0aGUgbWVtb3J5IHNpemUgaW4gbWVnYWJ5dGVzLgorb3B0aW9ucwkJTUVNU0laRT0zMgor
CisjIFRleGFzIEluc3RydW1lbnRzIFBlcmlwaGVyYWwgQnVzCit0aXBiMAkJYXQgbWFpbmJ1cz8K
K29wdGlvbnMJCU9NQVBfVElQQl9QQkFTRT0weEZGRkIwMDAwLCBPTUFQX1RJUEJfU0laRT0weDAw
MDQwMDAwCisKKyMgT24tYm9hcmQgMTY1NTAgVUFSVHMKKyMgT01BUCBVQVJUMiBpcyBub3QgY29u
bmVjdGVkOyBVQVJUMyBicm91Z2h0IHRvIGV4cGFuc2lvbiBjb25uZWN0b3IgQiBwaW5zCisKK2Nv
bTAJCWF0IHRpcGI/IGFkZHIgMHhmZmZiMDAwMCBpbnRyIDQ2IG11bHQgNAkjIFVBUlQxCitjb20x
CQlhdCB0aXBiPyBhZGRyIDB4ZmZmYjk4MDAgaW50ciAxNSBtdWx0IDQJIyBVQVJUMworb3B0aW9u
cyBDT05TQUREUj0weGZmZmIwMDAwLCBDT05TUEVFRD0xMTUyMDAKK29wdGlvbnMgS0dEQl9ERVZB
RERSPTB4ZmZmYjk4MDAsIEtHREJfREVWUkFURT0xMTUyMDAJIyBVQVJUMworCisjIEludGVycnVw
dCBjb250cm9sbGVyCitvbWFwNTkxMmludGMwCWF0IHRpcGI/CSMgSW50ZXJydXB0IGNvbnRyb2xs
ZXIKKworIyBPcGVyYXRpbmcgU3lzdGVtIFRpbWVyCitvbWFwbXB1dG1yMAlhdCB0aXBiPyBhZGRy
IDB4ZmZmZWM1MDAgaW50ciAyNgkjIE1QVSBUaW1lciAxCisjIFN0YXRpc3RpY3MgVGltZXIKK29t
YXBtcHV0bXIxCWF0IHRpcGI/IGFkZHIgMHhmZmZlYzYwMCBpbnRyIDMwCSMgTVBVIFRpbWVyIDIK
KyMgTWljcm90aW1lIFJlZmVyZW5jZSBUaW1lcgorb21hcG1wdXRtcjIJYXQgdGlwYj8gYWRkciAw
eGZmZmVjNzAwIGludHIgMTYJIyBNUFUgVGltZXIgMworb3B0aW9ucyBPTUFQX01QVV9USU1FUl9D
TE9DS19GUkVRPTEyMDAwMDAwCisKKyMgT24tYm9hcmQgR1BJTyBjb250cm9sbGVycworb21hcGdw
aW8wCWF0IHRpcGI/IGFkZHIgMHhmZmZiZTQwMCBpbnRyIDE0CitvbWFwZ3BpbzEJYXQgdGlwYj8g
YWRkciAweGZmZmJlYzAwIGludHIgNzIKK29tYXBncGlvMglhdCB0aXBiPyBhZGRyIDB4ZmZmYmI0
MDAgaW50ciA3Mworb21hcGdwaW8zCWF0IHRpcGI/IGFkZHIgMHhmZmZiYmMwMCBpbnRyIDgwCisK
KyMgUmVhbCBUaW1lIENsb2NrCitvbWFwcnRjMAlhdCB0aXBiPyBhZGRyIDB4ZmZmYjQ4MDAgaW50
ciA1OAkjIGFsYXJtIGludGVycnVwdAorCisjIEV4dGVuZGVkIE1lbW9yeSBJbnRlckZhY2UgU2xv
dyAoYmFzZSBpcyBhZGRyZXNzIG9mIEVNSUZTIFJlZ2lzdGVycykKK2VtaWZzMAkJYXQgbWFpbmJ1
cz8gYmFzZSAweGZmZmVjYzAwCitvcHRpb25zIE9NQVBfVENfQ0xPQ0tfRlJFUT0xOTIwMDAwMDAK
KworIyBPbi1ib2FyZCBTTVNDIExBTjkxQzk2IEV0aGVybmV0IENvbnRyb2xsZXIKK3NtMAkJYXQg
ZW1pZnM/IGFkZHIgMHgwNDkwMDAwMCBpbnRyIDAgbXVsdCAxIG5vYnl0ZWFjYyAxCisKKyMgT0NQ
CitvY3AwCQlhdCBtYWluYnVzPworCisjIFBzZXVkby1EZXZpY2VzCisKKyMgZGlzay9tYXNzIHN0
b3JhZ2UgcHNldWRvLWRldmljZXMKK3BzZXVkby1kZXZpY2UJbWQJCTEJIyBtZW1vcnkgZGlzayBk
ZXZpY2UgKHJhbWRpc2spCisjcHNldWRvLWRldmljZQl2bmQJCQkjIGRpc2stbGlrZSBpbnRlcmZh
Y2UgdG8gZmlsZXMKKyNwc2V1ZG8tZGV2aWNlCWZzcwkJNAkjIGZpbGUgc3lzdGVtIHNuYXBzaG90
IGRldmljZQorCisjIG5ldHdvcmsgcHNldWRvLWRldmljZXMKK3BzZXVkby1kZXZpY2UJYnBmaWx0
ZXIJCSMgQmVya2VsZXkgcGFja2V0IGZpbHRlcgorcHNldWRvLWRldmljZQlsb29wCQkJIyBuZXR3
b3JrIGxvb3BiYWNrCisjcHNldWRvLWRldmljZQlrdHRjcAkJCSMgbmV0d29yayBsb29wYmFjawor
CisjIG1pc2NlbGxhbmVvdXMgcHNldWRvLWRldmljZXMKK3BzZXVkby1kZXZpY2UJcHR5CQkJIyBw
c2V1ZG8tdGVybWluYWxzCitwc2V1ZG8tZGV2aWNlCXJuZAkJCSMgL2Rldi9yYW5kb20gYW5kIGlu
LWtlcm5lbCBnZW5lcmF0b3IKKyNvcHRpb25zCVJORF9DT00KKyNwc2V1ZG8tZGV2aWNlCWNsb2Nr
Y3RsCQkjIHVzZXIgY29udHJvbCBvZiBjbG9jayBzdWJzeXN0ZW0Kc3JjL3N5cy9hcmNoL2V2YmFy
bS9jb25mL2ZpbGVzLm9zazU5MTIKLS0tIC4uL2N2cy9zcmMvc3lzL2FyY2gvZXZiYXJtL2NvbmYv
ZmlsZXMub3NrNTkxMgkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorKysgc3Jj
L3N5cy9hcmNoL2V2YmFybS9jb25mL2ZpbGVzLm9zazU5MTIJMjAwNy0wMS0wNSAxODo0Njo1OC4w
MDAwMDAwMDAgLTA4MDAKQEAgLTAsMCArMSwxNiBAQAorIwkkTmV0QlNEOiAkCisjCisjIFRJIE9T
SzU5MTIgZXZhbHVhdGlvbiBib2FyZCBjb25maWd1cmF0aW9uIGluZm8KKyMKKworZmlsZQlhcmNo
L2V2YmFybS9vc2s1OTEyL29zazU5MTJfbWFjaGRlcC5jCisKKyMgS2VybmVsIGJvb3QgYXJndW1l
bnRzCitkZWZwYXJhbSBvcHRfbWFjaGRlcC5oCQkJCUJPT1RfQVJHUworCisjIENQVSBzdXBwb3J0
IGFuZCBpbnRlZ3JhdGVkIHBlcmlwaGVyYWxzCitpbmNsdWRlICJhcmNoL2FybS9vbWFwL2ZpbGVz
Lm9tYXAiCisKKyMgU01TQyBMQU45MUM5NgorYXR0YWNoCXNtIGF0IGVtaWZzIHdpdGggc21fZW1p
ZnMKK2ZpbGUJYXJjaC9ldmJhcm0vb3NrNTkxMi9pZl9zbV9lbWlmcy5jCXNtX2VtaWZzCnNyYy9z
eXMvYXJjaC9ldmJhcm0vY29uZi9tay5vc2s1OTEyCi0tLSAuLi9jdnMvc3JjL3N5cy9hcmNoL2V2
YmFybS9jb25mL21rLm9zazU5MTIJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAK
KysrIHNyYy9zeXMvYXJjaC9ldmJhcm0vY29uZi9tay5vc2s1OTEyCTIwMDctMDEtMDUgMTg6NDY6
NTguMDAwMDAwMDAwIC0wODAwCkBAIC0wLDAgKzEsMTQgQEAKKyMJJE5ldEJTRDogJAorQ0ZMQUdT
Kz0tbWNwdT1hcm05MjZlai1zCisKK1NZU1RFTV9GSVJTVF9PQko9CW9tYXBfc3RhcnQubworU1lT
VEVNX0ZJUlNUX1NGSUxFPQkke0FSTX0vb21hcC9vbWFwX3N0YXJ0LlMKKworS0VSTkVMX0JBU0Vf
UEhZUz0weDEwMDAwMDAwCitLRVJORUxfQkFTRV9WSVJUPTB4YzAwMDAwMDAKKworU1lTVEVNX0xE
X1RBSUxfRVhUUkErPTsgXAorCWVjaG8gJHtPQkpDT1BZfSAtUyAtTyBiaW5hcnkgJEAgJEAuYmlu
OyBcCisJJHtPQkpDT1BZfSAtUyAtTyBiaW5hcnkgJEAgJEAuYmluOyBcCisKK0VYVFJBX0tFUk5F
TFMrPSAke0tFUk5FTFM6QC5LRVJORUwuQCR7LktFUk5FTC59LmJpbkB9CnNyYy9zeXMvYXJjaC9l
dmJhcm0vY29uZi9zdGQub3NrNTkxMgotLS0gLi4vY3ZzL3NyYy9zeXMvYXJjaC9ldmJhcm0vY29u
Zi9zdGQub3NrNTkxMgkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorKysgc3Jj
L3N5cy9hcmNoL2V2YmFybS9jb25mL3N0ZC5vc2s1OTEyCTIwMDctMDEtMDUgMTg6NDY6NTguMDAw
MDAwMDAwIC0wODAwCkBAIC0wLDAgKzEsMjEgQEAKKyMJJE5ldEJTRDogJAorIworIyBzdGFuZGFy
ZCBOZXRCU0QvZXZiYXJtIGZvciBPU0s1OTEyIG9wdGlvbnMKKworbWFjaGluZQlldmJhcm0gYXJt
CitpbmNsdWRlCQkiY29uZi9zdGQiCSMgTUkgc3RhbmRhcmQgb3B0aW9ucworCisjIFB1bGwgaW4g
T1NLNTkxMiBjb25maWcgZGVmaW5pdGlvbnMuCitpbmNsdWRlICJhcmNoL2V2YmFybS9jb25mL2Zp
bGVzLm9zazU5MTIiCisKK29wdGlvbnMgCUVYRUNfRUxGMzIKK29wdGlvbnMgCUVYRUNfU0NSSVBU
CisKKyMgVG8gc3VwcG9ydCBlYXN5IHRyYW5zaXQgdG8gLi4vYXJjaC9hcm0vYXJtMzIKK29wdGlv
bnMgCUFSTTMyCisKK21ha2VvcHRpb25zCUxPQURBRERSRVNTPSIweGMwMDAwMDAwIgorbWFrZW9w
dGlvbnMJQk9BUkRUWVBFPSJvc2s1OTEyIgorbWFrZW9wdGlvbnMJQk9BUkRNS0ZSQUc9IiR7VEhJ
U0FSTX0vY29uZi9tay5vc2s1OTEyIgorCitvcHRpb25zIAlBUk1fSU5UUl9JTVBMPSI8YXJjaC9h
cm0vb21hcC9vbWFwNTkxMl9pbnRyLmg+IgpzcmMvc3lzL2FyY2gvZXZiYXJtL29zazU5MTIvaWZf
c21fZW1pZnMuYwotLS0gLi4vY3ZzL3NyYy9zeXMvYXJjaC9ldmJhcm0vb3NrNTkxMi9pZl9zbV9l
bWlmcy5jCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCisrKyBzcmMvc3lzL2Fy
Y2gvZXZiYXJtL29zazU5MTIvaWZfc21fZW1pZnMuYwkyMDA3LTAxLTA1IDE4OjQ2OjU4LjAwMDAw
MDAwMCAtMDgwMApAQCAtMCwwICsxLDEyMiBAQAorLyoJJE5ldEJTRDogJAkqLworCisvKgorICog
T1NLNTkxMiBTTUM5MUN4eCB3cmFwcGVyLCBiYXNlZCBvbiBzeXMvYXJjaC9ldmJhcm0vdmlwZXIv
aWZfc21fcHhhaXAuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBBbnR0aSBLYW50ZWUuICBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVy
aWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBt
dXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAgICAgVGhp
cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBUaGUgTmV0QlNECisgKiAg
ICAgICAgRm91bmRhdGlvbiwgSW5jLiBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKyAqIDQuIFRoZSBu
YW1lIG9mIHRoZSBjb21wYW55IG5vciB0aGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBiZSB1c2Vk
IHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYworICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElT
JycgQU5EIEFOWSBFWFBSRVNTCisgKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMu
aD4KK19fS0VSTkVMX1JDU0lEKDAsICIkTmV0QlNEOiAkIik7CisKKyNpbmNsdWRlIDxzeXMvcGFy
YW0uaD4KKyNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMvZGV2aWNlLmg+CisK
KyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxuZXQvaWZfZXRoZXIuaD4KKyNpbmNsdWRl
IDxuZXQvaWZfbWVkaWEuaD4KKworI2luY2x1ZGUgPG1hY2hpbmUvaW50ci5oPgorI2luY2x1ZGUg
PG1hY2hpbmUvYnVzLmg+CisKKyNpbmNsdWRlIDxkZXYvbWlpL21paS5oPgorI2luY2x1ZGUgPGRl
di9taWkvbWlpdmFyLmg+CisKKyNpbmNsdWRlIDxkZXYvaWMvc21jOTFjeHhyZWcuaD4KKyNpbmNs
dWRlIDxkZXYvaWMvc21jOTFjeHh2YXIuaD4KKworI2luY2x1ZGUgPGFyY2gvYXJtL29tYXAvb21h
cF9lbWlmcy5oPgorI2luY2x1ZGUgPGFyY2gvYXJtL29tYXAvb21hcF9ncGlvLmg+CisKK3N0YXRp
YyBpbnQJc21fZW1pZnNfbWF0Y2goc3RydWN0IGRldmljZSAqLCBzdHJ1Y3QgY2ZkYXRhICosIHZv
aWQgKik7CitzdGF0aWMgdm9pZAlzbV9lbWlmc19hdHRhY2goc3RydWN0IGRldmljZSAqLCBzdHJ1
Y3QgZGV2aWNlICosIHZvaWQgKik7CisKK3N0cnVjdCBzbV9lbWlmc19zb2Z0YyB7CisJc3RydWN0
IHNtYzkxY3h4X3NvZnRjIHNjX3NtOworCXZvaWQgKmloOworfTsKKworQ0ZBVFRBQ0hfREVDTChz
bV9lbWlmcywgc2l6ZW9mKHN0cnVjdCBzbV9lbWlmc19zb2Z0YyksIHNtX2VtaWZzX21hdGNoLAor
ICAgIHNtX2VtaWZzX2F0dGFjaCwgTlVMTCwgTlVMTCk7CisKK3N0YXRpYyBpbnQKK3NtX2VtaWZz
X21hdGNoKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGNmZGF0YSAqbWF0Y2gsIHZvaWQg
KmF1eCkKK3sKKwlzdHJ1Y3QgZW1pZnNfYXR0YWNoX2FyZ3MgKmVtaWZzID0gYXV4OworCisJaWYg
KGVtaWZzLT5lbWlmc19hZGRyID09IC0xKQorCQlwYW5pYygic20gbXVzdCBoYXZlIGFkZHIgc3Bl
Y2lmaWVkIGluIGNvbmZpZy4iKTsKKworCS8qIFRydXN0IHRoZSBjb25maWcgZmlsZS4gKi8KKwly
ZXR1cm4gKDEpOworfQorCitzdGF0aWMgdm9pZAorc21fZW1pZnNfYXR0YWNoKHN0cnVjdCBkZXZp
Y2UgKnBhcmVudCwgc3RydWN0IGRldmljZSAqc2VsZiwgdm9pZCAqYXV4KQoreworCXN0cnVjdCBz
bV9lbWlmc19zb2Z0YyAqZW1pZnNzYyA9IChzdHJ1Y3Qgc21fZW1pZnNfc29mdGMgKilzZWxmOwor
CXN0cnVjdCBzbWM5MWN4eF9zb2Z0YyAqc2MgPSAmZW1pZnNzYy0+c2Nfc207CisJc3RydWN0IGVt
aWZzX2F0dGFjaF9hcmdzICplbWlmcyA9IGF1eDsKKwlidXNfc3BhY2VfdGFnX3QgYnN0OworCWJ1
c19zcGFjZV9oYW5kbGVfdCBic2g7CisKKwlic3QgPSBlbWlmcy0+ZW1pZnNfaW90OworCisJLyog
bWFwIGkvbyBzcGFjZSAqLworCWlmIChidXNfc3BhY2VfbWFwKGJzdCwgZW1pZnMtPmVtaWZzX2Fk
ZHIsIFNNQ19JT1NJWkUsIDAsICZic2gpICE9IDApIHsKKwkJYXByaW50X2Vycm9yKCI6IHNtX2Vt
aWZzX2F0dGFjaDogY2FuJ3QgbWFwIGkvbyBzcGFjZSIpOworCQlyZXR1cm47CisJfQorCisJYXBy
aW50X25vcm1hbCgiXG4iKTsKKworCS8qIGZpbGwgaW4gbWFzdGVyIHNjICovCisJc2MtPnNjX2Jz
dCA9IGJzdDsKKwlzYy0+c2NfYnNoID0gYnNoOworCisJLyogcmVnaXN0ZXIgdGhlIGludGVycnVw
dCBoYW5kbGVyICovCisJZW1pZnNzYy0+aWggPSAKKwkgICAgb21hcF9ncGlvX2ludHJfZXN0YWJs
aXNoKGVtaWZzLT5lbWlmc19pbnRyLCBJU1RfRURHRV9SSVNJTkcsCisJCQkJICAgICBJUExfTkVU
LCBzYy0+c2NfZGV2LmR2X3huYW1lLAorCQkJCSAgICAgc21jOTFjeHhfaW50ciwgc2MpOworCisJ
aWYgKGVtaWZzc2MtPmloID09IE5VTEwpIHsKKwkJYXByaW50X2Vycm9yKCI6IGNvdWxkbid0IGVz
dGFibGlzaCBpbnRlcnJ1cHRcbiIpOworCQlidXNfc3BhY2VfdW5tYXAoYnN0LCBic2gsIFNNQ19J
T1NJWkUpOworCQlyZXR1cm47CisJfQorCisJLyogUGVyZm9ybSBnZW5lcmljIGF0dGFjaC4gKi8K
KwlzYy0+c2NfZmxhZ3MgfD0gU01DX0ZMQUdTX0VOQUJMRUQ7CisJc21jOTFjeHhfYXR0YWNoKHNj
LCBOVUxMKTsKK30KKwpzcmMvc3lzL2FyY2gvZXZiYXJtL29zazU5MTIvb3NrNTkxMl9tYWNoZGVw
LmMKLS0tIC4uL2N2cy9zcmMvc3lzL2FyY2gvZXZiYXJtL29zazU5MTIvb3NrNTkxMl9tYWNoZGVw
LmMJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKKysrIHNyYy9zeXMvYXJjaC9l
dmJhcm0vb3NrNTkxMi9vc2s1OTEyX21hY2hkZXAuYwkyMDA3LTAxLTA1IDE4OjQ2OjU4LjAwMDAw
MDAwMCAtMDgwMApAQCAtMCwwICsxLDkwMSBAQAorLyoJJE5ldEJTRDogJCAqLworCisvKgorICog
TWFjaGluZSBkZXBlbmRlbnQgZnVuY3Rpb25zIGZvciBrZXJuZWwgc2V0dXAgZm9yIFRJIE9TSzU5
MTIgYm9hcmQuCisgKiBCYXNlZCBvbiBsdWJib2NrX21hY2hkZXAuYyB3aGljaCBpbiB0dXJuIHdh
cyBiYXNlZCBvbiBpcTgwMzEwX21hY2hoZGVwLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIs
IDIwMDMsIDIwMDUgIEdlbmV0ZWMgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogV3JpdHRlbiBieSBIaXJveXVraSBCZXNzaG8gZm9yIEdlbmV0ZWMgQ29ycG9yYXRpb24uCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKiAzLiBUaGUgbmFtZSBvZiBHZW5ldGVjIENvcnBvcmF0aW9uIG1heSBub3QgYmUg
dXNlZCB0byBlbmRvcnNlIG9yCisgKiAgICBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdFTkVURUMgQ09SUE9S
QVRJT04gYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBHRU5FVEVDIENPUlBPUkFU
SU9OCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBDb3B5cmlnaHQgKGMp
IDIwMDEgV2FzYWJpIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogV3JpdHRlbiBieSBKYXNvbiBSLiBUaG9ycGUgZm9yIFdhc2FiaSBTeXN0ZW1zLCBJbmMuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVy
ZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93
aW5nIGFja25vd2xlZGdlbWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk
ZXZlbG9wZWQgZm9yIHRoZSBOZXRCU0QgUHJvamVjdCBieQorICoJV2FzYWJpIFN5c3RlbXMsIElu
Yy4KKyAqIDQuIFRoZSBuYW1lIG9mIFdhc2FiaSBTeXN0ZW1zLCBJbmMuIG1heSBub3QgYmUgdXNl
ZCB0byBlbmRvcnNlCisgKiAgICBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFdBU0FCSSBTWVNURU1TLCBJ
TkMuIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgV0FTQUJJIFNZU1RFTVMsIElO
QworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogQ29weXJpZ2h0IChjKSAx
OTk3LDE5OTggTWFyayBCcmluaWNvbWJlLgorICogQ29weXJpZ2h0IChjKSAxOTk3LDE5OTggQ2F1
c2FsaXR5IExpbWl0ZWQuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4g
QWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0
aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRn
ZW1lbnQ6CisgKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IE1h
cmsgQnJpbmljb21iZQorICoJZm9yIHRoZSBOZXRCU0QgUHJvamVjdC4KKyAqIDQuIFRoZSBuYW1l
IG9mIHRoZSBjb21wYW55IG5vciB0aGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBiZSB1c2VkIHRv
CisgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYworICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZz
Lmg+CitfX0tFUk5FTF9SQ1NJRCgwLCAiJE5ldEJTRDogJCIpOworCisjaW5jbHVkZSAib3B0X21h
Y2hkZXAuaCIKKyNpbmNsdWRlICJvcHRfZGRiLmgiCisjaW5jbHVkZSAib3B0X2tnZGIuaCIKKyNp
bmNsdWRlICJvcHRfaXBrZGIuaCIKKyNpbmNsdWRlICJvcHRfbWQuaCIKKyNpbmNsdWRlICJvcHRf
Y29tLmgiCisjaW5jbHVkZSAibWQuaCIKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1
ZGUgPHN5cy9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMv
a2VybmVsLmg+CisjaW5jbHVkZSA8c3lzL2V4ZWMuaD4KKyNpbmNsdWRlIDxzeXMvcHJvYy5oPgor
I2luY2x1ZGUgPHN5cy9tc2didWYuaD4KKyNpbmNsdWRlIDxzeXMvcmVib290Lmg+CisjaW5jbHVk
ZSA8c3lzL3Rlcm1pb3MuaD4KKyNpbmNsdWRlIDxzeXMva3N5bXMuaD4KKworI2luY2x1ZGUgPHV2
bS91dm1fZXh0ZXJuLmg+CisKKyNpbmNsdWRlIDxzeXMvY29uZi5oPgorI2luY2x1ZGUgPGRldi9j
b25zLmg+CisjaW5jbHVkZSA8ZGV2L21kLmg+CisKKyNpbmNsdWRlIDxtYWNoaW5lL2RiX21hY2hk
ZXAuaD4KKyNpbmNsdWRlIDxkZGIvZGJfc3ltLmg+CisjaW5jbHVkZSA8ZGRiL2RiX2V4dGVybi5o
PgorI2lmZGVmIEtHREIKKyNpbmNsdWRlIDxzeXMva2dkYi5oPgorI2VuZGlmCisKKyNpbmNsdWRl
IDxtYWNoaW5lL2Jvb3Rjb25maWcuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2J1cy5oPgorI2luY2x1
ZGUgPG1hY2hpbmUvY3B1Lmg+CisjaW5jbHVkZSA8bWFjaGluZS9mcmFtZS5oPgorI2luY2x1ZGUg
PGFybS91bmRlZmluZWQuaD4KKworI2luY2x1ZGUgPGFybS9hcm0zMi9tYWNoZGVwLmg+CisKKyNp
bmNsdWRlIDxhcm0vb21hcC9vbWFwX3JlZy5oPgorI2luY2x1ZGUgPGFybS9vbWFwL29tYXBfdGlw
Yi5oPgorI2luY2x1ZGUgPGFybS9vbWFwL29tYXBfY29tLmg+CisKKy8qCisgKiBUaGUgcmFuZ2Ug
MHhjMTAwMDAwMCAtIDB4Y2NmZmZmZmYgaXMgYXZhaWxhYmxlIGZvciBrZXJuZWwgVk0gc3BhY2Uu
CisgKi8KKyNkZWZpbmUJS0VSTkVMX1ZNX0JBU0UJCShLRVJORUxfQkFTRSArIDB4MDEwMDAwMDAp
CisjZGVmaW5lIEtFUk5FTF9WTV9TSVpFCQkweDBDMDAwMDAwCisKKworLyoKKyAqIEFkZHJlc3Mg
dG8gY2FsbCBmcm9tIGNwdV9yZXNldCgpIHRvIHJlc2V0IHRoZSBtYWNoaW5lLgorICogVGhpcyBp
cyBtYWNoaW5lIGFyY2hpdGVjdHVyZSBkZXBlbmRhbnQgYXMgaXQgdmFyaWVzIGRlcGVuZGluZwor
ICogb24gd2hlcmUgdGhlIFJPTSBhcHBlYXJzIHdoZW4geW91IHR1cm4gdGhlIE1NVSBvZmYuCisg
Ki8KKwordV9pbnQgY3B1X3Jlc2V0X2FkZHJlc3MgPSAwOworCisvKiBEZWZpbmUgdmFyaW91cyBz
dGFjayBzaXplcyBpbiBwYWdlcyAqLworI2RlZmluZSBJUlFfU1RBQ0tfU0laRQkxCisjZGVmaW5l
IEFCVF9TVEFDS19TSVpFCTEKKyNpZmRlZiBJUEtEQgorI2RlZmluZSBVTkRfU1RBQ0tfU0laRQky
CisjZWxzZQorI2RlZmluZSBVTkRfU1RBQ0tfU0laRQkxCisjZW5kaWYKKworQm9vdENvbmZpZyBi
b290Y29uZmlnOwkJLyogQm9vdCBjb25maWcgc3RvcmFnZSAqLworY2hhciAqYm9vdF9hcmdzID0g
TlVMTDsKK2NoYXIgKmJvb3RfZmlsZSA9IE5VTEw7CisKKy8qIFBoeXNpY2FsIGFkZHJlc3Mgb2Yg
dGhlIGJlZ2lubmluZyBvZiBTRFJBTS4gKi8KK3BhZGRyX3QgcGh5c2ljYWxfc3RhcnQ7CisvKiBQ
aHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBmaXJzdCBieXRlIGFmdGVyIHRoZSBlbmQgb2YgU0RSQU0u
ICovCitwYWRkcl90IHBoeXNpY2FsX2VuZDsKKy8qIE51bWJlciBvZiBwYWdlcyBvZiBtZW1vcnku
ICovCitpbnQgcGh5c21lbSA9IDA7CisKKy8qIFNhbWUgdGhpbmdzLCBidXQgZm9yIHRoZSBmcmVl
ICh1bnVzZWQgYnkgdGhlIGtlcm5lbCkgbWVtb3J5LiAqLworc3RhdGljIHBhZGRyX3QgcGh5c2lj
YWxfZnJlZXN0YXJ0LCBwaHlzaWNhbF9mcmVlZW5kOworc3RhdGljIHVfaW50IGZyZWVfcGFnZXM7
CisKKy8qIFBoeXNpY2FsIGFuZCB2aXJ0dWFsIGFkZHJlc3NlcyBmb3Igc29tZSBnbG9iYWwgcGFn
ZXMgKi8KK3B2X2FkZHJfdCBzeXN0ZW1wYWdlOwkJLyogZXhjZXB0aW9uIHZlY3RvcnMgKi8KK3B2
X2FkZHJfdCBpcnFzdGFjazsKK3B2X2FkZHJfdCB1bmRzdGFjazsKK3B2X2FkZHJfdCBhYnRzdGFj
azsKK3B2X2FkZHJfdCBrZXJuZWxzdGFjazsJLyogc3RhY2sgZm9yIFNWQyBtb2RlICovCitzdGF0
aWMgcHZfYWRkcl90IGtlcm5lbF9sMXB0OwkvKiBGaXJzdCBsZXZlbCBwYWdlIHRhYmxlLiAqLwor
CisvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBtZXNzYWdlIGJ1ZmZlci4gKi8KK3BhZGRyX3Qg
bXNnYnVmcGh5czsKKworZXh0ZXJuIHVfaW50IGRhdGFfYWJvcnRfaGFuZGxlcl9hZGRyZXNzOwor
ZXh0ZXJuIHVfaW50IHByZWZldGNoX2Fib3J0X2hhbmRsZXJfYWRkcmVzczsKK2V4dGVybiB1X2lu
dCB1bmRlZmluZWRfaGFuZGxlcl9hZGRyZXNzOworZXh0ZXJuIGNoYXIgS0VSTkVMX0JBU0VfcGh5
c1tdOworZXh0ZXJuIGNoYXIgZXRleHRbXSwgX19kYXRhX3N0YXJ0W10sIF9lZGF0YVtdLCBfX2Jz
c19zdGFydFtdLCBfX2Jzc19lbmRfX1tdOworZXh0ZXJuIGNoYXIgX2VuZFtdOworCisjZGVmaW5l
IEtFUk5FTF9QVF9TWVMJCTAJLyogUGFnZSB0YWJsZSBmb3IgbWFwcGluZyBwcm9jMCB6ZXJvIHBh
Z2UgKi8KKyNkZWZpbmUgS0VSTkVMX1BUX0tFUk5FTAkxCS8qIFBhZ2UgdGFibGUgZm9yIG1hcHBp
bmcga2VybmVsICovCisjZGVmaW5lCUtFUk5FTF9QVF9LRVJORUxfTlVNCTQKKyNkZWZpbmUgS0VS
TkVMX1BUX1ZNREFUQQkoS0VSTkVMX1BUX0tFUk5FTCtLRVJORUxfUFRfS0VSTkVMX05VTSkKKwkJ
CQkgICAgICAgIC8qIFBhZ2UgdGFibGVzIGZvciBtYXBwaW5nIGtlcm5lbCBWTSAqLworI2RlZmlu
ZQlLRVJORUxfUFRfVk1EQVRBX05VTQk0CS8qIHN0YXJ0IHdpdGggMTZNQiBvZiBLVk0gKi8KKyNk
ZWZpbmUgTlVNX0tFUk5FTF9QVFMJCShLRVJORUxfUFRfVk1EQVRBICsgS0VSTkVMX1BUX1ZNREFU
QV9OVU0pCisKK3B2X2FkZHJfdCBrZXJuZWxfcHRfdGFibGVbTlVNX0tFUk5FTF9QVFNdOworCitl
eHRlcm4gc3RydWN0IHVzZXIgKnByb2MwcGFkZHI7CisKKy8qCisgKiBNYWNyb3MgdG8gdHJhbnNs
YXRlIGJldHdlZW4gcGh5c2ljYWwgYW5kIHZpcnR1YWwgZm9yIGEgc3Vic2V0IG9mIHRoZQorICog
a2VybmVsIGFkZHJlc3Mgc3BhY2UuICAqTm90KiBmb3IgZ2VuZXJhbCB1c2UuCisgKi8KKyNkZWZp
bmUgS0VSTkVMX0JBU0VfUEhZUyAoKHBhZGRyX3QpJktFUk5FTF9CQVNFX3BoeXMpCisjZGVmaW5l
IEtFUk5fVlRPUEhZUyh2YSkgXAorCSgocGFkZHJfdCkoKHZhZGRyX3QpdmEgLSBLRVJORUxfQkFT
RSArIEtFUk5FTF9CQVNFX1BIWVMpKQorI2RlZmluZSBLRVJOX1BIWVNUT1YocGEpIFwKKwkoKHZh
ZGRyX3QpKChwYWRkcl90KXBhIC0gS0VSTkVMX0JBU0VfUEhZUyArIEtFUk5FTF9CQVNFKSkKKwor
LyogUHJvdG90eXBlcyAqLworCit2b2lkIGNvbnNpbml0KHZvaWQpOworI2lmZGVmIEtHREIKK3N0
YXRpYyB2b2lkIGtnZGJfcG9ydF9pbml0KHZvaWQpOworI2VuZGlmCitzdGF0aWMgdm9pZCBzZXR1
cF9yZWFsX3BhZ2VfdGFibGVzKHZvaWQpOworc3RhdGljIHZvaWQgaW5pdF9jbG9ja3Modm9pZCk7
CisKK2JzX3Byb3Rvcyhic19ub3RpbXBsKTsKKworI2luY2x1ZGUgImNvbS5oIgorI2lmIE5DT00g
PiAwCisjaW5jbHVkZSA8ZGV2L2ljL2NvbXJlZy5oPgorI2luY2x1ZGUgPGRldi9pYy9jb212YXIu
aD4KKyNlbmRpZgorCisvKgorICogdm9pZCBjcHVfcmVib290KGludCBob3d0bywgY2hhciAqYm9v
dHN0cikKKyAqCisgKiBSZWJvb3RzIHRoZSBzeXN0ZW0KKyAqCisgKiBEZWFsIHdpdGggYW55IHN5
bmNpbmcsIHVubW91bnRpbmcsIGR1bXBpbmcgYW5kIHNodXRkb3duIGhvb2tzLAorICogdGhlbiBy
ZXNldCB0aGUgQ1BVLgorICovCit2b2lkCitjcHVfcmVib290KGludCBob3d0bywgY2hhciAqYm9v
dHN0cikKK3sKKyNpZmRlZiBESUFHTk9TVElDCisJLyogaW5mbyAqLworCXByaW50ZigiYm9vdDog
aG93dG89JTA4eCBjdXJwcm9jPSVwXG4iLCBob3d0bywgY3VycHJvYyk7CisjZW5kaWYKKworCS8q
CisJICogSWYgd2UgYXJlIHN0aWxsIGNvbGQgdGhlbiBoaXQgdGhlIGFpciBicmFrZXMKKwkgKiBh
bmQgY3Jhc2ggdG8gZWFydGggZmFzdAorCSAqLworCWlmIChjb2xkKSB7CisJCWRvc2h1dGRvd25o
b29rcygpOworCQlwcmludGYoIlRoZSBvcGVyYXRpbmcgc3lzdGVtIGhhcyBoYWx0ZWQuXG4iKTsK
KwkJcHJpbnRmKCJQbGVhc2UgcHJlc3MgYW55IGtleSB0byByZWJvb3QuXG5cbiIpOworCQljbmdl
dGMoKTsKKwkJcHJpbnRmKCJyZWJvb3RpbmcuLi5cbiIpOworCQljcHVfcmVzZXQoKTsKKwkJLypO
T1RSRUFDSEVEKi8KKwl9CisKKwkvKiBEaXNhYmxlIGNvbnNvbGUgYnVmZmVyaW5nICovCisvKglj
bnBvbGxjKDEpOyovCisKKwkvKgorCSAqIElmIFJCX05PU1lOQyB3YXMgbm90IHNwZWNpZmllZCBz
eW5jIHRoZSBkaXNjcy4KKwkgKiBOb3RlOiBVbmxlc3MgY29sZCBpcyBzZXQgdG8gMSBoZXJlLCBz
eXNsb2dkIHdpbGwgZGllIGR1cmluZyB0aGUKKwkgKiB1bm1vdW50LiAgSXQgbG9va3MgbGlrZSBz
eXNsb2dkIGlzIGdldHRpbmcgd29rZW4gdXAgb25seSB0byBmaW5kCisJICogdGhhdCBpdCBjYW5u
b3QgcGFnZSBwYXJ0IG9mIHRoZSBiaW5hcnkgaW4gYXMgdGhlIGZpbGVzeXN0ZW0gaGFzCisJICog
YmVlbiB1bm1vdW50ZWQuCisJICovCisJaWYgKCEoaG93dG8gJiBSQl9OT1NZTkMpKQorCQlib290
c3luYygpOworCisJLyogU2F5IE5PIHRvIGludGVycnVwdHMgKi8KKwlzcGxoaWdoKCk7CisKKwkv
KiBEbyBhIGR1bXAgaWYgcmVxdWVzdGVkLiAqLworCWlmICgoaG93dG8gJiAoUkJfRFVNUCB8IFJC
X0hBTFQpKSA9PSBSQl9EVU1QKQorCQlkdW1wc3lzKCk7CisKKwkvKiBSdW4gYW55IHNodXRkb3du
IGhvb2tzICovCisJZG9zaHV0ZG93bmhvb2tzKCk7CisKKwkvKiBNYWtlIHN1cmUgSVJRJ3MgYXJl
IGRpc2FibGVkICovCisJSVJRZGlzYWJsZTsKKworCWlmIChob3d0byAmIFJCX0hBTFQpIHsKKwkJ
cHJpbnRmKCJUaGUgb3BlcmF0aW5nIHN5c3RlbSBoYXMgaGFsdGVkLlxuIik7CisJCXByaW50Zigi
UGxlYXNlIHByZXNzIGFueSBrZXkgdG8gcmVib290LlxuXG4iKTsKKwkJY25nZXRjKCk7CisJfQor
CisJcHJpbnRmKCJyZWJvb3RpbmcuLi5cbiIpOworCWNwdV9yZXNldCgpOworCS8qTk9UUkVBQ0hF
RCovCit9CisKKy8qCisgKiBTdGF0aWMgZGV2aWNlIG1hcHBpbmdzLiBUaGVzZSBwZXJpcGhlcmFs
IHJlZ2lzdGVycyBhcmUgbWFwcGVkIGF0CisgKiBmaXhlZCB2aXJ0dWFsIGFkZHJlc3NlcyB2ZXJ5
IGVhcmx5IGluIGluaXRhcm0oKSBzbyB0aGF0IHdlIGNhbiB1c2UKKyAqIHRoZW0gd2hpbGUgYm9v
dGluZyB0aGUga2VybmVsLCBhbmQgc3RheSBhdCB0aGUgc2FtZSBhZGRyZXNzCisgKiB0aHJvdWdo
b3V0IHdob2xlIGtlcm5lbCdzIGxpZmUgdGltZS4KKyAqCisgKiBXZSB1c2UgdGhpcyB0YWJsZSB0
d2ljZTsgb25jZSB3aXRoIGJvb3RzdHJhcCBwYWdlIHRhYmxlLCBhbmQgb25jZQorICogd2l0aCBr
ZXJuZWwncyBwYWdlIHRhYmxlIHdoaWNoIHdlIGJ1aWxkIHVwIGluIGluaXRhcm0oKS4KKyAqCisg
KiBTaW5jZSB3ZSBtYXAgdGhlc2UgcmVnaXN0ZXJzIGludG8gdGhlIGJvb3RzdHJhcCBwYWdlIHRh
YmxlIHVzaW5nCisgKiBwbWFwX2Rldm1hcF9ib290c3RyYXAoKSB3aGljaCBjYWxscyBwbWFwX21h
cF9jaHVuaygpLCB3ZSBtYXAKKyAqIHJlZ2lzdGVycyBzZWdtZW50LWFsaWduZWQgYW5kIHNlZ21l
bnQtcm91bmRlZCBpbiBvcmRlciB0byBhdm9pZAorICogdXNpbmcgdGhlIDJuZCBwYWdlIHRhYmxl
cy4KKyAqLworCisjZGVmaW5lCV9BKGEpCSgoYSkgJiB+TDFfU19PRkZTRVQpCisjZGVmaW5lCV9T
KHMpCSgoKHMpICsgTDFfU19TSVpFIC0gMSkgJiB+KEwxX1NfU0laRS0xKSkKKworc3RhdGljIGNv
bnN0IHN0cnVjdCBwbWFwX2Rldm1hcCBkZXZtYXBbXSA9IHsKKwl7CisJCS8qIE1hcCB0aGUgVGV4
YXMgSW5zdHJ1bWVudHMgUGVyaXBoZXJhbCBCdXMgVkE9PVBBICovCisJCS5wZF92YSA9IF9BKE9N
QVBfVElQQl9QQkFTRSksCisJCS5wZF9wYSA9IF9BKE9NQVBfVElQQl9QQkFTRSksCisJCS5wZF9z
aXplID0gX1MoT01BUF9USVBCX1NJWkUpLAorCQkucGRfcHJvdCA9IFZNX1BST1RfUkVBRHxWTV9Q
Uk9UX1dSSVRFLAorCQkucGRfY2FjaGUgPSBQVEVfTk9DQUNIRQorCX0sCisJezB9Cit9OworCisj
dW5kZWYJX0EKKyN1bmRlZglfUworCisvKgorICogdV9pbnQgaW5pdGFybSguLi4pCisgKgorICog
SW5pdGlhbCBlbnRyeSBwb2ludCBvbiBzdGFydHVwLiBUaGlzIGdldHMgY2FsbGVkIGJlZm9yZSBt
YWluKCkgaXMKKyAqIGVudGVyZWQuCisgKiBJdCBzaG91bGQgYmUgcmVzcG9uc2libGUgZm9yIHNl
dHRpbmcgdXAgZXZlcnl0aGluZyB0aGF0IG11c3QgYmUKKyAqIGluIHBsYWNlIHdoZW4gbWFpbiBp
cyBjYWxsZWQuCisgKiBUaGlzIGluY2x1ZGVzCisgKiAgIFRha2luZyBhIGNvcHkgb2YgdGhlIGJv
b3QgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuCisgKiAgIEluaXRpYWxpc2luZyB0aGUgcGh5c2lj
YWwgY29uc29sZSBzbyBjaGFyYWN0ZXJzIGNhbiBiZSBwcmludGVkLgorICogICBTZXR0aW5nIHVw
IHBhZ2UgdGFibGVzIGZvciB0aGUga2VybmVsCisgKiAgIFJlbG9jYXRpbmcgdGhlIGtlcm5lbCB0
byB0aGUgYm90dG9tIG9mIHBoeXNpY2FsIG1lbW9yeQorICovCit1X2ludAoraW5pdGFybSh2b2lk
ICphcmcpCit7CisJLyoKKwkgKiBXaGVuIHdlIGVudGVyIGhlcmUsIHdlIGFyZSB1c2luZyBhIHRl
bXBvcmFyeSBmaXJzdCBsZXZlbAorCSAqIHRyYW5zbGF0aW9uIHRhYmxlIHdpdGggc2VjdGlvbiBl
bnRyaWVzIGluIGl0IHRvIGNvdmVyIHRoZSBUSVBCCisJICogcGVyaXBoZXJhbHMgYW5kIFNEUkFN
LiAgVGhlIHRlbXBvcmFyeSBmaXJzdCBsZXZlbCB0cmFuc2xhdGlvbiB0YWJsZQorCSAqIGlzIGF0
IHRoZSBlbmQgb2YgU0RSQU0uCisJICovCisKKwkvKiBIZWFkcyB1cCAuLi4gU2V0dXAgdGhlIENQ
VSAvIE1NVSAvIFRMQiBmdW5jdGlvbnMuICovCisJaWYgKHNldF9jcHVmdW5jcygpKQorCQlwYW5p
YygiY3B1IG5vdCByZWNvZ25pemVkISIpOworCisJaW5pdF9jbG9ja3MoKTsKKworCS8qIFRoZSBj
b25zb2xlIGlzIGdvaW5nIHRvIHRyeSB0byBtYXAgdGhpbmdzLiAgR2l2ZSBwbWFwIGEgZGV2bWFw
LiAqLworCXBtYXBfZGV2bWFwX3JlZ2lzdGVyKGRldm1hcCk7CisJY29uc2luaXQoKTsKKyNpZmRl
ZiBLR0RCCisJa2dkYl9wb3J0X2luaXQoKTsKKyNlbmRpZgorCisjaWZkZWYgVkVSQk9TRV9JTklU
X0FSTQorCS8qIFRhbGsgdG8gdGhlIHVzZXIgKi8KKwlwcmludGYoIlxuTmV0QlNEL2V2YmFybSAo
T1NLNTkxMikgYm9vdGluZyAuLi5cbiIpOworI2VuZGlmCisKKyNpZmRlZiBCT09UX0FSR1MKKwlj
aGFyIG1pX2Jvb3RhcmdzW10gPSBCT09UX0FSR1M7CisJcGFyc2VfbWlfYm9vdGFyZ3MobWlfYm9v
dGFyZ3MpOworI2VuZGlmCisKKyNpZmRlZiBWRVJCT1NFX0lOSVRfQVJNCisJcHJpbnRmKCJpbml0
YXJtOiBDb25maWd1cmluZyBzeXN0ZW0gLi4uXG4iKTsKKyNlbmRpZgorCisJLyoKKwkgKiBTZXQg
dXAgdGhlIHZhcmlhYmxlcyB0aGF0IGRlZmluZSB0aGUgYXZhaWxhYmlsaXR5IG9mIHBoeXNpY2Fs
CisJICogbWVtb3J5LgorCSAqLworCXBoeXNpY2FsX3N0YXJ0ID0gS0VSTkVMX0JBU0VfUEhZUzsK
KwlwaHlzaWNhbF9lbmQgPSBwaHlzaWNhbF9zdGFydCArIE1FTVNJWkVfQllURVM7CisJcGh5c21l
bSA9IE1FTVNJWkVfQllURVMgLyBQQUdFX1NJWkU7CisKKwkvKiBGYWtlIGJvb3Rjb25maWcgc3Ry
dWN0dXJlIGZvciB0aGUgYmVuZWZpdCBvZiBwbWFwLmMuICovCisJYm9vdGNvbmZpZy5kcmFtYmxv
Y2tzID0gMTsKKwlib290Y29uZmlnLmRyYW1bMF0uYWRkcmVzcyA9IHBoeXNpY2FsX3N0YXJ0Owor
CWJvb3Rjb25maWcuZHJhbVswXS5wYWdlcyA9IHBoeXNtZW07CisKKwkvKgorCSAqIE91ciBrZXJu
ZWwgaXMgYXQgdGhlIGJlZ2lubmluZyBvZiBtZW1vcnksIHNvIHNldCBvdXIgZnJlZSBzcGFjZSB0
bworCSAqIGFsbCB0aGUgbWVtb3J5IGFmdGVyIHRoZSBrZXJuZWwuCisJICovCisJcGh5c2ljYWxf
ZnJlZXN0YXJ0ID0gS0VSTl9WVE9QSFlTKHJvdW5kX3BhZ2UoKHZhZGRyX3QpIF9lbmQpKTsKKwlw
aHlzaWNhbF9mcmVlZW5kID0gcGh5c2ljYWxfZW5kOworCWZyZWVfcGFnZXMgPSAocGh5c2ljYWxf
ZnJlZWVuZCAtIHBoeXNpY2FsX2ZyZWVzdGFydCkgLyBQQUdFX1NJWkU7CisKKwkvKgorCSAqIFRo
aXMgaXMgZ29pbmcgdG8gZG8gYWxsIHRoZSBoYXJkIHdvcmsgb2Ygc2V0dGluZyB1cCB0aGUgZmly
c3QgYW5kCisJICogYW5kIHNlY29uZCBsZXZlbCBwYWdlIHRhYmxlcy4gIFBhZ2VzIG9mIG1lbW9y
eSB3aWxsIGJlIGFsbG9jYXRlZAorCSAqIGFuZCBtYXBwZWQgZm9yIG90aGVyIHN0cnVjdHVyZXMg
dGhhdCBhcmUgcmVxdWlyZWQgZm9yIHN5c3RlbQorCSAqIG9wZXJhdGlvbi4gIFdoZW4gaXQgcmV0
dXJucywgcGh5c2ljYWxfZnJlZXN0YXJ0IGFuZCBmcmVlX3BhZ2VzIHdpbGwKKwkgKiBoYXZlIGJl
ZW4gdXBkYXRlZCB0byByZWZsZWN0IHRoZSBhbGxvY2F0aW9ucyB0aGF0IHdlcmUgbWFkZS4gIElu
CisJICogYWRkaXRpb24sIGtlcm5lbF9sMXB0LCBrZXJuZWxfcHRfdGFibGVbXSwgc3lzdGVtcGFn
ZSwgaXJxc3RhY2ssCisJICogYWJ0c3RhY2ssIHVuZHN0YWNrLCBrZXJuZWxzdGFjaywgbXNnYnVm
cGh5cyB3aWxsIGJlIHNldCB0byBwb2ludCB0bworCSAqIHRoZSBtZW1vcnkgdGhhdCB3YXMgYWxs
b2NhdGVkIGZvciB0aGVtLgorCSAqLworCXNldHVwX3JlYWxfcGFnZV90YWJsZXMoKTsKKworCS8q
CisJICogTW92ZWQgZnJvbSBjcHVfc3RhcnR1cCgpIGFzIGRhdGFfYWJvcnRfaGFuZGxlcigpIHJl
ZmVyZW5jZXMKKwkgKiB0aGlzIGR1cmluZyB1dm0gaW5pdC4KKwkgKi8KKwlwcm9jMHBhZGRyID0g
KHN0cnVjdCB1c2VyICopa2VybmVsc3RhY2sucHZfdmE7CisJbHdwMC5sX2FkZHIgPSBwcm9jMHBh
ZGRyOworCisjaWZkZWYgVkVSQk9TRV9JTklUX0FSTQorCXByaW50ZigiYm9vdHN0cmFwIGRvbmUu
XG4iKTsKKyNlbmRpZgorCisJYXJtMzJfdmVjdG9yX2luaXQoQVJNX1ZFQ1RPUlNfTE9XLCBBUk1f
VkVDX0FMTCk7CisKKwkvKgorCSAqIFBhZ2VzIHdlcmUgYWxsb2NhdGVkIGR1cmluZyB0aGUgc2Vj
b25kYXJ5IGJvb3RzdHJhcCBmb3IgdGhlCisJICogc3RhY2tzIGZvciBkaWZmZXJlbnQgQ1BVIG1v
ZGVzLgorCSAqIFdlIG11c3Qgbm93IHNldCB0aGUgcjEzIHJlZ2lzdGVycyBpbiB0aGUgZGlmZmVy
ZW50IENQVSBtb2RlcyB0bworCSAqIHBvaW50IHRvIHRoZXNlIHN0YWNrcy4KKwkgKiBTaW5jZSB0
aGUgQVJNIHN0YWNrcyB1c2UgU1RNRkQgZXRjLiB3ZSBtdXN0IHNldCByMTMgdG8gdGhlIHRvcCBl
bmQKKwkgKiBvZiB0aGUgc3RhY2sgbWVtb3J5LgorCSAqLworI2lmZGVmIFZFUkJPU0VfSU5JVF9B
Uk0KKwlwcmludGYoImluaXQgc3Vic3lzdGVtczogc3RhY2tzICIpOworI2VuZGlmCisKKwlzZXRf
c3RhY2twdHIoUFNSX0lSUTMyX01PREUsIGlycXN0YWNrLnB2X3ZhICsgSVJRX1NUQUNLX1NJWkUg
KiBQQUdFX1NJWkUpOworCXNldF9zdGFja3B0cihQU1JfQUJUMzJfTU9ERSwgYWJ0c3RhY2sucHZf
dmEgKyBBQlRfU1RBQ0tfU0laRSAqIFBBR0VfU0laRSk7CisJc2V0X3N0YWNrcHRyKFBTUl9VTkQz
Ml9NT0RFLCB1bmRzdGFjay5wdl92YSArIFVORF9TVEFDS19TSVpFICogUEFHRV9TSVpFKTsKKwor
CS8qCisJICogV2VsbCB3ZSBzaG91bGQgc2V0IGEgZGF0YSBhYm9ydCBoYW5kbGVyLgorCSAqIE9u
Y2UgdGhpbmdzIGdldCBnb2luZyB0aGlzIHdpbGwgY2hhbmdlIGFzIHdlIHdpbGwgbmVlZCBhIHBy
b3BlcgorCSAqIGhhbmRsZXIuCisJICogVW50aWwgdGhlbiB3ZSB3aWxsIHVzZSBhIGhhbmRsZXIg
dGhhdCBqdXN0IHBhbmljcyBidXQgdGVsbHMgdXMKKwkgKiB3aHkuCisJICogSW5pdGlhbGlzYXRp
b24gb2YgdGhlIHZlY3RvcnMgd2lsbCBqdXN0IHBhbmljIG9uIGEgZGF0YSBhYm9ydC4KKwkgKiBU
aGlzIGp1c3QgZmlsbHMgaW4gYSBzbGlnaHRseSBiZXR0ZXIgb25lLgorCSAqLworI2lmZGVmIFZF
UkJPU0VfSU5JVF9BUk0KKwlwcmludGYoInZlY3RvcnMgIik7CisjZW5kaWYKKwlkYXRhX2Fib3J0
X2hhbmRsZXJfYWRkcmVzcyA9ICh1X2ludClkYXRhX2Fib3J0X2hhbmRsZXI7CisJcHJlZmV0Y2hf
YWJvcnRfaGFuZGxlcl9hZGRyZXNzID0gKHVfaW50KXByZWZldGNoX2Fib3J0X2hhbmRsZXI7CisJ
dW5kZWZpbmVkX2hhbmRsZXJfYWRkcmVzcyA9ICh1X2ludCl1bmRlZmluZWRpbnN0cnVjdGlvbl9i
b3VuY2U7CisKKwkvKiBJbml0aWFsaXNlIHRoZSB1bmRlZmluZWQgaW5zdHJ1Y3Rpb24gaGFuZGxl
cnMgKi8KKyNpZmRlZiBWRVJCT1NFX0lOSVRfQVJNCisJcHJpbnRmKCJ1bmRlZmluZWQgIik7Cisj
ZW5kaWYKKwl1bmRlZmluZWRfaW5pdCgpOworCisJLyogTG9hZCBtZW1vcnkgaW50byBVVk0uICov
CisjaWZkZWYgVkVSQk9TRV9JTklUX0FSTQorCXByaW50ZigicGFnZSAiKTsKKyNlbmRpZgorCXV2
bV9zZXRwYWdlc2l6ZSgpOyAgICAgICAgLyogaW5pdGlhbGl6ZSBQQUdFX1NJWkUtZGVwZW5kZW50
IHZhcmlhYmxlcyAqLworCXV2bV9wYWdlX3BoeXNsb2FkKGF0b3AocGh5c2ljYWxfZnJlZXN0YXJ0
KSwgYXRvcChwaHlzaWNhbF9mcmVlZW5kKSwKKwkgICAgYXRvcChwaHlzaWNhbF9mcmVlc3RhcnQp
LCBhdG9wKHBoeXNpY2FsX2ZyZWVlbmQpLAorCSAgICBWTV9GUkVFTElTVF9ERUZBVUxUKTsKKwor
CS8qIEJvb3Qgc3RyYXAgcG1hcCB0ZWxsaW5nIGl0IHdoZXJlIHRoZSBrZXJuZWwgcGFnZSB0YWJs
ZSBpcyAqLworI2lmZGVmIFZFUkJPU0VfSU5JVF9BUk0KKwlwcmludGYoInBtYXAgIik7CisjZW5k
aWYKKwlwbWFwX2Jvb3RzdHJhcCgocGRfZW50cnlfdCAqKWtlcm5lbF9sMXB0LnB2X3ZhLCBLRVJO
RUxfVk1fQkFTRSwKKwkgICAgS0VSTkVMX1ZNX0JBU0UgKyBLRVJORUxfVk1fU0laRSk7CisKKyNp
ZmRlZiBWRVJCT1NFX0lOSVRfQVJNCisJcHJpbnRmKCJkb25lLlxuIik7CisjZW5kaWYKKworI2lm
ZGVmIElQS0RCCisJLyogSW5pdGlhbGlzZSBpcGtkYiAqLworCWlwa2RiX2luaXQoKTsKKwlpZiAo
Ym9vdGhvd3RvICYgUkJfS0RCKQorCQlpcGtkYl9jb25uZWN0KDApOworI2VuZGlmCisKKyNpZmRl
ZiBLR0RCCisJaWYgKGJvb3Rob3d0byAmIFJCX0tEQikgeworCQlrZ2RiX2RlYnVnX2luaXQgPSAx
OworCQlrZ2RiX2Nvbm5lY3QoMSk7CisJfQorI2VuZGlmCisKKyNpZmRlZiBEREIKKwlkYl9tYWNo
aW5lX2luaXQoKTsKKworCS8qIEZpcm13YXJlIGRvZXNuJ3QgbG9hZCBzeW1ib2xzLiAqLworCWRk
Yl9pbml0KDAsIE5VTEwsIE5VTEwpOworCisJaWYgKGJvb3Rob3d0byAmIFJCX0tEQikKKwkJRGVi
dWdnZXIoKTsKKyNlbmRpZgorCisJLyogV2UgcmV0dXJuIHRoZSBuZXcgc3RhY2sgcG9pbnRlciBh
ZGRyZXNzICovCisJcmV0dXJuKGtlcm5lbHN0YWNrLnB2X3ZhICsgVVNQQUNFX1NWQ19TVEFDS19U
T1ApOworfQorCitzdGF0aWMgdm9pZAoraW5pdF9jbG9ja3Modm9pZCkKK3sKKyNkZWZpbmUgT01B
UF9NUFVfQkFTRQkweEZGRkVDRTAwCisjZGVmaW5lIEFSTV9DS0NUTAkJMHgwMAorI2RlZmluZSAg
QVJNX1RJTVhPCQkJKDEgPDwgMTIpCisjZGVmaW5lIEFSTV9JRExFQ1QxCQkweDA0CisjZGVmaW5l
ICBJRExUSU1fQVJNCQkJKDEgPDwgOSkKKyNkZWZpbmUgQVJNX0lETEVDVDIJCTB4MDgKKyNkZWZp
bmUgIEVOX1RJTUNLCQkJKDEgPDwgNykKKworI2RlZmluZSBPTUFQX1VMUERfQkFTRQkJMHhGRkZF
MDgwMAorI2RlZmluZSBDQU1fQ0xLX0NUUkwJCTB4MDA3QworI2RlZmluZSBTWVNURU1fQ0xLX0VO
CQkoMSA8PCAyKQorCisjZGVmaW5lIFNPRlRfUkVRX1JFRwkJCTB4MzQKKyNkZWZpbmUgU09GVF9V
QVJUM19EUExMX1JFUQkJMTEKKyNkZWZpbmUgU09GVF9VQVJUMl9EUExMX1JFUQkJMTAKKyNkZWZp
bmUgU09GVF9VQVJUMV9EUExMX1JFUQkJOQorCisjZGVmaW5lIFNPRlRfRElTQUJMRV9SRVFfUkVH
CTB4NjgKKyNkZWZpbmUgRElTX1VBUlQzX0RQTExfUkVRCQk5CisjZGVmaW5lIERJU19VQVJUMl9E
UExMX1JFUQkJOAorI2RlZmluZSBESVNfVUFSVDFfRFBMTF9SRVEJCTcKKworCS8qIEZvciBub3cs
IGp1c3QgaGFjayB1cCB0aGUgY2xvY2tpbmcgYXMgbmVlZGVkIHRvIGdldCB0aGluZ3Mgd29ya2lu
Zy4gKi8KKwkqKHZvbGF0aWxlIHVpbnQzMl90ICopKE9NQVBfTVBVX0JBU0UgKyBBUk1fSURMRUNU
MikgfD0gRU5fVElNQ0s7CisJKih2b2xhdGlsZSB1aW50MzJfdCAqKShPTUFQX01QVV9CQVNFICsg
QVJNX0lETEVDVDEpICY9IH5JRExUSU1fQVJNOworCSoodm9sYXRpbGUgdWludDMyX3QgKikoT01B
UF9NUFVfQkFTRSArIEFSTV9DS0NUTCkgJj0gfkFSTV9USU1YTzsKKworCisJLyoKKwkgKiBOb3Rl
OiBUaGUgU1lTVEVNX0NMS19FTiBiaXQgb2YgdGhlIENBTV9DTEtfQ1RSTCByZWdpc3RlciBtdXN0
IGJlIHNldAorCSAqIHRvIDEsIGZvciBHUElPIGludGVycnVwdCBnZW5lcmF0aW9uIHRvIHdvcmsu
CisJICovCisJKih2b2xhdGlsZSB1aW50MzJfdCAqKShPTUFQX1VMUERfQkFTRSArIENBTV9DTEtf
Q1RSTCkgfD0gU1lTVEVNX0NMS19FTjsKKworCS8qCisJICogSXNzdWUgdGhlIHNvZnR3YXJlIHJl
cXVlc3QgZm9yIHRoZSBVQVJUIGNsb2Nrcy4gIFRoZSBib290bG9hZGVyIHByb2JhYmx5CisJICog
YWxyZWFkeSBkaWQgVUFSVDEgYnV0IG1pZ2h0IG5vdCBoYXZlIGRvbmUgVUFSVDMuCisJICovCisK
KwkqKHZvbGF0aWxlIHVpbnQxNl90ICopKE9NQVBfVUxQRF9CQVNFICsgU09GVF9SRVFfUkVHKSB8
PQorCQkoMSA8PCBTT0ZUX1VBUlQxX0RQTExfUkVRKSB8ICgxIDw8IFNPRlRfVUFSVDNfRFBMTF9S
RVEpOworCSoodm9sYXRpbGUgdWludDE2X3QgKikoT01BUF9VTFBEX0JBU0UgKyBTT0ZUX0RJU0FC
TEVfUkVRX1JFRykgJj0KKwkJfigoMSA8PCBESVNfVUFSVDFfRFBMTF9SRVEpIHwgKDEgPDwgRElT
X1VBUlQzX0RQTExfUkVRKSk7CisKK30KKworI2lmbmRlZiBDT05TQUREUgorI2Vycm9yIFNwZWNp
ZnkgdGhlIGFkZHJlc3Mgb2YgdGhlIGNvbnNvbGUgVUFSVCB3aXRoIHRoZSBDT05TQUREUiBvcHRp
b24uCisjZW5kaWYKKyNpZm5kZWYgQ09OU1BFRUQKKyNkZWZpbmUgQ09OU1BFRUQgMTE1MjAwCisj
ZW5kaWYKKyNpZm5kZWYgQ09OTU9ERQorI2RlZmluZSBDT05NT0RFICgoVFRZREVGX0NGTEFHICYg
fihDU0laRSB8IENTVE9QQiB8IFBBUkVOQikpIHwgQ1M4KSAvKiA4TjEgKi8KKyNlbmRpZgorCitz
dGF0aWMgY29uc3QgdmFkZHJfdCBjb25zYWRkciA9IENPTlNBRERSOworc3RhdGljIGNvbnN0IGlu
dCBjb25zcGVlZCA9IENPTlNQRUVEOworc3RhdGljIGNvbnN0IGludCBjb25tb2RlID0gQ09OTU9E
RTsKKwordm9pZAorY29uc2luaXQodm9pZCkKK3sKKwlzdGF0aWMgaW50IGNvbnNpbml0X2NhbGxl
ZCA9IDA7CisKKwlpZiAoY29uc2luaXRfY2FsbGVkICE9IDApCisJCXJldHVybjsKKworCWNvbnNp
bml0X2NhbGxlZCA9IDE7CisKKwlidXNfc3BhY2VfaGFuZGxlX3QgYmg7CisJaWYgKGJ1c19zcGFj
ZV9tYXAoJm9tYXBfYTR4X2JzX3RhZywgY29uc2FkZHIsIE9NQVBfQ09NX1NJWkUsIDAsICZiaCkp
CisJCXBhbmljKCJTZXJpYWwgY29uc29sZSBjYW4gbm90IGJlIG1hcHBlZC4iKTsKKworCS8qCisJ
ICogVGhlIFRSTSBzYXlzIHRoZSBtb2RlIHNob3VsZCBiZSBkaXNhYmxlZCB3aGlsZSBkbGwgYW5k
IGRsaCBhcmUKKwkgKiBiZWluZyBjaGFuZ2VkIHNvIHdlIGRpc2FibGUgYmVmb3JlIGF0dGFjaGlu
ZywgdGhlbiBlbmFibGUuCisJICovCisJYnVzX3NwYWNlX3dyaXRlXzEoJm9tYXBfYTR4X2JzX3Rh
ZywgYmgsCisJCQkgIE9NQVBfQ09NX01EUjEsIE9NQVBfQ09NX01EUjFfTU9ERV9ESVNBQkxFKTsK
KworCWlmIChjb21jbmF0dGFjaCgmb21hcF9hNHhfYnNfdGFnLCBjb25zYWRkciwgY29uc3BlZWQs
CisJCQlPTUFQX0NPTV9GUkVRLCBDT01fVFlQRV9OT1JNQUwsIGNvbm1vZGUpKQorCQlwYW5pYygi
U2VyaWFsIGNvbnNvbGUgY2FuIG5vdCBiZSBpbml0aWFsaXplZC4iKTsKKworCWJ1c19zcGFjZV93
cml0ZV8xKCZvbWFwX2E0eF9ic190YWcsIGJoLAorCQkJICBPTUFQX0NPTV9NRFIxLCBPTUFQX0NP
TV9NRFIxX01PREVfVUFSVF8xNlgpOworCisJYnVzX3NwYWNlX3VubWFwKCZvbWFwX2E0eF9ic190
YWcsIGJoLCBPTUFQX0NPTV9TSVpFKTsKK30KKworI2lmZGVmIEtHREIKKyNpZm5kZWYgS0dEQl9E
RVZBRERSCisjZXJyb3IgU3BlY2lmeSB0aGUgYWRkcmVzcyBvZiB0aGUga2dkYiBVQVJUIHdpdGgg
dGhlIEtHREJfREVWQUREUiBvcHRpb24uCisjZW5kaWYKKyNpZm5kZWYgS0dEQl9ERVZSQVRFCisj
ZGVmaW5lIEtHREJfREVWUkFURSAxMTUyMDAKKyNlbmRpZgorCisjaWZuZGVmIEtHREJfREVWTU9E
RQorI2RlZmluZSBLR0RCX0RFVk1PREUgKChUVFlERUZfQ0ZMQUcgJiB+KENTSVpFIHwgQ1NUT1BC
IHwgUEFSRU5CKSkgfCBDUzgpIC8qIDhOMSAqLworI2VuZGlmCitzdGF0aWMgY29uc3QgdmFkZHJf
dCBjb21rZ2RiYWRkciA9IEtHREJfREVWQUREUjsKK3N0YXRpYyBjb25zdCBpbnQgY29ta2dkYnNw
ZWVkID0gS0dEQl9ERVZSQVRFOworc3RhdGljIGNvbnN0IGludCBjb21rZ2RibW9kZSA9IEtHREJf
REVWTU9ERTsKKwordm9pZAorc3RhdGljIGtnZGJfcG9ydF9pbml0KHZvaWQpCit7CisJc3RhdGlj
IGludCBrZ2Ric2luaXRfY2FsbGVkID0gMDsKKworCWlmIChrZ2Ric2luaXRfY2FsbGVkICE9IDAp
CisJCXJldHVybjsKKworCWtnZGJzaW5pdF9jYWxsZWQgPSAxOworCisJYnVzX3NwYWNlX2hhbmRs
ZV90IGJoOworCWlmIChidXNfc3BhY2VfbWFwKCZvbWFwX2E0eF9ic190YWcsIGNvbWtnZGJhZGRy
LCBPTUFQX0NPTV9TSVpFLCAwLCAmYmgpKQorCQlwYW5pYygia2dkYiBwb3J0IGNhbiBub3QgYmUg
bWFwcGVkLiIpOworCisJLyoKKwkgKiBUaGUgVFJNIHNheXMgdGhlIG1vZGUgc2hvdWxkIGJlIGRp
c2FibGVkIHdoaWxlIGRsbCBhbmQgZGxoIGFyZQorCSAqIGJlaW5nIGNoYW5nZWQgc28gd2UgZGlz
YWJsZSBiZWZvcmUgYXR0YWNoaW5nLCB0aGVuIGVuYWJsZS4KKwkgKi8KKwlidXNfc3BhY2Vfd3Jp
dGVfMSgmb21hcF9hNHhfYnNfdGFnLCBiaCwKKwkJCSAgT01BUF9DT01fTURSMSwgT01BUF9DT01f
TURSMV9NT0RFX0RJU0FCTEUpOworCisJaWYgKGNvbV9rZ2RiX2F0dGFjaCgmb21hcF9hNHhfYnNf
dGFnLCBjb21rZ2RiYWRkciwgY29ta2dkYnNwZWVkLAorCQkJT01BUF9DT01fRlJFUSwgQ09NX1RZ
UEVfTk9STUFMLCBjb21rZ2RibW9kZSkpCisJCXBhbmljKCJLR0RCIHVhcnQgY2FuIG5vdCBiZSBp
bml0aWFsaXplZC4iKTsKKworCWJ1c19zcGFjZV93cml0ZV8xKCZvbWFwX2E0eF9ic190YWcsIGJo
LAorCQkJICBPTUFQX0NPTV9NRFIxLCBPTUFQX0NPTV9NRFIxX01PREVfVUFSVF8xNlgpOworCisJ
YnVzX3NwYWNlX3VubWFwKCZvbWFwX2E0eF9ic190YWcsIGJoLCBPTUFQX0NPTV9TSVpFKTsKK30K
KyNlbmRpZgorCitzdGF0aWMgdm9pZAorc2V0dXBfcmVhbF9wYWdlX3RhYmxlcyh2b2lkKQorewor
CS8qCisJICogV2UgbmVlZCB0byBhbGxvY2F0ZSBzb21lIGZpeGVkIHBhZ2UgdGFibGVzIHRvIGdl
dCB0aGUga2VybmVsIGdvaW5nLgorCSAqCisJICogV2UgYXJlIGdvaW5nIHRvIGFsbG9jYXRlIG91
ciBib290c3RyYXAgcGFnZXMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mCisJICogdGhlIGZyZWUgc3Bh
Y2UgdGhhdCB3ZSBqdXN0IGNhbGN1bGF0ZWQuICBXZSBhbGxvY2F0ZSBvbmUgcGFnZQorCSAqIGRp
cmVjdG9yeSBhbmQgYSBudW1iZXIgb2YgcGFnZSB0YWJsZXMgYW5kIHN0b3JlIHRoZSBwaHlzaWNh
bAorCSAqIGFkZHJlc3NlcyBpbiB0aGUga2VybmVsX3B0X3RhYmxlIGFycmF5LgorCSAqCisJICog
VGhlIGtlcm5lbCBwYWdlIGRpcmVjdG9yeSBtdXN0IGJlIG9uIGEgMTZLIGJvdW5kYXJ5LiAgVGhl
IHBhZ2UKKwkgKiB0YWJsZXMgbXVzdCBiZSBvbiA0SyBib3VuZGFyaWVzLiAgV2hhdCB3ZSBkbyBp
cyBhbGxvY2F0ZSB0aGUKKwkgKiBwYWdlIGRpcmVjdG9yeSBvbiB0aGUgZmlyc3QgMTZLIGJvdW5k
YXJ5IHRoYXQgd2UgZW5jb3VudGVyLCBhbmQKKwkgKiB0aGUgcGFnZSB0YWJsZXMgb24gNEsgYm91
bmRhcmllcyBvdGhlcndpc2UuICBTaW5jZSB3ZSBhbGxvY2F0ZQorCSAqIGF0IGxlYXN0IDMgTDIg
cGFnZSB0YWJsZXMsIHdlIGFyZSBndWFyYW50ZWVkIHRvIGVuY291bnRlciBhdAorCSAqIGxlYXN0
IG9uZSAxNksgYWxpZ25lZCByZWdpb24uCisJICovCisKKyNpZmRlZiBWRVJCT1NFX0lOSVRfQVJN
CisJcHJpbnRmKCJBbGxvY2F0aW5nIHBhZ2UgdGFibGVzXG4iKTsKKyNlbmRpZgorCisJLyoKKwkg
KiBEZWZpbmUgYSBtYWNybyB0byBzaW1wbGlmeSBtZW1vcnkgYWxsb2NhdGlvbi4gIEFzIHdlIGFs
bG9jYXRlIHRoZQorCSAqIG1lbW9yeSwgbWFrZSBzdXJlIHRoYXQgd2UgZG9uJ3Qgd2FsayBvdmVy
IG91ciB0ZW1wb3JhcnkgZmlyc3QgbGV2ZWwKKwkgKiB0cmFuc2xhdGlvbiB0YWJsZS4KKwkgKi8K
KyNkZWZpbmUgdmFsbG9jX3BhZ2VzKHZhciwgbnApCQkJCQkJXAorCSh2YXIpLnB2X3BhID0gcGh5
c2ljYWxfZnJlZXN0YXJ0OwkJCQlcCisJcGh5c2ljYWxfZnJlZXN0YXJ0ICs9ICgobnApICogUEFH
RV9TSVpFKTsJCQlcCisJaWYgKHBoeXNpY2FsX2ZyZWVzdGFydCA+IChwaHlzaWNhbF9mcmVlZW5k
IC0gTDFfVEFCTEVfU0laRSkpCVwKKwkJcGFuaWMoImluaXRhcm06IG91dCBvZiBtZW1vcnkiKTsJ
CQlcCisJZnJlZV9wYWdlcyAtPSAobnApOwkJCQkJCVwKKwkodmFyKS5wdl92YSA9IEtFUk5fUEhZ
U1RPVigodmFyKS5wdl9wYSk7CQkJXAorCW1lbXNldCgoY2hhciAqKSh2YXIpLnB2X3ZhLCAwLCAo
KG5wKSAqIFBBR0VfU0laRSkpOworCisJaW50IGxvb3AsIHB0X2luZGV4OworCisJcHRfaW5kZXgg
PSAwOworCWtlcm5lbF9sMXB0LnB2X3BhID0gMDsKKwlrZXJuZWxfbDFwdC5wdl92YSA9IDA7CisJ
Zm9yIChsb29wID0gMDsgbG9vcCA8PSBOVU1fS0VSTkVMX1BUUzsgKytsb29wKSB7CisJCS8qIEFy
ZSB3ZSAxNktCIGFsaWduZWQgZm9yIGFuIEwxID8gKi8KKwkJaWYgKChwaHlzaWNhbF9mcmVlc3Rh
cnQgJiAoTDFfVEFCTEVfU0laRSAtIDEpKSA9PSAwCisJCSAgICAmJiBrZXJuZWxfbDFwdC5wdl9w
YSA9PSAwKSB7CisJCQl2YWxsb2NfcGFnZXMoa2VybmVsX2wxcHQsIEwxX1RBQkxFX1NJWkUgLyBQ
QUdFX1NJWkUpOworCQl9IGVsc2UgeworCQkJdmFsbG9jX3BhZ2VzKGtlcm5lbF9wdF90YWJsZVtw
dF9pbmRleF0sCisJCQkgICAgTDJfVEFCTEVfU0laRSAvIFBBR0VfU0laRSk7CisJCQkrK3B0X2lu
ZGV4OworCQl9CisJfQorCisJLyogVGhpcyBzaG91bGQgbmV2ZXIgYmUgYWJsZSB0byBoYXBwZW4g
YnV0IGJldHRlciBjb25maXJtIHRoYXQuICovCisJaWYgKCFrZXJuZWxfbDFwdC5wdl9wYSB8fCAo
a2VybmVsX2wxcHQucHZfcGEgJiAoTDFfVEFCTEVfU0laRS0xKSkgIT0gMCkKKwkJcGFuaWMoImlu
aXRhcm06IEZhaWxlZCB0byBhbGlnbiB0aGUga2VybmVsIHBhZ2UgZGlyZWN0b3J5Iik7CisKKwkv
KgorCSAqIEFsbG9jYXRlIGEgcGFnZSBmb3IgdGhlIHN5c3RlbSBwYWdlIG1hcHBlZCB0byBWMHgw
MDAwMDAwMAorCSAqIFRoaXMgcGFnZSB3aWxsIGp1c3QgY29udGFpbiB0aGUgc3lzdGVtIHZlY3Rv
cnMgYW5kIGNhbiBiZQorCSAqIHNoYXJlZCBieSBhbGwgcHJvY2Vzc2VzLgorCSAqLworCXZhbGxv
Y19wYWdlcyhzeXN0ZW1wYWdlLCAxKTsKKwlzeXN0ZW1wYWdlLnB2X3ZhID0gMHgwMDAwMDAwMDsK
KworCS8qIEFsbG9jYXRlIHN0YWNrcyBmb3IgYWxsIG1vZGVzICovCisJdmFsbG9jX3BhZ2VzKGly
cXN0YWNrLCBJUlFfU1RBQ0tfU0laRSk7CisJdmFsbG9jX3BhZ2VzKGFidHN0YWNrLCBBQlRfU1RB
Q0tfU0laRSk7CisJdmFsbG9jX3BhZ2VzKHVuZHN0YWNrLCBVTkRfU1RBQ0tfU0laRSk7CisJdmFs
bG9jX3BhZ2VzKGtlcm5lbHN0YWNrLCBVUEFHRVMpOworCisJLyogQWxsb2NhdGUgdGhlIG1lc3Nh
Z2UgYnVmZmVyLiAqLworCXB2X2FkZHJfdCBtc2didWY7CisJaW50IG1zZ2J1Zl9wZ3MgPSByb3Vu
ZF9wYWdlKE1TR0JVRlNJWkUpIC8gUEFHRV9TSVpFOworCXZhbGxvY19wYWdlcyhtc2didWYsIG1z
Z2J1Zl9wZ3MpOworCW1zZ2J1ZnBoeXMgPSBtc2didWYucHZfcGE7CisKKwkvKgorCSAqIE9rIHdl
IGhhdmUgYWxsb2NhdGVkIHBoeXNpY2FsIHBhZ2VzIGZvciB0aGUgcHJpbWFyeSBrZXJuZWwKKwkg
KiBwYWdlIHRhYmxlcworCSAqLworCisjaWZkZWYgVkVSQk9TRV9JTklUX0FSTQorCXByaW50Zigi
Q3JlYXRpbmcgTDEgcGFnZSB0YWJsZSBhdCAweCUwOGx4XG4iLCBrZXJuZWxfbDFwdC5wdl9wYSk7
CisjZW5kaWYKKworCS8qCisJICogTm93IHdlIHN0YXJ0IGNvbnN0cnVjdGlvbiBvZiB0aGUgTDEg
cGFnZSB0YWJsZQorCSAqIFdlIHN0YXJ0IGJ5IG1hcHBpbmcgdGhlIEwyIHBhZ2UgdGFibGVzIGlu
dG8gdGhlIEwxLgorCSAqIFRoaXMgbWVhbnMgdGhhdCB3ZSBjYW4gcmVwbGFjZSBMMSBtYXBwaW5n
cyBsYXRlciBvbiBpZiBuZWNlc3NhcnkKKwkgKi8KKwl2YWRkcl90IGwxX3ZhID0ga2VybmVsX2wx
cHQucHZfdmE7CisJcGFkZHJfdCBsMV9wYSA9IGtlcm5lbF9sMXB0LnB2X3BhOworCisJLyogTWFw
IHRoZSBMMiBwYWdlcyB0YWJsZXMgaW4gdGhlIEwxIHBhZ2UgdGFibGUgKi8KKwlwbWFwX2xpbmtf
bDJwdChsMV92YSwgMHgwMDAwMDAwMCwgJmtlcm5lbF9wdF90YWJsZVtLRVJORUxfUFRfU1lTXSk7
CisJZm9yIChsb29wID0gMDsgbG9vcCA8IEtFUk5FTF9QVF9LRVJORUxfTlVNOyBsb29wKyspCisJ
CXBtYXBfbGlua19sMnB0KGwxX3ZhLCBLRVJORUxfQkFTRSArIGxvb3AgKiAweDAwNDAwMDAwLAor
CQkJICAgICAgICZrZXJuZWxfcHRfdGFibGVbS0VSTkVMX1BUX0tFUk5FTCArIGxvb3BdKTsKKwlm
b3IgKGxvb3AgPSAwOyBsb29wIDwgS0VSTkVMX1BUX1ZNREFUQV9OVU07IGxvb3ArKykKKwkJcG1h
cF9saW5rX2wycHQobDFfdmEsIEtFUk5FTF9WTV9CQVNFICsgbG9vcCAqIDB4MDA0MDAwMDAsCisJ
CQkgICAgICAgJmtlcm5lbF9wdF90YWJsZVtLRVJORUxfUFRfVk1EQVRBICsgbG9vcF0pOworCisJ
LyogdXBkYXRlIHRoZSB0b3Agb2YgdGhlIGtlcm5lbCBWTSAqLworCXBtYXBfY3VybWF4a3ZhZGRy
ID0KKwkgICAgS0VSTkVMX1ZNX0JBU0UgKyAoS0VSTkVMX1BUX1ZNREFUQV9OVU0gKiAweDAwNDAw
MDAwKTsKKworI2lmZGVmIFZFUkJPU0VfSU5JVF9BUk0KKwlwcmludGYoIk1hcHBpbmcga2VybmVs
XG4iKTsKKyNlbmRpZgorCisJLyogTm93IHdlIGZpbGwgaW4gdGhlIEwyIHBhZ2V0YWJsZSBmb3Ig
dGhlIGtlcm5lbCBzdGF0aWMgY29kZS9kYXRhICovCisJc2l6ZV90IHRleHRzaXplID0gcm91bmRf
cGFnZSgodWludHB0cl90KSBldGV4dCAtIEtFUk5FTF9CQVNFKTsKKwlzaXplX3QgdG90YWxzaXpl
ID0gcm91bmRfcGFnZSgodWludHB0cl90KSBfZW5kIC0gS0VSTkVMX0JBU0UpOworCXVfaW50IG9m
ZnNldCA9IDA7CS8qIG9mZnNldCBvZiBrZXJuZWwgaW4gUkFNICovCisKKwkvKiBNYXAgdGV4dCBz
ZWN0aW9uIHJlYWQtb25seS4gKi8KKwlvZmZzZXQgKz0gcG1hcF9tYXBfY2h1bmsobDFfdmEsIEtF
Uk5FTF9CQVNFICsgb2Zmc2V0LAorCQkJCSBwaHlzaWNhbF9zdGFydCArIG9mZnNldCwgdGV4dHNp
emUsCisJCQkJIFZNX1BST1RfUkVBRCwgUFRFX0NBQ0hFKTsKKwkvKiBNYXAgZGF0YSBhbmQgYnNz
IHNlY3Rpb25zIHJlYWQtd3JpdGUuICovCisJb2Zmc2V0ICs9IHBtYXBfbWFwX2NodW5rKGwxX3Zh
LCBLRVJORUxfQkFTRSArIG9mZnNldCwKKwkJCQkgcGh5c2ljYWxfc3RhcnQgKyBvZmZzZXQsIHRv
dGFsc2l6ZSAtIHRleHRzaXplLAorCQkJCSBWTV9QUk9UX1JFQUR8Vk1fUFJPVF9XUklURSwgUFRF
X0NBQ0hFKTsKKworI2lmZGVmIFZFUkJPU0VfSU5JVF9BUk0KKwlwcmludGYoIkNvbnN0cnVjdGlu
ZyBMMiBwYWdlIHRhYmxlc1xuIik7CisjZW5kaWYKKworCS8qIE1hcCB0aGUgc3RhY2sgcGFnZXMg
Ki8KKwlwbWFwX21hcF9jaHVuayhsMV92YSwgaXJxc3RhY2sucHZfdmEsIGlycXN0YWNrLnB2X3Bh
LAorCSAgICBJUlFfU1RBQ0tfU0laRSAqIFBBR0VfU0laRSwgVk1fUFJPVF9SRUFEfFZNX1BST1Rf
V1JJVEUsIFBURV9DQUNIRSk7CisJcG1hcF9tYXBfY2h1bmsobDFfdmEsIGFidHN0YWNrLnB2X3Zh
LCBhYnRzdGFjay5wdl9wYSwKKwkgICAgQUJUX1NUQUNLX1NJWkUgKiBQQUdFX1NJWkUsIFZNX1BS
T1RfUkVBRHxWTV9QUk9UX1dSSVRFLCBQVEVfQ0FDSEUpOworCXBtYXBfbWFwX2NodW5rKGwxX3Zh
LCB1bmRzdGFjay5wdl92YSwgdW5kc3RhY2sucHZfcGEsCisJICAgIFVORF9TVEFDS19TSVpFICog
UEFHRV9TSVpFLCBWTV9QUk9UX1JFQUR8Vk1fUFJPVF9XUklURSwgUFRFX0NBQ0hFKTsKKwlwbWFw
X21hcF9jaHVuayhsMV92YSwga2VybmVsc3RhY2sucHZfdmEsIGtlcm5lbHN0YWNrLnB2X3BhLAor
CSAgICBVUEFHRVMgKiBQQUdFX1NJWkUsIFZNX1BST1RfUkVBRCB8IFZNX1BST1RfV1JJVEUsIFBU
RV9DQUNIRSk7CisKKwlwbWFwX21hcF9jaHVuayhsMV92YSwga2VybmVsX2wxcHQucHZfdmEsIGtl
cm5lbF9sMXB0LnB2X3BhLAorCSAgICBMMV9UQUJMRV9TSVpFLCBWTV9QUk9UX1JFQUQgfCBWTV9Q
Uk9UX1dSSVRFLCBQVEVfUEFHRVRBQkxFKTsKKworCWZvciAobG9vcCA9IDA7IGxvb3AgPCBOVU1f
S0VSTkVMX1BUUzsgKytsb29wKSB7CisJCXBtYXBfbWFwX2NodW5rKGwxX3ZhLCBrZXJuZWxfcHRf
dGFibGVbbG9vcF0ucHZfdmEsCisJCQkgICAgICAga2VybmVsX3B0X3RhYmxlW2xvb3BdLnB2X3Bh
LCBMMl9UQUJMRV9TSVpFLAorCQkJICAgICAgIFZNX1BST1RfUkVBRHxWTV9QUk9UX1dSSVRFLCBQ
VEVfUEFHRVRBQkxFKTsKKwl9CisKKwkvKiBNYXAgdGhlIHZlY3RvciBwYWdlLiAqLworCXBtYXBf
bWFwX2VudHJ5KGwxX3ZhLCBBUk1fVkVDVE9SU19MT1csIHN5c3RlbXBhZ2UucHZfcGEsCisJCSAg
ICAgICBWTV9QUk9UX1JFQUR8Vk1fUFJPVF9XUklURSwgUFRFX0NBQ0hFKTsKKworCS8qCisJICog
TWFwIGludGVncmF0ZWQgcGVyaXBoZXJhbHMgYXQgc2FtZSBhZGRyZXNzIGluIGZpcnN0IGxldmVs
IHBhZ2UKKwkgKiB0YWJsZSBzbyB0aGF0IHdlIGNhbiBjb250aW51ZSB0byB1c2UgY29uc29sZS4K
KwkgKi8KKwlwbWFwX2Rldm1hcF9ib290c3RyYXAobDFfdmEsIGRldm1hcCk7CisKKworI2lmZGVm
IFZFUkJPU0VfSU5JVF9BUk0KKwkvKiBUZWxsIHRoZSB1c2VyIGFib3V0IHdoZXJlIGFsbCB0aGUg
Yml0cyBhbmQgcGllY2VzIGxpdmUuICovCisJcHJpbnRmKCIlMjJzICAgICAgIFBoeXNpY2FsICAg
ICAgICAgICAgICBWaXJ0dWFsICAgICAgICBOdW1cbiIsICIgIik7CisJcHJpbnRmKCIlMjJzIFN0
YXJ0aW5nICAgIEVuZGluZyAgICBTdGFydGluZyAgICBFbmRpbmcgICBQYWdlc1xuIiwgIiAiKTsK
KworCXN0YXRpYyBjb25zdCBjaGFyIG1lbV9mbXRbXSA9CisJICAgICIlMjBzOiAweCUwOGx4IDB4
JTA4bHggMHglMDhseCAweCUwOGx4ICVkXG4iOworCXN0YXRpYyBjb25zdCBjaGFyIG1lbV9mbXRf
bm92W10gPQorCSAgICAiJTIwczogMHglMDhseCAweCUwOGx4ICAgICAgICAgICAgICAgICAgICAg
ICAlZFxuIjsKKworCXByaW50ZihtZW1fZm10LCAiU0RSQU0iLCBwaHlzaWNhbF9zdGFydCwgcGh5
c2ljYWxfZW5kLTEsCisJICAgIEtFUk5fUEhZU1RPVihwaHlzaWNhbF9zdGFydCksIEtFUk5fUEhZ
U1RPVihwaHlzaWNhbF9lbmQtMSksCisJICAgIHBoeXNtZW0pOworCXByaW50ZihtZW1fZm10LCAi
dGV4dCBzZWN0aW9uIiwKKwkgICAgICAgS0VSTl9WVE9QSFlTKEtFUk5FTF9CQVNFKSwgS0VSTl9W
VE9QSFlTKGV0ZXh0LTEpLAorCSAgICAgICAodmFkZHJfdClLRVJORUxfQkFTRSwgKHZhZGRyX3Qp
ZXRleHQtMSwKKwkgICAgICAgKGludCkodGV4dHNpemUgLyBQQUdFX1NJWkUpKTsKKwlwcmludGYo
bWVtX2ZtdCwgImRhdGEgc2VjdGlvbiIsCisJICAgICAgIEtFUk5fVlRPUEhZUyhfX2RhdGFfc3Rh
cnQpLCBLRVJOX1ZUT1BIWVMoX2VkYXRhKSwKKwkgICAgICAgKHZhZGRyX3QpX19kYXRhX3N0YXJ0
LCAodmFkZHJfdClfZWRhdGEsCisJICAgICAgIChpbnQpKChyb3VuZF9wYWdlKCh2YWRkcl90KV9l
ZGF0YSkKKwkJICAgICAgLSB0cnVuY19wYWdlKCh2YWRkcl90KV9fZGF0YV9zdGFydCkpIC8gUEFH
RV9TSVpFKSk7CisJcHJpbnRmKG1lbV9mbXQsICJic3Mgc2VjdGlvbiIsCisJICAgICAgIEtFUk5f
VlRPUEhZUyhfX2Jzc19zdGFydCksIEtFUk5fVlRPUEhZUyhfX2Jzc19lbmRfXyksCisJICAgICAg
ICh2YWRkcl90KV9fYnNzX3N0YXJ0LCAodmFkZHJfdClfX2Jzc19lbmRfXywKKwkgICAgICAgKGlu
dCkoKHJvdW5kX3BhZ2UoKHZhZGRyX3QpX19ic3NfZW5kX18pCisJCSAgICAgIC0gdHJ1bmNfcGFn
ZSgodmFkZHJfdClfX2Jzc19zdGFydCkpIC8gUEFHRV9TSVpFKSk7CisJcHJpbnRmKG1lbV9mbXQs
ICJMMSBwYWdlIGRpcmVjdG9yeSIsCisJICAgIGtlcm5lbF9sMXB0LnB2X3BhLCBrZXJuZWxfbDFw
dC5wdl9wYSArIEwxX1RBQkxFX1NJWkUgLSAxLAorCSAgICBrZXJuZWxfbDFwdC5wdl92YSwga2Vy
bmVsX2wxcHQucHZfdmEgKyBMMV9UQUJMRV9TSVpFIC0gMSwKKwkgICAgTDFfVEFCTEVfU0laRSAv
IFBBR0VfU0laRSk7CisJcHJpbnRmKG1lbV9mbXQsICJFeGNlcHRpb24gVmVjdG9ycyIsCisJICAg
IHN5c3RlbXBhZ2UucHZfcGEsIHN5c3RlbXBhZ2UucHZfcGEgKyBQQUdFX1NJWkUgLSAxLAorCSAg
ICAodmFkZHJfdClBUk1fVkVDVE9SU19MT1csICh2YWRkcl90KUFSTV9WRUNUT1JTX0xPVyArIFBB
R0VfU0laRSAtIDEsCisJICAgIDEpOworCXByaW50ZihtZW1fZm10LCAiSVJRIHN0YWNrIiwKKwkg
ICAgaXJxc3RhY2sucHZfcGEsIGlycXN0YWNrLnB2X3BhICsgKElSUV9TVEFDS19TSVpFICogUEFH
RV9TSVpFKSAtIDEsCisJICAgIGlycXN0YWNrLnB2X3ZhLCBpcnFzdGFjay5wdl92YSArIChJUlFf
U1RBQ0tfU0laRSAqIFBBR0VfU0laRSkgLSAxLAorCSAgICBJUlFfU1RBQ0tfU0laRSk7CisJcHJp
bnRmKG1lbV9mbXQsICJBQlQgc3RhY2siLAorCSAgICBhYnRzdGFjay5wdl9wYSwgYWJ0c3RhY2su
cHZfcGEgKyAoQUJUX1NUQUNLX1NJWkUgKiBQQUdFX1NJWkUpIC0gMSwKKwkgICAgYWJ0c3RhY2su
cHZfdmEsIGFidHN0YWNrLnB2X3ZhICsgKEFCVF9TVEFDS19TSVpFICogUEFHRV9TSVpFKSAtIDEs
CisJICAgIEFCVF9TVEFDS19TSVpFKTsKKwlwcmludGYobWVtX2ZtdCwgIlVORCBzdGFjayIsCisJ
ICAgIHVuZHN0YWNrLnB2X3BhLCB1bmRzdGFjay5wdl9wYSArIChVTkRfU1RBQ0tfU0laRSAqIFBB
R0VfU0laRSkgLSAxLAorCSAgICB1bmRzdGFjay5wdl92YSwgdW5kc3RhY2sucHZfdmEgKyAoVU5E
X1NUQUNLX1NJWkUgKiBQQUdFX1NJWkUpIC0gMSwKKwkgICAgVU5EX1NUQUNLX1NJWkUpOworCXBy
aW50ZihtZW1fZm10LCAiU1ZDIHN0YWNrIiwKKwkgICAga2VybmVsc3RhY2sucHZfcGEsIGtlcm5l
bHN0YWNrLnB2X3BhICsgKFVQQUdFUyAqIFBBR0VfU0laRSkgLSAxLAorCSAgICBrZXJuZWxzdGFj
ay5wdl92YSwga2VybmVsc3RhY2sucHZfdmEgKyAoVVBBR0VTICogUEFHRV9TSVpFKSAtIDEsCisJ
ICAgIFVQQUdFUyk7CisJcHJpbnRmKG1lbV9mbXRfbm92LCAiTWVzc2FnZSBCdWZmZXIiLAorCSAg
ICBtc2didWZwaHlzLCBtc2didWZwaHlzICsgbXNnYnVmX3BncyAqIFBBR0VfU0laRSAtIDEsIG1z
Z2J1Zl9wZ3MpOworCXByaW50ZihtZW1fZm10LCAiRnJlZSBNZW1vcnkiLCBwaHlzaWNhbF9mcmVl
c3RhcnQsIHBoeXNpY2FsX2ZyZWVlbmQtMSwKKwkgICAgS0VSTl9QSFlTVE9WKHBoeXNpY2FsX2Zy
ZWVzdGFydCksIEtFUk5fUEhZU1RPVihwaHlzaWNhbF9mcmVlZW5kLTEpLAorCSAgICBmcmVlX3Bh
Z2VzKTsKKyNlbmRpZgorCisJLyoKKwkgKiBOb3cgd2UgaGF2ZSB0aGUgcmVhbCBwYWdlIHRhYmxl
cyBpbiBwbGFjZSBzbyB3ZSBjYW4gc3dpdGNoIHRvIHRoZW0uCisJICogT25jZSB0aGlzIGlzIGRv
bmUgd2Ugd2lsbCBiZSBydW5uaW5nIHdpdGggdGhlIFJFQUwga2VybmVsIHBhZ2UKKwkgKiB0YWJs
ZXMuCisJICovCisKKwkvKiBTd2l0Y2ggdGFibGVzICovCisjaWZkZWYgVkVSQk9TRV9JTklUX0FS
TQorCXByaW50Zigic3dpdGNoaW5nIHRvIG5ldyBMMSBwYWdlIHRhYmxlICBAJSNseC4uLiIsIGwx
X3BhKTsKKyNlbmRpZgorCisJY3B1X2RvbWFpbnMoKERPTUFJTl9DTElFTlQgPDwgKFBNQVBfRE9N
QUlOX0tFUk5FTCoyKSkgfCBET01BSU5fQ0xJRU5UKTsKKwlzZXR0dGIobDFfcGEpOworCWNwdV90
bGJfZmx1c2hJRCgpOworCWNwdV9kb21haW5zKERPTUFJTl9DTElFTlQgPDwgKFBNQVBfRE9NQUlO
X0tFUk5FTCoyKSk7CisKK30K
--=-=-=--