[SCM] GNU Inetutils branch, master, updated. v2.0-20-g353812a

Simon Josefsson via Commit-inetutils <[email protected]> Sat, 24 Jul 2021 10:09:25 -0400 (EDT)
Newsgroups gmane.comp.gnu.inetutils.cvs
Message-ID <[email protected]>
VGhpcyBpcyBhbiBhdXRvbWF0ZWQgZW1haWwgZnJvbSB0aGUgZ2l0IGhvb2tzL3Bvc3QtcmVjZWl2
ZSBzY3JpcHQuIEl0IHdhcwpnZW5lcmF0ZWQgYmVjYXVzZSBhIHJlZiBjaGFuZ2Ugd2FzIHB1c2hl
ZCB0byB0aGUgcmVwb3NpdG9yeSBjb250YWluaW5nCnRoZSBwcm9qZWN0ICJHTlUgSW5ldHV0aWxz
ICIuCgpUaGUgYnJhbmNoLCBtYXN0ZXIgaGFzIGJlZW4gdXBkYXRlZAogICAgICAgdmlhICAzNTM4
MTJhNWQ5ZGZjNzdlOWY3MGQyNzhiNjExYzYxMTA0MDRiNTEwIChjb21taXQpCiAgICAgICB2aWEg
IDZkMGM4YWMyMDNhY2E1ZWU5ZDAwZGE5MThmNjBmNjZiOGE0MmZkZWYgKGNvbW1pdCkKICAgICAg
ZnJvbSAgMjMwNjViMWZhZjc3YTEwOTU3NTc0ZDc4YjYzMjFkODc1ZTYwMzA0ZCAoY29tbWl0KQoK
VGhvc2UgcmV2aXNpb25zIGxpc3RlZCBhYm92ZSB0aGF0IGFyZSBuZXcgdG8gdGhpcyByZXBvc2l0
b3J5IGhhdmUKbm90IGFwcGVhcmVkIG9uIGFueSBvdGhlciBub3RpZmljYXRpb24gZW1haWw7IHNv
IHdlIGxpc3QgdGhvc2UKcmV2aXNpb25zIGluIGZ1bGwsIGJlbG93LgoKLSBMb2cgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
aHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2NnaXQvaW5ldHV0aWxzLmdpdC9jb21taXQvP2lk
PTM1MzgxMmE1ZDlkZmM3N2U5ZjcwZDI3OGI2MTFjNjExMDQwNGI1MTAKCgpjb21taXQgMzUzODEy
YTVkOWRmYzc3ZTlmNzBkMjc4YjYxMWM2MTEwNDA0YjUxMApBdXRob3I6IFNpbW9uIEpvc2Vmc3Nv
biA8c2ltb25Aam9zZWZzc29uLm9yZz4KRGF0ZTogICBTYXQgSnVsIDI0IDE1OjU2OjMwIDIwMjEg
KzAyMDAKCiAgICBVc2UgZ251bGliJ3MgZnRzIGNvZGUgaW5zdGVhZCBvZiBjdXN0b20gbGlibHMv
IHZlcnNpb24uCiAgICAKICAgICogYm9vdHN0cmFwLmNvbmYgKGdudWxpYl9tb2R1bGVzKTogQWRk
IGZ0cy4KICAgICogbGlibHMvZnRzLmgsIGxpYmxzL2Z0cy5jOiBSZW1vdmUgZmlsZXMuCiAgICAq
IE5FV1M6IE1lbnRpb24gY2hhbmdlLgogICAgKiBjb25maWd1cmUuYWM6IERyb3AgZmNoZGlyIHRl
c3QuCgpkaWZmIC0tZ2l0IGEvTkVXUyBiL05FV1MKaW5kZXggNGM3NWJmZC4uNjQyN2MyNiAxMDA2
NDQKLS0tIGEvTkVXUworKysgYi9ORVdTCkBAIC04LDYgKzgsMTAgQEAgRGlzYWJsZSB1c2Ugb2Yg
cmVhZGxpbmUgd2hlbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBURVJNIGlzIHVuc2V0IG9yIHNldAog
dG8gImR1bWIiIChjYXVzZWQgcHJvYmxlbXMgd2l0aCBFbWFjcyBBbmdlRlRQIG9uIE1hY09TKS4g
IFRoYW5rcyB0bwogQWxleCBCb2NoYW5uZWsgZm9yIHJlcG9ydCwgZGVidWdnaW5nIGFuZCBwYXRj
aC4KIAorKiogZnRwZAorCitPdXIgbGlibHMgbm93IHVzZXMgZ251bGliJ3MgZnRzIGluc3RlYWQg
b2Ygb3VyIG93biBjdXN0b20gdmVyc2lvbi4KKwogKiogdGVsbmV0CiAKICoqKiBJbXBsZW1lbnQg
LS1iaW5kICgtYikuCmRpZmYgLS1naXQgYS9ib290c3RyYXAuY29uZiBiL2Jvb3RzdHJhcC5jb25m
CmluZGV4IGI2ZDEzODIuLmFiZjVhNWYgMTAwNjQ0Ci0tLSBhL2Jvb3RzdHJhcC5jb25mCisrKyBi
L2Jvb3RzdHJhcC5jb25mCkBAIC00OSw2ICs0OSw3IEBAIGV4dGVuc2lvbnMKIGZkbC0xLjMKIGZp
bGVtb2RlCiBmb3JrcHR5CitmdHMKIGdlbmRvY3MKIGdldGFkZHJpbmZvCiBnZXRjd2QKZGlmZiAt
LWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCBhZjgzZjM1Li45NGQxNDFj
IDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC0yMDAsOCAr
MjAwLDggQEAgQUNfU1VCU1QoTElCREwpCiBBQ19TVUJTVChMSUJQQU0pCiBBQ19TVUJTVChGVFBE
X0xJQlBBTSkKIAotIyBDYW4gd2UgdXNlIGxpYmxzPyBidXQgd2UgbXVzdCBoYXZlIGZjaGRpcigp
Ci1pZiB0ZXN0ICIkZW5hYmxlX2xpYmxzIiA9IHllcyAmJiB0ZXN0ICIkYWNfY3ZfZnVuY19mY2hk
aXIiID0geWVzIDsgdGhlbgorIyBVc2UgbGlibHM/CitpZiB0ZXN0ICIkZW5hYmxlX2xpYmxzIiA9
IHllczsgdGhlbgogICBMSUJMUz0iLi4vbGlibHMvbGlibHMuYSIKICAgbGlibHNfQlVJTEQ9Imxp
YmxzLmEiCiAgIEFDX0RFRklORShbV0lUSF9MSUJMU10sIDEsIFtEZWZpbmUgdG8gb25lIGlmIHlv
dSBoYXZlIC1sbHNdKQpAQCAtNzcxLDcgKzc3MSw3IEBAIEFDX0ZVTkNfRk9SSwogQUNfRlVOQ19T
VFJDT0xMCiBBQ19GVU5DX01NQVAKIAotQUNfQ0hFQ0tfRlVOQ1MoY2ZzZXRzcGVlZCBjZ2V0ZW50
IGRpcmZkIGZjaGRpciBmbG9jayBcCitBQ19DSEVDS19GVU5DUyhjZnNldHNwZWVkIGNnZXRlbnQg
ZGlyZmQgZmxvY2sgXAogICAgICAgICAgICAgICAgZm9yayBmcGF0aGNvbmYgZnRydW5jYXRlIFwK
ICAgICAgICAgICAgICAgIGdldGN3ZCBnZXRtc2cgZ2V0cHd1aWRfciBnZXRzcG5hbSBnZXR1dHhl
bnQgZ2V0dXR4dXNlciBcCiAgICAgICAgICAgICAgICBpbml0Z3JvdXBzIGluaXRzZXRwcm9jdGl0
bGUga2lsbHBnIFwKZGlmZiAtLWdpdCBhL2xpYmxzL01ha2VmaWxlLmFtIGIvbGlibHMvTWFrZWZp
bGUuYW0KaW5kZXggNTEyM2FjNS4uYzdkZDRmMSAxMDA2NDQKLS0tIGEvbGlibHMvTWFrZWZpbGUu
YW0KKysrIGIvbGlibHMvTWFrZWZpbGUuYW0KQEAgLTI1LDYgKzI1LDYgQEAgbm9pbnN0X0xJQlJB
UklFUyA9ICQobGlibHNfQlVJTEQpCiAKIEVYVFJBX0xJQlJBUklFUyA9IGxpYmxzLmEKIAotbGli
bHNfYV9TT1VSQ0VTID0gY21wLmMgc3RhdF9mbGFncy5jIGxzLmMgcHJpbnQuYyB1dGlsLmMgZnRz
LmMKK2xpYmxzX2FfU09VUkNFUyA9IGNtcC5jIHN0YXRfZmxhZ3MuYyBscy5jIHByaW50LmMgdXRp
bC5jCiAKLW5vaW5zdF9IRUFERVJTID0gZXh0ZXJuLmggbHMuaCBmdHMuaAorbm9pbnN0X0hFQURF
UlMgPSBleHRlcm4uaCBscy5oCmRpZmYgLS1naXQgYS9saWJscy9mdHMuYyBiL2xpYmxzL2Z0cy5j
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWY1YWFkLi4wMDAwMDAwCi0tLSBhL2xp
YmxzL2Z0cy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA5OCArMCwwIEBACi0vKgotICBDb3B5cmln
aHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIw
MDgsCi0gIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTQsIDIwMTUsIDIwMTYsIDIw
MTcsIDIwMTgsIDIwMTksCi0gIDIwMjAsIDIwMjEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuCi0KLSAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIEluZXR1dGlscy4KLQotICBHTlUgSW5l
dHV0aWxzIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt
b2RpZnkKLSAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0
aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0Ci0gIHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLQotICBHTlUgSW5ldHV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICBhbG9u
ZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIGBodHRwOi8vd3d3LmdudS5vcmcvbGlj
ZW5zZXMvJy4gKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MywgMTk5NAotICoJ
VGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJz
aXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl
Ci0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQot
ICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
IDxjb25maWcuaD4KLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5o
PgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8ZGlyZW50Lmg+Ci0jaW5jbHVkZSA8ZXJy
bm8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRl
IDx1bmlzdGQuaD4KLSNpbmNsdWRlIDx1bnVzZWQtcGFyYW1ldGVyLmg+Ci0KLSNpbmNsdWRlICJm
dHMuaCIKLQotLyogTGFyZ2VzdCBhbGlnbm1lbnQgc2l6ZSBuZWVkZWQsIG1pbnVzIG9uZS4KLSAq
IEl0IGlzIHVzZWQgYXMgdmFsdWUgYW5kIGFzIGJpdCBtYXNrLgotICogVXN1YWxseSBsb25nIGRv
dWJsZSBpcyB0aGUgd29yc3QgY2FzZS4gICovCi0jaWZuZGVmIEFMSUdOQllURVMKLSMgZGVmaW5l
IEFMSUdOQllURVMJKF9fYWxpZ25vZl9fIChsb25nIGRvdWJsZSkgLSAxKQotI2VuZGlmCi0KLS8q
IEFsaWduIFAgdG8gc2l6ZSBBTElHTkJZVEVTIGF0IGFkYXB0ZWQgYm91bmRhcnkuICAqLwotI2lm
bmRlZiBBTElHTgotIyBkZWZpbmUgQUxJR04ocCkJKCgodW5zaWduZWQgbG9uZyBpbnQpIChwKSAr
IEFMSUdOQllURVMpICYgfkFMSUdOQllURVMpCi0jZW5kaWYKLQotCi1zdGF0aWMgRlRTRU5UICpm
dHNfYWxsb2MgKEZUUyAqLCBjb25zdCBjaGFyICosIGludCk7Ci1zdGF0aWMgRlRTRU5UICpmdHNf
YnVpbGQgKEZUUyAqLCBpbnQpOwotc3RhdGljIHZvaWQgZnRzX2xmcmVlIChGVFNFTlQgKik7Ci1z
dGF0aWMgdm9pZCBmdHNfbG9hZCAoRlRTICosIEZUU0VOVCAqKTsKLXN0YXRpYyBzaXplX3QgZnRz
X21heGFyZ2xlbiAoY2hhciAqY29uc3QgKik7Ci1zdGF0aWMgdm9pZCBmdHNfcGFkanVzdCAoRlRT
ICosIHZvaWQgKik7Ci1zdGF0aWMgaW50IGZ0c19wYWxsb2MgKEZUUyAqLCBzaXplX3QpOwotc3Rh
dGljIEZUU0VOVCAqZnRzX3NvcnQgKEZUUyAqLCBGVFNFTlQgKiwgaW50KTsKLXN0YXRpYyB1bnNp
Z25lZCBzaG9ydCBmdHNfc3RhdCAoRlRTICosIHN0cnVjdCBkaXJlbnQgKiwgRlRTRU5UICosIGlu
dCk7Ci0KLSNpZm5kZWYgTUFYCi0jIGRlZmluZSBNQVgoYSwgYikJKCgoYSkgPiAoYikpID8gKGEp
IDogKGIpKQotI2VuZGlmCi0KLSNkZWZpbmUgSVNET1QoYSkJKGFbMF0gPT0gJy4nICYmICghYVsx
XSB8fCAoYVsxXSA9PSAnLicgJiYgIWFbMl0pKSkKLQotI2RlZmluZSBJU1NFVChvcHQpCShzcC0+
ZnRzX29wdGlvbnMgJiBvcHQpCi0jZGVmaW5lIFNFVChvcHQpCShzcC0+ZnRzX29wdGlvbnMgfD0g
b3B0KQotCi0jZGVmaW5lIENIRElSKHNwLCBwYXRoKQkoIUlTU0VUKEZUU19OT0NIRElSKSAmJiBj
aGRpcihwYXRoKSkKLSNpZmRlZiBIQVZFX0ZDSERJUgotIyBkZWZpbmUgRkNIRElSKHNwLCBmZCkJ
KCFJU1NFVChGVFNfTk9DSERJUikgJiYgZmNoZGlyKGZkKSkKLSNlbHNlCi0jIGRlZmluZSBGQ0hE
SVIoc3AsIGZkKSAgKCFJU1NFVChGVFNfTk9DSERJUikgJiYgLTEpCi0jZW5kaWYKLQotLyogZnRz
X2J1aWxkIGZsYWdzICovCi0jZGVmaW5lIEJDSElMRAkJMQkvKiBmdHNfY2hpbGRyZW4gKi8KLSNk
ZWZpbmUgQk5BTUVTCQkyCS8qIGZ0c19jaGlsZHJlbiwgbmFtZXMgb25seSAqLwotI2RlZmluZSBC
UkVBRAkJMwkvKiBmdHNfcmVhZCAqLwotCi1GVFMgKgotZnRzX29wZW4gKGNoYXIgKmNvbnN0ICph
cmd2LCByZWdpc3RlciBpbnQgb3B0aW9ucywgaW50ICgqY29tcGFyKSAoY29uc3QgRlRTRU5UICoq
LCBjb25zdCBGVFNFTlQgKiopKQotewotICByZWdpc3RlciBGVFMgKnNwOwotICByZWdpc3RlciBG
VFNFTlQgKnAsICpyb290OwotICByZWdpc3RlciBpbnQgbml0ZW1zOwotICBGVFNFTlQgKnBhcmVu
dDsKLSAgRlRTRU5UICp0bXAgPSBOVUxMOwotICBpbnQgbGVuOwotCi0gIC8qIE9wdGlvbnMgY2hl
Y2suICovCi0gIGlmIChvcHRpb25zICYgfkZUU19PUFRJT05NQVNLKQotICAgIHsKLSAgICAgIGVy
cm5vID0gRUlOVkFMOwotICAgICAgcmV0dXJuIChOVUxMKTsKLSAgICB9Ci0KLSAgLyogQWxsb2Nh
dGUvaW5pdGlhbGl6ZSB0aGUgc3RyZWFtICovCi0gIGlmICgoc3AgPSBtYWxsb2MgKCh1X2ludCkg
c2l6ZW9mIChGVFMpKSkgPT0gTlVMTCkKLSAgICByZXR1cm4gKE5VTEwpOwotICBtZW1zZXQgKHNw
LCAwLCBzaXplb2YgKEZUUykpOwotICBzcC0+ZnRzX2NvbXBhciA9IChpbnQgKCopKGNvbnN0IHZv
aWQgKiwgY29uc3Qgdm9pZCAqKSkgY29tcGFyOwotICBzcC0+ZnRzX29wdGlvbnMgPSBvcHRpb25z
OwotCi0gIC8qIExvZ2ljYWwgd2Fsa3MgdHVybiBvbiBOT0NIRElSOyBzeW1ib2xpYyBsaW5rcyBh
cmUgdG9vIGhhcmQuICovCi0gIGlmIChJU1NFVCAoRlRTX0xPR0lDQUwpKQotICAgIFNFVCAoRlRT
X05PQ0hESVIpOwotCi0gIC8qIEFsd2F5cyBzZXQgTk9DSERJUiBmb3IgT1MgbGFja2luZyBmY2hk
aXIgKCkgICovCi0jaWZuZGVmIEhBVkVfRkNIRElSCi0gIFNFVCAoRlRTX05PQ0hESVIpOwotI2Vu
ZGlmCi0gIC8qCi0gICAqIFN0YXJ0IG91dCB3aXRoIDFLIG9mIHBhdGggc3BhY2UsIGFuZCBlbm91
Z2gsIGluIGFueSBjYXNlLAotICAgKiB0byBob2xkIHRoZSB1c2VyJ3MgcGF0aHMuCi0gICAqLwot
I2lmbmRlZiBNQVhQQVRITEVOCi0jIGRlZmluZSBNQVhQQVRITEVOIDEwMjQKLSNlbmRpZgotICBp
ZiAoZnRzX3BhbGxvYyAoc3AsIE1BWCAoZnRzX21heGFyZ2xlbiAoYXJndiksIE1BWFBBVEhMRU4p
KSkKLSAgICBnb3RvIG1lbTE7Ci0KLSAgLyogQWxsb2NhdGUvaW5pdGlhbGl6ZSByb290J3MgcGFy
ZW50LiAqLwotICBpZiAoKHBhcmVudCA9IGZ0c19hbGxvYyAoc3AsICIiLCAwKSkgPT0gTlVMTCkK
LSAgICBnb3RvIG1lbTI7Ci0gIHBhcmVudC0+ZnRzX2xldmVsID0gRlRTX1JPT1RQQVJFTlRMRVZF
TDsKLQotICAvKiBBbGxvY2F0ZS9pbml0aWFsaXplIHJvb3QocykuICovCi0gIGZvciAocm9vdCA9
IE5VTEwsIG5pdGVtcyA9IDA7ICphcmd2OyArK2FyZ3YsICsrbml0ZW1zKQotICAgIHsKLSAgICAg
IC8qIERvbid0IGFsbG93IHplcm8tbGVuZ3RoIHBhdGhzLiAqLwotICAgICAgaWYgKChsZW4gPSBz
dHJsZW4gKCphcmd2KSkgPT0gMCkKLQl7Ci0JICBlcnJubyA9IEVOT0VOVDsKLQkgIGdvdG8gbWVt
MzsKLQl9Ci0KLSAgICAgIHAgPSBmdHNfYWxsb2MgKHNwLCAqYXJndiwgbGVuKTsKLSAgICAgIHAt
PmZ0c19sZXZlbCA9IEZUU19ST09UTEVWRUw7Ci0gICAgICBwLT5mdHNfcGFyZW50ID0gcGFyZW50
OwotICAgICAgcC0+ZnRzX2FjY3BhdGggPSBwLT5mdHNfbmFtZTsKLSAgICAgIHAtPmZ0c19pbmZv
ID0gZnRzX3N0YXQgKHNwLCBOVUxMLCBwLCBJU1NFVCAoRlRTX0NPTUZPTExPVykpOwotCi0gICAg
ICAvKiBDb21tYW5kLWxpbmUgIi4iIGFuZCAiLi4iIGFyZSByZWFsIGRpcmVjdG9yaWVzLiAqLwot
ICAgICAgaWYgKHAtPmZ0c19pbmZvID09IEZUU19ET1QpCi0JcC0+ZnRzX2luZm8gPSBGVFNfRDsK
LQotICAgICAgLyoKLSAgICAgICAqIElmIGNvbXBhcmlzb24gcm91dGluZSBzdXBwbGllZCwgdHJh
dmVyc2UgaW4gc29ydGVkCi0gICAgICAgKiBvcmRlcjsgb3RoZXJ3aXNlIHRyYXZlcnNlIGluIHRo
ZSBvcmRlciBzcGVjaWZpZWQuCi0gICAgICAgKi8KLSAgICAgIGlmIChjb21wYXIpCi0JewotCSAg
cC0+ZnRzX2xpbmsgPSByb290OwotCSAgcm9vdCA9IHA7Ci0JfQotICAgICAgZWxzZQotCXsKLQkg
IHAtPmZ0c19saW5rID0gTlVMTDsKLQkgIGlmIChyb290ID09IE5VTEwpCi0JICAgIHRtcCA9IHJv
b3QgPSBwOwotCSAgZWxzZQotCSAgICB7Ci0JICAgICAgdG1wLT5mdHNfbGluayA9IHA7Ci0JICAg
ICAgdG1wID0gcDsKLQkgICAgfQotCX0KLSAgICB9Ci0gIGlmIChjb21wYXIgJiYgbml0ZW1zID4g
MSkKLSAgICByb290ID0gZnRzX3NvcnQgKHNwLCByb290LCBuaXRlbXMpOwotCi0gIC8qCi0gICAq
IEFsbG9jYXRlIGEgZHVtbXkgcG9pbnRlciBhbmQgbWFrZSBmdHNfcmVhZCB0aGluayB0aGF0IHdl
J3ZlIGp1c3QKLSAgICogZmluaXNoZWQgdGhlIG5vZGUgYmVmb3JlIHRoZSByb290KHMpOyBzZXQg
cC0+ZnRzX2luZm8gdG8gRlRTX0lOSVQKLSAgICogc28gdGhhdCBldmVyeXRoaW5nIGFib3V0IHRo
ZSAiY3VycmVudCIgbm9kZSBpcyBpZ25vcmVkLgotICAgKi8KLSAgaWYgKChzcC0+ZnRzX2N1ciA9
IGZ0c19hbGxvYyAoc3AsICIiLCAwKSkgPT0gTlVMTCkKLSAgICBnb3RvIG1lbTM7Ci0gIHNwLT5m
dHNfY3VyLT5mdHNfbGluayA9IHJvb3Q7Ci0gIHNwLT5mdHNfY3VyLT5mdHNfaW5mbyA9IEZUU19J
TklUOwotCi0gIC8qCi0gICAqIElmIHVzaW5nIGNoZGlyKDIpLCBncmFiIGEgZmlsZSBkZXNjcmlw
dG9yIHBvaW50aW5nIHRvIGRvdCB0byBpbnN1cmUKLSAgICogdGhhdCB3ZSBjYW4gZ2V0IGJhY2sg
aGVyZTsgdGhpcyBjb3VsZCBiZSBhdm9pZGVkIGZvciBzb21lIHBhdGhzLAotICAgKiBidXQgYWxt
b3N0IGNlcnRhaW5seSBub3Qgd29ydGggdGhlIGVmZm9ydC4gIFNsYXNoZXMsIHN5bWJvbGljIGxp
bmtzLAotICAgKiBhbmQgIi4uIiBhcmUgYWxsIGZhaXJseSBuYXN0eSBwcm9ibGVtcy4gIE5vdGUs
IGlmIHdlIGNhbid0IGdldCB0aGUKLSAgICogZGVzY3JpcHRvciB3ZSBydW4gYW55d2F5LCBqdXN0
IG1vcmUgc2xvd2x5LgotICAgKi8KLSAgaWYgKCFJU1NFVCAoRlRTX05PQ0hESVIpICYmIChzcC0+
ZnRzX3JmZCA9IG9wZW4gKCIuIiwgT19SRE9OTFksIDApKSA8IDApCi0gICAgU0VUIChGVFNfTk9D
SERJUik7Ci0KLSAgcmV0dXJuIChzcCk7Ci0KLW1lbTM6ZnRzX2xmcmVlIChyb290KTsKLSAgZnJl
ZSAocGFyZW50KTsKLW1lbTI6ZnJlZSAoc3AtPmZ0c19wYXRoKTsKLW1lbTE6ZnJlZSAoc3ApOwot
ICByZXR1cm4gKE5VTEwpOwotfQotCi1zdGF0aWMgdm9pZAotZnRzX2xvYWQgKEZUUyAqc3AsIHJl
Z2lzdGVyIEZUU0VOVCAqcCkKLXsKLSAgcmVnaXN0ZXIgaW50IGxlbjsKLSAgcmVnaXN0ZXIgY2hh
ciAqY3A7Ci0KLSAgLyoKLSAgICogTG9hZCB0aGUgc3RyZWFtIHN0cnVjdHVyZSBmb3IgdGhlIG5l
eHQgdHJhdmVyc2FsLiAgU2luY2Ugd2UgZG9uJ3QKLSAgICogYWN0dWFsbHkgZW50ZXIgdGhlIGRp
cmVjdG9yeSB1bnRpbCBhZnRlciB0aGUgcHJlb3JkZXIgdmlzaXQsIHNldAotICAgKiB0aGUgZnRz
X2FjY3BhdGggZmllbGQgc3BlY2lhbGx5IHNvIHRoZSBjaGRpciBnZXRzIGRvbmUgdG8gdGhlIHJp
Z2h0Ci0gICAqIHBsYWNlIGFuZCB0aGUgdXNlciBjYW4gYWNjZXNzIHRoZSBmaXJzdCBub2RlLiAg
RnJvbSBmdHNfb3BlbiBpdCdzCi0gICAqIGtub3duIHRoYXQgdGhlIHBhdGggd2lsbCBmaXQuCi0g
ICAqLwotICBsZW4gPSBwLT5mdHNfcGF0aGxlbiA9IHAtPmZ0c19uYW1lbGVuOwotICBtZW1tb3Zl
IChzcC0+ZnRzX3BhdGgsIHAtPmZ0c19uYW1lLCBsZW4gKyAxKTsKLSAgaWYgKChjcCA9IHN0cnJj
aHIgKHAtPmZ0c19uYW1lLCAnLycpKSAmJiAoY3AgIT0gcC0+ZnRzX25hbWUgfHwgY3BbMV0pKQot
ICAgIHsKLSAgICAgIGxlbiA9IHN0cmxlbiAoKytjcCk7Ci0gICAgICBtZW1tb3ZlIChwLT5mdHNf
bmFtZSwgY3AsIGxlbiArIDEpOwotICAgICAgcC0+ZnRzX25hbWVsZW4gPSBsZW47Ci0gICAgfQot
ICBwLT5mdHNfYWNjcGF0aCA9IHAtPmZ0c19wYXRoID0gc3AtPmZ0c19wYXRoOwotICBzcC0+ZnRz
X2RldiA9IHAtPmZ0c19kZXY7Ci19Ci0KLWludAotZnRzX2Nsb3NlIChGVFMgKnNwKQotewotICBy
ZWdpc3RlciBGVFNFTlQgKmZyZWVwLCAqcDsKLSAgaW50IHNhdmVkX2Vycm5vID0gMDsKLSAgaW50
IHJldHZhbCA9IDA7Ci0KLSAgLyoKLSAgICogVGhpcyBzdGlsbCB3b3JrcyBpZiB3ZSBoYXZlbid0
IHJlYWQgYW55dGhpbmcgLS0gdGhlIGR1bW15IHN0cnVjdHVyZQotICAgKiBwb2ludHMgdG8gdGhl
IHJvb3QgbGlzdCwgc28gd2Ugc3RlcCB0aHJvdWdoIHRvIHRoZSBlbmQgb2YgdGhlIHJvb3QKLSAg
ICogbGlzdCB3aGljaCBoYXMgYSB2YWxpZCBwYXJlbnQgcG9pbnRlci4KLSAgICovCi0gIGlmIChz
cC0+ZnRzX2N1cikKLSAgICB7Ci0gICAgICBmb3IgKHAgPSBzcC0+ZnRzX2N1cjsgcC0+ZnRzX2xl
dmVsID49IEZUU19ST09UTEVWRUw7KQotCXsKLQkgIGZyZWVwID0gcDsKLQkgIHAgPSBwLT5mdHNf
bGluayA/IHAtPmZ0c19saW5rIDogcC0+ZnRzX3BhcmVudDsKLQkgIGZyZWUgKGZyZWVwKTsKLQl9
Ci0gICAgICBmcmVlIChwKTsKLSAgICB9Ci0KLSAgLyogRnJlZSB1cCBjaGlsZCBsaW5rZWQgbGlz
dCwgc29ydCBhcnJheSwgcGF0aCBidWZmZXIuICovCi0gIGlmIChzcC0+ZnRzX2NoaWxkKQotICAg
IGZ0c19sZnJlZSAoc3AtPmZ0c19jaGlsZCk7Ci0gIGZyZWUgKHNwLT5mdHNfYXJyYXkpOwotICBm
cmVlIChzcC0+ZnRzX3BhdGgpOwotCi0gIC8qIFJldHVybiB0byBvcmlnaW5hbCBkaXJlY3Rvcnks
IHNhdmUgZXJybm8gaWYgbmVjZXNzYXJ5LiAqLwotICBpZiAoIUlTU0VUIChGVFNfTk9DSERJUikp
Ci0gICAgewotICAgICAgc2F2ZWRfZXJybm8gPSBmY2hkaXIgKHNwLT5mdHNfcmZkKSA/IGVycm5v
IDogMDsKLSAgICAgIGNsb3NlIChzcC0+ZnRzX3JmZCk7Ci0gICAgfQotCi0gIC8qIFNldCBlcnJu
byBhbmQgcmV0dXJuLiAqLwotICBpZiAoIUlTU0VUIChGVFNfTk9DSERJUikgJiYgc2F2ZWRfZXJy
bm8pCi0gICAgewotICAgICAgZXJybm8gPSBzYXZlZF9lcnJubzsKLSAgICAgIHJldHZhbCA9IC0x
OwotICAgIH0KLQotICAvKiBGcmVlIHVwIHRoZSBzdHJlYW0gcG9pbnRlci4gKi8KLSAgZnJlZSAo
c3ApOwotCi0gIHJldHVybiByZXR2YWw7Ci19Ci0KLS8qCi0gKiBTcGVjaWFsIGNhc2UgYSByb290
IG9mICIvIiBzbyB0aGF0IHNsYXNoZXMgYXJlbid0IGFwcGVuZGVkIHdoaWNoIHdvdWxkCi0gKiBj
YXVzZSBwYXRocyB0byBiZSB3cml0dGVuIGFzICIvL2ZvbyIuCi0gKi8KLSNkZWZpbmUgTkFQUEVO
RChwKQkJCQkJCQlcCi0JKHAtPmZ0c19sZXZlbCA9PSBGVFNfUk9PVExFVkVMICYmIHAtPmZ0c19w
YXRobGVuID09IDEgJiYJXAotCSAgICBwLT5mdHNfcGF0aFswXSA9PSAnLycgPyAwIDogcC0+ZnRz
X3BhdGhsZW4pCi0KLUZUU0VOVCAqCi1mdHNfcmVhZCAocmVnaXN0ZXIgRlRTICpzcCkKLXsKLSAg
cmVnaXN0ZXIgRlRTRU5UICpwOwotICByZWdpc3RlciBGVFNFTlQgKnRtcDsKLSAgcmVnaXN0ZXIg
aW50IGluc3RyOwotICByZWdpc3RlciBjaGFyICp0OwotICBpbnQgc2F2ZWRfZXJybm87Ci0KLSAg
LyogSWYgZmluaXNoZWQgb3IgdW5yZWNvdmVyYWJsZSBlcnJvciwgcmV0dXJuIE5VTEwuICovCi0g
IGlmIChzcC0+ZnRzX2N1ciA9PSBOVUxMIHx8IElTU0VUIChGVFNfU1RPUCkpCi0gICAgcmV0dXJu
IChOVUxMKTsKLQotICAvKiBTZXQgY3VycmVudCBub2RlIHBvaW50ZXIuICovCi0gIHAgPSBzcC0+
ZnRzX2N1cjsKLQotICAvKiBTYXZlIGFuZCB6ZXJvIG91dCB1c2VyIGluc3RydWN0aW9ucy4gKi8K
LSAgaW5zdHIgPSBwLT5mdHNfaW5zdHI7Ci0gIHAtPmZ0c19pbnN0ciA9IEZUU19OT0lOU1RSOwot
Ci0gIC8qIEFueSB0eXBlIG9mIGZpbGUgbWF5IGJlIHJlLXZpc2l0ZWQ7IHJlLXN0YXQgYW5kIHJl
LXR1cm4uICovCi0gIGlmIChpbnN0ciA9PSBGVFNfQUdBSU4pCi0gICAgewotICAgICAgcC0+ZnRz
X2luZm8gPSBmdHNfc3RhdCAoc3AsIE5VTEwsIHAsIDApOwotICAgICAgcmV0dXJuIChwKTsKLSAg
ICB9Ci0KLSAgLyoKLSAgICogRm9sbG93aW5nIGEgc3ltbGluayAtLSBTTE5PTkUgdGVzdCBhbGxv
d3MgYXBwbGljYXRpb24gdG8gc2VlCi0gICAqIFNMTk9ORSBhbmQgcmVjb3Zlci4gIElmIGluZGly
ZWN0aW5nIHRocm91Z2ggYSBzeW1saW5rLCBoYXZlCi0gICAqIGtlZXAgYSBwb2ludGVyIHRvIGN1
cnJlbnQgbG9jYXRpb24uICBJZiB1bmFibGUgdG8gZ2V0IHRoYXQKLSAgICogcG9pbnRlciwgZm9s
bG93IGZhaWxzLgotICAgKi8KLSAgaWYgKGluc3RyID09IEZUU19GT0xMT1cgJiYKLSAgICAgIChw
LT5mdHNfaW5mbyA9PSBGVFNfU0wgfHwgcC0+ZnRzX2luZm8gPT0gRlRTX1NMTk9ORSkpCi0gICAg
ewotICAgICAgcC0+ZnRzX2luZm8gPSBmdHNfc3RhdCAoc3AsIE5VTEwsIHAsIDEpOwotICAgICAg
aWYgKHAtPmZ0c19pbmZvID09IEZUU19EICYmICFJU1NFVCAoRlRTX05PQ0hESVIpKQotCXsKLQkg
IGlmICgocC0+ZnRzX3N5bWZkID0gb3BlbiAoIi4iLCBPX1JET05MWSwgMCkpIDwgMCkKLQkgICAg
ewotCSAgICAgIHAtPmZ0c19lcnJubyA9IGVycm5vOwotCSAgICAgIHAtPmZ0c19pbmZvID0gRlRT
X0VSUjsKLQkgICAgfQotCSAgZWxzZQotCSAgICBwLT5mdHNfZmxhZ3MgfD0gRlRTX1NZTUZPTExP
VzsKLQl9Ci0gICAgICByZXR1cm4gKHApOwotICAgIH0KLQotICAvKiBEaXJlY3RvcnkgaW4gcHJl
LW9yZGVyLiAqLwotICBpZiAocC0+ZnRzX2luZm8gPT0gRlRTX0QpCi0gICAgewotICAgICAgLyog
SWYgc2tpcHBlZCBvciBjcm9zc2VkIG1vdW50IHBvaW50LCBkbyBwb3N0LW9yZGVyIHZpc2l0LiAq
LwotICAgICAgaWYgKGluc3RyID09IEZUU19TS0lQIHx8Ci0JICAoSVNTRVQgKEZUU19YREVWKSAm
JiBwLT5mdHNfZGV2ICE9IHNwLT5mdHNfZGV2KSkKLQl7Ci0JICBpZiAocC0+ZnRzX2ZsYWdzICYg
RlRTX1NZTUZPTExPVykKLQkgICAgY2xvc2UgKHAtPmZ0c19zeW1mZCk7Ci0JICBpZiAoc3AtPmZ0
c19jaGlsZCkKLQkgICAgewotCSAgICAgIGZ0c19sZnJlZSAoc3AtPmZ0c19jaGlsZCk7Ci0JICAg
ICAgc3AtPmZ0c19jaGlsZCA9IE5VTEw7Ci0JICAgIH0KLQkgIHAtPmZ0c19pbmZvID0gRlRTX0RQ
OwotCSAgcmV0dXJuIChwKTsKLQl9Ci0KLSAgICAgIC8qIFJlYnVpbGQgaWYgb25seSByZWFkIHRo
ZSBuYW1lcyBhbmQgbm93IHRyYXZlcnNpbmcuICovCi0gICAgICBpZiAoc3AtPmZ0c19jaGlsZCAm
JiBzcC0+ZnRzX29wdGlvbnMgJiBGVFNfTkFNRU9OTFkpCi0JewotCSAgc3AtPmZ0c19vcHRpb25z
ICY9IH5GVFNfTkFNRU9OTFk7Ci0JICBmdHNfbGZyZWUgKHNwLT5mdHNfY2hpbGQpOwotCSAgc3At
PmZ0c19jaGlsZCA9IE5VTEw7Ci0JfQotCi0gICAgICAvKgotICAgICAgICogQ2QgdG8gdGhlIHN1
YmRpcmVjdG9yeS4KLSAgICAgICAqCi0gICAgICAgKiBJZiBoYXZlIGFscmVhZHkgcmVhZCBhbmQg
bm93IGZhaWwgdG8gY2hkaXIsIHdoYWNrIHRoZSBsaXN0Ci0gICAgICAgKiB0byBtYWtlIHRoZSBu
YW1lcyBjb21lIG91dCByaWdodCwgYW5kIHNldCB0aGUgcGFyZW50IGVycm5vCi0gICAgICAgKiBz
byB0aGUgYXBwbGljYXRpb24gd2lsbCBldmVudHVhbGx5IGdldCBhbiBlcnJvciBjb25kaXRpb24u
Ci0gICAgICAgKiBTZXQgdGhlIEZUU19ET05UQ0hESVIgZmxhZyBzbyB0aGF0IHdoZW4gd2UgbG9n
aWNhbGx5IGNoYW5nZQotICAgICAgICogZGlyZWN0b3JpZXMgYmFjayB0byB0aGUgcGFyZW50IHdl
IGRvbid0IGRvIGEgY2hkaXIuCi0gICAgICAgKgotICAgICAgICogSWYgaGF2ZW4ndCByZWFkIGRv
IHNvLiAgSWYgdGhlIHJlYWQgZmFpbHMsIGZ0c19idWlsZCBzZXRzCi0gICAgICAgKiBGVFNfU1RP
UCBvciB0aGUgZnRzX2luZm8gZmllbGQgb2YgdGhlIG5vZGUuCi0gICAgICAgKi8KLSAgICAgIGlm
IChzcC0+ZnRzX2NoaWxkKQotCXsKLQkgIGlmIChDSERJUiAoc3AsIHAtPmZ0c19hY2NwYXRoKSkK
LQkgICAgewotCSAgICAgIHAtPmZ0c19lcnJubyA9IGVycm5vOwotCSAgICAgIHAtPmZ0c19mbGFn
cyB8PSBGVFNfRE9OVENIRElSOwotCSAgICAgIGZvciAocCA9IHNwLT5mdHNfY2hpbGQ7IHA7IHAg
PSBwLT5mdHNfbGluaykKLQkJcC0+ZnRzX2FjY3BhdGggPSBwLT5mdHNfcGFyZW50LT5mdHNfYWNj
cGF0aDsKLQkgICAgfQotCX0KLSAgICAgIGVsc2UgaWYgKChzcC0+ZnRzX2NoaWxkID0gZnRzX2J1
aWxkIChzcCwgQlJFQUQpKSA9PSBOVUxMKQotCXsKLQkgIGlmIChJU1NFVCAoRlRTX1NUT1ApKQot
CSAgICByZXR1cm4gKE5VTEwpOwotCSAgcmV0dXJuIChwKTsKLQl9Ci0gICAgICBwID0gc3AtPmZ0
c19jaGlsZDsKLSAgICAgIHNwLT5mdHNfY2hpbGQgPSBOVUxMOwotICAgICAgZ290byBuYW1lOwot
ICAgIH0KLQotICAvKiBNb3ZlIHRvIHRoZSBuZXh0IG5vZGUgb24gdGhpcyBsZXZlbC4gKi8KLW5l
eHQ6dG1wID0gcDsKLSAgaWYgKChwID0gcC0+ZnRzX2xpbmspKQotICAgIHsKLSAgICAgIGZyZWUg
KHRtcCk7Ci0KLSAgICAgIC8qCi0gICAgICAgKiBJZiByZWFjaGVkIHRoZSB0b3AsIHJldHVybiB0
byB0aGUgb3JpZ2luYWwgZGlyZWN0b3J5LCBhbmQKLSAgICAgICAqIGxvYWQgdGhlIHBhdGhzIGZv
ciB0aGUgbmV4dCByb290LgotICAgICAgICovCi0gICAgICBpZiAocC0+ZnRzX2xldmVsID09IEZU
U19ST09UTEVWRUwpCi0JewotCSAgaWYgKCFJU1NFVCAoRlRTX05PQ0hESVIpICYmIEZDSERJUiAo
c3AsIHNwLT5mdHNfcmZkKSkKLQkgICAgewotCSAgICAgIFNFVCAoRlRTX1NUT1ApOwotCSAgICAg
IHJldHVybiAoTlVMTCk7Ci0JICAgIH0KLQkgIGZ0c19sb2FkIChzcCwgcCk7Ci0JICByZXR1cm4g
KHNwLT5mdHNfY3VyID0gcCk7Ci0JfQotCi0gICAgICAvKgotICAgICAgICogVXNlciBtYXkgaGF2
ZSBjYWxsZWQgZnRzX3NldCBvbiB0aGUgbm9kZS4gIElmIHNraXBwZWQsCi0gICAgICAgKiBpZ25v
cmUuICBJZiBmb2xsb3dlZCwgZ2V0IGEgZmlsZSBkZXNjcmlwdG9yIHNvIHdlIGNhbgotICAgICAg
ICogZ2V0IGJhY2sgaWYgbmVjZXNzYXJ5LgotICAgICAgICovCi0gICAgICBpZiAocC0+ZnRzX2lu
c3RyID09IEZUU19TS0lQKQotCWdvdG8gbmV4dDsKLSAgICAgIGlmIChwLT5mdHNfaW5zdHIgPT0g
RlRTX0ZPTExPVykKLQl7Ci0JICBwLT5mdHNfaW5mbyA9IGZ0c19zdGF0IChzcCwgTlVMTCwgcCwg
MSk7Ci0JICBpZiAocC0+ZnRzX2luZm8gPT0gRlRTX0QgJiYgIUlTU0VUIChGVFNfTk9DSERJUikp
Ci0JICAgIHsKLQkgICAgICBpZiAoKHAtPmZ0c19zeW1mZCA9IG9wZW4gKCIuIiwgT19SRE9OTFks
IDApKSA8IDApCi0JCXsKLQkJICBwLT5mdHNfZXJybm8gPSBlcnJubzsKLQkJICBwLT5mdHNfaW5m
byA9IEZUU19FUlI7Ci0JCX0KLQkgICAgICBlbHNlCi0JCXAtPmZ0c19mbGFncyB8PSBGVFNfU1lN
Rk9MTE9XOwotCSAgICB9Ci0JICBwLT5mdHNfaW5zdHIgPSBGVFNfTk9JTlNUUjsKLQl9Ci0KLSAg
ICBuYW1lOnQgPSBzcC0+ZnRzX3BhdGggKyBOQVBQRU5EIChwLT5mdHNfcGFyZW50KTsKLSAgICAg
ICp0KysgPSAnLyc7Ci0gICAgICBtZW1tb3ZlICh0LCBwLT5mdHNfbmFtZSwgcC0+ZnRzX25hbWVs
ZW4gKyAxKTsKLSAgICAgIHJldHVybiAoc3AtPmZ0c19jdXIgPSBwKTsKLSAgICB9Ci0KLSAgLyog
TW92ZSB1cCB0byB0aGUgcGFyZW50IG5vZGUuICovCi0gIHAgPSB0bXAtPmZ0c19wYXJlbnQ7Ci0g
IGZyZWUgKHRtcCk7Ci0KLSAgaWYgKHAtPmZ0c19sZXZlbCA9PSBGVFNfUk9PVFBBUkVOVExFVkVM
KQotICAgIHsKLSAgICAgIC8qCi0gICAgICAgKiBEb25lOyBmcmVlIGV2ZXJ5dGhpbmcgdXAgYW5k
IHNldCBlcnJubyB0byAwIHNvIHRoZSB1c2VyCi0gICAgICAgKiBjYW4gZGlzdGluZ3Vpc2ggYmV0
d2VlbiBlcnJvciBhbmQgRU9GLgotICAgICAgICovCi0gICAgICBmcmVlIChwKTsKLSAgICAgIGVy
cm5vID0gMDsKLSAgICAgIHJldHVybiAoc3AtPmZ0c19jdXIgPSBOVUxMKTsKLSAgICB9Ci0KLSAg
LyogTnVsIHRlcm1pbmF0ZSB0aGUgcGF0aG5hbWUuICovCi0gIHNwLT5mdHNfcGF0aFtwLT5mdHNf
cGF0aGxlbl0gPSAnXDAnOwotCi0gIC8qCi0gICAqIFJldHVybiB0byB0aGUgcGFyZW50IGRpcmVj
dG9yeS4gIElmIGF0IGEgcm9vdCBub2RlIG9yIGNhbWUgdGhyb3VnaAotICAgKiBhIHN5bWxpbmss
IGdvIGJhY2sgdGhyb3VnaCB0aGUgZmlsZSBkZXNjcmlwdG9yLiAgT3RoZXJ3aXNlLCBjZCB1cAot
ICAgKiBvbmUgZGlyZWN0b3J5LgotICAgKi8KLSAgaWYgKHAtPmZ0c19sZXZlbCA9PSBGVFNfUk9P
VExFVkVMKQotICAgIHsKLSAgICAgIGlmICghSVNTRVQgKEZUU19OT0NIRElSKSAmJiBGQ0hESVIg
KHNwLCBzcC0+ZnRzX3JmZCkpCi0JewotCSAgU0VUIChGVFNfU1RPUCk7Ci0JICByZXR1cm4gKE5V
TEwpOwotCX0KLSAgICB9Ci0gIGVsc2UgaWYgKHAtPmZ0c19mbGFncyAmIEZUU19TWU1GT0xMT1cp
Ci0gICAgewotICAgICAgaWYgKEZDSERJUiAoc3AsIHAtPmZ0c19zeW1mZCkpCi0JewotCSAgc2F2
ZWRfZXJybm8gPSBlcnJubzsKLQkgIGNsb3NlIChwLT5mdHNfc3ltZmQpOwotCSAgZXJybm8gPSBz
YXZlZF9lcnJubzsKLQkgIFNFVCAoRlRTX1NUT1ApOwotCSAgcmV0dXJuIChOVUxMKTsKLQl9Ci0g
ICAgICBjbG9zZSAocC0+ZnRzX3N5bWZkKTsKLSAgICB9Ci0gIGVsc2UgaWYgKCEocC0+ZnRzX2Zs
YWdzICYgRlRTX0RPTlRDSERJUikpCi0gICAgewotICAgICAgaWYgKENIRElSIChzcCwgIi4uIikp
Ci0JewotCSAgU0VUIChGVFNfU1RPUCk7Ci0JICByZXR1cm4gKE5VTEwpOwotCX0KLSAgICB9Ci0g
IHAtPmZ0c19pbmZvID0gcC0+ZnRzX2Vycm5vID8gRlRTX0VSUiA6IEZUU19EUDsKLSAgcmV0dXJu
IChzcC0+ZnRzX2N1ciA9IHApOwotfQotCi0vKgotICogRnRzX3NldCB0YWtlcyB0aGUgc3RyZWFt
IGFzIGFuIGFyZ3VtZW50IGFsdGhvdWdoIGl0J3Mgbm90IHVzZWQgaW4gdGhpcwotICogaW1wbGVt
ZW50YXRpb247IGl0IHdvdWxkIGJlIG5lY2Vzc2FyeSBpZiBhbnlvbmUgd2FudGVkIHRvIGFkZCBn
bG9iYWwKLSAqIHNlbWFudGljcyB0byBmdHMgdXNpbmcgZnRzX3NldC4gIEFuIGVycm9yIHJldHVy
biBpcyBhbGxvd2VkIGZvciBzaW1pbGFyCi0gKiByZWFzb25zLgotICovCi1pbnQKLWZ0c19zZXQg
KEZUUyAqc3AgX0dMX1VOVVNFRF9QQVJBTUVURVIsIEZUU0VOVCAqcCwgaW50IGluc3RyKQotewot
ICBpZiAoaW5zdHIgJiYgaW5zdHIgIT0gRlRTX0FHQUlOICYmIGluc3RyICE9IEZUU19GT0xMT1cg
JiYKLSAgICAgIGluc3RyICE9IEZUU19OT0lOU1RSICYmIGluc3RyICE9IEZUU19TS0lQKQotICAg
IHsKLSAgICAgIGVycm5vID0gRUlOVkFMOwotICAgICAgcmV0dXJuICgxKTsKLSAgICB9Ci0gIHAt
PmZ0c19pbnN0ciA9IGluc3RyOwotICByZXR1cm4gKDApOwotfQotCi1GVFNFTlQgKgotZnRzX2No
aWxkcmVuIChyZWdpc3RlciBGVFMgKnNwLCBpbnQgaW5zdHIpCi17Ci0gIHJlZ2lzdGVyIEZUU0VO
VCAqcDsKLSAgaW50IGZkOwotCi0gIGlmIChpbnN0ciAmJiBpbnN0ciAhPSBGVFNfTkFNRU9OTFkp
Ci0gICAgewotICAgICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgICByZXR1cm4gKE5VTEwpOwotICAg
IH0KLQotICAvKiBTZXQgY3VycmVudCBub2RlIHBvaW50ZXIuICovCi0gIHAgPSBzcC0+ZnRzX2N1
cjsKLQotICAvKgotICAgKiBFcnJubyBzZXQgdG8gMCBzbyB1c2VyIGNhbiBkaXN0aW5ndWlzaCBl
bXB0eSBkaXJlY3RvcnkgZnJvbQotICAgKiBhbiBlcnJvci4KLSAgICovCi0gIGVycm5vID0gMDsK
LQotICAvKiBGYXRhbCBlcnJvcnMgc3RvcCBoZXJlLiAqLwotICBpZiAoSVNTRVQgKEZUU19TVE9Q
KSkKLSAgICByZXR1cm4gKE5VTEwpOwotCi0gIC8qIFJldHVybiBsb2dpY2FsIGhpZXJhcmNoeSBv
ZiB1c2VyJ3MgYXJndW1lbnRzLiAqLwotICBpZiAocC0+ZnRzX2luZm8gPT0gRlRTX0lOSVQpCi0g
ICAgcmV0dXJuIChwLT5mdHNfbGluayk7Ci0KLSAgLyoKLSAgICogSWYgbm90IGEgZGlyZWN0b3J5
IGJlaW5nIHZpc2l0ZWQgaW4gcHJlLW9yZGVyLCBzdG9wIGhlcmUuICBDb3VsZAotICAgKiBhbGxv
dyBGVFNfRE5SLCBhc3N1bWluZyB0aGUgdXNlciBoYXMgZml4ZWQgdGhlIHByb2JsZW0sIGJ1dCB0
aGUKLSAgICogc2FtZSBlZmZlY3QgaXMgYXZhaWxhYmxlIHdpdGggRlRTX0FHQUlOLgotICAgKi8K
LSAgaWYgKHAtPmZ0c19pbmZvICE9IEZUU19EIC8qICYmIHAtPmZ0c19pbmZvICE9IEZUU19ETlIg
Ki8gKQotICAgIHJldHVybiAoTlVMTCk7Ci0KLSAgLyogRnJlZSB1cCBhbnkgcHJldmlvdXMgY2hp
bGQgbGlzdC4gKi8KLSAgaWYgKHNwLT5mdHNfY2hpbGQpCi0gICAgZnRzX2xmcmVlIChzcC0+ZnRz
X2NoaWxkKTsKLQotICBpZiAoaW5zdHIgPT0gRlRTX05BTUVPTkxZKQotICAgIHsKLSAgICAgIHNw
LT5mdHNfb3B0aW9ucyB8PSBGVFNfTkFNRU9OTFk7Ci0gICAgICBpbnN0ciA9IEJOQU1FUzsKLSAg
ICB9Ci0gIGVsc2UKLSAgICBpbnN0ciA9IEJDSElMRDsKLQotICAvKgotICAgKiBJZiB1c2luZyBj
aGRpciBvbiBhIHJlbGF0aXZlIHBhdGggYW5kIGNhbGxlZCBCRUZPUkUgZnRzX3JlYWQgZG9lcwot
ICAgKiBpdHMgY2hkaXIgdG8gdGhlIHJvb3Qgb2YgYSB0cmF2ZXJzYWwsIHdlIGNhbiBsb3NlIC0t
IHdlIG5lZWQgdG8KLSAgICogY2hkaXIgaW50byB0aGUgc3ViZGlyZWN0b3J5LCBhbmQgd2UgZG9u
J3Qga25vdyB3aGVyZSB0aGUgY3VycmVudAotICAgKiBkaXJlY3RvcnkgaXMsIHNvIHdlIGNhbid0
IGdldCBiYWNrIHNvIHRoYXQgdGhlIHVwY29taW5nIGNoZGlyIGJ5Ci0gICAqIGZ0c19yZWFkIHdp
bGwgd29yay4KLSAgICovCi0gIGlmIChwLT5mdHNfbGV2ZWwgIT0gRlRTX1JPT1RMRVZFTCB8fCBw
LT5mdHNfYWNjcGF0aFswXSA9PSAnLycgfHwKLSAgICAgIElTU0VUIChGVFNfTk9DSERJUikpCi0g
ICAgcmV0dXJuIChzcC0+ZnRzX2NoaWxkID0gZnRzX2J1aWxkIChzcCwgaW5zdHIpKTsKLQotICBp
ZiAoKGZkID0gb3BlbiAoIi4iLCBPX1JET05MWSwgMCkpIDwgMCkKLSAgICByZXR1cm4gKE5VTEwp
OwotICBzcC0+ZnRzX2NoaWxkID0gZnRzX2J1aWxkIChzcCwgaW5zdHIpOwotICBpZiAoZmNoZGly
IChmZCkpCi0gICAgcmV0dXJuIChOVUxMKTsKLSAgY2xvc2UgKGZkKTsKLSAgcmV0dXJuIChzcC0+
ZnRzX2NoaWxkKTsKLX0KLQotLyoKLSAqIFRoaXMgaXMgdGhlIHRyaWNreSBwYXJ0IC0tIGRvIG5v
dCBjYXN1YWxseSBjaGFuZ2UgKmFueXRoaW5nKiBpbiBoZXJlLiAgVGhlCi0gKiBpZGVhIGlzIHRv
IGJ1aWxkIHRoZSBsaW5rZWQgbGlzdCBvZiBlbnRyaWVzIHRoYXQgYXJlIHVzZWQgYnkgZnRzX2No
aWxkcmVuCi0gKiBhbmQgZnRzX3JlYWQuICBUaGVyZSBhcmUgbG90cyBvZiBzcGVjaWFsIGNhc2Vz
LgotICoKLSAqIFRoZSByZWFsIHNsb3dkb3duIGluIHdhbGtpbmcgdGhlIHRyZWUgaXMgdGhlIHN0
YXQgY2FsbHMuICBJZiBGVFNfTk9TVEFUIGlzCi0gKiBzZXQgYW5kIGl0J3MgYSBwaHlzaWNhbCB3
YWxrIChzbyB0aGF0IHN5bWJvbGljIGxpbmtzIGNhbid0IGJlIGRpcmVjdG9yaWVzKSwKLSAqIHdl
IGNhbiBkbyB0aGluZ3MgcXVpY2tseS4gIEZpcnN0LCBpZiBpdCdzIGEgNC40QlNEIGZpbGUgc3lz
dGVtLCB0aGUgdHlwZQotICogb2YgdGhlIGZpbGUgaXMgaW4gdGhlIGRpcmVjdG9yeSBlbnRyeS4g
IE90aGVyd2lzZSwgd2UgYXNzdW1lIHRoYXQgdGhlIG51bWJlcgotICogb2Ygc3ViZGlyZWN0b3Jp
ZXMgaW4gYSBub2RlIGlzIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgbGlua3MgdG8gdGhlIHBhcmVu
dC4KLSAqIFRoZSBmb3JtZXIgc2tpcHMgYWxsIHN0YXQgY2FsbHMuICBUaGUgbGF0dGVyIHNraXBz
IHN0YXQgY2FsbHMgaW4gYW55IGxlYWYKLSAqIGRpcmVjdG9yaWVzIGFuZCBmb3IgYW55IGZpbGVz
IGFmdGVyIHRoZSBzdWJkaXJlY3RvcmllcyBpbiB0aGUgZGlyZWN0b3J5IGhhdmUKLSAqIGJlZW4g
Zm91bmQsIGN1dHRpbmcgdGhlIHN0YXQgY2FsbHMgYnkgYWJvdXQgMi8zLgotICovCi1zdGF0aWMg
RlRTRU5UICoKLWZ0c19idWlsZCAocmVnaXN0ZXIgRlRTICpzcCwgaW50IHR5cGUpCi17Ci0gIHN0
cnVjdCBkaXJlbnQgKmRwOwotICByZWdpc3RlciBGVFNFTlQgKnAsICpoZWFkOwotICByZWdpc3Rl
ciBpbnQgbml0ZW1zOwotICBGVFNFTlQgKmN1ciwgKnRhaWw7Ci0gIERJUiAqZGlycDsKLSAgdm9p
ZCAqYWRqYWRkcjsKLSAgaW50IGNkZXJybm8sIGRlc2NlbmQsIGxlbiwgbGV2ZWwsIG1heGxlbiwg
bmxpbmtzLCBzYXZlZF9lcnJubzsKLSAgY2hhciAqY3AgPSBOVUxMOwotI2lmZGVmIEhBVkVfX19P
UEVORElSMgotICBpbnQgb2ZsYWc7Ci0jZW5kaWYKLQotICAvKiBTZXQgY3VycmVudCBub2RlIHBv
aW50ZXIuICovCi0gIGN1ciA9IHNwLT5mdHNfY3VyOwotCi0gIC8qCi0gICAqIE9wZW4gdGhlIGRp
cmVjdG9yeSBmb3IgcmVhZGluZy4gIElmIHRoaXMgZmFpbHMsIHdlJ3JlIGRvbmUuCi0gICAqIElm
IGJlaW5nIGNhbGxlZCBmcm9tIGZ0c19yZWFkLCBzZXQgdGhlIGZ0c19pbmZvIGZpZWxkLgotICAg
Ki8KLSNpZiBkZWZpbmVkIEhBVkVfX19PUEVORElSMgotICBvZmxhZyA9IERURl9OT0RVUDsKLQot
IyBpZmRlZiBEVEZfUkVXSU5ECi0gIG9mbGFnIHw9IERURl9SRVdJTkQ7Ci0jIGVuZGlmCi0KLSMg
aWZkZWYgRFRGX0hJREVXCi0gIGlmICghSVNTRVQgKEZUU19XSElURU9VVCkpCi0gICAgb2ZsYWcg
fD0gRFRGX0hJREVXOwotIyBlbmRpZiAvKiBEVEZfSElERVcgKi8KLQotICBkaXJwID0gX19vcGVu
ZGlyMiAoY3VyLT5mdHNfYWNjcGF0aCwgb2ZsYWcpOwotI2Vsc2UgLyogIUhBVkVfX19PUEVORElS
MiAqLwotICBkaXJwID0gb3BlbmRpciAoY3VyLT5mdHNfYWNjcGF0aCk7Ci0jZW5kaWYgLyogIUhB
VkVfX19PUEVORElSMiAqLwotCi0gIGlmIChkaXJwID09IE5VTEwpCi0gICAgewotICAgICAgaWYg
KHR5cGUgPT0gQlJFQUQpCi0JewotCSAgY3VyLT5mdHNfaW5mbyA9IEZUU19ETlI7Ci0JICBjdXIt
PmZ0c19lcnJubyA9IGVycm5vOwotCX0KLSAgICAgIHJldHVybiAoTlVMTCk7Ci0gICAgfQotCi0g
IC8qCi0gICAqIE5saW5rcyBpcyB0aGUgbnVtYmVyIG9mIHBvc3NpYmxlIGVudHJpZXMgb2YgdHlw
ZSBkaXJlY3RvcnkgaW4gdGhlCi0gICAqIGRpcmVjdG9yeSBpZiB3ZSdyZSBjaGVhdGluZyBvbiBz
dGF0IGNhbGxzLCAwIGlmIHdlJ3JlIG5vdCBkb2luZwotICAgKiBhbnkgc3RhdCBjYWxscyBhdCBh
bGwsIC0xIGlmIHdlJ3JlIGRvaW5nIHN0YXRzIG9uIGV2ZXJ5dGhpbmcuCi0gICAqLwotICBpZiAo
dHlwZSA9PSBCTkFNRVMpCi0gICAgbmxpbmtzID0gMDsKLSAgZWxzZSBpZiAoSVNTRVQgKEZUU19O
T1NUQVQpICYmIElTU0VUIChGVFNfUEhZU0lDQUwpKQotICAgIG5saW5rcyA9IGN1ci0+ZnRzX25s
aW5rIC0gKElTU0VUIChGVFNfU0VFRE9UKSA/IDAgOiAyKTsKLSAgZWxzZQotICAgIG5saW5rcyA9
IC0xOwotCi0gIC8qCi0gICAqIElmIHdlJ3JlIGdvaW5nIHRvIG5lZWQgdG8gc3RhdCBhbnl0aGlu
ZyBvciB3ZSB3YW50IHRvIGRlc2NlbmQKLSAgICogYW5kIHN0YXkgaW4gdGhlIGRpcmVjdG9yeSwg
Y2hkaXIuICBJZiB0aGlzIGZhaWxzIHdlIGtlZXAgZ29pbmcsCi0gICAqIGJ1dCBzZXQgYSBmbGFn
IHNvIHdlIGRvbid0IGNoZGlyIGFmdGVyIHRoZSBwb3N0LW9yZGVyIHZpc2l0LgotICAgKiBXZSB3
b24ndCBiZSBhYmxlIHRvIHN0YXQgYW55dGhpbmcsIGJ1dCB3ZSBjYW4gc3RpbGwgcmV0dXJuIHRo
ZQotICAgKiBuYW1lcyB0aGVtc2VsdmVzLiAgTm90ZSwgdGhhdCBzaW5jZSBmdHNfcmVhZCB3b24n
dCBiZSBhYmxlIHRvCi0gICAqIGNoZGlyIGludG8gdGhlIGRpcmVjdG9yeSwgaXQgd2lsbCBoYXZl
IHRvIHJldHVybiBkaWZmZXJlbnQgcGF0aAotICAgKiBuYW1lcyB0aGFuIGJlZm9yZSwgaS5lLiAi
YS9iIiBpbnN0ZWFkIG9mICJiIi4gIFNpbmNlIHRoZSBub2RlCi0gICAqIGhhcyBhbHJlYWR5IGJl
ZW4gdmlzaXRlZCBpbiBwcmUtb3JkZXIsIGhhdmUgdG8gd2FpdCB1bnRpbCB0aGUKLSAgICogcG9z
dC1vcmRlciB2aXNpdCB0byByZXR1cm4gdGhlIGVycm9yLiAgVGhlcmUgaXMgYSBzcGVjaWFsIGNh
c2UKLSAgICogaGVyZSwgaWYgdGhlcmUgd2FzIG5vdGhpbmcgdG8gc3RhdCB0aGVuIGl0J3Mgbm90
IGFuIGVycm9yIHRvCi0gICAqIG5vdCBiZSBhYmxlIHRvIHN0YXQuICBUaGlzIGlzIGFsbCBmYWly
bHkgbmFzdHkuICBJZiBhIHByb2dyYW0KLSAgICogbmVlZGVkIHNvcnRlZCBlbnRyaWVzIG9yIHN0
YXQgaW5mb3JtYXRpb24sIHRoZXkgaGFkIGJldHRlciBiZQotICAgKiBjaGVja2luZyBGVFNfTlMg
b24gdGhlIHJldHVybmVkIG5vZGVzLgotICAgKi8KLSAgY2RlcnJubyA9IDA7Ci0gIGlmIChubGlu
a3MgfHwgdHlwZSA9PSBCUkVBRCkKLSAgICB7Ci0gICAgICBpZiAoRkNIRElSIChzcCwgZGlyZmQg
KGRpcnApKSkKLQl7Ci0JICBpZiAobmxpbmtzICYmIHR5cGUgPT0gQlJFQUQpCi0JICAgIGN1ci0+
ZnRzX2Vycm5vID0gZXJybm87Ci0JICBjdXItPmZ0c19mbGFncyB8PSBGVFNfRE9OVENIRElSOwot
CSAgZGVzY2VuZCA9IDA7Ci0JICBjZGVycm5vID0gZXJybm87Ci0JfQotICAgICAgZWxzZQotCWRl
c2NlbmQgPSAxOwotICAgIH0KLSAgZWxzZQotICAgIGRlc2NlbmQgPSAwOwotCi0gIC8qCi0gICAq
IEZpZ3VyZSBvdXQgdGhlIG1heCBmaWxlIG5hbWUgbGVuZ3RoIHRoYXQgY2FuIGJlIHN0b3JlZCBp
biB0aGUKLSAgICogY3VycmVudCBwYXRoIC0tIHRoZSBpbm5lciBsb29wIGFsbG9jYXRlcyBtb3Jl
IHBhdGggYXMgbmVjZXNzYXJ5LgotICAgKiBXZSByZWFsbHkgd291bGRuJ3QgaGF2ZSB0byBkbyB0
aGUgbWF4bGVuIGNhbGN1bGF0aW9ucyBoZXJlLCB3ZQotICAgKiBjb3VsZCBkbyB0aGVtIGluIGZ0
c19yZWFkIGJlZm9yZSByZXR1cm5pbmcgdGhlIHBhdGgsIGJ1dCBpdCdzIGEKLSAgICogbG90IGVh
c2llciBoZXJlIHNpbmNlIHRoZSBsZW5ndGggaXMgcGFydCBvZiB0aGUgZGlyZW50IHN0cnVjdHVy
ZS4KLSAgICoKLSAgICogSWYgbm90IGNoYW5naW5nIGRpcmVjdG9yaWVzIHNldCBhIHBvaW50ZXIg
c28gdGhhdCBjYW4ganVzdCBhcHBlbmQKLSAgICogZWFjaCBuZXcgbmFtZSBpbnRvIHRoZSBwYXRo
LgotICAgKi8KLSAgbWF4bGVuID0gc3AtPmZ0c19wYXRobGVuIC0gY3VyLT5mdHNfcGF0aGxlbiAt
IDE7Ci0gIGxlbiA9IE5BUFBFTkQgKGN1cik7Ci0gIGlmIChJU1NFVCAoRlRTX05PQ0hESVIpKQot
ICAgIHsKLSAgICAgIGNwID0gc3AtPmZ0c19wYXRoICsgbGVuOwotICAgICAgKmNwKysgPSAnLyc7
Ci0gICAgfQotCi0gIGxldmVsID0gY3VyLT5mdHNfbGV2ZWwgKyAxOwotCi0gIC8qIFJlYWQgdGhl
IGRpcmVjdG9yeSwgYXR0YWNoaW5nIGVhY2ggZW50cnkgdG8gdGhlIGBsaW5rJyBwb2ludGVyLiAq
LwotICBhZGphZGRyID0gTlVMTDsKLSAgaGVhZCA9IHRhaWwgPSBOVUxMOwotICBuaXRlbXMgPSAw
OwotICB3aGlsZSAoKGRwID0gcmVhZGRpciAoZGlycCkpKQotICAgIHsKLSAgICAgIGludCBuYW1s
ZW47Ci0KLSAgICAgIGlmICghSVNTRVQgKEZUU19TRUVET1QpICYmIElTRE9UIChkcC0+ZF9uYW1l
KSkKLQljb250aW51ZTsKLQotICAgICAgbmFtbGVuID0gc3RybGVuIChkcC0+ZF9uYW1lKSArIDE7
Ci0gICAgICBpZiAoKHAgPSBmdHNfYWxsb2MgKHNwLCBkcC0+ZF9uYW1lLCBuYW1sZW4pKSA9PSBO
VUxMKQotCWdvdG8gbWVtMTsKLSAgICAgIGlmIChuYW1sZW4gPiBtYXhsZW4pCi0JewotCSAgaWYg
KGZ0c19wYWxsb2MgKHNwLCAoc2l6ZV90KSBuYW1sZW4pKQotCSAgICB7Ci0JICAgICAgLyoKLQkg
ICAgICAgKiBObyBtb3JlIG1lbW9yeSBmb3IgcGF0aCBvciBzdHJ1Y3R1cmVzLiAgU2F2ZQotCSAg
ICAgICAqIGVycm5vLCBmcmVlIHVwIHRoZSBjdXJyZW50IHN0cnVjdHVyZSBhbmQgdGhlCi0JICAg
ICAgICogc3RydWN0dXJlcyBhbHJlYWR5IGFsbG9jYXRlZC4KLQkgICAgICAgKi8KLQkgICAgbWVt
MTpzYXZlZF9lcnJubyA9IGVycm5vOwotCSAgICAgIGZyZWUgKHApOwotCSAgICAgIGZ0c19sZnJl
ZSAoaGVhZCk7Ci0JICAgICAgY2xvc2VkaXIgKGRpcnApOwotCSAgICAgIGVycm5vID0gc2F2ZWRf
ZXJybm87Ci0JICAgICAgY3VyLT5mdHNfaW5mbyA9IEZUU19FUlI7Ci0JICAgICAgU0VUIChGVFNf
U1RPUCk7Ci0JICAgICAgcmV0dXJuIChOVUxMKTsKLQkgICAgfQotCSAgYWRqYWRkciA9IHNwLT5m
dHNfcGF0aDsKLQkgIG1heGxlbiA9IHNwLT5mdHNfcGF0aGxlbiAtIHNwLT5mdHNfY3VyLT5mdHNf
cGF0aGxlbiAtIDE7Ci0JfQotCi0gICAgICBwLT5mdHNfcGF0aGxlbiA9IGxlbiArIG5hbWxlbiAr
IDE7Ci0gICAgICBwLT5mdHNfcGFyZW50ID0gc3AtPmZ0c19jdXI7Ci0gICAgICBwLT5mdHNfbGV2
ZWwgPSBsZXZlbDsKLQotICAgICAgaWYgKGNkZXJybm8pCi0JewotCSAgaWYgKG5saW5rcykKLQkg
ICAgewotCSAgICAgIHAtPmZ0c19pbmZvID0gRlRTX05TOwotCSAgICAgIHAtPmZ0c19lcnJubyA9
IGNkZXJybm87Ci0JICAgIH0KLQkgIGVsc2UKLQkgICAgcC0+ZnRzX2luZm8gPSBGVFNfTlNPSzsK
LQkgIHAtPmZ0c19hY2NwYXRoID0gY3VyLT5mdHNfYWNjcGF0aDsKLQl9Ci0gICAgICBlbHNlIGlm
IChubGlua3MgPT0gMAotI2lmIGRlZmluZWQgRFRfRElSICYmIGRlZmluZWQgX0RJUkVOVF9IQVZF
X0RfVFlQRQotCSAgICAgICB8fCAobmxpbmtzID4gMCAmJgotCQkgICBkcC0+ZF90eXBlICE9IERU
X0RJUiAmJiBkcC0+ZF90eXBlICE9IERUX1VOS05PV04pCi0jZW5kaWYKLQkpCi0JewotCSAgcC0+
ZnRzX2FjY3BhdGggPSBJU1NFVCAoRlRTX05PQ0hESVIpID8gcC0+ZnRzX3BhdGggOiBwLT5mdHNf
bmFtZTsKLQkgIHAtPmZ0c19pbmZvID0gRlRTX05TT0s7Ci0JfQotICAgICAgZWxzZQotCXsKLQkg
IC8qIEJ1aWxkIGEgZmlsZSBuYW1lIGZvciBmdHNfc3RhdCB0byBzdGF0LiAqLwotCSAgaWYgKElT
U0VUIChGVFNfTk9DSERJUikpCi0JICAgIHsKLQkgICAgICBwLT5mdHNfYWNjcGF0aCA9IHAtPmZ0
c19wYXRoOwotCSAgICAgIG1lbW1vdmUgKHAtPmZ0c19uYW1lLCBjcCwgcC0+ZnRzX25hbWVsZW4g
KyAxKTsKLQkgICAgfQotCSAgZWxzZQotCSAgICBwLT5mdHNfYWNjcGF0aCA9IHAtPmZ0c19uYW1l
OwotCSAgLyogU3RhdCBpdC4gKi8KLQkgIHAtPmZ0c19pbmZvID0gZnRzX3N0YXQgKHNwLCBkcCwg
cCwgMCk7Ci0KLQkgIC8qIERlY3JlbWVudCBsaW5rIGNvdW50IGlmIGFwcGxpY2FibGUuICovCi0J
ICBpZiAobmxpbmtzID4gMCAmJiAocC0+ZnRzX2luZm8gPT0gRlRTX0QgfHwKLQkJCSAgICAgcC0+
ZnRzX2luZm8gPT0gRlRTX0RDIHx8IHAtPmZ0c19pbmZvID09IEZUU19ET1QpKQotCSAgICAtLW5s
aW5rczsKLQl9Ci0KLSAgICAgIC8qIFdlIHdhbGsgaW4gZGlyZWN0b3J5IG9yZGVyIHNvICJscyAt
ZiIgZG9lc24ndCBnZXQgdXBzZXQuICovCi0gICAgICBwLT5mdHNfbGluayA9IE5VTEw7Ci0gICAg
ICBpZiAoaGVhZCA9PSBOVUxMKQotCWhlYWQgPSB0YWlsID0gcDsKLSAgICAgIGVsc2UKLQl7Ci0J
ICB0YWlsLT5mdHNfbGluayA9IHA7Ci0JICB0YWlsID0gcDsKLQl9Ci0gICAgICArK25pdGVtczsK
LSAgICB9Ci0gIGNsb3NlZGlyIChkaXJwKTsKLQotICAvKgotICAgKiBJZiBoYWQgdG8gcmVhbGxv
YyB0aGUgcGF0aCwgYWRqdXN0IHRoZSBhZGRyZXNzZXMgZm9yIHRoZSByZXN0Ci0gICAqIG9mIHRo
ZSB0cmVlLgotICAgKi8KLSAgaWYgKGFkamFkZHIpCi0gICAgZnRzX3BhZGp1c3QgKHNwLCBhZGph
ZGRyKTsKLQotICAvKgotICAgKiBJZiBub3QgY2hhbmdpbmcgZGlyZWN0b3JpZXMsIHJlc2V0IHRo
ZSBwYXRoIGJhY2sgdG8gb3JpZ2luYWwKLSAgICogc3RhdGUuCi0gICAqLwotICBpZiAoSVNTRVQg
KEZUU19OT0NIRElSKSkKLSAgICB7Ci0gICAgICBpZiAoY3AgLSAxID4gc3AtPmZ0c19wYXRoKQot
CS0tY3A7Ci0gICAgICAqY3AgPSAnXDAnOwotICAgIH0KLQotICAvKgotICAgKiBJZiBkZXNjZW5k
ZWQgYWZ0ZXIgY2FsbGVkIGZyb20gZnRzX2NoaWxkcmVuIG9yIGFmdGVyIGNhbGxlZCBmcm9tCi0g
ICAqIGZ0c19yZWFkIGFuZCBub3RoaW5nIGZvdW5kLCBnZXQgYmFjay4gIEF0IHRoZSByb290IGxl
dmVsIHdlIHVzZQotICAgKiB0aGUgc2F2ZWQgZmQ7IGlmIG9uZSBvZiBmdHNfb3BlbigpJ3MgYXJn
dW1lbnRzIGlzIGEgcmVsYXRpdmUgcGF0aAotICAgKiB0byBhbiBlbXB0eSBkaXJlY3RvcnksIHdl
IHdpbmQgdXAgaGVyZSB3aXRoIG5vIG90aGVyIHdheSBiYWNrLiAgSWYKLSAgICogY2FuJ3QgZ2V0
IGJhY2ssIHdlJ3JlIGRvbmUuCi0gICAqLwotICBpZiAoZGVzY2VuZCAmJiAodHlwZSA9PSBCQ0hJ
TEQgfHwgIW5pdGVtcykgJiYKLSAgICAgIChjdXItPmZ0c19sZXZlbCA9PSBGVFNfUk9PVExFVkVM
ID8KLSAgICAgICBGQ0hESVIgKHNwLCBzcC0+ZnRzX3JmZCkgOiBDSERJUiAoc3AsICIuLiIpKSkK
LSAgICB7Ci0gICAgICBjdXItPmZ0c19pbmZvID0gRlRTX0VSUjsKLSAgICAgIFNFVCAoRlRTX1NU
T1ApOwotICAgICAgcmV0dXJuIChOVUxMKTsKLSAgICB9Ci0KLSAgLyogSWYgZGlkbid0IGZpbmQg
YW55dGhpbmcsIHJldHVybiBOVUxMLiAqLwotICBpZiAoIW5pdGVtcykKLSAgICB7Ci0gICAgICBp
ZiAodHlwZSA9PSBCUkVBRCkKLQljdXItPmZ0c19pbmZvID0gRlRTX0RQOwotICAgICAgcmV0dXJu
IChOVUxMKTsKLSAgICB9Ci0KLSAgLyogU29ydCB0aGUgZW50cmllcy4gKi8KLSAgaWYgKHNwLT5m
dHNfY29tcGFyICYmIG5pdGVtcyA+IDEpCi0gICAgaGVhZCA9IGZ0c19zb3J0IChzcCwgaGVhZCwg
bml0ZW1zKTsKLSAgcmV0dXJuIChoZWFkKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIHNob3J0Ci1m
dHNfc3RhdCAoRlRTICpzcCwgc3RydWN0IGRpcmVudCAqZHAsIHJlZ2lzdGVyIEZUU0VOVCAqcCwg
aW50IGZvbGxvdykKLXsKLSAgcmVnaXN0ZXIgRlRTRU5UICp0OwotICByZWdpc3RlciBkZXZfdCBk
ZXY7Ci0gIHJlZ2lzdGVyIGlub190IGlubzsKLSAgc3RydWN0IHN0YXQgKnNicCwgc2I7Ci0gIGlu
dCBzYXZlZF9lcnJubzsKLQotICAvKiBJZiB1c2VyIG5lZWRzIHN0YXQgaW5mbywgc3RhdCBidWZm
ZXIgYWxyZWFkeSBhbGxvY2F0ZWQuICovCi0gIHNicCA9IElTU0VUIChGVFNfTk9TVEFUKSA/ICZz
YiA6IHAtPmZ0c19zdGF0cDsKLQotI2lmIGRlZmluZWQgRFRfV0hUICYmIGRlZmluZWQgU19JRldI
VAotICAvKgotICAgKiBXaGl0ZWQtb3V0IGZpbGVzIGRvbid0IHJlYWxseSBleGlzdC4gIEhvd2V2
ZXIsIHRoZXJlJ3Mgc3RhdCgyKSBmaWxlCi0gICAqIG1hc2sgZm9yIHRoZW0sIHNvIHdlIHNldCBp
dCBzbyB0aGF0IHByb2dyYW1zIChpLmUuLCBmaW5kKSBkb24ndCBoYXZlCi0gICAqIHRvIHRlc3Qg
RlRTX1cgc2VwYXJhdGVseSBmcm9tIG90aGVyIGZpbGUgdHlwZXMuCi0gICAqLwotICBpZiAoZHAg
IT0gTlVMTCAmJiBkcC0+ZF90eXBlID09IERUX1dIVCkKLSAgICB7Ci0gICAgICBtZW1zZXQgKHNi
cCwgMCwgc2l6ZW9mIChzdHJ1Y3Qgc3RhdCkpOwotICAgICAgc2JwLT5zdF9tb2RlID0gU19JRldI
VDsKLSAgICAgIHJldHVybiAoRlRTX1cpOwotICAgIH0KLSNlbmRpZgotCi0gIC8qCi0gICAqIElm
IGRvaW5nIGEgbG9naWNhbCB3YWxrLCBvciBhcHBsaWNhdGlvbiByZXF1ZXN0ZWQgRlRTX0ZPTExP
VywgZG8KLSAgICogYSBzdGF0KDIpLiAgSWYgdGhhdCBmYWlscywgY2hlY2sgZm9yIGEgbm9uLWV4
aXN0ZW50IHN5bWxpbmsuICBJZgotICAgKiBmYWlsLCBzZXQgdGhlIGVycm5vIGZyb20gdGhlIHN0
YXQgY2FsbC4KLSAgICovCi0gIGlmIChJU1NFVCAoRlRTX0xPR0lDQUwpIHx8IGZvbGxvdykKLSAg
ICB7Ci0gICAgICBpZiAoc3RhdCAocC0+ZnRzX2FjY3BhdGgsIHNicCkpCi0JewotCSAgc2F2ZWRf
ZXJybm8gPSBlcnJubzsKLQkgIGlmICghbHN0YXQgKHAtPmZ0c19hY2NwYXRoLCBzYnApKQotCSAg
ICB7Ci0JICAgICAgZXJybm8gPSAwOwotCSAgICAgIHJldHVybiAoRlRTX1NMTk9ORSk7Ci0JICAg
IH0KLQkgIHAtPmZ0c19lcnJubyA9IHNhdmVkX2Vycm5vOwotCSAgZ290byBlcnI7Ci0JfQotICAg
IH0KLSAgZWxzZSBpZiAobHN0YXQgKHAtPmZ0c19hY2NwYXRoLCBzYnApKQotICAgIHsKLSAgICAg
IHAtPmZ0c19lcnJubyA9IGVycm5vOwotICAgIGVycjptZW1zZXQgKHNicCwgMCwgc2l6ZW9mIChz
dHJ1Y3Qgc3RhdCkpOwotICAgICAgcmV0dXJuIChGVFNfTlMpOwotICAgIH0KLQotICBpZiAoU19J
U0RJUiAoc2JwLT5zdF9tb2RlKSkKLSAgICB7Ci0gICAgICAvKgotICAgICAgICogU2V0IHRoZSBk
ZXZpY2UvaW5vZGUuICBVc2VkIHRvIGZpbmQgY3ljbGVzIGFuZCBjaGVjayBmb3IKLSAgICAgICAq
IGNyb3NzaW5nIG1vdW50IHBvaW50cy4gIEFsc28gcmVtZW1iZXIgdGhlIGxpbmsgY291bnQsIHVz
ZWQKLSAgICAgICAqIGluIGZ0c19idWlsZCB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIHN0YXQgY2Fs
bHMuICBJdCBpcwotICAgICAgICogdW5kZXJzdG9vZCB0aGF0IHRoZXNlIGZpZWxkcyBhcmUgb25s
eSByZWZlcmVuY2VkIGlmIGZ0c19pbmZvCi0gICAgICAgKiBpcyBzZXQgdG8gRlRTX0QuCi0gICAg
ICAgKi8KLSAgICAgIGRldiA9IHAtPmZ0c19kZXYgPSBzYnAtPnN0X2RldjsKLSAgICAgIGlubyA9
IHAtPmZ0c19pbm8gPSBzYnAtPnN0X2lubzsKLSAgICAgIHAtPmZ0c19ubGluayA9IHNicC0+c3Rf
bmxpbms7Ci0KLSAgICAgIGlmIChJU0RPVCAocC0+ZnRzX25hbWUpKQotCXJldHVybiAoRlRTX0RP
VCk7Ci0KLSAgICAgIC8qCi0gICAgICAgKiBDeWNsZSBkZXRlY3Rpb24gaXMgZG9uZSBieSBicnV0
ZSBmb3JjZSB3aGVuIHRoZSBkaXJlY3RvcnkKLSAgICAgICAqIGlzIGZpcnN0IGVuY291bnRlcmVk
LiAgSWYgdGhlIHRyZWUgZ2V0cyBkZWVwIGVub3VnaCBvciB0aGUKLSAgICAgICAqIG51bWJlciBv
ZiBzeW1ib2xpYyBsaW5rcyB0byBkaXJlY3RvcmllcyBpcyBoaWdoIGVub3VnaCwKLSAgICAgICAq
IHNvbWV0aGluZyBmYXN0ZXIgbWlnaHQgYmUgd29ydGh3aGlsZS4KLSAgICAgICAqLwotICAgICAg
Zm9yICh0ID0gcC0+ZnRzX3BhcmVudDsKLQkgICB0LT5mdHNfbGV2ZWwgPj0gRlRTX1JPT1RMRVZF
TDsgdCA9IHQtPmZ0c19wYXJlbnQpCi0JaWYgKGlubyA9PSB0LT5mdHNfaW5vICYmIGRldiA9PSB0
LT5mdHNfZGV2KQotCSAgewotCSAgICBwLT5mdHNfY3ljbGUgPSB0OwotCSAgICByZXR1cm4gKEZU
U19EQyk7Ci0JICB9Ci0gICAgICByZXR1cm4gKEZUU19EKTsKLSAgICB9Ci0gIGlmIChTX0lTTE5L
IChzYnAtPnN0X21vZGUpKQotICAgIHJldHVybiAoRlRTX1NMKTsKLSAgaWYgKFNfSVNSRUcgKHNi
cC0+c3RfbW9kZSkpCi0gICAgcmV0dXJuIChGVFNfRik7Ci0gIHJldHVybiAoRlRTX0RFRkFVTFQp
OwotfQotCi1zdGF0aWMgRlRTRU5UICoKLWZ0c19zb3J0IChGVFMgKnNwLCBGVFNFTlQgKmhlYWQs
IHJlZ2lzdGVyIGludCBuaXRlbXMpCi17Ci0gIHJlZ2lzdGVyIEZUU0VOVCAqKmFwLCAqcDsKLQot
ICAvKgotICAgKiBDb25zdHJ1Y3QgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gdGhlIHN0cnVjdHVy
ZXMgYW5kIGNhbGwgcXNvcnQoMykuCi0gICAqIFJlYXNzZW1ibGUgdGhlIGFycmF5IGluIHRoZSBv
cmRlciByZXR1cm5lZCBieSBxc29ydC4gIElmIHVuYWJsZSB0bwotICAgKiBzb3J0IGZvciBtZW1v
cnkgcmVhc29ucywgcmV0dXJuIHRoZSBkaXJlY3RvcnkgZW50cmllcyBpbiB0aGVpcgotICAgKiBj
dXJyZW50IG9yZGVyLiAgQWxsb2NhdGUgZW5vdWdoIHNwYWNlIGZvciB0aGUgY3VycmVudCBuZWVk
cyBwbHVzCi0gICAqIDQwIHNvIGRvbid0IHJlYWxsb2Mgb25lIGVudHJ5IGF0IGEgdGltZS4KLSAg
ICovCi0gIGlmIChuaXRlbXMgPiBzcC0+ZnRzX25pdGVtcykKLSAgICB7Ci0gICAgICBzcC0+ZnRz
X25pdGVtcyA9IG5pdGVtcyArIDQwOwotICAgICAgaWYgKChzcC0+ZnRzX2FycmF5ID0gcmVhbGxv
YyAoc3AtPmZ0c19hcnJheSwKLQkJCQkgICAgKHNpemVfdCkgKHNwLT5mdHNfbml0ZW1zICoKLQkJ
CQkJICAgICAgc2l6ZW9mIChGVFNFTlQgKikpKSkgPT0gTlVMTCkKLQl7Ci0JICBzcC0+ZnRzX25p
dGVtcyA9IDA7Ci0JICByZXR1cm4gKGhlYWQpOwotCX0KLSAgICB9Ci0gIGZvciAoYXAgPSBzcC0+
ZnRzX2FycmF5LCBwID0gaGVhZDsgcDsgcCA9IHAtPmZ0c19saW5rKQotICAgICphcCsrID0gcDsK
LSAgcXNvcnQgKCh2b2lkICopIHNwLT5mdHNfYXJyYXksIG5pdGVtcywgc2l6ZW9mIChGVFNFTlQg
KiksIHNwLT5mdHNfY29tcGFyKTsKLSAgZm9yIChoZWFkID0gKihhcCA9IHNwLT5mdHNfYXJyYXkp
OyAtLW5pdGVtczsgKythcCkKLSAgICBhcFswXS0+ZnRzX2xpbmsgPSBhcFsxXTsKLSAgYXBbMF0t
PmZ0c19saW5rID0gTlVMTDsKLSAgcmV0dXJuIChoZWFkKTsKLX0KLQotc3RhdGljIEZUU0VOVCAq
Ci1mdHNfYWxsb2MgKEZUUyAqc3AsIGNvbnN0IGNoYXIgKm5hbWUsIHJlZ2lzdGVyIGludCBuYW1l
bGVuKQotewotICByZWdpc3RlciBGVFNFTlQgKnA7Ci0gIHNpemVfdCBsZW47Ci0KLSAgLyoKLSAg
ICogVGhlIGZpbGUgbmFtZSBpcyBhIHZhcmlhYmxlIGxlbmd0aCBhcnJheSBhbmQgbm8gc3RhdCBz
dHJ1Y3R1cmUgaXMKLSAgICogbmVjZXNzYXJ5IGlmIHRoZSB1c2VyIGhhcyBzZXQgdGhlIG5vc3Rh
dCBiaXQuICBBbGxvY2F0ZSB0aGUgRlRTRU5UCi0gICAqIHN0cnVjdHVyZSwgdGhlIGZpbGUgbmFt
ZSBhbmQgdGhlIHN0YXQgc3RydWN0dXJlIGluIG9uZSBjaHVuaywgYnV0Ci0gICAqIGJlIGNhcmVm
dWwgdGhhdCB0aGUgc3RhdCBzdHJ1Y3R1cmUgaXMgcmVhc29uYWJseSBhbGlnbmVkLiAgU2luY2Ug
dGhlCi0gICAqIGZ0c19uYW1lIGZpZWxkIGlzIGRlY2xhcmVkIHRvIGJlIG9mIHNpemUgMSwgdGhl
IGZ0c19uYW1lIHBvaW50ZXIgaXMKLSAgICogbmFtZWxlbiArIDIgYmVmb3JlIHRoZSBmaXJzdCBw
b3NzaWJsZSBhZGRyZXNzIG9mIHRoZSBzdGF0IHN0cnVjdHVyZS4KLSAgICovCi0gIGxlbiA9IHNp
emVvZiAoRlRTRU5UKSArIG5hbWVsZW47Ci0gIGlmICghSVNTRVQgKEZUU19OT1NUQVQpKQotICAg
IGxlbiArPSBzaXplb2YgKHN0cnVjdCBzdGF0KSArIEFMSUdOQllURVM7Ci0gIGlmICgocCA9IG1h
bGxvYyAobGVuKSkgPT0gTlVMTCkKLSAgICByZXR1cm4gKE5VTEwpOwotCi0gIC8qIENvcHkgdGhl
IG5hbWUgcGx1cyB0aGUgdHJhaWxpbmcgTlVMTC4gKi8KLSAgbWVtbW92ZSAocC0+ZnRzX25hbWUs
IG5hbWUsIG5hbWVsZW4gKyAxKTsKLQotICBpZiAoIUlTU0VUIChGVFNfTk9TVEFUKSkKLSAgICBw
LT5mdHNfc3RhdHAgPSAoc3RydWN0IHN0YXQgKikgQUxJR04gKHAtPmZ0c19uYW1lICsgbmFtZWxl
biArIDIpOwotICBwLT5mdHNfbmFtZWxlbiA9IG5hbWVsZW47Ci0gIHAtPmZ0c19wYXRoID0gc3At
PmZ0c19wYXRoOwotICBwLT5mdHNfZXJybm8gPSAwOwotICBwLT5mdHNfZmxhZ3MgPSAwOwotICBw
LT5mdHNfaW5zdHIgPSBGVFNfTk9JTlNUUjsKLSAgcC0+ZnRzX251bWJlciA9IDA7Ci0gIHAtPmZ0
c19wb2ludGVyID0gTlVMTDsKLSAgcmV0dXJuIChwKTsKLX0KLQotc3RhdGljIHZvaWQKLWZ0c19s
ZnJlZSAocmVnaXN0ZXIgRlRTRU5UICpoZWFkKQotewotICByZWdpc3RlciBGVFNFTlQgKnA7Ci0K
LSAgLyogRnJlZSBhIGxpbmtlZCBsaXN0IG9mIHN0cnVjdHVyZXMuICovCi0gIHdoaWxlICgocCA9
IGhlYWQpKQotICAgIHsKLSAgICAgIGhlYWQgPSBoZWFkLT5mdHNfbGluazsKLSAgICAgIGZyZWUg
KHApOwotICAgIH0KLX0KLQotLyoKLSAqIEFsbG93IGVzc2VudGlhbGx5IHVubGltaXRlZCBwYXRo
czsgZmluZCwgcm0sIGxzIHNob3VsZCBhbGwgd29yayBvbiBhbnkgdHJlZS4KLSAqIE1vc3Qgc3lz
dGVtcyB3aWxsIGFsbG93IGNyZWF0aW9uIG9mIHBhdGhzIG11Y2ggbG9uZ2VyIHRoYW4gTUFYUEFU
SExFTiwgZXZlbgotICogdGhvdWdoIHRoZSBrZXJuZWwgd29uJ3QgcmVzb2x2ZSB0aGVtLiAgQWRk
IHRoZSBzaXplIChub3QganVzdCB3aGF0J3MgbmVlZGVkKQotICogcGx1cyAyNTYgYnl0ZXMgc28g
ZG9uJ3QgcmVhbGxvYyB0aGUgcGF0aCAyIGJ5dGVzIGF0IGEgdGltZS4KLSAqLwotc3RhdGljIGlu
dAotZnRzX3BhbGxvYyAoRlRTICpzcCwgc2l6ZV90IG1vcmUpCi17Ci0gIHNwLT5mdHNfcGF0aGxl
biArPSBtb3JlICsgMjU2OwotICBzcC0+ZnRzX3BhdGggPSByZWFsbG9jIChzcC0+ZnRzX3BhdGgs
IChzaXplX3QpIHNwLT5mdHNfcGF0aGxlbik7Ci0gIHJldHVybiAoc3AtPmZ0c19wYXRoID09IE5V
TEwpOwotfQotCi0vKgotICogV2hlbiB0aGUgcGF0aCBpcyByZWFsbG9jJ2QsIGhhdmUgdG8gZml4
IGFsbCBvZiB0aGUgcG9pbnRlcnMgaW4gc3RydWN0dXJlcwotICogYWxyZWFkeSByZXR1cm5lZC4K
LSAqLwotc3RhdGljIHZvaWQKLWZ0c19wYWRqdXN0IChGVFMgKnNwLCB2b2lkICphZGRyKQotewot
ICBGVFNFTlQgKnA7Ci0KLSNkZWZpbmUgQURKVVNUKHApIHsJCQkJCQkJXAotCShwKS0+ZnRzX2Fj
Y3BhdGggPQkJCQkJCVwKLQkgICAgKGNoYXIgKilhZGRyICsgKChwKS0+ZnRzX2FjY3BhdGggLSAo
cCktPmZ0c19wYXRoKTsJCVwKLQkocCktPmZ0c19wYXRoID0gYWRkcjsJCQkJCQlcCi19Ci0gIC8q
IEFkanVzdCB0aGUgY3VycmVudCBzZXQgb2YgY2hpbGRyZW4uICovCi0gIGZvciAocCA9IHNwLT5m
dHNfY2hpbGQ7IHA7IHAgPSBwLT5mdHNfbGluaykKLSAgICBBREpVU1QgKHApOwotCi0gIC8qIEFk
anVzdCB0aGUgcmVzdCBvZiB0aGUgdHJlZS4gKi8KLSAgZm9yIChwID0gc3AtPmZ0c19jdXI7IHAt
PmZ0c19sZXZlbCA+PSBGVFNfUk9PVExFVkVMOykKLSAgICB7Ci0gICAgICBBREpVU1QgKHApOwot
ICAgICAgcCA9IHAtPmZ0c19saW5rID8gcC0+ZnRzX2xpbmsgOiBwLT5mdHNfcGFyZW50OwotICAg
IH0KLX0KLQotc3RhdGljIHNpemVfdAotZnRzX21heGFyZ2xlbiAoY2hhciAqY29uc3QgKmFyZ3Yp
Ci17Ci0gIHNpemVfdCBsZW4sIG1heDsKLQotICBmb3IgKG1heCA9IDA7ICphcmd2OyArK2FyZ3Yp
Ci0gICAgaWYgKChsZW4gPSBzdHJsZW4gKCphcmd2KSkgPiBtYXgpCi0gICAgICBtYXggPSBsZW47
Ci0gIHJldHVybiAobWF4KTsKLX0KZGlmZiAtLWdpdCBhL2xpYmxzL2Z0cy5oIGIvbGlibHMvZnRz
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkNmEyOWYuLjAwMDAwMDAKLS0tIGEv
bGlibHMvZnRzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAsMCBAQAotLyoKLSAgQ29weXJp
Z2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAy
MDA4LAotICAyMDA5LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzLCAyMDE0LCAyMDE1LCAyMDE2LCAy
MDE3LCAyMDE4LCAyMDE5LAotICAyMDIwLCAyMDIxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLgotCi0gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBJbmV0dXRpbHMuCi0KLSAgR05VIElu
ZXR1dGlscyBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig
bW9kaWZ5Ci0gIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVp
dGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAotICB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0KLSAgR05VIEluZXR1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgYWxv
bmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSBgaHR0cDovL3d3dy5nbnUub3JnL2xp
Y2Vuc2VzLycuICovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5ODksIDE5OTMKLSAqCVRoZSBS
ZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBu
b3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICog
ICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0g
KiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
Ci0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIF9GVFNf
SAotIyBkZWZpbmUgX0ZUU19IIDEKLQotIyBpZmRlZiBIQVZFX0ZFQVRVUkVTX0gKLSMgIGluY2x1
ZGUgPGZlYXR1cmVzLmg+Ci0jIGVuZGlmCi0jIGluY2x1ZGUgPHN5cy90eXBlcy5oPgotCi10eXBl
ZGVmIHN0cnVjdAotewotICBzdHJ1Y3QgX2Z0c2VudCAqZnRzX2N1cjsJLyogY3VycmVudCBub2Rl
ICovCi0gIHN0cnVjdCBfZnRzZW50ICpmdHNfY2hpbGQ7CS8qIGxpbmtlZCBsaXN0IG9mIGNoaWxk
cmVuICovCi0gIHN0cnVjdCBfZnRzZW50ICoqZnRzX2FycmF5OwkvKiBzb3J0IGFycmF5ICovCi0g
IGRldl90IGZ0c19kZXY7CQkvKiBzdGFydGluZyBkZXZpY2UgIyAqLwotICBjaGFyICpmdHNfcGF0
aDsJCS8qIHBhdGggZm9yIHRoaXMgZGVzY2VudCAqLwotICBpbnQgZnRzX3JmZDsJCQkvKiBmZCBm
b3Igcm9vdCAqLwotICBpbnQgZnRzX3BhdGhsZW47CQkvKiBzaXplb2YocGF0aCkgKi8KLSAgaW50
IGZ0c19uaXRlbXM7CQkvKiBlbGVtZW50cyBpbiB0aGUgc29ydCBhcnJheSAqLwotICBpbnQgKCpm
dHNfY29tcGFyKSAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOwkvKiBjb21wYXJlIGZuICov
Ci0KLSMgZGVmaW5lIEZUU19DT01GT0xMT1cJMHgwMDAxCS8qIGZvbGxvdyBjb21tYW5kIGxpbmUg
c3ltbGlua3MgKi8KLSMgZGVmaW5lIEZUU19MT0dJQ0FMCTB4MDAwMgkvKiBsb2dpY2FsIHdhbGsg
Ki8KLSMgZGVmaW5lIEZUU19OT0NIRElSCTB4MDAwNAkvKiBkb24ndCBjaGFuZ2UgZGlyZWN0b3Jp
ZXMgKi8KLSMgZGVmaW5lIEZUU19OT1NUQVQJMHgwMDA4CS8qIGRvbid0IGdldCBzdGF0IGluZm8g
Ki8KLSMgZGVmaW5lIEZUU19QSFlTSUNBTAkweDAwMTAJLyogcGh5c2ljYWwgd2FsayAqLwotIyBk
ZWZpbmUgRlRTX1NFRURPVAkweDAwMjAJLyogcmV0dXJuIGRvdCBhbmQgZG90LWRvdCAqLwotIyBk
ZWZpbmUgRlRTX1hERVYJMHgwMDQwCS8qIGRvbid0IGNyb3NzIGRldmljZXMgKi8KLSMgZGVmaW5l
IEZUU19XSElURU9VVAkweDAwODAJLyogcmV0dXJuIHdoaXRlb3V0IGluZm9ybWF0aW9uICovCi0j
IGRlZmluZSBGVFNfT1BUSU9OTUFTSwkweDAwZmYJLyogdmFsaWQgdXNlciBvcHRpb24gbWFzayAq
LwotCi0jIGRlZmluZSBGVFNfTkFNRU9OTFkJMHgwMTAwCS8qIChwcml2YXRlKSBjaGlsZCBuYW1l
cyBvbmx5ICovCi0jIGRlZmluZSBGVFNfU1RPUAkweDAyMDAJLyogKHByaXZhdGUpIHVucmVjb3Zl
cmFibGUgZXJyb3IgKi8KLSAgaW50IGZ0c19vcHRpb25zOwkJLyogZnRzX29wZW4gb3B0aW9ucywg
Z2xvYmFsIGZsYWdzICovCi19IEZUUzsKLQotdHlwZWRlZiBzdHJ1Y3QgX2Z0c2VudAotewotICBz
dHJ1Y3QgX2Z0c2VudCAqZnRzX2N5Y2xlOwkvKiBjeWNsZSBub2RlICovCi0gIHN0cnVjdCBfZnRz
ZW50ICpmdHNfcGFyZW50OwkvKiBwYXJlbnQgZGlyZWN0b3J5ICovCi0gIHN0cnVjdCBfZnRzZW50
ICpmdHNfbGluazsJLyogbmV4dCBmaWxlIGluIGRpcmVjdG9yeSAqLwotICBsb25nIGZ0c19udW1i
ZXI7CQkvKiBsb2NhbCBudW1lcmljIHZhbHVlICovCi0gIHZvaWQgKmZ0c19wb2ludGVyOwkJLyog
bG9jYWwgYWRkcmVzcyB2YWx1ZSAqLwotICBjaGFyICpmdHNfYWNjcGF0aDsJCS8qIGFjY2VzcyBw
YXRoICovCi0gIGNoYXIgKmZ0c19wYXRoOwkJLyogcm9vdCBwYXRoICovCi0gIGludCBmdHNfZXJy
bm87CQkvKiBlcnJubyBmb3IgdGhpcyBub2RlICovCi0gIGludCBmdHNfc3ltZmQ7CQkvKiBmZCBm
b3Igc3ltbGluayAqLwotICB1bnNpZ25lZCBzaG9ydCBmdHNfcGF0aGxlbjsJLyogc3RybGVuKGZ0
c19wYXRoKSAqLwotICB1bnNpZ25lZCBzaG9ydCBmdHNfbmFtZWxlbjsJLyogc3RybGVuKGZ0c19u
YW1lKSAqLwotCi0gIGlub190IGZ0c19pbm87CQkvKiBpbm9kZSAqLwotICBkZXZfdCBmdHNfZGV2
OwkJLyogZGV2aWNlICovCi0gIG5saW5rX3QgZnRzX25saW5rOwkJLyogbGluayBjb3VudCAqLwot
Ci0jIGRlZmluZSBGVFNfUk9PVFBBUkVOVExFVkVMCS0xCi0jIGRlZmluZSBGVFNfUk9PVExFVkVM
CQkgMAotICBzaG9ydCBmdHNfbGV2ZWw7CQkvKiBkZXB0aCAoLTEgdG8gTikgKi8KLQotIyBkZWZp
bmUgRlRTX0QJCSAxCS8qIHByZW9yZGVyIGRpcmVjdG9yeSAqLwotIyBkZWZpbmUgRlRTX0RDCQkg
MgkvKiBkaXJlY3RvcnkgdGhhdCBjYXVzZXMgY3ljbGVzICovCi0jIGRlZmluZSBGVFNfREVGQVVM
VAkgMwkvKiBub25lIG9mIHRoZSBhYm92ZSAqLwotIyBkZWZpbmUgRlRTX0ROUgkgNAkvKiB1bnJl
YWRhYmxlIGRpcmVjdG9yeSAqLwotIyBkZWZpbmUgRlRTX0RPVAkgNQkvKiBkb3Qgb3IgZG90LWRv
dCAqLwotIyBkZWZpbmUgRlRTX0RQCQkgNgkvKiBwb3N0b3JkZXIgZGlyZWN0b3J5ICovCi0jIGRl
ZmluZSBGVFNfRVJSCSA3CS8qIGVycm9yOyBlcnJubyBpcyBzZXQgKi8KLSMgZGVmaW5lIEZUU19G
CQkgOAkvKiByZWd1bGFyIGZpbGUgKi8KLSMgZGVmaW5lIEZUU19JTklUCSA5CS8qIGluaXRpYWxp
emVkIG9ubHkgKi8KLSMgZGVmaW5lIEZUU19OUwkJMTAJLyogc3RhdCgyKSBmYWlsZWQgKi8KLSMg
ZGVmaW5lIEZUU19OU09LCTExCS8qIG5vIHN0YXQoMikgcmVxdWVzdGVkICovCi0jIGRlZmluZSBG
VFNfU0wJCTEyCS8qIHN5bWJvbGljIGxpbmsgKi8KLSMgZGVmaW5lIEZUU19TTE5PTkUJMTMJLyog
c3ltYm9saWMgbGluayB3aXRob3V0IHRhcmdldCAqLwotIyBkZWZpbmUgRlRTX1cJCTE0CS8qIHdo
aXRlb3V0IG9iamVjdCAqLwotICB1bnNpZ25lZCBzaG9ydCBmdHNfaW5mbzsJLyogdXNlciBmbGFn
cyBmb3IgRlRTRU5UIHN0cnVjdHVyZSAqLwotCi0jIGRlZmluZSBGVFNfRE9OVENIRElSCSAweDAx
CS8qIGRvbid0IGNoZGlyIC4uIHRvIHRoZSBwYXJlbnQgKi8KLSMgZGVmaW5lIEZUU19TWU1GT0xM
T1cJIDB4MDIJLyogZm9sbG93ZWQgYSBzeW1saW5rIHRvIGdldCBoZXJlICovCi0gIHVuc2lnbmVk
IHNob3J0IGZ0c19mbGFnczsJLyogcHJpdmF0ZSBmbGFncyBmb3IgRlRTRU5UIHN0cnVjdHVyZSAq
LwotCi0jIGRlZmluZSBGVFNfQUdBSU4JIDEJLyogcmVhZCBub2RlIGFnYWluICovCi0jIGRlZmlu
ZSBGVFNfRk9MTE9XCSAyCS8qIGZvbGxvdyBzeW1ib2xpYyBsaW5rICovCi0jIGRlZmluZSBGVFNf
Tk9JTlNUUgkgMwkvKiBubyBpbnN0cnVjdGlvbnMgKi8KLSMgZGVmaW5lIEZUU19TS0lQCSA0CS8q
IGRpc2NhcmQgbm9kZSAqLwotICB1bnNpZ25lZCBzaG9ydCBmdHNfaW5zdHI7CS8qIGZ0c19zZXQo
KSBpbnN0cnVjdGlvbnMgKi8KLQotICBzdHJ1Y3Qgc3RhdCAqZnRzX3N0YXRwOwkvKiBzdGF0KDIp
IGluZm9ybWF0aW9uICovCi0gIGNoYXIgZnRzX25hbWVbMV07CQkvKiBmaWxlIG5hbWUgKi8KLX0g
RlRTRU5UOwotCi1GVFNFTlQgKmZ0c19jaGlsZHJlbiAoRlRTICosIGludCk7Ci1pbnQgZnRzX2Ns
b3NlIChGVFMgKik7Ci1GVFMgKmZ0c19vcGVuIChjaGFyICpjb25zdCAqLCBpbnQsIGludCAoKiko
Y29uc3QgRlRTRU5UICoqLCBjb25zdCBGVFNFTlQgKiopKTsKLUZUU0VOVCAqZnRzX3JlYWQgKEZU
UyAqKTsKLWludCBmdHNfc2V0IChGVFMgKiwgRlRTRU5UICosIGludCk7Ci0KLSNlbmRpZiAvKiBm
dHMuaCAqLwoKaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2NnaXQvaW5ldHV0aWxzLmdpdC9j
b21taXQvP2lkPTZkMGM4YWMyMDNhY2E1ZWU5ZDAwZGE5MThmNjBmNjZiOGE0MmZkZWYKCgpjb21t
aXQgNmQwYzhhYzIwM2FjYTVlZTlkMDBkYTkxOGY2MGY2NmI4YTQyZmRlZgpBdXRob3I6IFNpbW9u
IEpvc2Vmc3NvbiA8c2ltb25Aam9zZWZzc29uLm9yZz4KRGF0ZTogICBTYXQgSnVsIDI0IDE1OjM0
OjUxIDIwMjEgKzAyMDAKCiAgICBSZW1vdmUgdGVzdHMgb2Jzb2xldGVkIGJ5IGdudWxpYi4KICAg
IAogICAgKiBjb25maWd1cmUuYWMgKHBvbGwuaCwgSEFWRV9TTlBSSU5URiwgSEFWRV9WU05QUklO
VEYsIHN0cmVycm9yKTogRHJvcCB0ZXN0cy4KCmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9j
b25maWd1cmUuYWMKaW5kZXggMDdhMDJlYy4uYWY4M2YzNSAxMDA2NDQKLS0tIGEvY29uZmlndXJl
LmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtODEwLDMwICs4MTAsNiBAQCBBQ19DSEVDS19GVU5D
KHNldHBnaWQsICwgQUNfREVGSU5FKFtzZXRwZ2lkXSwgc2V0cGdycCwKICMgdGhlIHN5c3RlbSBv
bmUgZG9lc24ndCBoYXZlIGdldG9wdF9sb25nLgogQUNfQ0hFQ0tfRlVOQyhnZXRvcHRfbG9uZykK
IAotQUNfQ0hFQ0tfSEVBREVSKHBvbGwuaCkKLQotIyBTZWUgaWYgc25wcmludGYgZXhpc3RzLCBv
dGhlcndpc2UganVzdCB1c2UgYSBib2d1cyB2ZXJzaW9uCi1BQ19DSEVDS19GVU5DKHNucHJpbnRm
LAotICBbQUNfREVGSU5FKFtIQVZFX1NOUFJJTlRGXSwgMSwgW0RlZmluZSB0byBvbmUgaWYgeW91
IGhhdmUgc25wcmludGZdKV0pCi0KLSMgU2VlIGlmIHZzbnByaW50ZiBleGlzdHMsIG90aGVyd2lz
ZSB1c2Ugb3VyIG93bi4KLUFDX0NIRUNLX0ZVTkModnNucHJpbnRmLAotICBbQUNfREVGSU5FKFtI
QVZFX1ZTTlBSSU5URl0sIDEsIFtEZWZpbmUgdG8gb25lIGlmIHlvdSBoYXZlIHZzbnByaW50Zl0p
XSkKLQotIyBTZWUgaWYgdGhlIHN5c3RlbSBoYXMgc3RyZXJyb3IsIGFuZCByZXBsYWNlIGl0IGlm
IG5vdAotQUNfQ0hFQ0tfRlVOQyhzdHJlcnJvcikKLWlmIHRlc3QgIiRhY19jdl9mdW5jX3N0cmVy
cm9yIiA9IG5vOyB0aGVuCi0gICMgTm8gc3RyZXJyb3IsIHNvIHNlZSBpZiB0aGUgU1lTX0VSUkxJ
U1QgdmFyaWFibGUgY2FuIGJlIHVzZWQgYnkKLSAgIyBvdXJzCi0gIEFDX0NIRUNLX0ZVTkMoc3lz
X2Vycmxpc3QsIEFDX0RFRklORShbSEFWRV9TWVNfRVJSTElTVF0sIDEsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBbRGVmaW5lIHRvIG9uZSBpZiB5b3UgaGF2ZSBzeXNfZXJybGlzdC5d
KSkKLSAgaWYgdGVzdCAiJGFjX2N2X2Z1bmNfc3lzX2Vycmxpc3QiID0geWVzOyB0aGVuCi0gICAg
QUNfQ0hFQ0tfREVDTChzeXNfZXJybGlzdCwgLCAsCi0gICAgICBbSVVfRkxVU0hMRUZUKFsjaW5j
bHVkZSA8c3RkaW8uaD4KLSAgICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgPGVycm5vLmg+XSld
KQotICBmaQotZmkKLQogIyBTZWUgaWYgdGhlIHN5c3RlbSBoYXMgaHN0cmVycm9yLCBhbmQgcmVw
bGFjZSBpdCBpZiBub3QKIHNhdmVfTElCUz0kTElCUwogCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKU3VtbWFy
eSBvZiBjaGFuZ2VzOgogTkVXUyAgICAgICAgICAgICAgfCAgICA0ICsKIGJvb3RzdHJhcC5jb25m
ICAgIHwgICAgMSArCiBjb25maWd1cmUuYWMgICAgICB8ICAgMzAgKy0KIGxpYmxzL01ha2VmaWxl
LmFtIHwgICAgNCArLQogbGlibHMvZnRzLmMgICAgICAgfCAxMDk4IC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBsaWJscy9mdHMuaCAgICAgICB8
ICAxNDMgLS0tLS0tLQogNiBmaWxlcyBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAxMjcwIGRl
bGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IGxpYmxzL2Z0cy5jCiBkZWxldGUgbW9kZSAx
MDA2NDQgbGlibHMvZnRzLmgKCgpob29rcy9wb3N0LXJlY2VpdmUKLS0gCkdOVSBJbmV0dXRpbHMg
CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpDb21taXQt
aW5ldHV0aWxzIG1haWxpbmcgbGlzdApDb21taXQtaW5ldHV0aWxzQGdudS5vcmcKaHR0cHM6Ly9s
aXN0cy5nbnUub3JnL21haWxtYW4vbGlzdGluZm8vY29tbWl0LWluZXR1dGlscwo=