Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 20 May 2020 11:04:13 +0000
From:      "whu (Wei Hu)" <phabric-noreply@FreeBSD.org>
To:        freebsd-net@freebsd.org
Subject:   [Differential] D24061: Hyper-V socket implementation for FreeBSD guest
Message-ID:  <31600b32a6cfba2ec75555d0be6000a9@localhost.localdomain>
In-Reply-To: <differential-rev-PHID-DREV-jw7sxemgfjxsdvkov4cn-req@reviews.freebsd.org>
References:  <differential-rev-PHID-DREV-jw7sxemgfjxsdvkov4cn-req@reviews.freebsd.org>

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

--b1_31600b32a6cfba2ec75555d0be6000a9
Content-Type: text/plain; charset = "utf-8"
Content-Transfer-Encoding: base64

VGhpcyByZXZpc2lvbiB3YXMgbm90IGFjY2VwdGVkIHdoZW4gaXQgbGFuZGVkOyBpdCBsYW5kZWQg
aW4gc3RhdGUgIk5lZWRzIFJldmlldyIuClRoaXMgcmV2aXNpb24gd2FzIGF1dG9tYXRpY2FsbHkg
dXBkYXRlZCB0byByZWZsZWN0IHRoZSBjb21taXR0ZWQgY2hhbmdlcy4KQ2xvc2VkIGJ5IGNvbW1p
dCByUzM2MTI3NTogSHlwZXJWIHNvY2tldCBpbXBsZW1lbnRhdGlvbiBmb3IgRnJlZUJTRCAoYXV0
aG9yZWQgYnkgd2h1KS4KCkNIQU5HRUQgUFJJT1IgVE8gQ09NTUlUCiAgaHR0cHM6Ly9yZXZpZXdz
LmZyZWVic2Qub3JnL0QyNDA2MT92cz03MDU5NSZpZD03MjAyMSN0b2MKClJFUE9TSVRPUlkKICBy
UyBGcmVlQlNEIHNyYyByZXBvc2l0b3J5CgpDSEFOR0VTIFNJTkNFIExBU1QgVVBEQVRFCiAgaHR0
cHM6Ly9yZXZpZXdzLmZyZWVic2Qub3JnL0QyNDA2MT92cz03MDU5NSZpZD03MjAyMQoKQ0hBTkdF
UyBTSU5DRSBMQVNUIEFDVElPTgogIGh0dHBzOi8vcmV2aWV3cy5mcmVlYnNkLm9yZy9EMjQwNjEv
bmV3LwoKUkVWSVNJT04gREVUQUlMCiAgaHR0cHM6Ly9yZXZpZXdzLmZyZWVic2Qub3JnL0QyNDA2
MQoKQUZGRUNURUQgRklMRVMKICBoZWFkL3N5cy9jb25mL2ZpbGVzLng4NgogIGhlYWQvc3lzL2Rl
di9oeXBlcnYvaHZzb2NrL2h2X3NvY2suYwogIGhlYWQvc3lzL2Rldi9oeXBlcnYvaHZzb2NrL2h2
X3NvY2suaAogIGhlYWQvc3lzL2Rldi9oeXBlcnYvaW5jbHVkZS92bWJ1cy5oCiAgaGVhZC9zeXMv
ZGV2L2h5cGVydi92bWJ1cy92bWJ1cy5jCiAgaGVhZC9zeXMvZGV2L2h5cGVydi92bWJ1cy92bWJ1
c19ici5jCiAgaGVhZC9zeXMvZGV2L2h5cGVydi92bWJ1cy92bWJ1c19icnZhci5oCiAgaGVhZC9z
eXMvZGV2L2h5cGVydi92bWJ1cy92bWJ1c19jaGFuLmMKICBoZWFkL3N5cy9kZXYvaHlwZXJ2L3Zt
YnVzL3ZtYnVzX2NoYW52YXIuaAogIGhlYWQvc3lzL2Rldi9oeXBlcnYvdm1idXMvdm1idXNfcmVn
LmgKICBoZWFkL3N5cy9tb2R1bGVzL2h5cGVydi9NYWtlZmlsZQogIGhlYWQvc3lzL21vZHVsZXMv
aHlwZXJ2L2h2c29jay9NYWtlZmlsZQogIGhlYWQvc3lzL3N5cy9zb2NrZXQuaAoKRU1BSUwgUFJF
RkVSRU5DRVMKICBodHRwczovL3Jldmlld3MuZnJlZWJzZC5vcmcvc2V0dGluZ3MvcGFuZWwvZW1h
aWxwcmVmZXJlbmNlcy8KClRvOiB3aHUsIGRlY3VpX21pY3Jvc29mdC5jb20sIGZyZWVic2QtbmV0
LWxpc3QKQ2M6IGdiZXJnbGluZ19nbWFpbC5jb20sIGFlLCBncmVnX3VucmVsZW50aW5nLnRlY2hu
b2xvZ3ksIGltcAo=

--b1_31600b32a6cfba2ec75555d0be6000a9
Content-Type: text/x-patch; charset=utf-8; name="D24061.72021.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="D24061.72021.patch"

