public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: c++/3903: ICE near an enum declaration compiling qgdict.cpp from Qt with -O2 or -Os
@ 2001-08-01  3:47 nathan
  0 siblings, 0 replies; 3+ messages in thread
From: nathan @ 2001-08-01  3:47 UTC (permalink / raw)
  To: gcc-bugs, gcc-prs, nobody, wjl

Synopsis: ICE near an enum declaration compiling qgdict.cpp from Qt with -O2 or -Os

State-Changed-From-To: open->analyzed
State-Changed-By: nathan
State-Changed-When: Wed Aug  1 03:47:36 2001
State-Changed-Why:
    confirmed as a bug

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view&pr=3903&database=gcc


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

* Re: c++/3903: ICE near an enum declaration compiling qgdict.cpp from Qt with -O2 or -Os
@ 2001-08-17 21:12 rodrigc
  0 siblings, 0 replies; 3+ messages in thread
From: rodrigc @ 2001-08-17 21:12 UTC (permalink / raw)
  To: gcc-bugs, gcc-prs, nobody, wjl

Synopsis: ICE near an enum declaration compiling qgdict.cpp from Qt with -O2 or -Os

State-Changed-From-To: analyzed->closed
State-Changed-By: rodrigc
State-Changed-When: Fri Aug 17 21:12:54 2001
State-Changed-Why:
    Fixed in:
    gcc version 3.1 20010816 (experimental)

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view&pr=3903&database=gcc


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

* c++/3903: ICE near an enum declaration compiling qgdict.cpp from Qt with -O2 or -Os
@ 2001-07-31 12:06 wjl
  0 siblings, 0 replies; 3+ messages in thread
From: wjl @ 2001-07-31 12:06 UTC (permalink / raw)
  To: gcc-gnats

>Number:         3903
>Category:       c++
>Synopsis:       ICE near an enum declaration compiling qgdict.cpp from Qt with -O2 or -Os
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          ice-on-legal-code
>Submitter-Id:   net
>Arrival-Date:   Tue Jul 31 12:06:01 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     wjl@mindless.com
>Release:        gcc-3.1 20010731 (experimental)   (HEAD from CVS)
>Organization:
>Environment:
% g++ -v
Thread model: single
gcc version 3.1 20010731 (experimental)
>Description:
% g++ -c qgdict.ii
(no errors)

% g++ -O -c qgdict.ii
(no errors)

% g++ -O2 -c qgdict.ii
qgdict.cpp: In member function `void QGDict::statistics() const':
qgdict.cpp:942: Internal compiler error in compensate_edge, at reg-stack.c:2555
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL: http://www.gnu.org/software/gcc/bugs.html > for instructions.

% g++ -Os -c qgdict.ii
qgdict.cpp: In member function `void QGDict::statistics() const':
qgdict.cpp:942: Internal compiler error in compensate_edge, at reg-stack.c:2555
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL: http://www.gnu.org/software/gcc/bugs.html > for instructions.

I tried to find specific -f<something> flags that would make
it fail, but I didn't find anything.

This bug has been in the HEAD of CVS for a couple weeks; I
update daily. I don't know *exactly* when this failed, however,
sorry.
>How-To-Repeat:
Compile qgdict.ii with '-c -O2' or '-c -Os'.
>Fix:
Using -O instead of -O2 or -Os compiles the file with no
readily apparently problems.

This doesn't solve the ICE, however. =)
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="qgdict.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="qgdict.ii"

