other/5714: Wrong assembly code generated!

carlos@embedded.cl carlos@embedded.cl
Sun Feb 17 09:47:00 GMT 2002


>Number:         5714
>Category:       other
>Synopsis:       Wrong assembly code generated!
>Confidential:   no
>Severity:       critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          wrong-code
>Submitter-Id:   net
>Arrival-Date:   Sun Feb 17 09:26:00 PST 2002
>Closed-Date:
>Last-Modified:
>Originator:     Carlos Duclos
>Release:        gcc-2.95.3 (cross compiler for ColdFire from x86)
>Organization:
>Environment:
Linux SuSE 7.2, linux 2.2.20, binutils 020202, gcc-3.0.3, 
m68k-elf-gcc 2.95.3, m68k-binutils 2.10
>Description:
THe cross compiler generates invalid assembler code. It 
generates code for 68000 and not for coldfire on some cases.
I'm aware that probably you don't manage the coldfire port of
gcc but maybe.
This happens when you try to compile the uClinux kernel with
framebuffer support enabled. I don't know why but in these
files it generates a "dbra" instruction. which is not 
supported on ColdFire processors.
>How-To-Repeat:

>Fix:
Edit the assembly code and fix it manually, 
then use as and run ld.
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="fbcon-cfb16.i"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="fbcon-cfb16.i"

IyAxICJkcml2ZXJzL3ZpZGVvL2ZiY29uLWNmYjE2LmMiCiAKCgoKCgoKCgoKCiMgMSAiL2hvbWUv
Y2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvbW9k
dWxlLmgiIDEKIAoKCgoKCgoKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11
Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvY29uZmlnLmgiIDEKCgoKIyAxICIvaG9tZS9jYXJs
b3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9hdXRvY29u
Zi5oIiAxCiAKCgoKCgoKCgogCgoKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoK
CgoKCgogCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCgoKCgoKCgoKCgogCgoKCgogCgoKCgog
CgoKCgoKIAoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgogCgoKCgogCgoKCgoKCiAKCgoKCgoKIAoKCgoKIAoKCgoKCgoKCiAKCgoKCiAKCgoKCiAKCgoK
CiAKCgoKCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgogCgoKCgoKIAoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKIAoKCgoKCgogCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCiAKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAK
CgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCiAKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCiAKCgoKCgoKCgoKCgojIDQgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wt
dWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAyCgoKCiMgMTAgIi9ob21lL2Nh
cmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L21vZHVs
ZS5oIiAyCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQu
eC9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmgiIDEKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCiAgdHlwZWRlZiBzdHJ1Y3QgeyBpbnQg
Z2NjX2lzX2J1Z2d5OyB9IHNwaW5sb2NrX3Q7CiAgCgoKCgoKCgoKCiMgMTA1ICIvaG9tZS9jYXJs
b3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9zcGlubG9j
ay5oIgoKCiAKCgoKCgoKCgoKCgoKCgoKICB0eXBlZGVmIHN0cnVjdCB7IGludCBnY2NfaXNfYnVn
Z3k7IH0gcndsb2NrX3Q7CiAgCgoKCgoKCgoKCgogCgoKCgoKCiMgMTEgIi9ob21lL2Nhcmxvcy9C
dWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L21vZHVsZS5oIiAy
CgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNs
dWRlL2xpbnV4L2xpc3QuaCIgMQoKCgoKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVY
L2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvcHJlZmV0Y2guaCIgMQogCgoKCgoKCgoK
CgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5j
bHVkZS9hc20vcHJvY2Vzc29yLmgiIDEKIAoKCgoKCgoKCiAKCgoKCgoKIyAxICIvaG9tZS9jYXJs
b3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vc2VnbWVudC5o
IiAxCgoKCiAKIAoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgc3RydWN0IHsKCXVuc2lnbmVkIGxvbmcg
c2VnOwp9IG1tX3NlZ21lbnRfdDsKCgoKCgogCgoKCnN0YXRpYyBpbmxpbmUgbW1fc2VnbWVudF90
IGdldF9mcyh2b2lkKQp7CiAgICByZXR1cm4gKChtbV9zZWdtZW50X3QpIHsgKCAoKDEpICkgICkg
fSkgIDsKfQoKc3RhdGljIGlubGluZSBtbV9zZWdtZW50X3QgZ2V0X2RzKHZvaWQpCnsKICAgICAK
ICAgIHJldHVybiAoKG1tX3NlZ21lbnRfdCkgeyAoICgoNSkgKSAgKSB9KSAgOwp9CgpzdGF0aWMg
aW5saW5lIHZvaWQgc2V0X2ZzKG1tX3NlZ21lbnRfdCB2YWwpCnsKfQoKCgoKCgojIDE3ICIvaG9t
ZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vcHJv
Y2Vzc29yLmgiIDIKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4
LTIuNC54L2luY2x1ZGUvYXNtL2ZwdS5oIiAxCgoKCgoKIAoKCgogCgoKIyAyMyAiL2hvbWUvY2Fy
bG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtL2ZwdS5oIgoK
CgojIDE4ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5j
bHVkZS9hc20vcHJvY2Vzc29yLmgiIDIKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVY
L2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtL3B0cmFjZS5oIiAxCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgogCgoKc3RydWN0IHB0X3JlZ3MgewogIGxvbmcgICAgIGQxOwogIGxvbmcgICAg
IGQyOwogIGxvbmcgICAgIGQzOwogIGxvbmcgICAgIGQ0OwogIGxvbmcgICAgIGQ1OwogIGxvbmcg
ICAgIGEwOwogIGxvbmcgICAgIGExOwogIGxvbmcgICAgIGEyOwogIGxvbmcgICAgIGQwOwogIGxv
bmcgICAgIG9yaWdfZDA7CiAgbG9uZyAgICAgc3RrYWRqOwoKICB1bnNpZ25lZCBmb3JtYXQgOiAg
NDsgIAogIHVuc2lnbmVkIHZlY3RvciA6IDEyOyAgCiAgdW5zaWduZWQgc2hvcnQgc3I7CiAgdW5z
aWduZWQgbG9uZyAgcGM7CgoKCgoKCgoKfTsKCiAKCgoKc3RydWN0IHN3aXRjaF9zdGFjayB7Cgl1
bnNpZ25lZCBsb25nICBkNjsKCXVuc2lnbmVkIGxvbmcgIGQ3OwoJdW5zaWduZWQgbG9uZyAgYTM7
Cgl1bnNpZ25lZCBsb25nICBhNDsKCXVuc2lnbmVkIGxvbmcgIGE1OwoJdW5zaWduZWQgbG9uZyAg
YTY7Cgl1bnNpZ25lZCBsb25nICByZXRwYzsKfTsKCiAKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiB2
b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqKTsKCgoKIyAxOSAiL2hvbWUvY2FybG9zL0J1
aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIiAy
CgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNs
dWRlL2FzbS9jdXJyZW50LmgiIDEKCgogCgoKCgoKCgoKZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVj
dCAqX2N1cnJlbnRfdGFzazsKCgoKCiMgMjAgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9l
Y2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCIgMgoKCmV4dGVybiBpbmxp
bmUgdW5zaWduZWQgbG9uZyByZHVzcCh2b2lkKSB7CgoJZXh0ZXJuIHVuc2lnbmVkIGludAlzd191
c3A7CglyZXR1cm4oc3dfdXNwKTsKCgoKCgoKfQoKZXh0ZXJuIGlubGluZSB2b2lkIHdydXNwKHVu
c2lnbmVkIGxvbmcgdXNwKSB7CgoJZXh0ZXJuIHVuc2lnbmVkIGludAlzd191c3A7Cglzd191c3Ag
PSB1c3A7CgoKCn0KCiAKCgoKCgogCgoKCgoKIAoKCgogICAKc3RydWN0IHRocmVhZF9zdHJ1Y3Qg
ewoJdW5zaWduZWQgbG9uZyAga3NwOwkJIAoJdW5zaWduZWQgbG9uZyAgdXNwOwkJIAoJdW5zaWdu
ZWQgc2hvcnQgc3I7CQkgCgl1bnNpZ25lZCBzaG9ydCBmczsJCSAKCXVuc2lnbmVkIGxvbmcgIGNy
cFsyXTsJCSAKCXVuc2lnbmVkIGxvbmcgIGVzcDA7CQkgCgl1bnNpZ25lZCBsb25nICBmcFs4KjNd
OwoJdW5zaWduZWQgbG9uZyAgZnBjbnRsWzNdOwkgCgl1bnNpZ25lZCBjaGFyICBmcHN0YXRlWygy
KSBdOyAgIAp9OwoKCgoKCgoKIAoKCgoKCgojIDkzICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElO
VVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgiCgogCnN0cnVjdCB0
YXNrX3N0cnVjdDsKCiAKc3RhdGljIGlubGluZSB2b2lkIHJlbGVhc2VfdGhyZWFkKHN0cnVjdCB0
YXNrX3N0cnVjdCAqZGVhZF90YXNrKQp7Cn0KCmV4dGVybiBpbnQga2VybmVsX3RocmVhZChpbnQg
KCpmbikodm9pZCAqKSwgdm9pZCAqIGFyZywgdW5zaWduZWQgbG9uZyBmbGFncyk7CgoKCgoKIAoK
CnN0YXRpYyBpbmxpbmUgdm9pZCBleGl0X3RocmVhZCh2b2lkKQp7Cn0KCiAKCgpleHRlcm4gaW5s
aW5lIHVuc2lnbmVkIGxvbmcgdGhyZWFkX3NhdmVkX3BjKHN0cnVjdCB0aHJlYWRfc3RydWN0ICp0
KQp7CglleHRlcm4gdm9pZCBzY2hlZHVsaW5nX2Z1bmN0aW9uc19zdGFydF9oZXJlKHZvaWQpOwoJ
ZXh0ZXJuIHZvaWQgc2NoZWR1bGluZ19mdW5jdGlvbnNfZW5kX2hlcmUodm9pZCk7CglzdHJ1Y3Qg
c3dpdGNoX3N0YWNrICpzdyA9IChzdHJ1Y3Qgc3dpdGNoX3N0YWNrICopdC0+a3NwOwoJIAoJaWYg
KHN3LT5yZXRwYyA+ICh1bnNpZ25lZCBsb25nKXNjaGVkdWxpbmdfZnVuY3Rpb25zX3N0YXJ0X2hl
cmUgJiYKCSAgICBzdy0+cmV0cGMgPCAodW5zaWduZWQgbG9uZylzY2hlZHVsaW5nX2Z1bmN0aW9u
c19lbmRfaGVyZSkKCQlyZXR1cm4gKCh1bnNpZ25lZCBsb25nICopc3ctPmE2KVsxXTsKCWVsc2UK
CQlyZXR1cm4gc3ctPnJldHBjOwp9Cgp1bnNpZ25lZCBsb25nIGdldF93Y2hhbihzdHJ1Y3QgdGFz
a19zdHJ1Y3QgKnApOwoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKIyAxMyAiL2hv
bWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgv
cHJlZmV0Y2guaCIgMgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGlu
dXgtMi40LngvaW5jbHVkZS9hc20vY2FjaGUuaCIgMQoKCgogCgoKIAoKCgoKCiMgMTQgIi9ob21l
L2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L3By
ZWZldGNoLmgiIDIKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCiAKCgpzdGF0aWMgaW5saW5l
IHZvaWQgcHJlZmV0Y2goY29uc3Qgdm9pZCAqeCkgezt9CgoKCgpzdGF0aWMgaW5saW5lIHZvaWQg
cHJlZmV0Y2h3KGNvbnN0IHZvaWQgKngpIHs7fQoKCgoKCgoKCgoKCgojIDYgIi9ob21lL2Nhcmxv
cy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2xpc3QuaCIg
MgoKCiAKCgoKCgoKCgoKc3RydWN0IGxpc3RfaGVhZCB7CglzdHJ1Y3QgbGlzdF9oZWFkICpuZXh0
LCAqcHJldjsKfTsKCgoKCgoKCgoKCiAKCgoKCgpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fbGlz
dF9hZGQoc3RydWN0IGxpc3RfaGVhZCAqIG5ldywKCXN0cnVjdCBsaXN0X2hlYWQgKiBwcmV2LAoJ
c3RydWN0IGxpc3RfaGVhZCAqIG5leHQpCnsKCW5leHQtPnByZXYgPSBuZXc7CgluZXctPm5leHQg
PSBuZXh0OwoJbmV3LT5wcmV2ID0gcHJldjsKCXByZXYtPm5leHQgPSBuZXc7Cn0KCiAKCgoKCgoK
CnN0YXRpYyBfX2lubGluZV9fIHZvaWQgbGlzdF9hZGQoc3RydWN0IGxpc3RfaGVhZCAqbmV3LCBz
dHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQp7CglfX2xpc3RfYWRkKG5ldywgaGVhZCwgaGVhZC0+bmV4
dCk7Cn0KCiAKCgoKCgoKCnN0YXRpYyBfX2lubGluZV9fIHZvaWQgbGlzdF9hZGRfdGFpbChzdHJ1
Y3QgbGlzdF9oZWFkICpuZXcsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCnsKCV9fbGlzdF9hZGQo
bmV3LCBoZWFkLT5wcmV2LCBoZWFkKTsKfQoKIAoKCgoKCgpzdGF0aWMgX19pbmxpbmVfXyB2b2lk
IF9fbGlzdF9kZWwoc3RydWN0IGxpc3RfaGVhZCAqIHByZXYsCgkJCQkgIHN0cnVjdCBsaXN0X2hl
YWQgKiBuZXh0KQp7CgluZXh0LT5wcmV2ID0gcHJldjsKCXByZXYtPm5leHQgPSBuZXh0Owp9Cgog
CgoKCgpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGxpc3RfZGVsKHN0cnVjdCBsaXN0X2hlYWQgKmVu
dHJ5KQp7CglfX2xpc3RfZGVsKGVudHJ5LT5wcmV2LCBlbnRyeS0+bmV4dCk7Cn0KCiAKCgoKc3Rh
dGljIF9faW5saW5lX18gdm9pZCBsaXN0X2RlbF9pbml0KHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5
KQp7CglfX2xpc3RfZGVsKGVudHJ5LT5wcmV2LCBlbnRyeS0+bmV4dCk7CglkbyB7ICggZW50cnkg
KS0+bmV4dCA9ICggZW50cnkgKTsgKCBlbnRyeSApLT5wcmV2ID0gKCBlbnRyeSApOyB9IHdoaWxl
ICgwKSA7IAp9CgogCgoKCnN0YXRpYyBfX2lubGluZV9fIGludCBsaXN0X2VtcHR5KHN0cnVjdCBs
aXN0X2hlYWQgKmhlYWQpCnsKCXJldHVybiBoZWFkLT5uZXh0ID09IGhlYWQ7Cn0KCiAKCgoKCnN0
YXRpYyBfX2lubGluZV9fIHZvaWQgbGlzdF9zcGxpY2Uoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwg
c3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKewoJc3RydWN0IGxpc3RfaGVhZCAqZmlyc3QgPSBsaXN0
LT5uZXh0OwoKCWlmIChmaXJzdCAhPSBsaXN0KSB7CgkJc3RydWN0IGxpc3RfaGVhZCAqbGFzdCA9
IGxpc3QtPnByZXY7CgkJc3RydWN0IGxpc3RfaGVhZCAqYXQgPSBoZWFkLT5uZXh0OwoKCQlmaXJz
dC0+cHJldiA9IGhlYWQ7CgkJaGVhZC0+bmV4dCA9IGZpcnN0OwoKCQlsYXN0LT5uZXh0ID0gYXQ7
CgkJYXQtPnByZXYgPSBsYXN0OwoJfQp9CgogCgoKCgoKCgoKIAoKCgoKCgoKICAgICAgICAJCiAK
CgoKCgoKCgoKIAoKCgoKCgoKICAgICAgICAJCgoKCgojIDEyICIvaG9tZS9jYXJsb3MvQnVpbGRz
L1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9tb2R1bGUuaCIgMgoKCgoK
CgoKCgoKCgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40
LngvaW5jbHVkZS9hc20vYXRvbWljLmgiIDEKCgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VD
TElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vc3lzdGVtLmgiIDEKCgoKCiMgMSAi
L2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGlu
dXgvbGlua2FnZS5oIiAxCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDQ4ICIv
aG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51
eC9saW5rYWdlLmgiCgoKCiMgNjEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNs
aW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2xpbmthZ2UuaCIKCgoKIyA1ICIvaG9tZS9jYXJsb3Mv
QnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vc3lzdGVtLmgiIDIK
CgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNs
dWRlL2FzbS9lbnRyeS5oIiAxCgoKCgojIDE0NyAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVY
L2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtL2VudHJ5LmgiCgoKIyA3ICIvaG9tZS9jYXJs
b3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vc3lzdGVtLmgi
IDIKCgoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgogICB2b2lkIHJlc3VtZSh2b2lkKTsK
CiMgNTEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNs
dWRlL2FzbS9zeXN0ZW0uaCIKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoK
CgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnN0cnVjdCBfX3hjaGdfZHVtbXkgeyB1bnNp
Z25lZCBsb25nIGFbMTAwXTsgfTsKCgoKc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9feGNo
Zyh1bnNpZ25lZCBsb25nIHgsIHZvbGF0aWxlIHZvaWQgKiBwdHIsIGludCBzaXplKQp7CiAgdW5z
aWduZWQgbG9uZyB0bXAsIGZsYWdzOwoKICBhc20gdm9sYXRpbGUgKCJtb3ZldyAlJXNyLCUwIjoi
PWQiICggIGZsYWdzICApIDogOiAibWVtb3J5IikgIDsKICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAo
ICJtb3ZlICUvc3IsJSVkMFxuXHQiICJvcmkubCAgIzB4MDcwMCwlJWQwXG5cdCIgIm1vdmUgJSVk
MCwlL3NyXG4iIDogOiA6ICJjYyIsICIlZDAiLCAibWVtb3J5IikgIDsKCiAgc3dpdGNoIChzaXpl
KSB7CiAgY2FzZSAxOgogICAgX19hc21fXyBfX3ZvbGF0aWxlX18KICAgICgibW92ZWIgJTIsJTBc
blx0IgogICAgICJtb3ZlYiAlMSwlMiIKICAgIDogIj0mZCIgKHRtcCkgOiAiZCIgKHgpLCAibSIg
KCogKCh2b2xhdGlsZSBzdHJ1Y3QgX194Y2hnX2R1bW15ICopKCBwdHIgKSkgKSA6ICJtZW1vcnki
KTsKICAgIGJyZWFrOwogIGNhc2UgMjoKICAgIF9fYXNtX18gX192b2xhdGlsZV9fCiAgICAoIm1v
dmV3ICUyLCUwXG5cdCIKICAgICAibW92ZXcgJTEsJTIiCiAgICA6ICI9JmQiICh0bXApIDogImQi
ICh4KSwgIm0iICgqICgodm9sYXRpbGUgc3RydWN0IF9feGNoZ19kdW1teSAqKSggcHRyICkpICkg
OiAibWVtb3J5Iik7CiAgICBicmVhazsKICBjYXNlIDQ6CiAgICBfX2FzbV9fIF9fdm9sYXRpbGVf
XwogICAgKCJtb3ZlbCAlMiwlMFxuXHQiCiAgICAgIm1vdmVsICUxLCUyIgogICAgOiAiPSZkIiAo
dG1wKSA6ICJkIiAoeCksICJtIiAoKiAoKHZvbGF0aWxlIHN0cnVjdCBfX3hjaGdfZHVtbXkgKiko
IHB0ciApKSApIDogIm1lbW9yeSIpOwogICAgYnJlYWs7CiAgfQogIGFzbSB2b2xhdGlsZSAoIm1v
dmV3ICUwLCUlc3IiOiA6ImQiICggIGZsYWdzICApIDogIm1lbW9yeSIpICA7CiAgcmV0dXJuIHRt
cDsKfQojIDE4NCAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54
L2luY2x1ZGUvYXNtL3N5c3RlbS5oIgoKCgoKIyAyMDMgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNM
SU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2FzbS9zeXN0ZW0uaCIKCgojIDIxNyAiL2hv
bWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtL3N5
c3RlbS5oIgoKCgojIDI0NSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4
LTIuNC54L2luY2x1ZGUvYXNtL3N5c3RlbS5oIgoKCgoKCgoKCgoKCgoKIyA0ICIvaG9tZS9jYXJs
b3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vYXRvbWljLmgi
IDIKCgogCgoKCgogCgoKCnR5cGVkZWYgc3RydWN0IHsgaW50IGNvdW50ZXI7IH0gYXRvbWljX3Q7
CgoKCgoKCgpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pY19hZGQoaW50IGksIGF0b21pY190
ICp2KQp7CglfX2FzbV9fIF9fdm9sYXRpbGVfXygKCQkibW92ZWwgJTEsJSVkMFx0XG4iCgkJImFk
ZGwgJSVkMCwlMCIKCQk6CgkJOiAibSIgKCp2KSwgImlkIiAoaSkKCQk6ICJkMCIpOwp9CgpzdGF0
aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pY19zdWIoaW50IGksIGF0b21pY190ICp2KQp7CglfX2Fz
bV9fIF9fdm9sYXRpbGVfXygKCQkibW92ZWwgJTEsJSVkMFx0XG4iCgkJInN1YmwgJSVkMCwlMCIK
CQk6CgkJOiAibSIgKCp2KSwgImlkIiAoaSkKCQk6ICJkMCIpOwp9CgojIDU1ICIvaG9tZS9jYXJs
b3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vYXRvbWljLmgi
CgoKc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWNfaW5jKHZvbGF0aWxlIGF0b21pY190ICp2
KQp7CglfX2FzbV9fIF9fdm9sYXRpbGVfXygiYWRkcWwgIzEsJTAiIDogIj1tIiAoKnYpOiAiMCIg
KCp2KSk7Cn0KCnN0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljX2RlYyh2b2xhdGlsZSBhdG9t
aWNfdCAqdikKewoJX19hc21fXyBfX3ZvbGF0aWxlX18oInN1YnFsICMxLCUwIiA6ICI9bSIgKCp2
KTogIjAiICgqdikpOwp9CgpzdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljX2RlY19hbmRfdGVz
dCh2b2xhdGlsZSBhdG9taWNfdCAqdikKewoJY2hhciBjOwoJX19hc21fXyBfX3ZvbGF0aWxlX18o
InN1YnFsICMxLCUxOyBzZXEgJTAiIDogIj1kIiAoYyksICI9bSIgKCp2KTogIjEiICgqdikpOwoJ
cmV0dXJuIGMgIT0gMDsKfQoKCgoKCgoKIAoKCgoKCmV4dGVybiBfX2lubGluZV9fIGludCBhdG9t
aWNfYWRkX3JldHVybihpbnQgaSwgYXRvbWljX3QgKiB2KQp7Cgl1bnNpZ25lZCBsb25nIHRlbXAs
IGZsYWdzOwoKCWRvIHsgYXNtIHZvbGF0aWxlICgibW92ZXcgJSVzciwlMCI6Ij1kIiAoICAgIGZs
YWdzICAgICkgOiA6ICJtZW1vcnkiKSAgOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICJtb3ZlICUv
c3IsJSVkMFxuXHQiICJvcmkubCAgIzB4MDcwMCwlJWQwXG5cdCIgIm1vdmUgJSVkMCwlL3NyXG4i
IDogOiA6ICJjYyIsICIlZDAiLCAibWVtb3J5IikgIDsgfSB3aGlsZSgwKSAgOwoJdGVtcCA9ICoo
bG9uZyAqKXY7Cgl0ZW1wICs9IGk7CgkqKGxvbmcgKil2ID0gdGVtcDsKCWFzbSB2b2xhdGlsZSAo
Im1vdmV3ICUwLCUlc3IiOiA6ImQiICggIGZsYWdzICApIDogIm1lbW9yeSIpICA7CgoJcmV0dXJu
IHRlbXA7Cn0KCmV4dGVybiBfX2lubGluZV9fIGludCBhdG9taWNfc3ViX3JldHVybihpbnQgaSwg
YXRvbWljX3QgKiB2KQp7Cgl1bnNpZ25lZCBsb25nIHRlbXAsIGZsYWdzOwoKCWRvIHsgYXNtIHZv
bGF0aWxlICgibW92ZXcgJSVzciwlMCI6Ij1kIiAoICAgIGZsYWdzICAgICkgOiA6ICJtZW1vcnki
KSAgOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICJtb3ZlICUvc3IsJSVkMFxuXHQiICJvcmkubCAg
IzB4MDcwMCwlJWQwXG5cdCIgIm1vdmUgJSVkMCwlL3NyXG4iIDogOiA6ICJjYyIsICIlZDAiLCAi
bWVtb3J5IikgIDsgfSB3aGlsZSgwKSAgOwoJdGVtcCA9ICoobG9uZyAqKXY7Cgl0ZW1wIC09IGk7
CgkqKGxvbmcgKil2ID0gdGVtcDsKCWFzbSB2b2xhdGlsZSAoIm1vdmV3ICUwLCUlc3IiOiA6ImQi
ICggIGZsYWdzICApIDogIm1lbW9yeSIpICA7CgoJcmV0dXJuIHRlbXA7Cn0KCgoKCgoKCgojIDI1
ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9s
aW51eC9tb2R1bGUuaCIgMgoKCiAKc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeTsKCiAKc3Ry
dWN0IGtlcm5lbF9zeW0KewoJdW5zaWduZWQgbG9uZyB2YWx1ZTsKCWNoYXIgbmFtZVs2MF07CQkg
Cn07CgpzdHJ1Y3QgbW9kdWxlX3N5bWJvbAp7Cgl1bnNpZ25lZCBsb25nIHZhbHVlOwoJY29uc3Qg
Y2hhciAqbmFtZTsKfTsKCnN0cnVjdCBtb2R1bGVfcmVmCnsKCXN0cnVjdCBtb2R1bGUgKmRlcDsJ
IAoJc3RydWN0IG1vZHVsZSAqcmVmOwkgCglzdHJ1Y3QgbW9kdWxlX3JlZiAqbmV4dF9yZWY7Cn07
CgogCnN0cnVjdCBtb2R1bGVfcGVyc2lzdDsKCnN0cnVjdCBtb2R1bGUKewoJdW5zaWduZWQgbG9u
ZyBzaXplX29mX3N0cnVjdDsJIAoJc3RydWN0IG1vZHVsZSAqbmV4dDsKCWNvbnN0IGNoYXIgKm5h
bWU7Cgl1bnNpZ25lZCBsb25nIHNpemU7CgoJdW5pb24KCXsKCQlhdG9taWNfdCB1c2Vjb3VudDsK
CQlsb25nIHBhZDsKCX0gdWM7CQkJCSAKCgl1bnNpZ25lZCBsb25nIGZsYWdzOwkJIAoKCXVuc2ln
bmVkIG5zeW1zOwoJdW5zaWduZWQgbmRlcHM7CgoJc3RydWN0IG1vZHVsZV9zeW1ib2wgKnN5bXM7
CglzdHJ1Y3QgbW9kdWxlX3JlZiAqZGVwczsKCXN0cnVjdCBtb2R1bGVfcmVmICpyZWZzOwoJaW50
ICgqaW5pdCkodm9pZCk7Cgl2b2lkICgqY2xlYW51cCkodm9pZCk7Cgljb25zdCBzdHJ1Y3QgZXhj
ZXB0aW9uX3RhYmxlX2VudHJ5ICpleF90YWJsZV9zdGFydDsKCWNvbnN0IHN0cnVjdCBleGNlcHRp
b25fdGFibGVfZW50cnkgKmV4X3RhYmxlX2VuZDsKCgoKCSAKCgoJY29uc3Qgc3RydWN0IG1vZHVs
ZV9wZXJzaXN0ICpwZXJzaXN0X3N0YXJ0OwoJY29uc3Qgc3RydWN0IG1vZHVsZV9wZXJzaXN0ICpw
ZXJzaXN0X2VuZDsKCWludCAoKmNhbl91bmxvYWQpKHZvaWQpOwoJaW50IHJ1bnNpemU7CQkJIAoJ
Y29uc3QgY2hhciAqa2FsbHN5bXNfc3RhcnQ7CSAKCWNvbnN0IGNoYXIgKmthbGxzeW1zX2VuZDsK
CWNvbnN0IGNoYXIgKmFyY2hkYXRhX3N0YXJ0OwkgCgljb25zdCBjaGFyICphcmNoZGF0YV9lbmQ7
Cgljb25zdCBjaGFyICprZXJuZWxfZGF0YTsJIAp9OwoKc3RydWN0IG1vZHVsZV9pbmZvCnsKCXVu
c2lnbmVkIGxvbmcgYWRkcjsKCXVuc2lnbmVkIGxvbmcgc2l6ZTsKCXVuc2lnbmVkIGxvbmcgZmxh
Z3M7Cglsb25nIHVzZWNvdW50Owp9OwoKIAoKCgoKCgoKCgoKIAoKCgoKCgoKIAoKCiAKCgoKCgoK
CiAKCgoKCgoKCgkgCgogCgoKCiAKCgoKIAoKCgoKCgoKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoK
CgpleHRlcm4gdm9pZCBpbnRlcl9tb2R1bGVfcmVnaXN0ZXIoY29uc3QgY2hhciAqLCBzdHJ1Y3Qg
bW9kdWxlICosIGNvbnN0IHZvaWQgKik7CmV4dGVybiB2b2lkIGludGVyX21vZHVsZV91bnJlZ2lz
dGVyKGNvbnN0IGNoYXIgKik7CmV4dGVybiBjb25zdCB2b2lkICppbnRlcl9tb2R1bGVfZ2V0KGNv
bnN0IGNoYXIgKik7CmV4dGVybiBjb25zdCB2b2lkICppbnRlcl9tb2R1bGVfZ2V0X3JlcXVlc3Qo
Y29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gdm9pZCBpbnRlcl9tb2R1bGVfcHV0
KGNvbnN0IGNoYXIgKik7CgpzdHJ1Y3QgaW50ZXJfbW9kdWxlX2VudHJ5IHsKCXN0cnVjdCBsaXN0
X2hlYWQgbGlzdDsKCWNvbnN0IGNoYXIgKmltX25hbWU7CglzdHJ1Y3QgbW9kdWxlICpvd25lcjsK
CWNvbnN0IHZvaWQgKnVzZXJkYXRhOwp9OwoKZXh0ZXJuIGludCB0cnlfaW5jX21vZF9jb3VudChz
dHJ1Y3QgbW9kdWxlICptb2QpOwoKCiMgMzA1ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgv
ZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9tb2R1bGUuaCIKCgoKCgoKCgoKIAoKCgoK
CgoKCgoKCgoKCgpleHRlcm4gc3RydWN0IG1vZHVsZSAqbW9kdWxlX2xpc3Q7CgoKCgoKCgoKIAoK
CgoKCgoKCiMgMzU5ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40
LngvaW5jbHVkZS9saW51eC9tb2R1bGUuaCIKCgoKCgoKCiMgMzk5ICIvaG9tZS9jYXJsb3MvQnVp
bGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9tb2R1bGUuaCIKCgoK
CgoKCgoKCgoKCgoKCiMgMTIgImRyaXZlcnMvdmlkZW8vZmJjb24tY2ZiMTYuYyIgMgoKIyAxICIv
aG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51
eC90dHkuaCIgMQoKCgogCgoKCiAKCgoKCgoKCQkgCgoKCgojIDEgIi9ob21lL2Nhcmxvcy9CdWls
ZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDEKCgoKIAoK
CgoKCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9p
bmNsdWRlL2xpbnV4L2xpbWl0cy5oIiAxCgoKCgoKCgoKCgoKCgoKCgoKCgojIDExICIvaG9tZS9j
YXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9mcy5o
IiAyCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9p
bmNsdWRlL2xpbnV4L3dhaXQuaCIgMQoKCgoKCgoKCgoKCgojIDEgIi9ob21lL2Nhcmxvcy9CdWls
ZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIiAxCgoK
CiAKCgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvbTY4ay1lbGYvMi45NS4zL2luY2x1
ZGUvc3RkYXJnLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgp0eXBlZGVmIHZvaWQgKl9fZ251Y192YV9s
aXN0OwoKCgogCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgp2b2lkIHZhX2VuZCAoX19nbnVjX3ZhX2xp
c3QpOwkJIAoKCiAKCgoKCgoKCgogCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAog
CgoKCgoKCgoKCgoKCgojIDE3NSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9tNjhrLWVsZi8yLjk1
LjMvaW5jbHVkZS9zdGRhcmcuaCIKCgogCgoKCgogCgogCgogCgp0eXBlZGVmIF9fZ251Y192YV9s
aXN0IHZhX2xpc3Q7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMTAgIi9ob21lL2Nhcmxvcy9C
dWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIiAy
CgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5j
bHVkZS9saW51eC9zdGRkZWYuaCIgMQoKCgoKCgoKCgoKCgoKCiMgMTIgIi9ob21lL2Nhcmxvcy9C
dWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIiAy
CgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNs
dWRlL2xpbnV4L3R5cGVzLmgiIDEKCgoKCgoKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJ
TlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvcG9zaXhfdHlwZXMuaCIgMQoKCgoK
CiAKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgewoJdW5zaWdu
ZWQgbG9uZyBmZHNfYml0cyBbKDEwMjQgLyAoOCAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkgKSBd
Owp9IF9fa2VybmVsX2ZkX3NldDsKCiAKdHlwZWRlZiB2b2lkICgqX19rZXJuZWxfc2lnaGFuZGxl
cl90KShpbnQpOwoKIAp0eXBlZGVmIGludCBfX2tlcm5lbF9rZXlfdDsKCiMgMSAiL2hvbWUvY2Fy
bG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtL3Bvc2l4X3R5
cGVzLmgiIDEKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40
LngvaW5jbHVkZS9hc20tbTY4ay9wb3NpeF90eXBlcy5oIiAxCgoKCiAKCgoKCgp0eXBlZGVmIHVu
c2lnbmVkIHNob3J0CV9fa2VybmVsX2Rldl90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcJX19rZXJu
ZWxfaW5vX3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfbW9kZV90Owp0eXBlZGVm
IHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX25saW5rX3Q7CnR5cGVkZWYgbG9uZwkJX19rZXJuZWxf
b2ZmX3Q7CnR5cGVkZWYgaW50CQlfX2tlcm5lbF9waWRfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9y
dAlfX2tlcm5lbF9pcGNfcGlkX3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfdWlk
X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQJX19rZXJuZWxfZ2lkX3Q7CnR5cGVkZWYgdW5zaWdu
ZWQgaW50CV9fa2VybmVsX3NpemVfdDsKdHlwZWRlZiBpbnQJCV9fa2VybmVsX3NzaXplX3Q7CnR5
cGVkZWYgaW50CQlfX2tlcm5lbF9wdHJkaWZmX3Q7CnR5cGVkZWYgbG9uZwkJX19rZXJuZWxfdGlt
ZV90Owp0eXBlZGVmIGxvbmcJCV9fa2VybmVsX3N1c2Vjb25kc190Owp0eXBlZGVmIGxvbmcJCV9f
a2VybmVsX2Nsb2NrX3Q7CnR5cGVkZWYgaW50CQlfX2tlcm5lbF9kYWRkcl90Owp0eXBlZGVmIGNo
YXIgKgkJX19rZXJuZWxfY2FkZHJfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF91
aWQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX2dpZDE2X3Q7CnR5cGVkZWYg
dW5zaWduZWQgaW50CV9fa2VybmVsX3VpZDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50CV9fa2Vy
bmVsX2dpZDMyX3Q7Cgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0CV9fa2VybmVsX29sZF91aWRfdDsK
dHlwZWRlZiB1bnNpZ25lZCBzaG9ydAlfX2tlcm5lbF9vbGRfZ2lkX3Q7CgoKdHlwZWRlZiBsb25n
IGxvbmcJX19rZXJuZWxfbG9mZl90OwoKCnR5cGVkZWYgc3RydWN0IHsKCglpbnQJdmFsWzJdOwoK
Cgp9IF9fa2VybmVsX2ZzaWRfdDsKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvaG9tZS9jYXJsb3Mv
QnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vcG9zaXhfdHlwZXMu
aCIgMgoKIyA0NiAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54
L2luY2x1ZGUvbGludXgvcG9zaXhfdHlwZXMuaCIgMgoKCgojIDggIi9ob21lL2Nhcmxvcy9CdWls
ZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L3R5cGVzLmgiIDIKCiMg
MSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUv
YXNtL3R5cGVzLmgiIDEKCgoKIAoKCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1bW9kZV90
OwoKIAoKCgoKdHlwZWRlZiBfX3NpZ25lZF9fIGNoYXIgX19zODsKdHlwZWRlZiB1bnNpZ25lZCBj
aGFyIF9fdTg7Cgp0eXBlZGVmIF9fc2lnbmVkX18gc2hvcnQgX19zMTY7CnR5cGVkZWYgdW5zaWdu
ZWQgc2hvcnQgX191MTY7Cgp0eXBlZGVmIF9fc2lnbmVkX18gaW50IF9fczMyOwp0eXBlZGVmIHVu
c2lnbmVkIGludCBfX3UzMjsKCgp0eXBlZGVmIF9fc2lnbmVkX18gbG9uZyBsb25nIF9fczY0Owp0
eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3U2NDsKCgogCgoKCgp0eXBlZGVmIHNpZ25lZCBj
aGFyIHM4Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdTg7Cgp0eXBlZGVmIHNpZ25lZCBzaG9ydCBz
MTY7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdTE2OwoKdHlwZWRlZiBzaWduZWQgaW50IHMzMjsK
dHlwZWRlZiB1bnNpZ25lZCBpbnQgdTMyOwoKdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIHM2NDsK
dHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdTY0OwoKCgogCgp0eXBlZGVmIHUzMiBkbWFfYWRk
cl90OwoKCgoKIyA5ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40
LngvaW5jbHVkZS9saW51eC90eXBlcy5oIiAyCgoKCgp0eXBlZGVmIF9fa2VybmVsX2ZkX3NldAkJ
ZmRfc2V0Owp0eXBlZGVmIF9fa2VybmVsX2Rldl90CQlkZXZfdDsKdHlwZWRlZiBfX2tlcm5lbF9p
bm9fdAkJaW5vX3Q7CnR5cGVkZWYgX19rZXJuZWxfbW9kZV90CQltb2RlX3Q7CnR5cGVkZWYgX19r
ZXJuZWxfbmxpbmtfdAlubGlua190Owp0eXBlZGVmIF9fa2VybmVsX29mZl90CQlvZmZfdDsKdHlw
ZWRlZiBfX2tlcm5lbF9waWRfdAkJcGlkX3Q7CnR5cGVkZWYgX19rZXJuZWxfZGFkZHJfdAlkYWRk
cl90Owp0eXBlZGVmIF9fa2VybmVsX2tleV90CQlrZXlfdDsKdHlwZWRlZiBfX2tlcm5lbF9zdXNl
Y29uZHNfdAlzdXNlY29uZHNfdDsKCgp0eXBlZGVmIF9fa2VybmVsX3VpZDMyX3QJdWlkX3Q7CnR5
cGVkZWYgX19rZXJuZWxfZ2lkMzJfdAlnaWRfdDsKdHlwZWRlZiBfX2tlcm5lbF91aWQxNl90ICAg
ICAgICB1aWQxNl90Owp0eXBlZGVmIF9fa2VybmVsX2dpZDE2X3QgICAgICAgIGdpZDE2X3Q7CgoK
IAp0eXBlZGVmIF9fa2VybmVsX29sZF91aWRfdAlvbGRfdWlkX3Q7CnR5cGVkZWYgX19rZXJuZWxf
b2xkX2dpZF90CW9sZF9naWRfdDsKCgogCgoKCgoKCgoKdHlwZWRlZiBfX2tlcm5lbF9sb2ZmX3QJ
CWxvZmZfdDsKCgogCgoKCgoKdHlwZWRlZiBfX2tlcm5lbF9zaXplX3QJCXNpemVfdDsKCgoKCnR5
cGVkZWYgX19rZXJuZWxfc3NpemVfdAlzc2l6ZV90OwoKCgoKdHlwZWRlZiBfX2tlcm5lbF9wdHJk
aWZmX3QJcHRyZGlmZl90OwoKCgoKdHlwZWRlZiBfX2tlcm5lbF90aW1lX3QJCXRpbWVfdDsKCgoK
CnR5cGVkZWYgX19rZXJuZWxfY2xvY2tfdAljbG9ja190OwoKCgoKdHlwZWRlZiBfX2tlcm5lbF9j
YWRkcl90CWNhZGRyX3Q7CgoKIAp0eXBlZGVmIHVuc2lnbmVkIGNoYXIJCXVfY2hhcjsKdHlwZWRl
ZiB1bnNpZ25lZCBzaG9ydAkJdV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQJCXVfaW50Owp0
eXBlZGVmIHVuc2lnbmVkIGxvbmcJCXVfbG9uZzsKCiAKdHlwZWRlZiB1bnNpZ25lZCBjaGFyCQl1
bmNoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQJCXVzaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBp
bnQJCXVpbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZwkJdWxvbmc7CgoKCgp0eXBlZGVmCQlfX3U4
CQl1X2ludDhfdDsKdHlwZWRlZgkJX19zOAkJaW50OF90Owp0eXBlZGVmCQlfX3UxNgkJdV9pbnQx
Nl90Owp0eXBlZGVmCQlfX3MxNgkJaW50MTZfdDsKdHlwZWRlZgkJX191MzIJCXVfaW50MzJfdDsK
dHlwZWRlZgkJX19zMzIJCWludDMyX3Q7CgoKCnR5cGVkZWYJCV9fdTgJCXVpbnQ4X3Q7CnR5cGVk
ZWYJCV9fdTE2CQl1aW50MTZfdDsKdHlwZWRlZgkJX191MzIJCXVpbnQzMl90OwoKCnR5cGVkZWYJ
CV9fdTY0CQl1aW50NjRfdDsKdHlwZWRlZgkJX191NjQJCXVfaW50NjRfdDsKdHlwZWRlZgkJX19z
NjQJCWludDY0X3Q7CgoKCgogCgoKCgpzdHJ1Y3QgdXN0YXQgewoJX19rZXJuZWxfZGFkZHJfdAlm
X3RmcmVlOwoJX19rZXJuZWxfaW5vX3QJCWZfdGlub2RlOwoJY2hhcgkJCWZfZm5hbWVbNl07Cglj
aGFyCQkJZl9mcGFja1s2XTsKfTsKCgojIDEzICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgv
ZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9rZXJuZWwuaCIgMgoKCiAKIAoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnN0cnVjdCBjb21wbGV0aW9uOwoKZXh0ZXJuIHN0cnVj
dCBub3RpZmllcl9ibG9jayAqcGFuaWNfbm90aWZpZXJfbGlzdDsKICB2b2lkIHBhbmljKGNvbnN0
IGNoYXIgKiBmbXQsIC4uLikKCV9fYXR0cmlidXRlX18gKChub3JldHVybiwgIGZvcm1hdCAocHJp
bnRmLCAxLCAyKSkpOwogICAgIHZvaWQgZG9fZXhpdChsb25nIGVycm9yX2NvZGUpCglfX2F0dHJp
YnV0ZV9fKChub3JldHVybikpIDsKICB2b2lkIGNvbXBsZXRlX2FuZF9leGl0KHN0cnVjdCBjb21w
bGV0aW9uICosIGxvbmcpCglfX2F0dHJpYnV0ZV9fKChub3JldHVybikpIDsKZXh0ZXJuIGludCBh
YnMoaW50KTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2ltcGxlX3N0cnRvdWwoY29uc3QgY2hhciAq
LGNoYXIgKiosdW5zaWduZWQgaW50KTsKZXh0ZXJuIGxvbmcgc2ltcGxlX3N0cnRvbChjb25zdCBj
aGFyICosY2hhciAqKix1bnNpZ25lZCBpbnQpOwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIHNp
bXBsZV9zdHJ0b3VsbChjb25zdCBjaGFyICosY2hhciAqKix1bnNpZ25lZCBpbnQpOwpleHRlcm4g
bG9uZyBsb25nIHNpbXBsZV9zdHJ0b2xsKGNvbnN0IGNoYXIgKixjaGFyICoqLHVuc2lnbmVkIGlu
dCk7CmV4dGVybiBpbnQgc3ByaW50ZihjaGFyICogYnVmLCBjb25zdCBjaGFyICogZm10LCAuLi4p
CglfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDIsIDMpKSk7CmV4dGVybiBpbnQgdnNw
cmludGYoY2hhciAqYnVmLCBjb25zdCBjaGFyICosIHZhX2xpc3QpOwpleHRlcm4gaW50IHNucHJp
bnRmKGNoYXIgKiBidWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICogZm10LCAuLi4pCglfX2F0
dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDMsIDQpKSk7CmV4dGVybiBpbnQgdnNucHJpbnRm
KGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKTsK
CmV4dGVybiBpbnQgc3NjYW5mKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pCglfX2F0
dHJpYnV0ZV9fICgoZm9ybWF0IChzY2FuZiwyLDMpKSk7CmV4dGVybiBpbnQgdnNzY2FuZihjb25z
dCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CgpleHRlcm4gaW50IGdldF9vcHRpb24o
Y2hhciAqKnN0ciwgaW50ICpwaW50KTsKZXh0ZXJuIGNoYXIgKmdldF9vcHRpb25zKGNoYXIgKnN0
ciwgaW50IG5pbnRzLCBpbnQgKmludHMpOwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIG1lbXBh
cnNlKGNoYXIgKnB0ciwgY2hhciAqKnJldHB0cik7CmV4dGVybiB2b2lkIGRldl9wcm9iZV9sb2Nr
KHZvaWQpOwpleHRlcm4gdm9pZCBkZXZfcHJvYmVfdW5sb2NrKHZvaWQpOwoKZXh0ZXJuIGludCBz
ZXNzaW9uX29mX3BncnAoaW50IHBncnApOwoKICAgaW50IHByaW50ayhjb25zdCBjaGFyICogZm10
LCAuLi4pCglfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CgpleHRlcm4g
aW50IGNvbnNvbGVfbG9nbGV2ZWw7CgpzdGF0aWMgaW5saW5lIHZvaWQgY29uc29sZV9zaWxlbnQo
dm9pZCkKewoJY29uc29sZV9sb2dsZXZlbCA9IDA7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBjb25z
b2xlX3ZlcmJvc2Uodm9pZCkKewoJaWYgKGNvbnNvbGVfbG9nbGV2ZWwpCgkJY29uc29sZV9sb2ds
ZXZlbCA9IDE1Owp9CgpleHRlcm4gdm9pZCBidXN0X3NwaW5sb2NrcyhpbnQgeWVzKTsKZXh0ZXJu
IGludCBvb3BzX2luX3Byb2dyZXNzOwkJIAoKZXh0ZXJuIGludCB0YWludGVkOwpleHRlcm4gY29u
c3QgY2hhciAqcHJpbnRfdGFpbnRlZCh2b2lkKTsKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoK
CgogCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgpzdHJ1Y3Qgc3lzaW5mbyB7Cglsb25n
IHVwdGltZTsJCQkgCgl1bnNpZ25lZCBsb25nIGxvYWRzWzNdOwkJIAoJdW5zaWduZWQgbG9uZyB0
b3RhbHJhbTsJCSAKCXVuc2lnbmVkIGxvbmcgZnJlZXJhbTsJCSAKCXVuc2lnbmVkIGxvbmcgc2hh
cmVkcmFtOwkgCgl1bnNpZ25lZCBsb25nIGJ1ZmZlcnJhbTsJIAoJdW5zaWduZWQgbG9uZyB0b3Rh
bHN3YXA7CSAKCXVuc2lnbmVkIGxvbmcgZnJlZXN3YXA7CQkgCgl1bnNpZ25lZCBzaG9ydCBwcm9j
czsJCSAKCXVuc2lnbmVkIHNob3J0IHBhZDsJCSAKCXVuc2lnbmVkIGxvbmcgdG90YWxoaWdoOwkg
Cgl1bnNpZ25lZCBsb25nIGZyZWVoaWdoOwkJIAoJdW5zaWduZWQgaW50IG1lbV91bml0OwkJIAoJ
Y2hhciBfZlsyMC0yKnNpemVvZihsb25nKS1zaXplb2YoaW50KV07CSAKfTsKCgojIDEzICIvaG9t
ZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC93
YWl0LmgiIDIKCgoKCgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGlu
dXgtMi40LngvaW5jbHVkZS9hc20vcGFnZS5oIiAxCgoKCgoKIAoKCgoKCgoKIyAxICIvaG9tZS9j
YXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vc2V0dXAu
aCIgMQojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9p
bmNsdWRlL2FzbS1tNjhrL3NldHVwLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgog
ICAgIAoKCgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBtNjhrX21hY2h0eXBl
OwoKCgoKIyA2MiAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54
L2luY2x1ZGUvYXNtLW02OGsvc2V0dXAuaCIKCgoKCiMgNzUgIi9ob21lL2Nhcmxvcy9CdWlsZHMv
VUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2FzbS1tNjhrL3NldHVwLmgiCgoKCgoj
IDg4ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVk
ZS9hc20tbTY4ay9zZXR1cC5oIgoKCgoKCgoKCgoKCgojIDEwOSAiL2hvbWUvY2FybG9zL0J1aWxk
cy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtLW02OGsvc2V0dXAuaCIKCgoK
CiMgMTIyICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5j
bHVkZS9hc20tbTY4ay9zZXR1cC5oIgoKCgoKIyAxMzUgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNM
SU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2FzbS1tNjhrL3NldHVwLmgiCgoKCgojIDE0
OCAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUv
YXNtLW02OGsvc2V0dXAuaCIKCgoKCiMgMTYxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgv
ZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20tbTY4ay9zZXR1cC5oIgoKCgoKIyAxNzQgIi9o
b21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2FzbS1t
NjhrL3NldHVwLmgiCgoKCgojIDE4NyAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11
Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtLW02OGsvc2V0dXAuaCIKCgoKCgoKCgoKICAgICAKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiB1bnNp
Z25lZCBsb25nIG02OGtfY3B1dHlwZTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbTY4a19mcHV0eXBl
OwpleHRlcm4gdW5zaWduZWQgbG9uZyBtNjhrX21tdXR5cGU7CQkgCgoKCgogICAgIAoKCgoKZXh0
ZXJuIGludCBtNjhrX2lzMDQwb3IwNjA7CgoKCgoKCiMgMjc5ICIvaG9tZS9jYXJsb3MvQnVpbGRz
L1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20tbTY4ay9zZXR1cC5oIgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAzMjcgIi9ob21lL2Nhcmxvcy9C
dWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2FzbS1tNjhrL3NldHVwLmgi
CgoKCgojIDMzOSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54
L2luY2x1ZGUvYXNtLW02OGsvc2V0dXAuaCIKCgoKCgoKCgoKCgoKCgoKICAgICAKCgoKCgoKCmV4
dGVybiBpbnQgbTY4a19udW1fbWVtb3J5OwkJIApleHRlcm4gaW50IG02OGtfcmVhbG51bV9tZW1v
cnk7CQkgCmV4dGVybiBzdHJ1Y3QgbWVtX2luZm8gbTY4a19tZW1vcnlbNCBdOyAKCnN0cnVjdCBt
ZW1faW5mbyB7Cgl1bnNpZ25lZCBsb25nIGFkZHI7CQkgCgl1bnNpZ25lZCBsb25nIHNpemU7CQkg
Cn07CgoKCgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40
LngvaW5jbHVkZS9hc20vc2V0dXAuaCIgMgoKIyAxNCAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJ
TlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtL3BhZ2UuaCIgMgoKCgoKCgoKIAoKIAoK
CgoKCgoKCgogCgoKdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHB0ZTsgfSBwdGVfdDsK
dHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBtZFsxNl07IH0gcG1kX3Q7CnR5cGVkZWYg
c3RydWN0IHsgdW5zaWduZWQgbG9uZyBwZ2Q7IH0gcGdkX3Q7CnR5cGVkZWYgc3RydWN0IHsgdW5z
aWduZWQgbG9uZyBwZ3Byb3Q7IH0gcGdwcm90X3Q7CgoKCgoKCgoKCgoKIAoKCiAKZXh0ZXJuIF9f
aW5saW5lX18gaW50IGdldF9vcmRlcih1bnNpZ25lZCBsb25nIHNpemUpCnsKCWludCBvcmRlcjsK
CglzaXplID0gKHNpemUtMSkgPj4gKCgxMikgLTEpOwoJb3JkZXIgPSAtMTsKCWRvIHsKCQlzaXpl
ID4+PSAxOwoJCW9yZGVyKys7Cgl9IHdoaWxlIChzaXplKTsKCXJldHVybiBvcmRlcjsKfQoKCgoj
IDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRl
L2FzbS9wYWdlX29mZnNldC5oIiAxCgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgv
ZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vc2hnbGNvcmUuaCIgMQoKIAoKCgoKCgoKIyA2
MyAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUv
YXNtL3NoZ2xjb3JlLmgiCgoKCiMgMyAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11
Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtL3BhZ2Vfb2Zmc2V0LmgiIDIKCgogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDcwICIvaG9tZS9jYXJsb3MvQnVp
bGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vcGFnZS5oIiAyCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCiAKIAoKCgoKCgoKCgoKCgoKCgoKCiMgMTkgIi9ob21lL2Nhcmxvcy9C
dWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L3dhaXQuaCIgMgoK
CgogCgoKCgoKCgoKc3RydWN0IF9fd2FpdF9xdWV1ZSB7Cgl1bnNpZ25lZCBpbnQgZmxhZ3M7CgoJ
c3RydWN0IHRhc2tfc3RydWN0ICogdGFzazsKCXN0cnVjdCBsaXN0X2hlYWQgdGFza19saXN0OwoK
CgoKfTsKdHlwZWRlZiBzdHJ1Y3QgX193YWl0X3F1ZXVlIHdhaXRfcXVldWVfdDsKCiAKCgoKCgoK
CiMgNjMgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNs
dWRlL2xpbnV4L3dhaXQuaCIKCgoKCgoKCgoKCgoKCgpzdHJ1Y3QgX193YWl0X3F1ZXVlX2hlYWQg
ewoJc3BpbmxvY2tfdCAgbG9jazsKCXN0cnVjdCBsaXN0X2hlYWQgdGFza19saXN0OwoKCgoKfTsK
dHlwZWRlZiBzdHJ1Y3QgX193YWl0X3F1ZXVlX2hlYWQgd2FpdF9xdWV1ZV9oZWFkX3Q7CgoKIAoK
CgojIDExOSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2lu
Y2x1ZGUvbGludXgvd2FpdC5oIgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
c3RhdGljIGlubGluZSB2b2lkIGluaXRfd2FpdHF1ZXVlX2hlYWQod2FpdF9xdWV1ZV9oZWFkX3Qg
KnEpCnsKCgoKCglxLT5sb2NrID0gKHNwaW5sb2NrX3QpIHsgMCB9ICA7CglkbyB7ICggJnEtPnRh
c2tfbGlzdCApLT5uZXh0ID0gKCAmcS0+dGFza19saXN0ICk7ICggJnEtPnRhc2tfbGlzdCApLT5w
cmV2ID0gKCAmcS0+dGFza19saXN0ICk7IH0gd2hpbGUgKDApIDsKCgoKCn0KCnN0YXRpYyBpbmxp
bmUgdm9pZCBpbml0X3dhaXRxdWV1ZV9lbnRyeSh3YWl0X3F1ZXVlX3QgKnEsIHN0cnVjdCB0YXNr
X3N0cnVjdCAqcCkKewoKCgoKCXEtPmZsYWdzID0gMDsKCXEtPnRhc2sgPSBwOwoKCgp9CgpzdGF0
aWMgaW5saW5lIGludCB3YWl0cXVldWVfYWN0aXZlKHdhaXRfcXVldWVfaGVhZF90ICpxKQp7CgoK
CgoKCglyZXR1cm4gIWxpc3RfZW1wdHkoJnEtPnRhc2tfbGlzdCk7Cn0KCnN0YXRpYyBpbmxpbmUg
dm9pZCBfX2FkZF93YWl0X3F1ZXVlKHdhaXRfcXVldWVfaGVhZF90ICpoZWFkLCB3YWl0X3F1ZXVl
X3QgKm5ldykKewoKCgoKCgoKCglsaXN0X2FkZCgmbmV3LT50YXNrX2xpc3QsICZoZWFkLT50YXNr
X2xpc3QpOwp9CgogCgoKc3RhdGljIGlubGluZSB2b2lkIF9fYWRkX3dhaXRfcXVldWVfdGFpbCh3
YWl0X3F1ZXVlX2hlYWRfdCAqaGVhZCwKCQkJCQkJd2FpdF9xdWV1ZV90ICpuZXcpCnsKCgoKCgoK
CgoJbGlzdF9hZGRfdGFpbCgmbmV3LT50YXNrX2xpc3QsICZoZWFkLT50YXNrX2xpc3QpOwp9Cgpz
dGF0aWMgaW5saW5lIHZvaWQgX19yZW1vdmVfd2FpdF9xdWV1ZSh3YWl0X3F1ZXVlX2hlYWRfdCAq
aGVhZCwKCQkJCQkJCXdhaXRfcXVldWVfdCAqb2xkKQp7CgoKCgoKCWxpc3RfZGVsKCZvbGQtPnRh
c2tfbGlzdCk7Cn0KCgoKCiMgMTIgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNs
aW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCgojIDEgIi9ob21lL2Nhcmxvcy9CdWls
ZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L3Zmcy5oIiAxCgoKCiMg
MSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUv
YXNtL3N0YXRmcy5oIiAxCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xp
bnV4LTIuNC54L2luY2x1ZGUvYXNtLW02OGsvc3RhdGZzLmgiIDEKCgoKCgoKCnR5cGVkZWYgX19r
ZXJuZWxfZnNpZF90CWZzaWRfdDsKCgoKc3RydWN0IHN0YXRmcyB7Cglsb25nIGZfdHlwZTsKCWxv
bmcgZl9ic2l6ZTsKCWxvbmcgZl9ibG9ja3M7Cglsb25nIGZfYmZyZWU7Cglsb25nIGZfYmF2YWls
OwoJbG9uZyBmX2ZpbGVzOwoJbG9uZyBmX2ZmcmVlOwoJX19rZXJuZWxfZnNpZF90IGZfZnNpZDsK
CWxvbmcgZl9uYW1lbGVuOwoJbG9uZyBmX3NwYXJlWzZdOwp9OwoKCiMgMSAiL2hvbWUvY2FybG9z
L0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtL3N0YXRmcy5oIiAy
CgojIDQgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNs
dWRlL2xpbnV4L3Zmcy5oIiAyCgoKCiMgMTQgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9l
Y2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCiMgMSAiL2hvbWUvY2FybG9z
L0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvbmV0LmgiIDEK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2Vj
bC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvc29ja2V0LmgiIDEKCgoKCgojIDEgIi9ob21l
L2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2FzbS9zb2Nr
ZXQuaCIgMQojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQu
eC9pbmNsdWRlL2FzbS1tNjhrL3NvY2tldC5oIiAxCgoKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxk
cy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtL3NvY2tpb3MuaCIgMQojIDEg
Ii9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2Fz
bS1tNjhrL3NvY2tpb3MuaCIgMQoKCgogCgoKCgoKCgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRz
L1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vc29ja2lvcy5oIiAyCgojIDQg
Ii9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2Fz
bS1tNjhrL3NvY2tldC5oIiAyCgoKIAoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIAoKCgoKCgog
CgoKCgoKCgoKCiAKCiAKCgoKCgoKCQkJCQkgCgkJCQkJIAoJCQkJCSAKCQkJCQkgCgoKCgojIDEg
Ii9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2Fz
bS9zb2NrZXQuaCIgMgoKIyA2ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGlu
dXgtMi40LngvaW5jbHVkZS9saW51eC9zb2NrZXQuaCIgMgoKIyAxICIvaG9tZS9jYXJsb3MvQnVp
bGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9zb2NraW9zLmgiIDEK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNs
LXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vc29ja2lvcy5oIiAxCgojIDIxICIvaG9tZS9jYXJs
b3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9zb2NraW9z
LmgiIDIKCgogCgoKCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKIAoJCSAgICAgCgoKCgogCgoKCgogCgoKCgogCgoKCgoKCgogCgoKCgoK
CgoJCQkKIAoKIAoKCgoKCgoKIAoKCiAKCgogCgoKIyA3ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VD
TElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9zb2NrZXQuaCIgMgoKIyAxICIv
aG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51
eC91aW8uaCIgMQoKCgoKCiAKCgoKCgoKCgoKIAoKCnN0cnVjdCBpb3ZlYwp7Cgl2b2lkICppb3Zf
YmFzZTsJCSAKCV9fa2VybmVsX3NpemVfdCBpb3ZfbGVuOyAgCn07CgogCgoKIAoKCgoKCgoKCgoj
IDggIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRl
L2xpbnV4L3NvY2tldC5oIiAyCgoKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQJc2FfZmFtaWx5X3Q7
CgogCgoKIApzdHJ1Y3Qgc29ja2FkZHIgewoJc2FfZmFtaWx5X3QJc2FfZmFtaWx5OwkgCgljaGFy
CQlzYV9kYXRhWzE0XTsJIAp9OwoKc3RydWN0IGxpbmdlciB7CglpbnQJCWxfb25vZmY7CSAKCWlu
dAkJbF9saW5nZXI7CSAKfTsKCiAKCgoKCiAKc3RydWN0IG1zZ2hkciB7Cgl2b2lkCSoJbXNnX25h
bWU7CSAKCWludAkJbXNnX25hbWVsZW47CSAKCXN0cnVjdCBpb3ZlYyAqCW1zZ19pb3Y7CSAKCV9f
a2VybmVsX3NpemVfdAltc2dfaW92bGVuOwkgCgl2b2lkIAkqCW1zZ19jb250cm9sOwkgCglfX2tl
cm5lbF9zaXplX3QJbXNnX2NvbnRyb2xsZW47CSAKCXVuc2lnbmVkCW1zZ19mbGFnczsKfTsKCiAK
CgoKCgpzdHJ1Y3QgY21zZ2hkciB7CglfX2tlcm5lbF9zaXplX3QJY21zZ19sZW47CSAKICAgICAg
ICBpbnQJCWNtc2dfbGV2ZWw7CSAKICAgICAgICBpbnQJCWNtc2dfdHlwZTsJIAp9OwoKIAoKCgoK
CgoKCgoKCgoKCgoKCgogCgoKIAoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgogCnN0YXRpYyBpbmxp
bmUgIHN0cnVjdCBjbXNnaGRyICogX19jbXNnX254dGhkcih2b2lkICpfX2N0bCwgX19rZXJuZWxf
c2l6ZV90IF9fc2l6ZSwKCQkJCQkgICAgICAgc3RydWN0IGNtc2doZHIgKl9fY21zZykKewoJc3Ry
dWN0IGNtc2doZHIgKiBfX3B0cjsKCglfX3B0ciA9IChzdHJ1Y3QgY21zZ2hkciopKCgodW5zaWdu
ZWQgY2hhciAqKSBfX2Ntc2cpICsgICggKCggX19jbXNnLT5jbXNnX2xlbiApK3NpemVvZihsb25n
KS0xKSAmIH4oc2l6ZW9mKGxvbmcpLTEpICkgKTsKCWlmICgodW5zaWduZWQgbG9uZykoKGNoYXIq
KShfX3B0cisxKSAtIChjaGFyICopIF9fY3RsKSA+IF9fc2l6ZSkKCQlyZXR1cm4gKHN0cnVjdCBj
bXNnaGRyICopMDsKCglyZXR1cm4gX19wdHI7Cn0KCnN0YXRpYyBpbmxpbmUgIHN0cnVjdCBjbXNn
aGRyICogY21zZ19ueHRoZHIgKHN0cnVjdCBtc2doZHIgKl9fbXNnLCBzdHJ1Y3QgY21zZ2hkciAq
X19jbXNnKQp7CglyZXR1cm4gX19jbXNnX254dGhkcihfX21zZy0+bXNnX2NvbnRyb2wsIF9fbXNn
LT5tc2dfY29udHJvbGxlbiwgX19jbXNnKTsKfQoKIAoKCgoKCnN0cnVjdCB1Y3JlZCB7CglfX3Uz
MglwaWQ7CglfX3UzMgl1aWQ7CglfX3UzMglnaWQ7Cn07CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKIAoKCiAKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgpleHRlcm4gaW50
IG1lbWNweV9mcm9taW92ZWModW5zaWduZWQgY2hhciAqa2RhdGEsIHN0cnVjdCBpb3ZlYyAqaW92
LCBpbnQgbGVuKTsKZXh0ZXJuIGludCBtZW1jcHlfZnJvbWlvdmVjZW5kKHVuc2lnbmVkIGNoYXIg
KmtkYXRhLCBzdHJ1Y3QgaW92ZWMgKmlvdiwgCgkJCQlpbnQgb2Zmc2V0LCBpbnQgbGVuKTsKZXh0
ZXJuIGludCBjc3VtX3BhcnRpYWxfY29weV9mcm9taW92ZWNlbmQodW5zaWduZWQgY2hhciAqa2Rh
dGEsIAoJCQkJCSAgc3RydWN0IGlvdmVjICppb3YsIAoJCQkJCSAgaW50IG9mZnNldCwgCgkJCQkJ
ICB1bnNpZ25lZCBpbnQgbGVuLCBpbnQgKmNzdW1wKTsKCmV4dGVybiBpbnQgdmVyaWZ5X2lvdmVj
KHN0cnVjdCBtc2doZHIgKm0sIHN0cnVjdCBpb3ZlYyAqaW92LCBjaGFyICphZGRyZXNzLCBpbnQg
bW9kZSk7CmV4dGVybiBpbnQgbWVtY3B5X3RvaW92ZWMoc3RydWN0IGlvdmVjICp2LCB1bnNpZ25l
ZCBjaGFyICprZGF0YSwgaW50IGxlbik7CmV4dGVybiB2b2lkIG1lbWNweV90b2tlcm5lbGlvdmVj
KHN0cnVjdCBpb3ZlYyAqaW92LCB1bnNpZ25lZCBjaGFyICprZGF0YSwgaW50IGxlbik7CmV4dGVy
biBpbnQgbW92ZV9hZGRyX3RvX3VzZXIodm9pZCAqa2FkZHIsIGludCBrbGVuLCB2b2lkICp1YWRk
ciwgaW50ICp1bGVuKTsKZXh0ZXJuIGludCBtb3ZlX2FkZHJfdG9fa2VybmVsKHZvaWQgKnVhZGRy
LCBpbnQgdWxlbiwgdm9pZCAqa2FkZHIpOwpleHRlcm4gaW50IHB1dF9jbXNnKHN0cnVjdCBtc2do
ZHIqLCBpbnQgbGV2ZWwsIGludCB0eXBlLCBpbnQgbGVuLCB2b2lkICpkYXRhKTsKCgoKIyAyMiAi
L2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGlu
dXgvbmV0LmgiIDIKCgoKc3RydWN0IHBvbGxfdGFibGVfc3RydWN0OwoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCnR5cGVkZWYgZW51bSB7CiAgU1NfRlJFRSA9IDAsCQkJCSAKICBTU19VTkNPTk5FQ1RF
RCwJCQkgCiAgU1NfQ09OTkVDVElORywJCQkgCiAgU1NfQ09OTkVDVEVELAkJCQkgCiAgU1NfRElT
Q09OTkVDVElORwkJCSAKfSBzb2NrZXRfc3RhdGU7CgoKCgoKCgoKCnN0cnVjdCBzb2NrZXQKewoJ
c29ja2V0X3N0YXRlCQlzdGF0ZTsKCgl1bnNpZ25lZCBsb25nCQlmbGFnczsKCXN0cnVjdCBwcm90
b19vcHMJKm9wczsKCXN0cnVjdCBpbm9kZQkJKmlub2RlOwoJc3RydWN0IGZhc3luY19zdHJ1Y3QJ
KmZhc3luY19saXN0OwkgCglzdHJ1Y3QgZmlsZQkJKmZpbGU7CQkgCglzdHJ1Y3Qgc29jawkJKnNr
OwoJd2FpdF9xdWV1ZV9oZWFkX3QJd2FpdDsKCglzaG9ydAkJCXR5cGU7Cgl1bnNpZ25lZCBjaGFy
CQlwYXNzY3JlZDsKfTsKCgoKc3RydWN0IHNjbV9jb29raWU7CnN0cnVjdCB2bV9hcmVhX3N0cnVj
dDsKc3RydWN0IHBhZ2U7CgpzdHJ1Y3QgcHJvdG9fb3BzIHsKICBpbnQJZmFtaWx5OwoKICBpbnQJ
KCpyZWxlYXNlKQkoc3RydWN0IHNvY2tldCAqc29jayk7CiAgaW50CSgqYmluZCkJCShzdHJ1Y3Qg
c29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVteWFkZHIsCgkJCSBpbnQgc29ja2FkZHJf
bGVuKTsKICBpbnQJKCpjb25uZWN0KQkoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2th
ZGRyICp1c2VydmFkZHIsCgkJCSBpbnQgc29ja2FkZHJfbGVuLCBpbnQgZmxhZ3MpOwogIGludAko
KnNvY2tldHBhaXIpCShzdHJ1Y3Qgc29ja2V0ICpzb2NrMSwgc3RydWN0IHNvY2tldCAqc29jazIp
OwogIGludAkoKmFjY2VwdCkJKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5l
d3NvY2ssCgkJCSBpbnQgZmxhZ3MpOwogIGludAkoKmdldG5hbWUpCShzdHJ1Y3Qgc29ja2V0ICpz
b2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLAoJCQkgaW50ICp1c29ja2FkZHJfbGVuLCBpbnQg
cGVlcik7CiAgdW5zaWduZWQgaW50ICgqcG9sbCkJKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qg
c29ja2V0ICpzb2NrLCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpOwogIGludAkoKmlv
Y3RsKQkoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCwKCQkJIHVuc2lnbmVk
IGxvbmcgYXJnKTsKICBpbnQJKCpsaXN0ZW4pCShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGVu
KTsKICBpbnQJKCpzaHV0ZG93bikJKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBmbGFncyk7CiAg
aW50CSgqc2V0c29ja29wdCkJKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9w
dG5hbWUsCgkJCSBjaGFyICpvcHR2YWwsIGludCBvcHRsZW4pOwogIGludAkoKmdldHNvY2tvcHQp
CShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAoJCQkgY2hhciAq
b3B0dmFsLCBpbnQgKm9wdGxlbik7CiAgaW50ICAgKCpzZW5kbXNnKQkoc3RydWN0IHNvY2tldCAq
c29jaywgc3RydWN0IG1zZ2hkciAqbSwgaW50IHRvdGFsX2xlbiwgc3RydWN0IHNjbV9jb29raWUg
KnNjbSk7CiAgaW50ICAgKCpyZWN2bXNnKQkoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1z
Z2hkciAqbSwgaW50IHRvdGFsX2xlbiwgaW50IGZsYWdzLCBzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2Nt
KTsKICBpbnQJKCptbWFwKQkJKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2Nr
LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEpOwogIHNzaXplX3QgKCpzZW5kcGFnZSkJKHN0
cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2Zmc2V0LCBzaXplX3Qg
c2l6ZSwgaW50IGZsYWdzKTsKfTsKCnN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5IAp7CglpbnQJZmFt
aWx5OwoJaW50CSgqY3JlYXRlKShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wpOwoJ
IAoKCXNob3J0CWF1dGhlbnRpY2F0aW9uOwoJc2hvcnQJZW5jcnlwdGlvbjsKCXNob3J0CWVuY3J5
cHRfbmV0Owp9OwoKc3RydWN0IG5ldF9wcm90byAKewoJY29uc3QgY2hhciAqbmFtZTsJCSAKCXZv
aWQgKCppbml0X2Z1bmMpKHN0cnVjdCBuZXRfcHJvdG8gKik7CSAKfTsKCmV4dGVybiBpbnQJc29j
a193YWtlX2FzeW5jKHN0cnVjdCBzb2NrZXQgKnNrLCBpbnQgaG93LCBpbnQgYmFuZCk7CmV4dGVy
biBpbnQJc29ja19yZWdpc3RlcihzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSAqZmFtKTsKZXh0ZXJu
IGludAlzb2NrX3VucmVnaXN0ZXIoaW50IGZhbWlseSk7CmV4dGVybiBzdHJ1Y3Qgc29ja2V0ICpz
b2NrX2FsbG9jKHZvaWQpOwpleHRlcm4gaW50CXNvY2tfY3JlYXRlKGludCBmYW1pbHksIGludCB0
eXBlLCBpbnQgcHJvdG8sIHN0cnVjdCBzb2NrZXQgKiopOwpleHRlcm4gdm9pZAlzb2NrX3JlbGVh
c2Uoc3RydWN0IHNvY2tldCAqKTsKZXh0ZXJuIGludCAgIAlzb2NrX3NlbmRtc2coc3RydWN0IHNv
Y2tldCAqLCBzdHJ1Y3QgbXNnaGRyICptLCBpbnQgbGVuKTsKZXh0ZXJuIGludAlzb2NrX3JlY3Zt
c2coc3RydWN0IHNvY2tldCAqLCBzdHJ1Y3QgbXNnaGRyICptLCBpbnQgbGVuLCBpbnQgZmxhZ3Mp
OwpleHRlcm4gaW50CXNvY2tfcmVhZHZfd3JpdGV2KGludCB0eXBlLCBzdHJ1Y3QgaW5vZGUgKiBp
bm9kZSwgc3RydWN0IGZpbGUgKiBmaWxlLAoJCQkJICBjb25zdCBzdHJ1Y3QgaW92ZWMgKiBpb3Ys
IGxvbmcgY291bnQsIGxvbmcgc2l6ZSk7CgpleHRlcm4gaW50CW5ldF9yYXRlbGltaXQodm9pZCk7
CmV4dGVybiB1bnNpZ25lZCBsb25nIG5ldF9yYW5kb20odm9pZCk7CmV4dGVybiB2b2lkIG5ldF9z
cmFuZG9tKHVuc2lnbmVkIGxvbmcpOwoKCgoKIyAyMjQgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNM
SU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L25ldC5oIgoKCgoKCiMgMTUgIi9o
b21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4
L2ZzLmgiIDIKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIu
NC54L2luY2x1ZGUvbGludXgva2Rldl90LmgiIDEKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgp0eXBlZGVmIHVuc2lnbmVk
IHNob3J0IGtkZXZfdDsKCgoKCgoKCgpleHRlcm4gY29uc3QgY2hhciAqIGtkZXZuYW1lKGtkZXZf
dCk7CSAKCiAKCgoKCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGtkZXZfdF90b19ucihrZGV2
X3QgZGV2KSB7CglyZXR1cm4gKCgodW5zaWduZWQgaW50KSAoKCBkZXYgKSA+PiA4ICkpIDw8OCkg
fCAoKHVuc2lnbmVkIGludCkgKCggZGV2ICkgJiAoKDFVIDw8IDggKSAtIDEpICkpIDsKfQoKc3Rh
dGljIGlubGluZSBrZGV2X3QgdG9fa2Rldl90KGludCBkZXYpCnsKCWludCBtYWpvciwgbWlub3I7
CgoKCgoKCgoKCW1ham9yID0gKGRldiA+PiA4KTsKCW1pbm9yID0gKGRldiAmIDB4ZmYpOwoKCXJl
dHVybiAoKCggbWFqb3IgKSA8PCA4ICkgfCAoICBtaW5vciApKSA7Cn0KCiMgMTEzICIvaG9tZS9j
YXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9rZGV2
X3QuaCIKCgojIDE2ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40
LngvaW5jbHVkZS9saW51eC9mcy5oIiAyCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5V
WC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2lvY3RsLmgiIDEKCgoKIyAxICIvaG9t
ZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vaW9j
dGwuaCIgMQojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQu
eC9pbmNsdWRlL2FzbS1tNjhrL2lvY3RsLmgiIDEKIAoKCgoKCgoKIAoKCgoKCgoKCgogCgoKCgog
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCiAKCgoKCgogCgoKCgoKIAoKCgoK
CgoKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2lu
Y2x1ZGUvYXNtL2lvY3RsLmgiIDIKCiMgNCAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2Vj
bC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvaW9jdGwuaCIgMgoKCgoKIyAxNyAiL2hvbWUv
Y2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvZnMu
aCIgMgoKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54
L2luY2x1ZGUvbGludXgvZGNhY2hlLmgiIDEKCgoKCgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRz
L1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9tb3VudC5oIiAxCiAKCgoK
CgoKCgoKCgoKCgoKCgpzdHJ1Y3QgdmZzbW91bnQKewoJc3RydWN0IGxpc3RfaGVhZCBtbnRfaGFz
aDsKCXN0cnVjdCB2ZnNtb3VudCAqbW50X3BhcmVudDsJIAoJc3RydWN0IGRlbnRyeSAqbW50X21v
dW50cG9pbnQ7CSAKCXN0cnVjdCBkZW50cnkgKm1udF9yb290OwkgCglzdHJ1Y3Qgc3VwZXJfYmxv
Y2sgKm1udF9zYjsJIAoJc3RydWN0IGxpc3RfaGVhZCBtbnRfbW91bnRzOwkgCglzdHJ1Y3QgbGlz
dF9oZWFkIG1udF9jaGlsZDsJIAoJYXRvbWljX3QgbW50X2NvdW50OwoJaW50IG1udF9mbGFnczsK
CWNoYXIgKm1udF9kZXZuYW1lOwkJIAoJc3RydWN0IGxpc3RfaGVhZCBtbnRfbGlzdDsKfTsKCnN0
YXRpYyBpbmxpbmUgc3RydWN0IHZmc21vdW50ICptbnRnZXQoc3RydWN0IHZmc21vdW50ICptbnQp
CnsKCWlmIChtbnQpCgkJYXRvbWljX2luYygmbW50LT5tbnRfY291bnQpOwoJcmV0dXJuIG1udDsK
fQoKZXh0ZXJuIHZvaWQgX19tbnRwdXQoc3RydWN0IHZmc21vdW50ICptbnQpOwoKc3RhdGljIGlu
bGluZSB2b2lkIG1udHB1dChzdHJ1Y3QgdmZzbW91bnQgKm1udCkKewoJaWYgKG1udCkgewoJCWlm
ICgoYXRvbWljX3N1Yl9yZXR1cm4oMSwgKCAmbW50LT5tbnRfY291bnQgKSkgPT0gMCkgKQoJCQlf
X21udHB1dChtbnQpOwoJfQp9CgoKCiMgNyAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2Vj
bC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvZGNhY2hlLmgiIDIKCgogCgoKCgoKCgoKCgog
CgoKCnN0cnVjdCBxc3RyIHsKCWNvbnN0IHVuc2lnbmVkIGNoYXIgKiBuYW1lOwoJdW5zaWduZWQg
aW50IGxlbjsKCXVuc2lnbmVkIGludCBoYXNoOwp9OwoKc3RydWN0IGRlbnRyeV9zdGF0X3QgewoJ
aW50IG5yX2RlbnRyeTsKCWludCBucl91bnVzZWQ7CglpbnQgYWdlX2xpbWl0OyAgICAgICAgICAg
CglpbnQgd2FudF9wYWdlczsgICAgICAgICAgCglpbnQgZHVtbXlbMl07Cn07CmV4dGVybiBzdHJ1
Y3QgZGVudHJ5X3N0YXRfdCBkZW50cnlfc3RhdDsKCiAKIAoKCiAKc3RhdGljIF9faW5saW5lX18g
dW5zaWduZWQgbG9uZyBwYXJ0aWFsX25hbWVfaGFzaCh1bnNpZ25lZCBsb25nIGMsIHVuc2lnbmVk
IGxvbmcgcHJldmhhc2gpCnsKCXJldHVybiAocHJldmhhc2ggKyAoYyA8PCA0KSArIChjID4+IDQp
KSAqIDExOwp9CgogCnN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgZW5kX25hbWVfaGFz
aCh1bnNpZ25lZCBsb25nIGhhc2gpCnsKCXJldHVybiAodW5zaWduZWQgaW50KSBoYXNoOwp9Cgog
CnN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBmdWxsX25hbWVfaGFzaChjb25zdCB1bnNp
Z25lZCBjaGFyICogbmFtZSwgdW5zaWduZWQgaW50IGxlbikKewoJdW5zaWduZWQgbG9uZyBoYXNo
ID0gMCA7Cgl3aGlsZSAobGVuLS0pCgkJaGFzaCA9IHBhcnRpYWxfbmFtZV9oYXNoKCpuYW1lKyss
IGhhc2gpOwoJcmV0dXJuIGVuZF9uYW1lX2hhc2goaGFzaCk7Cn0KCgoKc3RydWN0IGRlbnRyeSB7
CglhdG9taWNfdCBkX2NvdW50OwoJdW5zaWduZWQgaW50IGRfZmxhZ3M7CglzdHJ1Y3QgaW5vZGUg
ICogZF9pbm9kZTsJIAoJc3RydWN0IGRlbnRyeSAqIGRfcGFyZW50OwkgCglzdHJ1Y3QgbGlzdF9o
ZWFkIGRfaGFzaDsJIAoJc3RydWN0IGxpc3RfaGVhZCBkX2xydTsJCSAKCXN0cnVjdCBsaXN0X2hl
YWQgZF9jaGlsZDsJIAoJc3RydWN0IGxpc3RfaGVhZCBkX3N1YmRpcnM7CSAKCXN0cnVjdCBsaXN0
X2hlYWQgZF9hbGlhczsJIAoJaW50IGRfbW91bnRlZDsKCXN0cnVjdCBxc3RyIGRfbmFtZTsKCXVu
c2lnbmVkIGxvbmcgZF90aW1lOwkJIAoJc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zICAqZF9vcDsK
CXN0cnVjdCBzdXBlcl9ibG9jayAqIGRfc2I7CSAKCXVuc2lnbmVkIGxvbmcgZF92ZnNfZmxhZ3M7
Cgl2b2lkICogZF9mc2RhdGE7CQkgCgl1bnNpZ25lZCBjaGFyIGRfaW5hbWVbMTYgXTsgIAp9OwoK
c3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHsKCWludCAoKmRfcmV2YWxpZGF0ZSkoc3RydWN0IGRl
bnRyeSAqLCBpbnQpOwoJaW50ICgqZF9oYXNoKSAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgcXN0
ciAqKTsKCWludCAoKmRfY29tcGFyZSkgKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKiwg
c3RydWN0IHFzdHIgKik7CglpbnQgKCpkX2RlbGV0ZSkoc3RydWN0IGRlbnRyeSAqKTsKCXZvaWQg
KCpkX3JlbGVhc2UpKHN0cnVjdCBkZW50cnkgKik7Cgl2b2lkICgqZF9pcHV0KShzdHJ1Y3QgZGVu
dHJ5ICosIHN0cnVjdCBpbm9kZSAqKTsKfTsKCiAKCgoKCgoKIAoKCgoKCgoKCgoKIAoKCgoKCgoK
CgoKCgoKZXh0ZXJuIHNwaW5sb2NrX3QgZGNhY2hlX2xvY2s7CgogCgoKCgoKCgoKCgoKCgoKCgpz
dGF0aWMgX19pbmxpbmVfXyB2b2lkIGRfZHJvcChzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5KQp7Cgko
dm9pZCkoICZkY2FjaGVfbG9jayApIDsKCWxpc3RfZGVsKCZkZW50cnktPmRfaGFzaCk7CglkbyB7
ICggJmRlbnRyeS0+ZF9oYXNoICktPm5leHQgPSAoICZkZW50cnktPmRfaGFzaCApOyAoICZkZW50
cnktPmRfaGFzaCApLT5wcmV2ID0gKCAmZGVudHJ5LT5kX2hhc2ggKTsgfSB3aGlsZSAoMCkgOwoJ
ZG8geyB9IHdoaWxlKDApIDsKfQoKc3RhdGljIF9faW5saW5lX18gaW50IGRuYW1lX2V4dGVybmFs
KHN0cnVjdCBkZW50cnkgKmQpCnsKCXJldHVybiBkLT5kX25hbWUubmFtZSAhPSBkLT5kX2luYW1l
OyAKfQoKIAoKCmV4dGVybiB2b2lkIGRfaW5zdGFudGlhdGUoc3RydWN0IGRlbnRyeSAqLCBzdHJ1
Y3QgaW5vZGUgKik7CmV4dGVybiB2b2lkIGRfZGVsZXRlKHN0cnVjdCBkZW50cnkgKik7CgogCmV4
dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9hbGxvYyhzdHJ1Y3QgZGVudHJ5ICosIGNvbnN0IHN0cnVj
dCBxc3RyICopOwpleHRlcm4gdm9pZCBzaHJpbmtfZGNhY2hlX3NiKHN0cnVjdCBzdXBlcl9ibG9j
ayAqKTsKZXh0ZXJuIHZvaWQgc2hyaW5rX2RjYWNoZV9wYXJlbnQoc3RydWN0IGRlbnRyeSAqKTsK
ZXh0ZXJuIGludCBkX2ludmFsaWRhdGUoc3RydWN0IGRlbnRyeSAqKTsKCgpzdHJ1Y3Qgem9uZV9z
dHJ1Y3Q7CiAKZXh0ZXJuIGludCBzaHJpbmtfZGNhY2hlX21lbW9yeShpbnQsIHVuc2lnbmVkIGlu
dCk7CmV4dGVybiB2b2lkIHBydW5lX2RjYWNoZShpbnQpOwoKIApleHRlcm4gaW50IHNocmlua19p
Y2FjaGVfbWVtb3J5KGludCwgaW50KTsKZXh0ZXJuIHZvaWQgcHJ1bmVfaWNhY2hlKGludCk7Cgog
CmV4dGVybiBpbnQgc2hyaW5rX2RxY2FjaGVfbWVtb3J5KGludCwgdW5zaWduZWQgaW50KTsKCiAK
ZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiBkX2FsbG9jX3Jvb3Qoc3RydWN0IGlub2RlICopOwoKIApl
eHRlcm4gdm9pZCBkX2dlbm9jaWRlKHN0cnVjdCBkZW50cnkgKik7CgpleHRlcm4gc3RydWN0IGRl
bnRyeSAqZF9maW5kX2FsaWFzKHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJuIHZvaWQgZF9wcnVuZV9h
bGlhc2VzKHN0cnVjdCBpbm9kZSAqKTsKCiAKZXh0ZXJuIGludCBoYXZlX3N1Ym1vdW50cyhzdHJ1
Y3QgZGVudHJ5ICopOwoKIAoKCmV4dGVybiB2b2lkIGRfcmVoYXNoKHN0cnVjdCBkZW50cnkgKik7
CgogCgoKCgoKCgogCnN0YXRpYyBfX2lubGluZV9fIHZvaWQgZF9hZGQoc3RydWN0IGRlbnRyeSAq
IGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkKewoJZF9pbnN0YW50aWF0ZShlbnRyeSwgaW5v
ZGUpOwoJZF9yZWhhc2goZW50cnkpOwp9CgogCmV4dGVybiB2b2lkIGRfbW92ZShzdHJ1Y3QgZGVu
dHJ5ICosIHN0cnVjdCBkZW50cnkgKik7CgogCmV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9sb29r
dXAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgcXN0ciAqKTsKCiAKZXh0ZXJuIGludCBkX3ZhbGlk
YXRlKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGRlbnRyeSAqKTsKCmV4dGVybiBjaGFyICogX19k
X3BhdGgoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgdmZzbW91bnQgKiwgc3RydWN0IGRlbnRyeSAq
LAoJc3RydWN0IHZmc21vdW50ICosIGNoYXIgKiwgaW50KTsKICAKIAoKIAoKCgoKCgoKCgoKCiAK
c3RhdGljIF9faW5saW5lX18gc3RydWN0IGRlbnRyeSAqIGRnZXQoc3RydWN0IGRlbnRyeSAqZGVu
dHJ5KQp7CglpZiAoZGVudHJ5KSB7CgkJaWYgKCEgKCggJmRlbnRyeS0+ZF9jb3VudCApLT5jb3Vu
dGVyKSApCgkJCWRvIHsgIDsgcGFuaWMoIkJVRyEiKSA7IH0gd2hpbGUgKDApIDsKCQlhdG9taWNf
aW5jKCZkZW50cnktPmRfY291bnQpOwoJfQoJcmV0dXJuIGRlbnRyeTsKfQoKZXh0ZXJuIHN0cnVj
dCBkZW50cnkgKiBkZ2V0X2xvY2tlZChzdHJ1Y3QgZGVudHJ5ICopOwoKIAoKCgoKCiAKc3RhdGlj
IF9faW5saW5lX18gaW50IGRfdW5oYXNoZWQoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQp7CglyZXR1
cm4gbGlzdF9lbXB0eSgmZGVudHJ5LT5kX2hhc2gpOwp9CgpleHRlcm4gdm9pZCBkcHV0KHN0cnVj
dCBkZW50cnkgKik7CgpzdGF0aWMgX19pbmxpbmVfXyBpbnQgZF9tb3VudHBvaW50KHN0cnVjdCBk
ZW50cnkgKmRlbnRyeSkKewoJcmV0dXJuIGRlbnRyeS0+ZF9tb3VudGVkOwp9CgpleHRlcm4gc3Ry
dWN0IHZmc21vdW50ICpsb29rdXBfbW50KHN0cnVjdCB2ZnNtb3VudCAqLCBzdHJ1Y3QgZGVudHJ5
ICopOwoKCgojIDE5ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40
LngvaW5jbHVkZS9saW51eC9mcy5oIiAyCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5V
WC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L3N0YXQuaCIgMQoKCgoKCiMgMSAiL2hv
bWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtL3N0
YXQuaCIgMQojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQu
eC9pbmNsdWRlL2FzbS1tNjhrL3N0YXQuaCIgMQoKCgpzdHJ1Y3QgX19vbGRfa2VybmVsX3N0YXQg
ewoJdW5zaWduZWQgc2hvcnQgc3RfZGV2OwoJdW5zaWduZWQgc2hvcnQgc3RfaW5vOwoJdW5zaWdu
ZWQgc2hvcnQgc3RfbW9kZTsKCXVuc2lnbmVkIHNob3J0IHN0X25saW5rOwoJdW5zaWduZWQgc2hv
cnQgc3RfdWlkOwoJdW5zaWduZWQgc2hvcnQgc3RfZ2lkOwoJdW5zaWduZWQgc2hvcnQgc3RfcmRl
djsKCXVuc2lnbmVkIGxvbmcgIHN0X3NpemU7Cgl1bnNpZ25lZCBsb25nICBzdF9hdGltZTsKCXVu
c2lnbmVkIGxvbmcgIHN0X210aW1lOwoJdW5zaWduZWQgbG9uZyAgc3RfY3RpbWU7Cn07CgpzdHJ1
Y3Qgc3RhdCB7Cgl1bnNpZ25lZCBzaG9ydCBzdF9kZXY7Cgl1bnNpZ25lZCBzaG9ydCBfX3BhZDE7
Cgl1bnNpZ25lZCBsb25nIHN0X2lubzsKCXVuc2lnbmVkIHNob3J0IHN0X21vZGU7Cgl1bnNpZ25l
ZCBzaG9ydCBzdF9ubGluazsKCXVuc2lnbmVkIHNob3J0IHN0X3VpZDsKCXVuc2lnbmVkIHNob3J0
IHN0X2dpZDsKCXVuc2lnbmVkIHNob3J0IHN0X3JkZXY7Cgl1bnNpZ25lZCBzaG9ydCBfX3BhZDI7
Cgl1bnNpZ25lZCBsb25nICBzdF9zaXplOwoJdW5zaWduZWQgbG9uZyAgc3RfYmxrc2l6ZTsKCXVu
c2lnbmVkIGxvbmcgIHN0X2Jsb2NrczsKCXVuc2lnbmVkIGxvbmcgIHN0X2F0aW1lOwoJdW5zaWdu
ZWQgbG9uZyAgX191bnVzZWQxOwoJdW5zaWduZWQgbG9uZyAgc3RfbXRpbWU7Cgl1bnNpZ25lZCBs
b25nICBfX3VudXNlZDI7Cgl1bnNpZ25lZCBsb25nICBzdF9jdGltZTsKCXVuc2lnbmVkIGxvbmcg
IF9fdW51c2VkMzsKCXVuc2lnbmVkIGxvbmcgIF9fdW51c2VkNDsKCXVuc2lnbmVkIGxvbmcgIF9f
dW51c2VkNTsKfTsKCiAKCgpzdHJ1Y3Qgc3RhdDY0IHsKCXVuc2lnbmVkIGNoYXIJX19wYWQwWzZd
OwoJdW5zaWduZWQgc2hvcnQJc3RfZGV2OwoJdW5zaWduZWQgY2hhcglfX3BhZDFbMl07CgoKCXVu
c2lnbmVkIGxvbmcJX19zdF9pbm87CgoJdW5zaWduZWQgaW50CXN0X21vZGU7Cgl1bnNpZ25lZCBp
bnQJc3Rfbmxpbms7CgoJdW5zaWduZWQgbG9uZwlzdF91aWQ7Cgl1bnNpZ25lZCBsb25nCXN0X2dp
ZDsKCgl1bnNpZ25lZCBjaGFyCV9fcGFkMls2XTsKCXVuc2lnbmVkIHNob3J0CXN0X3JkZXY7Cgl1
bnNpZ25lZCBjaGFyCV9fcGFkM1syXTsKCglsb25nIGxvbmcJc3Rfc2l6ZTsKCXVuc2lnbmVkIGxv
bmcJc3RfYmxrc2l6ZTsKCgl1bnNpZ25lZCBsb25nCV9fcGFkNDsJCSAKCXVuc2lnbmVkIGxvbmcJ
c3RfYmxvY2tzOwkgCgoJdW5zaWduZWQgbG9uZwlzdF9hdGltZTsKCXVuc2lnbmVkIGxvbmcJX19w
YWQ1OwoKCXVuc2lnbmVkIGxvbmcJc3RfbXRpbWU7Cgl1bnNpZ25lZCBsb25nCV9fcGFkNjsKCgl1
bnNpZ25lZCBsb25nCXN0X2N0aW1lOwoJdW5zaWduZWQgbG9uZwlfX3BhZDc7CQkgCgoJdW5zaWdu
ZWQgbG9uZyBsb25nCXN0X2lubzsKfTsKCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5V
WC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2FzbS9zdGF0LmgiIDIKCiMgNiAiL2hvbWUvY2Fy
bG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvc3RhdC5o
IiAyCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoj
IDIwICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVk
ZS9saW51eC9mcy5oIiAyCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNs
aW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2NhY2hlLmgiIDEKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgojIDM1ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40Lngv
aW5jbHVkZS9saW51eC9jYWNoZS5oIgoKCgoKCgoKCgoKCiMgMjEgIi9ob21lL2Nhcmxvcy9CdWls
ZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCgojIDEg
Ii9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xp
bnV4L3N0cmluZy5oIiAxCgoKCiAKCgoKCgoKCgoKCgogCgoKIyAxICIvaG9tZS9jYXJsb3MvQnVp
bGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vc3RyaW5nLmgiIDEKCgoK
CgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNs
dWRlL2FzbS9zZXR1cC5oIiAxCgojIDYgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wt
dWNsaW51eC0yLjQueC9pbmNsdWRlL2FzbS9zdHJpbmcuaCIgMgoKCgoKc3RhdGljIGlubGluZSBj
aGFyICogc3RyY3B5KGNoYXIgKiBkZXN0LGNvbnN0IGNoYXIgKnNyYykKewogIGNoYXIgKnhkZXN0
ID0gZGVzdDsKCiAgX19hc21fXyBfX3ZvbGF0aWxlX18KICAgICAgICgiMTpcdG1vdmViICUxQCss
JTBAK1xuXHQiCiAgICAgICAgImpuZSAxYiIKCTogIj1hIiAoZGVzdCksICI9YSIgKHNyYykKICAg
ICAgICA6ICIwIiAoZGVzdCksICIxIiAoc3JjKSA6ICJtZW1vcnkiKTsKICByZXR1cm4geGRlc3Q7
Cn0KCgpzdGF0aWMgaW5saW5lIGNoYXIgKiBzdHJuY3B5KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIg
KnNyYywgc2l6ZV90IG4pCnsKICBjaGFyICp4ZGVzdCA9IGRlc3Q7CgogIGlmIChuID09IDApCiAg
ICByZXR1cm4geGRlc3Q7CgogIF9fYXNtX18gX192b2xhdGlsZV9fCiAgICAgICAoIjE6XHRtb3Zl
YiAlMUArLCUwQCtcblx0IgoJImplcSAyZlxuXHQiCiAgICAgICAgInN1YnFsICMxLCUyXG5cdCIK
ICAgICAgICAiam5lIDFiXG5cdCIKICAgICAgICAiMjoiCiAgICAgICAgOiAiPWEiIChkZXN0KSwg
Ij1hIiAoc3JjKSwgIj1kIiAobikKICAgICAgICA6ICIwIiAoZGVzdCksICIxIiAoc3JjKSwgIjIi
IChuKQogICAgICAgIDogIm1lbW9yeSIpOwogIHJldHVybiB4ZGVzdDsKfQoKCiMgODkgIi9ob21l
L2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2FzbS9zdHJp
bmcuaCIKCgoKZXh0ZXJuIHZvaWQgKiBtZW1zZXQodm9pZCAqIHMsIGludCBjLCBzaXplX3QgY291
bnQpOwoKCmV4dGVybiB2b2lkICogbWVtY3B5KHZvaWQgKmQsIGNvbnN0IHZvaWQgKnMsIHNpemVf
dCBjb3VudCk7CgojIDEyNCAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4
LTIuNC54L2luY2x1ZGUvYXNtL3N0cmluZy5oIgoKCgojIDE5ICIvaG9tZS9jYXJsb3MvQnVpbGRz
L1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9zdHJpbmcuaCIgMgoKCgpl
eHRlcm4gY2hhciAqIF9fX3N0cnRvazsKZXh0ZXJuIGNoYXIgKiBzdHJwYnJrKGNvbnN0IGNoYXIg
Kixjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAqIHN0cnRvayhjaGFyICosY29uc3QgY2hhciAq
KTsKZXh0ZXJuIGNoYXIgKiBzdHJzZXAoY2hhciAqKixjb25zdCBjaGFyICopOwpleHRlcm4gX19r
ZXJuZWxfc2l6ZV90IHN0cnNwbihjb25zdCBjaGFyICosY29uc3QgY2hhciAqKTsKCgoKCgoKCgoK
ZXh0ZXJuIGNoYXIgKiBzdHJjYXQoY2hhciAqLCBjb25zdCBjaGFyICopOwoKCmV4dGVybiBjaGFy
ICogc3RybmNhdChjaGFyICosIGNvbnN0IGNoYXIgKiwgX19rZXJuZWxfc2l6ZV90KTsKCgpleHRl
cm4gaW50IHN0cmNtcChjb25zdCBjaGFyICosY29uc3QgY2hhciAqKTsKCgpleHRlcm4gaW50IHN0
cm5jbXAoY29uc3QgY2hhciAqLGNvbnN0IGNoYXIgKixfX2tlcm5lbF9zaXplX3QpOwoKCmV4dGVy
biBpbnQgc3RybmljbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIF9fa2VybmVsX3NpemVf
dCk7CgoKZXh0ZXJuIGNoYXIgKiBzdHJjaHIoY29uc3QgY2hhciAqLGludCk7CgoKZXh0ZXJuIGNo
YXIgKiBzdHJyY2hyKGNvbnN0IGNoYXIgKixpbnQpOwoKCmV4dGVybiBjaGFyICogc3Ryc3RyKGNv
bnN0IGNoYXIgKixjb25zdCBjaGFyICopOwoKCmV4dGVybiBfX2tlcm5lbF9zaXplX3Qgc3RybGVu
KGNvbnN0IGNoYXIgKik7CgoKZXh0ZXJuIF9fa2VybmVsX3NpemVfdCBzdHJubGVuKGNvbnN0IGNo
YXIgKixfX2tlcm5lbF9zaXplX3QpOwoKCgoKCgoKCgpleHRlcm4gdm9pZCAqIG1lbW1vdmUodm9p
ZCAqLGNvbnN0IHZvaWQgKixfX2tlcm5lbF9zaXplX3QpOwoKCmV4dGVybiB2b2lkICogbWVtc2Nh
bih2b2lkICosaW50LF9fa2VybmVsX3NpemVfdCk7CgoKZXh0ZXJuIGludCBtZW1jbXAoY29uc3Qg
dm9pZCAqLGNvbnN0IHZvaWQgKixfX2tlcm5lbF9zaXplX3QpOwoKCmV4dGVybiB2b2lkICogbWVt
Y2hyKGNvbnN0IHZvaWQgKixpbnQsX19rZXJuZWxfc2l6ZV90KTsKCgoKCgoKCgojIDIzICIvaG9t
ZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9m
cy5oIiAyCgoKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIu
NC54L2luY2x1ZGUvYXNtL2JpdG9wcy5oIiAxCgoKCiAKCgoKCiMgMSAiL2hvbWUvY2FybG9zL0J1
aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtL2J5dGVvcmRlci5oIiAx
CgoKCgoKCgoKCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0y
LjQueC9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9iaWdfZW5kaWFuLmgiIDEKCgoKCgoKCgoKCiMg
MSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUv
bGludXgvYnl0ZW9yZGVyL3N3YWIuaCIgMQoKCgogCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoK
IyAzOCAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1
ZGUvbGludXgvYnl0ZW9yZGVyL3N3YWIuaCIKCgojIDUyICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VD
TElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvc3dhYi5oIgoK
CgoKCgoKCgoKCgojIDczICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgt
Mi40LngvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvc3dhYi5oIgoKIAoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpzdGF0aWMgX19pbmxpbmVf
XyBfX2NvbnN0X18gX191MTYgX19mc3dhYjE2KF9fdTE2IHgpCnsKCXJldHVybiAoeyBfX3UxNiBf
X3RtcCA9ICggeCApIDsgKHsgX191MTYgX194ID0gKCBfX3RtcCApOyAoKF9fdTE2KSggKCgoX191
MTYpKF9feCkgJiAoX191MTYpMHgwMGZmVSkgPDwgOCkgfCAoKChfX3UxNikoX194KSAmIChfX3Ux
NikweGZmMDBVKSA+PiA4KSApKTsgfSkgOyB9KSA7Cn0Kc3RhdGljIF9faW5saW5lX18gX191MTYg
X19zd2FiMTZwKF9fdTE2ICp4KQp7CglyZXR1cm4gKHsgX191MTYgX190bXAgPSAoICooIHggKSAp
IDsgKHsgX191MTYgX194ID0gKCBfX3RtcCApOyAoKF9fdTE2KSggKCgoX191MTYpKF9feCkgJiAo
X191MTYpMHgwMGZmVSkgPDwgOCkgfCAoKChfX3UxNikoX194KSAmIChfX3UxNikweGZmMDBVKSA+
PiA4KSApKTsgfSkgOyB9KSAgOwp9CnN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19zd2FiMTZzKF9f
dTE2ICphZGRyKQp7CglkbyB7ICooIGFkZHIgKSA9ICh7IF9fdTE2IF9fdG1wID0gKCAqKCAoIGFk
ZHIgKSApICkgOyAoeyBfX3UxNiBfX3ggPSAoIF9fdG1wICk7ICgoX191MTYpKCAoKChfX3UxNiko
X194KSAmIChfX3UxNikweDAwZmZVKSA8PCA4KSB8ICgoKF9fdTE2KShfX3gpICYgKF9fdTE2KTB4
ZmYwMFUpID4+IDgpICkpOyB9KSA7IH0pICA7IH0gd2hpbGUgKDApIDsKfQoKc3RhdGljIF9faW5s
aW5lX18gX19jb25zdF9fIF9fdTMyIF9fZnN3YWIzMihfX3UzMiB4KQp7CglyZXR1cm4gKHsgX191
MzIgX190bXAgPSAoIHggKSA7ICh7IF9fdTMyIF9feCA9ICggX190bXAgKTsgKChfX3UzMikoICgo
KF9fdTMyKShfX3gpICYgKF9fdTMyKTB4MDAwMDAwZmZVTCkgPDwgMjQpIHwgKCgoX191MzIpKF9f
eCkgJiAoX191MzIpMHgwMDAwZmYwMFVMKSA8PCAgOCkgfCAoKChfX3UzMikoX194KSAmIChfX3Uz
MikweDAwZmYwMDAwVUwpID4+ICA4KSB8ICgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4ZmYwMDAw
MDBVTCkgPj4gMjQpICkpOyB9KSA7IH0pIDsKfQpzdGF0aWMgX19pbmxpbmVfXyBfX3UzMiBfX3N3
YWIzMnAoX191MzIgKngpCnsKCXJldHVybiAoeyBfX3UzMiBfX3RtcCA9ICggKiggeCApICkgOyAo
eyBfX3UzMiBfX3ggPSAoIF9fdG1wICk7ICgoX191MzIpKCAoKChfX3UzMikoX194KSAmIChfX3Uz
MikweDAwMDAwMGZmVUwpIDw8IDI0KSB8ICgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4MDAwMGZm
MDBVTCkgPDwgIDgpIHwgKCgoX191MzIpKF9feCkgJiAoX191MzIpMHgwMGZmMDAwMFVMKSA+PiAg
OCkgfCAoKChfX3UzMikoX194KSAmIChfX3UzMikweGZmMDAwMDAwVUwpID4+IDI0KSApKTsgfSkg
OyB9KSAgOwp9CnN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19zd2FiMzJzKF9fdTMyICphZGRyKQp7
CglkbyB7ICooIGFkZHIgKSA9ICh7IF9fdTMyIF9fdG1wID0gKCAqKCAoIGFkZHIgKSApICkgOyAo
eyBfX3UzMiBfX3ggPSAoIF9fdG1wICk7ICgoX191MzIpKCAoKChfX3UzMikoX194KSAmIChfX3Uz
MikweDAwMDAwMGZmVUwpIDw8IDI0KSB8ICgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4MDAwMGZm
MDBVTCkgPDwgIDgpIHwgKCgoX191MzIpKF9feCkgJiAoX191MzIpMHgwMGZmMDAwMFVMKSA+PiAg
OCkgfCAoKChfX3UzMikoX194KSAmIChfX3UzMikweGZmMDAwMDAwVUwpID4+IDI0KSApKTsgfSkg
OyB9KSAgOyB9IHdoaWxlICgwKSA7Cn0KCgpzdGF0aWMgX19pbmxpbmVfXyBfX2NvbnN0X18gX191
NjQgX19mc3dhYjY0KF9fdTY0IHgpCnsKCglfX3UzMiBoID0geCA+PiAzMjsKICAgICAgICBfX3Uz
MiBsID0geCAmICgoMVVMTDw8MzIpLTEpOwogICAgICAgIHJldHVybiAoKChfX3U2NCkoX19idWls
dGluX2NvbnN0YW50X3AoKF9fdTMyKSggbCApKSA/ICh7IF9fdTMyIF9feCA9ICggKCBsICkgKTsg
KChfX3UzMikoICgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4MDAwMDAwZmZVTCkgPDwgMjQpIHwg
KCgoX191MzIpKF9feCkgJiAoX191MzIpMHgwMDAwZmYwMFVMKSA8PCAgOCkgfCAoKChfX3UzMiko
X194KSAmIChfX3UzMikweDAwZmYwMDAwVUwpID4+ICA4KSB8ICgoKF9fdTMyKShfX3gpICYgKF9f
dTMyKTB4ZmYwMDAwMDBVTCkgPj4gMjQpICkpOyB9KSAgOiBfX2Zzd2FiMzIoKCBsICkpKSApIDw8
IDMyKSB8ICgoX191NjQpKChfX2J1aWx0aW5fY29uc3RhbnRfcCgoX191MzIpKCBoICkpID8gKHsg
X191MzIgX194ID0gKCAoIGggKSApOyAoKF9fdTMyKSggKCgoX191MzIpKF9feCkgJiAoX191MzIp
MHgwMDAwMDBmZlVMKSA8PCAyNCkgfCAoKChfX3UzMikoX194KSAmIChfX3UzMikweDAwMDBmZjAw
VUwpIDw8ICA4KSB8ICgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4MDBmZjAwMDBVTCkgPj4gIDgp
IHwgKCgoX191MzIpKF9feCkgJiAoX191MzIpMHhmZjAwMDAwMFVMKSA+PiAyNCkgKSk7IH0pICA6
IF9fZnN3YWIzMigoIGggKSkpICkpOwoKCgp9CnN0YXRpYyBfX2lubGluZV9fIF9fdTY0IF9fc3dh
YjY0cChfX3U2NCAqeCkKewoJcmV0dXJuICh7IF9fdTY0IF9fdG1wID0gKCAqKCB4ICkgKSA7ICh7
IF9fdTY0IF9feCA9ICggX190bXAgKTsgKChfX3U2NCkoIChfX3U2NCkoKChfX3U2NCkoX194KSAm
IChfX3U2NCkweDAwMDAwMDAwMDAwMDAwZmZVTEwpIDw8IDU2KSB8IChfX3U2NCkoKChfX3U2NCko
X194KSAmIChfX3U2NCkweDAwMDAwMDAwMDAwMGZmMDBVTEwpIDw8IDQwKSB8IChfX3U2NCkoKChf
X3U2NCkoX194KSAmIChfX3U2NCkweDAwMDAwMDAwMDBmZjAwMDBVTEwpIDw8IDI0KSB8IChfX3U2
NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkweDAwMDAwMDAwZmYwMDAwMDBVTEwpIDw8ICA4KSB8
IChfX3U2NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkweDAwMDAwMGZmMDAwMDAwMDBVTEwpID4+
ICA4KSB8IChfX3U2NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkweDAwMDBmZjAwMDAwMDAwMDBV
TEwpID4+IDI0KSB8IChfX3U2NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkweDAwZmYwMDAwMDAw
MDAwMDBVTEwpID4+IDQwKSB8IChfX3U2NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkweGZmMDAw
MDAwMDAwMDAwMDBVTEwpID4+IDU2KSApKTsgfSkgOyB9KSAgOwp9CnN0YXRpYyBfX2lubGluZV9f
IHZvaWQgX19zd2FiNjRzKF9fdTY0ICphZGRyKQp7CglkbyB7ICooIGFkZHIgKSA9ICh7IF9fdTY0
IF9fdG1wID0gKCAqKCAoIGFkZHIgKSApICkgOyAoeyBfX3U2NCBfX3ggPSAoIF9fdG1wICk7ICgo
X191NjQpKCAoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQpMHgwMDAwMDAwMDAwMDAwMGZm
VUxMKSA8PCA1NikgfCAoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQpMHgwMDAwMDAwMDAw
MDBmZjAwVUxMKSA8PCA0MCkgfCAoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQpMHgwMDAw
MDAwMDAwZmYwMDAwVUxMKSA8PCAyNCkgfCAoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQp
MHgwMDAwMDAwMGZmMDAwMDAwVUxMKSA8PCAgOCkgfCAoX191NjQpKCgoX191NjQpKF9feCkgJiAo
X191NjQpMHgwMDAwMDBmZjAwMDAwMDAwVUxMKSA+PiAgOCkgfCAoX191NjQpKCgoX191NjQpKF9f
eCkgJiAoX191NjQpMHgwMDAwZmYwMDAwMDAwMDAwVUxMKSA+PiAyNCkgfCAoX191NjQpKCgoX191
NjQpKF9feCkgJiAoX191NjQpMHgwMGZmMDAwMDAwMDAwMDAwVUxMKSA+PiA0MCkgfCAoX191NjQp
KCgoX191NjQpKF9feCkgJiAoX191NjQpMHhmZjAwMDAwMDAwMDAwMDAwVUxMKSA+PiA1NikgKSk7
IH0pIDsgfSkgIDsgfSB3aGlsZSAoMCkgOwp9CgoKCgoKCgoKCgoKCgoKCiMgMTEgIi9ob21lL2Nh
cmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2J5dGVv
cmRlci9iaWdfZW5kaWFuLmgiIDIKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11
Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaCIgMQoKCgogCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKZXh0ZXJuIF9fdTMyCQkJbnRvaGwoX191
MzIpOwpleHRlcm4gX191MzIJCQlodG9ubChfX3UzMik7CgoKCgpleHRlcm4gdW5zaWduZWQgc2hv
cnQgaW50CW50b2hzKHVuc2lnbmVkIHNob3J0IGludCk7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCBp
bnQJaHRvbnModW5zaWduZWQgc2hvcnQgaW50KTsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDY2
ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9s
aW51eC9ieXRlb3JkZXIvYmlnX2VuZGlhbi5oIiAyCgoKCiMgMTEgIi9ob21lL2Nhcmxvcy9CdWls
ZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2FzbS9ieXRlb3JkZXIuaCIgMgoK
CgojIDkgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNs
dWRlL2FzbS9iaXRvcHMuaCIgMgoKCgoKIAoKCgogCgoKCmV4dGVybiB2b2lkIHNldF9iaXQoaW50
IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcik7CmV4dGVybiB2b2lkIF9fc2V0X2JpdChpbnQgbnIs
IHZvbGF0aWxlIHZvaWQgKiBhZGRyKTsKZXh0ZXJuIHZvaWQgY2xlYXJfYml0KGludCBuciwgdm9s
YXRpbGUgdm9pZCAqIGFkZHIpOwpleHRlcm4gdm9pZCBjaGFuZ2VfYml0KGludCBuciwgdm9sYXRp
bGUgdm9pZCAqIGFkZHIpOwpleHRlcm4gdm9pZCBfX2NoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGls
ZSB2b2lkICogYWRkcik7CmV4dGVybiBpbnQgdGVzdF9hbmRfc2V0X2JpdChpbnQgbnIsIHZvbGF0
aWxlIHZvaWQgKiBhZGRyKTsKZXh0ZXJuIGludCBfX3Rlc3RfYW5kX3NldF9iaXQoaW50IG5yLCB2
b2xhdGlsZSB2b2lkICogYWRkcik7CmV4dGVybiBpbnQgdGVzdF9hbmRfY2xlYXJfYml0KGludCBu
ciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpOwpleHRlcm4gaW50IF9fdGVzdF9hbmRfY2xlYXJfYml0
KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpOwpleHRlcm4gaW50IHRlc3RfYW5kX2NoYW5n
ZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcik7CmV4dGVybiBpbnQgX190ZXN0X2Fu
ZF9jaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpOwpleHRlcm4gaW50IF9f
Y29uc3RhbnRfdGVzdF9iaXQoaW50IG5yLCBjb25zdCB2b2xhdGlsZSB2b2lkICogYWRkcik7CmV4
dGVybiBpbnQgX190ZXN0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKTsKZXh0ZXJu
IGludCBmaW5kX2ZpcnN0X3plcm9fYml0KHZvaWQgKiBhZGRyLCB1bnNpZ25lZCBzaXplKTsKZXh0
ZXJuIGludCBmaW5kX25leHRfemVyb19iaXQgKHZvaWQgKiBhZGRyLCBpbnQgc2l6ZSwgaW50IG9m
ZnNldCk7CgogCgoKCmV4dGVybiBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgZmZ6KHVuc2lnbmVk
IGxvbmcgd29yZCkKewoJdW5zaWduZWQgbG9uZyByZXN1bHQgPSAwOwoKCXdoaWxlKHdvcmQgJiAx
KSB7CgkJcmVzdWx0Kys7CgkJd29yZCA+Pj0gMTsKCX0KCXJldHVybiByZXN1bHQ7Cn0KCgpleHRl
cm4gX19pbmxpbmVfXyB2b2lkIHNldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikK
ewoJaW50IAkqIGEgPSAoaW50ICopIGFkZHI7CglpbnQJbWFzazsKCXVuc2lnbmVkIGxvbmcgZmxh
Z3M7CgoJYSArPSBuciA+PiA1OwoJbWFzayA9IDEgPDwgKG5yICYgMHgxZik7Cglhc20gdm9sYXRp
bGUgKCJtb3ZldyAlJXNyLCUwIjoiPWQiICggIGZsYWdzICApIDogOiAibWVtb3J5IikgIDsgX19h
c21fXyBfX3ZvbGF0aWxlX18gKCAibW92ZSAlL3NyLCUlZDBcblx0IiAib3JpLmwgICMweDA3MDAs
JSVkMFxuXHQiICJtb3ZlICUlZDAsJS9zclxuIiA6IDogOiAiY2MiLCAiJWQwIiwgIm1lbW9yeSIp
ICA7CgkqYSB8PSBtYXNrOwoJYXNtIHZvbGF0aWxlICgibW92ZXcgJTAsJSVzciI6IDoiZCIgKCAg
ZmxhZ3MgICkgOiAibWVtb3J5IikgIDsKfQoKZXh0ZXJuIF9faW5saW5lX18gdm9pZCBfX3NldF9i
aXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKewoJaW50IAkqIGEgPSAoaW50ICopIGFk
ZHI7CglpbnQJbWFzazsKCglhICs9IG5yID4+IDU7CgltYXNrID0gMSA8PCAobnIgJiAweDFmKTsK
CSphIHw9IG1hc2s7Cn0KCiAKCgoKCgpleHRlcm4gX19pbmxpbmVfXyB2b2lkIGNsZWFyX2JpdChp
bnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQp7CglpbnQgCSogYSA9IChpbnQgKikgYWRkcjsK
CWludAltYXNrOwoJdW5zaWduZWQgbG9uZyBmbGFnczsKCglhICs9IG5yID4+IDU7CgltYXNrID0g
MSA8PCAobnIgJiAweDFmKTsKCWFzbSB2b2xhdGlsZSAoIm1vdmV3ICUlc3IsJTAiOiI9ZCIgKCAg
ZmxhZ3MgICkgOiA6ICJtZW1vcnkiKSAgOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICJtb3ZlICUv
c3IsJSVkMFxuXHQiICJvcmkubCAgIzB4MDcwMCwlJWQwXG5cdCIgIm1vdmUgJSVkMCwlL3NyXG4i
IDogOiA6ICJjYyIsICIlZDAiLCAibWVtb3J5IikgIDsKCSphICY9IH5tYXNrOwoJYXNtIHZvbGF0
aWxlICgibW92ZXcgJTAsJSVzciI6IDoiZCIgKCAgZmxhZ3MgICkgOiAibWVtb3J5IikgIDsKfQoK
ZXh0ZXJuIF9faW5saW5lX18gdm9pZCBjaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAq
IGFkZHIpCnsKCWludCBtYXNrLCBmbGFnczsKCXVuc2lnbmVkIGxvbmcgKkFERFIgPSAodW5zaWdu
ZWQgbG9uZyAqKSBhZGRyOwoKCUFERFIgKz0gbnIgPj4gNTsKCW1hc2sgPSAxIDw8IChuciAmIDMx
KTsKCWFzbSB2b2xhdGlsZSAoIm1vdmV3ICUlc3IsJTAiOiI9ZCIgKCAgZmxhZ3MgICkgOiA6ICJt
ZW1vcnkiKSAgOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICJtb3ZlICUvc3IsJSVkMFxuXHQiICJv
cmkubCAgIzB4MDcwMCwlJWQwXG5cdCIgIm1vdmUgJSVkMCwlL3NyXG4iIDogOiA6ICJjYyIsICIl
ZDAiLCAibWVtb3J5IikgIDsKCSpBRERSIF49IG1hc2s7Cglhc20gdm9sYXRpbGUgKCJtb3ZldyAl
MCwlJXNyIjogOiJkIiAoICBmbGFncyAgKSA6ICJtZW1vcnkiKSAgOwp9CgpleHRlcm4gX19pbmxp
bmVfXyB2b2lkIF9fY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQp7Cglp
bnQgbWFzazsKCXVuc2lnbmVkIGxvbmcgKkFERFIgPSAodW5zaWduZWQgbG9uZyAqKSBhZGRyOwoK
CUFERFIgKz0gbnIgPj4gNTsKCW1hc2sgPSAxIDw8IChuciAmIDMxKTsKCSpBRERSIF49IG1hc2s7
Cn0KCmV4dGVybiBfX2lubGluZV9fIGludCB0ZXN0X2FuZF9zZXRfYml0KGludCBuciwgdm9sYXRp
bGUgdm9pZCAqIGFkZHIpCnsKCWludAltYXNrLCByZXR2YWw7Cgl2b2xhdGlsZSB1bnNpZ25lZCBp
bnQgKmEgPSAodm9sYXRpbGUgdW5zaWduZWQgaW50ICopIGFkZHI7Cgl1bnNpZ25lZCBsb25nIGZs
YWdzOwoKCWEgKz0gbnIgPj4gNTsKCW1hc2sgPSAxIDw8IChuciAmIDB4MWYpOwoJZG8geyBhc20g
dm9sYXRpbGUgKCJtb3ZldyAlJXNyLCUwIjoiPWQiICggICAgZmxhZ3MgICAgKSA6IDogIm1lbW9y
eSIpICA7IF9fYXNtX18gX192b2xhdGlsZV9fICggIm1vdmUgJS9zciwlJWQwXG5cdCIgIm9yaS5s
ICAjMHgwNzAwLCUlZDBcblx0IiAibW92ZSAlJWQwLCUvc3JcbiIgOiA6IDogImNjIiwgIiVkMCIs
ICJtZW1vcnkiKSAgOyB9IHdoaWxlKDApICA7CglyZXR2YWwgPSAobWFzayAmICphKSAhPSAwOwoJ
KmEgfD0gbWFzazsKCWFzbSB2b2xhdGlsZSAoIm1vdmV3ICUwLCUlc3IiOiA6ImQiICggIGZsYWdz
ICApIDogIm1lbW9yeSIpICA7CgoJcmV0dXJuIHJldHZhbDsKfQoKZXh0ZXJuIF9faW5saW5lX18g
aW50IF9fdGVzdF9hbmRfc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQp7Cglp
bnQJbWFzaywgcmV0dmFsOwoJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gKHZvbGF0aWxlIHVu
c2lnbmVkIGludCAqKSBhZGRyOwoKCWEgKz0gbnIgPj4gNTsKCW1hc2sgPSAxIDw8IChuciAmIDB4
MWYpOwoJcmV0dmFsID0gKG1hc2sgJiAqYSkgIT0gMDsKCSphIHw9IG1hc2s7CglyZXR1cm4gcmV0
dmFsOwp9CgpleHRlcm4gX19pbmxpbmVfXyBpbnQgdGVzdF9hbmRfY2xlYXJfYml0KGludCBuciwg
dm9sYXRpbGUgdm9pZCAqIGFkZHIpCnsKCWludAltYXNrLCByZXR2YWw7Cgl2b2xhdGlsZSB1bnNp
Z25lZCBpbnQgKmEgPSAodm9sYXRpbGUgdW5zaWduZWQgaW50ICopIGFkZHI7Cgl1bnNpZ25lZCBs
b25nIGZsYWdzOwoKCWEgKz0gbnIgPj4gNTsKCW1hc2sgPSAxIDw8IChuciAmIDB4MWYpOwoJZG8g
eyBhc20gdm9sYXRpbGUgKCJtb3ZldyAlJXNyLCUwIjoiPWQiICggICAgZmxhZ3MgICAgKSA6IDog
Im1lbW9yeSIpICA7IF9fYXNtX18gX192b2xhdGlsZV9fICggIm1vdmUgJS9zciwlJWQwXG5cdCIg
Im9yaS5sICAjMHgwNzAwLCUlZDBcblx0IiAibW92ZSAlJWQwLCUvc3JcbiIgOiA6IDogImNjIiwg
IiVkMCIsICJtZW1vcnkiKSAgOyB9IHdoaWxlKDApICA7CglyZXR2YWwgPSAobWFzayAmICphKSAh
PSAwOwoJKmEgJj0gfm1hc2s7Cglhc20gdm9sYXRpbGUgKCJtb3ZldyAlMCwlJXNyIjogOiJkIiAo
ICBmbGFncyAgKSA6ICJtZW1vcnkiKSAgOwoKCXJldHVybiByZXR2YWw7Cn0KCmV4dGVybiBfX2lu
bGluZV9fIGludCBfX3Rlc3RfYW5kX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBh
ZGRyKQp7CglpbnQJbWFzaywgcmV0dmFsOwoJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gKHZv
bGF0aWxlIHVuc2lnbmVkIGludCAqKSBhZGRyOwoKCWEgKz0gbnIgPj4gNTsKCW1hc2sgPSAxIDw8
IChuciAmIDB4MWYpOwoJcmV0dmFsID0gKG1hc2sgJiAqYSkgIT0gMDsKCSphICY9IH5tYXNrOwoJ
cmV0dXJuIHJldHZhbDsKfQoKZXh0ZXJuIF9faW5saW5lX18gaW50IHRlc3RfYW5kX2NoYW5nZV9i
aXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKewoJaW50CW1hc2ssIHJldHZhbDsKCXZv
bGF0aWxlIHVuc2lnbmVkIGludCAqYSA9ICh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgYWRkcjsK
CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CgoJYSArPSBuciA+PiA1OwoJbWFzayA9IDEgPDwgKG5yICYg
MHgxZik7CglkbyB7IGFzbSB2b2xhdGlsZSAoIm1vdmV3ICUlc3IsJTAiOiI9ZCIgKCAgICBmbGFn
cyAgICApIDogOiAibWVtb3J5IikgIDsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCAibW92ZSAlL3Ny
LCUlZDBcblx0IiAib3JpLmwgICMweDA3MDAsJSVkMFxuXHQiICJtb3ZlICUlZDAsJS9zclxuIiA6
IDogOiAiY2MiLCAiJWQwIiwgIm1lbW9yeSIpICA7IH0gd2hpbGUoMCkgIDsKCXJldHZhbCA9ICht
YXNrICYgKmEpICE9IDA7CgkqYSBePSBtYXNrOwoJYXNtIHZvbGF0aWxlICgibW92ZXcgJTAsJSVz
ciI6IDoiZCIgKCAgZmxhZ3MgICkgOiAibWVtb3J5IikgIDsKCglyZXR1cm4gcmV0dmFsOwp9Cgpl
eHRlcm4gX19pbmxpbmVfXyBpbnQgX190ZXN0X2FuZF9jaGFuZ2VfYml0KGludCBuciwgdm9sYXRp
bGUgdm9pZCAqIGFkZHIpCnsKCWludAltYXNrLCByZXR2YWw7Cgl2b2xhdGlsZSB1bnNpZ25lZCBp
bnQgKmEgPSAodm9sYXRpbGUgdW5zaWduZWQgaW50ICopIGFkZHI7CgoJYSArPSBuciA+PiA1OwoJ
bWFzayA9IDEgPDwgKG5yICYgMHgxZik7CglyZXR2YWwgPSAobWFzayAmICphKSAhPSAwOwoJKmEg
Xj0gbWFzazsKCXJldHVybiByZXR2YWw7Cn0KCiAKCgpleHRlcm4gX19pbmxpbmVfXyBpbnQgX19j
b25zdGFudF90ZXN0X2JpdChpbnQgbnIsIGNvbnN0IHZvbGF0aWxlIHZvaWQgKiBhZGRyKQp7Cgly
ZXR1cm4gKCgxVUwgPDwgKG5yICYgMzEpKSAmICgoKGNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIGlu
dCAqKSBhZGRyKVtuciA+PiA1XSkpICE9IDA7Cn0KCmV4dGVybiBfX2lubGluZV9fIGludCBfX3Rl
c3RfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCnsKCWludCAJKiBhID0gKGludCAq
KSBhZGRyOwoJaW50CW1hc2s7CgoJYSArPSBuciA+PiA1OwoJbWFzayA9IDEgPDwgKG5yICYgMHgx
Zik7CglyZXR1cm4gKChtYXNrICYgKmEpICE9IDApOwp9CgoKCgoKCgoKCmV4dGVybiBfX2lubGlu
ZV9fIGludCBmaW5kX25leHRfemVyb19iaXQgKHZvaWQgKiBhZGRyLCBpbnQgc2l6ZSwgaW50IG9m
ZnNldCkKewoJdW5zaWduZWQgbG9uZyAqcCA9ICgodW5zaWduZWQgbG9uZyAqKSBhZGRyKSArIChv
ZmZzZXQgPj4gNSk7Cgl1bnNpZ25lZCBsb25nIHJlc3VsdCA9IG9mZnNldCAmIH4zMVVMOwoJdW5z
aWduZWQgbG9uZyB0bXA7CgoJaWYgKG9mZnNldCA+PSBzaXplKQoJCXJldHVybiBzaXplOwoJc2l6
ZSAtPSByZXN1bHQ7CglvZmZzZXQgJj0gMzFVTDsKCWlmIChvZmZzZXQpIHsKCQl0bXAgPSAqKHAr
Kyk7CgkJdG1wIHw9IH4wVUwgPj4gKDMyLW9mZnNldCk7CgkJaWYgKHNpemUgPCAzMikKCQkJZ290
byBmb3VuZF9maXJzdDsKCQlpZiAofnRtcCkKCQkJZ290byBmb3VuZF9taWRkbGU7CgkJc2l6ZSAt
PSAzMjsKCQlyZXN1bHQgKz0gMzI7Cgl9Cgl3aGlsZSAoc2l6ZSAmIH4zMVVMKSB7CgkJaWYgKH4o
dG1wID0gKihwKyspKSkKCQkJZ290byBmb3VuZF9taWRkbGU7CgkJcmVzdWx0ICs9IDMyOwoJCXNp
emUgLT0gMzI7Cgl9CglpZiAoIXNpemUpCgkJcmV0dXJuIHJlc3VsdDsKCXRtcCA9ICpwOwoKZm91
bmRfZmlyc3Q6Cgl0bXAgfD0gfjBVTCA+PiBzaXplOwpmb3VuZF9taWRkbGU6CglyZXR1cm4gcmVz
dWx0ICsgZmZ6KHRtcCk7Cn0KCgoKIAoKCgoKCgoKCgpleHRlcm4gX19pbmxpbmVfXyBpbnQgZXh0
Ml9zZXRfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCnsKCWludAkJbWFzaywgcmV0
dmFsOwoJdW5zaWduZWQgbG9uZwlmbGFnczsKCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIJKkFERFIg
PSAodW5zaWduZWQgY2hhciAqKSBhZGRyOwoKCUFERFIgKz0gbnIgPj4gMzsKCW1hc2sgPSAxIDw8
IChuciAmIDB4MDcpOwoJZG8geyBhc20gdm9sYXRpbGUgKCJtb3ZldyAlJXNyLCUwIjoiPWQiICgg
ICAgZmxhZ3MgICAgKSA6IDogIm1lbW9yeSIpICA7IF9fYXNtX18gX192b2xhdGlsZV9fICggIm1v
dmUgJS9zciwlJWQwXG5cdCIgIm9yaS5sICAjMHgwNzAwLCUlZDBcblx0IiAibW92ZSAlJWQwLCUv
c3JcbiIgOiA6IDogImNjIiwgIiVkMCIsICJtZW1vcnkiKSAgOyB9IHdoaWxlKDApICA7CglyZXR2
YWwgPSAobWFzayAmICpBRERSKSAhPSAwOwoJKkFERFIgfD0gbWFzazsKCWFzbSB2b2xhdGlsZSAo
Im1vdmV3ICUwLCUlc3IiOiA6ImQiICggIGZsYWdzICApIDogIm1lbW9yeSIpICA7CglyZXR1cm4g
cmV0dmFsOwp9CgpleHRlcm4gX19pbmxpbmVfXyBpbnQgZXh0Ml9jbGVhcl9iaXQoaW50IG5yLCB2
b2xhdGlsZSB2b2lkICogYWRkcikKewoJaW50CQltYXNrLCByZXR2YWw7Cgl1bnNpZ25lZCBsb25n
CWZsYWdzOwoJdm9sYXRpbGUgdW5zaWduZWQgY2hhcgkqQUREUiA9ICh1bnNpZ25lZCBjaGFyICop
IGFkZHI7CgoJQUREUiArPSBuciA+PiAzOwoJbWFzayA9IDEgPDwgKG5yICYgMHgwNyk7CglkbyB7
IGFzbSB2b2xhdGlsZSAoIm1vdmV3ICUlc3IsJTAiOiI9ZCIgKCAgICBmbGFncyAgICApIDogOiAi
bWVtb3J5IikgIDsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCAibW92ZSAlL3NyLCUlZDBcblx0IiAi
b3JpLmwgICMweDA3MDAsJSVkMFxuXHQiICJtb3ZlICUlZDAsJS9zclxuIiA6IDogOiAiY2MiLCAi
JWQwIiwgIm1lbW9yeSIpICA7IH0gd2hpbGUoMCkgIDsKCXJldHZhbCA9IChtYXNrICYgKkFERFIp
ICE9IDA7CgkqQUREUiAmPSB+bWFzazsKCWFzbSB2b2xhdGlsZSAoIm1vdmV3ICUwLCUlc3IiOiA6
ImQiICggIGZsYWdzICApIDogIm1lbW9yeSIpICA7CglyZXR1cm4gcmV0dmFsOwp9CgpleHRlcm4g
X19pbmxpbmVfXyBpbnQgZXh0Ml90ZXN0X2JpdChpbnQgbnIsIGNvbnN0IHZvbGF0aWxlIHZvaWQg
KiBhZGRyKQp7CglpbnQJCQltYXNrOwoJY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgY2hhcgkqQURE
UiA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIGFkZHI7CgoJQUREUiArPSBuciA+PiAzOwoJbWFz
ayA9IDEgPDwgKG5yICYgMHgwNyk7CglyZXR1cm4gKChtYXNrICYgKkFERFIpICE9IDApOwp9CgoK
CgpleHRlcm4gX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGV4dDJfZmluZF9uZXh0X3plcm9fYml0
KHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCnsK
CXVuc2lnbmVkIGxvbmcgKnAgPSAoKHVuc2lnbmVkIGxvbmcgKikgYWRkcikgKyAob2Zmc2V0ID4+
IDUpOwoJdW5zaWduZWQgbG9uZyByZXN1bHQgPSBvZmZzZXQgJiB+MzFVTDsKCXVuc2lnbmVkIGxv
bmcgdG1wOwoKCWlmIChvZmZzZXQgPj0gc2l6ZSkKCQlyZXR1cm4gc2l6ZTsKCXNpemUgLT0gcmVz
dWx0OwoJb2Zmc2V0ICY9IDMxVUw7CglpZihvZmZzZXQpIHsKCQkgCgoKCgoKCgoKCgkJdG1wID0g
KihwKyspOwoJCXRtcCB8PSAoX19idWlsdGluX2NvbnN0YW50X3AoKF9fdTMyKSggfjBVTCA+PiAo
MzItb2Zmc2V0KSApKSA/ICh7IF9fdTMyIF9feCA9ICggKCB+MFVMID4+ICgzMi1vZmZzZXQpICkg
KTsgKChfX3UzMikoICgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4MDAwMDAwZmZVTCkgPDwgMjQp
IHwgKCgoX191MzIpKF9feCkgJiAoX191MzIpMHgwMDAwZmYwMFVMKSA8PCAgOCkgfCAoKChfX3Uz
MikoX194KSAmIChfX3UzMikweDAwZmYwMDAwVUwpID4+ICA4KSB8ICgoKF9fdTMyKShfX3gpICYg
KF9fdTMyKTB4ZmYwMDAwMDBVTCkgPj4gMjQpICkpOyB9KSAgOiBfX2Zzd2FiMzIoKCB+MFVMID4+
ICgzMi1vZmZzZXQpICkpKSA7CgkJaWYoc2l6ZSA8IDMyKQoJCQlnb3RvIGZvdW5kX2ZpcnN0OwoJ
CWlmKH50bXApCgkJCWdvdG8gZm91bmRfbWlkZGxlOwoJCXNpemUgLT0gMzI7CgkJcmVzdWx0ICs9
IDMyOwoJfQoJd2hpbGUoc2l6ZSAmIH4zMVVMKSB7CgkJaWYofih0bXAgPSAqKHArKykpKQoJCQln
b3RvIGZvdW5kX21pZGRsZTsKCQlyZXN1bHQgKz0gMzI7CgkJc2l6ZSAtPSAzMjsKCX0KCWlmKCFz
aXplKQoJCXJldHVybiByZXN1bHQ7Cgl0bXAgPSAqcDsKCmZvdW5kX2ZpcnN0OgoJIAoKCgoJcmV0
dXJuIHJlc3VsdCArIGZmeigoX19idWlsdGluX2NvbnN0YW50X3AoKF9fdTMyKSggdG1wICkpID8g
KHsgX191MzIgX194ID0gKCAoIHRtcCApICk7ICgoX191MzIpKCAoKChfX3UzMikoX194KSAmIChf
X3UzMikweDAwMDAwMGZmVUwpIDw8IDI0KSB8ICgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4MDAw
MGZmMDBVTCkgPDwgIDgpIHwgKCgoX191MzIpKF9feCkgJiAoX191MzIpMHgwMGZmMDAwMFVMKSA+
PiAgOCkgfCAoKChfX3UzMikoX194KSAmIChfX3UzMikweGZmMDAwMDAwVUwpID4+IDI0KSApKTsg
fSkgIDogX19mc3dhYjMyKCggdG1wICkpKSAgfCAofjBVTCA8PCBzaXplKSk7CmZvdW5kX21pZGRs
ZToKCXJldHVybiByZXN1bHQgKyBmZnooKF9fYnVpbHRpbl9jb25zdGFudF9wKChfX3UzMikoIHRt
cCApKSA/ICh7IF9fdTMyIF9feCA9ICggKCB0bXAgKSApOyAoKF9fdTMyKSggKCgoX191MzIpKF9f
eCkgJiAoX191MzIpMHgwMDAwMDBmZlVMKSA8PCAyNCkgfCAoKChfX3UzMikoX194KSAmIChfX3Uz
MikweDAwMDBmZjAwVUwpIDw8ICA4KSB8ICgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4MDBmZjAw
MDBVTCkgPj4gIDgpIHwgKCgoX191MzIpKF9feCkgJiAoX191MzIpMHhmZjAwMDAwMFVMKSA+PiAy
NCkgKSk7IH0pICA6IF9fZnN3YWIzMigoIHRtcCApKSkgKTsKfQoKIAoKCgoKCgogCgoKCgoKCgoK
CgoKCgojIDI2ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40Lngv
aW5jbHVkZS9saW51eC9mcy5oIiAyCgoKc3RydWN0IHBvbGxfdGFibGVfc3RydWN0OwoKCiAKCgoK
CgoKCgoKIAoKCgoKCgoKIApzdHJ1Y3QgZmlsZXNfc3RhdF9zdHJ1Y3QgewoJaW50IG5yX2ZpbGVz
OwkJIAoJaW50IG5yX2ZyZWVfZmlsZXM7CSAKCWludCBtYXhfZmlsZXM7CQkgCn07CmV4dGVybiBz
dHJ1Y3QgZmlsZXNfc3RhdF9zdHJ1Y3QgZmlsZXNfc3RhdDsKCnN0cnVjdCBpbm9kZXNfc3RhdF90
IHsKCWludCBucl9pbm9kZXM7CglpbnQgbnJfdW51c2VkOwoJaW50IGR1bW15WzVdOwp9OwpleHRl
cm4gc3RydWN0IGlub2Rlc19zdGF0X3QgaW5vZGVzX3N0YXQ7CgpleHRlcm4gaW50IGxlYXNlc19l
bmFibGUsIGRpcl9ub3RpZnlfZW5hYmxlLCBsZWFzZV9icmVha190aW1lOwoKCgoKCgoKCgoKCgoK
CgoKCgoKCgogCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgoKCgoKIAoK
CgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKIAoKCgoKCgoKCgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGlu
dXgtMi40LngvaW5jbHVkZS9hc20vc2VtYXBob3JlLmgiIDEKCgoKCgoKCgoKCiMgMSAiL2hvbWUv
Y2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvcndz
ZW0uaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKc3RydWN0IHJ3X3NlbWFwaG9yZTsKCgojIDEg
Ii9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xp
bnV4L3J3c2VtLXNwaW5sb2NrLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCnN0cnVjdCByd3Nl
bV93YWl0ZXI7CgogCgoKCgoKCnN0cnVjdCByd19zZW1hcGhvcmUgewoJX19zMzIJCQlhY3Rpdml0
eTsKCXNwaW5sb2NrX3QJCXdhaXRfbG9jazsKCXN0cnVjdCBsaXN0X2hlYWQJd2FpdF9saXN0OwoK
Cgp9OwoKIAoKCgoKCgoKCgoKCgoKCmV4dGVybiB2b2lkICBpbml0X3J3c2VtKHN0cnVjdCByd19z
ZW1hcGhvcmUgKnNlbSkgIDsKZXh0ZXJuIHZvaWQgIF9fZG93bl9yZWFkKHN0cnVjdCByd19zZW1h
cGhvcmUgKnNlbSkgIDsKZXh0ZXJuIHZvaWQgIF9fZG93bl93cml0ZShzdHJ1Y3Qgcndfc2VtYXBo
b3JlICpzZW0pICA7CmV4dGVybiB2b2lkICBfX3VwX3JlYWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAq
c2VtKSAgOwpleHRlcm4gdm9pZCAgX191cF93cml0ZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0p
ICA7CgoKCiMgMjUgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQu
eC9pbmNsdWRlL2xpbnV4L3J3c2VtLmgiIDIKCgoKCgoKCgoKCgoKCiAKCgpzdGF0aWMgaW5saW5l
IHZvaWQgZG93bl9yZWFkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKewoJIDsKCV9fZG93bl9y
ZWFkKHNlbSk7CgkgOwp9CgogCgoKc3RhdGljIGlubGluZSB2b2lkIGRvd25fd3JpdGUoc3RydWN0
IHJ3X3NlbWFwaG9yZSAqc2VtKQp7CgkgOwoJX19kb3duX3dyaXRlKHNlbSk7CgkgOwp9CgogCgoK
c3RhdGljIGlubGluZSB2b2lkIHVwX3JlYWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQp7Cgkg
OwoJX191cF9yZWFkKHNlbSk7CgkgOwp9CgogCgoKc3RhdGljIGlubGluZSB2b2lkIHVwX3dyaXRl
KHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKewoJIDsKCV9fdXBfd3JpdGUoc2VtKTsKCSA7Cn0K
CgoKCiMgMTEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9p
bmNsdWRlL2FzbS9zZW1hcGhvcmUuaCIgMgoKCgoKCiAKCgoKCgoKCgpzdHJ1Y3Qgc2VtYXBob3Jl
IHsKCWF0b21pY190IGNvdW50OwoJYXRvbWljX3Qgd2FraW5nOwoJd2FpdF9xdWV1ZV9oZWFkX3Qg
d2FpdDsKCgoKfTsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuIGlubGluZSB2b2lkIHNlbWFf
aW5pdCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtLCBpbnQgdmFsKQp7Cgkqc2VtID0gKHN0cnVjdCBz
ZW1hcGhvcmUpeyB7ICggICB2YWwgICkgfSAsIHsgKCAwICkgfSAsIHsJbG9jazoJCShzcGlubG9j
a190KSB7IDAgfSAgLAl0YXNrX2xpc3Q6CXsgJiggKCAqc2VtICkud2FpdCApLnRhc2tfbGlzdCwg
JiggKCAqc2VtICkud2FpdCApLnRhc2tfbGlzdCB9LAkgfSAgICB9IDsKfQoKc3RhdGljIGlubGlu
ZSB2b2lkIGluaXRfTVVURVggKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKewoJc2VtYV9pbml0KHNl
bSwgMSk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X01VVEVYX0xPQ0tFRCAoc3RydWN0IHNl
bWFwaG9yZSAqc2VtKQp7CglzZW1hX2luaXQoc2VtLCAwKTsKfQoKICAgdm9pZCBfX2Rvd25fZmFp
bGVkKHZvaWQgICk7CiAgIGludCAgX19kb3duX2ZhaWxlZF9pbnRlcnJ1cHRpYmxlKHZvaWQgICAp
OwogICBpbnQgIF9fZG93bl9mYWlsZWRfdHJ5bG9jayh2b2lkICAgKTsKICAgdm9pZCBfX3VwX3dh
a2V1cCh2b2lkICApOwoKICAgdm9pZCBfX2Rvd24oc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7CiAg
IGludCAgX19kb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7CiAgIGlu
dCAgX19kb3duX3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqIHNlbSk7CiAgIHZvaWQgX191cChz
dHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKCmV4dGVybiBzcGlubG9ja190IHNlbWFwaG9yZV93YWtl
X2xvY2s7CgogCgoKCgpleHRlcm4gaW5saW5lIHZvaWQgZG93bihzdHJ1Y3Qgc2VtYXBob3JlICog
c2VtKQp7CgoKCgoJX19hc21fXyBfX3ZvbGF0aWxlX18oCgkJInwgYXRvbWljIGRvd24gb3BlcmF0
aW9uXG5cdCIKCQkibW92ZWwJJTAsICUlYTFcblx0IgoJCSJsZWEJJSVwY0AoMWYpLCAlJWEwXG5c
dCIKCQkic3VicWwJIzEsICUlYTFAXG5cdCIKCQkiam1pICIgIl9fZG93bl9mYWlsZWQiICAiXG4i
CgkJIjE6IgoJCTogIAoJCTogImciIChzZW0pCgkJOiAiY2MiLCAiJWEwIiwgIiVhMSIsICJtZW1v
cnkiKTsKfQoKZXh0ZXJuIGlubGluZSBpbnQgZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1h
cGhvcmUgKiBzZW0pCnsKCWludCByZXQ7CgoKCgoKCV9fYXNtX18gX192b2xhdGlsZV9fKAoJCSJ8
IGF0b21pYyBkb3duIG9wZXJhdGlvblxuXHQiCgkJIm1vdmVsCSUxLCAlJWExXG5cdCIKCQkibGVh
CSUlcGNAKDFmKSwgJSVhMFxuXHQiCgkJInN1YnFsCSMxLCAlJWExQFxuXHQiCgkJImptaSAiICJf
X2Rvd25fZmFpbGVkX2ludGVycnVwdGlibGUiICAiXG5cdCIKCQkiY2xybAklJWQwXG4iCgkJIjE6
IG1vdmVsCSUlZDAsICUwXG4iCgkJOiAiPWQiIChyZXQpCgkJOiAiZyIgKHNlbSkKCQk6ICJjYyIs
ICIlZDAiLCAiJWEwIiwgIiVhMSIsICJtZW1vcnkiKTsKCXJldHVybihyZXQpOwp9CgogCmV4dGVy
biBpbmxpbmUgaW50IGRvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQp7CglyZWdp
c3RlciBzdHJ1Y3Qgc2VtYXBob3JlICpzZW0xIF9fYXNtX18gKCIlYTEiKSA9IHNlbTsKCXJlZ2lz
dGVyIGludCByZXN1bHQgX19hc21fXyAoIiVkMCIpOwoKCgoKCglfX2FzbV9fIF9fdm9sYXRpbGVf
XygKCQkifCBhdG9taWMgZG93biB0cnlsb2NrIG9wZXJhdGlvblxuXHQiCgkJInN1YnFsICMxLCUx
QFxuXHQiCgkJImptaSAyZlxuXHQiCgkJImNscmwgJTBcbiIKCQkiMTpcbiIKCQkiLnNlY3Rpb24g
LnRleHQubG9jayxcImF4XCJcbiIKCQkiLmV2ZW5cbiIKCQkiMjpcdHBlYSAxYlxuXHQiCgkJImpi
cmEgX19kb3duX2ZhaWxlZF90cnlsb2NrXG4iCgkJIi5wcmV2aW91cyIKCQk6ICI9ZCIgKHJlc3Vs
dCkKCQk6ICJhIiAoc2VtMSkKCQk6ICIlZDAiLCAibWVtb3J5Iik7CglyZXR1cm4gcmVzdWx0Owp9
CgogCgoKCgoKZXh0ZXJuIGlubGluZSB2b2lkIHVwKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCnsK
CgoKCglfX2FzbV9fIF9fdm9sYXRpbGVfXygKCQkifCBhdG9taWMgdXAgb3BlcmF0aW9uXG5cdCIK
CQkibW92ZWwJJTAsICUlYTFcblx0IgoJCSJsZWEJJSVwY0AoMWYpLCAlJWEwXG5cdCIKCQkiYWRk
cWwJIzEsICUlYTFAXG5cdCIKCQkiamxlICIgIl9fdXBfd2FrZXVwIiAgIlxuIgoJCSIxOiIKCQk6
ICAKCQk6ICJnIiAoc2VtKQoJCTogImNjIiwgIiVhMCIsICIlYTEiLCAibWVtb3J5Iik7Cn0KCgoK
CiMgMTk5ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5j
bHVkZS9saW51eC9mcy5oIiAyCgoKCmV4dGVybiB2b2lkIHVwZGF0ZV9hdGltZSAoc3RydWN0IGlu
b2RlICopOwoKCmV4dGVybiB2b2lkIGJ1ZmZlcl9pbml0KHVuc2lnbmVkIGxvbmcpOwpleHRlcm4g
dm9pZCBpbm9kZV9pbml0KHVuc2lnbmVkIGxvbmcpOwpleHRlcm4gdm9pZCBtbnRfaW5pdCh1bnNp
Z25lZCBsb25nKTsKCiAKZW51bSBiaF9zdGF0ZV9iaXRzIHsKCUJIX1VwdG9kYXRlLAkgCglCSF9E
aXJ0eSwJIAoJQkhfTG9jaywJIAoJQkhfUmVxLAkJIAoJQkhfTWFwcGVkLAkgCglCSF9OZXcsCQkg
CglCSF9Bc3luYywJIAoJQkhfV2FpdF9JTywJIAoJQkhfbGF1bmRlciwJIAoJQkhfSkJELAkJIAoK
CUJIX1ByaXZhdGVTdGFydCwgCgoKfTsKCiAKCgoKCgoKCgoKCnN0cnVjdCBidWZmZXJfaGVhZCB7
CgkgCglzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJfbmV4dDsJIAoJdW5zaWduZWQgbG9uZyBiX2Jsb2Nr
bnI7CSAKCXVuc2lnbmVkIHNob3J0IGJfc2l6ZTsJCSAKCXVuc2lnbmVkIHNob3J0IGJfbGlzdDsJ
CSAKCWtkZXZfdCBiX2RldjsJCQkgCgoJYXRvbWljX3QgYl9jb3VudDsJCSAKCWtkZXZfdCBiX3Jk
ZXY7CQkJIAoJdW5zaWduZWQgbG9uZyBiX3N0YXRlOwkJIAoJdW5zaWduZWQgbG9uZyBiX2ZsdXNo
dGltZTsJIAoKCXN0cnVjdCBidWZmZXJfaGVhZCAqYl9uZXh0X2ZyZWU7IAoJc3RydWN0IGJ1ZmZl
cl9oZWFkICpiX3ByZXZfZnJlZTsgCglzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJfdGhpc19wYWdlOyAK
CXN0cnVjdCBidWZmZXJfaGVhZCAqYl9yZXFuZXh0OwkgCgoJc3RydWN0IGJ1ZmZlcl9oZWFkICoq
Yl9wcHJldjsJIAoJY2hhciAqIGJfZGF0YTsJCQkgCglzdHJ1Y3QgcGFnZSAqYl9wYWdlOwkJIAoJ
dm9pZCAoKmJfZW5kX2lvKShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBpbnQgdXB0b2RhdGUpOyAg
CiAJdm9pZCAqYl9wcml2YXRlOwkJIAoKCXVuc2lnbmVkIGxvbmcgYl9yc2VjdG9yOwkgCgl3YWl0
X3F1ZXVlX2hlYWRfdCBiX3dhaXQ7CgoJc3RydWN0IGlub2RlICoJICAgICBiX2lub2RlOwoJc3Ry
dWN0IGxpc3RfaGVhZCAgICAgYl9pbm9kZV9idWZmZXJzOwkgCn07Cgp0eXBlZGVmIHZvaWQgKGJo
X2VuZF9pb190KShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBpbnQgdXB0b2RhdGUpOwp2b2lkIGlu
aXRfYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVhZCAqLCBiaF9lbmRfaW9fdCAqLCB2b2lkICopOwoK
CgoKCgoKCgoKCgoKZXh0ZXJuIHZvaWQgc2V0X2JoX3BhZ2Uoc3RydWN0IGJ1ZmZlcl9oZWFkICpi
aCwgc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKCgoKCiMgMSAiL2hv
bWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgv
cGlwZV9mc19pLmgiIDEKCgoKCnN0cnVjdCBwaXBlX2lub2RlX2luZm8gewoJd2FpdF9xdWV1ZV9o
ZWFkX3Qgd2FpdDsKCWNoYXIgKmJhc2U7Cgl1bnNpZ25lZCBpbnQgbGVuOwoJdW5zaWduZWQgaW50
IHN0YXJ0OwoJdW5zaWduZWQgaW50IHJlYWRlcnM7Cgl1bnNpZ25lZCBpbnQgd3JpdGVyczsKCXVu
c2lnbmVkIGludCB3YWl0aW5nX3JlYWRlcnM7Cgl1bnNpZ25lZCBpbnQgd2FpdGluZ193cml0ZXJz
OwoJdW5zaWduZWQgaW50IHJfY291bnRlcjsKCXVuc2lnbmVkIGludCB3X2NvdW50ZXI7Cn07Cgog
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCnZvaWQgcGlwZV93YWl0KHN0cnVjdCBpbm9kZSAqIGlu
b2RlKTsKCnN0cnVjdCBpbm9kZSogcGlwZV9uZXcoc3RydWN0IGlub2RlKiBpbm9kZSk7CgoKIyAy
ODkgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRl
L2xpbnV4L2ZzLmgiIDIKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xp
bnV4LTIuNC54L2luY2x1ZGUvbGludXgvbWluaXhfZnNfaS5oIiAxCgoKCiAKCgpzdHJ1Y3QgbWlu
aXhfaW5vZGVfaW5mbyB7Cgl1bmlvbiB7CgkJX191MTYgaTFfZGF0YVsxNl07CgkJX191MzIgaTJf
ZGF0YVsxNl07Cgl9IHU7Cn07CgoKIyAyOTAgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9l
Y2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCiMgMSAiL2hvbWUvY2FybG9z
L0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvZXh0Ml9mc19p
LmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgpzdHJ1Y3QgZXh0Ml9pbm9kZV9pbmZvIHsKCV9f
dTMyCWlfZGF0YVsxNV07CglfX3UzMglpX2ZsYWdzOwoJX191MzIJaV9mYWRkcjsKCV9fdTgJaV9m
cmFnX25vOwoJX191OAlpX2ZyYWdfc2l6ZTsKCV9fdTE2CWlfb3N5bmM7CglfX3UzMglpX2ZpbGVf
YWNsOwoJX191MzIJaV9kaXJfYWNsOwoJX191MzIJaV9kdGltZTsKCV9fdTMyCWlfYmxvY2tfZ3Jv
dXA7CglfX3UzMglpX25leHRfYWxsb2NfYmxvY2s7CglfX3UzMglpX25leHRfYWxsb2NfZ29hbDsK
CV9fdTMyCWlfcHJlYWxsb2NfYmxvY2s7CglfX3UzMglpX3ByZWFsbG9jX2NvdW50OwoJX191MzIJ
aV9kaXJfc3RhcnRfbG9va3VwOwoJaW50CWlfbmV3X2lub2RlOjE7CSAKfTsKCgojIDI5MSAiL2hv
bWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgv
ZnMuaCIgMgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40
LngvaW5jbHVkZS9saW51eC9leHQzX2ZzX2kuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoK
c3RydWN0IGV4dDNfaW5vZGVfaW5mbyB7CglfX3UzMglpX2RhdGFbMTVdOwoJX191MzIJaV9mbGFn
czsKCgoKCgoKCV9fdTMyCWlfZmlsZV9hY2w7CglfX3UzMglpX2Rpcl9hY2w7CglfX3UzMglpX2R0
aW1lOwoJX191MzIJaV9ibG9ja19ncm91cDsKCV9fdTMyCWlfc3RhdGU7CQkgCglfX3UzMglpX25l
eHRfYWxsb2NfYmxvY2s7CglfX3UzMglpX25leHRfYWxsb2NfZ29hbDsKCgoKCglfX3UzMglpX2Rp
cl9zdGFydF9sb29rdXA7CgkKCXN0cnVjdCBsaXN0X2hlYWQgaV9vcnBoYW47CSAKCgkgCgoKCgoK
CgoKCgoKCgoKCWxvZmZfdAlpX2Rpc2tzaXplOwoKCSAKCgoKCgoKCgoKCXN0cnVjdCByd19zZW1h
cGhvcmUgdHJ1bmNhdGVfc2VtOwp9OwoKCiMgMjkyICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElO
VVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9mcy5oIiAyCgojIDEgIi9ob21lL2Nh
cmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2hwZnNf
ZnNfaS5oIiAxCgoKCnN0cnVjdCBocGZzX2lub2RlX2luZm8gewoJdW5zaWduZWQgbG9uZyBtbXVf
cHJpdmF0ZTsKCWlub190IGlfcGFyZW50X2RpcjsJIAoJdW5zaWduZWQgaV9kbm87CQkgCgl1bnNp
Z25lZCBpX2Rwb3M7CSAKCXVuc2lnbmVkIGlfZHN1YmRubzsJIAoJdW5zaWduZWQgaV9maWxlX3Nl
YzsJIAoJdW5zaWduZWQgaV9kaXNrX3NlYzsJIAoJdW5zaWduZWQgaV9uX3NlY3M7CSAKCXVuc2ln
bmVkIGlfZWFfc2l6ZTsJIAoJdW5zaWduZWQgaV9jb252IDogMjsJIAoJdW5zaWduZWQgaV9lYV9t
b2RlIDogMTsJIAoJdW5zaWduZWQgaV9lYV91aWQgOiAxOwkgCgl1bnNpZ25lZCBpX2VhX2dpZCA6
IDE7CSAKCXVuc2lnbmVkIGlfZGlydHkgOiAxOwoJc3RydWN0IHNlbWFwaG9yZSBpX3NlbTsJIAoJ
bG9mZl90ICoqaV9yZGRpcl9vZmY7Cn07CgoKCgoKCgoKCgoKCgogCiAKCgoKCgojIDI5MyAiL2hv
bWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgv
ZnMuaCIgMgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40
LngvaW5jbHVkZS9saW51eC9udGZzX2ZzX2kuaCIgMQoKCgoKCiAKc3RydWN0IG50ZnNfYXR0cmli
dXRlOwpzdHJ1Y3QgbnRmc19zYl9pbmZvOwoKIAoKCnR5cGVkZWYgdTggIG50ZnNfdTg7CnR5cGVk
ZWYgdTE2IG50ZnNfdTE2Owp0eXBlZGVmIHUzMiBudGZzX3UzMjsKdHlwZWRlZiB1NjQgbnRmc191
NjQ7CnR5cGVkZWYgczggIG50ZnNfczg7CnR5cGVkZWYgczE2IG50ZnNfczE2Owp0eXBlZGVmIHMz
MiBudGZzX3MzMjsKdHlwZWRlZiBzNjQgbnRmc19zNjQ7CgoKCgp0eXBlZGVmIF9fa2VybmVsX21v
ZGVfdCBudG1vZGVfdDsKCgoKdHlwZWRlZiB1aWRfdCBudGZzX3VpZF90OwoKCgp0eXBlZGVmIGdp
ZF90IG50ZnNfZ2lkX3Q7CgoKCnR5cGVkZWYgX19rZXJuZWxfc2l6ZV90IG50ZnNfc2l6ZV90OwoK
Cgp0eXBlZGVmIF9fa2VybmVsX3RpbWVfdCBudGZzX3RpbWVfdDsKCgogCgoKdHlwZWRlZiB1MTYg
bnRmc193Y2hhcl90OwoKIAoKCnR5cGVkZWYgczY0IG50ZnNfb2Zmc2V0X3Q7CgogCgoKdHlwZWRl
ZiB1NjQgbnRmc190aW1lNjRfdDsKCiAKCgoKCgoKCgoKdHlwZWRlZiBzMzIgbnRmc19jbHVzdGVy
X3Q7CgoKIApzdHJ1Y3QgbnRmc19pbm9kZV9pbmZvIHsKCXN0cnVjdCBudGZzX3NiX2luZm8gKnZv
bDsKCXVuc2lnbmVkIGxvbmcgaV9udW1iZXI7CQkgCglfX3UxNiBzZXF1ZW5jZV9udW1iZXI7CQkg
Cgl1bnNpZ25lZCBjaGFyICphdHRyOwkJIAoJaW50IGF0dHJfY291bnQ7CQkJIAoJc3RydWN0IG50
ZnNfYXR0cmlidXRlICphdHRyczsKCWludCByZWNvcmRfY291bnQ7CQkgCglpbnQgKnJlY29yZHM7
ICAKCgl1bmlvbiB7CgkJc3RydWN0IHsKCQkJaW50IHJlY29yZHNpemU7CgkJCWludCBjbHVzdGVy
c19wZXJfcmVjb3JkOwoJCX0gaW5kZXg7Cgl9IHU7CQp9OwoKCiMgMjk0ICIvaG9tZS9jYXJsb3Mv
QnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9mcy5oIiAyCgoj
IDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRl
L2xpbnV4L21zZG9zX2ZzX2kuaCIgMQoKCgogCgoKCnN0cnVjdCBtc2Rvc19pbm9kZV9pbmZvIHsK
CXVuc2lnbmVkIGxvbmcgbW11X3ByaXZhdGU7CglpbnQgaV9zdGFydDsJIAoJaW50IGlfbG9nc3Rh
cnQ7CSAKCWludCBpX2F0dHJzOwkgCglpbnQgaV9jdGltZV9tczsJIAoJaW50IGlfbG9jYXRpb247
CSAKCXN0cnVjdCBpbm9kZSAqaV9mYXRfaW5vZGU7CSAKCXN0cnVjdCBsaXN0X2hlYWQgaV9mYXRf
aGFzaDsJIAp9OwoKCiMgMjk1ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGlu
dXgtMi40LngvaW5jbHVkZS9saW51eC9mcy5oIiAyCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMv
VUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L3Vtc2Rvc19mc19pLmgiIDEK
CgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKc3RydWN0IGRpcl9sb2NraW5n
X2luZm8gewoJd2FpdF9xdWV1ZV9oZWFkX3QgcDsKCXNob3J0IGludCBsb29raW5nOwkgCglzaG9y
dCBpbnQgY3JlYXRpbmc7CSAKCgoKCWxvbmcgcGlkOwkJIAoKfTsKCnN0cnVjdCB1bXNkb3NfaW5v
ZGVfaW5mbyB7CglzdHJ1Y3QgbXNkb3NfaW5vZGVfaW5mbyBtc2Rvc19pbmZvOwoJc3RydWN0IGRp
cl9sb2NraW5nX2luZm8gZGlyX2luZm87CglpbnQgaV9wYXRjaGVkOwkJCSAKCWludCBpX2lzX2hs
aW5rOwkJCSAKCW9mZl90IHBvczsJCQkgCn07CgoKIyAyOTYgIi9ob21lL2Nhcmxvcy9CdWlsZHMv
VUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCiMgMSAiL2hv
bWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgv
aXNvX2ZzX2kuaCIgMQoKCgplbnVtIGlzb2ZzX2ZpbGVfZm9ybWF0IHsKCWlzb2ZzX2ZpbGVfbm9y
bWFsID0gMCwKCWlzb2ZzX2ZpbGVfc3BhcnNlID0gMSwKCWlzb2ZzX2ZpbGVfY29tcHJlc3NlZCA9
IDIsCn07CgkKIAoKCnN0cnVjdCBpc29faW5vZGVfaW5mbyB7Cgl1bnNpZ25lZCBpbnQgaV9maXJz
dF9leHRlbnQ7Cgl1bnNpZ25lZCBjaGFyIGlfZmlsZV9mb3JtYXQ7Cgl1bnNpZ25lZCBjaGFyIGlf
Zm9ybWF0X3Bhcm1bM107Cgl1bnNpZ25lZCBsb25nIGlfbmV4dF9zZWN0aW9uX2lubzsKCW9mZl90
IGlfc2VjdGlvbl9zaXplOwp9OwoKCiMgMjk3ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgv
ZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9mcy5oIiAyCgojIDEgIi9ob21lL2Nhcmxv
cy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L25mc19mc19p
LmgiIDEKCgoKCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0y
LjQueC9pbmNsdWRlL2xpbnV4L25mcy5oIiAxCiAKCgoKCgoKCgojIDEgIi9ob21lL2Nhcmxvcy9C
dWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L3N1bnJwYy9tc2df
cHJvdC5oIiAxCiAKCgoKCgoKCgoKCgoKZW51bSBycGNfYXV0aF9mbGF2b3IgewoJUlBDX0FVVEhf
TlVMTCAgPSAwLAoJUlBDX0FVVEhfVU5JWCAgPSAxLAoJUlBDX0FVVEhfU0hPUlQgPSAyLAoJUlBD
X0FVVEhfREVTICAgPSAzLAoJUlBDX0FVVEhfS1JCICAgPSA0LAp9OwoKZW51bSBycGNfbXNnX3R5
cGUgewoJUlBDX0NBTEwgPSAwLAoJUlBDX1JFUExZID0gMQp9OwoKZW51bSBycGNfcmVwbHlfc3Rh
dCB7CglSUENfTVNHX0FDQ0VQVEVEID0gMCwKCVJQQ19NU0dfREVOSUVEID0gMQp9OwoKZW51bSBy
cGNfYWNjZXB0X3N0YXQgewoJUlBDX1NVQ0NFU1MgPSAwLAoJUlBDX1BST0dfVU5BVkFJTCA9IDEs
CglSUENfUFJPR19NSVNNQVRDSCA9IDIsCglSUENfUFJPQ19VTkFWQUlMID0gMywKCVJQQ19HQVJC
QUdFX0FSR1MgPSA0LAoJUlBDX1NZU1RFTV9FUlIgPSA1Cn07CgplbnVtIHJwY19yZWplY3Rfc3Rh
dCB7CglSUENfTUlTTUFUQ0ggPSAwLAoJUlBDX0FVVEhfRVJST1IgPSAxCn07CgplbnVtIHJwY19h
dXRoX3N0YXQgewoJUlBDX0FVVEhfT0sgPSAwLAoJUlBDX0FVVEhfQkFEQ1JFRCA9IDEsCglSUENf
QVVUSF9SRUpFQ1RFRENSRUQgPSAyLAoJUlBDX0FVVEhfQkFEVkVSRiA9IDMsCglSUENfQVVUSF9S
RUpFQ1RFRFZFUkYgPSA0LAoJUlBDX0FVVEhfVE9PV0VBSyA9IDUKfTsKCgoKCgoKCgoKIyAxMCAi
L2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGlu
dXgvbmZzLmgiIDIKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgogZW51bSBuZnNfc3Rh
dCB7CglORlNfT0sgPSAwLAkJCSAKCU5GU0VSUl9QRVJNID0gMSwJCSAKCU5GU0VSUl9OT0VOVCA9
IDIsCQkgCglORlNFUlJfSU8gPSA1LAkJCSAKCU5GU0VSUl9OWElPID0gNiwJCSAKCU5GU0VSUl9F
QUdBSU4gPSAxMSwJCSAKCU5GU0VSUl9BQ0NFUyA9IDEzLAkJIAoJTkZTRVJSX0VYSVNUID0gMTcs
CQkgCglORlNFUlJfWERFViA9IDE4LAkJIAoJTkZTRVJSX05PREVWID0gMTksCQkgCglORlNFUlJf
Tk9URElSID0gMjAsCQkgCglORlNFUlJfSVNESVIgPSAyMSwJCSAKCU5GU0VSUl9JTlZBTCA9IDIy
LAkJIAoJTkZTRVJSX0ZCSUcgPSAyNywJCSAKCU5GU0VSUl9OT1NQQyA9IDI4LAkJIAoJTkZTRVJS
X1JPRlMgPSAzMCwJCSAKCU5GU0VSUl9NTElOSyA9IDMxLAkJIAoJTkZTRVJSX09QTk9UU1VQUCA9
IDQ1LAkJIAoJTkZTRVJSX05BTUVUT09MT05HID0gNjMsCSAKCU5GU0VSUl9OT1RFTVBUWSA9IDY2
LAkJIAoJTkZTRVJSX0RRVU9UID0gNjksCQkgCglORlNFUlJfU1RBTEUgPSA3MCwJCSAKCU5GU0VS
Ul9SRU1PVEUgPSA3MSwJCSAKCU5GU0VSUl9XRkxVU0ggPSA5OSwJCSAKCU5GU0VSUl9CQURIQU5E
TEUgPSAxMDAwMSwJIAoJTkZTRVJSX05PVF9TWU5DID0gMTAwMDIsCSAKCU5GU0VSUl9CQURfQ09P
S0lFID0gMTAwMDMsCSAKCU5GU0VSUl9OT1RTVVBQID0gMTAwMDQsCQkgCglORlNFUlJfVE9PU01B
TEwgPSAxMDAwNSwJIAoJTkZTRVJSX1NFUlZFUkZBVUxUID0gMTAwMDYsCSAKCU5GU0VSUl9CQURU
WVBFID0gMTAwMDcsCQkgCglORlNFUlJfSlVLRUJPWCA9IDEwMDA4CQkgCiB9OwogCiAKCmVudW0g
bmZzX2Z0eXBlIHsKCU5GTk9OID0gMCwKCU5GUkVHID0gMSwKCU5GRElSID0gMiwKCU5GQkxLID0g
MywKCU5GQ0hSID0gNCwKCU5GTE5LID0gNSwKCU5GU09DSyA9IDYsCglORkJBRCA9IDcsCglORkZJ
Rk8gPSA4Cn07CgoKIAoKCgpzdHJ1Y3QgbmZzX2ZoIHsKCXVuc2lnbmVkIHNob3J0CQlzaXplOwoJ
dW5zaWduZWQgY2hhcgkJZGF0YVs2NCBdOwp9OwoKIAoKCgoKCgplbnVtIG5mczNfc3RhYmxlX2hv
dyB7CglORlNfVU5TVEFCTEUgPSAwLAoJTkZTX0RBVEFfU1lOQyA9IDEsCglORlNfRklMRV9TWU5D
ID0gMgp9OwoKCiMgNiAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIu
NC54L2luY2x1ZGUvbGludXgvbmZzX2ZzX2kuaCIgMgoKCiAKCgpzdHJ1Y3QgbmZzX2lub2RlX2lu
Zm8gewoJIAoKCglfX3U2NCBmc2lkOwoJX191NjQgZmlsZWlkOwoKCSAKCgoJc3RydWN0IG5mc19m
aAkJZmg7CgoJIAoKCgl1bnNpZ25lZCBzaG9ydAkJZmxhZ3M7CgoJIAoKCgoKCgoKCgoKCgoKCgoK
CXVuc2lnbmVkIGxvbmcJCXJlYWRfY2FjaGVfamlmZmllczsKCV9fdTY0CQkJcmVhZF9jYWNoZV9j
dGltZTsKCV9fdTY0CQkJcmVhZF9jYWNoZV9tdGltZTsKCV9fdTY0CQkJcmVhZF9jYWNoZV9pc2l6
ZTsKCXVuc2lnbmVkIGxvbmcJCWF0dHJ0aW1lbzsKCXVuc2lnbmVkIGxvbmcJCWF0dHJ0aW1lb190
aW1lc3RhbXA7CgoJIAoKCgoJX191MzIJCQljb29raWV2ZXJmWzJdOwoKCSAKCgoJc3RydWN0IGxp
c3RfaGVhZAlyZWFkOwoJc3RydWN0IGxpc3RfaGVhZAlkaXJ0eTsKCXN0cnVjdCBsaXN0X2hlYWQJ
Y29tbWl0OwoJc3RydWN0IGxpc3RfaGVhZAl3cml0ZWJhY2s7CgoJdW5zaWduZWQgaW50CQlucmVh
ZCwKCQkJCW5kaXJ0eSwKCQkJCW5jb21taXQsCgkJCQlucGFnZXM7CgoJIAoJc3RydWN0IGlub2Rl
CQkqaGFzaF9uZXh0LAoJCQkJKmhhc2hfcHJldjsKCXVuc2lnbmVkIGxvbmcJCW5leHRzY2FuOwoK
CSAKCXN0cnVjdCBycGNfY3JlZAkJKm1tX2NyZWQ7Cn07CgogCgoKCgoKCgoKIAoKCnN0cnVjdCBu
ZnNfbG9ja19pbmZvIHsKCXUzMgkJc3RhdGU7Cgl1MzIJCWZsYWdzOwoJc3RydWN0IG5sbV9ob3N0
CSpob3N0Owp9OwoKIAoKCgoKCgojIDI5OCAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2Vj
bC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvZnMuaCIgMgoKIyAxICIvaG9tZS9jYXJsb3Mv
QnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9zeXN2X2ZzX2ku
aCIgMQoKCgogCgoKc3RydWN0IHN5c3ZfaW5vZGVfaW5mbyB7Cgl1MzIgaV9kYXRhWzEwKzErMSsx
XTsJIAoKCgoKCXUzMiBpX2Rpcl9zdGFydF9sb29rdXA7Cn07CgoKCiMgMjk5ICIvaG9tZS9jYXJs
b3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9mcy5oIiAy
CgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNs
dWRlL2xpbnV4L2FmZnNfZnNfaS5oIiAxCgoKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJ
TlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvYS5vdXQuaCIgMQoKCgoKCgoKIyAx
ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9h
c20vYS5vdXQuaCIgMQojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51
eC0yLjQueC9pbmNsdWRlL2FzbS1tNjhrL2Eub3V0LmgiIDEKCgoKc3RydWN0IGV4ZWMKewogIHVu
c2lnbmVkIGxvbmcgYV9pbmZvOwkJIAogIHVuc2lnbmVkIGFfdGV4dDsJCSAKICB1bnNpZ25lZCBh
X2RhdGE7CQkgCiAgdW5zaWduZWQgYV9ic3M7CQkgCiAgdW5zaWduZWQgYV9zeW1zOwkJIAogIHVu
c2lnbmVkIGFfZW50cnk7CQkgCiAgdW5zaWduZWQgYV90cnNpemU7CQkgCiAgdW5zaWduZWQgYV9k
cnNpemU7CQkgCn07CgoKCgoKCgoKCgoKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVY
L2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtL2Eub3V0LmgiIDIKCiMgOCAiL2hvbWUvY2Fy
bG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvYS5vdXQu
aCIgMgoKCgoKIAplbnVtIG1hY2hpbmVfdHlwZSB7CgoKCiAgTV9PTERTVU4yID0gMCwKCgoKCiAg
TV82ODAxMCA9IDEsCgoKCgogIE1fNjgwMjAgPSAyLAoKCgoKICBNX1NQQVJDID0gMywKCiAgIAog
IE1fMzg2ID0gMTAwLAogIE1fTUlQUzEgPSAxNTEsCSAKICBNX01JUFMyID0gMTUyCQkgCn07CgoK
CgoKCgoKCgoKCgoKCgoKCgoKCiAKCiAKCiAKCiAKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKIyAxMzkgIi9ob21lL2Nhcmxv
cy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2Eub3V0Lmgi
CgoKCgoKCgoKCgoKCiAKCgoKDAoKc3RydWN0IG5saXN0IHsKICB1bmlvbiB7CiAgICBjaGFyICpu
X25hbWU7CiAgICBzdHJ1Y3Qgbmxpc3QgKm5fbmV4dDsKICAgIGxvbmcgbl9zdHJ4OwogIH0gbl91
bjsKICB1bnNpZ25lZCBjaGFyIG5fdHlwZTsKICBjaGFyIG5fb3RoZXI7CiAgc2hvcnQgbl9kZXNj
OwogIHVuc2lnbmVkIGxvbmcgbl92YWx1ZTsKfTsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCiAKCgoKCgoKCgoKIAoKCgoKCgoKCgoKIAoKCgoKCiAKCgwKCiAKCgoKCnN0cnVjdCByZWxv
Y2F0aW9uX2luZm8KewogICAKICBpbnQgcl9hZGRyZXNzOwogICAKICB1bnNpZ25lZCBpbnQgcl9z
eW1ib2xudW06MjQ7CiAgIAoKCiAgdW5zaWduZWQgaW50IHJfcGNyZWw6MTsKICAgCgogIHVuc2ln
bmVkIGludCByX2xlbmd0aDoyOwogICAKCgoKCgogIHVuc2lnbmVkIGludCByX2V4dGVybjoxOwog
ICAKCgoKCgoKICB1bnNpZ25lZCBpbnQgcl9wYWQ6NDsKCn07CgoKCgojIDQgIi9ob21lL2Nhcmxv
cy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2FmZnNfZnNf
aS5oIiAyCgoKIAojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0y
LjQueC9pbmNsdWRlL2xpbnV4L3RpbWUuaCIgMQoKCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMv
VUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2FzbS9wYXJhbS5oIiAxCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA0ICIvaG9tZS9j
YXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC90aW1l
LmgiIDIKCgoKCgpzdHJ1Y3QgdGltZXNwZWMgewoJdGltZV90CXR2X3NlYzsJCSAKCWxvbmcJdHZf
bnNlYzsJIAp9OwoKCgoKIAoKCgoKCgoKCgoKCgoKc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQg
bG9uZwp0aW1lc3BlY190b19qaWZmaWVzKHN0cnVjdCB0aW1lc3BlYyAqdmFsdWUpCnsKCXVuc2ln
bmVkIGxvbmcgc2VjID0gdmFsdWUtPnR2X3NlYzsKCWxvbmcgbnNlYyA9IHZhbHVlLT50dl9uc2Vj
OwoKCWlmIChzZWMgPj0gKCgofjBVTCA+PiAxKS0xKSAgLyAxMDAgKSkKCQlyZXR1cm4gKCh+MFVM
ID4+IDEpLTEpIDsKCW5zZWMgKz0gMTAwMDAwMDAwMEwgLyAxMDAgIC0gMTsKCW5zZWMgLz0gMTAw
MDAwMDAwMEwgLyAxMDAgOwoJcmV0dXJuIDEwMCAgKiBzZWMgKyBuc2VjOwp9CgpzdGF0aWMgX19p
bmxpbmVfXyB2b2lkCmppZmZpZXNfdG9fdGltZXNwZWModW5zaWduZWQgbG9uZyBqaWZmaWVzLCBz
dHJ1Y3QgdGltZXNwZWMgKnZhbHVlKQp7Cgl2YWx1ZS0+dHZfbnNlYyA9IChqaWZmaWVzICUgMTAw
ICkgKiAoMTAwMDAwMDAwMEwgLyAxMDAgKTsKCXZhbHVlLT50dl9zZWMgPSBqaWZmaWVzIC8gMTAw
IDsKfQoKCiAKCgoKCgoKCgoKCgoKCgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKbWt0aW1l
ICh1bnNpZ25lZCBpbnQgeWVhciwgdW5zaWduZWQgaW50IG1vbiwKCXVuc2lnbmVkIGludCBkYXks
IHVuc2lnbmVkIGludCBob3VyLAoJdW5zaWduZWQgaW50IG1pbiwgdW5zaWduZWQgaW50IHNlYykK
ewoJaWYgKDAgPj0gKGludCkgKG1vbiAtPSAyKSkgewkgCgkJbW9uICs9IDEyOwkJIAoJCXllYXIg
LT0gMTsKCX0KCglyZXR1cm4gKCgoCgkJKHVuc2lnbmVkIGxvbmcpICh5ZWFyLzQgLSB5ZWFyLzEw
MCArIHllYXIvNDAwICsgMzY3Km1vbi8xMiArIGRheSkgKwoJCQl5ZWFyKjM2NSAtIDcxOTQ5OQoJ
ICAgICkqMjQgKyBob3VyICAKCSAgKSo2MCArIG1pbiAgCgkpKjYwICsgc2VjOyAgCn0KCgoKCnN0
cnVjdCB0aW1ldmFsIHsKCXRpbWVfdAkJdHZfc2VjOwkJIAoJc3VzZWNvbmRzX3QJdHZfdXNlYzsJ
IAp9OwoKc3RydWN0IHRpbWV6b25lIHsKCWludAl0el9taW51dGVzd2VzdDsJIAoJaW50CXR6X2Rz
dHRpbWU7CSAKfTsKCgoKCmV4dGVybiB2b2lkIGRvX2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZh
bCAqdHYpOwpleHRlcm4gdm9pZCBkb19zZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKnR2KTsK
ZXh0ZXJuIHZvaWQgZ2V0X2Zhc3RfdGltZShzdHJ1Y3QgdGltZXZhbCAqdHYpOwpleHRlcm4gdm9p
ZCAoKmRvX2dldF9mYXN0X3RpbWUpKHN0cnVjdCB0aW1ldmFsICopOwoKCgoKCgoKCiAKCgoKCgoK
CnN0cnVjdCAgaXRpbWVyc3BlYyB7CiAgICAgICAgc3RydWN0ICB0aW1lc3BlYyBpdF9pbnRlcnZh
bDsgICAgIAogICAgICAgIHN0cnVjdCAgdGltZXNwZWMgaXRfdmFsdWU7ICAgICAgICAKfTsKCnN0
cnVjdAlpdGltZXJ2YWwgewoJc3RydWN0CXRpbWV2YWwgaXRfaW50ZXJ2YWw7CSAKCXN0cnVjdAl0
aW1ldmFsIGl0X3ZhbHVlOwkgCn07CgoKIyA3ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgv
ZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9hZmZzX2ZzX2kuaCIgMgoKCgogCgoKCgoK
CnN0cnVjdCBhZmZzX2V4dF9rZXkgewoJdTMyCWV4dDsJCQkJIAoJdTMyCWtleTsJCQkJIAp9OwoK
IAoKCnN0cnVjdCBhZmZzX2lub2RlX2luZm8gewoJdTMyCSBpX29wZW5jbnQ7CglzdHJ1Y3Qgc2Vt
YXBob3JlIGlfbGlua19sb2NrOwkJIAoJc3RydWN0IHNlbWFwaG9yZSBpX2V4dF9sb2NrOwkJIAoK
CXUzMgkgaV9ibGtjbnQ7CQkJIAoJdTMyCSBpX2V4dGNudDsJCQkgCgl1MzIJKmlfbGM7CQkJCSAK
CXUzMgkgaV9sY19zaXplOwoJdTMyCSBpX2xjX3NoaWZ0OwoJdTMyCSBpX2xjX21hc2s7CglzdHJ1
Y3QgYWZmc19leHRfa2V5ICppX2FjOwkJIAoJdTMyCSBpX2V4dF9sYXN0OwkJCSAKCXN0cnVjdCBi
dWZmZXJfaGVhZCAqaV9leHRfYmg7CQkgCgl1bnNpZ25lZCBsb25nIG1tdV9wcml2YXRlOwoJdTMy
CSBpX3Byb3RlY3Q7CQkJIAoJdTMyCSBpX2xhc3RhbGxvYzsJCQkgCglpbnQJIGlfcGFfY250OwkJ
CSAKCgoKCgoKCgp9OwoKIAoKCgoKIyAzMDAgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9l
Y2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCiMgMSAiL2hvbWUvY2FybG9z
L0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvdWZzX2ZzX2ku
aCIgMQogCgoKCgoKCgoKCgoKCgoKc3RydWN0IHVmc19pbm9kZV9pbmZvIHsKCXVuaW9uIHsKCQlf
X3UzMglpX2RhdGFbMTVdOwoJCV9fdTgJaV9zeW1saW5rWzQqMTVdOwoJfSBpX3UxOwoJX191MzIJ
aV9mbGFnczsKCV9fdTMyCWlfZ2VuOwoJX191MzIJaV9zaGFkb3c7CglfX3UzMglpX3VudXNlZDE7
CglfX3UzMglpX3VudXNlZDI7CglfX3UzMglpX29lZnRmbGFnOwoJX191MTYJaV9vc3luYzsKCV9f
dTMyCWlfbGFzdGZyYWc7Cn07CgoKIyAzMDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9l
Y2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCiMgMSAiL2hvbWUvY2FybG9z
L0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvZWZzX2ZzX2ku
aCIgMQogCgoKCgoKCgoKCgp0eXBlZGVmCWludDMyX3QJCWVmc19ibG9ja190Owp0eXBlZGVmIHVp
bnQzMl90CWVmc19pbm9fdDsKCgoKIAoKCnR5cGVkZWYgdW5pb24gZXh0ZW50X3UgewoJdW5zaWdu
ZWQgY2hhciByYXdbOF07CglzdHJ1Y3QgZXh0ZW50X3MgewoJCXVuc2lnbmVkIGludAlleF9tYWdp
Yzo4OwkgCgkJdW5zaWduZWQgaW50CWV4X2JuOjI0OwkgCgkJdW5zaWduZWQgaW50CWV4X2xlbmd0
aDo4OwkgCgkJdW5zaWduZWQgaW50CWV4X29mZnNldDoyNDsJIAoJfSBjb29rZWQ7Cn0gZWZzX2V4
dGVudDsKCnR5cGVkZWYgc3RydWN0IGVkZXZzIHsKCXNob3J0CQlvZGV2OwoJdW5zaWduZWQgaW50
CW5kZXY7Cn0gZWZzX2RldnM7CgogCgoKCnN0cnVjdAllZnNfZGlub2RlIHsKCXVfc2hvcnQJCWRp
X21vZGU7CSAKCXNob3J0CQlkaV9ubGluazsJIAoJdV9zaG9ydAkJZGlfdWlkOwkJIAoJdV9zaG9y
dAkJZGlfZ2lkOwkJIAoJaW50MzJfdAkJZGlfc2l6ZTsJIAoJaW50MzJfdAkJZGlfYXRpbWU7CSAK
CWludDMyX3QJCWRpX210aW1lOwkgCglpbnQzMl90CQlkaV9jdGltZTsJIAoJdWludDMyX3QJZGlf
Z2VuOwkJIAoJc2hvcnQJCWRpX251bWV4dGVudHM7CSAKCXVfY2hhcgkJZGlfdmVyc2lvbjsJIAoJ
dV9jaGFyCQlkaV9zcGFyZTsJIAoJdW5pb24gZGlfYWRkciB7CgkJZWZzX2V4dGVudAlkaV9leHRl
bnRzWzEyIF07CgkJZWZzX2RldnMJZGlfZGV2OwkgCgl9IGRpX3U7Cn07CgogCnN0cnVjdCBlZnNf
aW5vZGVfaW5mbyB7CglpbnQJCW51bWV4dGVudHM7CglpbnQJCWxhc3RleHRlbnQ7CgoJZWZzX2V4
dGVudAlleHRlbnRzWzEyIF07Cn07CgoKCiMgMzAyICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElO
VVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9mcy5oIiAyCgojIDEgIi9ob21lL2Nh
cmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2NvZGFf
ZnNfaS5oIiAxCiAKCgoKCgoKCgoKCgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgv
ZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9jb2RhLmgiIDEKIAoKCgoKIAoKCgoKCgoK
CgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCiAKCgoK
CgoKCgoKIyA5OCAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54
L2luY2x1ZGUvbGludXgvY29kYS5oIgoKCgoKCgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBs
b25nIHVfcXVhZF90OwoKCgoKCgoKCgoKCgojIDEzMCAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJ
TlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvY29kYS5oIgoKCgogCgoKCgoKCiAK
CgoKCgoKCgogIAoKCgogCgoKCgoKCgoKCgpzdHJ1Y3QgdmVudXNfZGlyZW50IHsKICAgICAgICB1
bnNpZ25lZCBsb25nCWRfZmlsZW5vOwkJIAogICAgICAgIHVuc2lnbmVkIHNob3J0CWRfcmVjbGVu
OwkJIAogICAgICAgIHVuc2lnbmVkIGNoYXIgCWRfdHlwZTsJCQkgCiAgICAgICAgdW5zaWduZWQg
Y2hhcglkX25hbWxlbjsJCSAKICAgICAgICBjaGFyCQlkX25hbWVbMjU1ICArIDFdOyAKfTsKCgoK
CiAKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgp0eXBlZGVmIHVfbG9uZyBWb2x1bWVJZDsKdHlwZWRl
ZiB1X2xvbmcgVm5vZGVJZDsKdHlwZWRlZiB1X2xvbmcgVW5pcXVlX3Q7CnR5cGVkZWYgdV9sb25n
IEZpbGVWZXJzaW9uOwoKCgoKdHlwZWRlZiBzdHJ1Y3QgVmljZUZpZCB7CiAgICBWb2x1bWVJZCBW
b2x1bWU7CiAgICBWbm9kZUlkIFZub2RlOwogICAgVW5pcXVlX3QgVW5pcXVlOwp9IFZpY2VGaWQ7
CgoKCgpzdGF0aWMgX19pbmxpbmVfXyBpbm9fdCAgY29kYV9mMmkoc3RydWN0IFZpY2VGaWQgKmZp
ZCkKewoJaWYgKCAhIGZpZCApIAoJCXJldHVybiAwOyAKCWlmIChmaWQtPlZub2RlID09IDB4ZmZm
ZmZmZmUgfHwgZmlkLT5Wbm9kZSA9PSAweGZmZmZmZmZmKQoJCXJldHVybiAoKGZpZC0+Vm9sdW1l
IDw8IDIwKSB8IChmaWQtPlVuaXF1ZSAmIDB4ZmZmZmYpKTsKCWVsc2UKCQlyZXR1cm4gKGZpZC0+
VW5pcXVlICsgKGZpZC0+Vm5vZGU8PDEwKSArIChmaWQtPlZvbHVtZTw8MjApKTsKfQoJCgoKCgoK
CgoKdHlwZWRlZiB1X2ludDMyX3QgdnVpZF90Owp0eXBlZGVmIHVfaW50MzJfdCB2Z2lkX3Q7CgoK
CgpzdHJ1Y3QgY29kYV9jcmVkIHsKICAgIHZ1aWRfdCBjcl91aWQsIGNyX2V1aWQsIGNyX3N1aWQs
IGNyX2ZzdWlkOyAgCiAgICB2Z2lkX3QgY3JfZ3JvdXBpZCwgICAgIGNyX2VnaWQsIGNyX3NnaWQs
IGNyX2ZzZ2lkOyAgCn07CgoKCgogCgoKZW51bSBjb2RhX3Z0eXBlCXsgQ19WTk9OLCBDX1ZSRUcs
IENfVkRJUiwgQ19WQkxLLCBDX1ZDSFIsIENfVkxOSywgQ19WU09DSywgQ19WRklGTywgQ19WQkFE
IH07CgpzdHJ1Y3QgY29kYV92YXR0ciB7Cglsb25nICAgICAJdmFfdHlwZTsJIAoJdV9zaG9ydAkJ
dmFfbW9kZTsJIAoJc2hvcnQJCXZhX25saW5rOwkgCgl2dWlkX3QJCXZhX3VpZDsJCSAKCXZnaWRf
dAkJdmFfZ2lkOwkJIAoJbG9uZwkJdmFfZmlsZWlkOwkgCgl1X3F1YWRfdAl2YV9zaXplOwkgCgls
b25nCQl2YV9ibG9ja3NpemU7CSAKCXN0cnVjdCB0aW1lc3BlYwl2YV9hdGltZTsJIAoJc3RydWN0
IHRpbWVzcGVjCXZhX210aW1lOwkgCglzdHJ1Y3QgdGltZXNwZWMJdmFfY3RpbWU7CSAKCXVfbG9u
ZwkJdmFfZ2VuOwkJIAoJdV9sb25nCQl2YV9mbGFnczsJIAoJdV9xdWFkX3QgCSAgICAgICAgdmFf
cmRldjsJIAoJdV9xdWFkX3QJdmFfYnl0ZXM7CSAKCXVfcXVhZF90CXZhX2ZpbGVyZXY7CSAKfTsK
CgoKIApzdHJ1Y3QgY29kYV9zdGF0ZnMgewogICAgaW50MzJfdCBmX2Jsb2NrczsKICAgIGludDMy
X3QgZl9iZnJlZTsKICAgIGludDMyX3QgZl9iYXZhaWw7CiAgICBpbnQzMl90IGZfZmlsZXM7CiAg
ICBpbnQzMl90IGZfZmZyZWU7Cn07CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgpzdHJ1Y3QgY29kYV9pbl9oZHIgewogICAgdW5zaWduZWQg
bG9uZyBvcGNvZGU7CiAgICB1bnNpZ25lZCBsb25nIHVuaXF1ZTsJICAgICAKICAgIHVfc2hvcnQg
cGlkOwkJICAgICAKICAgIHVfc2hvcnQgcGdpZDsJCSAgICAgCiAgICB1X3Nob3J0IHNpZDsgICAg
ICAgICAgICAgICAgICAgICAKICAgIHN0cnVjdCBjb2RhX2NyZWQgY3JlZDsJICAgICAKfTsKCiAK
c3RydWN0IGNvZGFfb3V0X2hkciB7CiAgICB1bnNpZ25lZCBsb25nIG9wY29kZTsKICAgIHVuc2ln
bmVkIGxvbmcgdW5pcXVlOwkKICAgIHVuc2lnbmVkIGxvbmcgcmVzdWx0Owp9OwoKIApzdHJ1Y3Qg
Y29kYV9yb290X291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOwogICAgVmljZUZpZCBW
RmlkOwp9OwoKc3RydWN0IGNvZGFfcm9vdF9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaW47
Cn07CgogCnN0cnVjdCBjb2RhX29wZW5faW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwog
ICAgVmljZUZpZAlWRmlkOwogICAgaW50CWZsYWdzOwp9OwoKc3RydWN0IGNvZGFfb3Blbl9vdXQg
ewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIHVfcXVhZF90IAlkZXY7CiAgICBpbm9f
dAlpbm9kZTsKfTsKCgogCnN0cnVjdCBjb2RhX3N0b3JlX2luIHsKICAgIHN0cnVjdCBjb2RhX2lu
X2hkciBpaDsKICAgIFZpY2VGaWQJVkZpZDsKICAgIGludAlmbGFnczsKfTsKCnN0cnVjdCBjb2Rh
X3N0b3JlX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKfTsKCiAKc3RydWN0IGNv
ZGFfcmVsZWFzZV9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkCVZG
aWQ7CiAgICBpbnQJZmxhZ3M7Cn07CgpzdHJ1Y3QgY29kYV9yZWxlYXNlX291dCB7CiAgICBzdHJ1
Y3QgY29kYV9vdXRfaGRyIG91dDsKfTsKCiAKc3RydWN0IGNvZGFfY2xvc2VfaW4gewogICAgc3Ry
dWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZAlWRmlkOwogICAgaW50CWZsYWdzOwp9OwoK
c3RydWN0IGNvZGFfY2xvc2Vfb3V0IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb3V0Owp9OwoK
IApzdHJ1Y3QgY29kYV9pb2N0bF9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBW
aWNlRmlkIFZGaWQ7CiAgICBpbnQJY21kOwogICAgaW50CWxlbjsKICAgIGludAlyd2ZsYWc7CiAg
ICBjaGFyICpkYXRhOwkJCSAKfTsKCnN0cnVjdCBjb2RhX2lvY3RsX291dCB7CiAgICBzdHJ1Y3Qg
Y29kYV9vdXRfaGRyIG9oOwogICAgaW50CWxlbjsKICAgIGNhZGRyX3QJZGF0YTsJCSAKfTsKCgog
CnN0cnVjdCBjb2RhX2dldGF0dHJfaW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAg
VmljZUZpZCBWRmlkOwp9OwoKc3RydWN0IGNvZGFfZ2V0YXR0cl9vdXQgewogICAgc3RydWN0IGNv
ZGFfb3V0X2hkciBvaDsKICAgIHN0cnVjdCBjb2RhX3ZhdHRyIGF0dHI7Cn07CgoKIApzdHJ1Y3Qg
Y29kYV9zZXRhdHRyX2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAgIFZpY2VGaWQg
VkZpZDsKICAgIHN0cnVjdCBjb2RhX3ZhdHRyIGF0dHI7Cn07CgpzdHJ1Y3QgY29kYV9zZXRhdHRy
X291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKfTsKCiAKc3RydWN0IGNvZGFfYWNj
ZXNzX2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAgIFZpY2VGaWQJVkZpZDsKICAg
IGludAlmbGFnczsKfTsKCnN0cnVjdCBjb2RhX2FjY2Vzc19vdXQgewogICAgc3RydWN0IGNvZGFf
b3V0X2hkciBvdXQ7Cn07CgoKIAoKCgogCnN0cnVjdCAgY29kYV9sb29rdXBfaW4gewogICAgc3Ry
dWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZAlWRmlkOwogICAgaW50ICAgICAgICAgbmFt
ZTsJCSAKICAgIGludCAgICAgICAgIGZsYWdzOwkKfTsKCnN0cnVjdCBjb2RhX2xvb2t1cF9vdXQg
ewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIFZpY2VGaWQgVkZpZDsKICAgIGludAl2
dHlwZTsKfTsKCgogCnN0cnVjdCBjb2RhX2NyZWF0ZV9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9o
ZHIgaWg7CiAgICBWaWNlRmlkIFZGaWQ7CiAgICBzdHJ1Y3QgY29kYV92YXR0ciBhdHRyOwogICAg
aW50IGV4Y2w7CiAgICBpbnQgbW9kZTsKICAgIGludCAJbmFtZTsJCSAKfTsKCnN0cnVjdCBjb2Rh
X2NyZWF0ZV9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIFZpY2VGaWQgVkZp
ZDsKICAgIHN0cnVjdCBjb2RhX3ZhdHRyIGF0dHI7Cn07CgoKIApzdHJ1Y3QgY29kYV9yZW1vdmVf
aW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZAlWRmlkOwogICAgaW50
IG5hbWU7CQkgCn07CgpzdHJ1Y3QgY29kYV9yZW1vdmVfb3V0IHsKICAgIHN0cnVjdCBjb2RhX291
dF9oZHIgb3V0Owp9OwoKIApzdHJ1Y3QgY29kYV9saW5rX2luIHsKICAgIHN0cnVjdCBjb2RhX2lu
X2hkciBpaDsKICAgIFZpY2VGaWQgc291cmNlRmlkOyAgICAgICAgICAgCiAgICBWaWNlRmlkIGRl
c3RGaWQ7ICAgICAgICAgICAgIAogICAgaW50IHRuYW1lOwkJIAp9OwoKc3RydWN0IGNvZGFfbGlu
a19vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7Cn07CgoKIApzdHJ1Y3QgY29kYV9y
ZW5hbWVfaW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZAlzb3VyY2VG
aWQ7CiAgICBpbnQgCXNyY25hbWU7CiAgICBWaWNlRmlkIGRlc3RGaWQ7CiAgICBpbnQgCWRlc3Ru
YW1lOwp9OwoKc3RydWN0IGNvZGFfcmVuYW1lX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRy
IG91dDsKfTsKCiAKc3RydWN0IGNvZGFfbWtkaXJfaW4gewogICAgc3RydWN0IGNvZGFfaW5faGRy
IGloOwogICAgVmljZUZpZAlWRmlkOwogICAgc3RydWN0IGNvZGFfdmF0dHIgYXR0cjsKICAgIGlu
dAkgICBuYW1lOwkJIAp9OwoKc3RydWN0IGNvZGFfbWtkaXJfb3V0IHsKICAgIHN0cnVjdCBjb2Rh
X291dF9oZHIgb2g7CiAgICBWaWNlRmlkIFZGaWQ7CiAgICBzdHJ1Y3QgY29kYV92YXR0ciBhdHRy
Owp9OwoKCiAKc3RydWN0IGNvZGFfcm1kaXJfaW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGlo
OwogICAgVmljZUZpZAlWRmlkOwogICAgaW50IG5hbWU7CQkgCn07CgpzdHJ1Y3QgY29kYV9ybWRp
cl9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7Cn07CgogCnN0cnVjdCBjb2RhX3N5
bWxpbmtfaW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZAlWRmlkOyAg
ICAgICAgICAgCiAgICBpbnQgc3JjbmFtZTsKICAgIHN0cnVjdCBjb2RhX3ZhdHRyIGF0dHI7CiAg
ICBpbnQgdG5hbWU7Cn07CgpzdHJ1Y3QgY29kYV9zeW1saW5rX291dCB7CiAgICBzdHJ1Y3QgY29k
YV9vdXRfaGRyIG91dDsKfTsKCiAKc3RydWN0IGNvZGFfcmVhZGxpbmtfaW4gewogICAgc3RydWN0
IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZCBWRmlkOwp9OwoKc3RydWN0IGNvZGFfcmVhZGxp
bmtfb3V0IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CiAgICBpbnQJY291bnQ7CiAgICBj
YWRkcl90CWRhdGE7CQkgCn07CgoKIApzdHJ1Y3QgY29kYV9mc3luY19pbiB7CiAgICBzdHJ1Y3Qg
Y29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkIFZGaWQ7Cn07CgpzdHJ1Y3QgY29kYV9mc3luY19v
dXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7Cn07CgogCnN0cnVjdCBjb2RhX3ZnZXRf
aW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZCBWRmlkOwp9OwoKc3Ry
dWN0IGNvZGFfdmdldF9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIFZpY2VG
aWQgVkZpZDsKICAgIGludAl2dHlwZTsKfTsKCgogCiAKIAoKIAogCnN0cnVjdCBjb2RhX3B1cmdl
dXNlcl9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIHN0cnVjdCBjb2RhX2Ny
ZWQgY3JlZDsKfTsKCiAKIApzdHJ1Y3QgY29kYV96YXBmaWxlX291dCB7ICAKICAgIHN0cnVjdCBj
b2RhX291dF9oZHIgb2g7CiAgICBWaWNlRmlkIENvZGFGaWQ7Cn07CgogCiAJCnN0cnVjdCBjb2Rh
X3phcGRpcl9vdXQgewkgIAogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIFZpY2VGaWQg
Q29kYUZpZDsKfTsKCiAKIAkKc3RydWN0IGNvZGFfemFwdm5vZGVfb3V0IHsgCiAgICBzdHJ1Y3Qg
Y29kYV9vdXRfaGRyIG9oOwogICAgc3RydWN0IGNvZGFfY3JlZCBjcmVkOwogICAgVmljZUZpZCBW
RmlkOwp9OwoKIAogCQpzdHJ1Y3QgY29kYV9wdXJnZWZpZF9vdXQgeyAKICAgIHN0cnVjdCBjb2Rh
X291dF9oZHIgb2g7CiAgICBWaWNlRmlkIENvZGFGaWQ7Cn07CgogCiAJCnN0cnVjdCBjb2RhX3Jl
cGxhY2Vfb3V0IHsgIAogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIFZpY2VGaWQgTmV3
RmlkOwogICAgVmljZUZpZCBPbGRGaWQ7Cn07CgogCnN0cnVjdCBjb2RhX29wZW5fYnlfZmRfaW4g
ewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZCAgICBWRmlkOwogICAgaW50
ICAgICAgICBmbGFnczsKfTsKCnN0cnVjdCBjb2RhX29wZW5fYnlfZmRfb3V0IHsKICAgIHN0cnVj
dCBjb2RhX291dF9oZHIgb2g7CiAgICBpbnQgZmQ7CgoKICAgIHN0cnVjdCBmaWxlICpmaDsgIAoK
fTsKCiAKc3RydWN0IGNvZGFfb3Blbl9ieV9wYXRoX2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hk
ciBpaDsKICAgIFZpY2VGaWQJVkZpZDsKICAgIGludAlmbGFnczsKfTsKCnN0cnVjdCBjb2RhX29w
ZW5fYnlfcGF0aF9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKCWludCBwYXRoOwp9
OwoKIApzdHJ1Y3QgY29kYV9zdGF0ZnNfaW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGluOwp9
OwoKc3RydWN0IGNvZGFfc3RhdGZzX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOwog
ICAgc3RydWN0IGNvZGFfc3RhdGZzIHN0YXQ7Cn07CgogCgoKCgoKCnVuaW9uIGlucHV0QXJncyB7
CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CQkgCiAgICBzdHJ1Y3QgY29kYV9vcGVuX2luIGNv
ZGFfb3BlbjsKICAgIHN0cnVjdCBjb2RhX3N0b3JlX2luIGNvZGFfc3RvcmU7CiAgICBzdHJ1Y3Qg
Y29kYV9yZWxlYXNlX2luIGNvZGFfcmVsZWFzZTsKICAgIHN0cnVjdCBjb2RhX2Nsb3NlX2luIGNv
ZGFfY2xvc2U7CiAgICBzdHJ1Y3QgY29kYV9pb2N0bF9pbiBjb2RhX2lvY3RsOwogICAgc3RydWN0
IGNvZGFfZ2V0YXR0cl9pbiBjb2RhX2dldGF0dHI7CiAgICBzdHJ1Y3QgY29kYV9zZXRhdHRyX2lu
IGNvZGFfc2V0YXR0cjsKICAgIHN0cnVjdCBjb2RhX2FjY2Vzc19pbiBjb2RhX2FjY2VzczsKICAg
IHN0cnVjdCBjb2RhX2xvb2t1cF9pbiBjb2RhX2xvb2t1cDsKICAgIHN0cnVjdCBjb2RhX2NyZWF0
ZV9pbiBjb2RhX2NyZWF0ZTsKICAgIHN0cnVjdCBjb2RhX3JlbW92ZV9pbiBjb2RhX3JlbW92ZTsK
ICAgIHN0cnVjdCBjb2RhX2xpbmtfaW4gY29kYV9saW5rOwogICAgc3RydWN0IGNvZGFfcmVuYW1l
X2luIGNvZGFfcmVuYW1lOwogICAgc3RydWN0IGNvZGFfbWtkaXJfaW4gY29kYV9ta2RpcjsKICAg
IHN0cnVjdCBjb2RhX3JtZGlyX2luIGNvZGFfcm1kaXI7CiAgICBzdHJ1Y3QgY29kYV9zeW1saW5r
X2luIGNvZGFfc3ltbGluazsKICAgIHN0cnVjdCBjb2RhX3JlYWRsaW5rX2luIGNvZGFfcmVhZGxp
bms7CiAgICBzdHJ1Y3QgY29kYV9mc3luY19pbiBjb2RhX2ZzeW5jOwogICAgc3RydWN0IGNvZGFf
dmdldF9pbiBjb2RhX3ZnZXQ7CiAgICBzdHJ1Y3QgY29kYV9vcGVuX2J5X2ZkX2luIGNvZGFfb3Bl
bl9ieV9mZDsKICAgIHN0cnVjdCBjb2RhX29wZW5fYnlfcGF0aF9pbiBjb2RhX29wZW5fYnlfcGF0
aDsKICAgIHN0cnVjdCBjb2RhX3N0YXRmc19pbiBjb2RhX3N0YXRmczsKfTsKCnVuaW9uIG91dHB1
dEFyZ3MgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsJCSAKICAgIHN0cnVjdCBjb2RhX3Jv
b3Rfb3V0IGNvZGFfcm9vdDsKICAgIHN0cnVjdCBjb2RhX29wZW5fb3V0IGNvZGFfb3BlbjsKICAg
IHN0cnVjdCBjb2RhX2lvY3RsX291dCBjb2RhX2lvY3RsOwogICAgc3RydWN0IGNvZGFfZ2V0YXR0
cl9vdXQgY29kYV9nZXRhdHRyOwogICAgc3RydWN0IGNvZGFfbG9va3VwX291dCBjb2RhX2xvb2t1
cDsKICAgIHN0cnVjdCBjb2RhX2NyZWF0ZV9vdXQgY29kYV9jcmVhdGU7CiAgICBzdHJ1Y3QgY29k
YV9ta2Rpcl9vdXQgY29kYV9ta2RpcjsKICAgIHN0cnVjdCBjb2RhX3JlYWRsaW5rX291dCBjb2Rh
X3JlYWRsaW5rOwogICAgc3RydWN0IGNvZGFfdmdldF9vdXQgY29kYV92Z2V0OwogICAgc3RydWN0
IGNvZGFfcHVyZ2V1c2VyX291dCBjb2RhX3B1cmdldXNlcjsKICAgIHN0cnVjdCBjb2RhX3phcGZp
bGVfb3V0IGNvZGFfemFwZmlsZTsKICAgIHN0cnVjdCBjb2RhX3phcGRpcl9vdXQgY29kYV96YXBk
aXI7CiAgICBzdHJ1Y3QgY29kYV96YXB2bm9kZV9vdXQgY29kYV96YXB2bm9kZTsKICAgIHN0cnVj
dCBjb2RhX3B1cmdlZmlkX291dCBjb2RhX3B1cmdlZmlkOwogICAgc3RydWN0IGNvZGFfcmVwbGFj
ZV9vdXQgY29kYV9yZXBsYWNlOwogICAgc3RydWN0IGNvZGFfb3Blbl9ieV9mZF9vdXQgY29kYV9v
cGVuX2J5X2ZkOwogICAgc3RydWN0IGNvZGFfb3Blbl9ieV9wYXRoX291dCBjb2RhX29wZW5fYnlf
cGF0aDsKICAgIHN0cnVjdCBjb2RhX3N0YXRmc19vdXQgY29kYV9zdGF0ZnM7Cn07ICAgIAoKdW5p
b24gY29kYV9kb3duY2FsbHMgewogICAgIAogICAgIAogICAgc3RydWN0IGNvZGFfcHVyZ2V1c2Vy
X291dCBwdXJnZXVzZXI7CiAgICBzdHJ1Y3QgY29kYV96YXBmaWxlX291dCB6YXBmaWxlOwogICAg
c3RydWN0IGNvZGFfemFwZGlyX291dCB6YXBkaXI7CiAgICBzdHJ1Y3QgY29kYV96YXB2bm9kZV9v
dXQgemFwdm5vZGU7CiAgICBzdHJ1Y3QgY29kYV9wdXJnZWZpZF9vdXQgcHVyZ2VmaWQ7CiAgICBz
dHJ1Y3QgY29kYV9yZXBsYWNlX291dCByZXBsYWNlOwp9OwoKCiAKCgoKCnN0cnVjdCBWaWNlSW9j
dGwgewogICAgICAgIGNhZGRyX3QgaW4sIG91dDsgICAgICAgICAKICAgICAgICBzaG9ydCBpbl9z
aXplOyAgICAgICAgICAgCiAgICAgICAgc2hvcnQgb3V0X3NpemU7ICAgICAgICAgIAp9OwoKc3Ry
dWN0IFBpb2N0bERhdGEgewogICAgICAgIGNvbnN0IGNoYXIgKnBhdGg7CiAgICAgICAgaW50IGZv
bGxvdzsKICAgICAgICBzdHJ1Y3QgVmljZUlvY3RsIHZpOwp9OwoKCgoKCgoKCgoKCgoKCiAKCgoK
c3RydWN0IGNvZGFfbW91bnRfZGF0YSB7CglpbnQJCXZlcnNpb247CglpbnQJCWZkOyAgICAgICAg
Cn07CgoKCiMgMTQgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQu
eC9pbmNsdWRlL2xpbnV4L2NvZGFfZnNfaS5oIiAyCgoKIAoKCnN0cnVjdCBjb2RhX2lub2RlX2lu
Zm8gewogICAgICAgIHN0cnVjdCBWaWNlRmlkICAgICBjX2ZpZDsJIAogICAgICAgIHVfc2hvcnQJ
ICAgICAgICAgICBjX2ZsYWdzOyAgICAgIAoJc3RydWN0IGxpc3RfaGVhZCAgIGNfY2lsaXN0OyAg
ICAgCglzdHJ1Y3QgZmlsZQkgICpjX2NvbnRhaW5lcjsgIAoJdW5zaWduZWQgaW50ICAgICAgIGNf
Y29udGNvdW50OyAgCiAgICAgICAgc3RydWN0IGNvZGFfY3JlZCAgIGNfY2FjaGVkX2NyZWQ7ICAK
ICAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgY19jYWNoZWRfcGVybTsgIAp9OwoKIAoKCgoKCmlu
dCBjb2RhX2Nub2RlX21ha2Uoc3RydWN0IGlub2RlICoqLCBzdHJ1Y3QgVmljZUZpZCAqLCBzdHJ1
Y3Qgc3VwZXJfYmxvY2sgKik7CmludCBjb2RhX2Nub2RlX21ha2VjdGwoc3RydWN0IGlub2RlICoq
aW5vZGUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwpzdHJ1Y3QgaW5vZGUgKmNvZGFfZmlkX3Rv
X2lub2RlKFZpY2VGaWQgKmZpZCwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CnZvaWQgY29kYV9y
ZXBsYWNlX2ZpZChzdHJ1Y3QgaW5vZGUgKiwgVmljZUZpZCAqLCBWaWNlRmlkICopOwoKCgojIDMw
MyAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUv
bGludXgvZnMuaCIgMgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGlu
dXgtMi40LngvaW5jbHVkZS9saW51eC9yb21mc19mc19pLmgiIDEKCgoKIAoKc3RydWN0IHJvbWZz
X2lub2RlX2luZm8gewoJdW5zaWduZWQgbG9uZyBpX21ldGFzaXplOwkgCgl1bnNpZ25lZCBsb25n
IGlfZGF0YW9mZnNldDsJIAp9OwoKCiMgMzA0ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgv
ZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9mcy5oIiAyCgojIDEgIi9ob21lL2Nhcmxv
cy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L3NobWVtX2Zz
LmgiIDEKCgoKIAoKCgogCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCB7Cgl1bnNpZ25lZCBsb25nIHZh
bDsKfSBzd3BfZW50cnlfdDsKCmV4dGVybiBhdG9taWNfdCBzaG1lbV9ucnBhZ2VzOwoKc3RydWN0
IHNobWVtX2lub2RlX2luZm8gewoJc3BpbmxvY2tfdAkJbG9jazsKCXN0cnVjdCBzZW1hcGhvcmUg
CXNlbTsKCXVuc2lnbmVkIGxvbmcJCW5leHRfaW5kZXg7Cglzd3BfZW50cnlfdAkJaV9kaXJlY3Rb
MTYgXTsgIAoJdm9pZAkJICAgICAgKippX2luZGlyZWN0OyAgCgl1bnNpZ25lZCBsb25nCQlzd2Fw
cGVkOwoJaW50CQkJbG9ja2VkOyAgICAgIAoJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwoJc3RydWN0
IGlub2RlCSAgICAgICAqaW5vZGU7Cn07CgpzdHJ1Y3Qgc2htZW1fc2JfaW5mbyB7Cgl1bnNpZ25l
ZCBsb25nIG1heF9ibG9ja3M7ICAgIAoJdW5zaWduZWQgbG9uZyBmcmVlX2Jsb2NrczsgICAKCXVu
c2lnbmVkIGxvbmcgbWF4X2lub2RlczsgICAgCgl1bnNpZ25lZCBsb25nIGZyZWVfaW5vZGVzOyAg
IAoJc3BpbmxvY2tfdCAgICBzdGF0X2xvY2s7Cn07CgoKCgojIDMwNSAiL2hvbWUvY2FybG9zL0J1
aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvZnMuaCIgMgoKIyAx
ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9s
aW51eC9zbWJfZnNfaS5oIiAxCiAKCgoKCgoKCgoKCgoKCiAKCgpzdHJ1Y3Qgc21iX2lub2RlX2lu
Zm8gewoKCSAKCgoKICAgICAgICB1bnNpZ25lZCBpbnQgb3BlbjsJIAoJX191MTYgZmlsZWlkOwkJ
IAoJX191MTYgYXR0cjsJCSAKCglfX3UxNiBhY2Nlc3M7CQkgCglfX3UxNiBmbGFnczsKCXVuc2ln
bmVkIGxvbmcgb2xkbXRpbWU7CSAKCXVuc2lnbmVkIGxvbmcgY2xvc2VkOwkgCgl1bnNpZ25lZCBv
cGVuZXJzOwkgCn07CgoKCiMgMzA2ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVj
bGludXgtMi40LngvaW5jbHVkZS9saW51eC9mcy5oIiAyCgojIDEgIi9ob21lL2Nhcmxvcy9CdWls
ZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2hmc19mc19pLmgiIDEK
IAoKCgoKCgoKCgoKCgogCgoKCgpzdHJ1Y3QgaGZzX2lub2RlX2luZm8gewoJaW50CQkJCW1hZ2lj
OyAgICAgIAoKCXVuc2lnbmVkIGxvbmcJCQltbXVfcHJpdmF0ZTsKCXN0cnVjdCBoZnNfY2F0X2Vu
dHJ5CQkqZW50cnk7CgoJIAoJc3RydWN0IGhmc19mb3JrIAkJKmZvcms7CglpbnQJCQkJY29udmVy
dDsKCgkgCglpbm9fdAkJCQlmaWxlX3R5cGU7CgljaGFyCQkJCWRpcl9zaXplOwoKCSAKCWNvbnN0
IHN0cnVjdCBoZnNfaGRyX2xheW91dAkqZGVmYXVsdF9sYXlvdXQ7CglzdHJ1Y3QgaGZzX2hkcl9s
YXlvdXQJCSpsYXlvdXQ7CgoJIAoJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0el9z
ZWNvbmRzd2VzdDsKCiAgICAgICAgIAogICAgICAgIHZvaWQgKCpkX2Ryb3Bfb3ApKHN0cnVjdCBk
ZW50cnkgKiwgY29uc3QgaW5vX3QpOwp9OwoKCiMgMzA3ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VD
TElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9mcy5oIiAyCgojIDEgIi9ob21l
L2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2Fk
ZnNfZnNfaS5oIiAxCiAKCgoKCgoKCgogCgoKc3RydWN0IGFkZnNfaW5vZGVfaW5mbyB7Cgl1bnNp
Z25lZCBsb25nCW1tdV9wcml2YXRlOwoJdW5zaWduZWQgbG9uZwlwYXJlbnRfaWQ7CSAKCV9fdTMy
CQlsb2FkYWRkcjsJIAoJX191MzIJCWV4ZWNhZGRyOwkgCgl1bnNpZ25lZCBpbnQJZmlsZXR5cGU7
CSAKCXVuc2lnbmVkIGludAlhdHRyOwkJIAoJaW50CQlzdGFtcGVkOjE7CSAKfTsKCgojIDMwOCAi
L2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGlu
dXgvZnMuaCIgMgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgt
Mi40LngvaW5jbHVkZS9saW51eC9xbng0X2ZzX2kuaCIgMQogCgoKCgoKCgoKCgoKCiMgMSAiL2hv
bWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgv
cW54dHlwZXMuaCIgMQogCgoKCgoKCgoKCgoKCgp0eXBlZGVmIF9fdTE2IHFueDRfbnh0bnRfdDsK
dHlwZWRlZiBfX3U4ICBxbng0X2Z0eXBlX3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CglfX3UzMiB4dG50
X2JsazsKCV9fdTMyIHh0bnRfc2l6ZTsKfSBxbng0X3h0bnRfdDsKCnR5cGVkZWYgX191MTYgcW54
NF9tb2RlX3Q7CnR5cGVkZWYgX191MTYgcW54NF9tdWlkX3Q7CnR5cGVkZWYgX191MTYgcW54NF9t
Z2lkX3Q7CnR5cGVkZWYgX191MzIgcW54NF9vZmZfdDsKdHlwZWRlZiBfX3UxNiBxbng0X25saW5r
X3Q7CgoKIyAxNCAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54
L2luY2x1ZGUvbGludXgvcW54NF9mc19pLmgiIDIKCgogCgoKc3RydWN0IHFueDRfaW5vZGVfaW5m
byB7CgljaGFyCQlpX3Jlc2VydmVkWzE2XTsJIAoJcW54NF9vZmZfdAlpX3NpemU7CQkgCglxbng0
X3h0bnRfdAlpX2ZpcnN0X3h0bnQ7CSAKCV9fdTMyCQlpX3hibGs7CQkgCglfX3MzMgkJaV9mdGlt
ZTsJIAoJX19zMzIJCWlfbXRpbWU7CSAKCV9fczMyCQlpX2F0aW1lOwkgCglfX3MzMgkJaV9jdGlt
ZTsJIAoJcW54NF9ueHRudF90CWlfbnVtX3h0bnRzOwkgCglxbng0X21vZGVfdAlpX21vZGU7CQkg
Cglxbng0X211aWRfdAlpX3VpZDsJCSAKCXFueDRfbWdpZF90CWlfZ2lkOwkJIAoJcW54NF9ubGlu
a190CWlfbmxpbms7CSAKCV9fdTgJCWlfemVyb1s0XTsJIAoJcW54NF9mdHlwZV90CWlfdHlwZTsJ
CSAKCV9fdTgJCWlfc3RhdHVzOwkgCgl1bnNpZ25lZCBsb25nCW1tdV9wcml2YXRlOwp9OwoKCiMg
MzA5ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVk
ZS9saW51eC9mcy5oIiAyCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNs
aW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzX2kuaCIgMQoKCgoKCiAKdHlwZWRl
ZiBlbnVtIHsKICAgICAKCgogICAgaV9pdGVtX2tleV92ZXJzaW9uX21hc2sgICAgPSAgMHgwMDAx
LAogICAgIAoKICAgIGlfc3RhdF9kYXRhX3ZlcnNpb25fbWFzayAgID0gIDB4MDAwMiwKICAgICAK
ICAgIGlfcGFja19vbl9jbG9zZV9tYXNrICAgICAgID0gIDB4MDAwNCwKICAgICAKICAgIGlfbm9w
YWNrX21hc2sgICAgICAgICAgICAgID0gIDB4MDAwOCwKICAgICAKCgogICAgaV9saW5rX3NhdmVk
X3VubGlua19tYXNrICAgPSAgMHgwMDEwLAogICAgaV9saW5rX3NhdmVkX3RydW5jYXRlX21hc2sg
PSAgMHgwMDIwCn0gcmVpc2VyZnNfaW5vZGVfZmxhZ3M7CgoKc3RydWN0IHJlaXNlcmZzX2lub2Rl
X2luZm8gewogICAgX191MzIgaV9rZXkgWzRdOyAKICAKICAgICAKCiAgICBfX3UzMiBpX2ZsYWdz
OwoKICAgIF9fdTMyIGlfZmlyc3RfZGlyZWN0X2J5dGU7ICAKCiAgICBpbnQgaV9wcmVhbGxvY19i
bG9jazsgIAogICAgaW50IGlfcHJlYWxsb2NfY291bnQ7ICAKICAgIHN0cnVjdCBsaXN0X2hlYWQg
aV9wcmVhbGxvY19saXN0OwkgCgogIAogICAgIAoKCiAgICB1bnNpZ25lZCBsb25nIGlfdHJhbnNf
aWQgOwogICAgdW5zaWduZWQgbG9uZyBpX3RyYW5zX2luZGV4IDsKfTsKCgoKIyAzMTAgIi9ob21l
L2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2Zz
LmgiIDIKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54
L2luY2x1ZGUvbGludXgvYmZzX2ZzX2kuaCIgMQogCgoKCgoKCgogCgoKc3RydWN0IGJmc19pbm9k
ZV9pbmZvIHsKCXVuc2lnbmVkIGxvbmcgaV9kc2tfaW5vOyAgCgl1bnNpZ25lZCBsb25nIGlfc2Js
b2NrOwoJdW5zaWduZWQgbG9uZyBpX2VibG9jazsKfTsKCgojIDMxMSAiL2hvbWUvY2FybG9zL0J1
aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvZnMuaCIgMgoKIyAx
ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9s
aW51eC91ZGZfZnNfaS5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgc3RydWN0
CnsKCV9fdTMyIGxvZ2ljYWxCbG9ja051bTsKCV9fdTE2IHBhcnRpdGlvblJlZmVyZW5jZU51bTsK
fSBsYl9hZGRyOwoKCnN0cnVjdCB1ZGZfaW5vZGVfaW5mbwp7Cglsb25nIGlfdW10aW1lOwoJbG9u
ZyBpX3VjdGltZTsKCWxvbmcgaV9jcnRpbWU7Cglsb25nIGlfdWNydGltZTsKCSAKCWxiX2FkZHIg
aV9sb2NhdGlvbjsKCV9fdTY0IGlfdW5pcXVlOwoJX191MzIgaV9sZW5FQXR0cjsKCV9fdTMyIGlf
bGVuQWxsb2M7CglfX3U2NCBpX2xlbkV4dGVudHM7CglfX3UzMiBpX25leHRfYWxsb2NfYmxvY2s7
CglfX3UzMiBpX25leHRfYWxsb2NfZ29hbDsKCXVuc2lnbmVkIGlfYWxsb2NfdHlwZSA6IDM7Cgl1
bnNpZ25lZCBpX2V4dGVuZGVkX2ZlIDogMTsKCXVuc2lnbmVkIGlfc3RyYXRfNDA5NiA6IDE7Cgl1
bnNpZ25lZCBpX25ld19pbm9kZSA6IDE7Cgl1bnNpZ25lZCByZXNlcnZlZCA6IDI2Owp9OwoKCgog
CgoKCgoKCgojIDMxMiAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIu
NC54L2luY2x1ZGUvbGludXgvZnMuaCIgMgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElO
VVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9uY3BfZnNfaS5oIiAxCiAKCgoKCgoK
CgoKCgogCgoKCnN0cnVjdCBuY3BfaW5vZGVfaW5mbyB7CglfX3UzMglkaXJFbnROdW0gX19hdHRy
aWJ1dGVfXygocGFja2VkKSk7CglfX3UzMglEb3NEaXJOdW0gX19hdHRyaWJ1dGVfXygocGFja2Vk
KSk7CglfX3UzMgl2b2xOdW1iZXIgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CglfX3UzMglud2F0
dHI7CglzdHJ1Y3Qgc2VtYXBob3JlIG9wZW5fc2VtOwoJYXRvbWljX3QJb3BlbmVkOwoJaW50CWFj
Y2VzczsKCV9fdTMyCXNlcnZlcl9maWxlX2hhbmRsZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsK
CV9fdTgJb3Blbl9jcmVhdGVfYWN0aW9uIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoJX191OAlm
aWxlX2hhbmRsZVs2XSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKfTsKCgoKCiMgMzEzICIvaG9t
ZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9m
cy5oIiAyCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQu
eC9pbmNsdWRlL2xpbnV4L3Byb2NfZnNfaS5oIiAxCnN0cnVjdCBwcm9jX2lub2RlX2luZm8gewoJ
c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwoJaW50IHR5cGU7Cgl1bmlvbiB7CgkJaW50ICgqcHJv
Y19nZXRfbGluaykoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiosIHN0cnVjdCB2ZnNt
b3VudCAqKik7CgkJaW50ICgqcHJvY19yZWFkKShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGNo
YXIgKnBhZ2UpOwoJfSBvcDsKCXN0cnVjdCBmaWxlICpmaWxlOwp9OwojIDMxNCAiL2hvbWUvY2Fy
bG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvZnMuaCIg
MgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5j
bHVkZS9saW51eC91c2JkZXZfZnNfaS5oIiAxCnN0cnVjdCB1c2JfZGV2aWNlOwpzdHJ1Y3QgdXNi
X2J1czsKCnN0cnVjdCB1c2JkZXZfaW5vZGVfaW5mbyB7CglzdHJ1Y3QgbGlzdF9oZWFkIGRsaXN0
OwoJc3RydWN0IGxpc3RfaGVhZCBzbGlzdDsKCXVuaW9uIHsKCQlzdHJ1Y3QgdXNiX2RldmljZSAq
ZGV2OwoJCXN0cnVjdCB1c2JfYnVzICpidXM7Cgl9IHA7Cn07CiMgMzE1ICIvaG9tZS9jYXJsb3Mv
QnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9mcy5oIiAyCgoj
IDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRl
L2xpbnV4L2pmZnMyX2ZzX2kuaCIgMQogCgoKCgogCgoKCgoKCgoKCnN0cnVjdCBqZmZzMl9pbm9k
ZV9pbmZvIHsKCgoKCSAKCgoKCgoJc3RydWN0IHNlbWFwaG9yZSBzZW07CgoJIAoJX191MzIgaGln
aGVzdF92ZXJzaW9uOwoKCSAKCXN0cnVjdCBqZmZzMl9ub2RlX2ZyYWcgKmZyYWdsaXN0OwoKCSAK
CgoJIAoKCXN0cnVjdCBqZmZzMl9mdWxsX2Rub2RlICptZXRhZGF0YTsKCgkgCglzdHJ1Y3QgamZm
czJfZnVsbF9kaXJlbnQgKmRlbnRzOwoKCSAKCXN0cnVjdCBqZmZzMl9pbm9kZV9jYWNoZSAqaW5v
Y2FjaGU7CgoJIAoKCgkgCglfX3UxNiBmbGFnczsKCV9fdTggdXNlcmNvbXByOwp9OwoKCgoKCgoK
CgojIDMxNiAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2lu
Y2x1ZGUvbGludXgvZnMuaCIgMgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNs
LXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9jcmFtZnNfZnNfc2IuaCIgMQoKCgogCgoKc3Ry
dWN0IGNyYW1mc19zYl9pbmZvIHsKCQkJdW5zaWduZWQgbG9uZyBtYWdpYzsKCQkJdW5zaWduZWQg
bG9uZyBzaXplOwoJCQl1bnNpZ25lZCBsb25nIGJsb2NrczsKCQkJdW5zaWduZWQgbG9uZyBmaWxl
czsKCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKfTsKCgojIDMxNyAiL2hvbWUvY2FybG9zL0J1aWxk
cy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvZnMuaCIgMgoKCiAKCgoK
CgoKCgoKCgoKCgoKIAoKCgoKCgoKCnN0cnVjdCBpYXR0ciB7Cgl1bnNpZ25lZCBpbnQJaWFfdmFs
aWQ7Cgl1bW9kZV90CQlpYV9tb2RlOwoJdWlkX3QJCWlhX3VpZDsKCWdpZF90CQlpYV9naWQ7Cgls
b2ZmX3QJCWlhX3NpemU7Cgl0aW1lX3QJCWlhX2F0aW1lOwoJdGltZV90CQlpYV9tdGltZTsKCXRp
bWVfdAkJaWFfY3RpbWU7Cgl1bnNpZ25lZCBpbnQJaWFfYXR0cl9mbGFnczsKfTsKCiAKCgoKCgoK
CgogCgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40Lngv
aW5jbHVkZS9saW51eC9xdW90YS5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIu
NC54L2luY2x1ZGUvbGludXgvZXJybm8uaCIgMQoKCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMv
VUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2FzbS9lcnJuby5oIiAxCiMgMSAiL2hv
bWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtLW02
OGsvZXJybm8uaCIgMQoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMv
VUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2FzbS9lcnJuby5oIiAyCgojIDQgIi9o
b21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4
L2Vycm5vLmgiIDIKCgoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCiMgNDIgIi9ob21lL2Nhcmxvcy9C
dWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L3F1b3RhLmgiIDIK
CgogCgoKCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCiAKCgoKCgoKCgoK
CgoKCgoKCgoKCiAKCgoKCnN0cnVjdCBkcWJsayB7CglfX3UzMiBkcWJfYmhhcmRsaW1pdDsJIAoJ
X191MzIgZHFiX2Jzb2Z0bGltaXQ7CSAKCV9fdTMyIGRxYl9jdXJibG9ja3M7CSAKCV9fdTMyIGRx
Yl9paGFyZGxpbWl0OwkgCglfX3UzMiBkcWJfaXNvZnRsaW1pdDsJIAoJX191MzIgZHFiX2N1cmlu
b2RlczsJIAoJdGltZV90IGRxYl9idGltZTsJCSAKCXRpbWVfdCBkcWJfaXRpbWU7CQkgCn07Cgog
CgoKCgoKCgoKCgoKCgpzdHJ1Y3QgZHFzdGF0cyB7CglfX3UzMiBsb29rdXBzOwoJX191MzIgZHJv
cHM7CglfX3UzMiByZWFkczsKCV9fdTMyIHdyaXRlczsKCV9fdTMyIGNhY2hlX2hpdHM7CglfX3Uz
MiBhbGxvY2F0ZWRfZHF1b3RzOwoJX191MzIgZnJlZV9kcXVvdHM7CglfX3UzMiBzeW5jczsKfTsK
CgoKZXh0ZXJuIGludCBucl9kcXVvdHMsIG5yX2ZyZWVfZHF1b3RzOwpleHRlcm4gaW50IGRxdW90
X3Jvb3Rfc3F1YXNoOwoKCgoKCgoKCgoKc3RydWN0IGRxdW90IHsKCXN0cnVjdCBsaXN0X2hlYWQg
ZHFfaGFzaDsJIAoJc3RydWN0IGxpc3RfaGVhZCBkcV9pbnVzZTsJIAoJc3RydWN0IGxpc3RfaGVh
ZCBkcV9mcmVlOwkgCgl3YWl0X3F1ZXVlX2hlYWRfdCBkcV93YWl0X2xvY2s7CSAKCXdhaXRfcXVl
dWVfaGVhZF90IGRxX3dhaXRfZnJlZTsJIAoJaW50IGRxX2NvdW50OwkJCSAKCgkgCglzdHJ1Y3Qg
c3VwZXJfYmxvY2sgKmRxX3NiOwkgCgl1bnNpZ25lZCBpbnQgZHFfaWQ7CQkgCglrZGV2X3QgZHFf
ZGV2OwkJCSAKCXNob3J0IGRxX3R5cGU7CQkJIAoJc2hvcnQgZHFfZmxhZ3M7CQkJIAoJdW5zaWdu
ZWQgbG9uZyBkcV9yZWZlcmVuY2VkOwkgCgoJc3RydWN0IGRxYmxrIGRxX2RxYjsJCSAKfTsKCgoK
IAoKCgoKCgoKCgojIDE5OCAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4
LTIuNC54L2luY2x1ZGUvbGludXgvcXVvdGEuaCIKCgojIDM2OCAiL2hvbWUvY2FybG9zL0J1aWxk
cy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvZnMuaCIgMgoKCgogCgoK
c3RydWN0IHBhZ2U7CnN0cnVjdCBhZGRyZXNzX3NwYWNlOwpzdHJ1Y3Qga2lvYnVmOwoKc3RydWN0
IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyB7CglpbnQgKCp3cml0ZXBhZ2UpKHN0cnVjdCBwYWdl
ICopOwoJaW50ICgqcmVhZHBhZ2UpKHN0cnVjdCBmaWxlICosIHN0cnVjdCBwYWdlICopOwoJaW50
ICgqc3luY19wYWdlKShzdHJ1Y3QgcGFnZSAqKTsKCSAKCgoKCWludCAoKnByZXBhcmVfd3JpdGUp
KHN0cnVjdCBmaWxlICosIHN0cnVjdCBwYWdlICosIHVuc2lnbmVkLCB1bnNpZ25lZCk7CglpbnQg
KCpjb21taXRfd3JpdGUpKHN0cnVjdCBmaWxlICosIHN0cnVjdCBwYWdlICosIHVuc2lnbmVkLCB1
bnNpZ25lZCk7CgkgCglpbnQgKCpibWFwKShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLCBsb25nKTsK
CWludCAoKmZsdXNocGFnZSkgKHN0cnVjdCBwYWdlICosIHVuc2lnbmVkIGxvbmcpOwoJaW50ICgq
cmVsZWFzZXBhZ2UpIChzdHJ1Y3QgcGFnZSAqLCBpbnQpOwoKCWludCAoKmRpcmVjdF9JTykoaW50
LCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGtpb2J1ZiAqLCB1bnNpZ25lZCBsb25nLCBpbnQpOwp9
OwoKc3RydWN0IGFkZHJlc3Nfc3BhY2UgewoJc3RydWN0IGxpc3RfaGVhZAljbGVhbl9wYWdlczsJ
IAoJc3RydWN0IGxpc3RfaGVhZAlkaXJ0eV9wYWdlczsJIAoJc3RydWN0IGxpc3RfaGVhZAlsb2Nr
ZWRfcGFnZXM7CSAKCXVuc2lnbmVkIGxvbmcJCW5ycGFnZXM7CSAKCXN0cnVjdCBhZGRyZXNzX3Nw
YWNlX29wZXJhdGlvbnMgKmFfb3BzOwkgCglzdHJ1Y3QgaW5vZGUJCSpob3N0OwkJIAoJc3RydWN0
IHZtX2FyZWFfc3RydWN0CSppX21tYXA7CSAKCXN0cnVjdCB2bV9hcmVhX3N0cnVjdAkqaV9tbWFw
X3NoYXJlZDsgIAoJc3BpbmxvY2tfdAkJaV9zaGFyZWRfbG9jazsgICAKCWludAkJCWdmcF9tYXNr
OwkgCn07CgpzdHJ1Y3QgY2hhcl9kZXZpY2UgewoJc3RydWN0IGxpc3RfaGVhZAloYXNoOwoJYXRv
bWljX3QJCWNvdW50OwoJZGV2X3QJCQlkZXY7CglhdG9taWNfdAkJb3BlbmVyczsKCXN0cnVjdCBz
ZW1hcGhvcmUJc2VtOwp9OwoKc3RydWN0IGJsb2NrX2RldmljZSB7CglzdHJ1Y3QgbGlzdF9oZWFk
CWJkX2hhc2g7CglhdG9taWNfdAkJYmRfY291bnQ7CglzdHJ1Y3QgaW5vZGUgKgkJYmRfaW5vZGU7
CglkZXZfdAkJCWJkX2RldjsgICAKCWludAkJCWJkX29wZW5lcnM7Cgljb25zdCBzdHJ1Y3QgYmxv
Y2tfZGV2aWNlX29wZXJhdGlvbnMgKmJkX29wOwoJc3RydWN0IHNlbWFwaG9yZQliZF9zZW07CSAK
CXN0cnVjdCBsaXN0X2hlYWQJYmRfaW5vZGVzOwp9OwoKc3RydWN0IGlub2RlIHsKCXN0cnVjdCBs
aXN0X2hlYWQJaV9oYXNoOwoJc3RydWN0IGxpc3RfaGVhZAlpX2xpc3Q7CglzdHJ1Y3QgbGlzdF9o
ZWFkCWlfZGVudHJ5OwoJCglzdHJ1Y3QgbGlzdF9oZWFkCWlfZGlydHlfYnVmZmVyczsKCXN0cnVj
dCBsaXN0X2hlYWQJaV9kaXJ0eV9kYXRhX2J1ZmZlcnM7CgoJdW5zaWduZWQgbG9uZwkJaV9pbm87
CglhdG9taWNfdAkJaV9jb3VudDsKCWtkZXZfdAkJCWlfZGV2OwoJdW1vZGVfdAkJCWlfbW9kZTsK
CW5saW5rX3QJCQlpX25saW5rOwoJdWlkX3QJCQlpX3VpZDsKCWdpZF90CQkJaV9naWQ7CglrZGV2
X3QJCQlpX3JkZXY7Cglsb2ZmX3QJCQlpX3NpemU7Cgl0aW1lX3QJCQlpX2F0aW1lOwoJdGltZV90
CQkJaV9tdGltZTsKCXRpbWVfdAkJCWlfY3RpbWU7Cgl1bnNpZ25lZCBpbnQJCWlfYmxrYml0czsK
CXVuc2lnbmVkIGxvbmcJCWlfYmxrc2l6ZTsKCXVuc2lnbmVkIGxvbmcJCWlfYmxvY2tzOwoJdW5z
aWduZWQgbG9uZwkJaV92ZXJzaW9uOwoJc3RydWN0IHNlbWFwaG9yZQlpX3NlbTsKCXN0cnVjdCBz
ZW1hcGhvcmUJaV96b21iaWU7CglzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucwkqaV9vcDsKCXN0cnVj
dCBmaWxlX29wZXJhdGlvbnMJKmlfZm9wOwkgCglzdHJ1Y3Qgc3VwZXJfYmxvY2sJKmlfc2I7Cgl3
YWl0X3F1ZXVlX2hlYWRfdAlpX3dhaXQ7CglzdHJ1Y3QgZmlsZV9sb2NrCSppX2Zsb2NrOwoJc3Ry
dWN0IGFkZHJlc3Nfc3BhY2UJKmlfbWFwcGluZzsKCXN0cnVjdCBhZGRyZXNzX3NwYWNlCWlfZGF0
YTsKCXN0cnVjdCBkcXVvdAkJKmlfZHF1b3RbMiBdOwoJIAoJc3RydWN0IGxpc3RfaGVhZAlpX2Rl
dmljZXM7CglzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvCSppX3BpcGU7CglzdHJ1Y3QgYmxvY2tfZGV2
aWNlCSppX2JkZXY7CglzdHJ1Y3QgY2hhcl9kZXZpY2UJKmlfY2RldjsKCgl1bnNpZ25lZCBsb25n
CQlpX2Rub3RpZnlfbWFzazsgIAoJc3RydWN0IGRub3RpZnlfc3RydWN0CSppX2Rub3RpZnk7ICAK
Cgl1bnNpZ25lZCBsb25nCQlpX3N0YXRlOwoKCXVuc2lnbmVkIGludAkJaV9mbGFnczsKCXVuc2ln
bmVkIGNoYXIJCWlfc29jazsKCglhdG9taWNfdAkJaV93cml0ZWNvdW50OwoJdW5zaWduZWQgaW50
CQlpX2F0dHJfZmxhZ3M7CglfX3UzMgkJCWlfZ2VuZXJhdGlvbjsKCXVuaW9uIHsKCQlzdHJ1Y3Qg
bWluaXhfaW5vZGVfaW5mbwkJbWluaXhfaTsKCQlzdHJ1Y3QgZXh0Ml9pbm9kZV9pbmZvCQlleHQy
X2k7CgkJc3RydWN0IGV4dDNfaW5vZGVfaW5mbwkJZXh0M19pOwoJCXN0cnVjdCBocGZzX2lub2Rl
X2luZm8JCWhwZnNfaTsKCQlzdHJ1Y3QgbnRmc19pbm9kZV9pbmZvCQludGZzX2k7CgkJc3RydWN0
IG1zZG9zX2lub2RlX2luZm8JCW1zZG9zX2k7CgkJc3RydWN0IHVtc2Rvc19pbm9kZV9pbmZvCXVt
c2Rvc19pOwoJCXN0cnVjdCBpc29faW5vZGVfaW5mbwkJaXNvZnNfaTsKCQlzdHJ1Y3QgbmZzX2lu
b2RlX2luZm8JCW5mc19pOwoJCXN0cnVjdCBzeXN2X2lub2RlX2luZm8JCXN5c3ZfaTsKCQlzdHJ1
Y3QgYWZmc19pbm9kZV9pbmZvCQlhZmZzX2k7CgkJc3RydWN0IHVmc19pbm9kZV9pbmZvCQl1ZnNf
aTsKCQlzdHJ1Y3QgZWZzX2lub2RlX2luZm8JCWVmc19pOwoJCXN0cnVjdCByb21mc19pbm9kZV9p
bmZvCQlyb21mc19pOwoJCXN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvCQlzaG1lbV9pOwoJCXN0cnVj
dCBjb2RhX2lub2RlX2luZm8JCWNvZGFfaTsKCQlzdHJ1Y3Qgc21iX2lub2RlX2luZm8JCXNtYmZz
X2k7CgkJc3RydWN0IGhmc19pbm9kZV9pbmZvCQloZnNfaTsKCQlzdHJ1Y3QgYWRmc19pbm9kZV9p
bmZvCQlhZGZzX2k7CgkJc3RydWN0IHFueDRfaW5vZGVfaW5mbwkJcW54NF9pOwoJCXN0cnVjdCBy
ZWlzZXJmc19pbm9kZV9pbmZvCXJlaXNlcmZzX2k7CgkJc3RydWN0IGJmc19pbm9kZV9pbmZvCQli
ZnNfaTsKCQlzdHJ1Y3QgdWRmX2lub2RlX2luZm8JCXVkZl9pOwoJCXN0cnVjdCBuY3BfaW5vZGVf
aW5mbwkJbmNwZnNfaTsKCQlzdHJ1Y3QgcHJvY19pbm9kZV9pbmZvCQlwcm9jX2k7CgkJc3RydWN0
IHNvY2tldAkJCXNvY2tldF9pOwoJCXN0cnVjdCB1c2JkZXZfaW5vZGVfaW5mbyAgICAgICAgdXNi
ZGV2X2k7CgkJc3RydWN0IGpmZnMyX2lub2RlX2luZm8JCWpmZnMyX2k7CgkJdm9pZAkJCQkqZ2Vu
ZXJpY19pcDsKCX0gdTsKfTsKCnN0cnVjdCBmb3duX3N0cnVjdCB7CglpbnQgcGlkOwkJIAoJdWlk
X3QgdWlkLCBldWlkOwkgCglpbnQgc2lnbnVtOwkJIAp9OwoKc3RydWN0IGZpbGUgewoJc3RydWN0
IGxpc3RfaGVhZAlmX2xpc3Q7CglzdHJ1Y3QgZGVudHJ5CQkqZl9kZW50cnk7CglzdHJ1Y3QgdmZz
bW91bnQgICAgICAgICAqZl92ZnNtbnQ7CglzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zCSpmX29wOwoJ
YXRvbWljX3QJCWZfY291bnQ7Cgl1bnNpZ25lZCBpbnQgCQlmX2ZsYWdzOwoJbW9kZV90CQkJZl9t
b2RlOwoJbG9mZl90CQkJZl9wb3M7Cgl1bnNpZ25lZCBsb25nIAkJZl9yZWFkYSwgZl9yYW1heCwg
Zl9yYWVuZCwgZl9yYWxlbiwgZl9yYXdpbjsKCXN0cnVjdCBmb3duX3N0cnVjdAlmX293bmVyOwoJ
dW5zaWduZWQgaW50CQlmX3VpZCwgZl9naWQ7CglpbnQJCQlmX2Vycm9yOwoKCXVuc2lnbmVkIGxv
bmcJCWZfdmVyc2lvbjsKCgkgCgl2b2lkCQkJKnByaXZhdGVfZGF0YTsKCgkgCglzdHJ1Y3Qga2lv
YnVmCQkqZl9pb2J1ZjsKCWxvbmcJCQlmX2lvYnVmX2xvY2s7Cn07CmV4dGVybiBzcGlubG9ja190
IGZpbGVzX2xvY2s7CgoKCgoKCmV4dGVybiBpbnQgaW5pdF9wcml2YXRlX2ZpbGUoc3RydWN0IGZp
bGUgKiwgc3RydWN0IGRlbnRyeSAqLCBpbnQpOwoKCgoKCgoKCgoKIAoKCgoKCgp0eXBlZGVmIHN0
cnVjdCBmaWxlc19zdHJ1Y3QgKmZsX293bmVyX3Q7CgpzdHJ1Y3QgZmlsZV9sb2NrIHsKCXN0cnVj
dCBmaWxlX2xvY2sgKmZsX25leHQ7CSAKCXN0cnVjdCBsaXN0X2hlYWQgZmxfbGluazsJIAoJc3Ry
dWN0IGxpc3RfaGVhZCBmbF9ibG9jazsJIAoJZmxfb3duZXJfdCBmbF9vd25lcjsKCXVuc2lnbmVk
IGludCBmbF9waWQ7Cgl3YWl0X3F1ZXVlX2hlYWRfdCBmbF93YWl0OwoJc3RydWN0IGZpbGUgKmZs
X2ZpbGU7Cgl1bnNpZ25lZCBjaGFyIGZsX2ZsYWdzOwoJdW5zaWduZWQgY2hhciBmbF90eXBlOwoJ
bG9mZl90IGZsX3N0YXJ0OwoJbG9mZl90IGZsX2VuZDsKCgl2b2lkICgqZmxfbm90aWZ5KShzdHJ1
Y3QgZmlsZV9sb2NrICopOwkgCgl2b2lkICgqZmxfaW5zZXJ0KShzdHJ1Y3QgZmlsZV9sb2NrICop
OwkgCgl2b2lkICgqZmxfcmVtb3ZlKShzdHJ1Y3QgZmlsZV9sb2NrICopOwkgCgoJc3RydWN0IGZh
c3luY19zdHJ1Y3QgKglmbF9mYXN5bmM7ICAKCgl1bmlvbiB7CgkJc3RydWN0IG5mc19sb2NrX2lu
Zm8JbmZzX2ZsOwoJfSBmbF91Owp9OwoKIAoKCgoKCgpleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBm
aWxlX2xvY2tfbGlzdDsKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xp
bnV4LTIuNC54L2luY2x1ZGUvbGludXgvZmNudGwuaCIgMQoKCgojIDEgIi9ob21lL2Nhcmxvcy9C
dWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2FzbS9mY250bC5oIiAxCiMg
MSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUv
YXNtLW02OGsvZmNudGwuaCIgMQoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgogCgoKIAoKCgoKIAoKCgogCgoKIAoKCgoKCgoKCgoKCnN0cnVjdCBmbG9jayB7CglzaG9y
dCBsX3R5cGU7CglzaG9ydCBsX3doZW5jZTsKCW9mZl90IGxfc3RhcnQ7CglvZmZfdCBsX2xlbjsK
CXBpZF90IGxfcGlkOwp9OwoKc3RydWN0IGZsb2NrNjQgewoJc2hvcnQgIGxfdHlwZTsKCXNob3J0
ICBsX3doZW5jZTsKCWxvZmZfdCBsX3N0YXJ0OwoJbG9mZl90IGxfbGVuOwoJcGlkX3QgIGxfcGlk
Owp9OwoKCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQu
eC9pbmNsdWRlL2FzbS9mY250bC5oIiAyCgojIDQgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5V
WC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2ZjbnRsLmgiIDIKCgoKCgogCgoKCgoK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgNjAxICIvaG9tZS9jYXJsb3Mv
QnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9mcy5oIiAyCgoK
ZXh0ZXJuIGludCBmY250bF9nZXRsayh1bnNpZ25lZCBpbnQsIHN0cnVjdCBmbG9jayAqKTsKZXh0
ZXJuIGludCBmY250bF9zZXRsayh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgc3RydWN0IGZs
b2NrICopOwoKZXh0ZXJuIGludCBmY250bF9nZXRsazY0KHVuc2lnbmVkIGludCwgc3RydWN0IGZs
b2NrNjQgKik7CmV4dGVybiBpbnQgZmNudGxfc2V0bGs2NCh1bnNpZ25lZCBpbnQsIHVuc2lnbmVk
IGludCwgc3RydWN0IGZsb2NrNjQgKik7CgogCmV4dGVybiB2b2lkIGxvY2tzX2luaXRfbG9jayhz
dHJ1Y3QgZmlsZV9sb2NrICopOwpleHRlcm4gdm9pZCBsb2Nrc19jb3B5X2xvY2soc3RydWN0IGZp
bGVfbG9jayAqLCBzdHJ1Y3QgZmlsZV9sb2NrICopOwpleHRlcm4gdm9pZCBsb2Nrc19yZW1vdmVf
cG9zaXgoc3RydWN0IGZpbGUgKiwgZmxfb3duZXJfdCk7CmV4dGVybiB2b2lkIGxvY2tzX3JlbW92
ZV9mbG9jayhzdHJ1Y3QgZmlsZSAqKTsKZXh0ZXJuIHN0cnVjdCBmaWxlX2xvY2sgKnBvc2l4X3Rl
c3RfbG9jayhzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgZmlsZV9sb2NrICopOwpleHRlcm4gaW50IHBv
c2l4X2xvY2tfZmlsZShzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgZmlsZV9sb2NrICosIHVuc2lnbmVk
IGludCk7CmV4dGVybiB2b2lkIHBvc2l4X2Jsb2NrX2xvY2soc3RydWN0IGZpbGVfbG9jayAqLCBz
dHJ1Y3QgZmlsZV9sb2NrICopOwpleHRlcm4gdm9pZCBwb3NpeF91bmJsb2NrX2xvY2soc3RydWN0
IGZpbGVfbG9jayAqKTsKZXh0ZXJuIGludCBwb3NpeF9sb2Nrc19kZWFkbG9jayhzdHJ1Y3QgZmls
ZV9sb2NrICosIHN0cnVjdCBmaWxlX2xvY2sgKik7CmV4dGVybiBpbnQgX19nZXRfbGVhc2Uoc3Ry
dWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgaW50IGZsYWdzKTsKZXh0ZXJuIHRpbWVfdCBsZWFz
ZV9nZXRfbXRpbWUoc3RydWN0IGlub2RlICopOwpleHRlcm4gaW50IGxvY2tfbWF5X3JlYWQoc3Ry
dWN0IGlub2RlICosIGxvZmZfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBjb3VudCk7CmV4dGVybiBp
bnQgbG9ja19tYXlfd3JpdGUoc3RydWN0IGlub2RlICosIGxvZmZfdCBzdGFydCwgdW5zaWduZWQg
bG9uZyBjb3VudCk7CgpzdHJ1Y3QgZmFzeW5jX3N0cnVjdCB7CglpbnQJbWFnaWM7CglpbnQJZmFf
ZmQ7CglzdHJ1Y3QJZmFzeW5jX3N0cnVjdAkqZmFfbmV4dDsgIAoJc3RydWN0CWZpbGUgCQkqZmFf
ZmlsZTsKfTsKCgoKIApleHRlcm4gaW50IGZhc3luY19oZWxwZXIoaW50LCBzdHJ1Y3QgZmlsZSAq
LCBpbnQsIHN0cnVjdCBmYXN5bmNfc3RydWN0ICoqKTsKIApleHRlcm4gdm9pZCBraWxsX2Zhc3lu
YyhzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqKiwgaW50LCBpbnQpOwogCmV4dGVybiB2b2lkIF9fa2ls
bF9mYXN5bmMoc3RydWN0IGZhc3luY19zdHJ1Y3QgKiwgaW50LCBpbnQpOwoKc3RydWN0IG5hbWVp
ZGF0YSB7CglzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CglzdHJ1Y3QgdmZzbW91bnQgKm1udDsKCXN0
cnVjdCBxc3RyIGxhc3Q7Cgl1bnNpZ25lZCBpbnQgZmxhZ3M7CglpbnQgbGFzdF90eXBlOwp9OwoK
CgoKc3RydWN0IHF1b3RhX21vdW50X29wdGlvbnMKewoJdW5zaWduZWQgaW50IGZsYWdzOwkJCSAK
CXN0cnVjdCBzZW1hcGhvcmUgZHFpb19zZW07CQkgCglzdHJ1Y3Qgc2VtYXBob3JlIGRxb2ZmX3Nl
bTsJCSAKCXN0cnVjdCBmaWxlICpmaWxlc1syIF07CQkgCgl0aW1lX3QgaW5vZGVfZXhwaXJlWzIg
XTsJCSAKCXRpbWVfdCBibG9ja19leHBpcmVbMiBdOwkJIAoJY2hhciByc3F1YXNoWzIgXTsJCSAK
fTsKCiAKCgoKCgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgt
Mi40LngvaW5jbHVkZS9saW51eC9taW5peF9mc19zYi5oIiAxCgoKCiAKCgpzdHJ1Y3QgbWluaXhf
c2JfaW5mbyB7CgkJCXVuc2lnbmVkIGxvbmcgc19uaW5vZGVzOwoJCQl1bnNpZ25lZCBsb25nIHNf
bnpvbmVzOwoJCQl1bnNpZ25lZCBsb25nIHNfaW1hcF9ibG9ja3M7CgkJCXVuc2lnbmVkIGxvbmcg
c196bWFwX2Jsb2NrczsKCQkJdW5zaWduZWQgbG9uZyBzX2ZpcnN0ZGF0YXpvbmU7CgkJCXVuc2ln
bmVkIGxvbmcgc19sb2dfem9uZV9zaXplOwoJCQl1bnNpZ25lZCBsb25nIHNfbWF4X3NpemU7CgkJ
CWludCBzX2RpcnNpemU7CgkJCWludCBzX25hbWVsZW47CgkJCWludCBzX2xpbmtfbWF4OwoJCQlz
dHJ1Y3QgYnVmZmVyX2hlYWQgKiogc19pbWFwOwoJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKiogc196
bWFwOwoJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBzX3NiaDsKCQkJc3RydWN0IG1pbml4X3N1cGVy
X2Jsb2NrICogc19tczsKCQkJdW5zaWduZWQgc2hvcnQgc19tb3VudF9zdGF0ZTsKCQkJdW5zaWdu
ZWQgc2hvcnQgc192ZXJzaW9uOwp9OwoKCiMgNjY5ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElO
VVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9mcy5oIiAyCgojIDEgIi9ob21lL2Nh
cmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2V4dDJf
ZnNfc2IuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgogCgoKCiAKCgpzdHJ1Y3QgZXh0Ml9z
Yl9pbmZvIHsKCXVuc2lnbmVkIGxvbmcgc19mcmFnX3NpemU7CSAKCXVuc2lnbmVkIGxvbmcgc19m
cmFnc19wZXJfYmxvY2s7IAoJdW5zaWduZWQgbG9uZyBzX2lub2Rlc19wZXJfYmxvY2s7IAoJdW5z
aWduZWQgbG9uZyBzX2ZyYWdzX3Blcl9ncm91cDsgCgl1bnNpZ25lZCBsb25nIHNfYmxvY2tzX3Bl
cl9ncm91cDsgCgl1bnNpZ25lZCBsb25nIHNfaW5vZGVzX3Blcl9ncm91cDsgCgl1bnNpZ25lZCBs
b25nIHNfaXRiX3Blcl9ncm91cDsJIAoJdW5zaWduZWQgbG9uZyBzX2dkYl9jb3VudDsJIAoJdW5z
aWduZWQgbG9uZyBzX2Rlc2NfcGVyX2Jsb2NrOwkgCgl1bnNpZ25lZCBsb25nIHNfZ3JvdXBzX2Nv
dW50OwkgCglzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBzX3NiaDsJIAoJc3RydWN0IGV4dDJfc3VwZXJf
YmxvY2sgKiBzX2VzOwkgCglzdHJ1Y3QgYnVmZmVyX2hlYWQgKiogc19ncm91cF9kZXNjOwoJdW5z
aWduZWQgc2hvcnQgc19sb2FkZWRfaW5vZGVfYml0bWFwczsKCXVuc2lnbmVkIHNob3J0IHNfbG9h
ZGVkX2Jsb2NrX2JpdG1hcHM7Cgl1bnNpZ25lZCBsb25nIHNfaW5vZGVfYml0bWFwX251bWJlcls4
IF07CglzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBzX2lub2RlX2JpdG1hcFs4IF07Cgl1bnNpZ25lZCBs
b25nIHNfYmxvY2tfYml0bWFwX251bWJlcls4IF07CglzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBzX2Js
b2NrX2JpdG1hcFs4IF07Cgl1bnNpZ25lZCBsb25nICBzX21vdW50X29wdDsKCXVpZF90IHNfcmVz
dWlkOwoJZ2lkX3Qgc19yZXNnaWQ7Cgl1bnNpZ25lZCBzaG9ydCBzX21vdW50X3N0YXRlOwoJdW5z
aWduZWQgc2hvcnQgc19wYWQ7CglpbnQgc19hZGRyX3Blcl9ibG9ja19iaXRzOwoJaW50IHNfZGVz
Y19wZXJfYmxvY2tfYml0czsKCWludCBzX2lub2RlX3NpemU7CglpbnQgc19maXJzdF9pbm87Cn07
CgoKIyA2NzAgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9p
bmNsdWRlL2xpbnV4L2ZzLmgiIDIKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2Vj
bC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvZXh0M19mc19zYi5oIiAxCiAKCgoKCgoKCgoK
CgoKCgoKCgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40
LngvaW5jbHVkZS9saW51eC90aW1lci5oIiAxCgoKCgoKCiAKCgoKCgoKCgpzdHJ1Y3QgdGltZXJf
bGlzdCB7CglzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cgl1bnNpZ25lZCBsb25nIGV4cGlyZXM7Cgl1
bnNpZ25lZCBsb25nIGRhdGE7Cgl2b2lkICgqZnVuY3Rpb24pKHVuc2lnbmVkIGxvbmcpOwp9OwoK
ZXh0ZXJuIHZvaWQgYWRkX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICogdGltZXIpOwpleHRlcm4g
aW50IGRlbF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqIHRpbWVyKTsKCgoKCgoKCgoKIAoKCgoK
CgppbnQgbW9kX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwgdW5zaWduZWQgbG9uZyBl
eHBpcmVzKTsKCmV4dGVybiB2b2lkIGl0X3JlYWxfZm4odW5zaWduZWQgbG9uZyk7CgpzdGF0aWMg
aW5saW5lIHZvaWQgaW5pdF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqIHRpbWVyKQp7Cgl0aW1l
ci0+bGlzdC5uZXh0ID0gdGltZXItPmxpc3QucHJldiA9ICgodm9pZCAqKTApIDsKfQoKc3RhdGlj
IGlubGluZSBpbnQgdGltZXJfcGVuZGluZyAoY29uc3Qgc3RydWN0IHRpbWVyX2xpc3QgKiB0aW1l
cikKewoJcmV0dXJuIHRpbWVyLT5saXN0Lm5leHQgIT0gKCh2b2lkICopMCkgOwp9CgogCgoKCgoK
CgoKCgoKCgoKCgoKCgojIDIwICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGlu
dXgtMi40LngvaW5jbHVkZS9saW51eC9leHQzX2ZzX3NiLmgiIDIKCgoKCiAKCgoKIAoKCgogCgoK
c3RydWN0IGV4dDNfc2JfaW5mbyB7Cgl1bnNpZ25lZCBsb25nIHNfZnJhZ19zaXplOwkgCgl1bnNp
Z25lZCBsb25nIHNfZnJhZ3NfcGVyX2Jsb2NrOyAKCXVuc2lnbmVkIGxvbmcgc19pbm9kZXNfcGVy
X2Jsb2NrOyAKCXVuc2lnbmVkIGxvbmcgc19mcmFnc19wZXJfZ3JvdXA7IAoJdW5zaWduZWQgbG9u
ZyBzX2Jsb2Nrc19wZXJfZ3JvdXA7IAoJdW5zaWduZWQgbG9uZyBzX2lub2Rlc19wZXJfZ3JvdXA7
IAoJdW5zaWduZWQgbG9uZyBzX2l0Yl9wZXJfZ3JvdXA7CSAKCXVuc2lnbmVkIGxvbmcgc19nZGJf
Y291bnQ7CSAKCXVuc2lnbmVkIGxvbmcgc19kZXNjX3Blcl9ibG9jazsJIAoJdW5zaWduZWQgbG9u
ZyBzX2dyb3Vwc19jb3VudDsJIAoJc3RydWN0IGJ1ZmZlcl9oZWFkICogc19zYmg7CSAKCXN0cnVj
dCBleHQzX3N1cGVyX2Jsb2NrICogc19lczsJIAoJc3RydWN0IGJ1ZmZlcl9oZWFkICoqIHNfZ3Jv
dXBfZGVzYzsKCXVuc2lnbmVkIHNob3J0IHNfbG9hZGVkX2lub2RlX2JpdG1hcHM7Cgl1bnNpZ25l
ZCBzaG9ydCBzX2xvYWRlZF9ibG9ja19iaXRtYXBzOwoJdW5zaWduZWQgbG9uZyBzX2lub2RlX2Jp
dG1hcF9udW1iZXJbOCBdOwoJc3RydWN0IGJ1ZmZlcl9oZWFkICogc19pbm9kZV9iaXRtYXBbOCBd
OwoJdW5zaWduZWQgbG9uZyBzX2Jsb2NrX2JpdG1hcF9udW1iZXJbOCBdOwoJc3RydWN0IGJ1ZmZl
cl9oZWFkICogc19ibG9ja19iaXRtYXBbOCBdOwoJdW5zaWduZWQgbG9uZyAgc19tb3VudF9vcHQ7
Cgl1aWRfdCBzX3Jlc3VpZDsKCWdpZF90IHNfcmVzZ2lkOwoJdW5zaWduZWQgc2hvcnQgc19tb3Vu
dF9zdGF0ZTsKCXVuc2lnbmVkIHNob3J0IHNfcGFkOwoJaW50IHNfYWRkcl9wZXJfYmxvY2tfYml0
czsKCWludCBzX2Rlc2NfcGVyX2Jsb2NrX2JpdHM7CglpbnQgc19pbm9kZV9zaXplOwoJaW50IHNf
Zmlyc3RfaW5vOwoKCSAKCXN0cnVjdCBpbm9kZSAqIHNfam91cm5hbF9pbm9kZTsKCXN0cnVjdCBq
b3VybmFsX3MgKiBzX2pvdXJuYWw7CglzdHJ1Y3QgbGlzdF9oZWFkIHNfb3JwaGFuOwoJdW5zaWdu
ZWQgbG9uZyBzX2NvbW1pdF9pbnRlcnZhbDsKCXN0cnVjdCBibG9ja19kZXZpY2UgKmpvdXJuYWxf
YmRldjsKCgoKCn07CgoKIyA2NzEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNs
aW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxk
cy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvaHBmc19mc19zYi5oIiAx
CgoKCnN0cnVjdCBocGZzX3NiX2luZm8gewoJaW5vX3Qgc2Jfcm9vdDsJCQkgCgl1bnNpZ25lZCBz
Yl9mc19zaXplOwkJIAoJdW5zaWduZWQgc2JfYml0bWFwczsJCSAKCXVuc2lnbmVkIHNiX2RpcmJh
bmRfc3RhcnQ7CSAKCXVuc2lnbmVkIHNiX2RpcmJhbmRfc2l6ZTsJIAoJdW5zaWduZWQgc2JfZG1h
cDsJCSAKCXVuc2lnbmVkIHNiX25fZnJlZTsJCSAKCXVuc2lnbmVkIHNiX25fZnJlZV9kbm9kZXM7
CSAKCXVpZF90IHNiX3VpZDsJCQkgCglnaWRfdCBzYl9naWQ7CQkJIAoJdW1vZGVfdCBzYl9tb2Rl
OwkJIAoJdW5zaWduZWQgc2JfY29udiA6IDI7CQkgCgl1bnNpZ25lZCBzYl9lYXMgOiAyOwkJIAoJ
dW5zaWduZWQgc2JfZXJyIDogMjsJCSAKCXVuc2lnbmVkIHNiX2NoayA6IDI7CQkgCgl1bnNpZ25l
ZCBzYl9sb3dlcmNhc2UgOiAxOwkgCgl1bnNpZ25lZCBzYl93YXNfZXJyb3IgOiAxOwkgCgl1bnNp
Z25lZCBzYl9jaGtkc2sgOiAyOwkJIAoJdW5zaWduZWQgc2JfcmRfZm5vZGUgOiAyOwkgCgl1bnNp
Z25lZCBzYl9yZF9pbm9kZSA6IDI7CSAKCgoJd2FpdF9xdWV1ZV9oZWFkX3Qgc2JfaWdldF9xOwoJ
dW5zaWduZWQgY2hhciAqc2JfY3BfdGFibGU7CSAKCQkJCQkgCgkJCQkJIAoJdW5zaWduZWQgKnNi
X2JtcF9kaXI7CQkgCgl1bnNpZ25lZCBzYl9jX2JpdG1hcDsJCSAKCXdhaXRfcXVldWVfaGVhZF90
IHNiX2NyZWF0aW9uX2RlOyAKCgl1bnNpZ25lZCBzYl9jcmVhdGlvbl9kZV9sb2NrIDogMTsKCSAK
CWludCBzYl90aW1lc2hpZnQ7Cn07CgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgogCgoKCiMg
NjcyICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVk
ZS9saW51eC9mcy5oIiAyCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNs
aW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L250ZnNfZnNfc2IuaCIgMQoKCgoKCnN0cnVjdCBudGZz
X3NiX2luZm97CgkgCgludGZzX3VpZF90IHVpZDsKCW50ZnNfZ2lkX3QgZ2lkOwoJbnRtb2RlX3Qg
dW1hc2s7Cgl2b2lkICpubHNfbWFwOwoJdW5zaWduZWQgaW50IG5ndDsKCWNoYXIgbWZ0X3pvbmVf
bXVsdGlwbGllcjsKCXVuc2lnbmVkIGxvbmcgbWZ0X2RhdGFfcG9zOwoJbnRmc19jbHVzdGVyX3Qg
bWZ0X3pvbmVfcG9zOwoJbnRmc19jbHVzdGVyX3QgbWZ0X3pvbmVfc3RhcnQ7CgludGZzX2NsdXN0
ZXJfdCBtZnRfem9uZV9lbmQ7CgludGZzX2NsdXN0ZXJfdCBkYXRhMV96b25lX3BvczsKCW50ZnNf
Y2x1c3Rlcl90IGRhdGEyX3pvbmVfcG9zOwoJIAoKCW50ZnNfc2l6ZV90IHBhcnRpdGlvbl9iaWFz
OwkgCgkgCgludGZzX3UzMiBhdF9zdGFuZGFyZF9pbmZvcm1hdGlvbjsKCW50ZnNfdTMyIGF0X2F0
dHJpYnV0ZV9saXN0OwoJbnRmc191MzIgYXRfZmlsZV9uYW1lOwoJbnRmc191MzIgYXRfdm9sdW1l
X3ZlcnNpb247CgludGZzX3UzMiBhdF9zZWN1cml0eV9kZXNjcmlwdG9yOwoJbnRmc191MzIgYXRf
dm9sdW1lX25hbWU7CgludGZzX3UzMiBhdF92b2x1bWVfaW5mb3JtYXRpb247CgludGZzX3UzMiBh
dF9kYXRhOwoJbnRmc191MzIgYXRfaW5kZXhfcm9vdDsKCW50ZnNfdTMyIGF0X2luZGV4X2FsbG9j
YXRpb247CgludGZzX3UzMiBhdF9iaXRtYXA7CgludGZzX3UzMiBhdF9zeW1saW5rOyAgCgkgCglp
bnQgc2VjdG9yX3NpemU7CglpbnQgY2x1c3Rlcl9zaXplOwoJaW50IGNsdXN0ZXJfc2l6ZV9iaXRz
OwoJaW50IG1mdF9jbHVzdGVyc19wZXJfcmVjb3JkOwoJaW50IG1mdF9yZWNvcmRfc2l6ZTsKCWlu
dCBtZnRfcmVjb3JkX3NpemVfYml0czsKCWludCBpbmRleF9jbHVzdGVyc19wZXJfcmVjb3JkOwoJ
aW50IGluZGV4X3JlY29yZF9zaXplOwoJaW50IGluZGV4X3JlY29yZF9zaXplX2JpdHM7CgludGZz
X2NsdXN0ZXJfdCBucl9jbHVzdGVyczsKCW50ZnNfY2x1c3Rlcl90IG1mdF9sY247CgludGZzX2Ns
dXN0ZXJfdCBtZnRfbWlycl9sY247CgkgCgl1bnNpZ25lZCBjaGFyICptZnQ7Cgl1bnNpZ25lZCBz
aG9ydCAqdXBjYXNlOwoJdW5zaWduZWQgaW50IHVwY2FzZV9sZW5ndGg7CgkgCglzdHJ1Y3QgbnRm
c19pbm9kZV9pbmZvICptZnRfaW5vOwoJc3RydWN0IG50ZnNfaW5vZGVfaW5mbyAqbWZ0bWlycjsK
CXN0cnVjdCBudGZzX2lub2RlX2luZm8gKmJpdG1hcDsKCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7
Cgl1bnNpZ25lZCBjaGFyIGlub19mbGFnczsKfTsKCgojIDY3MyAiL2hvbWUvY2FybG9zL0J1aWxk
cy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvZnMuaCIgMgoKIyAxICIv
aG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51
eC9tc2Rvc19mc19zYi5oIiAxCgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNs
LXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9mYXRfY3ZmLmgiIDEKCgoKCgpzdHJ1Y3QgY3Zm
X2Zvcm1hdAp7IGludCBjdmZfdmVyc2lvbjsKICBjaGFyKiBjdmZfdmVyc2lvbl90ZXh0OwogIHVu
c2lnbmVkIGxvbmcgZmxhZ3M7CiAgaW50ICgqZGV0ZWN0X2N2ZikgKHN0cnVjdCBzdXBlcl9ibG9j
aypzYik7CiAgaW50ICgqbW91bnRfY3ZmKSAoc3RydWN0IHN1cGVyX2Jsb2NrKnNiLGNoYXIqb3B0
aW9ucyk7CiAgaW50ICgqdW5tb3VudF9jdmYpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sqc2IpOwogIHN0
cnVjdCBidWZmZXJfaGVhZCogKCpjdmZfYnJlYWQpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sqc2IsaW50
IGJsb2NrKTsKICBzdHJ1Y3QgYnVmZmVyX2hlYWQqICgqY3ZmX2dldGJsaykgKHN0cnVjdCBzdXBl
cl9ibG9jaypzYixpbnQgYmxvY2spOwogIHZvaWQgKCpjdmZfYnJlbHNlKSAoc3RydWN0IHN1cGVy
X2Jsb2NrICpzYixzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTsKICB2b2lkICgqY3ZmX21hcmtfYnVm
ZmVyX2RpcnR5KSAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7CiAgdm9pZCAoKmN2Zl9zZXRfdXB0b2Rh
dGUpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogICAgICAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0IGJ1ZmZlcl9oZWFkICpiaCwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2YWwpOwog
IGludCAoKmN2Zl9pc191cHRvZGF0ZSkgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2Isc3RydWN0IGJ1
ZmZlcl9oZWFkICpiaCk7CiAgdm9pZCAoKmN2Zl9sbF9yd19ibG9jaykgKHN0cnVjdCBzdXBlcl9i
bG9jayAqc2IsCiAgICAgICAgICAgICAgICAgICAgICAgIGludCBvcHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBuYnJlcSwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGJ1ZmZl
cl9oZWFkICpiaFszMl0pOwogIGludCAoKmZhdF9hY2Nlc3MpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sg
KnNiLGludCBucixpbnQgbmV3X3ZhbHVlKTsKICBpbnQgKCpjdmZfc3RhdGZzKSAoc3RydWN0IHN1
cGVyX2Jsb2NrICpzYixzdHJ1Y3Qgc3RhdGZzICpidWYsIGludCBidWZzaXopOwogIGludCAoKmN2
Zl9ibWFwKSAoc3RydWN0IGlub2RlICppbm9kZSxpbnQgYmxvY2spOwogIHNzaXplX3QgKCpjdmZf
ZmlsZV9yZWFkKSAoIHN0cnVjdCBmaWxlICosIGNoYXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CiAg
c3NpemVfdCAoKmN2Zl9maWxlX3dyaXRlKSAoIHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgKiwg
c2l6ZV90LCBsb2ZmX3QgKik7CiAgaW50ICgqY3ZmX21tYXApIChzdHJ1Y3QgZmlsZSAqLCBzdHJ1
Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CiAgaW50ICgqY3ZmX3JlYWRwYWdlKSAoc3RydWN0IGlub2Rl
ICosIHN0cnVjdCBwYWdlICopOwogIGludCAoKmN2Zl93cml0ZXBhZ2UpIChzdHJ1Y3QgaW5vZGUg
Kiwgc3RydWN0IHBhZ2UgKik7CiAgaW50ICgqY3ZmX2Rpcl9pb2N0bCkgKHN0cnVjdCBpbm9kZSAq
IGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbHAsCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKICB2b2lkICgqemVyb19vdXRfY2x1c3Rl
cikgKHN0cnVjdCBpbm9kZSosIGludCBjbHVzdGVybnIpOwp9OwoKaW50IHJlZ2lzdGVyX2N2Zl9m
b3JtYXQoc3RydWN0IGN2Zl9mb3JtYXQqY3ZmX2Zvcm1hdCk7CmludCB1bnJlZ2lzdGVyX2N2Zl9m
b3JtYXQoc3RydWN0IGN2Zl9mb3JtYXQqY3ZmX2Zvcm1hdCk7CnZvaWQgZGVjX2N2Zl9mb3JtYXRf
dXNlX2NvdW50X2J5X3ZlcnNpb24oaW50IHZlcnNpb24pOwppbnQgZGV0ZWN0X2N2ZihzdHJ1Y3Qg
c3VwZXJfYmxvY2sqc2IsY2hhcipmb3JjZSk7CgpleHRlcm4gc3RydWN0IGN2Zl9mb3JtYXQgKmN2
Zl9mb3JtYXRzW107CmV4dGVybiBpbnQgY3ZmX2Zvcm1hdF91c2VfY291bnRbXTsKCgojIDMgIi9o
b21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4
L21zZG9zX2ZzX3NiLmgiIDIKCgogCgoKCnN0cnVjdCBmYXRfbW91bnRfb3B0aW9ucyB7Cgl1aWRf
dCBmc191aWQ7CglnaWRfdCBmc19naWQ7Cgl1bnNpZ25lZCBzaG9ydCBmc191bWFzazsKCXVuc2ln
bmVkIHNob3J0IGNvZGVwYWdlOyAgIAoJY2hhciAqaW9jaGFyc2V0OyAgICAgICAgICAgCgl1bnNp
Z25lZCBzaG9ydCBzaG9ydG5hbWU7ICAKCXVuc2lnbmVkIGNoYXIgbmFtZV9jaGVjazsgIAoJdW5z
aWduZWQgY2hhciBjb252ZXJzaW9uOyAgCgl1bnNpZ25lZCBxdWlldDoxLCAgICAgICAgICAKCQkg
c2hvd2V4ZWM6MSwgICAgICAgCgkJIHN5c19pbW11dGFibGU6MSwgIAoJCSBkb3RzT0s6MSwgICAg
ICAgICAKCQkgaXN2ZmF0OjEsICAgICAgICAgCgkJIHV0Zjg6MSwJICAgCgkJIHVuaWNvZGVfeGxh
dGU6MSwgIAoJCSBwb3NpeGZzOjEsICAgICAgICAKCQkgbnVtdGFpbDoxLCAgICAgICAgCgkJIGF0
YXJpOjEsICAgICAgICAgIAoJCSBmYXQzMjoxLAkgICAKCQkgbm9jYXNlOjE7CSAgIAp9OwoKc3Ry
dWN0IG1zZG9zX3NiX2luZm8gewoJdW5zaWduZWQgc2hvcnQgY2x1c3Rlcl9zaXplOyAgCgl1bnNp
Z25lZCBzaG9ydCBjbHVzdGVyX2JpdHM7ICAKCXVuc2lnbmVkIGNoYXIgZmF0cyxmYXRfYml0czsg
IAoJdW5zaWduZWQgc2hvcnQgZmF0X3N0YXJ0OwoJdW5zaWduZWQgbG9uZyBmYXRfbGVuZ3RoOyAg
ICAgCgl1bnNpZ25lZCBsb25nIGRpcl9zdGFydDsKCXVuc2lnbmVkIHNob3J0IGRpcl9lbnRyaWVz
OyAgIAoJdW5zaWduZWQgbG9uZyBkYXRhX3N0YXJ0OyAgICAgCgl1bnNpZ25lZCBsb25nIGNsdXN0
ZXJzOyAgICAgICAKCXVuc2lnbmVkIGxvbmcgcm9vdF9jbHVzdGVyOyAgIAoJdW5zaWduZWQgbG9u
ZyBmc2luZm9fc2VjdG9yOyAgCglzdHJ1Y3Qgc2VtYXBob3JlIGZhdF9sb2NrOwoJaW50IHByZXZf
ZnJlZTsgICAgICAgICAgICAgICAgCglpbnQgZnJlZV9jbHVzdGVyczsgICAgICAgICAgICAKCXN0
cnVjdCBmYXRfbW91bnRfb3B0aW9ucyBvcHRpb25zOwoJc3RydWN0IG5sc190YWJsZSAqbmxzX2Rp
c2s7ICAgCglzdHJ1Y3QgbmxzX3RhYmxlICpubHNfaW87ICAgICAKCXN0cnVjdCBjdmZfZm9ybWF0
KiBjdmZfZm9ybWF0OwoJdm9pZCAqZGlyX29wczsJCSAgICAgIAoJdm9pZCAqcHJpdmF0ZV9kYXRh
OwoJaW50IGRpcl9wZXJfYmxvY2s7CSAgICAgIAoJaW50IGRpcl9wZXJfYmxvY2tfYml0czsJICAg
ICAgCn07CgoKIyA2NzQgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0y
LjQueC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJ
TlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvaXNvX2ZzX3NiLmgiIDEKCgoKIAoK
CnN0cnVjdCBpc29mc19zYl9pbmZvIHsKCXVuc2lnbmVkIGxvbmcgc19uaW5vZGVzOwoJdW5zaWdu
ZWQgbG9uZyBzX256b25lczsKCXVuc2lnbmVkIGxvbmcgc19maXJzdGRhdGF6b25lOwoJdW5zaWdu
ZWQgbG9uZyBzX2xvZ196b25lX3NpemU7Cgl1bnNpZ25lZCBsb25nIHNfbWF4X3NpemU7CgkKCXVu
c2lnbmVkIGNoYXIgc19oaWdoX3NpZXJyYTsgIAoJdW5zaWduZWQgY2hhciBzX21hcHBpbmc7Cglp
bnQgICAgICAgICAgIHNfcm9ja19vZmZzZXQ7ICAKCXVuc2lnbmVkIGNoYXIgc19yb2NrOwoJdW5z
aWduZWQgY2hhciBzX2pvbGlldF9sZXZlbDsKCXVuc2lnbmVkIGNoYXIgc191dGY4OwoJdW5zaWdu
ZWQgY2hhciBzX2NydWZ0OyAgCgoKCXVuc2lnbmVkIGNoYXIgc191bmhpZGU7Cgl1bnNpZ25lZCBj
aGFyIHNfbm9zdWlkOwoJdW5zaWduZWQgY2hhciBzX25vZGV2OwoJdW5zaWduZWQgY2hhciBzX25v
Y29tcHJlc3M7CgoJbW9kZV90IHNfbW9kZTsKCWdpZF90IHNfZ2lkOwoJdWlkX3Qgc191aWQ7Cglz
dHJ1Y3QgbmxzX3RhYmxlICpzX25sc19pb2NoYXJzZXQ7ICAKfTsKCgojIDY3NSAiL2hvbWUvY2Fy
bG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvZnMuaCIg
MgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5j
bHVkZS9saW51eC9uZnNfZnNfc2IuaCIgMQoKCgoKCiAKCgpzdHJ1Y3QgbmZzX3NlcnZlciB7Cglz
dHJ1Y3QgcnBjX2NsbnQgKgljbGllbnQ7CQkgCglzdHJ1Y3QgbmZzX3JwY19vcHMgKglycGNfb3Bz
OwkgCglpbnQJCQlmbGFnczsJCSAKCXVuc2lnbmVkIGludAkJcnNpemU7CQkgCgl1bnNpZ25lZCBp
bnQJCXJwYWdlczsJCSAKCXVuc2lnbmVkIGludAkJd3NpemU7CQkgCgl1bnNpZ25lZCBpbnQJCXdw
YWdlczsJCSAKCXVuc2lnbmVkIGludAkJZHRzaXplOwkJIAoJdW5zaWduZWQgaW50CQlic2l6ZTsJ
CSAKCXVuc2lnbmVkIGludAkJYWNyZWdtaW47CSAKCXVuc2lnbmVkIGludAkJYWNyZWdtYXg7Cgl1
bnNpZ25lZCBpbnQJCWFjZGlybWluOwoJdW5zaWduZWQgaW50CQlhY2Rpcm1heDsKCXVuc2lnbmVk
IGludAkJbmFtZWxlbjsKCWNoYXIgKgkJCWhvc3RuYW1lOwkgCglzdHJ1Y3QgbmZzX3JlcWxpc3Qg
Kglyd19yZXF1ZXN0czsJIAoJc3RydWN0IGxpc3RfaGVhZAlscnVfcmVhZCwKCQkJCWxydV9kaXJ0
eSwKCQkJCWxydV9jb21taXQsCgkJCQlscnVfYnVzeTsKfTsKCiAKCgpzdHJ1Y3QgbmZzX3NiX2lu
Zm8gewoJc3RydWN0IG5mc19zZXJ2ZXIJc19zZXJ2ZXI7Cn07CgoKIyA2NzYgIi9ob21lL2Nhcmxv
cy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIK
CiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1
ZGUvbGludXgvc3lzdl9mc19zYi5oIiAxCgoKCiAKCgoKCgoKCgpzdHJ1Y3Qgc3lzdl9zYl9pbmZv
IHsKCWludAkgICAgICAgc190eXBlOwkJIAoJY2hhcgkgICAgICAgc19ieXRlc2V4OwkgCgljaGFy
CSAgICAgICBzX3RydW5jYXRlOwkgCgkJCQkJIAoJbmxpbmtfdCAgICAgICAgc19saW5rX21heDsJ
IAoJdW5zaWduZWQgaW50ICAgc19pbm9kZXNfcGVyX2Jsb2NrOwkgCgl1bnNpZ25lZCBpbnQgICBz
X2lub2Rlc19wZXJfYmxvY2tfMTsJIAoJdW5zaWduZWQgaW50ICAgc19pbm9kZXNfcGVyX2Jsb2Nr
X2JpdHM7CSAKCXVuc2lnbmVkIGludCAgIHNfaW5kX3Blcl9ibG9jazsJCSAKCXVuc2lnbmVkIGlu
dCAgIHNfaW5kX3Blcl9ibG9ja19iaXRzOwkgCgl1bnNpZ25lZCBpbnQgICBzX2luZF9wZXJfYmxv
Y2tfMjsJIAoJdW5zaWduZWQgaW50ICAgc190b29iaWdfYmxvY2s7CQkgCgl1bnNpZ25lZCBpbnQg
ICBzX2Jsb2NrX2Jhc2U7CSAKCXVuc2lnbmVkIHNob3J0IHNfZmljX3NpemU7CSAKCXVuc2lnbmVk
IHNob3J0IHNfZmxjX3NpemU7CSAKCSAKCXN0cnVjdCBidWZmZXJfaGVhZCAqc19iaDE7CglzdHJ1
Y3QgYnVmZmVyX2hlYWQgKnNfYmgyOwoJIAoKCWNoYXIgKiAgICAgICAgIHNfc2JkMTsJCSAKCWNo
YXIgKiAgICAgICAgIHNfc2JkMjsJCSAKCXUxNiAgICAgICAgICAgICpzX3NiX2ZpY19jb3VudDsJ
IAogICAgICAgIHUxNiAgICAgICAgICAgICpzX3NiX2ZpY19pbm9kZXM7ICAKCXUxNiAgICAgICAg
ICAgICpzX3NiX3RvdGFsX2ZyZWVfaW5vZGVzOyAgCgl1MTYgICAgICAgICAgICAqc19iY2FjaGVf
Y291bnQ7CSAKCXUzMgkgICAgICAgKnNfYmNhY2hlOwkgCgl1MzIgICAgICAgICAgICAqc19mcmVl
X2Jsb2NrczsJIAoJdTMyICAgICAgICAgICAgKnNfc2JfdGltZTsJIAoJdTMyICAgICAgICAgICAg
KnNfc2Jfc3RhdGU7CSAKCSAKCgl1MzIgICAgICAgICAgICBzX2ZpcnN0aW5vZGV6b25lOyAgCgl1
MzIgICAgICAgICAgICBzX2ZpcnN0ZGF0YXpvbmU7CSAKCXUzMiAgICAgICAgICAgIHNfbmlub2Rl
czsJIAoJdTMyICAgICAgICAgICAgc19uZGF0YXpvbmVzOwkgCgl1MzIgICAgICAgICAgICBzX256
b25lczsJIAoJdTE2CSAgICAgICBzX25hbWVsZW47ICAgICAgICAKfTsKIAoKIAoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA2NzcgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5V
WC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCiMgMSAiL2hvbWUvY2Fy
bG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvYWZmc19m
c19zYi5oIiAxCgoKCiAKCgoKCgoKc3RydWN0IGFmZnNfYm1faW5mbyB7Cgl1MzIgYm1fa2V5OwkJ
CSAKCXUzMiBibV9mcmVlOwkJCSAKfTsKCnN0cnVjdCBhZmZzX3NiX2luZm8gewoJaW50IHNfcGFy
dGl0aW9uX3NpemU7CQkgCglpbnQgc19yZXNlcnZlZDsJCQkgCgkgCgl1MzIgc19kYXRhX2Jsa3Np
emU7CQkgCgl1MzIgc19yb290X2Jsb2NrOwkJIAoJaW50IHNfaGFzaHNpemU7CQkJIAoJdW5zaWdu
ZWQgbG9uZyBzX2ZsYWdzOwkJIAoJdWlkX3Qgc191aWQ7CQkJIAoJZ2lkX3Qgc19naWQ7CQkJIAoJ
dW1vZGVfdCBzX21vZGU7CQkJIAoJc3RydWN0IGJ1ZmZlcl9oZWFkICpzX3Jvb3RfYmg7CSAKCXN0
cnVjdCBzZW1hcGhvcmUgc19ibWxvY2s7CSAKCXN0cnVjdCBhZmZzX2JtX2luZm8gKnNfYml0bWFw
OwkgCgl1MzIgc19ibWFwX2NvdW50OwkJIAoJdTMyIHNfYm1hcF9iaXRzOwkJIAoJdTMyIHNfbGFz
dF9ibWFwOwoJc3RydWN0IGJ1ZmZlcl9oZWFkICpzX2JtYXBfYmg7CgljaGFyICpzX3ByZWZpeDsJ
CQkgCglpbnQgc19wcmVmaXhfbGVuOwkJIAoJY2hhciBzX3ZvbHVtZVszMl07CQkgCn07CgoKCgoK
CgoKCgoKCgoKIAoKCgojIDY3OCAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xp
bnV4LTIuNC54L2luY2x1ZGUvbGludXgvZnMuaCIgMgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRz
L1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC91ZnNfZnNfc2IuaCIgMQog
CgoKCgoKCgoKCgoKCgoKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xp
bnV4LTIuNC54L2luY2x1ZGUvbGludXgvdWZzX2ZzLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCiAKCgoKIAoKCgoKIAoKCgoKCiAKCgoKCgogCgoKCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgogICAgICAgICAgICAKIAoKCgoKCgog
CgoKCgoKCgoKCgogCgoKCgoKCgoKCgogCgoKCgoKCiAKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKIAoKCgoKCgoKc3RydWN0IHVmc190aW1ldmFsIHsKCV9fczMyCXR2X3NlYzsKCV9f
czMyCXR2X3VzZWM7Cn07CgpzdHJ1Y3QgdWZzX2Rpcl9lbnRyeSB7CglfX3UzMiAgZF9pbm87CQkJ
IAoJX191MTYgIGRfcmVjbGVuOwkJIAoJdW5pb24gewoJCV9fdTE2CWRfbmFtbGVuOwkJIAoJCXN0
cnVjdCB7CgkJCV9fdTgJZF90eXBlOwkJIAoJCQlfX3U4CWRfbmFtbGVuOwkgCgkJfSBkXzQ0OwoJ
fSBkX3U7CglfX3U4CWRfbmFtZVsyNTUgICsgMV07CSAKfTsKCnN0cnVjdCB1ZnNfY3N1bSB7Cglf
X3UzMgljc19uZGlyOwkgCglfX3UzMgljc19uYmZyZWU7CSAKCV9fdTMyCWNzX25pZnJlZTsJIAoJ
X191MzIJY3NfbmZmcmVlOwkgCn07CgogCgoKc3RydWN0IHVmc19zdXBlcl9ibG9jayB7CglfX3Uz
Mglmc19saW5rOwkgCglfX3UzMglmc19ybGluazsJIAoJX191MzIJZnNfc2Jsa25vOwkgCglfX3Uz
Mglmc19jYmxrbm87CSAKCV9fdTMyCWZzX2libGtubzsJIAoJX191MzIJZnNfZGJsa25vOwkgCglf
X3UzMglmc19jZ29mZnNldDsJIAoJX191MzIJZnNfY2dtYXNrOwkgCglfX3UzMglmc190aW1lOwkg
CglfX3UzMglmc19zaXplOwkgCglfX3UzMglmc19kc2l6ZTsJIAoJX191MzIJZnNfbmNnOwkJIAoJ
X191MzIJZnNfYnNpemU7CSAKCV9fdTMyCWZzX2ZzaXplOwkgCglfX3UzMglmc19mcmFnOwkgCiAK
CV9fdTMyCWZzX21pbmZyZWU7CSAKCV9fdTMyCWZzX3JvdGRlbGF5OwkgCglfX3UzMglmc19ycHM7
CQkgCiAKCV9fdTMyCWZzX2JtYXNrOwkgCglfX3UzMglmc19mbWFzazsJIAoJX191MzIJZnNfYnNo
aWZ0OwkgCglfX3UzMglmc19mc2hpZnQ7CSAKIAoJX191MzIJZnNfbWF4Y29udGlnOwkgCglfX3Uz
Mglmc19tYXhicGc7CSAKIAoJX191MzIJZnNfZnJhZ3NoaWZ0OwkgCglfX3UzMglmc19mc2J0b2Ri
OwkgCglfX3UzMglmc19zYnNpemU7CSAKCV9fdTMyCWZzX2NzbWFzazsJIAoJX191MzIJZnNfY3Nz
aGlmdDsJIAoJX191MzIJZnNfbmluZGlyOwkgCglfX3UzMglmc19pbm9wYjsJIAoJX191MzIJZnNf
bnNwZjsJIAogCglfX3UzMglmc19vcHRpbTsJIAogCgl1bmlvbiB7CgkJc3RydWN0IHsKCQkJX191
MzIJZnNfbnBzZWN0OwkgCgkJfSBmc19zdW47CgkJc3RydWN0IHsKCQkJX19zMzIJZnNfc3RhdGU7
CSAKCQl9IGZzX3N1bng4NjsKCX0gZnNfdTE7CglfX3UzMglmc19pbnRlcmxlYXZlOwkgCglfX3Uz
Mglmc190cmFja3NrZXc7CSAKIAogCiAKIAoJX191MzIJZnNfaWRbMl07CSAKIAoJX191MzIJZnNf
Y3NhZGRyOwkgCglfX3UzMglmc19jc3NpemU7CSAKCV9fdTMyCWZzX2Nnc2l6ZTsJIAogCglfX3Uz
Mglmc19udHJhazsJIAoJX191MzIJZnNfbnNlY3Q7CSAKCV9fdTMyCWZzX3NwYzsJCSAKIAoJX191
MzIJZnNfbmN5bDsJIAogCglfX3UzMglmc19jcGc7CQkgCglfX3UzMglmc19pcGc7CQkgCglfX3Uz
Mglmc19mcGc7CQkgCiAKCXN0cnVjdCB1ZnNfY3N1bSBmc19jc3RvdGFsOwkgCiAKCV9fczgJZnNf
Zm1vZDsJIAoJX19zOAlmc19jbGVhbjsJIAoJX19zOAlmc19yb25seTsJIAoJX19zOAlmc19mbGFn
czsJIAoJX19zOAlmc19mc21udFs1MTIgXTsJIAogCglfX3UzMglmc19jZ3JvdG9yOwkgCglfX3Uz
Mglmc19jc3BbMzEgXTsJIAoJX191MzIJZnNfbWF4Y2x1c3RlcjsKCV9fdTMyCWZzX2NwYzsJCSAK
CV9fdTE2CWZzX29wb3N0YmxbMTZdWzhdOwkgCQoJdW5pb24gewoJCXN0cnVjdCB7CgkJCV9fczMy
CWZzX3NwYXJlY29uWzUzXTsgCgkJCV9fczMyCWZzX3JlY2xhaW07CgkJCV9fczMyCWZzX3NwYXJl
Y29uMlsxXTsKCQkJX19zMzIJZnNfc3RhdGU7CSAKCQkJX191MzIJZnNfcWJtYXNrWzJdOwkgCgkJ
CV9fdTMyCWZzX3FmbWFza1syXTsJIAoJCX0gZnNfc3VuOwoJCXN0cnVjdCB7CgkJCV9fczMyCWZz
X3NwYXJlY29uWzUzXTsgCgkJCV9fczMyCWZzX3JlY2xhaW07CgkJCV9fczMyCWZzX3NwYXJlY29u
MlsxXTsKCQkJX191MzIJZnNfbnBzZWN0OwkgCgkJCV9fdTMyCWZzX3FibWFza1syXTsJIAoJCQlf
X3UzMglmc19xZm1hc2tbMl07CSAKCQl9IGZzX3N1bng4NjsKCQlzdHJ1Y3QgewoJCQlfX3MzMglm
c19zcGFyZWNvbls1MF07IAoJCQlfX3MzMglmc19jb250aWdzdW1zaXplOyAKCQkJX19zMzIJZnNf
bWF4c3ltbGlua2xlbjsgCgkJCV9fczMyCWZzX2lub2RlZm10OwkgCgkJCV9fdTMyCWZzX21heGZp
bGVzaXplWzJdOwkgCgkJCV9fdTMyCWZzX3FibWFza1syXTsJIAoJCQlfX3UzMglmc19xZm1hc2tb
Ml07CSAKCQkJX19zMzIJZnNfc3RhdGU7CSAKCQl9IGZzXzQ0OwoJfSBmc191MjsKCV9fczMyCWZz
X3Bvc3RibGZvcm1hdDsJIAoJX19zMzIJZnNfbnJwb3M7CQkgCglfX3MzMglmc19wb3N0YmxvZmY7
CQkgCglfX3MzMglmc19yb3RibG9mZjsJCSAKCV9fczMyCWZzX21hZ2ljOwkJIAoJX191OAlmc19z
cGFjZVsxXTsJCSAKfTsKCiAKCgoKCgogCgoKCgoKIAoKCgoKCiAKCgoKCgoKCgoKIAoKCnN0cnVj
dAl1ZnNfY3lsaW5kZXJfZ3JvdXAgewoJX191MzIJY2dfbGluazsJCSAKCV9fdTMyCWNnX21hZ2lj
OwkJIAoJX191MzIJY2dfdGltZTsJCSAKCV9fdTMyCWNnX2NneDsJCQkgCglfX3UxNgljZ19uY3ls
OwkJIAoJX191MTYJY2dfbmlibGs7CQkgCglfX3UzMgljZ19uZGJsazsJCSAKCXN0cnVjdAl1ZnNf
Y3N1bSBjZ19jczsJCSAKCV9fdTMyCWNnX3JvdG9yOwkJIAoJX191MzIJY2dfZnJvdG9yOwkJIAoJ
X191MzIJY2dfaXJvdG9yOwkJIAoJX191MzIJY2dfZnJzdW1bKDgxOTIgIC8gMTAyNCApIF07CSAK
CV9fdTMyCWNnX2J0b3RvZmY7CQkgCglfX3UzMgljZ19ib2ZmOwkJIAoJX191MzIJY2dfaXVzZWRv
ZmY7CQkgCglfX3UzMgljZ19mcmVlb2ZmOwkJIAoJX191MzIJY2dfbmV4dGZyZWVvZmY7CQkgCgl1
bmlvbiB7CgkJc3RydWN0IHsKCQkJX191MzIJY2dfY2x1c3RlcnN1bW9mZjsJIAoJCQlfX3UzMglj
Z19jbHVzdGVyb2ZmOwkJIAoJCQlfX3UzMgljZ19uY2x1c3RlcmJsa3M7CSAKCQkJX191MzIJY2df
c3BhcmVjb25bMTNdOwkgCgkJfSBjZ180NDsKCQlfX3UzMgljZ19zcGFyZWNvblsxNl07CSAKCX0g
Y2dfdTsKCV9fdTgJY2dfc3BhY2VbMV07CQkgCiAKfTsKCiAKCgpzdHJ1Y3QgdWZzX2lub2RlIHsK
CV9fdTE2CXVpX21vZGU7CQkgCglfX3UxNgl1aV9ubGluazsJCSAKCXVuaW9uIHsKCQlzdHJ1Y3Qg
ewoJCQlfX3UxNgl1aV9zdWlkOwkgCgkJCV9fdTE2CXVpX3NnaWQ7CSAKCQl9IG9sZGlkczsKCQlf
X3UzMgl1aV9pbnVtYmVyOwkJIAoJCV9fdTMyCXVpX2F1dGhvcjsJCSAKCX0gdWlfdTE7CglfX3U2
NAl1aV9zaXplOwkJIAoJc3RydWN0IHVmc190aW1ldmFsIHVpX2F0aW1lOwkgCglzdHJ1Y3QgdWZz
X3RpbWV2YWwgdWlfbXRpbWU7CSAKCXN0cnVjdCB1ZnNfdGltZXZhbCB1aV9jdGltZTsJIAoJdW5p
b24gewoJCXN0cnVjdCB7CgkJCV9fdTMyCXVpX2RiWzEyIF07IAoJCQlfX3UzMgl1aV9pYlszIF07
IAoJCX0gdWlfYWRkcjsKCQlfX3U4CXVpX3N5bWxpbmtbNCooMTIgKyAzICldOyAKCX0gdWlfdTI7
CglfX3UzMgl1aV9mbGFnczsJCSAKCV9fdTMyCXVpX2Jsb2NrczsJCSAKCV9fdTMyCXVpX2dlbjsJ
CQkgCgl1bmlvbiB7CgkJc3RydWN0IHsKCQkJX191MzIJdWlfc2hhZG93OwkgCgkJCV9fdTMyCXVp
X3VpZDsJCSAKCQkJX191MzIJdWlfZ2lkOwkJIAoJCQlfX3UzMgl1aV9vZWZ0ZmxhZzsJIAoJCX0g
dWlfc3VuOwoJCXN0cnVjdCB7CgkJCV9fdTMyCXVpX3VpZDsJCSAKCQkJX191MzIJdWlfZ2lkOwkJ
IAoJCQlfX3MzMgl1aV9zcGFyZVsyXTsJIAoJCX0gdWlfNDQ7CgkJc3RydWN0IHsKCQkJX191MzIJ
dWlfdWlkOwkJIAoJCQlfX3UzMgl1aV9naWQ7CQkgCgkJCV9fdTE2CXVpX21vZGVoOwkgCgkJCV9f
dTE2CXVpX3NwYXJlOwkgCgkJCV9fdTMyCXVpX3RyYW5zOwkgCgkJfSB1aV9odXJkOwoJfSB1aV91
MzsKfTsKCiAKIAoKCgoKCgogCgoKCgoKCgoKIApleHRlcm4gdm9pZCB1ZnNfZnJlZV9mcmFnbWVu
dHMgKHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25lZCwgdW5zaWduZWQpOwpleHRlcm4gdm9pZCB1ZnNf
ZnJlZV9ibG9ja3MgKHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25lZCwgdW5zaWduZWQpOwpleHRlcm4g
dW5zaWduZWQgdWZzX25ld19mcmFnbWVudHMgKHN0cnVjdCBpbm9kZSAqLCB1MzIgKiwgdW5zaWdu
ZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgaW50ICopOwoKIApleHRlcm4gc3RydWN0IHVmc19jZ19w
cml2YXRlX2luZm8gKiB1ZnNfbG9hZF9jeWxpbmRlciAoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVu
c2lnbmVkKTsKZXh0ZXJuIHZvaWQgdWZzX3B1dF9jeWxpbmRlciAoc3RydWN0IHN1cGVyX2Jsb2Nr
ICosIHVuc2lnbmVkKTsKCiAKZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHVmc19kaXJf
aW5vZGVfb3BlcmF0aW9uczsKZXh0ZXJuIGludCB1ZnNfY2hlY2tfZGlyX2VudHJ5IChjb25zdCBj
aGFyICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgdWZzX2Rpcl9lbnRyeSAqLCBzdHJ1Y3QgYnVm
ZmVyX2hlYWQgKiwgdW5zaWduZWQgbG9uZyk7CmV4dGVybiBpbnQgdWZzX2FkZF9saW5rIChzdHJ1
Y3QgZGVudHJ5ICosIHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJuIGlub190IHVmc19pbm9kZV9ieV9u
YW1lKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICopOwpleHRlcm4gaW50IHVmc19tYWtl
X2VtcHR5KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKik7CmV4dGVybiBzdHJ1Y3QgdWZz
X2Rpcl9lbnRyeSAqIHVmc19maW5kX2VudHJ5IChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBidWZm
ZXJfaGVhZCAqKik7CmV4dGVybiBpbnQgdWZzX2RlbGV0ZV9lbnRyeSAoc3RydWN0IGlub2RlICos
IHN0cnVjdCB1ZnNfZGlyX2VudHJ5ICosIHN0cnVjdCBidWZmZXJfaGVhZCAqKTsKZXh0ZXJuIGlu
dCB1ZnNfZW1wdHlfZGlyIChzdHJ1Y3QgaW5vZGUgKik7CmV4dGVybiBzdHJ1Y3QgdWZzX2Rpcl9l
bnRyeSAqIHVmc19kb3Rkb3QgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiop
OwpleHRlcm4gdm9pZCB1ZnNfc2V0X2xpbmsoc3RydWN0IGlub2RlICosIHN0cnVjdCB1ZnNfZGly
X2VudHJ5ICosIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBzdHJ1Y3QgaW5vZGUgKik7CgogCmV4dGVy
biBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB1ZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zOwpleHRl
cm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1ZnNfZmlsZV9vcGVyYXRpb25zOwoKZXh0ZXJuIHN0
cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgdWZzX2FvcHM7CgogCmV4dGVybiB2b2lkIHVm
c19mcmVlX2lub2RlIChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKZXh0ZXJuIHN0cnVjdCBpbm9kZSAq
IHVmc19uZXdfaW5vZGUgKGNvbnN0IHN0cnVjdCBpbm9kZSAqLCBpbnQpOwoKIApleHRlcm4gaW50
IHVmc19mcmFnX21hcCAoc3RydWN0IGlub2RlICosIGludCk7CmV4dGVybiB2b2lkIHVmc19yZWFk
X2lub2RlIChzdHJ1Y3QgaW5vZGUgKik7CmV4dGVybiB2b2lkIHVmc19wdXRfaW5vZGUgKHN0cnVj
dCBpbm9kZSAqKTsKZXh0ZXJuIHZvaWQgdWZzX3dyaXRlX2lub2RlIChzdHJ1Y3QgaW5vZGUgKiwg
aW50KTsKZXh0ZXJuIGludCB1ZnNfc3luY19pbm9kZSAoc3RydWN0IGlub2RlICopOwpleHRlcm4g
dm9pZCB1ZnNfZGVsZXRlX2lub2RlIChzdHJ1Y3QgaW5vZGUgKik7CmV4dGVybiBzdHJ1Y3QgYnVm
ZmVyX2hlYWQgKiB1ZnNfZ2V0ZnJhZyAoc3RydWN0IGlub2RlICosIHVuc2lnbmVkLCBpbnQsIGlu
dCAqKTsKZXh0ZXJuIHN0cnVjdCBidWZmZXJfaGVhZCAqIHVmc19icmVhZCAoc3RydWN0IGlub2Rl
ICosIHVuc2lnbmVkLCBpbnQsIGludCAqKTsKCiAKZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlv
bnMgdWZzX2Rpcl9vcGVyYXRpb25zOwogICAgICAgIAogCmV4dGVybiBzdHJ1Y3QgZmlsZV9zeXN0
ZW1fdHlwZSB1ZnNfZnNfdHlwZTsKZXh0ZXJuIHZvaWQgdWZzX3dhcm5pbmcgKHN0cnVjdCBzdXBl
cl9ibG9jayAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKSBfX2F0dHJpYnV0ZV9f
ICgoZm9ybWF0IChwcmludGYsIDMsIDQpKSk7CmV4dGVybiB2b2lkIHVmc19lcnJvciAoc3RydWN0
IHN1cGVyX2Jsb2NrICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pIF9fYXR0cmli
dXRlX18gKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKTsKZXh0ZXJuIHZvaWQgdWZzX3BhbmljIChz
dHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLikgX19h
dHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpOwpleHRlcm4gdm9pZCB1ZnNfd3Jp
dGVfc3VwZXIgKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKCiAKZXh0ZXJuIHN0cnVjdCBpbm9kZV9v
cGVyYXRpb25zIHVmc19mYXN0X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKCiAKZXh0ZXJuIHZv
aWQgdWZzX3RydW5jYXRlIChzdHJ1Y3QgaW5vZGUgKik7CgoKCgojIDE3ICIvaG9tZS9jYXJsb3Mv
QnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC91ZnNfZnNfc2Iu
aCIgMgoKCiAKCgoKc3RydWN0IHVmc19idWZmZXJfaGVhZCB7Cgl1bnNpZ25lZCBmcmFnbWVudDsJ
CQkgCgl1bnNpZ25lZCBjb3VudDsJCQkJIAoJc3RydWN0IGJ1ZmZlcl9oZWFkICogYmhbKDgxOTIg
IC8gMTAyNCApIF07CSAKfTsKCnN0cnVjdCB1ZnNfY2dfcHJpdmF0ZV9pbmZvIHsKCXN0cnVjdCB1
ZnNfY3lsaW5kZXJfZ3JvdXAgdWNnOwoJX191MzIJY19jZ3g7CQkgCglfX3UxNgljX25jeWw7CQkg
CglfX3UxNgljX25pYmxrOwkgCglfX3UzMgljX25kYmxrOwkgCglfX3UzMgljX3JvdG9yOwkgCglf
X3UzMgljX2Zyb3RvcjsJIAoJX191MzIJY19pcm90b3I7CSAKCV9fdTMyCWNfYnRvdG9mZjsJIAoJ
X191MzIJY19ib2ZmOwkJIAoJX191MzIJY19pdXNlZG9mZjsJIAoJX191MzIJY19mcmVlb2ZmOwkg
CglfX3UzMgljX25leHRmcmVlb2ZmOwkgCglfX3UzMgljX2NsdXN0ZXJzdW1vZmY7IAoJX191MzIJ
Y19jbHVzdGVyb2ZmOwkgCglfX3UzMgljX25jbHVzdGVyYmxrczsJIAp9OwkKCnN0cnVjdCB1ZnNf
c2JfcHJpdmF0ZV9pbmZvIHsKCXN0cnVjdCB1ZnNfYnVmZmVyX2hlYWQgc191Ymg7ICAKCV9fdTMy
CXNfc2Jsa25vOwkgCglfX3UzMglzX2NibGtubzsJIAoJX191MzIJc19pYmxrbm87CSAKCV9fdTMy
CXNfZGJsa25vOwkgCglfX3UzMglzX2Nnb2Zmc2V0OwkgCglfX3UzMglzX2NnbWFzazsJIAoJX191
MzIJc19zaXplOwkJIAoJX191MzIJc19kc2l6ZTsJIAoJX191MzIJc19uY2c7CQkgCglfX3UzMglz
X2JzaXplOwkgCglfX3UzMglzX2ZzaXplOwkgCglfX3UzMglzX2ZwYjsJCSAKCV9fdTMyCXNfbWlu
ZnJlZTsJIAoJX191MzIJc19ibWFzazsJIAoJX191MzIJc19mbWFzazsJIAoJX191MzIJc19ic2hp
ZnQ7CSAKCV9fdTMyICAgc19mc2hpZnQ7CSAKCV9fdTMyCXNfZnBic2hpZnQ7CSAKCV9fdTMyCXNf
ZnNidG9kYjsJIAoJX191MzIJc19zYnNpemU7CSAKCV9fdTMyICAgc19jc21hc2s7CSAKCV9fdTMy
CXNfY3NzaGlmdDsJIAoJX191MzIJc19uaW5kaXI7CSAKCV9fdTMyCXNfaW5vcGI7CSAKCV9fdTMy
CXNfbnNwZjsJCSAKCV9fdTMyCXNfbnBzZWN0OwkgCglfX3UzMglzX2ludGVybGVhdmU7CSAKCV9f
dTMyCXNfdHJhY2tza2V3OwkgCglfX3UzMglzX2NzYWRkcjsJIAoJX191MzIJc19jc3NpemU7CSAK
CV9fdTMyCXNfY2dzaXplOwkgCglfX3UzMglzX250cmFrOwkgCglfX3UzMglzX25zZWN0OwkgCglf
X3UzMglzX3NwYzsJCSAKCV9fdTMyCXNfaXBnOwkJIAoJX191MzIJc19mcGc7CQkgCglfX3UzMglz
X2NwYzsJCSAKCV9fczMyCXNfY29udGlnc3Vtc2l6ZTsgCglfX3M2NAlzX3FibWFzazsJIAoJX19z
NjQJc19xZm1hc2s7CSAKCV9fczMyCXNfcG9zdGJsZm9ybWF0OwkgCglfX3MzMglzX25ycG9zOwkg
CiAgICAgICAgX19zMzIJc19wb3N0YmxvZmY7CSAKCV9fczMyCXNfcm90YmxvZmY7CSAKCglfX3Uz
MglzX2ZwYm1hc2s7CSAKCV9fdTMyCXNfYXBiOwkJIAoJX191MzIJc18yYXBiOwkJIAoJX191MzIJ
c18zYXBiOwkJIAoJX191MzIJc19hcGJtYXNrOwkgCglfX3UzMglzX2FwYnNoaWZ0OwkgCglfX3Uz
MglzXzJhcGJzaGlmdDsJIAoJX191MzIJc18zYXBic2hpZnQ7CSAKCV9fdTMyCXNfbnNwZnNoaWZ0
OwkgCglfX3UzMglzX25zcGI7CQkgCglfX3UzMglzX2lub3BmOwkgCglfX3UzMglzX3NiYmFzZTsJ
IAoJX191MzIJc19icGY7CQkgCglfX3UzMglzX2JwZnNoaWZ0OwkgCglfX3UzMglzX2JwZm1hc2s7
CSAKCglfX3UzMglzX21heHN5bWxpbmtsZW47IAp9OwoKCgoKCnN0cnVjdCB1ZnNfc2JfaW5mbyB7
CglzdHJ1Y3QgdWZzX3NiX3ByaXZhdGVfaW5mbyAqIHNfdXNwaTsJCglzdHJ1Y3QgdWZzX2NzdW0J
KiBzX2NzcFszMSBdOwoJdW5zaWduZWQgc19ieXRlc2V4OwoJdW5zaWduZWQgc19mbGFnczsKCXN0
cnVjdCBidWZmZXJfaGVhZCAqKiBzX3VjZzsKCXN0cnVjdCB1ZnNfY2dfcHJpdmF0ZV9pbmZvICog
c191Y3BpWzggXTsgCgl1bnNpZ25lZCBzX2Nnbm9bOCBdOwoJdW5zaWduZWQgc2hvcnQgc19jZ19s
b2FkZWQ7Cgl1bnNpZ25lZCBzX21vdW50X29wdDsKfTsKCiAKCgoKCgpzdHJ1Y3QgdWZzX3N1cGVy
X2Jsb2NrX2ZpcnN0IHsKCV9fdTMyCWZzX2xpbms7CglfX3UzMglmc19ybGluazsKCV9fdTMyCWZz
X3NibGtubzsKCV9fdTMyCWZzX2NibGtubzsKCV9fdTMyCWZzX2libGtubzsKCV9fdTMyCWZzX2Ri
bGtubzsKCV9fdTMyCWZzX2Nnb2Zmc2V0OwoJX191MzIJZnNfY2dtYXNrOwoJX191MzIJZnNfdGlt
ZTsKCV9fdTMyCWZzX3NpemU7CglfX3UzMglmc19kc2l6ZTsKCV9fdTMyCWZzX25jZzsKCV9fdTMy
CWZzX2JzaXplOwoJX191MzIJZnNfZnNpemU7CglfX3UzMglmc19mcmFnOwoJX191MzIJZnNfbWlu
ZnJlZTsKCV9fdTMyCWZzX3JvdGRlbGF5OwoJX191MzIJZnNfcnBzOwoJX191MzIJZnNfYm1hc2s7
CglfX3UzMglmc19mbWFzazsKCV9fdTMyCWZzX2JzaGlmdDsKCV9fdTMyCWZzX2ZzaGlmdDsKCV9f
dTMyCWZzX21heGNvbnRpZzsKCV9fdTMyCWZzX21heGJwZzsKCV9fdTMyCWZzX2ZyYWdzaGlmdDsK
CV9fdTMyCWZzX2ZzYnRvZGI7CglfX3UzMglmc19zYnNpemU7CglfX3UzMglmc19jc21hc2s7Cglf
X3UzMglmc19jc3NoaWZ0OwoJX191MzIJZnNfbmluZGlyOwoJX191MzIJZnNfaW5vcGI7CglfX3Uz
Mglmc19uc3BmOwoJX191MzIJZnNfb3B0aW07Cgl1bmlvbiB7CgkJc3RydWN0IHsKCQkJX191MzIJ
ZnNfbnBzZWN0OwoJCX0gZnNfc3VuOwoJCXN0cnVjdCB7CgkJCV9fczMyCWZzX3N0YXRlOwoJCX0g
ZnNfc3VueDg2OwoJfSBmc191MTsKCV9fdTMyCWZzX2ludGVybGVhdmU7CglfX3UzMglmc190cmFj
a3NrZXc7CglfX3UzMglmc19pZFsyXTsKCV9fdTMyCWZzX2NzYWRkcjsKCV9fdTMyCWZzX2Nzc2l6
ZTsKCV9fdTMyCWZzX2Nnc2l6ZTsKCV9fdTMyCWZzX250cmFrOwoJX191MzIJZnNfbnNlY3Q7Cglf
X3UzMglmc19zcGM7CglfX3UzMglmc19uY3lsOwoJX191MzIJZnNfY3BnOwoJX191MzIJZnNfaXBn
OwoJX191MzIJZnNfZnBnOwoJc3RydWN0IHVmc19jc3VtIGZzX2NzdG90YWw7CglfX3M4CWZzX2Zt
b2Q7CglfX3M4CWZzX2NsZWFuOwoJX19zOAlmc19yb25seTsKCV9fczgJZnNfZmxhZ3M7CglfX3M4
CWZzX2ZzbW50WzUxMiAgLSAyMTJdOwoKfTsKCnN0cnVjdCB1ZnNfc3VwZXJfYmxvY2tfc2Vjb25k
IHsKCV9fczgJZnNfZnNtbnRbMjEyXTsKCV9fdTMyCWZzX2Nncm90b3I7CglfX3UzMglmc19jc3Bb
MzEgXTsKCV9fdTMyCWZzX21heGNsdXN0ZXI7CglfX3UzMglmc19jcGM7CglfX3UxNglmc19vcG9z
dGJsWzgyXTsKfTsJCgpzdHJ1Y3QgdWZzX3N1cGVyX2Jsb2NrX3RoaXJkIHsKCV9fdTE2CWZzX29w
b3N0YmxbNDZdOwoJdW5pb24gewoJCXN0cnVjdCB7CgkJCV9fczMyCWZzX3NwYXJlY29uWzUzXTsg
CgkJCV9fczMyCWZzX3JlY2xhaW07CgkJCV9fczMyCWZzX3NwYXJlY29uMlsxXTsKCQkJX19zMzIJ
ZnNfc3RhdGU7CSAKCQkJX191MzIJZnNfcWJtYXNrWzJdOwkgCgkJCV9fdTMyCWZzX3FmbWFza1sy
XTsJIAoJCX0gZnNfc3VuOwoJCXN0cnVjdCB7CgkJCV9fczMyCWZzX3NwYXJlY29uWzUzXTsgCgkJ
CV9fczMyCWZzX3JlY2xhaW07CgkJCV9fczMyCWZzX3NwYXJlY29uMlsxXTsKCQkJX191MzIJZnNf
bnBzZWN0OwkgCgkJCV9fdTMyCWZzX3FibWFza1syXTsJIAoJCQlfX3UzMglmc19xZm1hc2tbMl07
CSAKCQl9IGZzX3N1bng4NjsKCQlzdHJ1Y3QgewoJCQlfX3MzMglmc19zcGFyZWNvbls1MF07IAoJ
CQlfX3MzMglmc19jb250aWdzdW1zaXplOyAKCQkJX19zMzIJZnNfbWF4c3ltbGlua2xlbjsgCgkJ
CV9fczMyCWZzX2lub2RlZm10OwkgCgkJCV9fdTMyCWZzX21heGZpbGVzaXplWzJdOwkgCgkJCV9f
dTMyCWZzX3FibWFza1syXTsJIAoJCQlfX3UzMglmc19xZm1hc2tbMl07CSAKCQkJX19zMzIJZnNf
c3RhdGU7CSAKCQl9IGZzXzQ0OwoJfSBmc191MjsKCV9fczMyCWZzX3Bvc3RibGZvcm1hdDsKCV9f
czMyCWZzX25ycG9zOwoJX19zMzIJZnNfcG9zdGJsb2ZmOwoJX19zMzIJZnNfcm90YmxvZmY7Cglf
X3MzMglmc19tYWdpYzsKCV9fdTgJZnNfc3BhY2VbMV07Cn07CgoKIyA2NzkgIi9ob21lL2Nhcmxv
cy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIK
CiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1
ZGUvbGludXgvZWZzX2ZzX3NiLmgiIDEKIAoKCgoKCgoKCgoKIAoKCiAKCgoKCgoKCgogCnN0cnVj
dCBlZnNfc3VwZXIgewoJaW50MzJfdAkJZnNfc2l6ZTsgICAgICAgICAKCWludDMyX3QJCWZzX2Zp
cnN0Y2c7ICAgICAgCglpbnQzMl90CQlmc19jZ2ZzaXplOyAgICAgIAoJc2hvcnQJCWZzX2NnaXNp
emU7ICAgICAgCglzaG9ydAkJZnNfc2VjdG9yczsgICAgICAKCXNob3J0CQlmc19oZWFkczsgICAg
ICAgIAoJc2hvcnQJCWZzX25jZzsgICAgICAgICAgCglzaG9ydAkJZnNfZGlydHk7ICAgICAgICAK
CWludDMyX3QJCWZzX3RpbWU7ICAgICAgICAgCglpbnQzMl90CQlmc19tYWdpYzsgICAgICAgIAoJ
Y2hhcgkJZnNfZm5hbWVbNl07ICAgICAKCWNoYXIJCWZzX2ZwYWNrWzZdOyAgICAgCglpbnQzMl90
CQlmc19ibXNpemU7ICAgICAgIAoJaW50MzJfdAkJZnNfdGZyZWU7ICAgICAgICAKCWludDMyX3QJ
CWZzX3Rpbm9kZTsgICAgICAgCglpbnQzMl90CQlmc19ibWJsb2NrOyAgICAgIAoJaW50MzJfdAkJ
ZnNfcmVwbHNiOyAgICAgICAKCWludDMyX3QJCWZzX2xhc3RpYWxsb2M7ICAgCgljaGFyCQlmc19z
cGFyZVsyMF07ICAgIAoJaW50MzJfdAkJZnNfY2hlY2tzdW07ICAgICAKfTsKCiAKc3RydWN0IGVm
c19zYl9pbmZvIHsKCWludDMyX3QJZnNfbWFnaWM7CSAKCWludDMyX3QJZnNfc3RhcnQ7CSAKCWlu
dDMyX3QJZmlyc3RfYmxvY2s7CSAKCWludDMyX3QJdG90YWxfYmxvY2tzOwkgCglpbnQzMl90CWdy
b3VwX3NpemU7CSAgCglpbnQzMl90CWRhdGFfZnJlZTsJIAoJaW50MzJfdAlpbm9kZV9mcmVlOwkg
CglzaG9ydAlpbm9kZV9ibG9ja3M7CSAKCXNob3J0CXRvdGFsX2dyb3VwczsJIAp9OwoKCgojIDY4
MCAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUv
bGludXgvZnMuaCIgMgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGlu
dXgtMi40LngvaW5jbHVkZS9saW51eC9yb21mc19mc19zYi5oIiAxCgoKCiAKCnN0cnVjdCByb21m
c19zYl9pbmZvIHsKCXVuc2lnbmVkIGxvbmcgc19tYXhzaXplOwp9OwoKCiMgNjgxICIvaG9tZS9j
YXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9mcy5o
IiAyCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9p
bmNsdWRlL2xpbnV4L3NtYl9mc19zYi5oIiAxCiAKCgoKCgoKCgoKCgoKCiMgMSAiL2hvbWUvY2Fy
bG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvc21iLmgi
IDEKIAoKCgoKCgoKCgoKCgplbnVtIHNtYl9wcm90b2NvbCB7IAoJU01CX1BST1RPQ09MX05PTkUs
IAoJU01CX1BST1RPQ09MX0NPUkUsIAoJU01CX1BST1RPQ09MX0NPUkVQTFVTLCAKCVNNQl9QUk9U
T0NPTF9MQU5NQU4xLCAKCVNNQl9QUk9UT0NPTF9MQU5NQU4yLCAKCVNNQl9QUk9UT0NPTF9OVDEg
Cn07CgplbnVtIHNtYl9jYXNlX2huZGwgewoJU01CX0NBU0VfREVGQVVMVCwKCVNNQl9DQVNFX0xP
V0VSLAoJU01CX0NBU0VfVVBQRVIKfTsKCnN0cnVjdCBzbWJfZHNrYXR0ciB7CiAgICAgICAgX191
MTYgdG90YWw7CiAgICAgICAgX191MTYgYWxsb2NibG9ja3M7CiAgICAgICAgX191MTYgYmxvY2tz
aXplOwogICAgICAgIF9fdTE2IGZyZWU7Cn07CgpzdHJ1Y3Qgc21iX2Nvbm5fb3B0IHsKCiAgICAg
ICAgIAoJdW5zaWduZWQgaW50IGZkOwoKCWVudW0gc21iX3Byb3RvY29sIHByb3RvY29sOwoJZW51
bSBzbWJfY2FzZV9obmRsIGNhc2VfaGFuZGxpbmc7CgoJIAoKCV9fdTMyICAgICAgICAgICAgICBt
YXhfeG1pdDsKCV9fdTE2ICAgICAgICAgICAgICBzZXJ2ZXJfdWlkOwoJX191MTYgICAgICAgICAg
ICAgIHRpZDsKCiAgICAgICAgIAogICAgICAgIF9fdTE2ICAgICAgICAgICAgICBzZWNtb2RlOwog
ICAgICAgIF9fdTE2ICAgICAgICAgICAgICBtYXhtdXg7CiAgICAgICAgX191MTYgICAgICAgICAg
ICAgIG1heHZjczsKICAgICAgICBfX3UxNiAgICAgICAgICAgICAgcmF3bW9kZTsKICAgICAgICBf
X3UzMiAgICAgICAgICAgICAgc2Vzc2tleTsKCgkgCglfX3UzMiAgICAgICAgICAgICAgbWF4cmF3
OwoJX191MzIgICAgICAgICAgICAgIGNhcGFiaWxpdGllczsKCV9fczE2ICAgICAgICAgICAgICBz
ZXJ2ZXJ6b25lOwp9OwoKCgoKc3RydWN0IHNtYl9ubHNfY29kZXBhZ2UgewoJY2hhciBsb2NhbF9u
YW1lWzIwIF07CgljaGFyIHJlbW90ZV9uYW1lWzIwIF07Cn07CgoKCgoKIAoKCnN0cnVjdCBzbWJf
ZmF0dHIgewoKCV9fdTE2IGF0dHI7CgoJdW5zaWduZWQgbG9uZwlmX2lubzsKCXVtb2RlX3QJCWZf
bW9kZTsKCW5saW5rX3QJCWZfbmxpbms7Cgl1aWRfdAkJZl91aWQ7CglnaWRfdAkJZl9naWQ7Cglr
ZGV2X3QJCWZfcmRldjsKCW9mZl90CQlmX3NpemU7Cgl0aW1lX3QJCWZfYXRpbWU7Cgl0aW1lX3QJ
CWZfbXRpbWU7Cgl0aW1lX3QJCWZfY3RpbWU7Cgl1bnNpZ25lZCBsb25nCWZfYmxrc2l6ZTsKCXVu
c2lnbmVkIGxvbmcJZl9ibG9ja3M7Cn07CgplbnVtIHNtYl9jb25uX3N0YXRlIHsKCUNPTk5fVkFM
SUQsCQkgCglDT05OX0lOVkFMSUQsCQkgCgoJQ09OTl9SRVRSSUVELAkJIAoJQ09OTl9SRVRSWUlO
RwkJIAp9OwoKCgoKCgoKCgogCgoKCgoKIyAxNSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVY
L2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvc21iX2ZzX3NiLmgiIDIKCgogCgoKCgoK
c3RydWN0IHNtYl9zYl9pbmZvIHsKICAgICAgICBlbnVtIHNtYl9jb25uX3N0YXRlIHN0YXRlOwoJ
c3RydWN0IGZpbGUgKiBzb2NrX2ZpbGU7CgogICAgICAgIHN0cnVjdCBzbWJfbW91bnRfZGF0YV9r
ZXJuZWwgKm1udDsKICAgICAgICB1bnNpZ25lZCBjaGFyICp0ZW1wX2J1ZjsKCgkgCgoKCXVuc2ln
bmVkIGludCBnZW5lcmF0aW9uOwoJcGlkX3QgY29ubl9waWQ7CglzdHJ1Y3Qgc21iX2Nvbm5fb3B0
IG9wdDsKCglzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsKCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CgoJ
X191MzIgICAgICAgICAgICAgIHBhY2tldF9zaXplOwoJdW5zaWduZWQgY2hhciAqICAgIHBhY2tl
dDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCAgICAgcmNsczsgIAogICAgICAgIHVuc2lnbmVkIHNo
b3J0ICAgICBlcnI7CgogICAgICAgICAKICAgICAgICB2b2lkICpkYXRhX3JlYWR5OwoKCSAKCXN0
cnVjdCBubHNfdGFibGUgKnJlbW90ZV9ubHM7CglzdHJ1Y3QgbmxzX3RhYmxlICpsb2NhbF9ubHM7
CgoJIAoKCgljaGFyICpuYW1lX2J1ZjsKCglpbnQgKCpjb252ZXJ0KShjaGFyICosIGludCwgY29u
c3QgY2hhciAqLCBpbnQsCgkJICAgICAgIHN0cnVjdCBubHNfdGFibGUgKiwgc3RydWN0IG5sc190
YWJsZSAqKTsKfTsKCgpzdGF0aWMgaW5saW5lIHZvaWQKc21iX2xvY2tfc2VydmVyKHN0cnVjdCBz
bWJfc2JfaW5mbyAqc2VydmVyKQp7Cglkb3duKCYoc2VydmVyLT5zZW0pKTsKfQoKc3RhdGljIGlu
bGluZSB2b2lkCnNtYl91bmxvY2tfc2VydmVyKHN0cnVjdCBzbWJfc2JfaW5mbyAqc2VydmVyKQp7
Cgl1cCgmKHNlcnZlci0+c2VtKSk7Cn0KCgoKCiMgNjgyICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VD
TElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9mcy5oIiAyCgojIDEgIi9ob21l
L2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2hm
c19mc19zYi5oIiAxCiAKCgoKCgoKCgoKCgoKIApzdHJ1Y3QgaGZzX25hbWU7Cgp0eXBlZGVmIGlu
dCAoKmhmc19uYW1laW5fZm4pIChjaGFyICosIGNvbnN0IHN0cnVjdCBoZnNfbmFtZSAqKTsKdHlw
ZWRlZiB2b2lkICgqaGZzX25hbWVvdXRfZm4pIChzdHJ1Y3QgaGZzX25hbWUgKiwgY29uc3QgY2hh
ciAqLCBpbnQpOwp0eXBlZGVmIHZvaWQgKCpoZnNfaWZpbGxfZm4pIChzdHJ1Y3QgaW5vZGUgKiwg
aW5vX3QsIGNvbnN0IGludCk7CgogCgoKCgpzdHJ1Y3QgaGZzX3NiX2luZm8gewoJaW50CQkJbWFn
aWM7CQkgCglzdHJ1Y3QgaGZzX21kYgkJKnNfbWRiOwkJIAoJaW50CQkJc19xdWlldDsJIAoKCWlu
dAkJCXNfbG93ZXJjYXNlOwkgCglpbnQJCQlzX2FmcGQ7CQkgCglpbnQgICAgICAgICAgICAgICAg
ICAgICBzX3ZlcnNpb247ICAgICAgIAoJaGZzX25hbWVpbl9mbgkJc19uYW1laW47CSAKCgoJaGZz
X25hbWVvdXRfZm4JCXNfbmFtZW91dDsJIAoKCgloZnNfaWZpbGxfZm4JCXNfaWZpbGw7CSAKCglj
b25zdCBzdHJ1Y3QgaGZzX25hbWUJKnNfcmVzZXJ2ZWQxOwkgCgljb25zdCBzdHJ1Y3QgaGZzX25h
bWUJKnNfcmVzZXJ2ZWQyOwkgCglfX3UzMgkJCXNfdHlwZTsJCSAKCV9fdTMyCQkJc19jcmVhdG9y
OwkgCgl1bW9kZV90CQkJc191bWFzazsJIAoKCXVpZF90CQkJc191aWQ7CQkgCglnaWRfdAkJCXNf
Z2lkOwkJIAoJY2hhcgkJCXNfY29udjsJCSAKfTsKCgojIDY4MyAiL2hvbWUvY2FybG9zL0J1aWxk
cy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvZnMuaCIgMgoKIyAxICIv
aG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51
eC9hZGZzX2ZzX3NiLmgiIDEKIAoKCgoKCgoKCiAKCgpzdHJ1Y3QgYWRmc19kaXNjbWFwOwpzdHJ1
Y3QgYWRmc19kaXJfb3BzOwoKIAoKCnN0cnVjdCBhZGZzX3NiX2luZm8gewoJc3RydWN0IGFkZnNf
ZGlzY21hcCAqc19tYXA7CSAKCXN0cnVjdCBhZGZzX2Rpcl9vcHMgKnNfZGlyOwkgCgoJdWlkX3QJ
CXNfdWlkOwkJIAoJZ2lkX3QJCXNfZ2lkOwkJIAoJdW1vZGVfdAkJc19vd25lcl9tYXNrOwkgCgl1
bW9kZV90CQlzX290aGVyX21hc2s7CSAKCglfX3UzMgkJc19pZHNfcGVyX3pvbmU7CSAKCV9fdTMy
CQlzX2lkbGVuOwkgCglfX3UzMgkJc19tYXBfc2l6ZTsJIAoJdW5zaWduZWQgbG9uZwlzX3NpemU7
CQkgCglzaWduZWQgaW50CXNfbWFwMmJsazsJIAoJdW5zaWduZWQgaW50CXNfbG9nMnNoYXJlc2l6
ZTsgCgl1bnNpZ25lZCBpbnQJc192ZXJzaW9uOwkgCgl1bnNpZ25lZCBpbnQJc19uYW1lbGVuOwkg
Cn07CgoKIyA2ODQgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQu
eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVY
L2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvcW54NF9mc19zYi5oIiAxCiAKCgoKCgoK
CgoKCgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40Lngv
aW5jbHVkZS9saW51eC9xbng0X2ZzLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoK
CgoKCgoKCgoKIAoKCgogCgoKc3RydWN0IHFueDRfaW5vZGVfZW50cnkgewoJY2hhcgkJZGlfZm5h
bWVbMTYgXTsKCXFueDRfb2ZmX3QJZGlfc2l6ZTsKCXFueDRfeHRudF90CWRpX2ZpcnN0X3h0bnQ7
CglfX3UzMgkJZGlfeGJsazsKCV9fczMyCQlkaV9mdGltZTsKCV9fczMyCQlkaV9tdGltZTsKCV9f
czMyCQlkaV9hdGltZTsKCV9fczMyCQlkaV9jdGltZTsKCXFueDRfbnh0bnRfdAlkaV9udW1feHRu
dHM7Cglxbng0X21vZGVfdAlkaV9tb2RlOwoJcW54NF9tdWlkX3QJZGlfdWlkOwoJcW54NF9tZ2lk
X3QJZGlfZ2lkOwoJcW54NF9ubGlua190CWRpX25saW5rOwoJX191OAkJZGlfemVyb1s0XTsKCXFu
eDRfZnR5cGVfdAlkaV90eXBlOwoJX191OAkJZGlfc3RhdHVzOwp9OwoKc3RydWN0IHFueDRfbGlu
a19pbmZvIHsKCWNoYXIJCWRsX2ZuYW1lWzQ4IF07CglfX3UzMgkJZGxfaW5vZGVfYmxrOwoJX191
OAkJZGxfaW5vZGVfbmR4OwoJX191OAkJZGxfc3BhcmVbMTBdOwoJX191OAkJZGxfc3RhdHVzOwp9
OwoKc3RydWN0IHFueDRfeGJsayB7CglfX3UzMgkJeGJsa19uZXh0X3hibGs7CglfX3UzMgkJeGJs
a19wcmV2X3hibGs7CglfX3U4CQl4YmxrX251bV94dG50czsKCV9fdTgJCXhibGtfc3BhcmVbM107
CglfX3MzMgkJeGJsa19udW1fYmxvY2tzOwoJcW54NF94dG50X3QJeGJsa194dG50c1s2MCBdOwoJ
Y2hhcgkJeGJsa19zaWduYXR1cmVbOF07Cglxbng0X3h0bnRfdAl4YmxrX2ZpcnN0X3h0bnQ7Cn07
CgpzdHJ1Y3QgcW54NF9zdXBlcl9ibG9jayB7CglzdHJ1Y3QgcW54NF9pbm9kZV9lbnRyeSBSb290
RGlyOwoJc3RydWN0IHFueDRfaW5vZGVfZW50cnkgSW5vZGU7CglzdHJ1Y3QgcW54NF9pbm9kZV9l
bnRyeSBCb290OwoJc3RydWN0IHFueDRfaW5vZGVfZW50cnkgQWx0Qm9vdDsKfTsKCgoKCgoKCgoK
CgpleHRlcm4gc3RydWN0IGRlbnRyeSAqcW54NF9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0
cnVjdCBkZW50cnkgKmRlbnRyeSk7CmV4dGVybiB1bnNpZ25lZCBsb25nIHFueDRfY291bnRfZnJl
ZV9ibG9ja3Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CmV4dGVybiB1bnNpZ25lZCBsb25nIHFu
eDRfYmxvY2tfbWFwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgaWJsb2NrKTsKCmV4dGVybiBz
dHJ1Y3QgYnVmZmVyX2hlYWQgKnFueDRfZ2V0YmxrKHN0cnVjdCBpbm9kZSAqLCBpbnQsIGludCk7
CmV4dGVybiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnFueDRfYnJlYWQoc3RydWN0IGlub2RlICosIGlu
dCwgaW50KTsKCmV4dGVybiBpbnQgcW54NF9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVj
dCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUpOwpleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlv
bnMgcW54NF9maWxlX2lub2RlX29wZXJhdGlvbnM7CmV4dGVybiBzdHJ1Y3QgaW5vZGVfb3BlcmF0
aW9ucyBxbng0X2Rpcl9pbm9kZV9vcGVyYXRpb25zOwpleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0
aW9ucyBxbng0X2ZpbGVfb3BlcmF0aW9uczsKZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMg
cW54NF9kaXJfb3BlcmF0aW9uczsKZXh0ZXJuIGludCBxbng0X2lzX2ZyZWUoc3RydWN0IHN1cGVy
X2Jsb2NrICpzYiwgbG9uZyBibG9jayk7CmV4dGVybiBpbnQgcW54NF9zZXRfYml0bWFwKHN0cnVj
dCBzdXBlcl9ibG9jayAqc2IsIGxvbmcgYmxvY2ssIGludCBidXN5KTsKZXh0ZXJuIGludCBxbng0
X2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBt
b2RlKTsKZXh0ZXJuIHZvaWQgcW54NF90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKZXh0
ZXJuIHZvaWQgcW54NF9mcmVlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwpleHRlcm4gaW50
IHFueDRfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwpl
eHRlcm4gaW50IHFueDRfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRl
bnRyeSk7CmV4dGVybiBpbnQgcW54NF9zeW5jX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVj
dCBkZW50cnkgKmRlbnRyeSwgaW50KTsKZXh0ZXJuIGludCBxbng0X3N5bmNfaW5vZGUoc3RydWN0
IGlub2RlICppbm9kZSk7CmV4dGVybiBpbnQgcW54NF9nZXRfYmxvY2soc3RydWN0IGlub2RlICpp
bm9kZSwgbG9uZyBpYmxvY2ssIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCBjcmVhdGUpOwoK
CgoKIyAxNCAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2lu
Y2x1ZGUvbGludXgvcW54NF9mc19zYi5oIiAyCgoKIAoKCgpzdHJ1Y3QgcW54NF9zYl9pbmZvIHsK
CXN0cnVjdCBidWZmZXJfaGVhZAkqc2JfYnVmOwkgCglzdHJ1Y3QgcW54NF9zdXBlcl9ibG9jawkq
c2I7CQkgCgl1bnNpZ25lZCBpbnQJCVZlcnNpb247CSAKCXN0cnVjdCBxbng0X2lub2RlX2VudHJ5
CSpCaXRNYXA7CSAKfTsKCgojIDY4NSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11
Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvZnMuaCIgMgoKIyAxICIvaG9tZS9jYXJsb3MvQnVp
bGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mc19z
Yi5oIiAxCiAKCgoKCgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGlu
dXgtMi40LngvaW5jbHVkZS9saW51eC90cXVldWUuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgog
CgoKCgoKCgoKCgoKCgoKCgpzdHJ1Y3QgdHFfc3RydWN0IHsKCXN0cnVjdCBsaXN0X2hlYWQgbGlz
dDsJCSAKCXVuc2lnbmVkIGxvbmcgc3luYzsJCSAKCXZvaWQgKCpyb3V0aW5lKSh2b2lkICopOwkg
Cgl2b2lkICpkYXRhOwkJCSAKfTsKCiAKCgoKCgoKCgogCgoKCgoKCgoKCnR5cGVkZWYgc3RydWN0
IGxpc3RfaGVhZCB0YXNrX3F1ZXVlOwoKCgoKZXh0ZXJuIHRhc2tfcXVldWUgdHFfdGltZXIsIHRx
X2ltbWVkaWF0ZSwgdHFfZGlzazsKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiBzcGlu
bG9ja190IHRxdWV1ZV9sb2NrOwoKIAoKCgpzdGF0aWMgaW5saW5lIGludCBxdWV1ZV90YXNrKHN0
cnVjdCB0cV9zdHJ1Y3QgKmJoX3BvaW50ZXIsIHRhc2tfcXVldWUgKmJoX2xpc3QpCnsKCWludCBy
ZXQgPSAwOwoJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KDAsJmJoX3BvaW50ZXItPnN5bmMpKSB7CgkJ
dW5zaWduZWQgbG9uZyBmbGFnczsKCQlkbyB7ICh7IGFzbSB2b2xhdGlsZSAoIm1vdmV3ICUlc3Is
JTAiOiI9ZCIgKCAgICBmbGFncyAgICkgOiA6ICJtZW1vcnkiKSA7IF9fYXNtX18gX192b2xhdGls
ZV9fICggIm1vdmUgJS9zciwlJWQwXG5cdCIgIm9yaS5sICAjMHgwNzAwLCUlZDBcblx0IiAibW92
ZSAlJWQwLCUvc3JcbiIgOiA6IDogImNjIiwgIiVkMCIsICJtZW1vcnkiKSA7IH0pIDsgICAgICAg
KHZvaWQpKCAgJnRxdWV1ZV9sb2NrICApIDsgfSB3aGlsZSAoMCkgOwoJCWxpc3RfYWRkX3RhaWwo
JmJoX3BvaW50ZXItPmxpc3QsIGJoX2xpc3QpOwoJCWRvIHsgZG8geyB9IHdoaWxlKDApIDsgIGFz
bSB2b2xhdGlsZSAoIm1vdmV3ICUwLCUlc3IiOiA6ImQiICggICAgZmxhZ3MgICApIDogIm1lbW9y
eSIpICA7IH0gd2hpbGUgKDApIDsKCQlyZXQgPSAxOwoJfQoJcmV0dXJuIHJldDsKfQoKIAoKCgpl
eHRlcm4gdm9pZCBfX3J1bl90YXNrX3F1ZXVlKHRhc2tfcXVldWUgKmxpc3QpOwoKc3RhdGljIGlu
bGluZSB2b2lkIHJ1bl90YXNrX3F1ZXVlKHRhc2tfcXVldWUgKmxpc3QpCnsKCWlmICgoIWxpc3Rf
ZW1wdHkoJiAqbGlzdCApKSApCgkJX19ydW5fdGFza19xdWV1ZShsaXN0KTsKfQoKCiMgOCAiL2hv
bWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgv
cmVpc2VyZnNfZnNfc2IuaCIgMgoKCgogCiAKIAogCiAKCgogICAgICAgICAgICAgICAgICAgICAg
CgoKCgoKIAoKc3RydWN0IHJlaXNlcmZzX3N1cGVyX2Jsb2NrCnsKICBfX3UzMiBzX2Jsb2NrX2Nv
dW50OwogIF9fdTMyIHNfZnJlZV9ibG9ja3M7ICAgICAgICAgICAgICAgICAgIAogIF9fdTMyIHNf
cm9vdF9ibG9jazsgICAgICAgICAgIAkgCiAgX191MzIgc19qb3VybmFsX2Jsb2NrOyAgICAgICAg
ICAgCSAKICBfX3UzMiBzX2pvdXJuYWxfZGV2OyAgICAgICAgICAgCSAKCiAgIAoKCgoKCgoJCQkJ
IAoKICBfX3UzMiBzX29yaWdfam91cm5hbF9zaXplOyAJCQogIF9fdTMyIHNfam91cm5hbF90cmFu
c19tYXggOyAgICAgICAgICAgIAogIF9fdTMyIHNfam91cm5hbF9ibG9ja19jb3VudCA7ICAgICAg
ICAgIAogIF9fdTMyIHNfam91cm5hbF9tYXhfYmF0Y2ggOyAgICAgICAgICAgIAogIF9fdTMyIHNf
am91cm5hbF9tYXhfY29tbWl0X2FnZSA7ICAgICAgIAogIF9fdTMyIHNfam91cm5hbF9tYXhfdHJh
bnNfYWdlIDsgICAgICAgIAogIF9fdTE2IHNfYmxvY2tzaXplOyAgICAgICAgICAgICAgICAgICAJ
IAogIF9fdTE2IHNfb2lkX21heHNpemU7CQkJIAogIF9fdTE2IHNfb2lkX2N1cnNpemU7CQkJIAog
IF9fdTE2IHNfc3RhdGU7ICAgICAgICAgICAgICAgICAgICAgICAJIAogIGNoYXIgc19tYWdpY1sx
Ml07ICAgICAgICAgICAgICAgICAgICAgIAogIF9fdTMyIHNfaGFzaF9mdW5jdGlvbl9jb2RlOwkJ
IAogIF9fdTE2IHNfdHJlZV9oZWlnaHQ7ICAgICAgICAgICAgICAgICAgIAogIF9fdTE2IHNfYm1h
cF9ucjsgICAgICAgICAgICAgICAgICAgICAgIAogIF9fdTE2IHNfdmVyc2lvbjsJCSAKCgoKCiAg
X191MTYgc19yZXNlcnZlZDsKICBfX3UzMiBzX2lub2RlX2dlbmVyYXRpb247CiAgY2hhciBzX3Vu
dXNlZFsxMjRdIDsJCQkgCn0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKCgogCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKc3RydWN0IHJl
aXNlcmZzX3N1cGVyX2Jsb2NrX3YxCnsKICBfX3UzMiBzX2Jsb2NrX2NvdW50OwkJCSAKICBfX3Uz
MiBzX2ZyZWVfYmxvY2tzOyAgICAgICAgICAgICAgICAgICAKICBfX3UzMiBzX3Jvb3RfYmxvY2s7
ICAgICAgICAgICAJIAogIF9fdTMyIHNfam91cm5hbF9ibG9jazsgICAgICAgICAgIAkgCiAgX191
MzIgc19qb3VybmFsX2RldjsgICAgICAgICAgIAkgCiAgX191MzIgc19vcmlnX2pvdXJuYWxfc2l6
ZTsgCQkgCiAgX191MzIgc19qb3VybmFsX3RyYW5zX21heCA7ICAgICAgICAgICAgCiAgX191MzIg
c19qb3VybmFsX2Jsb2NrX2NvdW50IDsgICAgICAgICAgCiAgX191MzIgc19qb3VybmFsX21heF9i
YXRjaCA7ICAgICAgICAgICAgCiAgX191MzIgc19qb3VybmFsX21heF9jb21taXRfYWdlIDsgICAg
ICAgCiAgX191MzIgc19qb3VybmFsX21heF90cmFuc19hZ2UgOyAgICAgICAgCiAgX191MTYgc19i
bG9ja3NpemU7ICAgICAgICAgICAgICAgICAgIAkgCiAgX191MTYgc19vaWRfbWF4c2l6ZTsJCQkg
CiAgX191MTYgc19vaWRfY3Vyc2l6ZTsJCQkgCiAgX191MTYgc19zdGF0ZTsgICAgICAgICAgICAg
ICAgICAgICAgIAkgCiAgY2hhciBzX21hZ2ljWzE2XTsgICAgICAgICAgICAgICAgICAgICAgCiAg
X191MTYgc190cmVlX2hlaWdodDsgICAgICAgICAgICAgICAgICAgCiAgX191MTYgc19ibWFwX25y
OyAgICAgICAgICAgICAgICAgICAgICAgCiAgX191MzIgc19yZXNlcnZlZDsKfSBfX2F0dHJpYnV0
ZV9fICgoX19wYWNrZWRfXykpOwoKCgogCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoJCQkJIAoK
CgoKCgoKIAoKCgoKCiAKCgoKCgoKCiAKCgoKCgoKCnN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nu
b2RlIHsKICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoIDsJCSAgCiAga2Rldl90IGRldiA7CQkJCSAg
CiAgdW5zaWduZWQgbG9uZyBibG9ja25yIDsJCSAgCQkgCiAgaW50IHN0YXRlIDsKICBzdHJ1Y3Qg
cmVpc2VyZnNfam91cm5hbF9saXN0ICpqbGlzdCA7ICAgCiAgc3RydWN0IHJlaXNlcmZzX2pvdXJu
YWxfY25vZGUgKm5leHQgOyAgIAogIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICpwcmV2
IDsgICAKICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqaHByZXYgOyAgCiAgc3RydWN0
IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmhuZXh0IDsgIAp9OwoKc3RydWN0IHJlaXNlcmZzX2Jp
dG1hcF9ub2RlIHsKICBpbnQgaWQgOwogIGNoYXIgKmRhdGEgOwogIHN0cnVjdCBsaXN0X2hlYWQg
bGlzdCA7Cn0gOwoKc3RydWN0IHJlaXNlcmZzX2xpc3RfYml0bWFwIHsKICBzdHJ1Y3QgcmVpc2Vy
ZnNfam91cm5hbF9saXN0ICpqb3VybmFsX2xpc3QgOwogIHN0cnVjdCByZWlzZXJmc19iaXRtYXBf
bm9kZSAqKmJpdG1hcHMgOwp9IDsKCiAKCgpzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFu
ZGxlIHsKCQkJCSAKICBjaGFyICp0X2NhbGxlciA7ICAgICAgICAgICAgICAgCiAgaW50IHRfYmxv
Y2tzX2xvZ2dlZCA7ICAgICAgICAgIAogIGludCB0X2Jsb2Nrc19hbGxvY2F0ZWQgOyAgICAgICAK
ICB1bnNpZ25lZCBsb25nIHRfdHJhbnNfaWQgOyAgICAgCiAgc3RydWN0IHN1cGVyX2Jsb2NrICp0
X3N1cGVyIDsgIAoKfSA7CgogCgoKCgoKc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCB7CiAg
dW5zaWduZWQgbG9uZyBqX3N0YXJ0IDsKICB1bnNpZ25lZCBsb25nIGpfbGVuIDsKICBhdG9taWNf
dCBqX25vbnplcm9sZW4gOwogIGF0b21pY190IGpfY29tbWl0X2xlZnQgOwogIGF0b21pY190IGpf
Zmx1c2hpbmcgOwogIGF0b21pY190IGpfY29tbWl0X2ZsdXNoaW5nIDsKICBhdG9taWNfdCBqX29s
ZGVyX2NvbW1pdHNfZG9uZSA7ICAgICAgIAogIHVuc2lnbmVkIGxvbmcgal90cmFuc19pZCA7CiAg
dGltZV90IGpfdGltZXN0YW1wIDsKICBzdHJ1Y3QgcmVpc2VyZnNfbGlzdF9iaXRtYXAgKmpfbGlz
dF9iaXRtYXAgOwogIHN0cnVjdCBidWZmZXJfaGVhZCAqal9jb21taXRfYmggOyAgCiAgc3RydWN0
IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmpfcmVhbGJsb2NrICA7CiAgc3RydWN0IHJlaXNlcmZz
X2pvdXJuYWxfY25vZGUgKmpfZnJlZWRsaXN0IDsgIAogIHdhaXRfcXVldWVfaGVhZF90IGpfY29t
bWl0X3dhaXQgOyAgCiAgd2FpdF9xdWV1ZV9oZWFkX3Qgal9mbHVzaF93YWl0IDsgIAp9IDsKCnN0
cnVjdCByZWlzZXJmc19wYWdlX2xpc3QgIDsgIAoKc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgewog
IHN0cnVjdCBidWZmZXJfaGVhZCAqKiBqX2FwX2Jsb2NrcyA7ICAKICBzdHJ1Y3QgcmVpc2VyZnNf
am91cm5hbF9jbm9kZSAqal9sYXN0IDsgIAogIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2Rl
ICpqX2ZpcnN0IDsgIAoJCQkJCiAgaW50IGpfc3RhdGUgOwkJCQogIHVuc2lnbmVkIGxvbmcgal90
cmFuc19pZCA7CiAgdW5zaWduZWQgbG9uZyBqX21vdW50X2lkIDsKICB1bnNpZ25lZCBsb25nIGpf
c3RhcnQgOyAgICAgICAgICAgICAgCiAgdW5zaWduZWQgbG9uZyBqX2xlbiA7ICAgICAgICAgICAg
ICAgIAogIHVuc2lnbmVkIGxvbmcgal9sZW5fYWxsb2MgOyAgICAgICAgICAKICBhdG9taWNfdCBq
X3djb3VudCA7ICAgICAgICAgICAgIAogIHVuc2lnbmVkIGxvbmcgal9iY291bnQgOyAgICAgICAg
ICAgICAKICB1bnNpZ25lZCBsb25nIGpfZmlyc3RfdW5mbHVzaGVkX29mZnNldCA7ICAgCiAgdW5z
aWduZWQgbG9uZyBqX2xhc3RfZmx1c2hfdHJhbnNfaWQgOyAgICAgCiAgc3RydWN0IGJ1ZmZlcl9o
ZWFkICpqX2hlYWRlcl9iaCA7ICAgCgogICAKCgogIHN0cnVjdCByZWlzZXJmc19wYWdlX2xpc3Qg
KmpfZmx1c2hfcGFnZXMgOwogIHRpbWVfdCBqX3RyYW5zX3N0YXJ0X3RpbWUgOyAgICAgICAgICAK
ICB3YWl0X3F1ZXVlX2hlYWRfdCBqX3dhaXQgOyAgICAgICAgICAKICBhdG9taWNfdCBqX3dsb2Nr
IDsgICAgICAgICAgICAgICAgICAgICAgICAKICB3YWl0X3F1ZXVlX2hlYWRfdCBqX2pvaW5fd2Fp
dCA7ICAgICAKICBhdG9taWNfdCBqX2psb2NrIDsgICAgICAgICAgICAgICAgICAgICAgICAKICBp
bnQgal9qb3VybmFsX2xpc3RfaW5kZXggOwkgICAgICAgCiAgaW50IGpfbGlzdF9iaXRtYXBfaW5k
ZXggOwkgICAgICAgCiAgaW50IGpfbXVzdF93YWl0IDsJCSAgICAgICAgCiAgaW50IGpfbmV4dF9m
dWxsX2ZsdXNoIDsgICAgICAgICAgICAgIAogIGludCBqX25leHRfYXN5bmNfZmx1c2ggOyAgICAg
ICAgICAgICAgCgogIGludCBqX2Nub2RlX3VzZWQgOwkgICAgICAgCiAgaW50IGpfY25vZGVfZnJl
ZSA7ICAgICAgICAgICAKCiAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmpfY25vZGVf
ZnJlZV9saXN0IDsKICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqal9jbm9kZV9mcmVl
X29yaWcgOyAgCgogIGludCBqX2ZyZWVfYml0bWFwX25vZGVzIDsKICBpbnQgal91c2VkX2JpdG1h
cF9ub2RlcyA7CiAgc3RydWN0IGxpc3RfaGVhZCBqX2JpdG1hcF9ub2RlcyA7CiAgc3RydWN0IGlu
b2RlIGpfZHVtbXlfaW5vZGUgOwogIHN0cnVjdCByZWlzZXJmc19saXN0X2JpdG1hcCBqX2xpc3Rf
Yml0bWFwWzUgXSA7CSAKICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9saXN0IGpfam91cm5hbF9s
aXN0WzY0IF0gOwkgICAgIAogIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICpqX2hhc2hf
dGFibGVbODE5MiBdIDsgCSAgICAgIAogIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICpq
X2xpc3RfaGFzaF90YWJsZVs4MTkyIF0gOyAgCgogIHN0cnVjdCBsaXN0X2hlYWQgal9wcmVhbGxv
Y19saXN0OyAgICAgIAp9OwoKCgoKdHlwZWRlZiBfX3UzMiAoKmhhc2hmX3QpIChjb25zdCBzaWdu
ZWQgY2hhciAqLCBpbnQpOwoKc3RydWN0IHByb2NfZGlyX2VudHJ5OwoKIyAzODAgIi9ob21lL2Nh
cmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L3JlaXNl
cmZzX2ZzX3NiLmgiCgp0eXBlZGVmIHN0cnVjdCByZWlzZXJmc19wcm9jX2luZm9fZGF0YQp7fSBy
ZWlzZXJmc19wcm9jX2luZm9fZGF0YV90OwoKCiAKc3RydWN0IHJlaXNlcmZzX3NiX2luZm8Kewog
ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICogc19zYmg7ICAgICAgICAgICAgICAgICAgICAKCQkJCSAK
CiAgICBzdHJ1Y3QgcmVpc2VyZnNfc3VwZXJfYmxvY2sgKiBzX3JzOyAgICAgICAgICAgIAogICAg
c3RydWN0IGJ1ZmZlcl9oZWFkICoqIHNfYXBfYml0bWFwOyAgICAgICAgCiAgICBzdHJ1Y3QgcmVp
c2VyZnNfam91cm5hbCAqc19qb3VybmFsIDsJCSAKICAgIHVuc2lnbmVkIHNob3J0IHNfbW91bnRf
c3RhdGU7ICAgICAgICAgICAgICAgICAgCiAgCgkJCQkgCiAgICB2b2lkICgqZW5kX2lvX2hhbmRs
ZXIpKHN0cnVjdCBidWZmZXJfaGVhZCAqLCBpbnQpOwogICAgaGFzaGZfdCBzX2hhc2hfZnVuY3Rp
b247CSAKCgogICAgdW5zaWduZWQgbG9uZyBzX21vdW50X29wdDsJIAoKCgoJCQkJIAogICAgd2Fp
dF9xdWV1ZV9oZWFkX3Qgc193YWl0OwoJCQkJIAogICAgYXRvbWljX3Qgc19nZW5lcmF0aW9uX2Nv
dW50ZXI7ICAKICAgICAKICAgIHVuc2lnbmVkIGludCBzX3Byb3BlcnRpZXM7ICAgICAKCiAgICAK
ICAgICAKICAgIGludCBzX2ttYWxsb2NzOwogICAgaW50IHNfZGlza19yZWFkczsKICAgIGludCBz
X2Rpc2tfd3JpdGVzOwogICAgaW50IHNfZml4X25vZGVzOwogICAgaW50IHNfZG9fYmFsYW5jZTsK
ICAgIGludCBzX3VubmVlZGVkX2xlZnRfbmVpZ2hib3I7CiAgICBpbnQgc19nb29kX3NlYXJjaF9i
eV9rZXlfcmVhZGE7CiAgICBpbnQgc19ibWFwczsKICAgIGludCBzX2JtYXBzX3dpdGhvdXRfc2Vh
cmNoOwogICAgaW50IHNfZGlyZWN0MmluZGlyZWN0OwogICAgaW50IHNfaW5kaXJlY3QyZGlyZWN0
OwoJIAoKCiAgICBpbnQgc19pc191bmxpbmtlZF9vazsKICAgIHJlaXNlcmZzX3Byb2NfaW5mb19k
YXRhX3Qgc19wcm9jX2luZm9fZGF0YTsKICAgIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY2Rp
cjsKfTsKCiAKCgoKIAoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKdm9pZCByZWlzZXJmc19maWxlX2J1ZmZlciAoc3RydWN0IGJ1ZmZlcl9oZWFk
ICogYmgsIGludCBsaXN0KTsKaW50IHJlaXNlcmZzX2lzX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9j
ayAqcykgIDsKaW50IGpvdXJuYWxfbWFya19kaXJ0eShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rp
b25faGFuZGxlICosIHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJo
KSA7CmludCBmbHVzaF9vbGRfY29tbWl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIGludCkgOwpp
bnQgc2hvd19yZWlzZXJmc19sb2Nrcyh2b2lkKSA7CmludCByZWlzZXJmc19yZXNpemUoc3RydWN0
IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkIGxvbmcpIDsKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoK
CgoKCgoKCgoKCiMgNjg2ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgt
Mi40LngvaW5jbHVkZS9saW51eC9mcy5oIiAyCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNM
SU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2Jmc19mc19zYi5oIiAxCiAKCgoK
CgoKCiAKCgpzdHJ1Y3QgYmZzX3NiX2luZm8gewoJdW5zaWduZWQgbG9uZyBzaV9ibG9ja3M7Cgl1
bnNpZ25lZCBsb25nIHNpX2ZyZWViOwoJdW5zaWduZWQgbG9uZyBzaV9mcmVlaTsKCXVuc2lnbmVk
IGxvbmcgc2lfbGZfaW9mZjsKCXVuc2lnbmVkIGxvbmcgc2lfbGZfc2JsazsKCXVuc2lnbmVkIGxv
bmcgc2lfbGZfZWJsazsKCXVuc2lnbmVkIGxvbmcgc2lfbGFzdGk7CgljaGFyICogc2lfaW1hcDsK
CXN0cnVjdCBidWZmZXJfaGVhZCAqIHNpX3NiaDsJCSAKCXN0cnVjdCBiZnNfc3VwZXJfYmxvY2sg
KiBzaV9iZnNfc2I7CSAKfTsKCgojIDY4NyAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2Vj
bC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvZnMuaCIgMgoKIyAxICIvaG9tZS9jYXJsb3Mv
QnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC91ZGZfZnNfc2Iu
aCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKc3RydWN0IHVkZl9zcGFyaW5nX2RhdGEK
ewoJX191MTYJc19wYWNrZXRfbGVuOwoJc3RydWN0IGJ1ZmZlcl9oZWFkICpzX3NwYXJfbWFwWzRd
Owp9IF9fYXR0cmlidXRlICgocGFja2VkKSk7CgpzdHJ1Y3QgdWRmX3ZpcnR1YWxfZGF0YQp7Cglf
X3UzMglzX251bV9lbnRyaWVzOwoJX191MTYJc19zdGFydF9vZmZzZXQ7Cn0gX19hdHRyaWJ1dGUg
KChwYWNrZWQpKTsKCnN0cnVjdCB1ZGZfYml0bWFwCnsKCV9fdTMyCQkJc19leHRMZW5ndGg7Cglf
X3UzMgkJCXNfZXh0UG9zaXRpb247CglfX3UxNgkJCXNfbnJfZ3JvdXBzOwoJc3RydWN0IGJ1ZmZl
cl9oZWFkIAkqKnNfYmxvY2tfYml0bWFwOwp9IF9fYXR0cmlidXRlICgocGFja2VkKSk7CgpzdHJ1
Y3QgdWRmX3BhcnRfbWFwCnsKCXVuaW9uCgl7CgkJc3RydWN0IHVkZl9iaXRtYXAJKnNfYml0bWFw
OwoJCXN0cnVjdCBpbm9kZQkJKnNfdGFibGU7Cgl9IHNfdXNwYWNlOwoJdW5pb24KCXsKCQlzdHJ1
Y3QgdWRmX2JpdG1hcAkqc19iaXRtYXA7CgkJc3RydWN0IGlub2RlCQkqc190YWJsZTsKCX0gc19m
c3BhY2U7CglfX3UzMglzX3BhcnRpdGlvbl9yb290OwoJX191MzIJc19wYXJ0aXRpb25fbGVuOwoJ
X191MTYJc19wYXJ0aXRpb25fdHlwZTsKCV9fdTE2CXNfcGFydGl0aW9uX251bTsKCXVuaW9uCgl7
CgkJc3RydWN0IHVkZl9zcGFyaW5nX2RhdGEgc19zcGFyaW5nOwoJCXN0cnVjdCB1ZGZfdmlydHVh
bF9kYXRhIHNfdmlydHVhbDsKCX0gc190eXBlX3NwZWNpZmljOwoJX191MzIJKCpzX3BhcnRpdGlv
bl9mdW5jKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgX191MzIsIF9fdTE2LCBfX3UzMik7CglfX3Ux
NglzX3ZvbHVtZXNlcW51bTsKCV9fdTE2CXNfcGFydGl0aW9uX2ZsYWdzOwp9IF9fYXR0cmlidXRl
ICgocGFja2VkKSk7CgpzdHJ1Y3QgdWRmX3NiX2luZm8KewoJc3RydWN0IHVkZl9wYXJ0X21hcAkq
c19wYXJ0bWFwczsKCV9fdTgJCQlzX3ZvbGlkZW50WzMyXTsKCgkgCglfX3UxNgkJCXNfcGFydGl0
aW9uczsKCV9fdTE2CQkJc19wYXJ0aXRpb247CgoJIAoJX19zMzIJCQlzX3Nlc3Npb247CglfX3Uz
MgkJCXNfYW5jaG9yWzRdOwoJX191MzIJCQlzX2xhc3RibG9jazsKCglzdHJ1Y3QgYnVmZmVyX2hl
YWQJKnNfbHZpZGJoOwoKCSAKCW1vZGVfdAkJCXNfdW1hc2s7CglnaWRfdAkJCXNfZ2lkOwoJdWlk
X3QJCQlzX3VpZDsKCgkgCgl0aW1lX3QJCQlzX3JlY29yZHRpbWU7CgoJIAoJX191MTYJCQlzX3Nl
cmlhbG51bTsKCgkgCglfX3UxNgkJCXNfdWRmcmV2OwoKCSAKCV9fdTMyCQkJc19mbGFnczsKCgkg
CglzdHJ1Y3QgbmxzX3RhYmxlCSpzX25sc19tYXA7CgoJIAoJc3RydWN0IGlub2RlCQkqc192YXQ7
Cn07CgoKIyA2ODggIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQu
eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVY
L2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvbmNwX2ZzX3NiLmgiIDEKIAoKCgoKCgoK
CgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5j
bHVkZS9saW51eC9uY3BfbW91bnQuaCIgMQogCgoKCgoKCgoKCgojIDEgIi9ob21lL2Nhcmxvcy9C
dWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L25jcC5oIiAxCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCgpzdHJ1Y3QgbmNwX3JlcXVlc3RfaGVhZGVyIHsKCV9fdTE2IHR5
cGUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CglfX3U4IHNlcXVlbmNlIF9fYXR0cmlidXRlX18o
KHBhY2tlZCkpOwoJX191OCBjb25uX2xvdyBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCV9fdTgg
dGFzayBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCV9fdTggY29ubl9oaWdoIF9fYXR0cmlidXRl
X18oKHBhY2tlZCkpOwoJX191OCBmdW5jdGlvbiBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCV9f
dTggZGF0YVswXSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKfTsKCgoKCnN0cnVjdCBuY3BfcmVw
bHlfaGVhZGVyIHsKCV9fdTE2IHR5cGUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CglfX3U4IHNl
cXVlbmNlIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoJX191OCBjb25uX2xvdyBfX2F0dHJpYnV0
ZV9fKChwYWNrZWQpKTsKCV9fdTggdGFzayBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCV9fdTgg
Y29ubl9oaWdoIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoJX191OCBjb21wbGV0aW9uX2NvZGUg
X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CglfX3U4IGNvbm5lY3Rpb25fc3RhdGUgX19hdHRyaWJ1
dGVfXygocGFja2VkKSk7CglfX3U4IGRhdGFbMF0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cn07
CgoKCnN0cnVjdCBuY3Bfdm9sdW1lX2luZm8gewoJX191MzIgdG90YWxfYmxvY2tzOwoJX191MzIg
ZnJlZV9ibG9ja3M7CglfX3UzMiBwdXJnZWFibGVfYmxvY2tzOwoJX191MzIgbm90X3lldF9wdXJn
ZWFibGVfYmxvY2tzOwoJX191MzIgdG90YWxfZGlyX2VudHJpZXM7CglfX3UzMiBhdmFpbGFibGVf
ZGlyX2VudHJpZXM7CglfX3U4IHNlY3RvcnNfcGVyX2Jsb2NrOwoJY2hhciB2b2x1bWVfbmFtZVso
MTYpICArIDFdOwp9OwoKCgoKCgoKIAoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgoK
CgoKCiAKCgoKCgoKCgoKCnN0cnVjdCBud19pbmZvX3N0cnVjdCB7CglfX3UzMiBzcGFjZUFsbG9j
IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoJX191MzIgYXR0cmlidXRlcyBfX2F0dHJpYnV0ZV9f
KChwYWNrZWQpKTsKCV9fdTE2IGZsYWdzIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoJX191MzIg
ZGF0YVN0cmVhbVNpemUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CglfX3UzMiB0b3RhbFN0cmVh
bVNpemUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CglfX3UxNiBudW1iZXJPZlN0cmVhbXMgX19h
dHRyaWJ1dGVfXygocGFja2VkKSk7CglfX3UxNiBjcmVhdGlvblRpbWUgX19hdHRyaWJ1dGVfXygo
cGFja2VkKSk7CglfX3UxNiBjcmVhdGlvbkRhdGUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cglf
X3UzMiBjcmVhdG9ySUQgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CglfX3UxNiBtb2RpZnlUaW1l
IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoJX191MTYgbW9kaWZ5RGF0ZSBfX2F0dHJpYnV0ZV9f
KChwYWNrZWQpKTsKCV9fdTMyIG1vZGlmaWVySUQgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cglf
X3UxNiBsYXN0QWNjZXNzRGF0ZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCV9fdTE2IGFyY2hp
dmVUaW1lIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoJX191MTYgYXJjaGl2ZURhdGUgX19hdHRy
aWJ1dGVfXygocGFja2VkKSk7CglfX3UzMiBhcmNoaXZlcklEIF9fYXR0cmlidXRlX18oKHBhY2tl
ZCkpOwoJX191MTYgaW5oZXJpdGVkUmlnaHRzTWFzayBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsK
CV9fdTMyIGRpckVudE51bSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCV9fdTMyIERvc0Rpck51
bSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCV9fdTMyIHZvbE51bWJlciBfX2F0dHJpYnV0ZV9f
KChwYWNrZWQpKTsKCV9fdTMyIEVBRGF0YVNpemUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cglf
X3UzMiBFQUtleUNvdW50IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoJX191MzIgRUFLZXlTaXpl
IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoJX191MzIgTlNDcmVhdG9yIF9fYXR0cmlidXRlX18o
KHBhY2tlZCkpOwoJX191OCBuYW1lTGVuIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoJX191OCBl
bnRyeU5hbWVbMjU2XSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKfTsKCiAKCgoKCgoKCgoKCgoK
CgpzdHJ1Y3QgbndfbW9kaWZ5X2Rvc19pbmZvIHsKCV9fdTMyIGF0dHJpYnV0ZXMgX19hdHRyaWJ1
dGVfXygocGFja2VkKSk7CglfX3UxNiBjcmVhdGlvbkRhdGUgX19hdHRyaWJ1dGVfXygocGFja2Vk
KSk7CglfX3UxNiBjcmVhdGlvblRpbWUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CglfX3UzMiBj
cmVhdG9ySUQgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CglfX3UxNiBtb2RpZnlEYXRlIF9fYXR0
cmlidXRlX18oKHBhY2tlZCkpOwoJX191MTYgbW9kaWZ5VGltZSBfX2F0dHJpYnV0ZV9fKChwYWNr
ZWQpKTsKCV9fdTMyIG1vZGlmaWVySUQgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CglfX3UxNiBh
cmNoaXZlRGF0ZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCV9fdTE2IGFyY2hpdmVUaW1lIF9f
YXR0cmlidXRlX18oKHBhY2tlZCkpOwoJX191MzIgYXJjaGl2ZXJJRCBfX2F0dHJpYnV0ZV9fKChw
YWNrZWQpKTsKCV9fdTE2IGxhc3RBY2Nlc3NEYXRlIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoJ
X191MTYgaW5oZXJpdGFuY2VHcmFudE1hc2sgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CglfX3Ux
NiBpbmhlcml0YW5jZVJldm9rZU1hc2sgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CglfX3UzMiBt
YXhpbXVtU3BhY2UgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cn07CgpzdHJ1Y3Qgbndfc2VhcmNo
X3NlcXVlbmNlIHsKCV9fdTggdm9sTnVtYmVyIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwoJX191
MzIgZGlyQmFzZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCV9fdTMyIHNlcXVlbmNlIF9fYXR0
cmlidXRlX18oKHBhY2tlZCkpOwp9OwoKCiMgMTIgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5V
WC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L25jcF9tb3VudC5oIiAyCgoKCgogCgoK
CgoKCgoKc3RydWN0IG5jcF9tb3VudF9kYXRhIHsKCWludCB2ZXJzaW9uOwoJdW5zaWduZWQgaW50
IG5jcF9mZDsJIAoJX19rZXJuZWxfdWlkX3QgbW91bnRlZF91aWQ7CSAKCV9fa2VybmVsX3BpZF90
IHdkb2dfcGlkOwkJIAoKCXVuc2lnbmVkIGNoYXIgbW91bnRlZF92b2xbKDE2KSAgKyAxXTsKCXVu
c2lnbmVkIGludCB0aW1lX291dDsJIAoKCXVuc2lnbmVkIGludCByZXRyeV9jb3VudDsJIAoJdW5z
aWduZWQgaW50IGZsYWdzOwoKCV9fa2VybmVsX3VpZF90IHVpZDsKCV9fa2VybmVsX2dpZF90IGdp
ZDsKCV9fa2VybmVsX21vZGVfdCBmaWxlX21vZGU7CglfX2tlcm5lbF9tb2RlX3QgZGlyX21vZGU7
Cn07CgoKCnN0cnVjdCBuY3BfbW91bnRfZGF0YV92NCB7CglpbnQgdmVyc2lvbjsKCXVuc2lnbmVk
IGxvbmcgZmxhZ3M7CSAKCSAKCSAKCXVuc2lnbmVkIGxvbmcgbW91bnRlZF91aWQ7CSAKCSAKCWxv
bmcgd2RvZ19waWQ7CQkgCgoJdW5zaWduZWQgaW50IG5jcF9mZDsJIAoJdW5zaWduZWQgaW50IHRp
bWVfb3V0OwkgCgoJdW5zaWduZWQgaW50IHJldHJ5X2NvdW50OwkgCgoJIAoJIAoJdW5zaWduZWQg
bG9uZyB1aWQ7Cgl1bnNpZ25lZCBsb25nIGdpZDsKCSAKCXVuc2lnbmVkIGxvbmcgZmlsZV9tb2Rl
OwoJdW5zaWduZWQgbG9uZyBkaXJfbW9kZTsKfTsKCgoKc3RydWN0IG5jcF9tb3VudF9kYXRhX2tl
cm5lbCB7Cgl1bnNpZ25lZCBsb25nICAgIGZsYWdzOwkJIAoJdW5zaWduZWQgaW50CSBpbnRfZmxh
Z3M7CSAKCglfX2tlcm5lbF91aWQzMl90IG1vdW50ZWRfdWlkOwkgCglfX2tlcm5lbF9waWRfdCAg
IHdkb2dfcGlkOwkJIAoJdW5zaWduZWQgaW50ICAgICBuY3BfZmQ7CSAKCXVuc2lnbmVkIGludCAg
ICAgdGltZV9vdXQ7CSAKCgl1bnNpZ25lZCBpbnQgICAgIHJldHJ5X2NvdW50OwkgCgl1bnNpZ25l
ZCBjaGFyCSBtb3VudGVkX3ZvbFsoMTYpICArIDFdOwoJX19rZXJuZWxfdWlkMzJfdCB1aWQ7Cglf
X2tlcm5lbF9naWQzMl90IGdpZDsKCV9fa2VybmVsX21vZGVfdCAgZmlsZV9tb2RlOwoJX19rZXJu
ZWxfbW9kZV90ICBkaXJfbW9kZTsKfTsKCgoKCiMgMTIgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNM
SU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L25jcF9mc19zYi5oIiAyCgoKCgoK
CnN0cnVjdCBuY3Bfc2VydmVyIHsKCglzdHJ1Y3QgbmNwX21vdW50X2RhdGFfa2VybmVsIG07CSAK
CgoKCV9fdTggbmFtZV9zcGFjZVsoNjQpICArIDJdOwoKCXN0cnVjdCBmaWxlICpuY3BfZmlscDsJ
IAoKCXU4IHNlcXVlbmNlOwoJdTggdGFzazsKCXUxNiBjb25uZWN0aW9uOwkJIAoKCXU4IGNvbXBs
ZXRpb247CQkgCgl1OCBjb25uX3N0YXR1czsJCSAKCgoKCWludCBidWZmZXJfc2l6ZTsJIAoKCWlu
dCByZXBseV9zaXplOwkJIAoKCWludCBwYWNrZXRfc2l6ZTsKCXVuc2lnbmVkIGNoYXIgKnBhY2tl
dDsJIAoKCglpbnQgbG9jazsJCSAKCXN0cnVjdCBzZW1hcGhvcmUgc2VtOwoKCWludCBjdXJyZW50
X3NpemU7CSAKCWludCBoYXNfc3ViZnVuY3Rpb247CglpbnQgbmNwX3JlcGx5X3NpemU7CgoJaW50
IHJvb3Rfc2V0dXBlZDsKCgkgCglpbnQgc2lnbl93YW50ZWQ7CSAKCWludCBzaWduX2FjdGl2ZTsJ
IAoJY2hhciBzaWduX3Jvb3RbOF07CSAKCWNoYXIgc2lnbl9sYXN0WzE2XTsJCgoJIAoJc3RydWN0
IHsKCQlpbnQJYXV0aF90eXBlOwoJCXNpemVfdAlvYmplY3RfbmFtZV9sZW47CgkJdm9pZCoJb2Jq
ZWN0X25hbWU7CgkJaW50CW9iamVjdF90eXBlOwoJfSBhdXRoOwoJIAoJc3RydWN0IHsKCQlzaXpl
X3QJbGVuOwoJCXZvaWQqCWRhdGE7Cgl9IHByaXY7CgoJIAoJc3RydWN0IG5sc190YWJsZSAqbmxz
X3ZvbDsKCXN0cnVjdCBubHNfdGFibGUgKm5sc19pbzsKCgkgCglpbnQgZGVudHJ5X3R0bDsKCgkg
Cgl1bnNpZ25lZCBpbnQgZmxhZ3M7Cn07CgoKCgoKCgoKCnN0YXRpYyBpbmxpbmUgaW50IG5jcF9j
b25uX3ZhbGlkKHN0cnVjdCBuY3Bfc2VydmVyICpzZXJ2ZXIpCnsKCXJldHVybiAoKHNlcnZlci0+
Y29ubl9zdGF0dXMgJiAweDExKSA9PSAwKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIG5jcF9pbnZh
bGlkYXRlX2Nvbm4oc3RydWN0IG5jcF9zZXJ2ZXIgKnNlcnZlcikKewoJc2VydmVyLT5jb25uX3N0
YXR1cyB8PSAweDAxOwp9CgoKCgogCiMgNjg5ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgv
ZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9mcy5oIiAyCgojIDEgIi9ob21lL2Nhcmxv
cy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L3VzYmRldl9m
c19zYi5oIiAxCnN0cnVjdCB1c2JkZXZfc2JfaW5mbyB7CglzdHJ1Y3QgbGlzdF9oZWFkIHNsaXN0
OwoJc3RydWN0IGxpc3RfaGVhZCBpbGlzdDsKCXVpZF90IGRldnVpZDsKCWdpZF90IGRldmdpZDsK
CXVtb2RlX3QgZGV2bW9kZTsKCXVpZF90IGJ1c3VpZDsKCWdpZF90IGJ1c2dpZDsKCXVtb2RlX3Qg
YnVzbW9kZTsKCXVpZF90IGxpc3R1aWQ7CglnaWRfdCBsaXN0Z2lkOwoJdW1vZGVfdCBsaXN0bW9k
ZTsKfTsKIyA2OTAgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQu
eC9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5V
WC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2pmZnMyX2ZzX3NiLmgiIDEKIAoKCgoK
CgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNs
dWRlL2xpbnV4L2NvbXBsZXRpb24uaCIgMQoKCgogCgoKCgoKCgoKc3RydWN0IGNvbXBsZXRpb24g
ewoJdW5zaWduZWQgaW50IGRvbmU7Cgl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0Owp9OwoKCgoKCgoK
c3RhdGljIGlubGluZSB2b2lkIGluaXRfY29tcGxldGlvbihzdHJ1Y3QgY29tcGxldGlvbiAqeCkK
ewoJeC0+ZG9uZSA9IDA7Cglpbml0X3dhaXRxdWV1ZV9oZWFkKCZ4LT53YWl0KTsKfQoKZXh0ZXJu
IHZvaWQgIHdhaXRfZm9yX2NvbXBsZXRpb24oc3RydWN0IGNvbXBsZXRpb24gKikgIDsKZXh0ZXJu
IHZvaWQgIGNvbXBsZXRlKHN0cnVjdCBjb21wbGV0aW9uICopICA7CgoKCgojIDggIi9ob21lL2Nh
cmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2pmZnMy
X2ZzX3NiLmgiIDIKCgoKCgoKCgogCgoKCnN0cnVjdCBqZmZzMl9zYl9pbmZvIHsKCXN0cnVjdCBt
dGRfaW5mbyAqbXRkOwoKCV9fdTMyIGhpZ2hlc3RfaW5vOwoJdW5zaWduZWQgaW50IGZsYWdzOwoJ
c3BpbmxvY2tfdCBub2RlbGlzdF9sb2NrOwoKCSAKCXN0cnVjdCB0YXNrX3N0cnVjdCAqZ2NfdGFz
azsJIAoJc3RydWN0IHNlbWFwaG9yZSBnY190aHJlYWRfc3RhcnQ7ICAKCXN0cnVjdCBjb21wbGV0
aW9uIGdjX3RocmVhZF9leGl0OyAgCgkgCgkgCgoJc3RydWN0IHNlbWFwaG9yZSBhbGxvY19zZW07
CSAKCgoKCglfX3UzMiBmbGFzaF9zaXplOwoJX191MzIgdXNlZF9zaXplOwoJX191MzIgZGlydHlf
c2l6ZTsKCV9fdTMyIGZyZWVfc2l6ZTsKCV9fdTMyIGVyYXNpbmdfc2l6ZTsKCV9fdTMyIGJhZF9z
aXplOwoJX191MzIgc2VjdG9yX3NpemU7CgkgCgkgCgoJX191MzIgbnJfZnJlZV9ibG9ja3M7Cglf
X3UzMiBucl9lcmFzaW5nX2Jsb2NrczsKCglfX3UzMiBucl9ibG9ja3M7CglzdHJ1Y3QgamZmczJf
ZXJhc2VibG9jayAqYmxvY2tzOwkgCgoJc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKm5leHRibG9j
azsJIAoKCXN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpnY2Jsb2NrOwkgCgoJc3RydWN0IGxpc3Rf
aGVhZCBjbGVhbl9saXN0OwkJIAoJc3RydWN0IGxpc3RfaGVhZCBkaXJ0eV9saXN0OwkJIAoJc3Ry
dWN0IGxpc3RfaGVhZCBlcmFzaW5nX2xpc3Q7CQkgCglzdHJ1Y3QgbGlzdF9oZWFkIGVyYXNlX3Bl
bmRpbmdfbGlzdDsJIAoJc3RydWN0IGxpc3RfaGVhZCBlcmFzZV9jb21wbGV0ZV9saXN0OwkgCglz
dHJ1Y3QgbGlzdF9oZWFkIGZyZWVfbGlzdDsJCSAKCXN0cnVjdCBsaXN0X2hlYWQgYmFkX2xpc3Q7
CQkgCglzdHJ1Y3QgbGlzdF9oZWFkIGJhZF91c2VkX2xpc3Q7CQkgCgoJc3BpbmxvY2tfdCBlcmFz
ZV9jb21wbGV0aW9uX2xvY2s7CSAKCgl3YWl0X3F1ZXVlX2hlYWRfdCBlcmFzZV93YWl0OwkJIAoJ
c3RydWN0IGpmZnMyX2lub2RlX2NhY2hlICppbm9jYWNoZV9saXN0WzEgXTsKCXNwaW5sb2NrX3Qg
aW5vY2FjaGVfbG9jazsKfTsKCgoKCgoKCgoKCiMgNjkyICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VD
TElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9mcy5oIiAyCgoKZXh0ZXJuIHN0
cnVjdCBsaXN0X2hlYWQgc3VwZXJfYmxvY2tzOwpleHRlcm4gc3BpbmxvY2tfdCBzYl9sb2NrOwoK
CgpzdHJ1Y3Qgc3VwZXJfYmxvY2sgewoJc3RydWN0IGxpc3RfaGVhZAlzX2xpc3Q7CQkgCglrZGV2
X3QJCQlzX2RldjsKCXVuc2lnbmVkIGxvbmcJCXNfYmxvY2tzaXplOwoJdW5zaWduZWQgY2hhcgkJ
c19ibG9ja3NpemVfYml0czsKCXVuc2lnbmVkIGNoYXIJCXNfZGlydDsKCXVuc2lnbmVkIGxvbmcg
bG9uZwlzX21heGJ5dGVzOwkgCglzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZQkqc190eXBlOwoJc3Ry
dWN0IHN1cGVyX29wZXJhdGlvbnMJKnNfb3A7CglzdHJ1Y3QgZHF1b3Rfb3BlcmF0aW9ucwkqZHFf
b3A7Cgl1bnNpZ25lZCBsb25nCQlzX2ZsYWdzOwoJdW5zaWduZWQgbG9uZwkJc19tYWdpYzsKCXN0
cnVjdCBkZW50cnkJCSpzX3Jvb3Q7CglzdHJ1Y3Qgcndfc2VtYXBob3JlCXNfdW1vdW50OwoJc3Ry
dWN0IHNlbWFwaG9yZQlzX2xvY2s7CglpbnQJCQlzX2NvdW50OwoJYXRvbWljX3QJCXNfYWN0aXZl
OwoKCXN0cnVjdCBsaXN0X2hlYWQJc19kaXJ0eTsJIAoJc3RydWN0IGxpc3RfaGVhZAlzX2xvY2tl
ZF9pbm9kZXM7IAoJc3RydWN0IGxpc3RfaGVhZAlzX2ZpbGVzOwoKCXN0cnVjdCBibG9ja19kZXZp
Y2UJKnNfYmRldjsKCXN0cnVjdCBsaXN0X2hlYWQJc19pbnN0YW5jZXM7CglzdHJ1Y3QgcXVvdGFf
bW91bnRfb3B0aW9ucyBzX2RxdW90OwkgCgoJdW5pb24gewoJCXN0cnVjdCBtaW5peF9zYl9pbmZv
CW1pbml4X3NiOwoJCXN0cnVjdCBleHQyX3NiX2luZm8JZXh0Ml9zYjsKCQlzdHJ1Y3QgZXh0M19z
Yl9pbmZvCWV4dDNfc2I7CgkJc3RydWN0IGhwZnNfc2JfaW5mbwlocGZzX3NiOwoJCXN0cnVjdCBu
dGZzX3NiX2luZm8JbnRmc19zYjsKCQlzdHJ1Y3QgbXNkb3Nfc2JfaW5mbwltc2Rvc19zYjsKCQlz
dHJ1Y3QgaXNvZnNfc2JfaW5mbwlpc29mc19zYjsKCQlzdHJ1Y3QgbmZzX3NiX2luZm8JbmZzX3Ni
OwoJCXN0cnVjdCBzeXN2X3NiX2luZm8Jc3lzdl9zYjsKCQlzdHJ1Y3QgYWZmc19zYl9pbmZvCWFm
ZnNfc2I7CgkJc3RydWN0IHVmc19zYl9pbmZvCXVmc19zYjsKCQlzdHJ1Y3QgZWZzX3NiX2luZm8J
ZWZzX3NiOwoJCXN0cnVjdCBzaG1lbV9zYl9pbmZvCXNobWVtX3NiOwoJCXN0cnVjdCByb21mc19z
Yl9pbmZvCXJvbWZzX3NiOwoJCXN0cnVjdCBzbWJfc2JfaW5mbwlzbWJmc19zYjsKCQlzdHJ1Y3Qg
aGZzX3NiX2luZm8JaGZzX3NiOwoJCXN0cnVjdCBhZGZzX3NiX2luZm8JYWRmc19zYjsKCQlzdHJ1
Y3QgcW54NF9zYl9pbmZvCXFueDRfc2I7CgkJc3RydWN0IHJlaXNlcmZzX3NiX2luZm8JcmVpc2Vy
ZnNfc2I7CgkJc3RydWN0IGJmc19zYl9pbmZvCWJmc19zYjsKCQlzdHJ1Y3QgdWRmX3NiX2luZm8J
dWRmX3NiOwoJCXN0cnVjdCBuY3Bfc2VydmVyIAluY3Bmc19zYjsKCQlzdHJ1Y3QgdXNiZGV2X3Ni
X2luZm8gICB1c2JkZXZmc19zYjsKCQlzdHJ1Y3QgamZmczJfc2JfaW5mbwlqZmZzMl9zYjsKCQlz
dHJ1Y3QgY3JhbWZzX3NiX2luZm8JY3JhbWZzX3NiOwoJCXZvaWQJCQkqZ2VuZXJpY19zYnA7Cgl9
IHU7CgkgCgoKCglzdHJ1Y3Qgc2VtYXBob3JlIHNfdmZzX3JlbmFtZV9zZW07CSAKCgkgCgoKCgoK
CglzdHJ1Y3Qgc2VtYXBob3JlIHNfbmZzZF9mcmVlX3BhdGhfc2VtOwp9OwoKIAoKCmV4dGVybiBp
bnQgdmZzX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLCBpbnQpOwpleHRl
cm4gaW50IHZmc19ta2RpcihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLCBpbnQpOwpl
eHRlcm4gaW50IHZmc19ta25vZChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLCBpbnQs
IGRldl90KTsKZXh0ZXJuIGludCB2ZnNfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRl
bnRyeSAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50IHZmc19saW5rKHN0cnVjdCBkZW50cnkg
Kiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKik7CmV4dGVybiBpbnQgdmZzX3JtZGly
KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICopOwpleHRlcm4gaW50IHZmc191bmxpbmso
c3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKik7CmV4dGVybiBpbnQgdmZzX3JlbmFtZShz
dHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRl
bnRyeSAqKTsKCiAKCgoKCgoKCgoKCgoKIAoKCgoKCnR5cGVkZWYgaW50ICgqZmlsbGRpcl90KSh2
b2lkICosIGNvbnN0IGNoYXIgKiwgaW50LCBsb2ZmX3QsIGlub190LCB1bnNpZ25lZCk7CgpzdHJ1
Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgewoJaW50ICgqb3BlbikgKHN0cnVjdCBpbm9kZSAq
LCBzdHJ1Y3QgZmlsZSAqKTsKCWludCAoKnJlbGVhc2UpIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0
IGZpbGUgKik7CglpbnQgKCppb2N0bCkgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLCB1
bnNpZ25lZCwgdW5zaWduZWQgbG9uZyk7CglpbnQgKCpjaGVja19tZWRpYV9jaGFuZ2UpIChrZGV2
X3QpOwoJaW50ICgqcmV2YWxpZGF0ZSkgKGtkZXZfdCk7CglzdHJ1Y3QgbW9kdWxlICpvd25lcjsK
CglpbnQgKCpyb21wdHIpIChrZGV2X3QsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKCn07Cgog
CgoKCgpzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHsKCXN0cnVjdCBtb2R1bGUgKm93bmVyOwoJbG9m
Zl90ICgqbGxzZWVrKSAoc3RydWN0IGZpbGUgKiwgbG9mZl90LCBpbnQpOwoJc3NpemVfdCAoKnJl
YWQpIChzdHJ1Y3QgZmlsZSAqLCBjaGFyICosIHNpemVfdCwgbG9mZl90ICopOwoJc3NpemVfdCAo
KndyaXRlKSAoc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciAqLCBzaXplX3QsIGxvZmZfdCAqKTsK
CWludCAoKnJlYWRkaXIpIChzdHJ1Y3QgZmlsZSAqLCB2b2lkICosIGZpbGxkaXJfdCk7Cgl1bnNp
Z25lZCBpbnQgKCpwb2xsKSAoc3RydWN0IGZpbGUgKiwgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0
ICopOwoJaW50ICgqaW9jdGwpIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgdW5zaWdu
ZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKCWludCAoKm1tYXApIChzdHJ1Y3QgZmlsZSAqLCBzdHJ1
Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CglpbnQgKCpvcGVuKSAoc3RydWN0IGlub2RlICosIHN0cnVj
dCBmaWxlICopOwoJaW50ICgqZmx1c2gpIChzdHJ1Y3QgZmlsZSAqKTsKCWludCAoKnJlbGVhc2Up
IChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CglpbnQgKCpmc3luYykgKHN0cnVjdCBm
aWxlICosIHN0cnVjdCBkZW50cnkgKiwgaW50IGRhdGFzeW5jKTsKCWludCAoKmZhc3luYykgKGlu
dCwgc3RydWN0IGZpbGUgKiwgaW50KTsKCWludCAoKmxvY2spIChzdHJ1Y3QgZmlsZSAqLCBpbnQs
IHN0cnVjdCBmaWxlX2xvY2sgKik7Cglzc2l6ZV90ICgqcmVhZHYpIChzdHJ1Y3QgZmlsZSAqLCBj
b25zdCBzdHJ1Y3QgaW92ZWMgKiwgdW5zaWduZWQgbG9uZywgbG9mZl90ICopOwoJc3NpemVfdCAo
KndyaXRldikgKHN0cnVjdCBmaWxlICosIGNvbnN0IHN0cnVjdCBpb3ZlYyAqLCB1bnNpZ25lZCBs
b25nLCBsb2ZmX3QgKik7Cglzc2l6ZV90ICgqc2VuZHBhZ2UpIChzdHJ1Y3QgZmlsZSAqLCBzdHJ1
Y3QgcGFnZSAqLCBpbnQsIHNpemVfdCwgbG9mZl90ICosIGludCk7Cgl1bnNpZ25lZCBsb25nICgq
Z2V0X3VubWFwcGVkX2FyZWEpKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVk
IGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwoKCWludCAoKnJvbXB0cikgKHN0
cnVjdCBmaWxlICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKCn07CgpzdHJ1Y3QgaW5vZGVf
b3BlcmF0aW9ucyB7CglpbnQgKCpjcmVhdGUpIChzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5
ICosaW50KTsKCXN0cnVjdCBkZW50cnkgKiAoKmxvb2t1cCkgKHN0cnVjdCBpbm9kZSAqLHN0cnVj
dCBkZW50cnkgKik7CglpbnQgKCpsaW5rKSAoc3RydWN0IGRlbnRyeSAqLHN0cnVjdCBpbm9kZSAq
LHN0cnVjdCBkZW50cnkgKik7CglpbnQgKCp1bmxpbmspIChzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3Qg
ZGVudHJ5ICopOwoJaW50ICgqc3ltbGluaykgKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkg
Kixjb25zdCBjaGFyICopOwoJaW50ICgqbWtkaXIpIChzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVu
dHJ5ICosaW50KTsKCWludCAoKnJtZGlyKSAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAq
KTsKCWludCAoKm1rbm9kKSAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRyeSAqLGludCxpbnQp
OwoJaW50ICgqcmVuYW1lKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiwKCQkJc3Ry
dWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKik7CglpbnQgKCpyZWFkbGluaykgKHN0cnVjdCBk
ZW50cnkgKiwgY2hhciAqLGludCk7CglpbnQgKCpmb2xsb3dfbGluaykgKHN0cnVjdCBkZW50cnkg
Kiwgc3RydWN0IG5hbWVpZGF0YSAqKTsKCXZvaWQgKCp0cnVuY2F0ZSkgKHN0cnVjdCBpbm9kZSAq
KTsKCWludCAoKnBlcm1pc3Npb24pIChzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKCWludCAoKnJldmFs
aWRhdGUpIChzdHJ1Y3QgZGVudHJ5ICopOwoJaW50ICgqc2V0YXR0cikgKHN0cnVjdCBkZW50cnkg
Kiwgc3RydWN0IGlhdHRyICopOwoJaW50ICgqZ2V0YXR0cikgKHN0cnVjdCBkZW50cnkgKiwgc3Ry
dWN0IGlhdHRyICopOwp9OwoKc3RydWN0IHNlcV9maWxlOwoKIAoKCgpzdHJ1Y3Qgc3VwZXJfb3Bl
cmF0aW9ucyB7Cgl2b2lkICgqcmVhZF9pbm9kZSkgKHN0cnVjdCBpbm9kZSAqKTsKICAKICAJIAoK
CgoKCiAgICAJdm9pZCAoKnJlYWRfaW5vZGUyKSAoc3RydWN0IGlub2RlICosIHZvaWQgKikgOwog
ICAJdm9pZCAoKmRpcnR5X2lub2RlKSAoc3RydWN0IGlub2RlICopOwoJdm9pZCAoKndyaXRlX2lu
b2RlKSAoc3RydWN0IGlub2RlICosIGludCk7Cgl2b2lkICgqcHV0X2lub2RlKSAoc3RydWN0IGlu
b2RlICopOwoJdm9pZCAoKmRlbGV0ZV9pbm9kZSkgKHN0cnVjdCBpbm9kZSAqKTsKCXZvaWQgKCpw
dXRfc3VwZXIpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7Cgl2b2lkICgqd3JpdGVfc3VwZXIpIChz
dHJ1Y3Qgc3VwZXJfYmxvY2sgKik7Cgl2b2lkICgqd3JpdGVfc3VwZXJfbG9ja2ZzKSAoc3RydWN0
IHN1cGVyX2Jsb2NrICopOwoJdm9pZCAoKnVubG9ja2ZzKSAoc3RydWN0IHN1cGVyX2Jsb2NrICop
OwoJaW50ICgqc3RhdGZzKSAoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBzdGF0ZnMgKik7
CglpbnQgKCpyZW1vdW50X2ZzKSAoc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCAqLCBjaGFyICop
OwoJdm9pZCAoKmNsZWFyX2lub2RlKSAoc3RydWN0IGlub2RlICopOwoJdm9pZCAoKnVtb3VudF9i
ZWdpbikgKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKCgkgCgoKCgoKCgoKCgoKCgoKCgoKCgoKCglz
dHJ1Y3QgZGVudHJ5ICogKCpmaF90b19kZW50cnkpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIF9f
dTMyICpmaCwgaW50IGxlbiwgaW50IGZodHlwZSwgaW50IHBhcmVudCk7CglpbnQgKCpkZW50cnlf
dG9fZmgpKHN0cnVjdCBkZW50cnkgKiwgX191MzIgKmZoLCBpbnQgKmxlbnAsIGludCBuZWVkX3Bh
cmVudCk7CglpbnQgKCpzaG93X29wdGlvbnMpKHN0cnVjdCBzZXFfZmlsZSAqLCBzdHJ1Y3QgdmZz
bW91bnQgKik7Cn07CgogCgoKCgoKCgoKCmV4dGVybiB2b2lkIF9fbWFya19pbm9kZV9kaXJ0eShz
dHJ1Y3QgaW5vZGUgKiwgaW50KTsKc3RhdGljIGlubGluZSB2b2lkIG1hcmtfaW5vZGVfZGlydHko
c3RydWN0IGlub2RlICppbm9kZSkKewoJX19tYXJrX2lub2RlX2RpcnR5KGlub2RlLCAoMSAgfCAy
ICB8IDQgKSApOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgbWFya19pbm9kZV9kaXJ0eV9zeW5jKHN0
cnVjdCBpbm9kZSAqaW5vZGUpCnsKCV9fbWFya19pbm9kZV9kaXJ0eShpbm9kZSwgMSApOwp9Cgpz
dGF0aWMgaW5saW5lIHZvaWQgbWFya19pbm9kZV9kaXJ0eV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlu
b2RlKQp7CglfX21hcmtfaW5vZGVfZGlydHkoaW5vZGUsIDQgKTsKfQoKc3RydWN0IGRxdW90X29w
ZXJhdGlvbnMgewoJdm9pZCAoKmluaXRpYWxpemUpIChzdHJ1Y3QgaW5vZGUgKiwgc2hvcnQpOwoJ
dm9pZCAoKmRyb3ApIChzdHJ1Y3QgaW5vZGUgKik7CglpbnQgKCphbGxvY19ibG9jaykgKHN0cnVj
dCBpbm9kZSAqLCB1bnNpZ25lZCBsb25nLCBjaGFyKTsKCWludCAoKmFsbG9jX2lub2RlKSAoY29u
c3Qgc3RydWN0IGlub2RlICosIHVuc2lnbmVkIGxvbmcpOwoJdm9pZCAoKmZyZWVfYmxvY2spIChz
dHJ1Y3QgaW5vZGUgKiwgdW5zaWduZWQgbG9uZyk7Cgl2b2lkICgqZnJlZV9pbm9kZSkgKGNvbnN0
IHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25lZCBsb25nKTsKCWludCAoKnRyYW5zZmVyKSAoc3RydWN0
IGlub2RlICosIHN0cnVjdCBpYXR0ciAqKTsKfTsKCnN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIHsK
CWNvbnN0IGNoYXIgKm5hbWU7CglpbnQgZnNfZmxhZ3M7CglzdHJ1Y3Qgc3VwZXJfYmxvY2sgKigq
cmVhZF9zdXBlcikgKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB2b2lkICosIGludCk7CglzdHJ1Y3Qg
bW9kdWxlICpvd25lcjsKCXN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICogbmV4dDsKCXN0cnVjdCBs
aXN0X2hlYWQgZnNfc3VwZXJzOwp9OwoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKZXh0ZXJuIGlu
dCByZWdpc3Rlcl9maWxlc3lzdGVtKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICopOwpleHRlcm4g
aW50IHVucmVnaXN0ZXJfZmlsZXN5c3RlbShzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqKTsKZXh0
ZXJuIHN0cnVjdCB2ZnNtb3VudCAqa2Vybl9tb3VudChzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAq
KTsKZXh0ZXJuIGludCBtYXlfdW1vdW50KHN0cnVjdCB2ZnNtb3VudCAqKTsKZXh0ZXJuIGxvbmcg
ZG9fbW91bnQoY2hhciAqLCBjaGFyICosIGNoYXIgKiwgdW5zaWduZWQgbG9uZywgdm9pZCAqKTsK
CgoKZXh0ZXJuIGludCB2ZnNfc3RhdGZzKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3Qgc3Rh
dGZzICopOwoKIAoKIAoKCgoKCmV4dGVybiBpbnQgbG9ja3NfbWFuZGF0b3J5X2xvY2tlZChzdHJ1
Y3QgaW5vZGUgKik7CmV4dGVybiBpbnQgbG9ja3NfbWFuZGF0b3J5X2FyZWEoaW50LCBzdHJ1Y3Qg
aW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgbG9mZl90LCBzaXplX3QpOwoKIAoKCgoKCgpzdGF0aWMg
aW5saW5lIGludCBsb2Nrc192ZXJpZnlfbG9ja2VkKHN0cnVjdCBpbm9kZSAqaW5vZGUpCnsKCWlm
ICgoKCggICBpbm9kZSAgICktPmlfc2ItPnNfZmxhZ3MgJiAoICA2NCAgKSkgICAmJiAoKCBpbm9k
ZSApLT5pX21vZGUgJiAoMDAwMjAwMCAgfCAwMDAxMCApKSA9PSAwMDAyMDAwICkgKQoJCXJldHVy
biBsb2Nrc19tYW5kYXRvcnlfbG9ja2VkKGlub2RlKTsKCXJldHVybiAwOwp9CgpzdGF0aWMgaW5s
aW5lIGludCBsb2Nrc192ZXJpZnlfYXJlYShpbnQgcmVhZF93cml0ZSwgc3RydWN0IGlub2RlICpp
bm9kZSwKCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlscCwgbG9mZl90IG9mZnNldCwKCQkJCSAgICBz
aXplX3QgY291bnQpCnsKCWlmIChpbm9kZS0+aV9mbG9jayAmJiAoKCggICBpbm9kZSAgICktPmlf
c2ItPnNfZmxhZ3MgJiAoICA2NCAgKSkgICAmJiAoKCBpbm9kZSApLT5pX21vZGUgJiAoMDAwMjAw
MCAgfCAwMDAxMCApKSA9PSAwMDAyMDAwICkgKQoJCXJldHVybiBsb2Nrc19tYW5kYXRvcnlfYXJl
YShyZWFkX3dyaXRlLCBpbm9kZSwgZmlscCwgb2Zmc2V0LCBjb3VudCk7CglyZXR1cm4gMDsKfQoK
c3RhdGljIGlubGluZSBpbnQgbG9ja3NfdmVyaWZ5X3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5v
ZGUsCgkJCQkgICAgc3RydWN0IGZpbGUgKmZpbHAsCgkJCQkgICAgbG9mZl90IHNpemUpCnsKCWlm
IChpbm9kZS0+aV9mbG9jayAmJiAoKCggICBpbm9kZSAgICktPmlfc2ItPnNfZmxhZ3MgJiAoICA2
NCAgKSkgICAmJiAoKCBpbm9kZSApLT5pX21vZGUgJiAoMDAwMjAwMCAgfCAwMDAxMCApKSA9PSAw
MDAyMDAwICkgKQoJCXJldHVybiBsb2Nrc19tYW5kYXRvcnlfYXJlYSgKCQkJMiAsIGlub2RlLCBm
aWxwLAoJCQlzaXplIDwgaW5vZGUtPmlfc2l6ZSA/IHNpemUgOiBpbm9kZS0+aV9zaXplLAoJCQko
c2l6ZSA8IGlub2RlLT5pX3NpemUgPyBpbm9kZS0+aV9zaXplIC0gc2l6ZQoJCQkgOiBzaXplIC0g
aW5vZGUtPmlfc2l6ZSkKCQkpOwoJcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50IGdldF9s
ZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBpbnQgbW9kZSkKewoJaWYgKGlub2Rl
LT5pX2Zsb2NrICYmIChpbm9kZS0+aV9mbG9jay0+ZmxfZmxhZ3MgJiAzMiApKQoJCXJldHVybiBf
X2dldF9sZWFzZShpbm9kZSwgbW9kZSk7CglyZXR1cm4gMDsKfQoKIAoKICAgbG9uZyBzeXNfb3Bl
bihjb25zdCBjaGFyICosIGludCwgaW50KTsKICAgbG9uZyBzeXNfY2xvc2UodW5zaWduZWQgaW50
KTsJIApleHRlcm4gaW50IGRvX3RydW5jYXRlKHN0cnVjdCBkZW50cnkgKiwgbG9mZl90IHN0YXJ0
KTsKCmV4dGVybiBzdHJ1Y3QgZmlsZSAqZmlscF9vcGVuKGNvbnN0IGNoYXIgKiwgaW50LCBpbnQp
OwpleHRlcm4gc3RydWN0IGZpbGUgKiBkZW50cnlfb3BlbihzdHJ1Y3QgZGVudHJ5ICosIHN0cnVj
dCB2ZnNtb3VudCAqLCBpbnQpOwpleHRlcm4gaW50IGZpbHBfY2xvc2Uoc3RydWN0IGZpbGUgKiwg
Zmxfb3duZXJfdCBpZCk7CmV4dGVybiBjaGFyICogZ2V0bmFtZShjb25zdCBjaGFyICopOwoKIApl
eHRlcm4gdm9pZCB2ZnNfY2FjaGVzX2luaXQodW5zaWduZWQgbG9uZyk7CgoKCgplbnVtIHtCREVW
X0ZJTEUsIEJERVZfU1dBUCwgQkRFVl9GUywgQkRFVl9SQVd9OwpleHRlcm4gaW50IHJlZ2lzdGVy
X2Jsa2Rldih1bnNpZ25lZCBpbnQsIGNvbnN0IGNoYXIgKiwgc3RydWN0IGJsb2NrX2RldmljZV9v
cGVyYXRpb25zICopOwpleHRlcm4gaW50IHVucmVnaXN0ZXJfYmxrZGV2KHVuc2lnbmVkIGludCwg
Y29uc3QgY2hhciAqKTsKZXh0ZXJuIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZ2V0KGRldl90KTsK
ZXh0ZXJuIGludCBiZF9hY3F1aXJlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwpleHRlcm4gdm9pZCBi
ZF9mb3JnZXQoc3RydWN0IGlub2RlICppbm9kZSk7CmV4dGVybiB2b2lkIGJkcHV0KHN0cnVjdCBi
bG9ja19kZXZpY2UgKik7CmV4dGVybiBzdHJ1Y3QgY2hhcl9kZXZpY2UgKmNkZ2V0KGRldl90KTsK
ZXh0ZXJuIHZvaWQgY2RwdXQoc3RydWN0IGNoYXJfZGV2aWNlICopOwpleHRlcm4gaW50IGJsa2Rl
dl9vcGVuKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKZXh0ZXJuIGludCBibGtkZXZf
Y2xvc2Uoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOwpleHRlcm4gc3RydWN0IGZpbGVf
b3BlcmF0aW9ucyBkZWZfYmxrX2ZvcHM7CmV4dGVybiBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVy
YXRpb25zIGRlZl9ibGtfYW9wczsKZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVmX2Zp
Zm9fZm9wczsKZXh0ZXJuIGludCBpb2N0bF9ieV9iZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKiwg
dW5zaWduZWQsIHVuc2lnbmVkIGxvbmcpOwpleHRlcm4gaW50IGJsa2Rldl9nZXQoc3RydWN0IGJs
b2NrX2RldmljZSAqLCBtb2RlX3QsIHVuc2lnbmVkLCBpbnQpOwpleHRlcm4gaW50IGJsa2Rldl9w
dXQoc3RydWN0IGJsb2NrX2RldmljZSAqLCBpbnQpOwoKIApleHRlcm4gY29uc3Qgc3RydWN0IGJs
b2NrX2RldmljZV9vcGVyYXRpb25zICpnZXRfYmxrZm9wcyh1bnNpZ25lZCBpbnQpOwpleHRlcm4g
aW50IHJlZ2lzdGVyX2NocmRldih1bnNpZ25lZCBpbnQsIGNvbnN0IGNoYXIgKiwgc3RydWN0IGZp
bGVfb3BlcmF0aW9ucyAqKTsKZXh0ZXJuIGludCB1bnJlZ2lzdGVyX2NocmRldih1bnNpZ25lZCBp
bnQsIGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgY2hyZGV2X29wZW4oc3RydWN0IGlub2RlICos
IHN0cnVjdCBmaWxlICopOwpleHRlcm4gY29uc3QgY2hhciAqIGJkZXZuYW1lKGtkZXZfdCk7CmV4
dGVybiBjb25zdCBjaGFyICogY2Rldm5hbWUoa2Rldl90KTsKZXh0ZXJuIGNvbnN0IGNoYXIgKiBr
ZGV2bmFtZShrZGV2X3QpOwpleHRlcm4gdm9pZCBpbml0X3NwZWNpYWxfaW5vZGUoc3RydWN0IGlu
b2RlICosIHVtb2RlX3QsIGludCk7CgogCmV4dGVybiB2b2lkIG1ha2VfYmFkX2lub2RlKHN0cnVj
dCBpbm9kZSAqKTsKZXh0ZXJuIGludCBpc19iYWRfaW5vZGUoc3RydWN0IGlub2RlICopOwoKZXh0
ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmVhZF9maWZvX2ZvcHM7CmV4dGVybiBzdHJ1Y3Qg
ZmlsZV9vcGVyYXRpb25zIHdyaXRlX2ZpZm9fZm9wczsKZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJh
dGlvbnMgcmR3cl9maWZvX2ZvcHM7CmV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJlYWRf
cGlwZV9mb3BzOwpleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB3cml0ZV9waXBlX2ZvcHM7
CmV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJkd3JfcGlwZV9mb3BzOwoKZXh0ZXJuIGlu
dCBmc19tYXlfcmVtb3VudF9ybyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CgpleHRlcm4gaW50IHRy
eV90b19mcmVlX2J1ZmZlcnMoc3RydWN0IHBhZ2UgKiwgdW5zaWduZWQgaW50KTsKZXh0ZXJuIHZv
aWQgcmVmaWxlX2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBidWYpOwpleHRlcm4gdm9pZCBj
cmVhdGVfZW1wdHlfYnVmZmVycyhzdHJ1Y3QgcGFnZSAqLCBrZGV2X3QsIHVuc2lnbmVkIGxvbmcp
OwpleHRlcm4gdm9pZCBlbmRfYnVmZmVyX2lvX3N5bmMoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwg
aW50IHVwdG9kYXRlKTsKCiAKZXh0ZXJuIHZvaWQgc2V0X2J1ZmZlcl9hc3luY19pbyhzdHJ1Y3Qg
YnVmZmVyX2hlYWQgKmJoKSA7CgoKCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfYmgoc3RydWN0
IGJ1ZmZlcl9oZWFkICogYmgpCnsKICAgICAgICBhdG9taWNfaW5jKCYoYmgpLT5iX2NvdW50KTsK
fQoKc3RhdGljIGlubGluZSB2b2lkIHB1dF9iaChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQp7CiAg
ICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6IDogOiJtZW1vcnkiKSAgOwogICAgICAgIGF0
b21pY19kZWMoJmJoLT5iX2NvdW50KTsKfQoKIAoKCnN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX2J1
ZmZlcl91cHRvZGF0ZShzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaCwgaW50IG9uKQp7CglpZiAob24p
CgkJc2V0X2JpdChCSF9VcHRvZGF0ZSwgJmJoLT5iX3N0YXRlKTsKCWVsc2UKCQljbGVhcl9iaXQo
QkhfVXB0b2RhdGUsICZiaC0+Yl9zdGF0ZSk7Cn0KCgoKc3RhdGljIGlubGluZSB2b2lkIF9fbWFy
a19idWZmZXJfY2xlYW4oc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKewoJcmVmaWxlX2J1ZmZlcihi
aCk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX2J1ZmZlcl9jbGVhbihzdHJ1Y3QgYnVmZmVy
X2hlYWQgKiBiaCkKewoJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChCSF9EaXJ0eSwgJiggYmggKS0+
Yl9zdGF0ZSkgKQoJCV9fbWFya19idWZmZXJfY2xlYW4oYmgpOwp9CgpleHRlcm4gdm9pZCAgX19t
YXJrX2RpcnR5KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpICA7CmV4dGVybiB2b2lkICBfX21hcmtf
YnVmZmVyX2RpcnR5KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpICA7CmV4dGVybiB2b2lkICBtYXJr
X2J1ZmZlcl9kaXJ0eShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKSAgOwpleHRlcm4gdm9pZCAgYnVm
ZmVyX2luc2VydF9pbm9kZV9kYXRhX3F1ZXVlKHN0cnVjdCBidWZmZXJfaGVhZCAqLCBzdHJ1Y3Qg
aW5vZGUgKikgIDsKCgoKc3RhdGljIGlubGluZSB2b2lkIG1hcmtfYnVmZmVyX2FzeW5jKHN0cnVj
dCBidWZmZXJfaGVhZCAqIGJoLCBpbnQgb24pCnsKCWlmIChvbikKCQlzZXRfYml0KEJIX0FzeW5j
LCAmYmgtPmJfc3RhdGUpOwoJZWxzZQoJCWNsZWFyX2JpdChCSF9Bc3luYywgJmJoLT5iX3N0YXRl
KTsKfQoKIAoKCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBidWZmZXJfSU9fZXJyb3Ioc3RydWN0IGJ1
ZmZlcl9oZWFkICogYmgpCnsKCW1hcmtfYnVmZmVyX2NsZWFuKGJoKTsKCSAKCgoJYmgtPmJfZW5k
X2lvKGJoLCAwKTsKfQoKZXh0ZXJuIHZvaWQgYnVmZmVyX2luc2VydF9pbm9kZV9xdWV1ZShzdHJ1
Y3QgYnVmZmVyX2hlYWQgKiwgc3RydWN0IGlub2RlICopOwpzdGF0aWMgaW5saW5lIHZvaWQgbWFy
a19idWZmZXJfZGlydHlfaW5vZGUoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgc3RydWN0IGlub2Rl
ICppbm9kZSkKewoJbWFya19idWZmZXJfZGlydHkoYmgpOwoJYnVmZmVyX2luc2VydF9pbm9kZV9x
dWV1ZShiaCwgaW5vZGUpOwp9CgpleHRlcm4gdm9pZCBzZXRfYnVmZmVyX2ZsdXNodGltZShzdHJ1
Y3QgYnVmZmVyX2hlYWQgKik7CmV4dGVybiB2b2lkIGJhbGFuY2VfZGlydHkodm9pZCk7CmV4dGVy
biBpbnQgY2hlY2tfZGlza19jaGFuZ2Uoa2Rldl90KTsKZXh0ZXJuIGludCBpbnZhbGlkYXRlX2lu
b2RlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CmV4dGVybiBpbnQgaW52YWxpZGF0ZV9kZXZpY2Uo
a2Rldl90LCBpbnQpOwpleHRlcm4gdm9pZCBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzKHN0cnVjdCBp
bm9kZSAqKTsKZXh0ZXJuIHZvaWQgaW52YWxpZGF0ZV9pbm9kZV9wYWdlczIoc3RydWN0IGFkZHJl
c3Nfc3BhY2UgKik7CmV4dGVybiB2b2lkIGludmFsaWRhdGVfaW5vZGVfYnVmZmVycyhzdHJ1Y3Qg
aW5vZGUgKik7CgoKZXh0ZXJuIHZvaWQgaW52YWxpZGF0ZV9iZGV2KHN0cnVjdCBibG9ja19kZXZp
Y2UgKiwgaW50KTsKZXh0ZXJuIHZvaWQgX19pbnZhbGlkYXRlX2J1ZmZlcnMoa2Rldl90IGRldiwg
aW50KTsKZXh0ZXJuIHZvaWQgc3luY19pbm9kZXMoa2Rldl90KTsKZXh0ZXJuIHZvaWQgc3luY191
bmxvY2tlZF9pbm9kZXModm9pZCk7CmV4dGVybiB2b2lkIHdyaXRlX2lub2RlX25vdyhzdHJ1Y3Qg
aW5vZGUgKiwgaW50KTsKZXh0ZXJuIGludCBzeW5jX2J1ZmZlcnMoa2Rldl90LCBpbnQpOwpleHRl
cm4gdm9pZCBzeW5jX2RldihrZGV2X3QpOwpleHRlcm4gaW50IGZzeW5jX2RldihrZGV2X3QpOwpl
eHRlcm4gaW50IGZzeW5jX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKZXh0ZXJuIGludCBm
c3luY19ub19zdXBlcihrZGV2X3QpOwpleHRlcm4gdm9pZCBzeW5jX2lub2Rlc19zYihzdHJ1Y3Qg
c3VwZXJfYmxvY2sgKik7CmV4dGVybiBpbnQgb3N5bmNfaW5vZGVfYnVmZmVycyhzdHJ1Y3QgaW5v
ZGUgKik7CmV4dGVybiBpbnQgb3N5bmNfaW5vZGVfZGF0YV9idWZmZXJzKHN0cnVjdCBpbm9kZSAq
KTsKZXh0ZXJuIGludCBmc3luY19pbm9kZV9idWZmZXJzKHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJu
IGludCBmc3luY19pbm9kZV9kYXRhX2J1ZmZlcnMoc3RydWN0IGlub2RlICopOwpleHRlcm4gaW50
IGlub2RlX2hhc19idWZmZXJzKHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJuIHZvaWQgZmlsZW1hcF9m
ZGF0YXN5bmMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKik7CmV4dGVybiB2b2lkIGZpbGVtYXBfZmRh
dGF3YWl0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICopOwpleHRlcm4gdm9pZCBzeW5jX3N1cGVycyhr
ZGV2X3QpOwpleHRlcm4gaW50IGJtYXAoc3RydWN0IGlub2RlICosIGludCk7CmV4dGVybiBpbnQg
bm90aWZ5X2NoYW5nZShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpYXR0ciAqKTsKZXh0ZXJuIGlu
dCBwZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwpleHRlcm4gaW50IHZmc19wZXJtaXNz
aW9uKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwpleHRlcm4gaW50IGdldF93cml0ZV9hY2Nlc3Moc3Ry
dWN0IGlub2RlICopOwpleHRlcm4gaW50IGRlbnlfd3JpdGVfYWNjZXNzKHN0cnVjdCBmaWxlICop
OwpzdGF0aWMgaW5saW5lIHZvaWQgcHV0X3dyaXRlX2FjY2VzcyhzdHJ1Y3QgaW5vZGUgKiBpbm9k
ZSkKewoJYXRvbWljX2RlYygmaW5vZGUtPmlfd3JpdGVjb3VudCk7Cn0Kc3RhdGljIGlubGluZSB2
b2lkIGFsbG93X3dyaXRlX2FjY2VzcyhzdHJ1Y3QgZmlsZSAqZmlsZSkKewoJaWYgKGZpbGUpCgkJ
YXRvbWljX2luYygmZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfd3JpdGVjb3VudCk7Cn0KZXh0
ZXJuIGludCBkb19waXBlKGludCAqKTsKCmV4dGVybiBpbnQgb3Blbl9uYW1laShjb25zdCBjaGFy
ICosIGludCwgaW50LCBzdHJ1Y3QgbmFtZWlkYXRhICopOwoKZXh0ZXJuIGludCBrZXJuZWxfcmVh
ZChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBsb25nLCBjaGFyICosIHVuc2lnbmVkIGxvbmcpOwpl
eHRlcm4gc3RydWN0IGZpbGUgKiBvcGVuX2V4ZWMoY29uc3QgY2hhciAqKTsKIAogCmV4dGVybiBp
bnQgaXNfc3ViZGlyKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGRlbnRyeSAqKTsKZXh0ZXJuIGlu
b190IGZpbmRfaW5vZGVfbnVtYmVyKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKik7Cgog
CgoKCgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgKkVSUl9QVFIobG9uZyBlcnJvcikKewoJcmV0dXJu
ICh2b2lkICopIGVycm9yOwp9CgpzdGF0aWMgaW5saW5lIGxvbmcgUFRSX0VSUihjb25zdCB2b2lk
ICpwdHIpCnsKCXJldHVybiAobG9uZykgcHRyOwp9CgpzdGF0aWMgaW5saW5lIGxvbmcgSVNfRVJS
KGNvbnN0IHZvaWQgKnB0cikKewoJcmV0dXJuICh1bnNpZ25lZCBsb25nKXB0ciA+ICh1bnNpZ25l
ZCBsb25nKS0xMDAwTDsKfQoKIAoKCgoKCgoKCgoKCgogCgoKZW51bSB7TEFTVF9OT1JNLCBMQVNU
X1JPT1QsIExBU1RfRE9ULCBMQVNUX0RPVERPVCwgTEFTVF9CSU5EfTsKCiAKCgoKCgoKCgp0eXBl
ZGVmIHN0cnVjdCB7CglzaXplX3Qgd3JpdHRlbjsKCXNpemVfdCBjb3VudDsKCWNoYXIgKiBidWY7
CglpbnQgZXJyb3I7Cn0gcmVhZF9kZXNjcmlwdG9yX3Q7Cgp0eXBlZGVmIGludCAoKnJlYWRfYWN0
b3JfdCkocmVhZF9kZXNjcmlwdG9yX3QgKiwgc3RydWN0IHBhZ2UgKiwgdW5zaWduZWQgbG9uZywg
dW5zaWduZWQgbG9uZyk7CgogCmV4dGVybiBsb2ZmX3QgZGVmYXVsdF9sbHNlZWsoc3RydWN0IGZp
bGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCBvcmlnaW4pOwoKZXh0ZXJuIGludCAgX191c2Vy
X3dhbGsoY29uc3QgY2hhciAqLCB1bnNpZ25lZCwgc3RydWN0IG5hbWVpZGF0YSAqKSAgOwpleHRl
cm4gaW50ICBwYXRoX2luaXQoY29uc3QgY2hhciAqLCB1bnNpZ25lZCwgc3RydWN0IG5hbWVpZGF0
YSAqKSAgOwpleHRlcm4gaW50ICBwYXRoX3dhbGsoY29uc3QgY2hhciAqLCBzdHJ1Y3QgbmFtZWlk
YXRhICopICA7CmV4dGVybiBpbnQgIGxpbmtfcGF0aF93YWxrKGNvbnN0IGNoYXIgKiwgc3RydWN0
IG5hbWVpZGF0YSAqKSAgOwpleHRlcm4gdm9pZCBwYXRoX3JlbGVhc2Uoc3RydWN0IG5hbWVpZGF0
YSAqKTsKZXh0ZXJuIGludCBmb2xsb3dfZG93bihzdHJ1Y3QgdmZzbW91bnQgKiosIHN0cnVjdCBk
ZW50cnkgKiopOwpleHRlcm4gaW50IGZvbGxvd191cChzdHJ1Y3QgdmZzbW91bnQgKiosIHN0cnVj
dCBkZW50cnkgKiopOwpleHRlcm4gc3RydWN0IGRlbnRyeSAqIGxvb2t1cF9vbmVfbGVuKGNvbnN0
IGNoYXIgKiwgc3RydWN0IGRlbnRyeSAqLCBpbnQpOwpleHRlcm4gc3RydWN0IGRlbnRyeSAqIGxv
b2t1cF9oYXNoKHN0cnVjdCBxc3RyICosIHN0cnVjdCBkZW50cnkgKik7CgoKCmV4dGVybiB2b2lk
IGlwdXQoc3RydWN0IGlub2RlICopOwpleHRlcm4gdm9pZCBmb3JjZV9kZWxldGUoc3RydWN0IGlu
b2RlICopOwpleHRlcm4gc3RydWN0IGlub2RlICogaWdyYWIoc3RydWN0IGlub2RlICopOwpleHRl
cm4gaW5vX3QgaXVuaXF1ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW5vX3QpOwoKdHlwZWRlZiBp
bnQgKCpmaW5kX2lub2RlX3QpKHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25lZCBsb25nLCB2b2lkICop
OwpleHRlcm4gc3RydWN0IGlub2RlICogaWdldDQoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2ln
bmVkIGxvbmcsIGZpbmRfaW5vZGVfdCwgdm9pZCAqKTsKc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5v
ZGUgKmlnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8pCnsKCXJl
dHVybiBpZ2V0NChzYiwgaW5vLCAoKHZvaWQgKikwKSAsICgodm9pZCAqKTApICk7Cn0KCmV4dGVy
biB2b2lkIGNsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJuIHN0cnVjdCBpbm9kZSAq
IGdldF9lbXB0eV9pbm9kZSh2b2lkKTsKCnN0YXRpYyBpbmxpbmUgc3RydWN0IGlub2RlICogbmV3
X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCnsKCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBn
ZXRfZW1wdHlfaW5vZGUoKTsKCWlmIChpbm9kZSkgewoJCWlub2RlLT5pX3NiID0gc2I7CgkJaW5v
ZGUtPmlfZGV2ID0gc2ItPnNfZGV2OwoJCWlub2RlLT5pX2Jsa2JpdHMgPSBzYi0+c19ibG9ja3Np
emVfYml0czsKCX0KCXJldHVybiBpbm9kZTsKfQpleHRlcm4gdm9pZCByZW1vdmVfc3VpZChzdHJ1
Y3QgaW5vZGUgKmlub2RlKTsKCmV4dGVybiB2b2lkIGluc2VydF9pbm9kZV9oYXNoKHN0cnVjdCBp
bm9kZSAqKTsKZXh0ZXJuIHZvaWQgcmVtb3ZlX2lub2RlX2hhc2goc3RydWN0IGlub2RlICopOwpl
eHRlcm4gc3RydWN0IGZpbGUgKiBnZXRfZW1wdHlfZmlscCh2b2lkKTsKZXh0ZXJuIHZvaWQgZmls
ZV9tb3ZlKHN0cnVjdCBmaWxlICpmLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KTsKZXh0ZXJuIHN0
cnVjdCBidWZmZXJfaGVhZCAqIGdldF9oYXNoX3RhYmxlKGtkZXZfdCwgaW50LCBpbnQpOwpleHRl
cm4gc3RydWN0IGJ1ZmZlcl9oZWFkICogZ2V0YmxrKGtkZXZfdCwgaW50LCBpbnQpOwpleHRlcm4g
dm9pZCBsbF9yd19ibG9jayhpbnQsIGludCwgc3RydWN0IGJ1ZmZlcl9oZWFkICogYmhbXSk7CmV4
dGVybiB2b2lkIHN1Ym1pdF9iaChpbnQsIHN0cnVjdCBidWZmZXJfaGVhZCAqKTsKZXh0ZXJuIGlu
dCBpc19yZWFkX29ubHkoa2Rldl90KTsKZXh0ZXJuIHZvaWQgX19icmVsc2Uoc3RydWN0IGJ1ZmZl
cl9oZWFkICopOwpzdGF0aWMgaW5saW5lIHZvaWQgYnJlbHNlKHN0cnVjdCBidWZmZXJfaGVhZCAq
YnVmKQp7CglpZiAoYnVmKQoJCV9fYnJlbHNlKGJ1Zik7Cn0KZXh0ZXJuIHZvaWQgX19iZm9yZ2V0
KHN0cnVjdCBidWZmZXJfaGVhZCAqKTsKc3RhdGljIGlubGluZSB2b2lkIGJmb3JnZXQoc3RydWN0
IGJ1ZmZlcl9oZWFkICpidWYpCnsKCWlmIChidWYpCgkJX19iZm9yZ2V0KGJ1Zik7Cn0KZXh0ZXJu
IGludCBzZXRfYmxvY2tzaXplKGtkZXZfdCwgaW50KTsKZXh0ZXJuIHN0cnVjdCBidWZmZXJfaGVh
ZCAqIGJyZWFkKGtkZXZfdCwgaW50LCBpbnQpOwpleHRlcm4gdm9pZCB3YWtldXBfYmRmbHVzaCh2
b2lkKTsKZXh0ZXJuIHZvaWQgcHV0X3VudXNlZF9idWZmZXJfaGVhZChzdHJ1Y3QgYnVmZmVyX2hl
YWQgKiBiaCk7CmV4dGVybiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBnZXRfdW51c2VkX2J1ZmZlcl9o
ZWFkKGludCBhc3luYyk7CgpleHRlcm4gaW50IGJyd19wYWdlKGludCwgc3RydWN0IHBhZ2UgKiwg
a2Rldl90LCBpbnQgW10sIGludCk7Cgp0eXBlZGVmIGludCAoZ2V0X2Jsb2NrX3QpKHN0cnVjdCBp
bm9kZSosbG9uZyxzdHJ1Y3QgYnVmZmVyX2hlYWQqLGludCk7CgogCmV4dGVybiBpbnQgdHJ5X3Rv
X3JlbGVhc2VfcGFnZShzdHJ1Y3QgcGFnZSAqIHBhZ2UsIGludCBnZnBfbWFzayk7CmV4dGVybiBp
bnQgZGlzY2FyZF9iaF9wYWdlKHN0cnVjdCBwYWdlICosIHVuc2lnbmVkIGxvbmcsIGludCk7CgoK
ZXh0ZXJuIGludCBibG9ja19zeW1saW5rKHN0cnVjdCBpbm9kZSAqLCBjb25zdCBjaGFyICosIGlu
dCk7CmV4dGVybiBpbnQgYmxvY2tfd3JpdGVfZnVsbF9wYWdlKHN0cnVjdCBwYWdlKiwgZ2V0X2Js
b2NrX3QqKTsKZXh0ZXJuIGludCBibG9ja19yZWFkX2Z1bGxfcGFnZShzdHJ1Y3QgcGFnZSosIGdl
dF9ibG9ja190Kik7CmV4dGVybiBpbnQgYmxvY2tfcHJlcGFyZV93cml0ZShzdHJ1Y3QgcGFnZSos
IHVuc2lnbmVkLCB1bnNpZ25lZCwgZ2V0X2Jsb2NrX3QqKTsKZXh0ZXJuIGludCBjb250X3ByZXBh
cmVfd3JpdGUoc3RydWN0IHBhZ2UqLCB1bnNpZ25lZCwgdW5zaWduZWQsIGdldF9ibG9ja190KiwK
CQkJCXVuc2lnbmVkIGxvbmcgKik7CmV4dGVybiBpbnQgYmxvY2tfY29tbWl0X3dyaXRlKHN0cnVj
dCBwYWdlICpwYWdlLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0byk7CmV4dGVybiBpbnQgYmxv
Y2tfc3luY19wYWdlKHN0cnVjdCBwYWdlICopOwoKaW50IGdlbmVyaWNfYmxvY2tfYm1hcChzdHJ1
Y3QgYWRkcmVzc19zcGFjZSAqLCBsb25nLCBnZXRfYmxvY2tfdCAqKTsKaW50IGdlbmVyaWNfY29t
bWl0X3dyaXRlKHN0cnVjdCBmaWxlICosIHN0cnVjdCBwYWdlICosIHVuc2lnbmVkLCB1bnNpZ25l
ZCk7CmludCBibG9ja190cnVuY2F0ZV9wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICosIGxvZmZf
dCwgZ2V0X2Jsb2NrX3QgKik7CmV4dGVybiBpbnQgZ2VuZXJpY19kaXJlY3RfSU8oaW50LCBzdHJ1
Y3QgaW5vZGUgKiwgc3RydWN0IGtpb2J1ZiAqLCB1bnNpZ25lZCBsb25nLCBpbnQsIGdldF9ibG9j
a190ICopOwoKZXh0ZXJuIGludCB3YWl0Zm9yX29uZV9wYWdlKHN0cnVjdCBwYWdlKik7CmV4dGVy
biBpbnQgZ2VuZXJpY19maWxlX21tYXAoc3RydWN0IGZpbGUgKiwgc3RydWN0IHZtX2FyZWFfc3Ry
dWN0ICopOwpleHRlcm4gaW50IGZpbGVfcmVhZF9hY3RvcihyZWFkX2Rlc2NyaXB0b3JfdCAqIGRl
c2MsIHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9u
ZyBzaXplKTsKZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19maWxlX3JlYWQoc3RydWN0IGZpbGUgKiwg
Y2hhciAqLCBzaXplX3QsIGxvZmZfdCAqKTsKZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19maWxlX3dy
aXRlKHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CmV4dGVy
biB2b2lkIGRvX2dlbmVyaWNfZmlsZV9yZWFkKHN0cnVjdCBmaWxlICosIGxvZmZfdCAqLCByZWFk
X2Rlc2NyaXB0b3JfdCAqLCByZWFkX2FjdG9yX3QpOwpleHRlcm4gbG9mZl90IG5vX2xsc2Vlayhz
dHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9yaWdpbik7CmV4dGVybiBsb2Zm
X3QgZ2VuZXJpY19maWxlX2xsc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwg
aW50IG9yaWdpbik7CmV4dGVybiBzc2l6ZV90IGdlbmVyaWNfcmVhZF9kaXIoc3RydWN0IGZpbGUg
KiwgY2hhciAqLCBzaXplX3QsIGxvZmZfdCAqKTsKZXh0ZXJuIGludCBnZW5lcmljX2ZpbGVfb3Bl
bihzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxwKTsKCmV4dGVybiBzdHJ1
Y3QgZmlsZV9vcGVyYXRpb25zIGdlbmVyaWNfcm9fZm9wczsKCmV4dGVybiBpbnQgdmZzX3JlYWRs
aW5rKHN0cnVjdCBkZW50cnkgKiwgY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKik7CmV4dGVybiBp
bnQgdmZzX2ZvbGxvd19saW5rKHN0cnVjdCBuYW1laWRhdGEgKiwgY29uc3QgY2hhciAqKTsKZXh0
ZXJuIGludCBwYWdlX3JlYWRsaW5rKHN0cnVjdCBkZW50cnkgKiwgY2hhciAqLCBpbnQpOwpleHRl
cm4gaW50IHBhZ2VfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgbmFtZWlkYXRh
ICopOwpleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcGFnZV9zeW1saW5rX2lub2RlX29w
ZXJhdGlvbnM7CgpleHRlcm4gaW50IHZmc19yZWFkZGlyKHN0cnVjdCBmaWxlICosIGZpbGxkaXJf
dCwgdm9pZCAqKTsKZXh0ZXJuIGludCBkY2FjaGVfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqLCB2b2lk
ICosIGZpbGxkaXJfdCk7CgpleHRlcm4gc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmdldF9mc190
eXBlKGNvbnN0IGNoYXIgKm5hbWUpOwpleHRlcm4gc3RydWN0IHN1cGVyX2Jsb2NrICpnZXRfc3Vw
ZXIoa2Rldl90KTsKZXh0ZXJuIHZvaWQgZHJvcF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNi
KTsKc3RhdGljIGlubGluZSBpbnQgaXNfbW91bnRlZChrZGV2X3QgZGV2KQp7CglzdHJ1Y3Qgc3Vw
ZXJfYmxvY2sgKnNiID0gZ2V0X3N1cGVyKGRldik7CglpZiAoc2IpIHsKCQlkcm9wX3N1cGVyKHNi
KTsKCQlyZXR1cm4gMTsKCX0KCXJldHVybiAwOwp9CnVuc2lnbmVkIGxvbmcgZ2VuZXJhdGVfY2x1
c3RlcihrZGV2X3QsIGludCBiW10sIGludCk7CnVuc2lnbmVkIGxvbmcgZ2VuZXJhdGVfY2x1c3Rl
cl9zd2FiMzIoa2Rldl90LCBpbnQgYltdLCBpbnQpOwpleHRlcm4ga2Rldl90IFJPT1RfREVWOwpl
eHRlcm4gY2hhciByb290X2RldmljZV9uYW1lW107CgoKZXh0ZXJuIHZvaWQgc2hvd19idWZmZXJz
KHZvaWQpOwpleHRlcm4gdm9pZCBtb3VudF9yb290KHZvaWQpOwoKCgoKCgpleHRlcm4gc3NpemVf
dCBjaGFyX3JlYWQoc3RydWN0IGZpbGUgKiwgY2hhciAqLCBzaXplX3QsIGxvZmZfdCAqKTsKZXh0
ZXJuIHNzaXplX3QgYmxvY2tfcmVhZChzdHJ1Y3QgZmlsZSAqLCBjaGFyICosIHNpemVfdCwgbG9m
Zl90ICopOwpleHRlcm4gaW50IHJlYWRfYWhlYWRbXTsKCmV4dGVybiBzc2l6ZV90IGNoYXJfd3Jp
dGUoc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciAqLCBzaXplX3QsIGxvZmZfdCAqKTsKZXh0ZXJu
IHNzaXplX3QgYmxvY2tfd3JpdGUoc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciAqLCBzaXplX3Qs
IGxvZmZfdCAqKTsKCmV4dGVybiBpbnQgZmlsZV9mc3luYyhzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3Qg
ZGVudHJ5ICosIGludCk7CmV4dGVybiBpbnQgZ2VuZXJpY19idWZmZXJfZmRhdGFzeW5jKHN0cnVj
dCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGxvbmcgc3RhcnRfaWR4LCB1bnNpZ25lZCBsb25nIGVu
ZF9pZHgpOwpleHRlcm4gaW50IGdlbmVyaWNfb3N5bmNfaW5vZGUoc3RydWN0IGlub2RlICosIGlu
dCk7CgoKCgpleHRlcm4gaW50IGlub2RlX2NoYW5nZV9vayhzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0
IGlhdHRyICopOwpleHRlcm4gaW50IGlub2RlX3NldGF0dHIoc3RydWN0IGlub2RlICosIHN0cnVj
dCBpYXR0ciAqKTsKCiAKCgoKCgoKIAoKCgoKCgoKCgoKCnN0YXRpYyBpbmxpbmUgc3RydWN0IGRl
bnRyeSAqbG9ja19wYXJlbnQoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQp7CglzdHJ1Y3QgZGVudHJ5
ICpkaXIgPSBkZ2V0KGRlbnRyeS0+ZF9wYXJlbnQpOwoKCWRvd24oJmRpci0+ZF9pbm9kZS0+aV9z
ZW0pOwoJcmV0dXJuIGRpcjsKfQoKc3RhdGljIGlubGluZSBzdHJ1Y3QgZGVudHJ5ICpnZXRfcGFy
ZW50KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKewoJcmV0dXJuIGRnZXQoZGVudHJ5LT5kX3BhcmVu
dCk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfZGlyKHN0cnVjdCBkZW50cnkgKmRpcikK
ewoJdXAoJmRpci0+ZF9pbm9kZS0+aV9zZW0pOwoJZHB1dChkaXIpOwp9CgogCgoKCnN0YXRpYyBp
bmxpbmUgdm9pZCBkb3VibGVfZG93bihzdHJ1Y3Qgc2VtYXBob3JlICpzMSwgc3RydWN0IHNlbWFw
aG9yZSAqczIpCnsKCWlmIChzMSAhPSBzMikgewoJCWlmICgodW5zaWduZWQgbG9uZykgczEgPCAo
dW5zaWduZWQgbG9uZykgczIpIHsKCQkJc3RydWN0IHNlbWFwaG9yZSAqdG1wID0gczI7CgkJCXMy
ID0gczE7IHMxID0gdG1wOwoJCX0KCQlkb3duKHMxKTsKCX0KCWRvd24oczIpOwp9CgogCgoKCgoK
CgoKc3RhdGljIGlubGluZSB2b2lkIHRyaXBsZV9kb3duKHN0cnVjdCBzZW1hcGhvcmUgKnMxLAoJ
CQkgICAgICAgc3RydWN0IHNlbWFwaG9yZSAqczIsCgkJCSAgICAgICBzdHJ1Y3Qgc2VtYXBob3Jl
ICpzMykKewoJaWYgKHMxICE9IHMyKSB7CgkJaWYgKCh1bnNpZ25lZCBsb25nKSBzMSA8ICh1bnNp
Z25lZCBsb25nKSBzMikgewoJCQlpZiAoKHVuc2lnbmVkIGxvbmcpIHMxIDwgKHVuc2lnbmVkIGxv
bmcpIHMzKSB7CgkJCQlzdHJ1Y3Qgc2VtYXBob3JlICp0bXAgPSBzMzsKCQkJCXMzID0gczE7IHMx
ID0gdG1wOwoJCQl9CgkJCWlmICgodW5zaWduZWQgbG9uZykgczEgPCAodW5zaWduZWQgbG9uZykg
czIpIHsKCQkJCXN0cnVjdCBzZW1hcGhvcmUgKnRtcCA9IHMyOwoJCQkJczIgPSBzMTsgczEgPSB0
bXA7CgkJCX0KCQl9IGVsc2UgewoJCQlpZiAoKHVuc2lnbmVkIGxvbmcpIHMxIDwgKHVuc2lnbmVk
IGxvbmcpIHMzKSB7CgkJCQlzdHJ1Y3Qgc2VtYXBob3JlICp0bXAgPSBzMzsKCQkJCXMzID0gczE7
IHMxID0gdG1wOwoJCQl9CgkJCWlmICgodW5zaWduZWQgbG9uZykgczIgPCAodW5zaWduZWQgbG9u
ZykgczMpIHsKCQkJCXN0cnVjdCBzZW1hcGhvcmUgKnRtcCA9IHMzOwoJCQkJczMgPSBzMjsgczIg
PSB0bXA7CgkJCX0KCQl9CgkJZG93bihzMSk7Cgl9IGVsc2UgaWYgKCh1bnNpZ25lZCBsb25nKSBz
MiA8ICh1bnNpZ25lZCBsb25nKSBzMykgewoJCXN0cnVjdCBzZW1hcGhvcmUgKnRtcCA9IHMzOwoJ
CXMzID0gczI7IHMyID0gdG1wOwoJfQoJZG93bihzMik7Cglkb3duKHMzKTsKfQoKc3RhdGljIGlu
bGluZSB2b2lkIGRvdWJsZV91cChzdHJ1Y3Qgc2VtYXBob3JlICpzMSwgc3RydWN0IHNlbWFwaG9y
ZSAqczIpCnsKCXVwKHMxKTsKCWlmIChzMSAhPSBzMikKCQl1cChzMik7Cn0KCnN0YXRpYyBpbmxp
bmUgdm9pZCB0cmlwbGVfdXAoc3RydWN0IHNlbWFwaG9yZSAqczEsCgkJCSAgICAgc3RydWN0IHNl
bWFwaG9yZSAqczIsCgkJCSAgICAgc3RydWN0IHNlbWFwaG9yZSAqczMpCnsKCXVwKHMxKTsKCWlm
IChzMSAhPSBzMikKCQl1cChzMik7Cgl1cChzMyk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBkb3Vi
bGVfbG9jayhzdHJ1Y3QgZGVudHJ5ICpkMSwgc3RydWN0IGRlbnRyeSAqZDIpCnsKCWRvdWJsZV9k
b3duKCZkMS0+ZF9pbm9kZS0+aV9zZW0sICZkMi0+ZF9pbm9kZS0+aV9zZW0pOwp9CgpzdGF0aWMg
aW5saW5lIHZvaWQgZG91YmxlX3VubG9jayhzdHJ1Y3QgZGVudHJ5ICpkMSwgc3RydWN0IGRlbnRy
eSAqZDIpCnsKCWRvdWJsZV91cCgmZDEtPmRfaW5vZGUtPmlfc2VtLCZkMi0+ZF9pbm9kZS0+aV9z
ZW0pOwoJZHB1dChkMSk7CglkcHV0KGQyKTsKfQoKCgoKIyAyMCAiL2hvbWUvY2FybG9zL0J1aWxk
cy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvdHR5LmgiIDIKCiMgMSAi
L2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGlu
dXgvbWFqb3IuaCIgMQoKCgogCgoKCgogCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAgCgoK
CgpzdGF0aWMgX19pbmxpbmVfXyBpbnQgc2NzaV9ibGtfbWFqb3IoaW50IG0pIHsKCXJldHVybiAo
KCggIG0gICkgPT0gOCAgfHwgKCggIG0gICkgPj0gNjUgICYmICggIG0gICkgPD0gNzEgKSkgCXx8
ICggbSApID09IDExICkgOwp9CgogCgoKCgoKCgoKc3RhdGljIF9faW5saW5lX18gaW50IGlkZV9i
bGtfbWFqb3IoaW50IG0pCnsKCXJldHVybiAoKCBtICkgPT0gMyAgfHwgKCBtICkgPT0gMjIgIHx8
ICggbSApID09IDMzICB8fCAoIG0gKSA9PSAzNCAgfHwgKCBtICkgPT0gNTYgIHx8ICggbSApID09
IDU3ICB8fCAoIG0gKSA9PSA4OCAgfHwgKCBtICkgPT0gODkgIHx8ICggbSApID09IDkwICB8fCAo
IG0gKSA9PSA5MSApIDsKfQoKCiMgMjEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wt
dWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L3R0eS5oIiAyCgojIDEgIi9ob21lL2Nhcmxvcy9C
dWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L3Rlcm1pb3MuaCIg
MQoKCgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40Lngv
aW5jbHVkZS9hc20vdGVybWlvcy5oIiAxCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVY
L2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtLW02OGsvdGVybWlvcy5oIiAxCgoKCiMgMSAi
L2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNt
L3Rlcm1iaXRzLmgiIDEKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGlu
dXgtMi40LngvaW5jbHVkZS9hc20tbTY4ay90ZXJtYml0cy5oIiAxCgoKCgoKdHlwZWRlZiB1bnNp
Z25lZCBjaGFyCWNjX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50CXNwZWVkX3Q7CnR5cGVkZWYgdW5z
aWduZWQgaW50CXRjZmxhZ190OwoKCnN0cnVjdCB0ZXJtaW9zIHsKCXRjZmxhZ190IGNfaWZsYWc7
CQkgCgl0Y2ZsYWdfdCBjX29mbGFnOwkJIAoJdGNmbGFnX3QgY19jZmxhZzsJCSAKCXRjZmxhZ190
IGNfbGZsYWc7CQkgCgljY190IGNfbGluZTsJCQkgCgljY190IGNfY2NbMTkgXTsJCSAKfTsKCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCgoKCiAKCgoKCgojIDEgIi9ob21l
L2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2FzbS90ZXJt
Yml0cy5oIiAyCgojIDQgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0y
LjQueC9pbmNsdWRlL2FzbS1tNjhrL3Rlcm1pb3MuaCIgMgoKIyAxICIvaG9tZS9jYXJsb3MvQnVp
bGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vaW9jdGxzLmgiIDEKIyAx
ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9h
c20tbTY4ay9pb2N0bHMuaCIgMQoKCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9l
Y2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2FzbS9pb2N0bC5oIiAxCgojIDQgIi9ob21lL2Nhcmxv
cy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2FzbS1tNjhrL2lvY3Rs
cy5oIiAyCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNM
SU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2FzbS9pb2N0bHMuaCIgMgoKIyA1ICIvaG9t
ZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20tbTY4
ay90ZXJtaW9zLmgiIDIKCiAKc3RydWN0IHdpbnNpemUgewoJdW5zaWduZWQgc2hvcnQgd3Nfcm93
OwoJdW5zaWduZWQgc2hvcnQgd3NfY29sOwoJdW5zaWduZWQgc2hvcnQgd3NfeHBpeGVsOwoJdW5z
aWduZWQgc2hvcnQgd3NfeXBpeGVsOwp9OwoKCnN0cnVjdCB0ZXJtaW8gewoJdW5zaWduZWQgc2hv
cnQgY19pZmxhZzsJCSAKCXVuc2lnbmVkIHNob3J0IGNfb2ZsYWc7CQkgCgl1bnNpZ25lZCBzaG9y
dCBjX2NmbGFnOwkJIAoJdW5zaWduZWQgc2hvcnQgY19sZmxhZzsJCSAKCXVuc2lnbmVkIGNoYXIg
Y19saW5lOwkJIAoJdW5zaWduZWQgY2hhciBjX2NjWzggXTsJIAp9OwoKCiAKCgoKCgoKCgogCgoK
CgoKCgoKCgoKCgoKCiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKIyA4OSAiL2hvbWUvY2Fy
bG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtLW02OGsvdGVy
bWlvcy5oIgoKIAoKCgojIDEwMiAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xp
bnV4LTIuNC54L2luY2x1ZGUvYXNtLW02OGsvdGVybWlvcy5oIgoKCgoKCgoKIyAxICIvaG9tZS9j
YXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vdGVybWlv
cy5oIiAyCgojIDUgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQu
eC9pbmNsdWRlL2xpbnV4L3Rlcm1pb3MuaCIgMgoKCgojIDIyICIvaG9tZS9jYXJsb3MvQnVpbGRz
L1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC90dHkuaCIgMgoKCiMgMSAi
L2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGlu
dXgvdHR5X2RyaXZlci5oIiAxCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnN0cnVjdCB0dHlfZHJpdmVyIHsKCWludAltYWdpYzsJ
CSAKCWNvbnN0IGNoYXIJKmRyaXZlcl9uYW1lOwoJY29uc3QgY2hhcgkqbmFtZTsKCWludAluYW1l
X2Jhc2U7CSAKCXNob3J0CW1ham9yOwkJIAoJc2hvcnQJbWlub3Jfc3RhcnQ7CSAKCXNob3J0CW51
bTsJCSAKCXNob3J0CXR5cGU7CQkgCglzaG9ydAlzdWJ0eXBlOwkgCglzdHJ1Y3QgdGVybWlvcyBp
bml0X3Rlcm1pb3M7ICAKCWludAlmbGFnczsJCSAKCWludAkqcmVmY291bnQ7CSAKCXN0cnVjdCBw
cm9jX2Rpcl9lbnRyeSAqcHJvY19lbnRyeTsgIAoJc3RydWN0IHR0eV9kcml2ZXIgKm90aGVyOyAg
CgoJIAoKCglzdHJ1Y3QgdHR5X3N0cnVjdCAqKnRhYmxlOwoJc3RydWN0IHRlcm1pb3MgKip0ZXJt
aW9zOwoJc3RydWN0IHRlcm1pb3MgKip0ZXJtaW9zX2xvY2tlZDsKCXZvaWQgKmRyaXZlcl9zdGF0
ZTsJIAoJCgkgCgoKCglpbnQgICgqb3Blbikoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIHN0cnVj
dCBmaWxlICogZmlscCk7Cgl2b2lkICgqY2xvc2UpKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBz
dHJ1Y3QgZmlsZSAqIGZpbHApOwoJaW50ICAoKndyaXRlKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0
eSwgaW50IGZyb21fdXNlciwKCQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBj
b3VudCk7Cgl2b2lkICgqcHV0X2NoYXIpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVk
IGNoYXIgY2gpOwoJdm9pZCAoKmZsdXNoX2NoYXJzKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsK
CWludCAgKCp3cml0ZV9yb29tKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKCWludCAgKCpjaGFy
c19pbl9idWZmZXIpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwoJaW50ICAoKmlvY3RsKShzdHJ1
Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCgkJICAgIHVuc2lnbmVkIGlu
dCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKCXZvaWQgKCpzZXRfdGVybWlvcykoc3RydWN0IHR0
eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHRlcm1pb3MgKiBvbGQpOwoJdm9pZCAoKnRocm90dGxlKShz
dHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSk7Cgl2b2lkICgqdW50aHJvdHRsZSkoc3RydWN0IHR0eV9z
dHJ1Y3QgKiB0dHkpOwoJdm9pZCAoKnN0b3ApKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwoJdm9p
ZCAoKnN0YXJ0KShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKCXZvaWQgKCpoYW5ndXApKHN0cnVj
dCB0dHlfc3RydWN0ICp0dHkpOwoJdm9pZCAoKmJyZWFrX2N0bCkoc3RydWN0IHR0eV9zdHJ1Y3Qg
KnR0eSwgaW50IHN0YXRlKTsKCXZvaWQgKCpmbHVzaF9idWZmZXIpKHN0cnVjdCB0dHlfc3RydWN0
ICp0dHkpOwoJdm9pZCAoKnNldF9sZGlzYykoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7Cgl2b2lk
ICgqd2FpdF91bnRpbF9zZW50KShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgdGltZW91dCk7
Cgl2b2lkICgqc2VuZF94Y2hhcikoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY2hhciBjaCk7Cglp
bnQgKCpyZWFkX3Byb2MpKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAoJCQkg
IGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpOwoJaW50ICgqd3JpdGVfcHJvYykoc3Ry
dWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1ZmZlciwKCQkJICB1bnNpZ25lZCBsb25nIGNv
dW50LCB2b2lkICpkYXRhKTsKCgkgCgoKCXN0cnVjdCB0dHlfZHJpdmVyICpuZXh0OwoJc3RydWN0
IHR0eV9kcml2ZXIgKnByZXY7Cn07CgogCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoK
CgoKCgoKIAoKCgoKCiAKCgoKIAoKCgoKIyAyNCAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVY
L2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvdHR5LmgiIDIKCiMgMSAiL2hvbWUvY2Fy
bG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvdHR5X2xk
aXNjLmgiIDEKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnN0
cnVjdCB0dHlfbGRpc2MgewoJaW50CW1hZ2ljOwoJY2hhcgkqbmFtZTsKCWludAludW07CglpbnQJ
ZmxhZ3M7CgkgCgoKCWludAkoKm9wZW4pKHN0cnVjdCB0dHlfc3RydWN0ICopOwoJdm9pZAkoKmNs
b3NlKShzdHJ1Y3QgdHR5X3N0cnVjdCAqKTsKCXZvaWQJKCpmbHVzaF9idWZmZXIpKHN0cnVjdCB0
dHlfc3RydWN0ICp0dHkpOwoJc3NpemVfdAkoKmNoYXJzX2luX2J1ZmZlcikoc3RydWN0IHR0eV9z
dHJ1Y3QgKnR0eSk7Cglzc2l6ZV90CSgqcmVhZCkoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIHN0
cnVjdCBmaWxlICogZmlsZSwKCQkJdW5zaWduZWQgY2hhciAqIGJ1Ziwgc2l6ZV90IG5yKTsKCXNz
aXplX3QJKCp3cml0ZSkoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIHN0cnVjdCBmaWxlICogZmls
ZSwKCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBidWYsIHNpemVfdCBucik7CQoJaW50CSgqaW9j
dGwpKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCgkJCSB1bnNp
Z25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7Cgl2b2lkCSgqc2V0X3Rlcm1pb3MpKHN0
cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0ZXJtaW9zICogb2xkKTsKCXVuc2lnbmVkIGlu
dCAoKnBvbGwpKHN0cnVjdCB0dHlfc3RydWN0ICosIHN0cnVjdCBmaWxlICosCgkJCSAgICAgc3Ry
dWN0IHBvbGxfdGFibGVfc3RydWN0ICopOwoJCgkgCgoKCXZvaWQJKCpyZWNlaXZlX2J1Zikoc3Ry
dWN0IHR0eV9zdHJ1Y3QgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqY3AsCgkJCSAgICAgICBjaGFy
ICpmcCwgaW50IGNvdW50KTsKCWludAkoKnJlY2VpdmVfcm9vbSkoc3RydWN0IHR0eV9zdHJ1Y3Qg
Kik7Cgl2b2lkCSgqd3JpdGVfd2FrZXVwKShzdHJ1Y3QgdHR5X3N0cnVjdCAqKTsKfTsKCgoKCgoK
IyAyNSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1
ZGUvbGludXgvdHR5LmgiIDIKCgoKCgogCgoKCgoKCgoKIAoKCgoKIyA1MyAiL2hvbWUvY2FybG9z
L0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvdHR5LmgiCgoK
IAoKCgpzdHJ1Y3Qgc2NyZWVuX2luZm8gewoJdW5zaWduZWQgY2hhciAgb3JpZ194OwkJCSAKCXVu
c2lnbmVkIGNoYXIgIG9yaWdfeTsJCQkgCgl1bnNpZ25lZCBzaG9ydCBkb250dXNlMTsJCSAKCXVu
c2lnbmVkIHNob3J0IG9yaWdfdmlkZW9fcGFnZTsJCSAKCXVuc2lnbmVkIGNoYXIgIG9yaWdfdmlk
ZW9fbW9kZTsJCSAKCXVuc2lnbmVkIGNoYXIgIG9yaWdfdmlkZW9fY29sczsJCSAKCXVuc2lnbmVk
IHNob3J0IHVudXNlZDI7CQkJIAoJdW5zaWduZWQgc2hvcnQgb3JpZ192aWRlb19lZ2FfYng7CSAK
CXVuc2lnbmVkIHNob3J0IHVudXNlZDM7CQkJIAoJdW5zaWduZWQgY2hhciAgb3JpZ192aWRlb19s
aW5lczsJIAoJdW5zaWduZWQgY2hhciAgb3JpZ192aWRlb19pc1ZHQTsJIAoJdW5zaWduZWQgc2hv
cnQgb3JpZ192aWRlb19wb2ludHM7CSAKCgkgCgl1bnNpZ25lZCBzaG9ydCBsZmJfd2lkdGg7CQkg
Cgl1bnNpZ25lZCBzaG9ydCBsZmJfaGVpZ2h0OwkJIAoJdW5zaWduZWQgc2hvcnQgbGZiX2RlcHRo
OwkJIAoJdW5zaWduZWQgbG9uZyAgbGZiX2Jhc2U7CQkgCgl1bnNpZ25lZCBsb25nICBsZmJfc2l6
ZTsJCSAKCXVuc2lnbmVkIHNob3J0IGRvbnR1c2UyLCBkb250dXNlMzsJIAoJdW5zaWduZWQgc2hv
cnQgbGZiX2xpbmVsZW5ndGg7CQkgCgl1bnNpZ25lZCBjaGFyICByZWRfc2l6ZTsJCSAKCXVuc2ln
bmVkIGNoYXIgIHJlZF9wb3M7CQkJIAoJdW5zaWduZWQgY2hhciAgZ3JlZW5fc2l6ZTsJCSAKCXVu
c2lnbmVkIGNoYXIgIGdyZWVuX3BvczsJCSAKCXVuc2lnbmVkIGNoYXIgIGJsdWVfc2l6ZTsJCSAK
CXVuc2lnbmVkIGNoYXIgIGJsdWVfcG9zOwkJIAoJdW5zaWduZWQgY2hhciAgcnN2ZF9zaXplOwkJ
IAoJdW5zaWduZWQgY2hhciAgcnN2ZF9wb3M7CQkgCgl1bnNpZ25lZCBzaG9ydCB2ZXNhcG1fc2Vn
OwkJIAoJdW5zaWduZWQgc2hvcnQgdmVzYXBtX29mZjsJCSAKCXVuc2lnbmVkIHNob3J0IHBhZ2Vz
OwkJCSAKCQkJCQkJIAp9OwoKZXh0ZXJuIHN0cnVjdCBzY3JlZW5faW5mbyBzY3JlZW5faW5mbzsK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCgoKCgoKc3RydWN0IHR0eV9m
bGlwX2J1ZmZlciB7CglzdHJ1Y3QgdHFfc3RydWN0IHRxdWV1ZTsKCXN0cnVjdCBzZW1hcGhvcmUg
cHR5X3NlbTsKCWNoYXIJCSpjaGFyX2J1Zl9wdHI7Cgl1bnNpZ25lZCBjaGFyCSpmbGFnX2J1Zl9w
dHI7CglpbnQJCWNvdW50OwoJaW50CQlidWZfbnVtOwoJdW5zaWduZWQgY2hhcgljaGFyX2J1Zlsy
KiA1MTIgXTsKCWNoYXIJCWZsYWdfYnVmWzIqIDUxMiBdOwoJdW5zaWduZWQgY2hhcglzbG9wWzRd
OyAgCn07CiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoK
CgoKCgpzdHJ1Y3QgdHR5X3N0cnVjdCB7CglpbnQJbWFnaWM7CglzdHJ1Y3QgdHR5X2RyaXZlciBk
cml2ZXI7CglzdHJ1Y3QgdHR5X2xkaXNjIGxkaXNjOwoJc3RydWN0IHRlcm1pb3MgKnRlcm1pb3Ms
ICp0ZXJtaW9zX2xvY2tlZDsKCWludCBwZ3JwOwoJaW50IHNlc3Npb247CglrZGV2X3QJZGV2aWNl
OwoJdW5zaWduZWQgbG9uZyBmbGFnczsKCWludCBjb3VudDsKCXN0cnVjdCB3aW5zaXplIHdpbnNp
emU7Cgl1bnNpZ25lZCBjaGFyIHN0b3BwZWQ6MSwgaHdfc3RvcHBlZDoxLCBmbG93X3N0b3BwZWQ6
MSwgcGFja2V0OjE7Cgl1bnNpZ25lZCBjaGFyIGxvd19sYXRlbmN5OjEsIHdhcm5lZDoxOwoJdW5z
aWduZWQgY2hhciBjdHJsX3N0YXR1czsKCglzdHJ1Y3QgdHR5X3N0cnVjdCAqbGluazsKCXN0cnVj
dCBmYXN5bmNfc3RydWN0ICpmYXN5bmM7CglzdHJ1Y3QgdHR5X2ZsaXBfYnVmZmVyIGZsaXA7Cglp
bnQgbWF4X2ZsaXBfY250OwoJaW50IGFsdF9zcGVlZDsJCSAKCXdhaXRfcXVldWVfaGVhZF90IHdy
aXRlX3dhaXQ7Cgl3YWl0X3F1ZXVlX2hlYWRfdCByZWFkX3dhaXQ7CglzdHJ1Y3QgdHFfc3RydWN0
IHRxX2hhbmd1cDsKCXZvaWQgKmRpc2NfZGF0YTsKCXZvaWQgKmRyaXZlcl9kYXRhOwoJc3RydWN0
IGxpc3RfaGVhZCB0dHlfZmlsZXM7CgoKCQoJIAoKCgoJdW5zaWduZWQgaW50IGNvbHVtbjsKCXVu
c2lnbmVkIGNoYXIgbG5leHQ6MSwgZXJhc2luZzoxLCByYXc6MSwgcmVhbF9yYXc6MSwgaWNhbm9u
OjE7Cgl1bnNpZ25lZCBjaGFyIGNsb3Npbmc6MTsKCXVuc2lnbmVkIHNob3J0IG1pbmltdW1fdG9f
d2FrZTsKCXVuc2lnbmVkIG92ZXJydW5fdGltZTsKCWludCBudW1fb3ZlcnJ1bjsKCXVuc2lnbmVk
IGxvbmcgcHJvY2Vzc19jaGFyX21hcFsyNTYvKDgqc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKV07Cglj
aGFyICpyZWFkX2J1ZjsKCWludCByZWFkX2hlYWQ7CglpbnQgcmVhZF90YWlsOwoJaW50IHJlYWRf
Y250OwoJdW5zaWduZWQgbG9uZyByZWFkX2ZsYWdzWzQwOTYgLyg4KnNpemVvZih1bnNpZ25lZCBs
b25nKSldOwoJaW50IGNhbm9uX2RhdGE7Cgl1bnNpZ25lZCBsb25nIGNhbm9uX2hlYWQ7Cgl1bnNp
Z25lZCBpbnQgY2Fub25fY29sdW1uOwoJc3RydWN0IHNlbWFwaG9yZSBhdG9taWNfcmVhZDsKCXN0
cnVjdCBzZW1hcGhvcmUgYXRvbWljX3dyaXRlOwoJc3BpbmxvY2tfdCByZWFkX2xvY2s7CgkgCglz
dHJ1Y3QgdHFfc3RydWN0IFNBS190cTsKfTsKCiAKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
ZXh0ZXJuIHZvaWQgdHR5X3dyaXRlX2ZsdXNoKHN0cnVjdCB0dHlfc3RydWN0ICopOwoKZXh0ZXJu
IHN0cnVjdCB0ZXJtaW9zIHR0eV9zdGRfdGVybWlvczsKZXh0ZXJuIHN0cnVjdCB0dHlfc3RydWN0
ICogcmVkaXJlY3Q7CmV4dGVybiBzdHJ1Y3QgdHR5X2xkaXNjIGxkaXNjc1tdOwpleHRlcm4gaW50
IGZnX2NvbnNvbGUsIGxhc3RfY29uc29sZSwgd2FudF9jb25zb2xlOwoKZXh0ZXJuIGludCBrbXNn
X3JlZGlyZWN0OwoKZXh0ZXJuIHZvaWQgY29uX2luaXQodm9pZCk7CmV4dGVybiB2b2lkIGNvbnNv
bGVfaW5pdCh2b2lkKTsKCmV4dGVybiBpbnQgbHBfaW5pdCh2b2lkKTsKZXh0ZXJuIGludCBwdHlf
aW5pdCh2b2lkKTsKZXh0ZXJuIHZvaWQgdHR5X2luaXQodm9pZCk7CmV4dGVybiBpbnQgbXhzZXJf
aW5pdCh2b2lkKTsKZXh0ZXJuIGludCBtb3hhX2luaXQodm9pZCk7CmV4dGVybiBpbnQgaXAyX2lu
aXQodm9pZCk7CmV4dGVybiBpbnQgcGN4ZV9pbml0KHZvaWQpOwpleHRlcm4gaW50IHBjX2luaXQo
dm9pZCk7CmV4dGVybiBpbnQgdmNzX2luaXQodm9pZCk7CmV4dGVybiBpbnQgcnBfaW5pdCh2b2lk
KTsKZXh0ZXJuIGludCBjeV9pbml0KHZvaWQpOwpleHRlcm4gaW50IHN0bF9pbml0KHZvaWQpOwpl
eHRlcm4gaW50IHN0bGlfaW5pdCh2b2lkKTsKZXh0ZXJuIGludCBzcGVjaWFsaXhfaW5pdCh2b2lk
KTsKZXh0ZXJuIGludCBlc3BzZXJpYWxfaW5pdCh2b2lkKTsKZXh0ZXJuIGludCBtYWNzZXJpYWxf
aW5pdCh2b2lkKTsKZXh0ZXJuIGludCBhMjIzMmJvYXJkX2luaXQodm9pZCk7CgpleHRlcm4gaW50
IHR0eV9wYXJhbm9pYV9jaGVjayhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBrZGV2X3QgZGV2aWNl
LAoJCQkgICAgICBjb25zdCBjaGFyICpyb3V0aW5lKTsKZXh0ZXJuIGNoYXIgKnR0eV9uYW1lKHN0
cnVjdCB0dHlfc3RydWN0ICp0dHksIGNoYXIgKmJ1Zik7CmV4dGVybiB2b2lkIHR0eV93YWl0X3Vu
dGlsX3NlbnQoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIGxvbmcgdGltZW91dCk7CmV4dGVybiBp
bnQgdHR5X2NoZWNrX2NoYW5nZShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSk7CmV4dGVybiB2b2lk
IHN0b3BfdHR5KHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KTsKZXh0ZXJuIHZvaWQgc3RhcnRfdHR5
KHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KTsKZXh0ZXJuIGludCB0dHlfcmVnaXN0ZXJfbGRpc2Mo
aW50IGRpc2MsIHN0cnVjdCB0dHlfbGRpc2MgKm5ld19sZGlzYyk7CmV4dGVybiBpbnQgdHR5X3Jl
Z2lzdGVyX2RyaXZlcihzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyKTsKZXh0ZXJuIGludCB0dHlf
dW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlcik7CmV4dGVybiB2b2lk
IHR0eV9yZWdpc3Rlcl9kZXZmcyAoc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlciwgdW5zaWduZWQg
aW50IGZsYWdzLAoJCQkJdW5zaWduZWQgbWlub3IpOwpleHRlcm4gdm9pZCB0dHlfdW5yZWdpc3Rl
cl9kZXZmcyAoc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlciwgdW5zaWduZWQgbWlub3IpOwpleHRl
cm4gaW50IHR0eV9yZWFkX3Jhd19kYXRhKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVk
IGNoYXIgKmJ1ZnAsCgkJCSAgICAgaW50IGJ1Zmxlbik7CmV4dGVybiB2b2lkIHR0eV93cml0ZV9t
ZXNzYWdlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNoYXIgKm1zZyk7CgpleHRlcm4gaW50IGlz
X29ycGhhbmVkX3BncnAoaW50IHBncnApOwpleHRlcm4gaW50IGlzX2lnbm9yZWQoaW50IHNpZyk7
CmV4dGVybiBpbnQgdHR5X3NpZ25hbChpbnQgc2lnLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsK
ZXh0ZXJuIHZvaWQgdHR5X2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSk7CmV4dGVybiB2
b2lkIHR0eV92aGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KTsKZXh0ZXJuIHZvaWQgdHR5
X3VuaGFuZ3VwKHN0cnVjdCBmaWxlICpmaWxwKTsKZXh0ZXJuIGludCB0dHlfaHVuZ191cF9wKHN0
cnVjdCBmaWxlICogZmlscCk7CmV4dGVybiB2b2lkIGRvX1NBSyhzdHJ1Y3QgdHR5X3N0cnVjdCAq
dHR5KTsKZXh0ZXJuIHZvaWQgZGlzYXNzb2NpYXRlX2N0dHkoaW50IHByaXYpOwpleHRlcm4gdm9p
ZCB0dHlfZmxpcF9idWZmZXJfcHVzaChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKZXh0ZXJuIGlu
dCB0dHlfZ2V0X2JhdWRfcmF0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKCiAKZXh0ZXJuIHN0
cnVjdCB0dHlfbGRpc2MgdHR5X2xkaXNjX05fVFRZOwoKIApleHRlcm4gaW50IG5fdHR5X2lvY3Rs
KHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCgkJICAgICAgIHVu
c2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKCiAKCmV4dGVybiB2b2lkIHNlcmlh
bF9jb25zb2xlX2luaXQodm9pZCk7CiAKIAoKZXh0ZXJuIGludCBwY3hlX29wZW4oc3RydWN0IHR0
eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApOwoKIAoKZXh0ZXJuIHZvaWQgY29uc29s
ZV9wcmludChjb25zdCBjaGFyICopOwoKIAoKZXh0ZXJuIGludCB2dF9pb2N0bChzdHJ1Y3QgdHR5
X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCgkJICAgIHVuc2lnbmVkIGludCBjbWQs
IHVuc2lnbmVkIGxvbmcgYXJnKTsKCgoKIyAxMyAiZHJpdmVycy92aWRlby9mYmNvbi1jZmIxNi5j
IiAyCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9p
bmNsdWRlL2xpbnV4L2NvbnNvbGUuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgpzdHJ1Y3QgdmNf
ZGF0YTsKc3RydWN0IGNvbnNvbGVfZm9udF9vcDsKCiAKCgoKCgpzdHJ1Y3QgY29uc3cgewoJY29u
c3QgY2hhciAqKCpjb25fc3RhcnR1cCkodm9pZCk7Cgl2b2lkCSgqY29uX2luaXQpKHN0cnVjdCB2
Y19kYXRhICosIGludCk7Cgl2b2lkCSgqY29uX2RlaW5pdCkoc3RydWN0IHZjX2RhdGEgKik7Cgl2
b2lkCSgqY29uX2NsZWFyKShzdHJ1Y3QgdmNfZGF0YSAqLCBpbnQsIGludCwgaW50LCBpbnQpOwoJ
dm9pZAkoKmNvbl9wdXRjKShzdHJ1Y3QgdmNfZGF0YSAqLCBpbnQsIGludCwgaW50KTsKCXZvaWQJ
KCpjb25fcHV0Y3MpKHN0cnVjdCB2Y19kYXRhICosIGNvbnN0IHVuc2lnbmVkIHNob3J0ICosIGlu
dCwgaW50LCBpbnQpOwoJdm9pZAkoKmNvbl9jdXJzb3IpKHN0cnVjdCB2Y19kYXRhICosIGludCk7
CglpbnQJKCpjb25fc2Nyb2xsKShzdHJ1Y3QgdmNfZGF0YSAqLCBpbnQsIGludCwgaW50LCBpbnQp
OwoJdm9pZAkoKmNvbl9ibW92ZSkoc3RydWN0IHZjX2RhdGEgKiwgaW50LCBpbnQsIGludCwgaW50
LCBpbnQsIGludCk7CglpbnQJKCpjb25fc3dpdGNoKShzdHJ1Y3QgdmNfZGF0YSAqKTsKCWludAko
KmNvbl9ibGFuaykoc3RydWN0IHZjX2RhdGEgKiwgaW50KTsKCWludAkoKmNvbl9mb250X29wKShz
dHJ1Y3QgdmNfZGF0YSAqLCBzdHJ1Y3QgY29uc29sZV9mb250X29wICopOwoJaW50CSgqY29uX3Nl
dF9wYWxldHRlKShzdHJ1Y3QgdmNfZGF0YSAqLCB1bnNpZ25lZCBjaGFyICopOwoJaW50CSgqY29u
X3Njcm9sbGRlbHRhKShzdHJ1Y3QgdmNfZGF0YSAqLCBpbnQpOwoJaW50CSgqY29uX3NldF9vcmln
aW4pKHN0cnVjdCB2Y19kYXRhICopOwoJdm9pZAkoKmNvbl9zYXZlX3NjcmVlbikoc3RydWN0IHZj
X2RhdGEgKik7Cgl1OAkoKmNvbl9idWlsZF9hdHRyKShzdHJ1Y3QgdmNfZGF0YSAqLCB1OCwgdTgs
IHU4LCB1OCwgdTgpOwoJdm9pZAkoKmNvbl9pbnZlcnRfcmVnaW9uKShzdHJ1Y3QgdmNfZGF0YSAq
LCB1MTYgKiwgaW50KTsKCXUxNiAgICAqKCpjb25fc2NyZWVuX3Bvcykoc3RydWN0IHZjX2RhdGEg
KiwgaW50KTsKCXVuc2lnbmVkIGxvbmcgKCpjb25fZ2V0eHkpKHN0cnVjdCB2Y19kYXRhICosIHVu
c2lnbmVkIGxvbmcsIGludCAqLCBpbnQgKik7Cn07CgpleHRlcm4gY29uc3Qgc3RydWN0IGNvbnN3
ICpjb25zd2l0Y2hwOwoKZXh0ZXJuIGNvbnN0IHN0cnVjdCBjb25zdyBkdW1teV9jb247CSAKZXh0
ZXJuIGNvbnN0IHN0cnVjdCBjb25zdyBmYl9jb247CSAKZXh0ZXJuIGNvbnN0IHN0cnVjdCBjb25z
dyB2Z2FfY29uOwkgCmV4dGVybiBjb25zdCBzdHJ1Y3QgY29uc3cgbmV3cG9ydF9jb247CSAKZXh0
ZXJuIGNvbnN0IHN0cnVjdCBjb25zdyBwcm9tX2NvbjsJIAoKdm9pZCB0YWtlX292ZXJfY29uc29s
ZShjb25zdCBzdHJ1Y3QgY29uc3cgKnN3LCBpbnQgZmlyc3QsIGludCBsYXN0LCBpbnQgZGVmbHQp
Owp2b2lkIGdpdmVfdXBfY29uc29sZShjb25zdCBzdHJ1Y3QgY29uc3cgKnN3KTsKCiAKCgoKIAoK
CgoKIAoKCnN0cnVjdCBjb25zb2xlX2NtZGxpbmUKewoJY2hhcgluYW1lWzhdOwkJCSAKCWludAlp
bmRleDsJCQkJIAoJY2hhcgkqb3B0aW9uczsJCQkgCn07CgpleHRlcm4gc3RydWN0IGNvbnNvbGVf
Y21kbGluZSBjb25zb2xlX2xpc3RbOCBdOwoKIAoKCgoKCgoKCnN0cnVjdCBjb25zb2xlCnsKCWNo
YXIJbmFtZVs4XTsKCXZvaWQJKCp3cml0ZSkoc3RydWN0IGNvbnNvbGUgKiwgY29uc3QgY2hhciAq
LCB1bnNpZ25lZCk7CglpbnQJKCpyZWFkKShzdHJ1Y3QgY29uc29sZSAqLCBjb25zdCBjaGFyICos
IHVuc2lnbmVkKTsKCWtkZXZfdAkoKmRldmljZSkoc3RydWN0IGNvbnNvbGUgKik7CglpbnQJKCp3
YWl0X2tleSkoc3RydWN0IGNvbnNvbGUgKik7Cgl2b2lkCSgqdW5ibGFuaykodm9pZCk7CglpbnQJ
KCpzZXR1cCkoc3RydWN0IGNvbnNvbGUgKiwgY2hhciAqKTsKCXNob3J0CWZsYWdzOwoJc2hvcnQJ
aW5kZXg7CglpbnQJY2ZsYWc7CglzdHJ1Y3QJIGNvbnNvbGUgKm5leHQ7Cn07CgpleHRlcm4gdm9p
ZCByZWdpc3Rlcl9jb25zb2xlKHN0cnVjdCBjb25zb2xlICopOwpleHRlcm4gaW50IHVucmVnaXN0
ZXJfY29uc29sZShzdHJ1Y3QgY29uc29sZSAqKTsKZXh0ZXJuIHN0cnVjdCBjb25zb2xlICpjb25z
b2xlX2RyaXZlcnM7CmV4dGVybiB2b2lkIGFjcXVpcmVfY29uc29sZV9zZW0odm9pZCk7CmV4dGVy
biB2b2lkIHJlbGVhc2VfY29uc29sZV9zZW0odm9pZCk7CmV4dGVybiB2b2lkIGNvbnNvbGVfY29u
ZGl0aW9uYWxfc2NoZWR1bGUodm9pZCk7CmV4dGVybiB2b2lkIGNvbnNvbGVfdW5ibGFuayh2b2lk
KTsKCiAKCgoKCgoKIyAxNCAiZHJpdmVycy92aWRlby9mYmNvbi1jZmIxNi5jIiAyCgoKIyAxICIv
aG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51
eC9mYi5oIiAxCgoKCgoKCiAKCgoKCiAKCgoKCgoKCiAKIAogCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnN0
cnVjdCBmYl9maXhfc2NyZWVuaW5mbyB7CgljaGFyIGlkWzE2XTsJCQkgCgl1bnNpZ25lZCBsb25n
IHNtZW1fc3RhcnQ7CSAKCQkJCQkgCglfX3UzMiBzbWVtX2xlbjsJCQkgCglfX3UzMiB0eXBlOwkJ
CSAKCV9fdTMyIHR5cGVfYXV4OwkJCSAKCV9fdTMyIHZpc3VhbDsJCQkgIAoJX191MTYgeHBhbnN0
ZXA7CQkJIAoJX191MTYgeXBhbnN0ZXA7CQkJIAoJX191MTYgeXdyYXBzdGVwOwkJIAoJX191MzIg
bGluZV9sZW5ndGg7CQkgCgl1bnNpZ25lZCBsb25nIG1taW9fc3RhcnQ7CSAKCQkJCQkgCglfX3Uz
MiBtbWlvX2xlbjsJCQkgCglfX3UzMiBhY2NlbDsJCQkgCglfX3UxNiByZXNlcnZlZFszXTsJCSAK
fTsKCiAKCgoKCgpzdHJ1Y3QgZmJfYml0ZmllbGQgewoJX191MzIgb2Zmc2V0OwkJCSAKCV9fdTMy
IGxlbmd0aDsJCQkgCglfX3UzMiBtc2JfcmlnaHQ7CQkgIAoJCQkJCSAgCn07CgoKCgoKCgoJCQkJ
CSAKCgoKCgoKCgoKCgoJCQkJCSAKCQkJCQkgCgoKCgoKCgoKCgoKc3RydWN0IGZiX3Zhcl9zY3Jl
ZW5pbmZvIHsKCV9fdTMyIHhyZXM7CQkJIAoJX191MzIgeXJlczsKCV9fdTMyIHhyZXNfdmlydHVh
bDsJCSAKCV9fdTMyIHlyZXNfdmlydHVhbDsKCV9fdTMyIHhvZmZzZXQ7CQkJIAoJX191MzIgeW9m
ZnNldDsJCQkgCgoJX191MzIgYml0c19wZXJfcGl4ZWw7CQkgCglfX3UzMiBncmF5c2NhbGU7CQkg
CgoJc3RydWN0IGZiX2JpdGZpZWxkIHJlZDsJCSAKCXN0cnVjdCBmYl9iaXRmaWVsZCBncmVlbjsJ
IAoJc3RydWN0IGZiX2JpdGZpZWxkIGJsdWU7CglzdHJ1Y3QgZmJfYml0ZmllbGQgdHJhbnNwOwkg
CQoKCV9fdTMyIG5vbnN0ZDsJCQkgCgoJX191MzIgYWN0aXZhdGU7CQkJIAoKCV9fdTMyIGhlaWdo
dDsJCQkgCglfX3UzMiB3aWR0aDsJCQkgCgoJX191MzIgYWNjZWxfZmxhZ3M7CQkgCgoJIAoJX191
MzIgcGl4Y2xvY2s7CQkJIAoJX191MzIgbGVmdF9tYXJnaW47CQkgCglfX3UzMiByaWdodF9tYXJn
aW47CQkgCglfX3UzMiB1cHBlcl9tYXJnaW47CQkgCglfX3UzMiBsb3dlcl9tYXJnaW47CglfX3Uz
MiBoc3luY19sZW47CQkgCglfX3UzMiB2c3luY19sZW47CQkgCglfX3UzMiBzeW5jOwkJCSAKCV9f
dTMyIHZtb2RlOwkJCSAKCV9fdTMyIHJlc2VydmVkWzZdOwkJIAp9OwoKc3RydWN0IGZiX2NtYXAg
ewoJX191MzIgc3RhcnQ7CQkJIAoJX191MzIgbGVuOwkJCSAKCV9fdTE2ICpyZWQ7CQkJIAoJX191
MTYgKmdyZWVuOwoJX191MTYgKmJsdWU7CglfX3UxNiAqdHJhbnNwOwkJCSAKfTsKCnN0cnVjdCBm
Yl9jb24yZmJtYXAgewoJX191MzIgY29uc29sZTsKCV9fdTMyIGZyYW1lYnVmZmVyOwp9OwoKIAoK
CgoKCnN0cnVjdCBmYl9tb25zcGVjcyB7CglfX3UzMiBoZm1pbjsJCQkgCglfX3UzMiBoZm1heDsg
CQkJIAoJX191MTYgdmZtaW47CQkJIAoJX191MTYgdmZtYXg7CQkJIAoJdW5zaWduZWQgZHBtcyA6
IDE7CQkgCn07CgoKCgoKCgoKCgoKc3RydWN0IGZiX3ZibGFuayB7CglfX3UzMiBmbGFnczsJCQkg
CglfX3UzMiBjb3VudDsJCQkgCglfX3UzMiB2Y291bnQ7CQkJIAoJX191MzIgaGNvdW50OwkJCSAK
CV9fdTMyIHJlc2VydmVkWzRdOwkJIAp9OwoKCgoKZXh0ZXJuIGludCBHRVRfRkJfSURYKGtkZXZf
dCByZGV2KTsKCgoKCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51
eC0yLjQueC9pbmNsdWRlL2xpbnV4L2luaXQuaCIgMQoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKdHlwZWRlZiBpbnQgKCppbml0Y2FsbF90KSh2b2lkKTsK
dHlwZWRlZiB2b2lkICgqZXhpdGNhbGxfdCkodm9pZCk7CgpleHRlcm4gaW5pdGNhbGxfdCBfX2lu
aXRjYWxsX3N0YXJ0LCBfX2luaXRjYWxsX2VuZDsKCgoKCgoKIAoKCnN0cnVjdCBrZXJuZWxfcGFy
YW0gewoJY29uc3QgY2hhciAqc3RyOwoJaW50ICgqc2V0dXBfZnVuYykoY2hhciAqKTsKfTsKCmV4
dGVybiBzdHJ1Y3Qga2VybmVsX3BhcmFtIF9fc2V0dXBfc3RhcnQsIF9fc2V0dXBfZW5kOwoKCgoK
CgoKIAoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKIAoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCiMgMTQ5
ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9s
aW51eC9pbml0LmgiCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgojIDI1MyAiL2hvbWUvY2Fy
bG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvZmIuaCIg
MgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5j
bHVkZS9saW51eC9kZXZmc19mc19rZXJuZWwuaCIgMQoKCgoKCiMgMSAiL2hvbWUvY2FybG9zL0J1
aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvbG9ja3MuaCIgMQoK
CgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5j
bHVkZS9saW51eC9tbS5oIiAxCgoKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2Vj
bC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvc2NoZWQuaCIgMQoKCgoKCmV4dGVybiB1bnNp
Z25lZCBsb25nIGV2ZW50OwoKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11
Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvYmluZm10cy5oIiAxCgoKCiMgMSAiL2hvbWUvY2Fy
bG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvcHRyYWNl
LmgiIDEKCgogCiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDQgIi9ob21lL2Nhcmxvcy9CdWls
ZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaCIgMgoK
IyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVk
ZS9saW51eC9jYXBhYmlsaXR5LmgiIDEKIAoKCgoKCgoKCgogCgoKCgoKCgogCgoKCgogCgoKCgog
CgoKdHlwZWRlZiBzdHJ1Y3QgX191c2VyX2NhcF9oZWFkZXJfc3RydWN0IHsKCV9fdTMyIHZlcnNp
b247CglpbnQgcGlkOwp9ICpjYXBfdXNlcl9oZWFkZXJfdDsKIAp0eXBlZGVmIHN0cnVjdCBfX3Vz
ZXJfY2FwX2RhdGFfc3RydWN0IHsKICAgICAgICBfX3UzMiBlZmZlY3RpdmU7CiAgICAgICAgX191
MzIgcGVybWl0dGVkOwogICAgICAgIF9fdTMyIGluaGVyaXRhYmxlOwp9ICpjYXBfdXNlcl9kYXRh
X3Q7CiAgCgoKIAoKCgoKCgoKCgp0eXBlZGVmIF9fdTMyIGtlcm5lbF9jYXBfdDsKCgogIAoKCgoK
CgogCgoKCiAKCgoKCgogCgoKCgoKIAoKCgoKICAgIAogCgoKCgoKIAoKCgoKCgoKCiAKCgoKIAoK
CgoKCiAKIAogCgoKCiAKIAoKCgoKIAoKCgogCgoKCgogCgoKCiAKIAoKCgogCgoKCiAKIAogCiAK
IAoKIAogCiAKIAogCiAKIAoKCgogCiAKCgoKIAogCgoKCgogCgoKCiAKIAoKCiAKIAoKCgogCgoK
CiAKCgoKIAoKCgogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgogCiAKIAogCiAKIAog
CgogCiAKIAogCiAKIAogCiAKIAoKIAoKCgogCgoKCiAKCiAKCgoKCgogCiAKIAogCgogCgogCiAK
IAogCgoKCiAKIAogCgoKCiAKIAoKCgogCgoKCiAKCgoKCiAKCgpleHRlcm4ga2VybmVsX2NhcF90
IGNhcF9ic2V0OwoKIAoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnN0YXRpYyBpbmxpbmUga2Vy
bmVsX2NhcF90IGNhcF9jb21iaW5lKGtlcm5lbF9jYXBfdCBhLCBrZXJuZWxfY2FwX3QgYikKewog
ICAgIGtlcm5lbF9jYXBfdCBkZXN0OwogICAgICggZGVzdCApICA9ICggYSApICB8ICggYiApIDsK
ICAgICByZXR1cm4gZGVzdDsKfQoKc3RhdGljIGlubGluZSBrZXJuZWxfY2FwX3QgY2FwX2ludGVy
c2VjdChrZXJuZWxfY2FwX3QgYSwga2VybmVsX2NhcF90IGIpCnsKICAgICBrZXJuZWxfY2FwX3Qg
ZGVzdDsKICAgICAoIGRlc3QgKSAgPSAoIGEgKSAgJiAoIGIgKSA7CiAgICAgcmV0dXJuIGRlc3Q7
Cn0KCnN0YXRpYyBpbmxpbmUga2VybmVsX2NhcF90IGNhcF9kcm9wKGtlcm5lbF9jYXBfdCBhLCBr
ZXJuZWxfY2FwX3QgZHJvcCkKewogICAgIGtlcm5lbF9jYXBfdCBkZXN0OwogICAgICggZGVzdCAp
ICA9ICggYSApICAmIH4oIGRyb3AgKSA7CiAgICAgcmV0dXJuIGRlc3Q7Cn0KCnN0YXRpYyBpbmxp
bmUga2VybmVsX2NhcF90IGNhcF9pbnZlcnQoa2VybmVsX2NhcF90IGMpCnsKICAgICBrZXJuZWxf
Y2FwX3QgZGVzdDsKICAgICAoIGRlc3QgKSAgPSB+KCBjICkgOwogICAgIHJldHVybiBkZXN0Owp9
CgoKCgoKCgoKCgoKCgojIDUgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51
eC0yLjQueC9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaCIgMgoKCiAKCgoKCgoKIAoKCgoKIAoKCnN0
cnVjdCBsaW51eF9iaW5wcm17CgljaGFyIGJ1ZlsxMjggXTsKCXN0cnVjdCBwYWdlICpwYWdlWzMy
IF07Cgl1bnNpZ25lZCBsb25nIHA7ICAKCWludCBzaF9iYW5nOwoJc3RydWN0IGZpbGUgKiBmaWxl
OwoJaW50IGVfdWlkLCBlX2dpZDsKCWtlcm5lbF9jYXBfdCBjYXBfaW5oZXJpdGFibGUsIGNhcF9w
ZXJtaXR0ZWQsIGNhcF9lZmZlY3RpdmU7CglpbnQgYXJnYywgZW52YzsKCWNoYXIgKiBmaWxlbmFt
ZTsJIAoJdW5zaWduZWQgbG9uZyBsb2FkZXIsIGV4ZWM7Cn07CgogCgoKCnN0cnVjdCBsaW51eF9i
aW5mbXQgewoJc3RydWN0IGxpbnV4X2JpbmZtdCAqIG5leHQ7CglzdHJ1Y3QgbW9kdWxlICptb2R1
bGU7CglpbnQgKCpsb2FkX2JpbmFyeSkoc3RydWN0IGxpbnV4X2JpbnBybSAqLCBzdHJ1Y3QgIHB0
X3JlZ3MgKiByZWdzKTsKCWludCAoKmxvYWRfc2hsaWIpKHN0cnVjdCBmaWxlICopOwoJaW50ICgq
Y29yZV9kdW1wKShsb25nIHNpZ25yLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MsIHN0cnVjdCBmaWxl
ICogZmlsZSk7Cgl1bnNpZ25lZCBsb25nIG1pbl9jb3JlZHVtcDsJIAp9OwoKZXh0ZXJuIGludCBy
ZWdpc3Rlcl9iaW5mbXQoc3RydWN0IGxpbnV4X2JpbmZtdCAqKTsKZXh0ZXJuIGludCB1bnJlZ2lz
dGVyX2JpbmZtdChzdHJ1Y3QgbGludXhfYmluZm10ICopOwoKZXh0ZXJuIGludCBwcmVwYXJlX2Jp
bnBybShzdHJ1Y3QgbGludXhfYmlucHJtICopOwpleHRlcm4gdm9pZCByZW1vdmVfYXJnX3plcm8o
c3RydWN0IGxpbnV4X2JpbnBybSAqKTsKZXh0ZXJuIGludCBzZWFyY2hfYmluYXJ5X2hhbmRsZXIo
c3RydWN0IGxpbnV4X2JpbnBybSAqLHN0cnVjdCBwdF9yZWdzICopOwpleHRlcm4gaW50IGZsdXNo
X29sZF9leGVjKHN0cnVjdCBsaW51eF9iaW5wcm0gKiBicHJtKTsKZXh0ZXJuIGludCBzZXR1cF9h
cmdfcGFnZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqIGJwcm0pOwpleHRlcm4gaW50IGNvcHlfc3Ry
aW5ncyhpbnQgYXJnYyxjaGFyICoqIGFyZ3Ysc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSk7IApl
eHRlcm4gaW50IGNvcHlfc3RyaW5nc19rZXJuZWwoaW50IGFyZ2MsY2hhciAqKiBhcmd2LHN0cnVj
dCBsaW51eF9iaW5wcm0gKmJwcm0pOwpleHRlcm4gdm9pZCBjb21wdXRlX2NyZWRzKHN0cnVjdCBs
aW51eF9iaW5wcm0gKmJpbnBybSk7CmV4dGVybiBpbnQgZG9fY29yZWR1bXAobG9uZyBzaWduciwg
c3RydWN0IHB0X3JlZ3MgKiByZWdzKTsKZXh0ZXJuIHZvaWQgc2V0X2JpbmZtdChzdHJ1Y3QgbGlu
dXhfYmluZm10ICpuZXcpOwoKCgoKCgoKCgojIDkgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5V
WC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIKCiMgMSAiL2hvbWUv
Y2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvdGhy
ZWFkcy5oIiAxCgoKCgoKIAoKCgogCgoKCgoKCgoKIAoKCgoKCiMgMTAgIi9ob21lL2Nhcmxvcy9C
dWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIK
CgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5j
bHVkZS9saW51eC90aW1lcy5oIiAxCgoKCnN0cnVjdCB0bXMgewoJY2xvY2tfdCB0bXNfdXRpbWU7
CgljbG9ja190IHRtc19zdGltZTsKCWNsb2NrX3QgdG1zX2N1dGltZTsKCWNsb2NrX3QgdG1zX2Nz
dGltZTsKfTsKCgojIDEzICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgt
Mi40LngvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMv
VUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L3RpbWV4LmgiIDEKIAoKCgoK
CgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK
CgoKCgoKCgoKCiMgNzkgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0y
LjQueC9pbmNsdWRlL2xpbnV4L3RpbWV4LmgiCgoKIAoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKIyAxICIvaG9t
ZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vdGlt
ZXguaCIgMQojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQu
eC9pbmNsdWRlL2FzbS1tNjhrL3RpbWV4LmgiIDEKIAoKCgoKCgoKCgoKCgoKdHlwZWRlZiB1bnNp
Z25lZCBsb25nIGN5Y2xlc190OwoKc3RhdGljIGlubGluZSBjeWNsZXNfdCBnZXRfY3ljbGVzKHZv
aWQpCnsKCXJldHVybiAwOwp9CgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNs
LXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vdGltZXguaCIgMgoKIyAxNTIgIi9ob21lL2Nhcmxv
cy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L3RpbWV4Lmgi
IDIKCgogCgoKIAoKCgpzdHJ1Y3QgdGltZXggewoJdW5zaWduZWQgaW50IG1vZGVzOwkgCglsb25n
IG9mZnNldDsJCSAKCWxvbmcgZnJlcTsJCSAKCWxvbmcgbWF4ZXJyb3I7CQkgCglsb25nIGVzdGVy
cm9yOwkJIAoJaW50IHN0YXR1czsJCSAKCWxvbmcgY29uc3RhbnQ7CQkgCglsb25nIHByZWNpc2lv
bjsJCSAKCWxvbmcgdG9sZXJhbmNlOwkJIAoKCglzdHJ1Y3QgdGltZXZhbCB0aW1lOwkgCglsb25n
IHRpY2s7CQkgCgoJbG9uZyBwcHNmcmVxOyAgICAgICAgICAgIAoJbG9uZyBqaXR0ZXI7ICAgICAg
ICAgICAgIAoJaW50IHNoaWZ0OyAgICAgICAgICAgICAgIAoJbG9uZyBzdGFiaWw7ICAgICAgICAg
ICAgIAoJbG9uZyBqaXRjbnQ7ICAgICAgICAgICAgIAoJbG9uZyBjYWxjbnQ7ICAgICAgICAgICAg
IAoJbG9uZyBlcnJjbnQ7ICAgICAgICAgICAgIAoJbG9uZyBzdGJjbnQ7ICAgICAgICAgICAgIAoK
CWludCAgOjMyOyBpbnQgIDozMjsgaW50ICA6MzI7IGludCAgOjMyOwoJaW50ICA6MzI7IGludCAg
OjMyOyBpbnQgIDozMjsgaW50ICA6MzI7CglpbnQgIDozMjsgaW50ICA6MzI7IGludCAgOjMyOyBp
bnQgIDozMjsKfTsKCiAKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgogCgoKCgoKCgoKCgoKIAoKCgoKZXh0ZXJuIGxvbmcgdGljazsgICAgICAgICAgICAgICAg
ICAgICAgIApleHRlcm4gaW50IHRpY2thZGo7CQkJIAoKIAoKCmV4dGVybiBpbnQgdGltZV9zdGF0
ZTsJCSAKZXh0ZXJuIGludCB0aW1lX3N0YXR1czsJCSAKZXh0ZXJuIGxvbmcgdGltZV9vZmZzZXQ7
CSAKZXh0ZXJuIGxvbmcgdGltZV9jb25zdGFudDsJIApleHRlcm4gbG9uZyB0aW1lX3RvbGVyYW5j
ZTsJIApleHRlcm4gbG9uZyB0aW1lX3ByZWNpc2lvbjsJIApleHRlcm4gbG9uZyB0aW1lX21heGVy
cm9yOwkgCmV4dGVybiBsb25nIHRpbWVfZXN0ZXJyb3I7CSAKCmV4dGVybiBsb25nIHRpbWVfcGhh
c2U7CQkgCmV4dGVybiBsb25nIHRpbWVfZnJlcTsJCSAKZXh0ZXJuIGxvbmcgdGltZV9hZGo7CQkg
CmV4dGVybiBsb25nIHRpbWVfcmVmdGltZTsJIAoKZXh0ZXJuIGxvbmcgdGltZV9hZGp1c3Q7CSAK
CiAKZXh0ZXJuIGxvbmcgcHBzX29mZnNldDsJCSAKZXh0ZXJuIGxvbmcgcHBzX2ppdHRlcjsJCSAK
ZXh0ZXJuIGxvbmcgcHBzX2ZyZXE7CQkgCmV4dGVybiBsb25nIHBwc19zdGFiaWw7CQkgCmV4dGVy
biBsb25nIHBwc192YWxpZDsJCSAKCiAKZXh0ZXJuIGludCBwcHNfc2hpZnQ7CQkgCmV4dGVybiBs
b25nIHBwc19qaXRjbnQ7CQkgCmV4dGVybiBsb25nIHBwc19jYWxjbnQ7CQkgCmV4dGVybiBsb25n
IHBwc19lcnJjbnQ7CQkgCmV4dGVybiBsb25nIHBwc19zdGJjbnQ7CQkgCgoKCgojIDE0ICIvaG9t
ZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9z
Y2hlZC5oIiAyCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0y
LjQueC9pbmNsdWRlL2xpbnV4L3JidHJlZS5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCByYl9ub2RlX3MKewoJc3RydWN0IHJiX25v
ZGVfcyAqIHJiX3BhcmVudDsKCWludCByYl9jb2xvcjsKCgoJc3RydWN0IHJiX25vZGVfcyAqIHJi
X3JpZ2h0OwoJc3RydWN0IHJiX25vZGVfcyAqIHJiX2xlZnQ7Cn0KcmJfbm9kZV90OwoKdHlwZWRl
ZiBzdHJ1Y3QgcmJfcm9vdF9zCnsKCXN0cnVjdCByYl9ub2RlX3MgKiByYl9ub2RlOwp9CnJiX3Jv
b3RfdDsKCgoKCgpleHRlcm4gdm9pZCByYl9pbnNlcnRfY29sb3IocmJfbm9kZV90ICosIHJiX3Jv
b3RfdCAqKTsKZXh0ZXJuIHZvaWQgcmJfZXJhc2UocmJfbm9kZV90ICosIHJiX3Jvb3RfdCAqKTsK
CnN0YXRpYyBpbmxpbmUgdm9pZCByYl9saW5rX25vZGUocmJfbm9kZV90ICogbm9kZSwgcmJfbm9k
ZV90ICogcGFyZW50LCByYl9ub2RlX3QgKiogcmJfbGluaykKewoJbm9kZS0+cmJfcGFyZW50ID0g
cGFyZW50OwoJbm9kZS0+cmJfY29sb3IgPSAwIDsKCW5vZGUtPnJiX2xlZnQgPSBub2RlLT5yYl9y
aWdodCA9ICgodm9pZCAqKTApIDsKCgkqcmJfbGluayA9IG5vZGU7Cn0KCgojIDE1ICIvaG9tZS9j
YXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9zY2hl
ZC5oIiAyCgoKCgoKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4
LTIuNC54L2luY2x1ZGUvYXNtL21tdS5oIiAxCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJ
TlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtLW02OGsvbW11LmgiIDEKCgoKIAp0eXBl
ZGVmIHVuc2lnbmVkIGxvbmcgbW1fY29udGV4dF90OwoKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxk
cy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtL21tdS5oIiAyCgojIDIxICIv
aG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51
eC9zY2hlZC5oIiAyCgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGlu
dXgtMi40LngvaW5jbHVkZS9saW51eC9zbXAuaCIgMQoKCgogCgoKCgoKCiMgNzQgIi9ob21lL2Nh
cmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L3NtcC5o
IgoKCiAKCgogCgoKCgoKCgoKCgoKCiMgMjMgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9l
Y2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIKCgojIDEgIi9ob21lL2Nh
cmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L3NlbS5o
IiAxCgoKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54
L2luY2x1ZGUvbGludXgvaXBjLmgiIDEKCgoKCgoKCiAKc3RydWN0IGlwY19wZXJtCnsKCV9fa2Vy
bmVsX2tleV90CWtleTsKCV9fa2VybmVsX3VpZF90CXVpZDsKCV9fa2VybmVsX2dpZF90CWdpZDsK
CV9fa2VybmVsX3VpZF90CWN1aWQ7CglfX2tlcm5lbF9naWRfdAljZ2lkOwoJX19rZXJuZWxfbW9k
ZV90CW1vZGU7IAoJdW5zaWduZWQgc2hvcnQJc2VxOwp9OwoKIAojIDEgIi9ob21lL2Nhcmxvcy9C
dWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2FzbS9pcGNidWYuaCIgMQoj
IDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRl
L2FzbS1tNjhrL2lwY2J1Zi5oIiAxCgoKCiAKCgoKCgoKCgoKc3RydWN0IGlwYzY0X3Blcm0KewoJ
X19rZXJuZWxfa2V5X3QJCWtleTsKCV9fa2VybmVsX3VpZDMyX3QJdWlkOwoJX19rZXJuZWxfZ2lk
MzJfdAlnaWQ7CglfX2tlcm5lbF91aWQzMl90CWN1aWQ7CglfX2tlcm5lbF9naWQzMl90CWNnaWQ7
CglfX2tlcm5lbF9tb2RlX3QJCW1vZGU7Cgl1bnNpZ25lZCBzaG9ydAkJX19wYWQxOwoJdW5zaWdu
ZWQgc2hvcnQJCXNlcTsKCXVuc2lnbmVkIHNob3J0CQlfX3BhZDI7Cgl1bnNpZ25lZCBsb25nCQlf
X3VudXNlZDE7Cgl1bnNpZ25lZCBsb25nCQlfX3VudXNlZDI7Cn07CgoKIyAxICIvaG9tZS9jYXJs
b3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vaXBjYnVmLmgi
IDIKCiMgMjEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9p
bmNsdWRlL2xpbnV4L2lwYy5oIiAyCgoKIAoKCgoKIAoKICAgCgoKCiAKCgoKCgoKCgogCgoKCgoK
CgoKCgoKCiAKc3RydWN0IGtlcm5faXBjX3Blcm0KewoJa2V5X3QJCWtleTsKCXVpZF90CQl1aWQ7
CglnaWRfdAkJZ2lkOwoJdWlkX3QJCWN1aWQ7CglnaWRfdAkJY2dpZDsKCW1vZGVfdAkJbW9kZTsg
Cgl1bnNpZ25lZCBsb25nCXNlcTsKfTsKCgoKCgoKIyA0ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VD
TElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9zZW0uaCIgMgoKCiAKCgogCgoK
CgoKCgoKIAoKCgogCnN0cnVjdCBzZW1pZF9kcyB7CglzdHJ1Y3QgaXBjX3Blcm0Jc2VtX3Blcm07
CQkgCglfX2tlcm5lbF90aW1lX3QJc2VtX290aW1lOwkJIAoJX19rZXJuZWxfdGltZV90CXNlbV9j
dGltZTsJCSAKCXN0cnVjdCBzZW0JKnNlbV9iYXNlOwkJIAoJc3RydWN0IHNlbV9xdWV1ZSAqc2Vt
X3BlbmRpbmc7CQkgCglzdHJ1Y3Qgc2VtX3F1ZXVlICoqc2VtX3BlbmRpbmdfbGFzdDsJIAoJc3Ry
dWN0IHNlbV91bmRvCSp1bmRvOwkJCSAKCXVuc2lnbmVkIHNob3J0CXNlbV9uc2VtczsJCSAKfTsK
CiAKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5j
bHVkZS9hc20vc2VtYnVmLmgiIDEKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNs
LXVjbGludXgtMi40LngvaW5jbHVkZS9hc20tbTY4ay9zZW1idWYuaCIgMQoKCgogCgoKCgoKCgoK
CnN0cnVjdCBzZW1pZDY0X2RzIHsKCXN0cnVjdCBpcGM2NF9wZXJtIHNlbV9wZXJtOwkJIAoJX19r
ZXJuZWxfdGltZV90CXNlbV9vdGltZTsJCSAKCXVuc2lnbmVkIGxvbmcJX191bnVzZWQxOwoJX19r
ZXJuZWxfdGltZV90CXNlbV9jdGltZTsJCSAKCXVuc2lnbmVkIGxvbmcJX191bnVzZWQyOwoJdW5z
aWduZWQgbG9uZwlzZW1fbnNlbXM7CQkgCgl1bnNpZ25lZCBsb25nCV9fdW51c2VkMzsKCXVuc2ln
bmVkIGxvbmcJX191bnVzZWQ0Owp9OwoKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVY
L2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtL3NlbWJ1Zi5oIiAyCgojIDM1ICIvaG9tZS9j
YXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9zZW0u
aCIgMgoKCiAKc3RydWN0IHNlbWJ1ZiB7Cgl1bnNpZ25lZCBzaG9ydCAgc2VtX251bTsJIAoJc2hv
cnQJCXNlbV9vcDsJCSAKCXNob3J0CQlzZW1fZmxnOwkgCn07CgogCnVuaW9uIHNlbXVuIHsKCWlu
dCB2YWw7CQkJIAoJc3RydWN0IHNlbWlkX2RzICpidWY7CQkgCgl1bnNpZ25lZCBzaG9ydCAqYXJy
YXk7CQkgCglzdHJ1Y3Qgc2VtaW5mbyAqX19idWY7CQkgCgl2b2lkICpfX3BhZDsKfTsKCnN0cnVj
dCAgc2VtaW5mbyB7CglpbnQgc2VtbWFwOwoJaW50IHNlbW1uaTsKCWludCBzZW1tbnM7CglpbnQg
c2VtbW51OwoJaW50IHNlbW1zbDsKCWludCBzZW1vcG07CglpbnQgc2VtdW1lOwoJaW50IHNlbXVz
ejsKCWludCBzZW12bXg7CglpbnQgc2VtYWVtOwp9OwoKCgoKCgoKCiAKCgoKCgoKCiAKc3RydWN0
IHNlbSB7CglpbnQJc2VtdmFsOwkJIAoJaW50CXNlbXBpZDsJCSAKfTsKCiAKc3RydWN0IHNlbV9h
cnJheSB7CglzdHJ1Y3Qga2Vybl9pcGNfcGVybQlzZW1fcGVybTsJIAoJdGltZV90CQkJc2VtX290
aW1lOwkgCgl0aW1lX3QJCQlzZW1fY3RpbWU7CSAKCXN0cnVjdCBzZW0JCSpzZW1fYmFzZTsJIAoJ
c3RydWN0IHNlbV9xdWV1ZQkqc2VtX3BlbmRpbmc7CSAKCXN0cnVjdCBzZW1fcXVldWUJKipzZW1f
cGVuZGluZ19sYXN0OyAgCglzdHJ1Y3Qgc2VtX3VuZG8JCSp1bmRvOwkJIAoJdW5zaWduZWQgbG9u
ZwkJc2VtX25zZW1zOwkgCn07CgogCnN0cnVjdCBzZW1fcXVldWUgewoJc3RydWN0IHNlbV9xdWV1
ZSAqCW5leHQ7CSAgCglzdHJ1Y3Qgc2VtX3F1ZXVlICoqCXByZXY7CSAgCglzdHJ1Y3QgdGFza19z
dHJ1Y3QqCXNsZWVwZXI7ICAKCXN0cnVjdCBzZW1fdW5kbyAqCXVuZG87CSAgCglpbnQgICAgCQkJ
cGlkOwkgIAoJaW50ICAgIAkJCXN0YXR1czsJICAKCXN0cnVjdCBzZW1fYXJyYXkgKglzbWE7CSAg
CglpbnQJCQlpZDsJICAKCXN0cnVjdCBzZW1idWYgKgkJc29wczsJICAKCWludAkJCW5zb3BzOwkg
IAoJaW50CQkJYWx0ZXI7CSAgCn07CgogCgoKc3RydWN0IHNlbV91bmRvIHsKCXN0cnVjdCBzZW1f
dW5kbyAqCXByb2NfbmV4dDsJIAoJc3RydWN0IHNlbV91bmRvICoJaWRfbmV4dDsJIAoJaW50CQkJ
c2VtaWQ7CQkgCglzaG9ydCAqCQkJc2VtYWRqOwkJIAp9OwoKICAgbG9uZyBzeXNfc2VtZ2V0IChr
ZXlfdCBrZXksIGludCBuc2VtcywgaW50IHNlbWZsZyk7CiAgIGxvbmcgc3lzX3NlbW9wIChpbnQg
c2VtaWQsIHN0cnVjdCBzZW1idWYgKnNvcHMsIHVuc2lnbmVkIG5zb3BzKTsKICAgbG9uZyBzeXNf
c2VtY3RsIChpbnQgc2VtaWQsIGludCBzZW1udW0sIGludCBjbWQsIHVuaW9uIHNlbXVuIGFyZyk7
CgoKCgojIDI1ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40Lngv
aW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5V
WC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L3NpZ25hbC5oIiAxCgoKCiMgMSAiL2hv
bWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtL3Np
Z25hbC5oIiAxCgoKCgoKIApzdHJ1Y3Qgc2lnaW5mbzsKCgogCgoKCgoKCnR5cGVkZWYgdW5zaWdu
ZWQgbG9uZyBvbGRfc2lnc2V0X3Q7CQkgCgp0eXBlZGVmIHN0cnVjdCB7Cgl1bnNpZ25lZCBsb25n
IHNpZ1soNjQgIC8gMzIgKSBdOwp9IHNpZ3NldF90OwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAK
CgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgogCnR5cGVkZWYgdm9pZCAoKl9fc2lnaGFuZGxlcl90
KShpbnQpOwoKCgoKCgpzdHJ1Y3Qgb2xkX3NpZ2FjdGlvbiB7CglfX3NpZ2hhbmRsZXJfdCBzYV9o
YW5kbGVyOwoJb2xkX3NpZ3NldF90IHNhX21hc2s7Cgl1bnNpZ25lZCBsb25nIHNhX2ZsYWdzOwoJ
dm9pZCAoKnNhX3Jlc3RvcmVyKSh2b2lkKTsKfTsKCnN0cnVjdCBzaWdhY3Rpb24gewoJX19zaWdo
YW5kbGVyX3Qgc2FfaGFuZGxlcjsKCXVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7Cgl2b2lkICgqc2Ff
cmVzdG9yZXIpKHZvaWQpOwoJc2lnc2V0X3Qgc2FfbWFzazsJCSAKfTsKCnN0cnVjdCBrX3NpZ2Fj
dGlvbiB7CglzdHJ1Y3Qgc2lnYWN0aW9uIHNhOwp9OwojIDE2NiAiL2hvbWUvY2FybG9zL0J1aWxk
cy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtL3NpZ25hbC5oIgoKCnR5cGVk
ZWYgc3RydWN0IHNpZ2FsdHN0YWNrIHsKCXZvaWQgKnNzX3NwOwoJaW50IHNzX2ZsYWdzOwoJc2l6
ZV90IHNzX3NpemU7Cn0gc3RhY2tfdDsKCgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElO
VVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vc2lnY29udGV4dC5oIiAxCgoKCnN0cnVj
dCBzaWdjb250ZXh0IHsKCXVuc2lnbmVkIGxvbmcgIHNjX21hc2s7IAkgCgl1bnNpZ25lZCBsb25n
ICBzY191c3A7CQkgCgl1bnNpZ25lZCBsb25nICBzY19kMDsKCXVuc2lnbmVkIGxvbmcgIHNjX2Qx
OwoJdW5zaWduZWQgbG9uZyAgc2NfYTA7Cgl1bnNpZ25lZCBsb25nICBzY19hMTsKCXVuc2lnbmVk
IHNob3J0IHNjX3NyOwoJdW5zaWduZWQgbG9uZyAgc2NfcGM7Cgl1bnNpZ25lZCBzaG9ydCBzY19m
b3JtYXR2ZWM7Cn07CgoKIyAxNzYgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNs
aW51eC0yLjQueC9pbmNsdWRlL2FzbS9zaWduYWwuaCIgMgoKCgoKCgojIDQgIi9ob21lL2Nhcmxv
cy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L3NpZ25hbC5o
IiAyCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9p
bmNsdWRlL2FzbS9zaWdpbmZvLmgiIDEKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgv
ZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20tbTY4ay9zaWdpbmZvLmgiIDEKCgoKCgogCgp0
eXBlZGVmIHVuaW9uIHNpZ3ZhbCB7CglpbnQgc2l2YWxfaW50OwoJdm9pZCAqc2l2YWxfcHRyOwp9
IHNpZ3ZhbF90OwoKCgoKdHlwZWRlZiBzdHJ1Y3Qgc2lnaW5mbyB7CglpbnQgc2lfc2lnbm87Cglp
bnQgc2lfZXJybm87CglpbnQgc2lfY29kZTsKCgl1bmlvbiB7CgkJaW50IF9wYWRbKCgxMjggL3Np
emVvZihpbnQpKSAtIDMpIF07CgoJCSAKCQlzdHJ1Y3QgewoJCQlfX2tlcm5lbF9waWRfdCBfcGlk
OwkgCgkJCV9fa2VybmVsX3VpZF90IF91aWQ7CSAKCQkJX19rZXJuZWxfdWlkMzJfdCBfdWlkMzI7
ICAKCQl9IF9raWxsOwoKCQkgCgkJc3RydWN0IHsKCQkJdW5zaWduZWQgaW50IF90aW1lcjE7CgkJ
CXVuc2lnbmVkIGludCBfdGltZXIyOwoJCX0gX3RpbWVyOwoKCQkgCgkJc3RydWN0IHsKCQkJX19r
ZXJuZWxfcGlkX3QgX3BpZDsJIAoJCQlfX2tlcm5lbF91aWRfdCBfdWlkOwkgCgkJCXNpZ3ZhbF90
IF9zaWd2YWw7CgkJCV9fa2VybmVsX3VpZDMyX3QgX3VpZDMyOyAgCgkJfSBfcnQ7CgoJCSAKCQlz
dHJ1Y3QgewoJCQlfX2tlcm5lbF9waWRfdCBfcGlkOwkgCgkJCV9fa2VybmVsX3VpZF90IF91aWQ7
CSAKCQkJaW50IF9zdGF0dXM7CQkgCgkJCWNsb2NrX3QgX3V0aW1lOwoJCQljbG9ja190IF9zdGlt
ZTsKCQkJX19rZXJuZWxfdWlkMzJfdCBfdWlkMzI7ICAKCQl9IF9zaWdjaGxkOwoKCQkgCgkJc3Ry
dWN0IHsKCQkJdm9pZCAqX2FkZHI7ICAKCQl9IF9zaWdmYXVsdDsKCgkJIAoJCXN0cnVjdCB7CgkJ
CWludCBfYmFuZDsJIAoJCQlpbnQgX2ZkOwoJCX0gX3NpZ3BvbGw7Cgl9IF9zaWZpZWxkczsKfSBz
aWdpbmZvX3Q7CgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMTA3ICIvaG9tZS9j
YXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20tbTY4ay9z
aWdpbmZvLmgiCgoKIAoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgog
CgoKCgoKCiAKCgoKCgoKCiAKCgoKCgoKIAoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKIAoKCgoKCgoK
CgoKCgoKCnR5cGVkZWYgc3RydWN0IHNpZ2V2ZW50IHsKCXNpZ3ZhbF90IHNpZ2V2X3ZhbHVlOwoJ
aW50IHNpZ2V2X3NpZ25vOwoJaW50IHNpZ2V2X25vdGlmeTsKCXVuaW9uIHsKCQlpbnQgX3BhZFso
KDY0IC9zaXplb2YoaW50KSkgLSAzKSBdOwoKCQlzdHJ1Y3QgewoJCQl2b2lkICgqX2Z1bmN0aW9u
KShzaWd2YWxfdCk7CgkJCXZvaWQgKl9hdHRyaWJ1dGU7CSAKCQl9IF9zaWdldl90aHJlYWQ7Cgl9
IF9zaWdldl91bjsKfSBzaWdldmVudF90OwoKCgoKCgoKZXh0ZXJuIGlubGluZSB2b2lkIGNvcHlf
c2lnaW5mbyhzaWdpbmZvX3QgKnRvLCBzaWdpbmZvX3QgKmZyb20pCnsKCWlmIChmcm9tLT5zaV9j
b2RlIDwgMCkKCQltZW1jcHkodG8sIGZyb20sIHNpemVvZihzaWdpbmZvX3QpKTsKCWVsc2UKCQkg
CgkJbWVtY3B5KHRvLCBmcm9tLCAzKnNpemVvZihpbnQpICsgc2l6ZW9mKGZyb20tPl9zaWZpZWxk
cy5fc2lnY2hsZCkpOwp9CgpleHRlcm4gaW50IGNvcHlfc2lnaW5mb190b191c2VyKHNpZ2luZm9f
dCAqdG8sIHNpZ2luZm9fdCAqZnJvbSk7CgoKCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNM
SU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2FzbS9zaWdpbmZvLmgiIDIKCiMgNSAiL2hv
bWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgv
c2lnbmFsLmgiIDIKCgoKIAoKCgpzdHJ1Y3Qgc2lncXVldWUgewoJc3RydWN0IHNpZ3F1ZXVlICpu
ZXh0OwoJc2lnaW5mb190IGluZm87Cn07CgpzdHJ1Y3Qgc2lncGVuZGluZyB7CglzdHJ1Y3Qgc2ln
cXVldWUgKmhlYWQsICoqdGFpbDsKCXNpZ3NldF90IHNpZ25hbDsKfTsKCiAKCgoKCgoKIAoKc3Rh
dGljIGlubGluZSB2b2lkIHNpZ2FkZHNldChzaWdzZXRfdCAqc2V0LCBpbnQgX3NpZykKewoJdW5z
aWduZWQgbG9uZyBzaWcgPSBfc2lnIC0gMTsKCWlmICgoNjQgIC8gMzIgKSAgPT0gMSkKCQlzZXQt
PnNpZ1swXSB8PSAxVUwgPDwgc2lnOwoJZWxzZQoJCXNldC0+c2lnW3NpZyAvIDMyIF0gfD0gMVVM
IDw8IChzaWcgJSAzMiApOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgc2lnZGVsc2V0KHNpZ3NldF90
ICpzZXQsIGludCBfc2lnKQp7Cgl1bnNpZ25lZCBsb25nIHNpZyA9IF9zaWcgLSAxOwoJaWYgKCg2
NCAgLyAzMiApICA9PSAxKQoJCXNldC0+c2lnWzBdICY9IH4oMVVMIDw8IHNpZyk7CgllbHNlCgkJ
c2V0LT5zaWdbc2lnIC8gMzIgXSAmPSB+KDFVTCA8PCAoc2lnICUgMzIgKSk7Cn0KCnN0YXRpYyBp
bmxpbmUgaW50IHNpZ2lzbWVtYmVyKHNpZ3NldF90ICpzZXQsIGludCBfc2lnKQp7Cgl1bnNpZ25l
ZCBsb25nIHNpZyA9IF9zaWcgLSAxOwoJaWYgKCg2NCAgLyAzMiApICA9PSAxKQoJCXJldHVybiAx
ICYgKHNldC0+c2lnWzBdID4+IHNpZyk7CgllbHNlCgkJcmV0dXJuIDEgJiAoc2V0LT5zaWdbc2ln
IC8gMzIgXSA+PiAoc2lnICUgMzIgKSk7Cn0KCnN0YXRpYyBpbmxpbmUgaW50IHNpZ2ZpbmRpbndv
cmQodW5zaWduZWQgbG9uZyB3b3JkKQp7CglyZXR1cm4gZmZ6KH53b3JkKTsKfQoKCgoKCgoKCgoj
IDEwNiAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1
ZGUvbGludXgvc2lnbmFsLmgiCgoKc3RhdGljIGlubGluZSB2b2lkICBzaWdvcnNldHMgKHNpZ3Nl
dF90ICpyLCBjb25zdCBzaWdzZXRfdCAqYSwgY29uc3Qgc2lnc2V0X3QgKmIpIHsJdW5zaWduZWQg
bG9uZyBhMCwgYTEsIGEyLCBhMywgYjAsIGIxLCBiMiwgYjM7CXVuc2lnbmVkIGxvbmcgaTsJZm9y
IChpID0gMDsgaSA8ICg2NCAgLyAzMiApIC80OyArK2kpIHsJYTAgPSBhLT5zaWdbNCppKzBdOyBh
MSA9IGEtPnNpZ1s0KmkrMV07CWEyID0gYS0+c2lnWzQqaSsyXTsgYTMgPSBhLT5zaWdbNCppKzNd
OwliMCA9IGItPnNpZ1s0KmkrMF07IGIxID0gYi0+c2lnWzQqaSsxXTsJYjIgPSBiLT5zaWdbNCpp
KzJdOyBiMyA9IGItPnNpZ1s0KmkrM107CXItPnNpZ1s0KmkrMF0gPSAgICgoIGEwICkgfCAoICBi
MCApKSA7CXItPnNpZ1s0KmkrMV0gPSAgICgoIGExICkgfCAoICBiMSApKSA7CXItPnNpZ1s0Kmkr
Ml0gPSAgICgoIGEyICkgfCAoICBiMiApKSA7CXItPnNpZ1s0KmkrM10gPSAgICgoIGEzICkgfCAo
ICBiMyApKSA7CX0Jc3dpdGNoICgoNjQgIC8gMzIgKSAgJSA0KSB7CWNhc2UgMzoJYTAgPSBhLT5z
aWdbNCppKzBdOyBhMSA9IGEtPnNpZ1s0KmkrMV07IGEyID0gYS0+c2lnWzQqaSsyXTsgYjAgPSBi
LT5zaWdbNCppKzBdOyBiMSA9IGItPnNpZ1s0KmkrMV07IGIyID0gYi0+c2lnWzQqaSsyXTsgci0+
c2lnWzQqaSswXSA9ICAgKCggYTAgKSB8ICggIGIwICkpIDsJci0+c2lnWzQqaSsxXSA9ICAgKCgg
YTEgKSB8ICggIGIxICkpIDsJci0+c2lnWzQqaSsyXSA9ICAgKCggYTIgKSB8ICggIGIyICkpIDsJ
YnJlYWs7CWNhc2UgMjoJYTAgPSBhLT5zaWdbNCppKzBdOyBhMSA9IGEtPnNpZ1s0KmkrMV07CWIw
ID0gYi0+c2lnWzQqaSswXTsgYjEgPSBiLT5zaWdbNCppKzFdOwlyLT5zaWdbNCppKzBdID0gICAo
KCBhMCApIHwgKCAgYjAgKSkgOwlyLT5zaWdbNCppKzFdID0gICAoKCBhMSApIHwgKCAgYjEgKSkg
OwlicmVhazsJY2FzZSAxOglhMCA9IGEtPnNpZ1s0KmkrMF07IGIwID0gYi0+c2lnWzQqaSswXTsJ
ci0+c2lnWzQqaSswXSA9ICAgKCggYTAgKSB8ICggIGIwICkpIDsJYnJlYWs7CX0JfSAKCgpzdGF0
aWMgaW5saW5lIHZvaWQgIHNpZ2FuZHNldHMgKHNpZ3NldF90ICpyLCBjb25zdCBzaWdzZXRfdCAq
YSwgY29uc3Qgc2lnc2V0X3QgKmIpIHsJdW5zaWduZWQgbG9uZyBhMCwgYTEsIGEyLCBhMywgYjAs
IGIxLCBiMiwgYjM7CXVuc2lnbmVkIGxvbmcgaTsJZm9yIChpID0gMDsgaSA8ICg2NCAgLyAzMiAp
IC80OyArK2kpIHsJYTAgPSBhLT5zaWdbNCppKzBdOyBhMSA9IGEtPnNpZ1s0KmkrMV07CWEyID0g
YS0+c2lnWzQqaSsyXTsgYTMgPSBhLT5zaWdbNCppKzNdOwliMCA9IGItPnNpZ1s0KmkrMF07IGIx
ID0gYi0+c2lnWzQqaSsxXTsJYjIgPSBiLT5zaWdbNCppKzJdOyBiMyA9IGItPnNpZ1s0KmkrM107
CXItPnNpZ1s0KmkrMF0gPSAgICgoIGEwICkgJiAoICBiMCApKSA7CXItPnNpZ1s0KmkrMV0gPSAg
ICgoIGExICkgJiAoICBiMSApKSA7CXItPnNpZ1s0KmkrMl0gPSAgICgoIGEyICkgJiAoICBiMiAp
KSA7CXItPnNpZ1s0KmkrM10gPSAgICgoIGEzICkgJiAoICBiMyApKSA7CX0Jc3dpdGNoICgoNjQg
IC8gMzIgKSAgJSA0KSB7CWNhc2UgMzoJYTAgPSBhLT5zaWdbNCppKzBdOyBhMSA9IGEtPnNpZ1s0
KmkrMV07IGEyID0gYS0+c2lnWzQqaSsyXTsgYjAgPSBiLT5zaWdbNCppKzBdOyBiMSA9IGItPnNp
Z1s0KmkrMV07IGIyID0gYi0+c2lnWzQqaSsyXTsgci0+c2lnWzQqaSswXSA9ICAgKCggYTAgKSAm
ICggIGIwICkpIDsJci0+c2lnWzQqaSsxXSA9ICAgKCggYTEgKSAmICggIGIxICkpIDsJci0+c2ln
WzQqaSsyXSA9ICAgKCggYTIgKSAmICggIGIyICkpIDsJYnJlYWs7CWNhc2UgMjoJYTAgPSBhLT5z
aWdbNCppKzBdOyBhMSA9IGEtPnNpZ1s0KmkrMV07CWIwID0gYi0+c2lnWzQqaSswXTsgYjEgPSBi
LT5zaWdbNCppKzFdOwlyLT5zaWdbNCppKzBdID0gICAoKCBhMCApICYgKCAgYjAgKSkgOwlyLT5z
aWdbNCppKzFdID0gICAoKCBhMSApICYgKCAgYjEgKSkgOwlicmVhazsJY2FzZSAxOglhMCA9IGEt
PnNpZ1s0KmkrMF07IGIwID0gYi0+c2lnWzQqaSswXTsJci0+c2lnWzQqaSswXSA9ICAgKCggYTAg
KSAmICggIGIwICkpIDsJYnJlYWs7CX0JfSAKCgpzdGF0aWMgaW5saW5lIHZvaWQgIHNpZ25hbmRz
ZXRzIChzaWdzZXRfdCAqciwgY29uc3Qgc2lnc2V0X3QgKmEsIGNvbnN0IHNpZ3NldF90ICpiKSB7
CXVuc2lnbmVkIGxvbmcgYTAsIGExLCBhMiwgYTMsIGIwLCBiMSwgYjIsIGIzOwl1bnNpZ25lZCBs
b25nIGk7CWZvciAoaSA9IDA7IGkgPCAoNjQgIC8gMzIgKSAvNDsgKytpKSB7CWEwID0gYS0+c2ln
WzQqaSswXTsgYTEgPSBhLT5zaWdbNCppKzFdOwlhMiA9IGEtPnNpZ1s0KmkrMl07IGEzID0gYS0+
c2lnWzQqaSszXTsJYjAgPSBiLT5zaWdbNCppKzBdOyBiMSA9IGItPnNpZ1s0KmkrMV07CWIyID0g
Yi0+c2lnWzQqaSsyXTsgYjMgPSBiLT5zaWdbNCppKzNdOwlyLT5zaWdbNCppKzBdID0gICAoKCBh
MCApICYgfiggIGIwICkpIDsJci0+c2lnWzQqaSsxXSA9ICAgKCggYTEgKSAmIH4oICBiMSApKSA7
CXItPnNpZ1s0KmkrMl0gPSAgICgoIGEyICkgJiB+KCAgYjIgKSkgOwlyLT5zaWdbNCppKzNdID0g
ICAoKCBhMyApICYgfiggIGIzICkpIDsJfQlzd2l0Y2ggKCg2NCAgLyAzMiApICAlIDQpIHsJY2Fz
ZSAzOglhMCA9IGEtPnNpZ1s0KmkrMF07IGExID0gYS0+c2lnWzQqaSsxXTsgYTIgPSBhLT5zaWdb
NCppKzJdOyBiMCA9IGItPnNpZ1s0KmkrMF07IGIxID0gYi0+c2lnWzQqaSsxXTsgYjIgPSBiLT5z
aWdbNCppKzJdOyByLT5zaWdbNCppKzBdID0gICAoKCBhMCApICYgfiggIGIwICkpIDsJci0+c2ln
WzQqaSsxXSA9ICAgKCggYTEgKSAmIH4oICBiMSApKSA7CXItPnNpZ1s0KmkrMl0gPSAgICgoIGEy
ICkgJiB+KCAgYjIgKSkgOwlicmVhazsJY2FzZSAyOglhMCA9IGEtPnNpZ1s0KmkrMF07IGExID0g
YS0+c2lnWzQqaSsxXTsJYjAgPSBiLT5zaWdbNCppKzBdOyBiMSA9IGItPnNpZ1s0KmkrMV07CXIt
PnNpZ1s0KmkrMF0gPSAgICgoIGEwICkgJiB+KCAgYjAgKSkgOwlyLT5zaWdbNCppKzFdID0gICAo
KCBhMSApICYgfiggIGIxICkpIDsJYnJlYWs7CWNhc2UgMToJYTAgPSBhLT5zaWdbNCppKzBdOyBi
MCA9IGItPnNpZ1s0KmkrMF07CXItPnNpZ1s0KmkrMF0gPSAgICgoIGEwICkgJiB+KCAgYjAgKSkg
OwlicmVhazsJfQl9IAoKCgoKCgoKIyAxMzggIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9l
Y2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L3NpZ25hbC5oIgoKCnN0YXRpYyBpbmxpbmUg
dm9pZCAgc2lnbm90c2V0IChzaWdzZXRfdCAqc2V0KQl7CXVuc2lnbmVkIGxvbmcgaTsJZm9yIChp
ID0gMDsgaSA8ICg2NCAgLyAzMiApIC80OyArK2kpIHsJc2V0LT5zaWdbNCppKzBdID0gICAofigg
c2V0LT5zaWdbNCppKzBdICkpIDsJc2V0LT5zaWdbNCppKzFdID0gICAofiggc2V0LT5zaWdbNCpp
KzFdICkpIDsJc2V0LT5zaWdbNCppKzJdID0gICAofiggc2V0LT5zaWdbNCppKzJdICkpIDsJc2V0
LT5zaWdbNCppKzNdID0gICAofiggc2V0LT5zaWdbNCppKzNdICkpIDsJfQlzd2l0Y2ggKCg2NCAg
LyAzMiApICAlIDQpIHsJY2FzZSAzOiBzZXQtPnNpZ1s0KmkrMl0gPSAgICh+KCBzZXQtPnNpZ1s0
KmkrMl0gKSkgOwljYXNlIDI6IHNldC0+c2lnWzQqaSsxXSA9ICAgKH4oIHNldC0+c2lnWzQqaSsx
XSApKSA7CWNhc2UgMTogc2V0LT5zaWdbNCppKzBdID0gICAofiggc2V0LT5zaWdbNCppKzBdICkp
IDsJfQl9IAoKCgoKc3RhdGljIGlubGluZSB2b2lkIHNpZ2VtcHR5c2V0KHNpZ3NldF90ICpzZXQp
CnsKCXN3aXRjaCAoKDY0ICAvIDMyICkgKSB7CglkZWZhdWx0OgoJCW1lbXNldChzZXQsIDAsIHNp
emVvZihzaWdzZXRfdCkpOwoJCWJyZWFrOwoJY2FzZSAyOiBzZXQtPnNpZ1sxXSA9IDA7CgljYXNl
IDE6CXNldC0+c2lnWzBdID0gMDsKCQlicmVhazsKCX0KfQoKc3RhdGljIGlubGluZSB2b2lkIHNp
Z2ZpbGxzZXQoc2lnc2V0X3QgKnNldCkKewoJc3dpdGNoICgoNjQgIC8gMzIgKSApIHsKCWRlZmF1
bHQ6CgkJbWVtc2V0KHNldCwgLTEsIHNpemVvZihzaWdzZXRfdCkpOwoJCWJyZWFrOwoJY2FzZSAy
OiBzZXQtPnNpZ1sxXSA9IC0xOwoJY2FzZSAxOglzZXQtPnNpZ1swXSA9IC0xOwoJCWJyZWFrOwoJ
fQp9CgpleHRlcm4gY2hhciAqIHJlbmRlcl9zaWdzZXRfdChzaWdzZXRfdCAqc2V0LCBjaGFyICpi
dWZmZXIpOwoKIAoKc3RhdGljIGlubGluZSB2b2lkIHNpZ2FkZHNldG1hc2soc2lnc2V0X3QgKnNl
dCwgdW5zaWduZWQgbG9uZyBtYXNrKQp7CglzZXQtPnNpZ1swXSB8PSBtYXNrOwp9CgpzdGF0aWMg
aW5saW5lIHZvaWQgc2lnZGVsc2V0bWFzayhzaWdzZXRfdCAqc2V0LCB1bnNpZ25lZCBsb25nIG1h
c2spCnsKCXNldC0+c2lnWzBdICY9IH5tYXNrOwp9CgpzdGF0aWMgaW5saW5lIGludCBzaWd0ZXN0
c2V0bWFzayhzaWdzZXRfdCAqc2V0LCB1bnNpZ25lZCBsb25nIG1hc2spCnsKCXJldHVybiAoc2V0
LT5zaWdbMF0gJiBtYXNrKSAhPSAwOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgc2lnaW5pdHNldChz
aWdzZXRfdCAqc2V0LCB1bnNpZ25lZCBsb25nIG1hc2spCnsKCXNldC0+c2lnWzBdID0gbWFzazsK
CXN3aXRjaCAoKDY0ICAvIDMyICkgKSB7CglkZWZhdWx0OgoJCW1lbXNldCgmc2V0LT5zaWdbMV0s
IDAsIHNpemVvZihsb25nKSooKDY0ICAvIDMyICkgLTEpKTsKCQlicmVhazsKCWNhc2UgMjogc2V0
LT5zaWdbMV0gPSAwOwoJY2FzZSAxOiA7Cgl9Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBzaWdpbml0
c2V0aW52KHNpZ3NldF90ICpzZXQsIHVuc2lnbmVkIGxvbmcgbWFzaykKewoJc2V0LT5zaWdbMF0g
PSB+bWFzazsKCXN3aXRjaCAoKDY0ICAvIDMyICkgKSB7CglkZWZhdWx0OgoJCW1lbXNldCgmc2V0
LT5zaWdbMV0sIC0xLCBzaXplb2YobG9uZykqKCg2NCAgLyAzMiApIC0xKSk7CgkJYnJlYWs7Cglj
YXNlIDI6IHNldC0+c2lnWzFdID0gLTE7CgljYXNlIDE6IDsKCX0KfQoKCgpzdGF0aWMgaW5saW5l
IHZvaWQgaW5pdF9zaWdwZW5kaW5nKHN0cnVjdCBzaWdwZW5kaW5nICpzaWcpCnsKCXNpZ2VtcHR5
c2V0KCZzaWctPnNpZ25hbCk7CglzaWctPmhlYWQgPSAoKHZvaWQgKikwKSA7CglzaWctPnRhaWwg
PSAmc2lnLT5oZWFkOwp9CgpleHRlcm4gbG9uZyBkb19zaWdwZW5kaW5nKHZvaWQgKiwgdW5zaWdu
ZWQgbG9uZyk7CgoKCgojIDI2ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGlu
dXgtMi40LngvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCgojIDEgIi9ob21lL2Nhcmxvcy9CdWls
ZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L3NlY3VyZWJpdHMuaCIg
MQoKCgoKCmV4dGVybiB1bnNpZ25lZCBzZWN1cmViaXRzOwoKIAoKCgoKCgoKIAoKCgoKIAoKCgoK
CgoKCgojIDI3ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40Lngv
aW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5V
WC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oIiAxCgoKCgpzdHJ1
Y3QgZnNfc3RydWN0IHsKCWF0b21pY190IGNvdW50OwoJcndsb2NrX3QgbG9jazsKCWludCB1bWFz
azsKCXN0cnVjdCBkZW50cnkgKiByb290LCAqIHB3ZCwgKiBhbHRyb290OwoJc3RydWN0IHZmc21v
dW50ICogcm9vdG1udCwgKiBwd2RtbnQsICogYWx0cm9vdG1udDsKfTsKCgoKCgoKCgpleHRlcm4g
dm9pZCBleGl0X2ZzKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKZXh0ZXJuIHZvaWQgc2V0X2ZzX2Fs
dHJvb3Qodm9pZCk7CgogCgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2ZzX3Jvb3Qoc3RydWN0
IGZzX3N0cnVjdCAqZnMsCglzdHJ1Y3QgdmZzbW91bnQgKm1udCwKCXN0cnVjdCBkZW50cnkgKmRl
bnRyeSkKewoJc3RydWN0IGRlbnRyeSAqb2xkX3Jvb3Q7CglzdHJ1Y3QgdmZzbW91bnQgKm9sZF9y
b290bW50OwoJKHZvaWQpKCAmZnMtPmxvY2sgKSA7CglvbGRfcm9vdCA9IGZzLT5yb290OwoJb2xk
X3Jvb3RtbnQgPSBmcy0+cm9vdG1udDsKCWZzLT5yb290bW50ID0gbW50Z2V0KG1udCk7Cglmcy0+
cm9vdCA9IGRnZXQoZGVudHJ5KTsKCWRvIHsgfSB3aGlsZSgwKSA7CglpZiAob2xkX3Jvb3QpIHsK
CQlkcHV0KG9sZF9yb290KTsKCQltbnRwdXQob2xkX3Jvb3RtbnQpOwoJfQp9CgogCgoKCgpzdGF0
aWMgaW5saW5lIHZvaWQgc2V0X2ZzX3B3ZChzdHJ1Y3QgZnNfc3RydWN0ICpmcywKCXN0cnVjdCB2
ZnNtb3VudCAqbW50LAoJc3RydWN0IGRlbnRyeSAqZGVudHJ5KQp7CglzdHJ1Y3QgZGVudHJ5ICpv
bGRfcHdkOwoJc3RydWN0IHZmc21vdW50ICpvbGRfcHdkbW50OwoJKHZvaWQpKCAmZnMtPmxvY2sg
KSA7CglvbGRfcHdkID0gZnMtPnB3ZDsKCW9sZF9wd2RtbnQgPSBmcy0+cHdkbW50OwoJZnMtPnB3
ZG1udCA9IG1udGdldChtbnQpOwoJZnMtPnB3ZCA9IGRnZXQoZGVudHJ5KTsKCWRvIHsgfSB3aGls
ZSgwKSA7CglpZiAob2xkX3B3ZCkgewoJCWRwdXQob2xkX3B3ZCk7CgkJbW50cHV0KG9sZF9wd2Rt
bnQpOwoJfQp9CgpzdHJ1Y3QgZnNfc3RydWN0ICpjb3B5X2ZzX3N0cnVjdChzdHJ1Y3QgZnNfc3Ry
dWN0ICpvbGQpOwp2b2lkIHB1dF9mc19zdHJ1Y3Qoc3RydWN0IGZzX3N0cnVjdCAqZnMpOwoKCgoj
IDI4ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVk
ZS9saW51eC9zY2hlZC5oIiAyCgoKCgoKc3RydWN0IGV4ZWNfZG9tYWluOwoKIAoKCgoKCgoKCgoK
CgoKCgogCgoKCgoKCgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGF2ZW5ydW5bXTsJCSAKCgoKCgoK
CgoKCgoKCgoKCmV4dGVybiBpbnQgbnJfcnVubmluZywgbnJfdGhyZWFkczsKZXh0ZXJuIGludCBs
YXN0X3BpZDsKCgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgt
Mi40LngvaW5jbHVkZS9saW51eC9wYXJhbS5oIiAxCgoKCgoKCiMgODMgIi9ob21lL2Nhcmxvcy9C
dWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIK
CiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1
ZGUvbGludXgvcmVzb3VyY2UuaCIgMQoKCgoKCiAKCgoKIAoKCgoKCgoKCgoKc3RydWN0CXJ1c2Fn
ZSB7CglzdHJ1Y3QgdGltZXZhbCBydV91dGltZTsJIAoJc3RydWN0IHRpbWV2YWwgcnVfc3RpbWU7
CSAKCWxvbmcJcnVfbWF4cnNzOwkJIAoJbG9uZwlydV9peHJzczsJCSAKCWxvbmcJcnVfaWRyc3M7
CQkgCglsb25nCXJ1X2lzcnNzOwkJIAoJbG9uZwlydV9taW5mbHQ7CQkgCglsb25nCXJ1X21hamZs
dDsJCSAKCWxvbmcJcnVfbnN3YXA7CQkgCglsb25nCXJ1X2luYmxvY2s7CQkgCglsb25nCXJ1X291
YmxvY2s7CQkgCglsb25nCXJ1X21zZ3NuZDsJCSAKCWxvbmcJcnVfbXNncmN2OwkJIAoJbG9uZwly
dV9uc2lnbmFsczsJCSAKCWxvbmcJcnVfbnZjc3c7CQkgCglsb25nCXJ1X25pdmNzdzsJCSAKfTsK
CnN0cnVjdCBybGltaXQgewoJdW5zaWduZWQgbG9uZwlybGltX2N1cjsKCXVuc2lnbmVkIGxvbmcJ
cmxpbV9tYXg7Cn07CgoKCgoKCgoKIAoKCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5V
WC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2FzbS9yZXNvdXJjZS5oIiAxCiMgMSAiL2hvbWUv
Y2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtLW02OGsv
cmVzb3VyY2UuaCIgMQoKCgogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCiMgNDQgIi9ob21l
L2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2FzbS1tNjhr
L3Jlc291cmNlLmgiCgoKCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNs
aW51eC0yLjQueC9pbmNsdWRlL2FzbS9yZXNvdXJjZS5oIiAyCgojIDU2ICIvaG9tZS9jYXJsb3Mv
QnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9yZXNvdXJjZS5o
IiAyCgoKCiMgODQgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQu
eC9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CiAKCgoKCgoKIAoKCgoKCnN0cnVjdCBzY2hlZF9wYXJhbSB7CglpbnQgc2NoZWRfcHJpb3JpdHk7
Cn07CgpzdHJ1Y3QgY29tcGxldGlvbjsKCgoKCgogCgoKCgoKZXh0ZXJuIHJ3bG9ja190IHRhc2ts
aXN0X2xvY2s7CmV4dGVybiBzcGlubG9ja190IHJ1bnF1ZXVlX2xvY2s7CmV4dGVybiBzcGlubG9j
a190IG1tbGlzdF9sb2NrOwoKZXh0ZXJuIHZvaWQgc2NoZWRfaW5pdCh2b2lkKTsKZXh0ZXJuIHZv
aWQgaW5pdF9pZGxlKHZvaWQpOwpleHRlcm4gdm9pZCBzaG93X3N0YXRlKHZvaWQpOwpleHRlcm4g
dm9pZCBjcHVfaW5pdCAodm9pZCk7CmV4dGVybiB2b2lkIHRyYXBfaW5pdCh2b2lkKTsKZXh0ZXJu
IHZvaWQgdXBkYXRlX3Byb2Nlc3NfdGltZXMoaW50IHVzZXIpOwpleHRlcm4gdm9pZCB1cGRhdGVf
b25lX3Byb2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1bnNpZ25lZCBsb25nIHVzZXIsCgkJ
CSAgICAgICB1bnNpZ25lZCBsb25nIHN5c3RlbSwgaW50IGNwdSk7CgoKZXh0ZXJuIHNpZ25lZCBs
b25nICBzY2hlZHVsZV90aW1lb3V0KHNpZ25lZCBsb25nIHRpbWVvdXQpICA7CiAgIHZvaWQgc2No
ZWR1bGUodm9pZCk7CgpleHRlcm4gaW50IHNjaGVkdWxlX3Rhc2soc3RydWN0IHRxX3N0cnVjdCAq
dGFzayk7CmV4dGVybiB2b2lkIGZsdXNoX3NjaGVkdWxlZF90YXNrcyh2b2lkKTsKZXh0ZXJuIGlu
dCBzdGFydF9jb250ZXh0X3RocmVhZCh2b2lkKTsKZXh0ZXJuIGludCBjdXJyZW50X2lzX2tldmVu
dGQodm9pZCk7CgogCgoKCgoKIAoKCnN0cnVjdCBmaWxlc19zdHJ1Y3QgewoJYXRvbWljX3QgY291
bnQ7Cglyd2xvY2tfdCBmaWxlX2xvY2s7CSAKCWludCBtYXhfZmRzOwoJaW50IG1heF9mZHNldDsK
CWludCBuZXh0X2ZkOwoJc3RydWN0IGZpbGUgKiogZmQ7CSAKCWZkX3NldCAqY2xvc2Vfb25fZXhl
YzsKCWZkX3NldCAqb3Blbl9mZHM7CglmZF9zZXQgY2xvc2Vfb25fZXhlY19pbml0OwoJZmRfc2V0
IG9wZW5fZmRzX2luaXQ7CglzdHJ1Y3QgZmlsZSAqIGZkX2FycmF5WzMyICBdOwp9OwoKCiMgMjAz
ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9s
aW51eC9zY2hlZC5oIgoKIAoKCiMgMjUyICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNs
LXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9zY2hlZC5oIgoKCnN0cnVjdCBtbV9yYmxvY2tf
c3RydWN0IHsKCWludCBzaXplOwoJaW50IHJlZmNvdW50OwoJdm9pZCAqIGtibG9jazsKfTsKCnN0
cnVjdCBtbV90YmxvY2tfc3RydWN0IHsKCXN0cnVjdCBtbV9yYmxvY2tfc3RydWN0ICogcmJsb2Nr
OwoJc3RydWN0IG1tX3RibG9ja19zdHJ1Y3QgKiBuZXh0Owp9OwoKc3RydWN0IG1tX3N0cnVjdCB7
CgkgCglhdG9taWNfdCBtbV91c2VyczsKCSAKCWF0b21pY190IG1tX2NvdW50OwoKCXVuc2lnbmVk
IGR1bXBhYmxlOjE7CgoJc3RydWN0IGxpc3RfaGVhZCBtbWxpc3Q7CQkgCgoJc3RydWN0IHJ3X3Nl
bWFwaG9yZSBtbWFwX3NlbTsKCXNwaW5sb2NrX3QgcGFnZV90YWJsZV9sb2NrOwoJdW5zaWduZWQg
bG9uZyBzdGFydF9jb2RlLCBlbmRfY29kZSwgc3RhcnRfZGF0YSwgZW5kX2RhdGE7Cgl1bnNpZ25l
ZCBsb25nIHN0YXJ0X2JyaywgYnJrLCBlbmRfYnJrLCBzdGFydF9zdGFjazsKCXVuc2lnbmVkIGxv
bmcgYXJnX3N0YXJ0LCBhcmdfZW5kLCBlbnZfc3RhcnQsIGVudl9lbmQ7Cgl1bnNpZ25lZCBsb25n
IHJzcywgdG90YWxfdm0sIGxvY2tlZF92bTsKCXVuc2lnbmVkIGxvbmcgZGVmX2ZsYWdzOwoJdW5z
aWduZWQgbG9uZyBjcHVfdm1fbWFzazsKCXN0cnVjdCBtbV90YmxvY2tfc3RydWN0IHRibG9jazsK
fTsKCmV4dGVybiBpbnQgbW1saXN0X25yOwoKCgoKCgoKCgoKCnN0cnVjdCBzaWduYWxfc3RydWN0
IHsKCWF0b21pY190CQljb3VudDsKCXN0cnVjdCBrX3NpZ2FjdGlvbglhY3Rpb25bNjQgXTsKCXNw
aW5sb2NrX3QJCXNpZ2xvY2s7Cn07CgoKCgoKCgoKIAoKCnN0cnVjdCB1c2VyX3N0cnVjdCB7Cglh
dG9taWNfdCBfX2NvdW50OwkgCglhdG9taWNfdCBwcm9jZXNzZXM7CSAKCWF0b21pY190IGZpbGVz
OwkJIAoKCSAKCXN0cnVjdCB1c2VyX3N0cnVjdCAqbmV4dCwgKipwcHJldjsKCXVpZF90IHVpZDsK
fTsKCgoKCgoKZXh0ZXJuIHN0cnVjdCB1c2VyX3N0cnVjdCByb290X3VzZXI7CgoKc3RydWN0IHRh
c2tfc3RydWN0IHsKCSAKCgoJdm9sYXRpbGUgbG9uZyBzdGF0ZTsJIAoJdW5zaWduZWQgbG9uZyBm
bGFnczsJIAoJaW50IHNpZ3BlbmRpbmc7CgltbV9zZWdtZW50X3QgYWRkcl9saW1pdDsJIAoKCgoJ
c3RydWN0IGV4ZWNfZG9tYWluICpleGVjX2RvbWFpbjsKCXZvbGF0aWxlIGxvbmcgbmVlZF9yZXNj
aGVkOwoJdW5zaWduZWQgbG9uZyBwdHJhY2U7CgoJaW50IGxvY2tfZGVwdGg7CQkgCgogCgoKCgoJ
bG9uZyBjb3VudGVyOwoJbG9uZyBuaWNlOwoJdW5zaWduZWQgbG9uZyBwb2xpY3k7CglzdHJ1Y3Qg
bW1fc3RydWN0ICptbTsKCWludCBwcm9jZXNzb3I7CgkgCgoKCgoKCgoJdW5zaWduZWQgbG9uZyBj
cHVzX3J1bm5hYmxlLCBjcHVzX2FsbG93ZWQ7CgkgCgoKCglzdHJ1Y3QgbGlzdF9oZWFkIHJ1bl9s
aXN0OwoJdW5zaWduZWQgbG9uZyBzbGVlcF90aW1lOwoKCXN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4
dF90YXNrLCAqcHJldl90YXNrOwoJc3RydWN0IG1tX3N0cnVjdCAqYWN0aXZlX21tOwoJc3RydWN0
IGxpc3RfaGVhZCBsb2NhbF9wYWdlczsKCXVuc2lnbmVkIGludCBhbGxvY2F0aW9uX29yZGVyLCBu
cl9sb2NhbF9wYWdlczsKCiAKCXN0cnVjdCBsaW51eF9iaW5mbXQgKmJpbmZtdDsKCWludCBleGl0
X2NvZGUsIGV4aXRfc2lnbmFsOwoJaW50IHBkZWF0aF9zaWduYWw7ICAgCgkgCgl1bnNpZ25lZCBs
b25nIHBlcnNvbmFsaXR5OwoJaW50IGRpZF9leGVjOjE7CglwaWRfdCBwaWQ7CglwaWRfdCBwZ3Jw
OwoJcGlkX3QgdHR5X29sZF9wZ3JwOwoJcGlkX3Qgc2Vzc2lvbjsKCXBpZF90IHRnaWQ7CgkgCglp
bnQgbGVhZGVyOwoJIAoKCgoKCXN0cnVjdCB0YXNrX3N0cnVjdCAqcF9vcHB0ciwgKnBfcHB0ciwg
KnBfY3B0ciwgKnBfeXNwdHIsICpwX29zcHRyOwoJc3RydWN0IGxpc3RfaGVhZCB0aHJlYWRfZ3Jv
dXA7CgoJIAoJc3RydWN0IHRhc2tfc3RydWN0ICpwaWRoYXNoX25leHQ7CglzdHJ1Y3QgdGFza19z
dHJ1Y3QgKipwaWRoYXNoX3BwcmV2OwoKCXdhaXRfcXVldWVfaGVhZF90IHdhaXRfY2hsZGV4aXQ7
CSAKCXN0cnVjdCBjb21wbGV0aW9uICp2Zm9ya19kb25lOwkJIAoJdW5zaWduZWQgbG9uZyBydF9w
cmlvcml0eTsKCXVuc2lnbmVkIGxvbmcgaXRfcmVhbF92YWx1ZSwgaXRfcHJvZl92YWx1ZSwgaXRf
dmlydF92YWx1ZTsKCXVuc2lnbmVkIGxvbmcgaXRfcmVhbF9pbmNyLCBpdF9wcm9mX2luY3IsIGl0
X3ZpcnRfaW5jcjsKCXN0cnVjdCB0aW1lcl9saXN0IHJlYWxfdGltZXI7CglzdHJ1Y3QgdG1zIHRp
bWVzOwoJdW5zaWduZWQgbG9uZyBzdGFydF90aW1lOwoJbG9uZyBwZXJfY3B1X3V0aW1lWzEgXSwg
cGVyX2NwdV9zdGltZVsxIF07CiAKCXVuc2lnbmVkIGxvbmcgbWluX2ZsdCwgbWFqX2ZsdCwgbnN3
YXAsIGNtaW5fZmx0LCBjbWFqX2ZsdCwgY25zd2FwOwoJaW50IHN3YXBwYWJsZToxOwogCgl1aWRf
dCB1aWQsZXVpZCxzdWlkLGZzdWlkOwoJZ2lkX3QgZ2lkLGVnaWQsc2dpZCxmc2dpZDsKCWludCBu
Z3JvdXBzOwoJZ2lkX3QJZ3JvdXBzWzMyIF07CglrZXJuZWxfY2FwX3QgICBjYXBfZWZmZWN0aXZl
LCBjYXBfaW5oZXJpdGFibGUsIGNhcF9wZXJtaXR0ZWQ7CglpbnQga2VlcF9jYXBhYmlsaXRpZXM6
MTsKCXN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcjsKIAoJc3RydWN0IHJsaW1pdCBybGltWzExIF07
Cgl1bnNpZ25lZCBzaG9ydCB1c2VkX21hdGg7CgljaGFyIGNvbW1bMTZdOwogCglpbnQgbGlua19j
b3VudCwgdG90YWxfbGlua19jb3VudDsKCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7ICAKCXVuc2ln
bmVkIGludCBsb2NrczsgIAogCglzdHJ1Y3Qgc2VtX3VuZG8gKnNlbXVuZG87CglzdHJ1Y3Qgc2Vt
X3F1ZXVlICpzZW1zbGVlcGluZzsKIAoJc3RydWN0IHRocmVhZF9zdHJ1Y3QgdGhyZWFkOwogCglz
dHJ1Y3QgZnNfc3RydWN0ICpmczsKIAoJc3RydWN0IGZpbGVzX3N0cnVjdCAqZmlsZXM7CiAKCXNw
aW5sb2NrX3Qgc2lnbWFza19sb2NrOwkgCglzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnOwoKCXNp
Z3NldF90IGJsb2NrZWQ7CglzdHJ1Y3Qgc2lncGVuZGluZyBwZW5kaW5nOwoKCXVuc2lnbmVkIGxv
bmcgc2FzX3NzX3NwOwoJc2l6ZV90IHNhc19zc19zaXplOwoJaW50ICgqbm90aWZpZXIpKHZvaWQg
KnByaXYpOwoJdm9pZCAqbm90aWZpZXJfZGF0YTsKCXNpZ3NldF90ICpub3RpZmllcl9tYXNrOwoJ
CiAKICAgCXUzMiBwYXJlbnRfZXhlY19pZDsKICAgCXUzMiBzZWxmX2V4ZWNfaWQ7CiAKCXNwaW5s
b2NrX3QgYWxsb2NfbG9jazsKCiAKCXZvaWQgKmpvdXJuYWxfaW5mbzsKfTsKCiAKCgoKCQkJCQkg
CgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCiAKCgoKCgoKCgoKCiAKCgpleHRlcm4gc3RydWN0IGV4
ZWNfZG9tYWluCWRlZmF1bHRfZXhlY19kb21haW47CgogCgoKCgojIDU1NiAiL2hvbWUvY2FybG9z
L0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvc2NoZWQuaCIK
CgoKCgoKdW5pb24gdGFza191bmlvbiB7CglzdHJ1Y3QgdGFza19zdHJ1Y3QgdGFzazsKCXVuc2ln
bmVkIGxvbmcgc3RhY2tbMjA0OCpzaXplb2YobG9uZykgL3NpemVvZihsb25nKV07Cn07CgpleHRl
cm4gdW5pb24gdGFza191bmlvbiBpbml0X3Rhc2tfdW5pb247CgpleHRlcm4gc3RydWN0ICAgbW1f
c3RydWN0IGluaXRfbW07CmV4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmluaXRfdGFza3NbMSBd
OwoKIAoKZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGlkaGFzaFsoNDA5NiA+PiAyKSBdOwoK
CgpzdGF0aWMgaW5saW5lIHZvaWQgaGFzaF9waWQoc3RydWN0IHRhc2tfc3RydWN0ICpwKQp7Cglz
dHJ1Y3QgdGFza19zdHJ1Y3QgKipodGFibGUgPSAmcGlkaGFzaFsoKCgoIHAtPnBpZCApID4+IDgp
IF4gKCBwLT5waWQgKSkgJiAoKDQwOTYgPj4gMikgIC0gMSkpIF07CgoJaWYoKHAtPnBpZGhhc2hf
bmV4dCA9ICpodGFibGUpICE9ICgodm9pZCAqKTApICkKCQkoKmh0YWJsZSktPnBpZGhhc2hfcHBy
ZXYgPSAmcC0+cGlkaGFzaF9uZXh0OwoJKmh0YWJsZSA9IHA7CglwLT5waWRoYXNoX3BwcmV2ID0g
aHRhYmxlOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgdW5oYXNoX3BpZChzdHJ1Y3QgdGFza19zdHJ1
Y3QgKnApCnsKCWlmKHAtPnBpZGhhc2hfbmV4dCkKCQlwLT5waWRoYXNoX25leHQtPnBpZGhhc2hf
cHByZXYgPSBwLT5waWRoYXNoX3BwcmV2OwoJKnAtPnBpZGhhc2hfcHByZXYgPSBwLT5waWRoYXNo
X25leHQ7Cn0KCnN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICpmaW5kX3Rhc2tfYnlf
cGlkKGludCBwaWQpCnsKCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgKipodGFibGUgPSAmcGlkaGFz
aFsoKCgoIHBpZCApID4+IDgpIF4gKCBwaWQgKSkgJiAoKDQwOTYgPj4gMikgIC0gMSkpIF07CgoJ
Zm9yKHAgPSAqaHRhYmxlOyBwICYmIHAtPnBpZCAhPSBwaWQ7IHAgPSBwLT5waWRoYXNoX25leHQp
CgkJOwoKCXJldHVybiBwOwp9CgoKCnN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX3NldF9jcHUoc3Ry
dWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGludCBjcHUpCnsKCXRzay0+cHJvY2Vzc29y
ID0gY3B1OwoJdHNrLT5jcHVzX3J1bm5hYmxlID0gMVVMIDw8IGNwdTsKfQoKc3RhdGljIGlubGlu
ZSB2b2lkIHRhc2tfcmVsZWFzZV9jcHUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCnsKCXRzay0+
Y3B1c19ydW5uYWJsZSA9IH4wVUw7Cn0KCiAKZXh0ZXJuIHN0cnVjdCB1c2VyX3N0cnVjdCAqIGFs
bG9jX3VpZCh1aWRfdCk7CmV4dGVybiB2b2lkIGZyZWVfdWlkKHN0cnVjdCB1c2VyX3N0cnVjdCAq
KTsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdm9sYXRpbGUgamlmZmllczsKZXh0ZXJuIHVuc2ln
bmVkIGxvbmcgaXRpbWVyX3RpY2tzOwpleHRlcm4gdW5zaWduZWQgbG9uZyBpdGltZXJfbmV4dDsK
ZXh0ZXJuIHN0cnVjdCB0aW1ldmFsIHh0aW1lOwpleHRlcm4gdm9pZCBkb190aW1lcihzdHJ1Y3Qg
cHRfcmVncyAqKTsKCmV4dGVybiB1bnNpZ25lZCBpbnQgKiBwcm9mX2J1ZmZlcjsKZXh0ZXJuIHVu
c2lnbmVkIGxvbmcgcHJvZl9sZW47CmV4dGVybiB1bnNpZ25lZCBsb25nIHByb2Zfc2hpZnQ7CgoK
CmV4dGVybiB2b2lkICBfX3dha2VfdXAod2FpdF9xdWV1ZV9oZWFkX3QgKnEsIHVuc2lnbmVkIGlu
dCBtb2RlLCBpbnQgbnIpICA7CmV4dGVybiB2b2lkICBfX3dha2VfdXBfc3luYyh3YWl0X3F1ZXVl
X2hlYWRfdCAqcSwgdW5zaWduZWQgaW50IG1vZGUsIGludCBucikgIDsKZXh0ZXJuIHZvaWQgIHNs
ZWVwX29uKHdhaXRfcXVldWVfaGVhZF90ICpxKSAgOwpleHRlcm4gbG9uZyAgc2xlZXBfb25fdGlt
ZW91dCh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwKCQkJCSAgICAgIHNpZ25lZCBsb25nIHRpbWVvdXQp
ICA7CmV4dGVybiB2b2lkICBpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKHdhaXRfcXVldWVfaGVhZF90
ICpxKSAgOwpleHRlcm4gbG9uZyAgaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0KHdhaXRf
cXVldWVfaGVhZF90ICpxLAoJCQkJCQkgICAgc2lnbmVkIGxvbmcgdGltZW91dCkgIDsKZXh0ZXJu
IGludCAgd2FrZV91cF9wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqIHRzaykgIDsKCgoKCgoK
CgoKCgogICBsb25nIHN5c193YWl0NChwaWRfdCBwaWQsdW5zaWduZWQgaW50ICogc3RhdF9hZGRy
LCBpbnQgb3B0aW9ucywgc3RydWN0IHJ1c2FnZSAqIHJ1KTsKCmV4dGVybiBpbnQgaW5fZ3JvdXBf
cChnaWRfdCk7CmV4dGVybiBpbnQgaW5fZWdyb3VwX3AoZ2lkX3QpOwoKZXh0ZXJuIHZvaWQgcHJv
Y19jYWNoZXNfaW5pdCh2b2lkKTsKZXh0ZXJuIHZvaWQgZmx1c2hfc2lnbmFscyhzdHJ1Y3QgdGFz
a19zdHJ1Y3QgKik7CmV4dGVybiB2b2lkIGZsdXNoX3NpZ25hbF9oYW5kbGVycyhzdHJ1Y3QgdGFz
a19zdHJ1Y3QgKik7CmV4dGVybiBpbnQgZGVxdWV1ZV9zaWduYWwoc2lnc2V0X3QgKiwgc2lnaW5m
b190ICopOwpleHRlcm4gdm9pZCBibG9ja19hbGxfc2lnbmFscyhpbnQgKCpub3RpZmllcikodm9p
ZCAqcHJpdiksIHZvaWQgKnByaXYsCgkJCSAgICAgIHNpZ3NldF90ICptYXNrKTsKZXh0ZXJuIHZv
aWQgdW5ibG9ja19hbGxfc2lnbmFscyh2b2lkKTsKZXh0ZXJuIGludCBzZW5kX3NpZ19pbmZvKGlu
dCwgc3RydWN0IHNpZ2luZm8gKiwgc3RydWN0IHRhc2tfc3RydWN0ICopOwpleHRlcm4gaW50IGZv
cmNlX3NpZ19pbmZvKGludCwgc3RydWN0IHNpZ2luZm8gKiwgc3RydWN0IHRhc2tfc3RydWN0ICop
OwpleHRlcm4gaW50IGtpbGxfcGdfaW5mbyhpbnQsIHN0cnVjdCBzaWdpbmZvICosIHBpZF90KTsK
ZXh0ZXJuIGludCBraWxsX3NsX2luZm8oaW50LCBzdHJ1Y3Qgc2lnaW5mbyAqLCBwaWRfdCk7CmV4
dGVybiBpbnQga2lsbF9wcm9jX2luZm8oaW50LCBzdHJ1Y3Qgc2lnaW5mbyAqLCBwaWRfdCk7CmV4
dGVybiB2b2lkIG5vdGlmeV9wYXJlbnQoc3RydWN0IHRhc2tfc3RydWN0ICosIGludCk7CmV4dGVy
biB2b2lkIGRvX25vdGlmeV9wYXJlbnQoc3RydWN0IHRhc2tfc3RydWN0ICosIGludCk7CmV4dGVy
biB2b2lkIGZvcmNlX3NpZyhpbnQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKZXh0ZXJuIGludCBz
ZW5kX3NpZyhpbnQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBpbnQpOwpleHRlcm4gaW50IGtpbGxf
cGcocGlkX3QsIGludCwgaW50KTsKZXh0ZXJuIGludCBraWxsX3NsKHBpZF90LCBpbnQsIGludCk7
CmV4dGVybiBpbnQga2lsbF9wcm9jKHBpZF90LCBpbnQsIGludCk7CmV4dGVybiBpbnQgZG9fc2ln
YWN0aW9uKGludCwgY29uc3Qgc3RydWN0IGtfc2lnYWN0aW9uICosIHN0cnVjdCBrX3NpZ2FjdGlv
biAqKTsKZXh0ZXJuIGludCBkb19zaWdhbHRzdGFjayhjb25zdCBzdGFja190ICosIHN0YWNrX3Qg
KiwgdW5zaWduZWQgbG9uZyk7CgpzdGF0aWMgaW5saW5lIGludCBzaWduYWxfcGVuZGluZyhzdHJ1
Y3QgdGFza19zdHJ1Y3QgKnApCnsKCXJldHVybiAocC0+c2lncGVuZGluZyAhPSAwKTsKfQoKIAoK
CgpzdGF0aWMgaW5saW5lIGludCBoYXNfcGVuZGluZ19zaWduYWxzKHNpZ3NldF90ICpzaWduYWws
IHNpZ3NldF90ICpibG9ja2VkKQp7Cgl1bnNpZ25lZCBsb25nIHJlYWR5OwoJbG9uZyBpOwoKCXN3
aXRjaCAoKDY0ICAvIDMyICkgKSB7CglkZWZhdWx0OgoJCWZvciAoaSA9ICg2NCAgLyAzMiApICwg
cmVhZHkgPSAwOyAtLWkgPj0gMCA7KQoJCQlyZWFkeSB8PSBzaWduYWwtPnNpZ1tpXSAmfiBibG9j
a2VkLT5zaWdbaV07CgkJYnJlYWs7CgoJY2FzZSA0OiByZWFkeSAgPSBzaWduYWwtPnNpZ1szXSAm
fiBibG9ja2VkLT5zaWdbM107CgkJcmVhZHkgfD0gc2lnbmFsLT5zaWdbMl0gJn4gYmxvY2tlZC0+
c2lnWzJdOwoJCXJlYWR5IHw9IHNpZ25hbC0+c2lnWzFdICZ+IGJsb2NrZWQtPnNpZ1sxXTsKCQly
ZWFkeSB8PSBzaWduYWwtPnNpZ1swXSAmfiBibG9ja2VkLT5zaWdbMF07CgkJYnJlYWs7CgoJY2Fz
ZSAyOiByZWFkeSAgPSBzaWduYWwtPnNpZ1sxXSAmfiBibG9ja2VkLT5zaWdbMV07CgkJcmVhZHkg
fD0gc2lnbmFsLT5zaWdbMF0gJn4gYmxvY2tlZC0+c2lnWzBdOwoJCWJyZWFrOwoKCWNhc2UgMTog
cmVhZHkgID0gc2lnbmFsLT5zaWdbMF0gJn4gYmxvY2tlZC0+c2lnWzBdOwoJfQoJcmV0dXJuIHJl
YWR5ICE9CTA7Cn0KCiAKCgoKc3RhdGljIGlubGluZSB2b2lkIHJlY2FsY19zaWdwZW5kaW5nKHN0
cnVjdCB0YXNrX3N0cnVjdCAqdCkKewoJdC0+c2lncGVuZGluZyA9IGhhc19wZW5kaW5nX3NpZ25h
bHMoJnQtPnBlbmRpbmcuc2lnbmFsLCAmdC0+YmxvY2tlZCk7Cn0KCiAKCnN0YXRpYyBpbmxpbmUg
aW50IG9uX3NpZ19zdGFjayh1bnNpZ25lZCBsb25nIHNwKQp7CglyZXR1cm4gKHNwIC0gX2N1cnJl
bnRfdGFzayAtPnNhc19zc19zcCA8IF9jdXJyZW50X3Rhc2sgLT5zYXNfc3Nfc2l6ZSk7Cn0KCnN0
YXRpYyBpbmxpbmUgaW50IHNhc19zc19mbGFncyh1bnNpZ25lZCBsb25nIHNwKQp7CglyZXR1cm4g
KF9jdXJyZW50X3Rhc2sgLT5zYXNfc3Nfc2l6ZSA9PSAwID8gMiAKCQk6IG9uX3NpZ19zdGFjayhz
cCkgPyAxICA6IDApOwp9CgpleHRlcm4gaW50IHJlcXVlc3RfaXJxKHVuc2lnbmVkIGludCwKCQkg
ICAgICAgdm9pZCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwKCQkg
ICAgICAgdW5zaWduZWQgbG9uZywgY29uc3QgY2hhciAqLCB2b2lkICopOwpleHRlcm4gdm9pZCBm
cmVlX2lycSh1bnNpZ25lZCBpbnQsIHZvaWQgKik7CgogCgoKCgoKCgoKCgoKCgpzdGF0aWMgaW5s
aW5lIGludCBzdXNlcih2b2lkKQp7CglpZiAoISAoICgxIDw8ICggMCAgKzEpKSAmIDB4MDAwMDAw
MDAgID8gKDEgPDwgKCAwICApKSAmIDB4MDAwMDAwMDAgIDoJKDEgPDwgKCAwICApKSAmIHNlY3Vy
ZWJpdHMgKSAgJiYgX2N1cnJlbnRfdGFzayAtPmV1aWQgPT0gMCkgeyAKCQlfY3VycmVudF90YXNr
IC0+ZmxhZ3MgfD0gMHgwMDAwMDEwMCA7CgkJcmV0dXJuIDE7Cgl9CglyZXR1cm4gMDsKfQoKc3Rh
dGljIGlubGluZSBpbnQgZnN1c2VyKHZvaWQpCnsKCWlmICghICggKDEgPDwgKCAwICArMSkpICYg
MHgwMDAwMDAwMCAgPyAoMSA8PCAoIDAgICkpICYgMHgwMDAwMDAwMCAgOgkoMSA8PCAoIDAgICkp
ICYgc2VjdXJlYml0cyApICAmJiBfY3VycmVudF90YXNrIC0+ZnN1aWQgPT0gMCkgewoJCV9jdXJy
ZW50X3Rhc2sgLT5mbGFncyB8PSAweDAwMDAwMTAwIDsKCQlyZXR1cm4gMTsKCX0KCXJldHVybiAw
Owp9CgogCgoKCgoKc3RhdGljIGlubGluZSBpbnQgY2FwYWJsZShpbnQgY2FwKQp7CgoJaWYgKCgo
ICBfY3VycmVudF90YXNrIC0+Y2FwX2VmZmVjdGl2ZSAgKSAgJiAoMSA8PCAoICAgY2FwICApKSAp
ICkKCgoKCXsKCQlfY3VycmVudF90YXNrIC0+ZmxhZ3MgfD0gMHgwMDAwMDEwMCA7CgkJcmV0dXJu
IDE7Cgl9CglyZXR1cm4gMDsKfQoKIAoKCmV4dGVybiBzdHJ1Y3QgbW1fc3RydWN0ICogbW1fYWxs
b2Modm9pZCk7CgpleHRlcm4gc3RydWN0IG1tX3N0cnVjdCAqIHN0YXJ0X2xhenlfdGxiKHZvaWQp
OwpleHRlcm4gdm9pZCBlbmRfbGF6eV90bGIoc3RydWN0IG1tX3N0cnVjdCAqbW0pOwoKIApleHRl
cm4gaW5saW5lIHZvaWQgIF9fbW1kcm9wKHN0cnVjdCBtbV9zdHJ1Y3QgKikgIDsKc3RhdGljIGlu
bGluZSB2b2lkIG1tZHJvcChzdHJ1Y3QgbW1fc3RydWN0ICogbW0pCnsKCWlmICgoYXRvbWljX3N1
Yl9yZXR1cm4oMSwgKCAmbW0tPm1tX2NvdW50ICkpID09IDApICkKCQlfX21tZHJvcChtbSk7Cn0K
CiAKZXh0ZXJuIHZvaWQgbW1wdXQoc3RydWN0IG1tX3N0cnVjdCAqKTsKIApleHRlcm4gdm9pZCBt
bV9yZWxlYXNlKHZvaWQpOwoKIAoKCmV4dGVybiBzdHJ1Y3QgZmlsZSAqKiBhbGxvY19mZF9hcnJh
eShpbnQpOwpleHRlcm4gaW50IGV4cGFuZF9mZF9hcnJheShzdHJ1Y3QgZmlsZXNfc3RydWN0ICos
IGludCBucik7CmV4dGVybiB2b2lkIGZyZWVfZmRfYXJyYXkoc3RydWN0IGZpbGUgKiosIGludCk7
CgpleHRlcm4gZmRfc2V0ICphbGxvY19mZHNldChpbnQpOwpleHRlcm4gaW50IGV4cGFuZF9mZHNl
dChzdHJ1Y3QgZmlsZXNfc3RydWN0ICosIGludCBucik7CmV4dGVybiB2b2lkIGZyZWVfZmRzZXQo
ZmRfc2V0ICosIGludCk7CgpleHRlcm4gaW50ICBjb3B5X3RocmVhZChpbnQsIHVuc2lnbmVkIGxv
bmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBz
dHJ1Y3QgcHRfcmVncyAqKTsKZXh0ZXJuIHZvaWQgZmx1c2hfdGhyZWFkKHZvaWQpOwpleHRlcm4g
dm9pZCBleGl0X3RocmVhZCh2b2lkKTsKCmV4dGVybiB2b2lkIGV4aXRfbW0oc3RydWN0IHRhc2tf
c3RydWN0ICopOwpleHRlcm4gdm9pZCBleGl0X2ZpbGVzKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsK
ZXh0ZXJuIHZvaWQgZXhpdF9zaWdoYW5kKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKCmV4dGVybiB2
b2lkIHJlcGFyZW50X3RvX2luaXQodm9pZCk7CmV4dGVybiB2b2lkIGRhZW1vbml6ZSh2b2lkKTsK
CmV4dGVybiBpbnQgZG9fZXhlY3ZlKGNoYXIgKiwgY2hhciAqKiwgY2hhciAqKiwgc3RydWN0IHB0
X3JlZ3MgKik7CmV4dGVybiBpbnQgZG9fZm9yayh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25n
LCBzdHJ1Y3QgcHRfcmVncyAqLCB1bnNpZ25lZCBsb25nKTsKCmV4dGVybiB2b2lkICBhZGRfd2Fp
dF9xdWV1ZSh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwgd2FpdF9xdWV1ZV90ICogd2FpdCkgIDsKZXh0
ZXJuIHZvaWQgIGFkZF93YWl0X3F1ZXVlX2V4Y2x1c2l2ZSh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwg
d2FpdF9xdWV1ZV90ICogd2FpdCkgIDsKZXh0ZXJuIHZvaWQgIHJlbW92ZV93YWl0X3F1ZXVlKHdh
aXRfcXVldWVfaGVhZF90ICpxLCB3YWl0X3F1ZXVlX3QgKiB3YWl0KSAgOwoKCiMgODYyICIvaG9t
ZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9z
Y2hlZC5oIgoKCgoKCgoKCgojIDg5MCAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11
Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvc2NoZWQuaCIKCQoKCgoKCgoKCgojIDkwOSAiL2hv
bWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgv
c2NoZWQuaCIKCgojIDkyMCAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4
LTIuNC54L2luY2x1ZGUvbGludXgvc2NoZWQuaCIKCgoKCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBk
ZWxfZnJvbV9ydW5xdWV1ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwKQp7Cglucl9ydW5uaW5nLS07
CglwLT5zbGVlcF90aW1lID0gamlmZmllczsKCWxpc3RfZGVsKCZwLT5ydW5fbGlzdCk7CglwLT5y
dW5fbGlzdC5uZXh0ID0gKCh2b2lkICopMCkgOwp9CgpzdGF0aWMgaW5saW5lIGludCB0YXNrX29u
X3J1bnF1ZXVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKewoJcmV0dXJuIChwLT5ydW5fbGlzdC5u
ZXh0ICE9ICgodm9pZCAqKTApICk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCB1bmhhc2hfcHJvY2Vz
cyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCnsKCWlmICh0YXNrX29uX3J1bnF1ZXVlKHApKSBkbyB7
ICA7IHBhbmljKCJCVUchIikgOyB9IHdoaWxlICgwKSA7CglkbyB7IF9fYXNtX18gX192b2xhdGls
ZV9fICggIm1vdmUgJS9zciwlJWQwXG5cdCIgIm9yaS5sICAjMHgwNzAwLCUlZDBcblx0IiAibW92
ZSAlJWQwLCUvc3JcbiIgOiA6IDogImNjIiwgIiVkMCIsICJtZW1vcnkiKSAgOyAgICAgICAgKHZv
aWQpKCAgJnRhc2tsaXN0X2xvY2sgICkgOyB9IHdoaWxlICgwKSA7Cglucl90aHJlYWRzLS07Cgl1
bmhhc2hfcGlkKHApOwoJZG8geyAoIHAgKS0+bmV4dF90YXNrLT5wcmV2X3Rhc2sgPSAoIHAgKS0+
cHJldl90YXNrOyAoIHAgKS0+cHJldl90YXNrLT5uZXh0X3Rhc2sgPSAoIHAgKS0+bmV4dF90YXNr
OyBpZiAoKCBwICktPnBfb3NwdHIpICggcCApLT5wX29zcHRyLT5wX3lzcHRyID0gKCBwICktPnBf
eXNwdHI7IGlmICgoIHAgKS0+cF95c3B0cikgKCBwICktPnBfeXNwdHItPnBfb3NwdHIgPSAoIHAg
KS0+cF9vc3B0cjsgZWxzZSAoIHAgKS0+cF9wcHRyLT5wX2NwdHIgPSAoIHAgKS0+cF9vc3B0cjsg
fSB3aGlsZSAoMCkgOwoJbGlzdF9kZWwoJnAtPnRocmVhZF9ncm91cCk7CglkbyB7IGRvIHsgfSB3
aGlsZSgwKSA7IF9fYXNtX18gX192b2xhdGlsZV9fICggIm1vdmUgJS9zciwlJWQwXG5cdCIgImFu
ZGkubCAjMHhmOGZmLCUlZDBcblx0IiAibW92ZSAlJWQwLCUvc3JcbiIgOiA6IDogImNjIiwgIiVk
MCIsICJtZW1vcnkiKSAgOyAgICAgICB9IHdoaWxlICgwKSA7Cn0KCiAKc3RhdGljIGlubGluZSB2
b2lkIHRhc2tfbG9jayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCnsKCSh2b2lkKSggJnAtPmFsbG9j
X2xvY2sgKSA7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX3VubG9jayhzdHJ1Y3QgdGFza19z
dHJ1Y3QgKnApCnsKCWRvIHsgfSB3aGlsZSgwKSA7Cn0KCiAKc3RhdGljIGlubGluZSBjaGFyICog
ZF9wYXRoKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IHZmc21vdW50ICp2ZnNtbnQsCgkJ
CQljaGFyICpidWYsIGludCBidWZsZW4pCnsKCWNoYXIgKnJlczsKCXN0cnVjdCB2ZnNtb3VudCAq
cm9vdG1udDsKCXN0cnVjdCBkZW50cnkgKnJvb3Q7Cgkodm9pZCkoICYgX2N1cnJlbnRfdGFzayAt
PmZzLT5sb2NrICkgOwoJcm9vdG1udCA9IG1udGdldChfY3VycmVudF90YXNrIC0+ZnMtPnJvb3Rt
bnQpOwoJcm9vdCA9IGRnZXQoX2N1cnJlbnRfdGFzayAtPmZzLT5yb290KTsKCWRvIHsgfSB3aGls
ZSgwKSA7Cgkodm9pZCkoICZkY2FjaGVfbG9jayApIDsKCXJlcyA9IF9fZF9wYXRoKGRlbnRyeSwg
dmZzbW50LCByb290LCByb290bW50LCBidWYsIGJ1Zmxlbik7CglkbyB7IH0gd2hpbGUoMCkgOwoJ
ZHB1dChyb290KTsKCW1udHB1dChyb290bW50KTsKCXJldHVybiByZXM7Cn0KCgoKCiMgNCAiL2hv
bWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgv
bW0uaCIgMgoKCgoKCgoKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xp
bnV4LTIuNC54L2luY2x1ZGUvbGludXgvbW16b25lLmgiIDEKCgoKCgoKCgoKCiAKCgoKCgoKCgoK
dHlwZWRlZiBzdHJ1Y3QgZnJlZV9hcmVhX3N0cnVjdCB7CglzdHJ1Y3QgbGlzdF9oZWFkCWZyZWVf
bGlzdDsKCXVuc2lnbmVkIGxvbmcJCSptYXA7Cn0gZnJlZV9hcmVhX3Q7CgpzdHJ1Y3QgcGdsaXN0
X2RhdGE7CgogCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCB6b25lX3N0cnVjdCB7CgkgCgoKCXNwaW5s
b2NrX3QJCWxvY2s7Cgl1bnNpZ25lZCBsb25nCQlmcmVlX3BhZ2VzOwoJdW5zaWduZWQgbG9uZwkJ
cGFnZXNfbWluLCBwYWdlc19sb3csIHBhZ2VzX2hpZ2g7CglpbnQJCQluZWVkX2JhbGFuY2U7CgoJ
IAoKCglmcmVlX2FyZWFfdAkJZnJlZV9hcmVhWzEwIF07CgoJIAoKCglzdHJ1Y3QgcGdsaXN0X2Rh
dGEJKnpvbmVfcGdkYXQ7CglzdHJ1Y3QgcGFnZQkJKnpvbmVfbWVtX21hcDsKCXVuc2lnbmVkIGxv
bmcJCXpvbmVfc3RhcnRfcGFkZHI7Cgl1bnNpZ25lZCBsb25nCQl6b25lX3N0YXJ0X21hcG5yOwoK
CSAKCgoJY2hhcgkJCSpuYW1lOwoJdW5zaWduZWQgbG9uZwkJc2l6ZTsKfSB6b25lX3Q7CgoKCgoK
CiAKCgoKCgoKCgoKCnR5cGVkZWYgc3RydWN0IHpvbmVsaXN0X3N0cnVjdCB7Cgl6b25lX3QgKiB6
b25lcyBbMyArMV07ICAKfSB6b25lbGlzdF90OwoKCgogCgoKCgoKCgoKCgpzdHJ1Y3QgYm9vdG1l
bV9kYXRhOwp0eXBlZGVmIHN0cnVjdCBwZ2xpc3RfZGF0YSB7Cgl6b25lX3Qgbm9kZV96b25lc1sz
IF07Cgl6b25lbGlzdF90IG5vZGVfem9uZWxpc3RzWzB4MGYgKzFdOwoJaW50IG5yX3pvbmVzOwoJ
c3RydWN0IHBhZ2UgKm5vZGVfbWVtX21hcDsKCXVuc2lnbmVkIGxvbmcgKnZhbGlkX2FkZHJfYml0
bWFwOwoJc3RydWN0IGJvb3RtZW1fZGF0YSAqYmRhdGE7Cgl1bnNpZ25lZCBsb25nIG5vZGVfc3Rh
cnRfcGFkZHI7Cgl1bnNpZ25lZCBsb25nIG5vZGVfc3RhcnRfbWFwbnI7Cgl1bnNpZ25lZCBsb25n
IG5vZGVfc2l6ZTsKCWludCBub2RlX2lkOwoJc3RydWN0IHBnbGlzdF9kYXRhICpub2RlX25leHQ7
Cn0gcGdfZGF0YV90OwoKZXh0ZXJuIGludCBudW1ub2RlczsKZXh0ZXJuIHBnX2RhdGFfdCAqcGdk
YXRfbGlzdDsKCgoKCiAKCgoKc3RydWN0IHBhZ2U7CmV4dGVybiB2b2lkIHNob3dfZnJlZV9hcmVh
c19jb3JlKHBnX2RhdGFfdCAqcGdkYXQpOwpleHRlcm4gdm9pZCBmcmVlX2FyZWFfaW5pdF9jb3Jl
KGludCBuaWQsIHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBwYWdlICoqZ21hcCwKICB1bnNpZ25l
ZCBsb25nICp6b25lc19zaXplLCB1bnNpZ25lZCBsb25nIHBhZGRyLCB1bnNpZ25lZCBsb25nICp6
aG9sZXNfc2l6ZSwKICBzdHJ1Y3QgcGFnZSAqcG1hcCk7CgpleHRlcm4gcGdfZGF0YV90IGNvbnRp
Z19wYWdlX2RhdGE7CgoKCgoKCgoKCgoKCgoKCgoKCiMgMTIgIi9ob21lL2Nhcmxvcy9CdWlsZHMv
VUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L21tLmgiIDIKCiMgMSAiL2hv
bWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgv
c3dhcC5oIiAxCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgp1bmlvbiBzd2FwX2hlYWRlciB7Cglz
dHJ1Y3QgCgl7CgkJY2hhciByZXNlcnZlZFsoNDA5NikgIC0gMTBdOwoJCWNoYXIgbWFnaWNbMTBd
OwkJCSAKCX0gbWFnaWM7CglzdHJ1Y3QgCgl7CgkJY2hhcgkgICAgIGJvb3RiaXRzWzEwMjRdOwkg
CgkJdW5zaWduZWQgaW50IHZlcnNpb247CgkJdW5zaWduZWQgaW50IGxhc3RfcGFnZTsKCQl1bnNp
Z25lZCBpbnQgbnJfYmFkcGFnZXM7CgkJdW5zaWduZWQgaW50IHBhZGRpbmdbMTI1XTsKCQl1bnNp
Z25lZCBpbnQgYmFkcGFnZXNbMV07Cgl9IGluZm87Cn07CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgog
CgoKc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgewoJdW5zaWduZWQgaW50IGZsYWdzOwoJa2Rldl90
IHN3YXBfZGV2aWNlOwoJc3BpbmxvY2tfdCBzZGV2X2xvY2s7CglzdHJ1Y3QgZGVudHJ5ICogc3dh
cF9maWxlOwoJc3RydWN0IHZmc21vdW50ICpzd2FwX3Zmc21udDsKCXVuc2lnbmVkIHNob3J0ICog
c3dhcF9tYXA7Cgl1bnNpZ25lZCBpbnQgbG93ZXN0X2JpdDsKCXVuc2lnbmVkIGludCBoaWdoZXN0
X2JpdDsKCXVuc2lnbmVkIGludCBjbHVzdGVyX25leHQ7Cgl1bnNpZ25lZCBpbnQgY2x1c3Rlcl9u
cjsKCWludCBwcmlvOwkJCSAKCWludCBwYWdlczsKCXVuc2lnbmVkIGxvbmcgbWF4OwoJaW50IG5l
eHQ7CQkJIAp9OwoKZXh0ZXJuIGludCBucl9zd2FwX3BhZ2VzOwoKIAoKCmV4dGVybiB1bnNpZ25l
ZCBpbnQgbnJfZnJlZV9wYWdlcyh2b2lkKTsKZXh0ZXJuIHVuc2lnbmVkIGludCBucl9mcmVlX2J1
ZmZlcl9wYWdlcyh2b2lkKTsKZXh0ZXJuIGludCBucl9hY3RpdmVfcGFnZXM7CmV4dGVybiBpbnQg
bnJfaW5hY3RpdmVfcGFnZXM7CmV4dGVybiBhdG9taWNfdCBucl9hc3luY19wYWdlczsKZXh0ZXJu
IGF0b21pY190IHBhZ2VfY2FjaGVfc2l6ZTsKZXh0ZXJuIGF0b21pY190IGJ1ZmZlcm1lbV9wYWdl
czsKZXh0ZXJuIHNwaW5sb2NrX3QgcGFnZWNhY2hlX2xvY2s7CmV4dGVybiB2b2lkIF9fcmVtb3Zl
X2lub2RlX3BhZ2Uoc3RydWN0IHBhZ2UgKik7CgogCnN0cnVjdCB0YXNrX3N0cnVjdDsKc3RydWN0
IHZtX2FyZWFfc3RydWN0OwpzdHJ1Y3Qgc3lzaW5mbzsKCnN0cnVjdCB6b25lX3Q7CgogCmV4dGVy
biB2b2lkICBscnVfY2FjaGVfYWRkKHN0cnVjdCBwYWdlICopICA7CmV4dGVybiB2b2lkICBfX2xy
dV9jYWNoZV9kZWwoc3RydWN0IHBhZ2UgKikgIDsKZXh0ZXJuIHZvaWQgIGxydV9jYWNoZV9kZWwo
c3RydWN0IHBhZ2UgKikgIDsKCmV4dGVybiB2b2lkICBhY3RpdmF0ZV9wYWdlKHN0cnVjdCBwYWdl
ICopICA7CgpleHRlcm4gdm9pZCBzd2FwX3NldHVwKHZvaWQpOwoKIApleHRlcm4gd2FpdF9xdWV1
ZV9oZWFkX3Qga3N3YXBkX3dhaXQ7CmV4dGVybiBpbnQgIHRyeV90b19mcmVlX3BhZ2VzKHpvbmVf
dCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCkgIDsKCiAKZXh0ZXJuIHZvaWQgcndfc3dh
cF9wYWdlKGludCwgc3RydWN0IHBhZ2UgKik7CmV4dGVybiB2b2lkIHJ3X3N3YXBfcGFnZV9ub2xv
Y2soaW50LCBzd3BfZW50cnlfdCwgY2hhciAqKTsKCiAKCiAKCgpleHRlcm4gdm9pZCBzaG93X3N3
YXBfY2FjaGVfaW5mbyh2b2lkKTsKCmV4dGVybiBpbnQgYWRkX3RvX3N3YXBfY2FjaGUoc3RydWN0
IHBhZ2UgKiwgc3dwX2VudHJ5X3QpOwpleHRlcm4gdm9pZCBfX2RlbGV0ZV9mcm9tX3N3YXBfY2Fj
aGUoc3RydWN0IHBhZ2UgKnBhZ2UpOwpleHRlcm4gdm9pZCBkZWxldGVfZnJvbV9zd2FwX2NhY2hl
KHN0cnVjdCBwYWdlICpwYWdlKTsKZXh0ZXJuIHZvaWQgZnJlZV9wYWdlX2FuZF9zd2FwX2NhY2hl
KHN0cnVjdCBwYWdlICpwYWdlKTsKZXh0ZXJuIHN0cnVjdCBwYWdlICogbG9va3VwX3N3YXBfY2Fj
aGUoc3dwX2VudHJ5X3QpOwpleHRlcm4gc3RydWN0IHBhZ2UgKiByZWFkX3N3YXBfY2FjaGVfYXN5
bmMoc3dwX2VudHJ5X3QpOwoKIApleHRlcm4gdm9pZCBvdXRfb2ZfbWVtb3J5KHZvaWQpOwoKIApl
eHRlcm4gaW50IHRvdGFsX3N3YXBfcGFnZXM7CmV4dGVybiB1bnNpZ25lZCBpbnQgbnJfc3dhcGZp
bGVzOwpleHRlcm4gc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3Qgc3dhcF9pbmZvW107CmV4dGVybiBp
bnQgaXNfc3dhcF9wYXJ0aXRpb24oa2Rldl90KTsKZXh0ZXJuIHZvaWQgc2lfc3dhcGluZm8oc3Ry
dWN0IHN5c2luZm8gKik7CmV4dGVybiBzd3BfZW50cnlfdCBnZXRfc3dhcF9wYWdlKHZvaWQpOwpl
eHRlcm4gdm9pZCBnZXRfc3dhcGhhbmRsZV9pbmZvKHN3cF9lbnRyeV90LCB1bnNpZ25lZCBsb25n
ICosIGtkZXZfdCAqLCAKCQkJCQlzdHJ1Y3QgaW5vZGUgKiopOwpleHRlcm4gaW50IHN3YXBfZHVw
bGljYXRlKHN3cF9lbnRyeV90KTsKZXh0ZXJuIGludCBzd2FwX2NvdW50KHN0cnVjdCBwYWdlICop
OwpleHRlcm4gaW50IHZhbGlkX3N3YXBoYW5kbGVzKHN3cF9lbnRyeV90LCB1bnNpZ25lZCBsb25n
ICopOwpleHRlcm4gdm9pZCBzd2FwX2ZyZWUoc3dwX2VudHJ5X3QpOwpleHRlcm4gdm9pZCBmcmVl
X3N3YXBfYW5kX2NhY2hlKHN3cF9lbnRyeV90KTsKc3RydWN0IHN3YXBfbGlzdF90IHsKCWludCBo
ZWFkOwkgCglpbnQgbmV4dDsJIAp9OwpleHRlcm4gc3RydWN0IHN3YXBfbGlzdF90IHN3YXBfbGlz
dDsKICAgbG9uZyBzeXNfc3dhcG9mZihjb25zdCBjaGFyICopOwogICBsb25nIHN5c19zd2Fwb24o
Y29uc3QgY2hhciAqLCBpbnQpOwoKZXh0ZXJuIHNwaW5sb2NrX3QgcGFnZW1hcF9scnVfbG9jazsK
CmV4dGVybiB2b2lkICBtYXJrX3BhZ2VfYWNjZXNzZWQoc3RydWN0IHBhZ2UgKikgIDsKCiAKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAyMTQgIi9ob21lL2Nhcmxvcy9C
dWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L3N3YXAuaCIKCgpl
eHRlcm4gdm9pZCBzaG1lbV91bnVzZShzd3BfZW50cnlfdCBlbnRyeSwgc3RydWN0IHBhZ2UgKnBh
Z2UpOwoKCgoKIyAxMyAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIu
NC54L2luY2x1ZGUvbGludXgvbW0uaCIgMgoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBtYXhfbWFw
bnI7CmV4dGVybiB1bnNpZ25lZCBsb25nIG51bV9waHlzcGFnZXM7CmV4dGVybiB2b2lkICogaGln
aF9tZW1vcnk7CmV4dGVybiBpbnQgcGFnZV9jbHVzdGVyOwogCmV4dGVybiBzdHJ1Y3QgbGlzdF9o
ZWFkIGFjdGl2ZV9saXN0OwpleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBpbmFjdGl2ZV9saXN0OwoK
CiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1
ZGUvYXNtL3BndGFibGUuaCIgMQoKCgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgv
ZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vc2V0dXAuaCIgMQoKIyA1ICIvaG9tZS9jYXJs
b3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vcGd0YWJsZS5o
IiAyCgoKCgoKCgoKCgoKCgoKCmV4dGVybiB2b2lkIHBhZ2luZ19pbml0KHZvaWQpOwoKIAoKCgoK
IAogCgoKCgoKCgoKCgoKCgoKCgogCgoKCiMgMjUgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5V
WC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L21tLmgiIDIKCgoKCmV4dGVybiBpbnQg
aXNfaW5fcm9tKHVuc2lnbmVkIGxvbmcpOwoKCiAKCgoKCgoKCgojIDg0ICIvaG9tZS9jYXJsb3Mv
QnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9tbS5oIgoKCiAK
CiAKc3RydWN0IHZtX2FyZWFfc3RydWN0IHsKICB1bnNpZ25lZCBsb25nIHZtX3N0YXJ0OwogIHVu
c2lnbmVkIGxvbmcgdm1fZW5kOwogIHVuc2lnbmVkIHNob3J0IHZtX2ZsYWdzOwogIHVuc2lnbmVk
IGxvbmcgdm1fb2Zmc2V0OwogICAKICB1bnNpZ25lZCBsb25nIHZtX3Bnb2ZmOwogIHBncHJvdF90
IHZtX3BhZ2VfcHJvdDsKCn07CgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCQkJCQkgCgoKCgoK
CgoKCgoKCgoKCiMgMTY0ICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgt
Mi40LngvaW5jbHVkZS9saW51eC9tbS5oIgoKCiAKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIHN0cnVj
dCBwYWdlIHsKCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJCSAKCXN0cnVjdCBhZGRyZXNzX3NwYWNl
ICptYXBwaW5nOwkgCgl1bnNpZ25lZCBsb25nIGluZGV4OwkJIAoJc3RydWN0IHBhZ2UgKm5leHRf
aGFzaDsJCSAKCglhdG9taWNfdCBjb3VudDsJCQkgCgl1bnNpZ25lZCBsb25nIGZsYWdzOwkJIAoK
CXN0cnVjdCBsaXN0X2hlYWQgbHJ1OwkJIAoKCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CQkgCglz
dHJ1Y3QgcGFnZSAqKnBwcmV2X2hhc2g7CSAKCXN0cnVjdCBidWZmZXJfaGVhZCAqIGJ1ZmZlcnM7
CSAKCXZvaWQgKnZpcnR1YWw7CQkJIAoKCXN0cnVjdCB6b25lX3N0cnVjdCAqem9uZTsJIAp9IG1l
bV9tYXBfdDsKCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCmV4dGVybiB2b2lkICBzZXRfcGFnZV9k
aXJ0eShzdHJ1Y3QgcGFnZSAqKSAgOwoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKIAoKCgoKCiAKZXh0ZXJuIG1lbV9tYXBfdCAqIG1lbV9tYXA7CgogCgoKCgoKZXh0ZXJuIHN0
cnVjdCBwYWdlICogIF9hbGxvY19wYWdlcyh1bnNpZ25lZCBpbnQgZ2ZwX21hc2ssIHVuc2lnbmVk
IGludCBvcmRlcikgIDsKZXh0ZXJuIHN0cnVjdCBwYWdlICogIF9fYWxsb2NfcGFnZXModW5zaWdu
ZWQgaW50IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsIHpvbmVsaXN0X3QgKnpvbmVsaXN0
KSAgOwpleHRlcm4gc3RydWN0IHBhZ2UgKiBhbGxvY19wYWdlc19ub2RlKGludCBuaWQsIHVuc2ln
bmVkIGludCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKTsKCnN0YXRpYyBpbmxpbmUgc3Ry
dWN0IHBhZ2UgKiBhbGxvY19wYWdlcyh1bnNpZ25lZCBpbnQgZ2ZwX21hc2ssIHVuc2lnbmVkIGlu
dCBvcmRlcikKewoJIAoKCglpZiAob3JkZXIgPj0gMTAgKQoJCXJldHVybiAoKHZvaWQgKikwKSA7
CglyZXR1cm4gX2FsbG9jX3BhZ2VzKGdmcF9tYXNrLCBvcmRlcik7Cn0KCgoKZXh0ZXJuIHVuc2ln
bmVkIGxvbmcgIF9fZ2V0X2ZyZWVfcGFnZXModW5zaWduZWQgaW50IGdmcF9tYXNrLCB1bnNpZ25l
ZCBpbnQgb3JkZXIpICA7CmV4dGVybiB1bnNpZ25lZCBsb25nICBnZXRfemVyb2VkX3BhZ2UodW5z
aWduZWQgaW50IGdmcF9tYXNrKSAgOwoKCgoKCgoKIAoKCgoKIAoKCmV4dGVybiB2b2lkICBfX2Zy
ZWVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcikgIDsKZXh0ZXJu
IHZvaWQgIGZyZWVfcGFnZXModW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgb3JkZXIp
ICA7CgoKCgpleHRlcm4gdm9pZCBzaG93X2ZyZWVfYXJlYXModm9pZCk7CmV4dGVybiB2b2lkIHNo
b3dfZnJlZV9hcmVhc19ub2RlKHBnX2RhdGFfdCAqcGdkYXQpOwoKZXh0ZXJuIHZvaWQgY2xlYXJf
cGFnZV90YWJsZXMoc3RydWN0IG1tX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCBpbnQpOwoKZXh0
ZXJuIGludCBmYWlsX3dyaXRlcGFnZShzdHJ1Y3QgcGFnZSAqKTsKc3RydWN0IHBhZ2UgKiBzaG1l
bV9ub3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJl
c3MsIGludCB1bnVzZWQpOwpzdHJ1Y3QgZmlsZSAqc2htZW1fZmlsZV9zZXR1cChjaGFyICogbmFt
ZSwgbG9mZl90IHNpemUpOwpleHRlcm4gdm9pZCBzaG1lbV9sb2NrKHN0cnVjdCBmaWxlICogZmls
ZSwgaW50IGxvY2spOwpleHRlcm4gaW50IHNobWVtX3plcm9fc2V0dXAoc3RydWN0IHZtX2FyZWFf
c3RydWN0ICopOwoKZXh0ZXJuIHZvaWQgemFwX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAq
bW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgbG9uZyBzaXplKTsKZXh0ZXJuIGlu
dCBjb3B5X3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgbW1fc3RydWN0
ICpzcmMsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKZXh0ZXJuIGludCByZW1hcF9wYWdl
X3JhbmdlKHVuc2lnbmVkIGxvbmcgZnJvbSwgdW5zaWduZWQgbG9uZyB0bywgdW5zaWduZWQgbG9u
ZyBzaXplLCBwZ3Byb3RfdCBwcm90KTsKZXh0ZXJuIGludCB6ZXJvbWFwX3BhZ2VfcmFuZ2UodW5z
aWduZWQgbG9uZyBmcm9tLCB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHByb3QpOwoKZXh0
ZXJuIGludCB2bXRydW5jYXRlKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb2ZmX3Qgb2Zmc2V0KTsK
ZXh0ZXJuIHBtZF90ICogIF9fcG1kX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAq
cGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpICA7CmV4dGVybiBwdGVfdCAqICBwdGVfYWxsb2Mo
c3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykg
IDsKZXh0ZXJuIGludCBoYW5kbGVfbW1fZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sc3RydWN0
IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgaW50IHdyaXRlX2Fj
Y2Vzcyk7CmV4dGVybiBpbnQgbWFrZV9wYWdlc19wcmVzZW50KHVuc2lnbmVkIGxvbmcgYWRkciwg
dW5zaWduZWQgbG9uZyBlbmQpOwpleHRlcm4gaW50IGFjY2Vzc19wcm9jZXNzX3ZtKHN0cnVjdCB0
YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmJ1ZiwgaW50IGxlbiwg
aW50IHdyaXRlKTsKZXh0ZXJuIGludCBwdHJhY2VfcmVhZGRhdGEoc3RydWN0IHRhc2tfc3RydWN0
ICp0c2ssIHVuc2lnbmVkIGxvbmcgc3JjLCBjaGFyICpkc3QsIGludCBsZW4pOwpleHRlcm4gaW50
IHB0cmFjZV93cml0ZWRhdGEoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGNoYXIgKiBzcmMsIHVu
c2lnbmVkIGxvbmcgZHN0LCBpbnQgbGVuKTsKZXh0ZXJuIGludCBwdHJhY2VfYXR0YWNoKHN0cnVj
dCB0YXNrX3N0cnVjdCAqdHNrKTsKZXh0ZXJuIGludCBwdHJhY2VfZGV0YWNoKHN0cnVjdCB0YXNr
X3N0cnVjdCAqLCB1bnNpZ25lZCBpbnQpOwpleHRlcm4gdm9pZCBwdHJhY2VfZGlzYWJsZShzdHJ1
Y3QgdGFza19zdHJ1Y3QgKik7CmV4dGVybiBpbnQgcHRyYWNlX2NoZWNrX2F0dGFjaChzdHJ1Y3Qg
dGFza19zdHJ1Y3QgKnRhc2ssIGludCBraWxsKTsKCmludCBnZXRfdXNlcl9wYWdlcyhzdHJ1Y3Qg
dGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3Rh
cnQsCgkJaW50IGxlbiwgaW50IHdyaXRlLCBpbnQgZm9yY2UsIHN0cnVjdCBwYWdlICoqcGFnZXMs
IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXMpOwoKIyA0NzQgIi9ob21lL2Nhcmxvcy9CdWls
ZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L21tLmgiCgoKZXh0ZXJu
IHZvaWQgZnJlZV9hcmVhX2luaXQodW5zaWduZWQgbG9uZyAqIHpvbmVzX3NpemUpOwpleHRlcm4g
dm9pZCBmcmVlX2FyZWFfaW5pdF9ub2RlKGludCBuaWQsIHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVj
dCBwYWdlICpwbWFwLAoJdW5zaWduZWQgbG9uZyAqIHpvbmVzX3NpemUsIHVuc2lnbmVkIGxvbmcg
em9uZV9zdGFydF9wYWRkciwgCgl1bnNpZ25lZCBsb25nICp6aG9sZXNfc2l6ZSk7CmV4dGVybiB2
b2lkIG1lbV9pbml0KHZvaWQpOwpleHRlcm4gdm9pZCBzaG93X21lbSh2b2lkKTsKZXh0ZXJuIHZv
aWQgc2lfbWVtaW5mbyhzdHJ1Y3Qgc3lzaW5mbyAqIHZhbCk7CgoKCgoKCmV4dGVybiBzdHJ1Y3Qg
YWRkcmVzc19zcGFjZSBzd2FwcGVyX3NwYWNlOwoKCnN0YXRpYyBpbmxpbmUgaW50IGlzX3BhZ2Vf
Y2FjaGVfZnJlZWFibGUoc3RydWN0IHBhZ2UgKiBwYWdlKQp7CglyZXR1cm4gKCggJiggcGFnZSAp
LT5jb3VudCApLT5jb3VudGVyKSAgIC0gISFwYWdlLT5idWZmZXJzID09IDE7Cn0KCmV4dGVybiBp
bnQgY2FuX3NoYXJlX3N3YXBfcGFnZShzdHJ1Y3QgcGFnZSAqKTsKZXh0ZXJuIGludCByZW1vdmVf
ZXhjbHVzaXZlX3N3YXBfcGFnZShzdHJ1Y3QgcGFnZSAqKTsKCmV4dGVybiB2b2lkIF9fZnJlZV9w
dGUocHRlX3QpOwoKIApleHRlcm4gdm9pZCBsb2NrX3ZtYV9tYXBwaW5ncyhzdHJ1Y3Qgdm1fYXJl
YV9zdHJ1Y3QgKik7CmV4dGVybiB2b2lkIHVubG9ja192bWFfbWFwcGluZ3Moc3RydWN0IHZtX2Fy
ZWFfc3RydWN0ICopOwpleHRlcm4gdm9pZCBpbnNlcnRfdm1fc3RydWN0KHN0cnVjdCBtbV9zdHJ1
Y3QgKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOwpleHRlcm4gdm9pZCBfX2luc2VydF92bV9z
dHJ1Y3Qoc3RydWN0IG1tX3N0cnVjdCAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CmV4dGVy
biB2b2lkIGJ1aWxkX21tYXBfcmIoc3RydWN0IG1tX3N0cnVjdCAqKTsKZXh0ZXJuIHZvaWQgZXhp
dF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKik7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBnZXRfdW5t
YXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1
bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGRvX21t
YXBfcGdvZmYoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwKCXVuc2lnbmVk
IGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHByb3QsCgl1bnNpZ25lZCBsb25nIGZsYWcsIHVuc2ln
bmVkIGxvbmcgcGdvZmYpOwoKc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRvX21tYXAoc3Ry
dWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwKCXVuc2lnbmVkIGxvbmcgbGVuLCB1
bnNpZ25lZCBsb25nIHByb3QsCgl1bnNpZ25lZCBsb25nIGZsYWcsIHVuc2lnbmVkIGxvbmcgb2Zm
c2V0KQp7Cgl1bnNpZ25lZCBsb25nIHJldCA9IC0gMjIgOwoJaWYgKChvZmZzZXQgKyAoKCggbGVu
ICkrICg0MDk2KSAtMSkmICh+KCg0MDk2KSAtMSkpICkgKSA8IG9mZnNldCkKCQlnb3RvIG91dDsK
CWlmICghKG9mZnNldCAmIH4ofigoNDA5NikgLTEpKSApKQoJCXJldCA9IGRvX21tYXBfcGdvZmYo
ZmlsZSwgYWRkciwgbGVuLCBwcm90LCBmbGFnLCBvZmZzZXQgPj4gKDEyKSApOwpvdXQ6CglyZXR1
cm4gcmV0Owp9CgpleHRlcm4gaW50IGRvX211bm1hcChzdHJ1Y3QgbW1fc3RydWN0ICosIHVuc2ln
bmVkIGxvbmcsIHNpemVfdCk7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBkb19icmsodW5zaWduZWQg
bG9uZywgdW5zaWduZWQgbG9uZyk7CgpzdGF0aWMgaW5saW5lIHZvaWQgX192bWFfdW5saW5rKHN0
cnVjdCBtbV9zdHJ1Y3QgKiBtbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hLCBzdHJ1Y3Qg
dm1fYXJlYV9zdHJ1Y3QgKiBwcmV2KQp7CgoKCgoKCn0KCnN0YXRpYyBpbmxpbmUgaW50IGNhbl92
bWFfbWVyZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hLCB1bnNpZ25lZCBsb25nIHZtX2Zs
YWdzKQp7CgoKCgoKCQlyZXR1cm4gMDsKfQoKc3RydWN0IHpvbmVfdDsKIApleHRlcm4gdm9pZCBy
ZW1vdmVfaW5vZGVfcGFnZShzdHJ1Y3QgcGFnZSAqKTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGFn
ZV91bnVzZShzdHJ1Y3QgcGFnZSAqKTsKZXh0ZXJuIHZvaWQgdHJ1bmNhdGVfaW5vZGVfcGFnZXMo
c3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwgbG9mZl90KTsKCiAKZXh0ZXJuIGludCBmaWxlbWFwX3N5
bmMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsCXNpemVfdCwgdW5zaWdu
ZWQgaW50KTsKZXh0ZXJuIHN0cnVjdCBwYWdlICpmaWxlbWFwX25vcGFnZShzdHJ1Y3Qgdm1fYXJl
YV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgaW50KTsKCiAKCgogCgoKCiAKCgoKCgoKCgoKCgoK
CgoKCiAKCgoKCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHBmX2dmcF9tYXNrKHVuc2lnbmVk
IGludCBnZnBfbWFzaykKewoJIAoJaWYgKF9jdXJyZW50X3Rhc2sgLT5mbGFncyAmIDB4MDAwMDQw
MDAgKQoJCWdmcF9tYXNrICY9IH4oMHg0MCAgfCAweDgwICB8IDB4MTAwICk7CgoJcmV0dXJuIGdm
cF9tYXNrOwp9CgkKIyA2NDggIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51
eC0yLjQueC9pbmNsdWRlL2xpbnV4L21tLmgiCgoKCgoKIyA1ICIvaG9tZS9jYXJsb3MvQnVpbGRz
L1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC9sb2Nrcy5oIiAyCgoKCiMg
MSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUv
bGludXgvcGFnZW1hcC5oIiAxCgoKCiAKCgoKCgoKCgoKCgojIDEgIi9ob21lL2Nhcmxvcy9CdWls
ZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaCIgMQoK
CgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5j
bHVkZS9hc20vcGdhbGxvYy5oIiAxCgoKCiAKCgoKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9V
Q0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtL3NldHVwLmgiIDEKCiMgOSAiL2hv
bWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtL3Bn
YWxsb2MuaCIgMgoKIyAxICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgt
Mi40LngvaW5jbHVkZS9hc20vdmlydGNvbnZlcnQuaCIgMQoKCgogCgoKCgoKCiMgMSAiL2hvbWUv
Y2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvYXNtL3NldHVw
LmgiIDEKCiMgMTEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQu
eC9pbmNsdWRlL2FzbS92aXJ0Y29udmVydC5oIiAyCgoKCgoKCgoKCgoKCgojIDEwICIvaG9tZS9j
YXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9hc20vcGdhbGxv
Yy5oIiAyCgoKIAoKCgojIDQzICIvaG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGlu
dXgtMi40LngvaW5jbHVkZS9hc20vcGdhbGxvYy5oIgoKCmV4dGVybiBpbmxpbmUgdm9pZCBfX2Zs
dXNoX2NhY2hlX2FsbCh2b2lkKQp7CiMgNzIgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9l
Y2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgiCgp9CgoKCgoKCgoKCgoKIAoK
CgogCgoKc3RhdGljIGlubGluZSB2b2lkIF9fZmx1c2hfdGxiKHZvaWQpCnsKCWRvIHsgIDsgcGFu
aWMoIkJVRyEiKSA7IH0gd2hpbGUgKDApIDsKfQoKc3RhdGljIGlubGluZSB2b2lkIF9fZmx1c2hf
dGxiX29uZSh1bnNpZ25lZCBsb25nIGFkZHIpCnsKCWRvIHsgIDsgcGFuaWMoIkJVRyEiKSA7IH0g
d2hpbGUgKDApIDsKfQoKCgogCgoKc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9hbGwodm9p
ZCkKewoJZG8geyAgOyBwYW5pYygiQlVHISIpIDsgfSB3aGlsZSAoMCkgOwp9CgpzdGF0aWMgaW5s
aW5lIHZvaWQgZmx1c2hfdGxiX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQp7CglkbyB7ICA7IHBh
bmljKCJCVUchIikgOyB9IHdoaWxlICgwKSA7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90
bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKQp7
CglkbyB7ICA7IHBhbmljKCJCVUchIikgOyB9IHdoaWxlICgwKSA7Cn0KCnN0YXRpYyBpbmxpbmUg
dm9pZCBmbHVzaF90bGJfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sCgkJCQkgICB1bnNpZ25l
ZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKewoJZG8geyAgOyBwYW5pYygiQlVHISIp
IDsgfSB3aGlsZSAoMCkgOwp9CgpleHRlcm4gaW5saW5lIHZvaWQgZmx1c2hfdGxiX2tlcm5lbF9w
YWdlKHVuc2lnbmVkIGxvbmcgYWRkcikKewoJZG8geyAgOyBwYW5pYygiQlVHISIpIDsgfSB3aGls
ZSAoMCkgOwp9CgpleHRlcm4gaW5saW5lIHZvaWQgZmx1c2hfdGxiX3BndGFibGVzKHN0cnVjdCBt
bV9zdHJ1Y3QgKm1tLAoJCQkJICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9u
ZyBlbmQpCnsKCWRvIHsgIDsgcGFuaWMoIkJVRyEiKSA7IH0gd2hpbGUgKDApIDsKfQoKCiMgNSAi
L2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGlu
dXgvaGlnaG1lbS5oIiAyCgoKIyAyOSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11
Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvaGlnaG1lbS5oIgoKCnN0YXRpYyBpbmxpbmUgdW5z
aWduZWQgaW50IG5yX2ZyZWVfaGlnaHBhZ2VzKHZvaWQpIHsgcmV0dXJuIDA7IH0KCnN0YXRpYyBp
bmxpbmUgdm9pZCAqa21hcChzdHJ1Y3QgcGFnZSAqcGFnZSkgeyByZXR1cm4gKHsgaWYgKCEoIHBh
Z2UgKS0+dmlydHVhbCkgZG8geyAgOyBwYW5pYygiQlVHISIpIDsgfSB3aGlsZSAoMCkgOyAoIHBh
Z2UgKS0+dmlydHVhbDt9KSA7IH0KCgoKCgoKCgoKCgogCnN0YXRpYyBpbmxpbmUgdm9pZCBjbGVh
cl91c2VyX2hpZ2hwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHZhZGRyKQp7
Cgl2b2lkICphZGRyID0ga21hcCggcGFnZSApIDsKCW1lbXNldCgoICBhZGRyICApLCAwLCAoNDA5
NikgKSAgOwoJZG8geyB9IHdoaWxlICgwKSAgOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJf
aGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCnsKCW1lbXNldCgoIGttYXAocGFnZSkgKSwgMCwg
KDQwOTYpICkgOwoJZG8geyB9IHdoaWxlICgwKSA7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBtZW1j
bGVhcl9oaWdocGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9mZnNldCwgdW5z
aWduZWQgaW50IHNpemUpCnsKCWNoYXIgKmthZGRyOwoKCWlmIChvZmZzZXQgKyBzaXplID4gKDQw
OTYpICkKCQlkbyB7ICA7IHBhbmljKCJCVUchIikgOyB9IHdoaWxlICgwKSA7CglrYWRkciA9IGtt
YXAocGFnZSk7CgltZW1zZXQoa2FkZHIgKyBvZmZzZXQsIDAsIHNpemUpOwoJZG8geyB9IHdoaWxl
ICgwKSA7Cn0KCiAKCgpzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2xlYXJfaGlnaHBhZ2VfZmx1c2go
c3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBzaXpl
KQp7CgljaGFyICprYWRkcjsKCglpZiAob2Zmc2V0ICsgc2l6ZSA+ICg0MDk2KSApCgkJZG8geyAg
OyBwYW5pYygiQlVHISIpIDsgfSB3aGlsZSAoMCkgOwoJa2FkZHIgPSBrbWFwKHBhZ2UpOwoJbWVt
c2V0KGthZGRyICsgb2Zmc2V0LCAwLCBzaXplKTsKCV9fZmx1c2hfY2FjaGVfYWxsKCkgOwoJZG8g
eyB9IHdoaWxlICgwKSA7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X3VzZXJfaGlnaHBhZ2Uo
c3RydWN0IHBhZ2UgKnRvLCBzdHJ1Y3QgcGFnZSAqZnJvbSwgdW5zaWduZWQgbG9uZyB2YWRkcikK
ewoJY2hhciAqdmZyb20sICp2dG87CgoJdmZyb20gPSBrbWFwKCBmcm9tICkgOwoJdnRvID0ga21h
cCggdG8gKSA7CgltZW1jcHkoKCAgdnRvICApLCAoICAgIHZmcm9tICApLCAoNDA5NikgKSAgOwoJ
ZG8geyB9IHdoaWxlICgwKSAgOwoJZG8geyB9IHdoaWxlICgwKSAgOwp9CgoKIyAxNiAiL2hvbWUv
Y2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvcGFn
ZW1hcC5oIiAyCgoKIAoKCgoKCgoKCgoKCgoKZXh0ZXJuIHZvaWQgIHBhZ2VfY2FjaGVfcmVsZWFz
ZShzdHJ1Y3QgcGFnZSAqKSAgOwoKc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqcGFnZV9jYWNo
ZV9hbGxvYyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqeCkKewoJcmV0dXJuIGFsbG9jX3BhZ2VzKHgt
PmdmcF9tYXNrLCAwKTsKfQoKIAoKCgoKZXh0ZXJuIHVuc2lnbmVkIGludCBwYWdlX2hhc2hfYml0
czsKCgoKZXh0ZXJuIGF0b21pY190IHBhZ2VfY2FjaGVfc2l6ZTsgIApleHRlcm4gc3RydWN0IHBh
Z2UgKipwYWdlX2hhc2hfdGFibGU7CgpleHRlcm4gdm9pZCBwYWdlX2NhY2hlX2luaXQodW5zaWdu
ZWQgbG9uZyk7CgogCgoKCgoKCgoKc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9wYWdlX2hh
c2hmbihzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqIG1hcHBpbmcsIHVuc2lnbmVkIGxvbmcgaW5kZXgp
CnsKCgoJcmV0dXJuICgoICgoKHVuc2lnbmVkIGxvbmcpIG1hcHBpbmcpLyhzaXplb2Yoc3RydWN0
IGlub2RlKSAmIH4gKHNpemVvZihzdHJ1Y3QgaW5vZGUpIC0gMSkpKSAraW5kZXggKSsoKCAoKCh1
bnNpZ25lZCBsb25nKSBtYXBwaW5nKS8oc2l6ZW9mKHN0cnVjdCBpbm9kZSkgJiB+IChzaXplb2Yo
c3RydWN0IGlub2RlKSAtIDEpKSkgK2luZGV4ICk+PiAocGFnZV9oYXNoX2JpdHMpICkpICAmICgo
MSA8PCAocGFnZV9oYXNoX2JpdHMpICkgLTEpOwoKCn0KCgoKZXh0ZXJuIHN0cnVjdCBwYWdlICog
X19maW5kX2dldF9wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAoJCQkJdW5zaWdu
ZWQgbG9uZyBpbmRleCwgc3RydWN0IHBhZ2UgKipoYXNoKTsKCgpleHRlcm4gc3RydWN0IHBhZ2Ug
KiBfX2ZpbmRfbG9ja19wYWdlIChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqIG1hcHBpbmcsCgkJCQl1
bnNpZ25lZCBsb25nIGluZGV4LCBzdHJ1Y3QgcGFnZSAqKmhhc2gpOwpleHRlcm4gc3RydWN0IHBh
Z2UgKiBmaW5kX29yX2NyZWF0ZV9wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAoJ
CQkJdW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgaW50IGdmcF9tYXNrKTsKCmV4dGVybiB2
b2lkICBsb2NrX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpICA7CmV4dGVybiB2b2lkICB1bmxvY2tf
cGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkgIDsKCgpleHRlcm4gc3RydWN0IHBhZ2UgKmZpbmRfdHJ5
bG9ja19wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICosIHVuc2lnbmVkIGxvbmcpOwoKZXh0ZXJu
IHZvaWQgYWRkX3RvX3BhZ2VfY2FjaGUoc3RydWN0IHBhZ2UgKiBwYWdlLCBzdHJ1Y3QgYWRkcmVz
c19zcGFjZSAqbWFwcGluZywgdW5zaWduZWQgbG9uZyBpbmRleCk7CmV4dGVybiB2b2lkIGFkZF90
b19wYWdlX2NhY2hlX2xvY2tlZChzdHJ1Y3QgcGFnZSAqIHBhZ2UsIHN0cnVjdCBhZGRyZXNzX3Nw
YWNlICptYXBwaW5nLCB1bnNpZ25lZCBsb25nIGluZGV4KTsKZXh0ZXJuIGludCBhZGRfdG9fcGFn
ZV9jYWNoZV91bmlxdWUoc3RydWN0IHBhZ2UgKiBwYWdlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAq
bWFwcGluZywgdW5zaWduZWQgbG9uZyBpbmRleCwgc3RydWN0IHBhZ2UgKipoYXNoKTsKCmV4dGVy
biB2b2lkIF9fX3dhaXRfb25fcGFnZShzdHJ1Y3QgcGFnZSAqKTsKCnN0YXRpYyBpbmxpbmUgdm9p
ZCB3YWl0X29uX3BhZ2Uoc3RydWN0IHBhZ2UgKiBwYWdlKQp7CglpZiAoKF9fYnVpbHRpbl9jb25z
dGFudF9wKCAwICApID8gX19jb25zdGFudF90ZXN0X2JpdCgoIDAgICksKCAgJiggcGFnZSApLT5m
bGFncyApKSA6IF9fdGVzdF9iaXQoKCAwICApLCggICYoIHBhZ2UgKS0+ZmxhZ3MgKSkpICApCgkJ
X19fd2FpdF9vbl9wYWdlKHBhZ2UpOwp9CgpleHRlcm4gc3RydWN0IHBhZ2UgKiBncmFiX2NhY2hl
X3BhZ2UgKHN0cnVjdCBhZGRyZXNzX3NwYWNlICosIHVuc2lnbmVkIGxvbmcpOwpleHRlcm4gc3Ry
dWN0IHBhZ2UgKiBncmFiX2NhY2hlX3BhZ2Vfbm93YWl0IChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAq
LCB1bnNpZ25lZCBsb25nKTsKCnR5cGVkZWYgaW50IGZpbGxlcl90KHZvaWQgKiwgc3RydWN0IHBh
Z2UqKTsKCmV4dGVybiBzdHJ1Y3QgcGFnZSAqcmVhZF9jYWNoZV9wYWdlKHN0cnVjdCBhZGRyZXNz
X3NwYWNlICosIHVuc2lnbmVkIGxvbmcsCgkJCQlmaWxsZXJfdCAqLCB2b2lkICopOwoKIyA4ICIv
aG9tZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51
eC9sb2Nrcy5oIiAyCgoKCiAKCgoKZXh0ZXJuIHZvaWQgX193YWl0X29uX2J1ZmZlcihzdHJ1Y3Qg
YnVmZmVyX2hlYWQgKik7CgpzdGF0aWMgaW5saW5lIHZvaWQgd2FpdF9vbl9idWZmZXIoc3RydWN0
IGJ1ZmZlcl9oZWFkICogYmgpCnsKCWlmICgoX19idWlsdGluX2NvbnN0YW50X3AoIEJIX0xvY2sg
KSA/IF9fY29uc3RhbnRfdGVzdF9iaXQoKCBCSF9Mb2NrICksKCAgJmJoLT5iX3N0YXRlICkpIDog
X190ZXN0X2JpdCgoIEJIX0xvY2sgKSwoICAmYmgtPmJfc3RhdGUgKSkpICkKCQlfX3dhaXRfb25f
YnVmZmVyKGJoKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIGxvY2tfYnVmZmVyKHN0cnVjdCBidWZm
ZXJfaGVhZCAqIGJoKQp7Cgl3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChCSF9Mb2NrLCAmYmgtPmJf
c3RhdGUpKQoJCV9fd2FpdF9vbl9idWZmZXIoYmgpOwp9CgpleHRlcm4gdm9pZCAgdW5sb2NrX2J1
ZmZlcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKSAgOwoKIAoKCgoKCnN0YXRpYyBpbmxpbmUgdm9p
ZCBsb2NrX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqIHNiKQp7Cglkb3duKCZzYi0+c19sb2Nr
KTsKfQoKc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sg
KiBzYikKewoJdXAoJnNiLT5zX2xvY2spOwp9CgoKCiMgNiAiL2hvbWUvY2FybG9zL0J1aWxkcy9V
Q0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvZGV2ZnNfZnNfa2VybmVsLmgi
IDIKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIHN0cnVj
dCBkZXZmc19lbnRyeSAqIGRldmZzX2hhbmRsZV90OwoKCgoKCgoKCgojIDEyOSAiL2hvbWUvY2Fy
bG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGludXgvZGV2ZnNf
ZnNfa2VybmVsLmgiCgoKc3RydWN0IHVuaXF1ZV9udW1zcGFjZQp7CiAgICBjaGFyIGR1bW15Owp9
OwoKCgpzdGF0aWMgaW5saW5lIHZvaWQgZGV2ZnNfcHV0IChkZXZmc19oYW5kbGVfdCBkZSkKewog
ICAgcmV0dXJuOwp9CnN0YXRpYyBpbmxpbmUgZGV2ZnNfaGFuZGxlX3QgZGV2ZnNfcmVnaXN0ZXIg
KGRldmZzX2hhbmRsZV90IGRpciwKCQkJCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUsCgkJCQkJICAg
ICB1bnNpZ25lZCBpbnQgZmxhZ3MsCgkJCQkJICAgICB1bnNpZ25lZCBpbnQgbWFqb3IsCgkJCQkJ
ICAgICB1bnNpZ25lZCBpbnQgbWlub3IsCgkJCQkJICAgICB1bW9kZV90IG1vZGUsCgkJCQkJICAg
ICB2b2lkICpvcHMsIHZvaWQgKmluZm8pCnsKICAgIHJldHVybiAoKHZvaWQgKikwKSA7Cn0Kc3Rh
dGljIGlubGluZSB2b2lkIGRldmZzX3VucmVnaXN0ZXIgKGRldmZzX2hhbmRsZV90IGRlKQp7CiAg
ICByZXR1cm47Cn0Kc3RhdGljIGlubGluZSBpbnQgZGV2ZnNfbWtfc3ltbGluayAoZGV2ZnNfaGFu
ZGxlX3QgZGlyLCBjb25zdCBjaGFyICpuYW1lLAoJCQkJICAgIHVuc2lnbmVkIGludCBmbGFncywg
Y29uc3QgY2hhciAqbGluaywKCQkJCSAgICBkZXZmc19oYW5kbGVfdCAqaGFuZGxlLCB2b2lkICpp
bmZvKQp7CiAgICByZXR1cm4gMDsKfQpzdGF0aWMgaW5saW5lIGRldmZzX2hhbmRsZV90IGRldmZz
X21rX2RpciAoZGV2ZnNfaGFuZGxlX3QgZGlyLAoJCQkJCSAgIGNvbnN0IGNoYXIgKm5hbWUsIHZv
aWQgKmluZm8pCnsKICAgIHJldHVybiAoKHZvaWQgKikwKSA7Cn0Kc3RhdGljIGlubGluZSBkZXZm
c19oYW5kbGVfdCBkZXZmc19nZXRfaGFuZGxlIChkZXZmc19oYW5kbGVfdCBkaXIsCgkJCQkJICAg
ICAgIGNvbnN0IGNoYXIgKm5hbWUsCgkJCQkJICAgICAgIHVuc2lnbmVkIGludCBtYWpvciwKCQkJ
CQkgICAgICAgdW5zaWduZWQgaW50IG1pbm9yLAoJCQkJCSAgICAgICBjaGFyIHR5cGUsCgkJCQkJ
ICAgICAgIGludCB0cmF2ZXJzZV9zeW1saW5rcykKewogICAgcmV0dXJuICgodm9pZCAqKTApIDsK
fQpzdGF0aWMgaW5saW5lIGRldmZzX2hhbmRsZV90IGRldmZzX2ZpbmRfaGFuZGxlIChkZXZmc19o
YW5kbGVfdCBkaXIsCgkJCQkJCWNvbnN0IGNoYXIgKm5hbWUsCgkJCQkJCXVuc2lnbmVkIGludCBt
YWpvciwKCQkJCQkJdW5zaWduZWQgaW50IG1pbm9yLAoJCQkJCQljaGFyIHR5cGUsCgkJCQkJCWlu
dCB0cmF2ZXJzZV9zeW1saW5rcykKewogICAgcmV0dXJuICgodm9pZCAqKTApIDsKfQpzdGF0aWMg
aW5saW5lIGludCBkZXZmc19nZXRfZmxhZ3MgKGRldmZzX2hhbmRsZV90IGRlLCB1bnNpZ25lZCBp
bnQgKmZsYWdzKQp7CiAgICByZXR1cm4gMDsKfQpzdGF0aWMgaW5saW5lIGludCBkZXZmc19zZXRf
ZmxhZ3MgKGRldmZzX2hhbmRsZV90IGRlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCnsKICAgIHJldHVy
biAwOwp9CnN0YXRpYyBpbmxpbmUgaW50IGRldmZzX2dldF9tYWpfbWluIChkZXZmc19oYW5kbGVf
dCBkZSwgCgkJCQkgICAgIHVuc2lnbmVkIGludCAqbWFqb3IsIHVuc2lnbmVkIGludCAqbWlub3Ip
CnsKICAgIHJldHVybiAwOwp9CnN0YXRpYyBpbmxpbmUgZGV2ZnNfaGFuZGxlX3QgZGV2ZnNfZ2V0
X2hhbmRsZV9mcm9tX2lub2RlIChzdHJ1Y3QgaW5vZGUgKmlub2RlKQp7CiAgICByZXR1cm4gKCh2
b2lkICopMCkgOwp9CnN0YXRpYyBpbmxpbmUgaW50IGRldmZzX2dlbmVyYXRlX3BhdGggKGRldmZz
X2hhbmRsZV90IGRlLCBjaGFyICpwYXRoLAoJCQkJICAgICAgIGludCBidWZsZW4pCnsKICAgIHJl
dHVybiAtIDM4IDsKfQpzdGF0aWMgaW5saW5lIHZvaWQgKmRldmZzX2dldF9vcHMgKGRldmZzX2hh
bmRsZV90IGRlKQp7CiAgICByZXR1cm4gKCh2b2lkICopMCkgOwp9CnN0YXRpYyBpbmxpbmUgdm9p
ZCBkZXZmc19wdXRfb3BzIChkZXZmc19oYW5kbGVfdCBkZSkKewogICAgcmV0dXJuOwp9CnN0YXRp
YyBpbmxpbmUgaW50IGRldmZzX3NldF9maWxlX3NpemUgKGRldmZzX2hhbmRsZV90IGRlLCB1bnNp
Z25lZCBsb25nIHNpemUpCnsKICAgIHJldHVybiAtIDM4IDsKfQpzdGF0aWMgaW5saW5lIHZvaWQg
KmRldmZzX2dldF9pbmZvIChkZXZmc19oYW5kbGVfdCBkZSkKewogICAgcmV0dXJuICgodm9pZCAq
KTApIDsKfQpzdGF0aWMgaW5saW5lIGludCBkZXZmc19zZXRfaW5mbyAoZGV2ZnNfaGFuZGxlX3Qg
ZGUsIHZvaWQgKmluZm8pCnsKICAgIHJldHVybiAwOwp9CnN0YXRpYyBpbmxpbmUgZGV2ZnNfaGFu
ZGxlX3QgZGV2ZnNfZ2V0X3BhcmVudCAoZGV2ZnNfaGFuZGxlX3QgZGUpCnsKICAgIHJldHVybiAo
KHZvaWQgKikwKSA7Cn0Kc3RhdGljIGlubGluZSBkZXZmc19oYW5kbGVfdCBkZXZmc19nZXRfZmly
c3RfY2hpbGQgKGRldmZzX2hhbmRsZV90IGRlKQp7CiAgICByZXR1cm4gKCh2b2lkICopMCkgOwp9
CnN0YXRpYyBpbmxpbmUgZGV2ZnNfaGFuZGxlX3QgZGV2ZnNfZ2V0X25leHRfc2libGluZyAoZGV2
ZnNfaGFuZGxlX3QgZGUpCnsKICAgIHJldHVybiAoKHZvaWQgKikwKSA7Cn0Kc3RhdGljIGlubGlu
ZSB2b2lkIGRldmZzX2F1dG9fdW5yZWdpc3RlciAoZGV2ZnNfaGFuZGxlX3QgbWFzdGVyLAoJCQkJ
CSAgZGV2ZnNfaGFuZGxlX3Qgc2xhdmUpCnsKICAgIHJldHVybjsKfQpzdGF0aWMgaW5saW5lIGRl
dmZzX2hhbmRsZV90IGRldmZzX2dldF91bnJlZ2lzdGVyX3NsYXZlIChkZXZmc19oYW5kbGVfdCBt
YXN0ZXIpCnsKICAgIHJldHVybiAoKHZvaWQgKikwKSA7Cn0Kc3RhdGljIGlubGluZSBjb25zdCBj
aGFyICpkZXZmc19nZXRfbmFtZSAoZGV2ZnNfaGFuZGxlX3QgZGUsCgkJCQkJICB1bnNpZ25lZCBp
bnQgKm5hbWVsZW4pCnsKICAgIHJldHVybiAoKHZvaWQgKikwKSA7Cn0Kc3RhdGljIGlubGluZSBp
bnQgZGV2ZnNfcmVnaXN0ZXJfY2hyZGV2ICh1bnNpZ25lZCBpbnQgbWFqb3IsIGNvbnN0IGNoYXIg
Km5hbWUsCgkJCQkJIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHMpCnsKICAgIHJldHVybiBy
ZWdpc3Rlcl9jaHJkZXYgKG1ham9yLCBuYW1lLCBmb3BzKTsKfQpzdGF0aWMgaW5saW5lIGludCBk
ZXZmc19yZWdpc3Rlcl9ibGtkZXYgKHVuc2lnbmVkIGludCBtYWpvciwgY29uc3QgY2hhciAqbmFt
ZSwKCQkJCQkgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zICpiZG9wcykKewogICAgcmV0
dXJuIHJlZ2lzdGVyX2Jsa2RldiAobWFqb3IsIG5hbWUsIGJkb3BzKTsKfQpzdGF0aWMgaW5saW5l
IGludCBkZXZmc191bnJlZ2lzdGVyX2NocmRldiAodW5zaWduZWQgaW50IG1ham9yLGNvbnN0IGNo
YXIgKm5hbWUpCnsKICAgIHJldHVybiB1bnJlZ2lzdGVyX2NocmRldiAobWFqb3IsIG5hbWUpOwp9
CnN0YXRpYyBpbmxpbmUgaW50IGRldmZzX3VucmVnaXN0ZXJfYmxrZGV2ICh1bnNpZ25lZCBpbnQg
bWFqb3IsY29uc3QgY2hhciAqbmFtZSkKewogICAgcmV0dXJuIHVucmVnaXN0ZXJfYmxrZGV2ICht
YWpvciwgbmFtZSk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBkZXZmc19yZWdpc3Rlcl90YXBlIChk
ZXZmc19oYW5kbGVfdCBkZSkKewogICAgcmV0dXJuOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgZGV2
ZnNfcmVnaXN0ZXJfc2VyaWVzIChkZXZmc19oYW5kbGVfdCBkaXIsCgkJCQkJICBjb25zdCBjaGFy
ICpmb3JtYXQsCgkJCQkJICB1bnNpZ25lZCBpbnQgbnVtX2VudHJpZXMsCgkJCQkJICB1bnNpZ25l
ZCBpbnQgZmxhZ3MsCgkJCQkJICB1bnNpZ25lZCBpbnQgbWFqb3IsCgkJCQkJICB1bnNpZ25lZCBp
bnQgbWlub3Jfc3RhcnQsCgkJCQkJICB1bW9kZV90IG1vZGUsIHZvaWQgKm9wcywgdm9pZCAqaW5m
bykKewogICAgcmV0dXJuOwp9CgpzdGF0aWMgaW5saW5lIGludCBkZXZmc19hbGxvY19tYWpvciAo
Y2hhciB0eXBlKQp7CiAgICByZXR1cm4gLTE7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBkZXZmc19k
ZWFsbG9jX21ham9yIChjaGFyIHR5cGUsIGludCBtYWpvcikKewogICAgcmV0dXJuOwp9CgpzdGF0
aWMgaW5saW5lIGtkZXZfdCBkZXZmc19hbGxvY19kZXZudW0gKGNoYXIgdHlwZSkKewogICAgcmV0
dXJuIDAgOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgZGV2ZnNfZGVhbGxvY19kZXZudW0gKGNoYXIg
dHlwZSwga2Rldl90IGRldm51bSkKewogICAgcmV0dXJuOwp9CgpzdGF0aWMgaW5saW5lIGludCBk
ZXZmc19hbGxvY191bmlxdWVfbnVtYmVyIChzdHJ1Y3QgdW5pcXVlX251bXNwYWNlICpzcGFjZSkK
ewogICAgcmV0dXJuIC0xOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgZGV2ZnNfZGVhbGxvY191bmlx
dWVfbnVtYmVyIChzdHJ1Y3QgdW5pcXVlX251bXNwYWNlICpzcGFjZSwKCQkJCQkJaW50IG51bWJl
cikKewogICAgcmV0dXJuOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgbW91bnRfZGV2ZnNfZnMgKHZv
aWQpCnsKICAgIHJldHVybjsKfQpzdGF0aWMgaW5saW5lIHZvaWQgZGV2ZnNfbWFrZV9yb290IChj
b25zdCBjaGFyICpuYW1lKQp7CiAgICByZXR1cm47Cn0KCgoKIyAyNTQgIi9ob21lL2Nhcmxvcy9C
dWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2xpbnV4L2ZiLmgiIDIKCgoK
c3RydWN0IGZiX2luZm87CnN0cnVjdCBmYl9pbmZvX2dlbjsKc3RydWN0IHZtX2FyZWFfc3RydWN0
OwpzdHJ1Y3QgZmlsZTsKICAKICAgICAKCgoKc3RydWN0IGZiX29wcyB7CiAgICAgCiAgICBzdHJ1
Y3QgbW9kdWxlICpvd25lcjsKICAgIGludCAoKmZiX29wZW4pKHN0cnVjdCBmYl9pbmZvICppbmZv
LCBpbnQgdXNlcik7CiAgICBpbnQgKCpmYl9yZWxlYXNlKShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywg
aW50IHVzZXIpOwogICAgIAogICAgaW50ICgqZmJfZ2V0X2ZpeCkoc3RydWN0IGZiX2ZpeF9zY3Jl
ZW5pbmZvICpmaXgsIGludCBjb24sCgkJICAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pOyAKICAg
ICAKICAgIGludCAoKmZiX2dldF92YXIpKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBp
bnQgY29uLAoJCSAgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKTsJCQogICAgIAogICAgaW50ICgq
ZmJfc2V0X3Zhcikoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsIGludCBjb24sCgkJICAg
ICAgc3RydWN0IGZiX2luZm8gKmluZm8pOwkJCiAgICAgCiAgICBpbnQgKCpmYl9nZXRfY21hcCko
c3RydWN0IGZiX2NtYXAgKmNtYXAsIGludCBrc3BjLCBpbnQgY29uLAoJCSAgICAgICBzdHJ1Y3Qg
ZmJfaW5mbyAqaW5mbyk7CiAgICAgCiAgICBpbnQgKCpmYl9zZXRfY21hcCkoc3RydWN0IGZiX2Nt
YXAgKmNtYXAsIGludCBrc3BjLCBpbnQgY29uLAoJCSAgICAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5m
byk7CiAgICAgCiAgICBpbnQgKCpmYl9wYW5fZGlzcGxheSkoc3RydWN0IGZiX3Zhcl9zY3JlZW5p
bmZvICp2YXIsIGludCBjb24sCgkJCSAgc3RydWN0IGZiX2luZm8gKmluZm8pOwogICAgIAogICAg
aW50ICgqZmJfaW9jdGwpKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1
bnNpZ25lZCBpbnQgY21kLAoJCSAgICB1bnNpZ25lZCBsb25nIGFyZywgaW50IGNvbiwgc3RydWN0
IGZiX2luZm8gKmluZm8pOwogICAgIAogICAgaW50ICgqZmJfbW1hcCkoc3RydWN0IGZiX2luZm8g
KmluZm8sIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CiAg
ICAgCiAgICBpbnQgKCpmYl9yYXN0ZXJpbWcpKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgc3Rh
cnQpOwp9OwoKc3RydWN0IGZiX2luZm8gewogICBjaGFyIG1vZGVuYW1lWzQwXTsJCQkgCiAgIGtk
ZXZfdCBub2RlOwogICBpbnQgZmxhZ3M7CiAgIGludCBvcGVuOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCgogICBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gdmFyOyAgICAgICAgIAogICBz
dHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gZml4OyAgICAgICAgIAogICBzdHJ1Y3QgZmJfbW9uc3Bl
Y3MgbW9uc3BlY3M7ICAgICAgICAgIAogICBzdHJ1Y3QgZmJfY21hcCBjbWFwOyAgICAgICAgICAg
ICAgICAgIAogICBzdHJ1Y3QgZmJfb3BzICpmYm9wczsKICAgY2hhciAqc2NyZWVuX2Jhc2U7ICAg
ICAgICAgICAgICAgICAgICAKICAgc3RydWN0IGRpc3BsYXkgKmRpc3A7CQkgCiAgIHN0cnVjdCB2
Y19kYXRhICpkaXNwbGF5X2ZnOwkJIAogICBjaGFyIGZvbnRuYW1lWzQwXTsJCQkgCiAgIGRldmZz
X2hhbmRsZV90IGRldmZzX2hhbmRsZTsgICAgICAgICAgCiAgIGRldmZzX2hhbmRsZV90IGRldmZz
X2xoYW5kbGU7ICAgICAgICAgCiAgIGludCAoKmNoYW5nZXZhcikoaW50KTsJCSAKICAgaW50ICgq
c3dpdGNoX2NvbikoaW50LCBzdHJ1Y3QgZmJfaW5mbyopOwoJCQkJCSAKICAgaW50ICgqdXBkYXRl
dmFyKShpbnQsIHN0cnVjdCBmYl9pbmZvKik7CgkJCQkJIAogICB2b2lkICgqYmxhbmspKGludCwg
c3RydWN0IGZiX2luZm8qKTsJIAoJCQkJCSAKCQkJCQkgCiAgIHZvaWQgKnBzZXVkb19wYWxldHRl
OyAgICAgICAgICAgICAgICAgCgoKICAgIAogICB2b2lkICpwYXI7CQp9OwoKCgoKCgoKICAgICAK
CgoKCgpzdHJ1Y3QgZmJnZW5faHdzd2l0Y2ggewogICAgdm9pZCAoKmRldGVjdCkodm9pZCk7CiAg
ICBpbnQgKCplbmNvZGVfZml4KShzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gKmZpeCwgY29uc3Qg
dm9pZCAqcGFyLAoJCSAgICAgIHN0cnVjdCBmYl9pbmZvX2dlbiAqaW5mbyk7CiAgICBpbnQgKCpk
ZWNvZGVfdmFyKShjb25zdCBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwgdm9pZCAqcGFy
LAoJCSAgICAgIHN0cnVjdCBmYl9pbmZvX2dlbiAqaW5mbyk7CiAgICBpbnQgKCplbmNvZGVfdmFy
KShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwgY29uc3Qgdm9pZCAqcGFyLAoJCSAgICAg
IHN0cnVjdCBmYl9pbmZvX2dlbiAqaW5mbyk7CiAgICB2b2lkICgqZ2V0X3Bhcikodm9pZCAqcGFy
LCBzdHJ1Y3QgZmJfaW5mb19nZW4gKmluZm8pOwogICAgdm9pZCAoKnNldF9wYXIpKGNvbnN0IHZv
aWQgKnBhciwgc3RydWN0IGZiX2luZm9fZ2VuICppbmZvKTsKICAgIGludCAoKmdldGNvbHJlZyko
dW5zaWduZWQgcmVnbm8sIHVuc2lnbmVkICpyZWQsIHVuc2lnbmVkICpncmVlbiwKCQkgICAgIHVu
c2lnbmVkICpibHVlLCB1bnNpZ25lZCAqdHJhbnNwLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CiAg
ICBpbnQgKCpzZXRjb2xyZWcpKHVuc2lnbmVkIHJlZ25vLCB1bnNpZ25lZCByZWQsIHVuc2lnbmVk
IGdyZWVuLAoJCSAgICAgdW5zaWduZWQgYmx1ZSwgdW5zaWduZWQgdHJhbnNwLCBzdHJ1Y3QgZmJf
aW5mbyAqaW5mbyk7CiAgICBpbnQgKCpwYW5fZGlzcGxheSkoY29uc3Qgc3RydWN0IGZiX3Zhcl9z
Y3JlZW5pbmZvICp2YXIsCgkJICAgICAgIHN0cnVjdCBmYl9pbmZvX2dlbiAqaW5mbyk7CiAgICBp
bnQgKCpibGFuaykoaW50IGJsYW5rX21vZGUsIHN0cnVjdCBmYl9pbmZvX2dlbiAqaW5mbyk7CiAg
ICB2b2lkICgqc2V0X2Rpc3ApKGNvbnN0IHZvaWQgKnBhciwgc3RydWN0IGRpc3BsYXkgKmRpc3As
CgkJICAgICBzdHJ1Y3QgZmJfaW5mb19nZW4gKmluZm8pOwp9OwoKc3RydWN0IGZiX2luZm9fZ2Vu
IHsKICAgIHN0cnVjdCBmYl9pbmZvIGluZm87CgogICAgIAogICAgIAogICAgdV9pbnQgcGFyc2l6
ZTsKICAgIHN0cnVjdCBmYmdlbl9od3N3aXRjaCAqZmJodzsKCiAgICAKfTsKCiAgICAgCgoKCmV4
dGVybiBpbnQgZmJnZW5fZ2V0X2ZpeChzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gKmZpeCwgaW50
IGNvbiwKCQkJIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKZXh0ZXJuIGludCBmYmdlbl9nZXRfdmFy
KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBpbnQgY29uLAoJCQkgc3RydWN0IGZiX2lu
Zm8gKmluZm8pOwpleHRlcm4gaW50IGZiZ2VuX3NldF92YXIoc3RydWN0IGZiX3Zhcl9zY3JlZW5p
bmZvICp2YXIsIGludCBjb24sCgkJCSBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CmV4dGVybiBpbnQg
ZmJnZW5fZ2V0X2NtYXAoc3RydWN0IGZiX2NtYXAgKmNtYXAsIGludCBrc3BjLCBpbnQgY29uLAoJ
CQkgIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKZXh0ZXJuIGludCBmYmdlbl9zZXRfY21hcChzdHJ1
Y3QgZmJfY21hcCAqY21hcCwgaW50IGtzcGMsIGludCBjb24sCgkJCSAgc3RydWN0IGZiX2luZm8g
KmluZm8pOwpleHRlcm4gaW50IGZiZ2VuX3Bhbl9kaXNwbGF5KHN0cnVjdCBmYl92YXJfc2NyZWVu
aW5mbyAqdmFyLCBpbnQgY29uLAoJCQkgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKCiAgICAg
CgoKCmV4dGVybiBpbnQgZmJnZW5fZG9fc2V0X3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8g
KnZhciwgaW50IGlzYWN0aXZlLAoJCQkgICAgc3RydWN0IGZiX2luZm9fZ2VuICppbmZvKTsKZXh0
ZXJuIHZvaWQgZmJnZW5fc2V0X2Rpc3AoaW50IGNvbiwgc3RydWN0IGZiX2luZm9fZ2VuICppbmZv
KTsKZXh0ZXJuIHZvaWQgZmJnZW5faW5zdGFsbF9jbWFwKGludCBjb24sIHN0cnVjdCBmYl9pbmZv
X2dlbiAqaW5mbyk7CmV4dGVybiBpbnQgZmJnZW5fdXBkYXRlX3ZhcihpbnQgY29uLCBzdHJ1Y3Qg
ZmJfaW5mbyAqaW5mbyk7CmV4dGVybiBpbnQgZmJnZW5fc3dpdGNoKGludCBjb24sIHN0cnVjdCBm
Yl9pbmZvICppbmZvKTsKZXh0ZXJuIHZvaWQgZmJnZW5fYmxhbmsoaW50IGJsYW5rLCBzdHJ1Y3Qg
ZmJfaW5mbyAqaW5mbyk7CgoKIApleHRlcm4gaW50IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKHN0cnVj
dCBmYl9pbmZvICpmYl9pbmZvKTsKZXh0ZXJuIGludCB1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKHN0
cnVjdCBmYl9pbmZvICpmYl9pbmZvKTsKCmV4dGVybiBpbnQgbnVtX3JlZ2lzdGVyZWRfZmI7CmV4
dGVybiBzdHJ1Y3QgZmJfaW5mbyAqcmVnaXN0ZXJlZF9mYlszMiBdOwoKIApleHRlcm4gaW50IGZi
bW9uX3ZhbGlkX3RpbWluZ3ModV9pbnQgcGl4Y2xvY2ssIHVfaW50IGh0b3RhbCwgdV9pbnQgdnRv
dGFsLAoJCQkgICAgICAgY29uc3Qgc3RydWN0IGZiX2luZm8gKmZiX2luZm8pOwpleHRlcm4gaW50
IGZibW9uX2RwbXMoY29uc3Qgc3RydWN0IGZiX2luZm8gKmZiX2luZm8pOwoKIApleHRlcm4gaW50
IGZiX2FsbG9jX2NtYXAoc3RydWN0IGZiX2NtYXAgKmNtYXAsIGludCBsZW4sIGludCB0cmFuc3Ap
OwpleHRlcm4gdm9pZCBmYl9jb3B5X2NtYXAoc3RydWN0IGZiX2NtYXAgKmZyb20sIHN0cnVjdCBm
Yl9jbWFwICp0bywKCQkJIGludCBmc2Zyb210byk7CmV4dGVybiBpbnQgZmJfZ2V0X2NtYXAoc3Ry
dWN0IGZiX2NtYXAgKmNtYXAsIGludCBrc3BjLAoJCSAgICAgICBpbnQgKCpnZXRjb2xyZWcpKHVf
aW50LCB1X2ludCAqLCB1X2ludCAqLCB1X2ludCAqLAoJCQkJCXVfaW50ICosIHN0cnVjdCBmYl9p
bmZvICopLAoJCSAgICAgICBzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyk7CmV4dGVybiBpbnQgZmJf
c2V0X2NtYXAoc3RydWN0IGZiX2NtYXAgKmNtYXAsIGludCBrc3BjLAoJCSAgICAgICBpbnQgKCpz
ZXRjb2xyZWcpKHVfaW50LCB1X2ludCwgdV9pbnQsIHVfaW50LCB1X2ludCwKCQkJCQlzdHJ1Y3Qg
ZmJfaW5mbyAqKSwKCQkgICAgICAgc3RydWN0IGZiX2luZm8gKmZiX2luZm8pOwpleHRlcm4gc3Ry
dWN0IGZiX2NtYXAgKmZiX2RlZmF1bHRfY21hcChpbnQgbGVuKTsKZXh0ZXJuIHZvaWQgZmJfaW52
ZXJ0X2NtYXBzKHZvaWQpOwoKc3RydWN0IGZiX3ZpZGVvbW9kZSB7CiAgICBjb25zdCBjaGFyICpu
YW1lOwkgCiAgICB1MzIgcmVmcmVzaDsJIAogICAgdTMyIHhyZXM7CiAgICB1MzIgeXJlczsKICAg
IHUzMiBwaXhjbG9jazsKICAgIHUzMiBsZWZ0X21hcmdpbjsKICAgIHUzMiByaWdodF9tYXJnaW47
CiAgICB1MzIgdXBwZXJfbWFyZ2luOwogICAgdTMyIGxvd2VyX21hcmdpbjsKICAgIHUzMiBoc3lu
Y19sZW47CiAgICB1MzIgdnN5bmNfbGVuOwogICAgdTMyIHN5bmM7CiAgICB1MzIgdm1vZGU7Cn07
CgojIDQ3NCAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2lu
Y2x1ZGUvbGludXgvZmIuaCIKCmV4dGVybiBpbnQgX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9f
ICgiLnRleHQuaW5pdCIpKSkgIGZiX2ZpbmRfbW9kZShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8g
KnZhciwKCQkJICAgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBjaGFyICptb2RlX29w
dGlvbiwKCQkJICAgICAgIGNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgKmRiLAoJCQkgICAgICAg
dW5zaWduZWQgaW50IGRic2l6ZSwKCQkJICAgICAgIGNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUg
KmRlZmF1bHRfbW9kZSwKCQkJICAgICAgIHVuc2lnbmVkIGludCBkZWZhdWx0X2JwcCk7CgoKCgoK
CgoKCgoKCgoKICAgIAoKCgoKCgoKCgoKc3RydWN0IGZiX2ZpeF9jdXJzb3JpbmZvIHsKCV9fdTE2
IGNyc3Jfd2lkdGg7CQkgCglfX3UxNiBjcnNyX2hlaWdodDsJCSAKCV9fdTE2IGNyc3JfeHNpemU7
CQkgCglfX3UxNiBjcnNyX3lzaXplOwoJX191MTYgY3Jzcl9jb2xvcjE7CQkgCglfX3UxNiBjcnNy
X2NvbG9yMjsJCSAKfTsKCnN0cnVjdCBmYl92YXJfY3Vyc29yaW5mbyB7CglfX3UxNiB3aWR0aDsK
CV9fdTE2IGhlaWdodDsKCV9fdTE2IHhzcG90OwoJX191MTYgeXNwb3Q7CglfX3U4IGRhdGFbMV07
CQkJIAp9OwoKc3RydWN0IGZiX2N1cnNvcnN0YXRlIHsKCV9fczE2IHhvZmZzZXQ7CglfX3MxNiB5
b2Zmc2V0OwoJX191MTYgbW9kZTsKfTsKCgoKCgoKCgojIDE2ICJkcml2ZXJzL3ZpZGVvL2ZiY29u
LWNmYjE2LmMiIDIKCiMgMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4
LTIuNC54L2luY2x1ZGUvYXNtL2lvLmgiIDEKCgoKCgoKCgogCgoKCgoKCgoKCiAKCgoKIAoKCnN0
YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgX3N3YXB3KHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0
IHYpCnsKICAgIHJldHVybiAoKHYgPDwgOCkgfCAodiA+PiA4KSk7Cn0KCnN0YXRpYyBpbmxpbmUg
dW5zaWduZWQgaW50IF9zd2FwbCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHYpCnsKICAgIHJldHVy
biAoKHYgPDwgMjQpIHwgKCh2ICYgMHhmZjAwKSA8PCA4KSB8ICgodiAmIDB4ZmYwMDAwKSA+PiA4
KSB8ICh2ID4+IDI0KSk7Cn0KCgoKCgoKCgoKCgoKc3RhdGljIGlubGluZSB2b2lkIGlvX291dHNi
KHVuc2lnbmVkIGludCBhZGRyLCB2b2lkICpidWYsIGludCBsZW4pCnsKCXZvbGF0aWxlIHVuc2ln
bmVkIGNoYXIgKmFwID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgYWRkcjsKCXVuc2lnbmVk
IGNoYXIgKmJwID0gKHVuc2lnbmVkIGNoYXIgKikgYnVmOwoJd2hpbGUgKGxlbi0tKQoJCSphcCA9
ICpicCsrOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgaW9fb3V0c3codW5zaWduZWQgaW50IGFkZHIs
IHZvaWQgKmJ1ZiwgaW50IGxlbikKewoJdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKmFwID0gKHZv
bGF0aWxlIHVuc2lnbmVkIHNob3J0ICopIGFkZHI7Cgl1bnNpZ25lZCBzaG9ydCAqYnAgPSAodW5z
aWduZWQgc2hvcnQgKikgYnVmOwoJd2hpbGUgKGxlbi0tKQoJCSphcCA9IF9zd2FwdygqYnArKyk7
Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBpb19vdXRzbCh1bnNpZ25lZCBpbnQgYWRkciwgdm9pZCAq
YnVmLCBpbnQgbGVuKQp7Cgl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmFwID0gKHZvbGF0aWxlIHVu
c2lnbmVkIGludCAqKSBhZGRyOwoJdW5zaWduZWQgaW50ICpicCA9ICh1bnNpZ25lZCBpbnQgKikg
YnVmOwoJd2hpbGUgKGxlbi0tKQoJCSphcCA9IF9zd2FwbCgqYnArKyk7Cn0KCnN0YXRpYyBpbmxp
bmUgdm9pZCBpb19pbnNiKHVuc2lnbmVkIGludCBhZGRyLCB2b2lkICpidWYsIGludCBsZW4pCnsK
CXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKmFwID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikg
YWRkcjsKCXVuc2lnbmVkIGNoYXIgKmJwID0gKHVuc2lnbmVkIGNoYXIgKikgYnVmOwoJd2hpbGUg
KGxlbi0tKQoJCSpicCsrID0gKmFwOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgaW9faW5zdyh1bnNp
Z25lZCBpbnQgYWRkciwgdm9pZCAqYnVmLCBpbnQgbGVuKQp7Cgl2b2xhdGlsZSB1bnNpZ25lZCBz
aG9ydCAqYXAgPSAodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgYWRkcjsKCXVuc2lnbmVkIHNo
b3J0ICpicCA9ICh1bnNpZ25lZCBzaG9ydCAqKSBidWY7Cgl3aGlsZSAobGVuLS0pCgkJKmJwKysg
PSBfc3dhcHcoKmFwKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIGlvX2luc2wodW5zaWduZWQgaW50
IGFkZHIsIHZvaWQgKmJ1ZiwgaW50IGxlbikKewoJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphcCA9
ICh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgYWRkcjsKCXVuc2lnbmVkIGludCAqYnAgPSAodW5z
aWduZWQgaW50ICopIGJ1ZjsKCXdoaWxlIChsZW4tLSkKCQkqYnArKyA9IF9zd2FwbCgqYXApOwp9
CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgpleHRlcm4gdm9pZCAq
X19pb3JlbWFwKHVuc2lnbmVkIGxvbmcgcGh5c2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50
IGNhY2hlZmxhZyk7CmV4dGVybiB2b2lkIF9faW91bm1hcCh2b2lkICphZGRyLCB1bnNpZ25lZCBs
b25nIHNpemUpOwoKZXh0ZXJuIGlubGluZSB2b2lkICppb3JlbWFwKHVuc2lnbmVkIGxvbmcgcGh5
c2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKewoJcmV0dXJuIF9faW9yZW1hcChwaHlzYWRkciwg
c2l6ZSwgMSApOwp9CmV4dGVybiBpbmxpbmUgdm9pZCAqaW9yZW1hcF9ub2NhY2hlKHVuc2lnbmVk
IGxvbmcgcGh5c2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKewoJcmV0dXJuIF9faW9yZW1hcChw
aHlzYWRkciwgc2l6ZSwgMSApOwp9CmV4dGVybiBpbmxpbmUgdm9pZCAqaW9yZW1hcF93cml0ZXRo
cm91Z2godW5zaWduZWQgbG9uZyBwaHlzYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQp7CglyZXR1
cm4gX19pb3JlbWFwKHBoeXNhZGRyLCBzaXplLCAzICk7Cn0KZXh0ZXJuIGlubGluZSB2b2lkICpp
b3JlbWFwX2Z1bGxjYWNoZSh1bnNpZ25lZCBsb25nIHBoeXNhZGRyLCB1bnNpZ25lZCBsb25nIHNp
emUpCnsKCXJldHVybiBfX2lvcmVtYXAocGh5c2FkZHIsIHNpemUsIDAgKTsKfQoKZXh0ZXJuIHZv
aWQgaW91bm1hcCh2b2lkICphZGRyKTsKCiAKCgoKCgoKCgojIDE3ICJkcml2ZXJzL3ZpZGVvL2Zi
Y29uLWNmYjE2LmMiIDIKCgojIDEgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNs
aW51eC0yLjQueC9pbmNsdWRlL3ZpZGVvL2ZiY29uLmgiIDEKIAoKCgoKCgoKCgoKCgoKCiMgMSAi
L2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvbGlu
dXgvY29uc29sZV9zdHJ1Y3QuaCIgMQogCgoKCgoKCgoKCgoKCgoKc3RydWN0IHZjX2RhdGEgewoJ
dW5zaWduZWQgc2hvcnQJdmNfbnVtOwkJCSAKCXVuc2lnbmVkIGludAl2Y19jb2xzOwkJIAoJdW5z
aWduZWQgaW50CXZjX3Jvd3M7Cgl1bnNpZ25lZCBpbnQJdmNfc2l6ZV9yb3c7CQkgCgljb25zdCBz
dHJ1Y3QgY29uc3cgKnZjX3N3OwoJdW5zaWduZWQgc2hvcnQJKnZjX3NjcmVlbmJ1ZjsJCSAKCXVu
c2lnbmVkIGludAl2Y19zY3JlZW5idWZfc2l6ZTsKCXVuc2lnbmVkIGNoYXIJdmNfYXR0cjsJCSAK
CXVuc2lnbmVkIGNoYXIJdmNfZGVmX2NvbG9yOwkJIAoJdW5zaWduZWQgY2hhcgl2Y19jb2xvcjsJ
CSAKCXVuc2lnbmVkIGNoYXIJdmNfc19jb2xvcjsJCSAKCXVuc2lnbmVkIGNoYXIJdmNfdWxjb2xv
cjsJCSAKCXVuc2lnbmVkIGNoYXIJdmNfaGFsZmNvbG9yOwkJIAoJdW5zaWduZWQgc2hvcnQJdmNf
Y29tcGxlbWVudF9tYXNrOwkgCgl1bnNpZ25lZCBzaG9ydAl2Y19oaV9mb250X21hc2s7CSAKCXVu
c2lnbmVkIHNob3J0CXZjX3ZpZGVvX2VyYXNlX2NoYXI7CSAKCXVuc2lnbmVkIHNob3J0CXZjX3Nf
Y29tcGxlbWVudF9tYXNrOwkgCgl1bnNpZ25lZCBpbnQJdmNfeCwgdmNfeTsJCSAKCXVuc2lnbmVk
IGludAl2Y190b3AsIHZjX2JvdHRvbTsJIAoKCgoJdW5zaWduZWQgaW50CXZjX3N0YXRlOwkJIAoK
CXVuc2lnbmVkIGludAl2Y19ucGFyLHZjX3BhclsxNiBdOwkgCgl1bnNpZ25lZCBsb25nCXZjX29y
aWdpbjsJCSAKCXVuc2lnbmVkIGxvbmcJdmNfc2NyX2VuZDsJCSAKCXVuc2lnbmVkIGxvbmcJdmNf
dmlzaWJsZV9vcmlnaW47CSAKCXVuc2lnbmVkIGxvbmcJdmNfcG9zOwkJCSAKCXVuc2lnbmVkIGlu
dAl2Y19zYXZlZF94OwoJdW5zaWduZWQgaW50CXZjX3NhdmVkX3k7CgkgCgl1bnNpZ25lZCBpbnQJ
dmNfY2hhcnNldAk6IDE7CSAKCXVuc2lnbmVkIGludAl2Y19zX2NoYXJzZXQJOiAxOwkgCgl1bnNp
Z25lZCBpbnQJdmNfZGlzcF9jdHJsCTogMTsJIAoJdW5zaWduZWQgaW50CXZjX3RvZ2dsZV9tZXRh
CTogMTsJIAoJdW5zaWduZWQgaW50CXZjX2RlY3Njbm0JOiAxOwkgCgl1bnNpZ25lZCBpbnQJdmNf
ZGVjb20JOiAxOwkgCgl1bnNpZ25lZCBpbnQJdmNfZGVjYXdtCTogMTsJIAoJdW5zaWduZWQgaW50
CXZjX2RlY2NtCTogMTsJIAoJdW5zaWduZWQgaW50CXZjX2RlY2ltCTogMTsJIAoJdW5zaWduZWQg
aW50CXZjX2RlY2NvbG0JOiAxOwkgCgkgCgl1bnNpZ25lZCBpbnQJdmNfaW50ZW5zaXR5CTogMjsJ
IAoJdW5zaWduZWQgaW50CXZjX3VuZGVybGluZQk6IDE7Cgl1bnNpZ25lZCBpbnQJdmNfYmxpbmsJ
OiAxOwoJdW5zaWduZWQgaW50CXZjX3JldmVyc2UJOiAxOwoJdW5zaWduZWQgaW50CXZjX3NfaW50
ZW5zaXR5CTogMjsJIAoJdW5zaWduZWQgaW50CXZjX3NfdW5kZXJsaW5lCTogMTsKCXVuc2lnbmVk
IGludAl2Y19zX2JsaW5rCTogMTsKCXVuc2lnbmVkIGludAl2Y19zX3JldmVyc2UJOiAxOwoJIAoJ
dW5zaWduZWQgaW50CXZjX3F1ZXMJCTogMTsKCXVuc2lnbmVkIGludAl2Y19uZWVkX3dyYXAJOiAx
OwoJdW5zaWduZWQgaW50CXZjX2Nhbl9kb19jb2xvcgk6IDE7Cgl1bnNpZ25lZCBpbnQJdmNfcmVw
b3J0X21vdXNlIDogMjsKCXVuc2lnbmVkIGludAl2Y19rbWFsbG9jZWQJOiAxOwoJdW5zaWduZWQg
Y2hhcgl2Y191dGYJCTogMTsJIAoJdW5zaWduZWQgY2hhcgl2Y191dGZfY291bnQ7CgkJIGludAl2
Y191dGZfY2hhcjsKCXVuc2lnbmVkIGludAl2Y190YWJfc3RvcFs4XTsJCSAKCXVuc2lnbmVkIGNo
YXIgICB2Y19wYWxldHRlWzE2KjNdOyAgICAgICAgCgl1bnNpZ25lZCBzaG9ydCAqIHZjX3RyYW5z
bGF0ZTsKCXVuc2lnbmVkIGNoYXIgCXZjX0cwX2NoYXJzZXQ7Cgl1bnNpZ25lZCBjaGFyIAl2Y19H
MV9jaGFyc2V0OwoJdW5zaWduZWQgY2hhciAJdmNfc2F2ZWRfRzA7Cgl1bnNpZ25lZCBjaGFyIAl2
Y19zYXZlZF9HMTsKCXVuc2lnbmVkIGludAl2Y19iZWxsX3BpdGNoOwkJIAoJdW5zaWduZWQgaW50
CXZjX2JlbGxfZHVyYXRpb247CSAKCXVuc2lnbmVkIGludAl2Y19jdXJzb3JfdHlwZTsKCXN0cnVj
dCB2Y19kYXRhICoqdmNfZGlzcGxheV9mZzsJCSAKCXVuc2lnbmVkIGxvbmcJdmNfdW5pX3BhZ2Vk
aXI7Cgl1bnNpZ25lZCBsb25nCSp2Y191bmlfcGFnZWRpcl9sb2M7ICAgCgkgCn07CgpzdHJ1Y3Qg
dmMgewoJc3RydWN0IHZjX2RhdGEgKmQ7CgoJIAoKCn07CgpleHRlcm4gc3RydWN0IHZjIHZjX2Nv
bnMgWzYzIF07CgoKCgoKCgoKCgoKCgoKIyAxNiAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVY
L2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvdmlkZW8vZmJjb24uaCIgMgoKIyAxICIvaG9tZS9j
YXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS9saW51eC92dF9i
dWZmZXIuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnN0YXRpYyBpbmxpbmUg
dm9pZCBzY3JfbWVtc2V0dyh1MTYgKnMsIHUxNiBjLCB1bnNpZ25lZCBpbnQgY291bnQpCnsKCWNv
dW50IC89IDI7Cgl3aGlsZSAoY291bnQtLSkKCQkoKiggIHMrKyApID0gKCBjICkpIDsKfQoKCgoK
CgoKCgoKCiMgNjIgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51eC0yLjQu
eC9pbmNsdWRlL2xpbnV4L3Z0X2J1ZmZlci5oIgoKCgojIDE3ICIvaG9tZS9jYXJsb3MvQnVpbGRz
L1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS92aWRlby9mYmNvbi5oIiAyCgoKCgoK
ICAgICAKCgogCnN0cnVjdCBkaXNwbGF5X3N3aXRjaCB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICB2b2lkICgqc2V0dXApKHN0cnVjdCBkaXNwbGF5
ICpwKTsKICAgIHZvaWQgKCpibW92ZSkoc3RydWN0IGRpc3BsYXkgKnAsIGludCBzeSwgaW50IHN4
LCBpbnQgZHksIGludCBkeCwKCQkgIGludCBoZWlnaHQsIGludCB3aWR0aCk7CiAgICAgCiAgICB2
b2lkICgqY2xlYXIpKHN0cnVjdCB2Y19kYXRhICpjb25wLCBzdHJ1Y3QgZGlzcGxheSAqcCwgaW50
IHN5LCBpbnQgc3gsCgkJICBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgpOwogICAgdm9pZCAoKnB1dGMp
KHN0cnVjdCB2Y19kYXRhICpjb25wLCBzdHJ1Y3QgZGlzcGxheSAqcCwgaW50IGMsIGludCB5eSwK
ICAgIAkJIGludCB4eCk7CiAgICB2b2lkICgqcHV0Y3MpKHN0cnVjdCB2Y19kYXRhICpjb25wLCBz
dHJ1Y3QgZGlzcGxheSAqcCwgY29uc3QgdW5zaWduZWQgc2hvcnQgKnMsCgkJICBpbnQgY291bnQs
IGludCB5eSwgaW50IHh4KTsgICAgIAogICAgdm9pZCAoKnJldmMpKHN0cnVjdCBkaXNwbGF5ICpw
LCBpbnQgeHgsIGludCB5eSk7CiAgICB2b2lkICgqY3Vyc29yKShzdHJ1Y3QgZGlzcGxheSAqcCwg
aW50IG1vZGUsIGludCB4eCwgaW50IHl5KTsKICAgIGludCAgKCpzZXRfZm9udCkoc3RydWN0IGRp
c3BsYXkgKnAsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAgICB2b2lkICgqY2xlYXJfbWFyZ2lu
cykoc3RydWN0IHZjX2RhdGEgKmNvbnAsIHN0cnVjdCBkaXNwbGF5ICpwLAoJCQkgIGludCBib3R0
b21fb25seSk7CiAgICB1bnNpZ25lZCBpbnQgZm9udHdpZHRobWFzazsgICAgICAgCn07IAoKZXh0
ZXJuIHN0cnVjdCBkaXNwbGF5X3N3aXRjaCBmYmNvbl9kdW1teTsKCiAgICAKCgoKCnN0cnVjdCBk
aXNwbGF5IHsKICAgICAKCiAgICBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gdmFyOyAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgc3RydWN0IGZiX2NtYXAgY21h
cDsgICAgICAgICAgICAgCiAgICBjaGFyICpzY3JlZW5fYmFzZTsgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgIGludCB2aXN1YWw7CiAg
ICBpbnQgdHlwZTsgICAgICAgICAgICAgICAgICAgICAgICAKICAgIGludCB0eXBlX2F1eDsgICAg
ICAgICAgICAgICAgICAgIAogICAgdV9zaG9ydCB5cGFuc3RlcDsgICAgICAgICAgICAgICAgCiAg
ICB1X3Nob3J0IHl3cmFwc3RlcDsgICAgICAgICAgICAgICAKICAgIHVfbG9uZyBsaW5lX2xlbmd0
aDsgICAgICAgICAgICAgIAogICAgdV9zaG9ydCBjYW5fc29mdF9ibGFuazsgICAgICAgICAgCiAg
ICB1X3Nob3J0IGludmVyc2U7ICAgICAgICAgICAgICAgICAKICAgIHN0cnVjdCBkaXNwbGF5X3N3
aXRjaCAqZGlzcHN3OyAgIAogICAgdm9pZCAqZGlzcHN3X2RhdGE7ICAgICAgICAgICAgICAgCgoK
CgoKCgogICAgIAoKICAgIHN0cnVjdCB2Y19kYXRhICpjb25wOyAgICAgICAgICAgIAogICAgc3Ry
dWN0IGZiX2luZm8gKmZiX2luZm87ICAgICAgICAgCiAgICBpbnQgdnJvd3M7ICAgICAgICAgICAg
ICAgICAgICAgICAKICAgIHVuc2lnbmVkIHNob3J0IGN1cnNvcl94OyAgICAgICAgIAogICAgdW5z
aWduZWQgc2hvcnQgY3Vyc29yX3k7CiAgICBpbnQgZmdjb2w7ICAgICAgICAgICAgICAgICAgICAg
ICAKICAgIGludCBiZ2NvbDsKICAgIHVfbG9uZyBuZXh0X2xpbmU7ICAgICAgICAgICAgICAgIAog
ICAgdV9sb25nIG5leHRfcGxhbmU7ICAgICAgICAgICAgICAgCiAgICB1X2NoYXIgKmZvbnRkYXRh
OyAgICAgICAgICAgICAgICAKICAgIHVuc2lnbmVkIHNob3J0IF9mb250aGVpZ2h0bG9nOwogICAg
dW5zaWduZWQgc2hvcnQgX2ZvbnR3aWR0aGxvZzsKICAgIHVuc2lnbmVkIHNob3J0IF9mb250aGVp
Z2h0OwogICAgdW5zaWduZWQgc2hvcnQgX2ZvbnR3aWR0aDsKICAgIGludCB1c2VyZm9udDsgICAg
ICAgICAgICAgICAgICAgIAogICAgdV9zaG9ydCBzY3JvbGxtb2RlOyAgICAgICAgICAgICAgCiAg
ICBzaG9ydCB5c2Nyb2xsOyAgICAgICAgICAgICAgICAgICAKICAgIHVuc2lnbmVkIGNoYXIgZmdz
aGlmdCwgYmdzaGlmdDsKICAgIHVuc2lnbmVkIHNob3J0IGNoYXJtYXNrOyAgICAgICAgIAp9OwoK
IApleHRlcm4gc3RydWN0IGRpc3BsYXkgZmJfZGlzcGxheVs2MyBdOwpleHRlcm4gY2hhciBjb24y
ZmJfbWFwWzYzIF07CmV4dGVybiBpbnQgUFJPQ19DT05TT0xFKGNvbnN0IHN0cnVjdCBmYl9pbmZv
ICppbmZvKTsKZXh0ZXJuIHZvaWQgc2V0X2NvbjJmYl9tYXAoaW50IHVuaXQsIGludCBuZXdpZHgp
OwpleHRlcm4gaW50IHNldF9hbGxfdmNzKGludCBmYmlkeCwgc3RydWN0IGZiX29wcyAqZmIsCgkJ
ICAgICAgIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBzdHJ1Y3QgZmJfaW5mbyAqaW5m
byk7CgoKCgojIDEyMSAiL2hvbWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIu
NC54L2luY2x1ZGUvdmlkZW8vZmJjb24uaCIKCgogCgogCgoKCgoKCgogICAgIAoKCgogCgoKCgoK
CgogCgoKCgoKCgoKCQogICAgIAoKCiAgICAgCiAKCgoKCgoKCgoKCiAKIAoKCgoKCgoKCgoKCgoK
CiAKCgoKCiAKCgoKIyAyMTkgIi9ob21lL2Nhcmxvcy9CdWlsZHMvVUNMSU5VWC9lY2wtdWNsaW51
eC0yLjQueC9pbmNsdWRlL3ZpZGVvL2ZiY29uLmgiCgoKCgoKCgoKCgoKCgpleHRlcm4gdm9pZCBm
YmNvbl9yZWRyYXdfY2xlYXIoc3RydWN0IHZjX2RhdGEgKiwgc3RydWN0IGRpc3BsYXkgKiwgaW50
LCBpbnQsIGludCwgaW50KTsKZXh0ZXJuIHZvaWQgZmJjb25fcmVkcmF3X2Jtb3ZlKHN0cnVjdCBk
aXNwbGF5ICosIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpOwoKCiAKIAogCgoKCgogCgog
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKCgoKCnN0YXRpYyBfX2lubGluZV9f
IHZvaWQgKmZiX21lbWNsZWFyX3NtYWxsKHZvaWQgKnMsIHNpemVfdCBjb3VudCkKewogICBpZiAo
IWNvdW50KQogICAgICByZXR1cm4oMCk7CgogICBfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAg
ICAgImxzcmwgICAjMSwlMSA7IGpjYyAxZiA7IG1vdmViICUyLCUwQC1cblx0IgogICAgICAiMTog
bHNybCAgICMxLCUxIDsgamNjIDFmIDsgbW92ZXcgJTIsJTBALVxuXHQiCiAgICAgICIxOiBsc3Js
ICAgIzEsJTEgOyBqY2MgMWYgOyBtb3ZlbCAlMiwlMEAtXG5cdCIKICAgICAgIjE6IGxzcmwgICAj
MSwlMSA7IGpjYyAxZiA7IG1vdmVsICUyLCUwQC0gOyBtb3ZlbCAlMiwlMEAtXG5cdCIKICAgICAg
IjE6IgogICAgICAgICA6ICI9YSIgKHMpLCAiPWQiIChjb3VudCkKICAgICAgICAgOiAiZCIgKDAp
LCAiMCIgKChjaGFyICopcytjb3VudCksICIxIiAoY291bnQpCiAgICk7CiAgIF9fYXNtX18gX192
b2xhdGlsZV9fKAogICAgICAgICAic3VicWwgICMxLCUxIDsgamNzIDNmXG5cdCIKCSAibW92ZWwg
JTIsJSVkNDsgbW92ZWwgJTIsJSVkNTsgbW92ZWwgJTIsJSVkNlxuXHQiCiAgICAgICIyOiBtb3Zl
bWwgJTIvJSVkNC8lJWQ1LyUlZDYsJTBALVxuXHQiCiAgICAgICAgICJkYnJhICUxLDJiXG5cdCIK
ICAgICAgIjM6IgogICAgICAgICA6ICI9YSIgKHMpLCAiPWQiIChjb3VudCkKICAgICAgICAgOiAi
ZCIgKDApLCAiMCIgKHMpLCAiMSIgKGNvdW50KQoJIDogImQ0IiwgImQ1IiwgImQ2IgogICk7Cgog
ICByZXR1cm4oMCk7Cn0KCgpzdGF0aWMgX19pbmxpbmVfXyB2b2lkICpmYl9tZW1jbGVhcih2b2lk
ICpzLCBzaXplX3QgY291bnQpCnsKICAgaWYgKCFjb3VudCkKICAgICAgcmV0dXJuKDApOwoKICAg
aWYgKGNvdW50IDwgMTYpIHsKICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgICAg
ICJsc3JsICAgIzEsJTEgOyBqY2MgMWYgOyBjbHJiICUwQCtcblx0IgogICAgICAgICAiMTogbHNy
bCAgICMxLCUxIDsgamNjIDFmIDsgY2xydyAlMEArXG5cdCIKICAgICAgICAgIjE6IGxzcmwgICAj
MSwlMSA7IGpjYyAxZiA7IGNscmwgJTBAK1xuXHQiCiAgICAgICAgICIxOiBsc3JsICAgIzEsJTEg
OyBqY2MgMWYgOyBjbHJsICUwQCsgOyBjbHJsICUwQCtcblx0IgogICAgICAgICAiMToiCiAgICAg
ICAgICAgIDogIj1hIiAocyksICI9ZCIgKGNvdW50KQogICAgICAgICAgICA6ICIwIiAocyksICIx
IiAoY291bnQpCiAgICAgKTsKICAgfSBlbHNlIHsKICAgICAgbG9uZyB0bXA7CiAgICAgIF9fYXNt
X18gX192b2xhdGlsZV9fKAogICAgICAgICAgICAibW92ZWwgJTEsJTJcblx0IgogICAgICAgICAg
ICAibHNybCAgICMxLCUyIDsgamNjIDFmIDsgY2xyYiAlMEArIDsgc3VicXcgIzEsJTFcblx0Igog
ICAgICAgICAgICAibHNybCAgICMxLCUyIDsgamNzIDJmXG5cdCIgICAKICAgICAgICAgICAgImNs
cncgICAlMEArICA7IHN1YnF3ICAjMiwlMSA7IGpyYSAyZlxuXHQiCiAgICAgICAgICIxOiBsc3Js
ICAgIzEsJTIgOyBqY2MgMmZcblx0IgogICAgICAgICAgICAiY2xydyAgICUwQCsgIDsgc3VicXcg
ICMyLCUxXG5cdCIKICAgICAgICAgIjI6IG1vdmV3ICUxLCUyOyBsc3JsICMyLCUxIDsgamVxIDZm
XG5cdCIKICAgICAgICAgICAgImxzcmwgICAjMSwlMSA7IGpjYyAzZiA7IGNscmwgJTBAK1xuXHQi
CiAgICAgICAgICIzOiBsc3JsICAgIzEsJTEgOyBqY2MgNGYgOyBjbHJsICUwQCsgOyBjbHJsICUw
QCtcblx0IgogICAgICAgICAiNDogc3VicWwgICMxLCUxIDsgamNzIDZmXG5cdCIKICAgICAgICAg
IjU6IGNscmwgJTBAKzsgY2xybCAlMEArIDsgY2xybCAlMEArIDsgY2xybCAlMEArXG5cdCIKICAg
ICAgICAgICAgImRicmEgJTEsNWIgICA7IGNscncgJTE7IHN1YnFsICMxLCUxOyBqY2MgNWJcblx0
IgogICAgICAgICAiNjogbW92ZXcgJTIsJTE7IGJ0c3QgIzEsJTEgOyBqZXEgN2YgOyBjbHJ3ICUw
QCtcblx0IgogICAgICAgICAiNzogICAgICAgICAgICA7IGJ0c3QgIzAsJTEgOyBqZXEgOGYgOyBj
bHJiICUwQCtcblx0IgogICAgICAgICAiODoiCiAgICAgICAgICAgIDogIj1hIiAocyksICI9ZCIg
KGNvdW50KSwgIj1kIiAodG1wKQogICAgICAgICAgICA6ICIwIiAocyksICIxIiAoY291bnQpCiAg
ICAgKTsKICAgfQoKICAgcmV0dXJuKDApOwp9CgoKc3RhdGljIF9faW5saW5lX18gdm9pZCAqZmJf
bWVtc2V0MjU1KHZvaWQgKnMsIHNpemVfdCBjb3VudCkKewogICBpZiAoIWNvdW50KQogICAgICBy
ZXR1cm4oMCk7CgogICBfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAgImxzcmwgICAjMSwl
MSA7IGpjYyAxZiA7IG1vdmViICUyLCUwQC1cblx0IgogICAgICAiMTogbHNybCAgICMxLCUxIDsg
amNjIDFmIDsgbW92ZXcgJTIsJTBALVxuXHQiCiAgICAgICIxOiBsc3JsICAgIzEsJTEgOyBqY2Mg
MWYgOyBtb3ZlbCAlMiwlMEAtXG5cdCIKICAgICAgIjE6IGxzcmwgICAjMSwlMSA7IGpjYyAxZiA7
IG1vdmVsICUyLCUwQC0gOyBtb3ZlbCAlMiwlMEAtXG5cdCIKICAgICAgIjE6IgogICAgICAgICA6
ICI9YSIgKHMpLCAiPWQiIChjb3VudCkKICAgICAgICAgOiAiZCIgKC0xKSwgIjAiICgoY2hhciAq
KXMrY291bnQpLCAiMSIgKGNvdW50KQogICApOwogICBfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAg
ICAgICAgInN1YnFsICAjMSwlMSA7IGpjcyAzZlxuXHQiCgkgIm1vdmVsICUyLCUlZDQ7IG1vdmVs
ICUyLCUlZDU7IG1vdmVsICUyLCUlZDZcblx0IgogICAgICAiMjogbW92ZW1sICUyLyUlZDQvJSVk
NS8lJWQ2LCUwQC1cblx0IgogICAgICAgICAiZGJyYSAlMSwyYlxuXHQiCiAgICAgICIzOiIKICAg
ICAgICAgOiAiPWEiIChzKSwgIj1kIiAoY291bnQpCiAgICAgICAgIDogImQiICgtMSksICIwIiAo
cyksICIxIiAoY291bnQpCgkgOiAiZDQiLCAiZDUiLCAiZDYiCiAgKTsKCiAgIHJldHVybigwKTsK
fQoKCnN0YXRpYyBfX2lubGluZV9fIHZvaWQgKmZiX21lbW1vdmUodm9pZCAqZCwgY29uc3Qgdm9p
ZCAqcywgc2l6ZV90IGNvdW50KQp7CiAgIGlmIChkIDwgcykgewogICAgICBpZiAoY291bnQgPCAx
NikgewogICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAgICAgICAgImxzcmwg
ICAjMSwlMiA7IGpjYyAxZiA7IG1vdmViICUxQCssJTBAK1xuXHQiCiAgICAgICAgICAgICIxOiBs
c3JsICAgIzEsJTIgOyBqY2MgMWYgOyBtb3ZldyAlMUArLCUwQCtcblx0IgogICAgICAgICAgICAi
MTogbHNybCAgICMxLCUyIDsgamNjIDFmIDsgbW92ZWwgJTFAKywlMEArXG5cdCIKICAgICAgICAg
ICAgIjE6IGxzcmwgICAjMSwlMiA7IGpjYyAxZiA7IG1vdmVsICUxQCssJTBAKyA7IG1vdmVsICUx
QCssJTBAK1xuXHQiCiAgICAgICAgICAgICIxOiIKICAgICAgICAgICAgICAgOiAiPWEiIChkKSwg
Ij1hIiAocyksICI9ZCIgKGNvdW50KQogICAgICAgICAgICAgICA6ICIwIiAoZCksICIxIiAocyks
ICIyIiAoY291bnQpCiAgICAgICAgKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAgbG9uZyB0bXA7
CiAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICAgICAgICAibW92ZWwgICUw
LCUzXG5cdCIKICAgICAgICAgICAgICAgImxzcmwgICAjMSwlMyA7IGpjYyAxZiA7IG1vdmViICUx
QCssJTBAKyA7IHN1YnF3ICMxLCUyXG5cdCIKICAgICAgICAgICAgICAgImxzcmwgICAjMSwlMyA7
IGpjcyAyZlxuXHQiICAgCiAgICAgICAgICAgICAgICJtb3ZldyAgJTFAKywlMEArICA7IHN1YnF3
ICAjMiwlMiA7IGpyYSAyZlxuXHQiCiAgICAgICAgICAgICIxOiBsc3JsICAgIzEsJTMgOyBqY2Mg
MmZcblx0IgogICAgICAgICAgICAgICAibW92ZXcgICUxQCssJTBAKyAgOyBzdWJxdyAgIzIsJTJc
blx0IgogICAgICAgICAgICAiMjogbW92ZXcgICUyLCUtOyBsc3JsICMyLCUyIDsgamVxIDZmXG5c
dCIKICAgICAgICAgICAgICAgImxzcmwgICAjMSwlMiA7IGpjYyAzZiA7IG1vdmVsICUxQCssJTBA
K1xuXHQiCiAgICAgICAgICAgICIzOiBsc3JsICAgIzEsJTIgOyBqY2MgNGYgOyBtb3ZlbCAlMUAr
LCUwQCsgOyBtb3ZlbCAlMUArLCUwQCtcblx0IgogICAgICAgICAgICAiNDogc3VicWwgICMxLCUy
IDsgamNzIDZmXG5cdCIKICAgICAgICAgICAgIjU6IG1vdmVsICAlMUArLCUwQCs7bW92ZWwgJTFA
KywlMEArXG5cdCIKICAgICAgICAgICAgICAgIm1vdmVsICAlMUArLCUwQCs7bW92ZWwgJTFAKywl
MEArXG5cdCIKICAgICAgICAgICAgICAgImRicmEgICAlMiw1YiA7IGNscncgJTI7IHN1YnFsICMx
LCUyOyBqY2MgNWJcblx0IgogICAgICAgICAgICAiNjogbW92ZXcgICUrLCUyOyBidHN0ICMxLCUy
IDsgamVxIDdmIDsgbW92ZXcgJTFAKywlMEArXG5cdCIKICAgICAgICAgICAgIjc6ICAgICAgICAg
ICAgICA7IGJ0c3QgIzAsJTIgOyBqZXEgOGYgOyBtb3ZlYiAlMUArLCUwQCtcblx0IgogICAgICAg
ICAgICAiODoiCiAgICAgICAgICAgICAgIDogIj1hIiAoZCksICI9YSIgKHMpLCAiPWQiIChjb3Vu
dCksICI9ZCIgKHRtcCkKICAgICAgICAgICAgICAgOiAiMCIgKGQpLCAiMSIgKHMpLCAiMiIgKGNv
dW50KQogICAgICAgICk7CiAgICAgIH0KICAgfSBlbHNlIHsKICAgICAgaWYgKGNvdW50IDwgMTYp
IHsKICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgICAgICAgICJsc3JsICAg
IzEsJTIgOyBqY2MgMWYgOyBtb3ZlYiAlMUAtLCUwQC1cblx0IgogICAgICAgICAgICAiMTogbHNy
bCAgICMxLCUyIDsgamNjIDFmIDsgbW92ZXcgJTFALSwlMEAtXG5cdCIKICAgICAgICAgICAgIjE6
IGxzcmwgICAjMSwlMiA7IGpjYyAxZiA7IG1vdmVsICUxQC0sJTBALVxuXHQiCiAgICAgICAgICAg
ICIxOiBsc3JsICAgIzEsJTIgOyBqY2MgMWYgOyBtb3ZlbCAlMUAtLCUwQC0gOyBtb3ZlbCAlMUAt
LCUwQC1cblx0IgogICAgICAgICAgICAiMToiCiAgICAgICAgICAgICAgIDogIj1hIiAoZCksICI9
YSIgKHMpLCAiPWQiIChjb3VudCkKICAgICAgICAgICAgICAgOiAiMCIgKChjaGFyICopIGQgKyBj
b3VudCksICIxIiAoKGNoYXIgKikgcyArIGNvdW50KSwgIjIiIChjb3VudCkKICAgICAgICApOwog
ICAgICB9IGVsc2UgewogICAgICAgICBsb25nIHRtcDsKICAgICAgICAgX19hc21fXyBfX3ZvbGF0
aWxlX18oCiAgICAgICAgICAgICAgICJtb3ZlbCAlMCwlM1xuXHQiCiAgICAgICAgICAgICAgICJs
c3JsICAgIzEsJTMgOyBqY2MgMWYgOyBtb3ZlYiAlMUAtLCUwQC0gOyBzdWJxdyAjMSwlMlxuXHQi
CiAgICAgICAgICAgICAgICJsc3JsICAgIzEsJTMgOyBqY3MgMmZcblx0IiAgIAogICAgICAgICAg
ICAgICAibW92ZXcgICUxQC0sJTBALSAgOyBzdWJxdyAgIzIsJTIgOyBqcmEgMmZcblx0IgogICAg
ICAgICAgICAiMTogbHNybCAgICMxLCUzIDsgamNjIDJmXG5cdCIKICAgICAgICAgICAgICAgIm1v
dmV3ICAlMUAtLCUwQC0gIDsgc3VicXcgICMyLCUyXG5cdCIKICAgICAgICAgICAgIjI6IG1vdmV3
ICUyLCUtOyBsc3JsICMyLCUyIDsgamVxIDZmXG5cdCIKICAgICAgICAgICAgICAgImxzcmwgICAj
MSwlMiA7IGpjYyAzZiA7IG1vdmVsICUxQC0sJTBALVxuXHQiCiAgICAgICAgICAgICIzOiBsc3Js
ICAgIzEsJTIgOyBqY2MgNGYgOyBtb3ZlbCAlMUAtLCUwQC0gOyBtb3ZlbCAlMUAtLCUwQC1cblx0
IgogICAgICAgICAgICAiNDogc3VicWwgICMxLCUyIDsgamNzIDZmXG5cdCIKICAgICAgICAgICAg
IjU6IG1vdmVsICUxQC0sJTBALTttb3ZlbCAlMUAtLCUwQC1cblx0IgogICAgICAgICAgICAgICAi
bW92ZWwgJTFALSwlMEAtO21vdmVsICUxQC0sJTBALVxuXHQiCiAgICAgICAgICAgICAgICJkYnJh
ICUyLDViIDsgY2xydyAlMjsgc3VicWwgIzEsJTI7IGpjYyA1YlxuXHQiCiAgICAgICAgICAgICI2
OiBtb3ZldyAlKywlMjsgYnRzdCAjMSwlMiA7IGplcSA3ZiA7IG1vdmV3ICUxQC0sJTBALVxuXHQi
CiAgICAgICAgICAgICI3OiAgICAgICAgICAgICAgOyBidHN0ICMwLCUyIDsgamVxIDhmIDsgbW92
ZWIgJTFALSwlMEAtXG5cdCIKICAgICAgICAgICAgIjg6IgogICAgICAgICAgICAgICA6ICI9YSIg
KGQpLCAiPWEiIChzKSwgIj1kIiAoY291bnQpLCAiPWQiICh0bXApCiAgICAgICAgICAgICAgIDog
IjAiICgoY2hhciAqKSBkICsgY291bnQpLCAiMSIgKChjaGFyICopIHMgKyBjb3VudCksICIyIiAo
Y291bnQpCiAgICAgICAgKTsKICAgICAgfQogICB9CgogICByZXR1cm4oMCk7Cn0KCgogCgpzdGF0
aWMgX19pbmxpbmVfXyB2b2lkIGZhc3RfbWVtbW92ZShjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNy
Yywgc2l6ZV90IHNpemUpCnsKICBpZiAoIXNpemUpCiAgICByZXR1cm47CiAgaWYgKGRzdCA8IHNy
YykKICAgIF9fYXNtX18gX192b2xhdGlsZV9fCiAgICAgICgiMToiCiAgICAgICAiICBtb3ZlbWwg
JTBAKywlL2QwLyUvZDEvJS9hMC8lL2ExXG4iCiAgICAgICAiICBtb3ZlbWwgJS9kMC8lL2QxLyUv
YTAvJS9hMSwlMUBcbiIKICAgICAgICIgIGFkZHFsICM4LCUxOyBhZGRxbCAjOCwlMVxuIgogICAg
ICAgIiAgZGJyYSAlMiwxYlxuIgogICAgICAgIiAgY2xydyAlMjsgc3VicWwgIzEsJTJcbiIKICAg
ICAgICIgIGpjYyAxYiIKICAgICAgIDogIj1hIiAoc3JjKSwgIj1hIiAoZHN0KSwgIj1kIiAoc2l6
ZSkKICAgICAgIDogIjAiIChzcmMpLCAiMSIgKGRzdCksICIyIiAoc2l6ZSAvIDE2IC0gMSkKICAg
ICAgIDogImQwIiwgImQxIiwgImEwIiwgImExIiwgIm1lbW9yeSIpOwogIGVsc2UKICAgIF9fYXNt
X18gX192b2xhdGlsZV9fCiAgICAgICgiMToiCiAgICAgICAiICBzdWJxbCAjOCwlMDsgc3VicWwg
IzgsJTBcbiIKICAgICAgICIgIG1vdmVtbCAlMEAsJS9kMC8lL2QxLyUvYTAvJS9hMVxuIgogICAg
ICAgIiAgbW92ZW1sICUvZDAvJS9kMS8lL2EwLyUvYTEsJTFALVxuIgogICAgICAgIiAgZGJyYSAl
MiwxYlxuIgogICAgICAgIiAgY2xydyAlMjsgc3VicWwgIzEsJTJcbiIKICAgICAgICIgIGpjYyAx
YiIKICAgICAgIDogIj1hIiAoc3JjKSwgIj1hIiAoZHN0KSwgIj1kIiAoc2l6ZSkKICAgICAgIDog
IjAiIChzcmMgKyBzaXplKSwgIjEiIChkc3QgKyBzaXplKSwgIjIiIChzaXplIC8gMTYgLSAxKQog
ICAgICAgOiAiZDAiLCAiZDEiLCAiYTAiLCAiYTEiLCAibWVtb3J5Iik7Cn0KCiMgODAwICIvaG9t
ZS9jYXJsb3MvQnVpbGRzL1VDTElOVVgvZWNsLXVjbGludXgtMi40LngvaW5jbHVkZS92aWRlby9m
YmNvbi5oIgoKCgojIDE5ICJkcml2ZXJzL3ZpZGVvL2ZiY29uLWNmYjE2LmMiIDIKCiMgMSAiL2hv
bWUvY2FybG9zL0J1aWxkcy9VQ0xJTlVYL2VjbC11Y2xpbnV4LTIuNC54L2luY2x1ZGUvdmlkZW8v
ZmJjb24tY2ZiMTYuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiBzdHJ1Y3QgZGlzcGxh
eV9zd2l0Y2ggZmJjb25fY2ZiMTY7CmV4dGVybiB2b2lkIGZiY29uX2NmYjE2X3NldHVwKHN0cnVj
dCBkaXNwbGF5ICpwKTsKZXh0ZXJuIHZvaWQgZmJjb25fY2ZiMTZfYm1vdmUoc3RydWN0IGRpc3Bs
YXkgKnAsIGludCBzeSwgaW50IHN4LCBpbnQgZHksCgkJCSAgICAgIGludCBkeCwgaW50IGhlaWdo
dCwgaW50IHdpZHRoKTsKZXh0ZXJuIHZvaWQgZmJjb25fY2ZiMTZfY2xlYXIoc3RydWN0IHZjX2Rh
dGEgKmNvbnAsIHN0cnVjdCBkaXNwbGF5ICpwLCBpbnQgc3ksCgkJCSAgICAgIGludCBzeCwgaW50
IGhlaWdodCwgaW50IHdpZHRoKTsKZXh0ZXJuIHZvaWQgZmJjb25fY2ZiMTZfcHV0YyhzdHJ1Y3Qg
dmNfZGF0YSAqY29ucCwgc3RydWN0IGRpc3BsYXkgKnAsIGludCBjLAoJCQkgICAgIGludCB5eSwg
aW50IHh4KTsKZXh0ZXJuIHZvaWQgZmJjb25fY2ZiMTZfcHV0Y3Moc3RydWN0IHZjX2RhdGEgKmNv
bnAsIHN0cnVjdCBkaXNwbGF5ICpwLAoJCQkgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqcywg
aW50IGNvdW50LCBpbnQgeXksIGludCB4eCk7CmV4dGVybiB2b2lkIGZiY29uX2NmYjE2X3JldmMo
c3RydWN0IGRpc3BsYXkgKnAsIGludCB4eCwgaW50IHl5KTsKZXh0ZXJuIHZvaWQgZmJjb25fY2Zi
MTZfY2xlYXJfbWFyZ2lucyhzdHJ1Y3QgdmNfZGF0YSAqY29ucCwgc3RydWN0IGRpc3BsYXkgKnAs
CgkJCQkgICAgICBpbnQgYm90dG9tX29ubHkpOwoKCiMgMjAgImRyaXZlcnMvdmlkZW8vZmJjb24t
Y2ZiMTYuYyIgMgoKCgogICAgIAoKCgpzdGF0aWMgdTMyIHRhYl9jZmIxNltdID0gewoKICAgIDB4
MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4ZmZmZjAwMDAsIDB4ZmZmZmZmZmYKCgoKCgp9OwoKdm9p
ZCBmYmNvbl9jZmIxNl9zZXR1cChzdHJ1Y3QgZGlzcGxheSAqcCkKewogICAgcC0+bmV4dF9saW5l
ID0gcC0+bGluZV9sZW5ndGggPyBwLT5saW5lX2xlbmd0aCA6IHAtPnZhci54cmVzX3ZpcnR1YWw8
PDE7CiAgICBwLT5uZXh0X3BsYW5lID0gMDsKfQoKdm9pZCBmYmNvbl9jZmIxNl9ibW92ZShzdHJ1
Y3QgZGlzcGxheSAqcCwgaW50IHN5LCBpbnQgc3gsIGludCBkeSwgaW50IGR4LAoJCSAgICAgICBp
bnQgaGVpZ2h0LCBpbnQgd2lkdGgpCnsKICAgIGludCBieXRlcyA9IHAtPm5leHRfbGluZSwgbGlu
ZXNpemUgPSBieXRlcyAqICgoIHAgKS0+X2ZvbnRoZWlnaHQpICwgcm93czsKICAgIHU4ICpzcmMs
ICpkc3Q7CgogICAgaWYgKHN4ID09IDAgJiYgZHggPT0gMCAmJiB3aWR0aCAqICgoIHAgKS0+X2Zv
bnR3aWR0aCkgICogMiA9PSBieXRlcykgewoJZmJfbWVtbW92ZShwLT5zY3JlZW5fYmFzZSArIGR5
ICogbGluZXNpemUsCgkJICBwLT5zY3JlZW5fYmFzZSArIHN5ICogbGluZXNpemUsCgkJICBoZWln
aHQgKiBsaW5lc2l6ZSk7CglyZXR1cm47CiAgICB9CiAgICBpZiAoKCggcCApLT5fZm9udHdpZHRo
bG9nKSApIHsKCXN4IDw8PSAoKCBwICktPl9mb250d2lkdGhsb2cpICsxOwoJZHggPDw9ICgoIHAg
KS0+X2ZvbnR3aWR0aGxvZykgKzE7Cgl3aWR0aCA8PD0gKCggcCApLT5fZm9udHdpZHRobG9nKSAr
MTsKICAgIH0gZWxzZSB7CglzeCAqPSAoKCBwICktPl9mb250d2lkdGgpICoyOwoJZHggKj0gKCgg
cCApLT5fZm9udHdpZHRoKSAqMjsKCXdpZHRoICo9ICgoIHAgKS0+X2ZvbnR3aWR0aCkgKjI7CiAg
ICB9CiAgICBpZiAoZHkgPCBzeSB8fCAoZHkgPT0gc3kgJiYgZHggPCBzeCkpIHsKCXNyYyA9IHAt
PnNjcmVlbl9iYXNlICsgc3kgKiBsaW5lc2l6ZSArIHN4OwoJZHN0ID0gcC0+c2NyZWVuX2Jhc2Ug
KyBkeSAqIGxpbmVzaXplICsgZHg7Cglmb3IgKHJvd3MgPSBoZWlnaHQgKiAoKCBwICktPl9mb250
aGVpZ2h0KSA7IHJvd3MtLTspIHsKCSAgICBmYl9tZW1tb3ZlKGRzdCwgc3JjLCB3aWR0aCk7Cgkg
ICAgc3JjICs9IGJ5dGVzOwoJICAgIGRzdCArPSBieXRlczsKCX0KICAgIH0gZWxzZSB7CglzcmMg
PSBwLT5zY3JlZW5fYmFzZSArIChzeStoZWlnaHQpICogbGluZXNpemUgKyBzeCAtIGJ5dGVzOwoJ
ZHN0ID0gcC0+c2NyZWVuX2Jhc2UgKyAoZHkraGVpZ2h0KSAqIGxpbmVzaXplICsgZHggLSBieXRl
czsKCWZvciAocm93cyA9IGhlaWdodCAqICgoIHAgKS0+X2ZvbnRoZWlnaHQpIDsgcm93cy0tOykg
ewoJICAgIGZiX21lbW1vdmUoZHN0LCBzcmMsIHdpZHRoKTsKCSAgICBzcmMgLT0gYnl0ZXM7Cgkg
ICAgZHN0IC09IGJ5dGVzOwoJfQogICAgfQp9CgpzdGF0aWMgaW5saW5lIHZvaWQgcmVjdGZpbGwo
dTggKmRlc3QsIGludCB3aWR0aCwgaW50IGhlaWdodCwgdTMyIGRhdGEsCgkJCSAgICBpbnQgbGlu
ZXNpemUpCnsKICAgIGludCBpOwoKICAgIGRhdGEgfD0gZGF0YTw8MTY7CgogICAgd2hpbGUgKGhl
aWdodC0tID4gMCkgewoJdTMyICpwID0gKHUzMiAqKWRlc3Q7Cglmb3IgKGkgPSAwOyBpIDwgd2lk
dGgvNDsgaSsrKSB7CgkgICAgKCoodm9sYXRpbGUgdTMyICopICggIHArKyApID0gKCBkYXRhICkp
IDsKCSAgICAoKih2b2xhdGlsZSB1MzIgKikgKCAgcCsrICkgPSAoIGRhdGEgKSkgOwoJfQoJaWYg
KHdpZHRoICYgMikKCSAgICAoKih2b2xhdGlsZSB1MzIgKikgKCAgcCsrICkgPSAoIGRhdGEgKSkg
OwoJaWYgKHdpZHRoICYgMSkKCSAgICAoKih2b2xhdGlsZSB1MTYgKikgKCAgKHUxNiopcCApID0g
KCBkYXRhICkpIDsKCWRlc3QgKz0gbGluZXNpemU7CiAgICB9Cn0KCnZvaWQgZmJjb25fY2ZiMTZf
Y2xlYXIoc3RydWN0IHZjX2RhdGEgKmNvbnAsIHN0cnVjdCBkaXNwbGF5ICpwLCBpbnQgc3ksIGlu
dCBzeCwKCQkgICAgICAgaW50IGhlaWdodCwgaW50IHdpZHRoKQp7CiAgICB1OCAqZGVzdDsKICAg
IGludCBieXRlcyA9IHAtPm5leHRfbGluZSwgbGluZXMgPSBoZWlnaHQgKiAoKCBwICktPl9mb250
aGVpZ2h0KSA7CiAgICB1MzIgYmd4OwoKICAgIGRlc3QgPSBwLT5zY3JlZW5fYmFzZSArIHN5ICog
KCggcCApLT5fZm9udGhlaWdodCkgICogYnl0ZXMgKyBzeCAqICgoIHAgKS0+X2ZvbnR3aWR0aCkg
ICogMjsKCiAgICBiZ3ggPSAoKHUxNiAqKXAtPmRpc3Bzd19kYXRhKVsoKCAgY29ucCApID8gKCgo
ICBjb25wICktPnZjX3ZpZGVvX2VyYXNlX2NoYXIgPj4gKCggcCApLT5iZ3NoaWZ0KSkgJiAweDBm
KSA6IDApIF07CgogICAgd2lkdGggKj0gKCggcCApLT5fZm9udHdpZHRoKSAvNDsKICAgIGlmICh3
aWR0aCAqIDggPT0gYnl0ZXMpCglyZWN0ZmlsbChkZXN0LCBsaW5lcyAqIHdpZHRoICogNCwgMSwg
Ymd4LCBieXRlcyk7CiAgICBlbHNlCglyZWN0ZmlsbChkZXN0LCB3aWR0aCAqIDQsIGxpbmVzLCBi
Z3gsIGJ5dGVzKTsKfQoKdm9pZCBmYmNvbl9jZmIxNl9wdXRjKHN0cnVjdCB2Y19kYXRhICpjb25w
LCBzdHJ1Y3QgZGlzcGxheSAqcCwgaW50IGMsIGludCB5eSwKCQkgICAgICBpbnQgeHgpCnsKICAg
IHU4ICpkZXN0LCAqY2RhdCwgYml0czsKICAgIGludCBieXRlcyA9IHAtPm5leHRfbGluZSwgcm93
czsKICAgIHUzMiBlb3J4LCBmZ3gsIGJneDsKCiAgICBkZXN0ID0gcC0+c2NyZWVuX2Jhc2UgKyB5
eSAqICgoIHAgKS0+X2ZvbnRoZWlnaHQpICAqIGJ5dGVzICsgeHggKiAoKCBwICktPl9mb250d2lk
dGgpICAqIDI7CgogICAgZmd4ID0gKCh1MTYgKilwLT5kaXNwc3dfZGF0YSlbKCgoICBjICkgPj4g
KCggcCApLT5mZ3NoaWZ0KSkgJiAweDBmKSBdOwogICAgYmd4ID0gKCh1MTYgKilwLT5kaXNwc3df
ZGF0YSlbKCgoICBjICkgPj4gKCggcCApLT5iZ3NoaWZ0KSkgJiAweDBmKSBdOwogICAgZmd4IHw9
IChmZ3ggPDwgMTYpOwogICAgYmd4IHw9IChiZ3ggPDwgMTYpOwogICAgZW9yeCA9IGZneCBeIGJn
eDsKCiAgICBzd2l0Y2ggKCgoIHAgKS0+X2ZvbnR3aWR0aCkgKSB7CiAgICBjYXNlIDQ6CiAgICBj
YXNlIDg6CgljZGF0ID0gcC0+Zm9udGRhdGEgKyAoYyAmIHAtPmNoYXJtYXNrKSAqICgoIHAgKS0+
X2ZvbnRoZWlnaHQpIDsKCWZvciAocm93cyA9ICgoIHAgKS0+X2ZvbnRoZWlnaHQpIDsgcm93cy0t
OyBkZXN0ICs9IGJ5dGVzKSB7CgkgICAgYml0cyA9ICpjZGF0Kys7CgkgICAgKCoodm9sYXRpbGUg
dTMyICopICggIGRlc3QgKSA9ICggKHRhYl9jZmIxNltiaXRzID4+IDZdICYgZW9yeCkgXiBiZ3gg
KSkgOwoJICAgICgqKHZvbGF0aWxlIHUzMiAqKSAoICBkZXN0KzQgKSA9ICggKHRhYl9jZmIxNlti
aXRzID4+IDQgJiAzXSAmIGVvcngpIF4gYmd4ICkpIDsKCSAgICBpZiAoKCggcCApLT5fZm9udHdp
ZHRoKSAgPT0gOCkgewoJCSgqKHZvbGF0aWxlIHUzMiAqKSAoICBkZXN0KzggKSA9ICggKHRhYl9j
ZmIxNltiaXRzID4+IDIgJiAzXSAmIGVvcngpIF4gYmd4ICkpIDsKCQkoKih2b2xhdGlsZSB1MzIg
KikgKCAgZGVzdCsxMiApID0gKCAodGFiX2NmYjE2W2JpdHMgJiAzXSAmIGVvcngpIF4gYmd4ICkp
IDsKCSAgICB9Cgl9CglicmVhazsKICAgIGNhc2UgMTI6CiAgICBjYXNlIDE2OgoJY2RhdCA9IHAt
PmZvbnRkYXRhICsgKChjICYgcC0+Y2hhcm1hc2spICogKCggcCApLT5fZm9udGhlaWdodCkgIDw8
IDEpOwoJZm9yIChyb3dzID0gKCggcCApLT5fZm9udGhlaWdodCkgOyByb3dzLS07IGRlc3QgKz0g
Ynl0ZXMpIHsKCSAgICBiaXRzID0gKmNkYXQrKzsKCSAgICAoKih2b2xhdGlsZSB1MzIgKikgKCAg
ZGVzdCApID0gKCAodGFiX2NmYjE2W2JpdHMgPj4gNl0gJiBlb3J4KSBeIGJneCApKSA7CgkgICAg
KCoodm9sYXRpbGUgdTMyICopICggIGRlc3QrNCApID0gKCAodGFiX2NmYjE2W2JpdHMgPj4gNCAm
IDNdICYgZW9yeCkgXiBiZ3ggKSkgOwoJICAgICgqKHZvbGF0aWxlIHUzMiAqKSAoICBkZXN0Kzgg
KSA9ICggKHRhYl9jZmIxNltiaXRzID4+IDIgJiAzXSAmIGVvcngpIF4gYmd4ICkpIDsKCSAgICAo
Kih2b2xhdGlsZSB1MzIgKikgKCAgZGVzdCsxMiApID0gKCAodGFiX2NmYjE2W2JpdHMgJiAzXSAm
IGVvcngpIF4gYmd4ICkpIDsKCSAgICBiaXRzID0gKmNkYXQrKzsKCSAgICAoKih2b2xhdGlsZSB1
MzIgKikgKCAgZGVzdCsxNiApID0gKCAodGFiX2NmYjE2W2JpdHMgPj4gNl0gJiBlb3J4KSBeIGJn
eCApKSA7CgkgICAgKCoodm9sYXRpbGUgdTMyICopICggIGRlc3QrMjAgKSA9ICggKHRhYl9jZmIx
NltiaXRzID4+IDQgJiAzXSAmIGVvcngpIF4gYmd4ICkpIDsKCSAgICBpZiAoKCggcCApLT5fZm9u
dHdpZHRoKSAgPT0gMTYpIHsKCQkoKih2b2xhdGlsZSB1MzIgKikgKCAgZGVzdCsyNCApID0gKCAo
dGFiX2NmYjE2W2JpdHMgPj4gMiAmIDNdICYgZW9yeCkgXiBiZ3ggKSkgOwoJCSgqKHZvbGF0aWxl
IHUzMiAqKSAoICBkZXN0KzI4ICkgPSAoICh0YWJfY2ZiMTZbYml0cyAmIDNdICYgZW9yeCkgXiBi
Z3ggKSkgOwoJICAgIH0KCX0KCWJyZWFrOwogICAgfQp9Cgp2b2lkIGZiY29uX2NmYjE2X3B1dGNz
KHN0cnVjdCB2Y19kYXRhICpjb25wLCBzdHJ1Y3QgZGlzcGxheSAqcCwKCQkgICAgICAgY29uc3Qg
dW5zaWduZWQgc2hvcnQgKnMsIGludCBjb3VudCwgaW50IHl5LCBpbnQgeHgpCnsKICAgIHU4ICpj
ZGF0LCAqZGVzdCwgKmRlc3QwOwogICAgdTE2IGM7CiAgICBpbnQgcm93cywgYnl0ZXMgPSBwLT5u
ZXh0X2xpbmU7CiAgICB1MzIgZW9yeCwgZmd4LCBiZ3g7CgogICAgZGVzdDAgPSBwLT5zY3JlZW5f
YmFzZSArIHl5ICogKCggcCApLT5fZm9udGhlaWdodCkgICogYnl0ZXMgKyB4eCAqICgoIHAgKS0+
X2ZvbnR3aWR0aCkgICogMjsKICAgIGMgPSAoKiggcyApKSA7CiAgICBmZ3ggPSAoKHUxNiAqKXAt
PmRpc3Bzd19kYXRhKVsoKCggIGMgKSA+PiAoKCBwICktPmZnc2hpZnQpKSAmIDB4MGYpIF07CiAg
ICBiZ3ggPSAoKHUxNiAqKXAtPmRpc3Bzd19kYXRhKVsoKCggIGMgKSA+PiAoKCBwICktPmJnc2hp
ZnQpKSAmIDB4MGYpIF07CiAgICBmZ3ggfD0gKGZneCA8PCAxNik7CiAgICBiZ3ggfD0gKGJneCA8
PCAxNik7CiAgICBlb3J4ID0gZmd4IF4gYmd4OwoKICAgIHN3aXRjaCAoKCggcCApLT5fZm9udHdp
ZHRoKSApIHsKICAgIGNhc2UgNDoKICAgIGNhc2UgODoKCXdoaWxlIChjb3VudC0tKSB7CgkgICAg
YyA9ICgqKCBzKysgKSkgICYgcC0+Y2hhcm1hc2s7CgkgICAgY2RhdCA9IHAtPmZvbnRkYXRhICsg
YyAqICgoIHAgKS0+X2ZvbnRoZWlnaHQpIDsKCSAgICBmb3IgKHJvd3MgPSAoKCBwICktPl9mb250
aGVpZ2h0KSAsIGRlc3QgPSBkZXN0MDsgcm93cy0tOyBkZXN0ICs9IGJ5dGVzKSB7CgkJdTggYml0
cyA9ICpjZGF0Kys7CgkgICAgICAgICgqKHZvbGF0aWxlIHUzMiAqKSAoICBkZXN0ICkgPSAoICh0
YWJfY2ZiMTZbYml0cyA+PiA2XSAmIGVvcngpIF4gYmd4ICkpIDsKCSAgICAgICAgKCoodm9sYXRp
bGUgdTMyICopICggIGRlc3QrNCApID0gKCAodGFiX2NmYjE2W2JpdHMgPj4gNCAmIDNdICYgZW9y
eCkgXiBiZ3ggKSkgOwoJCWlmICgoKCBwICktPl9mb250d2lkdGgpICA9PSA4KSB7CgkJICAgICgq
KHZvbGF0aWxlIHUzMiAqKSAoICBkZXN0KzggKSA9ICggKHRhYl9jZmIxNltiaXRzID4+IDIgJiAz
XSAmIGVvcngpIF4gYmd4ICkpIDsKCQkgICAgKCoodm9sYXRpbGUgdTMyICopICggIGRlc3QrMTIg
KSA9ICggKHRhYl9jZmIxNltiaXRzICYgM10gJiBlb3J4KSBeIGJneCApKSA7CgkJfQoJICAgIH0K
CSAgICBkZXN0MCArPSAoKCBwICktPl9mb250d2lkdGgpICoyOzsKCX0KCWJyZWFrOwogICAgY2Fz
ZSAxMjoKICAgIGNhc2UgMTY6Cgl3aGlsZSAoY291bnQtLSkgewoJICAgIGMgPSAoKiggcysrICkp
ICAmIHAtPmNoYXJtYXNrOwoJICAgIGNkYXQgPSBwLT5mb250ZGF0YSArIChjICogKCggcCApLT5f
Zm9udGhlaWdodCkgIDw8IDEpOwoJICAgIGZvciAocm93cyA9ICgoIHAgKS0+X2ZvbnRoZWlnaHQp
ICwgZGVzdCA9IGRlc3QwOyByb3dzLS07IGRlc3QgKz0gYnl0ZXMpIHsKCQl1OCBiaXRzID0gKmNk
YXQrKzsKCSAgICAgICAgKCoodm9sYXRpbGUgdTMyICopICggIGRlc3QgKSA9ICggKHRhYl9jZmIx
NltiaXRzID4+IDZdICYgZW9yeCkgXiBiZ3ggKSkgOwoJICAgICAgICAoKih2b2xhdGlsZSB1MzIg
KikgKCAgZGVzdCs0ICkgPSAoICh0YWJfY2ZiMTZbYml0cyA+PiA0ICYgM10gJiBlb3J4KSBeIGJn
eCApKSA7CgkgICAgICAgICgqKHZvbGF0aWxlIHUzMiAqKSAoICBkZXN0KzggKSA9ICggKHRhYl9j
ZmIxNltiaXRzID4+IDIgJiAzXSAmIGVvcngpIF4gYmd4ICkpIDsKCSAgICAgICAgKCoodm9sYXRp
bGUgdTMyICopICggIGRlc3QrMTIgKSA9ICggKHRhYl9jZmIxNltiaXRzICYgM10gJiBlb3J4KSBe
IGJneCApKSA7CgkJYml0cyA9ICpjZGF0Kys7CgkgICAgICAgICgqKHZvbGF0aWxlIHUzMiAqKSAo
ICBkZXN0KzE2ICkgPSAoICh0YWJfY2ZiMTZbYml0cyA+PiA2XSAmIGVvcngpIF4gYmd4ICkpIDsK
CSAgICAgICAgKCoodm9sYXRpbGUgdTMyICopICggIGRlc3QrMjAgKSA9ICggKHRhYl9jZmIxNlti
aXRzID4+IDQgJiAzXSAmIGVvcngpIF4gYmd4ICkpIDsKCQlpZiAoKCggcCApLT5fZm9udHdpZHRo
KSAgPT0gMTYpIHsKCQkgICAgKCoodm9sYXRpbGUgdTMyICopICggIGRlc3QrMjQgKSA9ICggKHRh
Yl9jZmIxNltiaXRzID4+IDIgJiAzXSAmIGVvcngpIF4gYmd4ICkpIDsKCQkgICAgKCoodm9sYXRp
bGUgdTMyICopICggIGRlc3QrMjggKSA9ICggKHRhYl9jZmIxNltiaXRzICYgM10gJiBlb3J4KSBe
IGJneCApKSA7CgkJfQoJICAgIH0KCSAgICBkZXN0MCArPSAoKCBwICktPl9mb250d2lkdGgpICoy
OwoJfQoJYnJlYWs7CiAgICB9Cn0KCnZvaWQgZmJjb25fY2ZiMTZfcmV2YyhzdHJ1Y3QgZGlzcGxh
eSAqcCwgaW50IHh4LCBpbnQgeXkpCnsKICAgIHU4ICpkZXN0OwogICAgaW50IGJ5dGVzID0gcC0+
bmV4dF9saW5lLCByb3dzOwoKICAgIGRlc3QgPSBwLT5zY3JlZW5fYmFzZSArIHl5ICogKCggcCAp
LT5fZm9udGhlaWdodCkgICogYnl0ZXMgKyB4eCAqICgoIHAgKS0+X2ZvbnR3aWR0aCkgKjI7CiAg
ICBmb3IgKHJvd3MgPSAoKCBwICktPl9mb250aGVpZ2h0KSA7IHJvd3MtLTsgZGVzdCArPSBieXRl
cykgewoJc3dpdGNoICgoKCBwICktPl9mb250d2lkdGgpICkgewoJY2FzZSAxNjoKCSAgICAoKih2
b2xhdGlsZSB1MzIgKikgKCAgZGVzdCsyNCApID0gKCAoKih2b2xhdGlsZSB1MzIgKikgKCBkZXN0
KzI0ICkpICBeIDB4ZmZmZmZmZmYgKSkgOwoJICAgICgqKHZvbGF0aWxlIHUzMiAqKSAoICBkZXN0
KzI4ICkgPSAoICgqKHZvbGF0aWxlIHUzMiAqKSAoIGRlc3QrMjggKSkgIF4gMHhmZmZmZmZmZiAp
KSA7CgkgICAgIAoJY2FzZSAxMjoKCSAgICAoKih2b2xhdGlsZSB1MzIgKikgKCAgZGVzdCsxNiAp
ID0gKCAoKih2b2xhdGlsZSB1MzIgKikgKCBkZXN0KzE2ICkpICBeIDB4ZmZmZmZmZmYgKSkgOwoJ
ICAgICgqKHZvbGF0aWxlIHUzMiAqKSAoICBkZXN0KzIwICkgPSAoICgqKHZvbGF0aWxlIHUzMiAq
KSAoIGRlc3QrMjAgKSkgIF4gMHhmZmZmZmZmZiApKSA7CgkgICAgIAoJY2FzZSA4OgoJICAgICgq
KHZvbGF0aWxlIHUzMiAqKSAoICBkZXN0KzggKSA9ICggKCoodm9sYXRpbGUgdTMyICopICggZGVz
dCs4ICkpICBeIDB4ZmZmZmZmZmYgKSkgOwoJICAgICgqKHZvbGF0aWxlIHUzMiAqKSAoICBkZXN0
KzEyICkgPSAoICgqKHZvbGF0aWxlIHUzMiAqKSAoIGRlc3QrMTIgKSkgIF4gMHhmZmZmZmZmZiAp
KSA7CgkgICAgIAoJY2FzZSA0OgoJICAgICgqKHZvbGF0aWxlIHUzMiAqKSAoICBkZXN0KzAgKSA9
ICggKCoodm9sYXRpbGUgdTMyICopICggZGVzdCswICkpICBeIDB4ZmZmZmZmZmYgKSkgOwoJICAg
ICgqKHZvbGF0aWxlIHUzMiAqKSAoICBkZXN0KzQgKSA9ICggKCoodm9sYXRpbGUgdTMyICopICgg
ZGVzdCs0ICkpICBeIDB4ZmZmZmZmZmYgKSkgOwoJfQogICAgfQp9Cgp2b2lkIGZiY29uX2NmYjE2
X2NsZWFyX21hcmdpbnMoc3RydWN0IHZjX2RhdGEgKmNvbnAsIHN0cnVjdCBkaXNwbGF5ICpwLAoJ
CQkgICAgICAgaW50IGJvdHRvbV9vbmx5KQp7CiAgICBpbnQgYnl0ZXMgPSBwLT5uZXh0X2xpbmU7
CiAgICB1MzIgYmd4OwoKICAgIHVuc2lnbmVkIGludCByaWdodF9zdGFydCA9IGNvbnAtPnZjX2Nv
bHMqICgoIHAgKS0+X2ZvbnR3aWR0aCkgOwogICAgdW5zaWduZWQgaW50IGJvdHRvbV9zdGFydCA9
IGNvbnAtPnZjX3Jvd3MqICgoIHAgKS0+X2ZvbnRoZWlnaHQpIDsKICAgIHVuc2lnbmVkIGludCBy
aWdodF93aWR0aCwgYm90dG9tX3dpZHRoOwoKICAgIGJneCA9ICgodTE2ICopcC0+ZGlzcHN3X2Rh
dGEpWygoICBjb25wICkgPyAoKCggIGNvbnAgKS0+dmNfdmlkZW9fZXJhc2VfY2hhciA+PiAoKCBw
ICktPmJnc2hpZnQpKSAmIDB4MGYpIDogMCkgXTsKCiAgICBpZiAoIWJvdHRvbV9vbmx5ICYmIChy
aWdodF93aWR0aCA9IHAtPnZhci54cmVzLXJpZ2h0X3N0YXJ0KSkKCXJlY3RmaWxsKHAtPnNjcmVl
bl9iYXNlK3JpZ2h0X3N0YXJ0KjIsIHJpZ2h0X3dpZHRoLAoJCSBwLT52YXIueXJlc192aXJ0dWFs
LCBiZ3gsIGJ5dGVzKTsKICAgIGlmICgoYm90dG9tX3dpZHRoID0gcC0+dmFyLnlyZXMtYm90dG9t
X3N0YXJ0KSkKCXJlY3RmaWxsKHAtPnNjcmVlbl9iYXNlKyhwLT52YXIueW9mZnNldCtib3R0b21f
c3RhcnQpKmJ5dGVzLAoJCSByaWdodF9zdGFydCwgYm90dG9tX3dpZHRoLCBiZ3gsIGJ5dGVzKTsK
fQoKCiAgICAgCgoKCnN0cnVjdCBkaXNwbGF5X3N3aXRjaCBmYmNvbl9jZmIxNiA9IHsKICAgIHNl
dHVwOgkJZmJjb25fY2ZiMTZfc2V0dXAsCiAgICBibW92ZToJCWZiY29uX2NmYjE2X2Jtb3ZlLAog
ICAgY2xlYXI6CQlmYmNvbl9jZmIxNl9jbGVhciwKICAgIHB1dGM6CQlmYmNvbl9jZmIxNl9wdXRj
LAogICAgcHV0Y3M6CQlmYmNvbl9jZmIxNl9wdXRjcywKICAgIHJldmM6CQlmYmNvbl9jZmIxNl9y
ZXZjLAogICAgY2xlYXJfbWFyZ2luczoJZmJjb25fY2ZiMTZfY2xlYXJfbWFyZ2lucywKICAgIGZv
bnR3aWR0aG1hc2s6CSgxIDw8ICgoIDQgKSAtIDEpKSB8ICgxIDw8ICgoIDggKSAtIDEpKSB8ICgx
IDw8ICgoIDEyICkgLSAxKSkgfCAoMSA8PCAoKCAxNiApIC0gMSkpIAp9OwoKCiMgMzA1ICJkcml2
ZXJzL3ZpZGVvL2ZiY29uLWNmYjE2LmMiCgoKCiAgICAgCgoKCiA7CiA7CiA7CiA7CiA7CiA7CiA7
CiA7Cg==



More information about the Gcc-bugs mailing list