This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

other/5714: Wrong assembly code generated!



>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
VUNMSU5VWC9lY2wtdWNsaW51eC0yLjQueC9pbmNsdWRlL2FzbS9lcnJuby5