IyAzOCAicWdkaWN0LmNwcCIKIyAxICJxZ2RpY3QuaCIgMQojIDQyICJxZ2RpY3QuaCIKIyAxICJx
Y29sbGVjdGlvbi5oIiAxCiMgNDIgInFjb2xsZWN0aW9uLmgiCiMgMSAicWdsb2JhbC5oIiAxCiMg
MzI4ICJxZ2xvYmFsLmgiCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1Y2hhcjsKdHlwZWRlZiB1bnNp
Z25lZCBzaG9ydCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgdWludDsKdHlwZWRlZiB1bnNpZ25l
ZCBsb25nIHVsb25nOwp0eXBlZGVmIGNoYXIgKnBjaGFyOwp0eXBlZGVmIHVjaGFyICpwdWNoYXI7
CnR5cGVkZWYgY29uc3QgY2hhciAqcGNjaGFyOwoKCgoKCgoKY29uc3QgYm9vbCBGQUxTRSA9IDA7
CmNvbnN0IGJvb2wgVFJVRSA9ICEwOwojIDM2NiAicWdsb2JhbC5oIgppbmxpbmUgaW50IHFSb3Vu
ZCggZG91YmxlIGQgKQp7CiAgICByZXR1cm4gZCA+IDAuMCA/IGludChkKzAuNSkgOiBpbnQoZC0w
LjUpOwp9CiMgMzc5ICJxZ2xvYmFsLmgiCnR5cGVkZWYgc2lnbmVkIGNoYXIgSU5UODsKdHlwZWRl
ZiB1bnNpZ25lZCBjaGFyIFVJTlQ4Owp0eXBlZGVmIHNob3J0IElOVDE2Owp0eXBlZGVmIHVuc2ln
bmVkIHNob3J0IFVJTlQxNjsKdHlwZWRlZiBpbnQgSU5UMzI7CnR5cGVkZWYgdW5zaWduZWQgaW50
IFVJTlQzMjsKCgp0eXBlZGVmIHNpZ25lZCBjaGFyIFFfSU5UODsKdHlwZWRlZiB1bnNpZ25lZCBj
aGFyIFFfVUlOVDg7CnR5cGVkZWYgc2hvcnQgUV9JTlQxNjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9y
dCBRX1VJTlQxNjsKdHlwZWRlZiBpbnQgUV9JTlQzMjsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgUV9V
SU5UMzI7CnR5cGVkZWYgbG9uZyBRX0lOVDY0Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgUV9VSU5U
NjQ7CgoKCgoKY2xhc3MgUURhdGFTdHJlYW07CiMgNDA5ICJxZ2xvYmFsLmgiCiMgMSAicWZlYXR1
cmVzLmgiIDEKIyA2NCAicWZlYXR1cmVzLmgiCiMgMSAicWNvbmZpZy5oIiAxCiMgNjUgInFmZWF0
dXJlcy5oIiAyCiMgNDEwICJxZ2xvYmFsLmgiIDIKIyA0NDcgInFnbG9iYWwuaCIKICAgICAgICAg
Y29uc3QgY2hhciAqcVZlcnNpb24oKTsKICAgICAgICAgYm9vbCBxU3lzSW5mbyggaW50ICp3b3Jk
U2l6ZSwgYm9vbCAqYmlnRW5kaWFuICk7CiMgNTExICJxZ2xvYmFsLmgiCiAgICAgICAgIHZvaWQg
cURlYnVnKCBjb25zdCBjaGFyICosIC4uLiApCgogICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAo
cHJpbnRmLCAxLCAyKSkpCgo7CgogICAgICAgICB2b2lkIHFXYXJuaW5nKCBjb25zdCBjaGFyICos
IC4uLiApCgogICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCgo7Cgog
ICAgICAgICB2b2lkIHFGYXRhbCggY29uc3QgY2hhciAqLCAuLi4gKQoKICAgIF9fYXR0cmlidXRl
X18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQoKOwoKCgoKCgoKICAgICAgICAgdm9pZCBkZWJ1
ZyggY29uc3QgY2hhciAqLCAuLi4gKQoKICAgIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50
ZiwgMSwgMikpKQoKOwoKICAgICAgICAgdm9pZCB3YXJuaW5nKCBjb25zdCBjaGFyICosIC4uLiAp
CgogICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCgo7CgogICAgICAg
ICB2b2lkIGZhdGFsKCBjb25zdCBjaGFyICosIC4uLiApCgogICAgX19hdHRyaWJ1dGVfXyAoKGZv
cm1hdCAocHJpbnRmLCAxLCAyKSkpCgo7CiMgNTcwICJxZ2xvYmFsLmgiCiAgICAgICAgIGJvb2wg
cXRfY2hlY2tfcG9pbnRlciggYm9vbCBjLCBjb25zdCBjaGFyICosIGludCApOwoKCgoKCgoKZW51
bSBRdE1zZ1R5cGUgeyBRdERlYnVnTXNnLCBRdFdhcm5pbmdNc2csIFF0RmF0YWxNc2cgfTsKCnR5
cGVkZWYgdm9pZCAoKm1zZ19oYW5kbGVyKShRdE1zZ1R5cGUsIGNvbnN0IGNoYXIgKik7CiAgICAg
ICAgIG1zZ19oYW5kbGVyIHFJbnN0YWxsTXNnSGFuZGxlciggbXNnX2hhbmRsZXIgKTsKCgogICAg
ICAgICB2b2lkIHFTdXBwcmVzc09ic29sZXRlV2FybmluZ3MoIGJvb2wgPSBUUlVFICk7CgoKCiAg
ICAgICAgIHZvaWQgcU9ic29sZXRlKCBjb25zdCBjaGFyICpvYmosIGNvbnN0IGNoYXIgKm9sZGZ1
bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuZXdmdW5jICk7CiAgICAg
ICAgIHZvaWQgcU9ic29sZXRlKCBjb25zdCBjaGFyICpvYmosIGNvbnN0IGNoYXIgKm9sZGZ1bmMg
KTsKICAgICAgICAgdm9pZCBxT2Jzb2xldGUoIGNvbnN0IGNoYXIgKm1lc3NhZ2UgKTsKIyA0MyAi
cWNvbGxlY3Rpb24uaCIgMgoKCgpjbGFzcyBRR1ZlY3RvcjsKY2xhc3MgUUdMaXN0OwpjbGFzcyBR
R0RpY3Q7CgoKY2xhc3MgUUNvbGxlY3Rpb24KewpwdWJsaWM6CiAgICBib29sIGF1dG9EZWxldGUo
KSBjb25zdCB7IHJldHVybiBkZWxfaXRlbTsgfQogICAgdm9pZCBzZXRBdXRvRGVsZXRlKCBib29s
IGVuYWJsZSApIHsgZGVsX2l0ZW0gPSBlbmFibGU7IH0KCiAgICB2aXJ0dWFsIHVpbnQgY291bnQo
KSBjb25zdCA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKSA9IDA7CgogICAgdHlwZWRlZiB2
b2lkICpJdGVtOwoKcHJvdGVjdGVkOgogICAgUUNvbGxlY3Rpb24oKSB7IGRlbF9pdGVtID0gRkFM
U0U7IH0KICAgIFFDb2xsZWN0aW9uKGNvbnN0IFFDb2xsZWN0aW9uICYpIHsgZGVsX2l0ZW0gPSBG
QUxTRTsgfQogICAgdmlydHVhbCB+UUNvbGxlY3Rpb24oKSB7fQoKICAgIGJvb2wgZGVsX2l0ZW07
CgogICAgdmlydHVhbCBJdGVtIG5ld0l0ZW0oIEl0ZW0gKTsKICAgIHZpcnR1YWwgdm9pZCBkZWxl
dGVJdGVtKCBJdGVtICk7Cn07CiMgNDMgInFnZGljdC5oIiAyCiMgMSAicXN0cmluZy5oIiAxCiMg
NDMgInFzdHJpbmcuaCIKIyAxICJxY3N0cmluZy5oIiAxCiMgNDMgInFjc3RyaW5nLmgiCiMgMSAi
cWFycmF5LmgiIDEKIyA0MiAicWFycmF5LmgiCiMgMSAicWdhcnJheS5oIiAxCiMgNDIgInFnYXJy
YXkuaCIKIyAxICJxc2hhcmVkLmgiIDEKIyA0MiAicXNoYXJlZC5oIgojIDEgInFnbG9iYWwuaCIg
MQojIDQzICJxc2hhcmVkLmgiIDIKCgoKc3RydWN0IFFTaGFyZWQKewogICAgUVNoYXJlZCgpIHsg
Y291bnQgPSAxOyB9CiAgICB2b2lkIHJlZigpIHsgY291bnQrKzsgfQogICAgYm9vbCBkZXJlZigp
IHsgcmV0dXJuICEtLWNvdW50OyB9CiAgICB1aW50IGNvdW50Owp9OwojIDQzICJxZ2FycmF5Lmgi
IDIKCgoKY2xhc3MgUUdBcnJheQp7CmZyaWVuZCBjbGFzcyBRQnVmZmVyOwpwdWJsaWM6CgogICAg
c3RydWN0IGFycmF5X2RhdGEgOiBwdWJsaWMgUVNoYXJlZCB7CiAgICAgICAgYXJyYXlfZGF0YSgp
IHsgZGF0YT0wOyBsZW49MDsgfQogICAgICAgIGNoYXIgKmRhdGE7CiAgICAgICAgdWludCBsZW47
CiAgICB9OwogICAgUUdBcnJheSgpOwpwcm90ZWN0ZWQ6CiAgICBRR0FycmF5KCBpbnQsIGludCAp
OwogICAgUUdBcnJheSggaW50IHNpemUgKTsKICAgIFFHQXJyYXkoIGNvbnN0IFFHQXJyYXkgJmEg
KTsKICAgIHZpcnR1YWwgflFHQXJyYXkoKTsKCiAgICBRR0FycmF5ICZvcGVyYXRvcj0oIGNvbnN0
IFFHQXJyYXkgJmEgKSB7IHJldHVybiBhc3NpZ24oIGEgKTsgfQoKICAgIHZpcnR1YWwgdm9pZCBk
ZXRhY2goKSB7IGR1cGxpY2F0ZSgqdGhpcyk7IH0KCiAgICBjaGFyICpkYXRhKCkgY29uc3QgeyBy
ZXR1cm4gc2hkLT5kYXRhOyB9CiAgICB1aW50IG5yZWZzKCkgY29uc3QgeyByZXR1cm4gc2hkLT5j
b3VudDsgfQogICAgdWludCBzaXplKCkgY29uc3QgeyByZXR1cm4gc2hkLT5sZW47IH0KICAgIGJv
b2wgaXNFcXVhbCggY29uc3QgUUdBcnJheSAmYSApIGNvbnN0OwoKICAgIGJvb2wgcmVzaXplKCB1
aW50IG5ld3NpemUgKTsKCiAgICBib29sIGZpbGwoIGNvbnN0IGNoYXIgKmQsIGludCBsZW4sIHVp
bnQgc3ogKTsKCiAgICBRR0FycmF5ICZhc3NpZ24oIGNvbnN0IFFHQXJyYXkgJmEgKTsKICAgIFFH
QXJyYXkgJmFzc2lnbiggY29uc3QgY2hhciAqZCwgdWludCBsZW4gKTsKICAgIFFHQXJyYXkgJmR1
cGxpY2F0ZSggY29uc3QgUUdBcnJheSAmYSApOwogICAgUUdBcnJheSAmZHVwbGljYXRlKCBjb25z
dCBjaGFyICpkLCB1aW50IGxlbiApOwogICAgdm9pZCBzdG9yZSggY29uc3QgY2hhciAqZCwgdWlu
dCBsZW4gKTsKCiAgICBhcnJheV9kYXRhICpzaGFyZWRCbG9jaygpIGNvbnN0IHsgcmV0dXJuIHNo
ZDsgfQogICAgdm9pZCBzZXRTaGFyZWRCbG9jayggYXJyYXlfZGF0YSAqcCApIHsgc2hkPShhcnJh
eV9kYXRhKilwOyB9CgogICAgUUdBcnJheSAmc2V0UmF3RGF0YSggY29uc3QgY2hhciAqZCwgdWlu
dCBsZW4gKTsKICAgIHZvaWQgcmVzZXRSYXdEYXRhKCBjb25zdCBjaGFyICpkLCB1aW50IGxlbiAp
OwoKICAgIGludCBmaW5kKCBjb25zdCBjaGFyICpkLCB1aW50IGluZGV4LCB1aW50IHN6ICkgY29u
c3Q7CiAgICBpbnQgY29udGFpbnMoIGNvbnN0IGNoYXIgKmQsIHVpbnQgc3ogKSBjb25zdDsKCiAg
ICB2b2lkIHNvcnQoIHVpbnQgc3ogKTsKICAgIGludCBic2VhcmNoKCBjb25zdCBjaGFyICpkLCB1
aW50IHN6ICkgY29uc3Q7CgogICAgY2hhciAqYXQoIHVpbnQgaW5kZXggKSBjb25zdDsKCiAgICBi
b29sIHNldEV4cGFuZCggdWludCBpbmRleCwgY29uc3QgY2hhciAqZCwgdWludCBzeiApOwoKcHJv
dGVjdGVkOgogICAgdmlydHVhbCBhcnJheV9kYXRhICpuZXdEYXRhKCk7CiAgICB2aXJ0dWFsIHZv
aWQgZGVsZXRlRGF0YSggYXJyYXlfZGF0YSAqcCApOwoKcHJpdmF0ZToKICAgIHN0YXRpYyB2b2lk
IG1zZ19pbmRleCggdWludCApOwogICAgYXJyYXlfZGF0YSAqc2hkOwp9OwoKCmlubGluZSBjaGFy
ICpRR0FycmF5OjphdCggdWludCBpbmRleCApIGNvbnN0CnsKCiAgICBpZiAoIGluZGV4ID49IHNp
emUoKSApIHsKICAgICAgICBtc2dfaW5kZXgoIGluZGV4ICk7CiAgICAgICAgaW5kZXggPSAwOwog
ICAgfQoKICAgIHJldHVybiAmc2hkLT5kYXRhW2luZGV4XTsKfQojIDQzICJxYXJyYXkuaCIgMgoK
Cgp0ZW1wbGF0ZTxjbGFzcyB0eXBlPiBjbGFzcyBRQXJyYXkgOiBwdWJsaWMgUUdBcnJheQp7CnB1
YmxpYzoKICAgIHR5cGVkZWYgdHlwZSogSXRlcmF0b3I7CiAgICB0eXBlZGVmIGNvbnN0IHR5cGUq
IENvbnN0SXRlcmF0b3I7CiAgICB0eXBlZGVmIHR5cGUgVmFsdWVUeXBlOwoKcHJvdGVjdGVkOgog
ICAgUUFycmF5KCBpbnQsIGludCApIDogUUdBcnJheSggMCwgMCApIHt9CgpwdWJsaWM6CiAgICBR
QXJyYXkoKSB7fQogICAgUUFycmF5KCBpbnQgc2l6ZSApIDogUUdBcnJheShzaXplKnNpemVvZih0
eXBlKSkge30KICAgIFFBcnJheSggY29uc3QgUUFycmF5PHR5cGU+ICZhICkgOiBRR0FycmF5KGEp
IHt9CiAgIH5RQXJyYXkoKSB7fQogICAgUUFycmF5PHR5cGU+ICZvcGVyYXRvcj0oY29uc3QgUUFy
cmF5PHR5cGU+ICZhKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIChR
QXJyYXk8dHlwZT4mKVFHQXJyYXk6OmFzc2lnbihhKTsgfQogICAgdHlwZSAqZGF0YSgpIGNvbnN0
IHsgcmV0dXJuICh0eXBlICopUUdBcnJheTo6ZGF0YSgpOyB9CiAgICB1aW50IG5yZWZzKCkgY29u
c3QgeyByZXR1cm4gUUdBcnJheTo6bnJlZnMoKTsgfQogICAgdWludCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gUUdBcnJheTo6c2l6ZSgpL3NpemVvZih0eXBlKTsgfQogICAgdWludCBjb3VudCgpIGNv
bnN0IHsgcmV0dXJuIHNpemUoKTsgfQogICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4g
UUdBcnJheTo6c2l6ZSgpID09IDA7IH0KICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4g
UUdBcnJheTo6ZGF0YSgpID09IDA7IH0KICAgIGJvb2wgcmVzaXplKCB1aW50IHNpemUgKSB7IHJl
dHVybiBRR0FycmF5OjpyZXNpemUoc2l6ZSpzaXplb2YodHlwZSkpOyB9CiAgICBib29sIHRydW5j
YXRlKCB1aW50IHBvcyApIHsgcmV0dXJuIFFHQXJyYXk6OnJlc2l6ZShwb3Mqc2l6ZW9mKHR5cGUp
KTsgfQogICAgYm9vbCBmaWxsKCBjb25zdCB0eXBlICZkLCBpbnQgc2l6ZSA9IC0xICkKICAgICAg
ICB7IHJldHVybiBRR0FycmF5OjpmaWxsKChjaGFyKikmZCxzaXplLHNpemVvZih0eXBlKSApOyB9
CiAgICB2b2lkIGRldGFjaCgpIHsgUUdBcnJheTo6ZGV0YWNoKCk7IH0KICAgIFFBcnJheTx0eXBl
PiBjb3B5KCkgY29uc3QKICAgICAgICB7IFFBcnJheTx0eXBlPiB0bXA7IHJldHVybiB0bXAuZHVw
bGljYXRlKCp0aGlzKTsgfQogICAgUUFycmF5PHR5cGU+JiBhc3NpZ24oIGNvbnN0IFFBcnJheTx0
eXBlPiYgYSApCiAgICAgICAgeyByZXR1cm4gKFFBcnJheTx0eXBlPiYpUUdBcnJheTo6YXNzaWdu
KGEpOyB9CiAgICBRQXJyYXk8dHlwZT4mIGFzc2lnbiggY29uc3QgdHlwZSAqYSwgdWludCBuICkK
ICAgICAgICB7IHJldHVybiAoUUFycmF5PHR5cGU+JilRR0FycmF5Ojphc3NpZ24oKGNoYXIqKWEs
bipzaXplb2YodHlwZSkpOyB9CiAgICBRQXJyYXk8dHlwZT4mIGR1cGxpY2F0ZSggY29uc3QgUUFy
cmF5PHR5cGU+JiBhICkKICAgICAgICB7IHJldHVybiAoUUFycmF5PHR5cGU+JilRR0FycmF5Ojpk
dXBsaWNhdGUoYSk7IH0KICAgIFFBcnJheTx0eXBlPiYgZHVwbGljYXRlKCBjb25zdCB0eXBlICph
LCB1aW50IG4gKQogICAgICAgIHsgcmV0dXJuIChRQXJyYXk8dHlwZT4mKVFHQXJyYXk6OmR1cGxp
Y2F0ZSgoY2hhciopYSxuKnNpemVvZih0eXBlKSk7IH0KICAgIFFBcnJheTx0eXBlPiYgc2V0UmF3
RGF0YSggY29uc3QgdHlwZSAqYSwgdWludCBuICkKICAgICAgICB7IHJldHVybiAoUUFycmF5PHR5
cGU+JilRR0FycmF5OjpzZXRSYXdEYXRhKChjaGFyKilhLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4qc2l6ZW9mKHR5cGUpKTsgfQogICAgdm9p
ZCByZXNldFJhd0RhdGEoIGNvbnN0IHR5cGUgKmEsIHVpbnQgbiApCiAgICAgICAgeyBRR0FycmF5
OjpyZXNldFJhd0RhdGEoKGNoYXIqKWEsbipzaXplb2YodHlwZSkpOyB9CiAgICBpbnQgZmluZCgg
Y29uc3QgdHlwZSAmZCwgdWludCBpPTAgKSBjb25zdAogICAgICAgIHsgcmV0dXJuIFFHQXJyYXk6
OmZpbmQoKGNoYXIqKSZkLGksc2l6ZW9mKHR5cGUpKTsgfQogICAgaW50IGNvbnRhaW5zKCBjb25z
dCB0eXBlICZkICkgY29uc3QKICAgICAgICB7IHJldHVybiBRR0FycmF5Ojpjb250YWlucygoY2hh
ciopJmQsc2l6ZW9mKHR5cGUpKTsgfQogICAgdm9pZCBzb3J0KCkgeyBRR0FycmF5Ojpzb3J0KHNp
emVvZih0eXBlKSk7IH0KICAgIGludCBic2VhcmNoKCBjb25zdCB0eXBlICZkICkgY29uc3QKICAg
ICAgICB7IHJldHVybiBRR0FycmF5Ojpic2VhcmNoKChjb25zdCBjaGFyKikmZCxzaXplb2YodHlw
ZSkpOyB9CiAgICB0eXBlJiBvcGVyYXRvcltdKCBpbnQgaSApIGNvbnN0CiAgICAgICAgeyByZXR1
cm4gKHR5cGUgJikoKih0eXBlICopUUdBcnJheTo6YXQoaSpzaXplb2YodHlwZSkpKTsgfQogICAg
dHlwZSYgYXQoIHVpbnQgaSApIGNvbnN0CiAgICAgICAgeyByZXR1cm4gKHR5cGUgJikoKih0eXBl
ICopUUdBcnJheTo6YXQoaSpzaXplb2YodHlwZSkpKTsgfQogICAgICAgICBvcGVyYXRvciBjb25z
dCB0eXBlKigpIGNvbnN0IHsgcmV0dXJuIChjb25zdCB0eXBlICopUUdBcnJheTo6ZGF0YSgpOyB9
CiAgICBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFBcnJheTx0eXBlPiAmYSApIGNvbnN0IHsgcmV0
dXJuIGlzRXF1YWwoYSk7IH0KICAgIGJvb2wgb3BlcmF0b3IhPSggY29uc3QgUUFycmF5PHR5cGU+
ICZhICkgY29uc3QgeyByZXR1cm4gIWlzRXF1YWwoYSk7IH0KICAgIEl0ZXJhdG9yIGJlZ2luKCkg
eyByZXR1cm4gZGF0YSgpOyB9CiAgICBJdGVyYXRvciBlbmQoKSB7IHJldHVybiBkYXRhKCkgKyBz
aXplKCk7IH0KICAgIENvbnN0SXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBkYXRhKCk7
IH0KICAgIENvbnN0SXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gZGF0YSgpICsgc2l6ZSgp
OyB9Cn07CiMgNDQgInFjc3RyaW5nLmgiIDIKCgojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIg
MSAzCiMgMjYgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0
dXJlcy5oIiAxIDMKIyAyODMgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9p
bmNsdWRlL3N5cy9jZGVmcy5oIiAxIDMKIyAyODQgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAy
IDMKIyAzMTEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2du
dS9zdHVicy5oIiAxIDMKIyAzMTIgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAyNyAi
L3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgoKIyAxICIvdXNyL2xv
Y2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAx
IDMKIyAxOTkgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4xL2lu
Y2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90OwojIDM0ICIvdXNy
L2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCgpleHRlcm4gdm9pZCAqbWVtY3B5ICh2b2lkICpfX3Jl
c3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpfX3Jlc3Ry
aWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAqbWVtbW92ZSAo
dm9pZCAqX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93
ICgpOwoKCgoKCmV4dGVybiB2b2lkICptZW1jY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwg
X19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLAogICAgICAgICAgICAgICAgICAgICAgaW50
IF9fYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkICptZW1zZXQg
KHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBt
ZW1jbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXplX3QgX19u
KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB2b2lk
ICptZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQogICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiB2b2lkICpyYXdt
ZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19wdXJlX18pKTsKCgpleHRlcm4gdm9pZCAqbWVtcmNociAoX19jb25zdCB2b2lkICpfX3Ms
IGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1
cmVfXykpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3Qs
IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBj
aGFyICpzdHJuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7
CgoKZXh0ZXJuIGNoYXIgKnN0cmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJu
Y2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
c3JjLAogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBzdHJjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAg
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBzdHJuY21w
IChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAg
ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0cmNv
bGwgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHNpemVfdCBzdHJ4ZnJtIChjaGFy
ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCiMgMSAiL3Vzci9p
bmNsdWRlL3hsb2NhbGUuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDMKdHlw
ZWRlZiBzdHJ1Y3QgX19sb2NhbGVfc3RydWN0CnsKCiAgc3RydWN0IGxvY2FsZV9kYXRhICpfX2xv
Y2FsZXNbMTNdOwoKCiAgY29uc3QgdW5zaWduZWQgc2hvcnQgaW50ICpfX2N0eXBlX2I7CiAgY29u
c3QgaW50ICpfX2N0eXBlX3RvbG93ZXI7CiAgY29uc3QgaW50ICpfX2N0eXBlX3RvdXBwZXI7Cn0g
Kl9fbG9jYWxlX3Q7CiMgMTA5ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCmV4dGVybiBp
bnQgX19zdHJjb2xsX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBf
X2xvY2FsZV90IF9fbCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
CmV4dGVybiBzaXplX3QgX19zdHJ4ZnJtX2wgKGNoYXIgKl9fZGVzdCwgX19jb25zdCBjaGFyICpf
X3NyYywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBf
X2wpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmR1cCAoX19jb25zdCBjaGFyICpfX3Mp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgoKCmV4dGVybiBjaGFy
ICpzdHJuZHVwIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19uKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CiMgMTU1ICIvdXNyL2luY2x1ZGUvc3Ry
aW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0cmNociAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2Mp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnJj
aHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJjaHJudWwgKF9fY29uc3QgY2hhciAqX19z
LCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVy
biBzaXplX3Qgc3RyY3NwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19yZWpl
Y3QpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHNp
emVfdCBzdHJzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0
cnBicmsgKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnN0ciAo
X19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKQogICAgIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gY2hhciAqc3RyY2Fz
ZXN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gY2hhciAq
c3RydG9rIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
ZGVsaW0pCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpfX3N0cnRva19yIChjaGFyICpf
X3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJp
Y3QgX19zYXZlX3B0cikgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RydG9rX3IgKGNoYXIgKl9f
cmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKCgoK
CgoKZXh0ZXJuIHZvaWQgKm1lbW1lbSAoX19jb25zdCB2b2lkICpfX2hheXN0YWNrLCBzaXplX3Qg
X19oYXlzdGFja2xlbiwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpfX25lZWRs
ZSwgc2l6ZV90IF9fbmVlZGxlbGVuKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1
cmVfXykpOwoKCgpleHRlcm4gdm9pZCAqX19tZW1wY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3Jj
LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgKm1lbXBjcHkgKHZvaWQgKl9fcmVz
dHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpfX3Jlc3Ry
aWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBzaXplX3Qgc3RybGVu
IChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7
CgoKCgpleHRlcm4gc2l6ZV90IHN0cm5sZW4gKF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVf
dCBfX21heGxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoK
CmV4dGVybiBjaGFyICpzdHJlcnJvciAoaW50IF9fZXJybnVtKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGNoYXIgKnN0cmVycm9yX3IgKGludCBfX2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1
ZmxlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBfX2J6ZXJvICh2b2lkICpfX3MsIHNpemVf
dCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBiY29weSAoX19jb25zdCB2b2lkICpfX3Ny
Yywgdm9pZCAqX19kZXN0LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBiemVy
byAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGJjbXAgKF9f
Y29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICppbmRleCAo
X19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1
cmVfXykpOwoKCmV4dGVybiBjaGFyICpyaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19j
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGludCBmZnMg
KGludCBfX2kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChjb25zdCkpOwoKCgoKZXh0ZXJuIGlu
dCBmZnNsIChsb25nIGludCBfX2wpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChjb25zdCkpOwoK
X19leHRlbnNpb25fXyBleHRlcm4gaW50IGZmc2xsIChsb25nIGxvbmcgaW50IF9fbGwpCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKGNvbnN0KSk7CgoKCgpleHRlcm4gaW50IHN0cmNhc2Vj
bXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RybmNhc2VjbXAgKF9f
Y29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBpbnQgX19zdHJj
YXNlY21wX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgX19zdHJuY2FzZWNtcF9sIChfX2NvbnN0IGNo
YXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBfX24sIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnNlcCAoY2hhciAqKl9fcmVzdHJp
Y3QgX19zdHJpbmdwLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19kZWxpbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHN0cnZlcnNjbXAgKF9fY29uc3Qg
Y2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpzdHJzaWduYWwgKGludCBfX3NpZykgdGhy
b3cgKCk7CgoKZXh0ZXJuIGNoYXIgKl9fc3RwY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwpleHRlcm4gY2hh
ciAqc3RwY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19zdHBuY3B5IChjaGFy
ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnN0
cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRl
cm4gY2hhciAqc3RyZnJ5IChjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQg
Km1lbWZyb2IgKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBj
aGFyICpiYXNlbmFtZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsKIyAzNjMg
Ii91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwp9CiMgNDcgInFjc3RyaW5nLmgiIDIKIyA3OCAicWNz
dHJpbmcuaCIKICAgICAgICAgdm9pZCAqcW1lbW1vdmUoIHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAq
c3JjLCB1aW50IGxlbiApOwoKCgoKCiAgICAgICAgIGNoYXIgKnFzdHJkdXAoIGNvbnN0IGNoYXIg
KiApOwoKICAgICAgICAgaW5saW5lIHVpbnQgY3N0cmxlbiggY29uc3QgY2hhciAqc3RyICkKeyBy
ZXR1cm4gc3RybGVuKHN0cik7IH0KCiAgICAgICAgIGlubGluZSB1aW50IHFzdHJsZW4oIGNvbnN0
IGNoYXIgKnN0ciApCnsgcmV0dXJuIHN0ciA/IHN0cmxlbihzdHIpIDogMDsgfQoKICAgICAgICAg
aW5saW5lIGNoYXIgKmNzdHJjcHkoIGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjICkKeyByZXR1
cm4gc3RyY3B5KGRzdCxzcmMpOyB9CgogICAgICAgICBpbmxpbmUgY2hhciAqcXN0cmNweSggY2hh
ciAqZHN0LCBjb25zdCBjaGFyICpzcmMgKQp7IHJldHVybiBzcmMgPyBzdHJjcHkoZHN0LCBzcmMp
IDogMDsgfQoKICAgICAgICAgY2hhciAqcXN0cm5jcHkoIGNoYXIgKmRzdCwgY29uc3QgY2hhciAq
c3JjLCB1aW50IGxlbiApOwoKICAgICAgICAgaW5saW5lIGludCBjc3RyY21wKCBjb25zdCBjaGFy
ICpzdHIxLCBjb25zdCBjaGFyICpzdHIyICkKeyByZXR1cm4gc3RyY21wKHN0cjEsc3RyMik7IH0K
CiAgICAgICAgIGlubGluZSBpbnQgcXN0cmNtcCggY29uc3QgY2hhciAqc3RyMSwgY29uc3QgY2hh
ciAqc3RyMiApCnsgcmV0dXJuIChzdHIxICYmIHN0cjIpID8gc3RyY21wKHN0cjEsc3RyMikgOiAo
aW50KSgobG9uZylzdHIyIC0gKGxvbmcpc3RyMSk7IH0KCiAgICAgICAgIGlubGluZSBpbnQgY3N0
cm5jbXAoIGNvbnN0IGNoYXIgKnN0cjEsIGNvbnN0IGNoYXIgKnN0cjIsIHVpbnQgbGVuICkKeyBy
ZXR1cm4gc3RybmNtcChzdHIxLHN0cjIsbGVuKTsgfQoKICAgICAgICAgaW5saW5lIGludCBxc3Ry
bmNtcCggY29uc3QgY2hhciAqc3RyMSwgY29uc3QgY2hhciAqc3RyMiwgdWludCBsZW4gKQp7IHJl
dHVybiAoc3RyMSAmJiBzdHIyKSA/IHN0cm5jbXAoc3RyMSxzdHIyLGxlbikgOgogICAgICAgICAg
ICAgICAgICAgICAgICAgIChpbnQpKChsb25nKXN0cjIgLSAobG9uZylzdHIxKTsgfQoKICAgICAg
ICAgaW50IHFzdHJpY21wKCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiApOwoKICAgICAgICAg
aW50IHFzdHJuaWNtcCggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHVpbnQgbGVuICk7CiMg
MTQ3ICJxY3N0cmluZy5oIgogICAgICAgICBRX1VJTlQxNiBxQ2hlY2tzdW0oIGNvbnN0IGNoYXIg
KnMsIHVpbnQgbGVuICk7CiMgMTU2ICJxY3N0cmluZy5oIgp0eXBlZGVmIFFBcnJheTxjaGFyPiBR
Qnl0ZUFycmF5OwoKCgoKCgogICAgICAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFT
dHJlYW0gJiwgY29uc3QgUUJ5dGVBcnJheSAmICk7CiAgICAgICAgIFFEYXRhU3RyZWFtICZvcGVy
YXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRQnl0ZUFycmF5ICYgKTsKIyAxNzMgInFjc3RyaW5nLmgi
CmNsYXNzIFFSZWdFeHA7CgpjbGFzcyBRQ1N0cmluZyA6IHB1YmxpYyBRQnl0ZUFycmF5CnsKcHVi
bGljOgogICAgUUNTdHJpbmcoKSB7fQogICAgUUNTdHJpbmcoIGludCBzaXplICk7CiAgICBRQ1N0
cmluZyggY29uc3QgUUNTdHJpbmcgJnMgKSA6IFFCeXRlQXJyYXkoIHMgKSB7fQogICAgUUNTdHJp
bmcoIGNvbnN0IGNoYXIgKnN0ciApOwogICAgUUNTdHJpbmcoIGNvbnN0IGNoYXIgKnN0ciwgdWlu
dCBtYXhsZW4gKTsKCiAgICBRQ1N0cmluZyAmb3BlcmF0b3I9KCBjb25zdCBRQ1N0cmluZyAmcyAp
OwogICAgUUNTdHJpbmcgJm9wZXJhdG9yPSggY29uc3QgY2hhciAqc3RyICk7CgogICAgYm9vbCBp
c051bGwoKSBjb25zdDsKICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwogICAgdWludCBsZW5ndGgo
KSBjb25zdDsKICAgIGJvb2wgcmVzaXplKCB1aW50IG5ld2xlbiApOwogICAgYm9vbCB0cnVuY2F0
ZSggdWludCBwb3MgKTsKICAgIGJvb2wgZmlsbCggY2hhciBjLCBpbnQgbGVuID0gLTEgKTsKCiAg
ICBRQ1N0cmluZyBjb3B5KCkgY29uc3Q7CgogICAgUUNTdHJpbmcgJnNwcmludGYoIGNvbnN0IGNo
YXIgKmZvcm1hdCwgLi4uICk7CgogICAgaW50IGZpbmQoIGNoYXIgYywgaW50IGluZGV4PTAsIGJv
b2wgY3M9VFJVRSApIGNvbnN0OwogICAgaW50IGZpbmQoIGNvbnN0IGNoYXIgKnN0ciwgaW50IGlu
ZGV4PTAsIGJvb2wgY3M9VFJVRSApIGNvbnN0OwogICAgaW50IGZpbmQoIGNvbnN0IFFSZWdFeHAg
JiwgaW50IGluZGV4PTAgKSBjb25zdDsKICAgIGludCBmaW5kUmV2KCBjaGFyIGMsIGludCBpbmRl
eD0tMSwgYm9vbCBjcz1UUlVFKSBjb25zdDsKICAgIGludCBmaW5kUmV2KCBjb25zdCBjaGFyICpz
dHIsIGludCBpbmRleD0tMSwgYm9vbCBjcz1UUlVFKSBjb25zdDsKICAgIGludCBmaW5kUmV2KCBj
b25zdCBRUmVnRXhwICYsIGludCBpbmRleD0tMSApIGNvbnN0OwogICAgaW50IGNvbnRhaW5zKCBj
aGFyIGMsIGJvb2wgY3M9VFJVRSApIGNvbnN0OwogICAgaW50IGNvbnRhaW5zKCBjb25zdCBjaGFy
ICpzdHIsIGJvb2wgY3M9VFJVRSApIGNvbnN0OwogICAgaW50IGNvbnRhaW5zKCBjb25zdCBRUmVn
RXhwICYgKSBjb25zdDsKCiAgICBRQ1N0cmluZyBsZWZ0KCB1aW50IGxlbiApIGNvbnN0OwogICAg
UUNTdHJpbmcgcmlnaHQoIHVpbnQgbGVuICkgY29uc3Q7CiAgICBRQ1N0cmluZyBtaWQoIHVpbnQg
aW5kZXgsIHVpbnQgbGVuPTB4ZmZmZmZmZmYpIGNvbnN0OwoKICAgIFFDU3RyaW5nIGxlZnRKdXN0
aWZ5KCB1aW50IHdpZHRoLCBjaGFyIGZpbGw9JyAnLCBib29sIHRydW5jPUZBTFNFKWNvbnN0Owog
ICAgUUNTdHJpbmcgcmlnaHRKdXN0aWZ5KCB1aW50IHdpZHRoLCBjaGFyIGZpbGw9JyAnLGJvb2wg
dHJ1bmM9RkFMU0UpY29uc3Q7CgogICAgUUNTdHJpbmcgbG93ZXIoKSBjb25zdDsKICAgIFFDU3Ry
aW5nIHVwcGVyKCkgY29uc3Q7CgogICAgUUNTdHJpbmcgc3RyaXBXaGl0ZVNwYWNlKCkgY29uc3Q7
CiAgICBRQ1N0cmluZyBzaW1wbGlmeVdoaXRlU3BhY2UoKSBjb25zdDsKCiAgICBRQ1N0cmluZyAm
aW5zZXJ0KCB1aW50IGluZGV4LCBjb25zdCBjaGFyICogKTsKICAgIFFDU3RyaW5nICZpbnNlcnQo
IHVpbnQgaW5kZXgsIGNoYXIgKTsKICAgIFFDU3RyaW5nICZhcHBlbmQoIGNvbnN0IGNoYXIgKiAp
OwogICAgUUNTdHJpbmcgJnByZXBlbmQoIGNvbnN0IGNoYXIgKiApOwogICAgUUNTdHJpbmcgJnJl
bW92ZSggdWludCBpbmRleCwgdWludCBsZW4gKTsKICAgIFFDU3RyaW5nICZyZXBsYWNlKCB1aW50
IGluZGV4LCB1aW50IGxlbiwgY29uc3QgY2hhciAqICk7CiAgICBRQ1N0cmluZyAmcmVwbGFjZSgg
Y29uc3QgUVJlZ0V4cCAmLCBjb25zdCBjaGFyICogKTsKCiAgICBzaG9ydCB0b1Nob3J0KCBib29s
ICpvaz0wICkgY29uc3Q7CiAgICB1c2hvcnQgdG9VU2hvcnQoIGJvb2wgKm9rPTAgKSBjb25zdDsK
ICAgIGludCB0b0ludCggYm9vbCAqb2s9MCApIGNvbnN0OwogICAgdWludCB0b1VJbnQoIGJvb2wg
Km9rPTAgKSBjb25zdDsKICAgIGxvbmcgdG9Mb25nKCBib29sICpvaz0wICkgY29uc3Q7CiAgICB1
bG9uZyB0b1VMb25nKCBib29sICpvaz0wICkgY29uc3Q7CiAgICBmbG9hdCB0b0Zsb2F0KCBib29s
ICpvaz0wICkgY29uc3Q7CiAgICBkb3VibGUgdG9Eb3VibGUoIGJvb2wgKm9rPTAgKSBjb25zdDsK
CiAgICBRQ1N0cmluZyAmc2V0U3RyKCBjb25zdCBjaGFyICpzICk7CiAgICBRQ1N0cmluZyAmc2V0
TnVtKCBzaG9ydCApOwogICAgUUNTdHJpbmcgJnNldE51bSggdXNob3J0ICk7CiAgICBRQ1N0cmlu
ZyAmc2V0TnVtKCBpbnQgKTsKICAgIFFDU3RyaW5nICZzZXROdW0oIHVpbnQgKTsKICAgIFFDU3Ry
aW5nICZzZXROdW0oIGxvbmcgKTsKICAgIFFDU3RyaW5nICZzZXROdW0oIHVsb25nICk7CiAgICBR
Q1N0cmluZyAmc2V0TnVtKCBmbG9hdCwgY2hhciBmPSdnJywgaW50IHByZWM9NiApOwogICAgUUNT
dHJpbmcgJnNldE51bSggZG91YmxlLCBjaGFyIGY9J2cnLCBpbnQgcHJlYz02ICk7CgogICAgYm9v
bCBzZXRFeHBhbmQoIHVpbnQgaW5kZXgsIGNoYXIgYyApOwoKICAgICAgICAgICAgICAgIG9wZXJh
dG9yIGNvbnN0IGNoYXIgKigpIGNvbnN0OwogICAgUUNTdHJpbmcgJm9wZXJhdG9yKz0oIGNvbnN0
IGNoYXIgKnN0ciApOwogICAgUUNTdHJpbmcgJm9wZXJhdG9yKz0oIGNoYXIgYyApOwp9OwoKCgoK
CgogICAgICAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3Qg
UUNTdHJpbmcgJiApOwogICAgICAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJl
YW0gJiwgUUNTdHJpbmcgJiApOwoKCgoKCgppbmxpbmUgUUNTdHJpbmcgJlFDU3RyaW5nOjpvcGVy
YXRvcj0oIGNvbnN0IFFDU3RyaW5nICZzICkKeyByZXR1cm4gKFFDU3RyaW5nJilhc3NpZ24oIHMg
KTsgfQoKaW5saW5lIFFDU3RyaW5nICZRQ1N0cmluZzo6b3BlcmF0b3I9KCBjb25zdCBjaGFyICpz
dHIgKQp7IHJldHVybiAoUUNTdHJpbmcmKWR1cGxpY2F0ZSggc3RyLCBxc3RybGVuKHN0cikrMSAp
OyB9CgppbmxpbmUgYm9vbCBRQ1N0cmluZzo6aXNOdWxsKCkgY29uc3QKeyByZXR1cm4gZGF0YSgp
ID09IDA7IH0KCmlubGluZSBib29sIFFDU3RyaW5nOjppc0VtcHR5KCkgY29uc3QKeyByZXR1cm4g
ZGF0YSgpID09IDAgfHwgKmRhdGEoKSA9PSAnXDAnOyB9CgppbmxpbmUgdWludCBRQ1N0cmluZzo6
bGVuZ3RoKCkgY29uc3QKeyByZXR1cm4gcXN0cmxlbiggZGF0YSgpICk7IH0KCmlubGluZSBib29s
IFFDU3RyaW5nOjp0cnVuY2F0ZSggdWludCBwb3MgKQp7IHJldHVybiByZXNpemUocG9zKzEpOyB9
CgppbmxpbmUgUUNTdHJpbmcgUUNTdHJpbmc6OmNvcHkoKSBjb25zdAp7IHJldHVybiBRQ1N0cmlu
ZyggZGF0YSgpICk7IH0KCmlubGluZSBRQ1N0cmluZyAmUUNTdHJpbmc6OnByZXBlbmQoIGNvbnN0
IGNoYXIgKnMgKQp7IHJldHVybiBpbnNlcnQoMCxzKTsgfQoKaW5saW5lIFFDU3RyaW5nICZRQ1N0
cmluZzo6YXBwZW5kKCBjb25zdCBjaGFyICpzICkKeyByZXR1cm4gb3BlcmF0b3IrPShzKTsgfQoK
aW5saW5lIFFDU3RyaW5nICZRQ1N0cmluZzo6c2V0TnVtKCBzaG9ydCBuICkKeyByZXR1cm4gc2V0
TnVtKChsb25nKW4pOyB9CgppbmxpbmUgUUNTdHJpbmcgJlFDU3RyaW5nOjpzZXROdW0oIHVzaG9y
dCBuICkKeyByZXR1cm4gc2V0TnVtKCh1bG9uZyluKTsgfQoKaW5saW5lIFFDU3RyaW5nICZRQ1N0
cmluZzo6c2V0TnVtKCBpbnQgbiApCnsgcmV0dXJuIHNldE51bSgobG9uZyluKTsgfQoKaW5saW5l
IFFDU3RyaW5nICZRQ1N0cmluZzo6c2V0TnVtKCB1aW50IG4gKQp7IHJldHVybiBzZXROdW0oKHVs
b25nKW4pOyB9CgppbmxpbmUgUUNTdHJpbmcgJlFDU3RyaW5nOjpzZXROdW0oIGZsb2F0IG4sIGNo
YXIgZiwgaW50IHByZWMgKQp7IHJldHVybiBzZXROdW0oKGRvdWJsZSluLGYscHJlYyk7IH0KCmlu
bGluZSBRQ1N0cmluZzo6b3BlcmF0b3IgY29uc3QgY2hhciAqKCkgY29uc3QKeyByZXR1cm4gKGNv
bnN0IGNoYXIgKilkYXRhKCk7IH0KCgoKCgoKICAgICAgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9
PSggY29uc3QgUUNTdHJpbmcgJnMxLCBjb25zdCBRQ1N0cmluZyAmczIgKQp7IHJldHVybiBxc3Ry
Y21wKHMxLmRhdGEoKSxzMi5kYXRhKCkpID09IDA7IH0KCiAgICAgICAgIGlubGluZSBib29sIG9w
ZXJhdG9yPT0oIGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKQp7IHJldHVybiBx
c3RyY21wKHMxLmRhdGEoKSxzMikgPT0gMDsgfQoKICAgICAgICAgaW5saW5lIGJvb2wgb3BlcmF0
b3I9PSggY29uc3QgY2hhciAqczEsIGNvbnN0IFFDU3RyaW5nICZzMiApCnsgcmV0dXJuIHFzdHJj
bXAoczEsczIuZGF0YSgpKSA9PSAwOyB9CgogICAgICAgICBpbmxpbmUgYm9vbCBvcGVyYXRvciE9
KCBjb25zdCBRQ1N0cmluZyAmczEsIGNvbnN0IFFDU3RyaW5nICZzMiApCnsgcmV0dXJuIHFzdHJj
bXAoczEuZGF0YSgpLHMyLmRhdGEoKSkgIT0gMDsgfQoKICAgICAgICAgaW5saW5lIGJvb2wgb3Bl
cmF0b3IhPSggY29uc3QgUUNTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApCnsgcmV0dXJuIHFz
dHJjbXAoczEuZGF0YSgpLHMyKSAhPSAwOyB9CgogICAgICAgICBpbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KCBjb25zdCBjaGFyICpzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkKeyByZXR1cm4gcXN0cmNt
cChzMSxzMi5kYXRhKCkpICE9IDA7IH0KCiAgICAgICAgIGlubGluZSBib29sIG9wZXJhdG9yPCgg
Y29uc3QgUUNTdHJpbmcgJnMxLCBjb25zdCBRQ1N0cmluZyYgczIgKQp7IHJldHVybiBxc3RyY21w
KHMxLmRhdGEoKSxzMi5kYXRhKCkpIDwgMDsgfQoKICAgICAgICAgaW5saW5lIGJvb2wgb3BlcmF0
b3I8KCBjb25zdCBRQ1N0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICkKeyByZXR1cm4gcXN0cmNt
cChzMS5kYXRhKCksczIpIDwgMDsgfQoKICAgICAgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I8KCBj
b25zdCBjaGFyICpzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkKeyByZXR1cm4gcXN0cmNtcChzMSxz
Mi5kYXRhKCkpIDwgMDsgfQoKICAgICAgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I8PSggY29uc3Qg
UUNTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApCnsgcmV0dXJuIHFzdHJjbXAoczEuZGF0YSgp
LHMyKSA8PSAwOyB9CgogICAgICAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KCBjb25zdCBjaGFy
ICpzMSwgY29uc3QgUUNTdHJpbmcgJnMyICkKeyByZXR1cm4gcXN0cmNtcChzMSxzMi5kYXRhKCkp
IDw9IDA7IH0KCiAgICAgICAgIGlubGluZSBib29sIG9wZXJhdG9yPiggY29uc3QgUUNTdHJpbmcg
JnMxLCBjb25zdCBjaGFyICpzMiApCnsgcmV0dXJuIHFzdHJjbXAoczEuZGF0YSgpLHMyKSA+IDA7
IH0KCiAgICAgICAgIGlubGluZSBib29sIG9wZXJhdG9yPiggY29uc3QgY2hhciAqczEsIGNvbnN0
IFFDU3RyaW5nICZzMiApCnsgcmV0dXJuIHFzdHJjbXAoczEsczIuZGF0YSgpKSA+IDA7IH0KCiAg
ICAgICAgIGlubGluZSBib29sIG9wZXJhdG9yPj0oIGNvbnN0IFFDU3RyaW5nICZzMSwgY29uc3Qg
Y2hhciAqczIgKQp7IHJldHVybiBxc3RyY21wKHMxLmRhdGEoKSxzMikgPj0gMDsgfQoKICAgICAg
ICAgaW5saW5lIGJvb2wgb3BlcmF0b3I+PSggY29uc3QgY2hhciAqczEsIGNvbnN0IFFDU3RyaW5n
ICZzMiApCnsgcmV0dXJuIHFzdHJjbXAoczEsczIuZGF0YSgpKSA+PSAwOyB9CgogICAgICAgICBp
bmxpbmUgUUNTdHJpbmcgb3BlcmF0b3IrKCBjb25zdCBRQ1N0cmluZyAmczEsIGNvbnN0IFFDU3Ry
aW5nICZzMiApCnsKICAgIFFDU3RyaW5nIHRtcCggczEuZGF0YSgpICk7CiAgICB0bXAgKz0gczI7
CiAgICByZXR1cm4gdG1wOwp9CgogICAgICAgICBpbmxpbmUgUUNTdHJpbmcgb3BlcmF0b3IrKCBj
b25zdCBRQ1N0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICkKewogICAgUUNTdHJpbmcgdG1wKCBz
MS5kYXRhKCkgKTsKICAgIHRtcCArPSBzMjsKICAgIHJldHVybiB0bXA7Cn0KCiAgICAgICAgIGlu
bGluZSBRQ1N0cmluZyBvcGVyYXRvcisoIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBRQ1N0cmluZyAm
czIgKQp7CiAgICBRQ1N0cmluZyB0bXAoIHMxICk7CiAgICB0bXAgKz0gczI7CiAgICByZXR1cm4g
dG1wOwp9CgogICAgICAgICBpbmxpbmUgUUNTdHJpbmcgb3BlcmF0b3IrKCBjb25zdCBRQ1N0cmlu
ZyAmczEsIGNoYXIgYzIgKQp7CiAgICBRQ1N0cmluZyB0bXAoIHMxLmRhdGEoKSApOwogICAgdG1w
ICs9IGMyOwogICAgcmV0dXJuIHRtcDsKfQoKICAgICAgICAgaW5saW5lIFFDU3RyaW5nIG9wZXJh
dG9yKyggY2hhciBjMSwgY29uc3QgUUNTdHJpbmcgJnMyICkKewogICAgUUNTdHJpbmcgdG1wOwog
ICAgdG1wICs9IGMxOwogICAgdG1wICs9IHMyOwogICAgcmV0dXJuIHRtcDsKfQojIDQ0ICJxc3Ry
aW5nLmgiIDIKCgoKCgoKCmNsYXNzIFFSZWdFeHA7CmNsYXNzIFFTdHJpbmc7CmNsYXNzIFFDaGFy
UmVmOwoKY2xhc3MgUUNoYXIgewpwdWJsaWM6CiAgICBRQ2hhcigpOwogICAgUUNoYXIoIGNoYXIg
YyApOwogICAgUUNoYXIoIHVjaGFyIGMgKTsKICAgIFFDaGFyKCB1Y2hhciBjLCB1Y2hhciByICk7
CiAgICBRQ2hhciggY29uc3QgUUNoYXImIGMgKTsKICAgIFFDaGFyKCB1c2hvcnQgcmMgKTsKICAg
IFFDaGFyKCBzaG9ydCByYyApOwogICAgUUNoYXIoIHVpbnQgcmMgKTsKICAgIFFDaGFyKCBpbnQg
cmMgKTsKCiAgICBzdGF0aWMgY29uc3QgUUNoYXIgbnVsbDsKICAgIHN0YXRpYyBjb25zdCBRQ2hh
ciByZXBsYWNlbWVudDsKICAgIHN0YXRpYyBjb25zdCBRQ2hhciBieXRlT3JkZXJNYXJrOwogICAg
c3RhdGljIGNvbnN0IFFDaGFyIGJ5dGVPcmRlclN3YXBwZWQ7CiAgICBzdGF0aWMgY29uc3QgUUNo
YXIgbmJzcDsKCgoKICAgIGVudW0gQ2F0ZWdvcnkKICAgIHsKICAgICAgICBOb0NhdGVnb3J5LAoK
ICAgICAgICBNYXJrX05vblNwYWNpbmcsCiAgICAgICAgTWFya19TcGFjaW5nQ29tYmluaW5nLAog
ICAgICAgIE1hcmtfRW5jbG9zaW5nLAoKICAgICAgICBOdW1iZXJfRGVjaW1hbERpZ2l0LAogICAg
ICAgIE51bWJlcl9MZXR0ZXIsCiAgICAgICAgTnVtYmVyX090aGVyLAoKICAgICAgICBTZXBhcmF0
b3JfU3BhY2UsCiAgICAgICAgU2VwYXJhdG9yX0xpbmUsCiAgICAgICAgU2VwYXJhdG9yX1BhcmFn
cmFwaCwKCiAgICAgICAgT3RoZXJfQ29udHJvbCwKICAgICAgICBPdGhlcl9Gb3JtYXQsCiAgICAg
ICAgT3RoZXJfU3Vycm9nYXRlLAogICAgICAgIE90aGVyX1ByaXZhdGVVc2UsCiAgICAgICAgT3Ro
ZXJfTm90QXNzaWduZWQsCgogICAgICAgIExldHRlcl9VcHBlcmNhc2UsCiAgICAgICAgTGV0dGVy
X0xvd2VyY2FzZSwKICAgICAgICBMZXR0ZXJfVGl0bGVjYXNlLAogICAgICAgIExldHRlcl9Nb2Rp
ZmllciwKICAgICAgICBMZXR0ZXJfT3RoZXIsCgogICAgICAgIFB1bmN0dWF0aW9uX0Nvbm5lY3Rv
ciwKICAgICAgICBQdW5jdHVhdGlvbl9EYXNrLAogICAgICAgIFB1bmN0dWF0aW9uX09wZW4sCiAg
ICAgICAgUHVuY3R1YXRpb25fQ2xvc2UsCiAgICAgICAgUHVuY3R1YXRpb25fSW5pdGlhbFF1b3Rl
LAogICAgICAgIFB1bmN0dWF0aW9uX0ZpbmFsUXVvdGUsCiAgICAgICAgUHVuY3R1YXRpb25fT3Ro
ZXIsCgogICAgICAgIFN5bWJvbF9NYXRoLAogICAgICAgIFN5bWJvbF9DdXJyZW5jeSwKICAgICAg
ICBTeW1ib2xfTW9kaWZpZXIsCiAgICAgICAgU3ltYm9sX090aGVyCiAgICB9OwoKICAgIGVudW0g
RGlyZWN0aW9uCiAgICB7CiAgICAgICAgRGlyTCwgRGlyUiwgRGlyRU4sIERpckVTLCBEaXJFVCwg
RGlyQU4sIERpckNTLCBEaXJCLCBEaXJTLCBEaXJXUywgRGlyT04sCiAgICAgICAgRGlyTFJFLCBE
aXJMUk8sIERpckFMLCBEaXJSTEUsIERpclJMTywgRGlyUERGLCBEaXJOU00sIERpckJOCiAgICB9
OwoKICAgIGVudW0gRGVjb21wb3NpdGlvbgogICAgewogICAgICAgIFNpbmdsZSwgQ2Fub25pY2Fs
LCBGb250LCBOb0JyZWFrLCBJbml0aWFsLCBNZWRpYWwsCiAgICAgICAgRmluYWwsIElzb2xhdGVk
LCBDaXJjbGUsIFN1cGVyLCBTdWIsIFZlcnRpY2FsLAogICAgICAgIFdpZGUsIE5hcnJvdywgU21h
bGwsIFNxdWFyZSwgQ29tcGF0LCBGcmFjdGlvbgogICAgfTsKCiAgICBlbnVtIEpvaW5pbmcKICAg
IHsKICAgICAgICBPdGhlckpvaW5pbmcsIER1YWwsIFJpZ2h0LCBDZW50ZXIKICAgIH07CgoKCiAg
ICBpbnQgZGlnaXRWYWx1ZSgpIGNvbnN0OwogICAgUUNoYXIgbG93ZXIoKSBjb25zdDsKICAgIFFD
aGFyIHVwcGVyKCkgY29uc3Q7CgogICAgQ2F0ZWdvcnkgY2F0ZWdvcnkoKSBjb25zdDsKICAgIERp
cmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdDsKICAgIEpvaW5pbmcgam9pbmluZygpIGNvbnN0Owog
ICAgYm9vbCBtaXJyb3JlZCgpIGNvbnN0OwogICAgUUNoYXIgbWlycm9yZWRDaGFyKCkgY29uc3Q7
CiAgICBRU3RyaW5nIGRlY29tcG9zaXRpb24oKSBjb25zdDsKICAgIERlY29tcG9zaXRpb24gZGVj
b21wb3NpdGlvblRhZygpIGNvbnN0OwoKICAgIGNoYXIgbGF0aW4xKCkgY29uc3QgeyByZXR1cm4g
cncgPyAwIDogY2w7IH0KICAgIHVzaG9ydCB1bmljb2RlKCkgY29uc3QgeyByZXR1cm4gKHJ3IDw8
IDgpIHwgY2w7IH0KCgogICAgb3BlcmF0b3IgY2hhcigpIGNvbnN0IHsgcmV0dXJuIGxhdGluMSgp
OyB9CgoKICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gdW5pY29kZSgpPT0wOyB9CiAg
ICBib29sIGlzUHJpbnQoKSBjb25zdDsKICAgIGJvb2wgaXNQdW5jdCgpIGNvbnN0OwogICAgYm9v
bCBpc1NwYWNlKCkgY29uc3Q7CiAgICBib29sIGlzTWFyaygpIGNvbnN0OwogICAgYm9vbCBpc0xl
dHRlcigpIGNvbnN0OwogICAgYm9vbCBpc051bWJlcigpIGNvbnN0OwogICAgYm9vbCBpc0xldHRl
ck9yTnVtYmVyKCkgY29uc3Q7CiAgICBib29sIGlzRGlnaXQoKSBjb25zdDsKCiAgICB1Y2hhciYg
Y2VsbCgpIHsgcmV0dXJuIGNsOyB9CiAgICB1Y2hhciYgcm93KCkgeyByZXR1cm4gcnc7IH0KICAg
IHVjaGFyIGNlbGwoKSBjb25zdCB7IHJldHVybiBjbDsgfQogICAgdWNoYXIgcm93KCkgY29uc3Qg
eyByZXR1cm4gcnc7IH0KCiAgICBzdGF0aWMgYm9vbCBuZXR3b3JrT3JkZXJlZCgpIHsgcmV0dXJu
IChpbnQpbmV0X29yZGVyZWQgPT0gMTsgfQoKICAgIGZyaWVuZCBpbmxpbmUgaW50IG9wZXJhdG9y
PT0oIGNoYXIgY2gsIFFDaGFyIGMgKTsKICAgIGZyaWVuZCBpbmxpbmUgaW50IG9wZXJhdG9yPT0o
IFFDaGFyIGMsIGNoYXIgY2ggKTsKICAgIGZyaWVuZCBpbmxpbmUgaW50IG9wZXJhdG9yPT0oIFFD
aGFyIGMxLCBRQ2hhciBjMiApOwogICAgZnJpZW5kIGlubGluZSBpbnQgb3BlcmF0b3IhPSggUUNo
YXIgYzEsIFFDaGFyIGMyICk7CiAgICBmcmllbmQgaW5saW5lIGludCBvcGVyYXRvciE9KCBjaGFy
IGNoLCBRQ2hhciBjICk7CiAgICBmcmllbmQgaW5saW5lIGludCBvcGVyYXRvciE9KCBRQ2hhciBj
LCBjaGFyIGNoICk7CiAgICBmcmllbmQgaW5saW5lIGludCBvcGVyYXRvcjw9KCBRQ2hhciBjLCBj
aGFyIGNoICk7CiAgICBmcmllbmQgaW5saW5lIGludCBvcGVyYXRvcjw9KCBjaGFyIGNoLCBRQ2hh
ciBjICk7CiAgICBmcmllbmQgaW5saW5lIGludCBvcGVyYXRvcjw9KCBRQ2hhciBjMSwgUUNoYXIg
YzIgKTsKCnByaXZhdGU6CgoKCiAgICB1Y2hhciBydzsKICAgIHVjaGFyIGNsOwoKCgogICAgZW51
bSB7IG5ldF9vcmRlcmVkID0gMSB9OwojIDIwMiAicXN0cmluZy5oIgp9OwoKaW5saW5lIFFDaGFy
OjpRQ2hhcigpCnsKICAgIHJ3ID0gMDsgY2wgPSAwOwoKCgp9CmlubGluZSBRQ2hhcjo6UUNoYXIo
IGNoYXIgYyApCnsKICAgIHJ3ID0gMDsgY2wgPSAodWNoYXIpYzsKCgoKfQppbmxpbmUgUUNoYXI6
OlFDaGFyKCB1Y2hhciBjICkKewogICAgcncgPSAwOyBjbCA9IGM7CgoKCn0KaW5saW5lIFFDaGFy
OjpRQ2hhciggdWNoYXIgYywgdWNoYXIgciApCnsKICAgIHJ3ID0gcjsgY2wgPSBjOwoKCgp9Cmlu
bGluZSBRQ2hhcjo6UUNoYXIoIGNvbnN0IFFDaGFyJiBjICkKewogICAgcncgPSBjLnJ3OyBjbCA9
IGMuY2w7CgoKCn0KaW5saW5lIFFDaGFyOjpRQ2hhciggdXNob3J0IHJjICkKewogICAgcncgPSAo
dWNoYXIpKChyYz4+OCkmMHhmZik7IGNsID0gKHVjaGFyKShyYyYweGZmKTsKCgoKfQppbmxpbmUg
UUNoYXI6OlFDaGFyKCBzaG9ydCByYyApCnsKICAgIHJ3ID0gKHVjaGFyKSgocmM+PjgpJjB4ZmYp
OyBjbCA9ICh1Y2hhcikocmMmMHhmZik7CgoKCn0KaW5saW5lIFFDaGFyOjpRQ2hhciggdWludCBy
YyApCnsKICAgIHJ3ID0gKHVjaGFyKSgocmM+PjgpJjB4ZmYpOyBjbCA9ICh1Y2hhcikocmMmMHhm
Zik7CgoKCn0KaW5saW5lIFFDaGFyOjpRQ2hhciggaW50IHJjICkKewogICAgcncgPSAodWNoYXIp
KChyYz4+OCkmMHhmZik7IGNsID0gKHVjaGFyKShyYyYweGZmKTsKCgoKfQoKCmlubGluZSBpbnQg
b3BlcmF0b3I9PSggY2hhciBjaCwgUUNoYXIgYyApCnsKICAgIHJldHVybiBjaCA9PSBjLmNsICYm
ICFjLnJ3Owp9CgppbmxpbmUgaW50IG9wZXJhdG9yPT0oIFFDaGFyIGMsIGNoYXIgY2ggKQp7CiAg
ICByZXR1cm4gY2ggPT0gYy5jbCAmJiAhYy5ydzsKfQoKaW5saW5lIGludCBvcGVyYXRvcj09KCBR
Q2hhciBjMSwgUUNoYXIgYzIgKQp7CiAgICByZXR1cm4gYzEuY2wgPT0gYzIuY2wKICAgICAgICAm
JiBjMS5ydyA9PSBjMi5ydzsKfQoKaW5saW5lIGludCBvcGVyYXRvciE9KCBRQ2hhciBjMSwgUUNo
YXIgYzIgKQp7CiAgICByZXR1cm4gYzEuY2wgIT0gYzIuY2wKICAgICAgICB8fCBjMS5ydyAhPSBj
Mi5ydzsKfQoKaW5saW5lIGludCBvcGVyYXRvciE9KCBjaGFyIGNoLCBRQ2hhciBjICkKewogICAg
cmV0dXJuIGNoICE9IGMuY2wgfHwgYy5ydzsKfQoKaW5saW5lIGludCBvcGVyYXRvciE9KCBRQ2hh
ciBjLCBjaGFyIGNoICkKewogICAgcmV0dXJuIGNoICE9IGMuY2wgfHwgYy5ydzsKfQoKaW5saW5l
IGludCBvcGVyYXRvcjw9KCBRQ2hhciBjLCBjaGFyIGNoICkKewogICAgcmV0dXJuICEoY2ggPCBj
LmNsIHx8IGMucncpOwp9CgppbmxpbmUgaW50IG9wZXJhdG9yPD0oIGNoYXIgY2gsIFFDaGFyIGMg
KQp7CiAgICByZXR1cm4gY2ggPD0gYy5jbCB8fCBjLnJ3Owp9CgppbmxpbmUgaW50IG9wZXJhdG9y
PD0oIFFDaGFyIGMxLCBRQ2hhciBjMiApCnsKICAgIHJldHVybiBjMS5ydyA+IGMyLnJ3CiAgICAg
ICAgPyBGQUxTRQogICAgICAgIDogYzEucncgPCBjMi5ydwogICAgICAgICAgICA/IFRSVUUKICAg
ICAgICAgICAgOiBjMS5jbCA8PSBjMi5jbDsKfQoKaW5saW5lIGludCBvcGVyYXRvcj49KCBRQ2hh
ciBjLCBjaGFyIGNoICkgeyByZXR1cm4gY2ggPD0gYzsgfQppbmxpbmUgaW50IG9wZXJhdG9yPj0o
IGNoYXIgY2gsIFFDaGFyIGMgKSB7IHJldHVybiBjIDw9IGNoOyB9CmlubGluZSBpbnQgb3BlcmF0
b3I+PSggUUNoYXIgYzEsIFFDaGFyIGMyICkgeyByZXR1cm4gYzIgPD0gYzE7IH0KaW5saW5lIGlu
dCBvcGVyYXRvcjwoIFFDaGFyIGMsIGNoYXIgY2ggKSB7IHJldHVybiAhKGNoPD1jKTsgfQppbmxp
bmUgaW50IG9wZXJhdG9yPCggY2hhciBjaCwgUUNoYXIgYyApIHsgcmV0dXJuICEoYzw9Y2gpOyB9
CmlubGluZSBpbnQgb3BlcmF0b3I8KCBRQ2hhciBjMSwgUUNoYXIgYzIgKSB7IHJldHVybiAhKGMy
PD1jMSk7IH0KaW5saW5lIGludCBvcGVyYXRvcj4oIFFDaGFyIGMsIGNoYXIgY2ggKSB7IHJldHVy
biAhKGNoPj1jKTsgfQppbmxpbmUgaW50IG9wZXJhdG9yPiggY2hhciBjaCwgUUNoYXIgYyApIHsg
cmV0dXJuICEoYz49Y2gpOyB9CmlubGluZSBpbnQgb3BlcmF0b3I+KCBRQ2hhciBjMSwgUUNoYXIg
YzIgKSB7IHJldHVybiAhKGMyPj1jMSk7IH0KCgpzdHJ1Y3QgUVN0cmluZ0RhdGEgOiBwdWJsaWMg
UVNoYXJlZCB7CiAgICBRU3RyaW5nRGF0YSgpIDoKICAgICAgICB1bmljb2RlKDApLCBhc2NpaSgw
KSwgbGVuKDApLCBtYXhsKDApLCBkaXJ0eWFzY2lpKDApIHsgcmVmKCk7IH0KICAgIFFTdHJpbmdE
YXRhKFFDaGFyICp1LCB1aW50IGwsIHVpbnQgbSkgOgogICAgICAgIHVuaWNvZGUodSksIGFzY2lp
KDApLCBsZW4obCksIG1heGwobSksIGRpcnR5YXNjaWkoMCkgeyB9CgogICAgflFTdHJpbmdEYXRh
KCkgeyBpZiAoIHVuaWNvZGUgKSBkZWxldGVbXSAoKGNoYXIqKXVuaWNvZGUpOwogICAgICAgICAg
ICAgICAgICAgICBpZiAoIGFzY2lpICkgZGVsZXRlW10gYXNjaWk7IH0KCiAgICB2b2lkIGRlbGV0
ZVNlbGYoKTsKICAgIFFDaGFyICp1bmljb2RlOwogICAgY2hhciAqYXNjaWk7CiAgICB1aW50IGxl
bjsKICAgIHVpbnQgbWF4bDozMDsKICAgIHVpbnQgZGlydHlhc2NpaToxOwp9OwoKCmNsYXNzIFFT
dHJpbmcKewpwdWJsaWM6CiAgICBRU3RyaW5nKCk7CiAgICBRU3RyaW5nKCBRQ2hhciApOwogICAg
UVN0cmluZyggY29uc3QgUVN0cmluZyAmICk7CiAgICBRU3RyaW5nKCBjb25zdCBRQnl0ZUFycmF5
JiApOwogICAgUVN0cmluZyggY29uc3QgUUNoYXIqIHVuaWNvZGUsIHVpbnQgbGVuZ3RoICk7Cgog
ICAgUVN0cmluZyggY29uc3QgY2hhciAqc3RyICk7CgogICAgflFTdHJpbmcoKTsKCiAgICBRU3Ry
aW5nICZvcGVyYXRvcj0oIGNvbnN0IFFTdHJpbmcgJiApOwoKICAgIFFTdHJpbmcgJm9wZXJhdG9y
PSggY29uc3QgY2hhciAqICk7CgogICAgUVN0cmluZyAmb3BlcmF0b3I9KCBjb25zdCBRQ1N0cmlu
ZyYgKTsKICAgIFFTdHJpbmcgJm9wZXJhdG9yPSggUUNoYXIgYyApOwogICAgUVN0cmluZyAmb3Bl
cmF0b3I9KCBjaGFyIGMgKTsKCiAgICBzdGF0aWMgY29uc3QgUVN0cmluZyBudWxsOwoKICAgIGJv
b2wgaXNOdWxsKCkgY29uc3Q7CiAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKICAgIHVpbnQgbGVu
Z3RoKCkgY29uc3Q7CiAgICB2b2lkIHRydW5jYXRlKCB1aW50IHBvcyApOwoKCgoKICAgIHZvaWQg
ZmlsbCggUUNoYXIgYywgaW50IGxlbiA9IC0xICk7CgogICAgUVN0cmluZyBjb3B5KCkgY29uc3Q7
CgogICAgUVN0cmluZyBhcmcobG9uZyBhLCBpbnQgZmllbGR3aWR0aD0wLCBpbnQgYmFzZT0xMCkg
Y29uc3Q7CiAgICBRU3RyaW5nIGFyZyh1bG9uZyBhLCBpbnQgZmllbGR3aWR0aD0wLCBpbnQgYmFz
ZT0xMCkgY29uc3Q7CiAgICBRU3RyaW5nIGFyZyhpbnQgYSwgaW50IGZpZWxkd2lkdGg9MCwgaW50
IGJhc2U9MTApIGNvbnN0OwogICAgUVN0cmluZyBhcmcodWludCBhLCBpbnQgZmllbGR3aWR0aD0w
LCBpbnQgYmFzZT0xMCkgY29uc3Q7CiAgICBRU3RyaW5nIGFyZyhzaG9ydCBhLCBpbnQgZmllbGR3
aWR0aD0wLCBpbnQgYmFzZT0xMCkgY29uc3Q7CiAgICBRU3RyaW5nIGFyZyh1c2hvcnQgYSwgaW50
IGZpZWxkd2lkdGg9MCwgaW50IGJhc2U9MTApIGNvbnN0OwogICAgUVN0cmluZyBhcmcoY2hhciBh
LCBpbnQgZmllbGR3aWR0aD0wKSBjb25zdDsKICAgIFFTdHJpbmcgYXJnKFFDaGFyIGEsIGludCBm
aWVsZHdpZHRoPTApIGNvbnN0OwogICAgUVN0cmluZyBhcmcoY29uc3QgUVN0cmluZyYgYSwgaW50
IGZpZWxkd2lkdGg9MCkgY29uc3Q7CiAgICBRU3RyaW5nIGFyZyhkb3VibGUgYSwgaW50IGZpZWxk
d2lkdGg9MCwgY2hhciBmbXQ9J2cnLCBpbnQgcHJlYz0tMSkgY29uc3Q7CgogICAgUVN0cmluZyAm
c3ByaW50ZiggY29uc3QgY2hhciogZm9ybWF0LCAuLi4gKQoKICAgICAgICBfX2F0dHJpYnV0ZV9f
ICgoZm9ybWF0IChwcmludGYsIDIsIDMpKSkKCiAgICAgICAgOwoKICAgIGludCBmaW5kKCBRQ2hh
ciBjLCBpbnQgaW5kZXg9MCwgYm9vbCBjcz1UUlVFICkgY29uc3Q7CiAgICBpbnQgZmluZCggY2hh
ciBjLCBpbnQgaW5kZXg9MCwgYm9vbCBjcz1UUlVFICkgY29uc3Q7CiAgICBpbnQgZmluZCggY29u
c3QgUVN0cmluZyAmc3RyLCBpbnQgaW5kZXg9MCwgYm9vbCBjcz1UUlVFICkgY29uc3Q7CiAgICBp
bnQgZmluZCggY29uc3QgUVJlZ0V4cCAmLCBpbnQgaW5kZXg9MCApIGNvbnN0OwoKICAgIGludCBm
aW5kKCBjb25zdCBjaGFyKiBzdHIsIGludCBpbmRleD0wICkgY29uc3Q7CgogICAgaW50IGZpbmRS
ZXYoIFFDaGFyIGMsIGludCBpbmRleD0tMSwgYm9vbCBjcz1UUlVFKSBjb25zdDsKICAgIGludCBm
aW5kUmV2KCBjaGFyIGMsIGludCBpbmRleD0tMSwgYm9vbCBjcz1UUlVFKSBjb25zdDsKICAgIGlu
dCBmaW5kUmV2KCBjb25zdCBRU3RyaW5nICZzdHIsIGludCBpbmRleD0tMSwgYm9vbCBjcz1UUlVF
KSBjb25zdDsKICAgIGludCBmaW5kUmV2KCBjb25zdCBRUmVnRXhwICYsIGludCBpbmRleD0tMSAp
IGNvbnN0OwoKICAgIGludCBmaW5kUmV2KCBjb25zdCBjaGFyKiBzdHIsIGludCBpbmRleD0tMSAp
IGNvbnN0OwoKICAgIGludCBjb250YWlucyggUUNoYXIgYywgYm9vbCBjcz1UUlVFICkgY29uc3Q7
CiAgICBpbnQgY29udGFpbnMoIGNoYXIgYywgYm9vbCBjcz1UUlVFICkgY29uc3QKICAgICAgICAg
ICAgICAgICAgICB7IHJldHVybiBjb250YWlucyhRQ2hhcihjKSwgY3MpOyB9CgogICAgaW50IGNv
bnRhaW5zKCBjb25zdCBjaGFyKiBzdHIsIGJvb2wgY3M9VFJVRSApIGNvbnN0OwoKICAgIGludCBj
b250YWlucyggY29uc3QgUVN0cmluZyAmc3RyLCBib29sIGNzPVRSVUUgKSBjb25zdDsKICAgIGlu
dCBjb250YWlucyggY29uc3QgUVJlZ0V4cCAmICkgY29uc3Q7CgogICAgUVN0cmluZyBsZWZ0KCB1
aW50IGxlbiApIGNvbnN0OwogICAgUVN0cmluZyByaWdodCggdWludCBsZW4gKSBjb25zdDsKICAg
IFFTdHJpbmcgbWlkKCB1aW50IGluZGV4LCB1aW50IGxlbj0weGZmZmZmZmZmKSBjb25zdDsKCiAg
ICBRU3RyaW5nIGxlZnRKdXN0aWZ5KCB1aW50IHdpZHRoLCBRQ2hhciBmaWxsPScgJywgYm9vbCB0
cnVuYz1GQUxTRSljb25zdDsKICAgIFFTdHJpbmcgcmlnaHRKdXN0aWZ5KCB1aW50IHdpZHRoLCBR
Q2hhciBmaWxsPScgJyxib29sIHRydW5jPUZBTFNFKWNvbnN0OwoKICAgIFFTdHJpbmcgbG93ZXIo
KSBjb25zdDsKICAgIFFTdHJpbmcgdXBwZXIoKSBjb25zdDsKCiAgICBRU3RyaW5nIHN0cmlwV2hp
dGVTcGFjZSgpIGNvbnN0OwogICAgUVN0cmluZyBzaW1wbGlmeVdoaXRlU3BhY2UoKSBjb25zdDsK
CiAgICBRU3RyaW5nICZpbnNlcnQoIHVpbnQgaW5kZXgsIGNvbnN0IFFTdHJpbmcgJiApOwogICAg
UVN0cmluZyAmaW5zZXJ0KCB1aW50IGluZGV4LCBjb25zdCBRQ2hhciosIHVpbnQgbGVuICk7CiAg
ICBRU3RyaW5nICZpbnNlcnQoIHVpbnQgaW5kZXgsIFFDaGFyICk7CiAgICBRU3RyaW5nICZpbnNl
cnQoIHVpbnQgaW5kZXgsIGNoYXIgYyApIHsgcmV0dXJuIGluc2VydChpbmRleCxRQ2hhcihjKSk7
IH0KICAgIFFTdHJpbmcgJmFwcGVuZCggY2hhciApOwogICAgUVN0cmluZyAmYXBwZW5kKCBRQ2hh
ciApOwogICAgUVN0cmluZyAmYXBwZW5kKCBjb25zdCBRU3RyaW5nICYgKTsKICAgIFFTdHJpbmcg
JnByZXBlbmQoIGNoYXIgKTsKICAgIFFTdHJpbmcgJnByZXBlbmQoIFFDaGFyICk7CiAgICBRU3Ry
aW5nICZwcmVwZW5kKCBjb25zdCBRU3RyaW5nICYgKTsKICAgIFFTdHJpbmcgJnJlbW92ZSggdWlu
dCBpbmRleCwgdWludCBsZW4gKTsKICAgIFFTdHJpbmcgJnJlcGxhY2UoIHVpbnQgaW5kZXgsIHVp
bnQgbGVuLCBjb25zdCBRU3RyaW5nICYgKTsKICAgIFFTdHJpbmcgJnJlcGxhY2UoIHVpbnQgaW5k
ZXgsIHVpbnQgbGVuLCBjb25zdCBRQ2hhciosIHVpbnQgY2xlbiApOwogICAgUVN0cmluZyAmcmVw
bGFjZSggY29uc3QgUVJlZ0V4cCAmLCBjb25zdCBRU3RyaW5nICYgKTsKCiAgICBzaG9ydCB0b1No
b3J0KCBib29sICpvaz0wLCBpbnQgYmFzZT0xMCApIGNvbnN0OwogICAgdXNob3J0IHRvVVNob3J0
KCBib29sICpvaz0wLCBpbnQgYmFzZT0xMCApIGNvbnN0OwogICAgaW50IHRvSW50KCBib29sICpv
az0wLCBpbnQgYmFzZT0xMCApIGNvbnN0OwogICAgdWludCB0b1VJbnQoIGJvb2wgKm9rPTAsIGlu
dCBiYXNlPTEwICkgY29uc3Q7CiAgICBsb25nIHRvTG9uZyggYm9vbCAqb2s9MCwgaW50IGJhc2U9
MTAgKSBjb25zdDsKICAgIHVsb25nIHRvVUxvbmcoIGJvb2wgKm9rPTAsIGludCBiYXNlPTEwICkg
Y29uc3Q7CiAgICBmbG9hdCB0b0Zsb2F0KCBib29sICpvaz0wICkgY29uc3Q7CiAgICBkb3VibGUg
dG9Eb3VibGUoIGJvb2wgKm9rPTAgKSBjb25zdDsKCiAgICBRU3RyaW5nICZzZXROdW0oIHNob3J0
LCBpbnQgYmFzZT0xMCApOwogICAgUVN0cmluZyAmc2V0TnVtKCB1c2hvcnQsIGludCBiYXNlPTEw
ICk7CiAgICBRU3RyaW5nICZzZXROdW0oIGludCwgaW50IGJhc2U9MTAgKTsKICAgIFFTdHJpbmcg
JnNldE51bSggdWludCwgaW50IGJhc2U9MTAgKTsKICAgIFFTdHJpbmcgJnNldE51bSggbG9uZywg
aW50IGJhc2U9MTAgKTsKICAgIFFTdHJpbmcgJnNldE51bSggdWxvbmcsIGludCBiYXNlPTEwICk7
CiAgICBRU3RyaW5nICZzZXROdW0oIGZsb2F0LCBjaGFyIGY9J2cnLCBpbnQgcHJlYz02ICk7CiAg
ICBRU3RyaW5nICZzZXROdW0oIGRvdWJsZSwgY2hhciBmPSdnJywgaW50IHByZWM9NiApOwoKICAg
IHN0YXRpYyBRU3RyaW5nIG51bWJlciggbG9uZywgaW50IGJhc2U9MTAgKTsKICAgIHN0YXRpYyBR
U3RyaW5nIG51bWJlciggdWxvbmcsIGludCBiYXNlPTEwKTsKICAgIHN0YXRpYyBRU3RyaW5nIG51
bWJlciggaW50LCBpbnQgYmFzZT0xMCApOwogICAgc3RhdGljIFFTdHJpbmcgbnVtYmVyKCB1aW50
LCBpbnQgYmFzZT0xMCk7CiAgICBzdGF0aWMgUVN0cmluZyBudW1iZXIoIGRvdWJsZSwgY2hhciBm
PSdnJywgaW50IHByZWM9NiApOwoKICAgIHZvaWQgc2V0RXhwYW5kKCB1aW50IGluZGV4LCBRQ2hh
ciBjICk7CgogICAgUVN0cmluZyAmb3BlcmF0b3IrPSggY29uc3QgUVN0cmluZyAmc3RyICk7CiAg
ICBRU3RyaW5nICZvcGVyYXRvcis9KCBRQ2hhciBjICk7CiAgICBRU3RyaW5nICZvcGVyYXRvcis9
KCBjaGFyIGMgKTsKCgogICAgUUNoYXIgYXQoIHVpbnQgaSApIGNvbnN0CiAgICAgICAgeyByZXR1
cm4gaTxkLT5sZW4gPyBkLT51bmljb2RlW2ldIDogUUNoYXI6Om51bGw7IH0KICAgIFFDaGFyIG9w
ZXJhdG9yW10oIGludCBpICkgY29uc3QgeyByZXR1cm4gYXQoKHVpbnQpaSk7IH0KICAgIFFDaGFy
UmVmIGF0KCB1aW50IGkgKTsKICAgIFFDaGFyUmVmIG9wZXJhdG9yW10oIGludCBpICk7CgogICAg
UUNoYXIgY29uc3RyZWYodWludCBpKSBjb25zdAogICAgICAgIHsgcmV0dXJuIGF0KGkpOyB9CiAg
ICBRQ2hhciYgcmVmKHVpbnQgaSkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChkLT5jb3VudCE9
MSB8fCBpPj1kLT5sZW4pCiAgICAgICAgICAgICAgICBzdWJhdChpKTsKICAgICAgICAgICAgZC0+
ZGlydHlhc2NpaT0xOwogICAgICAgICAgICByZXR1cm4gZC0+dW5pY29kZVtpXTsKICAgICAgICB9
CgogICAgY29uc3QgUUNoYXIqIHVuaWNvZGUoKSBjb25zdCB7IHJldHVybiBkLT51bmljb2RlOyB9
CiAgICBjb25zdCBjaGFyKiBhc2NpaSgpIGNvbnN0OwogICAgY29uc3QgY2hhciogbGF0aW4xKCkg
Y29uc3Q7CiAgICBzdGF0aWMgUVN0cmluZyBmcm9tTGF0aW4xKGNvbnN0IGNoYXIqLCBpbnQgbGVu
PS0xKTsKCiAgICBRQ1N0cmluZyB1dGY4KCkgY29uc3Q7CiAgICBzdGF0aWMgUVN0cmluZyBmcm9t
VXRmOChjb25zdCBjaGFyKiwgaW50IGxlbj0tMSk7CgogICAgUUNTdHJpbmcgbG9jYWw4Qml0KCkg
Y29uc3Q7CiAgICBzdGF0aWMgUVN0cmluZyBmcm9tTG9jYWw4Qml0KGNvbnN0IGNoYXIqLCBpbnQg
bGVuPS0xKTsKICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3Qg
Y2hhciAqKCkgY29uc3QgeyByZXR1cm4gbGF0aW4xKCk7IH0KCgogICAgUVN0cmluZyAmc2V0VW5p
Y29kZSggY29uc3QgUUNoYXIqIHVuaWNvZGUsIHVpbnQgbGVuICk7CiAgICBRU3RyaW5nICZzZXRV
bmljb2RlQ29kZXMoIGNvbnN0IHVzaG9ydCogdW5pY29kZV9hc191c2hvcnRzLCB1aW50IGxlbiAp
OwogICAgUVN0cmluZyAmc2V0TGF0aW4xKCBjb25zdCBjaGFyKiwgaW50IGxlbj0tMSApOwoKICAg
IGludCBjb21wYXJlKCBjb25zdCBRU3RyaW5nJiBzICkgY29uc3Q7CiAgICBzdGF0aWMgaW50IGNv
bXBhcmUoIGNvbnN0IFFTdHJpbmcmIHMxLCBjb25zdCBRU3RyaW5nJiBzMiApCiAgICAgICAgeyBy
ZXR1cm4gczEuY29tcGFyZShzMik7IH0KCgogICAgZnJpZW5kIFFEYXRhU3RyZWFtICZvcGVyYXRv
cj4+KCBRRGF0YVN0cmVhbSAmLCBRU3RyaW5nICYgKTsKCgogICAgdm9pZCBjb21wb3NlKCk7CiAg
ICBRQ2hhcjo6RGlyZWN0aW9uIGJhc2ljRGlyZWN0aW9uKCk7CiAgICBRU3RyaW5nIHZpc3VhbChp
bnQgaW5kZXggPSAwLCBpbnQgbGVuID0gLTEpOwoKCiAgICBjb25zdCBjaGFyKiBkYXRhKCkgY29u
c3QgeyByZXR1cm4gbGF0aW4xKCk7IH0KCgogICAgYm9vbCBzdGFydHNXaXRoKCBjb25zdCBRU3Ry
aW5nJiApIGNvbnN0OwoKcHJpdmF0ZToKICAgIFFTdHJpbmcoIGludCBzaXplLCBib29sIGR1bW15
ICk7CgogICAgdm9pZCBkZXJlZigpOwogICAgdm9pZCByZWFsX2RldGFjaCgpOwogICAgdm9pZCBz
ZXRMZW5ndGgoIHVpbnQgcG9zICk7CiAgICB2b2lkIHN1YmF0KCB1aW50ICk7CiAgICBib29sIGZp
bmRBcmcoaW50JiBwb3MsIGludCYgbGVuKSBjb25zdDsKCiAgICBzdGF0aWMgUUNoYXIqIGFzY2lp
VG9Vbmljb2RlKCBjb25zdCBjaGFyKiwgdWludCAqIGxlbiwgdWludCBtYXhsZW49KHVpbnQpLTEg
KTsKICAgIHN0YXRpYyBRQ2hhciogYXNjaWlUb1VuaWNvZGUoIGNvbnN0IFFCeXRlQXJyYXkmLCB1
aW50ICogbGVuICk7CiAgICBzdGF0aWMgY2hhciogdW5pY29kZVRvQXNjaWkoIGNvbnN0IFFDaGFy
KiwgdWludCBsZW4gKTsKCiAgICBRU3RyaW5nRGF0YSAqZDsKICAgIHN0YXRpYyBRU3RyaW5nRGF0
YSogc2hhcmVkX251bGw7CiAgICBzdGF0aWMgUVN0cmluZ0RhdGEqIG1ha2VTaGFyZWROdWxsKCk7
CgogICAgZnJpZW5kIGNsYXNzIFFDb25zdFN0cmluZzsKICAgIFFTdHJpbmcoUVN0cmluZ0RhdGEq
IGRkLCBib29sICkgOiBkKGRkKSB7IH0KfTsKCmNsYXNzIFFDaGFyUmVmIHsKICAgIGZyaWVuZCBj
bGFzcyBRU3RyaW5nOwogICAgUVN0cmluZyYgczsKICAgIHVpbnQgcDsKICAgIFFDaGFyUmVmKFFT
dHJpbmcqIHN0ciwgdWludCBwb3MpIDogcygqc3RyKSwgcChwb3MpIHsgfQoKcHVibGljOgoKCgoK
ICAgIHVzaG9ydCB1bmljb2RlKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS51bmljb2Rl
KCk7IH0KICAgIGNoYXIgbGF0aW4xKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJlZihwKS5sYXRp
bjEoKTsgfQoKCiAgICBRQ2hhclJlZiBvcGVyYXRvcj0oY2hhciBjICkgeyBzLnJlZihwKT1jOyBy
ZXR1cm4gKnRoaXM7IH0KICAgIFFDaGFyUmVmIG9wZXJhdG9yPSh1Y2hhciBjICkgeyBzLnJlZihw
KT1jOyByZXR1cm4gKnRoaXM7IH0KICAgIFFDaGFyUmVmIG9wZXJhdG9yPShRQ2hhciBjICkgeyBz
LnJlZihwKT1jOyByZXR1cm4gKnRoaXM7IH0KICAgIFFDaGFyUmVmIG9wZXJhdG9yPShjb25zdCBR
Q2hhclJlZiYgYyApIHsgcy5yZWYocCk9Yy51bmljb2RlKCk7IHJldHVybiAqdGhpczsgfQogICAg
UUNoYXJSZWYgb3BlcmF0b3I9KHVzaG9ydCByYyApIHsgcy5yZWYocCk9cmM7IHJldHVybiAqdGhp
czsgfQogICAgUUNoYXJSZWYgb3BlcmF0b3I9KHNob3J0IHJjICkgeyBzLnJlZihwKT1yYzsgcmV0
dXJuICp0aGlzOyB9CiAgICBRQ2hhclJlZiBvcGVyYXRvcj0odWludCByYyApIHsgcy5yZWYocCk9
cmM7IHJldHVybiAqdGhpczsgfQogICAgUUNoYXJSZWYgb3BlcmF0b3I9KGludCByYyApIHsgcy5y
ZWYocCk9cmM7IHJldHVybiAqdGhpczsgfQoKICAgIG9wZXJhdG9yIFFDaGFyICgpIGNvbnN0IHsg
cmV0dXJuIHMuY29uc3RyZWYocCk7IH0KCgogICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVy
biB1bmljb2RlKCk9PTA7IH0KICAgIGJvb2wgaXNQcmludCgpIGNvbnN0IHsgcmV0dXJuIHMuY29u
c3RyZWYocCkuaXNQcmludCgpOyB9CiAgICBib29sIGlzUHVuY3QoKSBjb25zdCB7IHJldHVybiBz
LmNvbnN0cmVmKHApLmlzUHVuY3QoKTsgfQogICAgYm9vbCBpc1NwYWNlKCkgY29uc3QgeyByZXR1
cm4gcy5jb25zdHJlZihwKS5pc1NwYWNlKCk7IH0KICAgIGJvb2wgaXNNYXJrKCkgY29uc3QgeyBy
ZXR1cm4gcy5jb25zdHJlZihwKS5pc01hcmsoKTsgfQogICAgYm9vbCBpc0xldHRlcigpIGNvbnN0
IHsgcmV0dXJuIHMuY29uc3RyZWYocCkuaXNMZXR0ZXIoKTsgfQogICAgYm9vbCBpc051bWJlcigp
IGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkuaXNOdW1iZXIoKTsgfQogICAgYm9vbCBpc0xl
dHRlck9yTnVtYmVyKCkgeyByZXR1cm4gcy5jb25zdHJlZihwKS5pc0xldHRlck9yTnVtYmVyKCk7
IH0KICAgIGJvb2wgaXNEaWdpdCgpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkuaXNEaWdp
dCgpOyB9CgogICAgaW50IGRpZ2l0VmFsdWUoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHAp
LmRpZ2l0VmFsdWUoKTsgfQogICAgUUNoYXIgbG93ZXIoKSB7IHJldHVybiBzLmNvbnN0cmVmKHAp
Lmxvd2VyKCk7IH0KICAgIFFDaGFyIHVwcGVyKCkgeyByZXR1cm4gcy5jb25zdHJlZihwKS51cHBl
cigpOyB9CgogICAgUUNoYXI6OkNhdGVnb3J5IGNhdGVnb3J5KCkgY29uc3QgeyByZXR1cm4gcy5j
b25zdHJlZihwKS5jYXRlZ29yeSgpOyB9CiAgICBRQ2hhcjo6RGlyZWN0aW9uIGRpcmVjdGlvbigp
IGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkuZGlyZWN0aW9uKCk7IH0KICAgIFFDaGFyOjpK
b2luaW5nIGpvaW5pbmcoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHApLmpvaW5pbmcoKTsg
fQogICAgYm9vbCBtaXJyb3JlZCgpIGNvbnN0IHsgcmV0dXJuIHMuY29uc3RyZWYocCkubWlycm9y
ZWQoKTsgfQogICAgUUNoYXIgbWlycm9yZWRDaGFyKCkgY29uc3QgeyByZXR1cm4gcy5jb25zdHJl
ZihwKS5taXJyb3JlZENoYXIoKTsgfQogICAgUVN0cmluZyBkZWNvbXBvc2l0aW9uKCkgY29uc3Qg
eyByZXR1cm4gcy5jb25zdHJlZihwKS5kZWNvbXBvc2l0aW9uKCk7IH0KICAgIFFDaGFyOjpEZWNv
bXBvc2l0aW9uIGRlY29tcG9zaXRpb25UYWcoKSBjb25zdCB7IHJldHVybiBzLmNvbnN0cmVmKHAp
LmRlY29tcG9zaXRpb25UYWcoKTsgfQoKCiAgICB1Y2hhciBjZWxsKCkgY29uc3QgeyByZXR1cm4g
cy5jb25zdHJlZihwKS5jZWxsKCk7IH0KICAgIHVjaGFyIHJvdygpIGNvbnN0IHsgcmV0dXJuIHMu
Y29uc3RyZWYocCkucm93KCk7IH0KCn07CgppbmxpbmUgUUNoYXJSZWYgUVN0cmluZzo6YXQoIHVp
bnQgaSApIHsgcmV0dXJuIFFDaGFyUmVmKHRoaXMsaSk7IH0KaW5saW5lIFFDaGFyUmVmIFFTdHJp
bmc6Om9wZXJhdG9yW10oIGludCBpICkgeyByZXR1cm4gYXQoKHVpbnQpaSk7IH0KCgpjbGFzcyBR
Q29uc3RTdHJpbmcgOiBwcml2YXRlIFFTdHJpbmcgewpwdWJsaWM6CiAgICBRQ29uc3RTdHJpbmco
IFFDaGFyKiB1bmljb2RlLCB1aW50IGxlbmd0aCApOwogICAgflFDb25zdFN0cmluZygpOwogICAg
Y29uc3QgUVN0cmluZyYgc3RyaW5nKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0KfTsKCgoKCgoK
ICAgICAgICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFEYXRhU3RyZWFtICYsIGNvbnN0IFFT
dHJpbmcgJiApOwogICAgICAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+PiggUURhdGFTdHJlYW0g
JiwgUVN0cmluZyAmICk7CiMgNjQxICJxc3RyaW5nLmgiCmlubGluZSBRU3RyaW5nOjpRU3RyaW5n
KCkgOgogICAgZChzaGFyZWRfbnVsbCA/IHNoYXJlZF9udWxsIDogbWFrZVNoYXJlZE51bGwoKSkK
ewogICAgZC0+cmVmKCk7Cn0KCmlubGluZSBRU3RyaW5nOjp+UVN0cmluZygpCnsKICAgIGlmICgg
ZC0+ZGVyZWYoKSApIHsKICAgICAgICBpZiAoIGQgPT0gc2hhcmVkX251bGwgKQogICAgICAgICAg
ICBzaGFyZWRfbnVsbCA9IDA7CiAgICAgICAgZC0+ZGVsZXRlU2VsZigpOwogICAgfQp9Cgppbmxp
bmUgUVN0cmluZyAmUVN0cmluZzo6b3BlcmF0b3I9KCBRQ2hhciBjICkKeyByZXR1cm4gKnRoaXMg
PSBRU3RyaW5nKGMpOyB9CgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6b3BlcmF0b3I9KCBjaGFy
IGMgKQp7IHJldHVybiAqdGhpcyA9IFFTdHJpbmcoUUNoYXIoYykpOyB9CgppbmxpbmUgYm9vbCBR
U3RyaW5nOjppc051bGwoKSBjb25zdAp7IHJldHVybiB1bmljb2RlKCkgPT0gMDsgfQoKaW5saW5l
IGJvb2wgUVN0cmluZzo6b3BlcmF0b3IhKCkgY29uc3QKeyByZXR1cm4gaXNOdWxsKCk7IH0KCmlu
bGluZSB1aW50IFFTdHJpbmc6Omxlbmd0aCgpIGNvbnN0CnsgcmV0dXJuIGQtPmxlbjsgfQoKaW5s
aW5lIGJvb2wgUVN0cmluZzo6aXNFbXB0eSgpIGNvbnN0CnsgcmV0dXJuIGxlbmd0aCgpID09IDA7
IH0KCmlubGluZSBRU3RyaW5nIFFTdHJpbmc6OmNvcHkoKSBjb25zdAp7IHJldHVybiBRU3RyaW5n
KCAqdGhpcyApOyB9CgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6cHJlcGVuZCggY29uc3QgUVN0
cmluZyAmIHMgKQp7IHJldHVybiBpbnNlcnQoMCxzKTsgfQoKaW5saW5lIFFTdHJpbmcgJlFTdHJp
bmc6OnByZXBlbmQoIFFDaGFyIGMgKQp7IHJldHVybiBpbnNlcnQoMCxjKTsgfQoKaW5saW5lIFFT
dHJpbmcgJlFTdHJpbmc6OnByZXBlbmQoIGNoYXIgYyApCnsgcmV0dXJuIGluc2VydCgwLGMpOyB9
CgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6YXBwZW5kKCBjb25zdCBRU3RyaW5nICYgcyApCnsg
cmV0dXJuIG9wZXJhdG9yKz0ocyk7IH0KCmlubGluZSBRU3RyaW5nICZRU3RyaW5nOjphcHBlbmQo
IFFDaGFyIGMgKQp7IHJldHVybiBvcGVyYXRvcis9KGMpOyB9CgppbmxpbmUgUVN0cmluZyAmUVN0
cmluZzo6YXBwZW5kKCBjaGFyIGMgKQp7IHJldHVybiBvcGVyYXRvcis9KGMpOyB9CgppbmxpbmUg
UVN0cmluZyAmUVN0cmluZzo6c2V0TnVtKCBzaG9ydCBuLCBpbnQgYmFzZSApCnsgcmV0dXJuIHNl
dE51bSgobG9uZyluLCBiYXNlKTsgfQoKaW5saW5lIFFTdHJpbmcgJlFTdHJpbmc6OnNldE51bSgg
dXNob3J0IG4sIGludCBiYXNlICkKeyByZXR1cm4gc2V0TnVtKCh1bG9uZyluLCBiYXNlKTsgfQoK
aW5saW5lIFFTdHJpbmcgJlFTdHJpbmc6OnNldE51bSggaW50IG4sIGludCBiYXNlICkKeyByZXR1
cm4gc2V0TnVtKChsb25nKW4sIGJhc2UpOyB9CgppbmxpbmUgUVN0cmluZyAmUVN0cmluZzo6c2V0
TnVtKCB1aW50IG4sIGludCBiYXNlICkKeyByZXR1cm4gc2V0TnVtKCh1bG9uZyluLCBiYXNlKTsg
fQoKaW5saW5lIFFTdHJpbmcgJlFTdHJpbmc6OnNldE51bSggZmxvYXQgbiwgY2hhciBmLCBpbnQg
cHJlYyApCnsgcmV0dXJuIHNldE51bSgoZG91YmxlKW4sZixwcmVjKTsgfQoKaW5saW5lIFFTdHJp
bmcgUVN0cmluZzo6YXJnKGludCBhLCBpbnQgZmllbGR3aWR0aCwgaW50IGJhc2UpIGNvbnN0Cnsg
cmV0dXJuIGFyZygobG9uZylhLCBmaWVsZHdpZHRoLCBiYXNlKTsgfQoKaW5saW5lIFFTdHJpbmcg
UVN0cmluZzo6YXJnKHVpbnQgYSwgaW50IGZpZWxkd2lkdGgsIGludCBiYXNlKSBjb25zdAp7IHJl
dHVybiBhcmcoKHVsb25nKWEsIGZpZWxkd2lkdGgsIGJhc2UpOyB9CgppbmxpbmUgUVN0cmluZyBR
U3RyaW5nOjphcmcoc2hvcnQgYSwgaW50IGZpZWxkd2lkdGgsIGludCBiYXNlKSBjb25zdAp7IHJl
dHVybiBhcmcoKGxvbmcpYSwgZmllbGR3aWR0aCwgYmFzZSk7IH0KCmlubGluZSBRU3RyaW5nIFFT
dHJpbmc6OmFyZyh1c2hvcnQgYSwgaW50IGZpZWxkd2lkdGgsIGludCBiYXNlKSBjb25zdAp7IHJl
dHVybiBhcmcoKHVsb25nKWEsIGZpZWxkd2lkdGgsIGJhc2UpOyB9CgppbmxpbmUgaW50IFFTdHJp
bmc6OmZpbmQoIGNoYXIgYywgaW50IGluZGV4LCBib29sIGNzICkgY29uc3QKeyByZXR1cm4gZmlu
ZChRQ2hhcihjKSwgaW5kZXgsIGNzKTsgfQoKaW5saW5lIGludCBRU3RyaW5nOjpmaW5kUmV2KCBj
aGFyIGMsIGludCBpbmRleCwgYm9vbCBjcykgY29uc3QKeyByZXR1cm4gZmluZFJldiggUUNoYXIo
YyksIGluZGV4LCBjcyApOyB9CgoKCmlubGluZSBpbnQgUVN0cmluZzo6ZmluZCggY29uc3QgY2hh
ciogc3RyLCBpbnQgaW5kZXggKSBjb25zdAp7IHJldHVybiBmaW5kKFFTdHJpbmc6OmZyb21MYXRp
bjEoc3RyKSwgaW5kZXgpOyB9CgppbmxpbmUgaW50IFFTdHJpbmc6OmZpbmRSZXYoIGNvbnN0IGNo
YXIqIHN0ciwgaW50IGluZGV4ICkgY29uc3QKeyByZXR1cm4gZmluZFJldihRU3RyaW5nOjpmcm9t
TGF0aW4xKHN0ciksIGluZGV4KTsgfQoKCgoKCgoKICAgICAgICAgYm9vbCBvcGVyYXRvciE9KCBj
b25zdCBRU3RyaW5nICZzMSwgY29uc3QgUVN0cmluZyAmczIgKTsKICAgICAgICAgYm9vbCBvcGVy
YXRvcjwoIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBRU3RyaW5nICZzMiApOwogICAgICAgICBi
b29sIG9wZXJhdG9yPD0oIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBRU3RyaW5nICZzMiApOwog
ICAgICAgICBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBRU3RyaW5n
ICZzMiApOwogICAgICAgICBib29sIG9wZXJhdG9yPiggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0
IFFTdHJpbmcgJnMyICk7CiAgICAgICAgIGJvb2wgb3BlcmF0b3I+PSggY29uc3QgUVN0cmluZyAm
czEsIGNvbnN0IFFTdHJpbmcgJnMyICk7CgogICAgICAgICBib29sIG9wZXJhdG9yIT0oIGNvbnN0
IFFTdHJpbmcgJnMxLCBjb25zdCBjaGFyICpzMiApOwogICAgICAgICBib29sIG9wZXJhdG9yPCgg
Y29uc3QgUVN0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICk7CiAgICAgICAgIGJvb2wgb3BlcmF0
b3I8PSggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICk7CiAgICAgICAgIGJvb2wg
b3BlcmF0b3I9PSggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0IGNoYXIgKnMyICk7CiAgICAgICAg
IGJvb2wgb3BlcmF0b3I+KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIgKTsKICAg
ICAgICAgYm9vbCBvcGVyYXRvcj49KCBjb25zdCBRU3RyaW5nICZzMSwgY29uc3QgY2hhciAqczIg
KTsKICAgICAgICAgYm9vbCBvcGVyYXRvciE9KCBjb25zdCBjaGFyICpzMSwgY29uc3QgUVN0cmlu
ZyAmczIgKTsKICAgICAgICAgYm9vbCBvcGVyYXRvcjwoIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBR
U3RyaW5nICZzMiApOwogICAgICAgICBib29sIG9wZXJhdG9yPD0oIGNvbnN0IGNoYXIgKnMxLCBj
b25zdCBRU3RyaW5nICZzMiApOwogICAgICAgICBib29sIG9wZXJhdG9yPT0oIGNvbnN0IGNoYXIg
KnMxLCBjb25zdCBRU3RyaW5nICZzMiApOwoKICAgICAgICAgYm9vbCBvcGVyYXRvcj49KCBjb25z
dCBjaGFyICpzMSwgY29uc3QgUVN0cmluZyAmczIgKTsKCgogICAgICAgICBpbmxpbmUgUVN0cmlu
ZyBvcGVyYXRvcisoIGNvbnN0IFFTdHJpbmcgJnMxLCBjb25zdCBRU3RyaW5nICZzMiApCnsKICAg
IFFTdHJpbmcgdG1wKCBzMSApOwogICAgdG1wICs9IHMyOwogICAgcmV0dXJuIHRtcDsKfQoKCiAg
ICAgICAgIGlubGluZSBRU3RyaW5nIG9wZXJhdG9yKyggY29uc3QgUVN0cmluZyAmczEsIGNvbnN0
IGNoYXIgKnMyICkKewogICAgUVN0cmluZyB0bXAoIHMxICk7CiAgICB0bXAgKz0gUVN0cmluZzo6
ZnJvbUxhdGluMShzMik7CiAgICByZXR1cm4gdG1wOwp9CgogICAgICAgICBpbmxpbmUgUVN0cmlu
ZyBvcGVyYXRvcisoIGNvbnN0IGNoYXIgKnMxLCBjb25zdCBRU3RyaW5nICZzMiApCnsKICAgIFFT
dHJpbmcgdG1wID0gUVN0cmluZzo6ZnJvbUxhdGluMSggczEgKTsKICAgIHRtcCArPSBzMjsKICAg
IHJldHVybiB0bXA7Cn0KCgogICAgICAgICBpbmxpbmUgUVN0cmluZyBvcGVyYXRvcisoIGNvbnN0
IFFTdHJpbmcgJnMxLCBRQ2hhciBjMiApCnsKICAgIFFTdHJpbmcgdG1wKCBzMSApOwogICAgdG1w
ICs9IGMyOwogICAgcmV0dXJuIHRtcDsKfQoKICAgICAgICAgaW5saW5lIFFTdHJpbmcgb3BlcmF0
b3IrKCBjb25zdCBRU3RyaW5nICZzMSwgY2hhciBjMiApCnsKICAgIFFTdHJpbmcgdG1wKCBzMSAp
OwogICAgdG1wICs9IGMyOwogICAgcmV0dXJuIHRtcDsKfQoKICAgICAgICAgaW5saW5lIFFTdHJp
bmcgb3BlcmF0b3IrKCBRQ2hhciBjMSwgY29uc3QgUVN0cmluZyAmczIgKQp7CiAgICBRU3RyaW5n
IHRtcDsKICAgIHRtcCArPSBjMTsKICAgIHRtcCArPSBzMjsKICAgIHJldHVybiB0bXA7Cn0KCiAg
ICAgICAgIGlubGluZSBRU3RyaW5nIG9wZXJhdG9yKyggY2hhciBjMSwgY29uc3QgUVN0cmluZyAm
czIgKQp7CiAgICBRU3RyaW5nIHRtcDsKICAgIHRtcCArPSBjMTsKICAgIHRtcCArPSBzMjsKICAg
IHJldHVybiB0bXA7Cn0KIyA0NCAicWdkaWN0LmgiIDIKCgpjbGFzcyBRR0RpY3RJdGVyYXRvcjsK
Y2xhc3MgUUdESXRMaXN0OwoKCmNsYXNzIFFCYXNlQnVja2V0CnsKcHVibGljOgogICAgUUNvbGxl
Y3Rpb246Okl0ZW0gZ2V0RGF0YSgpIHsgcmV0dXJuIGRhdGE7IH0KICAgIFFDb2xsZWN0aW9uOjpJ
dGVtIHNldERhdGEoIFFDb2xsZWN0aW9uOjpJdGVtIGQgKSB7IHJldHVybiBkYXRhID0gZDsgfQog
ICAgUUJhc2VCdWNrZXQgKmdldE5leHQoKSB7IHJldHVybiBuZXh0OyB9CiAgICB2b2lkIHNldE5l
eHQoIFFCYXNlQnVja2V0ICpuKSB7IG5leHQgPSBuOyB9CnByb3RlY3RlZDoKICAgIFFCYXNlQnVj
a2V0KCBRQ29sbGVjdGlvbjo6SXRlbSBkLCBRQmFzZUJ1Y2tldCAqbiApIDogZGF0YShkKSwgbmV4
dChuKSB7fQogICAgUUNvbGxlY3Rpb246Okl0ZW0gZGF0YTsKICAgIFFCYXNlQnVja2V0ICpuZXh0
Owp9OwoKY2xhc3MgUVN0cmluZ0J1Y2tldCA6IHB1YmxpYyBRQmFzZUJ1Y2tldAp7CnB1YmxpYzoK
ICAgIFFTdHJpbmdCdWNrZXQoIGNvbnN0IFFTdHJpbmcgJmssIFFDb2xsZWN0aW9uOjpJdGVtIGQs
IFFCYXNlQnVja2V0ICpuICkKICAgICAgICA6IFFCYXNlQnVja2V0KGQsbiksIGtleShrKSB7fQog
ICAgY29uc3QgUVN0cmluZyAmZ2V0S2V5KCkgY29uc3QgeyByZXR1cm4ga2V5OyB9CnByaXZhdGU6
CiAgICBRU3RyaW5nIGtleTsKfTsKCmNsYXNzIFFBc2NpaUJ1Y2tldCA6IHB1YmxpYyBRQmFzZUJ1
Y2tldAp7CnB1YmxpYzoKICAgIFFBc2NpaUJ1Y2tldCggY29uc3QgY2hhciAqaywgUUNvbGxlY3Rp
b246Okl0ZW0gZCwgUUJhc2VCdWNrZXQgKm4gKQogICAgICAgIDogUUJhc2VCdWNrZXQoZCxuKSwg
a2V5KGspIHt9CiAgICBjb25zdCBjaGFyICpnZXRLZXkoKSBjb25zdCB7IHJldHVybiBrZXk7IH0K
cHJpdmF0ZToKICAgIGNvbnN0IGNoYXIgKmtleTsKfTsKCmNsYXNzIFFJbnRCdWNrZXQgOiBwdWJs
aWMgUUJhc2VCdWNrZXQKewpwdWJsaWM6CiAgICBRSW50QnVja2V0KCBsb25nIGssIFFDb2xsZWN0
aW9uOjpJdGVtIGQsIFFCYXNlQnVja2V0ICpuICkKICAgICAgICA6IFFCYXNlQnVja2V0KGQsbiks
IGtleShrKSB7fQogICAgbG9uZyBnZXRLZXkoKSBjb25zdCB7IHJldHVybiBrZXk7IH0KcHJpdmF0
ZToKICAgIGxvbmcga2V5Owp9OwoKY2xhc3MgUVB0ckJ1Y2tldCA6IHB1YmxpYyBRQmFzZUJ1Y2tl
dAp7CnB1YmxpYzoKICAgIFFQdHJCdWNrZXQoIHZvaWQgKmssIFFDb2xsZWN0aW9uOjpJdGVtIGQs
IFFCYXNlQnVja2V0ICpuICkKICAgICAgICA6IFFCYXNlQnVja2V0KGQsbiksIGtleShrKSB7fQog
ICAgdm9pZCAqZ2V0S2V5KCkgY29uc3QgeyByZXR1cm4ga2V5OyB9CnByaXZhdGU6CiAgICB2b2lk
ICprZXk7Cn07CgoKY2xhc3MgUUdEaWN0IDogcHVibGljIFFDb2xsZWN0aW9uCnsKcHVibGljOgog
ICAgdWludCBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIG51bUl0ZW1zOyB9CiAgICB1aW50IHNpemUo
KSBjb25zdCB7IHJldHVybiB2bGVuOyB9CiAgICBRQ29sbGVjdGlvbjo6SXRlbSBsb29rX3N0cmlu
ZyggY29uc3QgUVN0cmluZyYga2V5LCBRQ29sbGVjdGlvbjo6SXRlbSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgKTsKICAgIFFDb2xsZWN0aW9uOjpJdGVtIGxvb2tfYXNj
aWkoIGNvbnN0IGNoYXIgKmtleSwgUUNvbGxlY3Rpb246Okl0ZW0sIGludCApOwogICAgUUNvbGxl
Y3Rpb246Okl0ZW0gbG9va19pbnQoIGxvbmcga2V5LCBRQ29sbGVjdGlvbjo6SXRlbSwgaW50ICk7
CiAgICBRQ29sbGVjdGlvbjo6SXRlbSBsb29rX3B0ciggdm9pZCAqa2V5LCBRQ29sbGVjdGlvbjo6
SXRlbSwgaW50ICk7CgogICAgUURhdGFTdHJlYW0gJnJlYWQoIFFEYXRhU3RyZWFtICYgKTsKICAg
IFFEYXRhU3RyZWFtICZ3cml0ZSggUURhdGFTdHJlYW0gJiApIGNvbnN0OwoKcHJvdGVjdGVkOgog
ICAgZW51bSBLZXlUeXBlIHsgU3RyaW5nS2V5LCBBc2NpaUtleSwgSW50S2V5LCBQdHJLZXkgfTsK
CiAgICBRR0RpY3QoIHVpbnQgbGVuLCBLZXlUeXBlIGt0LCBib29sIGNzLCBib29sIGNrICk7CiAg
ICBRR0RpY3QoIGNvbnN0IFFHRGljdCAmICk7CiAgIH5RR0RpY3QoKTsKCiAgICBRR0RpY3QgJm9w
ZXJhdG9yPSggY29uc3QgUUdEaWN0ICYgKTsKCiAgICBib29sIHJlbW92ZV9zdHJpbmcoIGNvbnN0
IFFTdHJpbmcgJmtleSwgUUNvbGxlY3Rpb246Okl0ZW0gaXRlbT0wICk7CiAgICBib29sIHJlbW92
ZV9hc2NpaSggY29uc3QgY2hhciAqa2V5LCBRQ29sbGVjdGlvbjo6SXRlbSBpdGVtPTAgKTsKICAg
IGJvb2wgcmVtb3ZlX2ludCggbG9uZyBrZXksIFFDb2xsZWN0aW9uOjpJdGVtIGl0ZW09MCApOwog
ICAgYm9vbCByZW1vdmVfcHRyKCB2b2lkICprZXksIFFDb2xsZWN0aW9uOjpJdGVtIGl0ZW09MCAp
OwogICAgUUNvbGxlY3Rpb246Okl0ZW0gdGFrZV9zdHJpbmcoIGNvbnN0IFFTdHJpbmcgJmtleSAp
OwogICAgUUNvbGxlY3Rpb246Okl0ZW0gdGFrZV9hc2NpaSggY29uc3QgY2hhciAqa2V5ICk7CiAg
ICBRQ29sbGVjdGlvbjo6SXRlbSB0YWtlX2ludCggbG9uZyBrZXkgKTsKICAgIFFDb2xsZWN0aW9u
OjpJdGVtIHRha2VfcHRyKCB2b2lkICprZXkgKTsKCiAgICB2b2lkIGNsZWFyKCk7CiAgICB2b2lk
IHJlc2l6ZSggdWludCApOwoKICAgIGludCBoYXNoS2V5U3RyaW5nKCBjb25zdCBRU3RyaW5nICYg
KTsKICAgIGludCBoYXNoS2V5QXNjaWkoIGNvbnN0IGNoYXIgKiApOwoKICAgIHZvaWQgc3RhdGlz
dGljcygpIGNvbnN0OwoKCiAgICB2aXJ0dWFsIFFEYXRhU3RyZWFtICZyZWFkKCBRRGF0YVN0cmVh
bSAmLCBRQ29sbGVjdGlvbjo6SXRlbSAmICk7CiAgICB2aXJ0dWFsIFFEYXRhU3RyZWFtICZ3cml0
ZSggUURhdGFTdHJlYW0gJiwgUUNvbGxlY3Rpb246Okl0ZW0gKSBjb25zdDsKCnByaXZhdGU6CiAg
ICBRQmFzZUJ1Y2tldCAqKnZlYzsKICAgIHVpbnQgdmxlbjsKICAgIHVpbnQgbnVtSXRlbXM7CiAg
ICB1aW50IGtleXR5cGUgOiAyOwogICAgdWludCBjYXNlcyA6IDE7CiAgICB1aW50IGNvcHlrIDog
MTsKICAgIFFHREl0TGlzdCAqaXRlcmF0b3JzOwogICAgdm9pZCB1bmxpbmtfY29tbW9uKCBpbnQs
IFFCYXNlQnVja2V0ICosIFFCYXNlQnVja2V0ICogKTsKICAgIFFTdHJpbmdCdWNrZXQgKnVubGlu
a19zdHJpbmcoIGNvbnN0IFFTdHJpbmcgJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFFDb2xsZWN0aW9uOjpJdGVtIGl0ZW0gPSAwICk7CiAgICBRQXNjaWlCdWNrZXQgKnVubGlu
a19hc2NpaSggY29uc3QgY2hhciAqLCBRQ29sbGVjdGlvbjo6SXRlbSBpdGVtID0gMCApOwogICAg
UUludEJ1Y2tldCAqdW5saW5rX2ludCggbG9uZywgUUNvbGxlY3Rpb246Okl0ZW0gaXRlbSA9IDAg
KTsKICAgIFFQdHJCdWNrZXQgKnVubGlua19wdHIoIHZvaWQgKiwgUUNvbGxlY3Rpb246Okl0ZW0g
aXRlbSA9IDAgKTsKICAgIHZvaWQgaW5pdCggdWludCwgS2V5VHlwZSwgYm9vbCwgYm9vbCApOwog
ICAgZnJpZW5kIGNsYXNzIFFHRGljdEl0ZXJhdG9yOwp9OwoKCmNsYXNzIFFHRGljdEl0ZXJhdG9y
CnsKZnJpZW5kIGNsYXNzIFFHRGljdDsKcHVibGljOgogICAgUUdEaWN0SXRlcmF0b3IoIGNvbnN0
IFFHRGljdCAmICk7CiAgICBRR0RpY3RJdGVyYXRvciggY29uc3QgUUdEaWN0SXRlcmF0b3IgJiAp
OwogICAgUUdEaWN0SXRlcmF0b3IgJm9wZXJhdG9yPSggY29uc3QgUUdEaWN0SXRlcmF0b3IgJiAp
OwogICB+UUdEaWN0SXRlcmF0b3IoKTsKCiAgICBRQ29sbGVjdGlvbjo6SXRlbSB0b0ZpcnN0KCk7
CgogICAgUUNvbGxlY3Rpb246Okl0ZW0gZ2V0KCkgY29uc3Q7CiAgICBRU3RyaW5nIGdldEtleVN0
cmluZygpIGNvbnN0OwogICAgY29uc3QgY2hhciAqZ2V0S2V5QXNjaWkoKSBjb25zdDsKICAgIGxv
bmcgZ2V0S2V5SW50KCkgY29uc3Q7CiAgICB2b2lkICpnZXRLZXlQdHIoKSBjb25zdDsKCiAgICBR
Q29sbGVjdGlvbjo6SXRlbSBvcGVyYXRvcigpKCk7CiAgICBRQ29sbGVjdGlvbjo6SXRlbSBvcGVy
YXRvcisrKCk7CiAgICBRQ29sbGVjdGlvbjo6SXRlbSBvcGVyYXRvcis9KHVpbnQpOwoKcHJvdGVj
dGVkOgogICAgUUdEaWN0ICpkaWN0OwoKcHJpdmF0ZToKICAgIFFCYXNlQnVja2V0ICpjdXJOb2Rl
OwogICAgdWludCBjdXJJbmRleDsKfTsKCmlubGluZSBRQ29sbGVjdGlvbjo6SXRlbSBRR0RpY3RJ
dGVyYXRvcjo6Z2V0KCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyBjdXJOb2RlLT5nZXRE
YXRhKCkgOiAwOwp9CgppbmxpbmUgUVN0cmluZyBRR0RpY3RJdGVyYXRvcjo6Z2V0S2V5U3RyaW5n
KCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyAoKFFTdHJpbmdCdWNrZXQqKWN1ck5vZGUp
LT5nZXRLZXkoKSA6IFFTdHJpbmc6Om51bGw7Cn0KCmlubGluZSBjb25zdCBjaGFyICpRR0RpY3RJ
dGVyYXRvcjo6Z2V0S2V5QXNjaWkoKSBjb25zdAp7CiAgICByZXR1cm4gY3VyTm9kZSA/ICgoUUFz
Y2lpQnVja2V0KiljdXJOb2RlKS0+Z2V0S2V5KCkgOiAwOwp9CgppbmxpbmUgbG9uZyBRR0RpY3RJ
dGVyYXRvcjo6Z2V0S2V5SW50KCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyAoKFFJbnRC
dWNrZXQqKWN1ck5vZGUpLT5nZXRLZXkoKSA6IDA7Cn0KCmlubGluZSB2b2lkICpRR0RpY3RJdGVy
YXRvcjo6Z2V0S2V5UHRyKCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyAoKFFQdHJCdWNr
ZXQqKWN1ck5vZGUpLT5nZXRLZXkoKSA6IDA7Cn0KIyAzOSAicWdkaWN0LmNwcCIgMgojIDEgInFs
aXN0LmgiIDEKIyA0MiAicWxpc3QuaCIKIyAxICJxZ2xpc3QuaCIgMQojIDQyICJxZ2xpc3QuaCIK
IyAxICJxY29sbGVjdGlvbi5oIiAxCiMgNDMgInFnbGlzdC5oIiAyCgoKCgoKCgpjbGFzcyBRTE5v
ZGUKewpmcmllbmQgY2xhc3MgUUdMaXN0OwpmcmllbmQgY2xhc3MgUUdMaXN0SXRlcmF0b3I7CnB1
YmxpYzoKICAgIFFDb2xsZWN0aW9uOjpJdGVtIGdldERhdGEoKSB7IHJldHVybiBkYXRhOyB9CnBy
aXZhdGU6CiAgICBRQ29sbGVjdGlvbjo6SXRlbSBkYXRhOwogICAgUUxOb2RlICpwcmV2OwogICAg
UUxOb2RlICpuZXh0OwogICAgUUxOb2RlKCBRQ29sbGVjdGlvbjo6SXRlbSBkICkgeyBkYXRhID0g
ZDsgfQp9OwoKCgoKCgpjbGFzcyBRR0xpc3QgOiBwdWJsaWMgUUNvbGxlY3Rpb24KewpmcmllbmQg
Y2xhc3MgUUdMaXN0SXRlcmF0b3I7CmZyaWVuZCBjbGFzcyBRR1ZlY3RvcjsKcHVibGljOgogICAg
dWludCBjb3VudCgpIGNvbnN0OwoKCiAgICBRRGF0YVN0cmVhbSAmcmVhZCggUURhdGFTdHJlYW0g
JiApOwogICAgUURhdGFTdHJlYW0gJndyaXRlKCBRRGF0YVN0cmVhbSAmICkgY29uc3Q7Cgpwcm90
ZWN0ZWQ6CiAgICBRR0xpc3QoKTsKICAgIFFHTGlzdCggY29uc3QgUUdMaXN0ICYgKTsKICAgIHZp
cnR1YWwgflFHTGlzdCgpOwoKICAgIFFHTGlzdCAmb3BlcmF0b3I9KCBjb25zdCBRR0xpc3QgJiAp
OwogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRR0xpc3QmICkgY29uc3Q7CgogICAgdm9pZCBp
blNvcnQoIFFDb2xsZWN0aW9uOjpJdGVtICk7CiAgICB2b2lkIGFwcGVuZCggUUNvbGxlY3Rpb246
Okl0ZW0gKTsKICAgIGJvb2wgaW5zZXJ0QXQoIHVpbnQgaW5kZXgsIFFDb2xsZWN0aW9uOjpJdGVt
ICk7CiAgICB2b2lkIHJlbGlua05vZGUoIFFMTm9kZSAqICk7CiAgICBib29sIHJlbW92ZU5vZGUo
IFFMTm9kZSAqICk7CiAgICBib29sIHJlbW92ZSggUUNvbGxlY3Rpb246Okl0ZW0gPSAwICk7CiAg
ICBib29sIHJlbW92ZVJlZiggUUNvbGxlY3Rpb246Okl0ZW0gPSAwICk7CiAgICBib29sIHJlbW92
ZUZpcnN0KCk7CiAgICBib29sIHJlbW92ZUxhc3QoKTsKICAgIGJvb2wgcmVtb3ZlQXQoIHVpbnQg
aW5kZXggKTsKICAgIFFDb2xsZWN0aW9uOjpJdGVtIHRha2VOb2RlKCBRTE5vZGUgKiApOwogICAg
UUNvbGxlY3Rpb246Okl0ZW0gdGFrZSgpOwogICAgUUNvbGxlY3Rpb246Okl0ZW0gdGFrZUF0KCB1
aW50IGluZGV4ICk7CiAgICBRQ29sbGVjdGlvbjo6SXRlbSB0YWtlRmlyc3QoKTsKICAgIFFDb2xs
ZWN0aW9uOjpJdGVtIHRha2VMYXN0KCk7CgogICAgdm9pZCBzb3J0KCk7CiAgICB2b2lkIGNsZWFy
KCk7CgogICAgaW50IGZpbmRSZWYoIFFDb2xsZWN0aW9uOjpJdGVtLCBib29sID0gVFJVRSApOwog
ICAgaW50IGZpbmQoIFFDb2xsZWN0aW9uOjpJdGVtLCBib29sID0gVFJVRSApOwoKICAgIHVpbnQg
Y29udGFpbnNSZWYoIFFDb2xsZWN0aW9uOjpJdGVtICkgY29uc3Q7CiAgICB1aW50IGNvbnRhaW5z
KCBRQ29sbGVjdGlvbjo6SXRlbSApIGNvbnN0OwoKICAgIFFDb2xsZWN0aW9uOjpJdGVtIGF0KCB1
aW50IGluZGV4ICk7CiAgICBpbnQgYXQoKSBjb25zdDsKICAgIFFMTm9kZSAqY3VycmVudE5vZGUo
KSBjb25zdDsKCiAgICBRQ29sbGVjdGlvbjo6SXRlbSBnZXQoKSBjb25zdDsKCiAgICBRQ29sbGVj
dGlvbjo6SXRlbSBjZmlyc3QoKSBjb25zdDsKICAgIFFDb2xsZWN0aW9uOjpJdGVtIGNsYXN0KCkg
Y29uc3Q7CiAgICBRQ29sbGVjdGlvbjo6SXRlbSBmaXJzdCgpOwogICAgUUNvbGxlY3Rpb246Okl0
ZW0gbGFzdCgpOwogICAgUUNvbGxlY3Rpb246Okl0ZW0gbmV4dCgpOwogICAgUUNvbGxlY3Rpb246
Okl0ZW0gcHJldigpOwoKICAgIHZvaWQgdG9WZWN0b3IoIFFHVmVjdG9yICogKSBjb25zdDsKCiAg
ICB2aXJ0dWFsIGludCBjb21wYXJlSXRlbXMoIFFDb2xsZWN0aW9uOjpJdGVtLCBRQ29sbGVjdGlv
bjo6SXRlbSApOwoKCiAgICB2aXJ0dWFsIFFEYXRhU3RyZWFtICZyZWFkKCBRRGF0YVN0cmVhbSAm
LCBRQ29sbGVjdGlvbjo6SXRlbSAmICk7CiAgICB2aXJ0dWFsIFFEYXRhU3RyZWFtICZ3cml0ZSgg
UURhdGFTdHJlYW0gJiwgUUNvbGxlY3Rpb246Okl0ZW0gKSBjb25zdDsKCnByaXZhdGU6CiAgICB2
b2lkIHByZXBlbmQoIFFDb2xsZWN0aW9uOjpJdGVtICk7CgogICAgdm9pZCBoZWFwU29ydFB1c2hE
b3duKCBRQ29sbGVjdGlvbjo6SXRlbSogaGVhcCwgaW50IGZpcnN0LCBpbnQgbGFzdCApOwoKICAg
IFFMTm9kZSAqZmlyc3ROb2RlOwogICAgUUxOb2RlICpsYXN0Tm9kZTsKICAgIFFMTm9kZSAqY3Vy
Tm9kZTsKICAgIGludCBjdXJJbmRleDsKICAgIHVpbnQgbnVtTm9kZXM7CiAgICBRR0xpc3QgKml0
ZXJhdG9yczsKCiAgICBRTE5vZGUgKmxvY2F0ZSggdWludCApOwogICAgUUxOb2RlICp1bmxpbmso
KTsKfTsKCgppbmxpbmUgdWludCBRR0xpc3Q6OmNvdW50KCkgY29uc3QKewogICAgcmV0dXJuIG51
bU5vZGVzOwp9CgppbmxpbmUgYm9vbCBRR0xpc3Q6OnJlbW92ZUZpcnN0KCkKewogICAgZmlyc3Qo
KTsKICAgIHJldHVybiByZW1vdmUoKTsKfQoKaW5saW5lIGJvb2wgUUdMaXN0OjpyZW1vdmVMYXN0
KCkKewogICAgbGFzdCgpOwogICAgcmV0dXJuIHJlbW92ZSgpOwp9CgppbmxpbmUgaW50IFFHTGlz
dDo6YXQoKSBjb25zdAp7CiAgICByZXR1cm4gY3VySW5kZXg7Cn0KCmlubGluZSBRQ29sbGVjdGlv
bjo6SXRlbSBRR0xpc3Q6OmF0KCB1aW50IGluZGV4ICkKewogICAgUUxOb2RlICpuID0gbG9jYXRl
KCBpbmRleCApOwogICAgcmV0dXJuIG4gPyBuLT5kYXRhIDogMDsKfQoKaW5saW5lIFFMTm9kZSAq
UUdMaXN0OjpjdXJyZW50Tm9kZSgpIGNvbnN0CnsKICAgIHJldHVybiBjdXJOb2RlOwp9Cgppbmxp
bmUgUUNvbGxlY3Rpb246Okl0ZW0gUUdMaXN0OjpnZXQoKSBjb25zdAp7CiAgICByZXR1cm4gY3Vy
Tm9kZSA/IGN1ck5vZGUtPmRhdGEgOiAwOwp9CgppbmxpbmUgUUNvbGxlY3Rpb246Okl0ZW0gUUdM
aXN0OjpjZmlyc3QoKSBjb25zdAp7CiAgICByZXR1cm4gZmlyc3ROb2RlID8gZmlyc3ROb2RlLT5k
YXRhIDogMDsKfQoKaW5saW5lIFFDb2xsZWN0aW9uOjpJdGVtIFFHTGlzdDo6Y2xhc3QoKSBjb25z
dAp7CiAgICByZXR1cm4gbGFzdE5vZGUgPyBsYXN0Tm9kZS0+ZGF0YSA6IDA7Cn0KCgoKCgoKCiAg
ICAgICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRRGF0YVN0cmVhbSAmLCBRR0xpc3QgJiAp
OwogICAgICAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUURhdGFTdHJlYW0gJiwgY29uc3Qg
UUdMaXN0ICYgKTsKCgoKCgoKY2xhc3MgUUdMaXN0SXRlcmF0b3IKewpmcmllbmQgY2xhc3MgUUdM
aXN0Owpwcm90ZWN0ZWQ6CiAgICBRR0xpc3RJdGVyYXRvciggY29uc3QgUUdMaXN0ICYgKTsKICAg
IFFHTGlzdEl0ZXJhdG9yKCBjb25zdCBRR0xpc3RJdGVyYXRvciAmICk7CiAgICBRR0xpc3RJdGVy
YXRvciAmb3BlcmF0b3I9KCBjb25zdCBRR0xpc3RJdGVyYXRvciAmICk7CiAgIH5RR0xpc3RJdGVy
YXRvcigpOwoKICAgIGJvb2wgYXRGaXJzdCgpIGNvbnN0OwogICAgYm9vbCBhdExhc3QoKSBjb25z
dDsKICAgIFFDb2xsZWN0aW9uOjpJdGVtIHRvRmlyc3QoKTsKICAgIFFDb2xsZWN0aW9uOjpJdGVt
IHRvTGFzdCgpOwoKICAgIFFDb2xsZWN0aW9uOjpJdGVtIGdldCgpIGNvbnN0OwogICAgUUNvbGxl
Y3Rpb246Okl0ZW0gb3BlcmF0b3IoKSgpOwogICAgUUNvbGxlY3Rpb246Okl0ZW0gb3BlcmF0b3Ir
KygpOwogICAgUUNvbGxlY3Rpb246Okl0ZW0gb3BlcmF0b3IrPSh1aW50KTsKICAgIFFDb2xsZWN0
aW9uOjpJdGVtIG9wZXJhdG9yLS0oKTsKICAgIFFDb2xsZWN0aW9uOjpJdGVtIG9wZXJhdG9yLT0o
dWludCk7Cgpwcm90ZWN0ZWQ6CiAgICBRR0xpc3QgKmxpc3Q7Cgpwcml2YXRlOgogICAgUUxOb2Rl
ICpjdXJOb2RlOwp9OwoKCmlubGluZSBib29sIFFHTGlzdEl0ZXJhdG9yOjphdEZpcnN0KCkgY29u
c3QKewogICAgcmV0dXJuIGN1ck5vZGUgPT0gbGlzdC0+Zmlyc3ROb2RlOwp9CgppbmxpbmUgYm9v
bCBRR0xpc3RJdGVyYXRvcjo6YXRMYXN0KCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPT0g
bGlzdC0+bGFzdE5vZGU7Cn0KCmlubGluZSBRQ29sbGVjdGlvbjo6SXRlbSBRR0xpc3RJdGVyYXRv
cjo6Z2V0KCkgY29uc3QKewogICAgcmV0dXJuIGN1ck5vZGUgPyBjdXJOb2RlLT5kYXRhIDogMDsK
fQojIDQzICJxbGlzdC5oIiAyCgoKCnRlbXBsYXRlPGNsYXNzIHR5cGU+IGNsYXNzIFFMaXN0IDog
cHVibGljIFFHTGlzdAp7CnB1YmxpYzoKICAgIFFMaXN0KCkge30KICAgIFFMaXN0KCBjb25zdCBR
TGlzdDx0eXBlPiAmbCApIDogUUdMaXN0KGwpIHt9CiAgIH5RTGlzdCgpIHsgY2xlYXIoKTsgfQog
ICAgUUxpc3Q8dHlwZT4gJm9wZXJhdG9yPShjb25zdCBRTGlzdDx0eXBlPiAmbCkKICAgICAgICAg
ICAgICAgICAgICAgICAgeyByZXR1cm4gKFFMaXN0PHR5cGU+JilRR0xpc3Q6Om9wZXJhdG9yPShs
KTsgfQogICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBRTGlzdDx0eXBlPiAmbGlzdCApIGNvbnN0
CiAgICB7IHJldHVybiBRR0xpc3Q6Om9wZXJhdG9yPT0oIGxpc3QgKTsgfQogICAgdWludCBjb3Vu
dCgpIGNvbnN0IHsgcmV0dXJuIFFHTGlzdDo6Y291bnQoKTsgfQogICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gUUdMaXN0Ojpjb3VudCgpID09IDA7IH0KICAgIGJvb2wgaW5zZXJ0KCB1
aW50IGksIGNvbnN0IHR5cGUgKmQpeyByZXR1cm4gUUdMaXN0OjppbnNlcnRBdChpLChRQ29sbGVj
dGlvbjo6SXRlbSlkKTsgfQogICAgdm9pZCBpblNvcnQoIGNvbnN0IHR5cGUgKmQgKSB7IFFHTGlz
dDo6aW5Tb3J0KChRQ29sbGVjdGlvbjo6SXRlbSlkKTsgfQogICAgdm9pZCBwcmVwZW5kKCBjb25z
dCB0eXBlICpkICkgeyBRR0xpc3Q6Omluc2VydEF0KDAsKFFDb2xsZWN0aW9uOjpJdGVtKWQpOyB9
CiAgICB2b2lkIGFwcGVuZCggY29uc3QgdHlwZSAqZCApIHsgUUdMaXN0OjphcHBlbmQoKFFDb2xs
ZWN0aW9uOjpJdGVtKWQpOyB9CiAgICBib29sIHJlbW92ZSggdWludCBpICkgeyByZXR1cm4gUUdM
aXN0OjpyZW1vdmVBdChpKTsgfQogICAgYm9vbCByZW1vdmUoKSB7IHJldHVybiBRR0xpc3Q6OnJl
bW92ZSgoUUNvbGxlY3Rpb246Okl0ZW0pMCk7IH0KICAgIGJvb2wgcmVtb3ZlKCBjb25zdCB0eXBl
ICpkICkgeyByZXR1cm4gUUdMaXN0OjpyZW1vdmUoKFFDb2xsZWN0aW9uOjpJdGVtKWQpOyB9CiAg
ICBib29sIHJlbW92ZVJlZiggY29uc3QgdHlwZSAqZCApIHsgcmV0dXJuIFFHTGlzdDo6cmVtb3Zl
UmVmKChRQ29sbGVjdGlvbjo6SXRlbSlkKTsgfQogICAgdm9pZCByZW1vdmVOb2RlKCBRTE5vZGUg
Km4gKSB7IFFHTGlzdDo6cmVtb3ZlTm9kZShuKTsgfQogICAgYm9vbCByZW1vdmVGaXJzdCgpIHsg
cmV0dXJuIFFHTGlzdDo6cmVtb3ZlRmlyc3QoKTsgfQogICAgYm9vbCByZW1vdmVMYXN0KCkgeyBy
ZXR1cm4gUUdMaXN0OjpyZW1vdmVMYXN0KCk7IH0KICAgIHR5cGUgKnRha2UoIHVpbnQgaSApIHsg
cmV0dXJuICh0eXBlICopUUdMaXN0Ojp0YWtlQXQoaSk7IH0KICAgIHR5cGUgKnRha2UoKSB7IHJl
dHVybiAodHlwZSAqKVFHTGlzdDo6dGFrZSgpOyB9CiAgICB0eXBlICp0YWtlTm9kZSggUUxOb2Rl
ICpuICkgeyByZXR1cm4gKHR5cGUgKilRR0xpc3Q6OnRha2VOb2RlKG4pOyB9CiAgICB2b2lkIGNs
ZWFyKCkgeyBRR0xpc3Q6OmNsZWFyKCk7IH0KICAgIHZvaWQgc29ydCgpIHsgUUdMaXN0Ojpzb3J0
KCk7IH0KICAgIGludCBmaW5kKCBjb25zdCB0eXBlICpkICkgeyByZXR1cm4gUUdMaXN0OjpmaW5k
KChRQ29sbGVjdGlvbjo6SXRlbSlkKTsgfQogICAgaW50IGZpbmROZXh0KCBjb25zdCB0eXBlICpk
ICkgeyByZXR1cm4gUUdMaXN0OjpmaW5kKChRQ29sbGVjdGlvbjo6SXRlbSlkLEZBTFNFKTsgfQog
ICAgaW50IGZpbmRSZWYoIGNvbnN0IHR5cGUgKmQgKSB7IHJldHVybiBRR0xpc3Q6OmZpbmRSZWYo
KFFDb2xsZWN0aW9uOjpJdGVtKWQpOyB9CiAgICBpbnQgZmluZE5leHRSZWYoIGNvbnN0IHR5cGUg
KmQgKXsgcmV0dXJuIFFHTGlzdDo6ZmluZFJlZigoUUNvbGxlY3Rpb246Okl0ZW0pZCxGQUxTRSk7
fQogICAgdWludCBjb250YWlucyggY29uc3QgdHlwZSAqZCApIGNvbnN0IHsgcmV0dXJuIFFHTGlz
dDo6Y29udGFpbnMoKFFDb2xsZWN0aW9uOjpJdGVtKWQpOyB9CiAgICB1aW50IGNvbnRhaW5zUmVm
KCBjb25zdCB0eXBlICpkICkgY29uc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHsgcmV0dXJuIFFHTGlzdDo6Y29udGFpbnNSZWYoKFFDb2xsZWN0aW9uOjpJdGVtKWQp
OyB9CiAgICB0eXBlICphdCggdWludCBpICkgeyByZXR1cm4gKHR5cGUgKilRR0xpc3Q6OmF0KGkp
OyB9CiAgICBpbnQgYXQoKSBjb25zdCB7IHJldHVybiBRR0xpc3Q6OmF0KCk7IH0KICAgIHR5cGUg
KmN1cnJlbnQoKSBjb25zdCB7IHJldHVybiAodHlwZSAqKVFHTGlzdDo6Z2V0KCk7IH0KICAgIFFM
Tm9kZSAqY3VycmVudE5vZGUoKSBjb25zdCB7IHJldHVybiBRR0xpc3Q6OmN1cnJlbnROb2RlKCk7
IH0KICAgIHR5cGUgKmdldEZpcnN0KCkgY29uc3QgeyByZXR1cm4gKHR5cGUgKilRR0xpc3Q6OmNm
aXJzdCgpOyB9CiAgICB0eXBlICpnZXRMYXN0KCkgY29uc3QgeyByZXR1cm4gKHR5cGUgKilRR0xp
c3Q6OmNsYXN0KCk7IH0KICAgIHR5cGUgKmZpcnN0KCkgeyByZXR1cm4gKHR5cGUgKilRR0xpc3Q6
OmZpcnN0KCk7IH0KICAgIHR5cGUgKmxhc3QoKSB7IHJldHVybiAodHlwZSAqKVFHTGlzdDo6bGFz
dCgpOyB9CiAgICB0eXBlICpuZXh0KCkgeyByZXR1cm4gKHR5cGUgKilRR0xpc3Q6Om5leHQoKTsg
fQogICAgdHlwZSAqcHJldigpIHsgcmV0dXJuICh0eXBlICopUUdMaXN0OjpwcmV2KCk7IH0KICAg
IHZvaWQgdG9WZWN0b3IoIFFHVmVjdG9yICp2ZWMgKWNvbnN0eyBRR0xpc3Q6OnRvVmVjdG9yKHZl
Yyk7IH0KcHJpdmF0ZToKICAgIHZvaWQgZGVsZXRlSXRlbSggUUNvbGxlY3Rpb246Okl0ZW0gZCAp
Owp9OwoKCgoKCgoKdGVtcGxhdGU8Y2xhc3MgdHlwZT4gaW5saW5lIHZvaWQgUUxpc3Q8dHlwZT46
OmRlbGV0ZUl0ZW0oIFFDb2xsZWN0aW9uOjpJdGVtIGQgKQp7CiAgICBpZiAoIGRlbF9pdGVtICkg
ZGVsZXRlICh0eXBlICopZDsKfQoKCnRlbXBsYXRlPGNsYXNzIHR5cGU+IGNsYXNzIFFMaXN0SXRl
cmF0b3IgOiBwdWJsaWMgUUdMaXN0SXRlcmF0b3IKewpwdWJsaWM6CiAgICBRTGlzdEl0ZXJhdG9y
KGNvbnN0IFFMaXN0PHR5cGU+ICZsKSA6UUdMaXN0SXRlcmF0b3IoKFFHTGlzdCAmKWwpIHt9CiAg
IH5RTGlzdEl0ZXJhdG9yKCkge30KICAgIHVpbnQgY291bnQoKSBjb25zdCB7IHJldHVybiBsaXN0
LT5jb3VudCgpOyB9CiAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBsaXN0LT5jb3Vu
dCgpID09IDA7IH0KICAgIGJvb2wgYXRGaXJzdCgpIGNvbnN0IHsgcmV0dXJuIFFHTGlzdEl0ZXJh
dG9yOjphdEZpcnN0KCk7IH0KICAgIGJvb2wgYXRMYXN0KCkgY29uc3QgeyByZXR1cm4gUUdMaXN0
SXRlcmF0b3I6OmF0TGFzdCgpOyB9CiAgICB0eXBlICp0b0ZpcnN0KCkgeyByZXR1cm4gKHR5cGUg
KilRR0xpc3RJdGVyYXRvcjo6dG9GaXJzdCgpOyB9CiAgICB0eXBlICp0b0xhc3QoKSB7IHJldHVy
biAodHlwZSAqKVFHTGlzdEl0ZXJhdG9yOjp0b0xhc3QoKTsgfQogICAgb3BlcmF0b3IgdHlwZSAq
KCkgY29uc3QgeyByZXR1cm4gKHR5cGUgKilRR0xpc3RJdGVyYXRvcjo6Z2V0KCk7IH0KICAgIHR5
cGUgKm9wZXJhdG9yKigpIHsgcmV0dXJuICh0eXBlICopUUdMaXN0SXRlcmF0b3I6OmdldCgpOyB9
CgoKCgoKCgogICAgdHlwZSAqY3VycmVudCgpIGNvbnN0IHsgcmV0dXJuICh0eXBlICopUUdMaXN0
SXRlcmF0b3I6OmdldCgpOyB9CiAgICB0eXBlICpvcGVyYXRvcigpKCkgeyByZXR1cm4gKHR5cGUg
KilRR0xpc3RJdGVyYXRvcjo6b3BlcmF0b3IoKSgpO30KICAgIHR5cGUgKm9wZXJhdG9yKysoKSB7
IHJldHVybiAodHlwZSAqKVFHTGlzdEl0ZXJhdG9yOjpvcGVyYXRvcisrKCk7IH0KICAgIHR5cGUg
Km9wZXJhdG9yKz0odWludCBqKSB7IHJldHVybiAodHlwZSAqKVFHTGlzdEl0ZXJhdG9yOjpvcGVy
YXRvcis9KGopO30KICAgIHR5cGUgKm9wZXJhdG9yLS0oKSB7IHJldHVybiAodHlwZSAqKVFHTGlz
dEl0ZXJhdG9yOjpvcGVyYXRvci0tKCk7IH0KICAgIHR5cGUgKm9wZXJhdG9yLT0odWludCBqKSB7
IHJldHVybiAodHlwZSAqKVFHTGlzdEl0ZXJhdG9yOjpvcGVyYXRvci09KGopO30KICAgIFFMaXN0
SXRlcmF0b3I8dHlwZT4mIG9wZXJhdG9yPShjb25zdCBRTGlzdEl0ZXJhdG9yPHR5cGU+Jml0KQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IFFHTGlzdEl0ZXJhdG9yOjpvcGVyYXRvcj0o
aXQpOyByZXR1cm4gKnRoaXM7IH0KfTsKIyA0MCAicWdkaWN0LmNwcCIgMgojIDEgInFzdHJpbmcu
aCIgMQojIDQxICJxZ2RpY3QuY3BwIiAyCiMgMSAicWRhdGFzdHJlYW0uaCIgMQojIDQyICJxZGF0
YXN0cmVhbS5oIgojIDEgInFpb2RldmljZS5oIiAxCiMgNDIgInFpb2RldmljZS5oIgojIDEgInFn
bG9iYWwuaCIgMQojIDQzICJxaW9kZXZpY2UuaCIgMgojIDEgInFjc3RyaW5nLmgiIDEKIyA0NCAi
cWlvZGV2aWNlLmgiIDIKIyA4OCAicWlvZGV2aWNlLmgiCmNsYXNzIFFJT0RldmljZQp7CnB1Ymxp
YzoKICAgIFFJT0RldmljZSgpOwogICAgdmlydHVhbCB+UUlPRGV2aWNlKCk7CgogICAgaW50IGZs
YWdzKCkgY29uc3QgeyByZXR1cm4gaW9Nb2RlOyB9CiAgICBpbnQgbW9kZSgpIGNvbnN0IHsgcmV0
dXJuIGlvTW9kZSAmIDB4MDBmZjsgfQogICAgaW50IHN0YXRlKCkgY29uc3QgeyByZXR1cm4gaW9N
b2RlICYgMHhmMDAwOyB9CgogICAgYm9vbCBpc0RpcmVjdEFjY2VzcygpIGNvbnN0IHsgcmV0dXJu
ICgoaW9Nb2RlICYgMHgwMTAwKSA9PSAweDAxMDApOyB9CiAgICBib29sIGlzU2VxdWVudGlhbEFj
Y2VzcygpIGNvbnN0IHsgcmV0dXJuICgoaW9Nb2RlICYgMHgwMjAwKSA9PSAweDAyMDApOyB9CiAg
ICBib29sIGlzQ29tYmluZWRBY2Nlc3MoKSBjb25zdCB7IHJldHVybiAoKGlvTW9kZSAmIDB4MDMw
MCkgPT0gMHgwMzAwKTsgfQogICAgYm9vbCBpc0J1ZmZlcmVkKCkgY29uc3QgeyByZXR1cm4gKChp
b01vZGUgJiAweDAwNDApICE9IDB4MDA0MCk7IH0KICAgIGJvb2wgaXNSYXcoKSBjb25zdCB7IHJl
dHVybiAoKGlvTW9kZSAmIDB4MDA0MCkgPT0gMHgwMDQwKTsgfQogICAgYm9vbCBpc1N5bmNocm9u
b3VzKCkgY29uc3QgeyByZXR1cm4gKChpb01vZGUgJiAweDAwODApICE9IDB4MDA4MCk7IH0KICAg
IGJvb2wgaXNBc3luY2hyb25vdXMoKSBjb25zdCB7IHJldHVybiAoKGlvTW9kZSAmIDB4MDA4MCkg
PT0gMHgwMDgwKTsgfQogICAgYm9vbCBpc1RyYW5zbGF0ZWQoKSBjb25zdCB7IHJldHVybiAoKGlv
TW9kZSAmIDB4MDAxMCkgPT0gMHgwMDEwKTsgfQogICAgYm9vbCBpc1JlYWRhYmxlKCkgY29uc3Qg
eyByZXR1cm4gKChpb01vZGUgJiAweDAwMDEpID09IDB4MDAwMSk7IH0KICAgIGJvb2wgaXNXcml0
YWJsZSgpIGNvbnN0IHsgcmV0dXJuICgoaW9Nb2RlICYgMHgwMDAyKSA9PSAweDAwMDIpOyB9CiAg
ICBib29sIGlzUmVhZFdyaXRlKCkgY29uc3QgeyByZXR1cm4gKChpb01vZGUgJiAweDAwMDMpID09
IDB4MDAwMyk7IH0KICAgIGJvb2wgaXNJbmFjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRlKCkg
PT0gMDsgfQogICAgYm9vbCBpc09wZW4oKSBjb25zdCB7IHJldHVybiBzdGF0ZSgpID09IDB4MTAw
MDsgfQoKICAgIGludCBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBpb1N0OyB9CiAgICB2b2lkIHJl
c2V0U3RhdHVzKCkgeyBpb1N0ID0gMDsgfQoKICAgIHZpcnR1YWwgYm9vbCBvcGVuKCBpbnQgbW9k
ZSApID0gMDsKICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpID0gMDsKICAgIHZpcnR1YWwgdm9pZCBm
bHVzaCgpID0gMDsKCiAgICB2aXJ0dWFsIHVpbnQgc2l6ZSgpIGNvbnN0ID0gMDsKICAgIHZpcnR1
YWwgaW50IGF0KCkgY29uc3Q7CiAgICB2aXJ0dWFsIGJvb2wgYXQoIGludCApOwogICAgdmlydHVh
bCBib29sIGF0RW5kKCkgY29uc3Q7CiAgICBib29sIHJlc2V0KCkgeyByZXR1cm4gYXQoMCk7IH0K
CiAgICB2aXJ0dWFsIGludCByZWFkQmxvY2soIGNoYXIgKmRhdGEsIHVpbnQgbWF4bGVuICkgPSAw
OwogICAgdmlydHVhbCBpbnQgd3JpdGVCbG9jayggY29uc3QgY2hhciAqZGF0YSwgdWludCBsZW4g
KSA9IDA7CiAgICB2aXJ0dWFsIGludCByZWFkTGluZSggY2hhciAqZGF0YSwgdWludCBtYXhsZW4g
KTsKICAgIGludCB3cml0ZUJsb2NrKCBjb25zdCBRQnl0ZUFycmF5JiBkYXRhICk7CiAgICBRQnl0
ZUFycmF5IHJlYWRBbGwoKTsKCiAgICB2aXJ0dWFsIGludCBnZXRjaCgpID0gMDsKICAgIHZpcnR1
YWwgaW50IHB1dGNoKCBpbnQgKSA9IDA7CiAgICB2aXJ0dWFsIGludCB1bmdldGNoKCBpbnQgKSA9
IDA7Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkIHNldEZsYWdzKCBpbnQgZiApIHsgaW9Nb2RlID0gZjsg
fQogICAgdm9pZCBzZXRUeXBlKCBpbnQgKTsKICAgIHZvaWQgc2V0TW9kZSggaW50ICk7CiAgICB2
b2lkIHNldFN0YXRlKCBpbnQgKTsKICAgIHZvaWQgc2V0U3RhdHVzKCBpbnQgKTsKICAgIGludCBp
b0luZGV4OwoKcHJpdmF0ZToKICAgIGludCBpb01vZGU7CiAgICBpbnQgaW9TdDsKCnByaXZhdGU6
CgogICAgUUlPRGV2aWNlKCBjb25zdCBRSU9EZXZpY2UgJiApOwogICAgUUlPRGV2aWNlICZvcGVy
YXRvcj0oIGNvbnN0IFFJT0RldmljZSAmICk7Cgp9OwojIDQzICJxZGF0YXN0cmVhbS5oIiAyCiMg
MSAicXN0cmluZy5oIiAxCiMgNDQgInFkYXRhc3RyZWFtLmgiIDIKCgoKY2xhc3MgUURhdGFTdHJl
YW0KewpwdWJsaWM6CiAgICBRRGF0YVN0cmVhbSgpOwogICAgUURhdGFTdHJlYW0oIFFJT0Rldmlj
ZSAqICk7CiAgICBRRGF0YVN0cmVhbSggUUJ5dGVBcnJheSwgaW50IG1vZGUgKTsKICAgIHZpcnR1
YWwgflFEYXRhU3RyZWFtKCk7CgogICAgUUlPRGV2aWNlICpkZXZpY2UoKSBjb25zdDsKICAgIHZv
aWQgc2V0RGV2aWNlKCBRSU9EZXZpY2UgKiApOwogICAgdm9pZCB1bnNldERldmljZSgpOwoKICAg
IGJvb2wgYXRFbmQoKSBjb25zdDsKICAgIGJvb2wgZW9mKCkgY29uc3Q7CgogICAgZW51bSBCeXRl
T3JkZXIgeyBCaWdFbmRpYW4sIExpdHRsZUVuZGlhbiB9OwogICAgaW50IGJ5dGVPcmRlcigpIGNv
bnN0OwogICAgdm9pZCBzZXRCeXRlT3JkZXIoIGludCApOwoKICAgIGJvb2wgaXNQcmludGFibGVE
YXRhKCkgY29uc3Q7CiAgICB2b2lkIHNldFByaW50YWJsZURhdGEoIGJvb2wgKTsKCiAgICBpbnQg
dmVyc2lvbigpIGNvbnN0OwogICAgdm9pZCBzZXRWZXJzaW9uKCBpbnQgKTsKCiAgICBRRGF0YVN0
cmVhbSAmb3BlcmF0b3I+PiggUV9JTlQ4ICZpICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I+
PiggUV9VSU5UOCAmaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFfSU5UMTYgJmkg
KTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRX1VJTlQxNiAmaSApOwogICAgUURhdGFT
dHJlYW0gJm9wZXJhdG9yPj4oIFFfSU5UMzIgJmkgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRv
cj4+KCBRX1VJTlQzMiAmaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIFFfSU5UNjQg
JmkgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcj4+KCBRX1VJTlQ2NCAmaSApOwoKICAgIFFE
YXRhU3RyZWFtICZvcGVyYXRvcj4+KCBmbG9hdCAmZiApOwogICAgUURhdGFTdHJlYW0gJm9wZXJh
dG9yPj4oIGRvdWJsZSAmZiApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPj4oIGNoYXIgKiZz
dHIgKTsKCiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUV9JTlQ4IGkgKTsKICAgIFFEYXRh
U3RyZWFtICZvcGVyYXRvcjw8KCBRX1VJTlQ4IGkgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRv
cjw8KCBRX0lOVDE2IGkgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRX1VJTlQxNiBp
ICk7CiAgICBRRGF0YVN0cmVhbSAmb3BlcmF0b3I8PCggUV9JTlQzMiBpICk7CiAgICBRRGF0YVN0
cmVhbSAmb3BlcmF0b3I8PCggUV9VSU5UMzIgaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9y
PDwoIFFfSU5UNjQgaSApOwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPDwoIFFfVUlOVDY0IGkg
KTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBmbG9hdCBmICk7CiAgICBRRGF0YVN0cmVh
bSAmb3BlcmF0b3I8PCggZG91YmxlIGYgKTsKICAgIFFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBj
b25zdCBjaGFyICpzdHIgKTsKCiAgICBRRGF0YVN0cmVhbSAmcmVhZEJ5dGVzKCBjaGFyIComLCB1
aW50ICZsZW4gKTsKICAgIFFEYXRhU3RyZWFtICZyZWFkUmF3Qnl0ZXMoIGNoYXIgKiwgdWludCBs
ZW4gKTsKCiAgICBRRGF0YVN0cmVhbSAmd3JpdGVCeXRlcyggY29uc3QgY2hhciAqLCB1aW50IGxl
biApOwogICAgUURhdGFTdHJlYW0gJndyaXRlUmF3Qnl0ZXMoIGNvbnN0IGNoYXIgKiwgdWludCBs
ZW4gKTsKCnByaXZhdGU6CiAgICBRSU9EZXZpY2UgKmRldjsKICAgIGJvb2wgb3duZGV2OwogICAg
aW50IGJ5dGVvcmRlcjsKICAgIGJvb2wgcHJpbnRhYmxlOwogICAgYm9vbCBub3N3YXA7CiAgICBp
bnQgdmVyOwoKcHJpdmF0ZToKCiAgICBRRGF0YVN0cmVhbSggY29uc3QgUURhdGFTdHJlYW0gJiAp
OwogICAgUURhdGFTdHJlYW0gJm9wZXJhdG9yPSggY29uc3QgUURhdGFTdHJlYW0gJiApOwoKfTsK
CgoKCgoKaW5saW5lIFFJT0RldmljZSAqUURhdGFTdHJlYW06OmRldmljZSgpIGNvbnN0CnsgcmV0
dXJuIGRldjsgfQoKaW5saW5lIGJvb2wgUURhdGFTdHJlYW06OmF0RW5kKCkgY29uc3QKeyByZXR1
cm4gZGV2ID8gZGV2LT5hdEVuZCgpIDogVFJVRTsgfQoKaW5saW5lIGJvb2wgUURhdGFTdHJlYW06
OmVvZigpIGNvbnN0CnsgcmV0dXJuIGF0RW5kKCk7IH0KCmlubGluZSBpbnQgUURhdGFTdHJlYW06
OmJ5dGVPcmRlcigpIGNvbnN0CnsgcmV0dXJuIGJ5dGVvcmRlcjsgfQoKaW5saW5lIGJvb2wgUURh
dGFTdHJlYW06OmlzUHJpbnRhYmxlRGF0YSgpIGNvbnN0CnsgcmV0dXJuIHByaW50YWJsZTsgfQoK
aW5saW5lIHZvaWQgUURhdGFTdHJlYW06OnNldFByaW50YWJsZURhdGEoIGJvb2wgcCApCnsgcHJp
bnRhYmxlID0gcDsgfQoKaW5saW5lIGludCBRRGF0YVN0cmVhbTo6dmVyc2lvbigpIGNvbnN0Cnsg
cmV0dXJuIHZlcjsgfQoKaW5saW5lIHZvaWQgUURhdGFTdHJlYW06OnNldFZlcnNpb24oIGludCB2
ICkKeyB2ZXIgPSB2OyB9CgppbmxpbmUgUURhdGFTdHJlYW0gJlFEYXRhU3RyZWFtOjpvcGVyYXRv
cj4+KCBRX1VJTlQ4ICZpICkKeyByZXR1cm4gKnRoaXMgPj4gKFFfSU5UOCYpaTsgfQoKaW5saW5l
IFFEYXRhU3RyZWFtICZRRGF0YVN0cmVhbTo6b3BlcmF0b3I+PiggUV9VSU5UMTYgJmkgKQp7IHJl
dHVybiAqdGhpcyA+PiAoUV9JTlQxNiYpaTsgfQoKaW5saW5lIFFEYXRhU3RyZWFtICZRRGF0YVN0
cmVhbTo6b3BlcmF0b3I+PiggUV9VSU5UMzIgJmkgKQp7IHJldHVybiAqdGhpcyA+PiAoUV9JTlQz
MiYpaTsgfQoKaW5saW5lIFFEYXRhU3RyZWFtICZRRGF0YVN0cmVhbTo6b3BlcmF0b3I+PiggUV9V
SU5UNjQgJmkgKQp7IHJldHVybiAqdGhpcyA+PiAoUV9JTlQ2NCYpaTsgfQoKaW5saW5lIFFEYXRh
U3RyZWFtICZRRGF0YVN0cmVhbTo6b3BlcmF0b3I8PCggUV9VSU5UOCBpICkKeyByZXR1cm4gKnRo
aXMgPDwgKFFfSU5UOClpOyB9CgppbmxpbmUgUURhdGFTdHJlYW0gJlFEYXRhU3RyZWFtOjpvcGVy
YXRvcjw8KCBRX1VJTlQxNiBpICkKeyByZXR1cm4gKnRoaXMgPDwgKFFfSU5UMTYpaTsgfQoKaW5s
aW5lIFFEYXRhU3RyZWFtICZRRGF0YVN0cmVhbTo6b3BlcmF0b3I8PCggUV9VSU5UMzIgaSApCnsg
cmV0dXJuICp0aGlzIDw8IChRX0lOVDMyKWk7IH0KCmlubGluZSBRRGF0YVN0cmVhbSAmUURhdGFT
dHJlYW06Om9wZXJhdG9yPDwoIFFfVUlOVDY0IGkgKQp7IHJldHVybiAqdGhpcyA8PCAoUV9JTlQ2
NClpOyB9CiMgNDIgInFnZGljdC5jcHAiIDIKIyAxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMSAz
CiMgMjYgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVz
LmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRl
L2JpdHMvdHlwZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKIyAx
ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9iaXRzL3R5
cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu
dS8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVz
LmgiIDIgMwoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VfY2hhcjsKdHlwZWRlZiB1bnNpZ25l
ZCBzaG9ydCBfX3Vfc2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdV9pbnQ7CnR5cGVkZWYg
dW5zaWduZWQgbG9uZyBfX3VfbG9uZzsKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBs
b25nIGxvbmcgaW50IF9fdV9xdWFkX3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBsb25nIGxvbmcg
aW50IF9fcXVhZF90OwojIDQ5ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCnR5cGVkZWYg
c2lnbmVkIGNoYXIgX19pbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5
cGVkZWYgc2lnbmVkIHNob3J0IGludCBfX2ludDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQg
aW50IF9fdWludDE2X3Q7CnR5cGVkZWYgc2lnbmVkIGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5z
aWduZWQgaW50IF9fdWludDMyX3Q7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc2lnbmVkIGxvbmcg
bG9uZyBpbnQgX19pbnQ2NF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBs
b25nIGludCBfX3VpbnQ2NF90OwoKdHlwZWRlZiBfX3F1YWRfdCAqX19xYWRkcl90OwoKdHlwZWRl
ZiBfX3VfcXVhZF90IF9fZGV2X3Q7CnR5cGVkZWYgX191X2ludCBfX3VpZF90Owp0eXBlZGVmIF9f
dV9pbnQgX19naWRfdDsKdHlwZWRlZiBfX3VfbG9uZyBfX2lub190Owp0eXBlZGVmIF9fdV9pbnQg
X19tb2RlX3Q7CnR5cGVkZWYgX191X2ludCBfX25saW5rX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19v
ZmZfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2xvZmZfdDsKdHlwZWRlZiBpbnQgX19waWRfdDsKdHlw
ZWRlZiBpbnQgX19zc2l6ZV90Owp0eXBlZGVmIF9fdV9sb25nIF9fcmxpbV90Owp0eXBlZGVmIF9f
dV9xdWFkX3QgX19ybGltNjRfdDsKdHlwZWRlZiBfX3VfaW50IF9faWRfdDsKCnR5cGVkZWYgc3Ry
dWN0CiAgewogICAgaW50IF9fdmFsWzJdOwogIH0gX19mc2lkX3Q7CgoKdHlwZWRlZiBpbnQgX19k
YWRkcl90Owp0eXBlZGVmIGNoYXIgKl9fY2FkZHJfdDsKdHlwZWRlZiBsb25nIGludCBfX3RpbWVf
dDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9f
c3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zd2Jsa190OwoKdHlwZWRlZiBsb25nIGlu
dCBfX2Nsb2NrX3Q7CgoKdHlwZWRlZiBpbnQgX19jbG9ja2lkX3Q7CgoKdHlwZWRlZiBpbnQgX190
aW1lcl90OwoKCgoKCgp0eXBlZGVmIGludCBfX2tleV90OwoKCnR5cGVkZWYgdW5zaWduZWQgc2hv
cnQgaW50IF9faXBjX3BpZF90OwoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrc2l6ZV90OwoKCgoK
dHlwZWRlZiBsb25nIGludCBfX2Jsa2NudF90Owp0eXBlZGVmIF9fcXVhZF90IF9fYmxrY250NjRf
dDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNibGtjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9f
ZnNibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcgX19mc2ZpbGNudF90Owp0eXBlZGVmIF9f
dV9xdWFkX3QgX19mc2ZpbGNudDY0X3Q7CgoKdHlwZWRlZiBfX3VfcXVhZF90IF9faW5vNjRfdDsK
Cgp0eXBlZGVmIF9fbG9mZl90IF9fb2ZmNjRfdDsKCgp0eXBlZGVmIGxvbmcgaW50IF9fdF9zY2Fs
YXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3RfdXNjYWxhcl90OwoKCnR5cGVkZWYg
aW50IF9faW50cHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19zb2NrbGVuX3Q7CgoKCgoj
IDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNs
dWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5o
IiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMwpzdHJ1Y3QgX19zY2hlZF9w
YXJhbQogIHsKICAgIGludCBfX3NjaGVkX3ByaW9yaXR5OwogIH07CiMgMjQgIi91c3IvaW5jbHVk
ZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAyIDMKCgpzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sKewog
IGxvbmcgaW50IF9fc3RhdHVzOwogIGludCBfX3NwaW5sb2NrOwoKfTsKCgoKdHlwZWRlZiBzdHJ1
Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpfcHRocmVhZF9kZXNjcjsKCgoKCgp0eXBlZGVmIHN0
cnVjdCBfX3B0aHJlYWRfYXR0cl9zCnsKICBpbnQgX19kZXRhY2hzdGF0ZTsKICBpbnQgX19zY2hl
ZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9wYXJhbSBfX3NjaGVkcGFyYW07CiAgaW50IF9faW5o
ZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwogIHNpemVfdCBfX2d1YXJkc2l6ZTsKICBpbnQgX19z
dGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3RhY2thZGRyOwogIHNpemVfdCBfX3N0YWNrc2l6ZTsK
fSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRocmVhZF9m
YXN0bG9jayBfX2NfbG9jazsKICBfcHRocmVhZF9kZXNjciBfX2Nfd2FpdGluZzsKfSBwdGhyZWFk
X2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1bW15Owp9IHB0aHJlYWRfY29u
ZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBwdGhyZWFkX2tleV90OwoKCgoKCnR5cGVk
ZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOwogIGludCBfX21fY291bnQ7CiAgX3B0aHJl
YWRfZGVzY3IgX19tX293bmVyOwogIGludCBfX21fa2luZDsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFz
dGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9tdXRleF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAg
aW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CgoKCnR5cGVkZWYgaW50IHB0
aHJlYWRfb25jZV90OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfcndsb2NrX3QKewogIHN0
cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX3J3X2xvY2s7CiAgaW50IF9fcndfcmVhZGVyczsKICBf
cHRocmVhZF9kZXNjciBfX3J3X3dyaXRlcjsKICBfcHRocmVhZF9kZXNjciBfX3J3X3JlYWRfd2Fp
dGluZzsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlX3dhaXRpbmc7CiAgaW50IF9fcndfa2lu
ZDsKICBpbnQgX19yd19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrX3Q7CgoKCnR5cGVkZWYgc3Ry
dWN0CnsKICBpbnQgX19sb2Nra2luZDsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2Nr
YXR0cl90OwoKCgoKdHlwZWRlZiB2b2xhdGlsZSBpbnQgcHRocmVhZF9zcGlubG9ja190OwoKCnR5
cGVkZWYgc3RydWN0IHsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19iYV9sb2NrOwogIGlu
dCBfX2JhX3JlcXVpcmVkOwogIGludCBfX2JhX3ByZXNlbnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19i
YV93YWl0aW5nOwp9IHB0aHJlYWRfYmFycmllcl90OwoKCnR5cGVkZWYgc3RydWN0IHsKICBpbnQg
X19wc2hhcmVkOwp9IHB0aHJlYWRfYmFycmllcmF0dHJfdDsKCgoKCgp0eXBlZGVmIHVuc2lnbmVk
IGxvbmcgaW50IHB0aHJlYWRfdDsKIyAxNDQgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIg
MwojIDI4ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMiAzCgpleHRlcm4gIkMiIHsKIyA0MCAiL3Vz
ci9pbmNsdWRlL2N0eXBlLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDEgMwojIDIy
ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIg
MSAzCiMgMjMgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMiAzCiMgMzcgIi91c3IvaW5jbHVkZS9l
bmRpYW4uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2VuZGlhbi5oIiAxIDMKIyAzOCAiL3Vz
ci9pbmNsdWRlL2VuZGlhbi5oIiAyIDMKIyA0MSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDIgMwoK
CgoKCgplbnVtCnsKICBfSVN1cHBlciA9ICgoMCkgPCA4ID8gKCgxIDw8ICgwKSkgPDwgOCkgOiAo
KDEgPDwgKDApKSA+PiA4KSksCiAgX0lTbG93ZXIgPSAoKDEpIDwgOCA/ICgoMSA8PCAoMSkpIDw8
IDgpIDogKCgxIDw8ICgxKSkgPj4gOCkpLAogIF9JU2FscGhhID0gKCgyKSA8IDggPyAoKDEgPDwg
KDIpKSA8PCA4KSA6ICgoMSA8PCAoMikpID4+IDgpKSwKICBfSVNkaWdpdCA9ICgoMykgPCA4ID8g
KCgxIDw8ICgzKSkgPDwgOCkgOiAoKDEgPDwgKDMpKSA+PiA4KSksCiAgX0lTeGRpZ2l0ID0gKCg0
KSA8IDggPyAoKDEgPDwgKDQpKSA8PCA4KSA6ICgoMSA8PCAoNCkpID4+IDgpKSwKICBfSVNzcGFj
ZSA9ICgoNSkgPCA4ID8gKCgxIDw8ICg1KSkgPDwgOCkgOiAoKDEgPDwgKDUpKSA+PiA4KSksCiAg
X0lTcHJpbnQgPSAoKDYpIDwgOCA/ICgoMSA8PCAoNikpIDw8IDgpIDogKCgxIDw8ICg2KSkgPj4g
OCkpLAogIF9JU2dyYXBoID0gKCg3KSA8IDggPyAoKDEgPDwgKDcpKSA8PCA4KSA6ICgoMSA8PCAo
NykpID4+IDgpKSwKICBfSVNibGFuayA9ICgoOCkgPCA4ID8gKCgxIDw8ICg4KSkgPDwgOCkgOiAo
KDEgPDwgKDgpKSA+PiA4KSksCiAgX0lTY250cmwgPSAoKDkpIDwgOCA/ICgoMSA8PCAoOSkpIDw8
IDgpIDogKCgxIDw8ICg5KSkgPj4gOCkpLAogIF9JU3B1bmN0ID0gKCgxMCkgPCA4ID8gKCgxIDw8
ICgxMCkpIDw8IDgpIDogKCgxIDw8ICgxMCkpID4+IDgpKSwKICBfSVNhbG51bSA9ICgoMTEpIDwg
OCA/ICgoMSA8PCAoMTEpKSA8PCA4KSA6ICgoMSA8PCAoMTEpKSA+PiA4KSkKfTsKIyA3NSAiL3Vz
ci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIF9fY29uc3QgdW5zaWduZWQgc2hvcnQgaW50ICpf
X2N0eXBlX2I7CmV4dGVybiBfX2NvbnN0IF9faW50MzJfdCAqX19jdHlwZV90b2xvd2VyOwpleHRl
cm4gX19jb25zdCBfX2ludDMyX3QgKl9fY3R5cGVfdG91cHBlcjsKIyA5MSAiL3Vzci9pbmNsdWRl
L2N0eXBlLmgiIDMKZXh0ZXJuIGludCBpc2FsbnVtIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50
IGlzYWxwaGEgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNjbnRybCAoaW50KSB0aHJvdyAo
KTsKZXh0ZXJuIGludCBpc2RpZ2l0IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzbG93ZXIg
KGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNncmFwaCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJu
IGludCBpc3ByaW50IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzcHVuY3QgKGludCkgdGhy
b3cgKCk7CmV4dGVybiBpbnQgaXNzcGFjZSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3Vw
cGVyIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzeGRpZ2l0IChpbnQpIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgaXNibGFuayAoaW50KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgdG9sb3dl
ciAoaW50IF9fYykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0b3VwcGVyIChpbnQgX19jKSB0aHJv
dyAoKTsKCgoKCgoKZXh0ZXJuIGludCBpc2FzY2lpIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGludCB0b2FzY2lpIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfdG91cHBl
ciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfdG9sb3dlciAoaW50KSB0aHJvdyAoKTsKIyAx
NjggIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVybiBfX2lubGluZSBpbnQKdG9sb3dlciAo
aW50IF9fYykgdGhyb3cgKCkKewogIHJldHVybiBfX2MgPj0gLTEyOCAmJiBfX2MgPCAyNTYgPyBf
X2N0eXBlX3RvbG93ZXJbX19jXSA6IF9fYzsKfQoKZXh0ZXJuIF9faW5saW5lIGludAp0b3VwcGVy
IChpbnQgX19jKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fYyA+PSAtMTI4ICYmIF9fYyA8IDI1NiA/
IF9fY3R5cGVfdG91cHBlcltfX2NdIDogX19jOwp9CiMgMjExICIvdXNyL2luY2x1ZGUvY3R5cGUu
aCIgMwojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDIxMiAiL3Vzci9pbmNsdWRl
L2N0eXBlLmgiIDIgMwojIDIyNCAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIGludCBf
X2lzYWxudW1fbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzYWxw
aGFfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzY250cmxfbCAo
aW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzZGlnaXRfbCAoaW50LCBf
X2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzbG93ZXJfbCAoaW50LCBfX2xvY2Fs
ZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzZ3JhcGhfbCAoaW50LCBfX2xvY2FsZV90KSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzcHJpbnRfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAo
KTsKZXh0ZXJuIGludCBfX2lzcHVuY3RfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0
ZXJuIGludCBfX2lzc3BhY2VfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGlu
dCBfX2lzdXBwZXJfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lz
eGRpZ2l0X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9faXNibGFu
a19sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9fdG9sb3dlcl9s
IChpbnQgX19jLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3RvdXBw
ZXJfbCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpIHRocm93ICgpOwojIDI3NyAiL3Vzci9pbmNs
dWRlL2N0eXBlLmgiIDMKfQojIDQzICJxZ2RpY3QuY3BwIiAyCiMgNjIgInFnZGljdC5jcHAiCnN0
YXRpYyBjb25zdCBpbnQgb3BfZmluZCA9IDA7CnN0YXRpYyBjb25zdCBpbnQgb3BfaW5zZXJ0ID0g
MTsKc3RhdGljIGNvbnN0IGludCBvcF9yZXBsYWNlID0gMjsKCgpjbGFzcyBRR0RJdExpc3QgOiBw
dWJsaWMgUUxpc3Q8UUdEaWN0SXRlcmF0b3I+CnsKcHVibGljOgogICAgUUdESXRMaXN0KCkgOiBR
TGlzdDxRR0RpY3RJdGVyYXRvcj4oKSB7fQogICAgUUdESXRMaXN0KCBjb25zdCBRR0RJdExpc3Qg
Jmxpc3QgKSA6IFFMaXN0PFFHRGljdEl0ZXJhdG9yPihsaXN0KSB7fQogICB+UUdESXRMaXN0KCkg
eyBjbGVhcigpOyB9CiAgICBRR0RJdExpc3QgJm9wZXJhdG9yPShjb25zdCBRR0RJdExpc3QgJmxp
c3QpCiAgICAgICAgeyByZXR1cm4gKFFHREl0TGlzdCYpUUxpc3Q8UUdEaWN0SXRlcmF0b3I+Ojpv
cGVyYXRvcj0obGlzdCk7IH0KfTsKIyA4NyAicWdkaWN0LmNwcCIKaW50IFFHRGljdDo6aGFzaEtl
eVN0cmluZyggY29uc3QgUVN0cmluZyAma2V5ICkKewoKICAgIGlmICgga2V5LmlzTnVsbCgpICkK
ICAgICAgICBxV2FybmluZyggIlFHRGljdDo6aGFzaFN0cmluZ0tleTogSW52YWxpZCBudWxsIGtl
eSIgKTsKCiAgICBpbnQgaTsKICAgIHJlZ2lzdGVyIHVpbnQgaD0wOwogICAgdWludCBnOwogICAg
Y29uc3QgUUNoYXIgKnAgPSBrZXkudW5pY29kZSgpOwogICAgaWYgKCBjYXNlcyApIHsKICAgICAg
ICBmb3IgKCBpPTA7IGk8KGludClrZXkubGVuZ3RoKCk7IGkrKyApIHsKICAgICAgICAgICAgaCA9
IChoPDw0KSArIHBbaV0uY2VsbCgpOwogICAgICAgICAgICBpZiAoIChnID0gaCAmIDB4ZjAwMDAw
MDApICkKICAgICAgICAgICAgICAgIGggXj0gZyA+PiAyNDsKICAgICAgICAgICAgaCAmPSB+ZzsK
ICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIGZvciAoIGk9MDsgaTwoaW50KWtleS5sZW5n
dGgoKTsgaSsrICkgewogICAgICAgICAgICBoID0gKGg8PDQpICsgcFtpXS5sb3dlcigpLmNlbGwo
KTsKICAgICAgICAgICAgaWYgKCAoZyA9IGggJiAweGYwMDAwMDAwKSApCiAgICAgICAgICAgICAg
ICBoIF49IGcgPj4gMjQ7CiAgICAgICAgICAgIGggJj0gfmc7CiAgICAgICAgfQogICAgfQogICAg
aW50IGluZGV4ID0gaDsKICAgIGlmICggaW5kZXggPCAwICkKICAgICAgICBpbmRleCA9IC1pbmRl
eDsKICAgIHJldHVybiBpbmRleDsKfQoKCgoKCgppbnQgUUdEaWN0OjpoYXNoS2V5QXNjaWkoIGNv
bnN0IGNoYXIgKmtleSApCnsKCiAgICBpZiAoIGtleSA9PSAwICkKICAgICAgICBxV2FybmluZygg
IlFHRGljdDo6aGFzaEFzY2lpS2V5OiBJbnZhbGlkIG51bGwga2V5IiApOwoKICAgIHJlZ2lzdGVy
IGNvbnN0IGNoYXIgKmsgPSBrZXk7CiAgICByZWdpc3RlciB1aW50IGg9MDsKICAgIHVpbnQgZzsK
ICAgIGlmICggY2FzZXMgKSB7CiAgICAgICAgd2hpbGUgKCAqayApIHsKICAgICAgICAgICAgaCA9
IChoPDw0KSArICprKys7CiAgICAgICAgICAgIGlmICggKGcgPSBoICYgMHhmMDAwMDAwMCkgKQog
ICAgICAgICAgICAgICAgaCBePSBnID4+IDI0OwogICAgICAgICAgICBoICY9IH5nOwogICAgICAg
IH0KICAgIH0gZWxzZSB7CiAgICAgICAgd2hpbGUgKCAqayApIHsKICAgICAgICAgICAgaCA9ICho
PDw0KSArIHRvbG93ZXIoKmspOwogICAgICAgICAgICBpZiAoIChnID0gaCAmIDB4ZjAwMDAwMDAp
ICkKICAgICAgICAgICAgICAgIGggXj0gZyA+PiAyNDsKICAgICAgICAgICAgaCAmPSB+ZzsKICAg
ICAgICAgICAgaysrOwogICAgICAgIH0KICAgIH0KICAgIGludCBpbmRleCA9IGg7CiAgICBpZiAo
IGluZGV4IDwgMCApCiAgICAgICAgaW5kZXggPSAtaW5kZXg7CiAgICByZXR1cm4gaW5kZXg7Cn0K
IyAxNjUgInFnZGljdC5jcHAiClFEYXRhU3RyZWFtJiBRR0RpY3Q6OnJlYWQoIFFEYXRhU3RyZWFt
ICZzLCBRQ29sbGVjdGlvbjo6SXRlbSAmaXRlbSApCnsKICAgIGl0ZW0gPSAwOwogICAgcmV0dXJu
IHM7Cn0KIyAxNzggInFnZGljdC5jcHAiClFEYXRhU3RyZWFtJiBRR0RpY3Q6OndyaXRlKCBRRGF0
YVN0cmVhbSAmcywgUUNvbGxlY3Rpb246Okl0ZW0gKSBjb25zdAp7CiAgICByZXR1cm4gczsKfQoj
IDE5MyAicWdkaWN0LmNwcCIKUUdEaWN0OjpRR0RpY3QoIHVpbnQgbGVuLCBLZXlUeXBlIGt0LCBi
b29sIGNhc2VTZW5zaXRpdmUsIGJvb2wgY29weUtleXMgKQp7CiAgICBpbml0KCBsZW4sIGt0LCBj
YXNlU2Vuc2l0aXZlLCBjb3B5S2V5cyApOwp9CgoKdm9pZCBRR0RpY3Q6OmluaXQoIHVpbnQgbGVu
LCBLZXlUeXBlIGt0LCBib29sIGNhc2VTZW5zaXRpdmUsIGJvb2wgY29weUtleXMgKQp7CiAgICB2
ZWMgPSBuZXcgUUJhc2VCdWNrZXQgKlt2bGVuID0gbGVuXTsKICAgIChxdF9jaGVja19wb2ludGVy
KCh2ZWMpPT0wLCJxZ2RpY3QuY3BwIiwyMDIpKTsKICAgIG1lbXNldCggKGNoYXIqKXZlYywgMCwg
dmxlbipzaXplb2YoUUJhc2VCdWNrZXQqKSApOwogICAgbnVtSXRlbXMgPSAwOwogICAgaXRlcmF0
b3JzID0gMDsKCgogICAgc3dpdGNoICggKGtleXR5cGUgPSAodWludClrdCkgKSB7CiAgICAgICAg
Y2FzZSBTdHJpbmdLZXk6CiAgICAgICAgICAgIGNhc2VzID0gY2FzZVNlbnNpdGl2ZTsKICAgICAg
ICAgICAgY29weWsgPSBGQUxTRTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBBc2Np
aUtleToKICAgICAgICAgICAgY2FzZXMgPSBjYXNlU2Vuc2l0aXZlOwogICAgICAgICAgICBjb3B5
ayA9IGNvcHlLZXlzOwogICAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICBjYXNlcyA9IEZBTFNFOwogICAgICAgICAgICBjb3B5ayA9IEZBTFNFOwogICAgICAgICAg
ICBicmVhazsKICAgIH0KfQoKCgoKCgoKUUdEaWN0OjpRR0RpY3QoIGNvbnN0IFFHRGljdCAmIGRp
Y3QgKQogICAgOiBRQ29sbGVjdGlvbiggZGljdCApCnsKICAgIGluaXQoIGRpY3QudmxlbiwgKEtl
eVR5cGUpZGljdC5rZXl0eXBlLCBkaWN0LmNhc2VzLCBkaWN0LmNvcHlrICk7CiAgICBRR0RpY3RJ
dGVyYXRvciBpdCggZGljdCApOwogICAgd2hpbGUgKCBpdC5nZXQoKSApIHsKICAgICAgICBzd2l0
Y2ggKCBrZXl0eXBlICkgewogICAgICAgICAgICBjYXNlIFN0cmluZ0tleToKICAgICAgICAgICAg
ICAgIGxvb2tfc3RyaW5nKCBpdC5nZXRLZXlTdHJpbmcoKSwgaXQuZ2V0KCksIG9wX2luc2VydCAp
OwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgQXNjaWlLZXk6CiAgICAg
ICAgICAgICAgICBsb29rX2FzY2lpKCBpdC5nZXRLZXlBc2NpaSgpLCBpdC5nZXQoKSwgb3BfaW5z
ZXJ0ICk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBJbnRLZXk6CiAg
ICAgICAgICAgICAgICBsb29rX2ludCggaXQuZ2V0S2V5SW50KCksIGl0LmdldCgpLCBvcF9pbnNl
cnQgKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIFB0cktleToKICAg
ICAgICAgICAgICAgIGxvb2tfcHRyKCBpdC5nZXRLZXlQdHIoKSwgaXQuZ2V0KCksIG9wX2luc2Vy
dCApOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgICsraXQ7CiAgICB9
Cn0KCgoKCgoKClFHRGljdDo6flFHRGljdCgpCnsKICAgIGNsZWFyKCk7CiAgICBkZWxldGUgW10g
dmVjOwogICAgaWYgKCAhaXRlcmF0b3JzICkKICAgICAgICByZXR1cm47CiAgICBRR0RpY3RJdGVy
YXRvciAqaSA9IGl0ZXJhdG9ycy0+Zmlyc3QoKTsKICAgIHdoaWxlICggaSApIHsKICAgICAgICBp
LT5kaWN0ID0gMDsKICAgICAgICBpID0gaXRlcmF0b3JzLT5uZXh0KCk7CiAgICB9CiAgICBkZWxl
dGUgaXRlcmF0b3JzOwp9CgoKCgoKCgpRR0RpY3QgJlFHRGljdDo6b3BlcmF0b3I9KCBjb25zdCBR
R0RpY3QgJmRpY3QgKQp7CiAgICBjbGVhcigpOwogICAgUUdEaWN0SXRlcmF0b3IgaXQoIGRpY3Qg
KTsKICAgIHdoaWxlICggaXQuZ2V0KCkgKSB7CiAgICAgICAgc3dpdGNoICgga2V5dHlwZSApIHsK
ICAgICAgICAgICAgY2FzZSBTdHJpbmdLZXk6CiAgICAgICAgICAgICAgICBsb29rX3N0cmluZygg
aXQuZ2V0S2V5U3RyaW5nKCksIGl0LmdldCgpLCBvcF9pbnNlcnQgKTsKICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICBjYXNlIEFzY2lpS2V5OgogICAgICAgICAgICAgICAgbG9va19h
c2NpaSggaXQuZ2V0S2V5QXNjaWkoKSwgaXQuZ2V0KCksIG9wX2luc2VydCApOwogICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgSW50S2V5OgogICAgICAgICAgICAgICAgbG9v
a19pbnQoIGl0LmdldEtleUludCgpLCBpdC5nZXQoKSwgb3BfaW5zZXJ0ICk7CiAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBQdHJLZXk6CiAgICAgICAgICAgICAgICBsb29r
X3B0ciggaXQuZ2V0S2V5UHRyKCksIGl0LmdldCgpLCBvcF9pbnNlcnQgKTsKICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICArK2l0OwogICAgfQogICAgcmV0dXJuICp0aGlz
Owp9CiMgMzUzICJxZ2RpY3QuY3BwIgpRQ29sbGVjdGlvbjo6SXRlbSBRR0RpY3Q6Omxvb2tfc3Ry
aW5nKCBjb25zdCBRU3RyaW5nICZrZXksIFFDb2xsZWN0aW9uOjpJdGVtIGQsIGludCBvcCApCnsK
ICAgIFFTdHJpbmdCdWNrZXQgKm47CiAgICBpbnQgaW5kZXggPSBoYXNoS2V5U3RyaW5nKGtleSkg
JSB2bGVuOwogICAgaWYgKCBvcCA9PSBvcF9maW5kICkgewogICAgICAgIGlmICggY2FzZXMgKSB7
CiAgICAgICAgICAgIGZvciAoIG49KFFTdHJpbmdCdWNrZXQqKXZlY1tpbmRleF07IG47CiAgICAg
ICAgICAgICAgICAgIG49KFFTdHJpbmdCdWNrZXQqKW4tPmdldE5leHQoKSApIHsKICAgICAgICAg
ICAgICAgIGlmICgga2V5ID09IG4tPmdldEtleSgpICkKICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbi0+Z2V0RGF0YSgpOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgUVN0cmluZyBrID0ga2V5Lmxvd2VyKCk7CiAgICAgICAgICAgIGZvciAoIG49KFFTdHJpbmdC
dWNrZXQqKXZlY1tpbmRleF07IG47CiAgICAgICAgICAgICAgICAgIG49KFFTdHJpbmdCdWNrZXQq
KW4tPmdldE5leHQoKSApIHsKICAgICAgICAgICAgICAgIGlmICggayA9PSBuLT5nZXRLZXkoKS5s
b3dlcigpICkKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbi0+Z2V0RGF0YSgpOwogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAwOwogICAgfQogICAgaWYgKCBvcCA9PSBv
cF9yZXBsYWNlICkgewogICAgICAgIGlmICggdmVjW2luZGV4XSAhPSAwICkKICAgICAgICAgICAg
cmVtb3ZlX3N0cmluZygga2V5ICk7CiAgICB9CgogICAgbiA9IG5ldyBRU3RyaW5nQnVja2V0KGtl
eSxuZXdJdGVtKGQpLHZlY1tpbmRleF0pOwogICAgKHF0X2NoZWNrX3BvaW50ZXIoKG4pPT0wLCJx
Z2RpY3QuY3BwIiwzODApKTsKCiAgICBpZiAoIG4tPmdldERhdGEoKSA9PSAwICkKICAgICAgICBx
V2FybmluZyggIlFEaWN0OiBDYW5ub3QgaW5zZXJ0IG51bGwgaXRlbSIgKTsKCiAgICB2ZWNbaW5k
ZXhdID0gbjsKICAgIG51bUl0ZW1zKys7CiAgICByZXR1cm4gbi0+Z2V0RGF0YSgpOwp9CgoKCgpR
Q29sbGVjdGlvbjo6SXRlbSBRR0RpY3Q6Omxvb2tfYXNjaWkoIGNvbnN0IGNoYXIgKmtleSwgUUNv
bGxlY3Rpb246Okl0ZW0gZCwgaW50IG9wICkKewogICAgUUFzY2lpQnVja2V0ICpuOwogICAgaW50
IGluZGV4ID0gaGFzaEtleUFzY2lpKGtleSkgJSB2bGVuOwogICAgaWYgKCBvcCA9PSBvcF9maW5k
ICkgewogICAgICAgIGlmICggY2FzZXMgKSB7CiAgICAgICAgICAgIGZvciAoIG49KFFBc2NpaUJ1
Y2tldCopdmVjW2luZGV4XTsgbjsKICAgICAgICAgICAgICAgICAgbj0oUUFzY2lpQnVja2V0Kilu
LT5nZXROZXh0KCkgKSB7CiAgICAgICAgICAgICAgICBpZiAoIHFzdHJjbXAobi0+Z2V0S2V5KCks
a2V5KSA9PSAwICkKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbi0+Z2V0RGF0YSgpOwogICAg
ICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZm9yICggbj0oUUFzY2lpQnVj
a2V0Kil2ZWNbaW5kZXhdOyBuOwogICAgICAgICAgICAgICAgICBuPShRQXNjaWlCdWNrZXQqKW4t
PmdldE5leHQoKSApIHsKICAgICAgICAgICAgICAgIGlmICggcXN0cmljbXAobi0+Z2V0S2V5KCks
a2V5KSA9PSAwICkKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbi0+Z2V0RGF0YSgpOwogICAg
ICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAwOwogICAgfQogICAgaWYgKCBvcCA9
PSBvcF9yZXBsYWNlICkgewogICAgICAgIGlmICggdmVjW2luZGV4XSAhPSAwICkKICAgICAgICAg
ICAgcmVtb3ZlX2FzY2lpKCBrZXkgKTsKICAgIH0KCiAgICBuID0gbmV3IFFBc2NpaUJ1Y2tldChj
b3B5ayA/IHFzdHJkdXAoa2V5KSA6IGtleSxuZXdJdGVtKGQpLHZlY1tpbmRleF0pOwogICAgKHF0
X2NoZWNrX3BvaW50ZXIoKG4pPT0wLCJxZ2RpY3QuY3BwIiw0MTkpKTsKCiAgICBpZiAoIG4tPmdl
dERhdGEoKSA9PSAwICkKICAgICAgICBxV2FybmluZyggIlFBc2NpaURpY3Q6IENhbm5vdCBpbnNl
cnQgbnVsbCBpdGVtIiApOwoKICAgIHZlY1tpbmRleF0gPSBuOwogICAgbnVtSXRlbXMrKzsKICAg
IHJldHVybiBuLT5nZXREYXRhKCk7Cn0KCgoKClFDb2xsZWN0aW9uOjpJdGVtIFFHRGljdDo6bG9v
a19pbnQoIGxvbmcga2V5LCBRQ29sbGVjdGlvbjo6SXRlbSBkLCBpbnQgb3AgKQp7CiAgICBRSW50
QnVja2V0ICpuOwogICAgaW50IGluZGV4ID0gKGludCkoKHVsb25nKWtleSAlIHZsZW4pOwogICAg
aWYgKCBvcCA9PSBvcF9maW5kICkgewogICAgICAgIGZvciAoIG49KFFJbnRCdWNrZXQqKXZlY1tp
bmRleF07IG47CiAgICAgICAgICAgICAgbj0oUUludEJ1Y2tldCopbi0+Z2V0TmV4dCgpICkgewog
ICAgICAgICAgICBpZiAoIG4tPmdldEtleSgpID09IGtleSApCiAgICAgICAgICAgICAgICByZXR1
cm4gbi0+Z2V0RGF0YSgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gMDsKICAgIH0KICAgIGlm
ICggb3AgPT0gb3BfcmVwbGFjZSApIHsKICAgICAgICBpZiAoIHZlY1tpbmRleF0gIT0gMCApCiAg
ICAgICAgICAgIHJlbW92ZV9pbnQoIGtleSApOwogICAgfQoKICAgIG4gPSBuZXcgUUludEJ1Y2tl
dChrZXksbmV3SXRlbShkKSx2ZWNbaW5kZXhdKTsKICAgIChxdF9jaGVja19wb2ludGVyKChuKT09
MCwicWdkaWN0LmNwcCIsNDUwKSk7CgogICAgaWYgKCBuLT5nZXREYXRhKCkgPT0gMCApCiAgICAg
ICAgcVdhcm5pbmcoICJRSW50RGljdDogQ2Fubm90IGluc2VydCBudWxsIGl0ZW0iICk7CgogICAg
dmVjW2luZGV4XSA9IG47CiAgICBudW1JdGVtcysrOwogICAgcmV0dXJuIG4tPmdldERhdGEoKTsK
fQoKCgoKUUNvbGxlY3Rpb246Okl0ZW0gUUdEaWN0Ojpsb29rX3B0ciggdm9pZCAqa2V5LCBRQ29s
bGVjdGlvbjo6SXRlbSBkLCBpbnQgb3AgKQp7CiAgICBRUHRyQnVja2V0ICpuOwogICAgaW50IGlu
ZGV4ID0gKGludCkoKHVsb25nKWtleSAlIHZsZW4pOwogICAgaWYgKCBvcCA9PSBvcF9maW5kICkg
ewogICAgICAgIGZvciAoIG49KFFQdHJCdWNrZXQqKXZlY1tpbmRleF07IG47CiAgICAgICAgICAg
ICAgbj0oUVB0ckJ1Y2tldCopbi0+Z2V0TmV4dCgpICkgewogICAgICAgICAgICBpZiAoIG4tPmdl
dEtleSgpID09IGtleSApCiAgICAgICAgICAgICAgICByZXR1cm4gbi0+Z2V0RGF0YSgpOwogICAg
ICAgIH0KICAgICAgICByZXR1cm4gMDsKICAgIH0KICAgIGlmICggb3AgPT0gb3BfcmVwbGFjZSAp
IHsKICAgICAgICBpZiAoIHZlY1tpbmRleF0gIT0gMCApCiAgICAgICAgICAgIHJlbW92ZV9wdHIo
IGtleSApOwogICAgfQoKICAgIG4gPSBuZXcgUVB0ckJ1Y2tldChrZXksbmV3SXRlbShkKSx2ZWNb
aW5kZXhdKTsKICAgIChxdF9jaGVja19wb2ludGVyKChuKT09MCwicWdkaWN0LmNwcCIsNDgxKSk7
CgogICAgaWYgKCBuLT5nZXREYXRhKCkgPT0gMCApCiAgICAgICAgcVdhcm5pbmcoICJRUHRyRGlj
dDogQ2Fubm90IGluc2VydCBudWxsIGl0ZW0iICk7CgogICAgdmVjW2luZGV4XSA9IG47CiAgICBu
dW1JdGVtcysrOwogICAgcmV0dXJuIG4tPmdldERhdGEoKTsKfQojIDQ5OCAicWdkaWN0LmNwcCIK
dm9pZCBRR0RpY3Q6OnJlc2l6ZSggdWludCBuZXdzaXplICkKewoKICAgIFFCYXNlQnVja2V0ICoq
b2xkX3ZlYyA9IHZlYzsKICAgIHVpbnQgb2xkX3ZsZW4gPSB2bGVuOwogICAgYm9vbCBvbGRfY29w
eWsgPSBjb3B5azsKCiAgICB2ZWMgPSBuZXcgUUJhc2VCdWNrZXQgKlt2bGVuID0gbmV3c2l6ZV07
CiAgICAocXRfY2hlY2tfcG9pbnRlcigodmVjKT09MCwicWdkaWN0LmNwcCIsNTA2KSk7CiAgICBt
ZW1zZXQoIChjaGFyKil2ZWMsIDAsIHZsZW4qc2l6ZW9mKFFCYXNlQnVja2V0KikgKTsKICAgIG51
bUl0ZW1zID0gMDsKICAgIGNvcHlrID0gRkFMU0U7CgoKICAgIGZvciAoIHVpbnQgaW5kZXggPSAw
OyBpbmRleCA8IG9sZF92bGVuOyBpbmRleCsrICkgewogICAgICAgIHN3aXRjaCAoIGtleXR5cGUg
KSB7CiAgICAgICAgICAgIGNhc2UgU3RyaW5nS2V5OgogICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgIFFTdHJpbmdCdWNrZXQgKm49KFFTdHJpbmdCdWNrZXQgKilvbGRfdmVjW2lu
ZGV4XTsKICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIG4gKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGxvb2tfc3RyaW5nKCBuLT5nZXRLZXkoKSwgbi0+Z2V0RGF0YSgpLCBvcF9pbnNlcnQg
KTsKICAgICAgICAgICAgICAgICAgICAgICAgUVN0cmluZ0J1Y2tldCAqdD0oUVN0cmluZ0J1Y2tl
dCAqKW4tPmdldE5leHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG47CiAgICAg
ICAgICAgICAgICAgICAgICAgIG4gPSB0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIEFzY2lpS2V5
OgogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFFBc2NpaUJ1Y2tldCAqbj0o
UUFzY2lpQnVja2V0ICopb2xkX3ZlY1tpbmRleF07CiAgICAgICAgICAgICAgICAgICAgd2hpbGUg
KCBuICkgewogICAgICAgICAgICAgICAgICAgICAgICBsb29rX2FzY2lpKCBuLT5nZXRLZXkoKSwg
bi0+Z2V0RGF0YSgpLCBvcF9pbnNlcnQgKTsKICAgICAgICAgICAgICAgICAgICAgICAgUUFzY2lp
QnVja2V0ICp0PShRQXNjaWlCdWNrZXQgKiluLT5nZXROZXh0KCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGRlbGV0ZSBuOwogICAgICAgICAgICAgICAgICAgICAgICBuID0gdDsKICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgY2FzZSBJbnRLZXk6CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgUUludEJ1Y2tldCAqbj0oUUludEJ1Y2tldCAqKW9sZF92ZWNbaW5kZXhdOwogICAgICAgICAg
ICAgICAgICAgIHdoaWxlICggbiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbG9va19pbnQo
IG4tPmdldEtleSgpLCBuLT5nZXREYXRhKCksIG9wX2luc2VydCApOwogICAgICAgICAgICAgICAg
ICAgICAgICBRSW50QnVja2V0ICp0PShRSW50QnVja2V0ICopbi0+Z2V0TmV4dCgpOwogICAgICAg
ICAgICAgICAgICAgICAgICBkZWxldGUgbjsKICAgICAgICAgICAgICAgICAgICAgICAgbiA9IHQ7
CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgIGNhc2UgUHRyS2V5OgogICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgIFFQdHJCdWNrZXQgKm49KFFQdHJCdWNrZXQgKilvbGRfdmVjW2luZGV4XTsK
ICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIG4gKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
IGxvb2tfcHRyKCBuLT5nZXRLZXkoKSwgbi0+Z2V0RGF0YSgpLCBvcF9pbnNlcnQgKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgUVB0ckJ1Y2tldCAqdD0oUVB0ckJ1Y2tldCAqKW4tPmdldE5leHQo
KTsKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG47CiAgICAgICAgICAgICAgICAgICAg
ICAgIG4gPSB0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIGRlbGV0ZSBbXSBvbGRfdmVjOwoK
CiAgICBjb3B5ayA9IG9sZF9jb3B5azsKCgogICAgaWYgKCBpdGVyYXRvcnMgJiYgaXRlcmF0b3Jz
LT5jb3VudCgpICkgewogICAgICAgIFFHRGljdEl0ZXJhdG9yICppID0gaXRlcmF0b3JzLT5maXJz
dCgpOwogICAgICAgIHdoaWxlICggaSApIHsKICAgICAgICAgICAgaS0+dG9GaXJzdCgpOwogICAg
ICAgICAgICBpID0gaXRlcmF0b3JzLT5uZXh0KCk7CiAgICAgICAgfQogICAgfQp9CgoKCgoKCgp2
b2lkIFFHRGljdDo6dW5saW5rX2NvbW1vbiggaW50IGluZGV4LCBRQmFzZUJ1Y2tldCAqbm9kZSwg
UUJhc2VCdWNrZXQgKnByZXYgKQp7CiAgICBpZiAoIGl0ZXJhdG9ycyAmJiBpdGVyYXRvcnMtPmNv
dW50KCkgKSB7CiAgICAgICAgUUdEaWN0SXRlcmF0b3IgKmkgPSBpdGVyYXRvcnMtPmZpcnN0KCk7
CiAgICAgICAgd2hpbGUgKCBpICkgewogICAgICAgICAgICBpZiAoIGktPmN1ck5vZGUgPT0gbm9k
ZSApCiAgICAgICAgICAgICAgICBpLT5vcGVyYXRvcisrKCk7CiAgICAgICAgICAgIGkgPSBpdGVy
YXRvcnMtPm5leHQoKTsKICAgICAgICB9CiAgICB9CiAgICBpZiAoIHByZXYgKQogICAgICAgIHBy
ZXYtPnNldE5leHQoIG5vZGUtPmdldE5leHQoKSApOwogICAgZWxzZQogICAgICAgIHZlY1tpbmRl
eF0gPSBub2RlLT5nZXROZXh0KCk7CiAgICBudW1JdGVtcy0tOwp9CgpRU3RyaW5nQnVja2V0ICpR
R0RpY3Q6OnVubGlua19zdHJpbmcoIGNvbnN0IFFTdHJpbmcgJmtleSwgUUNvbGxlY3Rpb246Okl0
ZW0gZCApCnsKICAgIGlmICggbnVtSXRlbXMgPT0gMCApCiAgICAgICAgcmV0dXJuIDA7CiAgICBR
U3RyaW5nQnVja2V0ICpuOwogICAgUVN0cmluZ0J1Y2tldCAqcHJldiA9IDA7CiAgICBpbnQgaW5k
ZXggPSBoYXNoS2V5U3RyaW5nKGtleSkgJSB2bGVuOwogICAgaWYgKCBjYXNlcyApIHsKICAgICAg
ICBmb3IgKCBuPShRU3RyaW5nQnVja2V0Kil2ZWNbaW5kZXhdOyBuOwogICAgICAgICAgICAgIG49
KFFTdHJpbmdCdWNrZXQqKW4tPmdldE5leHQoKSApIHsKICAgICAgICAgICAgYm9vbCBmb3VuZCA9
IChrZXkgPT0gbi0+Z2V0S2V5KCkpOwogICAgICAgICAgICBpZiAoIGZvdW5kICYmIGQgKQogICAg
ICAgICAgICAgICAgZm91bmQgPSAobi0+Z2V0RGF0YSgpID09IGQpOwogICAgICAgICAgICBpZiAo
IGZvdW5kICkgewogICAgICAgICAgICAgICAgdW5saW5rX2NvbW1vbihpbmRleCxuLHByZXYpOwog
ICAgICAgICAgICAgICAgcmV0dXJuIG47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcHJldiA9
IG47CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICBRU3RyaW5nIGsgPSBrZXkubG93ZXIo
KTsKICAgICAgICBmb3IgKCBuPShRU3RyaW5nQnVja2V0Kil2ZWNbaW5kZXhdOyBuOwogICAgICAg
ICAgICAgIG49KFFTdHJpbmdCdWNrZXQqKW4tPmdldE5leHQoKSApIHsKICAgICAgICAgICAgYm9v
bCBmb3VuZCA9IChrID09IG4tPmdldEtleSgpLmxvd2VyKCkpOwogICAgICAgICAgICBpZiAoIGZv
dW5kICYmIGQgKQogICAgICAgICAgICAgICAgZm91bmQgPSAobi0+Z2V0RGF0YSgpID09IGQpOwog
ICAgICAgICAgICBpZiAoIGZvdW5kICkgewogICAgICAgICAgICAgICAgdW5saW5rX2NvbW1vbihp
bmRleCxuLHByZXYpOwogICAgICAgICAgICAgICAgcmV0dXJuIG47CiAgICAgICAgICAgIH0KICAg
ICAgICAgICAgcHJldiA9IG47CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIDA7Cn0KClFBc2Np
aUJ1Y2tldCAqUUdEaWN0Ojp1bmxpbmtfYXNjaWkoIGNvbnN0IGNoYXIgKmtleSwgUUNvbGxlY3Rp
b246Okl0ZW0gZCApCnsKICAgIGlmICggbnVtSXRlbXMgPT0gMCApCiAgICAgICAgcmV0dXJuIDA7
CiAgICBRQXNjaWlCdWNrZXQgKm47CiAgICBRQXNjaWlCdWNrZXQgKnByZXYgPSAwOwogICAgaW50
IGluZGV4ID0gaGFzaEtleUFzY2lpKGtleSkgJSB2bGVuOwogICAgZm9yICggbj0oUUFzY2lpQnVj
a2V0ICopdmVjW2luZGV4XTsgbjsgbj0oUUFzY2lpQnVja2V0ICopbi0+Z2V0TmV4dCgpICkgewog
ICAgICAgIGJvb2wgZm91bmQgPSAoY2FzZXMgPyBxc3RyY21wKG4tPmdldEtleSgpLGtleSkKICAg
ICAgICAgICAgICAgICAgICAgICA6IHFzdHJpY21wKG4tPmdldEtleSgpLGtleSkpID09IDA7CiAg
ICAgICAgaWYgKCBmb3VuZCAmJiBkICkKICAgICAgICAgICAgZm91bmQgPSAobi0+Z2V0RGF0YSgp
ID09IGQpOwogICAgICAgIGlmICggZm91bmQgKSB7CiAgICAgICAgICAgIHVubGlua19jb21tb24o
aW5kZXgsbixwcmV2KTsKICAgICAgICAgICAgcmV0dXJuIG47CiAgICAgICAgfQogICAgICAgIHBy
ZXYgPSBuOwogICAgfQogICAgcmV0dXJuIDA7Cn0KClFJbnRCdWNrZXQgKlFHRGljdDo6dW5saW5r
X2ludCggbG9uZyBrZXksIFFDb2xsZWN0aW9uOjpJdGVtIGQgKQp7CiAgICBpZiAoIG51bUl0ZW1z
ID09IDAgKQogICAgICAgIHJldHVybiAwOwogICAgUUludEJ1Y2tldCAqbjsKICAgIFFJbnRCdWNr
ZXQgKnByZXYgPSAwOwogICAgaW50IGluZGV4ID0gKGludCkoKHVsb25nKWtleSAlIHZsZW4pOwog
ICAgZm9yICggbj0oUUludEJ1Y2tldCAqKXZlY1tpbmRleF07IG47IG49KFFJbnRCdWNrZXQgKilu
LT5nZXROZXh0KCkgKSB7CiAgICAgICAgYm9vbCBmb3VuZCA9IChuLT5nZXRLZXkoKSA9PSBrZXkp
OwogICAgICAgIGlmICggZm91bmQgJiYgZCApCiAgICAgICAgICAgIGZvdW5kID0gKG4tPmdldERh
dGEoKSA9PSBkKTsKICAgICAgICBpZiAoIGZvdW5kICkgewogICAgICAgICAgICB1bmxpbmtfY29t
bW9uKGluZGV4LG4scHJldik7CiAgICAgICAgICAgIHJldHVybiBuOwogICAgICAgIH0KICAgICAg
ICBwcmV2ID0gbjsKICAgIH0KICAgIHJldHVybiAwOwp9CgpRUHRyQnVja2V0ICpRR0RpY3Q6OnVu
bGlua19wdHIoIHZvaWQgKmtleSwgUUNvbGxlY3Rpb246Okl0ZW0gZCApCnsKICAgIGlmICggbnVt
SXRlbXMgPT0gMCApCiAgICAgICAgcmV0dXJuIDA7CiAgICBRUHRyQnVja2V0ICpuOwogICAgUVB0
ckJ1Y2tldCAqcHJldiA9IDA7CiAgICBpbnQgaW5kZXggPSAoaW50KSgodWxvbmcpa2V5ICUgdmxl
bik7CiAgICBmb3IgKCBuPShRUHRyQnVja2V0ICopdmVjW2luZGV4XTsgbjsgbj0oUVB0ckJ1Y2tl
dCAqKW4tPmdldE5leHQoKSApIHsKICAgICAgICBib29sIGZvdW5kID0gKG4tPmdldEtleSgpID09
IGtleSk7CiAgICAgICAgaWYgKCBmb3VuZCAmJiBkICkKICAgICAgICAgICAgZm91bmQgPSAobi0+
Z2V0RGF0YSgpID09IGQpOwogICAgICAgIGlmICggZm91bmQgKSB7CiAgICAgICAgICAgIHVubGlu
a19jb21tb24oaW5kZXgsbixwcmV2KTsKICAgICAgICAgICAgcmV0dXJuIG47CiAgICAgICAgfQog
ICAgICAgIHByZXYgPSBuOwogICAgfQogICAgcmV0dXJuIDA7Cn0KIyA3MDMgInFnZGljdC5jcHAi
CmJvb2wgUUdEaWN0OjpyZW1vdmVfc3RyaW5nKCBjb25zdCBRU3RyaW5nICZrZXksIFFDb2xsZWN0
aW9uOjpJdGVtIGl0ZW0gKQp7CiAgICBRU3RyaW5nQnVja2V0ICpuID0gdW5saW5rX3N0cmluZygg
a2V5LCBpdGVtICk7CiAgICBpZiAoIG4gKSB7CiAgICAgICAgZGVsZXRlSXRlbSggbi0+Z2V0RGF0
YSgpICk7CiAgICAgICAgZGVsZXRlIG47CiAgICAgICAgcmV0dXJuIFRSVUU7CiAgICB9IGVsc2Ug
ewogICAgICAgIHJldHVybiBGQUxTRTsKICAgIH0KfQoKCgoKYm9vbCBRR0RpY3Q6OnJlbW92ZV9h
c2NpaSggY29uc3QgY2hhciAqa2V5LCBRQ29sbGVjdGlvbjo6SXRlbSBpdGVtICkKewogICAgUUFz
Y2lpQnVja2V0ICpuID0gdW5saW5rX2FzY2lpKCBrZXksIGl0ZW0gKTsKICAgIGlmICggbiApIHsK
ICAgICAgICBpZiAoIGNvcHlrICkKICAgICAgICAgICAgZGVsZXRlIFtdIChjaGFyICopbi0+Z2V0
S2V5KCk7CiAgICAgICAgZGVsZXRlSXRlbSggbi0+Z2V0RGF0YSgpICk7CiAgICAgICAgZGVsZXRl
IG47CiAgICB9CiAgICByZXR1cm4gbiAhPSAwOwp9CgoKCgpib29sIFFHRGljdDo6cmVtb3ZlX2lu
dCggbG9uZyBrZXksIFFDb2xsZWN0aW9uOjpJdGVtIGl0ZW0gKQp7CiAgICBRSW50QnVja2V0ICpu
ID0gdW5saW5rX2ludCgga2V5LCBpdGVtICk7CiAgICBpZiAoIG4gKSB7CiAgICAgICAgZGVsZXRl
SXRlbSggbi0+Z2V0RGF0YSgpICk7CiAgICAgICAgZGVsZXRlIG47CiAgICB9CiAgICByZXR1cm4g
biAhPSAwOwp9CgoKCgpib29sIFFHRGljdDo6cmVtb3ZlX3B0ciggdm9pZCAqa2V5LCBRQ29sbGVj
dGlvbjo6SXRlbSBpdGVtICkKewogICAgUVB0ckJ1Y2tldCAqbiA9IHVubGlua19wdHIoIGtleSwg
aXRlbSApOwogICAgaWYgKCBuICkgewogICAgICAgIGRlbGV0ZUl0ZW0oIG4tPmdldERhdGEoKSAp
OwogICAgICAgIGRlbGV0ZSBuOwogICAgfQogICAgcmV0dXJuIG4gIT0gMDsKfQoKCgoKUUNvbGxl
Y3Rpb246Okl0ZW0gUUdEaWN0Ojp0YWtlX3N0cmluZyggY29uc3QgUVN0cmluZyAma2V5ICkKewog
ICAgUVN0cmluZ0J1Y2tldCAqbiA9IHVubGlua19zdHJpbmcoIGtleSApOwogICAgSXRlbSBkOwog
ICAgaWYgKCBuICkgewogICAgICAgIGQgPSBuLT5nZXREYXRhKCk7CiAgICAgICAgZGVsZXRlIG47
CiAgICB9IGVsc2UgewogICAgICAgIGQgPSAwOwogICAgfQogICAgcmV0dXJuIGQ7Cn0KCgoKClFD
b2xsZWN0aW9uOjpJdGVtIFFHRGljdDo6dGFrZV9hc2NpaSggY29uc3QgY2hhciAqa2V5ICkKewog
ICAgUUFzY2lpQnVja2V0ICpuID0gdW5saW5rX2FzY2lpKCBrZXkgKTsKICAgIEl0ZW0gZDsKICAg
IGlmICggbiApIHsKICAgICAgICBpZiAoIGNvcHlrICkKICAgICAgICAgICAgZGVsZXRlIFtdIChj
aGFyICopbi0+Z2V0S2V5KCk7CiAgICAgICAgZCA9IG4tPmdldERhdGEoKTsKICAgICAgICBkZWxl
dGUgbjsKICAgIH0gZWxzZSB7CiAgICAgICAgZCA9IDA7CiAgICB9CiAgICByZXR1cm4gZDsKfQoK
CgoKUUNvbGxlY3Rpb246Okl0ZW0gUUdEaWN0Ojp0YWtlX2ludCggbG9uZyBrZXkgKQp7CiAgICBR
SW50QnVja2V0ICpuID0gdW5saW5rX2ludCgga2V5ICk7CiAgICBJdGVtIGQ7CiAgICBpZiAoIG4g
KSB7CiAgICAgICAgZCA9IG4tPmdldERhdGEoKTsKICAgICAgICBkZWxldGUgbjsKICAgIH0gZWxz
ZSB7CiAgICAgICAgZCA9IDA7CiAgICB9CiAgICByZXR1cm4gZDsKfQoKCgoKUUNvbGxlY3Rpb246
Okl0ZW0gUUdEaWN0Ojp0YWtlX3B0ciggdm9pZCAqa2V5ICkKewogICAgUVB0ckJ1Y2tldCAqbiA9
IHVubGlua19wdHIoIGtleSApOwogICAgSXRlbSBkOwogICAgaWYgKCBuICkgewogICAgICAgIGQg
PSBuLT5nZXREYXRhKCk7CiAgICAgICAgZGVsZXRlIG47CiAgICB9IGVsc2UgewogICAgICAgIGQg
PSAwOwogICAgfQogICAgcmV0dXJuIGQ7Cn0KCgoKCgoKCnZvaWQgUUdEaWN0OjpjbGVhcigpCnsK
ICAgIGlmICggIW51bUl0ZW1zICkKICAgICAgICByZXR1cm47CiAgICBudW1JdGVtcyA9IDA7CiAg
ICBmb3IgKCB1aW50IGo9MDsgajx2bGVuOyBqKysgKSB7CiAgICAgICAgaWYgKCB2ZWNbal0gKSB7
CiAgICAgICAgICAgIHN3aXRjaCAoIGtleXR5cGUgKSB7CiAgICAgICAgICAgICAgICBjYXNlIFN0
cmluZ0tleToKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFFT
dHJpbmdCdWNrZXQgKm49KFFTdHJpbmdCdWNrZXQgKil2ZWNbal07CiAgICAgICAgICAgICAgICAg
ICAgICAgIHdoaWxlICggbiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFTdHJpbmdC
dWNrZXQgKm5leHQgPSAoUVN0cmluZ0J1Y2tldCopbi0+Z2V0TmV4dCgpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVsZXRlSXRlbSggbi0+Z2V0RGF0YSgpICk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWxldGUgbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBu
ZXh0OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBBc2NpaUtleToKICAg
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFFBc2NpaUJ1Y2tldCAq
bj0oUUFzY2lpQnVja2V0ICopdmVjW2pdOwogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAo
IG4gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBRQXNjaWlCdWNrZXQgKm5leHQgPSAo
UUFzY2lpQnVja2V0KiluLT5nZXROZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIGNvcHlrICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgW10gKGNo
YXIgKiluLT5nZXRLZXkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW0o
IG4tPmdldERhdGEoKSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG47CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gbmV4dDsKICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgIGNhc2UgSW50S2V5OgogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgUUludEJ1Y2tldCAqbj0oUUludEJ1Y2tldCAqKXZlY1tqXTsKICAgICAg
ICAgICAgICAgICAgICAgICAgd2hpbGUgKCBuICkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUUludEJ1Y2tldCAqbmV4dCA9IChRSW50QnVja2V0KiluLT5nZXROZXh0KCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZWxldGVJdGVtKCBuLT5nZXREYXRhKCkgKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
biA9IG5leHQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIFB0cktleToK
ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIFFQdHJCdWNrZXQg
Km49KFFQdHJCdWNrZXQgKil2ZWNbal07CiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgg
biApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFQdHJCdWNrZXQgKm5leHQgPSAoUVB0
ckJ1Y2tldCopbi0+Z2V0TmV4dCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRl
SXRlbSggbi0+Z2V0RGF0YSgpICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUg
bjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuZXh0OwogICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZlY1tqXSA9IDA7CiAgICAgICAgfQogICAgfQog
ICAgaWYgKCBpdGVyYXRvcnMgJiYgaXRlcmF0b3JzLT5jb3VudCgpICkgewogICAgICAgIFFHRGlj
dEl0ZXJhdG9yICppID0gaXRlcmF0b3JzLT5maXJzdCgpOwogICAgICAgIHdoaWxlICggaSApIHsK
ICAgICAgICAgICAgaS0+Y3VyTm9kZSA9IDA7CiAgICAgICAgICAgIGkgPSBpdGVyYXRvcnMtPm5l
eHQoKTsKICAgICAgICB9CiAgICB9Cn0KCgoKCgoKCnZvaWQgUUdEaWN0OjpzdGF0aXN0aWNzKCkg
Y29uc3QKewoKICAgIFFTdHJpbmcgbGluZTsKICAgIGxpbmUuZmlsbCggJy0nLCA2MCApOwogICAg
ZG91YmxlIHJlYWwsIGlkZWFsOwogICAgcURlYnVnKCBsaW5lLmFzY2lpKCkgKTsKICAgIHFEZWJ1
ZyggIkRJQ1RJT05BUlkgU1RBVElTVElDUzoiICk7CiAgICBpZiAoIGNvdW50KCkgPT0gMCApIHsK
ICAgICAgICBxRGVidWcoICJFbXB0eSEiICk7CiAgICAgICAgcURlYnVnKCBsaW5lLmFzY2lpKCkg
KTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICByZWFsID0gMC4wOwogICAgaWRlYWwgPSAoZmxv
YXQpY291bnQoKS8oMi4wKnNpemUoKSkqKGNvdW50KCkrMi4wKnNpemUoKS0xKTsKICAgIHVpbnQg
aSA9IDA7CiAgICB3aGlsZSAoIGk8c2l6ZSgpICkgewogICAgICAgIFFCYXNlQnVja2V0ICpuID0g
dmVjW2ldOwogICAgICAgIGludCBiID0gMDsKICAgICAgICB3aGlsZSAoIG4gKSB7CiAgICAgICAg
ICAgIGIrKzsKICAgICAgICAgICAgbiA9IG4tPmdldE5leHQoKTsKICAgICAgICB9CiAgICAgICAg
cmVhbCA9IHJlYWwgKyAoZG91YmxlKWIgKiAoKGRvdWJsZSliKzEuMCkvMi4wOwogICAgICAgIGNo
YXIgYnVmWzgwXSwgKnBidWY7CiAgICAgICAgaWYgKCBiID4gNzggKQogICAgICAgICAgICBiID0g
Nzg7CiAgICAgICAgcGJ1ZiA9IGJ1ZjsKICAgICAgICB3aGlsZSAoIGItLSApCiAgICAgICAgICAg
ICpwYnVmKysgPSAnKic7CiAgICAgICAgKnBidWYgPSAnXDAnOwogICAgICAgIHFEZWJ1ZyggYnVm
ICk7CiAgICAgICAgaSsrOwogICAgfQogICAgcURlYnVnKCAiQXJyYXkgc2l6ZSA9ICVkIiwgc2l6
ZSgpICk7CiAgICBxRGVidWcoICIjIGl0ZW1zICAgID0gJWQiLCBjb3VudCgpICk7CiAgICBxRGVi
dWcoICJSZWFsIGRpc3QgID0gJWciLCByZWFsICk7CiAgICBxRGVidWcoICJSYW5kIGRpc3QgID0g
JWciLCBpZGVhbCApOwogICAgcURlYnVnKCAiUmVhbC9SYW5kICA9ICVnIiwgcmVhbC9pZGVhbCAp
OwogICAgcURlYnVnKCBsaW5lLmFzY2lpKCkgKTsKCn0KCgoKCgoKUURhdGFTdHJlYW0gJm9wZXJh
dG9yPj4oIFFEYXRhU3RyZWFtICZzLCBRR0RpY3QgJmRpY3QgKQp7CiAgICByZXR1cm4gZGljdC5y
ZWFkKCBzICk7Cn0KClFEYXRhU3RyZWFtICZvcGVyYXRvcjw8KCBRRGF0YVN0cmVhbSAmcywgY29u
c3QgUUdEaWN0ICZkaWN0ICkKewogICAgcmV0dXJuIGRpY3Qud3JpdGUoIHMgKTsKfQojIDk2OCAi
cWdkaWN0LmNwcCIKUURhdGFTdHJlYW0gJlFHRGljdDo6cmVhZCggUURhdGFTdHJlYW0gJnMgKQp7
CiAgICB1aW50IG51bTsKICAgIHMgPj4gbnVtOwogICAgY2xlYXIoKTsKICAgIHdoaWxlICggbnVt
LS0gKSB7CiAgICAgICAgSXRlbSBkOwogICAgICAgIHN3aXRjaCAoIGtleXR5cGUgKSB7CiAgICAg
ICAgICAgIGNhc2UgU3RyaW5nS2V5OgogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgIFFTdHJpbmcgazsKICAgICAgICAgICAgICAgICAgICBzID4+IGs7CiAgICAgICAgICAgICAg
ICAgICAgcmVhZCggcywgZCApOwogICAgICAgICAgICAgICAgICAgIGxvb2tfc3RyaW5nKCBrLCBk
LCBvcF9pbnNlcnQgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICBjYXNlIEFzY2lpS2V5OgogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgIGNoYXIgKms7CiAgICAgICAgICAgICAgICAgICAgcyA+PiBrOwogICAgICAgICAgICAg
ICAgICAgIHJlYWQoIHMsIGQgKTsKICAgICAgICAgICAgICAgICAgICBsb29rX2FzY2lpKCBrLCBk
LCBvcF9pbnNlcnQgKTsKICAgICAgICAgICAgICAgICAgICBpZiAoIGNvcHlrICkKICAgICAgICAg
ICAgICAgICAgICAgICAgZGVsZXRlIFtdIGs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBJbnRLZXk6CiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgUV9VSU5UMzIgazsKICAgICAgICAgICAgICAgICAgICBzID4+IGs7
CiAgICAgICAgICAgICAgICAgICAgcmVhZCggcywgZCApOwogICAgICAgICAgICAgICAgICAgIGxv
b2tfaW50KCBrLCBkLCBvcF9pbnNlcnQgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIFB0cktleToKICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICBRX1VJTlQzMiBrOwogICAgICAgICAgICAgICAgICAgIHMgPj4gazsK
ICAgICAgICAgICAgICAgICAgICByZWFkKCBzLCBkICk7CgoKCgogICAgICAgICAgICAgICAgICAg
IGlmICggayApCiAgICAgICAgICAgICAgICAgICAgICAgIGxvb2tfcHRyKCAodm9pZCAqKWssIGQs
IG9wX2luc2VydCApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgfQogICAgfQogICAgcmV0dXJuIHM7Cn0KCgoKCgoKUURhdGFTdHJlYW0mIFFHRGljdDo6
d3JpdGUoIFFEYXRhU3RyZWFtICZzICkgY29uc3QKewogICAgcyA8PCBjb3VudCgpOwogICAgdWlu
dCBpID0gMDsKICAgIHdoaWxlICggaTxzaXplKCkgKSB7CiAgICAgICAgUUJhc2VCdWNrZXQgKm4g
PSB2ZWNbaV07CiAgICAgICAgd2hpbGUgKCBuICkgewogICAgICAgICAgICBzd2l0Y2ggKCBrZXl0
eXBlICkgewogICAgICAgICAgICAgICAgY2FzZSBTdHJpbmdLZXk6CiAgICAgICAgICAgICAgICAg
ICAgcyA8PCAoKFFTdHJpbmdCdWNrZXQqKW4pLT5nZXRLZXkoKTsKICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgQXNjaWlLZXk6CiAgICAgICAgICAgICAgICAg
ICAgcyA8PCAoKFFBc2NpaUJ1Y2tldCopbiktPmdldEtleSgpOwogICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBJbnRLZXk6CiAgICAgICAgICAgICAgICAgICAg
cyA8PCAoUV9VSU5UMzIpKChRSW50QnVja2V0KiluKS0+Z2V0S2V5KCk7CiAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIFB0cktleToKICAgICAgICAgICAgICAg
ICAgICBzIDw8IChRX1VJTlQzMikwOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICB9CiAgICAgICAgICAgIHdyaXRlKCBzLCBuLT5nZXREYXRhKCkgKTsKICAgICAgICAgICAg
biA9IG4tPmdldE5leHQoKTsKICAgICAgICB9CiAgICAgICAgaSsrOwogICAgfQogICAgcmV0dXJu
IHM7Cn0KIyAxMDcyICJxZ2RpY3QuY3BwIgpRR0RpY3RJdGVyYXRvcjo6UUdEaWN0SXRlcmF0b3Io
IGNvbnN0IFFHRGljdCAmZCApCnsKICAgIGRpY3QgPSAoUUdEaWN0ICopJmQ7CiAgICB0b0ZpcnN0
KCk7CiAgICBpZiAoICFkaWN0LT5pdGVyYXRvcnMgKSB7CiAgICAgICAgZGljdC0+aXRlcmF0b3Jz
ID0gbmV3IFFHREl0TGlzdDsKICAgICAgICAocXRfY2hlY2tfcG9pbnRlcigoZGljdC0+aXRlcmF0
b3JzKT09MCwicWdkaWN0LmNwcCIsMTA3OCkpOwogICAgfQogICAgZGljdC0+aXRlcmF0b3JzLT5h
cHBlbmQoIHRoaXMgKTsKfQoKCgoKCgpRR0RpY3RJdGVyYXRvcjo6UUdEaWN0SXRlcmF0b3IoIGNv
bnN0IFFHRGljdEl0ZXJhdG9yICZpdCApCnsKICAgIGRpY3QgPSBpdC5kaWN0OwogICAgY3VyTm9k
ZSA9IGl0LmN1ck5vZGU7CiAgICBjdXJJbmRleCA9IGl0LmN1ckluZGV4OwogICAgaWYgKCBkaWN0
ICkKICAgICAgICBkaWN0LT5pdGVyYXRvcnMtPmFwcGVuZCggdGhpcyApOwp9CgoKCgoKCgpRR0Rp
Y3RJdGVyYXRvciAmUUdEaWN0SXRlcmF0b3I6Om9wZXJhdG9yPSggY29uc3QgUUdEaWN0SXRlcmF0
b3IgJml0ICkKewogICAgaWYgKCBkaWN0ICkKICAgICAgICBkaWN0LT5pdGVyYXRvcnMtPnJlbW92
ZVJlZiggdGhpcyApOwogICAgZGljdCA9IGl0LmRpY3Q7CiAgICBjdXJOb2RlID0gaXQuY3VyTm9k
ZTsKICAgIGN1ckluZGV4ID0gaXQuY3VySW5kZXg7CiAgICBpZiAoIGRpY3QgKQogICAgICAgIGRp
Y3QtPml0ZXJhdG9ycy0+YXBwZW5kKCB0aGlzICk7CiAgICByZXR1cm4gKnRoaXM7Cn0KCgoKCgoK
UUdEaWN0SXRlcmF0b3I6On5RR0RpY3RJdGVyYXRvcigpCnsKICAgIGlmICggZGljdCApCiAgICAg
ICAgZGljdC0+aXRlcmF0b3JzLT5yZW1vdmVSZWYoIHRoaXMgKTsKfQoKCgoKCgoKUUNvbGxlY3Rp
b246Okl0ZW0gUUdEaWN0SXRlcmF0b3I6OnRvRmlyc3QoKQp7CiAgICBpZiAoICFkaWN0ICkgewoK
ICAgICAgICBxV2FybmluZyggIlFHRGljdEl0ZXJhdG9yOjp0b0ZpcnN0OiBEaWN0aW9uYXJ5IGhh
cyBiZWVuIGRlbGV0ZWQiICk7CgogICAgICAgIHJldHVybiAwOwogICAgfQogICAgaWYgKCBkaWN0
LT5jb3VudCgpID09IDAgKSB7CiAgICAgICAgY3VyTm9kZSA9IDA7CiAgICAgICAgcmV0dXJuIDA7
CiAgICB9CiAgICByZWdpc3RlciB1aW50IGkgPSAwOwogICAgcmVnaXN0ZXIgUUJhc2VCdWNrZXQg
Kip2ID0gZGljdC0+dmVjOwogICAgd2hpbGUgKCAhKCp2KyspICkKICAgICAgICBpKys7CiAgICBj
dXJOb2RlID0gZGljdC0+dmVjW2ldOwogICAgY3VySW5kZXggPSBpOwogICAgcmV0dXJuIGN1ck5v
ZGUtPmdldERhdGEoKTsKfQoKCgoKCgoKUUNvbGxlY3Rpb246Okl0ZW0gUUdEaWN0SXRlcmF0b3I6
Om9wZXJhdG9yKCkoKQp7CiAgICBpZiAoICFkaWN0ICkgewoKICAgICAgICBxV2FybmluZyggIlFH
RGljdEl0ZXJhdG9yOjpvcGVyYXRvcigpOiBEaWN0aW9uYXJ5IGhhcyBiZWVuIGRlbGV0ZWQiICk7
CgogICAgICAgIHJldHVybiAwOwogICAgfQogICAgaWYgKCAhY3VyTm9kZSApCiAgICAgICAgcmV0
dXJuIDA7CiAgICBRQ29sbGVjdGlvbjo6SXRlbSBkID0gY3VyTm9kZS0+Z2V0RGF0YSgpOwogICAg
dGhpcy0+b3BlcmF0b3IrKygpOwogICAgcmV0dXJuIGQ7Cn0KCgoKCgoKUUNvbGxlY3Rpb246Okl0
ZW0gUUdEaWN0SXRlcmF0b3I6Om9wZXJhdG9yKysoKQp7CiAgICBpZiAoICFkaWN0ICkgewoKICAg
ICAgICBxV2FybmluZyggIlFHRGljdEl0ZXJhdG9yOjpvcGVyYXRvcisrOiBEaWN0aW9uYXJ5IGhh
cyBiZWVuIGRlbGV0ZWQiICk7CgogICAgICAgIHJldHVybiAwOwogICAgfQogICAgaWYgKCAhY3Vy
Tm9kZSApCiAgICAgICAgcmV0dXJuIDA7CiAgICBjdXJOb2RlID0gY3VyTm9kZS0+Z2V0TmV4dCgp
OwogICAgaWYgKCAhY3VyTm9kZSApIHsKICAgICAgICByZWdpc3RlciB1aW50IGkgPSBjdXJJbmRl
eCArIDE7CiAgICAgICAgcmVnaXN0ZXIgUUJhc2VCdWNrZXQgKip2ID0gJmRpY3QtPnZlY1tpXTsK
ICAgICAgICB3aGlsZSAoIGkgPCBkaWN0LT5zaXplKCkgJiYgISgqdisrKSApCiAgICAgICAgICAg
IGkrKzsKICAgICAgICBpZiAoIGkgPT0gZGljdC0+c2l6ZSgpICkgewogICAgICAgICAgICBjdXJO
b2RlID0gMDsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgICAgIGN1ck5vZGUg
PSBkaWN0LT52ZWNbaV07CiAgICAgICAgY3VySW5kZXggPSBpOwogICAgfQogICAgcmV0dXJuIGN1
ck5vZGUtPmdldERhdGEoKTsKfQoKCgoKCgpRQ29sbGVjdGlvbjo6SXRlbSBRR0RpY3RJdGVyYXRv
cjo6b3BlcmF0b3IrPSggdWludCBqdW1wcyApCnsKICAgIHdoaWxlICggY3VyTm9kZSAmJiBqdW1w
cy0tICkKICAgICAgICBvcGVyYXRvcisrKCk7CiAgICByZXR1cm4gY3VyTm9kZSA/IGN1ck5vZGUt
PmdldERhdGEoKSA6IDA7Cn0K


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

end of thread, other threads:[~2001-08-17 21:12 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-08-01  3:47 c++/3903: ICE near an enum declaration compiling qgdict.cpp from Qt with -O2 or -Os nathan
  -- strict thread matches above, loose matches on Subject: below --
2001-08-17 21:12 rodrigc
2001-07-31 12:06 wjl

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).