[OpenAFS-devel] Patches for Openafs compression support

Sven Oehme oehmes@de.ibm.com
Wed, 22 Dec 2004 15:35:06 +0100


--=_mixed 005006DAC1256F72_=
Content-Type: multipart/alternative; boundary="=_alternative 005006DAC1256F72_="


--=_alternative 005006DAC1256F72_=
Content-Type: text/plain; charset="US-ASCII"

Hi, 

we have started a new project to enhance the data transfer (first on 
volume level) to slow link connected sites.
we implemented the gzip algorithm and will add bzip2 compression later. 

i have attached two patches for Openafs 1.2.13 and 1.3.77 to add gzip 
compression to vos dump , release and restore 

Important : there are no changes for WinNT so far, it will be added later 

there are no changes to libadmin (AFS API), but we will add this later 

any comments on that ?



Sven

--=_alternative 005006DAC1256F72_=
Content-Type: text/html; charset="US-ASCII"


<br><font size=2 face="Courier New">Hi, </font>
<br>
<br><font size=2 face="Courier New">we have started a new project to enhance
the data transfer (first on volume level) to slow link connected sites.</font>
<br><font size=2 face="Courier New">we implemented the gzip algorithm and
will add bzip2 compression later. </font>
<br>
<br><font size=2 face="Courier New">i have attached two patches for Openafs
1.2.13 and 1.3.77 to add gzip compression to vos dump , release and restore
</font>
<br><font size=2 face="Courier New"><br>
Important : there are no changes for WinNT so far, it will be added later
<br>
<br>
there are no changes to libadmin (AFS API), but we will add this later
<br>
</font>
<br><font size=2 face="Courier New">any comments on that ?</font>
<br><font size=2><tt><br>
</tt></font>
<br>
<br><font size=2 face="sans-serif">Sven</font>
<br>
--=_alternative 005006DAC1256F72_=--
--=_mixed 005006DAC1256F72_=
Content-Type: application/octet-stream; name="openafs-1.3.77z.patch"
Content-Disposition: attachment; filename="openafs-1.3.77z.patch"
Content-Transfer-Encoding: base64

ZGlmZiAtTmF1ciBvcGVuYWZzLTEuMy43Ny9zcmMvdHZvbHNlci9NYWtlZmlsZS5pbiBvcGVuYWZz
LTEuMy43N3ovc3JjL3R2b2xzZXIvTWFrZWZpbGUuaW4NCi0tLSBvcGVuYWZzLTEuMy43Ny9zcmMv
dHZvbHNlci9NYWtlZmlsZS5pbgkyMDAzLTExLTIyIDA0OjEzOjE5LjAwMDAwMDAwMCArMDEwMA0K
KysrIG9wZW5hZnMtMS4zLjc3ei9zcmMvdHZvbHNlci9NYWtlZmlsZS5pbgkyMDA0LTEyLTIxIDE4
OjM4OjU3LjAwMDAwMDAwMCArMDEwMA0KQEAgLTEsNiArMSw2IEBADQogIyBDb3B5cmlnaHQgMjAw
MCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJz
Lg0KICMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0jIA0KKyMNCiAjIFRoaXMgc29mdHdhcmUgaGFz
IGJlZW4gcmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBJQk0gUHVibGljDQogIyBMaWNl
bnNlLiAgRm9yIGRldGFpbHMsIHNlZSB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSB0b3AtbGV2ZWwg
c291cmNlDQogIyBkaXJlY3Rvcnkgb3Igb25saW5lIGF0IGh0dHA6Ly93d3cub3BlbmFmcy5vcmcv
ZGwvbGljZW5zZTEwLmh0bWwNCkBAIC0yNCw3ICsyNCw3IEBADQogRlNJTlQ9Li4vZnNpbnQNCiBW
T0xTRVI9Li4vdm9sc2VyDQogDQotVk9MU0VST0JKUz12b2xtYWluLm8gdm9scHJvY3MubyBwaHlz
aW8ubyB2b2x0cmFucy5vIHZvbGVyci5vIHZvbGludC5jcy5vIGR1bXBzdHVmZi5vICB2b2xpbnQu
c3MubyB2b2xpbnQueGRyLm8gdnNjb21tb24ubw0KK1ZPTFNFUk9CSlM9dm9sbWFpbi5vIHZvbHBy
b2NzLm8gcGh5c2lvLm8gdm9sdHJhbnMubyB2b2xlcnIubyB2b2xpbnQuY3MubyBkdW1wc3R1ZmYu
byAgdm9saW50LnNzLm8gdm9saW50Lnhkci5vIHZzY29tbW9uLm8gemlvcngubw0KIA0KIFZMU0VS
VkVST0JKUz0jdmxkYmludC5jcy5vIHZsZGJpbnQueGRyLm8NCiANCkBAIC00NCw3ICs0NCw3IEBA
DQogb2JqZWN0cz0gJHtWT0xTRVJPQkpTfSAke1ZMU0VSVkVST0JKU30gJHtMV1BPQkpTfSAke0xJ
QkFDTE9CSlN9IFwNCiAJICR7VVRJTE9CSlN9ICR7RElST0JKU30gJHtWT0xPQkpTfSAke0ZTSU5U
T0JKU30NCiANCi1MSUJTPSR7VE9QX0xJQkRJUn0vbGliYWZzYXV0aGVudC5hICR7VE9QX0xJQkRJ
Un0vbGliYWZzcnBjLmEgJHtUT1BfTElCRElSfS91dGlsLmENCitMSUJTPSR7VE9QX0xJQkRJUn0v
bGliYWZzYXV0aGVudC5hICR7VE9QX0xJQkRJUn0vbGliYWZzcnBjLmEgJHtUT1BfTElCRElSfS91
dGlsLmEgL3Vzci9saWIvbGliei5hDQogDQogYWxsOiB2b2xzZXJ2ZXINCiANCkBAIC02NCw2ICs2
NCw4IEBADQogCSR7Q09NUElMRX0NCiBkdW1wc3R1ZmYubzogJHtWT0xTRVJ9L2R1bXBzdHVmZi5j
DQogCSR7Q09NUElMRX0NCit6aW9yeC5vOiAke1ZPTFNFUn0vemlvcnguYw0KKwkke0NPTVBJTEV9
DQogdm9saW50LnNzLm86ICR7Vk9MU0VSfS92b2xpbnQuc3MuYw0KIAkke0NPTVBJTEV9DQogdm9s
aW50Lnhkci5vOiAke1ZPTFNFUn0vdm9saW50Lnhkci5jDQpkaWZmIC1OYXVyIG9wZW5hZnMtMS4z
Ljc3L3NyYy92b2xzZXIvZHVtcC5oIG9wZW5hZnMtMS4zLjc3ei9zcmMvdm9sc2VyL2R1bXAuaA0K
LS0tIG9wZW5hZnMtMS4zLjc3L3NyYy92b2xzZXIvZHVtcC5oCTIwMDMtMDctMTYgMDE6MTc6NDgu
MDAwMDAwMDAwICswMjAwDQorKysgb3BlbmFmcy0xLjMuNzd6L3NyYy92b2xzZXIvZHVtcC5oCTIw
MDQtMTItMjIgMDE6NTY6NTMuMDAwMDAwMDAwICswMTAwDQpAQCAtNTAsMyArNTAsNCBAQA0KICNk
ZWZpbmUgU0hBS0U0CSJQIg0KICNkZWZpbmUgU0hBS0U1CSJRIg0KICNkZWZpbmUgU0hBS0VfQUJP
UlQJIiEiDQorDQpkaWZmIC1OYXVyIG9wZW5hZnMtMS4zLjc3L3NyYy92b2xzZXIvZHVtcHN0dWZm
LmMgb3BlbmFmcy0xLjMuNzd6L3NyYy92b2xzZXIvZHVtcHN0dWZmLmMNCi0tLSBvcGVuYWZzLTEu
My43Ny9zcmMvdm9sc2VyL2R1bXBzdHVmZi5jCTIwMDMtMTEtMjMgMDU6NTM6NDQuMDAwMDAwMDAw
ICswMTAwDQorKysgb3BlbmFmcy0xLjMuNzd6L3NyYy92b2xzZXIvZHVtcHN0dWZmLmMJMjAwNC0x
Mi0yMiAwNDozNjowNy4wMDAwMDAwMDAgKzAxMDANCkBAIC01NSw2ICs1NSw3IEBADQogI2luY2x1
ZGUgPGFmcy9hY2wuaD4NCiAjaW5jbHVkZSAidm9sc2VyLmgiDQogI2luY2x1ZGUgInZvbGludC5o
Ig0KKyNpbmNsdWRlICJ6aW9yeC5oIg0KIA0KICNpZm5kZWYgQUZTX05UNDBfRU5WDQogI2lmZGVm
IE9fTEFSR0VGSUxFDQpAQCAtNzAsNiArNzEsOSBAQA0KIA0KIGV4dGVybiBpbnQgRG9Mb2dnaW5n
Ow0KIA0KKyNkZWZpbmUgREVGX1RPX1dSSVRFIDENCisjZGVmaW5lIERFRl9UT19SRUFEIDANCisN
CiAvKiBUaGlzIGlvZCBzdHVmZiBpcyBhIHNpbGx5IGxpdHRsZSBwYWNrYWdlIHRvIGVtdWxhdGUg
dGhlIG9sZCBxaV9pbiBzdHVmZiwgd2hpY2gNCiAgICBlbXVsYXRlZCB0aGUgc3RkaW8gc3R1ZmYu
ICBUaGVyZSBpcyBhIGJpZyBhc3N1bXB0aW9uIGhlcmUsIHRoYXQgdGhlDQogICAgcnhfUmVhZCB3
aWxsIG5ldmVyIGJlIGNhbGxlZCBkaXJlY3RseSwgYnkgYSByb3V0aW5lIGxpa2UgcmVhZEZpbGUs
IHdoZW4NCkBAIC03OSwxNSArODMsMTYgQEANCiAgICB0aGUgcHVzaGluZyBiYWNrIG9mIGNoYXJh
Y3RlcnMgKGkuZS4gY2hhcmFjdGVycyBzaG91bGQgbm90IGRvdWJsZSBib3RoDQogICAgYXMgYW4g
ZW5kIG1hcmtlciBhbmQgYSBiZWdpbiBtYXJrZXIpICovDQogc3RydWN0IGlvZCB7DQotICAgIHN0
cnVjdCByeF9jYWxsICpjYWxsOwkvKiBjYWxsIHRvIHdoaWNoIHRvIHdyaXRlLCBtaWdodCBiZSBh
biBhcnJheSAqLw0KKyAgICBzdHJ1Y3QgemlvcnhfY2FsbCAqY2FsbDsJLyogY2FsbCB0byB3aGlj
aCB0byB3cml0ZSwgbWlnaHQgYmUgYW4gYXJyYXkgKi8NCiAgICAgaW50IGRldmljZTsJCQkvKiBk
dW1wIGRldmljZSBJRCBmb3Igdm9sdW1lICovDQogICAgIGludCBwYXJlbnRJZDsJCS8qIGR1bXAg
cGFyZW50IElEIGZvciB2b2x1bWUgKi8NCiAgICAgc3RydWN0IERpc2tQYXJ0aXRpb24gKmR1bXBQ
YXJ0aXRpb247CS8qIER1bXAgcGFydGl0aW9uLiAqLw0KLSAgICBzdHJ1Y3QgcnhfY2FsbCAqKmNh
bGxzOwkvKiBhcnJheSBvZiBwb2ludGVycyB0byBjYWxscyAqLw0KKyAgICBzdHJ1Y3Qgemlvcnhf
Y2FsbCAqKmNhbGxzOwkvKiBhcnJheSBvZiBwb2ludGVycyB0byBjYWxscyAqLw0KICAgICBpbnQg
bmNhbGxzOwkJCS8qIGhvdyBtYW55IGNhbGxzL2NvZGVzIGluIGFycmF5ICovDQogICAgIGludCAq
Y29kZXM7CQkJLyogb25lIHJldHVybiBjb2RlIGZvciBlYWNoIGNhbGwgKi8NCiAgICAgY2hhciBo
YXZlT2xkQ2hhcjsJCS8qIHN0YXRlIGZvciBwdXNoaW5nIGJhY2sgYSBjaGFyYWN0ZXIgKi8NCiAg
ICAgY2hhciBvbGRDaGFyOw0KKyAgICBpbnQgdG9fd3JpdGU7IC8qIG9uZSBtb3JlIGFzc3VtcHRp
b246IHRoaXMgaW9kIG11c3QgYmUgdXNlZCBleGNsdXNpdmVseSBmb3IgcmVhZCBvciB3cml0ZSAq
Lw0KIH07DQogDQogDQpAQCAtMTIzLDI5ICsxMjgsMTc4IEBADQogCQkJIGludCB2b2xpZCwgaW50
IHZub2RlTnVtYmVyLCBpbnQgZHVtcEV2ZXJ5dGhpbmcsDQogCQkJIHJlZ2lzdGVyIHN0cnVjdCB2
b2xpbnRTaXplICpzaXplKTsNCiANCi1zdGF0aWMgdm9pZA0KLWlvZF9Jbml0KHJlZ2lzdGVyIHN0
cnVjdCBpb2QgKmlvZHAsIHJlZ2lzdGVyIHN0cnVjdCByeF9jYWxsICpjYWxsKQ0KLXsNCi0gICAg
aW9kcC0+Y2FsbCA9IGNhbGw7DQorLy9yZXR1cm4gMCBvbiBzdWNjZXNzLCAoLTEpIG9uIGZhaWwN
CitzdGF0aWMgaW50IGlvZF9Jbml0KHJlZ2lzdGVyIHN0cnVjdCBpb2QgKmlvZHAsIHJlZ2lzdGVy
IHN0cnVjdCByeF9jYWxsICpjYWxsLA0KKwkJCWludCBjb21wcmVzcywgaW50IGxldmVsLCBpbnQg
dG9fd3JpdGUpDQorew0KKyAgICBtZW1zZXQoaW9kcCwgMCwgc2l6ZW9mKHN0cnVjdCBpb2QpKTsN
CisgICAgaW9kcC0+dG9fd3JpdGUgPSB0b193cml0ZTsNCisgICAgaW9kcC0+Y2FsbCA9IChzdHJ1
Y3QgemlvcnhfY2FsbCAqKW1hbGxvYyhzaXplb2Yoc3RydWN0IHppb3J4X2NhbGwpKTsNCisgICAg
aWYgKGlvZHAtPmNhbGw9PU5VTEwpDQorICAgIHsNCisgICAgICAgIExvZygiaW9kX0luaXQ6IG1l
bW9yeSBhbGxvY2F0aW9uIGVycm9yXG4iKTsNCisgICAgICAgIHJldHVybiAoLTEpOw0KKyAgICB9
DQorDQorICAgIGlmICh0b193cml0ZT09REVGX1RPX1dSSVRFKQ0KKyAgICB7DQorICAgICAgICBp
ZiAoemlvcnhCZWdpbldyaXRlKGNhbGwsIGNvbXByZXNzLCBsZXZlbCwgaW9kcC0+Y2FsbCkhPVpJ
T1JYX09LKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIExvZygiaW9kX0luaXQ6IHppb3J4QmVn
aW5Xcml0ZSBmYWlsZWQ6ICVzXG4iLCBpb2RwLT5jYWxsLT5sYXN0RXJyb3JNc2cpOw0KKyAgICAg
ICAgICAgIGZyZWUoaW9kcC0+Y2FsbCk7DQorICAgICAgICAgICAgaW9kcC0+Y2FsbCA9IE5VTEw7
DQorICAgICAgICAgICAgcmV0dXJuICgtMSk7DQorICAgICAgICB9DQorICAgIH0gZWxzZSB7DQor
ICAgICAgICBpZiAoemlvcnhCZWdpblJlYWQoY2FsbCwgY29tcHJlc3MsIGxldmVsLCBpb2RwLT5j
YWxsKSE9WklPUlhfT0spDQorICAgICAgICB7DQorICAgICAgICAgICAgTG9nKCJpb2RfSW5pdDog
emlvcnhCZWdpblJlYWQgZmFpbGVkOiAlc1xuIiwgaW9kcC0+Y2FsbC0+bGFzdEVycm9yTXNnKTsN
CisgICAgICAgICAgICBmcmVlKGlvZHAtPmNhbGwpOw0KKyAgICAgICAgICAgIGlvZHAtPmNhbGwg
PSBOVUxMOw0KKyAgICAgICAgICAgIHJldHVybiAoLTEpOw0KKyAgICAgICAgfQ0KKyAgICB9DQor
DQogICAgIGlvZHAtPmhhdmVPbGRDaGFyID0gMDsNCiAgICAgaW9kcC0+bmNhbGxzID0gMTsNCi0g
ICAgaW9kcC0+Y2FsbHMgPSAoc3RydWN0IHJ4X2NhbGwgKiopMDsNCisgICAgaW9kcC0+Y2FsbHMg
PSAoc3RydWN0IHppb3J4X2NhbGwgKiopIDA7DQorDQorICAgIHJldHVybiAwOw0KIH0NCiANCi1z
dGF0aWMgdm9pZA0KLWlvZF9Jbml0TXVsdGkoc3RydWN0IGlvZCAqaW9kcCwgc3RydWN0IHJ4X2Nh
bGwgKipjYWxscywgaW50IG5jYWxscywNCi0JICAgICAgaW50ICpjb2RlcykNCisvL3JldHVybiAw
IG9uIHN1Y2Nlc3MsICgtMSkgb24gZmFpbA0KK3N0YXRpYyBpbnQgaW9kX0RvbmUoc3RydWN0IGlv
ZCAqaW9kcCkNCiB7DQorICAgIGludCByZXM7DQogDQotICAgIGlvZHAtPmNhbGxzID0gY2FsbHM7
DQotICAgIGlvZHAtPmhhdmVPbGRDaGFyID0gMDsNCi0gICAgaW9kcC0+bmNhbGxzID0gbmNhbGxz
Ow0KLSAgICBpb2RwLT5jb2RlcyA9IGNvZGVzOw0KLSAgICBpb2RwLT5jYWxsID0gKHN0cnVjdCBy
eF9jYWxsICopMDsNCisgICAgcmVzID0gMDsNCisgICAgaWYgKGlvZHAtPnRvX3dyaXRlPT1ERUZf
VE9fV1JJVEUpDQorICAgIHsNCisgICAgICAgIGlmICh6aW9yeEVuZFdyaXRlKGlvZHAtPmNhbGwp
IT1aSU9SWF9PSykNCisJew0KKwkgICAgTG9nKCJpb2RfRG9uZTogemlvcnhFbmRXcml0ZSBmYWls
ZWQ6ICVzXG4iLCBpb2RwLT5jYWxsLT5sYXN0RXJyb3JNc2cpOw0KKwkgICAgcmVzID0gKC0xKTsN
CisJfQ0KKyAgICB9IGVsc2Ugew0KKyAgICAgICAgaWYgKHppb3J4RW5kUmVhZChpb2RwLT5jYWxs
KSE9WklPUlhfT0spDQorCXsNCisJICAgIExvZygiaW9kX0RvbmU6IHppb3J4RW5kUmVhZCBmYWls
ZWQ6ICVzXG4iLCBpb2RwLT5jYWxsLT5sYXN0RXJyb3JNc2cpOw0KKwkgICAgcmVzID0gKC0xKTsN
CisJfQ0KKyAgICB9DQorICAgIGZyZWUoaW9kcC0+Y2FsbCk7DQorICAgIGlvZHAtPmNhbGwgPSBO
VUxMOw0KKyAgICByZXR1cm4gcmVzOw0KK30NCisNCisvL3JldHVybjogMCBvbiBPSywgKC0xKSBv
biBmYWlsdXJlDQorc3RhdGljIGludCBpb2RfSW5pdE11bHRpKHN0cnVjdCBpb2QgKmlvZHAsIHN0
cnVjdCByeF9jYWxsICoqY2FsbHMsIGludCBuY2FsbHMsDQorCQkgICBpbnQgKmNvZGVzLCBpbnQg
Y29tcHJlc3MsIGludCBsZXZlbCwgaW50IHRvX3dyaXRlKQ0KK3sNCisgIGludCBpLCBqLCByZXN1
bHQsIHJjOw0KKw0KKyAgbWVtc2V0KGlvZHAsIDAsIHNpemVvZihzdHJ1Y3QgaW9kKSk7DQorICBp
b2RwLT50b193cml0ZSA9IHRvX3dyaXRlOw0KKyAgaW9kcC0+Y2FsbHMgPSAoc3RydWN0IHppb3J4
X2NhbGwgKiopbWFsbG9jKG5jYWxscypzaXplb2Yoc3RydWN0IHppb3J4X2NhbGwgKikpOw0KKyAg
aWYgKGlvZHAtPmNhbGxzPT1OVUxMKQ0KKyAgew0KKyAgICBMb2coImlvZF9Jbml0TXVsdGk6IG1l
bW9yeSBhbGxvY2F0aW9uIGVycm9yXG4iKTsNCisgICAgcmV0dXJuICgtMSk7DQorICB9DQorDQor
ICBtZW1zZXQoaW9kcC0+Y2FsbHMsIDAsIG5jYWxscypzaXplb2Yoc3RydWN0IHppb3J4Y2FsbCAq
KSk7DQorICBmb3IoaT0wOyBpPG5jYWxsczsgaSsrKQ0KKyAgew0KKyAgICBpb2RwLT5jYWxsc1tp
XSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHppb3J4X2NhbGwpKTsNCisgICAgaWYgKGlvZHAtPmNh
bGxzW2ldPT1OVUxMKQ0KKyAgICB7DQorICAgICAgTG9nKCJpb2RfSW5pdE11bHRpOiBtZW1vcnkg
YWxsb2NhdGlvbiBlcnJvciAjMlxuIik7DQorICAgICAgZ290byBmYWlsOw0KKyAgICB9DQorICB9
DQorDQorICByZXN1bHQgPSAwOw0KKyAgZm9yKGk9MDsgaTxuY2FsbHM7IGkrKykNCisgIHsNCisg
ICAgaWYgKHRvX3dyaXRlPT1ERUZfVE9fV1JJVEUpDQorICAgICAgcmMgPSB6aW9yeEJlZ2luV3Jp
dGUoY2FsbHNbaV0sIGNvbXByZXNzLCBsZXZlbCwgaW9kcC0+Y2FsbHNbaV0pOw0KKyAgICBlbHNl
DQorICAgICAgcmMgPSB6aW9yeEJlZ2luUmVhZChjYWxsc1tpXSwgY29tcHJlc3MsIGxldmVsLCBp
b2RwLT5jYWxsc1tpXSk7DQorICAgIGlmIChyYyE9WklPUlhfT0spDQorICAgIHsNCisgICAgICBM
b2coaW9kcC0+Y2FsbHNbaV0tPmxhc3RFcnJvck1zZyk7DQorICAgICAgLy9kcmF3IGJhY2sgaW5p
dGlhbGl6YXRpb24gc28gZmFyOg0KKyAgICAgIGZvcihqPTA7IGo8aTsgaisrKQ0KKyAgICAgIHsN
CisgICAgICAgIGlmICh0b193cml0ZT09REVGX1RPX1dSSVRFKQ0KKyAgICAgICAgICB6aW9yeEVu
ZFdyaXRlKGlvZHAtPmNhbGxzW2pdKTsNCisJZWxzZQ0KKyAgICAgICAgICB6aW9yeEVuZFJlYWQo
aW9kcC0+Y2FsbHNbal0pOw0KKyAgICAgIH0NCisgICAgfQ0KKyAgfQ0KKw0KKyAgaW9kcC0+aGF2
ZU9sZENoYXIgPSAwOw0KKyAgaW9kcC0+bmNhbGxzID0gbmNhbGxzOw0KKyAgaW9kcC0+Y29kZXMg
PSBjb2RlczsNCisgIGlvZHAtPmNhbGwgPSAoc3RydWN0IHppb3J4X2NhbGwgKikgMDsNCisNCisg
IHJldHVybiAwOw0KKw0KK2ZhaWw6DQorICBpZiAoaW9kcC0+Y2FsbHMhPU5VTEwpDQorICB7DQor
ICAgIGZvcihpPTA7IGk8bmNhbGxzOyBpKyspDQorICAgIHsNCisgICAgICBpZiAoaW9kcC0+Y2Fs
bHNbaV0hPU5VTEwpDQorICAgICAgICBmcmVlKGlvZHAtPmNhbGxzW2ldKTsNCisgICAgfQ0KKyAg
ICBmcmVlKGlvZHAtPmNhbGxzKTsNCisgICAgaW9kcC0+Y2FsbHMgPSBOVUxMOw0KKyAgfQ0KKyAg
cmV0dXJuICgtMSk7DQorfQ0KKw0KKy8vcmV0dXJuOiAwIG9uIE9LLCAoLTEpIG9uIGZhaWx1cmUN
CitzdGF0aWMgaW50IGlvZF9Eb25lTXVsdGkoc3RydWN0IGlvZCAqaW9kcCkNCit7DQorICBpbnQg
aSwgcmVzdWx0LCByYzsNCisgIGlmIChpb2RwPT1OVUxMKQ0KKyAgICByZXR1cm4gKC0xKTsNCisN
CisgIGlmIChpb2RwLT5jYWxscz09TlVMTCkNCisgICAgcmV0dXJuICgtMSk7DQorDQorICByZXN1
bHQgPSAwOw0KKyAgZm9yKGk9MDsgaTxpb2RwLT5uY2FsbHM7IGkrKykNCisgIHsNCisgICAgaWYg
KGlvZHAtPnRvX3dyaXRlPT1ERUZfVE9fV1JJVEUpDQorICAgICAgcmMgPSB6aW9yeEVuZFdyaXRl
KGlvZHAtPmNhbGxzW2ldKTsNCisgICAgZWxzZQ0KKyAgICAgIHJjID0gemlvcnhFbmRSZWFkKGlv
ZHAtPmNhbGxzW2ldKTsNCisgICAgaWYgKHJjIT1aSU9SWF9PSykNCisgICAgew0KKyAgICAgIExv
Zyhpb2RwLT5jYWxsc1tpXS0+bGFzdEVycm9yTXNnKTsNCisgICAgICByZXN1bHQgPSAoLTEpOw0K
KyAgICB9DQorICB9DQorDQorICBpZiAoaW9kcC0+Y2FsbHMhPU5VTEwpDQorICB7DQorICAgIGZv
cihpPTA7IGk8aW9kcC0+bmNhbGxzOyBpKyspDQorICAgIHsNCisgICAgICBpZiAoaW9kcC0+Y2Fs
bHNbaV0hPU5VTEwpDQorICAgICAgICBmcmVlKGlvZHAtPmNhbGxzW2ldKTsNCisgICAgfQ0KKyAg
ICBmcmVlKGlvZHAtPmNhbGxzKTsNCisgICAgaW9kcC0+Y2FsbHMgPSBOVUxMOw0KKyAgfQ0KKw0K
KyAgcmV0dXJuIHJlc3VsdDsNCiB9DQogDQogLyogTi5CLiBpb2RfUmVhZCBkb2Vzbid0IGNoZWNr
IGZvciBvbGRjaGFyIChzZWUgcHJldmlvdXMgY29tbWVudCkgKi8NCi0jZGVmaW5lIGlvZF9SZWFk
KGlvZHAsIGJ1ZiwgbmJ5dGVzKSByeF9SZWFkKChpb2RwKS0+Y2FsbCwgYnVmLCBuYnl0ZXMpDQor
I2RlZmluZSBpb2RfUmVhZChpb2RwLCBidWYsIG5ieXRlcykgemlvcnhSZWFkKChpb2RwKS0+Y2Fs
bCwgYnVmLCBuYnl0ZXMpDQogDQogLyogRm9yIHRoZSBzaW5nbGUgZHVtcCBjYXNlLCBpdCdzIG9r
IHRvIGp1c3QgcmV0dXJuIHRoZSAiYnl0ZXMgd3JpdHRlbiINCiAgKiB0aGF0IHJ4X1dyaXRlIHJl
dHVybnMsIHNpbmNlIGFsbCB0aGUgY2FsbGVycyBvZiBpb2RfV3JpdGUgYWJvcnQgd2hlbg0KQEAg
LTE2MywxNSArMzE3LDI1IEBADQogCSAgIHx8ICghaW9kcC0+Y2FsbCAmJiBpb2RwLT5uY2FsbHMg
Pj0gMSAmJiBpb2RwLT5jYWxscykpOw0KIA0KICAgICBpZiAoaW9kcC0+Y2FsbCkgew0KLQljb2Rl
ID0gcnhfV3JpdGUoaW9kcC0+Y2FsbCwgYnVmLCBuYnl0ZXMpOw0KLQlyZXR1cm4gY29kZTsNCisg
ICAgICAgIGNvZGUgPSB6aW9yeFdyaXRlKGlvZHAtPmNhbGwsIGJ1ZiwgbmJ5dGVzKTsNCisgICAg
ICAgIGlmIChjb2RlIT1uYnl0ZXMgJiYgaW9kcC0+Y2FsbC0+bGFzdEVycm9yTXNnWzBdIT0nXDAn
KQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIExvZygiaW9kX1dyaXRlIGVycm9yOiAlc1xuIiwg
aW9kcC0+Y2FsbC0+bGFzdEVycm9yTXNnKTsNCisgICAgICAgICAgICBpb2RwLT5jYWxsLT5sYXN0
RXJyb3JNc2dbMF0gPSAnXDAnOw0KKyAgICAgICAgfQ0KKyAgICAgICAgcmV0dXJuIGNvZGU7DQog
ICAgIH0NCiANCiAgICAgZm9yIChpID0gMDsgaSA8IGlvZHAtPm5jYWxsczsgaSsrKSB7DQogCWlm
IChpb2RwLT5jYWxsc1tpXSAmJiAhaW9kcC0+Y29kZXNbaV0pIHsNCi0JICAgIGNvZGUgPSByeF9X
cml0ZShpb2RwLT5jYWxsc1tpXSwgYnVmLCBuYnl0ZXMpOw0KKyAgICAgICAgICAgIGNvZGUgPSB6
aW9yeFdyaXRlKGlvZHAtPmNhbGxzW2ldLCBidWYsIG5ieXRlcyk7DQogCSAgICBpZiAoY29kZSAh
PSBuYnl0ZXMpIHsJLyogZXZlcnl0aGluZyBnZXRzIG1lcmdlZCBpbnRvIGEgc2luZ2xlIGVycm9y
ICovDQotCQlpb2RwLT5jb2Rlc1tpXSA9IFZPTFNFUkRVTVBFUlJPUjsJLyogYnV0IHRoYXQncyBl
eGFjdGx5IHdoYXQgdGhlICovDQorICAgICAgICAgICAgICAgIGlvZHAtPmNvZGVzW2ldID0gVk9M
U0VSRFVNUEVSUk9SOyAgLyogYnV0IHRoYXQncyBleGFjdGx5IHdoYXQgdGhlICovDQorICAgICAg
ICAgICAgICAgIGlmIChpb2RwLT5jYWxsc1tpXS0+bGFzdEVycm9yTXNnWzBdIT0nXDAnKQ0KKyAg
ICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgTG9nKCJpb2RfV3JpdGUg
ZXJyb3I6ICVzXG4iLCBpb2RwLT5jYWxsc1tpXS0+bGFzdEVycm9yTXNnKTsNCisgICAgICAgICAg
ICAgICAgICAgICAgICBpb2RwLT5jYWxsc1tpXS0+bGFzdEVycm9yTXNnWzBdID0gJ1wwJzsNCisg
ICAgICAgICAgICAgICAgfQ0KIAkgICAgfSAvKiBzdGFuZGFyZCBkdW1wIGRvZXMsIGFueXdheXMg
Ki8NCiAJICAgIGVsc2Ugew0KIAkJb25lX3N1Y2Nlc3MgPSBUUlVFOw0KQEAgLTcwOCwxMyArODcy
LDE2IEBADQogDQogLyogRHVtcCBhIHdob2xlIHZvbHVtZSAqLw0KIGludA0KLUR1bXBWb2x1bWUo
cmVnaXN0ZXIgc3RydWN0IHJ4X2NhbGwgKmNhbGwsIHJlZ2lzdGVyIFZvbHVtZSAqIHZwLA0KLQkg
ICBhZnNfaW50MzIgZnJvbXRpbWUsIGludCBkdW1wQWxsRGlycykNCitEdW1wVm9sdW1lKHJlZ2lz
dGVyIHN0cnVjdCByeF9jYWxsICpjYWxsLCByZWdpc3RlciBzdHJ1Y3QgVm9sdW1lICogdnAsDQor
CQlhZnNfaW50MzIgZnJvbXRpbWUsIGFmc19pbnQzMiBkdW1wQWxsRGlycywNCisgICAgICAgICAg
ICAgICAgYWZzX2ludDMyIGNvbXByZXNzLCBhZnNfaW50MzIgbGV2ZWwpDQogew0KICAgICBzdHJ1
Y3QgaW9kIGlvZDsNCiAgICAgaW50IGNvZGUgPSAwOw0KICAgICByZWdpc3RlciBzdHJ1Y3QgaW9k
ICppb2RwID0gJmlvZDsNCi0gICAgaW9kX0luaXQoaW9kcCwgY2FsbCk7DQorDQorICAgIGlmIChp
b2RfSW5pdChpb2RwLCBjYWxsLCBjb21wcmVzcywgbGV2ZWwsIERFRl9UT19XUklURSkhPTApDQor
ICAgICAgIHJldHVybiBWT0xTRVJEVU1QRVJST1I7IC8vZG9uJ3QgbmVlZCB0byBjYWxsIGlvZF9E
b25lIGluIHRoaXMgY2FzZQ0KIA0KICAgICBpZiAoIWNvZGUpDQogCWNvZGUgPSBEdW1wRHVtcEhl
YWRlcihpb2RwLCB2cCwgZnJvbXRpbWUpOw0KQEAgLTcyMywyNSArODkwLDMxIEBADQogCWNvZGUg
PSBEdW1wUGFydGlhbChpb2RwLCB2cCwgZnJvbXRpbWUsIGR1bXBBbGxEaXJzKTsNCiANCiAvKiBo
YWNrIGZvbGxvd3MuICBFcnJvcnMgc2hvdWxkIGJlIGhhbmRsZWQgcXVpdGUgZGlmZmVyZW50bHkg
aW4gdGhpcyB2ZXJzaW9uIG9mIGR1bXAgdGhhbiB0aGV5IHVzZWQgdG8gYmUuKi8NCi0gICAgaWYg
KHJ4X0Vycm9yKGlvZHAtPmNhbGwpKSB7DQorICAgIGlmIChyeF9FcnJvcihpb2RwLT5jYWxsLT5j
YWxsKSkgew0KIAlMb2coIjEgVm9sc2VyOiBEdW1wVm9sdW1lOiBSeCBjYWxsIGZhaWxlZCBkdXJp
bmcgZHVtcCwgZXJyb3IgJWRcbiIsDQotCSAgICByeF9FcnJvcihpb2RwLT5jYWxsKSk7DQorCSAg
ICByeF9FcnJvcihpb2RwLT5jYWxsLT5jYWxsKSk7DQorCWlvZF9Eb25lKGlvZHApOw0KIAlyZXR1
cm4gVk9MU0VSRFVNUEVSUk9SOw0KICAgICB9DQogICAgIGlmICghY29kZSkNCiAJY29kZSA9IER1
bXBFbmQoaW9kcCk7DQogDQorICAgIGlmIChpb2RfRG9uZShpb2RwKSE9MCkNCisgICAgICAgIGNv
ZGUgPSBWT0xTRVJEVU1QRVJST1I7DQorDQogICAgIHJldHVybiBjb2RlOw0KIH0NCiANCiAvKiBE
dW1wIGEgdm9sdW1lIHRvIG11bHRpcGxlIHBsYWNlcyovDQogaW50DQogRHVtcFZvbE11bHRpKHN0
cnVjdCByeF9jYWxsICoqY2FsbHMsIGludCBuY2FsbHMsIFZvbHVtZSAqIHZwLA0KLQkgICAgIGFm
c19pbnQzMiBmcm9tdGltZSwgaW50IGR1bXBBbGxEaXJzLCBpbnQgKmNvZGVzKQ0KKyAgICAgICAg
ICAgICAgICBhZnNfaW50MzIgZnJvbXRpbWUsIGludCBkdW1wQWxsRGlycywgaW50ICpjb2RlcywN
CisgICAgICAgICAgICAgICAgaW50IGNvbXByZXNzLCBpbnQgbGV2ZWwpDQogew0KICAgICBzdHJ1
Y3QgaW9kIGlvZDsNCiAgICAgaW50IGNvZGUgPSAwOw0KLSAgICBpb2RfSW5pdE11bHRpKCZpb2Qs
IGNhbGxzLCBuY2FsbHMsIGNvZGVzKTsNCisgICAgaWYgKGlvZF9Jbml0TXVsdGkoJmlvZCwgY2Fs
bHMsIG5jYWxscywgY29kZXMsIGNvbXByZXNzLCBsZXZlbCwgREVGX1RPX1dSSVRFKSE9MCkNCisg
ICAgICAgIHJldHVybiBWT0xTRVJEVU1QRVJST1I7IC8vZG9uJ3QgbmVlZCB0byBjYWxsIGlvZF9E
b25lTXVsdGkgaW4gdGhpcyBjYXNlDQogDQogICAgIGlmICghY29kZSkNCiAJY29kZSA9IER1bXBE
dW1wSGVhZGVyKCZpb2QsIHZwLCBmcm9tdGltZSk7DQpAQCAtNzQ5LDYgKzkyMiwxMCBAQA0KIAlj
b2RlID0gRHVtcFBhcnRpYWwoJmlvZCwgdnAsIGZyb210aW1lLCBkdW1wQWxsRGlycyk7DQogICAg
IGlmICghY29kZSkNCiAJY29kZSA9IER1bXBFbmQoJmlvZCk7DQorDQorICAgIGlmIChpb2RfRG9u
ZU11bHRpKCZpb2QpIT0wKQ0KKyAgICAgIGNvZGUgPSBWT0xTRVJEVU1QRVJST1I7DQorDQogICAg
IHJldHVybiBjb2RlOw0KIH0NCiANCkBAIC05MjcsOCArMTEwNCw4IEBADQogCQkgICAgaWYgKHZu
b2RlLT50eXBlICE9IHZOdWxsICYmIFZORElTS19HRVRfSU5PKHZub2RlKSkgew0KIAkJCWNudDEr
KzsNCiAJCQlpZiAoRG9Mb2dnaW5nKSB7DQotCQkJICAgIExvZygiUmVzdG9yZVZvbHVtZSAldSBD
bGVhbnVwOiBSZW1vdmluZyBvbGQgdm5vZGU9JXUgaW5vZGU9JWxsdSBzaXplPXVua25vd25cbiIs
IA0KLSAgICAgICAgICAgICAgICAgICAgIFZfaWQodnApLCBiaXROdW1iZXJUb1Zub2RlTnVtYmVy
KGksIGNsYXNzKSwgDQorCQkJICAgIExvZygiUmVzdG9yZVZvbHVtZSAldSBDbGVhbnVwOiBSZW1v
dmluZyBvbGQgdm5vZGU9JXUgaW5vZGU9JWxsdSBzaXplPXVua25vd25cbiIsDQorICAgICAgICAg
ICAgICAgICAgICAgVl9pZCh2cCksIGJpdE51bWJlclRvVm5vZGVOdW1iZXIoaSwgY2xhc3MpLA0K
ICAgICAgICAgICAgICAgICAgICAgIChhZnNfdWludG1heF90KSBWTkRJU0tfR0VUX0lOTyh2bm9k
ZSkpOw0KIAkJCX0NCiAJCQlJSF9ERUMoVl9saW5rSGFuZGxlKHZwKSwgVk5ESVNLX0dFVF9JTk8o
dm5vZGUpLA0KQEAgLTk4Miw3ICsxMTU5LDggQEANCiANCiBpbnQNCiBSZXN0b3JlVm9sdW1lKHJl
Z2lzdGVyIHN0cnVjdCByeF9jYWxsICpjYWxsLCBWb2x1bWUgKiBhdnAsIGludCBpbmNyZW1lbnRh
bCwNCi0JICAgICAgc3RydWN0IHJlc3RvcmVDb29raWUgKmNvb2tpZSkNCisgICAgICAgICAgICAg
ICAgc3RydWN0IHJlc3RvcmVDb29raWUgKmNvb2tpZSwNCisgICAgICAgICAgICAgICAgaW50IGNv
bXByZXNzLCBpbnQgbGV2ZWwpDQogew0KICAgICBWb2x1bWVEaXNrRGF0YSB2b2w7DQogICAgIHN0
cnVjdCBEdW1wSGVhZGVyIGhlYWRlcjsNCkBAIC05OTUsNyArMTE3Myw4IEBADQogICAgIGludCBz
MSA9IDAsIHMyID0gMCwgZGVsbyA9IDAsIHRkZWxvOw0KICAgICBpbnQgdGFnOw0KIA0KLSAgICBp
b2RfSW5pdChpb2RwLCBjYWxsKTsNCisgICAgaWYgKGlvZF9Jbml0KGlvZHAsIGNhbGwsIGNvbXBy
ZXNzLCBsZXZlbCwgREVGX1RPX1JFQUQpIT0wKQ0KKyAgICAgICByZXR1cm4gVk9MU0VSRFVNUEVS
Uk9SOyAvL2Rvbid0IG5lZWQgdG8gY2FsbCBpb2RfRG9uZSBpbiB0aGlzIGNhc2UNCiANCiAgICAg
dnAgPSBhdnA7DQogICAgIGlmICghUmVhZER1bXBIZWFkZXIoaW9kcCwgJmhlYWRlcikpIHsNCkBA
IC0xMDc2LDYgKzEyNTUsMTAgQEANCiAJZnJlZSgoY2hhciAqKWIxKTsNCiAgICAgaWYgKGIyKQ0K
IAlmcmVlKChjaGFyICopYjIpOw0KKw0KKyAgICBpZiAoaW9kX0RvbmUoaW9kcCkhPTApDQorICAg
ICAgICBlcnJvciA9IFZPTFNFUkRVTVBFUlJPUjsNCisNCiAgICAgcmV0dXJuIGVycm9yOw0KIH0N
CiANCmRpZmYgLU5hdXIgb3BlbmFmcy0xLjMuNzcvc3JjL3ZvbHNlci9NYWtlZmlsZS5pbiBvcGVu
YWZzLTEuMy43N3ovc3JjL3ZvbHNlci9NYWtlZmlsZS5pbg0KLS0tIG9wZW5hZnMtMS4zLjc3L3Ny
Yy92b2xzZXIvTWFrZWZpbGUuaW4JMjAwNC0wOC0wOSAwNjozNTo1NC4wMDAwMDAwMDAgKzAyMDAN
CisrKyBvcGVuYWZzLTEuMy43N3ovc3JjL3ZvbHNlci9NYWtlZmlsZS5pbgkyMDA0LTEyLTIxIDE5
OjAzOjE4LjAwMDAwMDAwMCArMDEwMA0KQEAgLTExLDEzICsxMSwxMyBAQA0KIA0KIA0KIFZJTkNM
Uz0ke1RPUF9JTkNESVJ9L2Fmcy9wYXJ0aXRpb24uaCAke1RPUF9JTkNESVJ9L2Fmcy92b2x1bWUu
aCBcDQotCSR7VE9QX0lOQ0RJUn0vYWZzL3Zsc2VydmVyLmggdm9sLmggZHVtcC5oIHZvbHNlci5o
ICBsb2NrZGF0YS5oDQorCSR7VE9QX0lOQ0RJUn0vYWZzL3Zsc2VydmVyLmggdm9sLmggZHVtcC5o
IHZvbHNlci5oIGxvY2tkYXRhLmggemlvcnguaA0KIA0KIFJJTkNMUz0ke1RPUF9JTkNESVJ9L3J4
L3J4LmggJHtUT1BfSU5DRElSfS9yeC94ZHIuaCBcDQogICAgICAgICR7VE9QX0lOQ0RJUn0vYWZz
L2tleXMuaCAke1RPUF9JTkNESVJ9L2Fmcy9jZWxsY29uZmlnLmggXA0KLQkke1RPUF9JTkNESVJ9
L3ViaWsuaCAke1RPUF9JTkNESVJ9L2Fmcy9jbWQuaA0KKwkke1RPUF9JTkNESVJ9L3ViaWsuaCAk
e1RPUF9JTkNESVJ9L2Fmcy9jbWQuaCB6aW9yeC5oDQogDQotSU5USU5DTFM9dm9saW50Lmggdm9s
c2VyLmggDQorSU5USU5DTFM9dm9saW50Lmggdm9sc2VyLmggemlvcnguaA0KIA0KIExJQlM9XA0K
IAkke1RPUF9MSUJESVJ9L2xpYmF1ZGl0LmEgXA0KQEAgLTM3LDcgKzM3LDggQEANCiAJJHtUT1Bf
TElCRElSfS9saWJjb21fZXJyLmEgXA0KIAkke1RPUF9MSUJESVJ9L2xpYmthdXRoLmEgXA0KIAkk
e1RPUF9MSUJESVJ9L2xpYnVzZC5hIFwNCi0JJHtUT1BfTElCRElSfS91dGlsLmENCisJJHtUT1Bf
TElCRElSfS91dGlsLmEgXA0KKyAgICAgICAgL3Vzci9saWIvbGliei5hDQogDQogVk9MRFVNUF9M
SUJTID0gXA0KIAkuLi92b2wvaWhhbmRsZS5vIFwNCkBAIC01MCw5ICs1MSw5IEBADQogCSR7VE9Q
X0xJQkRJUn0vbGlibHdwLmEgIFwNCiAJJHtUT1BfTElCRElSfS9saWJhY2wuYQ0KIA0KLVZTT0JK
Uz12c3Byb2NzLm8gdnN1dGlscy5vIGxvY2twcm9jcy5vIHZvbGludC54ZHIubyB2b2xlcnIubyAN
CitWU09CSlM9dnNwcm9jcy5vIHZzdXRpbHMubyBsb2NrcHJvY3MubyB2b2xpbnQueGRyLm8gdm9s
ZXJyLm8gemlvcngubw0KIFNPQkpTPXZvbG1haW4ubyB2b2xwcm9jcy5vIHBoeXNpby5vIGNvbW1v
bi5vIHZvbHRyYW5zLm8gdm9sZXJyLm8gXA0KLSB2b2xpbnQuY3MubyBkdW1wc3R1ZmYubyB2b2xp
bnQuc3MubyB2b2xpbnQueGRyLm8NCisgdm9saW50LmNzLm8gZHVtcHN0dWZmLm8gdm9saW50LnNz
Lm8gdm9saW50Lnhkci5vIHppb3J4Lm8NCiANCiBhbGw6IHZvbHNlcnZlciB2b3MgcmVzdG9yZXZv
bCB2b2xkdW1wIFwNCiAJJHtUT1BfSU5DRElSfS9hZnMvdm9sc2VyLmggXA0KQEAgLTExNCw2ICsx
MTUsNyBAQA0KIHBoeXNpby5vOiBwaHlzaW8uYyAke1ZJTkNMU30NCiBjb21tb24ubzogY29tbW9u
LmMgJHtWSU5DTFN9DQogbG9ja3Byb2NzLm86IGxvY2twcm9jcy5jICR7VklOQ0xTfSAke0lOVElO
Q0xTfSAke1JJTkNMU30NCit6aW9yeC5vOiB6aW9yeC5jIHppb3J4LmgNCiANCiAjDQogIyBJbnN0
YWxsYXRpb24gdGFyZ2V0cw0KZGlmZiAtTmF1ciBvcGVuYWZzLTEuMy43Ny9zcmMvdm9sc2VyL05U
TWFrZWZpbGUgb3BlbmFmcy0xLjMuNzd6L3NyYy92b2xzZXIvTlRNYWtlZmlsZQ0KLS0tIG9wZW5h
ZnMtMS4zLjc3L3NyYy92b2xzZXIvTlRNYWtlZmlsZQkyMDA0LTA4LTA1IDE4OjMxOjQzLjAwMDAw
MDAwMCArMDIwMA0KKysrIG9wZW5hZnMtMS4zLjc3ei9zcmMvdm9sc2VyL05UTWFrZWZpbGUJMjAw
NC0xMi0yMSAxODo1MzowNi4wMDAwMDAwMDAgKzAxMDANCkBAIC0xNywxMiArMTcsMTQgQEANCiBJ
TkNGSUxFUyA9IFwNCiAJJChJTkNGSUxFRElSKVx2b2xzZXJfcHJvdG90eXBlcy5oIFwNCiAJJChJ
TkNGSUxFRElSKVx2b2xzZXIuaCBcDQotCSQoSU5DRklMRURJUilcdm9saW50LmgNCisJJChJTkNG
SUxFRElSKVx2b2xpbnQuaCBcDQorCSQoSU5DRklMRURJUilcemlvcnguaA0KIA0KIA0KIExPQ0FM
X0lOQ0ZJTEVTID0gXA0KIAl2b2xzZXIuaCBcDQotCXZvbGludC5oDQorCXZvbGludC5oIFwNCisJ
emlvcnguaA0KIA0KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAjIEJ1aWxkIHZvbHNlciBsaWJyYXJ5
Lg0KQEAgLTM3LDYgKzM5LDcgQEANCiAJJChPVVQpXHZvbGludC54ZHIub2JqIFwNCiAJJChPVVQp
XHZzcHJvY3Mub2JqIFwNCiAJJChPVVQpXHZzdXRpbHMub2JqIFwNCisJJChPVVQpXHppb3J4Lm9i
ag0KIAkkKE9VVClcQUZTX2NvbXBvbmVudF92ZXJzaW9uX251bWJlci5vYmogDQogDQogJChMSUJG
SUxFKTogJChMSUJPQkpTKQ0KQEAgLTg1LDE2ICs4OCwxOCBAQA0KIAkkKE9VVClcdm9sbWFpbi5v
YmogXA0KIAkkKE9VVClcdm9scHJvY3Mub2JqIFwNCiAJJChPVVQpXHZvbHRyYW5zLm9iaiBcDQor
CSQoT1VUKVx6aW9yeC5vYmogXA0KIAkkKE9VVClcdm9sc2VydmVyLnJlcw0KIAkNCiANCiBWT0xT
RVJWRVJfRVhFTElCUyA9IFwNCiAJJChERVNURElSKVxsaWJcYWZzXGFmc2Rpci5saWIgXA0KLQkk
KERFU1RESVIpXGxpYlxhZnNcYWZzcHJvY21nbXQubGliDQorCSQoREVTVERJUilcbGliXGFmc1xh
ZnNwcm9jbWdtdC5saWIgXA0KKwkkbGliei5saWINCiANCiAkKFZPTFNFUlZFUl9FWEVGSUxFKTog
JChWT0xTRVJWRVJfRVhFT0JKUykgJChWT0xTRVJWRVJfRVhFTElCUykgJChFWEVDX0xJQlMpDQog
CSQoRVhFQ09OTElOSykgZG5zYXBpLmxpYiBtcHIubGliDQotCSQoRVhFUFJFUCkgDQorCSQoRVhF
UFJFUCkNCiANCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogIyBCdWlsZCB2b3MNCkBAIC0xMDksMTcg
KzExNCwxOSBAQA0KIAkkKE9VVClcbG9ja3Byb2NzLm9iaiBcDQogCSQoT1VUKVx2b2xpbnQueGRy
Lm9iaiBcDQogCSQoT1VUKVx2b2xlcnIub2JqIFwNCisJJChPVVQpXHppb3J4Lm9iag0KIAkkKE9V
VClcdm9zLnJlcw0KIA0KIFZPU19FWEVMSUJTID0gXA0KIAkkKERFU1RESVIpXGxpYlxhZnN1Ymlr
LmxpYiBcDQogCSQoREVTVERJUilcbGliXGFmc1xhZnN2b2xzZXIubGliIFwNCiAJJChERVNURElS
KVxsaWJcYWZzXGFmc3Byb2NtZ210LmxpYiBcDQotCSQoREVTVERJUilcbGliXGFmc1xhZnNwaW9j
dGwubGliDQorCSQoREVTVERJUilcbGliXGFmc1xhZnNwaW9jdGwubGliIFwNCisJJGxpYnoubGli
DQogDQogJChSU19WT1NfRVhFRklMRSk6ICQoVk9TX0VYRU9CSlMpICQoVk9TX0VYRUxJQlMpICQo
RVhFQ19MSUJTKQ0KIAkkKEVYRUNPTkxJTkspIGRuc2FwaS5saWIgbXByLmxpYg0KLQkkKEVYRVBS
RVApIA0KKwkkKEVYRVBSRVApDQogDQogJChDTF9WT1NfRVhFRklMRSk6ICQoUlNfVk9TX0VYRUZJ
TEUpDQogCSQoQ09QWSkgICQqKiAkQA0KZGlmZiAtTmF1ciBvcGVuYWZzLTEuMy43Ny9zcmMvdm9s
c2VyL3ZvbGludC54ZyBvcGVuYWZzLTEuMy43N3ovc3JjL3ZvbHNlci92b2xpbnQueGcNCi0tLSBv
cGVuYWZzLTEuMy43Ny9zcmMvdm9sc2VyL3ZvbGludC54ZwkyMDAzLTA2LTE5IDE4OjA2OjU4LjAw
MDAwMDAwMCArMDIwMA0KKysrIG9wZW5hZnMtMS4zLjc3ei9zcmMvdm9sc2VyL3ZvbGludC54Zwky
MDA0LTEyLTIxIDE2OjIzOjM1LjAwMDAwMDAwMCArMDEwMA0KQEAgLTQ5LDYgKzQ5LDEwIEBADQog
I2RlZmluZQkgICAgVk9MRk9SV0FSRE1VTFRJUExFICAxMjgNCiAjZGVmaW5lICAgICBWT0xDT05W
RVJUUk8gICAgICAgIDY1NTM2DQogI2RlZmluZSAgICAgVk9MR0VUU0laRSAgICAgICAgICA2NTUz
Nw0KKyNkZWZpbmUJVk9MUkVTVE9SRV9aCQk2NTUzNQ0KKyNkZWZpbmUJVk9MRk9SV0FSRF9aCQk2
NTUzNA0KKyNkZWZpbmUJVk9MRFVNUF9aCQk2NTUzMw0KKyNkZWZpbmUJVk9MRk9SV0FSRE1VTFRJ
UExFX1oJNjU1MzINCiANCiBjb25zdCBTSVpFID0gMTAyNDsNCiANCkBAIC00MDgsMyArNDEyLDM5
IEBADQogICBJTiBhZnNfaW50MzIgZnJvbURhdGUsDQogICBPVVQgc3RydWN0IHZvbGludFNpemUg
KnNpemUNCiApID0gVk9MR0VUU0laRTsNCisNCitwcm9jIFJlc3RvcmVaKA0KKyAgSU4gYWZzX2lu
dDMyIHRvVHJhbnMsDQorICBJTiBhZnNfaW50MzIgZmxhZ3MsDQorICBJTiBzdHJ1Y3QgcmVzdG9y
ZUNvb2tpZSAqY29va2llLA0KKyAgSU4gYWZzX2ludDMyIGNvbXByZXNzLA0KKyAgSU4gYWZzX2lu
dDMyIGxldmVsDQorKSBzcGxpdCA9IFZPTFJFU1RPUkVfWjsNCisNCitwcm9jIEZvcndhcmRNdWx0
aXBsZVooDQorICBJTiBhZnNfaW50MzIgZnJvbVRyYW5zLA0KKyAgSU4gYWZzX2ludDMyIGZyb21E
YXRlLA0KKyAgSU4gbWFueURlc3RzICpkZXN0aW5hdGlvbnMsDQorICBJTiBhZnNfaW50MzIgc3Bh
cmUsDQorICBJTiBzdHJ1Y3QgcmVzdG9yZUNvb2tpZSAqY29va2llLA0KKyAgT1VUIG1hbnlSZXN1
bHRzICpyZXN1bHRzLA0KKyAgSU4gYWZzX2ludDMyIGNvbXByZXNzLA0KKyAgSU4gYWZzX2ludDMy
IGxldmVsDQorKSA9IFZPTEZPUldBUkRNVUxUSVBMRV9aOw0KKw0KK3Byb2MgRm9yd2FyZFooDQor
ICBJTiBhZnNfaW50MzIgZnJvbVRyYW5zLA0KKyAgSU4gYWZzX2ludDMyIGZyb21EYXRlLA0KKyAg
SU4gc3RydWN0IGRlc3RTZXJ2ZXIgKmRlc3RpbmF0aW9uLA0KKyAgSU4gYWZzX2ludDMyIGRlc3RU
cmFucywNCisgIElOIHN0cnVjdCByZXN0b3JlQ29va2llICpjb29raWUsDQorICBJTiBhZnNfaW50
MzIgY29tcHJlc3MsDQorICBJTiBhZnNfaW50MzIgbGV2ZWwNCispID0gVk9MRk9SV0FSRF9aOw0K
Kw0KK3Byb2MgRHVtcFooDQorICBJTiBhZnNfaW50MzIgZnJvbVRyYW5zLA0KKyAgSU4gYWZzX2lu
dDMyIGZyb21EYXRlLA0KKyAgSU4gYWZzX2ludDMyIGNvbXByZXNzLA0KKyAgSU4gYWZzX2ludDMy
IGxldmVsDQorKSBzcGxpdCA9IFZPTERVTVBfWjsNCmRpZmYgLU5hdXIgb3BlbmFmcy0xLjMuNzcv
c3JjL3ZvbHNlci92b2xwcm9jcy5jIG9wZW5hZnMtMS4zLjc3ei9zcmMvdm9sc2VyL3ZvbHByb2Nz
LmMNCi0tLSBvcGVuYWZzLTEuMy43Ny9zcmMvdm9sc2VyL3ZvbHByb2NzLmMJMjAwNC0xMi0xMyAy
MDo0MToxMy4wMDAwMDAwMDAgKzAxMDANCisrKyBvcGVuYWZzLTEuMy43N3ovc3JjL3ZvbHNlci92
b2xwcm9jcy5jCTIwMDQtMTItMjIgMDI6NDY6MjIuMDAwMDAwMDAwICswMTAwDQpAQCAtMTAxLDgg
KzEwMSw5IEBADQogYWZzX2ludDMyIFZvbExpc3RWb2x1bWVzKCksIFhWb2xMaXN0UGFydGl0aW9u
cygpLCBWb2xNb25pdG9yKCksDQogVm9sU2V0SWRzVHlwZXMoKSwgVm9sU2V0RGF0ZSgpLCBWb2xT
ZXRGbGFncygpOw0KIA0KKw0KIC8qIHRoaXMgY2FsbCB1bmxvY2tzIGFsbCBvZiB0aGUgcGFydGl0
aW9uIGxvY2tzIHdlJ3ZlIHNldCAqLw0KLWludCANCitpbnQNCiBWUEZ1bGxVbmxvY2soKQ0KIHsN
CiAgICAgcmVnaXN0ZXIgc3RydWN0IERpc2tQYXJ0aXRpb24gKnRwOw0KQEAgLTEwNTgsMTMgKzEw
NTksMjkgQEANCiAgKi8NCiBhZnNfaW50MzINCiBTQUZTVm9sRm9yd2FyZChzdHJ1Y3QgcnhfY2Fs
bCAqYWNpZCwgYWZzX2ludDMyIGZyb21UcmFucywgYWZzX2ludDMyIGZyb21EYXRlLA0KLQkgICAg
ICAgc3RydWN0IGRlc3RTZXJ2ZXIgKmRlc3RpbmF0aW9uLCBhZnNfaW50MzIgZGVzdFRyYW5zLCAN
CisJICAgICAgIHN0cnVjdCBkZXN0U2VydmVyICpkZXN0aW5hdGlvbiwgYWZzX2ludDMyIGRlc3RU
cmFucywNCiAJICAgICAgIHN0cnVjdCByZXN0b3JlQ29va2llICpjb29raWUpDQogew0KICAgICBh
ZnNfaW50MzIgY29kZTsNCiANCiAgICAgY29kZSA9DQotCVZvbEZvcndhcmQoYWNpZCwgZnJvbVRy
YW5zLCBmcm9tRGF0ZSwgZGVzdGluYXRpb24sIGRlc3RUcmFucywgY29va2llKTsNCisJVm9sRm9y
d2FyZChhY2lkLCBmcm9tVHJhbnMsIGZyb21EYXRlLCBkZXN0aW5hdGlvbiwgZGVzdFRyYW5zLCBj
b29raWUsDQorICAgICAgICAJMCwgMCk7DQorICAgIG9zaV9hdWRpdFUoYWNpZCwgVlNfRm9yd2Fy
ZEV2ZW50LCBjb2RlLCBBVURfTE9ORywgZnJvbVRyYW5zLCBBVURfSE9TVCwNCisJICAgICAgIGRl
c3RpbmF0aW9uLT5kZXN0SG9zdCwgQVVEX0xPTkcsIGRlc3RUcmFucywgQVVEX0VORCk7DQorICAg
IHJldHVybiBjb2RlOw0KK30NCisNCithZnNfaW50MzINCitTQUZTVm9sRm9yd2FyZFooc3RydWN0
IHJ4X2NhbGwgKmFjaWQsIGFmc19pbnQzMiBmcm9tVHJhbnMsIGFmc19pbnQzMiBmcm9tRGF0ZSwN
CisJICAgICAgIHN0cnVjdCBkZXN0U2VydmVyICpkZXN0aW5hdGlvbiwgYWZzX2ludDMyIGRlc3RU
cmFucywNCisJICAgICAgIHN0cnVjdCByZXN0b3JlQ29va2llICpjb29raWUsIGFmc19pbnQzMiBj
b21wcmVzcywgYWZzX2ludDMyIGxldmVsKQ0KK3sNCisgICAgYWZzX2ludDMyIGNvZGU7DQorDQor
ICAgIGNvZGUgPQ0KKwlWb2xGb3J3YXJkKGFjaWQsIGZyb21UcmFucywgZnJvbURhdGUsIGRlc3Rp
bmF0aW9uLCBkZXN0VHJhbnMsIGNvb2tpZSwNCisgICAgICAgIAkoaW50KWNvbXByZXNzLCAoaW50
KWxldmVsKTsNCiAgICAgb3NpX2F1ZGl0VShhY2lkLCBWU19Gb3J3YXJkRXZlbnQsIGNvZGUsIEFV
RF9MT05HLCBmcm9tVHJhbnMsIEFVRF9IT1NULA0KIAkgICAgICAgZGVzdGluYXRpb24tPmRlc3RI
b3N0LCBBVURfTE9ORywgZGVzdFRyYW5zLCBBVURfRU5EKTsNCiAgICAgcmV0dXJuIGNvZGU7DQpA
QCAtMTA3Myw3ICsxMDkwLDggQEANCiBhZnNfaW50MzINCiBWb2xGb3J3YXJkKHN0cnVjdCByeF9j
YWxsICphY2lkLCBhZnNfaW50MzIgZnJvbVRyYW5zLCBhZnNfaW50MzIgZnJvbURhdGUsDQogCSAg
ICAgICBzdHJ1Y3QgZGVzdFNlcnZlciAqZGVzdGluYXRpb24sIGFmc19pbnQzMiBkZXN0VHJhbnMs
IA0KLQkgICAgICAgc3RydWN0IHJlc3RvcmVDb29raWUgKmNvb2tpZSkNCisJICAgICAgIHN0cnVj
dCByZXN0b3JlQ29va2llICpjb29raWUsDQorICAgICAgICAgICAgICAgaW50IGNvbXByZXNzLCBp
bnQgbGV2ZWwpDQogew0KICAgICByZWdpc3RlciBzdHJ1Y3Qgdm9sc2VyX3RyYW5zICp0dDsNCiAg
ICAgcmVnaXN0ZXIgYWZzX2ludDMyIGNvZGU7DQpAQCAtMTEyMiwxNiArMTE0MCwyMyBAQA0KICAg
ICB0Y2FsbCA9IHJ4X05ld0NhbGwodGNvbik7DQogICAgIHR0LT5yeENhbGxQdHIgPSB0Y2FsbDsN
CiAgICAgLyogc3RhcnQgcmVzdG9yZSBnb2luZy4gIGZyb21kYXRlID09IDAgLS0+IGRvaW5nIGFu
IGluY3JlbWVudGFsIGR1bXAvcmVzdG9yZSAqLw0KLSAgICBjb2RlID0gU3RhcnRBRlNWb2xSZXN0
b3JlKHRjYWxsLCBkZXN0VHJhbnMsIChmcm9tRGF0ZSA/IDEgOiAwKSwgY29va2llKTsNCisgICAg
aWYgKGNvbXByZXNzKQ0KKwljb2RlID0gU3RhcnRBRlNWb2xSZXN0b3JlWih0Y2FsbCwgZGVzdFRy
YW5zLCAoZnJvbURhdGU/IDEgOiAwKSwgY29va2llLCBjb21wcmVzcywgbGV2ZWwpOw0KKyAgICBl
bHNlDQorCWNvZGUgPSBTdGFydEFGU1ZvbFJlc3RvcmUodGNhbGwsIGRlc3RUcmFucywgKGZyb21E
YXRlPyAxIDogMCksIGNvb2tpZSk7DQogICAgIGlmIChjb2RlKSB7DQogCWdvdG8gZmFpbDsNCiAg
ICAgfQ0KIA0KICAgICAvKiB0aGVzZSBuZXh0IGNhbGxzIGltcGxpY3RseSBjYWxsIHJ4X1dyaXRl
IHdoZW4gd3JpdGluZyBvdXQgZGF0YSAqLw0KLSAgICBjb2RlID0gRHVtcFZvbHVtZSh0Y2FsbCwg
dnAsIGZyb21EYXRlLCAwKTsJLyogbGFzdCBmaWVsZCA9IGRvbid0IGR1bXAgYWxsIGRpcnMgKi8N
CisgICAgY29kZSA9IER1bXBWb2x1bWUodGNhbGwsIHZwLCBmcm9tRGF0ZSwgMCwgY29tcHJlc3Ms
IGxldmVsKTsgLyogNC4gZmllbGQgPSBkb24ndCBkdW1wIGFsbCBkaXJzICovDQogICAgIGlmIChj
b2RlKQ0KIAlnb3RvIGZhaWw7DQotICAgIEVuZEFGU1ZvbFJlc3RvcmUodGNhbGwpOwkvKiBwcm9i
YWJseSBkb2Vzbid0IGRvIG11Y2ggKi8NCisgICAgaWYgKGNvbXByZXNzKQ0KKwlFbmRBRlNWb2xS
ZXN0b3JlWih0Y2FsbCk7DQorICAgIGVsc2UNCisJRW5kQUZTVm9sUmVzdG9yZSh0Y2FsbCk7CQkg
ICAgLyogcHJvYmFibHkgZG9lc24ndCBkbyBtdWNoICovDQorDQogICAgIHR0LT5yeENhbGxQdHIg
PSAoc3RydWN0IHJ4X2NhbGwgKikwOw0KICAgICBjb2RlID0gcnhfRW5kQ2FsbCh0Y2FsbCwgMCk7
DQogICAgIHJ4X0Rlc3Ryb3lDb25uZWN0aW9uKHRjb24pOwkvKiBkb25lIHdpdGggdGhlIGNvbm5l
Y3Rpb24gKi8NCkBAIC0xMTU1LDIwICsxMTgwLDExIEBADQogICAgIHJldHVybiBjb2RlOw0KIH0N
CiANCi0vKiBTdGFydCBhIGR1bXAgYW5kIHNlbmQgaXQgdG8gbXVsdGlwbGUgcGxhY2VzIHNpbXVs
dGFuZW91c2x5Lg0KLSAqIElmIHRoaXMgcmV0dXJucyBhbiBlcnJvciAoZWcsIHJldHVybiBFTk9F
TlQpLCBpdCBtZWFucyB0aGF0DQotICogbm9uZSBvZiB0aGUgcmVsZWFzZXMgd29ya2VkLiAgSWYg
dGhpcyByZXR1cm5zIDAsIHRoYXQgbWVhbnMgDQotICogdGhhdCBvbmUgb3IgbW9yZSBvZiB0aGUg
cmVsZWFzZXMgd29ya2VkLCBhbmQgdGhlIGNhbGxlciBoYXMNCi0gKiB0byBleGFtaW5lIHRoZSBy
ZXN1bHRzIGFycmF5IHRvIHNlZSB3aGljaCBvbmUocykuDQotICogVGhpcyB3aWxsIG9ubHkgZG8g
RUlUSEVSIGluY3JlbWVudGFsIG9yIGZ1bGwsIG5vdCBib3RoLCBzbyBpdCdzDQotICogdGhlIGNh
bGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGJlIHN1cmUgdGhhdCBhbGwgdGhlIGRlc3RpbmF0aW9u
cw0KLSAqIG5lZWQganVzdCBhbiBpbmNyZW1lbnRhbCAoYW5kIGZyb20gdGhlIHNhbWUgdGltZSks
IGlmIHRoYXQncyANCi0gKiB3aGF0IHdlJ3JlIGRvaW5nLiANCi0gKi8NCiBhZnNfaW50MzINCi1T
QUZTVm9sRm9yd2FyZE11bHRpcGxlKHN0cnVjdCByeF9jYWxsICphY2lkLCBhZnNfaW50MzIgZnJv
bVRyYW5zLCBhZnNfaW50MzIgDQorVm9sRm9yd2FyZE11bHRpcGxlR2VuZXJhbChzdHJ1Y3Qgcnhf
Y2FsbCAqYWNpZCwgYWZzX2ludDMyIGZyb21UcmFucywgYWZzX2ludDMyDQogCQkgICAgICAgZnJv
bURhdGUsIG1hbnlEZXN0cyAqZGVzdGluYXRpb25zLCBhZnNfaW50MzIgc3BhcmUsDQotCQkgICAg
ICAgc3RydWN0IHJlc3RvcmVDb29raWUgKmNvb2tpZSwgbWFueVJlc3VsdHMgKnJlc3VsdHMpDQor
CQkgICAgICAgc3RydWN0IHJlc3RvcmVDb29raWUgKmNvb2tpZSwgbWFueVJlc3VsdHMgKnJlc3Vs
dHMsDQorICAgICAgICAgICAgICAgICAgICAgICBhZnNfaW50MzIgY29tcHJlc3MsIGFmc19pbnQz
MiBsZXZlbCkNCiB7DQogICAgIGFmc19pbnQzMiBzZWN1cml0eUluZGV4Ow0KICAgICBzdHJ1Y3Qg
cnhfc2VjdXJpdHlDbGFzcyAqc2VjdXJpdHlPYmplY3Q7DQpAQCAtMTIyNSw5ICsxMjQxLDEyIEBA
DQogCSAgICBpZiAoISh0Y2FsbHNbaV0gPSByeF9OZXdDYWxsKHRjb25zW2ldKSkpDQogCQljb2Rl
c1tpXSA9IEVOT1RDT05OOw0KIAkgICAgZWxzZSB7DQotCQljb2Rlc1tpXSA9DQotCQkgICAgU3Rh
cnRBRlNWb2xSZXN0b3JlKHRjYWxsc1tpXSwgZGVzdC0+dHJhbnMsIGlzX2luY3JlbWVudGFsLA0K
LQkJCQkgICAgICAgY29va2llKTsNCisgICAgICAgICAgICAgICAgaWYgKGNvbXByZXNzKQ0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvZGVzW2ldID0gU3RhcnRBRlNWb2xSZXN0b3JlWih0Y2Fs
bHNbaV0sIGRlc3QtPnRyYW5zLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaXNfaW5jcmVtZW50YWwsIGNvb2tpZSwgY29tcHJlc3MsIGxl
dmVsKTsNCisgICAgICAgICAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
ZGVzW2ldID0gU3RhcnRBRlNWb2xSZXN0b3JlKHRjYWxsc1tpXSwgZGVzdC0+dHJhbnMsDQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19p
bmNyZW1lbnRhbCxjb29raWUpOw0KIAkJaWYgKGNvZGVzW2ldKSB7DQogCQkgICAgKHZvaWQpcnhf
RW5kQ2FsbCh0Y2FsbHNbaV0sIDApOw0KIAkJICAgIHRjYWxsc1tpXSA9IDA7DQpAQCAtMTIzOSw3
ICsxMjU4LDcgQEANCiAgICAgfQ0KIA0KICAgICAvKiB0aGVzZSBuZXh0IGNhbGxzIGltcGxpY3Rs
eSBjYWxsIHJ4X1dyaXRlIHdoZW4gd3JpdGluZyBvdXQgZGF0YSAqLw0KLSAgICBjb2RlID0gRHVt
cFZvbE11bHRpKHRjYWxscywgaSwgdnAsIGZyb21EYXRlLCAwLCBjb2Rlcyk7DQorICAgIGNvZGUg
PSBEdW1wVm9sTXVsdGkodGNhbGxzLCBpLCB2cCwgZnJvbURhdGUsIDAsIGNvZGVzLCAoaW50KWNv
bXByZXNzLCAoaW50KWxldmVsKTsNCiANCiANCiAgIGZhaWw6DQpAQCAtMTI0Nyw3ICsxMjY2LDEw
IEBADQogCXN0cnVjdCByZXBsaWNhICpkZXN0ID0gJihkZXN0aW5hdGlvbnMtPm1hbnlEZXN0c192
YWxbaV0pOw0KIA0KIAlpZiAoIWNvZGUgJiYgdGNhbGxzW2ldICYmICFjb2Rlc1tpXSkgew0KLQkg
ICAgRW5kQUZTVm9sUmVzdG9yZSh0Y2FsbHNbaV0pOw0KKyAgICAgICAgICAgICAgICBpZiAoY29t
cHJlc3MpDQorCSAgICAgICAgICAgICAgICBFbmRBRlNWb2xSZXN0b3JlWih0Y2FsbHNbaV0pOw0K
KyAgICAgICAgICAgICAgICBlbHNlDQorCQkJRW5kQUZTVm9sUmVzdG9yZSh0Y2FsbHNbaV0pOw0K
IAl9DQogCWlmICh0Y2FsbHNbaV0pIHsNCiAJICAgIGVjID0gcnhfRW5kQ2FsbCh0Y2FsbHNbaV0s
IDApOw0KQEAgLTEyNzQsMTggKzEyOTYsNjEgQEANCiAgICAgcmV0dXJuIGNvZGU7DQogfQ0KIA0K
Ky8qIFN0YXJ0IGEgZHVtcCBhbmQgc2VuZCBpdCB0byBtdWx0aXBsZSBwbGFjZXMgc2ltdWx0YW5l
b3VzbHkuDQorICogSWYgdGhpcyByZXR1cm5zIGFuIGVycm9yIChlZywgcmV0dXJuIEVOT0VOVCks
IGl0IG1lYW5zIHRoYXQNCisgKiBub25lIG9mIHRoZSByZWxlYXNlcyB3b3JrZWQuICBJZiB0aGlz
IHJldHVybnMgMCwgdGhhdCBtZWFucw0KKyAqIHRoYXQgb25lIG9yIG1vcmUgb2YgdGhlIHJlbGVh
c2VzIHdvcmtlZCwgYW5kIHRoZSBjYWxsZXIgaGFzDQorICogdG8gZXhhbWluZSB0aGUgcmVzdWx0
cyBhcnJheSB0byBzZWUgd2hpY2ggb25lKHMpLg0KKyAqIFRoaXMgd2lsbCBvbmx5IGRvIEVJVEhF
UiBpbmNyZW1lbnRhbCBvciBmdWxsLCBub3QgYm90aCwgc28gaXQncw0KKyAqIHRoZSBjYWxsZXIn
cyByZXNwb25zaWJpbGl0eSB0byBiZSBzdXJlIHRoYXQgYWxsIHRoZSBkZXN0aW5hdGlvbnMNCisg
KiBuZWVkIGp1c3QgYW4gaW5jcmVtZW50YWwgKGFuZCBmcm9tIHRoZSBzYW1lIHRpbWUpLCBpZiB0
aGF0J3MNCisgKiB3aGF0IHdlJ3JlIGRvaW5nLg0KKyAqLw0KK2Fmc19pbnQzMg0KK1NBRlNWb2xG
b3J3YXJkTXVsdGlwbGUoc3RydWN0IHJ4X2NhbGwgKmFjaWQsIGFmc19pbnQzMiBmcm9tVHJhbnMs
IGFmc19pbnQzMg0KKwkJICAgICAgIGZyb21EYXRlLCBtYW55RGVzdHMgKmRlc3RpbmF0aW9ucywg
YWZzX2ludDMyIHNwYXJlLA0KKwkJICAgICAgIHN0cnVjdCByZXN0b3JlQ29va2llICpjb29raWUs
IG1hbnlSZXN1bHRzICpyZXN1bHRzKQ0KK3sNCisJcmV0dXJuIFZvbEZvcndhcmRNdWx0aXBsZUdl
bmVyYWwoYWNpZCwgZnJvbVRyYW5zLA0KKyAgICAgICAgCWZyb21EYXRlLCBkZXN0aW5hdGlvbnMs
IHNwYXJlLA0KKyAgICAgICAgICAgICAgICBjb29raWUsIHJlc3VsdHMsDQorICAgICAgICAgICAg
ICAgIDAsIDApOw0KK30NCisNCithZnNfaW50MzINCitTQUZTVm9sRm9yd2FyZE11bHRpcGxlWihz
dHJ1Y3QgcnhfY2FsbCAqYWNpZCwgYWZzX2ludDMyIGZyb21UcmFucywgYWZzX2ludDMyDQorCQkg
ICAgICAgZnJvbURhdGUsIG1hbnlEZXN0cyAqZGVzdGluYXRpb25zLCBhZnNfaW50MzIgc3BhcmUs
DQorCQkgICAgICAgc3RydWN0IHJlc3RvcmVDb29raWUgKmNvb2tpZSwgbWFueVJlc3VsdHMgKnJl
c3VsdHMsDQorICAgICAgICAgICAgICAgICAgICAgICBhZnNfaW50MzIgY29tcHJlc3MsIGFmc19p
bnQzMiBsZXZlbCkNCit7DQorCXJldHVybiBWb2xGb3J3YXJkTXVsdGlwbGVHZW5lcmFsKGFjaWQs
IGZyb21UcmFucywNCisgICAgICAgIAlmcm9tRGF0ZSwgZGVzdGluYXRpb25zLCBzcGFyZSwNCisg
ICAgICAgICAgICAgICAgY29va2llLCByZXN1bHRzLA0KKyAgICAgICAgICAgICAgICBjb21wcmVz
cywgbGV2ZWwpOw0KK30NCisNCiBhZnNfaW50MzINCiBTQUZTVm9sRHVtcChzdHJ1Y3QgcnhfY2Fs
bCAqYWNpZCwgYWZzX2ludDMyIGZyb21UcmFucywgYWZzX2ludDMyIGZyb21EYXRlKQ0KIHsNCiAg
ICAgYWZzX2ludDMyIGNvZGU7DQogDQotICAgIGNvZGUgPSBWb2xEdW1wKGFjaWQsIGZyb21UcmFu
cywgZnJvbURhdGUpOw0KKyAgICBjb2RlID0gVm9sRHVtcChhY2lkLCBmcm9tVHJhbnMsIGZyb21E
YXRlLCAwLCAwKTsNCiAgICAgb3NpX2F1ZGl0VShhY2lkLCBWU19EdW1wRXZlbnQsIGNvZGUsIEFV
RF9MT05HLCBmcm9tVHJhbnMsIEFVRF9FTkQpOw0KICAgICByZXR1cm4gY29kZTsNCiB9DQogDQog
YWZzX2ludDMyDQotVm9sRHVtcChzdHJ1Y3QgcnhfY2FsbCAqYWNpZCwgYWZzX2ludDMyIGZyb21U
cmFucywgYWZzX2ludDMyIGZyb21EYXRlKQ0KK1NBRlNWb2xEdW1wWihzdHJ1Y3QgcnhfY2FsbCAq
YWNpZCwgYWZzX2ludDMyIGZyb21UcmFucywgYWZzX2ludDMyIGZyb21EYXRlLCBhZnNfaW50MzIg
Y29tcHJlc3MsIGFmc19pbnQzMiBsZXZlbCkNCit7DQorICAgIGFmc19pbnQzMiBjb2RlOw0KKw0K
KyAgICBjb2RlID0gVm9sRHVtcChhY2lkLCBmcm9tVHJhbnMsIGZyb21EYXRlLCAoaW50KWNvbXBy
ZXNzLCAoaW50KWxldmVsKTsNCisgICAgb3NpX2F1ZGl0VShhY2lkLCBWU19EdW1wRXZlbnQsIGNv
ZGUsIEFVRF9MT05HLCBmcm9tVHJhbnMsIEFVRF9FTkQpOw0KKyAgICByZXR1cm4gY29kZTsNCit9
DQorDQorYWZzX2ludDMyDQorVm9sRHVtcChzdHJ1Y3QgcnhfY2FsbCAqYWNpZCwgYWZzX2ludDMy
IGZyb21UcmFucywgYWZzX2ludDMyIGZyb21EYXRlLCBhZnNfaW50MzIgY29tcHJlc3MsIGFmc19p
bnQzMiBsZXZlbCkNCiB7DQogICAgIGludCBjb2RlID0gMDsNCiAgICAgcmVnaXN0ZXIgc3RydWN0
IHZvbHNlcl90cmFucyAqdHQ7DQpAQCAtMTMwMyw3ICsxMzY4LDggQEANCiAgICAgfQ0KICAgICBz
dHJjcHkodHQtPmxhc3RQcm9jTmFtZSwgIkR1bXAiKTsNCiAgICAgdHQtPnJ4Q2FsbFB0ciA9IGFj
aWQ7DQotICAgIGNvZGUgPSBEdW1wVm9sdW1lKGFjaWQsIHR0LT52b2x1bWUsIGZyb21EYXRlLCAx
KTsJLyogc3F1aXJ0IG91dCB0aGUgdm9sdW1lJ3MgZGF0YSwgdG9vICovDQorICAgIGNvZGUgPSBE
dW1wVm9sdW1lKGFjaWQsIHR0LT52b2x1bWUsIGZyb21EYXRlLCAxLA0KKyAgICAJY29tcHJlc3Ms
IGxldmVsKTsgLy9zcXVpcnQgb3V0IHRoZSB2b2x1bWUncyBkYXRhLCB0b28NCiAgICAgaWYgKGNv
ZGUpIHsNCiAJdHQtPnJ4Q2FsbFB0ciA9IChzdHJ1Y3QgcnhfY2FsbCAqKTA7DQogCVRSRUxFKHR0
KTsNCkBAIC0xMzE3LDIzICsxMzgzLDM0IEBADQogICAgIHJldHVybiAwOw0KIH0NCiANCi0vKiAN
CisvKg0KICAqIEhhISAgTm8gbW9yZSBoZWxwZXIgcHJvY2VzcyENCiAgKi8NCiBhZnNfaW50MzIN
Ci1TQUZTVm9sUmVzdG9yZShzdHJ1Y3QgcnhfY2FsbCAqYWNpZCwgYWZzX2ludDMyIGF0cmFucywg
YWZzX2ludDMyIGFmbGFncywgDQorU0FGU1ZvbFJlc3RvcmUoc3RydWN0IHJ4X2NhbGwgKmFjaWQs
IGFmc19pbnQzMiBhdHJhbnMsIGFmc19pbnQzMiBhZmxhZ3MsDQogCSAgICAgICBzdHJ1Y3QgcmVz
dG9yZUNvb2tpZSAqY29va2llKQ0KIHsNCiAgICAgYWZzX2ludDMyIGNvZGU7DQogDQotICAgIGNv
ZGUgPSBWb2xSZXN0b3JlKGFjaWQsIGF0cmFucywgYWZsYWdzLCBjb29raWUpOw0KKyAgICBjb2Rl
ID0gVm9sUmVzdG9yZShhY2lkLCBhdHJhbnMsIGFmbGFncywgY29va2llLCAwLCAwKTsNCiAgICAg
b3NpX2F1ZGl0VShhY2lkLCBWU19SZXN0b3JlRXZlbnQsIGNvZGUsIEFVRF9MT05HLCBhdHJhbnMs
IEFVRF9FTkQpOw0KICAgICByZXR1cm4gY29kZTsNCiB9DQogDQogYWZzX2ludDMyDQotVm9sUmVz
dG9yZShzdHJ1Y3QgcnhfY2FsbCAqYWNpZCwgYWZzX2ludDMyIGF0cmFucywgYWZzX2ludDMyIGFm
bGFncywgDQotCSAgICAgICBzdHJ1Y3QgcmVzdG9yZUNvb2tpZSAqY29va2llKQ0KK1NBRlNWb2xS
ZXN0b3JlWihzdHJ1Y3QgcnhfY2FsbCAqYWNpZCwgYWZzX2ludDMyIGF0cmFucywgYWZzX2ludDMy
IGFmbGFncywNCisJICAgICAgIHN0cnVjdCByZXN0b3JlQ29va2llICpjb29raWUsIGFmc19pbnQz
MiBjb21wcmVzcywgYWZzX2ludDMyIGxldmVsKQ0KK3sNCisgICAgYWZzX2ludDMyIGNvZGU7DQor
DQorICAgIGNvZGUgPSBWb2xSZXN0b3JlKGFjaWQsIGF0cmFucywgYWZsYWdzLCBjb29raWUsIChp
bnQpY29tcHJlc3MsIChpbnQpbGV2ZWwpOw0KKyAgICBvc2lfYXVkaXRVKGFjaWQsIFZTX1Jlc3Rv
cmVFdmVudCwgY29kZSwgQVVEX0xPTkcsIGF0cmFucywgQVVEX0VORCk7DQorICAgIHJldHVybiBj
b2RlOw0KK30NCisNCithZnNfaW50MzINCitWb2xSZXN0b3JlKHN0cnVjdCByeF9jYWxsICphY2lk
LCBhZnNfaW50MzIgYXRyYW5zLCBhZnNfaW50MzIgYWZsYWdzLA0KKwkgICAgICAgc3RydWN0IHJl
c3RvcmVDb29raWUgKmNvb2tpZSwgaW50IGNvbXByZXNzLCBpbnQgbGV2ZWwpDQogew0KICAgICBy
ZWdpc3RlciBzdHJ1Y3Qgdm9sc2VyX3RyYW5zICp0dDsNCiAgICAgcmVnaXN0ZXIgYWZzX2ludDMy
IGNvZGUsIHRjb2RlOw0KQEAgLTEzNTQsNyArMTQzMSw3IEBADQogDQogICAgIERGbHVzaFZvbHVt
ZShWX3BhcmVudElkKHR0LT52b2x1bWUpKTsgLyogRW5zdXJlIGRpciBidWZmZXJzIGdldCBkcm9w
cGVkICovDQogDQotICAgIGNvZGUgPSBSZXN0b3JlVm9sdW1lKGFjaWQsIHR0LT52b2x1bWUsIChh
ZmxhZ3MgJiAxKSwgY29va2llKTsJLyogbGFzdCBpcyBpbmNyZW1lbnRhbHAgKi8NCisgICAgY29k
ZSA9IFJlc3RvcmVWb2x1bWUoYWNpZCwgdHQtPnZvbHVtZSwgKGFmbGFncyAmIDEpLCBjb29raWUs
IGNvbXByZXNzLCBsZXZlbCk7IC8qIDMuIGlzIGluY3JlbWVudGFscCAqLw0KICAgICBGU1lOQ19h
c2tmcyh0dC0+dm9saWQsIE5VTEwsIEZTWU5DX1JFU1RPUkVWT0xVTUUsIDBsKTsJLypicmVhayBj
YWxsIGJhY2tzIG9uIHRoZQ0KIAkJCQkJCQkJICogcmVzdG9yZWQgdm9sdW1lICovDQogICAgIHR0
LT5yeENhbGxQdHIgPSAoc3RydWN0IHJ4X2NhbGwgKikwOw0KZGlmZiAtTmF1ciBvcGVuYWZzLTEu
My43Ny9zcmMvdm9sc2VyL3ZvbHNlcl9wcm90b3R5cGVzLmggb3BlbmFmcy0xLjMuNzd6L3NyYy92
b2xzZXIvdm9sc2VyX3Byb3RvdHlwZXMuaA0KLS0tIG9wZW5hZnMtMS4zLjc3L3NyYy92b2xzZXIv
dm9sc2VyX3Byb3RvdHlwZXMuaAkyMDA0LTExLTA5IDE4OjEzOjQ1LjAwMDAwMDAwMCArMDEwMA0K
KysrIG9wZW5hZnMtMS4zLjc3ei9zcmMvdm9sc2VyL3ZvbHNlcl9wcm90b3R5cGVzLmgJMjAwNC0x
Mi0yMSAxNzo1Nzo0Ni4wMDAwMDAwMDAgKzAxMDANCkBAIC0zOSwxOCArMzksMTggQEANCiBleHRl
cm4gdm9pZCBzaWdpbnRfaGFuZGxlcihpbnQgeCk7DQogZXh0ZXJuIGludCBVVl9Nb3ZlVm9sdW1l
KGFmc19pbnQzMiBhZnJvbXZvbCwgYWZzX2ludDMyIGFmcm9tc2VydmVyLA0KIAkJCSBhZnNfaW50
MzIgYWZyb21wYXJ0LCBhZnNfaW50MzIgYXRvc2VydmVyLA0KLQkJCSBhZnNfaW50MzIgYXRvcGFy
dCk7DQorCQkJIGFmc19pbnQzMiBhdG9wYXJ0LCBpbnQgY29tcHJlc3MsIGludCBsZXZlbCk7DQog
ZXh0ZXJuIGludCBVVl9CYWNrdXBWb2x1bWUoYWZzX2ludDMyIGFzZXJ2ZXIsIGFmc19pbnQzMiBh
cGFydCwNCiAJCQkgICBhZnNfaW50MzIgYXZvbGlkKTsNCiBleHRlcm4gaW50IFVWX1JlbGVhc2VW
b2x1bWUoYWZzX2ludDMyIGFmcm9tdm9sLCBhZnNfaW50MzIgYWZyb21zZXJ2ZXIsDQotCQkJICAg
IGFmc19pbnQzMiBhZnJvbXBhcnQsIGludCBmb3JjZWZsYWcpOw0KKwkJCSAgICBhZnNfaW50MzIg
YWZyb21wYXJ0LCBpbnQgZm9yY2VmbGFnLCBpbnQgY29tcHJlc3MsIGludCBsZXZlbCk7DQogZXh0
ZXJuIHZvaWQgZHVtcF9zaWdfaGFuZGxlcihpbnQgeCk7DQogZXh0ZXJuIGludCBVVl9EdW1wVm9s
dW1lKGFmc19pbnQzMiBhZnJvbXZvbCwgYWZzX2ludDMyIGFmcm9tc2VydmVyLA0KIAkJCSBhZnNf
aW50MzIgYWZyb21wYXJ0LCBhZnNfaW50MzIgZnJvbWRhdGUsDQotCQkJIGFmc19pbnQzMigqRHVt
cEZ1bmN0aW9uKSAoKSwgY2hhciAqcm9jayk7DQorCQkJIGFmc19pbnQzMigqRHVtcEZ1bmN0aW9u
KSAoKSwgY2hhciAqcm9jaywgaW50IGNvbXByZXNzLCBpbnQgbGV2ZWwpOw0KIGV4dGVybiBpbnQg
VVZfUmVzdG9yZVZvbHVtZShhZnNfaW50MzIgdG9zZXJ2ZXIsIGFmc19pbnQzMiB0b3BhcnQsDQog
CQkJICAgIGFmc19pbnQzMiB0b3ZvbGlkLCBjaGFyIHRvdm9sbmFtZVtdLCBpbnQgZmxhZ3MsDQot
CQkJICAgIGFmc19pbnQzMigqV3JpdGVEYXRhKSAoKSwgY2hhciAqcm9jayk7DQorCQkJICAgIGFm
c19pbnQzMigqV3JpdGVEYXRhKSAoKSwgY2hhciAqcm9jaywgaW50IGNvbXByZXNzLCBpbnQgbGV2
ZWwpOw0KIGV4dGVybiBpbnQgVVZfTG9ja1JlbGVhc2UoYWZzX2ludDMyIHZvbGlkKTsNCiBleHRl
cm4gaW50IFVWX0FkZFNpdGUoYWZzX2ludDMyIHNlcnZlciwgYWZzX2ludDMyIHBhcnQsIGFmc19p
bnQzMiB2b2xpZCk7DQogZXh0ZXJuIGludCBVVl9SZW1vdmVTaXRlKGFmc19pbnQzMiBzZXJ2ZXIs
IGFmc19pbnQzMiBwYXJ0LCBhZnNfaW50MzIgdm9saWQpOw0KZGlmZiAtTmF1ciBvcGVuYWZzLTEu
My43Ny9zcmMvdm9sc2VyL3Zvcy5jIG9wZW5hZnMtMS4zLjc3ei9zcmMvdm9sc2VyL3Zvcy5jDQot
LS0gb3BlbmFmcy0xLjMuNzcvc3JjL3ZvbHNlci92b3MuYwkyMDA0LTExLTA5IDE4OjEzOjQ1LjAw
MDAwMDAwMCArMDEwMA0KKysrIG9wZW5hZnMtMS4zLjc3ei9zcmMvdm9sc2VyL3Zvcy5jCTIwMDQt
MTItMjEgMTc6NTI6MzkuMDAwMDAwMDAwICswMTAwDQpAQCAtNjIsNiArNjIsNyBAQA0KICNpbmNs
dWRlIDxzaWduYWwuaD4NCiAjZW5kaWYNCiAjaW5jbHVkZSAidm9sc2VyX3Byb3RvdHlwZXMuaCIN
CisjaW5jbHVkZSAiemlvcnguaCINCiANCiAjaWZkZWYgSEFWRV9QT1NJWF9SRUdFWA0KICNpbmNs
dWRlIDxyZWdleC5oPg0KQEAgLTI2NSw4ICsyNjYsOSBAQA0KICAvKnNlbmRzIHRoZSBjb250ZW50
cyBvZiBmaWxlIGFzc29jaWF0ZWQgd2l0aCA8ZmQ+IGFuZCA8Ymxrc2l6ZT4gIHRvIFJ4IFN0cmVh
bSANCiAgICogYXNzb2NpYXRlZCAgd2l0aCA8Y2FsbD4gKi8NCiBpbnQgDQotU2VuZEZpbGUodXNk
X2hhbmRsZV90IHVmZCwgcmVnaXN0ZXIgc3RydWN0IHJ4X2NhbGwgKmNhbGwsIGxvbmcgYmxrc2l6
ZSkNCitTZW5kRmlsZSh1c2RfaGFuZGxlX3QgdWZkLCByZWdpc3RlciBzdHJ1Y3QgcnhfY2FsbCAq
Y2FsbCwgbG9uZyBibGtzaXplLCBpbnQgY29tcHJlc3MsIGludCBsZXZlbCkNCiB7DQorICAgIHN0
cnVjdCB6aW9yeF9jYWxsIHpjYWxsOw0KICAgICBjaGFyICpidWZmZXIgPSAoY2hhciAqKTA7DQog
ICAgIGFmc19pbnQzMiBlcnJvciA9IDA7DQogICAgIGludCBkb25lID0gMDsNCkBAIC0yNzgsNiAr
MjgwLDEyIEBADQogCXJldHVybiAtMTsNCiAgICAgfQ0KIA0KKyAgICBpZiAoemlvcnhCZWdpbldy
aXRlKGNhbGwsIGNvbXByZXNzLCBsZXZlbCwgJnpjYWxsKSE9WklPUlhfT0spDQorICAgIHsNCisg
ICAgICAgIGZwcmludGYoU1RERVJSLCAiU2VuZEZpbGU6IHppb3J4QmVnaW5SZWFkIGZhaWxlZFxu
Iik7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisNCiAgICAgd2hpbGUgKCFlcnJvciAm
JiAhZG9uZSkgew0KICNpZm5kZWYgQUZTX05UNDBfRU5WCQkvKiBOVCBjc24ndCBzZWxlY3Qgb24g
bm9uLXNvY2tldCBmZCdzICovDQogCWZkX3NldCBpbjsNCkBAIC0yOTUsMTEgKzMwMywxOCBAQA0K
IAkgICAgZG9uZSA9IDE7DQogCSAgICBicmVhazsNCiAJfQ0KLQlpZiAocnhfV3JpdGUoY2FsbCwg
YnVmZmVyLCBuYnl0ZXMpICE9IG5ieXRlcykgew0KKwlpZiAoemlvcnhXcml0ZSgmemNhbGwsIGJ1
ZmZlciwgbmJ5dGVzKSAhPSBuYnl0ZXMpew0KIAkgICAgZXJyb3IgPSAtMTsNCiAJICAgIGJyZWFr
Ow0KIAl9DQogICAgIH0NCisNCisgICAgaWYgKHppb3J4RW5kV3JpdGUoJnpjYWxsKSE9WklPUlhf
T0spDQorICAgIHsNCisgICAgICAgIGZwcmludGYoU1RERVJSLCAiU2VuZEZpbGU6IHppb3J4RW5k
V3JpdGUgZmFpbGVkXG4iKTsNCisgICAgICAgIGVycm9yID0gLTE7DQorICAgIH0NCisNCiAgICAg
aWYgKGJ1ZmZlcikNCiAJZnJlZShidWZmZXIpOw0KICAgICByZXR1cm4gZXJyb3I7DQpAQCAtMzA4
LDcgKzMyMyw3IEBADQogLyogZnVuY3Rpb24gaW52b2tlZCBieSBVVl9SZXN0b3JlVm9sdW1lLCBy
ZWFkcyB0aGUgZGF0YSBmcm9tIHJ4X3RyeF9zdHJlYW0gYW5kDQogICogd3JpdGVzIGl0IG91dCB0
byB0aGUgdm9sdW1lLiAqLw0KIGFmc19pbnQzMg0KLVdyaXRlRGF0YShzdHJ1Y3QgcnhfY2FsbCAq
Y2FsbCwgY2hhciAqcm9jaykNCitXcml0ZURhdGEoc3RydWN0IHJ4X2NhbGwgKmNhbGwsIGNoYXIg
KnJvY2ssIGludCBjb21wcmVzcywgaW50IGxldmVsKQ0KIHsNCiAgICAgY2hhciAqZmlsZW5hbWU7
DQogICAgIHVzZF9oYW5kbGVfdCB1ZmQ7DQpAQCAtMzM1LDcgKzM1MCw3IEBADQogCSAgICBnb3Rv
IHdmYWlsOw0KIAl9DQogICAgIH0NCi0gICAgY29kZSA9IFNlbmRGaWxlKHVmZCwgY2FsbCwgYmxr
c2l6ZSk7DQorICAgIGNvZGUgPSBTZW5kRmlsZSh1ZmQsIGNhbGwsIGJsa3NpemUsIGNvbXByZXNz
LCBsZXZlbCk7DQogICAgIGlmIChjb2RlKSB7DQogCWVycm9yID0gY29kZTsNCiAJZ290byB3ZmFp
bDsNCkBAIC0zNTcsMTIgKzM3MiwxMyBAQA0KICAqIHdpdGggPGZkPiA8Ymxrc2l6ZT4NCiAgKi8N
CiBpbnQNCi1SZWNlaXZlRmlsZSh1c2RfaGFuZGxlX3QgdWZkLCBzdHJ1Y3QgcnhfY2FsbCAqY2Fs
bCwgbG9uZyBibGtzaXplKQ0KK1JlY2VpdmVGaWxlKHVzZF9oYW5kbGVfdCB1ZmQsIHN0cnVjdCBy
eF9jYWxsICpjYWxsLCBsb25nIGJsa3NpemUsIGludCBjb21wcmVzcywgaW50IGxldmVsKQ0KIHsN
CiAgICAgY2hhciAqYnVmZmVyID0gTlVMTDsNCiAgICAgYWZzX2ludDMyIGJ5dGVzcmVhZDsNCiAg
ICAgYWZzX3VpbnQzMiBieXRlc2xlZnQsIHc7DQogICAgIGFmc19pbnQzMiBlcnJvciA9IDA7DQor
ICAgIHN0cnVjdCB6aW9yeF9jYWxsIHpjYWxsOw0KIA0KICAgICBidWZmZXIgPSAoY2hhciAqKW1h
bGxvYyhibGtzaXplKTsNCiAgICAgaWYgKCFidWZmZXIpIHsNCkBAIC0zNzAsNyArMzg2LDE0IEBA
DQogCUVSUk9SX0VYSVQoLTEpOw0KICAgICB9DQogDQotICAgIHdoaWxlICgoYnl0ZXNyZWFkID0g
cnhfUmVhZChjYWxsLCBidWZmZXIsIGJsa3NpemUpKSA+IDApIHsNCisgICAgaWYgKHppb3J4QmVn
aW5SZWFkKGNhbGwsIGNvbXByZXNzLCBsZXZlbCwgJnpjYWxsKSE9WklPUlhfT0spDQorICAgIHsN
CisJZnByaW50ZihTVERFUlIsICJSZWNlaXZlRmlsZTogemlvcnhCZWdpblJlYWQgZmFpbGVkXG4i
KTsNCisJZnJlZShidWZmZXIpOw0KKwlyZXR1cm4gKC0xKTsNCisgICAgfQ0KKw0KKyAgICB3aGls
ZSAoKGJ5dGVzcmVhZD16aW9yeFJlYWQoJnpjYWxsLCBidWZmZXIsIGJsa3NpemUpKSA+IDApIHsN
CiAJZm9yIChieXRlc2xlZnQgPSBieXRlc3JlYWQ7IGJ5dGVzbGVmdDsgYnl0ZXNsZWZ0IC09IHcp
IHsNCiAjaWZuZGVmIEFGU19OVDQwX0VOVgkJLyogTlQgY3NuJ3Qgc2VsZWN0IG9uIG5vbi1zb2Nr
ZXQgZmQncyAqLw0KIAkgICAgZmRfc2V0IG91dDsNCkBAIC0zODgsMTQgKzQxMSwyNSBAQA0KIAl9
DQogICAgIH0NCiANCisgICAgaWYgKGJ5dGVzcmVhZDwwKQ0KKyAgICB7DQorCWZwcmludGYoc3Rk
ZXJyLCAiUmVhZCBlcnJvciAoJWQpXG4iLCBieXRlc3JlYWQpOw0KKwlFUlJPUl9FWElUKC0xKTsN
CisgICAgfQ0KKw0KICAgZXJyb3JfZXhpdDoNCisgICAgaWYgKHppb3J4RW5kUmVhZCgmemNhbGwp
IT1aSU9SWF9PSykNCisgICAgew0KKyAgICAgICAgZnByaW50ZihTVERFUlIsICJSZWNlaXZlRmls
ZTogemlvcnhFbmRSZWFkIGZhaWxlZFxuIik7DQorICAgICAgICBlcnJvciA9IC0xOw0KKyAgICB9
DQogICAgIGlmIChidWZmZXIpDQogCWZyZWUoYnVmZmVyKTsNCiAgICAgcmV0dXJuIChlcnJvcik7
DQogfQ0KIA0KIGFmc19pbnQzMg0KLUR1bXBGdW5jdGlvbihzdHJ1Y3QgcnhfY2FsbCAqY2FsbCwg
Y2hhciAqZmlsZW5hbWUpDQorRHVtcEZ1bmN0aW9uKHN0cnVjdCByeF9jYWxsICpjYWxsLCBjaGFy
ICpmaWxlbmFtZSwgaW50IGNvbXByZXNzLCBpbnQgbGV2ZWwpDQogew0KICAgICB1c2RfaGFuZGxl
X3QgdWZkOwkJLyogZGVmYXVsdCBpcyB0byBzdGRvdXQgKi8NCiAgICAgYWZzX2ludDMyIGVycm9y
ID0gMCwgY29kZTsNCkBAIC00MjUsNyArNDU5LDcgQEANCiAJfQ0KICAgICB9DQogDQotICAgIGNv
ZGUgPSBSZWNlaXZlRmlsZSh1ZmQsIGNhbGwsIGJsa3NpemUpOw0KKyAgICBjb2RlID0gUmVjZWl2
ZUZpbGUodWZkLCBjYWxsLCBibGtzaXplLCBjb21wcmVzcywgbGV2ZWwpOw0KICAgICBpZiAoY29k
ZSkNCiAJRVJST1JfRVhJVChjb2RlKTsNCiANCkBAIC0xNzc4LDYgKzE4MTIsMjMgQEANCiAgICAg
cmV0dXJuIDA7DQogfQ0KIA0KK3N0YXRpYyB2b2lkIFBhcnNlUGFyYW1aKHBkLCBjb21wcmVzcywg
bGV2ZWwpDQorc3RydWN0IGNtZF9wYXJtZGVzYyAqcGQ7DQoraW50ICpjb21wcmVzczsNCitpbnQg
KmxldmVsOw0KK3sNCisJaWYgKHBkLT5pdGVtcykNCisJew0KKwkJKmNvbXByZXNzID0gKDE9PTEp
Ow0KKwkJKmxldmVsID0gcGQtPml0ZW1zLT5kYXRhWzBdIC0gJzAnOw0KKwkJaWYgKCpsZXZlbDww
IHx8ICpsZXZlbD45KQ0KKwkJCSpsZXZlbCA9IFpfREVGQVVMVF9DT01QUkVTU0lPTjsNCisJfSBl
bHNlIHsNCisJCSpjb21wcmVzcyA9ICgwPT0xKTsNCisJCSpsZXZlbCA9IDA7DQorCX0NCit9DQor
DQogI2RlZmluZSBURVNUTQkwCQkvKiBzZXQgZm9yIG1vdmUgc3BhY2UgdGVzdHMsIGNsZWFyIGZv
ciBwcm9kdWN0aW9uICovDQogc3RhdGljDQogTW92ZVZvbHVtZShhcykNCkBAIC0xNzg3LDYgKzE4
MzgsNyBAQA0KICAgICBhZnNfaW50MzIgdm9saWQsIGZyb21zZXJ2ZXIsIHRvc2VydmVyLCBmcm9t
cGFydCwgdG9wYXJ0Ow0KICAgICBhZnNfaW50MzIgZmxhZ3MsIGNvZGUsIGVycjsNCiAgICAgY2hh
ciBmcm9tUGFydE5hbWVbMTBdLCB0b1BhcnROYW1lWzEwXTsNCisgICAgaW50IGNvbXByZXNzLCBs
ZXZlbDsNCiANCiAgICAgc3RydWN0IGRpc2tQYXJ0aXRpb24gcGFydGl0aW9uOwkvKiBmb3Igc3Bh
Y2UgY2hlY2sgKi8NCiAgICAgdm9saW50SW5mbyAqcDsNCkBAIC0xODQ2LDYgKzE4OTgsOCBAQA0K
ICAgICBmbGFncyA9IDA7DQogICAgIGlmIChhcy0+cGFybXNbNV0uaXRlbXMpIGZsYWdzIHw9IFJW
X05PQ0xPTkU7DQogDQorICAgIFBhcnNlUGFyYW1aKCYoYXMtPnBhcm1zWzZdKSwgJmNvbXByZXNz
LCAmbGV2ZWwpOw0KKw0KICAgICAvKg0KICAgICAgKiBjaGVjayBzb3VyY2UgcGFydGl0aW9uIGZv
ciBzcGFjZSB0byBjbG9uZSB2b2x1bWUNCiAgICAgICovDQpAQCAtMTg5NCw3ICsxOTQ4LDcgQEAN
CiAgICAgLyogc3VjY2Vzc2Z1bCBtb3ZlIHN0aWxsIG5vdCBndWFyYW50ZWVkIGJ1dCBzaG9vdCBm
b3IgaXQgKi8NCiANCiAgICAgY29kZSA9DQotCVVWX01vdmVWb2x1bWUyKHZvbGlkLCBmcm9tc2Vy
dmVyLCBmcm9tcGFydCwgdG9zZXJ2ZXIsIHRvcGFydCwgZmxhZ3MpOw0KKwlVVl9Nb3ZlVm9sdW1l
Mih2b2xpZCwgZnJvbXNlcnZlciwgZnJvbXBhcnQsIHRvc2VydmVyLCB0b3BhcnQsIGZsYWdzLCBj
b21wcmVzcywgbGV2ZWwpOw0KICAgICBpZiAoY29kZSkgew0KIAlQcmludERpYWdub3N0aWNzKCJt
b3ZlIiwgY29kZSk7DQogCXJldHVybiBjb2RlOw0KQEAgLTE5MTcsNiArMTk3MSw3IEBADQogICAg
IHN0cnVjdCBudmxkYmVudHJ5IGVudHJ5Ow0KICAgICBzdHJ1Y3QgZGlza1BhcnRpdGlvbiBwYXJ0
aXRpb247CS8qIGZvciBzcGFjZSBjaGVjayAqLw0KICAgICB2b2xpbnRJbmZvICpwOw0KKyAgICBp
bnQgY29tcHJlcywgbGV2ZWw7DQogDQogICAgIHZvbGlkID0gdnN1X0dldFZvbHVtZUlEKGFzLT5w
YXJtc1swXS5pdGVtcy0+ZGF0YSwgY3N0cnVjdCwgJmVycik7DQogICAgIGlmICh2b2xpZCA9PSAw
KSB7DQpAQCAtMjAwMyw2ICsyMDU4LDggQEANCiAgICAgaWYgKGFzLT5wYXJtc1s3XS5pdGVtcykg
ZmxhZ3MgfD0gUlZfUkRPTkxZOw0KICAgICBpZiAoYXMtPnBhcm1zWzhdLml0ZW1zKSBmbGFncyB8
PSBSVl9OT0NMT05FOw0KIA0KKyAgICBQYXJzZVBhcmFtWigmKGFzLT5wYXJtc1s5XSksICZjb21w
cmVzcywgJmxldmVsKTsNCisNCiAgICAgTWFwUGFydElkSW50b05hbWUodG9wYXJ0LCB0b1BhcnRO
YW1lKTsNCiAgICAgTWFwUGFydElkSW50b05hbWUoZnJvbXBhcnQsIGZyb21QYXJ0TmFtZSk7DQog
DQpAQCAtMjA0MSw3ICsyMDk4LDcgQEANCiANCiAgICAgY29kZSA9DQogCVVWX0NvcHlWb2x1bWUy
KHZvbGlkLCBmcm9tc2VydmVyLCBmcm9tcGFydCwgdG92b2x1bWUsIHRvc2VydmVyLA0KLQkJICAg
ICAgIHRvcGFydCwgMCwgZmxhZ3MpOw0KKwkJICAgICAgIHRvcGFydCwgMCwgZmxhZ3MsIGNvbXBy
ZXNzLCBsZXZlbCk7DQogICAgIGlmIChjb2RlKSB7DQogCVByaW50RGlhZ25vc3RpY3MoImNvcHki
LCBjb2RlKTsNCiAJcmV0dXJuIGNvZGU7DQpAQCAtMjA2Niw2ICsyMTIzLDcgQEANCiAgICAgc3Ry
dWN0IG52bGRiZW50cnkgZW50cnk7DQogICAgIHN0cnVjdCBkaXNrUGFydGl0aW9uIHBhcnRpdGlv
bjsJLyogZm9yIHNwYWNlIGNoZWNrICovDQogICAgIHZvbGludEluZm8gKnAsICpxOw0KKyAgICBp
bnQgY29tcHJlc3MsIGxldmVsOw0KIA0KICAgICBwID0gKHZvbGludEluZm8gKikgMDsNCiAgICAg
cSA9ICh2b2xpbnRJbmZvICopIDA7DQpAQCAtMjE5MCw2ICsyMjQ4LDggQEANCiAgICAgaWYgKGFz
LT5wYXJtc1s5XS5pdGVtcykgZmxhZ3MgfD0gUlZfTk9DTE9ORTsNCiAgICAgaWYgKGFzLT5wYXJt
c1sxMF0uaXRlbXMpIGZsYWdzIHw9IFJWX0NQSU5DUjsNCiANCisgICAgUGFyc2VQYXJhbVooJihh
cy0+cGFybXNbMTFdKSwgJmNvbXByZXNzLCAmbGV2ZWwpOw0KKw0KICAgICBNYXBQYXJ0SWRJbnRv
TmFtZSh0b3BhcnQsIHRvUGFydE5hbWUpOw0KICAgICBNYXBQYXJ0SWRJbnRvTmFtZShmcm9tcGFy
dCwgZnJvbVBhcnROYW1lKTsNCiANCkBAIC0yMjM4LDcgKzIyOTgsNyBAQA0KIA0KICAgICBjb2Rl
ID0NCiAJVVZfQ29weVZvbHVtZTIodm9saWQsIGZyb21zZXJ2ZXIsIGZyb21wYXJ0LCB0b3ZvbHVt
ZSwgdG9zZXJ2ZXIsDQotCQkgICAgICAgdG9wYXJ0LCB0b3ZvbGlkLCBmbGFncyk7DQorCQkgICAg
ICAgdG9wYXJ0LCB0b3ZvbGlkLCBmbGFncywgY29tcHJlc3MsIGxldmVsKTsNCiAgICAgaWYgKGNv
ZGUpIHsNCiAJUHJpbnREaWFnbm9zdGljcygic2hhZG93IiwgY29kZSk7DQogCXJldHVybiBjb2Rl
Ow0KQEAgLTI0MzgsNiArMjQ5OCw3IEBADQogICAgIHN0cnVjdCBudmxkYmVudHJ5IGVudHJ5Ow0K
ICAgICBhZnNfaW50MzIgYXZvbGlkLCBhc2VydmVyLCBhcGFydCwgdnR5cGUsIGNvZGUsIGVycjsN
CiAgICAgaW50IGZvcmNlID0gMDsNCisgICAgaW50IGNvbXByZXNzLCBsZXZlbDsNCiANCiAgICAg
aWYgKGFzLT5wYXJtc1sxXS5pdGVtcykNCiAJZm9yY2UgPSAxOw0KQEAgLTI0NjYsNyArMjUyNyw5
IEBADQogCXJldHVybiBFMkJJRzsNCiAgICAgfQ0KIA0KLSAgICBjb2RlID0gVVZfUmVsZWFzZVZv
bHVtZShhdm9saWQsIGFzZXJ2ZXIsIGFwYXJ0LCBmb3JjZSk7DQorICAgIFBhcnNlUGFyYW1aKCYo
YXMtPnBhcm1zWzJdKSwgJmNvbXByZXNzLCAmbGV2ZWwpOw0KKw0KKyAgICBjb2RlID0gVVZfUmVs
ZWFzZVZvbHVtZShhdm9saWQsIGFzZXJ2ZXIsIGFwYXJ0LCBmb3JjZSwgY29tcHJlc3MsIGxldmVs
KTsNCiAgICAgaWYgKGNvZGUpIHsNCiAJUHJpbnREaWFnbm9zdGljcygicmVsZWFzZSIsIGNvZGUp
Ow0KIAlyZXR1cm4gY29kZTsNCkBAIC0yNDg0LDYgKzI1NDcsNyBAQA0KICAgICBhZnNfaW50MzIg
YXZvbGlkLCBhc2VydmVyLCBhcGFydCwgdm9sdHlwZSwgZnJvbWRhdGUgPSAwLCBjb2RlLCBlcnIs
IGk7DQogICAgIGNoYXIgZmlsZW5hbWVbTmFtZUxlbl07DQogICAgIHN0cnVjdCBudmxkYmVudHJ5
IGVudHJ5Ow0KKyAgICBpbnQgY29tcHJlc3MsIGxldmVsOw0KIA0KICAgICByeF9TZXRSeERlYWRU
aW1lKDYwICogMTApOw0KICAgICBmb3IgKGkgPSAwOyBpIDwgTUFYU0VSVkVSUzsgaSsrKSB7DQpA
QCAtMjU0MSwxNCArMjYwNSwxNiBAQA0KIAlzdHJjcHkoZmlsZW5hbWUsICIiKTsNCiAgICAgfQ0K
IA0KKyAgICBQYXJzZVBhcmFtWigmKGFzLT5wYXJtc1s2XSksICZjb21wcmVzcywgJmxldmVsKTsN
CisNCiAgICAgaWYgKGFzLT5wYXJtc1s1XS5pdGVtcykgew0KIAljb2RlID0NCiAJICAgIFVWX0R1
bXBDbG9uZWRWb2x1bWUoYXZvbGlkLCBhc2VydmVyLCBhcGFydCwgZnJvbWRhdGUsDQotCQkJCUR1
bXBGdW5jdGlvbiwgZmlsZW5hbWUpOw0KKwkJCQlEdW1wRnVuY3Rpb24sIGZpbGVuYW1lLCBjb21w
cmVzcywgbGV2ZWwpOw0KICAgICB9IGVsc2Ugew0KIAljb2RlID0NCiAJICAgIFVWX0R1bXBWb2x1
bWUoYXZvbGlkLCBhc2VydmVyLCBhcGFydCwgZnJvbWRhdGUsIER1bXBGdW5jdGlvbiwNCi0JCQkg
IGZpbGVuYW1lKTsNCisJCQkgIGZpbGVuYW1lLCBjb21wcmVzcywgbGV2ZWwpOw0KICAgICB9DQog
ICAgIGlmIChjb2RlKSB7DQogCVByaW50RGlhZ25vc3RpY3MoImR1bXAiLCBjb2RlKTsNCkBAIC0y
NTg1LDYgKzI2NTEsNyBAQA0KICAgICBjaGFyIGFmaWxlbmFtZVtOYW1lTGVuXSwgYXZvbG5hbWVb
Vk9MU0VSX01BWFZPTE5BTUUgKyAxXSwgYXBhcnROYW1lWzEwXTsNCiAgICAgY2hhciB2b2xuYW1l
W1ZPTFNFUl9NQVhWT0xOQU1FICsgMV07DQogICAgIHN0cnVjdCBudmxkYmVudHJ5IGVudHJ5Ow0K
KyAgICBpbnQgY29tcHJlc3MsIGxldmVsOw0KIA0KICAgICBwcm9tcHQgPSAnbic7DQogDQpAQCAt
Mjg0Myw5ICsyOTEwLDExIEBADQogCSAgICByZXN0b3JlZmxhZ3MgfD0gUlZfTFVLRUVQOw0KICAg
ICB9DQogDQorICAgIFBhcnNlUGFyYW1aKCYoYXMtPnBhcm1zWzEwXSksICZjb21wcmVzcywgJmxl
dmVsKTsNCisNCiAgICAgY29kZSA9DQogCVVWX1Jlc3RvcmVWb2x1bWUoYXNlcnZlciwgYXBhcnQs
IGF2b2xpZCwgYXZvbG5hbWUsIHJlc3RvcmVmbGFncywNCi0JCQkgV3JpdGVEYXRhLCBhZmlsZW5h
bWUpOw0KKwkJCSBXcml0ZURhdGEsIGFmaWxlbmFtZSwgY29tcHJlc3MsIGxldmVsKTsNCiAgICAg
aWYgKGNvZGUpIHsNCiAJUHJpbnREaWFnbm9zdGljcygicmVzdG9yZSIsIGNvZGUpOw0KIAlleGl0
KDEpOw0KQEAgLTUzNDUsNiArNTQxNCw3IEBADQogCQkicGFydGl0aW9uIG5hbWUgb24gZGVzdGlu
YXRpb24iKTsNCiAgICAgY21kX0FkZFBhcm0odHMsICItbGl2ZSIsIENNRF9GTEFHLCBDTURfT1BU
SU9OQUwsDQogCQkiY29weSBsaXZlIHZvbHVtZSB3aXRob3V0IGNsb25pbmciKTsNCisgICAgY21k
X0FkZFBhcm0odHMsICIteiIsIENNRF9TSU5HTEUsIENNRF9PUFRJT05BTCwgImNvbXByZXNzaW9u
IGxldmVsIik7DQogICAgIENPTU1PTlBBUk1TOw0KIA0KICAgICB0cyA9IGNtZF9DcmVhdGVTeW50
YXgoImNvcHkiLCBDb3B5Vm9sdW1lLCAwLCAiY29weSBhIHZvbHVtZSIpOw0KQEAgLTUzNjMsNiAr
NTQzMyw3IEBADQogCQkibWFrZSBuZXcgdm9sdW1lIHJlYWQtb25seSIpOw0KICAgICBjbWRfQWRk
UGFybSh0cywgIi1saXZlIiwgQ01EX0ZMQUcsIENNRF9PUFRJT05BTCwNCiAJCSJjb3B5IGxpdmUg
dm9sdW1lIHdpdGhvdXQgY2xvbmluZyIpOw0KKyAgICBjbWRfQWRkUGFybSh0cywgIi16IiwgQ01E
X1NJTkdMRSwgQ01EX09QVElPTkFMLCAiY29tcHJlc3Npb24gbGV2ZWwiKTsNCiAgICAgQ09NTU9O
UEFSTVM7DQogDQogICAgIHRzID0gY21kX0NyZWF0ZVN5bnRheCgic2hhZG93IiwgU2hhZG93Vm9s
dW1lLCAwLA0KQEAgLTUzODcsNiArNTQ1OCw3IEBADQogCQkiY29weSBsaXZlIHZvbHVtZSB3aXRo
b3V0IGNsb25pbmciKTsNCiAgICAgY21kX0FkZFBhcm0odHMsICItaW5jcmVtZW50YWwiLCBDTURf
RkxBRywgQ01EX09QVElPTkFMLA0KIAkJImRvIGluY3JlbWVudGFsIHVwZGF0ZSBpZiB0YXJnZXQg
ZXhpc3RzIik7DQorICAgIGNtZF9BZGRQYXJtKHRzLCAiLXoiLCBDTURfU0lOR0xFLCBDTURfT1BU
SU9OQUwsICJjb21wcmVzc2lvbiBsZXZlbCIpOw0KICAgICBDT01NT05QQVJNUzsNCiANCiAgICAg
dHMgPSBjbWRfQ3JlYXRlU3ludGF4KCJiYWNrdXAiLCBCYWNrdXBWb2x1bWUsIDAsDQpAQCAtNTQx
Myw2ICs1NDg1LDcgQEANCiAgICAgY21kX0FkZFBhcm0odHMsICItaWQiLCBDTURfU0lOR0xFLCAw
LCAidm9sdW1lIG5hbWUgb3IgSUQiKTsNCiAgICAgY21kX0FkZFBhcm0odHMsICItZm9yY2UiLCBD
TURfRkxBRywgQ01EX09QVElPTkFMLA0KIAkJImZvcmNlIGEgY29tcGxldGUgcmVsZWFzZSIpOw0K
KyAgICBjbWRfQWRkUGFybSh0cywgIi16IiwgQ01EX1NJTkdMRSwgQ01EX09QVElPTkFMLCAiY29t
cHJlc3Npb24gbGV2ZWwiKTsNCiAgICAgQ09NTU9OUEFSTVM7DQogDQogICAgIHRzID0gY21kX0Ny
ZWF0ZVN5bnRheCgiZHVtcCIsIER1bXBWb2x1bWUsIDAsICJkdW1wIGEgdm9sdW1lIik7DQpAQCAt
NTQyMyw2ICs1NDk2LDcgQEANCiAgICAgY21kX0FkZFBhcm0odHMsICItcGFydGl0aW9uIiwgQ01E
X1NJTkdMRSwgQ01EX09QVElPTkFMLCAicGFydGl0aW9uIik7DQogICAgIGNtZF9BZGRQYXJtKHRz
LCAiLWNsb25lIiwgQ01EX0ZMQUcsIENNRF9PUFRJT05BTCwNCiAJCSJkdW1wIGEgY2xvbmUgb2Yg
dGhlIHZvbHVtZSIpOw0KKyAgICBjbWRfQWRkUGFybSh0cywgIi16IiwgQ01EX1NJTkdMRSwgQ01E
X09QVElPTkFMLCAiY29tcHJlc3Npb24gbGV2ZWwiKTsNCiAgICAgQ09NTU9OUEFSTVM7DQogDQog
ICAgIHRzID0gY21kX0NyZWF0ZVN5bnRheCgicmVzdG9yZSIsIFJlc3RvcmVWb2x1bWUsIDAsICJy
ZXN0b3JlIGEgdm9sdW1lIik7DQpAQCAtNTQ0MSw2ICs1NTE1LDcgQEANCiAJCSJkdW1wIHwga2Vl
cCB8IG5ldyIpOw0KICAgICBjbWRfQWRkUGFybSh0cywgIi1sYXN0dXBkYXRlIiwgQ01EX1NJTkdM
RSwgQ01EX09QVElPTkFMLA0KIAkJImR1bXAgfCBrZWVwIHwgbmV3Iik7DQorICAgIGNtZF9BZGRQ
YXJtKHRzLCAiLXoiLCBDTURfU0lOR0xFLCBDTURfT1BUSU9OQUwsICJjb21wcmVzc2lvbiBsZXZl
bCIpOw0KICAgICBDT01NT05QQVJNUzsNCiANCiAgICAgdHMgPSBjbWRfQ3JlYXRlU3ludGF4KCJ1
bmxvY2siLCBMb2NrUmVsZWFzZUNtZCwgMCwNCmRpZmYgLU5hdXIgb3BlbmFmcy0xLjMuNzcvc3Jj
L3ZvbHNlci92c3Byb2NzLmMgb3BlbmFmcy0xLjMuNzd6L3NyYy92b2xzZXIvdnNwcm9jcy5jDQot
LS0gb3BlbmFmcy0xLjMuNzcvc3JjL3ZvbHNlci92c3Byb2NzLmMJMjAwNC0xMS0wOSAxODoxMzo0
NS4wMDAwMDAwMDAgKzAxMDANCisrKyBvcGVuYWZzLTEuMy43N3ovc3JjL3ZvbHNlci92c3Byb2Nz
LmMJMjAwNC0xMi0yMSAyMDozMTowNS4wMDAwMDAwMDAgKzAxMDANCkBAIC0xNjYsNyArMTY2LDcg
QEANCiBzdGF0aWMgaW50IFNpbXVsYXRlRm9yd2FyZE11bHRpcGxlKHN0cnVjdCByeF9jb25uZWN0
aW9uICpmcm9tY29ubiwNCiAJCQkJICAgYWZzX2ludDMyIGZyb210aWQsIGFmc19pbnQzMiBmcm9t
ZGF0ZSwNCiAJCQkJICAgbWFueURlc3RzICogdHIsIGFmc19pbnQzMiBmbGFncywNCi0JCQkJICAg
dm9pZCAqY29va2llLCBtYW55UmVzdWx0cyAqIHJlc3VsdHMpOw0KKwkJCQkgICB2b2lkICpjb29r
aWUsIG1hbnlSZXN1bHRzICogcmVzdWx0cywgaW50IGNvbXByZXNzLCBpbnQgbGV2ZWwpOw0KIHN0
YXRpYyBpbnQgcmVsX2NvbXBhcihzdHJ1Y3QgcmVsZWFzZSAqcjEsIHN0cnVjdCByZWxlYXNlICpy
Mik7DQogc3RhdGljIGFmc19pbnQzMiBDaGVja1ZvbHVtZSh2b2xpbnRJbmZvICogdm9sdW1laW5m
bywgYWZzX2ludDMyIGFzZXJ2ZXIsDQogCQkJICAgICBhZnNfaW50MzIgYXBhcnQsIGFmc19pbnQz
MiAqIG1vZGVudHJ5LA0KQEAgLTEwMzYsNyArMTAzNiw3IEBADQogDQogaW50DQogVVZfTW92ZVZv
bHVtZTIoYWZzX2ludDMyIGFmcm9tdm9sLCBhZnNfaW50MzIgYWZyb21zZXJ2ZXIsIGFmc19pbnQz
MiBhZnJvbXBhcnQsDQotCSAgICAgICBhZnNfaW50MzIgYXRvc2VydmVyLCBhZnNfaW50MzIgYXRv
cGFydCwgaW50IGZsYWdzKQ0KKwkgICAgICAgYWZzX2ludDMyIGF0b3NlcnZlciwgYWZzX2ludDMy
IGF0b3BhcnQsIGludCBmbGFncywgaW50IGNvbXByZXNzLCBpbnQgbGV2ZWwpDQogew0KICAgICBz
dHJ1Y3QgcnhfY29ubmVjdGlvbiAqdG9jb25uLCAqZnJvbWNvbm47DQogICAgIGFmc19pbnQzMiBm
cm9tdGlkLCB0b3RpZCwgY2xvbmV0aWQ7DQpAQCAtMTQyMCw5ICsxNDIwLDEyIEBADQogCS8qIENv
cHkgdGhlIGNsb25lIHRvIHRoZSBuZXcgdm9sdW1lICovDQogCVZQUklOVDIoIkR1bXBpbmcgZnJv
bSBjbG9uZSAldSBvbiBzb3VyY2UgdG8gdm9sdW1lICV1IG9uIGRlc3RpbmF0aW9uIC4uLiIsDQog
CQluZXdWb2wsIGFmcm9tdm9sKTsNCi0JY29kZSA9DQotCSAgICBBRlNWb2xGb3J3YXJkKGZyb21j
b25uLCBjbG9uZXRpZCwgMCwgJmRlc3RpbmF0aW9uLCB0b3RpZCwNCi0JCQkgICZjb29raWUpOw0K
Kw0KKwlpZiAoY29tcHJlc3MpDQorCQljb2RlID0gQUZTVm9sRm9yd2FyZFooZnJvbWNvbm4sIGNs
b25ldGlkLCAwLCAmZGVzdGluYXRpb24sIHRvdGlkLCAmY29va2llLCBjb21wcmVzcywgbGV2ZWwp
Ow0KKwllbHNlDQorCQljb2RlID0gQUZTVm9sRm9yd2FyZChmcm9tY29ubiwgY2xvbmV0aWQsIDAs
ICZkZXN0aW5hdGlvbiwgdG90aWQsICZjb29raWUpOw0KKw0KIAlFR09UTzEobWZhaWwsIGNvZGUs
ICJGYWlsZWQgdG8gbW92ZSBkYXRhIGZvciB0aGUgdm9sdW1lICV1XG4iLCB2b2xpZCk7DQogCVZE
T05FOw0KIA0KQEAgLTE0NTMsOSArMTQ1NiwxMiBAQA0KIAkoIkRvaW5nIHRoZSVzIGR1bXAgZnJv
bSBzb3VyY2UgdG8gZGVzdGluYXRpb24gZm9yIHZvbHVtZSAldSAuLi4gIiwNCiAJIChmbGFncyAm
IFJWX05PQ0xPTkUpID8gIiIgOiAiIGluY3JlbWVudGFsIiwNCiAJIGFmcm9tdm9sKTsNCi0gICAg
Y29kZSA9DQotCUFGU1ZvbEZvcndhcmQoZnJvbWNvbm4sIGZyb210aWQsIGZyb21EYXRlLCAmZGVz
dGluYXRpb24sIHRvdGlkLA0KLQkJICAgICAgJmNvb2tpZSk7DQorDQorICAgIGlmIChjb21wcmVz
cykNCisJY29kZSA9IEFGU1ZvbEZvcndhcmRaKGZyb21jb25uLCBmcm9tdGlkLCBmcm9tRGF0ZSwg
JmRlc3RpbmF0aW9uLCB0b3RpZCwmY29va2llLCBjb21wcmVzcywgbGV2ZWwpOw0KKyAgICBlbHNl
DQorCWNvZGUgPSBBRlNWb2xGb3J3YXJkKGZyb21jb25uLCBmcm9tdGlkLCBmcm9tRGF0ZSwgJmRl
c3RpbmF0aW9uLCB0b3RpZCwmY29va2llKTsNCisNCiAgICAgRUdPVE8xKG1mYWlsLCBjb2RlLA0K
IAkgICAiRmFpbGVkIHRvIGRvIHRoZSVzIGR1bXAgZnJvbSBydyB2b2x1bWUgb24gb2xkIHNpdGUg
dG8gcncgdm9sdW1lIG9uIG5ld3NpdGVcbiIsDQogCSAgKGZsYWdzICYgUlZfTk9DTE9ORSkgPyAi
IiA6ICIgaW5jcmVtZW50YWwiKTsNCkBAIC0yMDAxLDEwICsyMDA3LDEwIEBADQogDQogaW50DQog
VVZfTW92ZVZvbHVtZShhZnNfaW50MzIgYWZyb212b2wsIGFmc19pbnQzMiBhZnJvbXNlcnZlciwg
YWZzX2ludDMyIGFmcm9tcGFydCwNCi0JICAgICAgYWZzX2ludDMyIGF0b3NlcnZlciwgYWZzX2lu
dDMyIGF0b3BhcnQpDQorCSAgICAgIGFmc19pbnQzMiBhdG9zZXJ2ZXIsIGFmc19pbnQzMiBhdG9w
YXJ0LCBpbnQgY29tcHJlc3MsIGludCBsZXZlbCkNCiB7DQogICAgIHJldHVybiBVVl9Nb3ZlVm9s
dW1lMihhZnJvbXZvbCwgYWZyb21zZXJ2ZXIsIGFmcm9tcGFydCwNCi0JCQkgIGF0b3NlcnZlciwg
YXRvcGFydCwgMCk7DQorCQkJICBhdG9zZXJ2ZXIsIGF0b3BhcnQsIDAsIGNvbXByZXNzLCBsZXZl
bCk7DQogfQ0KIA0KIA0KQEAgLTIwMjIsNyArMjAyOCw3IEBADQogaW50DQogVVZfQ29weVZvbHVt
ZTIoYWZzX2ludDMyIGFmcm9tdm9sLCBhZnNfaW50MzIgYWZyb21zZXJ2ZXIsIGFmc19pbnQzMiBh
ZnJvbXBhcnQsDQogCSAgICAgICBjaGFyICphdG92b2xuYW1lLCBhZnNfaW50MzIgYXRvc2VydmVy
LCBhZnNfaW50MzIgYXRvcGFydCwNCi0JICAgICAgIGFmc19pbnQzMiBhdG92b2xpZCwgaW50IGZs
YWdzKQ0KKwkgICAgICAgYWZzX2ludDMyIGF0b3ZvbGlkLCBpbnQgZmxhZ3MsIGludCBjb21wcmVz
cywgaW50IGxldmVsKQ0KIHsNCiAgICAgc3RydWN0IHJ4X2Nvbm5lY3Rpb24gKnRvY29ubiwgKmZy
b21jb25uOw0KICAgICBhZnNfaW50MzIgZnJvbXRpZCwgdG90aWQsIGNsb25ldGlkOw0KQEAgLTIy
NTUsOSArMjI2MSwxNCBAQA0KIAkvKiBDb3B5IHRoZSBjbG9uZSB0byB0aGUgbmV3IHZvbHVtZSAq
Lw0KIAlWUFJJTlQyKCJEdW1waW5nIGZyb20gY2xvbmUgJXUgb24gc291cmNlIHRvIHZvbHVtZSAl
dSBvbiBkZXN0aW5hdGlvbiAuLi4iLA0KIAkgICAgY2xvbmVWb2wsIG5ld1ZvbCk7DQotCWNvZGUg
PQ0KLQkgICAgQUZTVm9sRm9yd2FyZChmcm9tY29ubiwgY2xvbmV0aWQsIGNsb25lRnJvbURhdGUs
ICZkZXN0aW5hdGlvbiwNCi0JCQkgIHRvdGlkLCAmY29va2llKTsNCisJaWYgKGNvbXByZXNzKQ0K
KwkJY29kZSA9DQorCQlBRlNWb2xGb3J3YXJkWihmcm9tY29ubiwgY2xvbmV0aWQsIGNsb25lRnJv
bURhdGUsICZkZXN0aW5hdGlvbiwNCisJCQkJdG90aWQsICZjb29raWUsIGNvbXByZXNzLCBsZXZl
bCk7DQorCWVsc2UNCisJCWNvZGUgPQ0KKwkJQUZTVm9sRm9yd2FyZChmcm9tY29ubiwgY2xvbmV0
aWQsIGNsb25lRnJvbURhdGUsICZkZXN0aW5hdGlvbiwNCisJCQkJdG90aWQsICZjb29raWUpOw0K
IAlFR09UTzEobWZhaWwsIGNvZGUsICJGYWlsZWQgdG8gbW92ZSBkYXRhIGZvciB0aGUgdm9sdW1l
ICV1XG4iLA0KIAkgICAgICAgbmV3Vm9sKTsNCiAJVkRPTkU7DQpAQCAtMjI4OSw5ICsyMzAwLDE0
IEBADQogCSgiRG9pbmcgdGhlJXMgZHVtcCBmcm9tIHNvdXJjZSB0byBkZXN0aW5hdGlvbiBmb3Ig
dm9sdW1lICV1IC4uLiAiLA0KIAkgKGZsYWdzICYgUlZfTk9DTE9ORSkgPyAiIiA6ICIgaW5jcmVt
ZW50YWwiLA0KIAkgYWZyb212b2wpOw0KLSAgICBjb2RlID0NCi0JQUZTVm9sRm9yd2FyZChmcm9t
Y29ubiwgZnJvbXRpZCwgZnJvbURhdGUsICZkZXN0aW5hdGlvbiwgdG90aWQsDQotCQkgICAgICAm
Y29va2llKTsNCisgICAgaWYgKGNvbXByZXNzKQ0KKwljb2RlID0NCisJCUFGU1ZvbEZvcndhcmRa
KGZyb21jb25uLCBmcm9tdGlkLCBmcm9tRGF0ZSwgJmRlc3RpbmF0aW9uLCB0b3RpZCwNCisJCQkm
Y29va2llLCBjb21wcmVzcywgbGV2ZWwpOw0KKyAgICBlbHNlDQorCWNvZGUgPQ0KKwkJQUZTVm9s
Rm9yd2FyZChmcm9tY29ubiwgZnJvbXRpZCwgZnJvbURhdGUsICZkZXN0aW5hdGlvbiwgdG90aWQs
DQorCQkJJmNvb2tpZSk7DQogICAgIEVHT1RPMShtZmFpbCwgY29kZSwNCiAJICAgIkZhaWxlZCB0
byBkbyB0aGUlcyBkdW1wIGZyb20gb2xkIHNpdGUgdG8gbmV3IHNpdGVcbiIsDQogCSAgIGFmcm9t
dm9sKTsNCkBAIC0yNTE1LDEwICsyNTMxLDExIEBADQogDQogaW50DQogVVZfQ29weVZvbHVtZShh
ZnNfaW50MzIgYWZyb212b2wsIGFmc19pbnQzMiBhZnJvbXNlcnZlciwgYWZzX2ludDMyIGFmcm9t
cGFydCwNCi0JICAgICAgY2hhciAqYXRvdm9sbmFtZSwgYWZzX2ludDMyIGF0b3NlcnZlciwgYWZz
X2ludDMyIGF0b3BhcnQpDQorCSAgICAgIGNoYXIgKmF0b3ZvbG5hbWUsIGFmc19pbnQzMiBhdG9z
ZXJ2ZXIsIGFmc19pbnQzMiBhdG9wYXJ0LCBpbnQgY29tcHJlc3MsIGludCBsZXZlbCkNCiB7DQog
ICAgIHJldHVybiBVVl9Db3B5Vm9sdW1lMihhZnJvbXZvbCwgYWZyb21zZXJ2ZXIsIGFmcm9tcGFy
dCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGF0b3ZvbG5hbWUsIGF0b3NlcnZlciwgYXRv
cGFydCwgMCwgMCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICBhdG92b2xuYW1lLCBhdG9z
ZXJ2ZXIsIGF0b3BhcnQsIDAsIDAsDQorCQkJICBjb21wcmVzcywgbGV2ZWwpOw0KIH0NCiANCiAN
CkBAIC0zMTA3LDE1ICszMTI0LDI0IEBADQogc3RhdGljIGludA0KIFNpbXVsYXRlRm9yd2FyZE11
bHRpcGxlKHN0cnVjdCByeF9jb25uZWN0aW9uICpmcm9tY29ubiwgYWZzX2ludDMyIGZyb210aWQs
DQogCQkJYWZzX2ludDMyIGZyb21kYXRlLCBtYW55RGVzdHMgKiB0ciwgYWZzX2ludDMyIGZsYWdz
LA0KLQkJCXZvaWQgKmNvb2tpZSwgbWFueVJlc3VsdHMgKiByZXN1bHRzKQ0KKwkJCXZvaWQgKmNv
b2tpZSwgbWFueVJlc3VsdHMgKiByZXN1bHRzLA0KKwkJCWludCBjb21wcmVzcywgaW50IGxldmVs
KQ0KIHsNCiAgICAgaW50IGk7DQogDQogICAgIGZvciAoaSA9IDA7IGkgPCB0ci0+bWFueURlc3Rz
X2xlbjsgaSsrKSB7DQotCXJlc3VsdHMtPm1hbnlSZXN1bHRzX3ZhbFtpXSA9DQotCSAgICBBRlNW
b2xGb3J3YXJkKGZyb21jb25uLCBmcm9tdGlkLCBmcm9tZGF0ZSwNCi0JCQkgICYodHItPm1hbnlE
ZXN0c192YWxbaV0uc2VydmVyKSwNCi0JCQkgIHRyLT5tYW55RGVzdHNfdmFsW2ldLnRyYW5zLCBj
b29raWUpOw0KKwlpZiAoY29tcHJlc3MpDQorCXsNCisJCXJlc3VsdHMtPm1hbnlSZXN1bHRzX3Zh
bFtpXSA9DQorCQlBRlNWb2xGb3J3YXJkWihmcm9tY29ubiwgZnJvbXRpZCwgZnJvbWRhdGUsDQor
CQkJCSYodHItPm1hbnlEZXN0c192YWxbaV0uc2VydmVyKSwNCisJCQkJdHItPm1hbnlEZXN0c192
YWxbaV0udHJhbnMsIGNvb2tpZSwgY29tcHJlc3MsIGxldmVsKTsNCisJfSBlbHNlIHsNCisJCXJl
c3VsdHMtPm1hbnlSZXN1bHRzX3ZhbFtpXSA9DQorCQlBRlNWb2xGb3J3YXJkKGZyb21jb25uLCBm
cm9tdGlkLCBmcm9tZGF0ZSwNCisJCQkJJih0ci0+bWFueURlc3RzX3ZhbFtpXS5zZXJ2ZXIpLA0K
KwkJCQl0ci0+bWFueURlc3RzX3ZhbFtpXS50cmFucywgY29va2llKTsNCisJfQ0KICAgICB9DQog
ICAgIHJldHVybiAwOw0KIH0NCkBAIC0zMTQzLDcgKzMxNjksOCBAQA0KIA0KIGludA0KIFVWX1Jl
bGVhc2VWb2x1bWUoYWZzX2ludDMyIGFmcm9tdm9sLCBhZnNfaW50MzIgYWZyb21zZXJ2ZXIsDQot
CQkgYWZzX2ludDMyIGFmcm9tcGFydCwgaW50IGZvcmNlZmxhZykNCisJCSBhZnNfaW50MzIgYWZy
b21wYXJ0LCBpbnQgZm9yY2VmbGFnLA0KKwkJIGludCBjb21wcmVzcywgaW50IGxldmVsKQ0KIHsN
CiAgICAgY2hhciB2bmFtZVs2NF07DQogICAgIGFmc19pbnQzMiBjb2RlLCB2Y29kZSwgcmNvZGUs
IHRjb2RlOw0KQEAgLTM1OTMsMTMgKzM2MjAsMjIgQEANCiAJLyogUmVsZWFzZSB0aGUgb25lcyB3
ZSBoYXZlIGNvbGxlY3RlZCAqLw0KIAl0ci5tYW55RGVzdHNfdmFsID0gJihyZXBsaWNhc1swXSk7
DQogCXRyLm1hbnlEZXN0c19sZW4gPSByZXN1bHRzLm1hbnlSZXN1bHRzX2xlbiA9IHZvbGNvdW50
Ow0KLQljb2RlID0NCi0JICAgIEFGU1ZvbEZvcndhcmRNdWx0aXBsZShmcm9tY29ubiwgZnJvbXRp
ZCwgZnJvbWRhdGUsICZ0ciwNCi0JCQkJICAwIC8qc3BhcmUgKi8gLCAmY29va2llLCAmcmVzdWx0
cyk7DQorCWlmIChjb21wcmVzcykNCisJew0KKwkJY29kZSA9DQorCQlBRlNWb2xGb3J3YXJkTXVs
dGlwbGVaKGZyb21jb25uLCBmcm9tdGlkLCBmcm9tZGF0ZSwgJnRyLA0KKwkJCQkJMCAvKnNwYXJl
ICovICwgJmNvb2tpZSwgJnJlc3VsdHMsDQorCQkJCQljb21wcmVzcywgbGV2ZWwpOw0KKwl9IGVs
c2Ugew0KKwkJY29kZSA9DQorCQlBRlNWb2xGb3J3YXJkTXVsdGlwbGUoZnJvbWNvbm4sIGZyb210
aWQsIGZyb21kYXRlLCAmdHIsDQorCQkJCQkwIC8qc3BhcmUgKi8gLCAmY29va2llLCAmcmVzdWx0
cyk7DQorCX0NCiAJaWYgKGNvZGUgPT0gUlhHRU5fT1BDT0RFKSB7CS8qIFJQQyBJbnRlcmZhY2Ug
TWlzbWF0Y2ggKi8NCiAJICAgIGNvZGUgPQ0KIAkJU2ltdWxhdGVGb3J3YXJkTXVsdGlwbGUoZnJv
bWNvbm4sIGZyb210aWQsIGZyb21kYXRlLCAmdHIsDQotCQkJCQkwIC8qc3BhcmUgKi8gLCAmY29v
a2llLCAmcmVzdWx0cyk7DQorCQkJCQkwIC8qc3BhcmUgKi8gLCAmY29va2llLCAmcmVzdWx0cywN
CisJCQkJCWNvbXByZXNzLCBsZXZlbCk7DQogCSAgICBuc2VydmVycyA9IDE7DQogCX0NCiANCkBA
IC0zODMwLDcgKzM4NjYsOCBAQA0KICAqLw0KIGludA0KIFVWX0R1bXBWb2x1bWUoYWZzX2ludDMy
IGFmcm9tdm9sLCBhZnNfaW50MzIgYWZyb21zZXJ2ZXIsIGFmc19pbnQzMiBhZnJvbXBhcnQsDQot
CSAgICAgIGFmc19pbnQzMiBmcm9tZGF0ZSwgYWZzX2ludDMyKCpEdW1wRnVuY3Rpb24pICgpLCBj
aGFyICpyb2NrKQ0KKwkgICAgICBhZnNfaW50MzIgZnJvbWRhdGUsIGFmc19pbnQzMigqRHVtcEZ1
bmN0aW9uKSAoKSwgY2hhciAqcm9jaywNCisJICAgICAgaW50IGNvbXByZXNzLCBpbnQgbGV2ZWwp
DQogew0KICAgICBzdHJ1Y3QgcnhfY29ubmVjdGlvbiAqZnJvbWNvbm4gPSAoc3RydWN0IHJ4X2Nv
bm5lY3Rpb24gKikwOw0KICAgICBzdHJ1Y3QgcnhfY2FsbCAqZnJvbWNhbGwgPSAoc3RydWN0IHJ4
X2NhbGwgKikwOw0KQEAgLTM4NjQsMTIgKzM5MDEsMTcgQEANCiAgICAgZnJvbWNhbGwgPSByeF9O
ZXdDYWxsKGZyb21jb25uKTsNCiANCiAgICAgVlBSSU5UMSgiU3RhcnRpbmcgdm9sdW1lIGR1bXAg
b24gdm9sdW1lICV1Li4uIiwgYWZyb212b2wpOw0KLSAgICBjb2RlID0gU3RhcnRBRlNWb2xEdW1w
KGZyb21jYWxsLCBmcm9tdGlkLCBmcm9tZGF0ZSk7DQorICAgIGlmIChjb21wcmVzcykNCisgICAg
ew0KKwljb2RlID0gU3RhcnRBRlNWb2xEdW1wWihmcm9tY2FsbCwgZnJvbXRpZCwgZnJvbWRhdGUs
IGNvbXByZXNzLCBsZXZlbCk7DQorICAgIH0gZWxzZSB7DQorCWNvZGUgPSBTdGFydEFGU1ZvbER1
bXAoZnJvbWNhbGwsIGZyb210aWQsIGZyb21kYXRlKTsNCisgICAgfQ0KICAgICBFR09UTyhlcnJv
cl9leGl0LCBjb2RlLCAiQ291bGQgbm90IHN0YXJ0IHRoZSBkdW1wIHByb2Nlc3MgXG4iKTsNCiAg
ICAgVkRPTkU7DQogDQogICAgIFZQUklOVDEoIkR1bXBpbmcgdm9sdW1lICV1Li4uIiwgYWZyb212
b2wpOw0KLSAgICBjb2RlID0gRHVtcEZ1bmN0aW9uKGZyb21jYWxsLCByb2NrKTsNCisgICAgY29k
ZSA9IER1bXBGdW5jdGlvbihmcm9tY2FsbCwgcm9jaywgY29tcHJlc3MsIGxldmVsKTsNCiAgICAg
RUdPVE8oZXJyb3JfZXhpdCwgY29kZSwgIkVycm9yIHdoaWxlIGR1bXBpbmcgdm9sdW1lIFxuIik7
DQogICAgIFZET05FOw0KIA0KQEAgLTM4NzcsNyArMzkxOSw3IEBADQogICAgIGlmIChmcm9tY2Fs
bCkgew0KIAljb2RlID0gcnhfRW5kQ2FsbChmcm9tY2FsbCwgcnhFcnJvcik7DQogCWlmIChjb2Rl
KSB7DQotCSAgICBmcHJpbnRmKFNUREVSUiwgIkVycm9yIGluIHJ4X0VuZENhbGxcbiIpOw0KKwkg
ICAgZnByaW50ZihTVERFUlIsICJFcnJvciBpbiByeF9FbmRDYWxsIChjb2RlOiAlZClcbiIsIGNv
ZGUpOw0KIAkgICAgaWYgKCFlcnJvcikNCiAJCWVycm9yID0gY29kZTsNCiAJfQ0KQEAgLTM5MDks
NyArMzk1MSw4IEBADQogaW50DQogVVZfRHVtcENsb25lZFZvbHVtZShhZnNfaW50MzIgYWZyb212
b2wsIGFmc19pbnQzMiBhZnJvbXNlcnZlciwNCiAJCSAgICBhZnNfaW50MzIgYWZyb21wYXJ0LCBh
ZnNfaW50MzIgZnJvbWRhdGUsDQotCQkgICAgYWZzX2ludDMyKCpEdW1wRnVuY3Rpb24pICgpLCBj
aGFyICpyb2NrKQ0KKwkJICAgIGFmc19pbnQzMigqRHVtcEZ1bmN0aW9uKSAoKSwgY2hhciAqcm9j
aywNCisJCSAgICBpbnQgY29tcHJlc3MsIGludCBsZXZlbCkNCiB7DQogICAgIHN0cnVjdCByeF9j
b25uZWN0aW9uICpmcm9tY29ubiA9IChzdHJ1Y3QgcnhfY29ubmVjdGlvbiAqKTA7DQogICAgIHN0
cnVjdCByeF9jYWxsICpmcm9tY2FsbCA9IChzdHJ1Y3QgcnhfY2FsbCAqKTA7DQpAQCAtMzk5MSwx
MiArNDAzNCwxNSBAQA0KICAgICBmcm9tY2FsbCA9IHJ4X05ld0NhbGwoZnJvbWNvbm4pOw0KIA0K
ICAgICBWUFJJTlQxKCJTdGFydGluZyB2b2x1bWUgZHVtcCBmcm9tIGNsb25lZCB2b2x1bWUgJXUu
Li4iLCBjbG9uZXZvbCk7DQotICAgIGNvZGUgPSBTdGFydEFGU1ZvbER1bXAoZnJvbWNhbGwsIGNs
b25ldGlkLCBmcm9tZGF0ZSk7DQorICAgIGlmIChjb21wcmVzcykNCisJY29kZSA9IFN0YXJ0QUZT
Vm9sRHVtcFooZnJvbWNhbGwsIGNsb25ldGlkLCBmcm9tZGF0ZSwgY29tcHJlc3MsIGxldmVsKTsN
CisgICAgZWxzZQ0KKwljb2RlID0gU3RhcnRBRlNWb2xEdW1wKGZyb21jYWxsLCBjbG9uZXRpZCwg
ZnJvbWRhdGUpOw0KICAgICBFR09UTyhlcnJvcl9leGl0LCBjb2RlLCAiQ291bGQgbm90IHN0YXJ0
IHRoZSBkdW1wIHByb2Nlc3MgXG4iKTsNCiAgICAgVkRPTkU7DQogDQogICAgIFZQUklOVDEoIkR1
bXBpbmcgdm9sdW1lICV1Li4uIiwgYWZyb212b2wpOw0KLSAgICBjb2RlID0gRHVtcEZ1bmN0aW9u
KGZyb21jYWxsLCByb2NrKTsNCisgICAgY29kZSA9IER1bXBGdW5jdGlvbihmcm9tY2FsbCwgcm9j
aywgY29tcHJlc3MsIGxldmVsKTsNCiAgICAgRUdPVE8oZXJyb3JfZXhpdCwgY29kZSwgIkVycm9y
IHdoaWxlIGR1bXBpbmcgdm9sdW1lIFxuIik7DQogICAgIFZET05FOw0KIA0KQEAgLTQwNDgsNyAr
NDA5NCw3IEBADQogaW50DQogVVZfUmVzdG9yZVZvbHVtZShhZnNfaW50MzIgdG9zZXJ2ZXIsIGFm
c19pbnQzMiB0b3BhcnQsIGFmc19pbnQzMiB0b3ZvbGlkLA0KIAkJIGNoYXIgdG92b2xuYW1lW10s
IGludCBmbGFncywgYWZzX2ludDMyKCpXcml0ZURhdGEpICgpLA0KLQkJIGNoYXIgKnJvY2spDQor
CQkgY2hhciAqcm9jaywgaW50IGNvbXByZXNzLCBpbnQgbGV2ZWwpDQogew0KICAgICBzdHJ1Y3Qg
cnhfY29ubmVjdGlvbiAqdG9jb25uLCAqdGVtcGNvbm47DQogICAgIHN0cnVjdCByeF9jYWxsICp0
b2NhbGw7DQpAQCAtNDE5OCwxMyArNDI0NCwxNiBAQA0KICAgICBzdHJuY3B5KGNvb2tpZS5uYW1l
LCB0b3ZvbG5hbWUsIFZPTFNFUl9PTERNQVhWT0xOQU1FKTsNCiANCiAgICAgdG9jYWxsID0gcnhf
TmV3Q2FsbCh0b2Nvbm4pOw0KLSAgICB0ZXJyb3IgPSBTdGFydEFGU1ZvbFJlc3RvcmUodG9jYWxs
LCB0b3RpZCwgMSwgJmNvb2tpZSk7DQorICAgIGlmIChjb21wcmVzcykNCisJdGVycm9yID0gU3Rh
cnRBRlNWb2xSZXN0b3JlWih0b2NhbGwsIHRvdGlkLCAxLCAmY29va2llLCBjb21wcmVzcywgbGV2
ZWwpOw0KKyAgICBlbHNlDQorCXRlcnJvciA9IFN0YXJ0QUZTVm9sUmVzdG9yZSh0b2NhbGwsIHRv
dGlkLCAxLCAmY29va2llKTsNCiAgICAgaWYgKHRlcnJvcikgew0KIAlmcHJpbnRmKFNUREVSUiwg
IlZvbHVtZSByZXN0b3JlIEZhaWxlZCBcbiIpOw0KIAllcnJvciA9IHRlcnJvcjsNCiAJZ290byBy
ZWZhaWw7DQogICAgIH0NCi0gICAgY29kZSA9IFdyaXRlRGF0YSh0b2NhbGwsIHJvY2spOw0KKyAg
ICBjb2RlID0gV3JpdGVEYXRhKHRvY2FsbCwgcm9jaywgY29tcHJlc3MsIGxldmVsKTsNCiAgICAg
aWYgKGNvZGUpIHsNCiAJZnByaW50ZihTVERFUlIsICJDb3VsZCBub3QgdHJhbnNtaXQgZGF0YVxu
Iik7DQogCWVycm9yID0gY29kZTsNCmRpZmYgLU5hdXIgb3BlbmFmcy0xLjMuNzcvc3JjL3ZvbHNl
ci96aW9yeC5jIG9wZW5hZnMtMS4zLjc3ei9zcmMvdm9sc2VyL3ppb3J4LmMNCi0tLSBvcGVuYWZz
LTEuMy43Ny9zcmMvdm9sc2VyL3ppb3J4LmMJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAg
KzAxMDANCisrKyBvcGVuYWZzLTEuMy43N3ovc3JjL3ZvbHNlci96aW9yeC5jCTIwMDQtMTItMjAg
MTU6NTc6MjIuMDAwMDAwMDAwICswMTAwDQpAQCAtMCwwICsxLDM1NSBAQA0KKyNpbmNsdWRlICJ6
aW9yeC5oIg0KKyNpbmNsdWRlIDxyeC94ZHIuaD4NCisjaW5jbHVkZSA8cngvcnguaD4NCisjaW5j
bHVkZSA8c3RkaW8uaD4NCisNCisNCitzdGF0aWMgdm9pZCBoYW5kbGVFcnJvcihzdHJ1Y3Qgemlv
cnhfY2FsbCAqemNhbGwsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIGNvbnN0IGNoYXIgKnJlYXNvbikN
Cit7DQorCWludCBubGVuOw0KKwljaGFyICpwIDsNCisNCisJaWYgKHpjYWxsIT1OVUxMKQ0KKwl7
DQorCQlzdHJuY3B5KHpjYWxsLT5sYXN0RXJyb3JNc2csIG1lc3NhZ2UsIFpJT1JYX0NBTExfRVJS
T1JfQlVGU0laRSk7DQorCQl6Y2FsbC0+bGFzdEVycm9yTXNnW1pJT1JYX0NBTExfRVJST1JfQlVG
U0laRS0xXSA9ICdcMCc7DQorDQorCQkvL2FwcGVuZCBzYWZlbHkgIjogIg0KKwkJbmxlbiA9IHN0
cmxlbih6Y2FsbC0+bGFzdEVycm9yTXNnKTsJLy9sZW5ndGggc28gZmFyDQorCQlwID0gemNhbGwt
Pmxhc3RFcnJvck1zZyArIG5sZW47DQorCQlzdHJuY3B5KHAsICI6ICIsIFpJT1JYX0NBTExfRVJS
T1JfQlVGU0laRSAtIG5sZW4pOw0KKwkJemNhbGwtPmxhc3RFcnJvck1zZ1taSU9SWF9DQUxMX0VS
Uk9SX0JVRlNJWkUtMV0gPSAnXDAnOw0KKw0KKwkJaWYgKHJlYXNvbiE9TlVMTCkNCisJCXsNCisJ
CQlpZiAobmxlbjxaSU9SWF9DQUxMX0VSUk9SX0JVRlNJWkUpDQorCQkJew0KKwkJCQlubGVuID0g
c3RybGVuKHpjYWxsLT5sYXN0RXJyb3JNc2cpOwkvL2xlbmd0aCBzbyBmYXINCisJCQkJcCA9IHpj
YWxsLT5sYXN0RXJyb3JNc2cgKyBubGVuOwkvL3doZXJlIHRvIGFwcGVuZCByZWFzb24NCisJCQkJ
c3RybmNweShwLCByZWFzb24sIFpJT1JYX0NBTExfRVJST1JfQlVGU0laRSAtIG5sZW4pOw0KKwkJ
CQl6Y2FsbC0+bGFzdEVycm9yTXNnW1pJT1JYX0NBTExfRVJST1JfQlVGU0laRS0xXSA9ICdcMCc7
DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8vZm9yIGFsbCB0aGUgY2FzZXM6DQorCWZwcmludGYo
c3RkZXJyLCAiJXM6ICVzXG4iLCBtZXNzYWdlLCByZWFzb24pOw0KK30NCisNCitzdGF0aWMgaW50
IHppb3J4QmVnaW4oc3RydWN0IHJ4X2NhbGwgKmNhbGwsIGludCB1c2VfY29tcHJlc3Npb24sIGlu
dCBsZXZlbCwgc3RydWN0IHppb3J4X2NhbGwgKnpjYWxsLCBpbnQgdG9Xcml0ZSkNCit7DQorCWlu
dCBlcnI7DQorDQorCWlmIChjYWxsPT1OVUxMIHx8IHpjYWxsPT1OVUxMKQ0KKwl7DQorCQloYW5k
bGVFcnJvcih6Y2FsbCwgInppb3J4QmVnaW4iLCAiTlVMTCBwYXJhbXMiKTsNCisJCXJldHVybiBa
SU9SWF9GQUlMOw0KKwl9DQorDQorCW1lbXNldCh6Y2FsbCwgMCwgc2l6ZW9mKHN0cnVjdCB6aW9y
eF9jYWxsKSk7DQorDQorCXpjYWxsLT51c2VfY29tcHJlc3Npb24gPSB1c2VfY29tcHJlc3Npb247
IC8vMD1kb24ndCBjb21wcmVzcywgMT1jb21wcmVzcw0KKwl6Y2FsbC0+Y2FsbCA9IGNhbGw7DQor
CWlmICh1c2VfY29tcHJlc3Npb24pDQorCXsNCisJCWlmICh0b1dyaXRlKQ0KKwkJCXpjYWxsLT5i
dWYgPSAoY2hhciAqKW1hbGxvYyhaSU9SWF9PVVRfQlVGU0laRSk7DQorCQllbHNlDQorCQkJemNh
bGwtPmJ1ZiA9IChjaGFyICopbWFsbG9jKFpJT1JYX0lOX0JVRlNJWkUpOw0KKwkJaWYgKHpjYWxs
LT5idWY9PU5VTEwpDQorCQl7DQorCQkJaGFuZGxlRXJyb3IoemNhbGwsICJ6aW9yeEJlZ2luIiwg
Im1lbW9yeSBhbGxvY2F0aW9uIGVycm9uIik7DQorCQkJZ290byBmYWlsOw0KKwkJfQ0KKw0KKwkJ
emNhbGwtPmxldmVsID0gbGV2ZWw7CS8vY29tcHJlc3Npb24gbGV2ZWwNCisNCisJCXpjYWxsLT56
c3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7DQorCQl6Y2FsbC0+enN0cmVhbS56ZnJlZSA9
IChmcmVlX2Z1bmMpMDsNCisJCXpjYWxsLT56c3RyZWFtLm9wYXF1ZSA9ICh2b2lkcGYpMDsNCisN
CisJCWlmICh0b1dyaXRlKQ0KKwkJew0KKwkJCWVyciA9IGRlZmxhdGVJbml0KCYoemNhbGwtPnpz
dHJlYW0pLCBsZXZlbCk7DQorCQkJaWYgKGVyciE9Wl9PSykNCisJCQl7DQorCQkJCWhhbmRsZUVy
cm9yKHpjYWxsLCAiZGVmbGF0ZUluaXQgZXJyb3IiLCB6RXJyb3IoZXJyKSk7DQorCQkJCWdvdG8g
ZmFpbDsNCisJCQl9DQorCQkJemNhbGwtPnpzdHJlYW0ubmV4dF9vdXQgPSAoQnl0ZWYgKil6Y2Fs
bC0+YnVmOw0KKwkJCXpjYWxsLT56c3RyZWFtLmF2YWlsX291dCA9IFpJT1JYX09VVF9CVUZTSVpF
Ow0KKwkJfSBlbHNlIHsNCisJCQllcnIgPSBpbmZsYXRlSW5pdCgmKHpjYWxsLT56c3RyZWFtKSk7
DQorCQkJaWYgKGVyciE9Wl9PSykNCisJCQl7DQorCQkJCWhhbmRsZUVycm9yKHpjYWxsLCAiaW5m
bGF0ZUluaXQgZXJyb3IiLCB6RXJyb3IoZXJyKSk7DQorCQkJCWdvdG8gZmFpbDsNCisJCQl9DQor
CQkJemNhbGwtPnpzdHJlYW0ubmV4dF9pbiA9IChCeXRlZiAqKXpjYWxsLT5idWY7DQorCQkJemNh
bGwtPnpzdHJlYW0uYXZhaWxfaW4gPSAwOw0KKw0KKwkJCXpjYWxsLT5nb3RfcmVhZF9yeF9lbmQg
PSAoMD09MSk7DQorCQkJemNhbGwtPmdvdF9yZWFkX3pzdHJlYW1fZW5kID0gKDA9PTEpOw0KKwkJ
fQ0KKwl9DQorDQorCXJldHVybiBaSU9SWF9PSzsNCisNCitmYWlsOg0KKwlpZiAoemNhbGwtPmJ1
ZiE9TlVMTCkNCisJew0KKwkJZnJlZSh6Y2FsbC0+YnVmKTsNCisJCXpjYWxsLT5idWYgPSBOVUxM
Ow0KKwl9DQorDQorCXJldHVybiBaSU9SWF9GQUlMOw0KK30NCisNCitpbnQgemlvcnhCZWdpbldy
aXRlKHN0cnVjdCByeF9jYWxsICpjYWxsLCBpbnQgdXNlX2NvbXByZXNzaW9uLCBpbnQgbGV2ZWws
IHN0cnVjdCB6aW9yeF9jYWxsICp6Y2FsbCkNCit7DQorCXJldHVybiB6aW9yeEJlZ2luKGNhbGws
IHVzZV9jb21wcmVzc2lvbiwgbGV2ZWwsIHpjYWxsLCAoMT09MSkpOw0KK30NCisNCitpbnQgemlv
cnhXcml0ZShzdHJ1Y3QgemlvcnhfY2FsbCAqemNhbGwsIGNoYXIgKmJ1ZiwgaW50IG5ieXRlcykN
Cit7DQorCWludCByZXM7DQorDQorCWlmICh6Y2FsbD09TlVMTCkNCisJew0KKwkJaGFuZGxlRXJy
b3IoemNhbGwsICJ6aW9yeFdyaXRlIiwgIk5VTEwgZXJyb3IiKTsNCisJCXJldHVybiBaSU9SWF9G
QUlMOw0KKwl9DQorDQorCSNpZmRlZiBaSU9SWF9ERUJVRw0KKwkJZnByaW50ZihzdGRlcnIsICJ0
byB3cml0ZTogJWRcbiIsIG5ieXRlcyk7DQorCSNlbmRpZg0KKwlpZiAoemNhbGwtPnVzZV9jb21w
cmVzc2lvbikNCisJew0KKwkJemNhbGwtPnpzdHJlYW0ubmV4dF9pbiA9IGJ1ZjsNCisJCXpjYWxs
LT56c3RyZWFtLmF2YWlsX2luID0gbmJ5dGVzOw0KKwkJd2hpbGUoemNhbGwtPnpzdHJlYW0uYXZh
aWxfaW4hPTApDQorCQl7DQorCQkJaWYgKHpjYWxsLT56c3RyZWFtLmF2YWlsX291dD09MCkNCisJ
CQl7DQorCQkJCSNpZmRlZiBaSU9SWF9ERUJVRw0KKwkJCQkJZnByaW50ZihzdGRlcnIsICJyeF9X
cml0ZSglZClcbiIsIFpJT1JYX09VVF9CVUZTSVpFKTsNCisJCQkJI2VuZGlmDQorCQkJCXJlcyA9
IHJ4X1dyaXRlKHpjYWxsLT5jYWxsLCB6Y2FsbC0+YnVmLCBaSU9SWF9PVVRfQlVGU0laRSk7DQor
CQkJCWlmIChyZXMhPVpJT1JYX09VVF9CVUZTSVpFKQ0KKwkJCQl7DQorCQkJCQloYW5kbGVFcnJv
cih6Y2FsbCwgInppb3J4V3JpdGUiLCAicnhfV3JpdGUgZmFpbGVkIik7DQorCQkJCQlyZXR1cm4g
WklPUlhfRkFJTDsNCisJCQkJfQ0KKwkJCQkNCisJCQkJemNhbGwtPnpzdHJlYW0ubmV4dF9vdXQg
PSB6Y2FsbC0+YnVmOw0KKwkJCQl6Y2FsbC0+enN0cmVhbS5hdmFpbF9vdXQgPSBaSU9SWF9PVVRf
QlVGU0laRTsNCisJCQl9DQorCQkJI2lmZGVmIFpJT1JYX0RFQlVHDQorCQkJCWZwcmludGYoc3Rk
ZXJyLCAiYXZhaWxfaW46JWQsIGF2YWlsX291dDolZFxuIiwNCisJCQkJCXpjYWxsLT56c3RyZWFt
LmF2YWlsX2luLCB6Y2FsbC0+enN0cmVhbS5hdmFpbF9vdXQpOw0KKwkJCSNlbmRpZg0KKwkJCXJl
cyA9IGRlZmxhdGUoJih6Y2FsbC0+enN0cmVhbSksIFpfTk9fRkxVU0gpOw0KKwkJCWlmIChyZXMh
PVpfT0spDQorCQkJew0KKwkJCQloYW5kbGVFcnJvcih6Y2FsbCwgImRlZmxhdGUgZXJyb3IiLCB6
RXJyb3IocmVzKSk7DQorCQkJCXJldHVybiBaSU9SWF9GQUlMOw0KKwkJCX0NCisJCX0NCisJCXJl
cyA9IG5ieXRlczsNCisJfSBlbHNlIHsNCisJCXJlcyA9IHJ4X1dyaXRlKHpjYWxsLT5jYWxsLCBi
dWYsIG5ieXRlcyk7DQorCX0NCisJcmV0dXJuIHJlczsNCit9DQorDQoraW50IHppb3J4RW5kV3Jp
dGUoc3RydWN0IHppb3J4X2NhbGwgKnpjYWxsKQ0KK3sNCisJaW50IHJlczsNCisJaW50IHJlbWFp
bmluZzsNCisNCisJaWYgKHpjYWxsPT1OVUxMKQ0KKwl7DQorCQloYW5kbGVFcnJvcih6Y2FsbCwg
Inppb3J4RW5kV3JpdGUiLCAiTlVMTCBlcnJvciIpOw0KKwkJcmV0dXJuIFpJT1JYX0ZBSUw7DQor
CX0NCisNCisJaWYgKCF6Y2FsbC0+dXNlX2NvbXByZXNzaW9uKQ0KKwkJcmV0dXJuIFpJT1JYX09L
Ow0KKw0KKwkjaWZkZWYgWklPUlhfREVCVUcNCisJCWZwcmludGYoc3RkZXJyLCAiZW5kIHdyaXRl
OlxuIik7DQorCSNlbmRpZg0KKwlyZXMgPSBaX09LOw0KKwl3aGlsZShyZXMhPVpfU1RSRUFNX0VO
RCkNCisJew0KKwkJaWYgKHpjYWxsLT56c3RyZWFtLmF2YWlsX291dD09MCkNCisJCXsNCisJCQkj
aWZkZWYgWklPUlhfREVCVUcNCisJCQkJZnByaW50ZihzdGRlcnIsICJyeF9Xcml0ZSglZClcbiIs
IFpJT1JYX09VVF9CVUZTSVpFKTsNCisJCQkjZW5kaWYNCisJCQlyZXMgPSByeF9Xcml0ZSh6Y2Fs
bC0+Y2FsbCwgemNhbGwtPmJ1ZiwgWklPUlhfT1VUX0JVRlNJWkUpOw0KKwkJCWlmIChyZXMhPVpJ
T1JYX09VVF9CVUZTSVpFKQ0KKwkJCXsNCisJCQkJaGFuZGxlRXJyb3IoemNhbGwsICJ6aW9yeEVu
ZFdyaXRlL3ppb3J4V3JpdGUiLCAicnhfV3JpdGUgZmFpbGVkIik7DQorCQkJCWRlZmxhdGVFbmQo
Jih6Y2FsbC0+enN0cmVhbSkpOw0KKwkJCQlmcmVlKHpjYWxsLT5idWYpOw0KKwkJCQlyZXR1cm4g
WklPUlhfRkFJTDsNCisJCQl9DQorCQkJemNhbGwtPnpzdHJlYW0ubmV4dF9vdXQgPSB6Y2FsbC0+
YnVmOw0KKwkJCXpjYWxsLT56c3RyZWFtLmF2YWlsX291dCA9IFpJT1JYX09VVF9CVUZTSVpFOw0K
KwkJfQ0KKwkJI2lmZGVmIFpJT1JYX0RFQlVHDQorCQkJZnByaW50ZihzdGRlcnIsICJhdmFpbF9p
bjolZCwgYXZhaWxfb3V0OiVkXG4iLA0KKwkJCQl6Y2FsbC0+enN0cmVhbS5hdmFpbF9pbiwgemNh
bGwtPnpzdHJlYW0uYXZhaWxfb3V0KTsNCisJCSNlbmRpZg0KKwkJcmVzID0gZGVmbGF0ZSgmKHpj
YWxsLT56c3RyZWFtKSwgWl9GSU5JU0gpOw0KKwkJaWYgKHJlcyE9Wl9TVFJFQU1fRU5EICYmIHJl
cyE9Wl9PSykNCisJCXsNCisJCQloYW5kbGVFcnJvcih6Y2FsbCwgInppb3J4RW5kV3JpdGUvZGVm
bGF0ZSBlcnJvciIsIHpFcnJvcihyZXMpKTsNCisJCQlkZWZsYXRlRW5kKCYoemNhbGwtPnpzdHJl
YW0pKTsNCisJCQlmcmVlKHpjYWxsLT5idWYpOw0KKwkJCXJldHVybiBaSU9SWF9GQUlMOw0KKwkJ
fQ0KKwl9DQorDQorCS8vc2VuZCB0aGUgcmVtYWluaW5nIGJ1ZmZlciBpZiBpdCdzIG5vdCBlbXB0
eQ0KKwlpZiAoemNhbGwtPnpzdHJlYW0uYXZhaWxfb3V0PFpJT1JYX09VVF9CVUZTSVpFKQ0KKwl7
DQorCQlyZW1haW5pbmcgPSBaSU9SWF9PVVRfQlVGU0laRSAtIHpjYWxsLT56c3RyZWFtLmF2YWls
X291dDsNCisJCSNpZmRlZiBaSU9SWF9ERUJVRw0KKwkJCWZwcmludGYoc3RkZXJyLCAicnhfV3Jp
dGUoJWQpXG4iLCByZW1haW5pbmcpOw0KKwkJI2VuZGlmDQorCQlyZXMgPSByeF9Xcml0ZSh6Y2Fs
bC0+Y2FsbCwgemNhbGwtPmJ1ZiwgcmVtYWluaW5nKTsNCisJCWlmIChyZXMhPXJlbWFpbmluZykN
CisJCXsNCisJCQloYW5kbGVFcnJvcih6Y2FsbCwgInppb3J4RW5kV3JpdGUvemlvcnhXcml0ZSIs
ICJyeF9Xcml0ZVsyXSBmYWlsZWQiKTsNCisJCQlkZWZsYXRlRW5kKCYoemNhbGwtPnpzdHJlYW0p
KTsNCisJCQlmcmVlKHpjYWxsLT5idWYpOw0KKwkJCXJldHVybiBaSU9SWF9GQUlMOw0KKwkJfQ0K
Kwl9DQorDQorCWZyZWUoemNhbGwtPmJ1Zik7DQorCXJlcyA9IGRlZmxhdGVFbmQoJih6Y2FsbC0+
enN0cmVhbSkpOw0KKwlpZiAocmVzIT1aX09LKQ0KKwl7DQorCQloYW5kbGVFcnJvcih6Y2FsbCwg
ImRlZmxhdGVFbmQgZXJyb3IiLCB6RXJyb3IocmVzKSk7DQorCQlyZXR1cm4gWklPUlhfRkFJTDsN
CisJfQ0KKw0KKwlyZXR1cm4gWklPUlhfT0s7DQorfQ0KKw0KK2ludCB6aW9yeEJlZ2luUmVhZChz
dHJ1Y3QgcnhfY2FsbCAqY2FsbCwgaW50IHVzZV9jb21wcmVzc2lvbiwgaW50IGxldmVsLCBzdHJ1
Y3QgemlvcnhfY2FsbCAqemNhbGwpDQorew0KKwlyZXR1cm4gemlvcnhCZWdpbihjYWxsLCB1c2Vf
Y29tcHJlc3Npb24sIGxldmVsLCB6Y2FsbCwgKDA9PTEpKTsNCit9DQorDQoraW50IHppb3J4UmVh
ZChzdHJ1Y3QgemlvcnhfY2FsbCAqemNhbGwsIGNoYXIgKmJ1ZiwgaW50IG5ieXRlcykNCit7DQor
CWludCByZXMsIG9sZF90b3RhbF9vdXQ7DQorDQorCWlmICh6Y2FsbD09TlVMTCkNCisJew0KKwkJ
aGFuZGxlRXJyb3IoemNhbGwsICJ6aW9yeFJlYWQiLCAiTlVMTCBlcnJvciIpOw0KKwkJcmV0dXJu
IFpJT1JYX0ZBSUw7DQorCX0NCisNCisJaWYgKHpjYWxsLT51c2VfY29tcHJlc3Npb24pDQorCXsN
CisJCXpjYWxsLT56c3RyZWFtLm5leHRfb3V0ID0gYnVmOw0KKwkJemNhbGwtPnpzdHJlYW0uYXZh
aWxfb3V0ID0gbmJ5dGVzOw0KKwkJb2xkX3RvdGFsX291dCA9IHpjYWxsLT56c3RyZWFtLnRvdGFs
X291dDsNCisJCXdoaWxlKHpjYWxsLT56c3RyZWFtLmF2YWlsX291dCE9MCkNCisJCXsNCisJCQlp
ZiAoemNhbGwtPnpzdHJlYW0uYXZhaWxfaW49PTApDQorCQkJew0KKwkJCQlpZiAoIXpjYWxsLT5n
b3RfcmVhZF9yeF9lbmQpDQorCQkJCXsNCisJCQkJCXJlcyA9IHJ4X1JlYWQoemNhbGwtPmNhbGws
IHpjYWxsLT5idWYsIFpJT1JYX0lOX0JVRlNJWkUpOw0KKwkJCQkJaWYgKHJlcz4wKQ0KKwkJCQkJ
ew0KKwkJCQkJCXpjYWxsLT56c3RyZWFtLm5leHRfaW4gPSB6Y2FsbC0+YnVmOw0KKwkJCQkJCXpj
YWxsLT56c3RyZWFtLmF2YWlsX2luID0gcmVzOw0KKwkJCQkJfSBlbHNlIHsNCisJCQkJCQl6Y2Fs
bC0+Z290X3JlYWRfcnhfZW5kID0gKDE9PTEpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJCQ0KKwkJ
CQlpZiAoemNhbGwtPmdvdF9yZWFkX3J4X2VuZCkNCisJCQkJew0KKwkJCQkJaWYgKHpjYWxsLT5n
b3RfcmVhZF96c3RyZWFtX2VuZCkNCisJCQkJCQlicmVhazsNCisNCisJCQkJCXJlcyA9IFpfT0s7
DQorCQkJCQl3aGlsZShyZXMhPVpfU1RSRUFNX0VORCAmJiB6Y2FsbC0+enN0cmVhbS5hdmFpbF9v
dXQhPTApDQorCQkJCQl7DQorCQkJCQkJI2lmZGVmIFpJT1JYX0RFQlVHDQorCQkJCQkJCWZwcmlu
dGYoc3RkZXJyLCAiYXZhaWxfaW46JWQsIGF2YWlsX291dDolZFxuIiwNCisJCQkJCQkJemNhbGwt
PnpzdHJlYW0uYXZhaWxfaW4sIHpjYWxsLT56c3RyZWFtLmF2YWlsX291dCk7DQorCQkJCQkJI2Vu
ZGlmDQorCQkJCQkJcmVzID0gaW5mbGF0ZSgmKHpjYWxsLT56c3RyZWFtKSwgWl9GSU5JU0gpOw0K
KwkJCQkJCWlmIChyZXMhPVpfT0sgJiYgcmVzIT1aX1NUUkVBTV9FTkQpDQorCQkJCQkJew0KKwkJ
CQkJCQloYW5kbGVFcnJvcih6Y2FsbCwgImluZmxhdGUgZmluaXNoIGVycm9yIiwgekVycm9yKHJl
cykpOw0KKwkJCQkJCQlyZXR1cm4gWklPUlhfRkFJTDsNCisJCQkJCQl9DQorCQkJCQl9DQorDQor
CQkJCQlpZiAocmVzPT1aX1NUUkVBTV9FTkQpDQorCQkJCQkJemNhbGwtPmdvdF9yZWFkX3pzdHJl
YW1fZW5kID0gKDE9PTEpOw0KKwkJCQkJDQorCQkJCQlicmVhazsNCisJCQkJfQ0KKwkJCX0NCisN
CisJCQkjaWZkZWYgWklPUlhfREVCVUcNCisJCQkJZnByaW50ZihzdGRlcnIsICJhdmFpbF9pbjol
ZCwgYXZhaWxfb3V0OiVkXG4iLA0KKwkJCQl6Y2FsbC0+enN0cmVhbS5hdmFpbF9pbiwgemNhbGwt
PnpzdHJlYW0uYXZhaWxfb3V0KTsNCisJCQkjZW5kaWYNCisJCQlyZXMgPSBpbmZsYXRlKCYoemNh
bGwtPnpzdHJlYW0pLCBaX05PX0ZMVVNIKTsNCisNCisJCQlpZiAocmVzPT1aX1NUUkVBTV9FTkQp
DQorCQkJew0KKwkJCQl6Y2FsbC0+Z290X3JlYWRfcnhfZW5kID0gKDE9PTEpOw0KKwkJCQl6Y2Fs
bC0+Z290X3JlYWRfenN0cmVhbV9lbmQgPSAoMT09MSk7DQorCQkJfQ0KKwkJCWVsc2UgaWYgKHJl
cyE9Wl9PSykNCisJCQl7DQorCQkJCWhhbmRsZUVycm9yKHpjYWxsLCAiaW5mbGF0ZSBlcnJvciIs
IHpFcnJvcihyZXMpKTsNCisJCQkJcmV0dXJuIFpJT1JYX0ZBSUw7DQorCQkJfQ0KKwkJfQ0KKw0K
KwkJcmVzID0gemNhbGwtPnpzdHJlYW0udG90YWxfb3V0IC0gb2xkX3RvdGFsX291dDsNCisJfSBl
bHNlIHsNCisJCXJlcyA9IHJ4X1JlYWQoemNhbGwtPmNhbGwsIGJ1ZiwgbmJ5dGVzKTsNCisJfQ0K
KwlyZXR1cm4gcmVzOw0KK30NCisNCitpbnQgemlvcnhFbmRSZWFkKHN0cnVjdCB6aW9yeF9jYWxs
ICp6Y2FsbCkNCit7DQorCWludCByZXM7DQorDQorCWlmICh6Y2FsbD09TlVMTCkNCisJew0KKwkJ
aGFuZGxlRXJyb3IoemNhbGwsICJ6aW9yeEVuZFJlYWQiLCAiTlVMTCBlcnJvciIpOw0KKwkJcmV0
dXJuIFpJT1JYX0ZBSUw7DQorCX0NCisNCisJaWYgKCF6Y2FsbC0+dXNlX2NvbXByZXNzaW9uKQ0K
KwkJcmV0dXJuIFpJT1JYX09LOw0KKw0KKwlyZXMgPSBpbmZsYXRlRW5kKCYoemNhbGwtPnpzdHJl
YW0pKTsNCisJaWYgKHJlcyE9Wl9PSykNCisJew0KKwkJaGFuZGxlRXJyb3IoemNhbGwsICJpbmZs
YXRlRW5kIGVycm9yIiwgekVycm9yKHJlcykpOw0KKwl9DQorDQorCWZyZWUoemNhbGwtPmJ1Zik7
DQorCXpjYWxsLT5idWYgPSBOVUxMOw0KKw0KKwlyZXR1cm4gWklPUlhfT0s7DQorfQ0KKw0KZGlm
ZiAtTmF1ciBvcGVuYWZzLTEuMy43Ny9zcmMvdm9sc2VyL3ppb3J4Lmggb3BlbmFmcy0xLjMuNzd6
L3NyYy92b2xzZXIvemlvcnguaA0KLS0tIG9wZW5hZnMtMS4zLjc3L3NyYy92b2xzZXIvemlvcngu
aAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMA0KKysrIG9wZW5hZnMtMS4zLjc3
ei9zcmMvdm9sc2VyL3ppb3J4LmgJMjAwNC0xMi0yMCAxNDo0NTozNC4wMDAwMDAwMDAgKzAxMDAN
CkBAIC0wLDAgKzEsNDEgQEANCisjaWZuZGVmIF9fWklPUlhfSF9fDQorI2RlZmluZSBfX1pJT1JY
X0hfXw0KKw0KKyNpbmNsdWRlICJ6bGliLmgiDQorDQorI2RlZmluZSBaSU9SWF9DQUxMX0VSUk9S
X0JVRlNJWkUgMTI4DQorI2RlZmluZSBaSU9SWF9JTl9CVUZTSVpFIDQwOTYNCisjZGVmaW5lIFpJ
T1JYX09VVF9CVUZTSVpFIDQwOTYNCisNCisvL2FsbCBmdW5jdGlvbnMgbXVzdCByZXR1cm4gDQor
Ly9vbmUgb2YgdGhlIGZvbGxvd2luZyAyIHJlc3VsdHM6DQorI2RlZmluZSBaSU9SWF9PSyAwDQor
I2RlZmluZSBaSU9SWF9GQUlMICgtMSkNCisNCitzdHJ1Y3QgemlvcnhfY2FsbA0KK3sNCisJc3Ry
dWN0IHJ4X2NhbGwgKmNhbGw7DQorCXpfc3RyZWFtIHpzdHJlYW07DQorCWNoYXIgKmJ1ZjsJLy90
ZW1wb3JhcnkgYnVmZmVyIGZvciBtYXJzaGFsbGluZyB0byByeA0KKw0KKwlpbnQgdXNlX2NvbXBy
ZXNzaW9uOyAvLzA9ZG9uJ3QgY29tcHJlc3MsIDE9Y29tcHJlc3MNCisJaW50IGxldmVsOwkvL2Nv
bXByZXNzaW9uIGxldmVsDQorDQorCWludCBnb3RfcmVhZF9yeF9lbmQ7DQorCWludCBnb3RfcmVh
ZF96c3RyZWFtX2VuZDsNCisNCisJY2hhciBsYXN0RXJyb3JNc2dbWklPUlhfQ0FMTF9FUlJPUl9C
VUZTSVpFXTsNCit9Ow0KKw0KKy8vbGV2ZWw6IFpfREVGQVVMVF9DT01QUkVTU0lPTiwgb3IgYmV0
d2VlbiAwIGFuZCA5Og0KKy8vIDEgZ2l2ZXMgYmVzdCBzcGVlZCwgOSBnaXZlcyBiZXN0IGNvbXBy
ZXNzaW9uLCAwIGdpdmVzIG5vIGNvbXByZXNzaW9uIGF0DQorLy8gYWxsICh0aGUgaW5wdXQgZGF0
YSBpcyBzaW1wbHkgY29waWVkIGEgYmxvY2sgYXQgYSB0aW1lKQ0KKw0KK2ludCB6aW9yeEJlZ2lu
V3JpdGUoc3RydWN0IHJ4X2NhbGwgKmNhbGwsIGludCB1c2VfY29tcHJlc3Npb24sIGludCBsZXZl
bCwgc3RydWN0IHppb3J4X2NhbGwgKnpjYWxsKTsNCitpbnQgemlvcnhXcml0ZShzdHJ1Y3Qgemlv
cnhfY2FsbCAqemNhbGwsIGNoYXIgKmJ1ZiwgaW50IG5ieXRlcyk7DQoraW50IHppb3J4RW5kV3Jp
dGUoc3RydWN0IHppb3J4X2NhbGwgKnpjYWxsKTsNCitpbnQgemlvcnhCZWdpblJlYWQoc3RydWN0
IHJ4X2NhbGwgKmNhbGwsIGludCB1c2VfY29tcHJlc3Npb24sIGludCBsZXZlbCwgc3RydWN0IHpp
b3J4X2NhbGwgKnpjYWxsKTsNCitpbnQgemlvcnhSZWFkKHN0cnVjdCB6aW9yeF9jYWxsICp6Y2Fs
bCwgY2hhciAqYnVmLCBpbnQgbmJ5dGVzKTsNCitpbnQgemlvcnhFbmRSZWFkKHN0cnVjdCB6aW9y
eF9jYWxsICp6Y2FsbCk7DQorDQorI2VuZGlmIC8vIF9fWklPUlhfSF9fDQo=

--=_mixed 005006DAC1256F72_=
Content-Type: application/octet-stream; name="openafs-1.2.13z.patch"
Content-Disposition: attachment; filename="openafs-1.2.13z.patch"
Content-Transfer-Encoding: base64

ZGlmZiAtTmF1ciBvcGVuYWZzLTEuMi4xMy9zcmMvdm9sc2VyL2R1bXBzdHVmZi5jIG9wZW5hZnMt
MS4yLjEzei9zcmMvdm9sc2VyL2R1bXBzdHVmZi5jDQotLS0gb3BlbmFmcy0xLjIuMTMvc3JjL3Zv
bHNlci9kdW1wc3R1ZmYuYwkyMDAzLTA0LTA0IDEwOjI5OjQ3LjAwMDAwMDAwMCArMDIwMA0KKysr
IG9wZW5hZnMtMS4yLjEzei9zcmMvdm9sc2VyL2R1bXBzdHVmZi5jCTIwMDQtMTItMjIgMDA6MTk6
NDguMDAwMDAwMDAwICswMTAwDQpAQCAtNDMsOSArNDMsMTMgQEANCiAjaW5jbHVkZSA8YWZzL2Fj
bC5oPg0KICNpbmNsdWRlICJ2b2xzZXIuaCINCiAjaW5jbHVkZSAidm9saW50LmgiDQorI2luY2x1
ZGUgInppb3J4LmgiDQogDQogZXh0ZXJuIGludCBEb0xvZ2dpbmc7DQogDQorI2RlZmluZSBERUZf
VE9fV1JJVEUgMQ0KKyNkZWZpbmUgREVGX1RPX1JFQUQgMA0KKw0KIC8qIFRoaXMgaW9kIHN0dWZm
IGlzIGEgc2lsbHkgbGl0dGxlIHBhY2thZ2UgdG8gZW11bGF0ZSB0aGUgb2xkIHFpX2luIHN0dWZm
LCB3aGljaA0KICAgIGVtdWxhdGVkIHRoZSBzdGRpbyBzdHVmZi4gIFRoZXJlIGlzIGEgYmlnIGFz
c3VtcHRpb24gaGVyZSwgdGhhdCB0aGUNCiAgICByeF9SZWFkIHdpbGwgbmV2ZXIgYmUgY2FsbGVk
IGRpcmVjdGx5LCBieSBhIHJvdXRpbmUgbGlrZSByZWFkRmlsZSwgd2hlbg0KQEAgLTU1LDE1ICs1
OSwxNiBAQA0KICAgIHRoZSBwdXNoaW5nIGJhY2sgb2YgY2hhcmFjdGVycyAoaS5lLiBjaGFyYWN0
ZXJzIHNob3VsZCBub3QgZG91YmxlIGJvdGgNCiAgICBhcyBhbiBlbmQgbWFya2VyIGFuZCBhIGJl
Z2luIG1hcmtlcikgKi8NCiBzdHJ1Y3QgaW9kIHsNCi0gICAgc3RydWN0IHJ4X2NhbGwgKmNhbGw7
CS8qIGNhbGwgdG8gd2hpY2ggdG8gd3JpdGUsIG1pZ2h0IGJlIGFuIGFycmF5ICovDQorICAgIHN0
cnVjdCB6aW9yeF9jYWxsICpjYWxsOwkvKiBjYWxsIHRvIHdoaWNoIHRvIHdyaXRlLCBtaWdodCBi
ZSBhbiBhcnJheSAqLw0KICAgICBpbnQgZGV2aWNlOwkJCS8qIGR1bXAgZGV2aWNlIElEIGZvciB2
b2x1bWUgKi8NCiAgICAgaW50IHBhcmVudElkOwkJLyogZHVtcCBwYXJlbnQgSUQgZm9yIHZvbHVt
ZSAqLw0KICAgICBzdHJ1Y3QgRGlza1BhcnRpdGlvbiAqZHVtcFBhcnRpdGlvbjsgLyogRHVtcCBw
YXJ0aXRpb24uICovDQotICAgIHN0cnVjdCByeF9jYWxsICoqY2FsbHM7ICAgICAgLyogYXJyYXkg
b2YgcG9pbnRlcnMgdG8gY2FsbHMgKi8NCisgICAgc3RydWN0IHppb3J4X2NhbGwgKipjYWxsczsg
ICAgICAvKiBhcnJheSBvZiBwb2ludGVycyB0byBjYWxscyAqLw0KICAgICBpbnQgbmNhbGxzOyAg
ICAgICAgICAgICAgICAgLyogaG93IG1hbnkgY2FsbHMvY29kZXMgaW4gYXJyYXkgKi8NCiAgICAg
aW50ICpjb2RlczsgICAgICAgICAgICAgICAgIC8qIG9uZSByZXR1cm4gY29kZSBmb3IgZWFjaCBj
YWxsICovDQogICAgIGNoYXIgaGF2ZU9sZENoYXI7CQkvKiBzdGF0ZSBmb3IgcHVzaGluZyBiYWNr
IGEgY2hhcmFjdGVyICovDQogICAgIGNoYXIgb2xkQ2hhcjsNCisgICAgaW50IHRvX3dyaXRlOyAv
KiBvbmUgbW9yZSBhc3N1bXB0aW9uOiB0aGlzIGlvZCBtdXN0IGJlIHVzZWQgZXhjbHVzaXZlbHkg
Zm9yIHJlYWQgb3Igd3JpdGUgKi8NCiB9Ow0KIA0KIA0KQEAgLTgzLDI4ICs4OCwxNzggQEANCiBz
dGF0aWMgYml0MzIgdm9sc2VyX1dyaXRlRmlsZShpbnQgdm4sIHN0cnVjdCBpb2QgKmlvZHAsIEZk
SGFuZGxlX3QgKmhhbmRsZVAsDQogCQkJICAgICAgRXJyb3IgKnN0YXR1cyk7DQogDQorLy9yZXR1
cm4gMCBvbiBzdWNjZXNzLCAoLTEpIG9uIGZhaWwNCitzdGF0aWMgaW50IGlvZF9Jbml0KHJlZ2lz
dGVyIHN0cnVjdCBpb2QgKmlvZHAsIHJlZ2lzdGVyIHN0cnVjdCByeF9jYWxsICpjYWxsLA0KKwkJ
CWludCBjb21wcmVzcywgaW50IGxldmVsLCBpbnQgdG9fd3JpdGUpDQorew0KKyAgICBtZW1zZXQo
aW9kcCwgMCwgc2l6ZW9mKHN0cnVjdCBpb2QpKTsNCisgICAgaW9kcC0+dG9fd3JpdGUgPSB0b193
cml0ZTsNCisgICAgaW9kcC0+Y2FsbCA9IChzdHJ1Y3QgemlvcnhfY2FsbCAqKW1hbGxvYyhzaXpl
b2Yoc3RydWN0IHppb3J4X2NhbGwpKTsNCisgICAgaWYgKGlvZHAtPmNhbGw9PU5VTEwpDQorICAg
IHsNCisgICAgICAgIExvZygiaW9kX0luaXQ6IG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yXG4iKTsN
CisgICAgICAgIHJldHVybiAoLTEpOw0KKyAgICB9DQorDQorICAgIGlmICh0b193cml0ZT09REVG
X1RPX1dSSVRFKQ0KKyAgICB7DQorICAgICAgICBpZiAoemlvcnhCZWdpbldyaXRlKGNhbGwsIGNv
bXByZXNzLCBsZXZlbCwgaW9kcC0+Y2FsbCkhPVpJT1JYX09LKQ0KKwl7DQorICAgICAgICAgICAg
TG9nKCJpb2RfSW5pdDogemlvcnhCZWdpbldyaXRlIGZhaWxlZDogJXNcbiIsIGlvZHAtPmNhbGwt
Pmxhc3RFcnJvck1zZyk7DQorCSAgICBmcmVlKGlvZHAtPmNhbGwpOw0KKwkgICAgaW9kcC0+Y2Fs
bCA9IE5VTEw7DQorCSAgICByZXR1cm4gKC0xKTsNCisJfQ0KKyAgICB9IGVsc2Ugew0KKyAgICAg
ICAgaWYgKHppb3J4QmVnaW5SZWFkKGNhbGwsIGNvbXByZXNzLCBsZXZlbCwgaW9kcC0+Y2FsbCkh
PVpJT1JYX09LKQ0KKwl7DQorICAgICAgICAgICAgTG9nKCJpb2RfSW5pdDogemlvcnhCZWdpblJl
YWQgZmFpbGVkOiAlc1xuIiwgaW9kcC0+Y2FsbC0+bGFzdEVycm9yTXNnKTsNCisJICAgIGZyZWUo
aW9kcC0+Y2FsbCk7DQorCSAgICBpb2RwLT5jYWxsID0gTlVMTDsNCisJICAgIHJldHVybiAoLTEp
Ow0KKwl9DQorICAgIH0NCiANCi1zdGF0aWMgdm9pZCBpb2RfSW5pdChyZWdpc3RlciBzdHJ1Y3Qg
aW9kICppb2RwLCByZWdpc3RlciBzdHJ1Y3QgcnhfY2FsbCAqY2FsbCkNCi17DQotICAgIGlvZHAt
PmNhbGwgPSBjYWxsOw0KICAgICBpb2RwLT5oYXZlT2xkQ2hhciA9IDA7DQogICAgIGlvZHAtPm5j
YWxscyA9IDE7DQotICAgIGlvZHAtPmNhbGxzID0gKHN0cnVjdCByeF9jYWxsICoqKSAwOw0KKyAg
ICBpb2RwLT5jYWxscyA9IChzdHJ1Y3QgemlvcnhfY2FsbCAqKikgMDsNCisNCisgICAgcmV0dXJu
IDA7DQogfQ0KIA0KLXN0YXRpYyB2b2lkIGlvZF9Jbml0TXVsdGkoc3RydWN0IGlvZCAqaW9kcCwg
c3RydWN0IHJ4X2NhbGwgKipjYWxscywgaW50IG5jYWxscywNCi0JCSAgIGludCAqY29kZXMpDQor
Ly9yZXR1cm4gMCBvbiBzdWNjZXNzLCAoLTEpIG9uIGZhaWwNCitzdGF0aWMgaW50IGlvZF9Eb25l
KHN0cnVjdCBpb2QgKmlvZHApDQogew0KKyAgICBpbnQgcmVzOw0KKw0KKyAgICByZXMgPSAwOw0K
KyAgICBpZiAoaW9kcC0+dG9fd3JpdGU9PURFRl9UT19XUklURSkNCisgICAgew0KKyAgICAgICAg
aWYgKHppb3J4RW5kV3JpdGUoaW9kcC0+Y2FsbCkhPVpJT1JYX09LKQ0KKwl7DQorCSAgICBMb2co
ImlvZF9Eb25lOiB6aW9yeEVuZFdyaXRlIGZhaWxlZDogJXNcbiIsIGlvZHAtPmNhbGwtPmxhc3RF
cnJvck1zZyk7DQorCSAgICByZXMgPSAoLTEpOw0KKwl9DQorICAgIH0gZWxzZSB7DQorICAgICAg
ICBpZiAoemlvcnhFbmRSZWFkKGlvZHAtPmNhbGwpIT1aSU9SWF9PSykNCisJew0KKwkgICAgTG9n
KCJpb2RfRG9uZTogemlvcnhFbmRSZWFkIGZhaWxlZDogJXNcbiIsIGlvZHAtPmNhbGwtPmxhc3RF
cnJvck1zZyk7DQorCSAgICByZXMgPSAoLTEpOw0KKwl9DQorICAgIH0NCisgICAgZnJlZShpb2Rw
LT5jYWxsKTsNCisgICAgaW9kcC0+Y2FsbCA9IE5VTEw7DQorICAgIHJldHVybiByZXM7DQorfQ0K
Kw0KKy8vcmV0dXJuOiAwIG9uIE9LLCAoLTEpIG9uIGZhaWx1cmUNCitzdGF0aWMgaW50IGlvZF9J
bml0TXVsdGkoc3RydWN0IGlvZCAqaW9kcCwgc3RydWN0IHJ4X2NhbGwgKipjYWxscywgaW50IG5j
YWxscywNCisJCSAgIGludCAqY29kZXMsIGludCBjb21wcmVzcywgaW50IGxldmVsLCBpbnQgdG9f
d3JpdGUpDQorew0KKyAgaW50IGksIGosIHJlc3VsdCwgcmM7DQorDQorICBtZW1zZXQoaW9kcCwg
MCwgc2l6ZW9mKHN0cnVjdCBpb2QpKTsNCisgIGlvZHAtPnRvX3dyaXRlID0gdG9fd3JpdGU7DQor
ICBpb2RwLT5jYWxscyA9IChzdHJ1Y3QgemlvcnhfY2FsbCAqKiltYWxsb2MobmNhbGxzKnNpemVv
ZihzdHJ1Y3QgemlvcnhfY2FsbCAqKSk7DQorICBpZiAoaW9kcC0+Y2FsbHM9PU5VTEwpDQorICB7
DQorICAgIExvZygiaW9kX0luaXRNdWx0aTogbWVtb3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOw0K
KyAgICByZXR1cm4gKC0xKTsNCisgIH0NCisNCisgIG1lbXNldChpb2RwLT5jYWxscywgMCwgbmNh
bGxzKnNpemVvZihzdHJ1Y3QgemlvcnhjYWxsICopKTsNCisgIGZvcihpPTA7IGk8bmNhbGxzOyBp
KyspDQorICB7DQorICAgIGlvZHAtPmNhbGxzW2ldID0gbWFsbG9jKHNpemVvZihzdHJ1Y3Qgemlv
cnhfY2FsbCkpOw0KKyAgICBpZiAoaW9kcC0+Y2FsbHNbaV09PU5VTEwpDQorICAgIHsNCisgICAg
ICBMb2coImlvZF9Jbml0TXVsdGk6IG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yICMyXG4iKTsNCisg
ICAgICBnb3RvIGZhaWw7DQorICAgIH0NCisgIH0NCisNCisgIHJlc3VsdCA9IDA7DQorICBmb3Io
aT0wOyBpPG5jYWxsczsgaSsrKQ0KKyAgew0KKyAgICBpZiAodG9fd3JpdGU9PURFRl9UT19XUklU
RSkNCisgICAgICByYyA9IHppb3J4QmVnaW5Xcml0ZShjYWxsc1tpXSwgY29tcHJlc3MsIGxldmVs
LCBpb2RwLT5jYWxsc1tpXSk7DQorICAgIGVsc2UNCisgICAgICByYyA9IHppb3J4QmVnaW5SZWFk
KGNhbGxzW2ldLCBjb21wcmVzcywgbGV2ZWwsIGlvZHAtPmNhbGxzW2ldKTsNCisgICAgaWYgKHJj
IT1aSU9SWF9PSykNCisgICAgew0KKyAgICAgIExvZyhpb2RwLT5jYWxsc1tpXS0+bGFzdEVycm9y
TXNnKTsNCisgICAgICAvL2RyYXcgYmFjayBpbml0aWFsaXphdGlvbiBzbyBmYXI6DQorICAgICAg
Zm9yKGo9MDsgajxpOyBqKyspDQorICAgICAgew0KKyAgICAgICAgaWYgKHRvX3dyaXRlPT1ERUZf
VE9fV1JJVEUpDQorICAgICAgICAgIHppb3J4RW5kV3JpdGUoaW9kcC0+Y2FsbHNbal0pOw0KKwll
bHNlDQorICAgICAgICAgIHppb3J4RW5kUmVhZChpb2RwLT5jYWxsc1tqXSk7DQorICAgICAgfQ0K
KyAgICB9DQorICB9DQogDQotICBpb2RwLT5jYWxscyA9IGNhbGxzOw0KICAgaW9kcC0+aGF2ZU9s
ZENoYXIgPSAwOw0KICAgaW9kcC0+bmNhbGxzID0gbmNhbGxzOw0KICAgaW9kcC0+Y29kZXMgPSBj
b2RlczsNCi0gIGlvZHAtPmNhbGwgPSAoc3RydWN0IHJ4X2NhbGwgKikgMDsNCisgIGlvZHAtPmNh
bGwgPSAoc3RydWN0IHppb3J4X2NhbGwgKikgMDsNCisgIA0KKyAgcmV0dXJuIDA7DQorDQorZmFp
bDoNCisgIGlmIChpb2RwLT5jYWxscyE9TlVMTCkNCisgIHsNCisgICAgZm9yKGk9MDsgaTxuY2Fs
bHM7IGkrKykNCisgICAgew0KKyAgICAgIGlmIChpb2RwLT5jYWxsc1tpXSE9TlVMTCkNCisgICAg
ICAgIGZyZWUoaW9kcC0+Y2FsbHNbaV0pOw0KKyAgICB9DQorICAgIGZyZWUoaW9kcC0+Y2FsbHMp
Ow0KKyAgICBpb2RwLT5jYWxscyA9IE5VTEw7DQorICB9DQorICByZXR1cm4gKC0xKTsNCit9DQor
DQorLy9yZXR1cm46IDAgb24gT0ssICgtMSkgb24gZmFpbHVyZQ0KK3N0YXRpYyBpbnQgaW9kX0Rv
bmVNdWx0aShzdHJ1Y3QgaW9kICppb2RwKQ0KK3sNCisgIGludCBpLCByZXN1bHQsIHJjOw0KKyAg
aWYgKGlvZHA9PU5VTEwpDQorICAgIHJldHVybiAoLTEpOw0KKw0KKyAgaWYgKGlvZHAtPmNhbGxz
PT1OVUxMKQ0KKyAgICByZXR1cm4gKC0xKTsNCisNCisgIHJlc3VsdCA9IDA7DQorICBmb3IoaT0w
OyBpPGlvZHAtPm5jYWxsczsgaSsrKQ0KKyAgew0KKyAgICBpZiAoaW9kcC0+dG9fd3JpdGU9PURF
Rl9UT19XUklURSkNCisgICAgICByYyA9IHppb3J4RW5kV3JpdGUoaW9kcC0+Y2FsbHNbaV0pOw0K
KyAgICBlbHNlDQorICAgICAgcmMgPSB6aW9yeEVuZFJlYWQoaW9kcC0+Y2FsbHNbaV0pOw0KKyAg
ICBpZiAocmMhPVpJT1JYX09LKQ0KKyAgICB7DQorICAgICAgTG9nKGlvZHAtPmNhbGxzW2ldLT5s
YXN0RXJyb3JNc2cpOw0KKyAgICAgIHJlc3VsdCA9ICgtMSk7DQorICAgIH0NCisgIH0NCisNCisg
IGlmIChpb2RwLT5jYWxscyE9TlVMTCkNCisgIHsNCisgICAgZm9yKGk9MDsgaTxpb2RwLT5uY2Fs
bHM7IGkrKykNCisgICAgew0KKyAgICAgIGlmIChpb2RwLT5jYWxsc1tpXSE9TlVMTCkNCisgICAg
ICAgIGZyZWUoaW9kcC0+Y2FsbHNbaV0pOw0KKyAgICB9DQorICAgIGZyZWUoaW9kcC0+Y2FsbHMp
Ow0KKyAgICBpb2RwLT5jYWxscyA9IE5VTEw7DQorICB9DQorDQorICByZXR1cm4gcmVzdWx0Ow0K
IH0NCiANCiAvKiBOLkIuIGlvZF9SZWFkIGRvZXNuJ3QgY2hlY2sgZm9yIG9sZGNoYXIgKHNlZSBw
cmV2aW91cyBjb21tZW50KSAqLw0KLSNkZWZpbmUgaW9kX1JlYWQoaW9kcCwgYnVmLCBuYnl0ZXMp
IHJ4X1JlYWQoKGlvZHApLT5jYWxsLCBidWYsIG5ieXRlcykNCisjZGVmaW5lIGlvZF9SZWFkKGlv
ZHAsIGJ1ZiwgbmJ5dGVzKSB6aW9yeFJlYWQoKGlvZHApLT5jYWxsLCBidWYsIG5ieXRlcykNCiAN
CiAvKiBGb3IgdGhlIHNpbmdsZSBkdW1wIGNhc2UsIGl0J3Mgb2sgdG8ganVzdCByZXR1cm4gdGhl
ICJieXRlcyB3cml0dGVuIg0KICAqIHRoYXQgcnhfV3JpdGUgcmV0dXJucywgc2luY2UgYWxsIHRo
ZSBjYWxsZXJzIG9mIGlvZF9Xcml0ZSBhYm9ydCB3aGVuDQpAQCAtMTIxLDE1ICsyNzYsMjUgQEAN
CiAJICAoIWlvZHAtPmNhbGwgJiYgaW9kcC0+bmNhbGxzID49IDEgJiYgaW9kcC0+Y2FsbHMpKTsN
CiANCiAgIGlmIChpb2RwLT5jYWxsKSB7DQotICAgIGNvZGUgPSByeF9Xcml0ZShpb2RwLT5jYWxs
LCBidWYsIG5ieXRlcyk7IA0KLSAgICByZXR1cm4gY29kZTsgICAgIA0KKyAgICBjb2RlID0gemlv
cnhXcml0ZShpb2RwLT5jYWxsLCBidWYsIG5ieXRlcyk7DQorICAgIGlmIChjb2RlIT1uYnl0ZXMg
JiYgaW9kcC0+Y2FsbC0+bGFzdEVycm9yTXNnWzBdIT0nXDAnKQ0KKyAgICB7DQorICAgICAgICBM
b2coaW9kcC0+Y2FsbC0+bGFzdEVycm9yTXNnKTsNCisgICAgICAgIGlvZHAtPmNhbGwtPmxhc3RF
cnJvck1zZ1swXSA9ICdcMCc7DQorICAgIH0NCisgICAgcmV0dXJuIGNvZGU7DQogICB9DQogDQog
ICBmb3IgKGk9MDsgaSA8IGlvZHAtPm5jYWxsczsgaSsrKSB7DQogICAgIGlmIChpb2RwLT5jYWxs
c1tpXSAmJiAhaW9kcC0+Y29kZXNbaV0pIHsNCi0gICAgICBjb2RlID0gcnhfV3JpdGUoaW9kcC0+
Y2FsbHNbaV0sIGJ1ZiwgbmJ5dGVzKTsNCisgICAgICBjb2RlID0gemlvcnhXcml0ZShpb2RwLT5j
YWxsc1tpXSwgYnVmLCBuYnl0ZXMpOw0KICAgICAgIGlmIChjb2RlICE9IG5ieXRlcykgeyAvKiBl
dmVyeXRoaW5nIGdldHMgbWVyZ2VkIGludG8gYSBzaW5nbGUgZXJyb3IgKi8NCi0gICAgICAJaW9k
cC0+Y29kZXNbaV0gPSBWT0xTRVJEVU1QRVJST1I7ICAvKiBidXQgdGhhdCdzIGV4YWN0bHkgd2hh
dCB0aGUgKi8NCisgICAgICAgIGlvZHAtPmNvZGVzW2ldID0gVk9MU0VSRFVNUEVSUk9SOyAgLyog
YnV0IHRoYXQncyBleGFjdGx5IHdoYXQgdGhlICovDQorICAgICAgICBpZiAoaW9kcC0+Y2FsbHNb
aV0tPmxhc3RFcnJvck1zZ1swXSE9J1wwJykNCisgICAgICAgIHsNCisgICAgICAgICAgIExvZyhp
b2RwLT5jYWxsc1tpXS0+bGFzdEVycm9yTXNnKTsNCisgICAgICAgICAgIGlvZHAtPmNhbGxzW2ld
LT5sYXN0RXJyb3JNc2dbMF0gPSAnXDAnOw0KKyAgICAgICAgfQ0KICAgICAgIH0gICAgICAgCSAJ
CSAgICAgICAgICAgLyogc3RhbmRhcmQgZHVtcCBkb2VzLCBhbnl3YXlzICovDQogICAgICAgZWxz
ZSB7DQogICAgICAgCW9uZV9zdWNjZXNzID0gVFJVRTsNCkBAIC01ODIsMzggKzc0Nyw1MCBAQA0K
IA0KIC8qIER1bXAgYSB3aG9sZSB2b2x1bWUgKi8NCiBpbnQgRHVtcFZvbHVtZShyZWdpc3RlciBz
dHJ1Y3QgcnhfY2FsbCAqY2FsbCwgcmVnaXN0ZXIgVm9sdW1lICp2cCwNCi0JCSAgICAgIGFmc19p
bnQzMiBmcm9tdGltZSwgaW50IGR1bXBBbGxEaXJzKQ0KKwkJICAgICAgYWZzX2ludDMyIGZyb210
aW1lLCBpbnQgZHVtcEFsbERpcnMsDQorCQkgICAgICBpbnQgY29tcHJlc3MsIGludCBsZXZlbCkN
CiB7DQogICAgIHN0cnVjdCBpb2QgaW9kOw0KICAgICBpbnQgY29kZSA9IDA7DQogICAgIHJlZ2lz
dGVyIHN0cnVjdCBpb2QgKmlvZHAgPSAmaW9kOw0KLSAgICBpb2RfSW5pdChpb2RwLCBjYWxsKTsN
Ci0gICAgDQorDQorICAgIGlmIChpb2RfSW5pdChpb2RwLCBjYWxsLCBjb21wcmVzcywgbGV2ZWws
IERFRl9UT19XUklURSkhPTApDQorICAgICAgIHJldHVybiBWT0xTRVJEVU1QRVJST1I7IC8vZG9u
J3QgbmVlZCB0byBjYWxsIGlvZF9Eb25lIGluIHRoaXMgY2FzZQ0KKw0KICAgICBpZiAoIWNvZGUp
IGNvZGUgPSBEdW1wRHVtcEhlYWRlcihpb2RwLCB2cCwgZnJvbXRpbWUpOw0KLSAgICANCisNCiAg
ICAgaWYgKCFjb2RlKSBjb2RlID0gRHVtcFBhcnRpYWwoaW9kcCwgdnAsIGZyb210aW1lLCBkdW1w
QWxsRGlycyk7DQogICAgIA0KIC8qIGhhY2sgZm9sbG93cy4gIEVycm9ycyBzaG91bGQgYmUgaGFu
ZGxlZCBxdWl0ZSBkaWZmZXJlbnRseSBpbiB0aGlzIHZlcnNpb24gb2YgZHVtcCB0aGFuIHRoZXkg
dXNlZCB0byBiZS4qLw0KLSAgICBpZiAocnhfRXJyb3IoaW9kcC0+Y2FsbCkpIHsNCi0JTG9nKCIx
IFZvbHNlcjogRHVtcFZvbHVtZTogUnggY2FsbCBmYWlsZWQgZHVyaW5nIGR1bXAsIGVycm9yICVk
XG4iLCByeF9FcnJvcihpb2RwLT5jYWxsKSk7DQorICAgIGlmIChyeF9FcnJvcihpb2RwLT5jYWxs
LT5jYWxsKSkgew0KKwlMb2coIjEgVm9sc2VyOiBEdW1wVm9sdW1lOiBSeCBjYWxsIGZhaWxlZCBk
dXJpbmcgZHVtcCwgZXJyb3IgJWRcbiIsIHJ4X0Vycm9yKGlvZHAtPmNhbGwtPmNhbGwpKTsNCiAJ
cmV0dXJuIFZPTFNFUkRVTVBFUlJPUjsNCiAgICAgfQ0KICAgICBpZiAoIWNvZGUpIGNvZGUgPSBE
dW1wRW5kKGlvZHApOw0KKw0KKyAgICBpZiAoaW9kX0RvbmUoaW9kcCkhPTApDQorICAgICAgICBj
b2RlID0gVk9MU0VSRFVNUEVSUk9SOw0KICAgICANCiAgICAgcmV0dXJuIGNvZGU7DQogfQ0KIA0K
IC8qIER1bXAgYSB2b2x1bWUgdG8gbXVsdGlwbGUgcGxhY2VzKi8NCiBpbnQgRHVtcFZvbE11bHRp
KHN0cnVjdCByeF9jYWxsICoqY2FsbHMsIGludCBuY2FsbHMsIFZvbHVtZSAqdnAsDQotCQkgYWZz
X2ludDMyIGZyb210aW1lLCBpbnQgZHVtcEFsbERpcnMsIGludCAqY29kZXMpDQorCQkgYWZzX2lu
dDMyIGZyb210aW1lLCBpbnQgZHVtcEFsbERpcnMsIGludCAqY29kZXMsDQorCQkgaW50IGNvbXBy
ZXNzLCBpbnQgbGV2ZWwpDQogew0KICAgICBzdHJ1Y3QgaW9kIGlvZDsNCiAgICAgaW50IGNvZGUg
PSAwOw0KLSAgICBpb2RfSW5pdE11bHRpKCZpb2QsIGNhbGxzLCBuY2FsbHMsIGNvZGVzKTsNCisg
ICAgaWYgKGlvZF9Jbml0TXVsdGkoJmlvZCwgY2FsbHMsIG5jYWxscywgY29kZXMsIGNvbXByZXNz
LCBsZXZlbCwgREVGX1RPX1dSSVRFKSE9MCkNCisgICAgICByZXR1cm4gVk9MU0VSRFVNUEVSUk9S
OyAvL2Rvbid0IG5lZWQgdG8gY2FsbCBpb2RfRG9uZU11bHRpIGluIHRoaXMgY2FzZQ0KICAgICAN
CiAgICAgaWYgKCFjb2RlKSBjb2RlID0gRHVtcER1bXBIZWFkZXIoJmlvZCwgdnAsIGZyb210aW1l
KTsNCiAgICAgaWYgKCFjb2RlKSBjb2RlID0gRHVtcFBhcnRpYWwoJmlvZCwgdnAsIGZyb210aW1l
LCBkdW1wQWxsRGlycyk7DQogICAgIGlmICghY29kZSkgY29kZSA9IER1bXBFbmQoJmlvZCk7DQor
DQorICAgIGlmIChpb2RfRG9uZU11bHRpKCZpb2QpIT0wKQ0KKyAgICAgIGNvZGUgPSBWT0xTRVJE
VU1QRVJST1I7DQorDQogICAgIHJldHVybiBjb2RlOw0KIH0NCiANCkBAIC03NTgsNyArOTM1LDcg
QEANCiAJCSAgICBpZiAodm5vZGUtPnR5cGUgIT0gdk51bGwgJiYgVk5ESVNLX0dFVF9JTk8odm5v
ZGUpKSB7DQogCQkJY250MSsrOw0KIAkJCWlmIChEb0xvZ2dpbmcpIHsNCi0JCQkgICBMb2coIlJl
c3RvcmVWb2x1bWUgJWQgQ2xlYW51cDogUmVtb3Zpbmcgb2xkIHZub2RlPSVkIGlub2RlPSVkIHNp
emU9JWRcbiIsIA0KKwkJCSAgIExvZygiUmVzdG9yZVZvbHVtZSAlZCBDbGVhbnVwOiBSZW1vdmlu
ZyBvbGQgdm5vZGU9JWQgaW5vZGU9JWQgc2l6ZT0lZFxuIiwNCiAJCQkgICAgICAgVl9pZCh2cCks
IGJpdE51bWJlclRvVm5vZGVOdW1iZXIoaSxjbGFzcyksDQogCQkJICAgICAgIFZORElTS19HRVRf
SU5PKHZub2RlKSwgdm5vZGUtPmxlbmd0aCk7DQogCQkJfQ0KQEAgLTgxMCw3ICs5ODcsOCBAQA0K
IA0KIA0KIGludCBSZXN0b3JlVm9sdW1lKHJlZ2lzdGVyIHN0cnVjdCByeF9jYWxsICpjYWxsLCBW
b2x1bWUgKmF2cCwNCi0JCSAgaW50IGluY3JlbWVudGFsLCBzdHJ1Y3QgcmVzdG9yZUNvb2tpZSAq
Y29va2llKQ0KKwkJICBpbnQgaW5jcmVtZW50YWwsIHN0cnVjdCByZXN0b3JlQ29va2llICpjb29r
aWUsDQorCQkgIGludCBjb21wcmVzcywgaW50IGxldmVsKQ0KIHsNCiAgICAgVm9sdW1lRGlza0Rh
dGEgdm9sOw0KICAgICBzdHJ1Y3QgRHVtcEhlYWRlciBoZWFkZXI7DQpAQCAtODIzLDggKzEwMDEs
OSBAQA0KICAgICBpbnQgczE9MCwgczI9MCwgZGVsbz0wLCB0ZGVsbzsNCiAgICAgaW50IHRhZzsN
CiANCi0gICAgaW9kX0luaXQoaW9kcCwgY2FsbCk7DQotICAgIA0KKyAgICBpZiAoaW9kX0luaXQo
aW9kcCwgY2FsbCwgY29tcHJlc3MsIGxldmVsLCBERUZfVE9fUkVBRCkhPTApDQorICAgICAgIHJl
dHVybiBWT0xTRVJEVU1QRVJST1I7IC8vZG9uJ3QgbmVlZCB0byBjYWxsIGlvZF9Eb25lIGluIHRo
aXMgY2FzZQ0KKw0KICAgICB2cCA9IGF2cDsNCiAgICAgaWYgKCFSZWFkRHVtcEhlYWRlcihpb2Rw
LCAmaGVhZGVyKSl7DQogCUxvZygiMSBWb2xzZXI6IFJlc3RvcmVWb2x1bWU6IEVycm9yIHJlYWRp
bmcgaGVhZGVyIGZpbGUgZm9yIGR1bXA7IGFib3J0ZWRcbiIpOw0KQEAgLTg5Nyw2ICsxMDc2LDEw
IEBADQogICAgIC8qIEZyZWUgdGhlIG1hbGxvY2VkIHNwYWNlIGFib3ZlICovDQogICAgIGlmIChi
MSkgZnJlZSgoY2hhciAqKWIxKTsNCiAgICAgaWYgKGIyKSBmcmVlKChjaGFyICopYjIpOw0KKw0K
KyAgICBpZiAoaW9kX0RvbmUoaW9kcCkhPTApDQorICAgICAgICBlcnJvciA9IFZPTFNFUkRVTVBF
UlJPUjsNCisNCiAgICAgcmV0dXJuIGVycm9yOw0KIH0NCiANCmRpZmYgLU5hdXIgb3BlbmFmcy0x
LjIuMTMvc3JjL3ZvbHNlci9NYWtlZmlsZS5pbiBvcGVuYWZzLTEuMi4xM3ovc3JjL3ZvbHNlci9N
YWtlZmlsZS5pbg0KLS0tIG9wZW5hZnMtMS4yLjEzL3NyYy92b2xzZXIvTWFrZWZpbGUuaW4JMjAw
MS0wOS0xMCAyMjoyMToxMy4wMDAwMDAwMDAgKzAyMDANCisrKyBvcGVuYWZzLTEuMi4xM3ovc3Jj
L3ZvbHNlci9NYWtlZmlsZS5pbgkyMDA0LTEyLTE3IDEyOjQ2OjE0LjAwMDAwMDAwMCArMDEwMA0K
QEAgLTM2LDEzICszNiwxMyBAQA0KIElOQ0xJQlM9LUwke1NSQ0RJUn0vbGliL2FmcyAtTCR7VE9Q
X0xJQkRJUn0NCiANCiBWSU5DTFM9JHtUT1BfSU5DRElSfS9hZnMvcGFydGl0aW9uLmggJHtUT1Bf
SU5DRElSfS9hZnMvdm9sdW1lLmggXA0KLQkke1RPUF9JTkNESVJ9L2Fmcy92bHNlcnZlci5oIHZv
bC5oIGR1bXAuaCB2b2xzZXIuaCAgbG9ja2RhdGEuaA0KKwkke1RPUF9JTkNESVJ9L2Fmcy92bHNl
cnZlci5oIHZvbC5oIGR1bXAuaCB2b2xzZXIuaCBsb2NrZGF0YS5oIHppb3J4LmgNCiANCiBSSU5D
TFM9JHtUT1BfSU5DRElSfS9yeC9yeC5oICR7VE9QX0lOQ0RJUn0vcngveGRyLmggXA0KICAgICAg
ICAke1RPUF9JTkNESVJ9L2Fmcy9rZXlzLmggJHtUT1BfSU5DRElSfS9hZnMvY2VsbGNvbmZpZy5o
IFwNCi0JJHtUT1BfSU5DRElSfS91YmlrLmggJHtUT1BfSU5DRElSfS9hZnMvY21kLmgNCisJJHtU
T1BfSU5DRElSfS91YmlrLmggJHtUT1BfSU5DRElSfS9hZnMvY21kLmggemlvcnguaA0KIA0KLUlO
VElOQ0xTPXZvbGludC5oIHZvbHNlci5oIA0KK0lOVElOQ0xTPXZvbGludC5oIHZvbHNlci5oIHpp
b3J4LmgNCiANCiBMSUJTPVwNCiAJJHtUT1BfTElCRElSfS9saWJhdWRpdC5hIFwNCkBAIC02Miwx
MSArNjIsMTIgQEANCiAJJHtUT1BfTElCRElSfS9saWJjb21fZXJyLmEgXA0KIAkke1RPUF9MSUJE
SVJ9L2xpYmthdXRoLmEgXA0KIAkke1RPUF9MSUJESVJ9L2xpYnVzZC5hIFwNCi0JJHtUT1BfTElC
RElSfS91dGlsLmENCisJJHtUT1BfTElCRElSfS91dGlsLmEgXA0KKwkvdXNyL2xpYi9saWJ6LmEN
CiANCi1WU09CSlM9dnNwcm9jcy5vIHZzdXRpbHMubyBsb2NrcHJvY3MubyB2b2xpbnQueGRyLm8g
dm9sZXJyLm8gDQorVlNPQkpTPXZzcHJvY3MubyB2c3V0aWxzLm8gbG9ja3Byb2NzLm8gdm9saW50
Lnhkci5vIHZvbGVyci5vIHppb3J4Lm8NCiBTT0JKUz12b2xtYWluLm8gdm9scHJvY3MubyBwaHlz
aW8ubyBjb21tb24ubyB2b2x0cmFucy5vIHZvbGVyci5vIFwNCi0gdm9saW50LmNzLm8gZHVtcHN0
dWZmLm8gIHZvbGludC5zcy5vIHZvbGludC54ZHIubw0KKyB2b2xpbnQuY3MubyBkdW1wc3R1ZmYu
byAgdm9saW50LnNzLm8gdm9saW50Lnhkci5vIHppb3J4Lm8NCiANCiBhbGw6IHZvbHNlcnZlciB2
b3MgcmVzdG9yZXZvbCBcDQogCSR7VE9QX0lOQ0RJUn0vYWZzL3ZvbHNlci5oIFwNCkBAIC0xMTIs
NiArMTEzLDcgQEANCiBwaHlzaW8ubzogcGh5c2lvLmMgJHtWSU5DTFN9DQogY29tbW9uLm86IGNv
bW1vbi5jICR7VklOQ0xTfQ0KIGxvY2twcm9jcy5vOiBsb2NrcHJvY3MuYyAke1ZJTkNMU30gJHtJ
TlRJTkNMU30gJHtSSU5DTFN9DQoremlvcngubzogemlvcnguYyB6aW9yeC5oDQogDQogIw0KICMg
SW5zdGFsbGF0aW9uIHRhcmdldHMNCmRpZmYgLU5hdXIgb3BlbmFmcy0xLjIuMTMvc3JjL3ZvbHNl
ci92b2xpbnQueGcgb3BlbmFmcy0xLjIuMTN6L3NyYy92b2xzZXIvdm9saW50LnhnDQotLS0gb3Bl
bmFmcy0xLjIuMTMvc3JjL3ZvbHNlci92b2xpbnQueGcJMjAwMC0xMS0wNCAxMTowNjozMy4wMDAw
MDAwMDAgKzAxMDANCisrKyBvcGVuYWZzLTEuMi4xM3ovc3JjL3ZvbHNlci92b2xpbnQueGcJMjAw
NC0xMi0yMSAxNTowNDozMy4wMDAwMDAwMDAgKzAxMDANCkBAIC00Nyw2ICs0NywxMCBAQA0KICNk
ZWZpbmUJICAgIFZPTFNFVElORk8JCTEyNg0KICNkZWZpbmUJICAgIFZPTFhMSVNUUEFSVElUSU9O
UwkxMjcNCiAjZGVmaW5lCSAgICBWT0xGT1JXQVJETVVMVElQTEUgIDEyOA0KKyNkZWZpbmUJVk9M
UkVTVE9SRV9aCQk2NTUzNQ0KKyNkZWZpbmUgVk9MRk9SV0FSRF9aCQk2NTUzNA0KKyNkZWZpbmUg
Vk9MRFVNUF9aCQk2NTUzMw0KKyNkZWZpbmUgVk9MRk9SV0FSRE1VTFRJUExFX1oJNjU1MzINCiAN
CiBjb25zdCBTSVpFID0gMTAyNDsNCiANCkBAIC0zOTAsMyArMzk0LDQwIEBADQogICBJTiBzdHJ1
Y3QgcmVzdG9yZUNvb2tpZSAqY29va2llLA0KICAgT1VUIG1hbnlSZXN1bHRzICpyZXN1bHRzDQog
KSA9IFZPTEZPUldBUkRNVUxUSVBMRTsNCisNCitwcm9jIFJlc3RvcmVaKA0KKyAgSU4gYWZzX2lu
dDMyIHRvVHJhbnMsDQorICBJTiBhZnNfaW50MzIgZmxhZ3MsDQorICBJTiBzdHJ1Y3QgcmVzdG9y
ZUNvb2tpZSAqY29va2llLA0KKyAgSU4gYWZzX2ludDMyIGNvbXByZXNzLA0KKyAgSU4gYWZzX2lu
dDMyIGxldmVsDQorKSBzcGxpdCA9IFZPTFJFU1RPUkVfWjsNCisNCitwcm9jIEZvcndhcmRNdWx0
aXBsZVooDQorICBJTiBhZnNfaW50MzIgZnJvbVRyYW5zLA0KKyAgSU4gYWZzX2ludDMyIGZyb21E
YXRlLA0KKyAgSU4gbWFueURlc3RzICpkZXN0aW5hdGlvbnMsDQorICBJTiBhZnNfaW50MzIgc3Bh
cmUsDQorICBJTiBzdHJ1Y3QgcmVzdG9yZUNvb2tpZSAqY29va2llLA0KKyAgT1VUIG1hbnlSZXN1
bHRzICpyZXN1bHRzLA0KKyAgSU4gYWZzX2ludDMyIGNvbXByZXNzLA0KKyAgSU4gYWZzX2ludDMy
IGxldmVsDQorKSA9IFZPTEZPUldBUkRNVUxUSVBMRV9aOw0KKw0KK3Byb2MgRm9yd2FyZFooDQor
ICBJTiBhZnNfaW50MzIgZnJvbVRyYW5zLA0KKyAgSU4gYWZzX2ludDMyIGZyb21EYXRlLA0KKyAg
SU4gc3RydWN0IGRlc3RTZXJ2ZXIgKmRlc3RpbmF0aW9uLA0KKyAgSU4gYWZzX2ludDMyIGRlc3RU
cmFucywNCisgIElOIHN0cnVjdCByZXN0b3JlQ29va2llICpjb29raWUsDQorICBJTiBhZnNfaW50
MzIgY29tcHJlc3MsDQorICBJTiBhZnNfaW50MzIgbGV2ZWwNCispID0gVk9MRk9SV0FSRF9aOw0K
Kw0KK3Byb2MgRHVtcFooDQorICBJTiBhZnNfaW50MzIgZnJvbVRyYW5zLA0KKyAgSU4gYWZzX2lu
dDMyIGZyb21EYXRlLA0KKyAgSU4gYWZzX2ludDMyIGNvbXByZXNzLA0KKyAgSU4gYWZzX2ludDMy
IGxldmVsDQorKSBzcGxpdCA9IFZPTERVTVBfWjsNCisNCmRpZmYgLU5hdXIgb3BlbmFmcy0xLjIu
MTMvc3JjL3ZvbHNlci92b2xwcm9jcy5jIG9wZW5hZnMtMS4yLjEzei9zcmMvdm9sc2VyL3ZvbHBy
b2NzLmMNCi0tLSBvcGVuYWZzLTEuMi4xMy9zcmMvdm9sc2VyL3ZvbHByb2NzLmMJMjAwNC0wMS0x
MCAxODozMDozMC4wMDAwMDAwMDAgKzAxMDANCisrKyBvcGVuYWZzLTEuMi4xM3ovc3JjL3ZvbHNl
ci92b2xwcm9jcy5jCTIwMDQtMTItMjEgMTU6MTM6MjEuMDAwMDAwMDAwICswMTAwDQpAQCAtMTAz
NiwyMCArMTAzNiw0MyBAQA0KIHsNCiAgIGFmc19pbnQzMiBjb2RlOw0KIA0KLSAgY29kZSA9IFZv
bEZvcndhcmQgKGFjaWQsIGZyb21UcmFucywgZnJvbURhdGUsIGRlc3RpbmF0aW9uLCBkZXN0VHJh
bnMsY29va2llKTsNCisgIGNvZGUgPSBWb2xGb3J3YXJkIChhY2lkLCBmcm9tVHJhbnMsIGZyb21E
YXRlLCBkZXN0aW5hdGlvbiwgZGVzdFRyYW5zLCBjb29raWUsDQorICAJCTAsIDApOw0KKyAgb3Np
X2F1ZGl0VShhY2lkLCBWU19Gb3J3YXJkRXZlbnQsIGNvZGUsIEFVRF9MT05HLCBmcm9tVHJhbnMs
DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVVEX0hPU1QsIGRl
c3RpbmF0aW9uLT5kZXN0SG9zdCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBVURfTE9ORywgZGVzdFRyYW5zLCBBVURfRU5EKTsNCisgIHJldHVybiBjb2RlOw0K
K30NCisNCithZnNfaW50MzIgU0FGU1ZvbEZvcndhcmRaIChhY2lkLCBmcm9tVHJhbnMsIGZyb21E
YXRlLCBkZXN0aW5hdGlvbiwgZGVzdFRyYW5zLCBjb29raWUsIGNvbXByZXNzLCBsZXZlbCkNCitz
dHJ1Y3QgcnhfY2FsbCAqYWNpZDsNCithZnNfaW50MzIgZnJvbVRyYW5zOw0KK2Fmc19pbnQzMiBm
cm9tRGF0ZTsNCitzdHJ1Y3QgZGVzdFNlcnZlciAqZGVzdGluYXRpb247DQorc3RydWN0IHJlc3Rv
cmVDb29raWUgKmNvb2tpZTsNCithZnNfaW50MzIgZGVzdFRyYW5zOw0KK2Fmc19pbnQzMiBjb21w
cmVzczsNCithZnNfaW50MzIgbGV2ZWw7DQorew0KKyAgYWZzX2ludDMyIGNvZGU7DQorDQorICBj
b2RlID0gVm9sRm9yd2FyZCAoYWNpZCwgZnJvbVRyYW5zLCBmcm9tRGF0ZSwgZGVzdGluYXRpb24s
IGRlc3RUcmFucyxjb29raWUsDQorICAJCShpbnQpY29tcHJlc3MsIChpbnQpbGV2ZWwpOw0KICAg
b3NpX2F1ZGl0VShhY2lkLCBWU19Gb3J3YXJkRXZlbnQsIGNvZGUsIEFVRF9MT05HLCBmcm9tVHJh
bnMsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVRF9IT1NU
LCBkZXN0aW5hdGlvbi0+ZGVzdEhvc3QsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFVRF9MT05HLCBkZXN0VHJhbnMsIEFVRF9FTkQpOw0KICAgcmV0dXJuIGNv
ZGU7DQogfQ0KIA0KLWFmc19pbnQzMiBWb2xGb3J3YXJkIChhY2lkLCBmcm9tVHJhbnMsIGZyb21E
YXRlLCBkZXN0aW5hdGlvbiwgZGVzdFRyYW5zLGNvb2tpZSkNCithZnNfaW50MzIgVm9sRm9yd2Fy
ZCAoYWNpZCwgZnJvbVRyYW5zLCBmcm9tRGF0ZSwgZGVzdGluYXRpb24sIGRlc3RUcmFucyxjb29r
aWUsY29tcHJlc3MsbGV2ZWwpDQogc3RydWN0IHJ4X2NhbGwgKmFjaWQ7DQogYWZzX2ludDMyIGZy
b21UcmFuczsNCiBhZnNfaW50MzIgZnJvbURhdGU7DQogc3RydWN0IGRlc3RTZXJ2ZXIgKmRlc3Rp
bmF0aW9uOw0KIHN0cnVjdCByZXN0b3JlQ29va2llICpjb29raWU7DQotYWZzX2ludDMyIGRlc3RU
cmFuczsgDQorYWZzX2ludDMyIGRlc3RUcmFuczsNCitpbnQgY29tcHJlc3M7DQoraW50IGxldmVs
Ow0KIHsNCiAgICAgcmVnaXN0ZXIgc3RydWN0IHZvbHNlcl90cmFucyAqdHQ7DQogICAgIHJlZ2lz
dGVyIGFmc19pbnQzMiBjb2RlOw0KQEAgLTEwOTMsMTUgKzExMTYsMjMgQEANCiAgICAgdGNhbGwg
PSByeF9OZXdDYWxsKHRjb24pOw0KICAgICB0dC0+cnhDYWxsUHRyID0gdGNhbGw7DQogICAgIC8q
IHN0YXJ0IHJlc3RvcmUgZ29pbmcuICBmcm9tZGF0ZSA9PSAwIC0tPiBkb2luZyBhbiBpbmNyZW1l
bnRhbCBkdW1wL3Jlc3RvcmUgKi8NCi0gICAgY29kZSA9IFN0YXJ0QUZTVm9sUmVzdG9yZSh0Y2Fs
bCwgZGVzdFRyYW5zLCAoZnJvbURhdGU/IDEgOiAwKSxjb29raWUpOw0KKyAgICBpZiAoY29tcHJl
c3MpDQorCWNvZGUgPSBTdGFydEFGU1ZvbFJlc3RvcmVaKHRjYWxsLCBkZXN0VHJhbnMsIChmcm9t
RGF0ZT8gMSA6IDApLCBjb29raWUsIGNvbXByZXNzLCBsZXZlbCk7DQorICAgIGVsc2UNCisJY29k
ZSA9IFN0YXJ0QUZTVm9sUmVzdG9yZSh0Y2FsbCwgZGVzdFRyYW5zLCAoZnJvbURhdGU/IDEgOiAw
KSwgY29va2llKTsNCiAgICAgaWYgKGNvZGUpIHsNCiAJZ290byBmYWlsOw0KICAgICB9DQogDQog
ICAgIC8qIHRoZXNlIG5leHQgY2FsbHMgaW1wbGljdGx5IGNhbGwgcnhfV3JpdGUgd2hlbiB3cml0
aW5nIG91dCBkYXRhICovDQotICAgIGNvZGUgPSBEdW1wVm9sdW1lKHRjYWxsLCB2cCwgZnJvbURh
dGUsIDApOy8qIGxhc3QgZmllbGQgPSBkb24ndCBkdW1wIGFsbCBkaXJzICovDQorICAgIGNvZGUg
PSBEdW1wVm9sdW1lKHRjYWxsLCB2cCwgZnJvbURhdGUsIDAsIC8qIGxhc3QgZmllbGQgPSBkb24n
dCBkdW1wIGFsbCBkaXJzICovDQorICAgICAgICBjb21wcmVzcywgbGV2ZWwpOw0KICAgICBpZiAo
Y29kZSkgZ290byBmYWlsOw0KLSAgICBFbmRBRlNWb2xSZXN0b3JlKHRjYWxsKTsJCSAgICAvKiBw
cm9iYWJseSBkb2Vzbid0IGRvIG11Y2ggKi8NCisgICAgaWYgKGNvbXByZXNzKQ0KKwlFbmRBRlNW
b2xSZXN0b3JlWih0Y2FsbCk7DQorICAgIGVsc2UNCisJRW5kQUZTVm9sUmVzdG9yZSh0Y2FsbCk7
CQkgICAgLyogcHJvYmFibHkgZG9lc24ndCBkbyBtdWNoICovDQorDQogICAgIHR0LT5yeENhbGxQ
dHIgPSAoc3RydWN0IHJ4X2NhbGwgKikwOw0KICAgICBjb2RlID0gcnhfRW5kQ2FsbCh0Y2FsbCwg
MCk7DQogICAgIHJ4X0Rlc3Ryb3lDb25uZWN0aW9uKHRjb24pOyAvKiBkb25lIHdpdGggdGhlIGNv
bm5lY3Rpb24gKi8NCkBAIC0xMTMzLDggKzExNjQsOCBAQA0KICAqIG5lZWQganVzdCBhbiBpbmNy
ZW1lbnRhbCAoYW5kIGZyb20gdGhlIHNhbWUgdGltZSksIGlmIHRoYXQncyANCiAgKiB3aGF0IHdl
J3JlIGRvaW5nLiANCiAgKi8NCi1hZnNfaW50MzIgU0FGU1ZvbEZvcndhcmRNdWx0aXBsZSAoYWNp
ZCwgZnJvbVRyYW5zLCBmcm9tRGF0ZSwgZGVzdGluYXRpb25zLCANCi0JCQkgICAgICBzcGFyZSwg
Y29va2llLCByZXN1bHRzKQ0KK2Fmc19pbnQzMiBWb2xGb3J3YXJkTXVsdGlwbGVHZW5lcmFsIChh
Y2lkLCBmcm9tVHJhbnMsIGZyb21EYXRlLCBkZXN0aW5hdGlvbnMsIA0KKwkJCSAgICAgIHNwYXJl
LCBjb29raWUsIHJlc3VsdHMsIGNvbXByZXNzLCBsZXZlbCkNCiAgICAgIHN0cnVjdCByeF9jYWxs
ICphY2lkOw0KICAgICAgYWZzX2ludDMyIGZyb21UcmFuczsNCiAgICAgIGFmc19pbnQzMiBmcm9t
RGF0ZTsNCkBAIC0xMTQyLDYgKzExNzMsOCBAQA0KICAgICAgbWFueURlc3RzICpkZXN0aW5hdGlv
bnM7DQogICAgICBzdHJ1Y3QgcmVzdG9yZUNvb2tpZSAqY29va2llOw0KICAgICAgbWFueVJlc3Vs
dHMgKnJlc3VsdHM7DQorICAgICBpbnQgY29tcHJlc3M7DQorICAgICBpbnQgbGV2ZWw7DQogew0K
ICAgYWZzX2ludDMyIHNlY3VyaXR5SW5kZXg7DQogICBzdHJ1Y3Qgcnhfc2VjdXJpdHlDbGFzcyAq
c2VjdXJpdHlPYmplY3Q7DQpAQCAtMTE5Niw4ICsxMjI5LDEyIEBADQogICAgICAgaWYgKCEodGNh
bGxzW2ldID0gcnhfTmV3Q2FsbCh0Y29uc1tpXSkpKQ0KIAljb2Rlc1tpXT1FTk9UQ09OTjsNCiAg
ICAgICBlbHNlIHsNCi0JY29kZXNbaV0gPSBTdGFydEFGU1ZvbFJlc3RvcmUodGNhbGxzW2ldLCBk
ZXN0LT50cmFucywNCi0JCQkJICAgICAgaXNfaW5jcmVtZW50YWwsY29va2llKTsNCisgICAgICAg
IGlmIChjb21wcmVzcykNCisJCWNvZGVzW2ldID0gU3RhcnRBRlNWb2xSZXN0b3JlWih0Y2FsbHNb
aV0sIGRlc3QtPnRyYW5zLA0KKwkJCQkJCWlzX2luY3JlbWVudGFsLGNvb2tpZSwgY29tcHJlc3Ms
IGxldmVsKTsNCisJZWxzZQ0KKwkJY29kZXNbaV0gPSBTdGFydEFGU1ZvbFJlc3RvcmUodGNhbGxz
W2ldLCBkZXN0LT50cmFucywNCisJCQkJCQlpc19pbmNyZW1lbnRhbCxjb29raWUpOw0KIAlpZiAo
Y29kZXNbaV0pIHsNCiAJICByeF9FbmRDYWxsICh0Y2FsbHNbaV0sMCk7IHRjYWxsc1tpXSA9IDA7
DQogCSAgcnhfRGVzdHJveUNvbm5lY3Rpb24odGNvbnNbaV0pOyB0Y29uc1tpXSA9IDA7DQpAQCAt
MTIwNyw3ICsxMjQ0LDcgQEANCiAgIH0NCiAgIA0KICAgLyogdGhlc2UgbmV4dCBjYWxscyBpbXBs
aWN0bHkgY2FsbCByeF9Xcml0ZSB3aGVuIHdyaXRpbmcgb3V0IGRhdGEgKi8NCi0gIGNvZGUgPSBE
dW1wVm9sTXVsdGkodGNhbGxzLCBpLCB2cCwgZnJvbURhdGUsIDAsIGNvZGVzKTsNCisgIGNvZGUg
PSBEdW1wVm9sTXVsdGkodGNhbGxzLCBpLCB2cCwgZnJvbURhdGUsIDAsIGNvZGVzLCBjb21wcmVz
cywgbGV2ZWwpOw0KICAgDQogDQogZmFpbDoNCkBAIC0xMjE1LDcgKzEyNTIsMTAgQEANCiAgICAg
ICBzdHJ1Y3QgcmVwbGljYSAqZGVzdCA9ICYoZGVzdGluYXRpb25zLT5tYW55RGVzdHNfdmFsW2ld
KTsNCiANCiAgICAgICBpZiAoIWNvZGUgJiYgdGNhbGxzW2ldICYmICFjb2Rlc1tpXSkgew0KLSAg
ICAgICAgICBFbmRBRlNWb2xSZXN0b3JlKHRjYWxsc1tpXSk7DQorICAgICAgICAgIGlmIChjb21w
cmVzcykNCisgICAgICAgICAgICAgIEVuZEFGU1ZvbFJlc3RvcmVaKHRjYWxsc1tpXSk7DQorICAg
ICAgICAgIGVsc2UNCisgICAgICAgICAgICAgIEVuZEFGU1ZvbFJlc3RvcmUodGNhbGxzW2ldKTsN
CiAgICAgICB9DQogICAgICAgaWYgKHRjYWxsc1tpXSkgew0KICAgICAgICAgICBlYyA9IHJ4X0Vu
ZENhbGwodGNhbGxzW2ldLCAwKTsNCkBAIC0xMjM5LDYgKzEyNzksMzYgQEANCiAgIH0NCiAgICAN
CiAgIHJldHVybiBjb2RlOw0KK30gLy9Wb2xGb3J3YXJkTXVsdGlwbGVHZW5lcmFsDQorDQorYWZz
X2ludDMyIFNBRlNWb2xGb3J3YXJkTXVsdGlwbGUgKGFjaWQsIGZyb21UcmFucywgZnJvbURhdGUs
IGRlc3RpbmF0aW9ucywgDQorCQkJICAgICAgc3BhcmUsIGNvb2tpZSwgcmVzdWx0cykNCisgICAg
IHN0cnVjdCByeF9jYWxsICphY2lkOw0KKyAgICAgYWZzX2ludDMyIGZyb21UcmFuczsNCisgICAg
IGFmc19pbnQzMiBmcm9tRGF0ZTsNCisgICAgIGFmc19pbnQzMiBzcGFyZTsNCisgICAgIG1hbnlE
ZXN0cyAqZGVzdGluYXRpb25zOw0KKyAgICAgc3RydWN0IHJlc3RvcmVDb29raWUgKmNvb2tpZTsN
CisgICAgIG1hbnlSZXN1bHRzICpyZXN1bHRzOw0KK3sNCisJcmV0dXJuIFZvbEZvcndhcmRNdWx0
aXBsZUdlbmVyYWwoYWNpZCwgZnJvbVRyYW5zLCBmcm9tRGF0ZSwgZGVzdGluYXRpb25zLA0KKwkJ
c3BhcmUsIGNvb2tpZSwgcmVzdWx0cywgMCwgMCk7DQorfQ0KKw0KK2Fmc19pbnQzMiBTQUZTVm9s
Rm9yd2FyZE11bHRpcGxlWiAoYWNpZCwgZnJvbVRyYW5zLCBmcm9tRGF0ZSwgZGVzdGluYXRpb25z
LA0KKwkJCSAgICAgIHNwYXJlLCBjb29raWUsIHJlc3VsdHMsIGNvbXByZXNzLCBsZXZlbCkNCisg
ICAgIHN0cnVjdCByeF9jYWxsICphY2lkOw0KKyAgICAgYWZzX2ludDMyIGZyb21UcmFuczsNCisg
ICAgIGFmc19pbnQzMiBmcm9tRGF0ZTsNCisgICAgIGFmc19pbnQzMiBzcGFyZTsNCisgICAgIG1h
bnlEZXN0cyAqZGVzdGluYXRpb25zOw0KKyAgICAgc3RydWN0IHJlc3RvcmVDb29raWUgKmNvb2tp
ZTsNCisgICAgIG1hbnlSZXN1bHRzICpyZXN1bHRzOw0KKyAgICAgYWZzX2ludDMyIGNvbXByZXNz
Ow0KKyAgICAgYWZzX2ludDMyIGxldmVsOw0KK3sNCisJcmV0dXJuIFZvbEZvcndhcmRNdWx0aXBs
ZUdlbmVyYWwoYWNpZCwgZnJvbVRyYW5zLCBmcm9tRGF0ZSwgZGVzdGluYXRpb25zLA0KKwkJc3Bh
cmUsIGNvb2tpZSwgcmVzdWx0cywgKGludCljb21wcmVzcywgKGludClsZXZlbCk7DQogfQ0KIA0K
IGFmc19pbnQzMiBTQUZTVm9sRHVtcCAoYWNpZCwgZnJvbVRyYW5zLCBmcm9tRGF0ZSkNCkBAIC0x
MjQ4LDE1ICsxMzE4LDMxIEBADQogew0KICAgYWZzX2ludDMyIGNvZGU7DQogDQotICBjb2RlID0g
Vm9sRHVtcCAoYWNpZCwgZnJvbVRyYW5zLCBmcm9tRGF0ZSk7DQorICBjb2RlID0gVm9sRHVtcCAo
YWNpZCwgZnJvbVRyYW5zLCBmcm9tRGF0ZSwgMCwgMCk7DQogICBvc2lfYXVkaXRVKGFjaWQsIFZT
X0R1bXBFdmVudCwgY29kZSwgQVVEX0xPTkcsIGZyb21UcmFucywgQVVEX0VORCk7DQogICByZXR1
cm4gY29kZTsNCiB9DQogDQotYWZzX2ludDMyIFZvbER1bXAgKGFjaWQsIGZyb21UcmFucywgZnJv
bURhdGUpDQorYWZzX2ludDMyIFNBRlNWb2xEdW1wWiAoYWNpZCwgZnJvbVRyYW5zLCBmcm9tRGF0
ZSwgY29tcHJlc3MsIGxldmVsKQ0KIHN0cnVjdCByeF9jYWxsICphY2lkOw0KIGFmc19pbnQzMiBm
cm9tVHJhbnM7DQotYWZzX2ludDMyIGZyb21EYXRlOyANCithZnNfaW50MzIgZnJvbURhdGU7DQor
YWZzX2ludDMyIGNvbXByZXNzOw0KK2Fmc19pbnQzMiBsZXZlbDsNCit7DQorICBhZnNfaW50MzIg
Y29kZTsNCisNCisgIGNvZGUgPSBWb2xEdW1wIChhY2lkLCBmcm9tVHJhbnMsIGZyb21EYXRlLCAo
aW50KWNvbXByZXNzLCAoaW50KWxldmVsKTsNCisgIG9zaV9hdWRpdFUoYWNpZCwgVlNfRHVtcEV2
ZW50LCBjb2RlLCBBVURfTE9ORywgZnJvbVRyYW5zLCBBVURfRU5EKTsNCisgIHJldHVybiBjb2Rl
Ow0KK30NCisNCithZnNfaW50MzIgVm9sRHVtcCAoYWNpZCwgZnJvbVRyYW5zLCBmcm9tRGF0ZSwg
Y29tcHJlc3MsIGxldmVsKQ0KK3N0cnVjdCByeF9jYWxsICphY2lkOw0KK2Fmc19pbnQzMiBmcm9t
VHJhbnM7DQorYWZzX2ludDMyIGZyb21EYXRlOw0KK2ludCBjb21wcmVzczsNCitpbnQgbGV2ZWw7
DQogew0KICAgICBpbnQgY29kZSA9IDA7DQogICAgIHJlZ2lzdGVyIHN0cnVjdCB2b2xzZXJfdHJh
bnMgKnR0Ow0KQEAgLTEyNzIsNyArMTM1OCw4IEBADQogICAgIH0NCiAgICAgc3RyY3B5KHR0LT5s
YXN0UHJvY05hbWUsIkR1bXAiKTsNCiAgICAgdHQtPnJ4Q2FsbFB0ciA9IGFjaWQ7DQotICAgIGNv
ZGUgPSBEdW1wVm9sdW1lKGFjaWQsIHR0LT52b2x1bWUsIGZyb21EYXRlLCAxKTsJLyogc3F1aXJ0
IG91dCB0aGUgdm9sdW1lJ3MgZGF0YSwgdG9vICovDQorICAgIGNvZGUgPSBEdW1wVm9sdW1lKGFj
aWQsIHR0LT52b2x1bWUsIGZyb21EYXRlLCAxLAkvKiBzcXVpcnQgb3V0IHRoZSB2b2x1bWUncyBk
YXRhLCB0b28gKi8NCisgICAgCWNvbXByZXNzLCBsZXZlbCk7DQogICAgIGlmKGNvZGUpe3R0LT5y
eENhbGxQdHIgPSAoc3RydWN0IHJ4X2NhbGwgKikwOyBUUkVMRSh0dCk7IHJldHVybiBjb2RlO30N
CiAgICAgdHQtPnJ4Q2FsbFB0ciA9IChzdHJ1Y3QgcnhfY2FsbCAqKTA7IA0KICAgICANCkBAIC0x
MjkyLDE2ICsxMzc5LDMzIEBADQogew0KICAgYWZzX2ludDMyIGNvZGU7DQogDQotICBjb2RlID0g
Vm9sUmVzdG9yZSAoYWNpZCwgYXRyYW5zLCBhZmxhZ3MsY29va2llKTsNCisgIGNvZGUgPSBWb2xS
ZXN0b3JlIChhY2lkLCBhdHJhbnMsIGFmbGFncyxjb29raWUsIDAsIDApOw0KICAgb3NpX2F1ZGl0
VShhY2lkLCBWU19SZXN0b3JlRXZlbnQsIGNvZGUsIEFVRF9MT05HLCBhdHJhbnMsIEFVRF9FTkQp
Ow0KICAgcmV0dXJuIGNvZGU7DQogfQ0KIA0KLWFmc19pbnQzMiBWb2xSZXN0b3JlIChhY2lkLCBh
dHJhbnMsIGFmbGFncyxjb29raWUpDQorYWZzX2ludDMyIFNBRlNWb2xSZXN0b3JlWiAoYWNpZCwg
YXRyYW5zLCBhZmxhZ3MsIGNvb2tpZSwgY29tcHJlc3MsIGxldmVsKQ0KIHN0cnVjdCByeF9jYWxs
ICphY2lkOw0KIGludCBhZmxhZ3M7DQotYWZzX2ludDMyIGF0cmFuczsgDQorYWZzX2ludDMyIGF0
cmFuczsNCitzdHJ1Y3QgcmVzdG9yZUNvb2tpZSAqY29va2llOw0KK2Fmc19pbnQzMiBjb21wcmVz
czsNCithZnNfaW50MzIgbGV2ZWw7DQorew0KKyAgYWZzX2ludDMyIGNvZGU7DQorDQorICBjb2Rl
ID0gVm9sUmVzdG9yZSAoYWNpZCwgYXRyYW5zLCBhZmxhZ3MsY29va2llLCAoaW50KWNvbXByZXNz
LCAoaW50KWxldmVsKTsNCisgIG9zaV9hdWRpdFUoYWNpZCwgVlNfUmVzdG9yZUV2ZW50LCBjb2Rl
LCBBVURfTE9ORywgYXRyYW5zLCBBVURfRU5EKTsNCisgIHJldHVybiBjb2RlOw0KK30NCisNCith
ZnNfaW50MzIgVm9sUmVzdG9yZSAoYWNpZCwgYXRyYW5zLCBhZmxhZ3MsY29va2llLCBjb21wcmVz
cywgbGV2ZWwpDQorc3RydWN0IHJ4X2NhbGwgKmFjaWQ7DQoraW50IGFmbGFnczsNCithZnNfaW50
MzIgYXRyYW5zOw0KIHN0cnVjdCByZXN0b3JlQ29va2llICpjb29raWU7DQoraW50IGNvbXByZXNz
Ow0KK2ludCBsZXZlbDsNCiB7DQogICAgIHJlZ2lzdGVyIHN0cnVjdCB2b2xzZXJfdHJhbnMgKnR0
Ow0KICAgICByZWdpc3RlciBhZnNfaW50MzIgY29kZSx0Y29kZTsNCkBAIC0xMzIwLDcgKzE0MjQs
OCBAQA0KIA0KICAgICBERmx1c2hWb2x1bWUoVl9wYXJlbnRJZCh0dC0+dm9sdW1lKSk7IC8qIEVu
c3VyZSBkaXIgYnVmZmVycyBnZXQgZHJvcHBlZCAqLw0KIA0KLSAgICBjb2RlID0gUmVzdG9yZVZv
bHVtZShhY2lkLCB0dC0+dm9sdW1lLCAoYWZsYWdzICYgMSksY29va2llKTsgICAvKiBsYXN0IGlz
IGluY3JlbWVudGFscCAqLw0KKyAgICBjb2RlID0gUmVzdG9yZVZvbHVtZShhY2lkLCB0dC0+dm9s
dW1lLCAoYWZsYWdzICYgMSksY29va2llLCAgIC8qIGxhc3QgaXMgaW5jcmVtZW50YWxwICovDQor
CQljb21wcmVzcywgbGV2ZWwpOw0KICAgICBGU1lOQ19hc2tmcyh0dC0+dm9saWQsIChjaGFyICop
IDAsIEZTWU5DX1JFU1RPUkVWT0xVTUUsIDBsKTsvKmJyZWFrIGNhbGwgYmFja3Mgb24gdGhlDQog
CQkJCQkJICAgICByZXN0b3JlZCB2b2x1bWUgKi8NCiAgICAgdHQtPnJ4Q2FsbFB0ciA9IChzdHJ1
Y3QgcnhfY2FsbCAqKTA7IA0KZGlmZiAtTmF1ciBvcGVuYWZzLTEuMi4xMy9zcmMvdm9sc2VyL3Zv
cy5jIG9wZW5hZnMtMS4yLjEzei9zcmMvdm9sc2VyL3Zvcy5jDQotLS0gb3BlbmFmcy0xLjIuMTMv
c3JjL3ZvbHNlci92b3MuYwkyMDAyLTExLTE0IDIyOjQwOjQzLjAwMDAwMDAwMCArMDEwMA0KKysr
IG9wZW5hZnMtMS4yLjEzei9zcmMvdm9sc2VyL3Zvcy5jCTIwMDQtMTItMjEgMTE6MTI6MjIuMDAw
MDAwMDAwICswMTAwDQpAQCAtNTEsNiArNTEsOCBAQA0KICNpbmNsdWRlIDxzaWduYWwuaD4NCiAj
ZW5kaWYNCiANCisjaW5jbHVkZSAiemlvcnguaCINCisNCiBzdHJ1Y3QgdHFFbGVtIHsNCiAgICAg
YWZzX2ludDMyIHZvbGlkOw0KICAgICBzdHJ1Y3QgdHFFbGVtICpuZXh0Ow0KQEAgLTI3NCwxMSAr
Mjc2LDE0IEBADQogDQogIC8qc2VuZHMgdGhlIGNvbnRlbnRzIG9mIGZpbGUgYXNzb2NpYXRlZCB3
aXRoIDxmZD4gYW5kIDxibGtzaXplPiAgdG8gUnggU3RyZWFtIA0KICogYXNzb2NpYXRlZCAgd2l0
aCA8Y2FsbD4gKi8NCi1TZW5kRmlsZSh1ZmQsIGNhbGwsIGJsa3NpemUpDQorU2VuZEZpbGUodWZk
LCBjYWxsLCBibGtzaXplLCBjb21wcmVzcywgbGV2ZWwpDQogdXNkX2hhbmRsZV90IHVmZDsNCiBy
ZWdpc3RlciBzdHJ1Y3QgcnhfY2FsbCAqY2FsbDsNCiBsb25nIGJsa3NpemU7DQoraW50IGNvbXBy
ZXNzOw0KK2ludCBsZXZlbDsNCiB7DQorICAgIHN0cnVjdCB6aW9yeF9jYWxsIHpjYWxsOw0KICAg
ICBjaGFyICpidWZmZXIgPSAoY2hhciopIDA7DQogICAgIGFmc19pbnQzMiBlcnJvciA9IDA7DQog
ICAgIGludCBkb25lID0gMDsNCkBAIC0yODksNiArMjk0LDEyIEBADQogCWZwcmludGYoU1RERVJS
LCJtYWxsb2MgZmFpbGVkXG4iKTsNCiAJcmV0dXJuIC0xOw0KICAgICB9DQorICAgIA0KKyAgICBp
ZiAoemlvcnhCZWdpbldyaXRlKGNhbGwsIGNvbXByZXNzLCBsZXZlbCwgJnpjYWxsKSE9WklPUlhf
T0spDQorICAgIHsNCisgICAgICAgIGZwcmludGYoU1RERVJSLCAiU2VuZEZpbGU6IHppb3J4QmVn
aW5SZWFkIGZhaWxlZFxuIik7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCiANCiAgICAg
d2hpbGUgKCFlcnJvciAmJiAhZG9uZSkgew0KICNpZm5kZWYgQUZTX05UNDBfRU5WICAvKiBOVCBj
c24ndCBzZWxlY3Qgb24gbm9uLXNvY2tldCBmZCdzICovDQpAQCAtMzA3LDIwICszMTgsMjkgQEAN
CiAJICAgIGRvbmUgPSAxOw0KIAkgICAgYnJlYWs7DQogCX0NCi0JaWYgKHJ4X1dyaXRlKGNhbGws
IGJ1ZmZlciwgbmJ5dGVzKSAhPSBuYnl0ZXMpew0KKwlpZiAoemlvcnhXcml0ZSgmemNhbGwsIGJ1
ZmZlciwgbmJ5dGVzKSAhPSBuYnl0ZXMpew0KIAkgICAgZXJyb3IgPSAtMTsNCiAJICAgIGJyZWFr
Ow0KIAl9DQogICAgIH0NCisNCisgICAgaWYgKHppb3J4RW5kV3JpdGUoJnpjYWxsKSE9WklPUlhf
T0spDQorICAgIHsNCisgICAgICAgIGZwcmludGYoU1RERVJSLCAiU2VuZEZpbGU6IHppb3J4RW5k
V3JpdGUgZmFpbGVkXG4iKTsNCisgICAgICAgIGVycm9yID0gLTE7DQorICAgIH0NCisNCiAgICAg
aWYgKGJ1ZmZlcikgZnJlZShidWZmZXIpOw0KICAgICByZXR1cm4gZXJyb3I7DQogfQ0KIA0KIC8q
IGZ1bmN0aW9uIGludm9rZWQgYnkgVVZfUmVzdG9yZVZvbHVtZSwgcmVhZHMgdGhlIGRhdGEgZnJv
bSByeF90cnhfc3RyZWFtIGFuZA0KICAqIHdyaXRlcyBpdCBvdXQgdG8gdGhlIHZvbHVtZS4gKi8N
Ci1hZnNfaW50MzIgV3JpdGVEYXRhKGNhbGwscm9jaykNCithZnNfaW50MzIgV3JpdGVEYXRhKGNh
bGwscm9jayxjb21wcmVzcyxsZXZlbCkNCiBzdHJ1Y3QgcnhfY2FsbCAqY2FsbDsNCiBjaGFyICpy
b2NrOw0KK2ludCBjb21wcmVzczsNCitpbnQgbGV2ZWw7DQogew0KICAgICBjaGFyICpmaWxlbmFt
ZTsNCiAgICAgdXNkX2hhbmRsZV90IHVmZDsNCkBAIC0zNDcsNyArMzY3LDcgQEANCiAJICAgIGdv
dG8gd2ZhaWw7DQogICAgICAgICB9DQogICAgIH0NCi0gICAgY29kZSA9IFNlbmRGaWxlKHVmZCxj
YWxsLGJsa3NpemUpOw0KKyAgICBjb2RlID0gU2VuZEZpbGUodWZkLGNhbGwsYmxrc2l6ZSxjb21w
cmVzcyxsZXZlbCk7DQogICAgIGlmKGNvZGUpIHsNCiAJZXJyb3IgPSBjb2RlOw0KIAlnb3RvIHdm
YWlsOw0KQEAgLTM2NywxMSArMzg3LDE0IEBADQogLyogUmVjZWl2ZSBkYXRhIGZyb20gPGNhbGw+
IHN0cmVhbSBpbnRvIGZpbGUgYXNzb2NpYXRlZA0KICAqIHdpdGggPGZkPiA8Ymxrc2l6ZT4NCiAg
Ki8NCi1pbnQgUmVjZWl2ZUZpbGUodWZkLCBjYWxsLCBibGtzaXplKQ0KK2ludCBSZWNlaXZlRmls
ZSh1ZmQsIGNhbGwsIGJsa3NpemUsIGNvbXByZXNzLCBsZXZlbCkNCiAgICAgdXNkX2hhbmRsZV90
IHVmZDsNCiAgICAgc3RydWN0IHJ4X2NhbGwgKmNhbGw7DQogICAgIGxvbmcgYmxrc2l6ZTsNCisg
ICAgaW50IGNvbXByZXNzOw0KKyAgICBpbnQgbGV2ZWw7DQogew0KKyAgICBzdHJ1Y3Qgemlvcnhf
Y2FsbCB6Y2FsbDsNCiAgICAgY2hhciAqYnVmZmVyID0gKGNoYXIgKikgMDsNCiAgICAgYWZzX2lu
dDMyICBieXRlc3JlYWQ7DQogICAgIGFmc191aW50MzIgIGJ5dGVzbGVmdCwgdzsNCkBAIC0zODAs
MTAgKzQwMywxNyBAQA0KICAgICBidWZmZXIgPSAoY2hhciAqKW1hbGxvYyhibGtzaXplKTsNCiAg
ICAgaWYgKCFidWZmZXIpIHsNCiAgICAgICAgZnByaW50ZihTVERFUlIsIm1lbW9yeSBhbGxvY2F0
aW9uIGZhaWxlZFxuIik7DQotICAgICAgIEVSUk9SX0VYSVQoLTEpOw0KKyAgICAgICByZXR1cm4g
KC0xKTsNCiAgICAgfQ0KIA0KLSAgICB3aGlsZSAoKGJ5dGVzcmVhZD1yeF9SZWFkKGNhbGwsYnVm
ZmVyLGJsa3NpemUpKSA+IDApIHsNCisgICAgaWYgKHppb3J4QmVnaW5SZWFkKGNhbGwsIGNvbXBy
ZXNzLCBsZXZlbCwgJnpjYWxsKSE9WklPUlhfT0spDQorICAgIHsNCisgICAgICAgIGZwcmludGYo
U1RERVJSLCAiUmVjZWl2ZUZpbGU6IHppb3J4QmVnaW5SZWFkIGZhaWxlZFxuIik7DQorCWZyZWUo
YnVmZmVyKTsNCisgICAgICAgIHJldHVybiAoLTEpOw0KKyAgICB9DQorDQorICAgIHdoaWxlICgo
Ynl0ZXNyZWFkPXppb3J4UmVhZCgmemNhbGwsYnVmZmVyLGJsa3NpemUpKSA+IDApIHsNCiAgICAg
ICAgZm9yIChieXRlc2xlZnQ9Ynl0ZXNyZWFkOyBieXRlc2xlZnQ7IGJ5dGVzbGVmdC09dykgew0K
ICNpZm5kZWYgQUZTX05UNDBfRU5WICAvKiBOVCBjc24ndCBzZWxlY3Qgb24gbm9uLXNvY2tldCBm
ZCdzICovDQogCSAgZmRfc2V0IG91dDsNCkBAIC00MDAsMTQgKzQzMCwyNyBAQA0KICAgICAgICB9
DQogICAgIH0NCiANCisgICAgaWYgKGJ5dGVzcmVhZDwwKQ0KKyAgICB7DQorCWZwcmludGYoc3Rk
ZXJyLCAiUmVhZCBlcnJvciAoJWQpXG4iLCBieXRlc3JlYWQpOw0KKwlFUlJPUl9FWElUKC0xKTsN
CisgICAgfQ0KKw0KICAgZXJyb3JfZXhpdDoNCisgICAgaWYgKHppb3J4RW5kUmVhZCgmemNhbGwp
IT1aSU9SWF9PSykNCisgICAgew0KKyAgICAgICAgZnByaW50ZihTVERFUlIsICJSZWNlaXZlRmls
ZTogemlvcnhFbmRSZWFkIGZhaWxlZFxuIik7DQorICAgICAgICBlcnJvciA9IC0xOw0KKyAgICB9
DQogICAgIGlmIChidWZmZXIpIGZyZWUoYnVmZmVyKTsNCiAgICAgcmV0dXJuKGVycm9yKTsNCiB9
DQogDQotYWZzX2ludDMyIER1bXBGdW5jdGlvbihjYWxsLCBmaWxlbmFtZSkNCithZnNfaW50MzIg
RHVtcEZ1bmN0aW9uKGNhbGwsIGZpbGVuYW1lLCBjb21wcmVzcywgbGV2ZWwpDQogICAgIHN0cnVj
dCByeF9jYWxsICpjYWxsOw0KICAgICBjaGFyICpmaWxlbmFtZTsNCisgICAgaW50IGNvbXByZXNz
Ow0KKyAgICBpbnQgbGV2ZWw7DQogew0KICAgICB1c2RfaGFuZGxlX3QgdWZkOyAgICAgICAgICAg
ICAvKiBkZWZhdWx0IGlzIHRvIHN0ZG91dCAqLw0KICAgICBhZnNfaW50MzIgZXJyb3I9MCwgY29k
ZTsNCkBAIC00MzYsNyArNDc5LDcgQEANCiAgICAgICAgIH0NCiAgICAgfQ0KIA0KLSAgICBjb2Rl
ID0gUmVjZWl2ZUZpbGUodWZkLCBjYWxsLCBibGtzaXplKTsNCisgICAgY29kZSA9IFJlY2VpdmVG
aWxlKHVmZCwgY2FsbCwgYmxrc2l6ZSwgY29tcHJlc3MsIGxldmVsKTsNCiAgICAgaWYgKGNvZGUp
IEVSUk9SX0VYSVQoY29kZSk7DQogDQogICBlcnJvcl9leGl0Og0KQEAgLTE2NzgsMTMgKzE3MjEs
MzAgQEANCiAgICAgcmV0dXJuIDA7DQogfQ0KIA0KK3N0YXRpYyB2b2lkIFBhcnNlUGFyYW1aKHBk
LCBjb21wcmVzcywgbGV2ZWwpDQorCQlzdHJ1Y3QgY21kX3Bhcm1kZXNjICpwZDsNCitpbnQgKmNv
bXByZXNzOw0KK2ludCAqbGV2ZWw7DQorew0KKwlpZiAocGQtPml0ZW1zKQ0KKwl7DQorCQkqY29t
cHJlc3MgPSAoMT09MSk7DQorCQkqbGV2ZWwgPSBwZC0+aXRlbXMtPmRhdGFbMF0gLSAnMCc7DQor
CQlpZiAoKmxldmVsPDAgfHwgKmxldmVsPjkpDQorCQkJKmxldmVsID0gWl9ERUZBVUxUX0NPTVBS
RVNTSU9OOw0KKwl9IGVsc2Ugew0KKwkJKmNvbXByZXNzID0gKDA9PTEpOw0KKwkJKmxldmVsID0g
MDsNCisJfQ0KK30NCisNCiAjZGVmaW5lIFRFU1RNCTAJLyogc2V0IGZvciBtb3ZlIHNwYWNlIHRl
c3RzLCBjbGVhciBmb3IgcHJvZHVjdGlvbiAqLw0KIHN0YXRpYyBNb3ZlVm9sdW1lKGFzKQ0KIHJl
Z2lzdGVyIHN0cnVjdCBjbWRfc3luZGVzYyAqYXM7DQogew0KLSAgICANCiAgICAgYWZzX2ludDMy
IHZvbGlkLCBmcm9tc2VydmVyLCB0b3NlcnZlciwgZnJvbXBhcnQsIHRvcGFydCxjb2RlLCBlcnI7
DQogICAgIGNoYXIgZnJvbVBhcnROYW1lWzEwXSwgdG9QYXJ0TmFtZVsxMF07DQorICAgIGludCBj
b21wcmVzcywgbGV2ZWw7DQogDQogCXN0cnVjdCBkaXNrUGFydGl0aW9uIHBhcnRpdGlvbjsJCS8q
IGZvciBzcGFjZSBjaGVjayAqLw0KIAl2b2xpbnRJbmZvICpwOw0KQEAgLTE3MjYsNyArMTc4Niw3
IEBADQogCSAgICBlbHNlIGZwcmludGYoU1RERVJSLCJ2b3MgOiBwYXJ0aXRpb24gJXMgZG9lcyBu
b3QgZXhpc3Qgb24gdGhlIHNlcnZlclxuIixhcy0+cGFybXNbNF0uaXRlbXMtPmRhdGEpOw0KIAkg
ICAgcmV0dXJuIEVOT0VOVDsNCiAJfQ0KLQ0KKwlQYXJzZVBhcmFtWigmKGFzLT5wYXJtc1s1XSks
ICZjb21wcmVzcywgJmxldmVsKTsNCiAJLyoNCiAJCWNoZWNrIHNvdXJjZSBwYXJ0aXRpb24gZm9y
IHNwYWNlIHRvIGNsb25lIHZvbHVtZQ0KIAkqLw0KQEAgLTE3NzQsOCArMTgzNCw4IEBADQogCX0N
CiANCiAJLyogc3VjY2Vzc2Z1bCBtb3ZlIHN0aWxsIG5vdCBndWFyYW50ZWVkIGJ1dCBzaG9vdCBm
b3IgaXQgKi8NCi0NCi0JY29kZSA9IFVWX01vdmVWb2x1bWUodm9saWQsIGZyb21zZXJ2ZXIsIGZy
b21wYXJ0LCB0b3NlcnZlciwgdG9wYXJ0KTsNCisJY29kZSA9IFVWX01vdmVWb2x1bWUodm9saWQs
IGZyb21zZXJ2ZXIsIGZyb21wYXJ0LCB0b3NlcnZlciwgdG9wYXJ0LA0KKwkJY29tcHJlc3MsIGxl
dmVsKTsNCiAJaWYgKGNvZGUpIHsNCiAJICAgIFByaW50RGlhZ25vc3RpY3MoIm1vdmUiLCBjb2Rl
KTsNCiAJICAgIHJldHVybiBjb2RlOw0KQEAgLTE3ODYsNiArMTg0Niw3IEBADQogDQogICAgIHJl
dHVybiAwOw0KIH0NCisNCiBzdGF0aWMgQmFja3VwVm9sdW1lKGFzKQ0KIHJlZ2lzdGVyIHN0cnVj
dCBjbWRfc3luZGVzYyAqYXM7DQogew0KQEAgLTE4NTEsMTMgKzE5MTIsMTQgQEANCiAJZnByaW50
ZihTVERPVVQsIkNyZWF0ZWQgYmFja3VwIHZvbHVtZSBmb3IgJXMgXG4iLGFzLT5wYXJtc1swXS5p
dGVtcy0+ZGF0YSk7IA0KICAgIHJldHVybiAwOw0KIH0NCisNCiBzdGF0aWMgUmVsZWFzZVZvbHVt
ZShhcykNCiByZWdpc3RlciBzdHJ1Y3QgY21kX3N5bmRlc2MgKmFzOw0KIHsNCi0NCiAgICAgc3Ry
dWN0IG52bGRiZW50cnkgZW50cnk7DQogICAgIGFmc19pbnQzMiBhdm9saWQsIGFzZXJ2ZXIsIGFw
YXJ0LHZ0eXBlLGNvZGUsIGVycjsNCiAgICAgaW50IGZvcmNlID0gMDsNCisgICAgaW50IGNvbXBy
ZXNzLCBsZXZlbDsNCiANCiAgICAgaWYoYXMtPnBhcm1zWzFdLml0ZW1zKSBmb3JjZSA9IDE7DQog
ICAgIGF2b2xpZCA9IHZzdV9HZXRWb2x1bWVJRChhcy0+cGFybXNbMF0uaXRlbXMtPmRhdGEsIGNz
dHJ1Y3QsICZlcnIpOw0KQEAgLTE4NzksNyArMTk0MSw5IEBADQogCXJldHVybiBFMkJJRzsNCiAg
ICAgfQ0KIA0KLSAgICBjb2RlID0gVVZfUmVsZWFzZVZvbHVtZShhdm9saWQsIGFzZXJ2ZXIsIGFw
YXJ0LCBmb3JjZSk7DQorICAgIFBhcnNlUGFyYW1aKCYoYXMtPnBhcm1zWzJdKSwgJmNvbXByZXNz
LCAmbGV2ZWwpOw0KKw0KKyAgICBjb2RlID0gVVZfUmVsZWFzZVZvbHVtZShhdm9saWQsIGFzZXJ2
ZXIsIGFwYXJ0LCBmb3JjZSwgY29tcHJlc3MsIGxldmVsKTsNCiAgICAgaWYgKGNvZGUpIHsNCiAJ
UHJpbnREaWFnbm9zdGljcygicmVsZWFzZSIsIGNvZGUpOw0KIAlyZXR1cm4gY29kZTsNCkBAIC0x
ODg3LDEzICsxOTUxLDE0IEBADQogICAgIGZwcmludGYoU1RET1VULCJSZWxlYXNlZCB2b2x1bWUg
JXMgc3VjY2Vzc2Z1bGx5XG4iLGFzLT5wYXJtc1swXS5pdGVtcy0+ZGF0YSApOw0KICAgICByZXR1
cm4gMDsNCiB9DQorDQogc3RhdGljIER1bXBWb2x1bWUoYXMpDQogcmVnaXN0ZXIgc3RydWN0IGNt
ZF9zeW5kZXNjICphczsNCi0NCiB7ICAgIA0KICAgICAgICAgYWZzX2ludDMyIGF2b2xpZCwgYXNl
cnZlciwgYXBhcnQsdm9sdHlwZSxmcm9tZGF0ZT0wLGNvZGUsIGVyciwgaTsNCiAJY2hhciBmaWxl
bmFtZVtOYW1lTGVuXTsNCiAJc3RydWN0IG52bGRiZW50cnkgZW50cnk7DQorCWludCBjb21wcmVz
cywgbGV2ZWw7DQogDQogCXJ4X1NldFJ4RGVhZFRpbWUoNjAgKiAxMCk7DQogCWZvciAoaSA9IDA7
IGk8TUFYU0VSVkVSUzsgaSsrKSB7DQpAQCAtMTk0NCw3ICsyMDA5LDExIEBADQogCWVsc2V7DQog
CSAgICBzdHJjcHkoZmlsZW5hbWUsIiIpOw0KIAl9DQotCWNvZGUgPSBVVl9EdW1wVm9sdW1lKGF2
b2xpZCwgYXNlcnZlciwgYXBhcnQsIGZyb21kYXRlLCBEdW1wRnVuY3Rpb24sIGZpbGVuYW1lKTsN
CisJDQorCVBhcnNlUGFyYW1aKCYoYXMtPnBhcm1zWzVdKSwgJmNvbXByZXNzLCAmbGV2ZWwpOw0K
KwkNCisJY29kZSA9IFVWX0R1bXBWb2x1bWUoYXZvbGlkLCBhc2VydmVyLCBhcGFydCwgZnJvbWRh
dGUsIER1bXBGdW5jdGlvbiwgZmlsZW5hbWUsDQorCQljb21wcmVzcywgbGV2ZWwpOw0KIAlpZiAo
Y29kZSkgew0KIAkgICAgUHJpbnREaWFnbm9zdGljcygiZHVtcCIsIGNvZGUpOw0KIAkgICAgcmV0
dXJuIGNvZGU7DQpAQCAtMTk3Miw2ICsyMDQxLDcgQEANCiAJY2hhciBhZmlsZW5hbWVbTmFtZUxl
bl0sIGF2b2xuYW1lW1ZPTFNFUl9NQVhWT0xOQU1FICsxXSxhcGFydE5hbWVbMTBdOw0KIAljaGFy
IHZvbG5hbWVbVk9MU0VSX01BWFZPTE5BTUUgKzFdOw0KIAlzdHJ1Y3QgbnZsZGJlbnRyeSBlbnRy
eTsNCisJaW50IGNvbXByZXNzLCBsZXZlbDsNCiANCiAJcHJvbXB0ID0gJ24nOw0KIA0KQEAgLTIx
NDQsOCArMjIxNCwxMSBAQA0KIAl9DQogCWlmIChvZmZsaW5lKSAgcmVzdG9yZWZsYWdzIHw9IFJW
X09GRkxJTkU7DQogCWlmIChyZWFkb25seSkgcmVzdG9yZWZsYWdzIHw9IFJWX1JET05MWTsNCisJ
UGFyc2VQYXJhbVooJihhcy0+cGFybXNbOF0pLCAmY29tcHJlc3MsICZsZXZlbCk7DQorDQogCWNv
ZGUgPSBVVl9SZXN0b3JlVm9sdW1lKGFzZXJ2ZXIsIGFwYXJ0LCBhdm9saWQsIGF2b2xuYW1lLA0K
LQkJCQlyZXN0b3JlZmxhZ3MsIFdyaXRlRGF0YSwgYWZpbGVuYW1lKTsNCisJCQkJcmVzdG9yZWZs
YWdzLCBXcml0ZURhdGEsIGFmaWxlbmFtZSwNCisJCQkJY29tcHJlc3MsIGxldmVsKTsNCiAJaWYg
KGNvZGUpIHsNCiAJICAgIFByaW50RGlhZ25vc3RpY3MoInJlc3RvcmUiLCBjb2RlKTsNCiAJICAg
IGV4aXQoMSk7DQpAQCAtNDA5NCw2ICs0MTY3LDcgQEANCiAgICAgY21kX0FkZFBhcm0odHMsICIt
ZnJvbXBhcnRpdGlvbiIsIENNRF9TSU5HTEUsIDAsICJwYXJ0aXRpb24gbmFtZSBvbiBzb3VyY2Ui
KTsNCiAgICAgY21kX0FkZFBhcm0odHMsICItdG9zZXJ2ZXIiLCBDTURfU0lOR0xFLCAwLCAibWFj
aGluZSBuYW1lIG9uIGRlc3RpbmF0aW9uIik7DQogICAgIGNtZF9BZGRQYXJtKHRzLCAiLXRvcGFy
dGl0aW9uIiwgQ01EX1NJTkdMRSwgMCwgInBhcnRpdGlvbiBuYW1lIG9uIGRlc3RpbmF0aW9uIik7
DQorICAgIGNtZF9BZGRQYXJtKHRzLCAiLXoiLCBDTURfU0lOR0xFLCBDTURfT1BUSU9OQUwsICJj
b21wcmVzc2lvbiBsZXZlbCIpOw0KICAgICBDT01NT05QQVJNUzsNCiANCiAgICAgdHMgPSBjbWRf
Q3JlYXRlU3ludGF4KCJiYWNrdXAiLCBCYWNrdXBWb2x1bWUsIDAsICJtYWtlIGJhY2t1cCBvZiBh
IHZvbHVtZSIpOw0KQEAgLTQxMDMsNiArNDE3Nyw3IEBADQogICAgIHRzID0gY21kX0NyZWF0ZVN5
bnRheCgicmVsZWFzZSIsIFJlbGVhc2VWb2x1bWUsIDAsICJyZWxlYXNlIGEgdm9sdW1lIik7DQog
ICAgIGNtZF9BZGRQYXJtKHRzLCAiLWlkIiwgQ01EX1NJTkdMRSwgMCwgInZvbHVtZSBuYW1lIG9y
IElEIik7DQogICAgIGNtZF9BZGRQYXJtKHRzLCAiLWZvcmNlIiwgQ01EX0ZMQUcsIENNRF9PUFRJ
T05BTCwgImZvcmNlIGEgY29tcGxldGUgcmVsZWFzZSIpOw0KKyAgICBjbWRfQWRkUGFybSh0cywg
Ii16IiwgQ01EX1NJTkdMRSwgQ01EX09QVElPTkFMLCAiY29tcHJlc3Npb24gbGV2ZWwiKTsNCiAg
ICAgQ09NTU9OUEFSTVM7DQogDQogICAgIHRzID0gY21kX0NyZWF0ZVN5bnRheCgiZHVtcCIsIER1
bXBWb2x1bWUsIDAsICJkdW1wIGEgdm9sdW1lIik7DQpAQCAtNDExMSw2ICs0MTg2LDcgQEANCiAg
ICAgY21kX0FkZFBhcm0odHMsICItZmlsZSIsIENNRF9TSU5HTEUsIENNRF9PUFRJT05BTCwgImR1
bXAgZmlsZSIpOw0KICAgICBjbWRfQWRkUGFybSh0cywgIi1zZXJ2ZXIiLCBDTURfU0lOR0xFLCBD
TURfT1BUSU9OQUwsICJzZXJ2ZXIiKTsNCiAgICAgY21kX0FkZFBhcm0odHMsICItcGFydGl0aW9u
IiwgQ01EX1NJTkdMRSwgQ01EX09QVElPTkFMLCAicGFydGl0aW9uIik7DQorICAgIGNtZF9BZGRQ
YXJtKHRzLCAiLXoiLCBDTURfU0lOR0xFLCBDTURfT1BUSU9OQUwsICJjb21wcmVzc2lvbiBsZXZl
bCIpOw0KICAgICBDT01NT05QQVJNUzsNCiANCiAgICAgdHMgPSBjbWRfQ3JlYXRlU3ludGF4KCJy
ZXN0b3JlIiwgUmVzdG9yZVZvbHVtZSwgMCwgInJlc3RvcmUgYSB2b2x1bWUiKTsNCkBAIC00MTI0
LDYgKzQyMDAsNyBAQA0KIAkJImxlYXZlIHJlc3RvcmVkIHZvbHVtZSBvZmZsaW5lIik7DQogICAg
IGNtZF9BZGRQYXJtKHRzLCAiLXJlYWRvbmx5IiwgQ01EX0ZMQUcsIENNRF9PUFRJT05BTCwNCiAJ
CSJtYWtlIHJlc3RvcmVkIHZvbHVtZSByZWFkLW9ubHkiKTsNCisgICAgY21kX0FkZFBhcm0odHMs
ICIteiIsIENNRF9TSU5HTEUsIENNRF9PUFRJT05BTCwgImNvbXByZXNzaW9uIGxldmVsIik7DQog
ICAgIENPTU1PTlBBUk1TOw0KIA0KICAgICB0cyA9IGNtZF9DcmVhdGVTeW50YXgoInVubG9jayIs
IExvY2tSZWxlYXNlQ21kLCAwLCAicmVsZWFzZSBsb2NrIG9uIFZMREIgZW50cnkgZm9yIGEgdm9s
dW1lIik7DQpkaWZmIC1OYXVyIG9wZW5hZnMtMS4yLjEzL3NyYy92b2xzZXIvdnNwcm9jcy5jIG9w
ZW5hZnMtMS4yLjEzei9zcmMvdm9sc2VyL3ZzcHJvY3MuYw0KLS0tIG9wZW5hZnMtMS4yLjEzL3Ny
Yy92b2xzZXIvdnNwcm9jcy5jCTIwMDQtMTAtMTggMDc6MjM6MTMuMDAwMDAwMDAwICswMjAwDQor
Kysgb3BlbmFmcy0xLjIuMTN6L3NyYy92b2xzZXIvdnNwcm9jcy5jCTIwMDQtMTItMjEgMTU6MTE6
NDkuMDAwMDAwMDAwICswMTAwDQpAQCAtODQzLDEwICs4NDMsMTIgQEANCiAgKiA8YXRvcGFydD4u
IFRoZSBvcGVyYXRpb24gaXMgYWxtb3N0IGlkZW1wb3RlbnQgDQogICovDQogDQotVVZfTW92ZVZv
bHVtZShhZnJvbXZvbCwgYWZyb21zZXJ2ZXIsIGFmcm9tcGFydCwgYXRvc2VydmVyLCBhdG9wYXJ0
KQ0KK1VWX01vdmVWb2x1bWUoYWZyb212b2wsIGFmcm9tc2VydmVyLCBhZnJvbXBhcnQsIGF0b3Nl
cnZlciwgYXRvcGFydCwgY29tcHJlc3MsIGxldmVsKQ0KICAgICAgYWZzX2ludDMyIGFmcm9tdm9s
OyANCiAgICAgIGFmc19pbnQzMiBhZnJvbXNlcnZlciwgYXRvc2VydmVyOw0KICAgICAgYWZzX2lu
dDMyIGFmcm9tcGFydCwgICBhdG9wYXJ0Ow0KKyAgICAgaW50IGNvbXByZXNzOw0KKyAgICAgaW50
IGxldmVsOw0KIHsNCiAgICAgc3RydWN0IHJ4X2Nvbm5lY3Rpb24gKnRvY29ubiwgKmZyb21jb25u
IDsNCiAgICAgYWZzX2ludDMyICAgICAgICAgICAgICAgIGZyb210aWQsIHRvdGlkLCBjbG9uZXRp
ZDsNCkBAIC0xMTQ4LDcgKzExNTAsMTAgQEANCiAgICAgY29va2llLnR5cGUgICA9IFJXVk9MOw0K
ICAgICBjb29raWUucGFyZW50ID0gZW50cnkudm9sdW1lSWRbUldWT0xdOw0KICAgICBjb29raWUu
Y2xvbmUgID0gMDsNCi0gICAgY29kZSA9IEFGU1ZvbEZvcndhcmQoZnJvbWNvbm4sIGNsb25ldGlk
LCAwLCAmZGVzdGluYXRpb24sIHRvdGlkLCAmY29va2llKTsNCisgICAgaWYgKGNvbXByZXNzKQ0K
KyAgICAgICAgY29kZSA9IEFGU1ZvbEZvcndhcmRaKGZyb21jb25uLCBjbG9uZXRpZCwgMCwgJmRl
c3RpbmF0aW9uLCB0b3RpZCwgJmNvb2tpZSwgY29tcHJlc3MsIGxldmVsKTsNCisgICAgZWxzZQ0K
KyAgICAgICAgY29kZSA9IEFGU1ZvbEZvcndhcmQoZnJvbWNvbm4sIGNsb25ldGlkLCAwLCAmZGVz
dGluYXRpb24sIHRvdGlkLCAmY29va2llKTsNCiAgICAgT05FUlIgKGNvZGUsICJGYWlsZWQgdG8g
bW92ZSBkYXRhIGZvciB0aGUgdm9sdW1lICV1XG4iLCB2b2xpZCk7DQogICAgIGlmICh2ZXJib3Nl
KSBmcHJpbnRmKFNURE9VVCwiIGRvbmVcbiIpOw0KIA0KQEAgLTExNzAsNyArMTE3NSwxMCBAQA0K
ICAgICBPTkVSUiAoY29kZSwgIkZhaWxlZCB0byBjcmVhdGUgYSB0cmFuc2FjdGlvbiBvbiB0aGUg
c291cmNlIHZvbHVtZSAldVxuIiwgYWZyb212b2wpOw0KIA0KICAgICAvKiBub3cgZG8gdGhlIGlu
Y3JlbWVudGFsICovDQotICAgIGNvZGUgPSBBRlNWb2xGb3J3YXJkKGZyb21jb25uLCBmcm9tdGlk
LCBmcm9tRGF0ZSwgJmRlc3RpbmF0aW9uLCB0b3RpZCwmY29va2llKTsNCisgICAgaWYgKGNvbXBy
ZXNzKQ0KKyAgICAgICAgY29kZSA9IEFGU1ZvbEZvcndhcmRaKGZyb21jb25uLCBmcm9tdGlkLCBm
cm9tRGF0ZSwgJmRlc3RpbmF0aW9uLCB0b3RpZCwmY29va2llLCBjb21wcmVzcywgbGV2ZWwpOw0K
KyAgICBlbHNlDQorICAgICAgICBjb2RlID0gQUZTVm9sRm9yd2FyZChmcm9tY29ubiwgZnJvbXRp
ZCwgZnJvbURhdGUsICZkZXN0aW5hdGlvbiwgdG90aWQsJmNvb2tpZSk7DQogICAgIE9ORVJSIChj
b2RlLCAiRmFpbGVkIHRvIGRvIHRoZSBpbmNyZW1lbnRhbCBkdW1wIGZyb20gcncgdm9sdW1lIG9u
IG9sZCBzaXRlIHRvIHJ3IHZvbHVtZSBvbiBuZXdzaXRlXG4iLCAwKTsNCiAgICAgaWYgKHZlcmJv
c2UpZnByaW50ZihTVERPVVQsIiBkb25lXG4iKTsNCiANCkBAIC0xODg0LDE5ICsxODkyLDI3IEBA
DQogfQ0KIA0KIHN0YXRpYyBpbnQgU2ltdWxhdGVGb3J3YXJkTXVsdGlwbGUoZnJvbWNvbm4sIGZy
b210aWQsIGZyb21kYXRlLCB0ciwNCi0JCQkJICAgZmxhZ3MsIGNvb2tpZSwgcmVzdWx0cykNCisJ
CQkJICAgZmxhZ3MsIGNvb2tpZSwgcmVzdWx0cywgY29tcHJlc3MsIGxldmVsKQ0KIHN0cnVjdCBy
eF9jb25uZWN0aW9uICpmcm9tY29ubjsNCiBhZnNfaW50MzIgZnJvbXRpZCwgZnJvbWRhdGUsIGZs
YWdzOw0KIG1hbnlEZXN0cyAqdHI7DQogdm9pZCAqY29va2llOw0KIG1hbnlSZXN1bHRzICpyZXN1
bHRzOw0KK2ludCBjb21wcmVzczsNCitpbnQgbGV2ZWw7DQogew0KICAgaW50IGk7DQogDQogICBm
b3IgKGk9MDsgaTx0ci0+bWFueURlc3RzX2xlbjsgaSsrKSB7DQotICAgICByZXN1bHRzLT5tYW55
UmVzdWx0c192YWxbaV0gPSBBRlNWb2xGb3J3YXJkKGZyb21jb25uLCBmcm9tdGlkLA0KLQkJCQkg
ICAgZnJvbWRhdGUsICYodHItPm1hbnlEZXN0c192YWxbaV0uc2VydmVyKSwgDQotCQkJCSAgICB0
ci0+bWFueURlc3RzX3ZhbFtpXS50cmFucywgY29va2llKTsNCisgICAgIGlmIChjb21wcmVzcykg
ew0KKwlyZXN1bHRzLT5tYW55UmVzdWx0c192YWxbaV0gPSBBRlNWb2xGb3J3YXJkWihmcm9tY29u
biwgZnJvbXRpZCwNCisJCQkJCWZyb21kYXRlLCAmKHRyLT5tYW55RGVzdHNfdmFsW2ldLnNlcnZl
ciksIA0KKwkJCQkJdHItPm1hbnlEZXN0c192YWxbaV0udHJhbnMsIGNvb2tpZSwgY29tcHJlc3Ms
IGxldmVsKTsNCisgICAgIH0gZWxzZSB7DQorCXJlc3VsdHMtPm1hbnlSZXN1bHRzX3ZhbFtpXSA9
IEFGU1ZvbEZvcndhcmQoZnJvbWNvbm4sIGZyb210aWQsDQorCQkJCQlmcm9tZGF0ZSwgJih0ci0+
bWFueURlc3RzX3ZhbFtpXS5zZXJ2ZXIpLCANCisJCQkJCXRyLT5tYW55RGVzdHNfdmFsW2ldLnRy
YW5zLCBjb29raWUpOw0KKyAgICAgfQ0KICAgfQ0KICAgcmV0dXJuIDA7DQogfQ0KQEAgLTE5MjIs
MTEgKzE5MzgsMTMgQEANCiAgKiAgICB0aGUgdGltZTogSW5mbHVlbmNlcyB3aGVuIHdlIHdyaXRl
IGJhY2sgdGhlIFZMREIgZW50cnkuDQogICovDQogDQotVVZfUmVsZWFzZVZvbHVtZShhZnJvbXZv
bCwgYWZyb21zZXJ2ZXIsIGFmcm9tcGFydCwgZm9yY2VmbGFnKQ0KK1VWX1JlbGVhc2VWb2x1bWUo
YWZyb212b2wsIGFmcm9tc2VydmVyLCBhZnJvbXBhcnQsIGZvcmNlZmxhZywgY29tcHJlc3MsIGxl
dmVsKQ0KICAgICAgYWZzX2ludDMyIGFmcm9tc2VydmVyOw0KICAgICAgYWZzX2ludDMyIGFmcm9t
cGFydDsNCiAgICAgIGFmc19pbnQzMiBhZnJvbXZvbDsgDQogICAgICBpbnQgZm9yY2VmbGFnOw0K
KyAgICAgaW50IGNvbXByZXNzOw0KKyAgICAgaW50IGxldmVsOw0KIHsNCiAgIGNoYXIgdm5hbWVb
NjRdOw0KICAgYWZzX2ludDMyIGNvZGUsIHZjb2RlLCByY29kZSwgdGNvZGU7DQpAQCAtMjI2Nyw5
ICsyMjg1LDEzIEBADQogICAgICAvKiBSZWxlYXNlIHRoZSBvbmVzIHdlIGhhdmUgY29sbGVjdGVk
ICovDQogICAgICB0ci5tYW55RGVzdHNfdmFsID0gJihyZXBsaWNhc1swXSk7DQogICAgICB0ci5t
YW55RGVzdHNfbGVuID0gcmVzdWx0cy5tYW55UmVzdWx0c19sZW4gPSB2b2xjb3VudDsNCi0gICAg
IGNvZGUgPSBBRlNWb2xGb3J3YXJkTXVsdGlwbGUoZnJvbWNvbm4sIGZyb210aWQsIGZyb21kYXRl
LCAmdHIsIDAvKnNwYXJlKi8sICZjb29raWUsICZyZXN1bHRzKTsNCisgICAgIGlmIChjb21wcmVz
cykNCisJIGNvZGUgPSBBRlNWb2xGb3J3YXJkTXVsdGlwbGVaKGZyb21jb25uLCBmcm9tdGlkLCBm
cm9tZGF0ZSwgJnRyLCAwLypzcGFyZSovLCAmY29va2llLCAmcmVzdWx0cywgY29tcHJlc3MsIGxl
dmVsKTsNCisgICAgIGVsc2UNCisJIGNvZGUgPSBBRlNWb2xGb3J3YXJkTXVsdGlwbGUoZnJvbWNv
bm4sIGZyb210aWQsIGZyb21kYXRlLCAmdHIsIDAvKnNwYXJlKi8sICZjb29raWUsICZyZXN1bHRz
KTsNCiAgICAgIGlmIChjb2RlID09IFJYR0VOX09QQ09ERSkgeyAgICAgICAgICAgICAgIC8qIFJQ
QyBJbnRlcmZhY2UgTWlzbWF0Y2ggKi8NCi0gICAgICAgIGNvZGUgPSBTaW11bGF0ZUZvcndhcmRN
dWx0aXBsZShmcm9tY29ubiwgZnJvbXRpZCwgZnJvbWRhdGUsICZ0ciwgMC8qc3BhcmUqLywgJmNv
b2tpZSwgJnJlc3VsdHMpOw0KKyAgICAgICAgY29kZSA9IFNpbXVsYXRlRm9yd2FyZE11bHRpcGxl
KGZyb21jb25uLCBmcm9tdGlkLCBmcm9tZGF0ZSwgJnRyLCAwLypzcGFyZSovLCAmY29va2llLCAm
cmVzdWx0cywNCisJICAgIGNvbXByZXNzLCBsZXZlbCk7DQogCW5zZXJ2ZXJzID0gMTsNCiAgICAg
IH0NCiANCkBAIC0yNDY2LDEzICsyNDg4LDE1IEBADQogICogRHVtcEZ1bmN0aW9uIGRvZXMgdGhl
IHJlYWwgd29yayBiZWhpbmQgdGhlIHNjZW5lcyBhZnRlcg0KICAqIGV4dHJhY3RpbmcgcGFyYW1l
dGVycyBmcm9tIHRoZSByb2NrIA0KICAqLw0KLVVWX0R1bXBWb2x1bWUoYWZyb212b2wsIGFmcm9t
c2VydmVyLCBhZnJvbXBhcnQsIGZyb21kYXRlLCBEdW1wRnVuY3Rpb24sIHJvY2spDQorVVZfRHVt
cFZvbHVtZShhZnJvbXZvbCwgYWZyb21zZXJ2ZXIsIGFmcm9tcGFydCwgZnJvbWRhdGUsIER1bXBG
dW5jdGlvbiwgcm9jaywgY29tcHJlc3MsIGxldmVsKQ0KICAgIGFmc19pbnQzMiBhZnJvbXNlcnZl
cjsNCiAgICBhZnNfaW50MzIgYWZyb21wYXJ0Ow0KICAgIGFmc19pbnQzMiBhZnJvbXZvbDsNCiAg
ICBhZnNfaW50MzIgZnJvbWRhdGU7DQogICAgYWZzX2ludDMyICgqRHVtcEZ1bmN0aW9uKSgpOw0K
ICAgIGNoYXIgKnJvY2s7DQorICAgaW50IGNvbXByZXNzOw0KKyAgIGludCBsZXZlbDsNCiB7DQog
ICAgc3RydWN0IHJ4X2Nvbm5lY3Rpb24gKmZyb21jb25uID0gKHN0cnVjdCByeF9jb25uZWN0aW9u
ICopMDsNCiAgICBzdHJ1Y3QgcnhfY2FsbCAgICAgICAqZnJvbWNhbGwgPSAoc3RydWN0IHJ4X2Nh
bGwgKikwOw0KQEAgLTI1MDMsMTIgKzI1MjcsMTUgQEANCiAgICB9DQogDQogICAgZnJvbWNhbGwg
PSByeF9OZXdDYWxsKGZyb21jb25uKTsNCi0gICBjb2RlID0gU3RhcnRBRlNWb2xEdW1wKGZyb21j
YWxsLCBmcm9tdGlkLCBmcm9tZGF0ZSk7DQorICAgaWYgKGNvbXByZXNzKQ0KKwljb2RlID0gU3Rh
cnRBRlNWb2xEdW1wWihmcm9tY2FsbCwgZnJvbXRpZCwgZnJvbWRhdGUsIGNvbXByZXNzLCBsZXZl
bCk7DQorICAgZWxzZQ0KKwljb2RlID0gU3RhcnRBRlNWb2xEdW1wKGZyb21jYWxsLCBmcm9tdGlk
LCBmcm9tZGF0ZSk7DQogICAgaWYgKGNvZGUpIHsNCiAgICAgICBmcHJpbnRmKFNUREVSUiwiQ291
bGQgbm90IHN0YXJ0IHRoZSBkdW1wIHByb2Nlc3MgXG4iKTsNCiAgICAgICBFUlJPUl9FWElUKGNv
ZGUpOw0KICAgIH0NCi0gICBpZiAoY29kZSA9IER1bXBGdW5jdGlvbihmcm9tY2FsbCwgcm9jaykp
IHsNCisgICBpZiAoY29kZSA9IER1bXBGdW5jdGlvbihmcm9tY2FsbCwgcm9jaywgY29tcHJlc3Ms
IGxldmVsKSkgew0KICAgICAgIGZwcmludGYoU1RERVJSLCJFcnJvciB3aGlsZSBkdW1waW5nIHZv
bHVtZSBcbiIpOw0KICAgICAgIEVSUk9SX0VYSVQoY29kZSk7DQogICAgfQ0KQEAgLTI1NDQsMTIg
KzI1NzEsMTQgQEANCiAgKiB0aGUgZHVtcCBmaWxlIDxhZmlsZW5hbWU+LiBXcml0ZURhdGEgZG9l
cyBhbGwgdGhlIHJlYWwgd29yaw0KICAqIGFmdGVyIGV4dHJhY3RpbmcgcGFyYW1zIGZyb20gdGhl
IHJvY2sgDQogICovDQotVVZfUmVzdG9yZVZvbHVtZSh0b3NlcnZlciwgdG9wYXJ0LCB0b3ZvbGlk
LCB0b3ZvbG5hbWUsIGZsYWdzLCBXcml0ZURhdGEsIHJvY2spDQorVVZfUmVzdG9yZVZvbHVtZSh0
b3NlcnZlciwgdG9wYXJ0LCB0b3ZvbGlkLCB0b3ZvbG5hbWUsIGZsYWdzLCBXcml0ZURhdGEsIHJv
Y2ssIGNvbXByZXNzLCBsZXZlbCkNCiAgICAgYWZzX2ludDMyIHRvc2VydmVyLCB0b3BhcnQsIHRv
dm9saWQ7DQogICAgIGNoYXIgdG92b2xuYW1lW107DQogICAgIGludCBmbGFnczsNCiAgICAgYWZz
X2ludDMyICgqV3JpdGVEYXRhKSgpOw0KICAgICBjaGFyICpyb2NrOw0KKyAgICBpbnQgY29tcHJl
c3M7DQorICAgIGludCBsZXZlbDsNCiB7DQogICAgIHN0cnVjdCByeF9jb25uZWN0aW9uICp0b2Nv
bm4sKnRlbXBjb25uOw0KICAgICBzdHJ1Y3QgcnhfY2FsbCAqdG9jYWxsOw0KQEAgLTI2ODMsMTMg
KzI3MTIsMTYgQEANCiAgICAgc3RybmNweShjb29raWUubmFtZSx0b3ZvbG5hbWUsVk9MU0VSX09M
RE1BWFZPTE5BTUUpOw0KIA0KICAgICB0b2NhbGwgPSByeF9OZXdDYWxsKHRvY29ubik7DQotICAg
IHRlcnJvciA9IFN0YXJ0QUZTVm9sUmVzdG9yZSh0b2NhbGwsdG90aWQsIDEsJmNvb2tpZSk7DQor
ICAgIGlmIChjb21wcmVzcykNCisJdGVycm9yID0gU3RhcnRBRlNWb2xSZXN0b3JlWih0b2NhbGws
dG90aWQsIDEsJmNvb2tpZSwgY29tcHJlc3MsIGxldmVsKTsNCisgICAgZWxzZQ0KKwl0ZXJyb3Ig
PSBTdGFydEFGU1ZvbFJlc3RvcmUodG9jYWxsLHRvdGlkLCAxLCZjb29raWUpOw0KICAgICBpZih0
ZXJyb3IpIHsNCiAJZnByaW50ZihTVERFUlIsIlZvbHVtZSByZXN0b3JlIEZhaWxlZCBcbiIpOw0K
IAllcnJvciA9IHRlcnJvcjsNCiAJZ290byByZWZhaWw7DQogICAgIH0NCi0gICAgY29kZSA9IFdy
aXRlRGF0YSh0b2NhbGwsIHJvY2spOw0KKyAgICBjb2RlID0gV3JpdGVEYXRhKHRvY2FsbCwgcm9j
aywgY29tcHJlc3MsIGxldmVsKTsNCiAgICAgaWYoY29kZSkgew0KIAlmcHJpbnRmKFNUREVSUiwi
Q291bGQgbm90IHRyYW5zbWl0IGRhdGFcbiIpOw0KIAllcnJvciA9IGNvZGU7DQpkaWZmIC1OYXVy
IG9wZW5hZnMtMS4yLjEzL3NyYy92b2xzZXIvemlvcnguYyBvcGVuYWZzLTEuMi4xM3ovc3JjL3Zv
bHNlci96aW9yeC5jDQotLS0gb3BlbmFmcy0xLjIuMTMvc3JjL3ZvbHNlci96aW9yeC5jCTE5NzAt
MDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwDQorKysgb3BlbmFmcy0xLjIuMTN6L3NyYy92
b2xzZXIvemlvcnguYwkyMDA0LTEyLTIwIDE1OjU3OjIyLjAwMDAwMDAwMCArMDEwMA0KQEAgLTAs
MCArMSwzNTUgQEANCisjaW5jbHVkZSAiemlvcnguaCINCisjaW5jbHVkZSA8cngveGRyLmg+DQor
I2luY2x1ZGUgPHJ4L3J4Lmg+DQorI2luY2x1ZGUgPHN0ZGlvLmg+DQorDQorDQorc3RhdGljIHZv
aWQgaGFuZGxlRXJyb3Ioc3RydWN0IHppb3J4X2NhbGwgKnpjYWxsLCBjb25zdCBjaGFyICptZXNz
YWdlLCBjb25zdCBjaGFyICpyZWFzb24pDQorew0KKwlpbnQgbmxlbjsNCisJY2hhciAqcCA7DQor
DQorCWlmICh6Y2FsbCE9TlVMTCkNCisJew0KKwkJc3RybmNweSh6Y2FsbC0+bGFzdEVycm9yTXNn
LCBtZXNzYWdlLCBaSU9SWF9DQUxMX0VSUk9SX0JVRlNJWkUpOw0KKwkJemNhbGwtPmxhc3RFcnJv
ck1zZ1taSU9SWF9DQUxMX0VSUk9SX0JVRlNJWkUtMV0gPSAnXDAnOw0KKw0KKwkJLy9hcHBlbmQg
c2FmZWx5ICI6ICINCisJCW5sZW4gPSBzdHJsZW4oemNhbGwtPmxhc3RFcnJvck1zZyk7CS8vbGVu
Z3RoIHNvIGZhcg0KKwkJcCA9IHpjYWxsLT5sYXN0RXJyb3JNc2cgKyBubGVuOw0KKwkJc3RybmNw
eShwLCAiOiAiLCBaSU9SWF9DQUxMX0VSUk9SX0JVRlNJWkUgLSBubGVuKTsNCisJCXpjYWxsLT5s
YXN0RXJyb3JNc2dbWklPUlhfQ0FMTF9FUlJPUl9CVUZTSVpFLTFdID0gJ1wwJzsNCisNCisJCWlm
IChyZWFzb24hPU5VTEwpDQorCQl7DQorCQkJaWYgKG5sZW48WklPUlhfQ0FMTF9FUlJPUl9CVUZT
SVpFKQ0KKwkJCXsNCisJCQkJbmxlbiA9IHN0cmxlbih6Y2FsbC0+bGFzdEVycm9yTXNnKTsJLy9s
ZW5ndGggc28gZmFyDQorCQkJCXAgPSB6Y2FsbC0+bGFzdEVycm9yTXNnICsgbmxlbjsJLy93aGVy
ZSB0byBhcHBlbmQgcmVhc29uDQorCQkJCXN0cm5jcHkocCwgcmVhc29uLCBaSU9SWF9DQUxMX0VS
Uk9SX0JVRlNJWkUgLSBubGVuKTsNCisJCQkJemNhbGwtPmxhc3RFcnJvck1zZ1taSU9SWF9DQUxM
X0VSUk9SX0JVRlNJWkUtMV0gPSAnXDAnOw0KKwkJCX0NCisJCX0NCisJfQ0KKw0KKwkvL2ZvciBh
bGwgdGhlIGNhc2VzOg0KKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiAlc1xuIiwgbWVzc2FnZSwgcmVh
c29uKTsNCit9DQorDQorc3RhdGljIGludCB6aW9yeEJlZ2luKHN0cnVjdCByeF9jYWxsICpjYWxs
LCBpbnQgdXNlX2NvbXByZXNzaW9uLCBpbnQgbGV2ZWwsIHN0cnVjdCB6aW9yeF9jYWxsICp6Y2Fs
bCwgaW50IHRvV3JpdGUpDQorew0KKwlpbnQgZXJyOw0KKw0KKwlpZiAoY2FsbD09TlVMTCB8fCB6
Y2FsbD09TlVMTCkNCisJew0KKwkJaGFuZGxlRXJyb3IoemNhbGwsICJ6aW9yeEJlZ2luIiwgIk5V
TEwgcGFyYW1zIik7DQorCQlyZXR1cm4gWklPUlhfRkFJTDsNCisJfQ0KKw0KKwltZW1zZXQoemNh
bGwsIDAsIHNpemVvZihzdHJ1Y3QgemlvcnhfY2FsbCkpOw0KKw0KKwl6Y2FsbC0+dXNlX2NvbXBy
ZXNzaW9uID0gdXNlX2NvbXByZXNzaW9uOyAvLzA9ZG9uJ3QgY29tcHJlc3MsIDE9Y29tcHJlc3MN
CisJemNhbGwtPmNhbGwgPSBjYWxsOw0KKwlpZiAodXNlX2NvbXByZXNzaW9uKQ0KKwl7DQorCQlp
ZiAodG9Xcml0ZSkNCisJCQl6Y2FsbC0+YnVmID0gKGNoYXIgKiltYWxsb2MoWklPUlhfT1VUX0JV
RlNJWkUpOw0KKwkJZWxzZQ0KKwkJCXpjYWxsLT5idWYgPSAoY2hhciAqKW1hbGxvYyhaSU9SWF9J
Tl9CVUZTSVpFKTsNCisJCWlmICh6Y2FsbC0+YnVmPT1OVUxMKQ0KKwkJew0KKwkJCWhhbmRsZUVy
cm9yKHpjYWxsLCAiemlvcnhCZWdpbiIsICJtZW1vcnkgYWxsb2NhdGlvbiBlcnJvbiIpOw0KKwkJ
CWdvdG8gZmFpbDsNCisJCX0NCisNCisJCXpjYWxsLT5sZXZlbCA9IGxldmVsOwkvL2NvbXByZXNz
aW9uIGxldmVsDQorDQorCQl6Y2FsbC0+enN0cmVhbS56YWxsb2MgPSAoYWxsb2NfZnVuYykwOw0K
KwkJemNhbGwtPnpzdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7DQorCQl6Y2FsbC0+enN0cmVh
bS5vcGFxdWUgPSAodm9pZHBmKTA7DQorDQorCQlpZiAodG9Xcml0ZSkNCisJCXsNCisJCQllcnIg
PSBkZWZsYXRlSW5pdCgmKHpjYWxsLT56c3RyZWFtKSwgbGV2ZWwpOw0KKwkJCWlmIChlcnIhPVpf
T0spDQorCQkJew0KKwkJCQloYW5kbGVFcnJvcih6Y2FsbCwgImRlZmxhdGVJbml0IGVycm9yIiwg
ekVycm9yKGVycikpOw0KKwkJCQlnb3RvIGZhaWw7DQorCQkJfQ0KKwkJCXpjYWxsLT56c3RyZWFt
Lm5leHRfb3V0ID0gKEJ5dGVmICopemNhbGwtPmJ1ZjsNCisJCQl6Y2FsbC0+enN0cmVhbS5hdmFp
bF9vdXQgPSBaSU9SWF9PVVRfQlVGU0laRTsNCisJCX0gZWxzZSB7DQorCQkJZXJyID0gaW5mbGF0
ZUluaXQoJih6Y2FsbC0+enN0cmVhbSkpOw0KKwkJCWlmIChlcnIhPVpfT0spDQorCQkJew0KKwkJ
CQloYW5kbGVFcnJvcih6Y2FsbCwgImluZmxhdGVJbml0IGVycm9yIiwgekVycm9yKGVycikpOw0K
KwkJCQlnb3RvIGZhaWw7DQorCQkJfQ0KKwkJCXpjYWxsLT56c3RyZWFtLm5leHRfaW4gPSAoQnl0
ZWYgKil6Y2FsbC0+YnVmOw0KKwkJCXpjYWxsLT56c3RyZWFtLmF2YWlsX2luID0gMDsNCisNCisJ
CQl6Y2FsbC0+Z290X3JlYWRfcnhfZW5kID0gKDA9PTEpOw0KKwkJCXpjYWxsLT5nb3RfcmVhZF96
c3RyZWFtX2VuZCA9ICgwPT0xKTsNCisJCX0NCisJfQ0KKw0KKwlyZXR1cm4gWklPUlhfT0s7DQor
DQorZmFpbDoNCisJaWYgKHpjYWxsLT5idWYhPU5VTEwpDQorCXsNCisJCWZyZWUoemNhbGwtPmJ1
Zik7DQorCQl6Y2FsbC0+YnVmID0gTlVMTDsNCisJfQ0KKw0KKwlyZXR1cm4gWklPUlhfRkFJTDsN
Cit9DQorDQoraW50IHppb3J4QmVnaW5Xcml0ZShzdHJ1Y3QgcnhfY2FsbCAqY2FsbCwgaW50IHVz
ZV9jb21wcmVzc2lvbiwgaW50IGxldmVsLCBzdHJ1Y3QgemlvcnhfY2FsbCAqemNhbGwpDQorew0K
KwlyZXR1cm4gemlvcnhCZWdpbihjYWxsLCB1c2VfY29tcHJlc3Npb24sIGxldmVsLCB6Y2FsbCwg
KDE9PTEpKTsNCit9DQorDQoraW50IHppb3J4V3JpdGUoc3RydWN0IHppb3J4X2NhbGwgKnpjYWxs
LCBjaGFyICpidWYsIGludCBuYnl0ZXMpDQorew0KKwlpbnQgcmVzOw0KKw0KKwlpZiAoemNhbGw9
PU5VTEwpDQorCXsNCisJCWhhbmRsZUVycm9yKHpjYWxsLCAiemlvcnhXcml0ZSIsICJOVUxMIGVy
cm9yIik7DQorCQlyZXR1cm4gWklPUlhfRkFJTDsNCisJfQ0KKw0KKwkjaWZkZWYgWklPUlhfREVC
VUcNCisJCWZwcmludGYoc3RkZXJyLCAidG8gd3JpdGU6ICVkXG4iLCBuYnl0ZXMpOw0KKwkjZW5k
aWYNCisJaWYgKHpjYWxsLT51c2VfY29tcHJlc3Npb24pDQorCXsNCisJCXpjYWxsLT56c3RyZWFt
Lm5leHRfaW4gPSBidWY7DQorCQl6Y2FsbC0+enN0cmVhbS5hdmFpbF9pbiA9IG5ieXRlczsNCisJ
CXdoaWxlKHpjYWxsLT56c3RyZWFtLmF2YWlsX2luIT0wKQ0KKwkJew0KKwkJCWlmICh6Y2FsbC0+
enN0cmVhbS5hdmFpbF9vdXQ9PTApDQorCQkJew0KKwkJCQkjaWZkZWYgWklPUlhfREVCVUcNCisJ
CQkJCWZwcmludGYoc3RkZXJyLCAicnhfV3JpdGUoJWQpXG4iLCBaSU9SWF9PVVRfQlVGU0laRSk7
DQorCQkJCSNlbmRpZg0KKwkJCQlyZXMgPSByeF9Xcml0ZSh6Y2FsbC0+Y2FsbCwgemNhbGwtPmJ1
ZiwgWklPUlhfT1VUX0JVRlNJWkUpOw0KKwkJCQlpZiAocmVzIT1aSU9SWF9PVVRfQlVGU0laRSkN
CisJCQkJew0KKwkJCQkJaGFuZGxlRXJyb3IoemNhbGwsICJ6aW9yeFdyaXRlIiwgInJ4X1dyaXRl
IGZhaWxlZCIpOw0KKwkJCQkJcmV0dXJuIFpJT1JYX0ZBSUw7DQorCQkJCX0NCisJCQkJDQorCQkJ
CXpjYWxsLT56c3RyZWFtLm5leHRfb3V0ID0gemNhbGwtPmJ1ZjsNCisJCQkJemNhbGwtPnpzdHJl
YW0uYXZhaWxfb3V0ID0gWklPUlhfT1VUX0JVRlNJWkU7DQorCQkJfQ0KKwkJCSNpZmRlZiBaSU9S
WF9ERUJVRw0KKwkJCQlmcHJpbnRmKHN0ZGVyciwgImF2YWlsX2luOiVkLCBhdmFpbF9vdXQ6JWRc
biIsDQorCQkJCQl6Y2FsbC0+enN0cmVhbS5hdmFpbF9pbiwgemNhbGwtPnpzdHJlYW0uYXZhaWxf
b3V0KTsNCisJCQkjZW5kaWYNCisJCQlyZXMgPSBkZWZsYXRlKCYoemNhbGwtPnpzdHJlYW0pLCBa
X05PX0ZMVVNIKTsNCisJCQlpZiAocmVzIT1aX09LKQ0KKwkJCXsNCisJCQkJaGFuZGxlRXJyb3Io
emNhbGwsICJkZWZsYXRlIGVycm9yIiwgekVycm9yKHJlcykpOw0KKwkJCQlyZXR1cm4gWklPUlhf
RkFJTDsNCisJCQl9DQorCQl9DQorCQlyZXMgPSBuYnl0ZXM7DQorCX0gZWxzZSB7DQorCQlyZXMg
PSByeF9Xcml0ZSh6Y2FsbC0+Y2FsbCwgYnVmLCBuYnl0ZXMpOw0KKwl9DQorCXJldHVybiByZXM7
DQorfQ0KKw0KK2ludCB6aW9yeEVuZFdyaXRlKHN0cnVjdCB6aW9yeF9jYWxsICp6Y2FsbCkNCit7
DQorCWludCByZXM7DQorCWludCByZW1haW5pbmc7DQorDQorCWlmICh6Y2FsbD09TlVMTCkNCisJ
ew0KKwkJaGFuZGxlRXJyb3IoemNhbGwsICJ6aW9yeEVuZFdyaXRlIiwgIk5VTEwgZXJyb3IiKTsN
CisJCXJldHVybiBaSU9SWF9GQUlMOw0KKwl9DQorDQorCWlmICghemNhbGwtPnVzZV9jb21wcmVz
c2lvbikNCisJCXJldHVybiBaSU9SWF9PSzsNCisNCisJI2lmZGVmIFpJT1JYX0RFQlVHDQorCQlm
cHJpbnRmKHN0ZGVyciwgImVuZCB3cml0ZTpcbiIpOw0KKwkjZW5kaWYNCisJcmVzID0gWl9PSzsN
CisJd2hpbGUocmVzIT1aX1NUUkVBTV9FTkQpDQorCXsNCisJCWlmICh6Y2FsbC0+enN0cmVhbS5h
dmFpbF9vdXQ9PTApDQorCQl7DQorCQkJI2lmZGVmIFpJT1JYX0RFQlVHDQorCQkJCWZwcmludGYo
c3RkZXJyLCAicnhfV3JpdGUoJWQpXG4iLCBaSU9SWF9PVVRfQlVGU0laRSk7DQorCQkJI2VuZGlm
DQorCQkJcmVzID0gcnhfV3JpdGUoemNhbGwtPmNhbGwsIHpjYWxsLT5idWYsIFpJT1JYX09VVF9C
VUZTSVpFKTsNCisJCQlpZiAocmVzIT1aSU9SWF9PVVRfQlVGU0laRSkNCisJCQl7DQorCQkJCWhh
bmRsZUVycm9yKHpjYWxsLCAiemlvcnhFbmRXcml0ZS96aW9yeFdyaXRlIiwgInJ4X1dyaXRlIGZh
aWxlZCIpOw0KKwkJCQlkZWZsYXRlRW5kKCYoemNhbGwtPnpzdHJlYW0pKTsNCisJCQkJZnJlZSh6
Y2FsbC0+YnVmKTsNCisJCQkJcmV0dXJuIFpJT1JYX0ZBSUw7DQorCQkJfQ0KKwkJCXpjYWxsLT56
c3RyZWFtLm5leHRfb3V0ID0gemNhbGwtPmJ1ZjsNCisJCQl6Y2FsbC0+enN0cmVhbS5hdmFpbF9v
dXQgPSBaSU9SWF9PVVRfQlVGU0laRTsNCisJCX0NCisJCSNpZmRlZiBaSU9SWF9ERUJVRw0KKwkJ
CWZwcmludGYoc3RkZXJyLCAiYXZhaWxfaW46JWQsIGF2YWlsX291dDolZFxuIiwNCisJCQkJemNh
bGwtPnpzdHJlYW0uYXZhaWxfaW4sIHpjYWxsLT56c3RyZWFtLmF2YWlsX291dCk7DQorCQkjZW5k
aWYNCisJCXJlcyA9IGRlZmxhdGUoJih6Y2FsbC0+enN0cmVhbSksIFpfRklOSVNIKTsNCisJCWlm
IChyZXMhPVpfU1RSRUFNX0VORCAmJiByZXMhPVpfT0spDQorCQl7DQorCQkJaGFuZGxlRXJyb3Io
emNhbGwsICJ6aW9yeEVuZFdyaXRlL2RlZmxhdGUgZXJyb3IiLCB6RXJyb3IocmVzKSk7DQorCQkJ
ZGVmbGF0ZUVuZCgmKHpjYWxsLT56c3RyZWFtKSk7DQorCQkJZnJlZSh6Y2FsbC0+YnVmKTsNCisJ
CQlyZXR1cm4gWklPUlhfRkFJTDsNCisJCX0NCisJfQ0KKw0KKwkvL3NlbmQgdGhlIHJlbWFpbmlu
ZyBidWZmZXIgaWYgaXQncyBub3QgZW1wdHkNCisJaWYgKHpjYWxsLT56c3RyZWFtLmF2YWlsX291
dDxaSU9SWF9PVVRfQlVGU0laRSkNCisJew0KKwkJcmVtYWluaW5nID0gWklPUlhfT1VUX0JVRlNJ
WkUgLSB6Y2FsbC0+enN0cmVhbS5hdmFpbF9vdXQ7DQorCQkjaWZkZWYgWklPUlhfREVCVUcNCisJ
CQlmcHJpbnRmKHN0ZGVyciwgInJ4X1dyaXRlKCVkKVxuIiwgcmVtYWluaW5nKTsNCisJCSNlbmRp
Zg0KKwkJcmVzID0gcnhfV3JpdGUoemNhbGwtPmNhbGwsIHpjYWxsLT5idWYsIHJlbWFpbmluZyk7
DQorCQlpZiAocmVzIT1yZW1haW5pbmcpDQorCQl7DQorCQkJaGFuZGxlRXJyb3IoemNhbGwsICJ6
aW9yeEVuZFdyaXRlL3ppb3J4V3JpdGUiLCAicnhfV3JpdGVbMl0gZmFpbGVkIik7DQorCQkJZGVm
bGF0ZUVuZCgmKHpjYWxsLT56c3RyZWFtKSk7DQorCQkJZnJlZSh6Y2FsbC0+YnVmKTsNCisJCQly
ZXR1cm4gWklPUlhfRkFJTDsNCisJCX0NCisJfQ0KKw0KKwlmcmVlKHpjYWxsLT5idWYpOw0KKwly
ZXMgPSBkZWZsYXRlRW5kKCYoemNhbGwtPnpzdHJlYW0pKTsNCisJaWYgKHJlcyE9Wl9PSykNCisJ
ew0KKwkJaGFuZGxlRXJyb3IoemNhbGwsICJkZWZsYXRlRW5kIGVycm9yIiwgekVycm9yKHJlcykp
Ow0KKwkJcmV0dXJuIFpJT1JYX0ZBSUw7DQorCX0NCisNCisJcmV0dXJuIFpJT1JYX09LOw0KK30N
CisNCitpbnQgemlvcnhCZWdpblJlYWQoc3RydWN0IHJ4X2NhbGwgKmNhbGwsIGludCB1c2VfY29t
cHJlc3Npb24sIGludCBsZXZlbCwgc3RydWN0IHppb3J4X2NhbGwgKnpjYWxsKQ0KK3sNCisJcmV0
dXJuIHppb3J4QmVnaW4oY2FsbCwgdXNlX2NvbXByZXNzaW9uLCBsZXZlbCwgemNhbGwsICgwPT0x
KSk7DQorfQ0KKw0KK2ludCB6aW9yeFJlYWQoc3RydWN0IHppb3J4X2NhbGwgKnpjYWxsLCBjaGFy
ICpidWYsIGludCBuYnl0ZXMpDQorew0KKwlpbnQgcmVzLCBvbGRfdG90YWxfb3V0Ow0KKw0KKwlp
ZiAoemNhbGw9PU5VTEwpDQorCXsNCisJCWhhbmRsZUVycm9yKHpjYWxsLCAiemlvcnhSZWFkIiwg
Ik5VTEwgZXJyb3IiKTsNCisJCXJldHVybiBaSU9SWF9GQUlMOw0KKwl9DQorDQorCWlmICh6Y2Fs
bC0+dXNlX2NvbXByZXNzaW9uKQ0KKwl7DQorCQl6Y2FsbC0+enN0cmVhbS5uZXh0X291dCA9IGJ1
ZjsNCisJCXpjYWxsLT56c3RyZWFtLmF2YWlsX291dCA9IG5ieXRlczsNCisJCW9sZF90b3RhbF9v
dXQgPSB6Y2FsbC0+enN0cmVhbS50b3RhbF9vdXQ7DQorCQl3aGlsZSh6Y2FsbC0+enN0cmVhbS5h
dmFpbF9vdXQhPTApDQorCQl7DQorCQkJaWYgKHpjYWxsLT56c3RyZWFtLmF2YWlsX2luPT0wKQ0K
KwkJCXsNCisJCQkJaWYgKCF6Y2FsbC0+Z290X3JlYWRfcnhfZW5kKQ0KKwkJCQl7DQorCQkJCQly
ZXMgPSByeF9SZWFkKHpjYWxsLT5jYWxsLCB6Y2FsbC0+YnVmLCBaSU9SWF9JTl9CVUZTSVpFKTsN
CisJCQkJCWlmIChyZXM+MCkNCisJCQkJCXsNCisJCQkJCQl6Y2FsbC0+enN0cmVhbS5uZXh0X2lu
ID0gemNhbGwtPmJ1ZjsNCisJCQkJCQl6Y2FsbC0+enN0cmVhbS5hdmFpbF9pbiA9IHJlczsNCisJ
CQkJCX0gZWxzZSB7DQorCQkJCQkJemNhbGwtPmdvdF9yZWFkX3J4X2VuZCA9ICgxPT0xKTsNCisJ
CQkJCX0NCisJCQkJfQ0KKwkJCQkNCisJCQkJaWYgKHpjYWxsLT5nb3RfcmVhZF9yeF9lbmQpDQor
CQkJCXsNCisJCQkJCWlmICh6Y2FsbC0+Z290X3JlYWRfenN0cmVhbV9lbmQpDQorCQkJCQkJYnJl
YWs7DQorDQorCQkJCQlyZXMgPSBaX09LOw0KKwkJCQkJd2hpbGUocmVzIT1aX1NUUkVBTV9FTkQg
JiYgemNhbGwtPnpzdHJlYW0uYXZhaWxfb3V0IT0wKQ0KKwkJCQkJew0KKwkJCQkJCSNpZmRlZiBa
SU9SWF9ERUJVRw0KKwkJCQkJCQlmcHJpbnRmKHN0ZGVyciwgImF2YWlsX2luOiVkLCBhdmFpbF9v
dXQ6JWRcbiIsDQorCQkJCQkJCXpjYWxsLT56c3RyZWFtLmF2YWlsX2luLCB6Y2FsbC0+enN0cmVh
bS5hdmFpbF9vdXQpOw0KKwkJCQkJCSNlbmRpZg0KKwkJCQkJCXJlcyA9IGluZmxhdGUoJih6Y2Fs
bC0+enN0cmVhbSksIFpfRklOSVNIKTsNCisJCQkJCQlpZiAocmVzIT1aX09LICYmIHJlcyE9Wl9T
VFJFQU1fRU5EKQ0KKwkJCQkJCXsNCisJCQkJCQkJaGFuZGxlRXJyb3IoemNhbGwsICJpbmZsYXRl
IGZpbmlzaCBlcnJvciIsIHpFcnJvcihyZXMpKTsNCisJCQkJCQkJcmV0dXJuIFpJT1JYX0ZBSUw7
DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKw0KKwkJCQkJaWYgKHJlcz09Wl9TVFJFQU1fRU5EKQ0KKwkJ
CQkJCXpjYWxsLT5nb3RfcmVhZF96c3RyZWFtX2VuZCA9ICgxPT0xKTsNCisJCQkJCQ0KKwkJCQkJ
YnJlYWs7DQorCQkJCX0NCisJCQl9DQorDQorCQkJI2lmZGVmIFpJT1JYX0RFQlVHDQorCQkJCWZw
cmludGYoc3RkZXJyLCAiYXZhaWxfaW46JWQsIGF2YWlsX291dDolZFxuIiwNCisJCQkJemNhbGwt
PnpzdHJlYW0uYXZhaWxfaW4sIHpjYWxsLT56c3RyZWFtLmF2YWlsX291dCk7DQorCQkJI2VuZGlm
DQorCQkJcmVzID0gaW5mbGF0ZSgmKHpjYWxsLT56c3RyZWFtKSwgWl9OT19GTFVTSCk7DQorDQor
CQkJaWYgKHJlcz09Wl9TVFJFQU1fRU5EKQ0KKwkJCXsNCisJCQkJemNhbGwtPmdvdF9yZWFkX3J4
X2VuZCA9ICgxPT0xKTsNCisJCQkJemNhbGwtPmdvdF9yZWFkX3pzdHJlYW1fZW5kID0gKDE9PTEp
Ow0KKwkJCX0NCisJCQllbHNlIGlmIChyZXMhPVpfT0spDQorCQkJew0KKwkJCQloYW5kbGVFcnJv
cih6Y2FsbCwgImluZmxhdGUgZXJyb3IiLCB6RXJyb3IocmVzKSk7DQorCQkJCXJldHVybiBaSU9S
WF9GQUlMOw0KKwkJCX0NCisJCX0NCisNCisJCXJlcyA9IHpjYWxsLT56c3RyZWFtLnRvdGFsX291
dCAtIG9sZF90b3RhbF9vdXQ7DQorCX0gZWxzZSB7DQorCQlyZXMgPSByeF9SZWFkKHpjYWxsLT5j
YWxsLCBidWYsIG5ieXRlcyk7DQorCX0NCisJcmV0dXJuIHJlczsNCit9DQorDQoraW50IHppb3J4
RW5kUmVhZChzdHJ1Y3QgemlvcnhfY2FsbCAqemNhbGwpDQorew0KKwlpbnQgcmVzOw0KKw0KKwlp
ZiAoemNhbGw9PU5VTEwpDQorCXsNCisJCWhhbmRsZUVycm9yKHpjYWxsLCAiemlvcnhFbmRSZWFk
IiwgIk5VTEwgZXJyb3IiKTsNCisJCXJldHVybiBaSU9SWF9GQUlMOw0KKwl9DQorDQorCWlmICgh
emNhbGwtPnVzZV9jb21wcmVzc2lvbikNCisJCXJldHVybiBaSU9SWF9PSzsNCisNCisJcmVzID0g
aW5mbGF0ZUVuZCgmKHpjYWxsLT56c3RyZWFtKSk7DQorCWlmIChyZXMhPVpfT0spDQorCXsNCisJ
CWhhbmRsZUVycm9yKHpjYWxsLCAiaW5mbGF0ZUVuZCBlcnJvciIsIHpFcnJvcihyZXMpKTsNCisJ
fQ0KKw0KKwlmcmVlKHpjYWxsLT5idWYpOw0KKwl6Y2FsbC0+YnVmID0gTlVMTDsNCisNCisJcmV0
dXJuIFpJT1JYX09LOw0KK30NCisNCmRpZmYgLU5hdXIgb3BlbmFmcy0xLjIuMTMvc3JjL3ZvbHNl
ci96aW9yeC5oIG9wZW5hZnMtMS4yLjEzei9zcmMvdm9sc2VyL3ppb3J4LmgNCi0tLSBvcGVuYWZz
LTEuMi4xMy9zcmMvdm9sc2VyL3ppb3J4LmgJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAg
KzAxMDANCisrKyBvcGVuYWZzLTEuMi4xM3ovc3JjL3ZvbHNlci96aW9yeC5oCTIwMDQtMTItMjAg
MTQ6NDU6MzQuMDAwMDAwMDAwICswMTAwDQpAQCAtMCwwICsxLDQxIEBADQorI2lmbmRlZiBfX1pJ
T1JYX0hfXw0KKyNkZWZpbmUgX19aSU9SWF9IX18NCisNCisjaW5jbHVkZSAiemxpYi5oIg0KKw0K
KyNkZWZpbmUgWklPUlhfQ0FMTF9FUlJPUl9CVUZTSVpFIDEyOA0KKyNkZWZpbmUgWklPUlhfSU5f
QlVGU0laRSA0MDk2DQorI2RlZmluZSBaSU9SWF9PVVRfQlVGU0laRSA0MDk2DQorDQorLy9hbGwg
ZnVuY3Rpb25zIG11c3QgcmV0dXJuIA0KKy8vb25lIG9mIHRoZSBmb2xsb3dpbmcgMiByZXN1bHRz
Og0KKyNkZWZpbmUgWklPUlhfT0sgMA0KKyNkZWZpbmUgWklPUlhfRkFJTCAoLTEpDQorDQorc3Ry
dWN0IHppb3J4X2NhbGwNCit7DQorCXN0cnVjdCByeF9jYWxsICpjYWxsOw0KKwl6X3N0cmVhbSB6
c3RyZWFtOw0KKwljaGFyICpidWY7CS8vdGVtcG9yYXJ5IGJ1ZmZlciBmb3IgbWFyc2hhbGxpbmcg
dG8gcngNCisNCisJaW50IHVzZV9jb21wcmVzc2lvbjsgLy8wPWRvbid0IGNvbXByZXNzLCAxPWNv
bXByZXNzDQorCWludCBsZXZlbDsJLy9jb21wcmVzc2lvbiBsZXZlbA0KKw0KKwlpbnQgZ290X3Jl
YWRfcnhfZW5kOw0KKwlpbnQgZ290X3JlYWRfenN0cmVhbV9lbmQ7DQorDQorCWNoYXIgbGFzdEVy
cm9yTXNnW1pJT1JYX0NBTExfRVJST1JfQlVGU0laRV07DQorfTsNCisNCisvL2xldmVsOiBaX0RF
RkFVTFRfQ09NUFJFU1NJT04sIG9yIGJldHdlZW4gMCBhbmQgOToNCisvLyAxIGdpdmVzIGJlc3Qg
c3BlZWQsIDkgZ2l2ZXMgYmVzdCBjb21wcmVzc2lvbiwgMCBnaXZlcyBubyBjb21wcmVzc2lvbiBh
dA0KKy8vIGFsbCAodGhlIGlucHV0IGRhdGEgaXMgc2ltcGx5IGNvcGllZCBhIGJsb2NrIGF0IGEg
dGltZSkNCisNCitpbnQgemlvcnhCZWdpbldyaXRlKHN0cnVjdCByeF9jYWxsICpjYWxsLCBpbnQg
dXNlX2NvbXByZXNzaW9uLCBpbnQgbGV2ZWwsIHN0cnVjdCB6aW9yeF9jYWxsICp6Y2FsbCk7DQor
aW50IHppb3J4V3JpdGUoc3RydWN0IHppb3J4X2NhbGwgKnpjYWxsLCBjaGFyICpidWYsIGludCBu
Ynl0ZXMpOw0KK2ludCB6aW9yeEVuZFdyaXRlKHN0cnVjdCB6aW9yeF9jYWxsICp6Y2FsbCk7DQor
aW50IHppb3J4QmVnaW5SZWFkKHN0cnVjdCByeF9jYWxsICpjYWxsLCBpbnQgdXNlX2NvbXByZXNz
aW9uLCBpbnQgbGV2ZWwsIHN0cnVjdCB6aW9yeF9jYWxsICp6Y2FsbCk7DQoraW50IHppb3J4UmVh
ZChzdHJ1Y3QgemlvcnhfY2FsbCAqemNhbGwsIGNoYXIgKmJ1ZiwgaW50IG5ieXRlcyk7DQoraW50
IHppb3J4RW5kUmVhZChzdHJ1Y3QgemlvcnhfY2FsbCAqemNhbGwpOw0KKw0KKyNlbmRpZiAvLyBf
X1pJT1JYX0hfXw0K

--=_mixed 005006DAC1256F72_=--