ZGlmZiAtLWdpdCBhL2hlYWQvc3lzL3N5cy9zb2NrZXQuaCBiL2hlYWQvc3lzL3N5cy9zb2NrZXQu
aAotLS0gYS9oZWFkL3N5cy9zeXMvc29ja2V0LmgKKysrIGIvaGVhZC9zeXMvc3lzL3NvY2tldC5o
CkBAIC0yNjUsNyArMjY1LDggQEAKICNkZWZpbmUJQUZfSUVFRTgwMjExCTM3CQkvKiBJRUVFIDgw
Mi4xMSBwcm90b2NvbCAqLwogI2RlZmluZQlBRl9JTkVUX1NEUAk0MAkJLyogT0ZFRCBTb2NrZXQg
RGlyZWN0IFByb3RvY29sIGlwdjQgKi8KICNkZWZpbmUJQUZfSU5FVDZfU0RQCTQyCQkvKiBPRkVE
IFNvY2tldCBEaXJlY3QgUHJvdG9jb2wgaXB2NiAqLwotI2RlZmluZQlBRl9NQVgJCTQyCisjZGVm
aW5lCUFGX0hZUEVSVgk0MwkJLyogSHlwZXJWIHNvY2tldHMgKi8KKyNkZWZpbmUJQUZfTUFYCQk0
MwogLyoKICAqIFdoZW4gYWxsb2NhdGluZyBhIG5ldyBBRl8gY29uc3RhbnQsIHBsZWFzZSBvbmx5
IGFsbG9jYXRlCiAgKiBldmVuIG51bWJlcmVkIGNvbnN0YW50cyBmb3IgRnJlZUJTRCB1bnRpbCAx
MzQgYXMgb2RkIG51bWJlcmVkIEFGXwpAQCAtMjczLDcgKzI3NCw2IEBACiAgKi8KICNkZWZpbmUg
QUZfVkVORE9SMDAgMzkKICNkZWZpbmUgQUZfVkVORE9SMDEgNDEKLSNkZWZpbmUgQUZfVkVORE9S
MDIgNDMKICNkZWZpbmUgQUZfVkVORE9SMDMgNDUKICNkZWZpbmUgQUZfVkVORE9SMDQgNDcKICNk
ZWZpbmUgQUZfVkVORE9SMDUgNDkKZGlmZiAtLWdpdCBhL2hlYWQvc3lzL21vZHVsZXMvaHlwZXJ2
L2h2c29jay9NYWtlZmlsZSBiL2hlYWQvc3lzL21vZHVsZXMvaHlwZXJ2L2h2c29jay9NYWtlZmls
ZQotLS0gYS9oZWFkL3N5cy9tb2R1bGVzL2h5cGVydi9odnNvY2svTWFrZWZpbGUKKysrIGIvaGVh
ZC9zeXMvbW9kdWxlcy9oeXBlcnYvaHZzb2NrL01ha2VmaWxlCkBAIC0wLDAgKzEsMTMgQEAKKyMg
JEZyZWVCU0QkCisKKy5QQVRIOiAgJHtTUkNUT1B9L3N5cy9kZXYvaHlwZXJ2L2h2c29jaworCitL
TU9EPQlodl9zb2NrCitTUkNTPQlodl9zb2NrLmMKK1NSQ1MrPQlodl9zb2NrLmgKKworQ0ZMQUdT
Kz0gLUkke1NSQ1RPUH0vc3lzL2Rldi9oeXBlcnYvaW5jbHVkZQlcCisJIC1JJHtTUkNUT1B9L3N5
cy9kZXYvaHlwZXJ2L3ZtYnVzCVwKKwkgLUkke1NSQ1RPUH0vc3lzL2Rldi9oeXBlcnYvaHZzb2Nr
CisKKy5pbmNsdWRlIDxic2Qua21vZC5taz4KZGlmZiAtLWdpdCBhL2hlYWQvc3lzL21vZHVsZXMv
aHlwZXJ2L01ha2VmaWxlIGIvaGVhZC9zeXMvbW9kdWxlcy9oeXBlcnYvTWFrZWZpbGUKLS0tIGEv
aGVhZC9zeXMvbW9kdWxlcy9oeXBlcnYvTWFrZWZpbGUKKysrIGIvaGVhZC9zeXMvbW9kdWxlcy9o
eXBlcnYvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiAjICRGcmVlQlNEJAogCi1TVUJESVIgPSB2
bWJ1cyBuZXR2c2Mgc3RvcnZzYyB1dGlsaXRpZXMKK1NVQkRJUiA9IHZtYnVzIG5ldHZzYyBzdG9y
dnNjIHV0aWxpdGllcyBodnNvY2sKIAogLmluY2x1ZGUgPGJzZC5zdWJkaXIubWs+CmRpZmYgLS1n
aXQgYS9oZWFkL3N5cy9kZXYvaHlwZXJ2L3ZtYnVzL3ZtYnVzX3JlZy5oIGIvaGVhZC9zeXMvZGV2
L2h5cGVydi92bWJ1cy92bWJ1c19yZWcuaAotLS0gYS9oZWFkL3N5cy9kZXYvaHlwZXJ2L3ZtYnVz
L3ZtYnVzX3JlZy5oCisrKyBiL2hlYWQvc3lzL2Rldi9oeXBlcnYvdm1idXMvdm1idXNfcmVnLmgK
QEAgLTEyNyw3ICsxMjcsNTQgQEAKIAkgKi8KIAl2b2xhdGlsZSB1aW50MzJfdAlicl9pbWFzazsK
IAotCXVpbnQ4X3QJCQlicl9yc3ZkWzQwODRdOworCS8qCisJICogV1MyMDEyL1dpbjggYW5kIGxh
dGVyIHZlcnNpb25zIG9mIEh5cGVyLVYgaW1wbGVtZW50IGludGVycnVwdAorCSAqIGRyaXZlbiBm
bG93IG1hbmFnZW1lbnQuIFRoZSBmZWF0dXJlIGJpdCBmZWF0X3BlbmRpbmdfc25kX3N6CisJICog
aXMgc2V0IGJ5IHRoZSBob3N0IG9uIHRoZSBob3N0LT5ndWVzdCBidWZmZXIgcmluZywgYW5kIGJ5
IHRoZQorCSAqIGd1ZXN0IG9uIHRoZSBndWVzdC0+aG9zdCBidWZmZXIgcmluZy4KKwkgKgorCSAq
IFRoZSBtZWFuaW5nIG9mIHRoZSBmZWF0dXJlIGJpdCBpcyBhIGJpdCBjb21wbGV4IGluIHRoYXQg
aXQgaGFzCisJICogc2VtYW50aWNzIHRoYXQgYXBwbHkgdG8gYm90aCBidWZmZXIgcmluZ3MuICBJ
ZiB0aGUgZ3Vlc3Qgc2V0cworCSAqIHRoZSBmZWF0dXJlIGJpdCBpbiB0aGUgZ3Vlc3QtPmhvc3Qg
YnVmZmVyIHJpbmcsIHRoZSBndWVzdCBpcworCSAqIHRlbGxpbmcgdGhlIGhvc3QgdGhhdDoKKwkg
KiAxKSBJdCB3aWxsIHNldCB0aGUgYnJfcGVuZGluZ19zbmRfc3ogZmllbGQgaW4gdGhlIGd1ZXN0
LT5ob3N0IGJ1ZmZlcgorCSAqICAgIHJpbmcgd2hlbiBpdCBpcyB3YWl0aW5nIGZvciBzcGFjZSB0
byBiZWNvbWUgYXZhaWxhYmxlLCBhbmQKKwkgKiAyKSBJdCB3aWxsIHJlYWQgdGhlIHBlbmRpbmdf
c2VuZF9zeiBmaWVsZCBpbiB0aGUgaG9zdC0+Z3Vlc3QKKwkgKiAgICByaW5nIGJ1ZmZlciBhbmQg
aW50ZXJydXB0IHRoZSBob3N0IHdoZW4gaXQgZnJlZXMgZW5vdWdoIHNwYWNlCisJICoKKwkgKiBT
aW1pbGFybHksIGlmIHRoZSBob3N0IHNldHMgdGhlIGZlYXR1cmUgYml0IGluIHRoZSBob3N0LT5n
dWVzdAorCSAqIHJpbmcgYnVmZmVyLCB0aGUgaG9zdCBpcyB0ZWxsaW5nIHRoZSBndWVzdCB0aGF0
OgorCSAqIDEpIEl0IHdpbGwgc2V0IHRoZSBwZW5kaW5nX3NlbmRfc3ogZmllbGQgaW4gdGhlIGhv
c3QtPmd1ZXN0IHJpbmcKKwkgKiAgICBidWZmZXIgd2hlbiBpdCBpcyB3YWl0aW5nIGZvciBzcGFj
ZSB0byBiZWNvbWUgYXZhaWxhYmxlLCBhbmQKKwkgKiAyKSBJdCB3aWxsIHJlYWQgdGhlIHBlbmRp
bmdfc2VuZF9zeiBmaWVsZCBpbiB0aGUgZ3Vlc3QtPmhvc3QKKwkgKiAgICByaW5nIGJ1ZmZlciBh
bmQgaW50ZXJydXB0IHRoZSBndWVzdCB3aGVuIGl0IGZyZWVzIGVub3VnaCBzcGFjZQorCSAqCisJ
ICogSWYgZWl0aGVyIHRoZSBndWVzdCBvciBob3N0IGRvZXMgbm90IHNldCB0aGUgZmVhdHVyZSBi
aXQgdGhhdCBpdAorCSAqIG93bnMsIHRoYXQgZ3Vlc3Qgb3IgaG9zdCBtdXN0IGRvIHBvbGxpbmcg
aWYgaXQgZW5jb3VudGVycyBhIGZ1bGwKKwkgKiByaW5nIGJ1ZmZlciwgYW5kIG5vdCBzaWduYWwg
dGhlIG90aGVyIGVuZCB3aXRoIGFuIGludGVycnVwdC4KKwkgKi8KKwl2b2xhdGlsZSB1aW50MzJf
dAlicl9wZW5kaW5nX3NuZF9zejsKKwl1aW50MzJfdAkJYnJfcnN2ZDFbMTJdOworCXVuaW9uCXsK
KwkJc3RydWN0IHsKKwkJCXVpbnQzMl90IGZlYXRfcGVuZGluZ19zbmRfc3o6MTsKKwkJfTsKKwkJ
dWludDMyX3QgdmFsdWU7CisJfSBicl9mZWF0dXJlX2JpdHM7CisKKwkvKiBQYWRkaW5nIHRvIFBB
R0VfU0laRSAqLworCXVpbnQ4X3QJCQlicl9yc3ZkMls0MDIwXTsKKworCS8qCisJICogVG90YWwg
Z3Vlc3QgdG8gaG9zdCBpbnRlcnJ1cHQgY291bnQKKwkgKiAtIEZvciByeCByaW5nLCB0aGlzIGNv
dW50cyB0aGUgZ3Vlc3Qgc2lnbmFsaW5nIGhvc3Qgd2hlbiB0aGlzIHJ4CisJICogcmluZyBjaGFu
Z2luZyBmcm9tIGZ1bGwgdG8gbm90IGZ1bGwuCisJICoKKwkgKiAtIEZvciB0eCByaW5nLCB0aGlz
IGNvdW50cyB0aGUgZ3Vlc3Qgc2lnbmFsaW5nIGhvc3Qgd2hlbiB0aGlzIHR4CisJICogcmluZyBj
aGFuZ2luZyBmcm9tIGVtcHR5IHRvIG5vbiBlbXB0eS4KKwkgKi8KKwl1aW50NjRfdAkJYnJfZzJo
X2ludHJfY250OworCiAJdWludDhfdAkJCWJyX2RhdGFbXTsKIH0gX19wYWNrZWQ7CiBDVEFTU0VS
VChzaXplb2Yoc3RydWN0IHZtYnVzX2J1ZnJpbmcpID09IFBBR0VfU0laRSk7CkBAIC0xOTYsNyAr
MjQzLDE0IEBACiAjZGVmaW5lIFZNQlVTX0NIQU5NU0dfVFlQRV9DT05ORUNUCQkxNAkvKiBSRVEg
Ki8KICNkZWZpbmUgVk1CVVNfQ0hBTk1TR19UWVBFX0NPTk5FQ1RfUkVTUAkJMTUJLyogUkVTUCAq
LwogI2RlZmluZSBWTUJVU19DSEFOTVNHX1RZUEVfRElTQ09OTkVDVAkJMTYJLyogUkVRICovCi0j
ZGVmaW5lIFZNQlVTX0NIQU5NU0dfVFlQRV9NQVgJCQkyMgorI2RlZmluZSBWTUJVU19DSEFOTVNH
X1RZUEVfMTcJCQkxNworI2RlZmluZSBWTUJVU19DSEFOTVNHX1RZUEVfMTgJCQkxOAorI2RlZmlu
ZSBWTUJVU19DSEFOTVNHX1RZUEVfMTkJCQkxOQorI2RlZmluZSBWTUJVU19DSEFOTVNHX1RZUEVf
MjAJCQkyMAorI2RlZmluZSBWTUJVU19DSEFOTVNHX1RZUEVfVExfQ09OTgkJMjEJLyogUkVRICov
CisjZGVmaW5lIFZNQlVTX0NIQU5NU0dfVFlQRV8yMgkJCTIyCisjZGVmaW5lIFZNQlVTX0NIQU5N
U0dfVFlQRV9UTF9SRVNVTFQJCTIzCS8qIFJFU1AgKi8KKyNkZWZpbmUgVk1CVVNfQ0hBTk1TR19U
WVBFX01BWAkJCTI0CiAKIHN0cnVjdCB2bWJ1c19jaGFubXNnX2hkciB7CiAJdWludDMyX3QJY2ht
X3R5cGU7CS8qIFZNQlVTX0NIQU5NU0dfVFlQRV8gKi8KQEAgLTIyOSw2ICsyODMsMTUgQEAKIAlz
dHJ1Y3Qgdm1idXNfY2hhbm1zZ19oZHIgY2htX2hkcjsKIH0gX19wYWNrZWQ7CiAKKy8qIFZNQlVT
X0NIQU5NU0dfVFlQRV9UTF9DT05OICovCisvKiBIeXBlci1WIHNvY2tldCBndWVzdCBjb25uZWN0
IHJlcXVlc3QgKi8KK3N0cnVjdCB2bWJ1c19jaGFubXNnX3RsX2Nvbm5lY3QgeworCXN0cnVjdCB2
bWJ1c19jaGFubXNnX2hkciBjaG1faGRyOworCXN0cnVjdCBoeXBlcnZfZ3VpZCBndWVzdF9lbmRw
b2ludF9pZDsKKwlzdHJ1Y3QgaHlwZXJ2X2d1aWQgaG9zdF9zZXJ2aWNlX2lkOworfSBfX3BhY2tl
ZDsKKworCiAvKiBWTUJVU19DSEFOTVNHX1RZUEVfQ0hPUEVOICovCiBzdHJ1Y3Qgdm1idXNfY2hh
bm1zZ19jaG9wZW4gewogCXN0cnVjdCB2bWJ1c19jaGFubXNnX2hkciBjaG1faGRyOwpAQCAtMzEw
LDYgKzM3MywxMiBAQAogCXVpbnQzMl90CWNobV9jaGFuaWQ7CiB9IF9fcGFja2VkOwogCisvKiBT
aXplIG9mIHRoZSB1c2VyIGRlZmluZWQgZGF0YSBidWZmZXIgZm9yIG5vbi1waXBlIG9mZmVycyAq
LworI2RlZmluZSBWTUJVU19DSEFOTVNHX0NIT0ZGRVJfVURBVEFfU0laRQkJMTIwCisKKy8qIFNp
emUgb2YgdGhlIHVzZXIgZGVmaW5lZCBkYXRhIGJ1ZmZlciBmb3IgcGlwZSBvZmZlcnMuICovCisj
ZGVmaW5lIFZNQlVTX0NIQU5NU0dfQ0hPRkZFUl9VREFUQV9QSVBFX1NJWkUJCTExNgorCiAvKiBW
TUJVU19DSEFOTVNHX1RZUEVfQ0hPRkZFUiAqLwogc3RydWN0IHZtYnVzX2NoYW5tc2dfY2hvZmZl
ciB7CiAJc3RydWN0IHZtYnVzX2NoYW5tc2dfaGRyIGNobV9oZHI7CkBAIC0zMjAsNyArMzg5LDI2
IEBACiAJdWludDMyX3QJY2htX3N2cmN0eF9zejsKIAl1aW50MTZfdAljaG1fY2hmbGFnczsKIAl1
aW50MTZfdAljaG1fbW1pb19zejsJLyogdW5pdDogTUIgKi8KLQl1aW50OF90CQljaG1fdWRhdGFb
MTIwXTsKKworCXVuaW9uIHsKKwkJLyogTm9uLXBpcGVzICovCisJCXN0cnVjdCB7CisJCQl1aW50
OF90CXVzZXJfZGVmW1ZNQlVTX0NIQU5NU0dfQ0hPRkZFUl9VREFUQV9TSVpFXTsKKwkJfSBzdGQ7
CisJCS8qCisJCSAqIFBpcGVzOgorCQkgKiBGb3IgaW50ZWdyYXRlZCBwaXBlIHByb3RvY29sLCB3
aGljaCBpcyBpbXBsZW1lbnRlZCBvbgorCQkgKiB0b3Agb2Ygc3RhbmRhcmQgdXNlci1kZWZpbmVk
IGRhdGEuIFBpcGUgY2xpZW50cyBoYXZlCisJCSAqIFZNQlVTX0NIQU5NU0dfQ0hPRkZFUl9VREFU
QV9QSVBFX1NJWkUgYnl0ZXMgbGVmdCBmb3IKKwkJICogdGhlaXIgb3duIHVzZXIuCisJCSAqLwor
CQlzdHJ1Y3QgeworCQkJdWludDMyX3QgcGlwZV9tb2RlOworCQkJdWludDhfdAorCQkJICAgIHVz
ZXJfZGVmW1ZNQlVTX0NIQU5NU0dfQ0hPRkZFUl9VREFUQV9QSVBFX1NJWkVdOworCQl9IHBpcGU7
CisJfSBjaG1fdWRhdGE7CisKIAl1aW50MTZfdAljaG1fc3ViaWR4OwogCXVpbnQxNl90CWNobV9y
c3ZkOwogCXVpbnQzMl90CWNobV9jaGFuaWQ7CkBAIC0zMzAsNiArNDE4LDkgQEAKIAl1aW50MzJf
dAljaG1fY29ubmlkOwogfSBfX3BhY2tlZDsKIENUQVNTRVJUKHNpemVvZihzdHJ1Y3Qgdm1idXNf
Y2hhbm1zZ19jaG9mZmVyKSA8PSBWTUJVU19NU0dfRFNJWkVfTUFYKTsKKworLyogU2VydmVyIEZs
YWcgKi8KKyNkZWZpbmUgVk1CVVNfQ0hBTl9UTE5QSV9QUk9WSURFUl9PRkZFUgkJCTB4MjAwMAog
CiAjZGVmaW5lIFZNQlVTX0NIT0ZGRVJfRkxBRzFfSEFTTU5GCTB4MDEKIApkaWZmIC0tZ2l0IGEv
aGVhZC9zeXMvZGV2L2h5cGVydi92bWJ1cy92bWJ1c19jaGFudmFyLmggYi9oZWFkL3N5cy9kZXYv
aHlwZXJ2L3ZtYnVzL3ZtYnVzX2NoYW52YXIuaAotLS0gYS9oZWFkL3N5cy9kZXYvaHlwZXJ2L3Zt
YnVzL3ZtYnVzX2NoYW52YXIuaAorKysgYi9oZWFkL3N5cy9kZXYvaHlwZXJ2L3ZtYnVzL3ZtYnVz
X2NoYW52YXIuaApAQCAtMTQ5LDYgKzE0OSwxMiBAQAogCiAJaW50CQkJCWNoX3JlZnM7CiAKKwkv
KgorCSAqIFRoZXNlIGFyZSBmb3IgSHlwZXJWIHNvY2tldCBjaGFubmVsIG9ubHkKKwkgKi8KKwli
b29sCQkJCWNoX2lzX2h2czsKKwl1aW50OF90CQkJCWNoX2h2c19jb25uX2Zyb21faG9zdDsKKwog
CXN0cnVjdCBzeXNjdGxfY3R4X2xpc3QJCWNoX3N5c2N0bF9jdHg7CiB9IF9fYWxpZ25lZChDQUNI
RV9MSU5FX1NJWkUpOwogCmRpZmYgLS1naXQgYS9oZWFkL3N5cy9kZXYvaHlwZXJ2L3ZtYnVzL3Zt
YnVzX2NoYW4uYyBiL2hlYWQvc3lzL2Rldi9oeXBlcnYvdm1idXMvdm1idXNfY2hhbi5jCi0tLSBh
L2hlYWQvc3lzL2Rldi9oeXBlcnYvdm1idXMvdm1idXNfY2hhbi5jCisrKyBiL2hlYWQvc3lzL2Rl
di9oeXBlcnYvdm1idXMvdm1idXNfY2hhbi5jCkBAIC0xMjcsMTAgKzEyNywxMSBAQAogfTsKIAog
LyoKLSAqIE5vdGlmeSBob3N0IHRoYXQgdGhlcmUgYXJlIGRhdGEgcGVuZGluZyBvbiBvdXIgVFgg
YnVmcmluZy4KKyAqIE5vdGlmeSBob3N0IHRoYXQgdGhlcmUgYXJlIGRhdGEgcGVuZGluZyBvbiBv
dXIgVFggYnVmcmluZyBvcgorICogd2UgaGF2ZSBwdXQgc29tZSBkYXRhIG9uIHRoZSBUWCBidWZy
aW5nLgogICovCiBzdGF0aWMgX19pbmxpbmUgdm9pZAotdm1idXNfY2hhbl9zaWduYWxfdHgoY29u
c3Qgc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW4pCit2bWJ1c19jaGFuX3NpZ25hbChjb25zdCBz
dHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbikKIHsKIAlhdG9taWNfc2V0X2xvbmcoY2hhbi0+Y2hf
ZXZ0ZmxhZywgY2hhbi0+Y2hfZXZ0ZmxhZ19tYXNrKTsKIAlpZiAoY2hhbi0+Y2hfdHhmbGFncyAm
IFZNQlVTX0NIQU5fVFhGX0hBU01ORikKQEAgLTEzOSw2ICsxNDAsMjIgQEAKIAkJaHlwZXJjYWxs
X3NpZ25hbF9ldmVudChjaGFuLT5jaF9tb25wcm1fZG1hLmh2X3BhZGRyKTsKIH0KIAorc3RhdGlj
IF9faW5saW5lIHZvaWQKK3ZtYnVzX2NoYW5fc2lnbmFsX3R4KHN0cnVjdCB2bWJ1c19jaGFubmVs
ICpjaGFuKQoreworCWNoYW4tPmNoX3R4YnIudHhicl9pbnRyY250ICsrOworCisJdm1idXNfY2hh
bl9zaWduYWwoY2hhbik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCit2bWJ1c19jaGFuX3Np
Z25hbF9yeChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbikKK3sKKwljaGFuLT5jaF9yeGJyLnJ4
YnJfaW50cmNudCArKzsKKworCXZtYnVzX2NoYW5fc2lnbmFsKGNoYW4pOworfQorCiBzdGF0aWMg
dm9pZAogdm1idXNfY2hhbl9pbnNfcHJpbGlzdChzdHJ1Y3Qgdm1idXNfc29mdGMgKnNjLCBzdHJ1
Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbikKIHsKQEAgLTEwMTIsNyArMTAyOSw2MCBAQAogCXRhc2tx
dWV1ZV9kcmFpbihjaGFuLT5jaF90cSwgJmNoYW4tPmNoX3Rhc2spOwogfQogCit1aW50MzJfdAor
dm1idXNfY2hhbl93cml0ZV9hdmFpbGFibGUoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW4pCit7
CisJcmV0dXJuICh2bWJ1c190eGJyX2F2YWlsYWJsZSgmY2hhbi0+Y2hfdHhicikpOworfQorCiti
b29sCit2bWJ1c19jaGFuX3dyaXRlX3NpZ25hbChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbiwK
KyAgICBpbnQzMl90IG1pbl9zaWduYWxfc2l6ZSkKK3sKKwlpZiAobWluX3NpZ25hbF9zaXplID49
IDAgJiYKKwkgICAgdm1idXNfY2hhbl93cml0ZV9hdmFpbGFibGUoY2hhbikgPiBtaW5fc2lnbmFs
X3NpemUpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmICghdm1idXNfdHhicl9nZXRfaW1h
c2soJmNoYW4tPmNoX3R4YnIpKSB7CisJCS8qIHR4YnIgaW1hc2sgaXMgbm90IHNldCwgc2lnbmFs
IHRoZSByZWFkZXIgKi8KKwkJdm1idXNfY2hhbl9zaWduYWxfdHgoY2hhbik7CisJCXJldHVybiB0
cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKwordm9pZAordm1idXNfY2hhbl9zZXRfcGVu
ZGluZ19zZW5kX3NpemUoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW4sCisgICAgdWludDMyX3Qg
c2l6ZSkKK3sKKwlpZiAoY2hhbikKKwkJdm1idXNfdHhicl9zZXRfcGVuZGluZ19zbmRfc3ooJmNo
YW4tPmNoX3R4YnIsIHNpemUpOworfQorCiBpbnQKK3ZtYnVzX2NoYW5faW92X3NlbmQoc3RydWN0
IHZtYnVzX2NoYW5uZWwgKmNoYW4sCisgICAgY29uc3Qgc3RydWN0IGlvdmVjIGlvdltdLCBpbnQg
aW92bGVuLAorICAgIHZtYnVzX2JyX2NvcHlfY2FsbGJhY2tfdCBjYiwgdm9pZCAqY2JhcmcpCit7
CisJaW50IGVycm9yOworCWJvb2xlYW5fdCBzZW5kX2V2dDsKKworCWlmIChpb3ZsZW4gPT0gMCkK
KwkJcmV0dXJuICgwKTsKKworCWVycm9yID0gdm1idXNfdHhicl93cml0ZV9jYWxsKCZjaGFuLT5j
aF90eGJyLCBpb3YsIGlvdmxlbiwKKwkgICAgY2IsIGNiYXJnLCAmc2VuZF9ldnQpOworCisJaWYg
KCFlcnJvciAmJiBzZW5kX2V2dCkgeworCQl2bWJ1c19jaGFuX3NpZ25hbF90eChjaGFuKTsKKwl9
CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK2ludAogdm1idXNfY2hhbl9zZW5kKHN0cnVjdCB2bWJ1
c19jaGFubmVsICpjaGFuLCB1aW50MTZfdCB0eXBlLCB1aW50MTZfdCBmbGFncywKICAgICB2b2lk
ICpkYXRhLCBpbnQgZGxlbiwgdWludDY0X3QgeGFjdGlkKQogewpAQCAtMTIxMSw2ICsxMjgxLDc4
IEBACiAJcmV0dXJuICgwKTsKIH0KIAordWludDMyX3QKK3ZtYnVzX2NoYW5fcmVhZF9hdmFpbGFi
bGUoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW4pCit7CisJcmV0dXJuICh2bWJ1c19yeGJyX2F2
YWlsYWJsZSgmY2hhbi0+Y2hfcnhicikpOworfQorCisvKgorICogVGhpcyByb3V0aW5lIGRvZXM6
CisgKiAgICAgLSBBZHZhbmNlIHRoZSBjaGFubmVsIHJlYWQgaW5kZXggZm9yICdhZHZhbmNlJyBi
eXRlcworICogICAgIC0gQ29weSBkYXRhX2xlbiBieXRlcyBpbiB0byB0aGUgYnVmZmVyIHBvaW50
ZWQgYnkgJ2RhdGEnCisgKiBSZXR1cm4gMCBpZiBvcGVyYXRpb24gc3VjY2VlZC4gRUFHQUlOIGlm
IG9wZXJhdGlvbnMgaWYgZmFpbGVkLgorICogSWYgZmFpbGVkLCB0aGUgYnVmZmVyIHBvaW50ZWQg
YnkgJ2RhdGEnIGlzIGludGFjdCwgYW5kIHRoZQorICogY2hhbm5lbCByZWFkIGluZGV4IGlzIG5v
dCBhZHZhbmNlZCBhdCBhbGwuCisgKi8KK2ludAordm1idXNfY2hhbl9yZWN2X3BlZWsoc3RydWN0
IHZtYnVzX2NoYW5uZWwgKmNoYW4sCisgICAgdm9pZCAqZGF0YSwgaW50IGRhdGFfbGVuLCB1aW50
MzJfdCBhZHZhbmNlKQoreworCWludCBlcnJvcjsKKwlib29sZWFuX3Qgc2lnX2V2ZW50OworCisJ
aWYgKGRhdGEgPT0gTlVMTCB8fCBkYXRhX2xlbiA8PSAwKQorCQlyZXR1cm4gKEVJTlZBTCk7CisK
KwllcnJvciA9IHZtYnVzX3J4YnJfaWR4YWR2X3BlZWsoJmNoYW4tPmNoX3J4YnIsCisJICAgIGRh
dGEsIGRhdGFfbGVuLCBhZHZhbmNlLCAmc2lnX2V2ZW50KTsKKworCWlmICghZXJyb3IgJiYgc2ln
X2V2ZW50KSB7CisJCXZtYnVzX2NoYW5fc2lnbmFsX3J4KGNoYW4pOworCX0KKworCXJldHVybiAo
ZXJyb3IpOworfQorCisvKgorICogVGhpcyByb3V0aW5lIGRvZXM6CisgKiAgICAgLSBBZHZhbmNl
IHRoZSBjaGFubmVsIHJlYWQgaW5kZXggZm9yICdhZHZhbmNlJyBieXRlcworICovCitpbnQKK3Zt
YnVzX2NoYW5fcmVjdl9pZHhhZHYoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW4sIHVpbnQzMl90
IGFkdmFuY2UpCit7CisJaW50IGVycm9yOworCWJvb2xlYW5fdCBzaWdfZXZlbnQ7CisKKwlpZiAo
YWR2YW5jZSA9PSAwKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwllcnJvciA9IHZtYnVzX3J4YnJf
aWR4YWR2KCZjaGFuLT5jaF9yeGJyLCBhZHZhbmNlLCAmc2lnX2V2ZW50KTsKKworCWlmICghZXJy
b3IgJiYgc2lnX2V2ZW50KSB7CisJCXZtYnVzX2NoYW5fc2lnbmFsX3J4KGNoYW4pOworCX0KKwor
CXJldHVybiAoZXJyb3IpOworfQorCisKKy8qCisgKiBDYWxsZXIgc2hvdWxkIGhvbGQgaXRzIG93
biBsb2NrIHRvIHNlcmlhbGl6ZSB0aGUgcmluZyBidWZmZXIKKyAqIGNvcHkuCisgKi8KK2ludAor
dm1idXNfY2hhbl9yZWN2X3BlZWtfY2FsbChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbiwgaW50
IGRhdGFfbGVuLAorICAgIHVpbnQzMl90IHNraXAsIHZtYnVzX2JyX2NvcHlfY2FsbGJhY2tfdCBj
Yiwgdm9pZCAqY2JhcmcpCit7CisJaWYgKCFjaGFuIHx8IGRhdGFfbGVuIDw9IDAgfHwgY2IgPT0g
TlVMTCkKKwkJcmV0dXJuIChFSU5WQUwpOworCisJcmV0dXJuICh2bWJ1c19yeGJyX3BlZWtfY2Fs
bCgmY2hhbi0+Y2hfcnhiciwgZGF0YV9sZW4sIHNraXAsCisJICAgIGNiLCBjYmFyZykpOworfQor
CiBzdGF0aWMgdm9pZAogdm1idXNfY2hhbl90YXNrKHZvaWQgKnhjaGFuLCBpbnQgcGVuZGluZyBf
X3VudXNlZCkKIHsKQEAgLTE3MzIsNiArMTg3NCwyNSBAQAogCQkgICAgMSA8PCAob2ZmZXItPmNo
bV9tb250cmlnICUgVk1CVVNfTU9OVFJJR19MRU4pOwogCX0KIAorCWlmIChvZmZlci0+Y2htX2No
ZmxhZ3MgJiBWTUJVU19DSEFOX1RMTlBJX1BST1ZJREVSX09GRkVSKSB7CisJCS8qIFRoaXMgaXMg
SHlwZXJWIHNvY2tldCBjaGFubmVsICovCisJCWNoYW4tPmNoX2lzX2h2cyA9IHRydWU7CisJCS8q
IFRoZSBmaXJzdCBieXRlICE9IDAgbWVhbnMgdGhlIGhvc3QgaW5pdGlhdGVkIGNvbm5lY3Rpb24u
ICovCisJCWNoYW4tPmNoX2h2c19jb25uX2Zyb21faG9zdCA9CisJCSAgICBvZmZlci0+Y2htX3Vk
YXRhLnBpcGUudXNlcl9kZWZbMF07CisKKwkJaWYgKGJvb3R2ZXJib3NlKSB7CisJCQlkZXZpY2Vf
cHJpbnRmKHNjLT52bWJ1c19kZXYsCisJCQkgICAgImNoYW4ldSBpcyBoeXBlcnYgc29ja2V0IGNo
YW5uZWwgIgorCQkJICAgICJjb25uZWN0ZWQgJXMgaG9zdFxuIiwKKwkJCSAgICBjaGFuLT5jaF9p
ZCwKKwkJCSAgICAoY2hhbi0+Y2hfaHZzX2Nvbm5fZnJvbV9ob3N0ICE9IDApID8KKwkJCSAgICAi
ZnJvbSIgOiAidG8iKTsKKwkJfQorCX0gZWxzZSB7CisJCWNoYW4tPmNoX2lzX2h2cyA9IGZhbHNl
OworCX0KKwogCS8qCiAJICogU2V0dXAgZXZlbnQgZmxhZy4KIAkgKi8KQEAgLTIwNDcsOCArMjIw
OCwzMSBAQAogCQlyZXR1cm4gZmFsc2U7CiB9CiAKLWNvbnN0IHN0cnVjdCBoeXBlcnZfZ3VpZCAq
Ci12bWJ1c19jaGFuX2d1aWRfaW5zdChjb25zdCBzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbikK
K2Jvb2wKK3ZtYnVzX2NoYW5faXNfaHZzKGNvbnN0IHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFu
KQoreworCXJldHVybiBjaGFuLT5jaF9pc19odnM7Cit9CisKK2Jvb2wKK3ZtYnVzX2NoYW5faXNf
aHZzX2Nvbm5fZnJvbV9ob3N0KGNvbnN0IHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFuKQorewor
CUtBU1NFUlQodm1idXNfY2hhbl9pc19odnMoY2hhbikgPT0gdHJ1ZSwKKwkgICAgKCJOb3QgYSBI
eXBlclYgU29ja2V0IGNoYW5uZWwgJXUiLCBjaGFuLT5jaF9pZCkpOworCWlmIChjaGFuLT5jaF9o
dnNfY29ubl9mcm9tX2hvc3QgIT0gMCkKKwkJcmV0dXJuIHRydWU7CisJZWxzZQorCQlyZXR1cm4g
ZmFsc2U7Cit9CisKK3N0cnVjdCBoeXBlcnZfZ3VpZCAqCit2bWJ1c19jaGFuX2d1aWRfdHlwZShz
dHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbikKK3sKKwlyZXR1cm4gJmNoYW4tPmNoX2d1aWRfdHlw
ZTsKK30KKworc3RydWN0IGh5cGVydl9ndWlkICoKK3ZtYnVzX2NoYW5fZ3VpZF9pbnN0KHN0cnVj
dCB2bWJ1c19jaGFubmVsICpjaGFuKQogewogCXJldHVybiAmY2hhbi0+Y2hfZ3VpZF9pbnN0Owog
fQpkaWZmIC0tZ2l0IGEvaGVhZC9zeXMvZGV2L2h5cGVydi92bWJ1cy92bWJ1c19icnZhci5oIGIv
aGVhZC9zeXMvZGV2L2h5cGVydi92bWJ1cy92bWJ1c19icnZhci5oCi0tLSBhL2hlYWQvc3lzL2Rl
di9oeXBlcnYvdm1idXMvdm1idXNfYnJ2YXIuaAorKysgYi9oZWFkL3N5cy9kZXYvaHlwZXJ2L3Zt
YnVzL3ZtYnVzX2JydmFyLmgKQEAgLTQ0LDYgKzQ0LDEwIEBACiAjZGVmaW5lIHZicl93aW5kZXgJ
CXZici0+YnJfd2luZGV4CiAjZGVmaW5lIHZicl9yaW5kZXgJCXZici0+YnJfcmluZGV4CiAjZGVm
aW5lIHZicl9pbWFzawkJdmJyLT5icl9pbWFzaworI2RlZmluZSB2YnJfcHNuZHN6CQl2YnItPmJy
X3BlbmRpbmdfc25kX3N6CisjZGVmaW5lIHZicl9mcHNuZHN6CQl2YnItPmJyX2ZlYXR1cmVfYml0
cy5mZWF0X3BlbmRpbmdfc25kX3N6CisjZGVmaW5lIHZicl9mdmFsdWUJCXZici0+YnJfZmVhdHVy
ZV9iaXRzLnZhbHVlCisjZGVmaW5lIHZicl9pbnRyY250CQl2YnItPmJyX2cyaF9pbnRyX2NudAog
I2RlZmluZSB2YnJfZGF0YQkJdmJyLT5icl9kYXRhCiAKIHN0cnVjdCB2bWJ1c19yeGJyIHsKQEAg
LTU0LDYgKzU4LDEwIEBACiAjZGVmaW5lIHJ4YnJfd2luZGV4CQlyeGJyLnZicl93aW5kZXgKICNk
ZWZpbmUgcnhicl9yaW5kZXgJCXJ4YnIudmJyX3JpbmRleAogI2RlZmluZSByeGJyX2ltYXNrCQly
eGJyLnZicl9pbWFzaworI2RlZmluZSByeGJyX3BzbmRzegkJcnhici52YnJfcHNuZHN6CisjZGVm
aW5lIHJ4YnJfZnBzbmRzegkJcnhici52YnJfZnBzbmRzegorI2RlZmluZSByeGJyX2Z2YWx1ZQkJ
cnhici52YnJfZnZhbHVlCisjZGVmaW5lIHJ4YnJfaW50cmNudAkJcnhici52YnJfaW50cmNudAog
I2RlZmluZSByeGJyX2RhdGEJCXJ4YnIudmJyX2RhdGEKICNkZWZpbmUgcnhicl9kc2l6ZQkJcnhi
ci52YnJfZHNpemUKIApAQCAtNjUsNiArNzMsMTAgQEAKICNkZWZpbmUgdHhicl93aW5kZXgJCXR4
YnIudmJyX3dpbmRleAogI2RlZmluZSB0eGJyX3JpbmRleAkJdHhici52YnJfcmluZGV4CiAjZGVm
aW5lIHR4YnJfaW1hc2sJCXR4YnIudmJyX2ltYXNrCisjZGVmaW5lIHR4YnJfcHNuZHN6CQl0eGJy
LnZicl9wc25kc3oKKyNkZWZpbmUgdHhicl9mcHNuZHN6CQl0eGJyLnZicl9mcHNuZHN6CisjZGVm
aW5lIHR4YnJfZnZhbHVlCQl0eGJyLnZicl9mdmFsdWUKKyNkZWZpbmUgdHhicl9pbnRyY250CQl0
eGJyLnZicl9pbnRyY250CiAjZGVmaW5lIHR4YnJfZGF0YQkJdHhici52YnJfZGF0YQogI2RlZmlu
ZSB0eGJyX2RzaXplCQl0eGJyLnZicl9kc2l6ZQogCkBAIC0xMTgsMTMgKzEzMCwyOCBAQAogaW50
CQl2bWJ1c19yeGJyX3BlZWsoc3RydWN0IHZtYnVzX3J4YnIgKnJiciwgdm9pZCAqZGF0YSwgaW50
IGRsZW4pOwogaW50CQl2bWJ1c19yeGJyX3JlYWQoc3RydWN0IHZtYnVzX3J4YnIgKnJiciwgdm9p
ZCAqZGF0YSwgaW50IGRsZW4sCiAJCSAgICB1aW50MzJfdCBza2lwKTsKK2ludAkJdm1idXNfcnhi
cl9pZHhhZHYoc3RydWN0IHZtYnVzX3J4YnIgKnJiciwgdWludDMyX3QgaWR4X2FkdiwKKwkJICAg
IGJvb2xlYW5fdCAqbmVlZF9zaWcpOworaW50CQl2bWJ1c19yeGJyX2lkeGFkdl9wZWVrKHN0cnVj
dCB2bWJ1c19yeGJyICpyYnIsIHZvaWQgKmRhdGEsCisJCSAgICBpbnQgZGxlbiwgdWludDMyX3Qg
aWR4X2FkdiwgYm9vbGVhbl90ICpuZWVkX3NpZyk7CitpbnQJCXZtYnVzX3J4YnJfcGVla19jYWxs
KHN0cnVjdCB2bWJ1c19yeGJyICpyYnIsIGludCBkbGVuLAorCQkgICAgdWludDMyX3Qgc2tpcCwg
dm1idXNfYnJfY29weV9jYWxsYmFja190IGNiLCB2b2lkICpjYmFyZyk7CiB2b2lkCQl2bWJ1c19y
eGJyX2ludHJfbWFzayhzdHJ1Y3Qgdm1idXNfcnhiciAqcmJyKTsKIHVpbnQzMl90CXZtYnVzX3J4
YnJfaW50cl91bm1hc2soc3RydWN0IHZtYnVzX3J4YnIgKnJicik7Cit1aW50MzJfdAl2bWJ1c19y
eGJyX2F2YWlsYWJsZShjb25zdCBzdHJ1Y3Qgdm1idXNfcnhiciAqcmJyKTsKIAogdm9pZAkJdm1i
dXNfdHhicl9pbml0KHN0cnVjdCB2bWJ1c190eGJyICp0YnIpOwogdm9pZAkJdm1idXNfdHhicl9k
ZWluaXQoc3RydWN0IHZtYnVzX3R4YnIgKnRicik7CiB2b2lkCQl2bWJ1c190eGJyX3NldHVwKHN0
cnVjdCB2bWJ1c190eGJyICp0YnIsIHZvaWQgKmJ1ZiwgaW50IGJsZW4pOwogaW50CQl2bWJ1c190
eGJyX3dyaXRlKHN0cnVjdCB2bWJ1c190eGJyICp0YnIsCiAJCSAgICBjb25zdCBzdHJ1Y3QgaW92
ZWMgaW92W10sIGludCBpb3ZsZW4sIGJvb2xlYW5fdCAqbmVlZF9zaWcpOworaW50CQl2bWJ1c190
eGJyX3dyaXRlX2NhbGwoc3RydWN0IHZtYnVzX3R4YnIgKnRiciwKKwkJICAgIGNvbnN0IHN0cnVj
dCBpb3ZlYyBpb3ZbXSwgaW50IGlvdmxlbiwKKwkJICAgIHZtYnVzX2JyX2NvcHlfY2FsbGJhY2tf
dCBjYiwgdm9pZCAqY2JhcmcsCisJCSAgICBib29sZWFuX3QgKm5lZWRfc2lnKTsKK3VpbnQzMl90
CXZtYnVzX3R4YnJfYXZhaWxhYmxlKGNvbnN0IHN0cnVjdCB2bWJ1c190eGJyICp0YnIpOwordWlu
dDMyX3QJdm1idXNfdHhicl9nZXRfaW1hc2soY29uc3Qgc3RydWN0IHZtYnVzX3R4YnIgKnRicik7
Cit2b2lkCQl2bWJ1c190eGJyX3NldF9wZW5kaW5nX3NuZF9zeihzdHJ1Y3Qgdm1idXNfdHhiciAq
dGJyLAorCQkgICAgdWludDMyX3Qgc2l6ZSk7CiAKICNlbmRpZiAgLyogX1ZNQlVTX0JSVkFSX0hf
ICovCmRpZmYgLS1naXQgYS9oZWFkL3N5cy9kZXYvaHlwZXJ2L3ZtYnVzL3ZtYnVzX2JyLmMgYi9o
ZWFkL3N5cy9kZXYvaHlwZXJ2L3ZtYnVzL3ZtYnVzX2JyLmMKLS0tIGEvaGVhZC9zeXMvZGV2L2h5
cGVydi92bWJ1cy92bWJ1c19ici5jCisrKyBiL2hlYWQvc3lzL2Rldi9oeXBlcnYvdm1idXMvdm1i
dXNfYnIuYwpAQCAtNTIsMTggKzUyLDIzIEBACiB2bWJ1c19icl9zeXNjdGxfc3RhdGUoU1lTQ1RM
X0hBTkRMRVJfQVJHUykKIHsKIAljb25zdCBzdHJ1Y3Qgdm1idXNfYnIgKmJyID0gYXJnMTsKLQl1
aW50MzJfdCByaW5kZXgsIHdpbmRleCwgaW1hc2ssIHJhdmFpbCwgd2F2YWlsOworCXVpbnQzMl90
IHJpbmRleCwgd2luZGV4LCBpbWFzaywgcHNuZHN6LCBmdmFsdWUsIHJhdmFpbCwgd2F2YWlsOwor
CXVpbnQ2NF90IGludHJjbnQ7CiAJY2hhciBzdGF0ZVsyNTZdOwogCisJaW50cmNudCA9IGJyLT52
YnJfaW50cmNudDsKIAlyaW5kZXggPSBici0+dmJyX3JpbmRleDsKIAl3aW5kZXggPSBici0+dmJy
X3dpbmRleDsKIAlpbWFzayA9IGJyLT52YnJfaW1hc2s7CisJcHNuZHN6ID0gYnItPnZicl9wc25k
c3o7CisJZnZhbHVlID0gYnItPnZicl9mdmFsdWU7CiAJd2F2YWlsID0gVk1CVVNfQlJfV0FWQUlM
KHJpbmRleCwgd2luZGV4LCBici0+dmJyX2RzaXplKTsKIAlyYXZhaWwgPSBici0+dmJyX2RzaXpl
IC0gd2F2YWlsOwogCiAJc25wcmludGYoc3RhdGUsIHNpemVvZihzdGF0ZSksCi0JICAgICJyaW5k
ZXg6JXUgd2luZGV4OiV1IGltYXNrOiV1IHJhdmFpbDoldSB3YXZhaWw6JXUiLAotCSAgICByaW5k
ZXgsIHdpbmRleCwgaW1hc2ssIHJhdmFpbCwgd2F2YWlsKTsKKwkgICAgImludHJjbnQ6JWx1IHJp
bmRleDoldSB3aW5kZXg6JXUgaW1hc2s6JXUgcHNuZHN6OiV1IGZ2YWx1ZToldSAiCisJICAgICJy
YXZhaWw6JXUgd2F2YWlsOiV1IiwKKwkgICAgaW50cmNudCwgcmluZGV4LCB3aW5kZXgsIGltYXNr
LCBwc25kc3osIGZ2YWx1ZSwgcmF2YWlsLCB3YXZhaWwpOwogCXJldHVybiBzeXNjdGxfaGFuZGxl
X3N0cmluZyhvaWRwLCBzdGF0ZSwgc2l6ZW9mKHN0YXRlKSwgcmVxKTsKIH0KIApAQCAtNzYsOSAr
ODEsMTEgQEAKICNkZWZpbmUgQlJfU1RBVEVfUklEWAkwCiAjZGVmaW5lIEJSX1NUQVRFX1dJRFgJ
MQogI2RlZmluZSBCUl9TVEFURV9JTVNLCTIKLSNkZWZpbmUgQlJfU1RBVEVfUlNQQwkzCi0jZGVm
aW5lIEJSX1NUQVRFX1dTUEMJNAotI2RlZmluZSBCUl9TVEFURV9NQVgJNQorI2RlZmluZSBCUl9T
VEFURV9QU1NaCTMKKyNkZWZpbmUgQlJfU1RBVEVfRlZBTAk0CisjZGVmaW5lIEJSX1NUQVRFX1JT
UEMJNQorI2RlZmluZSBCUl9TVEFURV9XU1BDCTYKKyNkZWZpbmUgQlJfU1RBVEVfTUFYCTcKIAog
CWNvbnN0IHN0cnVjdCB2bWJ1c19iciAqYnIgPSBhcmcxOwogCXVpbnQzMl90IHJpbmRleCwgd2lu
ZGV4LCB3YXZhaWwsIHN0YXRlW0JSX1NUQVRFX01BWF07CkBAIC05MCw2ICs5Nyw4IEBACiAJc3Rh
dGVbQlJfU1RBVEVfUklEWF0gPSByaW5kZXg7CiAJc3RhdGVbQlJfU1RBVEVfV0lEWF0gPSB3aW5k
ZXg7CiAJc3RhdGVbQlJfU1RBVEVfSU1TS10gPSBici0+dmJyX2ltYXNrOworCXN0YXRlW0JSX1NU
QVRFX1BTU1pdID0gYnItPnZicl9wc25kc3o7CisJc3RhdGVbQlJfU1RBVEVfRlZBTF0gPSBici0+
dmJyX2Z2YWx1ZTsKIAlzdGF0ZVtCUl9TVEFURV9XU1BDXSA9IHdhdmFpbDsKIAlzdGF0ZVtCUl9T
VEFURV9SU1BDXSA9IGJyLT52YnJfZHNpemUgLSB3YXZhaWw7CiAKQEAgLTE0MCw2ICsxNDksMTIg
QEAKIH0KIAogdWludDMyX3QKK3ZtYnVzX3J4YnJfYXZhaWxhYmxlKGNvbnN0IHN0cnVjdCB2bWJ1
c19yeGJyICpyYnIpCit7CisJcmV0dXJuICh2bWJ1c19yeGJyX2F2YWlsKHJicikpOworfQorCit1
aW50MzJfdAogdm1idXNfcnhicl9pbnRyX3VubWFzayhzdHJ1Y3Qgdm1idXNfcnhiciAqcmJyKQog
ewogCXJici0+cnhicl9pbWFzayA9IDA7CkBAIC0xNzgsNiArMTkzLDQwIEBACiAJdm1idXNfYnJf
c2V0dXAoJnJici0+cnhiciwgYnVmLCBibGVuKTsKIH0KIAorc3RhdGljIF9faW5saW5lIGJvb2xl
YW5fdAordm1idXNfcnhicl9uZWVkX3NpZ25hbChjb25zdCBzdHJ1Y3Qgdm1idXNfcnhiciAqcmJy
LCB1aW50MzJfdCBieXRlc19yZWFkKQoreworCXVpbnQzMl90IHBlbmRpbmdfc25kX3N6LCBjYW53
cml0ZV9zaXplOworCisJLyogTm8gbmVlZCB0byBzaWduYWwgaWYgaG9zdCBkb2Vzbid0IHdhbnQg
dXMgdG8gKi8KKwlpZiAoIXJici0+cnhicl9mcHNuZHN6KQorCQlyZXR1cm4gZmFsc2U7CisKKwlt
YigpOworCisJcGVuZGluZ19zbmRfc3ogPSByYnItPnJ4YnJfcHNuZHN6OworCS8qIE5vIG5lZWQg
dG8gc2lnbmFsIGlmIGhvc3Qgc2V0cyBwZW5kaW5nX3NuZF9zeiB0byAwICovCisJaWYgKCFwZW5k
aW5nX3NuZF9zeikKKwkJcmV0dXJuIGZhbHNlOworCisJbWIoKTsKKworCWNhbndyaXRlX3NpemUg
PSByYnItPnJ4YnJfZHNpemUgLSB2bWJ1c19yeGJyX2F2YWlsKHJicik7CisKKwkvKiBObyBuZWVk
IHRvIHNpZ25hbCBpZiBiciBhbHJlYWR5IGhhcyBlbm91Z2ggc3BhY2UgYmVmb3JlIHJlYWQgKi8K
KwlpZiAoY2Fud3JpdGVfc2l6ZSAtIGJ5dGVzX3JlYWQgPiBwZW5kaW5nX3NuZF9zeikKKwkJcmV0
dXJuIGZhbHNlOworCisJLyoKKwkgKiBObyBuZWVkIHRvIHNpZ25hbCBpZiBzdGlsbCBkb2Vzbid0
IGhhdmUgZW5vdWdoIHNwYWNlCisJICogYXNrZWQgYnkgaG9zdAorCSAqLworCWlmIChjYW53cml0
ZV9zaXplIDw9IHBlbmRpbmdfc25kX3N6KQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1
ZTsKK30KKwogdm9pZAogdm1idXNfdHhicl9pbml0KHN0cnVjdCB2bWJ1c190eGJyICp0YnIpCiB7
CkBAIC0xOTQsOCArMjQzLDI1IEBACiB2bWJ1c190eGJyX3NldHVwKHN0cnVjdCB2bWJ1c190eGJy
ICp0YnIsIHZvaWQgKmJ1ZiwgaW50IGJsZW4pCiB7CiAJdm1idXNfYnJfc2V0dXAoJnRici0+dHhi
ciwgYnVmLCBibGVuKTsKKworCS8qIFNldCBmZWF0dXJlIGJpdCBlbmFibGluZyBmbG93IGNvbnRy
b2wgKi8KKwl0YnItPnR4YnJfZnBzbmRzeiA9IDE7CiB9CiAKK3VpbnQzMl90Cit2bWJ1c190eGJy
X2dldF9pbWFzayhjb25zdCBzdHJ1Y3Qgdm1idXNfdHhiciAqdGJyKQoreworCW1iKCk7CisKKwly
ZXR1cm4odGJyLT50eGJyX2ltYXNrKTsKK30KKwordm9pZAordm1idXNfdHhicl9zZXRfcGVuZGlu
Z19zbmRfc3ooc3RydWN0IHZtYnVzX3R4YnIgKnRiciwgdWludDMyX3Qgc2l6ZSkKK3sKKwl0YnIt
PnR4YnJfcHNuZHN6ID0gc2l6ZTsKK30KKwogLyoKICAqIFdoZW4gd2Ugd3JpdGUgdG8gdGhlIHJp
bmcgYnVmZmVyLCBjaGVjayBpZiB0aGUgaG9zdCBuZWVkcyB0byBiZQogICogc2lnbmFsZWQuCkBA
IC0yNjAsNyArMzI2LDExNyBAQAogCXJldHVybiBWTUJVU19CUl9JRFhJTkMod2luZGV4LCBjcGxl
biwgYnJfZHNpemUpOwogfQogCitzdGF0aWMgX19pbmxpbmUgdWludDMyX3QKK3ZtYnVzX3R4YnJf
Y29weXRvX2NhbGwoY29uc3Qgc3RydWN0IHZtYnVzX3R4YnIgKnRiciwgdWludDMyX3Qgd2luZGV4
LAorICAgIHVpbnQzMl90IGNwbGVuLCB2bWJ1c19icl9jb3B5X2NhbGxiYWNrX3QgY2IsIHZvaWQg
KmNiYXJnLCBpbnQgKnJldCkKK3sKKwl1aW50OF90ICpicl9kYXRhID0gdGJyLT50eGJyX2RhdGE7
CisJdWludDMyX3QgYnJfZHNpemUgPSB0YnItPnR4YnJfZHNpemU7CisJaW50IGVyciA9IDA7CisK
KwlpZiAoY3BsZW4gPiBicl9kc2l6ZSAtIHdpbmRleCkgeworCQl1aW50MzJfdCBmcmFnbGVuID0g
YnJfZHNpemUgLSB3aW5kZXg7CisKKwkJLyogV3JhcC1hcm91bmQgZGV0ZWN0ZWQgKi8KKwkJZXJy
ID0gY2IoKHZvaWQgKikoYnJfZGF0YSArIHdpbmRleCksIGZyYWdsZW4sIGNiYXJnKTsKKwkJaWYg
KCFlcnIpCisJCQllcnIgPSBjYigodm9pZCAqKWJyX2RhdGEsIGNwbGVuIC0gZnJhZ2xlbiwgY2Jh
cmcpOworCX0gZWxzZSB7CisJCWVyciA9IGNiKCh2b2lkICopKGJyX2RhdGEgKyB3aW5kZXgpLCBj
cGxlbiwgY2JhcmcpOworCX0KKworCSpyZXQgPSBlcnI7CisKKwlyZXR1cm4gVk1CVVNfQlJfSURY
SU5DKHdpbmRleCwgY3BsZW4sIGJyX2RzaXplKTsKK30KKwordWludDMyX3QKK3ZtYnVzX3R4YnJf
YXZhaWxhYmxlKGNvbnN0IHN0cnVjdCB2bWJ1c190eGJyICp0YnIpCit7CisJcmV0dXJuICh2bWJ1
c190eGJyX2F2YWlsKHRicikpOworfQorCiAvKgorICogTk9URToKKyAqIE5vdCBob2xkaW5nIGxv
Y2sgd2hlbiBjYWxsaW5nIHVzZXIgcHJvdmlkZWQgY2FsbGJhY2sgcm91dGluZS4KKyAqIENhbGxl
ciBzaG91bGQgaG9sZCBsb2NrIHRvIHNlcmlhbGl6ZSByaW5nIGJ1ZmZlciBhY2Nlc3Nlcy4KKyAq
LworaW50Cit2bWJ1c190eGJyX3dyaXRlX2NhbGwoc3RydWN0IHZtYnVzX3R4YnIgKnRiciwKKyAg
ICBjb25zdCBzdHJ1Y3QgaW92ZWMgaW92W10sIGludCBpb3ZsZW4sCisgICAgdm1idXNfYnJfY29w
eV9jYWxsYmFja190IGNiLCB2b2lkICpjYmFyZywKKyAgICBib29sZWFuX3QgKm5lZWRfc2lnKQor
eworCXVpbnQzMl90IG9sZF93aW5kZXgsIHdpbmRleCwgdG90YWw7CisJdWludDY0X3Qgc2F2ZV93
aW5kZXg7CisJaW50IGk7CisJaW50IGNiX3JldCA9IDA7CisKKwl0b3RhbCA9IDA7CisJZm9yIChp
ID0gMDsgaSA8IGlvdmxlbjsgaSsrKQorCQl0b3RhbCArPSBpb3ZbaV0uaW92X2xlbjsKKwl0b3Rh
bCArPSBzaXplb2Yoc2F2ZV93aW5kZXgpOworCisKKwkvKgorCSAqIE5PVEU6CisJICogSWYgdGhp
cyB3cml0ZSBpcyBnb2luZyB0byBtYWtlIGJyX3dpbmRleCBzYW1lIGFzIGJyX3JpbmRleCwKKwkg
KiBpLmUuIHRoZSBhdmFpbGFibGUgc3BhY2UgZm9yIHdyaXRlIGlzIHNhbWUgYXMgdGhlIHdyaXRl
IHNpemUsCisJICogd2UgY2FuJ3QgZG8gaXQgdGhlbiwgc2luY2UgYnJfd2luZGV4ID09IGJyX3Jp
bmRleCBtZWFucyB0aGF0CisJICogdGhlIGJ1ZnJpbmcgaXMgZW1wdHkuCisJICovCisJaWYgKHZt
YnVzX3R4YnJfYXZhaWwodGJyKSA8PSB0b3RhbCkgeworCQlyZXR1cm4gKEVBR0FJTik7CisJfQor
CisJLyogU2F2ZSBicl93aW5kZXggZm9yIGxhdGVyIHVzZSAqLworCW9sZF93aW5kZXggPSB0YnIt
PnR4YnJfd2luZGV4OworCisJLyoKKwkgKiBDb3B5IHRoZSBzY2F0dGVyZWQgY2hhbm5lbCBwYWNr
ZXQgdG8gdGhlIFRYIGJ1ZnJpbmcuCisJICovCisJd2luZGV4ID0gb2xkX3dpbmRleDsKKwlmb3Ig
KGkgPSAwOyBpIDwgaW92bGVuOyBpKyspIHsKKwkJaWYgKGlvdltpXS5pb3ZfYmFzZSAhPSBOVUxM
KSB7CisJCQl3aW5kZXggPSB2bWJ1c190eGJyX2NvcHl0byh0YnIsIHdpbmRleCwKKwkJCSAgICBp
b3ZbaV0uaW92X2Jhc2UsIGlvdltpXS5pb3ZfbGVuKTsKKwkJfSBlbHNlIGlmIChjYiAhPSBOVUxM
KSB7CisJCQl3aW5kZXggPSB2bWJ1c190eGJyX2NvcHl0b19jYWxsKHRiciwgd2luZGV4LAorCQkJ
ICAgIGlvdltpXS5pb3ZfbGVuLCBjYiwgY2JhcmcsICZjYl9yZXQpOworCQkJLyoKKwkJCSAqIElm
IGNhbGxiYWNrIGZhaWxzLCByZXR1cm4gd2l0aG91dCB1cGRhdGluZworCQkJICogd3JpdGUgaW5k
ZXguCisJCQkgKi8KKwkJCWlmIChjYl9yZXQpCisJCQkJcmV0dXJuIChjYl9yZXQpOworCQl9CisJ
fQorCisJbXR4X2xvY2tfc3BpbigmdGJyLT50eGJyX2xvY2spOworCisJLyoKKwkgKiBTZXQgdGhl
IG9mZnNldCBvZiB0aGUgY3VycmVudCBjaGFubmVsIHBhY2tldC4KKwkgKi8KKwlzYXZlX3dpbmRl
eCA9ICgodWludDY0X3Qpb2xkX3dpbmRleCkgPDwgMzI7CisJd2luZGV4ID0gdm1idXNfdHhicl9j
b3B5dG8odGJyLCB3aW5kZXgsICZzYXZlX3dpbmRleCwKKwkgICAgc2l6ZW9mKHNhdmVfd2luZGV4
KSk7CisKKwkvKgorCSAqIFVwZGF0ZSB0aGUgd3JpdGUgaW5kZXggX2FmdGVyXyB0aGUgY2hhbm5l
bCBwYWNrZXQKKwkgKiBpcyBjb3BpZWQuCisJICovCisJX19jb21waWxlcl9tZW1iYXIoKTsKKwl0
YnItPnR4YnJfd2luZGV4ID0gd2luZGV4OworCisJbXR4X3VubG9ja19zcGluKCZ0YnItPnR4YnJf
bG9jayk7CisKKwlpZiAobmVlZF9zaWcpCisJCSpuZWVkX3NpZyA9IHZtYnVzX3R4YnJfbmVlZF9z
aWduYWwodGJyLCBvbGRfd2luZGV4KTsKKworCXJldHVybiAoMCk7Cit9CisKKy8qCiAgKiBXcml0
ZSBzY2F0dGVyZWQgY2hhbm5lbCBwYWNrZXQgdG8gVFggYnVmcmluZy4KICAqCiAgKiBUaGUgb2Zm
c2V0IG9mIHRoaXMgY2hhbm5lbCBwYWNrZXQgaXMgd3JpdHRlbiBhcyBhIDY0Yml0cyB2YWx1ZQpA
QCAtMzQ2LDYgKzUyMiwyNyBAQAogCXJldHVybiBWTUJVU19CUl9JRFhJTkMocmluZGV4LCBjcGxl
biwgYnJfZHNpemUpOwogfQogCitzdGF0aWMgX19pbmxpbmUgdWludDMyX3QKK3ZtYnVzX3J4YnJf
Y29weWZyb21fY2FsbChjb25zdCBzdHJ1Y3Qgdm1idXNfcnhiciAqcmJyLCB1aW50MzJfdCByaW5k
ZXgsCisgICAgaW50IGNwbGVuLCB2bWJ1c19icl9jb3B5X2NhbGxiYWNrX3QgY2IsIHZvaWQgKmNi
YXJnKQoreworCXVpbnQ4X3QgKmJyX2RhdGEgPSByYnItPnJ4YnJfZGF0YTsKKwl1aW50MzJfdCBi
cl9kc2l6ZSA9IHJici0+cnhicl9kc2l6ZTsKKwlpbnQgZXJyb3IgPSAwOworCisJaWYgKGNwbGVu
ID4gYnJfZHNpemUgLSByaW5kZXgpIHsKKwkJdWludDMyX3QgZnJhZ2xlbiA9IGJyX2RzaXplIC0g
cmluZGV4OworCisJCS8qIFdyYXAtYXJvdW5kIGRldGVjdGVkLiAqLworCQllcnJvciA9IGNiKCh2
b2lkICopKGJyX2RhdGEgKyByaW5kZXgpLCBmcmFnbGVuLCBjYmFyZyk7CisJCWlmICghZXJyb3Ip
CisJCQllcnJvciA9IGNiKCh2b2lkICopYnJfZGF0YSwgY3BsZW4gLSBmcmFnbGVuLCBjYmFyZyk7
CisJfSBlbHNlIHsKKwkJZXJyb3IgPSBjYigodm9pZCAqKShicl9kYXRhICsgcmluZGV4KSwgY3Bs
ZW4sIGNiYXJnKTsKKwl9CisJcmV0dXJuIChlcnJvcik7Cit9CisKIGludAogdm1idXNfcnhicl9w
ZWVrKHN0cnVjdCB2bWJ1c19yeGJyICpyYnIsIHZvaWQgKmRhdGEsIGludCBkbGVuKQogewpAQCAt
MzYyLDYgKzU1OSwxMjEgQEAKIAl2bWJ1c19yeGJyX2NvcHlmcm9tKHJiciwgcmJyLT5yeGJyX3Jp
bmRleCwgZGF0YSwgZGxlbik7CiAKIAltdHhfdW5sb2NrX3NwaW4oJnJici0+cnhicl9sb2NrKTsK
KworCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBOT1RFOgorICogV2Ugb25seSBob2xkIHNwaW4g
bG9jayB0byBjaGVjayB0aGUgcmluZyBidWZmZXIgc3BhY2UuIEl0IGlzCisgKiByZWxlYXNlZCBi
ZWZvcmUgY2FsbGluZyB1c2VyIHByb3ZpZGVkIGNhbGxiYWNrIHJvdXRpbmUuCisgKiBDYWxsZXIg
c2hvdWxkIGhvbGQgbG9jayB0byBzZXJpYWxpemUgcmluZyBidWZmZXIgYWNjZXNzZXMuCisgKi8K
K2ludAordm1idXNfcnhicl9wZWVrX2NhbGwoc3RydWN0IHZtYnVzX3J4YnIgKnJiciwgaW50IGRs
ZW4sIHVpbnQzMl90IHNraXAsCisgICAgdm1idXNfYnJfY29weV9jYWxsYmFja190IGNiLCB2b2lk
ICpjYmFyZykKK3sKKwl1aW50MzJfdCByaW5kZXgsIGJyX2RzaXplMCA9IHJici0+cnhicl9kc2l6
ZTsKKwlpbnQgcmV0OworCisJbXR4X2xvY2tfc3BpbigmcmJyLT5yeGJyX2xvY2spOworCS8qCisJ
ICogVGhlIHJlcXVlc3RlZCBkYXRhICsgc2tpcCBhbmQgdGhlIDY0Yml0cyBjaGFubmVsIHBhY2tl
dAorCSAqIG9mZnNldCBzaG91bGQgYmUgdGhlcmUgYXQgbGVhc3QuCisJICovCisJaWYgKHZtYnVz
X3J4YnJfYXZhaWwocmJyKSA8IHNraXAgKyBkbGVuICsgc2l6ZW9mKHVpbnQ2NF90KSkgeworCQlt
dHhfdW5sb2NrX3NwaW4oJnJici0+cnhicl9sb2NrKTsKKwkJcmV0dXJuIChFQUdBSU4pOworCX0K
KworCXJpbmRleCA9IFZNQlVTX0JSX0lEWElOQyhyYnItPnJ4YnJfcmluZGV4LCBza2lwLCBicl9k
c2l6ZTApOworCW10eF91bmxvY2tfc3BpbigmcmJyLT5yeGJyX2xvY2spOworCisJcmV0ID0gdm1i
dXNfcnhicl9jb3B5ZnJvbV9jYWxsKHJiciwgcmluZGV4LCBkbGVuLCBjYiwgY2JhcmcpOworCisJ
cmV0dXJuIChyZXQpOworfQorCisvKgorICogTk9URToKKyAqIFdlIGFzc3VtZSBpZHhfYWR2ID09
IHNpemVvZihjaGFubmVsIHBhY2tldCkuCisgKi8KK2ludAordm1idXNfcnhicl9pZHhhZHZfcGVl
ayhzdHJ1Y3Qgdm1idXNfcnhiciAqcmJyLCB2b2lkICpkYXRhLCBpbnQgZGxlbiwKKyAgICB1aW50
MzJfdCBpZHhfYWR2LCBib29sZWFuX3QgKm5lZWRfc2lnKQoreworCXVpbnQzMl90IHJpbmRleCwg
YnJfZHNpemUgPSByYnItPnJ4YnJfZHNpemU7CisKKwltdHhfbG9ja19zcGluKCZyYnItPnJ4YnJf
bG9jayk7CisJLyoKKwkgKiBNYWtlIHN1cmUgaXQgaGFzIGVub3VnaCBkYXRhIHRvIHJlYWQuCisJ
ICovCisJaWYgKHZtYnVzX3J4YnJfYXZhaWwocmJyKSA8IGlkeF9hZHYgKyBzaXplb2YodWludDY0
X3QpICsgZGxlbikgeworCQltdHhfdW5sb2NrX3NwaW4oJnJici0+cnhicl9sb2NrKTsKKwkJcmV0
dXJuIChFQUdBSU4pOworCX0KKworCWlmIChpZHhfYWR2ID4gMCkgeworCQkvKgorCQkgKiBBZHZh
bmNlIHRoZSByZWFkIGluZGV4IGZpcnN0LCBpbmNsdWRpbmcgdGhlIGNoYW5uZWwncyA2NGJpdAor
CQkgKiBwcmV2aW91cyB3cml0ZSBvZmZzZXQuCisJCSAqLworCQlyaW5kZXggPSBWTUJVU19CUl9J
RFhJTkMocmJyLT5yeGJyX3JpbmRleCwKKwkJICAgIGlkeF9hZHYgKyBzaXplb2YodWludDY0X3Qp
LCBicl9kc2l6ZSk7CisJCV9fY29tcGlsZXJfbWVtYmFyKCk7CisJCXJici0+cnhicl9yaW5kZXgg
PSByaW5kZXg7CisJfQorCisJdm1idXNfcnhicl9jb3B5ZnJvbShyYnIsIHJici0+cnhicl9yaW5k
ZXgsIGRhdGEsIGRsZW4pOworCisJbXR4X3VubG9ja19zcGluKCZyYnItPnJ4YnJfbG9jayk7CisK
KwlpZiAobmVlZF9zaWcpIHsKKwkJaWYgKGlkeF9hZHYgPiAwKQorCQkJKm5lZWRfc2lnID0KKwkJ
CSAgICB2bWJ1c19yeGJyX25lZWRfc2lnbmFsKHJiciwgaWR4X2FkdiArCisJCQkgICAgc2l6ZW9m
KHVpbnQ2NF90KSk7CisJCWVsc2UKKwkJCSpuZWVkX3NpZyA9IGZhbHNlOworCX0KKworCXJldHVy
biAoMCk7Cit9CisKKy8qCisgKiBOT1RFOgorICogSnVzdCB1cGRhdGUgdGhlIFJYIHJiIGluZGV4
LgorICovCitpbnQKK3ZtYnVzX3J4YnJfaWR4YWR2KHN0cnVjdCB2bWJ1c19yeGJyICpyYnIsIHVp
bnQzMl90IGlkeF9hZHYsCisgICAgYm9vbGVhbl90ICpuZWVkX3NpZykKK3sKKwl1aW50MzJfdCBy
aW5kZXgsIGJyX2RzaXplID0gcmJyLT5yeGJyX2RzaXplOworCisJbXR4X2xvY2tfc3BpbigmcmJy
LT5yeGJyX2xvY2spOworCS8qCisJICogTWFrZSBzdXJlIGl0IGhhcyBlbm91Z2ggc3BhY2UgdG8g
YWR2YW5jZS4KKwkgKi8KKwlpZiAodm1idXNfcnhicl9hdmFpbChyYnIpIDwgaWR4X2FkdiArIHNp
emVvZih1aW50NjRfdCkpIHsKKwkJbXR4X3VubG9ja19zcGluKCZyYnItPnJ4YnJfbG9jayk7CisJ
CXJldHVybiAoRUFHQUlOKTsKKwl9CisKKwkvKgorCSAqIEFkdmFuY2UgdGhlIHJlYWQgaW5kZXgs
IGluY2x1ZGluZyB0aGUgY2hhbm5lbCdzIDY0Yml0CisJICogcHJldmlvdXMgd3JpdGUgb2Zmc2V0
LgorCSAqLworCXJpbmRleCA9IFZNQlVTX0JSX0lEWElOQyhyYnItPnJ4YnJfcmluZGV4LAorCSAg
ICBpZHhfYWR2ICsgc2l6ZW9mKHVpbnQ2NF90KSwgYnJfZHNpemUpOworCV9fY29tcGlsZXJfbWVt
YmFyKCk7CisJcmJyLT5yeGJyX3JpbmRleCA9IHJpbmRleDsKKworCW10eF91bmxvY2tfc3Bpbigm
cmJyLT5yeGJyX2xvY2spOworCisJaWYgKG5lZWRfc2lnKSB7CisJCSpuZWVkX3NpZyA9CisJCSAg
ICB2bWJ1c19yeGJyX25lZWRfc2lnbmFsKHJiciwgaWR4X2FkdiArIHNpemVvZih1aW50NjRfdCkp
OworCX0KIAogCXJldHVybiAoMCk7CiB9CmRpZmYgLS1naXQgYS9oZWFkL3N5cy9kZXYvaHlwZXJ2
L3ZtYnVzL3ZtYnVzLmMgYi9oZWFkL3N5cy9kZXYvaHlwZXJ2L3ZtYnVzL3ZtYnVzLmMKLS0tIGEv
aGVhZC9zeXMvZGV2L2h5cGVydi92bWJ1cy92bWJ1cy5jCisrKyBiL2hlYWQvc3lzL2Rldi9oeXBl
cnYvdm1idXMvdm1idXMuYwpAQCAtMzY1LDEwICszNjUsNDYgQEAKIAl1aW50MzJfdCBncGFkbDsK
IAogYWdhaW46Ci0JZ3BhZGwgPSBhdG9taWNfZmV0Y2hhZGRfaW50KCZzYy0+dm1idXNfZ3BhZGws
IDEpOyAKKwlncGFkbCA9IGF0b21pY19mZXRjaGFkZF9pbnQoJnNjLT52bWJ1c19ncGFkbCwgMSk7
CiAJaWYgKGdwYWRsID09IDApCiAJCWdvdG8gYWdhaW47CiAJcmV0dXJuIChncGFkbCk7Cit9CisK
Ky8qIFVzZWQgZm9yIEh5cGVyLVYgc29ja2V0IHdoZW4gZ3Vlc3QgY2xpZW50IGNvbm5lY3RzIHRv
IGhvc3QgKi8KK2ludAordm1idXNfcmVxX3RsX2Nvbm5lY3Qoc3RydWN0IGh5cGVydl9ndWlkICpn
dWVzdF9zcnZfaWQsCisgICAgc3RydWN0IGh5cGVydl9ndWlkICpob3N0X3Nydl9pZCkKK3sKKwlz
dHJ1Y3Qgdm1idXNfc29mdGMgKnNjID0gdm1idXNfZ2V0X3NvZnRjKCk7CisJc3RydWN0IHZtYnVz
X2NoYW5tc2dfdGxfY29ubmVjdCAqcmVxOworCXN0cnVjdCB2bWJ1c19tc2doYyAqbWg7CisJaW50
IGVycm9yOworCisJaWYgKCFzYykKKwkJcmV0dXJuIEVOWElPOworCisJbWggPSB2bWJ1c19tc2do
Y19nZXQoc2MsIHNpemVvZigqcmVxKSk7CisJaWYgKG1oID09IE5VTEwpIHsKKwkJZGV2aWNlX3By
aW50ZihzYy0+dm1idXNfZGV2LAorCQkgICAgImNhbiBub3QgZ2V0IG1zZyBoeXBlcmNhbGwgZm9y
IHRsIGNvbm5lY3RcbiIpOworCQlyZXR1cm4gRU5YSU87CisJfQorCisJcmVxID0gdm1idXNfbXNn
aGNfZGF0YXB0cihtaCk7CisJcmVxLT5jaG1faGRyLmNobV90eXBlID0gVk1CVVNfQ0hBTk1TR19U
WVBFX1RMX0NPTk47CisJcmVxLT5ndWVzdF9lbmRwb2ludF9pZCA9ICpndWVzdF9zcnZfaWQ7CisJ
cmVxLT5ob3N0X3NlcnZpY2VfaWQgPSAqaG9zdF9zcnZfaWQ7CisKKwllcnJvciA9IHZtYnVzX21z
Z2hjX2V4ZWNfbm9yZXN1bHQobWgpOworCXZtYnVzX21zZ2hjX3B1dChzYywgbWgpOworCisJaWYg
KGVycm9yKSB7CisJCWRldmljZV9wcmludGYoc2MtPnZtYnVzX2RldiwKKwkJICAgICJ0bCBjb25u
ZWN0IG1zZyBoeXBlcmNhbGwgZmFpbGVkXG4iKTsKKwl9CisKKwlyZXR1cm4gZXJyb3I7CiB9CiAK
IHN0YXRpYyBpbnQKZGlmZiAtLWdpdCBhL2hlYWQvc3lzL2Rldi9oeXBlcnYvaW5jbHVkZS92bWJ1
cy5oIGIvaGVhZC9zeXMvZGV2L2h5cGVydi9pbmNsdWRlL3ZtYnVzLmgKLS0tIGEvaGVhZC9zeXMv
ZGV2L2h5cGVydi9pbmNsdWRlL3ZtYnVzLmgKKysrIGIvaGVhZC9zeXMvZGV2L2h5cGVydi9pbmNs
dWRlL3ZtYnVzLmgKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgog
I2luY2x1ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMvX2lvdmVjLmg+CiAKIC8qCiAgKiBW
TUJVUyB2ZXJzaW9uIGlzIDMyIGJpdCwgdXBwZXIgMTYgYml0IGZvciBtYWpvcl9udW1iZXIgYW5k
IGxvd2VyCkBAIC0xMzAsNiArMTMxLDcgQEAKIHN0cnVjdCB0YXNrcXVldWU7CiAKIHR5cGVkZWYg
dm9pZAkoKnZtYnVzX2NoYW5fY2FsbGJhY2tfdCkoc3RydWN0IHZtYnVzX2NoYW5uZWwgKiwgdm9p
ZCAqKTsKK3R5cGVkZWYgaW50CSgqdm1idXNfYnJfY29weV9jYWxsYmFja190KSh2b2lkICosIGlu
dCwgdm9pZCAqKTsKIAogc3RhdGljIF9faW5saW5lIHN0cnVjdCB2bWJ1c19jaGFubmVsICoKIHZt
YnVzX2dldF9jaGFubmVsKGRldmljZV90IGRldikKQEAgLTIwNSw2ICsyMDcsMTQgQEAKIGludAkJ
dm1idXNfY2hhbl9yZWN2X3BrdChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbiwKIAkJICAgIHN0
cnVjdCB2bWJ1c19jaGFucGt0X2hkciAqcGt0LCBpbnQgKnBrdGxlbik7CiAKK2ludAkJdm1idXNf
Y2hhbl9yZWN2X2lkeGFkdihzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbiwKKwkJICAgIHVpbnQz
Ml90IGFkdmFuY2UpOworaW50CQl2bWJ1c19jaGFuX3JlY3ZfcGVlayhzdHJ1Y3Qgdm1idXNfY2hh
bm5lbCAqY2hhbiwKKwkJICAgIHZvaWQgKmRhdGEsIGludCBkYXRhX2xlbiwgdWludDMyX3QgYWR2
YW5jZSk7CitpbnQJCXZtYnVzX2NoYW5fcmVjdl9wZWVrX2NhbGwoc3RydWN0IHZtYnVzX2NoYW5u
ZWwgKmNoYW4sCisJCSAgICBpbnQgZGF0YV9sZW4sIHVpbnQzMl90IHNraXAsCisJCSAgICB2bWJ1
c19icl9jb3B5X2NhbGxiYWNrX3QgY2IsIHZvaWQgKmNiYXJnKTsKKwogaW50CQl2bWJ1c19jaGFu
X3NlbmQoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW4sIHVpbnQxNl90IHR5cGUsCiAJCSAgICB1
aW50MTZfdCBmbGFncywgdm9pZCAqZGF0YSwgaW50IGRsZW4sIHVpbnQ2NF90IHhhY3RpZCk7CiBp
bnQJCXZtYnVzX2NoYW5fc2VuZF9zZ2xpc3Qoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW4sCkBA
IC0yMTMsMTMgKzIyMywzMCBAQAogaW50CQl2bWJ1c19jaGFuX3NlbmRfcHJwbGlzdChzdHJ1Y3Qg
dm1idXNfY2hhbm5lbCAqY2hhbiwKIAkJICAgIHN0cnVjdCB2bWJ1c19ncGFfcmFuZ2UgKnBycCwg
aW50IHBycF9jbnQsIHZvaWQgKmRhdGEsCiAJCSAgICBpbnQgZGxlbiwgdWludDY0X3QgeGFjdGlk
KTsKK2ludAkJdm1idXNfY2hhbl9pb3Zfc2VuZChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbiwK
KwkJICAgIGNvbnN0IHN0cnVjdCBpb3ZlYyBpb3ZbXSwgaW50IGlvdmxlbiwKKwkJICAgIHZtYnVz
X2JyX2NvcHlfY2FsbGJhY2tfdCBjYiwgdm9pZCAqY2JhcmcpOwordWludDMyX3QJdm1idXNfY2hh
bl93cml0ZV9hdmFpbGFibGUoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW4pOwordWludDMyX3QJ
dm1idXNfY2hhbl9yZWFkX2F2YWlsYWJsZShzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbik7Citi
b29sCQl2bWJ1c19jaGFuX3dyaXRlX3NpZ25hbChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbiwK
KwkJICAgIGludDMyX3QgbWluX3NpZ25hbF9zaXplKTsKK3ZvaWQJCXZtYnVzX2NoYW5fc2V0X3Bl
bmRpbmdfc2VuZF9zaXplKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFuLAorCQkgICAgdWludDMy
X3Qgc2l6ZSk7CiAKIHVpbnQzMl90CXZtYnVzX2NoYW5faWQoY29uc3Qgc3RydWN0IHZtYnVzX2No
YW5uZWwgKmNoYW4pOwogdWludDMyX3QJdm1idXNfY2hhbl9zdWJpZHgoY29uc3Qgc3RydWN0IHZt
YnVzX2NoYW5uZWwgKmNoYW4pOwogYm9vbAkJdm1idXNfY2hhbl9pc19wcmltYXJ5KGNvbnN0IHN0
cnVjdCB2bWJ1c19jaGFubmVsICpjaGFuKTsKIGJvb2wJCXZtYnVzX2NoYW5faXNfcmV2b2tlZChj
b25zdCBzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbik7Ci1jb25zdCBzdHJ1Y3QgaHlwZXJ2X2d1
aWQgKgotCQl2bWJ1c19jaGFuX2d1aWRfaW5zdChjb25zdCBzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAq
Y2hhbik7Citib29sCQl2bWJ1c19jaGFuX2lzX2h2cyhjb25zdCBzdHJ1Y3Qgdm1idXNfY2hhbm5l
bCAqY2hhbik7Citib29sCQl2bWJ1c19jaGFuX2lzX2h2c19jb25uX2Zyb21faG9zdCgKKwkJICAg
IGNvbnN0IHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFuKTsKK2ludAkJdm1idXNfcmVxX3RsX2Nv
bm5lY3Qoc3RydWN0IGh5cGVydl9ndWlkICosCisJCSAgICBzdHJ1Y3QgaHlwZXJ2X2d1aWQgKik7
CisKK3N0cnVjdCBoeXBlcnZfZ3VpZCAqCisJCXZtYnVzX2NoYW5fZ3VpZF90eXBlKHN0cnVjdCB2
bWJ1c19jaGFubmVsICpjaGFuKTsKK3N0cnVjdCBoeXBlcnZfZ3VpZCAqCisJCXZtYnVzX2NoYW5f
Z3VpZF9pbnN0KHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFuKTsKIGludAkJdm1idXNfY2hhbl9w
cnBsaXN0X25lbGVtKGludCBicl9zaXplLCBpbnQgcHJwY250X21heCwKIAkJICAgIGludCBkbGVu
X21heCk7CiBib29sCQl2bWJ1c19jaGFuX3J4X2VtcHR5KGNvbnN0IHN0cnVjdCB2bWJ1c19jaGFu
bmVsICpjaGFuKTsKZGlmZiAtLWdpdCBhL2hlYWQvc3lzL2Rldi9oeXBlcnYvaHZzb2NrL2h2X3Nv
Y2suaCBiL2hlYWQvc3lzL2Rldi9oeXBlcnYvaHZzb2NrL2h2X3NvY2suaAotLS0gYS9oZWFkL3N5
cy9kZXYvaHlwZXJ2L2h2c29jay9odl9zb2NrLmgKKysrIGIvaGVhZC9zeXMvZGV2L2h5cGVydi9o
dnNvY2svaHZfc29jay5oCkBAIC0wLDAgKzEsMTIyIEBACisvKi0KKyAqIFNQRFgtTGljZW5zZS1J
ZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtRnJlZUJTRAorICoKKyAqIENvcHlyaWdodCAoYykgMjAy
MCBNaWNyb3NvZnQgQ29ycC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
IHVubW9kaWZpZWQsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZwor
ICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFV
VEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisg
KiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRCQKKyAqLworCisjaWZuZGVmIF9I
VlNPQ0tfSAorI2RlZmluZSBfSFZTT0NLX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5j
bHVkZSA8c3lzL3NvY2tldHZhci5oPgorI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgorCisjaW5jbHVk
ZSA8ZGV2L2h5cGVydi9pbmNsdWRlL2h5cGVydi5oPgorI2luY2x1ZGUgPGRldi9oeXBlcnYvaW5j
bHVkZS92bWJ1cy5oPgorCisvKgorICogSHlwZXJWIFNvY2tldCBQcm90b2NvbHMKKyAqLworI2Rl
ZmluZQlIWVBFUlZfU09DS19QUk9UT19UUkFOUwkJMQkvKiBUcmFuc3BvcnQgcHJvdG9jb2wgKi8K
KworI2RlZmluZQlIVkFERFJfUE9SVF9BTlkJCQktMVUKKyNkZWZpbmUJSFZBRERSX1BPUlRfVU5L
Tk9XTgkJLTFVCisKKyNkZWZpbmUgSFZTX0xJU1RfQk9VTkQJCQkweDAxCisjZGVmaW5lIEhWU19M
SVNUX0NPTk5FQ1RFRAkJMHgwMgorI2RlZmluZSBIVlNfTElTVF9BTEwJCQkoSFZTX0xJU1RfQk9V
TkQgfCBIVlNfTElTVF9DT05ORUNURUQpCisKK3N0cnVjdCBzb2NrYWRkcl9odnMgeworCXVuc2ln
bmVkIGNoYXIJc2FfbGVuOworCXNhX2ZhbWlseV90CXNhX2ZhbWlseTsKKwl1bnNpZ25lZCBpbnQJ
aHZzX3BvcnQ7CisJdW5zaWduZWQgY2hhcglodnNfemVyb1tzaXplb2Yoc3RydWN0IHNvY2thZGRy
KSAtCisJCQkJIHNpemVvZihzYV9mYW1pbHlfdCkgLQorCQkJCSBzaXplb2YodW5zaWduZWQgY2hh
cikgLQorCQkJCSBzaXplb2YodW5zaWduZWQgaW50KV07Cit9OworCitzdHJ1Y3Qgdm1waXBlX3By
b3RvX2hlYWRlciB7CisJdWludDMyX3QJCQl2bXBpcGVfcGt0X3R5cGU7CisJdWludDMyX3QJCQl2
bXBpcGVfZGF0YV9zaXplOworfSBfX3BhY2tlZDsKKworc3RydWN0IGh2c19wa3RfaGVhZGVyIHsK
KwlzdHJ1Y3Qgdm1idXNfY2hhbnBrdF9oZHIJY2hhbl9wa3RfaGRyOworCXN0cnVjdCB2bXBpcGVf
cHJvdG9faGVhZGVyCXZtcGlwZV9wa3RfaGRyOworfSBfX3BhY2tlZDsKKworc3RydWN0IGh2c19w
Y2IgeworCXN0cnVjdCBzb2NrZXQJCQkqc287CQkvKiBQb2ludGVyIHRvIHNvY2tldCAqLworCXN0
cnVjdCBzb2NrYWRkcl9odnMJCWxvY2FsX2FkZHI7CisJc3RydWN0IHNvY2thZGRyX2h2cwkJcmVt
b3RlX2FkZHI7CisKKwlzdHJ1Y3QgaHlwZXJ2X2d1aWQJCXZtX3Nydl9pZDsKKwlzdHJ1Y3QgaHlw
ZXJ2X2d1aWQJCWhvc3Rfc3J2X2lkOworCisJc3RydWN0IHZtYnVzX2NoYW5uZWwJCSpjaGFuOwor
CS8qIEN1cnJlbnQgcGFja2V0IGhlYWRlciBvbiByeCByaW5nICovCisJc3RydWN0IGh2c19wa3Rf
aGVhZGVyCQlodnNfcGt0OworCS8qIEF2YWlsYWJsZSBkYXRhIGluIHJlY2VpdmUgYnIgaW4gY3Vy
cmVudCBwYWNrZXQgKi8KKwl1aW50MzJfdAkJCXJlY3ZfZGF0YV9sZW47CisJLyogb2Zmc2V0IGlu
IHRoZSBwYWNrZXQgKi8KKwl1aW50MzJfdAkJCXJlY3ZfZGF0YV9vZmY7CisJYm9vbAkJCQlyYl9p
bml0OworCS8qIExpbmsgbGlzdHMgZm9yIGdsb2JhbCBib3VuZCBhbmQgY29ubmVjdGVkIHNvY2tl
dHMgKi8KKwlMSVNUX0VOVFJZKGh2c19wY2IpCQlib3VuZF9uZXh0OworCUxJU1RfRU5UUlkoaHZz
X3BjYikJCWNvbm5lY3RlZF9uZXh0OworfTsKKworI2RlZmluZSBzbzJodnNwY2Ioc28pIFwKKwko
KHN0cnVjdCBodnNfcGNiICopKChzbyktPnNvX3BjYikpCisjZGVmaW5lIGhzdnBjYjJzbyhodnNw
Y2IpIFwKKwkoKHN0cnVjdCBzb2NrZXQgKikoKGh2c3BjYiktPnNvKSkKKwordm9pZAlodnNfYWRk
cl9pbml0KHN0cnVjdCBzb2NrYWRkcl9odnMgKiwgY29uc3Qgc3RydWN0IGh5cGVydl9ndWlkICop
Owordm9pZAlodnNfdHJhbnNfaW5pdCh2b2lkKTsKK3ZvaWQJaHZzX3RyYW5zX2Nsb3NlKHN0cnVj
dCBzb2NrZXQgKik7Cit2b2lkCWh2c190cmFuc19kZXRhY2goc3RydWN0IHNvY2tldCAqKTsKK3Zv
aWQJaHZzX3RyYW5zX2Fib3J0KHN0cnVjdCBzb2NrZXQgKik7CitpbnQJaHZzX3RyYW5zX2F0dGFj
aChzdHJ1Y3Qgc29ja2V0ICosIGludCwgc3RydWN0IHRocmVhZCAqKTsKK2ludAlodnNfdHJhbnNf
YmluZChzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCBzb2NrYWRkciAqLCBzdHJ1Y3QgdGhyZWFkICop
OworaW50CWh2c190cmFuc19saXN0ZW4oc3RydWN0IHNvY2tldCAqLCBpbnQsIHN0cnVjdCB0aHJl
YWQgKik7CitpbnQJaHZzX3RyYW5zX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCBzb2Nr
YWRkciAqKik7CitpbnQJaHZzX3RyYW5zX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqLAorCSAgICBz
dHJ1Y3Qgc29ja2FkZHIgKiwgc3RydWN0IHRocmVhZCAqKTsKK2ludAlodnNfdHJhbnNfcGVlcmFk
ZHIoc3RydWN0IHNvY2tldCAqLCBzdHJ1Y3Qgc29ja2FkZHIgKiopOworaW50CWh2c190cmFuc19z
b2NrYWRkcihzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCBzb2NrYWRkciAqKik7CitpbnQJaHZzX3Ry
YW5zX3NvcmVjZWl2ZShzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCBzb2NrYWRkciAqKiwKKwkgICAg
c3RydWN0IHVpbyAqLCBzdHJ1Y3QgbWJ1ZiAqKiwgc3RydWN0IG1idWYgKiosIGludCAqKTsKK2lu
dAlodnNfdHJhbnNfc29zZW5kKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IHNvY2thZGRyICosIHN0
cnVjdCB1aW8gKiwKKwkgICAgIHN0cnVjdCBtYnVmICosIHN0cnVjdCBtYnVmICosIGludCwgc3Ry
dWN0IHRocmVhZCAqKTsKK2ludAlodnNfdHJhbnNfZGlzY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICop
OworaW50CWh2c190cmFuc19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICopOworCitpbnQJaHZzX3Ry
YW5zX2xvY2sodm9pZCk7Cit2b2lkCWh2c190cmFuc191bmxvY2sodm9pZCk7CisKK3ZvaWQJaHZz
X3JlbW92ZV9zb2NrZXRfZnJvbV9saXN0KHN0cnVjdCBzb2NrZXQgKiwgdW5zaWduZWQgY2hhcik7
CisjZW5kaWYgLyogX0hWU09DS19IICovCmRpZmYgLS1naXQgYS9oZWFkL3N5cy9kZXYvaHlwZXJ2
L2h2c29jay9odl9zb2NrLmMgYi9oZWFkL3N5cy9kZXYvaHlwZXJ2L2h2c29jay9odl9zb2NrLmMK
LS0tIGEvaGVhZC9zeXMvZGV2L2h5cGVydi9odnNvY2svaHZfc29jay5jCisrKyBiL2hlYWQvc3lz
L2Rldi9oeXBlcnYvaHZzb2NrL2h2X3NvY2suYwpAQCAtMCwwICsxLDE3NDggQEAKKy8qLQorICog
U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1GcmVlQlNECisgKgorICogQ29w
eXJpZ2h0IChjKSAyMDIwIE1pY3Jvc29mdCBDb3JwLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UgdW5tb2RpZmllZCwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0
aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
QVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMv
Y2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5o
PgorI2luY2x1ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMvZG9tYWluLmg+CisjaW5jbHVk
ZSA8c3lzL2xvY2suaD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8c3lzL3R5
cGVzLmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgorI2luY2x1ZGUgPHN5cy9tb2R1bGUuaD4K
KyNpbmNsdWRlIDxzeXMvbXV0ZXguaD4KKyNpbmNsdWRlIDxzeXMvcHJvYy5oPgorI2luY2x1ZGUg
PHN5cy9wcm90b3N3Lmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy9z
eXNjdGwuaD4KKyNpbmNsdWRlIDxzeXMvc3lzcHJvdG8uaD4KKyNpbmNsdWRlIDxzeXMvc3lzdG0u
aD4KKyNpbmNsdWRlIDxzeXMvc29ja2J1Zi5oPgorI2luY2x1ZGUgPHN5cy9zeC5oPgorI2luY2x1
ZGUgPHN5cy91aW8uaD4KKworI2luY2x1ZGUgPG5ldC92bmV0Lmg+CisKKyNpbmNsdWRlIDxkZXYv
aHlwZXJ2L3ZtYnVzL3ZtYnVzX3JlZy5oPgorCisjaW5jbHVkZSAiaHZfc29jay5oIgorCisjZGVm
aW5lIEhWU09DS19EQkdfTk9ORQkJCTB4MAorI2RlZmluZSBIVlNPQ0tfREJHX0lORk8JCQkweDEK
KyNkZWZpbmUgSFZTT0NLX0RCR19FUlIJCQkweDIKKyNkZWZpbmUgSFZTT0NLX0RCR19WRVJCT1NF
CQkweDMKKworCitTWVNDVExfTk9ERShfbmV0LCBPSURfQVVUTywgaHZzb2NrLCBDVExGTEFHX1JE
LCAwLCAiSHlwZXJWIHNvY2tldCIpOworCitzdGF0aWMgaW50IGh2c19kYmdfbGV2ZWw7CitTWVND
VExfSU5UKF9uZXRfaHZzb2NrLCBPSURfQVVUTywgaHZzX2RiZ19sZXZlbCwgQ1RMRkxBR19SV1RV
TiwgJmh2c19kYmdfbGV2ZWwsCisgICAgMCwgImh5cGVydiBzb2NrZXQgZGVidWcgbGV2ZWw6IDAg
PSBub25lLCAxID0gaW5mbywgMiA9IGVycm9yLCAzID0gdmVyYm9zZSIpOworCisKKyNkZWZpbmUg
SFZTT0NLX0RCRyhsZXZlbCwgLi4uKSBkbyB7CQkJCQlcCisJaWYgKGh2c19kYmdfbGV2ZWwgPj0g
KGxldmVsKSkJCQkJCVwKKwkJcHJpbnRmKF9fVkFfQVJHU19fKTsJCQkJCVwKKwl9IHdoaWxlICgw
KQorCitNQUxMT0NfREVGSU5FKE1fSFZTT0NLLCAiaHlwZXJ2X3NvY2tldCIsICJoeXBlcnYgc29j
a2V0IGNvbnRyb2wgc3RydWN0dXJlcyIpOworCisvKiBUaGUgTVRVIGlzIDE2S0IgcGVyIGhvc3Qg
c2lkZSdzIGRlc2lnbiAqLworI2RlZmluZSBIVlNPQ0tfTVRVX1NJWkUJCSgxMDI0ICogMTYpCisj
ZGVmaW5lIEhWU09DS19TRU5EX0JVRl9TWgkoUEFHRV9TSVpFIC0gc2l6ZW9mKHN0cnVjdCB2bXBp
cGVfcHJvdG9faGVhZGVyKSkKKworI2RlZmluZSBIVlNPQ0tfSEVBREVSX0xFTgkoc2l6ZW9mKHN0
cnVjdCBodnNfcGt0X2hlYWRlcikpCisKKyNkZWZpbmUgSFZTT0NLX1BLVF9MRU4ocGF5bG9hZF9s
ZW4pCShIVlNPQ0tfSEVBREVSX0xFTiArIFwKKwkJCQkJIHJvdW5kdXAyKHBheWxvYWRfbGVuLCA4
KSArIFwKKwkJCQkJIHNpemVvZih1aW50NjRfdCkpCisKKworc3RhdGljIHN0cnVjdCBkb21haW4J
CWh2X3NvY2tldF9kb21haW47CisKKy8qCisgKiBIeXBlclYgVHJhbnNwb3J0IHNvY2tldHMKKyAq
Lworc3RhdGljIHN0cnVjdCBwcl91c3JyZXFzCWh2c190cmFuc191c3JyZXFzID0geworCS5wcnVf
YXR0YWNoID0JCWh2c190cmFuc19hdHRhY2gsCisJLnBydV9iaW5kID0JCWh2c190cmFuc19iaW5k
LAorCS5wcnVfbGlzdGVuID0JCWh2c190cmFuc19saXN0ZW4sCisJLnBydV9hY2NlcHQgPQkJaHZz
X3RyYW5zX2FjY2VwdCwKKwkucHJ1X2Nvbm5lY3QgPQkJaHZzX3RyYW5zX2Nvbm5lY3QsCisJLnBy
dV9wZWVyYWRkciA9CQlodnNfdHJhbnNfcGVlcmFkZHIsCisJLnBydV9zb2NrYWRkciA9CQlodnNf
dHJhbnNfc29ja2FkZHIsCisJLnBydV9zb3JlY2VpdmUgPQlodnNfdHJhbnNfc29yZWNlaXZlLAor
CS5wcnVfc29zZW5kID0JCWh2c190cmFuc19zb3NlbmQsCisJLnBydV9kaXNjb25uZWN0ID0JaHZz
X3RyYW5zX2Rpc2Nvbm5lY3QsCisJLnBydV9jbG9zZSA9CQlodnNfdHJhbnNfY2xvc2UsCisJLnBy
dV9kZXRhY2ggPQkJaHZzX3RyYW5zX2RldGFjaCwKKwkucHJ1X3NodXRkb3duID0JCWh2c190cmFu
c19zaHV0ZG93biwKKwkucHJ1X2Fib3J0ID0JCWh2c190cmFuc19hYm9ydCwKK307CisKKy8qCisg
KiBEZWZpbml0aW9ucyBvZiBwcm90b2NvbHMgc3VwcG9ydGVkIGluIEh5cGVyViBzb2NrZXQgZG9t
YWluCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcHJvdG9zdwkJaHZfc29ja2V0X3Byb3Rvc3dbXSA9IHsK
K3sKKwkucHJfdHlwZSA9CQlTT0NLX1NUUkVBTSwKKwkucHJfZG9tYWluID0JCSZodl9zb2NrZXRf
ZG9tYWluLAorCS5wcl9wcm90b2NvbCA9CQlIWVBFUlZfU09DS19QUk9UT19UUkFOUywKKwkucHJf
ZmxhZ3MgPQkJUFJfQ09OTlJFUVVJUkVELAorCS5wcl9pbml0ID0JCWh2c190cmFuc19pbml0LAor
CS5wcl91c3JyZXFzID0JCSZodnNfdHJhbnNfdXNycmVxcywKK30sCit9OworCitzdGF0aWMgc3Ry
dWN0IGRvbWFpbgkJaHZfc29ja2V0X2RvbWFpbiA9IHsKKwkuZG9tX2ZhbWlseSA9CQlBRl9IWVBF
UlYsCisJLmRvbV9uYW1lID0JCSJoeXBlcnYiLAorCS5kb21fcHJvdG9zdyA9CQlodl9zb2NrZXRf
cHJvdG9zdywKKwkuZG9tX3Byb3Rvc3dOUFJPVE9TVyA9CSZodl9zb2NrZXRfcHJvdG9zd1tuaXRl
bXMoaHZfc29ja2V0X3Byb3Rvc3cpXQorfTsKKworVk5FVF9ET01BSU5fU0VUKGh2X3NvY2tldF8p
OworCisjZGVmaW5lIE1BWF9QT1JUCQkJKCh1aW50MzJfdCkweEZGRkZGRkZGKQorI2RlZmluZSBN
SU5fUE9SVAkJCSgodWludDMyX3QpMHgwKQorCisvKiAwMDAwMDAwMC1mYWNiLTExZTYtYmQ1OC02
NDAwNmE3OTg2ZDMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHlwZXJ2X2d1aWQgc3J2X2lkX3Rl
bXBsYXRlID0geworCS5odl9ndWlkID0geworCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw
eGNiLCAweGZhLCAweGU2LCAweDExLAorCSAgICAweGJkLCAweDU4LCAweDY0LCAweDAwLCAweDZh
LCAweDc5LCAweDg2LCAweGQzIH0KK307CisKK3N0YXRpYyBpbnQJCWh2c29ja19icl9jYWxsYmFj
ayh2b2lkICosIGludCwgdm9pZCAqKTsKK3N0YXRpYyB1aW50MzJfdAkJaHZzb2NrX2NhbnJlYWRf
Y2hlY2soc3RydWN0IGh2c19wY2IgKik7CitzdGF0aWMgdWludDMyX3QJCWh2c29ja19jYW53cml0
ZV9jaGVjayhzdHJ1Y3QgaHZzX3BjYiAqKTsKK3N0YXRpYyBpbnQJCWh2c29ja19zZW5kX2RhdGEo
c3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW4sCisgICAgc3RydWN0IHVpbyAqdWlvLCB1aW50MzJf
dCB0b193cml0ZSwgc3RydWN0IHNvY2tidWYgKnNiKTsKKworCisKKy8qIEdsb2JhbHMgKi8KK3N0
YXRpYyBzdHJ1Y3Qgc3gJCWh2c190cmFuc19zb2Nrc19zeDsKK3N0YXRpYyBzdHJ1Y3QgbXR4CQlo
dnNfdHJhbnNfc29ja3NfbXR4Oworc3RhdGljIExJU1RfSEVBRCgsIGh2c19wY2IpCWh2c190cmFu
c19ib3VuZF9zb2NrczsKK3N0YXRpYyBMSVNUX0hFQUQoLCBodnNfcGNiKQlodnNfdHJhbnNfY29u
bmVjdGVkX3NvY2tzOworc3RhdGljIHVpbnQzMl90CQkJcHJldmlvdXNfYXV0b19ib3VuZF9wb3J0
OworCitzdGF0aWMgdm9pZAoraHZzb2NrX3ByaW50X2d1aWQoc3RydWN0IGh5cGVydl9ndWlkICpn
dWlkKQoreworCXVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciAqKWd1aWQ7CisKKwlI
VlNPQ0tfREJHKEhWU09DS19EQkdfSU5GTywKKwkgICAgIjB4JXgtMHgleC0weCV4LTB4JXgtMHgl
eC0weCV4LTB4JXgtMHgleC0weCV4LTB4JXgtMHgleFxuIiwKKwkgICAgKih1bnNpZ25lZCBpbnQg
KilwLAorCSAgICAqKCh1bnNpZ25lZCBzaG9ydCAqKSAmcFs0XSksCisJICAgICooKHVuc2lnbmVk
IHNob3J0ICopICZwWzZdKSwKKwkgICAgcFs4XSwgcFs5XSwgcFsxMF0sIHBbMTFdLCBwWzEyXSwg
cFsxM10sIHBbMTRdLCBwWzE1XSk7Cit9CisKK3N0YXRpYyBib29sCitpc192YWxpZF9zcnZfaWQo
Y29uc3Qgc3RydWN0IGh5cGVydl9ndWlkICppZCkKK3sKKwlyZXR1cm4gIW1lbWNtcCgmaWQtPmh2
X2d1aWRbNF0sCisJICAgICZzcnZfaWRfdGVtcGxhdGUuaHZfZ3VpZFs0XSwgc2l6ZW9mKHN0cnVj
dCBoeXBlcnZfZ3VpZCkgLSA0KTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAorZ2V0X3BvcnRf
Ynlfc3J2X2lkKGNvbnN0IHN0cnVjdCBoeXBlcnZfZ3VpZCAqc3J2X2lkKQoreworCXJldHVybiAq
KChjb25zdCB1bnNpZ25lZCBpbnQgKilzcnZfaWQpOworfQorCitzdGF0aWMgdm9pZAorc2V0X3Bv
cnRfYnlfc3J2X2lkKHN0cnVjdCBoeXBlcnZfZ3VpZCAqc3J2X2lkLCB1bnNpZ25lZCBpbnQgcG9y
dCkKK3sKKwkqKCh1bnNpZ25lZCBpbnQgKilzcnZfaWQpID0gcG9ydDsKK30KKworCitzdGF0aWMg
dm9pZAorX19odnNfcmVtb3ZlX3BjYl9mcm9tX2xpc3Qoc3RydWN0IGh2c19wY2IgKnBjYiwgdW5z
aWduZWQgY2hhciBsaXN0KQoreworCXN0cnVjdCBodnNfcGNiICpwID0gTlVMTDsKKworCUhWU09D
S19EQkcoSFZTT0NLX0RCR19WRVJCT1NFLCAiJXM6IHBjYiBpcyAlcFxuIiwgX19mdW5jX18sIHBj
Yik7CisKKwlpZiAoIXBjYikKKwkJcmV0dXJuOworCisJaWYgKGxpc3QgJiBIVlNfTElTVF9CT1VO
RCkgeworCQlMSVNUX0ZPUkVBQ0gocCwgJmh2c190cmFuc19ib3VuZF9zb2NrcywgYm91bmRfbmV4
dCkKKwkJCWlmICAocCA9PSBwY2IpCisJCQkJTElTVF9SRU1PVkUocCwgYm91bmRfbmV4dCk7CisJ
fQorCisJaWYgKGxpc3QgJiBIVlNfTElTVF9DT05ORUNURUQpIHsKKwkJTElTVF9GT1JFQUNIKHAs
ICZodnNfdHJhbnNfY29ubmVjdGVkX3NvY2tzLCBjb25uZWN0ZWRfbmV4dCkKKwkJCWlmIChwID09
IHBjYikKKwkJCQlMSVNUX1JFTU9WRShwY2IsIGNvbm5lY3RlZF9uZXh0KTsKKwl9Cit9CisKK3N0
YXRpYyB2b2lkCitfX2h2c19yZW1vdmVfc29ja2V0X2Zyb21fbGlzdChzdHJ1Y3Qgc29ja2V0ICpz
bywgdW5zaWduZWQgY2hhciBsaXN0KQoreworCXN0cnVjdCBodnNfcGNiICpwY2IgPSBzbzJodnNw
Y2Ioc28pOworCisJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX1ZFUkJPU0UsICIlczogcGNiIGlzICVw
XG4iLCBfX2Z1bmNfXywgcGNiKTsKKworCV9faHZzX3JlbW92ZV9wY2JfZnJvbV9saXN0KHBjYiwg
bGlzdCk7Cit9CisKK3N0YXRpYyB2b2lkCitfX2h2c19pbnNlcnRfc29ja2V0X29uX2xpc3Qoc3Ry
dWN0IHNvY2tldCAqc28sIHVuc2lnbmVkIGNoYXIgbGlzdCkKK3sKKwlzdHJ1Y3QgaHZzX3BjYiAq
cGNiID0gc28yaHZzcGNiKHNvKTsKKworCWlmIChsaXN0ICYgSFZTX0xJU1RfQk9VTkQpCisJCUxJ
U1RfSU5TRVJUX0hFQUQoJmh2c190cmFuc19ib3VuZF9zb2NrcywKKwkJICAgcGNiLCBib3VuZF9u
ZXh0KTsKKworCWlmIChsaXN0ICYgSFZTX0xJU1RfQ09OTkVDVEVEKQorCQlMSVNUX0lOU0VSVF9I
RUFEKCZodnNfdHJhbnNfY29ubmVjdGVkX3NvY2tzLAorCQkgICBwY2IsIGNvbm5lY3RlZF9uZXh0
KTsKK30KKwordm9pZAoraHZzX3JlbW92ZV9zb2NrZXRfZnJvbV9saXN0KHN0cnVjdCBzb2NrZXQg
KnNvLCB1bnNpZ25lZCBjaGFyIGxpc3QpCit7CisJaWYgKCFzbyB8fCAhc28tPnNvX3BjYikgewor
CQlIVlNPQ0tfREJHKEhWU09DS19EQkdfVkVSQk9TRSwKKwkJICAgICIlczogc29ja2V0IG9yIHNv
X3BjYiBpcyBudWxsXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwltdHhfbG9jaygm
aHZzX3RyYW5zX3NvY2tzX210eCk7CisJX19odnNfcmVtb3ZlX3NvY2tldF9mcm9tX2xpc3Qoc28s
IGxpc3QpOworCW10eF91bmxvY2soJmh2c190cmFuc19zb2Nrc19tdHgpOworfQorCitzdGF0aWMg
dm9pZAoraHZzX2luc2VydF9zb2NrZXRfb25fbGlzdChzdHJ1Y3Qgc29ja2V0ICpzbywgdW5zaWdu
ZWQgY2hhciBsaXN0KQoreworCWlmICghc28gfHwgIXNvLT5zb19wY2IpIHsKKwkJSFZTT0NLX0RC
RyhIVlNPQ0tfREJHX1ZFUkJPU0UsCisJCSAgICAiJXM6IHNvY2tldCBvciBzb19wY2IgaXMgbnVs
bFxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJbXR4X2xvY2soJmh2c190cmFuc19z
b2Nrc19tdHgpOworCV9faHZzX2luc2VydF9zb2NrZXRfb25fbGlzdChzbywgbGlzdCk7CisJbXR4
X3VubG9jaygmaHZzX3RyYW5zX3NvY2tzX210eCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc29ja2V0
ICoKK19faHZzX2ZpbmRfc29ja2V0X29uX2xpc3Qoc3RydWN0IHNvY2thZGRyX2h2cyAqYWRkciwg
dW5zaWduZWQgY2hhciBsaXN0KQoreworCXN0cnVjdCBodnNfcGNiICpwID0gTlVMTDsKKworCWlm
IChsaXN0ICYgSFZTX0xJU1RfQk9VTkQpCisJCUxJU1RfRk9SRUFDSChwLCAmaHZzX3RyYW5zX2Jv
dW5kX3NvY2tzLCBib3VuZF9uZXh0KQorCQkJaWYgKHAtPnNvICE9IE5VTEwgJiYKKwkJCSAgICBh
ZGRyLT5odnNfcG9ydCA9PSBwLT5sb2NhbF9hZGRyLmh2c19wb3J0KQorCQkJCXJldHVybiBwLT5z
bzsKKworCWlmIChsaXN0ICYgSFZTX0xJU1RfQ09OTkVDVEVEKQorCQlMSVNUX0ZPUkVBQ0gocCwg
Jmh2c190cmFuc19jb25uZWN0ZWRfc29ja3MsIGNvbm5lY3RlZF9uZXh0KQorCQkJaWYgKHAtPnNv
ICE9IE5VTEwgJiYKKwkJCSAgICBhZGRyLT5odnNfcG9ydCA9PSBwLT5sb2NhbF9hZGRyLmh2c19w
b3J0KQorCQkJCXJldHVybiBwLT5zbzsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3Ry
dWN0IHNvY2tldCAqCitodnNfZmluZF9zb2NrZXRfb25fbGlzdChzdHJ1Y3Qgc29ja2FkZHJfaHZz
ICphZGRyLCB1bnNpZ25lZCBjaGFyIGxpc3QpCit7CisJc3RydWN0IHNvY2tldCAqcyA9IE5VTEw7
CisKKwltdHhfbG9jaygmaHZzX3RyYW5zX3NvY2tzX210eCk7CisJcyA9IF9faHZzX2ZpbmRfc29j
a2V0X29uX2xpc3QoYWRkciwgbGlzdCk7CisJbXR4X3VubG9jaygmaHZzX3RyYW5zX3NvY2tzX210
eCk7CisKKwlyZXR1cm4gczsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitodnNfYWRkcl9zZXQo
c3RydWN0IHNvY2thZGRyX2h2cyAqYWRkciwgdW5zaWduZWQgaW50IHBvcnQpCit7CisJbWVtc2V0
KGFkZHIsIDAsIHNpemVvZigqYWRkcikpOworCWFkZHItPnNhX2ZhbWlseSA9IEFGX0hZUEVSVjsK
KwlhZGRyLT5odnNfcG9ydCA9IHBvcnQ7Cit9CisKK3ZvaWQKK2h2c19hZGRyX2luaXQoc3RydWN0
IHNvY2thZGRyX2h2cyAqYWRkciwgY29uc3Qgc3RydWN0IGh5cGVydl9ndWlkICpzdnJfaWQpCit7
CisJaHZzX2FkZHJfc2V0KGFkZHIsIGdldF9wb3J0X2J5X3Nydl9pZChzdnJfaWQpKTsKK30KKwor
aW50CitodnNfdHJhbnNfbG9jayh2b2lkKQoreworCXN4X3hsb2NrKCZodnNfdHJhbnNfc29ja3Nf
c3gpOworCXJldHVybiAoMCk7Cit9CisKK3ZvaWQKK2h2c190cmFuc191bmxvY2sodm9pZCkKK3sK
KwlzeF94dW5sb2NrKCZodnNfdHJhbnNfc29ja3Nfc3gpOworfQorCit2b2lkCitodnNfdHJhbnNf
aW5pdCh2b2lkKQoreworCS8qIFNraXAgaW5pdGlhbGl6YXRpb24gb2YgZ2xvYmFscyBmb3Igbm9u
LWRlZmF1bHQgaW5zdGFuY2VzLiAqLworCWlmICghSVNfREVGQVVMVF9WTkVUKGN1cnZuZXQpKQor
CQlyZXR1cm47CisKKwlpZiAodm1fZ3Vlc3QgIT0gVk1fR1VFU1RfSFYpCisJCXJldHVybjsKKwor
CUhWU09DS19EQkcoSFZTT0NLX0RCR19WRVJCT1NFLAorCSAgICAiJXM6IEh5cGVyViBTb2NrZXQg
aHZzX3RyYW5zX2luaXQgY2FsbGVkXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBJbml0aWFsaXplIEds
b2JhbHMgKi8KKwlwcmV2aW91c19hdXRvX2JvdW5kX3BvcnQgPSBNQVhfUE9SVDsKKwlzeF9pbml0
KCZodnNfdHJhbnNfc29ja3Nfc3gsICJodnNfdHJhbnNfc29ja19zeCIpOworCW10eF9pbml0KCZo
dnNfdHJhbnNfc29ja3NfbXR4LAorCSAgICAiaHZzX3RyYW5zX3NvY2tzX210eCIsIE5VTEwsIE1U
WF9ERUYpOworCUxJU1RfSU5JVCgmaHZzX3RyYW5zX2JvdW5kX3NvY2tzKTsKKwlMSVNUX0lOSVQo
Jmh2c190cmFuc19jb25uZWN0ZWRfc29ja3MpOworfQorCisvKgorICogQ2FsbGVkIGluIHR3byBj
YXNlczoKKyAqIDEpIFdoZW4gdXNlciBjYWxscyBzb2NrZXQoKTsKKyAqIDIpIFdoZW4gd2UgYWNj
ZXB0IG5ldyBpbmNvbWluZyBjb25uZWNpdG9uIGFuZCBjYWxsIHNvbmV3Y29ubigpLgorICovCitp
bnQKK2h2c190cmFuc19hdHRhY2goc3RydWN0IHNvY2tldCAqc28sIGludCBwcm90bywgc3RydWN0
IHRocmVhZCAqdGQpCit7CisJc3RydWN0IGh2c19wY2IgKnBjYiA9IHNvMmh2c3BjYihzbyk7CisK
KwlIVlNPQ0tfREJHKEhWU09DS19EQkdfVkVSQk9TRSwKKwkgICAgIiVzOiBIeXBlclYgU29ja2V0
IGh2c190cmFuc19hdHRhY2ggY2FsbGVkXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoc28tPnNvX3R5
cGUgIT0gU09DS19TVFJFQU0pCisJCXJldHVybiAoRVNPQ0tUTk9TVVBQT1JUKTsKKworCWlmIChw
cm90byAhPSAwICYmIHByb3RvICE9IEhZUEVSVl9TT0NLX1BST1RPX1RSQU5TKQorCQlyZXR1cm4g
KEVQUk9UT05PU1VQUE9SVCk7CisKKwlpZiAocGNiICE9IE5VTEwpCisJCXJldHVybiAoRUlTQ09O
Tik7CisJcGNiID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgaHZzX3BjYiksIE1fSFZTT0NLLCBNX05P
V0FJVCB8IE1fWkVSTyk7CisJaWYgKHBjYiA9PSBOVUxMKQorCQlyZXR1cm4gKEVOT01FTSk7CisK
KwlwY2ItPnNvID0gc287CisJc28tPnNvX3BjYiA9ICh2b2lkICopcGNiOworCisJcmV0dXJuICgw
KTsKK30KKwordm9pZAoraHZzX3RyYW5zX2RldGFjaChzdHJ1Y3Qgc29ja2V0ICpzbykKK3sKKwlz
dHJ1Y3QgaHZzX3BjYiAqcGNiOworCisJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX1ZFUkJPU0UsCisJ
ICAgICIlczogSHlwZXJWIFNvY2tldCBodnNfdHJhbnNfZGV0YWNoIGNhbGxlZFxuIiwgX19mdW5j
X18pOworCisJKHZvaWQpIGh2c190cmFuc19sb2NrKCk7CisJcGNiID0gc28yaHZzcGNiKHNvKTsK
KwlpZiAocGNiID09IE5VTEwpIHsKKwkJaHZzX3RyYW5zX3VubG9jaygpOworCQlyZXR1cm47CisJ
fQorCisJaWYgKFNPTElTVEVOSU5HKHNvKSkgeworCQliemVybyhwY2IsIHNpemVvZigqcGNiKSk7
CisJCWZyZWUocGNiLCBNX0hWU09DSyk7CisJfQorCisJc28tPnNvX3BjYiA9IE5VTEw7CisKKwlo
dnNfdHJhbnNfdW5sb2NrKCk7Cit9CisKK2ludAoraHZzX3RyYW5zX2JpbmQoc3RydWN0IHNvY2tl
dCAqc28sIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc3RydWN0IHRocmVhZCAqdGQpCit7CisJc3Ry
dWN0IGh2c19wY2IgKnBjYiA9IHNvMmh2c3BjYihzbyk7CisJc3RydWN0IHNvY2thZGRyX2h2cyAq
c2EgPSAoc3RydWN0IHNvY2thZGRyX2h2cyAqKSBhZGRyOworCWludCBlcnJvciA9IDA7CisKKwlI
VlNPQ0tfREJHKEhWU09DS19EQkdfVkVSQk9TRSwKKwkgICAgIiVzOiBIeXBlclYgU29ja2V0IGh2
c190cmFuc19iaW5kIGNhbGxlZFxuIiwgX19mdW5jX18pOworCisJaWYgKHNhID09IE5VTEwpIHsK
KwkJcmV0dXJuIChFSU5WQUwpOworCX0KKworCWlmIChwY2IgPT0gTlVMTCkgeworCQlyZXR1cm4g
KEVJTlZBTCk7CisJfQorCisJaWYgKHNhLT5zYV9mYW1pbHkgIT0gQUZfSFlQRVJWKSB7CisJCUhW
U09DS19EQkcoSFZTT0NLX0RCR19FUlIsCisJCSAgICAiJXM6IE5vdCBzdXBwb3J0ZWQsIHNhX2Zh
bWlseSBpcyAldVxuIiwKKwkJICAgIF9fZnVuY19fLCBzYS0+c2FfZmFtaWx5KTsKKwkJcmV0dXJu
IChFQUZOT1NVUFBPUlQpOworCX0KKworCUhWU09DS19EQkcoSFZTT0NLX0RCR19WRVJCT1NFLAor
CSAgICAiJXM6IGJpbmRpbmcgcG9ydCA9IDB4JXhcbiIsIF9fZnVuY19fLCBzYS0+aHZzX3BvcnQp
OworCisJbXR4X2xvY2soJmh2c190cmFuc19zb2Nrc19tdHgpOworCWlmIChfX2h2c19maW5kX3Nv
Y2tldF9vbl9saXN0KHNhLAorCSAgICBIVlNfTElTVF9CT1VORCB8IEhWU19MSVNUX0NPTk5FQ1RF
RCkpIHsKKwkJZXJyb3IgPSBFQUREUklOVVNFOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFRoZSBh
ZGRyZXNzIGlzIGF2YWlsYWJsZSBmb3IgdXMgdG8gYmluZC4KKwkJICogQWRkIHNvY2tldCB0byB0
aGUgYm91bmQgbGlzdC4KKwkJICovCisJCWh2c19hZGRyX3NldCgmcGNiLT5sb2NhbF9hZGRyLCBz
YS0+aHZzX3BvcnQpOworCQlodnNfYWRkcl9zZXQoJnBjYi0+cmVtb3RlX2FkZHIsIEhWQUREUl9Q
T1JUX0FOWSk7CisJCV9faHZzX2luc2VydF9zb2NrZXRfb25fbGlzdChzbywgSFZTX0xJU1RfQk9V
TkQpOworCX0KKwltdHhfdW5sb2NrKCZodnNfdHJhbnNfc29ja3NfbXR4KTsKKworCXJldHVybiAo
ZXJyb3IpOworfQorCitpbnQKK2h2c190cmFuc19saXN0ZW4oc3RydWN0IHNvY2tldCAqc28sIGlu
dCBiYWNrbG9nLCBzdHJ1Y3QgdGhyZWFkICp0ZCkKK3sKKwlzdHJ1Y3QgaHZzX3BjYiAqcGNiID0g
c28yaHZzcGNiKHNvKTsKKwlzdHJ1Y3Qgc29ja2V0ICpib3VuZF9zbzsKKwlpbnQgZXJyb3I7CisK
KwlIVlNPQ0tfREJHKEhWU09DS19EQkdfVkVSQk9TRSwKKwkgICAgIiVzOiBIeXBlclYgU29ja2V0
IGh2c190cmFuc19saXN0ZW4gY2FsbGVkXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAocGNiID09IE5V
TEwpCisJCXJldHVybiAoRUlOVkFMKTsKKworCS8qIENoZWNrIGlmIHRoZSBhZGRyZXNzIGlzIGFs
cmVhZHkgYm91bmQgYW5kIGl0IHdhcyBieSB1cy4gKi8KKwlib3VuZF9zbyA9IGh2c19maW5kX3Nv
Y2tldF9vbl9saXN0KCZwY2ItPmxvY2FsX2FkZHIsIEhWU19MSVNUX0JPVU5EKTsKKwlpZiAoYm91
bmRfc28gPT0gTlVMTCB8fCBib3VuZF9zbyAhPSBzbykgeworCQlIVlNPQ0tfREJHKEhWU09DS19E
QkdfRVJSLAorCQkgICAgIiVzOiBBZGRyZXNzIG5vdCBib3VuZCBvciBub3QgYnkgdXMuXG4iLCBf
X2Z1bmNfXyk7CisJCXJldHVybiAoRUFERFJOT1RBVkFJTCk7CisJfQorCisJU09DS19MT0NLKHNv
KTsKKwllcnJvciA9IHNvbGlzdGVuX3Byb3RvX2NoZWNrKHNvKTsKKwlpZiAoZXJyb3IgPT0gMCkK
KwkJc29saXN0ZW5fcHJvdG8oc28sIGJhY2tsb2cpOworCVNPQ0tfVU5MT0NLKHNvKTsKKworCUhW
U09DS19EQkcoSFZTT0NLX0RCR19WRVJCT1NFLAorCSAgICAiJXM6IEh5cGVyViBTb2NrZXQgbGlz
dGVuIGVycm9yID0gJWRcbiIsIF9fZnVuY19fLCBlcnJvcik7CisJcmV0dXJuIChlcnJvcik7Cit9
CisKK2ludAoraHZzX3RyYW5zX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2th
ZGRyICoqbmFtKQoreworCXN0cnVjdCBodnNfcGNiICpwY2IgPSBzbzJodnNwY2Ioc28pOworCisJ
SFZTT0NLX0RCRyhIVlNPQ0tfREJHX1ZFUkJPU0UsCisJICAgICIlczogSHlwZXJWIFNvY2tldCBo
dnNfdHJhbnNfYWNjZXB0IGNhbGxlZFxuIiwgX19mdW5jX18pOworCisJaWYgKHBjYiA9PSBOVUxM
KQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwkqbmFtID0gc29kdXBzb2NrYWRkcigoc3RydWN0IHNv
Y2thZGRyICopICZwY2ItPnJlbW90ZV9hZGRyLAorCSAgICBNX05PV0FJVCk7CisKKwlyZXR1cm4g
KCgqbmFtID09IE5VTEwpID8gRU5PTUVNIDogMCk7Cit9CisKK2ludAoraHZzX3RyYW5zX2Nvbm5l
Y3Qoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqbmFtLCBzdHJ1Y3QgdGhyZWFk
ICp0ZCkKK3sKKwlzdHJ1Y3QgaHZzX3BjYiAqcGNiID0gc28yaHZzcGNiKHNvKTsKKwlzdHJ1Y3Qg
c29ja2FkZHJfaHZzICpyYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfaHZzICopbmFtOworCWJvb2wg
Zm91bmRfYXV0b19ib3VuZF9wb3J0ID0gZmFsc2U7CisJaW50IGksIGVycm9yID0gMDsKKworCUhW
U09DS19EQkcoSFZTT0NLX0RCR19WRVJCT1NFLAorCSAgICAiJXM6IEh5cGVyViBTb2NrZXQgaHZz
X3RyYW5zX2Nvbm5lY3QgY2FsbGVkLCByZW1vdGUgcG9ydCBpcyAleFxuIiwKKwkgICAgX19mdW5j
X18sIHJhZGRyLT5odnNfcG9ydCk7CisKKwlpZiAocGNiID09IE5VTEwpCisJCXJldHVybiAoRUlO
VkFMKTsKKworCS8qIFZlcmlmeSB0aGUgcmVtb3RlIGFkZHJlc3MgKi8KKwlpZiAocmFkZHIgPT0g
TlVMTCkKKwkJcmV0dXJuIChFSU5WQUwpOworCWlmIChyYWRkci0+c2FfZmFtaWx5ICE9IEFGX0hZ
UEVSVikKKwkJcmV0dXJuIChFQUZOT1NVUFBPUlQpOworCisJbXR4X2xvY2soJmh2c190cmFuc19z
b2Nrc19tdHgpOworCWlmIChzby0+c29fc3RhdGUgJgorCSAgICAoU1NfSVNDT05ORUNURUR8U1Nf
SVNESVNDT05ORUNUSU5HfFNTX0lTQ09OTkVDVElORykpIHsKKwkJCUhWU09DS19EQkcoSFZTT0NL
X0RCR19FUlIsCisJCQkgICAgIiVzOiBzb2NrZXQgY29ubmVjdCBpbiBwcm9ncmVzc1xuIiwKKwkJ
CSAgICBfX2Z1bmNfXyk7CisJCQllcnJvciA9IEVJTlBST0dSRVNTOworCQkJZ290byBvdXQ7CisJ
fQorCisJLyoKKwkgKiBGaW5kIGFuIGF2YWlsYWJsZSBwb3J0IGZvciB1cyB0byBhdXRvIGJpbmQg
dGhlIGxvY2FsCisJICogYWRkcmVzcy4KKwkgKi8KKwlodnNfYWRkcl9zZXQoJnBjYi0+bG9jYWxf
YWRkciwgMCk7CisKKwlmb3IgKGkgPSBwcmV2aW91c19hdXRvX2JvdW5kX3BvcnQgLSAxOworCSAg
ICBpICE9IHByZXZpb3VzX2F1dG9fYm91bmRfcG9ydDsgaSAtLSkgeworCQlpZiAoaSA9PSBNSU5f
UE9SVCkKKwkJCWkgPSBNQVhfUE9SVDsKKworCQlwY2ItPmxvY2FsX2FkZHIuaHZzX3BvcnQgPSBp
OworCisJCWlmIChfX2h2c19maW5kX3NvY2tldF9vbl9saXN0KCZwY2ItPmxvY2FsX2FkZHIsCisJ
CSAgICBIVlNfTElTVF9CT1VORCB8IEhWU19MSVNUX0NPTk5FQ1RFRCkgPT0gTlVMTCkgeworCQkJ
Zm91bmRfYXV0b19ib3VuZF9wb3J0ID0gdHJ1ZTsKKwkJCXByZXZpb3VzX2F1dG9fYm91bmRfcG9y
dCA9IGk7CisJCQlIVlNPQ0tfREJHKEhWU09DS19EQkdfVkVSQk9TRSwKKwkJCSAgICAiJXM6IGZv
dW5kIGxvY2FsIGJvdW5kIHBvcnQgaXMgJXhcbiIsCisJCQkgICAgX19mdW5jX18sIHBjYi0+bG9j
YWxfYWRkci5odnNfcG9ydCk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChmb3VuZF9hdXRv
X2JvdW5kX3BvcnQgPT0gdHJ1ZSkgeworCQkvKiBGb3VuZCBhdmFpbGFibGUgcG9ydCBmb3IgYXV0
byBib3VuZCwgcHV0IG9uIGxpc3QgKi8KKwkJX19odnNfaW5zZXJ0X3NvY2tldF9vbl9saXN0KHNv
LCBIVlNfTElTVF9CT1VORCk7CisJCS8qIFNldCBWTSBzZXJ2aWNlIElEICovCisJCXBjYi0+dm1f
c3J2X2lkID0gc3J2X2lkX3RlbXBsYXRlOworCQlzZXRfcG9ydF9ieV9zcnZfaWQoJnBjYi0+dm1f
c3J2X2lkLCBwY2ItPmxvY2FsX2FkZHIuaHZzX3BvcnQpOworCQkvKiBTZXQgaG9zdCBzZXJ2aWNl
IElEIGFuZCByZW1vdGUgcG9ydCAqLworCQlwY2ItPmhvc3Rfc3J2X2lkID0gc3J2X2lkX3RlbXBs
YXRlOworCQlzZXRfcG9ydF9ieV9zcnZfaWQoJnBjYi0+aG9zdF9zcnZfaWQsIHJhZGRyLT5odnNf
cG9ydCk7CisJCWh2c19hZGRyX3NldCgmcGNiLT5yZW1vdGVfYWRkciwgcmFkZHItPmh2c19wb3J0
KTsKKworCQkvKiBDaGFuZ2UgdGhlIHNvY2tldCBzdGF0ZSB0byBTU19JU0NPTk5FQ1RJTkcgKi8K
KwkJc29pc2Nvbm5lY3Rpbmcoc28pOworCX0gZWxzZSB7CisJCUhWU09DS19EQkcoSFZTT0NLX0RC
R19FUlIsCisJCSAgICAiJXM6IE5vIGxvY2FsIHBvcnQgYXZhaWxhYmxlIGZvciBhdXRvIGJvdW5k
XG4iLAorCQkgICAgX19mdW5jX18pOworCQllcnJvciA9IEVBRERSSU5VU0U7CisJfQorCisJSFZT
T0NLX0RCRyhIVlNPQ0tfREJHX0lORk8sICJDb25uZWN0IHZtX3Nydl9pZCBpcyAiKTsKKwlodnNv
Y2tfcHJpbnRfZ3VpZCgmcGNiLT52bV9zcnZfaWQpOworCUhWU09DS19EQkcoSFZTT0NLX0RCR19J
TkZPLCAiQ29ubmVjdCBob3N0X3Nydl9pZCBpcyAiKTsKKwlodnNvY2tfcHJpbnRfZ3VpZCgmcGNi
LT5ob3N0X3Nydl9pZCk7CisKK291dDoKKwltdHhfdW5sb2NrKCZodnNfdHJhbnNfc29ja3NfbXR4
KTsKKworCWlmIChmb3VuZF9hdXRvX2JvdW5kX3BvcnQgPT0gdHJ1ZSkKKwkJIHZtYnVzX3JlcV90
bF9jb25uZWN0KCZwY2ItPnZtX3Nydl9pZCwgJnBjYi0+aG9zdF9zcnZfaWQpOworCisJcmV0dXJu
IChlcnJvcik7Cit9CisKK2ludAoraHZzX3RyYW5zX2Rpc2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAq
c28pCit7CisJc3RydWN0IGh2c19wY2IgKnBjYjsKKworCUhWU09DS19EQkcoSFZTT0NLX0RCR19W
RVJCT1NFLAorCSAgICAiJXM6IEh5cGVyViBTb2NrZXQgaHZzX3RyYW5zX2Rpc2Nvbm5lY3QgY2Fs
bGVkXG4iLCBfX2Z1bmNfXyk7CisKKwkodm9pZCkgaHZzX3RyYW5zX2xvY2soKTsKKwlwY2IgPSBz
bzJodnNwY2Ioc28pOworCWlmIChwY2IgPT0gTlVMTCkgeworCQlodnNfdHJhbnNfdW5sb2NrKCk7
CisJCXJldHVybiAoRUlOVkFMKTsKKwl9CisKKwkvKiBJZiBzb2NrZXQgaXMgYWxyZWFkeSBkaXNj
b25uZWN0ZWQsIHNraXAgdGhpcyAqLworCWlmICgoc28tPnNvX3N0YXRlICYgU1NfSVNESVNDT05O
RUNURUQpID09IDApCisJCXNvaXNkaXNjb25uZWN0aW5nKHNvKTsKKworCWh2c190cmFuc191bmxv
Y2soKTsKKworCXJldHVybiAoMCk7Cit9CisKKyNkZWZpbmUgU0JMT0NLV0FJVChmKQkoKChmKSAm
IE1TR19ET05UV0FJVCkgPyAwIDogU0JMX1dBSVQpCitzdHJ1Y3QgaHZzX2NhbGxiYWNrX2FyZyB7
CisJc3RydWN0IHVpbyAqdWlvOworCXN0cnVjdCBzb2NrYnVmICpzYjsKK307CisKK2ludAoraHZz
X3RyYW5zX3NvcmVjZWl2ZShzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICoqcGFk
ZHIsCisgICAgc3RydWN0IHVpbyAqdWlvLCBzdHJ1Y3QgbWJ1ZiAqKm1wMCwgc3RydWN0IG1idWYg
Kipjb250cm9scCwgaW50ICpmbGFnc3ApCit7CisJc3RydWN0IGh2c19wY2IgKnBjYiA9IHNvMmh2
c3BjYihzbyk7CisJc3RydWN0IHNvY2tidWYgKnNiOworCXNzaXplX3Qgb3JpZ19yZXNpZDsKKwl1
aW50MzJfdCBjYW5yZWFkLCB0b19yZWFkOworCWludCBmbGFncywgZXJyb3IgPSAwOworCXN0cnVj
dCBodnNfY2FsbGJhY2tfYXJnIGNiYXJnOworCisJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX1ZFUkJP
U0UsCisJICAgICIlczogSHlwZXJWIFNvY2tldCBodnNfdHJhbnNfc29yZWNlaXZlIGNhbGxlZFxu
IiwgX19mdW5jX18pOworCisJaWYgKHNvLT5zb190eXBlICE9IFNPQ0tfU1RSRUFNKQorCQlyZXR1
cm4gKEVJTlZBTCk7CisJaWYgKHBjYiA9PSBOVUxMKQorCQlyZXR1cm4gKEVJTlZBTCk7CisKKwlp
ZiAoZmxhZ3NwICE9IE5VTEwpCisJCWZsYWdzID0gKmZsYWdzcCAmfiBNU0dfRU9SOworCWVsc2UK
KwkJZmxhZ3MgPSAwOworCisJaWYgKGZsYWdzICYgTVNHX1BFRUspCisJCXJldHVybiAoRU9QTk9U
U1VQUCk7CisKKwkvKiBJZiBubyBzcGFjZSB0byBjb3B5IG91dCBhbnl0aGluZyAqLworCWlmICh1
aW8tPnVpb19yZXNpZCA9PSAwIHx8IHVpby0+dWlvX3J3ICE9IFVJT19SRUFEKQorCQlyZXR1cm4g
KEVJTlZBTCk7CisKKwlzYiA9ICZzby0+c29fcmN2OworCisJb3JpZ19yZXNpZCA9IHVpby0+dWlv
X3Jlc2lkOworCisJLyogUHJldmVudCBvdGhlciByZWFkZXJzIGZyb20gZW50ZXJpbmcgdGhlIHNv
Y2tldC4gKi8KKwllcnJvciA9IHNibG9jayhzYiwgU0JMT0NLV0FJVChmbGFncykpOworCWlmIChl
cnJvcikgeworCQlIVlNPQ0tfREJHKEhWU09DS19EQkdfRVJSLAorCQkgICAgIiVzOiBzYmxvY2sg
cmV0dXJuZWQgZXJyb3IgPSAlZFxuIiwgX19mdW5jX18sIGVycm9yKTsKKwkJcmV0dXJuIChlcnJv
cik7CisJfQorCisJU09DS0JVRl9MT0NLKHNiKTsKKworCWNiYXJnLnVpbyA9IHVpbzsKKwljYmFy
Zy5zYiA9IHNiOworCS8qCisJICogSWYgdGhlIHNvY2tldCBpcyBjbG9zaW5nLCB0aGVyZSBtaWdo
dCBzdGlsbCBiZSBzb21lIGRhdGEKKwkgKiBpbiByeCBiciB0byByZWFkLiBIb3dldmVyIHdlIG5l
ZWQgdG8gbWFrZSBzdXJlCisJICogdGhlIGNoYW5uZWwgaXMgc3RpbGwgb3Blbi4KKwkgKi8KKwlp
ZiAoKHNiLT5zYl9zdGF0ZSAmIFNCU19DQU5UUkNWTU9SRSkgJiYKKwkgICAgKHNvLT5zb19zdGF0
ZSAmIFNTX0lTRElTQ09OTkVDVEVEKSkgeworCQkvKiBPdGhlciB0aHJlYWQgYWxyZWFkeSBjbG9z
ZWQgdGhlIGNoYW5uZWwgKi8KKwkJZXJyb3IgPSBFUElQRTsKKwkJZ290byBvdXQ7CisJfQorCisJ
d2hpbGUgKHRydWUpIHsKKwkJd2hpbGUgKHVpby0+dWlvX3Jlc2lkID4gMCAmJgorCQkgICAgKGNh
bnJlYWQgPSBodnNvY2tfY2FucmVhZF9jaGVjayhwY2IpKSA+IDApIHsKKwkJCXRvX3JlYWQgPSBN
SU4oY2FucmVhZCwgdWlvLT51aW9fcmVzaWQpOworCQkJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX1ZF
UkJPU0UsCisJCQkgICAgIiVzOiB0b19yZWFkID0gJXUsIHNraXAgPSAldVxuIiwgX19mdW5jX18s
IHRvX3JlYWQsCisJCQkgICAgKHVuc2lnbmVkIGludCkoc2l6ZW9mKHN0cnVjdCBodnNfcGt0X2hl
YWRlcikgKworCQkJICAgIHBjYi0+cmVjdl9kYXRhX29mZikpOworCisJCQllcnJvciA9IHZtYnVz
X2NoYW5fcmVjdl9wZWVrX2NhbGwocGNiLT5jaGFuLCB0b19yZWFkLAorCQkJICAgIHNpemVvZihz
dHJ1Y3QgaHZzX3BrdF9oZWFkZXIpICsgcGNiLT5yZWN2X2RhdGFfb2ZmLAorCQkJICAgIGh2c29j
a19icl9jYWxsYmFjaywgKHZvaWQgKikmY2JhcmcpOworCQkJLyoKKwkJCSAqIEl0IGlzIHBvc3Np
YmxlIHNvY2tldCBpcyBkaXNjb25uZWN0ZWQgYmVjYXN1ZQorCQkJICogd2UgcmVsZWFzZWQgbG9j
ayBpbiBodnNvY2tfYnJfY2FsbGJhY2suIFNvIHdlCisJCQkgKiBuZWVkIHRvIGNoZWNrIHRoZSBz
dGF0ZSB0byBtYWtlIHN1cmUgaXQgaXMgbm90CisJCQkgKiBkaXNjb25uZWN0ZWQuCisJCQkgKi8K
KwkJCWlmIChlcnJvciB8fCBzby0+c29fc3RhdGUgJiBTU19JU0RJU0NPTk5FQ1RFRCkgeworCQkJ
CWJyZWFrOworCQkJfQorCisJCQlwY2ItPnJlY3ZfZGF0YV9sZW4gLT0gdG9fcmVhZDsKKwkJCXBj
Yi0+cmVjdl9kYXRhX29mZiArPSB0b19yZWFkOworCQl9CisKKwkJaWYgKGVycm9yKQorCQkJYnJl
YWs7CisKKwkJLyogQWJvcnQgaWYgc29ja2V0IGhhcyByZXBvcnRlZCBwcm9ibGVtcy4gKi8KKwkJ
aWYgKHNvLT5zb19lcnJvcikgeworCQkJaWYgKHNvLT5zb19lcnJvciA9PSBFU0hVVERPV04gJiYK
KwkJCSAgICBvcmlnX3Jlc2lkID4gdWlvLT51aW9fcmVzaWQpIHsKKwkJCQkvKgorCQkJCSAqIEFs
dGhvdWdoIHdlIGdvdCBhIEZJTiwgd2UgYWxzbyByZWNlaXZlZAorCQkJCSAqIHNvbWUgZGF0YSBp
biB0aGlzIHJvdW5kLiBEZWxpdmVyeSBpdAorCQkJCSAqIHRvIHVzZXIuCisJCQkJICovCisJCQkJ
ZXJyb3IgPSAwOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoc28tPnNvX2Vycm9yICE9IEVTSFVURE9X
TikKKwkJCQkJZXJyb3IgPSBzby0+c29fZXJyb3I7CisJCQl9CisKKwkJCWJyZWFrOworCQl9CisK
KwkJLyogQ2Fubm90IHJlY2VpdmVkIG1vcmUuICovCisJCWlmIChzYi0+c2Jfc3RhdGUgJiBTQlNf
Q0FOVFJDVk1PUkUpCisJCQlicmVhazsKKworCQkvKiBXZSBhcmUgZG9uZSBpZiBidWZmZXIgaGFz
IGJlZW4gZmlsbGVkICovCisJCWlmICh1aW8tPnVpb19yZXNpZCA9PSAwKQorCQkJYnJlYWs7CisK
KwkJaWYgKCEoZmxhZ3MgJiBNU0dfV0FJVEFMTCkgJiYgb3JpZ19yZXNpZCA+IHVpby0+dWlvX3Jl
c2lkKQorCQkJYnJlYWs7CisKKwkJLyogQnVmZmVyIHJpbmcgaXMgZW1wdHkgYW5kIHdlIHNoYWxs
IG5vdCBibG9jayAqLworCQlpZiAoKHNvLT5zb19zdGF0ZSAmIFNTX05CSU8pIHx8CisJCSAgICAo
ZmxhZ3MgJiAoTVNHX0RPTlRXQUlUfE1TR19OQklPKSkpIHsKKwkJCWlmIChvcmlnX3Jlc2lkID09
IHVpby0+dWlvX3Jlc2lkKSB7CisJCQkJLyogV2UgaGF2ZSBub3QgcmVhZCBhbnl0aGluZyAqLwor
CQkJCWVycm9yID0gRUFHQUlOOworCQkJfQorCQkJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX1ZFUkJP
U0UsCisJCQkgICAgIiVzOiBub24gYmxvY2tlZCByZWFkIHJldHVybiwgZXJyb3IgJWQuXG4iLAor
CQkJICAgIF9fZnVuY19fLCBlcnJvcik7CisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIFdh
aXQgYW5kIGJsb2NrIHVudGlsIChtb3JlKSBkYXRhIGNvbWVzIGluLgorCQkgKiBOb3RlOiBEcm9w
cyB0aGUgc29ja2J1ZiBsb2NrIGR1cmluZyB3YWl0LgorCQkgKi8KKwkJZXJyb3IgPSBzYndhaXQo
c2IpOworCisJCWlmIChlcnJvcikKKwkJCWJyZWFrOworCisJCUhWU09DS19EQkcoSFZTT0NLX0RC
R19WRVJCT1NFLAorCQkgICAgIiVzOiB3YWtlIHVwIGZyb20gc2J3YWl0LCByZWFkIGF2YWlsYWJs
ZSBpcyAldVxuIiwKKwkJICAgIF9fZnVuY19fLCB2bWJ1c19jaGFuX3JlYWRfYXZhaWxhYmxlKHBj
Yi0+Y2hhbikpOworCX0KKworb3V0OgorCVNPQ0tCVUZfVU5MT0NLKHNiKTsKKworCXNidW5sb2Nr
KHNiKTsKKworCS8qIFdlIHJlY2lldmVkIGEgRklOIGluIHRoaXMgY2FsbCAqLworCWlmIChzby0+
c29fZXJyb3IgPT0gRVNIVVRET1dOKSB7CisJCWlmIChzby0+c29fc25kLnNiX3N0YXRlICYgU0JT
X0NBTlRTRU5ETU9SRSkgeworCQkJLyogU2VuZCBoYXMgYWxyZWFkeSBjbG9zZWQgKi8KKwkJCXNv
aXNkaXNjb25uZWN0aW5nKHNvKTsKKwkJfSBlbHNlIHsKKwkJCS8qIEp1c3QgY2xvc2UgdGhlIHJl
Y2VpdmUgc2lkZSAqLworCQkJc29jYW50cmN2bW9yZShzbyk7CisJCX0KKwl9CisKKwlIVlNPQ0tf
REJHKEhWU09DS19EQkdfVkVSQk9TRSwKKwkgICAgIiVzOiByZXR1cm5pbmcgZXJyb3IgPSAlZCwg
c29fZXJyb3IgPSAlZFxuIiwKKwkgICAgX19mdW5jX18sIGVycm9yLCBzby0+c29fZXJyb3IpOwor
CisJcmV0dXJuIChlcnJvcik7Cit9CisKK2ludAoraHZzX3RyYW5zX3Nvc2VuZChzdHJ1Y3Qgc29j
a2V0ICpzbywgc3RydWN0IHNvY2thZGRyICphZGRyLCBzdHJ1Y3QgdWlvICp1aW8sCisgICAgc3Ry
dWN0IG1idWYgKnRvcCwgc3RydWN0IG1idWYgKmNvbnRyb2xwLCBpbnQgZmxhZ3MsIHN0cnVjdCB0
aHJlYWQgKnRkKQoreworCXN0cnVjdCBodnNfcGNiICpwY2IgPSBzbzJodnNwY2Ioc28pOworCXN0
cnVjdCBzb2NrYnVmICpzYjsKKwlzc2l6ZV90IG9yaWdfcmVzaWQ7CisJdWludDMyX3QgY2Fud3Jp
dGUsIHRvX3dyaXRlOworCWludCBlcnJvciA9IDA7CisKKwlIVlNPQ0tfREJHKEhWU09DS19EQkdf
VkVSQk9TRSwKKwkgICAgIiVzOiBIeXBlclYgU29ja2V0IGh2c190cmFuc19zb3NlbmQgY2FsbGVk
LCB1aW9fcmVzaWQgPSAlbHVcbiIsCisJICAgIF9fZnVuY19fLCB1aW8tPnVpb19yZXNpZCk7CisK
KwlpZiAoc28tPnNvX3R5cGUgIT0gU09DS19TVFJFQU0pCisJCXJldHVybiAoRUlOVkFMKTsKKwlp
ZiAocGNiID09IE5VTEwpCisJCXJldHVybiAoRUlOVkFMKTsKKworCS8qIElmIG5vdGhpbmcgdG8g
c2VuZCAqLworCWlmICh1aW8tPnVpb19yZXNpZCA9PSAwIHx8IHVpby0+dWlvX3J3ICE9IFVJT19X
UklURSkKKwkJcmV0dXJuIChFSU5WQUwpOworCisJc2IgPSAmc28tPnNvX3NuZDsKKworCW9yaWdf
cmVzaWQgPSB1aW8tPnVpb19yZXNpZDsKKworCS8qIFByZXZlbnQgb3RoZXIgd3JpdGVycyBmcm9t
IGVudGVyaW5nIHRoZSBzb2NrZXQuICovCisJZXJyb3IgPSBzYmxvY2soc2IsIFNCTE9DS1dBSVQo
ZmxhZ3MpKTsKKwlpZiAoZXJyb3IpIHsKKwkJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX0VSUiwKKwkJ
ICAgICIlczogc2Jsb2NrIHJldHVybmVkIGVycm9yID0gJWRcbiIsIF9fZnVuY19fLCBlcnJvcik7
CisJCXJldHVybiAoZXJyb3IpOworCX0KKworCVNPQ0tCVUZfTE9DSyhzYik7CisKKwlpZiAoKHNi
LT5zYl9zdGF0ZSAmIFNCU19DQU5UU0VORE1PUkUpIHx8CisJICAgIHNvLT5zb19lcnJvciA9PSBF
U0hVVERPV04pIHsKKwkJZXJyb3IgPSBFUElQRTsKKwkJZ290byBvdXQ7CisJfQorCisJd2hpbGUg
KHVpby0+dWlvX3Jlc2lkID4gMCkgeworCQljYW53cml0ZSA9IGh2c29ja19jYW53cml0ZV9jaGVj
ayhwY2IpOworCQlpZiAoY2Fud3JpdGUgPT0gMCkgeworCQkJLyogV2UgaGF2ZSBzZW50IHNvbWUg
ZGF0YSAqLworCQkJaWYgKG9yaWdfcmVzaWQgPiB1aW8tPnVpb19yZXNpZCkKKwkJCQlicmVhazsK
KwkJCS8qCisJCQkgKiBXZSBoYXZlIG5vdCBzZW50IGFueSBkYXRhIGFuZCBpdCBpcworCQkJICog
bm9uLWJsb2NrZWQgaW8KKwkJCSAqLworCQkJaWYgKHNvLT5zb19zdGF0ZSAmIFNTX05CSU8gfHwK
KwkJCSAgICAoZmxhZ3MgJiAoTVNHX05CSU8gfCBNU0dfRE9OVFdBSVQpKSAhPSAwKSB7CisJCQkJ
ZXJyb3IgPSBFV09VTERCTE9DSzsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJ
CQkgKiBXZSBhcmUgaGVyZSBiZWNhdXNlIHRoZXJlIGlzIG5vIHNwYWNlIG9uCisJCQkJICogc2Vu
ZCBidWZmZXIgcmluZy4gU2lnbmFsIHRoZSBvdGhlciBzaWRlCisJCQkJICogdG8gcmVhZCBhbmQg
ZnJlZSBtb3JlIHNwYWNlLgorCQkJCSAqIFNsZWVwIHdhaXQgdW50aWwgc3BhY2UgYXZhaWFibGUg
dG8gc2VuZAorCQkJCSAqIE5vdGU6IERyb3BzIHRoZSBzb2NrYnVmIGxvY2sgZHVyaW5nIHdhaXQu
CisJCQkJICovCisJCQkJZXJyb3IgPSBzYndhaXQoc2IpOworCisJCQkJaWYgKGVycm9yKQorCQkJ
CQlicmVhazsKKworCQkJCUhWU09DS19EQkcoSFZTT0NLX0RCR19WRVJCT1NFLAorCQkJCSAgICAi
JXM6IHdha2UgdXAgZnJvbSBzYndhaXQsIHNwYWNlIGF2YWlsIG9uICIKKwkJCQkgICAgInR4IHJp
bmcgaXMgJXVcbiIsCisJCQkJICAgIF9fZnVuY19fLAorCQkJCSAgICB2bWJ1c19jaGFuX3dyaXRl
X2F2YWlsYWJsZShwY2ItPmNoYW4pKTsKKworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJCXRv
X3dyaXRlID0gTUlOKGNhbndyaXRlLCB1aW8tPnVpb19yZXNpZCk7CisJCXRvX3dyaXRlID0gTUlO
KHRvX3dyaXRlLCBIVlNPQ0tfU0VORF9CVUZfU1opOworCisJCUhWU09DS19EQkcoSFZTT0NLX0RC
R19WRVJCT1NFLAorCQkgICAgIiVzOiBjYW53cml0ZSBpcyAldSwgdG9fd3JpdGUgPSAldVxuIiwg
X19mdW5jX18sCisJCSAgICBjYW53cml0ZSwgdG9fd3JpdGUpOworCQllcnJvciA9IGh2c29ja19z
ZW5kX2RhdGEocGNiLT5jaGFuLCB1aW8sIHRvX3dyaXRlLCBzYik7CisKKwkJaWYgKGVycm9yKQor
CQkJYnJlYWs7CisJfQorCitvdXQ6CisJU09DS0JVRl9VTkxPQ0soc2IpOworCXNidW5sb2NrKHNi
KTsKKworCXJldHVybiAoZXJyb3IpOworfQorCitpbnQKK2h2c190cmFuc19wZWVyYWRkcihzdHJ1
Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICoqbmFtKQoreworCXN0cnVjdCBodnNfcGNi
ICpwY2IgPSBzbzJodnNwY2Ioc28pOworCisJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX1ZFUkJPU0Us
CisJICAgICIlczogSHlwZXJWIFNvY2tldCBodnNfdHJhbnNfcGVlcmFkZHIgY2FsbGVkXG4iLCBf
X2Z1bmNfXyk7CisKKwlpZiAocGNiID09IE5VTEwpCisJCXJldHVybiAoRUlOVkFMKTsKKworCSpu
YW0gPSBzb2R1cHNvY2thZGRyKChzdHJ1Y3Qgc29ja2FkZHIgKikgJnBjYi0+cmVtb3RlX2FkZHIs
IE1fTk9XQUlUKTsKKworCXJldHVybiAoKCpuYW0gPT0gTlVMTCk/IEVOT01FTSA6IDApOworfQor
CitpbnQKK2h2c190cmFuc19zb2NrYWRkcihzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2th
ZGRyICoqbmFtKQoreworCXN0cnVjdCBodnNfcGNiICpwY2IgPSBzbzJodnNwY2Ioc28pOworCisJ
SFZTT0NLX0RCRyhIVlNPQ0tfREJHX1ZFUkJPU0UsCisJICAgICIlczogSHlwZXJWIFNvY2tldCBo
dnNfdHJhbnNfc29ja2FkZHIgY2FsbGVkXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAocGNiID09IE5V
TEwpCisJCXJldHVybiAoRUlOVkFMKTsKKworCSpuYW0gPSBzb2R1cHNvY2thZGRyKChzdHJ1Y3Qg
c29ja2FkZHIgKikgJnBjYi0+bG9jYWxfYWRkciwgTV9OT1dBSVQpOworCisJcmV0dXJuICgoKm5h
bSA9PSBOVUxMKT8gRU5PTUVNIDogMCk7Cit9CisKK3ZvaWQKK2h2c190cmFuc19jbG9zZShzdHJ1
Y3Qgc29ja2V0ICpzbykKK3sKKwlzdHJ1Y3QgaHZzX3BjYiAqcGNiOworCisJSFZTT0NLX0RCRyhI
VlNPQ0tfREJHX1ZFUkJPU0UsCisJICAgICIlczogSHlwZXJWIFNvY2tldCBodnNfdHJhbnNfY2xv
c2UgY2FsbGVkXG4iLCBfX2Z1bmNfXyk7CisKKwkodm9pZCkgaHZzX3RyYW5zX2xvY2soKTsKKwlw
Y2IgPSBzbzJodnNwY2Ioc28pOworCWlmICghcGNiKSB7CisJCWh2c190cmFuc191bmxvY2soKTsK
KwkJcmV0dXJuOworCX0KKworCWlmIChzby0+c29fc3RhdGUgJiBTU19JU0NPTk5FQ1RFRCkgewor
CQkvKiBTZW5kIGEgRklOIHRvIHBlZXIgKi8KKwkJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX1ZFUkJP
U0UsCisJCSAgICAiJXM6IGh2c190cmFuc19jbG9zZSBzZW5kaW5nIGEgRklOIHRvIGhvc3RcbiIs
IF9fZnVuY19fKTsKKwkJKHZvaWQpIGh2c29ja19zZW5kX2RhdGEocGNiLT5jaGFuLCBOVUxMLCAw
LCBOVUxMKTsKKwl9CisKKwlpZiAoc28tPnNvX3N0YXRlICYKKwkgICAgKFNTX0lTQ09OTkVDVEVE
fFNTX0lTQ09OTkVDVElOR3xTU19JU0RJU0NPTk5FQ1RJTkcpKQorCQlzb2lzZGlzY29ubmVjdGVk
KHNvKTsKKworCXBjYi0+Y2hhbiA9IE5VTEw7CisJcGNiLT5zbyA9IE5VTEw7CisKKwlpZiAoU09M
SVNURU5JTkcoc28pKSB7CisJCW10eF9sb2NrKCZodnNfdHJhbnNfc29ja3NfbXR4KTsKKwkJLyog
UmVtb3ZlIGZyb20gYm91bmQgbGlzdCAqLworCQlfX2h2c19yZW1vdmVfc29ja2V0X2Zyb21fbGlz
dChzbywgSFZTX0xJU1RfQk9VTkQpOworCQltdHhfdW5sb2NrKCZodnNfdHJhbnNfc29ja3NfbXR4
KTsKKwl9CisKKwlodnNfdHJhbnNfdW5sb2NrKCk7CisKKwlyZXR1cm47Cit9CisKK3ZvaWQKK2h2
c190cmFuc19hYm9ydChzdHJ1Y3Qgc29ja2V0ICpzbykKK3sKKwlzdHJ1Y3QgaHZzX3BjYiAqcGNi
ID0gc28yaHZzcGNiKHNvKTsKKworCUhWU09DS19EQkcoSFZTT0NLX0RCR19WRVJCT1NFLAorCSAg
ICAiJXM6IEh5cGVyViBTb2NrZXQgaHZzX3RyYW5zX2Fib3J0IGNhbGxlZFxuIiwgX19mdW5jX18p
OworCisJKHZvaWQpIGh2c190cmFuc19sb2NrKCk7CisJaWYgKHBjYiA9PSBOVUxMKSB7CisJCWh2
c190cmFuc191bmxvY2soKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChTT0xJU1RFTklORyhzbykp
IHsKKwkJbXR4X2xvY2soJmh2c190cmFuc19zb2Nrc19tdHgpOworCQkvKiBSZW1vdmUgZnJvbSBi
b3VuZCBsaXN0ICovCisJCV9faHZzX3JlbW92ZV9zb2NrZXRfZnJvbV9saXN0KHNvLCBIVlNfTElT
VF9CT1VORCk7CisJCW10eF91bmxvY2soJmh2c190cmFuc19zb2Nrc19tdHgpOworCX0KKworCWlm
IChzby0+c29fc3RhdGUgJiBTU19JU0NPTk5FQ1RFRCkgeworCQkodm9pZCkgc29kaXNjb25uZWN0
KHNvKTsKKwl9CisJaHZzX3RyYW5zX3VubG9jaygpOworCisJcmV0dXJuOworfQorCitpbnQKK2h2
c190cmFuc19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzbykKK3sKKwlzdHJ1Y3QgaHZzX3BjYiAq
cGNiID0gc28yaHZzcGNiKHNvKTsKKwlzdHJ1Y3Qgc29ja2J1ZiAqc2I7CisKKwlIVlNPQ0tfREJH
KEhWU09DS19EQkdfVkVSQk9TRSwKKwkgICAgIiVzOiBIeXBlclYgU29ja2V0IGh2c190cmFuc19z
aHV0ZG93biBjYWxsZWRcbiIsIF9fZnVuY19fKTsKKworCWlmIChwY2IgPT0gTlVMTCkKKwkJcmV0
dXJuIChFSU5WQUwpOworCisJLyoKKwkgKiBPbmx5IGdldCBjYWxsZWQgd2l0aCB0aGUgc2h1dGRv
d24gbWV0aG9kIGlzIFNIVVRfV1Igb3IKKwkgKiBTSFVUX1JEV1IuCisJICogV2hlbiB0aGUgbWV0
aG9kIGlzIFNIVVRfUkQgb3IgU0hVVF9SRFdSLCB0aGUgY2FsbGVyCisJICogYWxyZWFkeSBzZXQg
dGhlIFNCU19DQU5UUkNWTU9SRSBvbiByZWNlaXZlIHNpZGUgc29ja2V0CisJICogYnVmZmVyLgor
CSAqLworCWlmICgoc28tPnNvX3Jjdi5zYl9zdGF0ZSAmIFNCU19DQU5UUkNWTU9SRSkgPT0gMCkg
eworCQkvKgorCQkgKiBTSFVUX1dSIG9ubHkgY2FzZS4KKwkJICogUmVjZWl2ZSBzaWRlIGlzIHN0
aWxsIG9wZW4uIEp1c3QgY2xvc2UKKwkJICogdGhlIHNlbmQgc2lkZS4KKwkJICovCisJCXNvY2Fu
dHNlbmRtb3JlKHNvKTsKKwl9IGVsc2UgeworCQkvKiBTSFVUX1JEV1IgY2FzZSAqLworCQlpZiAo
c28tPnNvX3N0YXRlICYgU1NfSVNDT05ORUNURUQpIHsKKwkJCS8qIFNlbmQgYSBGSU4gdG8gcGVl
ciAqLworCQkJc2IgPSAmc28tPnNvX3NuZDsKKwkJCVNPQ0tCVUZfTE9DSyhzYik7CisJCQkodm9p
ZCkgaHZzb2NrX3NlbmRfZGF0YShwY2ItPmNoYW4sIE5VTEwsIDAsIHNiKTsKKwkJCVNPQ0tCVUZf
VU5MT0NLKHNiKTsKKworCQkJc29pc2Rpc2Nvbm5lY3Rpbmcoc28pOworCQl9CisJfQorCisJcmV0
dXJuICgwKTsKK30KKworLyogSW4gdGhlIFZNLCB3ZSBzdXBwb3J0IEh5cGVyLVYgU29ja2V0cyB3
aXRoIEFGX0hZUEVSViwgYW5kIHRoZSBlbmRwb2ludCBpcworICogPHBvcnQ+IChzZWUgc3RydWN0
IHNvY2thZGRyX2h2cykuCisgKgorICogT24gdGhlIGhvc3QsIEh5cGVyLVYgU29ja2V0cyBhcmUg
c3VwcG9ydGVkIGJ5IFdpbnNvY2sgQUZfSFlQRVJWOgorICogaHR0cHM6Ly9kb2NzLm1pY3Jvc29m
dC5jb20vZW4tdXMvdmlydHVhbGl6YXRpb24vaHlwZXItdi1vbi13aW5kb3dzL3VzZXItCisgKiBn
dWlkZS9tYWtlLWludGVncmF0aW9uLXNlcnZpY2UsIGFuZCB0aGUgZW5kcG9pbnQgaXMgPFZtSUQs
IFNlcnZpY2VJZD4gd2l0aAorICogdGhlIGJlbG93IHNvY2thZGRyOgorICoKKyAqIHN0cnVjdCBT
T0NLQUREUl9IVgorICogeworICogICAgQUREUkVTU19GQU1JTFkgRmFtaWx5OworICogICAgVVNI
T1JUIFJlc2VydmVkOworICogICAgR1VJRCBWbUlkOworICogICAgR1VJRCBTZXJ2aWNlSWQ7Cisg
KiB9OworICogTm90ZTogVm1JRCBpcyBub3QgdXNlZCBieSBGcmVlQlNEIFZNIGFuZCBhY3R1YWxs
eSBpdCBpc24ndCB0cmFuc21pdHRlZCB2aWEKKyAqIFZNQnVzLCBiZWNhdXNlIGhlcmUgaXQncyBv
YnZpb3VzIHRoZSBob3N0IGFuZCB0aGUgVk0gY2FuIGVhc2lseSBpZGVudGlmeQorICogZWFjaCBv
dGhlci4gVGhvdWdoIHRoZSBWbUlEIGlzIHVzZWZ1bCBvbiB0aGUgaG9zdCwgZXNwZWNpYWxseSBp
biB0aGUgY2FzZQorICogb2YgV2luZG93cyBjb250YWluZXIsIEZyZWVCU0QgVk0gZG9lc24ndCBu
ZWVkIGl0IGF0IGFsbC4KKyAqCisgKiBUbyBiZSBjb21wYXRpYmxlIHdpdGggc2ltaWxhciBpbmZy
YXN0cnVjdHVyZSBpbiBMaW51eCBWTXMsIHdlIGhhdmUKKyAqIHRvIGxpbWl0IHRoZSBhdmFpbGFi
bGUgR1VJRCBzcGFjZSBvZiBTT0NLQUREUl9IViBzbyB0aGF0IHdlIGNhbiBjcmVhdGUKKyAqIGEg
bWFwcGluZyBiZXR3ZWVuIEZyZWVCU0QgQUZfSFlQRVJWIHBvcnQgYW5kIFNPQ0tBRERSX0hWIFNl
cnZpY2UgR1VJRC4KKyAqIFRoZSBydWxlIG9mIHdyaXRpbmcgSHlwZXItViBTb2NrZXRzIGFwcHMg
b24gdGhlIGhvc3QgYW5kIGluIEZyZWVCU0QgVk0gaXM6CisgKgorICoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioKKyAqIFRoZSBvbmx5IHZhbGlkIFNlcnZpY2UgR1VJRHMsIGZyb20gdGhlIHBlcnNwZWN0aXZl
cyBvZiBib3RoIHRoZSBob3N0IGFuZCAqCisgKiBGcmVlQlNEIFZNLCB0aGF0IGNhbiBiZSBjb25u
ZWN0ZWQgYnkgdGhlIG90aGVyIGVuZCwgbXVzdCBjb25mb3JtIHRvIHRoaXMgKgorICogZm9ybWF0
OiA8cG9ydD4tZmFjYi0xMWU2LWJkNTgtNjQwMDZhNzk4NmQzLiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogV2hlbiB3ZSB3cml0ZSBh
cHBzIG9uIHRoZSBob3N0IHRvIGNvbm5lY3QoKSwgdGhlIEdVSUQgU2VydmljZUlEIGlzIHVzZWQu
CisgKiBXaGVuIHdlIHdyaXRlIGFwcHMgaW4gRnJlZUJTRCBWTSB0byBjb25uZWN0KCksIHdlIG9u
bHkgbmVlZCB0byBzcGVjaWZ5IHRoZQorICogcG9ydCBhbmQgdGhlIGRyaXZlciB3aWxsIGZvcm0g
dGhlIEdVSUQgYW5kIHVzZSB0aGF0IHRvIHJlcXVlc3QgdGhlIGhvc3QuCisgKgorICogRnJvbSB0
aGUgcGVyc3BlY3RpdmUgb2YgRnJlZUJTRCBWTSwgdGhlIHJlbW90ZSBlcGhlbWVyYWwgcG9ydCAo
aS5lLiB0aGUKKyAqIGF1dG8tZ2VuZXJhdGVkIHJlbW90ZSBwb3J0IGZvciBhIGNvbm5lY3QgcmVx
dWVzdCBpbml0aWF0ZWQgYnkgdGhlIGhvc3QncworICogY29ubmVjdCgpKSBpcyBzZXQgdG8gSFZB
RERSX1BPUlRfVU5LTk9XTiwgd2hpY2ggaXMgbm90IHJlYWx5IHVzZWQgb24gdGhlCisgKiBGcmVl
QlNEIGd1ZXN0LgorICovCisKKy8qCisgKiBPbGRlciBIeXBlclYgaG9zdHMgKHZtYnVzIHZlcnNp
b24gJ1ZNQlVTX1ZFUlNJT05fV0lOMTAnIG9yIGJlZm9yZSkKKyAqIHJlc3RyaWN0cyBIeXBlclYg
c29ja2V0IHJpbmcgYnVmZmVyIHNpemUgdG8gc2l4IDRLIHBhZ2VzLiBOZXdlcgorICogSHlwZXJW
IGhvc3RzIGRvZW4ndCBoYXZlIHRoaXMgbGltaXQuCisgKi8KKyNkZWZpbmUgSFZTX1JJTkdCVUZf
UkNWX1NJWkUJKFBBR0VfU0laRSAqIDYpCisjZGVmaW5lIEhWU19SSU5HQlVGX1NORF9TSVpFCShQ
QUdFX1NJWkUgKiA2KQorI2RlZmluZSBIVlNfUklOR0JVRl9NQVhfU0laRQkoUEFHRV9TSVpFICog
NjQpCisKK3N0cnVjdCBodnNvY2tfc2MgeworCWRldmljZV90CQlkZXY7CisJc3RydWN0IGh2c19w
Y2IJCSpwY2I7CisJc3RydWN0IHZtYnVzX2NoYW5uZWwJKmNoYW5uZWw7Cit9OworCitzdGF0aWMg
Ym9vbAoraHZzb2NrX2NoYW5fcmVhZGFibGUoc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW4pCit7
CisJdWludDMyX3QgcmVhZGFibGUgPSB2bWJ1c19jaGFuX3JlYWRfYXZhaWxhYmxlKGNoYW4pOwor
CisJcmV0dXJuIChyZWFkYWJsZSA+PSBIVlNPQ0tfUEtUX0xFTigwKSk7Cit9CisKK3N0YXRpYyB2
b2lkCitodnNvY2tfY2hhbl9jYihzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbiwgdm9pZCAqY29u
dGV4dCkKK3sKKwlzdHJ1Y3QgaHZzX3BjYiAqcGNiID0gKHN0cnVjdCBodnNfcGNiICopIGNvbnRl
eHQ7CisJc3RydWN0IHNvY2tldCAqc287CisJdWludDMyX3QgY2Fud3JpdGU7CisKKwlIVlNPQ0tf
REJHKEhWU09DS19EQkdfVkVSQk9TRSwKKwkgICAgIiVzOiBob3N0IHNlbmQgdXMgYSB3YWtldXAg
b24gcmIgZGF0YSwgcGNiID0gJXBcbiIsCisJICAgIF9fZnVuY19fLCBwY2IpOworCisJLyoKKwkg
KiBDaGVjayBpZiB0aGUgc29ja2V0IGlzIHN0aWxsIGF0dGFjaGVkIGFuZCB2YWxpZC4KKwkgKiBI
ZXJlIHdlIGtub3cgY2hhbm5lbCBpcyBzdGlsbCBvcGVuLiBOZWVkIHRvIG1ha2UKKwkgKiBzdXJl
IHRoZSBzb2NrZXQgaGFzIG5vdCBiZWVuIGNsb3NlZCBvciBmcmVlZC4KKwkgKi8KKwkodm9pZCkg
aHZzX3RyYW5zX2xvY2soKTsKKwlzbyA9IGhzdnBjYjJzbyhwY2IpOworCisJaWYgKHBjYi0+Y2hh
biAhPSBOVUxMICYmIHNvICE9IE5VTEwpIHsKKwkJLyoKKwkJICogV2FrZSB1cCByZWFkZXIgaWYg
dGhlcmUgYXJlIGRhdGEgdG8gcmVhZC4KKwkJICovCisJCVNPQ0tCVUZfTE9DSygmKHNvKS0+c29f
cmN2KTsKKworCQlIVlNPQ0tfREJHKEhWU09DS19EQkdfVkVSQk9TRSwKKwkJICAgICIlczogcmVh
ZCBhdmFpbGFibGUgPSAldVxuIiwgX19mdW5jX18sCisJCSAgICB2bWJ1c19jaGFuX3JlYWRfYXZh
aWxhYmxlKHBjYi0+Y2hhbikpOworCisJCWlmIChodnNvY2tfY2hhbl9yZWFkYWJsZShwY2ItPmNo
YW4pKQorCQkJc29yd2FrZXVwX2xvY2tlZChzbyk7CisJCWVsc2UKKwkJCVNPQ0tCVUZfVU5MT0NL
KCYoc28pLT5zb19yY3YpOworCisJCS8qCisJCSAqIFdha2UgdXAgc2VuZGVyIGlmIHNwYWNlIGJl
Y29tZXMgYXZhaWxhYmxlIHRvIHdyaXRlLgorCQkgKi8KKwkJU09DS0JVRl9MT0NLKCYoc28pLT5z
b19zbmQpOworCQljYW53cml0ZSA9IGh2c29ja19jYW53cml0ZV9jaGVjayhwY2IpOworCisJCUhW
U09DS19EQkcoSFZTT0NLX0RCR19WRVJCT1NFLAorCQkgICAgIiVzOiBjYW53cml0ZSA9ICV1XG4i
LCBfX2Z1bmNfXywgY2Fud3JpdGUpOworCisJCWlmIChjYW53cml0ZSA+IDApIHsKKwkJCXNvd3dh
a2V1cF9sb2NrZWQoc28pOworCQl9IGVsc2UgeworCQkJU09DS0JVRl9VTkxPQ0soJihzbyktPnNv
X3NuZCk7CisJCX0KKwl9CisKKwlodnNfdHJhbnNfdW5sb2NrKCk7CisKKwlyZXR1cm47Cit9CisK
K3N0YXRpYyBpbnQKK2h2c29ja19icl9jYWxsYmFjayh2b2lkICpkYXRhcCwgaW50IGNwbGVuLCB2
b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgaHZzX2NhbGxiYWNrX2FyZyAqYXJnID0gKHN0cnVjdCBo
dnNfY2FsbGJhY2tfYXJnICopY2Jhcmc7CisJc3RydWN0IHVpbyAqdWlvID0gYXJnLT51aW87CisJ
c3RydWN0IHNvY2tidWYgKnNiID0gYXJnLT5zYjsKKwlpbnQgZXJyb3IgPSAwOworCisJaWYgKGNi
YXJnID09IE5VTEwgfHwgZGF0YXAgPT0gTlVMTCkKKwkJcmV0dXJuIChFSU5WQUwpOworCisJSFZT
T0NLX0RCRyhIVlNPQ0tfREJHX1ZFUkJPU0UsCisJICAgICIlczogY2FsbGVkLCB1aW9fcncgPSAl
cywgdWlvX3Jlc2lkID0gJWx1LCBjcGxlbiA9ICV1LCAiCisJICAgICJkYXRhcCA9ICVwXG4iLAor
CSAgICBfX2Z1bmNfXywgKHVpby0+dWlvX3J3ID09IFVJT19SRUFEKSA/ICJyZWFkIGZyb20gYnIi
OiJ3cml0ZSB0byBiciIsCisJICAgIHVpby0+dWlvX3Jlc2lkLCBjcGxlbiwgZGF0YXApOworCisJ
aWYgKHNiKQorCQlTT0NLQlVGX1VOTE9DSyhzYik7CisKKwllcnJvciA9IHVpb21vdmUoZGF0YXAs
IGNwbGVuLCB1aW8pOworCisJaWYgKHNiKQorCQlTT0NLQlVGX0xPQ0soc2IpOworCisJSFZTT0NL
X0RCRyhIVlNPQ0tfREJHX1ZFUkJPU0UsCisJICAgICIlczogYWZ0ZXIgdWlvbW92ZSwgdWlvX3Jl
c2lkID0gJWx1LCBlcnJvciA9ICVkXG4iLAorCSAgICBfX2Z1bmNfXywgdWlvLT51aW9fcmVzaWQs
IGVycm9yKTsKKworCXJldHVybiAoZXJyb3IpOworfQorCitzdGF0aWMgaW50CitodnNvY2tfc2Vu
ZF9kYXRhKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFuLCBzdHJ1Y3QgdWlvICp1aW8sCisgICAg
dWludDMyX3QgdG9fd3JpdGUsIHN0cnVjdCBzb2NrYnVmICpzYikKK3sKKwlzdHJ1Y3QgaHZzX3Br
dF9oZWFkZXIgaHZzX3BrdDsKKwlpbnQgaHZzX3BrdGhsZW4sIGh2c19wa3RsZW4sIHBhZF9wa3Rs
ZW4sIGhsZW4sIGVycm9yID0gMDsKKwl1aW50NjRfdCBwYWQgPSAwOworCXN0cnVjdCBpb3ZlYyBp
b3ZbM107CisJc3RydWN0IGh2c19jYWxsYmFja19hcmcgY2Jhcmc7CisKKwlpZiAoY2hhbiA9PSBO
VUxMKQorCQlyZXR1cm4gKEVOT1RDT05OKTsKKworCWhsZW4gPSBzaXplb2Yoc3RydWN0IHZtYnVz
X2NoYW5wa3RfaGRyKTsKKwlodnNfcGt0aGxlbiA9IHNpemVvZihzdHJ1Y3QgaHZzX3BrdF9oZWFk
ZXIpOworCWh2c19wa3RsZW4gPSBodnNfcGt0aGxlbiArIHRvX3dyaXRlOworCXBhZF9wa3RsZW4g
PSBWTUJVU19DSEFOUEtUX1RPVExFTihodnNfcGt0bGVuKTsKKworCUhWU09DS19EQkcoSFZTT0NL
X0RCR19WRVJCT1NFLAorCSAgICAiJXM6IGhsZW4gPSAldSwgaHZzX3BrdGhsZW4gPSAldSwgaHZz
X3BrdGxlbiA9ICV1LCAiCisJICAgICJwYWRfcGt0bGVuID0gJXUsIGRhdGFfbGVuID0gJXVcbiIs
CisJICAgIF9fZnVuY19fLCBobGVuLCBodnNfcGt0aGxlbiwgaHZzX3BrdGxlbiwgcGFkX3BrdGxl
biwgdG9fd3JpdGUpOworCisJaHZzX3BrdC5jaGFuX3BrdF9oZHIuY3BoX3R5cGUgPSBWTUJVU19D
SEFOUEtUX1RZUEVfSU5CQU5EOworCWh2c19wa3QuY2hhbl9wa3RfaGRyLmNwaF9mbGFncyA9IDA7
CisJVk1CVVNfQ0hBTlBLVF9TRVRMRU4oaHZzX3BrdC5jaGFuX3BrdF9oZHIuY3BoX2hsZW4sIGhs
ZW4pOworCVZNQlVTX0NIQU5QS1RfU0VUTEVOKGh2c19wa3QuY2hhbl9wa3RfaGRyLmNwaF90bGVu
LCBwYWRfcGt0bGVuKTsKKwlodnNfcGt0LmNoYW5fcGt0X2hkci5jcGhfeGFjdGlkID0gMDsKKwor
CWh2c19wa3Qudm1waXBlX3BrdF9oZHIudm1waXBlX3BrdF90eXBlID0gMTsKKwlodnNfcGt0LnZt
cGlwZV9wa3RfaGRyLnZtcGlwZV9kYXRhX3NpemUgPSB0b193cml0ZTsKKworCWNiYXJnLnVpbyA9
IHVpbzsKKwljYmFyZy5zYiA9IHNiOworCisJaWYgKHVpbyAmJiB0b193cml0ZSA+IDApIHsKKwkJ
aW92WzBdLmlvdl9iYXNlID0gJmh2c19wa3Q7CisJCWlvdlswXS5pb3ZfbGVuID0gaHZzX3BrdGhs
ZW47CisJCWlvdlsxXS5pb3ZfYmFzZSA9IE5VTEw7CisJCWlvdlsxXS5pb3ZfbGVuID0gdG9fd3Jp
dGU7CisJCWlvdlsyXS5pb3ZfYmFzZSA9ICZwYWQ7CisJCWlvdlsyXS5pb3ZfbGVuID0gcGFkX3Br
dGxlbiAtIGh2c19wa3RsZW47CisKKwkJZXJyb3IgPSB2bWJ1c19jaGFuX2lvdl9zZW5kKGNoYW4s
IGlvdiwgMywKKwkJICAgIGh2c29ja19icl9jYWxsYmFjaywgJmNiYXJnKTsKKwl9IGVsc2Ugewor
CQlpZiAodG9fd3JpdGUgPT0gMCkgeworCQkJaW92WzBdLmlvdl9iYXNlID0gJmh2c19wa3Q7CisJ
CQlpb3ZbMF0uaW92X2xlbiA9IGh2c19wa3RobGVuOworCQkJaW92WzFdLmlvdl9iYXNlID0gJnBh
ZDsKKwkJCWlvdlsxXS5pb3ZfbGVuID0gcGFkX3BrdGxlbiAtIGh2c19wa3RsZW47CisJCQllcnJv
ciA9IHZtYnVzX2NoYW5faW92X3NlbmQoY2hhbiwgaW92LCAyLCBOVUxMLCBOVUxMKTsKKwkJfQor
CX0KKworCWlmIChlcnJvcikgeworCQlIVlNPQ0tfREJHKEhWU09DS19EQkdfVkVSQk9TRSwKKwkJ
ICAgICIlczogZXJyb3IgPSAlZFxuIiwgX19mdW5jX18sIGVycm9yKTsKKwl9CisKKwlyZXR1cm4g
KGVycm9yKTsKK30KKworLyoKKyAqIENoZWNrIGlmIHdlIGhhdmUgZGF0YSBvbiBjdXJyZW50IHJp
bmcgYnVmZmVyIHRvIHJlYWQKKyAqIG9yIG5vdC4gSWYgbm90LCBhZHZhbmNlIHRoZSByaW5nIGJ1
ZmZlciByZWFkIGluZGV4IHRvCisgKiBuZXh0IHBhY2tldC4gVXBkYXRlIHRoZSByZWNldl9kYXRh
X2xlbiBhbmQgcmVjZXZfZGF0YV9vZmYKKyAqIHRvIG5ldyB2YWx1ZS4KKyAqIFJldHVybiB0aGUg
bnVtYmVyIG9mIGJ5dGVzIGNhbiByZWFkLgorICovCitzdGF0aWMgdWludDMyX3QKK2h2c29ja19j
YW5yZWFkX2NoZWNrKHN0cnVjdCBodnNfcGNiICpwY2IpCit7CisJdWludDMyX3QgYWR2YW5jZTsK
Kwl1aW50MzJfdCB0bGVuLCBobGVuLCBkbGVuOworCXVpbnQzMl90IGJ5dGVzX2NhbnJlYWQgPSAw
OworCWludCBlcnJvcjsKKworCWlmIChwY2IgPT0gTlVMTCB8fCBwY2ItPmNoYW4gPT0gTlVMTCkg
eworCQlwY2ItPnNvLT5zb19lcnJvciA9IEVJTzsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwkvKiBT
dGlsbCBoYXZlIGRhdGEgbm90IHJlYWQgeWV0IG9uIGN1cnJlbnQgcGFja2V0ICovCisJaWYgKHBj
Yi0+cmVjdl9kYXRhX2xlbiA+IDApCisJCXJldHVybiAocGNiLT5yZWN2X2RhdGFfbGVuKTsKKwor
CWlmIChwY2ItPnJiX2luaXQpCisJCWFkdmFuY2UgPQorCQkgICAgVk1CVVNfQ0hBTlBLVF9HRVRM
RU4ocGNiLT5odnNfcGt0LmNoYW5fcGt0X2hkci5jcGhfdGxlbik7CisJZWxzZQorCQlhZHZhbmNl
ID0gMDsKKworCWJ5dGVzX2NhbnJlYWQgPSB2bWJ1c19jaGFuX3JlYWRfYXZhaWxhYmxlKHBjYi0+
Y2hhbik7CisKKwlIVlNPQ0tfREJHKEhWU09DS19EQkdfVkVSQk9TRSwKKwkgICAgIiVzOiBieXRl
c19jYW5yZWFkIG9uIGJyID0gJXUsIGFkdmFuY2UgPSAldVxuIiwKKwkgICAgX19mdW5jX18sIGJ5
dGVzX2NhbnJlYWQsIGFkdmFuY2UpOworCisJaWYgKHBjYi0+cmJfaW5pdCAmJiBieXRlc19jYW5y
ZWFkID09IChhZHZhbmNlICsgc2l6ZW9mKHVpbnQ2NF90KSkpIHsKKwkJLyoKKwkJICogTm90aGlu
ZyB0byByZWFkLiBOZWVkIHRvIGFkdmFuY2UgdGhlIHJpbmRleCBiZWZvcmUKKwkJICogY2FsbGlu
ZyBzYndhaXQsIHNvIGhvc3Qga25vd3MgdG8gd2FrZSB1cyB1cCB3aGVuIGRhdGEKKwkJICogaXMg
YXZhaWxhYmxlIHRvIHJlYWQgb24gcmIuCisJCSAqLworCQllcnJvciA9IHZtYnVzX2NoYW5fcmVj
dl9pZHhhZHYocGNiLT5jaGFuLCBhZHZhbmNlKTsKKwkJaWYgKGVycm9yKSB7CisJCQlIVlNPQ0tf
REJHKEhWU09DS19EQkdfRVJSLAorCQkJICAgICIlczogYWZ0ZXIgY2FsbGluZyB2bWJ1c19jaGFu
X3JlY3ZfaWR4YWR2LCAiCisJCQkgICAgImdvdCBlcnJvciA9ICVkXG4iLCAgX19mdW5jX18sIGVy
cm9yKTsKKwkJCXJldHVybiAoMCk7CisJCX0gZWxzZSB7CisJCQlwY2ItPnJiX2luaXQgPSBmYWxz
ZTsKKwkJCXBjYi0+cmVjdl9kYXRhX2xlbiA9IDA7CisJCQlwY2ItPnJlY3ZfZGF0YV9vZmYgPSAw
OworCQkJYnl0ZXNfY2FucmVhZCA9IHZtYnVzX2NoYW5fcmVhZF9hdmFpbGFibGUocGNiLT5jaGFu
KTsKKworCQkJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX1ZFUkJPU0UsCisJCQkgICAgIiVzOiBhZHZh
bmNlZCAldSBieXRlcywgIgorCQkJICAgICIgYnl0ZXNfY2FucmVhZCBvbiBiciBub3cgPSAldVxu
IiwKKwkJCSAgICBfX2Z1bmNfXywgYWR2YW5jZSwgYnl0ZXNfY2FucmVhZCk7CisKKwkJCWlmIChi
eXRlc19jYW5yZWFkID09IDApCisJCQkJcmV0dXJuICgwKTsKKwkJCWVsc2UKKwkJCQlhZHZhbmNl
ID0gMDsKKwkJfQorCX0KKworCWlmIChieXRlc19jYW5yZWFkIDwKKwkgICAgYWR2YW5jZSArIChz
aXplb2Yoc3RydWN0IGh2c19wa3RfaGVhZGVyKSArIHNpemVvZih1aW50NjRfdCkpKQorCQlyZXR1
cm4gKDApOworCisJZXJyb3IgPSB2bWJ1c19jaGFuX3JlY3ZfcGVlayhwY2ItPmNoYW4sICZwY2It
Pmh2c19wa3QsCisJICAgIHNpemVvZihzdHJ1Y3QgaHZzX3BrdF9oZWFkZXIpLCBhZHZhbmNlKTsK
KworCS8qIERvbid0IGhhdmUgYW55dGhpbmcgdG8gcmVhZCAqLworCWlmIChlcnJvcikgeworCQlI
VlNPQ0tfREJHKEhWU09DS19EQkdfVkVSQk9TRSwKKwkJICAgICIlczogYWZ0ZXIgY2FsbGluZyB2
bWJ1c19jaGFuX3JlY3ZfcGVlaywgZ290IGVycm9yID0gJWRcbiIsCisJCSAgICBfX2Z1bmNfXywg
ZXJyb3IpOworCQlyZXR1cm4gKDApOworCX0KKworCS8qCisJICogV2UganVzdCByZWFkIGluIGEg
bmV3IHBhY2tldCBoZWFkZXIuIERvIHNvbWUgc2FuaXR5IGNoZWNrcy4KKwkgKi8KKwl0bGVuID0g
Vk1CVVNfQ0hBTlBLVF9HRVRMRU4ocGNiLT5odnNfcGt0LmNoYW5fcGt0X2hkci5jcGhfdGxlbik7
CisJaGxlbiA9IFZNQlVTX0NIQU5QS1RfR0VUTEVOKHBjYi0+aHZzX3BrdC5jaGFuX3BrdF9oZHIu
Y3BoX2hsZW4pOworCWRsZW4gPSBwY2ItPmh2c19wa3Qudm1waXBlX3BrdF9oZHIudm1waXBlX2Rh
dGFfc2l6ZTsKKwlpZiAoX19wcmVkaWN0X2ZhbHNlKGhsZW4gPCBzaXplb2Yoc3RydWN0IHZtYnVz
X2NoYW5wa3RfaGRyKSkgfHwKKwkgICAgX19wcmVkaWN0X2ZhbHNlKGhsZW4gPiB0bGVuKSB8fAor
CSAgICBfX3ByZWRpY3RfZmFsc2UodGxlbiA8IGRsZW4gKyBzaXplb2Yoc3RydWN0IGh2c19wa3Rf
aGVhZGVyKSkpIHsKKwkJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX1ZFUkJPU0UsCisJCSAgICAiaW52
YWxpZCB0bGVuKCV1KSwgaGxlbigldSkgb3IgZGxlbigldSlcbiIsCisJCSAgICB0bGVuLCBobGVu
LCBkbGVuKTsKKwkJcGNiLT5zby0+c29fZXJyb3IgPSBFSU87CisJCXJldHVybiAoMCk7CisJfQor
CWlmIChwY2ItPnJiX2luaXQgPT0gZmFsc2UpCisJCXBjYi0+cmJfaW5pdCA9IHRydWU7CisKKwlI
VlNPQ0tfREJHKEhWU09DS19EQkdfVkVSQk9TRSwKKwkgICAgIkdvdCBuZXcgcGt0IHRsZW4oJXUp
LCBobGVuKCV1KSBvciBkbGVuKCV1KVxuIiwKKwkgICAgdGxlbiwgaGxlbiwgZGxlbik7CisKKwkv
KiBUaGUgb3RoZXIgc2lkZSBoYXMgc2VudCBhIGNsb3NlIEZJTiAqLworCWlmIChkbGVuID09IDAp
IHsKKwkJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX1ZFUkJPU0UsCisJCSAgICAiJXM6IFJlY2VpdmVk
IEZJTiBmcm9tIG90aGVyIHNpZGVcbiIsIF9fZnVuY19fKTsKKwkJLyogaW5mb3JtIHRoZSBjYWxs
ZXIgYnkgc2V0aW5nIHNvX2Vycm9yIHRvIEVTSFVURE9XTiAqLworCQlwY2ItPnNvLT5zb19lcnJv
ciA9IEVTSFVURE9XTjsKKwl9CisKKwlIVlNPQ0tfREJHKEhWU09DS19EQkdfVkVSQk9TRSwKKwkg
ICAgIiVzOiBjYW5yZWFkIG9uIHJlY2VpdmUgcmluZyBpcyAldSBcbiIsIF9fZnVuY19fLCBkbGVu
KTsKKworCXBjYi0+cmVjdl9kYXRhX2xlbiA9IGRsZW47CisJcGNiLT5yZWN2X2RhdGFfb2ZmID0g
MDsKKworCXJldHVybiAocGNiLT5yZWN2X2RhdGFfbGVuKTsKK30KKworc3RhdGljIHVpbnQzMl90
CitodnNvY2tfY2Fud3JpdGVfY2hlY2soc3RydWN0IGh2c19wY2IgKnBjYikKK3sKKwl1aW50MzJf
dCB3cml0ZWFibGU7CisJdWludDMyX3QgcmV0OworCisJaWYgKHBjYiA9PSBOVUxMIHx8IHBjYi0+
Y2hhbiA9PSBOVUxMKQorCQlyZXR1cm4gKDApOworCisJd3JpdGVhYmxlID0gdm1idXNfY2hhbl93
cml0ZV9hdmFpbGFibGUocGNiLT5jaGFuKTsKKworCS8qCisJICogV2UgbXVzdCBhbHdheXMgcmVz
ZXJ2ZSBhIDAtbGVuZ3RoLXBheWxvYWQgcGFja2V0IGZvciB0aGUgRklOLgorCSAqLworCUhWU09D
S19EQkcoSFZTT0NLX0RCR19WRVJCT1NFLAorCSAgICAiJXM6IHdyaXRlYWJsZSBpcyAldSwgc2hv
dWxkIGJlIGdyZWF0ZXIgdGhhbiAlbHVcbiIsCisJICAgIF9fZnVuY19fLCB3cml0ZWFibGUsIEhW
U09DS19QS1RfTEVOKDEpICsgSFZTT0NLX1BLVF9MRU4oMCkpOworCisJaWYgKHdyaXRlYWJsZSA8
IEhWU09DS19QS1RfTEVOKDEpICsgSFZTT0NLX1BLVF9MRU4oMCkpIHsKKwkJLyoKKwkJICogVGhl
IFR4IHJpbmcgc2VlbXMgZnVsbC4KKwkJICovCisJCXJldHVybiAoMCk7CisJfQorCisJcmV0ID0g
d3JpdGVhYmxlIC0gSFZTT0NLX1BLVF9MRU4oMCkgLSBIVlNPQ0tfUEtUX0xFTigwKTsKKworCUhW
U09DS19EQkcoSFZTT0NLX0RCR19WRVJCT1NFLAorCSAgICAiJXM6IGF2YWlsYWJsZSBzaXplIGlz
ICV1XG4iLCBfX2Z1bmNfXywgcm91bmRkb3duMihyZXQsIDgpKTsKKworCXJldHVybiAocm91bmRk
b3duMihyZXQsIDgpKTsKK30KKworc3RhdGljIHZvaWQKK2h2c29ja19zZXRfY2hhbl9wZW5kaW5n
X3NlbmRfc2l6ZShzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbikKK3sKKwl2bWJ1c19jaGFuX3Nl
dF9wZW5kaW5nX3NlbmRfc2l6ZShjaGFuLAorCSAgICBIVlNPQ0tfUEtUX0xFTihIVlNPQ0tfU0VO
RF9CVUZfU1opKTsKK30KKworc3RhdGljIGludAoraHZzb2NrX29wZW5fY2hhbm5lbChzdHJ1Y3Qg
dm1idXNfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNvY2tldCAqc28pCit7CisJdW5zaWduZWQgaW50
IHJjdmJ1Ziwgc25kYnVmOworCXN0cnVjdCBodnNfcGNiICpwY2IgPSBzbzJodnNwY2Ioc28pOwor
CWludCByZXQ7CisKKwlpZiAodm1idXNfY3VycmVudF92ZXJzaW9uIDwgVk1CVVNfVkVSU0lPTl9X
SU4xMF9WNSkgeworCQlzbmRidWYgPSBIVlNfUklOR0JVRl9TTkRfU0laRTsKKwkJcmN2YnVmID0g
SFZTX1JJTkdCVUZfUkNWX1NJWkU7CisJfSBlbHNlIHsKKwkJc25kYnVmID0gTUFYKHNvLT5zb19z
bmQuc2JfaGl3YXQsIEhWU19SSU5HQlVGX1NORF9TSVpFKTsKKwkJc25kYnVmID0gTUlOKHNuZGJ1
ZiwgSFZTX1JJTkdCVUZfTUFYX1NJWkUpOworCQlzbmRidWYgPSByb3VuZGRvd24yKHNuZGJ1Ziwg
UEFHRV9TSVpFKTsKKwkJcmN2YnVmID0gTUFYKHNvLT5zb19yY3Yuc2JfaGl3YXQsIEhWU19SSU5H
QlVGX1JDVl9TSVpFKTsKKwkJcmN2YnVmID0gTUlOKHJjdmJ1ZiwgSFZTX1JJTkdCVUZfTUFYX1NJ
WkUpOworCQlyY3ZidWYgPSByb3VuZGRvd24yKHJjdmJ1ZiwgUEFHRV9TSVpFKTsKKwl9CisKKwkv
KgorCSAqIENhbiBvbmx5IHJlYWQgd2hhdGV2ZXIgdXNlciBwcm92aWRlZCBzaXplIG9mIGRhdGEK
KwkgKiBmcm9tIHJpbmcgYnVmZmVyLiBUdXJuIG9mZiBiYXRjaGVkIHJlYWRpbmcuCisJICovCisJ
dm1idXNfY2hhbl9zZXRfcmVhZGJhdGNoKGNoYW4sIGZhbHNlKTsKKworCXJldCA9IHZtYnVzX2No
YW5fb3BlbihjaGFuLCBzbmRidWYsIHJjdmJ1ZiwgTlVMTCwgMCwKKwkgICAgaHZzb2NrX2NoYW5f
Y2IsIHBjYik7CisKKwlpZiAocmV0ICE9IDApIHsKKwkJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX0VS
UiwKKwkJICAgICIlczogZmFpbGVkIHRvIG9wZW4gaHZzb2NrIGNoYW5uZWwsIHNuZGJ1ZiA9ICV1
LCAiCisJCSAgICAicmN2YnVmID0gJXVcbiIsIF9fZnVuY19fLCBzbmRidWYsIHJjdmJ1Zik7CisJ
fSBlbHNlIHsKKwkJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX0lORk8sCisJCSAgICAiJXM6IGh2c29j
ayBjaGFubmVsIG9wZW5lZCwgc25kYnVmID0gJXUsIGkiCisJCSAgICAicmN2YnVmID0gJXVcbiIs
IF9fZnVuY19fLCBzbmRidWYsIHJjdmJ1Zik7CisJCS8qCisJCSAqIFNlIHRoZSBwZW5kaW5nIHNl
bmQgc2l6ZSBzbyB0byByZWNlaXZlIHdha2V1cAorCQkgKiBzaWduYWxzIGZyb20gaG9zdCB3aGVu
IHRoZXJlIGlzIGVub3VnaCBzcGFjZSBvbgorCQkgKiByeCBidWZmZXIgcmluZyB0byB3cml0ZS4K
KwkJICovCisJCWh2c29ja19zZXRfY2hhbl9wZW5kaW5nX3NlbmRfc2l6ZShjaGFuKTsKKwl9CisK
KwlyZXR1cm4gcmV0OworfQorCisvKgorICogR3Vlc3QgaXMgbGlzdGVuaW5nIHBhc3NpdmVseSBv
biB0aGUgc29ja2V0LiBPcGVuIGNoYW5uZWwgYW5kCisgKiBjcmVhdGUgYSBuZXcgc29ja2V0IGZv
ciB0aGUgY29ubmVjaXRvbi4KKyAqLworc3RhdGljIHZvaWQKK2h2c29ja19vcGVuX2Nvbm5fcGFz
c2l2ZShzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNvY2tldCAqc28sCisgICAg
c3RydWN0IGh2c29ja19zYyAqc2MpCit7CisJc3RydWN0IHNvY2tldCAqbmV3X3NvOworCXN0cnVj
dCBodnNfcGNiICpuZXdfcGNiLCAqcGNiOworCWludCBlcnJvcjsKKworCS8qIERvIG5vdGhpbmcg
aWYgc29ja2V0IGlzIG5vdCBsaXN0ZW5pbmcgKi8KKwlpZiAoKHNvLT5zb19vcHRpb25zICYgU09f
QUNDRVBUQ09OTikgPT0gMCkgeworCQlIVlNPQ0tfREJHKEhWU09DS19EQkdfRVJSLAorCQkgICAg
IiVzOiBzb2NrZXQgaXMgbm90IGEgbGlzdGVuaW5nIG9uZVxuIiwgX19mdW5jX18pOworCQlyZXR1
cm47CisJfQorCisJLyoKKwkgKiBDcmVhdGUgYSBuZXcgc29ja2V0LiBUaGlzIHdpbGwgY2FsbCBw
cnVfYXR0YWNoIHRvIGNvbXBsZXRlCisJICogdGhlIHNvY2tldCBpbml0aWFsaXphdGlvbiBhbmQg
cHV0IHRoZSBuZXcgc29ja2V0IG9udG8KKwkgKiBsaXN0ZW5pbmcgc29ja2V0J3Mgc29sX2luY29t
cCBsaXN0LCB3YWl0aW5nIHRvIGJlIHByb21vdGVkCisJICogdG8gc29sX2NvbXAgbGlzdC4KKwkg
KiBUaGUgbmV3IHNvY2tldCBjcmVhdGVkIGhhcyByZWYgY291bnQgMC4gVGhlcmUgaXMgbm8gb3Ro
ZXIKKwkgKiB0aHJlYWQgdGhhdCBjaGFuZ2VzIHRoZSBzdGF0ZSBvZiB0aGlzIG5ldyBvbmUgYXQg
dGhlCisJICogbW9tZW50LCBzbyB3ZSBkb24ndCBuZWVkIHRvIGhvbGQgaXRzIGxvY2sgd2hpbGUg
b3BlbmluZworCSAqIGNoYW5uZWwgYW5kIGZpbGxpbmcgb3V0IGl0cyBwY2IgaW5mb3JtYXRpb24u
CisJICovCisJbmV3X3NvID0gc29uZXdjb25uKHNvLCAwKTsKKwlpZiAoIW5ld19zbykKKwkJSFZT
T0NLX0RCRyhIVlNPQ0tfREJHX0VSUiwKKwkJICAgICIlczogY3JlYXRpbmcgbmV3IHNvY2tldCBm
YWlsZWRcbiIsIF9fZnVuY19fKTsKKworCS8qCisJICogTm93IG9wZW4gdGhlIHZtYnVzIGNoYW5u
ZWwuIElmIGl0IGZhaWxzLCB0aGUgc29ja2V0IHdpbGwgYmUKKwkgKiBvbiB0aGUgbGlzdGVuaW5n
IHNvY2tldCdzIHNvbF9pbmNvbXAgcXVldWUgdW50aWwgaXQgaXMKKwkgKiByZXBsYWNlZCBhbmQg
YWJvcnRlZC4KKwkgKi8KKwllcnJvciA9IGh2c29ja19vcGVuX2NoYW5uZWwoY2hhbiwgbmV3X3Nv
KTsKKwlpZiAoZXJyb3IpIHsKKwkJbmV3X3NvLT5zb19lcnJvciA9IGVycm9yOworCQlyZXR1cm47
CisJfQorCisJcGNiID0gc28tPnNvX3BjYjsKKwluZXdfcGNiID0gbmV3X3NvLT5zb19wY2I7CisK
KwlodnNfYWRkcl9zZXQoJihuZXdfcGNiLT5sb2NhbF9hZGRyKSwgcGNiLT5sb2NhbF9hZGRyLmh2
c19wb3J0KTsKKwkvKiBSZW1vdGUgcG9ydCBpcyB1bmtub3duIHRvIGd1ZXN0IGluIHRoaXMgdHlw
ZSBvZiBjb25uZWNpdG9uICovCisJaHZzX2FkZHJfc2V0KCYobmV3X3BjYi0+cmVtb3RlX2FkZHIp
LCBIVkFERFJfUE9SVF9VTktOT1dOKTsKKwluZXdfcGNiLT5jaGFuID0gY2hhbjsKKwluZXdfcGNi
LT5yZWN2X2RhdGFfbGVuID0gMDsKKwluZXdfcGNiLT5yZWN2X2RhdGFfb2ZmID0gMDsKKwluZXdf
cGNiLT5yYl9pbml0ID0gZmFsc2U7CisKKwluZXdfcGNiLT52bV9zcnZfaWQgPSAqdm1idXNfY2hh
bl9ndWlkX3R5cGUoY2hhbik7CisJbmV3X3BjYi0+aG9zdF9zcnZfaWQgPSAqdm1idXNfY2hhbl9n
dWlkX2luc3QoY2hhbik7CisKKwlodnNfaW5zZXJ0X3NvY2tldF9vbl9saXN0KG5ld19zbywgSFZT
X0xJU1RfQ09OTkVDVEVEKTsKKworCXNjLT5wY2IgPSBuZXdfcGNiOworCisJLyoKKwkgKiBDaGFu
Z2UgdGhlIHNvY2tldCBzdGF0ZSB0byBTU19JU0NPTk5FQ1RFRC4gVGhpcyB3aWxsIHByb21vdGUK
KwkgKiB0aGUgc29ja2V0IHRvIHNvbF9jb21wIHF1ZXVlIGFuZCB3YWtlIHVwIHRoZSB0aHJlYWQg
d2hpY2gKKwkgKiBpcyBhY2NlcHRpbmcgY29ubmVjdGlvbi4KKwkgKi8KKwlzb2lzY29ubmVjdGVk
KG5ld19zbyk7Cit9CisKKworLyoKKyAqIEd1ZXN0IGlzIGFjdGl2ZWx5IGNvbm5lY3RpbmcgdG8g
aG9zdC4KKyAqLworc3RhdGljIHZvaWQKK2h2c29ja19vcGVuX2Nvbm5fYWN0aXZlKHN0cnVjdCB2
bWJ1c19jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc29ja2V0ICpzbykKK3sKKwlzdHJ1Y3QgaHZzX3Bj
YiAqcGNiOworCWludCBlcnJvcjsKKworCWVycm9yID0gaHZzb2NrX29wZW5fY2hhbm5lbChjaGFu
LCBzbyk7CisJaWYgKGVycm9yKSB7CisJCXNvLT5zb19lcnJvciA9IGVycm9yOworCQlyZXR1cm47
CisJfQorCisJcGNiID0gc28tPnNvX3BjYjsKKwlwY2ItPmNoYW4gPSBjaGFuOworCXBjYi0+cmVj
dl9kYXRhX2xlbiA9IDA7CisJcGNiLT5yZWN2X2RhdGFfb2ZmID0gMDsKKwlwY2ItPnJiX2luaXQg
PSBmYWxzZTsKKworCW10eF9sb2NrKCZodnNfdHJhbnNfc29ja3NfbXR4KTsKKwlfX2h2c19yZW1v
dmVfc29ja2V0X2Zyb21fbGlzdChzbywgSFZTX0xJU1RfQk9VTkQpOworCV9faHZzX2luc2VydF9z
b2NrZXRfb25fbGlzdChzbywgSFZTX0xJU1RfQ09OTkVDVEVEKTsKKwltdHhfdW5sb2NrKCZodnNf
dHJhbnNfc29ja3NfbXR4KTsKKworCS8qCisJICogQ2hhbmdlIHRoZSBzb2NrZXQgc3RhdGUgdG8g
U1NfSVNDT05ORUNURUQuIFRoaXMgd2lsbCB3YWtlIHVwCisJICogdGhlIHRocmVhZCBzbGVlcGlu
ZyBpbiBjb25uZWN0IGNhbGwuCisJICovCisJc29pc2Nvbm5lY3RlZChzbyk7Cit9CisKK3N0YXRp
YyB2b2lkCitodnNvY2tfb3Blbl9jb25uZWN0aW9uKHN0cnVjdCB2bWJ1c19jaGFubmVsICpjaGFu
LCBzdHJ1Y3QgaHZzb2NrX3NjICpzYykKK3sKKwlzdHJ1Y3QgaHlwZXJ2X2d1aWQgKmluc3RfZ3Vp
ZCwgKnR5cGVfZ3VpZDsKKwlib29sIGNvbm5fZnJvbV9ob3N0OworCXN0cnVjdCBzb2NrYWRkcl9o
dnMgYWRkcjsKKwlzdHJ1Y3Qgc29ja2V0ICpzbzsKKwlzdHJ1Y3QgaHZzX3BjYiAqcGNiOworCisJ
dHlwZV9ndWlkID0gKHN0cnVjdCBoeXBlcnZfZ3VpZCAqKSB2bWJ1c19jaGFuX2d1aWRfdHlwZShj
aGFuKTsKKwlpbnN0X2d1aWQgPSAoc3RydWN0IGh5cGVydl9ndWlkICopIHZtYnVzX2NoYW5fZ3Vp
ZF9pbnN0KGNoYW4pOworCWNvbm5fZnJvbV9ob3N0ID0gdm1idXNfY2hhbl9pc19odnNfY29ubl9m
cm9tX2hvc3QoY2hhbik7CisKKwlIVlNPQ0tfREJHKEhWU09DS19EQkdfSU5GTywgInR5cGVfZ3Vp
ZCBpcyAiKTsKKwlodnNvY2tfcHJpbnRfZ3VpZCh0eXBlX2d1aWQpOworCUhWU09DS19EQkcoSFZT
T0NLX0RCR19JTkZPLCAiaW5zdF9ndWlkIGlzICIpOworCWh2c29ja19wcmludF9ndWlkKGluc3Rf
Z3VpZCk7CisJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX0lORk8sICJjb25uZWN0aW9uICVzIGhvc3Rc
biIsCisJICAgIChjb25uX2Zyb21faG9zdCA9PSB0cnVlICkgPyAiZnJvbSIgOiAidG8iKTsKKwor
CS8qCisJICogVGhlIGxpc3RlbmluZyBwb3J0IHNob3VsZCBiZSBpbiBbMCwgTUFYX0xJU1RFTl9Q
T1JUXQorCSAqLworCWlmICghaXNfdmFsaWRfc3J2X2lkKHR5cGVfZ3VpZCkpCisJCXJldHVybjsK
KworCS8qCisJICogVGhlcmUgc2hvdWxkIGJlIGEgYm91bmQgc29ja2V0IGFscmVhZHkgY3JlYXRl
ZCBubyBtYXR0ZXIKKwkgKiBpdCBpcyBhIHBhc3NpdmUgb3IgYWN0aXZlIGNvbm5lY3Rpb24uCisJ
ICogRm9yIGhvc3QgaW5pdGlhdGVkIGNvbm5lY3Rpb24gKHBhc3NpdmUgb24gZ3Vlc3Qgc2lkZSks
CisJICogdGhlICB0eXBlX2d1aWQgY29udGFpbnMgdGhlIHBvcnQgd2hpY2ggZ3Vlc3QgaXMgYm91
bmQgYW5kCisJICogbGlzdGVuaW5nLgorCSAqIEZvciB0aGUgZ3Vlc3QgaW5pdGlhdGVkIGNvbm5l
Y3Rpb24gKGFjdGl2ZSBvbiBndWVzdCBzaWRlKSwKKwkgKiB0aGUgaW5zdF9ndWlkIGNvbnRhaW5z
IHRoZSBwb3J0IHRoYXQgZ3Vlc3QgaGFzIGF1dG8gYm91bmQKKwkgKiB0by4KKwkgKi8KKwlodnNf
YWRkcl9pbml0KCZhZGRyLCBjb25uX2Zyb21faG9zdCA/IHR5cGVfZ3VpZCA6IGluc3RfZ3VpZCk7
CisJc28gPSBodnNfZmluZF9zb2NrZXRfb25fbGlzdCgmYWRkciwgSFZTX0xJU1RfQk9VTkQpOwor
CWlmICghc28pIHsKKwkJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX0VSUiwKKwkJICAgICIlczogbm8g
Ym91bmQgc29ja2V0IGZvdW5kIGZvciBwb3J0ICV1XG4iLAorCQkgICAgX19mdW5jX18sIGFkZHIu
aHZzX3BvcnQpOworCQlyZXR1cm47CisJfQorCisJaWYgKGNvbm5fZnJvbV9ob3N0KSB7CisJCWh2
c29ja19vcGVuX2Nvbm5fcGFzc2l2ZShjaGFuLCBzbywgc2MpOworCX0gZWxzZSB7CisJCSh2b2lk
KSBodnNfdHJhbnNfbG9jaygpOworCQlwY2IgPSBzby0+c29fcGNiOworCQlpZiAocGNiICYmIHBj
Yi0+c28pIHsKKwkJCXNjLT5wY2IgPSBzbzJodnNwY2Ioc28pOworCQkJaHZzb2NrX29wZW5fY29u
bl9hY3RpdmUoY2hhbiwgc28pOworCQl9IGVsc2UgeworCQkJSFZTT0NLX0RCRyhIVlNPQ0tfREJH
X1ZFUkJPU0UsCisJCQkgICAgIiVzOiBjaGFubmVsIGRldGFjaGVkIGJlZm9yZSBvcGVuXG4iLCBf
X2Z1bmNfXyk7CisJCX0KKwkJaHZzX3RyYW5zX3VubG9jaygpOworCX0KKworfQorCitzdGF0aWMg
aW50CitodnNvY2tfcHJvYmUoZGV2aWNlX3QgZGV2KQoreworCXN0cnVjdCB2bWJ1c19jaGFubmVs
ICpjaGFubmVsID0gdm1idXNfZ2V0X2NoYW5uZWwoZGV2KTsKKworCWlmICghY2hhbm5lbCB8fCAh
dm1idXNfY2hhbl9pc19odnMoY2hhbm5lbCkpIHsKKwkJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX1ZF
UkJPU0UsCisJCSAgICAiaHZzb2NrX3Byb2JlIGNhbGxlZCBidXQgbm90IGEgaHZzb2NrIGNoYW5u
ZWwgaWQgJXVcbiIsCisJCSAgICB2bWJ1c19jaGFuX2lkKGNoYW5uZWwpKTsKKworCQlyZXR1cm4g
RU5YSU87CisJfSBlbHNlIHsKKwkJSFZTT0NLX0RCRyhIVlNPQ0tfREJHX1ZFUkJPU0UsCisJCSAg
ICAiaHZzb2NrX3Byb2JlIGdvdCBhIGh2c29jayBjaGFubmVsIGlkICV1XG4iLAorCQkgICAgdm1i
dXNfY2hhbl9pZChjaGFubmVsKSk7CisKKwkJcmV0dXJuIEJVU19QUk9CRV9ERUZBVUxUOworCX0K
K30KKworc3RhdGljIGludAoraHZzb2NrX2F0dGFjaChkZXZpY2VfdCBkZXYpCit7CisJc3RydWN0
IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwgPSB2bWJ1c19nZXRfY2hhbm5lbChkZXYpOworCXN0cnVj
dCBodnNvY2tfc2MgKnNjID0gKHN0cnVjdCBodnNvY2tfc2MgKilkZXZpY2VfZ2V0X3NvZnRjKGRl
dik7CisKKwlIVlNPQ0tfREJHKEhWU09DS19EQkdfVkVSQk9TRSwgImh2c29ja19hdHRhY2ggY2Fs
bGVkLlxuIik7CisKKwlodnNvY2tfb3Blbl9jb25uZWN0aW9uKGNoYW5uZWwsIHNjKTsKKworCS8q
CisJICogQWx3YXlzIHJldHVybiBzdWNjZXNzLiBPbiBlcnJvciB0aGUgaG9zdCB3aWxsIHJlc2Np
bmQgdGhlIGRldmljZQorCSAqIGluIDMwIHNlY29uZHMgYW5kIHdlIGNhbiBkbyBjbGVhbnVwIGF0
IHRoYXQgdGltZSBpbgorCSAqIHZtYnVzX2NoYW5fbXNncHJvY19jaHJlc2NpbmQoKS4KKwkgKi8K
KwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitodnNvY2tfZGV0YWNoKGRldmljZV90IGRl
dikKK3sKKwlzdHJ1Y3QgaHZzb2NrX3NjICpzYyA9IChzdHJ1Y3QgaHZzb2NrX3NjICopZGV2aWNl
X2dldF9zb2Z0YyhkZXYpOworCXN0cnVjdCBzb2NrZXQgKnNvOworCWludCBlcnJvciwgcmV0cnk7
CisKKwlpZiAoYm9vdHZlcmJvc2UpCisJCWRldmljZV9wcmludGYoZGV2LCAiaHZzb2NrX2RldGFj
aCBjYWxsZWQuXG4iKTsKKworCUhWU09DS19EQkcoSFZTT0NLX0RCR19WRVJCT1NFLCAiaHZzb2Nr
X2RldGFjaCBjYWxsZWQuXG4iKTsKKworCWlmIChzYy0+cGNiICE9IE5VTEwpIHsKKwkJKHZvaWQp
IGh2c190cmFuc19sb2NrKCk7CisKKwkJc28gPSBoc3ZwY2Iyc28oc2MtPnBjYik7CisJCWlmIChz
bykgeworCQkJLyogQ2xvc2UgdGhlIGNvbm5lY3Rpb24gKi8KKwkJCWlmIChzby0+c29fc3RhdGUg
JgorCQkJICAgIChTU19JU0NPTk5FQ1RFRHxTU19JU0NPTk5FQ1RJTkd8U1NfSVNESVNDT05ORUNU
SU5HKSkKKwkJCQlzb2lzZGlzY29ubmVjdGVkKHNvKTsKKwkJfQorCisJCW10eF9sb2NrKCZodnNf
dHJhbnNfc29ja3NfbXR4KTsKKwkJX19odnNfcmVtb3ZlX3BjYl9mcm9tX2xpc3Qoc2MtPnBjYiwK
KwkJICAgIEhWU19MSVNUX0JPVU5EIHwgSFZTX0xJU1RfQ09OTkVDVEVEKTsKKwkJbXR4X3VubG9j
aygmaHZzX3RyYW5zX3NvY2tzX210eCk7CisKKwkJLyoKKwkJICogQ2xvc2UgY2hhbm5lbCB3aGls
ZSBubyByZWFkZXIgYW5kIHNlbmRlciBhcmUgd29ya2luZworCQkgKiBvbiB0aGUgYnVmZmVyIHJp
bmdzLgorCQkgKi8KKwkJaWYgKHNvKSB7CisJCQlyZXRyeSA9IDA7CisJCQl3aGlsZSAoKGVycm9y
ID0gc2Jsb2NrKCZzby0+c29fcmN2LCAwKSkgPT0KKwkJCSAgICBFV09VTERCTE9DSykgeworCQkJ
CS8qCisJCQkJICogU29tZW9uZSBpcyByZWFkaW5nLCByeCBiciBpcyBidXN5CisJCQkJICovCisJ
CQkJc29pc2Rpc2Nvbm5lY3RlZChzbyk7CisJCQkJREVMQVkoNTAwKTsKKwkJCQlIVlNPQ0tfREJH
KEhWU09DS19EQkdfVkVSQk9TRSwKKwkJCQkgICAgIndhaXRpbmcgZm9yIHJ4IHJlYWRlciB0byBl
eGl0LCAiCisJCQkJICAgICJyZXRyeSA9ICVkXG4iLCByZXRyeSsrKTsKKwkJCX0KKwkJCXJldHJ5
ID0gMDsKKwkJCXdoaWxlICgoZXJyb3IgPSBzYmxvY2soJnNvLT5zb19zbmQsIDApKSA9PQorCQkJ
ICAgIEVXT1VMREJMT0NLKSB7CisJCQkJLyoKKwkJCQkgKiBTb21lb25lIGlzIHNlbmRpbmcsIHR4
IGJyIGlzIGJ1c3kKKwkJCQkgKi8KKwkJCQlzb2lzZGlzY29ubmVjdGVkKHNvKTsKKwkJCQlERUxB
WSg1MDApOworCQkJCUhWU09DS19EQkcoSFZTT0NLX0RCR19WRVJCT1NFLAorCQkJCSAgICAid2Fp
dGluZyBmb3IgdHggc2VuZGVyIHRvIGV4aXQsICIKKwkJCQkgICAgInJldHJ5ID0gJWRcbiIsIHJl
dHJ5KyspOworCQkJfQorCQl9CisKKworCQliemVybyhzYy0+cGNiLCBzaXplb2Yoc3RydWN0IGh2
c19wY2IpKTsKKwkJZnJlZShzYy0+cGNiLCBNX0hWU09DSyk7CisJCXNjLT5wY2IgPSBOVUxMOwor
CisJCWlmIChzbykgeworCQkJc2J1bmxvY2soJnNvLT5zb19yY3YpOworCQkJc2J1bmxvY2soJnNv
LT5zb19zbmQpOworCQkJc28tPnNvX3BjYiA9IE5VTEw7CisJCX0KKworCQlodnNfdHJhbnNfdW5s
b2NrKCk7CisJfQorCisJdm1idXNfY2hhbl9jbG9zZSh2bWJ1c19nZXRfY2hhbm5lbChkZXYpKTsK
KworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBkZXZpY2VfbWV0aG9kX3QgaHZzb2NrX21ldGhv
ZHNbXSA9IHsKKwkvKiBEZXZpY2UgaW50ZXJmYWNlICovCisJREVWTUVUSE9EKGRldmljZV9wcm9i
ZSwgaHZzb2NrX3Byb2JlKSwKKwlERVZNRVRIT0QoZGV2aWNlX2F0dGFjaCwgaHZzb2NrX2F0dGFj
aCksCisJREVWTUVUSE9EKGRldmljZV9kZXRhY2gsIGh2c29ja19kZXRhY2gpLAorCURFVk1FVEhP
RF9FTkQKK307CisKK3N0YXRpYyBkcml2ZXJfdCBodnNvY2tfZHJpdmVyID0geworCSJodl9zb2Nr
IiwKKwlodnNvY2tfbWV0aG9kcywKKwlzaXplb2Yoc3RydWN0IGh2c29ja19zYykKK307CisKK3N0
YXRpYyBkZXZjbGFzc190IGh2c29ja19kZXZjbGFzczsKKworRFJJVkVSX01PRFVMRShodnNvY2ss
IHZtYnVzLCBodnNvY2tfZHJpdmVyLCBodnNvY2tfZGV2Y2xhc3MsIE5VTEwsIE5VTEwpOworTU9E
VUxFX1ZFUlNJT04oaHZzb2NrLCAxKTsKK01PRFVMRV9ERVBFTkQoaHZzb2NrLCB2bWJ1cywgMSwg
MSwgMSk7CmRpZmYgLS1naXQgYS9oZWFkL3N5cy9jb25mL2ZpbGVzLng4NiBiL2hlYWQvc3lzL2Nv
bmYvZmlsZXMueDg2Ci0tLSBhL2hlYWQvc3lzL2NvbmYvZmlsZXMueDg2CisrKyBiL2hlYWQvc3lz
L2NvbmYvZmlsZXMueDg2CkBAIC0xMzMsNiArMTMzLDcgQEAKIGRldi9od3BtYy9od3BtY191bmNv
cmUuYwlvcHRpb25hbAlod3BtYwogZGV2L2h3cG1jL2h3cG1jX3RzYy5jCQlvcHRpb25hbAlod3Bt
YwogZGV2L2h3cG1jL2h3cG1jX3g4Ni5jCQlvcHRpb25hbAlod3BtYworZGV2L2h5cGVydi9odnNv
Y2svaHZfc29jay5jCQkJCW9wdGlvbmFsCWh5cGVydgogZGV2L2h5cGVydi9pbnB1dC9odl9rYmQu
YwkJCQlvcHRpb25hbAloeXBlcnYKIGRldi9oeXBlcnYvaW5wdXQvaHZfa2JkYy5jCQkJCW9wdGlv
bmFsCWh5cGVydgogZGV2L2h5cGVydi9wY2liL3ZtYnVzX3BjaWIuYwkJCQlvcHRpb25hbAloeXBl
cnYgcGNpCgo=


--b1_31600b32a6cfba2ec75555d0be6000a9--



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