public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* c++/9373: GCC-3.3 internal compiler error with -fstrict-aliasing
@ 2003-01-20 14:16 adam
  0 siblings, 0 replies; 2+ messages in thread
From: adam @ 2003-01-20 14:16 UTC (permalink / raw)
  To: gcc-gnats


>Number:         9373
>Category:       c++
>Synopsis:       GCC-3.3 internal compiler error with -fstrict-aliasing
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          ice-on-legal-code
>Submitter-Id:   net
>Arrival-Date:   Mon Jan 20 14:16:01 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     Adam Lackorzynski
>Release:        gcc version 3.3 20030118 (prerelease)
>Organization:
>Environment:
Linux 2.4.20 SMP, x86, Debian 3.0_r1/woody,
gcc-snapshot_20030118-1_i386.deb
>Description:
When compiling the source with -fstrict-aliasing, the following ICE occurs:

/usr/lib/gcc-snapshot/bin/g++ -c -Wall thread-log.ii -o z.o -fstrict-aliasing
../src/kern/ia32/thread-log.cpp: In static member function `static void
   Thread::hook_ipc_vector()':
../src/kern/ia32/thread-log.cpp:301: internal compiler error: in
   set_mem_alias_set, at emit-rtl.c:1932
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.

Leaving -fstrict-aliasing out, it compiles.

I also tried several previous versions from the 3.3 branch
which gave the same errors.
>How-To-Repeat:
/usr/lib/gcc-snapshot/bin/g++ -c -Wall thread-log.ii -o z.o -fstrict-aliasing
>Fix:
Don't compile with -fstrict-aliasing or -O2 or higher.
It works with gcc-3.2.2 and gcc-2.95.4.
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="thread-log.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="thread-log.ii"

IyAxICJhdXRvL3RocmVhZC1sb2cuY2MiCiMgMSAiPGJ1aWx0LWluPiIKIyAxICI8Y29tbWFuZCBs
aW5lPiIKIyAxICJhdXRvL3RocmVhZC1sb2cuY2MiCgoKIyAxICJhdXRvL3RocmVhZC5oIiAxCgoK
CgoKIyAxICIuLi9zcmMvbGliL21pbmlsaWJjL2lhMzIvaW5jbHVkZS9zZXRqbXAuaCIgMQoKCgoj
IDEgIi4uL3NyYy9saWIva2Vybi9pbmNsdWRlL2NkZWZzLmgiIDEKIyA1ICIuLi9zcmMvbGliL21p
bmlsaWJjL2lhMzIvaW5jbHVkZS9zZXRqbXAuaCIgMgoKCgp0eXBlZGVmIGludCBfX2ptcF9idWZb
Nl07CiMgMjEgIi4uL3NyYy9saWIvbWluaWxpYmMvaWEzMi9pbmNsdWRlL3NldGptcC5oIgp0eXBl
ZGVmIHN0cnVjdCBfX2ptcF9idWZfdGFnCnsKCgoKICBfX2ptcF9idWYgX19qbXBidWY7Cn0gam1w
X2J1ZlsxXTsKCmV4dGVybiAiQyIgewoKdm9pZCBsb25nam1wIChqbXBfYnVmIF9fZW52LCBpbnQg
X192YWwpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKaW50IHNldGptcChq
bXBfYnVmIGVudik7Cgp9CiMgNyAiYXV0by90aHJlYWQuaCIgMgoKIyAxICJhdXRvL2w0X3R5cGVz
LmgiIDEKCgoKCgojIDEgIi4uL3NyYy90eXBlcy90eXBlcy5oIiAxCiMgMTEgIi4uL3NyYy90eXBl
cy90eXBlcy5oIgojIDEgIi91c3IvbGliL2djYy1zbmFwc2hvdC9saWIvZ2NjLWxpYi9pMzg2LWxp
bnV4LzMuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxCiMgMTUxICIvdXNyL2xpYi9nY2Mtc25hcHNob3Qv
bGliL2djYy1saWIvaTM4Ni1saW51eC8zLjMvaW5jbHVkZS9zdGRkZWYuaCIKdHlwZWRlZiBpbnQg
cHRyZGlmZl90OwojIDIxMyAiL3Vzci9saWIvZ2NjLXNuYXBzaG90L2xpYi9nY2MtbGliL2kzODYt
bGludXgvMy4zL2luY2x1ZGUvc3RkZGVmLmgiCnR5cGVkZWYgdW5zaWduZWQgaW50IHNpemVfdDsK
IyAxMiAiLi4vc3JjL3R5cGVzL3R5cGVzLmgiIDIKIyAxICIuLi9zcmMvdHlwZXMvaWEzMi90eXBl
cy1hcmNoLmgiIDEKCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVuc2lnbmVkODsKdHlwZWRl
ZiBzaWduZWQgY2hhciBTaWduZWQ4Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IFVuc2lnbmVkMTY7
CnR5cGVkZWYgc2lnbmVkIHNob3J0IFNpZ25lZDE2Owp0eXBlZGVmIHVuc2lnbmVkIGludCBVbnNp
Z25lZDMyOwp0eXBlZGVmIHNpZ25lZCBpbnQgU2lnbmVkMzI7CnR5cGVkZWYgdW5zaWduZWQgbG9u
ZyBsb25nIGludCBVbnNpZ25lZDY0Owp0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgaW50IFNpZ25l
ZDY0OwoKCnR5cGVkZWYgU2lnbmVkMzIgU213b3JkOwp0eXBlZGVmIFVuc2lnbmVkMzIgTXdvcmQ7
CgoKCnR5cGVkZWYgVW5zaWduZWQzMiB2bV9vZmZzZXRfdDsKdHlwZWRlZiBVbnNpZ25lZDMyIEFk
ZHJlc3M7CgoKdHlwZWRlZiBVbnNpZ25lZDMyIHZtX3NpemVfdDsKCnR5cGVkZWYgVW5zaWduZWQ2
NCBDcHVfdGltZTsKIyAxMyAiLi4vc3JjL3R5cGVzL3R5cGVzLmgiIDIKCgoKdHlwZWRlZiBzdHJ1
Y3QgeyBVbnNpZ25lZDMyIGxvdywgaGlnaDsgfSBsNF9sb3dfaGlnaF90OwoKCnR5cGVkZWYgc3Ry
dWN0IHsgQWRkcmVzcyBsb3csIGhpZ2g7IH0gbDRfYWRkcl9yYW5nZV90OwoKCgp0eXBlZGVmIFNt
d29yZCBzc2l6ZV90OwojIDcgImF1dG8vbDRfdHlwZXMuaCIgMgojIDY2ICJhdXRvL2w0X3R5cGVz
LmgiCnR5cGVkZWYgc3RydWN0IHsKICBNd29yZCBtc2dfZGVjZWl0ZWQ6MTsKICBNd29yZCBmcGFn
ZV9yZWNlaXZlZDoxOwogIE13b3JkIG1zZ19yZWRpcmVjdGVkOjE7CiAgTXdvcmQgc3JjX2luc2lk
ZToxOwogIE13b3JkIHNuZF9lcnJvcjoxOwogIE13b3JkIGVycm9yX2NvZGU6MzsKICBNd29yZCBz
dHJpbmdzOjU7CiAgTXdvcmQgZHdvcmRzOjE5Owp9IGw0X21zZ2RvcGVfc3RydWN0X3Q7CiMgOTEg
ImF1dG8vbDRfdHlwZXMuaCIKY2xhc3MgTDRfZnBhZ2UKewpwdWJsaWM6CgogIEw0X2ZwYWdlKCBN
d29yZCBncmFudCwgTXdvcmQgd3JpdGUsIE13b3JkIHNpemUsIE13b3JkIHBhZ2UgKTsKCiAgTXdv
cmQgZ3JhbnQoKSBjb25zdDsKICB2b2lkIGdyYW50KCBNd29yZCApOwoKICBNd29yZCB3cml0ZSgp
IGNvbnN0OwogIHZvaWQgd3JpdGUoIE13b3JkICk7CgogIE13b3JkIHNpemUoKSBjb25zdDsKICB2
b2lkIHNpemUoIE13b3JkICk7CgogIE13b3JkIHBhZ2UoKSBjb25zdDsKICB2b2lkIHBhZ2UoIE13
b3JkICk7CgogIE13b3JkIGlzX3dob2xlX3NwYWNlKCkgY29uc3Q7CiAgTXdvcmQgaXNfdmFsaWQo
KSBjb25zdDsKCnByaXZhdGU6CgpwdWJsaWM6CiAgZW51bSB7CiAgICBXSE9MRV9TUEFDRSA9IDMy
LAogIH07CgogIEw0X2ZwYWdlKCBNd29yZCB3ID0gMCApOwogIE13b3JkIHJhdygpIGNvbnN0OwoK
cHJpdmF0ZToKCiAgTXdvcmQgX3JhdzsKCiAgZW51bSB7CiAgICBHUkFOVF9CSVQgPSAwLAogICAg
V1JJVEVfQklUID0gMSwKICAgIFNJWkVfTUFTSyA9IDB4MDAwMDAwZmMsCiAgICBTSVpFX1NISUZU
ID0gMiwKICAgIFNJWkVfU0laRSA9IDYsCiAgICBQQUdFX01BU0tfU1RVUElEX01BQ1JPX1dPUktB
Uk9VTkQgPSAweGZmZmZmMDAwLAogICAgUEFHRV9TSElGVF9TVFVQSURfTUFDUk9fV09SS0FST1VO
RCA9IDAsCiAgICBQQUdFX1NJWkVfU1RVUElEX01BQ1JPX1dPUktBUk9VTkQgPSAzMiwKICB9OwoK
cHJpdmF0ZToKCnB1YmxpYzoKICBlbnVtIHsKICAgIFdIT0xFX0lPX1NQQUNFID0gMTYsCiAgICBJ
T19QT1JUX01BWCA9IDFMIDw8IFdIT0xFX0lPX1NQQUNFLAogIH07CgogIE13b3JkIGlvcGFnZSgp
IGNvbnN0OwogIHZvaWQgaW9wYWdlKCBNd29yZCApOwogIE13b3JkIGlzX2lvcGFnZSgpIGNvbnN0
OwogIE13b3JkIGlzX3dob2xlX2lvX3NwYWNlKCkgY29uc3Q7CgogIHN0YXRpYyBMNF9mcGFnZSBp
byggTXdvcmQgcG9ydCwgTXdvcmQgc2l6ZSwgTXdvcmQgZ3JhbnQgKTsKCnByaXZhdGU6CiAgZW51
bSB7CiAgICBJT1BBR0VfTUFTSyA9IDB4MGZmZmYwMDAsCiAgICBJT1BBR0VfU0hJRlQgPSAxMiwK
ICAgIElPSURfTUFTSyA9IDB4ZjAwMDAwMDAsCiAgICBJT19JRCA9IDB4ZjAwMDAwMDAsCiAgfTsK
Cn07CgoKY2xhc3MgTDRfc25kX2Rlc2MKewpwdWJsaWM6CgogIEw0X3NuZF9kZXNjKCBNd29yZCB3
ID0gKE13b3JkKS0xICk7CgogIE13b3JkIGRlY2VpdGUoKSBjb25zdDsKICBNd29yZCBtYXAoKSBj
b25zdDsKICB2b2lkICptc2coKSBjb25zdDsKCiAgTXdvcmQgaXNfbG9uZ19pcGMoKSBjb25zdDsK
ICBNd29yZCBoYXNfc2VuZCgpIGNvbnN0OwoKcHJpdmF0ZToKICBNd29yZCBfZDsKfTsKCgpjbGFz
cyBMNF9yY3ZfZGVzYwp7CnB1YmxpYzoKICBMNF9yY3ZfZGVzYyggTXdvcmQgdyA9IChNd29yZCkt
MSApOwogIE13b3JkIG9wZW5fd2FpdCgpIGNvbnN0OwogIE13b3JkIHJtYXAoKSBjb25zdDsKICB2
b2lkICptc2coKSBjb25zdDsKICBMNF9mcGFnZSBmcGFnZSgpIGNvbnN0OwogIE13b3JkIGlzX3Jl
Z2lzdGVyX2lwYygpIGNvbnN0OwogIE13b3JkIGhhc19yZWNlaXZlKCkgY29uc3Q7Cgpwcml2YXRl
OgogIE13b3JkIF9kOwoKCnB1YmxpYzoKCiAgTXdvcmQgcmF3KCkgY29uc3Q7Cn07CgoKCgpjbGFz
cyBMNF90aW1lb3V0CnsKcHJpdmF0ZToKICBlbnVtIHsKICAgIFJDVl9FWFBfTUFTSyA9IDB4MGYs
CiAgICBSQ1ZfRVhQX1NISUZUID0gMCwKCiAgICBTTkRfRVhQX01BU0sgPSAweDBmMCwKICAgIFNO
RF9FWFBfU0hJRlQgPSA0LAoKICAgIFJDVl9QRkFVTFRfTUFTSyA9IDB4MGYwMCwKICAgIFJDVl9Q
RkFVTFRfU0hJRlQgPSA4LAoKICAgIFNORF9QRkFVTFRfTUFTSyA9IDB4MGYwMDAsCiAgICBTTkRf
UEZBVUxUX1NISUZUID0gMTIsCgogICAgU05EX01BTl9NQVNLID0gMHgwZmYwMDAwLAogICAgU05E
X01BTl9TSElGVCA9IDE2LAoKICAgIFJDVl9NQU5fTUFTSyA9IDB4MGZmMDAwMDAwLAogICAgUkNW
X01BTl9TSElGVCA9IDI0LAogIH07CgpwdWJsaWM6CiAgZW51bSB7CiAgICBORVZFUiA9IDAsCiAg
fTsKCiAgZXhwbGljaXQgTDRfdGltZW91dCggTXdvcmQgdCA9IDAgKTsKICBMNF90aW1lb3V0KCBN
d29yZCBzbmRfbWFuLCBNd29yZCBzbmRfZXhwLCBNd29yZCByY3ZfbWFuLCBNd29yZCByY3ZfZXhw
LCBNd29yZCBzbmRfcGZsdCwgTXdvcmQgcmN2X3BmbHQgKTsKCiAgTXdvcmQgcmN2X2V4cCgpIGNv
bnN0OwogIHZvaWQgcmN2X2V4cCggTXdvcmQgKTsKICBNd29yZCBzbmRfZXhwKCkgY29uc3Q7CiAg
dm9pZCBzbmRfZXhwKCBNd29yZCApOwogIE13b3JkIHJjdl9wZmF1bHQoKSBjb25zdDsKICB2b2lk
IHJjdl9wZmF1bHQoIE13b3JkICk7CiAgTXdvcmQgc25kX3BmYXVsdCgpIGNvbnN0OwogIHZvaWQg
c25kX3BmYXVsdCggTXdvcmQgKTsKICBNd29yZCByY3ZfbWFuKCkgY29uc3Q7CiAgdm9pZCByY3Zf
bWFuKCBNd29yZCApOwogIE13b3JkIHNuZF9tYW4oKSBjb25zdDsKICB2b2lkIHNuZF9tYW4oIE13
b3JkICk7CgogIFVuc2lnbmVkNjQgcmN2X21pY3Jvc2VjcygpIGNvbnN0OwogIFVuc2lnbmVkNjQg
c25kX21pY3Jvc2VjcygpIGNvbnN0OwoKcHJpdmF0ZToKICBNd29yZCBfdDsKCn07CiMgMjY1ICJh
dXRvL2w0X3R5cGVzLmgiCmNsYXNzIEw0X3VpZAp7CnB1YmxpYzoKIyAyNzcgImF1dG8vbDRfdHlw
ZXMuaCIKICBMNF91aWQoIHVuc2lnbmVkIHRhc2ssIHVuc2lnbmVkIGx0aHJlYWQgKTsKCgoKCgog
IHVuc2lnbmVkIHZlcnNpb24oKSBjb25zdDsKCgogIHVuc2lnbmVkIGx0aHJlYWQoKSBjb25zdDsK
CgogIHVuc2lnbmVkIHRhc2soKSBjb25zdDsKCgogIHVuc2lnbmVkIGd0aHJlYWQoKSBjb25zdDsK
CgogIHVuc2lnbmVkIGNoaWVmKCkgY29uc3Q7CgoKICB2b2lkIHZlcnNpb24oIHVuc2lnbmVkICk7
CgoKICB2b2lkIGx0aHJlYWQoIHVuc2lnbmVkICk7CgoKICB2b2lkIHRhc2soIHVuc2lnbmVkICk7
CgoKICB2b2lkIGNoaWVmKCB1bnNpZ25lZCApOwoKCgoKCiAgTXdvcmQgaXNfbmlsKCkgY29uc3Q7
CgoKCgoKICBNd29yZCBpc19pbnZhbGlkKCkgY29uc3Q7CgoKICBMNF91aWQgdGFza19pZCgpIGNv
bnN0OwoKCiAgc3RhdGljIEw0X3VpZCBpcnEoIHVuc2lnbmVkIGlycSApOwoKCiAgTXdvcmQgaXNf
aXJxKCkgY29uc3Q7CgoKCgoKCiAgTXdvcmQgaXJxKCkgY29uc3Q7CgoKICBib29sIG9wZXJhdG9y
ID09ICggTDRfdWlkIG8gKSBjb25zdDsKCgogIGJvb2wgb3BlcmF0b3IgIT0gKCBMNF91aWQgbyAp
IGNvbnN0CiAgeyByZXR1cm4gISBvcGVyYXRvciA9PSAobyk7IH0KCgogIHN0YXRpYyB1bnNpZ25l
ZCBjb25zdCB0aHJlYWRzX3Blcl90YXNrKCk7Cgpwcml2YXRlOgoKcHVibGljOgoKCiAgZW51bSB7
CiAgICBJTlZBTElEID0gMHgwZmZmZmZmZmYsCiAgICBOSUwgPSAweDAwMDAwMDAwMCwKICB9OwoK
CiAgTDRfdWlkKCBVbnNpZ25lZDY0ID0gTklMICk7CgoKICBMNF91aWQoIHVuc2lnbmVkIHRhc2ss
IHVuc2lnbmVkIGx0aHJlYWQsIHVuc2lnbmVkIHNpdGUsCiAgICAgICAgICB1bnNpZ25lZCBjaGll
ZiwgdW5zaWduZWQgbmVzdCA9IDAsIHVuc2lnbmVkIHZlcnNpb24gPSAwICk7CgoKICB1bnNpZ25l
ZCBzaXRlKCkgY29uc3Q7CgoKICB1bnNpZ25lZCBuZXN0KCkgY29uc3Q7CgoKICB2b2lkIHNpdGUo
IHVuc2lnbmVkICk7CgoKICB2b2lkIG5lc3QoIHVuc2lnbmVkICk7CgoKICBVbnNpZ25lZDY0IHJh
dygpIGNvbnN0OwoKcHJpdmF0ZToKICBlbnVtIHsKICAgIExPV19NQVNLID0gMHgwMDAwMDAwMGZm
ZmZmZmZmTEwsCiAgICBWRVJTSU9OX0xPV19NQVNLID0gMHgwMDAwMDAwMDAwMDAwM2ZmTEwsCiAg
ICBWRVJTSU9OX0xPV19TSElGVCA9IDAsCiAgICBWRVJTSU9OX0xPV19TSVpFID0gMTAsCiAgICBM
VEhSRUFEX01BU0sgPSAweDAwMDAwMDAwMDAwMWZjMDBMTCwKICAgIExUSFJFQURfU0hJRlQgPSBW
RVJTSU9OX0xPV19TSElGVCArIFZFUlNJT05fTE9XX1NJWkUsCiAgICBMVEhSRUFEX1NJWkUgPSA3
LAogICAgVEFTS19NQVNLID0gMHgwMDAwMDAwMDBmZmUwMDAwTEwsCiAgICBUQVNLX1NISUZUID0g
TFRIUkVBRF9TSElGVCArIExUSFJFQURfU0laRSwKICAgIFRBU0tfU0laRSA9IDExLAogICAgVkVS
U0lPTl9ISUdIX01BU0sgPSAweDAwMDAwMDAwZjAwMDAwMDBMTCwKICAgIFZFUlNJT05fSElHSF9T
SElGVCA9IFRBU0tfU0hJRlQgKyBUQVNLX1NJWkUsCiAgICBWRVJTSU9OX0hJR0hfU0laRSA9IDQs
CiAgICBTSVRFX01BU0sgPSAweDAwMDFmZmZmMDAwMDAwMDBMTCwKICAgIFNJVEVfU0hJRlQgPSBW
RVJTSU9OX0hJR0hfU0hJRlQgKyBWRVJTSU9OX0hJR0hfU0laRSwKICAgIFNJVEVfU0laRSA9IDE3
LAogICAgQ0hJRUZfTUFTSyA9IDB4MGZmZTAwMDAwMDAwMDAwMExMLAogICAgQ0hJRUZfU0hJRlQg
PSBTSVRFX1NISUZUICsgU0lURV9TSVpFLAogICAgQ0hJRUZfU0laRSA9IDExLAogICAgTkVTVF9N
QVNLID0gMHhmMDAwMDAwMDAwMDAwMDAwTEwsCiAgICBORVNUX1NISUZUID0gQ0hJRUZfU0hJRlQg
KyBDSElFRl9TSVpFLAogICAgTkVTVF9TSVpFID0gNCwKICB9OwoKICBVbnNpZ25lZDY0IF9yYXc7
Cgp9OwoKCgoKdHlwZWRlZiB1bmlvbiB7CiAgbDRfbXNnZG9wZV9zdHJ1Y3RfdCBtZDsKICBNd29y
ZCBtc2dkb3BlOwogIE13b3JkIGFzX2ludDsKICBNd29yZCByYXc7Cn0gbDRfbXNnZG9wZV90OwoK
CgoKCnR5cGVkZWYgc3RydWN0IHsKICBNd29yZCBzbmRfc2l6ZTsKICBNd29yZCBzbmRfc3RyOwog
IE13b3JkIHJjdl9zaXplOwogIE13b3JkIHJjdl9zdHI7Cn0gbDRfc3RyZG9wZV90OwoKCgoKCnR5
cGVkZWYgdW5pb24gewogIHN0cnVjdCB7CiAgICBNd29yZCBkOjE7CiAgICBNd29yZCBtOjE7CiAg
ICBNd29yZCBhZGRyOiAoMzIpIC0yOwogIH0gc2Q7CiAgTXdvcmQgYXNfaW50OwogIE13b3JkIHJh
dzsKfSBsNF9zZW5kX2Rlc2NfdDsKCnR5cGVkZWYgdW5pb24gewogIHN0cnVjdCB7CiAgICBNd29y
ZCBvOjE7CiAgICBNd29yZCBtOjE7CiAgICBNd29yZCBhZGRyOiAoMzIpIC0yOwogIH0gcmQ7CiAg
TXdvcmQgYXNfaW50OwogIE13b3JkIHJhdzsKfSBsNF9yZWN2X2Rlc2NfdDsKCgoKCgoKdHlwZWRl
ZiBzdHJ1Y3QgewogIE13b3JkIHByaW86ODsKICBNd29yZCBzbWFsbDo4OwogIE13b3JkIHplcm86
NDsKICBNd29yZCB0aW1lX2V4cDo0OwogIE13b3JkIHRpbWVfbWFuOjg7Cn0gbDRfc2NoZWRfcGFy
YW1fc3RydWN0X3Q7Cgp0eXBlZGVmIHVuaW9uIHsKICBNd29yZCBzY2hlZF9wYXJhbTsKICBsNF9z
Y2hlZF9wYXJhbV9zdHJ1Y3RfdCBzcDsKfSBsNF9zY2hlZF9wYXJhbV90OwojIDQ5OSAiYXV0by9s
NF90eXBlcy5oIgppbnQgbDRfaXNfaW52YWxpZF9zY2hlZF9wYXJhbShsNF9zY2hlZF9wYXJhbV90
IHNwKTsKIyA1MDggImF1dG8vbDRfdHlwZXMuaCIKaW5saW5lIE13b3JkIEw0X2ZwYWdlOjppc192
YWxpZCgpIGNvbnN0CnsKICByZXR1cm4gX3JhdzsKfQoKCgppbmxpbmUgTDRfZnBhZ2U6Okw0X2Zw
YWdlKCBNd29yZCByYXcgKQogIDogX3JhdyhyYXcpCnt9CgoKCmlubGluZSBMNF9mcGFnZTo6TDRf
ZnBhZ2UoIE13b3JkIGdyYW50LCBNd29yZCB3cml0ZSwgTXdvcmQgc2l6ZSwgTXdvcmQgcGFnZSAp
CiAgOiBfcmF3KCAoZ3JhbnQgPyAoMTw8R1JBTlRfQklUKSA6IDApCiAgICAgICAgICB8ICh3cml0
ZSA/ICgxPDxXUklURV9CSVQpIDogMCkKICAgICAgICAgIHwgKChzaXplIDw8IFNJWkVfU0hJRlQp
ICYgU0laRV9NQVNLKQogICAgICAgICAgfCAoKHBhZ2UgPDwgUEFHRV9TSElGVF9TVFVQSURfTUFD
Uk9fV09SS0FST1VORCkgJiBQQUdFX01BU0tfU1RVUElEX01BQ1JPX1dPUktBUk9VTkQpICkKe30K
CgoKaW5saW5lIE13b3JkIEw0X2ZwYWdlOjpncmFudCgpIGNvbnN0CnsKICByZXR1cm4gX3JhdyAm
ICgxPDxHUkFOVF9CSVQpOwp9CgoKCmlubGluZSBNd29yZCBMNF9mcGFnZTo6d3JpdGUoKSBjb25z
dAp7CiAgcmV0dXJuIF9yYXcgJiAoMTw8V1JJVEVfQklUKTsKfQoKCgppbmxpbmUgTXdvcmQgTDRf
ZnBhZ2U6OnNpemUoKSBjb25zdAp7CiAgcmV0dXJuIChfcmF3ICYgU0laRV9NQVNLKSA+PiBTSVpF
X1NISUZUOwp9CgoKCmlubGluZSBNd29yZCBMNF9mcGFnZTo6cGFnZSgpIGNvbnN0CnsKICByZXR1
cm4gKF9yYXcgJiBQQUdFX01BU0tfU1RVUElEX01BQ1JPX1dPUktBUk9VTkQpID4+IFBBR0VfU0hJ
RlRfU1RVUElEX01BQ1JPX1dPUktBUk9VTkQ7Cn0KCgoKaW5saW5lIHZvaWQgTDRfZnBhZ2U6Omdy
YW50KCBNd29yZCB3ICkKewogIGlmKHcpCiAgICBfcmF3IHw9ICgxPDxHUkFOVF9CSVQpOwogIGVs
c2UKICAgIF9yYXcgJj0gfigxPDxHUkFOVF9CSVQpOwp9CgoKCmlubGluZSB2b2lkIEw0X2ZwYWdl
Ojp3cml0ZSggTXdvcmQgdyApCnsKICBpZih3KQogICAgX3JhdyB8PSAoMTw8V1JJVEVfQklUKTsK
ICBlbHNlCiAgICBfcmF3ICY9IH4oMTw8V1JJVEVfQklUKTsKfQoKCgppbmxpbmUgdm9pZCBMNF9m
cGFnZTo6c2l6ZSggTXdvcmQgdyApCnsKICBfcmF3ID0gKF9yYXcgJiB+U0laRV9NQVNLKSB8ICgo
dzw8U0laRV9TSElGVCkgJiBTSVpFX01BU0spOwp9CgoKCmlubGluZSB2b2lkIEw0X2ZwYWdlOjpw
YWdlKCBNd29yZCB3ICkKewogIF9yYXcgPSAoX3JhdyAmIH5QQUdFX01BU0tfU1RVUElEX01BQ1JP
X1dPUktBUk9VTkQpIHwgKCh3PDxQQUdFX1NISUZUX1NUVVBJRF9NQUNST19XT1JLQVJPVU5EKSAm
IFBBR0VfTUFTS19TVFVQSURfTUFDUk9fV09SS0FST1VORCk7Cn0KCgoKaW5saW5lIE13b3JkIEw0
X2ZwYWdlOjpyYXcoKSBjb25zdAp7CiAgcmV0dXJuIF9yYXc7Cn0KCgoKaW5saW5lIE13b3JkIEw0
X2ZwYWdlOjppc193aG9sZV9zcGFjZSgpIGNvbnN0CnsKICByZXR1cm4gKF9yYXcgPj4gMikgPT0g
MzI7Cn0KCgoKaW5saW5lIE13b3JkIEw0X2ZwYWdlOjppb3BhZ2UoKSBjb25zdAp7CiAgcmV0dXJu
IChfcmF3ICYgSU9QQUdFX01BU0spID4+IElPUEFHRV9TSElGVDsKfQoKCgppbmxpbmUgdm9pZCBM
NF9mcGFnZTo6aW9wYWdlKCBNd29yZCB3ICkKewogIF9yYXcgPSAoX3JhdyAmIH5JT1BBR0VfTUFT
SykgfCAoKHcgPDwgSU9QQUdFX1NISUZUKSAmIElPUEFHRV9NQVNLKTsKfQoKCgppbmxpbmUgTXdv
cmQgTDRfZnBhZ2U6OmlzX2lvcGFnZSgpIGNvbnN0CnsKICByZXR1cm4gKF9yYXcgJiBJT0lEX01B
U0spID09IElPX0lEOwp9CgoKCmlubGluZSBMNF9mcGFnZSBMNF9mcGFnZTo6aW8oIE13b3JkIHBv
cnQsIE13b3JkIHNpemUsIE13b3JkIGdyYW50ICkKewogIHJldHVybiBMNF9mcGFnZSggKGdyYW50
ID8gMSA6IDApCiAgICAgICAgICAgICAgICAgICB8ICgocG9ydCA8PCBJT1BBR0VfU0hJRlQpICYg
SU9QQUdFX01BU0spCiAgICAgICAgICAgICAgICAgICB8ICgoc2l6ZSA8PCBTSVpFX1NISUZUKSAm
IFNJWkVfTUFTSykKICAgICAgICAgICAgICAgICAgIHwgSU9fSUQgKTsKfQoKCgppbmxpbmUgTXdv
cmQgTDRfZnBhZ2U6OmlzX3dob2xlX2lvX3NwYWNlKCkgY29uc3QKewogIHJldHVybiAoX3JhdyA+
PiAyKSA9PSBXSE9MRV9JT19TUEFDRTsKfQoKCgoKaW5saW5lIEw0X3NuZF9kZXNjOjpMNF9zbmRf
ZGVzYyggTXdvcmQgdyApCiAgOiBfZCh3KQp7fQoKCgppbmxpbmUgTXdvcmQgTDRfc25kX2Rlc2M6
OmRlY2VpdGUoKSBjb25zdAp7CiAgcmV0dXJuIF9kICYgMTsKfQoKCgppbmxpbmUgTXdvcmQgTDRf
c25kX2Rlc2M6Om1hcCgpIGNvbnN0CnsKICByZXR1cm4gX2QgJiAyOwp9CgoKCmlubGluZSBNd29y
ZCBMNF9zbmRfZGVzYzo6aXNfbG9uZ19pcGMoKSBjb25zdAp7CiAgcmV0dXJuIF9kICYgfjE7Cn0K
CgoKaW5saW5lIE13b3JkIEw0X3NuZF9kZXNjOjpoYXNfc2VuZCgpIGNvbnN0CnsKICByZXR1cm4g
X2QgIT0gKE13b3JkKS0xOwp9CgoKCmlubGluZSB2b2lkICpMNF9zbmRfZGVzYzo6bXNnKCkgY29u
c3QKewogIHJldHVybiAodm9pZCopKF9kICYgfjMpOwp9CgoKCgppbmxpbmUgTXdvcmQgTDRfcmN2
X2Rlc2M6OnJhdygpIGNvbnN0CnsKICByZXR1cm4gX2Q7Cn0KCgoKaW5saW5lIEw0X3Jjdl9kZXNj
OjpMNF9yY3ZfZGVzYyggTXdvcmQgdykKICA6IF9kKHcpCnt9CgoKCmlubGluZSBNd29yZCBMNF9y
Y3ZfZGVzYzo6b3Blbl93YWl0KCkgY29uc3QKewogIHJldHVybiBfZCAmIDE7Cn0KCgoKaW5saW5l
IE13b3JkIEw0X3Jjdl9kZXNjOjpybWFwKCkgY29uc3QKewogIHJldHVybiBfZCAmIDI7Cn0KCgoK
aW5saW5lIHZvaWQgKkw0X3Jjdl9kZXNjOjptc2coKSBjb25zdAp7CiAgcmV0dXJuICh2b2lkKiko
X2QgJiB+Myk7Cn0KCgoKaW5saW5lIEw0X2ZwYWdlIEw0X3Jjdl9kZXNjOjpmcGFnZSgpIGNvbnN0
CnsKICByZXR1cm4gTDRfZnBhZ2UoIF9kICYgfjMgKTsKfQoKCgppbmxpbmUgTXdvcmQgTDRfcmN2
X2Rlc2M6OmlzX3JlZ2lzdGVyX2lwYygpIGNvbnN0CnsKICByZXR1cm4gKF9kICYgfjEpID09IDA7
Cn0KCgoKaW5saW5lIE13b3JkIEw0X3Jjdl9kZXNjOjpoYXNfcmVjZWl2ZSgpIGNvbnN0CnsKICBy
ZXR1cm4gX2QgIT0gKE13b3JkKS0xOwp9CgoKCmlubGluZSBMNF90aW1lb3V0OjpMNF90aW1lb3V0
KCBNd29yZCB0ICkKICA6IF90KHQpCnt9CgoKCmlubGluZSBMNF90aW1lb3V0OjpMNF90aW1lb3V0
KCBNd29yZCBzbmRfbWFuLCBNd29yZCBzbmRfZXhwLAogICAgICAgICAgICAgICAgICAgICAgICBN
d29yZCByY3ZfbWFuLCBNd29yZCByY3ZfZXhwLAogICAgICAgICAgICAgICAgICAgICAgICBNd29y
ZCBzbmRfcGZsdCwgTXdvcmQgcmN2X3BmbHQgKQogIDogX3QoICgoc25kX21hbiA8PCBTTkRfTUFO
X1NISUZUKSAmIFNORF9NQU5fTUFTSykgfAogICAgICAgICgoc25kX2V4cCA8PCBTTkRfRVhQX1NI
SUZUKSAmIFNORF9FWFBfTUFTSykgfAogICAgICAgICgocmN2X21hbiA8PCBSQ1ZfTUFOX1NISUZU
KSAmIFJDVl9NQU5fTUFTSykgfAogICAgICAgICgocmN2X2V4cCA8PCBSQ1ZfRVhQX1NISUZUKSAm
IFJDVl9FWFBfTUFTSykgfAogICAgICAgICgocmN2X3BmbHQgPDwgUkNWX1BGQVVMVF9TSElGVCkg
JiBSQ1ZfUEZBVUxUX01BU0spIHwKICAgICAgICAoKHNuZF9wZmx0IDw8IFNORF9QRkFVTFRfU0hJ
RlQpICYgU05EX1BGQVVMVF9NQVNLKSApCnt9CgoKCmlubGluZSBNd29yZCBMNF90aW1lb3V0Ojpy
Y3ZfZXhwKCkgY29uc3QKewogIHJldHVybiAoX3QgJiBSQ1ZfRVhQX01BU0spID4+IFJDVl9FWFBf
U0hJRlQ7Cn0KCgoKaW5saW5lIHZvaWQgTDRfdGltZW91dDo6cmN2X2V4cCggTXdvcmQgdyApCnsK
ICBfdCA9IChfdCAmIH5SQ1ZfRVhQX01BU0spIHwgKCh3IDw8IFJDVl9FWFBfU0hJRlQpICYgUkNW
X0VYUF9NQVNLKTsKfQoKCgppbmxpbmUgTXdvcmQgTDRfdGltZW91dDo6c25kX2V4cCgpIGNvbnN0
CnsKICByZXR1cm4gKF90ICYgU05EX0VYUF9NQVNLKSA+PiBTTkRfRVhQX1NISUZUOwp9CgoKCmlu
bGluZSB2b2lkIEw0X3RpbWVvdXQ6OnNuZF9leHAoIE13b3JkIHcgKQp7CiAgX3QgPSAoX3QgJiB+
U05EX0VYUF9NQVNLKSB8ICgodyA8PCBTTkRfRVhQX1NISUZUKSAmIFNORF9FWFBfTUFTSyk7Cn0K
CgoKaW5saW5lIE13b3JkIEw0X3RpbWVvdXQ6OnJjdl9wZmF1bHQoKSBjb25zdAp7CiAgcmV0dXJu
IChfdCAmIFJDVl9QRkFVTFRfTUFTSykgPj4gUkNWX1BGQVVMVF9TSElGVDsKfQoKCgppbmxpbmUg
dm9pZCBMNF90aW1lb3V0OjpyY3ZfcGZhdWx0KCBNd29yZCB3ICkKewogIF90ID0gKF90ICYgflJD
Vl9QRkFVTFRfTUFTSykgfCAoKHcgPDwgUkNWX1BGQVVMVF9TSElGVCkgJiBSQ1ZfUEZBVUxUX01B
U0spOwp9CgoKCmlubGluZSBNd29yZCBMNF90aW1lb3V0OjpzbmRfcGZhdWx0KCkgY29uc3QKewog
IHJldHVybiAoX3QgJiBTTkRfUEZBVUxUX01BU0spID4+IFNORF9QRkFVTFRfU0hJRlQ7Cn0KCgoK
aW5saW5lIHZvaWQgTDRfdGltZW91dDo6c25kX3BmYXVsdCggTXdvcmQgdyApCnsKICBfdCA9IChf
dCAmIH5TTkRfUEZBVUxUX01BU0spIHwgKCh3IDw8IFNORF9QRkFVTFRfU0hJRlQpICYgU05EX1BG
QVVMVF9NQVNLKTsKfQoKCgppbmxpbmUgTXdvcmQgTDRfdGltZW91dDo6cmN2X21hbigpIGNvbnN0
CnsKICByZXR1cm4gKF90ICYgUkNWX01BTl9NQVNLKSA+PiBSQ1ZfTUFOX1NISUZUOwp9CgoKCmlu
bGluZSB2b2lkIEw0X3RpbWVvdXQ6OnJjdl9tYW4oIE13b3JkIHcgKQp7CiAgX3QgPSAoX3QgJiB+
UkNWX01BTl9NQVNLKSB8ICgodyA8PCBSQ1ZfTUFOX1NISUZUKSAmIFJDVl9NQU5fTUFTSyk7Cn0K
CgoKaW5saW5lIE13b3JkIEw0X3RpbWVvdXQ6OnNuZF9tYW4oKSBjb25zdAp7CiAgcmV0dXJuIChf
dCAmIFNORF9NQU5fTUFTSykgPj4gU05EX01BTl9TSElGVDsKfQoKCgppbmxpbmUgdm9pZCBMNF90
aW1lb3V0OjpzbmRfbWFuKCBNd29yZCB3ICkKewogIF90ID0gKF90ICYgflNORF9NQU5fTUFTSykg
fCAoKHcgPDwgU05EX01BTl9TSElGVCkgJiBTTkRfTUFOX01BU0spOwp9CgoKCmlubGluZSBVbnNp
Z25lZDY0IEw0X3RpbWVvdXQ6OnJjdl9taWNyb3NlY3MoKSBjb25zdAp7CiAgcmV0dXJuIChVbnNp
Z25lZDY0KShyY3ZfbWFuKCkpIDw8ICgoMTUgLSByY3ZfZXhwKCkpIDw8IDEpOwp9CgoKCmlubGlu
ZSBVbnNpZ25lZDY0IEw0X3RpbWVvdXQ6OnNuZF9taWNyb3NlY3MoKSBjb25zdAp7CiAgcmV0dXJu
IChVbnNpZ25lZDY0KShzbmRfbWFuKCkpIDw8ICgoMTUgLSBzbmRfZXhwKCkpIDw8IDEpOwp9CgoK
CmlubGluZSB1bnNpZ25lZCBjb25zdCBMNF91aWQ6OnRocmVhZHNfcGVyX3Rhc2soKQp7CiAgcmV0
dXJuIDE8PExUSFJFQURfU0laRTsKfQoKCgppbmxpbmUgYm9vbCBMNF91aWQ6Om9wZXJhdG9yID09
ICggTDRfdWlkIG8gKSBjb25zdAp7CiAgcmV0dXJuIG8uX3JhdyA9PSBfcmF3Owp9CgoKCmlubGlu
ZSBMNF91aWQ6Okw0X3VpZCggVW5zaWduZWQ2NCB3ICkKICA6IF9yYXcodykKe30KCgoKaW5saW5l
IEw0X3VpZDo6TDRfdWlkKCB1bnNpZ25lZCB0YXNrLCB1bnNpZ25lZCBsdGhyZWFkICkKICA6IF9y
YXcoICgoKFVuc2lnbmVkNjQpdGFzayA8PCBUQVNLX1NISUZUKSAmIFRBU0tfTUFTSykKICAgICAg
ICAgIHwgKCgoVW5zaWduZWQ2NClsdGhyZWFkIDw8IExUSFJFQURfU0hJRlQpICYgTFRIUkVBRF9N
QVNLKSkKe30KCgoKaW5saW5lIEw0X3VpZDo6TDRfdWlkKCB1bnNpZ25lZCB0YXNrLCB1bnNpZ25l
ZCBsdGhyZWFkLCB1bnNpZ25lZCBzaXRlLAogICAgICAgICAgICAgICAgdW5zaWduZWQgY2hpZWYs
IHVuc2lnbmVkIG5lc3QsIHVuc2lnbmVkIHZlcnNpb24gKQogIDogX3JhdyggKCgoVW5zaWduZWQ2
NCl0YXNrIDw8IFRBU0tfU0hJRlQpICYgVEFTS19NQVNLKQogICAgICAgICAgfCAoKChVbnNpZ25l
ZDY0KWx0aHJlYWQgPDwgTFRIUkVBRF9TSElGVCkgJiBMVEhSRUFEX01BU0spCiAgICAgICAgICB8
ICgoKFVuc2lnbmVkNjQpc2l0ZSA8PCBTSVRFX1NISUZUKSAmIFNJVEVfTUFTSykKICAgICAgICAg
IHwgKCgoVW5zaWduZWQ2NCljaGllZiA8PCBDSElFRl9TSElGVCkgJiBDSElFRl9NQVNLKQogICAg
ICAgICAgfCAoKChVbnNpZ25lZDY0KW5lc3QgPDwgTkVTVF9TSElGVCkgJiBORVNUX01BU0spCiAg
ICAgICAgICB8ICgoKFVuc2lnbmVkNjQpdmVyc2lvbiA8PCBWRVJTSU9OX0xPV19TSElGVCkgJiBW
RVJTSU9OX0xPV19NQVNLKQogICAgICAgICAgfCAoKChVbnNpZ25lZDY0KXZlcnNpb24gPDwgVkVS
U0lPTl9ISUdIX1NISUZUKSAmIFZFUlNJT05fSElHSF9NQVNLKSApCnt9CgoKCmlubGluZSB1bnNp
Z25lZCBMNF91aWQ6OnZlcnNpb24oKSBjb25zdAp7CiAgcmV0dXJuICgoX3JhdyAmIFZFUlNJT05f
SElHSF9NQVNLKSA+PiBWRVJTSU9OX0hJR0hfU0hJRlQpCiAgICB8ICgoX3JhdyAmIFZFUlNJT05f
TE9XX01BU0spID4+IFZFUlNJT05fTE9XX1NISUZUKTsKfQoKCgppbmxpbmUgdW5zaWduZWQgTDRf
dWlkOjpsdGhyZWFkKCkgY29uc3QKewogIHJldHVybiAoX3JhdyAmIExUSFJFQURfTUFTSykgPj4g
TFRIUkVBRF9TSElGVDsKfQoKCgppbmxpbmUgdW5zaWduZWQgTDRfdWlkOjp0YXNrKCkgY29uc3QK
ewogIHJldHVybiAoX3JhdyAmIFRBU0tfTUFTSykgPj4gVEFTS19TSElGVDsKfQoKCgppbmxpbmUg
dW5zaWduZWQgTDRfdWlkOjpndGhyZWFkKCkgY29uc3QKewogIHJldHVybiAoKF9yYXcgJiBMVEhS
RUFEX01BU0spID4+IExUSFJFQURfU0hJRlQpIHwKICAgICgoX3JhdyAmIFRBU0tfTUFTSykgPj4g
KFRBU0tfU0hJRlQgLSBMVEhSRUFEX1NJWkUpKTsKfQoKCgppbmxpbmUgdW5zaWduZWQgTDRfdWlk
OjpzaXRlKCkgY29uc3QKewogIHJldHVybiAoX3JhdyAmIFNJVEVfTUFTSykgPj4gU0lURV9TSElG
VDsKfQoKCgppbmxpbmUgdW5zaWduZWQgTDRfdWlkOjpjaGllZigpIGNvbnN0CnsKICByZXR1cm4g
KF9yYXcgJiBDSElFRl9NQVNLKSA+PiBDSElFRl9TSElGVDsKfQoKCgppbmxpbmUgdW5zaWduZWQg
TDRfdWlkOjpuZXN0KCkgY29uc3QKewogIHJldHVybiAoX3JhdyAmIE5FU1RfTUFTSykgPj4gTkVT
VF9TSElGVDsKfQoKCgppbmxpbmUgdm9pZCBMNF91aWQ6OnZlcnNpb24oIHVuc2lnbmVkIHcgKQp7
CiAgX3JhdyA9IChfcmF3ICYgfihWRVJTSU9OX0xPV19NQVNLIHwgVkVSU0lPTl9ISUdIX01BU0sp
KQogICAgfCAoKChVbnNpZ25lZDY0KXcgPDwgVkVSU0lPTl9MT1dfU0hJRlQpICYgVkVSU0lPTl9M
T1dfTUFTSykKICAgIHwgKCgoVW5zaWduZWQ2NCl3IDw8IFZFUlNJT05fSElHSF9TSElGVCkgJiBW
RVJTSU9OX0hJR0hfTUFTSyk7Cn0KCgoKaW5saW5lIHZvaWQgTDRfdWlkOjpsdGhyZWFkKCB1bnNp
Z25lZCB3ICkKewogIF9yYXcgPSAoX3JhdyAmIH5MVEhSRUFEX01BU0spIHwgKCgoVW5zaWduZWQ2
NCl3IDw8IExUSFJFQURfU0hJRlQpICYgTFRIUkVBRF9NQVNLKTsKfQoKCgppbmxpbmUgdm9pZCBM
NF91aWQ6OnRhc2soIHVuc2lnbmVkIHcgKQp7CiAgX3JhdyA9IChfcmF3ICYgflRBU0tfTUFTSykg
fCAoKChVbnNpZ25lZDY0KXcgPDwgVEFTS19TSElGVCkgJiBUQVNLX01BU0spOwp9CgoKCmlubGlu
ZSB2b2lkIEw0X3VpZDo6c2l0ZSggdW5zaWduZWQgdyApCnsKICBfcmF3ID0gKF9yYXcgJiB+U0lU
RV9NQVNLKSB8ICgoKFVuc2lnbmVkNjQpdyA8PCBTSVRFX1NISUZUKSAmIFNJVEVfTUFTSyk7Cn0K
CgoKaW5saW5lIHZvaWQgTDRfdWlkOjpjaGllZiggdW5zaWduZWQgdyApCnsKICBfcmF3ID0gKF9y
YXcgJiB+Q0hJRUZfTUFTSykgfCAoKChVbnNpZ25lZDY0KXcgPDwgQ0hJRUZfU0hJRlQpICYgQ0hJ
RUZfTUFTSyk7Cn0KCgoKaW5saW5lIHZvaWQgTDRfdWlkOjpuZXN0KCB1bnNpZ25lZCB3ICkKewog
IF9yYXcgPSAoX3JhdyAmIH5ORVNUX01BU0spIHwgKCgoVW5zaWduZWQ2NCl3IDw8IE5FU1RfU0hJ
RlQpICYgTkVTVF9NQVNLKTsKfQoKCgppbmxpbmUgTXdvcmQgTDRfdWlkOjppc19uaWwoKSBjb25z
dAp7CiAgcmV0dXJuIChfcmF3ICYgTE9XX01BU0spID09IDA7Cn0KCgoKaW5saW5lIE13b3JkIEw0
X3VpZDo6aXNfaW52YWxpZCgpIGNvbnN0CnsKICByZXR1cm4gKF9yYXcgJiBMT1dfTUFTSykgPT0g
SU5WQUxJRDsKfQoKCgppbmxpbmUgTDRfdWlkIEw0X3VpZDo6dGFza19pZCgpIGNvbnN0CnsKICBy
ZXR1cm4gTDRfdWlkKCBfcmF3ICYgfkxUSFJFQURfTUFTSyApOwp9CgoKCmlubGluZSBMNF91aWQg
TDRfdWlkOjppcnEoIHVuc2lnbmVkIGlycSApCnsKICByZXR1cm4gTDRfdWlkKCAoaXJxICsgMSkg
JiB+TE9XX01BU0sgKTsKfQoKCgppbmxpbmUgTXdvcmQgTDRfdWlkOjppc19pcnEoKSBjb25zdAp7
CiAgcmV0dXJuIChfcmF3ICYgfkxPV19NQVNLKSA9PSAwICYmIF9yYXc7Cn0KCgoKaW5saW5lIE13
b3JkIEw0X3VpZDo6aXJxKCkgY29uc3QKewogIHJldHVybiBfcmF3LTE7Cn0KCgoKaW5saW5lIFVu
c2lnbmVkNjQgTDRfdWlkOjpyYXcoKSBjb25zdAp7CiAgcmV0dXJuIF9yYXc7Cn0KIyAxMDYzICJh
dXRvL2w0X3R5cGVzLmgiCmlubGluZSBpbnQgbDRfaXNfaW52YWxpZF9zY2hlZF9wYXJhbShsNF9z
Y2hlZF9wYXJhbV90IHNwKQp7CiAgcmV0dXJuIHNwLnNjaGVkX3BhcmFtID09IDB4ZmZmZmZmZmY7
Cn0KIyA5ICJhdXRvL3RocmVhZC5oIiAyCgojIDEgImF1dG8vY29uZmlnLmgiIDEKCgoKCgojIDEg
Imdsb2JhbGNvbmZpZy5oIiAxCiMgNyAiYXV0by9jb25maWcuaCIgMgoKCiMgMSAiLi4vc3JjL2tl
cm4vY29uZmlnX3RjYnNpemUuaCIgMQojIDEwICJhdXRvL2NvbmZpZy5oIiAyCiMgNDYgImF1dG8v
Y29uZmlnLmgiCmNsYXNzIENvbmZpZwp7CnB1YmxpYzoKICBlbnVtIHsKICAgIE1BWF9OVU1fSVJR
ID0gMjAsCiAgICBTRVJJQUxfRVNDX0lSUSA9IDIsCiAgICBTRVJJQUxfRVNDX05PSVJRID0gMSwK
ICAgIFNFUklBTF9OT19FU0MgPSAwLAogIH07CgoKICBzdGF0aWMgY29uc3QgdW5zaWduZWQga2Vy
bmVsX3ZlcnNpb25faWQgPSAweDAxMDA0NDQ0OwojIDY3ICJhdXRvL2NvbmZpZy5oIgogIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBrZXJuZWxfbWVtX3Blcl9jZW50ID0gMTA7CgogIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCB0aHJlYWRfYmxvY2tfc2l6ZSA9ICgweDgwMCk7CgogIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCB0aHJlYWRfYmxvY2tfbWFzawogICAgPSAodGhyZWFkX2Jsb2NrX3NpemUgLSAxKSB8
IH4oKHRocmVhZF9ibG9ja19zaXplIDw8ICgxMSs3KSkgLSAxKTsKICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgdGhyZWFkX2Jsb2NrX2lkX2ZhY3RvciA9IHRocmVhZF9ibG9ja19zaXplLzB4NDAwOwoK
ICBzdGF0aWMgY29uc3QgYm9vbCBjb25zZXJ2YXRpdmUgPSBmYWxzZTsKICBzdGF0aWMgY29uc3Qg
Ym9vbCBtb25pdG9yX3BhZ2VfZmF1bHRzID0gY29uc2VydmF0aXZlOwoKCgoKICBzdGF0aWMgY29u
c3QgYm9vbCBkZWNlaXRfYml0X2Rpc2FibGVzX3N3aXRjaCA9IGZhbHNlOwoKICBzdGF0aWMgY29u
c3QgYm9vbCBmaW5lX2dyYWluZWRfY3B1dGltZSA9IGZhbHNlOwoKICBzdGF0aWMgYm9vbCBpcnFf
YWNrX2luX2tlcm5lbDsKCiAgc3RhdGljIGJvb2wgZXNjX2hhY2s7CiAgc3RhdGljIGludCBzZXJp
YWxfZXNjOwogIHN0YXRpYyBib29sIHdhdGNoZG9nOwogIHN0YXRpYyBib29sIGFwaWM7CgogIHN0
YXRpYyB1bnNpZ25lZCB0YnVmX2VudHJpZXM7CgoKCgogIHN0YXRpYyBjb25zdCBib29sIHByb2Zp
bGluZyA9IGZhbHNlOwoKICBzdGF0aWMgY29uc3QgaW50IHByb2ZpbGluZ19yYXRlID0gMTAwOwog
IHN0YXRpYyBjb25zdCBpbnQgcHJvZmlsZV9pcnEgPSAwOwoKCiAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGtlcm5lbF90YXNrbm8gPSAwOwogIHN0YXRpYyBjb25zdCBMNF91aWQga2VybmVsX2lkOwog
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBrZXJuZWxfcHJpbyA9IDE7CiAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIGtlcm5lbF9tY3AgPSAyNTU7CgoKICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2lnbWEw
X3Rhc2tubyA9IDI7CiAgc3RhdGljIGNvbnN0IEw0X3VpZCBzaWdtYTBfaWQ7CiAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIHNpZ21hMF9wcmlvID0gMHgxMDsKICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
c2lnbWEwX21jcCA9IDA7CgoKICBzdGF0aWMgY29uc3QgdW5zaWduZWQgYm9vdF90YXNrbm8gPSA0
OwogIHN0YXRpYyBjb25zdCBMNF91aWQgYm9vdF9pZDsKICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
Ym9vdF9wcmlvID0gMHgxMDsKICBzdGF0aWMgY29uc3QgdW5zaWduZWQgYm9vdF9tY3AgPSAyNTU7
CgoKICBzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRfdGltZV9zbGljZSA9IDEwOwoKCnByaXZhdGU6
CgpwdWJsaWM6CgogIGVudW0gewogICAgVEJVRl9JUlEgPSAxNiwKICB9OwoKICBzdGF0aWMgY29u
c3QgY2hhciAqY29uc3Qga2VybmVsX3ZlcnNpb25fc3RyaW5nOwoKICBlbnVtIHsKICAgIFBBR0Vf
U0hJRlQgPSAxMiwKICAgIFBBR0VfU0laRSA9IDEgPDwgUEFHRV9TSElGVCwKICAgIFBBR0VfTUFT
SyA9IH4oIFBBR0VfU0laRSAtIDEpLAoKICAgIFNVUEVSUEFHRV9TSElGVCA9IDIyLAogICAgU1VQ
RVJQQUdFX1NJWkUgPSAxIDw8IFNVUEVSUEFHRV9TSElGVCwKICAgIFNVUEVSUEFHRV9NQVNLID0g
figgU1VQRVJQQUdFX1NJWkUgLTEgKSwKCiAgfTsKCiAgc3RhdGljIGNvbnN0IGJvb2wgYmFja3dh
cmRfY29tcGF0aWJpbGl0eSA9IHRydWU7CgoKCgogIHN0YXRpYyBjb25zdCBib29sIHNjaGVkdWxp
bmdfdXNpbmdfcGl0ID0gZmFsc2U7CgoKCiAgc3RhdGljIGNvbnN0IGJvb2wgaGx0X3dvcmtzX29r
ID0gdHJ1ZTsKCiAgc3RhdGljIGNvbnN0IGJvb2wgZ2V0Y2hhcl9kb2VzX2hsdCA9IHRydWU7CgoK
CiAgc3RhdGljIGNvbnN0IGJvb2wgcGljX3ByaW9fbW9kaWZ5ID0gdHJ1ZTsKCgoKCgoKICBzdGF0
aWMgY29uc3QgYm9vbCBlbmFibGVfaW9fcHJvdGVjdGlvbiA9IGZhbHNlOwoKCgoKCgoKICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgbWljcm9zZWNfcGVyX3RpY2sgPSA5NzZMTDsKCgoKCiAgc3RhdGlj
IHVuc2lnbmVkIGNvbnN0IGRlZmF1bHRfY29uc29sZV91YXJ0ID0gMjsKICBzdGF0aWMgdW5zaWdu
ZWQgY29uc3QgZGVmYXVsdF9jb25zb2xlX3VhcnRfYmF1ZHJhdGUgPSAxMTUyMDA7CgoKcHVibGlj
OgoKICBzdGF0aWMgdm9pZCBpbml0KCk7Cn07CiMgMTEgImF1dG8vdGhyZWFkLmgiIDIKIyAxICJh
dXRvL3RocmVhZGlkLmgiIDEKIyAxMyAiYXV0by90aHJlYWRpZC5oIgpjbGFzcyBUaHJlYWQ7Cgpj
bGFzcyB0aHJlYWRpZF90CnsKCiAgVGhyZWFkICp0OwoKcHVibGljOgoKICB0aHJlYWRpZF90KEw0
X3VpZCBjb25zdCAqcHVibGljX2lkKTsKCiAgdGhyZWFkaWRfdChMNF91aWQgcHVibGljX2lkKTsK
CiAgdGhyZWFkaWRfdChUaHJlYWQqIHRocmVhZCk7CgogIFRocmVhZCAqIGxvb2t1cCgpIGNvbnN0
OwoKICBib29sIGlzX25pbCgpIGNvbnN0OwoKICBib29sIGlzX3ZhbGlkKCkgY29uc3Q7Cn07CgoK
CgoKCiMgMSAiYXV0by9rbWVtLmgiIDEKCgoKCgoKIyAxICJhdXRvL2tpcC5oIiAxCiMgMTcgImF1
dG8va2lwLmgiCnN0cnVjdCBLZXJuZWxfaW5mbwp7CiAgTXdvcmQgbWFnaWM7CiAgTXdvcmQgdmVy
c2lvbjsKICBNd29yZCBvZmZzZXRfdmVyc2lvbl9zdHJpbmdzOwogIE13b3JkIHJlc2VydmVkOwoK
CgoKCiAgTXdvcmQgaW5pdF9kZWZhdWx0X2tkZWJ1ZywgZGVmYXVsdF9rZGVidWdfZXhjZXB0aW9u
LAogICAgX191bmtub3duLCBkZWZhdWx0X2tkZWJ1Z19lbmQ7CiAgTXdvcmQgc2lnbWEwX2VzcCwg
c2lnbWEwX2VpcDsKICBsNF9sb3dfaGlnaF90IHNpZ21hMF9tZW1vcnk7CiAgTXdvcmQgc2lnbWEx
X2VzcCwgc2lnbWExX2VpcDsKICBsNF9sb3dfaGlnaF90IHNpZ21hMV9tZW1vcnk7CiAgTXdvcmQg
cm9vdF9lc3AsIHJvb3RfZWlwOwogIGw0X2xvd19oaWdoX3Qgcm9vdF9tZW1vcnk7CiAgTXdvcmQg
bDRfY29uZmlnOwogIE13b3JkIHJlc2VydmVkMjsKICBNd29yZCBrZGVidWdfY29uZmlnOwogIE13
b3JkIGtkZWJ1Z19wZXJtaXNzaW9uOwoKICBsNF9sb3dfaGlnaF90IG1haW5fbWVtb3J5OwogIGw0
X2xvd19oaWdoX3QgcmVzZXJ2ZWQwLCByZXNlcnZlZDE7CiAgbDRfbG93X2hpZ2hfdCBzZW1pX3Jl
c2VydmVkOwogIGw0X2xvd19oaWdoX3QgZGVkaWNhdGVkWzRdOwogIHZvbGF0aWxlIENwdV90aW1l
IGNsb2NrOwp9OwojIDggImF1dG8va21lbS5oIiAyCgojIDEgIi4uL3NyYy9saWIvbWluaWxpYmMv
aW5jbHVkZS9jc3RkZGVmIiAxCgoKCgoKIyAxICIvdXNyL2xpYi9nY2Mtc25hcHNob3QvbGliL2dj
Yy1saWIvaTM4Ni1saW51eC8zLjMvaW5jbHVkZS9zdGRkZWYuaCIgMQojIDcgIi4uL3NyYy9saWIv
bWluaWxpYmMvaW5jbHVkZS9jc3RkZGVmIiAyCgpuYW1lc3BhY2Ugc3RkIHsKCgoKICB1c2luZyA6
OnB0cmRpZmZfdDsKICB1c2luZyA6OnNpemVfdDsKCgoKfTsKIyAxMCAiYXV0by9rbWVtLmgiIDIK
CgoKIyAxICIuLi9zcmMvbGliL2tlcm4vaW5jbHVkZS9mbHV4L3g4Ni9tdWx0aWJvb3QuaCIgMQoj
IDI0ICIuLi9zcmMvbGliL2tlcm4vaW5jbHVkZS9mbHV4L3g4Ni9tdWx0aWJvb3QuaCIKIyAxICIu
Li9zcmMvbGliL2tlcm4vaW5jbHVkZS9mbHV4L3g4Ni90eXBlcy5oIiAxCiMgNDYgIi4uL3NyYy9s
aWIva2Vybi9pbmNsdWRlL2ZsdXgveDg2L3R5cGVzLmgiCnR5cGVkZWYgdW5zaWduZWQgaW50IG5h
dHVyYWxfdDsKIyA1NSAiLi4vc3JjL2xpYi9rZXJuL2luY2x1ZGUvZmx1eC94ODYvdHlwZXMuaCIK
dHlwZWRlZiBpbnQgaW50ZWdlcl90OwoKCgoKCnR5cGVkZWYgbmF0dXJhbF90IHZtX29mZnNldF90
OwoKCgoKCgp0eXBlZGVmIG5hdHVyYWxfdCB2bV9zaXplX3Q7CgoKCgoKdHlwZWRlZiBzaWduZWQg
Y2hhciBzaWduZWQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0IHNpZ25lZDE2X3Q7CnR5cGVkZWYg
c2lnbmVkIGxvbmcgc2lnbmVkMzJfdDsKdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIHNpZ25lZDY0
X3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hhciB1bnNpZ25lZDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBz
aG9ydCB1bnNpZ25lZDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyB1bnNpZ25lZDMyX3Q7CnR5
cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVuc2lnbmVkNjRfdDsKdHlwZWRlZiBmbG9hdCBmbG9h
dDMyX3Q7CnR5cGVkZWYgZG91YmxlIGZsb2F0NjRfdDsKIyAyNSAiLi4vc3JjL2xpYi9rZXJuL2lu
Y2x1ZGUvZmx1eC94ODYvbXVsdGlib290LmgiIDIKCgoKc3RydWN0IG11bHRpYm9vdF9oZWFkZXIK
ewoKICAgICAgICB1bnNpZ25lZCBtYWdpYzsKCgogICAgICAgIHVuc2lnbmVkIGZsYWdzOwoKCiAg
ICAgICAgdW5zaWduZWQgY2hlY2tzdW07CgoKICAgICAgICB2bV9vZmZzZXRfdCBoZWFkZXJfYWRk
cjsKICAgICAgICB2bV9vZmZzZXRfdCBsb2FkX2FkZHI7CiAgICAgICAgdm1fb2Zmc2V0X3QgbG9h
ZF9lbmRfYWRkcjsKICAgICAgICB2bV9vZmZzZXRfdCBic3NfZW5kX2FkZHI7CiAgICAgICAgdm1f
b2Zmc2V0X3QgZW50cnk7Cn07CiMgNzcgIi4uL3NyYy9saWIva2Vybi9pbmNsdWRlL2ZsdXgveDg2
L211bHRpYm9vdC5oIgpzdHJ1Y3QgbXVsdGlib290X2luZm8KewoKCiAgICAgICAgdW5zaWduZWQg
ZmxhZ3M7CgoKCiAgICAgICAgdm1fc2l6ZV90IG1lbV9sb3dlcjsKICAgICAgICB2bV9zaXplX3Qg
bWVtX3VwcGVyOwoKCgogICAgICAgIHVuc2lnbmVkIGNoYXIgYm9vdF9kZXZpY2VbNF07CgoKCiAg
ICAgICAgdm1fb2Zmc2V0X3QgY21kbGluZTsKCgoKICAgICAgICB1bnNpZ25lZCBtb2RzX2NvdW50
OwogICAgICAgIHZtX29mZnNldF90IG1vZHNfYWRkcjsKCgogICAgICAgIHVuaW9uCiAgICAgICAg
ewogICAgICAgICAgc3RydWN0CiAgICAgICAgICB7CgoKICAgICAgICAgICAgdm1fc2l6ZV90IHRh
YnNpemU7CiAgICAgICAgICAgIHZtX3NpemVfdCBzdHJzaXplOwogICAgICAgICAgICB2bV9vZmZz
ZXRfdCBhZGRyOwogICAgICAgICAgICB1bnNpZ25lZCByZXNlcnZlZDsKICAgICAgICAgIH0gYTsK
CiAgICAgICAgICBzdHJ1Y3QKICAgICAgICAgIHsKCgogICAgICAgICAgICB1bnNpZ25lZCBudW07
CiAgICAgICAgICAgIHZtX3NpemVfdCBzaXplOwogICAgICAgICAgICB2bV9vZmZzZXRfdCBhZGRy
OwogICAgICAgICAgICB1bnNpZ25lZCBzaG5keDsKICAgICAgICAgIH0gZTsKICAgICAgICB9IHN5
bXM7CgoKCiAgICAgICAgdm1fc2l6ZV90IG1tYXBfY291bnQ7CiAgICAgICAgdm1fb2Zmc2V0X3Qg
bW1hcF9hZGRyOwp9OwojIDE0NSAiLi4vc3JjL2xpYi9rZXJuL2luY2x1ZGUvZmx1eC94ODYvbXVs
dGlib290LmgiCnN0cnVjdCBtdWx0aWJvb3RfbW9kdWxlCnsKCiAgICAgICAgdm1fb2Zmc2V0X3Qg
bW9kX3N0YXJ0OwogICAgICAgIHZtX29mZnNldF90IG1vZF9lbmQ7CgoKICAgICAgICB2bV9vZmZz
ZXRfdCBzdHJpbmc7CgoKICAgICAgICB1bnNpZ25lZCByZXNlcnZlZDsKfTsKCgoKCgoKc3RydWN0
IEFkZHJSYW5nZURlc2MKewogIHVuc2lnbmVkIGxvbmcgc2l6ZTsKICB1bnNpZ25lZCBsb25nIEJh
c2VBZGRyTG93OwogIHVuc2lnbmVkIGxvbmcgQmFzZUFkZHJIaWdoOwogIHVuc2lnbmVkIGxvbmcg
TGVuZ3RoTG93OwogIHVuc2lnbmVkIGxvbmcgTGVuZ3RoSGlnaDsKICB1bnNpZ25lZCBsb25nIFR5
cGU7CgoKfTsKIyAxNCAiYXV0by9rbWVtLmgiIDIKIyAxICIuLi9zcmMvbGliL2tlcm4vaW5jbHVk
ZS9mbHV4L3g4Ni9wYWdpbmcuaCIgMQojIDM1ICIuLi9zcmMvbGliL2tlcm4vaW5jbHVkZS9mbHV4
L3g4Ni9wYWdpbmcuaCIKIyAxICIuLi9zcmMvbGliL2tlcm4vaW5jbHVkZS9mbHV4L3BhZ2UuaCIg
MQojIDQyICIuLi9zcmMvbGliL2tlcm4vaW5jbHVkZS9mbHV4L3BhZ2UuaCIKIyAxICIuLi9zcmMv
bGliL2tlcm4vaW5jbHVkZS9mbHV4L3g4Ni9wYWdlLmgiIDEKIyA0MyAiLi4vc3JjL2xpYi9rZXJu
L2luY2x1ZGUvZmx1eC9wYWdlLmgiIDIKIyAzNiAiLi4vc3JjL2xpYi9rZXJuL2luY2x1ZGUvZmx1
eC94ODYvcGFnaW5nLmgiIDIKIyAxMTggIi4uL3NyYy9saWIva2Vybi9pbmNsdWRlL2ZsdXgveDg2
L3BhZ2luZy5oIgojIDEgIi4uL3NyYy9saWIva2Vybi9pbmNsdWRlL2ZsdXgveDg2L3Byb2NfcmVn
LmgiIDEKIyA2NyAiLi4vc3JjL2xpYi9rZXJuL2luY2x1ZGUvZmx1eC94ODYvcHJvY19yZWcuaCIK
ZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGdldF9lZmxhZ3MoKQp7CiAgICAgICAgdW5zaWduZWQg
ZWZsYWdzOwogICAgICAgIGFzbSB2b2xhdGlsZSgicHVzaGYgOyBwb3BsICUwIiA6ICI9ciIgKGVm
bGFncykpOwogICAgICAgIHJldHVybiBlZmxhZ3M7Cn0KCmV4dGVybiBfX2lubGluZSB2b2lkIHNl
dF9lZmxhZ3ModW5zaWduZWQgZWZsYWdzKQp7CiAgICAgICAgYXNtIHZvbGF0aWxlKCJwdXNobCAl
MCA7IHBvcGYiIDogOiAiciIgKGVmbGFncykgOiAibWVtb3J5Iik7Cn0KCmV4dGVybiBfX2lubGlu
ZSB2b2lkIGNsaSgpIHsgYXNtIHZvbGF0aWxlICgiY2xpIiA6IDogOiAibWVtb3J5Iik7IH0KZXh0
ZXJuIF9faW5saW5lIHZvaWQgc3RpKCkgeyBhc20gdm9sYXRpbGUgKCJzdGkiIDogOiA6ICJtZW1v
cnkiKTsgfQpleHRlcm4gX19pbmxpbmUgdm9pZCBjbGQoKSB7IGFzbSgiY2xkIik7IH0KCgoKCgoK
ZXh0ZXJuIF9faW5saW5lIHZvaWQgY2x0cygpIHsgYXNtKCJjbHRzIik7IH0KCmV4dGVybiBfX2lu
bGluZSB1bnNpZ25lZCBzaG9ydCBnZXRfY3MoKQp7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgY3M7
CiAgICAgICAgYXNtIHZvbGF0aWxlKCJtb3Z3ICUlY3MsJXcwIiA6ICI9ciIgKGNzKSk7CiAgICAg
ICAgcmV0dXJuIGNzOwp9CgpleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgc2hvcnQgZ2V0X2RzKCkK
ewogICAgICAgIHVuc2lnbmVkIHNob3J0IGRzOwogICAgICAgIGFzbSB2b2xhdGlsZSgibW92dyAl
JWRzLCV3MCIgOiAiPXIiIChkcykpOwogICAgICAgIHJldHVybiBkczsKfQpleHRlcm4gX19pbmxp
bmUgdm9pZCBzZXRfZHModW5zaWduZWQgc2hvcnQgZHMpCnsKICAgICAgICBhc20gdm9sYXRpbGUo
Im1vdncgJXcwLCUlZHMiIDogOiAiciIgKGRzKSk7Cn0KCmV4dGVybiBfX2lubGluZSB1bnNpZ25l
ZCBzaG9ydCBnZXRfZXMoKQp7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgZXM7CiAgICAgICAgYXNt
IHZvbGF0aWxlKCJtb3Z3ICUlZXMsJXcwIiA6ICI9ciIgKGVzKSk7CiAgICAgICAgcmV0dXJuIGVz
Owp9CmV4dGVybiBfX2lubGluZSB2b2lkIHNldF9lcyh1bnNpZ25lZCBzaG9ydCBlcykKewogICAg
ICAgIGFzbSB2b2xhdGlsZSgibW92dyAldzAsJSVlcyIgOiA6ICJyIiAoZXMpKTsKfQoKZXh0ZXJu
IF9faW5saW5lIHVuc2lnbmVkIHNob3J0IGdldF9mcygpCnsKICAgICAgICB1bnNpZ25lZCBzaG9y
dCBmczsKICAgICAgICBhc20gdm9sYXRpbGUoIm1vdncgJSVmcywldzAiIDogIj1yIiAoZnMpKTsK
ICAgICAgICByZXR1cm4gZnM7Cn0KZXh0ZXJuIF9faW5saW5lIHZvaWQgc2V0X2ZzKHVuc2lnbmVk
IHNob3J0IGZzKQp7CiAgICAgICAgYXNtIHZvbGF0aWxlKCJtb3Z3ICV3MCwlJWZzIiA6IDogInIi
IChmcykpOwp9CgpleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgc2hvcnQgZ2V0X2dzKCkKewogICAg
ICAgIHVuc2lnbmVkIHNob3J0IGdzOwogICAgICAgIGFzbSB2b2xhdGlsZSgibW92dyAlJWdzLCV3
MCIgOiAiPXIiIChncykpOwogICAgICAgIHJldHVybiBnczsKfQpleHRlcm4gX19pbmxpbmUgdm9p
ZCBzZXRfZ3ModW5zaWduZWQgc2hvcnQgZ3MpCnsKICAgICAgICBhc20gdm9sYXRpbGUoIm1vdncg
JXcwLCUlZ3MiIDogOiAiciIgKGdzKSk7Cn0KCmV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBzaG9y
dCBnZXRfc3MoKQp7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc3M7CiAgICAgICAgYXNtIHZvbGF0
aWxlKCJtb3Z3ICUlc3MsJXcwIiA6ICI9ciIgKHNzKSk7CiAgICAgICAgcmV0dXJuIHNzOwp9CmV4
dGVybiBfX2lubGluZSB2b2lkIHNldF9zcyh1bnNpZ25lZCBzaG9ydCBzcykKewogICAgICAgIGFz
bSB2b2xhdGlsZSgibW92dyAldzAsJSVzcyIgOiA6ICJyIiAoc3MpKTsKfQojIDExOSAiLi4vc3Jj
L2xpYi9rZXJuL2luY2x1ZGUvZmx1eC94ODYvcGFnaW5nLmgiIDIKCgoKCnR5cGVkZWYgdW5zaWdu
ZWQgaW50IHB0X2VudHJ5X3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgcGRfZW50cnlfdDsKIyAx
NDYgIi4uL3NyYy9saWIva2Vybi9pbmNsdWRlL2ZsdXgveDg2L3BhZ2luZy5oIgpleHRlcm4gX19p
bmxpbmUgdm9pZCBwYWdpbmdfZW5hYmxlKHZtX29mZnNldF90IHBkaXIpCnsKCiAgICAgICAgKHsg
cmVnaXN0ZXIgdW5zaWduZWQgaW50IF90ZW1wX18gPSAocGRpcik7IGFzbSB2b2xhdGlsZSgibW92
ICUwLCAlJWNyMyIgOiA6ICJyIiAoX3RlbXBfXykpOyB9KTsKCgogICAgICAgIGFzbSB2b2xhdGls
ZSgibW92bCAgJTAsJSVjcjAJXG5cdCIKICAgICAgICAgICAgICAgICAgICAgImptcCAgIDFmCQlc
blx0IgogICAgICAgICAgICAgICAgICAgICAiMToJCVxuXHQiCiAgICAgICAgICAgICAgICAgICAg
IDogOiAiciIgKCh7IHJlZ2lzdGVyIHVuc2lnbmVkIGludCBfdGVtcF9fOyBhc20gdm9sYXRpbGUo
Im1vdiAlJWNyMCwgJTAiIDogIj1yIiAoX3RlbXBfXykpOyBfdGVtcF9fOyB9KSB8IDB4ODAwMDAw
MDApKTsKfQojIDE1ICJhdXRvL2ttZW0uaCIgMgoKIyAxICJhdXRvL2tlcm5fdHlwZXMuaCIgMQoj
IDEzICJhdXRvL2tlcm5fdHlwZXMuaCIKdGVtcGxhdGU8IHR5cGVuYW1lIF9UeSA+CnN0cnVjdCBQ
X3B0cgp7CgpwdWJsaWM6CgogIHR5cGVkZWYgX1R5ICpSYXdfdHlwZTsKICB0eXBlZGVmIHZtX29m
ZnNldF90IFVuc2lnbmVkX3R5cGU7CgogIFBfcHRyPCBfVHkgPiAmb3BlcmF0b3IgKysgKCkKICB7
CiAgICArK19fcHRyOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgUF9wdHI8IF9UeSA+ICZvcGVy
YXRvciAtLSAoKQogIHsKICAgIC0tX19wdHI7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBQX3B0
cjwgX1R5ID4gb3BlcmF0b3IgKysgKGludCkKICB7CiAgICByZXR1cm4gUF9wdHIoX19wdHIrKyk7
CiAgfQoKICBQX3B0cjwgX1R5ID4gb3BlcmF0b3IgLS0gKGludCkKICB7CiAgICByZXR1cm4gUF9w
dHIoX19wdHItLSk7CiAgfQoKICBQX3B0cjwgX1R5ID4gb3BlcmF0b3IgKyAoIFNtd29yZCBwZCAp
IGNvbnN0CiAgewogICAgcmV0dXJuIFBfcHRyKF9fcHRyICsgcGQpOwogIH0KCiAgUF9wdHI8IF9U
eSA+IG9wZXJhdG9yIC0gKCBTbXdvcmQgcGQgKSBjb25zdAogIHsKICAgIHJldHVybiBQX3B0cihf
X3B0ciAtIHBkKTsKICB9CgogIFBfcHRyPCBfVHkgPiAmb3BlcmF0b3IgKz0gKCBTbXdvcmQgcGQg
KQogIHsKICAgIF9fcHRyICs9IHBkOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgUF9wdHI8IF9U
eSA+ICZvcGVyYXRvciAtPSAoIFNtd29yZCBwZCApCiAgewogICAgX19wdHIgLT0gcGQ7CiAgICBy
ZXR1cm4gKnRoaXM7CiAgfQoKICBQX3B0cjwgX1R5ID4gb3BlcmF0b3IgJiAoIE13b3JkIG8gKQog
IHsKICAgIHJldHVybiAoX1R5KikoKE13b3JkKV9fcHRyICYgbyk7CiAgfQoKICBib29sIG9wZXJh
dG9yID09ICggUF9wdHIgY29uc3QgJm8gKSBjb25zdAogIHsKICAgIHJldHVybiAodm9pZCopX19w
dHIgPT0gKHZvaWQqKW8uX19wdHI7CiAgfQoKICBib29sIG9wZXJhdG9yICE9ICggUF9wdHIgY29u
c3QgJm8gKSBjb25zdAogIHsKICAgIHJldHVybiAodm9pZCopX19wdHIgIT0gKHZvaWQqKW8uX19w
dHI7CiAgfQoKICBib29sIGlzX251bGwoKSBjb25zdAogIHsKICAgIHJldHVybiBfX3B0ciA9PSAo
dm9pZCopKC0xKTsKICB9CgogIGJvb2wgaXNfaW52YWxpZCgpIGNvbnN0CiAgewogICAgcmV0dXJu
IF9fcHRyID09ICh2b2lkKikoLTEpOwogIH0KCiAgX1R5KiBnZXRfcmF3KCkgY29uc3QKICB7CiAg
ICByZXR1cm4gX19wdHI7CiAgfQoKICBVbnNpZ25lZF90eXBlIGdldF91bnNpZ25lZCgpIGNvbnN0
CiAgewogICAgcmV0dXJuIChVbnNpZ25lZF90eXBlKV9fcHRyOwogIH0KCiAgUF9wdHI8dm9pZD4g
dG9fdm9pZCgpIGNvbnN0CiAgewogICAgcmV0dXJuIFBfcHRyPHZvaWQ+KCh2b2lkKilfX3B0cik7
CiAgfQoKICBQX3B0cjwgX1R5ID4gb3BlcmF0b3IgPSAoX1R5ICpvKQogIHsKICAgIHJldHVybiBQ
X3B0cihfX3B0cj0gbyk7CiAgfQoKICBQX3B0cjwgX1R5ID4gb3BlcmF0b3IgPSAoUF9wdHI8X1R5
PiBjb25zdCAmbykKICB7CiAgICByZXR1cm4gUF9wdHIoX19wdHI9IG8uX19wdHIpOwogIH0KCiAg
dGVtcGxhdGU8IHR5cGVuYW1lIF9UbyA+CiAgc3RhdGljIFBfcHRyIGNhc3QoIFBfcHRyPCBfVG8g
PiBjb25zdCAmbykKICB7CiAgICByZXR1cm4gUF9wdHI8X1R5PihzdGF0aWNfY2FzdDxfVHkqPihv
LmdldF9yYXcoKSkpOwogIH0KCiAgZXhwbGljaXQgUF9wdHIoIE13b3JkIGFkZHIgKQogICAgOiBf
X3B0cigoX1R5KilhZGRyKQogIHt9CgogIFBfcHRyKCBfVHkgKnAgPSAoX1R5KikoLTEpICkKICAg
IDogX19wdHIocCkKICB7fQojIDEzNyAiYXV0by9rZXJuX3R5cGVzLmgiCiAgdGVtcGxhdGU8IHR5
cGVuYW1lIF9UbyA+CiAgUF9wdHIoIFBfcHRyPF9Ubz4gY29uc3QgJm8gKQogICAgOiBfX3B0cihv
LmdldF9yYXcoKSkKICB7fQoKcHJpdmF0ZToKCiAgX1R5ICpfX3B0cjsKCn07CiMgMTcgImF1dG8v
a21lbS5oIiAyCgoKCiMgMSAiLi4vc3JjL2tlcm4vY29uZmlnX2dkdC5oIiAxCiMgMjEgImF1dG8v
a21lbS5oIiAyCiMgMzAgImF1dG8va21lbS5oIgojIDEgIi4uL3NyYy9rZXJuL2lhMzIvbGlua2Vy
X3N5bXMuaCIgMQoKCgpleHRlcm4gIkMiIHsKICBleHRlcm4gY2hhciBfc3RhcnQsIF9ldGV4dCwg
X3NzdGFjaywgX3N0YWNrLCBfZWRhdGEsIF9lbmQ7CiAgZXh0ZXJuIGNoYXIgX3BoeXNtZW1fMTsK
ICBleHRlcm4gY2hhciBfdGNic18xOwogIGV4dGVybiBjaGFyIF9pb2JpdG1hcF8xOwogIGV4dGVy
biBjaGFyIF91bnVzZWQxXzEsIF91bnVzZWQyXzEsIF91bnVzZWQzXzEsIF91bnVzZWQ0X2lvXzE7
CiAgZXh0ZXJuIGNoYXIgX2lwY193aW5kb3cwXzEsIF9pcGNfd2luZG93MV8xOwogIGV4dGVybiBj
aGFyIF9zZXJ2aWNlOwp9CiMgMzEgImF1dG8va21lbS5oIiAyCgoKCgoKCnN0cnVjdCB4ODZfZ2F0
ZTsKc3RydWN0IHg4Nl90c3M7CnN0cnVjdCB4ODZfZGVzYzsKCgp2b2lkICpvcGVyYXRvciBuZXco
c2l6ZV90KTsKdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCAqYmxvY2spOwoKCmNsYXNzIGttZW0K
ewpwdWJsaWM6CiAgc3RhdGljIEtlcm5lbF9pbmZvICppbmZvKCk7CnByaXZhdGU6CgogIGZyaWVu
ZCBjbGFzcyBWbWVtX2FsbG9jOwpwdWJsaWM6CgoKCgogIHN0YXRpYyBjb25zdCB2bV9vZmZzZXRf
dCBtZW1fcGh5cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm1fb2Zmc2V0X3Q+KCZfcGh5c21lbV8xKTsK
CiAgc3RhdGljIGNvbnN0IHZtX29mZnNldF90IG1lbV90Y2JzID0gcmVpbnRlcnByZXRfY2FzdDx2
bV9vZmZzZXRfdD4oJl90Y2JzXzEpOwoKICBzdGF0aWMgY29uc3Qgdm1fb2Zmc2V0X3QgbWVtX3Vz
ZXJfbWF4ID0gMHhjMDAwMDAwMDsKCiAgc3RhdGljIGNvbnN0IHZtX29mZnNldF90IGlvX2JpdG1h
cCA9CiAgICAgcmVpbnRlcnByZXRfY2FzdDx2bV9vZmZzZXRfdD4oJl9pb2JpdG1hcF8xKTsKCgog
IHN0YXRpYyBjb25zdCB2bV9vZmZzZXRfdCBzZXJ2aWNlX3BhZ2UKICAgID0gcmVpbnRlcnByZXRf
Y2FzdDx2bV9vZmZzZXRfdD4oJl9zZXJ2aWNlKTsKCiAgc3RhdGljIGNvbnN0IHZtX29mZnNldF90
IGxvY2FsX2FwaWNfcGFnZSA9IHNlcnZpY2VfcGFnZTsKCiAgc3RhdGljIGNvbnN0IHZtX29mZnNl
dF90IGpkYl9hZGFwdGVyX3BhZ2UgPSBsb2NhbF9hcGljX3BhZ2UgKyAweDEwMDA7CgogIHN0YXRp
YyBjb25zdCB2bV9vZmZzZXRfdCB0YnVmX3N0YXR1c19wYWdlID0gamRiX2FkYXB0ZXJfcGFnZSAr
IDB4MTAwMDsKCgoKICBzdGF0aWMgY29uc3Qgdm1fb2Zmc2V0X3QgdGJ1Zl9idWZmZXJfYXJlYSA9
IHNlcnZpY2VfcGFnZSArIDB4MjAwMDAwOwoKICBzdGF0aWMgY29uc3Qgdm1fb2Zmc2V0X3QgaXBj
X3dpbmRvdzAKICAgID0gcmVpbnRlcnByZXRfY2FzdDx2bV9vZmZzZXRfdD4oJl9pcGNfd2luZG93
MF8xKTsKCiAgc3RhdGljIGNvbnN0IHZtX29mZnNldF90IGlwY193aW5kb3cxCiAgICA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dm1fb2Zmc2V0X3Q+KCZfaXBjX3dpbmRvdzFfMSk7CgoKCiAgc3RhdGljIHB0
X2VudHJ5X3QgKmpkYl9hZGFwdGVyX3B0OwoKCiAgZW51bSB7IGdkdF90c3MgPSAoMHgwOCksCiAg
ICBnZHRfY29kZV9rZXJuZWwgPSAoMHgxMCksIGdkdF9kYXRhX2tlcm5lbCA9ICgweDE4KSwKICAg
IGdkdF9jb2RlX3VzZXIgPSAoMHgyMCksIGdkdF9kYXRhX3VzZXIgPSAoMHgyOCksCiAgICBnZHRf
bWF4ID0gKDB4MzApIH07CgogIHRlbXBsYXRlPCB0eXBlbmFtZSBfVHkgPgogIHN0YXRpYyBfVHkg
KnBoeXNfdG9fdmlydCggUF9wdHI8X1R5PiApOwoKcHJvdGVjdGVkOgogIHN0YXRpYyBwZF9lbnRy
eV90ICprZGlyOwogIHN0YXRpYyBwZF9lbnRyeV90IGNwdV9nbG9iYWw7Cgpwcml2YXRlOgogIGZy
aWVuZCBjbGFzcyBrZGI7CiAgZnJpZW5kIGNsYXNzIGpkYjsKICBmcmllbmQgY2xhc3MgSmRiX2tl
cm5faW5mbzsKICBmcmllbmQgY2xhc3MgcHJvZmlsZTsKCiAga21lbSgpOwogIGttZW0oY29uc3Qg
a21lbSYpOwoKICBzdGF0aWMgdm1fb2Zmc2V0X3QgbWVtX21heCwgX2hpbWVtOwoKICBzdGF0aWMg
Y29uc3QgcGRfZW50cnlfdCBmbGFnX2dsb2JhbCA9IDB4MjAwOwoKICBzdGF0aWMgeDg2X2dhdGUg
KmtpZHQ7CiAgc3RhdGljIHg4Nl90c3Mgdm9sYXRpbGUgKnRzcyBhc20gKCJLTUVNX1RTUyIpOwog
IHN0YXRpYyB4ODZfZGVzYyAqZ2R0OwoKICBzdGF0aWMgS2VybmVsX2luZm8gKmtpbmZvOwoKICBz
dGF0aWMgVW5zaWduZWQ4ICppb19iaXRtYXBfZGVsaW1pdGVyOwoKcHVibGljOgojIDEzOCAiYXV0
by9rbWVtLmgiCiAgc3RhdGljIHZtX29mZnNldF90IHZpcnRfdG9fcGh5cyhjb25zdCB2b2lkICph
ZGRyKTsKCiAgc3RhdGljIHZvaWQgKiBsaW5lYXJfdmlydF90b19waHlzKGNvbnN0IHZvaWQgKmFk
ZHIpOwojIDE0OSAiYXV0by9rbWVtLmgiCiAgc3RhdGljIHZvaWQgKnBoeXNfdG9fdmlydCh2bV9v
ZmZzZXRfdCBhZGRyKTsKCgoKCgoKICBzdGF0aWMgdm9pZCBkaXJfaW5pdChwZF9lbnRyeV90ICpk
KTsKCgoKCiAgc3RhdGljIHZvaWQgdGxiX2ZsdXNoKHZtX29mZnNldF90IGFkZHIpOwoKCiAgc3Rh
dGljIHZvaWQgdGxiX2ZsdXNoKCk7CiMgMTczICJhdXRvL2ttZW0uaCIKICBzdGF0aWMgdm1fb2Zm
c2V0X3QgaXBjX3dpbmRvdyh1bnNpZ25lZCB3aW4pOwoKCgoKCgogIHN0YXRpYyBjb25zdCBwZF9l
bnRyeV90ICpkaXIoKTsKCgoKCgoKCiAgc3RhdGljIHBkX2VudHJ5X3QgcGRlX2dsb2JhbCgpOwoK
ICBzdGF0aWMgeDg2X2dhdGUgKmlkdCgpOwoKICBzdGF0aWMgdm1fb2Zmc2V0X3QgaGltZW0oKTsK
CgogIHN0YXRpYyB2bV9vZmZzZXRfdCB2b2xhdGlsZSAqa2VybmVsX2VzcCgpOwoKICBzdGF0aWMg
dm1fb2Zmc2V0X3QgaW9fYml0bWFwX2RlbGltaXRlcl9wYWdlKHZvaWQpOwoKCgogIHN0YXRpYyB2
b2lkIGluaXQoKTsKfTsKIyAyMTEgImF1dG8va21lbS5oIgojIDEgIi4uL3NyYy9saWIva2Vybi9p
bmNsdWRlL2ZsdXgveDg2L3Rzcy5oIiAxCiMgMzIgIi4uL3NyYy9saWIva2Vybi9pbmNsdWRlL2Zs
dXgveDg2L3Rzcy5oIgpzdHJ1Y3QgeDg2X3RzcyB7CiAgICAgICAgaW50IGJhY2tfbGluazsKCiAg
ICAgICAgaW50IGVzcDA7CiAgICAgICAgaW50IHNzMDsKICAgICAgICBpbnQgZXNwMTsKICAgICAg
ICBpbnQgc3MxOwogICAgICAgIGludCBlc3AyOwogICAgICAgIGludCBzczI7CiAgICAgICAgaW50
IGNyMzsKCiAgICAgICAgaW50IGVpcDsKICAgICAgICBpbnQgZWZsYWdzOwogICAgICAgIGludCBl
YXg7CiAgICAgICAgaW50IGVjeDsKICAgICAgICBpbnQgZWR4OwogICAgICAgIGludCBlYng7CiAg
ICAgICAgaW50IGVzcDsKICAgICAgICBpbnQgZWJwOwogICAgICAgIGludCBlc2k7CiAgICAgICAg
aW50IGVkaTsKICAgICAgICBpbnQgZXM7CiAgICAgICAgaW50IGNzOwogICAgICAgIGludCBzczsK
ICAgICAgICBpbnQgZHM7CiAgICAgICAgaW50IGZzOwogICAgICAgIGludCBnczsKICAgICAgICBp
bnQgbGR0OwogICAgICAgIHVuc2lnbmVkIHNob3J0IHRyYWNlX3RyYXA7CiAgICAgICAgdW5zaWdu
ZWQgc2hvcnQgaW9fYml0X21hcF9vZmZzZXQ7CgoKfTsKIyAyMTIgImF1dG8va21lbS5oIiAyCiMg
MjI3ICJhdXRvL2ttZW0uaCIKaW5saW5lIHZvaWQgKmttZW06OnBoeXNfdG9fdmlydCh2bV9vZmZz
ZXRfdCBhZGRyKQp7CiAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCAqPihhZGRyICsgbWVt
X3BoeXMpOwp9CgoKCgoKaW5saW5lIHZvaWQga21lbTo6dGxiX2ZsdXNoKHZtX29mZnNldF90IGFk
ZHIpCnsKICBhc20gdm9sYXRpbGUKICAgICgiaW52bHBnICUwIiA6IDogIm0iICgqKGNoYXIqKWFk
ZHIpIDogIm1lbW9yeSIpOwp9CgoKCgppbmxpbmUgdm9pZCBrbWVtOjp0bGJfZmx1c2goKQp7Cgog
IHVuc2lnbmVkIGR1bW15OwogIGFzbSB2b2xhdGlsZSAoIiBtb3YgJSVjcjMsJTA7IG1vdiAlMCwl
JWNyMyAiIDogIj1yIihkdW1teSkgKTsKfQojIDI2MSAiYXV0by9rbWVtLmgiCmlubGluZSB2bV9v
ZmZzZXRfdAprbWVtOjppcGNfd2luZG93KHVuc2lnbmVkIHdpbikKewogIGlmICh3aW4gPT0gMCkK
ICAgIHJldHVybiBpcGNfd2luZG93MDsKCiAgcmV0dXJuIGlwY193aW5kb3cxOwp9CgoKCgoKCgpp
bmxpbmUgY29uc3QgcGRfZW50cnlfdCAqa21lbTo6ZGlyKCkKewogIHJldHVybiBrZGlyOwp9CiMg
Mjg4ICJhdXRvL2ttZW0uaCIKaW5saW5lIHBkX2VudHJ5X3Qga21lbTo6cGRlX2dsb2JhbCgpCnsK
ICByZXR1cm4gY3B1X2dsb2JhbDsKfQoKCgppbmxpbmUgeDg2X2dhdGUgKmttZW06OmlkdCgpCnsK
ICByZXR1cm4ga2lkdDsKfQoKCgppbmxpbmUgdm1fb2Zmc2V0X3Qga21lbTo6aGltZW0oKQp7CiAg
cmV0dXJuIF9oaW1lbTsKfQoKCgoKaW5saW5lIHZtX29mZnNldF90IHZvbGF0aWxlICprbWVtOjpr
ZXJuZWxfZXNwKCkKewogIHJldHVybiByZWludGVycHJldF9jYXN0PHZtX29mZnNldF90IHZvbGF0
aWxlICo+KCYgdHNzLT5lc3AwKTsKfQoKCgppbmxpbmUgdm1fb2Zmc2V0X3Qga21lbTo6aW9fYml0
bWFwX2RlbGltaXRlcl9wYWdlKHZvaWQpCnsKICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2bV9v
ZmZzZXRfdD4oaW9fYml0bWFwX2RlbGltaXRlcik7Cn0KIyAzMzEgImF1dG8va21lbS5oIgp0ZW1w
bGF0ZTwgdHlwZW5hbWUgX1R5ID4gaW5saW5lIF9UeSAqa21lbTo6cGh5c190b192aXJ0KCBQX3B0
cjxfVHk+IGFkZHIpCnsKICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxfVHkgKj4oYWRkci5nZXRf
dW5zaWduZWQoKSArIG1lbV9waHlzKTsKfQoKCgoKCmlubGluZSBLZXJuZWxfaW5mbyAqa21lbTo6
aW5mbygpCnsKICByZXR1cm4ga2luZm87Cn0KIyA0MSAiYXV0by90aHJlYWRpZC5oIiAyCiMgMSAi
YXV0by90aHJlYWRfdXRpbC5oIiAxCiMgMTMgImF1dG8vdGhyZWFkX3V0aWwuaCIKY2xhc3MgVGhy
ZWFkOwoKVGhyZWFkKiBsb29rdXBfdGhyZWFkKEw0X3VpZCBpZCk7CgpUaHJlYWQqIGxvb2t1cF9m
aXJzdF90aHJlYWQodW5zaWduZWQgc3BhY2UpOwojIDM0ICJhdXRvL3RocmVhZF91dGlsLmgiCmlu
bGluZSBUaHJlYWQqCmxvb2t1cF90aHJlYWQoTDRfdWlkIGlkKQp7CiAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8VGhyZWFkICo+CiAgICAoaWQuaXNfaW52YWxpZCgpCiAgICAgPyAwCiAgICAgOiBr
bWVtOjptZW1fdGNicyB8ICgoaWQuZ3RocmVhZCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
KiBDb25maWc6OnRocmVhZF9ibG9ja19zaXplKQogICAgICAgICAgICAgICAgICAgICAgICAgJiB+
Q29uZmlnOjp0aHJlYWRfYmxvY2tfbWFzaykpOwp9CgoKCmlubGluZSBUaHJlYWQqCmxvb2t1cF9m
aXJzdF90aHJlYWQodW5zaWduZWQgc3BhY2UpCnsKICByZXR1cm4gbG9va3VwX3RocmVhZCggTDRf
dWlkKCBzcGFjZSwgMCApICk7Cn0KIyA0MiAiYXV0by90aHJlYWRpZC5oIiAyCiMgNTEgImF1dG8v
dGhyZWFkaWQuaCIKaW5saW5lIHRocmVhZGlkX3Q6OnRocmVhZGlkX3QoTDRfdWlkIGNvbnN0ICpw
dWJsaWNfaWQpCiAgOiB0IChsb29rdXBfdGhyZWFkICgqcHVibGljX2lkKSkKeyB9CgoKCmlubGlu
ZSB0aHJlYWRpZF90Ojp0aHJlYWRpZF90KEw0X3VpZCBwdWJsaWNfaWQpCiAgOiB0IChsb29rdXBf
dGhyZWFkIChwdWJsaWNfaWQpKQp7IH0KCgoKaW5saW5lIHRocmVhZGlkX3Q6OnRocmVhZGlkX3Qo
VGhyZWFkKiB0aHJlYWQpCiAgOiB0KHRocmVhZCkKeyB9CgoKCmlubGluZSBUaHJlYWQgKiB0aHJl
YWRpZF90Ojpsb29rdXAoKSBjb25zdAp7IHJldHVybiB0OyB9CgoKCmlubGluZSBib29sCnRocmVh
ZGlkX3Q6OmlzX25pbCgpIGNvbnN0CnsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQg
bG9uZz4odCkgPT0ga21lbTo6bWVtX3RjYnM7IH0KCgoKaW5saW5lIGJvb2wKdGhyZWFkaWRfdDo6
aXNfdmFsaWQoKSBjb25zdAp7IHJldHVybiB0OyB9CiMgMTIgImF1dG8vdGhyZWFkLmgiIDIKIyAx
ICJhdXRvL3NwYWNlLmgiIDEKCgoKCgoKIyAxICJhdXRvL3NwYWNlX2luZGV4LmgiIDEKIyAxMSAi
YXV0by9zcGFjZV9pbmRleC5oIgpjbGFzcyBTcGFjZTsKY2xhc3MgU3BhY2VfcmVnaXN0cnk7Cgpj
bGFzcyBTcGFjZV9pbmRleAp7CnB1YmxpYzoKICBlbnVtIHsgbWF4X3NwYWNlX251bWJlciA9IDEg
PDwgMTEgfTsKCnByaXZhdGU6CgogIHN0YXRpYyBTcGFjZV9yZWdpc3RyeSogc3BhY2VzOwoKCiAg
dW5zaWduZWQgc3BhY2VfaWQ7CgpwdWJsaWM6CiAgZXhwbGljaXQgU3BhY2VfaW5kZXgodW5zaWdu
ZWQgbnVtYmVyKTsKCgogIG9wZXJhdG9yIHVuc2lnbmVkICgpOwoKICBTcGFjZSAqIGxvb2t1cCgp
OwoKICBib29sIHNldF9jaGllZihTcGFjZV9pbmRleCBvbGRfY2hpZWYsIFNwYWNlX2luZGV4IG5l
d19jaGllZik7CgogIFNwYWNlX2luZGV4IGNoaWVmKCk7CgogIHN0YXRpYyBib29sIGFkZChTcGFj
ZSAqbmV3X3NwYWNlLCB1bnNpZ25lZCBuZXdfbnVtYmVyKTsKCiAgc3RhdGljIGJvb2wgZGVsKFNw
YWNlX2luZGV4IG51bWJlciwgU3BhY2VfaW5kZXggY2hpZWYpOwp9OwojIDUwICJhdXRvL3NwYWNl
X2luZGV4LmgiCiMgMSAiYXV0by9hdG9taWMuaCIgMQojIDE1ICJhdXRvL2F0b21pYy5oIgpleHRl
cm4gIkMiIHZvaWQgY2FzX2Vycm9yX3R5cGVfd2l0aF9iYWRfc2l6ZV91c2VkKHZvaWQpOwoKCgoK
Cgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVHlwZSA+IGJvb2wgdXBfY2FzKCBUeXBlICpwdHIsIFR5cGUg
b2xkdmFsLCBUeXBlIG5ld3ZhbCApOwoKdGVtcGxhdGU8IHR5cGVuYW1lIFR5cGUgPiBib29sIHNt
cF9jYXMoIFR5cGUgKnB0ciwgVHlwZSBvbGR2YWwsIFR5cGUgbmV3dmFsICk7Cgp0ZW1wbGF0ZTwg
dHlwZW5hbWUgVHlwZSA+IGJvb2wgdXBfY2FzMiggVHlwZSAqcHRyLCBUeXBlICpvbGR2YWwsIFR5
cGUgKm5ld3ZhbCApOwoKdGVtcGxhdGU8IHR5cGVuYW1lIFR5cGUgPiBib29sIHNtcF9jYXMyKCBU
eXBlICpwdHIsIFR5cGUgKm9sZHZhbCwgVHlwZSAqbmV3dmFsICk7CgoKCgoKCgpib29sIHVwX2Nh
c191bnNhdmUoIE13b3JkICpwdHIsIE13b3JkIG9sZHZhbCwgTXdvcmQgbmV3dmFsICk7Cgpib29s
IHNtcF9jYXNfdW5zYXZlKCBNd29yZCAqcHRyLCBNd29yZCBvbGR2YWwsIE13b3JkIG5ld3ZhbCAp
OwoKYm9vbCB1cF9jYXMyX3Vuc2F2ZSggTXdvcmQgKnB0ciwgTXdvcmQgKm9sZHZhbCwgTXdvcmQg
Km5ld3ZhbCApOwoKYm9vbCBzbXBfY2FzMl91bnNhdmUoIE13b3JkICpwdHIsIE13b3JkICpvbGR2
YWwsIE13b3JkICpuZXd2YWwgKTsKCmJvb2wgdXBfdGFzKCBNd29yZCAqbCApOwoKYm9vbCBzbXBf
dGFzKCBNd29yZCAqbCApOwojIDU1ICJhdXRvL2F0b21pYy5oIgp0ZW1wbGF0ZTwgdHlwZW5hbWUg
VHlwZSA+IGlubGluZSBib29sIHVwX2NhcyggVHlwZSAqcHRyLCBUeXBlIG9sZHZhbCwgVHlwZSBu
ZXd2YWwgKQp7CiAgaWYoIChzaXplb2YoVHlwZSkpICE9IChzaXplb2YoTXdvcmQpKSApIGNhc19l
cnJvcl90eXBlX3dpdGhfYmFkX3NpemVfdXNlZCgpOwogIHJldHVybiB1cF9jYXNfdW5zYXZlKHJl
aW50ZXJwcmV0X2Nhc3Q8TXdvcmQqPihwdHIpLAogICAgICAgICAgICAgICAgICAgICAgICpyZWlu
dGVycHJldF9jYXN0PE13b3JkKj4oJm9sZHZhbCksCiAgICAgICAgICAgICAgICAgICAgICAgKnJl
aW50ZXJwcmV0X2Nhc3Q8TXdvcmQqPigmbmV3dmFsKSk7Cn0KCgoKdGVtcGxhdGU8IHR5cGVuYW1l
IFR5cGUgPiBpbmxpbmUgYm9vbCBzbXBfY2FzKCBUeXBlICpwdHIsIFR5cGUgb2xkdmFsLCBUeXBl
IG5ld3ZhbCApCnsKICBpZiggKHNpemVvZihUeXBlKSkgIT0gKHNpemVvZihNd29yZCkpICkgY2Fz
X2Vycm9yX3R5cGVfd2l0aF9iYWRfc2l6ZV91c2VkKCk7CiAgcmV0dXJuIHNtcF9jYXNfdW5zYXZl
KHJlaW50ZXJwcmV0X2Nhc3Q8TXdvcmQqPihwdHIpLAogICAgICAgICAgICAgICAgICAgICAgICAq
cmVpbnRlcnByZXRfY2FzdDxNd29yZCo+KCZvbGR2YWwpLAogICAgICAgICAgICAgICAgICAgICAg
ICAqcmVpbnRlcnByZXRfY2FzdDxNd29yZCo+KCZuZXd2YWwpKTsKfQoKCgp0ZW1wbGF0ZTwgdHlw
ZW5hbWUgVHlwZSA+IGlubGluZSBib29sIHVwX2NhczIoIFR5cGUgKnB0ciwgVHlwZSAqb2xkdmFs
LCBUeXBlICpuZXd2YWwgKQp7CiAgaWYoIChzaXplb2YoVHlwZSkpICE9ICgoc2l6ZW9mKE13b3Jk
KSoyKSkgKSBjYXNfZXJyb3JfdHlwZV93aXRoX2JhZF9zaXplX3VzZWQoKTsKICByZXR1cm4gdXBf
Y2FzMl91bnNhdmUocmVpbnRlcnByZXRfY2FzdDxNd29yZCo+KHB0ciksCiAgICAgICAgICAgICAg
ICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8TXdvcmQqPihvbGR2YWwpLAogICAgICAgICAgICAg
ICAgICAgICAgICByZWludGVycHJldF9jYXN0PE13b3JkKj4obmV3dmFsKSk7Cn0KCgoKdGVtcGxh
dGU8IHR5cGVuYW1lIFR5cGUgPiBpbmxpbmUgYm9vbCBzbXBfY2FzMiggVHlwZSAqcHRyLCBUeXBl
ICpvbGR2YWwsIFR5cGUgKm5ld3ZhbCApCnsKICBpZiggKHNpemVvZihUeXBlKSkgIT0gKChzaXpl
b2YoTXdvcmQpKjIpKSApIGNhc19lcnJvcl90eXBlX3dpdGhfYmFkX3NpemVfdXNlZCgpOwogIHJl
dHVybiBzbXBfY2FzMl91bnNhdmUocmVpbnRlcnByZXRfY2FzdDxNd29yZCo+KHB0ciksCiAgICAg
ICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PE13b3JkKj4ob2xkdmFsKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8TXdvcmQqPihuZXd2YWwpKTsK
fQojIDEwMiAiYXV0by9hdG9taWMuaCIKaW5saW5lIGJvb2wgdXBfY2FzX3Vuc2F2ZSggTXdvcmQg
KnB0ciwgTXdvcmQgb2xkdmFsLCBNd29yZCBuZXd2YWwgKQp7CiAgTXdvcmQgdG1wOwoKICBhc20g
dm9sYXRpbGUKICAgICgiY21weGNoZ2wgJTEsJTIiCiAgICAgOiAiPWEiICh0bXApCiAgICAgOiAi
ciIgKG5ld3ZhbCksICJtIiAoKnB0ciksICIwIiAob2xkdmFsKQogICAgIDogIm1lbW9yeSIpOwoK
ICByZXR1cm4gdG1wID09IG9sZHZhbDsKfQoKCgppbmxpbmUgYm9vbCBzbXBfY2FzX3Vuc2F2ZSgg
TXdvcmQgKnB0ciwgTXdvcmQgb2xkdmFsLCBNd29yZCBuZXd2YWwgKQp7CiAgcmV0dXJuIHVwX2Nh
c191bnNhdmUocHRyLG9sZHZhbCxuZXd2YWwpOwp9CgoKCmlubGluZSBib29sIHVwX2NhczJfdW5z
YXZlKCBNd29yZCAqcHRyLCBNd29yZCAqb2xkdmFsLCBNd29yZCAqbmV3dmFsICkKewogIGNoYXIg
cmV0OwogIGFzbSB2b2xhdGlsZQogICAgKCJjbXB4Y2hnOGIgJTMgOyBzZXRlICUlY2wiCiAgICAg
OiAiPWMiIChyZXQpLAogICAgICAgIj1hIiAoKiBvbGR2YWwpLAogICAgICAgIj1kIiAoKihvbGR2
YWwrMSkpCiAgICAgOiAibSIgKCpwdHIpICwKICAgICAgICIxIiAoKiBvbGR2YWwpLAogICAgICAg
IjIiICgqKG9sZHZhbCsxKSksCiAgICAgICAiYiIgKCogbmV3dmFsKSwKICAgICAgICIwIiAoKihu
ZXd2YWwrMSkpCiAgICAgOiAibWVtb3J5Iik7CgogIHJldHVybiByZXQ7Cn0KCgoKaW5saW5lIGJv
b2wgc21wX2NhczJfdW5zYXZlKCBNd29yZCAqcHRyLCBNd29yZCAqb2xkdmFsLCBNd29yZCAqbmV3
dmFsICkKewogIHJldHVybiB1cF9jYXMyX3Vuc2F2ZShwdHIsb2xkdmFsLG5ld3ZhbCk7Cn0KCgoK
aW5saW5lIGJvb2wgdXBfdGFzKCBNd29yZCAqbCApCnsKICBNd29yZCB0bXA7CiAgYXNtIHZvbGF0
aWxlCiAgICAoInhjaGcgJTAsJTEiIDogIj1yIiAodG1wKSA6ICJtIiAoKmwpLCAiMCIgKDEpCiAg
ICAgOiAibWVtb3J5Iik7CgogIHJldHVybiB0bXA7Cn0KCgoKaW5saW5lIGJvb2wgc21wX3Rhcygg
TXdvcmQgKmwgKQp7CiAgcmV0dXJuIHVwX3RhcyhsKTsKfQojIDUxICJhdXRvL3NwYWNlX2luZGV4
LmgiIDIKCiMgMSAiLi4vc3JjL2xpYi9taW5pbGliYy9pbmNsdWRlL2Nhc3NlcnQiIDEKCgoKCgoj
IDEgIi4uL3NyYy9saWIvbWluaWxpYmMvaW5jbHVkZS9hc3NlcnQuaCIgMQoKCgoKCmV4dGVybiAi
QyIgewoKdm9pZCBfX2Fzc2VydF9mYWlsIChjb25zdCBjaGFyICpfX2Fzc2VydGlvbiwgY29uc3Qg
Y2hhciAqX19maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19s
aW5lLCBjb25zdCBjaGFyICpfX2Z1bmN0aW9uKQogICAgIF9fYXR0cmlidXRlX18gKChfX25vcmV0
dXJuX18pKTsKCn0KIyA3ICIuLi9zcmMvbGliL21pbmlsaWJjL2luY2x1ZGUvY2Fzc2VydCIgMgoj
IDUzICJhdXRvL3NwYWNlX2luZGV4LmgiIDIKIyA2MSAiYXV0by9zcGFjZV9pbmRleC5oIgppbmxp
bmUgU3BhY2VfaW5kZXg6OlNwYWNlX2luZGV4KHVuc2lnbmVkIG51bWJlcikKCiAgOiBzcGFjZV9p
ZChudW1iZXIpCnsgfQoKCgppbmxpbmUgU3BhY2VfaW5kZXg6Om9wZXJhdG9yIHVuc2lnbmVkICgp
CnsgcmV0dXJuIHNwYWNlX2lkOyB9CgoKCgpzdHJ1Y3QgU3BhY2VfcmVnaXN0cnkKewogIHVuaW9u
IHsKICAgIFNwYWNlICpzcGFjZTsKICAgIHN0cnVjdCB7CiAgICAgIHVuc2lnbmVkIGRlYWQgOiAx
OwogICAgICB1bnNpZ25lZCBjaGllZiA6IDMxOwogICAgfSBzdGF0ZTsKICB9OwoKCnB1YmxpYzoK
CiAgU3BhY2VfcmVnaXN0cnkoKTsKfTsKCgoKaW5saW5lIFNwYWNlICoKU3BhY2VfaW5kZXg6Omxv
b2t1cCgpCnsKICBpZiAoc3BhY2VzW3NwYWNlX2lkXS5zdGF0ZS5kZWFkKQogICAgcmV0dXJuIDA7
CgogIHJldHVybiBzcGFjZXNbc3BhY2VfaWRdLnNwYWNlOwp9CgoKCgppbmxpbmUgU3BhY2VfcmVn
aXN0cnk6OlNwYWNlX3JlZ2lzdHJ5KCkKewogIHN0YXRlLmNoaWVmID0gMDsKICBzdGF0ZS5kZWFk
ID0gMTsKfQoKCgppbmxpbmUgYm9vbApTcGFjZV9pbmRleDo6c2V0X2NoaWVmKFNwYWNlX2luZGV4
IG9sZF9jaGllZiwgU3BhY2VfaW5kZXggbmV3X2NoaWVmKQp7CiAgU3BhY2VfcmVnaXN0cnkgbyhz
cGFjZXNbc3BhY2VfaWRdKTsKCiAgaWYgKCEgby5zdGF0ZS5kZWFkIHx8IG8uc3RhdGUuY2hpZWYg
IT0gb2xkX2NoaWVmKQogICAgcmV0dXJuIGZhbHNlOwoKICBTcGFjZV9yZWdpc3RyeSBuOwogIG4u
c3RhdGUuY2hpZWYgPSBuZXdfY2hpZWY7CgogIHJldHVybiBzbXBfY2FzKCZzcGFjZXNbc3BhY2Vf
aWRdLCBvLCBuKTsKfQoKCgppbmxpbmUgU3BhY2VfaW5kZXgKU3BhY2VfaW5kZXg6OmNoaWVmKCkK
ewogICgodm9pZCkgKChzcGFjZXNbc3BhY2VfaWRdLnN0YXRlLmRlYWQpID8gMCA6IChfX2Fzc2Vy
dF9mYWlsICgic3BhY2VzW3NwYWNlX2lkXS5zdGF0ZS5kZWFkIiwgImF1dG8vc3BhY2VfaW5kZXgu
aCIsIDEzMSwgKChjb25zdCBjaGFyICopIDApKSwgMCkpKTsKCiAgcmV0dXJuIFNwYWNlX2luZGV4
KHNwYWNlc1tzcGFjZV9pZF0uc3RhdGUuY2hpZWYpOwp9CgoKCmlubGluZSBib29sClNwYWNlX2lu
ZGV4OjphZGQoU3BhY2UgKm5ld19zcGFjZSwgdW5zaWduZWQgbmV3X251bWJlcikKewogIFNwYWNl
X3JlZ2lzdHJ5IG8oc3BhY2VzW25ld19udW1iZXJdKTsKICAoKHZvaWQpICgoby5zdGF0ZS5kZWFk
KSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIm8uc3RhdGUuZGVhZCIsICJhdXRvL3NwYWNlX2luZGV4
LmgiLCAxNDIsICgoY29uc3QgY2hhciAqKSAwKSksIDApKSk7CgogIFNwYWNlX3JlZ2lzdHJ5IG47
CiAgbi5zcGFjZSA9IG5ld19zcGFjZTsKCiAgcmV0dXJuIHNtcF9jYXMoJnNwYWNlc1tuZXdfbnVt
YmVyXSwgbywgbik7Cn0KCgoKaW5saW5lIGJvb2wKU3BhY2VfaW5kZXg6OmRlbChTcGFjZV9pbmRl
eCBudW1iZXIsIFNwYWNlX2luZGV4IGNoaWVmKQp7CiAgKCh2b2lkKSAoKG51bWJlciA8IG1heF9z
cGFjZV9udW1iZXIpID8gMCA6IChfX2Fzc2VydF9mYWlsICgibnVtYmVyIDwgbWF4X3NwYWNlX251
bWJlciIsICJhdXRvL3NwYWNlX2luZGV4LmgiLCAxNTUsICgoY29uc3QgY2hhciAqKSAwKSksIDAp
KSk7CiAgKCh2b2lkKSAoKCEgc3BhY2VzW251bWJlcl0uc3RhdGUuZGVhZCkgPyAwIDogKF9fYXNz
ZXJ0X2ZhaWwgKCIhIHNwYWNlc1tudW1iZXJdLnN0YXRlLmRlYWQiLCAiYXV0by9zcGFjZV9pbmRl
eC5oIiwgMTU2LCAoKGNvbnN0IGNoYXIgKikgMCkpLCAwKSkpOwoKCiAgc3BhY2VzW251bWJlcl0u
c3RhdGUuZGVhZCA9IDE7CiAgc3BhY2VzW251bWJlcl0uc3RhdGUuY2hpZWYgPSBjaGllZjsKCiAg
cmV0dXJuIHRydWU7Cn0KIyA4ICJhdXRvL3NwYWNlLmgiIDIKIyAxICJhdXRvL3NwYWNlX2NvbnRl
eHQuaCIgMQojIDIwICJhdXRvL3NwYWNlX2NvbnRleHQuaCIKY2xhc3MgU3BhY2VfY29udGV4dAp7
CnByb3RlY3RlZDoKCiAgcGRfZW50cnlfdCBfZGlyWzEwMjRdOwoKcHVibGljOgogIFNwYWNlX2Nv
bnRleHQoKTsKCiAgc3RhdGljIFNwYWNlX2NvbnRleHQgKiBjdXJyZW50KCk7CgogIHZvaWQgbWFr
ZV9jdXJyZW50KCk7CgogIHZtX29mZnNldF90IGxvb2t1cCh2bV9vZmZzZXRfdCBhKSBjb25zdDsK
CiAgY29uc3QgcGRfZW50cnlfdCogZGlyKCkgY29uc3Q7CgogIHZvaWQgc3dpdGNoaW5fY29udGV4
dCgpOwp9OwojIDQ3ICJhdXRvL3NwYWNlX2NvbnRleHQuaCIKIyAxICJhdXRvL2dsb2JhbHMuaCIg
MQojIDE3ICJhdXRvL2dsb2JhbHMuaCIKY2xhc3MgQ29udGV4dDsKY2xhc3MgVGhyZWFkOwpjbGFz
cyBTcGFjZTsKCgpleHRlcm4gVGhyZWFkICpzaWdtYTBfdGhyZWFkLCAqa2VybmVsX3RocmVhZCwg
Km5pbF90aHJlYWQ7CmV4dGVybiBTcGFjZSAqc2lnbWEwOwpleHRlcm4gYm9vbCBydW5uaW5nOwoj
IDQ0ICJhdXRvL2dsb2JhbHMuaCIKQ29udGV4dCAqY29udGV4dF9vZihjb25zdCB2b2lkICpwdHIp
OwoKQ29udGV4dCAqY3VycmVudCgpOwojIDY2ICJhdXRvL2dsb2JhbHMuaCIKaW5saW5lIENvbnRl
eHQgKmNvbnRleHRfb2YoY29uc3Qgdm9pZCAqcHRyKQp7CiAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8Q29udGV4dCAqPgogICAgKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgbG9uZz4ocHRyKSAm
IH4oQ29uZmlnOjp0aHJlYWRfYmxvY2tfc2l6ZSAtIDEpKTsKfQoKCgppbmxpbmUgQ29udGV4dCAq
Y3VycmVudCgpCnsKICB2b2lkKiBlc3A7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18KICAgICgibW92
bCAlJWVzcCwgJTAiIDogIj1xIiAoZXNwKSk7CgogIHJldHVybiBjb250ZXh0X29mIChlc3ApOwp9
CiMgNDggImF1dG8vc3BhY2VfY29udGV4dC5oIiAyCiMgNTYgImF1dG8vc3BhY2VfY29udGV4dC5o
IgppbmxpbmUgU3BhY2VfY29udGV4dCAqIFNwYWNlX2NvbnRleHQ6OmN1cnJlbnQoKQp7CiAgQWRk
cmVzcyBzYzsKICBhc20gKCIgbW92ICUlY3IzLCAlMCIgOiAiPXIiKHNjKSApOwogIHJldHVybiBy
ZWludGVycHJldF9jYXN0PFNwYWNlX2NvbnRleHQqPihrbWVtOjpwaHlzX3RvX3ZpcnQoc2MpKTsK
fQoKCgppbmxpbmUgdm9pZCBTcGFjZV9jb250ZXh0OjptYWtlX2N1cnJlbnQoKQp7CiAgYXNtIHZv
bGF0aWxlICgiIG1vdiAlMCwgJSVjcjMiIDogOiAiciIoa21lbTo6dmlydF90b19waHlzKHRoaXMp
KSApOwp9CgoKCmlubGluZSB2bV9vZmZzZXRfdApTcGFjZV9jb250ZXh0Ojpsb29rdXAodm1fb2Zm
c2V0X3QgYSkgY29uc3QKewojIDg0ICJhdXRvL3NwYWNlX2NvbnRleHQuaCIKICBwZF9lbnRyeV90
IHAgPSBfZGlyWyhhID4+IDIyKSAmIDB4M2ZmXTsKICBpZiAoISAocCAmIDB4MDAwMDAwMDEpKSBy
ZXR1cm4gMHhmZmZmZmZmZjsKICBpZiAocCAmIDB4MDAwMDAwODApIHJldHVybiAocCAmIENvbmZp
Zzo6U1VQRVJQQUdFX01BU0spCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKGEg
JiB+Q29uZmlnOjpTVVBFUlBBR0VfTUFTSyk7CiAgcHRfZW50cnlfdCB0ID0gcmVpbnRlcnByZXRf
Y2FzdDxwdF9lbnRyeV90ICo+CiAgICAoKHAgJiBDb25maWc6OlBBR0VfTUFTSykgKyBrbWVtOjpt
ZW1fcGh5cylbKGEgPj4gMTIpICYgMHgzZmZdOwoKICByZXR1cm4gKHQgJiAweDAwMDAwMDAxKSA/
ICh0ICYgQ29uZmlnOjpQQUdFX01BU0spIHwgKGEgJiB+Q29uZmlnOjpQQUdFX01BU0spCiAgICA6
IDB4ZmZmZmZmZmY7Cn0KCgoKaW5saW5lIGNvbnN0IHBkX2VudHJ5X3QqClNwYWNlX2NvbnRleHQ6
OmRpcigpIGNvbnN0CnsKICByZXR1cm4gX2RpcjsKfQoKCgppbmxpbmUgdm9pZApTcGFjZV9jb250
ZXh0Ojpzd2l0Y2hpbl9jb250ZXh0KCkKewoKICBib29sIG5lZWRfZmx1c2hfdGxiID0gZmFsc2U7
CgogIHVuc2lnbmVkIGluZGV4ID0gKGttZW06OmlwY193aW5kb3coMCkgPj4gMjIpICYgMHgzZmY7
CgogIGlmIChfZGlyW2luZGV4XSB8fCBfZGlyIFtpbmRleCArIDFdKQogICAgewogICAgICBfZGly
W2luZGV4XSA9IDA7CiAgICAgIF9kaXJbaW5kZXggKyAxXSA9IDA7CiAgICAgIG5lZWRfZmx1c2hf
dGxiID0gdHJ1ZTsKICAgIH0KCiAgaW5kZXggPSAoa21lbTo6aXBjX3dpbmRvdygxKSA+PiAyMikg
JiAweDNmZjsKCiAgaWYgKF9kaXJbaW5kZXhdIHx8IF9kaXIgW2luZGV4ICsgMV0pCiAgICB7CiAg
ICAgIF9kaXJbaW5kZXhdID0gMDsKICAgICAgX2RpcltpbmRleCArIDFdID0gMDsKICAgICAgbmVl
ZF9mbHVzaF90bGIgPSB0cnVlOwogICAgfQoKICBpZiAobmVlZF9mbHVzaF90bGIKICAgICAgfHwg
U3BhY2VfY29udGV4dDo6Y3VycmVudCgpICE9IHRoaXMpCiAgICB7CiAgICAgIG1ha2VfY3VycmVu
dCgpOwogICAgfQp9CiMgOSAiYXV0by9zcGFjZS5oIiAyCiMgMjIgImF1dG8vc3BhY2UuaCIKY2xh
c3MgU3BhY2UgOiBwdWJsaWMgU3BhY2VfY29udGV4dAp7CnB1YmxpYzoKCiAgZW51bSBzdGF0dXNf
dCB7CiAgICBJbnNlcnRfb2sgPSAwLAogICAgSW5zZXJ0X3dhcm5fZXhpc3RzLAogICAgSW5zZXJ0
X3dhcm5fYXR0cmliX3VwZ3JhZGUsCiAgICBJbnNlcnRfZXJyX25vbWVtLAogICAgSW5zZXJ0X2Vy
cl9leGlzdHMKICB9OwoKCiAgZW51bSBwYWdlX2F0dHJpYl90IHsKICAgIFBhZ2Vfbm9fYXR0cmli
cyA9IDAsCiAgICBQYWdlX3dyaXRhYmxlID0gMHgwMDAwMDAwMiwKICAgIFBhZ2Vfbm9uY2FjaGVh
YmxlID0gMHgwMDAwMDAxMCB8IDB4MDAwMDAwMDgsCgogICAgUGFnZV91c2VyX2FjY2Vzc2libGUg
PSAweDAwMDAwMDA0LAoKCiAgICBQYWdlX2FsbF9hdHRyaWJzID0gUGFnZV93cml0YWJsZSB8IFBh
Z2Vfbm9uY2FjaGVhYmxlIHwgUGFnZV91c2VyX2FjY2Vzc2libGUKICB9OwoKcHJpdmF0ZToKICBT
cGFjZSgpOwogIFNwYWNlKGNvbnN0IFNwYWNlJik7CgoKICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
bG9uZyBudW1iZXJfaW5kZXgKICAgID0gKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgbG9uZz4o
Jl91bnVzZWQxXzEpID4+IDIyKSAmIDB4M2ZmOwogIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25n
IGNoaWVmX2luZGV4CiAgICA9IChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGxvbmc+KCZfdW51
c2VkMl8xKSA+PiAyMikgJiAweDNmZjsKCiAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgaW9f
Y291bnRlcl9wZF9pbmRleAogICAgPSAocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBsb25nPigm
X3VudXNlZDRfaW9fMSkgPj4gMjIpICYgMHgzZmY7CiAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxv
bmcgaW9fY291bnRlcl9wdF9pbmRleAogICAgPSAocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBs
b25nPigmX3VudXNlZDRfaW9fMSkgPj4gMTIpICYgMHgzZmY7CgpwdWJsaWM6CgoKCgogIFNwYWNl
X2luZGV4IHNwYWNlKCkgY29uc3Q7CgoKCgogIFNwYWNlX2luZGV4IGNoaWVmKCkgY29uc3Q7CiMg
ODMgImF1dG8vc3BhY2UuaCIKICBib29sIHVwZGF0ZSh2bV9vZmZzZXRfdCBhZGRyLCBjb25zdCBT
cGFjZV9jb250ZXh0ICpmcm9tLCB2bV9vZmZzZXRfdCBmcm9tX2FkZHIpOwoKCiAgdm9pZCAqIG9w
ZXJhdG9yIG5ldyhzaXplX3QpOwoKICB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkICpibG9jayk7
CiMgMTAxICJhdXRvL3NwYWNlLmgiCiAgdm1fb2Zmc2V0X3QgdmlydF90b19waHlzKHZtX29mZnNl
dF90IGEpIGNvbnN0OwojIDExMSAiYXV0by9zcGFjZS5oIgogIHVuc2lnbmVkIGdldF9pb19jb3Vu
dGVyKHZvaWQpOwoKCgoKCiAgYm9vbCBpc19wcml2aWxlZ2VkKHZvaWQpOwoKCgoKCiAgdm9pZCBh
ZGR0b19pb19jb3VudGVyKGludCBpbmNyKTsKCgoKCgoKICBib29sIGlvX2xvb2t1cCh2bV9vZmZz
ZXRfdCBwb3J0X251bWJlcik7CgoKCgoKCgogIFNwYWNlOjpzdGF0dXNfdCBpb19pbnNlcnQodm1f
b2Zmc2V0X3QgcG9ydF9udW1iZXIpOwoKCgoKICB2b2lkIGlvX2RlbGV0ZSh2bV9vZmZzZXRfdCBw
b3J0X251bWJlcik7CgoKCgogIH5TcGFjZSgpOwojIDE1NyAiYXV0by9zcGFjZS5oIgogIHZvaWQg
a21lbV91cGRhdGUodm1fb2Zmc2V0X3QgYWRkcik7CiMgMTc3ICJhdXRvL3NwYWNlLmgiCiAgU3Bh
Y2U6OnN0YXR1c190IHZfaW5zZXJ0KHZtX29mZnNldF90IHBoeXMsIHZtX29mZnNldF90IHZpcnQs
IHZtX29mZnNldF90IHNpemUsIHVuc2lnbmVkIHBhZ2VfYXR0cmlicyk7CiMgMTk0ICJhdXRvL3Nw
YWNlLmgiCiAgYm9vbCB2X2xvb2t1cCh2bV9vZmZzZXRfdCB2aXJ0LCB2bV9vZmZzZXRfdCAqcGh5
cyA9IDAsIHZtX29mZnNldF90ICpzaXplID0gMCwgdW5zaWduZWQgKnBhZ2VfYXR0cmlicyA9IDAp
OwojIDIwNSAiYXV0by9zcGFjZS5oIgogIGJvb2wgdl9kZWxldGUodm1fb2Zmc2V0X3QgdmlydCwg
dm1fb2Zmc2V0X3Qgc2l6ZSwgdW5zaWduZWQgcGFnZV9hdHRyaWJzID0gMCk7CiMgMjE3ICJhdXRv
L3NwYWNlLmgiCiAgZXhwbGljaXQgU3BhY2UodW5zaWduZWQgbmV3X251bWJlcik7CgoKCgoKCiAg
dm9pZCBwYWdlX21hcCh2bV9vZmZzZXRfdCwgdm1fb2Zmc2V0X3QsIHZtX29mZnNldF90LCB1bnNp
Z25lZCk7CgogIHZvaWQgcGFnZV9wcm90ZWN0KHZtX29mZnNldF90LCB2bV9vZmZzZXRfdCwgdW5z
aWduZWQpOwoKICB2b2lkIHBhZ2VfdW5tYXAodm1fb2Zmc2V0X3QsIHZtX29mZnNldF90KTsKCnBy
aXZhdGU6CgoKCiAgdm1fb2Zmc2V0X3QgZ2V0X3ZpcnRfcG9ydF9hZGRyKHZtX29mZnNldF90IGNv
bnN0IHBvcnQpIGNvbnN0OwoKICB2bV9vZmZzZXRfdCBnZXRfcGh5c19wb3J0X2FkZHIodm1fb2Zm
c2V0X3QgY29uc3QgcG9ydCkgY29uc3Q7Cn07CgoKU3BhY2UgKiBjdXJyZW50X3NwYWNlKCk7CgpV
bnNpZ25lZDggZ2V0X3BvcnRfYml0KHZtX29mZnNldF90IGNvbnN0IHBvcnQpOwojIDI2MCAiYXV0
by9zcGFjZS5oIgppbmxpbmUgU3BhY2VfaW5kZXgKU3BhY2U6OnNwYWNlKCkgY29uc3QKewogIHJl
dHVybiBTcGFjZV9pbmRleChfZGlyW251bWJlcl9pbmRleF0gPj4gOCk7Cn0KCgoKCgppbmxpbmUg
U3BhY2VfaW5kZXgKU3BhY2U6OmNoaWVmKCkgY29uc3QKewogIHJldHVybiBTcGFjZV9pbmRleChf
ZGlyW2NoaWVmX2luZGV4XSA+PiA4KTsKfQojIDI4NyAiYXV0by9zcGFjZS5oIgppbmxpbmUgYm9v
bApTcGFjZTo6dXBkYXRlKHZtX29mZnNldF90IGFkZHIsIGNvbnN0IFNwYWNlX2NvbnRleHQgKmZy
b20sCiAgICAgICAgICAgICAgICB2bV9vZmZzZXRfdCBmcm9tX2FkZHIpCnsKICBpZiAoZnJvbS0+
bG9va3VwKGZyb21fYWRkcikgPT0gMHhmZmZmZmZmZikKICAgIHJldHVybiBmYWxzZTsKCiAgX2Rp
clsoYWRkciA+PiAyMikgJiAweDNmZl0KICAgID0gZnJvbS0+ZGlyKClbKGZyb21fYWRkciA+PiAy
MikgJiAweDNmZl07CiAgcmV0dXJuIHRydWU7Cn0KIyAzMTIgImF1dG8vc3BhY2UuaCIKaW5saW5l
IHZtX29mZnNldF90ClNwYWNlOjp2aXJ0X3RvX3BoeXModm1fb2Zmc2V0X3QgYSkgY29uc3QKewog
IGlmICh0aGlzID09IHNpZ21hMCkKICAgIHJldHVybiBhOwoKICByZXR1cm4gU3BhY2VfY29udGV4
dDo6bG9va3VwKGEpOwp9CgoKCgoKCgppbmxpbmUgYm9vbApTcGFjZTo6aXNfcHJpdmlsZWdlZCh2
b2lkKQp7CiAgcmV0dXJuICEgQ29uZmlnOjplbmFibGVfaW9fcHJvdGVjdGlvbgogICAgICAgICB8
fCAoZ2V0X2lvX2NvdW50ZXIoKSA9PSAoMUwgPDwgMTYpKTsKfQojIDM0MiAiYXV0by9zcGFjZS5o
IgppbmxpbmUgdm9pZApTcGFjZTo6a21lbV91cGRhdGUodm1fb2Zmc2V0X3QgYWRkcikKewogIHVu
c2lnbmVkIGkgPSAoYWRkciA+PiAyMikgJiAweDNmZjsKICBfZGlyW2ldID0ga21lbTo6ZGlyKClb
aV07Cn0KIyAzNTYgImF1dG8vc3BhY2UuaCIKaW5saW5lIHZvaWQKU3BhY2U6OnBhZ2VfbWFwKHZt
X29mZnNldF90LCB2bV9vZmZzZXRfdCwgdm1fb2Zmc2V0X3QsIHVuc2lnbmVkKQp7fQoKCgppbmxp
bmUgdm9pZApTcGFjZTo6cGFnZV9wcm90ZWN0KHZtX29mZnNldF90LCB2bV9vZmZzZXRfdCwgdW5z
aWduZWQpCnt9CgoKCmlubGluZSB2b2lkClNwYWNlOjpwYWdlX3VubWFwKHZtX29mZnNldF90LCB2
bV9vZmZzZXRfdCkKe30KCgoKCmlubGluZSBTcGFjZSAqCmN1cnJlbnRfc3BhY2UoKQp7CiAgcmV0
dXJuIHN0YXRpY19jYXN0PFNwYWNlKj4oU3BhY2VfY29udGV4dDo6Y3VycmVudCgpKTsKfQoKCgpp
bmxpbmUgVW5zaWduZWQ4IGdldF9wb3J0X2JpdCh2bV9vZmZzZXRfdCBjb25zdCBwb3J0KQp7CiAg
cmV0dXJuIDEgPDwgKHBvcnQgJiA3KTsKfQojIDEzICJhdXRvL3RocmVhZC5oIiAyCiMgMSAiYXV0
by9zZW5kZXIuaCIgMQojIDEzICJhdXRvL3NlbmRlci5oIgpjbGFzcyBSZWNlaXZlcjsKCgoKY2xh
c3MgU2VuZGVyCnsKcHVibGljOgoKCgogIHZpcnR1YWwgdm9pZCBpcGNfcmVjZWl2ZXJfcmVhZHko
KSA9IDA7Cgpwcml2YXRlOgoKCgogICAgICAgICAgICAgTDRfdWlkIF9pZDsKICAgICAgICAgICAg
IFJlY2VpdmVyKiBfc2VuZF9wYXJ0bmVyOwogICAgICAgICAgICAgU2VuZGVyKiBzZW5kZXJfbmV4
dCwgKiBzZW5kZXJfcHJldjsKCgoKICBmcmllbmQgY2xhc3MgamRiOwogIGZyaWVuZCBjbGFzcyBq
ZGJfdGhyZWFkX2xpc3Q7CgpwdWJsaWM6CgoKCiAgTDRfdWlkIGlkKCkgY29uc3Q7CgoKCgogIFJl
Y2VpdmVyKiByZWNlaXZlcigpIGNvbnN0OwojIDU3ICJhdXRvL3NlbmRlci5oIgogIGJvb2wgaW5f
c2VuZGVyX2xpc3QoKTsKCnByb3RlY3RlZDoKCgoKCgoKCiAgU2VuZGVyKGNvbnN0IEw0X3VpZCYg
aWQpOwojIDc3ICJhdXRvL3NlbmRlci5oIgogIGV4cGxpY2l0IFNlbmRlcihjb25zdCBMNF91aWQm
IGlkLCBpbnQgKTsKCgoKCiAgdm9pZCBzZXRfcmVjZWl2ZXIoUmVjZWl2ZXIqIHJlY2VpdmVyKTsK
CgoKCiAgdm9pZCBzZW5kZXJfZW5xdWV1ZShTZW5kZXIgKipyKTsKCgoKCiAgdm9pZCBzZW5kZXJf
ZGVxdWV1ZShTZW5kZXIgKipyKTsKfTsKIyAxMDIgImF1dG8vc2VuZGVyLmgiCiMgMSAiYXV0by9j
cHVfbG9jay5oIiAxCiMgMjIgImF1dG8vY3B1X2xvY2suaCIKY2xhc3MgQ3B1X2xvY2sKewpwdWJs
aWM6CgogIHR5cGVkZWYgTXdvcmQgU3RhdHVzOwoKCiAgQ3B1X2xvY2soKTsKCgoKCgogIFN0YXR1
cyB0ZXN0KCkgY29uc3Q7CgoKCgoKCiAgdm9pZCBsb2NrKCk7CgoKCgogIHZvaWQgY2xlYXIoKTsK
CgoKCgoKICBTdGF0dXMgdGVzdF9hbmRfc2V0KCk7CgoKCgoKICB2b2lkIHNldChTdGF0dXMgc3Rh
dGUpOwoKcHJpdmF0ZToKCiAgQ3B1X2xvY2sgKGNvbnN0IENwdV9sb2NrJik7Cgp9OwoKCgoKCmV4
dGVybiBDcHVfbG9jayBjcHVfbG9jazsKIyA4NSAiYXV0by9jcHVfbG9jay5oIgojIDEgIi4uL3Ny
Yy9kcml2ZXJzL3Byb2Nlc3Nvci5oIiAxCgoKCgoKIyAxICIuLi9zcmMvZHJpdmVycy9pYTMyL3By
b2Nlc3Nvci1hcmNoLmgiIDEKCgoKCgoKIyAxICJhdXRvL3N0ZF9tYWNyb3MuaCIgMQoKCgoKCiMg
MSAiZ2xvYmFsY29uZmlnLmgiIDEKIyA3ICJhdXRvL3N0ZF9tYWNyb3MuaCIgMgojIDggIi4uL3Ny
Yy9kcml2ZXJzL2lhMzIvcHJvY2Vzc29yLWFyY2guaCIgMgoKbmFtZXNwYWNlIFByb2MgewoKICB0
eXBlZGVmIFVuc2lnbmVkMzIgU3RhdHVzOwoKICBpbmxpbmUKICB2b2lkIHBhdXNlKCkKICB7CiAg
ICBhc20gdm9sYXRpbGUgKCIgLmJ5dGUgMHhmMywgMHg5MCAjcGF1c2UgXG4iICk7CiAgfQojIDI3
ICIuLi9zcmMvZHJpdmVycy9pYTMyL3Byb2Nlc3Nvci1hcmNoLmgiCiAgaW5saW5lCiAgdm9pZCBo
YWx0KCkKICB7CiAgICBhc20gdm9sYXRpbGUgKCIgaGx0IiA6IDogOiAibWVtb3J5Iik7CiAgfQoK
ICBpbmxpbmUKICB2b2lkIGNsaSgpCiAgewogICAgYXNtIHZvbGF0aWxlICgiY2xpIiA6IDogOiAi
bWVtb3J5Iik7CiAgfQoKICBpbmxpbmUKICB2b2lkIHN0aSgpCiAgewogICAgYXNtIHZvbGF0aWxl
ICgic3RpIiA6IDogOiAibWVtb3J5Iik7CiAgfQoKICBpbmxpbmUKICBTdGF0dXMgY2xpX3NhdmUo
KQogIHsKICAgIFN0YXR1cyByZXQ7CiAgICBhc20gdm9sYXRpbGUgKCJwdXNoZmwJXG5cdCIKICAg
ICAgICAgICAgICAgICAgInBvcGwgJTAJXG5cdCIKICAgICAgICAgICAgICAgICAgImNsaQkJXG5c
dCIKICAgICAgICAgICAgICAgICAgOiAiPWciKHJldCkgOiA6ICJtZW1vcnkiKTsKICAgIHJldHVy
biByZXQ7CiAgfQoKICBpbmxpbmUKICB2b2lkIHN0aV9yZXN0b3JlKCBTdGF0dXMgc3QgKQogIHsK
ICAgIGFzbSB2b2xhdGlsZSAoInRlc3RsICQweDAyMDAsICUwCVxuXHQiCiAgICAgICAgICAgICAg
ICAgICJqeiAxZgkJXG5cdCIKICAgICAgICAgICAgICAgICAgInN0aQkJCVxuXHQiCiAgICAgICAg
ICAgICAgICAgICIxOgkJCVxuXHQiCiAgICAgICAgICAgICAgICAgIDogOiAiZyIoc3QpIDogIm1l
bW9yeSIpOwogIH0KCiAgaW5saW5lCiAgU3RhdHVzIGludGVycnVwdHMoKQogIHsKICAgIFN0YXR1
cyByZXQ7CiAgICBhc20gdm9sYXRpbGUgKCJwdXNoZmwgICAgICAgICBcbiIKICAgICAgICAgICAg
ICAgICAgInBvcGwgJTAgICAgICAgIFxuIgogICAgICAgICAgICAgICAgICA6ICI9ZyIocmV0KSA6
IDogIm1lbW9yeSIpOwogICAgcmV0dXJuIHJldCAmIDB4MDIwMDsKICB9Cn07CiMgNyAiLi4vc3Jj
L2RyaXZlcnMvcHJvY2Vzc29yLmgiIDIKCgpuYW1lc3BhY2UgUHJvYyB7CiMgMjAgIi4uL3NyYy9k
cml2ZXJzL3Byb2Nlc3Nvci5oIgogIHZvaWQgY2xpKCk7CgoKICB2b2lkIHN0aSgpOwoKCiAgU3Rh
dHVzIGludGVycnVwdHMoKTsKCgogIFN0YXR1cyBjbGlfc2F2ZSgpOwoKCiAgdm9pZCBzdGlfcmVz
dG9yZSggU3RhdHVzICk7CgogIHZvaWQgcGF1c2UoKTsKCiAgdm9pZCBoYWx0KCk7Cgp9OwojIDg2
ICJhdXRvL2NwdV9sb2NrLmgiIDIKIyA5NSAiYXV0by9jcHVfbG9jay5oIgppbmxpbmUgQ3B1X2xv
Y2s6OlN0YXR1cyBDcHVfbG9jazo6dGVzdF9hbmRfc2V0KCkKewogIFN0YXR1cyByZXQgPSB0ZXN0
KCk7CiAgbG9jaygpOwogIHJldHVybiByZXQ7Cn0KCgoKCmlubGluZSB2b2lkIENwdV9sb2NrOjpz
ZXQoQ3B1X2xvY2s6OlN0YXR1cyBzdGF0ZSkKewogIGlmIChzdGF0ZSkKICAgIGxvY2soKTsKICBl
bHNlCiAgICBjbGVhcigpOwp9CgoKCmlubGluZSB2b2lkIENwdV9sb2NrOjpsb2NrKCkKewogIFBy
b2M6OmNsaSgpOwp9CgoKCmlubGluZSB2b2lkCkNwdV9sb2NrOjpjbGVhcigpCnsKICBQcm9jOjpz
dGkoKTsKfQoKCgppbmxpbmUgQ3B1X2xvY2s6OlN0YXR1cyBDcHVfbG9jazo6dGVzdCgpIGNvbnN0
CnsKICByZXR1cm4gISBQcm9jOjppbnRlcnJ1cHRzKCk7Cn0KIyAxMDMgImF1dG8vc2VuZGVyLmgi
IDIKIyAxICJhdXRvL2xvY2tfZ3VhcmQuaCIgMQojIDE0ICJhdXRvL2xvY2tfZ3VhcmQuaCIKdGVt
cGxhdGU8dHlwZW5hbWUgTE9DSz4KY2xhc3MgTG9ja19ndWFyZAp7CiAgTE9DSyAqX2xvY2s7Cgpw
dWJsaWM6CiAgTG9ja19ndWFyZChMT0NLICpsKTsKCiAgfkxvY2tfZ3VhcmQoKTsKfTsKIyAzMiAi
YXV0by9sb2NrX2d1YXJkLmgiCnRlbXBsYXRlPHR5cGVuYW1lIExPQ0s+IGlubGluZSBMb2NrX2d1
YXJkPExPQ0s+OjpMb2NrX2d1YXJkKExPQ0sgKmwpCiAgOiBfbG9jayhsKQp7CiAgaWYgKF9sb2Nr
LT50ZXN0X2FuZF9zZXQoKSkKICAgIF9sb2NrID0gMDsKfQoKCgp0ZW1wbGF0ZTx0eXBlbmFtZSBM
T0NLPiBpbmxpbmUgTG9ja19ndWFyZDxMT0NLPjo6fkxvY2tfZ3VhcmQoKQp7CiAgaWYgKF9sb2Nr
KQogICAgX2xvY2stPmNsZWFyKCk7Cn0KIyAxMDQgImF1dG8vc2VuZGVyLmgiIDIKIyAxMTUgImF1
dG8vc2VuZGVyLmgiCmlubGluZSBMNF91aWQgU2VuZGVyOjppZCgpIGNvbnN0CnsgcmV0dXJuIF9p
ZDsgfQoKCgoKCgppbmxpbmUgUmVjZWl2ZXIqIFNlbmRlcjo6cmVjZWl2ZXIoKSBjb25zdAp7IHJl
dHVybiBfc2VuZF9wYXJ0bmVyOyB9CiMgMTM2ICJhdXRvL3NlbmRlci5oIgppbmxpbmUgYm9vbApT
ZW5kZXI6OmluX3NlbmRlcl9saXN0KCkKewogIHJldHVybiBzZW5kZXJfbmV4dDsKfQojIDE1MSAi
YXV0by9zZW5kZXIuaCIKaW5saW5lIFNlbmRlcjo6U2VuZGVyKGNvbnN0IEw0X3VpZCYgaWQpCiAg
OiBfaWQgKGlkKSwgc2VuZGVyX25leHQgKDApCnt9CiMgMTY0ICJhdXRvL3NlbmRlci5oIgppbmxp
bmUgU2VuZGVyOjpTZW5kZXIoY29uc3QgTDRfdWlkJiBpZCwgaW50ICkKICA6IF9pZCAoaWQpCnt9
CgoKCgoKCmlubGluZSB2b2lkIFNlbmRlcjo6c2V0X3JlY2VpdmVyKFJlY2VpdmVyKiByZWNlaXZl
cikKewogIF9zZW5kX3BhcnRuZXIgPSByZWNlaXZlcjsKfQoKCgoKCgppbmxpbmUgdm9pZApTZW5k
ZXI6OnNlbmRlcl9lbnF1ZXVlKFNlbmRlciAqKnIpCnsKICBMb2NrX2d1YXJkPENwdV9sb2NrPiBn
dWFyZCAoJmNwdV9sb2NrKTsKCiAgaWYgKCEgaW5fc2VuZGVyX2xpc3QoKSkKICAgIHsKICAgICAg
aWYgKCpyKQogICAgICAgIHsKICAgICAgICAgIHNlbmRlcl9uZXh0ID0gKnI7CiAgICAgICAgICBz
ZW5kZXJfcHJldiA9IHNlbmRlcl9uZXh0LT5zZW5kZXJfcHJldjsKICAgICAgICAgIHNlbmRlcl9w
cmV2LT5zZW5kZXJfbmV4dCA9IHRoaXM7CiAgICAgICAgICBzZW5kZXJfbmV4dC0+c2VuZGVyX3By
ZXYgPSB0aGlzOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICpyID0g
c2VuZGVyX3ByZXYgPSBzZW5kZXJfbmV4dCA9IHRoaXM7CiAgICAgICAgfQogICAgfQp9CgoKCgoK
CmlubGluZSB2b2lkClNlbmRlcjo6c2VuZGVyX2RlcXVldWUoU2VuZGVyICoqcikKewogIExvY2tf
Z3VhcmQ8Q3B1X2xvY2s+IGd1YXJkICgmY3B1X2xvY2spOwoKICBpZiAoaW5fc2VuZGVyX2xpc3Qo
KSkKICAgIHsKICAgICAgaWYgKHNlbmRlcl9uZXh0ID09IHRoaXMpCiAgICAgICAgewogICAgICAg
ICAgKCh2b2lkKSAoKCpyID09IHRoaXMpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiKnIgPT0gdGhp
cyIsICJhdXRvL3NlbmRlci5oIiwgMjE4LCAoKGNvbnN0IGNoYXIgKikgMCkpLCAwKSkpOwoKICAg
ICAgICAgICpyID0gMDsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBp
ZiAoKnIgPT0gdGhpcykKICAgICAgICAgICAgKnIgPSBzZW5kZXJfbmV4dDsKCiAgICAgICAgICBz
ZW5kZXJfcHJldi0+c2VuZGVyX25leHQgPSBzZW5kZXJfbmV4dDsKICAgICAgICAgIHNlbmRlcl9u
ZXh0LT5zZW5kZXJfcHJldiA9IHNlbmRlcl9wcmV2OwogICAgICAgIH0KCiAgICAgIHNlbmRlcl9u
ZXh0ID0gMDsKICAgIH0KfQojIDE0ICJhdXRvL3RocmVhZC5oIiAyCiMgMSAiYXV0by9yZWNlaXZl
ci5oIiAxCgoKCgoKIyAxICJhdXRvL2NvbnRleHQuaCIgMQoKCgoKCiMgMSAiLi4vc3JjL2xpYi9t
aW5pbGliYy9pbmNsdWRlL2NzdGRpbyIgMQoKCgoKCiMgMSAiLi4vc3JjL2xpYi9taW5pbGliYy9p
bmNsdWRlL3N0ZGlvLmgiIDEKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLXNuYXBzaG90L2xpYi9nY2Mt
bGliL2kzODYtbGludXgvMy4zL2luY2x1ZGUvc3RkZGVmLmgiIDEKIyA2ICIuLi9zcmMvbGliL21p
bmlsaWJjL2luY2x1ZGUvc3RkaW8uaCIgMgojIDEgIi4uL3NyYy9saWIvbWluaWxpYmMvaW5jbHVk
ZS9taW5pX2RlZnMuaCIgMQojIDcgIi4uL3NyYy9saWIvbWluaWxpYmMvaW5jbHVkZS9zdGRpby5o
IiAyCgpleHRlcm4gIkMiIHsKCmludCBwdXRjaGFyKGludCBjKTsKaW50IHB1dHMoY29uc3QgY2hh
ciAqcyk7CmludCBwdXRzdHIoY29uc3QgY2hhciAqY29uc3Qgcyk7CmludCBwdXRuc3RyKCBjb25z
dCBjaGFyICpjb25zdCBjLCBpbnQgbGVuICk7CmludCBwcmludGYoY29uc3QgY2hhciAqZm9ybWF0
LCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsMSwyKSkpOwppbnQgc3ByaW50Zihj
aGFyICpzdHIsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQo
cHJpbnRmLDIsMykpKTsKaW50IHNucHJpbnRmKGNoYXIgKnN0ciwgc2l6ZV90IHNpemUsIGNvbnN0
IGNoYXIgKmZvcm1hdCwgLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLDMsNCkpKTsK
aW50IGFzcHJpbnRmKGNoYXIgKipwdHIsIGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKSBfX2F0dHJp
YnV0ZV9fKChmb3JtYXQocHJpbnRmLDIsMykpKTsKCgoKCgoKIyAxICIuLi9zcmMvbGliL21pbmls
aWJjL2luY2x1ZGUvc3RkYXJnLmgiIDEKIyA5ICIuLi9zcmMvbGliL21pbmlsaWJjL2luY2x1ZGUv
c3RkYXJnLmgiCnR5cGVkZWYgX19idWlsdGluX3ZhX2xpc3QgdmFfbGlzdDsKIyAyNSAiLi4vc3Jj
L2xpYi9taW5pbGliYy9pbmNsdWRlL3N0ZGlvLmgiIDIKCmludCB2cHJpbnRmKGNvbnN0IGNoYXIg
KmZvcm1hdCwgdmFfbGlzdCBhcCkgX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZiwxLDApKSk7
CmludCB2c3ByaW50ZihjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcCkg
X19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZiwyLDApKSk7CmludCB2c25wcmludGYoY2hhciAq
c3RyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFwKSBfX2F0dHJp
YnV0ZV9fKChmb3JtYXQocHJpbnRmLDMsMCkpKTsKCgp0eXBlZGVmIGludCBGSUxFOwoKaW50IGdl
dGNoYXIodm9pZCk7CmNoYXIgKmdldHMoY2hhciAqcykgX19hdHRyaWJ1dGVfXygoZGVwcmVjYXRl
ZCkpOwpjaGFyICpmZ2V0cyhjaGFyICpzLCBpbnQgc2l6ZSwgRklMRSAqc3RyZWFtKTsKCmludCB2
c2NhbmYoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFwKSBfX2F0dHJpYnV0ZV9fKChmb3Jt
YXQoc2NhbmYsMSwwKSkpOwppbnQgdnNzY2FuZihjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIg
KmZvcm1hdCwgdmFfbGlzdCBhcCkgX19hdHRyaWJ1dGVfXygoZm9ybWF0KHNjYW5mLDIsMCkpKTsK
CmludCBzc2NhbmYoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7Cgp9
CiMgNyAiLi4vc3JjL2xpYi9taW5pbGliYy9pbmNsdWRlL2NzdGRpbyIgMgoKCm5hbWVzcGFjZSBz
dGQgewogIHVzaW5nIDo6cHV0Y2hhcjsKICB1c2luZyA6OnB1dHM7CiAgdXNpbmcgOjpwdXRzdHI7
CiAgdXNpbmcgOjpwdXRuc3RyOwogIHVzaW5nIDo6cHJpbnRmOwogIHVzaW5nIDo6c3ByaW50ZjsK
ICB1c2luZyA6OnNucHJpbnRmOwogIHVzaW5nIDo6YXNwcmludGY7CiAgdXNpbmcgOjpzc2NhbmY7
CgogIHVzaW5nIDo6dnByaW50ZjsKICB1c2luZyA6OnZzcHJpbnRmOwogIHVzaW5nIDo6dnNucHJp
bnRmOwogIHVzaW5nIDo6Z2V0Y2hhcjsKICB1c2luZyA6OmdldHM7CiAgdXNpbmcgOjpmZ2V0czsK
ICB1c2luZyA6OnZzY2FuZjsKICB1c2luZyA6OnZzc2NhbmY7Cgp9OwojIDcgImF1dG8vY29udGV4
dC5oIiAyCgoKCiMgMSAiYXV0by9zY2hlZC5oIiAxCiMgMTQgImF1dG8vc2NoZWQuaCIKY2xhc3Mg
c2NoZWRfdAp7CiAgdW5zaWduZWQgc2hvcnQgX3ByaW87CiAgdW5zaWduZWQgc2hvcnQgX21jcDsK
ICB1bnNpZ25lZCBzaG9ydCBfdGltZXNsaWNlLCBfdGlja3NfbGVmdDsKICB1bnNpZ25lZCBsb25n
IF90b3RhbF90aWNrczsKICB1bnNpZ25lZCBsb25nIF9zdGFydF9jcHV0aW1lOwogIHVuc2lnbmVk
IGxvbmcgbG9uZyBfdG90YWxfY3B1dGltZTsKCnB1YmxpYzoKICB1bnNpZ25lZCBzaG9ydCBwcmlv
KCkgY29uc3Q7CgogIHZvaWQgc2V0X3ByaW8odW5zaWduZWQgc2hvcnQgcHJpbyk7CgogIHVuc2ln
bmVkIHNob3J0IG1jcCgpIGNvbnN0OwoKICB2b2lkIHNldF9tY3AodW5zaWduZWQgc2hvcnQgbWNw
KTsKCiAgdW5zaWduZWQgc2hvcnQgdGltZXNsaWNlKCkgY29uc3Q7CgogIHZvaWQgc2V0X3RpbWVz
bGljZSh1bnNpZ25lZCBzaG9ydCB0aW1lc2xpY2UpOwoKICB1bnNpZ25lZCBzaG9ydCB0aWNrc19s
ZWZ0KCkgY29uc3Q7CgogIHZvaWQgc2V0X3RpY2tzX2xlZnQodW5zaWduZWQgc2hvcnQgdGlja3Nf
bGVmdCk7CgogIHZvaWQgcmVzZXRfY3B1dGltZSh2b2lkKTsKCiAgdm9pZCB1cGRhdGVfY3B1dGlt
ZSh2b2lkKTsKCiAgdW5zaWduZWQgbG9uZyBsb25nIGdldF90b3RhbF9jcHV0aW1lKCk7CgogIHZv
aWQgc3RhcnRfdGhyZWFkKHVuc2lnbmVkIGxvbmcgdHNjXzMyKTsKCiAgdm9pZCBzdG9wX3RocmVh
ZCh1bnNpZ25lZCBsb25nIHRzY18zMik7Cn07CiMgNTggImF1dG8vc2NoZWQuaCIKaW5saW5lIHVu
c2lnbmVkIHNob3J0CnNjaGVkX3Q6OnByaW8oKSBjb25zdAp7CiAgcmV0dXJuIF9wcmlvOwp9CgoK
CmlubGluZSB2b2lkCnNjaGVkX3Q6OnNldF9wcmlvKHVuc2lnbmVkIHNob3J0IHByaW8pCnsKICBf
cHJpbyA9IHByaW87Cn0KCgoKaW5saW5lIHVuc2lnbmVkIHNob3J0CnNjaGVkX3Q6Om1jcCgpIGNv
bnN0CnsKICByZXR1cm4gX21jcDsKfQoKCgppbmxpbmUgdm9pZApzY2hlZF90OjpzZXRfbWNwKHVu
c2lnbmVkIHNob3J0IG1jcCkKewogIF9tY3AgPSBtY3A7Cn0KCgoKaW5saW5lIHVuc2lnbmVkIHNo
b3J0CnNjaGVkX3Q6OnRpbWVzbGljZSgpIGNvbnN0CnsKICByZXR1cm4gX3RpbWVzbGljZTsKfQoK
CgppbmxpbmUgdm9pZApzY2hlZF90OjpzZXRfdGltZXNsaWNlKHVuc2lnbmVkIHNob3J0IHRpbWVz
bGljZSkKewogIF90aW1lc2xpY2UgPSB0aW1lc2xpY2U7Cn0KCgoKaW5saW5lIHVuc2lnbmVkIHNo
b3J0CnNjaGVkX3Q6OnRpY2tzX2xlZnQoKSBjb25zdAp7CiAgcmV0dXJuIF90aWNrc19sZWZ0Owp9
CgoKCmlubGluZSB2b2lkCnNjaGVkX3Q6OnNldF90aWNrc19sZWZ0KHVuc2lnbmVkIHNob3J0IHRp
Y2tzX2xlZnQpCnsKICBfdGlja3NfbGVmdCA9IHRpY2tzX2xlZnQ7Cn0KCgoKaW5saW5lIHZvaWQK
c2NoZWRfdDo6cmVzZXRfY3B1dGltZSh2b2lkKQp7CiAgaWYgKENvbmZpZzo6ZmluZV9ncmFpbmVk
X2NwdXRpbWUpCiAgICBfdG90YWxfY3B1dGltZSA9IDA7CiAgZWxzZQogICAgX3RvdGFsX3RpY2tz
ID0gMDsKfQoKCgppbmxpbmUgdm9pZApzY2hlZF90Ojp1cGRhdGVfY3B1dGltZSh2b2lkKQp7CiAg
X3RvdGFsX3RpY2tzKys7Cn0KCgoKaW5saW5lIHZvaWQKc2NoZWRfdDo6c3RhcnRfdGhyZWFkKHVu
c2lnbmVkIGxvbmcgdHNjXzMyKQp7CiAgX3N0YXJ0X2NwdXRpbWUgPSB0c2NfMzI7Cn0KCgoKaW5s
aW5lIHZvaWQKc2NoZWRfdDo6c3RvcF90aHJlYWQodW5zaWduZWQgbG9uZyB0c2NfMzIpCnsKICBf
dG90YWxfY3B1dGltZSArPSB0c2NfMzIgLSBfc3RhcnRfY3B1dGltZTsKfQojIDExICJhdXRvL2Nv
bnRleHQuaCIgMgoKIyAxICJhdXRvL2ZwdS5oIiAxCiMgMTEgImF1dG8vZnB1LmgiCmNsYXNzIHNs
YWJfY2FjaGVfYW5vbjsKY2xhc3MgQ29udGV4dDsKCgoKCgoKY2xhc3MgRnB1X3N0YXRlCnsKcHVi
bGljOgogIHZvaWQgYWxsb2Nfc3RhdGUoKTsKICB2b2lkIGZyZWVfc3RhdGUoKTsKICB2b2lkIHNh
dmVfc3RhdGUoKTsKICB2b2lkIHJlc3RvcmVfc3RhdGUoKTsKICB2b2lkICpzdGF0ZV9idWZmZXIo
KTsKCiAgRnB1X3N0YXRlKCk7CiAgfkZwdV9zdGF0ZSgpOwoKcHJpdmF0ZToKCiAgdm9pZCAqX3N0
YXRlX2J1ZmZlcjsKCnByaXZhdGU6CiAgc3RhdGljIHNsYWJfY2FjaGVfYW5vbiAqc2xhYl9hbGxv
YygpOwp9OwoKY2xhc3MgRnB1CnsKcHVibGljOgoKICBzdGF0aWMgQ29udGV4dCAqb3duZXIoKTsK
ICBzdGF0aWMgdm9pZCBzZXRfb3duZXIoQ29udGV4dCAqb3duZXIpOwogIHN0YXRpYyBib29sIGlz
X293bmVyKENvbnRleHQgKm93bmVyKTsKCgogIHN0YXRpYyB2b2lkIGluaXQoKTsKICBzdGF0aWMg
dW5zaWduZWQgY29uc3Qgc3RhdGVfc2l6ZSgpOwogIHN0YXRpYyB1bnNpZ25lZCBjb25zdCBzdGF0
ZV9hbGlnbigpOwogIHN0YXRpYyB2b2lkIGluaXRfc3RhdGUoIEZwdV9zdGF0ZSAqKTsKICBzdGF0
aWMgdm9pZCByZXN0b3JlX3N0YXRlKCBGcHVfc3RhdGUgKiApOwogIHN0YXRpYyB2b2lkIHNhdmVf
c3RhdGUoIEZwdV9zdGF0ZSAqICk7CiAgc3RhdGljIHZvaWQgc3luY2hyb25pemUoKTsKICBzdGF0
aWMgdm9pZCBkaXNhYmxlKCk7CiAgc3RhdGljIHZvaWQgZW5hYmxlKCk7Cgpwcml2YXRlOgoKICBz
dGF0aWMgQ29udGV4dCAqX293bmVyOwpwcml2YXRlOgoKcHJpdmF0ZToKICBzdHJ1Y3QgZnB1X3Jl
Z3MKICB7CiAgICBsb25nIGN3ZDsKICAgIGxvbmcgc3dkOwogICAgbG9uZyB0d2Q7CiAgICBsb25n
IGZpcDsKICAgIGxvbmcgZmNzOwogICAgbG9uZyBmb287CiAgICBsb25nIGZvczsKICAgIGxvbmcg
c3Rfc3BhY2VbMjBdOwogIH07CgogIHN0cnVjdCBzc2VfcmVncwogIHsKICAgIHVuc2lnbmVkIHNo
b3J0IGN3ZDsKICAgIHVuc2lnbmVkIHNob3J0IHN3ZDsKICAgIHVuc2lnbmVkIHNob3J0IHR3ZDsK
ICAgIHVuc2lnbmVkIHNob3J0IGZvcDsKICAgIGxvbmcgZmlwOwogICAgbG9uZyBmY3M7CiAgICBs
b25nIGZvbzsKICAgIGxvbmcgZm9zOwogICAgbG9uZyBteGNzcjsKICAgIGxvbmcgcmVzZXJ2ZWQ7
CiAgICBsb25nIHN0X3NwYWNlWzMyXTsKICAgIGxvbmcgeG1tX3NwYWNlWzMyXTsKICAgIGxvbmcg
cGFkZGluZ1s1Nl07CiAgfTsKfTsKIyAxMDMgImF1dG8vZnB1LmgiCiMgMSAiYXV0by9rbWVtX3Ns
YWJfc2ltcGxlLmgiIDEKCgoKCgojIDEgIi91c3IvbGliL2djYy1zbmFwc2hvdC9saWIvZ2NjLWxp
Yi9pMzg2LWxpbnV4LzMuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxCiMgNyAiYXV0by9rbWVtX3NsYWJf
c2ltcGxlLmgiIDIKIyAxICJhdXRvL2hlbHBpbmdfbG9jay5oIiAxCgoKCgoKCiMgMSAiYXV0by9z
d2l0Y2hfbG9jay5oIiAxCgoKCgoKIyAxICJhdXRvL3N0YWNrLmgiIDEKIyAxMSAiYXV0by9zdGFj
ay5oIgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpjbGFzcyBTdGFjazsKCnRlbXBsYXRlPHR5cGVuYW1l
IFQ+CmNsYXNzIFN0YWNrX3RvcAp7CnByaXZhdGU6CiAgZnJpZW5kIGNsYXNzIFN0YWNrPFQ+OwoK
CgogIGludCBfdmVyc2lvbjsKICBUICpfbmV4dDsKCnB1YmxpYzoKIyAzNyAiYXV0by9zdGFjay5o
IgogIFN0YWNrX3RvcChpbnQgdmVyc2lvbiwgVCAqbmV4dCk7CgogIFN0YWNrX3RvcCgpOwp9OwoK
dGVtcGxhdGU8dHlwZW5hbWUgVD4KY2xhc3MgU3RhY2sKewpwcml2YXRlOgogIFN0YWNrX3RvcDxU
PiBfaGVhZDsKCnB1YmxpYzoKCgoKICBTdGFjaygpOwoKICBpbnQgaW5zZXJ0KFQgKmUpOwoKICBU
KiBkZXF1ZXVlKCk7CgoKCiAgVCogZGVxdWV1ZShUICp0b3ApOwoKICBUKiBmaXJzdCgpOwoKICB2
b2lkIHJlc2V0KCk7Cn07CiMgOTIgImF1dG8vc3RhY2suaCIKdGVtcGxhdGU8dHlwZW5hbWUgVD4g
aW5saW5lIFN0YWNrX3RvcDxUPjo6U3RhY2tfdG9wKGludCB2ZXJzaW9uLCBUICpuZXh0KQogIDog
X3ZlcnNpb24gKHZlcnNpb24pLAogICAgX25leHQgKG5leHQpCnt9CgoKCnRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSBTdGFja190b3A8VD46OlN0YWNrX3RvcCgpCiAgOiBfdmVyc2lvbiAoMCks
CiAgICBfbmV4dCAoMCkKe30KIyAxMTQgImF1dG8vc3RhY2suaCIKdGVtcGxhdGU8dHlwZW5hbWUg
VD4gU3RhY2s8VD46OlN0YWNrKCkKICA6IF9oZWFkICgwLCAwKQp7fQoKCgp0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBpbnQKU3RhY2s8VD46Omluc2VydChUICplKQp7CiAgU3RhY2tfdG9wPFQ+IG9sZF9o
ZWFkLAogICAgICAgICAgICAgICAgICBuZXdfaGVhZDsKCiAgZG8gewogICAgICBvbGRfaGVhZCA9
IF9oZWFkOwogICAgICBlLT5zZXRfbmV4dChvbGRfaGVhZC5fbmV4dCk7CiAgICAgIG5ld19oZWFk
Ll92ZXJzaW9uID0gb2xkX2hlYWQuX3ZlcnNpb24rMTsKICAgICAgbmV3X2hlYWQuX25leHQgPSBl
OwogIH0gd2hpbGUgKCEgc21wX2NhczIoJl9oZWFkLAogICAgICAgICAgICAgICAgICAgICAgICZv
bGRfaGVhZCwKICAgICAgICAgICAgICAgICAgICAgICAmbmV3X2hlYWQpKTsKICByZXR1cm4gbmV3
X2hlYWQuX3ZlcnNpb247Cn0KCgoKdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCoKU3RhY2s8VD46OmRl
cXVldWUoKQp7CiAgU3RhY2tfdG9wPFQ+IG9sZF9oZWFkLAogICAgICAgICAgICAgICAgIG5ld19o
ZWFkOwoKICBUICpmaXJzdDsKCiAgZG8gewogICAgb2xkX2hlYWQgPSBfaGVhZDsKCiAgICBmaXJz
dCA9IG9sZF9oZWFkLl9uZXh0OwogICAgaWYoISBmaXJzdCkKICAgICAgYnJlYWs7CgogICAgbmV3
X2hlYWQuX25leHQgPSBmaXJzdC0+Z2V0X25leHQoKTsKICAgIG5ld19oZWFkLl92ZXJzaW9uID0g
b2xkX2hlYWQuX3ZlcnNpb24gKyAxOwogIH0gd2hpbGUgKCEgc21wX2NhczIoJl9oZWFkLAogICAg
ICAgICAgICAgICAgICAgICAgICZvbGRfaGVhZCwKICAgICAgICAgICAgICAgICAgICAgICAmbmV3
X2hlYWQpKTsKCgoKCgogIHJldHVybiBmaXJzdDsKfQoKCgoKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+
IFQqClN0YWNrPFQ+OjpkZXF1ZXVlKFQgKnRvcCkKewogIFN0YWNrX3RvcDxUPiBvbGRfaGVhZCwK
ICAgICAgICAgICAgICAgICBuZXdfaGVhZDsKCgogIG9sZF9oZWFkLl92ZXJzaW9uID0gX2hlYWQu
X3ZlcnNpb247CiAgb2xkX2hlYWQuX25leHQgPSB0b3A7CiAgaWYgKCFvbGRfaGVhZC5fbmV4dCkK
ICAgIHJldHVybiAwOwoKICBuZXdfaGVhZC5fdmVyc2lvbiA9IG9sZF9oZWFkLl92ZXJzaW9uICsg
MTsKICBuZXdfaGVhZC5fbmV4dCA9IHRvcC0+Z2V0X25leHQoKTsKCiAgaWYoISBzbXBfY2FzMigm
X2hlYWQsCiAgICAgICAgICAgICAgICAmb2xkX2hlYWQsCiAgICAgICAgICAgICAgICAmbmV3X2hl
YWQpKQoKICAgIHJldHVybiAwOwogIGVsc2UKCiAgICByZXR1cm4gdG9wOwp9CgoKCnRlbXBsYXRl
PHR5cGVuYW1lIFQ+IFQqClN0YWNrPFQ+OjpmaXJzdCgpCnsKICByZXR1cm4gX2hlYWQuX25leHQ7
Cn0KCgoKdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZApTdGFjazxUPjo6cmVzZXQoKQp7CiAgX2hl
YWQuX3ZlcnNpb24gPSAwOwogIF9oZWFkLl9uZXh0ID0gMDsKfQojIDcgImF1dG8vc3dpdGNoX2xv
Y2suaCIgMgoKCgoKCgpjbGFzcyBDb250ZXh0OwoKCgpjbGFzcyBTd2l0Y2hfbG9jawp7CiAgQ29u
dGV4dCAqX2xvY2tfb3duZXI7CiAgU3RhY2s8Q29udGV4dD4gX2xvY2tfc3RhY2s7CgpwdWJsaWM6
CgoKCgoKICBTd2l0Y2hfbG9jaygpOwoKCgoKICBDb250ZXh0ICogbG9ja19vd25lcigpIGNvbnN0
OwoKCgoKICBib29sIHRlc3QoKSBjb25zdDsKCgoKCgogIHZvaWQgbG9jaygpOwoKCgoKICBib29s
IHRlc3RfYW5kX3NldCgpOwoKCgoKCiAgdm9pZCBjbGVhcigpOwoKcHJpdmF0ZToKCgoKCgogIGJv
b2wgdHJ5X2xvY2soKTsKfTsKIyA4NSAiYXV0by9zd2l0Y2hfbG9jay5oIgppbmxpbmUgU3dpdGNo
X2xvY2s6OlN3aXRjaF9sb2NrKCkKICA6IF9sb2NrX293bmVyKDApCnsKfQoKCgoKCgppbmxpbmUg
Q29udGV4dCAqClN3aXRjaF9sb2NrOjpsb2NrX293bmVyKCkgY29uc3QKewogIHJldHVybiBfbG9j
a19vd25lcjsKfQoKCgoKCgppbmxpbmUgYm9vbApTd2l0Y2hfbG9jazo6dGVzdCgpIGNvbnN0CnsK
ICByZXR1cm4gX2xvY2tfb3duZXI7Cn0KIyA4ICJhdXRvL2hlbHBpbmdfbG9jay5oIiAyCiMgMTkg
ImF1dG8vaGVscGluZ19sb2NrLmgiCmNsYXNzIEhlbHBpbmdfbG9jawp7CiAgU3dpdGNoX2xvY2sg
X3N3aXRjaF9sb2NrOwoKcHVibGljOgogIHN0YXRpYyBib29sIHRocmVhZGluZ19zeXN0ZW1fYWN0
aXZlOwoKcHVibGljOgoKCgogIGJvb2wgdGVzdF9hbmRfc2V0KCk7CgoKCgoKICB2b2lkIGxvY2so
KTsKCgoKCiAgYm9vbCB0ZXN0KCk7CgoKCgoKICB2b2lkIGNsZWFyKCk7CgoKCgogIENvbnRleHQq
IGxvY2tfb3duZXIoKTsKfTsKCnR5cGVkZWYgTG9ja19ndWFyZDxIZWxwaW5nX2xvY2s+IEhlbHBp
bmdfbG9ja19ndWFyZDsKIyA2NyAiYXV0by9oZWxwaW5nX2xvY2suaCIKaW5saW5lIGJvb2wKSGVs
cGluZ19sb2NrOjp0ZXN0KCkKewogIHJldHVybiBfc3dpdGNoX2xvY2sudGVzdCgpOwp9CgoKCgoK
CmlubGluZSBDb250ZXh0KgpIZWxwaW5nX2xvY2s6OmxvY2tfb3duZXIoKQp7CiAgcmV0dXJuIF9z
d2l0Y2hfbG9jay5sb2NrX293bmVyKCk7Cn0KIyA4ICJhdXRvL2ttZW1fc2xhYl9zaW1wbGUuaCIg
MgoKIyAxICJhdXRvL3NsYWJfY2FjaGVfYW5vbi5oIiAxCiMgMTQgImF1dG8vc2xhYl9jYWNoZV9h
bm9uLmgiCmNsYXNzIHNsYWJfY2FjaGVfYW5vbgp7CnByb3RlY3RlZDoKICBmcmllbmQgY2xhc3Mg
c2xhYjsKCgoKCiAgdmlydHVhbCB2b2lkICpibG9ja19hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUs
IHVuc2lnbmVkIGxvbmcgYWxpZ25tZW50KSA9IDA7CiAgdmlydHVhbCB2b2lkIGJsb2NrX2ZyZWUo
dm9pZCAqYmxvY2ssIHVuc2lnbmVkIGxvbmcgc2l6ZSkgPSAwOwoKcHJpdmF0ZToKICBzbGFiX2Nh
Y2hlX2Fub24oKTsKICBzbGFiX2NhY2hlX2Fub24oY29uc3Qgc2xhYl9jYWNoZV9hbm9uJik7CiMg
MzcgImF1dG8vc2xhYl9jYWNoZV9hbm9uLmgiCiAgc2xhYiAqX2ZpcnN0X3NsYWIsICpfZmlyc3Rf
YXZhaWxhYmxlX3NsYWIsICpfbGFzdF9zbGFiOwogIHVuc2lnbmVkIGxvbmcgX3NsYWJfc2l6ZTsK
ICB1bnNpZ25lZCBfZWxlbV9zaXplLCBfbGF0ZXN0X29mZnNldCwgX2FsaWdubWVudDsKCnB1Ymxp
YzoKCgoKICBzbGFiX2NhY2hlX2Fub24odW5zaWduZWQgbG9uZyBzbGFiX3NpemUsIHVuc2lnbmVk
IGVsZW1fc2l6ZSwgdW5zaWduZWQgYWxpZ25tZW50KTsKCiAgdmlydHVhbCB+c2xhYl9jYWNoZV9h
bm9uKCk7CgogIHZpcnR1YWwgdm9pZCAqIGFsbG9jKCk7CgogIHZpcnR1YWwgdm9pZCBmcmVlKHZv
aWQgKmNhY2hlX2VudHJ5KTsKCiAgdmlydHVhbCBib29sIHJlYXAoKTsKCnByb3RlY3RlZDoKICB2
b2lkIGRlc3Ryb3koKTsKCgogIHZpcnR1YWwgdm9pZCBlbGVtX2N0b3Iodm9pZCAqKTsKCiAgdmly
dHVhbCB2b2lkIGVsZW1fZHRvcih2b2lkICopOwp9OwojIDEwICJhdXRvL2ttZW1fc2xhYl9zaW1w
bGUuaCIgMgoKCgoKCgpjbGFzcyBrbWVtX3NsYWJfc2ltcGxlX3QgOiBwdWJsaWMgc2xhYl9jYWNo
ZV9hbm9uCnsKCiAgSGVscGluZ19sb2NrIF9sb2NrOwoKcHVibGljOgoKICBrbWVtX3NsYWJfc2lt
cGxlX3QodW5zaWduZWQgZWxlbV9zaXplLCB1bnNpZ25lZCBhbGlnbm1lbnQpOwoKICB+a21lbV9z
bGFiX3NpbXBsZV90KCk7CgoKICB2b2lkICogYWxsb2MoKTsKCiAgdm9pZCBmcmVlKHZvaWQgKmNh
Y2hlX2VudHJ5KTsKCiAgYm9vbCByZWFwKCk7CgoKICB2b2lkICogb3BlcmF0b3IgbmV3KHNpemVf
dCBzaXplKTsKCiAgdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCAqYmxvY2ssIHNpemVfdCBzaXpl
KTsKCnByb3RlY3RlZDoKCgogIGttZW1fc2xhYl9zaW1wbGVfdCh1bnNpZ25lZCBsb25nIHNsYWJf
c2l6ZSwgdW5zaWduZWQgZWxlbV9zaXplLCB1bnNpZ25lZCBhbGlnbm1lbnQpOwoKcHJpdmF0ZToK
CgogIHZpcnR1YWwgdm9pZCAqIGJsb2NrX2FsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWdu
ZWQgbG9uZyk7CgogIHZpcnR1YWwgdm9pZCBibG9ja19mcmVlKHZvaWQgKmJsb2NrLCB1bnNpZ25l
ZCBsb25nKTsKfTsKIyAxMDQgImF1dG8vZnB1LmgiIDIKCgojIDEgIi4uL3NyYy9saWIvbWluaWxp
YmMvaW5jbHVkZS9jc3RyaW5nIiAxCgoKCgoKIyAxICIuLi9zcmMvbGliL21pbmlsaWJjL2luY2x1
ZGUvc3RyaW5nLmgiIDEKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLXNuYXBzaG90L2xpYi9nY2MtbGli
L2kzODYtbGludXgvMy4zL2luY2x1ZGUvc3RkZGVmLmgiIDEKIyA2ICIuLi9zcmMvbGliL21pbmls
aWJjL2luY2x1ZGUvc3RyaW5nLmgiIDIKCmV4dGVybiAiQyIgewoKY2hhciAqc3RyY3B5KGNoYXIg
KmRlc3QsIGNvbnN0IGNoYXIgKnNyYyk7CmNoYXIgKnN0cm5jcHkoY2hhciAqZGVzdCwgY29uc3Qg
Y2hhciAqc3JjLCBzaXplX3Qgbik7Cgp2b2lkICptZW1jY3B5KHZvaWQgKmRlc3QsIGNvbnN0IHZv
aWQgKnNyYywgaW50IGMsIHNpemVfdCBuKTsKdm9pZCAqbWVtY3B5KHZvaWQgKmRlc3QsIGNvbnN0
IHZvaWQgKnNyYywgc2l6ZV90IG4pOwp2b2lkICptZW1tb3ZlKHZvaWQgKmRlc3QsIGNvbnN0IHZv
aWQgKnNyYywgc2l6ZV90IG4pOwoKaW50IG1lbWNjbXAoY29uc3Qgdm9pZCAqczEsIGNvbnN0IHZv
aWQgKnMyLCBpbnQgYywgc2l6ZV90IG4pOwppbnQgbWVtY21wKGNvbnN0IHZvaWQgKnMxLCBjb25z
dCB2b2lkICpzMiwgc2l6ZV90IG4pOwppbnQgc3RyY21wKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBj
aGFyICpzMik7CmludCBzdHJuY21wKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgc2l6
ZV90IG4pOwoKaW50IHN0cmNhc2VjbXAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKTsK
aW50IHN0cm5jYXNlY21wKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgc2l6ZV90IG4p
OwoKc2l6ZV90IHN0cmxlbihjb25zdCBjaGFyICpzKTsKCmNoYXIgKnN0cnN0cihjb25zdCBjaGFy
ICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKTsKCmNoYXIgKnN0cmR1cChjb25zdCBjaGFy
ICpzKTsKCmNoYXIgKnN0cmNocihjb25zdCBjaGFyICpzLCBpbnQgYyk7CmNoYXIgKnN0cnJjaHIo
Y29uc3QgY2hhciAqcywgaW50IGMpOwoKY2hhciAqc3RyY2F0KGNoYXIgKmRlc3QsIGNvbnN0IGNo
YXIgKnNyYyk7CmNoYXIgKnN0cm5jYXQoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLCBzaXpl
X3Qgbik7CgpzaXplX3Qgc3Ryc3BuKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKl9hY2NlcHQp
OwpzaXplX3Qgc3RyY3Nwbihjb25zdCBjaGFyICpzLCBjb25zdCBjaGFyICpyZWplY3QpOwoKY2hh
ciAqc3RycGJyayhjb25zdCBjaGFyICpzLCBjb25zdCBjaGFyICpfYWNjZXB0KTsKY2hhciAqc3Ry
c2VwKGNoYXIgKipzdHJpbmdwLCBjb25zdCBjaGFyICpkZWxpbSk7Cgp2b2lkKiBtZW1zZXQodm9p
ZCAqcywgaW50IGMsIHNpemVfdCBuKTsKdm9pZCogbWVtY2hyKGNvbnN0IHZvaWQgKnMsIGludCBj
LCBzaXplX3Qgbik7CgppbnQgc3RyY29sbChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIp
OwoKCn0KIyA3ICIuLi9zcmMvbGliL21pbmlsaWJjL2luY2x1ZGUvY3N0cmluZyIgMgoKCm5hbWVz
cGFjZSBzdGQgewoKCgoKCgogIHVzaW5nIDo6bWVtY3B5OwogIHVzaW5nIDo6bWVtY2NweTsKICB1
c2luZyA6Om1lbW1vdmU7CiAgdXNpbmcgOjptZW1jY21wOwogIHVzaW5nIDo6bWVtY21wOwogIHVz
aW5nIDo6bWVtc2V0OwogIHVzaW5nIDo6bWVtY2hyOwoKCiAgdXNpbmcgOjpzdHJjcHk7CiAgdXNp
bmcgOjpzdHJuY3B5OwogIHVzaW5nIDo6c3RyY2F0OwogIHVzaW5nIDo6c3RybmNhdDsKICB1c2lu
ZyA6OnN0cmNtcDsKICB1c2luZyA6OnN0cm5jbXA7CiAgdXNpbmcgOjpzdHJsZW47CiAgdXNpbmcg
OjpzdHJzcG47CiAgdXNpbmcgOjpzdHJjc3BuOwogIHVzaW5nIDo6c3RyY29sbDsKCgogIHVzaW5n
IDo6c3RycGJyazsKICB1c2luZyA6OnN0cnJjaHI7CiAgdXNpbmcgOjpzdHJjaHI7CiAgdXNpbmcg
OjpzdHJzdHI7CgoKCgoKICBpbmxpbmUgY2hhcioKICBzdHJwYnJrKGNoYXIqIF9fczEsIGNvbnN0
IGNoYXIqIF9fczIpCiAgeyByZXR1cm4gX19idWlsdGluX3N0cnBicmsoY29uc3RfY2FzdDxjb25z
dCBjaGFyKj4oX19zMSksIF9fczIpOyB9CgoKCiAgaW5saW5lIGNoYXIqCiAgc3RycmNocihjaGFy
KiBfX3MxLCBpbnQgX19uKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJyY2hyKGNvbnN0X2Nhc3Q8
Y29uc3QgY2hhcio+KF9fczEpLCBfX24pOyB9CgoKCiAgaW5saW5lIGNoYXIqCiAgc3RyY2hyKGNo
YXIqIF9fczEsIGludCBfX24pCiAgeyByZXR1cm4gX19idWlsdGluX3N0cmNocihjb25zdF9jYXN0
PGNvbnN0IGNoYXIqPihfX3MxKSwgX19uKTsgfQoKCgogIGlubGluZSBjaGFyKgogIHN0cnN0cihj
aGFyKiBfX3MxLCBjb25zdCBjaGFyKiBfX3MyKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJzdHIo
Y29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fczIpOyB9CgoKCn07CiMgMTA3ICJhdXRv
L2ZwdS5oIiAyCiMgMSAiYXV0by9jcHUuaCIgMQojIDE2ICJhdXRvL2NwdS5oIgpjbGFzcyBDcHUK
ewpwdWJsaWM6CgogIGVudW0gVmVuZG9yIHsKICAgIFZFTkRPUl9VTktOT1dOID0gMCwKICAgIFZF
TkRPUl9JTlRFTCwKICAgIFZFTkRPUl9BTUQsCiAgICBWRU5ET1JfQ1lSSVgsCiAgICBWRU5ET1Jf
SURULAogICAgVkVORE9SX1VNQywKICAgIFZFTkRPUl9ORVhHRU4sCiAgICBWRU5ET1JfUklTRSwK
ICAgIFZFTkRPUl9UUkFOU01FVEEsCiAgfTsKCiAgc3RhdGljIGNvbnN0IGNoYXIgKiB2ZW5kb3Jf
c3RyKCk7CiAgc3RhdGljIGNvbnN0IGNoYXIgKiBtb2RlbF9zdHIoKTsKICBzdGF0aWMgY29uc3Qg
Q3B1OjpWZW5kb3IgdmVuZG9yKCk7CiAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBmYW1pbHko
KTsKICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1vZGVsKCk7CiAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIGludCBzdGVwcGluZygpOwogIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYXBpYygp
OwogIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZmVhdHVyZXMoKTsKICBzdGF0aWMgdm9pZCBp
ZGVudGlmeSgpOwogIHN0YXRpYyB2b2lkIHNldF9zeXNlbnRlcl9zdGFjayAodW5zaWduZWQgc3Rh
Y2twdHIpOwoKcHJpdmF0ZToKCiAgc3RydWN0IFZlbmRvcl90YWJsZSB7CiAgICB1bnNpZ25lZCB2
ZW5kb3JfbWFzazsKICAgIHVuc2lnbmVkIHZlbmRvcl9jb2RlOwogICAgY29uc3QgY2hhciAqdmVu
ZG9yX3N0cmluZzsKICB9OwoKICBzdGF0aWMgdW5zaWduZWQgY3B1X3N5c2VudGVyX3N0YWNrIGFz
bSAoIkNQVV9TWVNFTlRFUl9TVEFDSyIpOwogIHN0YXRpYyB1bnNpZ25lZCBjcHVfdmVyc2lvbjsK
ICBzdGF0aWMgdW5zaWduZWQgY3B1X2FwaWM7CiAgc3RhdGljIHVuc2lnbmVkIGNwdV9mZWF0dXJl
czsKICBzdGF0aWMgVmVuZG9yIGNwdV92ZW5kb3I7CiAgc3RhdGljIGNoYXIgY3B1X3ZlbmRvcl9z
dHJbMTNdOwogIHN0YXRpYyBjb25zdCBjaGFyICogY3B1X21vZGVsX3N0cjsKCiAgc3RhdGljIFZl
bmRvcl90YWJsZSBpbnRlbF90YWJsZVtdOwogIHN0YXRpYyBWZW5kb3JfdGFibGUgYW1kX3RhYmxl
W107CiAgc3RhdGljIFZlbmRvcl90YWJsZSBjeXJpeF90YWJsZVtdOwogIHN0YXRpYyBWZW5kb3Jf
dGFibGUgaWR0X3RhYmxlW107CgogIHN0YXRpYyBjb25zdCBjaGFyICogbG9va3VwX21vZGVsX3N0
ciAoY29uc3QgQ3B1OjpWZW5kb3IgdmVuZG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCB2ZXJzaW9uKTsKCiAgc3RhdGljIHZvaWQgd3Jt
c3IgKHVuc2lnbmVkIGVjeCwgdW5zaWduZWQgZWF4LCB1bnNpZ25lZCBlZHgpOwogIHN0YXRpYyB2
b2lkIGNwdWlkICh1bnNpZ25lZCBtb2RlLCB1bnNpZ25lZCAqZWF4LCB1bnNpZ25lZCAqZWJ4LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgKmVj
eCwgdW5zaWduZWQgKmVkeCk7CnByaXZhdGU6CgpwdWJsaWM6CiAgZW51bSBMYnIKICAgIHsKICAg
ICAgTEJSX1VOSU5JVElBTElaRUQgPSAwLAogICAgICBMQlJfTk9ORSwKICAgICAgTEJSX1A2LAog
ICAgICBMQlJfUDQsCiAgICB9OwoKcHJpdmF0ZToKICBzdGF0aWMgTGJyIGNwdV9sYnI7CgpwdWJs
aWM6CiAgc3RhdGljIGNvbnN0IENwdTo6TGJyIGhhc19sYnIoKTsKCiAgc3RhdGljIHZvaWQgaW5p
dCh2b2lkKTsKCnByaXZhdGU6CiAgc3RhdGljIHZvaWQgYm9jaHNfdHdlYWtzKCk7Cn07CiMgMTA1
ICJhdXRvL2NwdS5oIgppbmxpbmUgdm9pZApDcHU6OndybXNyKHVuc2lnbmVkIGVjeCwgdW5zaWdu
ZWQgZWF4LCB1bnNpZ25lZCBlZHgpCnsKICBhc20gdm9sYXRpbGUgKCJ3cm1zciIgOiA6ICJjIihl
Y3gpLCAiYSIoZWF4KSwgImQiKGVkeCkpOwp9CgoKCmlubGluZSB2b2lkCkNwdTo6Y3B1aWQodW5z
aWduZWQgbW9kZSwKICAgICAgICAgICAgdW5zaWduZWQgKmVheCwgdW5zaWduZWQgKmVieCwgdW5z
aWduZWQgKmVjeCwgdW5zaWduZWQgKmVkeCkKewogIGFzbSB2b2xhdGlsZSAoImNwdWlkIiA6ICI9
YSIoKmVheCksICI9YiIoKmVieCksICI9YyIoKmVjeCksICI9ZCIoKmVkeCkKICAgICAgICAgICAg
ICAgICAgICAgICAgOiAiYSIobW9kZSkpOwp9CgoKCmlubGluZSB2b2lkCkNwdTo6c2V0X3N5c2Vu
dGVyX3N0YWNrKHVuc2lnbmVkIHN0YWNrcHRyKQp7CiAgY3B1X3N5c2VudGVyX3N0YWNrID0gc3Rh
Y2twdHI7Cn0KCgoKaW5saW5lIGNvbnN0IGNoYXIgKgpDcHU6OnZlbmRvcl9zdHIoKQp7CiAgcmV0
dXJuIGNwdV92ZW5kb3Jfc3RyOwp9CgoKCmlubGluZSBjb25zdCBjaGFyICoKQ3B1Ojptb2RlbF9z
dHIoKQp7CiAgcmV0dXJuIGNwdV9tb2RlbF9zdHI7Cn0KCgoKaW5saW5lIGNvbnN0IENwdTo6VmVu
ZG9yCkNwdTo6dmVuZG9yKCkKewogIHJldHVybiBjcHVfdmVuZG9yOwp9CgoKCmlubGluZSBjb25z
dCB1bnNpZ25lZCBpbnQKQ3B1OjpmYW1pbHkoKQp7CiAgcmV0dXJuIChjcHVfdmVyc2lvbiA+PiA4
KSAmIDB4RjsKfQoKCgppbmxpbmUgY29uc3QgdW5zaWduZWQgaW50CkNwdTo6bW9kZWwoKQp7CiAg
cmV0dXJuIChjcHVfdmVyc2lvbiA+PiA0KSAmIDB4RjsKfQoKCgppbmxpbmUgY29uc3QgdW5zaWdu
ZWQgaW50CkNwdTo6c3RlcHBpbmcoKQp7CiAgcmV0dXJuIGNwdV92ZXJzaW9uICYgMHhGOwp9CgoK
CmlubGluZSBjb25zdCB1bnNpZ25lZCBpbnQKQ3B1OjphcGljKCkKewogIHJldHVybiAoY3B1X2Fw
aWMgPj4gMjQpICYgMHhGRjsKfQoKCgppbmxpbmUgY29uc3QgdW5zaWduZWQgaW50CkNwdTo6ZmVh
dHVyZXMoKQp7CiAgcmV0dXJuIGNwdV9mZWF0dXJlczsKfQojIDEwOCAiYXV0by9mcHUuaCIgMgoj
IDEgIi4uL3NyYy9rZXJuL2lhMzIvcmVnZGVmcy5oIiAxCiMgMTA5ICJhdXRvL2ZwdS5oIiAyCiMg
MTE3ICJhdXRvL2ZwdS5oIgppbmxpbmUgRnB1X3N0YXRlOjpGcHVfc3RhdGUoKSA6IF9zdGF0ZV9i
dWZmZXIoMCkKe30KCgoKaW5saW5lIEZwdV9zdGF0ZTo6fkZwdV9zdGF0ZSgpCnsKICBmcmVlX3N0
YXRlKCk7Cn0KCgoKaW5saW5lIHZvaWQgKkZwdV9zdGF0ZTo6c3RhdGVfYnVmZmVyKCkKewogIHJl
dHVybiBfc3RhdGVfYnVmZmVyOwp9CgoKCmlubGluZSB2b2lkIEZwdV9zdGF0ZTo6c2F2ZV9zdGF0
ZSgpCnsKICBGcHU6OnNhdmVfc3RhdGUodGhpcyk7Cn0KCgoKaW5saW5lIHZvaWQgRnB1X3N0YXRl
OjpyZXN0b3JlX3N0YXRlKCkKewogIEZwdTo6cmVzdG9yZV9zdGF0ZSh0aGlzKTsKfQoKCgppbmxp
bmUgQ29udGV4dCAqIEZwdTo6b3duZXIoKQp7CiAgcmV0dXJuIF9vd25lcjsKfQoKCgppbmxpbmUg
dm9pZCBGcHU6OnNldF9vd25lcihDb250ZXh0ICpvd25lcikKewogIF9vd25lciA9IG93bmVyOwp9
CgoKCmlubGluZSBib29sIEZwdTo6aXNfb3duZXIoQ29udGV4dCAqb3duZXIpCnsKICByZXR1cm4g
X293bmVyID09IG93bmVyOwp9CgoKCgoKCmlubGluZSB2b2lkIEZwdTo6c2F2ZV9zdGF0ZSggRnB1
X3N0YXRlICpzICkKewogICgodm9pZCkgKChzLT5zdGF0ZV9idWZmZXIoKSkgPyAwIDogKF9fYXNz
ZXJ0X2ZhaWwgKCJzLT5zdGF0ZV9idWZmZXIoKSIsICJhdXRvL2ZwdS5oIiwgMTc2LCAoKGNvbnN0
IGNoYXIgKikgMCkpLCAwKSkpOwoKICBpZiAoKENwdTo6ZmVhdHVyZXMoKSAmIDB4MDEwMDAwMDAp
KQogICAgYXNtIHZvbGF0aWxlICgiZnhzYXZlICglMCkiIDogOiAiciIgKHMtPnN0YXRlX2J1ZmZl
cigpKSA6ICJtZW1vcnkiKTsKICBlbHNlCiAgICBhc20gdm9sYXRpbGUgKCJmbnNhdmUgKCUwKSIg
OiA6ICJyIiAocy0+c3RhdGVfYnVmZmVyKCkpIDogIm1lbW9yeSIpOwp9CgoKCgoKCmlubGluZSB2
b2lkIEZwdTo6cmVzdG9yZV9zdGF0ZSggRnB1X3N0YXRlICpzICkKewogICgodm9pZCkgKChzLT5z
dGF0ZV9idWZmZXIoKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJzLT5zdGF0ZV9idWZmZXIoKSIs
ICJhdXRvL2ZwdS5oIiwgMTkxLCAoKGNvbnN0IGNoYXIgKikgMCkpLCAwKSkpOwoKICBpZiAoKENw
dTo6ZmVhdHVyZXMoKSAmIDB4MDEwMDAwMDApKQogICAgYXNtIHZvbGF0aWxlICgiZnhyc3RvciAo
JTApIiA6IDogInIiIChzLT5zdGF0ZV9idWZmZXIoKSkpOwogIGVsc2UKICAgIGFzbSB2b2xhdGls
ZSAoImZyc3RvciAgKCUwKSIgOiA6ICJyIiAocy0+c3RhdGVfYnVmZmVyKCkpKTsKfQojIDIwNiAi
YXV0by9mcHUuaCIKaW5saW5lIHZvaWQgRnB1Ojppbml0X3N0YXRlKCBGcHVfc3RhdGUgKnMgKQp7
CiAgaWYgKChDcHU6OmZlYXR1cmVzKCkgJiAweDAxMDAwMDAwKSkgewoKICAgIHNzZV9yZWdzICpz
c2UgPSAoc3NlX3JlZ3MgKikgcy0+c3RhdGVfYnVmZmVyKCk7CgogICAgbWVtc2V0IChzc2UsIDAs
IHNpemVvZiAoKnNzZSkpOwogICAgc3NlLT5jd2QgPSAweDM3ZjsKCiAgICBpZiAoKENwdTo6ZmVh
dHVyZXMoKSAmIDB4MDIwMDAwMDApICYmIChDcHU6OmZlYXR1cmVzKCkgJiAweDA0MDAwMDAwKSkK
ICAgICAgc3NlLT5teGNzciA9IDB4MWY4MDsKCiAgfSBlbHNlIHsKCiAgICBmcHVfcmVncyAqZnB1
ID0gKGZwdV9yZWdzICopIHMtPnN0YXRlX2J1ZmZlcigpOwoKICAgIG1lbXNldCAoZnB1LCAwLCBz
aXplb2YgKCpmcHUpKTsKICAgIGZwdS0+Y3dkID0gMHhmZmZmMDM3ZjsKICAgIGZwdS0+c3dkID0g
MHhmZmZmMDAwMDsKICAgIGZwdS0+dHdkID0gMHhmZmZmZmZmZjsKICAgIGZwdS0+Zm9zID0gMHhm
ZmZmMDAwMDsKICB9Cn0KCgoKaW5saW5lIHVuc2lnbmVkIGNvbnN0IEZwdTo6c3RhdGVfc2l6ZSgp
CnsKICByZXR1cm4gKENwdTo6ZmVhdHVyZXMoKSAmIDB4MDEwMDAwMDApID8gc2l6ZW9mIChzc2Vf
cmVncykgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAo
ZnB1X3JlZ3MpOwp9CgoKCmlubGluZSB1bnNpZ25lZCBjb25zdCBGcHU6OnN0YXRlX2FsaWduKCkK
ewogIHJldHVybiAoQ3B1OjpmZWF0dXJlcygpICYgMHgwMTAwMDAwMCkgPyAxNiA6IDQ7Cn0KCgoK
CgoKCmlubGluZSB2b2lkIEZwdTo6c3luY2hyb25pemUoKQp7CiAgYXNtIHZvbGF0aWxlICgiZndh
aXQiKTsKfQoKCgoKCgppbmxpbmUgdm9pZCBGcHU6OmRpc2FibGUoKQp7CiAgVW5zaWduZWQzMiBk
dW1teTsKCiAgYXNtIHZvbGF0aWxlICgibW92bCAlJWNyMCwgJTA7IG9ybCAlMSwgJTA7IG1vdmwg
JTAsICUlY3IwIgogICAgICAgICAgICAgICAgOiAiPXIiIChkdW1teSkKICAgICAgICAgICAgICAg
IDogImkiICgweDAwMDAwMDA4KSk7Cn0KCgoKCgoKaW5saW5lIHZvaWQgRnB1OjplbmFibGUoKQp7
CiAgYXNtIHZvbGF0aWxlICgiY2x0cyIpOwp9CiMgMTMgImF1dG8vY29udGV4dC5oIiAyCgoKCgoK
CmNsYXNzIFNwYWNlX2NvbnRleHQ7CmNsYXNzIFRocmVhZF9sb2NrOwpjbGFzcyBSZXR1cm5fZnJh
bWU7CgoKCgoKY2xhc3MgQ29udGV4dAp7CnB1YmxpYzoKICBzdGF0aWMgY29uc3Qgdm1fc2l6ZV90
IHNpemUgPSBDb25maWc6OnRocmVhZF9ibG9ja19zaXplOwoKcHJpdmF0ZToKCiAgdm9pZCBzd2l0
Y2hpbl9jb250ZXh0KCkgYXNtKCJjYWxsX3N3aXRjaGluX2NvbnRleHQiKTsKCiAgZnJpZW5kIGNs
YXNzIGpkYjsKICBmcmllbmQgY2xhc3MgamRiX3RidWY7CgoKCgogICAgICAgICAgICAgdW5zaWdu
ZWQgX3N0YXRlOwoKCnByb3RlY3RlZDoKICAgICAgICAgICAgIENvbnRleHQgKnJlYWR5X25leHQ7
CiAgICAgICAgICAgICBDb250ZXh0ICpyZWFkeV9wcmV2OwogICAgICAgICAgICAgTXdvcmQgKmtl
cm5lbF9zcDsKCnByaXZhdGU6CiAgICAgICAgICAgICBTcGFjZV9jb250ZXh0KiBfc3BhY2VfY29u
dGV4dDsKCiAgQ29udGV4dCogX3N0YWNrX2xpbms7CgogIENvbnRleHQqIF9kb25hdGVlOwoKCgoK
CiAgaW50IF9sb2NrX2NudDsKICBUaHJlYWRfbG9jayogY29uc3QgX3RocmVhZF9sb2NrOwoKCgoK
ICBzY2hlZF90IF9zY2hlZDsKCgogIEZwdV9zdGF0ZSBfZnB1X3N0YXRlOwoKCnByb3RlY3RlZDoK
ICBzdGF0aWMgQ29udGV4dCAqcHJpb19maXJzdFsyNTZdIGFzbSAoIkNPTlRFWFRfUFJJT19GSVJT
VCIpOwogIHN0YXRpYyBDb250ZXh0ICpwcmlvX25leHRbMjU2XSBhc20gKCJDT05URVhUX1BSSU9f
TkVYVCIpOwogIHN0YXRpYyB1bnNpZ25lZCBwcmlvX2hpZ2hlc3QgYXNtICgiQ09OVEVYVF9QUklP
X0hJR0hFU1QiKTsKICBzdGF0aWMgaW50IHRpbWVzbGljZV90aWNrc19sZWZ0OwogIHN0YXRpYyBD
b250ZXh0ICp0aW1lc2xpY2Vfb3duZXI7CgpwdWJsaWM6CiMgODkgImF1dG8vY29udGV4dC5oIgog
IENvbnRleHQoVGhyZWFkX2xvY2sgKnRocmVhZF9sb2NrLCBTcGFjZV9jb250ZXh0KiBzcGFjZV9j
b250ZXh0KTsKCgoKICB2aXJ0dWFsIH5Db250ZXh0KCk7CgoKCgogIHVuc2lnbmVkIHN0YXRlKCkg
Y29uc3Q7CgoKCgogIGJvb2wgZXhpc3RzKCkgY29uc3Q7CgoKCgoKICBib29sIHN0YXRlX2FkZCh1
bnNpZ25lZCBiaXRzKTsKCgoKCgogIGJvb2wgc3RhdGVfZGVsKHVuc2lnbmVkIGJpdHMpOwoKCgoK
CgoKICBib29sIHN0YXRlX2NoYW5nZSh1bnNpZ25lZCBtYXNrLCB1bnNpZ25lZCBiaXRzKTsKIyAx
MzYgImF1dG8vY29udGV4dC5oIgogIGJvb2wgc3RhdGVfY2hhbmdlX3NhZmVseSh1bnNpZ25lZCBt
YXNrLCB1bnNpZ25lZCBiaXRzKTsKCgoKCgoKCiAgdm9pZCBzdGF0ZV9jaGFuZ2VfZGlydHkodW5z
aWduZWQgbWFzaywgdW5zaWduZWQgYml0cyk7CgoKCgoKICBTcGFjZV9jb250ZXh0ICogc3BhY2Vf
Y29udGV4dCgpIGNvbnN0OwoKCgoKICBUaHJlYWRfbG9jayAqIHRocmVhZF9sb2NrKCk7CgoKCgog
IHNjaGVkX3QgKiBzY2hlZCgpOwoKCgoKICBSZXR1cm5fZnJhbWUgKnJlZ3MoKSBjb25zdDsKCgoK
ICB2b2lkIGluY19sb2NrX2NudCgpOwoKCgoKICB2b2lkIGRlY19sb2NrX2NudCgpOwoKCgoKICBp
bnQgbG9ja19jbnQoKTsKCgoKCgoKICB2b2lkIHNjaGVkdWxlKCk7CgoKICBzdGF0aWMgdm9pZCB0
aW1lcl90aWNrKCk7CgoKCgogIGJvb2wgaW5fcmVhZHlfbGlzdCgpOwoKCgogIHZvaWQgcmVhZHlf
ZW5xdWV1ZSgpOwoKCgogIHZvaWQgcmVhZHlfZGVxdWV1ZSgpOwoKCgoKCgoKICBDb250ZXh0ICog
Z2V0X25leHQoKTsKCgoKCiAgdm9pZCBzZXRfbmV4dChDb250ZXh0ICpuZXh0KTsKCgoKCgoKICBD
b250ZXh0KiBkb25hdGVlKCk7CgogIHZvaWQgc2V0X2RvbmF0ZWUoQ29udGV4dCogZG9uYXRlZSk7
CgogIHZvaWQgc2V0X2tlcm5lbF9zcChNd29yZCAqZXNwKTsKCiAgRnB1X3N0YXRlICpjb25zdCBm
cHVfc3RhdGUoKTsKIyAyMzcgImF1dG8vY29udGV4dC5oIgogIGJvb2wgc3dpdGNoX3RvKENvbnRl
eHQgKnQpOwoKCgoKICB2b2lkIGhhbmRsZV9mcHVfdHJhcCgpOwp9OwoKCgoKCmV4dGVybiAiQyIg
dm9pZCB0aHJlYWRfaGFuZGxlX2ZwdXRyYXAoKTsKIyAyNjIgImF1dG8vY29udGV4dC5oIgojIDEg
ImF1dG8vZW50cnlfZnJhbWUuaCIgMQojIDIxICJhdXRvL2VudHJ5X2ZyYW1lLmgiCmNsYXNzIFN5
c2NhbGxfZnJhbWUKewpwcml2YXRlOgoKcHVibGljOgoKICBVbnNpZ25lZDMyIGVjeDsKICBVbnNp
Z25lZDMyIGVkeDsKICBVbnNpZ25lZDMyIGVzaTsKICBVbnNpZ25lZDMyIGVkaTsKICBVbnNpZ25l
ZDMyIGVieDsKICBVbnNpZ25lZDMyIGVicDsKICBVbnNpZ25lZDMyIGVheDsKfTsKCmNsYXNzIFJl
dHVybl9mcmFtZQp7CnByaXZhdGU6CgpwdWJsaWM6CiAgVW5zaWduZWQzMiBlaXA7CiAgVW5zaWdu
ZWQxNiBjcywgX19jc3U7CiAgVW5zaWduZWQzMiBlZmxhZ3M7CiAgVW5zaWduZWQzMiBlc3A7CiAg
VW5zaWduZWQxNiBzcywgX19zc3U7Cgp9OwoKCgoKCgoKY2xhc3MgRW50cnlfZnJhbWUgOiBwdWJs
aWMgU3lzY2FsbF9mcmFtZSwgcHVibGljIFJldHVybl9mcmFtZQp7Cn07CgoKCgpjbGFzcyBTeXNf
aXBjX2ZyYW1lIDogcHVibGljIFN5c2NhbGxfZnJhbWUKewpwdWJsaWM6CgogIHZvaWQgcmN2X3Nv
dXJjZSggTDRfdWlkIGlkICk7CgoKICBMNF91aWQgcmN2X3NvdXJjZSgpOwoKCiAgTDRfdWlkIHNu
ZF9kZXN0KCkgY29uc3Q7CgoKICBNd29yZCBoYXNfc25kX2Rlc3QoKSBjb25zdDsKCgogIE13b3Jk
IGlycSgpIGNvbnN0OwoKCiAgdm9pZCBzbmRfZGVzYyggTXdvcmQgdyApOwoKCiAgTDRfc25kX2Rl
c2Mgc25kX2Rlc2MoKSBjb25zdDsKCgogIHZvaWQgcmN2X2Rlc2MoIE13b3JkIHcgKTsKCgogIEw0
X3Jjdl9kZXNjIHJjdl9kZXNjKCkgY29uc3Q7CgoKICBMNF90aW1lb3V0IHRpbWVvdXQoKSBjb25z
dDsKCgogIE13b3JkIG1zZzAoKSBjb25zdDsKCgogIE13b3JkIG1zZzEoKSBjb25zdDsKCgogIHZv
aWQgbXNnMCggTXdvcmQgdyApOwoKCiAgdm9pZCBtc2cxKCBNd29yZCB3ICk7CgoKICB2b2lkIGNv
cHlfbXNnKCBTeXNfaXBjX2ZyYW1lICp0byApIGNvbnN0IDsKCgogIE13b3JkIG1zZ19kb3BlKCkg
Y29uc3Q7CgoKICB2b2lkIG1zZ19kb3BlKCBNd29yZCBkICk7CgoKICB2b2lkIG1zZ19kb3BlX29y
KCBNd29yZCBkICk7Cn07CgoKCgpjbGFzcyBTeXNfaWRfbmVhcmVzdF9mcmFtZSA6IHB1YmxpYyBT
eXNjYWxsX2ZyYW1lCnsKcHVibGljOgoKCiAgTDRfdWlkIGRlc3QoKSBjb25zdDsKCgogIHZvaWQg
bmVhcmVzdCggTDRfdWlkIGlkICkgOwp9OwoKCgoKY2xhc3MgU3lzX2V4X3JlZ3NfZnJhbWUgOiBw
dWJsaWMgU3lzY2FsbF9mcmFtZQp7CnB1YmxpYzoKCgogIE13b3JkIGx0aHJlYWQoKSBjb25zdDsK
CgogIE13b3JkIHNwKCkgY29uc3Q7CgoKICBNd29yZCBpcCgpIGNvbnN0OwoKCiAgTDRfdWlkIHBy
ZWVtcHRlcigpIGNvbnN0OwoKCiAgTDRfdWlkIHBhZ2VyKCkgY29uc3Q7CgoKICB2b2lkIG9sZF9l
ZmxhZ3MoIE13b3JkIG9lZmwgKTsKCgogIHZvaWQgb2xkX3NwKCBNd29yZCBvc3AgKTsKCgogIHZv
aWQgb2xkX2lwKCBNd29yZCBvaXAgKTsKCgogIHZvaWQgb2xkX3ByZWVtcHRlciggTDRfdWlkIGlk
ICk7CgoKICB2b2lkIG9sZF9wYWdlciggTDRfdWlkIGlkICk7Cn07CgoKCgpjbGFzcyBTeXNfdGhy
ZWFkX3N3aXRjaF9mcmFtZSA6IHB1YmxpYyBTeXNjYWxsX2ZyYW1lCnsKcHVibGljOgoKCiAgTDRf
dWlkIGRlc3QoKSBjb25zdDsKCgogIE13b3JkIGhhc19kZXN0KCkgY29uc3Q7Cgp9OwoKCgoKY2xh
c3MgU3lzX3RocmVhZF9zY2hlZHVsZV9mcmFtZSA6IHB1YmxpYyBTeXNjYWxsX2ZyYW1lCnsKcHVi
bGljOgoKCiAgTXdvcmQgcGFyYW0oKSBjb25zdDsKCgogIEw0X3VpZCBwcmVlbXB0ZXIoKSBjb25z
dDsKCgogIEw0X3VpZCBkZXN0KCkgY29uc3Q7CgoKICB2b2lkIG9sZF9wYXJhbSggTXdvcmQgb3Ag
KTsKCgogIHZvaWQgdGltZSggVW5zaWduZWQ2NCB0ICk7CgoKICB2b2lkIG9sZF9wcmVlbXB0ZXIo
IEw0X3VpZCBpZCApOwoKCiAgdm9pZCBwYXJ0bmVyKCBMNF91aWQgaWQgKTsKfTsKCgoKCmNsYXNz
IFN5c191bm1hcF9mcmFtZSA6IHB1YmxpYyBTeXNjYWxsX2ZyYW1lCnsKcHVibGljOgoKCiAgTDRf
ZnBhZ2UgZnBhZ2UoKSBjb25zdDsKCgogIE13b3JkIG1hcF9tYXNrKCkgY29uc3Q7CgoKICBib29s
IGRvd25ncmFkZSgpIGNvbnN0OwoKCiAgYm9vbCBzZWxmX3VubWFwKCkgY29uc3Q7Cn07CgoKCgpj
bGFzcyBTeXNfdGFza19uZXdfZnJhbWUgOiBwdWJsaWMgU3lzY2FsbF9mcmFtZQp7CnB1YmxpYzoK
CgogIE13b3JkIG1jcCgpIGNvbnN0OwoKCiAgTDRfdWlkIG5ld19jaGllZigpIGNvbnN0OwoKCiAg
TXdvcmQgc3AoKSBjb25zdDsKCgogIE13b3JkIGlwKCkgY29uc3Q7CgoKICBNd29yZCBoYXNfcGFn
ZXIoKSBjb25zdDsKCgogIEw0X3VpZCBwYWdlcigpIGNvbnN0OwoKCiAgTDRfdWlkIGRlc3QoKSBj
b25zdDsKCgogIHZvaWQgbmV3X3Rhc2tpZCggTDRfdWlkIGlkICk7Cgp9OwojIDI4MSAiYXV0by9l
bnRyeV9mcmFtZS5oIgppbmxpbmUgdm9pZCBTeXNfaXBjX2ZyYW1lOjpyY3Zfc291cmNlKCBMNF91
aWQgaWQgKQp7CiAgZXNpID0gaWQucmF3KCk7IGVkaSA9IChpZC5yYXcoKSA+PiAzMik7Cn0KCgoK
aW5saW5lIEw0X3VpZCBTeXNfaXBjX2ZyYW1lOjpyY3Zfc291cmNlKCkKewogIHJldHVybiBMNF91
aWQoKChVbnNpZ25lZDY0KWVkaSA8PCAzMikgfCAoVW5zaWduZWQ2NCllc2kpOwp9CgoKCmlubGlu
ZSBMNF91aWQgU3lzX2lwY19mcmFtZTo6c25kX2Rlc3QoKSBjb25zdAp7CiAgcmV0dXJuIEw0X3Vp
ZCggKFVuc2lnbmVkNjQpZXNpIHwgKChVbnNpZ25lZDY0KWVkaSA8PCAzMikgKTsKfQoKCgppbmxp
bmUgTXdvcmQgU3lzX2lwY19mcmFtZTo6aGFzX3NuZF9kZXN0KCkgY29uc3QKewogIHJldHVybiBl
c2k7Cn0KCgoKaW5saW5lIE13b3JkIFN5c19pcGNfZnJhbWU6OmlycSgpIGNvbnN0CnsKICByZXR1
cm4gZXNpIC0xOwp9CgoKCmlubGluZSB2b2lkIFN5c19pcGNfZnJhbWU6OnNuZF9kZXNjKCBNd29y
ZCB3ICkKewogIGVheCA9dzsKfQoKCgppbmxpbmUgTDRfc25kX2Rlc2MgU3lzX2lwY19mcmFtZTo6
c25kX2Rlc2MoKSBjb25zdAp7CiAgcmV0dXJuIGVheDsKfQoKCgppbmxpbmUgTDRfdGltZW91dCBT
eXNfaXBjX2ZyYW1lOjp0aW1lb3V0KCkgY29uc3QKewogIHJldHVybiBMNF90aW1lb3V0KCBlY3gg
KTsKfQoKCgppbmxpbmUgTXdvcmQgU3lzX2lwY19mcmFtZTo6bXNnMCgpIGNvbnN0CnsKICByZXR1
cm4gZWR4Owp9CgoKCmlubGluZSBNd29yZCBTeXNfaXBjX2ZyYW1lOjptc2cxKCkgY29uc3QKewog
IHJldHVybiBlYng7Cn0KCgoKaW5saW5lIEw0X3Jjdl9kZXNjIFN5c19pcGNfZnJhbWU6OnJjdl9k
ZXNjKCkgY29uc3QKewogIHJldHVybiBlYnA7Cn0KCgoKaW5saW5lIHZvaWQgU3lzX2lwY19mcmFt
ZTo6cmN2X2Rlc2MoIE13b3JkIHcgKQp7CiAgZWJwID0gdzsKfQoKCgppbmxpbmUgTXdvcmQgU3lz
X2lwY19mcmFtZTo6bXNnX2RvcGUoKSBjb25zdAp7CiAgcmV0dXJuIGVheDsKfQoKCgppbmxpbmUg
dm9pZCBTeXNfaXBjX2ZyYW1lOjptc2cwKCBNd29yZCB3ICkKewogIGVkeCA9IHc7Cn0KCgoKaW5s
aW5lIHZvaWQgU3lzX2lwY19mcmFtZTo6bXNnMSggTXdvcmQgdyApCnsKICBlYnggPSB3Owp9CgoK
CmlubGluZSB2b2lkIFN5c19pcGNfZnJhbWU6Om1zZ19kb3BlKCBNd29yZCBkICkKewogIGVheCA9
IGQ7Cn0KCgoKaW5saW5lIHZvaWQgU3lzX2lwY19mcmFtZTo6bXNnX2RvcGVfb3IoIE13b3JkIGQg
KQp7CiAgZWF4IHw9IGQ7Cn0KCgoKaW5saW5lIHZvaWQgU3lzX2lwY19mcmFtZTo6Y29weV9tc2co
IFN5c19pcGNfZnJhbWUgKnRvICkgY29uc3QKewogIHRvLT5lZHggPSBlZHg7CiAgdG8tPmVieCA9
IGVieDsKfQoKCgoKCmlubGluZSBMNF91aWQgU3lzX2lkX25lYXJlc3RfZnJhbWU6OmRlc3QoKSBj
b25zdAp7CiAgcmV0dXJuIEw0X3VpZCggKFVuc2lnbmVkNjQpZXNpIHwgKChVbnNpZ25lZDY0KWVk
aSA8PCAzMikgKTsKfQoKCgppbmxpbmUgdm9pZCBTeXNfaWRfbmVhcmVzdF9mcmFtZTo6bmVhcmVz
dCggTDRfdWlkIGlkICkKewogIGVzaSA9IGlkLnJhdygpOyBlZGkgPSAoaWQucmF3KCkgPj4gMzIp
Owp9CgoKCgoKaW5saW5lIE13b3JkIFN5c19leF9yZWdzX2ZyYW1lOjpsdGhyZWFkKCkgY29uc3QK
ewogIHJldHVybiBlYXg7Cn0KCgoKaW5saW5lIE13b3JkIFN5c19leF9yZWdzX2ZyYW1lOjpzcCgp
IGNvbnN0CnsKICByZXR1cm4gZWN4Owp9CgoKCmlubGluZSBNd29yZCBTeXNfZXhfcmVnc19mcmFt
ZTo6aXAoKSBjb25zdAp7CiAgcmV0dXJuIGVkeDsKfQoKCgppbmxpbmUgTDRfdWlkIFN5c19leF9y
ZWdzX2ZyYW1lOjpwcmVlbXB0ZXIoKSBjb25zdAp7CiAgcmV0dXJuIEw0X3VpZCggKFVuc2lnbmVk
NjQpZWJ4IHwgKChVbnNpZ25lZDY0KWVicCA8PCAzMikgKTsKfQoKCgppbmxpbmUgTDRfdWlkIFN5
c19leF9yZWdzX2ZyYW1lOjpwYWdlcigpIGNvbnN0CnsKICByZXR1cm4gTDRfdWlkKCAoVW5zaWdu
ZWQ2NCllc2kgfCAoKFVuc2lnbmVkNjQpZWRpIDw8IDMyKSApOwp9CgoKCmlubGluZSB2b2lkIFN5
c19leF9yZWdzX2ZyYW1lOjpvbGRfZWZsYWdzKCBNd29yZCBvZWZsICkKewogIGVheCA9IG9lZmw7
Cn0KCgoKaW5saW5lIHZvaWQgU3lzX2V4X3JlZ3NfZnJhbWU6Om9sZF9zcCggTXdvcmQgb3NwICkK
ewogIGVjeCA9IG9zcDsKfQoKCgppbmxpbmUgdm9pZCBTeXNfZXhfcmVnc19mcmFtZTo6b2xkX2lw
KCBNd29yZCBvaXAgKQp7CiAgZWR4ID0gb2lwOwp9CgoKCmlubGluZSB2b2lkIFN5c19leF9yZWdz
X2ZyYW1lOjpvbGRfcHJlZW1wdGVyKCBMNF91aWQgaWQgKQp7CiAgZWJ4ID0gaWQucmF3KCk7IGVi
cCA9IGlkLnJhdygpID4+IDMyOwp9CgoKCmlubGluZSB2b2lkIFN5c19leF9yZWdzX2ZyYW1lOjpv
bGRfcGFnZXIoIEw0X3VpZCBpZCApCnsKICBlc2kgPSBpZC5yYXcoKTsgZWRpID0gaWQucmF3KCkg
Pj4gMzI7Cn0KCgoKCgppbmxpbmUgTDRfdWlkIFN5c190aHJlYWRfc3dpdGNoX2ZyYW1lOjpkZXN0
KCkgY29uc3QKewoKICByZXR1cm4gTDRfdWlkKCAoVW5zaWduZWQ2NCllc2kgfCAoKFVuc2lnbmVk
NjQpZWRpIDw8IDMyKSApOwp9CgoKCmlubGluZSBNd29yZCBTeXNfdGhyZWFkX3N3aXRjaF9mcmFt
ZTo6aGFzX2Rlc3QoKSBjb25zdAp7CiAgcmV0dXJuIGVzaTsKfQoKCgoKCmlubGluZSBNd29yZCBT
eXNfdGhyZWFkX3NjaGVkdWxlX2ZyYW1lOjpwYXJhbSgpIGNvbnN0CnsKICByZXR1cm4gZWF4Owp9
CgoKCmlubGluZSBMNF91aWQgU3lzX3RocmVhZF9zY2hlZHVsZV9mcmFtZTo6cHJlZW1wdGVyKCkg
Y29uc3QKewogIHJldHVybiBMNF91aWQoIChVbnNpZ25lZDY0KWVieCB8ICgoVW5zaWduZWQ2NCll
YnAgPDwgMzIpICk7Cn0KCgoKaW5saW5lIEw0X3VpZCBTeXNfdGhyZWFkX3NjaGVkdWxlX2ZyYW1l
OjpkZXN0KCkgY29uc3QKewogIHJldHVybiBMNF91aWQoIChVbnNpZ25lZDY0KWVzaSB8ICgoVW5z
aWduZWQ2NCllZGkgPDwgMzIpICk7Cn0KCgoKaW5saW5lIHZvaWQgU3lzX3RocmVhZF9zY2hlZHVs
ZV9mcmFtZTo6b2xkX3BhcmFtKCBNd29yZCBvcCApCnsKICBlYXggPSBvcDsKfQoKCgppbmxpbmUg
dm9pZCBTeXNfdGhyZWFkX3NjaGVkdWxlX2ZyYW1lOjp0aW1lKCBVbnNpZ25lZDY0IHQgKQp7CiAg
ZWN4ID0gdDsgZWR4ID0gdCA+PiAzMjsKfQoKCgppbmxpbmUgdm9pZCBTeXNfdGhyZWFkX3NjaGVk
dWxlX2ZyYW1lOjpvbGRfcHJlZW1wdGVyKCBMNF91aWQgaWQgKQp7CiAgZWJ4ID0gaWQucmF3KCk7
IGVicCA9IGlkLnJhdygpID4+IDMyOwp9CgoKCmlubGluZSB2b2lkIFN5c190aHJlYWRfc2NoZWR1
bGVfZnJhbWU6OnBhcnRuZXIoIEw0X3VpZCBpZCApCnsKICBlc2kgPSBpZC5yYXcoKTsgZWRpID0g
aWQucmF3KCkgPj4gMzI7Cn0KCgoKCgppbmxpbmUgTDRfZnBhZ2UgU3lzX3VubWFwX2ZyYW1lOjpm
cGFnZSgpIGNvbnN0CnsKICByZXR1cm4gTDRfZnBhZ2UoIGVheCApIDsKfQoKCgppbmxpbmUgTXdv
cmQgU3lzX3VubWFwX2ZyYW1lOjptYXBfbWFzaygpIGNvbnN0CnsKICByZXR1cm4gZWN4Owp9CgoK
CmlubGluZSBib29sIFN5c191bm1hcF9mcmFtZTo6ZG93bmdyYWRlKCkgY29uc3QKewogIHJldHVy
biAhKGVjeCAmIDIpOwp9CgoKCmlubGluZSBib29sIFN5c191bm1hcF9mcmFtZTo6c2VsZl91bm1h
cCgpIGNvbnN0CnsKICByZXR1cm4gZWN4ICYgMHg4MDAwMDAwMDsKfQoKCgoKCmlubGluZSBNd29y
ZCBTeXNfdGFza19uZXdfZnJhbWU6Om1jcCgpIGNvbnN0CnsKICByZXR1cm4gZWF4Owp9CgoKCmlu
bGluZSBMNF91aWQgU3lzX3Rhc2tfbmV3X2ZyYW1lOjpuZXdfY2hpZWYoKSBjb25zdAp7CiAgcmV0
dXJuIEw0X3VpZCggKFVuc2lnbmVkNjQpZWF4ICk7Cn0KCgoKaW5saW5lIE13b3JkIFN5c190YXNr
X25ld19mcmFtZTo6c3AoKSBjb25zdAp7CiAgcmV0dXJuIGVjeDsKfQoKCgppbmxpbmUgTXdvcmQg
U3lzX3Rhc2tfbmV3X2ZyYW1lOjppcCgpIGNvbnN0CnsKICByZXR1cm4gZWR4Owp9CgoKCmlubGlu
ZSBNd29yZCBTeXNfdGFza19uZXdfZnJhbWU6Omhhc19wYWdlcigpIGNvbnN0CnsKICByZXR1cm4g
ZWJ4Owp9CgoKCmlubGluZSBMNF91aWQgU3lzX3Rhc2tfbmV3X2ZyYW1lOjpwYWdlcigpIGNvbnN0
CnsKICByZXR1cm4gTDRfdWlkKCAoVW5zaWduZWQ2NCllYnggfCAoKFVuc2lnbmVkNjQpZWJwIDw8
IDMyKSApOwp9CgoKCmlubGluZSBMNF91aWQgU3lzX3Rhc2tfbmV3X2ZyYW1lOjpkZXN0KCkgY29u
c3QKewogIHJldHVybiBMNF91aWQoIChVbnNpZ25lZDY0KWVzaSB8ICgoVW5zaWduZWQ2NCllZGkg
PDwgMzIpICk7Cn0KCgoKaW5saW5lIHZvaWQgU3lzX3Rhc2tfbmV3X2ZyYW1lOjpuZXdfdGFza2lk
KCBMNF91aWQgaWQgKQp7CiAgZXNpID0gaWQucmF3KCk7IGVkaSA9IGlkLnJhdygpID4+IDMyOwp9
CiMgMjYzICJhdXRvL2NvbnRleHQuaCIgMgojIDEgImF1dG8vdGhyZWFkX3N0YXRlLmgiIDEKIyAx
MiAiYXV0by90aHJlYWRfc3RhdGUuaCIKZW51bQp7CiAgVGhyZWFkX2ludmFsaWQgPSAwLAogIFRo
cmVhZF9ydW5uaW5nID0gMHgxLAogIFRocmVhZF93YWl0aW5nID0gMHgyLAogIFRocmVhZF9yZWNl
aXZpbmcgPSAweDQsCiAgVGhyZWFkX3BvbGxpbmcgPSAweDgsCiAgVGhyZWFkX2lwY19pbl9wcm9n
cmVzcyA9IDB4MTAsCiAgVGhyZWFkX3NlbmRfaW5fcHJvZ3Jlc3MgPSAweDIwLAogIFRocmVhZF9i
dXN5ID0gMHg0MCwKICBUaHJlYWRfY2FuY2VsID0gMHgxMDAsCiAgVGhyZWFkX2RlYWQgPSAweDIw
MCwKICBUaHJlYWRfcG9sbGluZ19sb25nID0gMHg0MDAsCiAgVGhyZWFkX2J1c3lfbG9uZyA9IDB4
ODAwLAogIFRocmVhZF9yY3Zsb25nX2luX3Byb2dyZXNzID0gMHg0MDAwLAogIFRocmVhZF9mcHVf
b3duZXIgPSAweDEwMDAwLAoKCiAgVGhyZWFkX2lwY19zZW5kaW5nX21hc2sgPSBUaHJlYWRfc2Vu
ZF9pbl9wcm9ncmVzcwogICAgfCBUaHJlYWRfcG9sbGluZyB8IFRocmVhZF9wb2xsaW5nX2xvbmcs
CiAgVGhyZWFkX2lwY19yZWNlaXZpbmdfbWFzayA9IFRocmVhZF93YWl0aW5nIHwgVGhyZWFkX3Jl
Y2VpdmluZwogICAgfCBUaHJlYWRfYnVzeSB8IFRocmVhZF9yY3Zsb25nX2luX3Byb2dyZXNzIHwg
VGhyZWFkX2J1c3lfbG9uZywKICBUaHJlYWRfaXBjX21hc2sgPSBUaHJlYWRfaXBjX2luX3Byb2dy
ZXNzCiAgICB8IFRocmVhZF9pcGNfc2VuZGluZ19tYXNrIHwgVGhyZWFkX2lwY19yZWNlaXZpbmdf
bWFzaywKCn07CiMgMjY0ICJhdXRvL2NvbnRleHQuaCIgMgojIDI4MCAiYXV0by9jb250ZXh0Lmgi
CmlubGluZSBDb250ZXh0OjpDb250ZXh0KFRocmVhZF9sb2NrICp0aHJlYWRfbG9jaywKICAgICAg
ICAgICAgICAgICAgU3BhY2VfY29udGV4dCogc3BhY2VfY29udGV4dCkKICA6IF9zcGFjZV9jb250
ZXh0IChzcGFjZV9jb250ZXh0KSwKICAgIF90aHJlYWRfbG9jayAodGhyZWFkX2xvY2spCnsKCgoK
CgoKCiAgTXdvcmQgKmluaXRfc3AgPSByZWludGVycHJldF9jYXN0PE13b3JkKj4KICAgIChyZWlu
dGVycHJldF9jYXN0PE13b3JkPih0aGlzKSArIHNpemUgLSBzaXplb2YoRW50cnlfZnJhbWUpKTsK
CgoKCiAgc21wX2Nhcygma2VybmVsX3NwLCAoTXdvcmQqKTAsIGluaXRfc3ApOwp9CgoKCgoKCmlu
bGluZSB1bnNpZ25lZCBDb250ZXh0OjpzdGF0ZSgpIGNvbnN0CnsgcmV0dXJuIF9zdGF0ZTsgfQoK
CgoKCgppbmxpbmUgYm9vbCBDb250ZXh0OjpleGlzdHMoKSBjb25zdAp7IHJldHVybiBfc3RhdGUg
IT0gVGhyZWFkX2ludmFsaWQ7IH0KCgoKCgoKCmlubGluZSBib29sCkNvbnRleHQ6OnN0YXRlX2Fk
ZCh1bnNpZ25lZCBiaXRzKQp7CiAgYm9vbCByZXQ7CiAgdW5zaWduZWQgb2xkOwogIGRvCiAgICB7
CiAgICAgIG9sZCA9IF9zdGF0ZTsKICAgICAgcmV0ID0gKF9zdGF0ZSAmIGJpdHMpID09IDA7CiAg
ICB9CiAgd2hpbGUgKCEgc21wX2NhcygmX3N0YXRlLCBvbGQsIG9sZCB8IGJpdHMpKTsKCiAgcmV0
dXJuIHJldDsKfQoKCgoKCgoKaW5saW5lIGJvb2wKQ29udGV4dDo6c3RhdGVfZGVsKHVuc2lnbmVk
IGJpdHMpCnsKICBib29sIHJldDsKICB1bnNpZ25lZCBvbGQ7CiAgZG8KICAgIHsKICAgICAgb2xk
ID0gX3N0YXRlOwogICAgICByZXQgPSAoX3N0YXRlICYgYml0cykgPT0gYml0czsKICAgIH0KICB3
aGlsZSAoISBzbXBfY2FzKCZfc3RhdGUsIG9sZCwgb2xkICYgfmJpdHMpKTsKCiAgcmV0dXJuIHJl
dDsKfQojIDM2NyAiYXV0by9jb250ZXh0LmgiCmlubGluZSBib29sCkNvbnRleHQ6OnN0YXRlX2No
YW5nZSh1bnNpZ25lZCBtYXNrLCB1bnNpZ25lZCBiaXRzKQp7CiAgYm9vbCByZXQ7CiAgdW5zaWdu
ZWQgb2xkOwogIGRvCiAgICB7CiAgICAgIG9sZCA9IF9zdGF0ZTsKICAgICAgcmV0ID0gKChvbGQg
JiBiaXRzICYgbWFzaykgPT0gMCkgJiYgKChvbGQgJiB+bWFzaykgPT0gfm1hc2spOwogICAgfQog
IHdoaWxlICghIHNtcF9jYXMoJl9zdGF0ZSwgb2xkLCAob2xkICYgbWFzaykgfCBiaXRzKSk7Cgog
IHJldHVybiByZXQ7Cn0KIyAzOTUgImF1dG8vY29udGV4dC5oIgppbmxpbmUgYm9vbApDb250ZXh0
OjpzdGF0ZV9jaGFuZ2Vfc2FmZWx5KHVuc2lnbmVkIG1hc2ssIHVuc2lnbmVkIGJpdHMpCnsKICBi
b29sIHJldDsKICB1bnNpZ25lZCBvbGQ7CiAgZG8KICAgIHsKICAgICAgb2xkID0gX3N0YXRlOwog
ICAgICByZXQgPSAoKG9sZCAmIGJpdHMgJiBtYXNrKSA9PSAwKSAmJiAoKG9sZCAmIH5tYXNrKSA9
PSB+bWFzayk7CiAgICAgIGlmICghIHJldCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAg
d2hpbGUgKCEgc21wX2NhcygmX3N0YXRlLCBvbGQsIChvbGQgJiBtYXNrKSB8IGJpdHMpKTsKCiAg
cmV0dXJuIHRydWU7Cn0KIyA0MjEgImF1dG8vY29udGV4dC5oIgppbmxpbmUgdm9pZApDb250ZXh0
OjpzdGF0ZV9jaGFuZ2VfZGlydHkodW5zaWduZWQgbWFzaywgdW5zaWduZWQgYml0cykKewogIF9z
dGF0ZSAmPSBtYXNrOwogIF9zdGF0ZSB8PSBiaXRzOwp9CgoKCgoKCgppbmxpbmUgU3BhY2VfY29u
dGV4dCAqCkNvbnRleHQ6OnNwYWNlX2NvbnRleHQoKSBjb25zdAp7CiAgcmV0dXJuIF9zcGFjZV9j
b250ZXh0Owp9CgoKCgoKCmlubGluZSBUaHJlYWRfbG9jayAqCkNvbnRleHQ6OnRocmVhZF9sb2Nr
KCkKewogIHJldHVybiBfdGhyZWFkX2xvY2s7Cn0KCgoKCgoKaW5saW5lIHNjaGVkX3QgKgpDb250
ZXh0OjpzY2hlZCgpCnsKICByZXR1cm4gJl9zY2hlZDsKfQoKCgoKCgppbmxpbmUgUmV0dXJuX2Zy
YW1lICpDb250ZXh0OjpyZWdzKCkgY29uc3QKewogIHJldHVybiByZWludGVycHJldF9jYXN0PFJl
dHVybl9mcmFtZSAqPgogICAgKHJlaW50ZXJwcmV0X2Nhc3Q8TXdvcmQ+KHRoaXMpICsgc2l6ZSAt
IHNpemVvZihSZXR1cm5fZnJhbWUpKTsKfQoKCgoKCmlubGluZSB2b2lkCkNvbnRleHQ6OmluY19s
b2NrX2NudCgpCnsKICBfbG9ja19jbnQgKys7Cn0KCgoKCgoKaW5saW5lIHZvaWQKQ29udGV4dDo6
ZGVjX2xvY2tfY250KCkKewogIF9sb2NrX2NudC0tOwp9CgoKCgoKCmlubGluZSBpbnQKQ29udGV4
dDo6bG9ja19jbnQoKQp7CiAgcmV0dXJuIF9sb2NrX2NudDsKfQoKCgoKaW5saW5lIHZvaWQKQ29u
dGV4dDo6dGltZXJfdGljaygpCnsKICBpZiAoIUNvbmZpZzo6ZmluZV9ncmFpbmVkX2NwdXRpbWUp
CiAgICBjdXJyZW50KCktPnNjaGVkKCktPnVwZGF0ZV9jcHV0aW1lKCk7CgogIGlmICgtLXRpbWVz
bGljZV90aWNrc19sZWZ0IDw9IDApCiAgICBjdXJyZW50KCktPnNjaGVkdWxlKCk7Cn0KCgoKCgoK
aW5saW5lIGJvb2wKQ29udGV4dDo6aW5fcmVhZHlfbGlzdCgpCnsKICByZXR1cm4gcmVhZHlfbmV4
dDsKfQoKCgoKCmlubGluZSB2b2lkCkNvbnRleHQ6OnJlYWR5X2VucXVldWUoKQp7CiAgTG9ja19n
dWFyZCA8Q3B1X2xvY2s+IGd1YXJkICgmY3B1X2xvY2spOwoKICBDb250ZXh0ICpzaWJsaW5nID0g
MDsKICB1bnNpZ25lZCBpOwoKICBpZiAoISBpbl9yZWFkeV9saXN0KCkpCiAgICB7CiAgICAgIGlm
ICghIHByaW9fZmlyc3Rbc2NoZWQoKS0+cHJpbygpXSkKICAgICAgICBwcmlvX2ZpcnN0W3NjaGVk
KCktPnByaW8oKV0gPSB0aGlzOwogICAgICBpZiAoISBwcmlvX25leHRbc2NoZWQoKS0+cHJpbygp
XSkKICAgICAgICBwcmlvX25leHRbc2NoZWQoKS0+cHJpbygpXSA9IHRoaXM7CgogICAgICBpZiAo
c2NoZWQoKS0+cHJpbygpID4gcHJpb19oaWdoZXN0KQogICAgICAgIHByaW9faGlnaGVzdCA9IHNj
aGVkKCktPnByaW8oKTsKCgoKICAgICAgaSA9IHNjaGVkKCktPnByaW8oKTsKICAgICAgZG8KICAg
ICAgICB7CiAgICAgICAgICBpZiAoKytpID09IDI1NikgaSA9IDA7CiAgICAgICAgICBzaWJsaW5n
ID0gcHJpb19maXJzdFtpXTsKICAgICAgICB9CiAgICAgIHdoaWxlICghIHNpYmxpbmcpOwoKICAg
ICAgKCh2b2lkKSAoKCEgaW5fcmVhZHlfbGlzdCgpKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIiEg
aW5fcmVhZHlfbGlzdCgpIiwgImF1dG8vY29udGV4dC5oIiwgNTYxLCAoKGNvbnN0IGNoYXIgKikg
MCkpLCAwKSkpOwoKICAgICAgcmVhZHlfbmV4dCA9IHNpYmxpbmc7CiAgICAgIHJlYWR5X3ByZXYg
PSBzaWJsaW5nLT5yZWFkeV9wcmV2OwogICAgICBzaWJsaW5nLT5yZWFkeV9wcmV2ID0gdGhpczsK
ICAgICAgcmVhZHlfcHJldi0+cmVhZHlfbmV4dCA9IHRoaXM7CgogICAgICAoKHZvaWQpICgocmVh
ZHlfcHJldi0+c2NoZWQoKS0+cHJpbygpIDw9IHNjaGVkKCktPnByaW8oKSB8fCBzY2hlZCgpLT5w
cmlvKCkgPT0gMCkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCJyZWFkeV9wcmV2LT5zY2hlZCgpLT5w
cmlvKCkgPD0gc2NoZWQoKS0+cHJpbygpIHx8IHNjaGVkKCktPnByaW8oKSA9PSAwIiwgImF1dG8v
Y29udGV4dC5oIiwgNTY5LCAoKGNvbnN0IGNoYXIgKikgMCkpLCAwKSkpOwoKICAgIH0KCn0KCgoK
CgppbmxpbmUgdm9pZApDb250ZXh0OjpyZWFkeV9kZXF1ZXVlKCkKewogIExvY2tfZ3VhcmQgPENw
dV9sb2NrPiBndWFyZCAoJmNwdV9sb2NrKTsKCiAgaWYgKGluX3JlYWR5X2xpc3QoKSkKICAgIHsK
ICAgICAgaWYgKHByaW9fZmlyc3Rbc2NoZWQoKS0+cHJpbygpXSA9PSB0aGlzKQogICAgICAgIHBy
aW9fZmlyc3Rbc2NoZWQoKS0+cHJpbygpXSA9IHJlYWR5X25leHQtPnNjaGVkKCktPnByaW8oKSA9
PSBzY2hlZCgpLT5wcmlvKCkgPyByZWFkeV9uZXh0IDogMDsKICAgICAgaWYgKHByaW9fbmV4dFtz
Y2hlZCgpLT5wcmlvKCldID09IHRoaXMpCiAgICAgICAgcHJpb19uZXh0W3NjaGVkKCktPnByaW8o
KV0gPSByZWFkeV9uZXh0LT5zY2hlZCgpLT5wcmlvKCkgPT0gc2NoZWQoKS0+cHJpbygpID8KICAg
ICAgICAgIHJlYWR5X25leHQgOiBwcmlvX2ZpcnN0W3NjaGVkKCktPnByaW8oKV07CgogICAgICBp
ZiAocHJpb19maXJzdFtzY2hlZCgpLT5wcmlvKCldID09IDAgJiYgc2NoZWQoKS0+cHJpbygpID09
IHByaW9faGlnaGVzdCkKICAgICAgICB7CiAgICAgICAgICAoKHZvaWQpICgocmVhZHlfbmV4dC0+
c2NoZWQoKS0+cHJpbygpIDwgc2NoZWQoKS0+cHJpbygpKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAo
InJlYWR5X25leHQtPnNjaGVkKCktPnByaW8oKSA8IHNjaGVkKCktPnByaW8oKSIsICJhdXRvL2Nv
bnRleHQuaCIsIDU5MywgKChjb25zdCBjaGFyICopIDApKSwgMCkpKTsKICAgICAgICAgIHByaW9f
aGlnaGVzdCA9IHJlYWR5X3ByZXYtPnNjaGVkKCktPnByaW8oKTsKICAgICAgICB9CiAgICAgIHJl
YWR5X3ByZXYtPnJlYWR5X25leHQgPSByZWFkeV9uZXh0OwogICAgICByZWFkeV9uZXh0LT5yZWFk
eV9wcmV2ID0gcmVhZHlfcHJldjsKICAgICAgcmVhZHlfbmV4dCA9IDA7CgogICAgfQoKfQojIDYx
MiAiYXV0by9jb250ZXh0LmgiCmlubGluZSBDb250ZXh0ICoKQ29udGV4dDo6Z2V0X25leHQoKQp7
CiAgcmV0dXJuIF9zdGFja19saW5rOwp9CgoKCgoKCmlubGluZSB2b2lkCkNvbnRleHQ6OnNldF9u
ZXh0KENvbnRleHQgKm5leHQpCnsKICBfc3RhY2tfbGluayA9IG5leHQ7Cn0KIyA2MzYgImF1dG8v
Y29udGV4dC5oIgppbmxpbmUgQ29udGV4dCoKQ29udGV4dDo6ZG9uYXRlZSgpCnsKICByZXR1cm4g
X2RvbmF0ZWU7Cn0KCgoKaW5saW5lIHZvaWQKQ29udGV4dDo6c2V0X2RvbmF0ZWUoQ29udGV4dCog
ZG9uYXRlZSkKewogIF9kb25hdGVlID0gZG9uYXRlZTsKfQoKCgppbmxpbmUgdm9pZApDb250ZXh0
OjpzZXRfa2VybmVsX3NwKE13b3JkICplc3ApCnsKICBrZXJuZWxfc3AgPSBlc3A7Cn0KCgoKaW5s
aW5lIEZwdV9zdGF0ZSAqY29uc3QgQ29udGV4dDo6ZnB1X3N0YXRlKCkKewogIHJldHVybiAmX2Zw
dV9zdGF0ZTsKfQoKCgoKCgppbmxpbmUgdm9pZCBDb250ZXh0OjpoYW5kbGVfZnB1X3RyYXAoKQp7
CgogIEZwdTo6ZW5hYmxlKCk7CgoKICBpZiAoRnB1Ojpvd25lcigpKSB7CiAgICBGcHU6Om93bmVy
KCktPnN0YXRlX2NoYW5nZV9kaXJ0eSAoflRocmVhZF9mcHVfb3duZXIsIDApOwogICAgRnB1Ojpv
d25lcigpLT5mcHVfc3RhdGUoKS0+c2F2ZV9zdGF0ZSgpOwogIH0KCgogIGlmICghZnB1X3N0YXRl
KCktPnN0YXRlX2J1ZmZlcigpKQogICAgZnB1X3N0YXRlKCktPmFsbG9jX3N0YXRlKCk7CgoKICBz
dGF0ZV9jaGFuZ2VfZGlydHkgKH4wLCBUaHJlYWRfZnB1X293bmVyKTsKICBmcHVfc3RhdGUoKS0+
cmVzdG9yZV9zdGF0ZSgpOwoKICBGcHU6OnNldF9vd25lcih0aGlzKTsKfQojIDcgImF1dG8vcmVj
ZWl2ZXIuaCIgMgojIDEgImF1dG8vdGltZXIuaCIgMQojIDExICJhdXRvL3RpbWVyLmgiCmNsYXNz
IENvbnRleHQ7CgpjbGFzcyBUaW1lcgp7CnB1YmxpYzoKCgoKCgogIHN0YXRpYyB2b2lkIGluaXQo
KTsKCgoKCiAgc3RhdGljIGJvb2wgaW5pdF9kb25lOwoKCgoKCiAgc3RhdGljIHZvaWQgYWNrbm93
bGVkZ2UoKTsKCgoKCgogIHN0YXRpYyB2b2lkIGVuYWJsZSgpOwoKCgoKICBzdGF0aWMgdm9pZCBk
aXNhYmxlKCk7Cn07CgpjbGFzcyB0aW1lb3V0X3QKewogIGZyaWVuZCBjbGFzcyB0aW1lcjsKCiAg
dGltZW91dF90KGNvbnN0IHRpbWVvdXRfdCYpOwoKCiAgdW5zaWduZWQgbG9uZyBsb25nIF93YWtl
dXA7CiAgdGltZW91dF90ICpfbmV4dCwgKl9wcmV2OwoKICB1bmlvbiB7CiAgICBzdHJ1Y3Qgewog
ICAgICBib29sIHNldCA6IDE7CiAgICAgIGJvb2wgaGl0IDogMTsKICAgIH0gX2ZsYWdzOwogICAg
dW5zaWduZWQgc2hvcnQgX2ZsYWd3b3JkOwogIH07CgpwdWJsaWM6CgoKCiAgdGltZW91dF90KCk7
CgogIGJvb2wgaXNfc2V0KCk7CgogIGJvb2wgaGFzX2hpdCgpOwoKICBDb250ZXh0ICogb3duZXIo
KTsKCiAgdm9pZCBzZXQodW5zaWduZWQgbG9uZyBsb25nIGFic19taWNyb3NlYyk7CgogIHZvaWQg
c2V0X2FnYWluKCk7CgogIHZvaWQgcmVzZXQoKTsKCiAgbG9uZyBsb25nIGdldF90aW1lb3V0KCk7
Cgpwcml2YXRlOgogIHZvaWQgZW5xdWV1ZSgpOwoKICBib29sIGNoZWNrX2hpdCgpOwp9OwoKY2xh
c3MgdGltZXIKewogIGZyaWVuZCBjbGFzcyB0aW1lb3V0X3Q7CgoKICB0aW1lcigpOwogIHRpbWVy
KGNvbnN0IHRpbWVyJik7CgoKICBzdGF0aWMgdGltZW91dF90ICpmaXJzdF90aW1lb3V0OwoKcHVi
bGljOgogIHN0YXRpYyB2b2lkIHVwZGF0ZV9zeXN0ZW1fY2xvY2soKTsKCnByaXZhdGU6CiAgc3Rh
dGljIHZvaWQgZG9fdGltZW91dHMoKTsKfTsKIyAxMjIgImF1dG8vdGltZXIuaCIKIyAxICJhdXRv
L3J0Yy5oIiAxCiMgMTEgImF1dG8vcnRjLmgiCmNsYXNzIFJ0Ywp7CnByaXZhdGU6CiAgUnRjKCk7
CiAgUnRjKGNvbnN0IFJ0YyYpOwoKcHVibGljOgoKICBzdGF0aWMgdm9pZCBpbml0KHZvaWQpOwoK
ICBzdGF0aWMgdm9pZCBkb25lKHZvaWQpOwoKICBzdGF0aWMgdm9pZCBzZXRfZnJlcV9zbG93KHZv
aWQpOwoKICBzdGF0aWMgdm9pZCBzZXRfZnJlcV9ub3JtYWwodm9pZCk7CgoKICBzdGF0aWMgdm9p
ZCBhY2tfcmVzZXQodm9pZCk7Cgpwcml2YXRlOgogIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHJlZ19y
ZWFkKHVuc2lnbmVkIGNoYXIgcmVnKTsKCiAgc3RhdGljIHZvaWQgcmVnX3dyaXRlKHVuc2lnbmVk
IGNoYXIgcmVnLCB1bnNpZ25lZCBjaGFyIHZhbCk7Cn07CgoKCgoKIyAxICJhdXRvL3BpYy5oIiAx
CiMgMTQgImF1dG8vcGljLmgiCmNsYXNzIFBpYwp7CnB1YmxpYzoKCgoKICB0eXBlZGVmIHVuc2ln
bmVkIFN0YXR1czsKCgoKCiAgc3RhdGljIHZvaWQgaW5pdCgpOwoKCgoKICBzdGF0aWMgdm9pZCBk
aXNhYmxlKCB1bnNpZ25lZCBpcnFudW0gKTsKCgoKCiAgc3RhdGljIHZvaWQgZW5hYmxlICggdW5z
aWduZWQgaXJxbnVtICk7CgoKCgogIHN0YXRpYyB2b2lkIGFja25vd2xlZGdlKCB1bnNpZ25lZCBp
cnEgKTsKIyA0OSAiYXV0by9waWMuaCIKICBzdGF0aWMgdm9pZCBkaXNhYmxlX2xvY2tlZCggdW5z
aWduZWQgaXJxbnVtICk7CiMgNTggImF1dG8vcGljLmgiCiAgc3RhdGljIHZvaWQgZW5hYmxlX2xv
Y2tlZCAoIHVuc2lnbmVkIGlycW51bSApOwoKCgoKCiAgc3RhdGljIFN0YXR1cyBkaXNhYmxlX2Fs
bF9zYXZlKCk7CgoKCgoKCiAgc3RhdGljIHZvaWQgcmVzdG9yZV9hbGwoIFN0YXR1cyBzICk7CiMg
ODEgImF1dG8vcGljLmgiCiAgc3RhdGljIHZvaWQgYWNrbm93bGVkZ2VfbG9ja2VkKCB1bnNpZ25l
ZCBpcnEgKTsKCnByaXZhdGU6CgpwdWJsaWM6CiAgZW51bSB7CiAgICBNQVNURVJfUElDX0JBU0Ug
PSAweDIwLAogICAgU0xBVkVTX1BJQ19CQVNFID0gMHhhMCwKICAgIE9GRl9JQ1cgPSAweDAwLAog
ICAgT0ZGX09DVyA9IDB4MDEsCgogICAgTUFTVEVSX0lDVyA9IE1BU1RFUl9QSUNfQkFTRSArIE9G
Rl9JQ1csCiAgICBNQVNURVJfT0NXID0gTUFTVEVSX1BJQ19CQVNFICsgT0ZGX09DVywKICAgIFNM
QVZFU19JQ1cgPSBTTEFWRVNfUElDX0JBU0UgKyBPRkZfSUNXLAogICAgU0xBVkVTX09DVyA9IFNM
QVZFU19QSUNfQkFTRSArIE9GRl9PQ1csCgoKCgoKICAgIElDV19URU1QTEFURSA9IDB4MTAsCgog
ICAgTEVWTF9UUklHR0VSID0gMHgwOCwKICAgIEVER0VfVFJJR0dFUiA9IDB4MDAsCiAgICBBRERS
X0lOVFJWTDQgPSAweDA0LAogICAgQUREUl9JTlRSVkw4ID0gMHgwMCwKICAgIFNJTkdMRV9fTU9E
RSA9IDB4MDIsCiAgICBDQVNDQURFX01PREUgPSAweDAwLAogICAgSUNXNF9fTkVFREVEID0gMHgw
MSwKICAgIE5PX0lDVzRfTkVFRCA9IDB4MDAsCgoKCgoKICAgIFNMQVZFX09OX0lSMCA9IDB4MDEs
CiAgICBTTEFWRV9PTl9JUjEgPSAweDAyLAogICAgU0xBVkVfT05fSVIyID0gMHgwNCwKICAgIFNM
QVZFX09OX0lSMyA9IDB4MDgsCiAgICBTTEFWRV9PTl9JUjQgPSAweDEwLAogICAgU0xBVkVfT05f
SVI1ID0gMHgyMCwKICAgIFNMQVZFX09OX0lSNiA9IDB4NDAsCiAgICBTTEFWRV9PTl9JUjcgPSAw
eDgwLAoKICAgIElfQU1fU0xBVkVfMCA9IDB4MDAsCiAgICBJX0FNX1NMQVZFXzEgPSAweDAxLAog
ICAgSV9BTV9TTEFWRV8yID0gMHgwMiwKICAgIElfQU1fU0xBVkVfMyA9IDB4MDMsCiAgICBJX0FN
X1NMQVZFXzQgPSAweDA0LAogICAgSV9BTV9TTEFWRV81ID0gMHgwNSwKICAgIElfQU1fU0xBVkVf
NiA9IDB4MDYsCiAgICBJX0FNX1NMQVZFXzcgPSAweDA3LAoKCgoKCiAgICBTTkZfTU9ERV9FTkEg
PSAweDEwLAogICAgU05GX01PREVfRElTID0gMHgwMCwKICAgIEJVRkZFUkRfTU9ERSA9IDB4MDgs
CiAgICBOT05CVUZEX01PREUgPSAweDAwLAogICAgQVVUT19FT0lfTU9EID0gMHgwMiwKICAgIE5S
TUxfRU9JX01PRCA9IDB4MDAsCiAgICBJODA4Nl9FTU1fTU9EID0gMHgwMSwKICAgIFNFVF9NQ1Nf
TU9ERSA9IDB4MDAsCgoKCgoKICAgIFBJQ01fTUFTSyA9IDB4RkYsCiAgICBQSUNTX01BU0sgPSAw
eEZGLAoKCgoKCiAgICBOT05fU1BFQ19FT0kgPSAweDIwLAogICAgU1BFQ0lGSUNfRU9JID0gMHg2
MCwKICAgIFJPVF9OT05fU1BFQyA9IDB4YTAsCiAgICBTRVRfUk9UX0FFT0kgPSAweDgwLAogICAg
UlNFVF9ST1RBRU9JID0gMHgwMCwKICAgIFJPVF9TUEVDX0VPSSA9IDB4ZTAsCiAgICBTRVRfUFJJ
T1JJVFkgPSAweGMwLAogICAgTk9fT1BFUkFUSU9OID0gMHg0MCwKCiAgICBTRU5EX0VPSV9JUjAg
PSAweDAwLAogICAgU0VORF9FT0lfSVIxID0gMHgwMSwKICAgIFNFTkRfRU9JX0lSMiA9IDB4MDIs
CiAgICBTRU5EX0VPSV9JUjMgPSAweDAzLAogICAgU0VORF9FT0lfSVI0ID0gMHgwNCwKICAgIFNF
TkRfRU9JX0lSNSA9IDB4MDUsCiAgICBTRU5EX0VPSV9JUjYgPSAweDA2LAogICAgU0VORF9FT0lf
SVI3ID0gMHgwNywKCgoKCgogICAgT0NXX1RFTVBMQVRFID0gMHgwOCwKICAgIFNQRUNJQUxfTUFT
SyA9IDB4NDAsCiAgICBNQVNLX01ERV9TRVQgPSAweDIwLAogICAgTUFTS19NREVfUlNUID0gMHgw
MCwKICAgIFBPTExfQ09NTUFORCA9IDB4MDQsCiAgICBOT19QT0xMX0NNTkQgPSAweDAwLAogICAg
UkVBRF9ORVhUX1JEID0gMHgwMiwKICAgIFJFQURfSVJfT05SRCA9IDB4MDAsCiAgICBSRUFEX0lT
X09OUkQgPSAweDAxLAoKCgoKICAgIFBJQ01fSUNXMSA9IChJQ1dfVEVNUExBVEUgfCBFREdFX1RS
SUdHRVIgfCBBRERSX0lOVFJWTDgKICAgICAgICAgICAgICAgICAgICAgICB8IENBU0NBREVfTU9E
RSB8IElDVzRfX05FRURFRCksCiAgICBQSUNNX0lDVzMgPSBTTEFWRV9PTl9JUjIsCiAgICBQSUNN
X0lDVzQgPSAoU05GX01PREVfRElTIHwgTk9OQlVGRF9NT0RFIHwgTlJNTF9FT0lfTU9ECiAgICAg
ICAgICAgICAgICAgICAgICAgfCBJODA4Nl9FTU1fTU9EKSwKCiAgICBQSUNTX0lDVzEgPSAoSUNX
X1RFTVBMQVRFIHwgRURHRV9UUklHR0VSIHwgQUREUl9JTlRSVkw4CiAgICAgICAgICAgICAgICAg
ICAgICAgfCBDQVNDQURFX01PREUgfCBJQ1c0X19ORUVERUQpLAogICAgUElDU19JQ1czID0gSV9B
TV9TTEFWRV8yLAogICAgUElDU19JQ1c0ID0gKFNORl9NT0RFX0RJUyB8IE5PTkJVRkRfTU9ERSB8
IE5STUxfRU9JX01PRAogICAgICAgICAgICAgICAgICAgICAgIHwgSTgwODZfRU1NX01PRCksCgog
IH07Cgpwcml2YXRlOgojIDIxOSAiYXV0by9waWMuaCIKICBzdGF0aWMgdm9pZCBwaWNfaW5pdCh1
bnNpZ25lZCBjaGFyIG1hc3Rlcl9iYXNlLCB1bnNpZ25lZCBjaGFyIHNsYXZlX2Jhc2UpOwp9Owoj
IDIyOSAiYXV0by9waWMuaCIKIyAxICJhdXRvL2lvLmgiIDEKIyAxNiAiYXV0by9pby5oIgpjbGFz
cyBJbwp7CnB1YmxpYzoKCgogIHN0YXRpYyB2b2lkIGlvZGVsYXkoKTsKCgoKCiAgc3RhdGljIFVu
c2lnbmVkOCBpbjggKCB1bnNpZ25lZCBwb3J0ICk7CgoKCgogIHN0YXRpYyBVbnNpZ25lZDE2IGlu
MTYoIHVuc2lnbmVkIHBvcnQgKTsKCgoKCiAgc3RhdGljIFVuc2lnbmVkMzIgaW4zMiggdW5zaWdu
ZWQgcG9ydCApOwoKCgoKICBzdGF0aWMgdm9pZCBvdXQ4ICggVW5zaWduZWQ4IHZhbCwgdW5zaWdu
ZWQgcG9ydCApOwoKCgoKICBzdGF0aWMgdm9pZCBvdXQxNiggVW5zaWduZWQxNiB2YWwsIHVuc2ln
bmVkIHBvcnQgKTsKCgoKCiAgc3RhdGljIHZvaWQgb3V0MzIoIFVuc2lnbmVkMzIgdmFsLCB1bnNp
Z25lZCBwb3J0ICk7CgoKCgoKCgogIHN0YXRpYyBVbnNpZ25lZDggaW44X3AgKCB1bnNpZ25lZCBw
b3J0ICk7CgoKCgogIHN0YXRpYyBVbnNpZ25lZDE2IGluMTZfcCggdW5zaWduZWQgcG9ydCApOwoK
CgoKICBzdGF0aWMgVW5zaWduZWQzMiBpbjMyX3AoIHVuc2lnbmVkIHBvcnQgKTsKCgoKCiAgc3Rh
dGljIHZvaWQgb3V0OF9wICggVW5zaWduZWQ4IHZhbCwgdW5zaWduZWQgcG9ydCApOwoKCgoKICBz
dGF0aWMgdm9pZCBvdXQxNl9wKCBVbnNpZ25lZDE2IHZhbCwgdW5zaWduZWQgcG9ydCApOwoKCgoK
ICBzdGF0aWMgdm9pZCBvdXQzMl9wKCBVbnNpZ25lZDMyIHZhbCwgdW5zaWduZWQgcG9ydCApOwoK
Cn07CiMgOTYgImF1dG8vaW8uaCIKaW5saW5lIFVuc2lnbmVkOCBJbzo6aW44X3AoIHVuc2lnbmVk
IHBvcnQgKQp7CiAgVW5zaWduZWQ4IHRtcCA9IGluOChwb3J0KTsKICBpb2RlbGF5KCk7CiAgcmV0
dXJuIHRtcDsKfQoKCgppbmxpbmUgVW5zaWduZWQxNiBJbzo6aW4xNl9wKCB1bnNpZ25lZCBwb3J0
ICkKewogIFVuc2lnbmVkMTYgdG1wID0gaW4xNihwb3J0KTsKICBpb2RlbGF5KCk7CiAgcmV0dXJu
IHRtcDsKfQoKCgppbmxpbmUgVW5zaWduZWQzMiBJbzo6aW4zMl9wKCB1bnNpZ25lZCBwb3J0ICkK
ewogIFVuc2lnbmVkMzIgdG1wID0gaW4zMihwb3J0KTsKICBpb2RlbGF5KCk7CiAgcmV0dXJuIHRt
cDsKfQoKCgppbmxpbmUgdm9pZCBJbzo6b3V0OF9wKCBVbnNpZ25lZDggdmFsLCB1bnNpZ25lZCBw
b3J0ICkKewogIG91dDgodmFsLHBvcnQpOyBpb2RlbGF5KCk7Cn0KCgoKaW5saW5lIHZvaWQgSW86
Om91dDE2X3AoIFVuc2lnbmVkMTYgdmFsLCB1bnNpZ25lZCBwb3J0ICkKewogIG91dDE2KHZhbCxw
b3J0KTsgaW9kZWxheSgpOwp9CgoKaW5saW5lIHZvaWQgSW86Om91dDMyX3AoIFVuc2lnbmVkMzIg
dmFsLCB1bnNpZ25lZCBwb3J0ICkKewogIG91dDMyKHZhbCxwb3J0KTsgaW9kZWxheSgpOwp9CgoK
CgoKaW5saW5lIHZvaWQgSW86OmlvZGVsYXkoKQp7CiAgYXNtKCJwdXNobCAlZWF4OyBpbmIgJDB4
ODAsJWFsOyBpbmIgJDB4ODAsJWFsOyBwb3BsICVlYXgiKTsKfQoKCgppbmxpbmUgVW5zaWduZWQ4
IElvOjppbjgoIHVuc2lnbmVkIHBvcnQgKQp7CiAgVW5zaWduZWQ4IHRtcDsKICBhc20gdm9sYXRp
bGUgKCJpbmIgJXcxLCAlYjAiOiAiPWEiKHRtcCkgOiAiTmQiKHBvcnQpICk7CiAgcmV0dXJuIHRt
cDsKfQoKCgppbmxpbmUgVW5zaWduZWQxNiBJbzo6aW4xNiggdW5zaWduZWQgcG9ydCApCnsKICBV
bnNpZ25lZDE2IHRtcDsKICBhc20gdm9sYXRpbGUgKCJpbncgJXcxLCAldzAiOiAiPWEiKHRtcCkg
OiAiTmQiKHBvcnQpICk7CiAgcmV0dXJuIHRtcDsKfQoKCgppbmxpbmUgVW5zaWduZWQzMiBJbzo6
aW4zMiggdW5zaWduZWQgcG9ydCApCnsKICBVbnNpZ25lZDMyIHRtcDsKICBhc20gdm9sYXRpbGUg
KCJpbiAldzEsICUwIjogIj1hIih0bXApIDogIk5kIihwb3J0KSApOwogIHJldHVybiB0bXA7Cn0K
CgoKaW5saW5lIHZvaWQgSW86Om91dDgoIFVuc2lnbmVkOCB2YWwsIHVuc2lnbmVkIHBvcnQgKQp7
CiAgYXNtIHZvbGF0aWxlICgib3V0YiAlYjAsICV3MSI6IDogImEiKHZhbCksICJOZCIocG9ydCkg
KTsKfQoKCgppbmxpbmUgdm9pZCBJbzo6b3V0MTYoIFVuc2lnbmVkMTYgdmFsLCB1bnNpZ25lZCBw
b3J0ICkKewogIGFzbSB2b2xhdGlsZSAoIm91dHcgJXcwLCAldzEiOiA6ICJhIih2YWwpLCAiTmQi
KHBvcnQpICk7Cn0KCgoKaW5saW5lIHZvaWQgSW86Om91dDMyKCBVbnNpZ25lZDMyIHZhbCwgdW5z
aWduZWQgcG9ydCApCnsKICBhc20gdm9sYXRpbGUgKCJvdXQgJTAsICV3MSI6IDogImEiKHZhbCks
ICJOZCIocG9ydCkgKTsKfQojIDIzMCAiYXV0by9waWMuaCIgMgojIDI0NSAiYXV0by9waWMuaCIK
aW5saW5lIHZvaWQgUGljOjpkaXNhYmxlKCB1bnNpZ25lZCBpcnFudW0gKQp7CiAgUHJvYzo6U3Rh
dHVzIHMgPSBQcm9jOjpjbGlfc2F2ZSgpOwogIGRpc2FibGVfbG9ja2VkKCBpcnFudW0gKTsKICBQ
cm9jOjpzdGlfcmVzdG9yZShzKTsKfQoKCgppbmxpbmUgdm9pZCBQaWM6OmVuYWJsZSggdW5zaWdu
ZWQgaXJxbnVtICkKewogIFByb2M6OlN0YXR1cyBzID0gUHJvYzo6Y2xpX3NhdmUoKTsKICBlbmFi
bGVfbG9ja2VkKCBpcnFudW0gKTsKICBQcm9jOjpzdGlfcmVzdG9yZShzKTsKfQoKCgppbmxpbmUg
dm9pZCBQaWM6OmFja25vd2xlZGdlKCB1bnNpZ25lZCBpcnEgKQp7CiAgUHJvYzo6U3RhdHVzIHMg
PSBQcm9jOjpjbGlfc2F2ZSgpOwogIGFja25vd2xlZGdlX2xvY2tlZChpcnEpOwogIFByb2M6OnN0
aV9yZXN0b3JlKHMpOwp9CgoKCmlubGluZSB2b2lkIFBpYzo6ZGlzYWJsZV9sb2NrZWQoIHVuc2ln
bmVkIGlycSApCnsKICBpZiAoaXJxIDwgOCkKICAgIElvOjpvdXQ4KElvOjppbjgoTUFTVEVSX09D
VykgfCAoMSA8PCBpcnEpLCBNQVNURVJfT0NXKTsKICBlbHNlCiAgICBJbzo6b3V0OChJbzo6aW44
KFNMQVZFU19PQ1cpIHwgKDEgPDwgKGlycS04KSksIFNMQVZFU19PQ1cpOwp9CgoKCmlubGluZSB2
b2lkIFBpYzo6ZW5hYmxlX2xvY2tlZCggdW5zaWduZWQgaXJxICkKewogIGlmIChpcnEgPCA4KQog
ICAgSW86Om91dDgoSW86OmluOChNQVNURVJfT0NXKSAmIH4oMSA8PCBpcnEpLCBNQVNURVJfT0NX
KTsKICBlbHNlCiAgICBJbzo6b3V0OChJbzo6aW44KFNMQVZFU19PQ1cpICYgfigxIDw8IChpcnEt
OCkpLCBTTEFWRVNfT0NXKTsKfQoKCgppbmxpbmUgdm9pZCBQaWM6OmFja25vd2xlZGdlX2xvY2tl
ZCggdW5zaWduZWQgaXJxICkKewogIGlmIChpcnEgPj0gOCkKICAgIHsKICAgICAgSW86Om91dDgo
Tk9OX1NQRUNfRU9JLCBTTEFWRVNfSUNXKTsKICAgICAgSW86Om91dDgoT0NXX1RFTVBMQVRFIHwg
UkVBRF9ORVhUX1JEIHwgUkVBRF9JU19PTlJELCBTTEFWRVNfSUNXKTsKICAgICAgaWYgKElvOjpp
bjgoU0xBVkVTX0lDVykpCiAgICAgICAgcmV0dXJuOwogICAgfQogIElvOjpvdXQ4KE5PTl9TUEVD
X0VPSSwgTUFTVEVSX0lDVyk7Cn0KCgoKaW5saW5lIFBpYzo6U3RhdHVzIFBpYzo6ZGlzYWJsZV9h
bGxfc2F2ZSgpCnsKICBTdGF0dXMgczsKICBzID0gSW86OmluOChNQVNURVJfT0NXKTsKICBzIHw9
IElvOjppbjgoU0xBVkVTX09DVykgPDwgODsKICBJbzo6b3V0OCggMHhmZiwgTUFTVEVSX09DVyAp
OwogIElvOjpvdXQ4KCAweGZmLCBTTEFWRVNfT0NXICk7CgogIHJldHVybiBzOwp9CgoKCmlubGlu
ZSB2b2lkIFBpYzo6cmVzdG9yZV9hbGwoIFN0YXR1cyBzICkKewogIElvOjpvdXQ4KCBzICYgMHgw
ZmYsIE1BU1RFUl9PQ1cgKTsKICBJbzo6b3V0OCggKHMgPj4gOCkgJiAweDBmZiwgU0xBVkVTX09D
VyApOwp9CiMgNDEgImF1dG8vcnRjLmgiIDIKIyA1MCAiYXV0by9ydGMuaCIKaW5saW5lIHZvaWQK
UnRjOjphY2tfcmVzZXQodm9pZCkKewoKCiAgYXNtIHZvbGF0aWxlICgibW92YiAkMHhjLCAlYWxc
blx0IgogICAgICAgICAgICAgICAgIm91dGIgJWFsLCQweDcwXG5cdCIKICAgICAgICAgICAgICAg
ICJvdXRiICVhbCwkMHg4MFxuXHQiCiAgICAgICAgICAgICAgICAiaW5iICAkMHg3MSwlYWxcblx0
Iik7CgoKICBQaWM6OmFja25vd2xlZGdlX2xvY2tlZCg4KTsKCgoKICBhc20gdm9sYXRpbGUgKCJt
b3ZiICQweGMsICVhbFxuXHQiCiAgICAgICAgICAgICAgICAib3V0YiAlYWwsJDB4NzBcblx0Igog
ICAgICAgICAgICAgICAgIm91dGIgJWFsLCQweDgwXG5cdCIKICAgICAgICAgICAgICAgICJpbmIg
ICQweDcxLCVhbFxuXHQiKTsKfQojIDEyMyAiYXV0by90aW1lci5oIiAyCiMgMTMyICJhdXRvL3Rp
bWVyLmgiCmlubGluZSB2b2lkIFRpbWVyOjphY2tub3dsZWRnZSgpCnsKCiAgUGljOjpkaXNhYmxl
X2xvY2tlZCg4KTsKICBSdGM6OmFja19yZXNldCgpOwogIFBpYzo6ZW5hYmxlX2xvY2tlZCg4KTsK
fQoKCgppbmxpbmUgdm9pZCBUaW1lcjo6ZW5hYmxlKCkKewogIFBpYzo6ZW5hYmxlKDgpOwogIFBp
Yzo6ZW5hYmxlKDIpOwp9CgoKCmlubGluZSB2b2lkIFRpbWVyOjpkaXNhYmxlKCkKewogIFBpYzo6
ZGlzYWJsZSg4KTsKfQoKCgoKCgppbmxpbmUgdGltZW91dF90Ojp0aW1lb3V0X3QoKQp7CiAgX2Zs
YWd3b3JkID0gMDsKfQoKCgppbmxpbmUgYm9vbAp0aW1lb3V0X3Q6OmlzX3NldCgpCnsKICByZXR1
cm4gX2ZsYWdzLnNldDsKfQoKCgppbmxpbmUgYm9vbAp0aW1lb3V0X3Q6Omhhc19oaXQoKQp7CiAg
cmV0dXJuIF9mbGFncy5oaXQ7Cn0KCgoKaW5saW5lIENvbnRleHQgKgp0aW1lb3V0X3Q6Om93bmVy
KCkKewogIHJldHVybiBjb250ZXh0X29mICh0aGlzKTsKfQoKCgppbmxpbmUgdm9pZAp0aW1lb3V0
X3Q6OmVucXVldWUoKQp7CiAgX2ZsYWdzLnNldCA9IDE7CiAgaWYgKCF0aW1lcjo6Zmlyc3RfdGlt
ZW91dCkKICAgIHsKICAgICAgdGltZXI6OmZpcnN0X3RpbWVvdXQgPSB0aGlzOwogICAgICBfcHJl
diA9IF9uZXh0ID0gMDsKICAgIH0KICBlbHNlCiAgICB7CiAgICAgIHRpbWVvdXRfdCAqdGkgPSB0
aW1lcjo6Zmlyc3RfdGltZW91dDsKCiAgICAgIGZvciAoOzspCiAgICAgICAgewogICAgICAgICAg
aWYgKHRpLT5fd2FrZXVwID49IF93YWtldXApCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAg
X25leHQgPSB0aTsKICAgICAgICAgICAgICBfcHJldiA9IHRpLT5fcHJldjsKICAgICAgICAgICAg
ICB0aS0+X3ByZXYgPSB0aGlzOwogICAgICAgICAgICAgIGlmIChfcHJldikKICAgICAgICAgICAg
ICAgIF9wcmV2LT5fbmV4dCA9IHRoaXM7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgdGltZXI6OmZpcnN0X3RpbWVvdXQgPSB0aGlzOwoKICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoISB0aS0+X25leHQpCiAgICAgICAgICAgIGJyZWFr
OwoKICAgICAgICAgIHRpID0gdGktPl9uZXh0OwogICAgICAgIH0KCgogICAgICB0aS0+X25leHQg
PSB0aGlzOwogICAgICBfcHJldiA9IHRpOwogICAgICBfbmV4dCA9IDA7CiAgICB9Cn0KCgoKaW5s
aW5lIHZvaWQKdGltZW91dF90OjpzZXQodW5zaWduZWQgbG9uZyBsb25nIGFic19taWNyb3NlYykK
ewoKICBMb2NrX2d1YXJkPENwdV9sb2NrPiBndWFyZCAoJmNwdV9sb2NrKTsKCiAgKCh2b2lkKSAo
KCEgaXNfc2V0KCkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiISBpc19zZXQoKSIsICJhdXRvL3Rp
bWVyLmgiLCAyNDEsICgoY29uc3QgY2hhciAqKSAwKSksIDApKSk7CiAgX3dha2V1cCA9IGFic19t
aWNyb3NlYzsKICBlbnF1ZXVlKCk7Cn0KCgoKaW5saW5lIHZvaWQKdGltZW91dF90OjpzZXRfYWdh
aW4oKQp7CgogIExvY2tfZ3VhcmQ8Q3B1X2xvY2s+IGd1YXJkICgmY3B1X2xvY2spOwoKICAoKHZv
aWQpICgoISBpc19zZXQoKSkgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIhIGlzX3NldCgpIiwgImF1
dG8vdGltZXIuaCIsIDI1NCwgKChjb25zdCBjaGFyICopIDApKSwgMCkpKTsKICBpZiAoISBoYXNf
aGl0KCkpCiAgICB7CiAgICAgIGVucXVldWUoKTsKICAgIH0KfQoKCgppbmxpbmUgdm9pZAp0aW1l
b3V0X3Q6OnJlc2V0KCkKewoKCiAgaWYgKCEgaXNfc2V0KCkpCiAgICByZXR1cm47CgogIHsKICAg
IExvY2tfZ3VhcmQ8Q3B1X2xvY2s+IGd1YXJkICgmY3B1X2xvY2spOwoKICAgIGlmIChpc19zZXQo
KSkKICAgICAgewogICAgICAgIGlmIChfcHJldikKICAgICAgICBfcHJldi0+X25leHQgPSBfbmV4
dDsKICAgICAgICBlbHNlCiAgICAgICAgdGltZXI6OmZpcnN0X3RpbWVvdXQgPSBfbmV4dDsKICAg
ICAgICBpZiAoX25leHQpCiAgICAgICAgX25leHQtPl9wcmV2ID0gX3ByZXY7CiAgICAgIH0KCiAg
ICBfZmxhZ3Muc2V0ID0gMDsKCiAgfQp9CgoKCmlubGluZSBsb25nIGxvbmcKdGltZW91dF90Ojpn
ZXRfdGltZW91dCgpCnsKICByZXR1cm4gX3dha2V1cCAtIGttZW06OmluZm8oKS0+Y2xvY2s7Cn0K
CgoKaW5saW5lIGJvb2wKdGltZW91dF90OjpjaGVja19oaXQoKQp7CgoKICBpZiAoa21lbTo6aW5m
bygpLT5jbG9jayA8IF93YWtldXApCiAgICByZXR1cm4gZmFsc2U7CgogIHRpbWVyOjpmaXJzdF90
aW1lb3V0ID0gX25leHQ7CiAgaWYgKF9uZXh0KSBfbmV4dC0+X3ByZXYgPSAwOwogIF9mbGFncy5o
aXQgPSAxOwogIF9mbGFncy5zZXQgPSAwOwogIG93bmVyKCktPnN0YXRlX2NoYW5nZSh+VGhyZWFk
X2lwY19pbl9wcm9ncmVzcywKICAgICAgICAgICAgICAgICAgICAgICAgVGhyZWFkX3J1bm5pbmcp
OwoKCgoKICBvd25lcigpLT5yZWFkeV9lbnF1ZXVlKCk7CgogIHJldHVybiB0cnVlOwp9CgoKCmlu
bGluZSB2b2lkCnRpbWVyOjpkb190aW1lb3V0cygpCnsKICB3aGlsZSAoZmlyc3RfdGltZW91dCkK
ICAgIHsKICAgICAgaWYgKCEgZmlyc3RfdGltZW91dC0+Y2hlY2tfaGl0KCkpCiAgICAgICAgYnJl
YWs7CiAgICB9Cn0KCgoKaW5saW5lIHZvaWQKdGltZXI6OnVwZGF0ZV9zeXN0ZW1fY2xvY2soKQp7
CiAga21lbTo6aW5mbygpLT5jbG9jayArPSBDb25maWc6Om1pY3Jvc2VjX3Blcl90aWNrOwoKICBk
b190aW1lb3V0cygpOwp9CiMgOCAiYXV0by9yZWNlaXZlci5oIiAyCgoKCgoKCmNsYXNzIFN5c19p
cGNfZnJhbWU7CmNsYXNzIFNlbmRlcjsKY2xhc3MgVGhyZWFkOwojIDI2ICJhdXRvL3JlY2VpdmVy
LmgiCmNsYXNzIFJlY2VpdmVyIDogcHVibGljIENvbnRleHQKewoKICBTZW5kZXIqIF9wYXJ0bmVy
OwogIFN5c19pcGNfZnJhbWUgKl9yZWNlaXZlX3JlZ3M7CiAgdm1fb2Zmc2V0X3QgX3BhZ2Vpbl9y
ZXF1ZXN0OwogIFRocmVhZCogX3BhZ2Vpbl9hcHBsaWNhbnQ7CiAgU2VuZGVyKiBfc2VuZGVyX2Zp
cnN0OwoKcHJvdGVjdGVkOgoKCgoKCiAgdGltZW91dF90KiBfdGltZW91dDsKCnB1YmxpYzoKIyA1
MiAiYXV0by9yZWNlaXZlci5oIgogIFN5c19pcGNfZnJhbWUqIHJlY2VpdmVfcmVncygpIGNvbnN0
OwojIDYzICJhdXRvL3JlY2VpdmVyLmgiCiAgdm9pZCBzZXRfcGFnZWluX3JlcXVlc3Qodm1fb2Zm
c2V0X3QgYWRkcmVzcywgVGhyZWFkICpub3RpZnkpOwoKCgoKCgoKICBib29sIHNlbmRlcl9vayhT
ZW5kZXIqIHNlbmRlcikgY29uc3Q7CgoKCgoKCiAgYm9vbCBpbl9sb25nX2lwYyhTZW5kZXIqIHNl
bmRlcikgY29uc3Q7CiMgODggImF1dG8vcmVjZWl2ZXIuaCIKICBpbnQgaXBjX3RyeV9sb2NrKFNl
bmRlciogc2VuZGVyKTsKCgogIHZvaWQgaXBjX3VubG9jaygpOwoKCgoKICBTZW5kZXIqKiBzZW5k
ZXJfbGlzdCgpOwoKICB2b2lkIHJlc2V0X3JlY2VpdmVfdGltZW91dCgpOwoKcHJvdGVjdGVkOgoj
IDEwOSAiYXV0by9yZWNlaXZlci5oIgogIFJlY2VpdmVyKFRocmVhZF9sb2NrICp0aHJlYWRfbG9j
aywgU3BhY2VfY29udGV4dCogc3BhY2VfY29udGV4dCk7CgoKCgogIFNlbmRlciogcGFydG5lcigp
IGNvbnN0OwoKCgoKCiAgdm9pZCByZXN0b3JlX3JlY2VpdmVyX3N0YXRlKFNlbmRlciogcGFydG5l
ciwgU3lzX2lwY19mcmFtZSogcmVncyk7CgoKCgoKICB2b2lkIHNhdmVfcmVjZWl2ZXJfc3RhdGUo
U2VuZGVyKiogb3V0X3BhcnRuZXIsIFN5c19pcGNfZnJhbWUqKiBvdXRfcmVncyk7CgoKCiAgdm9p
ZCBjbGVhcl9wYWdlaW5fcmVxdWVzdCgpOwoKCgogIHZtX29mZnNldF90IHBhZ2Vpbl9yZXF1ZXN0
KCkgY29uc3Q7CgoKCgogIFRocmVhZCogcGFnZWluX2FwcGxpY2FudCgpOwojIDE0OSAiYXV0by9y
ZWNlaXZlci5oIgogIHVuc2lnbmVkIHNldHVwX3JlY2VpdmVyX3N0YXRlKFNlbmRlciogc2VuZGVy
LCBTeXNfaXBjX2ZyYW1lKiByZWdzKTsKIyAxNjAgImF1dG8vcmVjZWl2ZXIuaCIKICB2b2lkIHNl
dHVwX3JlY2VpdmVyKFNlbmRlciogc2VuZGVyLCBTeXNfaXBjX2ZyYW1lKiByZWdzKTsKCiAgdm9p
ZCBzZXRfcmVjZWl2ZV90aW1lb3V0KHRpbWVvdXRfdCAqdCk7Cgpwcml2YXRlOgoKICB2b2lkIHNl
dF9yZWNlaXZlX3JlZ3MoU3lzX2lwY19mcmFtZSogcmVncyk7CgogIHZvaWQgc2V0X3BhcnRuZXIo
U2VuZGVyKiBwYXJ0bmVyKTsKfTsKCgoKCgoKIyAxICJhdXRvL2w0X2lwYy5oIiAxCiMgMTc3ICJh
dXRvL3JlY2VpdmVyLmgiIDIKCgoKCiMgMSAiYXV0by90aHJlYWRfbG9jay5oIiAxCgoKCgoKCgoj
IDEgIi4uL3NyYy9saWIvbWluaWxpYmMvaW5jbHVkZS9wYW5pYy5oIiAxCgoKCgoKZXh0ZXJuICJD
IiB7Cgp2b2lkIHBhbmljIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikgX19hdHRyaWJ1dGVfXyAo
KF9fbm9yZXR1cm5fXykpOwoKfQojIDkgImF1dG8vdGhyZWFkX2xvY2suaCIgMgoKCgoKCgplbnVt
IFN3aXRjaF9oaW50CnsKICBTV0lUQ0hfRE9OVF9DQVJFID0gMCwKICBTV0lUQ0hfQUNUSVZBVEVf
UkVDRUlWRVIsCiAgU1dJVENIX0FDVElWQVRFX1NFTkRFUgp9OwojIDMxICJhdXRvL3RocmVhZF9s
b2NrLmgiCmNsYXNzIFRocmVhZF9sb2NrCnsKcHJpdmF0ZToKICBTd2l0Y2hfbG9jayBfc3dpdGNo
X2xvY2s7CiAgU3dpdGNoX2hpbnQgX3N3aXRjaF9oaW50OwoKcHVibGljOgoKCgogIHZvaWQgc2V0
X3N3aXRjaF9oaW50KFN3aXRjaF9oaW50IGhpbnQpOwoKCgoKICBib29sIHRlc3RfYW5kX3NldCgp
OwoKCgoKCiAgdm9pZCBsb2NrKCk7CgoKCgoKCgogIHZvaWQgY2xlYXIoKTsKCgoKCiAgQ29udGV4
dCAqIGxvY2tfb3duZXIoKSBjb25zdDsKCgoKCiAgYm9vbCB0ZXN0KCk7Cgpwcml2YXRlOgoKCgog
IENvbnRleHQqIGNvbnRleHQoKSBjb25zdDsKfTsKIyA5NiAiYXV0by90aHJlYWRfbG9jay5oIgpp
bmxpbmUgdm9pZApUaHJlYWRfbG9jazo6c2V0X3N3aXRjaF9oaW50KFN3aXRjaF9oaW50IGhpbnQp
CnsKICBfc3dpdGNoX2hpbnQgPSBoaW50Owp9CgoKCgoKCgppbmxpbmUgdm9pZApUaHJlYWRfbG9j
azo6bG9jaygpCnsKICAoKHZvaWQpICgodGVzdF9hbmRfc2V0ICgpID09IGZhbHNlKSA/IDAgOiAo
X19hc3NlcnRfZmFpbCAoInRlc3RfYW5kX3NldCAoKSA9PSBmYWxzZSIsICJhdXRvL3RocmVhZF9s
b2NrLmgiLCAxMTEsICgoY29uc3QgY2hhciAqKSAwKSksIDApKSk7Cn0KCgoKCgoKaW5saW5lIENv
bnRleHQgKgpUaHJlYWRfbG9jazo6bG9ja19vd25lcigpIGNvbnN0CnsKICByZXR1cm4gX3N3aXRj
aF9sb2NrLmxvY2tfb3duZXIoKTsKfQoKCgoKCgppbmxpbmUgYm9vbApUaHJlYWRfbG9jazo6dGVz
dCgpCnsKICByZXR1cm4gX3N3aXRjaF9sb2NrLnRlc3QoKTsKfQojIDE4MiAiYXV0by9yZWNlaXZl
ci5oIiAyCiMgMjAwICJhdXRvL3JlY2VpdmVyLmgiCmlubGluZSBTeXNfaXBjX2ZyYW1lKgpSZWNl
aXZlcjo6cmVjZWl2ZV9yZWdzKCkgY29uc3QKewogICgodm9pZCkgKChzdGF0ZSAoKSAmIFRocmVh
ZF9pcGNfcmVjZWl2aW5nX21hc2spID8gMCA6IChfX2Fzc2VydF9mYWlsICgic3RhdGUgKCkgJiBU
aHJlYWRfaXBjX3JlY2VpdmluZ19tYXNrIiwgImF1dG8vcmVjZWl2ZXIuaCIsIDIwMywgKChjb25z
dCBjaGFyICopIDApKSwgMCkpKTsKCiAgcmV0dXJuIF9yZWNlaXZlX3JlZ3M7Cn0KIyAyMTkgImF1
dG8vcmVjZWl2ZXIuaCIKaW5saW5lIHZvaWQKUmVjZWl2ZXI6OnNldF9wYWdlaW5fcmVxdWVzdCh2
bV9vZmZzZXRfdCBhZGRyZXNzLCBUaHJlYWQgKm5vdGlmeSkKewogICgodm9pZCkgKChhZGRyZXNz
ICE9IDB4ZmZmZmZmZmYpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiYWRkcmVzcyAhPSAweGZmZmZm
ZmZmIiwgImF1dG8vcmVjZWl2ZXIuaCIsIDIyMiwgKChjb25zdCBjaGFyICopIDApKSwgMCkpKTsK
CiAgX3BhZ2Vpbl9yZXF1ZXN0ID0gYWRkcmVzczsKICBfcGFnZWluX2FwcGxpY2FudCA9IG5vdGlm
eTsKCiAgc3RhdGVfY2hhbmdlICh+VGhyZWFkX2J1c3lfbG9uZywgVGhyZWFkX3J1bm5pbmcpOwp9
CgoKCgoKCmlubGluZSBTZW5kZXIqClJlY2VpdmVyOjpwYXJ0bmVyKCkgY29uc3QKewogIHJldHVy
biBfcGFydG5lcjsKfQojIDI0OSAiYXV0by9yZWNlaXZlci5oIgppbmxpbmUgYm9vbApSZWNlaXZl
cjo6c2VuZGVyX29rKFNlbmRlciogc2VuZGVyKSBjb25zdAp7CiAgdW5zaWduZWQgaXBjX3N0YXRl
ID0gc3RhdGUoKSAmIChUaHJlYWRfcmVjZWl2aW5nfFRocmVhZF93YWl0aW5nCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IFRocmVhZF9zZW5kX2luX3Byb2dyZXNzCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRocmVhZF9pcGNfaW5fcHJvZ3Jlc3MpOwoKCiAg
aWYgKCEgKGlwY19zdGF0ZSA9PSAoVGhyZWFkX3dhaXRpbmcgfCBUaHJlYWRfaXBjX2luX3Byb2dy
ZXNzKSkKICAgICAgJiYgKCEgKChpcGNfc3RhdGUgPT0gKFRocmVhZF9yZWNlaXZpbmcgfCBUaHJl
YWRfaXBjX2luX3Byb2dyZXNzKSkKICAgICAgICAgICAgICYmIHBhcnRuZXIoKSA9PSBzZW5kZXIp
KSkKICAgIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICByZXR1cm4gdHJ1ZTsKfQojIDI3
NCAiYXV0by9yZWNlaXZlci5oIgppbmxpbmUgYm9vbApSZWNlaXZlcjo6aW5fbG9uZ19pcGMoU2Vu
ZGVyKiBzZW5kZXIpIGNvbnN0CnsKICBpZiAoKChzdGF0ZSgpICYgKFRocmVhZF9yY3Zsb25nX2lu
X3Byb2dyZXNzfFRocmVhZF9pcGNfaW5fcHJvZ3Jlc3MpKQogICAgICAgIT0gKFRocmVhZF9yY3Zs
b25nX2luX3Byb2dyZXNzfFRocmVhZF9pcGNfaW5fcHJvZ3Jlc3MpKQogICAgICB8fCBwYXJ0bmVy
KCkgIT0gc2VuZGVyKQogICAgcmV0dXJuIGZhbHNlOwoKICByZXR1cm4gdHJ1ZTsKfQoKCgppbmxp
bmUgdm9pZApSZWNlaXZlcjo6c2V0X3BhcnRuZXIoU2VuZGVyKiBwYXJ0bmVyKQp7CiAgX3BhcnRu
ZXIgPSBwYXJ0bmVyOwp9CgoKCgoKaW5saW5lIHZvaWQKUmVjZWl2ZXI6OmNsZWFyX3BhZ2Vpbl9y
ZXF1ZXN0KCkKewogIF9wYWdlaW5fcmVxdWVzdCA9IDB4ZmZmZmZmZmY7Cn0KIyAzMTQgImF1dG8v
cmVjZWl2ZXIuaCIKaW5saW5lIGludApSZWNlaXZlcjo6aXBjX3RyeV9sb2NrKFNlbmRlciogc2Vu
ZGVyKQp7CiAgaWYgKHN0YXRlICgpID09IFRocmVhZF9pbnZhbGlkKQogICAgcmV0dXJuIDB4MTA7
CgogIHRocmVhZF9sb2NrKCktPmxvY2soKTsKCiAgaWYgKCEgc2VuZGVyX29rIChzZW5kZXIpKQog
ICAgewogICAgICB0aHJlYWRfbG9jaygpLT5jbGVhcigpOwogICAgICByZXR1cm4gLTE7CiAgICB9
CgogIHNldF9wYXJ0bmVyIChzZW5kZXIpOwogIHJlY2VpdmVfcmVncygpLT5yY3Zfc291cmNlKCBz
ZW5kZXItPmlkKCkgKTsKICBjbGVhcl9wYWdlaW5fcmVxdWVzdCAoKTsKCiAgcmV0dXJuIDA7Cn0K
CgoKCmlubGluZSB2b2lkClJlY2VpdmVyOjppcGNfdW5sb2NrKCkKewogICgodm9pZCkgKCh0aHJl
YWRfbG9jaygpLT5sb2NrX293bmVyKCkgPT0gY3VycmVudCgpKSA/IDAgOiAoX19hc3NlcnRfZmFp
bCAoInRocmVhZF9sb2NrKCktPmxvY2tfb3duZXIoKSA9PSBjdXJyZW50KCkiLCAiYXV0by9yZWNl
aXZlci5oIiwgMzQxLCAoKGNvbnN0IGNoYXIgKikgMCkpLCAwKSkpOwoKICB0aHJlYWRfbG9jaygp
LT5jbGVhcigpOwp9CgoKCgoKCmlubGluZSBTZW5kZXIqKgpSZWNlaXZlcjo6c2VuZGVyX2xpc3Qo
KQp7CiAgcmV0dXJuICZfc2VuZGVyX2ZpcnN0Owp9CgoKCmlubGluZSB2b2lkClJlY2VpdmVyOjpy
ZXNldF9yZWNlaXZlX3RpbWVvdXQoKQp7CiAgaWYgKF90aW1lb3V0KQogICAgewogICAgICBfdGlt
ZW91dC0+cmVzZXQoKTsKICAgICAgX3RpbWVvdXQgPSAwOwogICAgfQp9CiMgMzc5ICJhdXRvL3Jl
Y2VpdmVyLmgiCmlubGluZSBSZWNlaXZlcjo6UmVjZWl2ZXIoVGhyZWFkX2xvY2sgKnRocmVhZF9s
b2NrLAogICAgICAgICAgICAgICAgICAgU3BhY2VfY29udGV4dCogc3BhY2VfY29udGV4dCkKICA6
IENvbnRleHQgKHRocmVhZF9sb2NrLCBzcGFjZV9jb250ZXh0KQp7fQoKCgoKaW5saW5lIHZvaWQK
UmVjZWl2ZXI6OnNldF9yZWNlaXZlX3JlZ3MoU3lzX2lwY19mcmFtZSogcmVncykKewogIF9yZWNl
aXZlX3JlZ3MgPSByZWdzOwp9CgoKCgoKCgppbmxpbmUgdm9pZApSZWNlaXZlcjo6cmVzdG9yZV9y
ZWNlaXZlcl9zdGF0ZShTZW5kZXIqIHBhcnRuZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTeXNfaXBjX2ZyYW1lKiByZWdzKQp7CiAgc2V0X3BhcnRuZXIgKHBhcnRuZXIpOwog
IHNldF9yZWNlaXZlX3JlZ3MgKHJlZ3MpOwp9CgoKCgoKCgppbmxpbmUgdm9pZApSZWNlaXZlcjo6
c2F2ZV9yZWNlaXZlcl9zdGF0ZShTZW5kZXIqKiBvdXRfcGFydG5lciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFN5c19pcGNfZnJhbWUqKiBvdXRfcmVncykKewogICpvdXRfcGFydG5l
ciA9IF9wYXJ0bmVyOwogICpvdXRfcmVncyA9IF9yZWNlaXZlX3JlZ3M7Cn0KCgoKCgppbmxpbmUg
dm1fb2Zmc2V0X3QKUmVjZWl2ZXI6OnBhZ2Vpbl9yZXF1ZXN0KCkgY29uc3QKewogIHJldHVybiBf
cGFnZWluX3JlcXVlc3Q7Cn0KCgoKCgoKaW5saW5lIFRocmVhZCoKUmVjZWl2ZXI6OnBhZ2Vpbl9h
cHBsaWNhbnQoKQp7CiAgcmV0dXJuIF9wYWdlaW5fYXBwbGljYW50Owp9CiMgNDUyICJhdXRvL3Jl
Y2VpdmVyLmgiCmlubGluZSB1bnNpZ25lZApSZWNlaXZlcjo6c2V0dXBfcmVjZWl2ZXJfc3RhdGUo
U2VuZGVyKiBzZW5kZXIsIFN5c19pcGNfZnJhbWUqIHJlZ3MpCnsKICBzZXRfcmVjZWl2ZV9yZWdz
IChyZWdzKTsKCiAgaWYgKHNlbmRlcikKICAgIHsKICAgICAgc2V0X3BhcnRuZXIgKHNlbmRlcik7
CiAgICAgIHJldHVybiBUaHJlYWRfcmVjZWl2aW5nOwogICAgfQogIGVsc2UKICAgIHsKICAgICAg
cmV0dXJuIFRocmVhZF93YWl0aW5nOwogICAgfQp9CiMgNDc5ICJhdXRvL3JlY2VpdmVyLmgiCmlu
bGluZSB2b2lkClJlY2VpdmVyOjpzZXR1cF9yZWNlaXZlcihTZW5kZXIqIHNlbmRlciwgU3lzX2lw
Y19mcmFtZSogcmVncykKewogIHN0YXRlX2FkZCAoc2V0dXBfcmVjZWl2ZXJfc3RhdGUoc2VuZGVy
LCByZWdzKSk7Cn0KCgoKaW5saW5lIHZvaWQKUmVjZWl2ZXI6OnNldF9yZWNlaXZlX3RpbWVvdXQo
dGltZW91dF90ICp0KQp7CiAgX3RpbWVvdXQgPSB0Owp9CiMgMTUgImF1dG8vdGhyZWFkLmgiIDIK
CgoKCgoKCmNsYXNzIHRpbWVvdXRfdDsKY2xhc3MgaXJxX3Q7CmNsYXNzIFJldHVybl9mcmFtZTsK
Y2xhc3MgU3lzY2FsbF9mcmFtZTsKY2xhc3MgRW50cnlfZnJhbWU7CmNsYXNzIFN5c19pcGNfZnJh
bWU7CgpjbGFzcyB0cmFwX3N0YXRlOwoKCgpjbGFzcyBUaHJlYWQgOiBwdWJsaWMgUmVjZWl2ZXIs
IHB1YmxpYyBTZW5kZXIKewpwcml2YXRlOgogIFRocmVhZChjb25zdCBUaHJlYWQmKTsKICB2b2lk
ICpvcGVyYXRvciBuZXcoc2l6ZV90KTsKCnByb3RlY3RlZDoKCgoKCgogICAgICAgICAgICAgU3Bh
Y2UqIF9zcGFjZTsKICAgICAgICAgICAgIFRocmVhZF9sb2NrIF90aHJlYWRfbG9jazsKCgogIFRo
cmVhZCAqX3BhZ2VyLCAqX3ByZWVtcHRlciwgKl9leHRfcHJlZW1wdGVyOwoKICBUaHJlYWQgKnBy
ZXNlbnRfbmV4dCwgKnByZXNlbnRfcHJldjsKICBpcnFfdCAqX2lycTsKCiAgeDg2X2dhdGUgKl9p
ZHQ7CiAgdW5zaWduZWQgc2hvcnQgX2lkdF9saW1pdDsKCgogIEw0X3Jjdl9kZXNjIF90YXJnZXRf
ZGVzYzsKICB1bnNpZ25lZCBfcGFnZWluX2Vycm9yX2NvZGU7CgogIHZtX29mZnNldF90IF92bV93
aW5kb3cwLCBfdm1fd2luZG93MTsKCiAgam1wX2J1ZiAqX3JlY292ZXJfam1wYnVmOwogIEw0X3Rp
bWVvdXQgX3BmX3RpbWVvdXQ7CgoKICB2bV9vZmZzZXRfdCBfbGFzdF9wZl9hZGRyZXNzOwogIHVu
c2lnbmVkIF9sYXN0X3BmX2Vycm9yX2NvZGU7CgogIHVuc2lnbmVkIF9tYWdpYzsKICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgbWFnaWMgPSAweGYwMDFjMDAxOwoKICBzdGF0aWMgaW50ICgqbmVzdGVk
X3RyYXBfaGFuZGxlcikodHJhcF9zdGF0ZSAqc3RhdGUpOwoKCiAgVGhyZWFkIChTcGFjZSogc3Bh
Y2UsIEw0X3VpZCBpZCk7CgpwdWJsaWM6CgoKICBUaHJlYWQgKFNwYWNlKiBzcGFjZSwgTDRfdWlk
IGlkLAogICAgICAgICAgaW50IGluaXRfcHJpbywgdW5zaWduZWQgc2hvcnQgbWNwKTsKCiAgTXdv
cmQgc3lzX2lwYyAoU3lzY2FsbF9mcmFtZSAqcmVncyk7CiAgTXdvcmQgc3lzX2lkX25lYXJlc3Qg
KFN5c2NhbGxfZnJhbWUgKnJlZ3MpOwogIE13b3JkIHN5c19mcGFnZV91bm1hcCAoU3lzY2FsbF9m
cmFtZSAqcmVncyk7CiAgTXdvcmQgc3lzX3RocmVhZF9zd2l0Y2ggKFN5c2NhbGxfZnJhbWUgKnJl
Z3MpOwogIE13b3JkIHN5c190aHJlYWRfc2NoZWR1bGUgKFN5c2NhbGxfZnJhbWUgKnJlZ3MpOwog
IE13b3JkIHN5c190aHJlYWRfZXhfcmVncyAoU3lzY2FsbF9mcmFtZSAqcmVncyk7CiAgTXdvcmQg
c3lzX3Rhc2tfbmV3IChTeXNjYWxsX2ZyYW1lICpyZWdzKTsKcHJpdmF0ZToKCnByaXZhdGU6CiAg
Ym9vbCBpcGNfc2hvcnRfY3V0KCBTeXNfaXBjX2ZyYW1lKikgYXNtICgiY2FsbF9pcGNfc2hvcnRf
Y3V0Iik7CnByaXZhdGU6Cgpwcm90ZWN0ZWQ6CiAgZnJpZW5kIGNsYXNzIGpkYjsKICBmcmllbmQg
Y2xhc3MgamRiX3RocmVhZF9saXN0OwoKcHVibGljOgoKCgoKCgogIHZvaWQgKiBvcGVyYXRvciBu
ZXcoc2l6ZV90LCB0aHJlYWRpZF90IGlkKTsKCgoKCiAgdm9pZCBvcGVyYXRvciBkZWxldGUodm9p
ZCAqKTsKIyAxMjIgImF1dG8vdGhyZWFkLmgiCiAgdmlydHVhbCB+VGhyZWFkKCk7CgoKCgoKICBz
dGF0aWMgVGhyZWFkKiBsb29rdXAoQ29udGV4dCogYyk7CiMgMTM4ICJhdXRvL3RocmVhZC5oIgog
IFNwYWNlX2luZGV4IHNwYWNlX2luZGV4KCkgY29uc3Q7CgoKCgoKICBTcGFjZV9pbmRleCBjaGll
Zl9pbmRleCgpIGNvbnN0OwoKCgoKICBTcGFjZSAqIHNwYWNlKCkgY29uc3Q7CgoKCgoKCiAgVGhy
ZWFkX2xvY2sgKiB0aHJlYWRfbG9jaygpOwojIDE3MyAiYXV0by90aHJlYWQuaCIKICBib29sIGlu
aXRpYWxpemUodm1fb2Zmc2V0X3QgZWlwLCB2bV9vZmZzZXRfdCBlc3AsIFRocmVhZCogcGFnZXIs
IFRocmVhZCogcHJlZW1wdGVyLCB2bV9vZmZzZXRfdCAqb19laXAgPSAwLCB2bV9vZmZzZXRfdCAq
b19lc3AgPSAwLCBUaHJlYWQqICpvX3BhZ2VyID0gMCwgVGhyZWFkKiAqb19wcmVlbXB0ZXIgPSAw
LCB2bV9vZmZzZXRfdCAqb19lZmxhZ3MgPSAwKTsKIyAxODcgImF1dG8vdGhyZWFkLmgiCiAgYm9v
bCBzZXRfc2NoZWRfcGFyYW0obDRfc2NoZWRfcGFyYW1fdCBwYXJhbSwgVGhyZWFkKiBleHRfcHJl
ZW1wdGVyLCBsNF9zY2hlZF9wYXJhbV90ICpvX3BhcmFtLCBVbnNpZ25lZDY0ICp0aW1lLCBUaHJl
YWQgKipvX2V4dF9wcmVlbXB0ZXIsIFNlbmRlciAqKmlwY3BhcnRuZXIpOwojIDE5OCAiYXV0by90
aHJlYWQuaCIKICBib29sIHJhaXNlX2V4Y2VwdGlvbih0cmFwX3N0YXRlICp0cywgdm1fb2Zmc2V0
X3QgaGFuZGxlcik7CiMgMjA4ICJhdXRvL3RocmVhZC5oIgogIGJvb2wga2lsbF90YXNrKFNwYWNl
X2luZGV4IHN1YnRhc2spOwoKCgoKICB1bnNpZ25lZCBuZXN0KCkgY29uc3Q7CiMgMjIzICJhdXRv
L3RocmVhZC5oIgogIHZpcnR1YWwgdm9pZCBpcGNfcmVjZWl2ZXJfcmVhZHkoKTsKIyAyMzMgImF1
dG8vdGhyZWFkLmgiCiAgdW5zaWduZWQgaXBjX2NvbnRpbnVlKHVuc2lnbmVkIGlwY19jb2RlKTsK
CiAgYm9vbCBoYW5kbGVfc2xvd190cmFwKHRyYXBfc3RhdGUgKnRzKTsKIyAyNTAgImF1dG8vdGhy
ZWFkLmgiCiAgYm9vbCBoYW5kbGVfcGFnZV9mYXVsdCh2bV9vZmZzZXRfdCBwZmEsIHVuc2lnbmVk
IGVycm9yX2NvZGUsIHVuc2lnbmVkIGVpcCk7CgogIHZvaWQgc3lzY2FsbF9sb2coU3lzY2FsbF9m
cmFtZSAqICwgdW5zaWduZWQgbnVtYmVyLAogIGJvb2wgZW50ZXIsIHVuc2lnbmVkIHJldHZhbCk7
CgoKCgoKCiAgTXdvcmQgc3lzX2lwY19sb2coU3lzY2FsbF9mcmFtZSAqaV9yZWdzKTsKCgoKCiAg
dW5zaWduZWQgc3lzX2lwY190cmFjZShTeXNjYWxsX2ZyYW1lICppX3JlZ3MpOwoKCiAgdW5zaWdu
ZWQgc3lzX2ZwYWdlX3VubWFwX2xvZyhTeXNjYWxsX2ZyYW1lICpyZWdzKTsKCnByb3RlY3RlZDoK
IyAyODIgImF1dG8vdGhyZWFkLmgiCiAgdm9pZCBzZXR1cF9pcGNfd2luZG93KHVuc2lnbmVkIHdp
biwgdm1fb2Zmc2V0X3QgYWRkcmVzcyk7CgoKCgogIGJvb2wgaW5fcHJlc2VudF9saXN0KCk7CgoK
CgoKICB2b2lkIHByZXNlbnRfZW5xdWV1ZShUaHJlYWQgKnNpYmxpbmcpOwoKCgoKICB2b2lkIHBy
ZXNlbnRfZGVxdWV1ZSgpOwoKCgoKICBzdGF0aWMgdm9pZCB1c2VyX2ludm9rZSgpOwoKcHJpdmF0
ZToKCgoKCgoKICBib29sIGtpbGwoKTsKIyAzMjMgImF1dG8vdGhyZWFkLmgiCiAgTXdvcmQgaXBj
X3NlbmRfcmVncyhUaHJlYWQqIHJlY2VpdmVyLCBTeXNfaXBjX2ZyYW1lIGNvbnN0ICpzZW5kZXJf
cmVncyk7CiMgMzMyICJhdXRvL3RocmVhZC5oIgogIE13b3JkIGRvX3NlbmQoVGhyZWFkICpwYXJ0
bmVyLCBMNF90aW1lb3V0IHQsIFN5c19pcGNfZnJhbWUgKnJlZ3MpOwojIDM0MSAiYXV0by90aHJl
YWQuaCIKICB2b2lkIHByZXBhcmVfcmVjZWl2ZShTZW5kZXIgKnBhcnRuZXIsIFN5c19pcGNfZnJh
bWUgKnJlZ3MpOwojIDM1MyAiYXV0by90aHJlYWQuaCIKICBNd29yZCBkb19yZWNlaXZlKFNlbmRl
ciAqc2VuZGVyLCBMNF90aW1lb3V0IHQsIFN5c19pcGNfZnJhbWUgKnJlZ3MpOwoKCgoKCgoKICB1
bnNpZ25lZCBoYW5kbGVfcGFnZV9mYXVsdF9wYWdlcih2bV9vZmZzZXRfdCBwZmEsIHVuc2lnbmVk
IGVycm9yX2NvZGUpOwojIDM3MCAiYXV0by90aHJlYWQuaCIKICB1bnNpZ25lZCBoYW5kbGVfaXBj
X3BhZ2VfZmF1bHQodm1fb2Zmc2V0X3QgcGZhKTsKIyAzODIgImF1dG8vdGhyZWFkLmgiCiAgdW5z
aWduZWQgaXBjX3NlbmRfZnBhZ2UoVGhyZWFkKiByZWNlaXZlciwgTDRfZnBhZ2UgZnJvbV9mcGFn
ZSwgTDRfZnBhZ2UgdG9fZnBhZ2UsIHZtX29mZnNldF90IG9mZnNldCwgYm9vbCBmaW5pc2gpOwoK
CgoKCgogIHVuc2lnbmVkIGlwY19maW5pc2goVGhyZWFkKiByZWNlaXZlciwgdW5zaWduZWQgbmV3
X3N0YXRlKTsKIyAzOTkgImF1dG8vdGhyZWFkLmgiCiAgdW5zaWduZWQgaXBjX3BhZ2Vpbl9yZXF1
ZXN0KFJlY2VpdmVyKiByZWNlaXZlciwgdm1fb2Zmc2V0X3QgYWRkcmVzcyk7CiMgNDE0ICJhdXRv
L3RocmVhZC5oIgogIGJvb2wgZ2V0X2lvcG9ydCh2bV9vZmZzZXRfdCBlaXAsIHRyYXBfc3RhdGUg
KiB0cywgdW5zaWduZWQgKiBwb3J0LCB1bnNpZ25lZCAqIHNpemUpOwojIDQyOSAiYXV0by90aHJl
YWQuaCIKICB1bnNpZ25lZCBkb19zZW5kX2xvbmcoVGhyZWFkICpwYXJ0bmVyLAogIFN5c19pcGNf
ZnJhbWUgKnJlZ3MpOwoKICBzdGF0aWMgdm9pZCBob29rX2lwY192ZWN0b3IoKTsKCiAgc3RhdGlj
IHZvaWQgcmVzdG9yZV9pcGNfdmVjdG9yKCk7CgoKCgogIHZvaWQgcGFnZV9mYXVsdF9sb2codm1f
b2Zmc2V0X3QgcGZhLCB1bnNpZ25lZCBlcnJvcl9jb2RlLCB1bnNpZ25lZCBlaXApOwoKICBzdGF0
aWMgdm9pZCBob29rX3VubWFwX3ZlY3RvcigpOwoKICBzdGF0aWMgdm9pZCByZXN0b3JlX3VubWFw
X3ZlY3RvcigpOwp9OwoKZXh0ZXJuIHVuc2lnbmVkIChUaHJlYWQ6OipzeXNjYWxsX3RhYmxlW10p
KFN5c2NhbGxfZnJhbWUgKnJlZ3MpOwoKZXh0ZXJuIGJvb2wgbG9nX2lwYzsKZXh0ZXJuIGJvb2wg
bG9nX2lwY190b19idWY7CmV4dGVybiBib29sIGxvZ19pcGNfcmVzdWx0OwpleHRlcm4gYm9vbCBs
b2dfcGFnZV9mYXVsdDsKZXh0ZXJuIGJvb2wgbG9nX3BmX3RvX2J1ZjsKZXh0ZXJuIGJvb2wgbG9n
X3VubWFwOwpleHRlcm4gYm9vbCBsb2dfdW5tYXBfdG9fYnVmOwpleHRlcm4gYm9vbCB0cmFjZV9p
cGM7CmV4dGVybiBib29sIHNsb3dfaXBjOwoKCgoKVGhyZWFkKiBjdXJyZW50X3RocmVhZCgpOwoj
IDQ3MCAiYXV0by90aHJlYWQuaCIKZXh0ZXJuICJDIiBpbnQgdGhyZWFkX2hhbmRsZV90cmFwKHRy
YXBfc3RhdGUgKnN0YXRlKTsKCmV4dGVybiAiQyIgdm9pZCB0aHJlYWRfdGltZXJfaW50ZXJydXB0
KHZvaWQpOwoKCgoKZXh0ZXJuICJDIiBNd29yZCBkaXNwYXRjaF9zeXNjYWxsKFRocmVhZCAqdCwg
RW50cnlfZnJhbWUgKnJlZ3MsIHVuc2lnbmVkIGludCBudW1iZXIpOwoKdm9pZCB0aHJlYWRfdGlt
ZXJfaW50ZXJydXB0X2FyY2godm9pZCk7CgoKCmV4dGVybiAiQyIgdm9pZCB0aHJlYWRfdGltZXJf
aW50ZXJydXB0X3N0b3Aodm9pZCk7CgoKCgoKZXh0ZXJuICJDIiB2b2lkIHRocmVhZF90aW1lcl9p
bnRlcnJ1cHRfc2xvdyh2b2lkKTsKIyA1MDAgImF1dG8vdGhyZWFkLmgiCmV4dGVybiAiQyIgaW50
IHRocmVhZF9wYWdlX2ZhdWx0KGNvbnN0IHZtX29mZnNldF90IHBmYSwgY29uc3QgdW5zaWduZWQg
ZXJyb3JfY29kZSwgY29uc3QgdW5zaWduZWQgLApjb25zdCB1bnNpZ25lZCAsCmNvbnN0IHVuc2ln
bmVkICwKY29uc3QgdW5zaWduZWQgLApjb25zdCB1bnNpZ25lZCBlaXAsIGNvbnN0IHVuc2lnbmVk
ICwKY29uc3QgdW5zaWduZWQgZWZsYWdzKTsKCmV4dGVybiAiQyIgdm9pZCB0aHJlYWRfc3lzY2Fs
bF9sb2dfYmVnaW4oVGhyZWFkICp0LCBTeXNjYWxsX2ZyYW1lICpyZWdzLCB1bnNpZ25lZCBudW1i
ZXIpOwoKZXh0ZXJuICJDIiB2b2lkIHRocmVhZF9zeXNjYWxsX2xvZ19lbmQodW5zaWduZWQgcmV0
dmFsLCBUaHJlYWQgKnQsIFN5c2NhbGxfZnJhbWUgKnJlZ3MsIHVuc2lnbmVkIG51bWJlcik7CiMg
NTE4ICJhdXRvL3RocmVhZC5oIgojIDEgIi4uL3NyYy9rZXJuL2lhMzIvbG9nZGVmcy5oIiAxCgoK
CgoKIyAxICJhdXRvL2pkYl90YnVmLmgiIDEKCgoKCgoKIyAxICJhdXRvL2pkYl9rdHJhY2UuaCIg
MQojIDE1ICJhdXRvL2pkYl9rdHJhY2UuaCIKZW51bSB7CiAgTE9HX0VWRU5UX01BWF9FVkVOVFMg
PSAxNiwKfTsKCnN0cnVjdCBsNF90cmFjZWJ1ZmZlcl9zdGF0dXNfdAp7CiAgVW5zaWduZWQzMiB0
cmFjZWJ1ZmZlcjA7CiAgVW5zaWduZWQzMiBzaXplMDsKICBVbnNpZ25lZDMyIHZlcnNpb24wOwog
IFVuc2lnbmVkMzIgdHJhY2VidWZmZXIxOwogIFVuc2lnbmVkMzIgc2l6ZTE7CiAgVW5zaWduZWQz
MiB2ZXJzaW9uMTsKICBVbnNpZ25lZDMyIGxvZ2V2ZW50c1tMT0dfRVZFTlRfTUFYX0VWRU5UU107
Cn07CgplbnVtIHsKICBMT0dfRVZFTlRfQ09OVEVYVF9TV0lUQ0ggPSAwLAogIExPR19FVkVOVF9J
UENfU0hPUlRDVVQgPSAxLAogIExPR19FVkVOVF9JUlFfUkFJU0VEID0gMiwKICBMT0dfRVZFTlRf
VElNRVJfSVJRID0gMywKICBMT0dfRVZFTlRfVEhSRUFEX0VYX1JFR1MgPSA0LAp9OwojIDggImF1
dG8vamRiX3RidWYuaCIgMgoKCgoKCgpjbGFzcyBMb2dfZXZlbnQ7CmNsYXNzIENvbnRleHQ7CiMg
MzMgImF1dG8vamRiX3RidWYuaCIKY2xhc3MgamRiX3RidWYKewpwdWJsaWM6CiAgdHlwZWRlZiBz
dHJ1Y3QgX19hdHRyaWJ1dGVfXygocGFja2VkKSkKICAgIHsKICAgICAgdW5zaWduZWQgbnVtYmVy
OwogICAgICB1bnNpZ25lZCBlaXA7CiAgICAgIENvbnRleHQgKmN1cnJlbnQ7CiAgICAgIHVuc2ln
bmVkIGxvbmcgbG9uZyB0c2M7CiAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBwbWM7CiAgICAgIHVu
aW9uIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpCiAgICAgICAgewogICAgICAgICAgc3RydWN0IF9f
YXR0cmlidXRlX18oKHBhY2tlZCkpCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgdW5zaWdu
ZWQgZWF4LCBlZHgsIGVieCwgZWJwOwogICAgICAgICAgICAgIFVuc2lnbmVkNjQgZGVzdDsKICAg
ICAgICAgICAgfSBpcGM7CiAgICAgICAgICBzdHJ1Y3QgX19hdHRyaWJ1dGVfXygocGFja2VkKSkK
ICAgICAgICAgICAgewoKICAgICAgICAgICAgICB1bnNpZ25lZCBlYXgsIGVkeCwgZWJ4OwogICAg
ICAgICAgICAgIHVuc2lnbmVkIG9yaWdfZWJwOwogICAgICAgICAgICAgIFVuc2lnbmVkNjQgc3Jj
OwogICAgICAgICAgICAgIHVuc2lnbmVkIHJlZl9ldmVudDsKICAgICAgICAgICAgICBjaGFyIGhh
dmVfc2VuZDsKICAgICAgICAgICAgfSBpcGNfcmVzOwogICAgICAgICAgc3RydWN0IF9fYXR0cmli
dXRlX18oKHBhY2tlZCkpCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgdW5zaWduZWQgbG9u
ZyBsb25nIHNlbmRfdHNjOwogICAgICAgICAgICAgIFVuc2lnbmVkNjQgc2VuZF9lc2lfZWRpOwog
ICAgICAgICAgICAgIFVuc2lnbmVkNjQgcmVjdl9lc2lfZWRpOwogICAgICAgICAgICAgIGw0X21z
Z2RvcGVfdCBkb3BlOwogICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgc2VuZF9kZXNjLCByZWN2
X2Rlc2M7CiAgICAgICAgICAgIH0gaXBjX3RyYWNlOwogICAgICAgICAgc3RydWN0IF9fYXR0cmli
dXRlX18oKHBhY2tlZCkpCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgdW5zaWduZWQgcGZh
OwogICAgICAgICAgICAgIHVuc2lnbmVkIGVycjsKICAgICAgICAgICAgfSBwZjsKICAgICAgICAg
IHN0cnVjdCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKQogICAgICAgICAgICB7CgogICAgICAgICAg
ICAgIGNoYXIgbXNnWzM1XTsKICAgICAgICAgICAgfSBrZTsKICAgICAgICAgIHN0cnVjdCBfX2F0
dHJpYnV0ZV9fKChwYWNrZWQpKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIHVuc2lnbmVk
IGVheCwgZWR4LCBlY3g7CiAgICAgICAgICAgICAgY2hhciBtc2dbMjNdOwogICAgICAgICAgICB9
IGtlX3JlZzsKICAgICAgICAgIHN0cnVjdCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKQogICAgICAg
ICAgICB7CgogICAgICAgICAgICAgIE13b3JkIGZwYWdlOwogICAgICAgICAgICAgIHVuc2lnbmVk
IG1hc2s7CiAgICAgICAgICAgICAgYm9vbCByZXN1bHQ7CiAgICAgICAgICAgIH0gdW5tYXA7CiAg
ICAgICAgICBzdHJ1Y3QgX19hdHRyaWJ1dGVfXygocGFja2VkKSkKICAgICAgICAgICAgewoKICAg
ICAgICAgICAgICB1bnNpZ25lZCBsdGhyZWFkOwogICAgICAgICAgICAgIHVuc2lnbmVkIG9sZF9l
c3A7CiAgICAgICAgICAgICAgdW5zaWduZWQgbmV3X2VzcDsKICAgICAgICAgICAgICB1bnNpZ25l
ZCBvbGRfZWlwOwogICAgICAgICAgICAgIHVuc2lnbmVkIG5ld19laXA7CiAgICAgICAgICAgIH0g
ZXhfcmVnczsKICAgICAgICAgIHN0cnVjdCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKQogICAgICAg
ICAgICB7CgogICAgICAgICAgICAgIHVuc2lnbmVkIGFkZHI7CiAgICAgICAgICAgICAgdW5zaWdu
ZWQgbGVuOwogICAgICAgICAgICAgIHVuc2lnbmVkIHZhbHVlOwogICAgICAgICAgICAgIHVuc2ln
bmVkIGNoYXIgbW9kZTsKICAgICAgICAgICAgfSBicDsKICAgICAgICAgIHN0cnVjdCBfX2F0dHJp
YnV0ZV9fKChwYWNrZWQpKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIHVuc2lnbmVkIGVh
eCwgZWJwLCBlY3g7CiAgICAgICAgICAgICAgVW5zaWduZWQ2NCBkZXN0OwogICAgICAgICAgICAg
IGNoYXIgaXNfaXJxLCBzbmRfbHN0LCBkc3Rfb2ssIGRzdF9sY2s7CiAgICAgICAgICAgIH0gaXBj
X3NmbDsKICAgICAgICAgIHN0cnVjdCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKQogICAgICAgICAg
ICB7CgogICAgICAgICAgICAgIENvbnRleHQgKmRlc3Q7CiAgICAgICAgICAgICAgdW5zaWduZWQg
a2VybmVsX2VpcDsKICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICprZXJuZWxfc3A7CiAgICAg
ICAgICAgIH0gY3R4X3N3OwogICAgICAgIH0gbTsKICAgICAgY2hhciB0eXBlOwogICAgfSBUYl9l
bnRyeTsKCgogIHN0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKSAoKmluaXRf
cG1jKSh1bnNpZ25lZCBldmVudCwgaW50IHVzZXIsIGludCBrZXJuZWwpOwoKICBzdGF0aWMgdm9p
ZCBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSkgKCpyZWFkX3BtYykoVGJfZW50cnkgKnRiZSk7
CgogIHN0YXRpYyBMb2dfZXZlbnQgKiBjb25zdCBsb2dfZXZlbnRzW107Cgpwcml2YXRlOgogIHN0
YXRpYyBUYl9lbnRyeSAqdGJ1ZjsKICBzdGF0aWMgVGJfZW50cnkgKnRidWZfYWN0OwogIHN0YXRp
YyBsNF90cmFjZWJ1ZmZlcl9zdGF0dXNfdCAqc3RhdHVzOwogIHN0YXRpYyB1bnNpZ25lZCBlbnRy
aWVzOwogIHN0YXRpYyB1bnNpZ25lZCBudW1iZXI7CgogIHN0YXRpYyBpbnQgcGVyZl91c2VyOwog
IHN0YXRpYyBpbnQgcGVyZl9rZXJuZWw7CiAgc3RhdGljIHVuc2lnbmVkIHBlcmZfZXZlbnQ7Cgog
IHN0YXRpYyBjb25zdCBjaGFyICpwZXJmX3R5cGU7CiAgc3RhdGljIGludCBoYXZlX3RzYzsKCnB1
YmxpYzoKCiAgc3RhdGljIHZvaWQgaW5pdCh2b2lkKTsKCiAgc3RhdGljIGludCBnZXRfaGF2ZV90
c2MoKTsKCiAgc3RhdGljIGNvbnN0IGNoYXIqIGdldF9wZXJmX3R5cGUoKTsKCgogIHN0YXRpYyBp
bnQgZ2V0X3BlcmZfbW9kZShjb25zdCBjaGFyICoqdHlwZSwgY29uc3QgY2hhciAqKm1vZGUsIHVu
c2lnbmVkICpldmVudCwgaW50ICp1c2VyLCBpbnQgKmtlcm5lbCk7CgoKICBzdGF0aWMgdm9pZCBp
bml0X3BlcmYodW5zaWduZWQgZXZlbnQsIGludCB1c2VyLCBpbnQga2VybmVsKTsKCgogIHN0YXRp
YyB2b2lkIGNsZWFyX3RidWYoKTsKCgogIHN0YXRpYyBqZGJfdGJ1Zjo6VGJfZW50cnkqIG5ld19l
bnRyeSgpOwoKCiAgc3RhdGljIHZvaWQgY29tbWl0X2VudHJ5KCk7CgoKICBzdGF0aWMgaW50IGdl
dF9lbnRyaWVzKCk7CgoKICBzdGF0aWMgaW50IGdldF90aHJlYWRfZWlwKGludCBlX25yLCBMNF91
aWQgKnRpZCwgdW5zaWduZWQgKmVpcCk7CgogIHN0YXRpYyBpbnQgZ2V0X2V2ZW50KGludCBlX25y
LCB1bnNpZ25lZCAqbnVtYmVyLCB1bnNpZ25lZCBsb25nIGxvbmcgKnRzYywgdW5zaWduZWQgbG9u
ZyBsb25nICpwbWMpOwoKICBzdGF0aWMgdW5zaWduZWQgZ2V0X3JlZl9ldmVudChpbnQgZV9uciwg
Y2hhciAqdHlwZSk7CgogIHN0YXRpYyBpbnQgZ2V0X2RpZmZfdHNjKGludCBlX25yLCB1bnNpZ25l
ZCBsb25nIGxvbmcgKmRlbHRhKTsKCiAgc3RhdGljIGludCBnZXRfZGlmZl9wbWMoaW50IGVfbnIs
IHVuc2lnbmVkIGxvbmcgbG9uZyAqZGVsdGEpOwoKICBzdGF0aWMgdm9pZCBwcmludF9lbnRyeShp
bnQgZV9uciwgY2hhciAqYnVmLCBpbnQgbWF4bGVuKTsKCiAgc3RhdGljIHZvaWQgcHJpbnRfZW50
cnkoVGJfZW50cnkgKmUsIGNoYXIgKmJ1ZiwgaW50IG1heGxlbik7Cgpwcml2YXRlOgogIHN0YXRp
YyBpbnQgZXZlbnRfdmFsaWQodW5zaWduZWQgZV9ucik7CgogIHN0YXRpYyBqZGJfdGJ1Zjo6VGJf
ZW50cnkqIGxvb2t1cChpbnQgZV9ucik7CgogIHN0YXRpYyB2b2lkIG15X3NucHJpbnRmKGNoYXIg
KipidWYsIGludCAqbWF4bGVuLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7Cn07CgpjbGFzcyBs
b2dfcGF0Y2hfdAp7CnB1YmxpYzoKICBsb2dfcGF0Y2hfdCAqbmV4dDsKCnByaXZhdGU6CiAgdHlw
ZWRlZiB1bnNpZ25lZCBjaGFyIGxvZ19wYXRjaF9jb2RlX3RbNV07CiAgbG9nX3BhdGNoX2NvZGVf
dCAqb3JpZ19jb2RlOwogIGxvZ19wYXRjaF9jb2RlX3Qgc2F2ZV9jb2RlOwoKcHVibGljOgogIGV4
cGxpY2l0IGxvZ19wYXRjaF90KHZvaWQgKmNvZGUpOwoKICB2b2lkIGVuYWJsZShib29sIGVuYWJs
ZSk7CgogIGJvb2wgZW5hYmxlZCh2b2lkKTsKfTsKCmNsYXNzIExvZ19ldmVudAp7CiAgY29uc3Qg
Y2hhciAqZXZlbnRfbmFtZTsKICBsb2dfcGF0Y2hfdCAqcGF0Y2g7CiAgaW50IGV2ZW50X3R5cGU7
CgpwdWJsaWM6CiAgZXhwbGljaXQgTG9nX2V2ZW50KGNvbnN0IGNoYXIgKm5hbWUsIGludCB0eXBl
LCBpbnQgY291bnQsIGxvZ19wYXRjaF90ICpscCwgLi4uKTsKCgogIHZvaWQgZW5hYmxlKGJvb2wg
ZW5hYmxlKTsKCgogIGJvb2wgZW5hYmxlZCh2b2lkKTsKCgogIGNvbnN0IGNoYXIqIGdldF9uYW1l
KHZvaWQpOwoKCiAgaW50IGdldF90eXBlKHZvaWQpOwp9OwojIDI5MCAiYXV0by9qZGJfdGJ1Zi5o
IgppbmxpbmUgaW50CmpkYl90YnVmOjpnZXRfaGF2ZV90c2MoKQp7CiAgcmV0dXJuIGhhdmVfdHNj
Owp9CgoKCmlubGluZSBjb25zdCBjaGFyKgpqZGJfdGJ1Zjo6Z2V0X3BlcmZfdHlwZSgpCnsKICBy
ZXR1cm4gcGVyZl90eXBlOwp9CgoKCgppbmxpbmUgaW50CmpkYl90YnVmOjpnZXRfZW50cmllcygp
CnsKICByZXR1cm4gZW50cmllczsKfQoKCgoKaW5saW5lIGNvbnN0IGNoYXIqCkxvZ19ldmVudDo6
Z2V0X25hbWUodm9pZCkKewogIHJldHVybiBldmVudF9uYW1lOwp9CgoKCgppbmxpbmUgaW50Ckxv
Z19ldmVudDo6Z2V0X3R5cGUodm9pZCkKewogIHJldHVybiBldmVudF90eXBlOwp9CiMgNyAiLi4v
c3JjL2tlcm4vaWEzMi9sb2dkZWZzLmgiIDIKIyA1MTkgImF1dG8vdGhyZWFkLmgiIDIKIyA1MzQg
ImF1dG8vdGhyZWFkLmgiCmlubGluZSB2b2lkICoKVGhyZWFkOjpvcGVyYXRvciBuZXcoc2l6ZV90
LCB0aHJlYWRpZF90IGlkKQp7CgoKCiAgcmV0dXJuIHN0YXRpY19jYXN0PHZvaWQqPihpZC5sb29r
dXAoKSk7Cn0KCgoKCgoKCmlubGluZSBUaHJlYWQqClRocmVhZDo6bG9va3VwKENvbnRleHQqIGMp
CnsKICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUaHJlYWQqPihjKTsKfQojIDU2NCAiYXV0by90
aHJlYWQuaCIKaW5saW5lIFNwYWNlX2luZGV4IFRocmVhZDo6c3BhY2VfaW5kZXgoKSBjb25zdAp7
IHJldHVybiBTcGFjZV9pbmRleChpZCgpLnRhc2soKSk7IH0KCgoKCgoKaW5saW5lIFNwYWNlX2lu
ZGV4IFRocmVhZDo6Y2hpZWZfaW5kZXgoKSBjb25zdAp7IHJldHVybiBTcGFjZV9pbmRleChpZCgp
LmNoaWVmKCkpOyB9CgoKCgoKCgppbmxpbmUgU3BhY2UgKgpUaHJlYWQ6OnNwYWNlKCkgY29uc3QK
ewogIHJldHVybiBfc3BhY2U7Cn0KIyA1OTQgImF1dG8vdGhyZWFkLmgiCmlubGluZSBUaHJlYWRf
bG9jayAqClRocmVhZDo6dGhyZWFkX2xvY2soKQp7CiAgcmV0dXJuICZfdGhyZWFkX2xvY2s7Cn0K
CgoKCgoKaW5saW5lIHVuc2lnbmVkIFRocmVhZDo6bmVzdCgpIGNvbnN0CnsgcmV0dXJuIGlkKCku
bmVzdCgpOyB9CiMgNjIxICJhdXRvL3RocmVhZC5oIgppbmxpbmUgdm9pZApUaHJlYWQ6OnNldHVw
X2lwY193aW5kb3codW5zaWduZWQgd2luLCB2bV9vZmZzZXRfdCBhZGRyZXNzKQp7CiAgaWYgKHdp
biA9PSAwKQogICAgewogICAgICBpZiAoX3ZtX3dpbmRvdzAgIT0gYWRkcmVzcykKICAgICAgICB7
CiAgICAgICAgICBfdm1fd2luZG93MCA9IGFkZHJlc3M7CiAgICAgICAgICBrbWVtOjp0bGJfZmx1
c2goKTsKICAgICAgICB9CiAgICB9CiAgZWxzZQogICAgewogICAgICBpZiAoX3ZtX3dpbmRvdzEg
IT0gYWRkcmVzcykKICAgICAgICB7CiAgICAgICAgICBfdm1fd2luZG93MSA9IGFkZHJlc3M7CiAg
ICAgICAgICBrbWVtOjp0bGJfZmx1c2goKTsKICAgICAgICB9CiAgICB9Cn0KCgoKCgoKaW5saW5l
IGJvb2wKVGhyZWFkOjppbl9wcmVzZW50X2xpc3QoKQp7CiAgcmV0dXJuIHByZXNlbnRfbmV4dDsK
fQoKCgoKCgoKaW5saW5lIHZvaWQKVGhyZWFkOjpwcmVzZW50X2VucXVldWUoVGhyZWFkICpzaWJs
aW5nKQp7CiAgTG9ja19ndWFyZDxDcHVfbG9jaz4gZ3VhcmQgKCZjcHVfbG9jayk7CgogIGlmICgh
IGluX3ByZXNlbnRfbGlzdCgpKQogICAgewogICAgICBwcmVzZW50X25leHQgPSBzaWJsaW5nLT5w
cmVzZW50X25leHQ7CiAgICAgIHByZXNlbnRfcHJldiA9IHNpYmxpbmc7CiAgICAgIHNpYmxpbmct
PnByZXNlbnRfbmV4dCA9IHRoaXM7CiAgICAgIHByZXNlbnRfbmV4dC0+cHJlc2VudF9wcmV2ID0g
dGhpczsKICAgIH0KfQoKCgoKCgppbmxpbmUgdm9pZApUaHJlYWQ6OnByZXNlbnRfZGVxdWV1ZSgp
CnsKICBMb2NrX2d1YXJkPENwdV9sb2NrPiBndWFyZCAoJmNwdV9sb2NrKTsKCiAgaWYgKGluX3By
ZXNlbnRfbGlzdCgpKQogICAgewogICAgICBwcmVzZW50X3ByZXYtPnByZXNlbnRfbmV4dCA9IHBy
ZXNlbnRfbmV4dDsKICAgICAgcHJlc2VudF9uZXh0LT5wcmVzZW50X3ByZXYgPSBwcmVzZW50X3By
ZXY7CiAgICAgIHByZXNlbnRfbmV4dCA9IDA7CiAgICB9Cn0KCgoKCgoKaW5saW5lIFRocmVhZCoK
Y3VycmVudF90aHJlYWQoKQp7CiAgcmV0dXJuIFRocmVhZDo6bG9va3VwKGN1cnJlbnQgKCkpOwp9
CgoKCmlubGluZSB2b2lkIHRocmVhZF90aW1lcl9pbnRlcnJ1cHRfYXJjaCh2b2lkKQp7CgoKCiAg
aWYgKENvbmZpZzo6c2NoZWR1bGluZ191c2luZ19waXQpCiAgICAgIGRvIHsgYXNtIHZvbGF0aWxl
ICgiLmdsb2JsICAiImxvZ190aW1lcl9pcnEiIgkJCVxuXHQiICIuZ2xvYmwgIHBhdGNoXyIibG9n
X3RpbWVyX2lycSIiCQlcblx0IiAicGF0Y2hfIiJsb2dfdGltZXJfaXJxIiI6CQkJXG5cdCIgImpt
cCAgICAgIiJsb2dfdGltZXJfaXJxIiIJCQlcblx0IiAiMToJCQkJCVxuXHQiICIudGV4dCAgIDEJ
CQkJXG5cdCIgIiIibG9nX3RpbWVyX2lycSIiOgkJCQlcblx0Iik7IHsgdW5zaWduZWQgZWJwOyBh
c20gdm9sYXRpbGUgKCJtb3ZsICUlZWJwLCAlMCIgOiAiPWciKGVicCkpOyB7IGpkYl90YnVmOjpU
Yl9lbnRyeSAqdGJlID0gamRiX3RidWY6Om5ld19lbnRyeSgpOyB0YmUtPnR5cGUgPSAyOyB0YmUt
PmN1cnJlbnQgPSBjdXJyZW50KCk7IHRiZS0+ZWlwID0gdGJlLT5jdXJyZW50LT5yZWdzKCktPmVp
cDsgdGJlLT5tLmlwYy5lYXggPSB0YmUtPm0uaXBjLmVicCA9IDA7IHRiZS0+bS5pcGMuZGVzdCA9
IDAgKyAxOyBqZGJfdGJ1Zjo6Y29tbWl0X2VudHJ5KCk7IH0gYXNtIHZvbGF0aWxlICgibW92bCAl
MCwgJSVlYnAiIDogOiAiZyIoZWJwKSk7IH0gYXNtIHZvbGF0aWxlICgiam1wICAgICAxYgkJCQlc
blx0IiAiLnByZXZpb3VzCQkJCVxuXHQiIDogOiA6ICJlYXgiLCJlYngiLCJlY3giLCJlZHgiLCJl
c2kiLCAiZWRpIiwibWVtb3J5Iik7IH0gd2hpbGUgKDApOwogIGVsc2UKICAgICAgZG8geyBhc20g
dm9sYXRpbGUgKCIuZ2xvYmwgICIibG9nX3RpbWVyX2lycSIiCQkJXG5cdCIgIi5nbG9ibCAgcGF0
Y2hfIiJsb2dfdGltZXJfaXJxIiIJCVxuXHQiICJwYXRjaF8iImxvZ190aW1lcl9pcnEiIjoJCQlc
blx0IiAiam1wICAgICAiImxvZ190aW1lcl9pcnEiIgkJCVxuXHQiICIxOgkJCQkJXG5cdCIgIi50
ZXh0ICAgMQkJCQlcblx0IiAiIiJsb2dfdGltZXJfaXJxIiI6CQkJCVxuXHQiKTsgeyB1bnNpZ25l
ZCBlYnA7IGFzbSB2b2xhdGlsZSAoIm1vdmwgJSVlYnAsICUwIiA6ICI9ZyIoZWJwKSk7IHsgamRi
X3RidWY6OlRiX2VudHJ5ICp0YmUgPSBqZGJfdGJ1Zjo6bmV3X2VudHJ5KCk7IHRiZS0+dHlwZSA9
IDI7IHRiZS0+Y3VycmVudCA9IGN1cnJlbnQoKTsgdGJlLT5laXAgPSB0YmUtPmN1cnJlbnQtPnJl
Z3MoKS0+ZWlwOyB0YmUtPm0uaXBjLmVheCA9IHRiZS0+bS5pcGMuZWJwID0gMDsgdGJlLT5tLmlw
Yy5kZXN0ID0gOCArIDE7IGpkYl90YnVmOjpjb21taXRfZW50cnkoKTsgfSBhc20gdm9sYXRpbGUg
KCJtb3ZsICUwLCAlJWVicCIgOiA6ICJnIihlYnApKTsgfSBhc20gdm9sYXRpbGUgKCJqbXAgICAg
IDFiCQkJCVxuXHQiICIucHJldmlvdXMJCQkJXG5cdCIgOiA6IDogImVheCIsImVieCIsImVjeCIs
ImVkeCIsImVzaSIsICJlZGkiLCJtZW1vcnkiKTsgfSB3aGlsZSAoMCk7CgogIFRpbWVyOjphY2tu
b3dsZWRnZSgpOwoKCgoKfQojIDQgImF1dG8vdGhyZWFkLWxvZy5jYyIgMgojIDEgImF1dG8vdGhy
ZWFkX2kuaCIgMQoKCgoKCgojIDEgIi4uL3NyYy9saWIvbWluaWxpYmMvaW5jbHVkZS9jc3RkbGli
IiAxCgoKCgoKIyAxICIuLi9zcmMvbGliL21pbmlsaWJjL2luY2x1ZGUvc3RkbGliLmgiIDEKCgoK
CiMgMSAiL3Vzci9saWIvZ2NjLXNuYXBzaG90L2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4zL2lu
Y2x1ZGUvc3RkZGVmLmgiIDEKIyA2ICIuLi9zcmMvbGliL21pbmlsaWJjL2luY2x1ZGUvc3RkbGli
LmgiIDIKCmV4dGVybiAiQyIgewoKaW50IGF0ZXhpdCh2b2lkICgqZnVuY3Rpb24pKHZvaWQpKTsK
CmRvdWJsZSBzdHJ0b2QoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0cik7CmxvbmcgaW50
IHN0cnRvbChjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSk7CnVuc2ln
bmVkIGxvbmcgaW50IHN0cnRvdWwoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0ciwgaW50
IGJhc2UpOwoKZXh0ZXJuIGludCBfX2x0b3N0cihjaGFyICpzLCB1bnNpZ25lZCBpbnQgc2l6ZSwg
dW5zaWduZWQgbG9uZyBpLCB1bnNpZ25lZCBpbnQgYmFzZSwgaW50IFVwQ2FzZSk7CmV4dGVybiBp
bnQgX19kdG9zdHIoZG91YmxlIGQsY2hhciAqYnVmLHVuc2lnbmVkIGludCBtYXhsZW4sdW5zaWdu
ZWQgaW50IHByZWMpOwoKCl9fZXh0ZW5zaW9uX18gbG9uZyBsb25nIGludCBzdHJ0b2xsKGNvbnN0
IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIsIGludCBiYXNlKTsKX19leHRlbnNpb25fXyB1bnNp
Z25lZCBsb25nIGxvbmcgaW50IHN0cnRvdWxsKGNvbnN0IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRw
dHIsIGludCBiYXNlKTsKX19leHRlbnNpb25fXyBpbnQgX19sbHRvc3RyKGNoYXIgKnMsIHVuc2ln
bmVkIGludCBzaXplLCB1bnNpZ25lZCBsb25nIGxvbmcgaSwgdW5zaWduZWQgaW50IGJhc2UsIGlu
dCBVcENhc2UpOwoKCmludCBhdG9pKGNvbnN0IGNoYXIgKm5wdHIpOwpsb25nIGludCBhdG9sKGNv
bnN0IGNoYXIgKm5wdHIpOwpkb3VibGUgYXRvZihjb25zdCBjaGFyICpucHRyKTsKCgoKCnZvaWQg
ZXhpdChpbnQgc3RhdHVzKSBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpOwp2b2lkIGFib3J0KHZv
aWQpOwoKCgoKdHlwZWRlZiBzdHJ1Y3QgeyBpbnQgcXVvdCxyZW07IH0gZGl2X3Q7CmRpdl90IGRp
dihpbnQgbnVtZXIsIGludCBkZW5vbSkgX19hdHRyaWJ1dGVfXygoY29uc3QpKTsKCnR5cGVkZWYg
c3RydWN0IHsgbG9uZyBpbnQgcXVvdCxyZW07IH0gbGRpdl90OwpsZGl2X3QgbGRpdihsb25nIGlu
dCBudW1lciwgbG9uZyBpbnQgZGVub20pIF9fYXR0cmlidXRlX18oKGNvbnN0KSk7Cgp0eXBlZGVm
IHN0cnVjdCB7IGxvbmcgbG9uZyBpbnQgcXVvdCxyZW07IH0gbGxkaXZfdDsKbGxkaXZfdCBsbGRp
dihsb25nIGxvbmcgaW50IG51bWVyLCBsb25nIGxvbmcgaW50IGRlbm9tKSBfX2F0dHJpYnV0ZV9f
KChjb25zdCkpOwoKaW50IGFicyhpbnQgaSkgX19hdHRyaWJ1dGVfXygoY29uc3QpKTsKbG9uZyBp
bnQgbGFicyhsb25nIGludCBpKSBfX2F0dHJpYnV0ZV9fKChjb25zdCkpOwpfX2V4dGVuc2lvbl9f
IGxvbmcgbG9uZyBpbnQgbGxhYnMobG9uZyBsb25nIGludCBpKSBfX2F0dHJpYnV0ZV9fKChjb25z
dCkpOwoKfQojIDcgIi4uL3NyYy9saWIvbWluaWxpYmMvaW5jbHVkZS9jc3RkbGliIiAyCgoKbmFt
ZXNwYWNlIHN0ZCB7CgoKCiAgdXNpbmcgOjphdGV4aXQ7CiAgdXNpbmcgOjphYnM7CiAgdXNpbmcg
OjpsYWJzOwogIHVzaW5nIDo6ZGl2X3Q7CiAgdXNpbmcgOjpsZGl2X3Q7CiAgdXNpbmcgOjpsbGRp
dl90OwogIHVzaW5nIDo6ZGl2OwogIHVzaW5nIDo6bGRpdjsKICB1c2luZyA6OmxsZGl2OwogIHVz
aW5nIDo6ZXhpdDsKICB1c2luZyA6OmFib3J0OwogIHVzaW5nIDo6YXRvaTsKICB1c2luZyA6OmF0
b2w7CiAgdXNpbmcgOjphdG9mOwogIHVzaW5nIDo6c3RydG91bDsKICB1c2luZyA6OnN0cnRvbDsK
ICB1c2luZyA6OnN0cnRvZDsKCgoKICBpbmxpbmUgbG9uZwogIGFicyhsb25nIGkpIHsgcmV0dXJu
IGxhYnMoaSk7IH0KCiAgaW5saW5lIGxvbmcgbG9uZwogIGFicyhsb25nIGxvbmcgaSkgeyByZXR1
cm4gbGxhYnMoaSk7IH0KCiAgaW5saW5lIGxkaXZfdAogIGRpdiggbG9uZyBpLCBsb25nIGogKSB7
IHJldHVybiBsZGl2KGksaik7IH0KCiAgaW5saW5lIGxsZGl2X3QKICBkaXYoIGxvbmcgbG9uZyBp
LCBsb25nIGxvbmcgaiApIHsgcmV0dXJuIGxsZGl2KGksaik7IH0KCn07CiMgOCAiYXV0by90aHJl
YWRfaS5oIiAyCgoKCiMgMSAiLi4vc3JjL2xpYi9rZXJuL2luY2x1ZGUvZmx1eC94ODYvc2VnLmgi
IDEKIyA0NCAiLi4vc3JjL2xpYi9rZXJuL2luY2x1ZGUvZmx1eC94ODYvc2VnLmgiCnN0cnVjdCB4
ODZfZGVzYyB7CiAgICAgICAgdW5zaWduZWQgaW50IGxpbWl0X2xvdzoxNiwKICAgICAgICAgICAg
ICAgICAgICAgICAgYmFzZV9sb3c6MTYsCiAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VfbWVk
OjgsCiAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzczo4LAogICAgICAgICAgICAgICAgICAg
ICAgICBsaW1pdF9oaWdoOjQsCiAgICAgICAgICAgICAgICAgICAgICAgIGdyYW51bGFyaXR5OjQs
CiAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VfaGlnaDo4Owp9OwoKCgoKc3RydWN0IHg4Nl9n
YXRlIHsKICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0X2xvdzoxNiwKICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZWN0b3I6MTYsCiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmRfY291bnQ6
OCwKICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzOjgsCiAgICAgICAgICAgICAgICAgICAg
ICAgIG9mZnNldF9oaWdoOjE2Owp9OwojIDEyNyAiLi4vc3JjL2xpYi9rZXJuL2luY2x1ZGUvZmx1
eC94ODYvc2VnLmgiCnN0cnVjdCBwc2V1ZG9fZGVzY3JpcHRvcgp7CiAgICAgICAgc2hvcnQgcGFk
OwogICAgICAgIHVuc2lnbmVkIHNob3J0IGxpbWl0OwogICAgICAgIHVuc2lnbmVkIGxvbmcgbGlu
ZWFyX2Jhc2U7Cn07CgoKCmV4dGVybiBfX2lubGluZSB2b2lkCmZpbGxfZGVzY3JpcHRvcihzdHJ1
Y3QgeDg2X2Rlc2MgKmRlc2MsIHVuc2lnbmVkIGJhc2UsIHVuc2lnbmVkIGxpbWl0LAogICAgICAg
ICAgICAgICAgdW5zaWduZWQgY2hhciBhY2Nlc3MsIHVuc2lnbmVkIGNoYXIgc2l6ZWJpdHMpCnsK
ICAgICAgICBpZiAobGltaXQgPiAweGZmZmZmKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGxp
bWl0ID4+PSAxMjsKICAgICAgICAgICAgICAgIHNpemViaXRzIHw9IDB4ODsKICAgICAgICB9CiAg
ICAgICAgZGVzYy0+bGltaXRfbG93ID0gbGltaXQgJiAweGZmZmY7CiAgICAgICAgZGVzYy0+YmFz
ZV9sb3cgPSBiYXNlICYgMHhmZmZmOwogICAgICAgIGRlc2MtPmJhc2VfbWVkID0gKGJhc2UgPj4g
MTYpICYgMHhmZjsKICAgICAgICBkZXNjLT5hY2Nlc3MgPSBhY2Nlc3MgfCAweDgwOwogICAgICAg
IGRlc2MtPmxpbWl0X2hpZ2ggPSBsaW1pdCA+PiAxNjsKICAgICAgICBkZXNjLT5ncmFudWxhcml0
eSA9IHNpemViaXRzOwogICAgICAgIGRlc2MtPmJhc2VfaGlnaCA9IGJhc2UgPj4gMjQ7Cn0KCgpl
eHRlcm4gX19pbmxpbmUgdm9pZApmaWxsX2Rlc2NyaXB0b3JfYmFzZShzdHJ1Y3QgeDg2X2Rlc2Mg
KmRlc2MsIHVuc2lnbmVkIGJhc2UpCnsKICAgICAgICBkZXNjLT5iYXNlX2xvdyA9IGJhc2UgJiAw
eGZmZmY7CiAgICAgICAgZGVzYy0+YmFzZV9tZWQgPSAoYmFzZSA+PiAxNikgJiAweGZmOwogICAg
ICAgIGRlc2MtPmJhc2VfaGlnaCA9IGJhc2UgPj4gMjQ7Cn0KCgpleHRlcm4gX19pbmxpbmUgdm9p
ZApmaWxsX2Rlc2NyaXB0b3JfbGltaXQoc3RydWN0IHg4Nl9kZXNjICpkZXNjLCB1bnNpZ25lZCBs
aW1pdCkKewogICAgICAgIGlmIChsaW1pdCA+IDB4ZmZmZmYpCiAgICAgICAgewogICAgICAgICAg
ICAgICAgbGltaXQgPj49IDEyOwogICAgICAgICAgICAgICAgZGVzYy0+Z3JhbnVsYXJpdHkgfD0g
MHg4OwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBkZXNjLT5ncmFudWxh
cml0eSAmPSB+MHg4OwogICAgICAgIGRlc2MtPmxpbWl0X2xvdyA9IGxpbWl0ICYgMHhmZmZmOwog
ICAgICAgIGRlc2MtPmxpbWl0X2hpZ2ggPSBsaW1pdCA+PiAxNjsKfQoKCmV4dGVybiBfX2lubGlu
ZSB2b2lkCmZpbGxfZ2F0ZShzdHJ1Y3QgeDg2X2dhdGUgKmdhdGUsIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgc2hvcnQgc2VsZWN0b3IsCiAgICAgICAgICB1bnNpZ25lZCBjaGFyIGFjY2Vzcywg
dW5zaWduZWQgY2hhciB3b3JkX2NvdW50KQp7CiAgICAgICAgZ2F0ZS0+b2Zmc2V0X2xvdyA9IG9m
ZnNldCAmIDB4ZmZmZjsKICAgICAgICBnYXRlLT5zZWxlY3RvciA9IHNlbGVjdG9yOwogICAgICAg
IGdhdGUtPndvcmRfY291bnQgPSB3b3JkX2NvdW50OwogICAgICAgIGdhdGUtPmFjY2VzcyA9IGFj
Y2VzcyB8IDB4ODA7CiAgICAgICAgZ2F0ZS0+b2Zmc2V0X2hpZ2ggPSAob2Zmc2V0ID4+IDE2KSAm
IDB4ZmZmZjsKfQojIDEyICJhdXRvL3RocmVhZF9pLmgiIDIKIyAxICIuLi9zcmMvbGliL2tlcm4v
aW5jbHVkZS9mbHV4L3g4Ni9iYXNlX3RyYXAuaCIgMQojIDQzICIuLi9zcmMvbGliL2tlcm4vaW5j
bHVkZS9mbHV4L3g4Ni9iYXNlX3RyYXAuaCIKc3RydWN0IHRyYXBfc3RhdGUKewoKICAgICAgICB1
bnNpZ25lZCBpbnQgZ3M7CiAgICAgICAgdW5zaWduZWQgaW50IGZzOwogICAgICAgIHVuc2lnbmVk
IGludCBlczsKICAgICAgICB1bnNpZ25lZCBpbnQgZHM7CgoKICAgICAgICB1bnNpZ25lZCBpbnQg
ZWRpOwogICAgICAgIHVuc2lnbmVkIGludCBlc2k7CiAgICAgICAgdW5zaWduZWQgaW50IGVicDsK
ICAgICAgICB1bnNpZ25lZCBpbnQgY3IyOwogICAgICAgIHVuc2lnbmVkIGludCBlYng7CiAgICAg
ICAgdW5zaWduZWQgaW50IGVkeDsKICAgICAgICB1bnNpZ25lZCBpbnQgZWN4OwogICAgICAgIHVu
c2lnbmVkIGludCBlYXg7CgoKICAgICAgICB1bnNpZ25lZCBpbnQgdHJhcG5vOwoKCiAgICAgICAg
dW5zaWduZWQgaW50IGVycjsKCgogICAgICAgIHVuc2lnbmVkIGludCBlaXA7CiAgICAgICAgdW5z
aWduZWQgaW50IGNzOwogICAgICAgIHVuc2lnbmVkIGludCBlZmxhZ3M7CiAgICAgICAgdW5zaWdu
ZWQgaW50IGVzcDsKICAgICAgICB1bnNpZ25lZCBpbnQgc3M7CgoKICAgICAgICB1bnNpZ25lZCBp
bnQgdjg2X2VzOwogICAgICAgIHVuc2lnbmVkIGludCB2ODZfZHM7CiAgICAgICAgdW5zaWduZWQg
aW50IHY4Nl9mczsKICAgICAgICB1bnNpZ25lZCBpbnQgdjg2X2dzOwp9OwojIDkwICIuLi9zcmMv
bGliL2tlcm4vaW5jbHVkZS9mbHV4L3g4Ni9iYXNlX3RyYXAuaCIKZXh0ZXJuICJDIiB7CgoKCgoK
CmV4dGVybiB2b2lkIGJhc2VfdHJhcF9pbml0KHZvaWQpOwoKCgoKCgoKZXh0ZXJuIHN0cnVjdCBn
YXRlX2luaXRfZW50cnkgYmFzZV90cmFwX2luaXR0YWJbXTsKIyAxMTcgIi4uL3NyYy9saWIva2Vy
bi9pbmNsdWRlL2ZsdXgveDg2L2Jhc2VfdHJhcC5oIgpleHRlcm4gaW50ICgqYmFzZV90cmFwX2hh
bmRsZXIpKHN0cnVjdCB0cmFwX3N0YXRlICpzdGF0ZSk7CiMgMTI4ICIuLi9zcmMvbGliL2tlcm4v
aW5jbHVkZS9mbHV4L3g4Ni9iYXNlX3RyYXAuaCIKdm9pZCB0cmFwX2R1bXAoY29uc3Qgc3RydWN0
IHRyYXBfc3RhdGUgKnN0KTsKIyAxMzcgIi4uL3NyYy9saWIva2Vybi9pbmNsdWRlL2ZsdXgveDg2
L2Jhc2VfdHJhcC5oIgp2b2lkIHRyYXBfZHVtcF9wYW5pYyhjb25zdCBzdHJ1Y3QgdHJhcF9zdGF0
ZSAqc3QpOwp9CiMgMTMgImF1dG8vdGhyZWFkX2kuaCIgMgoKCgoKIyAxICJhdXRvL3NwYWNlX2lu
ZGV4X3V0aWwuaCIgMQojIDEzICJhdXRvL3NwYWNlX2luZGV4X3V0aWwuaCIKY2xhc3MgU3BhY2Vf
aW5kZXhfdXRpbAp7CgpwdWJsaWM6CiAgc3RhdGljIFNwYWNlX2luZGV4IGNoaWVmKFNwYWNlX2lu
ZGV4IHRhc2spOwp9OwojIDM2ICJhdXRvL3NwYWNlX2luZGV4X3V0aWwuaCIKaW5saW5lIFNwYWNl
X2luZGV4ClNwYWNlX2luZGV4X3V0aWw6OmNoaWVmKFNwYWNlX2luZGV4IHRhc2spCnsKICBMb2Nr
X2d1YXJkPENwdV9sb2NrPiBndWFyZCAoJmNwdV9sb2NrKTsKCiAgU3BhY2UqIHMgPSB0YXNrLmxv
b2t1cCgpOwoKICBpZiAocykKICAgIHJldHVybiBzLT5jaGllZigpOwoKICByZXR1cm4gdGFzay5j
aGllZigpOwp9CiMgMTggImF1dG8vdGhyZWFkX2kuaCIgMgojIDEgImF1dG8vaXJxLmgiIDEKIyAx
MyAiYXV0by9pcnEuaCIKY2xhc3MgUmVjZWl2ZXI7CgoKCgoKY2xhc3MgaXJxX3QgOiBwdWJsaWMg
U2VuZGVyCnsKcHVibGljOgogIHZpcnR1YWwgYm9vbCBhbGxvYyhSZWNlaXZlciAqdCwgYm9vbCBh
Y2tfaW5fa2VybmVsKSA9IDA7CiAgdmlydHVhbCBib29sIGZyZWUoUmVjZWl2ZXIgKnQpID0gMDsK
ICB2aXJ0dWFsIFJlY2VpdmVyICpvd25lcigpIGNvbnN0ID0gMDsKCnByaXZhdGU6CiAgaXJxX3Qo
KTsKICBpcnFfdChpcnFfdCYpOwoKICBjbGFzcyBJcnFfcCB7CiAgcHVibGljOgogICAgSXJxX3Ao
IGlycV90ICpfcCA9IDAgKSA6IHAoX3ApIHt9CiAgICBJcnFfcCAmb3BlcmF0b3IgPSAoaXJxX3Qg
Kl9wKSB7IHAgPSBfcDsgcmV0dXJuICp0aGlzOyB9CiAgICBvcGVyYXRvciBpcnFfdCooKSB7IHJl
dHVybiBwOyB9CiAgcHJpdmF0ZToKICAgIGlycV90ICpwOwogIH07CgogIHN0YXRpYyBpcnFfdCAq
aXJxc1tdOwoKcHVibGljOgoKICBzdGF0aWMgaXJxX3QgKmxvb2t1cCggdW5zaWduZWQgaXJxICk7
CiAgc3RhdGljIHZvaWQgcmVnaXN0ZXJfaXJxKCB1bnNpZ25lZCBpcnEsIGlycV90ICppICk7Cgpw
cm90ZWN0ZWQ6CiAgUmVjZWl2ZXIgKl9pcnFfdGhyZWFkOwogIGludCBfcXVldWVkOwogIGJvb2wg
X2Fja19pbl9rZXJuZWw7CgpwdWJsaWM6CiAgc3RhdGljIHZvaWQgaW5pdCgpOwoKCgoKICBleHBs
aWNpdCBpcnFfdCh1bnNpZ25lZCBpcnFudW0pOwoKICB2aXJ0dWFsIHZvaWQgaXBjX3JlY2VpdmVy
X3JlYWR5KCk7CgoKCgoKICB2b2lkIG1heWJlX2Fja25vd2xlZGdlKCk7CgoKICB2b2lkIG1heWJl
X2VuYWJsZSgpOwoKcHJpdmF0ZToKCgoKICBpbnQgY29uc3VtZSgpOwp9OwoKZXh0ZXJuIHVuc2ln
bmVkIHBpY19tYXNrX21hc3RlcjsKZXh0ZXJuIHVuc2lnbmVkIHBpY19tYXNrX3NsYXZlOwoKZXh0
ZXJuICJDIiB2b2lkIGZhc3RfcmV0X2Zyb21faXJxKHZvaWQpOwoKdm9pZCBzZXRfdGltZXJfdmVj
dG9yX3J1bih2b2lkKTsKCnZvaWQgc2V0X3RpbWVyX3ZlY3Rvcl9zdG9wKHZvaWQpOwojIDEwOCAi
YXV0by9pcnEuaCIKaW5saW5lIHZvaWQgaXJxX3Q6Om1heWJlX2Fja25vd2xlZGdlKCkKewogIGlm
IChfYWNrX2luX2tlcm5lbCkKICAgIHsKICAgICAgdW5zaWduZWQgaXJxbnVtID0gaWQoKS5pcnEo
KTsKCiAgICAgIFBpYzo6ZGlzYWJsZV9sb2NrZWQoaXJxbnVtKTsKICAgICAgUGljOjphY2tub3ds
ZWRnZV9sb2NrZWQoaXJxbnVtKTsKICAgIH0KfQoKCgoKaW5saW5lIHZvaWQgaXJxX3Q6Om1heWJl
X2VuYWJsZSgpCnsKICBpZiAoX2Fja19pbl9rZXJuZWwpCiAgICB7CiAgICAgIHVuc2lnbmVkIGly
cW51bSA9IGlkKCkuaXJxKCk7CiAgICAgIFBpYzo6ZW5hYmxlKGlycW51bSk7CiAgICB9Cn0KCgoK
aW5saW5lIGlycV90ICppcnFfdDo6bG9va3VwKCB1bnNpZ25lZCBpcnEgKQp7CiAgaWYoaXJxIDwg
Q29uZmlnOjpNQVhfTlVNX0lSUSkKICAgIHJldHVybiBpcnFzW2lycV07CiAgZWxzZQogICAgcmV0
dXJuIDA7Cn0KCgoKaW5saW5lIHZvaWQgaXJxX3Q6OnJlZ2lzdGVyX2lycSggdW5zaWduZWQgaXJx
LCBpcnFfdCAqaSApCnsKICBpZihpcnEgPCBDb25maWc6Ok1BWF9OVU1fSVJRKSB7CiAgICBpcnFz
W2lycV0gPSBpOwogIH0KfQojIDE5ICJhdXRvL3RocmVhZF9pLmgiIDIKCgoKCiMgMSAiYXV0by9r
bWVtX2FsbG9jLmgiIDEKIyAxOSAiYXV0by9rbWVtX2FsbG9jLmgiCmNsYXNzIGttZW1fYWxsb2Mg
OiBrbWVtCnsKCnByaXZhdGU6CiAgZnJpZW5kIGNsYXNzIGpkYjsKCnB1YmxpYzoKCiAgZW51bSB6
ZXJvX2ZpbGxfdCB7IG5vX3plcm9fZmlsbCA9IDAsIHplcm9fZmlsbCwgemVyb19tYXAgfTsKCiAg
c3RhdGljIHZvaWQgKiBwYWdlX2FsbG9jICh2b2lkKTsKICBzdGF0aWMgdm9pZCAqIHBhZ2VfYWxs
b2MgKHZtX29mZnNldF90IHZhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZXJv
X2ZpbGxfdCBkb196ZXJvX2ZpbGwgPSBub196ZXJvX2ZpbGwsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgdXNlcl9hY2Nlc3NpYmxlID0gZmFsc2UpOwogIHN0YXRpYyB2b2lk
IHBhZ2VfZnJlZSAodm9pZCAqcGFnZSk7CgpwdWJsaWM6CgoKCgogIHN0YXRpYyB2b2lkICphbGxv
Yyh2bV9zaXplX3Qgc2l6ZSk7CgoKCgoKCiAgc3RhdGljIHZvaWQgZnJlZSh2b2lkICpibG9jaywg
dm1fc2l6ZV90IHNpemUpOwoKICBzdGF0aWMgdm9pZCBkZWJ1Z19kdW1wKCk7Cgpwcml2YXRlOgoK
ICBzdGF0aWMgdm9pZCBwYWdlX2ZyZWVfcGh5cyh2b2lkICpwYWdlKTsKfTsKCgoKCgoKCiMgMSAi
YXV0by9rZGJfa2UuaCIgMQojIDIyICJhdXRvL2tkYl9rZS5oIgpib29sIGtkYl9rZShjb25zdCBj
aGFyICptc2cpOwojIDM4ICJhdXRvL2tkYl9rZS5oIgppbmxpbmUgYm9vbCBrZGJfa2UoY29uc3Qg
Y2hhciAqbXNnKQp7CiAgcHJpbnRmKCJLREI6ICVzXG4iLG1zZyk7CgogIGFzbSAoImludDMgICAg
ICAgICAgICBcblx0IgogICAgICAgImptcCAxZgkJXG5cdCIKICAgICAgICIuYXNjaWkgXCJLREJc
Iglcblx0IgogICAgICAgIjE6CQlcblx0Iik7CgogIHJldHVybiB0cnVlOwp9CiMgNjMgImF1dG8v
a21lbV9hbGxvYy5oIiAyCiMgMSAiYXV0by9wbWVtX2FsbG9jLmgiIDEKIyAxMyAiYXV0by9wbWVt
X2FsbG9jLmgiCmNsYXNzIFBtZW1fYWxsb2MKewpwdWJsaWM6CgogIHN0YXRpYyB2b2lkIGluaXQo
KTsKIyAzMSAiYXV0by9wbWVtX2FsbG9jLmgiCiAgc3RhdGljIFBfcHRyPHZvaWQ+IHBhZ2VfYWxs
b2MoIGludCBvcmRlciA9IDAgKTsKIyA0MiAiYXV0by9wbWVtX2FsbG9jLmgiCiAgc3RhdGljIHZv
aWQgcGFnZV9mcmVlKCBQX3B0cjx2b2lkPiBwYWdlLCBpbnQgb3JkZXIgPSAwICk7CiMgNTMgImF1
dG8vcG1lbV9hbGxvYy5oIgogIHN0YXRpYyBQX3B0cjx2b2lkPiB1bmFsaWduZWRfcGFnZV9hbGxv
YyggaW50IHBhZ2VzID0gMSApOwojIDY0ICJhdXRvL3BtZW1fYWxsb2MuaCIKICBzdGF0aWMgdm9p
ZCB1bmFsaWduZWRfcGFnZV9mcmVlKCBQX3B0cjx2b2lkPiBwYWdlLCBpbnQgcGFnZXMgPSAxICk7
CgoKcHVibGljOgogIHN0YXRpYyB2b2lkIGRlYnVnX2R1bXAoKTsKfTsKIyA4MyAiYXV0by9wbWVt
X2FsbG9jLmgiCmlubGluZSB2b2lkIFBtZW1fYWxsb2M6OnBhZ2VfZnJlZSggUF9wdHI8dm9pZD4g
cGFnZSwgaW50IG9yZGVyICkKewogIHVuYWxpZ25lZF9wYWdlX2ZyZWUocGFnZSwxPDxvcmRlcik7
Cn0KIyA2NCAiYXV0by9rbWVtX2FsbG9jLmgiIDIKCiMgMSAiYXV0by92bWVtX2FsbG9jLmgiIDEK
CgoKCgojIDEgImF1dG8vcGFnaW5nLmgiIDEKIyAxMyAiYXV0by9wYWdpbmcuaCIKbmFtZXNwYWNl
IFBhZ2UgewojIDM0ICJhdXRvL3BhZ2luZy5oIgp9OwoKbmFtZXNwYWNlIFBhZ2UgewoKICB0eXBl
ZGVmIFVuc2lnbmVkMzIgQXR0cmliczsKCiAgZW51bSBBdHRyaWJzX2VudW0gewoKICAgIFVTRVJf
Tk8gPSAweDA2LAogICAgVVNFUl9STyA9IDB4MDAsCiAgICBVU0VSX1JXID0gMHgwMiwKICAgIFVT
RVJfUlggPSAweDAwLAogICAgVVNFUl9YTyA9IDB4MDAsCiAgICBVU0VSX1JXWCA9IDB4MDIsCgog
ICAgUk8gPSAweDAwLAogICAgS0VSTiA9IDB4MDQsCiAgICBVU0VSID0gMHgwMCwKCiAgICBDUFVf
R0xPQkFMID0gMHgxMDAsCgogICAgTk9OQ0FDSEVBQkxFID0gMHgxMCwKICAgIENBQ0hFQUJMRSA9
IDB4MDAsCgogICAgV1JJVEVfVEhST1VHSCA9IDB4MDgsCgogICAgTUFYX0FUVFJJQlMgPSAweDEx
ZQogIH07Cgp9OwojIDcgImF1dG8vdm1lbV9hbGxvYy5oIiAyCiMgMTUgImF1dG8vdm1lbV9hbGxv
Yy5oIgpjbGFzcyBWbWVtX2FsbG9jCnsKcHVibGljOgoKICBlbnVtIFplcm9fZmlsbCB7CiAgICBO
T19aRVJPX0ZJTEwgPSAwLAogICAgWkVST19GSUxMLAogICAgWkVST19NQVAKICB9OwoKICBzdGF0
aWMgdm9pZCBpbml0KCk7CgogIHN0YXRpYyB2b2lkICpwYWdlX2FsbG9jKCB2b2lkICphZGRyZXNz
LCBpbnQgb3JkZXIgPSAwLCBaZXJvX2ZpbGwgemYgPSBOT19aRVJPX0ZJTEwsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBhZ2U6OkF0dHJpYnMgcGEgPSBQYWdlOjpVU0VSX05PICk7CgogIHN0
YXRpYyB2b2lkIHBhZ2VfZnJlZSggdm9pZCAqcGFnZSwgaW50IG9yZGVyID0gMCApOwoKICBzdGF0
aWMgdm9pZCBwYWdlX21hcCAodm9pZCAqYWRkcmVzcywgaW50IG9yZGVyLCBaZXJvX2ZpbGwgemYs
CiAgICAgICAgICAgICAgICAgICAgICAgIHZtX29mZnNldF90IHBoeXMpOwoKICBzdGF0aWMgdm9p
ZCBwYWdlX3VubWFwICh2b2lkICphZGRyZXNzLCBpbnQgb3JkZXIpOwpwcml2YXRlOgoKcHJpdmF0
ZToKICB0ZW1wbGF0ZTwgdHlwZW5hbWUgX1R5ID4KICBzdGF0aWMgX1R5ICpwaHlzX3RvX3ZpcnQo
IFBfcHRyPF9UeT4gKTsKCiAgdGVtcGxhdGU8IHR5cGVuYW1lIF9UeSA+CiAgc3RhdGljIFBfcHRy
PF9UeT4gbGluZWFyX3ZpcnRfdG9fcGh5cyggX1R5KiApOwoKICBzdGF0aWMgUF9wdHI8dm9pZD4g
emVyb19wYWdlOwp9OwojIDYwICJhdXRvL3ZtZW1fYWxsb2MuaCIKIyAxICIuLi9zcmMva2Vybi9z
dGF0aWNfaW5pdC5oIiAxCiMgNjEgImF1dG8vdm1lbV9hbGxvYy5oIiAyCiMgNzQgImF1dG8vdm1l
bV9hbGxvYy5oIgp0ZW1wbGF0ZTwgdHlwZW5hbWUgX1R5ID4gaW5saW5lIF9UeSAqVm1lbV9hbGxv
Yzo6cGh5c190b192aXJ0KCBQX3B0cjxfVHk+IHAgKQp7CiAgcmV0dXJuIChfVHkqKShwLmdldF91
bnNpZ25lZCgpICsga21lbTo6bWVtX3BoeXMpOwp9CgoKCmlubGluZSB2b2lkIFZtZW1fYWxsb2M6
OnBhZ2VfZnJlZSggdm9pZCAqcGFnZSwgaW50IG9yZGVyICkKewoKCgoKICB2bV9vZmZzZXRfdCBw
aHlzID0ga21lbTo6dmlydF90b19waHlzKHBhZ2UpOwoKICBpZiAocGh5cyA9PSAweGZmZmZmZmZm
KQogICAgcmV0dXJuOwoKCiAgaWYgKHBoeXMgIT0gemVyb19wYWdlLmdldF91bnNpZ25lZCgpKQog
ICAgUG1lbV9hbGxvYzo6cGFnZV9mcmVlKFBfcHRyPHZvaWQ+KCh2b2lkKilwaHlzKSk7CgogIHZt
X29mZnNldF90IHZhID0gcmVpbnRlcnByZXRfY2FzdDx2bV9vZmZzZXRfdD4ocGFnZSk7CgogIGlm
ICh2YSA8IGttZW06Om1lbV9waHlzKQogICAgewoKICAgICAgKHBoeXNfdG9fdmlydChQX3B0cjxw
ZF9lbnRyeV90PigocGRfZW50cnlfdCopKAogICAgICAgICBrbWVtOjprZGlyWyh2YSA+PiAyMikg
JiAweDNmZl0KICAgICAgICAgJiBDb25maWc6OlBBR0VfTUFTSykpKSlbKHZhID4+IDEyKSAmIDB4
M2ZmXSA9IDA7CgogICAgICBwYWdlX3VubWFwIChwYWdlLCBvcmRlcik7CgogICAgICBrbWVtOjp0
bGJfZmx1c2godmEpOwogICAgfQp9CgoKCmlubGluZSB2b2lkClZtZW1fYWxsb2M6OnBhZ2VfbWFw
KHZvaWQgKmFkZHJlc3MsIGludCBvcmRlciwgWmVyb19maWxsIHpmLCB2bV9vZmZzZXRfdCBwaHlz
KQp7fQoKCgppbmxpbmUgdm9pZApWbWVtX2FsbG9jOjpwYWdlX3VubWFwKHZvaWQgKmFkZHJlc3Ms
IGludCBvcmRlcikKe30KIyAxMzAgImF1dG8vdm1lbV9hbGxvYy5oIgogdGVtcGxhdGU8IHR5cGVu
YW1lIF9UeSA+CmlubGluZQpQX3B0cjxfVHk+IFZtZW1fYWxsb2M6OmxpbmVhcl92aXJ0X3RvX3Bo
eXMoIF9UeSAqdiApCnsKICByZXR1cm4gUF9wdHI8X1R5PigoKCh2bV9vZmZzZXRfdCl2KSAtIGtt
ZW06Om1lbV9waHlzKSk7Cn0KIyA2NiAiYXV0by9rbWVtX2FsbG9jLmgiIDIKIyA3OCAiYXV0by9r
bWVtX2FsbG9jLmgiCmlubGluZSB2b2lkICprbWVtX2FsbG9jOjphbGxvYyh2bV9zaXplX3Qgc2l6
ZSkKewojIDg5ICJhdXRvL2ttZW1fYWxsb2MuaCIKICBQX3B0cjx2b2lkPiBiID0gUG1lbV9hbGxv
Yzo6dW5hbGlnbmVkX3BhZ2VfYWxsb2MoIChzaXplICsgKENvbmZpZzo6UEFHRV9TSVpFLTEpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL0NvbmZp
Zzo6UEFHRV9TSVpFICk7CiAgaWYoIWIuaXNfbnVsbCgpKQogICAgcmV0dXJuIGttZW06OnBoeXNf
dG9fdmlydCgodm1fb2Zmc2V0X3QpYi5nZXRfcmF3KCkpOwogIGVsc2UKICAgIGtkYl9rZSgib3V0
IG9mIG1lbW9yeSEiKTsKICByZXR1cm4gMDsKfQojIDExMCAiYXV0by9rbWVtX2FsbG9jLmgiCmlu
bGluZSB2b2lkICoKa21lbV9hbGxvYzo6cGFnZV9hbGxvYyh2bV9vZmZzZXRfdCB2YSwgemVyb19m
aWxsX3QgZG9femVyb19maWxsLAogICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXNlcl9hY2Nl
c3NpYmxlKQp7CiAgcmV0dXJuIFZtZW1fYWxsb2M6OnBhZ2VfYWxsb2MoKHZvaWQqKXZhLCAwLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvX3plcm9fZmlsbCA9PSBub196ZXJvX2Zp
bGwgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZtZW1fYWxsb2M6Ok5PX1pFUk9f
RklMTCA6ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZG9femVyb19maWxsID09IHplcm9fZmlsbCA/CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZtZW1fYWxsb2M6OlpF
Uk9fRklMTCA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFZtZW1fYWxsb2M6OlpFUk9fTUFQCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdXNlcl9hY2Nlc3NpYmxlID8KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQYWdlOjpVU0VSX1JXWCA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UGFnZTo6VVNFUl9OTyApOwp9CiMgMTM3ICJhdXRvL2ttZW1fYWxsb2MuaCIKaW5saW5lIHZvaWQg
a21lbV9hbGxvYzo6cGFnZV9mcmVlKHZvaWQgKnBhZ2UpCnsKICBWbWVtX2FsbG9jOjpwYWdlX2Zy
ZWUocGFnZSwwKTsKfQoKCgoKCgppbmxpbmUgdm9pZCAqCmttZW1fYWxsb2M6OnBhZ2VfYWxsb2Mo
KQp7CiAgUF9wdHI8dm9pZD4gYiA9IFBtZW1fYWxsb2M6OnBhZ2VfYWxsb2MoKTsKICBpZighYi5p
c19udWxsKCkpCiAgICByZXR1cm4ga21lbTo6cGh5c190b192aXJ0KCh2bV9vZmZzZXRfdCliLmdl
dF9yYXcoKSk7CiAgZWxzZQogICAga2RiX2tlKCJvdXQgb2YgbWVtb3J5ISIpOwogIHJldHVybiAw
Owp9CiMgMjQgImF1dG8vdGhyZWFkX2kuaCIgMgoKIyAxICJhdXRvL21hcF91dGlsLmgiIDEKCgoK
CgoKIyAxICJhdXRvL21hcGRiLmgiIDEKIyAxMyAiYXV0by9tYXBkYi5oIgpzdHJ1Y3QgbWFwcGlu
Z190cmVlX3Q7CmNsYXNzIG1hcGRiX3RyZWVfdDsKY2xhc3MgcGh5c2ZyYW1lX3Q7CgoKCmVudW0g
bWFwcGluZ190eXBlX3QgeyBNYXBfbWVtID0gMCwgTWFwX2lvIH07CgpzdHJ1Y3QgTWFwcGluZ19l
bnRyeQp7CiAgdW5zaWduZWQgc3BhY2U6MTE7CiAgdW5zaWduZWQgc2l6ZToxOwogIHVuc2lnbmVk
IGFkZHJlc3M6MjA7CiAgdW5zaWduZWQgZGVwdGg6ODsKfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQp
KTsKIyA0MSAiYXV0by9tYXBkYi5oIgpjbGFzcyBtYXBwaW5nX3QKewogIGZyaWVuZCBjbGFzcyBt
YXBkYl90OwogIGZyaWVuZCBjbGFzcyBtYXBwaW5nX3RyZWVfdDsKICBmcmllbmQgY2xhc3MgamRi
OwogIGZyaWVuZCBzdHJ1Y3QgcGh5c2ZyYW1lX3Q7CgoKICBtYXBwaW5nX3QoY29uc3QgbWFwcGlu
Z190Jik7CgoKICBNYXBwaW5nX2VudHJ5IF9kYXRhOwoKcHVibGljOgoKCgogIHVuc2lnbmVkIHNw
YWNlKCk7CgoKCgogIHZtX29mZnNldF90IHZhZGRyKCk7CgoKCgogIHZtX3NpemVfdCBzaXplKCk7
CgoKCgoKICBtYXBwaW5nX3R5cGVfdCB0eXBlKCk7CgoKCgogIG1hcHBpbmdfdCAqIHBhcmVudCgp
OwoKCgoKCgoKICBtYXBwaW5nX3QgKiBuZXh0X2l0ZXIoKTsKIyA5NiAiYXV0by9tYXBkYi5oIgog
IG1hcHBpbmdfdCAqIG5leHRfY2hpbGQobWFwcGluZ190ICpwYXJlbnQpOwoKcHJpdmF0ZToKICBt
YXBwaW5nX3QoKTsKCiAgTWFwcGluZ19lbnRyeSAqIGRhdGEoKTsKCgoKCiAgYm9vbCB1bnVzZWQo
KTsKCiAgYm9vbCBpc19lbmRfdGFnKCk7CgogIG1hcHBpbmdfdCogbmV4dChjb25zdCBtYXBwaW5n
X3QqIGVuZF9vZl90cmVlKTsKIyAxMTkgImF1dG8vbWFwZGIuaCIKICBtYXBwaW5nX3RyZWVfdCAq
IHRyZWUoKTsKfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKCgoKY2xhc3MgbWFwZGJfdAp7CiAg
ZnJpZW5kIGNsYXNzIGpkYjsKCgoKCgogIHBoeXNmcmFtZV90KiBwaHlzZnJhbWU7CgoKcHVibGlj
OgoKCgoKCgoKICBtYXBkYl90KHZtX29mZnNldF90IGVuZF9vZl9tYWluX21lbW9yeSk7CgoKICB+
bWFwZGJfdCgpOwojIDE2NSAiYXV0by9tYXBkYi5oIgogIHN0YXRpYyBtYXBwaW5nX3QgKiBpbnNl
cnQobWFwcGluZ190ICpwYXJlbnQsIHVuc2lnbmVkIHNwYWNlLCB2bV9vZmZzZXRfdCB2YSwgdm1f
c2l6ZV90IHNpemUsIG1hcHBpbmdfdHlwZV90IHR5cGUpOwojIDE3OSAiYXV0by9tYXBkYi5oIgog
IG1hcHBpbmdfdCAqIGxvb2t1cCh1bnNpZ25lZCBzcGFjZSwgdm1fb2Zmc2V0X3QgdmEsIHZtX29m
ZnNldF90IHBoeXMpOwojIDE5MyAiYXV0by9tYXBkYi5oIgogIHZvaWQgZnJlZShtYXBwaW5nX3Qq
IG1hcHBpbmdfb2ZfdHJlZSk7CgoKCgoKCgogIHN0YXRpYyB2b2lkIGZsdXNoKG1hcHBpbmdfdCAq
bSwgYm9vbCBtZV90b28pOwoKCgoKCgoKICB2b2lkIGdyYW50KG1hcHBpbmdfdCAqbSwgdW5zaWdu
ZWQgbmV3X3NwYWNlLCB2bV9vZmZzZXRfdCB2YSk7Cn07CiMgMjI2ICJhdXRvL21hcGRiLmgiCmlu
bGluZSBNYXBwaW5nX2VudHJ5ICoKbWFwcGluZ190OjpkYXRhKCkKewogIHJldHVybiAmX2RhdGE7
Cn0KCgoKCgoKaW5saW5lIHVuc2lnbmVkCm1hcHBpbmdfdDo6c3BhY2UoKQp7CiAgcmV0dXJuIGRh
dGEoKS0+c3BhY2U7Cn0KCgoKCgoKCmlubGluZSB2bV9vZmZzZXRfdAptYXBwaW5nX3Q6OnZhZGRy
KCkKewogIHJldHVybiAoZGF0YSgpLT5hZGRyZXNzIDw8IENvbmZpZzo6UEFHRV9TSElGVCk7Cn0K
CgoKCgoKaW5saW5lIHZtX3NpemVfdAptYXBwaW5nX3Q6OnNpemUoKQp7CiAgaWYgKCBkYXRhKCkt
PnNpemUgKQogICAgcmV0dXJuIENvbmZpZzo6U1VQRVJQQUdFX1NJWkU7CiAgZWxzZQogICAgcmV0
dXJuIENvbmZpZzo6UEFHRV9TSVpFOwp9CgoKCgoKCgppbmxpbmUgbWFwcGluZ190eXBlX3QKbWFw
cGluZ190Ojp0eXBlKCkKewoKICByZXR1cm4gTWFwX21lbTsKfQojIDggImF1dG8vbWFwX3V0aWwu
aCIgMgoKCgoKCgpjbGFzcyBTcGFjZTsKCmV4dGVybiBtYXBkYl90JiB0aGVfbWFwZGI7CiMgMzEg
ImF1dG8vbWFwX3V0aWwuaCIKdW5zaWduZWQgZnBhZ2VfbWFwKFNwYWNlICpmcm9tLCBMNF9mcGFn
ZSBmcF9mcm9tLCBTcGFjZSAqdG8sIEw0X2ZwYWdlIGZwX3RvLCB2bV9vZmZzZXRfdCBvZmZzKTsK
IyA0NSAiYXV0by9tYXBfdXRpbC5oIgp2b2lkIGZwYWdlX3VubWFwKFNwYWNlICpzcGFjZSwgTDRf
ZnBhZ2UgZnAsIGJvb2wgbWVfdG9vLCBib29sIG9ubHlfcmVhZF9vbmx5KTsKIyA2MCAiYXV0by9t
YXBfdXRpbC5oIgp1bnNpZ25lZCBtZW1fZnBhZ2VfbWFwKFNwYWNlICpmcm9tLCBMNF9mcGFnZSBm
cF9mcm9tLCBTcGFjZSAqdG8sIEw0X2ZwYWdlIGZwX3RvLCB2bV9vZmZzZXRfdCBvZmZzKTsKIyA3
NCAiYXV0by9tYXBfdXRpbC5oIgp2b2lkIG1lbV9mcGFnZV91bm1hcChTcGFjZSAqc3BhY2UsIEw0
X2ZwYWdlIGZwLCBib29sIG1lX3RvbywgYm9vbCBvbmx5X3JlYWRfb25seSk7CiMgODggImF1dG8v
bWFwX3V0aWwuaCIKdW5zaWduZWQgaW9fZnBhZ2VfbWFwKFNwYWNlICpmcm9tLCBMNF9mcGFnZSBm
cF9mcm9tLCBTcGFjZSAqdG8sIEw0X2ZwYWdlIGZwX3RvKTsKIyAxMDIgImF1dG8vbWFwX3V0aWwu
aCIKdm9pZCBpb19mcGFnZV91bm1hcChTcGFjZSAqc3BhY2UsIEw0X2ZwYWdlIGZwLCBib29sICk7
CiMgMTMxICJhdXRvL21hcF91dGlsLmgiCmlubGluZSB1bnNpZ25lZApmcGFnZV9tYXAoU3BhY2Ug
KmZyb20sIEw0X2ZwYWdlIGZwX2Zyb20sIFNwYWNlICp0bywKICAgICAgICAgIEw0X2ZwYWdlIGZw
X3RvLCB2bV9vZmZzZXRfdCBvZmZzKQp7CiAgdW5zaWduZWQgcmVzdWx0ID0gMDsKCiAgaWYoQ29u
ZmlnOjplbmFibGVfaW9fcHJvdGVjdGlvbiAmJgogICAgIChmcF9mcm9tLmlzX2lvcGFnZSgpCiAg
ICAgIHx8IGZwX2Zyb20uaXNfd2hvbGVfc3BhY2UoKSkpCiAgICB7CiAgICAgIHJlc3VsdCB8PSBp
b19mcGFnZV9tYXAoZnJvbSwgZnBfZnJvbSwgdG8sIGZwX3RvKTsKICAgIH0KCiAgaWYoIUNvbmZp
Zzo6ZW5hYmxlX2lvX3Byb3RlY3Rpb24gfHwgIWZwX2Zyb20uaXNfaW9wYWdlKCkpCiAgICB7CiAg
ICAgIHJlc3VsdCB8PSBtZW1fZnBhZ2VfbWFwKGZyb20sIGZwX2Zyb20sIHRvLCBmcF90bywgb2Zm
cyk7CiAgICB9CiAgcmV0dXJuIHJlc3VsdDsKfQojIDE2NiAiYXV0by9tYXBfdXRpbC5oIgppbmxp
bmUgdm9pZApmcGFnZV91bm1hcChTcGFjZSAqc3BhY2UsIEw0X2ZwYWdlIGZwLCBib29sIG1lX3Rv
bywgYm9vbCBvbmx5X3JlYWRfb25seSkKewogIGlmKENvbmZpZzo6ZW5hYmxlX2lvX3Byb3RlY3Rp
b24gJiYKICAgICAoZnAuaXNfaW9wYWdlKCkKICAgICAgfHwgZnAuaXNfd2hvbGVfc3BhY2UoKSkp
CiAgICB7CiAgICAgIGlvX2ZwYWdlX3VubWFwKHNwYWNlLCBmcCwgbWVfdG9vKTsKICAgIH0KCiAg
aWYoIUNvbmZpZzo6ZW5hYmxlX2lvX3Byb3RlY3Rpb24gfHwgIWZwLmlzX2lvcGFnZSgpKQogICAg
ewogICAgICBtZW1fZnBhZ2VfdW5tYXAoc3BhY2UsIGZwLCBtZV90b28sIG9ubHlfcmVhZF9vbmx5
KTsKICAgIH0KfQojIDI2ICJhdXRvL3RocmVhZF9pLmgiIDIKCgoKIyAxICJhdXRvL2w0X3N5c2Nh
bGxzLmgiIDEKIyAzMCAiYXV0by90aHJlYWRfaS5oIiAyCiMgNTQgImF1dG8vdGhyZWFkX2kuaCIK
IyAxICIuLi9zcmMva2Vybi91bmRlZl9vc2tpdC5oIiAxCiMgNTUgImF1dG8vdGhyZWFkX2kuaCIg
MgoKIyAxICJhdXRvL2RpcnEuaCIgMQojIDEzICJhdXRvL2RpcnEuaCIKY2xhc3MgZGlycV90IDog
cHVibGljIGlycV90CnsKcHVibGljOgoKICBzdGF0aWMgdm9pZCBpbml0KCk7CiAgUmVjZWl2ZXIg
Km93bmVyKCkgY29uc3Q7CiAgdm9pZCAqb3BlcmF0b3IgbmV3ICggc2l6ZV90ICk7Cgpwcml2YXRl
OgogIGRpcnFfdCgpOwogIGRpcnFfdChkaXJxX3QmKTsKCnB1YmxpYzoKICBleHBsaWNpdCBkaXJx
X3QodW5zaWduZWQgaXJxbnVtKTsKCgoKCgoKCiAgYm9vbCBhbGxvYyhSZWNlaXZlciAqdCwgYm9v
bCBhY2tfaW5fa2VybmVsKTsKCgoKCgoKICBib29sIGZyZWUoUmVjZWl2ZXIgKnQpOwoKCgoKCgog
IHZvaWQgaGl0KCk7Cn07CgoKCgoKZXh0ZXJuICJDIiB2b2lkIGlycV9pbnRlcnJ1cHQodW5zaWdu
ZWQgaXJxbnVtKTsKIyA3OSAiYXV0by9kaXJxLmgiCmlubGluZSBib29sIGRpcnFfdDo6YWxsb2Mo
UmVjZWl2ZXIgKnQsIGJvb2wgYWNrX2luX2tlcm5lbCkKewogIGJvb2wgcmV0ID0gc21wX2Nhcygm
X2lycV90aHJlYWQsIHN0YXRpY19jYXN0PFJlY2VpdmVyKj4oMCksIHQpOwoKICBpZiAocmV0KQog
ICAgewogICAgICBpbnQgaXJxID0gaWQoKS5pcnEoKTsKCiAgICAgIF9hY2tfaW5fa2VybmVsID0g
YWNrX2luX2tlcm5lbDsKICAgICAgX3F1ZXVlZCA9IDA7CgogICAgICBpZiAoX2Fja19pbl9rZXJu
ZWwpCiAgICAgICAgUGljOjplbmFibGUoaXJxKTsKICAgICAgZWxzZQogICAgICAgIFBpYzo6ZGlz
YWJsZShpcnEpOwogICAgfQoKICByZXR1cm4gcmV0Owp9CiMgMTA2ICJhdXRvL2RpcnEuaCIKaW5s
aW5lIGJvb2wgZGlycV90OjpmcmVlKFJlY2VpdmVyICp0KQp7CiAgYm9vbCByZXQgPSBzbXBfY2Fz
KCZfaXJxX3RocmVhZCwgdCwgc3RhdGljX2Nhc3Q8UmVjZWl2ZXIqPigwKSk7CgogIGlmIChyZXQp
CiAgICB7CiAgICAgIFBpYzo6ZGlzYWJsZShpZCgpLmlycSgpKTsKICAgICAgc2VuZGVyX2RlcXVl
dWUodC0+c2VuZGVyX2xpc3QoKSk7CiAgICB9CgogIHJldHVybiByZXQ7Cn0KIyA1NyAiYXV0by90
aHJlYWRfaS5oIiAyCiMgOTIgImF1dG8vdGhyZWFkX2kuaCIKIyAxICIuLi9zcmMva2Vybi91bmRl
Zl9vc2tpdC5oIiAxCiMgOTMgImF1dG8vdGhyZWFkX2kuaCIgMgoKCgojIDEgImdsb2JhbGNvbmZp
Zy5oIiAxCiMgOTcgImF1dG8vdGhyZWFkX2kuaCIgMgoKCgoKIyAxICJhdXRvL2tlcm5lbF9jb25z
b2xlLmgiIDEKCgoKCgojIDEgImF1dG8vbXV4X2NvbnNvbGUuaCIgMQoKCgoKCgojIDEgImF1dG8v
Y29uc29sZS5oIiAxCgoKCgoKIyAxICIvdXNyL2xpYi9nY2Mtc25hcHNob3QvbGliL2djYy1saWIv
aTM4Ni1saW51eC8zLjMvaW5jbHVkZS9zdGRkZWYuaCIgMQojIDcgImF1dG8vY29uc29sZS5oIiAy
CiMgMTggImF1dG8vY29uc29sZS5oIgpjbGFzcyBDb25zb2xlCnsKcHVibGljOgojIDI5ICJhdXRv
L2NvbnNvbGUuaCIKICB2aXJ0dWFsIGludCB3cml0ZSggY2hhciBjb25zdCAqc3RyLCBzaXplX3Qg
bGVuICkgPSAwOwojIDM4ICJhdXRvL2NvbnNvbGUuaCIKICB2aXJ0dWFsIGludCBnZXRjaGFyKCBi
b29sIGJsb2NraW5nID0gdHJ1ZSApID0gMDsKIyA0OCAiYXV0by9jb25zb2xlLmgiCiAgdmlydHVh
bCBpbnQgY2hhcl9hdmFpbCgpIGNvbnN0OwoKICB2aXJ0dWFsIH5Db25zb2xlKCk7CgpwdWJsaWM6
CgoKCgogIHN0YXRpYyB2b2lkIGRpc2FibGVfYWxsKCk7CgoKICBzdGF0aWMgQ29uc29sZSAqc3Rk
b3V0OwoKICBzdGF0aWMgQ29uc29sZSAqc3RkZXJyOwoKICBzdGF0aWMgQ29uc29sZSAqc3RkaW47
Cn07CiMgOCAiYXV0by9tdXhfY29uc29sZS5oIiAyCiMgMTkgImF1dG8vbXV4X2NvbnNvbGUuaCIK
Y2xhc3MgTXV4X2NvbnNvbGUKICA6IHB1YmxpYyBDb25zb2xlCnsKcHVibGljOgoKICBlbnVtIHsK
ICAgIFNJWkUgPSA4CiAgfTsKCiAgTXV4X2NvbnNvbGUoKTsKCiAgaW50IHdyaXRlKCBjaGFyIGNv
bnN0ICpzdHIsIHNpemVfdCBsZW4gKTsKICBpbnQgZ2V0Y2hhciggYm9vbCBibG9ja2luZyA9IHRy
dWUgKTsKICBpbnQgY2hhcl9hdmFpbCgpIGNvbnN0OwoKCgoKCgogIGJvb2wgcmVnaXN0ZXJfY29u
c29sZSggQ29uc29sZSAqY29ucywgaW50IHBvcyA9IDAgKTsKCgoKCgogIGJvb2wgdW5yZWdpc3Rl
cl9jb25zb2xlKCBDb25zb2xlICpjb25zICk7Cgpwcml2YXRlOgoKICBpbnQgX2l0ZW1zOwogIENv
bnNvbGUgKl9jb25zW1NJWkVdOwoKfTsKIyA3ICJhdXRvL2tlcm5lbF9jb25zb2xlLmgiIDIKCgoK
CgoKY2xhc3MgS2NvbnNvbGUgOiBwdWJsaWMgTXV4X2NvbnNvbGUKewpwdWJsaWM6CgogIGludCBn
ZXRjaGFyKCBib29sIGJsb2NraW5nID0gdHJ1ZSApOwoKICBzdGF0aWMgTXV4X2NvbnNvbGUgKmNv
bnNvbGUoKTsKCnByaXZhdGU6CiAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQ7Cgp9OwojIDEwMiAi
YXV0by90aHJlYWRfaS5oIiAyCgoKIyAxICJhdXRvL3Byb2ZpbGUuaCIgMQojIDEzICJhdXRvL3By
b2ZpbGUuaCIKY2xhc3MgcHJvZmlsZQp7CiAgc3RhdGljIHVuc2lnbmVkIGxvbmcgdGlja3M7CiAg
c3RhdGljIGJvb2wgZXhpdDsKCnB1YmxpYzoKCgoKCiAgc3RhdGljIHZvaWQgaW5pdCgpOwoKICBz
dGF0aWMgdm9pZCBzdGFydCgpOwoKICBzdGF0aWMgdm9pZCBzdG9wKCk7CgogIHN0YXRpYyB2b2lk
IHN0b3BfYW5kX2R1bXAoKTsKCiAgc3RhdGljIHZvaWQgaGFuZGxlX3Byb2ZpbGVfaW50ZXJydXB0
KHZtX29mZnNldF90IHBjKTsKfTsKCmV4dGVybiAiQyIgdm9pZCBwcm9maWxlX2ludGVycnVwdCh2
bV9vZmZzZXRfdCBwYyk7CgpleHRlcm4gIkMiIHZvaWQgcHJvZmlsZV9tY291bnRfd3JhcCh1bnNp
Z25lZCBzaG9ydCAqZnJvbXBjaW5kZXgsIGNoYXIgKnNlbGZwYyApOwojIDEwNSAiYXV0by90aHJl
YWRfaS5oIiAyCgoKIyAxICJhdXRvL3dhdGNoZG9nLmgiIDEKIyAxMSAiYXV0by93YXRjaGRvZy5o
IgpjbGFzcyB3YXRjaGRvZwp7CnB1YmxpYzoKICBzdGF0aWMgdm9pZCAoKnRvdWNoKSh2b2lkKTsK
ICBzdGF0aWMgdm9pZCAoKmVuYWJsZSkodm9pZCk7CiAgc3RhdGljIHZvaWQgKCpkaXNhYmxlKSh2
b2lkKTsKCnByaXZhdGU6CiAgd2F0Y2hkb2coKTsKICB3YXRjaGRvZyhjb25zdCB3YXRjaGRvZyYp
OwoKICBzdGF0aWMgdm9pZCAoKmluaXRfcGVyZikodm9pZCk7CiAgc3RhdGljIHVuc2lnbmVkIGxv
bmcgbG9uZyBubWlfcGVyZjsKCiAgdHlwZWRlZiBzdHJ1Y3QKICAgIHsKICAgICAgdW5zaWduZWQg
YWN0aXZlOjE7CiAgICAgIHVuc2lnbmVkIHVzZXJfYWN0aXZlOjE7CiAgICAgIHVuc2lnbmVkIG5v
X3VzZXJfY29udHJvbDoxOwogICAgfSB3YXRjaGRvZ19mbGFnc190OwoKICBzdGF0aWMgd2F0Y2hk
b2dfZmxhZ3NfdCBmbGFnczsKCnB1YmxpYzoKCiAgc3RhdGljIHZvaWQgdXNlcl9lbmFibGUoKTsK
CgogIHN0YXRpYyB2b2lkIHVzZXJfZGlzYWJsZSgpOwoKCiAgc3RhdGljIHZvaWQgdXNlcl90YWtl
b3Zlcl9jb250cm9sKCk7CgoKICBzdGF0aWMgdm9pZCB1c2VyX2dpdmViYWNrX2NvbnRyb2woKTsK
CiAgc3RhdGljIHZvaWQgaW5pdCgpOwoKcHJpdmF0ZToKCiAgc3RhdGljIHZvaWQgaW5pdF9wZXJm
X3A2KCk7CgogIHN0YXRpYyB2b2lkIGVuYWJsZV9wZXJmX25taV9wNigpOwoKICBzdGF0aWMgdm9p
ZCBkaXNhYmxlX3BlcmZfbm1pX3A2KCk7CgogIHN0YXRpYyB2b2lkIHRvdWNoX3BlcmZfcDYoKTsK
CgogIHN0YXRpYyB2b2lkIGluaXRfcGVyZl9wNCgpOwoKICBzdGF0aWMgdm9pZCBlbmFibGVfcGVy
Zl9ubWlfcDQoKTsKCiAgc3RhdGljIHZvaWQgZGlzYWJsZV9wZXJmX25taV9wNCgpOwoKICBzdGF0
aWMgdm9pZCB0b3VjaF9wZXJmX3A0KCk7CgoKICBzdGF0aWMgdm9pZCBpbml0X3BlcmZfazcoKTsK
CiAgc3RhdGljIHZvaWQgZW5hYmxlX3BlcmZfbm1pX2s3KCk7CgogIHN0YXRpYyB2b2lkIGRpc2Fi
bGVfcGVyZl9ubWlfazcoKTsKCiAgc3RhdGljIHZvaWQgdG91Y2hfcGVyZl9rNygpOwp9OwojIDg3
ICJhdXRvL3dhdGNoZG9nLmgiCmlubGluZSB2b2lkCndhdGNoZG9nOjp1c2VyX2VuYWJsZSgpCnsK
ICBmbGFncy51c2VyX2FjdGl2ZSA9IDE7CiAgZW5hYmxlKCk7Cn0KCgoKCmlubGluZSB2b2lkCndh
dGNoZG9nOjp1c2VyX2Rpc2FibGUoKQp7CiAgZmxhZ3MudXNlcl9hY3RpdmUgPSAwOwogIGRpc2Fi
bGUoKTsKfQoKCgoKaW5saW5lIHZvaWQKd2F0Y2hkb2c6OnVzZXJfdGFrZW92ZXJfY29udHJvbCgp
CnsKICBmbGFncy5ub191c2VyX2NvbnRyb2wgPSAwOwp9CgoKCgppbmxpbmUgdm9pZAp3YXRjaGRv
Zzo6dXNlcl9naXZlYmFja19jb250cm9sKCkKewogIGZsYWdzLm5vX3VzZXJfY29udHJvbCA9IDA7
Cn0KIyAxMDggImF1dG8vdGhyZWFkX2kuaCIgMgoKCgoKIyAxICIuLi9zcmMva2Vybi91bmRlZl9v
c2tpdC5oIiAxCiMgMTEzICJhdXRvL3RocmVhZF9pLmgiIDIKCgojIDEgIi4uL3NyYy9rZXJuL3Vu
ZGVmX29za2l0LmgiIDEKIyAxMTYgImF1dG8vdGhyZWFkX2kuaCIgMgojIDEyNSAiYXV0by90aHJl
YWRfaS5oIgojIDEgIi4uL3NyYy9saWIvbWluaWxpYmMvaW5jbHVkZS9hbGxvY2EuaCIgMQoKCiMg
MSAiL3Vzci9saWIvZ2NjLXNuYXBzaG90L2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4zL2luY2x1
ZGUvc3RkZGVmLmgiIDEKIyA0ICIuLi9zcmMvbGliL21pbmlsaWJjL2luY2x1ZGUvYWxsb2NhLmgi
IDIKCgpleHRlcm4gIkMiIHsKCnZvaWQgKmFsbG9jYShzaXplX3QpOwoKfQojIDEyNiAiYXV0by90
aHJlYWRfaS5oIiAyCgojIDEgImF1dG8vamRiX3RyYWNlLmgiIDEKIyAxMSAiYXV0by9qZGJfdHJh
Y2UuaCIKY2xhc3MgamRiX3RyYWNlCnsKcHJpdmF0ZToKCiAgdHlwZWRlZiBzdHJ1Y3QKICAgIHsK
ICAgICAgaW50IG90aGVyOwogICAgICBpbnQgdGhyZWFkOwogICAgICBpbnQgcGZhX3Jlc19zZXQ7
CiAgICAgIHVuc2lnbmVkIHk7CiAgICAgIHVuc2lnbmVkIHo7CiAgICB9IHBmX3Jlc190OwoKCiAg
dHlwZWRlZiBzdHJ1Y3QKICAgIHsKICAgICAgaW50IG90aGVyOwogICAgICBpbnQgdGhyZWFkOwog
ICAgICBpbnQgc2VuZF9vbmx5OwogICAgfSBpcGNfcmVzX3Q7CgoKICB0eXBlZGVmIHN0cnVjdAog
ICAgewogICAgICBpbnQgb3RoZXI7CiAgICAgIGludCB0aHJlYWQ7CiAgICAgIGludCBhZGRyX3Nl
dDsKICAgICAgdW5zaWduZWQgeTsKICAgICAgdW5zaWduZWQgejsKICAgIH0gdW5tYXBfcmVzX3Q7
CgogIHN0YXRpYyBwZl9yZXNfdCBwZl9yZXM7CiAgc3RhdGljIGlwY19yZXNfdCBpcGNfcmVzOwog
IHN0YXRpYyB1bm1hcF9yZXNfdCB1bm1hcF9yZXM7CgpwdWJsaWM6CiAgc3RhdGljIHZvaWQgZ2V0
X3BmX3JlcyhpbnQgKm90aGVyLCBpbnQgKnRocmVhZCwgaW50ICpwZmFfc2V0LCB1bnNpZ25lZCAq
eSwgdW5zaWduZWQgKnopOwoKICBzdGF0aWMgdm9pZCBzZXRfcGZfcmVzKGludCBvdGhlciwgaW50
IHRocmVhZCwgaW50IHBmYV9zZXQsIHVuc2lnbmVkIHksIHVuc2lnbmVkIHopOwoKICBzdGF0aWMg
dm9pZCBjbGVhcl9wZl9yZXMoKTsKCiAgc3RhdGljIHZvaWQgZ2V0X3VubWFwX3JlcyhpbnQgKm90
aGVyLCBpbnQgKnRocmVhZCwgaW50ICphZGRyX3NldCwgdW5zaWduZWQgKnksIHVuc2lnbmVkICp6
KTsKCiAgc3RhdGljIHZvaWQgc2V0X3VubWFwX3JlcyhpbnQgb3RoZXIsIGludCB0aHJlYWQsIGlu
dCBhZGRyX3NldCwgdW5zaWduZWQgeSwgdW5zaWduZWQgeik7CgogIHN0YXRpYyB2b2lkIGNsZWFy
X3VubWFwX3JlcygpOwoKICBzdGF0aWMgdm9pZCBnZXRfaXBjX3JlcyhpbnQgKm90aGVyLCBpbnQg
KnRocmVhZCwgaW50ICpzZW5kX29ubHkpOwoKICBzdGF0aWMgdm9pZCBzZXRfaXBjX3JlcyhpbnQg
b3RoZXIsIGludCB0aHJlYWQsIGludCBzZW5kX29ubHkpOwoKICBzdGF0aWMgdm9pZCBjbGVhcl9p
cGNfcmVzKCk7Cn07CiMgNzMgImF1dG8vamRiX3RyYWNlLmgiCmlubGluZSB2b2lkCmpkYl90cmFj
ZTo6Z2V0X3BmX3JlcyhpbnQgKm90aGVyLCBpbnQgKnRocmVhZCwKICAgICAgICAgICAgICAgICAg
ICAgIGludCAqcGZhX3NldCwgdW5zaWduZWQgKnksIHVuc2lnbmVkICp6KQp7CiAgKm90aGVyID0g
cGZfcmVzLm90aGVyOwogICp0aHJlYWQgPSBwZl9yZXMudGhyZWFkOwogICpwZmFfc2V0ID0gcGZf
cmVzLnBmYV9yZXNfc2V0OwogICp5ID0gcGZfcmVzLnk7CiAgKnogPSBwZl9yZXMuejsKfQoKCgpp
bmxpbmUgdm9pZApqZGJfdHJhY2U6OmdldF91bm1hcF9yZXMoaW50ICpvdGhlciwgaW50ICp0aHJl
YWQsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmFkZHJfc2V0LCB1bnNpZ25lZCAqeSwg
dW5zaWduZWQgKnopCnsKICAqb3RoZXIgPSB1bm1hcF9yZXMub3RoZXI7CiAgKnRocmVhZCA9IHVu
bWFwX3Jlcy50aHJlYWQ7CiAgKmFkZHJfc2V0ID0gdW5tYXBfcmVzLmFkZHJfc2V0OwogICp5ID0g
dW5tYXBfcmVzLnk7CiAgKnogPSB1bm1hcF9yZXMuejsKfQoKCgppbmxpbmUgdm9pZApqZGJfdHJh
Y2U6OmdldF9pcGNfcmVzKGludCAqb3RoZXIsIGludCAqdGhyZWFkLCBpbnQgKnNlbmRfb25seSkK
ewogICpvdGhlciA9IGlwY19yZXMub3RoZXI7CiAgKnRocmVhZCA9IGlwY19yZXMudGhyZWFkOwog
ICpzZW5kX29ubHkgPSBpcGNfcmVzLnNlbmRfb25seTsKfQojIDEyOCAiYXV0by90aHJlYWRfaS5o
IiAyCgoKCgojIDEgIi4uL3NyYy9rZXJuL3VuZGVmX29za2l0LmgiIDEKIyAxMzMgImF1dG8vdGhy
ZWFkX2kuaCIgMgojIDUgImF1dG8vdGhyZWFkLWxvZy5jYyIgMgojIDI0ICIuLi9zcmMva2Vybi9p
YTMyL3RocmVhZC1sb2cuY3BwIgoKYm9vbCBsb2dfaXBjID0gZmFsc2U7CiMgMjYgIi4uL3NyYy9r
ZXJuL2lhMzIvdGhyZWFkLWxvZy5jcHAiCmJvb2wgbG9nX2lwY190b19idWYgPSBmYWxzZTsKIyAy
NyAiLi4vc3JjL2tlcm4vaWEzMi90aHJlYWQtbG9nLmNwcCIKYm9vbCBsb2dfaXBjX3Jlc3VsdCA9
IGZhbHNlOwojIDI4ICIuLi9zcmMva2Vybi9pYTMyL3RocmVhZC1sb2cuY3BwIgpib29sIGxvZ19w
YWdlX2ZhdWx0ID0gZmFsc2U7CiMgMjkgIi4uL3NyYy9rZXJuL2lhMzIvdGhyZWFkLWxvZy5jcHAi
CmJvb2wgbG9nX3BmX3RvX2J1ZiA9IGZhbHNlOwojIDMwICIuLi9zcmMva2Vybi9pYTMyL3RocmVh
ZC1sb2cuY3BwIgpib29sIGxvZ191bm1hcCA9IGZhbHNlOwojIDMxICIuLi9zcmMva2Vybi9pYTMy
L3RocmVhZC1sb2cuY3BwIgpib29sIGxvZ191bm1hcF90b19idWYgPSBmYWxzZTsKIyAzMiAiLi4v
c3JjL2tlcm4vaWEzMi90aHJlYWQtbG9nLmNwcCIKYm9vbCB0cmFjZV9pcGMgPSBmYWxzZTsKIyAz
MyAiLi4vc3JjL2tlcm4vaWEzMi90aHJlYWQtbG9nLmNwcCIKYm9vbCBzbG93X2lwYyA9IGZhbHNl
OwojIDM0ICIuLi9zcmMva2Vybi9pYTMyL3RocmVhZC1sb2cuY3BwIgoKCgoKCmJvb2wgbG9nX3N5
c3RlbV9jYWxsID0gZmFsc2U7CiMgNDAgIi4uL3NyYy9rZXJuL2lhMzIvdGhyZWFkLWxvZy5jcHAi
CgpzdGF0aWMgY2hhciAqIGNvbnN0IHN5c2NhbGxfbmFtZXNbXSA9CnsKICAiSVBDIiwgIklETiIs
ICJGUFUiLCAiU1dJIiwgIlNDSCIsICJFWFIiLCAiVE5XIgp9OwojIDQ1ICIuLi9zcmMva2Vybi9p
YTMyL3RocmVhZC1sb2cuY3BwIgoKCnN0YXRpYyBjaGFyIGxvZ19tZXNzYWdlWzgwXTsKIyA0OCAi
Li4vc3JjL2tlcm4vaWEzMi90aHJlYWQtbG9nLmNwcCIKCgppbmxpbmUgdm9pZApUaHJlYWQ6OnN5
c2NhbGxfbG9nKFN5c2NhbGxfZnJhbWUgKiAsIHVuc2lnbmVkIG51bWJlciwKICAgICAgICAgICAg
ICAgICAgICBib29sIGVudGVyLCB1bnNpZ25lZCByZXR2YWwpCnsKICBMb2NrX2d1YXJkPENwdV9s
b2NrPiBndWFyZCAoJmNwdV9sb2NrKTsKCiAgcHJpbnRmKCIqUyVjWyV4LiV4ICVzIiwKICAgICAg
ICAgZW50ZXIgPyAnYycgOiAncicsCiAgICAgICAgIGlkKCkudGFzaygpLCBpZCgpLmx0aHJlYWQo
KSwKICAgICAgICAgc3lzY2FsbF9uYW1lc1tudW1iZXJdKTsKCiAgaWYgKCFlbnRlcikKICAgIHBy
aW50ZigiIC0+ICV4IiwgcmV0dmFsKTsKCiAgcHJpbnRmKCJdICIpOwp9CiMgNjYgIi4uL3NyYy9r
ZXJuL2lhMzIvdGhyZWFkLWxvZy5jcHAiCgpleHRlcm4gIkMiIHZvaWQKdGhyZWFkX3N5c2NhbGxf
bG9nX2JlZ2luKFRocmVhZCAqdCwgU3lzY2FsbF9mcmFtZSAqcmVncywgdW5zaWduZWQgbnVtYmVy
KQp7CiAgdC0+c3lzY2FsbF9sb2cocmVncywgbnVtYmVyLCB0cnVlLDApOwp9CiMgNzIgIi4uL3Ny
Yy9rZXJuL2lhMzIvdGhyZWFkLWxvZy5jcHAiCgpleHRlcm4gIkMiIHZvaWQKdGhyZWFkX3N5c2Nh
bGxfbG9nX2VuZCh1bnNpZ25lZCByZXR2YWwsCiAgICAgICAgICAgICAgICAgICAgICAgVGhyZWFk
ICp0LCBTeXNjYWxsX2ZyYW1lICpyZWdzLCB1bnNpZ25lZCBudW1iZXIpCnsKICB0LT5zeXNjYWxs
X2xvZyhyZWdzLCBudW1iZXIsIGZhbHNlLHJldHZhbCk7Cn0KIyA3OSAiLi4vc3JjL2tlcm4vaWEz
Mi90aHJlYWQtbG9nLmNwcCIKCgoKCgoKCk13b3JkIFRocmVhZDo6c3lzX2lwY19sb2coU3lzY2Fs
bF9mcmFtZSAqaV9yZWdzKQp7CiAgRW50cnlfZnJhbWUgKnJlZ3MgPSByZWludGVycHJldF9jYXN0
PEVudHJ5X2ZyYW1lKj4oaV9yZWdzKTsKICBTeXNfaXBjX2ZyYW1lICppcGNfcmVncyA9IHN0YXRp
Y19jYXN0PFN5c19pcGNfZnJhbWUqPihpX3JlZ3MpOwoKICBpbnQgb3RoZXIsIHRocmVhZCwgc2Vu
ZF9vbmx5OwogIGludCBnbG9iYWwgPSBpZCgpLnRhc2soKSoxMjggKyBpZCgpLmx0aHJlYWQoKTsK
ICB1bnNpZ25lZCBlbnRyeV9ldmVudF9udW0gPSAweGZmZmZmZmZmOwogIGNoYXIgaGF2ZV9zZW5k
X3BhcnQgPSBpcGNfcmVncy0+c25kX2Rlc2MoKS5oYXNfc2VuZCgpOwoKICBqZGJfdHJhY2U6Omdl
dF9pcGNfcmVzKCZvdGhlciwgJnRocmVhZCwgJnNlbmRfb25seSk7CgogIGludCBkb19sb2cgPSAo
ICgodGhyZWFkID09IC0xKSB8fCAoKG90aGVyKSBeICh0aHJlYWQgPT0gZ2xvYmFsKSkpCiAgICAg
ICAgICAgICAgICAmJiAoKCFzZW5kX29ubHkgfHwgaGF2ZV9zZW5kX3BhcnQgKSkpOwoKCiAgY3B1
X2xvY2subG9jaygpOwoKICBpZiAoZG9fbG9nKQogICAgewogICAgICBqZGJfdGJ1Zjo6VGJfZW50
cnkgKnRiZSA9IGxvZ19pcGNfdG9fYnVmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
PyBqZGJfdGJ1Zjo6bmV3X2VudHJ5KCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6
IChqZGJfdGJ1Zjo6VGJfZW50cnkqKQogICAgICAgIGFsbG9jYShzaXplb2YoamRiX3RidWY6OlRi
X2VudHJ5KSk7CgogICAgICB0YmUtPnR5cGUgPSAyOwogICAgICB0YmUtPmN1cnJlbnQgPSB0aGlz
OwogICAgICByZWdpc3RlciB1bnNpZ25lZCB0bXAxLCB0bXAyLCB0bXAzOwogICAgICB0bXAxID0g
cmVncy0+ZWlwOwogICAgICB0bXAyID0gcmVncy0+ZWF4OwogICAgICB0bXAzID0gcmVncy0+ZWJw
OwogICAgICB0YmUtPmVpcCA9IHRtcDE7CiAgICAgIHRiZS0+bS5pcGMuZWF4ID0gdG1wMjsKICAg
ICAgdGJlLT5tLmlwYy5lYnAgPSB0bXAzOwogICAgICB0bXAxID0gcmVncy0+ZWR4OwogICAgICB0
bXAyID0gcmVncy0+ZWJ4OwogICAgICB0YmUtPm0uaXBjLmVkeCA9IHRtcDE7CiAgICAgIHRiZS0+
bS5pcGMuZWJ4ID0gdG1wMjsKICAgICAgdGJlLT5tLmlwYy5kZXN0ID0gaXBjX3JlZ3MtPnNuZF9k
ZXN0KCkucmF3KCk7CgogICAgICBlbnRyeV9ldmVudF9udW0gPSB0YmUtPm51bWJlcjsKCiAgICAg
IGlmIChsb2dfaXBjX3RvX2J1ZikKICAgICAgICBqZGJfdGJ1Zjo6Y29tbWl0X2VudHJ5KCk7CiAg
ICAgIGVsc2UKICAgICAgICB7CgoKICAgICAgICAgIFByb2M6OlN0YXR1cyBzID0gUHJvYzo6Y2xp
X3NhdmUoKTsKCiAgICAgICAgICBqZGJfdGJ1Zjo6cHJpbnRfZW50cnkodGJlLCBsb2dfbWVzc2Fn
ZSwgc2l6ZW9mKGxvZ19tZXNzYWdlKSk7CiAgICAgICAgICBwcmludGYoIiVzXG4iLCBsb2dfbWVz
c2FnZSk7CgoKCiAgICAgICAgICBpbnQgYzsKICAgICAgICAgIHdoaWxlKChjPUtjb25zb2xlOjpj
b25zb2xlKCktPmdldGNoYXIoZmFsc2UpKSA9PSAtMSkKICAgICAgICAgICAgUHJvYzo6cGF1c2Uo
KTsKICAgICAgICAgIGlmKCBjID09ICdpJykKICAgICAgICAgICAgYXNtKCAiaW50CSQzCVxuXHQi
ICJqbXAJMWYJXG5cdCIgIi5hc2NpaSBcIiIiSVBDIiAiXCIJXG5cdCIgIjE6CQkJXG5cdCIgIm5v
cDtub3A7bm9wCVxuXHQiICk7CgoKICAgICAgICAgIFByb2M6OnN0aV9yZXN0b3JlKHMpOwogICAg
ICAgIH0KICAgIH0KCgogIHVuc2lnbmVkIHJldDsKCiAgYm9vbCBzdWNjZXNzID0gaXBjX3Nob3J0
X2N1dCgoU3lzX2lwY19mcmFtZSopaV9yZWdzKTsKCiAgY3B1X2xvY2suY2xlYXIoKTsKCiAgcmV0
ID0gcmVncy0+ZWF4OwogIGlmICghc3VjY2VzcykKICAgIHJldCA9IHN5c19pcGMocmVncyk7Cgog
IGlmIChsb2dfaXBjICYmIGxvZ19pcGNfcmVzdWx0ICYmIGRvX2xvZykKICAgIHsKICAgICAgY3B1
X2xvY2subG9jaygpOwoKICAgICAgamRiX3RidWY6OlRiX2VudHJ5ICp0YmUgPSBsb2dfaXBjX3Rv
X2J1ZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gamRiX3RidWY6Om5ld19lbnRy
eSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoamRiX3RidWY6OlRiX2VudHJ5
KikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jYShzaXplb2Yo
amRiX3RidWY6OlRiX2VudHJ5KSk7CgogICAgICB0YmUtPnR5cGUgPSAzOwogICAgICB0YmUtPmN1
cnJlbnQgPSB0aGlzOwogICAgICB0YmUtPm0uaXBjX3Jlcy5lYXggPSByZXQ7CiAgICAgIHJlZ2lz
dGVyIHVuc2lnbmVkIHRtcDEsIHRtcDIsIHRtcDM7CiAgICAgIHRtcDEgPSByZWdzLT5laXA7CiAg
ICAgIHRtcDIgPSByZWdzLT5lZHg7CiAgICAgIHRtcDMgPSByZWdzLT5lYng7CiAgICAgIHRiZS0+
ZWlwID0gdG1wMTsKICAgICAgdGJlLT5tLmlwY19yZXMuZWR4ID0gdG1wMjsKICAgICAgdGJlLT5t
LmlwY19yZXMuZWJ4ID0gdG1wMzsKICAgICAgdGJlLT5tLmlwY19yZXMucmVmX2V2ZW50ID0gZW50
cnlfZXZlbnRfbnVtOwogICAgICB0YmUtPm0uaXBjX3Jlcy5oYXZlX3NlbmQgPSBoYXZlX3NlbmRf
cGFydDsKICAgICAgdGJlLT5tLmlwY19yZXMub3JpZ19lYnAgPSByZWdzLT5lYnA7CiAgICAgIHRi
ZS0+bS5pcGNfcmVzLnNyYyA9IGlwY19yZWdzLT5yY3Zfc291cmNlKCkucmF3KCk7CgogICAgICBp
ZiAobG9nX2lwY190b19idWYpCiAgICAgICAgamRiX3RidWY6OmNvbW1pdF9lbnRyeSgpOwogICAg
ICBlbHNlCiAgICAgICAgewoKCiAgICAgICAgICBqZGJfdGJ1Zjo6cHJpbnRfZW50cnkodGJlLCBs
b2dfbWVzc2FnZSwgc2l6ZW9mKGxvZ19tZXNzYWdlKSk7CiAgICAgICAgICBwcmludGYoIiVzXG4i
LCBsb2dfbWVzc2FnZSk7CgoKCiAgICAgICAgICBpbnQgYzsKICAgICAgICAgIHdoaWxlKChjPUtj
b25zb2xlOjpjb25zb2xlKCktPmdldGNoYXIoZmFsc2UpKSA9PSAtMSkKICAgICAgICAgICAgUHJv
Yzo6cGF1c2UoKTsKICAgICAgICAgIGlmKCBjID09ICdpJykKICAgICAgICAgICAgYXNtKCAiaW50
CSQzCVxuXHQiICJqbXAJMWYJXG5cdCIgIi5hc2NpaSBcIiIiSVBDIiAiXCIJXG5cdCIgIjE6CQkJ
XG5cdCIgIm5vcDtub3A7bm9wCVxuXHQiICk7CgogICAgICAgIH0KCiAgICAgIGNwdV9sb2NrLmNs
ZWFyKCk7CiAgICB9CgogIHJldHVybiByZXQ7Cn0KIyAyMTEgIi4uL3NyYy9rZXJuL2lhMzIvdGhy
ZWFkLWxvZy5jcHAiCgoKCgoKCgp1bnNpZ25lZApUaHJlYWQ6OnN5c19pcGNfdHJhY2UoU3lzY2Fs
bF9mcmFtZSAqaV9yZWdzKQp7CiAgRW50cnlfZnJhbWUgKmVmID0gcmVpbnRlcnByZXRfY2FzdDxF
bnRyeV9mcmFtZSo+KGlfcmVncyk7CiAgU3lzX2lwY19mcmFtZSAqcmVncyA9IHN0YXRpY19jYXN0
PFN5c19pcGNfZnJhbWUqPihpX3JlZ3MpOwoKICB1bnNpZ25lZCBvcmlnX2VheCA9IHJlZ3MtPmVh
eDsKICB1bnNpZ25lZCBvcmlnX2VicCA9IHJlZ3MtPmVicDsKICBMNF91aWQgb3JpZ19lc2lfZWRp
ID0gcmVncy0+c25kX2Rlc3QoKTsKICB1bnNpZ25lZCBsb25nIGxvbmcgb3JpZ190c2M7CgoKICBj
cHVfbG9jay5sb2NrKCk7CiAgYXNtIHZvbGF0aWxlKCJyZHRzYyIgOiAiPUEiIChvcmlnX3RzYykp
OwoKCiAgcmVnaXN0ZXIgYm9vbCBzdWNjZXNzID0gaXBjX3Nob3J0X2N1dChyZWdzKTsKICB1bnNp
Z25lZCByZXQgPSByZWdzLT5lYXg7CgogIGlmICghc3VjY2VzcykKICAgIHsKCiAgICAgIGNwdV9s
b2NrLmNsZWFyKCk7CiAgICAgIHJldCA9IHN5c19pcGMocmVncyk7CiAgICAgIGNwdV9sb2NrLmxv
Y2soKTsKICAgIH0KCgogIGpkYl90YnVmOjpUYl9lbnRyeSAqdGJlID0gamRiX3RidWY6Om5ld19l
bnRyeSgpOwojIDI2OCAiLi4vc3JjL2tlcm4vaWEzMi90aHJlYWQtbG9nLmNwcCIKICB0YmUtPnR5
cGUgPSA0OwogIHRiZS0+Y3VycmVudCA9IHRoaXM7CiAgdGJlLT5laXAgPSBlZi0+ZWlwOwogIHRi
ZS0+bS5pcGNfdHJhY2Uuc2VuZF90c2MgPSBvcmlnX3RzYzsKICB0YmUtPm0uaXBjX3RyYWNlLnNl
bmRfZXNpX2VkaSA9IG9yaWdfZXNpX2VkaS5yYXcoKTsKICB0YmUtPm0uaXBjX3RyYWNlLnJlY3Zf
ZXNpX2VkaSA9IHJlZ3MtPnJjdl9zb3VyY2UoKS5yYXcoKTsKICB0YmUtPm0uaXBjX3RyYWNlLmRv
cGUubXNnZG9wZSA9IHJldDsKICB0YmUtPm0uaXBjX3RyYWNlLnNlbmRfZGVzYyA9ICgob3JpZ19l
YXggPT0gMHhmZmZmZmZmZikgfHwgKG9yaWdfZWF4IDw9IDMpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPyAodW5zaWduZWQgY2hhcikgb3JpZ19lYXgKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDogKHVuc2lnbmVkIGNoYXIpICgob3JpZ19lYXggJiAzKSB8IDQp
OwogIHRiZS0+bS5pcGNfdHJhY2UucmVjdl9kZXNjID0gKChvcmlnX2VicCA9PSAweGZmZmZmZmZm
KSB8fCAob3JpZ19lYnAgPCAyKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8g
KHVuc2lnbmVkIGNoYXIpIG9yaWdfZWJwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA6ICh1bnNpZ25lZCBjaGFyKSAoKG9yaWdfZWJwICYgMykgfCA0KTsKCiAgamRiX3RidWY6OmNv
bW1pdF9lbnRyeSgpOwoKCiAgY3B1X2xvY2suY2xlYXIoKTsKICByZXR1cm4gcmV0Owp9CiMgMjg4
ICIuLi9zcmMva2Vybi9pYTMyL3RocmVhZC1sb2cuY3BwIgoKCmV4dGVybiAiQyIgdm9pZCBzeXNf
aXBjX2VudHJ5X2xvZyh2b2lkKTsKIyAyOTEgIi4uL3NyYy9rZXJuL2lhMzIvdGhyZWFkLWxvZy5j
cHAiCgp2b2lkClRocmVhZDo6aG9va19pcGNfdmVjdG9yKCkKewoKCgogIGlmICh0cmFjZV9pcGMp
CiAgICBzeXNjYWxsX3RhYmxlWzBdID0gJlRocmVhZDo6c3lzX2lwY190cmFjZTsKICBlbHNlIGlm
IChsb2dfaXBjKQogICAgc3lzY2FsbF90YWJsZVswXSA9ICZUaHJlYWQ6OnN5c19pcGNfbG9nOwog
IGVsc2UKICAgIHN5c2NhbGxfdGFibGVbMF0gPSAmVGhyZWFkOjpzeXNfaXBjOwoKICBmaWxsX2dh
dGUoa21lbTo6aWR0KCkgKyAweDMwLCAodW5zaWduZWQpc3lzX2lwY19lbnRyeV9sb2csCiAgICAg
ICAgICAgIGttZW06OmdkdF9jb2RlX2tlcm5lbCwgMHg2MCB8IDB4MGUsIDApOwp9CiMgMzA4ICIu
Li9zcmMva2Vybi9pYTMyL3RocmVhZC1sb2cuY3BwIgoKZXh0ZXJuICJDIiB2b2lkIHN5c19pcGNf
ZW50cnkodm9pZCk7CiMgMzEwICIuLi9zcmMva2Vybi9pYTMyL3RocmVhZC1sb2cuY3BwIgoKdm9p
ZApUaHJlYWQ6OnJlc3RvcmVfaXBjX3ZlY3RvcigpCnsKCiAgaWYgKCF0cmFjZV9pcGMpCiAgICB7
CgoKICAgICAgaWYgKCFsb2dfaXBjKQogICAgICAgIHsKICAgICAgICAgIHN5c2NhbGxfdGFibGVb
MF0gPSAmVGhyZWFkOjpzeXNfaXBjOwogICAgICAgICAgaWYgKCFzbG93X2lwYykKICAgICAgICAg
ICAgZmlsbF9nYXRlKGttZW06OmlkdCgpICsgMHgzMCwgKHVuc2lnbmVkKXN5c19pcGNfZW50cnks
CiAgICAgICAgICAgICAgICAgICAgICBrbWVtOjpnZHRfY29kZV9rZXJuZWwsIDB4NjAgfCAweDBl
LCAwKTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBzeXNjYWxsX3RhYmxlWzBdID0gJlRo
cmVhZDo6c3lzX2lwY19sb2c7CiAgICB9Cn0KIyAzMzAgIi4uL3NyYy9rZXJuL2lhMzIvdGhyZWFk
LWxvZy5jcHAiCgoKCgoKdm9pZApUaHJlYWQ6OnBhZ2VfZmF1bHRfbG9nKHZtX29mZnNldF90IHBm
YSwgdW5zaWduZWQgZXJyb3JfY29kZSwgdW5zaWduZWQgZWlwKQp7CiAgaW50IG90aGVyLCB0aHJl
YWQsIHBmYV9zZXQ7CiAgdW5zaWduZWQgeSwgejsKCiAgVGhyZWFkICp0ID0gY3VycmVudF90aHJl
YWQoKTsKICBpbnQgZ2xvYmFsID0gdC0+aWQoKS50YXNrKCkgKiAxMjggKyB0LT5pZCgpLmx0aHJl
YWQoKTsKCiAgamRiX3RyYWNlOjpnZXRfcGZfcmVzKCZvdGhlciwgJnRocmVhZCwgJnBmYV9zZXQs
ICZ5LCAmeik7CgogIGlmICggKCgodGhyZWFkID09IC0xKSB8fCAoKG90aGVyKSBeICh0aHJlYWQg
PT0gZ2xvYmFsKSkpCiAgICAgICYmICghcGZhX3NldCB8fCAoKHkgPiB6KSBeICgocGZhID49IHkp
ICYmIChwZmEgPD0geikpKSApKSkKICAgIHsKICAgICAgTG9ja19ndWFyZCA8Q3B1X2xvY2s+IGd1
YXJkICgmY3B1X2xvY2spOwoKICAgICAgamRiX3RidWY6OlRiX2VudHJ5ICp0YmUgPSBsb2dfcGZf
dG9fYnVmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBqZGJfdGJ1Zjo6bmV3X2Vu
dHJ5KCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChqZGJfdGJ1Zjo6VGJfZW50
cnkqKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhKHNpemVv
ZihqZGJfdGJ1Zjo6VGJfZW50cnkpKTsKCiAgICAgIHRiZS0+dHlwZSA9IDE7CiAgICAgIHRiZS0+
ZWlwID0gZWlwOwogICAgICB0YmUtPmN1cnJlbnQgPSB0aGlzOwogICAgICB0YmUtPm0ucGYucGZh
ID0gcGZhOwogICAgICB0YmUtPm0ucGYuZXJyID0gZXJyb3JfY29kZTsKCiAgICAgIGlmIChsb2df
cGZfdG9fYnVmKQogICAgICAgIGpkYl90YnVmOjpjb21taXRfZW50cnkoKTsKICAgICAgZWxzZQog
ICAgICAgIHsKCiAgICAgICAgICBQcm9jOjpTdGF0dXMgcyA9IFByb2M6OmNsaV9zYXZlKCk7Cgog
ICAgICAgICAgamRiX3RidWY6OnByaW50X2VudHJ5KHRiZSwgbG9nX21lc3NhZ2UsIHNpemVvZihs
b2dfbWVzc2FnZSkpOwogICAgICAgICAgcHJpbnRmKCIlc1xuIiwgbG9nX21lc3NhZ2UpOwoKCgog
ICAgICAgICAgaW50IGM7CiAgICAgICAgICB3aGlsZSgoYz1LY29uc29sZTo6Y29uc29sZSgpLT5n
ZXRjaGFyKGZhbHNlKSkgPT0gLTEpCiAgICAgICAgICAgIFByb2M6OnBhdXNlKCk7CiAgICAgICAg
ICBpZiggYyA9PSAnaScpCiAgICAgICAgICAgIGFzbSggImludAkkMwlcblx0IiAiam1wCTFmCVxu
XHQiICIuYXNjaWkgXCIiIklQQyIgIlwiCVxuXHQiICIxOgkJCVxuXHQiICJub3A7bm9wO25vcAlc
blx0IiApOwoKCiAgICAgICAgICBQcm9jOjpzdGlfcmVzdG9yZShzKTsKCiAgICAgICAgfQogICAg
fQp9CiMgMzg2ICIuLi9zcmMva2Vybi9pYTMyL3RocmVhZC1sb2cuY3BwIgoKCgp1bnNpZ25lZApU
aHJlYWQ6OnN5c19mcGFnZV91bm1hcF9sb2coU3lzY2FsbF9mcmFtZSAqcmVncykKewogIEVudHJ5
X2ZyYW1lICplZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RW50cnlfZnJhbWUqPihyZWdzKTsKICBpbnQg
b3RoZXI7CiAgaW50IHRocmVhZDsKICBpbnQgYWRkcl9zZXQ7CiAgdW5zaWduZWQgeSwgejsKICB1
bnNpZ25lZCBhZGRyID0gcmVncy0+ZWF4ICYgQ29uZmlnOjpQQUdFX01BU0s7CgogIFRocmVhZCAq
dCA9IGN1cnJlbnRfdGhyZWFkKCk7CiAgaW50IGdsb2JhbCA9IHQtPmlkKCkudGFzaygpICogMTI4
ICsgdC0+aWQoKS5sdGhyZWFkKCk7CgogIGpkYl90cmFjZTo6Z2V0X3VubWFwX3Jlcygmb3RoZXIs
ICZ0aHJlYWQsICZhZGRyX3NldCwgJnksICZ6KTsKCiAgaWYgKCAoKCh0aHJlYWQgPT0gLTEpIHx8
ICgob3RoZXIpIF4gKHRocmVhZCA9PSBnbG9iYWwpKSkKICAgICAgJiYgKCFhZGRyX3NldCB8fCAo
KHkgPiB6KSBeICgoYWRkciA+PSB5KSAmJiAoYWRkciA8PSB6KSkpICkpKQogICAgewogICAgICBM
b2NrX2d1YXJkIDxDcHVfbG9jaz4gZ3VhcmQgKCZjcHVfbG9jayk7CgogICAgICBqZGJfdGJ1Zjo6
VGJfZW50cnkgKnRiZSA9IGxvZ191bm1hcF90b19idWYKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA/IGpkYl90YnVmOjpuZXdfZW50cnkoKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDogKGpkYl90YnVmOjpUYl9lbnRyeSopCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhbGxvY2Eoc2l6ZW9mKGpkYl90YnVmOjpUYl9lbnRyeSkpOwoKICAgICAg
dGJlLT5laXAgPSBlZi0+ZWlwOwogICAgICB0YmUtPmN1cnJlbnQgPSB0aGlzOwogICAgICB0YmUt
Pm0udW5tYXAuZnBhZ2UgPSByZWdzLT5lYXg7CiAgICAgIHRiZS0+bS51bm1hcC5tYXNrID0gcmVn
cy0+ZWN4OwogICAgICB0YmUtPm0udW5tYXAucmVzdWx0ID0gMDsKICAgICAgdGJlLT50eXBlID0g
NzsKCgogICAgICBpZiAobG9nX3VubWFwX3RvX2J1ZikKICAgICAgICBqZGJfdGJ1Zjo6Y29tbWl0
X2VudHJ5KCk7CiAgICAgIGVsc2UKICAgICAgICB7CgogICAgICAgICAgUHJvYzo6U3RhdHVzIHMg
PSBQcm9jOjpjbGlfc2F2ZSgpOwoKCiAgICAgICAgICBqZGJfdGJ1Zjo6cHJpbnRfZW50cnkodGJl
LCBsb2dfbWVzc2FnZSwgc2l6ZW9mKGxvZ19tZXNzYWdlKSk7CiAgICAgICAgICBwcmludGYoIiVz
XG4iLCBsb2dfbWVzc2FnZSk7CgoKCiAgICAgICAgICBpbnQgYzsKICAgICAgICAgIHdoaWxlKChj
PUtjb25zb2xlOjpjb25zb2xlKCktPmdldGNoYXIoZmFsc2UpKSA9PSAtMSkKICAgICAgICAgICAg
UHJvYzo6cGF1c2UoKTsKICAgICAgICAgIGlmKCBjID09ICdpJykKICAgICAgICAgICAgYXNtKCAi
aW50CSQzCVxuXHQiICJqbXAJMWYJXG5cdCIgIi5hc2NpaSBcIiIiSVBDIiAiXCIJXG5cdCIgIjE6
CQkJXG5cdCIgIm5vcDtub3A7bm9wCVxuXHQiICk7CgoKICAgICAgICAgIFByb2M6OnN0aV9yZXN0
b3JlKHMpOwoKICAgICAgICB9CiAgICB9CgogIGJvb2wgcmV0ID0gc3lzX2ZwYWdlX3VubWFwKHJl
Z3MpOwoKICByZXR1cm4gcmV0Owp9CiMgNDUxICIuLi9zcmMva2Vybi9pYTMyL3RocmVhZC1sb2cu
Y3BwIgoKCnZvaWQKVGhyZWFkOjpob29rX3VubWFwX3ZlY3RvcigpCnsKICBzeXNjYWxsX3RhYmxl
WzJdID0gJlRocmVhZDo6c3lzX2ZwYWdlX3VubWFwX2xvZzsKfQojIDQ1OCAiLi4vc3JjL2tlcm4v
aWEzMi90aHJlYWQtbG9nLmNwcCIKCgp2b2lkClRocmVhZDo6cmVzdG9yZV91bm1hcF92ZWN0b3Io
KQp7CiAgc3lzY2FsbF90YWJsZVsyXSA9ICZUaHJlYWQ6OnN5c19mcGFnZV91bm1hcDsKfQo=


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: c++/9373: GCC-3.3 internal compiler error with -fstrict-aliasing
@ 2003-01-20 14:38 ehrhardt
  0 siblings, 0 replies; 2+ messages in thread
From: ehrhardt @ 2003-01-20 14:38 UTC (permalink / raw)
  To: adam, ehrhardt, gcc-bugs, gcc-prs, nobody

Synopsis: GCC-3.3 internal compiler error with -fstrict-aliasing

Responsible-Changed-From-To: unassigned->cae
Responsible-Changed-By: cae
Responsible-Changed-When: Mon Jan 20 14:38:55 2003
Responsible-Changed-Why:
    Will come up with a reduced testcase.

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=9373


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2003-01-20 14:38 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-01-20 14:16 c++/9373: GCC-3.3 internal compiler error with -fstrict-aliasing adam
2003-01-20 14:38 ehrhardt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).