Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 14 Nov 2012 22:29:58 -0600
From:      Russell Cattelan <cattelan@thebarn.com>
To:        freebsd-current@freebsd.org
Subject:   Re: Anybody willing to test out kload?
Message-ID:  <50A46FC6.9090404@thebarn.com>
In-Reply-To: <50A41395.7080205@thebarn.com>
References:  <50A41395.7080205@thebarn.com>

next in thread | previous in thread | raw e-mail | index | archive | help
This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
--------------enigEF8640DC65B19FFA7A0B0F0B
Content-Type: multipart/mixed;
 boundary="------------010401020106090303040504"

This is a multi-part message in MIME format.
--------------010401020106090303040504
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

A few people have pointed out I sent out the patch in reverse. :-(
I messed up and reversed the tags to git diff.

Here is the corrected patch.
Along with a few corrections and cleanups.

-Russell


--------------010401020106090303040504
Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0";
 name="kload.patch"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="kload.patch"

ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmM2MDk2MzMKZGlmZiAtLWdpdCBhL3N5cy9hbWQ2NC9hbWQ2
NC9rbG9hZC5jIGIvc3lzL2FtZDY0L2FtZDY0L2tsb2FkLmMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZWQyMDNhZQotLS0gL2Rldi9udWxsCisrKyBiL3N5cy9hbWQ2
NC9hbWQ2NC9rbG9hZC5jCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IChj
KSAyMDExIC0gMjAxMgorICoJUnVzc2VsbCBDYXR0ZWxhbiBEaWdpdGFsIEVsdmVzIEluYwor
ICogQ29weXJpZ2h0IChjKSAyMDExIC0gMjAxMgorICoJSXNpbG9uIFN5c3RlbXMsIExMQy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFO
RCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
CisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICog
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpbmNsdWRl
IDxzeXMva2xvYWQuaD4KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjaW5jbHVkZSA8c3lz
L3N5c3Byb3RvLmg+CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisKKyNpbmNsdWRlIDx2bS92
bV9wYXJhbS5oPgorI2luY2x1ZGUgPHZtL3ZtLmg+CisjaW5jbHVkZSA8dm0vdm1fZXh0ZXJu
Lmg+CisjaW5jbHVkZSA8dm0vdm1fa2Vybi5oPgorCisjZGVmaW5lCUdVRVNUX05VTExfU0VM
CQkwCisjZGVmaW5lCUdVRVNUX0NPREVfU0VMCQkxCisjZGVmaW5lCUdVRVNUX0RBVEFfU0VM
CQkyCisKK3ZvaWQKK3NldHVwX2ZyZWVic2RfZ2R0KHVpbnQ2NF90ICpnZHRyKQoreworCWdk
dHJbR1VFU1RfTlVMTF9TRUxdID0gMHgwMDAwMDAwMDAwMDAwMDAwOworCWdkdHJbR1VFU1Rf
Q09ERV9TRUxdID0gMHgwMDIwOTgwMDAwMDAwMDAwOworCWdkdHJbR1VFU1RfREFUQV9TRUxd
ID0gMHgwMDAwOTIwMDAwMDAwMDAwOworfQorCitwdF9lbnRyeV90ICoKK2tsb2FkX2J1aWxk
X3BhZ2VfdGFibGUodm9pZCkKK3sKKwlwdF9lbnRyeV90ICpQVDQ7CisJcHRfZW50cnlfdCAq
UFQzOworCXB0X2VudHJ5X3QgKlBUMjsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIHZhOwor
CisJdmEgPSAodW5zaWduZWQgbG9uZylrbWVtX2FsbG9jKGtlcm5lbF9tYXAsUEFHRV9TSVpF
ICogMyk7CisJUFQ0ID0gKHB0X2VudHJ5X3QgKil2YTsKKwlQVDMgPSAocHRfZW50cnlfdCAq
KShQVDQgKyAoUEFHRV9TSVpFIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSk7CisJUFQyID0g
KHB0X2VudHJ5X3QgKikoUFQzICsgKFBBR0VfU0laRSAvIHNpemVvZih1bnNpZ25lZCBsb25n
KSkpOworCisJaWYgKGJvb3R2ZXJib3NlKQorCQlwcmludGYoIiVzIFBUNCAweCVseCAoMHgl
bHgpIFBUMyAweCVseCAoMHglbHgpICIKKwkJICAgICJQVDIgMHglbHggKDB4JWx4KVxuIiwK
KwkJICAgIF9fZnVuY19fLAorCQkgICAgKHVuc2lnbmVkIGxvbmcpUFQ0LCAodW5zaWduZWQg
bG9uZyl2dG9waHlzKFBUNCksCisJCSAgICAodW5zaWduZWQgbG9uZylQVDMsICh1bnNpZ25l
ZCBsb25nKXZ0b3BoeXMoUFQzKSwKKwkJICAgICh1bnNpZ25lZCBsb25nKVBUMiwgKHVuc2ln
bmVkIGxvbmcpdnRvcGh5cyhQVDIpKTsKKworCS8qCisJICogVGhlIGZvbGxvd2luZyBzZWN0
aW9uIGlzIGEgZGlyZWN0IGNvcHkgb2YKKwkgKiBoZWFkL3NyYy9zeXMvYm9vdC9pMzg2L2xp
YmkzODYvZWxmNjRfZnJlZWJzZC5jOjkyIGF0IHIyMzY2ODgKKwkgKi8KKworCWJ6ZXJvKFBU
NCwgUEFHRV9TSVpFKTsKKwliemVybyhQVDMsIFBBR0VfU0laRSk7CisJYnplcm8oUFQyLCBQ
QUdFX1NJWkUpOworCisJLyoKKwkgKiBUaGlzIGlzIGtpbmRhIGJydXRhbCwgYnV0IGV2ZXJ5
IHNpbmdsZSAxR0IgVk0gbWVtb3J5IHNlZ21lbnQgcG9pbnRzCisJICogdG8gdGhlIHNhbWUg
Zmlyc3QgMUdCIG9mIHBoeXNpY2FsIG1lbW9yeS4gIEJ1dCBpdCBpcyBtb3JlIHRoYW4KKwkg
KiBhZGVxdWF0ZS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgNTEyOyBpKyspIHsKKwkJLyoK
KwkJICogRWFjaCBzbG90IG9mIHRoZSBsZXZlbCA0IHBhZ2VzIHBvaW50cyB0byB0aGUKKwkJ
ICogc2FtZSBsZXZlbCAzIHBhZ2UKKwkJICovCisJCVBUNFtpXSA9IChwdF9lbnRyeV90KSh2
dG9waHlzKFBUMykpOworCQlQVDRbaV0gfD0gUEdfViB8IFBHX1JXIHwgUEdfVTsKKworCQkv
KgorCQkgKiBFYWNoIHNsb3Qgb2YgdGhlIGxldmVsIDMgcGFnZXMgcG9pbnRzIHRvIHRoZQor
CQkgKiBzYW1lIGxldmVsIDIgcGFnZQorCQkgKi8KKwkJUFQzW2ldID0gKHB0X2VudHJ5X3Qp
KHZ0b3BoeXMoUFQyKSk7CisJCVBUM1tpXSB8PSBQR19WIHwgUEdfUlcgfCBQR19VOworCisJ
CS8qIFRoZSBsZXZlbCAyIHBhZ2Ugc2xvdHMgYXJlIG1hcHBlZCB3aXRoIDJNQiBwYWdlcyBm
b3IgMUdCLiAqLworCQlQVDJbaV0gPSBpICogKDIgKiAxMDI0ICogMTAyNCk7CisJCVBUMltp
XSB8PSBQR19WIHwgUEdfUlcgfCBQR19QUyB8IFBHX1U7CisJfQorCXJldHVybiAoKHB0X2Vu
dHJ5X3QgKil2dG9waHlzKFBUNCkpOworfQpkaWZmIC0tZ2l0IGEvc3lzL2FtZDY0L2FtZDY0
L2tsb2FkX2V4ZWMuUyBiL3N5cy9hbWQ2NC9hbWQ2NC9rbG9hZF9leGVjLlMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzViZmYzYgotLS0gL2Rldi9udWxsCisrKyBi
L3N5cy9hbWQ2NC9hbWQ2NC9rbG9hZF9leGVjLlMKQEAgLTAsMCArMSwxODAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKGMpIDIwMTEgLSAyMDEyCisgKglSdXNzZWxsIENhdHRlbGFuIERpZ2l0
YWwgRWx2ZXMgSW5jCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgLSAyMDEyCisgKglJc2lsb24g
U3lzdGVtcywgTExDLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisg
Ki8KKworI2luY2x1ZGUgImFzc3ltLnMiCisKKyNkZWZpbmUJQ1IwX1BHCTB4ODAwMDAwMDAJ
LyogUGFHaW5nIGVuYWJsZSAqLworCisjZGVmaW5lIFg4Nl9DUjBfUEUJMHgwMDAwMDAwMSAv
KiBQcm90ZWN0aW9uIEVuYWJsZSAqLworI2RlZmluZSBYODZfQ1IwX01QCTB4MDAwMDAwMDIg
LyogTW9uaXRvciBDb3Byb2Nlc3NvciAqLworI2RlZmluZSBYODZfQ1IwX0VNCTB4MDAwMDAw
MDQgLyogRW11bGF0aW9uICovCisjZGVmaW5lIFg4Nl9DUjBfVFMJMHgwMDAwMDAwOCAvKiBU
YXNrIFN3aXRjaGVkICovCisjZGVmaW5lIFg4Nl9DUjBfRVQJMHgwMDAwMDAxMCAvKiBFeHRl
bnNpb24gVHlwZSAqLworI2RlZmluZSBYODZfQ1IwX05FCTB4MDAwMDAwMjAgLyogTnVtZXJp
YyBFcnJvciAqLworI2RlZmluZSBYODZfQ1IwX1dQCTB4MDAwMTAwMDAgLyogV3JpdGUgUHJv
dGVjdCAqLworI2RlZmluZSBYODZfQ1IwX0FNCTB4MDAwNDAwMDAgLyogQWxpZ25tZW50IE1h
c2sgKi8KKyNkZWZpbmUgWDg2X0NSMF9OVwkweDIwMDAwMDAwIC8qIE5vdCBXcml0ZS10aHJv
dWdoICovCisjZGVmaW5lIFg4Nl9DUjBfQ0QJMHg0MDAwMDAwMCAvKiBDYWNoZSBEaXNhYmxl
ICovCisjZGVmaW5lIFg4Nl9DUjBfUEcJMHg4MDAwMDAwMCAvKiBQYWdpbmcgKi8KKworI2Rl
ZmluZSBYODZfQ1I0X1BTRQkweDAwMDAwMDEwIC8qIGVuYWJsZSBwYWdlIHNpemUgZXh0ZW5z
aW9ucyAqLworI2RlZmluZSBYODZfQ1I0X1BBRQkweDAwMDAwMDIwIC8qIGVuYWJsZSBwaHlz
aWNhbCBhZGRyZXNzIGV4dGVuc2lvbnMgKi8KKworCS5nbG9ibCByZWxvY2F0ZV9rZXJuZWwK
K3JlbG9jYXRlX2tlcm5lbDoKKwkvKiBmaXJzdCBpbnN0YWxsIHRoZSBuZXcgcGFnZSB0YWJs
ZSAqLworCW1vdnEJMzIoJXJjeCksICVyYXggLyogcGFnZSB0YWJsZSAqLworCW1vdnEJNDAo
JXJjeCksICVyOSAgLyogYWRkcmVzcyBvZiBjb250cm9sX3BhZ2Ugd2l0aCBuZXcgUFQgKi8K
Kwltb3ZxCSVyYXgsICVjcjMKKworCS8qCisJICogU2V0IGNyNCB0byBhIGtub3duIHN0YXRl
OgorCSAqICAtIHBhZ2Ugc2l6ZSBleHRlbnNpb25zCisJICogIC0gcGh5c2ljYWwgYWRkcmVz
cyBleHRlbnNpb24gZW5hYmxlZAorCSAqLworCW1vdnEJJChYODZfQ1I0X1BTRSB8IFg4Nl9D
UjRfUEFFKSwgJXJheAorCW1vdnEJJXJheCwgJWNyNAorCisJLyogdGhlbiBtb3ZlIHRoZSBz
dGFjayB0byB0aGUgZW5kIG9mIGNvbnRyb2wgcGFnZSAqLworCWxlYSA0MDk2KCVyOSksICVy
c3AKKworCS8qIG5vdyBzYXZlIHN0dWZmIG9udG8gdGhlIG5ldyBzdGFjayAqLworCXB1c2hx
CSVyY3gJLyogYXJnIDQgY29udHJvbCBwYWdlICovCisJcHVzaHEJJXJkeAkvKiBhcmcgMyBj
b2RlIHBhZ2UgKi8KKwlwdXNocQklcnNpCS8qIGFyZyAyIGtlcm4gYmFzZSAqLworCXB1c2hx
CSVyZGkJLyogYXJnIDEgdmFfbGlzdCAqLworCisJLyogemVybyBvdXQgZmxhZ3MsIGFuZCBk
aXNhYmxlIGludGVycnVwdHMgKi8KKwlwdXNocSAkMAorCXBvcGZxCisJY2xpCisKKwkvKiBp
bnN0YWxsIHNpbXBsZSBnZHQgKi8KKwltb3ZxCTI0KCVyOSksICVyYXgJLyogZ2R0ICovCisJ
bGdkdAkoJXJheCkKKwltb3ZxCTU2KCVyOSksICVyYXgKKwlsaWR0CSglcmF4KQkJLyogbnVs
bCBpZHQgKi8KKwkvKgorCSAqIG5vdyBtb3ZlIHRvIHRoZSBjb2RlIHBhZ2UKKwkgKiBzaG91
bGQgaGF2ZSBiZWVuIHBhc3NlZCBjb2RlX3BhZ2UgYmFzZWQKKwkgKiBvbiBuZXcgcGFnZSB0
YWJsZQorCSAqLworCW1vdnEgJXJkeCwgJXI4CisJYWRkcQkkKGlkZW50aXR5X21hcHBlZCAt
IHJlbG9jYXRlX2tlcm5lbCksICVyOAorCS8qIG9mZnNldCBvZiBjb2RlIHNlZ21lbnQgaW4g
bmV3IGdkdCAqLworCXB1c2hxICQweDA4CisJcHVzaHEgJXI4CisJLyoganVtcCB0byB0aGlz
IHNwb3QgaW4gdGhlIG5ldyBwYWdlICovCisJbHJldHEKK2lkZW50aXR5X21hcHBlZDoKKwor
CW1vdnEgJDB4MTAsJXJheAorCW1vdnEgJXJheCwlZHMKKwltb3ZxICVyYXgsJWVzCisJbW92
cSAlcmF4LCVmcworCW1vdnEgJXJheCwlZ3MKKwltb3ZxICVyYXgsJXNzCisJCisJLyoKKwkg
KiBTZXQgY3IwIHRvIGEga25vd24gc3RhdGU6CisJICogIC0gUGFnaW5nIGVuYWJsZWQKKwkg
KiAgLSBBbGlnbm1lbnQgY2hlY2sgZGlzYWJsZWQKKwkgKiAgLSBXcml0ZSBwcm90ZWN0IGRp
c2FibGVkCisJICogIC0gTm8gdGFzayBzd2l0Y2gKKwkgKiAgLSBEb24ndCBkbyBGUCBzb2Z0
d2FyZSBlbXVsYXRpb24uCisJICogIC0gUHJvY3RlY3RlZCBtb2RlIGVuYWJsZWQKKwkgKi8K
Kwltb3ZxCSVjcjAsICVyYXgKKwlhbmRxCSR+KFg4Nl9DUjBfQU0gfCBYODZfQ1IwX1dQIHwg
WDg2X0NSMF9UUyB8IFg4Nl9DUjBfRU0gfCAgWDg2X0NSMF9NUCB8IFg4Nl9DUjBfTkUpLCAl
cmF4CisJb3JsCSQoWDg2X0NSMF9QRyB8IFg4Nl9DUjBfUEUpLCAlZWF4CisJbW92cQklcmF4
LCAlY3IwCisKKwkvKiBEbyB0aGUgY29waWVzICovCisJY2xkCisJLyogc2F2ZWQgbGlzdCBv
ZiBzb3VyY2UgcGFnZXMgKi8KKwltb3ZxIDAoJXJzcCksICVyYngKKwkvKgorCSAqIHRoZSBp
bml0aWFsIGRlc3QgcGFnZQorCSogdGhpcyBpcyBLRVJOQkFTRSArIDB4MjAwMDAwCisJKiBr
ZXJuZWwgaXMgY29udGlnaW91cyBpbiBtZW1vcnkKKwkqLworCW1vdnEgOCglcnNwKSwgJXJk
aQorMDoJLyogdG9wLCByZWFkIGFub3RoZXIgd29yZCBmb3IgdGhlIGluZGlyZWN0aW9uIHBh
Z2UgKi8KKwltb3ZxCSglcmJ4KSwgJXJjeAorCisJYWRkcQkkOCwgJXJieAorCXRlc3RxCSQw
eDEsICAgJXJjeCAgLyogaXMgaXQgYSBkZXN0aW5hdGlvbiBwYWdlICovCisJanoJMWYKKwlt
b3ZxCSVyY3gsCSVyZGkKKwlhbmRxCSQweEZGRkZGRkZGZmZmZmYwMDAsICVyZGkKKwlqbXAg
ICAgIDBiCisxOgorCXRlc3RxCSQweDIsCSVyY3ggIC8qIGlzIGl0IGFuIGluZGlyZWN0aW9u
IHBhZ2UgKi8KKwlqegkxZgorCW1vdnEJJXJjeCwJJXJieAorCWFuZHEJJDB4RkZGRkZGRkZm
ZmZmZjAwMCwgJXJieAorCWptcCAgICAgMGIKKzE6CisJdGVzdHEgICAkMHg0LCAgICVyY3gg
LyogaXMgaXQgdGhlIGRvbmUgaW5kaWNhdG9yICovCisJanogICAgICAxZgorCWptcCAgICAg
MmYKKzE6CisJdGVzdHEgICAkMHg4LCAgICVyY3ggLyogaXMgaXQgdGhlIHNvdXJjZSBpbmRp
Y2F0b3IgKi8KKwlqeiAgICAgIDBiCSAgICAgLyogSWdub3JlIGl0IG90aGVyd2lzZSAqLwor
CW1vdnEgICAgJXJjeCwgICAlcnNpIC8qIEZvciBldmVyeSBzb3VyY2UgcGFnZSBkbyBhIGNv
cHkgKi8KKwlhbmRxICAgICQweGZmZmZmZmZmZmZmZmYwMDAsICVyc2kKKwltb3ZxICAgICQ1
MTIsICVyY3gKKwlyZXAKKwltb3ZzcQorCWptcCAgICAgMGIKKzI6CisJLyoKKwkgKiBzZXQg
YWxsIG9mIHRoZSByZWdpc3RlcnMgdG8ga25vd24gdmFsdWVzCisJICogbGVhdmUgJXJzcCBh
bG9uZQorCSAqLworCXhvcnEJJXJheCwgJXJheAorCXhvcnEJJXJieCwgJXJieAorCXhvcnEg
ICAgJXJjeCwgJXJjeAorCXhvcnEgICAgJXJkeCwgJXJkeAorCXhvcnEgICAgJXJzaSwgJXJz
aQorCXhvcnEgICAgJXJkaSwgJXJkaQorCXhvcnEgICAgJXJicCwgJXJicAorCisJcHVzaHEJ
MTYoJXI5KQkvKiBwaHlzZnJlZSAqLworCW1vdnEJOCglcjkpLCAlcmF4CS8qIG1vZHVsZXAg
Ki8KKwlzYWxxCSQzMiwgJXJheAorCXB1c2hxCSVyYXgKKworCXB1c2hxICQweDgKKwlwdXNo
cQk0OCglcjkpCS8qIGVudHJ5ICMga2VybmVsIGVudHJ5IHB0ICovCisJbHJldHEKK3JlbG9j
YXRlX2tlcm5lbF9lbmQ6CisJLmdsb2JsIHJlbG9jYXRlX2tlcm5lbF9zaXplCityZWxvY2F0
ZV9rZXJuZWxfc2l6ZToKKwkubG9uZyByZWxvY2F0ZV9rZXJuZWxfZW5kIC0gcmVsb2NhdGVf
a2VybmVsCmRpZmYgLS1naXQgYS9zeXMvYW1kNjQvYW1kNjQvbXBfbWFjaGRlcC5jIGIvc3lz
L2FtZDY0L2FtZDY0L21wX21hY2hkZXAuYwppbmRleCBkMmU0YWFkLi5iMDg1MzI2IDEwMDY0
NAotLS0gYS9zeXMvYW1kNjQvYW1kNjQvbXBfbWFjaGRlcC5jCisrKyBiL3N5cy9hbWQ2NC9h
bWQ2NC9tcF9tYWNoZGVwLmMKQEAgLTc4LDYgKzc4LDkgQEAgX19GQlNESUQoIiRGcmVlQlNE
JCIpOwogI2RlZmluZSBCSU9TX1JFU0VUCQkoMHgwZikKICNkZWZpbmUgQklPU19XQVJNCQko
MHgwYSkKIAorCisvLyBxdWljayBoYWNrIHRvIGFjY2VzcyB0aGUga2xvYWQgcGFnZSB0YWJs
ZSBzbyB3ZSBjYW4gc2V0IHRoZSBBUHMgdG8gYSBrbm93IHBndGJsICovCitleHRlcm4gdW5z
aWduZWQgbG9uZyBrbG9hZF9wZ3RibDsKIC8qIGxvY2sgcmVnaW9uIHVzZWQgYnkga2VybmVs
IHByb2ZpbGluZyAqLwogaW50CW1jb3VudF9sb2NrOwogCkBAIC0xNDA5LDEwICsxNDEyLDIw
IEBAIGNwdXN0b3BfaGFuZGxlcih2b2lkKQogdm9pZAogY3B1c3VzcGVuZF9oYW5kbGVyKHZv
aWQpCiB7CisJcmVnaXN0ZXJfdCBjcjMsIHJmOworCXJlZ2lzdGVyX3QgY3IwLCBjcjQ7CiAJ
dV9pbnQgY3B1OwogCiAJY3B1ID0gUENQVV9HRVQoY3B1aWQpOwogCisJcHJpbnRmKCIlcyBj
YWxsZWQgb24gY3B1JWRcbiIsX19GVU5DVElPTl9fLGNwdSk7CisKKwlyZiA9IGludHJfZGlz
YWJsZSgpOworCWNyMyA9IHJjcjMoKTsKKworCWxhcGljX2NsZWFyX2xhcGljKDEgLyogZGlz
YWJsZSBsYXBpYyAqLyk7CisgCS8qIHNodXRkb3duIGludGVycnVwdHMgdG8gdGhlIGNwdSBh
bmQgdGhlbiBzZXQgdGhlIG1hc2sgYXMgc3RvcHBlZCAqLworCiAJaWYgKHNhdmVjdHgoc3Vz
cHBjYnNbY3B1XSkpIHsKIAkJY3R4X2ZwdXNhdmUoc3VzcHBjYnNbY3B1XS0+cGNiX2ZwdXN1
c3BlbmQpOwogCQl3YmludmQoKTsKQEAgLTE0MjIsMjAgKzE0MzUsMzcgQEAgY3B1c3VzcGVu
ZF9oYW5kbGVyKHZvaWQpCiAJCWluaXRpYWxpemVjcHUoKTsKIAkJUENQVV9TRVQoc3dpdGNo
dGltZSwgMCk7CiAJCVBDUFVfU0VUKHN3aXRjaHRpY2tzLCB0aWNrcyk7Ci0KLQkJLyogSW5k
aWNhdGUgdGhhdCB3ZSBhcmUgcmVzdW1lZCAqLwotCQlDUFVfQ0xSX0FUT01JQyhjcHUsICZz
dXNwZW5kZWRfY3B1cyk7CiAJfQogCisJLyogbWFrZSBzdXJlIHRoZSBwYWdlIHRhYmxlIGlz
IG5vdCB0aGUgc2FtZSBvbmUgdGhhdCBib290IHByb2Nlc3Mgc2V0cyB1cCAqLworCWxvYWRf
Y3IzKGtsb2FkX3BndGJsKTsKKworCS8qIERpc2FibGUgUEdFLiAqLworCWNyNCA9IHJjcjQo
KTsKKwlsb2FkX2NyNChjcjQgJiB+Q1I0X1BHRSk7CisKKwkvKiBEaXNhYmxlIGNhY2hlcyAo
Q0QgPSAxLCBOVyA9IDApIGFuZCBwYWdpbmcqLworCWNyMCA9IHJjcjAoKTsKKwlsb2FkX2Ny
MCgoY3IwICYgfkNSMF9OVykgfCBDUjBfQ0QgfCBDUjBfUEcpOworCisJLyogRmx1c2hlcyBj
YWNoZXMgYW5kIFRMQnMuICovCisJd2JpbnZkKCk7CisJaW52bHRsYigpOworCisJaGFsdCgp
OworCiAJLyogV2FpdCBmb3IgcmVzdW1lICovCiAJd2hpbGUgKCFDUFVfSVNTRVQoY3B1LCAm
c3RhcnRlZF9jcHVzKSkKIAkJaWEzMl9wYXVzZSgpOwogCiAJQ1BVX0NMUl9BVE9NSUMoY3B1
LCAmc3RhcnRlZF9jcHVzKTsKKwlDUFVfQ0xSX0FUT01JQyhjcHUsICZzdG9wcGVkX2NwdXMp
OwogCi0JLyogUmVzdW1lIE1DQSBhbmQgbG9jYWwgQVBJQyAqLworCS8qIFJlc3RvcmUgQ1Iz
IGFuZCBlbmFibGUgaW50ZXJydXB0cyAqLworCWxvYWRfY3IzKGNyMyk7CiAJbWNhX3Jlc3Vt
ZSgpOwogCWxhcGljX3NldHVwKDApOworCWludHJfcmVzdG9yZShyZik7CiB9CiAKIC8qCmRp
ZmYgLS1naXQgYS9zeXMvYW1kNjQvaW5jbHVkZS9hcGljdmFyLmggYi9zeXMvYW1kNjQvaW5j
bHVkZS9hcGljdmFyLmgKaW5kZXggYWUyZjViOS4uN2ZkZWQ5NSAxMDA2NDQKLS0tIGEvc3lz
L2FtZDY0L2luY2x1ZGUvYXBpY3Zhci5oCisrKyBiL3N5cy9hbWQ2NC9pbmNsdWRlL2FwaWN2
YXIuaApAQCAtMjI3LDYgKzIyNyw3IEBAIGludAlsYXBpY19zZXRfbHZ0X3RyaWdnZXJtb2Rl
KHVfaW50IGFwaWNfaWQsIHVfaW50IGx2dCwKIAkgICAgZW51bSBpbnRyX3RyaWdnZXIgdHJp
Z2dlcik7CiB2b2lkCWxhcGljX3NldF90cHIodV9pbnQgdmVjdG9yKTsKIHZvaWQJbGFwaWNf
c2V0dXAoaW50IGJvb3QpOwordm9pZAlsYXBpY19jbGVhcl9sYXBpYyh1X2ludCk7CiAKICNl
bmRpZiAvKiAhTE9DT1JFICovCiAjZW5kaWYgLyogX01BQ0hJTkVfQVBJQ1ZBUl9IXyAqLwpk
aWZmIC0tZ2l0IGEvc3lzL2FtZDY0L2luY2x1ZGUvaW50cl9tYWNoZGVwLmggYi9zeXMvYW1k
NjQvaW5jbHVkZS9pbnRyX21hY2hkZXAuaAppbmRleCA3MDBlMzVmLi5hOGVmMWZjIDEwMDY0
NAotLS0gYS9zeXMvYW1kNjQvaW5jbHVkZS9pbnRyX21hY2hkZXAuaAorKysgYi9zeXMvYW1k
NjQvaW5jbHVkZS9pbnRyX21hY2hkZXAuaApAQCAtMTU4LDYgKzE1OCw3IEBAIHN0cnVjdCBp
bnRzcmMgKmludHJfbG9va3VwX3NvdXJjZShpbnQgdmVjdG9yKTsKIGludAlpbnRyX3JlZ2lz
dGVyX3BpYyhzdHJ1Y3QgcGljICpwaWMpOwogaW50CWludHJfcmVnaXN0ZXJfc291cmNlKHN0
cnVjdCBpbnRzcmMgKmlzcmMpOwogaW50CWludHJfcmVtb3ZlX2hhbmRsZXIodm9pZCAqY29v
a2llKTsKK2ludAlpbnRyX2NsZWFyX2FsbF9oYW5kbGVycyh2b2lkKTsKIHZvaWQJaW50cl9y
ZXN1bWUodm9pZCk7CiB2b2lkCWludHJfc3VzcGVuZCh2b2lkKTsKIHZvaWQJaW50cmNudF9h
ZGQoY29uc3QgY2hhciAqbmFtZSwgdV9sb25nICoqY291bnRwKTsKZGlmZiAtLWdpdCBhL3N5
cy9ib290L2NvbW1vbi9sb2FkX2VsZi5jIGIvc3lzL2Jvb3QvY29tbW9uL2xvYWRfZWxmLmMK
aW5kZXggZTFlNmRlNy4uMzZkZjIyYyAxMDA2NDQKLS0tIGEvc3lzL2Jvb3QvY29tbW9uL2xv
YWRfZWxmLmMKKysrIGIvc3lzL2Jvb3QvY29tbW9uL2xvYWRfZWxmLmMKQEAgLTMxNywyNSAr
MzE3LDMwIEBAIF9fZWxmTihsb2FkaW1hZ2UpKHN0cnVjdCBwcmVsb2FkZWRfZmlsZSAqZnAs
IGVsZl9maWxlX3QgZWYsIHVfaW50NjRfdCBvZmYpCiAJICAgIGNvbnRpbnVlOwogCiAjaWZk
ZWYgRUxGX1ZFUkJPU0UKLQlwcmludGYoIlNlZ21lbnQ6IDB4JWx4QDB4JWx4IC0+IDB4JWx4
LTB4JWx4IiwKLQkgICAgKGxvbmcpcGhkcltpXS5wX2ZpbGVzeiwgKGxvbmcpcGhkcltpXS5w
X29mZnNldCwKLQkgICAgKGxvbmcpKHBoZHJbaV0ucF92YWRkciArIG9mZiksCi0JICAgIChs
b25nKShwaGRyW2ldLnBfdmFkZHIgKyBvZmYgKyBwaGRyW2ldLnBfbWVtc3ogLSAxKSk7CisJ
cHJpbnRmKCJTZWdtZW50OiBmaWxlc3ogMHglbGx4IEAgMHglMDE2bGx4IC0+ICB2YWRkcl9y
YW5nZSAweCUwMTZsbHggLSAweCUwMTZsbHgiLAorCSAgICAobG9uZyBsb25nKXBoZHJbaV0u
cF9maWxlc3osIChsb25nIGxvbmcpcGhkcltpXS5wX29mZnNldCwKKwkgICAgKGxvbmcgbG9u
ZykocGhkcltpXS5wX3ZhZGRyICsgb2ZmKSwKKwkgICAgKGxvbmcgbG9uZykocGhkcltpXS5w
X3ZhZGRyICsgb2ZmICsgcGhkcltpXS5wX21lbXN6IC0gMSkpOwogI2Vsc2UKIAlpZiAoKHBo
ZHJbaV0ucF9mbGFncyAmIFBGX1cpID09IDApIHsKLQkgICAgcHJpbnRmKCJ0ZXh0PTB4JWx4
ICIsIChsb25nKXBoZHJbaV0ucF9maWxlc3opOworCSAgICBwcmludGYoInRleHQ9MHglbGx4
ICIsIChsb25nIGxvbmcpcGhkcltpXS5wX2ZpbGVzeik7CiAJfSBlbHNlIHsKLQkgICAgcHJp
bnRmKCJkYXRhPTB4JWx4IiwgKGxvbmcpcGhkcltpXS5wX2ZpbGVzeik7CisJICAgIHByaW50
ZigiZGF0YT0weCVsbHgiLCAobG9uZyBsb25nKXBoZHJbaV0ucF9maWxlc3opOwogCSAgICBp
ZiAocGhkcltpXS5wX2ZpbGVzeiA8IHBoZHJbaV0ucF9tZW1zeikKLQkJcHJpbnRmKCIrMHgl
bHgiLCAobG9uZykocGhkcltpXS5wX21lbXN6IC1waGRyW2ldLnBfZmlsZXN6KSk7CisJCXBy
aW50ZigiKzB4JWxseCIsIChsb25nIGxvbmcpKHBoZHJbaV0ucF9tZW1zeiAtcGhkcltpXS5w
X2ZpbGVzeikpOwogCSAgICBwcmludGYoIiAiKTsKIAl9CiAjZW5kaWYKIAlmcGNvcHkgPSAw
OwogCWlmIChlZi0+Zmlyc3RsZW4gPiBwaGRyW2ldLnBfb2Zmc2V0KSB7CiAJICAgIGZwY29w
eSA9IGVmLT5maXJzdGxlbiAtIHBoZHJbaV0ucF9vZmZzZXQ7Ci0JICAgIGFyY2hzdy5hcmNo
X2NvcHlpbihlZi0+Zmlyc3RwYWdlICsgcGhkcltpXS5wX29mZnNldCwKLQkJCSAgICAgICBw
aGRyW2ldLnBfdmFkZHIgKyBvZmYsIGZwY29weSk7CisJICAgIHByaW50ZigiXG4lczolZCBm
aXJzdHBhZ2UgMHglbHggcF9vZmZzZXQgMHglbHggcF92YWRkciAweCVseCBvZmYgMHglbHhc
biIsCisJCSAgIF9fRlVOQ1RJT05fXyxfX0xJTkVfXywKKwkJICAgKHVuc2lnbmVkIGxvbmcp
ZWYtPmZpcnN0cGFnZSwKKwkJICAgKHVuc2lnbmVkIGxvbmcpIHBoZHJbaV0ucF9vZmZzZXQs
CisJCSAgICh1bnNpZ25lZCBsb25nKXBoZHJbaV0ucF92YWRkciwKKwkJICAgKHVuc2lnbmVk
IGxvbmcpb2ZmKTsKKwkgICAgYXJjaHN3LmFyY2hfY29weWluKGVmLT5maXJzdHBhZ2UgKyBw
aGRyW2ldLnBfb2Zmc2V0LCBwaGRyW2ldLnBfdmFkZHIgKyBvZmYsIGZwY29weSk7CiAJfQog
CWlmIChwaGRyW2ldLnBfZmlsZXN6ID4gZnBjb3B5KSB7CiAJICAgIGlmIChrZXJuX3ByZWFk
KGVmLT5mZCwgcGhkcltpXS5wX3ZhZGRyICsgb2ZmICsgZnBjb3B5LApAQCAtMzQ4LDkgKzM1
MywxMSBAQCBfX2VsZk4obG9hZGltYWdlKShzdHJ1Y3QgcHJlbG9hZGVkX2ZpbGUgKmZwLCBl
bGZfZmlsZV90IGVmLCB1X2ludDY0X3Qgb2ZmKQogCS8qIGNsZWFyIHNwYWNlIGZyb20gb3Zl
cnNpemVkIHNlZ21lbnRzOyBlZzogYnNzICovCiAJaWYgKHBoZHJbaV0ucF9maWxlc3ogPCBw
aGRyW2ldLnBfbWVtc3opIHsKICNpZmRlZiBFTEZfVkVSQk9TRQotCSAgICBwcmludGYoIiAo
YnNzOiAweCVseC0weCVseCkiLAotCQkobG9uZykocGhkcltpXS5wX3ZhZGRyICsgb2ZmICsg
cGhkcltpXS5wX2ZpbGVzeiksCi0JCShsb25nKShwaGRyW2ldLnBfdmFkZHIgKyBvZmYgKyBw
aGRyW2ldLnBfbWVtc3ogLSAxKSk7CisJICAgIHByaW50ZigiXG5cdChic3M6IDB4JWx4LTB4
JWx4KSB2YWRkciAweCVseCAgc2l6ZSAweCVseCBjbGVhcmluZ1xuIiwKKwkJICAgKGxvbmcp
KHBoZHJbaV0ucF92YWRkciArIG9mZiArIHBoZHJbaV0ucF9maWxlc3opLAorCQkgICAobG9u
ZykocGhkcltpXS5wX3ZhZGRyICsgb2ZmICsgcGhkcltpXS5wX21lbXN6IC0gMSksCisJCSAg
IChsb25nKShwaGRyW2ldLnBfdmFkZHIgKyBwaGRyW2ldLnBfZmlsZXN6KSwKKwkJICAgKGxv
bmcpKHBoZHJbaV0ucF9tZW1zeiAtIHBoZHJbaV0ucF9maWxlc3opICk7CiAjZW5kaWYKIAog
CSAgICBrZXJuX2J6ZXJvKHBoZHJbaV0ucF92YWRkciArIG9mZiArIHBoZHJbaV0ucF9maWxl
c3osCmRpZmYgLS1naXQgYS9zeXMvYm9vdC91c2VyYm9vdC9maWNsL01ha2VmaWxlIGIvc3lz
L2Jvb3QvdXNlcmJvb3QvZmljbC9NYWtlZmlsZQppbmRleCA0MmI5MzA5Li5kNzgxOGI5IDEw
MDY0NAotLS0gYS9zeXMvYm9vdC91c2VyYm9vdC9maWNsL01ha2VmaWxlCisrKyBiL3N5cy9i
b290L3VzZXJib290L2ZpY2wvTWFrZWZpbGUKQEAgLTYyLDYgKzYyLDEwIEBAIHNvZnRjb3Jl
LmM6ICR7U09GVFdPUkRTfSBzb2Z0Y29yZS5hd2sKIAkoY2QgJHsuQ1VSRElSfS8uLi8uLi9m
aWNsL3NvZnR3b3JkczsgY2F0ICR7U09GVFdPUkRTfSBcCiAJICAgIHwgYXdrIC1mIHNvZnRj
b3JlLmF3ayAtdiBkYXRlc3RhbXA9ImBMQ19BTEw9QyBkYXRlYCIpID4gJHsuVEFSR0VUfQog
CitiZWZvcmVkZXBlbmQgJHtPQkpTfTogbm8tbWFjaGluZQorCituby1tYWNoaW5lOgorCXJt
IC1mICAgJHsuQ1VSRElSfS8uLi8uLi9maWNsL21hY2hpbmUKICMuaWYgJHtNQUNISU5FX0NQ
VUFSQ0h9ID09ICJhbWQ2NCIKICMke1NSQ1M6TSouYzpSOlMvJC8uby9nfTogbWFjaGluZQog
IwpkaWZmIC0tZ2l0IGEvc3lzL2Jvb3QvdXNlcmJvb3QvdGVzdC90ZXN0LmMgYi9zeXMvYm9v
dC91c2VyYm9vdC90ZXN0L3Rlc3QuYwppbmRleCAzNjI1OGE3Li43NzIwMmMxIDEwMDY0NAot
LS0gYS9zeXMvYm9vdC91c2VyYm9vdC90ZXN0L3Rlc3QuYworKysgYi9zeXMvYm9vdC91c2Vy
Ym9vdC90ZXN0L3Rlc3QuYwpAQCAtMzc2LDYgKzM3NiwxMiBAQCB0ZXN0X2dldGVudih2b2lk
ICphcmcsIGludCBpZHgpCiAJcmV0dXJuICh2YXJzW2lkeF0pOwogfQogCitzdGF0aWMgaW50
Cit0ZXN0X2J1aWxkc21hcCh2b2lkICphcmcsIHZvaWQgKipzbWFwX3ZvaWQsIHNpemVfdCAq
b3V0bGVuKSAKK3sKKwlyZXR1cm4gKDApOworfQorCiBzdHJ1Y3QgbG9hZGVyX2NhbGxiYWNr
cyBjYiA9IHsKIAkucHV0YyA9IHRlc3RfcHV0YywKIAkuZ2V0YyA9IHRlc3RfZ2V0YywKQEAg
LTQwNSw2ICs0MTEsNyBAQCBzdHJ1Y3QgbG9hZGVyX2NhbGxiYWNrcyBjYiA9IHsKICAgICAg
ICAgLmdldG1lbSA9IHRlc3RfZ2V0bWVtLAogCiAJLmdldGVudiA9IHRlc3RfZ2V0ZW52LAor
CS5idWlsZHNtYXAgPSB0ZXN0X2J1aWxkc21hcCwKIH07CiAKIHZvaWQKQEAgLTQ2NCw1ICs0
NzEsNSBAQCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKIAl0ZXJtLmNfbGZsYWcgJj0g
fihJQ0FOT058RUNITyk7CiAJdGNzZXRhdHRyKDAsIFRDU0FGTFVTSCwgJnRlcm0pOwogCi0J
ZnVuYygmY2IsIE5VTEwsIFVTRVJCT09UX1ZFUlNJT05fMywgZGlza19mZCA+PSAwKTsKKwlm
dW5jKCZjYiwgTlVMTCwgVVNFUkJPT1RfVkVSU0lPTl80LCBkaXNrX2ZkID49IDApOwogfQpk
aWZmIC0tZ2l0IGEvc3lzL2Jvb3QvdXNlcmJvb3QvdXNlcmJvb3QuaCBiL3N5cy9ib290L3Vz
ZXJib290L3VzZXJib290LmgKaW5kZXggZTM4OTI3ZS4uMGE5ZDJmMSAxMDA2NDQKLS0tIGEv
c3lzL2Jvb3QvdXNlcmJvb3QvdXNlcmJvb3QuaAorKysgYi9zeXMvYm9vdC91c2VyYm9vdC91
c2VyYm9vdC5oCkBAIC0zMiw2ICszMiw3IEBACiAjZGVmaW5lCVVTRVJCT09UX1ZFUlNJT05f
MSAgICAgIDEKICNkZWZpbmUJVVNFUkJPT1RfVkVSU0lPTl8yICAgICAgMgogI2RlZmluZQlV
U0VSQk9PVF9WRVJTSU9OXzMgICAgICAzCisjZGVmaW5lCVVTRVJCT09UX1ZFUlNJT05fNCAg
ICAgIDQKIAogLyoKICAqIEV4aXQgY29kZXMgZnJvbSB0aGUgbG9hZGVyCkBAIC0xOTUsNCAr
MTk2LDExIEBAIHN0cnVjdCBsb2FkZXJfY2FsbGJhY2tzIHsKIAkgKiBlYWNoIGludm9jYXRp
b24gd2lsbCBhZGQgMSB0byB0aGUgcHJldmlvdXMgdmFsdWUgb2YgJ251bScuCiAJICovCiAJ
Y29uc3QgY2hhciAqCSgqZ2V0ZW52KSh2b2lkICphcmcsIGludCBudW0pOworCisJLyoKKwkg
KiBidWlsZCBzeXN0ZW0gc21hcAorCSAqIHRoaXMgaXMgZm9yIGtsb2FkIHRvIGJ1aWxkIHBh
c3MgYmFjayBpbiBhIGNvcHkgb2YgdGhlIHJ1bm5pbmcKKwkgKiBzeXN0ZW1zIHNtYXAgcmV0
dXJucworCSAqLworCWludCAoKmJ1aWxkc21hcCkodm9pZCAqYXJnLCB2b2lkICoqc21hcCwg
c2l6ZV90ICpsZW4pOwogfTsKZGlmZiAtLWdpdCBhL3N5cy9ib290L3VzZXJib290L3VzZXJi
b290L2Jvb3RpbmZvNjQuYyBiL3N5cy9ib290L3VzZXJib290L3VzZXJib290L2Jvb3RpbmZv
NjQuYwppbmRleCBmYzdjMTRkLi4yOGM0N2FiIDEwMDY0NAotLS0gYS9zeXMvYm9vdC91c2Vy
Ym9vdC91c2VyYm9vdC9ib290aW5mbzY0LmMKKysrIGIvc3lzL2Jvb3QvdXNlcmJvb3QvdXNl
cmJvb3QvYm9vdGluZm82NC5jCkBAIC0xODcsMzMgKzE4Nyw0NiBAQCBiaW9zX2FkZHNtYXBk
YXRhKHN0cnVjdCBwcmVsb2FkZWRfZmlsZSAqa2ZwKQogewogCXVpbnQ2NF90IGxvd21lbSwg
aGlnaG1lbTsKIAlpbnQgc21hcG51bSwgbGVuOwotCXN0cnVjdCBzbWFwIHNtYXBbM10sICpz
bTsKKwlzdHJ1Y3Qgc21hcCAqc21hcCA9IE5VTEwsICpzbSA9IE5VTEw7CisJaW50IGVycm9y
ID0gMTsKIAotCUNBTExCQUNLKGdldG1lbSwgJmxvd21lbSwgJmhpZ2htZW0pOworCXByaW50
ZigiJXNcbiIsX19GVU5DVElPTl9fKTsKIAotCXNtID0gJnNtYXBbMF07CisJaWYgKGNhbGxi
YWNrcy0+YnVpbGRzbWFwKQorCQllcnJvciA9IGNhbGxiYWNrcy0+YnVpbGRzbWFwKE5VTEws
ICh2b2lkICoqKSZzbWFwLCAmbGVuKTsKIAotCXNtLT5iYXNlID0gMDsJCQkJLyogYmFzZSBt
ZW1vcnkgKi8KLQlzbS0+bGVuZ3RoID0gNjQwICogMTAyNDsKLQlzbS0+dHlwZSA9IFNNQVBf
VFlQRV9NRU1PUlk7Ci0Jc20rKzsKKwkvKiBlaXRoZXIgdGhlcmUgaXMgbm8gYnVpbGRzbWFw
IGZ1bmN0aW9uIG9yIGl0IGZhaWxlZAorCSAqIHJldmVydCBiYWNrIHRvIHVzaW5nIGdldG1l
bSBhbmQgYSBzaW1wbGUgc21hcAorCSAqLwogCi0Jc20tPmJhc2UgPSAweDEwMDAwMDsJCQkv
KiBleHRlbmRlZCBtZW1vcnkgKi8KLQlzbS0+bGVuZ3RoID0gbG93bWVtIC0gMHgxMDAwMDA7
Ci0Jc20tPnR5cGUgPSBTTUFQX1RZUEVfTUVNT1JZOwotCXNtKys7CisJaWYgKGVycm9yKSB7
CisJCXNtYXAgPSBzbSA9IG1hbGxvYygzICogc2l6ZW9mKHN0cnVjdCBzbWFwKSk7CisJCUNB
TExCQUNLKGdldG1lbSwgJmxvd21lbSwgJmhpZ2htZW0pOwogCi0Jc21hcG51bSA9IDI7CisJ
CXNtLT5iYXNlID0gMDsJCQkJLyogYmFzZSBtZW1vcnkgKi8KKwkJc20tPmxlbmd0aCA9IDY0
MCAqIDEwMjQ7CisJCXNtLT50eXBlID0gU01BUF9UWVBFX01FTU9SWTsKKwkJc20rKzsKIAot
ICAgICAgICBpZiAoaGlnaG1lbSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgc20tPmJhc2Ug
PSA0ICogR0I7Ci0gICAgICAgICAgICAgICAgc20tPmxlbmd0aCA9IGhpZ2htZW07Ci0gICAg
ICAgICAgICAgICAgc20tPnR5cGUgPSBTTUFQX1RZUEVfTUVNT1JZOwotCQlzbWFwbnVtKys7
Ci0gICAgICAgIH0KKwkJc20tPmJhc2UgPSAweDEwMDAwMDsJCQkvKiBleHRlbmRlZCBtZW1v
cnkgKi8KKwkJc20tPmxlbmd0aCA9IGxvd21lbSAtIDB4MTAwMDAwOworCQlzbS0+dHlwZSA9
IFNNQVBfVFlQRV9NRU1PUlk7CisJCXNtKys7CiAKLSAgICAgICAgbGVuID0gc21hcG51bSAq
IHNpemVvZiAoc3RydWN0IHNtYXApOwotICAgICAgICBmaWxlX2FkZG1ldGFkYXRhKGtmcCwg
TU9ESU5GT01EX1NNQVAsIGxlbiwgJnNtYXBbMF0pOworCQlzbWFwbnVtID0gMjsKKworCQlp
ZiAoaGlnaG1lbSAhPSAwKSB7CisJCQlzbS0+YmFzZSA9IDQgKiBHQjsKKwkJCXNtLT5sZW5n
dGggPSBoaWdobWVtOworCQkJc20tPnR5cGUgPSBTTUFQX1RZUEVfTUVNT1JZOworCQkJc21h
cG51bSsrOworCQl9CisKKwkJbGVuID0gc21hcG51bSAqIHNpemVvZiAoc3RydWN0IHNtYXAp
OworCX0KKworCWZpbGVfYWRkbWV0YWRhdGEoa2ZwLCBNT0RJTkZPTURfU01BUCwgbGVuLCBz
bWFwKTsKKwlmcmVlKHNtYXApOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3lzL2Jvb3QvdXNl
cmJvb3QvdXNlcmJvb3QvY29uZi5jIGIvc3lzL2Jvb3QvdXNlcmJvb3QvdXNlcmJvb3QvY29u
Zi5jCmluZGV4IDBjNTdlYmEuLmQyYzEwNjcgMTAwNjQ0Ci0tLSBhL3N5cy9ib290L3VzZXJi
b290L3VzZXJib290L2NvbmYuYworKysgYi9zeXMvYm9vdC91c2VyYm9vdC91c2VyYm9vdC9j
b25mLmMKQEAgLTg2LDggKzg2LDExIEBAIHN0cnVjdCBmaWxlX2Zvcm1hdCAqZmlsZV9mb3Jt
YXRzW10gPSB7CiAgKiBkYXRhIHN0cnVjdHVyZXMgZnJvbSBib290c3RyYXAuaCBhcyB3ZWxs
LgogICovCiBleHRlcm4gc3RydWN0IGNvbnNvbGUgdXNlcmJvb3RfY29uc29sZTsKK2V4dGVy
biBzdHJ1Y3QgY29uc29sZSBjb21jb25zb2xlOworCiAKIHN0cnVjdCBjb25zb2xlICpjb25z
b2xlc1tdID0gewogCSZ1c2VyYm9vdF9jb25zb2xlLAorCSZjb21jb25zb2xlLAogCU5VTEwK
IH07CmRpZmYgLS1naXQgYS9zeXMvYm9vdC91c2VyYm9vdC91c2VyYm9vdC9tYWluLmMgYi9z
eXMvYm9vdC91c2VyYm9vdC91c2VyYm9vdC9tYWluLmMKaW5kZXggNDA5MmI5Yi4uMGUyZTBi
NyAxMDA2NDQKLS0tIGEvc3lzL2Jvb3QvdXNlcmJvb3QvdXNlcmJvb3QvbWFpbi5jCisrKyBi
L3N5cy9ib290L3VzZXJib290L3VzZXJib290L21haW4uYwpAQCAtMzYsOCArMzYsOSBAQCBf
X0ZCU0RJRCgiJEZyZWVCU0QkIik7CiAjaW5jbHVkZSAiZGlzay5oIgogI2luY2x1ZGUgImxp
YnVzZXJib290LmgiCiAKLSNkZWZpbmUJVVNFUkJPT1RfVkVSU0lPTglVU0VSQk9PVF9WRVJT
SU9OXzMKKyNkZWZpbmUJVVNFUkJPT1RfVkVSU0lPTglVU0VSQk9PVF9WRVJTSU9OXzQKIAor
c3RhdGljIGNoYXIgbWFsbG9jX2J1Zls1MTIqMTAyNF07CiBzdHJ1Y3QgbG9hZGVyX2NhbGxi
YWNrcyAqY2FsbGJhY2tzOwogdm9pZCAqY2FsbGJhY2tzX2FyZzsKIApAQCAtNjcsMzEgKzY4
LDQ3IEBAIGV4aXQoaW50IHYpCiB9CiAKIHZvaWQKK2xvYWRlcl9pbml0KHZvaWQpCit7CisJ
LyoKKwkgKiBJdCBkb2VzIG5vdCBodXJ0IHRvIHJlLWNhbGwgdGhpcyBhcyBpdCBqdXN0IHNl
dHMgZ2xvYmFsCisJICogcHRycyB0aGF0IG5ldmVyIGNoYW5nZSAKKwkgKi8KKwlzZXRoZWFw
KCh2b2lkICopbWFsbG9jX2J1ZiwgKHZvaWQgKikobWFsbG9jX2J1ZiArIDUxMioxMDI0KSk7
Cit9CisKK2ludAogbG9hZGVyX21haW4oc3RydWN0IGxvYWRlcl9jYWxsYmFja3MgKmNiLCB2
b2lkICphcmcsIGludCB2ZXJzaW9uLCBpbnQgbmRpc2tzKQogewotCXN0YXRpYyBjaGFyIG1h
bGxvY1s1MTIqMTAyNF07CiAJY29uc3QgY2hhciAqdmFyOwogCWludCBpOwotCi0gICAgICAg
IGlmICh2ZXJzaW9uICE9IFVTRVJCT09UX1ZFUlNJT04pCi0gICAgICAgICAgICAgICAgYWJv
cnQoKTsKLQotCWNhbGxiYWNrcyA9IGNiOwotICAgICAgICBjYWxsYmFja3NfYXJnID0gYXJn
OwotCXVzZXJib290X2Rpc2tfbWF4dW5pdCA9IG5kaXNrczsKLQorCQogCS8qCiAJICogaW5p
dGlhbGlzZSB0aGUgaGVhcCBhcyBlYXJseSBhcyBwb3NzaWJsZS4gIE9uY2UgdGhpcyBpcyBk
b25lLAogCSAqIGFsbG9jKCkgaXMgdXNhYmxlLiBUaGUgc3RhY2sgaXMgYnVyaWVkIGluc2lk
ZSB1cywgc28gdGhpcyBpcwogCSAqIHNhZmUuCiAJICovCi0Jc2V0aGVhcCgodm9pZCAqKW1h
bGxvYywgKHZvaWQgKikobWFsbG9jICsgNTEyKjEwMjQpKTsKKwlsb2FkZXJfaW5pdCgpOwor
ICAKKwlpZiAoY2IgIT0gTlVMTCkgeworCQljYWxsYmFja3MgPSBjYjsKKwkJY2FsbGJhY2tz
X2FyZyA9IGFyZzsKKwkJdXNlcmJvb3RfZGlza19tYXh1bml0ID0gbmRpc2tzOworCX0gZWxz
ZSB7CisJCXJldHVybiAoRUZBVUxUKTsKKwl9CiAKLSAgICAgICAgLyoKKwkvKgogICAgICAg
ICAgKiBIb29rIHVwIHRoZSBjb25zb2xlCiAgICAgICAgICAqLwogCWNvbnNfcHJvYmUoKTsK
IAorICAgICAgICBpZiAodmVyc2lvbiAhPSBVU0VSQk9PVF9WRVJTSU9OKSB7CisJCXByaW50
ZigiJXM6IHZlcnNpb24gZXhwZWN0ZWQgJWQgZ290ICVkXG4iLCBfX2Z1bmNfXywKKwkJICAg
ICAgVVNFUkJPT1RfVkVSU0lPTiwgdmVyc2lvbik7CisJCXJldHVybihFT1BOT1RTVVBQKTsK
Kwl9CisKIAkvKgogCSAqIE1hcmNoIHRocm91Z2ggdGhlIGRldmljZSBzd2l0Y2ggcHJvYmlu
ZyBmb3IgdGhpbmdzLgogCSAqLwpAQCAtMTI4LDExICsxNDUsMTEgQEAgbG9hZGVyX21haW4o
c3RydWN0IGxvYWRlcl9jYWxsYmFja3MgKmNiLCB2b2lkICphcmcsIGludCB2ZXJzaW9uLCBp
bnQgbmRpc2tzKQogCWV4dHJhY3RfY3VycmRldigpOwogCiAJaWYgKHNldGptcChqYikpCi0J
CXJldHVybjsKKwkJcmV0dXJuICgwKTsKIAogCWludGVyYWN0KCk7CQkJLyogZG9lc24ndCBy
ZXR1cm4gKi8KIAotCWV4aXQoMCk7CisJcmV0dXJuKDApOwogfQogCiAvKgpkaWZmIC0tZ2l0
IGEvc3lzL2Jvb3QvdXNlcmJvb3QvdXNlcmJvb3QvdXNlcmJvb3RfY29ucy5jIGIvc3lzL2Jv
b3QvdXNlcmJvb3QvdXNlcmJvb3QvdXNlcmJvb3RfY29ucy5jCmluZGV4IDVlY2I3YzguLjVh
OWE1NzMgMTAwNjQ0Ci0tLSBhL3N5cy9ib290L3VzZXJib290L3VzZXJib290L3VzZXJib290
X2NvbnMuYworKysgYi9zeXMvYm9vdC91c2VyYm9vdC91c2VyYm9vdC91c2VyYm9vdF9jb25z
LmMKQEAgLTUwLDYgKzUwLDE4IEBAIHN0cnVjdCBjb25zb2xlIHVzZXJib290X2NvbnNvbGUg
PSB7CiAJdXNlcmJvb3RfY29uc19wb2xsLAogfTsKIAorCitzdHJ1Y3QgY29uc29sZSBjb21j
b25zb2xlID0geworCSJjb21jb25zb2xlIiwKKwkiY29tc29uc29sZSIsCisJMCwKKwl1c2Vy
Ym9vdF9jb25zX3Byb2JlLAorCXVzZXJib290X2NvbnNfaW5pdCwKKwl1c2VyYm9vdF9jb25z
X3B1dGNoYXIsCisJdXNlcmJvb3RfY29uc19nZXRjaGFyLAorCXVzZXJib290X2NvbnNfcG9s
bCwKK307CisKIHN0YXRpYyB2b2lkCiB1c2VyYm9vdF9jb25zX3Byb2JlKHN0cnVjdCBjb25z
b2xlICpjcCkKIHsKZGlmZiAtLWdpdCBhL3N5cy9jb25mL2ZpbGVzIGIvc3lzL2NvbmYvZmls
ZXMKaW5kZXggNTU1NGVjMC4uNDlkZTkwYSAxMDA2NDQKLS0tIGEvc3lzL2NvbmYvZmlsZXMK
KysrIGIvc3lzL2NvbmYvZmlsZXMKQEAgLTI2MDcsNiArMjYwNyw3IEBAIGtlcm4va2Vybl9r
aGVscC5jCQlzdGFuZGFyZAoga2Vybi9rZXJuX2t0aHJlYWQuYwkJc3RhbmRhcmQKIGtlcm4v
a2Vybl9rdHIuYwkJCW9wdGlvbmFsIGt0cgoga2Vybi9rZXJuX2t0cmFjZS5jCQlzdGFuZGFy
ZAora2Vybi9rZXJuX2tsb2FkLmMJCXN0YW5kYXJkCiBrZXJuL2tlcm5fbGlua2VyLmMJCXN0
YW5kYXJkCiBrZXJuL2tlcm5fbG9jay5jCQlzdGFuZGFyZAoga2Vybi9rZXJuX2xvY2tmLmMJ
CXN0YW5kYXJkCmRpZmYgLS1naXQgYS9zeXMvY29uZi9maWxlcy5hbWQ2NCBiL3N5cy9jb25m
L2ZpbGVzLmFtZDY0CmluZGV4IGI2YTQ3NGUuLjI0NDdjN2JkIDEwMDY0NAotLS0gYS9zeXMv
Y29uZi9maWxlcy5hbWQ2NAorKysgYi9zeXMvY29uZi9maWxlcy5hbWQ2NApAQCAtOTMsNiAr
OTMsOSBAQCBhY3BpX3dha2VkYXRhLmgJCQlvcHRpb25hbAlhY3BpCQkJXAogCW5vLW9iaiBu
by1pbXBsaWNpdC1ydWxlCWJlZm9yZS1kZXBlbmQJCQkJXAogCWNsZWFuCQkiYWNwaV93YWtl
ZGF0YS5oIgogIworYW1kNjQvYW1kNjQva2xvYWRfZXhlYy5TCXN0YW5kYXJkCithbWQ2NC9h
bWQ2NC9rbG9hZC5jICAgICAgICAgICAgIHN0YW5kYXJkCisjCiBhbWQ2NC9hbWQ2NC9hbWQ2
NF9tZW0uYwkJb3B0aW9uYWwJbWVtCiAjYW1kNjQvYW1kNjQvYXBpY192ZWN0b3IuUwlzdGFu
ZGFyZAogYW1kNjQvYW1kNjQvYXRvbWljLmMJCXN0YW5kYXJkCmRpZmYgLS1naXQgYS9zeXMv
a2Vybi9pbml0X3N5c2VudC5jIGIvc3lzL2tlcm4vaW5pdF9zeXNlbnQuYwppbmRleCA2OGMy
NGUwLi5mODFhMDVmIDEwMDY0NAotLS0gYS9zeXMva2Vybi9pbml0X3N5c2VudC5jCisrKyBi
L3N5cy9rZXJuL2luaXRfc3lzZW50LmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogRE8gTk9U
IEVESVQtLSB0aGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQuCiAgKiAkRnJl
ZUJTRCQKLSAqIGNyZWF0ZWQgZnJvbSBGcmVlQlNEOiBoZWFkL3N5cy9rZXJuL3N5c2NhbGxz
Lm1hc3RlciAyNDI5NTggMjAxMi0xMS0xMyAxMjo1MjozMVoga2liIAorICogY3JlYXRlZCBm
cm9tIEZyZWVCU0QKICAqLwogCiAjaW5jbHVkZSAib3B0X2NvbXBhdC5oIgpAQCAtNTY3LDQg
KzU2Nyw1IEBAIHN0cnVjdCBzeXNlbnQgc3lzZW50W10gPSB7CiAJeyBBUyhwb3NpeF9mYWxs
b2NhdGVfYXJncyksIChzeV9jYWxsX3QgKilzeXNfcG9zaXhfZmFsbG9jYXRlLCBBVUVfTlVM
TCwgTlVMTCwgMCwgMCwgMCwgU1lfVEhSX1NUQVRJQyB9LAkvKiA1MzAgPSBwb3NpeF9mYWxs
b2NhdGUgKi8KIAl7IEFTKHBvc2l4X2ZhZHZpc2VfYXJncyksIChzeV9jYWxsX3QgKilzeXNf
cG9zaXhfZmFkdmlzZSwgQVVFX05VTEwsIE5VTEwsIDAsIDAsIDAsIFNZX1RIUl9TVEFUSUMg
fSwJLyogNTMxID0gcG9zaXhfZmFkdmlzZSAqLwogCXsgQVMod2FpdDZfYXJncyksIChzeV9j
YWxsX3QgKilzeXNfd2FpdDYsIEFVRV9XQUlUNiwgTlVMTCwgMCwgMCwgMCwgU1lfVEhSX1NU
QVRJQyB9LAkvKiA1MzIgPSB3YWl0NiAqLworCXsgQVMoa2xvYWRfYXJncyksIChzeV9jYWxs
X3QgKilzeXNfa2xvYWQsIEFVRV9OVUxMLCBOVUxMLCAwLCAwLCAwLCBTWV9USFJfU1RBVElD
IH0sCS8qIDUzMyA9IGtsb2FkICovCiB9OwpkaWZmIC0tZ2l0IGEvc3lzL2tlcm4va2Vybl9r
bG9hZC5jIGIvc3lzL2tlcm4va2Vybl9rbG9hZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjYzNjgzMGUKLS0tIC9kZXYvbnVsbAorKysgYi9zeXMva2Vybi9rZXJu
X2tsb2FkLmMKQEAgLTAsMCArMSw0MjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEg
LSAyMDEyCisgKglSdXNzZWxsIENhdHRlbGFuIERpZ2l0YWwgRWx2ZXMgSW5jCisgKiBDb3B5
cmlnaHQgKGMpIDIwMTEgLSAyMDEyCisgKglJc2lsb24gU3lzdGVtcywgTExDLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxzeXMvcGFy
YW0uaD4KKyNpbmNsdWRlIDxzeXMvYnVzLmg+CisjaW5jbHVkZSA8c3lzL2V2ZW50aGFuZGxl
ci5oPgorI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMva2xvYWQuaD4K
KyNpbmNsdWRlIDxzeXMvbG9jay5oPgorI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4KKyNpbmNs
dWRlIDxzeXMvbXV0ZXguaD4KKyNpbmNsdWRlIDxzeXMvcHJpdi5oPgorI2luY2x1ZGUgPHN5
cy9wcm9jLmg+CisjaW5jbHVkZSA8c3lzL3JlYm9vdC5oPgorI2luY2x1ZGUgPHN5cy9zY2hl
ZC5oPgorI2luY2x1ZGUgPHN5cy9zbXAuaD4KKyNpbmNsdWRlIDxzeXMvc3lzcHJvdG8uaD4K
KyNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KKworI2luY2x1ZGUgPG1hY2hpbmUvaW50cl9tYWNo
ZGVwLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hcGljdmFyLmg+CisjaW5jbHVkZSA8bWFjaGlu
ZS9zZWdtZW50cy5oPgorCisjaW5jbHVkZSA8dm0vdm1fcGFyYW0uaD4KKyNpbmNsdWRlIDx2
bS92bS5oPgorI2luY2x1ZGUgPHZtL3ZtX2V4dGVybi5oPgorI2luY2x1ZGUgPHZtL3ZtX2tl
cm4uaD4KKyNpbmNsdWRlIDx2bS92bV9vYmplY3QuaD4KKyNpbmNsdWRlIDx2bS92bV9wYWdl
Lmg+CisjaW5jbHVkZSA8dm0vdm1fcGFnZW91dC5oPgorI2luY2x1ZGUgPHZtL3ZtX21hcC5o
PgorCisKK3N0YXRpYyBzdHJ1Y3Qga2xvYWRfaXRlbXMgKmtfaXRlbXMgPSBOVUxMOworc3Rh
dGljIE1BTExPQ19ERUZJTkUoTV9LTE9BRCwgImtsb2FkX2l0ZW1zIiwgImtsb2FkIGl0ZW1z
Iik7CitpbnQga2xvYWRfcmVhZHkgPSAwOworCitzdGF0aWMgdm1fb2Zmc2V0X3Qga2xvYWRf
aW1hZ2VfdmEgPSAwOworLyoKKyAqIFdhcm5pbmcgdGhpcyBpcyBzb21ld2hhdCBhcmJpdHJh
cnksIGJ1dCBzaG91bGQgZ28KKyAqIGF3YXkgb25jZSB0aGUgYWxsb2NhdGUgZGVsYXlzIGlu
IGttZW1fYWxsb2NfYXR0ciBhcmUKKyAqIGZpeGVkLgorICovCisjZGVmaW5lCUlNQUdFX1BS
RUFMTE9DCSgyNCAqIDEwMjQgKiAxMDI0KQorCitzdGF0aWMgdm9pZCBrbG9hZF9pbml0KHZv
aWQpOworU1lTSU5JVChrbG9hZF9tZW0sIFNJX1NVQl9EUklWRVJTLCBTSV9PUkRFUl9BTlks
IGtsb2FkX2luaXQsIE5VTEwpOworCitzdGF0aWMgaW50IGtsb2FkX2NvcHlpbl9zZWdtZW50
KHN0cnVjdCBrbG9hZF9zZWdtZW50ICosaW50KTsKK3N0YXRpYyBpbnQga2xvYWRfYWRkX3Bh
Z2Uoc3RydWN0IGtsb2FkX2l0ZW1zICosIHVuc2lnbmVkIGxvbmcpOworc3RhdGljIHZvaWQg
a2xvYWRfc2h1dGRvd25fZmluYWwodm9pZCAqLCBpbnQpOworc3RhdGljIHN0cnVjdCByZWdp
b25fZGVzY3JpcHRvciAqbXlnZHQ7CitzdGF0aWMJdm1fb2Zmc2V0X3QgY29udHJvbF9wYWdl
Oworc3RhdGljCXZtX29mZnNldF90IGNvZGVfcGFnZTsKK3N0YXRpYyAJdm9pZCAqZ2R0X2Rl
c2M7CitzdGF0aWMgcHRfZW50cnlfdCAqcGd0Ymw7Cit1bnNpZ25lZCBsb25nIGtsb2FkX3Bn
dGJsOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4X2FkZHIgPSAwICwgbWluX2FkZHIgPSAw
OworCisjZGVmaW5lIEdJR01BU0sJCQkofigoMTw8MzApLTEpKQorI2RlZmluZQlPTkVHSUcJ
CQkoMTw8MzApCisjZGVmaW5lCUdVRVNUX0dEVFJfTElNSVQJKDMgKiA4IC0gMSkKKworZXh0
ZXJuIGNoYXIga2VybnBoeXNbXTsKKyNkZWZpbmUJS0xPQURCQVNFCQlLRVJOQkFTRQorCitz
dGF0aWMgdm9pZAordXBkYXRlX21heF9taW4odm1fb2Zmc2V0X3QgYWRkciwgaW50IGNvdW50
KQoreworCWludCBpOworCisJZm9yKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlpZiAo
dnRvcGh5cyhhZGRyICsgKGkgKiBQQUdFX1NJWkUpKSA8IG1pbl9hZGRyKQorCQkJbWluX2Fk
ZHIgPSB2dG9waHlzKGFkZHIgKyAoaSAqIFBBR0VfU0laRSkpOworCQlpZiAodnRvcGh5cyhh
ZGRyICsgKGkgKiBQQUdFX1NJWkUpKSA+IG1heF9hZGRyKQorCQkJbWF4X2FkZHIgPSB2dG9w
aHlzKGFkZHIgKyAoaSAqIFBBR0VfU0laRSkpOworCX0KK30KKworc3RhdGljIHZtX29mZnNl
dF90CitrbG9hZF9rbWVtX2FsbG9jKHZtX21hcF90IG1hcCwgdm1fc2l6ZV90IHNpemUpCit7
CisJdm1fb2Zmc2V0X3QgdmE7CisJaW50IG51bV9wYWdlczsKKworCXZhID0ga21lbV9hbGxv
Y19hdHRyKG1hcCwgc2l6ZSwKKwkgICAgTV9XQUlUT0sgfCBNX1pFUk8sCisJICAgIDAsICgx
IDw8IDMwKSAvKiAxR2lnIGxpbWl0ICovLAorCSAgICBWTV9NRU1BVFRSX1dSSVRFX0NPTUJJ
TklORyk7CisKKwludW1fcGFnZXMgPSByb3VuZHVwMihzaXplLFBBR0VfU0laRSkgPj4gUEFH
RV9TSElGVDsKKwl1cGRhdGVfbWF4X21pbih2YSwgbnVtX3BhZ2VzKTsKKworCXJldHVybiAo
dmEpOworCX0KKworc3RydWN0IGtsb2FkX2NwYWdlIHsKKwl1bnNpZ25lZCBsb25nIGtjcF9t
YWdpYzsJLyogMCAqLworCXVuc2lnbmVkIGxvbmcga2NwX21vZHVsZXA7CS8qIDEgKi8KKwl1
bnNpZ25lZCBsb25nIGtjcF9waHlzZnJlZTsJLyogMiAqLworCXVuc2lnbmVkIGxvbmcga2Nw
X2dkdDsJCS8qIDMgKi8KKwl1bnNpZ25lZCBsb25nIGtjcF9wZ3RibDsJLyogNCAqLworCXVu
c2lnbmVkIGxvbmcga2NwX2NwOwkJLyogNSAqLworCXVuc2lnbmVkIGxvbmcga2NwX2VudHJ5
X3B0OwkvKiA2ICovCisJdW5zaWduZWQgbG9uZyBrY3BfaWR0OwkJLyogNyAqLworfSBfX3Bh
Y2tlZDsKKworc3RhdGljIGludAora2xvYWRfYWRkX3BhZ2Uoc3RydWN0IGtsb2FkX2l0ZW1z
ICppdGVtcywgdW5zaWduZWQgbG9uZyBpdGVtX20pCit7CisJdm1fcGFkZHJfdCBwaHlzOwor
CXVuc2lnbmVkIGxvbmcgdmE7CisKKwlpZiAoKml0ZW1zLT5pdGVtICE9IDApIHsKKwkJcHJp
bnRmKCIgaXRlbSAhPSAwIDB4JWx4XG4iLCppdGVtcy0+aXRlbSk7CisJCWl0ZW1zLT5pdGVt
Kys7CisJCWl0ZW1zLT5pX2NvdW50LS07CisJfQorCisKKwlpZiAoKGl0ZW1zLT5pdGVtID09
IGl0ZW1zLT5sYXN0X2l0ZW0pIHx8IChpdGVtcy0+aV9jb3VudCA9PSAwKSkgeworCQkvKiBv
dXQgb2Ygc3BhY2UgaW4gY3VycmVudCBwYWdlIGdyYWIgYSBuZXcgb25lICovCisJCXZhID0g
KHVuc2lnbmVkIGxvbmcpa2xvYWRfa21lbV9hbGxvYyhrZXJuZWxfbWFwLFBBR0VfU0laRSk7
CisJCWlmIChpdGVtcy0+aGVhZF92YSA9PSAwKQorCQkJaXRlbXMtPmhlYWRfdmEgPSB2YTsK
KworCQlwaHlzID0gdnRvcGh5cyh2YSk7CisJCS8qIHN0b3JlIHRoZSBhZGRyZXNzIG9mIGlu
ZHJlY3QgcGFnZSAqLworCQkqaXRlbXMtPml0ZW0gPSAodW5zaWduZWQgbG9uZykKKwkJICAg
ICh2dG9waHlzKHZhKSArIEtMT0FEQkFTRSkgfCBLTE9BRF9JTkRJUkVDVDsKKwkJaXRlbXMt
Pml0ZW0gPSAodW5zaWduZWQgbG9uZyAqKXZhOworCQkvKiBvayBub3cgbW92ZSB0byBuZXcg
cGFnZSB0byBzdGFydCBzdG9yaW5nIGFkZHJlc3MgKi8KKwkJaXRlbXMtPmxhc3RfaXRlbSA9
ICh1bnNpZ25lZCBsb25nICopdmEgKworCQkgICAgKChQQUdFX1NJWkUvc2l6ZW9mKHVuc2ln
bmVkIGxvbmcpKSAtIDEpOworCQlpdGVtcy0+aV9jb3VudCA9ICgoUEFHRV9TSVpFL3NpemVv
Zih1bnNpZ25lZCBsb25nKSkgLSAxKTsKKwl9CisJKml0ZW1zLT5pdGVtID0gaXRlbV9tOwor
CWl0ZW1zLT5pdGVtKys7CisJaXRlbXMtPmlfY291bnQtLTsKKworCXJldHVybiAoMCk7Cit9
CisKK3N0YXRpYyB2b2lkCitrbG9hZF9pbml0KHZvaWQpCit7CisJaW50IHNpemUgPSBJTUFH
RV9QUkVBTExPQzsKKwlrbG9hZF9pbWFnZV92YSA9IGtsb2FkX2ttZW1fYWxsb2Moa2VybmVs
X21hcCwgc2l6ZSk7CisJcHJpbnRmKCIlcyAweCVseCBwcmVhbGxvY2F0ZWQgc2l6ZSAlZFxu
IiwgX19mdW5jX18sCisJICAgIGtsb2FkX2ltYWdlX3ZhLCBzaXplKTsKK30KKworaW50Citr
bG9hZF9jb3B5aW5fc2VnbWVudChzdHJ1Y3Qga2xvYWRfc2VnbWVudCAqa2hkciwgaW50IHNl
ZykKK3sKKwlpbnQgaTsKKwlpbnQgbnVtX3BhZ2VzOworCWludCBlcnJvciA9IDA7CisJdm1f
b2Zmc2V0X3QgdmEgPSBrbG9hZF9pbWFnZV92YTsKKworCW51bV9wYWdlcyA9IHJvdW5kdXAy
KGtoZHItPmtfbWVtc3osUEFHRV9TSVpFKSA+PiBQQUdFX1NISUZUOworCisJLyogY2hlY2sg
dG8gbWFrZSBzdXJlIHRoZSBwcmVhbGxvY2F0ZSBzcGFjZSBpcyBiZWcgZW5vdWdoICovCisJ
aWYgKHZhICYmICgobnVtX3BhZ2VzICogUEFHRV9TSVpFKSA+IElNQUdFX1BSRUFMTE9DKSkg
eworCQlwcmludGYoIiVzIHNpemUgb3ZlciAyNE1lZyAlZFxuIiwgX19mdW5jX18sCisJCQkg
bnVtX3BhZ2VzICogUEFHRV9TSVpFKTsKKwkJa21lbV9mcmVlKGtlcm5lbF9tYXAsIHZhLCBJ
TUFHRV9QUkVBTExPQyk7CisJCXZhID0gMDsKKwl9CisKKwlpZiAodmEgPT0gMCkgeworCQl2
YSA9IGtsb2FkX2ttZW1fYWxsb2Moa2VybmVsX21hcCwgbnVtX3BhZ2VzICogUEFHRV9TSVpF
KTsKKwkJaWYgKHZhID09IDApCisJCQlyZXR1cm4gKEVOT01FTSk7CisJfQorCisJLyogIG5l
ZWQgdG8gc2V0IHVwIGEgU1RBUlQgZHN0IHBhZ2UgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVt
X3BhZ2VzOyBpKyspIHsKKwkJa2xvYWRfYWRkX3BhZ2Uoa19pdGVtcywKKwkJICAgICh2dG9w
aHlzKHZhICsgKGkgKiBQQUdFX1NJWkUpKSArIEtMT0FEQkFTRSkgfCBLTE9BRF9TT1VSQ0Up
OworCX0KKwlwcmludGYoIiVzIHN0YXJ0aW5nIGNvcHlpbi4uLiAiLCBfX2Z1bmNfXyk7CisJ
KmtfaXRlbXMtPml0ZW0gPSBLTE9BRF9ET05FOworCWlmICgoZXJyb3IgPSBjb3B5aW4oa2hk
ci0+a19idWYsICh2b2lkICopdmEsIGtoZHItPmtfbWVtc3opKSAhPSAwKQorCQlyZXR1cm4g
KGVycm9yKTsKKwlwcmludGYoImNvcGllZCAlZCBieXRlcyB0byB2YSAlcCBkb25lIG1hcmtl
ciBhdCAlcFxuIiwKKwkgICAgICAgKGludClraGRyLT5rX21lbXN6LCAodm9pZCAqKXZhLCAm
a19pdGVtcy0+aXRlbSApOworCisJcmV0dXJuIChlcnJvcik7Cit9CisKK2ludAorc3lzX2ts
b2FkKHN0cnVjdCB0aHJlYWQgKnRkLCBzdHJ1Y3Qga2xvYWRfYXJncyAqdWFwKQoreworCXN0
cnVjdCByZWdpb25fZGVzY3JpcHRvciAqbnVsbF9pZHQ7CisJc3RydWN0IGtsb2FkX2NwYWdl
ICprX2NwYWdlOworCXN0cnVjdCBrbG9hZCBrbGQ7CisJaW50IGVycm9yID0gMDsKKwlpbnQg
aTsKKwlzaXplX3QgYnVmc2l6ZSA9IHVhcC0+YnVmbGVuOworCisJZXJyb3IgPSBwcml2X2No
ZWNrKHRkLCBQUklWX1JFQk9PVCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gKGVycm9yKTsK
KworCS8qCisJICogaG9vayBpbnRvIHRoZSBzaHV0ZG93bi9yZWJvb3QgcGF0aCBzbworCSAq
IHdlIGVuZCB1cCBoZXJlIGJlZm9yZSBjcHUgcmVzZXQKKwkgKi8KKwlFVkVOVEhBTkRMRVJf
UkVHSVNURVIoc2h1dGRvd25fZmluYWwsIGtsb2FkX3NodXRkb3duX2ZpbmFsLAorCSAgICBO
VUxMLCBTSFVURE9XTl9QUklfS0xPQUQpOworCisJbWF4X2FkZHIgPSAwOworCW1pbl9hZGRy
ID0gfjBVTDsKKworCWlmIChidWZzaXplICE9IHNpemVvZihzdHJ1Y3Qga2xvYWQpKSB7CisJ
CXByaW50ZigiSG1tIHNpemUgbm90IHJpZ2h0ICVqZCAlamRcbiIsICh1aW50bWF4X3QpYnVm
c2l6ZSwKKwkJICAgICh1aW50bWF4X3Qpc2l6ZW9mKHN0cnVjdCBrbG9hZCkpOworCQlyZXR1
cm4gKGVycm9yKTsKKwl9CisJaWYgKChlcnJvciA9IGNvcHlpbih1YXAtPmJ1ZiwgJmtsZCwg
YnVmc2l6ZSkpICE9IDApCisJCXJldHVybiAoZXJyb3IpOworCisJaWYgKGtfaXRlbXMgPT0g
TlVMTCkgeworCQlpZigoa19pdGVtcyA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGtsb2FkX2l0
ZW1zKSwKKwkJCQkgICAgIE1fS0xPQUQsIE1fV0FJVE9LfE1fWkVSTykpID09IE5VTEwpCisJ
CQlyZXR1cm4gKEVOT01FTSk7CisKKwkJa19pdGVtcy0+aGVhZCA9IDA7CisJCWtfaXRlbXMt
PmhlYWRfdmEgPSAwOworCQlrX2l0ZW1zLT5pdGVtID0gJmtfaXRlbXMtPmhlYWQ7CisJCWtf
aXRlbXMtPmxhc3RfaXRlbSA9ICZrX2l0ZW1zLT5oZWFkOworCX0KKworCWNvbnRyb2xfcGFn
ZSA9IGtsb2FkX2ttZW1fYWxsb2Moa2VybmVsX21hcCwgUEFHRV9TSVpFICogMik7CisJa19j
cGFnZSA9IChzdHJ1Y3Qga2xvYWRfY3BhZ2UgKiljb250cm9sX3BhZ2U7CisJY29kZV9wYWdl
ID0gY29udHJvbF9wYWdlICsgUEFHRV9TSVpFOworCisJcHJpbnRmKCJjb3B5IGZyb20gJXAg
a2VybmVsX2t1bXAgdG8gMHglbHggc2l6ZSAlZFxuIiwKKwkgICAgICAgcmVsb2NhdGVfa2Vy
bmVsLCAodW5zaWduZWQgbG9uZyljb2RlX3BhZ2UsIHJlbG9jYXRlX2tlcm5lbF9zaXplKTsK
KwltZW1zZXQoKHZvaWQgKiljb250cm9sX3BhZ2UsIDAsIFBBR0VfU0laRSAqIDIpOworCW1l
bWNweSgodm9pZCAqKWNvZGVfcGFnZSwgcmVsb2NhdGVfa2VybmVsLCByZWxvY2F0ZV9rZXJu
ZWxfc2l6ZSk7CisKKwlrX2NwYWdlLT5rY3BfbWFnaWMgPSAweEMwREU7CisJa19jcGFnZS0+
a2NwX21vZHVsZXAgPSBrbGQua19tb2R1bGVwOworCWtfY3BhZ2UtPmtjcF9waHlzZnJlZSA9
IGtsZC5rX3BoeXNmcmVlOworCisJbXlnZHQgPSAoc3RydWN0IHJlZ2lvbl9kZXNjcmlwdG9y
ICopa2xvYWRfa21lbV9hbGxvYyhrZXJuZWxfbWFwLAorCSAgICBQQUdFX1NJWkUpOworCWtf
Y3BhZ2UtPmtjcF9nZHQgPSAodW5zaWduZWQgbG9uZyl2dG9waHlzKG15Z2R0KSArIEtMT0FE
QkFTRTsKKworCWdkdF9kZXNjID0gKGNoYXIgKilteWdkdCArIHNpemVvZihzdHJ1Y3QgcmVn
aW9uX2Rlc2NyaXB0b3IpOworCXNldHVwX2ZyZWVic2RfZ2R0KGdkdF9kZXNjKTsKKwlteWdk
dC0+cmRfbGltaXQgPSBHVUVTVF9HRFRSX0xJTUlUOworCW15Z2R0LT5yZF9iYXNlID0gKHVu
c2lnbmVkIGxvbmcpKHZ0b3BoeXMoZ2R0X2Rlc2MpICsgS0xPQURCQVNFKTsKKworCS8qCisJ
ICogd2UgcGFzcyB0aGUgdmlydCBhZGRyIG9mIGNvbnRyb2xfcGFnZSBidXQgd2UgbmVlZAor
CSAqIG5ldyB2aXJ0IGFkZHIgYXMgd2VsbAorCSAqLworCWtfY3BhZ2UtPmtjcF9jcCA9ICh1
bnNpZ25lZCBsb25nKSh2dG9waHlzKGNvbnRyb2xfcGFnZSkgKyBLTE9BREJBU0UpOworCWtf
Y3BhZ2UtPmtjcF9lbnRyeV9wdCA9IGtsZC5rX2VudHJ5X3B0OworCisJLyogMTAgc2VnbWVu
dHMgc2hvdWxkIGJlIG1vcmUgdGhhbiBlbm91Z2ggKi8KKwlmb3IgKGkgPSAwIDsgKGkgPCBr
bGQubnVtX2hkcnMgJiYgaSA8PSAxMCk7IGkrKykKKwkJa2xvYWRfY29weWluX3NlZ21lbnQo
JmtsZC5raGRyW2ldLGkpOworCisJbnVsbF9pZHQgPSAoc3RydWN0IHJlZ2lvbl9kZXNjcmlw
dG9yKikKKwkgICAga2xvYWRfa21lbV9hbGxvYyhrZXJuZWxfbWFwLFBBR0VfU0laRSk7CisJ
a19jcGFnZS0+a2NwX2lkdCA9ICh1bnNpZ25lZCBsb25nKXZ0b3BoeXMobnVsbF9pZHQpICsg
S0xPQURCQVNFOworCS8qIFdpcGUgdGhlIElEVC4gKi8KKwludWxsX2lkdC0+cmRfbGltaXQg
PSAwOworCW51bGxfaWR0LT5yZF9iYXNlID0gMDsKKwkvKgorCSAqIFRoaXMgbXVzdCBiZSBi
dWlsdCBhZnRlciBhbGwgb3RoZXIgYWxsb2NhdGlvbnMgc28gaXQgY2FuCisJICogYnVpbGQg
YSBwYWdlIHRhYmxlIGVudHJ5IGJhc2VkIG9uIG1pbiBtYXggYWRkcmVzc2VzCisJICovCisJ
LyogcmV0dXJucyBuZXcgcGFnZSB0YWJsZSBwaHlzIGFkZHIgKi8KKwlwZ3RibCA9IGtsb2Fk
X2J1aWxkX3BhZ2VfdGFibGUoKTsKKwlpZiAocGd0YmwgPT0gTlVMTCkKKwkJcmV0dXJuIChF
Tk9NRU0pOworCWtsb2FkX3BndGJsID0gKHVuc2lnbmVkIGxvbmcpcGd0Ymw7CisJa19jcGFn
ZS0+a2NwX3BndGJsID0gKHVuc2lnbmVkIGxvbmcpcGd0Ymw7CisKKwlrbG9hZF9yZWFkeSA9
IDE7CisKKwlpZiAoYm9vdHZlcmJvc2UpCisJCXByaW50ZigiJXM6XG5cdCIKKwkJICAgICAg
ICJoZWFkX3ZhICAgICAgICAgMHglbHggKHBoeXMgMHglbHgpXG5cdCIKKwkJICAgICAgICJr
ZXJuYmFzZSAgICAgICAgMHglbHhcblx0IgorCQkgICAgICAgImNvZGVfcGFnZSAgICAgICAw
eCVseCAocGh5cyAweCVseClcblx0IgorCQkgICAgICAgImNvbnRyb2xfcGFnZSAgICAweCVs
eCAocGh5cyAweCVseClcblx0IgorCQkgICAgICAgImdkdCAgICAgICAgICAgICAweCVseCAo
cGh5cyAweCVseClcblx0IgorCQkgICAgICAgImlkdCAgICAgICAgICAgICAweCVseCAocGh5
cyAweCVseClcblx0IgorCQkgICAgICAgImtfZW50cnlfcHQgICAgICAweCVseFxuXHQiCisJ
CSAgICAgICAicGd0YmwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGh5cyAweCVs
eClcblx0IgorCQkgICAgICAgIm1heF9hZGRyICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHBoeXMgMHglbHgpXG5cdCIKKwkJICAgICAgICJtaW5fYWRkciAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChwaHlzIDB4JWx4KVxuXHQiCisJCSAgICAgICAibW9kdWxlcCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAocGh5cyAweCVseClcblx0IgorCQkgICAgICAgInBoeXNm
cmVlICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwaHlzIDB4JWx4KVxuIiwKKwkJICAg
ICAgIF9fZnVuY19fLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpa19pdGVtcy0+aGVhZF92
YSwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nKXZ0b3BoeXMoa19pdGVtcy0+aGVhZF92YSks
CisJCSAgICAgICAodW5zaWduZWQgbG9uZykoS0VSTkJBU0UgKyAodm1fcGFkZHJfdClrZXJu
cGh5cyksCisJCSAgICAgICAodW5zaWduZWQgbG9uZykoY29udHJvbF9wYWdlICsgUEFHRV9T
SVpFKSwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nKXZ0b3BoeXMoY29udHJvbF9wYWdlICsg
UEFHRV9TSVpFKSwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nKWNvbnRyb2xfcGFnZSwKKwkJ
ICAgICAgICh1bnNpZ25lZCBsb25nKXZ0b3BoeXMoY29udHJvbF9wYWdlKSwKKwkJICAgICAg
ICh1bnNpZ25lZCBsb25nKW15Z2R0LCh1bnNpZ25lZCBsb25nKXZ0b3BoeXMobXlnZHQpLAor
CQkgICAgICAgKHVuc2lnbmVkIGxvbmcpbnVsbF9pZHQsKHVuc2lnbmVkIGxvbmcpdnRvcGh5
cyhudWxsX2lkdCksCisJCSAgICAgICAodW5zaWduZWQgbG9uZylrbGQua19lbnRyeV9wdCwK
KwkJICAgICAgICh1bnNpZ25lZCBsb25nKXBndGJsLAorCQkgICAgICAgKHVuc2lnbmVkIGxv
bmcpbWF4X2FkZHIsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyltaW5fYWRkciwKKwkJICAg
ICAgICh1bnNpZ25lZCBsb25nKWtsZC5rX21vZHVsZXAsCisJCSAgICAgICAodW5zaWduZWQg
bG9uZylrbGQua19waHlzZnJlZSk7CisJCisJaWYoISh1YXAtPmZsYWdzICYgKEtMT0FEX0VY
RUMgfCBLTE9BRF9SRUJPT1QpKSkKKwkJZ290byBqdXN0X2xvYWQ7CisjaWYgZGVmaW5lZChT
TVApCisJLyoKKwkgKiBCaW5kIHVzIHRvIENQVSAwIHNvIHRoYXQgYWxsIHNodXRkb3duIGNv
ZGUgcnVucyB0aGVyZS4gIFNvbWUKKwkgKiBzeXN0ZW1zIGRvbid0IHNodXRkb3duIHByb3Bl
cmx5IChpLmUuLCBBQ1BJIHBvd2VyIG9mZikgaWYgd2UKKwkgKiBydW4gb24gYW5vdGhlciBw
cm9jZXNzb3IuCisJICovCisJcHJpbnRmKCJCaW5kaW5nIHByb2Nlc3MgdG8gY3B1IDBcbiIp
OworCXRocmVhZF9sb2NrKGN1cnRocmVhZCk7CisJc2NoZWRfYmluZChjdXJ0aHJlYWQsIDAp
OworCXRocmVhZF91bmxvY2soY3VydGhyZWFkKTsKKwlLQVNTRVJUKFBDUFVfR0VUKGNwdWlk
KSA9PSAwLCAoIiVzOiBub3QgcnVubmluZyBvbiBjcHUgMCIsIF9fZnVuY19fKSk7CisjZW5k
aWYKKwlpZih1YXAtPmZsYWdzICYgS0xPQURfUkVCT09UKSB7CisJCW10eF9sb2NrKCZHaWFu
dCk7CisJCWtlcm5fcmVib290KFJCX0tMT0FEKTsKKwkJLyogc2hvdWxkIG5vdCByZXR1cm4g
Ki8KKwkJbXR4X3VubG9jaygmR2lhbnQpOworCX0KKwkvKgorCSAqIHRoZSByZWJvb3QgY29k
ZSB3aWxsIGRvIGEgbW9kdWxlIHNodXRkb3duIHNvIGl0IGlzIG5vdAorCSAqIHBhcnQga2xv
YWRfc2h1dGRvd25fZmluYWwgYnV0IGl0IG5lZWRzIHRvIGhhcHBlbi4KKwkgKiBTbyBpbiB0
aGUgY2FzZSBvZiBleGVjIHJ1biBpdCBoZXJlCisJICovCisJaWYgKGJvb3R2ZXJib3NlKQor
CQlwcmludGYoIiVzOiBtb2R1bGVfc2h1dGRvd25cbiIsIF9fZnVuY19fKTsKKwlrbG9hZF9t
b2R1bGVfc2h1dGRvd24oKTsKKwlrbG9hZF9zaHV0ZG93bl9maW5hbChOVUxMLCBSQl9LTE9B
RCk7CitqdXN0X2xvYWQ6CisJcHJpbnRmKCIlczogS2VybmVsIGltYWdlIGxvYWRlZCB3YWl0
aW5nIGZvciByZWJvb3RcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gKDApOworfQorCitzdGF0
aWMgdm9pZAora2xvYWRfc2h1dGRvd25fZmluYWwodm9pZCAqYXJnLCBpbnQgaG93dG8pCit7
CisJaW50IHJldDsKKwljcHVzZXRfdCBtYXA7CisKKwkvKiBKdXN0IHRvIG1ha2Ugc3VyZSB3
ZSBhcmUgb24gY3B1IDAgKi8KKwlLQVNTRVJUKFBDUFVfR0VUKGNwdWlkKSA9PSAwLCAoIiVz
OiBub3QgcnVubmluZyBvbiBjcHUgMCIsIF9fZnVuY19fKSk7CisJaWYgKGtsb2FkX3JlYWR5
KSB7CisJCXByaW50ZigiJXM6IHN1c3BlbmQgQVBzXG4iLF9fRlVOQ1RJT05fXyk7CisJCW1h
cCA9IGFsbF9jcHVzOworCQkvKiB3ZSBzaG91bGQgYmUgYm91bmQgdG8gY3B1IDAgYXQgdGhp
cyBwb2ludCAqLworCQlwcmludGYoIiVzICBjcHVpZCAlZFxuIixfX0ZVTkNUSU9OX18sUENQ
VV9HRVQoY3B1aWQpKTsKKwkJQ1BVX0NMUihQQ1BVX0dFVChjcHVpZCksICZtYXApOworCQlD
UFVfTkFORCgmbWFwLCAmc3RvcHBlZF9jcHVzKTsKKwkJaWYgKCFDUFVfRU1QVFkoJm1hcCkp
IHsKKwkJCXByaW50ZigiY3B1X3Jlc2V0OiBTdG9wcGluZyBvdGhlciBDUFVzXG4iKTsKKwkJ
CXN1c3BlbmRfY3B1cyhtYXApOworCQl9CisKKwkJaWYgKGJvb3R2ZXJib3NlKQorCQkJcHJp
bnRmKCIlczogY2xlYXIgYWxsIGhhbmRsZXJzXG4iLCBfX2Z1bmNfXyk7CisJCWludHJfY2xl
YXJfYWxsX2hhbmRsZXJzKCk7CisKKwkJaWYgKGJvb3R2ZXJib3NlKQorCQkJcHJpbnRmKCIl
czogbG9hcGljX2NsZWFyX2xhcGljXG4iLCBfX2Z1bmNfXyk7CisJCWxhcGljX2NsZWFyX2xh
cGljKDEpOworCisJCWludHJfc3VzcGVuZCgpOworCisJCWlmIChib290dmVyYm9zZSkKKwkJ
CXByaW50ZigiJXMgZGlzYWJsZV9pbnRlcnJ1cHRzIGNwdWlkICVkXG4iLAorCQkJICAgIF9f
ZnVuY19fLCBQQ1BVX0dFVChjcHVpZCkpOworCQlkaXNhYmxlX2ludHIoKTsKKworCQlwcmlu
dGYoImNhbGxpbmcgcmVsb2NhdGVfa2VybmVsXG4iKTsKKwkJcmV0ID0gcmVsb2NhdGVfa2Vy
bmVsKHZ0b3BoeXMoa19pdGVtcy0+aGVhZF92YSkgKyBLTE9BREJBU0UsCisJCQkJICAgICAg
LyogZGVzdCBhZGRyIGkuZS4gb3ZlcndyaXRlIGV4aXN0aW5nIGtlcm5lbCAqLworCQkJCSAg
ICAgIEtFUk5CQVNFICsgKHZtX3BhZGRyX3Qpa2VybnBoeXMsCisJCQkJICAgICAgdnRvcGh5
cyhjb2RlX3BhZ2UpICsgS0xPQURCQVNFLAorCQkJCSAgICAgIGNvbnRyb2xfcGFnZSk7CisJ
CS8qIGN1cnJlbnRseSB0aGlzIHdpbGwgbmV2ZXIgaGFwcGVuICovCisJCXByaW50ZigiXHRy
ZWxvY2F0ZV9uZXdfa2VybmVsIHJldHVybmVkICVkXG4iLHJldCk7CisJfSBlbHNlIHsKKwkJ
cHJpbnRmKCJrbG9hZF9zaHV0ZG93bl9maW5hbCBjYWxsZWQgd2l0aG91dCAiCisJCSAgICAi
YSBuZXcga2VybmVsIGxvYWRlZFxuIik7CisJfQorfQpkaWZmIC0tZ2l0IGEvc3lzL2tlcm4v
a2Vybl9tb2R1bGUuYyBiL3N5cy9rZXJuL2tlcm5fbW9kdWxlLmMKaW5kZXggYjc2OTMyMC4u
MmE4ODBjNSAxMDA2NDQKLS0tIGEvc3lzL2tlcm4va2Vybl9tb2R1bGUuYworKysgYi9zeXMv
a2Vybi9rZXJuX21vZHVsZS5jCkBAIC02NCw2ICs2NCw3IEBAIHN0YXRpYyBUQUlMUV9IRUFE
KG1vZHVsZWxpc3QsIG1vZHVsZSkgbW9kdWxlczsKIHN0cnVjdCBzeCBtb2R1bGVzX3N4Owog
c3RhdGljIGludCBuZXh0aWQgPSAxOwogc3RhdGljIHZvaWQgbW9kdWxlX3NodXRkb3duKHZv
aWQgKiwgaW50KTsKK3ZvaWQga2xvYWRfbW9kdWxlX3NodXRkb3duKHZvaWQpOwogCiBzdGF0
aWMgaW50CiBtb2RldmVudF9ub3AobW9kdWxlX3QgbW9kLCBpbnQgd2hhdCwgdm9pZCAqYXJn
KQpAQCAtMTA3LDYgKzEwOCwxMiBAQCBtb2R1bGVfc2h1dGRvd24odm9pZCAqYXJnMSwgaW50
IGFyZzIpCiB9CiAKIHZvaWQKK2tsb2FkX21vZHVsZV9zaHV0ZG93bih2b2lkKSB7CisJbW9k
dWxlX3NodXRkb3duKE5VTEwsIDApOworfQorCisKK3ZvaWQKIG1vZHVsZV9yZWdpc3Rlcl9p
bml0KGNvbnN0IHZvaWQgKmFyZykKIHsKIAljb25zdCBtb2R1bGVkYXRhX3QgKmRhdGEgPSAo
Y29uc3QgbW9kdWxlZGF0YV90ICopYXJnOwpkaWZmIC0tZ2l0IGEvc3lzL2tlcm4vc3lzY2Fs
bHMuYyBiL3N5cy9rZXJuL3N5c2NhbGxzLmMKaW5kZXggOTZmMjQwMC4uNmVkZDdmYSAxMDA2
NDQKLS0tIGEvc3lzL2tlcm4vc3lzY2FsbHMuYworKysgYi9zeXMva2Vybi9zeXNjYWxscy5j
CkBAIC0zLDcgKzMsNyBAQAogICoKICAqIERPIE5PVCBFRElULS0gdGhpcyBmaWxlIGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLgogICogJEZyZWVCU0QkCi0gKiBjcmVhdGVkIGZyb20g
RnJlZUJTRDogaGVhZC9zeXMva2Vybi9zeXNjYWxscy5tYXN0ZXIgMjQyOTU4IDIwMTItMTEt
MTMgMTI6NTI6MzFaIGtpYiAKKyAqIGNyZWF0ZWQgZnJvbSBGcmVlQlNECiAgKi8KIAogY29u
c3QgY2hhciAqc3lzY2FsbG5hbWVzW10gPSB7CkBAIC01NDAsNCArNTQwLDUgQEAgY29uc3Qg
Y2hhciAqc3lzY2FsbG5hbWVzW10gPSB7CiAJInBvc2l4X2ZhbGxvY2F0ZSIsCQkJLyogNTMw
ID0gcG9zaXhfZmFsbG9jYXRlICovCiAJInBvc2l4X2ZhZHZpc2UiLAkJCS8qIDUzMSA9IHBv
c2l4X2ZhZHZpc2UgKi8KIAkid2FpdDYiLAkJCS8qIDUzMiA9IHdhaXQ2ICovCisJImtsb2Fk
IiwJCQkvKiA1MzMgPSBrbG9hZCAqLwogfTsKZGlmZiAtLWdpdCBhL3N5cy9rZXJuL3N5c2Nh
bGxzLm1hc3RlciBiL3N5cy9rZXJuL3N5c2NhbGxzLm1hc3RlcgppbmRleCAxNDhkZWEzLi5l
YjJiNjQ4IDEwMDY0NAotLS0gYS9zeXMva2Vybi9zeXNjYWxscy5tYXN0ZXIKKysrIGIvc3lz
L2tlcm4vc3lzY2FsbHMubWFzdGVyCkBAIC05NTUsNSArOTU1LDcgQEAKIAkJCQkgICAgaW50
ICpzdGF0dXMsIGludCBvcHRpb25zLCBcCiAJCQkJICAgIHN0cnVjdCBfX3dydXNhZ2UgKndy
dXNhZ2UsIFwKIAkJCQkgICAgc2lnaW5mb190ICppbmZvKTsgfQorNTMzCUFVRV9OVUxMCVNU
RCAJeyBpbnQga2xvYWQoY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgYnVmbGVuLCBcCisJCQkJ
ICBpbnQgZmxhZ3MpOyB9CiA7IFBsZWFzZSBjb3B5IGFueSBhZGRpdGlvbnMgYW5kIGNoYW5n
ZXMgdG8gdGhlIGZvbGxvd2luZyBjb21wYXRhYmlsaXR5IHRhYmxlczoKIDsgc3lzL2NvbXBh
dC9mcmVlYnNkMzIvc3lzY2FsbHMubWFzdGVyCmRpZmYgLS1naXQgYS9zeXMva2Vybi9zeXN0
cmFjZV9hcmdzLmMgYi9zeXMva2Vybi9zeXN0cmFjZV9hcmdzLmMKaW5kZXggYzc1NWY5Mi4u
YzQ4MDU3YSAxMDA2NDQKLS0tIGEvc3lzL2tlcm4vc3lzdHJhY2VfYXJncy5jCisrKyBiL3N5
cy9rZXJuL3N5c3RyYWNlX2FyZ3MuYwpAQCAtMzI4Niw2ICszMjg2LDE1IEBAIHN5c3RyYWNl
X2FyZ3MoaW50IHN5c251bSwgdm9pZCAqcGFyYW1zLCB1aW50NjRfdCAqdWFyZywgaW50ICpu
X2FyZ3MpCiAJCSpuX2FyZ3MgPSA2OwogCQlicmVhazsKIAl9CisJLyoga2xvYWQgKi8KKwlj
YXNlIDUzMzogeworCQlzdHJ1Y3Qga2xvYWRfYXJncyAqcCA9IHBhcmFtczsKKwkJdWFyZ1sw
XSA9IChpbnRwdHJfdCkgcC0+YnVmOyAvKiBjb25zdCB2b2lkICogKi8KKwkJdWFyZ1sxXSA9
IHAtPmJ1ZmxlbjsgLyogc2l6ZV90ICovCisJCWlhcmdbMl0gPSBwLT5mbGFnczsgLyogaW50
ICovCisJCSpuX2FyZ3MgPSAzOworCQlicmVhazsKKwl9CiAJZGVmYXVsdDoKIAkJKm5fYXJn
cyA9IDA7CiAJCWJyZWFrOwpAQCAtODc0NSw2ICs4NzU0LDIyIEBAIHN5c3RyYWNlX2VudHJ5
X3NldGFyZ2Rlc2MoaW50IHN5c251bSwgaW50IG5keCwgY2hhciAqZGVzYywgc2l6ZV90IGRl
c2NzeikKIAkJCWJyZWFrOwogCQl9OwogCQlicmVhazsKKwkvKiBrbG9hZCAqLworCWNhc2Ug
NTMzOgorCQlzd2l0Y2gobmR4KSB7CisJCWNhc2UgMDoKKwkJCXAgPSAiY29uc3Qgdm9pZCAq
IjsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlwID0gInNpemVfdCI7CisJCQlicmVhazsK
KwkJY2FzZSAyOgorCQkJcCA9ICJpbnQiOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQli
cmVhazsKKwkJfTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfTsKQEAgLTEw
NjM4LDYgKzEwNjYzLDExIEBAIHN5c3RyYWNlX3JldHVybl9zZXRhcmdkZXNjKGludCBzeXNu
dW0sIGludCBuZHgsIGNoYXIgKmRlc2MsIHNpemVfdCBkZXNjc3opCiAJCWlmIChuZHggPT0g
MCB8fCBuZHggPT0gMSkKIAkJCXAgPSAiaW50IjsKIAkJYnJlYWs7CisJLyoga2xvYWQgKi8K
KwljYXNlIDUzMzoKKwkJaWYgKG5keCA9PSAwIHx8IG5keCA9PSAxKQorCQkJcCA9ICJpbnQi
OworCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9OwpkaWZmIC0tZ2l0IGEvc3lz
L3N5cy9ldmVudGhhbmRsZXIuaCBiL3N5cy9zeXMvZXZlbnRoYW5kbGVyLmgKaW5kZXggNmQz
N2JmNC4uMzFhYTRlNCAxMDA2NDQKLS0tIGEvc3lzL3N5cy9ldmVudGhhbmRsZXIuaAorKysg
Yi9zeXMvc3lzL2V2ZW50aGFuZGxlci5oCkBAIC0xNzMsNiArMTczLDcgQEAgdHlwZWRlZiB2
b2lkICgqc2h1dGRvd25fZm4pKHZvaWQgKiwgaW50KTsKICNkZWZpbmUJU0hVVERPV05fUFJJ
X0ZJUlNUCUVWRU5USEFORExFUl9QUklfRklSU1QKICNkZWZpbmUJU0hVVERPV05fUFJJX0RF
RkFVTFQJRVZFTlRIQU5ETEVSX1BSSV9BTlkKICNkZWZpbmUJU0hVVERPV05fUFJJX0xBU1QJ
RVZFTlRIQU5ETEVSX1BSSV9MQVNUCisjZGVmaW5lCVNIVVRET1dOX1BSSV9LTE9BRAlFVkVO
VEhBTkRMRVJfUFJJX0xBU1QgLSAxMDAKIAogRVZFTlRIQU5ETEVSX0RFQ0xBUkUoc2h1dGRv
d25fcHJlX3N5bmMsIHNodXRkb3duX2ZuKTsJLyogYmVmb3JlIGZzIHN5bmMgKi8KIEVWRU5U
SEFORExFUl9ERUNMQVJFKHNodXRkb3duX3Bvc3Rfc3luYywgc2h1dGRvd25fZm4pOwkvKiBh
ZnRlciBmcyBzeW5jICovCmRpZmYgLS1naXQgYS9zeXMvc3lzL2tsb2FkLmggYi9zeXMvc3lz
L2tsb2FkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkyMDE3Ngot
LS0gL2Rldi9udWxsCisrKyBiL3N5cy9zeXMva2xvYWQuaApAQCAtMCwwICsxLDg4IEBACisv
KgorICogQ29weXJpZ2h0IChjKSAyMDExIC0gMjAxMgorICoJUnVzc2VsbCBDYXR0ZWxhbiBE
aWdpdGFsIEVsdmVzIEluYworICogQ29weXJpZ2h0IChjKSAKKyAqCUlzaWxvbiBTeXN0ZW1z
LCBMTEMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFV
VEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisj
aWZuZGVmIF9fS0xPQURfSF9fCisjZGVmaW5lIF9fS0xPQURfSF9fCisKKyNpbmNsdWRlIDxz
eXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2luY2x1ZGUgPHZtL3Zt
Lmg+CisjaW5jbHVkZSA8dm0vdm1fcGFnZS5oPgorCisjZGVmaW5lIEtMT0FEX0xPQUQJCSAw
CisjZGVmaW5lIEtMT0FEX1JFQk9PVAkJKDEgPDwgMCApCisjZGVmaW5lIEtMT0FEX0VYRUMJ
CSgxIDw8IDEgKQorCitzdHJ1Y3Qga2xvYWRfc2VnbWVudCB7CisJdm9pZAkJICAgICAgICpr
X2J1ZjsKKwlzaXplX3QJCQlrX21lbXN6OworCXVuc2lnbmVkIGxvbmcJICAgICAgICprX3Bh
Z2VzOworCXVuc2lnbmVkIGxvbmcJCWtfc2VnX3N0YXJ0OworfTsKKworc3RydWN0IGtsb2Fk
IHsKKwlzdHJ1Y3Qga2xvYWRfc2VnbWVudAlraGRyWzEwXTsKKwlpbnQJCQludW1faGRyczsK
Kwl1bnNpZ25lZCBsb25nCQlrX2VudHJ5X3B0OworCXVuc2lnbmVkIGludAkJa19tb2R1bGVw
OworCXVuc2lnbmVkIGludAkJa19waHlzZnJlZTsKK307CisKKy8vdHlwZWRlZiB1X2xvbmcg
a2xvYWRfaXRlbV90OworI2RlZmluZSBLTE9BRF9ERVNUSU5BVElPTiAgMHgxCisjZGVmaW5l
IEtMT0FEX0lORElSRUNUICAgICAweDIKKyNkZWZpbmUgS0xPQURfRE9ORSAgICAgICAgIDB4
NAorI2RlZmluZSBLTE9BRF9TT1VSQ0UgICAgICAgMHg4CisKK3N0cnVjdCBrbG9hZF9pdGVt
cyB7CisJdW5zaWduZWQgbG9uZyBoZWFkOworCXZtX29mZnNldF90IGhlYWRfdmE7CisJdW5z
aWduZWQgbG9uZyAqbGFzdF9pdGVtOworCXVuc2lnbmVkIGxvbmcgKml0ZW07CisJaW50IGlf
Y291bnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsgIC8qIG5vdCB1c2VkIHlldCAqLworfTsK
KworLyoKKyAqIGRlZmluZWQgaW4gPGFyY2g+L2tsb2FkLmMKKyAqLworcHRfZW50cnlfdCAq
IGtsb2FkX2J1aWxkX3BhZ2VfdGFibGUodm9pZCk7Cit2b2lkIHNldHVwX2ZyZWVic2RfZ2R0
KHVpbnQ2NF90ICopOwordm9pZCBrbG9hZF9tb2R1bGVfc2h1dGRvd24odm9pZCk7CisKKy8q
CisgKiBkZWZpbmVkIGluIDxhcmNoPi9rbG9hZF9leGVjLlMKKyAqLwordW5zaWduZWQgbG9u
ZyByZWxvY2F0ZV9rZXJuZWwodW5zaWduZWQgbG9uZyBpbmRpcmVjdGlvbl9wYWdlLAorICAg
IHVuc2lnbmVkIGxvbmcgcGFnZV9saXN0LCB1bnNpZ25lZCBsb25nIGNvZGVfcGFnZSwKKyAg
ICB1bnNpZ25lZCBsb25nIGNvbnRyb2xfcGFnZSk7CitleHRlcm4gaW50IHJlbG9jYXRlX2tl
cm5lbF9zaXplOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3N5cy9zeXMvcmVib290LmggYi9z
eXMvc3lzL3JlYm9vdC5oCmluZGV4IDZiOGUyNWUuLjliNzAxNjAgMTAwNjQ0Ci0tLSBhL3N5
cy9zeXMvcmVib290LmgKKysrIGIvc3lzL3N5cy9yZWJvb3QuaApAQCAtNTksNiArNTksNyBA
QAogI2RlZmluZQlSQl9SRVNFUlZFRDEJMHg0MDAwMAkvKiByZXNlcnZlZCBmb3IgaW50ZXJu
YWwgdXNlIG9mIGJvb3QgYmxvY2tzICovCiAjZGVmaW5lCVJCX1JFU0VSVkVEMgkweDgwMDAw
CS8qIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2Ugb2YgYm9vdCBibG9ja3MgKi8KICNkZWZp
bmUJUkJfUEFVU0UJMHgxMDAwMDAgLyogcGF1c2UgYWZ0ZXIgZWFjaCBvdXRwdXQgbGluZSBk
dXJpbmcgcHJvYmUgKi8KKyNkZWZpbmUJUkJfS0xPQUQJMHgyMDAwMDAgLyogcmVib290IHVz
aW5nIGtsb2FkJ2VkIGtlcm5lbCBpbWFnZSAqLwogI2RlZmluZQlSQl9NVUxUSVBMRQkweDIw
MDAwMDAwCS8qIHVzZSBtdWx0aXBsZSBjb25zb2xlcyAqLwogCiAjZGVmaW5lCVJCX0JPT1RJ
TkZPCTB4ODAwMDAwMDAJLyogaGF2ZSBgc3RydWN0IGJvb3RpbmZvIConIGFyZyAqLwpkaWZm
IC0tZ2l0IGEvc3lzL3N5cy9zeXNjYWxsLmggYi9zeXMvc3lzL3N5c2NhbGwuaAppbmRleCA2
YjBjZDY3Li5mOTBjYWQyIDEwMDY0NAotLS0gYS9zeXMvc3lzL3N5c2NhbGwuaAorKysgYi9z
eXMvc3lzL3N5c2NhbGwuaApAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBETyBOT1QgRURJVC0t
IHRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC4KICAqICRGcmVlQlNEJAot
ICogY3JlYXRlZCBmcm9tIEZyZWVCU0Q6IGhlYWQvc3lzL2tlcm4vc3lzY2FsbHMubWFzdGVy
IDI0Mjk1OCAyMDEyLTExLTEzIDEyOjUyOjMxWiBraWIgCisgKiBjcmVhdGVkIGZyb20gRnJl
ZUJTRAogICovCiAKICNkZWZpbmUJU1lTX3N5c2NhbGwJMApAQCAtNDUyLDQgKzQ1Miw1IEBA
CiAjZGVmaW5lCVNZU19wb3NpeF9mYWxsb2NhdGUJNTMwCiAjZGVmaW5lCVNZU19wb3NpeF9m
YWR2aXNlCTUzMQogI2RlZmluZQlTWVNfd2FpdDYJNTMyCi0jZGVmaW5lCVNZU19NQVhTWVND
QUxMCTUzMworI2RlZmluZQlTWVNfa2xvYWQJNTMzCisjZGVmaW5lCVNZU19NQVhTWVNDQUxM
CTUzNApkaWZmIC0tZ2l0IGEvc3lzL3N5cy9zeXNjYWxsLm1rIGIvc3lzL3N5cy9zeXNjYWxs
Lm1rCmluZGV4IDI1ZjA0NzAuLjM5ZmQwNWIgMTAwNjQ0Ci0tLSBhL3N5cy9zeXMvc3lzY2Fs
bC5taworKysgYi9zeXMvc3lzL3N5c2NhbGwubWsKQEAgLTEsNyArMSw3IEBACiAjIEZyZWVC
U0Qgc3lzdGVtIGNhbGwgbmFtZXMuCiAjIERPIE5PVCBFRElULS0gdGhpcyBmaWxlIGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLgogIyAkRnJlZUJTRCQKLSMgY3JlYXRlZCBmcm9tIEZy
ZWVCU0Q6IGhlYWQvc3lzL2tlcm4vc3lzY2FsbHMubWFzdGVyIDI0Mjk1OCAyMDEyLTExLTEz
IDEyOjUyOjMxWiBraWIgCisjIGNyZWF0ZWQgZnJvbSBGcmVlQlNECiBNSUFTTSA9ICBcCiAJ
c3lzY2FsbC5vIFwKIAlleGl0Lm8gXApAQCAtNDAwLDQgKzQwMCw1IEBAIE1JQVNNID0gIFwK
IAlyY3RsX3JlbW92ZV9ydWxlLm8gXAogCXBvc2l4X2ZhbGxvY2F0ZS5vIFwKIAlwb3NpeF9m
YWR2aXNlLm8gXAotCXdhaXQ2Lm8KKwl3YWl0Ni5vIFwKKwlrbG9hZC5vCmRpZmYgLS1naXQg
YS9zeXMvc3lzL3N5c3Byb3RvLmggYi9zeXMvc3lzL3N5c3Byb3RvLmgKaW5kZXggZWY1OWFk
NS4uODFkYWMxNSAxMDA2NDQKLS0tIGEvc3lzL3N5cy9zeXNwcm90by5oCisrKyBiL3N5cy9z
eXMvc3lzcHJvdG8uaApAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBETyBOT1QgRURJVC0tIHRo
aXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC4KICAqICRGcmVlQlNEJAotICog
Y3JlYXRlZCBmcm9tIEZyZWVCU0Q6IGhlYWQvc3lzL2tlcm4vc3lzY2FsbHMubWFzdGVyIDI0
Mjk1OCAyMDEyLTExLTEzIDEyOjUyOjMxWiBraWIgCisgKiBjcmVhdGVkIGZyb20gRnJlZUJT
RAogICovCiAKICNpZm5kZWYgX1NZU19TWVNQUk9UT19IXwpAQCAtMTc2Miw2ICsxNzYyLDEx
IEBAIHN0cnVjdCB3YWl0Nl9hcmdzIHsKIAljaGFyIHdydXNhZ2VfbF9bUEFETF8oc3RydWN0
IF9fd3J1c2FnZSAqKV07IHN0cnVjdCBfX3dydXNhZ2UgKiB3cnVzYWdlOyBjaGFyIHdydXNh
Z2Vfcl9bUEFEUl8oc3RydWN0IF9fd3J1c2FnZSAqKV07CiAJY2hhciBpbmZvX2xfW1BBRExf
KHNpZ2luZm9fdCAqKV07IHNpZ2luZm9fdCAqIGluZm87IGNoYXIgaW5mb19yX1tQQURSXyhz
aWdpbmZvX3QgKildOwogfTsKK3N0cnVjdCBrbG9hZF9hcmdzIHsKKwljaGFyIGJ1Zl9sX1tQ
QURMXyhjb25zdCB2b2lkICopXTsgY29uc3Qgdm9pZCAqIGJ1ZjsgY2hhciBidWZfcl9bUEFE
Ul8oY29uc3Qgdm9pZCAqKV07CisJY2hhciBidWZsZW5fbF9bUEFETF8oc2l6ZV90KV07IHNp
emVfdCBidWZsZW47IGNoYXIgYnVmbGVuX3JfW1BBRFJfKHNpemVfdCldOworCWNoYXIgZmxh
Z3NfbF9bUEFETF8oaW50KV07IGludCBmbGFnczsgY2hhciBmbGFnc19yX1tQQURSXyhpbnQp
XTsKK307CiBpbnQJbm9zeXMoc3RydWN0IHRocmVhZCAqLCBzdHJ1Y3Qgbm9zeXNfYXJncyAq
KTsKIHZvaWQJc3lzX3N5c19leGl0KHN0cnVjdCB0aHJlYWQgKiwgc3RydWN0IHN5c19leGl0
X2FyZ3MgKik7CiBpbnQJc3lzX2Zvcmsoc3RydWN0IHRocmVhZCAqLCBzdHJ1Y3QgZm9ya19h
cmdzICopOwpAQCAtMjE0NCw2ICsyMTQ5LDcgQEAgaW50CXN5c19yY3RsX3JlbW92ZV9ydWxl
KHN0cnVjdCB0aHJlYWQgKiwgc3RydWN0IHJjdGxfcmVtb3ZlX3J1bGVfYXJncyAqKTsKIGlu
dAlzeXNfcG9zaXhfZmFsbG9jYXRlKHN0cnVjdCB0aHJlYWQgKiwgc3RydWN0IHBvc2l4X2Zh
bGxvY2F0ZV9hcmdzICopOwogaW50CXN5c19wb3NpeF9mYWR2aXNlKHN0cnVjdCB0aHJlYWQg
Kiwgc3RydWN0IHBvc2l4X2ZhZHZpc2VfYXJncyAqKTsKIGludAlzeXNfd2FpdDYoc3RydWN0
IHRocmVhZCAqLCBzdHJ1Y3Qgd2FpdDZfYXJncyAqKTsKK2ludAlzeXNfa2xvYWQoc3RydWN0
IHRocmVhZCAqLCBzdHJ1Y3Qga2xvYWRfYXJncyAqKTsKIAogI2lmZGVmIENPTVBBVF80Mwog
CkBAIC0yODQwLDYgKzI4NDYsNyBAQCBpbnQJZnJlZWJzZDdfc2htY3RsKHN0cnVjdCB0aHJl
YWQgKiwgc3RydWN0IGZyZWVic2Q3X3NobWN0bF9hcmdzICopOwogI2RlZmluZQlTWVNfQVVF
X3Bvc2l4X2ZhbGxvY2F0ZQlBVUVfTlVMTAogI2RlZmluZQlTWVNfQVVFX3Bvc2l4X2ZhZHZp
c2UJQVVFX05VTEwKICNkZWZpbmUJU1lTX0FVRV93YWl0NglBVUVfV0FJVDYKKyNkZWZpbmUJ
U1lTX0FVRV9rbG9hZAlBVUVfTlVMTAogCiAjdW5kZWYgUEFEXwogI3VuZGVmIFBBRExfCmRp
ZmYgLS1naXQgYS9zeXMveDg2L3g4Ni9pbnRyX21hY2hkZXAuYyBiL3N5cy94ODYveDg2L2lu
dHJfbWFjaGRlcC5jCmluZGV4IDMxY2M4MGIuLmVlZTc2NzggMTAwNjQ0Ci0tLSBhL3N5cy94
ODYveDg2L2ludHJfbWFjaGRlcC5jCisrKyBiL3N5cy94ODYveDg2L2ludHJfbWFjaGRlcC5j
CkBAIC0xOTcsNiArMTk3LDM3IEBAIGludHJfYWRkX2hhbmRsZXIoY29uc3QgY2hhciAqbmFt
ZSwgaW50IHZlY3RvciwgZHJpdmVyX2ZpbHRlcl90IGZpbHRlciwKIH0KIAogaW50CitpbnRy
X2NsZWFyX2FsbF9oYW5kbGVycyh2b2lkKQoreworCWludCBpOworCXN0cnVjdCBpbnRzcmMg
KmlzcmM7CisKKwltdHhfbG9jaygmaW50cl90YWJsZV9sb2NrKTsKKwlmb3IgKGkgPSAwOyBp
IDwgTlVNX0lPX0lOVFM7IGkrKykgeworCQlpc3JjID0gaW50ZXJydXB0X3NvdXJjZXNbaV07
CisJCWlmIChpc3JjICE9IE5VTEwgJiYgaXNyYy0+aXNfaGFuZGxlcnMgPiAwKSB7CisJCQlw
cmludGYoIiVzOiVkIGlzcmNbJWRdICVwIGlzX2hhbmRsZXJzICVkXG4iLAorCQkJICAgICAg
IF9fRlVOQ1RJT05fXyxfX0xJTkVfXyxpLGlzcmMsCisJCQkgICAgICAgaXNyYy0+aXNfaGFu
ZGxlcnMpOworCQkJICAgICAgIGlzcmMtPmlzX2hhbmRsZXJzLS07CisJCQlpZiAoaXNyYy0+
aXNfaGFuZGxlcnMgPT0gMCkgeworCQkJCXByaW50ZigiXHQgZGlzX3NvdXJjZSAlcCBkaXNf
aW50ciAlcFxuIiwKKwkJCQkgICAgICAgaXNyYy0+aXNfcGljLT5waWNfZGlzYWJsZV9zb3Vy
Y2UsCisJCQkJICAgICAgIGlzcmMtPmlzX3BpYy0+cGljX2Rpc2FibGVfaW50cik7CisJCQkJ
aXNyYy0+aXNfcGljLT5waWNfZGlzYWJsZV9zb3VyY2UoaXNyYywgUElDX05PX0VPSSk7CisJ
CQkJaXNyYy0+aXNfcGljLT5waWNfZGlzYWJsZV9pbnRyKGlzcmMpOworCQkJfQorCQkJaW50
cmNudF91cGRhdGVuYW1lKGlzcmMpOworCisJCX0KKwl9CisJbXR4X3VubG9jaygmaW50cl90
YWJsZV9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworCisKK2ludAogaW50cl9yZW1vdmVfaGFu
ZGxlcih2b2lkICpjb29raWUpCiB7CiAJc3RydWN0IGludHNyYyAqaXNyYzsKZGlmZiAtLWdp
dCBhL3N5cy94ODYveDg2L2xvY2FsX2FwaWMuYyBiL3N5cy94ODYveDg2L2xvY2FsX2FwaWMu
YwppbmRleCBlOTk0MTcyLi42NTkzZThiIDEwMDY0NAotLS0gYS9zeXMveDg2L3g4Ni9sb2Nh
bF9hcGljLmMKKysrIGIvc3lzL3g4Ni94ODYvbG9jYWxfYXBpYy5jCkBAIC0zNDYsNiArMzQ2
LDYwIEBAIGxhcGljX2R1bXAoY29uc3QgY2hhciogc3RyKQogfQogCiB2b2lkCitsYXBpY19j
bGVhcl9sYXBpYyh1X2ludCBkaXNhYmxlKSB7CisKKwlzdHJ1Y3QgbGFwaWMgKmxhOworCWxh
ID0gJmxhcGljc1tsYXBpY19pZCgpXTsKKworCXVpbnQzMl90IHZhbHVlOworCisJaWYgKGJv
b3R2ZXJib3NlKQorCQlwcmludGYoIiVzIGxhcGljX2lkKCVkKSBjcHUoJWQpIGxhICVwIGxh
cGljICVwXG4iLF9fRlVOQ1RJT05fXywKKwkJICAgICAgIGxhcGljX2lkKCksIFBDUFVfR0VU
KGNwdWlkKSwgbGEsIGxhcGljKTsKKworCS8qCisJICogRmlzdCB3ZSBzZXQgdGhlIG1hc2sg
Yml0IHRvIGtlZXAgYW5kIG5ldyBpbnRlcnJ1cHRzIGZyb20KKwkgKiBhcnJpdmluZyBidXQg
YWxsb3dpbmcgYW55IHBlbmRpbmcgaW50ZXJydXB0cyB0byBmaW5pc2gKKwkgKiAqVEhFTiog
c2V0IHRoZSByZWdpc3RlcnMgdG8gZGVmYXVsdCB2YWx1ZXMKKwkgKiBJZiB0aGUgaW50ZXJy
dXB0cyBhcmUgbm90IGFsbG93ZWQgdG8gY2xlYXIgYSBrbG9hZCdlZCAvIGJvb3RlZAorCSAq
IGtlcm5lbCB3aWxsIHNlZSB0aGUgb2xkIGludGVycnVwdHMgYmVmb3JlIHRoZSBhcHByb3By
aWF0ZSBoYW5kbGVycworCSAqIGFyZSBpbiBwbGFjZSBhbmQgdHJpZ2dlciBhIHBhbmljLgor
CSAqLworI2lmZGVmIG5vdHlldAorCS8qIHRoaXMgc2VlbXMgdG8gYmUgY2F1c2luZyBBUElD
IGVycm9yIGluIHRoZSBuZXcga2VybmVsICovCisJdmFsdWUgPSBsYXBpYy0+bHZ0X2Vycm9y
OworCXZhbHVlIHw9IEFQSUNfTFZUX007CisJbGFwaWMtPmx2dF9lcnJvciA9IHZhbHVlOwor
I2VuZGlmCisKKwl2YWx1ZSA9IGxhcGljLT5sdnRfdGltZXI7CisJdmFsdWUgfD0gQVBJQ19M
VlRfTTsKKwlsYXBpYy0+bHZ0X3RpbWVyID0gdmFsdWU7CisKKwl2YWx1ZSA9IGxhcGljLT5s
dnRfbGludDA7CisJdmFsdWUgfD0gQVBJQ19MVlRfTTsKKwlsYXBpYy0+bHZ0X2xpbnQwID0g
dmFsdWU7CisKKwl2YWx1ZSA9IGxhcGljLT5sdnRfbGludDE7CisJdmFsdWUgfD0gQVBJQ19M
VlRfTTsKKwlsYXBpYy0+bHZ0X2xpbnQxID0gdmFsdWU7CisKKwl2YWx1ZSA9IGxhcGljLT5s
dnRfcGNpbnQ7CisJdmFsdWUgfD0gQVBJQ19MVlRfTTsKKwlsYXBpYy0+bHZ0X3BjaW50ID0g
dmFsdWU7CisKKwkvKiBQcm9ncmFtIHRpbWVyIExWVCBhbmQgc2V0dXAgaGFuZGxlci4gKi8K
KwlsYXBpYy0+bHZ0X3RpbWVyID0gQVBJQ19MVlRUX007IC8qIG1hc2tlZCAqLworCWxhcGlj
LT5sdnRfbGludDAgPSBBUElDX0xWVF9NOyAvKiBtYXNrZWQgKi8KKwlsYXBpYy0+bHZ0X2xp
bnQxID0gQVBJQ19MVlRfTTsgLyogbWFza2VkICovCisKKwlpZiAoZGlzYWJsZSkgeworCQlw
cmludGYoIlx0bGFwaWMgZGlzYWJsZVxuIik7CisJCWxhcGljX2Rpc2FibGUoKTsKKwl9Cit9
CisKK3ZvaWQKIGxhcGljX3NldHVwKGludCBib290KQogewogCXN0cnVjdCBsYXBpYyAqbGE7
CkBAIC05MjQsNyArOTc4LDIwIEBAIGxhcGljX2hhbmRsZV9lcnJvcih2b2lkKQogCWxhcGlj
LT5lc3IgPSAwOwogCWVzciA9IGxhcGljLT5lc3I7CiAKLQlwcmludGYoIkNQVSVkOiBsb2Nh
bCBBUElDIGVycm9yIDB4JXhcbiIsIFBDUFVfR0VUKGNwdWlkKSwgZXNyKTsKKwlwcmludGYo
IkNQVSVkOiBsb2NhbCBBUElDIGVycm9yIDB4JXhcdCIsIFBDUFVfR0VUKGNwdWlkKSwgZXNy
KTsKKwlpZiAobGFwaWMtPmVzciAmIEFQSUNfRVNSX1NFTkRfQ1NfRVJST1IpCisJCXByaW50
Zigic2VuZF9jc19lcnJvclxuIik7CisJaWYgKGxhcGljLT5lc3IgJiBBUElDX0VTUl9SRUNF
SVZFX0NTX0VSUk9SKQorCQlwcmludGYoInJlY2VpdmVfY3NfZXJyb3JcbiIpOworCWlmIChs
YXBpYy0+ZXNyICYgQVBJQ19FU1JfU0VORF9BQ0NFUFQpCisJCXByaW50Zigic2VuZF9hY2Nl
cHRcbiIpOworCWlmIChsYXBpYy0+ZXNyICYgQVBJQ19FU1JfUkVDRUlWRV9BQ0NFUFQpCisJ
CXByaW50ZigicmVjZWl2ZV9hY2NlcHRcbiIpOworCWlmIChsYXBpYy0+ZXNyICYgQVBJQ19F
U1JfU0VORF9JTExFR0FMX1ZFQ1RPUikKKwkJcHJpbnRmKCJzZW5kX2lsbGVnYWxfdmVjdG9y
XG4iKTsKKwlpZiAobGFwaWMtPmVzciAmIEFQSUNfRVNSX0lMTEVHQUxfUkVHSVNURVIpCisJ
CXByaW50ZigiaWxsZWdhbF9yZWdpc3RlclxuIik7CisKIAlsYXBpY19lb2koKTsKIH0KIApk
aWZmIC0tZ2l0IGEvc3lzL3g4Ni94ODYvbmV4dXMuYyBiL3N5cy94ODYveDg2L25leHVzLmMK
aW5kZXggOWVhZDhjOC4uMGIyODQ2NSAxMDA2NDQKLS0tIGEvc3lzL3g4Ni94ODYvbmV4dXMu
YworKysgYi9zeXMveDg2L3g4Ni9uZXh1cy5jCkBAIC01OSw2ICs1OSw3IEBAIF9fRkJTRElE
KCIkRnJlZUJTRCQiKTsKICNpbmNsdWRlIDxtYWNoaW5lL2ludHJfbWFjaGRlcC5oPgogI2lu
Y2x1ZGUgPHN5cy9ybWFuLmg+CiAjaW5jbHVkZSA8c3lzL2ludGVycnVwdC5oPgorI2luY2x1
ZGUgPHN5cy9zeXNjdGwuaD4KIAogI2luY2x1ZGUgPG1hY2hpbmUvdm1wYXJhbS5oPgogI2lu
Y2x1ZGUgPHZtL3ZtLmg+CkBAIC02NzUsNiArNjc2LDUyIEBAIHJhbV9wcm9iZShkZXZpY2Vf
dCBkZXYpCiB9CiAKIHN0YXRpYyBpbnQKK3NtYXBfaGRscihTWVNDVExfSEFORExFUl9BUkdT
KSB7CisKKyAgLyogU1lTQ1RMX0hBTkRMRVJfQVJHUworICAgICBzdHJ1Y3Qgc3lzY3RsX29p
ZCAqb2lkcCwgdm9pZCAqYXJnMSwKKyAgICAgaW50cHRyX3QgYXJnMiwgc3RydWN0IHN5c2N0
bF9yZXEgKnJlcQorICAqLworCisJc3RydWN0IGJpb3Nfc21hcCAqc21hcGJhc2U7CisJY2Fk
ZHJfdCBrbWRwOworCXVpbnQzMl90IHNtYXBzaXplID0gMDsKKworCS8qIFJldHJpZXZlIHRo
ZSBzeXN0ZW0gbWVtb3J5IG1hcCBmcm9tIHRoZSBsb2FkZXIuICovCisJa21kcCA9IHByZWxv
YWRfc2VhcmNoX2J5X3R5cGUoImVsZiBrZXJuZWwiKTsKKwlpZiAoa21kcCA9PSBOVUxMKQor
CQlrbWRwID0gcHJlbG9hZF9zZWFyY2hfYnlfdHlwZShFTEZfS0VSTl9TVFIpOworCWlmIChr
bWRwICE9IE5VTEwpIHsKKwkJc21hcGJhc2UgPSAoc3RydWN0IGJpb3Nfc21hcCAqKXByZWxv
YWRfc2VhcmNoX2luZm8oa21kcCwKKwkJCQkJCQkJICAgTU9ESU5GT19NRVRBREFUQSB8IE1P
RElORk9NRF9TTUFQKTsKKwl9IGVsc2UgeworCQlzbWFwYmFzZSA9IE5VTEw7CisJCWdvdG8g
b3V0OworCX0KKworCisJcHJpbnRmKCIlcyBzbWFwYmFzZSAlcFxuIixfX0ZVTkNUSU9OX18s
c21hcGJhc2UpOworCXNtYXBzaXplID0gKigodV9pbnQzMl90ICopc21hcGJhc2UgLSAxKTsK
KworI2lmIDAKKwl7CisJCXN0cnVjdCBiaW9zX3NtYXAgKnNtYXAsICpzbWFwZW5kOworCQlz
bWFwZW5kID0gKHN0cnVjdCBiaW9zX3NtYXAgKikoKHVpbnRwdHJfdClzbWFwYmFzZSArIHNt
YXBzaXplKTsKKwkJZm9yIChzbWFwID0gc21hcGJhc2U7IHNtYXAgPCBzbWFwZW5kOyBzbWFw
KyspIHsKKwkJCXByaW50ZigiXHR0eXBlICVkIGJhc2UgMHglbHggbGVuZ3RoIDB4JWx4XG4i
LAorCQkJICAgICAgIHNtYXAtPnR5cGUsc21hcC0+YmFzZSwgc21hcC0+bGVuZ3RoKTsKKwkJ
fQorCX0KKyNlbmRpZgorCitvdXQ6CisJcmV0dXJuIChzeXNjdGxfaGFuZGxlX29wYXF1ZShv
aWRwLCBzbWFwYmFzZSwgc21hcHNpemUsIHJlcSkpOworfQorU1lTQ1RMX1BST0MoX2h3LCBP
SURfQVVUTywgc21hcCwgQ1RMVFlQRV9PUEFRVUV8Q1RMRkxBR19SRHxDVExGTEFHX01QU0FG
RSwKKwkgICAgMCwgc2l6ZW9mKHN0cnVjdCBiaW9zX3NtYXApLCBzbWFwX2hkbHIsICJTLHNt
YXAiLAorCSAgICAiQmlvcyBTeXN0ZW0gTWFwIik7CisKK3N0YXRpYyBpbnQKIHJhbV9hdHRh
Y2goZGV2aWNlX3QgZGV2KQogewogCXN0cnVjdCBiaW9zX3NtYXAgKnNtYXBiYXNlLCAqc21h
cCwgKnNtYXBlbmQ7CmRpZmYgLS1naXQgYS91c3Iuc2Jpbi9rbG9hZC9NYWtlZmlsZSBiL3Vz
ci5zYmluL2tsb2FkL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjBkNGEyN2EKLS0tIC9kZXYvbnVsbAorKysgYi91c3Iuc2Jpbi9rbG9hZC9NYWtlZmls
ZQpAQCAtMCwwICsxLDE1IEBACisjICRGcmVlQlNEJAorCitQUk9HPQlrbG9hZAorU1JDUz0J
a2xvYWQuYworTk9fTUFOPQorCisjRFBBREQrPQkke0xJQlZNTUFQSX0KKyNMREFERCs9CS1s
dm1tYXBpCisKK1dBUk5TPz0JMworCitDRkxBR1MrPS1JJHsuQ1VSRElSfS8uLi8uLi9zeXMv
Ym9vdC91c2VyYm9vdAorQ0ZMQUdTKz0tSSR7LkNVUkRJUn0vLi4vLi4vc3lzCisKKy5pbmNs
dWRlIDxic2QucHJvZy5taz4KZGlmZiAtLWdpdCBhL3Vzci5zYmluL2tsb2FkL2tsb2FkLmMg
Yi91c3Iuc2Jpbi9rbG9hZC9rbG9hZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjUxYWMzYjcKLS0tIC9kZXYvbnVsbAorKysgYi91c3Iuc2Jpbi9rbG9hZC9rbG9h
ZC5jCkBAIC0wLDAgKzEsNzQ4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDExIC0gMjAx
MgorICoJUnVzc2VsbCBDYXR0ZWxhbiBEaWdpdGFsIEVsdmVzIEluYworICogQ29weXJpZ2h0
IChjKSAyMDExIC0gMjAxMgorICoJSXNpbG9uIFN5c3RlbXMsIExMQy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVU
SE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
CisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICovCisKKy8qCisgKiBwcm9jZXNzIGtpbGwg
Y29kZSBib3Jyb3dlZCBmcm9tIGhhbHQuYworICovCisKKyNpbmNsdWRlIDxzeXMvcGFyYW0u
aD4KKyNpbmNsdWRlIDxzeXMva2xvYWQuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNp
bmNsdWRlIDxzeXMvbW9kdWxlLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRl
IDxzeXMvc3lzY2FsbC5oPgorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKyNpbmNsdWRlIDxz
eXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKworI2luY2x1ZGUgPGRpcmVu
dC5oPgorI2luY2x1ZGUgPGRsZmNuLmg+CisjaW5jbHVkZSA8ZXJyLmg+CisjaW5jbHVkZSA8
ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGdldG9wdC5oPgorI2lu
Y2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN0ZGlv
Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVk
ZSA8dGVybWlvcy5oPgorI2luY2x1ZGUgPHVzZXJib290Lmg+CisjaW5jbHVkZSA8dW5pc3Rk
Lmg+CisKK2NoYXIgKmhvc3RfYmFzZSA9ICIvIjsKKy8qIGhvdyBjYW4gd2UgZ2V0IHJpZCBv
ZiB0aGVzZT8gSSBkb24ndCB0aGluayB3ZSBuZWVkIHRoZW0gKi8KKworc3RydWN0IHRlcm1p
b3MgdGVybSwgb2xkdGVybTsKK2NoYXIgKmltYWdlOworc2l6ZV90IGltYWdlX3NpemU7Citz
aXplX3QgaW1hZ2VfbWF4X3VzZWQgPSAwOworaW50IGRpc2tfZmQgPSAtMTsKK3VpbnQ2NF90
IHJlZ3NbMTZdOwordWludDY0X3QgcGM7CitzdGF0aWMgaW50IGtfZXhlY3V0ZSA9IDA7Citz
dGF0aWMgaW50IGtfcmVib290ID0gMDsKK3N0YXRpYyB2b2lkICpkbF9saWI7Cit0eXBlZGVm
IHZvaWQgKigqTV9mdW5jKShzaXplX3QgYnl0ZXMsIGNvbnN0IGNoYXIgKmZpbGUsIGludCBs
aW5lKTsKK01fZnVuYyBNYWxsb2NfZnVuYzsKK3N0YXRpYyB2b2lkIGtfZXhpdCh2b2lkICos
IGludCk7CitzdGF0aWMgaW50IHNodXRkb3duX3Byb2Nlc3Nlcyh2b2lkKTsKK3N0YXRpYyB1
X2ludCBnZXRfcGFnZWlucyh2b2lkKTsKK3N0YXRpYyBpbnQga2xvYWRfbG9hZF9pbWFnZSh2
b2lkICppbWFnZSx1bnNpZ25lZCBsb25nIGVudHJ5X3B0KTsKKworc3RydWN0IGxvYWRfZmls
ZSB7CisJaW50IGxfaXNkaXI7CisJc2l6ZV90IGxfc2l6ZTsKKwlzdHJ1Y3Qgc3RhdCBsX3N0
YXQ7CisJdW5pb24geworCQlpbnQgZmQ7CisJCURJUiAqZGlyOworCX0gbF91OworfTsKKwor
c3RydWN0IHNtYXAgeworCXVpbnQ2NF90CWJhc2U7CisJdWludDY0X3QJbGVuZ3RoOworCXVp
bnQzMl90CXR5cGU7Cit9IF9fcGFja2VkOworCitzdGF0aWMgaW50CituYW1lMm9pZChjaGFy
ICpuYW1lLCBpbnQgKm9pZHApCit7CisJaW50IG9pZFsyXTsKKwlpbnQgaTsKKwlzaXplX3Qg
ajsKKworCW9pZFswXSA9IDA7CisJb2lkWzFdID0gMzsKKworCWogPSBDVExfTUFYTkFNRSAq
IHNpemVvZihpbnQpOworCWkgPSBzeXNjdGwob2lkLCAyLCBvaWRwLCAmaiwgbmFtZSwgc3Ry
bGVuKG5hbWUpKTsKKwlpZiAoaSA8IDApCisJCXJldHVybiAoaSk7CisJaiAvPSBzaXplb2Yo
aW50KTsKKworCXJldHVybiAoaik7Cit9CisKK3N0YXRpYyB2b2lkCitrX3B1dGModm9pZCAq
YXJnLCBpbnQgY2hyKQoreworCXdyaXRlKDEsICZjaHIsIDEpOworfQorCitzdGF0aWMgaW50
CitrX2dldGModm9pZCAqYXJnKQoreworCWNoYXIgY2hyOworCWlmKHJlYWQoMCwgJmNociwg
MSkgPT0gMSkKKwkJcmV0dXJuIChjaHIpOworCXJldHVybiAoLTEpOworfQorCitzdGF0aWMg
aW50CitrX3BvbGwodm9pZCAqYXJnKQoreworCWludCBuOworCWlmIChpb2N0bCgwLCBGSU9O
UkVBRCwgJm4pID49IDApCisJCXJldHVybiAobiA+IDApOworCXJldHVybiAwOworfQorCitz
dGF0aWMgaW50CitrX29wZW4odm9pZCAqYXJnLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgdm9p
ZCAqKmxmX3JldCkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlzdHJ1Y3QgbG9hZF9maWxlICps
ZjsKKwlpbnQgZXJyb3IgPSAtMTsKKwljaGFyIHBhdGhbUEFUSF9NQVhdOworCisJaWYgKCFo
b3N0X2Jhc2UpIHsKKwkJcHJpbnRmKCJIb3N0IGJhc2Ugbm90IHNldFxuIik7CisJCXJldHVy
biAoRU5PRU5UKTsKKwl9CisKKwlzdHJsY3B5KHBhdGgsIGhvc3RfYmFzZSwgUEFUSF9NQVgp
OworCWlmIChwYXRoW3N0cmxlbihwYXRoKSAtIDFdID09ICcvJykKKwkJcGF0aFtzdHJsZW4o
cGF0aCkgLSAxXSA9IDA7CisJc3RybGNhdChwYXRoLCBmaWxlbmFtZSwgUEFUSF9NQVgpOwor
CWxmID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgbG9hZF9maWxlKSk7CisJaWYgKHN0YXQocGF0
aCwgJmxmLT5sX3N0YXQpIDwgMCkgeworCQllcnJvciA9IGVycm5vOworCQlnb3RvIG91dDsK
Kwl9CisKKwlsZi0+bF9zaXplID0gc3Quc3Rfc2l6ZTsKKwlpZiAoU19JU0RJUihsZi0+bF9z
dGF0LnN0X21vZGUpKSB7CisJCWxmLT5sX2lzZGlyID0gMTsKKwkJbGYtPmxfdS5kaXIgPSBv
cGVuZGlyKHBhdGgpOworCQlpZiAoIWxmLT5sX3UuZGlyKSB7CisJCQllcnJvciA9IEVJTlZB
TDsKKwkJCWdvdG8gb3V0OworCQl9CisJCSpsZl9yZXQgPSBsZjsKKwkJcmV0dXJuICgwKTsK
Kwl9CisJaWYgKFNfSVNSRUcobGYtPmxfc3RhdC5zdF9tb2RlKSkgeworCQlsZi0+bF9pc2Rp
ciA9IDA7CisJCWxmLT5sX3UuZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKKwkJaWYgKGxm
LT5sX3UuZmQgPCAwKSB7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9
CisJCSpsZl9yZXQgPSBsZjsKKwkJcmV0dXJuICgwKTsKKwl9CisKK291dDoKKwlmcmVlKGxm
KTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworc3RhdGljIGludAora19jbG9zZSh2b2lkICph
cmcsIHZvaWQgKmgpCit7CisJc3RydWN0IGxvYWRfZmlsZSAqbGYgPSAoc3RydWN0IGxvYWRf
ZmlsZSAqKWg7CisKKwlpZiAobGYtPmxfaXNkaXIpCisJCWNsb3NlZGlyKGxmLT5sX3UuZGly
KTsKKwllbHNlCisJCWNsb3NlKGxmLT5sX3UuZmQpOworCWZyZWUobGYpOworCisJcmV0dXJu
ICgwKTsKK30KKworc3RhdGljIGludAora19pc2Rpcih2b2lkICphcmcsIHZvaWQgKmgpCit7
CisJcmV0dXJuICgoKHN0cnVjdCBsb2FkX2ZpbGUgKiloKS0+bF9pc2Rpcik7Cit9CisKK3N0
YXRpYyBpbnQKK2tfcmVhZCh2b2lkICphcmcsIHZvaWQgKmgsIHZvaWQgKmRzdCwgc2l6ZV90
IHNpemUsIHNpemVfdCAqcmVzaWRfcmV0dXJuKQoreworCXN0cnVjdCBsb2FkX2ZpbGUgKmxm
ID0gKHN0cnVjdCBsb2FkX2ZpbGUgKiloOworCXNzaXplX3Qgc3o7CisKKwlpZiAobGYtPmxf
aXNkaXIpCisJCXJldHVybiAoRUlOVkFMKTsKKworCWlmKChzeiA9IHJlYWQobGYtPmxfdS5m
ZCwgZHN0LCBzaXplKSkgPCAwKQorCQlyZXR1cm4gKEVJTlZBTCk7CisJKnJlc2lkX3JldHVy
biA9IHNpemUgLSBzejsKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitrX3JlYWRk
aXIodm9pZCAqYXJnLCB2b2lkICpoLCB1aW50MzJfdCAqZmlsZW5vX3JldHVybiwgdWludDhf
dCAqdHlwZV9yZXR1cm4sCisgICAgc2l6ZV90ICpuYW1lbGVuX3JldHVybiwgY2hhciAqbmFt
ZSkKK3sKKwlzdHJ1Y3QgbG9hZF9maWxlICpsZiA9IChzdHJ1Y3QgbG9hZF9maWxlICopaDsK
KwlzdHJ1Y3QgZGlyZW50ICpkcDsKKworCWlmICghbGYtPmxfaXNkaXIpCisJCXJldHVybiAo
RUlOVkFMKTsKKworCWRwID0gcmVhZGRpcihsZi0+bF91LmRpcik7CisJaWYgKCFkcCkKKwkJ
cmV0dXJuIChFTk9FTlQpOworCisJLyoKKwkgKiBOb3RlOiBkX25hbWxlbiBpcyBpbiB0aGUg
cmFuZ2UgMC4uMjU1IGFuZCB0aGVyZWZvcmUgbGVzcworCSAqIHRoYW4gUEFUSF9NQVggc28g
d2UgZG9uJ3QgbmVlZCB0byB0ZXN0IGJlZm9yZSBjb3B5aW5nLgorCSAqLworCSpmaWxlbm9f
cmV0dXJuID0gZHAtPmRfZmlsZW5vOworCSp0eXBlX3JldHVybiA9IGRwLT5kX3R5cGU7CisJ
Km5hbWVsZW5fcmV0dXJuID0gZHAtPmRfbmFtbGVuOworCW1lbWNweShuYW1lLCBkcC0+ZF9u
YW1lLCBkcC0+ZF9uYW1sZW4pOworCW5hbWVbZHAtPmRfbmFtbGVuXSA9IDA7CisKKwlyZXR1
cm4gKDApOworfQorCitzdGF0aWMgaW50CitrX3NlZWsodm9pZCAqYXJnLCB2b2lkICpoLCB1
aW50NjRfdCBvZmZzZXQsIGludCB3aGVuY2UpCit7CisJc3RydWN0IGxvYWRfZmlsZSAqbGYg
PSAoc3RydWN0IGxvYWRfZmlsZSAqKWg7CisKKwlpZiAobGYtPmxfaXNkaXIpCisJCXJldHVy
biAoRUlOVkFMKTsKKworCWlmIChsc2VlayhsZi0+bF91LmZkLCBvZmZzZXQsIHdoZW5jZSkg
PCAwKQorCQlyZXR1cm4gKGVycm5vKTsKKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBp
bnQKK2tfc3RhdCh2b2lkICphcmcsIHZvaWQgKmgsCisgICAgICAgaW50ICptb2RlX3JldHVy
biwgaW50ICp1aWRfcmV0dXJuLAorICAgICAgIGludCAqZ2lkX3JldHVybiwgdWludDY0X3Qg
KnNpemVfcmV0dXJuKQoreworCisJc3RydWN0IGxvYWRfZmlsZSAqbGYgPSAoc3RydWN0IGxv
YWRfZmlsZSAqKWg7CisKKwkqbW9kZV9yZXR1cm4gPSBsZi0+bF9zdGF0LnN0X21vZGU7CisJ
KnVpZF9yZXR1cm4gPSBsZi0+bF9zdGF0LnN0X3VpZDsKKwkqZ2lkX3JldHVybiA9IGxmLT5s
X3N0YXQuc3RfZ2lkOworCSpzaXplX3JldHVybiA9IGxmLT5sX3N0YXQuc3Rfc2l6ZTsKKwly
ZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitrX2Rpc2tyZWFkKHZvaWQgKmFyZywgaW50
IHVuaXQsIHVpbnQ2NF90IG9mZnNldCwgdm9pZCAqZHN0LCBzaXplX3Qgc2l6ZSwKKyAgICBz
aXplX3QgKnJlc2lkX3JldHVybikKK3sKKwlzc2l6ZV90IG47CisKKwlpZiAodW5pdCAhPSAw
IHx8IGRpc2tfZmQgPT0gLTEpCisJCXJldHVybiAoRUlPKTsKKwluID0gcHJlYWQoZGlza19m
ZCwgZHN0LCBzaXplLCBvZmZzZXQpOworCWlmIChuIDwgMCkKKwkJcmV0dXJuIChlcnJubyk7
CisJKnJlc2lkX3JldHVybiA9IHNpemUgLSBuOworCXJldHVybiAoMCk7Cit9CisKK3N0YXRp
YyBpbnQKK2tfZGlza2lvY3RsKHZvaWQgKmFyZywgaW50IHVuaXQsIHVfbG9uZyBjbWQsIHZv
aWQgKmRhdGEpCit7CisJLyogbm90IHN1cHBvcnRlZCBvbiBieSBrbG9hZCAqLworCXJldHVy
biAoRU5PVFRZKTsKK30KKworLyoKKyAqIFRoaXMgaXMgcmVhbGx5IGNvbmZ1c2luZyBzaW5j
ZSB0aGlzIGlzIG5vdCByZWFsbHkgbGlrZSBkb2luZyBjb3B5aW4gLyBjb3B5b3V0CisgKiBp
biBrZXJuZWwgbGFuZCB0aGlzIHdpbGwgY29weSB0aGUgZGF0YSBwb2ludGVkIHRvIGJ5IHRo
ZSAiZnJvbSIgcHRyIGFuZCBjb3B5CisgKiAidG8iIHRoZSBvZmZzZXQgaW50byB0aGUgbG9h
ZCBpbWFnZQorICovCitzdGF0aWMgaW50CitrX2NvcHlfdG9faW1hZ2Uodm9pZCAqYXJnLCBj
b25zdCB2b2lkICpmcm9tLCB1aW50NjRfdCB0bywgc2l6ZV90IHNpemUpCit7CisJdG8gJj0g
MHg3ZmZmZmZmZjsKKwlpZiAodG8gPiBpbWFnZV9zaXplKQorCQlyZXR1cm4gKEVGQVVMVCk7
CisJaWYgKHRvICsgc2l6ZSA+IGltYWdlX3NpemUpIHsKKwkJc2l6ZSA9IGltYWdlX3NpemUg
LSB0bzsKKwkJcHJpbnRmKCJXQVJOSU5HIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlblxuIik7
CisJfQorCW1lbWNweSgmaW1hZ2VbdG9dLCBmcm9tLCBzaXplKTsKKworCWlmICh0byArIHNp
emUgPiBpbWFnZV9tYXhfdXNlZCkKKwkJaW1hZ2VfbWF4X3VzZWQgPSB0byArIHNpemU7CisK
KwlyZXR1cm4gKDApOworfQorCisvKgorICogY29weW91dCBpcyBjb3B5aW5nIEZST00gdGhl
IGltYWdlIGF0ICJmcm9tIiBvZmZzZXQgdG8gbWVtb3J5IHBvaW50ZWQgdG8gYnkgdG8KKyAq
IHB0cgorICovCitzdGF0aWMgaW50CitrX2NvcHlfZnJvbV9pbWFnZSh2b2lkICphcmcsIHVp
bnQ2NF90IGZyb20sIHZvaWQgKnRvLCBzaXplX3Qgc2l6ZSkKK3sKKwlmcm9tICY9IDB4N2Zm
ZmZmZmY7CisJaWYgKGZyb20gPiBpbWFnZV9zaXplKQorCQlyZXR1cm4gKEVGQVVMVCk7CisJ
aWYgKGZyb20gKyBzaXplID4gaW1hZ2Vfc2l6ZSkKKwkJc2l6ZSA9IGltYWdlX3NpemUgLSBm
cm9tOworCW1lbWNweSh0bywgJmltYWdlW2Zyb21dLCBzaXplKTsKKworCXJldHVybiAoMCk7
Cit9CisKK3N0YXRpYyB2b2lkCitrX3NldHJlZyh2b2lkICphcmcsIGludCByLCB1aW50NjRf
dCB2KQoreworCWlmIChyIDwgMCB8fCByID49IDE2KQorCQlyZXR1cm47CisJcmVnc1tyXSA9
IHY7Cit9CisKK3N0YXRpYyB2b2lkCitrX3NldG1zcih2b2lkICphcmcsIGludCByLCB1aW50
NjRfdCB2KQoreworCS8qIFVubmVlZGVkICovCit9CisKK3N0YXRpYyB2b2lkCitrX3NldGNy
KHZvaWQgKmFyZywgaW50IHIsIHVpbnQ2NF90IHYpCit7CisJLyogVW5uZWVkZWQgKi8KK30K
Kworc3RhdGljIHZvaWQKK2tfc2V0Z2R0KHZvaWQgKmFyZywgdWludDY0X3Qgdiwgc2l6ZV90
IHN6KQoreworCS8qIFVubmVlZGVkICovCit9CisKK3N0YXRpYyB2b2lkCitrX2V4ZWModm9p
ZCAqYXJnLCB1aW50NjRfdCBlbnRyeV9wdCkKK3sKKyNpZmRlZiBERUJVRworCXByaW50Zigi
RXhlY3V0ZSBhdCAweCVqeFxuIiwgZW50cnlfcHQpOworCXByaW50ZigiaW1hZ2Ugc2l6ZSBt
YXggdXNlZCAlamQgZW5kb2YgcGFnZSAlamRcbiIsIGltYWdlX21heF91c2VkLAorCSAgICBy
b3VuZHVwMihpbWFnZV9tYXhfdXNlZCwgUEFHRV9TSVpFKSk7CisjZW5kaWYKKwlrbG9hZF9s
b2FkX2ltYWdlKGltYWdlLCBlbnRyeV9wdCk7CisJa19leGl0KGFyZywgMCk7Cit9CisKK3N0
YXRpYyB2b2lkCitrX2RlbGF5KHZvaWQgKmFyZywgaW50IHVzZWMpCit7CisJdXNsZWVwKHVz
ZWMpOworfQorCitzdGF0aWMgdm9pZAora19leGl0KHZvaWQgKmFyZywgaW50IHYpCit7CisJ
dGNzZXRhdHRyKDAsIFRDU0FGTFVTSCwgJm9sZHRlcm0pOworCWV4aXQodik7Cit9CisKK3N0
YXRpYyB2b2lkCitrX2dldG1lbSh2b2lkICphcmcsIHVpbnQ2NF90ICpsb3dtZW0sIHVpbnQ2
NF90ICpoaWdobWVtKQoreworCWludCBtaWJbMl07CisJdW5zaWduZWQgbG9uZyBsb25nIHBo
eXNtZW07CisJc2l6ZV90IGxlbjsKKworCW1pYlswXSA9IENUTF9IVzsKKwltaWJbMV0gPSBI
V19QSFlTTUVNOworCWxlbiA9IHNpemVvZihwaHlzbWVtKTsKKwlzeXNjdGwobWliLCAyLCAm
cGh5c21lbSwgJmxlbiwgTlVMTCwgMCk7CisKKwkqbG93bWVtID0gcGh5c21lbTsKKwkqaGln
aG1lbSA9IDA7CisKKwlwcmludGYoIiVzOiVkIGxvd21lbSAlanUgaGlnaG1lbSAlanVcbiIs
X19GVU5DVElPTl9fLF9fTElORV9fLAorCSAgICAgICAqbG93bWVtLAorCSAgICAgICAqaGln
aG1lbQorCQkpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitrX2dldGVudih2b2lkICph
cmcsIGludCBpZHgpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKnZhcnNbXSA9IHsKKwkJImZv
bz1iYXIiLAorCQkiYmFyPWJhcmJhciIsCisJCU5VTEwKKwl9OworCisJcmV0dXJuICh2YXJz
W2lkeF0pOworfQorCitzdGF0aWMgaW50CitrX2J1aWxkc21hcCh2b2lkICphcmcsIHZvaWQg
KipzbWFwX3ZvaWQsIHNpemVfdCAqb3V0bGVuKSAKK3sKKwlzdHJ1Y3Qgc21hcCAqc21hcGJh
c2U7CisJc2l6ZV90IGksajsKKwlzaXplX3QgbGVuOworCWNoYXIgbmFtZVtdID0gImh3LnNt
YXAiOworCWludCBtaWJbQ1RMX01BWE5BTUVdOworCisJbGVuID0gbmFtZTJvaWQobmFtZSwg
bWliKTsKKworCS8qIGdldCB0aGUgY3VycmVudCBzbWFwIGZyb20gdGhlIHJ1bm5pbmcgc3lz
dGVtICovCisJaSA9IHN5c2N0bChtaWIsIDIsIDAsICZqLCAwLCAwKTsKKwlsZW4gPSBqOwor
CisJLyoKKwkgKiBVc2UgdGhlIG1hbGxvYyBmdW5jdGlvbiBmcm9tIGxpYnN0YW5kL3VzZXJi
b290LnNvIHNpbmNlCisJICogYmlvc19hZGRzbWFwZGF0YSB3aWxsIGZyZWUgdGhlIG1lbW9y
eSB1c2luZyB0aGUgbGlic3RhbmQgRnJlZQorCSAqIHNvIGJlIGNhcmVmdWwgdG8gdXNlIG5v
dCB1c2Ugc3RhbmRhcmQgbWFsbG9jIGhlcmUKKwkgKi8KKwlzbWFwYmFzZSA9IE1hbGxvY19m
dW5jKGosIF9fRklMRV9fLCBfX0xJTkVfXyk7CisJaWYgKCFzbWFwYmFzZSkgeworCQlwcmlu
dGYoImtsb2FkIGZhaWxlZCB0byBhbGxvY2F0ZSBzcGFjZSBmb3Igc21hcFxuIik7CisJCXJl
dHVybiAxOworCX0KKworCWkgPSBzeXNjdGwobWliLCAyLCBzbWFwYmFzZSwgJmosIE5VTEws
IDApOworCisJKm91dGxlbiA9IGxlbjsKKwkqc21hcF92b2lkID0gc21hcGJhc2U7CisKKyNp
ZmRlZiBERUJVRworCXsKKwkJc3RydWN0IHNtYXAgKnNtYXAsICpzbWFwZW5kOworCQlzbWFw
ZW5kID0gKHN0cnVjdCBzbWFwICopKCh1aW50cHRyX3Qpc21hcGJhc2UgKyBsZW4pOworCQlm
b3IgKHNtYXAgPSBzbWFwYmFzZTsgc21hcCA8IHNtYXBlbmQ7IHNtYXArKykgeworCQkJcHJp
bnRmKCJcdHR5cGUgJWQgYmFzZSAweCUwMTZseCBsZW5ndGggMHglMDE2bHhcbiIsCisJCQkg
ICAgICAgc21hcC0+dHlwZSwgc21hcC0+YmFzZSwgc21hcC0+bGVuZ3RoKTsKKwkJfQorCX0K
KyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBsb2FkZXJfY2FsbGJhY2tzIGNi
ID0geworCisJLm9wZW4gPSBrX29wZW4sCisJLmNsb3NlID0ga19jbG9zZSwKKwkuaXNkaXIg
PSBrX2lzZGlyLAorCS5yZWFkID0ga19yZWFkLAorCS5yZWFkZGlyID0ga19yZWFkZGlyLAor
CS5zZWVrID0ga19zZWVrLAorCS5zdGF0ID0ga19zdGF0LAorCisJLmRpc2tyZWFkID0ga19k
aXNrcmVhZCwKKwkuZGlza2lvY3RsID0ga19kaXNraW9jdGwsCisKKwkuY29weWluID0ga19j
b3B5X3RvX2ltYWdlLAorCS5jb3B5b3V0ID0ga19jb3B5X2Zyb21faW1hZ2UsCisJLnNldHJl
ZyA9IGtfc2V0cmVnLAorCS5zZXRtc3IgPSBrX3NldG1zciwKKwkuc2V0Y3IgPSBrX3NldGNy
LAorCS5zZXRnZHQgPSBrX3NldGdkdCwKKwkuZXhlYyA9IGtfZXhlYywKKworCS5kZWxheSA9
IGtfZGVsYXksCisJLmV4aXQgPSBrX2V4aXQsCisJLmdldG1lbSA9IGtfZ2V0bWVtLAorCisJ
LnB1dGMgPSBrX3B1dGMsCisJLmdldGMgPSBrX2dldGMsCisJLnBvbGwgPSBrX3BvbGwsCisJ
LmdldGVudiA9IGtfZ2V0ZW52LAorCS5idWlsZHNtYXAgPSBrX2J1aWxkc21hcCwKK307CisK
K3N0YXRpYyB2b2lkCit1c2FnZSh2b2lkKQoreworCXByaW50ZigidXNhZ2U6IGtsb2FkIFst
ZCA8ZGlzayBpbWFnZSBwYXRoPl0gIgorCSAgICAiWy1oIDxob3N0IGZpbGVzeXN0ZW0gcGF0
aD5dIFstZSB8IC1yXVxuIik7CisJZXhpdCgxKTsKK30KKworaW50CittYWluKGludCBhcmdj
LCBjaGFyKiogYXJndikKK3sKKwlpbnQgKCpsb2FkZXJfbWFpbikoc3RydWN0IGxvYWRlcl9j
YWxsYmFja3MgKiwgdm9pZCAqLCBpbnQsIGludCk7CisJdm9pZCAoKmxvYWRlcl9pbml0KSh2
b2lkKTsKKwlpbnQgKCpzZXRlbnYpKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQp
OworCWludCBvcHQ7CisJY2hhciAqZGlza19pbWFnZSA9IE5VTEw7CisJY2hhciBrYXJnWzIw
XTsKKwljaGFyIGt2YWxbMTI4XTsKKworCWlmIChnZXRldWlkKCkpIHsKKwkJZXJybm8gPSBF
UEVSTTsKKwkJZXJyKDEsIE5VTEwpOworCX0KKworCWRsX2xpYiA9IGRsb3BlbigiL2Jvb3Qv
dXNlcmJvb3Quc28iLCBSVExEX0xPQ0FMKTsKKwlpZiAoIWRsX2xpYikgeworCQlwcmludGYo
IiVzXG4iLCBkbGVycm9yKCkpOworCQlyZXR1cm4gKDEpOworCX0KKwlsb2FkZXJfbWFpbiA9
IGRsc3ltKGRsX2xpYiwgImxvYWRlcl9tYWluIik7CisJaWYgKCFsb2FkZXJfbWFpbikgewor
CQlwcmludGYoIiVzXG4iLCBkbGVycm9yKCkpOworCQlyZXR1cm4gKDEpOworCX0KKwlNYWxs
b2NfZnVuYyA9IGRsc3ltKGRsX2xpYiwgIk1hbGxvYyIpOworCWlmICghTWFsbG9jX2Z1bmMp
IHsKKwkJcHJpbnRmKCIlc1xuIiwgZGxlcnJvcigpKTsKKwkJcmV0dXJuICgxKTsKKwl9CisJ
LyoKKwkgKiBwdWxsIGluIHRoZSBsaWJzdGFuZCBzZXRlbnYgZm9yIHNldHRpbmcgbmFtZSB2
YWx1ZSBwYWlycworCSAqIGluIHRoZSBrZXJuZWwgZW52IHBhZ2UKKwkgKi8KKwlzZXRlbnYg
PSBkbHN5bShkbF9saWIsICJzZXRlbnYiKTsKKwlpZiAoIXNldGVudikgeworCQlwcmludGYo
IiVzXG4iLCBkbGVycm9yKCkpOworCQlyZXR1cm4gKDEpOworCX0KKwlsb2FkZXJfaW5pdCA9
IGRsc3ltKGRsX2xpYiwgImxvYWRlcl9pbml0Iik7CisJaWYgKCFsb2FkZXJfaW5pdCkgewor
CQlwcmludGYoIiVzXG4iLCBkbGVycm9yKCkpOworCQlyZXR1cm4gKDEpOworCX0KKwkvKiBj
YWxsIGxpYnN0YW5kIHNldGhlYXAgdG8gaW5pdCBtZW1vcnkgYWxsb2NhdGlvbnMgKi8KKwls
b2FkZXJfaW5pdCgpOworCisJd2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgImQ6
aDplcms6IikpICE9IC0xKSB7CisJCXN3aXRjaCAob3B0KSB7CisJCWNhc2UgJ2QnOgorCQkJ
ZGlza19pbWFnZSA9IG9wdGFyZzsKKwkJCWJyZWFrOworCisJCWNhc2UgJ2gnOgorCQkJaG9z
dF9iYXNlID0gb3B0YXJnOworCQkJYnJlYWs7CisJCWNhc2UgJ2UnOgorCQkJa19leGVjdXRl
ID0gMTsKKwkJCWJyZWFrOworCQljYXNlICdyJzoKKwkJCWtfcmVib290ID0gMTsKKwkJCWJy
ZWFrOworCQljYXNlICdrJzoKKwkJCW1lbXNldChrYXJnLDAsc2l6ZW9mKGthcmcpKTsKKwkJ
CW1lbXNldChrdmFsLDAsc2l6ZW9mKGt2YWwpKTsKKwkJCWlmKHNzY2FuZihvcHRhcmcsIiVb
YS16QS1aXy1dPSVzIixrYXJnLGt2YWwpID09IDIpIHsKKwkJCQlwcmludGYoImdvdCB2YWx1
ZSAlcyAlc1xuIixrYXJnLGt2YWwpOworCQkJCXNldGVudihrYXJnLCBrdmFsLCAxKTsKKwkJ
CX0gZWxzZSB7CisJCQkJZnByaW50ZihzdGRlcnIsIi1rIGZhaWx1cmUgJXNcbiIsb3B0YXJn
KTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgJz8nOgorCQkJdXNhZ2UoKTsKKwkJfQor
CX0KKworCWltYWdlX3NpemUgPSAxMjgqMTAyNCoxMDI0OworCWltYWdlID0gbWFsbG9jKGlt
YWdlX3NpemUpOworCWlmIChkaXNrX2ltYWdlKSB7CisJCWRpc2tfZmQgPSBvcGVuKGRpc2tf
aW1hZ2UsIE9fUkRPTkxZKTsKKwkJaWYgKGRpc2tfZmQgPCAwKQorCQkJZXJyKDEsICJDYW4n
dCBvcGVuIGRpc2sgaW1hZ2UgJyVzJyIsIGRpc2tfaW1hZ2UpOworCX0KKworCXRjZ2V0YXR0
cigwLCAmdGVybSk7CisJb2xkdGVybSA9IHRlcm07CisJdGVybS5jX2lmbGFnICY9IH4oSUNS
TkwpOworCXRlcm0uY19sZmxhZyAmPSB+KElDQU5PTnxFQ0hPKTsKKwl0Y3NldGF0dHIoMCwg
VENTQUZMVVNILCAmdGVybSk7CisKKwlyZXR1cm4obG9hZGVyX21haW4oJmNiLCBOVUxMLCBV
U0VSQk9PVF9WRVJTSU9OXzQsIGRpc2tfZmQgPj0gMCkpOworfQorCitzdGF0aWMgaW50Citr
bG9hZF9sb2FkX2ltYWdlKHZvaWQgKmltYWdlLCB1bnNpZ25lZCBsb25nIGVudHJ5X3B0KQor
eworCWNoYXIgKnN0YWNrID0gKGNoYXIgKilpbWFnZSArIDB4MTAwMDsgLyogUEFHRVNJWkUg
Ki8KKwlzdHJ1Y3Qga2xvYWQga2xkOworCWludCBmbGFncyA9IEtMT0FEX0xPQUQ7CisJLyoK
KwkgKiBUaGlzIG11c3QgdGhlIHNhbWUgdmFsdWUgc3lzL2NvbmYvbGRzY3JpcHQueHh4CisJ
ICogVGhpcyB2YWx1ZSB3YXMgY2hhbmdlZCBhdCBvbmUgcG9pbnQgd2hlbiBhIG5ldyB2ZXJz
aW9uCisJICogb2YgYmludXRpbHMgd2FzIGltcG9ydGVkLiBUaGUgdmFsdWUgaXMgYWxpZ25l
ZCB0bworCSAqIG1heCBwYWdlIHNpemUgc3VwcG9ydGVkIGJ5IGdpdmVuIHByb2Nlc3Nvcgor
CSAqLworCXVuc2lnbmVkIGxvbmcga2VybnBoeXMgPSAweDIwMDAwMDsKKworCWtsZC5raGRy
WzBdLmtfYnVmID0gJigoY2hhciAqKWltYWdlKVtrZXJucGh5c107CisJa2xkLmtoZHJbMF0u
a19tZW1zeiA9IHJvdW5kdXAyKGltYWdlX21heF91c2VkLFBBR0VfU0laRSkgLSBrZXJucGh5
czsKKwlrbGQua19lbnRyeV9wdCA9IGVudHJ5X3B0OworCWtsZC5udW1faGRycyA9IDE7CisK
KwkvKgorCSAqIHB1bGwgcGFyYW1hdGVycyBmcm9tIHRoZSBzdGFjayBwYWdlCisJICogYSBi
ZXR0ZXIgaW50ZXJmYWNlIHNob3VsZCBiZSBkZXZlbG9wZWQgZm9yIGtsb2FkCisJICogaW4g
dGhlIGZ1dHVyZQorCSAqLworCWtsZC5rX21vZHVsZXAgPSAoKHVuc2lnbmVkIGludCAqKXN0
YWNrKVsxXTsKKwlrbGQua19waHlzZnJlZSA9ICgodW5zaWduZWQgaW50ICopc3RhY2spWzJd
OworCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhlcmUgaXMgNCBwYWdlcyBvZiBrZW52IHBhZ2Vz
IGJldHdlZW4gdGhlIGVuZCBvZiB0aGUKKwkgKiBrZXJuZWwgYW5kIHN0YXJ0IG9mIGZyZWUg
bWVtb3J5LgorCSAqIFdoeSB5b3UgYXNrPyBXZWxsIHRoYXQgaXMgYSBxdWVzdGlvbiB3aXRo
b3V0IGEgZ29vZCBhbnN3ZXIgYXMgb2YgeWV0CisJICogZm9yIHNvbWUgc3RyYW5nZSByZWFz
b24gc29tZSBhdGEgY2hpcHMgd2lsbCBub3QgcmVzcG9uZCBjb3JyZWN0bHkKKwkgKiB1bmxl
c3MgZnJlZSBtZW1vcnkgc3RhcnRzIGF0IGdyZWF0ZXIgdGhhbiAyIHBhZ2VzIG91dC4KKwkg
KiBUaGUgb2J2b2l1cyBhc3N1bXB0aW9uIGlzIHRoYXQgc29tZXRoaW5nIGlzIGdldHRpbmcg
c3RvbW1wZWQgb24gYnV0CisJICogdGhhdCBoYXMgeWV0IHRvIGJlIGRldGVybWluZWQuIEFk
ZGluZyB0aGlzIHdvcmthcm91bmQuCisJICovIAorCWtsZC5rX3BoeXNmcmVlID0gTUFYKGts
ZC5rX21vZHVsZXAgKyAoNCAqIFBBR0VfU0laRSksIGtsZC5rX3BoeXNmcmVlKTsKKworCXBy
aW50ZigiV0FSTklORyBrZXJucGh5cyBzZXQgdG8gMHglbHggbWFrZSBzdXJlIHRoaXMgbWF0
Y2hlcyBrZXJucGh5cyAiCisJICAgICJmcm9tIHN5cy9jb25maWcvbGRzY3JpcHRcbiIsIGtl
cm5waHlzKTsKKworCWlmIChrX2V4ZWN1dGUpIHsKKwkJZmxhZ3MgJj0gfktMT0FEX1JFQk9P
VDsKKwkJZmxhZ3MgfD0gS0xPQURfRVhFQzsKKwl9CisJaWYgKGtfcmVib290KSB7CisJCWZs
YWdzICY9IH5LTE9BRF9FWEVDOworCQlmbGFncyB8PSBLTE9BRF9SRUJPT1Q7CisJCXNodXRk
b3duX3Byb2Nlc3NlcygpOworCX0KKworCXJldHVybiAoc3lzY2FsbChTWVNfa2xvYWQsICZr
bGQsIHNpemVvZihzdHJ1Y3Qga2xvYWQpLCBmbGFncykpOworfQorCitzdGF0aWMgaW50Citz
aHV0ZG93bl9wcm9jZXNzZXModm9pZCkKK3sKKwlpbnQgaTsKKwl1X2ludCBwYWdlaW5zOwor
CWludCBzdmVycm5vOworCS8qCisJICogRG8gYSBzeW5jIGVhcmx5IG9uLCBzbyBkaXNrcyBz
dGFydCB0cmFuc2ZlcnMgd2hpbGUgd2UncmUgb2ZmCisJICoga2lsbGluZyBwcm9jZXNzZXMu
ICBEb24ndCB3b3JyeSBhYm91dCB3cml0ZXMgZG9uZSBiZWZvcmUgdGhlCisJICogcHJvY2Vz
c2VzIGRpZSwgdGhlIHJlYm9vdCBzeXN0ZW0gY2FsbCBzeW5jcyB0aGUgZGlza3MuCisJICov
CisJc3luYygpOworCisJLyoKKwkgKiBJZ25vcmUgc2lnbmFscyB0aGF0IHdlIGNhbiBnZXQg
YXMgYSByZXN1bHQgb2Yga2lsbGluZworCSAqIHBhcmVudHMsIGdyb3VwIGxlYWRlcnMsIGV0
Yy4KKwkgKi8KKwkodm9pZClzaWduYWwoU0lHSFVQLCAgU0lHX0lHTik7CisJKHZvaWQpc2ln
bmFsKFNJR0lOVCwgIFNJR19JR04pOworCSh2b2lkKXNpZ25hbChTSUdRVUlULCBTSUdfSUdO
KTsKKwkodm9pZClzaWduYWwoU0lHVEVSTSwgU0lHX0lHTik7CisJKHZvaWQpc2lnbmFsKFNJ
R1RTVFAsIFNJR19JR04pOworCisJLyoKKwkgKiBJZiB3ZSdyZSBydW5uaW5nIGluIGEgcGlw
ZWxpbmUsIHdlIGRvbid0IHdhbnQgdG8gZGllCisJICogYWZ0ZXIga2lsbGluZyB3aGF0ZXZl
ciB3ZSdyZSB3cml0aW5nIHRvLgorCSAqLworCSh2b2lkKXNpZ25hbChTSUdQSVBFLCBTSUdf
SUdOKTsKKworCS8qIEp1c3Qgc3RvcCBpbml0IC0tIGlmIHdlIGZhaWwsIHdlJ2xsIHJlc3Rh
cnQgaXQuICovCisJaWYgKGtpbGwoMSwgU0lHVFNUUCkgPT0gLTEpCisJCWVycigxLCAiU0lH
VFNUUCBpbml0Iik7CisKKwkvKiBTZW5kIGEgU0lHVEVSTSBmaXJzdCwgYSBjaGFuY2UgdG8g
c2F2ZSB0aGUgYnVmZmVycy4gKi8KKwlpZiAoa2lsbCgtMSwgU0lHVEVSTSkgPT0gLTEgJiYg
ZXJybm8gIT0gRVNSQ0gpCisJCWVycigxLCAiU0lHVEVSTSBwcm9jZXNzZXMiKTsKKworCS8q
CisJICogQWZ0ZXIgdGhlIHByb2Nlc3NlcyByZWNlaXZlIHRoZSBzaWduYWwsIHN0YXJ0IHRo
ZSByZXN0IG9mIHRoZQorCSAqIGJ1ZmZlcnMgb24gdGhlaXIgd2F5LiAgV2FpdCA1IHNlY29u
ZHMgYmV0d2VlbiB0aGUgU0lHVEVSTSBhbmQKKwkgKiB0aGUgU0lHS0lMTCB0byBnaXZlIGV2
ZXJ5Ym9keSBhIGNoYW5jZS4gSWYgdGhlcmUgaXMgYSBsb3Qgb2YKKwkgKiBwYWdpbmcgYWN0
aXZpdHkgdGhlbiB3YWl0IGxvbmdlciwgdXAgdG8gYSBtYXhpbXVtIG9mIGFwcHJveAorCSAq
IDYwIHNlY29uZHMuCisJICovCisJc2xlZXAoMik7CisJZm9yIChpID0gMDsgaSA8IDIwOyBp
KyspIHsKKwkJcGFnZWlucyA9IGdldF9wYWdlaW5zKCk7CisJCXN5bmMoKTsKKwkJc2xlZXAo
Myk7CisJCWlmIChnZXRfcGFnZWlucygpID09IHBhZ2VpbnMpCisJCQlicmVhazsKKwl9CisK
Kwlmb3IgKGkgPSAxOzsgKytpKSB7CisJCWlmIChraWxsKC0xLCBTSUdLSUxMKSA9PSAtMSkg
eworCQkJaWYgKGVycm5vID09IEVTUkNIKQorCQkJCWJyZWFrOworCQkJZ290byByZXN0YXJ0
OworCQl9CisJCWlmIChpID4gNSkgeworCQkJKHZvaWQpZnByaW50ZihzdGRlcnIsCisJCQkg
ICAgIldBUk5JTkc6IHNvbWUgcHJvY2Vzcyhlcykgd291bGRuJ3QgZGllXG4iKTsKKwkJCWJy
ZWFrOworCQl9CisJCSh2b2lkKXNsZWVwKDIgKiBpKTsKKwl9CisJcmV0dXJuIDE7CityZXN0
YXJ0OgorCXN2ZXJybm8gPSBlcnJubzsKKwllcnJ4KDEsICIlcyVzIiwga2lsbCgxLCBTSUdI
VVApID09IC0xID8KKwkgICAgIihjYW4ndCByZXN0YXJ0IGluaXQpOiAiIDogIiIsIHN0cmVy
cm9yKHN2ZXJybm8pKTsKKwkvKiBOT1RSRUFDSEVEICovCisJcmV0dXJuIDA7Cit9CisKK3N0
YXRpYyB1X2ludAorZ2V0X3BhZ2VpbnModm9pZCkKK3sKKwl1X2ludCBwYWdlaW5zOworCXNp
emVfdCBsZW47CisKKwlsZW4gPSBzaXplb2YocGFnZWlucyk7CisJaWYgKHN5c2N0bGJ5bmFt
ZSgidm0uc3RhdHMudm0udl9zd2FwcGdzaW4iLCAmcGFnZWlucywgJmxlbiwgTlVMTCwgMCkK
KwkgICAgIT0gMCkgeworCQl3YXJueCgidl9zd2FwcGdzaW4iKTsKKwkJcmV0dXJuICgwKTsK
Kwl9CisJcmV0dXJuIChwYWdlaW5zKTsKK30K
--------------010401020106090303040504--

--------------enigEF8640DC65B19FFA7A0B0F0B
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="signature.asc"

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (Darwin)
Comment: Using GnuPG with Mozilla - http://www.enigmail.net/

iEYEARECAAYFAlCkb8YACgkQNRmM+OaGhBhXTQCeM+QAfsB8NiEQ2sZvKxXEMJRm
YU4An24ju3d/k5mTmcQqik1UHaT0V3RF
=T8ZP
-----END PGP SIGNATURE-----

--------------enigEF8640DC65B19FFA7A0B0F0B--



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