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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

c++/2920: compiler crashes while compiling static constructor



>Number:         2920
>Category:       c++
>Synopsis:       compiler crashes while compiling static constructor
>Confidential:   no
>Severity:       critical
>Priority:       high
>Responsible:    unassigned
>State:          open
>Class:          ice-on-legal-code
>Submitter-Id:   net
>Arrival-Date:   Thu May 24 00:16:01 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     davidm@hpl.hp.com
>Release:        gcc version 3.0 20010523 (prerelease)
>Organization:
>Environment:
IA-64 Linux
>Description:
The compiler crashes due to a line of the form:

  nsCOMPtr<nsIFile> nsSoftwareUpdate::mProgramDir = 0;

If the line is changed to:

  nsCOMPtr<nsIFile> nsSoftwareUpdate::mProgramDir;

then no crash occurs.
>How-To-Repeat:
$ c++ -c bug-swupdate.i
In file included from nsInstall.h:40,
                 from nsSoftwareUpdate.cpp:45:
../../dist/include/nsHashtable.h: In member function `virtual PRUint32 
   nsISupportsKey::HashCode() const':
../../dist/include/nsHashtable.h:190: warning: cast from pointer to integer of 
   different size
../../dist/include/nsHashtable.h: In member function `virtual PRUint32 
   nsVoidKey::HashCode() const':
../../dist/include/nsHashtable.h:219: warning: cast from pointer to integer of 
   different size
../../dist/include/nsBufferHandle.h: In function `void 
   __static_initialization_and_destruction_0(int, int)':
../../dist/include/nsBufferHandle.h:94: Internal compiler error in 
   emit_move_insn_1, at expr.c:2986
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="bug-swupdate.i"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="bug-swupdate.i"

IyAxICJuc1NvZnR3YXJlVXBkYXRlLmNwcCIKIyAxICIuLi8uLi9jb25maWctZGVmcy5oIiAxCiMg
MiAibnNTb2Z0d2FyZVVwZGF0ZS5jcHAiIDIKIyAyNiAibnNTb2Z0d2FyZVVwZGF0ZS5jcHAiCiMg
MSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5oIiAxCiMgMzcgIi4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc2NvcmUuaCIKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv
cHJ0eXBlcy5oIiAxCiMgMzkgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNw
ci9wcnR5cGVzLmgiCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By
L3ByY3B1Y2ZnLmgiIDEKIyA0MCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u
c3ByL3BydHlwZXMuaCIgMgoKCiMgMSAiL3Vzci9nY2MtcHJlMy4wL2xpYi9nY2MtbGliL2lhNjQt
aHAtbGludXgvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDE0NyAiL3Vzci9nY2MtcHJlMy4w
L2xpYi9nY2MtbGliL2lhNjQtaHAtbGludXgvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRl
ZiBsb25nIGludCBwdHJkaWZmX3Q7CiMgMTk5ICIvdXNyL2djYy1wcmUzLjAvbGliL2djYy1saWIv
aWE2NC1ocC1saW51eC8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIGxvbmcgdW5zaWdu
ZWQgaW50IHNpemVfdDsKIyA0MyAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u
c3ByL3BydHlwZXMuaCIgMgojIDIzNCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVk
ZS9uc3ByL3BydHlwZXMuaCIKZXh0ZXJuICJDIiB7CiMgMjQ0ICIvdXNyL3NyYy9taXNjL21vemls
bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgUFJV
aW50ODsKIyAyNTggIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5
cGVzLmgiCnR5cGVkZWYgc2lnbmVkIGNoYXIgUFJJbnQ4OwojIDI3MSAiL3Vzci9zcmMvbWlzYy9t
b3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIKdHlwZWRlZiB1bnNpZ25lZCBzaG9y
dCBQUlVpbnQxNjsKdHlwZWRlZiBzaG9ydCBQUkludDE2OwojIDI4NCAiL3Vzci9zcmMvbWlzYy9t
b3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIKdHlwZWRlZiB1bnNpZ25lZCBpbnQg
UFJVaW50MzI7CnR5cGVkZWYgaW50IFBSSW50MzI7CiMgMzA5ICIvdXNyL3NyYy9taXNjL21vemls
bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIgp0eXBlZGVmIGxvbmcgUFJJbnQ2NDsKdHlw
ZWRlZiB1bnNpZ25lZCBsb25nIFBSVWludDY0OwojIDM0MiAiL3Vzci9zcmMvbWlzYy9tb3ppbGxh
L2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIKdHlwZWRlZiBpbnQgUFJJbnRuOwp0eXBlZGVm
IHVuc2lnbmVkIGludCBQUlVpbnRuOwojIDM1MyAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3Qv
aW5jbHVkZS9uc3ByL3BydHlwZXMuaCIKdHlwZWRlZiBkb3VibGUgUFJGbG9hdDY0OwoKCgoKCgp0
eXBlZGVmIHNpemVfdCBQUlNpemU7CgoKCgoKCgp0eXBlZGVmIFBSSW50MzIgUFJPZmZzZXQzMjsK
dHlwZWRlZiBQUkludDY0IFBST2Zmc2V0NjQ7CgoKCgoKCgp0eXBlZGVmIHB0cmRpZmZfdCBQUlB0
cmRpZmY7CgoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgUFJVcHRyZGlmZjsKIyAzOTUgIi91
c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiCnR5cGVkZWYg
UFJJbnRuIFBSQm9vbDsKIyA0MDUgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUv
bnNwci9wcnR5cGVzLmgiCnR5cGVkZWYgUFJVaW50OCBQUlBhY2tlZEJvb2w7CgoKCgoKdHlwZWRl
ZiBlbnVtIHsgUFJfRkFJTFVSRSA9IC0xLCBQUl9TVUNDRVNTID0gMCB9IFBSU3RhdHVzOwojIDQy
NCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIKdHlw
ZWRlZiBsb25nIFBSV29yZDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIFBSVXdvcmQ7CiMgNDY2ICIv
dXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIgojIDEgIi91
c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9vYnNvbGV0ZS9wcm90eXBlcy5o
IiAxCiMgMjkgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9vYnNvbGV0
ZS9wcm90eXBlcy5oIgp0eXBlZGVmIFBSVWludG4gdWludG47Cgp0eXBlZGVmIFBSSW50biBpbnRu
OwojIDUzICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvb2Jzb2xldGUv
cHJvdHlwZXMuaCIKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDI2ICIvdXNy
L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAz
CiMgMjgzICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMv
Y2RlZnMuaCIgMSAzCiMgMjg0ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMzExICIv
dXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nbnUvc3R1YnMuaCIg
MSAzCiMgMzEyICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMjcgIi91c3IvaW5jbHVk
ZS9zeXMvdHlwZXMuaCIgMiAzCgpleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
dHlwZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKIyAxICIvdXNy
L2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgi
IDIgMwoKCiMgMSAiL3Vzci9nY2MtcHJlMy4wL2xpYi9nY2MtbGliL2lhNjQtaHAtbGludXgvMy4w
L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAy
IDMKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hv
cnQgaW50IF9fdV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191X2ludDsKdHlwZWRlZiB1
bnNpZ25lZCBsb25nIGludCBfX3VfbG9uZzsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3Vf
cXVhZF90Owp0eXBlZGVmIGxvbmcgaW50IF9fcXVhZF90Owp0eXBlZGVmIHNpZ25lZCBjaGFyIF9f
aW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBz
aG9ydCBpbnQgX19pbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90
Owp0eXBlZGVmIHNpZ25lZCBpbnQgX19pbnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3Vp
bnQzMl90Owp0eXBlZGVmIHNpZ25lZCBsb25nIGludCBfX2ludDY0X3Q7CnR5cGVkZWYgdW5zaWdu
ZWQgbG9uZyBpbnQgX191aW50NjRfdDsKdHlwZWRlZiBfX3F1YWRfdCAqX19xYWRkcl90OwoKdHlw
ZWRlZiBfX3VpbnQ2NF90IF9fZGV2X3Q7CnR5cGVkZWYgX191aW50MzJfdCBfX3VpZF90Owp0eXBl
ZGVmIF9fdWludDMyX3QgX19naWRfdDsKdHlwZWRlZiBfX3VpbnQ2NF90IF9faW5vX3Q7CnR5cGVk
ZWYgX191aW50NjRfdCBfX2lubzY0X3Q7CnR5cGVkZWYgX191aW50MzJfdCBfX21vZGVfdDsKdHlw
ZWRlZiBfX3VpbnQ2NF90IF9fbmxpbmtfdDsKdHlwZWRlZiBfX2ludDY0X3QgX19vZmZfdDsKdHlw
ZWRlZiBfX2ludDY0X3QgX19vZmY2NF90Owp0eXBlZGVmIF9faW50NjRfdCBfX2xvZmZfdDsKdHlw
ZWRlZiBfX2ludDMyX3QgX19waWRfdDsKdHlwZWRlZiBfX2ludDY0X3QgX19zc2l6ZV90Owp0eXBl
ZGVmIF9fdWludDY0X3QgX19ybGltX3Q7CnR5cGVkZWYgX191aW50NjRfdCBfX3JsaW02NF90Owp0
eXBlZGVmIF9faW50NjRfdCBfX2Jsa2NudF90Owp0eXBlZGVmIF9faW50NjRfdCBfX2Jsa2NudDY0
X3Q7CnR5cGVkZWYgX191aW50NjRfdCBfX2ZzYmxrY250X3Q7CnR5cGVkZWYgX191aW50NjRfdCBf
X2ZzYmxrY250NjRfdDsKdHlwZWRlZiBfX3VpbnQ2NF90IF9fZnNmaWxjbnRfdDsKdHlwZWRlZiBf
X3VpbnQ2NF90IF9fZnNmaWxjbnQ2NF90Owp0eXBlZGVmIF9fdWludDMyX3QgX19pZF90OwoKdHlw
ZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgX192YWxbMl07CiAgfSBfX2ZzaWRfdDsKCgp0eXBlZGVm
IGludCBfX2RhZGRyX3Q7CnR5cGVkZWYgY2hhciAqX19jYWRkcl90Owp0eXBlZGVmIGxvbmcgaW50
IF9fdGltZV90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9u
ZyBpbnQgX19zdXNlY29uZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N3YmxrX3Q7CnR5cGVkZWYg
bG9uZyBpbnQgX19jbG9ja190Owp0eXBlZGVmIGludCBfX2tleV90OwoKCnR5cGVkZWYgaW50IF9f
Y2xvY2tpZF90OwoKCnR5cGVkZWYgaW50IF9fdGltZXJfdDsKCgp0eXBlZGVmIGludCBfX2lwY19w
aWRfdDsKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrc2l6ZV90OwoKCgoKCgp0eXBlZGVmIGludCBf
X3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdF91c2NhbGFyX3Q7CgoKdHlwZWRl
ZiBsb25nIGludCBfX2ludHB0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IF9fc29ja2xlbl90
OwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMKIyAyMyAiL3Vz
ci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9z
Y2hlZC5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMwpzdHJ1Y3QgX19z
Y2hlZF9wYXJhbQogIHsKICAgIGludCBfX3NjaGVkX3ByaW9yaXR5OwogIH07CiMgMjQgIi91c3Iv
aW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAyIDMKCgpzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxv
Y2sKewogIGxvbmcgaW50IF9fc3RhdHVzOwogIGludCBfX3NwaW5sb2NrOwoKfTsKCgoKdHlwZWRl
ZiBzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpfcHRocmVhZF9kZXNjcjsKCgoKCgp0eXBl
ZGVmIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zCnsKICBpbnQgX19kZXRhY2hzdGF0ZTsKICBpbnQg
X19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9wYXJhbSBfX3NjaGVkcGFyYW07CiAgaW50
IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwogIHNpemVfdCBfX2d1YXJkc2l6ZTsKICBp
bnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3RhY2thZGRyOwogIHNpemVfdCBfX3N0YWNr
c2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRo
cmVhZF9mYXN0bG9jayBfX2NfbG9jazsKICBfcHRocmVhZF9kZXNjciBfX2Nfd2FpdGluZzsKfSBw
dGhyZWFkX2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1bW15Owp9IHB0aHJl
YWRfY29uZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBwdGhyZWFkX2tleV90OwoKCgoK
CnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOwogIGludCBfX21fY291bnQ7CiAg
X3B0aHJlYWRfZGVzY3IgX19tX293bmVyOwogIGludCBfX21fa2luZDsKICBzdHJ1Y3QgX3B0aHJl
YWRfZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9tdXRleF90OwoKCgp0eXBlZGVmIHN0cnVj
dAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CgoKCnR5cGVkZWYg
aW50IHB0aHJlYWRfb25jZV90OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfcndsb2NrX3QK
ewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX3J3X2xvY2s7CiAgaW50IF9fcndfcmVhZGVy
czsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlcjsKICBfcHRocmVhZF9kZXNjciBfX3J3X3Jl
YWRfd2FpdGluZzsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlX3dhaXRpbmc7CiAgaW50IF9f
cndfa2luZDsKICBpbnQgX19yd19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrX3Q7CgoKCnR5cGVk
ZWYgc3RydWN0CnsKICBpbnQgX19sb2Nra2luZDsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRf
cndsb2NrYXR0cl90OwoKCgoKdHlwZWRlZiB2b2xhdGlsZSBpbnQgcHRocmVhZF9zcGlubG9ja190
OwoKCnR5cGVkZWYgc3RydWN0IHsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19iYV9sb2Nr
OwogIGludCBfX2JhX3JlcXVpcmVkOwogIGludCBfX2JhX3ByZXNlbnQ7CiAgX3B0aHJlYWRfZGVz
Y3IgX19iYV93YWl0aW5nOwp9IHB0aHJlYWRfYmFycmllcl90OwoKCnR5cGVkZWYgc3RydWN0IHsK
ICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfYmFycmllcmF0dHJfdDsKCgoKCgp0eXBlZGVmIHVu
c2lnbmVkIGxvbmcgaW50IHB0aHJlYWRfdDsKIyAxMTQgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVz
LmgiIDIgMwojIDMxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCnR5cGVkZWYgX191
X2NoYXIgdV9jaGFyOwp0eXBlZGVmIF9fdV9zaG9ydCB1X3Nob3J0Owp0eXBlZGVmIF9fdV9pbnQg
dV9pbnQ7CnR5cGVkZWYgX191X2xvbmcgdV9sb25nOwp0eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsK
dHlwZWRlZiBfX3VfcXVhZF90IHVfcXVhZF90Owp0eXBlZGVmIF9fZnNpZF90IGZzaWRfdDsKCgp0
eXBlZGVmIF9fbG9mZl90IGxvZmZfdDsKCgoKdHlwZWRlZiBfX2lub190IGlub190OwoKCgoKCgp0
eXBlZGVmIF9faW5vNjRfdCBpbm82NF90OwoKCgoKdHlwZWRlZiBfX2Rldl90IGRldl90OwoKCgoK
dHlwZWRlZiBfX2dpZF90IGdpZF90OwoKCgoKdHlwZWRlZiBfX21vZGVfdCBtb2RlX3Q7CgoKCgp0
eXBlZGVmIF9fbmxpbmtfdCBubGlua190OwoKCgoKdHlwZWRlZiBfX3VpZF90IHVpZF90OwoKCgoK
CnR5cGVkZWYgX19vZmZfdCBvZmZfdDsKCgoKCgoKdHlwZWRlZiBfX29mZjY0X3Qgb2ZmNjRfdDsK
CgoKCnR5cGVkZWYgX19waWRfdCBwaWRfdDsKCgoKCnR5cGVkZWYgX19pZF90IGlkX3Q7CgoKCgp0
eXBlZGVmIF9fc3NpemVfdCBzc2l6ZV90OwoKCgoKdHlwZWRlZiBfX2RhZGRyX3QgZGFkZHJfdDsK
dHlwZWRlZiBfX2NhZGRyX3QgY2FkZHJfdDsKCgoKdHlwZWRlZiBfX2tleV90IGtleV90OwojIDEy
NiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg
MSAzCiMgNTYgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90
eXBlcy5oIiAxIDMKIyA1NyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKdHlwZWRlZiBfX2Ns
b2NrX3QgY2xvY2tfdDsKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAz
CiMgNjggIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKCnR5cGVkZWYgX190aW1lX3QgdGltZV90
OwojIDc5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlw
ZXMuaCIgMSAzCiMgODAgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKCnR5cGVkZWYgX19jbG9j
a2lkX3QgY2xvY2tpZF90OwojIDkxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCiMgMSAiL3Vzci9p
bmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgOTIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoK
CnR5cGVkZWYgX190aW1lcl90IHRpbWVyX3Q7CiMgMTI3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz
LmgiIDIgMwoKCgp0eXBlZGVmIF9fdXNlY29uZHNfdCB1c2Vjb25kc190OwoKCgp0eXBlZGVmIF9f
c3VzZWNvbmRzX3Qgc3VzZWNvbmRzX3Q7CgoKCgoKIyAxICIvdXNyL2djYy1wcmUzLjAvbGliL2dj
Yy1saWIvaWE2NC1ocC1saW51eC8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTQxICIvdXNy
L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVs
b25nOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQg
aW50IHVpbnQ7CiMgMTg0ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBpbnQg
aW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIGludCBp
bnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBp
bnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIGludCBp
bnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKCnR5cGVkZWYgdW5z
aWduZWQgaW50IHVfaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0
eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChf
X0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgo
X19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0
cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBf
X2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fd29yZF9fKSkpOwojIDIwNiAiL3Vzci9pbmNsdWRl
L3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyAyMiAiL3Vz
ci9pbmNsdWRlL2VuZGlhbi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwoj
IDIzICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDIgMwojIDM3ICIvdXNyL2luY2x1ZGUvZW5kaWFu
LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lbmRpYW4uaCIgMSAzCiMgMzggIi91c3IvaW5j
bHVkZS9lbmRpYW4uaCIgMiAzCiMgMjA3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoK
CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9z
eXMvc2VsZWN0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjYgIi91
c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlw
ZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vz
ci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVj
dC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAxIDMKIyAyMyAiL3Vz
ci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMKdHlwZWRlZiBpbnQgX19zaWdfYXRvbWljX3Q7CgoK
Cgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdmFsWygxMDI0IC8g
KDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpXTsKICB9IF9fc2lnc2V0X3Q7CiMgMzUg
Ii91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCgp0eXBlZGVmIF9fc2lnc2V0X3Qgc2ln
c2V0X3Q7CgoKCgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDEwNiAiL3Vzci9pbmNs
dWRlL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBsb25nIGludCB0dl9zZWM7CiAg
ICBsb25nIGludCB0dl9uc2VjOwogIH07CiMgNDQgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0Lmgi
IDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMwojIDU5ICIvdXNyL2luY2x1
ZGUvYml0cy90aW1lLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA2
MCAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAyIDMKCgoKc3RydWN0IHRpbWV2YWwKICB7CiAg
ICBfX3RpbWVfdCB0dl9zZWM7CiAgICBfX3N1c2Vjb25kc190IHR2X3VzZWM7CiAgfTsKIyA0NiAi
L3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKCnR5cGVkZWYgbG9uZyBpbnQgX19mZF9t
YXNrOwoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CgoKCiAgICBfX2ZkX21hc2sgZmRzX2JpdHNb
MTAyNCAvICg4ICogc2l6ZW9mIChfX2ZkX21hc2spKV07CgoKCgoKICB9IGZkX3NldDsKCgoKCgoK
dHlwZWRlZiBfX2ZkX21hc2sgZmRfbWFzazsKIyA4OSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3Qu
aCIgMwpleHRlcm4gIkMiIHsKCgoKCgoKZXh0ZXJuIGludCBzZWxlY3QgKGludCBfX25mZHMsIGZk
X3NldCAqX19yZXN0cmljdCBfX3JlYWRmZHMsCiAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9f
cmVzdHJpY3QgX193cml0ZWZkcywKICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmlj
dCBfX2V4Y2VwdGZkcywKICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICpfX3Jlc3Ry
aWN0IF9fdGltZW91dCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwc2VsZWN0IChpbnQgX19u
ZmRzLCBmZF9zZXQgKl9fcmVzdHJpY3QgX19yZWFkZmRzLAogICAgICAgICAgICAgICAgICAgIGZk
X3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAogICAgICAgICAgICAgICAgICAgIGZkX3NldCAq
X19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qg
dGltZXNwZWMgKl9fcmVzdHJpY3QgX190aW1lb3V0LAogICAgICAgICAgICAgICAgICAgIGNvbnN0
IF9fc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19zaWdtYXNrKSB0aHJvdyAoKTsKCgp9CiMgMjEwICIv
dXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zeXNt
YWNyb3MuaCIgMSAzCiMgMjEzICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgoKdHlw
ZWRlZiBfX2Jsa3NpemVfdCBibGtzaXplX3Q7CgoKCgoKCnR5cGVkZWYgX19ibGtjbnRfdCBibGtj
bnRfdDsKCgoKdHlwZWRlZiBfX2ZzYmxrY250X3QgZnNibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2Zz
ZmlsY250X3QgZnNmaWxjbnRfdDsKIyAyNTEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0
eXBlZGVmIF9fYmxrY250NjRfdCBibGtjbnQ2NF90Owp0eXBlZGVmIF9fZnNibGtjbnQ2NF90IGZz
YmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzZmlsY250NjRfdCBmc2ZpbGNudDY0X3Q7CgoKfQojIDU0
ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvb2Jzb2xldGUvcHJvdHlw
ZXMuaCIgMgoKCgoKCnR5cGVkZWYgUFJVaW50NjQgdWludDY0OwoKdHlwZWRlZiBQUlVpbnQzMiB1
aW50MzI7CgoKCnR5cGVkZWYgUFJVaW50MTYgdWludDE2Owp0eXBlZGVmIFBSVWludDggdWludDg7
CiMgNzcgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9vYnNvbGV0ZS9w
cm90eXBlcy5oIgp0eXBlZGVmIFBSSW50NjQgaW50NjQ7CgoKCgoKCgp0eXBlZGVmIFBSSW50MzIg
aW50MzI7CgoKCgp0eXBlZGVmIFBSSW50MTYgaW50MTY7CnR5cGVkZWYgUFJJbnQ4IGludDg7CgoK
CgoKdHlwZWRlZiBQUkZsb2F0NjQgZmxvYXQ2NDsKdHlwZWRlZiBQUlVwdHJkaWZmIHVwdHJkaWZm
X3Q7CnR5cGVkZWYgUFJVd29yZCB1cHJ3b3JkX3Q7CnR5cGVkZWYgUFJXb3JkIHByd29yZF90Owoj
IDQ2NyAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIg
MgoKCgoKCn0KIyAzOCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5oIiAyCgoKIyAxICIuLi8u
Li9kaXN0L2luY2x1ZGUvbnNEZWJ1Zy5oIiAxCiMgMjYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0Rl
YnVnLmgiCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29tLmgiIDEKIyAyNyAiLi4vLi4vZGlz
dC9pbmNsdWRlL25zRGVidWcuaCIgMgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2lu
Y2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyAyOCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zRGVidWcu
aCIgMgojIDQyICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNEZWJ1Zy5oIgpjbGFzcyBuc0RlYnVnIHsK
cHVibGljOgoKCgoKCgogIHN0YXRpYyB2b2lkIEFib3J0SWZGYWxzZShjb25zdCBjaGFyKiBhU3Ry
LCBjb25zdCBjaGFyKiBhRXhwciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIqIGFGaWxlLCBQUkludG4gYUxpbmUpOwojIDYwICIuLi8uLi9kaXN0L2luY2x1ZGUv
bnNEZWJ1Zy5oIgogIHN0YXRpYyBQUkJvb2wgV2FybklmRmFsc2UoY29uc3QgY2hhciogYVN0ciwg
Y29uc3QgY2hhciogYUV4cHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciogYUZpbGUsIFBSSW50biBhTGluZSk7CiMgNzggIi4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0RlYnVnLmgiCiAgc3RhdGljIHZvaWQgU2V0V2FybmluZ01lc3NhZ2VCb3hFbmFibGUoUFJCb29s
IGFPbk9mZik7CgoKCgogIHN0YXRpYyBQUkJvb2wgR2V0V2FybmluZ01lc3NhZ2VCb3hFbmFibGUo
dm9pZCk7CiMgOTYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0RlYnVnLmgiCiAgc3RhdGljIHZvaWQg
QWJvcnQoY29uc3QgY2hhciogYUZpbGUsIFBSSW50biBhTGluZSk7CgoKCgogIHN0YXRpYyB2b2lk
IEJyZWFrKGNvbnN0IGNoYXIqIGFGaWxlLCBQUkludG4gYUxpbmUpOwoKCgoKICBzdGF0aWMgdm9p
ZCBQcmVDb25kaXRpb24oY29uc3QgY2hhciogYVN0ciwgY29uc3QgY2hhciogYUV4cHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhRmlsZSwgUFJJbnRuIGFM
aW5lKTsKCgoKCiAgc3RhdGljIHZvaWQgUG9zdENvbmRpdGlvbihjb25zdCBjaGFyKiBhU3RyLCBj
b25zdCBjaGFyKiBhRXhwciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiBhRmlsZSwgUFJJbnRuIGFMaW5lKTsKCgoKCiAgc3RhdGljIHZvaWQgQXNzZXJ0aW9u
KGNvbnN0IGNoYXIqIGFTdHIsIGNvbnN0IGNoYXIqIGFFeHByLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogYUZpbGUsIFBSSW50biBhTGluZSk7CgoKCgogIHN0YXRp
YyB2b2lkIE5vdFlldEltcGxlbWVudGVkKGNvbnN0IGNoYXIqIGFNZXNzYWdlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhRmlsZSwgUFJJbnRuIGFM
aW5lKTsKCgoKCiAgc3RhdGljIHZvaWQgTm90UmVhY2hlZChjb25zdCBjaGFyKiBhTWVzc2FnZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhRmlsZSwgUFJJbnRu
IGFMaW5lKTsKCgoKCiAgc3RhdGljIHZvaWQgRXJyb3IoY29uc3QgY2hhciogYU1lc3NhZ2UsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFGaWxlLCBQUkludG4gYUxpbmUp
OwoKCgoKICBzdGF0aWMgdm9pZCBXYXJuaW5nKGNvbnN0IGNoYXIqIGFNZXNzYWdlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFGaWxlLCBQUkludG4gYUxpbmUpOwp9
OwojIDQxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNjb3JlLmgiIDIKIyAyMTMgIi4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc2NvcmUuaCIKICAgIHR5cGVkZWYgUFJVaW50MTYgUFJVbmljaGFyOwojIDI3ICJu
c1NvZnR3YXJlVXBkYXRlLmNwcCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lHZW5lcmlj
RmFjdG9yeS5oIiAxCiMgMjYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lHZW5lcmljRmFjdG9yeS5o
IgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGYWN0b3J5LmgiIDEKIyAxMCAiLi4vLi4vZGlz
dC9pbmNsdWRlL25zSUZhY3RvcnkuaCIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9y
dHMuaCIgMQojIDEwICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIKIyAxICIuLi8u
Li9kaXN0L2luY2x1ZGUvbnNyb290aWRsLmgiIDEKIyAxMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25z
cm9vdGlkbC5oIgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIgMQojIDEyICIuLi8u
Li9kaXN0L2luY2x1ZGUvbnNyb290aWRsLmgiIDIKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEv
ZGlzdC9pbmNsdWRlL25zcHIvcHJ0aW1lLmgiIDEKIyAzMiAiL3Vzci9zcmMvbWlzYy9tb3ppbGxh
L2Rpc3QvaW5jbHVkZS9uc3ByL3BydGltZS5oIgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9k
aXN0L2luY2x1ZGUvbnNwci9wcmxvbmcuaCIgMQojIDMwICIvdXNyL3NyYy9taXNjL21vemlsbGEv
ZGlzdC9pbmNsdWRlL25zcHIvcHJsb25nLmgiCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rp
c3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQojIDMxICIvdXNyL3NyYy9taXNjL21vemlsbGEv
ZGlzdC9pbmNsdWRlL25zcHIvcHJsb25nLmgiIDIKCmV4dGVybiAiQyIgewojIDUwICIvdXNyL3Ny
Yy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsb25nLmgiCmV4dGVybiBQUkludDY0
IExMX01heEludCh2b2lkKTsKZXh0ZXJuIFBSSW50NjQgTExfTWluSW50KHZvaWQpOwpleHRlcm4g
UFJJbnQ2NCBMTF9aZXJvKHZvaWQpOwojIDQwNyAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3Qv
aW5jbHVkZS9uc3ByL3BybG9uZy5oIgp9CiMgMzMgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0
L2luY2x1ZGUvbnNwci9wcnRpbWUuaCIgMgoKZXh0ZXJuICJDIiB7CiMgNjEgIi91c3Ivc3JjL21p
c2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRpbWUuaCIKdHlwZWRlZiBQUkludDY0IFBS
VGltZTsKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgUFJUaW1lUGFyYW1ldGVycyB7CiAgICBQUkludDMy
IHRwX2dtdF9vZmZzZXQ7CiAgICBQUkludDMyIHRwX2RzdF9vZmZzZXQ7Cn0gUFJUaW1lUGFyYW1l
dGVyczsKIyA5NiAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGlt
ZS5oIgp0eXBlZGVmIHN0cnVjdCBQUkV4cGxvZGVkVGltZSB7CiAgICBQUkludDMyIHRtX3VzZWM7
CiAgICBQUkludDMyIHRtX3NlYzsKCiAgICBQUkludDMyIHRtX21pbjsKICAgIFBSSW50MzIgdG1f
aG91cjsKICAgIFBSSW50MzIgdG1fbWRheTsKCiAgICBQUkludDMyIHRtX21vbnRoOwogICAgUFJJ
bnQxNiB0bV95ZWFyOwoKCiAgICBQUkludDggdG1fd2RheTsKCiAgICBQUkludDE2IHRtX3lkYXk7
CgoKICAgIFBSVGltZVBhcmFtZXRlcnMgdG1fcGFyYW1zOwp9IFBSRXhwbG9kZWRUaW1lOwojIDEz
OSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGltZS5oIgp0eXBl
ZGVmIFBSVGltZVBhcmFtZXRlcnMgKCAqUFJUaW1lUGFyYW1GbikoY29uc3QgUFJFeHBsb2RlZFRp
bWUgKmdtdCk7CiMgMTYxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv
cHJ0aW1lLmgiCmV4dGVybiBQUlRpbWUKClBSX05vdyh2b2lkKTsKIyAxNzUgIi91c3Ivc3JjL21p
c2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRpbWUuaCIKZXh0ZXJuIHZvaWQgUFJfRXhw
bG9kZVRpbWUoCiAgICBQUlRpbWUgdXNlY3MsIFBSVGltZVBhcmFtRm4gcGFyYW1zLCBQUkV4cGxv
ZGVkVGltZSAqZXhwbG9kZWQpOwoKCgoKCmV4dGVybiBQUlRpbWUKClBSX0ltcGxvZGVUaW1lKGNv
bnN0IFBSRXhwbG9kZWRUaW1lICpleHBsb2RlZCk7CiMgMTk4ICIvdXNyL3NyYy9taXNjL21vemls
bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0aW1lLmgiCmV4dGVybiB2b2lkIFBSX05vcm1hbGl6ZVRp
bWUoCiAgICBQUkV4cGxvZGVkVGltZSAqZXhwbG9kZWQsIFBSVGltZVBhcmFtRm4gcGFyYW1zKTsK
CgoKCgoKZXh0ZXJuIFBSVGltZVBhcmFtZXRlcnMgUFJfTG9jYWxUaW1lUGFyYW1ldGVycyhjb25z
dCBQUkV4cGxvZGVkVGltZSAqZ210KTsKCgpleHRlcm4gUFJUaW1lUGFyYW1ldGVycyBQUl9HTVRQ
YXJhbWV0ZXJzKGNvbnN0IFBSRXhwbG9kZWRUaW1lICpnbXQpOwoKCgoKCmV4dGVybiBQUlRpbWVQ
YXJhbWV0ZXJzIFBSX1VTUGFjaWZpY1RpbWVQYXJhbWV0ZXJzKGNvbnN0IFBSRXhwbG9kZWRUaW1l
ICpnbXQpOwojIDI0OCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By
dGltZS5oIgpleHRlcm4gUFJTdGF0dXMgUFJfUGFyc2VUaW1lU3RyaW5nICgKICAgICAgICBjb25z
dCBjaGFyICpzdHJpbmcsCiAgICAgICAgUFJCb29sIGRlZmF1bHRfdG9fZ210LAogICAgICAgIFBS
VGltZSAqcmVzdWx0KTsKIyAyNjUgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUv
bnNwci9wcnRpbWUuaCIKZXh0ZXJuIFBSVWludDMyIFBSX0Zvcm1hdFRpbWUoY2hhciAqYnVmLCBp
bnQgYnVmbGVuLCBjb25zdCBjaGFyICpmbXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBQUkV4cGxvZGVkVGltZSAqdG0pOwoKCgoKZXh0ZXJuIFBSVWlu
dDMyClBSX0Zvcm1hdFRpbWVVU0VuZ2xpc2goIGNoYXIqIGJ1ZiwgUFJVaW50MzIgYnVmU2l6ZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZm9ybWF0LCBjb25zdCBQUkV4cGxv
ZGVkVGltZSogdG0gKTsKCgoKfQojIDEzICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNyb290aWRsLmgi
IDIKIyAxMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzLmgiIDIKIyAxMTcgIi4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lT
dXBwb3J0c1V0aWxzLmgiIDEKIyAzMiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzVXRp
bHMuaCIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNjb3JlLmgiIDEKIyAzMyAiLi4vLi4vZGlz
dC9pbmNsdWRlL25zSVN1cHBvcnRzVXRpbHMuaCIgMgoKCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRl
L25zRGVidWcuaCIgMQojIDM2ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNVdGlscy5o
IiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUQuaCIgMQojIDI2ICIuLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJRC5oIgojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzCiMgMjYgIi91c3Iv
aW5jbHVkZS9zdHJpbmcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAy
NyAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgoKIyAxICIvdXNy
L2djYy1wcmUzLjAvbGliL2djYy1saWIvaWE2NC1ocC1saW51eC8zLjAvaW5jbHVkZS9zdGRkZWYu
aCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKCmV4dGVybiB2b2lkICpt
ZW1jcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVy
biB2b2lkICptZW1tb3ZlICh2b2lkICpfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19zcmMsIHNpemVf
dCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgKm1lbWNjcHkgKHZvaWQgKl9f
cmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAg
ICAgICAgICAgICAgICBpbnQgX19jLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKZXh0
ZXJuIHZvaWQgKm1lbXNldCAodm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IG1lbWNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQg
Kl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f
KSk7CgoKZXh0ZXJuIHZvaWQgKm1lbWNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNp
emVfdCBfX24pCiAgICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoK
ZXh0ZXJuIHZvaWQgKnJhd21lbWNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB2b2lkICptZW1yY2hyIChf
X2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICAgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gY2hhciAqc3RyY3B5IChjaGFyICpf
X3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRo
cm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cm5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAog
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXpl
X3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqc3RyY2F0IChjaGFyICpfX3Jlc3RyaWN0
IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoK
ZXh0ZXJuIGNoYXIgKnN0cm5jYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKSB0
aHJvdyAoKTsKCgpleHRlcm4gaW50IHN0cmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0
IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7Cgpl
eHRlcm4gaW50IHN0cm5jbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3My
LCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK
CmV4dGVybiBpbnQgc3RyY29sbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9f
czIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6
ZV90IHN0cnhmcm0gKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7
CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRl
L3hsb2NhbGUuaCIgMwp0eXBlZGVmIHN0cnVjdCBfX2xvY2FsZV9zdHJ1Y3QKewoKICBzdHJ1Y3Qg
bG9jYWxlX2RhdGEgKl9fbG9jYWxlc1sxM107CgoKICBjb25zdCB1bnNpZ25lZCBzaG9ydCBpbnQg
Kl9fY3R5cGVfYjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG9sb3dlcjsKICBjb25zdCBpbnQgKl9f
Y3R5cGVfdG91cHBlcjsKfSAqX19sb2NhbGVfdDsKIyAxMDkgIi91c3IvaW5jbHVkZS9zdHJpbmcu
aCIgMiAzCgoKZXh0ZXJuIGludCBfX3N0cmNvbGxfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2Nv
bnN0IGNoYXIgKl9fczIsIF9fbG9jYWxlX3QgX19sKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHNpemVfdCBfX3N0cnhmcm1fbCAoY2hhciAqX19kZXN0
LCBfX2NvbnN0IGNoYXIgKl9fc3JjLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqc3RyZHVwIChf
X2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsK
CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cm5kdXAgKF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVf
dCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKIyAxNTUg
Ii91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3RyY2hyIChfX2NvbnN0IGNo
YXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7Cgpl
eHRlcm4gY2hhciAqc3RycmNociAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmNocm51bCAo
X19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1
cmVfXykpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJjc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19j
b25zdCBjaGFyICpfX3JlamVjdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl
X18pKTsKCgpleHRlcm4gc2l6ZV90IHN0cnNwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3Qg
Y2hhciAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7
CgpleHRlcm4gY2hhciAqc3RycGJyayAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAq
X19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRl
cm4gY2hhciAqc3Ryc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAq
X19uZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4
dGVybiBjaGFyICpzdHJjYXNlc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3Qg
Y2hhciAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7
CgoKCmV4dGVybiBjaGFyICpzdHJ0b2sgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19kZWxpbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9f
c3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpz
dHJ0b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2RlbGltLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9w
dHIpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gdm9pZCAqbWVtbWVtIChfX2NvbnN0IHZvaWQgKl9f
aGF5c3RhY2ssIHNpemVfdCBfX2hheXN0YWNrbGVuLAogICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IHZvaWQgKl9fbmVlZGxlLCBzaXplX3QgX19uZWVkbGVsZW4pCiAgICAgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiB2b2lkICpfX21lbXBjcHkgKHZvaWQg
Kl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQg
Kl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwpleHRlcm4gdm9pZCAqbWVt
cGNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKZXh0
ZXJuIHNpemVfdCBzdHJsZW4gKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBzaXplX3Qgc3RybmxlbiAoX19jb25zdCBjaGFy
ICpfX3N0cmluZywgc2l6ZV90IF9fbWF4bGVuKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yIChpbnQgX19lcnJudW0pIHRo
cm93ICgpOwoKCgpleHRlcm4gY2hhciAqc3RyZXJyb3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpf
X2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIF9fYnplcm8g
KHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGJjb3B5IChf
X2NvbnN0IHZvaWQgKl9fc3JjLCB2b2lkICpfX2Rlc3QsIHNpemVfdCBfX24pIHRocm93ICgpOwoK
CmV4dGVybiB2b2lkIGJ6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgYmNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNp
emVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0
ZXJuIGNoYXIgKmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKnJpbmRleCAoX19jb25zdCBj
aGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK
CgpleHRlcm4gaW50IGZmcyAoaW50IF9faSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKGNvbnN0
KSk7CgoKCgpleHRlcm4gaW50IGZmc2wgKGxvbmcgaW50IF9fbCkgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKGNvbnN0KSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBpbnQgZmZzbGwgKGxvbmcgbG9u
ZyBpbnQgX19sbCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKCgoKCmV4
dGVybiBpbnQgc3RyY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9f
czIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGlu
dCBzdHJuY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNp
emVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoK
ZXh0ZXJuIGludCBfX3N0cmNhc2VjbXBfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNo
YXIgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBfX3N0cm5jYXNl
Y21wX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gY2hhciAqc3Ryc2Vw
IChjaGFyICoqX19yZXN0cmljdCBfX3N0cmluZ3AsCiAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc3Ry
dmVyc2NtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKnN0cnNpZ25h
bCAoaW50IF9fc2lnKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqX19zdHBjcHkgKGNoYXIgKl9f
cmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhy
b3cgKCk7CmV4dGVybiBjaGFyICpzdHBjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFy
ICpfX3N0cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgp
OwpleHRlcm4gY2hhciAqc3RwbmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24p
IHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpzdHJmcnkgKGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAo
KTsKCgpleHRlcm4gdm9pZCAqbWVtZnJvYiAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAo
KTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmJhc2VuYW1lIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUp
IHRocm93ICgpOwojIDM2MyAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCn0KIyAyNyAiLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSUQuaCIgMgojIDQwICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRC5oIgpz
dHJ1Y3QgbnNJRCB7CgoKCgoKICBQUlVpbnQzMiBtMDsKICBQUlVpbnQxNiBtMTsKICBQUlVpbnQx
NiBtMjsKICBQUlVpbnQ4IG0zWzhdOwojIDYyICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRC5oIgog
IGlubGluZSBQUkJvb2wgRXF1YWxzKGNvbnN0IG5zSUQmIG90aGVyKSBjb25zdCB7CiAgICByZXR1
cm4gKFBSQm9vbCkKICAgICAgKCgoKFBSVWludDMyKikgJm0wKVswXSA9PSAoKFBSVWludDMyKikg
Jm90aGVyLm0wKVswXSkgJiYKICAgICAgICgoKFBSVWludDMyKikgJm0wKVsxXSA9PSAoKFBSVWlu
dDMyKikgJm90aGVyLm0wKVsxXSkgJiYKICAgICAgICgoKFBSVWludDMyKikgJm0wKVsyXSA9PSAo
KFBSVWludDMyKikgJm90aGVyLm0wKVsyXSkgJiYKICAgICAgICgoKFBSVWludDMyKikgJm0wKVsz
XSA9PSAoKFBSVWludDMyKikgJm90aGVyLm0wKVszXSkpOwogIH0KCgoKCgogICAgICAgICBQUkJv
b2wgUGFyc2UoY29uc3QgY2hhciAqYUlEU3RyKTsKCgoKCgogICAgICAgICBjaGFyKiBUb1N0cmlu
ZygpIGNvbnN0OwoKfTsKIyAxMDIgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lELmgiCnR5cGVkZWYg
bnNJRCBuc0NJRDsKIyAzNyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzVXRpbHMuaCIg
MgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lJRC5oIiAxCiMgMzUgIi4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lJRC5oIgp0eXBlZGVmIG5zSUQgbnNJSUQ7CiMgMzggIi4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lTdXBwb3J0c1V0aWxzLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNFcnJvci5o
IiAxCiMgMjYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0Vycm9yLmgiCiMgMSAiLi4vLi4vZGlzdC9p
bmNsdWRlL25zQ29tLmgiIDEKIyAyNyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zRXJyb3IuaCIgMgoj
IDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEK
IyAyOCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zRXJyb3IuaCIgMgoKCgoKCnR5cGVkZWYgUFJVaW50
MzIgbnNyZXN1bHQ7CiMgMjYyICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNFcnJvci5oIgpleHRlcm4g
bnNyZXN1bHQKTlNfRXJyb3JBY2NvcmRpbmdUb05TUFIoKTsKIyAzOSAiLi4vLi4vZGlzdC9pbmNs
dWRlL25zSVN1cHBvcnRzVXRpbHMuaCIgMgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0
L2luY2x1ZGUvbnNwci9wcmF0b20uaCIgMQojIDI3ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlz
dC9pbmNsdWRlL25zcHIvcHJhdG9tLmgiCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3Qv
aW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQojIDI4ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlz
dC9pbmNsdWRlL25zcHIvcHJhdG9tLmgiIDIKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlz
dC9pbmNsdWRlL25zcHIvcHJsb2NrLmgiIDEKIyAzMiAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rp
c3QvaW5jbHVkZS9uc3ByL3BybG9jay5oIgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0
L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyAzMyAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rp
c3QvaW5jbHVkZS9uc3ByL3BybG9jay5oIiAyCgpleHRlcm4gIkMiIHsKIyA0NyAiL3Vzci9zcmMv
bWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9jay5oIgp0eXBlZGVmIHN0cnVjdCBQ
UkxvY2sgUFJMb2NrOwojIDY0ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25z
cHIvcHJsb2NrLmgiCmV4dGVybiBQUkxvY2sqIFBSX05ld0xvY2sodm9pZCk7CiMgNzUgIi91c3Iv
c3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmxvY2suaCIKZXh0ZXJuIHZvaWQg
UFJfRGVzdHJveUxvY2soUFJMb2NrICpsb2NrKTsKIyA4NiAiL3Vzci9zcmMvbWlzYy9tb3ppbGxh
L2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9jay5oIgpleHRlcm4gdm9pZCBQUl9Mb2NrKFBSTG9jayAq
bG9jayk7CiMgOTggIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmxv
Y2suaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX1VubG9jayhQUkxvY2sgKmxvY2spOwoKfQojIDI5ICIv
dXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJhdG9tLmgiIDIKCmV4dGVy
biAiQyIgewojIDQxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJh
dG9tLmgiCmV4dGVybiBQUkludDMyIFBSX0F0b21pY0luY3JlbWVudChQUkludDMyICp2YWwpOwoj
IDUyICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJhdG9tLmgiCmV4
dGVybiBQUkludDMyIFBSX0F0b21pY0RlY3JlbWVudChQUkludDMyICp2YWwpOwojIDY0ICIvdXNy
L3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJhdG9tLmgiCmV4dGVybiBQUklu
dDMyIFBSX0F0b21pY1NldChQUkludDMyICp2YWwsIFBSSW50MzIgbmV3dmFsKTsKIyA3NiAiL3Vz
ci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByYXRvbS5oIgpleHRlcm4gUFJJ
bnQzMiBQUl9BdG9taWNBZGQoUFJJbnQzMiAqcHRyLCBQUkludDMyIHZhbCk7CgoKCgp0eXBlZGVm
IHN0cnVjdCBQUlN0YWNrRWxlbVN0ciBQUlN0YWNrRWxlbTsKCnN0cnVjdCBQUlN0YWNrRWxlbVN0
ciB7CiAgICBQUlN0YWNrRWxlbSAqcHJzdGtfZWxlbV9uZXh0OwoKfTsKCnR5cGVkZWYgc3RydWN0
IFBSU3RhY2tTdHIgUFJTdGFjazsKIyA5OSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5j
bHVkZS9uc3ByL3ByYXRvbS5oIgpleHRlcm4gUFJTdGFjayAqIFBSX0NyZWF0ZVN0YWNrKGNvbnN0
IGNoYXIgKnN0YWNrX25hbWUpOwojIDExMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5j
bHVkZS9uc3ByL3ByYXRvbS5oIgpleHRlcm4gdm9pZCBQUl9TdGFja1B1c2goUFJTdGFjayAqc3Rh
Y2ssIFBSU3RhY2tFbGVtICpzdGFja19lbGVtKTsKIyAxMjQgIi91c3Ivc3JjL21pc2MvbW96aWxs
YS9kaXN0L2luY2x1ZGUvbnNwci9wcmF0b20uaCIKZXh0ZXJuIFBSU3RhY2tFbGVtICogUFJfU3Rh
Y2tQb3AoUFJTdGFjayAqc3RhY2spOwojIDEzOCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3Qv
aW5jbHVkZS9uc3ByL3ByYXRvbS5oIgpleHRlcm4gUFJTdGF0dXMgUFJfRGVzdHJveVN0YWNrKFBS
U3RhY2sgKnN0YWNrKTsKCn0KIyA0MCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzVXRp
bHMuaCIgMgoKCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By
Y21vbi5oIiAxCiMgMzIgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w
cmNtb24uaCIKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJt
b24uaCIgMQojIDIyICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJt
b24uaCIKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBl
cy5oIiAxCiMgMjMgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcm1v
bi5oIiAyCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW5y
dmFsLmgiIDEKIyAzNCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By
aW5ydmFsLmgiCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By
dHlwZXMuaCIgMQojIDM1ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv
cHJpbnJ2YWwuaCIgMgoKZXh0ZXJuICJDIiB7CgoKCgoKdHlwZWRlZiBQUlVpbnQzMiBQUkludGVy
dmFsVGltZTsKIyA4OSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By
aW5ydmFsLmgiCmV4dGVybiBQUkludGVydmFsVGltZSBQUl9JbnRlcnZhbE5vdyh2b2lkKTsKIyAx
MDcgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlucnZhbC5oIgpl
eHRlcm4gUFJVaW50MzIgUFJfVGlja3NQZXJTZWNvbmQodm9pZCk7CiMgMTI2ICIvdXNyL3NyYy9t
aXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpbnJ2YWwuaCIKZXh0ZXJuIFBSSW50ZXJ2
YWxUaW1lIFBSX1NlY29uZHNUb0ludGVydmFsKFBSVWludDMyIHNlY29uZHMpOwpleHRlcm4gUFJJ
bnRlcnZhbFRpbWUgUFJfTWlsbGlzZWNvbmRzVG9JbnRlcnZhbChQUlVpbnQzMiBtaWxsaSk7CmV4
dGVybiBQUkludGVydmFsVGltZSBQUl9NaWNyb3NlY29uZHNUb0ludGVydmFsKFBSVWludDMyIG1p
Y3JvKTsKIyAxNDcgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlu
cnZhbC5oIgpleHRlcm4gUFJVaW50MzIgUFJfSW50ZXJ2YWxUb1NlY29uZHMoUFJJbnRlcnZhbFRp
bWUgdGlja3MpOwpleHRlcm4gUFJVaW50MzIgUFJfSW50ZXJ2YWxUb01pbGxpc2Vjb25kcyhQUklu
dGVydmFsVGltZSB0aWNrcyk7CmV4dGVybiBQUlVpbnQzMiBQUl9JbnRlcnZhbFRvTWljcm9zZWNv
bmRzKFBSSW50ZXJ2YWxUaW1lIHRpY2tzKTsKCn0KIyAyNCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxh
L2Rpc3QvaW5jbHVkZS9uc3ByL3BybW9uLmgiIDIKCmV4dGVybiAiQyIgewoKdHlwZWRlZiBzdHJ1
Y3QgUFJNb25pdG9yIFBSTW9uaXRvcjsKIyAzNiAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3Qv
aW5jbHVkZS9uc3ByL3BybW9uLmgiCmV4dGVybiBQUk1vbml0b3IqIFBSX05ld01vbml0b3Iodm9p
ZCk7CgoKCgoKCgpleHRlcm4gdm9pZCBQUl9EZXN0cm95TW9uaXRvcihQUk1vbml0b3IgKm1vbik7
CgoKCgoKCmV4dGVybiB2b2lkIFBSX0VudGVyTW9uaXRvcihQUk1vbml0b3IgKm1vbik7CgoKCgoK
CmV4dGVybiBQUlN0YXR1cyBQUl9FeGl0TW9uaXRvcihQUk1vbml0b3IgKm1vbik7CiMgNzYgIi91
c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcm1vbi5oIgpleHRlcm4gUFJT
dGF0dXMgUFJfV2FpdChQUk1vbml0b3IgKm1vbiwgUFJJbnRlcnZhbFRpbWUgdGlja3MpOwoKCgoK
CgpleHRlcm4gUFJTdGF0dXMgUFJfTm90aWZ5KFBSTW9uaXRvciAqbW9uKTsKCgoKCgoKZXh0ZXJu
IFBSU3RhdHVzIFBSX05vdGlmeUFsbChQUk1vbml0b3IgKm1vbik7Cgp9CiMgMzMgIi91c3Ivc3Jj
L21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmNtb24uaCIgMgojIDEgIi91c3Ivc3Jj
L21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlucnZhbC5oIiAxCiMgMzQgIi91c3Iv
c3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmNtb24uaCIgMgoKZXh0ZXJuICJD
IiB7CiMgNDUgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmNtb24u
aCIKZXh0ZXJuIFBSTW9uaXRvciogUFJfQ0VudGVyTW9uaXRvcih2b2lkICphZGRyZXNzKTsKCgoK
CgpleHRlcm4gUFJTdGF0dXMgUFJfQ0V4aXRNb25pdG9yKHZvaWQgKmFkZHJlc3MpOwoKCgoKCmV4
dGVybiBQUlN0YXR1cyBQUl9DV2FpdCh2b2lkICphZGRyZXNzLCBQUkludGVydmFsVGltZSB0aW1l
b3V0KTsKCgoKCgpleHRlcm4gUFJTdGF0dXMgUFJfQ05vdGlmeSh2b2lkICphZGRyZXNzKTsKCgoK
CgpleHRlcm4gUFJTdGF0dXMgUFJfQ05vdGlmeUFsbCh2b2lkICphZGRyZXNzKTsKCgoKCgpleHRl
cm4gdm9pZCBQUl9DU2V0T25Nb25pdG9yUmVjeWNsZSh2b2lkICggKmNhbGxiYWNrKSh2b2lkICph
ZGRyZXNzKSk7Cgp9CiMgNDMgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0c1V0aWxzLmgi
IDIKIyA3MSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzVXRpbHMuaCIKdHlwZWRlZiBQ
UlVpbnQzMiBuc3JlZmNudDsKIyA5MCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzVXRp
bHMuaCIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNUcmFjZVJlZmNudC5oIiAxCiMgMjYgIi4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc1RyYWNlUmVmY250LmgiCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRl
L25zQ29tLmgiIDEKIyAyNyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zVHJhY2VSZWZjbnQuaCIgMgoK
IyAxICIvdXNyL2djYy1wcmUzLjAvbGliL2djYy1saWIvaWE2NC1ocC1saW51eC8zLjAvaW5jbHVk
ZS9zdGRpby5oIiAxIDMKIyAzNiAiL3Vzci9nY2MtcHJlMy4wL2xpYi9nY2MtbGliL2lhNjQtaHAt
bGludXgvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5o
IiAxIDMKIyAzNyAiL3Vzci9nY2MtcHJlMy4wL2xpYi9nY2MtbGliL2lhNjQtaHAtbGludXgvMy4w
L2luY2x1ZGUvc3RkaW8uaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKIyAxICIvdXNyL2djYy1wcmUz
LjAvbGliL2djYy1saWIvaWE2NC1ocC1saW51eC8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg
NDMgIi91c3IvZ2NjLXByZTMuMC9saWIvZ2NjLWxpYi9pYTY0LWhwLWxpbnV4LzMuMC9pbmNsdWRl
L3N0ZGlvLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA0NSAi
L3Vzci9nY2MtcHJlMy4wL2xpYi9nY2MtbGliL2lhNjQtaHAtbGludXgvMy4wL2luY2x1ZGUvc3Rk
aW8uaCIgMiAzCiMgNTMgIi91c3IvZ2NjLXByZTMuMC9saWIvZ2NjLWxpYi9pYTY0LWhwLWxpbnV4
LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgRklMRTsKIyA2
MyAiL3Vzci9nY2MtcHJlMy4wL2xpYi9nY2MtbGliL2lhNjQtaHAtbGludXgvMy4wL2luY2x1ZGUv
c3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBfX0ZJTEU7CiMgNzMgIi91c3IvZ2Nj
LXByZTMuMC9saWIvZ2NjLWxpYi9pYTY0LWhwLWxpbnV4LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMK
IyAxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9saWJpby5o
IiAzCiMgMSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAxIDMKIyA5ICIvdXNyL2luY2x1ZGUv
X0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAxMCAi
L3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKCgoKCiMgMSAiL3Vzci9nY2MtcHJlMy4wL2xp
Yi9nY2MtbGliL2lhNjQtaHAtbGludXgvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMxMiAi
L3Vzci9nY2MtcHJlMy4wL2xpYi9nY2MtbGliL2lhNjQtaHAtbGludXgvMy4wL2luY2x1ZGUvc3Rk
ZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1ZGUv
X0dfY29uZmlnLmgiIDIgMwojIDI0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIv
dXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMg
MSAiL3Vzci9nY2MtcHJlMy4wL2xpYi9nY2MtbGliL2lhNjQtaHAtbGludXgvMy4wL2luY2x1ZGUv
c3RkZGVmLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCgojIDEgIi91c3Iv
aW5jbHVkZS9iaXRzL3djaGFyLmgiIDEgMwojIDUxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAz
CiMgNjcgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19j
b3VudDsKICB1bmlvbgogIHsKICAgIHdpbnRfdCBfX3djaDsKICAgIGNoYXIgX193Y2hiWzRdOwog
IH0gX192YWx1ZTsKfSBfX21ic3RhdGVfdDsKIyAyNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5o
IiAyIDMKCnR5cGVkZWYgc3RydWN0CnsKICBfX29mZl90IF9fcG9zOwogIF9fbWJzdGF0ZV90IF9f
c3RhdGU7Cn0gX0dfZnBvc190Owp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmY2NF90IF9fcG9zOwog
IF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBvczY0X3Q7CiMgNDQgIi91c3IvaW5jbHVkZS9f
R19jb25maWcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nY29udi5oIiAxIDMKIyAyNiAiL3Vzci9p
bmNsdWRlL2djb252LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcg
Ii91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEg
MwojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwojIDEgIi91c3IvZ2NjLXByZTMuMC9saWIv
Z2NjLWxpYi9pYTY0LWhwLWxpbnV4LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vz
ci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93Y2hhci5oIiAx
IDMKIyA1MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDI5ICIvdXNyL2luY2x1ZGUvZ2Nv
bnYuaCIgMiAzCgojIDEgIi91c3IvZ2NjLXByZTMuMC9saWIvZ2NjLWxpYi9pYTY0LWhwLWxpbnV4
LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIg
MwoKCgoKCmVudW0KewogIF9fR0NPTlZfT0sgPSAwLAogIF9fR0NPTlZfTk9DT05WLAogIF9fR0NP
TlZfTk9EQiwKICBfX0dDT05WX05PTUVNLAoKICBfX0dDT05WX0VNUFRZX0lOUFVULAogIF9fR0NP
TlZfRlVMTF9PVVRQVVQsCiAgX19HQ09OVl9JTExFR0FMX0lOUFVULAogIF9fR0NPTlZfSU5DT01Q
TEVURV9JTlBVVCwKCiAgX19HQ09OVl9JTExFR0FMX0RFU0NSSVBUT1IsCiAgX19HQ09OVl9JTlRF
Uk5BTF9FUlJPUgp9OwoKCgplbnVtCnsKICBfX0dDT05WX0lTX0xBU1QgPSAweDAwMDEsCiAgX19H
Q09OVl9JR05PUkVfRVJST1JTID0gMHgwMDAyCn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXA7CnN0
cnVjdCBfX2djb252X3N0ZXBfZGF0YTsKc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdDsKc3Ry
dWN0IF9fZ2NvbnZfdHJhbnNfZGF0YTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2ZjdCkgKHN0
cnVjdCBfX2djb252X3N0ZXAgKiwgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosIF9fY29uc3QgdW5z
aWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAq
Kiwgc2l6ZV90ICosIGludCwgaW50KTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfaW5pdF9mY3Qp
IChzdHJ1Y3QgX19nY29udl9zdGVwICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X2VuZF9mY3Qp
IChzdHJ1Y3QgX19nY29udl9zdGVwICopOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNf
ZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosIHZvaWQgKiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVk
IGNoYXIgKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoK
dHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2NvbnRleHRfZmN0KSAodm9pZCAqLCBfX2NvbnN0
IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKTsKCgp0eXBlZGVm
IGludCAoKl9fZ2NvbnZfdHJhbnNfcXVlcnlfZmN0KSAoX19jb25zdCBjaGFyICosIF9fY29uc3Qg
Y2hhciAqKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
Kik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2luaXRfZmN0KSAodm9pZCAqKiwgY29u
c3QgY2hhciAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl90cmFuc19lbmRfZmN0KSAodm9pZCAq
KTsKCnN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEKewoKICBfX2djb252X3RyYW5zX2ZjdCBfX3Ry
YW5zX2ZjdDsKICBfX2djb252X3RyYW5zX2NvbnRleHRfZmN0IF9fdHJhbnNfY29udGV4dF9mY3Q7
CiAgX19nY29udl90cmFuc19lbmRfZmN0IF9fdHJhbnNfZW5kX2ZjdDsKICB2b2lkICpfX2RhdGE7
CiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX19uZXh0Owp9OwoKCgpzdHJ1Y3QgX19nY29u
dl9zdGVwCnsKICBzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0ICpfX3NobGliX2hhbmRsZTsK
ICBfX2NvbnN0IGNoYXIgKl9fbW9kbmFtZTsKCiAgaW50IF9fY291bnRlcjsKCiAgY2hhciAqX19m
cm9tX25hbWU7CiAgY2hhciAqX190b19uYW1lOwoKICBfX2djb252X2ZjdCBfX2ZjdDsKICBfX2dj
b252X2luaXRfZmN0IF9faW5pdF9mY3Q7CiAgX19nY29udl9lbmRfZmN0IF9fZW5kX2ZjdDsKCgoK
ICBpbnQgX19taW5fbmVlZGVkX2Zyb207CiAgaW50IF9fbWF4X25lZWRlZF9mcm9tOwogIGludCBf
X21pbl9uZWVkZWRfdG87CiAgaW50IF9fbWF4X25lZWRlZF90bzsKCgogIGludCBfX3N0YXRlZnVs
OwoKICB2b2lkICpfX2RhdGE7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YQp7CiAgdW5z
aWduZWQgY2hhciAqX19vdXRidWY7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWZlbmQ7CgoKCiAg
aW50IF9fZmxhZ3M7CgoKCiAgaW50IF9faW52b2NhdGlvbl9jb3VudGVyOwoKCgogIGludCBfX2lu
dGVybmFsX3VzZTsKCiAgX19tYnN0YXRlX3QgKl9fc3RhdGVwOwogIF9fbWJzdGF0ZV90IF9fc3Rh
dGU7CgoKCiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX190cmFuczsKfTsKCgoKdHlwZWRl
ZiBzdHJ1Y3QgX19nY29udl9pbmZvCnsKICBzaXplX3QgX19uc3RlcHM7CiAgc3RydWN0IF9fZ2Nv
bnZfc3RlcCAqX19zdGVwczsKICBfX2V4dGVuc2lvbl9fIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0
YSBfX2RhdGEgW107Cn0gKl9fZ2NvbnZfdDsKIyA0NSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5o
IiAyIDMKdHlwZWRlZiB1bmlvbgp7CiAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogIHN0cnVj
dAogIHsKICAgIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICAgIHN0cnVjdCBfX2djb252X3N0
ZXBfZGF0YSBfX2RhdGE7CiAgfSBfX2NvbWJpbmVkOwp9IF9HX2ljb252X3Q7Cgp0eXBlZGVmIGlu
dCBfR19pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVm
IGludCBfR19pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBl
ZGVmIHVuc2lnbmVkIGludCBfR191aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9f
SElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRyaWJ1dGVfXyAo
KF9fbW9kZV9fIChfX1NJX18pKSk7CiMgMzEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKIyA1
MSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvdXNyL2djYy1wcmUzLjAvbGliL2djYy1s
aWIvaWE2NC1ocC1saW51eC8zLjAvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMgNDMgIi91c3IvZ2Nj
LXByZTMuMC9saWIvZ2NjLWxpYi9pYTY0LWhwLWxpbnV4LzMuMC9pbmNsdWRlL3N0ZGFyZy5oIiAz
CnR5cGVkZWYgX19idWlsdGluX3ZhX2xpc3QgX19nbnVjX3ZhX2xpc3Q7CiMgNTIgIi91c3IvaW5j
bHVkZS9saWJpby5oIiAyIDMKIyAxNTggIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnN0cnVjdCBf
SU9fanVtcF90OyBzdHJ1Y3QgX0lPX0ZJTEU7CiMgMTY4ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIg
Mwp0eXBlZGVmIHZvaWQgX0lPX2xvY2tfdDsKCgoKCgpzdHJ1Y3QgX0lPX21hcmtlciB7CiAgc3Ry
dWN0IF9JT19tYXJrZXIgKl9uZXh0OwogIHN0cnVjdCBfSU9fRklMRSAqX3NidWY7CgoKCiAgaW50
IF9wb3M7CiMgMTkxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp9OwoKCmVudW0gX19jb2RlY3Z0
X3Jlc3VsdAp7CiAgX19jb2RlY3Z0X29rLAogIF9fY29kZWN2dF9wYXJ0aWFsLAogIF9fY29kZWN2
dF9lcnJvciwKICBfX2NvZGVjdnRfbm9jb252Cn07CiMgMjU5ICIvdXNyL2luY2x1ZGUvbGliaW8u
aCIgMwpzdHJ1Y3QgX0lPX0ZJTEUgewogIGludCBfZmxhZ3M7CgoKCgogIGNoYXIqIF9JT19yZWFk
X3B0cjsKICBjaGFyKiBfSU9fcmVhZF9lbmQ7CiAgY2hhciogX0lPX3JlYWRfYmFzZTsKICBjaGFy
KiBfSU9fd3JpdGVfYmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfcHRyOwogIGNoYXIqIF9JT193cml0
ZV9lbmQ7CiAgY2hhciogX0lPX2J1Zl9iYXNlOwogIGNoYXIqIF9JT19idWZfZW5kOwoKICBjaGFy
ICpfSU9fc2F2ZV9iYXNlOwogIGNoYXIgKl9JT19iYWNrdXBfYmFzZTsKICBjaGFyICpfSU9fc2F2
ZV9lbmQ7CgogIHN0cnVjdCBfSU9fbWFya2VyICpfbWFya2VyczsKCiAgc3RydWN0IF9JT19GSUxF
ICpfY2hhaW47CgogIGludCBfZmlsZW5vOwogIGludCBfYmxrc2l6ZTsKICBfX29mZl90IF9vbGRf
b2Zmc2V0OwoKCgogIHVuc2lnbmVkIHNob3J0IF9jdXJfY29sdW1uOwogIHNpZ25lZCBjaGFyIF92
dGFibGVfb2Zmc2V0OwogIGNoYXIgX3Nob3J0YnVmWzFdOwoKCgogIF9JT19sb2NrX3QgKl9sb2Nr
OwojIDMwMyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKICBfX29mZjY0X3QgX29mZnNldDsKCgoK
CgogIHZvaWQgKl9fcGFkMTsKICB2b2lkICpfX3BhZDI7CgogIGludCBfbW9kZTsKCiAgY2hhciBf
dW51c2VkMlsxNSAqIHNpemVvZiAoaW50KSAtIDIgKiBzaXplb2YgKHZvaWQgKildOwoKfTsKCgoK
CgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsKCmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9f
Ml8xX3N0ZGluXzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3Rkb3V0XzsK
ZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkZXJyXzsKIyAzNDIgIi91c3Iv
aW5jbHVkZS9saWJpby5oIiAzCnR5cGVkZWYgX19zc2l6ZV90IF9faW9fcmVhZF9mbiAodm9pZCAq
X19jb29raWUsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMpOwoKCgoKCgoKdHlwZWRlZiBf
X3NzaXplX3QgX19pb193cml0ZV9mbiAodm9pZCAqX19jb29raWUsIF9fY29uc3QgY2hhciAqX19i
dWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pOwoKCgoKCgoK
dHlwZWRlZiBpbnQgX19pb19zZWVrX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19vZmY2NF90ICpfX3Bv
cywgaW50IF9fdyk7CgoKdHlwZWRlZiBpbnQgX19pb19jbG9zZV9mbiAodm9pZCAqX19jb29raWUp
OwoKCgoKdHlwZWRlZiBfX2lvX3JlYWRfZm4gY29va2llX3JlYWRfZnVuY3Rpb25fdDsKdHlwZWRl
ZiBfX2lvX3dyaXRlX2ZuIGNvb2tpZV93cml0ZV9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fc2Vl
a19mbiBjb29raWVfc2Vla19mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fY2xvc2VfZm4gY29va2ll
X2Nsb3NlX2Z1bmN0aW9uX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QKewogIF9faW9fcmVhZF9mbiAqcmVh
ZDsKICBfX2lvX3dyaXRlX2ZuICp3cml0ZTsKICBfX2lvX3NlZWtfZm4gKnNlZWs7CiAgX19pb19j
bG9zZV9mbiAqY2xvc2U7Cn0gX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdDsKdHlwZWRlZiBfSU9f
Y29va2llX2lvX2Z1bmN0aW9uc190IGNvb2tpZV9pb19mdW5jdGlvbnNfdDsKCnN0cnVjdCBfSU9f
Y29va2llX2ZpbGU7CgoKZXh0ZXJuIHZvaWQgX0lPX2Nvb2tpZV9pbml0IChzdHJ1Y3QgX0lPX2Nv
b2tpZV9maWxlICpfX2NmaWxlLCBpbnQgX19yZWFkX3dyaXRlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZvaWQgKl9fY29va2llLCBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IF9fZm5z
KTsKCgoKCmV4dGVybiAiQyIgewoKCmV4dGVybiBpbnQgX191bmRlcmZsb3cgKF9JT19GSUxFICop
IHRocm93ICgpOwpleHRlcm4gaW50IF9fdWZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRl
cm4gaW50IF9fb3ZlcmZsb3cgKF9JT19GSUxFICosIGludCkgdGhyb3cgKCk7CmV4dGVybiB3aW50
X3QgX193dW5kZXJmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3d1
ZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193b3ZlcmZsb3cgKF9J
T19GSUxFICosIHdpbnRfdCkgdGhyb3cgKCk7CiMgNDI0ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIg
MwpleHRlcm4gaW50IF9JT19nZXRjIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBp
bnQgX0lPX3B1dGMgKGludCBfX2MsIF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGlu
dCBfSU9fZmVvZiAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mZXJy
b3IgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgX0lPX3BlZWtjX2xvY2tl
ZCAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIF9JT19mbG9ja2Zp
bGUgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gdm9pZCBfSU9fZnVubG9ja2ZpbGUgKF9J
T19GSUxFICopIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mdHJ5bG9ja2ZpbGUgKF9JT19GSUxF
ICopIHRocm93ICgpOwojIDQ1NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBf
SU9fdmZzY2FuZiAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19yZXN0cmlj
dCwKICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QsIGludCAqX19yZXN0cmlj
dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRmIChfSU9fRklMRSAqX19yZXN0cmlj
dCwgY29uc3QgY2hhciAqX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251
Y192YV9saXN0KSB0aHJvdyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBfSU9fcGFkbiAoX0lPX0ZJTEUg
KiwgaW50LCBfX3NzaXplX3QpIHRocm93ICgpOwpleHRlcm4gc2l6ZV90IF9JT19zZ2V0biAoX0lP
X0ZJTEUgKiwgdm9pZCAqLCBzaXplX3QpIHRocm93ICgpOwoKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9f
c2Vla29mZiAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQsIGludCkgdGhyb3cgKCk7CmV4dGVy
biBfX29mZjY0X3QgX0lPX3NlZWtwb3MgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50KSB0aHJv
dyAoKTsKCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVhIChfSU9fRklMRSAqKSB0aHJv
dyAoKTsKIyA1MTAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCn0KIyA3NCAiL3Vzci9nY2MtcHJl
My4wL2xpYi9nY2MtbGliL2lhNjQtaHAtbGludXgvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoK
Cgp0eXBlZGVmIF9fZ251Y192YV9saXN0IF9fbm90X3ZhX2xpc3RfXzsKIyA4OCAiL3Vzci9nY2Mt
cHJlMy4wL2xpYi9nY2MtbGliL2lhNjQtaHAtbGludXgvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMwp0
eXBlZGVmIF9HX2Zwb3NfdCBmcG9zX3Q7CgoKCgp0eXBlZGVmIF9HX2Zwb3M2NF90IGZwb3M2NF90
OwojIDEzNyAiL3Vzci9nY2MtcHJlMy4wL2xpYi9nY2MtbGliL2lhNjQtaHAtbGludXgvMy4wL2lu
Y2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMK
IyAxMzggIi91c3IvZ2NjLXByZTMuMC9saWIvZ2NjLWxpYi9pYTY0LWhwLWxpbnV4LzMuMC9pbmNs
dWRlL3N0ZGlvLmgiIDIgMwoKCgpleHRlcm4gRklMRSAqc3RkaW47CmV4dGVybiBGSUxFICpzdGRv
dXQ7CmV4dGVybiBGSUxFICpzdGRlcnI7CiMgMTUyICIvdXNyL2djYy1wcmUzLjAvbGliL2djYy1s
aWIvaWE2NC1ocC1saW51eC8zLjAvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgcmVtb3Zl
IChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIHRocm93ICgpOwoKZXh0ZXJuIGludCByZW5hbWUg
KF9fY29uc3QgY2hhciAqX19vbGQsIF9fY29uc3QgY2hhciAqX19uZXcpIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIEZJTEUgKnRtcGZpbGUgKHZvaWQpIHRocm93ICgpOwojIDE2OCAiL3Vzci9nY2MtcHJl
My4wL2xpYi9nY2MtbGliL2lhNjQtaHAtbGludXgvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRl
cm4gRklMRSAqdG1wZmlsZTY0ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqdG1wbmFt
IChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnRtcG5hbV9yIChjaGFyICpf
X3MpIHRocm93ICgpOwojIDE4OCAiL3Vzci9nY2MtcHJlMy4wL2xpYi9nY2MtbGliL2lhNjQtaHAt
bGludXgvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gY2hhciAqdGVtcG5hbSAoX19jb25z
dCBjaGFyICpfX2RpciwgX19jb25zdCBjaGFyICpfX3BmeCkKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKZXh0ZXJuIGludCBmY2xvc2UgKEZJTEUgKl9fc3Ry
ZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmZsdXNoIChGSUxFICpfX3N0cmVhbSkgdGhyb3cg
KCk7CgoKCmV4dGVybiBpbnQgZmZsdXNoX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cg
KCk7CgoKCgpleHRlcm4gaW50IGZjbG9zZWFsbCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJu
IEZJTEUgKmZvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgdGhyb3cgKCk7
CgpleHRlcm4gRklMRSAqZnJlb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5h
bWUsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2Rl
cywKICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93
ICgpOwojIDIzMiAiL3Vzci9nY2MtcHJlMy4wL2xpYi9nY2MtbGliL2lhNjQtaHAtbGludXgvMy4w
L2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gRklMRSAqZm9wZW42NCAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19tb2RlcykgdGhyb3cgKCk7CmV4dGVybiBGSUxFICpmcmVvcGVuNjQgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAgICAgICAg
ICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gRklMRSAq
ZmRvcGVuIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgoKCgpl
eHRlcm4gRklMRSAqZm9wZW5jb29raWUgKHZvaWQgKl9fcmVzdHJpY3QgX19tYWdpY19jb29raWUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9k
ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBf
X2lvX2Z1bmNzKSB0aHJvdyAoKTsKCgpleHRlcm4gRklMRSAqZm1lbW9wZW4gKHZvaWQgKl9fcywg
c2l6ZV90IF9fbGVuLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93ICgpOwoKCgoKZXh0ZXJu
IEZJTEUgKm9wZW5fbWVtc3RyZWFtIChjaGFyICoqX19yZXN0cmljdCBfX2J1ZmxvYywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19zaXplbG9jKSB0aHJv
dyAoKTsKCgoKCgpleHRlcm4gdm9pZCBzZXRidWYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0s
IGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNldHZidWYg
KEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAg
ICAgICAgICAgICAgICAgaW50IF9fbW9kZXMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKZXh0
ZXJuIHZvaWQgc2V0YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jl
c3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3NpemUpIHRocm93
ICgpOwoKCmV4dGVybiB2b2lkIHNldGxpbmVidWYgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBpbnQgZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhy
b3cgKCk7CgpleHRlcm4gaW50IHByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9y
bWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzcHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0
IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3Jt
YXQsIC4uLikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqX19yZXN0cmlj
dCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAg
ICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKZXh0ZXJuIGludCB2cHJpbnRm
IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJn
KQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCB2c3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBf
X3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAg
ICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNucHJpbnRm
IChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKTsKCmV4dGVy
biBpbnQgdnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAog
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBf
X2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3Jt
YXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKCgoKCgpleHRlcm4gaW50IHZhc3ByaW50ZiAoY2hh
ciAqKl9fcmVzdHJpY3QgX19wdHIsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2YsCiAgICAg
ICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKZXh0ZXJuIGludCBf
X2FzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwKICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKZXh0ZXJuIGludCBh
c3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsCiAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwoKCmV4dGVybiBpbnQgdmRw
cmludGYgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsCiAgICAgICAg
ICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpOwpleHRlcm4gaW50IGRwcmlu
dGYgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsK
CgoKCmV4dGVybiBpbnQgZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAg
ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93
ICgpOwoKZXh0ZXJuIGludCBzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0
LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m
b3JtYXQsIC4uLikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdmZzY2FuZiAoRklMRSAqX19yZXN0
cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAg
ICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpOwoKCmV4dGVybiBpbnQgdnNjYW5mIChf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDEsIDAp
KSk7CgoKZXh0ZXJuIGludCB2c3NjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAog
ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19n
bnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0
X18gKF9fc2NhbmZfXywgMiwgMCkpKTsKCgoKCmV4dGVybiBpbnQgZmdldGMgKEZJTEUgKl9fc3Ry
ZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRjIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBnZXRjaGFyICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQg
Z2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGdldGNo
YXJfdW5sb2NrZWQgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmZ2V0Y191bmxvY2tl
ZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHV0YyAoaW50IF9f
YywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IHB1dGMgKGludCBfX2MsIEZJ
TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB1dGNoYXIgKGludCBfX2MpIHRo
cm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBmcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAq
X19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdXRjX3VubG9ja2VkIChpbnQgX19j
LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZCAo
aW50IF9fYykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXR3IChGSUxFICpfX3N0cmVhbSkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdXR3IChpbnQgX193LCBGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZmdldHMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQg
X19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4g
Y2hhciAqZmdldHNfdW5sb2NrZWQgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93
ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9fcykgdGhyb3cgKCk7CiMgNDM2ICIv
dXNyL2djYy1wcmUzLjAvbGliL2djYy1saWIvaWE2NC1ocC1saW51eC8zLjAvaW5jbHVkZS9zdGRp
by5oIiAzCmV4dGVybiBfX3NzaXplX3QgX19nZXRkZWxpbSAoY2hhciAqKl9fcmVzdHJpY3QgX19s
aW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0
IF9fbiwgaW50IF9fZGVsaW1pdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklM
RSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBfX3NzaXplX3QgZ2V0ZGVs
aW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQgX19kZWxpbWl0ZXIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIF9fc3NpemVfdCBnZXRsaW5lIChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7
CgoKCgpleHRlcm4gaW50IGZwdXRzIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBGSUxF
ICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZwdXRz
X3VubG9ja2VkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGludCBwdXRzIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdW5n
ZXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3Qg
ZnJlYWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgp
OwoKZXh0ZXJuIHNpemVfdCBmd3JpdGUgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwg
c2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9f
cmVzdHJpY3QgX19zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZF91bmxvY2tlZCAo
dm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cg
KCk7CmV4dGVybiBzaXplX3QgZndyaXRlX3VubG9ja2VkIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJp
Y3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVy
biBpbnQgZnNlZWsgKEZJTEUgKl9fc3RyZWFtLCBsb25nIGludCBfX29mZiwgaW50IF9fd2hlbmNl
KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGludCBmdGVsbCAoRklMRSAqX19zdHJlYW0pIHRocm93
ICgpOwoKZXh0ZXJuIHZvaWQgcmV3aW5kIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CiMgNDk5
ICIvdXNyL2djYy1wcmUzLjAvbGliL2djYy1saWIvaWE2NC1ocC1saW51eC8zLjAvaW5jbHVkZS9z
dGRpby5oIiAzCmV4dGVybiBpbnQgZnNlZWtvIChGSUxFICpfX3N0cmVhbSwgX19vZmZfdCBfX29m
ZiwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKCmV4dGVybiBfX29mZl90IGZ0ZWxsbyAoRklMRSAq
X19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZnZXRwb3MgKEZJTEUgKl9fcmVzdHJp
Y3QgX19zdHJlYW0sIGZwb3NfdCAqX19yZXN0cmljdCBfX3BvcykKICAgICB0aHJvdyAoKTsKCmV4
dGVybiBpbnQgZnNldHBvcyAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvc190ICpfX3Bvcykg
dGhyb3cgKCk7CiMgNTMzICIvdXNyL2djYy1wcmUzLjAvbGliL2djYy1saWIvaWE2NC1ocC1saW51
eC8zLjAvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZnNlZWtvNjQgKEZJTEUgKl9fc3Ry
ZWFtLCBfX29mZjY0X3QgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CmV4dGVybiBfX29m
ZjY0X3QgZnRlbGxvNjQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZ2V0
cG9zNjQgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3M2NF90ICpfX3Jlc3RyaWN0IF9f
cG9zKQogICAgIHRocm93ICgpOwpleHRlcm4gaW50IGZzZXRwb3M2NCAoRklMRSAqX19zdHJlYW0s
IF9fY29uc3QgZnBvczY0X3QgKl9fcG9zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJl
cnIgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmVvZiAoRklMRSAqX19z
dHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZXJyb3IgKEZJTEUgKl9fc3RyZWFtKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnJfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cg
KCk7CmV4dGVybiBpbnQgZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7
CgoKCgpleHRlcm4gdm9pZCBwZXJyb3IgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBpbnQgc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3Qgc3lzX2Vy
cmxpc3RbXTsKCgpleHRlcm4gaW50IF9zeXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19j
b25zdCBfc3lzX2Vycmxpc3RbXTsKCgoKCgpleHRlcm4gaW50IGZpbGVubyAoRklMRSAqX19zdHJl
YW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmaWxlbm9fdW5sb2NrZWQgKEZJTEUgKl9fc3Ry
ZWFtKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIEZJTEUgKnBvcGVuIChfX2NvbnN0IGNoYXIgKl9f
Y29tbWFuZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHBj
bG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdGVybWlk
IChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdXNlcmlkIChjaGFyICpf
X3MpIHRocm93ICgpOwoKCgoKc3RydWN0IG9ic3RhY2s7CgoKZXh0ZXJuIGludCBvYnN0YWNrX3By
aW50ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNrLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhy
b3cgKCk7CmV4dGVybiBpbnQgb2JzdGFja192cHJpbnRmIChzdHJ1Y3Qgb2JzdGFjayAqX19yZXN0
cmljdCBfX29ic3RhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNf
dmFfbGlzdCBfX2FyZ3MpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIHZvaWQgZmxvY2tmaWxlIChG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZnRyeWxvY2tmaWxlIChGSUxF
ICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgZnVubG9ja2ZpbGUgKEZJTEUgKl9f
c3RyZWFtKSB0aHJvdyAoKTsKIyA2NDMgIi91c3IvZ2NjLXByZTMuMC9saWIvZ2NjLWxpYi9pYTY0
LWhwLWxpbnV4LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMKfQojIDI5ICIuLi8uLi9kaXN0L2luY2x1
ZGUvbnNUcmFjZVJlZmNudC5oIiAyCgpjbGFzcyBuc0lTdXBwb3J0czsKIyAxMzMgIi4uLy4uL2Rp
c3QvaW5jbHVkZS9uc1RyYWNlUmVmY250LmgiCnN0cnVjdCBuc1RyYWNlUmVmY250U3RhdHMgewog
IG5zcmVmY250IG1BZGRSZWZzOwogIG5zcmVmY250IG1SZWxlYXNlczsKICBuc3JlZmNudCBtQ3Jl
YXRlczsKICBuc3JlZmNudCBtRGVzdHJveXM7CiAgZG91YmxlIG1SZWZzT3V0c3RhbmRpbmdUb3Rh
bDsKICBkb3VibGUgbVJlZnNPdXRzdGFuZGluZ1NxdWFyZWQ7CiAgZG91YmxlIG1PYmpzT3V0c3Rh
bmRpbmdUb3RhbDsKICBkb3VibGUgbU9ianNPdXRzdGFuZGluZ1NxdWFyZWQ7Cn07CiMgMTUyICIu
Li8uLi9kaXN0L2luY2x1ZGUvbnNUcmFjZVJlZmNudC5oIgp0eXBlZGVmIFBSQm9vbCAoICpuc1Ry
YWNlUmVmY250U3RhdEZ1bmMpCiAgKGNvbnN0IGNoYXIqIGFUeXBlTmFtZSwKICAgUFJVaW50MzIg
YUluc3RhbmNlU2l6ZSwKICAgbnNUcmFjZVJlZmNudFN0YXRzKiBhQ3VycmVudFN0YXRzLAogICBu
c1RyYWNlUmVmY250U3RhdHMqIGFQcmV2U3RhdHMsCiAgIHZvaWQgKmFDbG9zdXJlKTsKCgoKCgpj
bGFzcyBuc1RyYWNlUmVmY250IHsKcHVibGljOgogIHN0YXRpYyB2b2lkIFN0YXJ0dXAoKTsKCiAg
c3RhdGljIHZvaWQgU2h1dGRvd24oKTsKCiAgc3RhdGljIHZvaWQgTG9nQWRkUmVmKHZvaWQqIGFQ
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc3JlZmNudCBhTmV3UmVmQ250LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYVR5cGVOYW1lLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYUluc3RhbmNlU2l6ZSk7CgogIHN0
YXRpYyB2b2lkIExvZ1JlbGVhc2Uodm9pZCogYVB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc3JlZmNudCBhTmV3UmVmQ250LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIGFUeXBlTmFtZSk7CgogIHN0YXRpYyB2b2lkIExvZ05ld1hQQ09NKHZv
aWQqIGFQdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFU
eXBlTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYUluc3Rh
bmNlU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYUZp
bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhTGluZSk7CgogIHN0YXRp
YyB2b2lkIExvZ0RlbGV0ZVhQQ09NKHZvaWQqIGFQdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFGaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgYUxpbmUpOwoKICBzdGF0aWMgbnNyZWZjbnQgTG9nQWRkUmVmQ2FsbCh2
b2lkKiBhUHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc3JlZmNu
dCBhTmV3UmVmY250LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiBhRmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGFMaW5lKTsKCiAgc3RhdGljIG5zcmVmY250IExvZ1JlbGVhc2VDYWxsKHZvaWQqIGFQdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc3JlZmNudCBhTmV3UmVmY250
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYUZp
bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYUxpbmUpOwoK
ICBzdGF0aWMgdm9pZCBMb2dDdG9yKHZvaWQqIGFQdHIsIGNvbnN0IGNoYXIqIGFUeXBlTmFtZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhSW5zdGFuY2VTaXplKTsKCiAg
c3RhdGljIHZvaWQgTG9nRHRvcih2b2lkKiBhUHRyLCBjb25zdCBjaGFyKiBhVHlwZU5hbWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYUluc3RhbmNlU2l6ZSk7CgogIHN0
YXRpYyB2b2lkIExvZ0FkZENPTVB0cih2b2lkICphQ09NUHRyLCBuc0lTdXBwb3J0cyAqYU9iamVj
dCk7CgogIHN0YXRpYyB2b2lkIExvZ1JlbGVhc2VDT01QdHIodm9pZCAqYUNPTVB0ciwgbnNJU3Vw
cG9ydHMgKmFPYmplY3QpOwoKICBlbnVtIFN0YXRpc3RpY3NUeXBlIHsKICAgIEFMTF9TVEFUUywK
ICAgIE5FV19TVEFUUwogIH07CgogIHN0YXRpYyBuc3Jlc3VsdCBEdW1wU3RhdGlzdGljcyhTdGF0
aXN0aWNzVHlwZSB0eXBlID0gQUxMX1NUQVRTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRklMRSogb3V0ID0gMCk7CgogIHN0YXRpYyB2b2lkIFJlc2V0U3RhdGlzdGlj
cyh2b2lkKTsKCiAgc3RhdGljIHZvaWQgR2F0aGVyU3RhdGlzdGljcyhuc1RyYWNlUmVmY250U3Rh
dEZ1bmMgYUZ1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCog
YUNsb3N1cmUpOwoKICBzdGF0aWMgdm9pZCBMb2FkTGlicmFyeVN5bWJvbHMoY29uc3QgY2hhciog
YUxpYnJhcnlOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p
ZCogYUxpYnJheUhhbmRsZSk7CgogIHN0YXRpYyB2b2lkIERlbWFuZ2xlU3ltYm9sKGNvbnN0IGNo
YXIgKiBhU3ltYm9sLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICog
YUJ1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFCdWZMZW4p
OwoKICBzdGF0aWMgdm9pZCBXYWxrVGhlU3RhY2soRklMRSogYVN0cmVhbSk7CgogIHN0YXRpYyB2
b2lkIFNldFByZWZTZXJ2aWNlQXZhaWxhYmlsaXR5KFBSQm9vbCBhdmFpbCk7CgoKCgoKCiAgc3Rh
dGljIHZvaWQgU2V0QWN0aXZpdHlJc0xlZ2FsKFBSQm9vbCBhTGVnYWwpOwp9OwoKCgoKZXh0ZXJu
ICJDIiB2b2lkCk5TX01lYW5BbmRTdGREZXYoZG91YmxlIG4sIGRvdWJsZSBzdW1PZlZhbHVlcywg
ZG91YmxlIHN1bU9mU3F1YXJlZFZhbHVlcywKICAgICAgICAgICAgICAgICBkb3VibGUgKm1lYW5S
ZXN1bHQsIGRvdWJsZSAqc3RkRGV2UmVzdWx0KTsKIyA5MSAiLi4vLi4vZGlzdC9pbmNsdWRlL25z
SVN1cHBvcnRzVXRpbHMuaCIgMgoKCgoKCgoKY2xhc3MgbnNJU3VwcG9ydHMgewpwdWJsaWM6CiMg
MTE1ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNVdGlscy5oIgogIHZpcnR1YWwgbnNy
ZXN1bHQgUXVlcnlJbnRlcmZhY2UoY29uc3QgbnNJSUQmIGFJSUQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2b2lkKiogYUluc3RhbmNlUHRyKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNy
ZWZjbnQgQWRkUmVmKHZvaWQpID0gMDsKIyAxMzMgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBw
b3J0c1V0aWxzLmgiCiAgdmlydHVhbCBuc3JlZmNudCBSZWxlYXNlKHZvaWQpID0gMDsKCgp9Owoj
IDE2MSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzVXRpbHMuaCIKZXh0ZXJuICJDIiB2
b2lkKiBOU19DdXJyZW50VGhyZWFkKHZvaWQpOwpleHRlcm4gIkMiIHZvaWQgTlNfQ2hlY2tUaHJl
YWRTYWZlKHZvaWQqIG93bmluZ1RocmVhZCwgY29uc3QgY2hhciogbXNnKTsKIyAzMTEgIi4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0c1V0aWxzLmgiCmlubGluZQpuc3JlZmNudApOU19EZWJ1
Z0dldFJlZkNvdW50KCBuc0lTdXBwb3J0cyogb2JqICkKCgogIHsKICAgIG5zcmVmY250IHJlZl9j
b3VudCA9IDA7CgogICAgaWYgKCBvYmogKQogICAgICB7CgoKICAgICAgICBvYmotPkFkZFJlZigp
OwogICAgICAgIHJlZl9jb3VudCA9IG9iai0+UmVsZWFzZSgpOwoKCgoKICAgICAgICBpZiAoIShy
ZWZfY291bnQpKSBuc0RlYnVnOjpBc3NlcnRpb24oIk9vcHMhIENhbGxpbmcgfE5TX0RlYnVnR2V0
UmVmQ291bnQoKXwgcHJvYmFibHkganVzdCBkZXN0cm95ZWQgdGhpcyBvYmplY3QuIiwgInJlZl9j
b3VudCIsICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNVdGlscy5oIiwgMzI5KTsKICAg
ICAgfQoKICAgICByZXR1cm4gcmVmX2NvdW50OwogIH0KIyAxMTE3ICIuLi8uLi9kaXN0L2luY2x1
ZGUvbnNJU3VwcG9ydHNVdGlscy5oIgpleHRlcm4gIkMrKyIgewoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
VD4KaW5saW5lCm5zcmVmY250Cm5zX2lmX2FkZHJlZiggVCBleHByICkKCgoKICB7CiAgICByZXR1
cm4gZXhwciA/IGV4cHItPkFkZFJlZigpIDogMDsKICB9CgogfQojIDEyMzIgIi4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lTdXBwb3J0c1V0aWxzLmgiCmV4dGVybiAiQysrIiB7CgoKCmNsYXNzIG5zSVN1
cHBvcnRzOwoKdGVtcGxhdGUgPGNsYXNzIFQ+CnN0cnVjdCBuc0NPTVR5cGVJbmZvCiAgewogICAg
c3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7IHJldHVybiBUOjpHZXRJSUQoKTsgfQogIH07
Cgp0ZW1wbGF0ZSA8PgpzdHJ1Y3QgbnNDT01UeXBlSW5mbzxuc0lTdXBwb3J0cz4KICB7CiAgICBz
dGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHsKICAgICAgICBzdGF0aWMgY29uc3QgbnNJSUQg
aWlkID0geyAweDAwMDAwMDAwLCAweDAwMDAsIDB4MDAwMCwgezB4YzAsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDZ9IH07IHJldHVybiBpaWQ7CiAgICB9CiAgfTsKCgoK
CnRlbXBsYXRlIDxjbGFzcyBEZXN0aW5hdGlvblR5cGU+CmlubGluZQpuc3Jlc3VsdApDYWxsUXVl
cnlJbnRlcmZhY2UoIG5zSVN1cHBvcnRzKiBhU291cmNlLCBEZXN0aW5hdGlvblR5cGUqKiBhRGVz
dGluYXRpb24gKQogIHsKICAgIGlmICghKGFTb3VyY2UpKSBuc0RlYnVnOjpQcmVDb25kaXRpb24o
Im51bGwgcGFyYW1ldGVyIiwgImFTb3VyY2UiLCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBv
cnRzVXRpbHMuaCIsIDEyNjApOwogICAgaWYgKCEoYURlc3RpbmF0aW9uKSkgbnNEZWJ1Zzo6UHJl
Q29uZGl0aW9uKCJudWxsIHBhcmFtZXRlciIsICJhRGVzdGluYXRpb24iLCAiLi4vLi4vZGlzdC9p
bmNsdWRlL25zSVN1cHBvcnRzVXRpbHMuaCIsIDEyNjEpOwoKICAgIHJldHVybiBhU291cmNlLT5R
dWVyeUludGVyZmFjZShuc0NPTVR5cGVJbmZvPERlc3RpbmF0aW9uVHlwZT46OkdldElJRCgpLCAo
dm9pZCoqKWFEZXN0aW5hdGlvbik7CiAgfQoKfQoKCgoKCgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lDbGFzc0luZm8uaCIgMQojIDE0ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ2xhc3NJbmZv
LmgiCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByb2dyYW1taW5nTGFuZ3VhZ2UuaCIgMQoj
IDI4ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJvZ3JhbW1pbmdMYW5ndWFnZS5oIgpjbGFzcyBu
c0lQcm9ncmFtbWluZ0xhbmd1YWdlIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAg
c3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsw
eGVhNjA0ZTkwLCAweDQwYmEsIDB4MTFkNSwgeyAweDkwLCAweGJiLCAweDAwLCAweDEwLCAweGE0
LCAweGU3LCAweDNkLCAweDlhIH19OyByZXR1cm4gaWlkO30KCgoKCiAgZW51bSB7IFVOS05PV04g
PSAwVSB9OwoKICBlbnVtIHsgQ1BMVVNQTFVTID0gMVUgfTsKCiAgZW51bSB7IEpBVkFTQ1JJUFQg
PSAyVSB9OwoKICBlbnVtIHsgUFlUSE9OID0gM1UgfTsKCiAgZW51bSB7IFBFUkwgPSA0VSB9OwoK
ICBlbnVtIHsgSkFWQSA9IDVVIH07CgogIGVudW0geyBaWDgxX0JBU0lDID0gNlUgfTsKCiAgZW51
bSB7IEpBVkFTQ1JJUFQyID0gN1UgfTsKCn07CiMgMTUgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lD
bGFzc0luZm8uaCIgMgojIDI5ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ2xhc3NJbmZvLmgiCmNs
YXNzIG5zSUNsYXNzSW5mbyA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRp
YyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg5ODZj
MTFkMCwgMHhmMzQwLCAweDExZDQsIHsgMHg5MCwgMHg3NSwgMHgwMCwgMHgxMCwgMHhhNCwgMHhl
NywgMHgzZCwgMHg5YSB9fTsgcmV0dXJuIGlpZDt9CiMgNDMgIi4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lDbGFzc0luZm8uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEludGVyZmFjZXMoUFJVaW50MzIg
KmNvdW50LCBuc0lJRCAqICoqYXJyYXkpID0gMDsKIyA1OCAiLi4vLi4vZGlzdC9pbmNsdWRlL25z
SUNsYXNzSW5mby5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SGVscGVyRm9yTGFuZ3VhZ2UoUFJV
aW50MzIgbGFuZ3VhZ2UsIG5zSVN1cHBvcnRzICoqX3JldHZhbCkgPSAwOwoKCgoKCgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0Q29udHJhY3RJRChjaGFyICogKmFDb250cmFjdElEKSA9IDA7CgoKCgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IEdldENsYXNzRGVzY3JpcHRpb24oY2hhciAqICphQ2xhc3NEZXNj
cmlwdGlvbikgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2xhc3NJRChuc0NJRCAq
ICphQ2xhc3NJRCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJbXBsZW1lbnRhdGlv
bkxhbmd1YWdlKFBSVWludDMyICphSW1wbGVtZW50YXRpb25MYW5ndWFnZSkgPSAwOwoKCgoKICBl
bnVtIHsgU0lOR0xFVE9OID0gMVUgfTsKCiAgZW51bSB7IFRIUkVBRFNBRkUgPSAyVSB9OwoKICBl
bnVtIHsgTUFJTl9USFJFQURfT05MWSA9IDRVIH07CgogIGVudW0geyBET01fT0JKRUNUID0gOFUg
fTsKCiAgZW51bSB7IFBMVUdJTl9PQkpFQ1QgPSAxNlUgfTsKCiAgZW51bSB7IFJFU0VSVkVEID0g
MjE0NzQ4MzY0OFUgfTsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RmxhZ3MoUFJVaW50MzIgKmFG
bGFncykgPSAwOwoKfTsKIyAxMjc0ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNVdGls
cy5oIiAyCiMgMTE4ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMgojIDExICIu
Li8uLi9kaXN0L2luY2x1ZGUvbnNJRmFjdG9yeS5oIiAyCiMgMjUgIi4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lGYWN0b3J5LmgiCmNsYXNzIG5zSUZhY3RvcnkgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewog
cHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJ
SUQgaWlkID0gezB4MDAwMDAwMDEsIDB4MDAwMCwgMHgwMDAwLCB7IDB4YzAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBDcmVhdGVJbnN0YW5jZShuc0lTdXBwb3J0cyAqYU91dGVyLCBjb25zdCBuc0lJ
RCAmIGlpZCwgdm9pZCAqICpyZXN1bHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgTG9ja0Zh
Y3RvcnkoUFJCb29sIGxvY2spID0gMDsKCn07CiMgMjcgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lH
ZW5lcmljRmFjdG9yeS5oIiAyCiMgMzkgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lHZW5lcmljRmFj
dG9yeS5oIgpzdHJ1Y3QgbnNNb2R1bGVDb21wb25lbnRJbmZvOwoKCgoKCmNsYXNzIG5zSUdlbmVy
aWNGYWN0b3J5IDogcHVibGljIG5zSUZhY3RvcnkgewpwdWJsaWM6CiAgICBzdGF0aWMgY29uc3Qg
bnNJSUQmIEdldElJRCgpIHsgc3RhdGljIG5zSUlEIGlpZCA9IHsgMHgzYmM5N2YwMCwgMHhjY2Rm
LCAweDExZDIsIHsgMHhiYSwgMHhiOCwgMHhiNSwgMHg0OCwgMHg2NSwgMHg0NCwgMHg2MSwgMHhm
YyB9IH07IHJldHVybiBpaWQ7IH0KCiAgICB2aXJ0dWFsIG5zcmVzdWx0IFNldENvbXBvbmVudElu
Zm8obnNNb2R1bGVDb21wb25lbnRJbmZvICppbmZvKSA9IDA7CiAgICB2aXJ0dWFsIG5zcmVzdWx0
IEdldENvbXBvbmVudEluZm8obnNNb2R1bGVDb21wb25lbnRJbmZvICoqaW5mb3ApID0gMDsKfTsK
CmV4dGVybiBuc3Jlc3VsdApOU19OZXdHZW5lcmljRmFjdG9yeShuc0lHZW5lcmljRmFjdG9yeSAq
KnJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgbnNNb2R1bGVDb21wb25lbnRJbmZvICppbmZv
KTsKCgoKCgoKCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSU1vZHVsZS5oIiAxCiMgMTggIi4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lNb2R1bGUuaCIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
RmlsZS5oIiAxCiMgMTcgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGaWxlLmgiCmNsYXNzIG5zSVNp
bXBsZUVudW1lcmF0b3I7CiMgMjcgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGaWxlLmgiCmNsYXNz
IG5zSUZpbGUgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3Qg
bnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YzhjMGEwODAsIDB4
MDg2OCwgMHgxMWQzLCB7IDB4OTEsIDB4NWYsIDB4ZDksIDB4ZDgsIDB4ODksIDB4ZDQsIDB4OGUs
IDB4M2MgfX07IHJldHVybiBpaWQ7fQoKCgoKCgoKICBlbnVtIHsgTk9STUFMX0ZJTEVfVFlQRSA9
IDBVIH07CgogIGVudW0geyBESVJFQ1RPUllfVFlQRSA9IDFVIH07CiMgNTMgIi4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lGaWxlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBBcHBlbmQoY29uc3QgY2hhciAq
bm9kZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBBcHBlbmRVbmljb2RlKGNvbnN0IFBSVW5p
Y2hhciAqbm9kZSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBOb3JtYWxpemUodm9pZCkg
PSAwOwojIDg1ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRmlsZS5oIgogIHZpcnR1YWwgbnNyZXN1
bHQgQ3JlYXRlKFBSVWludDMyIHR5cGUsIFBSVWludDMyIHBlcm1pc3Npb25zKSA9IDA7CgoKCgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IEdldExlYWZOYW1lKGNoYXIgKiAqYUxlYWZOYW1lKSA9IDA7CiAg
dmlydHVhbCBuc3Jlc3VsdCBTZXRMZWFmTmFtZShjb25zdCBjaGFyICogYUxlYWZOYW1lKSA9IDA7
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFVuaWNvZGVMZWFmTmFtZShQUlVuaWNoYXIgKiAqYVVu
aWNvZGVMZWFmTmFtZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VW5pY29kZUxlYWZOYW1l
KGNvbnN0IFBSVW5pY2hhciAqIGFVbmljb2RlTGVhZk5hbWUpID0gMDsKIyAxMjIgIi4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lGaWxlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBDb3B5VG8obnNJRmlsZSAq
bmV3UGFyZW50RGlyLCBjb25zdCBjaGFyICpuZXdOYW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz
dWx0IENvcHlUb1VuaWNvZGUobnNJRmlsZSAqbmV3UGFyZW50RGlyLCBjb25zdCBQUlVuaWNoYXIg
Km5ld05hbWUpID0gMDsKIyAxMzYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGaWxlLmgiCiAgdmly
dHVhbCBuc3Jlc3VsdCBDb3B5VG9Gb2xsb3dpbmdMaW5rcyhuc0lGaWxlICpuZXdQYXJlbnREaXIs
IGNvbnN0IGNoYXIgKm5ld05hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ29weVRvRm9s
bG93aW5nTGlua3NVbmljb2RlKG5zSUZpbGUgKm5ld1BhcmVudERpciwgY29uc3QgUFJVbmljaGFy
ICpuZXdOYW1lKSA9IDA7CiMgMTY3ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRmlsZS5oIgogIHZp
cnR1YWwgbnNyZXN1bHQgTW92ZVRvKG5zSUZpbGUgKm5ld1BhcmVudERpciwgY29uc3QgY2hhciAq
bmV3TmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBNb3ZlVG9Vbmljb2RlKG5zSUZpbGUg
Km5ld1BhcmVudERpciwgY29uc3QgUFJVbmljaGFyICpuZXdOYW1lKSA9IDA7CgoKCgoKCgogIHZp
cnR1YWwgbnNyZXN1bHQgU3Bhd24oY29uc3QgY2hhciAqKmFyZ3MsIFBSVWludDMyIGNvdW50KSA9
IDA7CiMgMTg3ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRmlsZS5oIgogIHZpcnR1YWwgbnNyZXN1
bHQgRGVsZXRlKFBSQm9vbCByZWN1cnNpdmUpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0UGVybWlzc2lvbnMoUFJVaW50MzIgKmFQZXJtaXNzaW9ucykgPSAwOwogIHZpcnR1YWwgbnNy
ZXN1bHQgU2V0UGVybWlzc2lvbnMoUFJVaW50MzIgYVBlcm1pc3Npb25zKSA9IDA7CgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldFBlcm1pc3Npb25zT2ZMaW5rKFBSVWludDMyICphUGVybWlzc2lvbnNP
ZkxpbmspID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFBlcm1pc3Npb25zT2ZMaW5rKFBSVWlu
dDMyIGFQZXJtaXNzaW9uc09mTGluaykgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl
dExhc3RNb2RpZmljYXRpb25EYXRlKFBSSW50NjQgKmFMYXN0TW9kaWZpY2F0aW9uRGF0ZSkgPSAw
OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TGFzdE1vZGlmaWNhdGlvbkRhdGUoUFJJbnQ2NCBhTGFz
dE1vZGlmaWNhdGlvbkRhdGUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGFzdE1vZGlm
aWNhdGlvbkRhdGVPZkxpbmsoUFJJbnQ2NCAqYUxhc3RNb2RpZmljYXRpb25EYXRlT2ZMaW5rKSA9
IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRMYXN0TW9kaWZpY2F0aW9uRGF0ZU9mTGluayhQUklu
dDY0IGFMYXN0TW9kaWZpY2F0aW9uRGF0ZU9mTGluaykgPSAwOwojIDIyMCAiLi4vLi4vZGlzdC9p
bmNsdWRlL25zSUZpbGUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZpbGVTaXplKFBSSW50NjQg
KmFGaWxlU2l6ZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RmlsZVNpemUoUFJJbnQ2NCBh
RmlsZVNpemUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RmlsZVNpemVPZkxpbmsoUFJJ
bnQ2NCAqYUZpbGVTaXplT2ZMaW5rKSA9IDA7CiMgMjQ4ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
RmlsZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VGFyZ2V0KGNoYXIgKiAqYVRhcmdldCkgPSAw
OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRVbmljb2RlVGFyZ2V0KFBSVW5pY2hhciAqICphVW5p
Y29kZVRhcmdldCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXRoKGNoYXIgKiAqYVBh
dGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VW5pY29kZVBhdGgoUFJVbmljaGFyICog
KmFVbmljb2RlUGF0aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFeGlzdHMoUFJCb29sICpf
cmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzV3JpdGFibGUoUFJCb29sICpfcmV0
dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzUmVhZGFibGUoUFJCb29sICpfcmV0dmFs
KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzRXhlY3V0YWJsZShQUkJvb2wgKl9yZXR2YWwp
ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNIaWRkZW4oUFJCb29sICpfcmV0dmFsKSA9IDA7
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzRGlyZWN0b3J5KFBSQm9vbCAqX3JldHZhbCkgPSAwOwoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBJc0ZpbGUoUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0
dWFsIG5zcmVzdWx0IElzU3ltbGluayhQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgoKCgogIHZpcnR1
YWwgbnNyZXN1bHQgSXNTcGVjaWFsKFBSQm9vbCAqX3JldHZhbCkgPSAwOwojIDMxNSAiLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSUZpbGUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZVVuaXF1ZShj
b25zdCBjaGFyICpzdWdnZXN0ZWROYW1lLCBQUlVpbnQzMiB0eXBlLCBQUlVpbnQzMiBwZXJtaXNz
aW9ucykgPSAwOwojIDMyOSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZpbGUuaCIKICB2aXJ0dWFs
IG5zcmVzdWx0IENsb25lKG5zSUZpbGUgKipfcmV0dmFsKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5z
cmVzdWx0IEVxdWFscyhuc0lGaWxlICppbkZpbGUsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCgoK
CgogIHZpcnR1YWwgbnNyZXN1bHQgQ29udGFpbnMobnNJRmlsZSAqaW5GaWxlLCBQUkJvb2wgcmVj
dXIsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXJl
bnQobnNJRmlsZSAqICphUGFyZW50KSA9IDA7CiMgMzU4ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
RmlsZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGlyZWN0b3J5RW50cmllcyhuc0lTaW1wbGVF
bnVtZXJhdG9yICogKmFEaXJlY3RvcnlFbnRyaWVzKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRVUkwoY2hhciAqICphVVJMKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRVUkwo
Y29uc3QgY2hhciAqIGFVUkwpID0gMDsKCn07CiMgODMxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
RmlsZS5oIgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZXJ2aWNlTWFuYWdlci5oIiAxCiMg
MjcgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZXJ2aWNlTWFuYWdlci5oIgojIDEgIi4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiIDEKIyAxOCAiLi4vLi4vZGlzdC9pbmNs
dWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRW51
bWVyYXRvci5oIiAxCiMgMzUgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lFbnVtZXJhdG9yLmgiCmNs
YXNzIG5zSVNpbXBsZUVudW1lcmF0b3IgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoK
ICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0g
ezB4ZDE4OTkyNDAsIDB4ZjlkMiwgMHgxMWQyLCB7IDB4YmQsIDB4ZDYsIDB4MDAsIDB4MDAsIDB4
NjQsIDB4NjUsIDB4NzMsIDB4NzQgfX07IHJldHVybiBpaWQ7fQojIDUzICIuLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJRW51bWVyYXRvci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSGFzTW9yZUVsZW1lbnRz
KFBSQm9vbCAqX3JldHZhbCkgPSAwOwojIDcwICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRW51bWVy
YXRvci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmV4dChuc0lTdXBwb3J0cyAqKl9yZXR2YWwp
ID0gMDsKCn07CiMgMTQxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRW51bWVyYXRvci5oIgpjbGFz
cyBuc0lFbnVtZXJhdG9yIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGlj
IGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGFkMzg1
Mjg2LCAweGNiYzQsIDB4MTFkMiwgeyAweDhjLCAweGNhLCAweDAwLCAweDYwLCAweGIwLCAweGZj
LCAweDE0LCAweGEzIH19OyByZXR1cm4gaWlkO30KCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGaXJz
dCh2b2lkKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgTmV4dCh2b2lkKSA9IDA7CgoKCgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IEN1cnJlbnRJdGVtKG5zSVN1cHBvcnRzICoqX3JldHZhbCkgPSAw
OwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc0RvbmUodm9pZCkgPSAwOwoKfTsKIyAyNTUgIi4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lFbnVtZXJhdG9yLmgiCmNsYXNzIG5zSUJpZGlyZWN0aW9uYWxF
bnVtZXJhdG9yIDogcHVibGljIG5zSUVudW1lcmF0b3IgewogcHVibGljOgoKICBzdGF0aWMgY29u
c3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4NzVmMTU4YTAs
IDB4Y2FkZCwgMHgxMWQyLCB7IDB4OGMsIDB4Y2EsIDB4MDAsIDB4NjAsIDB4YjAsIDB4ZmMsIDB4
MTQsIDB4YTMgfX07IHJldHVybiBpaWQ7fQoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IExhc3Qodm9p
ZCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFByZXYodm9pZCkgPSAwOwoKfTsKIyAzMzEg
Ii4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lFbnVtZXJhdG9yLmgiCmV4dGVybiAiQyIgbnNyZXN1bHQK
TlNfTmV3RW1wdHlFbnVtZXJhdG9yKG5zSVNpbXBsZUVudW1lcmF0b3IqKiBhUmVzdWx0KTsKCgoK
CmV4dGVybiAiQyIgbnNyZXN1bHQKTlNfTmV3Q29uam9pbmluZ0VudW1lcmF0b3IobnNJRW51bWVy
YXRvciogZmlyc3QsIG5zSUVudW1lcmF0b3IqIHNlY29uZCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNJQmlkaXJlY3Rpb25hbEVudW1lcmF0b3IqICphSW5zdGFuY2VQdHJSZXN1bHQpOwoK
CgpleHRlcm4gIkMiIG5zcmVzdWx0Ck5TX05ld1VuaW9uRW51bWVyYXRvcihuc0lFbnVtZXJhdG9y
KiBmaXJzdCwgbnNJRW51bWVyYXRvciogc2Vjb25kLAogICAgICAgICAgICAgICAgICAgICAgbnNJ
RW51bWVyYXRvciogKmFJbnN0YW5jZVB0clJlc3VsdCk7CgoKCmV4dGVybiAiQyIgbnNyZXN1bHQK
TlNfTmV3SW50ZXJzZWN0aW9uRW51bWVyYXRvcihuc0lFbnVtZXJhdG9yKiBmaXJzdCwgbnNJRW51
bWVyYXRvciogc2Vjb25kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUVudW1lcmF0
b3IqICphSW5zdGFuY2VQdHJSZXN1bHQpOwojIDE5ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29t
cG9uZW50TWFuYWdlci5oIiAyCgoKCgoKCmNsYXNzIG5zSUZpbGU7CiMgMzUgIi4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCmNsYXNzIG5zSUNvbXBvbmVudE1hbmFnZXIg
OiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdl
dElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4ODQ1OGE3NDAsIDB4ZDVkYywgMHgx
MWQyLCB7IDB4OTIsIDB4ZmIsIDB4MDAsIDB4ZTAsIDB4OTgsIDB4MDUsIDB4NTcsIDB4MGYgfX07
IHJldHVybiBpaWQ7fQojIDQ5ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29tcG9uZW50TWFuYWdl
ci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRmluZEZhY3RvcnkoY29uc3QgbnNDSUQgJiBhQ2xhc3Ms
IG5zSUZhY3RvcnkgKipfcmV0dmFsKSA9IDA7CiMgNjAgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lD
b21wb25lbnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDbGFzc09iamVjdChjb25z
dCBuc0NJRCAmIGFDbGFzcywgY29uc3QgbnNJSUQgJiBhSUlELCB2b2lkICogKl9yZXR2YWwpID0g
MDsKIyA3MyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKICB2aXJ0
dWFsIG5zcmVzdWx0IENvbnRyYWN0SURUb0NsYXNzSUQoY29uc3QgY2hhciAqYUNvbnRyYWN0SUQs
IG5zQ0lEICphQ2xhc3MpID0gMDsKIyA4NiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVu
dE1hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENMU0lEVG9Db250cmFjdElEKGNvbnN0IG5z
Q0lEICYgYUNsYXNzLCBjaGFyICoqYUNsYXNzTmFtZSwgY2hhciAqKl9yZXR2YWwpID0gMDsKIyA5
OCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKICB2aXJ0dWFsIG5z
cmVzdWx0IENyZWF0ZUluc3RhbmNlKGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBuc0lTdXBwb3J0cyAq
YURlbGVnYXRlLCBjb25zdCBuc0lJRCAmIGFJSUQsIHZvaWQgKiAqX3JldHZhbCkgPSAwOwojIDEx
MiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKICB2aXJ0dWFsIG5z
cmVzdWx0IENyZWF0ZUluc3RhbmNlQnlDb250cmFjdElEKGNvbnN0IGNoYXIgKmFDb250cmFjdElE
LCBuc0lTdXBwb3J0cyAqYURlbGVnYXRlLCBjb25zdCBuc0lJRCAmIElJRCwgdm9pZCAqICpfcmV0
dmFsKSA9IDA7CiMgMTI0ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29tcG9uZW50TWFuYWdlci5o
IgogIHZpcnR1YWwgbnNyZXN1bHQgUmVnaXN0cnlMb2NhdGlvbkZvclNwZWMobnNJRmlsZSAqYVNw
ZWMsIGNoYXIgKipfcmV0dmFsKSA9IDA7CiMgMTMzICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29t
cG9uZW50TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU3BlY0ZvclJlZ2lzdHJ5TG9jYXRp
b24oY29uc3QgY2hhciAqYUxvY2F0aW9uLCBuc0lGaWxlICoqX3JldHZhbCkgPSAwOwojIDE0OCAi
Li4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVz
dWx0IFJlZ2lzdGVyRmFjdG9yeShjb25zdCBuc0NJRCAmIGFDbGFzcywgY29uc3QgY2hhciAqYUNs
YXNzTmFtZSwgY29uc3QgY2hhciAqYUNvbnRyYWN0SUQsIG5zSUZhY3RvcnkgKmFGYWN0b3J5LCBQ
UkJvb2wgYVJlcGxhY2UpID0gMDsKIyAxNjkgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25l
bnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWdpc3RlckNvbXBvbmVudChjb25zdCBu
c0NJRCAmIGFDbGFzcywgY29uc3QgY2hhciAqYUNsYXNzTmFtZSwgY29uc3QgY2hhciAqYUNvbnRy
YWN0SUQsIGNvbnN0IGNoYXIgKmFMb2NhdGlvbiwgUFJCb29sIGFSZXBsYWNlLCBQUkJvb2wgYVBl
cnNpc3QpID0gMDsKIyAxOTEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2Vy
LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWdpc3RlckNvbXBvbmVudFdpdGhUeXBlKGNvbnN0IG5z
Q0lEICYgYUNsYXNzLCBjb25zdCBjaGFyICphQ2xhc3NOYW1lLCBjb25zdCBjaGFyICphQ29udHJh
Y3RJRCwgbnNJRmlsZSAqYVNwZWMsIGNvbnN0IGNoYXIgKmFMb2NhdGlvbiwgUFJCb29sIGFSZXBs
YWNlLCBQUkJvb2wgYVBlcnNpc3QsIGNvbnN0IGNoYXIgKmFUeXBlKSA9IDA7CiMgMjA5ICIuLi8u
Li9kaXN0L2luY2x1ZGUvbnNJQ29tcG9uZW50TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQg
UmVnaXN0ZXJDb21wb25lbnRTcGVjKGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBjb25zdCBjaGFyICph
Q2xhc3NOYW1lLCBjb25zdCBjaGFyICphQ29udHJhY3RJRCwgbnNJRmlsZSAqYUxpYnJhcnksIFBS
Qm9vbCBhUmVwbGFjZSwgUFJCb29sIGFQZXJzaXN0KSA9IDA7CiMgMjI4ICIuLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJQ29tcG9uZW50TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgUmVnaXN0ZXJD
b21wb25lbnRMaWIoY29uc3QgbnNDSUQgJiBhQ2xhc3MsIGNvbnN0IGNoYXIgKmFDbGFzc05hbWUs
IGNvbnN0IGNoYXIgKmFDb250cmFjdElELCBjb25zdCBjaGFyICphRGxsTmFtZSwgUFJCb29sIGFS
ZXBsYWNlLCBQUkJvb2wgYVBlcnNpc3QpID0gMDsKIyAyNDAgIi4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lDb21wb25lbnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBVbnJlZ2lzdGVyRmFjdG9y
eShjb25zdCBuc0NJRCAmIGFDbGFzcywgbnNJRmFjdG9yeSAqYUZhY3RvcnkpID0gMDsKIyAyNTQg
Ii4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jl
c3VsdCBVbnJlZ2lzdGVyQ29tcG9uZW50KGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBjb25zdCBjaGFy
ICphTG9jYXRpb24pID0gMDsKIyAyNjMgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRN
YW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBVbnJlZ2lzdGVyQ29tcG9uZW50U3BlYyhjb25z
dCBuc0NJRCAmIGFDbGFzcywgbnNJRmlsZSAqYUxpYnJhcnlTcGVjKSA9IDA7CgoKCgoKCgogIHZp
cnR1YWwgbnNyZXN1bHQgRnJlZUxpYnJhcmllcyh2b2lkKSA9IDA7CgoKCgogIGVudW0geyBOU19T
dGFydHVwID0gMCB9OwoKICBlbnVtIHsgTlNfU2NyaXB0ID0gMSB9OwoKICBlbnVtIHsgTlNfVGlt
ZXIgPSAyIH07CgogIGVudW0geyBOU19TaHV0ZG93biA9IDMgfTsKIyAyOTUgIi4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBBdXRvUmVn
aXN0ZXIoUFJJbnQzMiB3aGVuLCBuc0lGaWxlICpkaXJlY3RvcnkpID0gMDsKIyAzMDggIi4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBB
dXRvUmVnaXN0ZXJDb21wb25lbnQoUFJJbnQzMiB3aGVuLCBuc0lGaWxlICphRmlsZUxvY2F0aW9u
KSA9IDA7CiMgMzE3ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ29tcG9uZW50TWFuYWdlci5oIgog
IHZpcnR1YWwgbnNyZXN1bHQgQXV0b1VucmVnaXN0ZXJDb21wb25lbnQoUFJJbnQzMiB3aGVuLCBu
c0lGaWxlICphRmlsZUxvY2F0aW9uKSA9IDA7CiMgMzI5ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
Q29tcG9uZW50TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSXNSZWdpc3RlcmVkKGNvbnN0
IG5zQ0lEICYgYUNsYXNzLCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKIyAzMzkgIi4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBFbnVtZXJh
dGVDTFNJRHMobnNJRW51bWVyYXRvciAqKl9yZXR2YWwpID0gMDsKIyAzNDkgIi4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBFbnVtZXJh
dGVDb250cmFjdElEcyhuc0lFbnVtZXJhdG9yICoqX3JldHZhbCkgPSAwOwoKfTsKIyA2MDIgIi4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiMgMSAiLi4vLi4vZGlzdC9p
bmNsdWRlL25zQ29tcG9uZW50TWFuYWdlclV0aWxzLmgiIDEKIyAyMyAiLi4vLi4vZGlzdC9pbmNs
dWRlL25zQ29tcG9uZW50TWFuYWdlclV0aWxzLmgiCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25z
Q09NUHRyLmgiIDEKIyA0OSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCiMgMSAiLi4v
Li4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzLmgiIDEKIyA1MCAiLi4vLi4vZGlzdC9pbmNsdWRl
L25zQ09NUHRyLmgiIDIKCgoKCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5oIiAxCiMg
NTUgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIiAyCiMgMTA3ICIuLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNDT01QdHIuaCIKICB0eXBlZGVmIFBSQm9vbCBOU0NBUF9CT09MOwojIDE1OSAiLi4v
Li4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBuc0Rl
cml2ZWRTYWZlIDogcHVibGljIFQKIyAxNzAgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5o
IgogIHsKICAgIHByaXZhdGU6CgogICAgICB1c2luZyBUOjpBZGRSZWY7CiAgICAgIHVzaW5nIFQ6
OlJlbGVhc2U7CgoKCgoKCiAgICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRlKCB2b2lkKiwgc2l6ZV90
ICk7CgoKCiAgICAgIG5zRGVyaXZlZFNhZmU8VD4mIG9wZXJhdG9yPSggY29uc3QgVCYgKTsKIyAx
OTQgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgogIH07CiMgMjE1ICIuLi8uLi9kaXN0
L2luY2x1ZGUvbnNDT01QdHIuaCIKdGVtcGxhdGUgPGNsYXNzIFQ+CnN0cnVjdCBhbHJlYWR5X0Fk
ZFJlZmVkCiMgMjMyICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIKICB7CiAgICBhbHJl
YWR5X0FkZFJlZmVkKCBUKiBhUmF3UHRyICkKICAgICAgICA6IG1SYXdQdHIoYVJhd1B0cikKICAg
ICAgewoKICAgICAgfQoKICAgIFQqIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1SYXdQdHI7IH0KCiAg
ICBUKiBtUmF3UHRyOwogIH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCmNvbnN0IGFscmVh
ZHlfQWRkUmVmZWQ8VD4KZ2V0dGVyX0FkZFJlZnMoIFQqIGFSYXdQdHIgKQoKCgoKICB7CiAgICBy
ZXR1cm4gYWxyZWFkeV9BZGRSZWZlZDxUPihhUmF3UHRyKTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
VD4KaW5saW5lCmNvbnN0IGFscmVhZHlfQWRkUmVmZWQ8VD4KZ2V0dGVyX0FkZFJlZnMoIGNvbnN0
IGFscmVhZHlfQWRkUmVmZWQ8VD4mIGFBbHJlYWR5QWRkUmVmZWRQdHIgKQogIHsKICAgIHJldHVy
biBhQWxyZWFkeUFkZFJlZmVkUHRyOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKY29u
c3QgYWxyZWFkeV9BZGRSZWZlZDxUPgpkb250X0FkZFJlZiggVCogYVJhd1B0ciApCiAgewogICAg
cmV0dXJuIGFscmVhZHlfQWRkUmVmZWQ8VD4oYVJhd1B0cik7CiAgfQoKdGVtcGxhdGUgPGNsYXNz
IFQ+CmlubGluZQpjb25zdCBhbHJlYWR5X0FkZFJlZmVkPFQ+CmRvbnRfQWRkUmVmKCBjb25zdCBh
bHJlYWR5X0FkZFJlZmVkPFQ+IGFBbHJlYWR5QWRkUmVmZWRQdHIgKQogIHsKICAgIHJldHVybiBh
QWxyZWFkeUFkZFJlZmVkUHRyOwogIH0KIyAyOTEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0
ci5oIgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lClQqCmRvbnRfUXVlcnlJbnRlcmZhY2UoIFQq
IGV4cHIgKQogIHsKICAgIHJldHVybiBleHByOwogIH0KCgoKY2xhc3MgbnNDT01QdHJfaGVscGVy
CiMgMzE3ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIKICB7CiAgICBwdWJsaWM6CiAg
ICAgIHZpcnR1YWwgbnNyZXN1bHQgb3BlcmF0b3IoKSggY29uc3QgbnNJSUQmLCB2b2lkKiogKSBj
b25zdCA9IDA7CiAgfTsKCmNsYXNzIG5zUXVlcnlJbnRlcmZhY2UgOiBwdWJsaWMgbnNDT01QdHJf
aGVscGVyCiAgewogICAgcHVibGljOgogICAgICBuc1F1ZXJ5SW50ZXJmYWNlKCBuc0lTdXBwb3J0
cyogYVJhd1B0ciwgbnNyZXN1bHQqIGVycm9yICkKICAgICAgICAgIDogbVJhd1B0cihhUmF3UHRy
KSwKICAgICAgICAgICAgbUVycm9yUHRyKGVycm9yKQogICAgICAgIHsKCiAgICAgICAgfQoKICAg
ICAgdmlydHVhbCBuc3Jlc3VsdCBvcGVyYXRvcigpKCBjb25zdCBuc0lJRCYgYUlJRCwgdm9pZCoq
ICkgY29uc3Q7CgogICAgcHJpdmF0ZToKICAgICAgbnNJU3VwcG9ydHMqIG1SYXdQdHI7CiAgICAg
IG5zcmVzdWx0KiBtRXJyb3JQdHI7CiAgfTsKCmlubGluZQpjb25zdCBuc1F1ZXJ5SW50ZXJmYWNl
CmRvX1F1ZXJ5SW50ZXJmYWNlKCBuc0lTdXBwb3J0cyogYVJhd1B0ciwgbnNyZXN1bHQqIGVycm9y
ID0gMCApCiAgewogICAgcmV0dXJuIG5zUXVlcnlJbnRlcmZhY2UoYVJhd1B0ciwgZXJyb3IpOwog
IH0KCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKdm9pZApkb19RdWVyeUludGVyZmFjZSggYWxy
ZWFkeV9BZGRSZWZlZDxUPiYgKQogIHsKCgoKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5l
CnZvaWQKZG9fUXVlcnlJbnRlcmZhY2UoIGFscmVhZHlfQWRkUmVmZWQ8VD4mLCBuc3Jlc3VsdCog
KQogIHsKCgoKICB9CiMgMzgyICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIKY2xhc3Mg
bnNDT01QdHJfYmFzZQojIDM5NSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCiAgewog
ICAgcHVibGljOgoKICAgICAgbnNDT01QdHJfYmFzZSggbnNJU3VwcG9ydHMqIHJhd1B0ciA9IDAg
KQogICAgICAgICAgOiBtUmF3UHRyKHJhd1B0cikKICAgICAgICB7CgogICAgICAgIH0KCgoKCgoK
ICAgICAgICAgICAgICAgIH5uc0NPTVB0cl9iYXNlKCkgeyB9CgoKICAgICAgICAgICAgICAgIHZv
aWQgYXNzaWduX3dpdGhfQWRkUmVmKCBuc0lTdXBwb3J0cyogKTsKICAgICAgICAgICAgICAgIHZv
aWQgYXNzaWduX2Zyb21faGVscGVyKCBjb25zdCBuc0NPTVB0cl9oZWxwZXImLCBjb25zdCBuc0lJ
RCYgKTsKICAgICAgICAgICAgICAgIHZvaWQqKiBiZWdpbl9hc3NpZ25tZW50KCk7CgogICAgcHJv
dGVjdGVkOgogICAgICBuc0lTdXBwb3J0cyogbVJhd1B0cjsKCiAgICAgIHZvaWQKICAgICAgYXNz
aWduX2Fzc3VtaW5nX0FkZFJlZiggbnNJU3VwcG9ydHMqIG5ld1B0ciApCiAgICAgICAgewojIDQz
MCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCiAgICAgICAgICBuc0lTdXBwb3J0cyog
b2xkUHRyID0gbVJhd1B0cjsKICAgICAgICAgIG1SYXdQdHIgPSBuZXdQdHI7CiAgICAgICAgICA7
OwogICAgICAgICAgaWYgKCBvbGRQdHIgKQogICAgICAgICAgICAob2xkUHRyKS0+UmVsZWFzZSgp
OwogICAgICAgIH0KICB9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgbnNDT01QdHIKCgoK
ICB7CiAgICBlbnVtIHsgX2ZvcmNlX2V2ZW5fY29tcGxpYW50X2NvbXBpbGVyc190b19mYWlsXyA9
IHNpemVvZihUKSB9OwojIDQ1OSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCiAgICBw
cml2YXRlOgogICAgICB2b2lkIGFzc2lnbl93aXRoX0FkZFJlZiggbnNJU3VwcG9ydHMqICk7CiAg
ICAgIHZvaWQgYXNzaWduX2Zyb21faGVscGVyKCBjb25zdCBuc0NPTVB0cl9oZWxwZXImLCBjb25z
dCBuc0lJRCYgKTsKICAgICAgdm9pZCoqIGJlZ2luX2Fzc2lnbm1lbnQoKTsKCiAgICAgIHZvaWQK
ICAgICAgYXNzaWduX2Fzc3VtaW5nX0FkZFJlZiggVCogbmV3UHRyICkKICAgICAgICB7CiAgICAg
ICAgICBUKiBvbGRQdHIgPSBtUmF3UHRyOwogICAgICAgICAgbVJhd1B0ciA9IG5ld1B0cjsKICAg
ICAgICAgIDs7CiAgICAgICAgICBpZiAoIG9sZFB0ciApCiAgICAgICAgICAgIChvbGRQdHIpLT5S
ZWxlYXNlKCk7CiAgICAgICAgfQoKICAgIHByaXZhdGU6CiAgICAgIFQqIG1SYXdQdHI7CgoKCgoK
CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgVCBlbGVtZW50X3R5cGU7CgoKICAgICB+bnNDT01Q
dHIoKQogICAgICAgIHsKICAgICAgICAgIGlmICggbVJhd1B0ciApCiAgICAgICAgICAgIChtUmF3
UHRyKS0+UmVsZWFzZSgpOwogICAgICAgIH0KCgoKICAgICAgdm9pZAogICAgICBBc3NlcnRfTm9R
dWVyeU5lZWRlZCgpCiAgICAgICAgewogICAgICAgICAgaWYgKCBtUmF3UHRyICkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgIG5zQ09NUHRyPFQ+IHF1ZXJ5X3Jlc3VsdCggZG9fUXVlcnlJbnRl
cmZhY2UobVJhd1B0cikgKTsKICAgICAgICAgICAgICBpZiAoIShxdWVyeV9yZXN1bHQuZ2V0KCkg
PT0gbVJhd1B0cikpIG5zRGVidWc6OkFzc2VydGlvbigiUXVlcnlJbnRlcmZhY2UgbmVlZGVkIiwg
InF1ZXJ5X3Jlc3VsdC5nZXQoKSA9PSBtUmF3UHRyIiwgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NP
TVB0ci5oIiwgNTAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0KIyA1MTIgIi4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0NPTVB0ci5oIgogICAgICBuc0NPTVB0cigpCiAgICAgICAgICAgIDogbVJhd1B0
cigwKQoKICAgICAgICB7CiAgICAgICAgICA7OwogICAgICAgIH0KCiAgICAgIG5zQ09NUHRyKCBj
b25zdCBuc0NPTVB0cjxUPiYgYVNtYXJ0UHRyICkKICAgICAgICAgICAgOiBtUmF3UHRyKGFTbWFy
dFB0ci5tUmF3UHRyKQoKICAgICAgICB7CiAgICAgICAgICBpZiAoIG1SYXdQdHIgKQogICAgICAg
ICAgICAobVJhd1B0ciktPkFkZFJlZigpOwogICAgICAgICAgOzsKICAgICAgICB9CgogICAgICBu
c0NPTVB0ciggVCogYVJhd1B0ciApCiAgICAgICAgICAgIDogbVJhd1B0cihhUmF3UHRyKQoKICAg
ICAgICB7CiAgICAgICAgICBpZiAoIG1SYXdQdHIgKQogICAgICAgICAgICAobVJhd1B0ciktPkFk
ZFJlZigpOwogICAgICAgICAgOzsKICAgICAgICAgIDsgQXNzZXJ0X05vUXVlcnlOZWVkZWQoKTs7
CiAgICAgICAgfQoKICAgICAgbnNDT01QdHIoIGNvbnN0IGFscmVhZHlfQWRkUmVmZWQ8VD4mIGFT
bWFydFB0ciApCiAgICAgICAgICAgIDogbVJhd1B0cihhU21hcnRQdHIubVJhd1B0cikKCiAgICAg
ICAgewogICAgICAgICAgOzsKICAgICAgICAgIDsgQXNzZXJ0X05vUXVlcnlOZWVkZWQoKTs7CiAg
ICAgICAgfQoKICAgICAgbnNDT01QdHIoIGNvbnN0IG5zQ09NUHRyX2hlbHBlciYgaGVscGVyICkK
ICAgICAgICAgICAgOiBtUmF3UHRyKDApCgoKICAgICAgICB7CiAgICAgICAgICA7OwogICAgICAg
ICAgYXNzaWduX2Zyb21faGVscGVyKGhlbHBlciwgbnNDT01UeXBlSW5mbzxUPjo6R2V0SUlEKCkp
OwogICAgICAgICAgOyBBc3NlcnRfTm9RdWVyeU5lZWRlZCgpOzsKICAgICAgICB9CgoKCgoKICAg
ICAgbnNDT01QdHIoIGNvbnN0IG5zUXVlcnlJbnRlcmZhY2UmIGhlbHBlciApCiAgICAgICAgICAg
IDogbVJhd1B0cigwKQogICAgICAgIHsKICAgICAgICAgIDs7CiAgICAgICAgICBhc3NpZ25fZnJv
bV9oZWxwZXIoaGVscGVyLCBuc0NPTVR5cGVJbmZvPFQ+OjpHZXRJSUQoKSk7CiAgICAgICAgfQoK
CgoKCiAgICAgIG5zQ09NUHRyPFQ+JgogICAgICBvcGVyYXRvcj0oIGNvbnN0IG5zQ09NUHRyPFQ+
JiByaHMgKQoKICAgICAgICB7CiAgICAgICAgICBhc3NpZ25fd2l0aF9BZGRSZWYocmhzLm1SYXdQ
dHIpOwogICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KCiAgICAgIG5zQ09NUHRyPFQ+
JgogICAgICBvcGVyYXRvcj0oIFQqIHJocyApCgogICAgICAgIHsKICAgICAgICAgIGFzc2lnbl93
aXRoX0FkZFJlZihyaHMpOwogICAgICAgICAgOyBBc3NlcnRfTm9RdWVyeU5lZWRlZCgpOzsKICAg
ICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CgogICAgICBuc0NPTVB0cjxUPiYKICAgICAg
b3BlcmF0b3I9KCBjb25zdCBhbHJlYWR5X0FkZFJlZmVkPFQ+JiByaHMgKQoKICAgICAgICB7CiAg
ICAgICAgICBhc3NpZ25fYXNzdW1pbmdfQWRkUmVmKHJocy5tUmF3UHRyKTsKICAgICAgICAgIDsg
QXNzZXJ0X05vUXVlcnlOZWVkZWQoKTs7CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAg
fQoKICAgICAgbnNDT01QdHI8VD4mCiAgICAgIG9wZXJhdG9yPSggY29uc3QgbnNDT01QdHJfaGVs
cGVyJiByaHMgKQoKCiAgICAgICAgewogICAgICAgICAgYXNzaWduX2Zyb21faGVscGVyKHJocywg
bnNDT01UeXBlSW5mbzxUPjo6R2V0SUlEKCkpOwogICAgICAgICAgOyBBc3NlcnRfTm9RdWVyeU5l
ZWRlZCgpOzsKICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CgoKCgoKICAgICAgbnND
T01QdHI8VD4mCiAgICAgIG9wZXJhdG9yPSggY29uc3QgbnNRdWVyeUludGVyZmFjZSYgcmhzICkK
ICAgICAgICB7CiAgICAgICAgICBhc3NpZ25fZnJvbV9oZWxwZXIocmhzLCBuc0NPTVR5cGVJbmZv
PFQ+OjpHZXRJSUQoKSk7CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKCgoKCiAg
ICAgIG5zRGVyaXZlZFNhZmU8VD4qCiAgICAgIGdldCgpIGNvbnN0CgoKCgoKCiAgICAgICAgewog
ICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IG5zRGVyaXZlZFNhZmU8VD4qID4obVJh
d1B0cik7CiAgICAgICAgfQoKICAgICAgb3BlcmF0b3IgbnNEZXJpdmVkU2FmZTxUPiooKSBjb25z
dAoKCgoKCgoKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gZ2V0KCk7CiAgICAgICAgfQoKICAg
ICAgbnNEZXJpdmVkU2FmZTxUPioKICAgICAgb3BlcmF0b3ItPigpIGNvbnN0CiAgICAgICAgewog
ICAgICAgICAgaWYgKCEobVJhd1B0ciAhPSAwKSkgbnNEZWJ1Zzo6UHJlQ29uZGl0aW9uKCJZb3Ug
Y2FuJ3QgZGVyZWZlcmVuY2UgYSBOVUxMIG5zQ09NUHRyIHdpdGggb3BlcmF0b3ItPigpLiIsICJt
UmF3UHRyICE9IDAiLCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiLCA2NDkpOwogICAg
ICAgICAgcmV0dXJuIGdldCgpOwogICAgICAgIH0KIyA2NjYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0NPTVB0ci5oIgogICAgICBuc0NPTVB0cjxUPioKICAgICAgZ2V0X2FkZHJlc3MoKQoKCiAgICAg
ICAgewogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQoKICAgICAgY29uc3QgbnNDT01Q
dHI8VD4qCiAgICAgIGdldF9hZGRyZXNzKCkgY29uc3QKCgogICAgICAgIHsKICAgICAgICAgIHJl
dHVybiB0aGlzOwogICAgICAgIH0KCgoKCgoKICAgIHByaXZhdGU6CiAgICAgIGNvbnN0IG5zQ09N
UHRyPFQ+KgogICAgICBvcGVyYXRvciYoKSBjb25zdAoKCgoKCgogICAgICAgIHsKICAgICAgICAg
IHJldHVybiB0aGlzOwogICAgICAgIH0KCiAgICAgIG5zQ09NUHRyPFQ+KgogICAgICBvcGVyYXRv
ciYoKQoKCgogICAgICAgIHsKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KCiAgICBw
dWJsaWM6CiAgICAgIG5zRGVyaXZlZFNhZmU8VD4mCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0CiAg
ICAgICAgewogICAgICAgICAgaWYgKCEobVJhd1B0ciAhPSAwKSkgbnNEZWJ1Zzo6UHJlQ29uZGl0
aW9uKCJZb3UgY2FuJ3QgZGVyZWZlcmVuY2UgYSBOVUxMIG5zQ09NUHRyIHdpdGggb3BlcmF0b3Iq
KCkuIiwgIm1SYXdQdHIgIT0gMCIsICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNDT01QdHIuaCIsIDcx
Myk7CiAgICAgICAgICByZXR1cm4gKmdldCgpOwogICAgICAgIH0KCgoKCgoKICAgICAgVCoqCiAg
ICAgIFN0YXJ0QXNzaWdubWVudCgpCiAgICAgICAgewoKICAgICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PCBUKiogPihiZWdpbl9hc3NpZ25tZW50KCkpOwoKCgoKICAgICAgICB9CiAgfTsK
IyA3NDUgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgp0ZW1wbGF0ZSA8PgpjbGFzcyBu
c0NPTVB0cjxuc0lTdXBwb3J0cz4KICAgIDogcHJpdmF0ZSBuc0NPTVB0cl9iYXNlCiAgewogICAg
cHVibGljOgogICAgICB0eXBlZGVmIG5zSVN1cHBvcnRzIGVsZW1lbnRfdHlwZTsKCgogICAgIH5u
c0NPTVB0cigpCiAgICAgICAgIHsKICAgICAgICAgICBpZiAoIG1SYXdQdHIgKQogICAgICAgICAg
ICAgKG1SYXdQdHIpLT5SZWxlYXNlKCk7CiAgICAgICAgIH0KCgoKCgogICAgICBuc0NPTVB0cigp
CiAgICAgICAgICAgIDogbnNDT01QdHJfYmFzZSgwKQoKICAgICAgICB7CiAgICAgICAgICA7Owog
ICAgICAgIH0KCiAgICAgIG5zQ09NUHRyKCBjb25zdCBuc0NPTVB0cjxuc0lTdXBwb3J0cz4mIGFT
bWFydFB0ciApCiAgICAgICAgICAgIDogbnNDT01QdHJfYmFzZShhU21hcnRQdHIubVJhd1B0cikK
CiAgICAgICAgewogICAgICAgICAgaWYgKCBtUmF3UHRyICkKICAgICAgICAgICAgKG1SYXdQdHIp
LT5BZGRSZWYoKTsKICAgICAgICAgIDs7CiAgICAgICAgfQoKICAgICAgbnNDT01QdHIoIG5zSVN1
cHBvcnRzKiBhUmF3UHRyICkKICAgICAgICAgICAgOiBuc0NPTVB0cl9iYXNlKGFSYXdQdHIpCgog
ICAgICAgIHsKICAgICAgICAgIGlmICggbVJhd1B0ciApCiAgICAgICAgICAgIChtUmF3UHRyKS0+
QWRkUmVmKCk7CiAgICAgICAgICA7OwogICAgICAgIH0KCiAgICAgIG5zQ09NUHRyKCBjb25zdCBh
bHJlYWR5X0FkZFJlZmVkPG5zSVN1cHBvcnRzPiYgYVNtYXJ0UHRyICkKICAgICAgICAgICAgOiBu
c0NPTVB0cl9iYXNlKGFTbWFydFB0ci5tUmF3UHRyKQoKICAgICAgICB7CiAgICAgICAgICA7Owog
ICAgICAgIH0KCiAgICAgIG5zQ09NUHRyKCBjb25zdCBuc0NPTVB0cl9oZWxwZXImIGhlbHBlciAp
CiAgICAgICAgICAgIDogbnNDT01QdHJfYmFzZSgwKQoKCiAgICAgICAgewogICAgICAgICAgOzsK
ICAgICAgICAgIGFzc2lnbl9mcm9tX2hlbHBlcihoZWxwZXIsIG5zQ09NVHlwZUluZm88bnNJU3Vw
cG9ydHM+OjpHZXRJSUQoKSk7CiAgICAgICAgfQoKCgoKICAgICAgbnNDT01QdHI8bnNJU3VwcG9y
dHM+JgogICAgICBvcGVyYXRvcj0oIGNvbnN0IG5zQ09NUHRyPG5zSVN1cHBvcnRzPiYgcmhzICkK
CiAgICAgICAgewogICAgICAgICAgYXNzaWduX3dpdGhfQWRkUmVmKHJocy5tUmF3UHRyKTsKICAg
ICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CgogICAgICBuc0NPTVB0cjxuc0lTdXBwb3J0
cz4mCiAgICAgIG9wZXJhdG9yPSggbnNJU3VwcG9ydHMqIHJocyApCgogICAgICAgIHsKICAgICAg
ICAgIGFzc2lnbl93aXRoX0FkZFJlZihyaHMpOwogICAgICAgICAgcmV0dXJuICp0aGlzOwogICAg
ICAgIH0KCiAgICAgIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiYKICAgICAgb3BlcmF0b3I9KCBjb25z
dCBhbHJlYWR5X0FkZFJlZmVkPG5zSVN1cHBvcnRzPiYgcmhzICkKCiAgICAgICAgewogICAgICAg
ICAgYXNzaWduX2Fzc3VtaW5nX0FkZFJlZihyaHMubVJhd1B0cik7CiAgICAgICAgICByZXR1cm4g
KnRoaXM7CiAgICAgICAgfQoKICAgICAgbnNDT01QdHI8bnNJU3VwcG9ydHM+JgogICAgICBvcGVy
YXRvcj0oIGNvbnN0IG5zQ09NUHRyX2hlbHBlciYgcmhzICkKCgogICAgICAgIHsKICAgICAgICAg
IGFzc2lnbl9mcm9tX2hlbHBlcihyaHMsIG5zQ09NVHlwZUluZm88bnNJU3VwcG9ydHM+OjpHZXRJ
SUQoKSk7CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKCgoKICAgICAgbnNEZXJp
dmVkU2FmZTxuc0lTdXBwb3J0cz4qCiAgICAgIGdldCgpIGNvbnN0CgoKCgoKCiAgICAgICAgewog
ICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IG5zRGVyaXZlZFNhZmU8bnNJU3VwcG9y
dHM+KiA+KG1SYXdQdHIpOwogICAgICAgIH0KCiAgICAgIG9wZXJhdG9yIG5zRGVyaXZlZFNhZmU8
bnNJU3VwcG9ydHM+KigpIGNvbnN0CgoKCgoKCgogICAgICAgIHsKICAgICAgICAgIHJldHVybiBn
ZXQoKTsKICAgICAgICB9CgogICAgICBuc0Rlcml2ZWRTYWZlPG5zSVN1cHBvcnRzPioKICAgICAg
b3BlcmF0b3ItPigpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgaWYgKCEobVJhd1B0ciAhPSAw
KSkgbnNEZWJ1Zzo6UHJlQ29uZGl0aW9uKCJZb3UgY2FuJ3QgZGVyZWZlcmVuY2UgYSBOVUxMIG5z
Q09NUHRyIHdpdGggb3BlcmF0b3ItPigpLiIsICJtUmF3UHRyICE9IDAiLCAiLi4vLi4vZGlzdC9p
bmNsdWRlL25zQ09NUHRyLmgiLCA4NzApOwogICAgICAgICAgcmV0dXJuIGdldCgpOwogICAgICAg
IH0KIyA4ODcgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgogICAgICBuc0NPTVB0cjxu
c0lTdXBwb3J0cz4qCiAgICAgIGdldF9hZGRyZXNzKCkKCgogICAgICAgIHsKICAgICAgICAgIHJl
dHVybiB0aGlzOwogICAgICAgIH0KCiAgICAgIGNvbnN0IG5zQ09NUHRyPG5zSVN1cHBvcnRzPioK
ICAgICAgZ2V0X2FkZHJlc3MoKSBjb25zdAoKCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHRo
aXM7CiAgICAgICAgfQoKCgoKCgogICAgcHJpdmF0ZToKICAgICAgY29uc3QgbnNDT01QdHI8bnNJ
U3VwcG9ydHM+KgogICAgICBvcGVyYXRvciYoKSBjb25zdAoKCgoKCgogICAgICAgIHsKICAgICAg
ICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KCiAgICAgIG5zQ09NUHRyPG5zSVN1cHBvcnRzPioK
ICAgICAgb3BlcmF0b3ImKCkKCgoKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAg
ICAgICB9CgogICAgcHVibGljOgoKICAgICAgbnNEZXJpdmVkU2FmZTxuc0lTdXBwb3J0cz4mCiAg
ICAgIG9wZXJhdG9yKigpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgaWYgKCEobVJhd1B0ciAh
PSAwKSkgbnNEZWJ1Zzo6UHJlQ29uZGl0aW9uKCJZb3UgY2FuJ3QgZGVyZWZlcmVuY2UgYSBOVUxM
IG5zQ09NUHRyIHdpdGggb3BlcmF0b3IqKCkuIiwgIm1SYXdQdHIgIT0gMCIsICIuLi8uLi9kaXN0
L2luY2x1ZGUvbnNDT01QdHIuaCIsIDkzNSk7CiAgICAgICAgICByZXR1cm4gKmdldCgpOwogICAg
ICAgIH0KCgoKCgoKICAgICAgbnNJU3VwcG9ydHMqKgogICAgICBTdGFydEFzc2lnbm1lbnQoKQog
ICAgICAgIHsKCiAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwgbnNJU3VwcG9ydHMq
KiA+KGJlZ2luX2Fzc2lnbm1lbnQoKSk7CgoKCgogICAgICAgIH0KICB9OwoKCnRlbXBsYXRlIDxj
bGFzcyBUPgp2b2lkCm5zQ09NUHRyPFQ+Ojphc3NpZ25fd2l0aF9BZGRSZWYoIG5zSVN1cHBvcnRz
KiByYXdQdHIgKQogIHsKICAgIGlmICggcmF3UHRyICkKICAgICAgKHJhd1B0ciktPkFkZFJlZigp
OwogICAgYXNzaWduX2Fzc3VtaW5nX0FkZFJlZihyZWludGVycHJldF9jYXN0PCBUKiA+KHJhd1B0
cikpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBUPgp2b2lkCm5zQ09NUHRyPFQ+Ojphc3NpZ25fZnJv
bV9oZWxwZXIoIGNvbnN0IG5zQ09NUHRyX2hlbHBlciYgaGVscGVyLCBjb25zdCBuc0lJRCYgYUlJ
RCApCiAgewogICAgVCogbmV3UmF3UHRyOwogICAgaWYgKCAhKCEoKGhlbHBlcihhSUlELCByZWlu
dGVycHJldF9jYXN0PCB2b2lkKiogPigmbmV3UmF3UHRyKSkpICYgMHg4MDAwMDAwMCkpICkKICAg
ICAgbmV3UmF3UHRyID0gMDsKICAgIGFzc2lnbl9hc3N1bWluZ19BZGRSZWYobmV3UmF3UHRyKTsK
ICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4Kdm9pZCoqCm5zQ09NUHRyPFQ+OjpiZWdpbl9hc3NpZ25t
ZW50KCkKICB7CiAgICBhc3NpZ25fYXNzdW1pbmdfQWRkUmVmKDApOwogICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8IHZvaWQqKiA+KCZtUmF3UHRyKTsKICB9CiMgOTk5ICIuLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNDT01QdHIuaCIKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQpuc0NPTVB0cjxUPioK
YWRkcmVzc19vZiggbnNDT01QdHI8VD4mIGFQdHIgKQogIHsKICAgIHJldHVybiBhUHRyLmdldF9h
ZGRyZXNzKCk7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQpjb25zdCBuc0NPTVB0cjxU
PioKYWRkcmVzc19vZiggY29uc3QgbnNDT01QdHI8VD4mIGFQdHIgKQogIHsKICAgIHJldHVybiBh
UHRyLmdldF9hZGRyZXNzKCk7CiAgfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgbnNHZXR0
ZXJBZGRSZWZzCiMgMTAzNiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiCiAgewogICAg
cHVibGljOgogICAgICBleHBsaWNpdAogICAgICBuc0dldHRlckFkZFJlZnMoIG5zQ09NUHRyPFQ+
JiBhU21hcnRQdHIgKQogICAgICAgICAgOiBtVGFyZ2V0U21hcnRQdHIoYVNtYXJ0UHRyKQogICAg
ICAgIHsKCiAgICAgICAgfQoKCiAgICAgfm5zR2V0dGVyQWRkUmVmcygpCiAgICAgICAgewoKCgoK
CiAgICAgICAgICBtVGFyZ2V0U21hcnRQdHIuQXNzZXJ0X05vUXVlcnlOZWVkZWQoKTsKCiAgICAg
ICAgfQoKCiAgICAgIG9wZXJhdG9yIHZvaWQqKigpCiAgICAgICAgewogICAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8IHZvaWQqKiA+KG1UYXJnZXRTbWFydFB0ci5TdGFydEFzc2lnbm1l
bnQoKSk7CiAgICAgICAgfQoKICAgICAgb3BlcmF0b3IgbnNJU3VwcG9ydHMqKigpCiAgICAgICAg
ewogICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IG5zSVN1cHBvcnRzKiogPihtVGFy
Z2V0U21hcnRQdHIuU3RhcnRBc3NpZ25tZW50KCkpOwogICAgICAgIH0KCiAgICAgIG9wZXJhdG9y
IFQqKigpCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIG1UYXJnZXRTbWFydFB0ci5TdGFydEFz
c2lnbm1lbnQoKTsKICAgICAgICB9CgogICAgICBUKiYKICAgICAgb3BlcmF0b3IqKCkKICAgICAg
ICB7CiAgICAgICAgICByZXR1cm4gKihtVGFyZ2V0U21hcnRQdHIuU3RhcnRBc3NpZ25tZW50KCkp
OwogICAgICAgIH0KCiAgICBwcml2YXRlOgogICAgICBuc0NPTVB0cjxUPiYgbVRhcmdldFNtYXJ0
UHRyOwogIH07CgoKdGVtcGxhdGUgPD4KY2xhc3MgbnNHZXR0ZXJBZGRSZWZzPG5zSVN1cHBvcnRz
PgogIHsKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgbnNHZXR0ZXJBZGRSZWZzKCBu
c0NPTVB0cjxuc0lTdXBwb3J0cz4mIGFTbWFydFB0ciApCiAgICAgICAgICA6IG1UYXJnZXRTbWFy
dFB0cihhU21hcnRQdHIpCiAgICAgICAgewoKICAgICAgICB9CiMgMTEwMiAiLi4vLi4vZGlzdC9p
bmNsdWRlL25zQ09NUHRyLmgiCiAgICAgIG9wZXJhdG9yIHZvaWQqKigpCiAgICAgICAgewogICAg
ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IHZvaWQqKiA+KG1UYXJnZXRTbWFydFB0ci5T
dGFydEFzc2lnbm1lbnQoKSk7CiAgICAgICAgfQoKICAgICAgb3BlcmF0b3IgbnNJU3VwcG9ydHMq
KigpCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIG1UYXJnZXRTbWFydFB0ci5TdGFydEFzc2ln
bm1lbnQoKTsKICAgICAgICB9CgogICAgICBuc0lTdXBwb3J0cyomCiAgICAgIG9wZXJhdG9yKigp
CiAgICAgICAgewogICAgICAgICAgcmV0dXJuICoobVRhcmdldFNtYXJ0UHRyLlN0YXJ0QXNzaWdu
bWVudCgpKTsKICAgICAgICB9CgogICAgcHJpdmF0ZToKICAgICAgbnNDT01QdHI8bnNJU3VwcG9y
dHM+JiBtVGFyZ2V0U21hcnRQdHI7CiAgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCm5z
R2V0dGVyQWRkUmVmczxUPgpnZXR0ZXJfQWRkUmVmcyggbnNDT01QdHI8VD4mIGFTbWFydFB0ciAp
CgoKCgogIHsKICAgIHJldHVybiBuc0dldHRlckFkZFJlZnM8VD4oYVNtYXJ0UHRyKTsKICB9CgoK
CgoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFU+CmlubGluZQpOU0NBUF9CT09MCm9wZXJhdG9y
PT0oIGNvbnN0IG5zQ09NUHRyPFQ+JiBsaHMsIGNvbnN0IG5zQ09NUHRyPFU+JiByaHMgKQogIHsK
ICAgIHJldHVybiBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihsaHMuZ2V0KCkpID09IHN0YXRp
Y19jYXN0PCBjb25zdCB2b2lkKiA+KHJocy5nZXQoKSk7CiAgfQoKCnRlbXBsYXRlIDxjbGFzcyBU
LCBjbGFzcyBVPgppbmxpbmUKTlNDQVBfQk9PTApvcGVyYXRvciE9KCBjb25zdCBuc0NPTVB0cjxU
PiYgbGhzLCBjb25zdCBuc0NPTVB0cjxVPiYgcmhzICkKICB7CiAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8IGNvbnN0IHZvaWQqID4obGhzLmdldCgpKSAhPSBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCog
PihyaHMuZ2V0KCkpOwogIH0KCgoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgppbmxpbmUK
TlNDQVBfQk9PTApvcGVyYXRvcj09KCBjb25zdCBuc0NPTVB0cjxUPiYgbGhzLCBjb25zdCBVKiBy
aHMgKQogIHsKICAgIHJldHVybiBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihsaHMuZ2V0KCkp
ID09IHN0YXRpY19jYXN0PCBjb25zdCB2b2lkKiA+KHJocyk7CiAgfQoKdGVtcGxhdGUgPGNsYXNz
IFQsIGNsYXNzIFU+CmlubGluZQpOU0NBUF9CT09MCm9wZXJhdG9yPT0oIGNvbnN0IFUqIGxocywg
Y29uc3QgbnNDT01QdHI8VD4mIHJocyApCiAgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PCBjb25z
dCB2b2lkKiA+KGxocykgPT0gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4ocmhzLmdldCgpKTsK
ICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVT4KaW5saW5lCk5TQ0FQX0JPT0wKb3BlcmF0
b3IhPSggY29uc3QgbnNDT01QdHI8VD4mIGxocywgY29uc3QgVSogcmhzICkKICB7CiAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4obGhzLmdldCgpKSAhPSBzdGF0aWNfY2FzdDwg
Y29uc3Qgdm9pZCogPihyaHMpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgppbmxp
bmUKTlNDQVBfQk9PTApvcGVyYXRvciE9KCBjb25zdCBVKiBsaHMsIGNvbnN0IG5zQ09NUHRyPFQ+
JiByaHMgKQogIHsKICAgIHJldHVybiBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihsaHMpICE9
IHN0YXRpY19jYXN0PCBjb25zdCB2b2lkKiA+KHJocy5nZXQoKSk7CiAgfQojIDEyMDYgIi4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVT4KaW5s
aW5lCk5TQ0FQX0JPT0wKb3BlcmF0b3I9PSggY29uc3QgbnNDT01QdHI8VD4mIGxocywgVSogcmhz
ICkKICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4obGhzLmdldCgpKSA9
PSBzdGF0aWNfY2FzdDwgdm9pZCogPihyaHMpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFz
cyBVPgppbmxpbmUKTlNDQVBfQk9PTApvcGVyYXRvcj09KCBVKiBsaHMsIGNvbnN0IG5zQ09NUHRy
PFQ+JiByaHMgKQogIHsKICAgIHJldHVybiBzdGF0aWNfY2FzdDwgdm9pZCogPihsaHMpID09IHN0
YXRpY19jYXN0PCBjb25zdCB2b2lkKiA+KHJocy5nZXQoKSk7CiAgfQoKdGVtcGxhdGUgPGNsYXNz
IFQsIGNsYXNzIFU+CmlubGluZQpOU0NBUF9CT09MCm9wZXJhdG9yIT0oIGNvbnN0IG5zQ09NUHRy
PFQ+JiBsaHMsIFUqIHJocyApCiAgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PCBjb25zdCB2b2lk
KiA+KGxocy5nZXQoKSkgIT0gc3RhdGljX2Nhc3Q8IHZvaWQqID4ocmhzKTsKICB9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgVCwgY2xhc3MgVT4KaW5saW5lCk5TQ0FQX0JPT0wKb3BlcmF0b3IhPSggVSogbGhz
LCBjb25zdCBuc0NPTVB0cjxUPiYgcmhzICkKICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IHZv
aWQqID4obGhzKSAhPSBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihyaHMuZ2V0KCkpOwogIH0K
CgoKCgoKY2xhc3MgTlNDQVBfWmVybzsKCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKTlNDQVBf
Qk9PTApvcGVyYXRvcj09KCBjb25zdCBuc0NPTVB0cjxUPiYgbGhzLCBOU0NBUF9aZXJvKiByaHMg
KQoKICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4obGhzLmdldCgpKSA9
PSByZWludGVycHJldF9jYXN0PCBjb25zdCB2b2lkKiA+KHJocyk7CiAgfQoKdGVtcGxhdGUgPGNs
YXNzIFQ+CmlubGluZQpOU0NBUF9CT09MCm9wZXJhdG9yPT0oIE5TQ0FQX1plcm8qIGxocywgY29u
c3QgbnNDT01QdHI8VD4mIHJocyApCgogIHsKICAgIHJldHVybiByZWludGVycHJldF9jYXN0PCBj
b25zdCB2b2lkKiA+KGxocykgPT0gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4ocmhzLmdldCgp
KTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCk5TQ0FQX0JPT0wKb3BlcmF0b3IhPSgg
Y29uc3QgbnNDT01QdHI8VD4mIGxocywgTlNDQVBfWmVybyogcmhzICkKCiAgewogICAgcmV0dXJu
IHN0YXRpY19jYXN0PCBjb25zdCB2b2lkKiA+KGxocy5nZXQoKSkgIT0gcmVpbnRlcnByZXRfY2Fz
dDwgY29uc3Qgdm9pZCogPihyaHMpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKTlND
QVBfQk9PTApvcGVyYXRvciE9KCBOU0NBUF9aZXJvKiBsaHMsIGNvbnN0IG5zQ09NUHRyPFQ+JiBy
aHMgKQoKICB7CiAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwgY29uc3Qgdm9pZCogPihsaHMp
ICE9IHN0YXRpY19jYXN0PCBjb25zdCB2b2lkKiA+KHJocy5nZXQoKSk7CiAgfQojIDEzMDkgIi4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIgppbmxpbmUKTlNDQVBfQk9PTApTYW1lQ09NSWRl
bnRpdHkoIG5zSVN1cHBvcnRzKiBsaHMsIG5zSVN1cHBvcnRzKiByaHMgKQogIHsKICAgIHJldHVy
biBuc0NPTVB0cjxuc0lTdXBwb3J0cz4oIGRvX1F1ZXJ5SW50ZXJmYWNlKGxocykgKSA9PSBuc0NP
TVB0cjxuc0lTdXBwb3J0cz4oIGRvX1F1ZXJ5SW50ZXJmYWNlKHJocykgKTsKICB9CgoKCnRlbXBs
YXRlIDxjbGFzcyBTb3VyY2VUeXBlLCBjbGFzcyBEZXN0aW5hdGlvblR5cGU+CmlubGluZQpuc3Jl
c3VsdApDYWxsUXVlcnlJbnRlcmZhY2UoIG5zQ09NUHRyPFNvdXJjZVR5cGU+JiBhU291cmNlUHRy
LCBEZXN0aW5hdGlvblR5cGUqKiBhRGVzdFB0ciApCiAgewogICAgcmV0dXJuIENhbGxRdWVyeUlu
dGVyZmFjZShhU291cmNlUHRyLmdldCgpLCBhRGVzdFB0cik7CiAgfQojIDI0ICIuLi8uLi9kaXN0
L2luY2x1ZGUvbnNDb21wb25lbnRNYW5hZ2VyVXRpbHMuaCIgMgojIDM0ICIuLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNDb21wb25lbnRNYW5hZ2VyVXRpbHMuaCIKZXh0ZXJuICJDIiBuc3Jlc3VsdCBOU0dl
dEZhY3RvcnkobnNJU3VwcG9ydHMqIGFTZXJ2TWdyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgbnNDSUQgJmFDbGFzcywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFDbGFzc05hbWUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphQ29udHJhY3RJ
RCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZhY3Rvcnkg
KiphRmFjdG9yeSk7CmV4dGVybiAiQyIgUFJCb29sIE5TQ2FuVW5sb2FkKG5zSVN1cHBvcnRzKiBh
U2Vydk1ncik7CmV4dGVybiAiQyIgbnNyZXN1bHQgTlNSZWdpc3RlclNlbGYobnNJU3VwcG9ydHMq
IGFTZXJ2TWdyLCBjb25zdCBjaGFyICpmdWxscGF0aCk7CmV4dGVybiAiQyIgbnNyZXN1bHQgTlNV
bnJlZ2lzdGVyU2VsZihuc0lTdXBwb3J0cyogYVNlcnZNZ3IsIGNvbnN0IGNoYXIgKmZ1bGxwYXRo
KTsKCnR5cGVkZWYgbnNyZXN1bHQgKCpuc0ZhY3RvcnlQcm9jKShuc0lTdXBwb3J0cyogYVNlcnZN
Z3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0NJRCAmYUNsYXNz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYUNsYXNzTmFt
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFDb250cmFj
dElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRmFjdG9yeSAqKmFGYWN0
b3J5KTsKdHlwZWRlZiBQUkJvb2wgKCpuc0NhblVubG9hZFByb2MpKG5zSVN1cHBvcnRzKiBhU2Vy
dk1ncik7CnR5cGVkZWYgbnNyZXN1bHQgKCpuc1JlZ2lzdGVyUHJvYykobnNJU3VwcG9ydHMqIGFT
ZXJ2TWdyLCBjb25zdCBjaGFyICpwYXRoKTsKdHlwZWRlZiBuc3Jlc3VsdCAoKm5zVW5yZWdpc3Rl
clByb2MpKG5zSVN1cHBvcnRzKiBhU2Vydk1nciwgY29uc3QgY2hhciAqcGF0aCk7CiMgNjMgIi4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0NvbXBvbmVudE1hbmFnZXJVdGlscy5oIgpleHRlcm4gbnNyZXN1
bHQKTlNfR2V0R2xvYmFsQ29tcG9uZW50TWFuYWdlcihuc0lDb21wb25lbnRNYW5hZ2VyKiAqcmVz
dWx0KTsKCgoKCgpjbGFzcyBuc0NvbXBvbmVudE1hbmFnZXIgewpwdWJsaWM6CiAgc3RhdGljIG5z
cmVzdWx0IEluaXRpYWxpemUodm9pZCk7CgoKICBzdGF0aWMgbnNyZXN1bHQgRmluZEZhY3Rvcnko
Y29uc3QgbnNDSUQgJmFDbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRmFj
dG9yeSAqKmFGYWN0b3J5KTsKCgogIHN0YXRpYyBuc3Jlc3VsdCBHZXRDbGFzc09iamVjdChjb25z
dCBuc0NJRCAmYUNsYXNzLCBjb25zdCBuc0lJRCAmYUlJRCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdm9pZCAqKmFSZXN1bHQpOwoKCiAgc3RhdGljIG5zcmVzdWx0IENvbnRyYWN0
SURUb0NsYXNzSUQoY29uc3QgY2hhciAqYUNvbnRyYWN0SUQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNDSUQgKmFDbGFzcyk7CgoKCiAgc3RhdGljIG5zcmVzdWx0IENMU0lEVG9D
b250cmFjdElEKG5zQ0lEICphQ2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hhciogKmFDbGFzc05hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciog
KmFDb250cmFjdElEKTsKCgogIHN0YXRpYyBuc3Jlc3VsdCBDcmVhdGVJbnN0YW5jZShjb25zdCBu
c0NJRCAmYUNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0
cyAqYURlbGVnYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0lJ
RCAmYUlJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmFSZXN1bHQp
OwoKCiAgc3RhdGljIG5zcmVzdWx0IENyZWF0ZUluc3RhbmNlKGNvbnN0IGNoYXIgKmFDb250cmFj
dElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyAqYURlbGVn
YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0lJRCAmYUlJRCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmFSZXN1bHQpOwoKCiAgc3Rh
dGljIG5zcmVzdWx0IFJlZ2lzdGVyRmFjdG9yeShjb25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYUNsYXNzTmFtZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFDb250cmFjdElELAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRmFjdG9yeSAqYUZhY3RvcnksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYVJlcGxhY2UpOwojIDExOCAiLi4v
Li4vZGlzdC9pbmNsdWRlL25zQ29tcG9uZW50TWFuYWdlclV0aWxzLmgiCiAgc3RhdGljIG5zcmVz
dWx0IFJlZ2lzdGVyQ29tcG9uZW50KGNvbnN0IG5zQ0lEICZhQ2xhc3MsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphQ2xhc3NOYW1lLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYUNvbnRyYWN0SUQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyICphTGlicmFyeVBlcnNpc3RlbnREZXNjcmlwdG9yLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFSZXBsYWNlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFQZXJzaXN0KTsKCgoKICBzdGF0aWMgbnNyZXN1
bHQgUmVnaXN0ZXJDb21wb25lbnRTcGVjKGNvbnN0IG5zQ0lEICZhQ2xhc3MsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYUNsYXNzTmFtZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphQ29udHJhY3RJRCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGaWxlICphTGlicmFyeSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYVJlcGxhY2UsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFQZXJzaXN0KTsKCgoKCiAgc3RhdGljIG5zcmVz
dWx0IFJlZ2lzdGVyQ29tcG9uZW50TGliKGNvbnN0IG5zQ0lEICZhQ2xhc3MsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFDbGFzc05hbWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFDb250cmFjdElE
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphZGxs
TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFSZXBs
YWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYVBlcnNp
c3QpOwoKCgogIHN0YXRpYyBuc3Jlc3VsdCBVbnJlZ2lzdGVyRmFjdG9yeShjb25zdCBuc0NJRCAm
YUNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGYWN0b3J5ICph
RmFjdG9yeSk7CgoKICBzdGF0aWMgbnNyZXN1bHQgVW5yZWdpc3RlckNvbXBvbmVudChjb25zdCBu
c0NJRCAmYUNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKmFMaWJyYXJ5KTsKCgogIHN0YXRpYyBuc3Jlc3VsdCBVbnJlZ2lzdGVyQ29tcG9uZW50
U3BlYyhjb25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0lGaWxlICphTGlicmFyeVNwZWMpOwoKCiAgc3RhdGljIG5zcmVzdWx0IEZy
ZWVMaWJyYXJpZXModm9pZCk7CgoKCgoKICBzdGF0aWMgbnNyZXN1bHQgQXV0b1JlZ2lzdGVyKFBS
SW50MzIgd2hlbiwgbnNJRmlsZSogZGlyZWN0b3J5KTsKICBzdGF0aWMgbnNyZXN1bHQgQXV0b1Jl
Z2lzdGVyQ29tcG9uZW50KFBSSW50MzIgd2hlbiwgbnNJRmlsZSAqY29tcG9uZW50KTsKICBzdGF0
aWMgbnNyZXN1bHQgQXV0b1VucmVnaXN0ZXJDb21wb25lbnQoUFJJbnQzMiB3aGVuLCBuc0lGaWxl
ICpjb21wb25lbnQpOwoKCiAgc3RhdGljIG5zcmVzdWx0IElzUmVnaXN0ZXJlZChjb25zdCBuc0NJ
RCAmYUNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sICphUmVnaXN0
ZXJlZCk7CgoKICBzdGF0aWMgbnNyZXN1bHQgRW51bWVyYXRlQ0xTSURzKG5zSUVudW1lcmF0b3Iq
KiBhRW11bWVyYXRvcik7CgoKICBzdGF0aWMgbnNyZXN1bHQgRW51bWVyYXRlQ29udHJhY3RJRHMo
bnNJRW51bWVyYXRvcioqIGFFbXVtZXJhdG9yKTsKCn07CgoKY2xhc3MgbnNDcmVhdGVJbnN0YW5j
ZUJ5Q0lEIDogcHVibGljIG5zQ09NUHRyX2hlbHBlcgogICAgICAgIHsKICAgICAgICAgICAgICAg
IHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgbnNDcmVhdGVJbnN0YW5jZUJ5Q0lEKCBj
b25zdCBuc0NJRCYgYUNJRCwgbnNJU3VwcG9ydHMqIGFPdXRlciwgbnNyZXN1bHQqIGFFcnJvclB0
ciApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1DSUQoYUNJRCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1PdXRlcihh
T3V0ZXIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
RXJyb3JQdHIoYUVycm9yUHRyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAg
dmlydHVhbCBuc3Jlc3VsdCBvcGVyYXRvcigpKCBjb25zdCBuc0lJRCYsIHZvaWQqKiApIGNvbnN0
OwoKICAgICAgICAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IG5zQ0lEJiBtQ0lEOwogICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyogbU91dGVy
OwogICAgICAgICAgICAgICAgICAgICAgICBuc3Jlc3VsdCogbUVycm9yUHRyOwogICAgICAgIH07
CgpjbGFzcyBuc0NyZWF0ZUluc3RhbmNlQnlDb250cmFjdElEIDogcHVibGljIG5zQ09NUHRyX2hl
bHBlcgogICAgICAgIHsKICAgICAgICAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgICAgbnNDcmVhdGVJbnN0YW5jZUJ5Q29udHJhY3RJRCggY29uc3QgY2hhciogYUNvbnRyYWN0
SUQsIG5zSVN1cHBvcnRzKiBhT3V0ZXIsIG5zcmVzdWx0KiBhRXJyb3JQdHIgKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtQ29udHJhY3RJRChhQ29udHJhY3RJRCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1PdXRlcihh
T3V0ZXIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
RXJyb3JQdHIoYUVycm9yUHRyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAg
dmlydHVhbCBuc3Jlc3VsdCBvcGVyYXRvcigpKCBjb25zdCBuc0lJRCYsIHZvaWQqKiApIGNvbnN0
OwoKICAgICAgICAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIqIG1Db250cmFjdElEOwogICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyog
bU91dGVyOwogICAgICAgICAgICAgICAgICAgICAgICBuc3Jlc3VsdCogbUVycm9yUHRyOwogICAg
ICAgIH07CgpjbGFzcyBuc0NyZWF0ZUluc3RhbmNlRnJvbUNhdGVnb3J5IDogcHVibGljIG5zQ09N
UHRyX2hlbHBlcgp7CnB1YmxpYzoKICAgIG5zQ3JlYXRlSW5zdGFuY2VGcm9tQ2F0ZWdvcnkoY29u
c3QgY2hhciAqYUNhdGVnb3J5LCBjb25zdCBjaGFyICphRW50cnksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzICphT3V0ZXIsIG5zcmVzdWx0ICphRXJyb3JQdHIp
CiAgICAgICAgOiBtQ2F0ZWdvcnkoYUNhdGVnb3J5KSwKICAgICAgICAgIG1FbnRyeShhRW50cnkp
LAogICAgICAgICAgbUVycm9yUHRyKGFFcnJvclB0cikKICAgIHsKCiAgICB9CiAgICB2aXJ0dWFs
IG5zcmVzdWx0IG9wZXJhdG9yKCkoIGNvbnN0IG5zSUlEJiwgdm9pZCoqICkgY29uc3Q7CiAgICB2
aXJ0dWFsIH5uc0NyZWF0ZUluc3RhbmNlRnJvbUNhdGVnb3J5KCkge307Cgpwcml2YXRlOgogICAg
Y29uc3QgY2hhciAqbUNhdGVnb3J5OwogICAgY29uc3QgY2hhciAqbUVudHJ5OwogICAgbnNJU3Vw
cG9ydHMgKm1PdXRlcjsKICAgIG5zcmVzdWx0ICptRXJyb3JQdHI7Cn07CgppbmxpbmUKY29uc3Qg
bnNDcmVhdGVJbnN0YW5jZUJ5Q0lECmRvX0NyZWF0ZUluc3RhbmNlKCBjb25zdCBuc0NJRCYgYUNJ
RCwgbnNyZXN1bHQqIGVycm9yID0gMCApCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJu
IG5zQ3JlYXRlSW5zdGFuY2VCeUNJRChhQ0lELCAwLCBlcnJvcik7CiAgICAgICAgfQoKaW5saW5l
CmNvbnN0IG5zQ3JlYXRlSW5zdGFuY2VCeUNJRApkb19DcmVhdGVJbnN0YW5jZSggY29uc3QgbnND
SUQmIGFDSUQsIG5zSVN1cHBvcnRzKiBhT3V0ZXIsIG5zcmVzdWx0KiBlcnJvciA9IDAgKQogICAg
ICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBuc0NyZWF0ZUluc3RhbmNlQnlDSUQoYUNJRCwg
YU91dGVyLCBlcnJvcik7CiAgICAgICAgfQoKaW5saW5lCmNvbnN0IG5zQ3JlYXRlSW5zdGFuY2VC
eUNvbnRyYWN0SUQKZG9fQ3JlYXRlSW5zdGFuY2UoIGNvbnN0IGNoYXIqIGFDb250cmFjdElELCBu
c3Jlc3VsdCogZXJyb3IgPSAwICkKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gbnND
cmVhdGVJbnN0YW5jZUJ5Q29udHJhY3RJRChhQ29udHJhY3RJRCwgMCwgZXJyb3IpOwogICAgICAg
IH0KCmlubGluZQpjb25zdCBuc0NyZWF0ZUluc3RhbmNlQnlDb250cmFjdElECmRvX0NyZWF0ZUlu
c3RhbmNlKCBjb25zdCBjaGFyKiBhQ29udHJhY3RJRCwgbnNJU3VwcG9ydHMqIGFPdXRlciwgbnNy
ZXN1bHQqIGVycm9yID0gMCApCiAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIG5zQ3Jl
YXRlSW5zdGFuY2VCeUNvbnRyYWN0SUQoYUNvbnRyYWN0SUQsIGFPdXRlciwgZXJyb3IpOwogICAg
ICAgIH0KCmlubGluZQpjb25zdCBuc0NyZWF0ZUluc3RhbmNlRnJvbUNhdGVnb3J5CmRvX0NyZWF0
ZUluc3RhbmNlRnJvbUNhdGVnb3J5KCBjb25zdCBjaGFyICphQ2F0ZWdvcnksIGNvbnN0IGNoYXIg
KmFFbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zcmVzdWx0ICphRXJyb3JQ
dHIgPSAwKQp7CiAgICByZXR1cm4gbnNDcmVhdGVJbnN0YW5jZUZyb21DYXRlZ29yeShhQ2F0ZWdv
cnksIGFFbnRyeSwgMCwgYUVycm9yUHRyKTsKfQoKaW5saW5lCmNvbnN0IG5zQ3JlYXRlSW5zdGFu
Y2VGcm9tQ2F0ZWdvcnkKZG9fQ3JlYXRlSW5zdGFuY2VGcm9tQ2F0ZWdvcnkoIGNvbnN0IGNoYXIg
KmFDYXRlZ29yeSwgY29uc3QgY2hhciAqYUVudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNJU3VwcG9ydHMgKmFPdXRlciwgbnNyZXN1bHQgKmFFcnJvclB0ciA9IDApCnsKICAg
IHJldHVybiBuc0NyZWF0ZUluc3RhbmNlRnJvbUNhdGVnb3J5KGFDYXRlZ29yeSwgYUVudHJ5LCBh
T3V0ZXIsIGFFcnJvclB0cik7Cn0KCgpleHRlcm4gY29uc3QgY2hhciB4cGNvbUtleU5hbWVbXTsK
ZXh0ZXJuIGNvbnN0IGNoYXIgeHBjb21Db21wb25lbnRzS2V5TmFtZVtdOwpleHRlcm4gY29uc3Qg
Y2hhciBsYXN0TW9kVmFsdWVOYW1lW107CmV4dGVybiBjb25zdCBjaGFyIGZpbGVTaXplVmFsdWVO
YW1lW107CmV4dGVybiBjb25zdCBjaGFyIG5hdGl2ZUNvbXBvbmVudFR5cGVbXTsKIyA2MDMgIi4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiIDIKIyAyOCAiLi4vLi4vZGlz
dC9pbmNsdWRlL25zSVNlcnZpY2VNYW5hZ2VyLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUv
bnNJRC5oIiAxCiMgMjkgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZXJ2aWNlTWFuYWdlci5oIiAy
CgoKCgoKY2xhc3MgbnNJU2h1dGRvd25MaXN0ZW5lcjsKY2xhc3MgbnNJRGlyZWN0b3J5U2Vydmlj
ZVByb3ZpZGVyOwojIDg3ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2VydmljZU1hbmFnZXIuaCIK
Y2xhc3MgbnNJU2VydmljZU1hbmFnZXIgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewpwdWJsaWM6Cgog
ICAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9
IHsgMHhjZjBkZjNiMCwgMHgzNDAxLCAweDExZDIsIHsweDgxLCAweDYzLCAweDAwLCAweDYwLCAw
eDA4LCAweDExLCAweDlkLCAweDdhfSB9OyByZXR1cm4gaWlkO307CgoKCgoKCgogICAgdmlydHVh
bCBuc3Jlc3VsdAogICAgUmVnaXN0ZXJTZXJ2aWNlKGNvbnN0IG5zQ0lEJiBhQ2xhc3MsIG5zSVN1
cHBvcnRzKiBhU2VydmljZSkgPSAwOwojIDExMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNlcnZp
Y2VNYW5hZ2VyLmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0CiAgICBVbnJlZ2lzdGVyU2VydmljZShj
b25zdCBuc0NJRCYgYUNsYXNzKSA9IDA7CgogICAgdmlydHVhbCBuc3Jlc3VsdAogICAgR2V0U2Vy
dmljZShjb25zdCBuc0NJRCYgYUNsYXNzLCBjb25zdCBuc0lJRCYgYUlJRCwKICAgICAgICAgICAg
ICAgbnNJU3VwcG9ydHMqICpyZXN1bHQsCiAgICAgICAgICAgICAgIG5zSVNodXRkb3duTGlzdGVu
ZXIqIHNodXRkb3duTGlzdGVuZXIgPSAwKSA9IDA7CgoKICAgIHZpcnR1YWwgbnNyZXN1bHQKICAg
IFJlbGVhc2VTZXJ2aWNlKGNvbnN0IG5zQ0lEJiBhQ2xhc3MsIG5zSVN1cHBvcnRzKiBzZXJ2aWNl
LAogICAgICAgICAgICAgICAgICAgbnNJU2h1dGRvd25MaXN0ZW5lciogc2h1dGRvd25MaXN0ZW5l
ciA9IDApID0gMDsKCgoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0CiAgICBSZWdpc3RlclNlcnZpY2Uo
Y29uc3QgY2hhciogYUNvbnRyYWN0SUQsIG5zSVN1cHBvcnRzKiBhU2VydmljZSkgPSAwOwoKICAg
IHZpcnR1YWwgbnNyZXN1bHQKICAgIFVucmVnaXN0ZXJTZXJ2aWNlKGNvbnN0IGNoYXIqIGFDb250
cmFjdElEKSA9IDA7CgogICAgdmlydHVhbCBuc3Jlc3VsdAogICAgR2V0U2VydmljZShjb25zdCBj
aGFyKiBhQ29udHJhY3RJRCwgY29uc3QgbnNJSUQmIGFJSUQsCiAgICAgICAgICAgICAgIG5zSVN1
cHBvcnRzKiAqcmVzdWx0LAogICAgICAgICAgICAgICBuc0lTaHV0ZG93bkxpc3RlbmVyKiBzaHV0
ZG93bkxpc3RlbmVyID0gMCkgPSAwOwoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0CiAgICBSZWxlYXNl
U2VydmljZShjb25zdCBjaGFyKiBhQ29udHJhY3RJRCwgbnNJU3VwcG9ydHMqIHNlcnZpY2UsCiAg
ICAgICAgICAgICAgICAgICBuc0lTaHV0ZG93bkxpc3RlbmVyKiBzaHV0ZG93bkxpc3RlbmVyID0g
MCkgPSAwOwoKfTsKIyAxNTggIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZXJ2aWNlTWFuYWdlci5o
IgpjbGFzcyBuc0lTaHV0ZG93bkxpc3RlbmVyIDogcHVibGljIG5zSVN1cHBvcnRzIHsKcHVibGlj
OgoKICAgIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBp
aWQgPSB7IDB4NTZkZWNhZTAsIDB4MzQwNiwgMHgxMWQyLCB7MHg4MSwgMHg2MywgMHgwMCwgMHg2
MCwgMHgwOCwgMHgxMSwgMHg5ZCwgMHg3YX0gfTsgcmV0dXJuIGlpZDt9OwoKICAgIHZpcnR1YWwg
bnNyZXN1bHQKICAgIE9uU2h1dGRvd24oY29uc3QgbnNDSUQmIGFDbGFzcywgbnNJU3VwcG9ydHMq
IHNlcnZpY2UpID0gMDsKCn07CgoKCgpjbGFzcyBuc1NlcnZpY2VNYW5hZ2VyIHsKcHVibGljOgoK
ICAgIHN0YXRpYyBuc3Jlc3VsdAogICAgUmVnaXN0ZXJTZXJ2aWNlKGNvbnN0IG5zQ0lEJiBhQ2xh
c3MsIG5zSVN1cHBvcnRzKiBhU2VydmljZSk7CgogICAgc3RhdGljIG5zcmVzdWx0CiAgICBVbnJl
Z2lzdGVyU2VydmljZShjb25zdCBuc0NJRCYgYUNsYXNzKTsKCiAgICBzdGF0aWMgbnNyZXN1bHQK
ICAgIEdldFNlcnZpY2UoY29uc3QgbnNDSUQmIGFDbGFzcywgY29uc3QgbnNJSUQmIGFJSUQsCiAg
ICAgICAgICAgICAgIG5zSVN1cHBvcnRzKiAqcmVzdWx0LAogICAgICAgICAgICAgICBuc0lTaHV0
ZG93bkxpc3RlbmVyKiBzaHV0ZG93bkxpc3RlbmVyID0gMCk7CgoKICAgIHN0YXRpYyBuc3Jlc3Vs
dAogICAgUmVsZWFzZVNlcnZpY2UoY29uc3QgbnNDSUQmIGFDbGFzcywgbnNJU3VwcG9ydHMqIHNl
cnZpY2UsCiAgICAgICAgICAgICAgICAgICBuc0lTaHV0ZG93bkxpc3RlbmVyKiBzaHV0ZG93bkxp
c3RlbmVyID0gMCk7CgoKCgogICAgc3RhdGljIG5zcmVzdWx0CiAgICBSZWdpc3RlclNlcnZpY2Uo
Y29uc3QgY2hhciogYUNvbnRyYWN0SUQsIG5zSVN1cHBvcnRzKiBhU2VydmljZSk7CgogICAgc3Rh
dGljIG5zcmVzdWx0CiAgICBVbnJlZ2lzdGVyU2VydmljZShjb25zdCBjaGFyKiBhQ29udHJhY3RJ
RCk7CgogICAgc3RhdGljIG5zcmVzdWx0CiAgICBHZXRTZXJ2aWNlKGNvbnN0IGNoYXIqIGFDb250
cmFjdElELCBjb25zdCBuc0lJRCYgYUlJRCwKICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMqICpy
ZXN1bHQsCiAgICAgICAgICAgICAgIG5zSVNodXRkb3duTGlzdGVuZXIqIHNodXRkb3duTGlzdGVu
ZXIgPSAwKTsKCgogICAgc3RhdGljIG5zcmVzdWx0CiAgICBSZWxlYXNlU2VydmljZShjb25zdCBj
aGFyKiBhQ29udHJhY3RJRCwgbnNJU3VwcG9ydHMqIHNlcnZpY2UsCiAgICAgICAgICAgICAgICAg
ICBuc0lTaHV0ZG93bkxpc3RlbmVyKiBzaHV0ZG93bkxpc3RlbmVyID0gMCk7CgoKCiAgICBzdGF0
aWMgbnNyZXN1bHQgR2V0R2xvYmFsU2VydmljZU1hbmFnZXIobnNJU2VydmljZU1hbmFnZXIqICpy
ZXN1bHQpOwoKCgogICAgc3RhdGljIG5zcmVzdWx0IFNodXRkb3duR2xvYmFsU2VydmljZU1hbmFn
ZXIobnNJU2VydmljZU1hbmFnZXIqICpyZXN1bHQpOwp9OwoKCgoKY2xhc3MgbnNHZXRTZXJ2aWNl
QnlDSUQgOiBwdWJsaWMgbnNDT01QdHJfaGVscGVyCiAgewogICAgcHVibGljOgogICAgICBuc0dl
dFNlcnZpY2VCeUNJRCggY29uc3QgbnNDSUQmIGFDSUQsIG5zSVN1cHBvcnRzKiBhU2VydmljZU1h
bmFnZXIsIG5zcmVzdWx0KiBhRXJyb3JQdHIgKQogICAgICAgICAgOiBtQ0lEKGFDSUQpLAogICAg
ICAgICAgICBtU2VydmljZU1hbmFnZXIoIGRvX1F1ZXJ5SW50ZXJmYWNlKGFTZXJ2aWNlTWFuYWdl
cikgKSwKICAgICAgICAgICAgbUVycm9yUHRyKGFFcnJvclB0cikKICAgICAgICB7CgogICAgICAg
IH0KCiAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IG9wZXJhdG9yKCkoIGNvbnN0IG5zSUlEJiwg
dm9pZCoqICkgY29uc3Q7CiAgICAgICAgdmlydHVhbCB+bnNHZXRTZXJ2aWNlQnlDSUQoKSB7fTsK
CiAgICBwcml2YXRlOgogICAgICBjb25zdCBuc0NJRCYgbUNJRDsKICAgICAgbnNDT01QdHI8bnNJ
U2VydmljZU1hbmFnZXI+IG1TZXJ2aWNlTWFuYWdlcjsKICAgICAgbnNyZXN1bHQqIG1FcnJvclB0
cjsKICB9OwoKaW5saW5lCmNvbnN0IG5zR2V0U2VydmljZUJ5Q0lECmRvX0dldFNlcnZpY2UoIGNv
bnN0IG5zQ0lEJiBhQ0lELCBuc3Jlc3VsdCogZXJyb3IgPSAwICkKICB7CiAgICByZXR1cm4gbnNH
ZXRTZXJ2aWNlQnlDSUQoYUNJRCwgMCwgZXJyb3IpOwogIH0KCmlubGluZQpjb25zdCBuc0dldFNl
cnZpY2VCeUNJRApkb19HZXRTZXJ2aWNlKCBjb25zdCBuc0NJRCYgYUNJRCwgbnNJU3VwcG9ydHMq
IGFTZXJ2aWNlTWFuYWdlciwgbnNyZXN1bHQqIGVycm9yID0gMCApCiAgewogICAgcmV0dXJuIG5z
R2V0U2VydmljZUJ5Q0lEKGFDSUQsIGFTZXJ2aWNlTWFuYWdlciwgZXJyb3IpOwogIH0KCmNsYXNz
IG5zR2V0U2VydmljZUJ5Q29udHJhY3RJRCA6IHB1YmxpYyBuc0NPTVB0cl9oZWxwZXIKICB7CiAg
ICBwdWJsaWM6CiAgICAgIG5zR2V0U2VydmljZUJ5Q29udHJhY3RJRCggY29uc3QgY2hhciogYUNv
bnRyYWN0SUQsIG5zSVN1cHBvcnRzKiBhU2VydmljZU1hbmFnZXIsIG5zcmVzdWx0KiBhRXJyb3JQ
dHIgKQogICAgICAgICAgOiBtQ29udHJhY3RJRChhQ29udHJhY3RJRCksCiAgICAgICAgICAgIG1T
ZXJ2aWNlTWFuYWdlciggZG9fUXVlcnlJbnRlcmZhY2UoYVNlcnZpY2VNYW5hZ2VyKSApLAogICAg
ICAgICAgICBtRXJyb3JQdHIoYUVycm9yUHRyKQogICAgICAgIHsKCiAgICAgICAgfQoKICAgICAg
ICAgIHZpcnR1YWwgbnNyZXN1bHQgb3BlcmF0b3IoKSggY29uc3QgbnNJSUQmLCB2b2lkKiogKSBj
b25zdDsKCiAgICAgICAgdmlydHVhbCB+bnNHZXRTZXJ2aWNlQnlDb250cmFjdElEKCkge307Cgog
ICAgcHJpdmF0ZToKICAgICAgY29uc3QgY2hhciogbUNvbnRyYWN0SUQ7CiAgICAgIG5zQ09NUHRy
PG5zSVNlcnZpY2VNYW5hZ2VyPiBtU2VydmljZU1hbmFnZXI7CiAgICAgIG5zcmVzdWx0KiBtRXJy
b3JQdHI7CiAgfTsKCmlubGluZQpjb25zdCBuc0dldFNlcnZpY2VCeUNvbnRyYWN0SUQKZG9fR2V0
U2VydmljZSggY29uc3QgY2hhciogYUNvbnRyYWN0SUQsIG5zcmVzdWx0KiBlcnJvciA9IDAgKQog
IHsKICAgIHJldHVybiBuc0dldFNlcnZpY2VCeUNvbnRyYWN0SUQoYUNvbnRyYWN0SUQsIDAsIGVy
cm9yKTsKICB9CgppbmxpbmUKY29uc3QgbnNHZXRTZXJ2aWNlQnlDb250cmFjdElECmRvX0dldFNl
cnZpY2UoIGNvbnN0IGNoYXIqIGFDb250cmFjdElELCBuc0lTdXBwb3J0cyogYVNlcnZpY2VNYW5h
Z2VyLCBuc3Jlc3VsdCogZXJyb3IgPSAwICkKICB7CiAgICByZXR1cm4gbnNHZXRTZXJ2aWNlQnlD
b250cmFjdElEKGFDb250cmFjdElELCBhU2VydmljZU1hbmFnZXIsIGVycm9yKTsKICB9CgpjbGFz
cyBuc0dldFNlcnZpY2VGcm9tQ2F0ZWdvcnkgOiBwdWJsaWMgbnNDT01QdHJfaGVscGVyCnsKcHVi
bGljOgogIG5zR2V0U2VydmljZUZyb21DYXRlZ29yeShjb25zdCBjaGFyKiBhQ2F0ZWdvcnksIGNv
bnN0IGNoYXIqIGFFbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMq
IGFTZXJ2aWNlTWFuYWdlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNyZXN1bHQqIGFF
cnJvclB0cikKICAgIDogbUNhdGVnb3J5KGFDYXRlZ29yeSksCiAgICAgIG1FbnRyeShhRW50cnkp
LAogICAgICBtU2VydmljZU1hbmFnZXIoIGRvX1F1ZXJ5SW50ZXJmYWNlKGFTZXJ2aWNlTWFuYWdl
cikgKSwKICAgICAgbUVycm9yUHRyKGFFcnJvclB0cikKICB7CgogIH0KCiAgdmlydHVhbCBuc3Jl
c3VsdCBvcGVyYXRvcigpKCBjb25zdCBuc0lJRCYsIHZvaWQqKiApIGNvbnN0OwogIHZpcnR1YWwg
fm5zR2V0U2VydmljZUZyb21DYXRlZ29yeSgpIHt9Owpwcm90ZWN0ZWQ6CiAgY29uc3QgY2hhciog
bUNhdGVnb3J5OwogIGNvbnN0IGNoYXIqIG1FbnRyeTsKICBuc0NPTVB0cjxuc0lTZXJ2aWNlTWFu
YWdlcj4gbVNlcnZpY2VNYW5hZ2VyOwogIG5zcmVzdWx0KiBtRXJyb3JQdHI7Cn07CgppbmxpbmUK
Y29uc3QgbnNHZXRTZXJ2aWNlRnJvbUNhdGVnb3J5CmRvX0dldFNlcnZpY2VGcm9tQ2F0ZWdvcnko
IGNvbnN0IGNoYXIqIGNhdGVnb3J5LCBjb25zdCBjaGFyKiBlbnRyeSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNyZXN1bHQqIGVycm9yID0gMCkKICB7CiAgICByZXR1cm4gbnNHZXRTZXJ2
aWNlRnJvbUNhdGVnb3J5KGNhdGVnb3J5LCBlbnRyeSwgMCwgZXJyb3IpOwogIH0KIyAzNTYgIi4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lTZXJ2aWNlTWFuYWdlci5oIgpleHRlcm4gbnNyZXN1bHQKTlNf
TmV3U2VydmljZU1hbmFnZXIobnNJU2VydmljZU1hbmFnZXIqICpyZXN1bHQpOwojIDM2OSAiLi4v
Li4vZGlzdC9pbmNsdWRlL25zSVNlcnZpY2VNYW5hZ2VyLmgiCmV4dGVybiBuc3Jlc3VsdApOU19J
bml0WFBDT00obnNJU2VydmljZU1hbmFnZXIqICpyZXN1bHQsIG5zSUZpbGUqIGJpbkRpcmVjdG9y
eSk7CgoKCgpleHRlcm4gbnNyZXN1bHQKTlNfSW5pdFhQQ09NMihuc0lTZXJ2aWNlTWFuYWdlciog
KnJlc3VsdCwgbnNJRmlsZSogYmluRGlyZWN0b3J5LCBuc0lEaXJlY3RvcnlTZXJ2aWNlUHJvdmlk
ZXIqIGFwcEZpbGVMb2NhdGlvblByb3ZpZGVyKTsKIyAzODYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lTZXJ2aWNlTWFuYWdlci5oIgpleHRlcm4gbnNyZXN1bHQKTlNfU2h1dGRvd25YUENPTShuc0lT
ZXJ2aWNlTWFuYWdlciogc2Vydk1ncik7CiMgODMyICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRmls
ZS5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByb3BlcnRpZXMuaCIgMQojIDI1ICIu
Li8uLi9kaXN0L2luY2x1ZGUvbnNJUHJvcGVydGllcy5oIgpjbGFzcyBuc0lQcm9wZXJ0aWVzIDog
cHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJ
SUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDYxYzFiM2MwLCAweGIxYmYsIDB4MTFk
MywgeyAweDkzLCAweGI2LCAweDAwLCAweDEwLCAweDRiLCAweGEwLCAweGZkLCAweDQwIH19OyBy
ZXR1cm4gaWlkO30KCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEZWZpbmUoY29uc3QgY2hhciAq
cHJvcCwgbnNJU3VwcG9ydHMgKmluaXRpYWxWYWx1ZSkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5z
cmVzdWx0IFVuZGVmaW5lKGNvbnN0IGNoYXIgKnByb3ApID0gMDsKCgoKCgoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXQoY29uc3QgY2hhciAqcHJvcCwgY29uc3QgbnNJSUQgJiB1dWlkLCB2b2lkICog
KnJlc3VsdCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldChjb25zdCBjaGFyICpw
cm9wLCBuc0lTdXBwb3J0cyAqdmFsdWUpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSGFz
KGNvbnN0IGNoYXIgKnByb3AsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKfTsKIyAxNjUgIi4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lQcm9wZXJ0aWVzLmgiCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25z
SUNvbXBvbmVudE1hbmFnZXIuaCIgMQojIDE2NiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVByb3Bl
cnRpZXMuaCIgMgppbmxpbmUgbnNyZXN1bHQKTlNfTmV3SVByb3BlcnRpZXMobnNJU3VwcG9ydHMq
IG91dGVyLCBuc0lQcm9wZXJ0aWVzKiAqcmVzdWx0KQp7CiAgICBzdGF0aWMgY29uc3QgbnNDSUQg
a1Byb3BlcnRpZXNDSUQgPSB7IDB4NGRlMmJjOTAsIDB4YjFiZiwgMHgxMWQzLCB7MHg5MywgMHhi
NiwgMHgwMCwgMHgxMCwgMHg0YiwgMHhhMCwgMHhmZCwgMHg0MH0gfTsKICAgIHJldHVybiBuc0Nv
bXBvbmVudE1hbmFnZXI6OkNyZWF0ZUluc3RhbmNlKGtQcm9wZXJ0aWVzQ0lELAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZXIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0NPTVR5cGVJbmZvPG5zSVByb3BlcnRp
ZXM+OjpHZXRJSUQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICh2b2lkKiopcmVzdWx0KTsKfQojIDgzMyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZpbGUu
aCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIiAxCiMgODM0ICIuLi8uLi9k
aXN0L2luY2x1ZGUvbnNJRmlsZS5oIiAyCgppbmxpbmUgbnNyZXN1bHQKTlNfR2V0U3BlY2lhbERp
cmVjdG9yeShjb25zdCBjaGFyKiBzcGVjaWFsRGlyTmFtZSwgbnNJRmlsZSogKnJlc3VsdCkKewog
ICAgbnNyZXN1bHQgcnY7CiAgICBzdGF0aWMgY29uc3QgbnNDSUQga0RpcmVjdG9yeVNlcnZpY2VD
SUQgPSB7MHhmMDAxNTJkMCwweGI0MGIsMHgxMWQzLHsweDhjLCAweDljLCAweDAwLCAweDAwLCAw
eDY0LCAweDY1LCAweDczLCAweDc0fX07CiAgICBuc0NPTVB0cjxuc0lQcm9wZXJ0aWVzPiBzZXJ2
ID0gZG9fR2V0U2VydmljZShrRGlyZWN0b3J5U2VydmljZUNJRCwgJnJ2KTs7CiAgICBpZiAoKChy
dikgJiAweDgwMDAwMDAwKSkgcmV0dXJuIHJ2OwogICAgbnNDT01QdHI8bnNJU3VwcG9ydHM+IGRp
cjsKICAgIHJ2ID0gc2Vydi0+R2V0KHNwZWNpYWxEaXJOYW1lLCBuc0NPTVR5cGVJbmZvPG5zSUZp
bGU+OjpHZXRJSUQoKSwgZ2V0dGVyX0FkZFJlZnMoZGlyKSk7CiAgICBpZiAoKChydikgJiAweDgw
MDAwMDAwKSkgcmV0dXJuIHJ2OwogICAgKnJlc3VsdCA9IChuc0lGaWxlKilkaXIuZ2V0KCk7CiAg
ICBpZiAoKnJlc3VsdCkKICAgICAgICAoKnJlc3VsdCktPkFkZFJlZigpOwogICAgcmV0dXJuIDA7
Cn0KIyAxOSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSU1vZHVsZS5oIiAyCiMgMzcgIi4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lNb2R1bGUuaCIKY2xhc3MgbnNJTW9kdWxlIDogcHVibGljIG5zSVN1cHBv
cnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNv
bnN0IG5zSUlEIGlpZCA9IHsweDczOTJkMDMyLCAweDUzNzEsIDB4MTFkMywgeyAweDk5LCAweDRl
LCAweDAwLCAweDgwLCAweDVmLCAweGQyLCAweDZmLCAweGVlIH19OyByZXR1cm4gaWlkO30KCgog
IHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2xhc3NPYmplY3QobnNJQ29tcG9uZW50TWFuYWdlciAqYUNv
bXBNZ3IsIGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBjb25zdCBuc0lJRCAmIGFJSUQsIHZvaWQgKiAq
cmVzdWx0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZ2lzdGVyU2VsZihuc0lDb21wb25l
bnRNYW5hZ2VyICphQ29tcE1nciwgbnNJRmlsZSAqbG9jYXRpb24sIGNvbnN0IGNoYXIgKnJlZ2lz
dHJ5TG9jYXRpb24sIGNvbnN0IGNoYXIgKmNvbXBvbmVudFR5cGUpID0gMDsKCgogIHZpcnR1YWwg
bnNyZXN1bHQgVW5yZWdpc3RlclNlbGYobnNJQ29tcG9uZW50TWFuYWdlciAqYUNvbXBNZ3IsIG5z
SUZpbGUgKmxvY2F0aW9uLCBjb25zdCBjaGFyICpyZWdpc3RyeUxvY2F0aW9uKSA9IDA7CgoKICB2
aXJ0dWFsIG5zcmVzdWx0IENhblVubG9hZChuc0lDb21wb25lbnRNYW5hZ2VyICphQ29tcE1nciwg
UFJCb29sICpfcmV0dmFsKSA9IDA7Cgp9OwojIDEzNSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSU1v
ZHVsZS5oIgpleHRlcm4gIkMiIG5zcmVzdWx0IE5TR2V0TW9kdWxlKG5zSUNvbXBvbmVudE1hbmFn
ZXIgKmFDb21wTWdyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0lGaWxlKiBsb2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNJTW9kdWxlKiogcmV0dXJuX2NvYmopOwp0eXBlZGVmIG5zcmVzdWx0ICgqbnNHZXRNb2R1
bGVQcm9jKShuc0lDb21wb25lbnRNYW5hZ2VyICphQ29tcE1nciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnNJRmlsZSogbG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zSU1vZHVsZSoqIHJldHVybl9jb2JqKTsKIyA2NCAiLi4vLi4vZGlz
dC9pbmNsdWRlL25zSUdlbmVyaWNGYWN0b3J5LmgiIDIKCnR5cGVkZWYgbnNyZXN1bHQgKCogTlND
b25zdHJ1Y3RvclByb2NQdHIpIChuc0lTdXBwb3J0cyAqYU91dGVyLCBjb25zdCBuc0lJRCYgYUlJ
RCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiphUmVz
dWx0KTsKCnR5cGVkZWYgbnNyZXN1bHQgKCogTlNSZWdpc3RlclNlbGZQcm9jUHRyKSAobnNJQ29t
cG9uZW50TWFuYWdlciAqYUNvbXBNZ3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNJRmlsZSAqYVBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcmVnaXN0cnlMb2NhdGlvbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb21wb25lbnRUeXBl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zTW9k
dWxlQ29tcG9uZW50SW5mbyAqaW5mbyk7Cgp0eXBlZGVmIG5zcmVzdWx0ICgqIE5TVW5yZWdpc3Rl
clNlbGZQcm9jUHRyKSAobnNJQ29tcG9uZW50TWFuYWdlciAqYUNvbXBNZ3IsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGaWxlICphUGF0aCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJlZ2lz
dHJ5TG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBuc01vZHVsZUNvbXBvbmVudEluZm8gKmluZm8pOwoKdHlwZWRlZiBuc3Jlc3VsdCAo
KiBOU0ZhY3RvcnlEZXN0cnVjdG9yUHJvY1B0cikgKHZvaWQpOwoKdHlwZWRlZiBuc3Jlc3VsdCAo
KiBOU0dldEludGVyZmFjZXNQcm9jUHRyKSAoUFJVaW50MzIgKmNvdW50cCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJSUQqICoqYXJyYXkpOwoKdHlwZWRl
ZiBuc3Jlc3VsdCAoKiBOU0dldExhbmd1YWdlSGVscGVyUHJvY1B0cikgKFBSVWludDMyIGxhbmd1
YWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ
U3VwcG9ydHMgKipoZWxwZXIpOwoKCgoKCgoKc3RydWN0IG5zTW9kdWxlQ29tcG9uZW50SW5mbyB7
CiAgICBjb25zdCBjaGFyKiBtRGVzY3JpcHRpb247CiAgICBuc0NJRCBtQ0lEOwogICAgY29uc3Qg
Y2hhciogbUNvbnRyYWN0SUQ7CiAgICBOU0NvbnN0cnVjdG9yUHJvY1B0ciBtQ29uc3RydWN0b3I7
CiAgICBOU1JlZ2lzdGVyU2VsZlByb2NQdHIgbVJlZ2lzdGVyU2VsZlByb2M7CiAgICBOU1VucmVn
aXN0ZXJTZWxmUHJvY1B0ciBtVW5yZWdpc3RlclNlbGZQcm9jOwogICAgTlNGYWN0b3J5RGVzdHJ1
Y3RvclByb2NQdHIgbUZhY3RvcnlEZXN0cnVjdG9yOwogICAgTlNHZXRJbnRlcmZhY2VzUHJvY1B0
ciBtR2V0SW50ZXJmYWNlc1Byb2M7CiAgICBOU0dldExhbmd1YWdlSGVscGVyUHJvY1B0ciBtR2V0
TGFuZ3VhZ2VIZWxwZXJQcm9jOwogICAgbnNJQ2xhc3NJbmZvICoqIG1DbGFzc0luZm9HbG9iYWw7
CiAgICBQUlVpbnQzMiBtRmxhZ3M7Cn07Cgp0eXBlZGVmIHZvaWQgKCAqbnNNb2R1bGVEZXN0cnVj
dG9yUHJvYykgKG5zSU1vZHVsZSAqc2VsZik7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3R2VuZXJp
Y01vZHVsZShjb25zdCBjaGFyKiBtb2R1bGVOYW1lLAogICAgICAgICAgICAgICAgICAgIFBSVWlu
dDMyIGNvbXBvbmVudENvdW50LAogICAgICAgICAgICAgICAgICAgIG5zTW9kdWxlQ29tcG9uZW50
SW5mbyogY29tcG9uZW50cywKICAgICAgICAgICAgICAgICAgICBuc01vZHVsZURlc3RydWN0b3JQ
cm9jIGR0b3IsCiAgICAgICAgICAgICAgICAgICAgbnNJTW9kdWxlKiAqcmVzdWx0KTsKIyAyOCAi
bnNTb2Z0d2FyZVVwZGF0ZS5jcHAiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRmFjdG9y
eS5oIiAxCiMgMjkgIm5zU29mdHdhcmVVcGRhdGUuY3BwIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNs
dWRlL25zSVN1cHBvcnRzLmgiIDEKIyAzMCAibnNTb2Z0d2FyZVVwZGF0ZS5jcHAiIDIKIyAxICIu
Li8uLi9kaXN0L2luY2x1ZGUvbnNJQ29tcG9uZW50TWFuYWdlci5oIiAxCiMgMzEgIm5zU29mdHdh
cmVVcGRhdGUuY3BwIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNlcnZpY2VNYW5hZ2Vy
LmgiIDEKIyAzMiAibnNTb2Z0d2FyZVVwZGF0ZS5jcHAiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1
ZGUvbnNJQ2F0ZWdvcnlNYW5hZ2VyLmgiIDEKIyAxOCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNh
dGVnb3J5TWFuYWdlci5oIgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDYXRlZ29yeUhhbmRs
ZXIuaCIgMQojIDI1ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ2F0ZWdvcnlIYW5kbGVyLmgiCmNs
YXNzIG5zSUNhdGVnb3J5SGFuZGxlciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6Cgog
IHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7
MHg5YzFhZjgyMiwgMHgxZGQxLCAweDExYjIsIHsgMHhiOCwgMHhjZSwgMHhhMSwgMHhkMiwgMHgz
MSwgMHhjNywgMHg5NSwgMHgzZiB9fTsgcmV0dXJuIGlpZDt9CgoKCgoKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0Q2F0ZWdvcnlFbnRyeShjb25zdCBjaGFyICpjYXRlZ29yeSwgY29uc3QgY2hhciAq
ZW50cnksIGNoYXIgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDE5ICIuLi8uLi9kaXN0L2luY2x1ZGUv
bnNJQ2F0ZWdvcnlNYW5hZ2VyLmgiIDIKIyAzNyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNhdGVn
b3J5TWFuYWdlci5oIgpjbGFzcyBuc0lDYXRlZ29yeU1hbmFnZXIgOiBwdWJsaWMgbnNJU3VwcG9y
dHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29u
c3QgbnNJSUQgaWlkID0gezB4NWExZTFhMmMsIDB4MWRkMiwgMHgxMWIyLCB7IDB4YTcsIDB4MmYs
IDB4OTYsIDB4NzMsIDB4NTcsIDB4ZTQsIDB4M2EsIDB4MDAgfX07IHJldHVybiBpaWQ7fQojIDQ5
ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ2F0ZWdvcnlNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRDYXRlZ29yeUVudHJ5KGNvbnN0IGNoYXIgKmFDYXRlZ29yeSwgY29uc3QgY2hhciAq
YUVudHJ5LCBjaGFyICoqX3JldHZhbCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
Q2F0ZWdvcnlFbnRyeVJhdyhjb25zdCBjaGFyICphQ2F0ZWdvcnksIGNvbnN0IGNoYXIgKmFFbnRy
eSwgY2hhciAqKl9yZXR2YWwpID0gMDsKIyA2OCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNhdGVn
b3J5TWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQWRkQ2F0ZWdvcnlFbnRyeShjb25zdCBj
aGFyICphQ2F0ZWdvcnksIGNvbnN0IGNoYXIgKmFFbnRyeSwgY29uc3QgY2hhciAqYVZhbHVlLCBQ
UkJvb2wgYVBlcnNpc3QsIFBSQm9vbCBhUmVwbGFjZSwgY2hhciAqKl9yZXR2YWwpID0gMDsKIyA3
OCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNhdGVnb3J5TWFuYWdlci5oIgogIHZpcnR1YWwgbnNy
ZXN1bHQgRGVsZXRlQ2F0ZWdvcnlFbnRyeShjb25zdCBjaGFyICphQ2F0ZWdvcnksIGNvbnN0IGNo
YXIgKmFFbnRyeSwgUFJCb29sIGFQZXJzaXN0LCBjaGFyICoqX3JldHZhbCkgPSAwOwoKCgoKCgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IERlbGV0ZUNhdGVnb3J5KGNvbnN0IGNoYXIgKmFDYXRlZ29yeSkg
PSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRW51bWVyYXRlQ2F0ZWdvcnkoY29uc3QgY2hh
ciAqYUNhdGVnb3J5LCBuc0lTaW1wbGVFbnVtZXJhdG9yICoqX3JldHZhbCkgPSAwOwoKCgoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRDYXRlZ29yeUNvbnRlbnRzKGNvbnN0IGNoYXIgKmNhdGVnb3J5
LCBjaGFyICoqKmVudHJpZXMsIGNoYXIgKioqdmFsdWVzLCBQUlVpbnQzMiAqY291bnQpID0gMDsK
CiAgZW51bSB7IE9WRVJSSURFID0gMCB9OwoKICBlbnVtIHsgRkFMTEJBQ0sgPSAxIH07CgoKICB2
aXJ0dWFsIG5zcmVzdWx0IFJlZ2lzdGVyQ2F0ZWdvcnlIYW5kbGVyKGNvbnN0IGNoYXIgKmFDYXRl
Z29yeSwgbnNJQ2F0ZWdvcnlIYW5kbGVyICphSGFuZGxlciwgUFJJbnQzMiBhTW9kZSwgbnNJQ2F0
ZWdvcnlIYW5kbGVyICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBVbnJlZ2lz
dGVyQ2F0ZWdvcnlIYW5kbGVyKGNvbnN0IGNoYXIgKmNhdGVnb3J5LCBuc0lDYXRlZ29yeUhhbmRs
ZXIgKmhhbmRsZXIsIG5zSUNhdGVnb3J5SGFuZGxlciAqcHJldmlvdXMpID0gMDsKCn07CiMgMjQx
ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ2F0ZWdvcnlNYW5hZ2VyLmgiCmV4dGVybiAiQyIgbnNy
ZXN1bHQgTlNfQ2F0ZWdvcnlNYW5hZ2VyR2V0RmFjdG9yeSggbnNJRmFjdG9yeSoqICk7CiMgMzMg
Im5zU29mdHdhcmVVcGRhdGUuY3BwIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRy
LmgiIDEKIyAzNCAibnNTb2Z0d2FyZVVwZGF0ZS5jcHAiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1
ZGUvbnNDUlQuaCIgMQojIDI1ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNDUlQuaCIKIyAxICIvdXNy
L2luY2x1ZGUvc3RkbGliLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKIyAx
ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9zdGRsaWIu
aCIgMiAzCgoKCgoKCgojIDEgIi91c3IvZ2NjLXByZTMuMC9saWIvZ2NjLWxpYi9pYTY0LWhwLWxp
bnV4LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o
IiAyIDMKCmV4dGVybiAiQyIgewoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRmbGFn
cy5oIiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKIyAxICIvdXNyL2luY2x1
ZGUvYml0cy93YWl0c3RhdHVzLmgiIDEgMwojIDYzICIvdXNyL2luY2x1ZGUvYml0cy93YWl0c3Rh
dHVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDEgMwojIDY0ICIvdXNyL2luY2x1
ZGUvYml0cy93YWl0c3RhdHVzLmgiIDIgMwoKdW5pb24gd2FpdAogIHsKICAgIGludCB3X3N0YXR1
czsKICAgIHN0cnVjdAogICAgICB7CgogICAgICAgIHVuc2lnbmVkIGludCBfX3dfdGVybXNpZzo3
OwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfY29yZWR1bXA6MTsKICAgICAgICB1bnNpZ25lZCBp
bnQgX193X3JldGNvZGU6ODsKICAgICAgICB1bnNpZ25lZCBpbnQ6MTY7CgoKCgoKCgogICAgICB9
IF9fd2FpdF90ZXJtaW5hdGVkOwogICAgc3RydWN0CiAgICAgIHsKCiAgICAgICAgdW5zaWduZWQg
aW50IF9fd19zdG9wdmFsOjg7CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19zdG9wc2lnOjg7CiAg
ICAgICAgdW5zaWduZWQgaW50OjE2OwoKCgoKCgogICAgICB9IF9fd2FpdF9zdG9wcGVkOwogIH07
CiMgNDQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCiMgOTQgIi91c3IvaW5jbHVkZS9zdGRs
aWIuaCIgMwp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBxdW90OwogICAgaW50IHJlbTsKICB9
IGRpdl90OwoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgaW50IHF1b3Q7CiAgICBsb25n
IGludCByZW07CiAgfSBsZGl2X3Q7CgoKCgoKX19leHRlbnNpb25fXyB0eXBlZGVmIHN0cnVjdAog
IHsKICAgIGxvbmcgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcgbG9uZyBpbnQgcmVtOwogIH0gbGxk
aXZfdDsKIyAxMzMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gc2l6ZV90IF9fY3R5
cGVfZ2V0X21iX2N1cl9tYXggKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGF0b2Yg
KF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p
KTsKCmV4dGVybiBpbnQgYXRvaSAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGxvbmcgaW50IGF0b2wgKF9fY29uc3QgY2hh
ciAqX19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKX19leHRl
bnNpb25fXyBleHRlcm4gbG9uZyBsb25nIGludCBhdG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIp
CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBkb3Vi
bGUgc3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg
ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgpleHRlcm4g
ZmxvYXQgc3RydG9mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg
ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgpleHRlcm4g
bG9uZyBkb3VibGUgc3RydG9sZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGxvbmcgaW50IHN0cnRvbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw
dHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRv
dWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAg
ICB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b3Eg
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoK
X19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VxIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0
aHJvdyAoKTsKCgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b2xs
IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7
CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdWxsIChf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAg
ICAgdGhyb3cgKCk7CiMgMjExICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKIyAxICIvdXNyL2lu
Y2x1ZGUveGxvY2FsZS5oIiAxIDMKIyAyMTIgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoK
CmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw
dHIsIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9f
bG9jKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3N0cnRvdWxfbCAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAo
KTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19zdHJ0b2xsX2wgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKX19leHRl
bnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3N0cnRvdWxsX2wgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xv
YykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgX19zdHJ0b2RfbCAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVy
biBmbG9hdCBfX3N0cnRvZl9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxl
X3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9sIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIF9f
c3RydG9kX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50
IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBfX3N0cnRvZl9pbnRlcm5hbCAo
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhy
b3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBfX3N0cnRvbGRfaW50ZXJuYWwgKF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBpbnQgX19z
dHJ0b2xfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXAp
IHRocm93ICgpOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0b3VsX2ludGVybmFs
IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9f
Z3JvdXApIHRocm93ICgpOwoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBf
X3N0cnRvbGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFz
ZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25l
ZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3Qg
X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApCiAgICAgdGhy
b3cgKCk7CiMgMzg1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmw2NGEg
KGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IGE2NGwgKF9fY29uc3Qg
Y2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgojIDEgIi91
c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMzkyICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi
IDIgMwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgcmFuZG9tICh2b2lkKSB0aHJvdyAoKTsKCgpleHRl
cm4gdm9pZCBzcmFuZG9tICh1bnNpZ25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gY2hhciAqaW5pdHN0YXRlICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3N0YXRlYnVm
LAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGF0ZWxlbikgdGhyb3cgKCk7CgoK
CmV4dGVybiBjaGFyICpzZXRzdGF0ZSAoY2hhciAqX19zdGF0ZWJ1ZikgdGhyb3cgKCk7CgoKCgoK
CgpzdHJ1Y3QgcmFuZG9tX2RhdGEKICB7CiAgICBpbnQzMl90ICpmcHRyOwogICAgaW50MzJfdCAq
cnB0cjsKICAgIGludDMyX3QgKnN0YXRlOwogICAgaW50IHJhbmRfdHlwZTsKICAgIGludCByYW5k
X2RlZzsKICAgIGludCByYW5kX3NlcDsKICAgIGludDMyX3QgKmVuZF9wdHI7CiAgfTsKCmV4dGVy
biBpbnQgcmFuZG9tX3IgKHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZiwKICAg
ICAgICAgICAgICAgICAgICAgaW50MzJfdCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7
CgpleHRlcm4gaW50IHNyYW5kb21fciAodW5zaWduZWQgaW50IF9fc2VlZCwgc3RydWN0IHJhbmRv
bV9kYXRhICpfX2J1ZikgdGhyb3cgKCk7CgpleHRlcm4gaW50IGluaXRzdGF0ZV9yICh1bnNpZ25l
ZCBpbnQgX19zZWVkLCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBz
ZXRzdGF0ZV9yIChjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoK
CgpleHRlcm4gaW50IHJhbmQgKHZvaWQpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgc3JhbmQgKHVu
c2lnbmVkIGludCBfX3NlZWQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHJhbmRfciAodW5zaWdu
ZWQgaW50ICpfX3NlZWQpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4ICh2
b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBlcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQg
X194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IGxyYW5kNDggKHZvaWQpIHRo
cm93ICgpOwpleHRlcm4gbG9uZyBpbnQgbnJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1
YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBtcmFuZDQ4ICh2b2lkKSB0aHJvdyAo
KTsKZXh0ZXJuIGxvbmcgaW50IGpyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNd
KSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzcmFuZDQ4IChsb25nIGludCBfX3NlZWR2YWwpIHRo
cm93ICgpOwpleHRlcm4gdW5zaWduZWQgc2hvcnQgaW50ICpzZWVkNDggKHVuc2lnbmVkIHNob3J0
IGludCBfX3NlZWQxNnZbM10pIHRocm93ICgpOwpleHRlcm4gdm9pZCBsY29uZzQ4ICh1bnNpZ25l
ZCBzaG9ydCBpbnQgX19wYXJhbVs3XSkgdGhyb3cgKCk7CgoKCgoKc3RydWN0IGRyYW5kNDhfZGF0
YQogIHsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX3hbM107CiAgICB1bnNpZ25lZCBzaG9ydCBp
bnQgX19vbGRfeFszXTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX2M7CiAgICB1bnNpZ25lZCBz
aG9ydCBpbnQgX19pbml0OwogICAgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX2E7CiAgfTsKCgpl
eHRlcm4gaW50IGRyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1
ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkg
dGhyb3cgKCk7CmV4dGVybiBpbnQgZXJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3Vi
aVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJp
Y3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19y
ZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9k
YXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQg
Kl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50IG5yYW5kNDhfciAodW5z
aWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg
ZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAg
bG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbXJh
bmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAg
ICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwpl
eHRlcm4gaW50IGpyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVy
LAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgc3JhbmQ0OF9yIChsb25nIGludCBfX3NlZWR2YWwsIHN0cnVj
dCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCBzZWVk
NDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSwKICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBs
Y29uZzQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddLAogICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIHRocm93ICgpOwojIDUyOCAiL3Vz
ci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiB2b2lkICptYWxsb2MgKHNpemVfdCBfX3NpemUp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCAqY2Fs
bG9jIChzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSkKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCmV4dGVybiB2b2lkICpyZWFsbG9jICh2b2lkICpf
X3B0ciwgc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18p
KTsKCmV4dGVybiB2b2lkIGZyZWUgKHZvaWQgKl9fcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZv
aWQgY2ZyZWUgKHZvaWQgKl9fcHRyKSB0aHJvdyAoKTsKCgoKIyAxICIvdXNyL2luY2x1ZGUvYWxs
b2NhLmgiIDEgMwojIDIyICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMiAzCgoKIyAx
ICIvdXNyL2djYy1wcmUzLjAvbGliL2djYy1saWIvaWE2NC1ocC1saW51eC8zLjAvaW5jbHVkZS9z
dGRkZWYuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMiAzCgpleHRlcm4gIkMi
IHsKCgoKCgpleHRlcm4gdm9pZCAqYWxsb2NhIChzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgoK
Cgp9CiMgNTQ4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKZXh0ZXJuIHZvaWQgKnZh
bGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18p
KTsKCgoKCmV4dGVybiBpbnQgcG9zaXhfbWVtYWxpZ24gKHZvaWQgKipfX21lbXB0ciwgc2l6ZV90
IF9fYWxpZ25tZW50LCBzaXplX3QgX19zaXplKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX21hbGxvY19fKSk7CgoKCmV4dGVybiB2b2lkIGFib3J0ICh2b2lkKSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCmV4dGVybiBpbnQgYXRleGl0ICh2b2lkICgq
X19mdW5jKSAodm9pZCkpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBvbl9leGl0ICh2b2lkICgq
X19mdW5jKSAoaW50IF9fc3RhdHVzLCB2b2lkICpfX2FyZyksIHZvaWQgKl9fYXJnKQogICAgIHRo
cm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIGV4aXQgKGludCBfX3N0YXR1cykgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIHZvaWQgX0V4aXQgKGludCBf
X3N0YXR1cykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0
ZXJuIGNoYXIgKmdldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgpleHRl
cm4gY2hhciAqX19zZWN1cmVfZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIGludCBwdXRlbnYgKGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKCgoKCgpl
eHRlcm4gaW50IHNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192
YWx1ZSwgaW50IF9fcmVwbGFjZSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHVuc2V0ZW52
IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgY2xlYXJl
bnYgKHZvaWQpIHRocm93ICgpOwojIDYyNCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVy
biBjaGFyICpta3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu
IGludCBta3N0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKIyA2NDEgIi91c3IvaW5j
bHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gaW50IG1rc3RlbXA2NCAoY2hhciAqX190ZW1wbGF0ZSkg
dGhyb3cgKCk7CiMgNjUxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKm1r
ZHRlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzeXN0ZW0g
KF9fY29uc3QgY2hhciAqX19jb21tYW5kKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmNh
bm9uaWNhbGl6ZV9maWxlX25hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKIyA2
NzMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqcmVhbHBhdGggKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq
X19yZXN0cmljdCBfX3Jlc29sdmVkKSB0aHJvdyAoKTsKCgoKCgoKdHlwZWRlZiBpbnQgKCpfX2Nv
bXBhcl9mbl90KSAoX19jb25zdCB2b2lkICosIF9fY29uc3Qgdm9pZCAqKTsKCgp0eXBlZGVmIF9f
Y29tcGFyX2ZuX3QgY29tcGFyaXNvbl9mbl90OwoKCgoKCmV4dGVybiB2b2lkICpic2VhcmNoIChf
X2NvbnN0IHZvaWQgKl9fa2V5LCBfX2NvbnN0IHZvaWQgKl9fYmFzZSwKICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLCBfX2NvbXBhcl9mbl90IF9fY29t
cGFyKTsKCgoKZXh0ZXJuIHZvaWQgcXNvcnQgKHZvaWQgKl9fYmFzZSwgc2l6ZV90IF9fbm1lbWIs
IHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICBfX2NvbXBhcl9mbl90IF9fY29tcGFy
KTsKCgoKZXh0ZXJuIGludCBhYnMgKGludCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsKZXh0ZXJuIGxvbmcgaW50IGxhYnMgKGxvbmcgaW50IF9feCkgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKX19leHRlbnNpb25fXyBleHRlcm4gbG9uZyBs
b25nIGludCBsbGFicyAobG9uZyBsb25nIGludCBfX3gpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgpleHRlcm4gZGl2X3QgZGl2IChpbnQgX19udW1lciwg
aW50IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpl
eHRlcm4gbGRpdl90IGxkaXYgKGxvbmcgaW50IF9fbnVtZXIsIGxvbmcgaW50IF9fZGVub20pCiAg
ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKX19leHRlbnNpb25fXyBl
eHRlcm4gbGxkaXZfdCBsbGRpdiAobG9uZyBsb25nIGludCBfX251bWVyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxvbmcgaW50IF9fZGVub20pCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDcyOSAiL3Vzci9pbmNsdWRlL3N0ZGxp
Yi5oIiAzCmV4dGVybiBjaGFyICplY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBp
bnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmlj
dCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmZjdnQgKGRvdWJsZSBfX3ZhbHVl
LCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAg
ICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZ2N2
dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93ICgpOwoK
CgoKZXh0ZXJuIGNoYXIgKnFlY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQs
CiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0
cmljdCBfX3NpZ24pIHRocm93ICgpOwpleHRlcm4gY2hhciAqcWZjdnQgKGxvbmcgZG91YmxlIF9f
dmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3Qg
X19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpx
Z2N2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgdGhy
b3cgKCk7CgoKCgpleHRlcm4gaW50IGVjdnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdp
dCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVz
dHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAg
c2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmY3Z0X3IgKGRvdWJsZSBfX3ZhbHVl
LCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAg
ICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAg
ICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHFlY3Z0X3Ig
KGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBp
bnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKICAgICAgICAg
ICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgp
OwpleHRlcm4gaW50IHFmY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwK
ICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3Ry
aWN0IF9fc2lnbiwKICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBz
aXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IG1ibGVuIChfX2NvbnN0IGNo
YXIgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBtYnRvd2MgKHdjaGFy
X3QgKl9fcmVzdHJpY3QgX19wd2MsCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHdjdG9tYiAo
Y2hhciAqX19zLCB3Y2hhcl90IF9fd2NoYXIpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IG1i
c3Rvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywKICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7Cgpl
eHRlcm4gc2l6ZV90IHdjc3RvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywgc2l6ZV90IF9f
bikKICAgICB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcnBtYXRjaCAoX19jb25zdCBjaGFy
ICpfX3Jlc3BvbnNlKSB0aHJvdyAoKTsKIyA4MDkgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpl
eHRlcm4gaW50IGdldHN1Ym9wdCAoY2hhciAqKl9fcmVzdHJpY3QgX19vcHRpb25wLAogICAgICAg
ICAgICAgICAgICAgICAgY2hhciAqX19jb25zdCAqX19yZXN0cmljdCBfX3Rva2VucywKICAgICAg
ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fdmFsdWVwKSB0aHJvdyAoKTsKCgoK
CgpleHRlcm4gdm9pZCBzZXRrZXkgKF9fY29uc3QgY2hhciAqX19rZXkpIHRocm93ICgpOwoKCgoK
CgoKZXh0ZXJuIGludCBwb3NpeF9vcGVucHQgKGludCBfX29mbGFnKSB0aHJvdyAoKTsKCgoKCgoK
CmV4dGVybiBpbnQgZ3JhbnRwdCAoaW50IF9fZmQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVu
bG9ja3B0IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqcHRzbmFtZSAoaW50
IF9fZmQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0c25hbWVfciAoaW50IF9fZmQsIGNo
YXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZ2V0cHQg
KHZvaWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGdldGxvYWRhdmcgKGRvdWJsZSBfX2xv
YWRhdmdbXSwgaW50IF9fbmVsZW0pIHRocm93ICgpOwoKCgoKCn0KIyAyNiAiLi4vLi4vZGlzdC9p
bmNsdWRlL25zQ1JULmgiIDIKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMwojIDI3ICIu
Li8uLi9kaXN0L2luY2x1ZGUvbnNDUlQuaCIgMgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9k
aXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIiAxCiMgNDIgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9k
aXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0
L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyA0MyAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rp
c3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiIDIKCmV4dGVybiAiQyIgewoKCgoKCgpleHRlcm4gUFJV
aW50MzIKUExfc3RybGVuKGNvbnN0IGNoYXIgKnN0cik7CiMgNjIgIi91c3Ivc3JjL21pc2MvbW96
aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gUFJVaW50MzIKUExfc3Rybmxl
bihjb25zdCBjaGFyICpzdHIsIFBSVWludDMyIG1heCk7CiMgNzMgIi91c3Ivc3JjL21pc2MvbW96
aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cmNweShj
aGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMpOwojIDg2ICIvdXNyL3NyYy9taXNjL21vemlsbGEv
ZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9zdHJuY3B5KGNoYXIg
KmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgUFJVaW50MzIgbWF4KTsKIyAxMDkgIi91c3Ivc3JjL21p
c2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0
cm5jcHl6KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgUFJVaW50MzIgbWF4KTsKIyAxMjMg
Ii91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4g
Y2hhciAqClBMX3N0cmR1cChjb25zdCBjaGFyICpzKTsKCgoKCgoKCmV4dGVybiB2b2lkClBMX3N0
cmZyZWUoY2hhciAqcyk7CiMgMTQ3ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRl
L25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9zdHJuZHVwKGNvbnN0IGNoYXIgKnMsIFBS
VWludDMyIG1heCk7CiMgMTU5ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25z
cHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9zdHJjYXQoY2hhciAqZHN0LCBjb25zdCBjaGFy
ICpzcmMpOwojIDE3NCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bs
c3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RybmNhdChjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNy
YywgUFJVaW50MzIgbWF4KTsKIyAxODggIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1
ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cmNhdG4oY2hhciAqZHN0LCBQUlVp
bnQzMiBtYXgsIGNvbnN0IGNoYXIgKnNyYyk7CiMgMjAwICIvdXNyL3NyYy9taXNjL21vemlsbGEv
ZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIFBSSW50bgpQTF9zdHJjbXAoY29uc3Qg
Y2hhciAqYSwgY29uc3QgY2hhciAqYik7CiMgMjE0ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlz
dC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIFBSSW50bgpQTF9zdHJuY21wKGNvbnN0IGNo
YXIgKmEsIGNvbnN0IGNoYXIgKmIsIFBSVWludDMyIG1heCk7CiMgMjI2ICIvdXNyL3NyYy9taXNj
L21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIFBSSW50bgpQTF9zdHJj
YXNlY21wKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpOwojIDIzOCAiL3Vzci9zcmMvbWlz
Yy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBQUkludG4KUExfc3Ry
bmNhc2VjbXAoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYiwgUFJVaW50MzIgbWF4KTsKIyAy
NDkgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRl
cm4gY2hhciAqClBMX3N0cmNocihjb25zdCBjaGFyICpzLCBjaGFyIGMpOwojIDI2MCAiL3Vzci9z
cmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoK
UExfc3RycmNocihjb25zdCBjaGFyICpzLCBjaGFyIGMpOwojIDI3MiAiL3Vzci9zcmMvbWlzYy9t
b3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RybmNo
cihjb25zdCBjaGFyICpzLCBjaGFyIGMsIFBSVWludDMyIG4pOwojIDI4NCAiL3Vzci9zcmMvbWlz
Yy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3Ry
bnJjaHIoY29uc3QgY2hhciAqcywgY2hhciBjLCBQUlVpbnQzMiBuKTsKIyAzMDAgIi91c3Ivc3Jj
L21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBM
X3N0cnBicmsoY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqbGlzdCk7CiMgMzExICIvdXNyL3Ny
Yy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQ
TF9zdHJwcmJyayhjb25zdCBjaGFyICpzLCBjb25zdCBjaGFyICpsaXN0KTsKIyAzMjIgIi91c3Iv
c3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAq
ClBMX3N0cm5wYnJrKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmxpc3QsIFBSVWludDMyIG4p
OwojIDMzMyAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgi
CmV4dGVybiBjaGFyICoKUExfc3RybnByYnJrKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmxp
c3QsIFBSVWludDMyIG4pOwojIDM0MyAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVk
ZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3Ryc3RyKGNvbnN0IGNoYXIgKmJpZywg
Y29uc3QgY2hhciAqbGl0dGxlKTsKIyAzNTMgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2lu
Y2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cnJzdHIoY29uc3QgY2hhciAq
YmlnLCBjb25zdCBjaGFyICpsaXR0bGUpOwojIDM2NCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rp
c3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RybnN0cihjb25zdCBj
aGFyICpiaWcsIGNvbnN0IGNoYXIgKmxpdHRsZSwgUFJVaW50MzIgbik7CiMgMzc1ICIvdXNyL3Ny
Yy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQ
TF9zdHJucnN0cihjb25zdCBjaGFyICpiaWcsIGNvbnN0IGNoYXIgKmxpdHRsZSwgUFJVaW50MzIg
bWF4KTsKIyAzODUgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0
ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cmNhc2VzdHIoY29uc3QgY2hhciAqYmlnLCBjb25zdCBj
aGFyICpsaXR0bGUpOwojIDM5NSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u
c3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RyY2FzZXJzdHIoY29uc3QgY2hhciAqYmln
LCBjb25zdCBjaGFyICpsaXR0bGUpOwojIDQwNiAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3Qv
aW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RybmNhc2VzdHIoY29uc3Qg
Y2hhciAqYmlnLCBjb25zdCBjaGFyICpsaXR0bGUsIFBSVWludDMyIG1heCk7CiMgNDE3ICIvdXNy
L3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIg
KgpQTF9zdHJuY2FzZXJzdHIoY29uc3QgY2hhciAqYmlnLCBjb25zdCBjaGFyICpsaXR0bGUsIFBS
VWludDMyIG1heCk7CgoKCgoKCgp9CiMgMjggIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NSVC5oIiAy
CiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5oIiAxCiMgMjkgIi4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0NSVC5oIiAyCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u
c3ByL3BydHlwZXMuaCIgMQojIDMwICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNDUlQuaCIgMgojIDEg
Ii4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NwcFNoYXJlZEFsbG9jYXRvci5oIiAxCgoKCiMgMSAiLi4v
Li4vZGlzdC9pbmNsdWRlL25zTWVtb3J5LmgiIDEKIyAyNiAiLi4vLi4vZGlzdC9pbmNsdWRlL25z
TWVtb3J5LmgiCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSU1lbW9yeS5oIiAxCiMgMzYgIi4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lNZW1vcnkuaCIKY2xhc3MgbnNJTWVtb3J5IDogcHVibGljIG5z
SVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3Rh
dGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDU5ZTdlNzdhLCAweDM4ZTQsIDB4MTFkNCwgeyAweDhj
LCAweGY1LCAweDAwLCAweDYwLCAweGIwLCAweGZjLCAweDE0LCAweGEzIH19OyByZXR1cm4gaWlk
O30KIyA1MCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSU1lbW9yeS5oIgogIHZpcnR1YWwgdm9pZCAq
IEFsbG9jKHNpemVfdCBzaXplKSA9IDA7CiMgNjcgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lNZW1v
cnkuaCIKICB2aXJ0dWFsIHZvaWQgKiBSZWFsbG9jKHZvaWQgKiBwdHIsIHNpemVfdCBuZXdTaXpl
KSA9IDA7CiMgNzYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lNZW1vcnkuaCIKICB2aXJ0dWFsIHZv
aWQgRnJlZSh2b2lkICogcHRyKSA9IDA7CiMgODggIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lNZW1v
cnkuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEhlYXBNaW5pbWl6ZShQUkJvb2wgaW1tZWRpYXRlKSA9
IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNMb3dNZW1vcnkoUFJCb29sICpfcmV0dmFs
KSA9IDA7Cgp9OwojIDI3ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNNZW1vcnkuaCIgMgoKCgoKCgoK
Y2xhc3MgbnNNZW1vcnkKewpwdWJsaWM6CiAgICBzdGF0aWMgdm9pZCogQWxsb2Moc2l6ZV90IHNp
emUpOwogICAgc3RhdGljIHZvaWQqIFJlYWxsb2Modm9pZCogcHRyLCBzaXplX3Qgc2l6ZSk7CiAg
ICBzdGF0aWMgdm9pZCBGcmVlKHZvaWQqIHB0cik7CiAgICBzdGF0aWMgbnNyZXN1bHQgSGVhcE1p
bmltaXplKFBSQm9vbCBhSW1tZWRpYXRlKTsKICAgIHN0YXRpYyB2b2lkKiBDbG9uZShjb25zdCB2
b2lkKiBwdHIsIHNpemVfdCBzaXplKTsKICAgIHN0YXRpYyBuc0lNZW1vcnkqIEdldEdsb2JhbE1l
bW9yeVNlcnZpY2UoKTsKfTsKIyA1ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNDcHBTaGFyZWRBbGxv
Y2F0b3IuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIgMQojIDYgIi4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0NwcFNoYXJlZEFsbG9jYXRvci5oIiAyCiMgMSAiL3Vzci9nY2MtcHJl
My4wL2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL25ldy5oIiAxIDMKIyAzMyAiL3Vzci9nY2MtcHJl
My4wL2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL25ldy5oIiAzCiMgMSAiL3Vzci9nY2MtcHJlMy4w
L2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL2JhY2t3YXJkX3dhcm5pbmcuaCIgMSAzCiMgMzQgIi91
c3IvZ2NjLXByZTMuMC9pbmNsdWRlL2crKy12My9iYWNrd2FyZC9uZXcuaCIgMiAzCiMgMSAiL3Vz
ci9nY2MtcHJlMy4wL2luY2x1ZGUvZysrLXYzL25ldyIgMSAzCiMgMzQgIi91c3IvZ2NjLXByZTMu
MC9pbmNsdWRlL2crKy12My9uZXciIDMKIyAxICIvdXNyL2djYy1wcmUzLjAvaW5jbHVkZS9nKyst
djMvY3N0ZGRlZiIgMSAzCgojIDEgIi91c3IvZ2NjLXByZTMuMC9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9jc3RkZGVmLmgiIDEgMwojIDQwICIvdXNyL2djYy1wcmUzLjAvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfY3N0ZGRlZi5oIiAzCiMgMSAiL3Vzci9nY2MtcHJlMy4wL2xpYi9nY2MtbGliL2lh
NjQtaHAtbGludXgvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQxICIvdXNyL2djYy1wcmUz
LjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAyIDMKCm5hbWVzcGFjZSBzdGQK
ewogIHVzaW5nIDo6cHRyZGlmZl90OwogIHVzaW5nIDo6c2l6ZV90Owp9CiMgMyAiL3Vzci9nY2Mt
cHJlMy4wL2luY2x1ZGUvZysrLXYzL2NzdGRkZWYiIDIgMwojIDM1ICIvdXNyL2djYy1wcmUzLjAv
aW5jbHVkZS9nKystdjMvbmV3IiAyIDMKIyAxICIvdXNyL2djYy1wcmUzLjAvaW5jbHVkZS9nKyst
djMvZXhjZXB0aW9uIiAxIDMKIyAzNCAiL3Vzci9nY2MtcHJlMy4wL2luY2x1ZGUvZysrLXYzL2V4
Y2VwdGlvbiIgMwpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZAp7CiAgY2xhc3MgZXhjZXB0
aW9uCiAgewogIHB1YmxpYzoKICAgIGV4Y2VwdGlvbigpIHRocm93KCkgeyB9CiAgICB2aXJ0dWFs
IH5leGNlcHRpb24oKSB0aHJvdygpOwogICAgdmlydHVhbCBjb25zdCBjaGFyKiB3aGF0KCkgY29u
c3QgdGhyb3coKTsKICB9OwoKICBjbGFzcyBiYWRfZXhjZXB0aW9uIDogcHVibGljIGV4Y2VwdGlv
bgogIHsKICBwdWJsaWM6CiAgICBiYWRfZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1
YWwgfmJhZF9leGNlcHRpb24oKSB0aHJvdygpOwogIH07CgogIHR5cGVkZWYgdm9pZCAoKnRlcm1p
bmF0ZV9oYW5kbGVyKSAoKTsKICB0eXBlZGVmIHZvaWQgKCp1bmV4cGVjdGVkX2hhbmRsZXIpICgp
OwoKICB0ZXJtaW5hdGVfaGFuZGxlciBzZXRfdGVybWluYXRlKHRlcm1pbmF0ZV9oYW5kbGVyKSB0
aHJvdygpOwogIHZvaWQgdGVybWluYXRlKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykp
OwoKICB1bmV4cGVjdGVkX2hhbmRsZXIgc2V0X3VuZXhwZWN0ZWQodW5leHBlY3RlZF9oYW5kbGVy
KSB0aHJvdygpOwogIHZvaWQgdW5leHBlY3RlZCgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJu
X18pKTsKCiAgYm9vbCB1bmNhdWdodF9leGNlcHRpb24oKSB0aHJvdygpOwp9Cgp9CiMgMzYgIi91
c3IvZ2NjLXByZTMuMC9pbmNsdWRlL2crKy12My9uZXciIDIgMwoKZXh0ZXJuICJDKysiIHsKCm5h
bWVzcGFjZSBzdGQKewogIGNsYXNzIGJhZF9hbGxvYyA6IHB1YmxpYyBleGNlcHRpb24KICB7CiAg
cHVibGljOgogICAgYmFkX2FsbG9jKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmJhZF9hbGxv
YygpIHRocm93KCk7CiAgfTsKCiAgc3RydWN0IG5vdGhyb3dfdCB7IH07CiAgZXh0ZXJuIGNvbnN0
IG5vdGhyb3dfdCBub3Rocm93OwogIHR5cGVkZWYgdm9pZCAoKm5ld19oYW5kbGVyKSgpOwogIG5l
d19oYW5kbGVyIHNldF9uZXdfaGFuZGxlcihuZXdfaGFuZGxlcik7Cn0KCgp2b2lkICpvcGVyYXRv
ciBuZXcoc3RkOjpzaXplX3QpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQgKm9wZXJhdG9y
IG5ld1tdKHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2MpOwp2b2lkIG9wZXJhdG9y
IGRlbGV0ZSh2b2lkICopIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCAqKSB0
aHJvdygpOwp2b2lkICpvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJv
d190JikgdGhyb3coKTsKdm9pZCAqb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QsIGNvbnN0IHN0
ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCAqLCBjb25z
dCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCAq
LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CgoKaW5saW5lIHZvaWQgKm9wZXJhdG9y
IG5ldyhzdGQ6OnNpemVfdCwgdm9pZCAqcGxhY2UpIHRocm93KCkgeyByZXR1cm4gcGxhY2U7IH0K
aW5saW5lIHZvaWQgKm9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90LCB2b2lkICpwbGFjZSkgdGhy
b3coKSB7IHJldHVybiBwbGFjZTsgfQp9CiMgMzUgIi91c3IvZ2NjLXByZTMuMC9pbmNsdWRlL2cr
Ky12My9iYWNrd2FyZC9uZXcuaCIgMiAzCgp1c2luZyBzdGQ6OmJhZF9hbGxvYzsKdXNpbmcgc3Rk
Ojpub3Rocm93X3Q7CnVzaW5nIHN0ZDo6bm90aHJvdzsKdXNpbmcgc3RkOjpuZXdfaGFuZGxlcjsK
dXNpbmcgc3RkOjpzZXRfbmV3X2hhbmRsZXI7CiMgNyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQ3Bw
U2hhcmVkQWxsb2NhdG9yLmgiIDIKIyAyMyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQ3BwU2hhcmVk
QWxsb2NhdG9yLmgiCiMgMSAiL3Vzci9nY2MtcHJlMy4wL2xpYi9nY2MtbGliL2lhNjQtaHAtbGlu
dXgvMy4wL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDExICIvdXNyL2djYy1wcmUzLjAvbGliL2dj
Yy1saWIvaWE2NC1ocC1saW51eC8zLjAvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91c3IvZ2Nj
LXByZTMuMC9saWIvZ2NjLWxpYi9pYTY0LWhwLWxpbnV4LzMuMC9pbmNsdWRlL3N5c2xpbWl0cy5o
IiAxIDMKCgoKCgoKIyAxICIvdXNyL2djYy1wcmUzLjAvbGliL2djYy1saWIvaWE2NC1ocC1saW51
eC8zLjAvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMTMwICIvdXNyL2djYy1wcmUzLjAvbGliL2dj
Yy1saWIvaWE2NC1ocC1saW51eC8zLjAvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91c3IvaW5j
bHVkZS9saW1pdHMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAy
IDMKIyAxNDQgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRz
L3Bvc2l4MV9saW0uaCIgMSAzCiMgMTI2ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMSAzCiMgMzYgIi91c3IvaW5j
bHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbnV4L2xpbWl0cy5o
IiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDIgMwojIDEyNyAiL3Vz
ci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAyIDMKIyAxNDUgIi91c3IvaW5jbHVkZS9saW1p
dHMuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgyX2xpbS5oIiAxIDMKIyAx
NDkgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
eG9wZW5fbGltLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRl
L2JpdHMveG9wZW5fbGltLmgiIDIgMwojIDE1MyAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMK
IyAxMzEgIi91c3IvZ2NjLXByZTMuMC9saWIvZ2NjLWxpYi9pYTY0LWhwLWxpbnV4LzMuMC9pbmNs
dWRlL2xpbWl0cy5oIiAyIDMKIyA4ICIvdXNyL2djYy1wcmUzLjAvbGliL2djYy1saWIvaWE2NC1o
cC1saW51eC8zLjAvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMiAzCiMgMTIgIi91c3IvZ2NjLXByZTMu
MC9saWIvZ2NjLWxpYi9pYTY0LWhwLWxpbnV4LzMuMC9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyAy
NCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQ3BwU2hhcmVkQWxsb2NhdG9yLmgiIDIKCgoKdGVtcGxh
dGUgPGNsYXNzIFQ+CmNsYXNzIG5zQ3BwU2hhcmVkQWxsb2NhdG9yCgoKCgogIHsKICAgIHB1Ymxp
YzoKICAgICAgdHlwZWRlZiBUIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgc2l6ZV90IHNpemVf
dHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICAgICAgdHlw
ZWRlZiBUKiBwb2ludGVyOwogICAgICB0eXBlZGVmIGNvbnN0IFQqIGNvbnN0X3BvaW50ZXI7Cgog
ICAgICB0eXBlZGVmIFQmIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiBjb25zdCBUJiBjb25zdF9y
ZWZlcmVuY2U7CgoKCiAgICAgIG5zQ3BwU2hhcmVkQWxsb2NhdG9yKCkgeyB9CgoKCgoKCiAgICAg
fm5zQ3BwU2hhcmVkQWxsb2NhdG9yKCkgeyB9CgoKICAgICAgcG9pbnRlcgogICAgICBhZGRyZXNz
KCByZWZlcmVuY2UgciApIGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0dXJuICZyOwogICAg
ICAgIH0KCiAgICAgIGNvbnN0X3BvaW50ZXIKICAgICAgYWRkcmVzcyggY29uc3RfcmVmZXJlbmNl
IHIgKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVybiAmcjsKICAgICAgICB9CgogICAg
ICBwb2ludGVyCiAgICAgIGFsbG9jYXRlKCBzaXplX3R5cGUgbiwgY29uc3Qgdm9pZCogPTAgKQog
ICAgICAgIHsKICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PCBwb2ludGVyID4obnNN
ZW1vcnk6OkFsbG9jKHN0YXRpY19jYXN0PCBQUlVpbnQzMiA+KG4qc2l6ZW9mKFQpKSkpOwogICAg
ICAgIH0KCiAgICAgIHZvaWQKICAgICAgZGVhbGxvY2F0ZSggcG9pbnRlciBwLCBzaXplX3R5cGUg
KQogICAgICAgIHsKICAgICAgICAgIG5zTWVtb3J5OjpGcmVlKHApOwogICAgICAgIH0KCiAgICAg
IHZvaWQKICAgICAgY29uc3RydWN0KCBwb2ludGVyIHAsIGNvbnN0IFQmIHZhbCApCiAgICAgICAg
ewogICAgICAgICAgbmV3IChwKSBUKHZhbCk7CiAgICAgICAgfQoKICAgICAgdm9pZAogICAgICBk
ZXN0cm95KCBwb2ludGVyIHAgKQogICAgICAgIHsKICAgICAgICAgIHAtPn5UKCk7CiAgICAgICAg
fQoKICAgICAgc2l6ZV90eXBlCiAgICAgIG1heF9zaXplKCkgY29uc3QKICAgICAgICB7CgoKCiAg
ICAgICAgICByZXR1cm4gKDkyMjMzNzIwMzY4NTQ3NzU4MDdMICogMlVMICsgMSkgLyBzaXplb2Yo
VCk7CgogICAgICAgIH0KIyAxMTAgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NwcFNoYXJlZEFsbG9j
YXRvci5oIgogIH07CgoKdGVtcGxhdGUgPGNsYXNzIFQ+ClBSQm9vbApvcGVyYXRvcj09KCBjb25z
dCBuc0NwcFNoYXJlZEFsbG9jYXRvcjxUPiYsIGNvbnN0IG5zQ3BwU2hhcmVkQWxsb2NhdG9yPFQ+
JiApCiAgewogICAgcmV0dXJuIDE7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQ+ClBSQm9vbApvcGVy
YXRvciE9KCBjb25zdCBuc0NwcFNoYXJlZEFsbG9jYXRvcjxUPiYsIGNvbnN0IG5zQ3BwU2hhcmVk
QWxsb2NhdG9yPFQ+JiApCiAgewogICAgcmV0dXJuIDA7CiAgfQojIDMxICIuLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNDUlQuaCIgMgojIDQ3ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNDUlQuaCIKZXh0ZXJu
IGNvbnN0IFBSVW5pY2hhciBrSXNvTGF0aW4xVG9VQ1MyWzI1Nl07CiMgODYgIi4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0NSVC5oIgpjbGFzcyBuc0NSVCB7CnB1YmxpYzoKICBlbnVtIHsKICAgIFRBQj0n
XHQnICwKICAgIExGPSdcbicgLAogICAgVlRBQj0nXHYnICwKICAgIEZGPSdcZicgLAogICAgQ1I9
J1xyJwogIH07CgoKCgoKCiAgc3RhdGljIHZvaWQgbWVtY3B5KHZvaWQqIGFEZXN0LCBjb25zdCB2
b2lkKiBhU3JjLCBQUlVpbnQzMiBhQ291bnQpIHsKICAgIGlmICghKChhRGVzdCAhPSBfX251bGwg
JiYgYVNyYyAhPSBfX251bGwpIHx8IChhQ291bnQgPT0gMCkpKSBuc0RlYnVnOjpBc3NlcnRpb24o
IkludmFsaWQgTlVMTCBhcmd1bWVudCIsICIoYURlc3QgIT0gTlVMTCAmJiBhU3JjICE9IE5VTEwp
IHx8IChhQ291bnQgPT0gMCkiLCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQ1JULmgiLCAxMDIpOwog
ICAgOjptZW1jcHkoYURlc3QsIGFTcmMsIChzaXplX3QpYUNvdW50KTsKICB9CgogIHN0YXRpYyBQ
UkludDMyIG1lbWNtcCh2b2lkKiBhRGVzdCwgY29uc3Qgdm9pZCogYVNyYywgUFJVaW50MzIgYUNv
dW50KSB7CiAgICBpZiAoISgoYURlc3QgIT0gX19udWxsICYmIGFTcmMgIT0gX19udWxsKSB8fCAo
YUNvdW50ID09IDApKSkgbnNEZWJ1Zzo6QXNzZXJ0aW9uKCJJbnZhbGlkIE5VTEwgYXJndW1lbnQi
LCAiKGFEZXN0ICE9IE5VTEwgJiYgYVNyYyAhPSBOVUxMKSB8fCAoYUNvdW50ID09IDApIiwgIi4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0NSVC5oIiwgMTA3KTsKICAgIHJldHVybiA6Om1lbWNtcChhRGVz
dCwgYVNyYywgKHNpemVfdClhQ291bnQpOwogIH0KCiAgc3RhdGljIHZvaWQgbWVtbW92ZSh2b2lk
KiBhRGVzdCwgY29uc3Qgdm9pZCogYVNyYywgUFJVaW50MzIgYUNvdW50KSB7CiAgICBpZiAoISgo
YURlc3QgIT0gX19udWxsICYmIGFTcmMgIT0gX19udWxsKSB8fCAoYUNvdW50ID09IDApKSkgbnNE
ZWJ1Zzo6QXNzZXJ0aW9uKCJJbnZhbGlkIE5VTEwgYXJndW1lbnQiLCAiKGFEZXN0ICE9IE5VTEwg
JiYgYVNyYyAhPSBOVUxMKSB8fCAoYUNvdW50ID09IDApIiwgIi4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0NSVC5oIiwgMTEyKTsKICAgIDo6bWVtbW92ZShhRGVzdCwgYVNyYywgKHNpemVfdClhQ291bnQp
OwogIH0KCiAgc3RhdGljIHZvaWQgbWVtc2V0KHZvaWQqIGFEZXN0LCBQUlVpbnQ4IGFCeXRlLCBQ
UlVpbnQzMiBhQ291bnQpIHsKICAgIGlmICghKChhRGVzdCAhPSBfX251bGwpIHx8IChhQ291bnQg
PT0gMCkpKSBuc0RlYnVnOjpBc3NlcnRpb24oIkludmFsaWQgTlVMTCBhcmd1bWVudCIsICIoYURl
c3QgIT0gTlVMTCkgfHwgKGFDb3VudCA9PSAwKSIsICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNDUlQu
aCIsIDExNyk7CiAgICA6Om1lbXNldChhRGVzdCwgYUJ5dGUsIGFDb3VudCk7CiAgfQoKICBzdGF0
aWMgdm9pZCB6ZXJvKHZvaWQqIGFEZXN0LCBQUlVpbnQzMiBhQ291bnQpIHsKICAgIGlmICghKChh
RGVzdCAhPSBfX251bGwpIHx8IChhQ291bnQgPT0gMCkpKSBuc0RlYnVnOjpBc3NlcnRpb24oIklu
dmFsaWQgTlVMTCBhcmd1bWVudCIsICIoYURlc3QgIT0gTlVMTCkgfHwgKGFDb3VudCA9PSAwKSIs
ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNDUlQuaCIsIDEyMik7CiAgICA6Om1lbXNldChhRGVzdCwg
MCwgKHNpemVfdClhQ291bnQpOwogIH0KCgoKCgogIHN0YXRpYyBQUlVpbnQzMiBzdHJsZW4oY29u
c3QgY2hhciogcykgewogICAgcmV0dXJuIFBSVWludDMyKDo6c3RybGVuKHMpKTsKICB9CgoKICBz
dGF0aWMgUFJJbnQzMiBzdHJjbXAoY29uc3QgY2hhciogczEsIGNvbnN0IGNoYXIqIHMyKSB7CiAg
ICByZXR1cm4gUFJJbnQzMihQTF9zdHJjbXAoczEsIHMyKSk7CiAgfQoKICBzdGF0aWMgUFJJbnQz
MiBzdHJuY21wKGNvbnN0IGNoYXIqIHMxLCBjb25zdCBjaGFyKiBzMiwKICAgICAgICAgICAgICAg
ICAgICAgICAgIFBSVWludDMyIGFNYXhMZW4pIHsKICAgIHJldHVybiBQUkludDMyKFBMX3N0cm5j
bXAoczEsIHMyLCBhTWF4TGVuKSk7CiAgfQoKCiAgc3RhdGljIFBSSW50MzIgc3RyY2FzZWNtcChj
b25zdCBjaGFyKiBzMSwgY29uc3QgY2hhciogczIpIHsKICAgIHJldHVybiBQUkludDMyKFBMX3N0
cmNhc2VjbXAoczEsIHMyKSk7CiAgfQoKCiAgc3RhdGljIFBSSW50MzIgc3RybmNhc2VjbXAoY29u
c3QgY2hhciogczEsIGNvbnN0IGNoYXIqIHMyLCBQUlVpbnQzMiBhTWF4TGVuKSB7CiAgICBQUklu
dDMyIHJlc3VsdD1QUkludDMyKFBMX3N0cm5jYXNlY21wKHMxLCBzMiwgYU1heExlbikpOwoKCiAg
ICBpZihyZXN1bHQ8MCkKICAgICAgcmVzdWx0PS0xOwogICAgcmV0dXJuIHJlc3VsdDsKICB9Cgog
IHN0YXRpYyBQUkludDMyIHN0cm5jbXAoY29uc3QgY2hhciogczEsIGNvbnN0IGNoYXIqIHMyLCBQ
UkludDMyIGFNYXhMZW4pIHsKCiAgICBQUkludDMyIGRpZmYgPSAoKGNvbnN0IHVuc2lnbmVkIGNo
YXIqKXMxKVswXSAtICgoY29uc3QgdW5zaWduZWQgY2hhciopczIpWzBdOwogICAgaWYgKGRpZmYg
IT0gMCkgcmV0dXJuIGRpZmY7CiAgICByZXR1cm4gUFJJbnQzMihQTF9zdHJuY21wKHMxLHMyLHVu
c2lnbmVkKGFNYXhMZW4pKSk7CiAgfQoKICBzdGF0aWMgY2hhciogc3RyZHVwKGNvbnN0IGNoYXIq
IHN0cikgewogICAgcmV0dXJuIFBMX3N0cmR1cChzdHIpOwogIH0KCiAgc3RhdGljIGNoYXIqIHN0
cm5kdXAoY29uc3QgY2hhciogc3RyLCBQUlVpbnQzMiBsZW4pIHsKICAgIHJldHVybiBQTF9zdHJu
ZHVwKHN0ciwgbGVuKTsKICB9CgogIHN0YXRpYyB2b2lkIGZyZWUoY2hhciogc3RyKSB7CiAgICBQ
TF9zdHJmcmVlKHN0cik7CiAgfQojIDE5NyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQ1JULmgiCiAg
c3RhdGljIGNoYXIqIHN0cnRvayhjaGFyKiBzdHIsIGNvbnN0IGNoYXIqIGRlbGltcywgY2hhciog
Km5ld1N0cik7CgoKICBzdGF0aWMgUFJVaW50MzIgc3RybGVuKGNvbnN0IFBSVW5pY2hhciogcyk7
CgoKICBzdGF0aWMgUFJJbnQzMiBzdHJjbXAoY29uc3QgUFJVbmljaGFyKiBzMSwgY29uc3QgUFJV
bmljaGFyKiBzMik7CgogIHN0YXRpYyBQUkludDMyIHN0cm5jbXAoY29uc3QgUFJVbmljaGFyKiBz
MSwgY29uc3QgUFJVbmljaGFyKiBzMiwKICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMy
IGFNYXhMZW4pOwoKCiAgc3RhdGljIFBSSW50MzIgc3RyY2FzZWNtcChjb25zdCBQUlVuaWNoYXIq
IHMxLCBjb25zdCBQUlVuaWNoYXIqIHMyKTsKCiAgc3RhdGljIFBSSW50MzIgc3RybmNhc2VjbXAo
Y29uc3QgUFJVbmljaGFyKiBzMSwgY29uc3QgUFJVbmljaGFyKiBzMiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQUlVpbnQzMiBhTWF4TGVuKTsKCgogIHN0YXRpYyBQUkludDMyIHN0cmNt
cChjb25zdCBQUlVuaWNoYXIqIHMxLCBjb25zdCBjaGFyKiBzMik7CgogIHN0YXRpYyBQUkludDMy
IHN0cm5jbXAoY29uc3QgUFJVbmljaGFyKiBzMSwgY29uc3QgY2hhciogczIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBQUlVpbnQzMiBhTWF4TGVuKTsKCgogIHN0YXRpYyBQUkludDMyIHN0cmNh
c2VjbXAoY29uc3QgUFJVbmljaGFyKiBzMSwgY29uc3QgY2hhciogczIpOwoKICBzdGF0aWMgUFJJ
bnQzMiBzdHJuY2FzZWNtcChjb25zdCBQUlVuaWNoYXIqIHMxLCBjb25zdCBjaGFyKiBzMiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhTWF4TGVuKTsKCgoKICBzdGF0aWMg
UFJVbmljaGFyKiBzdHJkdXAoY29uc3QgUFJVbmljaGFyKiBzdHIpOwoKICBzdGF0aWMgUFJVbmlj
aGFyKiBzdHJuZHVwKGNvbnN0IFBSVW5pY2hhciogc3RyLCBQUlVpbnQzMiBsZW4pOwoKICBzdGF0
aWMgdm9pZCBmcmVlKFBSVW5pY2hhciogc3RyKSB7CiAgICAgICAgbnNDcHBTaGFyZWRBbGxvY2F0
b3I8UFJVbmljaGFyPiBzaGFyZWRfYWxsb2NhdG9yOwogICAgICAgIHNoYXJlZF9hbGxvY2F0b3Iu
ZGVhbGxvY2F0ZShzdHIsIDAgKTsKICB9CgoKICBzdGF0aWMgUFJVaW50MzIgSGFzaENvZGUoY29u
c3QgY2hhciogc3RyLCBQUlVpbnQzMiogcmVzdWx0aW5nU3RyTGVuID0gMCk7CgoKICBzdGF0aWMg
UFJVaW50MzIgSGFzaENvZGUoY29uc3QgUFJVbmljaGFyKiBzdHIsIFBSVWludDMyKiByZXN1bHRp
bmdTdHJMZW4gPSAwKTsKCgogIHN0YXRpYyBQUlVpbnQzMiBCdWZmZXJIYXNoQ29kZShjb25zdCBj
aGFyKiBzdHIsIFBSVWludDMyIHN0ckxlbik7CgoKICBzdGF0aWMgUFJJbnQzMiBhdG9pKCBjb25z
dCBQUlVuaWNoYXIgKnN0cmluZyApOwoKICBzdGF0aWMgUFJVbmljaGFyIFRvVXBwZXIoUFJVbmlj
aGFyIGFDaGFyKTsKCiAgc3RhdGljIFBSVW5pY2hhciBUb0xvd2VyKFBSVW5pY2hhciBhQ2hhcik7
CgogIHN0YXRpYyBQUkJvb2wgSXNVcHBlcihQUlVuaWNoYXIgYUNoYXIpOwoKICBzdGF0aWMgUFJC
b29sIElzTG93ZXIoUFJVbmljaGFyIGFDaGFyKTsKCiAgc3RhdGljIGNoYXIgVG9VcHBlcihjaGFy
IGFDaGFyKTsKCiAgc3RhdGljIGNoYXIgVG9Mb3dlcihjaGFyIGFDaGFyKTsKCiAgc3RhdGljIFBS
Qm9vbCBJc1VwcGVyKGNoYXIgYUNoYXIpOwoKICBzdGF0aWMgUFJCb29sIElzTG93ZXIoY2hhciBh
Q2hhcik7CgogIHN0YXRpYyBQUkJvb2wgSXNBc2NpaShQUlVuaWNoYXIgYUNoYXIpOwogIHN0YXRp
YyBQUkJvb2wgSXNBc2NpaShQUlVuaWNoYXIqIGFTdHJpbmcpOwogIHN0YXRpYyBQUkJvb2wgSXNB
c2NpaUFscGhhKFBSVW5pY2hhciBhQ2hhcik7CiAgc3RhdGljIFBSQm9vbCBJc0FzY2lpRGlnaXQo
UFJVbmljaGFyIGFDaGFyKTsKICBzdGF0aWMgUFJCb29sIElzQXNjaWlTcGFjZShQUlVuaWNoYXIg
YUNoYXIpOwp9OwojIDM1ICJuc1NvZnR3YXJlVXBkYXRlLmNwcCIgMgojIDEgIi4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lPYnNlcnZlclNlcnZpY2UuaCIgMQojIDE0ICIuLi8uLi9kaXN0L2luY2x1ZGUv
bnNJT2JzZXJ2ZXJTZXJ2aWNlLmgiCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSU9ic2VydmVy
LmgiIDEKIyAzMCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSU9ic2VydmVyLmgiCmNsYXNzIG5zSU9i
c2VydmVyIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5z
SUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGRiMjQyZTAxLCAweGU0
ZDksIDB4MTFkMiwgeyAweDlkLCAweGRlLCAweDAwLCAweDAwLCAweDY0LCAweDY1LCAweDczLCAw
eDc0IH19OyByZXR1cm4gaWlkO30KIyA0NSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSU9ic2VydmVy
LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBPYnNlcnZlKG5zSVN1cHBvcnRzICphU3ViamVjdCwgY29u
c3QgUFJVbmljaGFyICphVG9waWMsIGNvbnN0IFBSVW5pY2hhciAqYURhdGEpID0gMDsKCn07CiMg
MTUgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lPYnNlcnZlclNlcnZpY2UuaCIgMgojIDMzICIuLi8u
Li9kaXN0L2luY2x1ZGUvbnNJT2JzZXJ2ZXJTZXJ2aWNlLmgiCmNsYXNzIG5zSU9ic2VydmVyU2Vy
dmljZSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJ
RCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhkMDdmNTE5MiwgMHhlM2Qx
LCAweDExZDIsIHsgMHg4YSwgMHhjZCwgMHgwMCwgMHgxMCwgMHg1YSwgMHgxYiwgMHg4OCwgMHg2
MCB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEFkZE9ic2VydmVyKG5zSU9i
c2VydmVyICphbk9ic2VydmVyLCBjb25zdCBQUlVuaWNoYXIgKmFUb3BpYykgPSAwOwoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBSZW1vdmVPYnNlcnZlcihuc0lPYnNlcnZlciAqYW5PYnNlcnZlciwgY29u
c3QgUFJVbmljaGFyICpuc1N0cmluZykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFbnVtZXJh
dGVPYnNlcnZlckxpc3QoY29uc3QgUFJVbmljaGFyICphVG9waWMsIG5zSUVudW1lcmF0b3IgKipf
cmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IE5vdGlmeShuc0lTdXBwb3J0cyAqYVN1
YmplY3QsIGNvbnN0IFBSVW5pY2hhciAqYVRvcGljLCBjb25zdCBQUlVuaWNoYXIgKnNvbWVEYXRh
KSA9IDA7Cgp9OwojIDM2ICJuc1NvZnR3YXJlVXBkYXRlLmNwcCIgMgoKIyAxICIvdXNyL3NyYy9t
aXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvbnNwci5oIiAxCiMgMjIgIi91c3Ivc3JjL21p
c2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9uc3ByLmgiCiMgMSAiL3Vzci9zcmMvbWlzYy9t
b3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByYXRvbS5oIiAxCiMgMjMgIi91c3Ivc3JjL21pc2Mv
bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9uc3ByLmgiIDIKIyAxICIvdXNyL3NyYy9taXNjL21v
emlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJiaXQuaCIgMQojIDIyICIvdXNyL3NyYy9taXNjL21v
emlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJiaXQuaCIKIyAxICIvdXNyL3NyYy9taXNjL21vemls
bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAxCiMgMjMgIi91c3Ivc3JjL21pc2MvbW96
aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmJpdC5oIiAyCmV4dGVybiAiQyIgewoKCgoKdHlwZWRl
ZiB1bnNpZ25lZCBsb25nIHByYml0bWFwX3Q7CiMgNDAgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9k
aXN0L2luY2x1ZGUvbnNwci9wcmJpdC5oIgpleHRlcm4gUFJJbnRuIFBSX0NlaWxpbmdMb2cyKFBS
VWludDMyIGkpOwoKCgoKZXh0ZXJuIFBSSW50biBQUl9GbG9vckxvZzIoUFJVaW50MzIgaSk7CiMg
OTEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmJpdC5oIgp9CiMg
MjQgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9uc3ByLmgiIDIKIyAx
ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJjbGlzdC5oIiAxCiMg
MjIgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmNsaXN0LmgiCiMg
MSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQoj
IDIzICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJjbGlzdC5oIiAy
Cgp0eXBlZGVmIHN0cnVjdCBQUkNMaXN0U3RyIFBSQ0xpc3Q7CgoKCgpzdHJ1Y3QgUFJDTGlzdFN0
ciB7CiAgICBQUkNMaXN0ICpuZXh0OwogICAgUFJDTGlzdCAqcHJldjsKfTsKIyAyNSAiL3Vzci9z
cmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL25zcHIuaCIgMgojIDEgIi91c3Ivc3Jj
L21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmNtb24uaCIgMQojIDI2ICIvdXNyL3Ny
Yy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvbnNwci5oIiAyCiMgMSAiL3Vzci9zcmMv
bWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByY3Zhci5oIiAxCiMgMjIgIi91c3Ivc3Jj
L21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmN2YXIuaCIKIyAxICIvdXNyL3NyYy9t
aXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsb2NrLmgiIDEKIyAyMyAiL3Vzci9zcmMv
bWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByY3Zhci5oIiAyCiMgMSAiL3Vzci9zcmMv
bWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW5ydmFsLmgiIDEKIyAyNCAiL3Vzci9z
cmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByY3Zhci5oIiAyCgpleHRlcm4gIkMi
IHsKCnR5cGVkZWYgc3RydWN0IFBSQ29uZFZhciBQUkNvbmRWYXI7CiMgNDAgIi91c3Ivc3JjL21p
c2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmN2YXIuaCIKZXh0ZXJuIFBSQ29uZFZhciog
UFJfTmV3Q29uZFZhcihQUkxvY2sgKmxvY2spOwoKCgoKCgoKZXh0ZXJuIHZvaWQgUFJfRGVzdHJv
eUNvbmRWYXIoUFJDb25kVmFyICpjdmFyKTsKIyA3OCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rp
c3QvaW5jbHVkZS9uc3ByL3ByY3Zhci5oIgpleHRlcm4gUFJTdGF0dXMgUFJfV2FpdENvbmRWYXIo
UFJDb25kVmFyICpjdmFyLCBQUkludGVydmFsVGltZSB0aW1lb3V0KTsKIyA5MyAiL3Vzci9zcmMv
bWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByY3Zhci5oIgpleHRlcm4gUFJTdGF0dXMg
UFJfTm90aWZ5Q29uZFZhcihQUkNvbmRWYXIgKmN2YXIpOwojIDEwMyAiL3Vzci9zcmMvbWlzYy9t
b3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByY3Zhci5oIgpleHRlcm4gUFJTdGF0dXMgUFJfTm90
aWZ5QWxsQ29uZFZhcihQUkNvbmRWYXIgKmN2YXIpOwoKfQojIDI3ICIvdXNyL3NyYy9taXNjL21v
emlsbGEvZGlzdC9pbmNsdWRlL25zcHIvbnNwci5oIiAyCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3pp
bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByZHRvYS5oIiAxCiMgMjIgIi91c3Ivc3JjL21pc2MvbW96
aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmR0b2EuaCIKIyAxICIvdXNyL3NyYy9taXNjL21vemls
bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAxCiMgMjMgIi91c3Ivc3JjL21pc2MvbW96
aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmR0b2EuaCIgMgoKZXh0ZXJuICJDIiB7CiMgNDMgIi91
c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmR0b2EuaCIKZXh0ZXJuIFBS
RmxvYXQ2NAoKUFJfc3RydG9kKGNvbnN0IGNoYXIgKnMwMCwgY2hhciAqKnNlKTsKCgoKCgoKCmV4
dGVybiB2b2lkIFBSX2NudnRmKGNoYXIgKmJ1ZiwgUFJJbnRuIGJ1ZnN6LCBQUkludG4gcHJjc24s
IFBSRmxvYXQ2NCBmdmFsKTsKIyA2NiAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVk
ZS9uc3ByL3ByZHRvYS5oIgpleHRlcm4gUFJTdGF0dXMgUFJfZHRvYShQUkZsb2F0NjQgZCwgUFJJ
bnRuIG1vZGUsIFBSSW50biBuZGlnaXRzLAogICAgICAgIFBSSW50biAqZGVjcHQsIFBSSW50biAq
c2lnbiwgY2hhciAqKnJ2ZSwgY2hhciAqYnVmLCBQUlNpemUgYnVmc2l6ZSk7Cgp9CiMgMjggIi91
c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9uc3ByLmgiIDIKIyAxICIvdXNy
L3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJlbnYuaCIgMQojIDIyICIvdXNy
L3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJlbnYuaCIKIyAxICIvdXNyL3Ny
Yy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAxCiMgMjMgIi91c3Iv
c3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmVudi5oIiAyCgoKCgoKCgpleHRl
cm4gIkMiIHsKCgoKCgpleHRlcm4gY2hhciogUFJfR2V0RW52KGNvbnN0IGNoYXIgKnZhcik7CgoK
CgoKfQojIDI5ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvbnNwci5o
IiAyCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByZXJyb3Iu
aCIgMQojIDIyICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJlcnJv
ci5oIgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVz
LmgiIDEKIyAyMyAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByZXJy
b3IuaCIgMgoKZXh0ZXJuICJDIiB7Cgp0eXBlZGVmIFBSSW50MzIgUFJFcnJvckNvZGU7CgoKCiMg
MSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByZXJyLmgiIDEKIyAy
NTMgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmVyci5oIgpleHRl
cm4gdm9pZCBuc3ByX0luaXRpYWxpemVQUkVycm9yVGFibGUodm9pZCk7CiMgMzEgIi91c3Ivc3Jj
L21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmVycm9yLmgiIDIKCgoKCgoKCmV4dGVy
biB2b2lkIFBSX1NldEVycm9yKFBSRXJyb3JDb2RlIGVycm9yQ29kZSwgUFJJbnQzMiBvc2Vycik7
CiMgNDkgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmVycm9yLmgi
CmV4dGVybiB2b2lkIFBSX1NldEVycm9yVGV4dCgKICAgIFBSSW50biB0ZXh0TGVuZ3RoLCBjb25z
dCBjaGFyICp0ZXh0KTsKCgoKCmV4dGVybiBQUkVycm9yQ29kZSBQUl9HZXRFcnJvcih2b2lkKTsK
CgoKCgpleHRlcm4gUFJJbnQzMiBQUl9HZXRPU0Vycm9yKHZvaWQpOwoKCgoKCgpleHRlcm4gUFJJ
bnQzMiBQUl9HZXRFcnJvclRleHRMZW5ndGgodm9pZCk7CgoKCgoKCmV4dGVybiBQUkludDMyIFBS
X0dldEVycm9yVGV4dChjaGFyICp0ZXh0KTsKIyAxNTggIi91c3Ivc3JjL21pc2MvbW96aWxsYS9k
aXN0L2luY2x1ZGUvbnNwci9wcmVycm9yLmgiCnR5cGVkZWYgUFJVaW50MzIgUFJMYW5ndWFnZUNv
ZGU7CiMgMTY3ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJlcnJv
ci5oIgpzdHJ1Y3QgUFJFcnJvck1lc3NhZ2UgewogICAgY29uc3QgY2hhciAqIG5hbWU7CiAgICBj
b25zdCBjaGFyICogZW5fdGV4dDsKfTsKCgoKCgoKc3RydWN0IFBSRXJyb3JUYWJsZSB7CiAgICBj
b25zdCBzdHJ1Y3QgUFJFcnJvck1lc3NhZ2UgKiBtc2dzOwogICAgY29uc3QgY2hhciAqbmFtZTsK
ICAgIFBSRXJyb3JDb2RlIGJhc2U7CiAgICBpbnQgbl9tc2dzOwp9OwoKCgoKCgpzdHJ1Y3QgUFJF
cnJvckNhbGxiYWNrUHJpdmF0ZTsKCgoKCgoKCnN0cnVjdCBQUkVycm9yQ2FsbGJhY2tUYWJsZVBy
aXZhdGU7CiMgMjA5ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJl
cnJvci5oIgp0eXBlZGVmIGNvbnN0IGNoYXIgKgpQUkVycm9yQ2FsbGJhY2tMb29rdXBGbihQUkVy
cm9yQ29kZSBjb2RlLCBQUkxhbmd1YWdlQ29kZSBsYW5ndWFnZSwKICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0cnVjdCBQUkVycm9yVGFibGUgKnRhYmxlLAogICAgICAgICAgICAgICAgICAgc3Ry
dWN0IFBSRXJyb3JDYWxsYmFja1ByaXZhdGUgKmNiX3ByaXZhdGUsCiAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3QgUFJFcnJvckNhbGxiYWNrVGFibGVQcml2YXRlICp0YWJsZV9wcml2YXRlKTsKIyAy
MjUgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmVycm9yLmgiCnR5
cGVkZWYgc3RydWN0IFBSRXJyb3JDYWxsYmFja1RhYmxlUHJpdmF0ZSAqClBSRXJyb3JDYWxsYmFj
a05ld1RhYmxlRm4oY29uc3Qgc3RydWN0IFBSRXJyb3JUYWJsZSAqdGFibGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCBQUkVycm9yQ2FsbGJhY2tQcml2YXRlICpjYl9wcml2YXRlKTsK
IyAyNDMgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmVycm9yLmgi
CmV4dGVybiBjb25zdCBjaGFyICogUFJfRXJyb3JUb1N0cmluZyhQUkVycm9yQ29kZSBjb2RlLAog
ICAgUFJMYW5ndWFnZUNvZGUgbGFuZ3VhZ2UpOwojIDI1NyAiL3Vzci9zcmMvbWlzYy9tb3ppbGxh
L2Rpc3QvaW5jbHVkZS9uc3ByL3ByZXJyb3IuaCIKZXh0ZXJuIGNvbnN0IGNoYXIgKiBQUl9FcnJv
clRvTmFtZShQUkVycm9yQ29kZSBjb2RlKTsKIyAyNzEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9k
aXN0L2luY2x1ZGUvbnNwci9wcmVycm9yLmgiCmV4dGVybiBjb25zdCBjaGFyICogY29uc3QgKiBQ
Ul9FcnJvckxhbmd1YWdlcyh2b2lkKTsKIyAyODQgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0
L2luY2x1ZGUvbnNwci9wcmVycm9yLmgiCmV4dGVybiBQUkVycm9yQ29kZSBQUl9FcnJvckluc3Rh
bGxUYWJsZShjb25zdCBzdHJ1Y3QgUFJFcnJvclRhYmxlICp0YWJsZSk7CiMgMzAwICIvdXNyL3Ny
Yy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJlcnJvci5oIgpleHRlcm4gdm9pZCBQ
Ul9FcnJvckluc3RhbGxDYWxsYmFjayhjb25zdCBjaGFyICogY29uc3QgKiBsYW5ndWFnZXMsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSRXJyb3JDYWxsYmFja0xvb2t1cEZuICpsb29r
dXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSRXJyb3JDYWxsYmFja05ld1RhYmxl
Rm4gKm5ld3RhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgUFJFcnJv
ckNhbGxiYWNrUHJpdmF0ZSAqY2JfcHJpdmF0ZSk7Cgp9CiMgMzAgIi91c3Ivc3JjL21pc2MvbW96
aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9uc3ByLmgiIDIKIyAxICIvdXNyL3NyYy9taXNjL21vemls
bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpbmV0LmgiIDEKIyA0OCAiL3Vzci9zcmMvbWlzYy9tb3pp
bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW5ldC5oIgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlw
ZXMuaCIgMSAzCiMgNDkgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w
cmluZXQuaCIgMgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc29ja2V0LmgiIDEgMwojIDIzICIvdXNy
L2luY2x1ZGUvc3lzL3NvY2tldC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEg
MwojIDI0ICIvdXNyL2luY2x1ZGUvc3lzL3NvY2tldC5oIiAyIDMKCmV4dGVybiAiQyIgewoKIyAx
ICIvdXNyL2luY2x1ZGUvc3lzL3Vpby5oIiAxIDMKIyAyMiAiL3Vzci9pbmNsdWRlL3N5cy91aW8u
aCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRl
L3N5cy91aW8uaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMjUg
Ii91c3IvaW5jbHVkZS9zeXMvdWlvLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKIyAxICIvdXNyL2lu
Y2x1ZGUvYml0cy91aW8uaCIgMSAzCiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3Vpby5oIiAzCiMg
MSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2JpdHMv
dWlvLmgiIDIgMwojIDQyICIvdXNyL2luY2x1ZGUvYml0cy91aW8uaCIgMwpzdHJ1Y3QgaW92ZWMK
ICB7CiAgICB2b2lkICppb3ZfYmFzZTsKICAgIHNpemVfdCBpb3ZfbGVuOwogIH07CiMgMzAgIi91
c3IvaW5jbHVkZS9zeXMvdWlvLmgiIDIgMwoKCgoKCgoKZXh0ZXJuIHNzaXplX3QgcmVhZHYgKGlu
dCBfX2ZkLCBfX2NvbnN0IHN0cnVjdCBpb3ZlYyAqX192ZWN0b3IsIGludCBfX2NvdW50KQogICAg
IHRocm93ICgpOwoKCgoKCgpleHRlcm4gc3NpemVfdCB3cml0ZXYgKGludCBfX2ZkLCBfX2NvbnN0
IHN0cnVjdCBpb3ZlYyAqX192ZWN0b3IsIGludCBfX2NvdW50KQogICAgIHRocm93ICgpOwoKfQoj
IDI4ICIvdXNyL2luY2x1ZGUvc3lzL3NvY2tldC5oIiAyIDMKCiMgMSAiL3Vzci9nY2MtcHJlMy4w
L2xpYi9nY2MtbGliL2lhNjQtaHAtbGludXgvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMw
ICIvdXNyL2luY2x1ZGUvc3lzL3NvY2tldC5oIiAyIDMKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9i
aXRzL3NvY2tldC5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2V0LmgiIDMKIyAx
ICIvdXNyL2djYy1wcmUzLjAvbGliL2djYy1saWIvaWE2NC1ocC1saW51eC8zLjAvaW5jbHVkZS9z
dGRkZWYuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9iaXRzL3NvY2tldC5oIiAyIDMKCiMgMSAi
L3Vzci9nY2MtcHJlMy4wL2xpYi9nY2MtbGliL2lhNjQtaHAtbGludXgvMy4wL2luY2x1ZGUvbGlt
aXRzLmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvYml0cy9zb2NrZXQuaCIgMiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIyAzMyAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2V0
LmgiIDIgMwoKCgp0eXBlZGVmIF9fc29ja2xlbl90IHNvY2tsZW5fdDsKCgoKCmVudW0gX19zb2Nr
ZXRfdHlwZQp7CiAgU09DS19TVFJFQU0gPSAxLAoKCiAgU09DS19ER1JBTSA9IDIsCgoKICBTT0NL
X1JBVyA9IDMsCgogIFNPQ0tfUkRNID0gNCwKCiAgU09DS19TRVFQQUNLRVQgPSA1LAoKCiAgU09D
S19QQUNLRVQgPSAxMAoKCgp9OwojIDEzOCAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2V0LmgiIDMK
IyAxICIvdXNyL2luY2x1ZGUvYml0cy9zb2NrYWRkci5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRl
L2JpdHMvc29ja2FkZHIuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBzYV9mYW1pbHlf
dDsKIyAxMzkgIi91c3IvaW5jbHVkZS9iaXRzL3NvY2tldC5oIiAyIDMKCgpzdHJ1Y3Qgc29ja2Fk
ZHIKICB7CiAgICBzYV9mYW1pbHlfdCBzYV9mYW1pbHk7CiAgICBjaGFyIHNhX2RhdGFbMTRdOwog
IH07CiMgMTU4ICIvdXNyL2luY2x1ZGUvYml0cy9zb2NrZXQuaCIgMwpzdHJ1Y3Qgc29ja2FkZHJf
c3RvcmFnZQogIHsKICAgIHNhX2ZhbWlseV90IHNzX2ZhbWlseTsKICAgIF9fdWludDY0X3QgX19z
c19hbGlnbjsKICAgIGNoYXIgX19zc19wYWRkaW5nWygxMjggLSAoMiAqIHNpemVvZiAoX191aW50
NjRfdCkpKV07CiAgfTsKCgoKZW51bQogIHsKICAgIE1TR19PT0IgPSAweDAxLAoKICAgIE1TR19Q
RUVLID0gMHgwMiwKCiAgICBNU0dfRE9OVFJPVVRFID0gMHgwNCwKCgoKICAgIE1TR19UUllIQVJE
ID0gTVNHX0RPTlRST1VURSwKCgogICAgTVNHX0NUUlVOQyA9IDB4MDgsCgogICAgTVNHX1BST1hZ
ID0gMHgxMCwKCiAgICBNU0dfVFJVTkMgPSAweDIwLAoKICAgIE1TR19ET05UV0FJVCA9IDB4NDAs
CgogICAgTVNHX0VPUiA9IDB4ODAsCgogICAgTVNHX1dBSVRBTEwgPSAweDEwMCwKCiAgICBNU0df
RklOID0gMHgyMDAsCgogICAgTVNHX1NZTiA9IDB4NDAwLAoKICAgIE1TR19DT05GSVJNID0gMHg4
MDAsCgogICAgTVNHX1JTVCA9IDB4MTAwMCwKCiAgICBNU0dfRVJSUVVFVUUgPSAweDIwMDAsCgog
ICAgTVNHX05PU0lHTkFMID0gMHg0MDAwCgogIH07CgoKCgpzdHJ1Y3QgbXNnaGRyCiAgewogICAg
dm9pZCAqbXNnX25hbWU7CiAgICBzb2NrbGVuX3QgbXNnX25hbWVsZW47CgogICAgc3RydWN0IGlv
dmVjICptc2dfaW92OwogICAgc2l6ZV90IG1zZ19pb3ZsZW47CgogICAgdm9pZCAqbXNnX2NvbnRy
b2w7CiAgICBzaXplX3QgbXNnX2NvbnRyb2xsZW47CgogICAgaW50IG1zZ19mbGFnczsKICB9OwoK
CnN0cnVjdCBjbXNnaGRyCiAgewogICAgc2l6ZV90IGNtc2dfbGVuOwoKICAgIGludCBjbXNnX2xl
dmVsOwogICAgaW50IGNtc2dfdHlwZTsKICAgIF9fZXh0ZW5zaW9uX18gdW5zaWduZWQgY2hhciBf
X2Ntc2dfZGF0YSBbXTsKCiAgfTsKIyAyNTAgIi91c3IvaW5jbHVkZS9iaXRzL3NvY2tldC5oIiAz
CmV4dGVybiBzdHJ1Y3QgY21zZ2hkciAqX19jbXNnX254dGhkciAoc3RydWN0IG1zZ2hkciAqX19t
aGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjbXNnaGRy
ICpfX2Ntc2cpIHRocm93ICgpOwojIDI3NyAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2V0LmgiIDMK
ZW51bQogIHsKICAgIFNDTV9SSUdIVFMgPSAweDAxLAoKCiAgICBTQ01fQ1JFREVOVElBTFMgPSAw
eDAyLAoKCiAgICBfX1NDTV9DT05ORUNUID0gMHgwMwogIH07CgoKCnN0cnVjdCB1Y3JlZAp7CiAg
cGlkX3QgcGlkOwogIHVpZF90IHVpZDsKICBnaWRfdCBnaWQ7Cn07CgoKIyAxICIvdXNyL2luY2x1
ZGUvYXNtL3NvY2tldC5oIiAxIDMKIyAxMSAiL3Vzci9pbmNsdWRlL2FzbS9zb2NrZXQuaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS9hc20vc29ja2lvcy5oIiAxIDMKIyAxMiAiL3Vzci9pbmNsdWRlL2Fz
bS9zb2NrZXQuaCIgMiAzCiMgMjk5ICIvdXNyL2luY2x1ZGUvYml0cy9zb2NrZXQuaCIgMiAzCgoK
CnN0cnVjdCBsaW5nZXIKICB7CiAgICBpbnQgbF9vbm9mZjsKICAgIGludCBsX2xpbmdlcjsKICB9
OwojIDM2ICIvdXNyL2luY2x1ZGUvc3lzL3NvY2tldC5oIiAyIDMKCgoKCnN0cnVjdCBvc29ja2Fk
ZHIKICB7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgc2FfZmFtaWx5OwogICAgdW5zaWduZWQgY2hh
ciBzYV9kYXRhWzE0XTsKICB9OwoKCgoKZW51bQp7CiAgU0hVVF9SRCA9IDAsCgogIFNIVVRfV1Is
CgogIFNIVVRfUkRXUgoKfTsKIyAxMDAgIi91c3IvaW5jbHVkZS9zeXMvc29ja2V0LmgiIDMKZXh0
ZXJuIGludCBzb2NrZXQgKGludCBfX2RvbWFpbiwgaW50IF9fdHlwZSwgaW50IF9fcHJvdG9jb2wp
IHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgc29ja2V0cGFpciAoaW50IF9fZG9tYWluLCBpbnQg
X190eXBlLCBpbnQgX19wcm90b2NvbCwKICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19mZHNb
Ml0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgYmluZCAoaW50IF9fZmQsIF9fY29uc3Qgc3RydWN0
IHNvY2thZGRyICogX19hZGRyLCBzb2NrbGVuX3QgX19sZW4pCiAgICAgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBnZXRzb2NrbmFtZSAoaW50IF9fZmQsIHN0cnVjdCBzb2NrYWRkciAqX19yZXN0cmlj
dCBfX2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tsZW5fdCAqX19yZXN0cmljdCBf
X2xlbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBjb25uZWN0IChpbnQgX19mZCwgX19jb25z
dCBzdHJ1Y3Qgc29ja2FkZHIgKiBfX2FkZHIsIHNvY2tsZW5fdCBfX2xlbikKICAgICB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGludCBnZXRwZWVybmFtZSAoaW50IF9fZmQsIHN0cnVjdCBzb2NrYWRkciAq
X19yZXN0cmljdCBfX2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tsZW5fdCAqX19y
ZXN0cmljdCBfX2xlbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc2VuZCAoaW50IF9fZmQsIF9f
Y29uc3Qgdm9pZCAqX19idWYsIHNpemVfdCBfX24sIGludCBfX2ZsYWdzKQogICAgIHRocm93ICgp
OwoKCgpleHRlcm4gaW50IHJlY3YgKGludCBfX2ZkLCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbiwg
aW50IF9fZmxhZ3MpCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc2VuZHRvIChpbnQgX19m
ZCwgX19jb25zdCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgIGlu
dCBfX2ZsYWdzLCBfX2NvbnN0IHN0cnVjdCBzb2NrYWRkciAqIF9fYWRkciwKICAgICAgICAgICAg
ICAgICAgIHNvY2tsZW5fdCBfX2FkZHJfbGVuKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHJl
Y3Zmcm9tIChpbnQgX19mZCwgdm9pZCAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbiwgaW50
IF9fZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqX19yZXN0cmlj
dCBfX2FkZHIsIHNvY2tsZW5fdCAqX19yZXN0cmljdCBfX2FkZHJfbGVuKQogICAgIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGludCBzZW5kbXNnIChpbnQgX19mZCwgX19jb25zdCBzdHJ1Y3QgbXNnaGRy
ICpfX21lc3NhZ2UsIGludCBfX2ZsYWdzKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHJl
Y3Ztc2cgKGludCBfX2ZkLCBzdHJ1Y3QgbXNnaGRyICpfX21lc3NhZ2UsIGludCBfX2ZsYWdzKQog
ICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZ2V0c29ja29wdCAoaW50IF9fZmQsIGludCBf
X2xldmVsLCBpbnQgX19vcHRuYW1lLAogICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fcmVz
dHJpY3QgX19vcHR2YWwsCiAgICAgICAgICAgICAgICAgICAgICAgc29ja2xlbl90ICpfX3Jlc3Ry
aWN0IF9fb3B0bGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc2V0c29ja29wdCAoaW50IF9f
ZmQsIGludCBfX2xldmVsLCBpbnQgX19vcHRuYW1lLAogICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3Qgdm9pZCAqX19vcHR2YWwsIHNvY2tsZW5fdCBfX29wdGxlbikgdGhyb3cgKCk7CgoKCgoK
ZXh0ZXJuIGludCBsaXN0ZW4gKGludCBfX2ZkLCBpbnQgX19uKSB0aHJvdyAoKTsKCgoKCgoKZXh0
ZXJuIGludCBhY2NlcHQgKGludCBfX2ZkLCBzdHJ1Y3Qgc29ja2FkZHIgKl9fcmVzdHJpY3QgX19h
ZGRyLAogICAgICAgICAgICAgICAgICAgc29ja2xlbl90ICpfX3Jlc3RyaWN0IF9fYWRkcl9sZW4p
CiAgICAgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHNodXRkb3duIChpbnQgX19mZCwgaW50
IF9faG93KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBpc2ZkdHlwZSAoaW50IF9fZmQsIGlu
dCBfX2ZkdHlwZSkgdGhyb3cgKCk7CgoKfQojIDUwICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlz
dC9pbmNsdWRlL25zcHIvcHJpbmV0LmgiIDIKIyAxICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5o
IiAxIDMKIyAyMiAiL3Vzci9pbmNsdWRlL25ldGluZXQvaW4uaCIgMwojIDEgIi91c3IvaW5jbHVk
ZS9mZWF0dXJlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL25ldGluZXQvaW4uaCIgMiAzCiMg
MSAiL3Vzci9pbmNsdWRlL3N0ZGludC5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N0ZGludC5o
IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUv
c3RkaW50LmgiIDIgMwoKIyAxICIvdXNyL2djYy1wcmUzLjAvbGliL2djYy1saWIvaWE2NC1ocC1s
aW51eC8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9zdGRpbnQu
aCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2NoYXIuaCIgMSAzCiMgMzAgIi91c3IvaW5j
bHVkZS9zdGRpbnQuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd29yZHNpemUuaCIgMSAz
CiMgMzEgIi91c3IvaW5jbHVkZS9zdGRpbnQuaCIgMiAzCiMgNTEgIi91c3IvaW5jbHVkZS9zdGRp
bnQuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBz
aG9ydCBpbnQgdWludDE2X3Q7Cgp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50MzJfdDsKCgoKdHlw
ZWRlZiB1bnNpZ25lZCBsb25nIGludCB1aW50NjRfdDsKIyA2OCAiL3Vzci9pbmNsdWRlL3N0ZGlu
dC5oIiAzCnR5cGVkZWYgc2lnbmVkIGNoYXIgaW50X2xlYXN0OF90Owp0eXBlZGVmIHNob3J0IGlu
dCBpbnRfbGVhc3QxNl90Owp0eXBlZGVmIGludCBpbnRfbGVhc3QzMl90OwoKdHlwZWRlZiBsb25n
IGludCBpbnRfbGVhc3Q2NF90OwoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludF9sZWFz
dDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgdWludF9sZWFzdDE2X3Q7CnR5cGVkZWYg
dW5zaWduZWQgaW50IHVpbnRfbGVhc3QzMl90OwoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB1
aW50X2xlYXN0NjRfdDsKIyA5MyAiL3Vzci9pbmNsdWRlL3N0ZGludC5oIiAzCnR5cGVkZWYgc2ln
bmVkIGNoYXIgaW50X2Zhc3Q4X3Q7Cgp0eXBlZGVmIGxvbmcgaW50IGludF9mYXN0MTZfdDsKdHlw
ZWRlZiBsb25nIGludCBpbnRfZmFzdDMyX3Q7CnR5cGVkZWYgbG9uZyBpbnQgaW50X2Zhc3Q2NF90
OwojIDEwNiAiL3Vzci9pbmNsdWRlL3N0ZGludC5oIiAzCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1
aW50X2Zhc3Q4X3Q7Cgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVpbnRfZmFzdDE2X3Q7CnR5
cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgdWludF9mYXN0MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBs
b25nIGludCB1aW50X2Zhc3Q2NF90OwojIDEyMiAiL3Vzci9pbmNsdWRlL3N0ZGludC5oIiAzCnR5
cGVkZWYgbG9uZyBpbnQgaW50cHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB1aW50
cHRyX3Q7CiMgMTM3ICIvdXNyL2luY2x1ZGUvc3RkaW50LmgiIDMKdHlwZWRlZiBsb25nIGludCBp
bnRtYXhfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB1aW50bWF4X3Q7CiMgMjQgIi91c3Iv
aW5jbHVkZS9uZXRpbmV0L2luLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgi
IDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAyIDMKCgpleHRlcm4gIkMiIHsK
CgplbnVtCiAgewogICAgSVBQUk9UT19JUCA9IDAsCgogICAgSVBQUk9UT19IT1BPUFRTID0gMCwK
CiAgICBJUFBST1RPX0lDTVAgPSAxLAoKICAgIElQUFJPVE9fSUdNUCA9IDIsCgogICAgSVBQUk9U
T19JUElQID0gNCwKCiAgICBJUFBST1RPX1RDUCA9IDYsCgogICAgSVBQUk9UT19FR1AgPSA4LAoK
ICAgIElQUFJPVE9fUFVQID0gMTIsCgogICAgSVBQUk9UT19VRFAgPSAxNywKCiAgICBJUFBST1RP
X0lEUCA9IDIyLAoKICAgIElQUFJPVE9fVFAgPSAyOSwKCiAgICBJUFBST1RPX0lQVjYgPSA0MSwK
CiAgICBJUFBST1RPX1JPVVRJTkcgPSA0MywKCiAgICBJUFBST1RPX0ZSQUdNRU5UID0gNDQsCgog
ICAgSVBQUk9UT19SU1ZQID0gNDYsCgogICAgSVBQUk9UT19HUkUgPSA0NywKCiAgICBJUFBST1RP
X0VTUCA9IDUwLAoKICAgIElQUFJPVE9fQUggPSA1MSwKCiAgICBJUFBST1RPX0lDTVBWNiA9IDU4
LAoKICAgIElQUFJPVE9fTk9ORSA9IDU5LAoKICAgIElQUFJPVE9fRFNUT1BUUyA9IDYwLAoKICAg
IElQUFJPVE9fTVRQID0gOTIsCgogICAgSVBQUk9UT19FTkNBUCA9IDk4LAoKICAgIElQUFJPVE9f
UElNID0gMTAzLAoKICAgIElQUFJPVE9fQ09NUCA9IDEwOCwKCiAgICBJUFBST1RPX1JBVyA9IDI1
NSwKCiAgICBJUFBST1RPX01BWAogIH07CgoKCnR5cGVkZWYgdWludDE2X3QgaW5fcG9ydF90OwoK
CmVudW0KICB7CiAgICBJUFBPUlRfRUNITyA9IDcsCiAgICBJUFBPUlRfRElTQ0FSRCA9IDksCiAg
ICBJUFBPUlRfU1lTVEFUID0gMTEsCiAgICBJUFBPUlRfREFZVElNRSA9IDEzLAogICAgSVBQT1JU
X05FVFNUQVQgPSAxNSwKICAgIElQUE9SVF9GVFAgPSAyMSwKICAgIElQUE9SVF9URUxORVQgPSAy
MywKICAgIElQUE9SVF9TTVRQID0gMjUsCiAgICBJUFBPUlRfVElNRVNFUlZFUiA9IDM3LAogICAg
SVBQT1JUX05BTUVTRVJWRVIgPSA0MiwKICAgIElQUE9SVF9XSE9JUyA9IDQzLAogICAgSVBQT1JU
X01UUCA9IDU3LAoKICAgIElQUE9SVF9URlRQID0gNjksCiAgICBJUFBPUlRfUkpFID0gNzcsCiAg
ICBJUFBPUlRfRklOR0VSID0gNzksCiAgICBJUFBPUlRfVFRZTElOSyA9IDg3LAogICAgSVBQT1JU
X1NVUERVUCA9IDk1LAoKCiAgICBJUFBPUlRfRVhFQ1NFUlZFUiA9IDUxMiwKICAgIElQUE9SVF9M
T0dJTlNFUlZFUiA9IDUxMywKICAgIElQUE9SVF9DTURTRVJWRVIgPSA1MTQsCiAgICBJUFBPUlRf
RUZTU0VSVkVSID0gNTIwLAoKCiAgICBJUFBPUlRfQklGRlVEUCA9IDUxMiwKICAgIElQUE9SVF9X
SE9TRVJWRVIgPSA1MTMsCiAgICBJUFBPUlRfUk9VVEVTRVJWRVIgPSA1MjAsCgoKICAgIElQUE9S
VF9SRVNFUlZFRCA9IDEwMjQsCgoKICAgIElQUE9SVF9VU0VSUkVTRVJWRUQgPSA1MDAwCiAgfTsK
CgoKdHlwZWRlZiB1aW50MzJfdCBpbl9hZGRyX3Q7CnN0cnVjdCBpbl9hZGRyCiAgewogICAgaW5f
YWRkcl90IHNfYWRkcjsKICB9OwojIDE5MCAiL3Vzci9pbmNsdWRlL25ldGluZXQvaW4uaCIgMwpz
dHJ1Y3QgaW42X2FkZHIKICB7CiAgICB1bmlvbgogICAgICB7CiAgICAgICAgdWludDhfdCB1Nl9h
ZGRyOFsxNl07CiAgICAgICAgdWludDE2X3QgdTZfYWRkcjE2WzhdOwogICAgICAgIHVpbnQzMl90
IHU2X2FkZHIzMls0XTsKICAgICAgfSBpbjZfdTsKCgoKICB9OwoKZXh0ZXJuIGNvbnN0IHN0cnVj
dCBpbjZfYWRkciBpbjZhZGRyX2FueTsKZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbjZfYWRkciBpbjZh
ZGRyX2xvb3BiYWNrOwoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zb2NrZXQuaCIgMSAz
CiMgMjEzICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAyIDMKCgoKc3RydWN0IHNvY2thZGRy
X2luCiAgewogICAgc2FfZmFtaWx5X3Qgc2luX2ZhbWlseTsKICAgIGluX3BvcnRfdCBzaW5fcG9y
dDsKICAgIHN0cnVjdCBpbl9hZGRyIHNpbl9hZGRyOwoKCiAgICB1bnNpZ25lZCBjaGFyIHNpbl96
ZXJvW3NpemVvZiAoc3RydWN0IHNvY2thZGRyKSAtCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IChzaXplb2YgKHVuc2lnbmVkIHNob3J0IGludCkpIC0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZW9mIChpbl9wb3J0X3QpIC0KICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9m
IChzdHJ1Y3QgaW5fYWRkcildOwogIH07CgoKc3RydWN0IHNvY2thZGRyX2luNgogIHsKICAgIHNh
X2ZhbWlseV90IHNpbjZfZmFtaWx5OwogICAgaW5fcG9ydF90IHNpbjZfcG9ydDsKICAgIHVpbnQz
Ml90IHNpbjZfZmxvd2luZm87CiAgICBzdHJ1Y3QgaW42X2FkZHIgc2luNl9hZGRyOwogICAgdWlu
dDMyX3Qgc2luNl9zY29wZV9pZDsKICB9OwoKCnN0cnVjdCBpcHY2X21yZXEKICB7CgogICAgc3Ry
dWN0IGluNl9hZGRyIGlwdjZtcl9tdWx0aWFkZHI7CgoKICAgIHVuc2lnbmVkIGludCBpcHY2bXJf
aW50ZXJmYWNlOwogIH07CgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9pbi5oIiAxIDMKIyA2NiAi
L3Vzci9pbmNsdWRlL2JpdHMvaW4uaCIgMwpzdHJ1Y3QgaXBfb3B0cwogIHsKICAgIHN0cnVjdCBp
bl9hZGRyIGlwX2RzdDsKICAgIGNoYXIgaXBfb3B0c1s0MF07CiAgfTsKCgpzdHJ1Y3QgaXBfbXJl
cQogIHsKICAgIHN0cnVjdCBpbl9hZGRyIGltcl9tdWx0aWFkZHI7CiAgICBzdHJ1Y3QgaW5fYWRk
ciBpbXJfaW50ZXJmYWNlOwogIH07CgoKc3RydWN0IGlwX21yZXFuCiAgewogICAgc3RydWN0IGlu
X2FkZHIgaW1yX211bHRpYWRkcjsKICAgIHN0cnVjdCBpbl9hZGRyIGltcl9hZGRyZXNzOwogICAg
aW50IGltcl9pZmluZGV4OwogIH07CgoKc3RydWN0IGluX3BrdGluZm8KICB7CiAgICBpbnQgaXBp
X2lmaW5kZXg7CiAgICBzdHJ1Y3QgaW5fYWRkciBpcGlfc3BlY19kc3Q7CiAgICBzdHJ1Y3QgaW5f
YWRkciBpcGlfYWRkcjsKICB9OwojIDI1MSAiL3Vzci9pbmNsdWRlL25ldGluZXQvaW4uaCIgMiAz
CiMgMjU5ICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAzCmV4dGVybiB1aW50MzJfdCBudG9o
bCAodWludDMyX3QgX19uZXRsb25nKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7CmV4dGVybiB1aW50MTZfdCBudG9ocyAodWludDE2X3QgX19uZXRzaG9ydCkKICAgICB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiB1aW50MzJfdCBodG9ubCAo
dWludDMyX3QgX19ob3N0bG9uZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CmV4dGVybiB1aW50MTZfdCBodG9ucyAodWludDE2X3QgX19ob3N0c2hvcnQpCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKIyAxICIvdXNyL2luY2x1ZGUv
ZW5kaWFuLmgiIDEgMwojIDI2OCAiL3Vzci9pbmNsdWRlL25ldGluZXQvaW4uaCIgMiAzCgoKIyAx
ICIvdXNyL2luY2x1ZGUvYml0cy9ieXRlc3dhcC5oIiAxIDMKIyAyNzEgIi91c3IvaW5jbHVkZS9u
ZXRpbmV0L2luLmgiIDIgMwojIDMzMyAiL3Vzci9pbmNsdWRlL25ldGluZXQvaW4uaCIgMwpleHRl
cm4gaW50IGJpbmRyZXN2cG9ydCAoaW50IF9fc29ja2ZkLCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKl9f
c29ja19pbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBiaW5kcmVzdnBvcnQ2IChpbnQgX19zb2Nr
ZmQsIHN0cnVjdCBzb2NrYWRkcl9pbjYgKl9fc29ja19pbikKICAgICB0aHJvdyAoKTsKIyAzNjEg
Ii91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDMKc3RydWN0IGluNl9wa3RpbmZvCiAgewogICAg
c3RydWN0IGluNl9hZGRyIGlwaTZfYWRkcjsKICAgIHVuc2lnbmVkIGludCBpcGk2X2lmaW5kZXg7
CiAgfTsKCn0KIyA1MSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By
aW5ldC5oIiAyCiMgNjUgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w
cmluZXQuaCIKIyAxICIvdXNyL2luY2x1ZGUvYXJwYS9pbmV0LmgiIDEgMwojIDIyICIvdXNyL2lu
Y2x1ZGUvYXJwYS9pbmV0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMg
MjMgIi91c3IvaW5jbHVkZS9hcnBhL2luZXQuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL25ldGlu
ZXQvaW4uaCIgMSAzCiMgMjQgIi91c3IvaW5jbHVkZS9hcnBhL2luZXQuaCIgMiAzCgoKCgoKCgpl
eHRlcm4gIkMiIHsKCgoKZXh0ZXJuIGluX2FkZHJfdCBpbmV0X2FkZHIgKF9fY29uc3QgY2hhciAq
X19jcCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGluX2FkZHJfdCBpbmV0X2xuYW9mIChzdHJ1Y3QgaW5f
YWRkciBfX2luKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCBpbl9hZGRyIGluZXRfbWFrZWFk
ZHIgKGluX2FkZHJfdCBfX25ldCwgaW5fYWRkcl90IF9faG9zdCkKICAgICB0aHJvdyAoKTsKCgpl
eHRlcm4gaW5fYWRkcl90IGluZXRfbmV0b2YgKHN0cnVjdCBpbl9hZGRyIF9faW4pIHRocm93ICgp
OwoKCgpleHRlcm4gaW5fYWRkcl90IGluZXRfbmV0d29yayAoX19jb25zdCBjaGFyICpfX2NwKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmluZXRfbnRvYSAoc3RydWN0IGluX2FkZHIgX19pbikg
dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGluZXRfcHRvbiAoaW50IF9fYWYsIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX2NwLAogICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19yZXN0cmlj
dCBfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gX19jb25zdCBjaGFyICppbmV0X250b3AgKGlu
dCBfX2FmLCBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19jcCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzb2NrbGVuX3QgX19sZW4pCiAg
ICAgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbl9hZGRyX3QgaW5ldF9hdG9uIChfX2NvbnN0IGNo
YXIgKl9fY3AsIHN0cnVjdCBpbl9hZGRyICpfX2lucCkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFy
ICppbmV0X25ldGEgKGluX2FkZHJfdCBfX25ldCwgY2hhciAqX19idWYsIHNpemVfdCBfX2xlbikg
dGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqaW5ldF9uZXRfbnRvcCAoaW50IF9fYWYsIF9fY29u
c3Qgdm9pZCAqX19jcCwgaW50IF9fYml0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo
YXIgKl9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBpbmV0X25l
dF9wdG9uIChpbnQgX19hZiwgX19jb25zdCBjaGFyICpfX2NwLAogICAgICAgICAgICAgICAgICAg
ICAgICAgIHZvaWQgKl9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHVu
c2lnbmVkIGludCBpbmV0X25zYXBfYWRkciAoX19jb25zdCBjaGFyICpfX2NwLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpfX2J1ZiwgaW50IF9fbGVu
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmluZXRfbnNhcF9udG9hIChpbnQgX19sZW4sIF9f
Y29uc3QgdW5zaWduZWQgY2hhciAqX19jcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFyICpfX2J1ZikgdGhyb3cgKCk7CgoKfQojIDY2ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlz
dC9pbmNsdWRlL25zcHIvcHJpbmV0LmgiIDIKCiMgMSAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDEg
MwojIDI2ICIvdXNyL2luY2x1ZGUvbmV0ZGIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJl
cy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1
ZGUvbmV0aW5ldC9pbi5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDIgMwojIDEg
Ii91c3IvaW5jbHVkZS9zdGRpbnQuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9uZXRkYi5oIiAy
IDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvcnBjL25ldGRiLmgiIDEgMwojIDM5ICIvdXNyL2luY2x1
ZGUvcnBjL25ldGRiLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgNDAg
Ii91c3IvaW5jbHVkZS9ycGMvbmV0ZGIuaCIgMiAzCgoKIyAxICIvdXNyL2djYy1wcmUzLjAvbGli
L2djYy1saWIvaWE2NC1ocC1saW51eC8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDMgIi91
c3IvaW5jbHVkZS9ycGMvbmV0ZGIuaCIgMiAzCgpleHRlcm4gIkMiIHsKCnN0cnVjdCBycGNlbnQK
ewogIGNoYXIgKnJfbmFtZTsKICBjaGFyICoqcl9hbGlhc2VzOwogIGludCByX251bWJlcjsKfTsK
CmV4dGVybiB2b2lkIHNldHJwY2VudCAoaW50IF9fc3RheW9wZW4pIHRocm93ICgpOwpleHRlcm4g
dm9pZCBlbmRycGNlbnQgKHZvaWQpIHRocm93ICgpOwpleHRlcm4gc3RydWN0IHJwY2VudCAqZ2V0
cnBjYnluYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CmV4dGVybiBzdHJ1Y3Qg
cnBjZW50ICpnZXRycGNieW51bWJlciAoaW50IF9fbnVtYmVyKSB0aHJvdyAoKTsKZXh0ZXJuIHN0
cnVjdCBycGNlbnQgKmdldHJwY2VudCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRy
cGNieW5hbWVfciAoX19jb25zdCBjaGFyICpfX25hbWUsIHN0cnVjdCBycGNlbnQgKl9fcmVzdWx0
X2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19idWZmZXIsIHNpemVfdCBf
X2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJwY2VudCAqKl9fcmVz
dWx0KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZ2V0cnBjYnludW1iZXJfciAoaW50IF9fbnVtYmVy
LCBzdHJ1Y3QgcnBjZW50ICpfX3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2hhciAqX19idWZmZXIsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3QgcnBjZW50ICoqX19yZXN1bHQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBn
ZXRycGNlbnRfciAoc3RydWN0IHJwY2VudCAqX19yZXN1bHRfYnVmLCBjaGFyICpfX2J1ZmZlciwK
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fYnVmbGVuLCBzdHJ1Y3QgcnBjZW50ICoq
X19yZXN1bHQpIHRocm93ICgpOwoKCn0KIyAzNCAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDIgMwoK
CgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWdpbmZvLmgiIDEgMwojIDMyICIvdXNyL2luY2x1
ZGUvYml0cy9zaWdpbmZvLmgiIDMKdHlwZWRlZiB1bmlvbiBzaWd2YWwKICB7CiAgICBpbnQgc2l2
YWxfaW50OwogICAgdm9pZCAqc2l2YWxfcHRyOwogIH0gc2lndmFsX3Q7CiMgMjk3ICIvdXNyL2lu
Y2x1ZGUvYml0cy9zaWdpbmZvLmgiIDMKc3RydWN0IF9fcHRocmVhZF9hdHRyX3M7Cgp0eXBlZGVm
IHN0cnVjdCBzaWdldmVudAogIHsKICAgIHNpZ3ZhbF90IHNpZ2V2X3ZhbHVlOwogICAgaW50IHNp
Z2V2X3NpZ25vOwogICAgaW50IHNpZ2V2X25vdGlmeTsKCiAgICB1bmlvbgogICAgICB7CiAgICAg
ICAgaW50IF9wYWRbKCg2NCAvIHNpemVvZiAoaW50KSkgLSA0KV07CgogICAgICAgIHN0cnVjdAog
ICAgICAgICAgewogICAgICAgICAgICB2b2lkICgqX2Z1bmN0aW9uKSAoc2lndmFsX3QpOwogICAg
ICAgICAgICBzdHJ1Y3QgX19wdGhyZWFkX2F0dHJfcyAqX2F0dHJpYnV0ZTsKICAgICAgICAgIH0g
X3NpZ2V2X3RocmVhZDsKICAgICAgfSBfc2lnZXZfdW47CiAgfSBzaWdldmVudF90OwoKCgoKCgpl
bnVtCnsKICBTSUdFVl9TSUdOQUwgPSAwLAoKICBTSUdFVl9OT05FLAoKICBTSUdFVl9USFJFQUQK
Cn07CiMgMzkgIi91c3IvaW5jbHVkZS9uZXRkYi5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL3Rp
bWUuaCIgMSAzCiMgNDEgIi91c3IvaW5jbHVkZS9uZXRkYi5oIiAyIDMKCgojIDEgIi91c3IvaW5j
bHVkZS9iaXRzL25ldGRiLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvYml0cy9uZXRkYi5oIiAz
CnN0cnVjdCBuZXRlbnQKewogIGNoYXIgKm5fbmFtZTsKICBjaGFyICoqbl9hbGlhc2VzOwogIGlu
dCBuX2FkZHJ0eXBlOwogIHVpbnQzMl90IG5fbmV0Owp9OwojIDQ0ICIvdXNyL2luY2x1ZGUvbmV0
ZGIuaCIgMiAzCiMgNTQgIi91c3IvaW5jbHVkZS9uZXRkYi5oIiAzCmV4dGVybiAiQyIgewoKCmV4
dGVybiBpbnQgaF9lcnJubzsKCgpleHRlcm4gaW50ICpfX2hfZXJybm9fbG9jYXRpb24gKHZvaWQp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKIyAxMDUgIi91c3IvaW5jbHVk
ZS9uZXRkYi5oIiAzCmV4dGVybiB2b2lkIGhlcnJvciAoX19jb25zdCBjaGFyICpfX3N0cikgdGhy
b3cgKCk7CgoKZXh0ZXJuIF9fY29uc3QgY2hhciAqaHN0cmVycm9yIChpbnQgX19lcnJfbnVtKSB0
aHJvdyAoKTsKCgoKCnN0cnVjdCBob3N0ZW50CnsKICBjaGFyICpoX25hbWU7CiAgY2hhciAqKmhf
YWxpYXNlczsKICBpbnQgaF9hZGRydHlwZTsKICBpbnQgaF9sZW5ndGg7CiAgY2hhciAqKmhfYWRk
cl9saXN0OwoKfTsKCgoKZXh0ZXJuIHZvaWQgc2V0aG9zdGVudCAoaW50IF9fc3RheV9vcGVuKSB0
aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBlbmRob3N0ZW50ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIHN0cnVjdCBob3N0ZW50ICpnZXRob3N0ZW50ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IHN0cnVjdCBob3N0ZW50ICpnZXRob3N0YnlhZGRyIChfX2NvbnN0IHZvaWQgKl9fYWRkciwgX19z
b2NrbGVuX3QgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IF9fdHlwZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHN0cnVjdCBob3N0ZW50ICpnZXRob3N0YnluYW1l
IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHN0cnVjdCBob3N0
ZW50ICpnZXRob3N0YnluYW1lMiAoX19jb25zdCBjaGFyICpfX25hbWUsIGludCBfX2FmKSB0aHJv
dyAoKTsKCgoKCgoKZXh0ZXJuIGludCBnZXRob3N0ZW50X3IgKHN0cnVjdCBob3N0ZW50ICpfX3Jl
c3RyaWN0IF9fcmVzdWx0X2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVz
dHJpY3QgX19idWYsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0
cnVjdCBob3N0ZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCAqX19yZXN0cmljdCBfX2hfZXJybm9wKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZ2V0
aG9zdGJ5YWRkcl9yIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19hZGRyLCBfX3NvY2tsZW5f
dCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3R5cGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaG9zdGVudCAqX19yZXN0cmljdCBfX3Jlc3VsdF9i
dWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBz
aXplX3QgX19idWZsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaG9zdGVu
dCAqKl9fcmVzdHJpY3QgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
Kl9fcmVzdHJpY3QgX19oX2Vycm5vcCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGdldGhvc3RieW5h
bWVfciAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdCBob3N0ZW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1ZiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2J1
ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBob3N0ZW50ICoqX19yZXN0
cmljdCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmlj
dCBfX2hfZXJybm9wKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZ2V0aG9zdGJ5bmFtZTJfciAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwgaW50IF9fYWYsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RydWN0IGhvc3RlbnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVmLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBf
X2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaG9zdGVudCAqKl9f
cmVzdHJpY3QgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jl
c3RyaWN0IF9faF9lcnJub3ApIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIHNldG5ldGVudCAo
aW50IF9fc3RheV9vcGVuKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBlbmRuZXRlbnQgKHZvaWQp
IHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IG5ldGVudCAqZ2V0bmV0ZW50ICh2b2lkKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCBuZXRlbnQgKmdldG5ldGJ5YWRkciAodWludDMyX3QgX19u
ZXQsIGludCBfX3R5cGUpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIHN0cnVjdCBuZXRlbnQgKmdl
dG5ldGJ5bmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu
IGludCBnZXRuZXRlbnRfciAoc3RydWN0IG5ldGVudCAqX19yZXN0cmljdCBfX3Jlc3VsdF9idWYs
CiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBf
X2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldGVudCAqKl9fcmVzdHJp
Y3QgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2hf
ZXJybm9wKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZ2V0bmV0YnlhZGRyX3IgKHVpbnQzMl90IF9f
bmV0LCBpbnQgX190eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0ZW50
ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh
ciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3QgbmV0ZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9faF9lcnJub3ApIHRocm93ICgpOwoKZXh0
ZXJuIGludCBnZXRuZXRieW5hbWVfciAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldGVudCAqX19yZXN0cmljdCBfX3Jl
c3VsdF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19i
dWYsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5l
dGVudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCAqX19yZXN0cmljdCBfX2hfZXJybm9wKSB0aHJvdyAoKTsKCgoKCnN0cnVjdCBzZXJ2ZW50CnsK
ICBjaGFyICpzX25hbWU7CiAgY2hhciAqKnNfYWxpYXNlczsKICBpbnQgc19wb3J0OwogIGNoYXIg
KnNfcHJvdG87Cn07CgoKCmV4dGVybiB2b2lkIHNldHNlcnZlbnQgKGludCBfX3N0YXlfb3Blbikg
dGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgZW5kc2VydmVudCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4
dGVybiBzdHJ1Y3Qgc2VydmVudCAqZ2V0c2VydmVudCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVy
biBzdHJ1Y3Qgc2VydmVudCAqZ2V0c2VydmJ5bmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Byb3Rv
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCBzZXJ2ZW50ICpnZXRzZXJ2Ynlwb3J0IChpbnQg
X19wb3J0LCBfX2NvbnN0IGNoYXIgKl9fcHJvdG8pCiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0ZXJu
IGludCBnZXRzZXJ2ZW50X3IgKHN0cnVjdCBzZXJ2ZW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1
ZiwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVf
dCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzZXJ2ZW50ICoqX19y
ZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGdldHNlcnZieW5hbWVfciAo
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3Byb3RvLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RydWN0IHNlcnZlbnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVmLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVm
bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNlcnZlbnQgKipfX3Jlc3Ry
aWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZ2V0c2VydmJ5cG9ydF9yIChpbnQg
X19wb3J0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19wcm90bywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCBzZXJ2ZW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1ZiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBf
X2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzZXJ2ZW50ICoqX19y
ZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKCgpzdHJ1Y3QgcHJvdG9lbnQKewogIGNoYXIg
KnBfbmFtZTsKICBjaGFyICoqcF9hbGlhc2VzOwogIGludCBwX3Byb3RvOwp9OwoKCgpleHRlcm4g
dm9pZCBzZXRwcm90b2VudCAoaW50IF9fc3RheV9vcGVuKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9p
ZCBlbmRwcm90b2VudCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBzdHJ1Y3QgcHJvdG9lbnQg
KmdldHByb3RvZW50ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gc3RydWN0IHByb3RvZW50ICpn
ZXRwcm90b2J5bmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCmV4dGVybiBz
dHJ1Y3QgcHJvdG9lbnQgKmdldHByb3RvYnludW1iZXIgKGludCBfX3Byb3RvKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gaW50IGdldHByb3RvZW50X3IgKHN0cnVjdCBwcm90b2VudCAqX19yZXN0cmlj
dCBfX3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmlj
dCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dCBwcm90b2VudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBn
ZXRwcm90b2J5bmFtZV9yIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwcm90b2VudCAqX19yZXN0cmljdCBfX3Jlc3Vs
dF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1
Ziwgc2l6ZV90IF9fYnVmbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBw
cm90b2VudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBnZXRw
cm90b2J5bnVtYmVyX3IgKGludCBfX3Byb3RvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0IHByb3RvZW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1ZiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2J1Zmxl
biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwcm90b2VudCAqKl9fcmVz
dHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzZXRuZXRncmVudCAoX19j
b25zdCBjaGFyICpfX25ldGdyb3VwKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBlbmRuZXRncmVu
dCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZ2V0bmV0Z3JlbnQgKGNoYXIgKipfX3Jl
c3RyaWN0IF9faG9zdHAsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0
IF9fdXNlcnAsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZG9t
YWlucCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaW5uZXRnciAoX19jb25zdCBjaGFyICpfX25l
dGdyb3VwLCBfX2NvbnN0IGNoYXIgKl9faG9zdCwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IGNoYXIgKl9fdXNlciwgX19jb25zdCBjaGFyICpkb21haW4pIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgZ2V0bmV0Z3JlbnRfciAoY2hhciAqKl9fcmVzdHJpY3QgX19ob3N0cCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3VzZXJwLAogICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZG9tYWlucCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmZmVyLCBzaXplX3QgX19idWZsZW4pIHRocm93
ICgpOwojIDM1MSAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDMKZXh0ZXJuIGludCByY21kIChjaGFy
ICoqX19yZXN0cmljdCBfX2Fob3N0LCB1bnNpZ25lZCBzaG9ydCBpbnQgX19ycG9ydCwKICAgICAg
ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19sb2N1c2VyLAogICAgICAgICAg
ICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3JlbXVzZXIsCiAgICAgICAgICAgICAg
ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fY21kLCBpbnQgKl9fcmVzdHJpY3QgX19mZDJw
KQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHJjbWRfYWYgKGNoYXIgKipfX3Jlc3RyaWN0
IF9fYWhvc3QsIHVuc2lnbmVkIHNob3J0IGludCBfX3Jwb3J0LAogICAgICAgICAgICAgICAgICAg
IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2xvY3VzZXIsCiAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcmVtdXNlciwKICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19jbWQsIGludCAqX19yZXN0cmljdCBfX2ZkMnAsCiAg
ICAgICAgICAgICAgICAgICAgc2FfZmFtaWx5X3QgX19hZikgdGhyb3cgKCk7CgoKCgoKCmV4dGVy
biBpbnQgcmV4ZWMgKGNoYXIgKipfX3Jlc3RyaWN0IF9fYWhvc3QsIGludCBfX3Jwb3J0LAogICAg
ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAogICAgICAgICAg
ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19wYXNzLAogICAgICAgICAgICAgICAg
ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19jbWQsIGludCAqX19yZXN0cmljdCBfX2ZkMnAp
CiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcmV4ZWNfYWYgKGNoYXIgKipfX3Jlc3RyaWN0
IF9fYWhvc3QsIGludCBfX3Jwb3J0LAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19uYW1lLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19wYXNzLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19jbWQsIGludCAqX19yZXN0cmljdCBfX2ZkMnAsCiAgICAgICAgICAgICAgICAgICAg
IHNhX2ZhbWlseV90IF9fYWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBydXNlcm9rIChfX2Nv
bnN0IGNoYXIgKl9fcmhvc3QsIGludCBfX3N1c2VyLAogICAgICAgICAgICAgICAgICAgIF9fY29u
c3QgY2hhciAqX19yZW11c2VyLCBfX2NvbnN0IGNoYXIgKl9fbG9jdXNlcikgdGhyb3cgKCk7CgoK
CmV4dGVybiBpbnQgcnVzZXJva19hZiAoX19jb25zdCBjaGFyICpfX3Job3N0LCBpbnQgX19zdXNl
ciwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVtdXNlciwgX19jb25z
dCBjaGFyICpfX2xvY3VzZXIsCiAgICAgICAgICAgICAgICAgICAgICAgc2FfZmFtaWx5X3QgX19h
ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHJyZXN2cG9ydCAoaW50ICpfX2FscG9ydCkgdGhy
b3cgKCk7CgoKCmV4dGVybiBpbnQgcnJlc3Zwb3J0X2FmIChpbnQgKl9fYWxwb3J0LCBzYV9mYW1p
bHlfdCBfX2FmKSB0aHJvdyAoKTsKCgoKCgoKc3RydWN0IGFkZHJpbmZvCnsKICBpbnQgYWlfZmxh
Z3M7CiAgaW50IGFpX2ZhbWlseTsKICBpbnQgYWlfc29ja3R5cGU7CiAgaW50IGFpX3Byb3RvY29s
OwogIHNvY2tsZW5fdCBhaV9hZGRybGVuOwogIHN0cnVjdCBzb2NrYWRkciAqYWlfYWRkcjsKICBj
aGFyICphaV9jYW5vbm5hbWU7CiAgc3RydWN0IGFkZHJpbmZvICphaV9uZXh0Owp9OwoKCgpzdHJ1
Y3QgZ2FpY2IKewogIGNvbnN0IGNoYXIgKmFyX25hbWU7CiAgY29uc3QgY2hhciAqYXJfc2Vydmlj
ZTsKICBjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKmFyX3JlcXVlc3Q7CiAgc3RydWN0IGFkZHJpbmZv
ICphcl9yZXN1bHQ7CgogIGludCBfX3JldHVybjsKICBpbnQgX191bnVzZWRbNV07Cn07CiMgNDc2
ICIvdXNyL2luY2x1ZGUvbmV0ZGIuaCIgMwpleHRlcm4gaW50IGdldGFkZHJpbmZvIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19zZXJ2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IHN0cnVjdCBhZGRyaW5mbyAqX19yZXN0cmljdCBfX3JlcSwKICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IGFkZHJpbmZvICoqX19yZXN0cmljdCBfX3BhaSkgdGhyb3cgKCk7CgoKZXh0
ZXJuIHZvaWQgZnJlZWFkZHJpbmZvIChzdHJ1Y3QgYWRkcmluZm8gKl9fYWkpIHRocm93ICgpOwoK
CmV4dGVybiBjaGFyICpnYWlfc3RyZXJyb3IgKGludCBfX2Vjb2RlKSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IGdldG5hbWVpbmZvIChfX2NvbnN0IHN0cnVjdCBzb2NrYWRkciAqX19yZXN0cmljdCBf
X3NhLAogICAgICAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgX19zYWxlbiwgY2hhciAqX19y
ZXN0cmljdCBfX2hvc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tsZW5fdCBfX2hvc3Rs
ZW4sIGNoYXIgKl9fcmVzdHJpY3QgX19zZXJ2LAogICAgICAgICAgICAgICAgICAgICAgICBzb2Nr
bGVuX3QgX19zZXJ2bGVuLCB1bnNpZ25lZCBpbnQgX19mbGFncykgdGhyb3cgKCk7CgoKCgoKZXh0
ZXJuIGludCBnZXRhZGRyaW5mb19hIChpbnQgX19tb2RlLCBzdHJ1Y3QgZ2FpY2IgKl9fbGlzdFtd
LAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2VudCwgc3RydWN0IHNpZ2V2ZW50ICpf
X3Jlc3RyaWN0IF9fc2lnKQogICAgIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBnYWlfc3VzcGVu
ZCAoX19jb25zdCBzdHJ1Y3QgZ2FpY2IgKl9fY29uc3QgX19saXN0W10sIGludCBfX2VudCwKICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fdGltZW91dCkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnYWlfZXJyb3IgKHN0cnVjdCBnYWljYiAqX19yZXEpIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgZ2FpX2NhbmNlbCAoc3RydWN0IGdhaWNiICpfX2dhaWNicCkg
dGhyb3cgKCk7CgoKCn0KIyA2OCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u
c3ByL3ByaW5ldC5oIiAyCiMgMzEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUv
bnNwci9uc3ByLmgiIDIKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25z
cHIvcHJpbml0LmgiIDEKIyAyMiAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u
c3ByL3ByaW5pdC5oIgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNw
ci9wcnRocmVhZC5oIiAxCiMgNTkgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUv
bnNwci9wcnRocmVhZC5oIgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUv
bnNwci9wcnR5cGVzLmgiIDEKIyA2MCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVk
ZS9uc3ByL3BydGhyZWFkLmgiIDIKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNs
dWRlL25zcHIvcHJpbnJ2YWwuaCIgMQojIDYxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9p
bmNsdWRlL25zcHIvcHJ0aHJlYWQuaCIgMgoKZXh0ZXJuICJDIiB7Cgp0eXBlZGVmIHN0cnVjdCBQ
UlRocmVhZCBQUlRocmVhZDsKdHlwZWRlZiBzdHJ1Y3QgUFJUaHJlYWRTdGFjayBQUlRocmVhZFN0
YWNrOwoKdHlwZWRlZiBlbnVtIFBSVGhyZWFkVHlwZSB7CiAgICBQUl9VU0VSX1RIUkVBRCwKICAg
IFBSX1NZU1RFTV9USFJFQUQKfSBQUlRocmVhZFR5cGU7Cgp0eXBlZGVmIGVudW0gUFJUaHJlYWRT
Y29wZSB7CiAgICBQUl9MT0NBTF9USFJFQUQsCiAgICBQUl9HTE9CQUxfVEhSRUFELAogICAgUFJf
R0xPQkFMX0JPVU5EX1RIUkVBRAp9IFBSVGhyZWFkU2NvcGU7Cgp0eXBlZGVmIGVudW0gUFJUaHJl
YWRTdGF0ZSB7CiAgICBQUl9KT0lOQUJMRV9USFJFQUQsCiAgICBQUl9VTkpPSU5BQkxFX1RIUkVB
RAp9IFBSVGhyZWFkU3RhdGU7Cgp0eXBlZGVmIGVudW0gUFJUaHJlYWRQcmlvcml0eQp7CiAgICBQ
Ul9QUklPUklUWV9GSVJTVCA9IDAsCiAgICBQUl9QUklPUklUWV9MT1cgPSAwLAogICAgUFJfUFJJ
T1JJVFlfTk9STUFMID0gMSwKICAgIFBSX1BSSU9SSVRZX0hJR0ggPSAyLAogICAgUFJfUFJJT1JJ
VFlfVVJHRU5UID0gMywKICAgIFBSX1BSSU9SSVRZX0xBU1QgPSAzCn0gUFJUaHJlYWRQcmlvcml0
eTsKIyAxMTggIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRocmVh
ZC5oIgpleHRlcm4gUFJUaHJlYWQqIFBSX0NyZWF0ZVRocmVhZChQUlRocmVhZFR5cGUgdHlwZSwK
ICAgICAgICAgICAgICAgICAgICAgdm9pZCAoICpzdGFydCkodm9pZCAqYXJnKSwKICAgICAgICAg
ICAgICAgICAgICAgdm9pZCAqYXJnLAogICAgICAgICAgICAgICAgICAgICBQUlRocmVhZFByaW9y
aXR5IHByaW9yaXR5LAogICAgICAgICAgICAgICAgICAgICBQUlRocmVhZFNjb3BlIHNjb3BlLAog
ICAgICAgICAgICAgICAgICAgICBQUlRocmVhZFN0YXRlIHN0YXRlLAogICAgICAgICAgICAgICAg
ICAgICBQUlVpbnQzMiBzdGFja1NpemUpOwojIDEzOSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rp
c3QvaW5jbHVkZS9uc3ByL3BydGhyZWFkLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9Kb2luVGhyZWFk
KFBSVGhyZWFkICp0aHJlYWQpOwoKCgoKCmV4dGVybiBQUlRocmVhZCogUFJfR2V0Q3VycmVudFRo
cmVhZCh2b2lkKTsKCgoKCgpleHRlcm4gUFJUaHJlYWRQcmlvcml0eSBQUl9HZXRUaHJlYWRQcmlv
cml0eShjb25zdCBQUlRocmVhZCAqdGhyZWFkKTsKCgoKCmV4dGVybiB2b2lkIFBSX1NldFRocmVh
ZFByaW9yaXR5KFBSVGhyZWFkICp0aHJlYWQsIFBSVGhyZWFkUHJpb3JpdHkgcHJpb3JpdHkpOwoj
IDE4MiAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGhyZWFkLmgi
CnR5cGVkZWYgdm9pZCAoICpQUlRocmVhZFByaXZhdGVEVE9SKSh2b2lkICpwcml2KTsKCmV4dGVy
biBQUlN0YXR1cyBQUl9OZXdUaHJlYWRQcml2YXRlSW5kZXgoCiAgICBQUlVpbnRuICpuZXdJbmRl
eCwgUFJUaHJlYWRQcml2YXRlRFRPUiBkZXN0cnVjdG9yKTsKIyAxOTggIi91c3Ivc3JjL21pc2Mv
bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRocmVhZC5oIgpleHRlcm4gUFJTdGF0dXMgUFJf
U2V0VGhyZWFkUHJpdmF0ZShQUlVpbnRuIHRwZEluZGV4LCB2b2lkICpwcml2KTsKIyAyMDkgIi91
c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRocmVhZC5oIgpleHRlcm4g
dm9pZCogUFJfR2V0VGhyZWFkUHJpdmF0ZShQUlVpbnRuIHRwZEluZGV4KTsKIyAyMjEgIi91c3Iv
c3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRocmVhZC5oIgpleHRlcm4gUFJT
dGF0dXMgUFJfSW50ZXJydXB0KFBSVGhyZWFkICp0aHJlYWQpOwoKCgoKCmV4dGVybiB2b2lkIFBS
X0NsZWFySW50ZXJydXB0KHZvaWQpOwoKCgoKZXh0ZXJuIHZvaWQgUFJfQmxvY2tJbnRlcnJ1cHQo
dm9pZCk7CgoKCgpleHRlcm4gdm9pZCBQUl9VbmJsb2NrSW50ZXJydXB0KHZvaWQpOwojIDI0NiAi
L3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGhyZWFkLmgiCmV4dGVy
biBQUlN0YXR1cyBQUl9TbGVlcChQUkludGVydmFsVGltZSB0aWNrcyk7CgoKCgpleHRlcm4gUFJU
aHJlYWRTY29wZSBQUl9HZXRUaHJlYWRTY29wZShjb25zdCBQUlRocmVhZCAqdGhyZWFkKTsKCgoK
CmV4dGVybiBQUlRocmVhZFR5cGUgUFJfR2V0VGhyZWFkVHlwZShjb25zdCBQUlRocmVhZCAqdGhy
ZWFkKTsKCgoKCmV4dGVybiBQUlRocmVhZFN0YXRlIFBSX0dldFRocmVhZFN0YXRlKGNvbnN0IFBS
VGhyZWFkICp0aHJlYWQpOwoKfQojIDIzICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNs
dWRlL25zcHIvcHJpbml0LmgiIDIKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNs
dWRlL25zcHIvcHJ0eXBlcy5oIiAxCiMgMjQgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2lu
Y2x1ZGUvbnNwci9wcmluaXQuaCIgMgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2lu
Y2x1ZGUvbnNwci9wcndpbjE2LmgiIDEKIyAyNSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3Qv
aW5jbHVkZS9uc3ByL3ByaW5pdC5oIiAyCiMgMSAiL3Vzci9nY2MtcHJlMy4wL2xpYi9nY2MtbGli
L2lhNjQtaHAtbGludXgvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMSAzCiMgMjYgIi91c3Ivc3JjL21p
c2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmluaXQuaCIgMgoKZXh0ZXJuICJDIiB7CiMg
NjkgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmluaXQuaCIKdHlw
ZWRlZiBQUkJvb2wgKCpQUlZlcnNpb25DaGVjaykoY29uc3QgY2hhciopOwojIDc5ICIvdXNyL3Ny
Yy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpbml0LmgiCmV4dGVybiBQUkJvb2wg
UFJfVmVyc2lvbkNoZWNrKGNvbnN0IGNoYXIgKmltcG9ydGVkVmVyc2lvbik7CiMgOTIgIi91c3Iv
c3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmluaXQuaCIKZXh0ZXJuIHZvaWQg
UFJfSW5pdCgKICAgIFBSVGhyZWFkVHlwZSB0eXBlLCBQUlRocmVhZFByaW9yaXR5IHByaW9yaXR5
LCBQUlVpbnRuIG1heFBURHMpOwojIDExMyAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5j
bHVkZS9uc3ByL3ByaW5pdC5oIgp0eXBlZGVmIFBSSW50biAoICpQUlByaW1vcmRpYWxGbikoUFJJ
bnRuIGFyZ2MsIGNoYXIgKiphcmd2KTsKCmV4dGVybiBQUkludG4gUFJfSW5pdGlhbGl6ZSgKICAg
IFBSUHJpbW9yZGlhbEZuIHBybWFpbiwgUFJJbnRuIGFyZ2MsIGNoYXIgKiphcmd2LCBQUlVpbnRu
IG1heFBURHMpOwoKCgoKZXh0ZXJuIFBSQm9vbCBQUl9Jbml0aWFsaXplZCh2b2lkKTsKIyAxMzkg
Ii91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmluaXQuaCIKZXh0ZXJu
IFBSU3RhdHVzIFBSX0NsZWFudXAodm9pZCk7CgoKCgoKZXh0ZXJuIHZvaWQgUFJfRGlzYWJsZUNs
b2NrSW50ZXJydXB0cyh2b2lkKTsKCgoKCgpleHRlcm4gdm9pZCBQUl9FbmFibGVDbG9ja0ludGVy
cnVwdHModm9pZCk7CgoKCgoKZXh0ZXJuIHZvaWQgUFJfQmxvY2tDbG9ja0ludGVycnVwdHModm9p
ZCk7CgoKCgoKZXh0ZXJuIHZvaWQgUFJfVW5ibG9ja0Nsb2NrSW50ZXJydXB0cyh2b2lkKTsKCgoK
CmV4dGVybiB2b2lkIFBSX1NldENvbmN1cnJlbmN5KFBSVWludG4gbnVtQ1BVcyk7CgoKCgoKCmV4
dGVybiBQUlN0YXR1cyBQUl9TZXRGRENhY2hlU2l6ZShQUkludG4gbG93LCBQUkludG4gaGlnaCk7
CgoKCgoKCmV4dGVybiB2b2lkIFBSX1Byb2Nlc3NFeGl0KFBSSW50biBzdGF0dXMpOwoKCgoKCgpl
eHRlcm4gdm9pZCBQUl9BYm9ydCh2b2lkKTsKIyAxOTkgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9k
aXN0L2luY2x1ZGUvbnNwci9wcmluaXQuaCIKdHlwZWRlZiBzdHJ1Y3QgUFJDYWxsT25jZVR5cGUg
ewogICAgUFJJbnRuIGluaXRpYWxpemVkOwogICAgUFJJbnQzMiBpblByb2dyZXNzOwogICAgUFJT
dGF0dXMgc3RhdHVzOwp9IFBSQ2FsbE9uY2VUeXBlOwoKdHlwZWRlZiBQUlN0YXR1cyAoICpQUkNh
bGxPbmNlRk4pKHZvaWQpOwoKZXh0ZXJuIFBSU3RhdHVzIFBSX0NhbGxPbmNlKAogICAgUFJDYWxs
T25jZVR5cGUgKm9uY2UsCiAgICBQUkNhbGxPbmNlRk4gZnVuYwopOwoKCn0KIyAzMiAiL3Vzci9z
cmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL25zcHIuaCIgMgojIDEgIi91c3Ivc3Jj
L21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlucnZhbC5oIiAxCiMgMzMgIi91c3Iv
c3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9uc3ByLmgiIDIKIyAxICIvdXNyL3Ny
Yy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIiAxCiMgMjkgIi91c3Ivc3Jj
L21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCiMgMSAiL3Vzci9zcmMvbWlz
Yy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9uZy5oIiAxCiMgMzAgIi91c3Ivc3JjL21p
c2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiIDIKIyAxICIvdXNyL3NyYy9taXNj
L21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0aW1lLmgiIDEKIyAzMSAiL3Vzci9zcmMvbWlz
Yy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIgMgojIDEgIi91c3Ivc3JjL21pc2Mv
bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlucnZhbC5oIiAxCiMgMzIgIi91c3Ivc3JjL21p
c2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiIDIKIyAxICIvdXNyL3NyYy9taXNj
L21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpbmV0LmgiIDEKIyAzMyAiL3Vzci9zcmMvbWlz
Yy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIgMgoKZXh0ZXJuICJDIiB7CgoKdHlw
ZWRlZiBzdHJ1Y3QgUFJEaXIgUFJEaXI7CnR5cGVkZWYgc3RydWN0IFBSRGlyRW50cnkgUFJEaXJF
bnRyeTsKdHlwZWRlZiBzdHJ1Y3QgUFJGaWxlRGVzYyBQUkZpbGVEZXNjOwp0eXBlZGVmIHN0cnVj
dCBQUkZpbGVJbmZvIFBSRmlsZUluZm87CnR5cGVkZWYgc3RydWN0IFBSRmlsZUluZm82NCBQUkZp
bGVJbmZvNjQ7CnR5cGVkZWYgdW5pb24gUFJOZXRBZGRyIFBSTmV0QWRkcjsKdHlwZWRlZiBzdHJ1
Y3QgUFJJT01ldGhvZHMgUFJJT01ldGhvZHM7CnR5cGVkZWYgc3RydWN0IFBSUG9sbERlc2MgUFJQ
b2xsRGVzYzsKdHlwZWRlZiBzdHJ1Y3QgUFJGaWxlUHJpdmF0ZSBQUkZpbGVQcml2YXRlOwp0eXBl
ZGVmIHN0cnVjdCBQUlNlbmRGaWxlRGF0YSBQUlNlbmRGaWxlRGF0YTsKIyA1OSAiL3Vzci9zcmMv
bWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKdHlwZWRlZiBQUkludG4gUFJE
ZXNjSWRlbnRpdHk7CgpzdHJ1Y3QgUFJGaWxlRGVzYyB7CiAgICBjb25zdCBQUklPTWV0aG9kcyAq
bWV0aG9kczsKICAgIFBSRmlsZVByaXZhdGUgKnNlY3JldDsKICAgIFBSRmlsZURlc2MgKmxvd2Vy
LCAqaGlnaGVyOwogICAgdm9pZCAoICpkdG9yKShQUkZpbGVEZXNjICpmZCk7CgogICAgUFJEZXNj
SWRlbnRpdHkgaWRlbnRpdHk7Cn07CiMgNzkgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2lu
Y2x1ZGUvbnNwci9wcmlvLmgiCnR5cGVkZWYgZW51bSBQUlRyYW5zbWl0RmlsZUZsYWdzIHsKICAg
IFBSX1RSQU5TTUlURklMRV9LRUVQX09QRU4gPSAwLAoKICAgIFBSX1RSQU5TTUlURklMRV9DTE9T
RV9TT0NLRVQgPSAxCgp9IFBSVHJhbnNtaXRGaWxlRmxhZ3M7CiMgMTMyICIvdXNyL3NyYy9taXNj
L21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpzdHJ1Y3QgUFJJUHY2QWRkciB7CiAg
ICAgICAgdW5pb24gewogICAgICAgICAgICAgICAgUFJVaW50OCBfUzZfdThbMTZdOwogICAgICAg
ICAgICAgICAgUFJVaW50MTYgX1M2X3UxNls4XTsKICAgICAgICAgICAgICAgIFBSVWludDMyIF9T
Nl91MzJbNF07CiAgICAgICAgICAgICAgICBQUlVpbnQ2NCBfUzZfdTY0WzJdOwogICAgICAgIH0g
X1M2X3VuOwp9OwoKCgoKCnR5cGVkZWYgc3RydWN0IFBSSVB2NkFkZHIgUFJJUHY2QWRkcjsKCnVu
aW9uIFBSTmV0QWRkciB7CiAgICBzdHJ1Y3QgewogICAgICAgIFBSVWludDE2IGZhbWlseTsKCgoK
ICAgICAgICBjaGFyIGRhdGFbMTRdOwoKICAgIH0gcmF3OwogICAgc3RydWN0IHsKICAgICAgICBQ
UlVpbnQxNiBmYW1pbHk7CiAgICAgICAgUFJVaW50MTYgcG9ydDsKICAgICAgICBQUlVpbnQzMiBp
cDsKCgoKICAgICAgICBjaGFyIHBhZFs4XTsKCiAgICB9IGluZXQ7CiAgICBzdHJ1Y3QgewogICAg
ICAgIFBSVWludDE2IGZhbWlseTsKICAgICAgICBQUlVpbnQxNiBwb3J0OwogICAgICAgIFBSVWlu
dDMyIGZsb3dpbmZvOwogICAgICAgIFBSSVB2NkFkZHIgaXA7CiAgICAgICAgUFJVaW50MzIgc2Nv
cGVfaWQ7CiAgICB9IGlwdjY7CgogICAgc3RydWN0IHsKICAgICAgICBQUlVpbnQxNiBmYW1pbHk7
CiAgICAgICAgY2hhciBwYXRoWzEwNF07CiAgICB9IGxvY2FsOwoKfTsKIyAxOTAgIi91c3Ivc3Jj
L21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCnR5cGVkZWYgZW51bSBQUlNv
Y2tPcHRpb24KewogICAgUFJfU29ja09wdF9Ob25ibG9ja2luZywKICAgIFBSX1NvY2tPcHRfTGlu
Z2VyLAogICAgUFJfU29ja09wdF9SZXVzZWFkZHIsCiAgICBQUl9Tb2NrT3B0X0tlZXBhbGl2ZSwK
ICAgIFBSX1NvY2tPcHRfUmVjdkJ1ZmZlclNpemUsCiAgICBQUl9Tb2NrT3B0X1NlbmRCdWZmZXJT
aXplLAoKICAgIFBSX1NvY2tPcHRfSXBUaW1lVG9MaXZlLAogICAgUFJfU29ja09wdF9JcFR5cGVP
ZlNlcnZpY2UsCgogICAgUFJfU29ja09wdF9BZGRNZW1iZXIsCiAgICBQUl9Tb2NrT3B0X0Ryb3BN
ZW1iZXIsCiAgICBQUl9Tb2NrT3B0X01jYXN0SW50ZXJmYWNlLAogICAgUFJfU29ja09wdF9NY2Fz
dFRpbWVUb0xpdmUsCiAgICBQUl9Tb2NrT3B0X01jYXN0TG9vcGJhY2ssCgogICAgUFJfU29ja09w
dF9Ob0RlbGF5LAogICAgUFJfU29ja09wdF9NYXhTZWdtZW50LAogICAgUFJfU29ja09wdF9Ccm9h
ZGNhc3QsCiAgICBQUl9Tb2NrT3B0X0xhc3QKfSBQUlNvY2tPcHRpb247Cgp0eXBlZGVmIHN0cnVj
dCBQUkxpbmdlciB7CiAgICAgICAgUFJCb29sIHBvbGFyaXR5OwogICAgICAgIFBSSW50ZXJ2YWxU
aW1lIGxpbmdlcjsKfSBQUkxpbmdlcjsKCnR5cGVkZWYgc3RydWN0IFBSTWNhc3RSZXF1ZXN0IHsK
ICAgICAgICBQUk5ldEFkZHIgbWNhZGRyOwogICAgICAgIFBSTmV0QWRkciBpZmFkZHI7Cn0gUFJN
Y2FzdFJlcXVlc3Q7Cgp0eXBlZGVmIHN0cnVjdCBQUlNvY2tldE9wdGlvbkRhdGEKewogICAgUFJT
b2NrT3B0aW9uIG9wdGlvbjsKICAgIHVuaW9uCiAgICB7CiAgICAgICAgUFJVaW50biBpcF90dGw7
CiAgICAgICAgUFJVaW50biBtY2FzdF90dGw7CiAgICAgICAgUFJVaW50biB0b3M7CiAgICAgICAg
UFJCb29sIG5vbl9ibG9ja2luZzsKICAgICAgICBQUkJvb2wgcmV1c2VfYWRkcjsKICAgICAgICBQ
UkJvb2wga2VlcF9hbGl2ZTsKICAgICAgICBQUkJvb2wgbWNhc3RfbG9vcGJhY2s7CiAgICAgICAg
UFJCb29sIG5vX2RlbGF5OwogICAgICAgIFBSQm9vbCBicm9hZGNhc3Q7CiAgICAgICAgUFJTaXpl
IG1heF9zZWdtZW50OwogICAgICAgIFBSU2l6ZSByZWN2X2J1ZmZlcl9zaXplOwogICAgICAgIFBS
U2l6ZSBzZW5kX2J1ZmZlcl9zaXplOwogICAgICAgIFBSTGluZ2VyIGxpbmdlcjsKICAgICAgICBQ
Uk1jYXN0UmVxdWVzdCBhZGRfbWVtYmVyOwogICAgICAgIFBSTWNhc3RSZXF1ZXN0IGRyb3BfbWVt
YmVyOwogICAgICAgIFBSTmV0QWRkciBtY2FzdF9pZjsKICAgIH0gdmFsdWU7Cn0gUFJTb2NrZXRP
cHRpb25EYXRhOwojIDI1NiAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By
L3ByaW8uaCIKdHlwZWRlZiBzdHJ1Y3QgUFJJT1ZlYyB7CiAgICBjaGFyICppb3ZfYmFzZTsKICAg
IGludCBpb3ZfbGVuOwp9IFBSSU9WZWM7CgoKCgoKCnR5cGVkZWYgZW51bSBQUkRlc2NUeXBlCnsK
ICAgIFBSX0RFU0NfRklMRSA9IDEsCiAgICBQUl9ERVNDX1NPQ0tFVF9UQ1AgPSAyLAogICAgUFJf
REVTQ19TT0NLRVRfVURQID0gMywKICAgIFBSX0RFU0NfTEFZRVJFRCA9IDQsCiAgICBQUl9ERVND
X1BJUEUgPSA1Cn0gUFJEZXNjVHlwZTsKCnR5cGVkZWYgZW51bSBQUlNlZWtXaGVuY2UgewogICAg
UFJfU0VFS19TRVQgPSAwLAogICAgUFJfU0VFS19DVVIgPSAxLAogICAgUFJfU0VFS19FTkQgPSAy
Cn0gUFJTZWVrV2hlbmNlOwoKZXh0ZXJuIFBSRGVzY1R5cGUgUFJfR2V0RGVzY1R5cGUoUFJGaWxl
RGVzYyAqZmlsZSk7CiMgMjk5ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25z
cHIvcHJpby5oIgp0eXBlZGVmIFBSU3RhdHVzICggKlBSQ2xvc2VGTikoUFJGaWxlRGVzYyAqZmQp
Owp0eXBlZGVmIFBSSW50MzIgKCAqUFJSZWFkRk4pKFBSRmlsZURlc2MgKmZkLCB2b2lkICpidWYs
IFBSSW50MzIgYW1vdW50KTsKdHlwZWRlZiBQUkludDMyICggKlBSV3JpdGVGTikoUFJGaWxlRGVz
YyAqZmQsIGNvbnN0IHZvaWQgKmJ1ZiwgUFJJbnQzMiBhbW91bnQpOwp0eXBlZGVmIFBSSW50MzIg
KCAqUFJBdmFpbGFibGVGTikoUFJGaWxlRGVzYyAqZmQpOwp0eXBlZGVmIFBSSW50NjQgKCAqUFJB
dmFpbGFibGU2NEZOKShQUkZpbGVEZXNjICpmZCk7CnR5cGVkZWYgUFJTdGF0dXMgKCAqUFJGc3lu
Y0ZOKShQUkZpbGVEZXNjICpmZCk7CnR5cGVkZWYgUFJPZmZzZXQzMiAoICpQUlNlZWtGTikoUFJG
aWxlRGVzYyAqZmQsIFBST2Zmc2V0MzIgb2Zmc2V0LCBQUlNlZWtXaGVuY2UgaG93KTsKdHlwZWRl
ZiBQUk9mZnNldDY0ICggKlBSU2VlazY0Rk4pKFBSRmlsZURlc2MgKmZkLCBQUk9mZnNldDY0IG9m
ZnNldCwgUFJTZWVrV2hlbmNlIGhvdyk7CnR5cGVkZWYgUFJTdGF0dXMgKCAqUFJGaWxlSW5mb0ZO
KShQUkZpbGVEZXNjICpmZCwgUFJGaWxlSW5mbyAqaW5mbyk7CnR5cGVkZWYgUFJTdGF0dXMgKCAq
UFJGaWxlSW5mbzY0Rk4pKFBSRmlsZURlc2MgKmZkLCBQUkZpbGVJbmZvNjQgKmluZm8pOwp0eXBl
ZGVmIFBSSW50MzIgKCAqUFJXcml0ZXZGTikoCiAgICBQUkZpbGVEZXNjICpmZCwgY29uc3QgUFJJ
T1ZlYyAqaW92LCBQUkludDMyIGlvdl9zaXplLAogICAgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7
CnR5cGVkZWYgUFJTdGF0dXMgKCAqUFJDb25uZWN0Rk4pKAogICAgUFJGaWxlRGVzYyAqZmQsIGNv
bnN0IFBSTmV0QWRkciAqYWRkciwgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CnR5cGVkZWYgUFJG
aWxlRGVzYyogKCAqUFJBY2NlcHRGTikgKAogICAgUFJGaWxlRGVzYyAqZmQsIFBSTmV0QWRkciAq
YWRkciwgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CnR5cGVkZWYgUFJTdGF0dXMgKCAqUFJCaW5k
Rk4pKFBSRmlsZURlc2MgKmZkLCBjb25zdCBQUk5ldEFkZHIgKmFkZHIpOwp0eXBlZGVmIFBSU3Rh
dHVzICggKlBSTGlzdGVuRk4pKFBSRmlsZURlc2MgKmZkLCBQUkludG4gYmFja2xvZyk7CnR5cGVk
ZWYgUFJTdGF0dXMgKCAqUFJTaHV0ZG93bkZOKShQUkZpbGVEZXNjICpmZCwgUFJJbnRuIGhvdyk7
CnR5cGVkZWYgUFJJbnQzMiAoICpQUlJlY3ZGTikoCiAgICBQUkZpbGVEZXNjICpmZCwgdm9pZCAq
YnVmLCBQUkludDMyIGFtb3VudCwKICAgIFBSSW50biBmbGFncywgUFJJbnRlcnZhbFRpbWUgdGlt
ZW91dCk7CnR5cGVkZWYgUFJJbnQzMiAoICpQUlNlbmRGTikgKAogICAgUFJGaWxlRGVzYyAqZmQs
IGNvbnN0IHZvaWQgKmJ1ZiwgUFJJbnQzMiBhbW91bnQsCiAgICBQUkludG4gZmxhZ3MsIFBSSW50
ZXJ2YWxUaW1lIHRpbWVvdXQpOwp0eXBlZGVmIFBSSW50MzIgKCAqUFJSZWN2ZnJvbUZOKSgKICAg
IFBSRmlsZURlc2MgKmZkLCB2b2lkICpidWYsIFBSSW50MzIgYW1vdW50LAogICAgUFJJbnRuIGZs
YWdzLCBQUk5ldEFkZHIgKmFkZHIsIFBSSW50ZXJ2YWxUaW1lIHRpbWVvdXQpOwp0eXBlZGVmIFBS
SW50MzIgKCAqUFJTZW5kdG9GTikoCiAgICBQUkZpbGVEZXNjICpmZCwgY29uc3Qgdm9pZCAqYnVm
LCBQUkludDMyIGFtb3VudCwKICAgIFBSSW50biBmbGFncywgY29uc3QgUFJOZXRBZGRyICphZGRy
LCBQUkludGVydmFsVGltZSB0aW1lb3V0KTsKdHlwZWRlZiBQUkludDE2ICggKlBSUG9sbEZOKSgK
ICAgIFBSRmlsZURlc2MgKmZkLCBQUkludDE2IGluX2ZsYWdzLCBQUkludDE2ICpvdXRfZmxhZ3Mp
Owp0eXBlZGVmIFBSSW50MzIgKCAqUFJBY2NlcHRyZWFkRk4pKAogICAgUFJGaWxlRGVzYyAqc2Qs
IFBSRmlsZURlc2MgKipuZCwgUFJOZXRBZGRyICoqcmFkZHIsCiAgICB2b2lkICpidWYsIFBSSW50
MzIgYW1vdW50LCBQUkludGVydmFsVGltZSB0KTsKdHlwZWRlZiBQUkludDMyICggKlBSVHJhbnNt
aXRmaWxlRk4pKAogICAgIFBSRmlsZURlc2MgKnNkLCBQUkZpbGVEZXNjICpmZCwgY29uc3Qgdm9p
ZCAqaGVhZGVycywKICAgICBQUkludDMyIGhsZW4sIFBSVHJhbnNtaXRGaWxlRmxhZ3MgZmxhZ3Ms
IFBSSW50ZXJ2YWxUaW1lIHQpOwp0eXBlZGVmIFBSU3RhdHVzICggKlBSR2V0c29ja25hbWVGTiko
UFJGaWxlRGVzYyAqZmQsIFBSTmV0QWRkciAqYWRkcik7CnR5cGVkZWYgUFJTdGF0dXMgKCAqUFJH
ZXRwZWVybmFtZUZOKShQUkZpbGVEZXNjICpmZCwgUFJOZXRBZGRyICphZGRyKTsKdHlwZWRlZiBQ
UlN0YXR1cyAoICpQUkdldHNvY2tldG9wdGlvbkZOKSgKICAgIFBSRmlsZURlc2MgKmZkLCBQUlNv
Y2tldE9wdGlvbkRhdGEgKmRhdGEpOwp0eXBlZGVmIFBSU3RhdHVzICggKlBSU2V0c29ja2V0b3B0
aW9uRk4pKAogICAgUFJGaWxlRGVzYyAqZmQsIGNvbnN0IFBSU29ja2V0T3B0aW9uRGF0YSAqZGF0
YSk7CnR5cGVkZWYgUFJJbnQzMiAoICpQUlNlbmRmaWxlRk4pKAogICAgICAgIFBSRmlsZURlc2Mg
Km5ldHdvcmtTb2NrZXQsIFBSU2VuZEZpbGVEYXRhICpzZW5kRGF0YSwKICAgICAgICBQUlRyYW5z
bWl0RmlsZUZsYWdzIGZsYWdzLCBQUkludGVydmFsVGltZSB0aW1lb3V0KTsKdHlwZWRlZiBQUklu
dG4gKCAqUFJSZXNlcnZlZEZOKShQUkZpbGVEZXNjICpmZCk7CgpzdHJ1Y3QgUFJJT01ldGhvZHMg
ewogICAgUFJEZXNjVHlwZSBmaWxlX3R5cGU7CiAgICBQUkNsb3NlRk4gY2xvc2U7CiAgICBQUlJl
YWRGTiByZWFkOwogICAgUFJXcml0ZUZOIHdyaXRlOwogICAgUFJBdmFpbGFibGVGTiBhdmFpbGFi
bGU7CiAgICBQUkF2YWlsYWJsZTY0Rk4gYXZhaWxhYmxlNjQ7CiAgICBQUkZzeW5jRk4gZnN5bmM7
CiAgICBQUlNlZWtGTiBzZWVrOwogICAgUFJTZWVrNjRGTiBzZWVrNjQ7CiAgICBQUkZpbGVJbmZv
Rk4gZmlsZUluZm87CiAgICBQUkZpbGVJbmZvNjRGTiBmaWxlSW5mbzY0OwogICAgUFJXcml0ZXZG
TiB3cml0ZXY7CiAgICBQUkNvbm5lY3RGTiBjb25uZWN0OwogICAgUFJBY2NlcHRGTiBhY2NlcHQ7
CiAgICBQUkJpbmRGTiBiaW5kOwogICAgUFJMaXN0ZW5GTiBsaXN0ZW47CiAgICBQUlNodXRkb3du
Rk4gc2h1dGRvd247CiAgICBQUlJlY3ZGTiByZWN2OwogICAgUFJTZW5kRk4gc2VuZDsKICAgIFBS
UmVjdmZyb21GTiByZWN2ZnJvbTsKICAgIFBSU2VuZHRvRk4gc2VuZHRvOwogICAgUFJQb2xsRk4g
cG9sbDsKICAgIFBSQWNjZXB0cmVhZEZOIGFjY2VwdHJlYWQ7CiAgICBQUlRyYW5zbWl0ZmlsZUZO
IHRyYW5zbWl0ZmlsZTsKICAgIFBSR2V0c29ja25hbWVGTiBnZXRzb2NrbmFtZTsKICAgIFBSR2V0
cGVlcm5hbWVGTiBnZXRwZWVybmFtZTsKICAgIFBSUmVzZXJ2ZWRGTiByZXNlcnZlZF9mbl82Owog
ICAgUFJSZXNlcnZlZEZOIHJlc2VydmVkX2ZuXzU7CiAgICBQUkdldHNvY2tldG9wdGlvbkZOIGdl
dHNvY2tldG9wdGlvbjsKCiAgICBQUlNldHNvY2tldG9wdGlvbkZOIHNldHNvY2tldG9wdGlvbjsK
CiAgICBQUlNlbmRmaWxlRk4gc2VuZGZpbGU7CiAgICBQUlJlc2VydmVkRk4gcmVzZXJ2ZWRfZm5f
NDsKICAgIFBSUmVzZXJ2ZWRGTiByZXNlcnZlZF9mbl8zOwogICAgUFJSZXNlcnZlZEZOIHJlc2Vy
dmVkX2ZuXzI7CiAgICBQUlJlc2VydmVkRk4gcmVzZXJ2ZWRfZm5fMTsKICAgIFBSUmVzZXJ2ZWRG
TiByZXNlcnZlZF9mbl8wOwp9OwojIDQxMCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5j
bHVkZS9uc3ByL3ByaW8uaCIKdHlwZWRlZiBlbnVtIFBSU3BlY2lhbEZECnsKICAgIFBSX1N0YW5k
YXJkSW5wdXQsCiAgICBQUl9TdGFuZGFyZE91dHB1dCwKICAgIFBSX1N0YW5kYXJkRXJyb3IKfSBQ
UlNwZWNpYWxGRDsKCmV4dGVybiBQUkZpbGVEZXNjKiBQUl9HZXRTcGVjaWFsRkQoUFJTcGVjaWFs
RkQgaWQpOwojIDQ1NiAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By
aW8uaCIKZXh0ZXJuIFBSRGVzY0lkZW50aXR5IFBSX0dldFVuaXF1ZUlkZW50aXR5KGNvbnN0IGNo
YXIgKmxheWVyX25hbWUpOwpleHRlcm4gY29uc3QgY2hhciogUFJfR2V0TmFtZUZvcklkZW50aXR5
KFBSRGVzY0lkZW50aXR5IGlkZW50KTsKZXh0ZXJuIFBSRGVzY0lkZW50aXR5IFBSX0dldExheWVy
c0lkZW50aXR5KFBSRmlsZURlc2MqIGZkKTsKZXh0ZXJuIFBSRmlsZURlc2MqIFBSX0dldElkZW50
aXRpZXNMYXllcihQUkZpbGVEZXNjKiBmZF9zdGFjaywgUFJEZXNjSWRlbnRpdHkgaWQpOwojIDQ2
OSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJu
IGNvbnN0IFBSSU9NZXRob2RzICogUFJfR2V0RGVmYXVsdElPTWV0aG9kcyh2b2lkKTsKIyA0ODAg
Ii91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQ
UkZpbGVEZXNjKiBQUl9DcmVhdGVJT0xheWVyU3R1YigKICAgIFBSRGVzY0lkZW50aXR5IGlkZW50
LCBjb25zdCBQUklPTWV0aG9kcyAqbWV0aG9kcyk7CiMgNDk3ICIvdXNyL3NyYy9taXNjL21vemls
bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJTdGF0dXMgUFJfUHVzaElPTGF5
ZXIoCiAgICBQUkZpbGVEZXNjICpmZF9zdGFjaywgUFJEZXNjSWRlbnRpdHkgaWQsIFBSRmlsZURl
c2MgKmxheWVyKTsKIyA1MTQgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNw
ci9wcmlvLmgiCmV4dGVybiBQUkZpbGVEZXNjKiBQUl9Qb3BJT0xheWVyKFBSRmlsZURlc2MgKmZk
X3N0YWNrLCBQUkRlc2NJZGVudGl0eSBpZCk7CiMgNTg4ICIvdXNyL3NyYy9taXNjL21vemlsbGEv
ZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJGaWxlRGVzYyogUFJfT3Blbihjb25z
dCBjaGFyICpuYW1lLCBQUkludG4gZmxhZ3MsIFBSSW50biBtb2RlKTsKIyA2MTQgIi91c3Ivc3Jj
L21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkZpbGVEZXNj
KiBQUl9PcGVuRmlsZSgKICAgIGNvbnN0IGNoYXIgKm5hbWUsIFBSSW50biBmbGFncywgUFJJbnRu
IG1vZGUpOwojIDYzNyAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By
aW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX0Nsb3NlKFBSRmlsZURlc2MgKmZkKTsKIyA2NzIgIi91
c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUklu
dDMyIFBSX1JlYWQoUFJGaWxlRGVzYyAqZmQsIHZvaWQgKmJ1ZiwgUFJJbnQzMiBhbW91bnQpOwoj
IDY5NiAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0
ZXJuIFBSSW50MzIgUFJfV3JpdGUoUFJGaWxlRGVzYyAqZmQsY29uc3Qgdm9pZCAqYnVmLFBSSW50
MzIgYW1vdW50KTsKIyA3MzAgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNw
ci9wcmlvLmgiCmV4dGVybiBQUkludDMyIFBSX1dyaXRldigKICAgIFBSRmlsZURlc2MgKmZkLCBj
b25zdCBQUklPVmVjICppb3YsIFBSSW50MzIgaW92X3NpemUsCiAgICBQUkludGVydmFsVGltZSB0
aW1lb3V0KTsKIyA3NTEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w
cmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9EZWxldGUoY29uc3QgY2hhciAqbmFtZSk7CgoKCnR5
cGVkZWYgZW51bSBQUkZpbGVUeXBlCnsKICAgIFBSX0ZJTEVfRklMRSA9IDEsCiAgICBQUl9GSUxF
X0RJUkVDVE9SWSA9IDIsCiAgICBQUl9GSUxFX09USEVSID0gMwp9IFBSRmlsZVR5cGU7CgpzdHJ1
Y3QgUFJGaWxlSW5mbyB7CiAgICBQUkZpbGVUeXBlIHR5cGU7CiAgICBQUk9mZnNldDMyIHNpemU7
CiAgICBQUlRpbWUgY3JlYXRpb25UaW1lOwogICAgUFJUaW1lIG1vZGlmeVRpbWU7Cn07CgpzdHJ1
Y3QgUFJGaWxlSW5mbzY0IHsKICAgIFBSRmlsZVR5cGUgdHlwZTsKICAgIFBST2Zmc2V0NjQgc2l6
ZTsKICAgIFBSVGltZSBjcmVhdGlvblRpbWU7CiAgICBQUlRpbWUgbW9kaWZ5VGltZTsKfTsKIyA3
OTQgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVy
biBQUlN0YXR1cyBQUl9HZXRGaWxlSW5mbyhjb25zdCBjaGFyICpmbiwgUFJGaWxlSW5mbyAqaW5m
byk7CmV4dGVybiBQUlN0YXR1cyBQUl9HZXRGaWxlSW5mbzY0KGNvbnN0IGNoYXIgKmZuLCBQUkZp
bGVJbmZvNjQgKmluZm8pOwojIDgxNCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVk
ZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX0dldE9wZW5GaWxlSW5mbyhQUkZpbGVE
ZXNjICpmZCwgUFJGaWxlSW5mbyAqaW5mbyk7CmV4dGVybiBQUlN0YXR1cyBQUl9HZXRPcGVuRmls
ZUluZm82NChQUkZpbGVEZXNjICpmZCwgUFJGaWxlSW5mbzY0ICppbmZvKTsKIyA4MzMgIi91c3Iv
c3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1
cyBQUl9SZW5hbWUoY29uc3QgY2hhciAqZnJvbSwgY29uc3QgY2hhciAqdG8pOwojIDg1OSAiL3Vz
ci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKdHlwZWRlZiBlbnVt
IFBSQWNjZXNzSG93IHsKICAgIFBSX0FDQ0VTU19FWElTVFMgPSAxLAogICAgUFJfQUNDRVNTX1dS
SVRFX09LID0gMiwKICAgIFBSX0FDQ0VTU19SRUFEX09LID0gMwp9IFBSQWNjZXNzSG93OwoKZXh0
ZXJuIFBSU3RhdHVzIFBSX0FjY2Vzcyhjb25zdCBjaGFyICpuYW1lLCBQUkFjY2Vzc0hvdyBob3cp
OwojIDkwMCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIK
ZXh0ZXJuIFBST2Zmc2V0MzIgUFJfU2VlayhQUkZpbGVEZXNjICpmZCwgUFJPZmZzZXQzMiBvZmZz
ZXQsIFBSU2Vla1doZW5jZSB3aGVuY2UpOwpleHRlcm4gUFJPZmZzZXQ2NCBQUl9TZWVrNjQoUFJG
aWxlRGVzYyAqZmQsIFBST2Zmc2V0NjQgb2Zmc2V0LCBQUlNlZWtXaGVuY2Ugd2hlbmNlKTsKIyA5
MjMgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVy
biBQUkludDMyIFBSX0F2YWlsYWJsZShQUkZpbGVEZXNjICpmZCk7CmV4dGVybiBQUkludDY0IFBS
X0F2YWlsYWJsZTY0KFBSRmlsZURlc2MgKmZkKTsKIyA5NDMgIi91c3Ivc3JjL21pc2MvbW96aWxs
YS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9TeW5jKFBSRmls
ZURlc2MgKmZkKTsKCgoKc3RydWN0IFBSRGlyRW50cnkgewogICAgY29uc3QgY2hhciAqbmFtZTsK
fTsKIyA5NzUgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgi
CmV4dGVybiBQUkRpciogUFJfT3BlbkRpcihjb25zdCBjaGFyICpuYW1lKTsKIyAxMDAwICIvdXNy
L3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgp0eXBlZGVmIGVudW0g
UFJEaXJGbGFncyB7CiAgICBQUl9TS0lQX05PTkUgPSAweDAsCiAgICBQUl9TS0lQX0RPVCA9IDB4
MSwKICAgIFBSX1NLSVBfRE9UX0RPVCA9IDB4MiwKICAgIFBSX1NLSVBfQk9USCA9IDB4MywKICAg
IFBSX1NLSVBfSElEREVOID0gMHg0Cn0gUFJEaXJGbGFnczsKCmV4dGVybiBQUkRpckVudHJ5KiBQ
Ul9SZWFkRGlyKFBSRGlyICpkaXIsIFBSRGlyRmxhZ3MgZmxhZ3MpOwojIDEwMjcgIi91c3Ivc3Jj
L21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQ
Ul9DbG9zZURpcihQUkRpciAqZGlyKTsKIyAxMDQ5ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlz
dC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJTdGF0dXMgUFJfTWtEaXIoY29uc3QgY2hh
ciAqbmFtZSwgUFJJbnRuIG1vZGUpOwojIDEwNjEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0
L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9NYWtlRGlyKGNvbnN0IGNo
YXIgKm5hbWUsIFBSSW50biBtb2RlKTsKIyAxMDgxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlz
dC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJTdGF0dXMgUFJfUm1EaXIoY29uc3QgY2hh
ciAqbmFtZSk7CiMgMTEwMCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By
L3ByaW8uaCIKZXh0ZXJuIFBSRmlsZURlc2MqIFBSX05ld1VEUFNvY2tldCh2b2lkKTsKIyAxMTE5
ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4g
UFJGaWxlRGVzYyogUFJfTmV3VENQU29ja2V0KHZvaWQpOwojIDExMzkgIi91c3Ivc3JjL21pc2Mv
bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkZpbGVEZXNjKiBQUl9P
cGVuVURQU29ja2V0KFBSSW50biBhZik7CiMgMTE1OSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rp
c3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSRmlsZURlc2MqIFBSX09wZW5UQ1BTb2Nr
ZXQoUFJJbnRuIGFmKTsKIyAxMTgzICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRl
L25zcHIvcHJpby5oIgpleHRlcm4gUFJTdGF0dXMgUFJfQ29ubmVjdCgKICAgIFBSRmlsZURlc2Mg
KmZkLCBjb25zdCBQUk5ldEFkZHIgKmFkZHIsIFBSSW50ZXJ2YWxUaW1lIHRpbWVvdXQpOwojIDEy
MTIgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVy
biBQUlN0YXR1cyBQUl9HZXRDb25uZWN0U3RhdHVzKGNvbnN0IFBSUG9sbERlc2MgKnBkKTsKIyAx
MjM2ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRl
cm4gUFJGaWxlRGVzYyogUFJfQWNjZXB0KAogICAgUFJGaWxlRGVzYyAqZmQsIFBSTmV0QWRkciAq
YWRkciwgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CiMgMTI1OCAiL3Vzci9zcmMvbWlzYy9tb3pp
bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX0JpbmQoUFJG
aWxlRGVzYyAqZmQsIGNvbnN0IFBSTmV0QWRkciAqYWRkcik7CiMgMTI4MCAiL3Vzci9zcmMvbWlz
Yy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX0xp
c3RlbihQUkZpbGVEZXNjICpmZCwgUFJJbnRuIGJhY2tsb2cpOwojIDEzMDQgIi91c3Ivc3JjL21p
c2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCnR5cGVkZWYgZW51bSBQUlNodXRk
b3duSG93CnsKICAgIFBSX1NIVVRET1dOX1JDViA9IDAsCiAgICBQUl9TSFVURE9XTl9TRU5EID0g
MSwKICAgIFBSX1NIVVRET1dOX0JPVEggPSAyCn0gUFJTaHV0ZG93bkhvdzsKCmV4dGVybiBQUlN0
YXR1cyBQUl9TaHV0ZG93bihQUkZpbGVEZXNjICpmZCwgUFJTaHV0ZG93bkhvdyBob3cpOwojIDEz
NDIgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVy
biBQUkludDMyIFBSX1JlY3YoUFJGaWxlRGVzYyAqZmQsIHZvaWQgKmJ1ZiwgUFJJbnQzMiBhbW91
bnQsCiAgICAgICAgICAgICAgICBQUkludG4gZmxhZ3MsIFBSSW50ZXJ2YWxUaW1lIHRpbWVvdXQp
OwojIDEzNzMgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgi
CmV4dGVybiBQUkludDMyIFBSX1NlbmQoUFJGaWxlRGVzYyAqZmQsIGNvbnN0IHZvaWQgKmJ1Ziwg
UFJJbnQzMiBhbW91bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnRuIGZs
YWdzLCBQUkludGVydmFsVGltZSB0aW1lb3V0KTsKIyAxNDA4ICIvdXNyL3NyYy9taXNjL21vemls
bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJJbnQzMiBQUl9SZWN2RnJvbSgK
ICAgIFBSRmlsZURlc2MgKmZkLCB2b2lkICpidWYsIFBSSW50MzIgYW1vdW50LCBQUkludG4gZmxh
Z3MsCiAgICBQUk5ldEFkZHIgKmFkZHIsIFBSSW50ZXJ2YWxUaW1lIHRpbWVvdXQpOwojIDE0NDEg
Ii91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQ
UkludDMyIFBSX1NlbmRUbygKICAgIFBSRmlsZURlc2MgKmZkLCBjb25zdCB2b2lkICpidWYsIFBS
SW50MzIgYW1vdW50LCBQUkludG4gZmxhZ3MsCiAgICBjb25zdCBQUk5ldEFkZHIgKmFkZHIsIFBS
SW50ZXJ2YWxUaW1lIHRpbWVvdXQpOwojIDE0ODEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0
L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkludDMyIFBSX1RyYW5zbWl0RmlsZSgKICAg
IFBSRmlsZURlc2MgKm5ldHdvcmtTb2NrZXQsIFBSRmlsZURlc2MgKnNvdXJjZUZpbGUsCiAgICBj
b25zdCB2b2lkICpoZWFkZXJzLCBQUkludDMyIGhsZW4sIFBSVHJhbnNtaXRGaWxlRmxhZ3MgZmxh
Z3MsCiAgICBQUkludGVydmFsVGltZSB0aW1lb3V0KTsKIyAxNTIwICIvdXNyL3NyYy9taXNjL21v
emlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpzdHJ1Y3QgUFJTZW5kRmlsZURhdGEgewog
ICAgICAgIFBSRmlsZURlc2MgKmZkOwogICAgICAgIFBSVWludDMyIGZpbGVfb2Zmc2V0OwogICAg
ICAgIFBSU2l6ZSBmaWxlX25ieXRlczsKCgogICAgICAgIGNvbnN0IHZvaWQgKmhlYWRlcjsKICAg
ICAgICBQUkludDMyIGhsZW47CiAgICAgICAgY29uc3Qgdm9pZCAqdHJhaWxlcjsKICAgICAgICBQ
UkludDMyIHRsZW47Cn07CgoKZXh0ZXJuIFBSSW50MzIgUFJfU2VuZEZpbGUoCiAgICBQUkZpbGVE
ZXNjICpuZXR3b3JrU29ja2V0LCBQUlNlbmRGaWxlRGF0YSAqc2VuZERhdGEsCiAgICAgICAgUFJU
cmFuc21pdEZpbGVGbGFncyBmbGFncywgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CiMgMTU4NyAi
L3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBS
SW50MzIgUFJfQWNjZXB0UmVhZCgKICAgIFBSRmlsZURlc2MgKmxpc3RlblNvY2ssIFBSRmlsZURl
c2MgKiphY2NlcHRlZFNvY2ssCiAgICBQUk5ldEFkZHIgKipwZWVyQWRkciwgdm9pZCAqYnVmLCBQ
UkludDMyIGFtb3VudCwgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CiMgMTYxMSAiL3Vzci9zcmMv
bWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBS
X05ld1RDUFNvY2tldFBhaXIoUFJGaWxlRGVzYyAqZmRzWzJdKTsKIyAxNjMxICIvdXNyL3NyYy9t
aXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJTdGF0dXMgUFJf
R2V0U29ja05hbWUoUFJGaWxlRGVzYyAqZmQsIFBSTmV0QWRkciAqYWRkcik7CiMgMTY1MyAiL3Vz
ci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3Rh
dHVzIFBSX0dldFBlZXJOYW1lKFBSRmlsZURlc2MgKmZkLCBQUk5ldEFkZHIgKmFkZHIpOwoKZXh0
ZXJuIFBSU3RhdHVzIFBSX0dldFNvY2tldE9wdGlvbigKICAgIFBSRmlsZURlc2MgKmZkLCBQUlNv
Y2tldE9wdGlvbkRhdGEgKmRhdGEpOwoKZXh0ZXJuIFBSU3RhdHVzIFBSX1NldFNvY2tldE9wdGlv
bigKICAgIFBSRmlsZURlc2MgKmZkLCBjb25zdCBQUlNvY2tldE9wdGlvbkRhdGEgKmRhdGEpOwoj
IDE2ODggIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4
dGVybiBQUlN0YXR1cyBQUl9TZXRGREluaGVyaXRhYmxlKAogICAgUFJGaWxlRGVzYyAqZmQsCiAg
ICBQUkJvb2wgaW5oZXJpdGFibGUpOwojIDE3MDggIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0
L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkZpbGVEZXNjICogUFJfR2V0SW5oZXJpdGVk
RkQoY29uc3QgY2hhciAqbmFtZSk7CiMgMTcxOCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3Qv
aW5jbHVkZS9uc3ByL3ByaW8uaCIKdHlwZWRlZiBzdHJ1Y3QgUFJGaWxlTWFwIFBSRmlsZU1hcDsK
CgoKCnR5cGVkZWYgZW51bSBQUkZpbGVNYXBQcm90ZWN0IHsKICAgIFBSX1BST1RfUkVBRE9OTFks
CiAgICBQUl9QUk9UX1JFQURXUklURSwKICAgIFBSX1BST1RfV1JJVEVDT1BZCn0gUFJGaWxlTWFw
UHJvdGVjdDsKCmV4dGVybiBQUkZpbGVNYXAgKiBQUl9DcmVhdGVGaWxlTWFwKAogICAgUFJGaWxl
RGVzYyAqZmQsCiAgICBQUkludDY0IHNpemUsCiAgICBQUkZpbGVNYXBQcm90ZWN0IHByb3QpOwoK
ZXh0ZXJuIHZvaWQgKiBQUl9NZW1NYXAoCiAgICBQUkZpbGVNYXAgKmZtYXAsCiAgICBQUk9mZnNl
dDY0IG9mZnNldCwKICAgIFBSVWludDMyIGxlbik7CgpleHRlcm4gUFJTdGF0dXMgUFJfTWVtVW5t
YXAodm9pZCAqYWRkciwgUFJVaW50MzIgbGVuKTsKCmV4dGVybiBQUlN0YXR1cyBQUl9DbG9zZUZp
bGVNYXAoUFJGaWxlTWFwICpmbWFwKTsKIyAxNzU2ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlz
dC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJTdGF0dXMgUFJfQ3JlYXRlUGlwZSgKICAg
IFBSRmlsZURlc2MgKipyZWFkUGlwZSwKICAgIFBSRmlsZURlc2MgKip3cml0ZVBpcGUKKTsKCgoK
CgpzdHJ1Y3QgUFJQb2xsRGVzYyB7CiAgICBQUkZpbGVEZXNjKiBmZDsKICAgIFBSSW50MTYgaW5f
ZmxhZ3M7CiAgICBQUkludDE2IG91dF9mbGFnczsKfTsKIyAxODMyICIvdXNyL3NyYy9taXNjL21v
emlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJJbnQzMiBQUl9Qb2xsKAog
ICAgUFJQb2xsRGVzYyAqcGRzLCBQUkludG4gbnBkcywgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7
CiMgMTg3NiAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIK
ZXh0ZXJuIFBSRmlsZURlc2MgKiBQUl9OZXdQb2xsYWJsZUV2ZW50KHZvaWQpOwoKZXh0ZXJuIFBS
U3RhdHVzIFBSX0Rlc3Ryb3lQb2xsYWJsZUV2ZW50KFBSRmlsZURlc2MgKmV2ZW50KTsKCmV4dGVy
biBQUlN0YXR1cyBQUl9TZXRQb2xsYWJsZUV2ZW50KFBSRmlsZURlc2MgKmV2ZW50KTsKCmV4dGVy
biBQUlN0YXR1cyBQUl9XYWl0Rm9yUG9sbGFibGVFdmVudChQUkZpbGVEZXNjICpldmVudCk7Cgp9
CiMgMzQgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9uc3ByLmgiIDIK
IyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpcGNzZW0uaCIg
MQojIDQwICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpcGNzZW0u
aCIKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5o
IiAxCiMgNDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlwY3Nl
bS5oIiAyCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8u
aCIgMQojIDQyICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpcGNz
ZW0uaCIgMgoKZXh0ZXJuICJDIiB7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgUFJTZW0gUFJTZW07CiMg
NzMgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlwY3NlbS5oIgpl
eHRlcm4gUFJTZW0gKiBQUl9PcGVuU2VtYXBob3JlKAogICAgY29uc3QgY2hhciAqbmFtZSwgUFJJ
bnRuIGZsYWdzLCBQUkludG4gbW9kZSwgUFJVaW50biB2YWx1ZSk7CiMgODYgIi91c3Ivc3JjL21p
c2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlwY3NlbS5oIgpleHRlcm4gUFJTdGF0dXMg
UFJfV2FpdFNlbWFwaG9yZShQUlNlbSAqc2VtKTsKCgoKCgoKCmV4dGVybiBQUlN0YXR1cyBQUl9Q
b3N0U2VtYXBob3JlKFBSU2VtICpzZW0pOwoKCgoKCgoKZXh0ZXJuIFBSU3RhdHVzIFBSX0Nsb3Nl
U2VtYXBob3JlKFBSU2VtICpzZW0pOwoKCgoKCgoKZXh0ZXJuIFBSU3RhdHVzIFBSX0RlbGV0ZVNl
bWFwaG9yZShjb25zdCBjaGFyICpuYW1lKTsKCn0KIyAzNSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxh
L2Rpc3QvaW5jbHVkZS9uc3ByL25zcHIuaCIgMgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9k
aXN0L2luY2x1ZGUvbnNwci9wcmxpbmsuaCIgMQojIDI1ICIvdXNyL3NyYy9taXNjL21vemlsbGEv
ZGlzdC9pbmNsdWRlL25zcHIvcHJsaW5rLmgiCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rp
c3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQojIDI2ICIvdXNyL3NyYy9taXNjL21vemlsbGEv
ZGlzdC9pbmNsdWRlL25zcHIvcHJsaW5rLmgiIDIKCmV4dGVybiAiQyIgewoKdHlwZWRlZiBzdHJ1
Y3QgUFJMaWJyYXJ5IFBSTGlicmFyeTsKCnR5cGVkZWYgc3RydWN0IFBSU3RhdGljTGlua1RhYmxl
IHsKICAgIGNvbnN0IGNoYXIgKm5hbWU7CiAgICB2b2lkICgqZnApKCk7Cn0gUFJTdGF0aWNMaW5r
VGFibGU7CiMgNDMgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmxp
bmsuaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX1NldExpYnJhcnlQYXRoKGNvbnN0IGNoYXIgKnBhdGgp
OwojIDUzICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsaW5rLmgi
CmV4dGVybiBjaGFyKiBQUl9HZXRMaWJyYXJ5UGF0aCh2b2lkKTsKIyA2NiAiL3Vzci9zcmMvbWlz
Yy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybGluay5oIgpleHRlcm4gY2hhciogUFJfR2V0
TGlicmFyeU5hbWUoY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpsaWIpOwoKCgoKCmV4dGVy
biB2b2lkIFBSX0ZyZWVMaWJyYXJ5TmFtZShjaGFyICptZW0pOwojIDg2ICIvdXNyL3NyYy9taXNj
L21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsaW5rLmgiCmV4dGVybiBQUkxpYnJhcnkqIFBS
X0xvYWRMaWJyYXJ5KGNvbnN0IGNoYXIgKm5hbWUpOwojIDEwNyAiL3Vzci9zcmMvbWlzYy9tb3pp
bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybGluay5oIgp0eXBlZGVmIGVudW0gUFJMaWJTcGVjVHlw
ZSB7CiAgICBQUl9MaWJTcGVjX1BhdGhuYW1lLAogICAgUFJfTGliU3BlY19NYWNOYW1lZEZyYWdt
ZW50LAogICAgUFJfTGliU3BlY19NYWNJbmRleGVkRnJhZ21lbnQKfSBQUkxpYlNwZWNUeXBlOwoK
c3RydWN0IEZTU3BlYzsKCnR5cGVkZWYgc3RydWN0IFBSTGliU3BlYyB7CiAgICBQUkxpYlNwZWNU
eXBlIHR5cGU7CiAgICB1bmlvbiB7CgogICAgICAgIGNvbnN0IGNoYXIgKnBhdGhuYW1lOwoKCiAg
ICAgICAgc3RydWN0IHsKICAgICAgICAgICAgY29uc3Qgc3RydWN0IEZTU3BlYyAqZnNzcGVjOwog
ICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lOwogICAgICAgIH0gbWFjX25hbWVkX2ZyYWdtZW50
OwoKCiAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgY29uc3Qgc3RydWN0IEZTU3BlYyAqZnNz
cGVjOwogICAgICAgICAgICBQUlVpbnQzMiBpbmRleDsKICAgICAgICB9IG1hY19pbmRleGVkX2Zy
YWdtZW50OwogICAgfSB2YWx1ZTsKfSBQUkxpYlNwZWM7CiMgMTUwICIvdXNyL3NyYy9taXNjL21v
emlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsaW5rLmgiCmV4dGVybiBQUkxpYnJhcnkgKgpQUl9M
b2FkTGlicmFyeVdpdGhGbGFncygKICAgIFBSTGliU3BlYyBsaWJTcGVjLAogICAgUFJJbnRuIGZs
YWdzCik7CiMgMTY1ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJs
aW5rLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9VbmxvYWRMaWJyYXJ5KFBSTGlicmFyeSAqbGliKTsK
IyAxNzUgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmxpbmsuaCIK
ZXh0ZXJuIHZvaWQqIFBSX0ZpbmRTeW1ib2woUFJMaWJyYXJ5ICpsaWIsIGNvbnN0IGNoYXIgKm5h
bWUpOwojIDE4NyAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybGlu
ay5oIgpleHRlcm4gdm9pZCogUFJfRmluZFN5bWJvbEFuZExpYnJhcnkoY29uc3QgY2hhciAqbmFt
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UFJMaWJyYXJ5KiAqbGliKTsKIyAyMDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1
ZGUvbnNwci9wcmxpbmsuaCIKZXh0ZXJuIFBSTGlicmFyeSogUFJfTG9hZFN0YXRpY0xpYnJhcnko
CiAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBQUlN0YXRpY0xpbmtUYWJsZSAqdGFibGUpOwoK
fQojIDM2ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvbnNwci5oIiAy
CiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9jay5oIiAx
CiMgMzcgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9uc3ByLmgiIDIK
IyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsb2cuaCIgMQoj
IDIyICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsb2cuaCIKIyAx
ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAxCiMg
MjMgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmxvZy5oIiAyCgpl
eHRlcm4gIkMiIHsKIyAxMTkgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNw
ci9wcmxvZy5oIgp0eXBlZGVmIGVudW0gUFJMb2dNb2R1bGVMZXZlbCB7CiAgICBQUl9MT0dfTk9O
RSA9IDAsCiAgICBQUl9MT0dfQUxXQVlTID0gMSwKICAgIFBSX0xPR19FUlJPUiA9IDIsCiAgICBQ
Ul9MT0dfV0FSTklORyA9IDMsCiAgICBQUl9MT0dfREVCVUcgPSA0LAoKICAgIFBSX0xPR19OT1RJ
Q0UgPSBQUl9MT0dfREVCVUcsCiAgICBQUl9MT0dfV0FSTiA9IFBSX0xPR19XQVJOSU5HLAogICAg
UFJfTE9HX01JTiA9IFBSX0xPR19ERUJVRywKICAgIFBSX0xPR19NQVggPSBQUl9MT0dfREVCVUcK
fSBQUkxvZ01vZHVsZUxldmVsOwoKCgoKCgp0eXBlZGVmIHN0cnVjdCBQUkxvZ01vZHVsZUluZm8g
ewogICAgY29uc3QgY2hhciAqbmFtZTsKICAgIFBSTG9nTW9kdWxlTGV2ZWwgbGV2ZWw7CiAgICBz
dHJ1Y3QgUFJMb2dNb2R1bGVJbmZvICpuZXh0Owp9IFBSTG9nTW9kdWxlSW5mbzsKCgoKCmV4dGVy
biBQUkxvZ01vZHVsZUluZm8qIFBSX05ld0xvZ01vZHVsZShjb25zdCBjaGFyICpuYW1lKTsKCgoK
CgpleHRlcm4gUFJCb29sIFBSX1NldExvZ0ZpbGUoY29uc3QgY2hhciAqbmFtZSk7CgoKCgoKZXh0
ZXJuIHZvaWQgUFJfU2V0TG9nQnVmZmVyaW5nKFBSSW50biBidWZmZXJfc2l6ZSk7CgoKCgoKCgpl
eHRlcm4gdm9pZCBQUl9Mb2dQcmludChjb25zdCBjaGFyICpmbXQsIC4uLik7CgoKCgpleHRlcm4g
dm9pZCBQUl9Mb2dGbHVzaCh2b2lkKTsKIyAyMjEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0
L2luY2x1ZGUvbnNwci9wcmxvZy5oIgpleHRlcm4gdm9pZCBQUl9Bc3NlcnQoY29uc3QgY2hhciAq
cywgY29uc3QgY2hhciAqZmlsZSwgUFJJbnRuIGxuKTsKIyAyMzUgIi91c3Ivc3JjL21pc2MvbW96
aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmxvZy5oIgp9CiMgMzggIi91c3Ivc3JjL21pc2MvbW96
aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9uc3ByLmgiIDIKIyAxICIvdXNyL3NyYy9taXNjL21vemls
bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsb25nLmgiIDEKIyAzOSAiL3Vzci9zcmMvbWlzYy9tb3pp
bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL25zcHIuaCIgMgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxs
YS9kaXN0L2luY2x1ZGUvbnNwci9wcm1lbS5oIiAxCiMgMjcgIi91c3Ivc3JjL21pc2MvbW96aWxs
YS9kaXN0L2luY2x1ZGUvbnNwci9wcm1lbS5oIgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9k
aXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyAyOCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxh
L2Rpc3QvaW5jbHVkZS9uc3ByL3BybWVtLmgiIDIKIyAxICIvdXNyL2djYy1wcmUzLjAvbGliL2dj
Yy1saWIvaWE2NC1ocC1saW51eC8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjkgIi91c3Iv
c3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcm1lbS5oIiAyCiMgMSAiL3Vzci9p
bmNsdWRlL3N0ZGxpYi5oIiAxIDMKIyAzMCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5j
bHVkZS9uc3ByL3BybWVtLmgiIDIKCmV4dGVybiAiQyIgewojIDQ4ICIvdXNyL3NyYy9taXNjL21v
emlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJtZW0uaCIKZXh0ZXJuIHZvaWQgKiBQUl9NYWxsb2Mo
UFJVaW50MzIgc2l6ZSk7CgpleHRlcm4gdm9pZCAqIFBSX0NhbGxvYyhQUlVpbnQzMiBuZWxlbSwg
UFJVaW50MzIgZWxzaXplKTsKCmV4dGVybiB2b2lkICogUFJfUmVhbGxvYyh2b2lkICpwdHIsIFBS
VWludDMyIHNpemUpOwoKZXh0ZXJuIHZvaWQgUFJfRnJlZSh2b2lkICpwdHIpOwojIDEzOCAiL3Vz
ci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybWVtLmgiCn0KIyA0MCAiL3Vz
ci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL25zcHIuaCIgMgojIDEgIi91c3Iv
c3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcm1vbi5oIiAxCiMgNDEgIi91c3Iv
c3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9uc3ByLmgiIDIKIyAxICIvdXNyL3Ny
Yy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJtd2FpdC5oIiAxCiMgMjMgIi91c3Iv
c3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcm13YWl0LmgiCiMgMSAiL3Vzci9z
cmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIgMQojIDI0ICIvdXNyL3Ny
Yy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJtd2FpdC5oIiAyCiMgMSAiL3Vzci9z
cmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQojIDI1ICIvdXNy
L3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJtd2FpdC5oIiAyCiMgMSAiL3Vz
ci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByY2xpc3QuaCIgMQojIDI2ICIv
dXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJtd2FpdC5oIiAyCgpleHRl
cm4gIkMiIHsKIyA1MCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By
bXdhaXQuaCIKdHlwZWRlZiBzdHJ1Y3QgUFJXYWl0R3JvdXAgUFJXYWl0R3JvdXA7CiMgNzQgIi91
c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcm13YWl0LmgiCnR5cGVkZWYg
ZW51bSBQUk1XU3RhdHVzCnsKICAgIFBSX01XX1BFTkRJTkcgPSAxLAogICAgUFJfTVdfU1VDQ0VT
UyA9IDAsCiAgICBQUl9NV19GQUlMVVJFID0gLTEsCiAgICBQUl9NV19USU1FT1VUID0gLTIsCiAg
ICBQUl9NV19JTlRFUlJVUFQgPSAtMwp9IFBSTVdTdGF0dXM7CiMgOTAgIi91c3Ivc3JjL21pc2Mv
bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcm13YWl0LmgiCnR5cGVkZWYgc3RydWN0IFBSTWVt
b3J5RGVzY3JpcHRvcgp7CiAgICB2b2lkICpzdGFydDsKICAgIFBSU2l6ZSBsZW5ndGg7Cn0gUFJN
ZW1vcnlEZXNjcmlwdG9yOwojIDEwMyAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVk
ZS9uc3ByL3BybXdhaXQuaCIKdHlwZWRlZiBzdHJ1Y3QgUFJNV2FpdENsaWVudERhdGEgUFJNV2Fp
dENsaWVudERhdGE7CiMgMTIxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25z
cHIvcHJtd2FpdC5oIgp0eXBlZGVmIHN0cnVjdCBQUlJlY3ZXYWl0CnsKICAgIFBSQ0xpc3QgaW50
ZXJuYWw7CgogICAgUFJGaWxlRGVzYyAqZmQ7CiAgICBQUk1XU3RhdHVzIG91dGNvbWU7CiAgICBQ
UkludGVydmFsVGltZSB0aW1lb3V0OwoKICAgIFBSSW50MzIgYnl0ZXNSZWN2OwogICAgUFJNZW1v
cnlEZXNjcmlwdG9yIGJ1ZmZlcjsKICAgIFBSTVdhaXRDbGllbnREYXRhICpjbGllbnQ7Cn0gUFJS
ZWN2V2FpdDsKIyAxNDMgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w
cm13YWl0LmgiCnR5cGVkZWYgc3RydWN0IFBSTVdhaXRFbnVtZXJhdG9yIFBSTVdhaXRFbnVtZXJh
dG9yOwojIDE3NyAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybXdh
aXQuaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX0FkZFdhaXRGaWxlRGVzYyhQUldhaXRHcm91cCAqZ3Jv
dXAsIFBSUmVjdldhaXQgKmRlc2MpOwojIDIxMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3Qv
aW5jbHVkZS9uc3ByL3BybXdhaXQuaCIKZXh0ZXJuIFBSUmVjdldhaXQqIFBSX1dhaXRSZWN2UmVh
ZHkoUFJXYWl0R3JvdXAgKmdyb3VwKTsKIyAyNDYgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0
L2luY2x1ZGUvbnNwci9wcm13YWl0LmgiCmV4dGVybiBQUlN0YXR1cyBQUl9DYW5jZWxXYWl0Rmls
ZURlc2MoUFJXYWl0R3JvdXAgKmdyb3VwLCBQUlJlY3ZXYWl0ICpkZXNjKTsKIyAyNzMgIi91c3Iv
c3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcm13YWl0LmgiCmV4dGVybiBQUlJl
Y3ZXYWl0KiBQUl9DYW5jZWxXYWl0R3JvdXAoUFJXYWl0R3JvdXAgKmdyb3VwKTsKIyAzMDAgIi91
c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcm13YWl0LmgiCmV4dGVybiBQ
UldhaXRHcm91cCogUFJfQ3JlYXRlV2FpdEdyb3VwKFBSSW50MzIgc2l6ZSk7CiMgMzIzICIvdXNy
L3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJtd2FpdC5oIgpleHRlcm4gUFJT
dGF0dXMgUFJfRGVzdHJveVdhaXRHcm91cChQUldhaXRHcm91cCAqZ3JvdXApOwojIDM0NSAiL3Vz
ci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybXdhaXQuaCIKZXh0ZXJuIFBS
TVdhaXRFbnVtZXJhdG9yKiBQUl9DcmVhdGVNV2FpdEVudW1lcmF0b3IoUFJXYWl0R3JvdXAgKmdy
b3VwKTsKIyAzNjMgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcm13
YWl0LmgiCmV4dGVybiBQUlN0YXR1cyBQUl9EZXN0cm95TVdhaXRFbnVtZXJhdG9yKFBSTVdhaXRF
bnVtZXJhdG9yKiBlbnVtZXJhdG9yKTsKIyAzODYgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0
L2luY2x1ZGUvbnNwci9wcm13YWl0LmgiCmV4dGVybiBQUlJlY3ZXYWl0KiBQUl9FbnVtZXJhdGVX
YWl0R3JvdXAoCiAgICBQUk1XYWl0RW51bWVyYXRvciAqZW51bWVyYXRvciwgY29uc3QgUFJSZWN2
V2FpdCAqcHJldmlvdXMpOwoKfQojIDQyICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNs
dWRlL25zcHIvbnNwci5oIiAyCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVk
ZS9uc3ByL3BybmV0ZGIuaCIgMQojIDIyICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNs
dWRlL25zcHIvcHJuZXRkYi5oIgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1
ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyAyMyAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5j
bHVkZS9uc3ByL3BybmV0ZGIuaCIgMgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2lu
Y2x1ZGUvbnNwci9wcmlvLmgiIDEKIyAyNCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5j
bHVkZS9uc3ByL3BybmV0ZGIuaCIgMgoKZXh0ZXJuICJDIiB7CgoKCgoKCgpleHRlcm4gUFJTdGF0
dXMgUFJfU3RyaW5nVG9OZXRBZGRyKAogICAgY29uc3QgY2hhciAqc3RyaW5nLCBQUk5ldEFkZHIg
KmFkZHIpOwoKZXh0ZXJuIFBSU3RhdHVzIFBSX05ldEFkZHJUb1N0cmluZygKICAgIGNvbnN0IFBS
TmV0QWRkciAqYWRkciwgY2hhciAqc3RyaW5nLCBQUlVpbnQzMiBzaXplKTsKIyA0OSAiL3Vzci9z
cmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybmV0ZGIuaCIKdHlwZWRlZiBzdHJ1
Y3QgUFJIb3N0RW50IHsKICAgIGNoYXIgKmhfbmFtZTsKICAgIGNoYXIgKipoX2FsaWFzZXM7CgoK
CgogICAgUFJJbnQzMiBoX2FkZHJ0eXBlOwogICAgUFJJbnQzMiBoX2xlbmd0aDsKCiAgICBjaGFy
ICoqaF9hZGRyX2xpc3Q7Cn0gUFJIb3N0RW50OwojIDkwICIvdXNyL3NyYy9taXNjL21vemlsbGEv
ZGlzdC9pbmNsdWRlL25zcHIvcHJuZXRkYi5oIgpleHRlcm4gUFJTdGF0dXMgUFJfR2V0SG9zdEJ5
TmFtZSgKICAgIGNvbnN0IGNoYXIgKmhvc3RuYW1lLCBjaGFyICpidWYsIFBSSW50biBidWZzaXpl
LCBQUkhvc3RFbnQgKmhvc3RlbnRyeSk7CiMgMTI2ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlz
dC9pbmNsdWRlL25zcHIvcHJuZXRkYi5oIgpleHRlcm4gUFJTdGF0dXMgUFJfR2V0SVBOb2RlQnlO
YW1lKAogICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCiAgICBQUlVpbnQxNiBhZiwKICAgIFBSSW50
biBmbGFncywKICAgIGNoYXIgKmJ1ZiwKICAgIFBSSW50biBidWZzaXplLAogICAgUFJIb3N0RW50
ICpob3N0ZW50cnkpOwojIDE1NSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u
c3ByL3BybmV0ZGIuaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX0dldEhvc3RCeUFkZHIoCiAgICBjb25z
dCBQUk5ldEFkZHIgKmhvc3RhZGRyLCBjaGFyICpidWYsIFBSSW50biBidWZzaXplLCBQUkhvc3RF
bnQgKmhvc3RlbnRyeSk7CiMgMTg5ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRl
L25zcHIvcHJuZXRkYi5oIgpleHRlcm4gUFJJbnRuIFBSX0VudW1lcmF0ZUhvc3RFbnQoCiAgICBQ
UkludG4gZW51bUluZGV4LCBjb25zdCBQUkhvc3RFbnQgKmhvc3RFbnQsIFBSVWludDE2IHBvcnQs
IFBSTmV0QWRkciAqYWRkcmVzcyk7CiMgMjE0ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9p
bmNsdWRlL25zcHIvcHJuZXRkYi5oIgp0eXBlZGVmIGVudW0gUFJOZXRBZGRyVmFsdWUKewogICAg
UFJfSXBBZGRyTnVsbCwKICAgIFBSX0lwQWRkckFueSwKICAgIFBSX0lwQWRkckxvb3BiYWNrLAog
ICAgUFJfSXBBZGRyVjRNYXBwZWQKfSBQUk5ldEFkZHJWYWx1ZTsKCmV4dGVybiBQUlN0YXR1cyBQ
Ul9Jbml0aWFsaXplTmV0QWRkcigKICAgIFBSTmV0QWRkclZhbHVlIHZhbCwgUFJVaW50MTYgcG9y
dCwgUFJOZXRBZGRyICphZGRyKTsKIyAyNTAgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2lu
Y2x1ZGUvbnNwci9wcm5ldGRiLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9TZXROZXRBZGRyKAogICAg
UFJOZXRBZGRyVmFsdWUgdmFsLCBQUlVpbnQxNiBhZiwgUFJVaW50MTYgcG9ydCwgUFJOZXRBZGRy
ICphZGRyKTsKIyAyNjYgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w
cm5ldGRiLmgiCmV4dGVybiBQUkJvb2wgUFJfSXNOZXRBZGRyVHlwZShjb25zdCBQUk5ldEFkZHIg
KmFkZHIsIFBSTmV0QWRkclZhbHVlIHZhbCk7CiMgMjgzICIvdXNyL3NyYy9taXNjL21vemlsbGEv
ZGlzdC9pbmNsdWRlL25zcHIvcHJuZXRkYi5oIgpleHRlcm4gdm9pZCBQUl9Db252ZXJ0SVB2NEFk
ZHJUb0lQdjYoUFJVaW50MzIgdjRhZGRyLCBQUklQdjZBZGRyICp2NmFkZHIpOwojIDMzNCAiL3Vz
ci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybmV0ZGIuaCIKdHlwZWRlZiBz
dHJ1Y3QgUFJQcm90b0VudCB7CiAgICBjaGFyICpwX25hbWU7CiAgICBjaGFyICoqcF9hbGlhc2Vz
OwoKCgogICAgUFJJbnQzMiBwX251bTsKCn0gUFJQcm90b0VudDsKCmV4dGVybiBQUlN0YXR1cyBQ
Ul9HZXRQcm90b0J5TmFtZSgKICAgIGNvbnN0IGNoYXIqIHByb3RvY29sbmFtZSwgY2hhciogYnVm
ZmVyLCBQUkludDMyIGJ1ZnNpemUsIFBSUHJvdG9FbnQqIHJlc3VsdCk7CiMgMzY5ICIvdXNyL3Ny
Yy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJuZXRkYi5oIgpleHRlcm4gUFJTdGF0
dXMgUFJfR2V0UHJvdG9CeU51bWJlcigKICAgIFBSSW50MzIgcHJvdG9jb2xudW1iZXIsIGNoYXIq
IGJ1ZmZlciwgUFJJbnQzMiBidWZzaXplLCBQUlByb3RvRW50KiByZXN1bHQpOwojIDM4NSAiL3Vz
ci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybmV0ZGIuaCIKZXh0ZXJuIFBS
VWludDE2IFBSX250b2hzKFBSVWludDE2KTsKZXh0ZXJuIFBSVWludDMyIFBSX250b2hsKFBSVWlu
dDMyKTsKZXh0ZXJuIFBSVWludDY0IFBSX250b2hsbChQUlVpbnQ2NCk7CmV4dGVybiBQUlVpbnQx
NiBQUl9odG9ucyhQUlVpbnQxNik7CmV4dGVybiBQUlVpbnQzMiBQUl9odG9ubChQUlVpbnQzMik7
CmV4dGVybiBQUlVpbnQ2NCBQUl9odG9ubGwoUFJVaW50NjQpOwoKfQojIDQzICIvdXNyL3NyYy9t
aXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvbnNwci5oIiAyCiMgMSAiL3Vzci9zcmMvbWlz
Yy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BycHJmLmgiIDEKIyAzOCAiL3Vzci9zcmMvbWlz
Yy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BycHJmLmgiCiMgMSAiL3Vzci9zcmMvbWlzYy9t
b3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQojIDM5ICIvdXNyL3NyYy9taXNj
L21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJwcmYuaCIgMgojIDEgIi91c3Ivc3JjL21pc2Mv
bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiIDEKIyA0MCAiL3Vzci9zcmMvbWlzYy9t
b3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BycHJmLmgiIDIKIyAxICIvdXNyL2djYy1wcmUzLjAv
bGliL2djYy1saWIvaWE2NC1ocC1saW51eC8zLjAvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyA0MSAi
L3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BycHJmLmgiIDIKIyAxICIv
dXNyL2djYy1wcmUzLjAvbGliL2djYy1saWIvaWE2NC1ocC1saW51eC8zLjAvaW5jbHVkZS9zdGRh
cmcuaCIgMSAzCiMgMTEwICIvdXNyL2djYy1wcmUzLjAvbGliL2djYy1saWIvaWE2NC1ocC1saW51
eC8zLjAvaW5jbHVkZS9zdGRhcmcuaCIgMwp0eXBlZGVmIF9fZ251Y192YV9saXN0IHZhX2xpc3Q7
CiMgNDIgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnByZi5oIiAy
CgpleHRlcm4gIkMiIHsKCgoKCgoKZXh0ZXJuIFBSVWludDMyIFBSX3NucHJpbnRmKGNoYXIgKm91
dCwgUFJVaW50MzIgb3V0bGVuLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CgoKCgoKCmV4dGVybiBj
aGFyKiBQUl9zbXByaW50Zihjb25zdCBjaGFyICpmbXQsIC4uLik7CgoKCgpleHRlcm4gdm9pZCBQ
Ul9zbXByaW50Zl9mcmVlKGNoYXIgKm1lbSk7CiMgNzEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9k
aXN0L2luY2x1ZGUvbnNwci9wcnByZi5oIgpleHRlcm4gY2hhciogUFJfc3ByaW50Zl9hcHBlbmQo
Y2hhciAqbGFzdCwgY29uc3QgY2hhciAqZm10LCAuLi4pOwojIDgwICIvdXNyL3NyYy9taXNjL21v
emlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJwcmYuaCIKdHlwZWRlZiBQUkludG4gKCpQUlN0dWZm
RnVuYykodm9pZCAqYXJnLCBjb25zdCBjaGFyICpzLCBQUlVpbnQzMiBzbGVuKTsKCmV4dGVybiBQ
UlVpbnQzMiBQUl9zeHByaW50ZihQUlN0dWZmRnVuYyBmLCB2b2lkICphcmcsIGNvbnN0IGNoYXIg
KmZtdCwgLi4uKTsKCgoKCmV4dGVybiBQUlVpbnQzMiBQUl9mcHJpbnRmKHN0cnVjdCBQUkZpbGVE
ZXNjKiBmZCwgY29uc3QgY2hhciAqZm10LCAuLi4pOwoKCgoKZXh0ZXJuIFBSVWludDMyIFBSX3Zz
bnByaW50ZihjaGFyICpvdXQsIFBSVWludDMyIG91dGxlbiwgY29uc3QgY2hhciAqZm10LCB2YV9s
aXN0IGFwKTsKZXh0ZXJuIGNoYXIqIFBSX3ZzbXByaW50Zihjb25zdCBjaGFyICpmbXQsIHZhX2xp
c3QgYXApOwpleHRlcm4gY2hhciogUFJfdnNwcmludGZfYXBwZW5kKGNoYXIgKmxhc3QsIGNvbnN0
IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCk7CmV4dGVybiBQUlVpbnQzMiBQUl92c3hwcmludGYoUFJT
dHVmZkZ1bmMgZiwgdm9pZCAqYXJnLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApOwpleHRl
cm4gUFJVaW50MzIgUFJfdmZwcmludGYoc3RydWN0IFBSRmlsZURlc2MqIGZkLCBjb25zdCBjaGFy
ICpmbXQsIHZhX2xpc3QgYXApOwojIDEzMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5j
bHVkZS9uc3ByL3BycHJmLmgiCmV4dGVybiBQUkludDMyIFBSX3NzY2FuZihjb25zdCBjaGFyICpi
dWYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKCn0KIyA0NCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxh
L2Rpc3QvaW5jbHVkZS9uc3ByL25zcHIuaCIgMgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9k
aXN0L2luY2x1ZGUvbnNwci9wcnByb2Nlcy5oIiAxCiMgMjIgIi91c3Ivc3JjL21pc2MvbW96aWxs
YS9kaXN0L2luY2x1ZGUvbnNwci9wcnByb2Nlcy5oIgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxs
YS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyAyMyAiL3Vzci9zcmMvbWlzYy9tb3pp
bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BycHJvY2VzLmgiIDIKIyAxICIvdXNyL3NyYy9taXNjL21v
emlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIiAxCiMgMjQgIi91c3Ivc3JjL21pc2MvbW96
aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnByb2Nlcy5oIiAyCgpleHRlcm4gIkMiIHsKCgoKCgp0
eXBlZGVmIHN0cnVjdCBQUlByb2Nlc3MgUFJQcm9jZXNzOwp0eXBlZGVmIHN0cnVjdCBQUlByb2Nl
c3NBdHRyIFBSUHJvY2Vzc0F0dHI7CgpleHRlcm4gUFJQcm9jZXNzQXR0ciAqIFBSX05ld1Byb2Nl
c3NBdHRyKHZvaWQpOwoKZXh0ZXJuIHZvaWQgUFJfUmVzZXRQcm9jZXNzQXR0cihQUlByb2Nlc3NB
dHRyICphdHRyKTsKCmV4dGVybiB2b2lkIFBSX0Rlc3Ryb3lQcm9jZXNzQXR0cihQUlByb2Nlc3NB
dHRyICphdHRyKTsKCmV4dGVybiB2b2lkIFBSX1Byb2Nlc3NBdHRyU2V0U3RkaW9SZWRpcmVjdCgK
ICAgIFBSUHJvY2Vzc0F0dHIgKmF0dHIsCiAgICBQUlNwZWNpYWxGRCBzdGRpb0ZkLAogICAgUFJG
aWxlRGVzYyAqcmVkaXJlY3RGZAopOwoKCgoKZXh0ZXJuIHZvaWQgUFJfU2V0U3RkaW9SZWRpcmVj
dCgKICAgIFBSUHJvY2Vzc0F0dHIgKmF0dHIsCiAgICBQUlNwZWNpYWxGRCBzdGRpb0ZkLAogICAg
UFJGaWxlRGVzYyAqcmVkaXJlY3RGZAopOwoKZXh0ZXJuIFBSU3RhdHVzIFBSX1Byb2Nlc3NBdHRy
U2V0Q3VycmVudERpcmVjdG9yeSgKICAgIFBSUHJvY2Vzc0F0dHIgKmF0dHIsCiAgICBjb25zdCBj
aGFyICpkaXIKKTsKCmV4dGVybiBQUlN0YXR1cyBQUl9Qcm9jZXNzQXR0clNldEluaGVyaXRhYmxl
RkQoCiAgICBQUlByb2Nlc3NBdHRyICphdHRyLAogICAgUFJGaWxlRGVzYyAqZmQsCiAgICBjb25z
dCBjaGFyICpuYW1lCik7CiMgNzkgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUv
bnNwci9wcnByb2Nlcy5oIgpleHRlcm4gUFJQcm9jZXNzKiBQUl9DcmVhdGVQcm9jZXNzKAogICAg
Y29uc3QgY2hhciAqcGF0aCwKICAgIGNoYXIgKmNvbnN0ICphcmd2LAogICAgY2hhciAqY29uc3Qg
KmVudnAsCiAgICBjb25zdCBQUlByb2Nlc3NBdHRyICphdHRyKTsKCmV4dGVybiBQUlN0YXR1cyBQ
Ul9DcmVhdGVQcm9jZXNzRGV0YWNoZWQoCiAgICBjb25zdCBjaGFyICpwYXRoLAogICAgY2hhciAq
Y29uc3QgKmFyZ3YsCiAgICBjaGFyICpjb25zdCAqZW52cCwKICAgIGNvbnN0IFBSUHJvY2Vzc0F0
dHIgKmF0dHIpOwoKZXh0ZXJuIFBSU3RhdHVzIFBSX0RldGFjaFByb2Nlc3MoUFJQcm9jZXNzICpw
cm9jZXNzKTsKCmV4dGVybiBQUlN0YXR1cyBQUl9XYWl0UHJvY2VzcyhQUlByb2Nlc3MgKnByb2Nl
c3MsIFBSSW50MzIgKmV4aXRDb2RlKTsKCmV4dGVybiBQUlN0YXR1cyBQUl9LaWxsUHJvY2VzcyhQ
UlByb2Nlc3MgKnByb2Nlc3MpOwoKfQojIDQ1ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9p
bmNsdWRlL25zcHIvbnNwci5oIiAyCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5j
bHVkZS9uc3ByL3Bycm5nLmgiIDEKIyAzMCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5j
bHVkZS9uc3ByL3Bycm5nLmgiCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVk
ZS9uc3ByL3BydHlwZXMuaCIgMQojIDMxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNs
dWRlL25zcHIvcHJybmcuaCIgMgoKZXh0ZXJuICJDIiB7CiMgODAgIi91c3Ivc3JjL21pc2MvbW96
aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnJuZy5oIgpleHRlcm4gUFJTaXplIFBSX0dldFJhbmRv
bU5vaXNlKAogICAgdm9pZCAqYnVmLAogICAgUFJTaXplIHNpemUKKTsKCn0KIyA0NiAiL3Vzci9z
cmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL25zcHIuaCIgMgojIDEgIi91c3Ivc3Jj
L21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnJ3bG9jay5oIiAxCiMgMjggIi91c3Iv
c3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnJ3bG9jay5oIgojIDEgIi91c3Iv
c3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyAyOSAiL3Vz
ci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bycndsb2NrLmgiIDIKCmV4dGVy
biAiQyIgewojIDQwICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJy
d2xvY2suaCIKdHlwZWRlZiBzdHJ1Y3QgUFJSV0xvY2sgUFJSV0xvY2s7CiMgNTcgIi91c3Ivc3Jj
L21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnJ3bG9jay5oIgpleHRlcm4gUFJSV0xv
Y2sqIFBSX05ld1JXTG9jayhQUlVpbnQzMiBsb2NrX3JhbmssIGNvbnN0IGNoYXIgKmxvY2tfbmFt
ZSk7CiMgNjcgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnJ3bG9j
ay5oIgpleHRlcm4gdm9pZCBQUl9EZXN0cm95UldMb2NrKFBSUldMb2NrICpsb2NrKTsKIyA3NyAi
L3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bycndsb2NrLmgiCmV4dGVy
biB2b2lkIFBSX1JXTG9ja19SbG9jayhQUlJXTG9jayAqbG9jayk7CiMgODcgIi91c3Ivc3JjL21p
c2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnJ3bG9jay5oIgpleHRlcm4gdm9pZCBQUl9S
V0xvY2tfV2xvY2soUFJSV0xvY2sgKmxvY2spOwojIDk3ICIvdXNyL3NyYy9taXNjL21vemlsbGEv
ZGlzdC9pbmNsdWRlL25zcHIvcHJyd2xvY2suaCIKZXh0ZXJuIHZvaWQgUFJfUldMb2NrX1VubG9j
ayhQUlJXTG9jayAqbG9jayk7Cgp9CiMgNDcgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2lu
Y2x1ZGUvbnNwci9uc3ByLmgiIDIKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNs
dWRlL25zcHIvcHJzaG0uaCIgMQojIDExNSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5j
bHVkZS9uc3ByL3Byc2htLmgiCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVk
ZS9uc3ByL3BydHlwZXMuaCIgMQojIDExNiAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5j
bHVkZS9uc3ByL3Byc2htLmgiIDIKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNs
dWRlL25zcHIvcHJpby5oIiAxCiMgMTE3ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNs
dWRlL25zcHIvcHJzaG0uaCIgMgoKZXh0ZXJuICJDIiB7CgoKCgp0eXBlZGVmIHN0cnVjdCBQUlNo
YXJlZE1lbW9yeSBQUlNoYXJlZE1lbW9yeTsKIyAxNjAgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9k
aXN0L2luY2x1ZGUvbnNwci9wcnNobS5oIgpleHRlcm4gUFJTaGFyZWRNZW1vcnkgKgogICAgUFJf
T3BlblNoYXJlZE1lbW9yeSgKICAgICAgICBjb25zdCBjaGFyICpuYW1lLAogICAgICAgIFBSU2l6
ZSBzaXplLAogICAgICAgIFBSSW50biBmbGFncywKICAgICAgICBQUkludG4gbW9kZQopOwojIDE5
NCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Byc2htLmgiCmV4dGVy
biB2b2lkICoKICAgIFBSX0F0dGFjaFNoYXJlZE1lbW9yeSgKICAgICAgICBQUlNoYXJlZE1lbW9y
eSAqc2htLAogICAgICAgIFBSSW50biBmbGFncwopOwojIDIyMCAiL3Vzci9zcmMvbWlzYy9tb3pp
bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Byc2htLmgiCmV4dGVybiBQUlN0YXR1cwogICAgUFJfRGV0
YWNoU2hhcmVkTWVtb3J5KAogICAgICAgIFBSU2hhcmVkTWVtb3J5ICpzaG0sCiAgICAgICAgdm9p
ZCAqYWRkcgopOwojIDI0MiAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By
L3Byc2htLmgiCmV4dGVybiBQUlN0YXR1cwogICAgUFJfQ2xvc2VTaGFyZWRNZW1vcnkoCiAgICAg
ICAgUFJTaGFyZWRNZW1vcnkgKnNobQopOwojIDI2MyAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rp
c3QvaW5jbHVkZS9uc3ByL3Byc2htLmgiCmV4dGVybiBQUlN0YXR1cwogICAgUFJfRGVsZXRlU2hh
cmVkTWVtb3J5KAogICAgICAgIGNvbnN0IGNoYXIgKm5hbWUKKTsKCn0KIyA0OCAiL3Vzci9zcmMv
bWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL25zcHIuaCIgMgojIDEgIi91c3Ivc3JjL21p
c2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnNobWEuaCIgMQojIDExNSAiL3Vzci9zcmMv
bWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Byc2htYS5oIgojIDEgIi91c3Ivc3JjL21p
c2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyAxMTYgIi91c3Ivc3Jj
L21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnNobWEuaCIgMgojIDEgIi91c3Ivc3Jj
L21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiIDEKIyAxMTcgIi91c3Ivc3Jj
L21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnNobWEuaCIgMgojIDEgIi91c3Ivc3Jj
L21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnByb2Nlcy5oIiAxCiMgMTE4ICIvdXNy
L3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJzaG1hLmgiIDIKCmV4dGVybiAi
QyIgewojIDE0NyAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Byc2ht
YS5oIgpleHRlcm4gUFJGaWxlTWFwICoKUFJfT3BlbkFub25GaWxlTWFwKAogICAgY29uc3QgY2hh
ciAqZGlyTmFtZSwKICAgIFBSU2l6ZSBzaXplLAogICAgUFJGaWxlTWFwUHJvdGVjdCBwcm90Cik7
CiMgMTc1ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJzaG1hLmgi
CmV4dGVybiBQUlN0YXR1cwpQUl9Qcm9jZXNzQXR0clNldEluaGVyaXRhYmxlRmlsZU1hcCgKICAg
IFBSUHJvY2Vzc0F0dHIgKmF0dHIsCiAgICBQUkZpbGVNYXAgKmZtLAogICAgY29uc3QgY2hhciAq
c2htbmFtZQopOwojIDIwMCAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By
L3Byc2htYS5oIgpleHRlcm4gUFJGaWxlTWFwICoKUFJfR2V0SW5oZXJpdGVkRmlsZU1hcCgKICAg
IGNvbnN0IGNoYXIgKnNobW5hbWUKKTsKIyAyMjQgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0
L2luY2x1ZGUvbnNwci9wcnNobWEuaCIKZXh0ZXJuIFBSU3RhdHVzClBSX0V4cG9ydEZpbGVNYXBB
c1N0cmluZygKICAgIFBSRmlsZU1hcCAqZm0sCiAgICBQUlNpemUgYnVmc2l6ZSwKICAgIGNoYXIg
KmJ1ZgopOwojIDI0NiAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By
c2htYS5oIgpleHRlcm4gUFJGaWxlTWFwICoKUFJfSW1wb3J0RmlsZU1hcEZyb21TdHJpbmcoCiAg
ICBjb25zdCBjaGFyICpmbXN0cmluZwopOwoKfQojIDQ5ICIvdXNyL3NyYy9taXNjL21vemlsbGEv
ZGlzdC9pbmNsdWRlL25zcHIvbnNwci5oIiAyCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rp
c3QvaW5jbHVkZS9uc3ByL3Byc3lzdGVtLmgiIDEKIyAyNSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxh
L2Rpc3QvaW5jbHVkZS9uc3ByL3Byc3lzdGVtLmgiCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxh
L2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQojIDI2ICIvdXNyL3NyYy9taXNjL21vemls
bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJzeXN0ZW0uaCIgMgoKZXh0ZXJuICJDIiB7CgoKCgoKCgpl
eHRlcm4gY2hhciBQUl9HZXREaXJlY3RvcnlTZXBhcmF0b3Iodm9pZCk7CgoKCgoKCmV4dGVybiBj
aGFyIFBSX0dldERpcmVjdG9yeVNlcGFydG9yKHZvaWQpOwoKCgp0eXBlZGVmIGVudW0gewogICAg
UFJfU0lfSE9TVE5BTUUsCiAgICBQUl9TSV9TWVNOQU1FLAogICAgUFJfU0lfUkVMRUFTRSwKICAg
IFBSX1NJX0FSQ0hJVEVDVFVSRQp9IFBSU3lzSW5mbzsKIyA2NSAiL3Vzci9zcmMvbWlzYy9tb3pp
bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Byc3lzdGVtLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9HZXRT
eXN0ZW1JbmZvKFBSU3lzSW5mbyBjbWQsIGNoYXIgKmJ1ZiwgUFJVaW50MzIgYnVmbGVuKTsKCgoK
CmV4dGVybiBQUkludDMyIFBSX0dldFBhZ2VTaXplKHZvaWQpOwoKCgoKZXh0ZXJuIFBSSW50MzIg
UFJfR2V0UGFnZVNoaWZ0KHZvaWQpOwoKfQojIDUwICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlz
dC9pbmNsdWRlL25zcHIvbnNwci5oIiAyCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3Qv
aW5jbHVkZS9uc3ByL3BydGhyZWFkLmgiIDEKIyA1MSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rp
c3QvaW5jbHVkZS9uc3ByL25zcHIuaCIgMgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0
L2luY2x1ZGUvbnNwci9wcnRpbWUuaCIgMQojIDUyICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlz
dC9pbmNsdWRlL25zcHIvbnNwci5oIiAyCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3Qv
aW5jbHVkZS9uc3ByL3BydHBvb2wuaCIgMQojIDIyICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlz
dC9pbmNsdWRlL25zcHIvcHJ0cG9vbC5oIgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0
L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyAyMyAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rp
c3QvaW5jbHVkZS9uc3ByL3BydHBvb2wuaCIgMgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9k
aXN0L2luY2x1ZGUvbnNwci9wcnRocmVhZC5oIiAxCiMgMjQgIi91c3Ivc3JjL21pc2MvbW96aWxs
YS9kaXN0L2luY2x1ZGUvbnNwci9wcnRwb29sLmgiIDIKIyAxICIvdXNyL3NyYy9taXNjL21vemls
bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIiAxCiMgMjUgIi91c3Ivc3JjL21pc2MvbW96aWxs
YS9kaXN0L2luY2x1ZGUvbnNwci9wcnRwb29sLmgiIDIKIyAxICIvdXNyL3NyYy9taXNjL21vemls
bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJlcnJvci5oIiAxCiMgMjYgIi91c3Ivc3JjL21pc2MvbW96
aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRwb29sLmgiIDIKCgoKCgoKCmV4dGVybiAiQyIgewoK
dHlwZWRlZiBzdHJ1Y3QgUFJKb2JJb0Rlc2MgewogICAgUFJGaWxlRGVzYyAqc29ja2V0OwogICAg
UFJFcnJvckNvZGUgZXJyb3I7CiAgICBQUkludGVydmFsVGltZSB0aW1lb3V0Owp9IFBSSm9iSW9E
ZXNjOwoKdHlwZWRlZiBzdHJ1Y3QgUFJUaHJlYWRQb29sIFBSVGhyZWFkUG9vbDsKdHlwZWRlZiBz
dHJ1Y3QgUFJKb2IgUFJKb2I7CnR5cGVkZWYgdm9pZCAoICpQUkpvYkZuKSAodm9pZCAqYXJnKTsK
CgpleHRlcm4gUFJUaHJlYWRQb29sICoKUFJfQ3JlYXRlVGhyZWFkUG9vbChQUkludDMyIGluaXRp
YWxfdGhyZWFkcywgUFJJbnQzMiBtYXhfdGhyZWFkcywKICAgICAgICAgICAgICAgICAgICAgICAg
ICBQUlVpbnQzMiBzdGFja3NpemUpOwoKCmV4dGVybiBQUkpvYiAqClBSX1F1ZXVlSm9iKFBSVGhy
ZWFkUG9vbCAqdHBvb2wsIFBSSm9iRm4gZm4sIHZvaWQgKmFyZywgUFJCb29sIGpvaW5hYmxlKTsK
CgpleHRlcm4gUFJKb2IgKgpQUl9RdWV1ZUpvYl9SZWFkKFBSVGhyZWFkUG9vbCAqdHBvb2wsIFBS
Sm9iSW9EZXNjICppb2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUFJKb2JGbiBmbiwgdm9pZCAqIGFyZywgUFJCb29sIGpvaW5hYmxlKTsK
CgpleHRlcm4gUFJKb2IgKgpQUl9RdWV1ZUpvYl9Xcml0ZShQUlRocmVhZFBvb2wgKnRwb29sLCBQ
UkpvYklvRGVzYyAqaW9kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUFJKb2JGbiBmbiwgdm9pZCAqIGFyZywgUFJCb29sIGpv
aW5hYmxlKTsKCgpleHRlcm4gUFJKb2IgKgpQUl9RdWV1ZUpvYl9BY2NlcHQoUFJUaHJlYWRQb29s
ICp0cG9vbCwgUFJKb2JJb0Rlc2MgKmlvZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJKb2JGbiBmbiwgdm9p
ZCAqIGFyZywgUFJCb29sIGpvaW5hYmxlKTsKCgpleHRlcm4gUFJKb2IgKgpQUl9RdWV1ZUpvYl9D
b25uZWN0KFBSVGhyZWFkUG9vbCAqdHBvb2wsIFBSSm9iSW9EZXNjICppb2QsCiAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFBSTmV0QWRkciAqYWRkciwgUFJKb2JGbiBmbiwgdm9pZCAqIGFy
ZywgUFJCb29sIGpvaW5hYmxlKTsKCgpleHRlcm4gUFJKb2IgKgpQUl9RdWV1ZUpvYl9UaW1lcihQ
UlRocmVhZFBvb2wgKnRwb29sLCBQUkludGVydmFsVGltZSB0aW1lb3V0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJKb2JG
biBmbiwgdm9pZCAqIGFyZywgUFJCb29sIGpvaW5hYmxlKTsKCmV4dGVybiBQUlN0YXR1cwpQUl9D
YW5jZWxKb2IoUFJKb2IgKmpvYik7CgoKZXh0ZXJuIFBSU3RhdHVzClBSX0pvaW5Kb2IoUFJKb2Ig
KmpvYik7CgoKZXh0ZXJuIFBSU3RhdHVzClBSX1NodXRkb3duVGhyZWFkUG9vbChQUlRocmVhZFBv
b2wgKnRwb29sKTsKCgpleHRlcm4gUFJTdGF0dXMKUFJfSm9pblRocmVhZFBvb2woUFJUaHJlYWRQ
b29sICp0cG9vbCk7Cgp9CiMgNTMgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUv
bnNwci9uc3ByLmgiIDIKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25z
cHIvcHJ0cmFjZS5oIiAxCiMgNzcgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUv
bnNwci9wcnRyYWNlLmgiCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u
c3ByL3BydHlwZXMuaCIgMQojIDc4ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRl
L25zcHIvcHJ0cmFjZS5oIiAyCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVk
ZS9uc3ByL3BydGhyZWFkLmgiIDEKIyA3OSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5j
bHVkZS9uc3ByL3BydHJhY2UuaCIgMgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2lu
Y2x1ZGUvbnNwci9wcnRpbWUuaCIgMQojIDgwICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9p
bmNsdWRlL25zcHIvcHJ0cmFjZS5oIiAyCgpleHRlcm4gIkMiIHsKCgoKCgoKdHlwZWRlZiB2b2lk
ICogUFJUcmFjZUhhbmRsZTsKCgoKCgoKCnR5cGVkZWYgc3RydWN0IFBSVHJhY2VFbnRyeQp7CiAg
ICBQUlRocmVhZCAqdGhyZWFkOwogICAgUFJUcmFjZUhhbmRsZSBoYW5kbGU7CiAgICBQUlRpbWUg
dGltZTsKICAgIFBSVWludDMyIHVzZXJEYXRhWzhdOwp9IFBSVHJhY2VFbnRyeTsKCgoKCgoKdHlw
ZWRlZiBlbnVtIFBSVHJhY2VPcHRpb24KewogICAgUFJUcmFjZUJ1ZlNpemUsCiAgICBQUlRyYWNl
RW5hYmxlLAogICAgUFJUcmFjZURpc2FibGUsCiAgICBQUlRyYWNlU3VzcGVuZCwKICAgIFBSVHJh
Y2VSZXN1bWUsCiAgICBQUlRyYWNlU3VzcGVuZFJlY29yZGluZywKICAgIFBSVHJhY2VSZXN1bWVS
ZWNvcmRpbmcsCiAgICBQUlRyYWNlTG9ja0hhbmRsZXMsCiAgICBQUlRyYWNlVW5Mb2NrSGFuZGxl
cywKICAgIFBSVHJhY2VTdG9wUmVjb3JkaW5nCn0gUFJUcmFjZU9wdGlvbjsKIyAxODIgIi91c3Iv
c3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRyYWNlLmgiCmV4dGVybiBQUlRy
YWNlSGFuZGxlCiAgICAgICAgUFJfQ3JlYXRlVHJhY2UoCiAgICAgICAgY29uc3QgY2hhciAqcU5h
bWUsCiAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJOYW1lLAogICAgICAgICAgICBjb25zdCBjaGFy
ICpkZXNjcmlwdGlvbgopOwojIDIxMiAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVk
ZS9uc3ByL3BydHJhY2UuaCIKZXh0ZXJuIHZvaWQKICAgICAgICBQUl9EZXN0cm95VHJhY2UoCiAg
ICAgICAgICAgICAgICBQUlRyYWNlSGFuZGxlIGhhbmRsZQopOwojIDI0OSAiL3Vzci9zcmMvbWlz
Yy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHJhY2UuaCIKZXh0ZXJuIHZvaWQKICAgICAg
ICBQUl9UcmFjZSgKICAgICAgICBQUlRyYWNlSGFuZGxlIGhhbmRsZSwKICAgICAgICAgICAgUFJV
aW50MzIgdXNlckRhdGEwLAogICAgICAgICAgICBQUlVpbnQzMiB1c2VyRGF0YTEsCiAgICAgICAg
ICAgIFBSVWludDMyIHVzZXJEYXRhMiwKICAgICAgICAgICAgUFJVaW50MzIgdXNlckRhdGEzLAog
ICAgICAgICAgICBQUlVpbnQzMiB1c2VyRGF0YTQsCiAgICAgICAgICAgIFBSVWludDMyIHVzZXJE
YXRhNSwKICAgICAgICAgICAgUFJVaW50MzIgdXNlckRhdGE2LAogICAgICAgICAgICBQUlVpbnQz
MiB1c2VyRGF0YTcKKTsKIyAzMzIgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUv
bnNwci9wcnRyYWNlLmgiCmV4dGVybiB2b2lkCiAgICAgICAgUFJfU2V0VHJhY2VPcHRpb24oCiAg
ICAgICAgICAgIFBSVHJhY2VPcHRpb24gY29tbWFuZCwKICAgICAgICAgICAgdm9pZCAqdmFsdWUK
KTsKIyAzNjYgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRyYWNl
LmgiCmV4dGVybiB2b2lkCiAgICAgICAgUFJfR2V0VHJhY2VPcHRpb24oCiAgICAgICAgUFJUcmFj
ZU9wdGlvbiBjb21tYW5kLAogICAgICAgICAgICB2b2lkICp2YWx1ZQopOwojIDM5OCAiL3Vzci9z
cmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHJhY2UuaCIKZXh0ZXJuIFBSVHJh
Y2VIYW5kbGUKICAgICAgICBQUl9HZXRUcmFjZUhhbmRsZUZyb21OYW1lKAogICAgICAgIGNvbnN0
IGNoYXIgKnFOYW1lLAogICAgICAgIGNvbnN0IGNoYXIgKnJOYW1lCik7CiMgNDI2ICIvdXNyL3Ny
Yy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0cmFjZS5oIgpleHRlcm4gdm9pZAog
ICAgICAgIFBSX0dldFRyYWNlTmFtZUZyb21IYW5kbGUoCiAgICAgICAgUFJUcmFjZUhhbmRsZSBo
YW5kbGUsCiAgICAgICAgICAgIGNvbnN0IGNoYXIgKipxTmFtZSwKICAgICAgICAgICAgY29uc3Qg
Y2hhciAqKnJOYW1lLAogICAgICAgIGNvbnN0IGNoYXIgKipkZXNjcmlwdGlvbgopOwojIDQ2NCAi
L3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHJhY2UuaCIKZXh0ZXJu
IFBSVHJhY2VIYW5kbGUKICAgICAgICBQUl9GaW5kTmV4dFRyYWNlUW5hbWUoCiAgICAgICAgUFJU
cmFjZUhhbmRsZSBoYW5kbGUKKTsKIyA1MDIgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2lu
Y2x1ZGUvbnNwci9wcnRyYWNlLmgiCmV4dGVybiBQUlRyYWNlSGFuZGxlCiAgICAgICAgUFJfRmlu
ZE5leHRUcmFjZVJuYW1lKAogICAgICAgIFBSVHJhY2VIYW5kbGUgcmhhbmRsZSwKICAgICAgICBQ
UlRyYWNlSGFuZGxlIHFoYW5kbGUKKTsKIyA1NTQgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0
L2luY2x1ZGUvbnNwci9wcnRyYWNlLmgiCmV4dGVybiB2b2lkCiAgICAgICAgUFJfUmVjb3JkVHJh
Y2VFbnRyaWVzKAogICAgICAgIHZvaWQKKTsKIyA2MDMgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9k
aXN0L2luY2x1ZGUvbnNwci9wcnRyYWNlLmgiCmV4dGVybiBQUkludG4KICAgIFBSX0dldFRyYWNl
RW50cmllcygKICAgICAgICBQUlRyYWNlRW50cnkgKmJ1ZmZlciwKICAgICAgICBQUkludDMyIGNv
dW50LAogICAgICAgIFBSSW50MzIgKmZvdW5kCik7CiMgNjMyICIvdXNyL3NyYy9taXNjL21vemls
bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0cmFjZS5oIgp9CiMgNTQgIi91c3Ivc3JjL21pc2MvbW96
aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9uc3ByLmgiIDIKIyAxICIvdXNyL3NyYy9taXNjL21vemls
bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAxCiMgNTUgIi91c3Ivc3JjL21pc2MvbW96
aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9uc3ByLmgiIDIKIyAzOCAibnNTb2Z0d2FyZVVwZGF0ZS5j
cHAiIDIKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsb2Nr
LmgiIDEKIyAzOSAibnNTb2Z0d2FyZVVwZGF0ZS5jcHAiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1
ZGUvbnNYUElETFN0cmluZy5oIiAxCiMgOTAgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1hQSURMU3Ry
aW5nLmgiCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5oIiAxCiMgOTEgIi4uLy4uL2Rp
c3QvaW5jbHVkZS9uc1hQSURMU3RyaW5nLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnND
b20uaCIgMQojIDkyICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNYUElETFN0cmluZy5oIiAyCiMgMSAi
L3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQojIDkz
ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNYUElETFN0cmluZy5oIiAyCiMgMTA4ICIuLi8uLi9kaXN0
L2luY2x1ZGUvbnNYUElETFN0cmluZy5oIgpjbGFzcyBuc1hQSURMU3RyaW5nIHsKcHJpdmF0ZToK
ICAgIFBSVW5pY2hhciogbUJ1ZjsKICAgIFBSQm9vbCBtQnVmT3duZXI7CgogICAgUFJVbmljaGFy
KiogU3RhcnRBc3NpZ25tZW50QnlWYWx1ZSgpOwogICAgY29uc3QgUFJVbmljaGFyKiogU3RhcnRB
c3NpZ25tZW50QnlSZWZlcmVuY2UoKTsKCnB1YmxpYzoKCgoKICAgIG5zWFBJRExTdHJpbmcoKSA6
IG1CdWYoMCksIG1CdWZPd25lcigwKSB7fQoKICAgIH5uc1hQSURMU3RyaW5nKCk7CgoKCgogICAg
b3BlcmF0b3IgY29uc3QgUFJVbmljaGFyKigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9CgoKCgog
ICAgY29uc3QgUFJVbmljaGFyKiBnZXQoKSBjb25zdCB7IHJldHVybiBtQnVmOyB9CgoKCgoKICAg
IHN0YXRpYyBQUlVuaWNoYXIqIENvcHkoY29uc3QgUFJVbmljaGFyKiBhU3RyaW5nKTsKCgoKCiAg
ICBjbGFzcyBHZXR0ZXJDb3BpZXMgewogICAgcHJpdmF0ZToKICAgICAgICBuc1hQSURMU3RyaW5n
JiBtWFBJRExTdHJpbmc7CgogICAgcHVibGljOgogICAgICAgIEdldHRlckNvcGllcyhuc1hQSURM
U3RyaW5nJiBhWFBJRExTdHJpbmcpCiAgICAgICAgICAgIDogbVhQSURMU3RyaW5nKGFYUElETFN0
cmluZykge30KCiAgICAgICAgb3BlcmF0b3IgUFJVbmljaGFyKiooKSB7CiAgICAgICAgICAgIHJl
dHVybiBtWFBJRExTdHJpbmcuU3RhcnRBc3NpZ25tZW50QnlWYWx1ZSgpOwogICAgICAgIH0KCiAg
ICAgICAgZnJpZW5kIEdldHRlckNvcGllcyBnZXR0ZXJfQ29waWVzKG5zWFBJRExTdHJpbmcmIGFY
UElETFN0cmluZyk7CiAgICB9OwoKICAgIGZyaWVuZCBjbGFzcyBHZXR0ZXJDb3BpZXM7CgoKCgog
ICAgY2xhc3MgR2V0dGVyU2hhcmVzIHsKICAgIHByaXZhdGU6CiAgICAgICAgbnNYUElETFN0cmlu
ZyYgbVhQSURMU3RyaW5nOwoKICAgIHB1YmxpYzoKICAgICAgICBHZXR0ZXJTaGFyZXMobnNYUElE
TFN0cmluZyYgYVhQSURMU3RyaW5nKQogICAgICAgICAgICA6IG1YUElETFN0cmluZyhhWFBJRExT
dHJpbmcpIHt9CgogICAgICAgIG9wZXJhdG9yIGNvbnN0IFBSVW5pY2hhcioqKCkgewogICAgICAg
ICAgICByZXR1cm4gbVhQSURMU3RyaW5nLlN0YXJ0QXNzaWdubWVudEJ5UmVmZXJlbmNlKCk7CiAg
ICAgICAgfQoKICAgICAgICBmcmllbmQgR2V0dGVyU2hhcmVzIGdldHRlcl9TaGFyZXMobnNYUElE
TFN0cmluZyYgYVhQSURMU3RyaW5nKTsKICAgIH07CgogICAgZnJpZW5kIGNsYXNzIEdldHRlclNo
YXJlczsKCnByaXZhdGU6CgogICAgbnNYUElETFN0cmluZyhuc1hQSURMU3RyaW5nJiApIHt9CiAg
ICB2b2lkIG9wZXJhdG9yPShuc1hQSURMU3RyaW5nJiApIHt9Cn07CgoKCgoKCmlubGluZSBuc1hQ
SURMU3RyaW5nOjpHZXR0ZXJDb3BpZXMKZ2V0dGVyX0NvcGllcyhuc1hQSURMU3RyaW5nJiBhWFBJ
RExTdHJpbmcpCnsKICAgIHJldHVybiBuc1hQSURMU3RyaW5nOjpHZXR0ZXJDb3BpZXMoYVhQSURM
U3RyaW5nKTsKfQoKCgoKCmlubGluZSBuc1hQSURMU3RyaW5nOjpHZXR0ZXJTaGFyZXMKZ2V0dGVy
X1NoYXJlcyhuc1hQSURMU3RyaW5nJiBhWFBJRExTdHJpbmcpCnsKICAgIHJldHVybiBuc1hQSURM
U3RyaW5nOjpHZXR0ZXJTaGFyZXMoYVhQSURMU3RyaW5nKTsKfQoKCgppbmxpbmUKUFJCb29sCm9w
ZXJhdG9yPT0oY29uc3QgUFJVbmljaGFyKiBsaHMsIGNvbnN0IG5zWFBJRExTdHJpbmcmIHJocykK
ewogICAgcmV0dXJuIGxocyA9PSBzdGF0aWNfY2FzdDwgY29uc3QgUFJVbmljaGFyKiA+KHJocyk7
Cn0KCmlubGluZQpQUkJvb2wKb3BlcmF0b3I9PShjb25zdCBuc1hQSURMU3RyaW5nJiBsaHMsIGNv
bnN0IFBSVW5pY2hhciogcmhzKQp7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IGNvbnN0IFBSVW5p
Y2hhciogPihsaHMpID09IHJoczsKfQojIDI1MSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zWFBJRExT
dHJpbmcuaCIKY2xhc3MgbnNYUElETENTdHJpbmcgewpwcml2YXRlOgogICAgY2hhciogbUJ1ZjsK
ICAgIFBSQm9vbCBtQnVmT3duZXI7CgogICAgY2hhcioqIFN0YXJ0QXNzaWdubWVudEJ5VmFsdWUo
KTsKICAgIGNvbnN0IGNoYXIqKiBTdGFydEFzc2lnbm1lbnRCeVJlZmVyZW5jZSgpOwoKcHVibGlj
OgoKCgogICAgbnNYUElETENTdHJpbmcoKSA6IG1CdWYoMCksIG1CdWZPd25lcigwKSB7fQoKICAg
IH5uc1hQSURMQ1N0cmluZygpOwoKCgoKCiAgICBuc1hQSURMQ1N0cmluZyYgb3BlcmF0b3I9KGNv
bnN0IGNoYXIqIGFTdHJpbmcpOwoKCgoKICAgIG9wZXJhdG9yIGNvbnN0IGNoYXIqKCkgY29uc3Qg
eyByZXR1cm4gZ2V0KCk7IH0KCgoKCiAgICBjb25zdCBjaGFyKiBnZXQoKSBjb25zdCB7IHJldHVy
biBtQnVmOyB9CgoKCgoKICAgIHN0YXRpYyBjaGFyKiBDb3B5KGNvbnN0IGNoYXIqIGFTdHJpbmcp
OwoKCgoKICAgIGNsYXNzIEdldHRlckNvcGllcyB7CiAgICBwcml2YXRlOgogICAgICAgIG5zWFBJ
RExDU3RyaW5nJiBtWFBJRExTdHJpbmc7CgogICAgcHVibGljOgogICAgICAgIEdldHRlckNvcGll
cyhuc1hQSURMQ1N0cmluZyYgYVhQSURMU3RyaW5nKQogICAgICAgICAgICA6IG1YUElETFN0cmlu
ZyhhWFBJRExTdHJpbmcpIHt9CgogICAgICAgIG9wZXJhdG9yIGNoYXIqKigpIHsKICAgICAgICAg
ICAgcmV0dXJuIG1YUElETFN0cmluZy5TdGFydEFzc2lnbm1lbnRCeVZhbHVlKCk7CiAgICAgICAg
fQoKICAgICAgICBmcmllbmQgR2V0dGVyQ29waWVzIGdldHRlcl9Db3BpZXMobnNYUElETENTdHJp
bmcmIGFYUElETFN0cmluZyk7CiAgICB9OwoKICAgIGZyaWVuZCBjbGFzcyBHZXR0ZXJDb3BpZXM7
CgoKCgogICAgY2xhc3MgR2V0dGVyU2hhcmVzIHsKICAgIHByaXZhdGU6CiAgICAgICAgbnNYUElE
TENTdHJpbmcmIG1YUElETFN0cmluZzsKCiAgICBwdWJsaWM6CiAgICAgICAgR2V0dGVyU2hhcmVz
KG5zWFBJRExDU3RyaW5nJiBhWFBJRExTdHJpbmcpCiAgICAgICAgICAgIDogbVhQSURMU3RyaW5n
KGFYUElETFN0cmluZykge30KCiAgICAgICAgb3BlcmF0b3IgY29uc3QgY2hhcioqKCkgewogICAg
ICAgICAgICByZXR1cm4gbVhQSURMU3RyaW5nLlN0YXJ0QXNzaWdubWVudEJ5UmVmZXJlbmNlKCk7
CiAgICAgICAgfQoKICAgICAgICBmcmllbmQgR2V0dGVyU2hhcmVzIGdldHRlcl9TaGFyZXMobnNY
UElETENTdHJpbmcmIGFYUElETFN0cmluZyk7CiAgICB9OwoKICAgIGZyaWVuZCBjbGFzcyBHZXR0
ZXJTaGFyZXM7Cgpwcml2YXRlOgoKICAgIG5zWFBJRExDU3RyaW5nKG5zWFBJRExDU3RyaW5nJiAp
IHt9CiAgICB2b2lkIG9wZXJhdG9yPShuc1hQSURMQ1N0cmluZyYgKSB7fQp9OwoKCgoKCmlubGlu
ZSBuc1hQSURMQ1N0cmluZzo6R2V0dGVyQ29waWVzCmdldHRlcl9Db3BpZXMobnNYUElETENTdHJp
bmcmIGFYUElETFN0cmluZykKewogICAgcmV0dXJuIG5zWFBJRExDU3RyaW5nOjpHZXR0ZXJDb3Bp
ZXMoYVhQSURMU3RyaW5nKTsKfQoKCgoKCgppbmxpbmUgbnNYUElETENTdHJpbmc6OkdldHRlclNo
YXJlcwpnZXR0ZXJfU2hhcmVzKG5zWFBJRExDU3RyaW5nJiBhWFBJRExTdHJpbmcpCnsKICAgIHJl
dHVybiBuc1hQSURMQ1N0cmluZzo6R2V0dGVyU2hhcmVzKGFYUElETFN0cmluZyk7Cn0KCgppbmxp
bmUKUFJCb29sCm9wZXJhdG9yPT0oY29uc3QgY2hhciogbGhzLCBjb25zdCBuc1hQSURMQ1N0cmlu
ZyYgcmhzKQp7CiAgICByZXR1cm4gbGhzID09IHN0YXRpY19jYXN0PCBjb25zdCBjaGFyKiA+KHJo
cyk7Cn0KCmlubGluZQpQUkJvb2wKb3BlcmF0b3I9PShjb25zdCBuc1hQSURMQ1N0cmluZyYgbGhz
LCBjb25zdCBjaGFyKiByaHMpCnsKICAgIHJldHVybiBzdGF0aWNfY2FzdDwgY29uc3QgY2hhciog
PihsaHMpID09IHJoczsKfQojIDQwICJuc1NvZnR3YXJlVXBkYXRlLmNwcCIgMgojIDEgIi4uLy4u
L2Rpc3QvaW5jbHVkZS9OU1JlZy5oIiAxCiMgMjkgIi4uLy4uL2Rpc3QvaW5jbHVkZS9OU1JlZy5o
Igp0eXBlZGVmIHZvaWQgKCpucl9SZWdQYWNrQ2FsbGJhY2tGdW5jKSAodm9pZCAqdXNlckRhdGEs
IGludDMyIGJ5dGVzLCBpbnQzMiB0b3RhbEJ5dGVzKTsKCnR5cGVkZWYgaW50MzIgUkVHRVJSOwp0
eXBlZGVmIGludDMyIFJLRVk7CnR5cGVkZWYgdWludDMyIFJFR0VOVU07CnR5cGVkZWYgdm9pZCAq
IEhSRUc7Cgp0eXBlZGVmIHN0cnVjdCBfcmVnaW5mbwp7CiAgIHVpbnQxNiBzaXplOwogICB1aW50
MTYgZW50cnlUeXBlOwogICB1aW50MzIgZW50cnlMZW5ndGg7Cn0gUkVHSU5GTzsKIyAxMjIgIi4u
Ly4uL2Rpc3QvaW5jbHVkZS9OU1JlZy5oIgpleHRlcm4gIkMiIHsKIyAxNDMgIi4uLy4uL2Rpc3Qv
aW5jbHVkZS9OU1JlZy5oIgppbnQgTlJfUmVnU2V0QnVmZmVyU2l6ZSgKICAgICAgICAgSFJFRyBo
UmVnLAogICAgICAgICBpbnQgYnVmc2l6ZQogICAgICAgKTsKIyAxNjAgIi4uLy4uL2Rpc3QvaW5j
bHVkZS9OU1JlZy5oIgpSRUdFUlIgTlJfUmVnT3BlbigKICAgICAgICAgY2hhciAqZmlsZW5hbWUs
CiAgICAgICAgIEhSRUcgKmhSZWcKICAgICAgICk7CiMgMTc1ICIuLi8uLi9kaXN0L2luY2x1ZGUv
TlNSZWcuaCIKUkVHRVJSIE5SX1JlZ0Nsb3NlKAogICAgICAgICBIUkVHIGhSZWcKICAgICAgICk7
CiMgMTg4ICIuLi8uLi9kaXN0L2luY2x1ZGUvTlNSZWcuaCIKUkVHRVJSIE5SX1JlZ0ZsdXNoKAog
ICAgICAgICBIUkVHIGhSZWcKICAgICAgICk7CiMgMjAzICIuLi8uLi9kaXN0L2luY2x1ZGUvTlNS
ZWcuaCIKUkVHRVJSIE5SX1JlZ0lzV3JpdGFibGUoCiAgICAgICAgIEhSRUcgaFJlZwogICAgICAg
KTsKClJFR0VSUiBOUl9SZWdQYWNrKAogICAgICAgICBIUkVHIGhSZWcsCiAgICAgICAgIHZvaWQg
KnVzZXJEYXRhLAogICAgICAgICBucl9SZWdQYWNrQ2FsbGJhY2tGdW5jIGZuCiAgICAgICApOwoj
IDIyNiAiLi4vLi4vZGlzdC9pbmNsdWRlL05TUmVnLmgiClJFR0VSUiBOUl9SZWdTZXRVc2VybmFt
ZSgKICAgICAgICAgY29uc3QgY2hhciAqbmFtZQogICAgICAgKTsKIyAyNDIgIi4uLy4uL2Rpc3Qv
aW5jbHVkZS9OU1JlZy5oIgpSRUdFUlIgTlJfUmVnR2V0VW5pcXVlTmFtZSgKICAgICAgICAgSFJF
RyBoUmVnLAogICAgICAgICBjaGFyKiBvdXRidWYsCiAgICAgICAgIHVpbnQzMiBidWZsZW4KICAg
ICAgICk7CgoKCgoKClJFR0VSUiBOUl9SZWdHZXRVc2VybmFtZSgKICAgICAgICAgY2hhciAqKm5h
bWUKICAgICAgICk7CiMgMjgxICIuLi8uLi9kaXN0L2luY2x1ZGUvTlNSZWcuaCIKUkVHRVJSIE5S
X1JlZ0FkZEtleSgKICAgICAgICAgSFJFRyBoUmVnLAogICAgICAgICBSS0VZIGtleSwKICAgICAg
ICAgY2hhciAqcGF0aCwKICAgICAgICAgUktFWSAqbmV3S2V5CiAgICAgICApOwojIDMwNCAiLi4v
Li4vZGlzdC9pbmNsdWRlL05TUmVnLmgiClJFR0VSUiBOUl9SZWdBZGRLZXlSYXcoCiAgICAgICAg
IEhSRUcgaFJlZywKICAgICAgICAgUktFWSBrZXksCiAgICAgICAgIGNoYXIgKmtleW5hbWUsCiAg
ICAgICAgIFJLRVkgKm5ld0tleQogICAgICAgKTsKIyAzMjYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9O
U1JlZy5oIgpSRUdFUlIgTlJfUmVnRGVsZXRlS2V5KAogICAgICAgICBIUkVHIGhSZWcsCiAgICAg
ICAgIFJLRVkga2V5LAogICAgICAgICBjaGFyICpwYXRoCiAgICAgICApOwojIDM0NSAiLi4vLi4v
ZGlzdC9pbmNsdWRlL05TUmVnLmgiClJFR0VSUiBOUl9SZWdEZWxldGVLZXlSYXcoCiAgICAgICAg
IEhSRUcgaFJlZywKICAgICAgICAgUktFWSBrZXksCiAgICAgICAgIGNoYXIgKmtleW5hbWUKICAg
ICAgICk7CiMgMzYzICIuLi8uLi9kaXN0L2luY2x1ZGUvTlNSZWcuaCIKUkVHRVJSIE5SX1JlZ0dl
dEtleSgKICAgICAgICAgSFJFRyBoUmVnLAogICAgICAgICBSS0VZIGtleSwKICAgICAgICAgY2hh
ciAqcGF0aCwKICAgICAgICAgUktFWSAqcmVzdWx0CiAgICAgICApOwojIDM4MiAiLi4vLi4vZGlz
dC9pbmNsdWRlL05TUmVnLmgiClJFR0VSUiBOUl9SZWdHZXRLZXlSYXcoCiAgICAgICAgIEhSRUcg
aFJlZywKICAgICAgICAgUktFWSBrZXksCiAgICAgICAgIGNoYXIgKmtleW5hbWUsCiAgICAgICAg
IFJLRVkgKnJlc3VsdAogICAgICAgKTsKIyA0MDcgIi4uLy4uL2Rpc3QvaW5jbHVkZS9OU1JlZy5o
IgpSRUdFUlIgTlJfUmVnRW51bVN1YmtleXMoCiAgICAgICAgIEhSRUcgaFJlZywKICAgICAgICAg
UktFWSBrZXksCiAgICAgICAgIFJFR0VOVU0gKnN0YXRlLAogICAgICAgICBjaGFyICpidWZmZXIs
CiAgICAgICAgIHVpbnQzMiBidWZzaXplLAogICAgICAgICB1aW50MzIgc3R5bGUKICAgICAgICk7
CiMgNDM0ICIuLi8uLi9kaXN0L2luY2x1ZGUvTlNSZWcuaCIKUkVHRVJSIE5SX1JlZ0dldEVudHJ5
SW5mbygKICAgICAgICAgSFJFRyBoUmVnLAogICAgICAgICBSS0VZIGtleSwKICAgICAgICAgY2hh
ciAqbmFtZSwKICAgICAgICAgUkVHSU5GTyAqaW5mbwogICAgICAgKTsKIyA0NTQgIi4uLy4uL2Rp
c3QvaW5jbHVkZS9OU1JlZy5oIgpSRUdFUlIgTlJfUmVnR2V0RW50cnlTdHJpbmcoCiAgICAgICAg
IEhSRUcgaFJlZywKICAgICAgICAgUktFWSBrZXksCiAgICAgICAgIGNoYXIgKm5hbWUsCiAgICAg
ICAgIGNoYXIgKmJ1ZmZlciwKICAgICAgICAgdWludDMyIGJ1ZnNpemUKICAgICAgICk7CiMgNDc1
ICIuLi8uLi9kaXN0L2luY2x1ZGUvTlNSZWcuaCIKUkVHRVJSIE5SX1JlZ0dldEVudHJ5KAogICAg
ICAgICBIUkVHIGhSZWcsCiAgICAgICAgIFJLRVkga2V5LAogICAgICAgICBjaGFyICpuYW1lLAog
ICAgICAgICB2b2lkICpidWZmZXIsCiAgICAgICAgIHVpbnQzMiAqc2l6ZQogICAgICAgKTsKIyA0
OTYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9OU1JlZy5oIgpSRUdFUlIgTlJfUmVnU2V0RW50cnlTdHJp
bmcoCiAgICAgICAgIEhSRUcgaFJlZywKICAgICAgICAgUktFWSBrZXksCiAgICAgICAgIGNoYXIg
Km5hbWUsCiAgICAgICAgIGNoYXIgKmJ1ZmZlcgogICAgICAgKTsKIyA1MTcgIi4uLy4uL2Rpc3Qv
aW5jbHVkZS9OU1JlZy5oIgpSRUdFUlIgTlJfUmVnU2V0RW50cnkoCiAgICAgICAgIEhSRUcgaFJl
ZywKICAgICAgICAgUktFWSBrZXksCiAgICAgICAgIGNoYXIgKm5hbWUsCiAgICAgICAgIHVpbnQx
NiB0eXBlLAogICAgICAgICB2b2lkICpidWZmZXIsCiAgICAgICAgIHVpbnQzMiBzaXplCiAgICAg
ICApOwojIDUzNiAiLi4vLi4vZGlzdC9pbmNsdWRlL05TUmVnLmgiClJFR0VSUiBOUl9SZWdEZWxl
dGVFbnRyeSgKICAgICAgICAgSFJFRyBoUmVnLAogICAgICAgICBSS0VZIGtleSwKICAgICAgICAg
Y2hhciAqbmFtZQogICAgICAgKTsKIyA1NTYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9OU1JlZy5oIgpS
RUdFUlIgTlJfUmVnRW51bUVudHJpZXMoCiAgICAgICAgIEhSRUcgaFJlZywKICAgICAgICAgUktF
WSBrZXksCiAgICAgICAgIFJFR0VOVU0gKnN0YXRlLAogICAgICAgICBjaGFyICpidWZmZXIsCiAg
ICAgICAgIHVpbnQzMiBidWZzaXplLAogICAgICAgICBSRUdJTkZPICppbmZvCiAgICAgICApOwoK
CnZvaWQgTlJfU2h1dGRvd25SZWdpc3RyeSh2b2lkKTsKUkVHRVJSIE5SX1N0YXJ0dXBSZWdpc3Ry
eSh2b2lkKTsKCgp9CiMgNDEgIm5zU29mdHdhcmVVcGRhdGUuY3BwIiAyCiMgMSAiLi4vLi4vZGlz
dC9pbmNsdWRlL1ZlclJlZy5oIiAxCiMgMzAgIi4uLy4uL2Rpc3QvaW5jbHVkZS9WZXJSZWcuaCIK
IyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvTlNSZWcuaCIgMQojIDMxICIuLi8uLi9kaXN0L2luY2x1
ZGUvVmVyUmVnLmgiIDIKCnR5cGVkZWYgc3RydWN0IF92ZXJzaW9uCnsKICAgaW50MzIgbWFqb3I7
CiAgIGludDMyIG1pbm9yOwogICBpbnQzMiByZWxlYXNlOwogICBpbnQzMiBidWlsZDsKICAgaW50
MzIgY2hlY2s7Cn0gVkVSU0lPTjsKCgoKCgpleHRlcm4gIkMiIHsKCgoKCgoKUkVHRVJSIFZSX0Ny
ZWF0ZVJlZ2lzdHJ5KGNoYXIgKmluc3RhbGxhdGlvbiwgY2hhciAqcHJvZ3JhbVBhdGgsIGNoYXIg
KnZlcnNpb25TdHIpOwpSRUdFUlIgVlJfU2V0UmVnRGlyZWN0b3J5KGNvbnN0IGNoYXIgKnBhdGgp
OwpSRUdFUlIgVlJfUGFja1JlZ2lzdHJ5KHZvaWQgKnVzZXJEYXRhLCBucl9SZWdQYWNrQ2FsbGJh
Y2tGdW5jIHBkQ2FsbGJhY2tGdW5jdGlvbik7ClJFR0VSUiBWUl9DbG9zZSh2b2lkKTsKCgpSRUdF
UlIgVlJfSW5zdGFsbChjaGFyICpjb21wb25lbnRfcGF0aCwgY2hhciAqZmlsZXBhdGgsIGNoYXIg
KnZlcnNpb24sIGludCBiRGlyZWN0b3J5KTsKUkVHRVJSIFZSX1JlbW92ZShjaGFyICpjb21wb25l
bnRfcGF0aCk7ClJFR0VSUiBWUl9JblJlZ2lzdHJ5KGNoYXIgKnBhdGgpOwpSRUdFUlIgVlJfVmFs
aWRhdGVDb21wb25lbnQoY2hhciAqcGF0aCk7ClJFR0VSUiBWUl9FbnVtKGNoYXIgKmNvbXBvbmVu
dF9wYXRoLCBSRUdFTlVNICpzdGF0ZSwgY2hhciAqYnVmZmVyLCB1aW50MzIgYnVmbGVuKTsKCgpS
RUdFUlIgVlJfR2V0VmVyc2lvbihjaGFyICpjb21wb25lbnRfcGF0aCwgVkVSU0lPTiAqcmVzdWx0
KTsKUkVHRVJSIFZSX0dldFBhdGgoY2hhciAqY29tcG9uZW50X3BhdGgsIHVpbnQzMiBzaXplYnVm
LCBjaGFyICpidWYpOwpSRUdFUlIgVlJfU2V0UmVmQ291bnQoY2hhciAqY29tcG9uZW50X3BhdGgs
IGludCByZWZjb3VudCk7ClJFR0VSUiBWUl9HZXRSZWZDb3VudChjaGFyICpjb21wb25lbnRfcGF0
aCwgaW50ICpyZXN1bHQpOwpSRUdFUlIgVlJfR2V0RGVmYXVsdERpcmVjdG9yeShjaGFyICpjb21w
b25lbnRfcGF0aCwgdWludDMyIHNpemVidWYsIGNoYXIgKmJ1Zik7ClJFR0VSUiBWUl9TZXREZWZh
dWx0RGlyZWN0b3J5KGNoYXIgKmNvbXBvbmVudF9wYXRoLCBjaGFyICpkaXJlY3RvcnkpOwoKClJF
R0VSUiBWUl9Vbmluc3RhbGxDcmVhdGVOb2RlKGNoYXIgKnJlZ1BhY2thZ2VOYW1lLCBjaGFyICp1
c2VyUGFja2FnZU5hbWUpOwpSRUdFUlIgVlJfVW5pbnN0YWxsQWRkRmlsZVRvTGlzdChjaGFyICpy
ZWdQYWNrYWdlTmFtZSwgY2hhciAqdnJOYW1lKTsKUkVHRVJSIFZSX1VuaW5zdGFsbEZpbGVFeGlz
dHNJbkxpc3QoY2hhciAqcmVnUGFja2FnZU5hbWUsIGNoYXIgKnZyTmFtZSk7ClJFR0VSUiBWUl9V
bmluc3RhbGxFbnVtU2hhcmVkRmlsZXMoY2hhciAqY29tcG9uZW50X3BhdGgsIFJFR0VOVU0gKnN0
YXRlLCBjaGFyICpidWZmZXIsIHVpbnQzMiBidWZsZW4pOwpSRUdFUlIgVlJfVW5pbnN0YWxsRGVs
ZXRlRmlsZUZyb21MaXN0KGNoYXIgKmNvbXBvbmVudF9wYXRoLCBjaGFyICp2ck5hbWUpOwpSRUdF
UlIgVlJfVW5pbnN0YWxsRGVsZXRlU2hhcmVkRmlsZXNLZXkoY2hhciAqcmVnUGFja2FnZU5hbWUp
OwpSRUdFUlIgVlJfVW5pbnN0YWxsRGVzdHJveShjaGFyICpyZWdQYWNrYWdlTmFtZSk7ClJFR0VS
UiBWUl9FbnVtVW5pbnN0YWxsKFJFR0VOVU0gKnN0YXRlLCBjaGFyKiB1c2VyUGFja2FnZU5hbWUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyIGxlbjEsIGNoYXIqcmVn
UGFja2FnZU5hbWUsIGludDMyIGxlbjIsIFBSQm9vbCBiU2hhcmVkTGlzdCk7ClJFR0VSUiBWUl9H
ZXRVbmluc3RhbGxVc2VyTmFtZShjaGFyICpyZWdQYWNrYWdlTmFtZSwgY2hhciAqb3V0YnVmLCB1
aW50MzIgYnVmbGVuKTsKCn0KIyA0MiAibnNTb2Z0d2FyZVVwZGF0ZS5jcHAiIDIKIyAxICIuLi8u
Li9kaXN0L2luY2x1ZGUvbnNJRGlyZWN0b3J5U2VydmljZS5oIiAxCiMgMzMgIi4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lEaXJlY3RvcnlTZXJ2aWNlLmgiCmNsYXNzIG5zSURpcmVjdG9yeVNlcnZpY2VQ
cm92aWRlciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBu
c0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhiYmY4Y2FiMCwgMHhk
NDNhLCAweDExZDMsIHsgMHg4YywgMHhjMiwgMHgwMCwgMHg2MCwgMHg5NywgMHg5MiwgMHgyNywg
MHg4YyB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZpbGUoY29uc3Qg
Y2hhciAqcHJvcCwgUFJCb29sICpwZXJzaXN0YW50LCBuc0lGaWxlICoqX3JldHZhbCkgPSAwOwoK
fTsKIyAxMDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lEaXJlY3RvcnlTZXJ2aWNlLmgiCmNsYXNz
IG5zSURpcmVjdG9yeVNlcnZpY2UgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBz
dGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4
NTdhNjZhNjAsIDB4ZDQzYSwgMHgxMWQzLCB7IDB4OGMsIDB4YzIsIDB4MDAsIDB4NjAsIDB4OTcs
IDB4OTIsIDB4MjcsIDB4OGMgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJ
bml0KHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVnaXN0ZXJQcm92aWRlcihuc0lE
aXJlY3RvcnlTZXJ2aWNlUHJvdmlkZXIgKnByb3YpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg
VW5yZWdpc3RlclByb3ZpZGVyKG5zSURpcmVjdG9yeVNlcnZpY2VQcm92aWRlciAqcHJvdikgPSAw
OwoKfTsKIyA0MyAibnNTb2Z0d2FyZVVwZGF0ZS5jcHAiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1
ZGUvbnNEaXJlY3RvcnlTZXJ2aWNlRGVmcy5oIiAxCiMgNDQgIm5zU29mdHdhcmVVcGRhdGUuY3Bw
IiAyCgojIDEgIm5zSW5zdGFsbC5oIiAxCiMgMzAgIm5zSW5zdGFsbC5oIgojIDEgIi4uLy4uL2Rp
c3QvaW5jbHVkZS9uc2NvcmUuaCIgMQojIDMxICJuc0luc3RhbGwuaCIgMgojIDEgIi4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMzIgIm5zSW5zdGFsbC5oIiAyCgojIDEgIi4u
Ly4uL2Rpc3QvaW5jbHVkZS9qc2FwaS5oIiAxCiMgNDAgIi4uLy4uL2Rpc3QvaW5jbHVkZS9qc2Fw
aS5oIgojIDEgIi91c3IvZ2NjLXByZTMuMC9saWIvZ2NjLWxpYi9pYTY0LWhwLWxpbnV4LzMuMC9p
bmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0MSAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzYXBpLmgiIDIK
IyAxICIvdXNyL2djYy1wcmUzLjAvbGliL2djYy1saWIvaWE2NC1ocC1saW51eC8zLjAvaW5jbHVk
ZS9zdGRpby5oIiAxIDMKIyA0MiAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzYXBpLmgiIDIKIyAxICIu
Li8uLi9kaXN0L2luY2x1ZGUvanNwdWJ0ZC5oIiAxCiMgNDAgIi4uLy4uL2Rpc3QvaW5jbHVkZS9q
c3B1YnRkLmgiCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzdHlwZXMuaCIgMQojIDYzICIuLi8u
Li9kaXN0L2luY2x1ZGUvanN0eXBlcy5oIgojIDEgIi91c3IvZ2NjLXByZTMuMC9saWIvZ2NjLWxp
Yi9pYTY0LWhwLWxpbnV4LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA2NCAiLi4vLi4vZGlz
dC9pbmNsdWRlL2pzdHlwZXMuaCIgMgojIDIzNSAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzdHlwZXMu
aCIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvanNhdXRvY2ZnLmgiIDEKIyAyMzYgIi4uLy4uL2Rp
c3QvaW5jbHVkZS9qc3R5cGVzLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvanNvc2RlcC5o
IiAxCiMgNDIgIi4uLy4uL2Rpc3QvaW5jbHVkZS9qc29zZGVwLmgiCiMgMSAiLi4vLi4vZGlzdC9p
bmNsdWRlL3BsYXRmb3JtLmgiIDEKIyA0MyAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzb3NkZXAuaCIg
MgojIDIzNyAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzdHlwZXMuaCIgMgoKCgoKZXh0ZXJuICJDIiB7
CiMgMjUxICIuLi8uLi9kaXN0L2luY2x1ZGUvanN0eXBlcy5oIgp0eXBlZGVmIHVuc2lnbmVkIGNo
YXIgSlNVaW50ODsKdHlwZWRlZiBzaWduZWQgY2hhciBKU0ludDg7CiMgMjY0ICIuLi8uLi9kaXN0
L2luY2x1ZGUvanN0eXBlcy5oIgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IEpTVWludDE2Owp0eXBl
ZGVmIHNob3J0IEpTSW50MTY7CiMgMjc3ICIuLi8uLi9kaXN0L2luY2x1ZGUvanN0eXBlcy5oIgp0
eXBlZGVmIHVuc2lnbmVkIGludCBKU1VpbnQzMjsKdHlwZWRlZiBpbnQgSlNJbnQzMjsKIyAzMDIg
Ii4uLy4uL2Rpc3QvaW5jbHVkZS9qc3R5cGVzLmgiCnR5cGVkZWYgbG9uZyBKU0ludDY0Owp0eXBl
ZGVmIHVuc2lnbmVkIGxvbmcgSlNVaW50NjQ7CiMgMzM1ICIuLi8uLi9kaXN0L2luY2x1ZGUvanN0
eXBlcy5oIgp0eXBlZGVmIGludCBKU0ludG47CnR5cGVkZWYgdW5zaWduZWQgaW50IEpTVWludG47
CiMgMzQ2ICIuLi8uLi9kaXN0L2luY2x1ZGUvanN0eXBlcy5oIgp0eXBlZGVmIGRvdWJsZSBKU0Zs
b2F0NjQ7CgoKCgoKCnR5cGVkZWYgc2l6ZV90IEpTU2l6ZTsKCgoKCgoKCnR5cGVkZWYgcHRyZGlm
Zl90IEpTUHRyZGlmZjsKCgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBKU1VwdHJkaWZmOwoj
IDM3OSAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzdHlwZXMuaCIKdHlwZWRlZiBKU0ludG4gSlNCb29s
OwojIDM4OSAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzdHlwZXMuaCIKdHlwZWRlZiBKU1VpbnQ4IEpT
UGFja2VkQm9vbDsKCgoKCnR5cGVkZWYgbG9uZyBKU1dvcmQ7CnR5cGVkZWYgdW5zaWduZWQgbG9u
ZyBKU1V3b3JkOwoKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvanNvdHlwZXMuaCIgMQojIDM5OCAi
Li4vLi4vZGlzdC9pbmNsdWRlL2pzdHlwZXMuaCIgMgoKfQojIDQxICIuLi8uLi9kaXN0L2luY2x1
ZGUvanNwdWJ0ZC5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzY29tcGF0LmgiIDEKIyA0
NCAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzY29tcGF0LmgiCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRl
L2pzdHlwZXMuaCIgMQojIDQ1ICIuLi8uLi9kaXN0L2luY2x1ZGUvanNjb21wYXQuaCIgMgojIDEg
Ii4uLy4uL2Rpc3QvaW5jbHVkZS9qc2xvbmcuaCIgMQojIDQ2ICIuLi8uLi9kaXN0L2luY2x1ZGUv
anNsb25nLmgiCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzdHlwZXMuaCIgMQojIDQ3ICIuLi8u
Li9kaXN0L2luY2x1ZGUvanNsb25nLmgiIDIKCmV4dGVybiAiQyIgewojIDY2ICIuLi8uLi9kaXN0
L2luY2x1ZGUvanNsb25nLmgiCmV4dGVybiBKU0ludDY0IEpTTExfTWF4SW50KHZvaWQpOwpleHRl
cm4gSlNJbnQ2NCBKU0xMX01pbkludCh2b2lkKTsKZXh0ZXJuIEpTSW50NjQgSlNMTF9aZXJvKHZv
aWQpOwojIDQzMSAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzbG9uZy5oIgp9CiMgNDYgIi4uLy4uL2Rp
c3QvaW5jbHVkZS9qc2NvbXBhdC5oIiAyCgp0eXBlZGVmIEpTSW50biBpbnROOwp0eXBlZGVmIEpT
VWludG4gdWludE47CnR5cGVkZWYgSlNVd29yZCBqc3V3b3JkOwp0eXBlZGVmIEpTV29yZCBqc3dv
cmQ7CnR5cGVkZWYgZmxvYXQgZmxvYXQzMjsKIyA0MiAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzcHVi
dGQuaCIgMgoKZXh0ZXJuICJDIiB7CgoKdHlwZWRlZiB1aW50MTYganNjaGFyOwp0eXBlZGVmIGlu
dDMyIGpzaW50Owp0eXBlZGVmIHVpbnQzMiBqc3VpbnQ7CnR5cGVkZWYgZmxvYXQ2NCBqc2RvdWJs
ZTsKdHlwZWRlZiBqc3dvcmQganN2YWw7CnR5cGVkZWYganN3b3JkIGpzaWQ7CnR5cGVkZWYgaW50
MzIganNyZWZjb3VudDsKCnR5cGVkZWYgZW51bSBKU1ZlcnNpb24gewogICAgSlNWRVJTSU9OXzFf
MCA9IDEwMCwKICAgIEpTVkVSU0lPTl8xXzEgPSAxMTAsCiAgICBKU1ZFUlNJT05fMV8yID0gMTIw
LAogICAgSlNWRVJTSU9OXzFfMyA9IDEzMCwKICAgIEpTVkVSU0lPTl8xXzQgPSAxNDAsCiAgICBK
U1ZFUlNJT05fMV81ID0gMTUwLAogICAgSlNWRVJTSU9OX0RFRkFVTFQgPSAwLAogICAgSlNWRVJT
SU9OX1VOS05PV04gPSAtMQp9IEpTVmVyc2lvbjsKCgoKCgp0eXBlZGVmIGVudW0gSlNUeXBlIHsK
ICAgIEpTVFlQRV9WT0lELAogICAgSlNUWVBFX09CSkVDVCwKICAgIEpTVFlQRV9GVU5DVElPTiwK
ICAgIEpTVFlQRV9TVFJJTkcsCiAgICBKU1RZUEVfTlVNQkVSLAogICAgSlNUWVBFX0JPT0xFQU4s
CiAgICBKU1RZUEVfTElNSVQKfSBKU1R5cGU7CgoKdHlwZWRlZiBlbnVtIEpTQWNjZXNzTW9kZSB7
CiAgICBKU0FDQ19QUk9UTywKICAgIEpTQUNDX1BBUkVOVCwKICAgIEpTQUNDX0lNUE9SVCwKICAg
IEpTQUNDX1dBVENILAogICAgSlNBQ0NfTElNSVQKfSBKU0FjY2Vzc01vZGU7CgoKCgoKdHlwZWRl
ZiBlbnVtIEpTSXRlcmF0ZU9wIHsKICAgIEpTRU5VTUVSQVRFX0lOSVQsCiAgICBKU0VOVU1FUkFU
RV9ORVhULAogICAgSlNFTlVNRVJBVEVfREVTVFJPWQp9IEpTSXRlcmF0ZU9wOwoKCnR5cGVkZWYg
c3RydWN0IEpTQ2xhc3MgSlNDbGFzczsKdHlwZWRlZiBzdHJ1Y3QgSlNDb25zdERvdWJsZVNwZWMg
SlNDb25zdERvdWJsZVNwZWM7CnR5cGVkZWYgc3RydWN0IEpTQ29udGV4dCBKU0NvbnRleHQ7CnR5
cGVkZWYgc3RydWN0IEpTRXJyb3JSZXBvcnQgSlNFcnJvclJlcG9ydDsKdHlwZWRlZiBzdHJ1Y3Qg
SlNGdW5jdGlvbiBKU0Z1bmN0aW9uOwp0eXBlZGVmIHN0cnVjdCBKU0Z1bmN0aW9uU3BlYyBKU0Z1
bmN0aW9uU3BlYzsKdHlwZWRlZiBzdHJ1Y3QgSlNJZEFycmF5IEpTSWRBcnJheTsKdHlwZWRlZiBz
dHJ1Y3QgSlNQcm9wZXJ0eSBKU1Byb3BlcnR5Owp0eXBlZGVmIHN0cnVjdCBKU1Byb3BlcnR5U3Bl
YyBKU1Byb3BlcnR5U3BlYzsKdHlwZWRlZiBzdHJ1Y3QgSlNPYmplY3QgSlNPYmplY3Q7CnR5cGVk
ZWYgc3RydWN0IEpTT2JqZWN0TWFwIEpTT2JqZWN0TWFwOwp0eXBlZGVmIHN0cnVjdCBKU09iamVj
dE9wcyBKU09iamVjdE9wczsKdHlwZWRlZiBzdHJ1Y3QgSlNSdW50aW1lIEpTUnVudGltZTsKdHlw
ZWRlZiBzdHJ1Y3QgSlNSdW50aW1lIEpTVGFza1N0YXRlOwp0eXBlZGVmIHN0cnVjdCBKU1Njcmlw
dCBKU1NjcmlwdDsKdHlwZWRlZiBzdHJ1Y3QgSlNTdHJpbmcgSlNTdHJpbmc7CnR5cGVkZWYgc3Ry
dWN0IEpTWERSU3RhdGUgSlNYRFJTdGF0ZTsKdHlwZWRlZiBzdHJ1Y3QgSlNFeGNlcHRpb25TdGF0
ZSBKU0V4Y2VwdGlvblN0YXRlOwp0eXBlZGVmIHN0cnVjdCBKU0xvY2FsZUNhbGxiYWNrcyBKU0xv
Y2FsZUNhbGxiYWNrczsKIyAxMjggIi4uLy4uL2Rpc3QvaW5jbHVkZS9qc3B1YnRkLmgiCnR5cGVk
ZWYgSlNCb29sCigqIEpTUHJvcGVydHlPcCkoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwg
anN2YWwgaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzdmFsICp2cCk7CiMg
MTU5ICIuLi8uLi9kaXN0L2luY2x1ZGUvanNwdWJ0ZC5oIgp0eXBlZGVmIEpTQm9vbAooKiBKU05l
d0VudW1lcmF0ZU9wKShKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSlNJdGVyYXRlT3AgZW51bV9vcCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpzdmFsICpzdGF0ZXAsIGpzaWQgKmlkcCk7CgoKCgoK
dHlwZWRlZiBKU0Jvb2wKKCogSlNFbnVtZXJhdGVPcCkoSlNDb250ZXh0ICpjeCwgSlNPYmplY3Qg
Km9iaik7CiMgMTgzICIuLi8uLi9kaXN0L2luY2x1ZGUvanNwdWJ0ZC5oIgp0eXBlZGVmIEpTQm9v
bAooKiBKU1Jlc29sdmVPcCkoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwganN2YWwgaWQp
OwojIDE5NiAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzcHVidGQuaCIKdHlwZWRlZiBKU0Jvb2wKKCog
SlNOZXdSZXNvbHZlT3ApKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnROIGZsYWdzLCBKU09iamVjdCAq
Km9ianApOwoKCgoKCnR5cGVkZWYgSlNCb29sCigqIEpTQ29udmVydE9wKShKU0NvbnRleHQgKmN4
LCBKU09iamVjdCAqb2JqLCBKU1R5cGUgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqc3ZhbCAqdnApOwoKCgoKCgp0eXBlZGVmIHZvaWQKKCogSlNGaW5hbGl6ZU9wKShKU0Nv
bnRleHQgKmN4LCBKU09iamVjdCAqb2JqKTsKCgoKCgp0eXBlZGVmIHZvaWQKKCogSlNTdHJpbmdG
aW5hbGl6ZU9wKShKU0NvbnRleHQgKmN4LCBKU1N0cmluZyAqc3RyKTsKIyAyNDIgIi4uLy4uL2Rp
c3QvaW5jbHVkZS9qc3B1YnRkLmgiCnR5cGVkZWYgSlNPYmplY3RPcHMgKgooKiBKU0dldE9iamVj
dE9wcykoSlNDb250ZXh0ICpjeCwgSlNDbGFzcyAqY2xhc3ApOwojIDI1NyAiLi4vLi4vZGlzdC9p
bmNsdWRlL2pzcHVidGQuaCIKdHlwZWRlZiBKU0Jvb2wKKCogSlNDaGVja0FjY2Vzc09wKShKU0Nv
bnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBqc3ZhbCBpZCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSlNBY2Nlc3NNb2RlIG1vZGUsIGpzdmFsICp2cCk7CgoKCgoKdHlwZWRl
ZiBKU0Jvb2wKKCogSlNYRFJPYmplY3RPcCkoSlNYRFJTdGF0ZSAqeGRyLCBKU09iamVjdCAqKm9i
anApOwoKCgoKCgp0eXBlZGVmIEpTQm9vbAooKiBKU0hhc0luc3RhbmNlT3ApKEpTQ29udGV4dCAq
Y3gsIEpTT2JqZWN0ICpvYmosIGpzdmFsIHYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEpTQm9vbCAqYnApOwojIDI5MCAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzcHVidGQuaCIK
dHlwZWRlZiB1aW50MzIKKCogSlNNYXJrT3ApKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmos
IHZvaWQgKmFyZyk7CiMgMzA4ICIuLi8uLi9kaXN0L2luY2x1ZGUvanNwdWJ0ZC5oIgp0eXBlZGVm
IEpTT2JqZWN0TWFwICoKKCogSlNOZXdPYmplY3RNYXBPcCkoSlNDb250ZXh0ICpjeCwganNyZWZj
b3VudCBucmVmcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0
T3BzICpvcHMsIEpTQ2xhc3MgKmNsYXNwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSlNPYmplY3QgKm9iaik7CgoKCgoKdHlwZWRlZiB2b2lkCigqIEpTT2JqZWN0TWFwT3Ap
KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0TWFwICptYXApOwojIDMzNyAiLi4vLi4vZGlzdC9pbmNs
dWRlL2pzcHVidGQuaCIKdHlwZWRlZiBKU0Jvb2wKKCogSlNMb29rdXBQcm9wT3ApKEpTQ29udGV4
dCAqY3gsIEpTT2JqZWN0ICpvYmosIGpzaWQgaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSlNPYmplY3QgKipvYmpwLCBKU1Byb3BlcnR5ICoqcHJvcHAKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICwgY29uc3QgY2hhciAqZmlsZSwgdWludE4gbGluZQoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiMgMzU3ICIuLi8uLi9kaXN0L2luY2x1
ZGUvanNwdWJ0ZC5oIgp0eXBlZGVmIEpTQm9vbAooKiBKU0RlZmluZVByb3BPcCkoSlNDb250ZXh0
ICpjeCwgSlNPYmplY3QgKm9iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
c2lkIGlkLCBqc3ZhbCB2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBK
U1Byb3BlcnR5T3AgZ2V0dGVyLCBKU1Byb3BlcnR5T3Agc2V0dGVyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVpbnROIGF0dHJzLCBKU1Byb3BlcnR5ICoqcHJvcHApOwojIDM3
MSAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzcHVidGQuaCIKdHlwZWRlZiBKU0Jvb2wKKCogSlNQcm9w
ZXJ0eUlkT3ApKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGpzaWQgaWQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAganN2YWwgKnZwKTsKCgoKCgoKCnR5cGVkZWYgSlNC
b29sCigqIEpTQXR0cmlidXRlc09wKShKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBqc2lk
IGlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTUHJvcGVydHkgKnByb3As
IHVpbnROICphdHRyc3ApOwoKCgoKCgp0eXBlZGVmIEpTQm9vbAooKiBKU0NoZWNrQWNjZXNzSWRP
cCkoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwganNpZCBpZCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBKU0FjY2Vzc01vZGUgbW9kZSwganN2YWwgKnZwLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnROICphdHRyc3ApOwoKCgoKCgp0
eXBlZGVmIEpTT2JqZWN0ICoKKCogSlNPYmplY3RPcCkoSlNDb250ZXh0ICpjeCwgSlNPYmplY3Qg
Km9iaik7CgoKCgoKCgp0eXBlZGVmIHZvaWQKKCogSlNQcm9wZXJ0eVJlZk9wKShKU0NvbnRleHQg
KmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBK
U1Byb3BlcnR5ICpwcm9wKTsKCgoKCgoKdHlwZWRlZiBKU0Jvb2wKKCogSlNTZXRPYmplY3RTbG90
T3ApKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdWludDMyIHNsb3QsIEpTT2JqZWN0ICpwb2JqKTsKIyA0MzUgIi4uLy4u
L2Rpc3QvaW5jbHVkZS9qc3B1YnRkLmgiCnR5cGVkZWYganN2YWwKKCogSlNHZXRSZXF1aXJlZFNs
b3RPcCkoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVpbnQzMiBzbG90KTsKCnR5cGVkZWYgdm9pZAooKiBKU1NldFJl
cXVpcmVkU2xvdE9wKShKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyIHNsb3QsIGpzdmFsIHYpOwoKCgp0eXBl
ZGVmIEpTQm9vbAooKiBKU05hdGl2ZSkoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgdWlu
dE4gYXJnYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc3ZhbCAqYXJndiwganN2YWwg
KnJ2YWwpOwoKCgp0eXBlZGVmIGVudW0gSlNHQ1N0YXR1cyB7CiAgICBKU0dDX0JFR0lOLAogICAg
SlNHQ19FTkQsCiAgICBKU0dDX01BUktfRU5ELAogICAgSlNHQ19GSU5BTElaRV9FTkQKfSBKU0dD
U3RhdHVzOwoKdHlwZWRlZiBKU0Jvb2wKKCogSlNHQ0NhbGxiYWNrKShKU0NvbnRleHQgKmN4LCBK
U0dDU3RhdHVzIHN0YXR1cyk7Cgp0eXBlZGVmIEpTQm9vbAooKiBKU0JyYW5jaENhbGxiYWNrKShK
U0NvbnRleHQgKmN4LCBKU1NjcmlwdCAqc2NyaXB0KTsKCnR5cGVkZWYgdm9pZAooKiBKU0Vycm9y
UmVwb3J0ZXIpKEpTQ29udGV4dCAqY3gsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEpTRXJyb3JSZXBvcnQgKnJlcG9ydCk7Cgp0eXBlZGVm
IHN0cnVjdCBKU0Vycm9yRm9ybWF0U3RyaW5nIHsKICAgIGNvbnN0IGNoYXIgKmZvcm1hdDsKICAg
IHVpbnROIGFyZ0NvdW50Owp9IEpTRXJyb3JGb3JtYXRTdHJpbmc7Cgp0eXBlZGVmIGNvbnN0IEpT
RXJyb3JGb3JtYXRTdHJpbmcgKgooKiBKU0Vycm9yQ2FsbGJhY2spKHZvaWQgKnVzZXJSZWYsIGNv
bnN0IGNoYXIgKmxvY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgdWludE4gZXJyb3JOdW1iZXIpOwoKCgoKdHlwZWRlZiBKU0Jvb2wKKCogSlNBcmd1bWVudEZv
cm1hdHRlcikoSlNDb250ZXh0ICpjeCwgY29uc3QgY2hhciAqZm9ybWF0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNCb29sIGZyb21KUywganN2YWwgKip2cHAsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0ICphcHApOwoKCnR5
cGVkZWYgSlNCb29sCigqIEpTTG9jYWxlVG9VcHBlckNhc2UpKEpTQ29udGV4dCAqY3gsIEpTU3Ry
aW5nICpzcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc3ZhbCAq
cnZhbCk7Cgp0eXBlZGVmIEpTQm9vbAooKiBKU0xvY2FsZVRvTG93ZXJDYXNlKShKU0NvbnRleHQg
KmN4LCBKU1N0cmluZyAqc3JjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAganN2YWwgKnJ2YWwpOwoKdHlwZWRlZiBKU0Jvb2wKKCogSlNMb2NhbGVDb21wYXJlKShKU0Nv
bnRleHQgKmN4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU1N0cmluZyAq
c3JjMSwgSlNTdHJpbmcgKnNyYzIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpzdmFsICpydmFsKTsKCn0KIyA0MyAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzYXBpLmgiIDIKCmV4
dGVybiAiQyIgewojIDE0NCAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzYXBpLmgiCmV4dGVybiBqc3Zh
bApKU19HZXROYU5WYWx1ZShKU0NvbnRleHQgKmN4KTsKCmV4dGVybiBqc3ZhbApKU19HZXROZWdh
dGl2ZUluZmluaXR5VmFsdWUoSlNDb250ZXh0ICpjeCk7CgpleHRlcm4ganN2YWwKSlNfR2V0UG9z
aXRpdmVJbmZpbml0eVZhbHVlKEpTQ29udGV4dCAqY3gpOwoKZXh0ZXJuIGpzdmFsCkpTX0dldEVt
cHR5U3RyaW5nVmFsdWUoSlNDb250ZXh0ICpjeCk7CiMgMTg5ICIuLi8uLi9kaXN0L2luY2x1ZGUv
anNhcGkuaCIKZXh0ZXJuIEpTQm9vbApKU19Db252ZXJ0QXJndW1lbnRzKEpTQ29udGV4dCAqY3gs
IHVpbnROIGFyZ2MsIGpzdmFsICphcmd2LCBjb25zdCBjaGFyICpmb3JtYXQsCiAgICAgICAgICAg
ICAgICAgICAgLi4uKTsKCgpleHRlcm4gSlNCb29sCkpTX0NvbnZlcnRBcmd1bWVudHNWQShKU0Nv
bnRleHQgKmN4LCB1aW50TiBhcmdjLCBqc3ZhbCAqYXJndiwKICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcCk7CiMgMjA5ICIuLi8uLi9kaXN0L2luY2x1
ZGUvanNhcGkuaCIKZXh0ZXJuIGpzdmFsICoKSlNfUHVzaEFyZ3VtZW50cyhKU0NvbnRleHQgKmN4
LCB2b2lkICoqbWFya3AsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKCgpleHRlcm4ganN2YWwg
KgpKU19QdXNoQXJndW1lbnRzVkEoSlNDb250ZXh0ICpjeCwgdm9pZCAqKm1hcmtwLCBjb25zdCBj
aGFyICpmb3JtYXQsIHZhX2xpc3QgYXApOwoKCmV4dGVybiB2b2lkCkpTX1BvcEFyZ3VtZW50cyhK
U0NvbnRleHQgKmN4LCB2b2lkICptYXJrKTsKIyAyNjEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9qc2Fw
aS5oIgpleHRlcm4gSlNCb29sCkpTX0FkZEFyZ3VtZW50Rm9ybWF0dGVyKEpTQ29udGV4dCAqY3gs
IGNvbnN0IGNoYXIgKmZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgSlNBcmd1bWVudEZv
cm1hdHRlciBmb3JtYXR0ZXIpOwoKZXh0ZXJuIHZvaWQKSlNfUmVtb3ZlQXJndW1lbnRGb3JtYXR0
ZXIoSlNDb250ZXh0ICpjeCwgY29uc3QgY2hhciAqZm9ybWF0KTsKCgoKZXh0ZXJuIEpTQm9vbApK
U19Db252ZXJ0VmFsdWUoSlNDb250ZXh0ICpjeCwganN2YWwgdiwgSlNUeXBlIHR5cGUsIGpzdmFs
ICp2cCk7CgpleHRlcm4gSlNCb29sCkpTX1ZhbHVlVG9PYmplY3QoSlNDb250ZXh0ICpjeCwganN2
YWwgdiwgSlNPYmplY3QgKipvYmpwKTsKCmV4dGVybiBKU0Z1bmN0aW9uICoKSlNfVmFsdWVUb0Z1
bmN0aW9uKEpTQ29udGV4dCAqY3gsIGpzdmFsIHYpOwoKZXh0ZXJuIEpTRnVuY3Rpb24gKgpKU19W
YWx1ZVRvQ29uc3RydWN0b3IoSlNDb250ZXh0ICpjeCwganN2YWwgdik7CgpleHRlcm4gSlNTdHJp
bmcgKgpKU19WYWx1ZVRvU3RyaW5nKEpTQ29udGV4dCAqY3gsIGpzdmFsIHYpOwoKZXh0ZXJuIEpT
Qm9vbApKU19WYWx1ZVRvTnVtYmVyKEpTQ29udGV4dCAqY3gsIGpzdmFsIHYsIGpzZG91YmxlICpk
cCk7CgoKCgoKZXh0ZXJuIEpTQm9vbApKU19WYWx1ZVRvRUNNQUludDMyKEpTQ29udGV4dCAqY3gs
IGpzdmFsIHYsIGludDMyICppcCk7CgoKCgoKZXh0ZXJuIEpTQm9vbApKU19WYWx1ZVRvRUNNQVVp
bnQzMihKU0NvbnRleHQgKmN4LCBqc3ZhbCB2LCB1aW50MzIgKmlwKTsKCgoKCgoKZXh0ZXJuIEpT
Qm9vbApKU19WYWx1ZVRvSW50MzIoSlNDb250ZXh0ICpjeCwganN2YWwgdiwgaW50MzIgKmlwKTsK
CgoKCmV4dGVybiBKU0Jvb2wKSlNfVmFsdWVUb1VpbnQxNihKU0NvbnRleHQgKmN4LCBqc3ZhbCB2
LCB1aW50MTYgKmlwKTsKCmV4dGVybiBKU0Jvb2wKSlNfVmFsdWVUb0Jvb2xlYW4oSlNDb250ZXh0
ICpjeCwganN2YWwgdiwgSlNCb29sICpicCk7CgpleHRlcm4gSlNUeXBlCkpTX1R5cGVPZlZhbHVl
KEpTQ29udGV4dCAqY3gsIGpzdmFsIHYpOwoKZXh0ZXJuIGNvbnN0IGNoYXIgKgpKU19HZXRUeXBl
TmFtZShKU0NvbnRleHQgKmN4LCBKU1R5cGUgdHlwZSk7CiMgMzM1ICIuLi8uLi9kaXN0L2luY2x1
ZGUvanNhcGkuaCIKZXh0ZXJuIEpTUnVudGltZSAqCkpTX0luaXQodWludDMyIG1heGJ5dGVzKTsK
CmV4dGVybiB2b2lkCkpTX0ZpbmlzaChKU1J1bnRpbWUgKnJ0KTsKCmV4dGVybiB2b2lkCkpTX1No
dXREb3duKHZvaWQpOwoKdm9pZCAqCkpTX0dldFJ1bnRpbWVQcml2YXRlKEpTUnVudGltZSAqcnQp
OwoKdm9pZApKU19TZXRSdW50aW1lUHJpdmF0ZShKU1J1bnRpbWUgKnJ0LCB2b2lkICpkYXRhKTsK
CgoKZXh0ZXJuIHZvaWQKSlNfQmVnaW5SZXF1ZXN0KEpTQ29udGV4dCAqY3gpOwoKZXh0ZXJuIHZv
aWQKSlNfRW5kUmVxdWVzdChKU0NvbnRleHQgKmN4KTsKCgpleHRlcm4gdm9pZApKU19ZaWVsZFJl
cXVlc3QoSlNDb250ZXh0ICpjeCk7CgpleHRlcm4ganNyZWZjb3VudApKU19TdXNwZW5kUmVxdWVz
dChKU0NvbnRleHQgKmN4KTsKCmV4dGVybiB2b2lkCkpTX1Jlc3VtZVJlcXVlc3QoSlNDb250ZXh0
ICpjeCwganNyZWZjb3VudCBzYXZlRGVwdGgpOwoKCgpleHRlcm4gdm9pZApKU19Mb2NrKEpTUnVu
dGltZSAqcnQpOwoKZXh0ZXJuIHZvaWQKSlNfVW5sb2NrKEpTUnVudGltZSAqcnQpOwoKZXh0ZXJu
IEpTQ29udGV4dCAqCkpTX05ld0NvbnRleHQoSlNSdW50aW1lICpydCwgc2l6ZV90IHN0YWNrQ2h1
bmtTaXplKTsKCmV4dGVybiB2b2lkCkpTX0Rlc3Ryb3lDb250ZXh0KEpTQ29udGV4dCAqY3gpOwoK
ZXh0ZXJuIHZvaWQKSlNfRGVzdHJveUNvbnRleHROb0dDKEpTQ29udGV4dCAqY3gpOwoKZXh0ZXJu
IHZvaWQKSlNfRGVzdHJveUNvbnRleHRNYXliZUdDKEpTQ29udGV4dCAqY3gpOwoKZXh0ZXJuIHZv
aWQgKgpKU19HZXRDb250ZXh0UHJpdmF0ZShKU0NvbnRleHQgKmN4KTsKCmV4dGVybiB2b2lkCkpT
X1NldENvbnRleHRQcml2YXRlKEpTQ29udGV4dCAqY3gsIHZvaWQgKmRhdGEpOwoKZXh0ZXJuIEpT
UnVudGltZSAqCkpTX0dldFJ1bnRpbWUoSlNDb250ZXh0ICpjeCk7CgpleHRlcm4gSlNDb250ZXh0
ICoKSlNfQ29udGV4dEl0ZXJhdG9yKEpTUnVudGltZSAqcnQsIEpTQ29udGV4dCAqKml0ZXJwKTsK
CmV4dGVybiBKU1ZlcnNpb24KSlNfR2V0VmVyc2lvbihKU0NvbnRleHQgKmN4KTsKCmV4dGVybiBK
U1ZlcnNpb24KSlNfU2V0VmVyc2lvbihKU0NvbnRleHQgKmN4LCBKU1ZlcnNpb24gdmVyc2lvbik7
CgpleHRlcm4gY29uc3QgY2hhciAqCkpTX1ZlcnNpb25Ub1N0cmluZyhKU1ZlcnNpb24gdmVyc2lv
bik7CgpleHRlcm4gSlNWZXJzaW9uCkpTX1N0cmluZ1RvVmVyc2lvbihjb25zdCBjaGFyICpzdHJp
bmcpOwojIDQyNiAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzYXBpLmgiCmV4dGVybiB1aW50MzIKSlNf
R2V0T3B0aW9ucyhKU0NvbnRleHQgKmN4KTsKCmV4dGVybiB1aW50MzIKSlNfU2V0T3B0aW9ucyhK
U0NvbnRleHQgKmN4LCB1aW50MzIgb3B0aW9ucyk7CgpleHRlcm4gdWludDMyCkpTX1RvZ2dsZU9w
dGlvbnMoSlNDb250ZXh0ICpjeCwgdWludDMyIG9wdGlvbnMpOwoKZXh0ZXJuIGNvbnN0IGNoYXIg
KgpKU19HZXRJbXBsZW1lbnRhdGlvblZlcnNpb24odm9pZCk7CgpleHRlcm4gSlNPYmplY3QgKgpK
U19HZXRHbG9iYWxPYmplY3QoSlNDb250ZXh0ICpjeCk7CgpleHRlcm4gdm9pZApKU19TZXRHbG9i
YWxPYmplY3QoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaik7CiMgNDUxICIuLi8uLi9kaXN0
L2luY2x1ZGUvanNhcGkuaCIKZXh0ZXJuIEpTQm9vbApKU19Jbml0U3RhbmRhcmRDbGFzc2VzKEpT
Q29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmopOwojIDQ2NyAiLi4vLi4vZGlzdC9pbmNsdWRlL2pz
YXBpLmgiCmV4dGVybiBKU0Jvb2wKSlNfUmVzb2x2ZVN0YW5kYXJkQ2xhc3MoSlNDb250ZXh0ICpj
eCwgSlNPYmplY3QgKm9iaiwganN2YWwgaWQsCiAgICAgICAgICAgICAgICAgICAgICAgIEpTQm9v
bCAqcmVzb2x2ZWQpOwoKZXh0ZXJuIEpTQm9vbApKU19FbnVtZXJhdGVTdGFuZGFyZENsYXNzZXMo
SlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaik7CgpleHRlcm4gSlNPYmplY3QgKgpKU19HZXRT
Y29wZUNoYWluKEpTQ29udGV4dCAqY3gpOwoKZXh0ZXJuIHZvaWQgKgpKU19tYWxsb2MoSlNDb250
ZXh0ICpjeCwgc2l6ZV90IG5ieXRlcyk7CgpleHRlcm4gdm9pZCAqCkpTX3JlYWxsb2MoSlNDb250
ZXh0ICpjeCwgdm9pZCAqcCwgc2l6ZV90IG5ieXRlcyk7CgpleHRlcm4gdm9pZApKU19mcmVlKEpT
Q29udGV4dCAqY3gsIHZvaWQgKnApOwoKZXh0ZXJuIGNoYXIgKgpKU19zdHJkdXAoSlNDb250ZXh0
ICpjeCwgY29uc3QgY2hhciAqcyk7CgpleHRlcm4ganNkb3VibGUgKgpKU19OZXdEb3VibGUoSlND
b250ZXh0ICpjeCwganNkb3VibGUgZCk7CgpleHRlcm4gSlNCb29sCkpTX05ld0RvdWJsZVZhbHVl
KEpTQ29udGV4dCAqY3gsIGpzZG91YmxlIGQsIGpzdmFsICpydmFsKTsKCmV4dGVybiBKU0Jvb2wK
SlNfTmV3TnVtYmVyVmFsdWUoSlNDb250ZXh0ICpjeCwganNkb3VibGUgZCwganN2YWwgKnJ2YWwp
OwojIDUxNCAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzYXBpLmgiCmV4dGVybiBKU0Jvb2wKSlNfQWRk
Um9vdChKU0NvbnRleHQgKmN4LCB2b2lkICpycCk7CgpleHRlcm4gSlNCb29sCkpTX0FkZE5hbWVk
Um9vdChKU0NvbnRleHQgKmN4LCB2b2lkICpycCwgY29uc3QgY2hhciAqbmFtZSk7CgpleHRlcm4g
SlNCb29sCkpTX0FkZE5hbWVkUm9vdFJUKEpTUnVudGltZSAqcnQsIHZvaWQgKnJwLCBjb25zdCBj
aGFyICpuYW1lKTsKCmV4dGVybiBKU0Jvb2wKSlNfUmVtb3ZlUm9vdChKU0NvbnRleHQgKmN4LCB2
b2lkICpycCk7CgpleHRlcm4gSlNCb29sCkpTX1JlbW92ZVJvb3RSVChKU1J1bnRpbWUgKnJ0LCB2
b2lkICpycCk7CgoKZXh0ZXJuIHZvaWQKSlNfRHVtcE5hbWVkUm9vdHMoSlNSdW50aW1lICpydCwK
ICAgICAgICAgICAgICAgICAgdm9pZCAoKmR1bXApKGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKnJw
LCB2b2lkICpkYXRhKSwKICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSk7CiMgNTU4ICIuLi8u
Li9kaXN0L2luY2x1ZGUvanNhcGkuaCIKdHlwZWRlZiBpbnROCigqIEpTR0NSb290TWFwRnVuKSh2
b2lkICpycCwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqZGF0YSk7CgpleHRlcm4gdWludDMyCkpT
X01hcEdDUm9vdHMoSlNSdW50aW1lICpydCwgSlNHQ1Jvb3RNYXBGdW4gbWFwLCB2b2lkICpkYXRh
KTsKCmV4dGVybiBKU0Jvb2wKSlNfTG9ja0dDVGhpbmcoSlNDb250ZXh0ICpjeCwgdm9pZCAqdGhp
bmcpOwoKZXh0ZXJuIEpTQm9vbApKU19VbmxvY2tHQ1RoaW5nKEpTQ29udGV4dCAqY3gsIHZvaWQg
KnRoaW5nKTsKIyA1ODMgIi4uLy4uL2Rpc3QvaW5jbHVkZS9qc2FwaS5oIgpleHRlcm4gdm9pZApK
U19NYXJrR0NUaGluZyhKU0NvbnRleHQgKmN4LCB2b2lkICp0aGluZywgY29uc3QgY2hhciAqbmFt
ZSwgdm9pZCAqYXJnKTsKCmV4dGVybiB2b2lkCkpTX0dDKEpTQ29udGV4dCAqY3gpOwoKZXh0ZXJu
IHZvaWQKSlNfTWF5YmVHQyhKU0NvbnRleHQgKmN4KTsKCmV4dGVybiBKU0dDQ2FsbGJhY2sKSlNf
U2V0R0NDYWxsYmFjayhKU0NvbnRleHQgKmN4LCBKU0dDQ2FsbGJhY2sgY2IpOwoKZXh0ZXJuIEpT
R0NDYWxsYmFjawpKU19TZXRHQ0NhbGxiYWNrUlQoSlNSdW50aW1lICpydCwgSlNHQ0NhbGxiYWNr
IGNiKTsKCmV4dGVybiBKU0Jvb2wKSlNfSXNBYm91dFRvQmVGaW5hbGl6ZWQoSlNDb250ZXh0ICpj
eCwgdm9pZCAqdGhpbmcpOwojIDYxMyAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzYXBpLmgiCmV4dGVy
biBpbnROCkpTX0FkZEV4dGVybmFsU3RyaW5nRmluYWxpemVyKEpTU3RyaW5nRmluYWxpemVPcCBm
aW5hbGl6ZXIpOwojIDYyOSAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzYXBpLmgiCmV4dGVybiBpbnRO
CkpTX1JlbW92ZUV4dGVybmFsU3RyaW5nRmluYWxpemVyKEpTU3RyaW5nRmluYWxpemVPcCBmaW5h
bGl6ZXIpOwoKCgoKCgpleHRlcm4gSlNTdHJpbmcgKgpKU19OZXdFeHRlcm5hbFN0cmluZyhKU0Nv
bnRleHQgKmN4LCBqc2NoYXIgKmNoYXJzLCBzaXplX3QgbGVuZ3RoLCBpbnROIHR5cGUpOwojIDY0
NyAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzYXBpLmgiCnN0cnVjdCBKU0NsYXNzIHsKICAgIGNvbnN0
IGNoYXIgKm5hbWU7CiAgICB1aW50MzIgZmxhZ3M7CgoKICAgIEpTUHJvcGVydHlPcCBhZGRQcm9w
ZXJ0eTsKICAgIEpTUHJvcGVydHlPcCBkZWxQcm9wZXJ0eTsKICAgIEpTUHJvcGVydHlPcCBnZXRQ
cm9wZXJ0eTsKICAgIEpTUHJvcGVydHlPcCBzZXRQcm9wZXJ0eTsKICAgIEpTRW51bWVyYXRlT3Ag
ZW51bWVyYXRlOwogICAgSlNSZXNvbHZlT3AgcmVzb2x2ZTsKICAgIEpTQ29udmVydE9wIGNvbnZl
cnQ7CiAgICBKU0ZpbmFsaXplT3AgZmluYWxpemU7CgoKICAgIEpTR2V0T2JqZWN0T3BzIGdldE9i
amVjdE9wczsKICAgIEpTQ2hlY2tBY2Nlc3NPcCBjaGVja0FjY2VzczsKICAgIEpTTmF0aXZlIGNh
bGw7CiAgICBKU05hdGl2ZSBjb25zdHJ1Y3Q7CiAgICBKU1hEUk9iamVjdE9wIHhkck9iamVjdDsK
ICAgIEpTSGFzSW5zdGFuY2VPcCBoYXNJbnN0YW5jZTsKICAgIEpTTWFya09wIG1hcms7CiAgICBq
c3dvcmQgc3BhcmU7Cn07CiMgNjk2ICIuLi8uLi9kaXN0L2luY2x1ZGUvanNhcGkuaCIKc3RydWN0
IEpTT2JqZWN0T3BzIHsKCiAgICBKU05ld09iamVjdE1hcE9wIG5ld09iamVjdE1hcDsKICAgIEpT
T2JqZWN0TWFwT3AgZGVzdHJveU9iamVjdE1hcDsKICAgIEpTTG9va3VwUHJvcE9wIGxvb2t1cFBy
b3BlcnR5OwogICAgSlNEZWZpbmVQcm9wT3AgZGVmaW5lUHJvcGVydHk7CiAgICBKU1Byb3BlcnR5
SWRPcCBnZXRQcm9wZXJ0eTsKICAgIEpTUHJvcGVydHlJZE9wIHNldFByb3BlcnR5OwogICAgSlNB
dHRyaWJ1dGVzT3AgZ2V0QXR0cmlidXRlczsKICAgIEpTQXR0cmlidXRlc09wIHNldEF0dHJpYnV0
ZXM7CiAgICBKU1Byb3BlcnR5SWRPcCBkZWxldGVQcm9wZXJ0eTsKICAgIEpTQ29udmVydE9wIGRl
ZmF1bHRWYWx1ZTsKICAgIEpTTmV3RW51bWVyYXRlT3AgZW51bWVyYXRlOwogICAgSlNDaGVja0Fj
Y2Vzc0lkT3AgY2hlY2tBY2Nlc3M7CgoKICAgIEpTT2JqZWN0T3AgdGhpc09iamVjdDsKICAgIEpT
UHJvcGVydHlSZWZPcCBkcm9wUHJvcGVydHk7CiAgICBKU05hdGl2ZSBjYWxsOwogICAgSlNOYXRp
dmUgY29uc3RydWN0OwogICAgSlNYRFJPYmplY3RPcCB4ZHJPYmplY3Q7CiAgICBKU0hhc0luc3Rh
bmNlT3AgaGFzSW5zdGFuY2U7CiAgICBKU1NldE9iamVjdFNsb3RPcCBzZXRQcm90bzsKICAgIEpT
U2V0T2JqZWN0U2xvdE9wIHNldFBhcmVudDsKICAgIEpTTWFya09wIG1hcms7CiAgICBKU0ZpbmFs
aXplT3AgY2xlYXI7CiAgICBKU0dldFJlcXVpcmVkU2xvdE9wIGdldFJlcXVpcmVkU2xvdDsKICAg
IEpTU2V0UmVxdWlyZWRTbG90T3Agc2V0UmVxdWlyZWRTbG90Owp9OwojIDczNiAiLi4vLi4vZGlz
dC9pbmNsdWRlL2pzYXBpLmgiCnN0cnVjdCBKU1Byb3BlcnR5IHsKICAgIGpzaWQgaWQ7Cn07Cgpz
dHJ1Y3QgSlNJZEFycmF5IHsKICAgIGpzaW50IGxlbmd0aDsKICAgIGpzaWQgdmVjdG9yWzFdOwp9
OwoKZXh0ZXJuIHZvaWQKSlNfRGVzdHJveUlkQXJyYXkoSlNDb250ZXh0ICpjeCwgSlNJZEFycmF5
ICppZGEpOwoKZXh0ZXJuIEpTQm9vbApKU19WYWx1ZVRvSWQoSlNDb250ZXh0ICpjeCwganN2YWwg
diwganNpZCAqaWRwKTsKCmV4dGVybiBKU0Jvb2wKSlNfSWRUb1ZhbHVlKEpTQ29udGV4dCAqY3gs
IGpzaWQgaWQsIGpzdmFsICp2cCk7CgoKCgpleHRlcm4gSlNCb29sCkpTX1Byb3BlcnR5U3R1YihK
U0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBqc3ZhbCBpZCwganN2YWwgKnZwKTsKCmV4dGVy
biBKU0Jvb2wKSlNfRW51bWVyYXRlU3R1YihKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqKTsK
CmV4dGVybiBKU0Jvb2wKSlNfUmVzb2x2ZVN0dWIoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9i
aiwganN2YWwgaWQpOwoKZXh0ZXJuIEpTQm9vbApKU19Db252ZXJ0U3R1YihKU0NvbnRleHQgKmN4
LCBKU09iamVjdCAqb2JqLCBKU1R5cGUgdHlwZSwganN2YWwgKnZwKTsKCmV4dGVybiB2b2lkCkpT
X0ZpbmFsaXplU3R1YihKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqKTsKCnN0cnVjdCBKU0Nv
bnN0RG91YmxlU3BlYyB7CiAgICBqc2RvdWJsZSBkdmFsOwogICAgY29uc3QgY2hhciAqbmFtZTsK
ICAgIHVpbnQ4IGZsYWdzOwogICAgdWludDggc3BhcmVbM107Cn07CgoKCgoKCnN0cnVjdCBKU1By
b3BlcnR5U3BlYyB7CiAgICBjb25zdCBjaGFyICpuYW1lOwogICAgaW50OCB0aW55aWQ7CiAgICB1
aW50OCBmbGFnczsKICAgIEpTUHJvcGVydHlPcCBnZXR0ZXI7CiAgICBKU1Byb3BlcnR5T3Agc2V0
dGVyOwp9OwoKc3RydWN0IEpTRnVuY3Rpb25TcGVjIHsKICAgIGNvbnN0IGNoYXIgKm5hbWU7CiAg
ICBKU05hdGl2ZSBjYWxsOwogICAgdWludDggbmFyZ3M7CiAgICB1aW50OCBmbGFnczsKICAgIHVp
bnQxNiBleHRyYTsKfTsKCmV4dGVybiBKU09iamVjdCAqCkpTX0luaXRDbGFzcyhKU0NvbnRleHQg
KmN4LCBKU09iamVjdCAqb2JqLCBKU09iamVjdCAqcGFyZW50X3Byb3RvLAogICAgICAgICAgICAg
SlNDbGFzcyAqY2xhc3AsIEpTTmF0aXZlIGNvbnN0cnVjdG9yLCB1aW50TiBuYXJncywKICAgICAg
ICAgICAgIEpTUHJvcGVydHlTcGVjICpwcywgSlNGdW5jdGlvblNwZWMgKmZzLAogICAgICAgICAg
ICAgSlNQcm9wZXJ0eVNwZWMgKnN0YXRpY19wcywgSlNGdW5jdGlvblNwZWMgKnN0YXRpY19mcyk7
CgoKZXh0ZXJuIEpTQ2xhc3MgKgpKU19HZXRDbGFzcyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAq
b2JqKTsKIyA4MTggIi4uLy4uL2Rpc3QvaW5jbHVkZS9qc2FwaS5oIgpleHRlcm4gSlNCb29sCkpT
X0luc3RhbmNlT2YoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgSlNDbGFzcyAqY2xhc3As
IGpzdmFsICphcmd2KTsKCmV4dGVybiB2b2lkICoKSlNfR2V0UHJpdmF0ZShKU0NvbnRleHQgKmN4
LCBKU09iamVjdCAqb2JqKTsKCmV4dGVybiBKU0Jvb2wKSlNfU2V0UHJpdmF0ZShKU0NvbnRleHQg
KmN4LCBKU09iamVjdCAqb2JqLCB2b2lkICpkYXRhKTsKCmV4dGVybiB2b2lkICoKSlNfR2V0SW5z
dGFuY2VQcml2YXRlKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIEpTQ2xhc3MgKmNsYXNw
LAogICAgICAgICAgICAgICAgICAgICAganN2YWwgKmFyZ3YpOwoKZXh0ZXJuIEpTT2JqZWN0ICoK
SlNfR2V0UHJvdG90eXBlKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmopOwoKZXh0ZXJuIEpT
Qm9vbApKU19TZXRQcm90b3R5cGUoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgSlNPYmpl
Y3QgKnByb3RvKTsKCmV4dGVybiBKU09iamVjdCAqCkpTX0dldFBhcmVudChKU0NvbnRleHQgKmN4
LCBKU09iamVjdCAqb2JqKTsKCmV4dGVybiBKU0Jvb2wKSlNfU2V0UGFyZW50KEpTQ29udGV4dCAq
Y3gsIEpTT2JqZWN0ICpvYmosIEpTT2JqZWN0ICpwYXJlbnQpOwoKZXh0ZXJuIEpTT2JqZWN0ICoK
SlNfR2V0Q29uc3RydWN0b3IoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKnByb3RvKTsKCmV4dGVy
biBKU09iamVjdCAqCkpTX05ld09iamVjdChKU0NvbnRleHQgKmN4LCBKU0NsYXNzICpjbGFzcCwg
SlNPYmplY3QgKnByb3RvLCBKU09iamVjdCAqcGFyZW50KTsKCmV4dGVybiBKU09iamVjdCAqCkpT
X0NvbnN0cnVjdE9iamVjdChKU0NvbnRleHQgKmN4LCBKU0NsYXNzICpjbGFzcCwgSlNPYmplY3Qg
KnByb3RvLAogICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKnBhcmVudCk7CgpleHRlcm4gSlNP
YmplY3QgKgpKU19EZWZpbmVPYmplY3QoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgY29u
c3QgY2hhciAqbmFtZSwgSlNDbGFzcyAqY2xhc3AsCiAgICAgICAgICAgICAgICBKU09iamVjdCAq
cHJvdG8sIHVpbnROIGF0dHJzKTsKCmV4dGVybiBKU0Jvb2wKSlNfRGVmaW5lQ29uc3REb3VibGVz
KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIEpTQ29uc3REb3VibGVTcGVjICpjZHMpOwoK
ZXh0ZXJuIEpTQm9vbApKU19EZWZpbmVQcm9wZXJ0aWVzKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0
ICpvYmosIEpTUHJvcGVydHlTcGVjICpwcyk7CgpleHRlcm4gSlNCb29sCkpTX0RlZmluZVByb3Bl
cnR5KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGpzdmFs
IHZhbHVlLAogICAgICAgICAgICAgICAgICBKU1Byb3BlcnR5T3AgZ2V0dGVyLCBKU1Byb3BlcnR5
T3Agc2V0dGVyLCB1aW50TiBhdHRycyk7CgoKCgoKCgpleHRlcm4gSlNCb29sCkpTX0dldFByb3Bl
cnR5QXR0cmlidXRlcyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBjb25zdCBjaGFyICpu
YW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgdWludE4gKmF0dHJzcCwgSlNCb29sICpmb3Vu
ZHApOwoKCgoKCgoKZXh0ZXJuIEpTQm9vbApKU19TZXRQcm9wZXJ0eUF0dHJpYnV0ZXMoSlNDb250
ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgIHVpbnROIGF0dHJzLCBKU0Jvb2wgKmZvdW5kcCk7CgpleHRlcm4gSlNCb29sCkpT
X0RlZmluZVByb3BlcnR5V2l0aFRpbnlJZChKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBj
b25zdCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50OCB0aW55aWQs
IGpzdmFsIHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNQcm9wZXJ0eU9wIGdl
dHRlciwgSlNQcm9wZXJ0eU9wIHNldHRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp
bnROIGF0dHJzKTsKCmV4dGVybiBKU0Jvb2wKSlNfQWxpYXNQcm9wZXJ0eShKU0NvbnRleHQgKmN4
LCBKU09iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKmFsaWFzKTsKCmV4dGVybiBKU0Jvb2wKSlNfTG9va3VwUHJvcGVydHkoSlNDb250ZXh0
ICpjeCwgSlNPYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwganN2YWwgKnZwKTsKCmV4dGVy
biBKU0Jvb2wKSlNfR2V0UHJvcGVydHkoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgY29u
c3QgY2hhciAqbmFtZSwganN2YWwgKnZwKTsKCmV4dGVybiBKU0Jvb2wKSlNfU2V0UHJvcGVydHko
SlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwganN2YWwgKnZw
KTsKCmV4dGVybiBKU0Jvb2wKSlNfRGVsZXRlUHJvcGVydHkoSlNDb250ZXh0ICpjeCwgSlNPYmpl
Y3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSk7CgpleHRlcm4gSlNCb29sCkpTX0RlbGV0ZVByb3Bl
cnR5MihKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLAogICAg
ICAgICAgICAgICAgICAganN2YWwgKnJ2YWwpOwoKZXh0ZXJuIEpTQm9vbApKU19EZWZpbmVVQ1By
b3BlcnR5KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosCiAgICAgICAgICAgICAgICAgICAg
Y29uc3QganNjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbiwganN2YWwgdmFsdWUsCiAgICAgICAg
ICAgICAgICAgICAgSlNQcm9wZXJ0eU9wIGdldHRlciwgSlNQcm9wZXJ0eU9wIHNldHRlciwKICAg
ICAgICAgICAgICAgICAgICB1aW50TiBhdHRycyk7CgoKCgoKCgpleHRlcm4gSlNCb29sCkpTX0dl
dFVDUHJvcGVydHlBdHRyaWJ1dGVzKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGpzY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnROICphdHRyc3AsIEpTQm9vbCAqZm91bmRw
KTsKCgoKCgoKCmV4dGVybiBKU0Jvb2wKSlNfU2V0VUNQcm9wZXJ0eUF0dHJpYnV0ZXMoSlNDb250
ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
anNjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
dWludE4gYXR0cnMsIEpTQm9vbCAqZm91bmRwKTsKCgpleHRlcm4gSlNCb29sCkpTX0RlZmluZVVD
UHJvcGVydHlXaXRoVGlueUlkKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGpzY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDggdGlueWlkLCBqc3ZhbCB2YWx1ZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNQcm9wZXJ0eU9wIGdldHRlciwgSlNQcm9w
ZXJ0eU9wIHNldHRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludE4gYXR0cnMp
OwoKZXh0ZXJuIEpTQm9vbApKU19Mb29rdXBVQ1Byb3BlcnR5KEpTQ29udGV4dCAqY3gsIEpTT2Jq
ZWN0ICpvYmosCiAgICAgICAgICAgICAgICAgICAgY29uc3QganNjaGFyICpuYW1lLCBzaXplX3Qg
bmFtZWxlbiwKICAgICAgICAgICAgICAgICAgICBqc3ZhbCAqdnApOwoKZXh0ZXJuIEpTQm9vbApK
U19HZXRVQ1Byb3BlcnR5KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosCiAgICAgICAgICAg
ICAgICAgY29uc3QganNjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbiwKICAgICAgICAgICAgICAg
ICBqc3ZhbCAqdnApOwoKZXh0ZXJuIEpTQm9vbApKU19TZXRVQ1Byb3BlcnR5KEpTQ29udGV4dCAq
Y3gsIEpTT2JqZWN0ICpvYmosCiAgICAgICAgICAgICAgICAgY29uc3QganNjaGFyICpuYW1lLCBz
aXplX3QgbmFtZWxlbiwKICAgICAgICAgICAgICAgICBqc3ZhbCAqdnApOwoKZXh0ZXJuIEpTQm9v
bApKU19EZWxldGVVQ1Byb3BlcnR5MihKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAg
ICAgICAgICAgICAgICAgICBjb25zdCBqc2NoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuLAogICAg
ICAgICAgICAgICAgICAgICBqc3ZhbCAqcnZhbCk7CgpleHRlcm4gSlNPYmplY3QgKgpKU19OZXdB
cnJheU9iamVjdChKU0NvbnRleHQgKmN4LCBqc2ludCBsZW5ndGgsIGpzdmFsICp2ZWN0b3IpOwoK
ZXh0ZXJuIEpTQm9vbApKU19Jc0FycmF5T2JqZWN0KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpv
YmopOwoKZXh0ZXJuIEpTQm9vbApKU19HZXRBcnJheUxlbmd0aChKU0NvbnRleHQgKmN4LCBKU09i
amVjdCAqb2JqLCBqc3VpbnQgKmxlbmd0aHApOwoKZXh0ZXJuIEpTQm9vbApKU19TZXRBcnJheUxl
bmd0aChKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBqc3VpbnQgbGVuZ3RoKTsKCmV4dGVy
biBKU0Jvb2wKSlNfSGFzQXJyYXlMZW5ndGgoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwg
anN1aW50ICpsZW5ndGhwKTsKCmV4dGVybiBKU0Jvb2wKSlNfRGVmaW5lRWxlbWVudChKU0NvbnRl
eHQgKmN4LCBKU09iamVjdCAqb2JqLCBqc2ludCBpbmRleCwganN2YWwgdmFsdWUsCiAgICAgICAg
ICAgICAgICAgSlNQcm9wZXJ0eU9wIGdldHRlciwgSlNQcm9wZXJ0eU9wIHNldHRlciwgdWludE4g
YXR0cnMpOwoKZXh0ZXJuIEpTQm9vbApKU19BbGlhc0VsZW1lbnQoSlNDb250ZXh0ICpjeCwgSlNP
YmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwganNpbnQgYWxpYXMpOwoKZXh0ZXJuIEpTQm9v
bApKU19Mb29rdXBFbGVtZW50KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGpzaW50IGlu
ZGV4LCBqc3ZhbCAqdnApOwoKZXh0ZXJuIEpTQm9vbApKU19HZXRFbGVtZW50KEpTQ29udGV4dCAq
Y3gsIEpTT2JqZWN0ICpvYmosIGpzaW50IGluZGV4LCBqc3ZhbCAqdnApOwoKZXh0ZXJuIEpTQm9v
bApKU19TZXRFbGVtZW50KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGpzaW50IGluZGV4
LCBqc3ZhbCAqdnApOwoKZXh0ZXJuIEpTQm9vbApKU19EZWxldGVFbGVtZW50KEpTQ29udGV4dCAq
Y3gsIEpTT2JqZWN0ICpvYmosIGpzaW50IGluZGV4KTsKCmV4dGVybiBKU0Jvb2wKSlNfRGVsZXRl
RWxlbWVudDIoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwganNpbnQgaW5kZXgsIGpzdmFs
ICpydmFsKTsKCmV4dGVybiB2b2lkCkpTX0NsZWFyU2NvcGUoSlNDb250ZXh0ICpjeCwgSlNPYmpl
Y3QgKm9iaik7CgpleHRlcm4gSlNJZEFycmF5ICoKSlNfRW51bWVyYXRlKEpTQ29udGV4dCAqY3gs
IEpTT2JqZWN0ICpvYmopOwoKZXh0ZXJuIEpTQm9vbApKU19DaGVja0FjY2VzcyhKU0NvbnRleHQg
KmN4LCBKU09iamVjdCAqb2JqLCBqc2lkIGlkLCBKU0FjY2Vzc01vZGUgbW9kZSwKICAgICAgICAg
ICAgICAganN2YWwgKnZwLCB1aW50TiAqYXR0cnNwKTsKCmV4dGVybiBKU0Jvb2wKSlNfR2V0UmVz
ZXJ2ZWRTbG90KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIHVpbnQzMiBpbmRleCwganN2
YWwgKnZwKTsKCmV4dGVybiBKU0Jvb2wKSlNfU2V0UmVzZXJ2ZWRTbG90KEpTQ29udGV4dCAqY3gs
IEpTT2JqZWN0ICpvYmosIHVpbnQzMiBpbmRleCwganN2YWwgdik7CgoKCgoKCnR5cGVkZWYgc3Ry
dWN0IEpTUHJpbmNpcGFscyB7CiAgICBjaGFyICpjb2RlYmFzZTsKICAgIHZvaWQgKigqZ2V0UHJp
bmNpcGFsQXJyYXkpKEpTQ29udGV4dCAqY3gsIHN0cnVjdCBKU1ByaW5jaXBhbHMgKik7CiAgICBK
U0Jvb2wgKCpnbG9iYWxQcml2aWxlZ2VzRW5hYmxlZCkoSlNDb250ZXh0ICpjeCwgc3RydWN0IEpT
UHJpbmNpcGFscyAqKTsKCgogICAgdWludE4gcmVmY291bnQ7CiAgICB2b2lkICgqZGVzdHJveSko
SlNDb250ZXh0ICpjeCwgc3RydWN0IEpTUHJpbmNpcGFscyAqKTsKfSBKU1ByaW5jaXBhbHM7CiMg
MTA0OSAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzYXBpLmgiCmV4dGVybiBKU0Z1bmN0aW9uICoKSlNf
TmV3RnVuY3Rpb24oSlNDb250ZXh0ICpjeCwgSlNOYXRpdmUgY2FsbCwgdWludE4gbmFyZ3MsIHVp
bnROIGZsYWdzLAogICAgICAgICAgICAgICBKU09iamVjdCAqcGFyZW50LCBjb25zdCBjaGFyICpu
YW1lKTsKCmV4dGVybiBKU09iamVjdCAqCkpTX0dldEZ1bmN0aW9uT2JqZWN0KEpTRnVuY3Rpb24g
KmZ1bik7CgpleHRlcm4gY29uc3QgY2hhciAqCkpTX0dldEZ1bmN0aW9uTmFtZShKU0Z1bmN0aW9u
ICpmdW4pOwoKZXh0ZXJuIEpTQm9vbApKU19EZWZpbmVGdW5jdGlvbnMoSlNDb250ZXh0ICpjeCwg
SlNPYmplY3QgKm9iaiwgSlNGdW5jdGlvblNwZWMgKmZzKTsKCmV4dGVybiBKU0Z1bmN0aW9uICoK
SlNfRGVmaW5lRnVuY3Rpb24oSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgY29uc3QgY2hh
ciAqbmFtZSwgSlNOYXRpdmUgY2FsbCwKICAgICAgICAgICAgICAgICAgdWludE4gbmFyZ3MsIHVp
bnROIGF0dHJzKTsKCmV4dGVybiBKU09iamVjdCAqCkpTX0Nsb25lRnVuY3Rpb25PYmplY3QoSlND
b250ZXh0ICpjeCwgSlNPYmplY3QgKmZ1bm9iaiwgSlNPYmplY3QgKnBhcmVudCk7CiMgMTA3NiAi
Li4vLi4vZGlzdC9pbmNsdWRlL2pzYXBpLmgiCmV4dGVybiBKU0Jvb2wKSlNfQnVmZmVySXNDb21w
aWxhYmxlVW5pdChKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKmJ5dGVzLCBzaXplX3QgbGVuZ3RoKTsKIyAxMDg3ICIuLi8u
Li9kaXN0L2luY2x1ZGUvanNhcGkuaCIKZXh0ZXJuIEpTU2NyaXB0ICoKSlNfQ29tcGlsZVNjcmlw
dChKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIgKmJ5dGVzLCBzaXplX3QgbGVuZ3RoLAogICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZp
bGVuYW1lLCB1aW50TiBsaW5lbm8pOwoKZXh0ZXJuIEpTU2NyaXB0ICoKSlNfQ29tcGlsZVNjcmlw
dEZvclByaW5jaXBhbHMoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgSlNQcmluY2lwYWxzICpwcmluY2lwYWxzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpieXRlcywgc2l6ZV90IGxlbmd0aCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIHVpbnROIGxpbmVu
byk7CgpleHRlcm4gSlNTY3JpcHQgKgpKU19Db21waWxlVUNTY3JpcHQoSlNDb250ZXh0ICpjeCwg
SlNPYmplY3QgKm9iaiwKICAgICAgICAgICAgICAgICAgIGNvbnN0IGpzY2hhciAqY2hhcnMsIHNp
emVfdCBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgdWlu
dE4gbGluZW5vKTsKCmV4dGVybiBKU1NjcmlwdCAqCkpTX0NvbXBpbGVVQ1NjcmlwdEZvclByaW5j
aXBhbHMoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBKU1ByaW5jaXBhbHMgKnByaW5jaXBhbHMsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QganNjaGFyICpjaGFycywgc2l6ZV90IGxlbmd0aCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgdWludE4gbGluZW5v
KTsKCmV4dGVybiBKU1NjcmlwdCAqCkpTX0NvbXBpbGVGaWxlKEpTQ29udGV4dCAqY3gsIEpTT2Jq
ZWN0ICpvYmosIGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKCmV4dGVybiBKU1NjcmlwdCAqCkpTX0Nv
bXBpbGVGaWxlSGFuZGxlKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGNvbnN0IGNoYXIg
KmZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICBGSUxFICpmaCk7CgpleHRlcm4gSlNTY3Jp
cHQgKgpKU19Db21waWxlRmlsZUhhbmRsZUZvclByaW5jaXBhbHMoSlNDb250ZXh0ICpjeCwgSlNP
YmplY3QgKm9iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg
KmZpbGVuYW1lLCBGSUxFICpmaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpT
UHJpbmNpcGFscyAqcHJpbmNpcGFscyk7CiMgMTEzNyAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzYXBp
LmgiCmV4dGVybiBKU09iamVjdCAqCkpTX05ld1NjcmlwdE9iamVjdChKU0NvbnRleHQgKmN4LCBK
U1NjcmlwdCAqc2NyaXB0KTsKCmV4dGVybiB2b2lkCkpTX0Rlc3Ryb3lTY3JpcHQoSlNDb250ZXh0
ICpjeCwgSlNTY3JpcHQgKnNjcmlwdCk7CgpleHRlcm4gSlNGdW5jdGlvbiAqCkpTX0NvbXBpbGVG
dW5jdGlvbihKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLAog
ICAgICAgICAgICAgICAgICAgdWludE4gbmFyZ3MsIGNvbnN0IGNoYXIgKiphcmduYW1lcywKICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ5dGVzLCBzaXplX3QgbGVuZ3RoLAogICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIHVpbnROIGxpbmVubyk7CgpleHRlcm4g
SlNGdW5jdGlvbiAqCkpTX0NvbXBpbGVGdW5jdGlvbkZvclByaW5jaXBhbHMoSlNDb250ZXh0ICpj
eCwgSlNPYmplY3QgKm9iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU1ByaW5j
aXBhbHMgKnByaW5jaXBhbHMsIGNvbnN0IGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdWludE4gbmFyZ3MsIGNvbnN0IGNoYXIgKiphcmduYW1lcywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpieXRlcywgc2l6ZV90IGxlbmd0aCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgdWlu
dE4gbGluZW5vKTsKCmV4dGVybiBKU0Z1bmN0aW9uICoKSlNfQ29tcGlsZVVDRnVuY3Rpb24oSlND
b250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAg
ICAgICAgICAgdWludE4gbmFyZ3MsIGNvbnN0IGNoYXIgKiphcmduYW1lcywKICAgICAgICAgICAg
ICAgICAgICAgY29uc3QganNjaGFyICpjaGFycywgc2l6ZV90IGxlbmd0aCwKICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIHVpbnROIGxpbmVubyk7CgpleHRlcm4gSlNG
dW5jdGlvbiAqCkpTX0NvbXBpbGVVQ0Z1bmN0aW9uRm9yUHJpbmNpcGFscyhKU0NvbnRleHQgKmN4
LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNQcmlu
Y2lwYWxzICpwcmluY2lwYWxzLCBjb25zdCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdWludE4gbmFyZ3MsIGNvbnN0IGNoYXIgKiphcmduYW1lcywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGpzY2hhciAqY2hhcnMsIHNpemVfdCBs
ZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxl
bmFtZSwgdWludE4gbGluZW5vKTsKCmV4dGVybiBKU1N0cmluZyAqCkpTX0RlY29tcGlsZVNjcmlw
dChKU0NvbnRleHQgKmN4LCBKU1NjcmlwdCAqc2NyaXB0LCBjb25zdCBjaGFyICpuYW1lLAogICAg
ICAgICAgICAgICAgICAgdWludE4gaW5kZW50KTsKCgoKCgoKCmV4dGVybiBKU1N0cmluZyAqCkpT
X0RlY29tcGlsZUZ1bmN0aW9uKEpTQ29udGV4dCAqY3gsIEpTRnVuY3Rpb24gKmZ1biwgdWludE4g
aW5kZW50KTsKCmV4dGVybiBKU1N0cmluZyAqCkpTX0RlY29tcGlsZUZ1bmN0aW9uQm9keShKU0Nv
bnRleHQgKmN4LCBKU0Z1bmN0aW9uICpmdW4sIHVpbnROIGluZGVudCk7CiMgMTIyMCAiLi4vLi4v
ZGlzdC9pbmNsdWRlL2pzYXBpLmgiCmV4dGVybiBKU0Jvb2wKSlNfRXhlY3V0ZVNjcmlwdChKU0Nv
bnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBKU1NjcmlwdCAqc2NyaXB0LCBqc3ZhbCAqcnZhbCk7
CgoKCgoKdHlwZWRlZiBlbnVtIEpTRXhlY1BhcnQgeyBKU0VYRUNfUFJPTE9HLCBKU0VYRUNfTUFJ
TiB9IEpTRXhlY1BhcnQ7CgpleHRlcm4gSlNCb29sCkpTX0V4ZWN1dGVTY3JpcHRQYXJ0KEpTQ29u
dGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIEpTU2NyaXB0ICpzY3JpcHQsCiAgICAgICAgICAgICAg
ICAgICAgIEpTRXhlY1BhcnQgcGFydCwganN2YWwgKnJ2YWwpOwoKZXh0ZXJuIEpTQm9vbApKU19F
dmFsdWF0ZVNjcmlwdChKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICpieXRlcywgdWludE4gbGVuZ3RoLAogICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyICpmaWxlbmFtZSwgdWludE4gbGluZW5vLAogICAgICAgICAgICAgICAgICBqc3Zh
bCAqcnZhbCk7CgpleHRlcm4gSlNCb29sCkpTX0V2YWx1YXRlU2NyaXB0Rm9yUHJpbmNpcGFscyhK
U0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSlNQcmluY2lwYWxzICpwcmluY2lwYWxzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciAqYnl0ZXMsIHVpbnROIGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB1aW50TiBsaW5lbm8sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqc3ZhbCAqcnZhbCk7CgpleHRlcm4gSlNCb29sCkpTX0V2YWx1
YXRlVUNTY3JpcHQoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwKICAgICAgICAgICAgICAg
ICAgICBjb25zdCBqc2NoYXIgKmNoYXJzLCB1aW50TiBsZW5ndGgsCiAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIHVpbnROIGxpbmVubywKICAgICAgICAgICAgICAgICAg
ICBqc3ZhbCAqcnZhbCk7CgpleHRlcm4gSlNCb29sCkpTX0V2YWx1YXRlVUNTY3JpcHRGb3JQcmlu
Y2lwYWxzKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEpTUHJpbmNpcGFscyAqcHJpbmNpcGFscywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QganNjaGFyICpjaGFycywgdWludE4gbGVuZ3RoLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgdWludE4gbGlu
ZW5vLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc3ZhbCAqcnZhbCk7CgpleHRl
cm4gSlNCb29sCkpTX0NhbGxGdW5jdGlvbihKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBK
U0Z1bmN0aW9uICpmdW4sIHVpbnROIGFyZ2MsCiAgICAgICAgICAgICAgICBqc3ZhbCAqYXJndiwg
anN2YWwgKnJ2YWwpOwoKZXh0ZXJuIEpTQm9vbApKU19DYWxsRnVuY3Rpb25OYW1lKEpTQ29udGV4
dCAqY3gsIEpTT2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIHVpbnROIGFyZ2MsCiAgICAg
ICAgICAgICAgICAgICAganN2YWwgKmFyZ3YsIGpzdmFsICpydmFsKTsKCmV4dGVybiBKU0Jvb2wK
SlNfQ2FsbEZ1bmN0aW9uVmFsdWUoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwganN2YWwg
ZnZhbCwgdWludE4gYXJnYywKICAgICAgICAgICAgICAgICAgICAganN2YWwgKmFyZ3YsIGpzdmFs
ICpydmFsKTsKCmV4dGVybiBKU0JyYW5jaENhbGxiYWNrCkpTX1NldEJyYW5jaENhbGxiYWNrKEpT
Q29udGV4dCAqY3gsIEpTQnJhbmNoQ2FsbGJhY2sgY2IpOwoKZXh0ZXJuIEpTQm9vbApKU19Jc1J1
bm5pbmcoSlNDb250ZXh0ICpjeCk7CgpleHRlcm4gSlNCb29sCkpTX0lzQ29uc3RydWN0aW5nKEpT
Q29udGV4dCAqY3gpOwoKCgoKCgpleHRlcm4gSlNCb29sCkpTX0lzQXNzaWduaW5nKEpTQ29udGV4
dCAqY3gpOwojIDEyOTYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9qc2FwaS5oIgpleHRlcm4gdm9pZApK
U19TZXRDYWxsUmV0dXJuVmFsdWUyKEpTQ29udGV4dCAqY3gsIGpzdmFsIHYpOwojIDEzMTAgIi4u
Ly4uL2Rpc3QvaW5jbHVkZS9qc2FwaS5oIgpleHRlcm4gSlNTdHJpbmcgKgpKU19OZXdTdHJpbmco
SlNDb250ZXh0ICpjeCwgY2hhciAqYnl0ZXMsIHNpemVfdCBsZW5ndGgpOwoKZXh0ZXJuIEpTU3Ry
aW5nICoKSlNfTmV3U3RyaW5nQ29weU4oSlNDb250ZXh0ICpjeCwgY29uc3QgY2hhciAqcywgc2l6
ZV90IG4pOwoKZXh0ZXJuIEpTU3RyaW5nICoKSlNfTmV3U3RyaW5nQ29weVooSlNDb250ZXh0ICpj
eCwgY29uc3QgY2hhciAqcyk7CgpleHRlcm4gSlNTdHJpbmcgKgpKU19JbnRlcm5TdHJpbmcoSlND
b250ZXh0ICpjeCwgY29uc3QgY2hhciAqcyk7CgpleHRlcm4gSlNTdHJpbmcgKgpKU19OZXdVQ1N0
cmluZyhKU0NvbnRleHQgKmN4LCBqc2NoYXIgKmNoYXJzLCBzaXplX3QgbGVuZ3RoKTsKCmV4dGVy
biBKU1N0cmluZyAqCkpTX05ld1VDU3RyaW5nQ29weU4oSlNDb250ZXh0ICpjeCwgY29uc3QganNj
aGFyICpzLCBzaXplX3Qgbik7CgpleHRlcm4gSlNTdHJpbmcgKgpKU19OZXdVQ1N0cmluZ0NvcHla
KEpTQ29udGV4dCAqY3gsIGNvbnN0IGpzY2hhciAqcyk7CgpleHRlcm4gSlNTdHJpbmcgKgpKU19J
bnRlcm5VQ1N0cmluZ04oSlNDb250ZXh0ICpjeCwgY29uc3QganNjaGFyICpzLCBzaXplX3QgbGVu
Z3RoKTsKCmV4dGVybiBKU1N0cmluZyAqCkpTX0ludGVyblVDU3RyaW5nKEpTQ29udGV4dCAqY3gs
IGNvbnN0IGpzY2hhciAqcyk7CgpleHRlcm4gY2hhciAqCkpTX0dldFN0cmluZ0J5dGVzKEpTU3Ry
aW5nICpzdHIpOwoKZXh0ZXJuIGpzY2hhciAqCkpTX0dldFN0cmluZ0NoYXJzKEpTU3RyaW5nICpz
dHIpOwoKZXh0ZXJuIHNpemVfdApKU19HZXRTdHJpbmdMZW5ndGgoSlNTdHJpbmcgKnN0cik7Cgpl
eHRlcm4gaW50TgpKU19Db21wYXJlU3RyaW5ncyhKU1N0cmluZyAqc3RyMSwgSlNTdHJpbmcgKnN0
cjIpOwoKCgoKCgpzdHJ1Y3QgSlNMb2NhbGVDYWxsYmFja3MgewogICAgSlNMb2NhbGVUb1VwcGVy
Q2FzZSBsb2NhbGVUb1VwcGVyQ2FzZTsKICAgIEpTTG9jYWxlVG9Mb3dlckNhc2UgbG9jYWxlVG9M
b3dlckNhc2U7CiAgICBKU0xvY2FsZUNvbXBhcmUgbG9jYWxlQ29tcGFyZTsKfTsKCgoKCgpleHRl
cm4gdm9pZApKU19TZXRMb2NhbGVDYWxsYmFja3MoSlNDb250ZXh0ICpjeCwgSlNMb2NhbGVDYWxs
YmFja3MgKmNhbGxiYWNrcyk7CgoKCgoKZXh0ZXJuIEpTTG9jYWxlQ2FsbGJhY2tzICoKSlNfR2V0
TG9jYWxlQ2FsbGJhY2tzKEpTQ29udGV4dCAqY3gpOwojIDEzODYgIi4uLy4uL2Rpc3QvaW5jbHVk
ZS9qc2FwaS5oIgpleHRlcm4gdm9pZApKU19SZXBvcnRFcnJvcihKU0NvbnRleHQgKmN4LCBjb25z
dCBjaGFyICpmb3JtYXQsIC4uLik7CgoKCgpleHRlcm4gdm9pZApKU19SZXBvcnRFcnJvck51bWJl
cihKU0NvbnRleHQgKmN4LCBKU0Vycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjaywKICAgICAgICAg
ICAgICAgICAgICAgdm9pZCAqdXNlclJlZiwgY29uc3QgdWludE4gZXJyb3JOdW1iZXIsIC4uLik7
CgoKCgpleHRlcm4gdm9pZApKU19SZXBvcnRFcnJvck51bWJlclVDKEpTQ29udGV4dCAqY3gsIEpT
RXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICB2b2lkICp1
c2VyUmVmLCBjb25zdCB1aW50TiBlcnJvck51bWJlciwgLi4uKTsKCgoKCgoKCmV4dGVybiBKU0Jv
b2wKSlNfUmVwb3J0V2FybmluZyhKU0NvbnRleHQgKmN4LCBjb25zdCBjaGFyICpmb3JtYXQsIC4u
Lik7CgpleHRlcm4gSlNCb29sCkpTX1JlcG9ydEVycm9yRmxhZ3NBbmROdW1iZXIoSlNDb250ZXh0
ICpjeCwgdWludE4gZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNFcnJvckNh
bGxiYWNrIGVycm9yQ2FsbGJhY2ssIHZvaWQgKnVzZXJSZWYsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgdWludE4gZXJyb3JOdW1iZXIsIC4uLik7CgpleHRlcm4gSlNCb29sCkpT
X1JlcG9ydEVycm9yRmxhZ3NBbmROdW1iZXJVQyhKU0NvbnRleHQgKmN4LCB1aW50TiBmbGFncywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTRXJyb3JDYWxsYmFjayBlcnJvckNhbGxi
YWNrLCB2b2lkICp1c2VyUmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dWludE4gZXJyb3JOdW1iZXIsIC4uLik7CgoKCgpleHRlcm4gdm9pZApKU19SZXBvcnRPdXRPZk1l
bW9yeShKU0NvbnRleHQgKmN4KTsKCnN0cnVjdCBKU0Vycm9yUmVwb3J0IHsKICAgIGNvbnN0IGNo
YXIgKmZpbGVuYW1lOwogICAgdWludE4gbGluZW5vOwogICAgY29uc3QgY2hhciAqbGluZWJ1ZjsK
ICAgIGNvbnN0IGNoYXIgKnRva2VucHRyOwogICAgY29uc3QganNjaGFyICp1Y2xpbmVidWY7CiAg
ICBjb25zdCBqc2NoYXIgKnVjdG9rZW5wdHI7CiAgICB1aW50TiBmbGFnczsKICAgIHVpbnROIGVy
cm9yTnVtYmVyOwogICAgY29uc3QganNjaGFyICp1Y21lc3NhZ2U7CiAgICBjb25zdCBqc2NoYXIg
KiptZXNzYWdlQXJnczsKfTsKIyAxNDYwICIuLi8uLi9kaXN0L2luY2x1ZGUvanNhcGkuaCIKZXh0
ZXJuIEpTRXJyb3JSZXBvcnRlcgpKU19TZXRFcnJvclJlcG9ydGVyKEpTQ29udGV4dCAqY3gsIEpT
RXJyb3JSZXBvcnRlciBlcik7CiMgMTQ3MiAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzYXBpLmgiCmV4
dGVybiBKU09iamVjdCAqCkpTX05ld1JlZ0V4cE9iamVjdChKU0NvbnRleHQgKmN4LCBjaGFyICpi
eXRlcywgc2l6ZV90IGxlbmd0aCwgdWludE4gZmxhZ3MpOwoKZXh0ZXJuIEpTT2JqZWN0ICoKSlNf
TmV3VUNSZWdFeHBPYmplY3QoSlNDb250ZXh0ICpjeCwganNjaGFyICpjaGFycywgc2l6ZV90IGxl
bmd0aCwgdWludE4gZmxhZ3MpOwoKZXh0ZXJuIHZvaWQKSlNfU2V0UmVnRXhwSW5wdXQoSlNDb250
ZXh0ICpjeCwgSlNTdHJpbmcgKmlucHV0LCBKU0Jvb2wgbXVsdGlsaW5lKTsKCmV4dGVybiB2b2lk
CkpTX0NsZWFyUmVnRXhwU3RhdGljcyhKU0NvbnRleHQgKmN4KTsKCmV4dGVybiB2b2lkCkpTX0Ns
ZWFyUmVnRXhwUm9vdHMoSlNDb250ZXh0ICpjeCk7CgoKCgoKZXh0ZXJuIEpTQm9vbApKU19Jc0V4
Y2VwdGlvblBlbmRpbmcoSlNDb250ZXh0ICpjeCk7CgpleHRlcm4gSlNCb29sCkpTX0dldFBlbmRp
bmdFeGNlcHRpb24oSlNDb250ZXh0ICpjeCwganN2YWwgKnZwKTsKCmV4dGVybiB2b2lkCkpTX1Nl
dFBlbmRpbmdFeGNlcHRpb24oSlNDb250ZXh0ICpjeCwganN2YWwgdik7CgpleHRlcm4gdm9pZApK
U19DbGVhclBlbmRpbmdFeGNlcHRpb24oSlNDb250ZXh0ICpjeCk7CiMgMTUxNCAiLi4vLi4vZGlz
dC9pbmNsdWRlL2pzYXBpLmgiCmV4dGVybiBKU0V4Y2VwdGlvblN0YXRlICoKSlNfU2F2ZUV4Y2Vw
dGlvblN0YXRlKEpTQ29udGV4dCAqY3gpOwoKZXh0ZXJuIHZvaWQKSlNfUmVzdG9yZUV4Y2VwdGlv
blN0YXRlKEpTQ29udGV4dCAqY3gsIEpTRXhjZXB0aW9uU3RhdGUgKnN0YXRlKTsKCmV4dGVybiB2
b2lkCkpTX0Ryb3BFeGNlcHRpb25TdGF0ZShKU0NvbnRleHQgKmN4LCBKU0V4Y2VwdGlvblN0YXRl
ICpzdGF0ZSk7CgoKCgoKCgpleHRlcm4gSlNFcnJvclJlcG9ydCAqCkpTX0Vycm9yRnJvbUV4Y2Vw
dGlvbihKU0NvbnRleHQgKmN4LCBqc3ZhbCB2KTsKIyAxNTQ0ICIuLi8uLi9kaXN0L2luY2x1ZGUv
anNhcGkuaCIKZXh0ZXJuIGludE4KSlNfR2V0Q29udGV4dFRocmVhZChKU0NvbnRleHQgKmN4KTsK
CmV4dGVybiBpbnROCkpTX1NldENvbnRleHRUaHJlYWQoSlNDb250ZXh0ICpjeCk7CgpleHRlcm4g
aW50TgpKU19DbGVhckNvbnRleHRUaHJlYWQoSlNDb250ZXh0ICpjeCk7CgoKCgoKfQojIDM0ICJu
c0luc3RhbGwuaCIgMgoKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvcGxldmVudC5oIiAxCiMgMTY4
ICIuLi8uLi9kaXN0L2luY2x1ZGUvcGxldmVudC5oIgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxs
YS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyAxNjkgIi4uLy4uL2Rpc3QvaW5jbHVk
ZS9wbGV2ZW50LmgiIDIKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25z
cHIvcHJjbGlzdC5oIiAxCiMgMTcwICIuLi8uLi9kaXN0L2luY2x1ZGUvcGxldmVudC5oIiAyCiMg
MSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGhyZWFkLmgiIDEK
IyAxNzEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9wbGV2ZW50LmgiIDIKIyAxICIvdXNyL3NyYy9taXNj
L21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJsb2NrLmgiIDEKIyAxNzIgIi4uLy4uL2Rpc3Qv
aW5jbHVkZS9wbGV2ZW50LmgiIDIKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNs
dWRlL25zcHIvcHJjdmFyLmgiIDEKIyAxNzMgIi4uLy4uL2Rpc3QvaW5jbHVkZS9wbGV2ZW50Lmgi
IDIKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJtb24uaCIg
MQojIDE3NCAiLi4vLi4vZGlzdC9pbmNsdWRlL3BsZXZlbnQuaCIgMgojIDE4NiAiLi4vLi4vZGlz
dC9pbmNsdWRlL3BsZXZlbnQuaCIKZXh0ZXJuICJDIiB7CgoKCnR5cGVkZWYgc3RydWN0IFBMRXZl
bnQgUExFdmVudDsKdHlwZWRlZiBzdHJ1Y3QgUExFdmVudFF1ZXVlIFBMRXZlbnRRdWV1ZTsKIyAy
MDAgIi4uLy4uL2Rpc3QvaW5jbHVkZS9wbGV2ZW50LmgiCmV4dGVybiBQTEV2ZW50UXVldWUqClBM
X0NyZWF0ZUV2ZW50UXVldWUoY2hhciogbmFtZSwgUFJUaHJlYWQqIGhhbmRsZXJUaHJlYWQpOwoj
IDIzMiAiLi4vLi4vZGlzdC9pbmNsdWRlL3BsZXZlbnQuaCIKZXh0ZXJuIFBMRXZlbnRRdWV1ZSAq
CiAgICBQTF9DcmVhdGVOYXRpdmVFdmVudFF1ZXVlKAogICAgICAgIGNoYXIgKm5hbWUsCiAgICAg
ICAgUFJUaHJlYWQgKmhhbmRsZXJUaHJlYWQKICAgICk7CiMgMjYxICIuLi8uLi9kaXN0L2luY2x1
ZGUvcGxldmVudC5oIgpleHRlcm4gUExFdmVudFF1ZXVlICoKICAgIFBMX0NyZWF0ZU1vbml0b3Jl
ZEV2ZW50UXVldWUoCiAgICAgICAgY2hhciAqbmFtZSwKICAgICAgICBQUlRocmVhZCAqaGFuZGxl
clRocmVhZAogICAgKTsKCgoKCmV4dGVybiB2b2lkClBMX0Rlc3Ryb3lFdmVudFF1ZXVlKFBMRXZl
bnRRdWV1ZSogc2VsZik7CgoKCgoKCgpleHRlcm4gUFJNb25pdG9yKgpQTF9HZXRFdmVudFF1ZXVl
TW9uaXRvcihQTEV2ZW50UXVldWUqIHNlbGYpOwojIDI5NiAiLi4vLi4vZGlzdC9pbmNsdWRlL3Bs
ZXZlbnQuaCIKZXh0ZXJuIFBSU3RhdHVzClBMX1Bvc3RFdmVudChQTEV2ZW50UXVldWUqIHNlbGYs
IFBMRXZlbnQqIGV2ZW50KTsKIyAzMDggIi4uLy4uL2Rpc3QvaW5jbHVkZS9wbGV2ZW50LmgiCmV4
dGVybiB2b2lkKgpQTF9Qb3N0U3luY2hyb25vdXNFdmVudChQTEV2ZW50UXVldWUqIHNlbGYsIFBM
RXZlbnQqIGV2ZW50KTsKCgoKCgpleHRlcm4gUExFdmVudCoKUExfR2V0RXZlbnQoUExFdmVudFF1
ZXVlKiBzZWxmKTsKCgoKCmV4dGVybiBQUkJvb2wKUExfRXZlbnRBdmFpbGFibGUoUExFdmVudFF1
ZXVlKiBzZWxmKTsKCgoKCgp0eXBlZGVmIHZvaWQKKCAqUExFdmVudEZ1blByb2MpKFBMRXZlbnQq
IGV2ZW50LCB2b2lkKiBkYXRhLCBQTEV2ZW50UXVldWUqIHF1ZXVlKTsKCgoKCgoKZXh0ZXJuIHZv
aWQKUExfTWFwRXZlbnRzKFBMRXZlbnRRdWV1ZSogc2VsZiwgUExFdmVudEZ1blByb2MgZnVuLCB2
b2lkKiBkYXRhKTsKCgoKCgpleHRlcm4gdm9pZApQTF9SZXZva2VFdmVudHMoUExFdmVudFF1ZXVl
KiBzZWxmLCB2b2lkKiBvd25lcik7CgoKCgoKCmV4dGVybiB2b2lkClBMX1Byb2Nlc3NQZW5kaW5n
RXZlbnRzKFBMRXZlbnRRdWV1ZSogc2VsZik7CiMgMzY1ICIuLi8uLi9kaXN0L2luY2x1ZGUvcGxl
dmVudC5oIgpleHRlcm4gUExFdmVudCoKUExfV2FpdEZvckV2ZW50KFBMRXZlbnRRdWV1ZSogc2Vs
Zik7CgoKCgoKCmV4dGVybiB2b2lkClBMX0V2ZW50TG9vcChQTEV2ZW50UXVldWUqIHNlbGYpOwoj
IDM4OCAiLi4vLi4vZGlzdC9pbmNsdWRlL3BsZXZlbnQuaCIKZXh0ZXJuIFBSSW50MzIKUExfR2V0
RXZlbnRRdWV1ZVNlbGVjdEZEKFBMRXZlbnRRdWV1ZSogc2VsZik7CgoKCgoKCmV4dGVybiBQUkJv
b2wKICAgIFBMX0lzUXVldWVPbkN1cnJlbnRUaHJlYWQoIFBMRXZlbnRRdWV1ZSAqcXVldWUgKTsK
CgoKCmV4dGVybiBQUkJvb2wKUExfSXNRdWV1ZU5hdGl2ZShQTEV2ZW50UXVldWUgKnF1ZXVlKTsK
IyA0MTUgIi4uLy4uL2Rpc3QvaW5jbHVkZS9wbGV2ZW50LmgiCnR5cGVkZWYgdm9pZCoKKCAqUExI
YW5kbGVFdmVudFByb2MpKFBMRXZlbnQqIHNlbGYpOwoKCgoKCgp0eXBlZGVmIHZvaWQKKCAqUExE
ZXN0cm95RXZlbnRQcm9jKShQTEV2ZW50KiBzZWxmKTsKCgoKCgoKZXh0ZXJuIHZvaWQKUExfSW5p
dEV2ZW50KFBMRXZlbnQqIHNlbGYsIHZvaWQqIG93bmVyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgUExIYW5kbGVFdmVudFByb2MgaGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgIFBM
RGVzdHJveUV2ZW50UHJvYyBkZXN0cnVjdG9yKTsKCgoKCmV4dGVybiB2b2lkKgpQTF9HZXRFdmVu
dE93bmVyKFBMRXZlbnQqIHNlbGYpOwoKCgoKZXh0ZXJuIHZvaWQKUExfSGFuZGxlRXZlbnQoUExF
dmVudCogc2VsZik7CgoKCgpleHRlcm4gdm9pZApQTF9EZXN0cm95RXZlbnQoUExFdmVudCogc2Vs
Zik7CgoKCgpleHRlcm4gdm9pZApQTF9EZXF1ZXVlRXZlbnQoUExFdmVudCogc2VsZiwgUExFdmVu
dFF1ZXVlKiBxdWV1ZSk7CgoKCgoKc3RydWN0IFBMRXZlbnQgewogICAgUFJDTGlzdCBsaW5rOwog
ICAgUExIYW5kbGVFdmVudFByb2MgaGFuZGxlcjsKICAgIFBMRGVzdHJveUV2ZW50UHJvYyBkZXN0
cnVjdG9yOwogICAgdm9pZCogb3duZXI7CiAgICB2b2lkKiBzeW5jaHJvbm91c1Jlc3VsdDsKICAg
IFBSTG9jayogbG9jazsKICAgIFBSQ29uZFZhciogY29uZFZhcjsKICAgIFBSQm9vbCBoYW5kbGVk
OwoKCgoKICAgIHVuc2lnbmVkIGxvbmcgaWQ7CgoKfTsKIyA1MzEgIi4uLy4uL2Rpc3QvaW5jbHVk
ZS9wbGV2ZW50LmgiCmV4dGVybiBQUkludDMyClBMX1Byb2Nlc3NFdmVudHNCZWZvcmVJRChQTEV2
ZW50UXVldWUgKmFTZWxmLCB1bnNpZ25lZCBsb25nIGFJRCk7CgoKCgp0eXBlZGVmIHVuc2lnbmVk
IGxvbmcKKCAqUExHZXRFdmVudElERnVuYykodm9pZCAqYUNsb3N1cmUpOwojIDU1OCAiLi4vLi4v
ZGlzdC9pbmNsdWRlL3BsZXZlbnQuaCIKZXh0ZXJuIHZvaWQKUExfUmVnaXN0ZXJFdmVudElERnVu
YyhQTEV2ZW50UXVldWUgKmFTZWxmLCBQTEdldEV2ZW50SURGdW5jIGFGdW5jLAogICAgICAgICAg
ICAgICAgICAgICAgIHZvaWQgKmFDbG9zdXJlKTsKIyA1NzcgIi4uLy4uL2Rpc3QvaW5jbHVkZS9w
bGV2ZW50LmgiCmV4dGVybiB2b2lkClBMX1VucmVnaXN0ZXJFdmVudElERnVuYyhQTEV2ZW50UXVl
dWUgKmFTZWxmKTsKIyA2MjEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9wbGV2ZW50LmgiCn0KIyAzNiAi
bnNJbnN0YWxsLmgiIDIKCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiIDEKIyA0
NiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRl
L25zU3RyaW5nMi5oIiAxCiMgNDcgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIuaCIKIyAx
ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAxCiMg
NDggIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5j
bHVkZS9uc2NvcmUuaCIgMQojIDQ5ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiIDIK
IyAxICIvdXNyL2djYy1wcmUzLjAvbGliL2djYy1saWIvaWE2NC1ocC1saW51eC8zLjAvaW5jbHVk
ZS9zdGRpby5oIiAxIDMKIyA1MCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIiAyCiMg
MSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiIDEKIyA1MSAiLi4vLi4vZGlzdC9pbmNs
dWRlL25zU3RyaW5nMi5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUF0b20uaCIgMQoj
IDE3ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJQXRvbS5oIgpjbGFzcyBuc0lTaXplT2ZIYW5kbGVy
OwoKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNBV3JpdGFibGVTdHJpbmcuaCIgMQojIDMwICIu
Li8uLi9kaXN0L2luY2x1ZGUvbnNBV3JpdGFibGVTdHJpbmcuaCIKIyAxICIuLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNBUmVhZGFibGVTdHJpbmcuaCIgMQojIDMwICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNB
UmVhZGFibGVTdHJpbmcuaCIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNBU3RyaW5nLmgiIDEK
IyAyOCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQVN0cmluZy5oIgojIDEgIi4uLy4uL2Rpc3QvaW5j
bHVkZS9uc1N0cmluZ0Z3ZC5oIiAxCiMgMzQgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZ0Z3
ZC5oIgpjbGFzcyBuc0FTdHJpbmc7CmNsYXNzIG5zQUNTdHJpbmc7CgoKCgoKCmNsYXNzIG5zQVBy
b21pc2VTdHJpbmc7CmNsYXNzIG5zQVByb21pc2VDU3RyaW5nOwoKCgoKCgpjbGFzcyBuc0FGbGF0
U3RyaW5nOwpjbGFzcyBuc0FGbGF0Q1N0cmluZzsKCgoKCgoKY2xhc3MgbnNEZXBlbmRlbnRTdHJp
bmc7CmNsYXNzIG5zRGVwZW5kZW50Q1N0cmluZzsKIyAyOSAiLi4vLi4vZGlzdC9pbmNsdWRlL25z
QVN0cmluZy5oIiAyCgoKCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zUHJpdmF0ZVNoYXJhYmxl
U3RyaW5nLmgiIDEKIyAyOSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zUHJpdmF0ZVNoYXJhYmxlU3Ry
aW5nLmgiCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQnVmZmVySGFuZGxlLmgiIDEKIyAzMCAi
Li4vLi4vZGlzdC9pbmNsdWRlL25zQnVmZmVySGFuZGxlLmgiCiMgMSAiL3Vzci9nY2MtcHJlMy4w
L2xpYi9nY2MtbGliL2lhNjQtaHAtbGludXgvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMx
ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNCdWZmZXJIYW5kbGUuaCIgMgoKCiMgMSAiL3Vzci9zcmMv
bWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQojIDM0ICIuLi8uLi9k
aXN0L2luY2x1ZGUvbnNCdWZmZXJIYW5kbGUuaCIgMgoKCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRl
L25zRGVidWcuaCIgMQojIDM3ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNCdWZmZXJIYW5kbGUuaCIg
MgoKCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5oIiAxCiMgNDAgIi4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0J1ZmZlckhhbmRsZS5oIiAyCiMgODAgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0J1
ZmZlckhhbmRsZS5oIgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmNsYXNzIG5zQnVmZmVySGFuZGxl
CiAgewogICAgcHVibGljOgogICAgICBuc0J1ZmZlckhhbmRsZSgpIHsgfQogICAgICBuc0J1ZmZl
ckhhbmRsZSggQ2hhclQqIGFEYXRhU3RhcnQsIENoYXJUKiBhRGF0YUVuZCApIDogbURhdGFTdGFy
dChhRGF0YVN0YXJ0KSwgbURhdGFFbmQoYURhdGFFbmQpIHsgfQoKICAgICAgdm9pZCBEYXRhU3Rh
cnQoIENoYXJUKiBhTmV3RGF0YVN0YXJ0ICkgeyBtRGF0YVN0YXJ0ID0gYU5ld0RhdGFTdGFydDsg
fQogICAgICBDaGFyVCogRGF0YVN0YXJ0KCkgeyByZXR1cm4gbURhdGFTdGFydDsgfQogICAgICBj
b25zdCBDaGFyVCogRGF0YVN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbURhdGFTdGFydDsgfQoKICAg
ICAgdm9pZCBEYXRhRW5kKCBDaGFyVCogYU5ld0RhdGFFbmQgKSB7IG1EYXRhRW5kID0gYU5ld0Rh
dGFFbmQ7IH0KICAgICAgQ2hhclQqIERhdGFFbmQoKSB7IHJldHVybiBtRGF0YUVuZDsgfQogICAg
ICBjb25zdCBDaGFyVCogRGF0YUVuZCgpIGNvbnN0IHsgcmV0dXJuIG1EYXRhRW5kOyB9CgogICAg
ICBwdHJkaWZmX3QgRGF0YUxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1EYXRhRW5kIC0gbURhdGFT
dGFydDsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgQ2hhclQqIG1EYXRhU3RhcnQ7CiAgICAgIENo
YXJUKiBtRGF0YUVuZDsKICB9OwoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgpjbGFzcyBuc0NvbnN0
QnVmZmVySGFuZGxlCiAgewogICAgcHVibGljOgogICAgICBuc0NvbnN0QnVmZmVySGFuZGxlKCkg
eyB9CiAgICAgIG5zQ29uc3RCdWZmZXJIYW5kbGUoIGNvbnN0IENoYXJUKiBhRGF0YVN0YXJ0LCBj
b25zdCBDaGFyVCogYURhdGFFbmQgKSA6IG1EYXRhU3RhcnQoYURhdGFTdGFydCksIG1EYXRhRW5k
KGFEYXRhRW5kKSB7IH0KCiAgICAgIHZvaWQgRGF0YVN0YXJ0KCBjb25zdCBDaGFyVCogYU5ld0Rh
dGFTdGFydCApIHsgbURhdGFTdGFydCA9IGFOZXdEYXRhU3RhcnQ7IH0KICAgICAgY29uc3QgQ2hh
clQqIERhdGFTdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1EYXRhU3RhcnQ7IH0KCiAgICAgIHZvaWQg
RGF0YUVuZCggY29uc3QgQ2hhclQqIGFOZXdEYXRhRW5kICkgeyBtRGF0YUVuZCA9IGFOZXdEYXRh
RW5kOyB9CiAgICAgIGNvbnN0IENoYXJUKiBEYXRhRW5kKCkgY29uc3QgeyByZXR1cm4gbURhdGFF
bmQ7IH0KCiAgICAgIHB0cmRpZmZfdCBEYXRhTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbURhdGFF
bmQgLSBtRGF0YVN0YXJ0OyB9CgogICAgcHJvdGVjdGVkOgogICAgICBjb25zdCBDaGFyVCogbURh
dGFTdGFydDsKICAgICAgY29uc3QgQ2hhclQqIG1EYXRhRW5kOwogIH07CgoKCgoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgQ2hhclQ+CmNsYXNzIG5zU3RyaW5nQWxsb2NhdG9yCiAgewogICAgcHVibGljOgoK
ICAgICAgdmlydHVhbCB2b2lkIERlYWxsb2NhdGUoIENoYXJUKiApIGNvbnN0ID0gMDsKICB9OwoK
CgoKICAgICAgIG5zU3RyaW5nQWxsb2NhdG9yPGNoYXI+JiBTdHJpbmdBbGxvY2F0b3JfY2hhcigp
OwogICAgICAgbnNTdHJpbmdBbGxvY2F0b3I8UFJVbmljaGFyPiYgU3RyaW5nQWxsb2NhdG9yX3dj
aGFyX3QoKTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4Kc3RydWN0IG5zU3RyaW5nQWxsb2NhdG9y
VHJhaXRzCiAgewogIH07Cgp0ZW1wbGF0ZSA8PgpzdHJ1Y3QgbnNTdHJpbmdBbGxvY2F0b3JUcmFp
dHM8Y2hhcj4KICB7CiAgICBzdGF0aWMgbnNTdHJpbmdBbGxvY2F0b3I8Y2hhcj4mIGdsb2JhbF9z
dHJpbmdfYWxsb2NhdG9yKCkgeyByZXR1cm4gU3RyaW5nQWxsb2NhdG9yX2NoYXIoKTsgfQogIH07
Cgp0ZW1wbGF0ZSA8PgpzdHJ1Y3QgbnNTdHJpbmdBbGxvY2F0b3JUcmFpdHM8UFJVbmljaGFyPgog
IHsKICAgIHN0YXRpYyBuc1N0cmluZ0FsbG9jYXRvcjxQUlVuaWNoYXI+JiBnbG9iYWxfc3RyaW5n
X2FsbG9jYXRvcigpIHsgcmV0dXJuIFN0cmluZ0FsbG9jYXRvcl93Y2hhcl90KCk7IH0KICB9Owoj
IDE3MCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQnVmZmVySGFuZGxlLmgiCnRlbXBsYXRlIDxjbGFz
cyBDaGFyVD4KY2xhc3MgbnNTaGFyZWRCdWZmZXJIYW5kbGUKICAgIDogcHVibGljIG5zQnVmZmVy
SGFuZGxlPENoYXJUPgogIHsKICAgIHByb3RlY3RlZDoKICAgICAgZW51bQogICAgICAgIHsKICAg
ICAgICAgIGtJc1NoYXJlZCA9IDB4MDgwMDAwMDAsCiAgICAgICAgICBrSXNTaW5nbGVBbGxvY2F0
aW9uV2l0aEJ1ZmZlciA9IDB4MDQwMDAwMDAsCiAgICAgICAgICBrSXNTdG9yYWdlRGVmaW5lZFNl
cGFyYXRlbHkgPSAweDAyMDAwMDAwLAogICAgICAgICAga0lzVXNlckFsbG9jYXRvciA9IDB4MDEw
MDAwMDAsCgoKICAgICAgICAgIGtJc05VTEwgPSAweDgwMDAwMDAwLAogICAgICAgICAga0ltcGxl
bWVudGF0aW9uRmxhZ3NNYXNrID0gMHhGMDAwMDAwMCwKCiAgICAgICAgICBrRmxhZ3NNYXNrID0g
MHhGRjAwMDAwMCwKICAgICAgICAgIGtSZWZDb3VudE1hc2sgPSAweDAwRkZGRkZGCiAgICAgICAg
fTsKCiAgICBwdWJsaWM6CiAgICAgIG5zU2hhcmVkQnVmZmVySGFuZGxlKCBDaGFyVCogYURhdGFT
dGFydCwgQ2hhclQqIGFEYXRhRW5kICkKICAgICAgICAgIDogbnNCdWZmZXJIYW5kbGU8Q2hhclQ+
KGFEYXRhU3RhcnQsIGFEYXRhRW5kKQogICAgICAgIHsKICAgICAgICAgIG1GbGFncyA9IGtJc1No
YXJlZDsKICAgICAgICB9CgogICAgICBuc1NoYXJlZEJ1ZmZlckhhbmRsZSggQ2hhclQqIGFEYXRh
U3RhcnQsIENoYXJUKiBhRGF0YUVuZCwgQ2hhclQqLCBDaGFyVCosIFBSQm9vbCBpc1NpbmdsZUFs
bG9jYXRpb24gKQogICAgICAgICAgOiBuc0J1ZmZlckhhbmRsZTxDaGFyVD4oYURhdGFTdGFydCwg
YURhdGFFbmQpCiAgICAgICAgewogICAgICAgICAgbUZsYWdzID0ga0lzU2hhcmVkOwogICAgICAg
ICAgaWYgKCBpc1NpbmdsZUFsbG9jYXRpb24gKQogICAgICAgICAgICBtRmxhZ3MgfD0ga0lzU2lu
Z2xlQWxsb2NhdGlvbldpdGhCdWZmZXI7CiAgICAgICAgfQoKICAgICAgfm5zU2hhcmVkQnVmZmVy
SGFuZGxlKCk7CgogICAgICB2b2lkCiAgICAgIEFjcXVpcmVSZWZlcmVuY2UoKSBjb25zdAogICAg
ICAgIHsKICAgICAgICAgIG5zU2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPiogbXV0YWJsZV90aGlz
ID0gY29uc3RfY2FzdDwgbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+KiA+KHRoaXMpOwogICAg
ICAgICAgbXV0YWJsZV90aGlzLT5zZXRfcmVmY291bnQoIGdldF9yZWZjb3VudCgpKzEgKTsKICAg
ICAgICB9CgogICAgICB2b2lkCiAgICAgIFJlbGVhc2VSZWZlcmVuY2UoKSBjb25zdAogICAgICAg
IHsKICAgICAgICAgIG5zU2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPiogbXV0YWJsZV90aGlzID0g
Y29uc3RfY2FzdDwgbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+KiA+KHRoaXMpOwogICAgICAg
ICAgaWYgKCAhbXV0YWJsZV90aGlzLT5zZXRfcmVmY291bnQoIGdldF9yZWZjb3VudCgpLTEgKSAp
CiAgICAgICAgICAgIGRlbGV0ZSBtdXRhYmxlX3RoaXM7CgogICAgICAgIH0KCiAgICAgIFBSQm9v
bAogICAgICBJc1JlZmVyZW5jZWQoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVybiBn
ZXRfcmVmY291bnQoKSAhPSAwOwogICAgICAgIH0KCiAgICAgIFBSVWludDMyCiAgICAgIEdldElt
cGxlbWVudGF0aW9uRmxhZ3MoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVybiBtRmxh
Z3MgJiBrSW1wbGVtZW50YXRpb25GbGFnc01hc2s7CiAgICAgICAgfQoKICAgICAgdm9pZAogICAg
ICBTZXRJbXBsZW1lbnRhdGlvbkZsYWdzKCBQUlVpbnQzMiBhTmV3RmxhZ3MgKQogICAgICAgIHsK
ICAgICAgICAgIG1GbGFncyA9IChtRmxhZ3MgJiB+a0ltcGxlbWVudGF0aW9uRmxhZ3NNYXNrKSB8
IChhTmV3RmxhZ3MgJiBrSW1wbGVtZW50YXRpb25GbGFnc01hc2spOwogICAgICAgIH0KCiAgICBw
cm90ZWN0ZWQ6CiAgICAgIFBSVWludDMyIG1GbGFnczsKCiAgICAgIFBSVWludDMyCiAgICAgIGdl
dF9yZWZjb3VudCgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIG1GbGFncyAmIGtS
ZWZDb3VudE1hc2s7CiAgICAgICAgfQoKICAgICAgUFJVaW50MzIKICAgICAgc2V0X3JlZmNvdW50
KCBQUlVpbnQzMiBhTmV3UmVmQ291bnQgKQogICAgICAgIHsKICAgICAgICAgIGlmICghKGFOZXdS
ZWZDb3VudCA8PSBrUmVmQ291bnRNYXNrKSkgbnNEZWJ1Zzo6QXNzZXJ0aW9uKCJhTmV3UmVmQ291
bnQgPD0ga1JlZkNvdW50TWFzayIsICJhTmV3UmVmQ291bnQgPD0ga1JlZkNvdW50TWFzayIsICIu
Li8uLi9kaXN0L2luY2x1ZGUvbnNCdWZmZXJIYW5kbGUuaCIsIDI1Myk7CgogICAgICAgICAgbUZs
YWdzID0gKG1GbGFncyAmIGtGbGFnc01hc2spIHwgYU5ld1JlZkNvdW50OwogICAgICAgICAgcmV0
dXJuIGFOZXdSZWZDb3VudDsKICAgICAgICB9CgogICAgICBuc1N0cmluZ0FsbG9jYXRvcjxDaGFy
VD4mIGdldF9hbGxvY2F0b3IoKSBjb25zdDsKICB9OwoKCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4K
Y2xhc3MgbnNGbGV4QnVmZmVySGFuZGxlCiAgICA6IHB1YmxpYyBuc1NoYXJlZEJ1ZmZlckhhbmRs
ZTxDaGFyVD4KICB7CiAgICBwdWJsaWM6CiAgICAgIG5zRmxleEJ1ZmZlckhhbmRsZSggQ2hhclQq
IGFEYXRhU3RhcnQsIENoYXJUKiBhRGF0YUVuZCwgQ2hhclQqIGFTdG9yYWdlU3RhcnQsIENoYXJU
KiBhU3RvcmFnZUVuZCApCiAgICAgICAgICA6IG5zU2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPihh
RGF0YVN0YXJ0LCBhRGF0YUVuZCksCiAgICAgICAgICAgIG1TdG9yYWdlU3RhcnQoYVN0b3JhZ2VT
dGFydCksCiAgICAgICAgICAgIG1TdG9yYWdlRW5kKGFTdG9yYWdlRW5kKQogICAgICAgIHsKICAg
ICAgICAgIHRoaXMtPm1GbGFncyB8PSB0aGlzLT5rSXNTdG9yYWdlRGVmaW5lZFNlcGFyYXRlbHk7
CiAgICAgICAgfQoKICAgICAgdm9pZCBTdG9yYWdlU3RhcnQoIENoYXJUKiBhTmV3U3RvcmFnZVN0
YXJ0ICkgeyBtU3RvcmFnZVN0YXJ0ID0gYU5ld1N0b3JhZ2VTdGFydDsgfQogICAgICBDaGFyVCog
U3RvcmFnZVN0YXJ0KCkgeyByZXR1cm4gbVN0b3JhZ2VTdGFydDsgfQogICAgICBjb25zdCBDaGFy
VCogU3RvcmFnZVN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbVN0b3JhZ2VTdGFydDsgfQoKICAgICAg
dm9pZCBTdG9yYWdlRW5kKCBDaGFyVCogYU5ld1N0b3JhZ2VFbmQgKSB7IG1TdG9yYWdlRW5kID0g
YU5ld1N0b3JhZ2VFbmQ7IH0KICAgICAgQ2hhclQqIFN0b3JhZ2VFbmQoKSB7IHJldHVybiBtU3Rv
cmFnZUVuZDsgfQogICAgICBjb25zdCBDaGFyVCogU3RvcmFnZUVuZCgpIGNvbnN0IHsgcmV0dXJu
IG1TdG9yYWdlRW5kOyB9CgogICAgICBwdHJkaWZmX3QgU3RvcmFnZUxlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIG1TdG9yYWdlRW5kIC0gbVN0b3JhZ2VTdGFydDsgfQoKICAgIHByb3RlY3RlZDoKICAg
ICAgQ2hhclQqIG1TdG9yYWdlU3RhcnQ7CiAgICAgIENoYXJUKiBtU3RvcmFnZUVuZDsKICB9OwoK
dGVtcGxhdGUgPGNsYXNzIENoYXJUPgpjbGFzcyBuc1NoYXJlZEJ1ZmZlckhhbmRsZVdpdGhBbGxv
Y2F0b3IKICAgIDogcHVibGljIG5zU2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPgogIHsKICAgIHB1
YmxpYzoKICAgICAgbnNTaGFyZWRCdWZmZXJIYW5kbGVXaXRoQWxsb2NhdG9yKCBDaGFyVCogYURh
dGFTdGFydCwgQ2hhclQqIGFEYXRhRW5kLCBuc1N0cmluZ0FsbG9jYXRvcjxDaGFyVD4mIGFBbGxv
Y2F0b3IgKQogICAgICAgICAgOiBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxDaGFyVD4oYURhdGFTdGFy
dCwgYURhdGFFbmQpLAogICAgICAgICAgICBtQWxsb2NhdG9yKGFBbGxvY2F0b3IpCiAgICAgICAg
ewogICAgICAgICAgdGhpcy0+bUZsYWdzIHw9IHRoaXMtPmtJc1VzZXJBbGxvY2F0b3I7CiAgICAg
ICAgfQoKICAgICAgbnNTdHJpbmdBbGxvY2F0b3I8Q2hhclQ+JiBnZXRfYWxsb2NhdG9yKCkgY29u
c3QgeyByZXR1cm4gbUFsbG9jYXRvcjsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgbnNTdHJpbmdB
bGxvY2F0b3I8Q2hhclQ+JiBtQWxsb2NhdG9yOwogIH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+
CmNsYXNzIG5zRmxleEJ1ZmZlckhhbmRsZVdpdGhBbGxvY2F0b3IKICAgIDogcHVibGljIG5zRmxl
eEJ1ZmZlckhhbmRsZTxDaGFyVD4KICB7CiAgICBwdWJsaWM6CiAgICAgIG5zRmxleEJ1ZmZlckhh
bmRsZVdpdGhBbGxvY2F0b3IoIENoYXJUKiBhRGF0YVN0YXJ0LCBDaGFyVCogYURhdGFFbmQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJUKiBhU3RvcmFnZVN0YXJ0
LCBDaGFyVCogYVN0b3JhZ2VFbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zU3RyaW5nQWxsb2NhdG9yPENoYXJUPiYgYUFsbG9jYXRvciApCiAgICAgICAgICA6IG5z
RmxleEJ1ZmZlckhhbmRsZTxDaGFyVD4oYURhdGFTdGFydCwgYURhdGFFbmQsIGFTdG9yYWdlU3Rh
cnQsIGFTdG9yYWdlRW5kKSwKICAgICAgICAgICAgbUFsbG9jYXRvcihhQWxsb2NhdG9yKQogICAg
ICAgIHsKICAgICAgICAgIHRoaXMtPm1GbGFncyB8PSB0aGlzLT5rSXNVc2VyQWxsb2NhdG9yOwog
ICAgICAgIH0KCiAgICAgIG5zU3RyaW5nQWxsb2NhdG9yPENoYXJUPiYgZ2V0X2FsbG9jYXRvcigp
IGNvbnN0IHsgcmV0dXJuIG1BbGxvY2F0b3I7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIG5zU3Ry
aW5nQWxsb2NhdG9yPENoYXJUPiYgbUFsbG9jYXRvcjsKICB9OwoKCnRlbXBsYXRlIDxjbGFzcyBD
aGFyVD4KbnNTdHJpbmdBbGxvY2F0b3I8Q2hhclQ+Jgpuc1NoYXJlZEJ1ZmZlckhhbmRsZTxDaGFy
VD46OmdldF9hbGxvY2F0b3IoKSBjb25zdAoKICB7CiAgICBpZiAoIG1GbGFncyAmIGtJc1VzZXJB
bGxvY2F0b3IgKQogICAgICB7CiAgICAgICAgaWYgKCBtRmxhZ3MgJiBrSXNTdG9yYWdlRGVmaW5l
ZFNlcGFyYXRlbHkgKQogICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IGNvbnN0IG5z
RmxleEJ1ZmZlckhhbmRsZVdpdGhBbGxvY2F0b3I8Q2hhclQ+KiA+KHRoaXMpLT5nZXRfYWxsb2Nh
dG9yKCk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IGNv
bnN0IG5zU2hhcmVkQnVmZmVySGFuZGxlV2l0aEFsbG9jYXRvcjxDaGFyVD4qID4odGhpcyktPmdl
dF9hbGxvY2F0b3IoKTsKICAgICAgfQoKICAgIHJldHVybiBuc1N0cmluZ0FsbG9jYXRvclRyYWl0
czxDaGFyVD46Omdsb2JhbF9zdHJpbmdfYWxsb2NhdG9yKCk7CiAgfQoKCnRlbXBsYXRlIDxjbGFz
cyBDaGFyVD4KbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+Ojp+bnNTaGFyZWRCdWZmZXJIYW5k
bGUoKQoKICB7CiAgICBpZiAoISghSXNSZWZlcmVuY2VkKCkpKSBuc0RlYnVnOjpBc3NlcnRpb24o
IiFJc1JlZmVyZW5jZWQoKSIsICIhSXNSZWZlcmVuY2VkKCkiLCAiLi4vLi4vZGlzdC9pbmNsdWRl
L25zQnVmZmVySGFuZGxlLmgiLCAzNTEpOwoKICAgIGlmICggIShtRmxhZ3MgJiBrSXNTaW5nbGVB
bGxvY2F0aW9uV2l0aEJ1ZmZlcikgKQogICAgICB7CiAgICAgICAgQ2hhclQqIHN0cmluZ19zdG9y
YWdlID0gdGhpcy0+bURhdGFTdGFydDsKICAgICAgICBpZiAoIG1GbGFncyAmIGtJc1N0b3JhZ2VE
ZWZpbmVkU2VwYXJhdGVseSApCiAgICAgICAgICBzdHJpbmdfc3RvcmFnZSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8IG5zRmxleEJ1ZmZlckhhbmRsZTxDaGFyVD4qID4odGhpcyktPlN0b3JhZ2VTdGFydCgp
OwoKICAgICAgICBnZXRfYWxsb2NhdG9yKCkuRGVhbGxvY2F0ZShzdHJpbmdfc3RvcmFnZSk7CiAg
ICAgIH0KICB9CiMgMzAgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1ByaXZhdGVTaGFyYWJsZVN0cmlu
Zy5oIiAyCiMgNDAgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1ByaXZhdGVTaGFyYWJsZVN0cmluZy5o
IgpjbGFzcyBuc1ByaXZhdGVTaGFyYWJsZVN0cmluZwogIHsKICAgIHB1YmxpYzoKICAgICAgdHlw
ZWRlZiBQUlVuaWNoYXIgY2hhcl90eXBlOwoKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCB+bnNQ
cml2YXRlU2hhcmFibGVTdHJpbmcoKSB7fQoKICAgICAgdmlydHVhbCBQUlVpbnQzMiBHZXRJbXBs
ZW1lbnRhdGlvbkZsYWdzKCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgY29uc3QgbnNCdWZmZXJIYW5k
bGU8Y2hhcl90eXBlPiogR2V0RmxhdEJ1ZmZlckhhbmRsZSgpIGNvbnN0OwogICAgICB2aXJ0dWFs
IGNvbnN0IG5zQnVmZmVySGFuZGxlPGNoYXJfdHlwZT4qIEdldEJ1ZmZlckhhbmRsZSgpIGNvbnN0
OwogICAgICB2aXJ0dWFsIGNvbnN0IG5zU2hhcmVkQnVmZmVySGFuZGxlPGNoYXJfdHlwZT4qIEdl
dFNoYXJlZEJ1ZmZlckhhbmRsZSgpIGNvbnN0OwoKCgoKCgoKICB9OwoKY2xhc3MgbnNQcml2YXRl
U2hhcmFibGVDU3RyaW5nCiAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIGNoYXIgY2hhcl90
eXBlOwoKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCB+bnNQcml2YXRlU2hhcmFibGVDU3RyaW5n
KCkge30KCiAgICAgIHZpcnR1YWwgUFJVaW50MzIgR2V0SW1wbGVtZW50YXRpb25GbGFncygpIGNv
bnN0OwogICAgICB2aXJ0dWFsIGNvbnN0IG5zQnVmZmVySGFuZGxlPGNoYXJfdHlwZT4qIEdldEZs
YXRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICAgdmlydHVhbCBjb25zdCBuc0J1ZmZlckhhbmRs
ZTxjaGFyX3R5cGU+KiBHZXRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICAgdmlydHVhbCBjb25z
dCBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxjaGFyX3R5cGU+KiBHZXRTaGFyZWRCdWZmZXJIYW5kbGUo
KSBjb25zdDsKCgoKCgoKCiAgfTsKIyAzMyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQVN0cmluZy5o
IiAyCgoKCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQ2hhclRyYWl0cy5oIiAxCiMgMjcgIi4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0NoYXJUcmFpdHMuaCIKIyAxICIvdXNyL2luY2x1ZGUvY3R5cGUu
aCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Zl
YXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMiAzCiMgMSAiL3Vzci9p
bmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMK
CmV4dGVybiAiQyIgewojIDQwICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwojIDEgIi91c3IvaW5j
bHVkZS9lbmRpYW4uaCIgMSAzCiMgNDEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMKCgoKCgoK
ZW51bQp7CiAgX0lTdXBwZXIgPSAoKDApIDwgOCA/ICgoMSA8PCAoMCkpIDw8IDgpIDogKCgxIDw8
ICgwKSkgPj4gOCkpLAogIF9JU2xvd2VyID0gKCgxKSA8IDggPyAoKDEgPDwgKDEpKSA8PCA4KSA6
ICgoMSA8PCAoMSkpID4+IDgpKSwKICBfSVNhbHBoYSA9ICgoMikgPCA4ID8gKCgxIDw8ICgyKSkg
PDwgOCkgOiAoKDEgPDwgKDIpKSA+PiA4KSksCiAgX0lTZGlnaXQgPSAoKDMpIDwgOCA/ICgoMSA8
PCAoMykpIDw8IDgpIDogKCgxIDw8ICgzKSkgPj4gOCkpLAogIF9JU3hkaWdpdCA9ICgoNCkgPCA4
ID8gKCgxIDw8ICg0KSkgPDwgOCkgOiAoKDEgPDwgKDQpKSA+PiA4KSksCiAgX0lTc3BhY2UgPSAo
KDUpIDwgOCA/ICgoMSA8PCAoNSkpIDw8IDgpIDogKCgxIDw8ICg1KSkgPj4gOCkpLAogIF9JU3By
aW50ID0gKCg2KSA8IDggPyAoKDEgPDwgKDYpKSA8PCA4KSA6ICgoMSA8PCAoNikpID4+IDgpKSwK
ICBfSVNncmFwaCA9ICgoNykgPCA4ID8gKCgxIDw8ICg3KSkgPDwgOCkgOiAoKDEgPDwgKDcpKSA+
PiA4KSksCiAgX0lTYmxhbmsgPSAoKDgpIDwgOCA/ICgoMSA8PCAoOCkpIDw8IDgpIDogKCgxIDw8
ICg4KSkgPj4gOCkpLAogIF9JU2NudHJsID0gKCg5KSA8IDggPyAoKDEgPDwgKDkpKSA8PCA4KSA6
ICgoMSA8PCAoOSkpID4+IDgpKSwKICBfSVNwdW5jdCA9ICgoMTApIDwgOCA/ICgoMSA8PCAoMTAp
KSA8PCA4KSA6ICgoMSA8PCAoMTApKSA+PiA4KSksCiAgX0lTYWxudW0gPSAoKDExKSA8IDggPyAo
KDEgPDwgKDExKSkgPDwgOCkgOiAoKDEgPDwgKDExKSkgPj4gOCkpCn07CiMgNzUgIi91c3IvaW5j
bHVkZS9jdHlwZS5oIiAzCmV4dGVybiBfX2NvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlw
ZV9iOwpleHRlcm4gX19jb25zdCBfX2ludDMyX3QgKl9fY3R5cGVfdG9sb3dlcjsKZXh0ZXJuIF9f
Y29uc3QgX19pbnQzMl90ICpfX2N0eXBlX3RvdXBwZXI7CiMgOTEgIi91c3IvaW5jbHVkZS9jdHlw
ZS5oIiAzCmV4dGVybiBpbnQgaXNhbG51bSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2Fs
cGhhIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzY250cmwgKGludCkgdGhyb3cgKCk7CmV4
dGVybiBpbnQgaXNkaWdpdCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2xvd2VyIChpbnQp
IHRocm93ICgpOwpleHRlcm4gaW50IGlzZ3JhcGggKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQg
aXNwcmludCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3B1bmN0IChpbnQpIHRocm93ICgp
OwpleHRlcm4gaW50IGlzc3BhY2UgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXN1cHBlciAo
aW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3hkaWdpdCAoaW50KSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IGlzYmxhbmsgKGludCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHRvbG93ZXIgKGlu
dCBfX2MpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdG91cHBlciAoaW50IF9fYykgdGhyb3cgKCk7
CgoKCgoKCmV4dGVybiBpbnQgaXNhc2NpaSAoaW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBp
bnQgdG9hc2NpaSAoaW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX3RvdXBwZXIgKGlu
dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX3RvbG93ZXIgKGludCkgdGhyb3cgKCk7CiMgMjExICIv
dXNyL2luY2x1ZGUvY3R5cGUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwoj
IDIxMiAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDIgMwojIDIyNCAiL3Vzci9pbmNsdWRlL2N0eXBl
LmgiIDMKZXh0ZXJuIGludCBfX2lzYWxudW1fbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsK
ZXh0ZXJuIGludCBfX2lzYWxwaGFfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJu
IGludCBfX2lzY250cmxfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBf
X2lzZGlnaXRfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzbG93
ZXJfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzZ3JhcGhfbCAo
aW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzcHJpbnRfbCAoaW50LCBf
X2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzcHVuY3RfbCAoaW50LCBfX2xvY2Fs
ZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzc3BhY2VfbCAoaW50LCBfX2xvY2FsZV90KSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzdXBwZXJfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAo
KTsKZXh0ZXJuIGludCBfX2lzeGRpZ2l0X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7Cgpl
eHRlcm4gaW50IF9faXNibGFua19sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwoKCgpleHRl
cm4gaW50IF9fdG9sb3dlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBfX3RvdXBwZXJfbCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpIHRocm93ICgp
OwojIDI3NyAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKfQojIDI4ICIuLi8uLi9kaXN0L2luY2x1
ZGUvbnNDaGFyVHJhaXRzLmgiIDIKCgojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzCiMg
MzEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NoYXJUcmFpdHMuaCIgMgojIDM5ICIuLi8uLi9kaXN0
L2luY2x1ZGUvbnNDaGFyVHJhaXRzLmgiCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5n
SXRlcmF0b3JVdGlscy5oIiAxCiMgMjcgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZ0l0ZXJh
dG9yVXRpbHMuaCIKCgp0ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3I+CmlubGluZQpQUkJvb2wKU2Ft
ZUZyYWdtZW50KCBjb25zdCBJdGVyYXRvciYgbGhzLCBjb25zdCBJdGVyYXRvciYgcmhzICkKICB7
CiAgICByZXR1cm4gbGhzLmZyYWdtZW50KCkubVN0YXJ0ID09IHJocy5mcmFnbWVudCgpLm1TdGFy
dDsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+IGNsYXNzIG5zUmVhZGluZ0l0ZXJhdG9yOwoK
CgoKICAgICAgIHNpemVfdCBEaXN0YW5jZSggY29uc3QgbnNSZWFkaW5nSXRlcmF0b3I8UFJVbmlj
aGFyPiYsIGNvbnN0IG5zUmVhZGluZ0l0ZXJhdG9yPFBSVW5pY2hhcj4mICk7CiAgICAgICBzaXpl
X3QgRGlzdGFuY2UoIGNvbnN0IG5zUmVhZGluZ0l0ZXJhdG9yPGNoYXI+JiwgY29uc3QgbnNSZWFk
aW5nSXRlcmF0b3I8Y2hhcj4mICk7CiMgNDAgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NoYXJUcmFp
dHMuaCIgMgoKCmV4dGVybiAiQyIgeyB2b2lkICptZW1jaHIgKGNvbnN0IHZvaWQgKiwgaW50LCBz
aXplX3QpOyB9CgoKCgogIHR5cGVkZWYgUFJCb29sIG5zQ2hhclRyYWl0c19ib29sOwoKCnRlbXBs
YXRlIDxjbGFzcyBDaGFyVD4Kc3RydWN0IG5zQ2hhclRyYWl0cwogIHsKICAgIHR5cGVkZWYgQ2hh
clQgY2hhcl90eXBlOwogICAgdHlwZWRlZiBjaGFyIGluY29tcGF0aWJsZV9jaGFyX3R5cGU7Cgog
ICAgc3RhdGljCiAgICB2b2lkCiAgICBhc3NpZ24oIGNoYXJfdHlwZSYgbGhzLCBjb25zdCBjaGFy
X3R5cGUmIHJocyApCiAgICAgIHsKICAgICAgICBsaHMgPSByaHM7CiAgICAgIH0KCgoKCiAgICB0
eXBlZGVmIGludCBpbnRfdHlwZTsKCiAgICBzdGF0aWMKICAgIGNoYXJfdHlwZQogICAgdG9fY2hh
cl90eXBlKCBjb25zdCBpbnRfdHlwZSYgYyApCiAgICAgIHsKICAgICAgICByZXR1cm4gY2hhcl90
eXBlKGMpOwogICAgICB9CgogICAgc3RhdGljCiAgICBpbnRfdHlwZQogICAgdG9faW50X3R5cGUo
IGNvbnN0IGNoYXJfdHlwZSYgYyApCiAgICAgIHsKICAgICAgICByZXR1cm4gaW50X3R5cGUoYyk7
CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIG5zQ2hhclRyYWl0c19ib29sCiAgICBlcV9pbnRfdHlw
ZSggY29uc3QgaW50X3R5cGUmIGxocywgY29uc3QgaW50X3R5cGUmIHJocyApCiAgICAgIHsKICAg
ICAgICByZXR1cm4gbGhzID09IHJoczsKICAgICAgfQoKCgoKICAgIHN0YXRpYwogICAgbnNDaGFy
VHJhaXRzX2Jvb2wKICAgIGVxKCBjb25zdCBjaGFyX3R5cGUmIGxocywgY29uc3QgY2hhcl90eXBl
JiByaHMgKQogICAgICB7CiAgICAgICAgcmV0dXJuIGxocyA9PSByaHM7CiAgICAgIH0KCiAgICBz
dGF0aWMKICAgIG5zQ2hhclRyYWl0c19ib29sCiAgICBsdCggY29uc3QgY2hhcl90eXBlJiBsaHMs
IGNvbnN0IGNoYXJfdHlwZSYgcmhzICkKICAgICAgewogICAgICAgIHJldHVybiBsaHMgPCByaHM7
CiAgICAgIH0KCgoKCiAgICBzdGF0aWMKICAgIGNoYXJfdHlwZSoKICAgIGNvcHkoIGNoYXJfdHlw
ZSogczEsIGNvbnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuICkKICAgICAgewogICAgICAgIGNo
YXJfdHlwZSogcmVzdWx0ID0gczE7CiAgICAgICAgd2hpbGUgKCBuLS0gKQogICAgICAgICAgYXNz
aWduKCpzMSsrLCAqczIrKyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQoKICAgIHN0
YXRpYwogICAgY2hhcl90eXBlKgogICAgbW92ZSggY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90
eXBlKiBzMiwgc2l6ZV90IG4gKQogICAgICB7CiAgICAgICAgY2hhcl90eXBlKiByZXN1bHQgPSBz
MTsKCiAgICAgICAgaWYgKCBuICkKICAgICAgICAgIHsKICAgICAgICAgICAgaWYgKCBzMiA+IHMx
ICkKICAgICAgICAgICAgICBjb3B5KHMxLCBzMiwgbik7CiAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICBzMSArPSBuOwogICAgICAgICAgICAgICAgczIgKz0g
bjsKICAgICAgICAgICAgICAgIHdoaWxlICggbi0tICkKICAgICAgICAgICAgICAgICAgYXNzaWdu
KCotLXMxLCAqLS1zMik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgICB9CgogICAgc3RhdGljCiAgICBjaGFyX3R5cGUqCiAgICBhc3NpZ24o
IGNoYXJfdHlwZSogcywgc2l6ZV90IG4sIGNvbnN0IGNoYXJfdHlwZSYgYyApCiAgICAgIHsKICAg
ICAgICBjaGFyX3R5cGUqIHJlc3VsdCA9IHM7CiAgICAgICAgd2hpbGUgKCBuLS0gKQogICAgICAg
ICAgYXNzaWduKCpzKyssIGMpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KCiAgICBz
dGF0aWMKICAgIGludAogICAgY29tcGFyZSggY29uc3QgY2hhcl90eXBlKiBzMSwgY29uc3QgY2hh
cl90eXBlKiBzMiwgc2l6ZV90IG4gKQogICAgICB7CiAgICAgICAgZm9yICggOyBuLS07ICsrczEs
ICsrczIgKQogICAgICAgICAgewogICAgICAgICAgICBpZiAoIGx0KCpzMSwgKnMyKSApCiAgICAg
ICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICBpZiAoIGx0KCpzMiwgKnMxKSApCiAgICAg
ICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICB9CgogICAgICAgIHJldHVybiAwOwogICAgICB9
CgogICAgc3RhdGljCiAgICBzaXplX3QKICAgIGxlbmd0aCggY29uc3QgY2hhcl90eXBlKiBzICkK
ICAgICAgewogICAgICAgIHNpemVfdCByZXN1bHQgPSAwOwogICAgICAgIHdoaWxlICggIWVxKCpz
KyssIENoYXJUKDApKSApCiAgICAgICAgICArK3Jlc3VsdDsKICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgICB9CgogICAgc3RhdGljCiAgICBjb25zdCBjaGFyX3R5cGUqCiAgICBmaW5kKCBjb25z
dCBjaGFyX3R5cGUqIHMsIHNpemVfdCBuLCBjb25zdCBjaGFyX3R5cGUmIGMgKQogICAgICB7CiAg
ICAgICAgd2hpbGUgKCBuLS0gKQogICAgICAgICAgewogICAgICAgICAgICBpZiAoIGVxKCpzLCBj
KSApCiAgICAgICAgICAgICAgcmV0dXJuIHM7CiAgICAgICAgICAgICsrczsKICAgICAgICAgIH0K
CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0KIyAyMTMgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0No
YXJUcmFpdHMuaCIKICB9OwoKdGVtcGxhdGUgPD4Kc3RydWN0IG5zQ2hhclRyYWl0czxjaGFyPgog
IHsKICAgIHR5cGVkZWYgY2hhciBjaGFyX3R5cGU7CiAgICB0eXBlZGVmIFBSVW5pY2hhciBpbmNv
bXBhdGlibGVfY2hhcl90eXBlOwoKICAgIHN0YXRpYwogICAgdm9pZAogICAgYXNzaWduKCBjaGFy
JiBsaHMsIGNoYXIgcmhzICkKICAgICAgewogICAgICAgIGxocyA9IHJoczsKICAgICAgfQoKCgoK
ICAgIHR5cGVkZWYgaW50IGludF90eXBlOwoKICAgIHN0YXRpYwogICAgY2hhcgogICAgdG9fY2hh
cl90eXBlKCBpbnQgYyApCiAgICAgIHsKICAgICAgICByZXR1cm4gY2hhcihjKTsKICAgICAgfQoK
ICAgIHN0YXRpYwogICAgaW50CiAgICB0b19pbnRfdHlwZSggY2hhciBjICkKICAgICAgewogICAg
ICAgIHJldHVybiBpbnQoIHN0YXRpY19jYXN0PCB1bnNpZ25lZCBjaGFyID4oYykgKTsKICAgICAg
fQoKICAgIHN0YXRpYwogICAgbnNDaGFyVHJhaXRzX2Jvb2wKICAgIGVxX2ludF90eXBlKCBpbnQg
bGhzLCBpbnQgcmhzICkKICAgICAgewogICAgICAgIHJldHVybiBsaHMgPT0gcmhzOwogICAgICB9
CgoKCgogICAgc3RhdGljCiAgICBuc0NoYXJUcmFpdHNfYm9vbAogICAgZXEoIGNoYXIgbGhzLCBj
aGFyIHJocyApCiAgICAgIHsKICAgICAgICByZXR1cm4gbGhzID09IHJoczsKICAgICAgfQoKICAg
IHN0YXRpYwogICAgbnNDaGFyVHJhaXRzX2Jvb2wKICAgIGx0KCBjaGFyIGxocywgY2hhciByaHMg
KQogICAgICB7CiAgICAgICAgcmV0dXJuIGxocyA8IHJoczsKICAgICAgfQoKCgoKICAgIHN0YXRp
YwogICAgY2hhcioKICAgIG1vdmUoIGNoYXIqIHMxLCBjb25zdCBjaGFyKiBzMiwgc2l6ZV90IG4g
KQogICAgICB7CiAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PCBjaGFyKiA+KG1lbW1vdmUoczEs
IHMyLCBuKSk7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGNoYXIqCiAgICBjb3B5KCBjaGFyKiBz
MSwgY29uc3QgY2hhciogczIsIHNpemVfdCBuICkKICAgICAgewogICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDwgY2hhciogPihtZW1jcHkoczEsIHMyLCBuKSk7CiAgICAgIH0KCiAgICBzdGF0aWMK
ICAgIGNoYXIqCiAgICBhc3NpZ24oIGNoYXIqIHMsIHNpemVfdCBuLCBjaGFyIGMgKQogICAgICB7
CiAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PCBjaGFyKiA+KG1lbXNldChzLCB0b19pbnRfdHlw
ZShjKSwgbikpOwogICAgICB9CgogICAgc3RhdGljCiAgICBpbnQKICAgIGNvbXBhcmUoIGNvbnN0
IGNoYXIqIHMxLCBjb25zdCBjaGFyKiBzMiwgc2l6ZV90IG4gKQogICAgICB7CiAgICAgICAgcmV0
dXJuIG1lbWNtcChzMSwgczIsIG4pOwogICAgICB9CgogICAgc3RhdGljCiAgICBzaXplX3QKICAg
IGxlbmd0aCggY29uc3QgY2hhciogcyApCiAgICAgIHsKICAgICAgICByZXR1cm4gc3RybGVuKHMp
OwogICAgICB9CgogICAgc3RhdGljCiAgICBjb25zdCBjaGFyKgogICAgZmluZCggY29uc3QgY2hh
ciogcywgc2l6ZV90IG4sIGNoYXIgYyApCiAgICAgIHsKICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDwgY29uc3QgY2hhciogPihtZW1jaHIocywgdG9faW50X3R5cGUoYyksIG4pKTsKICAg
ICAgfQojIDMzOSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQ2hhclRyYWl0cy5oIgogIH07CiMgNDY4
ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNDaGFyVHJhaXRzLmgiCnRlbXBsYXRlIDxjbGFzcyBJbnB1
dEl0ZXJhdG9yPgpzdHJ1Y3QgbnNDaGFyU291cmNlVHJhaXRzCiAgewogICAgdHlwZWRlZiB0eXBl
bmFtZSBJbnB1dEl0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwojIDQ4
MiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQ2hhclRyYWl0cy5oIgogICAgc3RhdGljCiAgICBQUlVp
bnQzMgogICAgcmVhZGFibGVfZGlzdGFuY2UoIGNvbnN0IElucHV0SXRlcmF0b3ImIGl0ZXIgKQog
ICAgICB7CiAgICAgICAgcmV0dXJuIGl0ZXIuc2l6ZV9mb3J3YXJkKCk7CiAgICAgIH0KCiAgICBz
dGF0aWMKICAgIFBSVWludDMyCiAgICByZWFkYWJsZV9kaXN0YW5jZSggY29uc3QgSW5wdXRJdGVy
YXRvciYgZmlyc3QsIGNvbnN0IElucHV0SXRlcmF0b3ImIGxhc3QgKQogICAgICB7CiAgICAgICAg
cmV0dXJuIFBSVWludDMyKFNhbWVGcmFnbWVudChmaXJzdCwgbGFzdCkgPyBsYXN0LmdldCgpLWZp
cnN0LmdldCgpIDogZmlyc3Quc2l6ZV9mb3J3YXJkKCkpOwogICAgICB9CgogICAgc3RhdGljCiAg
ICBjb25zdCB0eXBlbmFtZSBJbnB1dEl0ZXJhdG9yOjp2YWx1ZV90eXBlKgogICAgcmVhZCggY29u
c3QgSW5wdXRJdGVyYXRvciYgaXRlciApCiAgICAgIHsKICAgICAgICByZXR1cm4gaXRlci5nZXQo
KTsKICAgICAgfQoKICAgIHN0YXRpYwogICAgdm9pZAogICAgYWR2YW5jZSggSW5wdXRJdGVyYXRv
ciYgcywgZGlmZmVyZW5jZV90eXBlIG4gKQogICAgICB7CiAgICAgICAgcy5hZHZhbmNlKG4pOwog
ICAgICB9CiAgfTsKCgoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgpzdHJ1Y3QgbnNDaGFyU291cmNl
VHJhaXRzPENoYXJUKj4KICB7CiAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7
CiMgNTI3ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNDaGFyVHJhaXRzLmgiCiAgICBzdGF0aWMKICAg
IFBSVWludDMyCiAgICByZWFkYWJsZV9kaXN0YW5jZSggQ2hhclQqIHMgKQogICAgICB7CiAgICAg
ICAgcmV0dXJuIFBSVWludDMyKG5zQ2hhclRyYWl0czxDaGFyVD46Omxlbmd0aChzKSk7CgogICAg
ICB9CgogICAgc3RhdGljCiAgICBQUlVpbnQzMgogICAgcmVhZGFibGVfZGlzdGFuY2UoIENoYXJU
KiBmaXJzdCwgQ2hhclQqIGxhc3QgKQogICAgICB7CiAgICAgICAgcmV0dXJuIFBSVWludDMyKGxh
c3QtZmlyc3QpOwogICAgICB9CgogICAgc3RhdGljCiAgICBjb25zdCBDaGFyVCoKICAgIHJlYWQo
IENoYXJUKiBzICkKICAgICAgewogICAgICAgIHJldHVybiBzOwogICAgICB9CgogICAgc3RhdGlj
CiAgICB2b2lkCiAgICBhZHZhbmNlKCBDaGFyVComIHMsIGRpZmZlcmVuY2VfdHlwZSBuICkKICAg
ICAgewogICAgICAgIHMgKz0gbjsKICAgICAgfQogIH07CiMgNjUxICIuLi8uLi9kaXN0L2luY2x1
ZGUvbnNDaGFyVHJhaXRzLmgiCnRlbXBsYXRlIDxjbGFzcyBPdXRwdXRJdGVyYXRvcj4Kc3RydWN0
IG5zQ2hhclNpbmtUcmFpdHMKICB7CiAgICBzdGF0aWMKICAgIFBSVWludDMyCiAgICB3cml0ZSgg
T3V0cHV0SXRlcmF0b3ImIGl0ZXIsIGNvbnN0IHR5cGVuYW1lIE91dHB1dEl0ZXJhdG9yOjp2YWx1
ZV90eXBlKiBzLCBQUlVpbnQzMiBuICkKICAgICAgewogICAgICAgIHJldHVybiBpdGVyLndyaXRl
KHMsIG4pOwogICAgICB9CiAgfTsKCgoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgpzdHJ1Y3QgbnND
aGFyU2lua1RyYWl0czxDaGFyVCo+CiAgewogICAgc3RhdGljCiAgICBQUlVpbnQzMgogICAgd3Jp
dGUoIENoYXJUKiYgaXRlciwgY29uc3QgQ2hhclQqIHMsIFBSVWludDMyIG4gKQogICAgICB7CiAg
ICAgICAgbnNDaGFyVHJhaXRzPENoYXJUPjo6bW92ZShpdGVyLCBzLCBuKTsKICAgICAgICBpdGVy
ICs9IG47CiAgICAgICAgcmV0dXJuIG47CiAgICAgIH0KICB9OwojIDM3ICIuLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNBU3RyaW5nLmgiIDIKCgoKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmdJ
dGVyYXRvci5oIiAxCiMgMjggIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZ0l0ZXJhdG9yLmgi
CiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nRnJhZ21lbnQuaCIgMQojIDM4ICIuLi8u
Li9kaXN0L2luY2x1ZGUvbnNTdHJpbmdGcmFnbWVudC5oIgplbnVtIG5zRnJhZ21lbnRSZXF1ZXN0
IHsga1ByZXZGcmFnbWVudCwga0ZpcnN0RnJhZ21lbnQsIGtMYXN0RnJhZ21lbnQsIGtOZXh0RnJh
Z21lbnQsIGtGcmFnbWVudEF0IH07CiMgNTMgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZ0Zy
YWdtZW50LmgiCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4Kc3RydWN0IG5zUmVhZGFibGVGcmFnbWVu
dAogIHsKICAgIGNvbnN0IENoYXJUKiBtU3RhcnQ7CiAgICBjb25zdCBDaGFyVCogbUVuZDsKICAg
IGNvbnN0IHZvaWQqIG1GcmFnbWVudElkZW50aWZpZXI7CgogICAgbnNSZWFkYWJsZUZyYWdtZW50
KCkKICAgICAgICA6IG1TdGFydCgwKSwgbUVuZCgwKSwgbUZyYWdtZW50SWRlbnRpZmllcigwKQog
ICAgICB7CgogICAgICB9CiAgfTsKIyA4MCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nRnJh
Z21lbnQuaCIKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgpzdHJ1Y3QgbnNXcml0YWJsZUZyYWdtZW50
CiAgewogICAgQ2hhclQqIG1TdGFydDsKICAgIENoYXJUKiBtRW5kOwogICAgdm9pZCogbUZyYWdt
ZW50SWRlbnRpZmllcjsKCiAgICBuc1dyaXRhYmxlRnJhZ21lbnQoKQogICAgICAgIDogbVN0YXJ0
KDApLCBtRW5kKDApLCBtRnJhZ21lbnRJZGVudGlmaWVyKDApCiAgICAgIHsKCiAgICAgIH0KICB9
OwojIDI5ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmdJdGVyYXRvci5oIiAyCgoKCgoKCgoj
IDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZ1RyYWl0cy5oIiAxCiMgNDQgIi4uLy4uL2Rp
c3QvaW5jbHVkZS9uc1N0cmluZ1RyYWl0cy5oIgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CnN0cnVj
dCBuc1N0cmluZ1RyYWl0cwogIHsKICAgIHR5cGVkZWYgbnNBU3RyaW5nIGFic3RyYWN0X3N0cmlu
Z190eXBlOwogICAgdHlwZWRlZiBuc0FQcm9taXNlU3RyaW5nIGFic3RyYWN0X3Byb21pc2VfdHlw
ZTsKICAgIHR5cGVkZWYgbnNBRmxhdFN0cmluZyBhYnN0cmFjdF9mbGF0X3R5cGU7CiAgICB0eXBl
ZGVmIGNvbnN0IG5zRGVwZW5kZW50U3RyaW5nIGxpdGVyYWxfc3RyaW5nX3R5cGU7CiAgfTsKIyA2
NiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nVHJhaXRzLmgiCnRlbXBsYXRlIDw+CnN0cnVj
dCBuc1N0cmluZ1RyYWl0czxjaGFyPgogIHsKICAgIHR5cGVkZWYgbnNBQ1N0cmluZyBhYnN0cmFj
dF9zdHJpbmdfdHlwZTsKICAgIHR5cGVkZWYgbnNBUHJvbWlzZUNTdHJpbmcgYWJzdHJhY3RfcHJv
bWlzZV90eXBlOwogICAgdHlwZWRlZiBuc0FGbGF0Q1N0cmluZyBhYnN0cmFjdF9mbGF0X3R5cGU7
CiAgICB0eXBlZGVmIGNvbnN0IG5zRGVwZW5kZW50Q1N0cmluZyBsaXRlcmFsX3N0cmluZ190eXBl
OwogIH07CiMgMzcgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZ0l0ZXJhdG9yLmgiIDIKCgoK
IyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNBbGdvcml0aG0uaCIgMQojIDM4ICIuLi8uLi9kaXN0
L2luY2x1ZGUvbnNBbGdvcml0aG0uaCIKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQpjb25zdCBU
JgpOU19NSU4oIGNvbnN0IFQmIGEsIGNvbnN0IFQmIGIgKQogIHsKICAgIHJldHVybiBiIDwgYSA/
IGIgOiBhOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKY29uc3QgVCYKTlNfTUFYKCBj
b25zdCBUJiBhLCBjb25zdCBUJiBiICkKICB7CiAgICByZXR1cm4gYSA+IGIgPyBhIDogYjsKICB9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvciwgY2xhc3MgVD4KaW5saW5lClBSVWludDMy
Ck5TX0NPVU5UKCBJbnB1dEl0ZXJhdG9yJiBmaXJzdCwgY29uc3QgSW5wdXRJdGVyYXRvciYgbGFz
dCwgY29uc3QgVCYgdmFsdWUgKQogIHsKICAgIFBSVWludDMyIHJlc3VsdCA9IDA7CiAgICBmb3Ig
KCA7IGZpcnN0ICE9IGxhc3Q7ICsrZmlyc3QgKQogICAgICBpZiAoICpmaXJzdCA9PSB2YWx1ZSAp
CiAgICAgICAgKytyZXN1bHQ7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCnRlbXBsYXRlIDxjbGFz
cyBJbnB1dEl0ZXJhdG9yLCBjbGFzcyBPdXRwdXRJdGVyYXRvcj4KaW5saW5lCk91dHB1dEl0ZXJh
dG9yJgpjb3B5X3N0cmluZyggSW5wdXRJdGVyYXRvciYgZmlyc3QsIGNvbnN0IElucHV0SXRlcmF0
b3ImIGxhc3QsIE91dHB1dEl0ZXJhdG9yJiByZXN1bHQgKQogIHsKICAgIHR5cGVkZWYgbnNDaGFy
U291cmNlVHJhaXRzPElucHV0SXRlcmF0b3I+IHNvdXJjZV90cmFpdHM7CiAgICB0eXBlZGVmIG5z
Q2hhclNpbmtUcmFpdHM8T3V0cHV0SXRlcmF0b3I+IHNpbmtfdHJhaXRzOwoKICAgIHdoaWxlICgg
Zmlyc3QgIT0gbGFzdCApCiAgICAgIHsKICAgICAgICBQUkludDMyIGNvdW50X2NvcGllZCA9IFBS
SW50MzIoc2lua190cmFpdHM6OndyaXRlKHJlc3VsdCwgc291cmNlX3RyYWl0czo6cmVhZChmaXJz
dCksIHNvdXJjZV90cmFpdHM6OnJlYWRhYmxlX2Rpc3RhbmNlKGZpcnN0LCBsYXN0KSkpOwogICAg
ICAgIGlmICghKGNvdW50X2NvcGllZCA+IDApKSBuc0RlYnVnOjpBc3NlcnRpb24oInxjb3B5X3N0
cmluZ3wgd2lsbCBuZXZlciB0ZXJtaW5hdGUiLCAiY291bnRfY29waWVkID4gMCIsICIuLi8uLi9k
aXN0L2luY2x1ZGUvbnNBbGdvcml0aG0uaCIsIDc3KTsKICAgICAgICBzb3VyY2VfdHJhaXRzOjph
ZHZhbmNlKGZpcnN0LCBjb3VudF9jb3BpZWQpOwogICAgICB9CgogICAgcmV0dXJuIHJlc3VsdDsK
ICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvciwgY2xhc3MgT3V0cHV0SXRlcmF0b3I+
Ck91dHB1dEl0ZXJhdG9yJgpjb3B5X3N0cmluZ19iYWNrd2FyZCggY29uc3QgSW5wdXRJdGVyYXRv
ciYgZmlyc3QsIElucHV0SXRlcmF0b3ImIGxhc3QsIE91dHB1dEl0ZXJhdG9yJiByZXN1bHQgKQog
IHsKICAgIHdoaWxlICggZmlyc3QgIT0gbGFzdCApCiAgICAgIHsKICAgICAgICBsYXN0Lm5vcm1h
bGl6ZV9iYWNrd2FyZCgpOwogICAgICAgIHJlc3VsdC5ub3JtYWxpemVfYmFja3dhcmQoKTsKICAg
ICAgICBQUlVpbnQzMiBsZW5ndGhUb0NvcHkgPSBQUlVpbnQzMiggTlNfTUlOKGxhc3Quc2l6ZV9i
YWNrd2FyZCgpLCByZXN1bHQuc2l6ZV9iYWNrd2FyZCgpKSApOwogICAgICAgIGlmICggZmlyc3Qu
ZnJhZ21lbnQoKS5tU3RhcnQgPT0gbGFzdC5mcmFnbWVudCgpLm1TdGFydCApCiAgICAgICAgICBs
ZW5ndGhUb0NvcHkgPSBOU19NSU4obGVuZ3RoVG9Db3B5LCBQUlVpbnQzMihsYXN0LmdldCgpIC0g
Zmlyc3QuZ2V0KCkpKTsKCiAgICAgICAgaWYgKCEobGVuZ3RoVG9Db3B5KSkgbnNEZWJ1Zzo6QXNz
ZXJ0aW9uKCJ8Y29weV9zdHJpbmdfYmFja3dhcmR8IHdpbGwgbmV2ZXIgdGVybWluYXRlIiwgImxl
bmd0aFRvQ29weSIsICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNBbGdvcml0aG0uaCIsIDk2KTsKCgoK
CgogICAgICAgIG5zQ2hhclRyYWl0czx0eXBlbmFtZSBPdXRwdXRJdGVyYXRvcjo6dmFsdWVfdHlw
ZT46Om1vdmUocmVzdWx0LmdldCgpLWxlbmd0aFRvQ29weSwgbGFzdC5nZXQoKS1sZW5ndGhUb0Nv
cHksIGxlbmd0aFRvQ29weSk7CgoKICAgICAgICBsYXN0LmFkdmFuY2UoIC1QUkludDMyKGxlbmd0
aFRvQ29weSkgKTsKICAgICAgICByZXN1bHQuYWR2YW5jZSggLVBSSW50MzIobGVuZ3RoVG9Db3B5
KSApOwogICAgICB9CgogICAgcmV0dXJuIHJlc3VsdDsKICB9CiMgNDEgIi4uLy4uL2Rpc3QvaW5j
bHVkZS9uc1N0cmluZ0l0ZXJhdG9yLmgiIDIKIyA1NSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3Ry
aW5nSXRlcmF0b3IuaCIKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgpjbGFzcyBuc1JlYWRpbmdJdGVy
YXRvcgoKICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2Vf
dHlwZTsKICAgICAgdHlwZWRlZiBDaGFyVCB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIGNvbnN0
IENoYXJUKiBwb2ludGVyOwogICAgICB0eXBlZGVmIGNvbnN0IENoYXJUJiByZWZlcmVuY2U7CgoK
ICAgIHByaXZhdGU6CiAgICAgIGZyaWVuZCBjbGFzcyBuc0FTdHJpbmc7CiAgICAgIGZyaWVuZCBj
bGFzcyBuc0FDU3RyaW5nOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIG5zU3RyaW5nVHJhaXRzPENo
YXJUPjo6YWJzdHJhY3Rfc3RyaW5nX3R5cGUgc3RyaW5nX3R5cGU7CgogICAgICBuc1JlYWRhYmxl
RnJhZ21lbnQ8Q2hhclQ+IG1GcmFnbWVudDsKICAgICAgY29uc3QgQ2hhclQqIG1Qb3NpdGlvbjsK
ICAgICAgY29uc3Qgc3RyaW5nX3R5cGUqIG1Pd25pbmdTdHJpbmc7CgogICAgcHVibGljOgogICAg
ICBuc1JlYWRpbmdJdGVyYXRvcigpIHsgfQoKCgogICAgICBpbmxpbmUgdm9pZCBub3JtYWxpemVf
Zm9yd2FyZCgpOwogICAgICBpbmxpbmUgdm9pZCBub3JtYWxpemVfYmFja3dhcmQoKTsKCiAgICAg
IHBvaW50ZXIKICAgICAgZ2V0KCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gbVBv
c2l0aW9uOwogICAgICAgIH0KCiAgICAgIENoYXJUCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0CiAg
ICAgICAgewogICAgICAgICAgcmV0dXJuICpnZXQoKTsKICAgICAgICB9CiMgMTA1ICIuLi8uLi9k
aXN0L2luY2x1ZGUvbnNTdHJpbmdJdGVyYXRvci5oIgogICAgICBuc1JlYWRpbmdJdGVyYXRvcjxD
aGFyVD4mCiAgICAgIG9wZXJhdG9yKysoKQogICAgICAgIHsKICAgICAgICAgICsrbVBvc2l0aW9u
OwogICAgICAgICAgbm9ybWFsaXplX2ZvcndhcmQoKTsKICAgICAgICAgIHJldHVybiAqdGhpczsK
ICAgICAgICB9CgogICAgICBuc1JlYWRpbmdJdGVyYXRvcjxDaGFyVD4KICAgICAgb3BlcmF0b3Ir
KyggaW50ICkKICAgICAgICB7CiAgICAgICAgICBuc1JlYWRpbmdJdGVyYXRvcjxDaGFyVD4gcmVz
dWx0KCp0aGlzKTsKICAgICAgICAgICsrbVBvc2l0aW9uOwogICAgICAgICAgbm9ybWFsaXplX2Zv
cndhcmQoKTsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQoKICAgICAgbnNSZWFk
aW5nSXRlcmF0b3I8Q2hhclQ+JgogICAgICBvcGVyYXRvci0tKCkKICAgICAgICB7CiAgICAgICAg
ICBub3JtYWxpemVfYmFja3dhcmQoKTsKICAgICAgICAgIC0tbVBvc2l0aW9uOwogICAgICAgICAg
cmV0dXJuICp0aGlzOwogICAgICAgIH0KCiAgICAgIG5zUmVhZGluZ0l0ZXJhdG9yPENoYXJUPgog
ICAgICBvcGVyYXRvci0tKCBpbnQgKQogICAgICAgIHsKICAgICAgICAgIG5zUmVhZGluZ0l0ZXJh
dG9yPENoYXJUPiByZXN1bHQoKnRoaXMpOwogICAgICAgICAgbm9ybWFsaXplX2JhY2t3YXJkKCk7
CiAgICAgICAgICAtLW1Qb3NpdGlvbjsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAg
fQoKICAgICAgY29uc3QgbnNSZWFkYWJsZUZyYWdtZW50PENoYXJUPiYKICAgICAgZnJhZ21lbnQo
KSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVybiBtRnJhZ21lbnQ7CiAgICAgICAgfQoK
ICAgICAgY29uc3Qgc3RyaW5nX3R5cGUmCiAgICAgIHN0cmluZygpIGNvbnN0CiAgICAgICAgewog
ICAgICAgICAgaWYgKCEobU93bmluZ1N0cmluZykpIG5zRGVidWc6OkFzc2VydGlvbigiaXRlcmF0
b3Igbm90IGF0dGFjaGVkIHRvIGEgc3RyaW5nICh8bU93bmluZ1N0cmluZ3wgPT0gMCkiLCAibU93
bmluZ1N0cmluZyIsICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmdJdGVyYXRvci5oIiwgMTQ4
KTsKICAgICAgICAgIHJldHVybiAqbU93bmluZ1N0cmluZzsKICAgICAgICB9CgogICAgICBkaWZm
ZXJlbmNlX3R5cGUKICAgICAgc2l6ZV9mb3J3YXJkKCkgY29uc3QKICAgICAgICB7CiAgICAgICAg
ICByZXR1cm4gbUZyYWdtZW50Lm1FbmQgLSBtUG9zaXRpb247CiAgICAgICAgfQoKICAgICAgZGlm
ZmVyZW5jZV90eXBlCiAgICAgIHNpemVfYmFja3dhcmQoKSBjb25zdAogICAgICAgIHsKICAgICAg
ICAgIHJldHVybiBtUG9zaXRpb24gLSBtRnJhZ21lbnQubVN0YXJ0OwogICAgICAgIH0KCiAgICAg
IG5zUmVhZGluZ0l0ZXJhdG9yPENoYXJUPiYKICAgICAgYWR2YW5jZSggZGlmZmVyZW5jZV90eXBl
IG4gKQogICAgICAgIHsKICAgICAgICAgIHdoaWxlICggbiA+IDAgKQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlIG9uZV9ob3AgPSBOU19NSU4obiwgc2l6ZV9mb3J3
YXJkKCkpOwoKICAgICAgICAgICAgICBpZiAoIShvbmVfaG9wPjApKSBuc0RlYnVnOjpBc3NlcnRp
b24oIkluZmluaXRlIGxvb3A6IGNhbid0IGFkdmFuY2UgYSByZWFkaW5nIGl0ZXJhdG9yIGJleW9u
ZCB0aGUgZW5kIG9mIGEgc3RyaW5nIiwgIm9uZV9ob3A+MCIsICIuLi8uLi9kaXN0L2luY2x1ZGUv
bnNTdHJpbmdJdGVyYXRvci5oIiwgMTcxKTsKCgogICAgICAgICAgICAgIG1Qb3NpdGlvbiArPSBv
bmVfaG9wOwogICAgICAgICAgICAgIG5vcm1hbGl6ZV9mb3J3YXJkKCk7CiAgICAgICAgICAgICAg
biAtPSBvbmVfaG9wOwogICAgICAgICAgICB9CgogICAgICAgICAgd2hpbGUgKCBuIDwgMCApCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICBub3JtYWxpemVfYmFja3dhcmQoKTsKICAgICAgICAg
ICAgICBkaWZmZXJlbmNlX3R5cGUgb25lX2hvcCA9IE5TX01BWChuLCAtc2l6ZV9iYWNrd2FyZCgp
KTsKCiAgICAgICAgICAgICAgaWYgKCEob25lX2hvcDwwKSkgbnNEZWJ1Zzo6QXNzZXJ0aW9uKCJJ
bmZpbml0ZSBsb29wOiBjYW4ndCBhZHZhbmNlIChiYWNrd2FyZCkgYSByZWFkaW5nIGl0ZXJhdG9y
IGJleW9uZCB0aGUgZW5kIG9mIGEgc3RyaW5nIiwgIm9uZV9ob3A8MCIsICIuLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNTdHJpbmdJdGVyYXRvci5oIiwgMTg0KTsKCgogICAgICAgICAgICAgIG1Qb3NpdGlv
biArPSBvbmVfaG9wOwogICAgICAgICAgICAgIG4gLT0gb25lX2hvcDsKICAgICAgICAgICAgfQoK
ICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CiAgfTsKCnRlbXBsYXRlIDxjbGFzcyBD
aGFyVD4KY2xhc3MgbnNXcml0aW5nSXRlcmF0b3IKCiAgewogICAgcHVibGljOgogICAgICB0eXBl
ZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgQ2hhclQgdmFsdWVf
dHlwZTsKICAgICAgdHlwZWRlZiBDaGFyVCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBDaGFyVCYg
cmVmZXJlbmNlOwoKCiAgICBwcml2YXRlOgogICAgICBmcmllbmQgY2xhc3MgbnNBU3RyaW5nOwog
ICAgICBmcmllbmQgY2xhc3MgbnNBQ1N0cmluZzsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBuc1N0
cmluZ1RyYWl0czxDaGFyVD46OmFic3RyYWN0X3N0cmluZ190eXBlIHN0cmluZ190eXBlOwoKICAg
ICAgbnNXcml0YWJsZUZyYWdtZW50PENoYXJUPiBtRnJhZ21lbnQ7CiAgICAgIENoYXJUKiBtUG9z
aXRpb247CiAgICAgIHN0cmluZ190eXBlKiBtT3duaW5nU3RyaW5nOwoKICAgIHB1YmxpYzoKICAg
ICAgbnNXcml0aW5nSXRlcmF0b3IoKSB7IH0KCgoKICAgICAgaW5saW5lIHZvaWQgbm9ybWFsaXpl
X2ZvcndhcmQoKTsKICAgICAgaW5saW5lIHZvaWQgbm9ybWFsaXplX2JhY2t3YXJkKCk7CgogICAg
ICBwb2ludGVyCiAgICAgIGdldCgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIG1Q
b3NpdGlvbjsKICAgICAgICB9CgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3IqKCkgY29u
c3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gKmdldCgpOwogICAgICAgIH0KIyAyNDUgIi4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZ0l0ZXJhdG9yLmgiCiAgICAgIG5zV3JpdGluZ0l0ZXJh
dG9yPENoYXJUPiYKICAgICAgb3BlcmF0b3IrKygpCiAgICAgICAgewogICAgICAgICAgKyttUG9z
aXRpb247CiAgICAgICAgICBub3JtYWxpemVfZm9yd2FyZCgpOwogICAgICAgICAgcmV0dXJuICp0
aGlzOwogICAgICAgIH0KCiAgICAgIG5zV3JpdGluZ0l0ZXJhdG9yPENoYXJUPgogICAgICBvcGVy
YXRvcisrKCBpbnQgKQogICAgICAgIHsKICAgICAgICAgIG5zV3JpdGluZ0l0ZXJhdG9yPENoYXJU
PiByZXN1bHQoKnRoaXMpOwogICAgICAgICAgKyttUG9zaXRpb247CiAgICAgICAgICBub3JtYWxp
emVfZm9yd2FyZCgpOwogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9CgogICAgICBu
c1dyaXRpbmdJdGVyYXRvcjxDaGFyVD4mCiAgICAgIG9wZXJhdG9yLS0oKQogICAgICAgIHsKICAg
ICAgICAgIG5vcm1hbGl6ZV9iYWNrd2FyZCgpOwogICAgICAgICAgLS1tUG9zaXRpb247CiAgICAg
ICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKICAgICAgbnNXcml0aW5nSXRlcmF0b3I8Q2hh
clQ+CiAgICAgIG9wZXJhdG9yLS0oIGludCApCiAgICAgICAgewogICAgICAgICAgbnNXcml0aW5n
SXRlcmF0b3I8Q2hhclQ+IHJlc3VsdCgqdGhpcyk7CiAgICAgICAgICBub3JtYWxpemVfYmFja3dh
cmQoKTsKICAgICAgICAgIC0tbVBvc2l0aW9uOwogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICAgICB9CgogICAgICBjb25zdCBuc1dyaXRhYmxlRnJhZ21lbnQ8Q2hhclQ+JgogICAgICBmcmFn
bWVudCgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIG1GcmFnbWVudDsKICAgICAg
ICB9CgogICAgICBuc1dyaXRhYmxlRnJhZ21lbnQ8Q2hhclQ+JgogICAgICBmcmFnbWVudCgpCiAg
ICAgICAgewogICAgICAgICAgcmV0dXJuIG1GcmFnbWVudDsKICAgICAgICB9CgogICAgICBjb25z
dCBzdHJpbmdfdHlwZSYKICAgICAgc3RyaW5nKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICBp
ZiAoIShtT3duaW5nU3RyaW5nKSkgbnNEZWJ1Zzo6QXNzZXJ0aW9uKCJpdGVyYXRvciBub3QgYXR0
YWNoZWQgdG8gYSBzdHJpbmcgKHxtT3duaW5nU3RyaW5nfCA9PSAwKSIsICJtT3duaW5nU3RyaW5n
IiwgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZ0l0ZXJhdG9yLmgiLCAyOTQpOwogICAgICAg
ICAgcmV0dXJuICptT3duaW5nU3RyaW5nOwogICAgICAgIH0KCiAgICAgIHN0cmluZ190eXBlJgog
ICAgICBzdHJpbmcoKQogICAgICAgIHsKICAgICAgICAgIGlmICghKG1Pd25pbmdTdHJpbmcpKSBu
c0RlYnVnOjpBc3NlcnRpb24oIml0ZXJhdG9yIG5vdCBhdHRhY2hlZCB0byBhIHN0cmluZyAofG1P
d25pbmdTdHJpbmd8ID09IDApIiwgIm1Pd25pbmdTdHJpbmciLCAiLi4vLi4vZGlzdC9pbmNsdWRl
L25zU3RyaW5nSXRlcmF0b3IuaCIsIDMwMSk7CiAgICAgICAgICByZXR1cm4gKm1Pd25pbmdTdHJp
bmc7CiAgICAgICAgfQoKICAgICAgZGlmZmVyZW5jZV90eXBlCiAgICAgIHNpemVfZm9yd2FyZCgp
IGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIG1GcmFnbWVudC5tRW5kIC0gbVBvc2l0
aW9uOwogICAgICAgIH0KCiAgICAgIGRpZmZlcmVuY2VfdHlwZQogICAgICBzaXplX2JhY2t3YXJk
KCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gbVBvc2l0aW9uIC0gbUZyYWdtZW50
Lm1TdGFydDsKICAgICAgICB9CgogICAgICBuc1dyaXRpbmdJdGVyYXRvcjxDaGFyVD4mCiAgICAg
IGFkdmFuY2UoIGRpZmZlcmVuY2VfdHlwZSBuICkKICAgICAgICB7CiAgICAgICAgICB3aGlsZSAo
IG4gPiAwICkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZSBvbmVf
aG9wID0gTlNfTUlOKG4sIHNpemVfZm9yd2FyZCgpKTsKCiAgICAgICAgICAgICAgaWYgKCEob25l
X2hvcD4wKSkgbnNEZWJ1Zzo6QXNzZXJ0aW9uKCJJbmZpbml0ZSBsb29wOiBjYW4ndCBhZHZhbmNl
IGEgd3JpdGluZyBpdGVyYXRvciBiZXlvbmQgdGhlIGVuZCBvZiBhIHN0cmluZyIsICJvbmVfaG9w
PjAiLCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nSXRlcmF0b3IuaCIsIDMyNCk7CgoKICAg
ICAgICAgICAgICBtUG9zaXRpb24gKz0gb25lX2hvcDsKICAgICAgICAgICAgICBub3JtYWxpemVf
Zm9yd2FyZCgpOwogICAgICAgICAgICAgIG4gLT0gb25lX2hvcDsKICAgICAgICAgICAgfQoKICAg
ICAgICAgIHdoaWxlICggbiA8IDAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbm9ybWFs
aXplX2JhY2t3YXJkKCk7CiAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlIG9uZV9ob3AgPSBO
U19NQVgobiwgLXNpemVfYmFja3dhcmQoKSk7CgogICAgICAgICAgICAgIGlmICghKG9uZV9ob3A8
MCkpIG5zRGVidWc6OkFzc2VydGlvbigiSW5maW5pdGUgbG9vcDogY2FuJ3QgYWR2YW5jZSAoYmFj
a3dhcmQpIGEgd3JpdGluZyBpdGVyYXRvciBiZXlvbmQgdGhlIGVuZCBvZiBhIHN0cmluZyIsICJv
bmVfaG9wPDAiLCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nSXRlcmF0b3IuaCIsIDMzNyk7
CgoKICAgICAgICAgICAgICBtUG9zaXRpb24gKz0gb25lX2hvcDsKICAgICAgICAgICAgICBuIC09
IG9uZV9ob3A7CiAgICAgICAgICAgIH0KCiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAg
fQoKICAgICAgUFJVaW50MzIKICAgICAgd3JpdGUoIGNvbnN0IHZhbHVlX3R5cGUqIHMsIFBSVWlu
dDMyIG4gKQogICAgICAgIHsKICAgICAgICAgIGlmICghKHNpemVfZm9yd2FyZCgpID4gMCkpIG5z
RGVidWc6OkFzc2VydGlvbigiWW91IGNhbid0IHx3cml0ZXwgaW50byBhbiB8bnNXcml0aW5nSXRl
cmF0b3J8IHdpdGggbm8gc3BhY2UhIiwgInNpemVfZm9yd2FyZCgpID4gMCIsICIuLi8uLi9kaXN0
L2luY2x1ZGUvbnNTdHJpbmdJdGVyYXRvci5oIiwgMzUwKTsKCiAgICAgICAgICBuID0gTlNfTUlO
KG4sIFBSVWludDMyKHNpemVfZm9yd2FyZCgpKSk7CiAgICAgICAgICBuc0NoYXJUcmFpdHM8dmFs
dWVfdHlwZT46Om1vdmUobVBvc2l0aW9uLCBzLCBuKTsKICAgICAgICAgIGFkdmFuY2UoIGRpZmZl
cmVuY2VfdHlwZShuKSApOwogICAgICAgICAgcmV0dXJuIG47CiAgICAgICAgfQogIH07Cgp0ZW1w
bGF0ZSA8Y2xhc3MgQ2hhclQ+CmlubGluZQp2b2lkCm5zUmVhZGluZ0l0ZXJhdG9yPENoYXJUPjo6
bm9ybWFsaXplX2ZvcndhcmQoKQogIHsKICAgIHdoaWxlICggbVBvc2l0aW9uID09IG1GcmFnbWVu
dC5tRW5kCiAgICAgICAgICYmIG1Pd25pbmdTdHJpbmctPkdldFJlYWRhYmxlRnJhZ21lbnQobUZy
YWdtZW50LCBrTmV4dEZyYWdtZW50KSApCiAgICAgICAgbVBvc2l0aW9uID0gbUZyYWdtZW50Lm1T
dGFydDsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmlubGluZQp2b2lkCm5zUmVhZGluZ0l0
ZXJhdG9yPENoYXJUPjo6bm9ybWFsaXplX2JhY2t3YXJkKCkKICB7CiAgICB3aGlsZSAoIG1Qb3Np
dGlvbiA9PSBtRnJhZ21lbnQubVN0YXJ0CiAgICAgICAgICYmIG1Pd25pbmdTdHJpbmctPkdldFJl
YWRhYmxlRnJhZ21lbnQobUZyYWdtZW50LCBrUHJldkZyYWdtZW50KSApCiAgICAgICAgbVBvc2l0
aW9uID0gbUZyYWdtZW50Lm1FbmQ7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgppbmxpbmUK
UFJCb29sCm9wZXJhdG9yPT0oIGNvbnN0IG5zUmVhZGluZ0l0ZXJhdG9yPENoYXJUPiYgbGhzLCBj
b25zdCBuc1JlYWRpbmdJdGVyYXRvcjxDaGFyVD4mIHJocyApCiAgewogICAgcmV0dXJuIGxocy5n
ZXQoKSA9PSByaHMuZ2V0KCk7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgppbmxpbmUKUFJC
b29sCm9wZXJhdG9yIT0oIGNvbnN0IG5zUmVhZGluZ0l0ZXJhdG9yPENoYXJUPiYgbGhzLCBjb25z
dCBuc1JlYWRpbmdJdGVyYXRvcjxDaGFyVD4mIHJocyApCiAgewogICAgcmV0dXJuIGxocy5nZXQo
KSAhPSByaHMuZ2V0KCk7CiAgfQoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmlubGluZQp2
b2lkCm5zV3JpdGluZ0l0ZXJhdG9yPENoYXJUPjo6bm9ybWFsaXplX2ZvcndhcmQoKQogIHsKICAg
IHdoaWxlICggbVBvc2l0aW9uID09IG1GcmFnbWVudC5tRW5kCiAgICAgICAgICYmIG1Pd25pbmdT
dHJpbmctPkdldFdyaXRhYmxlRnJhZ21lbnQobUZyYWdtZW50LCBrTmV4dEZyYWdtZW50KSApCiAg
ICAgIG1Qb3NpdGlvbiA9IG1GcmFnbWVudC5tU3RhcnQ7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIENo
YXJUPgppbmxpbmUKdm9pZApuc1dyaXRpbmdJdGVyYXRvcjxDaGFyVD46Om5vcm1hbGl6ZV9iYWNr
d2FyZCgpCiAgewogICAgd2hpbGUgKCBtUG9zaXRpb24gPT0gbUZyYWdtZW50Lm1TdGFydAogICAg
ICAgICAmJiBtT3duaW5nU3RyaW5nLT5HZXRXcml0YWJsZUZyYWdtZW50KG1GcmFnbWVudCwga1By
ZXZGcmFnbWVudCkgKQogICAgICBtUG9zaXRpb24gPSBtRnJhZ21lbnQubUVuZDsKICB9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgQ2hhclQ+CmlubGluZQpQUkJvb2wKb3BlcmF0b3I9PSggY29uc3QgbnNXcml0
aW5nSXRlcmF0b3I8Q2hhclQ+JiBsaHMsIGNvbnN0IG5zV3JpdGluZ0l0ZXJhdG9yPENoYXJUPiYg
cmhzICkKICB7CiAgICByZXR1cm4gbGhzLmdldCgpID09IHJocy5nZXQoKTsKICB9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgQ2hhclQ+CmlubGluZQpQUkJvb2wKb3BlcmF0b3IhPSggY29uc3QgbnNXcml0aW5n
SXRlcmF0b3I8Q2hhclQ+JiBsaHMsIGNvbnN0IG5zV3JpdGluZ0l0ZXJhdG9yPENoYXJUPiYgcmhz
ICkKICB7CiAgICByZXR1cm4gbGhzLmdldCgpICE9IHJocy5nZXQoKTsKICB9CiMgNDEgIi4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIgMgoKCgoKCgoKY2xhc3MgbnNBU3RyaW5nCiAgICA6
IHB1YmxpYyBuc1ByaXZhdGVTaGFyYWJsZVN0cmluZwogIHsKICAgIHB1YmxpYzoKICAgICAgdHlw
ZWRlZiBuc0FTdHJpbmcgc2VsZl90eXBlOwogICAgICB0eXBlZGVmIG5zQVByb21pc2VTdHJpbmcg
cHJvbWlzZV90eXBlOwogICAgICB0eXBlZGVmIFBSVW5pY2hhciBjaGFyX3R5cGU7CiAgICAgIHR5
cGVkZWYgY2hhciBpbmNvbXBhdGlibGVfY2hhcl90eXBlOwoKCiAgICAgIHR5cGVkZWYgbnNSZWFk
aW5nSXRlcmF0b3I8Y2hhcl90eXBlPiBjb25zdF9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiBuc1dy
aXRpbmdJdGVyYXRvcjxjaGFyX3R5cGU+IGl0ZXJhdG9yOwoKICAgICAgdHlwZWRlZiBQUlVpbnQz
MiBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgUFJVaW50MzIgaW5kZXhfdHlwZTsKCgoKCgoKICAg
ICAgdmlydHVhbCB+bnNBU3RyaW5nKCkgeyB9CgogICAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3Im
IEJlZ2luUmVhZGluZyggY29uc3RfaXRlcmF0b3ImICkgY29uc3Q7CiAgICAgIGlubGluZSBjb25z
dF9pdGVyYXRvciYgRW5kUmVhZGluZyggY29uc3RfaXRlcmF0b3ImICkgY29uc3Q7CgogICAgICBp
bmxpbmUgaXRlcmF0b3ImIEJlZ2luV3JpdGluZyggaXRlcmF0b3ImICk7CiAgICAgIGlubGluZSBp
dGVyYXRvciYgRW5kV3JpdGluZyggaXRlcmF0b3ImICk7CgogICAgICB2aXJ0dWFsIHNpemVfdHlw
ZSBMZW5ndGgoKSBjb25zdCA9IDA7CiAgICAgIFBSQm9vbCBJc0VtcHR5KCkgY29uc3QgeyByZXR1
cm4gTGVuZ3RoKCkgPT0gMDsgfQoKICAgICAgaW5saW5lIFBSQm9vbCBFcXVhbHMoIGNvbnN0IHNl
bGZfdHlwZSYgKSBjb25zdDsKICAgICAgUFJCb29sIEVxdWFscyggY29uc3QgY2hhcl90eXBlKiAp
IGNvbnN0OwoKCgoKCgoKICAgICAgY2hhcl90eXBlIEZpcnN0KCkgY29uc3Q7CiAgICAgIGNoYXJf
dHlwZSBMYXN0KCkgY29uc3Q7CgogICAgICBzaXplX3R5cGUgQ291bnRDaGFyKCBjaGFyX3R5cGUg
KSBjb25zdDsKIyAxMTIgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIKICAgICAgc2l6
ZV90eXBlIExlZnQoIHNlbGZfdHlwZSYsIHNpemVfdHlwZSApIGNvbnN0OwogICAgICBzaXplX3R5
cGUgTWlkKCBzZWxmX3R5cGUmLCBQUlVpbnQzMiwgUFJVaW50MzIgKSBjb25zdDsKICAgICAgc2l6
ZV90eXBlIFJpZ2h0KCBzZWxmX3R5cGUmLCBzaXplX3R5cGUgKSBjb25zdDsKCgogICAgICBQUklu
dDMyIEZpbmRDaGFyKCBjaGFyX3R5cGUsIGluZGV4X3R5cGUgYU9mZnNldCA9IDAgKSBjb25zdDsK
IyAxMjggIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIKICAgICAgdmlydHVhbCB2b2lk
IFNldENhcGFjaXR5KCBzaXplX3R5cGUgKSB7IH0KIyAxNDMgIi4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0FTdHJpbmcuaCIKICAgICAgdmlydHVhbCB2b2lkIFNldExlbmd0aCggc2l6ZV90eXBlICkgeyB9
CgoKICAgICAgdm9pZAogICAgICBUcnVuY2F0ZSggc2l6ZV90eXBlIGFOZXdMZW5ndGg9MCApCiAg
ICAgICAgewogICAgICAgICAgaWYgKCEoYU5ld0xlbmd0aDw9dGhpcy0+TGVuZ3RoKCkpKSBuc0Rl
YnVnOjpBc3NlcnRpb24oIkNhbid0IHVzZSB8VHJ1bmNhdGUoKXwgdG8gbWFrZSBhIHN0cmluZyBs
b25nZXIuIiwgImFOZXdMZW5ndGg8PXRoaXMtPkxlbmd0aCgpIiwgIi4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0FTdHJpbmcuaCIsIDE0OSk7CgogICAgICAgICAgaWYgKCBhTmV3TGVuZ3RoIDwgdGhpcy0+
TGVuZ3RoKCkgKQogICAgICAgICAgICBTZXRMZW5ndGgoYU5ld0xlbmd0aCk7CiAgICAgICAgfQoj
IDE3OCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQVN0cmluZy5oIgogICAgICB2b2lkIEFzc2lnbigg
Y29uc3Qgc2VsZl90eXBlJiBhUmVhZGFibGUgKSB7IEFzc2lnbkZyb21SZWFkYWJsZShhUmVhZGFi
bGUpOyB9CiAgICAgIGlubGluZSB2b2lkIEFzc2lnbiggY29uc3QgcHJvbWlzZV90eXBlJiBhUmVh
ZGFibGUgKTsKICAgICAgdm9pZCBBc3NpZ24oIGNvbnN0IGNoYXJfdHlwZSogYVB0ciApIHsgYVB0
ciA/IGRvX0Fzc2lnbkZyb21FbGVtZW50UHRyKGFQdHIpIDogU2V0TGVuZ3RoKDApOyB9CiAgICAg
IHZvaWQgQXNzaWduKCBjb25zdCBjaGFyX3R5cGUqIGFQdHIsIHNpemVfdHlwZSBhTGVuZ3RoICkg
eyBkb19Bc3NpZ25Gcm9tRWxlbWVudFB0ckxlbmd0aChhUHRyLCBhTGVuZ3RoKTsgfQogICAgICB2
b2lkIEFzc2lnbiggY2hhcl90eXBlIGFDaGFyICkgeyBkb19Bc3NpZ25Gcm9tRWxlbWVudChhQ2hh
cik7IH0KCgogICAgICBzZWxmX3R5cGUmIG9wZXJhdG9yPSggY29uc3Qgc2VsZl90eXBlJiBhUmVh
ZGFibGUgKSB7IEFzc2lnbihhUmVhZGFibGUpOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIHNlbGZf
dHlwZSYgb3BlcmF0b3I9KCBjb25zdCBwcm9taXNlX3R5cGUmIGFSZWFkYWJsZSApIHsgQXNzaWdu
KGFSZWFkYWJsZSk7IHJldHVybiAqdGhpczsgfQogICAgICBzZWxmX3R5cGUmIG9wZXJhdG9yPSgg
Y29uc3QgY2hhcl90eXBlKiBhUHRyICkgeyBBc3NpZ24oYVB0cik7IHJldHVybiAqdGhpczsgfQog
ICAgICBzZWxmX3R5cGUmIG9wZXJhdG9yPSggY2hhcl90eXBlIGFDaGFyICkgeyBBc3NpZ24oYUNo
YXIpOyByZXR1cm4gKnRoaXM7IH0KCgoKCgoKCiAgICAgIHZvaWQgQXBwZW5kKCBjb25zdCBzZWxm
X3R5cGUmIGFSZWFkYWJsZSApIHsgQXBwZW5kRnJvbVJlYWRhYmxlKGFSZWFkYWJsZSk7IH0KICAg
ICAgaW5saW5lIHZvaWQgQXBwZW5kKCBjb25zdCBwcm9taXNlX3R5cGUmIGFSZWFkYWJsZSApOwog
ICAgICB2b2lkIEFwcGVuZCggY29uc3QgY2hhcl90eXBlKiBhUHRyICkgeyBpZiAoYVB0cikgZG9f
QXBwZW5kRnJvbUVsZW1lbnRQdHIoYVB0cik7IH0KICAgICAgdm9pZCBBcHBlbmQoIGNvbnN0IGNo
YXJfdHlwZSogYVB0ciwgc2l6ZV90eXBlIGFMZW5ndGggKSB7IGRvX0FwcGVuZEZyb21FbGVtZW50
UHRyTGVuZ3RoKGFQdHIsIGFMZW5ndGgpOyB9CiAgICAgIHZvaWQgQXBwZW5kKCBjaGFyX3R5cGUg
YUNoYXIgKSB7IGRvX0FwcGVuZEZyb21FbGVtZW50KGFDaGFyKTsgfQoKICAgICAgc2VsZl90eXBl
JiBvcGVyYXRvcis9KCBjb25zdCBzZWxmX3R5cGUmIGFSZWFkYWJsZSApIHsgQXBwZW5kKGFSZWFk
YWJsZSk7IHJldHVybiAqdGhpczsgfQogICAgICBzZWxmX3R5cGUmIG9wZXJhdG9yKz0oIGNvbnN0
IHByb21pc2VfdHlwZSYgYVJlYWRhYmxlICkgeyBBcHBlbmQoYVJlYWRhYmxlKTsgcmV0dXJuICp0
aGlzOyB9CiAgICAgIHNlbGZfdHlwZSYgb3BlcmF0b3IrPSggY29uc3QgY2hhcl90eXBlKiBhUHRy
ICkgeyBBcHBlbmQoYVB0cik7IHJldHVybiAqdGhpczsgfQogICAgICBzZWxmX3R5cGUmIG9wZXJh
dG9yKz0oIGNoYXJfdHlwZSBhQ2hhciApIHsgQXBwZW5kKGFDaGFyKTsgcmV0dXJuICp0aGlzOyB9
CiMgMjE5ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNBU3RyaW5nLmgiCiAgICAgIHZvaWQgSW5zZXJ0
KCBjb25zdCBzZWxmX3R5cGUmIGFSZWFkYWJsZSwgaW5kZXhfdHlwZSBhdFBvc2l0aW9uICkgeyBJ
bnNlcnRGcm9tUmVhZGFibGUoYVJlYWRhYmxlLCBhdFBvc2l0aW9uKTsgfQogICAgICBpbmxpbmUg
dm9pZCBJbnNlcnQoIGNvbnN0IHByb21pc2VfdHlwZSYgYVJlYWRhYmxlLCBpbmRleF90eXBlIGF0
UG9zaXRpb24gKTsKICAgICAgdm9pZCBJbnNlcnQoIGNvbnN0IGNoYXJfdHlwZSogYVB0ciwgaW5k
ZXhfdHlwZSBhdFBvc2l0aW9uICkgeyBpZiAoYVB0cikgZG9fSW5zZXJ0RnJvbUVsZW1lbnRQdHIo
YVB0ciwgYXRQb3NpdGlvbik7IH0KICAgICAgdm9pZCBJbnNlcnQoIGNvbnN0IGNoYXJfdHlwZSog
YVB0ciwgaW5kZXhfdHlwZSBhdFBvc2l0aW9uLCBzaXplX3R5cGUgYUxlbmd0aCApIHsgZG9fSW5z
ZXJ0RnJvbUVsZW1lbnRQdHJMZW5ndGgoYVB0ciwgYXRQb3NpdGlvbiwgYUxlbmd0aCk7IH0KICAg
ICAgdm9pZCBJbnNlcnQoIGNoYXJfdHlwZSBhQ2hhciwgaW5kZXhfdHlwZSBhdFBvc2l0aW9uICkg
eyBkb19JbnNlcnRGcm9tRWxlbWVudChhQ2hhciwgYXRQb3NpdGlvbik7IH0KCgoKICAgICAgdmly
dHVhbCB2b2lkIEN1dCggaW5kZXhfdHlwZSBjdXRTdGFydCwgc2l6ZV90eXBlIGN1dExlbmd0aCAp
OwoKCgogICAgICB2b2lkIFJlcGxhY2UoIGluZGV4X3R5cGUgY3V0U3RhcnQsIHNpemVfdHlwZSBj
dXRMZW5ndGgsIGNvbnN0IHNlbGZfdHlwZSYgYVJlYWRhYmxlICkgeyBSZXBsYWNlRnJvbVJlYWRh
YmxlKGN1dFN0YXJ0LCBjdXRMZW5ndGgsIGFSZWFkYWJsZSk7IH0KCgogICAgcHJpdmF0ZToKCiAg
ICAgIGluZGV4X3R5cGUgQ291bnRDaGFyKCBpbmNvbXBhdGlibGVfY2hhcl90eXBlICkgY29uc3Q7
CiAgICAgIHZvaWQgb3BlcmF0b3I9ICggaW5jb21wYXRpYmxlX2NoYXJfdHlwZSApOwogICAgICB2
b2lkIEFzc2lnbiAoIGluY29tcGF0aWJsZV9jaGFyX3R5cGUgKTsKICAgICAgdm9pZCBvcGVyYXRv
cis9ICggaW5jb21wYXRpYmxlX2NoYXJfdHlwZSApOwogICAgICB2b2lkIEFwcGVuZCAoIGluY29t
cGF0aWJsZV9jaGFyX3R5cGUgKTsKICAgICAgdm9pZCBJbnNlcnQgKCBpbmNvbXBhdGlibGVfY2hh
cl90eXBlLCBpbmRleF90eXBlICk7CgoKICAgIHByb3RlY3RlZDoKICAgICAgICAgICAgICB2b2lk
IEFzc2lnbkZyb21SZWFkYWJsZSggY29uc3Qgc2VsZl90eXBlJiApOwogICAgICAgICAgICAgIHZv
aWQgQXNzaWduRnJvbVByb21pc2UoIGNvbnN0IHNlbGZfdHlwZSYgKTsKICAgICAgdmlydHVhbCB2
b2lkIGRvX0Fzc2lnbkZyb21SZWFkYWJsZSggY29uc3Qgc2VsZl90eXBlJiApOwogICAgICB2aXJ0
dWFsIHZvaWQgZG9fQXNzaWduRnJvbUVsZW1lbnRQdHIoIGNvbnN0IGNoYXJfdHlwZSogKTsKICAg
ICAgdmlydHVhbCB2b2lkIGRvX0Fzc2lnbkZyb21FbGVtZW50UHRyTGVuZ3RoKCBjb25zdCBjaGFy
X3R5cGUqLCBzaXplX3R5cGUgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0Fzc2lnbkZyb21FbGVt
ZW50KCBjaGFyX3R5cGUgKTsKCiAgICAgICAgICAgICAgdm9pZCBBcHBlbmRGcm9tUmVhZGFibGUo
IGNvbnN0IHNlbGZfdHlwZSYgKTsKICAgICAgICAgICAgICB2b2lkIEFwcGVuZEZyb21Qcm9taXNl
KCBjb25zdCBzZWxmX3R5cGUmICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19BcHBlbmRGcm9tUmVh
ZGFibGUoIGNvbnN0IHNlbGZfdHlwZSYgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0FwcGVuZEZy
b21FbGVtZW50UHRyKCBjb25zdCBjaGFyX3R5cGUqICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19B
cHBlbmRGcm9tRWxlbWVudFB0ckxlbmd0aCggY29uc3QgY2hhcl90eXBlKiwgc2l6ZV90eXBlICk7
CiAgICAgIHZpcnR1YWwgdm9pZCBkb19BcHBlbmRGcm9tRWxlbWVudCggY2hhcl90eXBlICk7Cgog
ICAgICAgICAgICAgIHZvaWQgSW5zZXJ0RnJvbVJlYWRhYmxlKCBjb25zdCBzZWxmX3R5cGUmLCBp
bmRleF90eXBlICk7CiAgICAgICAgICAgICAgdm9pZCBJbnNlcnRGcm9tUHJvbWlzZSggY29uc3Qg
c2VsZl90eXBlJiwgaW5kZXhfdHlwZSApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fSW5zZXJ0RnJv
bVJlYWRhYmxlKCBjb25zdCBzZWxmX3R5cGUmLCBpbmRleF90eXBlICk7CiAgICAgIHZpcnR1YWwg
dm9pZCBkb19JbnNlcnRGcm9tRWxlbWVudFB0ciggY29uc3QgY2hhcl90eXBlKiwgaW5kZXhfdHlw
ZSApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fSW5zZXJ0RnJvbUVsZW1lbnRQdHJMZW5ndGgoIGNv
bnN0IGNoYXJfdHlwZSosIGluZGV4X3R5cGUsIHNpemVfdHlwZSApOwogICAgICB2aXJ0dWFsIHZv
aWQgZG9fSW5zZXJ0RnJvbUVsZW1lbnQoIGNoYXJfdHlwZSwgaW5kZXhfdHlwZSApOwoKICAgICAg
ICAgICAgICB2b2lkIFJlcGxhY2VGcm9tUmVhZGFibGUoIGluZGV4X3R5cGUsIHNpemVfdHlwZSwg
Y29uc3Qgc2VsZl90eXBlJiApOwogICAgICAgICAgICAgIHZvaWQgUmVwbGFjZUZyb21Qcm9taXNl
KCBpbmRleF90eXBlLCBzaXplX3R5cGUsIGNvbnN0IHNlbGZfdHlwZSYgKTsKICAgICAgdmlydHVh
bCB2b2lkIGRvX1JlcGxhY2VGcm9tUmVhZGFibGUoIGluZGV4X3R5cGUsIHNpemVfdHlwZSwgY29u
c3Qgc2VsZl90eXBlJiApOwoKCgogICAgcHVibGljOgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJf
dHlwZSogR2V0UmVhZGFibGVGcmFnbWVudCggbnNSZWFkYWJsZUZyYWdtZW50PGNoYXJfdHlwZT4m
LCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIgPSAwICkgY29uc3QgPSAwOwogICAgICB2aXJ0
dWFsIGNoYXJfdHlwZSogR2V0V3JpdGFibGVGcmFnbWVudCggbnNXcml0YWJsZUZyYWdtZW50PGNo
YXJfdHlwZT4mLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIgPSAwICkgPSAwOwogICAgICB2
aXJ0dWFsIFBSQm9vbCBJc0RlcGVuZGVudE9uKCBjb25zdCBzZWxmX3R5cGUmIGFTdHJpbmcgKSBj
b25zdCB7IHJldHVybiAmYVN0cmluZyA9PSB0aGlzOyB9CiAgfTsKCmNsYXNzIG5zQUNTdHJpbmcK
ICAgIDogcHVibGljIG5zUHJpdmF0ZVNoYXJhYmxlQ1N0cmluZwogIHsKICAgIHB1YmxpYzoKICAg
ICAgdHlwZWRlZiBuc0FDU3RyaW5nIHNlbGZfdHlwZTsKICAgICAgdHlwZWRlZiBuc0FQcm9taXNl
Q1N0cmluZyBwcm9taXNlX3R5cGU7CiAgICAgIHR5cGVkZWYgY2hhciBjaGFyX3R5cGU7CiAgICAg
IHR5cGVkZWYgUFJVbmljaGFyIGluY29tcGF0aWJsZV9jaGFyX3R5cGU7CgoKICAgICAgdHlwZWRl
ZiBuc1JlYWRpbmdJdGVyYXRvcjxjaGFyX3R5cGU+IGNvbnN0X2l0ZXJhdG9yOwogICAgICB0eXBl
ZGVmIG5zV3JpdGluZ0l0ZXJhdG9yPGNoYXJfdHlwZT4gaXRlcmF0b3I7CgogICAgICB0eXBlZGVm
IFBSVWludDMyIHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiBQUlVpbnQzMiBpbmRleF90eXBlOwoK
CgoKCgogICAgICB2aXJ0dWFsIH5uc0FDU3RyaW5nKCkgeyB9CgogICAgICBpbmxpbmUgY29uc3Rf
aXRlcmF0b3ImIEJlZ2luUmVhZGluZyggY29uc3RfaXRlcmF0b3ImICkgY29uc3Q7CiAgICAgIGlu
bGluZSBjb25zdF9pdGVyYXRvciYgRW5kUmVhZGluZyggY29uc3RfaXRlcmF0b3ImICkgY29uc3Q7
CgogICAgICBpbmxpbmUgaXRlcmF0b3ImIEJlZ2luV3JpdGluZyggaXRlcmF0b3ImICk7CiAgICAg
IGlubGluZSBpdGVyYXRvciYgRW5kV3JpdGluZyggaXRlcmF0b3ImICk7CgogICAgICB2aXJ0dWFs
IHNpemVfdHlwZSBMZW5ndGgoKSBjb25zdCA9IDA7CiAgICAgIFBSQm9vbCBJc0VtcHR5KCkgY29u
c3QgeyByZXR1cm4gTGVuZ3RoKCkgPT0gMDsgfQoKICAgICAgaW5saW5lIFBSQm9vbCBFcXVhbHMo
IGNvbnN0IHNlbGZfdHlwZSYgKSBjb25zdDsKICAgICAgUFJCb29sIEVxdWFscyggY29uc3QgY2hh
cl90eXBlKiApIGNvbnN0OwoKCgoKCgoKICAgICAgY2hhcl90eXBlIEZpcnN0KCkgY29uc3Q7CiAg
ICAgIGNoYXJfdHlwZSBMYXN0KCkgY29uc3Q7CgogICAgICBzaXplX3R5cGUgQ291bnRDaGFyKCBj
aGFyX3R5cGUgKSBjb25zdDsKIyAzNDIgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIK
ICAgICAgc2l6ZV90eXBlIExlZnQoIHNlbGZfdHlwZSYsIHNpemVfdHlwZSApIGNvbnN0OwogICAg
ICBzaXplX3R5cGUgTWlkKCBzZWxmX3R5cGUmLCBQUlVpbnQzMiwgUFJVaW50MzIgKSBjb25zdDsK
ICAgICAgc2l6ZV90eXBlIFJpZ2h0KCBzZWxmX3R5cGUmLCBzaXplX3R5cGUgKSBjb25zdDsKCgog
ICAgICBQUkludDMyIEZpbmRDaGFyKCBjaGFyX3R5cGUsIFBSVWludDMyIGFPZmZzZXQgPSAwICkg
Y29uc3Q7CiMgMzU4ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNBU3RyaW5nLmgiCiAgICAgIHZpcnR1
YWwgdm9pZCBTZXRDYXBhY2l0eSggc2l6ZV90eXBlICkgeyB9CiMgMzczICIuLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNBU3RyaW5nLmgiCiAgICAgIHZpcnR1YWwgdm9pZCBTZXRMZW5ndGgoIHNpemVfdHlw
ZSApIHsgfQoKCiAgICAgIHZvaWQKICAgICAgVHJ1bmNhdGUoIHNpemVfdHlwZSBhTmV3TGVuZ3Ro
PTAgKQogICAgICAgIHsKICAgICAgICAgIGlmICghKGFOZXdMZW5ndGg8PXRoaXMtPkxlbmd0aCgp
KSkgbnNEZWJ1Zzo6QXNzZXJ0aW9uKCJDYW4ndCB1c2UgfFRydW5jYXRlKCl8IHRvIG1ha2UgYSBz
dHJpbmcgbG9uZ2VyLiIsICJhTmV3TGVuZ3RoPD10aGlzLT5MZW5ndGgoKSIsICIuLi8uLi9kaXN0
L2luY2x1ZGUvbnNBU3RyaW5nLmgiLCAzNzkpOwoKICAgICAgICAgIGlmICggYU5ld0xlbmd0aCA8
IHRoaXMtPkxlbmd0aCgpICkKICAgICAgICAgICAgU2V0TGVuZ3RoKGFOZXdMZW5ndGgpOwogICAg
ICAgIH0KIyA0MDggIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIKICAgICAgdm9pZCBB
c3NpZ24oIGNvbnN0IHNlbGZfdHlwZSYgYVJlYWRhYmxlICkgeyBBc3NpZ25Gcm9tUmVhZGFibGUo
YVJlYWRhYmxlKTsgfQogICAgICBpbmxpbmUgdm9pZCBBc3NpZ24oIGNvbnN0IHByb21pc2VfdHlw
ZSYgYVJlYWRhYmxlICk7CiAgICAgIHZvaWQgQXNzaWduKCBjb25zdCBjaGFyX3R5cGUqIGFQdHIg
KSB7IGFQdHIgPyBkb19Bc3NpZ25Gcm9tRWxlbWVudFB0cihhUHRyKSA6IFNldExlbmd0aCgwKTsg
fQogICAgICB2b2lkIEFzc2lnbiggY29uc3QgY2hhcl90eXBlKiBhUHRyLCBzaXplX3R5cGUgYUxl
bmd0aCApIHsgZG9fQXNzaWduRnJvbUVsZW1lbnRQdHJMZW5ndGgoYVB0ciwgYUxlbmd0aCk7IH0K
ICAgICAgdm9pZCBBc3NpZ24oIGNoYXJfdHlwZSBhQ2hhciApIHsgZG9fQXNzaWduRnJvbUVsZW1l
bnQoYUNoYXIpOyB9CgoKICAgICAgc2VsZl90eXBlJiBvcGVyYXRvcj0oIGNvbnN0IHNlbGZfdHlw
ZSYgYVJlYWRhYmxlICkgeyBBc3NpZ24oYVJlYWRhYmxlKTsgcmV0dXJuICp0aGlzOyB9CgogICAg
ICBzZWxmX3R5cGUmIG9wZXJhdG9yPSggY29uc3QgcHJvbWlzZV90eXBlJiBhUmVhZGFibGUgKSB7
IEFzc2lnbihhUmVhZGFibGUpOyByZXR1cm4gKnRoaXM7IH0KICAgICAgc2VsZl90eXBlJiBvcGVy
YXRvcj0oIGNvbnN0IGNoYXJfdHlwZSogYVB0ciApIHsgQXNzaWduKGFQdHIpOyByZXR1cm4gKnRo
aXM7IH0KICAgICAgc2VsZl90eXBlJiBvcGVyYXRvcj0oIGNoYXJfdHlwZSBhQ2hhciApIHsgQXNz
aWduKGFDaGFyKTsgcmV0dXJuICp0aGlzOyB9CgoKCgoKCgogICAgICB2b2lkIEFwcGVuZCggY29u
c3Qgc2VsZl90eXBlJiBhUmVhZGFibGUgKSB7IEFwcGVuZEZyb21SZWFkYWJsZShhUmVhZGFibGUp
OyB9CiAgICAgIGlubGluZSB2b2lkIEFwcGVuZCggY29uc3QgcHJvbWlzZV90eXBlJiBhUmVhZGFi
bGUgKTsKICAgICAgdm9pZCBBcHBlbmQoIGNvbnN0IGNoYXJfdHlwZSogYVB0ciApIHsgaWYgKGFQ
dHIpIGRvX0FwcGVuZEZyb21FbGVtZW50UHRyKGFQdHIpOyB9CiAgICAgIHZvaWQgQXBwZW5kKCBj
b25zdCBjaGFyX3R5cGUqIGFQdHIsIHNpemVfdHlwZSBhTGVuZ3RoICkgeyBkb19BcHBlbmRGcm9t
RWxlbWVudFB0ckxlbmd0aChhUHRyLCBhTGVuZ3RoKTsgfQogICAgICB2b2lkIEFwcGVuZCggY2hh
cl90eXBlIGFDaGFyICkgeyBkb19BcHBlbmRGcm9tRWxlbWVudChhQ2hhcik7IH0KCiAgICAgIHNl
bGZfdHlwZSYgb3BlcmF0b3IrPSggY29uc3Qgc2VsZl90eXBlJiBhUmVhZGFibGUgKSB7IEFwcGVu
ZChhUmVhZGFibGUpOyByZXR1cm4gKnRoaXM7IH0KICAgICAgc2VsZl90eXBlJiBvcGVyYXRvcis9
KCBjb25zdCBwcm9taXNlX3R5cGUmIGFSZWFkYWJsZSApIHsgQXBwZW5kKGFSZWFkYWJsZSk7IHJl
dHVybiAqdGhpczsgfQogICAgICBzZWxmX3R5cGUmIG9wZXJhdG9yKz0oIGNvbnN0IGNoYXJfdHlw
ZSogYVB0ciApIHsgQXBwZW5kKGFQdHIpOyByZXR1cm4gKnRoaXM7IH0KICAgICAgc2VsZl90eXBl
JiBvcGVyYXRvcis9KCBjaGFyX3R5cGUgYUNoYXIgKSB7IEFwcGVuZChhQ2hhcik7IHJldHVybiAq
dGhpczsgfQojIDQ0OSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQVN0cmluZy5oIgogICAgICB2b2lk
IEluc2VydCggY29uc3Qgc2VsZl90eXBlJiBhUmVhZGFibGUsIGluZGV4X3R5cGUgYXRQb3NpdGlv
biApIHsgSW5zZXJ0RnJvbVJlYWRhYmxlKGFSZWFkYWJsZSwgYXRQb3NpdGlvbik7IH0KICAgICAg
aW5saW5lIHZvaWQgSW5zZXJ0KCBjb25zdCBwcm9taXNlX3R5cGUmIGFSZWFkYWJsZSwgaW5kZXhf
dHlwZSBhdFBvc2l0aW9uICk7CiAgICAgIHZvaWQgSW5zZXJ0KCBjb25zdCBjaGFyX3R5cGUqIGFQ
dHIsIGluZGV4X3R5cGUgYXRQb3NpdGlvbiApIHsgaWYgKGFQdHIpIGRvX0luc2VydEZyb21FbGVt
ZW50UHRyKGFQdHIsIGF0UG9zaXRpb24pOyB9CiAgICAgIHZvaWQgSW5zZXJ0KCBjb25zdCBjaGFy
X3R5cGUqIGFQdHIsIGluZGV4X3R5cGUgYXRQb3NpdGlvbiwgc2l6ZV90eXBlIGFMZW5ndGggKSB7
IGRvX0luc2VydEZyb21FbGVtZW50UHRyTGVuZ3RoKGFQdHIsIGF0UG9zaXRpb24sIGFMZW5ndGgp
OyB9CiAgICAgIHZvaWQgSW5zZXJ0KCBjaGFyX3R5cGUgYUNoYXIsIGluZGV4X3R5cGUgYXRQb3Np
dGlvbiApIHsgZG9fSW5zZXJ0RnJvbUVsZW1lbnQoYUNoYXIsIGF0UG9zaXRpb24pOyB9CgoKCiAg
ICAgIHZpcnR1YWwgdm9pZCBDdXQoIGluZGV4X3R5cGUgY3V0U3RhcnQsIHNpemVfdHlwZSBjdXRM
ZW5ndGggKTsKCgoKICAgICAgdm9pZCBSZXBsYWNlKCBpbmRleF90eXBlIGN1dFN0YXJ0LCBzaXpl
X3R5cGUgY3V0TGVuZ3RoLCBjb25zdCBzZWxmX3R5cGUmIGFSZWFkYWJsZSApIHsgUmVwbGFjZUZy
b21SZWFkYWJsZShjdXRTdGFydCwgY3V0TGVuZ3RoLCBhUmVhZGFibGUpOyB9CgoKICAgIHByaXZh
dGU6CgogICAgICBpbmRleF90eXBlIENvdW50Q2hhciggaW5jb21wYXRpYmxlX2NoYXJfdHlwZSAp
IGNvbnN0OwogICAgICB2b2lkIG9wZXJhdG9yPSAoIGluY29tcGF0aWJsZV9jaGFyX3R5cGUgKTsK
ICAgICAgdm9pZCBBc3NpZ24gKCBpbmNvbXBhdGlibGVfY2hhcl90eXBlICk7CiAgICAgIHZvaWQg
b3BlcmF0b3IrPSAoIGluY29tcGF0aWJsZV9jaGFyX3R5cGUgKTsKICAgICAgdm9pZCBBcHBlbmQg
KCBpbmNvbXBhdGlibGVfY2hhcl90eXBlICk7CiAgICAgIHZvaWQgSW5zZXJ0ICggaW5jb21wYXRp
YmxlX2NoYXJfdHlwZSwgaW5kZXhfdHlwZSApOwoKCiAgICBwcm90ZWN0ZWQ6CiAgICAgICAgICAg
ICAgdm9pZCBBc3NpZ25Gcm9tUmVhZGFibGUoIGNvbnN0IHNlbGZfdHlwZSYgKTsKICAgICAgICAg
ICAgICB2b2lkIEFzc2lnbkZyb21Qcm9taXNlKCBjb25zdCBzZWxmX3R5cGUmICk7CiAgICAgIHZp
cnR1YWwgdm9pZCBkb19Bc3NpZ25Gcm9tUmVhZGFibGUoIGNvbnN0IHNlbGZfdHlwZSYgKTsKICAg
ICAgdmlydHVhbCB2b2lkIGRvX0Fzc2lnbkZyb21FbGVtZW50UHRyKCBjb25zdCBjaGFyX3R5cGUq
ICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19Bc3NpZ25Gcm9tRWxlbWVudFB0ckxlbmd0aCggY29u
c3QgY2hhcl90eXBlKiwgc2l6ZV90eXBlICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19Bc3NpZ25G
cm9tRWxlbWVudCggY2hhcl90eXBlICk7CgogICAgICAgICAgICAgIHZvaWQgQXBwZW5kRnJvbVJl
YWRhYmxlKCBjb25zdCBzZWxmX3R5cGUmICk7CiAgICAgICAgICAgICAgdm9pZCBBcHBlbmRGcm9t
UHJvbWlzZSggY29uc3Qgc2VsZl90eXBlJiApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXBwZW5k
RnJvbVJlYWRhYmxlKCBjb25zdCBzZWxmX3R5cGUmICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19B
cHBlbmRGcm9tRWxlbWVudFB0ciggY29uc3QgY2hhcl90eXBlKiApOwogICAgICB2aXJ0dWFsIHZv
aWQgZG9fQXBwZW5kRnJvbUVsZW1lbnRQdHJMZW5ndGgoIGNvbnN0IGNoYXJfdHlwZSosIHNpemVf
dHlwZSApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXBwZW5kRnJvbUVsZW1lbnQoIGNoYXJfdHlw
ZSApOwoKICAgICAgICAgICAgICB2b2lkIEluc2VydEZyb21SZWFkYWJsZSggY29uc3Qgc2VsZl90
eXBlJiwgaW5kZXhfdHlwZSApOwogICAgICAgICAgICAgIHZvaWQgSW5zZXJ0RnJvbVByb21pc2Uo
IGNvbnN0IHNlbGZfdHlwZSYsIGluZGV4X3R5cGUgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0lu
c2VydEZyb21SZWFkYWJsZSggY29uc3Qgc2VsZl90eXBlJiwgaW5kZXhfdHlwZSApOwogICAgICB2
aXJ0dWFsIHZvaWQgZG9fSW5zZXJ0RnJvbUVsZW1lbnRQdHIoIGNvbnN0IGNoYXJfdHlwZSosIGlu
ZGV4X3R5cGUgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0luc2VydEZyb21FbGVtZW50UHRyTGVu
Z3RoKCBjb25zdCBjaGFyX3R5cGUqLCBpbmRleF90eXBlLCBzaXplX3R5cGUgKTsKICAgICAgdmly
dHVhbCB2b2lkIGRvX0luc2VydEZyb21FbGVtZW50KCBjaGFyX3R5cGUsIGluZGV4X3R5cGUgKTsK
CiAgICAgICAgICAgICAgdm9pZCBSZXBsYWNlRnJvbVJlYWRhYmxlKCBpbmRleF90eXBlLCBzaXpl
X3R5cGUsIGNvbnN0IHNlbGZfdHlwZSYgKTsKICAgICAgICAgICAgICB2b2lkIFJlcGxhY2VGcm9t
UHJvbWlzZSggaW5kZXhfdHlwZSwgc2l6ZV90eXBlLCBjb25zdCBzZWxmX3R5cGUmICk7CiAgICAg
IHZpcnR1YWwgdm9pZCBkb19SZXBsYWNlRnJvbVJlYWRhYmxlKCBpbmRleF90eXBlLCBzaXplX3R5
cGUsIGNvbnN0IHNlbGZfdHlwZSYgKTsKCgoKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCBjb25z
dCBjaGFyX3R5cGUqIEdldFJlYWRhYmxlRnJhZ21lbnQoIG5zUmVhZGFibGVGcmFnbWVudDxjaGFy
X3R5cGU+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyID0gMCApIGNvbnN0ID0gMDsKICAg
ICAgdmlydHVhbCBjaGFyX3R5cGUqIEdldFdyaXRhYmxlRnJhZ21lbnQoIG5zV3JpdGFibGVGcmFn
bWVudDxjaGFyX3R5cGU+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyID0gMCApID0gMDsK
ICAgICAgdmlydHVhbCBQUkJvb2wgSXNEZXBlbmRlbnRPbiggY29uc3Qgc2VsZl90eXBlJiBhU3Ry
aW5nICkgY29uc3QgeyByZXR1cm4gJmFTdHJpbmcgPT0gdGhpczsgfQogIH07CgojIDEgIi4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0FQcm9taXNlU3RyaW5nLmgiIDEKIyAzNSAiLi4vLi4vZGlzdC9pbmNs
dWRlL25zQVByb21pc2VTdHJpbmcuaCIKY2xhc3MgbnNBUHJvbWlzZVN0cmluZyA6IHB1YmxpYyBu
c0FTdHJpbmcgeyB9OwpjbGFzcyBuc0FQcm9taXNlQ1N0cmluZyA6IHB1YmxpYyBuc0FDU3RyaW5n
IHsgfTsKIyA1MDkgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FTdHJpbmcuaCIgMgoKaW5saW5lCnZv
aWQKbnNBU3RyaW5nOjpBc3NpZ24oIGNvbnN0IG5zQVByb21pc2VTdHJpbmcmIGFSZWFkYWJsZSAp
CiAgewogICAgQXNzaWduRnJvbVByb21pc2UoYVJlYWRhYmxlKTsKICB9CgppbmxpbmUKdm9pZApu
c0FTdHJpbmc6OkFwcGVuZCggY29uc3QgbnNBUHJvbWlzZVN0cmluZyYgYVJlYWRhYmxlICkKICB7
CiAgICBBcHBlbmRGcm9tUHJvbWlzZShhUmVhZGFibGUpOwogIH0KCmlubGluZQp2b2lkCm5zQVN0
cmluZzo6SW5zZXJ0KCBjb25zdCBuc0FQcm9taXNlU3RyaW5nJiBhUmVhZGFibGUsIGluZGV4X3R5
cGUgYXRQb3NpdGlvbiApCiAgewogICAgSW5zZXJ0RnJvbVByb21pc2UoYVJlYWRhYmxlLCBhdFBv
c2l0aW9uKTsKICB9CgppbmxpbmUKdm9pZApuc0FDU3RyaW5nOjpBc3NpZ24oIGNvbnN0IG5zQVBy
b21pc2VDU3RyaW5nJiBhUmVhZGFibGUgKQogIHsKICAgIEFzc2lnbkZyb21Qcm9taXNlKGFSZWFk
YWJsZSk7CiAgfQoKaW5saW5lCnZvaWQKbnNBQ1N0cmluZzo6QXBwZW5kKCBjb25zdCBuc0FQcm9t
aXNlQ1N0cmluZyYgYVJlYWRhYmxlICkKICB7CiAgICBBcHBlbmRGcm9tUHJvbWlzZShhUmVhZGFi
bGUpOwogIH0KCmlubGluZQp2b2lkCm5zQUNTdHJpbmc6Okluc2VydCggY29uc3QgbnNBUHJvbWlz
ZUNTdHJpbmcmIGFSZWFkYWJsZSwgaW5kZXhfdHlwZSBhdFBvc2l0aW9uICkKICB7CiAgICBJbnNl
cnRGcm9tUHJvbWlzZShhUmVhZGFibGUsIGF0UG9zaXRpb24pOwogIH0KCgoKCgppbmxpbmUKbnNB
U3RyaW5nOjpjb25zdF9pdGVyYXRvciYKbnNBU3RyaW5nOjpCZWdpblJlYWRpbmcoIGNvbnN0X2l0
ZXJhdG9yJiBhUmVzdWx0ICkgY29uc3QKICB7CiAgICBhUmVzdWx0Lm1Pd25pbmdTdHJpbmcgPSB0
aGlzOwogICAgR2V0UmVhZGFibGVGcmFnbWVudChhUmVzdWx0Lm1GcmFnbWVudCwga0ZpcnN0RnJh
Z21lbnQpOwogICAgYVJlc3VsdC5tUG9zaXRpb24gPSBhUmVzdWx0Lm1GcmFnbWVudC5tU3RhcnQ7
CiAgICBhUmVzdWx0Lm5vcm1hbGl6ZV9mb3J3YXJkKCk7CiAgICByZXR1cm4gYVJlc3VsdDsKICB9
CgppbmxpbmUKbnNBU3RyaW5nOjpjb25zdF9pdGVyYXRvciYKbnNBU3RyaW5nOjpFbmRSZWFkaW5n
KCBjb25zdF9pdGVyYXRvciYgYVJlc3VsdCApIGNvbnN0CiAgewogICAgYVJlc3VsdC5tT3duaW5n
U3RyaW5nID0gdGhpczsKICAgIEdldFJlYWRhYmxlRnJhZ21lbnQoYVJlc3VsdC5tRnJhZ21lbnQs
IGtMYXN0RnJhZ21lbnQpOwogICAgYVJlc3VsdC5tUG9zaXRpb24gPSBhUmVzdWx0Lm1GcmFnbWVu
dC5tRW5kOwoKICAgIHJldHVybiBhUmVzdWx0OwogIH0KCmlubGluZQpuc0FTdHJpbmc6Oml0ZXJh
dG9yJgpuc0FTdHJpbmc6OkJlZ2luV3JpdGluZyggaXRlcmF0b3ImIGFSZXN1bHQgKQogIHsKICAg
IGFSZXN1bHQubU93bmluZ1N0cmluZyA9IHRoaXM7CiAgICBHZXRXcml0YWJsZUZyYWdtZW50KGFS
ZXN1bHQubUZyYWdtZW50LCBrRmlyc3RGcmFnbWVudCk7CiAgICBhUmVzdWx0Lm1Qb3NpdGlvbiA9
IGFSZXN1bHQubUZyYWdtZW50Lm1TdGFydDsKICAgIGFSZXN1bHQubm9ybWFsaXplX2ZvcndhcmQo
KTsKICAgIHJldHVybiBhUmVzdWx0OwogIH0KCgppbmxpbmUKbnNBU3RyaW5nOjppdGVyYXRvciYK
bnNBU3RyaW5nOjpFbmRXcml0aW5nKCBpdGVyYXRvciYgYVJlc3VsdCApCiAgewogICAgYVJlc3Vs
dC5tT3duaW5nU3RyaW5nID0gdGhpczsKICAgIEdldFdyaXRhYmxlRnJhZ21lbnQoYVJlc3VsdC5t
RnJhZ21lbnQsIGtMYXN0RnJhZ21lbnQpOwogICAgYVJlc3VsdC5tUG9zaXRpb24gPSBhUmVzdWx0
Lm1GcmFnbWVudC5tRW5kOwoKICAgIHJldHVybiBhUmVzdWx0OwogIH0KCmNsYXNzIG5zU3RyaW5n
Q29tcGFyYXRvcgogIHsKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCBpbnQgb3BlcmF0b3IoKSgg
Y29uc3QgUFJVbmljaGFyKiwgY29uc3QgUFJVbmljaGFyKiwgUFJVaW50MzIgYUxlbmd0aCApIGNv
bnN0ID0gMDsKICB9OwoKY2xhc3MgbnNEZWZhdWx0U3RyaW5nQ29tcGFyYXRvcgogICAgOiBwdWJs
aWMgbnNTdHJpbmdDb21wYXJhdG9yCiAgewogICAgcHVibGljOgogICAgICB2aXJ0dWFsIGludCBv
cGVyYXRvcigpKCBjb25zdCBQUlVuaWNoYXIqLCBjb25zdCBQUlVuaWNoYXIqLCBQUlVpbnQzMiBh
TGVuZ3RoICkgY29uc3Q7CiAgfTsKCmNsYXNzIG5zQ2FzZUluc2Vuc2l0aXZlU3RyaW5nQ29tcGFy
YXRvcgogICAgOiBwdWJsaWMgbnNTdHJpbmdDb21wYXJhdG9yCiAgewogICAgcHVibGljOgogICAg
ICB2aXJ0dWFsIGludCBvcGVyYXRvcigpKCBjb25zdCBQUlVuaWNoYXIqLCBjb25zdCBQUlVuaWNo
YXIqLCBQUlVpbnQzMiBhTGVuZ3RoICkgY29uc3Q7CiAgfTsKCiAgICAgICBpbnQgQ29tcGFyZSgg
Y29uc3QgbnNBU3RyaW5nJiBsaHMsIGNvbnN0IG5zQVN0cmluZyYgcmhzLCBjb25zdCBuc1N0cmlu
Z0NvbXBhcmF0b3ImID0gbnNEZWZhdWx0U3RyaW5nQ29tcGFyYXRvcigpICk7CgppbmxpbmUKUFJC
b29sCm5zQVN0cmluZzo6RXF1YWxzKCBjb25zdCBzZWxmX3R5cGUmIHJocyApIGNvbnN0CiAgewog
ICAgcmV0dXJuIExlbmd0aCgpPT1yaHMuTGVuZ3RoKCkgJiYgQ29tcGFyZSgqdGhpcywgcmhzKT09
MDsKICB9CgppbmxpbmUKUFJCb29sCm9wZXJhdG9yIT0oIGNvbnN0IG5zQVN0cmluZyYgbGhzLCBj
b25zdCBuc0FTdHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuICFsaHMuRXF1YWxzKHJocyk7CiAg
fQoKaW5saW5lClBSQm9vbApvcGVyYXRvcjwgKCBjb25zdCBuc0FTdHJpbmcmIGxocywgY29uc3Qg
bnNBU3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiBDb21wYXJlKGxocywgcmhzKTwgMDsKICB9
CgppbmxpbmUKUFJCb29sCm9wZXJhdG9yPD0oIGNvbnN0IG5zQVN0cmluZyYgbGhzLCBjb25zdCBu
c0FTdHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuIENvbXBhcmUobGhzLCByaHMpPD0wOwogIH0K
CmlubGluZQpQUkJvb2wKb3BlcmF0b3I9PSggY29uc3QgbnNBU3RyaW5nJiBsaHMsIGNvbnN0IG5z
QVN0cmluZyYgcmhzICkKICB7CiAgICByZXR1cm4gbGhzLkVxdWFscyhyaHMpOwogIH0KCmlubGlu
ZQpQUkJvb2wKb3BlcmF0b3I+PSggY29uc3QgbnNBU3RyaW5nJiBsaHMsIGNvbnN0IG5zQVN0cmlu
ZyYgcmhzICkKICB7CiAgICByZXR1cm4gQ29tcGFyZShsaHMsIHJocyk+PTA7CiAgfQoKaW5saW5l
ClBSQm9vbApvcGVyYXRvcj4gKCBjb25zdCBuc0FTdHJpbmcmIGxocywgY29uc3QgbnNBU3RyaW5n
JiByaHMgKQogIHsKICAgIHJldHVybiBDb21wYXJlKGxocywgcmhzKT4gMDsKICB9CgppbmxpbmUK
bnNBU3RyaW5nOjpzaXplX3R5cGUKbnNBU3RyaW5nOjpMZWZ0KCBuc0FTdHJpbmcmIGFSZXN1bHQs
IHNpemVfdHlwZSBhTGVuZ3RoVG9Db3B5ICkgY29uc3QKICB7CiAgICByZXR1cm4gTWlkKGFSZXN1
bHQsIDAsIGFMZW5ndGhUb0NvcHkpOwogIH0KCgoKCgoKaW5saW5lCm5zQUNTdHJpbmc6OmNvbnN0
X2l0ZXJhdG9yJgpuc0FDU3RyaW5nOjpCZWdpblJlYWRpbmcoIGNvbnN0X2l0ZXJhdG9yJiBhUmVz
dWx0ICkgY29uc3QKICB7CiAgICBhUmVzdWx0Lm1Pd25pbmdTdHJpbmcgPSB0aGlzOwogICAgR2V0
UmVhZGFibGVGcmFnbWVudChhUmVzdWx0Lm1GcmFnbWVudCwga0ZpcnN0RnJhZ21lbnQpOwogICAg
YVJlc3VsdC5tUG9zaXRpb24gPSBhUmVzdWx0Lm1GcmFnbWVudC5tU3RhcnQ7CiAgICBhUmVzdWx0
Lm5vcm1hbGl6ZV9mb3J3YXJkKCk7CiAgICByZXR1cm4gYVJlc3VsdDsKICB9CgppbmxpbmUKbnNB
Q1N0cmluZzo6Y29uc3RfaXRlcmF0b3ImCm5zQUNTdHJpbmc6OkVuZFJlYWRpbmcoIGNvbnN0X2l0
ZXJhdG9yJiBhUmVzdWx0ICkgY29uc3QKICB7CiAgICBhUmVzdWx0Lm1Pd25pbmdTdHJpbmcgPSB0
aGlzOwogICAgR2V0UmVhZGFibGVGcmFnbWVudChhUmVzdWx0Lm1GcmFnbWVudCwga0xhc3RGcmFn
bWVudCk7CiAgICBhUmVzdWx0Lm1Qb3NpdGlvbiA9IGFSZXN1bHQubUZyYWdtZW50Lm1FbmQ7Cgog
ICAgcmV0dXJuIGFSZXN1bHQ7CiAgfQoKaW5saW5lCm5zQUNTdHJpbmc6Oml0ZXJhdG9yJgpuc0FD
U3RyaW5nOjpCZWdpbldyaXRpbmcoIGl0ZXJhdG9yJiBhUmVzdWx0ICkKICB7CiAgICBhUmVzdWx0
Lm1Pd25pbmdTdHJpbmcgPSB0aGlzOwogICAgR2V0V3JpdGFibGVGcmFnbWVudChhUmVzdWx0Lm1G
cmFnbWVudCwga0ZpcnN0RnJhZ21lbnQpOwogICAgYVJlc3VsdC5tUG9zaXRpb24gPSBhUmVzdWx0
Lm1GcmFnbWVudC5tU3RhcnQ7CiAgICBhUmVzdWx0Lm5vcm1hbGl6ZV9mb3J3YXJkKCk7CiAgICBy
ZXR1cm4gYVJlc3VsdDsKICB9CgoKaW5saW5lCm5zQUNTdHJpbmc6Oml0ZXJhdG9yJgpuc0FDU3Ry
aW5nOjpFbmRXcml0aW5nKCBpdGVyYXRvciYgYVJlc3VsdCApCiAgewogICAgYVJlc3VsdC5tT3du
aW5nU3RyaW5nID0gdGhpczsKICAgIEdldFdyaXRhYmxlRnJhZ21lbnQoYVJlc3VsdC5tRnJhZ21l
bnQsIGtMYXN0RnJhZ21lbnQpOwogICAgYVJlc3VsdC5tUG9zaXRpb24gPSBhUmVzdWx0Lm1GcmFn
bWVudC5tRW5kOwoKICAgIHJldHVybiBhUmVzdWx0OwogIH0KCgpjbGFzcyBuc0NTdHJpbmdDb21w
YXJhdG9yCiAgewogICAgcHVibGljOgogICAgICB2aXJ0dWFsIGludCBvcGVyYXRvcigpKCBjb25z
dCBjaGFyKiwgY29uc3QgY2hhciosIFBSVWludDMyIGFMZW5ndGggKSBjb25zdCA9IDA7CiAgfTsK
CmNsYXNzIG5zRGVmYXVsdENTdHJpbmdDb21wYXJhdG9yCiAgICA6IHB1YmxpYyBuc0NTdHJpbmdD
b21wYXJhdG9yCiAgewogICAgcHVibGljOgogICAgICB2aXJ0dWFsIGludCBvcGVyYXRvcigpKCBj
b25zdCBjaGFyKiwgY29uc3QgY2hhciosIFBSVWludDMyIGFMZW5ndGggKSBjb25zdDsKICB9OwoK
Y2xhc3MgbnNDYXNlSW5zZW5zaXRpdmVDU3RyaW5nQ29tcGFyYXRvcgogICAgOiBwdWJsaWMgbnND
U3RyaW5nQ29tcGFyYXRvcgogIHsKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCBpbnQgb3BlcmF0
b3IoKSggY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBQUlVpbnQzMiBhTGVuZ3RoICkgY29uc3Q7
CiAgfTsKCiAgICAgICBpbnQgQ29tcGFyZSggY29uc3QgbnNBQ1N0cmluZyYgbGhzLCBjb25zdCBu
c0FDU3RyaW5nJiByaHMsIGNvbnN0IG5zQ1N0cmluZ0NvbXBhcmF0b3ImID0gbnNEZWZhdWx0Q1N0
cmluZ0NvbXBhcmF0b3IoKSApOwoKaW5saW5lClBSQm9vbApuc0FDU3RyaW5nOjpFcXVhbHMoIGNv
bnN0IHNlbGZfdHlwZSYgcmhzICkgY29uc3QKICB7CiAgICByZXR1cm4gTGVuZ3RoKCk9PXJocy5M
ZW5ndGgoKSAmJiBDb21wYXJlKCp0aGlzLCByaHMpPT0wOwogIH0KCmlubGluZQpQUkJvb2wKb3Bl
cmF0b3IhPSggY29uc3QgbnNBQ1N0cmluZyYgbGhzLCBjb25zdCBuc0FDU3RyaW5nJiByaHMgKQog
IHsKICAgIHJldHVybiAhbGhzLkVxdWFscyhyaHMpOwogIH0KCmlubGluZQpQUkJvb2wKb3BlcmF0
b3I8ICggY29uc3QgbnNBQ1N0cmluZyYgbGhzLCBjb25zdCBuc0FDU3RyaW5nJiByaHMgKQogIHsK
ICAgIHJldHVybiBDb21wYXJlKGxocywgcmhzKTwgMDsKICB9CgppbmxpbmUKUFJCb29sCm9wZXJh
dG9yPD0oIGNvbnN0IG5zQUNTdHJpbmcmIGxocywgY29uc3QgbnNBQ1N0cmluZyYgcmhzICkKICB7
CiAgICByZXR1cm4gQ29tcGFyZShsaHMsIHJocyk8PTA7CiAgfQoKaW5saW5lClBSQm9vbApvcGVy
YXRvcj09KCBjb25zdCBuc0FDU3RyaW5nJiBsaHMsIGNvbnN0IG5zQUNTdHJpbmcmIHJocyApCiAg
ewogICAgcmV0dXJuIGxocy5FcXVhbHMocmhzKTsKICB9CgppbmxpbmUKUFJCb29sCm9wZXJhdG9y
Pj0oIGNvbnN0IG5zQUNTdHJpbmcmIGxocywgY29uc3QgbnNBQ1N0cmluZyYgcmhzICkKICB7CiAg
ICByZXR1cm4gQ29tcGFyZShsaHMsIHJocyk+PTA7CiAgfQoKaW5saW5lClBSQm9vbApvcGVyYXRv
cj4gKCBjb25zdCBuc0FDU3RyaW5nJiBsaHMsIGNvbnN0IG5zQUNTdHJpbmcmIHJocyApCiAgewog
ICAgcmV0dXJuIENvbXBhcmUobGhzLCByaHMpPiAwOwogIH0KCmlubGluZQpuc0FDU3RyaW5nOjpz
aXplX3R5cGUKbnNBQ1N0cmluZzo6TGVmdCggbnNBQ1N0cmluZyYgYVJlc3VsdCwgc2l6ZV90eXBl
IGFMZW5ndGhUb0NvcHkgKSBjb25zdAogIHsKICAgIHJldHVybiBNaWQoYVJlc3VsdCwgMCwgYUxl
bmd0aFRvQ29weSk7CiAgfQoKCgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0RlcGVuZGVudENv
bmNhdGVuYXRpb24uaCIgMQojIDUwICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNEZXBlbmRlbnRDb25j
YXRlbmF0aW9uLmgiCmNsYXNzIG5zRGVwZW5kZW50Q29uY2F0ZW5hdGlvbgogICAgOiBwdWJsaWMg
bnNBUHJvbWlzZVN0cmluZwogIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBuc0RlcGVuZGVu
dENvbmNhdGVuYXRpb24gc2VsZl90eXBlOwogICAgICB0eXBlZGVmIFBSVW5pY2hhciBjaGFyX3R5
cGU7CiAgICAgIHR5cGVkZWYgbnNBU3RyaW5nIHN0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHN0
cmluZ190eXBlOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKCiAgICBwcm90ZWN0ZWQ6
CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKiBHZXRSZWFkYWJsZUZyYWdtZW50KCBuc1Jl
YWRhYmxlRnJhZ21lbnQ8Y2hhcl90eXBlPiYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiAp
IGNvbnN0OwogICAgICB2aXJ0dWFsIGNoYXJfdHlwZSogR2V0V3JpdGFibGVGcmFnbWVudCggbnNX
cml0YWJsZUZyYWdtZW50PGNoYXJfdHlwZT4mLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIg
KSB7IHJldHVybiAwOyB9CgogICAgICBlbnVtIHsga0xlZnRTdHJpbmcsIGtSaWdodFN0cmluZyB9
OwoKICAgICAgaW50CiAgICAgIEdldEN1cnJlbnRTdHJpbmdGcm9tRnJhZ21lbnQoIGNvbnN0IG5z
UmVhZGFibGVGcmFnbWVudDxjaGFyX3R5cGU+JiBhRnJhZ21lbnQgKSBjb25zdAogICAgICAgIHsK
ICAgICAgICAgIHJldHVybiAocmVpbnRlcnByZXRfY2FzdDwgUFJVcHRyZGlmZiA+KGFGcmFnbWVu
dC5tRnJhZ21lbnRJZGVudGlmaWVyKSAmIG1GcmFnbWVudElkZW50aWZpZXJNYXNrKSA/IGtSaWdo
dFN0cmluZyA6IGtMZWZ0U3RyaW5nOwogICAgICAgIH0KCiAgICAgIGludAogICAgICBTZXRMZWZ0
U3RyaW5nSW5GcmFnbWVudCggbnNSZWFkYWJsZUZyYWdtZW50PGNoYXJfdHlwZT4mIGFGcmFnbWVu
dCApIGNvbnN0CiAgICAgICAgewogICAgICAgICAgYUZyYWdtZW50Lm1GcmFnbWVudElkZW50aWZp
ZXIgPSByZWludGVycHJldF9jYXN0PCB2b2lkKiA+KHJlaW50ZXJwcmV0X2Nhc3Q8IFBSVXB0cmRp
ZmYgPihhRnJhZ21lbnQubUZyYWdtZW50SWRlbnRpZmllcikgJiB+bUZyYWdtZW50SWRlbnRpZmll
ck1hc2spOwogICAgICAgICAgcmV0dXJuIGtMZWZ0U3RyaW5nOwogICAgICAgIH0KCiAgICAgIGlu
dAogICAgICBTZXRSaWdodFN0cmluZ0luRnJhZ21lbnQoIG5zUmVhZGFibGVGcmFnbWVudDxjaGFy
X3R5cGU+JiBhRnJhZ21lbnQgKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIGFGcmFnbWVudC5t
RnJhZ21lbnRJZGVudGlmaWVyID0gcmVpbnRlcnByZXRfY2FzdDwgdm9pZCogPihyZWludGVycHJl
dF9jYXN0PCBQUlVwdHJkaWZmID4oYUZyYWdtZW50Lm1GcmFnbWVudElkZW50aWZpZXIpIHwgbUZy
YWdtZW50SWRlbnRpZmllck1hc2spOwogICAgICAgICAgcmV0dXJuIGtSaWdodFN0cmluZzsKICAg
ICAgICB9CgogICAgcHVibGljOgogICAgICBuc0RlcGVuZGVudENvbmNhdGVuYXRpb24oIGNvbnN0
IHN0cmluZ190eXBlJiBhTGVmdFN0cmluZywgY29uc3Qgc3RyaW5nX3R5cGUmIGFSaWdodFN0cmlu
ZywgUFJVaW50MzIgYU1hc2sgPSAxICkKICAgICAgICAgIDogbUZyYWdtZW50SWRlbnRpZmllck1h
c2soYU1hc2spCiAgICAgICAgewogICAgICAgICAgbVN0cmluZ3Nba0xlZnRTdHJpbmddID0gJmFM
ZWZ0U3RyaW5nOwogICAgICAgICAgbVN0cmluZ3Nba1JpZ2h0U3RyaW5nXSA9ICZhUmlnaHRTdHJp
bmc7CiAgICAgICAgfQoKICAgICAgbnNEZXBlbmRlbnRDb25jYXRlbmF0aW9uKCBjb25zdCBzZWxm
X3R5cGUmIGFMZWZ0U3RyaW5nLCBjb25zdCBzdHJpbmdfdHlwZSYgYVJpZ2h0U3RyaW5nICkKICAg
ICAgICAgIDogbUZyYWdtZW50SWRlbnRpZmllck1hc2soYUxlZnRTdHJpbmcubUZyYWdtZW50SWRl
bnRpZmllck1hc2s8PDEpCiAgICAgICAgewogICAgICAgICAgbVN0cmluZ3Nba0xlZnRTdHJpbmdd
ID0gJmFMZWZ0U3RyaW5nOwogICAgICAgICAgbVN0cmluZ3Nba1JpZ2h0U3RyaW5nXSA9ICZhUmln
aHRTdHJpbmc7CiAgICAgICAgfQoKCgoKICAgIHByaXZhdGU6CgogICAgICB2b2lkIG9wZXJhdG9y
PSggY29uc3Qgc2VsZl90eXBlJiApOwoKICAgIHB1YmxpYzoKCiAgICAgIHZpcnR1YWwgUFJVaW50
MzIgTGVuZ3RoKCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgUFJCb29sIElzRGVwZW5kZW50T24oIGNv
bnN0IHN0cmluZ190eXBlJiApIGNvbnN0OwoKCgoKICAgICAgUFJVaW50MzIgR2V0RnJhZ21lbnRJ
ZGVudGlmaWVyTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1GcmFnbWVudElkZW50aWZpZXJNYXNrOyB9
CgogICAgcHJpdmF0ZToKICAgICAgdm9pZCBvcGVyYXRvcisoIGNvbnN0IHNlbGZfdHlwZSYgKTsK
CgoKICAgIHByaXZhdGU6CiAgICAgIGNvbnN0IHN0cmluZ190eXBlKiBtU3RyaW5nc1syXTsKICAg
ICAgUFJVaW50MzIgbUZyYWdtZW50SWRlbnRpZmllck1hc2s7CiAgfTsKCmNsYXNzIG5zRGVwZW5k
ZW50Q0NvbmNhdGVuYXRpb24KICAgIDogcHVibGljIG5zQVByb21pc2VDU3RyaW5nCiAgewogICAg
cHVibGljOgogICAgICB0eXBlZGVmIG5zRGVwZW5kZW50Q0NvbmNhdGVuYXRpb24gc2VsZl90eXBl
OwogICAgICB0eXBlZGVmIGNoYXIgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIG5zQUNTdHJpbmcg
c3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyaW5nX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGNv
bnN0X2l0ZXJhdG9yOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5
cGUqIEdldFJlYWRhYmxlRnJhZ21lbnQoIG5zUmVhZGFibGVGcmFnbWVudDxjaGFyX3R5cGU+Jiwg
bnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkgY29uc3Q7CiAgICAgIHZpcnR1YWwgY2hhcl90
eXBlKiBHZXRXcml0YWJsZUZyYWdtZW50KCBuc1dyaXRhYmxlRnJhZ21lbnQ8Y2hhcl90eXBlPiYs
IG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiApIHsgcmV0dXJuIDA7IH0KCiAgICAgIGVudW0g
eyBrTGVmdFN0cmluZywga1JpZ2h0U3RyaW5nIH07CgogICAgICBpbnQKICAgICAgR2V0Q3VycmVu
dFN0cmluZ0Zyb21GcmFnbWVudCggY29uc3QgbnNSZWFkYWJsZUZyYWdtZW50PGNoYXJfdHlwZT4m
IGFGcmFnbWVudCApIGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIChyZWludGVycHJl
dF9jYXN0PCBQUlVwdHJkaWZmID4oYUZyYWdtZW50Lm1GcmFnbWVudElkZW50aWZpZXIpICYgbUZy
YWdtZW50SWRlbnRpZmllck1hc2spID8ga1JpZ2h0U3RyaW5nIDoga0xlZnRTdHJpbmc7CiAgICAg
ICAgfQoKICAgICAgaW50CiAgICAgIFNldExlZnRTdHJpbmdJbkZyYWdtZW50KCBuc1JlYWRhYmxl
RnJhZ21lbnQ8Y2hhcl90eXBlPiYgYUZyYWdtZW50ICkgY29uc3QKICAgICAgICB7CiAgICAgICAg
ICBhRnJhZ21lbnQubUZyYWdtZW50SWRlbnRpZmllciA9IHJlaW50ZXJwcmV0X2Nhc3Q8IHZvaWQq
ID4ocmVpbnRlcnByZXRfY2FzdDwgUFJVcHRyZGlmZiA+KGFGcmFnbWVudC5tRnJhZ21lbnRJZGVu
dGlmaWVyKSAmIH5tRnJhZ21lbnRJZGVudGlmaWVyTWFzayk7CiAgICAgICAgICByZXR1cm4ga0xl
ZnRTdHJpbmc7CiAgICAgICAgfQoKICAgICAgaW50CiAgICAgIFNldFJpZ2h0U3RyaW5nSW5GcmFn
bWVudCggbnNSZWFkYWJsZUZyYWdtZW50PGNoYXJfdHlwZT4mIGFGcmFnbWVudCApIGNvbnN0CiAg
ICAgICAgewogICAgICAgICAgYUZyYWdtZW50Lm1GcmFnbWVudElkZW50aWZpZXIgPSByZWludGVy
cHJldF9jYXN0PCB2b2lkKiA+KHJlaW50ZXJwcmV0X2Nhc3Q8IFBSVXB0cmRpZmYgPihhRnJhZ21l
bnQubUZyYWdtZW50SWRlbnRpZmllcikgfCBtRnJhZ21lbnRJZGVudGlmaWVyTWFzayk7CiAgICAg
ICAgICByZXR1cm4ga1JpZ2h0U3RyaW5nOwogICAgICAgIH0KCiAgICBwdWJsaWM6CiAgICAgIG5z
RGVwZW5kZW50Q0NvbmNhdGVuYXRpb24oIGNvbnN0IHN0cmluZ190eXBlJiBhTGVmdFN0cmluZywg
Y29uc3Qgc3RyaW5nX3R5cGUmIGFSaWdodFN0cmluZywgUFJVaW50MzIgYU1hc2sgPSAxICkKICAg
ICAgICAgIDogbUZyYWdtZW50SWRlbnRpZmllck1hc2soYU1hc2spCiAgICAgICAgewogICAgICAg
ICAgbVN0cmluZ3Nba0xlZnRTdHJpbmddID0gJmFMZWZ0U3RyaW5nOwogICAgICAgICAgbVN0cmlu
Z3Nba1JpZ2h0U3RyaW5nXSA9ICZhUmlnaHRTdHJpbmc7CiAgICAgICAgfQoKICAgICAgbnNEZXBl
bmRlbnRDQ29uY2F0ZW5hdGlvbiggY29uc3Qgc2VsZl90eXBlJiBhTGVmdFN0cmluZywgY29uc3Qg
c3RyaW5nX3R5cGUmIGFSaWdodFN0cmluZyApCiAgICAgICAgICA6IG1GcmFnbWVudElkZW50aWZp
ZXJNYXNrKGFMZWZ0U3RyaW5nLm1GcmFnbWVudElkZW50aWZpZXJNYXNrPDwxKQogICAgICAgIHsK
ICAgICAgICAgIG1TdHJpbmdzW2tMZWZ0U3RyaW5nXSA9ICZhTGVmdFN0cmluZzsKICAgICAgICAg
IG1TdHJpbmdzW2tSaWdodFN0cmluZ10gPSAmYVJpZ2h0U3RyaW5nOwogICAgICAgIH0KCgoKCiAg
ICBwcml2YXRlOgoKICAgICAgdm9pZCBvcGVyYXRvcj0oIGNvbnN0IHNlbGZfdHlwZSYgKTsKCiAg
ICBwdWJsaWM6CgogICAgICB2aXJ0dWFsIFBSVWludDMyIExlbmd0aCgpIGNvbnN0OwogICAgICB2
aXJ0dWFsIFBSQm9vbCBJc0RlcGVuZGVudE9uKCBjb25zdCBzdHJpbmdfdHlwZSYgKSBjb25zdDsK
CgoKCiAgICAgIFBSVWludDMyIEdldEZyYWdtZW50SWRlbnRpZmllck1hc2soKSBjb25zdCB7IHJl
dHVybiBtRnJhZ21lbnRJZGVudGlmaWVyTWFzazsgfQoKICAgIHByaXZhdGU6CiAgICAgIHZvaWQg
b3BlcmF0b3IrKCBjb25zdCBzZWxmX3R5cGUmICk7CgoKCiAgICBwcml2YXRlOgogICAgICBjb25z
dCBzdHJpbmdfdHlwZSogbVN0cmluZ3NbMl07CiAgICAgIFBSVWludDMyIG1GcmFnbWVudElkZW50
aWZpZXJNYXNrOwogIH07CiMgMjI0ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNEZXBlbmRlbnRDb25j
YXRlbmF0aW9uLmgiCmlubGluZQpjb25zdCBuc0RlcGVuZGVudENvbmNhdGVuYXRpb24Kb3BlcmF0
b3IrKCBjb25zdCBuc0RlcGVuZGVudENvbmNhdGVuYXRpb24mIGxocywgY29uc3QgbnNBU3RyaW5n
JiByaHMgKQogIHsKICAgIHJldHVybiBuc0RlcGVuZGVudENvbmNhdGVuYXRpb24obGhzLCByaHMs
IGxocy5HZXRGcmFnbWVudElkZW50aWZpZXJNYXNrKCk8PDEpOwogIH0KCmlubGluZQpjb25zdCBu
c0RlcGVuZGVudENDb25jYXRlbmF0aW9uCm9wZXJhdG9yKyggY29uc3QgbnNEZXBlbmRlbnRDQ29u
Y2F0ZW5hdGlvbiYgbGhzLCBjb25zdCBuc0FDU3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiBu
c0RlcGVuZGVudENDb25jYXRlbmF0aW9uKGxocywgcmhzLCBsaHMuR2V0RnJhZ21lbnRJZGVudGlm
aWVyTWFzaygpPDwxKTsKICB9CgppbmxpbmUKY29uc3QgbnNEZXBlbmRlbnRDb25jYXRlbmF0aW9u
Cm9wZXJhdG9yKyggY29uc3QgbnNBU3RyaW5nJiBsaHMsIGNvbnN0IG5zQVN0cmluZyYgcmhzICkK
ICB7CiAgICByZXR1cm4gbnNEZXBlbmRlbnRDb25jYXRlbmF0aW9uKGxocywgcmhzKTsKICB9Cgpp
bmxpbmUKY29uc3QgbnNEZXBlbmRlbnRDQ29uY2F0ZW5hdGlvbgpvcGVyYXRvcisoIGNvbnN0IG5z
QUNTdHJpbmcmIGxocywgY29uc3QgbnNBQ1N0cmluZyYgcmhzICkKICB7CiAgICByZXR1cm4gbnNE
ZXBlbmRlbnRDQ29uY2F0ZW5hdGlvbihsaHMsIHJocyk7CiAgfQojIDgxMSAiLi4vLi4vZGlzdC9p
bmNsdWRlL25zQVN0cmluZy5oIiAyCiMgMzEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FSZWFkYWJs
ZVN0cmluZy5oIiAyCgoKdHlwZWRlZiBjb25zdCBuc0FTdHJpbmcgbnNBUmVhZGFibGVTdHJpbmc7
CnR5cGVkZWYgY29uc3QgbnNBQ1N0cmluZyBuc0FSZWFkYWJsZUNTdHJpbmc7CgoKIyAxICIuLi8u
Li9kaXN0L2luY2x1ZGUvbnNMaXRlcmFsU3RyaW5nLmgiIDEKIyAzMiAiLi4vLi4vZGlzdC9pbmNs
dWRlL25zTGl0ZXJhbFN0cmluZy5oIgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0RlcGVuZGVu
dFN0cmluZy5oIiAxCiMgMjggIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0RlcGVuZGVudFN0cmluZy5o
IgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FGbGF0U3RyaW5nLmgiIDEKIyAzMyAiLi4vLi4v
ZGlzdC9pbmNsdWRlL25zQUZsYXRTdHJpbmcuaCIKY2xhc3MgbnNBRmxhdFN0cmluZwogICAgOiBw
dWJsaWMgbnNBU3RyaW5nCiAgewogICAgcHVibGljOgoKICAgICAgdmlydHVhbCBjb25zdCBQUlVu
aWNoYXIqIGdldCgpIGNvbnN0OwogICAgICBQUlVuaWNoYXIgb3BlcmF0b3JbXSggUFJVaW50MzIg
aSApIGNvbnN0IHsgcmV0dXJuIGdldCgpWyBpIF07IH0KICAgICAgUFJVbmljaGFyIENoYXJBdCgg
UFJVaW50MzIgKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgUFJVaW50MzIgTGVuZ3RoKCkgY29uc3Q7
CgoKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCBjb25zdCBQUlVuaWNoYXIqIEdldFJlYWRhYmxl
RnJhZ21lbnQoIG5zUmVhZGFibGVGcmFnbWVudDxQUlVuaWNoYXI+JiwgbnNGcmFnbWVudFJlcXVl
c3QsIFBSVWludDMyICkgY29uc3Q7CiAgICAgIHZpcnR1YWwgUFJVbmljaGFyKiBHZXRXcml0YWJs
ZUZyYWdtZW50KCBuc1dyaXRhYmxlRnJhZ21lbnQ8UFJVbmljaGFyPiYsIG5zRnJhZ21lbnRSZXF1
ZXN0LCBQUlVpbnQzMiApOwogIH07CgpjbGFzcyBuc0FGbGF0Q1N0cmluZwogICAgOiBwdWJsaWMg
bnNBQ1N0cmluZwogIHsKICAgIHB1YmxpYzoKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhciogZ2V0
KCkgY29uc3Q7CiAgICAgIGNoYXIgb3BlcmF0b3JbXSggUFJVaW50MzIgaSApIGNvbnN0IHsgcmV0
dXJuIGdldCgpWyBpIF07IH0KICAgICAgY2hhciBDaGFyQXQoIFBSVWludDMyICkgY29uc3Q7Cgog
ICAgICB2aXJ0dWFsIFBSVWludDMyIExlbmd0aCgpIGNvbnN0OwoKCiAgICBwdWJsaWM6CiAgICAg
IHZpcnR1YWwgY29uc3QgY2hhciogR2V0UmVhZGFibGVGcmFnbWVudCggbnNSZWFkYWJsZUZyYWdt
ZW50PGNoYXI+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkgY29uc3Q7CiAgICAgIHZp
cnR1YWwgY2hhciogR2V0V3JpdGFibGVGcmFnbWVudCggbnNXcml0YWJsZUZyYWdtZW50PGNoYXI+
JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICk7CiAgfTsKCmlubGluZQpQUlVuaWNoYXIK
bnNBRmxhdFN0cmluZzo6Q2hhckF0KCBQUlVpbnQzMiBpICkgY29uc3QKICB7CiAgICBpZiAoIShp
PExlbmd0aCgpKSkgbnNEZWJ1Zzo6QXNzZXJ0aW9uKCJ8Q2hhckF0fCBvdXQtb2YtcmFuZ2UiLCAi
aTxMZW5ndGgoKSIsICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNBRmxhdFN0cmluZy5oIiwgNzEpOwog
ICAgcmV0dXJuIG9wZXJhdG9yW10oaSk7CiAgfQoKaW5saW5lCmNoYXIKbnNBRmxhdENTdHJpbmc6
OkNoYXJBdCggUFJVaW50MzIgaSApIGNvbnN0CiAgewogICAgaWYgKCEoaTxMZW5ndGgoKSkpIG5z
RGVidWc6OkFzc2VydGlvbigifENoYXJBdHwgb3V0LW9mLXJhbmdlIiwgImk8TGVuZ3RoKCkiLCAi
Li4vLi4vZGlzdC9pbmNsdWRlL25zQUZsYXRTdHJpbmcuaCIsIDc5KTsKICAgIHJldHVybiBvcGVy
YXRvcltdKGkpOwogIH0KIyAyOSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zRGVwZW5kZW50U3RyaW5n
LmgiIDIKIyA0NSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zRGVwZW5kZW50U3RyaW5nLmgiCmNsYXNz
IG5zRGVwZW5kZW50U3RyaW5nCiAgICAgIDogcHVibGljIG5zQUZsYXRTdHJpbmcKICB7CiAgICBw
dWJsaWM6CiAgICAgIHZvaWQKICAgICAgUmViaW5kKCBjb25zdCBQUlVuaWNoYXIqIGFQdHIgKQog
ICAgICAgIHsKICAgICAgICAgIG1IYW5kbGUuRGF0YVN0YXJ0KGFQdHIpOwogICAgICAgICAgbUhh
bmRsZS5EYXRhRW5kKGFQdHIgPyAoYVB0cituc0NoYXJUcmFpdHM8UFJVbmljaGFyPjo6bGVuZ3Ro
KGFQdHIpKSA6IDApOwogICAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgUmViaW5kKCBjb25zdCBQ
UlVuaWNoYXIqIGFTdGFydFB0ciwgY29uc3QgUFJVbmljaGFyKiBhRW5kUHRyICkKICAgICAgICB7
CiAgICAgICAgICBtSGFuZGxlLkRhdGFTdGFydChhU3RhcnRQdHIpOwogICAgICAgICAgbUhhbmRs
ZS5EYXRhRW5kKGFFbmRQdHIpOwogICAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgUmViaW5kKCBj
b25zdCBQUlVuaWNoYXIqIGFQdHIsIFBSVWludDMyIGFMZW5ndGggKQogICAgICAgIHsKICAgICAg
ICAgIGlmICggYUxlbmd0aCA9PSBQUlVpbnQzMigtMSkgKQogICAgICAgICAgICB7CgogICAgICAg
ICAgICAgIFJlYmluZChhUHRyKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAg
ICAgICBSZWJpbmQoYVB0ciwgYVB0cithTGVuZ3RoKTsKICAgICAgICB9CgogICAgICBuc0RlcGVu
ZGVudFN0cmluZyggY29uc3QgUFJVbmljaGFyKiBhU3RhcnRQdHIsIGNvbnN0IFBSVW5pY2hhciog
YUVuZFB0ciApIHsgUmViaW5kKGFTdGFydFB0ciwgYUVuZFB0cik7IH0KICAgICAgbnNEZXBlbmRl
bnRTdHJpbmcoIGNvbnN0IFBSVW5pY2hhciogYVB0ciwgUFJVaW50MzIgYUxlbmd0aCApIHsgUmVi
aW5kKGFQdHIsIGFMZW5ndGgpOyB9CiAgICAgIGV4cGxpY2l0IG5zRGVwZW5kZW50U3RyaW5nKCBj
b25zdCBQUlVuaWNoYXIqIGFQdHIgKSB7IFJlYmluZChhUHRyKTsgfQoKCgoKICAgIHByaXZhdGU6
CgogICAgICB2b2lkIG9wZXJhdG9yPSggY29uc3QgbnNEZXBlbmRlbnRTdHJpbmcmICk7CgogICAg
cHVibGljOgogICAgICB2aXJ0dWFsIGNvbnN0IG5zQnVmZmVySGFuZGxlPFBSVW5pY2hhcj4qIEdl
dEZsYXRCdWZmZXJIYW5kbGUoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PCBjb25z
dCBuc0J1ZmZlckhhbmRsZTxQUlVuaWNoYXI+KiA+KCZtSGFuZGxlKTsgfQogICAgICB2aXJ0dWFs
IGNvbnN0IG5zQnVmZmVySGFuZGxlPFBSVW5pY2hhcj4qIEdldEJ1ZmZlckhhbmRsZSgpIGNvbnN0
IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IGNvbnN0IG5zQnVmZmVySGFuZGxlPFBSVW5pY2hh
cj4qID4oJm1IYW5kbGUpOyB9CgogICAgcHJpdmF0ZToKICAgICAgbnNDb25zdEJ1ZmZlckhhbmRs
ZTxQUlVuaWNoYXI+IG1IYW5kbGU7CiAgfTsKCgoKY2xhc3MgbnNEZXBlbmRlbnRDU3RyaW5nCiAg
ICAgIDogcHVibGljIG5zQUZsYXRDU3RyaW5nCiAgewogICAgcHVibGljOgogICAgICB2b2lkCiAg
ICAgIFJlYmluZCggY29uc3QgY2hhciogYVB0ciApCiAgICAgICAgewogICAgICAgICAgbUhhbmRs
ZS5EYXRhU3RhcnQoYVB0cik7CiAgICAgICAgICBtSGFuZGxlLkRhdGFFbmQoYVB0ciA/IChhUHRy
K25zQ2hhclRyYWl0czxjaGFyPjo6bGVuZ3RoKGFQdHIpKSA6IDApOwogICAgICAgIH0KCiAgICAg
IHZvaWQKICAgICAgUmViaW5kKCBjb25zdCBjaGFyKiBhU3RhcnRQdHIsIGNvbnN0IGNoYXIqIGFF
bmRQdHIgKQogICAgICAgIHsKICAgICAgICAgIG1IYW5kbGUuRGF0YVN0YXJ0KGFTdGFydFB0cik7
CiAgICAgICAgICBtSGFuZGxlLkRhdGFFbmQoYUVuZFB0cik7CiAgICAgICAgfQoKICAgICAgdm9p
ZAogICAgICBSZWJpbmQoIGNvbnN0IGNoYXIqIGFQdHIsIFBSVWludDMyIGFMZW5ndGggKQogICAg
ICAgIHsKICAgICAgICAgIGlmICggYUxlbmd0aCA9PSBQUlVpbnQzMigtMSkgKQogICAgICAgICAg
ICB7CgogICAgICAgICAgICAgIFJlYmluZChhUHRyKTsKICAgICAgICAgICAgfQogICAgICAgICAg
ZWxzZQogICAgICAgICAgICBSZWJpbmQoYVB0ciwgYVB0cithTGVuZ3RoKTsKICAgICAgICB9Cgog
ICAgICBuc0RlcGVuZGVudENTdHJpbmcoIGNvbnN0IGNoYXIqIGFTdGFydFB0ciwgY29uc3QgY2hh
ciogYUVuZFB0ciApIHsgUmViaW5kKGFTdGFydFB0ciwgYUVuZFB0cik7IH0KICAgICAgbnNEZXBl
bmRlbnRDU3RyaW5nKCBjb25zdCBjaGFyKiBhUHRyLCBQUlVpbnQzMiBhTGVuZ3RoICkgeyBSZWJp
bmQoYVB0ciwgYUxlbmd0aCk7IH0KICAgICAgZXhwbGljaXQgbnNEZXBlbmRlbnRDU3RyaW5nKCBj
b25zdCBjaGFyKiBhUHRyICkgeyBSZWJpbmQoYVB0cik7IH0KCgoKCiAgICBwcml2YXRlOgoKICAg
ICAgdm9pZCBvcGVyYXRvcj0oIGNvbnN0IG5zRGVwZW5kZW50Q1N0cmluZyYgKTsKCiAgICBwdWJs
aWM6CiAgICAgIHZpcnR1YWwgY29uc3QgbnNCdWZmZXJIYW5kbGU8Y2hhcj4qIEdldEZsYXRCdWZm
ZXJIYW5kbGUoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PCBjb25zdCBuc0J1ZmZl
ckhhbmRsZTxjaGFyPiogPigmbUhhbmRsZSk7IH0KICAgICAgdmlydHVhbCBjb25zdCBuc0J1ZmZl
ckhhbmRsZTxjaGFyPiogR2V0QnVmZmVySGFuZGxlKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDwgY29uc3QgbnNCdWZmZXJIYW5kbGU8Y2hhcj4qID4oJm1IYW5kbGUpOyB9CgogICAg
cHJpdmF0ZToKICAgICAgbnNDb25zdEJ1ZmZlckhhbmRsZTxjaGFyPiBtSGFuZGxlOwogIH07CiMg
MzMgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0xpdGVyYWxTdHJpbmcuaCIgMgojIDM4ICIuLi8uLi9k
aXN0L2luY2x1ZGUvbnNBUmVhZGFibGVTdHJpbmcuaCIgMgoKCgojIDEgIi4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0RlcGVuZGVudFN1YnN0cmluZy5oIiAxCiMgNDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0RlcGVuZGVudFN1YnN0cmluZy5oIgpjbGFzcyBuc0RlcGVuZGVudFN1YnN0cmluZwogICAgICA6
IHB1YmxpYyBuc0FQcm9taXNlU3RyaW5nCiMgNTEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0RlcGVu
ZGVudFN1YnN0cmluZy5oIgogIHsKICAgIHR5cGVkZWYgbnNBU3RyaW5nIHN0cmluZ190eXBlOwog
ICAgdHlwZWRlZiBzdHJpbmdfdHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7Cgog
ICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsIGNvbnN0IFBSVW5pY2hhciogR2V0UmVhZGFibGVG
cmFnbWVudCggbnNSZWFkYWJsZUZyYWdtZW50PFBSVW5pY2hhcj4mLCBuc0ZyYWdtZW50UmVxdWVz
dCwgUFJVaW50MzIgKSBjb25zdDsKICAgICAgdmlydHVhbCBQUlVuaWNoYXIqIEdldFdyaXRhYmxl
RnJhZ21lbnQoIG5zV3JpdGFibGVGcmFnbWVudDxQUlVuaWNoYXI+JiwgbnNGcmFnbWVudFJlcXVl
c3QsIFBSVWludDMyICkgeyByZXR1cm4gMDsgfQoKICAgIHB1YmxpYzoKICAgICAgbnNEZXBlbmRl
bnRTdWJzdHJpbmcoIGNvbnN0IHN0cmluZ190eXBlJiBhU3RyaW5nLCBQUlVpbnQzMiBhU3RhcnRQ
b3MsIFBSVWludDMyIGFMZW5ndGggKQogICAgICAgICAgOiBtU3RyaW5nKGFTdHJpbmcpLAogICAg
ICAgICAgICBtU3RhcnRQb3MoIE5TX01JTihhU3RhcnRQb3MsIGFTdHJpbmcuTGVuZ3RoKCkpICks
CiAgICAgICAgICAgIG1MZW5ndGgoIE5TX01JTihhTGVuZ3RoLCBhU3RyaW5nLkxlbmd0aCgpLW1T
dGFydFBvcykgKQogICAgICAgIHsKCiAgICAgICAgfQoKICAgICAgbnNEZXBlbmRlbnRTdWJzdHJp
bmcoIGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBhU3RhcnQsIGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBh
RW5kICkKICAgICAgICAgIDogbVN0cmluZyhhU3RhcnQuc3RyaW5nKCkpCiAgICAgICAgewogICAg
ICAgICAgY29uc3RfaXRlcmF0b3IgemVyb1BvaW50OwogICAgICAgICAgbVN0cmluZy5CZWdpblJl
YWRpbmcoemVyb1BvaW50KTsKICAgICAgICAgIG1TdGFydFBvcyA9IERpc3RhbmNlKHplcm9Qb2lu
dCwgYVN0YXJ0KTsKICAgICAgICAgIG1MZW5ndGggPSBEaXN0YW5jZShhU3RhcnQsIGFFbmQpOwog
ICAgICAgIH0KCgoKCiAgICBwcml2YXRlOgoKICAgICAgdm9pZCBvcGVyYXRvcj0oIGNvbnN0IG5z
RGVwZW5kZW50U3Vic3RyaW5nJiApOwoKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCBQUlVpbnQz
MiBMZW5ndGgoKSBjb25zdDsKICAgICAgdmlydHVhbCBQUkJvb2wgSXNEZXBlbmRlbnRPbiggY29u
c3Qgc3RyaW5nX3R5cGUmIGFTdHJpbmcgKSBjb25zdCB7IHJldHVybiBtU3RyaW5nLklzRGVwZW5k
ZW50T24oYVN0cmluZyk7IH0KCiAgICBwcml2YXRlOgogICAgICBjb25zdCBzdHJpbmdfdHlwZSYg
bVN0cmluZzsKICAgICAgUFJVaW50MzIgbVN0YXJ0UG9zOwogICAgICBQUlVpbnQzMiBtTGVuZ3Ro
OwogIH07CgpjbGFzcyBuc0RlcGVuZGVudENTdWJzdHJpbmcKICAgICAgOiBwdWJsaWMgbnNBUHJv
bWlzZUNTdHJpbmcKIyAxMDQgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0RlcGVuZGVudFN1YnN0cmlu
Zy5oIgogIHsKICAgIHR5cGVkZWYgbnNBQ1N0cmluZyBzdHJpbmdfdHlwZTsKICAgIHR5cGVkZWYg
c3RyaW5nX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwoKICAgIHByb3RlY3Rl
ZDoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBHZXRSZWFkYWJsZUZyYWdtZW50KCBuc1JlYWRh
YmxlRnJhZ21lbnQ8Y2hhcj4mLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIgKSBjb25zdDsK
ICAgICAgdmlydHVhbCBjaGFyKiBHZXRXcml0YWJsZUZyYWdtZW50KCBuc1dyaXRhYmxlRnJhZ21l
bnQ8Y2hhcj4mLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIgKSB7IHJldHVybiAwOyB9Cgog
ICAgcHVibGljOgogICAgICBuc0RlcGVuZGVudENTdWJzdHJpbmcoIGNvbnN0IHN0cmluZ190eXBl
JiBhU3RyaW5nLCBQUlVpbnQzMiBhU3RhcnRQb3MsIFBSVWludDMyIGFMZW5ndGggKQogICAgICAg
ICAgOiBtU3RyaW5nKGFTdHJpbmcpLAogICAgICAgICAgICBtU3RhcnRQb3MoIE5TX01JTihhU3Rh
cnRQb3MsIGFTdHJpbmcuTGVuZ3RoKCkpICksCiAgICAgICAgICAgIG1MZW5ndGgoIE5TX01JTihh
TGVuZ3RoLCBhU3RyaW5nLkxlbmd0aCgpLW1TdGFydFBvcykgKQogICAgICAgIHsKCiAgICAgICAg
fQoKICAgICAgbnNEZXBlbmRlbnRDU3Vic3RyaW5nKCBjb25zdCBjb25zdF9pdGVyYXRvciYgYVN0
YXJ0LCBjb25zdCBjb25zdF9pdGVyYXRvciYgYUVuZCApCiAgICAgICAgICA6IG1TdHJpbmcoYVN0
YXJ0LnN0cmluZygpKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yIHplcm9Qb2lu
dDsKICAgICAgICAgIG1TdHJpbmcuQmVnaW5SZWFkaW5nKHplcm9Qb2ludCk7CiAgICAgICAgICBt
U3RhcnRQb3MgPSBEaXN0YW5jZSh6ZXJvUG9pbnQsIGFTdGFydCk7CiAgICAgICAgICBtTGVuZ3Ro
ID0gRGlzdGFuY2UoYVN0YXJ0LCBhRW5kKTsKICAgICAgICB9CgoKCgogICAgcHJpdmF0ZToKCiAg
ICAgIHZvaWQgb3BlcmF0b3I9KCBjb25zdCBuc0RlcGVuZGVudENTdWJzdHJpbmcmICk7CgogICAg
cHVibGljOgogICAgICB2aXJ0dWFsIFBSVWludDMyIExlbmd0aCgpIGNvbnN0OwogICAgICB2aXJ0
dWFsIFBSQm9vbCBJc0RlcGVuZGVudE9uKCBjb25zdCBzdHJpbmdfdHlwZSYgYVN0cmluZyApIGNv
bnN0IHsgcmV0dXJuIG1TdHJpbmcuSXNEZXBlbmRlbnRPbihhU3RyaW5nKTsgfQoKICAgIHByaXZh
dGU6CiAgICAgIGNvbnN0IHN0cmluZ190eXBlJiBtU3RyaW5nOwogICAgICBQUlVpbnQzMiBtU3Rh
cnRQb3M7CiAgICAgIFBSVWludDMyIG1MZW5ndGg7CiAgfTsKCgoKCgoKCmlubGluZQpjb25zdCBu
c0RlcGVuZGVudENTdWJzdHJpbmcKU3Vic3RyaW5nKCBjb25zdCBuc0FDU3RyaW5nJiBhU3RyaW5n
LCBQUlVpbnQzMiBhU3RhcnRQb3MsIFBSVWludDMyIGFTdWJzdHJpbmdMZW5ndGggKQogIHsKICAg
IHJldHVybiBuc0RlcGVuZGVudENTdWJzdHJpbmcoYVN0cmluZywgYVN0YXJ0UG9zLCBhU3Vic3Ry
aW5nTGVuZ3RoKTsKICB9CgppbmxpbmUKY29uc3QgbnNEZXBlbmRlbnRTdWJzdHJpbmcKU3Vic3Ry
aW5nKCBjb25zdCBuc0FTdHJpbmcmIGFTdHJpbmcsIFBSVWludDMyIGFTdGFydFBvcywgUFJVaW50
MzIgYVN1YnN0cmluZ0xlbmd0aCApCiAgewogICAgcmV0dXJuIG5zRGVwZW5kZW50U3Vic3RyaW5n
KGFTdHJpbmcsIGFTdGFydFBvcywgYVN1YnN0cmluZ0xlbmd0aCk7CiAgfQoKaW5saW5lCmNvbnN0
IG5zRGVwZW5kZW50Q1N1YnN0cmluZwpTdWJzdHJpbmcoIGNvbnN0IG5zUmVhZGluZ0l0ZXJhdG9y
PGNoYXI+JiBhU3RhcnQsIGNvbnN0IG5zUmVhZGluZ0l0ZXJhdG9yPGNoYXI+JiBhRW5kICkKICB7
CiAgICByZXR1cm4gbnNEZXBlbmRlbnRDU3Vic3RyaW5nKGFTdGFydCwgYUVuZCk7CiAgfQoKaW5s
aW5lCmNvbnN0IG5zRGVwZW5kZW50U3Vic3RyaW5nClN1YnN0cmluZyggY29uc3QgbnNSZWFkaW5n
SXRlcmF0b3I8UFJVbmljaGFyPiYgYVN0YXJ0LCBjb25zdCBuc1JlYWRpbmdJdGVyYXRvcjxQUlVu
aWNoYXI+JiBhRW5kICkKICB7CiAgICByZXR1cm4gbnNEZXBlbmRlbnRTdWJzdHJpbmcoYVN0YXJ0
LCBhRW5kKTsKICB9CiMgNDIgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FSZWFkYWJsZVN0cmluZy5o
IiAyCgoKCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zUHJvbWlzZUZsYXRTdHJpbmcuaCIgMQoj
IDI4ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNQcm9taXNlRmxhdFN0cmluZy5oIgojIDEgIi4uLy4u
L2Rpc3QvaW5jbHVkZS9uc1NoYXJhYmxlU3RyaW5nLmgiIDEKIyAzNSAiLi4vLi4vZGlzdC9pbmNs
dWRlL25zU2hhcmFibGVTdHJpbmcuaCIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNCdWZmZXJI
YW5kbGVVdGlscy5oIiAxCiMgMzYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0J1ZmZlckhhbmRsZVV0
aWxzLmgiCiMgMSAiL3Vzci9nY2MtcHJlMy4wL2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL25ldy5o
IiAxIDMKIyAzNyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQnVmZmVySGFuZGxlVXRpbHMuaCIgMgoK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmNsYXNzIG5zQXV0b0J1ZmZlckhhbmRsZQogIHsKICAg
IHB1YmxpYzoKICAgICAgbnNBdXRvQnVmZmVySGFuZGxlKCkgOiBtSGFuZGxlKDApIHsgfQoKICAg
ICAgbnNBdXRvQnVmZmVySGFuZGxlKCBjb25zdCBuc0F1dG9CdWZmZXJIYW5kbGU8Q2hhclQ+JiBh
T3RoZXIgKQogICAgICAgICAgOiBtSGFuZGxlKGFPdGhlci5nZXQoKSkKICAgICAgICB7CiAgICAg
ICAgICBpZiAoIG1IYW5kbGUgKQogICAgICAgICAgICBtSGFuZGxlLT5BY3F1aXJlUmVmZXJlbmNl
KCk7CiAgICAgICAgfQoKICAgICAgZXhwbGljaXQKICAgICAgbnNBdXRvQnVmZmVySGFuZGxlKCBj
b25zdCBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxDaGFyVD4qIGFIYW5kbGUgKQogICAgICAgICAgOiBt
SGFuZGxlKCBjb25zdF9jYXN0PCBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxDaGFyVD4qID4oYUhhbmRs
ZSkgKQogICAgICAgIHsKICAgICAgICAgIGlmICggbUhhbmRsZSApCiAgICAgICAgICAgIG1IYW5k
bGUtPkFjcXVpcmVSZWZlcmVuY2UoKTsKICAgICAgICB9CgogICAgIH5uc0F1dG9CdWZmZXJIYW5k
bGUoKQogICAgICAgIHsKICAgICAgICAgIGlmICggbUhhbmRsZSApCiAgICAgICAgICAgIG1IYW5k
bGUtPlJlbGVhc2VSZWZlcmVuY2UoKTsKICAgICAgICB9CgogICAgICBuc0F1dG9CdWZmZXJIYW5k
bGU8Q2hhclQ+JgogICAgICBvcGVyYXRvcj0oIGNvbnN0IG5zU2hhcmVkQnVmZmVySGFuZGxlPENo
YXJUPiogcmhzICkKICAgICAgICB7CiAgICAgICAgICBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxDaGFy
VD4qIG9sZF9oYW5kbGUgPSBtSGFuZGxlOwogICAgICAgICAgaWYgKCAobUhhbmRsZSA9IGNvbnN0
X2Nhc3Q8IG5zU2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPiogPihyaHMpKSApCiAgICAgICAgICAg
IG1IYW5kbGUtPkFjcXVpcmVSZWZlcmVuY2UoKTsKICAgICAgICAgIGlmICggb2xkX2hhbmRsZSAp
CiAgICAgICAgICAgIG9sZF9oYW5kbGUtPlJlbGVhc2VSZWZlcmVuY2UoKTsKICAgICAgICAgIHJl
dHVybiAqdGhpczsKICAgICAgICB9CgogICAgICBuc0F1dG9CdWZmZXJIYW5kbGU8Q2hhclQ+Jgog
ICAgICBvcGVyYXRvcj0oIGNvbnN0IG5zQXV0b0J1ZmZlckhhbmRsZTxDaGFyVD4mIHJocyApCiAg
ICAgICAgewogICAgICAgICAgcmV0dXJuIG9wZXJhdG9yPShyaHMuZ2V0KCkpOwogICAgICAgIH0K
CiAgICAgIG5zU2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPioKICAgICAgZ2V0KCkgY29uc3QKICAg
ICAgICB7CiAgICAgICAgICByZXR1cm4gbUhhbmRsZTsKICAgICAgICB9CgogICAgICBvcGVyYXRv
ciBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxDaGFyVD4qKCkgY29uc3QKICAgICAgICB7CiAgICAgICAg
ICByZXR1cm4gZ2V0KCk7CiAgICAgICAgfQoKICAgICAgbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hh
clQ+KgogICAgICBvcGVyYXRvci0+KCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4g
Z2V0KCk7CiAgICAgICAgfQoKICAgIHByaXZhdGU6CiAgICAgIG5zU2hhcmVkQnVmZmVySGFuZGxl
PENoYXJUPiogbUhhbmRsZTsKICB9OwoKCnRlbXBsYXRlIDxjbGFzcyBIYW5kbGVULCBjbGFzcyBD
aGFyVD4KaW5saW5lCnNpemVfdApOU19BbGlnbmVkSGFuZGxlU2l6ZSggY29uc3QgSGFuZGxlVCos
IGNvbnN0IENoYXJUKiApCiAgewoKICAgIHJldHVybiAoKHNpemVvZihIYW5kbGVUKSArIHNpemVv
ZihDaGFyVCkgLSAxKSAvIHNpemVvZihDaGFyVCkpICogc2l6ZW9mKENoYXJUKTsKICB9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgSGFuZGxlVCwgY2xhc3MgQ2hhclQ+CmlubGluZQpjb25zdCBDaGFyVCoKTlNf
RGF0YUFmdGVySGFuZGxlKCBjb25zdCBIYW5kbGVUKiBhSGFuZGxlUHRyLCBjb25zdCBDaGFyVCog
YUR1bW15Q2hhclRQdHIgKQogIHsKICAgIHR5cGVkZWYgY29uc3QgQ2hhclQqIENoYXJUX3B0cjsK
ICAgIHJldHVybiBDaGFyVF9wdHIoc3RhdGljX2Nhc3Q8IGNvbnN0IHVuc2lnbmVkIGNoYXIqID4o
YUhhbmRsZVB0cikgKyBOU19BbGlnbmVkSGFuZGxlU2l6ZShhSGFuZGxlUHRyLCBhRHVtbXlDaGFy
VFB0cikpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBIYW5kbGVULCBjbGFzcyBDaGFyVD4KaW5saW5l
CkNoYXJUKgpOU19EYXRhQWZ0ZXJIYW5kbGUoIEhhbmRsZVQqIGFIYW5kbGVQdHIsIGNvbnN0IENo
YXJUKiBhRHVtbXlDaGFyVFB0ciApCiAgewogICAgdHlwZWRlZiBDaGFyVCogQ2hhclRfcHRyOwog
ICAgcmV0dXJuIENoYXJUX3B0cihzdGF0aWNfY2FzdDwgdW5zaWduZWQgY2hhciogPihhSGFuZGxl
UHRyKSArIE5TX0FsaWduZWRIYW5kbGVTaXplKGFIYW5kbGVQdHIsIGFEdW1teUNoYXJUUHRyKSk7
CiAgfQoKdGVtcGxhdGUgPGNsYXNzIEhhbmRsZVQsIGNsYXNzIFN0cmluZ1Q+CkhhbmRsZVQqCk5T
X0FsbG9jYXRlQ29udGlndW91c0hhbmRsZVdpdGhEYXRhKCBjb25zdCBIYW5kbGVUKiBhRHVtbXlI
YW5kbGVQdHIsIFBSVWludDMyIGFBZGRpdGlvbmFsQ2FwYWNpdHksIGNvbnN0IFN0cmluZ1QqIGFE
YXRhU291cmNlICkKICB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIFN0cmluZ1Q6OmNoYXJfdHlwZSBj
aGFyX3R5cGU7CiAgICB0eXBlZGVmIGNoYXJfdHlwZSogY2hhcl9wdHI7CgoKICAgIHNpemVfdCBo
YW5kbGVfc2l6ZSA9IE5TX0FsaWduZWRIYW5kbGVTaXplKGFEdW1teUhhbmRsZVB0ciwgY2hhcl9w
dHIoMCkpOwoKCiAgICBzaXplX3QgZGF0YV9sZW5ndGggPSBhRGF0YVNvdXJjZT8gYURhdGFTb3Vy
Y2UtPkxlbmd0aCgpIDogMDsKICAgIHNpemVfdCBidWZmZXJfbGVuZ3RoID0gZGF0YV9sZW5ndGgg
KyBhQWRkaXRpb25hbENhcGFjaXR5OwoKCiAgICBzaXplX3QgYnVmZmVyX3NpemUgPSBidWZmZXJf
bGVuZ3RoICogc2l6ZW9mKGNoYXJfdHlwZSk7CgoKICAgIEhhbmRsZVQqIHJlc3VsdCA9IDA7CiAg
ICB2b2lkKiBoYW5kbGVfcHRyID0gOjpvcGVyYXRvciBuZXcoaGFuZGxlX3NpemUgKyBidWZmZXJf
c2l6ZSk7CgogICAgaWYgKCBoYW5kbGVfcHRyICkKICAgICAgewogICAgICAgIGNoYXJfcHRyIGRh
dGFfc3RhcnRfcHRyID0gY2hhcl9wdHIoc3RhdGljX2Nhc3Q8IHVuc2lnbmVkIGNoYXIqID4oaGFu
ZGxlX3B0cikgKyBoYW5kbGVfc2l6ZSk7CiAgICAgICAgY2hhcl9wdHIgZGF0YV9lbmRfcHRyID0g
ZGF0YV9zdGFydF9wdHIgKyBkYXRhX2xlbmd0aDsKICAgICAgICBjaGFyX3B0ciBidWZmZXJfZW5k
X3B0ciA9IGRhdGFfc3RhcnRfcHRyICsgYnVmZmVyX2xlbmd0aDsKCiAgICAgICAgY2hhcl9wdHIg
dG9CZWdpbiA9IGRhdGFfc3RhcnRfcHRyOwoKICAgICAgICBpZiAoIGRhdGFfbGVuZ3RoICkKICAg
ICAgICAgIHsKICAgICAgICAgICAgdHlwZW5hbWUgU3RyaW5nVDo6Y29uc3RfaXRlcmF0b3IgZnJv
bUJlZ2luLCBmcm9tRW5kOwogICAgICAgICAgICBjb3B5X3N0cmluZyhhRGF0YVNvdXJjZS0+QmVn
aW5SZWFkaW5nKGZyb21CZWdpbiksIGFEYXRhU291cmNlLT5FbmRSZWFkaW5nKGZyb21FbmQpLCB0
b0JlZ2luKTsKICAgICAgICAgIH0KCgogICAgICAgIGlmICggYUFkZGl0aW9uYWxDYXBhY2l0eSA+
IDAgKQogICAgICAgICAgKnRvQmVnaW4gPSBjaGFyX3R5cGUoMCk7CgogICAgICAgIHJlc3VsdCA9
IG5ldyAoaGFuZGxlX3B0cikgSGFuZGxlVChkYXRhX3N0YXJ0X3B0ciwgZGF0YV9lbmRfcHRyLCBk
YXRhX3N0YXJ0X3B0ciwgYnVmZmVyX2VuZF9wdHIsIDEpOwogICAgICB9CgogICAgcmV0dXJuIHJl
c3VsdDsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSGFuZGxlVCwgY2xhc3MgU3RyaW5nVD4KaW5saW5l
CkhhbmRsZVQqCk5TX0FsbG9jYXRlQ29udGlndW91c0hhbmRsZVdpdGhEYXRhKCBjb25zdCBIYW5k
bGVUKiBhRHVtbXlIYW5kbGVQdHIsIGNvbnN0IFN0cmluZ1QmIGFEYXRhU291cmNlLCBQUlVpbnQz
MiBhQWRkaXRpb25hbENhcGFjaXR5ICkKICB7CiAgICByZXR1cm4gTlNfQWxsb2NhdGVDb250aWd1
b3VzSGFuZGxlV2l0aERhdGEoYUR1bW15SGFuZGxlUHRyLCBhQWRkaXRpb25hbENhcGFjaXR5LCAm
YURhdGFTb3VyY2UpOwogIH0KIyAzNiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU2hhcmFibGVTdHJp
bmcuaCIgMgojIDQ0ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTaGFyYWJsZVN0cmluZy5oIgpjbGFz
cyBuc1NoYXJhYmxlU3RyaW5nCiAgICA6IHB1YmxpYyBuc0FGbGF0U3RyaW5nCiAgewogICAgcHVi
bGljOgogICAgICB0eXBlZGVmIG5zU2hhcmFibGVTdHJpbmcgc2VsZl90eXBlOwogICAgICB0eXBl
ZGVmIFBSVW5pY2hhciBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgbnNBU3RyaW5nIHN0cmluZ190
eXBlOwoKICAgIHB1YmxpYzoKICAgICAgbnNTaGFyYWJsZVN0cmluZygpIHsgfQogICAgICBuc1No
YXJhYmxlU3RyaW5nKCBjb25zdCBzZWxmX3R5cGUmIGFPdGhlciApIDogbUJ1ZmZlcihhT3RoZXIu
bUJ1ZmZlcikgeyB9CiAgICAgIGV4cGxpY2l0IG5zU2hhcmFibGVTdHJpbmcoIGNvbnN0IHN0cmlu
Z190eXBlJiBhUmVhZGFibGUgKSB7IGFzc2lnbihhUmVhZGFibGUpOyB9CiAgICAgIGV4cGxpY2l0
IG5zU2hhcmFibGVTdHJpbmcoIGNvbnN0IG5zU2hhcmVkQnVmZmVySGFuZGxlPGNoYXJfdHlwZT4q
IGFIYW5kbGUgKSA6IG1CdWZmZXIoYUhhbmRsZSkgeyB9CgogICAgICBzZWxmX3R5cGUmCiAgICAg
IG9wZXJhdG9yPSggY29uc3Qgc3RyaW5nX3R5cGUmIGFSZWFkYWJsZSApCiAgICAgICAgewogICAg
ICAgICAgYXNzaWduKGFSZWFkYWJsZSk7CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAg
fQoKICAgIHByb3RlY3RlZDoKICAgICAgdm9pZCBhc3NpZ24oIGNvbnN0IHN0cmluZ190eXBlJiAp
OwogICAgICB2aXJ0dWFsIGNvbnN0IG5zU2hhcmVkQnVmZmVySGFuZGxlPGNoYXJfdHlwZT4qIEdl
dFNoYXJlZEJ1ZmZlckhhbmRsZSgpIGNvbnN0OwoKICAgIHByaXZhdGU6CiAgICAgIG5zQXV0b0J1
ZmZlckhhbmRsZTxjaGFyX3R5cGU+IG1CdWZmZXI7CiAgfTsKCgpjbGFzcyBuc1NoYXJhYmxlQ1N0
cmluZwogICAgOiBwdWJsaWMgbnNBRmxhdENTdHJpbmcKICB7CiAgICBwdWJsaWM6CiAgICAgIHR5
cGVkZWYgbnNTaGFyYWJsZUNTdHJpbmcgc2VsZl90eXBlOwogICAgICB0eXBlZGVmIGNoYXIgY2hh
cl90eXBlOwogICAgICB0eXBlZGVmIG5zQUNTdHJpbmcgc3RyaW5nX3R5cGU7CgogICAgcHVibGlj
OgogICAgICBuc1NoYXJhYmxlQ1N0cmluZygpIHsgfQogICAgICBuc1NoYXJhYmxlQ1N0cmluZygg
Y29uc3Qgc2VsZl90eXBlJiBhT3RoZXIgKSA6IG1CdWZmZXIoYU90aGVyLm1CdWZmZXIpIHsgfQog
ICAgICBleHBsaWNpdCBuc1NoYXJhYmxlQ1N0cmluZyggY29uc3Qgc3RyaW5nX3R5cGUmIGFSZWFk
YWJsZSApIHsgYXNzaWduKGFSZWFkYWJsZSk7IH0KICAgICAgZXhwbGljaXQgbnNTaGFyYWJsZUNT
dHJpbmcoIGNvbnN0IG5zU2hhcmVkQnVmZmVySGFuZGxlPGNoYXJfdHlwZT4qIGFIYW5kbGUgKSA6
IG1CdWZmZXIoYUhhbmRsZSkgeyB9CgogICAgICBzZWxmX3R5cGUmCiAgICAgIG9wZXJhdG9yPSgg
Y29uc3Qgc3RyaW5nX3R5cGUmIGFSZWFkYWJsZSApCiAgICAgICAgewogICAgICAgICAgYXNzaWdu
KGFSZWFkYWJsZSk7CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKICAgIHByb3Rl
Y3RlZDoKICAgICAgdm9pZCBhc3NpZ24oIGNvbnN0IHN0cmluZ190eXBlJiApOwogICAgICB2aXJ0
dWFsIGNvbnN0IG5zU2hhcmVkQnVmZmVySGFuZGxlPGNoYXJfdHlwZT4qIEdldFNoYXJlZEJ1ZmZl
ckhhbmRsZSgpIGNvbnN0OwoKICAgIHByaXZhdGU6CiAgICAgIG5zQXV0b0J1ZmZlckhhbmRsZTxj
aGFyX3R5cGU+IG1CdWZmZXI7CiAgfTsKIyAyOSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zUHJvbWlz
ZUZsYXRTdHJpbmcuaCIgMgojIDgzICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNQcm9taXNlRmxhdFN0
cmluZy5oIgpjbGFzcyBuc1Byb21pc2VGbGF0U3RyaW5nCiAgICA6IHB1YmxpYyBuc0FGbGF0U3Ry
aW5nCiAgewogICAgZnJpZW5kIGNvbnN0IG5zUHJvbWlzZUZsYXRTdHJpbmcgUHJvbWlzZUZsYXRT
dHJpbmcoIGNvbnN0IG5zQVN0cmluZyYgKTsKCiAgICBwdWJsaWM6CiAgICAgIG5zUHJvbWlzZUZs
YXRTdHJpbmcoIGNvbnN0IG5zUHJvbWlzZUZsYXRTdHJpbmcmICk7CgogICAgcHJvdGVjdGVkOgog
ICAgICBuc1Byb21pc2VGbGF0U3RyaW5nKCkgOiBtUHJvbWlzZWRTdHJpbmcoJm1GbGF0dGVuZWRT
dHJpbmcpIHsgfQogICAgICBleHBsaWNpdCBuc1Byb21pc2VGbGF0U3RyaW5nKCBjb25zdCBuc0FT
dHJpbmcmIGFTdHJpbmcgKTsKCgogICAgICB2aXJ0dWFsIGNvbnN0IG5zQnVmZmVySGFuZGxlPFBS
VW5pY2hhcj4qIEdldEZsYXRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICAgdmlydHVhbCBjb25z
dCBuc0J1ZmZlckhhbmRsZTxQUlVuaWNoYXI+KiBHZXRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAg
ICAgdmlydHVhbCBjb25zdCBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxQUlVuaWNoYXI+KiBHZXRTaGFy
ZWRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICAgdmlydHVhbCBQUkJvb2wgSXNEZXBlbmRlbnRP
biggY29uc3QgbnNBU3RyaW5nJiApIGNvbnN0OwoKCgogICAgcHVibGljOgogICAgICB2aXJ0dWFs
IGNvbnN0IFBSVW5pY2hhciogZ2V0KCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgUFJVaW50MzIgTGVu
Z3RoKCkgY29uc3Q7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwgY29uc3QgUFJVbmljaGFy
KiBHZXRSZWFkYWJsZUZyYWdtZW50KCBuc1JlYWRhYmxlRnJhZ21lbnQ8UFJVbmljaGFyPiYsIG5z
RnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiApIGNvbnN0OwoKCiAgICBwcml2YXRlOgoKICAgICAg
dm9pZCBvcGVyYXRvcj0oIGNvbnN0IG5zUHJvbWlzZUZsYXRTdHJpbmcmICk7CgogICAgcHJpdmF0
ZToKICAgICAgbnNTaGFyYWJsZVN0cmluZyBtRmxhdHRlbmVkU3RyaW5nOwogICAgICBjb25zdCBu
c0FGbGF0U3RyaW5nKiBtUHJvbWlzZWRTdHJpbmc7CiAgfTsKCmNsYXNzIG5zUHJvbWlzZUZsYXRD
U3RyaW5nCiAgICA6IHB1YmxpYyBuc0FGbGF0Q1N0cmluZwogIHsKICAgIGZyaWVuZCBjb25zdCBu
c1Byb21pc2VGbGF0Q1N0cmluZyBQcm9taXNlRmxhdENTdHJpbmcoIGNvbnN0IG5zQUNTdHJpbmcm
ICk7CgogICAgcHVibGljOgogICAgICBuc1Byb21pc2VGbGF0Q1N0cmluZyggY29uc3QgbnNQcm9t
aXNlRmxhdENTdHJpbmcmICk7CgogICAgcHJvdGVjdGVkOgogICAgICBuc1Byb21pc2VGbGF0Q1N0
cmluZygpIDogbVByb21pc2VkU3RyaW5nKCZtRmxhdHRlbmVkU3RyaW5nKSB7IH0KICAgICAgZXhw
bGljaXQgbnNQcm9taXNlRmxhdENTdHJpbmcoIGNvbnN0IG5zQUNTdHJpbmcmIGFTdHJpbmcgKTsK
CgogICAgICB2aXJ0dWFsIGNvbnN0IG5zQnVmZmVySGFuZGxlPGNoYXI+KiBHZXRGbGF0QnVmZmVy
SGFuZGxlKCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgY29uc3QgbnNCdWZmZXJIYW5kbGU8Y2hhcj4q
IEdldEJ1ZmZlckhhbmRsZSgpIGNvbnN0OwogICAgICB2aXJ0dWFsIGNvbnN0IG5zU2hhcmVkQnVm
ZmVySGFuZGxlPGNoYXI+KiBHZXRTaGFyZWRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICAgdmly
dHVhbCBQUkJvb2wgSXNEZXBlbmRlbnRPbiggY29uc3QgbnNBQ1N0cmluZyYgKSBjb25zdDsKCgoK
ICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBnZXQoKSBjb25zdDsKICAgICAg
dmlydHVhbCBQUlVpbnQzMiBMZW5ndGgoKSBjb25zdDsKICAgIHByb3RlY3RlZDoKICAgICAgdmly
dHVhbCBjb25zdCBjaGFyKiBHZXRSZWFkYWJsZUZyYWdtZW50KCBuc1JlYWRhYmxlRnJhZ21lbnQ8
Y2hhcj4mLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIgKSBjb25zdDsKCgogICAgcHJpdmF0
ZToKCiAgICAgIHZvaWQgb3BlcmF0b3I9KCBjb25zdCBuc1Byb21pc2VGbGF0Q1N0cmluZyYgKTsK
CiAgICBwcml2YXRlOgogICAgICBuc1NoYXJhYmxlQ1N0cmluZyBtRmxhdHRlbmVkU3RyaW5nOwog
ICAgICBjb25zdCBuc0FGbGF0Q1N0cmluZyogbVByb21pc2VkU3RyaW5nOwogIH07CgoKaW5saW5l
CmNvbnN0IG5zUHJvbWlzZUZsYXRTdHJpbmcKUHJvbWlzZUZsYXRTdHJpbmcoIGNvbnN0IG5zQVN0
cmluZyYgYVN0cmluZyApCiAgewogICAgcmV0dXJuIG5zUHJvbWlzZUZsYXRTdHJpbmcoYVN0cmlu
Zyk7CiAgfQoKaW5saW5lCmNvbnN0IG5zUHJvbWlzZUZsYXRDU3RyaW5nClByb21pc2VGbGF0Q1N0
cmluZyggY29uc3QgbnNBQ1N0cmluZyYgYVN0cmluZyApCiAgewogICAgcmV0dXJuIG5zUHJvbWlz
ZUZsYXRDU3RyaW5nKGFTdHJpbmcpOwogIH0KIyA0NiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQVJl
YWRhYmxlU3RyaW5nLmgiIDIKIyAzMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQVdyaXRhYmxlU3Ry
aW5nLmgiIDIKCgp0eXBlZGVmIG5zQVN0cmluZyBuc0FXcml0YWJsZVN0cmluZzsKdHlwZWRlZiBu
c0FDU3RyaW5nIG5zQVdyaXRhYmxlQ1N0cmluZzsKIyAyMCAiLi4vLi4vZGlzdC9pbmNsdWRlL25z
SUF0b20uaCIgMgojIDI4ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJQXRvbS5oIgpjbGFzcyBuc0lB
dG9tIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlE
JiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDNkMWIxNWIwLCAweDkzYjQs
IDB4MTFkMSwgeyAweDg5LCAweDViLCAweDAwLCAweDYwLCAweDA4LCAweDkxLCAweDFiLCAweDgx
IH19OyByZXR1cm4gaWlkO30KCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgVG9TdHJpbmcobnNBV3Jp
dGFibGVTdHJpbmcgJiBhU3RyaW5nKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFVu
aWNvZGUoY29uc3QgUFJVbmljaGFyICoqYVJlc3VsdCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBTaXplT2YobnNJU2l6ZU9mSGFuZGxlciAqYUhhbmRsZXIsIFBSVWludDMyICpfcmV0dmFs
KSA9IDA7Cgp9OwojIDEyNSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUF0b20uaCIKZXh0ZXJuIG5z
SUF0b20qIE5TX05ld0F0b20oY29uc3QgY2hhciogaXNvbGF0aW4xKTsKCgoKCmV4dGVybiBuc0lB
dG9tKiBOU19OZXdBdG9tKGNvbnN0IFBSVW5pY2hhciogdW5pY29kZSk7CgoKCmV4dGVybiBuc0lB
dG9tKiBOU19OZXdBdG9tKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhU3RyaW5nKTsKCgoKCmV4
dGVybiBuc3JlZmNudCBOU19HZXROdW1iZXJPZkF0b21zKHZvaWQpOwpleHRlcm4gdm9pZCBOU19Q
dXJnZUF0b21UYWJsZSh2b2lkKTsKIyA1MiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5o
IiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyLmgiIDEKIyAxOTEgIi4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc1N0ci5oIgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIgMQojIDE5
MiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUv
bnNNZW1vcnkuaCIgMQojIDE5MyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyLmgiIDIKIyAxICIv
dXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMwojIDE5NCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3Ry
LmgiIDIKIyAxICIvdXNyL2djYy1wcmUzLjAvbGliL2djYy1saWIvaWE2NC1ocC1saW51eC8zLjAv
aW5jbHVkZS9zdGRpby5oIiAxIDMKIyAxOTUgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0ci5oIiAy
CiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BsaGFzaC5oIiAx
CiMgMjQgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbGhhc2guaCIK
IyAxICIvdXNyL2djYy1wcmUzLjAvbGliL2djYy1saWIvaWE2NC1ocC1saW51eC8zLjAvaW5jbHVk
ZS9zdGRpby5oIiAxIDMKIyAyNSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u
c3ByL3BsaGFzaC5oIiAyCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u
c3ByL3BydHlwZXMuaCIgMQojIDI2ICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRl
L25zcHIvcGxoYXNoLmgiIDIKCmV4dGVybiAiQyIgewoKdHlwZWRlZiBzdHJ1Y3QgUExIYXNoRW50
cnkgUExIYXNoRW50cnk7CnR5cGVkZWYgc3RydWN0IFBMSGFzaFRhYmxlIFBMSGFzaFRhYmxlOwp0
eXBlZGVmIFBSVWludDMyIFBMSGFzaE51bWJlcjsKCnR5cGVkZWYgUExIYXNoTnVtYmVyICggKlBM
SGFzaEZ1bmN0aW9uKShjb25zdCB2b2lkICprZXkpOwp0eXBlZGVmIFBSSW50biAoICpQTEhhc2hD
b21wYXJhdG9yKShjb25zdCB2b2lkICp2MSwgY29uc3Qgdm9pZCAqdjIpOwoKCgoKdHlwZWRlZiBQ
UkludG4gKCAqUExIYXNoRW51bWVyYXRvcikoUExIYXNoRW50cnkgKmhlLCBQUkludG4gaSwgdm9p
ZCAqYXJnKTsKIyA1MSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bs
aGFzaC5oIgp0eXBlZGVmIHN0cnVjdCBQTEhhc2hBbGxvY09wcyB7CiAgICB2b2lkICogKCAqYWxs
b2NUYWJsZSkodm9pZCAqcG9vbCwgUFJTaXplIHNpemUpOwogICAgdm9pZCAoICpmcmVlVGFibGUp
KHZvaWQgKnBvb2wsIHZvaWQgKml0ZW0pOwogICAgUExIYXNoRW50cnkgKiAoICphbGxvY0VudHJ5
KSh2b2lkICpwb29sLCBjb25zdCB2b2lkICprZXkpOwogICAgdm9pZCAoICpmcmVlRW50cnkpKHZv
aWQgKnBvb2wsIFBMSGFzaEVudHJ5ICpoZSwgUFJVaW50biBmbGFnKTsKfSBQTEhhc2hBbGxvY09w
czsKCgoKCnN0cnVjdCBQTEhhc2hFbnRyeSB7CiAgICBQTEhhc2hFbnRyeSAqbmV4dDsKICAgIFBM
SGFzaE51bWJlciBrZXlIYXNoOwogICAgY29uc3Qgdm9pZCAqa2V5OwogICAgdm9pZCAqdmFsdWU7
Cn07CgpzdHJ1Y3QgUExIYXNoVGFibGUgewogICAgUExIYXNoRW50cnkgKipidWNrZXRzOwogICAg
UFJVaW50MzIgbmVudHJpZXM7CiAgICBQUlVpbnQzMiBzaGlmdDsKICAgIFBMSGFzaEZ1bmN0aW9u
IGtleUhhc2g7CiAgICBQTEhhc2hDb21wYXJhdG9yIGtleUNvbXBhcmU7CiAgICBQTEhhc2hDb21w
YXJhdG9yIHZhbHVlQ29tcGFyZTsKICAgIGNvbnN0IFBMSGFzaEFsbG9jT3BzICphbGxvY09wczsK
ICAgIHZvaWQgKmFsbG9jUG9vbDsKCgoKCgoKfTsKCgoKCgpleHRlcm4gUExIYXNoVGFibGUgKgpQ
TF9OZXdIYXNoVGFibGUoUFJVaW50MzIgbnVtQnVja2V0cywgUExIYXNoRnVuY3Rpb24ga2V5SGFz
aCwKICAgICAgICAgICAgICAgIFBMSGFzaENvbXBhcmF0b3Iga2V5Q29tcGFyZSwgUExIYXNoQ29t
cGFyYXRvciB2YWx1ZUNvbXBhcmUsCiAgICAgICAgICAgICAgICBjb25zdCBQTEhhc2hBbGxvY09w
cyAqYWxsb2NPcHMsIHZvaWQgKmFsbG9jUG9vbCk7CgpleHRlcm4gdm9pZApQTF9IYXNoVGFibGVE
ZXN0cm95KFBMSGFzaFRhYmxlICpodCk7CgoKZXh0ZXJuIFBMSGFzaEVudHJ5ICoKUExfSGFzaFRh
YmxlQWRkKFBMSGFzaFRhYmxlICpodCwgY29uc3Qgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSk7Cgpl
eHRlcm4gUFJCb29sClBMX0hhc2hUYWJsZVJlbW92ZShQTEhhc2hUYWJsZSAqaHQsIGNvbnN0IHZv
aWQgKmtleSk7CgpleHRlcm4gdm9pZCAqClBMX0hhc2hUYWJsZUxvb2t1cChQTEhhc2hUYWJsZSAq
aHQsIGNvbnN0IHZvaWQgKmtleSk7CgpleHRlcm4gdm9pZCAqClBMX0hhc2hUYWJsZUxvb2t1cENv
bnN0KFBMSGFzaFRhYmxlICpodCwgY29uc3Qgdm9pZCAqa2V5KTsKCmV4dGVybiBQUkludG4KUExf
SGFzaFRhYmxlRW51bWVyYXRlRW50cmllcyhQTEhhc2hUYWJsZSAqaHQsIFBMSGFzaEVudW1lcmF0
b3IgZiwgdm9pZCAqYXJnKTsKCgpleHRlcm4gUExIYXNoTnVtYmVyClBMX0hhc2hTdHJpbmcoY29u
c3Qgdm9pZCAqa2V5KTsKCgpleHRlcm4gUFJJbnRuClBMX0NvbXBhcmVTdHJpbmdzKGNvbnN0IHZv
aWQgKnYxLCBjb25zdCB2b2lkICp2Mik7CgoKZXh0ZXJuIFBSSW50bgpQTF9Db21wYXJlVmFsdWVz
KGNvbnN0IHZvaWQgKnYxLCBjb25zdCB2b2lkICp2Mik7CgoKZXh0ZXJuIFBMSGFzaEVudHJ5ICoq
ClBMX0hhc2hUYWJsZVJhd0xvb2t1cChQTEhhc2hUYWJsZSAqaHQsIFBMSGFzaE51bWJlciBrZXlI
YXNoLCBjb25zdCB2b2lkICprZXkpOwoKZXh0ZXJuIFBMSGFzaEVudHJ5ICoqClBMX0hhc2hUYWJs
ZVJhd0xvb2t1cENvbnN0KFBMSGFzaFRhYmxlICpodCwgUExIYXNoTnVtYmVyIGtleUhhc2gsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmtleSk7CgpleHRlcm4gUExIYXNo
RW50cnkgKgpQTF9IYXNoVGFibGVSYXdBZGQoUExIYXNoVGFibGUgKmh0LCBQTEhhc2hFbnRyeSAq
KmhlcCwgUExIYXNoTnVtYmVyIGtleUhhc2gsCiAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lk
ICprZXksIHZvaWQgKnZhbHVlKTsKCmV4dGVybiB2b2lkClBMX0hhc2hUYWJsZVJhd1JlbW92ZShQ
TEhhc2hUYWJsZSAqaHQsIFBMSGFzaEVudHJ5ICoqaGVwLCBQTEhhc2hFbnRyeSAqaGUpOwoKCmV4
dGVybiBQUkludG4KUExfSGFzaFRhYmxlRHVtcChQTEhhc2hUYWJsZSAqaHQsIFBMSGFzaEVudW1l
cmF0b3IgZHVtcCwgRklMRSAqZnApOwoKfQojIDE5NiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3Ry
LmgiIDIKCgoKZW51bSBlQ2hhclNpemUge2VPbmVCeXRlPTAsZVR3b0J5dGU9MX07CgoKCgoKCgpj
b25zdCBQUkludDMyIGtEZWZhdWx0U3RyaW5nU2l6ZSA9IDY0Owpjb25zdCBQUkludDMyIGtOb3RG
b3VuZCA9IC0xOwoKCgoKY2xhc3MgQ0J1ZkRlc2NyaXB0b3IgewpwdWJsaWM6CiAgQ0J1ZkRlc2Ny
aXB0b3IoY2hhciogYVN0cmluZywgUFJCb29sIGFTdGFja0Jhc2VkLFBSVWludDMyIGFDYXBhY2l0
eSxQUkludDMyIGFMZW5ndGg9LTEpOwogIENCdWZEZXNjcmlwdG9yKGNvbnN0IGNoYXIqIGFTdHJp
bmcsIFBSQm9vbCBhU3RhY2tCYXNlZCxQUlVpbnQzMiBhQ2FwYWNpdHksUFJJbnQzMiBhTGVuZ3Ro
PS0xKTsKICBDQnVmRGVzY3JpcHRvcihQUlVuaWNoYXIqIGFTdHJpbmcsIFBSQm9vbCBhU3RhY2tC
YXNlZCxQUlVpbnQzMiBhQ2FwYWNpdHksUFJJbnQzMiBhTGVuZ3RoPS0xKTsKICBDQnVmRGVzY3Jp
cHRvcihjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcsUFJCb29sIGFTdGFja0Jhc2VkLFBSVWludDMy
IGFDYXBhY2l0eSxQUkludDMyIGFMZW5ndGg9LTEpOwoKICBjaGFyKiBtQnVmZmVyOwogIGVDaGFy
U2l6ZSBtQ2hhclNpemU7CiAgUFJVaW50MzIgbUNhcGFjaXR5OwogIFBSSW50MzIgbUxlbmd0aDsK
ICBQUkJvb2wgbVN0YWNrQmFzZWQ7CiAgUFJCb29sIG1Jc0NvbnN0Owp9OwoKCgoKc3RydWN0IG5z
U3RyIHsKCiAgbnNTdHIoKSB7CiAgICBkbyB7IG5zVHJhY2VSZWZjbnQ6OkxvZ0N0b3IoKHZvaWQq
KXRoaXMsICJuc1N0ciIsIHNpemVvZigqdGhpcykpOyB9IHdoaWxlICgwKTsKICB9CgogIH5uc1N0
cigpIHsKICAgIGRvIHsgbnNUcmFjZVJlZmNudDo6TG9nRHRvcigodm9pZCopdGhpcywgIm5zU3Ry
Iiwgc2l6ZW9mKCp0aGlzKSk7IH0gd2hpbGUgKDApOwogIH0KIyAyNDggIi4uLy4uL2Rpc3QvaW5j
bHVkZS9uc1N0ci5oIgogIHN0YXRpYyB2b2lkIEluaXRpYWxpemUobnNTdHImIGFEZXN0LGVDaGFy
U2l6ZSBhQ2hhclNpemUpOwojIDI1NyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyLmgiCiAgc3Rh
dGljIHZvaWQgSW5pdGlhbGl6ZShuc1N0ciYgYURlc3QsY2hhciogYUNTdHJpbmcsUFJVaW50MzIg
YUNhcGFjaXR5LFBSVWludDMyIGFMZW5ndGgsZUNoYXJTaXplIGFDaGFyU2l6ZSxQUkJvb2wgYU93
bnNCdWZmZXIpOwojIDI2OCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyLmgiCiAgc3RhdGljIHZv
aWQgRGVzdHJveShuc1N0ciYgYURlc3QpOwojIDI3OCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3Ry
LmgiCiAgc3RhdGljIFBSQm9vbCBFbnN1cmVDYXBhY2l0eShuc1N0ciYgYVN0cmluZyxQUlVpbnQz
MiBhTmV3TGVuZ3RoKTsKICBzdGF0aWMgUFJCb29sIEdyb3dDYXBhY2l0eShuc1N0ciYgYVN0cmlu
ZyxQUlVpbnQzMiBhTmV3TGVuZ3RoKTsKIyAyOTEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0ci5o
IgogIHN0YXRpYyB2b2lkIFN0ckFwcGVuZChuc1N0ciYgYURlc3QsY29uc3QgbnNTdHImIGFTb3Vy
Y2UsUFJVaW50MzIgYW5PZmZzZXQsUFJJbnQzMiBhQ291bnQpOwojIDMwMyAiLi4vLi4vZGlzdC9p
bmNsdWRlL25zU3RyLmgiCiAgc3RhdGljIHZvaWQgU3RyQXNzaWduKG5zU3RyJiBhRGVzdCxjb25z
dCBuc1N0ciYgYVNvdXJjZSxQUlVpbnQzMiBhbk9mZnNldCxQUkludDMyIGFDb3VudCk7CiMgMzE2
ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHIuaCIKICBzdGF0aWMgdm9pZCBTdHJJbnNlcnQoIG5z
U3RyJiBhRGVzdCxQUlVpbnQzMiBhRGVzdE9mZnNldCxjb25zdCBuc1N0ciYgYVNvdXJjZSxQUlVp
bnQzMiBhU3JjT2Zmc2V0LFBSSW50MzIgYUNvdW50KTsKIyAzMjggIi4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc1N0ci5oIgogIHN0YXRpYyB2b2lkIERlbGV0ZShuc1N0ciYgYURlc3QsUFJVaW50MzIgYURl
c3RPZmZzZXQsUFJVaW50MzIgYUNvdW50KTsKIyAzNDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0
ci5oIgogIHN0YXRpYyB2b2lkIFN0clRydW5jYXRlKG5zU3RyJiBhRGVzdCxQUlVpbnQzMiBhRGVz
dE9mZnNldCk7CiMgMzUwICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHIuaCIKICBzdGF0aWMgdm9p
ZCBDaGFuZ2VDYXNlKG5zU3RyJiBhRGVzdCxQUkJvb2wgYVRvVXBwZXIpOwojIDM2MiAiLi4vLi4v
ZGlzdC9pbmNsdWRlL25zU3RyLmgiCiAgc3RhdGljIHZvaWQgVHJpbShuc1N0ciYgYURlc3QsY29u
c3QgY2hhciogYVNldCxQUkJvb2wgYUVsaW1pbmF0ZUxlYWRpbmcsUFJCb29sIGFFbGltaW5hdGVU
cmFpbGluZyk7CiMgMzc0ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHIuaCIKICBzdGF0aWMgdm9p
ZCBDb21wcmVzc1NldChuc1N0ciYgYURlc3QsY29uc3QgY2hhciogYVNldCxQUkJvb2wgYUVsaW1p
bmF0ZUxlYWRpbmcsUFJCb29sIGFFbGltaW5hdGVUcmFpbGluZyk7CiMgMzg2ICIuLi8uLi9kaXN0
L2luY2x1ZGUvbnNTdHIuaCIKICBzdGF0aWMgdm9pZCBTdHJpcENoYXJzKG5zU3RyJiBhRGVzdCxj
b25zdCBjaGFyKiBhU2V0KTsKIyAzOTggIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0ci5oIgogIHN0
YXRpYyBQUkludDMyIFN0ckNvbXBhcmUoY29uc3QgbnNTdHImIGFEZXN0LGNvbnN0IG5zU3RyJiBh
U291cmNlLFBSSW50MzIgYUNvdW50LFBSQm9vbCBhSWdub3JlQ2FzZSk7CiMgNDEwICIuLi8uLi9k
aXN0L2luY2x1ZGUvbnNTdHIuaCIKICBzdGF0aWMgUFJJbnQzMiBGaW5kU3Vic3RyKGNvbnN0IG5z
U3RyJiBhRGVzdCxjb25zdCBuc1N0ciYgYVNvdXJjZSwgUFJCb29sIGFJZ25vcmVDYXNlLFBSSW50
MzIgYW5PZmZzZXQsUFJJbnQzMiBhQ291bnQpOwogIHN0YXRpYyBQUkludDMyIEZpbmRDaGFyKGNv
bnN0IG5zU3RyJiBhRGVzdCxQUlVuaWNoYXIgYUNoYXIsIFBSQm9vbCBhSWdub3JlQ2FzZSxQUklu
dDMyIGFuT2Zmc2V0LFBSSW50MzIgYUNvdW50KTsKICBzdGF0aWMgUFJJbnQzMiBGaW5kQ2hhcklu
U2V0KGNvbnN0IG5zU3RyJiBhRGVzdCxjb25zdCBuc1N0ciYgYVNldCxQUkJvb2wgYUlnbm9yZUNh
c2UsUFJJbnQzMiBhbk9mZnNldCk7CgogIHN0YXRpYyBQUkludDMyIFJGaW5kU3Vic3RyKGNvbnN0
IG5zU3RyJiBhRGVzdCxjb25zdCBuc1N0ciYgYVNvdXJjZSwgUFJCb29sIGFJZ25vcmVDYXNlLFBS
SW50MzIgYW5PZmZzZXQsUFJJbnQzMiBhQ291bnQpOwogIHN0YXRpYyBQUkludDMyIFJGaW5kQ2hh
cihjb25zdCBuc1N0ciYgYURlc3QsUFJVbmljaGFyIGFDaGFyLCBQUkJvb2wgYUlnbm9yZUNhc2Us
UFJJbnQzMiBhbk9mZnNldCxQUkludDMyIGFDb3VudCk7CiAgc3RhdGljIFBSSW50MzIgUkZpbmRD
aGFySW5TZXQoY29uc3QgbnNTdHImIGFEZXN0LGNvbnN0IG5zU3RyJiBhU2V0LFBSQm9vbCBhSWdu
b3JlQ2FzZSxQUkludDMyIGFuT2Zmc2V0KTsKCiAgc3RhdGljIHZvaWQgT3ZlcndyaXRlKG5zU3Ry
JiBhRGVzdCxjb25zdCBuc1N0ciYgYVNvdXJjZSxQUkludDMyIGFuT2Zmc2V0KTsKCiAgc3RhdGlj
IFBSQm9vbCBEaWRBY3F1aXJlTWVtb3J5KHZvaWQpOwoKCgoKICBzdGF0aWMgUFJVaW50MzIgSGFz
aENvZGUoY29uc3QgbnNTdHImIGFEZXN0KTsKIyA0MzYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0
ci5oIgogIFBSVWludDMyIG1MZW5ndGg7CiAgUFJVaW50MzIgbUNhcGFjaXR5OwogIGVDaGFyU2l6
ZSBtQ2hhclNpemU7CiAgUFJCb29sIG1Pd25zQnVmZmVyOwoKICB1bmlvbiB7CiAgICBjaGFyKiBt
U3RyOwogICAgUFJVbmljaGFyKiBtVVN0cjsKICB9OwoKcHJpdmF0ZToKICBzdGF0aWMgUFJCb29s
IEFsbG9jKG5zU3RyJiBhU3RyaW5nLFBSVWludDMyIGFDb3VudCk7CiAgc3RhdGljIFBSQm9vbCBS
ZWFsbG9jKG5zU3RyJiBhU3RyaW5nLFBSVWludDMyIGFDb3VudCk7CiAgc3RhdGljIFBSQm9vbCBG
cmVlKG5zU3RyJiBhU3RyaW5nKTsKCn07CiMgNDYwICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHIu
aCIKaW5saW5lIFBSSW50MzIgTWluSW50KFBSSW50MzIgYW5JbnQxLFBSSW50MzIgYW5JbnQyKXsK
ICByZXR1cm4gKGFuSW50MTxhbkludDIpID8gYW5JbnQxIDogYW5JbnQyOwp9CgppbmxpbmUgUFJJ
bnQzMiBNYXhJbnQoUFJJbnQzMiBhbkludDEsUFJJbnQzMiBhbkludDIpewogIHJldHVybiAoYW5J
bnQxPGFuSW50MikgPyBhbkludDIgOiBhbkludDE7Cn0KCmlubGluZSB2b2lkIEFkZE51bGxUZXJt
aW5hdG9yKG5zU3RyJiBhRGVzdCkgewogIGlmKGVUd29CeXRlPT1hRGVzdC5tQ2hhclNpemUpCiAg
ICBhRGVzdC5tVVN0clthRGVzdC5tTGVuZ3RoXT0wOwogIGVsc2UgYURlc3QubVN0clthRGVzdC5t
TGVuZ3RoXT0wOwp9CgoKCgoKCgppbmxpbmUgdm9pZCBSZWN5Y2xlKCBjaGFyKiBhQnVmZmVyKSB7
IG5zTWVtb3J5OjpGcmVlKGFCdWZmZXIpOyB9CmlubGluZSB2b2lkIFJlY3ljbGUoIFBSVW5pY2hh
ciogYUJ1ZmZlcikgeyBuc01lbW9yeTo6RnJlZShhQnVmZmVyKTsgfQojIDQ5MSAiLi4vLi4vZGlz
dC9pbmNsdWRlL25zU3RyLmgiCmlubGluZSBQUlVuaWNoYXIgR2V0Q2hhckF0KGNvbnN0IG5zU3Ry
JiBhRGVzdCxQUlVpbnQzMiBhbkluZGV4KSB7CiAgaWYoYW5JbmRleDxhRGVzdC5tTGVuZ3RoKSB7
CiAgICByZXR1cm4gKGVUd29CeXRlPT1hRGVzdC5tQ2hhclNpemUpID8gYURlc3QubVVTdHJbYW5J
bmRleF0gOiAoUFJVbmljaGFyKWFEZXN0Lm1TdHJbYW5JbmRleF07CiAgfQogIHJldHVybiAwOwp9
CiMgNTMgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIuaCIgMgojIDEgIi4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0NSVC5oIiAxCiMgNTQgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIuaCIg
MgojIDYzICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiCmNsYXNzIG5zSVNpemVPZkhh
bmRsZXI7CgoKCgoKY2xhc3MgbnNTdWJzdW1lU3RyOwoKY2xhc3MgbnNTdHJpbmcgOgogIHB1Ymxp
YyBuc0FGbGF0U3RyaW5nLAogIHB1YmxpYyBuc1N0ciB7Cgpwcm90ZWN0ZWQ6CiAgdmlydHVhbCBj
b25zdCBuc0J1ZmZlckhhbmRsZTxQUlVuaWNoYXI+KiBHZXRGbGF0QnVmZmVySGFuZGxlKCkgY29u
c3Q7CiAgdmlydHVhbCBjb25zdCBQUlVuaWNoYXIqIEdldFJlYWRhYmxlRnJhZ21lbnQoIG5zUmVh
ZGFibGVGcmFnbWVudDxQUlVuaWNoYXI+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkg
Y29uc3Q7CiAgdmlydHVhbCBQUlVuaWNoYXIqIEdldFdyaXRhYmxlRnJhZ21lbnQoIG5zV3JpdGFi
bGVGcmFnbWVudDxQUlVuaWNoYXI+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICk7Cgpw
dWJsaWM6CiAgdmlydHVhbCBjb25zdCBQUlVuaWNoYXIqIGdldCgpIGNvbnN0IHsgcmV0dXJuIEdl
dFVuaWNvZGUoKTsgfQoKcHVibGljOgoKCgogIG5zU3RyaW5nKCk7CgoKCgoKICBuc1N0cmluZyhj
b25zdCBuc1N0cmluZyYgYVN0cmluZyk7CgogIGV4cGxpY2l0IG5zU3RyaW5nKGNvbnN0IG5zQVN0
cmluZyYpOwoKICBleHBsaWNpdCBuc1N0cmluZyhjb25zdCBQUlVuaWNoYXIqKTsKICBuc1N0cmlu
Zyhjb25zdCBQUlVuaWNoYXIqLCBQUkludDMyKTsKIyAxMDggIi4uLy4uL2Rpc3QvaW5jbHVkZS9u
c1N0cmluZzIuaCIKICBleHBsaWNpdCBuc1N0cmluZyhuc1N1YnN1bWVTdHImIGFTdWJzdW1lU3Ry
KTsKCgoKCgoKICB2aXJ0dWFsIH5uc1N0cmluZygpOwoKCgoKCiAgdmlydHVhbCBQUlVpbnQzMiBM
ZW5ndGgoKSBjb25zdCB7IHJldHVybiBtTGVuZ3RoOyB9CgoKCgoKICB2aXJ0dWFsIHZvaWQgU2l6
ZU9mKG5zSVNpemVPZkhhbmRsZXIqIGFIYW5kbGVyLCBQUlVpbnQzMiogYVJlc3VsdCkgY29uc3Q7
CgoKCgoKCgogIHZvaWQgU2V0TGVuZ3RoKFBSVWludDMyIGFMZW5ndGgpOwoKCgoKCgogIHZvaWQg
U2V0Q2FwYWNpdHkoUFJVaW50MzIgYUxlbmd0aCk7CiMgMTUxICIuLi8uLi9kaXN0L2luY2x1ZGUv
bnNTdHJpbmcyLmgiCiAgUFJCb29sIElzVW5pY29kZSh2b2lkKSBjb25zdCB7CiAgICBQUkJvb2wg
cmVzdWx0PVBSQm9vbChtQ2hhclNpemU9PWVUd29CeXRlKTsKICAgIHJldHVybiByZXN1bHQ7CiAg
fQojIDE2MyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIgogIGNvbnN0IGNoYXIqIEdl
dEJ1ZmZlcih2b2lkKSBjb25zdDsKICBjb25zdCBQUlVuaWNoYXIqIEdldFVuaWNvZGUodm9pZCkg
Y29uc3Q7CgoKCgogIFBSQm9vbCBTZXRDaGFyQXQoUFJVbmljaGFyIGFDaGFyLFBSVWludDMyIGFu
SW5kZXgpOwojIDE4MiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIgogIHZvaWQgVG9M
b3dlckNhc2UoKTsKIyAxOTEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIuaCIKICB2b2lk
IFRvTG93ZXJDYXNlKG5zU3RyaW5nJiBhU3RyaW5nKSBjb25zdDsKCgoKCgogIHZvaWQgVG9VcHBl
ckNhc2UoKTsKCgoKCgoKCiAgdm9pZCBUb1VwcGVyQ2FzZShuc1N0cmluZyYgYVN0cmluZykgY29u
c3Q7CiMgMjE1ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiCiAgdm9pZCBTdHJpcENo
YXJzKCBjb25zdCBjaGFyKiBhU2V0ICk7CiAgdm9pZCBTdHJpcENoYXIoIFBSVW5pY2hhciBhQ2hh
ciwgUFJJbnQzMiBhbk9mZnNldD0wICk7CiAgdm9pZCBTdHJpcENoYXIoIGNoYXIgYUNoYXIsIFBS
SW50MzIgYW5PZmZzZXQ9MCApIHsgU3RyaXBDaGFyKChQUlVuaWNoYXIpICh1bnNpZ25lZCBjaGFy
KWFDaGFyLGFuT2Zmc2V0KTsgfQogIHZvaWQgU3RyaXBDaGFyKCBQUkludDMyIGFuSW50LCBQUklu
dDMyIGFuT2Zmc2V0PTAgKSB7IFN0cmlwQ2hhcigoUFJVbmljaGFyKWFuSW50LGFuT2Zmc2V0KTsg
fQoKCgoKCgogIHZvaWQgU3RyaXBXaGl0ZXNwYWNlKCk7CgoKCgoKCiAgdm9pZCBSZXBsYWNlQ2hh
ciggUFJVbmljaGFyIGFuT2xkQ2hhciwgUFJVbmljaGFyIGFOZXdDaGFyICk7CiAgdm9pZCBSZXBs
YWNlQ2hhciggY29uc3QgY2hhciogYVNldCwgUFJVbmljaGFyIGFOZXdDaGFyICk7CgogIHZvaWQg
UmVwbGFjZVN1YnN0cmluZyggY29uc3QgbnNTdHJpbmcmIGFUYXJnZXQsIGNvbnN0IG5zU3RyaW5n
JiBhTmV3VmFsdWUgKTsKICB2b2lkIFJlcGxhY2VTdWJzdHJpbmcoIGNvbnN0IFBSVW5pY2hhciog
YVRhcmdldCwgY29uc3QgUFJVbmljaGFyKiBhTmV3VmFsdWUgKTsKIyAyNDkgIi4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc1N0cmluZzIuaCIKICB2b2lkIFRyaW0oY29uc3QgY2hhciogYVNldCxQUkJvb2wg
YUVsaW1pbmF0ZUxlYWRpbmc9MSxQUkJvb2wgYUVsaW1pbmF0ZVRyYWlsaW5nPTEsUFJCb29sIGFJ
Z25vcmVRdW90ZXM9MCk7CiMgMjYwICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiCiAg
dm9pZCBDb21wcmVzc1NldChjb25zdCBjaGFyKiBhU2V0LCBQUlVuaWNoYXIgYUNoYXIsUFJCb29s
IGFFbGltaW5hdGVMZWFkaW5nPTEsUFJCb29sIGFFbGltaW5hdGVUcmFpbGluZz0xKTsKIyAyNzEg
Ii4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIuaCIKICB2b2lkIENvbXByZXNzV2hpdGVzcGFj
ZSggUFJCb29sIGFFbGltaW5hdGVMZWFkaW5nPTEsUFJCb29sIGFFbGltaW5hdGVUcmFpbGluZz0x
KTsKIyAyODEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIuaCIKICBuc1N0cmluZyogVG9O
ZXdTdHJpbmcoKSBjb25zdDsKCgoKCgoKCiAgY2hhciogVG9OZXdDU3RyaW5nKCkgY29uc3Q7CgoK
CgoKCgogIGNoYXIqIFRvTmV3VVRGOFN0cmluZygpIGNvbnN0OwoKCgoKCgoKICBQUlVuaWNoYXIq
IFRvTmV3VW5pY29kZSgpIGNvbnN0OwojIDMxNCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5n
Mi5oIgogIGNoYXIqIFRvQ1N0cmluZyhjaGFyKiBhQnVmLFBSVWludDMyIGFCdWZMZW5ndGgsUFJV
aW50MzIgYW5PZmZzZXQ9MCkgY29uc3Q7CgoKCgoKCiAgZmxvYXQgVG9GbG9hdChQUkludDMyKiBh
RXJyb3JDb2RlKSBjb25zdDsKCgoKCgoKCiAgUFJJbnQzMiBUb0ludGVnZXIoUFJJbnQzMiogYUVy
cm9yQ29kZSxQUlVpbnQzMiBhUmFkaXg9KDEwKSkgY29uc3Q7CiMgMzQ1ICIuLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNTdHJpbmcyLmgiCiAgbnNTdHJpbmcmIG9wZXJhdG9yPSggY29uc3QgbnNTdHJpbmcm
IGFTdHJpbmcgKSB7IEFzc2lnbihhU3RyaW5nKTsgcmV0dXJuICp0aGlzOyB9CiAgbnNTdHJpbmcm
IG9wZXJhdG9yPSggY29uc3QgbnNBU3RyaW5nJiBhUmVhZGFibGUgKSB7IEFzc2lnbihhUmVhZGFi
bGUpOyByZXR1cm4gKnRoaXM7IH0KCiAgbnNTdHJpbmcmIG9wZXJhdG9yPSggY29uc3QgUFJVbmlj
aGFyKiBhUHRyICkgeyBBc3NpZ24oYVB0cik7IHJldHVybiAqdGhpczsgfQogIG5zU3RyaW5nJiBv
cGVyYXRvcj0oIFBSVW5pY2hhciBhQ2hhciApIHsgQXNzaWduKGFDaGFyKTsgcmV0dXJuICp0aGlz
OyB9CgogIHZvaWQgQXNzaWduV2l0aENvbnZlcnNpb24oY2hhcik7CiAgdm9pZCBBc3NpZ25XaXRo
Q29udmVyc2lvbihjb25zdCBjaGFyKik7CiAgdm9pZCBBc3NpZ25XaXRoQ29udmVyc2lvbihjb25z
dCBjaGFyKiwgUFJJbnQzMik7CiMgMzY0ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgi
CiAgdm9pZCBBcHBlbmRJbnQoUFJJbnQzMiwgUFJJbnQzMj0xMCk7CiAgdm9pZCBBcHBlbmRGbG9h
dChkb3VibGUpOwogIHZvaWQgQXBwZW5kV2l0aENvbnZlcnNpb24oY29uc3QgY2hhciosIFBSSW50
MzI9LTEpOwogIHZvaWQgQXBwZW5kV2l0aENvbnZlcnNpb24oY2hhcik7CgogIHZpcnR1YWwgdm9p
ZCBkb19BcHBlbmRGcm9tRWxlbWVudCggUFJVbmljaGFyICk7CgoKCiAgdm9pZCBJbnNlcnRXaXRo
Q29udmVyc2lvbihjb25zdCBjaGFyKiwgUFJVaW50MzIsIFBSSW50MzI9LTEpOwojIDM4OSAiLi4v
Li4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIgogIFBSSW50MzIgRmluZChjb25zdCBuc1N0cmlu
ZyYgYVN0cmluZyxQUkJvb2wgYUlnbm9yZUNhc2U9MCxQUkludDMyIGFuT2Zmc2V0PTAsUFJJbnQz
MiBhQ291bnQ9LTEpIGNvbnN0OwogIFBSSW50MzIgRmluZChjb25zdCBuc1N0ciYgYVN0cmluZyxQ
UkJvb2wgYUlnbm9yZUNhc2U9MCxQUkludDMyIGFuT2Zmc2V0PTAsUFJJbnQzMiBhQ291bnQ9LTEp
IGNvbnN0OwogIFBSSW50MzIgRmluZChjb25zdCBjaGFyKiBhU3RyaW5nLFBSQm9vbCBhSWdub3Jl
Q2FzZT0wLFBSSW50MzIgYW5PZmZzZXQ9MCxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiAgUFJJ
bnQzMiBGaW5kKGNvbnN0IFBSVW5pY2hhciogYVN0cmluZyxQUkJvb2wgYUlnbm9yZUNhc2U9MCxQ
UkludDMyIGFuT2Zmc2V0PTAsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwojIDQwNSAiLi4vLi4v
ZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIgogIFBSSW50MzIgRmluZENoYXIoUFJVbmljaGFyIGFD
aGFyLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIgYW5PZmZzZXQ9MCxQUkludDMyIGFDb3Vu
dD0tMSkgY29uc3Q7CiMgNDE0ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiCiAgUFJJ
bnQzMiBGaW5kQ2hhckluU2V0KGNvbnN0IGNoYXIqIGFTdHJpbmcsUFJJbnQzMiBhbk9mZnNldD0w
KSBjb25zdDsKICBQUkludDMyIEZpbmRDaGFySW5TZXQoY29uc3QgUFJVbmljaGFyKiBhU3RyaW5n
LFBSSW50MzIgYW5PZmZzZXQ9MCkgY29uc3Q7CiAgUFJJbnQzMiBGaW5kQ2hhckluU2V0KGNvbnN0
IG5zU3RyJiBhU3RyaW5nLFBSSW50MzIgYW5PZmZzZXQ9MCkgY29uc3Q7CiMgNDI3ICIuLi8uLi9k
aXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiCiAgUFJJbnQzMiBSRmluZChjb25zdCBjaGFyKiBhQ1N0
cmluZyxQUkJvb2wgYUlnbm9yZUNhc2U9MCxQUkludDMyIGFuT2Zmc2V0PS0xLFBSSW50MzIgYUNv
dW50PS0xKSBjb25zdDsKICBQUkludDMyIFJGaW5kKGNvbnN0IG5zU3RyaW5nJiBhU3RyaW5nLFBS
Qm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIgYW5PZmZzZXQ9LTEsUFJJbnQzMiBhQ291bnQ9LTEp
IGNvbnN0OwogIFBSSW50MzIgUkZpbmQoY29uc3QgbnNTdHImIGFTdHJpbmcsUFJCb29sIGFJZ25v
cmVDYXNlPTAsUFJJbnQzMiBhbk9mZnNldD0tMSxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiAg
UFJJbnQzMiBSRmluZChjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcsUFJCb29sIGFJZ25vcmVDYXNl
PTAsUFJJbnQzMiBhbk9mZnNldD0tMSxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiMgNDQzICIu
Li8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiCiAgUFJJbnQzMiBSRmluZENoYXIoUFJVbmlj
aGFyIGFDaGFyLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIgYW5PZmZzZXQ9LTEsUFJJbnQz
MiBhQ291bnQ9LTEpIGNvbnN0OwojIDQ1MiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5o
IgogIFBSSW50MzIgUkZpbmRDaGFySW5TZXQoY29uc3QgY2hhciogYVN0cmluZyxQUkludDMyIGFu
T2Zmc2V0PS0xKSBjb25zdDsKICBQUkludDMyIFJGaW5kQ2hhckluU2V0KGNvbnN0IFBSVW5pY2hh
ciogYVN0cmluZyxQUkludDMyIGFuT2Zmc2V0PS0xKSBjb25zdDsKICBQUkludDMyIFJGaW5kQ2hh
ckluU2V0KGNvbnN0IG5zU3RyJiBhU3RyaW5nLFBSSW50MzIgYW5PZmZzZXQ9LTEpIGNvbnN0Owoj
IDQ3MCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nMi5oIgogIFBSSW50MzIgQ29tcGFyZVdp
dGhDb252ZXJzaW9uKGNvbnN0IGNoYXIqIGFTdHJpbmcsUFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJ
bnQzMiBhQ291bnQ9LTEpIGNvbnN0OwogIFBSSW50MzIgQ29tcGFyZVdpdGhDb252ZXJzaW9uKGNv
bnN0IG5zU3RyaW5nJiBhU3RyaW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIgYUNvdW50
PS0xKSBjb25zdDsKICBQUkludDMyIENvbXBhcmVXaXRoQ29udmVyc2lvbihjb25zdCBQUlVuaWNo
YXIqIGFTdHJpbmcsUFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0
OwoKICBQUkJvb2wgRXF1YWxzV2l0aENvbnZlcnNpb24oY29uc3QgbnNTdHJpbmcgJmFTdHJpbmcs
UFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwogIFBSQm9vbCBF
cXVhbHNXaXRoQ29udmVyc2lvbihjb25zdCBjaGFyKiBhU3RyaW5nLFBSQm9vbCBhSWdub3JlQ2Fz
ZT0wLFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsKICBQUkJvb2wgRXF1YWxzV2l0aENvbnZlcnNp
b24oY29uc3QgUFJVbmljaGFyKiBhU3RyaW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIg
YUNvdW50PS0xKSBjb25zdDsKICBQUkJvb2wgRXF1YWxzQXRvbSggbnNJQXRvbSogYW5BdG9tLFBS
Qm9vbCBhSWdub3JlQ2FzZSkgY29uc3Q7CgogIFBSQm9vbCBFcXVhbHNJZ25vcmVDYXNlKGNvbnN0
IG5zU3RyaW5nJiBhU3RyaW5nKSBjb25zdDsKICBQUkJvb2wgRXF1YWxzSWdub3JlQ2FzZShjb25z
dCBjaGFyKiBhU3RyaW5nLFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsKICBQUkJvb2wgRXF1YWxz
SWdub3JlQ2FzZSggbnNJQXRvbSAqYUF0b20pIGNvbnN0OwojIDQ5MCAiLi4vLi4vZGlzdC9pbmNs
dWRlL25zU3RyaW5nMi5oIgogIFBSQm9vbCBJc0FTQ0lJKGNvbnN0IFBSVW5pY2hhciogYUJ1ZmZl
cj0wKTsKCiAgdm9pZCBEZWJ1Z0R1bXAodm9pZCkgY29uc3Q7CgoKCgoKCgogIHN0YXRpYyBQUkJv
b2wgSXNTcGFjZShQUlVuaWNoYXIgY2gpOwoKCgoKCgoKICBzdGF0aWMgUFJCb29sIElzQWxwaGEo
UFJVbmljaGFyIGNoKTsKCgoKCgoKCiAgc3RhdGljIFBSQm9vbCBJc0RpZ2l0KFBSVW5pY2hhciBj
aCk7Cgpwcml2YXRlOgoKCiAgdm9pZCBvcGVyYXRvcj0oIGNoYXIgKTsKICB2b2lkIEFzc2lnbldp
dGhDb252ZXJzaW9uKCBQUlVuaWNoYXIgKTsKICB2b2lkIEFzc2lnbldpdGhDb252ZXJzaW9uKCBj
b25zdCBQUlVuaWNoYXIqLCBQUkludDMyPS0xICk7CiAgdm9pZCBBcHBlbmRXaXRoQ29udmVyc2lv
biggUFJVbmljaGFyICk7CiAgdm9pZCBBcHBlbmRXaXRoQ29udmVyc2lvbiggY29uc3QgUFJVbmlj
aGFyKiwgUFJJbnQzMj0tMSApOwogIHZvaWQgSW5zZXJ0V2l0aENvbnZlcnNpb24oIGNvbnN0IFBS
VW5pY2hhciosIFBSVWludDMyLCBQUkludDMyPS0xICk7Cn07CgoKCgpleHRlcm4gaW50IGZwdXRz
KGNvbnN0IG5zU3RyaW5nJiBhU3RyaW5nLCBGSUxFKiBvdXQpOwojIDU0MiAiLi4vLi4vZGlzdC9p
bmNsdWRlL25zU3RyaW5nMi5oIgpjbGFzcyBuc0F1dG9TdHJpbmcgOiBwdWJsaWMgbnNTdHJpbmcg
ewpwdWJsaWM6CgogICAgdmlydHVhbCB+bnNBdXRvU3RyaW5nKCk7CiAgICBuc0F1dG9TdHJpbmco
KTsKICAgIG5zQXV0b1N0cmluZyhjb25zdCBuc0F1dG9TdHJpbmcmIGFTdHJpbmcpOwogICAgZXhw
bGljaXQgbnNBdXRvU3RyaW5nKGNvbnN0IG5zQVN0cmluZyYgYVN0cmluZyk7CiAgICBleHBsaWNp
dCBuc0F1dG9TdHJpbmcoY29uc3QgbnNTdHJpbmcmIGFTdHJpbmcpOwogICAgZXhwbGljaXQgbnNB
dXRvU3RyaW5nKGNvbnN0IFBSVW5pY2hhciogYVN0cmluZyk7CiAgICBuc0F1dG9TdHJpbmcoY29u
c3QgUFJVbmljaGFyKiBhU3RyaW5nLFBSSW50MzIgYUxlbmd0aCk7CiAgICBleHBsaWNpdCBuc0F1
dG9TdHJpbmcoUFJVbmljaGFyIGFDaGFyKTsKICAgIGV4cGxpY2l0IG5zQXV0b1N0cmluZyhjb25z
dCBDQnVmRGVzY3JpcHRvciYgYUJ1ZmZlcik7CgoKCgogICAgZXhwbGljaXQgbnNBdXRvU3RyaW5n
KG5zU3Vic3VtZVN0ciYgYVN1YnN1bWVTdHIpOwoKCgogICAgbnNBdXRvU3RyaW5nJiBvcGVyYXRv
cj0oIGNvbnN0IG5zQXV0b1N0cmluZyYgYVN0cmluZyApIHsgQXNzaWduKGFTdHJpbmcpOyByZXR1
cm4gKnRoaXM7IH0KICBwcml2YXRlOgogICAgdm9pZCBvcGVyYXRvcj0oIGNoYXIgKTsKICBwdWJs
aWM6CiAgICBuc0F1dG9TdHJpbmcmIG9wZXJhdG9yPSggY29uc3QgbnNBU3RyaW5nJiBhUmVhZGFi
bGUgKSB7IEFzc2lnbihhUmVhZGFibGUpOyByZXR1cm4gKnRoaXM7IH0KCiAgICBuc0F1dG9TdHJp
bmcmIG9wZXJhdG9yPSggY29uc3QgUFJVbmljaGFyKiBhUHRyICkgeyBBc3NpZ24oYVB0cik7IHJl
dHVybiAqdGhpczsgfQogICAgbnNBdXRvU3RyaW5nJiBvcGVyYXRvcj0oIFBSVW5pY2hhciBhQ2hh
ciApIHsgQXNzaWduKGFDaGFyKTsgcmV0dXJuICp0aGlzOyB9CgoKCgoKICAgIHZpcnR1YWwgdm9p
ZCBTaXplT2YobnNJU2l6ZU9mSGFuZGxlciogYUhhbmRsZXIsIFBSVWludDMyKiBhUmVzdWx0KSBj
b25zdDsKCiAgICBjaGFyIG1CdWZmZXJba0RlZmF1bHRTdHJpbmdTaXplPDxlVHdvQnl0ZV07Cn07
CgoKCmNsYXNzIE5TX0NvbnZlcnRBU0NJSXRvVUNTMgogICAgICA6IHB1YmxpYyBuc0F1dG9TdHJp
bmcKCgoKICB7CiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0IE5TX0NvbnZlcnRBU0NJSXRvVUNT
MiggY29uc3QgY2hhciogKTsKICAgICAgTlNfQ29udmVydEFTQ0lJdG9VQ1MyKCBjb25zdCBjaGFy
KiwgUFJVaW50MzIgKTsKICAgICAgZXhwbGljaXQgTlNfQ29udmVydEFTQ0lJdG9VQ1MyKCBjaGFy
ICk7CiMgNjAwICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcyLmgiCiAgICBwcml2YXRlOgoK
ICAgICAgTlNfQ29udmVydEFTQ0lJdG9VQ1MyKCBQUlVuaWNoYXIgKTsKICB9OwoKY2xhc3MgTlNf
Q29udmVydFVURjh0b1VDUzIKICAgICAgOiBwdWJsaWMgbnNBdXRvU3RyaW5nCiAgewogICAgcHVi
bGljOgogICAgICBleHBsaWNpdAogICAgICBOU19Db252ZXJ0VVRGOHRvVUNTMiggY29uc3QgY2hh
ciogYUNTdHJpbmcgKQogICAgICAgIHsKICAgICAgICAgIEluaXQoIGFDU3RyaW5nLCB+UFJVaW50
MzIoMCkgKTsKICAgICAgICB9CgogICAgICBOU19Db252ZXJ0VVRGOHRvVUNTMiggY29uc3QgY2hh
ciogYUNTdHJpbmcsIFBSVWludDMyIGFMZW5ndGggKQogICAgICAgIHsKICAgICAgICAgIEluaXQo
IGFDU3RyaW5nLCBhTGVuZ3RoICk7CiAgICAgICAgfQoKICAgICAgZXhwbGljaXQKICAgICAgTlNf
Q29udmVydFVURjh0b1VDUzIoIGNoYXIgYUNoYXIgKQogICAgICAgIHsKICAgICAgICAgIEluaXQo
ICZhQ2hhciwgMSApOwogICAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZvaWQgSW5pdCgg
Y29uc3QgY2hhciogYUNTdHJpbmcsIFBSVWludDMyIGFMZW5ndGggKTsKCiAgICBwcml2YXRlOgog
ICAgICBOU19Db252ZXJ0VVRGOHRvVUNTMiggUFJVbmljaGFyICk7CiAgfTsKIyA2NDYgIi4uLy4u
L2Rpc3QvaW5jbHVkZS9uc1N0cmluZzIuaCIKY2xhc3MgbnNTdWJzdW1lU3RyIDogcHVibGljIG5z
U3RyaW5nIHsKcHVibGljOgogIG5zU3Vic3VtZVN0cigpOwogIGV4cGxpY2l0IG5zU3Vic3VtZVN0
cihuc1N0ciYgYVN0cmluZyk7CiAgbnNTdWJzdW1lU3RyKFBSVW5pY2hhciogYVN0cmluZyxQUkJv
b2wgYXNzdW1lT3duZXJzaGlwLFBSSW50MzIgYUxlbmd0aD0tMSk7CiAgbnNTdWJzdW1lU3RyKGNo
YXIqIGFTdHJpbmcsUFJCb29sIGFzc3VtZU93bmVyc2hpcCxQUkludDMyIGFMZW5ndGg9LTEpOwog
IGludCBTdWJzdW1lKFBSVW5pY2hhciogYVN0cmluZyxQUkJvb2wgYXNzdW1lT3duZXJzaGlwLFBS
SW50MzIgYUxlbmd0aD0tMSk7CgogIG5zU3Vic3VtZVN0ciYgb3BlcmF0b3I9KCBjb25zdCBuc1N1
YnN1bWVTdHImIGFSZWFkYWJsZSApIHsgQXNzaWduKGFSZWFkYWJsZSk7IHJldHVybiAqdGhpczsg
fQogIG5zU3Vic3VtZVN0ciYgb3BlcmF0b3I9KCBjb25zdCBuc0FTdHJpbmcmIGFSZWFkYWJsZSAp
IHsgQXNzaWduKGFSZWFkYWJsZSk7IHJldHVybiAqdGhpczsgfQoKICBuc1N1YnN1bWVTdHImIG9w
ZXJhdG9yPSggY29uc3QgUFJVbmljaGFyKiBhUHRyICkgeyBBc3NpZ24oYVB0cik7IHJldHVybiAq
dGhpczsgfQogIG5zU3Vic3VtZVN0ciYgb3BlcmF0b3I9KCBQUlVuaWNoYXIgYUNoYXIgKSB7IEFz
c2lnbihhQ2hhcik7IHJldHVybiAqdGhpczsgfQpwcml2YXRlOgogIHZvaWQgb3BlcmF0b3I9KCBj
aGFyICk7Cn07CiMgNDcgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIiAyCiMgMSAiL3Vz
ci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQojIDQ4ICIu
Li8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9u
c2NvcmUuaCIgMQojIDQ5ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIgMgojIDEgIi91
c3IvZ2NjLXByZTMuMC9saWIvZ2NjLWxpYi9pYTY0LWhwLWxpbnV4LzMuMC9pbmNsdWRlL3N0ZGlv
LmgiIDEgMwojIDUwICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIgMgojIDEgIi4uLy4u
L2Rpc3QvaW5jbHVkZS9uc1N0ci5oIiAxCiMgNTEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmlu
Zy5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUF0b20uaCIgMQojIDUyICIuLi8uLi9k
aXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIgMgoKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNBU3Ry
aW5nLmgiIDEKIyA1NCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiIDIKIyA2MiAiLi4v
Li4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQVdy
aXRhYmxlU3RyaW5nLmgiIDEKIyA2MyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiIDIK
CgoKY2xhc3MgbnNTdWJzdW1lQ1N0cjsKCmNsYXNzIG5zQ1N0cmluZyA6CiAgcHVibGljIG5zQUZs
YXRDU3RyaW5nLAogIHB1YmxpYyBuc1N0ciB7Cgpwcm90ZWN0ZWQ6CiAgdmlydHVhbCBjb25zdCBu
c0J1ZmZlckhhbmRsZTxjaGFyPiogR2V0RmxhdEJ1ZmZlckhhbmRsZSgpIGNvbnN0OwogIHZpcnR1
YWwgY29uc3QgY2hhciogR2V0UmVhZGFibGVGcmFnbWVudCggbnNSZWFkYWJsZUZyYWdtZW50PGNo
YXI+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkgY29uc3Q7CiAgdmlydHVhbCBjaGFy
KiBHZXRXcml0YWJsZUZyYWdtZW50KCBuc1dyaXRhYmxlRnJhZ21lbnQ8Y2hhcj4mLCBuc0ZyYWdt
ZW50UmVxdWVzdCwgUFJVaW50MzIgKTsKCnB1YmxpYzoKICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGdl
dCgpIGNvbnN0IHsgcmV0dXJuIG1TdHI7IH0KCnB1YmxpYzoKCgoKICBuc0NTdHJpbmcoKTsKCgoK
CgogIG5zQ1N0cmluZyhjb25zdCBuc0NTdHJpbmcmIGFTdHJpbmcpOwoKICBleHBsaWNpdCBuc0NT
dHJpbmcoIGNvbnN0IG5zQUNTdHJpbmcmICk7CgogIGV4cGxpY2l0IG5zQ1N0cmluZyhjb25zdCBj
aGFyKik7CiAgbnNDU3RyaW5nKGNvbnN0IGNoYXIqLCBQUkludDMyKTsKCgoKCgogIGV4cGxpY2l0
IG5zQ1N0cmluZyhuc1N1YnN1bWVDU3RyJiBhU3Vic3VtZVN0cik7CgoKCgoKICB2aXJ0dWFsIH5u
c0NTdHJpbmcoKTsKCgoKCgogIHZpcnR1YWwgUFJVaW50MzIgTGVuZ3RoKCkgY29uc3QgeyByZXR1
cm4gbUxlbmd0aDsgfQoKCgoKCiAgdmlydHVhbCB2b2lkIFNpemVPZihuc0lTaXplT2ZIYW5kbGVy
KiBhSGFuZGxlciwgUFJVaW50MzIqIGFSZXN1bHQpIGNvbnN0OwojIDEyOCAiLi4vLi4vZGlzdC9p
bmNsdWRlL25zU3RyaW5nLmgiCiAgdm9pZCBTZXRMZW5ndGgoUFJVaW50MzIgYUxlbmd0aCk7CgoK
CgoKCiAgdm9pZCBTZXRDYXBhY2l0eShQUlVpbnQzMiBhTGVuZ3RoKTsKCgoKCgogIFBSQm9vbCBT
ZXRDaGFyQXQoUFJVbmljaGFyIGFDaGFyLFBSVWludDMyIGFuSW5kZXgpOwojIDE1MSAiLi4vLi4v
ZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCiAgdm9pZCBUb0xvd2VyQ2FzZSgpOwojIDE2MCAiLi4v
Li4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCiAgdm9pZCBUb0xvd2VyQ2FzZShuc0NTdHJpbmcm
IGFTdHJpbmcpIGNvbnN0OwoKCgoKCiAgdm9pZCBUb1VwcGVyQ2FzZSgpOwoKCgoKCgoKICB2b2lk
IFRvVXBwZXJDYXNlKG5zQ1N0cmluZyYgYVN0cmluZykgY29uc3Q7CiMgMTg0ICIuLi8uLi9kaXN0
L2luY2x1ZGUvbnNTdHJpbmcuaCIKICB2b2lkIFN0cmlwQ2hhcnMoY29uc3QgY2hhciogYVNldCk7
CiAgdm9pZCBTdHJpcENoYXIoUFJVbmljaGFyIGFDaGFyLFBSSW50MzIgYW5PZmZzZXQ9MCk7CiAg
dm9pZCBTdHJpcENoYXIoY2hhciBhQ2hhcixQUkludDMyIGFuT2Zmc2V0PTApIHsgU3RyaXBDaGFy
KChQUlVuaWNoYXIpICh1bnNpZ25lZCBjaGFyKWFDaGFyLGFuT2Zmc2V0KTsgfQoKCgoKCgogIHZv
aWQgU3RyaXBXaGl0ZXNwYWNlKCk7CgoKCgoKCiAgdm9pZCBSZXBsYWNlQ2hhcihQUlVuaWNoYXIg
YU9sZENoYXIsUFJVbmljaGFyIGFOZXdDaGFyKTsKICB2b2lkIFJlcGxhY2VDaGFyKGNvbnN0IGNo
YXIqIGFTZXQsUFJVbmljaGFyIGFOZXdDaGFyKTsKCiAgdm9pZCBSZXBsYWNlU3Vic3RyaW5nKGNv
bnN0IG5zQ1N0cmluZyYgYVRhcmdldCxjb25zdCBuc0NTdHJpbmcmIGFOZXdWYWx1ZSk7CiAgdm9p
ZCBSZXBsYWNlU3Vic3RyaW5nKGNvbnN0IGNoYXIqIGFUYXJnZXQsY29uc3QgY2hhciogYU5ld1Zh
bHVlKTsKIyAyMTcgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIgogIHZvaWQgVHJpbShj
b25zdCBjaGFyKiBhU2V0LFBSQm9vbCBhRWxpbWluYXRlTGVhZGluZz0xLFBSQm9vbCBhRWxpbWlu
YXRlVHJhaWxpbmc9MSxQUkJvb2wgYUlnbm9yZVF1b3Rlcz0wKTsKIyAyMjggIi4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc1N0cmluZy5oIgogIHZvaWQgQ29tcHJlc3NTZXQoY29uc3QgY2hhciogYVNldCwg
UFJVbmljaGFyIGFDaGFyLFBSQm9vbCBhRWxpbWluYXRlTGVhZGluZz0xLFBSQm9vbCBhRWxpbWlu
YXRlVHJhaWxpbmc9MSk7CiMgMjM5ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIKICB2
b2lkIENvbXByZXNzV2hpdGVzcGFjZSggUFJCb29sIGFFbGltaW5hdGVMZWFkaW5nPTEsUFJCb29s
IGFFbGltaW5hdGVUcmFpbGluZz0xKTsKCgoKCgogIG9wZXJhdG9yIGNvbnN0IGNoYXIqKCkgY29u
c3Qge3JldHVybiAoY29uc3QgY2hhciopbVN0cjt9CgoKCgoKCgogIG5zQ1N0cmluZyogVG9OZXdT
dHJpbmcoKSBjb25zdDsKCgoKCgoKCiAgY2hhciogVG9OZXdDU3RyaW5nKCkgY29uc3Q7CgoKCgoK
CgogIFBSVW5pY2hhciogVG9OZXdVbmljb2RlKCkgY29uc3Q7CiMgMjc4ICIuLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNTdHJpbmcuaCIKICBjaGFyKiBUb0NTdHJpbmcoY2hhciogYUJ1ZixQUlVpbnQzMiBh
QnVmTGVuZ3RoLFBSVWludDMyIGFuT2Zmc2V0PTApIGNvbnN0OwoKCgoKCgogIGZsb2F0IFRvRmxv
YXQoUFJJbnQzMiogYUVycm9yQ29kZSkgY29uc3Q7CiMgMjk0ICIuLi8uLi9kaXN0L2luY2x1ZGUv
bnNTdHJpbmcuaCIKICBQUkludDMyIFRvSW50ZWdlcihQUkludDMyKiBhRXJyb3JDb2RlLFBSVWlu
dDMyIGFSYWRpeD0oMTApKSBjb25zdDsKIyAzMTAgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmlu
Zy5oIgogIG5zQ1N0cmluZyYgb3BlcmF0b3I9KCBjb25zdCBuc0NTdHJpbmcmIGFTdHJpbmcgKSB7
IEFzc2lnbihhU3RyaW5nKTsgcmV0dXJuICp0aGlzOyB9CiAgbnNDU3RyaW5nJiBvcGVyYXRvcj0o
IGNvbnN0IG5zQUNTdHJpbmcmIGFSZWFkYWJsZSApIHsgQXNzaWduKGFSZWFkYWJsZSk7IHJldHVy
biAqdGhpczsgfQoKICBuc0NTdHJpbmcmIG9wZXJhdG9yPSggY29uc3QgY2hhciogYVB0ciApIHsg
QXNzaWduKGFQdHIpOyByZXR1cm4gKnRoaXM7IH0KICBuc0NTdHJpbmcmIG9wZXJhdG9yPSggY2hh
ciBhQ2hhciApIHsgQXNzaWduKGFDaGFyKTsgcmV0dXJuICp0aGlzOyB9CgogIHZvaWQgQXNzaWdu
V2l0aENvbnZlcnNpb24oY29uc3QgUFJVbmljaGFyKixQUkludDMyPS0xKTsKICB2b2lkIEFzc2ln
bldpdGhDb252ZXJzaW9uKCBjb25zdCBuc1N0cmluZyYgYVN0cmluZyApOwogIHZvaWQgQXNzaWdu
V2l0aENvbnZlcnNpb24oIGNvbnN0IG5zQVN0cmluZyYgYVN0cmluZyApOwogIHZvaWQgQXNzaWdu
V2l0aENvbnZlcnNpb24oUFJVbmljaGFyKTsKIyAzMzEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0
cmluZy5oIgogIHZvaWQgQXBwZW5kV2l0aENvbnZlcnNpb24oY29uc3QgbnNTdHJpbmcmLCBQUklu
dDMyPS0xKTsKICB2b2lkIEFwcGVuZFdpdGhDb252ZXJzaW9uKFBSVW5pY2hhciBhQ2hhcik7CiAg
dm9pZCBBcHBlbmRXaXRoQ29udmVyc2lvbiggY29uc3QgbnNBU3RyaW5nJiBhU3RyaW5nICk7CiAg
dm9pZCBBcHBlbmRXaXRoQ29udmVyc2lvbihjb25zdCBQUlVuaWNoYXIqLCBQUkludDMyPS0xKTsK
CiAgdm9pZCBBcHBlbmRJbnQoUFJJbnQzMiBhSW50ZWdlcixQUkludDMyIGFSYWRpeD0xMCk7CiAg
dm9pZCBBcHBlbmRGbG9hdCggZG91YmxlIGFGbG9hdCApOwoKCiAgdm9pZCBJbnNlcnRXaXRoQ29u
dmVyc2lvbihQUlVuaWNoYXIgYUNoYXIsUFJVaW50MzIgYW5PZmZzZXQpOwojIDM2MyAiLi4vLi4v
ZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCiAgUFJJbnQzMiBGaW5kKGNvbnN0IG5zU3RyJiBhU3Ry
aW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIgYW5PZmZzZXQ9MCxQUkludDMyIGFDb3Vu
dD0tMSkgY29uc3Q7CiAgUFJJbnQzMiBGaW5kKGNvbnN0IGNoYXIqIGFTdHJpbmcsUFJCb29sIGFJ
Z25vcmVDYXNlPTAsUFJJbnQzMiBhbk9mZnNldD0wLFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsK
ICBQUkludDMyIEZpbmQoY29uc3QgUFJVbmljaGFyKiBhU3RyaW5nLFBSQm9vbCBhSWdub3JlQ2Fz
ZT0wLFBSSW50MzIgYW5PZmZzZXQ9MCxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiMgMzc2ICIu
Li8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIKICBQUkludDMyIEZpbmRDaGFyKFBSVW5pY2hh
ciBhQ2hhcixQUkJvb2wgYUlnbm9yZUNhc2U9MCxQUkludDMyIGFuT2Zmc2V0PTAsUFJJbnQzMiBh
Q291bnQ9LTEpIGNvbnN0OwojIDM4NSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiCiAg
UFJJbnQzMiBGaW5kQ2hhckluU2V0KGNvbnN0IGNoYXIqIGFTdHJpbmcsUFJJbnQzMiBhbk9mZnNl
dD0wKSBjb25zdDsKICBQUkludDMyIEZpbmRDaGFySW5TZXQoY29uc3QgUFJVbmljaGFyKiBhU3Ry
aW5nLFBSSW50MzIgYW5PZmZzZXQ9MCkgY29uc3Q7CiAgUFJJbnQzMiBGaW5kQ2hhckluU2V0KGNv
bnN0IG5zU3RyJiBhU3RyaW5nLFBSSW50MzIgYW5PZmZzZXQ9MCkgY29uc3Q7CiMgMzk3ICIuLi8u
Li9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIKICBQUkludDMyIFJGaW5kKGNvbnN0IGNoYXIqIGFD
U3RyaW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIgYW5PZmZzZXQ9LTEsUFJJbnQzMiBh
Q291bnQ9LTEpIGNvbnN0OwogIFBSSW50MzIgUkZpbmQoY29uc3QgbnNTdHImIGFTdHJpbmcsUFJC
b29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhbk9mZnNldD0tMSxQUkludDMyIGFDb3VudD0tMSkg
Y29uc3Q7CiAgUFJJbnQzMiBSRmluZChjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcsUFJCb29sIGFJ
Z25vcmVDYXNlPTAsUFJJbnQzMiBhbk9mZnNldD0tMSxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7
CiMgNDEwICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIKICBQUkludDMyIFJGaW5kQ2hh
cihQUlVuaWNoYXIgYUNoYXIsUFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhbk9mZnNldD0t
MSxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiMgNDE5ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNT
dHJpbmcuaCIKICBQUkludDMyIFJGaW5kQ2hhckluU2V0KGNvbnN0IGNoYXIqIGFTdHJpbmcsUFJJ
bnQzMiBhbk9mZnNldD0tMSkgY29uc3Q7CiAgUFJJbnQzMiBSRmluZENoYXJJblNldChjb25zdCBQ
UlVuaWNoYXIqIGFTdHJpbmcsUFJJbnQzMiBhbk9mZnNldD0tMSkgY29uc3Q7CiAgUFJJbnQzMiBS
RmluZENoYXJJblNldChjb25zdCBuc1N0ciYgYVN0cmluZyxQUkludDMyIGFuT2Zmc2V0PS0xKSBj
b25zdDsKIyA0MzcgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIgogIFBSSW50MzIgQ29t
cGFyZVdpdGhDb252ZXJzaW9uKGNvbnN0IFBSVW5pY2hhciogYVN0cmluZyxQUkJvb2wgYUlnbm9y
ZUNhc2U9MCxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiAgUFJJbnQzMiBDb21wYXJlV2l0aENv
bnZlcnNpb24oY29uc3QgY2hhciogYVN0cmluZyxQUkJvb2wgYUlnbm9yZUNhc2U9MCxQUkludDMy
IGFDb3VudD0tMSkgY29uc3Q7CgogIFBSQm9vbCBFcXVhbHNXaXRoQ29udmVyc2lvbihjb25zdCBu
c1N0cmluZyAmYVN0cmluZyxQUkJvb2wgYUlnbm9yZUNhc2U9MCxQUkludDMyIGFDb3VudD0tMSkg
Y29uc3Q7CiAgUFJCb29sIEVxdWFsc1dpdGhDb252ZXJzaW9uKGNvbnN0IGNoYXIqIGFTdHJpbmcs
UFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwogIFBSQm9vbCBF
cXVhbHNXaXRoQ29udmVyc2lvbihjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcsUFJCb29sIGFJZ25v
cmVDYXNlPTAsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwoKICBQUkJvb2wgRXF1YWxzSWdub3Jl
Q2FzZShjb25zdCBjaGFyKiBhU3RyaW5nLFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsKICBQUkJv
b2wgRXF1YWxzSWdub3JlQ2FzZShjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcsUFJJbnQzMiBhQ291
bnQ9LTEpIGNvbnN0OwoKCiAgdm9pZCBEZWJ1Z0R1bXAodm9pZCkgY29uc3Q7Cgpwcml2YXRlOgoK
CiAgdm9pZCBvcGVyYXRvcj0oIFBSVW5pY2hhciApOwogIHZvaWQgQXNzaWduV2l0aENvbnZlcnNp
b24oIGNoYXIgKTsKICB2b2lkIEFzc2lnbldpdGhDb252ZXJzaW9uKCBjb25zdCBjaGFyKiwgUFJJ
bnQzMj0tMSApOwogIHZvaWQgQXBwZW5kV2l0aENvbnZlcnNpb24oIGNoYXIgKTsKICB2b2lkIElu
c2VydFdpdGhDb252ZXJzaW9uKCBjaGFyLCBQUlVpbnQzMiApOwp9OwoKCgoKZXh0ZXJuIGludCBm
cHV0cyhjb25zdCBuc0NTdHJpbmcmIGFTdHJpbmcsIEZJTEUqIG91dCk7CiMgNDc0ICIuLi8uLi9k
aXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIKY2xhc3MgbnNDQXV0b1N0cmluZyA6IHB1YmxpYyBuc0NT
dHJpbmcgewpwdWJsaWM6CgogICAgdmlydHVhbCB+bnNDQXV0b1N0cmluZygpOwoKICAgIG5zQ0F1
dG9TdHJpbmcoKTsKICAgIGV4cGxpY2l0IG5zQ0F1dG9TdHJpbmcoY29uc3QgbnNDU3RyaW5nJiAp
OwogICAgZXhwbGljaXQgbnNDQXV0b1N0cmluZyhjb25zdCBuc0FDU3RyaW5nJiBhU3RyaW5nKTsK
ICAgIGV4cGxpY2l0IG5zQ0F1dG9TdHJpbmcoY29uc3QgY2hhciogYVN0cmluZyk7CiAgICBuc0NB
dXRvU3RyaW5nKGNvbnN0IGNoYXIqIGFTdHJpbmcsUFJJbnQzMiBhTGVuZ3RoKTsKICAgIGV4cGxp
Y2l0IG5zQ0F1dG9TdHJpbmcoY29uc3QgQ0J1ZkRlc2NyaXB0b3ImIGFCdWZmZXIpOwoKCgoKICAg
IGV4cGxpY2l0IG5zQ0F1dG9TdHJpbmcobnNTdWJzdW1lQ1N0ciYgYVN1YnN1bWVTdHIpOwoKCgog
ICAgbnNDQXV0b1N0cmluZyYgb3BlcmF0b3I9KCBjb25zdCBuc0NBdXRvU3RyaW5nJiBhU3RyaW5n
ICkgeyBBc3NpZ24oYVN0cmluZyk7IHJldHVybiAqdGhpczsgfQogIHByaXZhdGU6CiAgICB2b2lk
IG9wZXJhdG9yPSggUFJVbmljaGFyICk7CiAgcHVibGljOgogICAgbnNDQXV0b1N0cmluZyYgb3Bl
cmF0b3I9KCBjb25zdCBuc0FDU3RyaW5nJiBhUmVhZGFibGUgKSB7IEFzc2lnbihhUmVhZGFibGUp
OyByZXR1cm4gKnRoaXM7IH0KCiAgICBuc0NBdXRvU3RyaW5nJiBvcGVyYXRvcj0oIGNvbnN0IGNo
YXIqIGFQdHIgKSB7IEFzc2lnbihhUHRyKTsgcmV0dXJuICp0aGlzOyB9CiAgICBuc0NBdXRvU3Ry
aW5nJiBvcGVyYXRvcj0oIGNoYXIgYUNoYXIgKSB7IEFzc2lnbihhQ2hhcik7IHJldHVybiAqdGhp
czsgfQoKCgoKCiAgICB2aXJ0dWFsIHZvaWQgU2l6ZU9mKG5zSVNpemVPZkhhbmRsZXIqIGFIYW5k
bGVyLCBQUlVpbnQzMiogYVJlc3VsdCkgY29uc3Q7CgogICAgY2hhciBtQnVmZmVyW2tEZWZhdWx0
U3RyaW5nU2l6ZV07Cn07CgoKCgoKCmNsYXNzIE5TX0NvbnZlcnRVQ1MydG9VVEY4CiAgICAgIDog
cHVibGljIG5zQ0F1dG9TdHJpbmcKCgoKICB7CiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAg
ICAgIE5TX0NvbnZlcnRVQ1MydG9VVEY4KCBjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcgKQogICAg
ICAgIHsKICAgICAgICAgIEFwcGVuZCggYVN0cmluZywgflBSVWludDMyKDApICk7CiAgICAgICAg
fQoKICAgICAgTlNfQ29udmVydFVDUzJ0b1VURjgoIGNvbnN0IFBSVW5pY2hhciogYVN0cmluZywg
UFJVaW50MzIgYUxlbmd0aCApCiAgICAgICAgewogICAgICAgICAgQXBwZW5kKCBhU3RyaW5nLCBh
TGVuZ3RoICk7CiAgICAgICAgfQoKICAgICAgZXhwbGljaXQKICAgICAgTlNfQ29udmVydFVDUzJ0
b1VURjgoIFBSVW5pY2hhciBhQ2hhciApCiAgICAgICAgewogICAgICAgICAgQXBwZW5kKCAmYUNo
YXIsIDEgKTsKICAgICAgICB9CgogICAgICBleHBsaWNpdCBOU19Db252ZXJ0VUNTMnRvVVRGOCgg
Y29uc3QgbnNBU3RyaW5nJiBhU3RyaW5nICk7CgogICAgcHJvdGVjdGVkOgogICAgICB2b2lkIEFw
cGVuZCggY29uc3QgUFJVbmljaGFyKiBhU3RyaW5nLCBQUlVpbnQzMiBhTGVuZ3RoICk7CgogICAg
cHJpdmF0ZToKCiAgICAgIE5TX0NvbnZlcnRVQ1MydG9VVEY4KCBjaGFyICk7CiAgICAgIG9wZXJh
dG9yIGNvbnN0IGNoYXIqKCkgY29uc3Q7CiAgfTsKIyA1NjUgIi4uLy4uL2Rpc3QvaW5jbHVkZS9u
c1N0cmluZy5oIgpjbGFzcyBuc1N1YnN1bWVDU3RyIDogcHVibGljIG5zQ1N0cmluZyB7CnB1Ymxp
YzoKICBleHBsaWNpdCBuc1N1YnN1bWVDU3RyKG5zU3RyJiBhU3RyaW5nKTsKICBuc1N1YnN1bWVD
U3RyKFBSVW5pY2hhciogYVN0cmluZyxQUkJvb2wgYXNzdW1lT3duZXJzaGlwLFBSSW50MzIgYUxl
bmd0aD0tMSk7CiAgbnNTdWJzdW1lQ1N0cihjaGFyKiBhU3RyaW5nLFBSQm9vbCBhc3N1bWVPd25l
cnNoaXAsUFJJbnQzMiBhTGVuZ3RoPS0xKTsKCiAgbnNTdWJzdW1lQ1N0ciYgb3BlcmF0b3I9KCBj
b25zdCBuc1N1YnN1bWVDU3RyJiBhU3RyaW5nICkgeyBBc3NpZ24oYVN0cmluZyk7IHJldHVybiAq
dGhpczsgfQogIG5zU3Vic3VtZUNTdHImIG9wZXJhdG9yPSggY29uc3QgbnNBQ1N0cmluZyYgYVJl
YWRhYmxlICkgeyBBc3NpZ24oYVJlYWRhYmxlKTsgcmV0dXJuICp0aGlzOyB9CgogIG5zU3Vic3Vt
ZUNTdHImIG9wZXJhdG9yPSggY29uc3QgY2hhciogYVB0ciApIHsgQXNzaWduKGFQdHIpOyByZXR1
cm4gKnRoaXM7IH0KICBuc1N1YnN1bWVDU3RyJiBvcGVyYXRvcj0oIGNoYXIgYUNoYXIgKSB7IEFz
c2lnbihhQ2hhcik7IHJldHVybiAqdGhpczsgfQpwcml2YXRlOgogIHZvaWQgb3BlcmF0b3I9KCBQ
UlVuaWNoYXIgKTsKfTsKIyAzOCAibnNJbnN0YWxsLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1
ZGUvbnNGaWxlU3BlYy5oIiAxCiMgMTMxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNGaWxlU3BlYy5o
IgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIgMQojIDEzMiAiLi4vLi4vZGlzdC9p
bmNsdWRlL25zRmlsZVNwZWMuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0Vycm9yLmgi
IDEKIyAxMzMgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiIDIKIyAxICIuLi8uLi9k
aXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIgMQojIDEzNCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zRmls
ZVNwZWMuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NSVC5oIiAxCiMgMTM1ICIuLi8u
Li9kaXN0L2luY2x1ZGUvbnNGaWxlU3BlYy5oIiAyCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxh
L2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQojIDEzNiAiLi4vLi4vZGlzdC9pbmNsdWRl
L25zRmlsZVNwZWMuaCIgMgojIDE2MCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMuaCIK
IyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJTG9jYWxGaWxlLmgiIDEKIyAxNyAiLi4vLi4vZGlz
dC9pbmNsdWRlL25zSUxvY2FsRmlsZS5oIgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0
L2luY2x1ZGUvbnNwci9wcmlvLmgiIDEKIyAxOCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxvY2Fs
RmlsZS5oIiAyCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By
bGluay5oIiAxCiMgMTkgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lMb2NhbEZpbGUuaCIgMgojIDEg
Ii91c3IvZ2NjLXByZTMuMC9saWIvZ2NjLWxpYi9pYTY0LWhwLWxpbnV4LzMuMC9pbmNsdWRlL3N0
ZGlvLmgiIDEgMwojIDIwICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJTG9jYWxGaWxlLmgiIDIKIyAy
OCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxvY2FsRmlsZS5oIgpjbGFzcyBuc0lMb2NhbEZpbGUg
OiBwdWJsaWMgbnNJRmlsZSB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlE
KCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhYTYxMGYyMCwgMHhhODg5LCAweDExZDMs
IHsgMHg4YywgMHg4MSwgMHgwMCwgMHgwMCwgMHg2NCwgMHg2NSwgMHg3MywgMHg3NCB9fTsgcmV0
dXJuIGlpZDt9CiMgNTEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lMb2NhbEZpbGUuaCIKICB2aXJ0
dWFsIG5zcmVzdWx0IEluaXRXaXRoUGF0aChjb25zdCBjaGFyICpmaWxlUGF0aCkgPSAwOwoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBJbml0V2l0aFVuaWNvZGVQYXRoKGNvbnN0IFBSVW5pY2hhciAqZmls
ZVBhdGgpID0gMDsKIyA3MiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxvY2FsRmlsZS5oIgogIHZp
cnR1YWwgbnNyZXN1bHQgR2V0Rm9sbG93TGlua3MoUFJCb29sICphRm9sbG93TGlua3MpID0gMDsK
ICB2aXJ0dWFsIG5zcmVzdWx0IFNldEZvbGxvd0xpbmtzKFBSQm9vbCBhRm9sbG93TGlua3MpID0g
MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgT3Blbk5TUFJGaWxlRGVzYyhQUkludDMyIGZsYWdzLCBQ
UkludDMyIG1vZGUsIFBSRmlsZURlc2MgKiAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBPcGVuQU5TSUZpbGVEZXNjKGNvbnN0IGNoYXIgKm1vZGUsIEZJTEUgKiAqX3JldHZhbCkg
PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBMb2FkKFBSTGlicmFyeSAqICpfcmV0dmFsKSA9IDA7
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERpc2tTcGFjZUF2YWlsYWJsZShQUkludDY0ICphRGlz
a1NwYWNlQXZhaWxhYmxlKSA9IDA7CiMgOTcgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lMb2NhbEZp
bGUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEFwcGVuZFJlbGF0aXZlUGF0aChjb25zdCBjaGFyICpy
ZWxhdGl2ZUZpbGVQYXRoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEFwcGVuZFJlbGF0aXZl
VW5pY29kZVBhdGgoY29uc3QgUFJVbmljaGFyICpyZWxhdGl2ZUZpbGVQYXRoKSA9IDA7CgoKCgoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQZXJzaXN0ZW50RGVzY3JpcHRvcihjaGFyICogKmFQZXJz
aXN0ZW50RGVzY3JpcHRvcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UGVyc2lzdGVudERl
c2NyaXB0b3IoY29uc3QgY2hhciAqIGFQZXJzaXN0ZW50RGVzY3JpcHRvcikgPSAwOwoKCgoKCgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IFJldmVhbCh2b2lkKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgTGF1bmNoKHZvaWQpID0gMDsKCn07CiMgMjkzICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
TG9jYWxGaWxlLmgiCmV4dGVybiAiQyIgbnNyZXN1bHQKTlNfTmV3TG9jYWxGaWxlKGNvbnN0IGNo
YXIqIHBhdGgsIFBSQm9vbCBmb2xsb3dMaW5rcywgbnNJTG9jYWxGaWxlKiAqcmVzdWx0KTsKZXh0
ZXJuICJDIiBuc3Jlc3VsdApOU19OZXdVbmljb2RlTG9jYWxGaWxlKGNvbnN0IFBSVW5pY2hhciog
cGF0aCwgUFJCb29sIGZvbGxvd0xpbmtzLCBuc0lMb2NhbEZpbGUqICpyZXN1bHQpOwojIDE2MSAi
Li4vLi4vZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0NPTVB0ci5oIiAxCiMgMTYyICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNGaWxlU3BlYy5oIiAy
CiMgMTc2ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNGaWxlU3BlYy5oIgojIDEgIi91c3IvaW5jbHVk
ZS9kaXJlbnQuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMwojIDEgIi91c3Iv
aW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAyIDMK
CmV4dGVybiAiQyIgewoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAzMSAi
L3Vzci9pbmNsdWRlL2RpcmVudC5oIiAyIDMKIyA2MiAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAz
CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvZGlyZW50LmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUv
Yml0cy9kaXJlbnQuaCIgMwpzdHJ1Y3QgZGlyZW50CiAgewoKICAgIF9faW5vX3QgZF9pbm87CiAg
ICBfX29mZl90IGRfb2ZmOwoKCgoKICAgIHVuc2lnbmVkIHNob3J0IGludCBkX3JlY2xlbjsKICAg
IHVuc2lnbmVkIGNoYXIgZF90eXBlOwogICAgY2hhciBkX25hbWVbMjU2XTsKICB9OwoKCnN0cnVj
dCBkaXJlbnQ2NAogIHsKICAgIF9faW5vNjRfdCBkX2lubzsKICAgIF9fb2ZmNjRfdCBkX29mZjsK
ICAgIHVuc2lnbmVkIHNob3J0IGludCBkX3JlY2xlbjsKICAgIHVuc2lnbmVkIGNoYXIgZF90eXBl
OwogICAgY2hhciBkX25hbWVbMjU2XTsKICB9OwojIDYzICIvdXNyL2luY2x1ZGUvZGlyZW50Lmgi
IDIgMwojIDk4ICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDMKZW51bQogIHsKICAgIERUX1VOS05P
V04gPSAwLAoKICAgIERUX0ZJRk8gPSAxLAoKICAgIERUX0NIUiA9IDIsCgogICAgRFRfRElSID0g
NCwKCiAgICBEVF9CTEsgPSA2LAoKICAgIERUX1JFRyA9IDgsCgogICAgRFRfTE5LID0gMTAsCgog
ICAgRFRfU09DSyA9IDEyLAoKICAgIERUX1dIVCA9IDE0CgogIH07CiMgMTI4ICIvdXNyL2luY2x1
ZGUvZGlyZW50LmgiIDMKdHlwZWRlZiBzdHJ1Y3QgX19kaXJzdHJlYW0gRElSOwoKCgpleHRlcm4g
RElSICpvcGVuZGlyIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBp
bnQgY2xvc2VkaXIgKERJUiAqX19kaXJwKSB0aHJvdyAoKTsKIyAxNDYgIi91c3IvaW5jbHVkZS9k
aXJlbnQuaCIgMwpleHRlcm4gc3RydWN0IGRpcmVudCAqcmVhZGRpciAoRElSICpfX2RpcnApIHRo
cm93ICgpOwojIDE1NiAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAzCmV4dGVybiBzdHJ1Y3QgZGly
ZW50NjQgKnJlYWRkaXI2NCAoRElSICpfX2RpcnApIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50
IHJlYWRkaXJfciAoRElSICpfX3Jlc3RyaWN0IF9fZGlycCwKICAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdCBkaXJlbnQgKl9fcmVzdHJpY3QgX19lbnRyeSwKICAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdCBkaXJlbnQgKipfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKIyAxNzkgIi91
c3IvaW5jbHVkZS9kaXJlbnQuaCIgMwpleHRlcm4gaW50IHJlYWRkaXI2NF9yIChESVIgKl9fcmVz
dHJpY3QgX19kaXJwLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGlyZW50NjQgKl9f
cmVzdHJpY3QgX19lbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRpcmVudDY0
ICoqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCByZXdpbmRk
aXIgKERJUiAqX19kaXJwKSB0aHJvdyAoKTsKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVz
LmgiIDEgMwojIDE5MCAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAyIDMKCgpleHRlcm4gdm9pZCBz
ZWVrZGlyIChESVIgKl9fZGlycCwgbG9uZyBpbnQgX19wb3MpIHRocm93ICgpOwoKCmV4dGVybiBs
b25nIGludCB0ZWxsZGlyIChESVIgKl9fZGlycCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBk
aXJmZCAoRElSICpfX2RpcnApIHRocm93ICgpOwoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy9wb3NpeDFfbGltLmgiIDEgMwojIDIxMCAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAyIDMKIyAy
MjAgIi91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMwojIDEgIi91c3IvZ2NjLXByZTMuMC9saWIvZ2Nj
LWxpYi9pYTY0LWhwLWxpbnV4LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyMjEgIi91c3Iv
aW5jbHVkZS9kaXJlbnQuaCIgMiAzCgoKCgoKCmV4dGVybiBpbnQgc2NhbmRpciAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fZGlyLAogICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkaXJlbnQg
KioqX19yZXN0cmljdCBfX25hbWVsaXN0LAogICAgICAgICAgICAgICAgICAgIGludCAoKl9fc2Vs
ZWN0b3IpIChfX2NvbnN0IHN0cnVjdCBkaXJlbnQgKiksCiAgICAgICAgICAgICAgICAgICAgaW50
ICgqX19jbXApIChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2b2lkICopKSB0aHJvdyAoKTsKIyAy
NDcgIi91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMwpleHRlcm4gaW50IHNjYW5kaXI2NCAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fZGlyLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRp
cmVudDY0ICoqKl9fcmVzdHJpY3QgX19uYW1lbGlzdCwKICAgICAgICAgICAgICAgICAgICAgIGlu
dCAoKl9fc2VsZWN0b3IpIChfX2NvbnN0IHN0cnVjdCBkaXJlbnQ2NCAqKSwKICAgICAgICAgICAg
ICAgICAgICAgIGludCAoKl9fY21wKSAoX19jb25zdCB2b2lkICosIF9fY29uc3Qgdm9pZCAqKSkg
dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGFscGhhc29ydCAoX19jb25zdCB2b2lkICpfX2UxLCBf
X2NvbnN0IHZvaWQgKl9fZTIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f
KSk7CiMgMjY5ICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDMKZXh0ZXJuIGludCBhbHBoYXNvcnQ2
NCAoX19jb25zdCB2b2lkICpfX2UxLCBfX2NvbnN0IHZvaWQgKl9fZTIpCiAgICAgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGludCB2ZXJzaW9uc29ydCAo
X19jb25zdCB2b2lkICpfX2UxLCBfX2NvbnN0IHZvaWQgKl9fZTIpCiAgICAgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CiMgMjkwICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDMK
ZXh0ZXJuIGludCB2ZXJzaW9uc29ydDY0IChfX2NvbnN0IHZvaWQgKl9fZTEsIF9fY29uc3Qgdm9p
ZCAqX19lMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKIyAzMDAg
Ii91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMwpleHRlcm4gX19zc2l6ZV90IGdldGRpcmVudHJpZXMg
KGludCBfX2ZkLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBfX25ieXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX29mZl90ICpfX3Jlc3RyaWN0IF9fYmFzZXApIHRocm93ICgpOwojIDMxNiAiL3Vzci9pbmNs
dWRlL2RpcmVudC5oIiAzCmV4dGVybiBfX3NzaXplX3QgZ2V0ZGlyZW50cmllczY0IChpbnQgX19m
ZCwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCBfX25ieXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
b2ZmNjRfdCAqX19yZXN0cmljdCBfX2Jhc2VwKSB0aHJvdyAoKTsKCgoKCn0KIyAxNzcgIi4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiIDIKIyAxOTUgIi4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0ZpbGVTcGVjLmgiCmNsYXNzIG5zRmlsZVNwZWM7CmNsYXNzIG5zRmlsZVBhdGg7CmNsYXNzIG5z
RmlsZVVSTDsKY2xhc3MgbnNOU1BSUGF0aDsKY2xhc3MgbnNQZXJzaXN0ZW50RmlsZURlc2NyaXB0
b3I7CgoKCgpjbGFzcyBuc091dHB1dFN0cmVhbTsKY2xhc3MgbnNJbnB1dFN0cmVhbTsKY2xhc3Mg
bnNJT3V0cHV0U3RyZWFtOwpjbGFzcyBuc0lJbnB1dFN0cmVhbTsKY2xhc3MgbnNPdXRwdXRGaWxl
U3RyZWFtOwpjbGFzcyBuc0lucHV0RmlsZVN0cmVhbTsKY2xhc3MgbnNPdXRwdXRDb25zb2xlU3Ry
ZWFtOwoKY2xhc3MgbnNTdHJpbmc7CgpjbGFzcyBuc0lVbmljb2RlRW5jb2RlcjsKY2xhc3MgbnNJ
VW5pY29kZURlY29kZXI7CiMgMjI1ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNGaWxlU3BlYy5oIgpu
c3Jlc3VsdCBuc19maWxlX2NvbnZlcnRfcmVzdWx0KFBSSW50MzIgbmF0aXZlRXJyKTsKCgoKY2xh
c3MgbnNBdXRvQ1N0cmluZwojIDI0NSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMuaCIK
ewpwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zQXV0b0NTdHJpbmco
Y29uc3QgbnNTdHJpbmcmIG90aGVyKSA6IG1DU3RyaW5nKG90aGVyLlRvTmV3Q1N0cmluZygpKSB7
fQogICAgdmlydHVhbCB+bnNBdXRvQ1N0cmluZygpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvcGVyYXRvciBjb25zdCBjaGFyKigpIGNvbnN0IHsgcmV0dXJuIG1DU3RyaW5nOyB9
CgoKCgpwcm90ZWN0ZWQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIqIG1DU3RyaW5nOwp9OwoKCmNsYXNzIG5zU2ltcGxlQ2hhclN0cmluZwoKCgp7CnB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNTaW1wbGVDaGFyU3RyaW5nKCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zU2ltcGxlQ2hhclN0cmluZyhjb25zdCBj
aGFyKik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zU2ltcGxlQ2hhclN0cmlu
Zyhjb25zdCBuc1N0cmluZyYpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1Np
bXBsZUNoYXJTdHJpbmcoY29uc3QgbnNTaW1wbGVDaGFyU3RyaW5nJik7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zU2ltcGxlQ2hhclN0cmluZyhjb25zdCBjaGFyKiBpbkRhdGEs
IFBSVWludDMyIGluTGVuZ3RoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH5u
c1NpbXBsZUNoYXJTdHJpbmcoKTsKCiAgICB2b2lkIG9wZXJhdG9yID0gKGNvbnN0IGNoYXIqKTsK
ICAgIHZvaWQgb3BlcmF0b3IgPSAoY29uc3QgbnNTdHJpbmcmKTsKICAgIHZvaWQgb3BlcmF0b3Ig
PSAoY29uc3QgbnNTaW1wbGVDaGFyU3RyaW5nJik7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvcGVyYXRvciBjb25zdCBjaGFyKigpIGNvbnN0IHsgcmV0dXJuIG1EYXRhID8gbURh
dGEtPm1TdHJpbmcgOiAwOyB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJh
dG9yIGNoYXIqICgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWxsb2NEYXRhKExlbmd0aCgpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtRGF0YSA/IG1EYXRhLT5tU3Ry
aW5nIDogMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgUFJCb29sIG9w
ZXJhdG9yID09IChjb25zdCBjaGFyKik7CiAgICBQUkJvb2wgb3BlcmF0b3IgPT0gKGNvbnN0IG5z
U3RyaW5nJik7CiAgICBQUkJvb2wgb3BlcmF0b3IgPT0gKGNvbnN0IG5zU2ltcGxlQ2hhclN0cmlu
ZyYpOwoKICAgIHZvaWQgb3BlcmF0b3IgKz0gKGNvbnN0IGNoYXIqIGluU3RyaW5nKTsKICAgIG5z
U2ltcGxlQ2hhclN0cmluZyBvcGVyYXRvciArIChjb25zdCBjaGFyKiBpblN0cmluZykgY29uc3Q7
CgogICAgY2hhciBvcGVyYXRvciBbXShpbnQgaSkgY29uc3QgeyByZXR1cm4gbURhdGEgPyBtRGF0
YS0+bVN0cmluZ1tpXSA6ICdcMCc7IH0KICAgIGNoYXImIG9wZXJhdG9yIFtdKGludCBpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoaSA+PSAoaW50KUxlbmd0aCgpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFJlYWxsb2NEYXRhKChQUlVpbnQzMilpICsgMSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbURhdGEtPm1TdHJpbmdbaV07CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgIGNoYXImIG9wZXJhdG9yIFtdKHVu
c2lnbmVkIGludCBpKSB7IHJldHVybiAoKnRoaXMpWyhpbnQpaV07IH0KCiAgICB2b2lkIENhdGVu
YXRlKGNvbnN0IGNoYXIqIGluU3RyaW5nMSwgY29uc3QgY2hhciogaW5TdHJpbmcyKTsKCiAgICB2
b2lkIFNldFRvRW1wdHkoKTsKICAgIFBSQm9vbCBJc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gTGVu
Z3RoKCkgPT0gMDsgfQoKICAgIFBSVWludDMyIExlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1EYXRh
ID8gbURhdGEtPm1MZW5ndGggOiAwOyB9CiAgICB2b2lkIFNldExlbmd0aChQUlVpbnQzMiBpbkxl
bmd0aCkgeyBSZWFsbG9jRGF0YShpbkxlbmd0aCk7IH0KICAgIHZvaWQgQ29weUZyb20oY29uc3Qg
Y2hhciogaW5EYXRhLCBQUlVpbnQzMiBpbkxlbmd0aCk7CiAgICB2b2lkIExlYWZSZXBsYWNlKGNo
YXIgaW5TZXBhcmF0b3IsIGNvbnN0IGNoYXIqIGluTGVhZk5hbWUpOwogICAgY2hhciogR2V0TGVh
ZihjaGFyIGluU2VwYXJhdG9yKSBjb25zdDsKICAgIHZvaWQgVW5lc2NhcGUoKTsKCnByb3RlY3Rl
ZDoKCiAgICB2b2lkIEFkZFJlZkRhdGEoKTsKICAgIHZvaWQgUmVsZWFzZURhdGEoKTsKICAgIHZv
aWQgUmVhbGxvY0RhdGEoUFJVaW50MzIgaW5MZW5ndGgpOwoKCgoKCnByb3RlY3RlZDoKCiAgICBz
dHJ1Y3QgRGF0YSB7CiAgICAgICAgaW50IG1SZWZDb3VudDsKICAgICAgICBQUlVpbnQzMiBtTGVu
Z3RoOwogICAgICAgIGNoYXIgbVN0cmluZ1sxXTsKICAgICAgICB9OwogICAgRGF0YSogbURhdGE7
Cn07CgoKY2xhc3MgbnNGaWxlU3BlYwoKCgp7CiAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnNGaWxlU3BlYygpOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNGaWxlU3BlYyhjb25zdCBjaGFyKiBpbk5hdGl2ZVBhdGgsIFBSQm9vbCBpbkNyZWF0
ZURpcnMgPSAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0ZpbGVTcGVjKGNv
bnN0IG5zU3RyaW5nJiBpbk5hdGl2ZVBhdGgsIFBSQm9vbCBpbkNyZWF0ZURpcnMgPSAwKTsKCgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRmlsZVNwZWMoY29uc3QgbnNGaWxlUGF0
aCYgaW5QYXRoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0ZpbGVTcGVjKGNv
bnN0IG5zRmlsZVVSTCYgaW5VUkwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
RmlsZVNwZWMoY29uc3QgbnNQZXJzaXN0ZW50RmlsZURlc2NyaXB0b3ImIGluVVJMKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0ZpbGVTcGVjKGNvbnN0IG5zRmlsZVNwZWMmIGlu
UGF0aCk7CiAgICAgICAgdmlydHVhbCB+bnNGaWxlU3BlYygpOwoKCiAgICAgICAgdm9pZCBvcGVy
YXRvciA9IChjb25zdCBjaGFyKiBpbk5hdGl2ZVBhdGgpOwogICAgICAgIHZvaWQgb3BlcmF0b3Ig
PSAoY29uc3QgbnNTdHJpbmcmIGluTmF0aXZlUGF0aCk7CgogICAgICAgIHZvaWQgb3BlcmF0b3Ig
PSAoY29uc3QgbnNGaWxlUGF0aCYgaW5QYXRoKTsKICAgICAgICB2b2lkIG9wZXJhdG9yID0gKGNv
bnN0IG5zRmlsZVVSTCYgaW5VUkwpOwogICAgICAgIHZvaWQgb3BlcmF0b3IgPSAoY29uc3QgbnNG
aWxlU3BlYyYgaW5PdGhlcik7CiAgICAgICAgdm9pZCBvcGVyYXRvciA9IChjb25zdCBuc1BlcnNp
c3RlbnRGaWxlRGVzY3JpcHRvciYgaW5PdGhlcik7CgogICAgICAgIFBSQm9vbCBvcGVyYXRvciA9
PShjb25zdCBuc0ZpbGVTcGVjJiBpbk90aGVyKSBjb25zdDsKICAgICAgICBQUkJvb2wgb3BlcmF0
b3IgIT0oY29uc3QgbnNGaWxlU3BlYyYgaW5PdGhlcikgY29uc3Q7CiMgMzcyICIuLi8uLi9kaXN0
L2luY2x1ZGUvbnNGaWxlU3BlYy5oIgogICAgICAgY29uc3QgY2hhciogR2V0Q1N0cmluZygpIGNv
bnN0OwoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yIGNvbnN0IGNo
YXIqICgpIGNvbnN0IHsgcmV0dXJuIEdldENTdHJpbmcoKTsgfQoKCgogICAgICAgY29uc3QgY2hh
ciogR2V0TmF0aXZlUGF0aENTdHJpbmcoKSBjb25zdCB7IHJldHVybiBHZXRDU3RyaW5nKCk7IH0K
CgoKICAgICAgIHZvaWQgR2V0TmF0aXZlUGF0aFN0cmluZyhuc1N0cmluZyAmbmF0aXZlUGF0aFN0
cmluZyk7CgogICAgICAgUFJCb29sIElzQ2hpbGRPZihuc0ZpbGVTcGVjICZwb3NzaWJsZVBhcmVu
dCk7CiMgNDIxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNGaWxlU3BlYy5oIgogICAgICAgIFBSQm9v
bCBWYWxpZCgpIGNvbnN0IHsgcmV0dXJuICghKChFcnJvcigpKSAmIDB4ODAwMDAwMDApKTsgfQog
ICAgICAgIG5zcmVzdWx0IEVycm9yKCkgY29uc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobVBhdGguSXNF
bXB0eSgpICYmICghKChtRXJyb3IpICYgMHg4MDAwMDAwMCkpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKChuc0ZpbGVTcGVjKil0aGlzKS0+bUVycm9yID0gKCgobnNy
ZXN1bHQpIDB4QzFGMzAwMDApICsgMSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbUVycm9yOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICBQUkJvb2wgRmFpbGVkKCkgY29uc3QgeyByZXR1cm4gKFBSQm9vbCkoKEVycm9yKCkpICYg
MHg4MDAwMDAwMCk7IH0KCgoKCgogICAgICAgIGNoYXIqIEdldExlYWZOYW1lKCkgY29uc3Q7CgoK
ICAgICAgICB2b2lkIEdldExlYWZOYW1lKG5zU3RyaW5nICZuYXRpdmVQYXRoU3RyaW5nKTsKIyA0
NTAgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiCiAgICAgICAgdm9pZCBTZXRMZWFm
TmFtZShjb25zdCBjaGFyKiBpbkxlYWZOYW1lKTsKICAgICAgICB2b2lkIFNldExlYWZOYW1lKGNv
bnN0IG5zU3RyaW5nJiBpbkxlYWZOYW1lKTsKCgoKCgoKCiAgICAgICAgdm9pZCBHZXRQYXJlbnQo
bnNGaWxlU3BlYyYgb3V0U3BlYykgY29uc3Q7CiMgNDY4ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNG
aWxlU3BlYy5oIgogICAgICAgIHR5cGVkZWYgUFJVaW50MzIgVGltZVN0YW1wOwoKCgoKCiAgICAg
ICAgdm9pZCBHZXRNb2REYXRlKFRpbWVTdGFtcCYgb3V0U3RhbXApIGNvbnN0OwoKICAgICAgICBQ
UkJvb2wgTW9kRGF0ZUNoYW5nZWQoY29uc3QgVGltZVN0YW1wJiBvbGRTdGFtcCkgY29uc3QKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRpbWVTdGFtcCBuZXdTdGFtcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR2V0TW9kRGF0ZShuZXdTdGFtcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBuZXdTdGFtcCAhPSBvbGRTdGFtcDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CgogICAgICAgIFBSVWludDMyIEdldEZpbGVTaXplKCkgY29uc3Q7CiAg
ICAgICAgUFJJbnQ2NCBHZXREaXNrU3BhY2VBdmFpbGFibGUoKSBjb25zdDsKCiAgICAgICAgbnNG
aWxlU3BlYyBvcGVyYXRvciArIChjb25zdCBjaGFyKiBpblJlbGF0aXZlVW5peFBhdGgpIGNvbnN0
OwogICAgICAgIG5zRmlsZVNwZWMgb3BlcmF0b3IgKyAoY29uc3QgbnNTdHJpbmcmIGluUmVsYXRp
dmVVbml4UGF0aCkgY29uc3Q7CiMgNDk3ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNGaWxlU3BlYy5o
IgogICAgICAgIHZvaWQgb3BlcmF0b3IgKz0gKGNvbnN0IGNoYXIqIGluUmVsYXRpdmVVbml4UGF0
aCk7CgogICAgICAgIHZvaWQgb3BlcmF0b3IgKz0gKGNvbnN0IG5zU3RyaW5nJiBpblJlbGF0aXZl
VW5peFBhdGgpOwoKICAgICAgICB2b2lkIE1ha2VVbmlxdWUoKTsKICAgICAgICB2b2lkIE1ha2VV
bmlxdWUoY29uc3QgY2hhciogaW5TdWdnZXN0ZWRMZWFmTmFtZSk7CiAgICAgICAgdm9pZCBNYWtl
VW5pcXVlKGNvbnN0IG5zU3RyaW5nJiBpblN1Z2dlc3RlZExlYWZOYW1lKTsKCgogICAgICAgIFBS
Qm9vbCBJc0RpcmVjdG9yeSgpIGNvbnN0OwogICAgICAgIFBSQm9vbCBJc0ZpbGUoKSBjb25zdDsK
ICAgICAgICBQUkJvb2wgRXhpc3RzKCkgY29uc3Q7CgogICAgICAgIFBSQm9vbCBJc0hpZGRlbigp
IGNvbnN0OwoKICAgICAgICBQUkJvb2wgSXNTeW1saW5rKCkgY29uc3Q7CgoKCgoKCgogICAgICAg
IG5zcmVzdWx0IFJlc29sdmVTeW1saW5rKFBSQm9vbCYgd2FzU3ltbGluayk7CgogICAgICAgIHZv
aWQgQ3JlYXRlRGlyZWN0b3J5KGludCBtb2RlID0gMDc3NSApOwogICAgICAgIHZvaWQgQ3JlYXRl
RGlyKGludCBtb2RlID0gMDc3NSkgeyBDcmVhdGVEaXJlY3RvcnkobW9kZSk7IH0KCiAgICAgICAg
dm9pZCBEZWxldGUoUFJCb29sIGluUmVjdXJzaXZlKSBjb25zdDsKICAgICAgICBuc3Jlc3VsdCBU
cnVuY2F0ZShQUkludDMyIGFOZXdMZW5ndGgpIGNvbnN0OwogICAgICAgIHZvaWQgUmVjdXJzaXZl
Q29weShuc0ZpbGVTcGVjIG5ld0RpcikgY29uc3Q7CgogICAgICAgIG5zcmVzdWx0IFJlbmFtZShj
b25zdCBjaGFyKiBpbk5ld05hbWUpOwogICAgICAgIG5zcmVzdWx0IFJlbmFtZShjb25zdCBuc1N0
cmluZyYgaW5OZXdOYW1lKTsKICAgICAgICBuc3Jlc3VsdCBDb3B5VG9EaXIoY29uc3QgbnNGaWxl
U3BlYyYgaW5OZXdQYXJlbnREaXJlY3RvcnkpIGNvbnN0OwogICAgICAgIG5zcmVzdWx0IE1vdmVU
b0Rpcihjb25zdCBuc0ZpbGVTcGVjJiBpbk5ld1BhcmVudERpcmVjdG9yeSk7CiAgICAgICAgbnNy
ZXN1bHQgRXhlY3V0ZShjb25zdCBjaGFyKiBhcmdzKSBjb25zdDsKICAgICAgICBuc3Jlc3VsdCBF
eGVjdXRlKGNvbnN0IG5zU3RyaW5nJiBhcmdzKSBjb25zdDsKCgoKCgogICAgcHJvdGVjdGVkOgoK
CiAgICAgICBQUlVuaWNoYXIqIENvbnZlcnRGcm9tRmlsZVN5c3RlbUNoYXJzZXQoY29uc3QgY2hh
ciAqaW5TdHJpbmcpOwogICAgICAgc3RhdGljIHZvaWQgR2V0RmlsZVN5c3RlbUNoYXJzZXQobnNT
dHJpbmcgJiBmaWxlU3lzdGVtQ2hhcnNldCk7CgoKCgoKICAgIHByb3RlY3RlZDoKCgoKICAgICAg
IHZvaWQgQ2xlYXIoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJpZW5kIGNs
YXNzIG5zRmlsZVBhdGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJpZW5kIGNs
YXNzIG5zRmlsZVVSTDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmllbmQgY2xh
c3MgbnNEaXJlY3RvcnlJdGVyYXRvcjsKCgoKICAgICAgICBuc1NpbXBsZUNoYXJTdHJpbmcgbVBh
dGg7CiAgICAgICAgbnNyZXN1bHQgbUVycm9yOwoKfTsKCgoKdHlwZWRlZiBuc0ZpbGVTcGVjIG5z
TmF0aXZlRmlsZVNwZWM7CgoKY2xhc3MgbnNGaWxlVVJMCgoKCgp7CiAgICBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNGaWxlVVJMKGNvbnN0IG5zRmlsZVVSTCYgaW5V
UkwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRmlsZVVSTChjb25zdCBjaGFy
KiBpblVSTFN0cmluZywgUFJCb29sIGluQ3JlYXRlRGlycyA9IDApOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zRmlsZVVSTChjb25zdCBuc1N0cmluZyYgaW5VUkxTdHJpbmcsIFBS
Qm9vbCBpbkNyZWF0ZURpcnMgPSAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0ZpbGVVUkwoY29uc3QgbnNGaWxlUGF0aCYgaW5QYXRoKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0ZpbGVVUkwoY29uc3QgbnNGaWxlU3BlYyYgaW5QYXRoKTsKICAgICAgICB2
aXJ0dWFsIH5uc0ZpbGVVUkwoKTsKCgoKCgogICAgICAgIHZvaWQgb3BlcmF0b3IgPSAoY29uc3Qg
bnNGaWxlVVJMJiBpblVSTCk7CiAgICAgICAgdm9pZCBvcGVyYXRvciA9IChjb25zdCBjaGFyKiBp
blVSTFN0cmluZyk7CiAgICAgICAgdm9pZCBvcGVyYXRvciA9IChjb25zdCBuc1N0cmluZyYgaW5V
UkxTdHJpbmcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0F1dG9DU3RyaW5nIHN0cmluZyhpblVSTFN0
cmluZyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0aGlzID0gc3RyaW5n
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICB2b2lkIG9wZXJhdG9y
ID0gKGNvbnN0IG5zRmlsZVBhdGgmIGluT3RoZXIpOwogICAgICAgIHZvaWQgb3BlcmF0b3IgPSAo
Y29uc3QgbnNGaWxlU3BlYyYgaW5PdGhlcik7CgogICAgICAgIHZvaWQgb3BlcmF0b3IgKz0oY29u
c3QgY2hhciogaW5SZWxhdGl2ZVVuaXhQYXRoKTsKICAgICAgICBuc0ZpbGVVUkwgb3BlcmF0b3Ig
Kyhjb25zdCBjaGFyKiBpblJlbGF0aXZlVW5peFBhdGgpIGNvbnN0OwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9wZXJhdG9yIGNvbnN0IGNoYXIqICgpIGNvbnN0IHsgcmV0dXJuIChj
b25zdCBjaGFyKiltVVJMOyB9CiAgICAgICAgY29uc3QgY2hhciogR2V0VVJMU3RyaW5nKCkgY29u
c3QgeyByZXR1cm4gKGNvbnN0IGNoYXIqKW1VUkw7IH0KCiAgICAgICAgY29uc3QgY2hhciogR2V0
QXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiAoY29uc3QgY2hhciopbVVSTDsgfQojIDYxNyAiLi4v
Li4vZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMuaCIKICAgIHByb3RlY3RlZDoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgbnNGaWxlUGF0aDsKICAgICAgICBuc1Np
bXBsZUNoYXJTdHJpbmcgbVVSTDsKCgoKCgoKfTsKCgpjbGFzcyBuc0ZpbGVQYXRoCgoKCgp7CiAg
ICBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNGaWxlUGF0aChjb25z
dCBuc0ZpbGVQYXRoJiBpblBhdGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
RmlsZVBhdGgoY29uc3QgY2hhciogaW5Vbml4UGF0aFN0cmluZywgUFJCb29sIGluQ3JlYXRlRGly
cyA9IDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRmlsZVBhdGgoY29uc3Qg
bnNTdHJpbmcmIGluVW5peFBhdGhTdHJpbmcsIFBSQm9vbCBpbkNyZWF0ZURpcnMgPSAwKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0ZpbGVQYXRoKGNvbnN0IG5zRmlsZVVSTCYg
aW5VUkwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRmlsZVBhdGgoY29uc3Qg
bnNGaWxlU3BlYyYgaW5QYXRoKTsKICAgICAgICB2aXJ0dWFsIH5uc0ZpbGVQYXRoKCk7CgoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvciBjb25zdCBjaGFyKiAoKSBjb25z
dCB7IHJldHVybiBtUGF0aDsgfQoKCgoKICAgICAgICB2b2lkIG9wZXJhdG9yID0gKGNvbnN0IG5z
RmlsZVBhdGgmIGluUGF0aCk7CiAgICAgICAgdm9pZCBvcGVyYXRvciA9IChjb25zdCBjaGFyKiBp
blVuaXhQYXRoU3RyaW5nKTsKICAgICAgICB2b2lkIG9wZXJhdG9yID0gKGNvbnN0IG5zU3RyaW5n
JiBpblVuaXhQYXRoU3RyaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNBdXRvQ1N0cmluZyBzdHJp
bmcoaW5Vbml4UGF0aFN0cmluZyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICp0aGlzID0gc3RyaW5nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICB2b2lkIG9wZXJhdG9yID0gKGNvbnN0IG5zRmlsZVVSTCYgaW5VUkwpOwogICAgICAgIHZvaWQg
b3BlcmF0b3IgPSAoY29uc3QgbnNGaWxlU3BlYyYgaW5PdGhlcik7CgogICAgICAgIHZvaWQgb3Bl
cmF0b3IgKz0oY29uc3QgY2hhciogaW5SZWxhdGl2ZVVuaXhQYXRoKTsKICAgICAgICBuc0ZpbGVQ
YXRoIG9wZXJhdG9yICsoY29uc3QgY2hhciogaW5SZWxhdGl2ZVVuaXhQYXRoKSBjb25zdDsKIyA2
NzIgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiCiAgICBwcml2YXRlOgoKICAgICAg
ICBuc1NpbXBsZUNoYXJTdHJpbmcgbVBhdGg7CgoKCgoKfTsKCgpjbGFzcyBuc1BlcnNpc3RlbnRG
aWxlRGVzY3JpcHRvcgoKCgoKCnsKICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc1BlcnNpc3RlbnRGaWxlRGVzY3JpcHRvcigpIHt9CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zUGVyc2lzdGVudEZpbGVEZXNjcmlwdG9yKGNvbnN0IG5zUGVyc2lz
dGVudEZpbGVEZXNjcmlwdG9yJiBpbkVuY29kZWREYXRhKTsKICAgICAgICB2aXJ0dWFsIH5uc1Bl
cnNpc3RlbnRGaWxlRGVzY3JpcHRvcigpOwogICAgICAgIHZvaWQgb3BlcmF0b3IgPSAoY29uc3Qg
bnNQZXJzaXN0ZW50RmlsZURlc2NyaXB0b3ImIGluRW5jb2RlZERhdGEpOwoKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNQZXJzaXN0ZW50RmlsZURlc2NyaXB0b3IoY29uc3QgbnNG
aWxlU3BlYyYgaW5TcGVjKTsKICAgICAgICB2b2lkIG9wZXJhdG9yID0gKGNvbnN0IG5zRmlsZVNw
ZWMmIGluU3BlYyk7CgoKCgogICAgICAgIGZyaWVuZCBuc3Jlc3VsdCBSZWFkKG5zSUlucHV0U3Ry
ZWFtKiBhU3RyZWFtLCBuc1BlcnNpc3RlbnRGaWxlRGVzY3JpcHRvciYpOwogICAgICAgIGZyaWVu
ZCBuc3Jlc3VsdCBXcml0ZShuc0lPdXRwdXRTdHJlYW0qIGFTdHJlYW0sIGNvbnN0IG5zUGVyc2lz
dGVudEZpbGVEZXNjcmlwdG9yJik7CgogICAgICAgIGZyaWVuZCBuc0lucHV0U3RyZWFtJiBvcGVy
YXRvciA+PiAobnNJbnB1dFN0cmVhbSYsIG5zUGVyc2lzdGVudEZpbGVEZXNjcmlwdG9yJik7Cgog
ICAgICAgIGZyaWVuZCBuc091dHB1dFN0cmVhbSYgb3BlcmF0b3IgPDwgKG5zT3V0cHV0U3RyZWFt
JiwgY29uc3QgbnNQZXJzaXN0ZW50RmlsZURlc2NyaXB0b3ImKTsKCiAgICAgICAgZnJpZW5kIGNs
YXNzIG5zRmlsZVNwZWM7CgogICAgICAgIHZvaWQgR2V0RGF0YShuc1NpbXBsZUNoYXJTdHJpbmcm
IG91dERhdGEpIGNvbnN0OwogICAgICAgIHZvaWQgU2V0RGF0YShjb25zdCBuc1NpbXBsZUNoYXJT
dHJpbmcmIGluRGF0YSk7CiAgICAgICAgdm9pZCBHZXREYXRhKG5zU2ltcGxlQ2hhclN0cmluZyYg
b3V0RGF0YSwgUFJJbnQzMiYgb3V0U2l6ZSkgY29uc3Q7CiAgICAgICAgdm9pZCBTZXREYXRhKGNv
bnN0IG5zU2ltcGxlQ2hhclN0cmluZyYgaW5EYXRhLCBQUkludDMyIGluU2l6ZSk7CiAgICAgICAg
dm9pZCBTZXREYXRhKGNvbnN0IGNoYXIqIGluRGF0YSwgUFJJbnQzMiBpblNpemUpOwoKCgoKCiAg
ICBwcm90ZWN0ZWQ6CgogICAgICAgIG5zU2ltcGxlQ2hhclN0cmluZyBtRGVzY3JpcHRvclN0cmlu
ZzsKCn07CgoKY2xhc3MgbnNEaXJlY3RvcnlJdGVyYXRvcgojIDc0NyAiLi4vLi4vZGlzdC9pbmNs
dWRlL25zRmlsZVNwZWMuaCIKewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnNEaXJlY3RvcnlJdGVyYXRvciggY29uc3QgbnNGaWxlU3BlYyYgcGFy
ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQUkJvb2wgcmVzb3ZlU3ltTGlua3MpOwoKCiAgICAgICAgICAgIHZpcnR1YWwgfm5zRGly
ZWN0b3J5SXRlcmF0b3IoKTsKCiAgICAgICAgICAgIFBSQm9vbCBFeGlzdHMoKSBjb25zdCB7IHJl
dHVybiBtRXhpc3RzOyB9CiAgICAgICAgICAgIG5zRGlyZWN0b3J5SXRlcmF0b3ImIG9wZXJhdG9y
ICsrKCk7CiAgICAgICAgICAgIG5zRGlyZWN0b3J5SXRlcmF0b3ImIG9wZXJhdG9yICsrKGludCkg
eyByZXR1cm4gKysoKnRoaXMpOyB9CiAgICAgICAgICAgIG5zRGlyZWN0b3J5SXRlcmF0b3ImIG9w
ZXJhdG9yIC0tKCk7CiAgICAgICAgICAgIG5zRGlyZWN0b3J5SXRlcmF0b3ImIG9wZXJhdG9yIC0t
KGludCkgeyByZXR1cm4gLS0oKnRoaXMpOyB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9wZXJhdG9yIG5zRmlsZVNwZWMmKCkgeyByZXR1cm4gbUN1cnJlbnQ7IH0KCiAgICAg
ICAgICAgIG5zRmlsZVNwZWMmIFNwZWMoKSB7IHJldHVybiBtQ3VycmVudDsgfQoKICAgICAgICBw
cml2YXRlOgojIDc3NCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMuaCIKICAgICAgICBw
cml2YXRlOgoKICAgICAgICAgICAgbnNGaWxlU3BlYyBtQ3VycmVudDsKICAgICAgICAgICAgUFJC
b29sIG1FeGlzdHM7CiAgICAgICAgUFJCb29sIG1SZXNvdmVTeW1MaW5rczsKCgogICAgICAgICAg
ICBuc0ZpbGVTcGVjIG1TdGFydGluZzsKCgoKICAgICAgICAgICAgRElSKiBtRGlyOwojIDc5NCAi
Li4vLi4vZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMuaCIKfTsKCgpjbGFzcyBuc05TUFJQYXRoCgoK
Cgp7CnB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNOU1BSUGF0aChj
b25zdCBuc0ZpbGVTcGVjJiBpblNwZWMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6IG1GaWxlUGF0aChpblNwZWMpLCBtb2RpZmllZE5TUFJQYXRoKDApIHt9CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zTlNQUlBhdGgoY29uc3QgbnNGaWxlVVJMJiBpblVS
TCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbUZpbGVQYXRoKGluVVJM
KSwgbW9kaWZpZWROU1BSUGF0aCgwKSB7fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc05TUFJQYXRoKGNvbnN0IG5zRmlsZVBhdGgmIGluVW5peFBhdGgpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA6IG1GaWxlUGF0aChpblVuaXhQYXRoKSwgbW9kaWZpZWRO
U1BSUGF0aCgwKSB7fQoKICAgIHZpcnR1YWwgfm5zTlNQUlBhdGgoKTsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yIGNvbnN0IGNoYXIqKCkgY29uc3Q7CiMgODIzICIu
Li8uLi9kaXN0L2luY2x1ZGUvbnNGaWxlU3BlYy5oIgpwcml2YXRlOgoKICAgIG5zRmlsZVBhdGgg
bUZpbGVQYXRoOwogICAgY2hhciogbW9kaWZpZWROU1BSUGF0aDsKfTsKCgogICAgICAgbnNyZXN1
bHQgTlNfRmlsZVNwZWNUb0lGaWxlKG5zRmlsZVNwZWMqIGZpbGVTcGVjLCBuc0lMb2NhbEZpbGUq
ICpyZXN1bHQpOwojIDM5ICJuc0luc3RhbGwuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9u
c1ZvaWRBcnJheS5oIiAxCiMgMjYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1ZvaWRBcnJheS5oIgoj
IDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIgMQojIDI3ICIuLi8uLi9kaXN0L2luY2x1
ZGUvbnNWb2lkQXJyYXkuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FXcml0YWJsZVN0
cmluZy5oIiAxCiMgMjggIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1ZvaWRBcnJheS5oIiAyCmNsYXNz
IG5zSVNpemVPZkhhbmRsZXI7CgoKdHlwZWRlZiBQUkJvb2wgKCogbnNWb2lkQXJyYXlFbnVtRnVu
Yykodm9pZCogYUVsZW1lbnQsIHZvaWQgKmFEYXRhKTsKCgpjbGFzcyBuc1ZvaWRBcnJheSB7CnB1
YmxpYzoKICBuc1ZvaWRBcnJheSgpOwogIG5zVm9pZEFycmF5KFBSSW50MzIgYUNvdW50KTsKICB2
aXJ0dWFsIH5uc1ZvaWRBcnJheSgpOwoKICBuc1ZvaWRBcnJheSYgb3BlcmF0b3I9KGNvbnN0IG5z
Vm9pZEFycmF5JiBvdGhlcik7CgogIHZvaWQgU2l6ZU9mKG5zSVNpemVPZkhhbmRsZXIqIGFIYW5k
bGVyLCBQUlVpbnQzMiogYVJlc3VsdCkgY29uc3Q7CgogIFBSSW50MzIgQ291bnQoKSBjb25zdCB7
CiAgICByZXR1cm4gbUltcGwgPyBtSW1wbC0+bUNvdW50IDogMDsKICB9CgogIHZvaWQqIEVsZW1l
bnRBdChQUkludDMyIGFJbmRleCkgY29uc3Q7CiAgdm9pZCogb3BlcmF0b3JbXShQUkludDMyIGFJ
bmRleCkgY29uc3QgeyByZXR1cm4gRWxlbWVudEF0KGFJbmRleCk7IH0KCiAgUFJJbnQzMiBJbmRl
eE9mKHZvaWQqIGFQb3NzaWJsZUVsZW1lbnQpIGNvbnN0OwoKICBQUkJvb2wgSW5zZXJ0RWxlbWVu
dEF0KHZvaWQqIGFFbGVtZW50LCBQUkludDMyIGFJbmRleCk7CgogIFBSQm9vbCBSZXBsYWNlRWxl
bWVudEF0KHZvaWQqIGFFbGVtZW50LCBQUkludDMyIGFJbmRleCk7CgogIFBSQm9vbCBBcHBlbmRF
bGVtZW50KHZvaWQqIGFFbGVtZW50KSB7CiAgICByZXR1cm4gSW5zZXJ0RWxlbWVudEF0KGFFbGVt
ZW50LCBDb3VudCgpKTsKICB9CgogIFBSQm9vbCBSZW1vdmVFbGVtZW50KHZvaWQqIGFFbGVtZW50
KTsKICBQUkJvb2wgUmVtb3ZlRWxlbWVudEF0KFBSSW50MzIgYUluZGV4KTsKICB2b2lkIENsZWFy
KCk7CgogIHZvaWQgQ29tcGFjdCgpOwoKICBQUkJvb2wgRW51bWVyYXRlRm9yd2FyZHMobnNWb2lk
QXJyYXlFbnVtRnVuYyBhRnVuYywgdm9pZCogYURhdGEpOwogIFBSQm9vbCBFbnVtZXJhdGVCYWNr
d2FyZHMobnNWb2lkQXJyYXlFbnVtRnVuYyBhRnVuYywgdm9pZCogYURhdGEpOwoKcHJvdGVjdGVk
OgogIHN0cnVjdCBJbXBsIHsKCgoKCgoKICAgIFBSVWludDMyIG1CaXRzOwoKCgoKICAgIFBSSW50
MzIgbUNvdW50OwoKCgoKICAgIHZvaWQqIG1BcnJheVsxXTsKICB9OwoKICBJbXBsKiBtSW1wbDsK
CiAgZW51bSB7CiAgICBrQXJyYXlPd25lck1hc2sgPSAxIDw8IDMxLAogICAga0FycmF5U2l6ZU1h
c2sgPSB+a0FycmF5T3duZXJNYXNrCiAgfTsKCgoKICBQUkludDMyIEdldEFycmF5U2l6ZSgpIGNv
bnN0OwogIHZvaWQgU2V0QXJyYXlTaXplKFBSSW50MzIgYVNpemUpOwogIFBSQm9vbCBJc0FycmF5
T3duZXIoKSBjb25zdDsKICB2b2lkIFNldEFycmF5T3duZXIoUFJCb29sIGFPd25lcik7Cgpwcml2
YXRlOgoKICBuc1ZvaWRBcnJheShjb25zdCBuc1ZvaWRBcnJheSYgb3RoZXIpOwp9OwoKCgpjbGFz
cyBuc0F1dG9Wb2lkQXJyYXkgOiBwdWJsaWMgbnNWb2lkQXJyYXkgewpwdWJsaWM6CiAgbnNBdXRv
Vm9pZEFycmF5KCk7Cgpwcm90ZWN0ZWQ6CgoKICBlbnVtIHsga0F1dG9CdWZTaXplID0gOCB9Owog
IGNoYXIgbUF1dG9CdWZbc2l6ZW9mKEltcGwpICsgKGtBdXRvQnVmU2l6ZSAtIDEpICogc2l6ZW9m
KHZvaWQqKV07Cn07CgoKY2xhc3MgbnNTdHJpbmc7Cgp0eXBlZGVmIFBSQm9vbCAoKm5zU3RyaW5n
QXJyYXlFbnVtRnVuYykobnNTdHJpbmcmIGFFbGVtZW50LCB2b2lkICphRGF0YSk7CgpjbGFzcyBu
c1N0cmluZ0FycmF5OiBwcm90ZWN0ZWQgbnNWb2lkQXJyYXkKewpwdWJsaWM6CiAgbnNTdHJpbmdB
cnJheSh2b2lkKTsKICB2aXJ0dWFsIH5uc1N0cmluZ0FycmF5KHZvaWQpOwoKICBuc1N0cmluZ0Fy
cmF5JiBvcGVyYXRvcj0oY29uc3QgbnNTdHJpbmdBcnJheSYgb3RoZXIpOwoKICB2b2lkIFNpemVP
Zihuc0lTaXplT2ZIYW5kbGVyKiBhSGFuZGxlciwgUFJVaW50MzIqIGFSZXN1bHQpIGNvbnN0OwoK
ICBQUkludDMyIENvdW50KHZvaWQpIGNvbnN0IHsKICAgIHJldHVybiBuc1ZvaWRBcnJheTo6Q291
bnQoKTsKICB9CgogIHZvaWQgU3RyaW5nQXQoUFJJbnQzMiBhSW5kZXgsIG5zQVdyaXRhYmxlU3Ry
aW5nJiBhU3RyaW5nKSBjb25zdDsKICBuc1N0cmluZyogU3RyaW5nQXQoUFJJbnQzMiBhSW5kZXgp
IGNvbnN0OwogIG5zU3RyaW5nKiBvcGVyYXRvcltdKFBSSW50MzIgYUluZGV4KSBjb25zdCB7IHJl
dHVybiBTdHJpbmdBdChhSW5kZXgpOyB9CgogIFBSSW50MzIgSW5kZXhPZihjb25zdCBuc0FSZWFk
YWJsZVN0cmluZyYgYVBvc3NpYmxlU3RyaW5nKSBjb25zdDsKICBQUkludDMyIEluZGV4T2ZJZ25v
cmVDYXNlKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhUG9zc2libGVTdHJpbmcpIGNvbnN0OwoK
ICBQUkJvb2wgSW5zZXJ0U3RyaW5nQXQoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFTdHJpbmcs
IFBSSW50MzIgYUluZGV4KTsKCiAgUFJCb29sIFJlcGxhY2VTdHJpbmdBdChjb25zdCBuc0FSZWFk
YWJsZVN0cmluZyYgYVN0cmluZywgUFJJbnQzMiBhSW5kZXgpOwoKICBQUkJvb2wgQXBwZW5kU3Ry
aW5nKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhU3RyaW5nKSB7CiAgICByZXR1cm4gSW5zZXJ0
U3RyaW5nQXQoYVN0cmluZywgQ291bnQoKSk7CiAgfQoKICBQUkJvb2wgUmVtb3ZlU3RyaW5nKGNv
bnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhU3RyaW5nKTsKICBQUkJvb2wgUmVtb3ZlU3RyaW5nSWdu
b3JlQ2FzZShjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYVN0cmluZyk7CiAgUFJCb29sIFJlbW92
ZVN0cmluZ0F0KFBSSW50MzIgYUluZGV4KTsKICB2b2lkIENsZWFyKHZvaWQpOwoKICB2b2lkIENv
bXBhY3Qodm9pZCkgewogICAgbnNWb2lkQXJyYXk6OkNvbXBhY3QoKTsKICB9CgogIFBSQm9vbCBF
bnVtZXJhdGVGb3J3YXJkcyhuc1N0cmluZ0FycmF5RW51bUZ1bmMgYUZ1bmMsIHZvaWQqIGFEYXRh
KTsKICBQUkJvb2wgRW51bWVyYXRlQmFja3dhcmRzKG5zU3RyaW5nQXJyYXlFbnVtRnVuYyBhRnVu
Yywgdm9pZCogYURhdGEpOwoKcHJpdmF0ZToKCiAgbnNTdHJpbmdBcnJheShjb25zdCBuc1N0cmlu
Z0FycmF5JiBvdGhlcik7Cn07CgoKY2xhc3MgbnNDU3RyaW5nOwoKdHlwZWRlZiBQUkJvb2wgKCpu
c0NTdHJpbmdBcnJheUVudW1GdW5jKShuc0NTdHJpbmcmIGFFbGVtZW50LCB2b2lkICphRGF0YSk7
CgpjbGFzcyBuc0NTdHJpbmdBcnJheTogcHJvdGVjdGVkIG5zVm9pZEFycmF5CnsKcHVibGljOgog
IG5zQ1N0cmluZ0FycmF5KHZvaWQpOwogIHZpcnR1YWwgfm5zQ1N0cmluZ0FycmF5KHZvaWQpOwoK
ICBuc0NTdHJpbmdBcnJheSYgb3BlcmF0b3I9KGNvbnN0IG5zQ1N0cmluZ0FycmF5JiBvdGhlcik7
CgogIHZvaWQgU2l6ZU9mKG5zSVNpemVPZkhhbmRsZXIqIGFIYW5kbGVyLCBQUlVpbnQzMiogYVJl
c3VsdCkgY29uc3Q7CgogIFBSSW50MzIgQ291bnQodm9pZCkgY29uc3QgewogICAgcmV0dXJuIG5z
Vm9pZEFycmF5OjpDb3VudCgpOwogIH0KCiAgdm9pZCBDU3RyaW5nQXQoUFJJbnQzMiBhSW5kZXgs
IG5zQ1N0cmluZyYgYUNTdHJpbmcpIGNvbnN0OwogIG5zQ1N0cmluZyogQ1N0cmluZ0F0KFBSSW50
MzIgYUluZGV4KSBjb25zdDsKICBuc0NTdHJpbmcqIG9wZXJhdG9yW10oUFJJbnQzMiBhSW5kZXgp
IGNvbnN0IHsgcmV0dXJuIENTdHJpbmdBdChhSW5kZXgpOyB9CgogIFBSSW50MzIgSW5kZXhPZihj
b25zdCBuc0NTdHJpbmcmIGFQb3NzaWJsZVN0cmluZykgY29uc3Q7CiAgUFJJbnQzMiBJbmRleE9m
SWdub3JlQ2FzZShjb25zdCBuc0NTdHJpbmcmIGFQb3NzaWJsZVN0cmluZykgY29uc3Q7CgogIFBS
Qm9vbCBJbnNlcnRDU3RyaW5nQXQoY29uc3QgbnNDU3RyaW5nJiBhQ1N0cmluZywgUFJJbnQzMiBh
SW5kZXgpOwoKICBQUkJvb2wgUmVwbGFjZUNTdHJpbmdBdChjb25zdCBuc0NTdHJpbmcmIGFDU3Ry
aW5nLCBQUkludDMyIGFJbmRleCk7CgogIFBSQm9vbCBBcHBlbmRDU3RyaW5nKGNvbnN0IG5zQ1N0
cmluZyYgYUNTdHJpbmcpIHsKICAgIHJldHVybiBJbnNlcnRDU3RyaW5nQXQoYUNTdHJpbmcsIENv
dW50KCkpOwogIH0KCiAgUFJCb29sIFJlbW92ZUNTdHJpbmcoY29uc3QgbnNDU3RyaW5nJiBhQ1N0
cmluZyk7CiAgUFJCb29sIFJlbW92ZUNTdHJpbmdJZ25vcmVDYXNlKGNvbnN0IG5zQ1N0cmluZyYg
YUNTdHJpbmcpOwogIFBSQm9vbCBSZW1vdmVDU3RyaW5nQXQoUFJJbnQzMiBhSW5kZXgpOwogIHZv
aWQgQ2xlYXIodm9pZCk7CgogIHZvaWQgQ29tcGFjdCh2b2lkKSB7CiAgICBuc1ZvaWRBcnJheTo6
Q29tcGFjdCgpOwogIH0KCiAgUFJCb29sIEVudW1lcmF0ZUZvcndhcmRzKG5zQ1N0cmluZ0FycmF5
RW51bUZ1bmMgYUZ1bmMsIHZvaWQqIGFEYXRhKTsKICBQUkJvb2wgRW51bWVyYXRlQmFja3dhcmRz
KG5zQ1N0cmluZ0FycmF5RW51bUZ1bmMgYUZ1bmMsIHZvaWQqIGFEYXRhKTsKCnByaXZhdGU6Cgog
IG5zQ1N0cmluZ0FycmF5KGNvbnN0IG5zQ1N0cmluZ0FycmF5JiBvdGhlcik7Cn07CiMgNDAgIm5z
SW5zdGFsbC5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSGFzaHRhYmxlLmgiIDEKIyAz
NiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSGFzaHRhYmxlLmgiCiMgMSAiL3Vzci9zcmMvbWlzYy9t
b3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BsaGFzaC5oIiAxCiMgMzcgIi4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0hhc2h0YWJsZS5oIiAyCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5j
bHVkZS9uc3ByL3BybG9jay5oIiAxCiMgMzggIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0hhc2h0YWJs
ZS5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQ29tLmgiIDEKIyAzOSAiLi4vLi4vZGlz
dC9pbmNsdWRlL25zSGFzaHRhYmxlLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNjb3Jl
LmgiIDEKIyA0MCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSGFzaHRhYmxlLmgiIDIKIyAxICIuLi8u
Li9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIgMQojIDQxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNI
YXNodGFibGUuaCIgMgoKY2xhc3MgbnNIYXNodGFibGU7CmNsYXNzIG5zU3RyaW5nS2V5OwoKY2xh
c3MgbnNIYXNoS2V5IHsKcHJvdGVjdGVkOgogIG5zSGFzaEtleSh2b2lkKTsKCnB1YmxpYzoKICB2
aXJ0dWFsIH5uc0hhc2hLZXkodm9pZCk7CiAgdmlydHVhbCBQUlVpbnQzMiBIYXNoQ29kZSh2b2lk
KSBjb25zdCA9IDA7CiAgdmlydHVhbCBQUkJvb2wgRXF1YWxzKGNvbnN0IG5zSGFzaEtleSAqYUtl
eSkgY29uc3QgPSAwOwogIHZpcnR1YWwgbnNIYXNoS2V5ICpDbG9uZSgpIGNvbnN0ID0gMDsKCgpw
dWJsaWM6CgogIGVudW0gbnNIYXNoS2V5VHlwZSB7CiAgICBVbmtub3duS2V5LAogICAgU3VwcG9y
dHNLZXksCiAgICBWb2lkS2V5LAogICAgSURLZXksCiAgICBDU3RyaW5nS2V5LAogICAgU3RyaW5n
S2V5LAogICAgT3BhcXVlS2V5CiAgfTsKICBuc0hhc2hLZXlUeXBlIEdldEtleVR5cGUoKSBjb25z
dCB7IHJldHVybiBtS2V5VHlwZTsgfQpwcm90ZWN0ZWQ6CiAgbnNIYXNoS2V5VHlwZSBtS2V5VHlw
ZTsKCn07CgoKCnR5cGVkZWYgUFJCb29sICgqIG5zSGFzaHRhYmxlRW51bUZ1bmMpKG5zSGFzaEtl
eSAqYUtleSwgdm9pZCAqYURhdGEsIHZvaWQqIGNsb3N1cmUpOwoKY2xhc3MgbnNIYXNodGFibGUg
ewpwcm90ZWN0ZWQ6CgogIFBSTG9jayogbUxvY2s7CiAgUExIYXNoVGFibGUgbUhhc2h0YWJsZTsK
ICBQUkJvb2wgbUVudW1lcmF0aW5nOwoKcHVibGljOgogIG5zSGFzaHRhYmxlKFBSVWludDMyIGFT
aXplID0gMTYsIFBSQm9vbCB0aHJlYWRTYWZlID0gMCk7CiAgdmlydHVhbCB+bnNIYXNodGFibGUo
KTsKCiAgUFJJbnQzMiBDb3VudCh2b2lkKSB7IHJldHVybiBtSGFzaHRhYmxlLm5lbnRyaWVzOyB9
CiAgUFJCb29sIEV4aXN0cyhuc0hhc2hLZXkgKmFLZXkpOwogIHZvaWQgKlB1dChuc0hhc2hLZXkg
KmFLZXksIHZvaWQgKmFEYXRhKTsKICB2b2lkICpHZXQobnNIYXNoS2V5ICphS2V5KTsKICB2b2lk
ICpSZW1vdmUobnNIYXNoS2V5ICphS2V5KTsKICBuc0hhc2h0YWJsZSAqQ2xvbmUoKTsKICB2b2lk
IEVudW1lcmF0ZShuc0hhc2h0YWJsZUVudW1GdW5jIGFFbnVtRnVuYywgdm9pZCogY2xvc3VyZSA9
IF9fbnVsbCk7CiAgdm9pZCBSZXNldCgpOwogIHZvaWQgUmVzZXQobnNIYXNodGFibGVFbnVtRnVu
YyBkZXN0cm95RnVuYywgdm9pZCogY2xvc3VyZSA9IF9fbnVsbCk7Cn07CgoKCgoKdHlwZWRlZiB2
b2lkKiAoKiBuc0hhc2h0YWJsZUNsb25lRWxlbWVudEZ1bmMpKG5zSGFzaEtleSAqYUtleSwgdm9p
ZCAqYURhdGEsIHZvaWQqIGNsb3N1cmUpOwoKY2xhc3MgbnNPYmplY3RIYXNodGFibGUgOiBwdWJs
aWMgbnNIYXNodGFibGUgewpwdWJsaWM6CiAgbnNPYmplY3RIYXNodGFibGUobnNIYXNodGFibGVD
bG9uZUVsZW1lbnRGdW5jIGNsb25lRWxlbWVudEZ1biwKICAgICAgICAgICAgICAgICAgICB2b2lk
KiBjbG9uZUVsZW1lbnRDbG9zdXJlLAogICAgICAgICAgICAgICAgICAgIG5zSGFzaHRhYmxlRW51
bUZ1bmMgZGVzdHJveUVsZW1lbnRGdW4sCiAgICAgICAgICAgICAgICAgICAgdm9pZCogZGVzdHJv
eUVsZW1lbnRDbG9zdXJlLAogICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFTaXplID0gMTYs
IFBSQm9vbCB0aHJlYWRTYWZlID0gMCk7CiAgfm5zT2JqZWN0SGFzaHRhYmxlKCk7CgogIG5zSGFz
aHRhYmxlICpDbG9uZSgpOwogIHZvaWQgUmVzZXQoKTsKICBQUkJvb2wgUmVtb3ZlQW5kRGVsZXRl
KG5zSGFzaEtleSAqYUtleSk7Cgpwcm90ZWN0ZWQ6CiAgc3RhdGljIFBSSW50biBDb3B5RWxlbWVu
dChQTEhhc2hFbnRyeSAqaGUsIFBSSW50biBpLCB2b2lkICphcmcpOwoKICBuc0hhc2h0YWJsZUNs
b25lRWxlbWVudEZ1bmMgbUNsb25lRWxlbWVudEZ1bjsKICB2b2lkKiBtQ2xvbmVFbGVtZW50Q2xv
c3VyZTsKICBuc0hhc2h0YWJsZUVudW1GdW5jIG1EZXN0cm95RWxlbWVudEZ1bjsKICB2b2lkKiBt
RGVzdHJveUVsZW1lbnRDbG9zdXJlOwp9OwoKCgoKY2xhc3MgbnNJU3VwcG9ydHM7CgpjbGFzcyBu
c1N1cHBvcnRzSGFzaHRhYmxlCiA6IHByaXZhdGUgbnNIYXNodGFibGUKewpwdWJsaWM6CiAgdHlw
ZWRlZiBQUkJvb2wgKCogRW51bUZ1bmMpIChuc0hhc2hLZXkgKmFLZXksIHZvaWQgKmFEYXRhLCB2
b2lkKiBjbG9zdXJlKTsKCiAgbnNTdXBwb3J0c0hhc2h0YWJsZShQUlVpbnQzMiBhU2l6ZSA9IDE2
LCBQUkJvb2wgdGhyZWFkU2FmZSA9IDApCiAgICA6IG5zSGFzaHRhYmxlKGFTaXplLCB0aHJlYWRT
YWZlKSB7fQogIH5uc1N1cHBvcnRzSGFzaHRhYmxlKCk7CgogIFBSSW50MzIgQ291bnQgKHZvaWQp
CiAgewogICAgcmV0dXJuIG5zSGFzaHRhYmxlOjpDb3VudCgpOwogIH0KICBQUkJvb2wgRXhpc3Rz
IChuc0hhc2hLZXkgKmFLZXkpCiAgewogICAgcmV0dXJuIG5zSGFzaHRhYmxlOjpFeGlzdHMgKGFL
ZXkpOwogIH0KICBQUkJvb2wgUHV0IChuc0hhc2hLZXkgKmFLZXksCiAgICAgICAgICAgICAgbnNJ
U3VwcG9ydHMgKmFEYXRhLAogICAgICAgICAgICAgIG5zSVN1cHBvcnRzICoqdmFsdWUgPSAwKTsK
ICBuc0lTdXBwb3J0cyogR2V0IChuc0hhc2hLZXkgKmFLZXkpOwogIFBSQm9vbCBSZW1vdmUgKG5z
SGFzaEtleSAqYUtleSwgbnNJU3VwcG9ydHMgKip2YWx1ZSA9IDApOwogIG5zSGFzaHRhYmxlICpD
bG9uZSgpOwogIHZvaWQgRW51bWVyYXRlIChFbnVtRnVuYyBhRW51bUZ1bmMsIHZvaWQqIGNsb3N1
cmUgPSBfX251bGwpCiAgewogICAgbnNIYXNodGFibGU6OkVudW1lcmF0ZSAoYUVudW1GdW5jLCBj
bG9zdXJlKTsKICB9CiAgdm9pZCBSZXNldCgpOwoKIHByaXZhdGU6CiAgc3RhdGljIFBSQm9vbCBS
ZWxlYXNlRWxlbWVudCAobnNIYXNoS2V5ICosIHZvaWQgKiwgdm9pZCAqKTsKICBzdGF0aWMgUFJJ
bnRuIEVudW1lcmF0ZUNvcHkgKFBMSGFzaEVudHJ5ICosIFBSSW50biwgdm9pZCAqKTsKfTsKCgoK
CiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzLmgiIDEKIyAxNzEgIi4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0hhc2h0YWJsZS5oIiAyCgpjbGFzcyBuc0lTdXBwb3J0c0tleSA6IHB1Ymxp
YyBuc0hhc2hLZXkgewpwcm90ZWN0ZWQ6CiAgbnNJU3VwcG9ydHMqIG1LZXk7CgpwdWJsaWM6CiAg
bnNJU3VwcG9ydHNLZXkobnNJU3VwcG9ydHMqIGtleSkgewoKICAgIG1LZXlUeXBlID0gU3VwcG9y
dHNLZXk7CgogICAgbUtleSA9IGtleTsKICAgICgoMCAhPSAobUtleSkpID8gbnNfaWZfYWRkcmVm
KG1LZXkpIDogMCk7CiAgfQoKICB+bnNJU3VwcG9ydHNLZXkodm9pZCkgewogICAgZG8geyBpZiAo
bUtleSkgeyAobUtleSktPlJlbGVhc2UoKTsgKG1LZXkpID0gMDsgfSB9IHdoaWxlICgwKTsKICB9
CgogIFBSVWludDMyIEhhc2hDb2RlKHZvaWQpIGNvbnN0IHsKICAgIHJldHVybiAoUFJVaW50MzIp
bUtleTsKICB9CgogIFBSQm9vbCBFcXVhbHMoY29uc3QgbnNIYXNoS2V5ICphS2V5KSBjb25zdCB7
CiAgICBpZiAoIShhS2V5LT5HZXRLZXlUeXBlKCkgPT0gU3VwcG9ydHNLZXkpKSBuc0RlYnVnOjpB
c3NlcnRpb24oIm1pc21hdGNoZWQga2V5IHR5cGVzIiwgImFLZXktPkdldEtleVR5cGUoKSA9PSBT
dXBwb3J0c0tleSIsICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNIYXNodGFibGUuaCIsIDE5NCk7CiAg
ICByZXR1cm4gKG1LZXkgPT0gKChuc0lTdXBwb3J0c0tleSAqKSBhS2V5KS0+bUtleSk7CiAgfQoK
ICBuc0hhc2hLZXkgKkNsb25lKCkgY29uc3QgewogICAgcmV0dXJuIG5ldyBuc0lTdXBwb3J0c0tl
eShtS2V5KTsKICB9Cn07CgoKCgpjbGFzcyBuc1ZvaWRLZXkgOiBwdWJsaWMgbnNIYXNoS2V5IHsK
cHJvdGVjdGVkOgogIHZvaWQqIG1LZXk7CgpwdWJsaWM6CiAgbnNWb2lkS2V5KHZvaWQqIGtleSkg
ewoKICAgIG1LZXlUeXBlID0gVm9pZEtleTsKCiAgICBtS2V5ID0ga2V5OwogIH0KCiAgUFJVaW50
MzIgSGFzaENvZGUodm9pZCkgY29uc3QgewogICAgcmV0dXJuIChQUlVpbnQzMiltS2V5OwogIH0K
CiAgUFJCb29sIEVxdWFscyhjb25zdCBuc0hhc2hLZXkgKmFLZXkpIGNvbnN0IHsKICAgIGlmICgh
KGFLZXktPkdldEtleVR5cGUoKSA9PSBWb2lkS2V5KSkgbnNEZWJ1Zzo6QXNzZXJ0aW9uKCJtaXNt
YXRjaGVkIGtleSB0eXBlcyIsICJhS2V5LT5HZXRLZXlUeXBlKCkgPT0gVm9pZEtleSIsICIuLi8u
Li9kaXN0L2luY2x1ZGUvbnNIYXNodGFibGUuaCIsIDIyMyk7CiAgICByZXR1cm4gKG1LZXkgPT0g
KChjb25zdCBuc1ZvaWRLZXkgKikgYUtleSktPm1LZXkpOwogIH0KCiAgbnNIYXNoS2V5ICpDbG9u
ZSgpIGNvbnN0IHsKICAgIHJldHVybiBuZXcgbnNWb2lkS2V5KG1LZXkpOwogIH0KCiAgdm9pZCog
R2V0VmFsdWUoKSB7IHJldHVybiBtS2V5OyB9Cn07CgoKCgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lELmgiIDEKIyAyMzggIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0hhc2h0YWJsZS5oIiAyCgpj
bGFzcyBuc0lES2V5IDogcHVibGljIG5zSGFzaEtleSB7CnByb3RlY3RlZDoKICBuc0lEIG1JRDsK
CnB1YmxpYzoKICBuc0lES2V5KGNvbnN0IG5zSUQgJmFJRCkgewoKICAgIG1LZXlUeXBlID0gSURL
ZXk7CgogICAgbUlEID0gYUlEOwogIH0KCiAgUFJVaW50MzIgSGFzaENvZGUodm9pZCkgY29uc3Qg
ewogICAgcmV0dXJuIG1JRC5tMDsKICB9CgogIFBSQm9vbCBFcXVhbHMoY29uc3QgbnNIYXNoS2V5
ICphS2V5KSBjb25zdCB7CiAgICBpZiAoIShhS2V5LT5HZXRLZXlUeXBlKCkgPT0gSURLZXkpKSBu
c0RlYnVnOjpBc3NlcnRpb24oIm1pc21hdGNoZWQga2V5IHR5cGVzIiwgImFLZXktPkdldEtleVR5
cGUoKSA9PSBJREtleSIsICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNIYXNodGFibGUuaCIsIDI1Nik7
CiAgICByZXR1cm4gKG1JRC5FcXVhbHMoKChjb25zdCBuc0lES2V5ICopIGFLZXkpLT5tSUQpKTsK
ICB9CgogIG5zSGFzaEtleSAqQ2xvbmUoKSBjb25zdCB7CiAgICByZXR1cm4gbmV3IG5zSURLZXko
bUlEKTsKICB9Cn07CgoKCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiIDEKIyAy
NjggIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0hhc2h0YWJsZS5oIiAyCgoKY2xhc3MgbnNDU3RyaW5n
S2V5IDogcHVibGljIG5zSGFzaEtleSB7CnB1YmxpYzoKCiAgZW51bSBPd25lcnNoaXAgewogICAg
TkVWRVJfT1dOLAogICAgT1dOX0NMT05FLAogICAgT1dOCiAgfTsKCiAgbnNDU3RyaW5nS2V5KGNv
bnN0IGNoYXIqIHN0ciwgUFJJbnQzMiBzdHJMZW4gPSAtMSwgT3duZXJzaGlwIG93biA9IE9XTl9D
TE9ORSk7CiAgbnNDU3RyaW5nS2V5KGNvbnN0IG5zQ1N0cmluZyYgc3RyKTsKICB+bnNDU3RyaW5n
S2V5KHZvaWQpOwoKICBQUlVpbnQzMiBIYXNoQ29kZSh2b2lkKSBjb25zdDsKICBQUkJvb2wgRXF1
YWxzKGNvbnN0IG5zSGFzaEtleSogYUtleSkgY29uc3Q7CiAgbnNIYXNoS2V5KiBDbG9uZSgpIGNv
bnN0OwoKCgogIGNvbnN0IGNoYXIqIEdldFN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1TdHI7IH0K
ICBQUlVpbnQzMiBHZXRTdHJpbmdMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtU3RyTGVuOyB9Cgpw
cm90ZWN0ZWQ6CiAgY2hhciogbVN0cjsKICBQUlVpbnQzMiBtU3RyTGVuOwogIE93bmVyc2hpcCBt
T3duZXJzaGlwOwp9OwoKCmNsYXNzIG5zU3RyaW5nS2V5IDogcHVibGljIG5zSGFzaEtleSB7CnB1
YmxpYzoKCiAgZW51bSBPd25lcnNoaXAgewogICAgTkVWRVJfT1dOLAogICAgT1dOX0NMT05FLAog
ICAgT1dOCiAgfTsKCiAgbnNTdHJpbmdLZXkoY29uc3QgUFJVbmljaGFyKiBzdHIsIFBSSW50MzIg
c3RyTGVuID0gLTEsIE93bmVyc2hpcCBvd24gPSBPV05fQ0xPTkUpOwogIG5zU3RyaW5nS2V5KGNv
bnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBzdHIpOwogIH5uc1N0cmluZ0tleSh2b2lkKTsKCiAgUFJV
aW50MzIgSGFzaENvZGUodm9pZCkgY29uc3Q7CiAgUFJCb29sIEVxdWFscyhjb25zdCBuc0hhc2hL
ZXkqIGFLZXkpIGNvbnN0OwogIG5zSGFzaEtleSogQ2xvbmUoKSBjb25zdDsKCgoKICBjb25zdCBQ
UlVuaWNoYXIqIEdldFN0cmluZygpIGNvbnN0IHsgcmV0dXJuIG1TdHI7IH0KICBQUlVpbnQzMiBH
ZXRTdHJpbmdMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtU3RyTGVuOyB9Cgpwcm90ZWN0ZWQ6CiAg
UFJVbmljaGFyKiBtU3RyOwogIFBSVWludDMyIG1TdHJMZW47CiAgT3duZXJzaGlwIG1Pd25lcnNo
aXA7Cn07CgoKY2xhc3MgbnNPcGFxdWVLZXkgOiBwdWJsaWMgbnNIYXNoS2V5IHsKcHVibGljOgoK
ICBlbnVtIE93bmVyc2hpcCB7CiAgICBORVZFUl9PV04sCiAgICBPV05fQ0xPTkUsCiAgICBPV04K
ICB9OwoKICBuc09wYXF1ZUtleShjb25zdCBjaGFyKiBidWYsIFBSVWludDMyIGJ1ZkxlbiwgT3du
ZXJzaGlwIG93biA9IE9XTl9DTE9ORSk7CiAgfm5zT3BhcXVlS2V5KHZvaWQpOwoKICBQUlVpbnQz
MiBIYXNoQ29kZSh2b2lkKSBjb25zdDsKICBQUkJvb2wgRXF1YWxzKGNvbnN0IG5zSGFzaEtleSog
YUtleSkgY29uc3Q7CiAgbnNIYXNoS2V5KiBDbG9uZSgpIGNvbnN0OwoKCgogIGNvbnN0IGNoYXIq
IEdldEJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1CdWY7IH0KICBQUlVpbnQzMiBHZXRCdWZmZXJM
ZW5ndGgoKSBjb25zdCB7IHJldHVybiBtQnVmTGVuOyB9Cgpwcm90ZWN0ZWQ6CiAgY2hhciogbUJ1
ZjsKICBQUlVpbnQzMiBtQnVmTGVuOwogIE93bmVyc2hpcCBtT3duZXJzaGlwOwp9OwojIDQxICJu
c0luc3RhbGwuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIiAxCiMgNDIg
Im5zSW5zdGFsbC5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxvY2FsRmlsZS5oIiAx
CiMgNDMgIm5zSW5zdGFsbC5oIiAyCgojIDEgIm5zU29mdHdhcmVVcGRhdGUuaCIgMQoKCgoKIyAx
ICIuLi9wdWJsaWMvbnNTb2Z0d2FyZVVwZGF0ZUlJRHMuaCIgMQojIDYgIm5zU29mdHdhcmVVcGRh
dGUuaCIgMgojIDEgIi4uL3B1YmxpYy9uc0lTb2Z0d2FyZVVwZGF0ZS5oIiAxCiMgMjkgIi4uL3B1
YmxpYy9uc0lTb2Z0d2FyZVVwZGF0ZS5oIgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBw
b3J0cy5oIiAxCiMgMzAgIi4uL3B1YmxpYy9uc0lTb2Z0d2FyZVVwZGF0ZS5oIiAyCiMgMSAiLi4v
Li4vZGlzdC9pbmNsdWRlL25zSUZhY3RvcnkuaCIgMQojIDMxICIuLi9wdWJsaWMvbnNJU29mdHdh
cmVVcGRhdGUuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIiAxCiMgMzIg
Ii4uL3B1YmxpYy9uc0lTb2Z0d2FyZVVwZGF0ZS5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRl
L25zSUZpbGVTcGVjLmgiIDEKIyAxNyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZpbGVTcGVjLmgi
CiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zRmlsZVNwZWMuaCIgMQojIDE4ICIuLi8uLi9kaXN0
L2luY2x1ZGUvbnNJRmlsZVNwZWMuaCIgMgpjbGFzcyBuc0lGaWxlVVJMOwoKY2xhc3MgbnNJRmls
ZVBhdGg7CgpjbGFzcyBuc0lPdXRwdXRTdHJlYW07CgpjbGFzcyBuc0lJbnB1dFN0cmVhbTsKIyA0
MiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZpbGVTcGVjLmgiCmNsYXNzIG5zSUZpbGVTcGVjIDog
cHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJ
SUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGQ4YzBhMDgwLCAweDA4NjgsIDB4MTFk
MywgeyAweDkxLCAweDVmLCAweGQ5LCAweGQ4LCAweDg5LCAweGQ0LCAweDhlLCAweDNjIH19OyBy
ZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgRnJvbUZpbGVTcGVjKGNvbnN0IG5zSUZp
bGVTcGVjICpvcmlnaW5hbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRVUkxTdHJpbmco
Y2hhciAqICphVVJMU3RyaW5nKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRVUkxTdHJpbmco
Y29uc3QgY2hhciAqIGFVUkxTdHJpbmcpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VW5p
eFN0eWxlRmlsZVBhdGgoY2hhciAqICphVW5peFN0eWxlRmlsZVBhdGgpID0gMDsKICB2aXJ0dWFs
IG5zcmVzdWx0IFNldFVuaXhTdHlsZUZpbGVQYXRoKGNvbnN0IGNoYXIgKiBhVW5peFN0eWxlRmls
ZVBhdGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGVyc2lzdGVudERlc2NyaXB0b3JT
dHJpbmcoY2hhciAqICphUGVyc2lzdGVudERlc2NyaXB0b3JTdHJpbmcpID0gMDsKICB2aXJ0dWFs
IG5zcmVzdWx0IFNldFBlcnNpc3RlbnREZXNjcmlwdG9yU3RyaW5nKGNvbnN0IGNoYXIgKiBhUGVy
c2lzdGVudERlc2NyaXB0b3JTdHJpbmcpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmF0
aXZlUGF0aChjaGFyICogKmFOYXRpdmVQYXRoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRO
YXRpdmVQYXRoKGNvbnN0IGNoYXIgKiBhTmF0aXZlUGF0aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXROU1BSUGF0aChjaGFyICogKmFOU1BSUGF0aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBFcnJvcih2b2lkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzVmFsaWQoUFJCb29s
ICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEZhaWxlZChQUkJvb2wgKl9yZXR2
YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGVhZk5hbWUoY2hhciAqICphTGVhZk5h
bWUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldExlYWZOYW1lKGNvbnN0IGNoYXIgKiBhTGVh
Zk5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGFyZW50KG5zSUZpbGVTcGVjICog
KmFQYXJlbnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SW5wdXRTdHJlYW0obnNJSW5w
dXRTdHJlYW0gKiAqYUlucHV0U3RyZWFtKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE91
dHB1dFN0cmVhbShuc0lPdXRwdXRTdHJlYW0gKiAqYU91dHB1dFN0cmVhbSkgPSAwOwoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBJc0NoaWxkT2YobnNJRmlsZVNwZWMgKnBvc3NpYmxlUGFyZW50LCBQUkJv
b2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RmlsZVNwZWMobnNGaWxl
U3BlYyAqYUZpbGVTcGVjKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEZyb21GaWxlU3Bl
Yyhjb25zdCBuc0ZpbGVTcGVjICYgc3BlYykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRG
aWxlQ29udGVudHMoY2hhciAqICphRmlsZUNvbnRlbnRzKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs
dCBTZXRGaWxlQ29udGVudHMoY29uc3QgY2hhciAqIGFGaWxlQ29udGVudHMpID0gMDsKCgogIHZp
cnR1YWwgbnNyZXN1bHQgTWFrZVVuaXF1ZSh2b2lkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0
IE1ha2VVbmlxdWVXaXRoU3VnZ2VzdGVkTmFtZShjb25zdCBjaGFyICpzdWdnZXN0ZWROYW1lKSA9
IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1vZERhdGUoUFJVaW50MzIgKmFNb2REYXRlKSA9
IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IE1vZERhdGVDaGFuZ2VkKFBSVWludDMyIG9sZFN0YW1w
LCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNEaXJlY3Rvcnko
UFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzRmlsZShQUkJvb2wg
Kl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRXhpc3RzKFBSQm9vbCAqX3JldHZh
bCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc0hpZGRlbihQUkJvb2wgKl9yZXR2YWwpID0g
MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRXF1YWxzKG5zSUZpbGVTcGVjICpzcGVjLCBQUkJvb2wg
Kl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RmlsZVNpemUoUFJVaW50MzIg
KmFGaWxlU2l6ZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREaXNrU3BhY2VBdmFpbGFi
bGUoUFJJbnQ2NCAqYURpc2tTcGFjZUF2YWlsYWJsZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBBcHBlbmRSZWxhdGl2ZVVuaXhQYXRoKGNvbnN0IGNoYXIgKnJlbGF0aXZlUGF0aCkgPSAwOwoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVEaXIodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBUb3VjaCh2b2lkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzU3ltbGluayhQUkJv
b2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVzb2x2ZVN5bWxpbmsodm9p
ZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEZWxldGUoUFJCb29sIHJlY3Vyc2l2ZSkgPSAw
OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBUcnVuY2F0ZShQUkludDMyIGFOZXdMZW5ndGgpID0gMDsK
CgogIHZpcnR1YWwgbnNyZXN1bHQgUmVuYW1lKGNvbnN0IGNoYXIgKm5ld0xlYWZOYW1lKSA9IDA7
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENvcHlUb0Rpcihjb25zdCBuc0lGaWxlU3BlYyAqbmV3UGFy
ZW50RGlyKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IE1vdmVUb0Rpcihjb25zdCBuc0lGaWxl
U3BlYyAqbmV3UGFyZW50RGlyKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEV4ZWN1dGUoY29u
c3QgY2hhciAqYXJncykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBPcGVuU3RyZWFtRm9yUmVh
ZGluZyh2b2lkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IE9wZW5TdHJlYW1Gb3JXcml0aW5n
KHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgT3BlblN0cmVhbUZvclJlYWRpbmdBbmRX
cml0aW5nKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2xvc2VTdHJlYW0odm9pZCkg
PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1N0cmVhbU9wZW4oUFJCb29sICpfcmV0dmFsKSA9
IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEVvZihQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZp
cnR1YWwgbnNyZXN1bHQgUmVhZChjaGFyICoqYnVmZmVyLCBQUkludDMyIHJlcXVlc3RlZENvdW50
LCBQUkludDMyICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlYWRMaW5lKGNo
YXIgKipsaW5lLCBQUkludDMyIGJ1ZmZlclNpemUsIFBSQm9vbCAqd2FzVHJ1bmNhdGVkKSA9IDA7
CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBXcml0ZShjb25zdCBjaGFyICpkYXRhLCBQUkludDMy
IHJlcXVlc3RlZENvdW50LCBQUkludDMyICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz
dWx0IEZsdXNoKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2VlayhQUkludDMyIG9m
ZnNldCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBUZWxsKFBSSW50MzIgKl9yZXR2YWwpID0g
MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRW5kTGluZSh2b2lkKSA9IDA7Cgp9OwojIDc3OSAiLi4v
Li4vZGlzdC9pbmNsdWRlL25zSUZpbGVTcGVjLmgiCmNsYXNzIG5zSURpcmVjdG9yeUl0ZXJhdG9y
IDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBH
ZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGQ4YzBhMDgzLCAweDA4NjgsIDB4
MTFkMywgeyAweDkxLCAweDVmLCAweGQ5LCAweGQ4LCAweDg5LCAweGQ0LCAweDhlLCAweDNjIH19
OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdChuc0lGaWxlU3BlYyAqcGFy
ZW50LCBQUkJvb2wgcmVzb2x2ZVN5bWxpbmspID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRXhp
c3RzKFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBOZXh0KHZvaWQp
ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q3VycmVudFNwZWMobnNJRmlsZVNwZWMgKiAq
YUN1cnJlbnRTcGVjKSA9IDA7Cgp9OwojIDg3NiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZpbGVT
cGVjLmgiCiAgICAgICBuc3Jlc3VsdCBOU19OZXdGaWxlU3BlY1dpdGhTcGVjKGNvbnN0IG5zRmls
ZVNwZWMmIGFTcmNGaWxlU3BlYywgbnNJRmlsZVNwZWMgKipyZXN1bHQpOwogICAgICAgbnNyZXN1
bHQgTlNfTmV3RmlsZVNwZWMobnNJRmlsZVNwZWMqKiByZXN1bHQpOwogICAgICAgbnNyZXN1bHQg
TlNfTmV3RGlyZWN0b3J5SXRlcmF0b3IobnNJRGlyZWN0b3J5SXRlcmF0b3IqKiByZXN1bHQpOwoK
aW5saW5lIFBSQm9vbCBFeGlzdHMobnNJRmlsZVNwZWMqIGYpIHsgUFJCb29sIHllczsgcmV0dXJu
ICghKChmLT5FeGlzdHMoJnllcykpICYgMHg4MDAwMDAwMCkpICYmIHllczsgfQppbmxpbmUgUFJC
b29sIEV4aXN0cyhuc0lEaXJlY3RvcnlJdGVyYXRvciogZikgeyBQUkJvb2wgeWVzOyByZXR1cm4g
KCEoKGYtPkV4aXN0cygmeWVzKSkgJiAweDgwMDAwMDAwKSkgJiYgeWVzOyB9CmlubGluZSBQUkJv
b2wgSXNEaXJlY3RvcnkobnNJRmlsZVNwZWMqIGYpIHsgUFJCb29sIHllczsgcmV0dXJuICghKChm
LT5Jc0RpcmVjdG9yeSgmeWVzKSkgJiAweDgwMDAwMDAwKSkgJiYgeWVzOyB9CiMgMzMgIi4uL3B1
YmxpYy9uc0lTb2Z0d2FyZVVwZGF0ZS5oIiAyCgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lY
UElOb3RpZmllci5oIiAxCiMgMjUgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lYUElOb3RpZmllci5o
IgpjbGFzcyBuc0lYUElMaXN0ZW5lciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6Cgog
IHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7
MHhlZWE5MGQ0MCwgMHhiMDU5LCAweDExZDIsIHsgMHg5MSwgMHg1ZSwgMHhjMSwgMHgyYiwgMHg2
OSwgMHg2YywgMHg5MywgMHgzMyB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0
IEJlZm9yZUphdmFzY3JpcHRFdmFsdWF0aW9uKGNvbnN0IFBSVW5pY2hhciAqVVJMKSA9IDA7CgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IEFmdGVySmF2YXNjcmlwdEV2YWx1YXRpb24oY29uc3QgUFJVbmlj
aGFyICpVUkwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5zdGFsbFN0YXJ0ZWQoY29uc3Qg
UFJVbmljaGFyICpVUkwsIGNvbnN0IFBSVW5pY2hhciAqVUlQYWNrYWdlTmFtZSkgPSAwOwoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBJdGVtU2NoZWR1bGVkKGNvbnN0IFBSVW5pY2hhciAqbWVzc2FnZSkg
PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGaW5hbGl6ZVByb2dyZXNzKGNvbnN0IFBSVW5pY2hh
ciAqbWVzc2FnZSwgUFJJbnQzMiBpdGVtTnVtLCBQUkludDMyIHRvdE51bSkgPSAwOwoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBGaW5hbFN0YXR1cyhjb25zdCBQUlVuaWNoYXIgKlVSTCwgUFJJbnQzMiBz
dGF0dXMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgTG9nQ29tbWVudChjb25zdCBQUlVuaWNo
YXIgKmNvbW1lbnQpID0gMDsKCn07CiMgMzUgIi4uL3B1YmxpYy9uc0lTb2Z0d2FyZVVwZGF0ZS5o
IiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiIDEKIyAzNiAiLi4vcHVibGlj
L25zSVNvZnR3YXJlVXBkYXRlLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJTW9kdWxl
LmgiIDEKIyAzNyAiLi4vcHVibGljL25zSVNvZnR3YXJlVXBkYXRlLmgiIDIKIyAxICIuLi8uLi9k
aXN0L2luY2x1ZGUvbnNJR2VuZXJpY0ZhY3RvcnkuaCIgMQojIDM4ICIuLi9wdWJsaWMvbnNJU29m
dHdhcmVVcGRhdGUuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01XaW5kb3dJbnRl
cm5hbC5oIiAxCiMgMTAgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01XaW5kb3dJbnRlcm5hbC5o
IgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lET01XaW5kb3cuaCIgMQojIDEwICIuLi8uLi9k
aXN0L2luY2x1ZGUvbnNJRE9NV2luZG93LmgiCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL2RvbXN0
dWJzLmgiIDEKIyAxNyAiLi4vLi4vZGlzdC9pbmNsdWRlL2RvbXN0dWJzLmgiCiMgMSAiLi4vLi4v
ZGlzdC9pbmNsdWRlL25zQVdyaXRhYmxlU3RyaW5nLmgiIDEKIyAxOCAiLi4vLi4vZGlzdC9pbmNs
dWRlL2RvbXN0dWJzLmgiIDIKaW5saW5lIFBSQm9vbCBET01TdHJpbmdJc051bGwoY29uc3QgbnNB
UmVhZGFibGVTdHJpbmcmIGFTdHJpbmcpCnsKCiAgcmV0dXJuIDA7Cn0KaW5saW5lIHZvaWQgU2V0
RE9NU3RyaW5nVG9OdWxsKG5zQVdyaXRhYmxlU3RyaW5nJiBhU3RyaW5nKQp7CiAgYVN0cmluZy5U
cnVuY2F0ZSgpOwoKfQp0eXBlZGVmIFBSVWludDY0IERPTVRpbWVTdGFtcDsKCmNsYXNzIG5zSURP
TUF0dHI7CgpjbGFzcyBuc0lET01DREFUQVNlY3Rpb247CgpjbGFzcyBuc0lET01DaGFyYWN0ZXJE
YXRhOwoKY2xhc3MgbnNJRE9NQ29tbWVudDsKCmNsYXNzIG5zSURPTURPTUltcGxlbWVudGF0aW9u
OwoKY2xhc3MgbnNJRE9NRG9jdW1lbnQ7CgpjbGFzcyBuc0lET01Eb2N1bWVudEZyYWdtZW50OwoK
Y2xhc3MgbnNJRE9NRG9jdW1lbnRUeXBlOwoKY2xhc3MgbnNJRE9NRWxlbWVudDsKCmNsYXNzIG5z
SURPTUVudGl0eTsKCmNsYXNzIG5zSURPTUVudGl0eVJlZmVyZW5jZTsKCmNsYXNzIG5zSURPTU5T
RG9jdW1lbnQ7CgpjbGFzcyBuc0lET01OYW1lZE5vZGVNYXA7CgpjbGFzcyBuc0lET01Ob2RlOwoK
Y2xhc3MgbnNJRE9NTm9kZUxpc3Q7CgpjbGFzcyBuc0lET01Ob3RhdGlvbjsKCmNsYXNzIG5zSURP
TVByb2Nlc3NpbmdJbnN0cnVjdGlvbjsKCmNsYXNzIG5zSURPTVRleHQ7CgpjbGFzcyBET01FeGNl
cHRpb247CgpjbGFzcyBuc0lET01TdHlsZVNoZWV0TGlzdDsKCmNsYXNzIG5zSURPTUxpbmtTdHls
ZTsKCmNsYXNzIG5zSURPTVN0eWxlU2hlZXQ7CgpjbGFzcyBuc0lET01NZWRpYUxpc3Q7CgpjbGFz
cyBuc0lET01BYnN0cmFjdFZpZXc7CgpjbGFzcyBuc0lET01Eb2N1bWVudFZpZXc7CgpjbGFzcyBu
c0lET01XaW5kb3c7CgpjbGFzcyBuc0lET01XaW5kb3dJbnRlcm5hbDsKCmNsYXNzIG5zSURPTVdp
bmRvd0NvbGxlY3Rpb247CgpjbGFzcyBuc0lET01QbHVnaW47CgpjbGFzcyBuc0lET01QbHVnaW5B
cnJheTsKCmNsYXNzIG5zSURPTU1pbWVUeXBlOwoKY2xhc3MgbnNJRE9NTWltZVR5cGVBcnJheTsK
CmNsYXNzIG5zSURPTUJhclByb3A7CgpjbGFzcyBuc0lET01OYXZpZ2F0b3I7CgpjbGFzcyBuc0lE
T01TY3JlZW47CgpjbGFzcyBuc0lET01IaXN0b3J5OwoKY2xhc3MgbnNJRE9NRXZlbnQ7CgpjbGFz
cyBuc0lET01FdmVudFRhcmdldDsKCmNsYXNzIG5zSURPTUV2ZW50TGlzdGVuZXI7CgpjbGFzcyBu
c0lET01IVE1MRWxlbWVudDsKCmNsYXNzIG5zSURPTUhUTUxGb3JtRWxlbWVudDsKCmNsYXNzIG5z
SURPTUhUTUxDb2xsZWN0aW9uOwoKY2xhc3MgbnNJRE9NQ1NTVmFsdWU7CgpjbGFzcyBuc0lET01D
U1NQcmltaXRpdmVWYWx1ZTsKCmNsYXNzIG5zSURPTUNTU1J1bGU7CgpjbGFzcyBuc0lET01DU1NS
dWxlTGlzdDsKCmNsYXNzIG5zSURPTUNTU1N0eWxlU2hlZXQ7CgpjbGFzcyBuc0lET01DU1NTdHls
ZURlY2xhcmF0aW9uOwoKY2xhc3MgbnNJRE9NQ291bnRlcjsKCmNsYXNzIG5zSURPTVJlY3Q7Cgpj
bGFzcyBuc0lET01SR0JDb2xvcjsKCmNsYXNzIG5zSURPTUNTU1N0eWxlUnVsZTsKCmNsYXNzIG5z
SURPTUNTU1N0eWxlUnVsZUNvbGxlY3Rpb247CgpjbGFzcyBuc0lET01IVE1MVGFibGVDYXB0aW9u
RWxlbWVudDsKCmNsYXNzIG5zSURPTUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OwoKY2xhc3MgbnNJ
RE9NUmFuZ2U7CgpjbGFzcyBuc0lET01DUk1GT2JqZWN0OwoKY2xhc3MgbnNJRE9NQ3J5cHRvOwoK
Y2xhc3MgbnNJRE9NUGtjczExOwojIDExICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRE9NV2luZG93
LmgiIDIKCgoKCgoKY2xhc3MgbnNJU2VsZWN0aW9uOwojIDI3ICIuLi8uLi9kaXN0L2luY2x1ZGUv
bnNJRE9NV2luZG93LmgiCmNsYXNzIG5zSURPTVdpbmRvdyA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7
CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBu
c0lJRCBpaWQgPSB7MHhhNmNmOTA2YiwgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgw
MCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldERvY3VtZW50KG5zSURPTURvY3VtZW50ICogKmFEb2N1bWVudCkgPSAw
OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXJlbnQobnNJRE9NV2luZG93ICogKmFQYXJlbnQp
ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VG9wKG5zSURPTVdpbmRvdyAqICphVG9wKSA9
IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNjcm9sbGJhcnMobnNJRE9NQmFyUHJvcCAqICph
U2Nyb2xsYmFycykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGcmFtZXMobnNJRE9NV2lu
ZG93Q29sbGVjdGlvbiAqICphRnJhbWVzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5h
bWUobnNBV3JpdGFibGVTdHJpbmcgJiBhTmFtZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0
TmFtZShjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAmIGFOYW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldFNjcm9sbFgoUFJJbnQzMiAqYVNjcm9sbFgpID0gMDsKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0U2Nyb2xsWShQUkludDMyICphU2Nyb2xsWSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBTY3JvbGxUbyhQUkludDMyIHhTY3JvbGwsIFBSSW50MzIgeVNjcm9sbCkgPSAwOwoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBTY3JvbGxCeShQUkludDMyIHhTY3JvbGxEaWYsIFBSSW50MzIgeVNj
cm9sbERpZikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTZWxlY3Rpb24obnNJU2VsZWN0
aW9uICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTY3JvbGxCeUxpbmVzKFBS
SW50MzIgbnVtTGluZXMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2Nyb2xsQnlQYWdlcyhQ
UkludDMyIG51bVBhZ2VzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNpemVUb0NvbnRlbnQo
dm9pZCkgPSAwOwoKfTsKIyAxMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSURPTVdpbmRvd0ludGVy
bmFsLmgiIDIKCgoKCgoKY2xhc3MgbnNJU2lkZWJhcjsKCmNsYXNzIG5zSVByb21wdDsKCmNsYXNz
IG5zSUNvbnRyb2xsZXJzOwoKY2xhc3MgbnNJRE9NTG9jYXRpb247CiMgMzMgIi4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lET01XaW5kb3dJbnRlcm5hbC5oIgpjbGFzcyBuc0lET01XaW5kb3dJbnRlcm5h
bCA6IHB1YmxpYyBuc0lET01XaW5kb3cgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQm
IEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4OWM5MTE4NjAsIDB4N2RkOSwg
MHgxMWQ0LCB7IDB4OWEsIDB4ODMsIDB4MDAsIDB4MDAsIDB4NjQsIDB4NjUsIDB4NzMsIDB4NzQg
fX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRXaW5kb3cobnNJRE9NV2lu
ZG93SW50ZXJuYWwgKiAqYVdpbmRvdykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTZWxm
KG5zSURPTVdpbmRvd0ludGVybmFsICogKmFTZWxmKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0
IEdldE5hdmlnYXRvcihuc0lET01OYXZpZ2F0b3IgKiAqYU5hdmlnYXRvcikgPSAwOwoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBHZXRTY3JlZW4obnNJRE9NU2NyZWVuICogKmFTY3JlZW4pID0gMDsKCgog
IHZpcnR1YWwgbnNyZXN1bHQgR2V0SGlzdG9yeShuc0lET01IaXN0b3J5ICogKmFIaXN0b3J5KSA9
IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbnRlbnQobnNJRE9NV2luZG93ICogKmFDb250
ZW50KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNpZGViYXIobnNJU2lkZWJhciAqICph
U2lkZWJhcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcm9tcHRlcihuc0lQcm9tcHQg
KiAqYVByb21wdGVyKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1lbnViYXIobnNJRE9N
QmFyUHJvcCAqICphTWVudWJhcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUb29sYmFy
KG5zSURPTUJhclByb3AgKiAqYVRvb2xiYXIpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
TG9jYXRpb25iYXIobnNJRE9NQmFyUHJvcCAqICphTG9jYXRpb25iYXIpID0gMDsKCgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0UGVyc29uYWxiYXIobnNJRE9NQmFyUHJvcCAqICphUGVyc29uYWxiYXIp
ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3RhdHVzYmFyKG5zSURPTUJhclByb3AgKiAq
YVN0YXR1c2JhcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREaXJlY3Rvcmllcyhuc0lE
T01CYXJQcm9wICogKmFEaXJlY3RvcmllcykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRD
bG9zZWQoUFJCb29sICphQ2xvc2VkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENyeXB0
byhuc0lET01DcnlwdG8gKiAqYUNyeXB0bykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQ
a2NzMTEobnNJRE9NUGtjczExICogKmFQa2NzMTEpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0Q29udHJvbGxlcnMobnNJQ29udHJvbGxlcnMgKiAqYUNvbnRyb2xsZXJzKSA9IDA7CgoKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldE9wZW5lcihuc0lET01XaW5kb3dJbnRlcm5hbCAqICphT3BlbmVy
KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRPcGVuZXIobnNJRE9NV2luZG93SW50ZXJuYWwg
KiBhT3BlbmVyKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN0YXR1cyhuc0FXcml0YWJs
ZVN0cmluZyAmIGFTdGF0dXMpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFN0YXR1cyhjb25z
dCBuc0FSZWFkYWJsZVN0cmluZyAmIGFTdGF0dXMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0RGVmYXVsdFN0YXR1cyhuc0FXcml0YWJsZVN0cmluZyAmIGFEZWZhdWx0U3RhdHVzKSA9IDA7
CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREZWZhdWx0U3RhdHVzKGNvbnN0IG5zQVJlYWRhYmxlU3Ry
aW5nICYgYURlZmF1bHRTdGF0dXMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TG9jYXRp
b24obnNJRE9NTG9jYXRpb24gKiAqYUxvY2F0aW9uKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0
IEdldFRpdGxlKG5zQVdyaXRhYmxlU3RyaW5nICYgYVRpdGxlKSA9IDA7CiAgdmlydHVhbCBuc3Jl
c3VsdCBTZXRUaXRsZShjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAmIGFUaXRsZSkgPSAwOwoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRJbm5lcldpZHRoKFBSSW50MzIgKmFJbm5lcldpZHRoKSA9IDA7
CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRJbm5lcldpZHRoKFBSSW50MzIgYUlubmVyV2lkdGgpID0g
MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SW5uZXJIZWlnaHQoUFJJbnQzMiAqYUlubmVySGVp
Z2h0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRJbm5lckhlaWdodChQUkludDMyIGFJbm5l
ckhlaWdodCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRPdXRlcldpZHRoKFBSSW50MzIg
KmFPdXRlcldpZHRoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRPdXRlcldpZHRoKFBSSW50
MzIgYU91dGVyV2lkdGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0T3V0ZXJIZWlnaHQo
UFJJbnQzMiAqYU91dGVySGVpZ2h0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRPdXRlckhl
aWdodChQUkludDMyIGFPdXRlckhlaWdodCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRT
Y3JlZW5YKFBSSW50MzIgKmFTY3JlZW5YKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTY3Jl
ZW5YKFBSSW50MzIgYVNjcmVlblgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2NyZWVu
WShQUkludDMyICphU2NyZWVuWSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0U2NyZWVuWShQ
UkludDMyIGFTY3JlZW5ZKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBhZ2VYT2Zmc2V0
KFBSSW50MzIgKmFQYWdlWE9mZnNldCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYWdl
WU9mZnNldChQUkludDMyICphUGFnZVlPZmZzZXQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0TGVuZ3RoKFBSVWludDMyICphTGVuZ3RoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEFs
ZXJ0KGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nICYgdGV4dCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBDb25maXJtKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nICYgdGV4dCwgUFJCb29sICpfcmV0
dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFByb21wdChjb25zdCBuc0FSZWFkYWJsZVN0
cmluZyAmIGFNZXNzYWdlLCBjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAmIGFJbml0aWFsLCBjb25z
dCBuc0FSZWFkYWJsZVN0cmluZyAmIGFUaXRsZSwgUFJVaW50MzIgYVNhdmVQYXNzd29yZCwgbnNB
V3JpdGFibGVTdHJpbmcgJiBfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEZvY3Vz
KHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQmx1cih2b2lkKSA9IDA7CgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEJhY2sodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGb3J3YXJk
KHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSG9tZSh2b2lkKSA9IDA7CgoKICB2aXJ0
dWFsIG5zcmVzdWx0IFN0b3Aodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBQcmludCh2
b2lkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IE1vdmVUbyhQUkludDMyIHhQb3MsIFBSSW50
MzIgeVBvcykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBNb3ZlQnkoUFJJbnQzMiB4RGlmLCBQ
UkludDMyIHlEaWYpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVzaXplVG8oUFJJbnQzMiB3
aWR0aCwgUFJJbnQzMiBoZWlnaHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVzaXplQnko
UFJJbnQzMiB3aWR0aERpZiwgUFJJbnQzMiBoZWlnaHREaWYpID0gMDsKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0QXR0ZW50aW9uKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2Nyb2xs
KFBSSW50MzIgeFNjcm9sbCwgUFJJbnQzMiB5U2Nyb2xsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz
dWx0IENsZWFyVGltZW91dChQUkludDMyIHRpbWVySUQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1
bHQgQ2xlYXJJbnRlcnZhbChQUkludDMyIHRpbWVySUQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1
bHQgU2V0Q3Vyc29yKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nICYgY3Vyc29yKSA9IDA7CgoKICB2
aXJ0dWFsIG5zcmVzdWx0IE9wZW4oY29uc3QgbnNBUmVhZGFibGVTdHJpbmcgJiB1cmwsIGNvbnN0
IG5zQVJlYWRhYmxlU3RyaW5nICYgbmFtZSwgY29uc3QgbnNBUmVhZGFibGVTdHJpbmcgJiBvcHRp
b25zLCBuc0lET01XaW5kb3cgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IE9w
ZW5EaWFsb2coY29uc3QgbnNBUmVhZGFibGVTdHJpbmcgJiB1cmwsIGNvbnN0IG5zQVJlYWRhYmxl
U3RyaW5nICYgbmFtZSwgY29uc3QgbnNBUmVhZGFibGVTdHJpbmcgJiBvcHRpb25zLCBuc0lTdXBw
b3J0cyAqYUV4dHJhQXJndW1lbnQsIG5zSURPTVdpbmRvdyAqKl9yZXR2YWwpID0gMDsKCgogIHZp
cnR1YWwgbnNyZXN1bHQgQ2xvc2Uodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBVcGRh
dGVDb21tYW5kcyhjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAmIGFjdGlvbikgPSAwOwoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBFc2NhcGUoY29uc3QgbnNBUmVhZGFibGVTdHJpbmcgJiBzdHIsIG5zQVdy
aXRhYmxlU3RyaW5nICYgX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBVbmVzY2Fw
ZShjb25zdCBuc0FSZWFkYWJsZVN0cmluZyAmIHN0ciwgbnNBV3JpdGFibGVTdHJpbmcgJiBfcmV0
dmFsKSA9IDA7Cgp9OwojIDM5ICIuLi9wdWJsaWMvbnNJU29mdHdhcmVVcGRhdGUuaCIgMgojIDYw
ICIuLi9wdWJsaWMvbnNJU29mdHdhcmVVcGRhdGUuaCIKY2xhc3MgbnNJU29mdHdhcmVVcGRhdGUg
OiBwdWJsaWMgbnNJU3VwcG9ydHMKewogICAgcHVibGljOgogICAgICAgICAgICAgICAgc3RhdGlj
IGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHgxOGMy
Zjk5MiwgMHhiMDlmLCAweDExZDIsIHsweGJjLCAweGRlLCAweDAwLCAweDgwLCAweDVmLCAweDBl
LCAweDEzLCAweDUzfX07IHJldHVybiBpaWQ7fQoKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3Vs
dCBJbnN0YWxsSmFyKG5zSUZpbGUqIGxvY2FsRmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFBSVW5pY2hhciogVVJMLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgUFJVbmljaGFyKiBhcmd1bWVudHMsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0lET01XaW5kb3dJbnRlcm5hbCogYVBhcmVudFdpbmRvdywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGZsYWdzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNJWFBJTGlzdGVuZXIqIGFMaXN0ZW5lciA9IDApID0gMDsK
CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgSW5zdGFsbENocm9tZShQUlVpbnQzMiBhVHlw
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZpbGUqIGFGaWxlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUFJVbmljaGFyKiBVUkws
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQUlVuaWNoYXIqIGFO
YW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFTZWxlY3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lYUElMaXN0ZW5lciogYUxp
c3RlbmVyID0gMCkgPSAwOwoKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBSZWdpc3Rlckxp
c3RlbmVyKG5zSVhQSUxpc3RlbmVyICphTGlzdGVuZXIpID0gMDsKCgogICAgICAgICAgICB2aXJ0
dWFsIG5zcmVzdWx0IEluc3RhbGxKYXJDYWxsQmFjaygpID0gMDsKICAgICAgICAgICAgdmlydHVh
bCBuc3Jlc3VsdCBHZXRNYXN0ZXJMaXN0ZW5lcihuc0lYUElMaXN0ZW5lciAqKmFMaXN0ZW5lcikg
PSAwOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFjdGl2ZUxpc3RlbmVyKG5zSVhQ
SUxpc3RlbmVyICphTGlzdGVuZXIpID0gMDsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBT
dGFydHVwVGFza3MoIFBSQm9vbCogb3V0QXV0b3JlZyApID0gMDsKfTsKCgoKY2xhc3MgbnNTb2Z0
d2FyZVVwZGF0ZU1vZHVsZSA6IHB1YmxpYyBuc0lNb2R1bGUKewpwdWJsaWM6CiAgICBuc1NvZnR3
YXJlVXBkYXRlTW9kdWxlKCk7CiAgICB2aXJ0dWFsIH5uc1NvZnR3YXJlVXBkYXRlTW9kdWxlKCk7
CgogICAgcHVibGljOiB2aXJ0dWFsIG5zcmVzdWx0IFF1ZXJ5SW50ZXJmYWNlKGNvbnN0IG5zSUlE
JiBhSUlELCB2b2lkKiogYUluc3RhbmNlUHRyKTsgdmlydHVhbCBuc3JlZmNudCBBZGRSZWYodm9p
ZCk7IHZpcnR1YWwgbnNyZWZjbnQgUmVsZWFzZSh2b2lkKTsgcHJvdGVjdGVkOiBuc3JlZmNudCBt
UmVmQ250OyB2b2lkKiBfbU93bmluZ1RocmVhZDsgcHVibGljOgoKICAgIHZpcnR1YWwgbnNyZXN1
bHQgR2V0Q2xhc3NPYmplY3QobnNJQ29tcG9uZW50TWFuYWdlciAqYUNvbXBNZ3IsIGNvbnN0IG5z
Q0lEICYgYUNsYXNzLCBjb25zdCBuc0lJRCAmIGFJSUQsIHZvaWQgKiAqcmVzdWx0KTsgdmlydHVh
bCBuc3Jlc3VsdCBSZWdpc3RlclNlbGYobnNJQ29tcG9uZW50TWFuYWdlciAqYUNvbXBNZ3IsIG5z
SUZpbGUgKmxvY2F0aW9uLCBjb25zdCBjaGFyICpyZWdpc3RyeUxvY2F0aW9uLCBjb25zdCBjaGFy
ICpjb21wb25lbnRUeXBlKTsgdmlydHVhbCBuc3Jlc3VsdCBVbnJlZ2lzdGVyU2VsZihuc0lDb21w
b25lbnRNYW5hZ2VyICphQ29tcE1nciwgbnNJRmlsZSAqbG9jYXRpb24sIGNvbnN0IGNoYXIgKnJl
Z2lzdHJ5TG9jYXRpb24pOyB2aXJ0dWFsIG5zcmVzdWx0IENhblVubG9hZChuc0lDb21wb25lbnRN
YW5hZ2VyICphQ29tcE1nciwgUFJCb29sICpfcmV0dmFsKTsKCnByb3RlY3RlZDoKICAgIG5zcmVz
dWx0IEluaXRpYWxpemUoKTsKCiAgICB2b2lkIFNodXRkb3duKCk7CgogICAgUFJCb29sIG1Jbml0
aWFsaXplZDsKICAgIG5zQ09NUHRyPG5zSUdlbmVyaWNGYWN0b3J5PiBtU29mdHdhcmVVcGRhdGVG
YWN0b3J5OwogICAgbnNDT01QdHI8bnNJR2VuZXJpY0ZhY3Rvcnk+IG1JbnN0YWxsVHJpZ2dlckZh
Y3Rvcnk7CiAgICBuc0NPTVB0cjxuc0lHZW5lcmljRmFjdG9yeT4gbUluc3RhbGxWZXJzaW9uRmFj
dG9yeTsKfTsKIyA3ICJuc1NvZnR3YXJlVXBkYXRlLmgiIDIKCiMgMSAiLi4vLi4vZGlzdC9pbmNs
dWRlL25zY29yZS5oIiAxCiMgOSAibnNTb2Z0d2FyZVVwZGF0ZS5oIiAyCiMgMSAiLi4vLi4vZGlz
dC9pbmNsdWRlL25zSUZhY3RvcnkuaCIgMQojIDEwICJuc1NvZnR3YXJlVXBkYXRlLmgiIDIKIyAx
ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMQojIDExICJuc1NvZnR3YXJlVXBk
YXRlLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIgMQojIDEyICJuc1Nv
ZnR3YXJlVXBkYXRlLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNWb2lkQXJyYXkuaCIg
MQojIDEzICJuc1NvZnR3YXJlVXBkYXRlLmgiIDIKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEv
ZGlzdC9pbmNsdWRlL25zcHIvcHJsb2NrLmgiIDEKIyAxNCAibnNTb2Z0d2FyZVVwZGF0ZS5oIiAy
CgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9OU1JlZy5oIiAxCiMgMTYgIm5zU29mdHdhcmVVcGRh
dGUuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIiAxCiMgMTcgIm5zU29m
dHdhcmVVcGRhdGUuaCIgMgoKY2xhc3MgbnNJbnN0YWxsSW5mbzsKCiMgMSAiLi4vLi4vZGlzdC9p
bmNsdWRlL25zSVNjcmlwdEV4dGVybmFsTmFtZVNldC5oIiAxCiMgMjYgIi4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lTY3JpcHRFeHRlcm5hbE5hbWVTZXQuaCIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUv
bnNJU3VwcG9ydHMuaCIgMQojIDI3ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2NyaXB0RXh0ZXJu
YWxOYW1lU2V0LmgiIDIKCgoKCgpjbGFzcyBuc0lTY3JpcHRDb250ZXh0OwojIDQyICIuLi8uLi9k
aXN0L2luY2x1ZGUvbnNJU2NyaXB0RXh0ZXJuYWxOYW1lU2V0LmgiCmNsYXNzIG5zSVNjcmlwdEV4
dGVybmFsTmFtZVNldCA6IHB1YmxpYyBuc0lTdXBwb3J0cwp7CnB1YmxpYzoKICBzdGF0aWMgY29u
c3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwZGEs
IDB4MTViMywgMHgxMWQyLCB7MHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhk
ZCwgMHgzMn19OyByZXR1cm4gaWlkO307CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdGlhbGl6
ZU5hbWVTZXQobnNJU2NyaXB0Q29udGV4dCogYVNjcmlwdENvbnRleHQpID0gMDsKfTsKIyAyMSAi
bnNTb2Z0d2FyZVVwZGF0ZS5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUFwcFNoZWxs
Q29tcG9uZW50LmgiIDEKIyAxNyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUFwcFNoZWxsQ29tcG9u
ZW50LmgiCmNsYXNzIG5zSUFwcFNoZWxsU2VydmljZTsKY2xhc3MgbnNJQ21kTGluZVNlcnZpY2U7
CiMgMjcgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lBcHBTaGVsbENvbXBvbmVudC5oIgpjbGFzcyBu
c0lBcHBTaGVsbENvbXBvbmVudCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0
YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhh
NmNmOTBlZCwgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1Ziwg
MHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElu
aXRpYWxpemUoIG5zSUFwcFNoZWxsU2VydmljZSAqIGFuQXBwU2hlbGwsIG5zSUNtZExpbmVTZXJ2
aWNlICogYXJncykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTaHV0ZG93bih2b2lkKSA9IDA7
Cgp9OwojIDIyICJuc1NvZnR3YXJlVXBkYXRlLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUv
bnNJRE9NV2luZG93SW50ZXJuYWwuaCIgMQojIDIzICJuc1NvZnR3YXJlVXBkYXRlLmgiIDIKIyAx
ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJT2JzZXJ2ZXIuaCIgMQojIDI0ICJuc1NvZnR3YXJlVXBk
YXRlLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNQSVhQSVN0dWJIb29rLmgiIDEKIyAz
OSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zUElYUElTdHViSG9vay5oIgpjbGFzcyBuc1BJWFBJU3R1
Ykhvb2sgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJ
SUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4MDg5OTI5ZjAsIDB4NGVk
OSwgMHgxMWQzLCB7IDB4YWIsIDB4ZGQsIDB4MDAsIDB4MDAsIDB4NjQsIDB4NjUsIDB4NzMsIDB4
NzQgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTdHViSW5pdGlhbGl6ZShu
c0lGaWxlICpkaXIsIGNvbnN0IGNoYXIgKmxvZ05hbWUpID0gMDsKCn07CiMgMjUgIm5zU29mdHdh
cmVVcGRhdGUuaCIgMgojIDEgIm5zVG9wUHJvZ3Jlc3NOb3RpZmllci5oIiAxCiMgMjkgIm5zVG9w
UHJvZ3Jlc3NOb3RpZmllci5oIgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIiAx
CiMgMzAgIm5zVG9wUHJvZ3Jlc3NOb3RpZmllci5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRl
L25zSVhQSU5vdGlmaWVyLmgiIDEKIyAzMSAibnNUb3BQcm9ncmVzc05vdGlmaWVyLmgiIDIKIyAx
ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNWb2lkQXJyYXkuaCIgMQojIDMyICJuc1RvcFByb2dyZXNz
Tm90aWZpZXIuaCIgMgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNw
ci9wcmxvY2suaCIgMQojIDMzICJuc1RvcFByb2dyZXNzTm90aWZpZXIuaCIgMgoKY2xhc3MgbnNU
b3BQcm9ncmVzc0xpc3RlbmVyIDogcHVibGljIG5zSVhQSUxpc3RlbmVyCnsKICAgIHB1YmxpYzoK
CiAgICAgICAgbnNUb3BQcm9ncmVzc0xpc3RlbmVyKCk7CiAgICAgICAgdmlydHVhbCB+bnNUb3BQ
cm9ncmVzc0xpc3RlbmVyKCk7CgogICAgICAgIGxvbmcgUmVnaXN0ZXJMaXN0ZW5lcihuc0lYUElM
aXN0ZW5lciAqIG5ld0xpc3RlbmVyKTsKICAgICAgICB2b2lkIFVucmVnaXN0ZXJMaXN0ZW5lcihs
b25nIGlkKTsKICAgICAgICB2b2lkIFNldEFjdGl2ZUxpc3RlbmVyKG5zSVhQSUxpc3RlbmVyICph
TGlzdGVuZXIpCiAgICAgICAgICAgIHsgbUFjdGl2ZSA9IGFMaXN0ZW5lcjsgfQoKICAgICAgICBw
dWJsaWM6IHZpcnR1YWwgbnNyZXN1bHQgUXVlcnlJbnRlcmZhY2UoY29uc3QgbnNJSUQmIGFJSUQs
IHZvaWQqKiBhSW5zdGFuY2VQdHIpOyB2aXJ0dWFsIG5zcmVmY250IEFkZFJlZih2b2lkKTsgdmly
dHVhbCBuc3JlZmNudCBSZWxlYXNlKHZvaWQpOyBwcm90ZWN0ZWQ6IG5zcmVmY250IG1SZWZDbnQ7
IHZvaWQqIF9tT3duaW5nVGhyZWFkOyBwdWJsaWM6CgoKICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0
IEJlZm9yZUphdmFzY3JpcHRFdmFsdWF0aW9uKGNvbnN0IFBSVW5pY2hhciAqVVJMKTsgdmlydHVh
bCBuc3Jlc3VsdCBBZnRlckphdmFzY3JpcHRFdmFsdWF0aW9uKGNvbnN0IFBSVW5pY2hhciAqVVJM
KTsgdmlydHVhbCBuc3Jlc3VsdCBJbnN0YWxsU3RhcnRlZChjb25zdCBQUlVuaWNoYXIgKlVSTCwg
Y29uc3QgUFJVbmljaGFyICpVSVBhY2thZ2VOYW1lKTsgdmlydHVhbCBuc3Jlc3VsdCBJdGVtU2No
ZWR1bGVkKGNvbnN0IFBSVW5pY2hhciAqbWVzc2FnZSk7IHZpcnR1YWwgbnNyZXN1bHQgRmluYWxp
emVQcm9ncmVzcyhjb25zdCBQUlVuaWNoYXIgKm1lc3NhZ2UsIFBSSW50MzIgaXRlbU51bSwgUFJJ
bnQzMiB0b3ROdW0pOyB2aXJ0dWFsIG5zcmVzdWx0IEZpbmFsU3RhdHVzKGNvbnN0IFBSVW5pY2hh
ciAqVVJMLCBQUkludDMyIHN0YXR1cyk7IHZpcnR1YWwgbnNyZXN1bHQgTG9nQ29tbWVudChjb25z
dCBQUlVuaWNoYXIgKmNvbW1lbnQpOwoKICAgcHJpdmF0ZToKICAgICAgICBuc1ZvaWRBcnJheSAq
bUxpc3RlbmVyczsKICAgICAgICBQUkxvY2sgKm1Mb2NrOwogICAgICAgIG5zQ09NUHRyPG5zSVhQ
SUxpc3RlbmVyPiBtQWN0aXZlOwp9OwojIDI2ICJuc1NvZnR3YXJlVXBkYXRlLmgiIDIKCgoKCgoK
Y2xhc3MgbnNTb2Z0d2FyZVVwZGF0ZTogcHVibGljIG5zSVNvZnR3YXJlVXBkYXRlLAogICAgICAg
ICAgICAgICAgICAgICAgICBwdWJsaWMgbnNQSVhQSVN0dWJIb29rLAogICAgICAgICAgICAgICAg
ICAgICAgICBwdWJsaWMgbnNJT2JzZXJ2ZXIKewogICAgcHVibGljOgoKICAgICAgICBzdGF0aWMg
Y29uc3QgbnNJRCYgR2V0Q0lEKCkge3N0YXRpYyBjb25zdCBuc0lEIGNpZCA9IHsgMHgxOGMyZjk4
OSwgMHhiMDlmLCAweDExZDIsIHsweGJjLCAweGRlLCAweDAwLCAweDgwLCAweDVmLCAweDBlLCAw
eDEzLCAweDUzfSB9OyByZXR1cm4gY2lkO307CgogICAgICAgIHN0YXRpYyBuc1NvZnR3YXJlVXBk
YXRlICpHZXRJbnN0YW5jZSgpOwoKCgoKCiAgICAgICAgc3RhdGljIG5zSUZpbGUqIEdldFByb2dy
YW1EaXJlY3RvcnkoKSB7IHJldHVybiBtUHJvZ3JhbURpcjsgfQoKCgoKICAgICAgICBzdGF0aWMg
Y2hhciogR2V0TG9nTmFtZSgpIHsgcmV0dXJuIG1Mb2dOYW1lOyB9CgogICAgICAgIHB1YmxpYzog
dmlydHVhbCBuc3Jlc3VsdCBRdWVyeUludGVyZmFjZShjb25zdCBuc0lJRCYgYUlJRCwgdm9pZCoq
IGFJbnN0YW5jZVB0cik7IHZpcnR1YWwgbnNyZWZjbnQgQWRkUmVmKHZvaWQpOyB2aXJ0dWFsIG5z
cmVmY250IFJlbGVhc2Uodm9pZCk7IHByb3RlY3RlZDogbnNyZWZjbnQgbVJlZkNudDsgdm9pZCog
X21Pd25pbmdUaHJlYWQ7IHB1YmxpYzoKICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWJJbml0
aWFsaXplKG5zSUZpbGUgKmRpciwgY29uc3QgY2hhciAqbG9nTmFtZSk7CiAgICAgICAgdmlydHVh
bCBuc3Jlc3VsdCBPYnNlcnZlKG5zSVN1cHBvcnRzICphU3ViamVjdCwgY29uc3QgUFJVbmljaGFy
ICphVG9waWMsIGNvbnN0IFBSVW5pY2hhciAqYURhdGEpOwoKICAgICAgICB2aXJ0dWFsIG5zcmVz
dWx0IEluc3RhbGxKYXIoIG5zSUZpbGUqIGxvY2FsRmlsZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFBSVW5pY2hhciogVVJMLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUFJVbmljaGFyKiBhcmd1bWVudHMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc0lET01XaW5kb3dJbnRlcm5hbCogYVBhcmVudFdpbmRvdywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGZsYWdzID0gMCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5zSVhQSUxpc3RlbmVyKiBhTGlzdGVuZXIgPSAwKTsKCiAgICAgICAgdmly
dHVhbCBuc3Jlc3VsdCBJbnN0YWxsQ2hyb21lKCBQUlVpbnQzMiBhVHlwZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zSUZpbGUqIGFGaWxlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUFJVbmljaGFyKiBVUkwsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBQUlVuaWNoYXIqIGFOYW1lLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUFJCb29sIGFTZWxlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc0lYUElMaXN0ZW5lciogYUxpc3RlbmVyID0gMCk7CgogICAgICAgIHZpcnR1YWwg
bnNyZXN1bHQgUmVnaXN0ZXJMaXN0ZW5lcihuc0lYUElMaXN0ZW5lciAqYUxpc3RlbmVyKTsKCiAg
ICAgICAgdmlydHVhbCBuc3Jlc3VsdCBJbnN0YWxsSmFyQ2FsbEJhY2soKTsKICAgICAgICB2aXJ0
dWFsIG5zcmVzdWx0IEdldE1hc3Rlckxpc3RlbmVyKG5zSVhQSUxpc3RlbmVyICoqYUxpc3RlbmVy
KTsKICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFjdGl2ZUxpc3RlbmVyKG5zSVhQSUxpc3Rl
bmVyICphTGlzdGVuZXIpOwogICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3RhcnR1cFRhc2tzKCBQ
UkJvb2wqIG5lZWRBdXRvcmVnICk7CgogICAgICAgIG5zU29mdHdhcmVVcGRhdGUoKTsKICAgICAg
ICB2aXJ0dWFsIH5uc1NvZnR3YXJlVXBkYXRlKCk7CgogICAgICAgIHN0YXRpYyBQUkJvb2wgbU5l
ZWRDbGVhbnVwOwoKICAgIHByaXZhdGU6CiAgICAgICAgc3RhdGljIG5zU29mdHdhcmVVcGRhdGUq
IG1JbnN0YW5jZTsKICAgICAgICBzdGF0aWMgbnNDT01QdHI8bnNJRmlsZT4gbVByb2dyYW1EaXI7
CiAgICAgICAgc3RhdGljIGNoYXIqIG1Mb2dOYW1lOwoKICAgICAgICBuc3Jlc3VsdCBSdW5OZXh0
SW5zdGFsbCgpOwogICAgICAgIG5zcmVzdWx0IFJlZ2lzdGVyTmFtZXNldCgpOwogICAgICAgIHZv
aWQgQ3JlYXRlTWFzdGVyTGlzdGVuZXIoKTsKICAgICAgICB2b2lkIFNodXRkb3duKCk7CgogICAg
ICAgIFBSTG9jayogbUxvY2s7CiAgICAgICAgUFJCb29sIG1JbnN0YWxsaW5nOwogICAgICAgIG5z
Vm9pZEFycmF5IG1KYXJJbnN0YWxsUXVldWU7CiAgICAgICAgbnNUb3BQcm9ncmVzc0xpc3RlbmVy
ICptTWFzdGVyTGlzdGVuZXI7CgogICAgICAgIEhSRUcgbVJlZzsKfTsKCgpjbGFzcyBuc1NvZnR3
YXJlVXBkYXRlTmFtZVNldCA6IHB1YmxpYyBuc0lTY3JpcHRFeHRlcm5hbE5hbWVTZXQKewogICAg
cHVibGljOgogICAgICAgIG5zU29mdHdhcmVVcGRhdGVOYW1lU2V0KCk7CiAgICAgICAgdmlydHVh
bCB+bnNTb2Z0d2FyZVVwZGF0ZU5hbWVTZXQoKTsKCgogICAgICAgIHB1YmxpYzogdmlydHVhbCBu
c3Jlc3VsdCBRdWVyeUludGVyZmFjZShjb25zdCBuc0lJRCYgYUlJRCwgdm9pZCoqIGFJbnN0YW5j
ZVB0cik7IHZpcnR1YWwgbnNyZWZjbnQgQWRkUmVmKHZvaWQpOyB2aXJ0dWFsIG5zcmVmY250IFJl
bGVhc2Uodm9pZCk7IHByb3RlY3RlZDogbnNyZWZjbnQgbVJlZkNudDsgdm9pZCogX21Pd25pbmdU
aHJlYWQ7IHB1YmxpYzoKCgogICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgSW5pdGlhbGl6ZU5hbWVT
ZXQobnNJU2NyaXB0Q29udGV4dCogYVNjcmlwdENvbnRleHQpOwp9OwojIDQ1ICJuc0luc3RhbGwu
aCIgMgoKIyAxICJuc0luc3RhbGxPYmplY3QuaCIgMQojIDI2ICJuc0luc3RhbGxPYmplY3QuaCIK
IyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIiAx
CiMgMjcgIm5zSW5zdGFsbE9iamVjdC5oIiAyCgpjbGFzcyBuc0luc3RhbGw7CgpjbGFzcyBuc0lu
c3RhbGxPYmplY3QKewogICAgcHVibGljOgoKICAgICAgICBuc0luc3RhbGxPYmplY3QobnNJbnN0
YWxsKiBpbkluc3RhbGwpIHttSW5zdGFsbCA9IGluSW5zdGFsbDsgfQogICAgICAgIHZpcnR1YWwg
fm5zSW5zdGFsbE9iamVjdCgpIHt9CgoKICAgICAgICB2aXJ0dWFsIFBSSW50MzIgUHJlcGFyZSgp
ID0gMDsKCgogICAgICAgIHZpcnR1YWwgUFJJbnQzMiBDb21wbGV0ZSgpID0gMDsKCgogICAgICAg
IHZpcnR1YWwgY2hhciogdG9TdHJpbmcoKSA9IDA7CgoKICAgICAgICB2aXJ0dWFsIHZvaWQgQWJv
cnQoKSA9IDA7CgoKICAgICAgICB2aXJ0dWFsIFBSQm9vbCBDYW5Vbmluc3RhbGwoKSA9IDA7CiAg
ICAgICAgdmlydHVhbCBQUkJvb2wgUmVnaXN0ZXJQYWNrYWdlTm9kZSgpID0gMDsKCiAgICBwcm90
ZWN0ZWQ6CiAgICAgICAgbnNJbnN0YWxsKiBtSW5zdGFsbDsKfTsKIyA0NyAibnNJbnN0YWxsLmgi
IDIKIyAxICJuc0luc3RhbGxWZXJzaW9uLmgiIDEKCgoKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUv
bnNjb3JlLmgiIDEKIyA1ICJuc0luc3RhbGxWZXJzaW9uLmgiIDIKIyAxICIuLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNTdHJpbmcuaCIgMQojIDYgIm5zSW5zdGFsbFZlcnNpb24uaCIgMgojIDEgIi4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lGYWN0b3J5LmgiIDEKIyA3ICJuc0luc3RhbGxWZXJzaW9uLmgiIDIK
IyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMQojIDggIm5zSW5zdGFsbFZl
cnNpb24uaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTY3JpcHRPYmplY3RPd25lci5o
IiAxCiMgMjYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTY3JpcHRPYmplY3RPd25lci5oIgojIDEg
Ii4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMjcgIi4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lTY3JpcHRPYmplY3RPd25lci5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25z
SVNjcmlwdENvbnRleHQuaCIgMQojIDI2ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2NyaXB0Q29u
dGV4dC5oIgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIgMQojIDI3ICIuLi8uLi9k
aXN0L2luY2x1ZGUvbnNJU2NyaXB0Q29udGV4dC5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRl
L25zU3RyaW5nLmgiIDEKIyAyOCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNjcmlwdENvbnRleHQu
aCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMjkgIi4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lTY3JpcHRDb250ZXh0LmgiIDIKCmNsYXNzIG5zSVNjcmlwdEdsb2Jh
bE9iamVjdDsKY2xhc3MgbnNJU2NyaXB0U2VjdXJpdHlNYW5hZ2VyOwpjbGFzcyBuc0lTY3JpcHRD
b250ZXh0T3duZXI7CmNsYXNzIG5zSVByaW5jaXBhbDsKCnR5cGVkZWYgdm9pZCAoKm5zU2NyaXB0
VGVybWluYXRpb25GdW5jKShuc0lTdXBwb3J0cyogYVJlZik7CiMgNDkgIi4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lTY3JpcHRDb250ZXh0LmgiCmNsYXNzIG5zSVNjcmlwdENvbnRleHQgOiBwdWJsaWMg
bnNJU3VwcG9ydHMgewpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3Rh
dGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHg4ZjZiY2E3ZCwgMHhjZTQyLCAweDExZDEsIHsweGI3
LCAweDI0LCAweDAwLCAweDYwLCAweDA4LCAweDkxLCAweGQ4LCAweGM5fSB9OyByZXR1cm4gaWlk
O30KIyA3MCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNjcmlwdENvbnRleHQuaCIKICB2aXJ0dWFs
IG5zcmVzdWx0IEV2YWx1YXRlU3RyaW5nKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhU2NyaXB0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYVNjb3BlT2JqZWN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNJUHJpbmNpcGFsICphUHJpbmNpcGFsLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYVVSTCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBSVWludDMyIGFMaW5lTm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiBhVmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zQVdyaXRhYmxl
U3RyaW5nJiBhUmV0VmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wqIGFJ
c1VuZGVmaW5lZCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEV2YWx1YXRlU3RyaW5nV2l0aFZh
bHVlKGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhU2NyaXB0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdm9pZCAqYVNjb3BlT2JqZWN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnNJUHJpbmNpcGFsICphUHJpbmNpcGFsLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYVVSTCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFMaW5lTm8sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhVmVyc2lvbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGFSZXRWYWx1ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBSQm9vbCogYUlzVW5kZWZpbmVkKSA9IDA7CiMgMTA2ICIuLi8u
Li9kaXN0L2luY2x1ZGUvbnNJU2NyaXB0Q29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ29t
cGlsZVNjcmlwdChjb25zdCBQUlVuaWNoYXIqIGFUZXh0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBQUkludDMyIGFUZXh0TGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk
KiBhU2NvcGVPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVByaW5jaXBhbCog
YVByaW5jaXBhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYVVSTCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYUxpbmVObywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciogYVZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZvaWQqKiBhU2NyaXB0T2JqZWN0KSA9IDA7CiMgMTI5ICIuLi8uLi9kaXN0L2luY2x1
ZGUvbnNJU2NyaXB0Q29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRXhlY3V0ZVNjcmlwdCh2
b2lkKiBhU2NyaXB0T2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBhU2Nv
cGVPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zQVdyaXRhYmxlU3RyaW5nKiBh
UmV0VmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCogYUlzVW5kZWZpbmVk
KSA9IDA7CiMgMTU2ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2NyaXB0Q29udGV4dC5oIgogIHZp
cnR1YWwgbnNyZXN1bHQgQ29tcGlsZUV2ZW50SGFuZGxlcih2b2lkKiBhVGFyZ2V0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhTmFtZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFCb2R5LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYVNoYXJlZCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdm9pZCoqIGFIYW5kbGVyKSA9IDA7CiMgMTc0ICIuLi8uLi9kaXN0
L2luY2x1ZGUvbnNJU2NyaXB0Q29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ2FsbEV2ZW50
SGFuZGxlcih2b2lkKiBhVGFyZ2V0LCB2b2lkKiBhSGFuZGxlciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUFJVaW50MzIgYXJnYywgdm9pZCogYXJndiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUFJCb29sKiBhQm9vbFJlc3VsdCwgUFJCb29sIGFSZXZlcnNlUmV0dXJuUmVz
dWx0KSA9IDA7CiMgMTk0ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2NyaXB0Q29udGV4dC5oIgog
IHZpcnR1YWwgbnNyZXN1bHQgQmluZENvbXBpbGVkRXZlbnRIYW5kbGVyKHZvaWQqIGFUYXJnZXQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYU5hbWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYUhhbmRsZXIpID0gMDsK
CiAgdmlydHVhbCBuc3Jlc3VsdCBDb21waWxlRnVuY3Rpb24odm9pZCogYVRhcmdldCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0NTdHJpbmcmIGFOYW1lLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFBcmdDb3VudCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyKiogYUFyZ0FycmF5LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhQm9keSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyKiBhVVJMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFBSVWludDMyIGFMaW5lTm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFT
aGFyZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCoqIGFGdW5jdGlvbk9iamVj
dCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldERlZmF1bHRMYW5ndWFnZVZlcnNp
b24oY29uc3QgY2hhciogYVZlcnNpb24pID0gMDsKCgoKCgogIHZpcnR1YWwgbnNJU2NyaXB0R2xv
YmFsT2JqZWN0KiBHZXRHbG9iYWxPYmplY3QoKSA9IDA7CgoKCgoKICB2aXJ0dWFsIHZvaWQqIEdl
dE5hdGl2ZUNvbnRleHQoKSA9IDA7CiMgMjM2ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2NyaXB0
Q29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdENvbnRleHQobnNJU2NyaXB0R2xvYmFs
T2JqZWN0ICphR2xvYmFsT2JqZWN0KSA9IDA7CiMgMjQ1ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
U2NyaXB0Q29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSXNDb250ZXh0SW5pdGlhbGl6ZWQo
KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR0MoKSA9IDA7CgoKCgoKICB2aXJ0dWFs
IG5zcmVzdWx0IEdldFNlY3VyaXR5TWFuYWdlcihuc0lTY3JpcHRTZWN1cml0eU1hbmFnZXIqKiBh
SW5zdGFuY2VQdHIpID0gMDsKIyAyNzMgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTY3JpcHRDb250
ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTY3JpcHRFdmFsdWF0ZWQoUFJCb29sIGFUZXJtaW5h
dGVkKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0T3duZXIobnNJU2NyaXB0Q29u
dGV4dE93bmVyKiBvd25lcikgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE93bmVy
KG5zSVNjcmlwdENvbnRleHRPd25lcioqIG93bmVyKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgU2V0VGVybWluYXRpb25GdW5jdGlvbihuc1NjcmlwdFRlcm1pbmF0aW9uRnVuYyBhRnVu
YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMqIGFSZWYp
ID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTY3JpcHRzRW5hYmxlZChQUkJvb2wgKmFF
bmFibGVkKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTY3JpcHRzRW5hYmxlZChQUkJvb2wg
YUVuYWJsZWQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UHJvY2Vzc2luZ1Njcmlw
dFRhZyhQUkJvb2wgKiBhUmVzdWx0KSA9MDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFByb2Nlc3Np
bmdTY3JpcHRUYWcoUFJCb29sIGFSZXN1bHQpID0wOwp9OwojIDI4ICIuLi8uLi9kaXN0L2luY2x1
ZGUvbnNJU2NyaXB0T2JqZWN0T3duZXIuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FS
ZWFkYWJsZVN0cmluZy5oIiAxCiMgMjkgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTY3JpcHRPYmpl
Y3RPd25lci5oIiAyCiMgNDUgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTY3JpcHRPYmplY3RPd25l
ci5oIgpjbGFzcyBuc0lTY3JpcHRPYmplY3RPd25lciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1
YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQg
aWlkID0geyAweDhmNmJjYTdlLCAweGNlNDIsIDB4MTFkMSwgezB4YjcsIDB4MjQsIDB4MDAsIDB4
NjAsIDB4MDgsIDB4OTEsIDB4ZDgsIDB4Yzl9IH07IHJldHVybiBpaWQ7fQojIDU4ICIuLi8uLi9k
aXN0L2luY2x1ZGUvbnNJU2NyaXB0T2JqZWN0T3duZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdl
dFNjcmlwdE9iamVjdChuc0lTY3JpcHRDb250ZXh0ICphQ29udGV4dCwgdm9pZCoqIGFTY3JpcHRP
YmplY3QpID0gMDsKIyA3MCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNjcmlwdE9iamVjdE93bmVy
LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTY3JpcHRPYmplY3Qodm9pZCogYVNjcmlwdE9iamVj
dCkgPSAwOwp9OwoKY2xhc3MgbnNJQXRvbTsKIyA4NiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNj
cmlwdE9iamVjdE93bmVyLmgiCmNsYXNzIG5zSVNjcmlwdEV2ZW50SGFuZGxlck93bmVyIDogcHVi
bGljIG5zSVN1cHBvcnRzCnsKcHVibGljOgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkg
e3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7IDB4MmFkNTRhZTAsIDB4YTgzOSwgMHgxMWQzLCB7
MHhiYSwgMHg5NywgMHgwMCwgMHgxMCwgMHg0YiwgMHhhMCwgMHgyZCwgMHgzZH0gfTsgcmV0dXJu
IGlpZDt9CiMgMTAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2NyaXB0T2JqZWN0T3duZXIuaCIK
ICB2aXJ0dWFsIG5zcmVzdWx0IENvbXBpbGVFdmVudEhhbmRsZXIobnNJU2NyaXB0Q29udGV4dCog
YUNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGFUYXJnZXQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20gKmFOYW1lLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0FSZWFkYWJsZVN0cmluZyYgYUJvZHks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqKiBhSGFuZGxlcikgPSAwOwoj
IDExNCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVNjcmlwdE9iamVjdE93bmVyLmgiCiAgdmlydHVh
bCBuc3Jlc3VsdCBHZXRDb21waWxlZEV2ZW50SGFuZGxlcihuc0lBdG9tICphTmFtZSwgdm9pZCoq
IGFIYW5kbGVyKSA9IDA7Cn07CiMgOSAibnNJbnN0YWxsVmVyc2lvbi5oIiAyCgojIDEgIi4uL3B1
YmxpYy9uc0lET01JbnN0YWxsVmVyc2lvbi5oIiAxCiMgMjcgIi4uL3B1YmxpYy9uc0lET01JbnN0
YWxsVmVyc2lvbi5oIgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMg
MjggIi4uL3B1YmxpYy9uc0lET01JbnN0YWxsVmVyc2lvbi5oIiAyCiMgMSAiLi4vLi4vZGlzdC9p
bmNsdWRlL25zU3RyaW5nLmgiIDEKIyAyOSAiLi4vcHVibGljL25zSURPTUluc3RhbGxWZXJzaW9u
LmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2NyaXB0Q29udGV4dC5oIiAxCiMgMzAg
Ii4uL3B1YmxpYy9uc0lET01JbnN0YWxsVmVyc2lvbi5oIiAyCgpjbGFzcyBuc0lET01JbnN0YWxs
VmVyc2lvbjsKCgoKCgpjbGFzcyBuc0lET01JbnN0YWxsVmVyc2lvbiA6IHB1YmxpYyBuc0lTdXBw
b3J0cyB7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHsgc3RhdGljIG5z
SUlEIGlpZCA9IHsgMHgxOGMyZjk4NiwgMHhiMDlmLCAweDExZDIsIHsweGJjLCAweGRlLCAweDAw
LCAweDgwLCAweDVmLCAweDBlLCAweDEzLCAweDUzfX07IHJldHVybiBpaWQ7IH0KICBlbnVtIHsK
ICAgIEVRVUFMID0gMCwKICAgIEJMRF9ESUZGID0gMSwKICAgIEJMRF9ESUZGX01JTlVTID0gLTEs
CiAgICBSRUxfRElGRiA9IDIsCiAgICBSRUxfRElGRl9NSU5VUyA9IC0yLAogICAgTUlOT1JfRElG
RiA9IDMsCiAgICBNSU5PUl9ESUZGX01JTlVTID0gLTMsCiAgICBNQUpPUl9ESUZGID0gNCwKICAg
IE1BSk9SX0RJRkZfTUlOVVMgPSAtNAogIH07CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWFqb3Io
UFJJbnQzMiogYU1ham9yKT0wOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TWFqb3IoUFJJbnQzMiBh
TWFqb3IpPTA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWlub3IoUFJJbnQzMiogYU1pbm9yKT0w
OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TWlub3IoUFJJbnQzMiBhTWlub3IpPTA7CgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0UmVsZWFzZShQUkludDMyKiBhUmVsZWFzZSk9MDsKICB2aXJ0dWFsIG5z
cmVzdWx0IFNldFJlbGVhc2UoUFJJbnQzMiBhUmVsZWFzZSk9MDsKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBHZXRCdWlsZChQUkludDMyKiBhQnVpbGQpPTA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCdWls
ZChQUkludDMyIGFCdWlsZCk9MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0KGNvbnN0IG5zU3Ry
aW5nJiBhVmVyc2lvblN0cmluZyk9MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBUb1N0cmluZyhuc1N0
cmluZyYgYVJldHVybik9MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBDb21wYXJlVG8obnNJRE9NSW5z
dGFsbFZlcnNpb24qIGFWZXJzaW9uT2JqZWN0LCBQUkludDMyKiBhUmV0dXJuKT0wOwogIHZpcnR1
YWwgbnNyZXN1bHQgQ29tcGFyZVRvKGNvbnN0IG5zU3RyaW5nJiBhU3RyaW5nLCBQUkludDMyKiBh
UmV0dXJuKT0wOwogIHZpcnR1YWwgbnNyZXN1bHQgQ29tcGFyZVRvKFBSSW50MzIgYU1ham9yLCBQ
UkludDMyIGFNaW5vciwgUFJJbnQzMiBhUmVsZWFzZSwgUFJJbnQzMiBhQnVpbGQsIFBSSW50MzIq
IGFSZXR1cm4pPTA7Cn07CiMgMTA3ICIuLi9wdWJsaWMvbnNJRE9NSW5zdGFsbFZlcnNpb24uaCIK
ZXh0ZXJuIG5zcmVzdWx0IE5TX0luaXRJbnN0YWxsVmVyc2lvbkNsYXNzKG5zSVNjcmlwdENvbnRl
eHQgKmFDb250ZXh0LCB2b2lkICoqYVByb3RvdHlwZSk7CgpleHRlcm4gIkMiIG5zcmVzdWx0IE5T
X05ld1NjcmlwdEluc3RhbGxWZXJzaW9uKG5zSVNjcmlwdENvbnRleHQgKmFDb250ZXh0LCBuc0lT
dXBwb3J0cyAqYVN1cHBvcnRzLCBuc0lTdXBwb3J0cyAqYVBhcmVudCwgdm9pZCAqKmFSZXR1cm4p
OwojIDExICJuc0luc3RhbGxWZXJzaW9uLmgiIDIKIyAxICJuc1NvZnR3YXJlVXBkYXRlLmgiIDEK
IyAxMiAibnNJbnN0YWxsVmVyc2lvbi5oIiAyCgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9k
aXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiIDEKIyAxNCAibnNJbnN0YWxsVmVyc2lvbi5oIiAy
CgpjbGFzcyBuc0luc3RhbGxWZXJzaW9uOiBwdWJsaWMgbnNJU2NyaXB0T2JqZWN0T3duZXIsIHB1
YmxpYyBuc0lET01JbnN0YWxsVmVyc2lvbgp7CiAgICBwdWJsaWM6CiAgICAgICAgc3RhdGljIGNv
bnN0IG5zSUlEJiBJSUQoKSB7IHN0YXRpYyBuc0lJRCBpaWQgPSB7IDB4MThjMmY5OGYsIDB4YjA5
ZiwgMHgxMWQyLCB7MHhiYywgMHhkZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHgwZSwgMHgxMywgMHg1
M30gfTsgcmV0dXJuIGlpZDsgfQoKICAgICAgICBuc0luc3RhbGxWZXJzaW9uKCk7CiAgICAgICAg
dmlydHVhbCB+bnNJbnN0YWxsVmVyc2lvbigpOwoKICAgICAgICBwdWJsaWM6IHZpcnR1YWwgbnNy
ZXN1bHQgUXVlcnlJbnRlcmZhY2UoY29uc3QgbnNJSUQmIGFJSUQsIHZvaWQqKiBhSW5zdGFuY2VQ
dHIpOyB2aXJ0dWFsIG5zcmVmY250IEFkZFJlZih2b2lkKTsgdmlydHVhbCBuc3JlZmNudCBSZWxl
YXNlKHZvaWQpOyBwcm90ZWN0ZWQ6IG5zcmVmY250IG1SZWZDbnQ7IHZvaWQqIF9tT3duaW5nVGhy
ZWFkOyBwdWJsaWM6CgogICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2NyaXB0T2JqZWN0KG5z
SVNjcmlwdENvbnRleHQgKmFDb250ZXh0LCB2b2lkKiogYVNjcmlwdE9iamVjdCk7CiAgICAgICAg
dmlydHVhbCBuc3Jlc3VsdCBTZXRTY3JpcHRPYmplY3Qodm9pZCogYVNjcmlwdE9iamVjdCk7Cgog
ICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgSW5pdChQUkludDMyIGFNYWpvciwgUFJJbnQzMiBhTWlu
b3IsIFBSSW50MzIgYVJlbGVhc2UsIFBSSW50MzIgYUJ1aWxkKTsKICAgICAgICB2aXJ0dWFsIG5z
cmVzdWx0IEluaXQoY29uc3QgbnNTdHJpbmcmIGFWZXJzaW9uU3RyaW5nKTsKCiAgICAgICAgdmly
dHVhbCBuc3Jlc3VsdCBHZXRNYWpvcihQUkludDMyKiBhTWFqb3IpOwogICAgICAgIHZpcnR1YWwg
bnNyZXN1bHQgU2V0TWFqb3IoUFJJbnQzMiBhTWFqb3IpOwoKICAgICAgICB2aXJ0dWFsIG5zcmVz
dWx0IEdldE1pbm9yKFBSSW50MzIqIGFNaW5vcik7CiAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBT
ZXRNaW5vcihQUkludDMyIGFNaW5vcik7CgogICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgR2V0UmVs
ZWFzZShQUkludDMyKiBhUmVsZWFzZSk7CiAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTZXRSZWxl
YXNlKFBSSW50MzIgYVJlbGVhc2UpOwoKICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJ1aWxk
KFBSSW50MzIqIGFCdWlsZCk7CiAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCdWlsZChQUklu
dDMyIGFCdWlsZCk7CgogICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgVG9TdHJpbmcobnNTdHJpbmcm
IGFSZXR1cm4pOwogICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgQ29tcGFyZVRvKG5zSURPTUluc3Rh
bGxWZXJzaW9uKiBhVmVyc2lvbiwgUFJJbnQzMiogYVJldHVybik7CiAgICAgICAgdmlydHVhbCBu
c3Jlc3VsdCBDb21wYXJlVG8oY29uc3QgbnNTdHJpbmcmIGFTdHJpbmcsIFBSSW50MzIqIGFSZXR1
cm4pOwogICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgQ29tcGFyZVRvKFBSSW50MzIgYU1ham9yLCBQ
UkludDMyIGFNaW5vciwgUFJJbnQzMiBhUmVsZWFzZSwgUFJJbnQzMiBhQnVpbGQsIFBSSW50MzIq
IGFSZXR1cm4pOwoKICAgICAgICBzdGF0aWMgbnNyZXN1bHQgU3RyaW5nVG9WZXJzaW9uTnVtYmVy
cyhjb25zdCBuc1N0cmluZyYgdmVyc2lvbiwgUFJJbnQzMiAqYU1ham9yLCBQUkludDMyICphTWlu
b3IsIFBSSW50MzIgKmFSZWxlYXNlLCBQUkludDMyICphQnVpbGQpOwoKICAgIHByaXZhdGU6CiAg
ICAgICAgdm9pZCAqbVNjcmlwdE9iamVjdDsKICAgICAgICBQUkludDMyIG1ham9yOwogICAgICAg
IFBSSW50MzIgbWlub3I7CiAgICAgICAgUFJJbnQzMiByZWxlYXNlOwogICAgICAgIFBSSW50MzIg
YnVpbGQ7Cn07CiMgNDggIm5zSW5zdGFsbC5oIiAyCiMgMSAibnNJbnN0YWxsRm9sZGVyLmgiIDEK
IyAzMCAibnNJbnN0YWxsRm9sZGVyLmgiCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5o
IiAxCiMgMzEgIm5zSW5zdGFsbEZvbGRlci5oIiAyCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxh
L2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQojIDMyICJuc0luc3RhbGxGb2xkZXIuaCIg
MgoKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIgMQojIDM0ICJuc0luc3RhbGxG
b2xkZXIuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiIDEKIyAzNSAi
bnNJbnN0YWxsRm9sZGVyLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTcGVjaWFsU3lz
dGVtRGlyZWN0b3J5LmgiIDEKIyAyOSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3BlY2lhbFN5c3Rl
bURpcmVjdG9yeS5oIgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc2NvcmUuaCIgMQojIDMwICIu
Li8uLi9kaXN0L2luY2x1ZGUvbnNTcGVjaWFsU3lzdGVtRGlyZWN0b3J5LmgiIDIKIyAxICIuLi8u
Li9kaXN0L2luY2x1ZGUvbnNGaWxlU3BlYy5oIiAxCiMgMzEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9u
c1NwZWNpYWxTeXN0ZW1EaXJlY3RvcnkuaCIgMgoKCgoKCgpleHRlcm4gdm9pZCBTdGFydHVwU3Bl
Y2lhbFN5c3RlbURpcmVjdG9yeSgpOwpleHRlcm4gdm9pZCBTaHV0ZG93blNwZWNpYWxTeXN0ZW1E
aXJlY3RvcnkoKTsKCgoKCgpjbGFzcyBuc1NwZWNpYWxTeXN0ZW1EaXJlY3RvcnkgOiBwdWJsaWMg
bnNGaWxlU3BlYwp7CgogICAgcHVibGljOgogICAgICAgIGVudW0gU3lzdGVtRGlyZWN0b3JpZXMK
ICAgICAgICB7CiAgICAgICAgICAgIE9TX0RyaXZlRGlyZWN0b3J5ID0gMQogICAgICAgICwgT1Nf
VGVtcG9yYXJ5RGlyZWN0b3J5ID0gMgogICAgICAgICwgT1NfQ3VycmVudFByb2Nlc3NEaXJlY3Rv
cnk9IDMKICAgICAgICAsIE9TX0N1cnJlbnRXb3JraW5nRGlyZWN0b3J5PSA0CgogICAgICAgICwg
WFBDT01fQ3VycmVudFByb2Nlc3NDb21wb25lbnREaXJlY3Rvcnk9IDUKICAgICAgICAsIFhQQ09N
X0N1cnJlbnRQcm9jZXNzQ29tcG9uZW50UmVnaXN0cnk9IDYKCiAgICAgICAgLCBNb3pfQmluRGly
ZWN0b3J5ID0gMTAKCiAgICAgICAgLCBNYWNfU3lzdGVtRGlyZWN0b3J5ID0gMTAxCiAgICAgICAg
LCBNYWNfRGVza3RvcERpcmVjdG9yeSA9IDEwMgogICAgICAgICwgTWFjX1RyYXNoRGlyZWN0b3J5
ID0gMTAzCiAgICAgICAgLCBNYWNfU3RhcnR1cERpcmVjdG9yeSA9IDEwNAogICAgICAgICwgTWFj
X1NodXRkb3duRGlyZWN0b3J5ID0gMTA1CiAgICAgICAgLCBNYWNfQXBwbGVNZW51RGlyZWN0b3J5
ID0gMTA2CiAgICAgICAgLCBNYWNfQ29udHJvbFBhbmVsRGlyZWN0b3J5ID0gMTA3CiAgICAgICAg
LCBNYWNfRXh0ZW5zaW9uRGlyZWN0b3J5ID0gMTA4CiAgICAgICAgLCBNYWNfRm9udHNEaXJlY3Rv
cnkgPSAxMDkKICAgICAgICAsIE1hY19QcmVmZXJlbmNlc0RpcmVjdG9yeSA9IDExMAogICAgICAg
ICwgTWFjX0RvY3VtZW50c0RpcmVjdG9yeSA9IDExMQogICAgICAgICwgTWFjX0ludGVybmV0U2Vh
cmNoRGlyZWN0b3J5ID0gMTEyCiAgICAgICAgLCBNYWNfRGVmYXVsdERvd25sb2FkRGlyZWN0b3J5
ID0gMTEzCgogICAgICAgICwgV2luX1N5c3RlbURpcmVjdG9yeSA9IDIwMQogICAgICAgICwgV2lu
X1dpbmRvd3NEaXJlY3RvcnkgPSAyMDIKCiAgICAgICAgLCBXaW5fSG9tZURpcmVjdG9yeSA9IDIw
MwogICAgICAgICwgV2luX0Rlc2t0b3AgPSAyMDQKICAgICAgICAsIFdpbl9Qcm9ncmFtcyA9IDIw
NQogICAgICAgICwgV2luX0NvbnRyb2xzID0gMjA2CiAgICAgICAgLCBXaW5fUHJpbnRlcnMgPSAy
MDcKICAgICAgICAsIFdpbl9QZXJzb25hbCA9IDIwOAogICAgICAgICwgV2luX0Zhdm9yaXRlcyA9
IDIwOQogICAgICAgICwgV2luX1N0YXJ0dXAgPSAyMTAKICAgICAgICAsIFdpbl9SZWNlbnQgPSAy
MTEKICAgICAgICAsIFdpbl9TZW5kdG8gPSAyMTIKICAgICAgICAsIFdpbl9CaXRidWNrZXQgPSAy
MTMKICAgICAgICAsIFdpbl9TdGFydG1lbnUgPSAyMTQKICAgICAgICAsIFdpbl9EZXNrdG9wZGly
ZWN0b3J5ID0gMjE1CiAgICAgICAgLCBXaW5fRHJpdmVzID0gMjE2CiAgICAgICAgLCBXaW5fTmV0
d29yayA9IDIxNwogICAgICAgICwgV2luX05ldGhvb2QgPSAyMTgKICAgICAgICAsIFdpbl9Gb250
cyA9IDIxOQogICAgICAgICwgV2luX1RlbXBsYXRlcyA9IDIyMAogICAgICAgICwgV2luX0NvbW1v
bl9TdGFydG1lbnUgPSAyMjEKICAgICAgICAsIFdpbl9Db21tb25fUHJvZ3JhbXMgPSAyMjIKICAg
ICAgICAsIFdpbl9Db21tb25fU3RhcnR1cCA9IDIyMwogICAgICAgICwgV2luX0NvbW1vbl9EZXNr
dG9wZGlyZWN0b3J5ID0gMjI0CiAgICAgICAgLCBXaW5fQXBwZGF0YSA9IDIyNQogICAgICAgICwg
V2luX1ByaW50aG9vZCA9IDIyNgoKICAgICAgICAsIFVuaXhfTG9jYWxEaXJlY3RvcnkgPSAzMDEK
ICAgICAgICAsIFVuaXhfTGliRGlyZWN0b3J5ID0gMzAyCiAgICAgICAgLCBVbml4X0hvbWVEaXJl
Y3RvcnkgPSAzMDMKCiAgICAgICAgLCBCZU9TX1NldHRpbmdzRGlyZWN0b3J5ID0gNDAxCiAgICAg
ICAgLCBCZU9TX0hvbWVEaXJlY3RvcnkgPSA0MDIKICAgICAgICAsIEJlT1NfRGVza3RvcERpcmVj
dG9yeSA9IDQwMwogICAgICAgICwgQmVPU19TeXN0ZW1EaXJlY3RvcnkgPSA0MDQKCiAgICAgICAg
LCBPUzJfU3lzdGVtRGlyZWN0b3J5ID0gNTAxCiAgICAgICAgLCBPUzJfT1MyRGlyZWN0b3J5ID0g
NTAyCiAgICAgICAgLCBPUzJfRGVza3RvcERpcmVjdG9yeSA9IDUwMwogICAgICAgICwgT1MyX0hv
bWVEaXJlY3RvcnkgPSA1MDQKICAgICAgICB9OwoKCiAgICAgICAgICAgICAgICAgICAgbnNTcGVj
aWFsU3lzdGVtRGlyZWN0b3J5KFN5c3RlbURpcmVjdG9yaWVzIGFTeXN0ZW1TeXN0ZW1EaXJlY3Rv
cnkpOwoKICAgIHZpcnR1YWwgfm5zU3BlY2lhbFN5c3RlbURpcmVjdG9yeSgpOwoKICAgIHZvaWQg
b3BlcmF0b3IgPSAoU3lzdGVtRGlyZWN0b3JpZXMgYVN5c3RlbVN5c3RlbURpcmVjdG9yeSk7CiMg
MTQwICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNTcGVjaWFsU3lzdGVtRGlyZWN0b3J5LmgiCiAgICBz
dGF0aWMgdm9pZCBTZXQoU3lzdGVtRGlyZWN0b3JpZXMgZGlyVG9TZXQsIG5zRmlsZVNwZWMgKmRp
clNwZWMpOwoKCnByaXZhdGU6CiAgICB2b2lkIG9wZXJhdG9yID0gKGNvbnN0IGNoYXIqIGluUGF0
aCkgeyAqKG5zRmlsZVNwZWMqKXRoaXMgPSBpblBhdGg7IH0KCn07CiMgMzYgIm5zSW5zdGFsbEZv
bGRlci5oIiAyCgpjbGFzcyBuc0luc3RhbGxGb2xkZXIKewogICAgcHVibGljOgoKICAgICAgIG5z
SW5zdGFsbEZvbGRlcigpOwogICAgICAgdmlydHVhbCB+bnNJbnN0YWxsRm9sZGVyKCk7CgogICAg
ICAgbnNyZXN1bHQgSW5pdChuc0luc3RhbGxGb2xkZXImIGluRm9sZGVyLCBjb25zdCBuc1N0cmlu
ZyYgc3ViU3RyaW5nKTsKICAgICAgIG5zcmVzdWx0IEluaXQoY29uc3QgbnNTdHJpbmcmIGFGb2xk
ZXJJRCwgY29uc3QgbnNTdHJpbmcmIGFSZWxhdGl2ZVBhdGgpOwogICAgICAgbnNyZXN1bHQgSW5p
dChuc0lGaWxlKiByYXdJRmlsZSk7CgogICAgICAgdm9pZCBHZXREaXJlY3RvcnlQYXRoKG5zQ1N0
cmluZyYgYURpcmVjdG9yeVBhdGgpOwogICAgICAgbnNJRmlsZSogR2V0RmlsZVNwZWMoKTsKICAg
ICAgIFBSSW50MzIgVG9TdHJpbmcobnNBdXRvU3RyaW5nKiBvdXRTdHJpbmcpOwoKICAgIHByaXZh
dGU6CgogICAgICAgIG5zQ09NUHRyPG5zSUZpbGU+IG1GaWxlU3BlYzsKCiAgICAgICAgdm9pZCBT
ZXREaXJlY3RvcnlQYXRoKGNvbnN0IG5zU3RyaW5nJiBhRm9sZGVySUQsIGNvbnN0IG5zU3RyaW5n
JiBhUmVsYXRpdmVQYXRoKTsKICAgICAgICB2b2lkIEFwcGVuZFhQUGF0aChjb25zdCBuc1N0cmlu
ZyYgYVJlbGF0aXZlUGF0aCk7CiAgICAgICAgUFJJbnQzMiBNYXBOYW1lVG9FbnVtKGNvbnN0IG5z
U3RyaW5nJiBuYW1lKTsKfTsKIyA0OSAibnNJbnN0YWxsLmgiIDIKCiMgMSAiLi4vLi4vZGlzdC9p
bmNsdWRlL25zSVhQSU5vdGlmaWVyLmgiIDEKIyA1MSAibnNJbnN0YWxsLmgiIDIKCiMgMSAiLi4v
Li4vZGlzdC9pbmNsdWRlL25zSVN0cmluZ0J1bmRsZS5oIiAxCiMgMzkgIi4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lTdHJpbmdCdW5kbGUuaCIKY2xhc3MgbnNJU3RyaW5nQnVuZGxlIDogcHVibGljIG5z
SVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3Rh
dGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGQ4NWExN2MyLCAweGFhN2MsIDB4MTFkMiwgeyAweDli
LCAweDhjLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweDE2LCAweGQ5IH19OyByZXR1cm4gaWlk
O30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3RyaW5nRnJvbUlEKFBSSW50MzIgYUlELCBQUlVu
aWNoYXIgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN0cmluZ0Zyb21O
YW1lKGNvbnN0IFBSVW5pY2hhciAqYU5hbWUsIFBSVW5pY2hhciAqKl9yZXR2YWwpID0gMDsKCgog
IHZpcnR1YWwgbnNyZXN1bHQgRm9ybWF0U3RyaW5nRnJvbUlEKFBSSW50MzIgYUlELCBjb25zdCBQ
UlVuaWNoYXIgKipwYXJhbXMsIFBSVWludDMyIGxlbmd0aCwgUFJVbmljaGFyICoqX3JldHZhbCkg
PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGb3JtYXRTdHJpbmdGcm9tTmFtZShjb25zdCBQUlVu
aWNoYXIgKmFOYW1lLCBjb25zdCBQUlVuaWNoYXIgKipwYXJhbXMsIFBSVWludDMyIGxlbmd0aCwg
UFJVbmljaGFyICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFbnVtZXJh
dGlvbihuc0lCaWRpcmVjdGlvbmFsRW51bWVyYXRvciAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0U2ltcGxlRW51bWVyYXRpb24obnNJU2ltcGxlRW51bWVyYXRvciAqKl9y
ZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TG9hZGVkKFBSQm9vbCAqYUxvYWRl
ZCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TG9hZGVkKFBSQm9vbCBhTG9hZGVkKSA9IDA7
Cgp9OwojIDE4NyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN0cmluZ0J1bmRsZS5oIgpjbGFzcyBu
c0lTdHJpbmdCdW5kbGVTZXJ2aWNlIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAg
c3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsw
eGQ4NWExN2MwLCAweGFhN2MsIDB4MTFkMiwgeyAweDliLCAweDhjLCAweDAwLCAweDgwLCAweDVm
LCAweDhhLCAweDE2LCAweGQ5IH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQg
Q3JlYXRlQnVuZGxlKGNvbnN0IGNoYXIgKmFVUkxTcGVjLCBuc0lTdHJpbmdCdW5kbGUgKipfcmV0
dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZUFzeW5jQnVuZGxlKGNvbnN0IGNo
YXIgKmFVUkxTcGVjLCBuc0lTdHJpbmdCdW5kbGUgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFs
IG5zcmVzdWx0IENyZWF0ZUV4dGVuc2libGVCdW5kbGUoY29uc3QgY2hhciAqYVJlZ2lzdHJ5S2V5
LCBuc0lTdHJpbmdCdW5kbGUgKipfcmV0dmFsKSA9IDA7CiMgMjEwICIuLi8uLi9kaXN0L2luY2x1
ZGUvbnNJU3RyaW5nQnVuZGxlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBGb3JtYXRTdGF0dXNNZXNz
YWdlKG5zcmVzdWx0IGFTdGF0dXMsIGNvbnN0IFBSVW5pY2hhciAqYVN0YXR1c0FyZywgUFJVbmlj
aGFyICoqX3JldHZhbCkgPSAwOwojIDIyMiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN0cmluZ0J1
bmRsZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRmx1c2hCdW5kbGVzKHZvaWQpID0gMDsKCn07CiMg
NTMgIm5zSW5zdGFsbC5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUxvY2FsZS5oIiAx
CiMgMzIgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lMb2NhbGUuaCIKY2xhc3MgbnNJTG9jYWxlIDog
cHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJ
SUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDIxMDM1ZWUwLCAweDQ1NTYsIDB4MTFk
MywgeyAweDkxLCAweGNkLCAweDAwLCAweDEwLCAweDVhLCAweGEzLCAweGY3LCAweGRjIH19OyBy
ZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2F0ZWdvcnkoY29uc3QgUFJVbmlj
aGFyICpjYXRlZ29yeSwgUFJVbmljaGFyICoqX3JldHZhbCkgPSAwOwoKfTsKIyA1NCAibnNJbnN0
YWxsLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRXZlbnRRdWV1ZVNlcnZpY2UuaCIg
MQojIDE0ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRXZlbnRRdWV1ZVNlcnZpY2UuaCIKIyAxICIu
Li8uLi9kaXN0L2luY2x1ZGUvbnNJRXZlbnRRdWV1ZS5oIiAxCiMgMTcgIi4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lFdmVudFF1ZXVlLmgiCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5j
bHVkZS9uc3ByL3BydGhyZWFkLmgiIDEKIyAxOCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUV2ZW50
UXVldWUuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9wbGV2ZW50LmgiIDEKIyAxOSAiLi4v
Li4vZGlzdC9pbmNsdWRlL25zSUV2ZW50UXVldWUuaCIgMgojIDMyICIuLi8uLi9kaXN0L2luY2x1
ZGUvbnNJRXZlbnRRdWV1ZS5oIgpjbGFzcyBuc0lFdmVudFF1ZXVlIDogcHVibGljIG5zSVN1cHBv
cnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNv
bnN0IG5zSUlEIGlpZCA9IHsweDE3NmFmYjQxLCAweDAwYTQsIDB4MTFkMywgeyAweDlmLCAweDJh
LCAweDAwLCAweDQwLCAweDA1LCAweDUzLCAweGVlLCAweGYwIH19OyByZXR1cm4gaWlkO30KCgog
IHZpcnR1YWwgbnNyZXN1bHQgSW5pdEV2ZW50KFBMRXZlbnQgKiBhRXZlbnQsIHZvaWQgKiBvd25l
ciwgUExIYW5kbGVFdmVudFByb2MgaGFuZGxlciwgUExEZXN0cm95RXZlbnRQcm9jIGRlc3RydWN0
b3IpID0gMDsKCgogIHZpcnR1YWwgUFJTdGF0dXMgUG9zdEV2ZW50KFBMRXZlbnQgKiBhRXZlbnQp
ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUG9zdFN5bmNocm9ub3VzRXZlbnQoUExFdmVudCAq
IGFFdmVudCwgdm9pZCAqICphUmVzdWx0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFBlbmRp
bmdFdmVudHMoUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFByb2Nl
c3NQZW5kaW5nRXZlbnRzKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRXZlbnRMb29w
KHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRXZlbnRBdmFpbGFibGUoUFJCb29sICYg
YVJlc3VsdCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFdmVudChQTEV2ZW50ICogKl9y
ZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSGFuZGxlRXZlbnQoUExFdmVudCAqIGFF
dmVudCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBXYWl0Rm9yRXZlbnQoUExFdmVudCAqICpf
cmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIFBSSW50MzIgR2V0RXZlbnRRdWV1ZVNlbGVjdEZEKHZv
aWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdChQUkJvb2wgYU5hdGl2ZSkgPSAwOwoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0RnJvbVBSVGhyZWFkKFBSVGhyZWFkICogdGhyZWFkLCBQ
UkJvb2wgYU5hdGl2ZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0RnJvbVBMUXVldWUo
UExFdmVudFF1ZXVlICogYVF1ZXVlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEVudGVyTW9u
aXRvcih2b2lkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEV4aXRNb25pdG9yKHZvaWQpID0g
MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmV2b2tlRXZlbnRzKHZvaWQgKiBvd25lcikgPSAwOwoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQTEV2ZW50UXVldWUoUExFdmVudFF1ZXVlICogKl9yZXR2
YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNRdWV1ZU9uQ3VycmVudFRocmVhZChQUkJv
b2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNRdWV1ZU5hdGl2ZShQUkJv
b2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU3RvcEFjY2VwdGluZ0V2ZW50
cyh2b2lkKSA9IDA7Cgp9OwojIDE1ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRXZlbnRRdWV1ZVNl
cnZpY2UuaCIgMgoKCgoKCgojIDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUv
bnNwci9wcnRocmVhZC5oIiAxCiMgMjIgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lFdmVudFF1ZXVl
U2VydmljZS5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL3BsZXZlbnQuaCIgMQojIDIzICIu
Li8uLi9kaXN0L2luY2x1ZGUvbnNJRXZlbnRRdWV1ZVNlcnZpY2UuaCIgMgojIDMzICIuLi8uLi9k
aXN0L2luY2x1ZGUvbnNJRXZlbnRRdWV1ZVNlcnZpY2UuaCIKY2xhc3MgbnNJVGhyZWFkOwojIDQz
ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRXZlbnRRdWV1ZVNlcnZpY2UuaCIKY2xhc3MgbnNJRXZl
bnRRdWV1ZVNlcnZpY2UgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMg
Y29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkw
ZGMsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEs
IDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQojIDU2ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
RXZlbnRRdWV1ZVNlcnZpY2UuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZVRocmVhZEV2ZW50
UXVldWUodm9pZCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZU1vbml0b3Jl
ZFRocmVhZEV2ZW50UXVldWUodm9pZCkgPSAwOwojIDc1ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
RXZlbnRRdWV1ZVNlcnZpY2UuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IERlc3Ryb3lUaHJlYWRFdmVu
dFF1ZXVlKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlRnJvbUlUaHJlYWQo
bnNJVGhyZWFkICphVGhyZWFkLCBQUkJvb2wgYU5hdGl2ZSwgbnNJRXZlbnRRdWV1ZSAqKl9yZXR2
YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlRnJvbVBMRXZlbnRRdWV1ZShQTEV2
ZW50UXVldWUgKiBhUExFdmVudFF1ZXVlLCBuc0lFdmVudFF1ZXVlICoqX3JldHZhbCkgPSAwOwoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBQdXNoVGhyZWFkRXZlbnRRdWV1ZShuc0lFdmVudFF1ZXVlICoq
X3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBQb3BUaHJlYWRFdmVudFF1ZXVlKG5z
SUV2ZW50UXVldWUgKmFRdWV1ZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUaHJlYWRF
dmVudFF1ZXVlKFBSVGhyZWFkICogYVRocmVhZCwgbnNJRXZlbnRRdWV1ZSAqKl9yZXR2YWwpID0g
MDsKIyAxMDggIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lFdmVudFF1ZXVlU2VydmljZS5oIgogIHZp
cnR1YWwgbnNyZXN1bHQgUmVzb2x2ZUV2ZW50UXVldWUobnNJRXZlbnRRdWV1ZSAqcXVldWVPckNv
bnN0YW50LCBuc0lFdmVudFF1ZXVlICoqX3JldHZhbCkgPSAwOwojIDEyMyAiLi4vLi4vZGlzdC9p
bmNsdWRlL25zSUV2ZW50UXVldWVTZXJ2aWNlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTcGVj
aWFsRXZlbnRRdWV1ZShQUkludDMyIGFRdWV1ZSwgbnNJRXZlbnRRdWV1ZSAqKl9yZXR2YWwpID0g
MDsKCiAgZW51bSB7IENVUlJFTlRfVEhSRUFEX0VWRU5UX1FVRVVFID0gMCB9OwoKICBlbnVtIHsg
VUlfVEhSRUFEX0VWRU5UX1FVRVVFID0gMSB9OwoKfTsKIyA1NSAibnNJbnN0YWxsLmgiIDIKIyAx
ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2VydmljZU1hbmFnZXIuaCIgMQojIDU2ICJuc0luc3Rh
bGwuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiIDEK
IyA1NyAibnNJbnN0YWxsLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJUGVyc2lzdGVu
dFByb3BlcnRpZXMyLmgiIDEKIyAxNyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVBlcnNpc3RlbnRQ
cm9wZXJ0aWVzMi5oIgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lFbnVtZXJhdG9yLmgiIDEK
IyAxOCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVBlcnNpc3RlbnRQcm9wZXJ0aWVzMi5oIiAyCiMg
MSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzQXJyYXkuaCIgMQojIDE0ICIuLi8uLi9k
aXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNBcnJheS5oIgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lDb2xsZWN0aW9uLmgiIDEKIyAyOSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbGxlY3Rpb24u
aCIKY2xhc3MgbnNJQ29sbGVjdGlvbiA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6Cgog
IHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7
MHg4M2I2MDE5YywgMHhjYmM0LCAweDExZDIsIHsgMHg4YywgMHhjYSwgMHgwMCwgMHg2MCwgMHhi
MCwgMHhmYywgMHgxNCwgMHhhMyB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0
IENvdW50KFBSVWludDMyICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEVs
ZW1lbnRBdChQUlVpbnQzMiBpbmRleCwgbnNJU3VwcG9ydHMgKipfcmV0dmFsKSA9IDA7CgoKICB2
aXJ0dWFsIG5zcmVzdWx0IFF1ZXJ5RWxlbWVudEF0KFBSVWludDMyIGluZGV4LCBjb25zdCBuc0lJ
RCAmIHV1aWQsIHZvaWQgKiAqcmVzdWx0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEVs
ZW1lbnRBdChQUlVpbnQzMiBpbmRleCwgbnNJU3VwcG9ydHMgKml0ZW0pID0gMDsKCgogIHZpcnR1
YWwgbnNyZXN1bHQgQXBwZW5kRWxlbWVudChuc0lTdXBwb3J0cyAqaXRlbSkgPSAwOwoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBSZW1vdmVFbGVtZW50KG5zSVN1cHBvcnRzICppdGVtKSA9IDA7CgoKICB2
aXJ0dWFsIG5zcmVzdWx0IEVudW1lcmF0ZShuc0lFbnVtZXJhdG9yICoqX3JldHZhbCkgPSAwOwoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBDbGVhcih2b2lkKSA9IDA7Cgp9OwojIDE1ICIuLi8uLi9kaXN0
L2luY2x1ZGUvbnNJU3VwcG9ydHNBcnJheS5oIiAyCgoKCgoKCmNsYXNzIG5zSUJpZGlyZWN0aW9u
YWxFbnVtZXJhdG9yOwojIDM0ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNBcnJheS5o
Igp0eXBlZGVmIFBSQm9vbCAoKm5zSVN1cHBvcnRzQXJyYXlFbnVtRnVuYykobnNJU3VwcG9ydHMq
IGFFbGVtZW50LCB2b2lkICphRGF0YSk7CiMgNDQgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBw
b3J0c0FycmF5LmgiCmNsYXNzIG5zSVN1cHBvcnRzQXJyYXkgOiBwdWJsaWMgbnNJQ29sbGVjdGlv
biB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25z
dCBuc0lJRCBpaWQgPSB7MHg3OTFlYWZhMCwgMHhiOWU2LCAweDExZDEsIHsgMHg4MCwgMHgzMSwg
MHgwMCwgMHg2MCwgMHgwOCwgMHgxNSwgMHg5YiwgMHg1YSB9fTsgcmV0dXJuIGlpZDt9CgoKICB2
aXJ0dWFsIFBSQm9vbCBFcXVhbHMoY29uc3QgbnNJU3VwcG9ydHNBcnJheSAqb3RoZXIpID0gMDsK
CgogIHZpcnR1YWwgbnNJU3VwcG9ydHMgKiBFbGVtZW50QXQoUFJVaW50MzIgYUluZGV4KSA9IDA7
CgoKICB2aXJ0dWFsIFBSSW50MzIgSW5kZXhPZihjb25zdCBuc0lTdXBwb3J0cyAqYVBvc3NpYmxl
RWxlbWVudCkgPSAwOwoKCiAgdmlydHVhbCBQUkludDMyIEluZGV4T2ZTdGFydGluZ0F0KGNvbnN0
IG5zSVN1cHBvcnRzICphUG9zc2libGVFbGVtZW50LCBQUlVpbnQzMiBhU3RhcnRJbmRleCkgPSAw
OwoKCiAgdmlydHVhbCBQUkludDMyIExhc3RJbmRleE9mKGNvbnN0IG5zSVN1cHBvcnRzICphUG9z
c2libGVFbGVtZW50KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEluZGV4T2YobnNJU3Vw
cG9ydHMgKmFQb3NzaWJsZUVsZW1lbnQsIFBSSW50MzIgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0SW5kZXhPZlN0YXJ0aW5nQXQobnNJU3VwcG9ydHMgKmFQb3NzaWJsZUVs
ZW1lbnQsIFBSVWludDMyIGFTdGFydEluZGV4LCBQUkludDMyICpfcmV0dmFsKSA9IDA7CgoKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldExhc3RJbmRleE9mKG5zSVN1cHBvcnRzICphUG9zc2libGVFbGVt
ZW50LCBQUkludDMyICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIFBSQm9vbCBJbnNlcnRFbGVt
ZW50QXQobnNJU3VwcG9ydHMgKmFFbGVtZW50LCBQUlVpbnQzMiBhSW5kZXgpID0gMDsKCgogIHZp
cnR1YWwgUFJCb29sIFJlcGxhY2VFbGVtZW50QXQobnNJU3VwcG9ydHMgKmFFbGVtZW50LCBQUlVp
bnQzMiBhSW5kZXgpID0gMDsKCgogIHZpcnR1YWwgUFJCb29sIFJlbW92ZUVsZW1lbnRBdChQUlVp
bnQzMiBhSW5kZXgpID0gMDsKCgogIHZpcnR1YWwgUFJCb29sIFJlbW92ZUxhc3RFbGVtZW50KGNv
bnN0IG5zSVN1cHBvcnRzICphRWxlbWVudCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEZWxl
dGVMYXN0RWxlbWVudChuc0lTdXBwb3J0cyAqYUVsZW1lbnQpID0gMDsKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgRGVsZXRlRWxlbWVudEF0KFBSVWludDMyIGFJbmRleCkgPSAwOwoKCiAgdmlydHVhbCBQ
UkJvb2wgQXBwZW5kRWxlbWVudHMobnNJU3VwcG9ydHNBcnJheSAqYUVsZW1lbnRzKSA9IDA7CgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IENvbXBhY3Qodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBQUkJvb2wg
RW51bWVyYXRlRm9yd2FyZHMobnNJU3VwcG9ydHNBcnJheUVudW1GdW5jIGFGdW5jLCB2b2lkICog
YURhdGEpID0gMDsKCgogIHZpcnR1YWwgUFJCb29sIEVudW1lcmF0ZUJhY2t3YXJkcyhuc0lTdXBw
b3J0c0FycmF5RW51bUZ1bmMgYUZ1bmMsIHZvaWQgKiBhRGF0YSkgPSAwOwoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBDbG9uZShuc0lTdXBwb3J0c0FycmF5ICoqX3JldHZhbCkgPSAwOwoKcHJpdmF0ZToK
CiAgdmlydHVhbCBQUkJvb2wgb3BlcmF0b3I9PShjb25zdCBuc0lTdXBwb3J0c0FycmF5JiBvdGhl
cikgPSAwOwogIHZpcnR1YWwgbnNJU3VwcG9ydHMqIG9wZXJhdG9yW10oUFJVaW50MzIgYUluZGV4
KSA9IDA7Cn07CiMgMzI1ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHNBcnJheS5oIgpl
eHRlcm4gbnNyZXN1bHQKTlNfTmV3SVN1cHBvcnRzQXJyYXkobnNJU3VwcG9ydHNBcnJheSoqIGFJ
bnN0YW5jZVB0clJlc3VsdCk7CgpleHRlcm4gbnNyZXN1bHQKTlNfTmV3SVN1cHBvcnRzQXJyYXlF
bnVtZXJhdG9yKG5zSVN1cHBvcnRzQXJyYXkqIGFycmF5LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJQmlkaXJlY3Rpb25hbEVudW1lcmF0b3IqICphSW5zdGFuY2VQdHJSZXN1bHQp
OwojIDE5ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJUGVyc2lzdGVudFByb3BlcnRpZXMyLmgiIDIK
IyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJSW5wdXRTdHJlYW0uaCIgMQojIDE3ICIuLi8uLi9k
aXN0L2luY2x1ZGUvbnNJSW5wdXRTdHJlYW0uaCIKY2xhc3MgbnNJSW5wdXRTdHJlYW07CgpjbGFz
cyBuc0lJbnB1dFN0cmVhbU9ic2VydmVyOwojIDMxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJSW5w
dXRTdHJlYW0uaCIKdHlwZWRlZiBuc3Jlc3VsdCAoKiBuc1dyaXRlU2VnbWVudEZ1bikobnNJSW5w
dXRTdHJlYW0qIGluLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk
KiBjbG9zdXJlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyKiBmcm9tUmF3U2VnbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUFJVaW50MzIgdG9PZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBSVWludDMyIGNvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQUlVpbnQzMiAqd3JpdGVDb3VudCk7CiMgNDUgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lJbnB1
dFN0cmVhbS5oIgpjbGFzcyBuc0lJbnB1dFN0cmVhbSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBw
dWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJ
RCBpaWQgPSB7MHhmYTljN2Y2YywgMHg2MWIzLCAweDExZDQsIHsgMHg5OCwgMHg3NywgMHgwMCwg
MHhjMCwgMHg0ZiwgMHhhMCwgMHhjZiwgMHg0YSB9fTsgcmV0dXJuIGlpZDt9CgoKCgoKICB2aXJ0
dWFsIG5zcmVzdWx0IENsb3NlKHZvaWQpID0gMDsKIyA2MyAiLi4vLi4vZGlzdC9pbmNsdWRlL25z
SUlucHV0U3RyZWFtLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBBdmFpbGFibGUoUFJVaW50MzIgKl9y
ZXR2YWwpID0gMDsKIyA3NCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUlucHV0U3RyZWFtLmgiCiAg
dmlydHVhbCBuc3Jlc3VsdCBSZWFkKGNoYXIgKiBidWYsIFBSVWludDMyIGNvdW50LCBQUlVpbnQz
MiAqX3JldHZhbCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVhZFNlZ21lbnRzKG5z
V3JpdGVTZWdtZW50RnVuIHdyaXRlciwgdm9pZCAqIGNsb3N1cmUsIFBSVWludDMyIGNvdW50LCBQ
UlVpbnQzMiAqX3JldHZhbCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROb25CbG9j
a2luZyhQUkJvb2wgKmFOb25CbG9ja2luZykgPSAwOwojIDk2ICIuLi8uLi9kaXN0L2luY2x1ZGUv
bnNJSW5wdXRTdHJlYW0uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE9ic2VydmVyKG5zSUlucHV0
U3RyZWFtT2JzZXJ2ZXIgKiAqYU9ic2VydmVyKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRP
YnNlcnZlcihuc0lJbnB1dFN0cmVhbU9ic2VydmVyICogYU9ic2VydmVyKSA9IDA7Cgp9OwojIDIx
MSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUlucHV0U3RyZWFtLmgiCmNsYXNzIG5zSUlucHV0U3Ry
ZWFtT2JzZXJ2ZXIgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29u
c3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4MDE5ZDY3Y2Ms
IDB4NjFiNCwgMHgxMWQ0LCB7IDB4OTgsIDB4NzcsIDB4MDAsIDB4YzAsIDB4NGYsIDB4YTAsIDB4
Y2YsIDB4NGEgfX07IHJldHVybiBpaWQ7fQoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBPbkVtcHR5
KG5zSUlucHV0U3RyZWFtICpvdXRTdHIpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgT25D
bG9zZShuc0lJbnB1dFN0cmVhbSAqb3V0U3RyKSA9IDA7Cgp9OwojIDIwICIuLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJUGVyc2lzdGVudFByb3BlcnRpZXMyLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1
ZGUvbnNJT3V0cHV0U3RyZWFtLmgiIDEKIyAxNyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSU91dHB1
dFN0cmVhbS5oIgpjbGFzcyBuc0lPdXRwdXRTdHJlYW07CgpjbGFzcyBuc0lPdXRwdXRTdHJlYW1P
YnNlcnZlcjsKCmNsYXNzIG5zSUlucHV0U3RyZWFtOwojIDMzICIuLi8uLi9kaXN0L2luY2x1ZGUv
bnNJT3V0cHV0U3RyZWFtLmgiCnR5cGVkZWYgbnNyZXN1bHQgKCogbnNSZWFkU2VnbWVudEZ1biko
bnNJT3V0cHV0U3RyZWFtKiBvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdm9pZCogY2xvc3VyZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFyKiB0b1Jhd1NlZ21lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UFJVaW50MzIgZnJvbU9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQUlVpbnQzMiBjb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
UlVpbnQzMiAqcmVhZENvdW50KTsKIyA0NyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSU91dHB1dFN0
cmVhbS5oIgpjbGFzcyBuc0lPdXRwdXRTdHJlYW0gOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVi
bGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQg
aWlkID0gezB4MGQwYWNkMmEsIDB4NjFiNCwgMHgxMWQ0LCB7IDB4OTgsIDB4NzcsIDB4MDAsIDB4
YzAsIDB4NGYsIDB4YTAsIDB4Y2YsIDB4NGEgfX07IHJldHVybiBpaWQ7fQoKCgoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBDbG9zZSh2b2lkKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEZsdXNo
KHZvaWQpID0gMDsKIyA3MiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSU91dHB1dFN0cmVhbS5oIgog
IHZpcnR1YWwgbnNyZXN1bHQgV3JpdGUoY29uc3QgY2hhciAqYnVmLCBQUlVpbnQzMiBjb3VudCwg
UFJVaW50MzIgKl9yZXR2YWwpID0gMDsKIyA4OCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSU91dHB1
dFN0cmVhbS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgV3JpdGVGcm9tKG5zSUlucHV0U3RyZWFtICpp
blN0ciwgUFJVaW50MzIgY291bnQsIFBSVWludDMyICpfcmV0dmFsKSA9IDA7CgoKCgoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBXcml0ZVNlZ21lbnRzKG5zUmVhZFNlZ21lbnRGdW4gcmVhZGVyLCB2b2lk
ICogY2xvc3VyZSwgUFJVaW50MzIgY291bnQsIFBSVWludDMyICpfcmV0dmFsKSA9IDA7CgoKCgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5vbkJsb2NraW5nKFBSQm9vbCAqYU5vbkJsb2NraW5nKSA9
IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXROb25CbG9ja2luZyhQUkJvb2wgYU5vbkJsb2NraW5n
KSA9IDA7CiMgMTExICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJT3V0cHV0U3RyZWFtLmgiCiAgdmly
dHVhbCBuc3Jlc3VsdCBHZXRPYnNlcnZlcihuc0lPdXRwdXRTdHJlYW1PYnNlcnZlciAqICphT2Jz
ZXJ2ZXIpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE9ic2VydmVyKG5zSU91dHB1dFN0cmVh
bU9ic2VydmVyICogYU9ic2VydmVyKSA9IDA7Cgp9OwojIDI0MiAiLi4vLi4vZGlzdC9pbmNsdWRl
L25zSU91dHB1dFN0cmVhbS5oIgpjbGFzcyBuc0lPdXRwdXRTdHJlYW1PYnNlcnZlciA6IHB1Ymxp
YyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkg
e3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgxMjMxNDE5NCwgMHg2MWI0LCAweDExZDQsIHsg
MHg5OCwgMHg3NywgMHgwMCwgMHhjMCwgMHg0ZiwgMHhhMCwgMHhjZiwgMHg0YSB9fTsgcmV0dXJu
IGlpZDt9CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IE9uV3JpdGUobnNJT3V0cHV0U3RyZWFtICpp
blN0ciwgUFJVaW50MzIgYW1vdW50KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IE9uRnVs
bChuc0lPdXRwdXRTdHJlYW0gKmluU3RyKSA9IDA7Cgp9OwojIDIxICIuLi8uLi9kaXN0L2luY2x1
ZGUvbnNJUGVyc2lzdGVudFByb3BlcnRpZXMyLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUv
bnNJUHJvcGVydGllcy5oIiAxCiMgMjIgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQZXJzaXN0ZW50
UHJvcGVydGllczIuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lELmgiIDEKIyAyMyAi
Li4vLi4vZGlzdC9pbmNsdWRlL25zSVBlcnNpc3RlbnRQcm9wZXJ0aWVzMi5oIiAyCiMgMSAiLi4v
Li4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiIDEKIyAyNCAiLi4vLi4vZGlzdC9pbmNsdWRlL25z
SVBlcnNpc3RlbnRQcm9wZXJ0aWVzMi5oIiAyCiMgMzIgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQ
ZXJzaXN0ZW50UHJvcGVydGllczIuaCIKY2xhc3MgbnNJUHJvcGVydHlFbGVtZW50IDogcHVibGlj
IG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7
c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDI4M2VlNjQ2LCAweDFhZWYsIDB4MTFkNCwgeyAw
eDk4LCAweGIzLCAweDAwLCAweGMwLCAweDRmLCAweGEwLCAweGNlLCAweDlhIH19OyByZXR1cm4g
aWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0S2V5KG5zU3RyaW5nICogYUtleSkgPSAwOwoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRWYWx1ZShuc1N0cmluZyAqIGFWYWx1ZSkgPSAwOwoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRLZXkoUFJVbmljaGFyICoqX3JldHZhbCkgPSAwOwoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBHZXRWYWx1ZShQUlVuaWNoYXIgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDEz
MiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVBlcnNpc3RlbnRQcm9wZXJ0aWVzMi5oIgpzdGF0aWMg
Y29uc3QgbnNDSUQga1Byb3BlcnR5RWxlbWVudENJRCA9IHsgMHgyODNlZTY0NSwgMHgxYWVmLCAw
eDExZDQsIHsgMHg5OCwgMHhiMywgMHgwLCAweGMwLCAweDRmLCAweGEwLCAweGNlLCAweDlhIH0g
fTsKCgoKCgoKCnN0YXRpYyBjb25zdCBuc0NJRCBrUGVyc2lzdGVudFByb3BlcnRpZXNDSUQgPSB7
IDB4MjI0NWU1NzMsIDB4OTQ2NCwgMHgxMWQyLCB7IDB4OWIsIDB4OGIsIDB4MCwgMHg4MCwgMHg1
ZiwgMHg4YSwgMHgxNiwgMHhkOSB9IH07CgoKY2xhc3MgbnNJUGVyc2lzdGVudFByb3BlcnRpZXMg
OiBwdWJsaWMgbnNJUHJvcGVydGllcwp7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdl
dElJRCgpIHsgc3RhdGljIG5zSUlEIGlpZCA9IHsgMHgxYTE4MGY2MCwgMHg5M2IyLCAweDExZDIs
IHsgMHg5YiwgMHg4YiwgMHgwLCAweDgwLCAweDVmLCAweDhhLCAweDE2LCAweGQ5IH0gfTsgcmV0
dXJuIGlpZDsgfQogIHZpcnR1YWwgbnNyZXN1bHQgTG9hZChuc0lJbnB1dFN0cmVhbSogYUluKSA9
IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTYXZlKG5zSU91dHB1dFN0cmVhbSogYU91dCwgY29uc3Qg
bnNTdHJpbmcmIGFIZWFkZXIpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFN1YmNsYXNzKG5zSVBl
cnNpc3RlbnRQcm9wZXJ0aWVzKiBhU3ViY2xhc3MpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBFbnVtZXJhdGVQcm9wZXJ0aWVzKG5zSUJpZGlyZWN0aW9uYWxFbnVtZXJhdG9yKiogYVJlc3Vs
dCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2ltcGxlRW51bWVyYXRlUHJvcGVydGllcyhuc0lT
aW1wbGVFbnVtZXJhdG9yKiogYVJlc3VsdCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRT
dHJpbmdQcm9wZXJ0eShjb25zdCBuc1N0cmluZyYgYUtleSwgbnNTdHJpbmcmIGFWYWx1ZSkgPSAw
OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0U3RyaW5nUHJvcGVydHkoY29uc3QgbnNTdHJpbmcmIGFL
ZXksIG5zU3RyaW5nJiBhTmV3VmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c1N0cmluZyYgYU9sZFZhbHVlKSA9IDA7Cn07CiMgNTggIm5zSW5zdGFsbC5oIiAyCiMgMSAiLi4v
Li4vZGlzdC9pbmNsdWRlL25zSUVudW1lcmF0b3IuaCIgMQojIDU5ICJuc0luc3RhbGwuaCIgMgoj
IDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0laaXBSZWFkZXIuaCIgMQojIDE3ICIuLi8uLi9kaXN0
L2luY2x1ZGUvbnNJWmlwUmVhZGVyLmgiCmNsYXNzIG5zSVNpbXBsZUVudW1lcmF0b3I7CgpjbGFz
cyBuc0lJbnB1dFN0cmVhbTsKCmNsYXNzIG5zSUZpbGU7CiMgMzEgIi4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0laaXBSZWFkZXIuaCIKY2xhc3MgbnNJWmlwRW50cnkgOiBwdWJsaWMgbnNJU3VwcG9ydHMg
ewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3Qg
bnNJSUQgaWlkID0gezB4NmNhNWU0M2UsIDB4OTYzMiwgMHgxMWQzLCB7IDB4OGMsIDB4ZDksIDB4
MDAsIDB4NjAsIDB4YjAsIDB4ZmMsIDB4MTQsIDB4YTMgfX07IHJldHVybiBpaWQ7fQoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBHZXROYW1lKGNoYXIgKiAqYU5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0Q29tcHJlc3Npb24oUFJVaW50MTYgKmFDb21wcmVzc2lvbikgPSAwOwoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBHZXRTaXplKFBSVWludDMyICphU2l6ZSkgPSAwOwoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXRSZWFsU2l6ZShQUlVpbnQzMiAqYVJlYWxTaXplKSA9IDA7CgoKICB2aXJ0dWFs
IG5zcmVzdWx0IEdldENSQzMyKFBSVWludDMyICphQ1JDMzIpID0gMDsKCn07CiMgMTQ3ICIuLi8u
Li9kaXN0L2luY2x1ZGUvbnNJWmlwUmVhZGVyLmgiCmNsYXNzIG5zSVppcFJlYWRlciA6IHB1Ymxp
YyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkg
e3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg2ZmY2YTk2NiwgMHg5NjMyLCAweDExZDMsIHsg
MHg4YywgMHhkOSwgMHgwMCwgMHg2MCwgMHhiMCwgMHhmYywgMHgxNCwgMHhhMyB9fTsgcmV0dXJu
IGlpZDt9CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXQobnNJRmlsZSAqemlwRmlsZSkgPSAw
OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGaWxlKG5zSUZpbGUgKiAqYUZpbGUpID0gMDsKCgoK
CgogIHZpcnR1YWwgbnNyZXN1bHQgT3Blbih2b2lkKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBDbG9zZSh2b2lkKSA9IDA7CiMgMTgxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJWmlwUmVh
ZGVyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBUZXN0KGNvbnN0IGNoYXIgKmFFbnRyeU5hbWUpID0g
MDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRXh0cmFjdChjb25zdCBjaGFyICp6aXBFbnRyeSwg
bnNJRmlsZSAqb3V0RmlsZSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFbnRyeShj
b25zdCBjaGFyICp6aXBFbnRyeSwgbnNJWmlwRW50cnkgKipfcmV0dmFsKSA9IDA7CgoKCgoKICB2
aXJ0dWFsIG5zcmVzdWx0IEZpbmRFbnRyaWVzKGNvbnN0IGNoYXIgKmFQYXR0ZXJuLCBuc0lTaW1w
bGVFbnVtZXJhdG9yICoqX3JldHZhbCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJ
bnB1dFN0cmVhbShjb25zdCBjaGFyICp6aXBFbnRyeSwgbnNJSW5wdXRTdHJlYW0gKipfcmV0dmFs
KSA9IDA7Cgp9OwojIDMzOSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVppcFJlYWRlci5oIgpjbGFz
cyBuc0laaXBSZWFkZXJDYWNoZSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0
YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg1
MmM0NWQ4NiwgMHgwY2MzLCAweDExZDQsIHsgMHg5OCwgMHg2ZSwgMHgwMCwgMHhjMCwgMHg0Ziwg
MHhhMCwgMHhjZiwgMHg0YSB9fTsgcmV0dXJuIGlpZDt9CiMgMzUyICIuLi8uLi9kaXN0L2luY2x1
ZGUvbnNJWmlwUmVhZGVyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0KFBSVWludDMyIGNhY2hl
U2l6ZSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRaaXAobnNJRmlsZSAqemlwRmls
ZSwgbnNJWmlwUmVhZGVyICoqX3JldHZhbCkgPSAwOwoKfTsKIyA2MCAibnNJbnN0YWxsLmgiIDIK
IyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ2hyb21lUmVnaXN0cnkuaCIgMQojIDE0ICIuLi8u
Li9kaXN0L2luY2x1ZGUvbnNJQ2hyb21lUmVnaXN0cnkuaCIKIyAxICIuLi8uLi9kaXN0L2luY2x1
ZGUvbnNJVVJMLmgiIDEKIyAxMCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVVSTC5oIgojIDEgIi4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lVUkkuaCIgMQojIDYxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
VVJJLmgiCmNsYXNzIG5zSVVSSSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0
YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgw
N2EyMmNjMCwgMHgwY2U1LCAweDExZDMsIHsgMHg5MywgMHgzMSwgMHgwMCwgMHgxMCwgMHg0Yiwg
MHhhMCwgMHhmZCwgMHg0MCB9fTsgcmV0dXJuIGlpZDt9CiMgNzMgIi4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lVUkkuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNwZWMoY2hhciAqICphU3BlYykgPSAw
OwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0U3BlYyhjb25zdCBjaGFyICogYVNwZWMpID0gMDsKCgoK
CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcmVQYXRoKGNoYXIgKiAqYVByZVBhdGgpID0gMDsK
ICB2aXJ0dWFsIG5zcmVzdWx0IFNldFByZVBhdGgoY29uc3QgY2hhciAqIGFQcmVQYXRoKSA9IDA7
CiMgOTMgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lVUkkuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdl
dFNjaGVtZShjaGFyICogKmFTY2hlbWUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNjaGVt
ZShjb25zdCBjaGFyICogYVNjaGVtZSkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
UHJlSG9zdChjaGFyICogKmFQcmVIb3N0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQcmVI
b3N0KGNvbnN0IGNoYXIgKiBhUHJlSG9zdCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRV
c2VybmFtZShjaGFyICogKmFVc2VybmFtZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VXNl
cm5hbWUoY29uc3QgY2hhciAqIGFVc2VybmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH
ZXRQYXNzd29yZChjaGFyICogKmFQYXNzd29yZCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0
UGFzc3dvcmQoY29uc3QgY2hhciAqIGFQYXNzd29yZCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0SG9zdChjaGFyICogKmFIb3N0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRI
b3N0KGNvbnN0IGNoYXIgKiBhSG9zdCkgPSAwOwojIDEzMCAiLi4vLi4vZGlzdC9pbmNsdWRlL25z
SVVSSS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UG9ydChQUkludDMyICphUG9ydCkgPSAwOwog
IHZpcnR1YWwgbnNyZXN1bHQgU2V0UG9ydChQUkludDMyIGFQb3J0KSA9IDA7CgoKCgoKCgogIHZp
cnR1YWwgbnNyZXN1bHQgR2V0UGF0aChjaGFyICogKmFQYXRoKSA9IDA7CiAgdmlydHVhbCBuc3Jl
c3VsdCBTZXRQYXRoKGNvbnN0IGNoYXIgKiBhUGF0aCkgPSAwOwojIDE1MSAiLi4vLi4vZGlzdC9p
bmNsdWRlL25zSVVSSS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRXF1YWxzKG5zSVVSSSAqb3RoZXIs
IFBSQm9vbCAqX3JldHZhbCkgPSAwOwojIDE2MCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVVSSS5o
IgogIHZpcnR1YWwgbnNyZXN1bHQgU2NoZW1lSXMoY29uc3QgY2hhciAqc2NoZW1lLCBQUkJvb2wg
Kl9yZXR2YWwpID0gMDsKIyAxNjkgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lVUkkuaCIKICB2aXJ0
dWFsIG5zcmVzdWx0IENsb25lKG5zSVVSSSAqKl9yZXR2YWwpID0gMDsKIyAxNzggIi4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lVUkkuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFJlc29sdmUoY29uc3QgY2hh
ciAqcmVsYXRpdmVQYXRoLCBjaGFyICoqX3JldHZhbCkgPSAwOwoKfTsKIyAxMSAiLi4vLi4vZGlz
dC9pbmNsdWRlL25zSVVSTC5oIiAyCiMgNjEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lVUkwuaCIK
Y2xhc3MgbnNJVVJMIDogcHVibGljIG5zSVVSSSB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBu
c0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhkNjExNjk3MCwgMHg4
MDM0LCAweDExZDMsIHsgMHg5MywgMHg5OSwgMHgwMCwgMHgxMCwgMHg0YiwgMHhhMCwgMHhmZCwg
MHg0MCB9fTsgcmV0dXJuIGlpZDt9CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RmlsZVBh
dGgoY2hhciAqICphRmlsZVBhdGgpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEZpbGVQYXRo
KGNvbnN0IGNoYXIgKiBhRmlsZVBhdGgpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl
dFBhcmFtKGNoYXIgKiAqYVBhcmFtKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQYXJhbShj
b25zdCBjaGFyICogYVBhcmFtKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRRdWVy
eShjaGFyICogKmFRdWVyeSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UXVlcnkoY29uc3Qg
Y2hhciAqIGFRdWVyeSkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UmVmKGNoYXIg
KiAqYVJlZikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UmVmKGNvbnN0IGNoYXIgKiBhUmVm
KSA9IDA7CiMgMTEyICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJVVJMLmgiCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXREaXJlY3RvcnkoY2hhciAqICphRGlyZWN0b3J5KSA9IDA7CiAgdmlydHVhbCBuc3Jl
c3VsdCBTZXREaXJlY3RvcnkoY29uc3QgY2hhciAqIGFEaXJlY3RvcnkpID0gMDsKIyAxMjUgIi4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lVUkwuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZpbGVOYW1l
KGNoYXIgKiAqYUZpbGVOYW1lKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRGaWxlTmFtZShj
b25zdCBjaGFyICogYUZpbGVOYW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZpbGVC
YXNlTmFtZShjaGFyICogKmFGaWxlQmFzZU5hbWUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl
dEZpbGVCYXNlTmFtZShjb25zdCBjaGFyICogYUZpbGVCYXNlTmFtZSkgPSAwOwoKCgoKCgogIHZp
cnR1YWwgbnNyZXN1bHQgR2V0RmlsZUV4dGVuc2lvbihjaGFyICogKmFGaWxlRXh0ZW5zaW9uKSA9
IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRGaWxlRXh0ZW5zaW9uKGNvbnN0IGNoYXIgKiBhRmls
ZUV4dGVuc2lvbikgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEVzY2FwZWRRdWVy
eShjaGFyICogKmFFc2NhcGVkUXVlcnkpID0gMDsKCn07CiMgMzQzICIuLi8uLi9kaXN0L2luY2x1
ZGUvbnNJVVJMLmgiCmNsYXNzIG5zSVN0YW5kYXJkVVJMIDogcHVibGljIG5zSVN1cHBvcnRzIHsK
IHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5z
SUlEIGlpZCA9IHsweDg3OTMzNzBhLCAweDMxMWYsIDB4MTFkNCwgeyAweDk4LCAweDc2LCAweDAw
LCAweGMwLCAweDRmLCAweGEwLCAweGNmLCAweDRhIH19OyByZXR1cm4gaWlkO30KCiAgZW51bSB7
IFVSTFRZUEVfU1RBTkRBUkQgPSAxVSB9OwoKICBlbnVtIHsgVVJMVFlQRV9BVVRIT1JJVFkgPSAy
VSB9OwoKICBlbnVtIHsgVVJMVFlQRV9OT19BVVRIT1JJVFkgPSAzVSB9OwoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBJbml0KFBSVWludDMyIHVybFR5cGUsIFBSSW50MzIgZGVmYXVsdFBvcnQsIGNvbnN0
IGNoYXIgKmluaXRpYWxTcGVjLCBuc0lVUkkgKmluaXRpYWxCYXNlVVJJKSA9IDA7Cgp9OwojIDE1
ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJQ2hyb21lUmVnaXN0cnkuaCIgMgojIDI5ICIuLi8uLi9k
aXN0L2luY2x1ZGUvbnNJQ2hyb21lUmVnaXN0cnkuaCIKY2xhc3MgbnNJRG9jU2hlbGw7CiMgMzkg
Ii4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDaHJvbWVSZWdpc3RyeS5oIgpjbGFzcyBuc0lDaHJvbWVS
ZWdpc3RyeSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBu
c0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhkOGM3ZDhhMSwgMHhl
ODRjLCAweDExZDIsIHsgMHhiZiwgMHg4NywgMHgwMCwgMHgxMCwgMHg1YSwgMHgxYiwgMHgwNiwg
MHgyNyB9fTsgcmV0dXJuIGlpZDt9CiMgNjMgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDaHJvbWVS
ZWdpc3RyeS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ2Fub25pZnkobnNJVVJJICphQ2hyb21lVVJM
KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ29udmVydENocm9tZVVSTChuc0lVUkkg
KmFDaHJvbWVVUkwsIGNoYXIgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl
dE92ZXJsYXlzKG5zSVVSSSAqYUNocm9tZVVSTCwgbnNJU2ltcGxlRW51bWVyYXRvciAqKl9yZXR2
YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3R5bGVTaGVldHMobnNJVVJJICphQ2hy
b21lVVJMLCBuc0lTdXBwb3J0c0FycmF5ICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBSZWxvYWRDaHJvbWUodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWZyZXNo
U2tpbnModm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZWxlY3RTa2luKGNvbnN0IFBS
VW5pY2hhciAqc2tpbk5hbWUsIFBSQm9vbCB1c2VQcm9maWxlKSA9IDA7CgoKICB2aXJ0dWFsIG5z
cmVzdWx0IFNlbGVjdExvY2FsZShjb25zdCBQUlVuaWNoYXIgKmxvY2FsZU5hbWUsIFBSQm9vbCB1
c2VQcm9maWxlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IERlc2VsZWN0U2tpbihjb25zdCBQ
UlVuaWNoYXIgKnNraW5OYW1lLCBQUkJvb2wgdXNlUHJvZmlsZSkgPSAwOwoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBEZXNlbGVjdExvY2FsZShjb25zdCBQUlVuaWNoYXIgKmxvY2FsZU5hbWUsIFBSQm9v
bCB1c2VQcm9maWxlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzU2tpblNlbGVjdGVkKGNv
bnN0IFBSVW5pY2hhciAqc2tpbk5hbWUsIFBSQm9vbCB1c2VQcm9maWxlLCBQUkJvb2wgKl9yZXR2
YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNMb2NhbGVTZWxlY3RlZChjb25zdCBQUlVu
aWNoYXIgKmxvY2FsZU5hbWUsIFBSQm9vbCB1c2VQcm9maWxlLCBQUkJvb2wgKl9yZXR2YWwpID0g
MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2VsZWN0U2tpbkZvclBhY2thZ2UoY29uc3QgUFJVbmlj
aGFyICpza2luTmFtZSwgY29uc3QgUFJVbmljaGFyICpwYWNrYWdlTmFtZSwgUFJCb29sIHVzZVBy
b2ZpbGUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2VsZWN0TG9jYWxlRm9yUGFja2FnZShj
b25zdCBQUlVuaWNoYXIgKmxvY2FsZU5hbWUsIGNvbnN0IFBSVW5pY2hhciAqcGFja2FnZU5hbWUs
IFBSQm9vbCB1c2VQcm9maWxlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IERlc2VsZWN0U2tp
bkZvclBhY2thZ2UoY29uc3QgUFJVbmljaGFyICpza2luTmFtZSwgY29uc3QgUFJVbmljaGFyICpw
YWNrYWdlTmFtZSwgUFJCb29sIHVzZVByb2ZpbGUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg
RGVzZWxlY3RMb2NhbGVGb3JQYWNrYWdlKGNvbnN0IFBSVW5pY2hhciAqbG9jYWxlTmFtZSwgY29u
c3QgUFJVbmljaGFyICpwYWNrYWdlTmFtZSwgUFJCb29sIHVzZVByb2ZpbGUpID0gMDsKCgogIHZp
cnR1YWwgbnNyZXN1bHQgSXNTa2luU2VsZWN0ZWRGb3JQYWNrYWdlKGNvbnN0IFBSVW5pY2hhciAq
c2tpbk5hbWUsIGNvbnN0IFBSVW5pY2hhciAqcGFja2FnZU5hbWUsIFBSQm9vbCB1c2VQcm9maWxl
LCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNMb2NhbGVTZWxl
Y3RlZEZvclBhY2thZ2UoY29uc3QgUFJVbmljaGFyICpsb2NhbGVOYW1lLCBjb25zdCBQUlVuaWNo
YXIgKnBhY2thZ2VOYW1lLCBQUkJvb2wgdXNlUHJvZmlsZSwgUFJCb29sICpfcmV0dmFsKSA9IDA7
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNlbGVjdExvY2FsZUZvclByb2ZpbGUoY29uc3QgUFJVbmlj
aGFyICpsb2NhbGVOYW1lLCBjb25zdCBQUlVuaWNoYXIgKnByb2ZpbGVQYXRoKSA9IDA7CgoKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldFNlbGVjdGVkTG9jYWxlKGNvbnN0IFBSVW5pY2hhciAqcGFja2Fn
ZU5hbWUsIFBSVW5pY2hhciAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5z
dGFsbFNraW4oY29uc3QgY2hhciAqYmFzZVVSTCwgUFJCb29sIHVzZVByb2ZpbGUsIFBSQm9vbCBh
bGxvd1NjcmlwdHMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgVW5pbnN0YWxsU2tpbihjb25z
dCBQUlVuaWNoYXIgKnNraW5OYW1lLCBQUkJvb2wgdXNlUHJvZmlsZSkgPSAwOwoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBJbnN0YWxsTG9jYWxlKGNvbnN0IGNoYXIgKmJhc2VVUkwsIFBSQm9vbCB1c2VQ
cm9maWxlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFVuaW5zdGFsbExvY2FsZShjb25zdCBQ
UlVuaWNoYXIgKmxvY2FsZU5hbWUsIFBSQm9vbCB1c2VQcm9maWxlKSA9IDA7CgoKICB2aXJ0dWFs
IG5zcmVzdWx0IEluc3RhbGxQYWNrYWdlKGNvbnN0IGNoYXIgKmJhc2VVUkwsIFBSQm9vbCB1c2VQ
cm9maWxlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFVuaW5zdGFsbFBhY2thZ2UoY29uc3Qg
UFJVbmljaGFyICpwYWNrYWdlTmFtZSwgUFJCb29sIHVzZVByb2ZpbGUpID0gMDsKCgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0QmFja3N0b3BTaGVldHMobnNJRG9jU2hlbGwgKmRvY1NoZWxsLCBuc0lT
dXBwb3J0c0FycmF5ICoqc3R5bGVTaGVldHMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
VXNlclNoZWV0cyhQUkJvb2wgdXNlQ2hyb21lU2hlZXRzLCBuc0lTdXBwb3J0c0FycmF5ICoqc3R5
bGVTaGVldHMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQWxsb3dTY3JpcHRzRm9yU2tpbihu
c0lVUkkgKnVybCwgUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENo
ZWNrRm9yTmV3Q2hyb21lKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2hlY2tUaGVt
ZVZlcnNpb24oY29uc3QgUFJVbmljaGFyICpza2luTmFtZSwgUFJCb29sICpfcmV0dmFsKSA9IDA7
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENoZWNrTG9jYWxlVmVyc2lvbihjb25zdCBQUlVuaWNoYXIg
KmxvY2FsZU5hbWUsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKfTsKIyA2MSAibnNJbnN0YWxsLmgi
IDIKIyA3MyAibnNJbnN0YWxsLmgiCmNsYXNzIG5zSW5zdGFsbEluZm8KewogIHB1YmxpYzoKCiAg
ICBuc0luc3RhbGxJbmZvKCBQUlVpbnQzMiBhSW5zdGFsbFR5cGUsCiAgICAgICAgICAgICAgICAg
ICBuc0lGaWxlKiBhRmlsZSwKICAgICAgICAgICAgICAgICAgIGNvbnN0IFBSVW5pY2hhciogYVVS
TCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IFBSVW5pY2hhciogYUFyZ3MsCiAgICAgICAgICAg
ICAgICAgICBQUlVpbnQzMiBhRmxhZ3MsCiAgICAgICAgICAgICAgICAgICBuc0lYUElMaXN0ZW5l
ciogYUxpc3RlbmVyLAogICAgICAgICAgICAgICAgICAgbnNJRE9NV2luZG93SW50ZXJuYWwqIGFQ
YXJlbnRXaW5kb3csCiAgICAgICAgICAgICAgICAgICBuc0lDaHJvbWVSZWdpc3RyeSogYUNocm9t
ZVJlZyk7CgogICAgdmlydHVhbCB+bnNJbnN0YWxsSW5mbygpOwoKICAgIG5zSUZpbGUqIEdldEZp
bGUoKSB7IHJldHVybiBtRmlsZS5nZXQoKTsgfQogICAgY29uc3QgUFJVbmljaGFyKiBHZXRVUkwo
KSB7IHJldHVybiBtVVJMLkdldFVuaWNvZGUoKTsgfQogICAgY29uc3QgUFJVbmljaGFyKiBHZXRB
cmd1bWVudHMoKSB7IHJldHVybiBtQXJncy5HZXRVbmljb2RlKCk7IH0KICAgIFBSVWludDMyIEdl
dEZsYWdzKCkgeyByZXR1cm4gbUZsYWdzOyB9CiAgICBQUlVpbnQzMiBHZXRUeXBlKCkgeyByZXR1
cm4gbVR5cGU7IH0KICAgIG5zSVhQSUxpc3RlbmVyKiBHZXRMaXN0ZW5lcigpIHsgcmV0dXJuIG1M
aXN0ZW5lci5nZXQoKTsgfQogICAgbnNJQ2hyb21lUmVnaXN0cnkqIEdldENocm9tZVJlZ2lzdHJ5
KCkgeyByZXR1cm4gbUNocm9tZVJlZy5nZXQoKTsgfQogICAgbnNJRE9NV2luZG93SW50ZXJuYWwq
IEdldFBhcmVudERPTVdpbmRvdygpIHsgcmV0dXJuIG1QYXJlbnQuZ2V0KCk7IH0KCiAgcHJpdmF0
ZToKCiAgICBuc3Jlc3VsdCBtRXJyb3I7CgogICAgUFJVaW50MzIgbVR5cGU7CiAgICBQUlVpbnQz
MiBtRmxhZ3M7CiAgICBuc1N0cmluZyBtVVJMOwogICAgbnNTdHJpbmcgbUFyZ3M7CgogICAgbnND
T01QdHI8bnNJRmlsZT4gbUZpbGU7CiAgICBuc0NPTVB0cjxuc0lYUElMaXN0ZW5lcj4gbUxpc3Rl
bmVyOwogICAgbnNDT01QdHI8bnNJRE9NV2luZG93SW50ZXJuYWw+IG1QYXJlbnQ7CiAgICBuc0NP
TVB0cjxuc0lDaHJvbWVSZWdpc3RyeT4gbUNocm9tZVJlZzsKfTsKIyAxMjIgIm5zSW5zdGFsbC5o
IgpjbGFzcyBuc0luc3RhbGwKewogICAgZnJpZW5kIGNsYXNzIG5zV2luUmVnOwogICAgZnJpZW5k
IGNsYXNzIG5zV2luUHJvZmlsZTsKCiAgICBwdWJsaWM6CgogICAgICAgIGVudW0KICAgICAgICB7
CiAgICAgICAgICAgIEJBRF9QQUNLQUdFX05BTUUgPSAtMjAwLAogICAgICAgICAgICBVTkVYUEVD
VEVEX0VSUk9SID0gLTIwMSwKICAgICAgICAgICAgQUNDRVNTX0RFTklFRCA9IC0yMDIsCiAgICAg
ICAgICAgIFRPT19NQU5ZX0NFUlRJRklDQVRFUyA9IC0yMDMsCiAgICAgICAgICAgIE5PX0lOU1RB
TExfU0NSSVBUID0gLTIwNCwKICAgICAgICAgICAgTk9fQ0VSVElGSUNBVEUgPSAtMjA1LAogICAg
ICAgICAgICBOT19NQVRDSElOR19DRVJUSUZJQ0FURSA9IC0yMDYsCiAgICAgICAgICAgIENBTlRf
UkVBRF9BUkNISVZFID0gLTIwNywKICAgICAgICAgICAgSU5WQUxJRF9BUkdVTUVOVFMgPSAtMjA4
LAogICAgICAgICAgICBJTExFR0FMX1JFTEFUSVZFX1BBVEggPSAtMjA5LAogICAgICAgICAgICBV
U0VSX0NBTkNFTExFRCA9IC0yMTAsCiAgICAgICAgICAgIElOU1RBTExfTk9UX1NUQVJURUQgPSAt
MjExLAogICAgICAgICAgICBTSUxFTlRfTU9ERV9ERU5JRUQgPSAtMjEyLAogICAgICAgICAgICBO
T19TVUNIX0NPTVBPTkVOVCA9IC0yMTMsCiAgICAgICAgICAgIERPRVNfTk9UX0VYSVNUID0gLTIx
NCwKICAgICAgICAgICAgUkVBRF9PTkxZID0gLTIxNSwKICAgICAgICAgICAgSVNfRElSRUNUT1JZ
ID0gLTIxNiwKICAgICAgICAgICAgTkVUV09SS19GSUxFX0lTX0lOX1VTRSA9IC0yMTcsCiAgICAg
ICAgICAgIEFQUExFX1NJTkdMRV9FUlIgPSAtMjE4LAogICAgICAgICAgICBJTlZBTElEX1BBVEhf
RVJSID0gLTIxOSwKICAgICAgICAgICAgUEFUQ0hfQkFEX0RJRkYgPSAtMjIwLAogICAgICAgICAg
ICBQQVRDSF9CQURfQ0hFQ0tTVU1fVEFSR0VUID0gLTIyMSwKICAgICAgICAgICAgUEFUQ0hfQkFE
X0NIRUNLU1VNX1JFU1VMVCA9IC0yMjIsCiAgICAgICAgICAgIFVOSU5TVEFMTF9GQUlMRUQgPSAt
MjIzLAogICAgICAgICAgICBQQUNLQUdFX0ZPTERFUl9OT1RfU0VUID0gLTIyNCwKICAgICAgICAg
ICAgRVhUUkFDVElPTl9GQUlMRUQgPSAtMjI1LAogICAgICAgICAgICBGSUxFTkFNRV9BTFJFQURZ
X1VTRUQgPSAtMjI2LAogICAgICAgICAgICBJTlNUQUxMX0NBTkNFTExFRCA9IC0yMjcsCiAgICAg
ICAgICAgIERPV05MT0FEX0VSUk9SID0gLTIyOCwKICAgICAgICAgICAgU0NSSVBUX0VSUk9SID0g
LTIyOSwKCiAgICAgICAgICAgIEFMUkVBRFlfRVhJU1RTID0gLTIzMCwKICAgICAgICAgICAgSVNf
RklMRSA9IC0yMzEsCiAgICAgICAgICAgIFNPVVJDRV9ET0VTX05PVF9FWElTVCA9IC0yMzIsCiAg
ICAgICAgICAgIFNPVVJDRV9JU19ESVJFQ1RPUlkgPSAtMjMzLAogICAgICAgICAgICBTT1VSQ0Vf
SVNfRklMRSA9IC0yMzQsCiAgICAgICAgICAgIElOU1VGRklDSUVOVF9ESVNLX1NQQUNFID0gLTIz
NSwKICAgICAgICAgICAgRklMRU5BTUVfVE9PX0xPTkcgPSAtMjM2LAoKICAgICAgICAgICAgVU5B
QkxFX1RPX0xPQ0FURV9MSUJfRlVOQ1RJT04gPSAtMjM3LAogICAgICAgICAgICBVTkFCTEVfVE9f
TE9BRF9MSUJSQVJZID0gLTIzOCwKCiAgICAgICAgICAgIENIUk9NRV9SRUdJU1RSWV9FUlJPUiA9
IC0yMzksCgogICAgICAgICAgICBNQUxGT1JNRURfSU5TVEFMTCA9IC0yNDAsCgogICAgICAgICAg
ICBLRVlfQUNDRVNTX0RFTklFRCA9IC0yNDEsCiAgICAgICAgICAgIEtFWV9ET0VTX05PVF9FWElT
VCA9IC0yNDIsCiAgICAgICAgICAgIFZBTFVFX0RPRVNfTk9UX0VYSVNUID0gLTI0MywKCiAgICAg
ICAgICAgIE9VVF9PRl9NRU1PUlkgPSAtMjk5LAoKICAgICAgICAgICAgR0VTVEFMVF9VTktOT1dO
X0VSUiA9IC01NTUwLAogICAgICAgICAgICBHRVNUQUxUX0lOVkFMSURfQVJHVU1FTlQgPSAtNTU1
MSwKCiAgICAgICAgICAgIFNVQ0NFU1MgPSAwLAogICAgICAgICAgICBSRUJPT1RfTkVFREVEID0g
OTk5LAoKICAgICAgICAgICAgSU5TVEFMTF9GSUxFX1VORVhQRUNURURfTVNHX0lEID0gMCwKICAg
ICAgICAgICAgREVUQUlMU19SRVBMQUNFX0ZJTEVfTVNHX0lEID0gMSwKICAgICAgICAgICAgREVU
QUlMU19JTlNUQUxMX0ZJTEVfTVNHX0lEID0gMiwKCiAgICAgICAgICAgIERPX05PVF9VTklOU1RB
TEwgPSAyLAogICAgICAgICAgICBXSU5fU0hBUkVEX0ZJTEUgPSA0CiAgICAgICAgfTsKCgogICAg
ICAgIG5zSW5zdGFsbChuc0laaXBSZWFkZXIgKiB0aGVKQVJGaWxlKTsKICAgICAgICB2aXJ0dWFs
IH5uc0luc3RhbGwoKTsKCiAgICAgICAgUFJJbnQzMiBTZXRTY3JpcHRPYmplY3Qodm9pZCogYVNj
cmlwdE9iamVjdCk7CgogICAgICAgIFBSSW50MzIgU2F2ZVdpblJlZ1Byb3RvdHlwZSh2b2lkKiBh
U2NyaXB0T2JqZWN0KTsKICAgICAgICBQUkludDMyIFNhdmVXaW5Qcm9maWxlUHJvdG90eXBlKHZv
aWQqIGFTY3JpcHRPYmplY3QpOwoKICAgICAgICBKU09iamVjdCogUmV0cmlldmVXaW5SZWdQcm90
b3R5cGUodm9pZCk7CiAgICAgICAgSlNPYmplY3QqIFJldHJpZXZlV2luUHJvZmlsZVByb3RvdHlw
ZSh2b2lkKTsKCiAgICAgICAgUFJJbnQzMiBBYm9ydEluc3RhbGwoUFJJbnQzMiBhRXJyb3JOdW1i
ZXIpOwoKICAgICAgICBQUkludDMyIEFkZERpcmVjdG9yeShjb25zdCBuc1N0cmluZyYgYVJlZ05h
bWUsIGNvbnN0IG5zU3RyaW5nJiBhVmVyc2lvbiwgY29uc3QgbnNTdHJpbmcmIGFKYXJTb3VyY2Us
IG5zSW5zdGFsbEZvbGRlciogYUZvbGRlciwgY29uc3QgbnNTdHJpbmcmIGFTdWJkaXIsIFBSSW50
MzIgYU1vZGUsIFBSSW50MzIqIGFSZXR1cm4pOwogICAgICAgIFBSSW50MzIgQWRkRGlyZWN0b3J5
KGNvbnN0IG5zU3RyaW5nJiBhUmVnTmFtZSwgY29uc3QgbnNTdHJpbmcmIGFWZXJzaW9uLCBjb25z
dCBuc1N0cmluZyYgYUphclNvdXJjZSwgbnNJbnN0YWxsRm9sZGVyKiBhRm9sZGVyLCBjb25zdCBu
c1N0cmluZyYgYVN1YmRpciwgUFJJbnQzMiogYVJldHVybik7CiAgICAgICAgUFJJbnQzMiBBZGRE
aXJlY3RvcnkoY29uc3QgbnNTdHJpbmcmIGFSZWdOYW1lLCBjb25zdCBuc1N0cmluZyYgYUphclNv
dXJjZSwgbnNJbnN0YWxsRm9sZGVyKiBhRm9sZGVyLCBjb25zdCBuc1N0cmluZyYgYVN1YmRpciwg
UFJJbnQzMiogYVJldHVybik7CiAgICAgICAgUFJJbnQzMiBBZGREaXJlY3RvcnkoY29uc3QgbnNT
dHJpbmcmIGFKYXJTb3VyY2UsIFBSSW50MzIqIGFSZXR1cm4pOwoKICAgICAgICBQUkludDMyIEFk
ZFN1YmNvbXBvbmVudChjb25zdCBuc1N0cmluZyYgYVJlZ05hbWUsIGNvbnN0IG5zU3RyaW5nJiBh
VmVyc2lvbiwgY29uc3QgbnNTdHJpbmcmIGFKYXJTb3VyY2UsIG5zSW5zdGFsbEZvbGRlciAqYUZv
bGRlciwgY29uc3QgbnNTdHJpbmcmIGFUYXJnZXROYW1lLCBQUkludDMyIGFNb2RlLCBQUkludDMy
KiBhUmV0dXJuKTsKICAgICAgICBQUkludDMyIEFkZFN1YmNvbXBvbmVudChjb25zdCBuc1N0cmlu
ZyYgYVJlZ05hbWUsIGNvbnN0IG5zU3RyaW5nJiBhVmVyc2lvbiwgY29uc3QgbnNTdHJpbmcmIGFK
YXJTb3VyY2UsIG5zSW5zdGFsbEZvbGRlciAqYUZvbGRlciwgY29uc3QgbnNTdHJpbmcmIGFUYXJn
ZXROYW1lLCBQUkludDMyKiBhUmV0dXJuKTsKICAgICAgICBQUkludDMyIEFkZFN1YmNvbXBvbmVu
dChjb25zdCBuc1N0cmluZyYgYVJlZ05hbWUsIGNvbnN0IG5zU3RyaW5nJiBhSmFyU291cmNlLCBu
c0luc3RhbGxGb2xkZXIgKmFGb2xkZXIsIGNvbnN0IG5zU3RyaW5nJiBhVGFyZ2V0TmFtZSwgUFJJ
bnQzMiogYVJldHVybik7CiAgICAgICAgUFJJbnQzMiBBZGRTdWJjb21wb25lbnQoY29uc3QgbnNT
dHJpbmcmIGFKYXJTb3VyY2UsIFBSSW50MzIqIGFSZXR1cm4pOwoKICAgICAgICBQUkludDMyIERp
c2tTcGFjZUF2YWlsYWJsZShjb25zdCBuc1N0cmluZyYgYUZvbGRlciwgUFJJbnQ2NCogYVJldHVy
bik7CiAgICAgICAgUFJJbnQzMiBFeGVjdXRlKGNvbnN0IG5zU3RyaW5nJiBhSmFyU291cmNlLCBj
b25zdCBuc1N0cmluZyYgYUFyZ3MsIFBSQm9vbCBhQmxvY2tpbmcsIFBSSW50MzIqIGFSZXR1cm4p
OwogICAgICAgIFBSSW50MzIgRmluYWxpemVJbnN0YWxsKFBSSW50MzIqIGFSZXR1cm4pOwogICAg
ICAgIFBSSW50MzIgR2VzdGFsdChjb25zdCBuc1N0cmluZyYgYVNlbGVjdG9yLCBQUkludDMyKiBh
UmV0dXJuKTsKCiAgICAgICAgUFJJbnQzMiBHZXRDb21wb25lbnRGb2xkZXIoY29uc3QgbnNTdHJp
bmcmIGFDb21wb25lbnROYW1lLCBjb25zdCBuc1N0cmluZyYgYVN1YmRpcmVjdG9yeSwgbnNJbnN0
YWxsRm9sZGVyKiogYUZvbGRlcik7CiAgICAgICAgUFJJbnQzMiBHZXRDb21wb25lbnRGb2xkZXIo
Y29uc3QgbnNTdHJpbmcmIGFDb21wb25lbnROYW1lLCBuc0luc3RhbGxGb2xkZXIqKiBhRm9sZGVy
KTsKCiAgICAgICAgUFJJbnQzMiBHZXRGb2xkZXIobnNJbnN0YWxsRm9sZGVyJiBhVGFyZ2V0Rm9s
ZGVyLCBjb25zdCBuc1N0cmluZyYgYVN1YmRpcmVjdG9yeSwgbnNJbnN0YWxsRm9sZGVyKiogYUZv
bGRlcik7CiAgICAgICAgUFJJbnQzMiBHZXRGb2xkZXIoY29uc3QgbnNTdHJpbmcmIGFUYXJnZXRG
b2xkZXIsIGNvbnN0IG5zU3RyaW5nJiBhU3ViZGlyZWN0b3J5LCBuc0luc3RhbGxGb2xkZXIqKiBh
Rm9sZGVyKTsKICAgICAgICBQUkludDMyIEdldEZvbGRlcihjb25zdCBuc1N0cmluZyYgYVRhcmdl
dEZvbGRlciwgbnNJbnN0YWxsRm9sZGVyKiogYUZvbGRlcik7CgogICAgICAgIFBSSW50MzIgR2V0
TGFzdEVycm9yKFBSSW50MzIqIGFSZXR1cm4pOwogICAgICAgIFBSSW50MzIgR2V0V2luUHJvZmls
ZShjb25zdCBuc1N0cmluZyYgYUZvbGRlciwgY29uc3QgbnNTdHJpbmcmIGFGaWxlLCBKU0NvbnRl
eHQqIGpzY29udGV4dCwgSlNDbGFzcyogV2luUHJvZmlsZUNsYXNzLCBqc3ZhbCogYVJldHVybik7
CiAgICAgICAgUFJJbnQzMiBHZXRXaW5SZWdpc3RyeShKU0NvbnRleHQqIGpzY29udGV4dCwgSlND
bGFzcyogV2luUmVnQ2xhc3MsIGpzdmFsKiBhUmV0dXJuKTsKICAgICAgICBQUkludDMyIExvYWRS
ZXNvdXJjZXMoSlNDb250ZXh0KiBjeCwgY29uc3QgbnNTdHJpbmcmIGFCYXNlTmFtZSwganN2YWwq
IGFSZXR1cm4pOwogICAgICAgIFBSSW50MzIgUGF0Y2goY29uc3QgbnNTdHJpbmcmIGFSZWdOYW1l
LCBjb25zdCBuc1N0cmluZyYgYVZlcnNpb24sIGNvbnN0IG5zU3RyaW5nJiBhSmFyU291cmNlLCBu
c0luc3RhbGxGb2xkZXIqIGFGb2xkZXIsIGNvbnN0IG5zU3RyaW5nJiBhVGFyZ2V0TmFtZSwgUFJJ
bnQzMiogYVJldHVybik7CiAgICAgICAgUFJJbnQzMiBQYXRjaChjb25zdCBuc1N0cmluZyYgYVJl
Z05hbWUsIGNvbnN0IG5zU3RyaW5nJiBhSmFyU291cmNlLCBuc0luc3RhbGxGb2xkZXIqIGFGb2xk
ZXIsIGNvbnN0IG5zU3RyaW5nJiBhVGFyZ2V0TmFtZSwgUFJJbnQzMiogYVJldHVybik7CiAgICAg
ICAgUFJJbnQzMiBSZWdpc3RlckNocm9tZShuc0lGaWxlKiBjaHJvbWUsIFBSVWludDMyIGNocm9t
ZVR5cGUsIGNvbnN0IGNoYXIqIHBhdGgpOwogICAgICAgIFBSSW50MzIgUmVmcmVzaFBsdWdpbnMo
KTsKICAgICAgICBQUkludDMyIFJlc2V0RXJyb3IoUFJJbnQzMiBhRXJyb3IpOwogICAgICAgIFBS
SW50MzIgU2V0UGFja2FnZUZvbGRlcihuc0luc3RhbGxGb2xkZXImIGFGb2xkZXIpOwogICAgICAg
IFBSSW50MzIgU3RhcnRJbnN0YWxsKGNvbnN0IG5zU3RyaW5nJiBhVXNlclBhY2thZ2VOYW1lLCBj
b25zdCBuc1N0cmluZyYgYVBhY2thZ2VOYW1lLCBjb25zdCBuc1N0cmluZyYgYVZlcnNpb24sIFBS
SW50MzIqIGFSZXR1cm4pOwogICAgICAgIFBSSW50MzIgVW5pbnN0YWxsKGNvbnN0IG5zU3RyaW5n
JiBhUGFja2FnZU5hbWUsIFBSSW50MzIqIGFSZXR1cm4pOwoKICAgICAgICBQUkludDMyIEZpbGVP
cERpckNyZWF0ZShuc0luc3RhbGxGb2xkZXImIGFUYXJnZXQsIFBSSW50MzIqIGFSZXR1cm4pOwog
ICAgICAgIFBSSW50MzIgRmlsZU9wRGlyR2V0UGFyZW50KG5zSW5zdGFsbEZvbGRlciYgYVRhcmdl
dCwgbnNJbnN0YWxsRm9sZGVyKiogdGhlUGFyZW50Rm9sZGVyKTsKICAgICAgICBQUkludDMyIEZp
bGVPcERpclJlbW92ZShuc0luc3RhbGxGb2xkZXImIGFUYXJnZXQsIFBSSW50MzIgYUZsYWdzLCBQ
UkludDMyKiBhUmV0dXJuKTsKICAgICAgICBQUkludDMyIEZpbGVPcERpclJlbmFtZShuc0luc3Rh
bGxGb2xkZXImIGFTcmMsIG5zU3RyaW5nJiBhVGFyZ2V0LCBQUkludDMyKiBhUmV0dXJuKTsKICAg
ICAgICBQUkludDMyIEZpbGVPcEZpbGVDb3B5KG5zSW5zdGFsbEZvbGRlciYgYVNyYywgbnNJbnN0
YWxsRm9sZGVyJiBhVGFyZ2V0LCBQUkludDMyKiBhUmV0dXJuKTsKICAgICAgICBQUkludDMyIEZp
bGVPcEZpbGVEZWxldGUobnNJbnN0YWxsRm9sZGVyJiBhVGFyZ2V0LCBQUkludDMyIGFGbGFncywg
UFJJbnQzMiogYVJldHVybik7CiAgICAgICAgUFJJbnQzMiBGaWxlT3BGaWxlRXhpc3RzKG5zSW5z
dGFsbEZvbGRlciYgYVRhcmdldCwgUFJCb29sKiBhUmV0dXJuKTsKICAgICAgICBQUkludDMyIEZp
bGVPcEZpbGVFeGVjdXRlKG5zSW5zdGFsbEZvbGRlciYgYVRhcmdldCwgbnNTdHJpbmcmIGFQYXJh
bXMsIFBSQm9vbCBhQmxvY2tpbmcsIFBSSW50MzIqIGFSZXR1cm4pOwogICAgICAgIFBSSW50MzIg
RmlsZU9wRmlsZUdldE5hdGl2ZVZlcnNpb24obnNJbnN0YWxsRm9sZGVyJiBhVGFyZ2V0LCBuc1N0
cmluZyogYVJldHVybik7CiAgICAgICAgUFJJbnQzMiBGaWxlT3BGaWxlR2V0RGlza1NwYWNlQXZh
aWxhYmxlKG5zSW5zdGFsbEZvbGRlciYgYVRhcmdldCwgUFJJbnQ2NCogYVJldHVybik7CiAgICAg
ICAgUFJJbnQzMiBGaWxlT3BGaWxlR2V0TW9kRGF0ZShuc0luc3RhbGxGb2xkZXImIGFUYXJnZXQs
IGRvdWJsZSogYVJldHVybik7CiAgICAgICAgUFJJbnQzMiBGaWxlT3BGaWxlR2V0U2l6ZShuc0lu
c3RhbGxGb2xkZXImIGFUYXJnZXQsIFBSSW50NjQqIGFSZXR1cm4pOwogICAgICAgIFBSSW50MzIg
RmlsZU9wRmlsZUlzRGlyZWN0b3J5KG5zSW5zdGFsbEZvbGRlciYgYVRhcmdldCwgUFJCb29sKiBh
UmV0dXJuKTsKICAgICAgICBQUkludDMyIEZpbGVPcEZpbGVJc1dyaXRhYmxlKG5zSW5zdGFsbEZv
bGRlciYgYVRhcmdldCwgUFJCb29sKiBhUmV0dXJuKTsKICAgICAgICBQUkludDMyIEZpbGVPcEZp
bGVJc0ZpbGUobnNJbnN0YWxsRm9sZGVyJiBhVGFyZ2V0LCBQUkJvb2wqIGFSZXR1cm4pOwogICAg
ICAgIFBSSW50MzIgRmlsZU9wRmlsZU1vZERhdGVDaGFuZ2VkKG5zSW5zdGFsbEZvbGRlciYgYVRh
cmdldCwgZG91YmxlIGFPbGRTdGFtcCwgUFJCb29sKiBhUmV0dXJuKTsKICAgICAgICBQUkludDMy
IEZpbGVPcEZpbGVNb3ZlKG5zSW5zdGFsbEZvbGRlciYgYVNyYywgbnNJbnN0YWxsRm9sZGVyJiBh
VGFyZ2V0LCBQUkludDMyKiBhUmV0dXJuKTsKICAgICAgICBQUkludDMyIEZpbGVPcEZpbGVSZW5h
bWUobnNJbnN0YWxsRm9sZGVyJiBhU3JjLCBuc1N0cmluZyYgYVRhcmdldCwgUFJJbnQzMiogYVJl
dHVybik7CiAgICAgICAgUFJJbnQzMiBGaWxlT3BGaWxlV2luZG93c0dldFNob3J0TmFtZShuc0lu
c3RhbGxGb2xkZXImIGFUYXJnZXQsIG5zU3RyaW5nJiBhU2hvcnRQYXRoTmFtZSk7CiAgICAgICAg
UFJJbnQzMiBGaWxlT3BGaWxlV2luZG93c1Nob3J0Y3V0KG5zSUZpbGUqIGFUYXJnZXQsIG5zSUZp
bGUqIGFTaG9ydGN1dFBhdGgsIG5zU3RyaW5nJiBhRGVzY3JpcHRpb24sIG5zSUZpbGUqIGFXb3Jr
aW5nUGF0aCwgbnNTdHJpbmcmIGFQYXJhbXMsIG5zSUZpbGUqIGFJY29uLCBQUkludDMyIGFJY29u
SWQsIFBSSW50MzIqIGFSZXR1cm4pOwogICAgICAgIFBSSW50MzIgRmlsZU9wRmlsZU1hY0FsaWFz
KG5zSUZpbGUgKmFTb3VyY2VGaWxlLCBuc0lGaWxlICphQWxpYXNGaWxlLCBQUkludDMyKiBhUmV0
dXJuKTsKICAgICAgICBQUkludDMyIEZpbGVPcEZpbGVVbml4TGluayhuc0luc3RhbGxGb2xkZXIm
IGFUYXJnZXQsIFBSSW50MzIgYUZsYWdzLCBQUkludDMyKiBhUmV0dXJuKTsKICAgICAgICBQUklu
dDMyIEZpbGVPcFdpblJlZ2lzdGVyU2VydmVyKG5zSW5zdGFsbEZvbGRlciYgYVRhcmdldCwgUFJJ
bnQzMiogYVJldHVybik7CgogICAgICAgIHZvaWQgTG9nQ29tbWVudChuc1N0cmluZyYgYUNvbW1l
bnQpOwoKICAgICAgICBQUkludDMyIEV4dHJhY3RGaWxlRnJvbUphcihjb25zdCBuc1N0cmluZyYg
YUphcmZpbGUsIG5zSUZpbGUqIGFTdWdnZXN0ZWROYW1lLCBuc0lGaWxlKiogYVJlYWxOYW1lKTsK
ICAgICAgICBjaGFyKiBHZXRSZXNvdXJjZWRTdHJpbmcoY29uc3QgbnNTdHJpbmcmIGFSZXNOYW1l
KTsKICAgICAgICB2b2lkIEFkZFBhdGNoKG5zSGFzaEtleSAqYUtleSwgbnNJRmlsZSogZmlsZU5h
bWUpOwogICAgICAgIHZvaWQgR2V0UGF0Y2gobnNIYXNoS2V5ICphS2V5LCBuc0lGaWxlKiogZmls
ZU5hbWUpOwoKICAgICAgICBuc0lGaWxlKiBHZXRKYXJGaWxlTG9jYXRpb24oKSB7IHJldHVybiBt
SmFyRmlsZUxvY2F0aW9uOyB9CiAgICAgICAgdm9pZCBTZXRKYXJGaWxlTG9jYXRpb24obnNJRmls
ZSogYUZpbGUpOwoKICAgICAgICB2b2lkIEdldEluc3RhbGxBcmd1bWVudHMobnNTdHJpbmcmIGFy
Z3MpOwogICAgICAgIHZvaWQgU2V0SW5zdGFsbEFyZ3VtZW50cyhjb25zdCBuc1N0cmluZyYgYXJn
cyk7CgogICAgICAgIHZvaWQgR2V0SW5zdGFsbFVSTChuc1N0cmluZyYgdXJsKTsKICAgICAgICB2
b2lkIFNldEluc3RhbGxVUkwoY29uc3QgbnNTdHJpbmcmIHVybCk7CgogICAgICAgIFBSVWludDMy
IEdldEluc3RhbGxGbGFncygpIHsgcmV0dXJuIG1JbnN0YWxsRmxhZ3M7IH0KICAgICAgICB2b2lk
IFNldEluc3RhbGxGbGFncyhQUlVpbnQzMiBhRmxhZ3MpIHsgbUluc3RhbGxGbGFncyA9IGFGbGFn
czsgfQoKICAgICAgICBQUkludDMyIEdldEluc3RhbGxQbGF0Zm9ybShuc0NTdHJpbmcmIGFQbGF0
Zm9ybSk7CgogICAgICAgIG5zSUNocm9tZVJlZ2lzdHJ5KiBHZXRDaHJvbWVSZWdpc3RyeSgpIHsg
cmV0dXJuIG1DaHJvbWVSZWdpc3RyeTsgfQogICAgICAgIHZvaWQgU2V0Q2hyb21lUmVnaXN0cnko
bnNJQ2hyb21lUmVnaXN0cnkqIHJlZykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
IG1DaHJvbWVSZWdpc3RyeSA9IHJlZzsgfQoKICAgICAgICBuc0lET01XaW5kb3dJbnRlcm5hbCog
R2V0UGFyZW50RE9NV2luZG93KCkgeyByZXR1cm4gbVBhcmVudDsgfQogICAgICAgIHZvaWQgU2V0
UGFyZW50RE9NV2luZG93KG5zSURPTVdpbmRvd0ludGVybmFsKiBwYXJlbnQpCiAgICAgICAgeyBt
UGFyZW50ID0gcGFyZW50OyB9CgogICAgICAgIFBSQm9vbCBHZXRTdGF0dXNTZW50KCkgeyByZXR1
cm4gbVN0YXR1c1NlbnQ7IH0KICAgICAgICBQUkJvb2wgSW5JbnN0YWxsVHJhbnNhY3Rpb24odm9p
ZCkgeyByZXR1cm4gbUluc3RhbGxlZEZpbGVzICE9IDA7IH0KCiAgICAgICAgUFJJbnQzMiBBbGVy
dChuc1N0cmluZyYgc3RyaW5nKTsKICAgICAgICBQUkludDMyIENvbmZpcm0obnNTdHJpbmcmIHN0
cmluZywgUFJCb29sKiBhUmV0dXJuKTsKICAgICAgICB2b2lkIEludGVybmFsQWJvcnQoUFJJbnQz
MiBlcnJjb2RlKTsKCiAgICAgICAgUFJJbnQzMiBTY2hlZHVsZUZvckluc3RhbGwobnNJbnN0YWxs
T2JqZWN0KiBvYik7CgogICAgICAgIFBSSW50MzIgU2F2ZUVycm9yKFBSSW50MzIgZXJyY29kZSk7
CgogICAgcHJpdmF0ZToKICAgICAgICBKU09iamVjdCogbVNjcmlwdE9iamVjdDsKCiAgICAgICAg
SlNPYmplY3QqIG1XaW5SZWdPYmplY3Q7CiAgICAgICAgSlNPYmplY3QqIG1XaW5Qcm9maWxlT2Jq
ZWN0OwoKCiAgICAgICAgbnNDT01QdHI8bnNJRmlsZT4gbUphckZpbGVMb2NhdGlvbjsKICAgICAg
ICBuc0laaXBSZWFkZXIqIG1KYXJGaWxlRGF0YTsKCiAgICAgICAgbnNTdHJpbmcgbUluc3RhbGxB
cmd1bWVudHM7CiAgICAgICAgbnNTdHJpbmcgbUluc3RhbGxVUkw7CiAgICAgICAgUFJVaW50MzIg
bUluc3RhbGxGbGFnczsKICAgICAgICBuc0NTdHJpbmcgbUluc3RhbGxQbGF0Zm9ybTsKICAgICAg
ICBuc0lDaHJvbWVSZWdpc3RyeSogbUNocm9tZVJlZ2lzdHJ5OwogICAgICAgIG5zSURPTVdpbmRv
d0ludGVybmFsKiBtUGFyZW50OwogICAgICAgIG5zSW5zdGFsbEZvbGRlciogbVBhY2thZ2VGb2xk
ZXI7CgogICAgICAgIFBSQm9vbCBtVXNlckNhbmNlbGxlZDsKICAgICAgICBQUkJvb2wgbVN0YXR1
c1NlbnQ7CgogICAgICAgIFBSQm9vbCBtVW5pbnN0YWxsUGFja2FnZTsKICAgICAgICBQUkJvb2wg
bVJlZ2lzdGVyUGFja2FnZTsKICAgICAgICBQUkJvb2wgbVN0YXJ0SW5zdGFsbENvbXBsZXRlZDsK
CiAgICAgICAgbnNTdHJpbmcgbVJlZ2lzdHJ5UGFja2FnZU5hbWU7CiAgICAgICAgbnNTdHJpbmcg
bVVJTmFtZTsKICAgICAgICBuc0luc3RhbGxWZXJzaW9uKiBtVmVyc2lvbkluZm87CgogICAgICAg
IG5zVm9pZEFycmF5KiBtSW5zdGFsbGVkRmlsZXM7CgogICAgICAgIG5zSGFzaHRhYmxlKiBtUGF0
Y2hMaXN0OwoKICAgICAgICBuc0NPTVB0cjxuc0lYUElMaXN0ZW5lcj4gbUxpc3RlbmVyOwoKICAg
ICAgICBuc0NPTVB0cjxuc0lTdHJpbmdCdW5kbGU+IG1TdHJpbmdCdW5kbGU7CgogICAgICAgIFBS
SW50MzIgbUxhc3RFcnJvcjsKCiAgICAgICAgdm9pZCBQYXJzZUZsYWdzKGludCBmbGFncyk7CiAg
ICAgICAgUFJJbnQzMiBTYW5pdHlDaGVjayh2b2lkKTsKICAgICAgICB2b2lkIEdldFRpbWUobnNT
dHJpbmcgJmFTdHJpbmcpOwoKCiAgICAgICAgUFJJbnQzMiBHZXRRdWFsaWZpZWRSZWdOYW1lKGNv
bnN0IG5zU3RyaW5nJiBuYW1lLCBuc1N0cmluZyYgcXVhbGlmaWVkUmVnTmFtZSApOwogICAgICAg
IFBSSW50MzIgR2V0UXVhbGlmaWVkUGFja2FnZU5hbWUoIGNvbnN0IG5zU3RyaW5nJiBuYW1lLCBu
c1N0cmluZyYgcXVhbGlmaWVkTmFtZSApOwoKICAgICAgICB2b2lkIEN1cnJlbnRVc2VyTm9kZShu
c1N0cmluZyYgdXNlclJlZ05vZGUpOwogICAgICAgIFBSQm9vbCBCYWRSZWdOYW1lKGNvbnN0IG5z
U3RyaW5nJiByZWdOYW1lKTsKCiAgICAgICAgdm9pZCBDbGVhblVwKCk7CgogICAgICAgIFBSSW50
MzIgRXh0cmFjdERpckVudHJpZXMoY29uc3QgbnNTdHJpbmcmIGRpcmVjdG9yeSwgbnNWb2lkQXJy
YXkgKnBhdGhzKTsKCiAgICAgICAgc3RhdGljIHZvaWQgRGVsZXRlVmVjdG9yKG5zVm9pZEFycmF5
KiB2ZWN0b3IpOwp9OwoKbnNyZXN1bHQgTWFrZVVuaXF1ZShuc0lMb2NhbEZpbGUqIGZpbGUpOwoj
IDQ2ICJuc1NvZnR3YXJlVXBkYXRlLmNwcCIgMgojIDEgIi4uL3B1YmxpYy9uc1NvZnR3YXJlVXBk
YXRlSUlEcy5oIiAxCiMgNDcgIm5zU29mdHdhcmVVcGRhdGUuY3BwIiAyCiMgMSAibnNTb2Z0d2Fy
ZVVwZGF0ZS5oIiAxCiMgNDggIm5zU29mdHdhcmVVcGRhdGUuY3BwIiAyCiMgMSAibnNTb2Z0d2Fy
ZVVwZGF0ZVJ1bi5oIiAxCgoKClBSSW50MzIgUnVuSW5zdGFsbChuc0luc3RhbGxJbmZvICppbnN0
YWxsSW5mbyk7CiMgNDkgIm5zU29mdHdhcmVVcGRhdGUuY3BwIiAyCiMgMSAibnNJbnN0YWxsVHJp
Z2dlci5oIiAxCgoKCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5oIiAxCiMgNSAibnNJ
bnN0YWxsVHJpZ2dlci5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3RyaW5nLmgiIDEK
IyA2ICJuc0luc3RhbGxUcmlnZ2VyLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRmFj
dG9yeS5oIiAxCiMgNyAibnNJbnN0YWxsVHJpZ2dlci5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNs
dWRlL25zSVN1cHBvcnRzLmgiIDEKIyA4ICJuc0luc3RhbGxUcmlnZ2VyLmgiIDIKIyAxICIuLi8u
Li9kaXN0L2luY2x1ZGUvbnNJU2NyaXB0T2JqZWN0T3duZXIuaCIgMQojIDkgIm5zSW5zdGFsbFRy
aWdnZXIuaCIgMgoKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv
cHJ0eXBlcy5oIiAxCiMgMTEgIm5zSW5zdGFsbFRyaWdnZXIuaCIgMgojIDEgIi4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0hhc2h0YWJsZS5oIiAxCiMgMTIgIm5zSW5zdGFsbFRyaWdnZXIuaCIgMgoKIyAx
ICIuLi9wdWJsaWMvbnNJRE9NSW5zdGFsbFRyaWdnZXJHbG9iYWwuaCIgMQojIDI2ICIuLi9wdWJs
aWMvbnNJRE9NSW5zdGFsbFRyaWdnZXJHbG9iYWwuaCIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUv
bnNJU3VwcG9ydHMuaCIgMQojIDI3ICIuLi9wdWJsaWMvbnNJRE9NSW5zdGFsbFRyaWdnZXJHbG9i
YWwuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1N0cmluZy5oIiAxCiMgMjggIi4uL3B1
YmxpYy9uc0lET01JbnN0YWxsVHJpZ2dlckdsb2JhbC5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNs
dWRlL25zSVNjcmlwdENvbnRleHQuaCIgMQojIDI5ICIuLi9wdWJsaWMvbnNJRE9NSW5zdGFsbFRy
aWdnZXJHbG9iYWwuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1hQSVRyaWdnZXJJbmZv
LmgiIDEKIyAyOCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zWFBJVHJpZ2dlckluZm8uaCIKIyAxICIu
Li8uLi9kaXN0L2luY2x1ZGUvbnNTdHJpbmcuaCIgMQojIDI5ICIuLi8uLi9kaXN0L2luY2x1ZGUv
bnNYUElUcmlnZ2VySW5mby5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zVm9pZEFycmF5
LmgiIDEKIyAzMCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zWFBJVHJpZ2dlckluZm8uaCIgMgojIDEg
Ii4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NPTVB0ci5oIiAxCiMgMzEgIi4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc1hQSVRyaWdnZXJJbmZvLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9y
dHNVdGlscy5oIiAxCiMgMzIgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1hQSVRyaWdnZXJJbmZvLmgi
IDIKCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZpbGVTcGVjLmgiIDEKIyAzNCAiLi4vLi4v
ZGlzdC9pbmNsdWRlL25zWFBJVHJpZ2dlckluZm8uaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc0lMb2NhbEZpbGUuaCIgMQojIDM1ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNYUElUcmlnZ2Vy
SW5mby5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSU91dHB1dFN0cmVhbS5oIiAxCiMg
MzYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1hQSVRyaWdnZXJJbmZvLmgiIDIKIyAxICIuLi8uLi9k
aXN0L2luY2x1ZGUvanNhcGkuaCIgMQojIDM3ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNYUElUcmln
Z2VySW5mby5oIiAyCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By
L3BydGhyZWFkLmgiIDEKIyAzOCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zWFBJVHJpZ2dlckluZm8u
aCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9wbGV2ZW50LmgiIDEKIyAzOSAiLi4vLi4vZGlz
dC9pbmNsdWRlL25zWFBJVHJpZ2dlckluZm8uaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lYUENvbm5lY3QuaCIgMQojIDE4ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJWFBDb25uZWN0Lmgi
CiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL3hwY2NvbXBvbmVudHMuaCIgMQojIDE0ICIuLi8uLi9k
aXN0L2luY2x1ZGUveHBjY29tcG9uZW50cy5oIgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS94cGNl
eGNlcHRpb24uaCIgMQojIDE0ICIuLi8uLi9kaXN0L2luY2x1ZGUveHBjZXhjZXB0aW9uLmgiCiMg
MSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUV4Y2VwdGlvbi5oIiAxCiMgMjkgIi4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lFeGNlcHRpb24uaCIKY2xhc3MgbnNJU3RhY2tGcmFtZSA6IHB1YmxpYyBuc0lT
dXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRp
YyBjb25zdCBuc0lJRCBpaWQgPSB7MHg5MWQ4MjEwNSwgMHg3YzYyLCAweDRmOGIsIHsgMHg5Nywg
MHg3OSwgMHgxNSwgMHg0MiwgMHg3NywgMHhjMCwgMHhlZSwgMHg5MCB9fTsgcmV0dXJuIGlpZDt9
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExhbmd1YWdlKFBSVWludDMyICphTGFuZ3VhZ2UpID0g
MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGFuZ3VhZ2VOYW1lKGNoYXIgKiAqYUxhbmd1YWdl
TmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGaWxlbmFtZShjaGFyICogKmFGaWxl
bmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROYW1lKGNoYXIgKiAqYU5hbWUpID0g
MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGluZU51bWJlcihQUkludDMyICphTGluZU51bWJl
cikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTb3VyY2VMaW5lKGNoYXIgKiAqYVNvdXJj
ZUxpbmUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2FsbGVyKG5zSVN0YWNrRnJhbWUg
KiAqYUNhbGxlcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBUb1N0cmluZyhjaGFyICoqX3Jl
dHZhbCkgPSAwOwoKfTsKIyAxODEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lFeGNlcHRpb24uaCIK
Y2xhc3MgbnNJRXhjZXB0aW9uIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3Rh
dGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGYz
YThkM2I0LCAweGM0MjQsIDB4NGVkYywgeyAweDhiLCAweGY2LCAweDg5LCAweDc0LCAweGM5LCAw
eDgzLCAweGJhLCAweDc4IH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
TWVzc2FnZShjaGFyICogKmFNZXNzYWdlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJl
c3VsdChuc3Jlc3VsdCAqYVJlc3VsdCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROYW1l
KGNoYXIgKiAqYU5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RmlsZW5hbWUoY2hh
ciAqICphRmlsZW5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGluZU51bWJlcihQ
UlVpbnQzMiAqYUxpbmVOdW1iZXIpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29sdW1u
TnVtYmVyKFBSVWludDMyICphQ29sdW1uTnVtYmVyKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0
IEdldExvY2F0aW9uKG5zSVN0YWNrRnJhbWUgKiAqYUxvY2F0aW9uKSA9IDA7CgoKICB2aXJ0dWFs
IG5zcmVzdWx0IEdldElubmVyKG5zSUV4Y2VwdGlvbiAqICphSW5uZXIpID0gMDsKCgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0RGF0YShuc0lTdXBwb3J0cyAqICphRGF0YSkgPSAwOwoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBUb1N0cmluZyhjaGFyICoqX3JldHZhbCkgPSAwOwoKfTsKIyAxNSAiLi4vLi4v
ZGlzdC9pbmNsdWRlL3hwY2V4Y2VwdGlvbi5oIiAyCiMgMjkgIi4uLy4uL2Rpc3QvaW5jbHVkZS94
cGNleGNlcHRpb24uaCIKY2xhc3MgbnNJWFBDRXhjZXB0aW9uIDogcHVibGljIG5zSUV4Y2VwdGlv
biB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25z
dCBuc0lJRCBpaWQgPSB7MHhiMmEzNDAxMCwgMHgzOTgzLCAweDExZDMsIHsgMHg5OCwgMHg4OCwg
MHgwMCwgMHg2MCwgMHgwOCwgMHg5NiwgMHgyNCwgMHgyMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2
aXJ0dWFsIG5zcmVzdWx0IEluaXRpYWxpemUoY29uc3QgY2hhciAqYU1lc3NhZ2UsIG5zcmVzdWx0
IGFSZXN1bHQsIGNvbnN0IGNoYXIgKmFOYW1lLCBuc0lTdGFja0ZyYW1lICphTG9jYXRpb24sIG5z
SVN1cHBvcnRzICphRGF0YSwgbnNJRXhjZXB0aW9uICphSW5uZXIpID0gMDsKCn07CiMgOTcgIi4u
Ly4uL2Rpc3QvaW5jbHVkZS94cGNleGNlcHRpb24uaCIKY2xhc3MgbnNJWFBDRE9NRXhjZXB0aW9u
IDogcHVibGljIG5zSVhQQ0V4Y2VwdGlvbiB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJ
RCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg4NDI3OTA0MCwgMHg0MGNl
LCAweDExZDUsIHsgMHg5MCwgMHhiYiwgMHgwMCwgMHgxMCwgMHhhNCwgMHhlNywgMHgzZCwgMHg5
YSB9fTsgcmV0dXJuIGlpZDt9CgogIGVudW0geyBJTkRFWF9TSVpFX0VSUiA9IDFVIH07CgogIGVu
dW0geyBET01TVFJJTkdfU0laRV9FUlIgPSAyVSB9OwoKICBlbnVtIHsgSElFUkFSQ0hZX1JFUVVF
U1RfRVJSID0gM1UgfTsKCiAgZW51bSB7IFdST05HX0RPQ1VNRU5UX0VSUiA9IDRVIH07CgogIGVu
dW0geyBJTlZBTElEX0NIQVJBQ1RFUl9FUlIgPSA1VSB9OwoKICBlbnVtIHsgTk9fREFUQV9BTExP
V0VEX0VSUiA9IDZVIH07CgogIGVudW0geyBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIgPSA3
VSB9OwoKICBlbnVtIHsgTk9UX0ZPVU5EX0VSUiA9IDhVIH07CgogIGVudW0geyBOT1RfU1VQUE9S
VEVEX0VSUiA9IDlVIH07CgogIGVudW0geyBJTlVTRV9BVFRSSUJVVEVfRVJSID0gMTBVIH07Cgog
IGVudW0geyBJTlZBTElEX1NUQVRFX0VSUiA9IDExVSB9OwoKICBlbnVtIHsgU1lOVEFYX0VSUiA9
IDEyVSB9OwoKICBlbnVtIHsgSU5WQUxJRF9NT0RJRklDQVRJT05fRVJSID0gMTNVIH07CgogIGVu
dW0geyBOQU1FU1BBQ0VfRVJSID0gMTRVIH07CgogIGVudW0geyBJTlZBTElEX0FDQ0VTU19FUlIg
PSAxNVUgfTsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29kZShQUlVpbnQzMiAqYUNvZGUpID0g
MDsKCn07CiMgMTUgIi4uLy4uL2Rpc3QvaW5jbHVkZS94cGNjb21wb25lbnRzLmgiIDIKCgoKIyAx
ICIuLi8uLi9kaXN0L2luY2x1ZGUveHBjanNpZC5oIiAxCiMgMjUgIi4uLy4uL2Rpc3QvaW5jbHVk
ZS94cGNqc2lkLmgiCmNsYXNzIG5zSUpTSUQgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGlj
OgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlk
ID0gezB4Yzg2YWUxMzEsIDB4ZDEwMSwgMHgxMWQyLCB7IDB4OTgsIDB4NDEsIDB4MDAsIDB4NjAs
IDB4MDgsIDB4OTYsIDB4MjQsIDB4MjIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXROYW1lKGNoYXIgKiAqYU5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
TnVtYmVyKGNoYXIgKiAqYU51bWJlcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJZChu
c0lEICogKmFJZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWYWxpZChQUkJvb2wgKmFW
YWxpZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFcXVhbHMobnNJSlNJRCAqb3RoZXIsIFBS
Qm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0aWFsaXplKGNvbnN0
IGNoYXIgKmlkU3RyaW5nKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFRvU3RyaW5nKGNoYXIg
KipfcmV0dmFsKSA9IDA7Cgp9OwojIDE2NSAiLi4vLi4vZGlzdC9pbmNsdWRlL3hwY2pzaWQuaCIK
Y2xhc3MgbnNJSlNJSUQgOiBwdWJsaWMgbnNJSlNJRCB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25z
dCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhlMDhkY2RhMCwg
MHhkNjUxLCAweDExZDIsIHsgMHg5OCwgMHg0MywgMHgwMCwgMHg2MCwgMHgwOCwgMHg5NiwgMHgy
NCwgMHgyMiB9fTsgcmV0dXJuIGlpZDt9Cgp9OwojIDIyNCAiLi4vLi4vZGlzdC9pbmNsdWRlL3hw
Y2pzaWQuaCIKY2xhc3MgbnNJSlNDSUQgOiBwdWJsaWMgbnNJSlNJRCB7CiBwdWJsaWM6CgogIHN0
YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhl
M2EyNGE2MCwgMHhkNjUxLCAweDExZDIsIHsgMHg5OCwgMHg0MywgMHgwMCwgMHg2MCwgMHgwOCwg
MHg5NiwgMHgyNCwgMHgyMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENy
ZWF0ZUluc3RhbmNlKG5zSVN1cHBvcnRzICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRTZXJ2aWNlKG5zSVN1cHBvcnRzICoqX3JldHZhbCkgPSAwOwoKfTsKIyAxOSAiLi4v
Li4vZGlzdC9pbmNsdWRlL3hwY2NvbXBvbmVudHMuaCIgMgojIDQxICIuLi8uLi9kaXN0L2luY2x1
ZGUveHBjY29tcG9uZW50cy5oIgpjbGFzcyBuc0lYUENDb21wb25lbnRzX0ludGVyZmFjZXMgOiBw
dWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJ
RCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4NGI2MmE2NDAsIDB4ZDI2YywgMHgxMWQy
LCB7IDB4OTgsIDB4NDIsIDB4MDAsIDB4NjAsIDB4MDgsIDB4OTYsIDB4MjQsIDB4MjIgfX07IHJl
dHVybiBpaWQ7fQoKfTsKIyAxMDQgIi4uLy4uL2Rpc3QvaW5jbHVkZS94cGNjb21wb25lbnRzLmgi
CmNsYXNzIG5zSVhQQ0NvbXBvbmVudHNfQ2xhc3NlcyA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBw
dWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJ
RCBpaWQgPSB7MHg5NzhmZjUyMCwgMHhkMjZjLCAweDExZDIsIHsgMHg5OCwgMHg0MiwgMHgwMCwg
MHg2MCwgMHgwOCwgMHg5NiwgMHgyNCwgMHgyMiB9fTsgcmV0dXJuIGlpZDt9Cgp9OwojIDE2NyAi
Li4vLi4vZGlzdC9pbmNsdWRlL3hwY2NvbXBvbmVudHMuaCIKY2xhc3MgbnNJWFBDQ29tcG9uZW50
c19DbGFzc2VzQnlJRCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBj
b25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgzMzZhOTU5
MCwgMHg0ZDE5LCAweDExZDMsIHsgMHg5OCwgMHg5MywgMHgwMCwgMHg2MCwgMHgwOCwgMHg5Niwg
MHgyNCwgMHgyMiB9fTsgcmV0dXJuIGlpZDt9Cgp9OwojIDIzMCAiLi4vLi4vZGlzdC9pbmNsdWRl
L3hwY2NvbXBvbmVudHMuaCIKY2xhc3MgbnNJWFBDQ29tcG9uZW50c19SZXN1bHRzIDogcHVibGlj
IG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7
c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDJmYzIyOWEwLCAweDU4NjAsIDB4MTFkMywgeyAw
eDk4LCAweDk5LCAweDAwLCAweDYwLCAweDA4LCAweDk2LCAweDI0LCAweDIyIH19OyByZXR1cm4g
aWlkO30KCn07CiMgMjkzICIuLi8uLi9kaXN0L2luY2x1ZGUveHBjY29tcG9uZW50cy5oIgpjbGFz
cyBuc0lYUENDb21wb25lbnRzX0lEIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAg
c3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsw
eDc5OTRhNmUwLCAweGUwMjgsIDB4MTFkMywgeyAweDhmLCAweDVkLCAweDAwLCAweDEwLCAweGE0
LCAweGU3LCAweDNkLCAweDlhIH19OyByZXR1cm4gaWlkO30KCn07CiMgMzU2ICIuLi8uLi9kaXN0
L2luY2x1ZGUveHBjY29tcG9uZW50cy5oIgpjbGFzcyBuc0lYUENDb21wb25lbnRzX0V4Y2VwdGlv
biA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYg
R2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg1YmYwMzljMCwgMHhlMDI4LCAw
eDExZDMsIHsgMHg4ZiwgMHg1ZCwgMHgwMCwgMHgxMCwgMHhhNCwgMHhlNywgMHgzZCwgMHg5YSB9
fTsgcmV0dXJuIGlpZDt9Cgp9OwojIDQxOSAiLi4vLi4vZGlzdC9pbmNsdWRlL3hwY2NvbXBvbmVu
dHMuaCIKY2xhc3MgbnNJWFBDQ29tcG9uZW50c19Db25zdHJ1Y3RvciA6IHB1YmxpYyBuc0lTdXBw
b3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBj
b25zdCBuc0lJRCBpaWQgPSB7MHg4ODY1NTY0MCwgMHhlMDI4LCAweDExZDMsIHsgMHg4ZiwgMHg1
ZCwgMHgwMCwgMHgxMCwgMHhhNCwgMHhlNywgMHgzZCwgMHg5YSB9fTsgcmV0dXJuIGlpZDt9Cgp9
OwojIDQ4MiAiLi4vLi4vZGlzdC9pbmNsdWRlL3hwY2NvbXBvbmVudHMuaCIKY2xhc3MgbnNJWFBD
Q29uc3RydWN0b3IgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29u
c3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YzgxNGNhMjAs
IDB4ZTBkYywgMHgxMWQzLCB7IDB4OGYsIDB4NWYsIDB4MDAsIDB4MTAsIDB4YTQsIDB4ZTcsIDB4
M2QsIDB4OWEgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDbGFzc0lE
KG5zSUpTQ0lEICogKmFDbGFzc0lEKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEludGVy
ZmFjZUlEKG5zSUpTSUlEICogKmFJbnRlcmZhY2VJRCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBHZXRJbml0aWFsaXplcihjaGFyICogKmFJbml0aWFsaXplcikgPSAwOwoKfTsKIyA1NzcgIi4u
Ly4uL2Rpc3QvaW5jbHVkZS94cGNjb21wb25lbnRzLmgiCmNsYXNzIG5zSVhQQ0NvbXBvbmVudHMg
OiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdl
dElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4NDI2MjRmODAsIDB4ZDI2YywgMHgx
MWQyLCB7IDB4OTgsIDB4NDIsIDB4MDAsIDB4NjAsIDB4MDgsIDB4OTYsIDB4MjQsIDB4MjIgfX07
IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJbnRlcmZhY2VzKG5zSVhQQ0Nv
bXBvbmVudHNfSW50ZXJmYWNlcyAqICphSW50ZXJmYWNlcykgPSAwOwoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRDbGFzc2VzKG5zSVhQQ0NvbXBvbmVudHNfQ2xhc3NlcyAqICphQ2xhc3NlcykgPSAw
OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDbGFzc2VzQnlJRChuc0lYUENDb21wb25lbnRzX0Ns
YXNzZXNCeUlEICogKmFDbGFzc2VzQnlJRCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRT
dGFjayhuc0lTdGFja0ZyYW1lICogKmFTdGFjaykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH
ZXRSZXN1bHRzKG5zSVhQQ0NvbXBvbmVudHNfUmVzdWx0cyAqICphUmVzdWx0cykgPSAwOwoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRNYW5hZ2VyKG5zSUNvbXBvbmVudE1hbmFnZXIgKiAqYU1hbmFn
ZXIpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SUQobnNJWFBDQ29tcG9uZW50c19JRCAq
ICphSUQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RXhjZXB0aW9uKG5zSVhQQ0NvbXBv
bmVudHNfRXhjZXB0aW9uICogKmFFeGNlcHRpb24pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0Q29uc3RydWN0b3IobnNJWFBDQ29tcG9uZW50c19Db25zdHJ1Y3RvciAqICphQ29uc3RydWN0
b3IpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNTdWNjZXNzQ29kZShuc3Jlc3VsdCByZXN1
bHQsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKfTsKIyAxOSAiLi4vLi4vZGlzdC9pbmNsdWRlL25z
SVhQQ29ubmVjdC5oIiAyCiMgMzAgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lYUENvbm5lY3QuaCIK
IyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJSW50ZXJmYWNlSW5mby5oIiAxCiMgMTcgIi4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0lJbnRlcmZhY2VJbmZvLmgiCmNsYXNzIG5zWFBUTWV0aG9kSW5mbzsK
Y2xhc3MgbnNYUFRDb25zdGFudDsKY2xhc3MgbnNYUFRQYXJhbUluZm87CmNsYXNzIG5zWFBUVHlw
ZTsKIyAyOSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUludGVyZmFjZUluZm8uaCIKY2xhc3MgbnNJ
SW50ZXJmYWNlSW5mbyA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBj
b25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgyMTVkYmUw
NCwgMHg5NGE3LCAweDExZDIsIHsgMHhiYSwgMHg1OCwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwg
MHg1ZCwgMHhkNyB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5hbWUo
Y2hhciAqICphTmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJSUQobnNJSUQgKiAq
YUlJRCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1NjcmlwdGFibGUoUFJCb29sICpfcmV0
dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBhcmVudChuc0lJbnRlcmZhY2VJbmZv
ICogKmFQYXJlbnQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWV0aG9kQ291bnQo
UFJVaW50MTYgKmFNZXRob2RDb3VudCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb25z
dGFudENvdW50KFBSVWludDE2ICphQ29uc3RhbnRDb3VudCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFs
IG5zcmVzdWx0IEdldE1ldGhvZEluZm8oUFJVaW50MTYgaW5kZXgsIGNvbnN0IG5zWFBUTWV0aG9k
SW5mbyAqICppbmZvKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1ldGhvZEluZm9Gb3JO
YW1lKGNvbnN0IGNoYXIgKm1ldGhvZE5hbWUsIFBSVWludDE2ICppbmRleCwgY29uc3QgbnNYUFRN
ZXRob2RJbmZvICogKmluZm8pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29uc3RhbnQo
UFJVaW50MTYgaW5kZXgsIGNvbnN0IG5zWFBUQ29uc3RhbnQgKiAqY29uc3RhbnQpID0gMDsKCgoK
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEluZm9Gb3JQYXJhbShQUlVpbnQxNiBtZXRob2RJbmRl
eCwgY29uc3QgbnNYUFRQYXJhbUluZm8gKiBwYXJhbSwgbnNJSW50ZXJmYWNlSW5mbyAqKl9yZXR2
YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SUlERm9yUGFyYW0oUFJVaW50MTYgbWV0
aG9kSW5kZXgsIGNvbnN0IG5zWFBUUGFyYW1JbmZvICogcGFyYW0sIG5zSUlEICogKl9yZXR2YWwp
ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VHlwZUZvclBhcmFtKFBSVWludDE2IG1l
dGhvZEluZGV4LCBjb25zdCBuc1hQVFBhcmFtSW5mbyAqIHBhcmFtLCBQUlVpbnQxNiBkaW1lbnNp
b24sIG5zWFBUVHlwZSAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTaXpl
SXNBcmdOdW1iZXJGb3JQYXJhbShQUlVpbnQxNiBtZXRob2RJbmRleCwgY29uc3QgbnNYUFRQYXJh
bUluZm8gKiBwYXJhbSwgUFJVaW50MTYgZGltZW5zaW9uLCBQUlVpbnQ4ICpfcmV0dmFsKSA9IDA7
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExlbmd0aElzQXJnTnVtYmVyRm9yUGFyYW0oUFJVaW50
MTYgbWV0aG9kSW5kZXgsIGNvbnN0IG5zWFBUUGFyYW1JbmZvICogcGFyYW0sIFBSVWludDE2IGRp
bWVuc2lvbiwgUFJVaW50OCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJ
bnRlcmZhY2VJc0FyZ051bWJlckZvclBhcmFtKFBSVWludDE2IG1ldGhvZEluZGV4LCBjb25zdCBu
c1hQVFBhcmFtSW5mbyAqIHBhcmFtLCBQUlVpbnQ4ICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFs
IG5zcmVzdWx0IElzSUlEKGNvbnN0IG5zSUlEICogSUlELCBQUkJvb2wgKl9yZXR2YWwpID0gMDsK
CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFtZVNoYXJlZChjb25zdCBjaGFyICoqbmFtZSkgPSAw
OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJSURTaGFyZWQoY29uc3QgbnNJSUQgKiAqaWlkKSA9
IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzRnVuY3Rpb24oUFJCb29sICpfcmV0dmFsKSA9IDA7
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEhhc0FuY2VzdG9yKGNvbnN0IG5zSUlEICogaWlkLCBQUkJv
b2wgKl9yZXR2YWwpID0gMDsKCn07CiMgMzEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lYUENvbm5l
Y3QuaCIgMgoKCgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lJbnRlcmZhY2VJbmZvTWFuYWdl
ci5oIiAxCiMgMzMgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lJbnRlcmZhY2VJbmZvTWFuYWdlci5o
IgpjbGFzcyBuc0lJbnRlcmZhY2VJbmZvTWFuYWdlciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBw
dWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJ
RCBpaWQgPSB7MHg4YjE2MTkwMCwgMHhiZTJiLCAweDExZDIsIHsgMHg5OCwgMHgzMSwgMHgwMCwg
MHg2MCwgMHgwOCwgMHg5NiwgMHgyNCwgMHgyMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFs
IG5zcmVzdWx0IEdldEluZm9Gb3JJSUQoY29uc3QgbnNJSUQgKiBpaWQsIG5zSUludGVyZmFjZUlu
Zm8gKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEluZm9Gb3JOYW1lKGNv
bnN0IGNoYXIgKm5hbWUsIG5zSUludGVyZmFjZUluZm8gKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldElJREZvck5hbWUoY29uc3QgY2hhciAqbmFtZSwgbnNJSUQgKiAqX3Jl
dHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROYW1lRm9ySUlEKGNvbnN0IG5zSUlE
ICogaWlkLCBjaGFyICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFbnVtZXJh
dGVJbnRlcmZhY2VzKG5zSUVudW1lcmF0b3IgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5z
cmVzdWx0IEF1dG9SZWdpc3RlckludGVyZmFjZXModm9pZCkgPSAwOwoKfTsKIyAzNSAiLi4vLi4v
ZGlzdC9pbmNsdWRlL25zSVhQQ29ubmVjdC5oIiAyCgoKCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRl
L25zSUV4Y2VwdGlvblNlcnZpY2UuaCIgMQojIDI5ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRXhj
ZXB0aW9uU2VydmljZS5oIgpjbGFzcyBuc0lFeGNlcHRpb25Qcm92aWRlciA6IHB1YmxpYyBuc0lT
dXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRp
YyBjb25zdCBuc0lJRCBpaWQgPSB7MHgwNTc3NzQ0YywgMHhjMWQyLCAweDQ3ZjIsIHsgMHg4Yiwg
MHhjYywgMHhjZSwgMHg3YSwgMHg5ZSwgMHg1YSwgMHg4OCwgMHhmYyB9fTsgcmV0dXJuIGlpZDt9
CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFeGNlcHRpb24obnNyZXN1bHQgcmVzdWx0LCBuc0lF
eGNlcHRpb24gKipfcmV0dmFsKSA9IDA7Cgp9OwojIDk4ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJ
RXhjZXB0aW9uU2VydmljZS5oIgpjbGFzcyBuc0lFeGNlcHRpb25NYW5hZ2VyIDogcHVibGljIG5z
SVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3Rh
dGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGVmYzlkMDBiLCAweDIzMWMsIDB4NGZlYiwgeyAweDg1
LCAweDJjLCAweGFjLCAweDAxLCAweDcyLCAweDY2LCAweGE0LCAweDE1IH19OyByZXR1cm4gaWlk
O30KCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEN1cnJlbnRFeGNlcHRpb24obnNJRXhjZXB0aW9u
ICplcnJvcikgPSAwOwoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q3VycmVudEV4Y2VwdGlvbihu
c0lFeGNlcHRpb24gKipfcmV0dmFsKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RXhj
ZXB0aW9uRnJvbVByb3ZpZGVyKG5zcmVzdWx0IHJjLCBuc0lFeGNlcHRpb24gKipfcmV0dmFsKSA9
IDA7Cgp9OwojIDE5NCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUV4Y2VwdGlvblNlcnZpY2UuaCIK
Y2xhc3MgbnNJRXhjZXB0aW9uU2VydmljZSA6IHB1YmxpYyBuc0lFeGNlcHRpb25NYW5hZ2VyIHsK
IHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5z
SUlEIGlpZCA9IHsweDM1YTg4ZjU0LCAweGYyNjcsIDB4NDQxNCwgeyAweDkyLCAweGE3LCAweDE5
LCAweDFmLCAweDY0LCAweDU0LCAweGFiLCAweDUyIH19OyByZXR1cm4gaWlkO30KCgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldEN1cnJlbnRFeGNlcHRpb25NYW5hZ2VyKG5zSUV4Y2VwdGlvbk1hbmFn
ZXIgKiAqYUN1cnJlbnRFeGNlcHRpb25NYW5hZ2VyKSA9IDA7CiMgMjEyICIuLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJRXhjZXB0aW9uU2VydmljZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgUmVnaXN0ZXJF
eGNlcHRpb25Qcm92aWRlcihuc0lFeGNlcHRpb25Qcm92aWRlciAqcHJvdmlkZXIsIFBSVWludDMy
IG1vZHVsZUNvZGUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgVW5yZWdpc3RlckV4Y2VwdGlv
blByb3ZpZGVyKG5zSUV4Y2VwdGlvblByb3ZpZGVyICpwcm92aWRlciwgUFJVaW50MzIgbW9kdWxl
Q29kZSkgPSAwOwoKfTsKIyAzOSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVhQQ29ubmVjdC5oIiAy
CgoKCgoKCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL2pzcHVidGQuaCIgMQojIDQ2ICIuLi8uLi9k
aXN0L2luY2x1ZGUvbnNJWFBDb25uZWN0LmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUveHB0
aW5mby5oIiAxCiMgMjggIi4uLy4uL2Rpc3QvaW5jbHVkZS94cHRpbmZvLmgiCiMgMSAiL3Vzci9z
cmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQojIDI5ICIuLi8u
Li9kaXN0L2luY2x1ZGUveHB0aW5mby5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL3hwdF9z
dHJ1Y3QuaCIgMQojIDMxICIuLi8uLi9kaXN0L2luY2x1ZGUveHB0X3N0cnVjdC5oIgojIDEgIi4u
Ly4uL2Rpc3QvaW5jbHVkZS94cHRfYXJlbmEuaCIgMQojIDMwICIuLi8uLi9kaXN0L2luY2x1ZGUv
eHB0X2FyZW5hLmgiCiMgMSAiL3Vzci9zcmMvbWlzYy9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By
L3BydHlwZXMuaCIgMQojIDMxICIuLi8uLi9kaXN0L2luY2x1ZGUveHB0X2FyZW5hLmgiIDIKIyAx
ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvYXNzZXJ0Lmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9h
c3NlcnQuaCIgMiAzCiMgNjUgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwpleHRlcm4gIkMiIHsK
CgpleHRlcm4gdm9pZCBfX2Fzc2VydF9mYWlsIChfX2NvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBf
X2NvbnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
aW50IF9fbGluZSwgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKQogICAgIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9wZXJyb3Jf
ZmFpbCAoaW50IF9fZXJybnVtLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xpbmUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIHZvaWQgX19hc3NlcnQg
KGNvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBjb25zdCBjaGFyICpfX2ZpbGUsIGludCBfX2xpbmUp
CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCn0KIyAzMiAi
Li4vLi4vZGlzdC9pbmNsdWRlL3hwdF9hcmVuYS5oIiAyCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGxp
Yi5oIiAxIDMKIyAzMyAiLi4vLi4vZGlzdC9pbmNsdWRlL3hwdF9hcmVuYS5oIiAyCiMgNTYgIi4u
Ly4uL2Rpc3QvaW5jbHVkZS94cHRfYXJlbmEuaCIKZXh0ZXJuICJDIiB7CgoKCgoKdHlwZWRlZiBz
dHJ1Y3QgWFBUQXJlbmEgWFBUQXJlbmE7CgpYUFRBcmVuYSAqClhQVF9OZXdBcmVuYShQUlVpbnQz
MiBibG9ja19zaXplLCBzaXplX3QgYWxpZ25tZW50LCBjb25zdCBjaGFyKiBuYW1lKTsKCnZvaWQK
WFBUX0Rlc3Ryb3lBcmVuYShYUFRBcmVuYSAqYXJlbmEpOwoKdm9pZApYUFRfRHVtcFN0YXRzKFhQ
VEFyZW5hICphcmVuYSk7Cgp2b2lkICoKWFBUX0FyZW5hTWFsbG9jKFhQVEFyZW5hICphcmVuYSwg
c2l6ZV90IHNpemUpOwoKY2hhciAqClhQVF9BcmVuYVN0ckR1cChYUFRBcmVuYSAqYXJlbmEsIGNv
bnN0IGNoYXIgKiBzKTsKCnZvaWQKWFBUX05vdGlmeURvbmVMb2FkaW5nKFhQVEFyZW5hICphcmVu
YSk7Cgp2b2lkClhQVF9BcmVuYUZyZWUoWFBUQXJlbmEgKmFyZW5hLCB2b2lkKiBibG9jayk7CiMg
MTExICIuLi8uLi9kaXN0L2luY2x1ZGUveHB0X2FyZW5hLmgiCn0KIyAzMiAiLi4vLi4vZGlzdC9p
bmNsdWRlL3hwdF9zdHJ1Y3QuaCIgMgoKZXh0ZXJuICJDIiB7CiMgNDYgIi4uLy4uL2Rpc3QvaW5j
bHVkZS94cHRfc3RydWN0LmgiCnR5cGVkZWYgc3RydWN0IFhQVEhlYWRlciBYUFRIZWFkZXI7CnR5
cGVkZWYgc3RydWN0IFhQVEludGVyZmFjZURpcmVjdG9yeUVudHJ5IFhQVEludGVyZmFjZURpcmVj
dG9yeUVudHJ5Owp0eXBlZGVmIHN0cnVjdCBYUFRJbnRlcmZhY2VEZXNjcmlwdG9yIFhQVEludGVy
ZmFjZURlc2NyaXB0b3I7CnR5cGVkZWYgc3RydWN0IFhQVENvbnN0RGVzY3JpcHRvciBYUFRDb25z
dERlc2NyaXB0b3I7CnR5cGVkZWYgc3RydWN0IFhQVE1ldGhvZERlc2NyaXB0b3IgWFBUTWV0aG9k
RGVzY3JpcHRvcjsKdHlwZWRlZiBzdHJ1Y3QgWFBUUGFyYW1EZXNjcmlwdG9yIFhQVFBhcmFtRGVz
Y3JpcHRvcjsKdHlwZWRlZiBzdHJ1Y3QgWFBUVHlwZURlc2NyaXB0b3IgWFBUVHlwZURlc2NyaXB0
b3I7CnR5cGVkZWYgc3RydWN0IFhQVFR5cGVEZXNjcmlwdG9yUHJlZml4IFhQVFR5cGVEZXNjcmlw
dG9yUHJlZml4Owp0eXBlZGVmIHN0cnVjdCBYUFRTdHJpbmcgWFBUU3RyaW5nOwp0eXBlZGVmIHN0
cnVjdCBYUFRBbm5vdGF0aW9uIFhQVEFubm90YXRpb247CiMgODkgIi4uLy4uL2Rpc3QvaW5jbHVk
ZS94cHRfc3RydWN0LmgiCnN0cnVjdCBYUFRIZWFkZXIgewogICAgUFJVaW50OCBtYWdpY1sxNl07
CiAgICBQUlVpbnQ4IG1ham9yX3ZlcnNpb247CiAgICBQUlVpbnQ4IG1pbm9yX3ZlcnNpb247CiAg
ICBQUlVpbnQxNiBudW1faW50ZXJmYWNlczsKICAgIFBSVWludDMyIGZpbGVfbGVuZ3RoOwogICAg
WFBUSW50ZXJmYWNlRGlyZWN0b3J5RW50cnkgKmludGVyZmFjZV9kaXJlY3Rvcnk7CiAgICBQUlVp
bnQzMiBkYXRhX3Bvb2w7CiAgICBYUFRBbm5vdGF0aW9uICphbm5vdGF0aW9uczsKfTsKIyAxMTkg
Ii4uLy4uL2Rpc3QvaW5jbHVkZS94cHRfc3RydWN0LmgiCmV4dGVybiBYUFRIZWFkZXIgKgpYUFRf
TmV3SGVhZGVyKFhQVEFyZW5hICphcmVuYSwgUFJVaW50MTYgbnVtX2ludGVyZmFjZXMpOwoKZXh0
ZXJuIHZvaWQKWFBUX0ZyZWVIZWFkZXIoWFBUQXJlbmEgKmFyZW5hLCBYUFRIZWFkZXIqIGFIZWFk
ZXIpOwoKCmV4dGVybiBQUlVpbnQzMgpYUFRfU2l6ZU9mSGVhZGVyKFhQVEhlYWRlciAqaGVhZGVy
KTsKCgpleHRlcm4gUFJVaW50MzIKWFBUX1NpemVPZkhlYWRlckJsb2NrKFhQVEhlYWRlciAqaGVh
ZGVyKTsKCgoKCgoKCnN0cnVjdCBYUFRJbnRlcmZhY2VEaXJlY3RvcnlFbnRyeSB7CiAgICBuc0lE
IGlpZDsKICAgIGNoYXIgKm5hbWU7CiAgICBjaGFyICpuYW1lX3NwYWNlOwogICAgWFBUSW50ZXJm
YWNlRGVzY3JpcHRvciAqaW50ZXJmYWNlX2Rlc2NyaXB0b3I7CgoKCgoKfTsKCmV4dGVybiBQUkJv
b2wKWFBUX0ZpbGxJbnRlcmZhY2VEaXJlY3RvcnlFbnRyeShYUFRBcmVuYSAqYXJlbmEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgWFBUSW50ZXJmYWNlRGlyZWN0b3J5RW50cnkgKmlk
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lEICppaWQsIGNoYXIgKm5hbWUs
IGNoYXIgKm5hbWVfc3BhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWFBUSW50
ZXJmYWNlRGVzY3JpcHRvciAqZGVzY3JpcHRvcik7CgpleHRlcm4gdm9pZApYUFRfRGVzdHJveUlu
dGVyZmFjZURpcmVjdG9yeUVudHJ5KFhQVEFyZW5hICphcmVuYSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBYUFRJbnRlcmZhY2VEaXJlY3RvcnlFbnRyeSogaWRlKTsKCgoKCgpz
dHJ1Y3QgWFBUSW50ZXJmYWNlRGVzY3JpcHRvciB7CiAgICBQUlVpbnQxNiBwYXJlbnRfaW50ZXJm
YWNlOwogICAgUFJVaW50MTYgbnVtX21ldGhvZHM7CiAgICBYUFRNZXRob2REZXNjcmlwdG9yICpt
ZXRob2RfZGVzY3JpcHRvcnM7CiAgICBQUlVpbnQxNiBudW1fY29uc3RhbnRzOwogICAgWFBUQ29u
c3REZXNjcmlwdG9yICpjb25zdF9kZXNjcmlwdG9yczsKICAgIFBSVWludDggZmxhZ3M7CiMgMTg5
ICIuLi8uLi9kaXN0L2luY2x1ZGUveHB0X3N0cnVjdC5oIgogICAgWFBUVHlwZURlc2NyaXB0b3Ig
KmFkZGl0aW9uYWxfdHlwZXM7CiAgICBQUlVpbnQxNiBudW1fYWRkaXRpb25hbF90eXBlczsKfTsK
IyAyMDIgIi4uLy4uL2Rpc3QvaW5jbHVkZS94cHRfc3RydWN0LmgiCmV4dGVybiBQUkJvb2wKWFBU
X0dldEludGVyZmFjZUluZGV4QnlOYW1lKFhQVEludGVyZmFjZURpcmVjdG9yeUVudHJ5ICppZGVf
YmxvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQxNiBudW1faW50ZXJmYWNl
cywgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDE2ICppbmRl
eHApOwoKZXh0ZXJuIFhQVEludGVyZmFjZURlc2NyaXB0b3IgKgpYUFRfTmV3SW50ZXJmYWNlRGVz
Y3JpcHRvcihYUFRBcmVuYSAqYXJlbmEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWlu
dDE2IHBhcmVudF9pbnRlcmZhY2UsIFBSVWludDE2IG51bV9tZXRob2RzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBQUlVpbnQxNiBudW1fY29uc3RhbnRzLCBQUlVpbnQ4IGZsYWdzKTsKCmV4
dGVybiB2b2lkClhQVF9GcmVlSW50ZXJmYWNlRGVzY3JpcHRvcihYUFRBcmVuYSAqYXJlbmEsIFhQ
VEludGVyZmFjZURlc2NyaXB0b3IqIGlkKTsKCmV4dGVybiBQUkJvb2wKWFBUX0ludGVyZmFjZURl
c2NyaXB0b3JBZGRUeXBlcyhYUFRBcmVuYSAqYXJlbmEsIFhQVEludGVyZmFjZURlc2NyaXB0b3Ig
KmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDE2IG51bSk7CgpleHRl
cm4gUFJCb29sClhQVF9JbnRlcmZhY2VEZXNjcmlwdG9yQWRkTWV0aG9kcyhYUFRBcmVuYSAqYXJl
bmEsIFhQVEludGVyZmFjZURlc2NyaXB0b3IgKmlkLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUFJVaW50MTYgbnVtKTsKCmV4dGVybiBQUkJvb2wKWFBUX0ludGVyZmFjZURlc2Ny
aXB0b3JBZGRDb25zdHMoWFBUQXJlbmEgKmFyZW5hLCBYUFRJbnRlcmZhY2VEZXNjcmlwdG9yICpp
ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MTYgbnVtKTsKCgoKCgpz
dHJ1Y3QgWFBUU3RyaW5nIHsKICAgIFBSVWludDE2IGxlbmd0aDsKICAgIGNoYXIgKmJ5dGVzOwp9
OwoKZXh0ZXJuIFhQVFN0cmluZyAqClhQVF9OZXdTdHJpbmcoWFBUQXJlbmEgKmFyZW5hLCBQUlVp
bnQxNiBsZW5ndGgsIGNoYXIgKmJ5dGVzKTsKCmV4dGVybiBYUFRTdHJpbmcgKgpYUFRfTmV3U3Ry
aW5nWihYUFRBcmVuYSAqYXJlbmEsIGNoYXIgKmJ5dGVzKTsKIyAyNjAgIi4uLy4uL2Rpc3QvaW5j
bHVkZS94cHRfc3RydWN0LmgiCnN0cnVjdCBYUFRUeXBlRGVzY3JpcHRvclByZWZpeCB7CiAgICBQ
UlVpbnQ4IGZsYWdzOwp9OwojIDI4MCAiLi4vLi4vZGlzdC9pbmNsdWRlL3hwdF9zdHJ1Y3QuaCIK
ZW51bSBYUFRUeXBlRGVzY3JpcHRvclRhZ3MgewogICAgVERfSU5UOCA9IDAsCiAgICBURF9JTlQx
NiA9IDEsCiAgICBURF9JTlQzMiA9IDIsCiAgICBURF9JTlQ2NCA9IDMsCiAgICBURF9VSU5UOCA9
IDQsCiAgICBURF9VSU5UMTYgPSA1LAogICAgVERfVUlOVDMyID0gNiwKICAgIFREX1VJTlQ2NCA9
IDcsCiAgICBURF9GTE9BVCA9IDgsCiAgICBURF9ET1VCTEUgPSA5LAogICAgVERfQk9PTCA9IDEw
LAogICAgVERfQ0hBUiA9IDExLAogICAgVERfV0NIQVIgPSAxMiwKICAgIFREX1ZPSUQgPSAxMywK
ICAgIFREX1BOU0lJRCA9IDE0LAogICAgVERfRE9NU1RSSU5HID0gMTUsCiAgICBURF9QU1RSSU5H
ID0gMTYsCiAgICBURF9QV1NUUklORyA9IDE3LAogICAgVERfSU5URVJGQUNFX1RZUEUgPSAxOCwK
ICAgIFREX0lOVEVSRkFDRV9JU19UWVBFID0gMTksCiAgICBURF9BUlJBWSA9IDIwLAogICAgVERf
UFNUUklOR19TSVpFX0lTID0gMjEsCiAgICBURF9QV1NUUklOR19TSVpFX0lTID0gMjIKfTsKCnN0
cnVjdCBYUFRUeXBlRGVzY3JpcHRvciB7CiAgICBYUFRUeXBlRGVzY3JpcHRvclByZWZpeCBwcmVm
aXg7CiAgICBQUlVpbnQ4IGFyZ251bTsKICAgIFBSVWludDggYXJnbnVtMjsKICAgIHVuaW9uIHsK
ICAgICAgICBQUlVpbnQxNiBpZmFjZTsKICAgICAgICBQUlVpbnQxNiBhZGRpdGlvbmFsX3R5cGU7
CiAgICB9IHR5cGU7Cn07CiMgMzM5ICIuLi8uLi9kaXN0L2luY2x1ZGUveHB0X3N0cnVjdC5oIgp1
bmlvbiBYUFRDb25zdFZhbHVlIHsKICAgIFBSSW50OCBpODsKICAgIFBSVWludDggdWk4OwogICAg
UFJJbnQxNiBpMTY7CiAgICBQUlVpbnQxNiB1aTE2OwogICAgUFJJbnQzMiBpMzI7CiAgICBQUlVp
bnQzMiB1aTMyOwogICAgUFJJbnQ2NCBpNjQ7CiAgICBQUlVpbnQ2NCB1aTY0OwogICAgZmxvYXQg
Zmx0OwogICAgZG91YmxlIGRibDsKICAgIFBSQm9vbCBidWw7CiAgICBjaGFyIGNoOwogICAgUFJV
aW50MTYgd2NoOwogICAgbnNJRCAqaWlkOwogICAgWFBUU3RyaW5nICpzdHJpbmc7CiAgICBjaGFy
ICpzdHI7CiAgICBQUlVpbnQxNiAqd3N0cjsKfTsKCnN0cnVjdCBYUFRDb25zdERlc2NyaXB0b3Ig
ewogICAgY2hhciAqbmFtZTsKICAgIFhQVFR5cGVEZXNjcmlwdG9yIHR5cGU7CiAgICB1bmlvbiBY
UFRDb25zdFZhbHVlIHZhbHVlOwp9OwoKCgoKCnN0cnVjdCBYUFRQYXJhbURlc2NyaXB0b3Igewog
ICAgUFJVaW50OCBmbGFnczsKICAgIFhQVFR5cGVEZXNjcmlwdG9yIHR5cGU7Cn07CiMgMzkyICIu
Li8uLi9kaXN0L2luY2x1ZGUveHB0X3N0cnVjdC5oIgpleHRlcm4gUFJCb29sClhQVF9GaWxsUGFy
YW1EZXNjcmlwdG9yKFhQVEFyZW5hICphcmVuYSwKICAgICAgICAgICAgICAgICAgICAgICAgWFBU
UGFyYW1EZXNjcmlwdG9yICpwZCwgUFJVaW50OCBmbGFncywKICAgICAgICAgICAgICAgICAgICAg
ICAgWFBUVHlwZURlc2NyaXB0b3IgKnR5cGUpOwoKCgoKCnN0cnVjdCBYUFRNZXRob2REZXNjcmlw
dG9yIHsKICAgIFBSVWludDggZmxhZ3M7CiAgICBjaGFyICpuYW1lOwogICAgUFJVaW50OCBudW1f
YXJnczsKICAgIFhQVFBhcmFtRGVzY3JpcHRvciAqcGFyYW1zOwogICAgWFBUUGFyYW1EZXNjcmlw
dG9yICpyZXN1bHQ7Cn07CiMgNDIzICIuLi8uLi9kaXN0L2luY2x1ZGUveHB0X3N0cnVjdC5oIgpl
eHRlcm4gUFJCb29sClhQVF9GaWxsTWV0aG9kRGVzY3JpcHRvcihYUFRBcmVuYSAqYXJlbmEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBYUFRNZXRob2REZXNjcmlwdG9yICptZXRoLCBQUlVpbnQ4
IGZsYWdzLCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50OCBudW1f
YXJncyk7CiMgNDQ3ICIuLi8uLi9kaXN0L2luY2x1ZGUveHB0X3N0cnVjdC5oIgpzdHJ1Y3QgWFBU
QW5ub3RhdGlvbiB7CiAgICBYUFRBbm5vdGF0aW9uICpuZXh0OwogICAgUFJVaW50OCBmbGFnczsK
CiAgICBYUFRTdHJpbmcgKmNyZWF0b3I7CiAgICBYUFRTdHJpbmcgKnByaXZhdGVfZGF0YTsKfTsK
CgoKCgoKZXh0ZXJuIFhQVEFubm90YXRpb24gKgpYUFRfTmV3QW5ub3RhdGlvbihYUFRBcmVuYSAq
YXJlbmEsIFBSVWludDggZmxhZ3MsIFhQVFN0cmluZyAqY3JlYXRvciwKICAgICAgICAgICAgICAg
ICAgWFBUU3RyaW5nICpwcml2YXRlX2RhdGEpOwoKfQojIDMwICIuLi8uLi9kaXN0L2luY2x1ZGUv
eHB0aW5mby5oIiAyCiMgNTkgIi4uLy4uL2Rpc3QvaW5jbHVkZS94cHRpbmZvLmgiCmNsYXNzIG5z
SUludGVyZmFjZUluZm9NYW5hZ2VyOwpleHRlcm4gIkMiIHsKCm5zSUludGVyZmFjZUluZm9NYW5h
Z2VyKgpYUFRJX0dldEludGVyZmFjZUluZm9NYW5hZ2VyKCk7CgoKdm9pZApYUFRJX0ZyZWVJbnRl
cmZhY2VJbmZvTWFuYWdlcigpOwp9CgoKCgoKCgpjbGFzcyBuc1hQVFR5cGUgOiBwdWJsaWMgWFBU
VHlwZURlc2NyaXB0b3JQcmVmaXgKewoKcHVibGljOgogICAgbnNYUFRUeXBlKCkKICAgICAgICB7
fQogICAgbnNYUFRUeXBlKGNvbnN0IFhQVFR5cGVEZXNjcmlwdG9yUHJlZml4JiBwcmVmaXgpCiAg
ICAgICAgeyooWFBUVHlwZURlc2NyaXB0b3JQcmVmaXgqKXRoaXMgPSBwcmVmaXg7fQoKICAgIG5z
WFBUVHlwZShjb25zdCB1aW50OCYgcHJlZml4KQogICAgICAgIHsqKHVpbnQ4Kil0aGlzID0gcHJl
Zml4O30KCiAgICBuc1hQVFR5cGUmIG9wZXJhdG9yPSh1aW50OCB2YWwpCiAgICAgICAge2ZsYWdz
ID0gdmFsOyByZXR1cm4gKnRoaXM7fQoKICAgIG5zWFBUVHlwZSYgb3BlcmF0b3I9KGNvbnN0IG5z
WFBUVHlwZSYgb3RoZXIpCiAgICAgICAge2ZsYWdzID0gb3RoZXIuZmxhZ3M7IHJldHVybiAqdGhp
czt9CgogICAgb3BlcmF0b3IgdWludDgoKSBjb25zdAogICAgICAgIHtyZXR1cm4gZmxhZ3M7fQoK
ICAgIFBSQm9vbCBJc1BvaW50ZXIoKSBjb25zdAogICAgICAgIHtyZXR1cm4gKFBSQm9vbCkgKChm
bGFncyAmIDB4ODApKTt9CgogICAgUFJCb29sIElzVW5pcXVlUG9pbnRlcigpIGNvbnN0CiAgICAg
ICAge3JldHVybiAoUFJCb29sKSAoKGZsYWdzICYgMHg0MCkpO30KCiAgICBQUkJvb2wgSXNSZWZl
cmVuY2UoKSBjb25zdAogICAgICAgIHtyZXR1cm4gKFBSQm9vbCkgKChmbGFncyAmIDB4MjApKTt9
CgogICAgUFJCb29sIElzQXJpdGhtZXRpYygpIGNvbnN0CiAgICAgICAge3JldHVybiBmbGFncyA8
PSBUX1dDSEFSO30KCiAgICBQUkJvb2wgSXNJbnRlcmZhY2VQb2ludGVyKCkgY29uc3QKICAgICAg
ICB7IHN3aXRjaCAoVGFnUGFydCgpKSB7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIGNhc2UgVF9JTlRFUkZBQ0U6CiAgICAgICAgICAg
ICBjYXNlIFRfSU5URVJGQUNFX0lTOgogICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAg
ICB9CiAgICAgICAgfQoKICAgIFBSQm9vbCBJc0FycmF5KCkgY29uc3QKICAgICAgICB7cmV0dXJu
IChQUkJvb2wpIFRhZ1BhcnQoKSA9PSBUX0FSUkFZO30KCgoKCiAgICBQUkJvb2wgSXNEZXBlbmRl
bnQoKSBjb25zdAogICAgICAgIHsgc3dpdGNoIChUYWdQYXJ0KCkpIHsKICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgY2FzZSBUX0lOVEVS
RkFDRV9JUzoKICAgICAgICAgICAgIGNhc2UgVERfQVJSQVk6CiAgICAgICAgICAgICBjYXNlIFRf
UFNUUklOR19TSVpFX0lTOgogICAgICAgICAgICAgY2FzZSBUX1BXU1RSSU5HX1NJWkVfSVM6CiAg
ICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgIH0KICAgICAgICB9CgogICAgdWludDgg
VGFnUGFydCgpIGNvbnN0CiAgICAgICAge3JldHVybiAodWludDgpIChmbGFncyAmICh+MHhlMCkp
O30KCiAgICBlbnVtCiAgICB7CiAgICAgICAgVF9JOCA9IFREX0lOVDggLAogICAgICAgIFRfSTE2
ID0gVERfSU5UMTYgLAogICAgICAgIFRfSTMyID0gVERfSU5UMzIgLAogICAgICAgIFRfSTY0ID0g
VERfSU5UNjQgLAogICAgICAgIFRfVTggPSBURF9VSU5UOCAsCiAgICAgICAgVF9VMTYgPSBURF9V
SU5UMTYgLAogICAgICAgIFRfVTMyID0gVERfVUlOVDMyICwKICAgICAgICBUX1U2NCA9IFREX1VJ
TlQ2NCAsCiAgICAgICAgVF9GTE9BVCA9IFREX0ZMT0FUICwKICAgICAgICBUX0RPVUJMRSA9IFRE
X0RPVUJMRSAsCiAgICAgICAgVF9CT09MID0gVERfQk9PTCAsCiAgICAgICAgVF9DSEFSID0gVERf
Q0hBUiAsCiAgICAgICAgVF9XQ0hBUiA9IFREX1dDSEFSICwKICAgICAgICBUX1ZPSUQgPSBURF9W
T0lEICwKICAgICAgICBUX0lJRCA9IFREX1BOU0lJRCAsCiAgICAgICAgVF9ET01TVFJJTkcgPSBU
RF9ET01TVFJJTkcgLAogICAgICAgIFRfQ0hBUl9TVFIgPSBURF9QU1RSSU5HICwKICAgICAgICBU
X1dDSEFSX1NUUiA9IFREX1BXU1RSSU5HICwKICAgICAgICBUX0lOVEVSRkFDRSA9IFREX0lOVEVS
RkFDRV9UWVBFICwKICAgICAgICBUX0lOVEVSRkFDRV9JUyA9IFREX0lOVEVSRkFDRV9JU19UWVBF
LAogICAgICAgIFRfQVJSQVkgPSBURF9BUlJBWSAsCiAgICAgICAgVF9QU1RSSU5HX1NJWkVfSVMg
PSBURF9QU1RSSU5HX1NJWkVfSVMgLAogICAgICAgIFRfUFdTVFJJTkdfU0laRV9JUyA9IFREX1BX
U1RSSU5HX1NJWkVfSVMKICAgIH07Cgp9OwoKY2xhc3MgbnNYUFRQYXJhbUluZm8gOiBwdWJsaWMg
WFBUUGFyYW1EZXNjcmlwdG9yCnsKCnB1YmxpYzoKICAgIG5zWFBUUGFyYW1JbmZvKGNvbnN0IFhQ
VFBhcmFtRGVzY3JpcHRvciYgZGVzYykKICAgICAgICB7KihYUFRQYXJhbURlc2NyaXB0b3IqKXRo
aXMgPSBkZXNjO30KCgogICAgUFJCb29sIElzSW4oKSBjb25zdCB7cmV0dXJuIDAgIT0gKChmbGFn
cyAmIDB4ODApKTt9CiAgICBQUkJvb2wgSXNPdXQoKSBjb25zdCB7cmV0dXJuIDAgIT0gKChmbGFn
cyAmIDB4NDApKTt9CiAgICBQUkJvb2wgSXNSZXR2YWwoKSBjb25zdCB7cmV0dXJuIDAgIT0gKChm
bGFncyAmIDB4MjApKTt9CiAgICBQUkJvb2wgSXNTaGFyZWQoKSBjb25zdCB7cmV0dXJuIDAgIT0g
KChmbGFncyAmIDB4MTApKTt9CiAgICBQUkJvb2wgSXNEaXBwZXIoKSBjb25zdCB7cmV0dXJuIDAg
IT0gKChmbGFncyAmIDB4MDgpKTt9CiAgICBjb25zdCBuc1hQVFR5cGUgR2V0VHlwZSgpIGNvbnN0
IHtyZXR1cm4gdHlwZS5wcmVmaXg7fQoKCgpwcml2YXRlOgogICAgbnNYUFRQYXJhbUluZm8oKTsK
Cn07CgpjbGFzcyBuc1hQVE1ldGhvZEluZm8gOiBwdWJsaWMgWFBUTWV0aG9kRGVzY3JpcHRvcgp7
CgpwdWJsaWM6CiAgICBuc1hQVE1ldGhvZEluZm8oY29uc3QgWFBUTWV0aG9kRGVzY3JpcHRvciYg
ZGVzYykKICAgICAgICB7KihYUFRNZXRob2REZXNjcmlwdG9yKil0aGlzID0gZGVzYzt9CgogICAg
UFJCb29sIElzR2V0dGVyKCkgY29uc3Qge3JldHVybiAwICE9ICgoZmxhZ3MgJiAweDgwKSApO30K
ICAgIFBSQm9vbCBJc1NldHRlcigpIGNvbnN0IHtyZXR1cm4gMCAhPSAoKGZsYWdzICYgMHg0MCkg
KTt9CiAgICBQUkJvb2wgSXNOb3RYUENPTSgpIGNvbnN0IHtyZXR1cm4gMCAhPSAoKGZsYWdzICYg
MHgyMCkpO30KICAgIFBSQm9vbCBJc0NvbnN0cnVjdG9yKCkgY29uc3Qge3JldHVybiAwICE9ICgo
ZmxhZ3MgJiAweDEwKSApO30KICAgIFBSQm9vbCBJc0hpZGRlbigpIGNvbnN0IHtyZXR1cm4gMCAh
PSAoKGZsYWdzICYgMHgwOCkgKTt9CiAgICBjb25zdCBjaGFyKiBHZXROYW1lKCkgY29uc3Qge3Jl
dHVybiBuYW1lO30KICAgIHVpbnQ4IEdldFBhcmFtQ291bnQoKSBjb25zdCB7cmV0dXJuIG51bV9h
cmdzO30KCiAgICBjb25zdCBuc1hQVFBhcmFtSW5mbyBHZXRQYXJhbSh1aW50OCBpZHgpIGNvbnN0
CiAgICAgICAgewogICAgICAgICAgICBpZiAoIShpZHggPCBHZXRQYXJhbUNvdW50KCkpKSBuc0Rl
YnVnOjpQcmVDb25kaXRpb24oImJhZCBhcmciLCAiaWR4IDwgR2V0UGFyYW1Db3VudCgpIiwgIi4u
Ly4uL2Rpc3QvaW5jbHVkZS94cHRpbmZvLmgiLCAyMDgpOwogICAgICAgICAgICByZXR1cm4gcGFy
YW1zW2lkeF07CiAgICAgICAgfQogICAgY29uc3QgbnNYUFRQYXJhbUluZm8gR2V0UmVzdWx0KCkg
Y29uc3QKICAgICAgICB7cmV0dXJuICpyZXN1bHQ7fQpwcml2YXRlOgogICAgbnNYUFRNZXRob2RJ
bmZvKCk7Cgp9OwoKCgpzdHJ1Y3QgbnNYUFRDTWluaVZhcmlhbnQ7CgpjbGFzcyBuc1hQVENvbnN0
YW50IDogcHVibGljIFhQVENvbnN0RGVzY3JpcHRvcgp7CgpwdWJsaWM6CiAgICBuc1hQVENvbnN0
YW50KGNvbnN0IFhQVENvbnN0RGVzY3JpcHRvciYgZGVzYykKICAgICAgICB7KihYUFRDb25zdERl
c2NyaXB0b3IqKXRoaXMgPSBkZXNjO30KCiAgICBjb25zdCBjaGFyKiBHZXROYW1lKCkgY29uc3QK
ICAgICAgICB7cmV0dXJuIG5hbWU7fQoKICAgIGNvbnN0IG5zWFBUVHlwZSBHZXRUeXBlKCkgY29u
c3QKICAgICAgICB7cmV0dXJuIHR5cGUucHJlZml4O30KCgoKCgogICAgY29uc3QgbnNYUFRDTWlu
aVZhcmlhbnQqIEdldFZhbHVlKCkgY29uc3QKICAgICAgICB7cmV0dXJuIChuc1hQVENNaW5pVmFy
aWFudCopICZ2YWx1ZTt9CnByaXZhdGU6CiAgICBuc1hQVENvbnN0YW50KCk7Cgp9OwojIDQ3ICIu
Li8uLi9kaXN0L2luY2x1ZGUvbnNJWFBDb25uZWN0LmgiIDIKIyAxMDYgIi4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lYUENvbm5lY3QuaCIKY2xhc3MgbnNJWFBDU2NyaXB0YWJsZTsKCmNsYXNzIG5zSVhQ
Q29ubmVjdDsKCmNsYXNzIG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmU7CgpjbGFzcyBuc0lJbnRl
cmZhY2VJbmZvOwoKY2xhc3MgbnNJWFBDU2VjdXJpdHlNYW5hZ2VyOwojIDEyNSAiLi4vLi4vZGlz
dC9pbmNsdWRlL25zSVhQQ29ubmVjdC5oIgpjbGFzcyBuc0lYUENvbm5lY3RKU09iamVjdEhvbGRl
ciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYg
R2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg4OTE2YTMyMCwgMHhkMTE4LCAw
eDExZDMsIHsgMHg4ZiwgMHgzYSwgMHgwMCwgMHgxMCwgMHhhNCwgMHhlNywgMHgzZCwgMHg5YSB9
fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEpTT2JqZWN0KEpTT2JqZWN0
ICogKmFKU09iamVjdCkgPSAwOwoKfTsKIyAxOTMgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lYUENv
bm5lY3QuaCIKY2xhc3MgbnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSA6IHB1YmxpYyBuc0lYUENv
bm5lY3RKU09iamVjdEhvbGRlciB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0
SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgyMTVkYmUwMiwgMHg5NGE3LCAweDEx
ZDIsIHsgMHhiYSwgMHg1OCwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHg1ZCwgMHhkNyB9fTsg
cmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5hdGl2ZShuc0lTdXBwb3J0cyAq
ICphTmF0aXZlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEpTT2JqZWN0UHJvdG90eXBl
KEpTT2JqZWN0ICogKmFKU09iamVjdFByb3RvdHlwZSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRYUENvbm5lY3QobnNJWFBDb25uZWN0ICogKmFYUENvbm5lY3QpID0gMDsKCgogIHZp
cnR1YWwgbnNyZXN1bHQgRmluZEludGVyZmFjZVdpdGhNZW1iZXIoanN2YWwgbmFtZUlELCBuc0lJ
bnRlcmZhY2VJbmZvICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGaW5kSW50
ZXJmYWNlV2l0aE5hbWUoanN2YWwgbmFtZUlELCBuc0lJbnRlcmZhY2VJbmZvICoqX3JldHZhbCkg
PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEZWJ1Z0R1bXAoUFJJbnQxNiBkZXB0aCkgPSAwOwoK
fTsKIyAzMjQgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lYUENvbm5lY3QuaCIKY2xhc3MgbnNJWFBD
b25uZWN0V3JhcHBlZEpTIDogcHVibGljIG5zSVhQQ29ubmVjdEpTT2JqZWN0SG9sZGVyIHsKIHB1
YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlE
IGlpZCA9IHsweGJlZDUyMDMwLCAweGJjYTYsIDB4MTFkMiwgeyAweGJhLCAweDc5LCAweDAwLCAw
eDgwLCAweDVmLCAweDhhLCAweDVkLCAweGQ3IH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwg
bnNyZXN1bHQgR2V0SW50ZXJmYWNlSW5mbyhuc0lJbnRlcmZhY2VJbmZvICogKmFJbnRlcmZhY2VJ
bmZvKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldElJRChuc0lJRCAqICphSUlEKSA9IDA7
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IERlYnVnRHVtcChQUkludDE2IGRlcHRoKSA9IDA7CgoKICB2
aXJ0dWFsIG5zcmVzdWx0IEFnZ3JlZ2F0ZWRRdWVyeUludGVyZmFjZShjb25zdCBuc0lJRCAmIHV1
aWQsIHZvaWQgKiAqcmVzdWx0KSA9IDA7Cgp9OwojIDQzNiAiLi4vLi4vZGlzdC9pbmNsdWRlL25z
SVhQQ29ubmVjdC5oIgpjbGFzcyBuc0lYUENOYXRpdmVDYWxsQ29udGV4dCA6IHB1YmxpYyBuc0lT
dXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRp
YyBjb25zdCBuc0lJRCBpaWQgPSB7MHgwZmE2OGE2MCwgMHg4Mjg5LCAweDExZDMsIHsgMHhiYiwg
MHgxYSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHg1ZCwgMHhkNyB9fTsgcmV0dXJuIGlpZDt9
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENhbGxlZShuc0lTdXBwb3J0cyAqICphQ2FsbGVlKSA9
IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENhbGxlZU1ldGhvZEluZGV4KFBSVWludDE2ICph
Q2FsbGVlTWV0aG9kSW5kZXgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2FsbGVlV3Jh
cHBlcihuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICogKmFDYWxsZWVXcmFwcGVyKSA9IDA7CgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IEdldEpTQ29udGV4dChKU0NvbnRleHQgKiAqYUpTQ29udGV4dCkg
PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBcmdjKFBSVWludDMyICphQXJnYykgPSAwOwoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBcmd2UHRyKGpzdmFsICogKmFBcmd2UHRyKSA9IDA7CgoK
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJldFZhbFB0cihqc3ZhbCAqICphUmV0VmFsUHRyKSA9
IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RXhjZXB0aW9uV2FzVGhyb3duKFBSQm9v
bCAqYUV4Y2VwdGlvbldhc1Rocm93bikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RXhjZXB0
aW9uV2FzVGhyb3duKFBSQm9vbCBhRXhjZXB0aW9uV2FzVGhyb3duKSA9IDA7CgoKCgoKCgogIHZp
cnR1YWwgbnNyZXN1bHQgR2V0UmV0dXJuVmFsdWVXYXNTZXQoUFJCb29sICphUmV0dXJuVmFsdWVX
YXNTZXQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFJldHVyblZhbHVlV2FzU2V0KFBSQm9v
bCBhUmV0dXJuVmFsdWVXYXNTZXQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2FsbGVl
SW50ZXJmYWNlKG5zSUludGVyZmFjZUluZm8gKiAqYUNhbGxlZUludGVyZmFjZSkgPSAwOwoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRDYWxsZWVDbGFzc0luZm8obnNJQ2xhc3NJbmZvICogKmFDYWxs
ZWVDbGFzc0luZm8pID0gMDsKCn07CiMgNzI0ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJWFBDb25u
ZWN0LmgiCmNsYXNzIG5zSVhQQ1dyYXBwZWRKU09iamVjdEdldHRlciA6IHB1YmxpYyBuc0lTdXBw
b3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBj
b25zdCBuc0lJRCBpaWQgPSB7MHgyNTRiYjJlMCwgMHg2NDM5LCAweDExZDQsIHsgMHg4ZiwgMHhl
MCwgMHgwMCwgMHgxMCwgMHhhNCwgMHhlNywgMHgzZCwgMHg5YSB9fTsgcmV0dXJuIGlpZDt9CgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5ldmVyQ2FsbGVkKG5zSVN1cHBvcnRzICogKmFOZXZlckNh
bGxlZCkgPSAwOwoKfTsKIyA3OTMgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lYUENvbm5lY3QuaCIK
Y2xhc3MgbnNJWFBDRnVuY3Rpb25UaGlzVHJhbnNsYXRvciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7
CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBu
c0lJRCBpaWQgPSB7MHgwMzllZjI2MCwgMHgyYTBkLCAweDExZDUsIHsgMHg5MCwgMHhhNywgMHgw
MCwgMHgxMCwgMHhhNCwgMHhlNywgMHgzZCwgMHg5YSB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0
dWFsIG5zcmVzdWx0IFRyYW5zbGF0ZVRoaXMobnNJU3VwcG9ydHMgKmFJbml0aWFsVGhpcywgbnNJ
SW50ZXJmYWNlSW5mbyAqYUludGVyZmFjZUluZm8sIFBSVWludDE2IGFNZXRob2RJbmRleCwgUFJC
b29sICphSGlkZUZpcnN0UGFyYW1Gcm9tSlMsIG5zSUlEICogKmFJSURPZlJlc3VsdCwgbnNJU3Vw
cG9ydHMgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDg2NiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVhQ
Q29ubmVjdC5oIgpjbGFzcyBuc0lYUENvbm5lY3QgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVi
bGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQg
aWlkID0gezB4ZWZhZTM3YjAsIDB4OTQ2ZCwgMHgxMWQyLCB7IDB4YmEsIDB4NTgsIDB4MDAsIDB4
ODAsIDB4NWYsIDB4OGEsIDB4NWQsIDB4ZDcgfX07IHJldHVybiBpaWQ7fQoKICBzdGF0aWMgY29u
c3QgbnNJRCYgR2V0Q0lEKCkge3N0YXRpYyBjb25zdCBuc0lEIGNpZCA9IHsgMHhjYjY1OTNlMCwg
MHhmOWIyLCAweDExZDIsIHsgMHhiZCwgMHhkNiwgMHgwLCAweDAsIDB4NjQsIDB4NjUsIDB4NzMs
IDB4NzQgfSB9OyByZXR1cm4gY2lkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdENsYXNzZXMo
SlNDb250ZXh0ICogYUpTQ29udGV4dCwgSlNPYmplY3QgKiBhR2xvYmFsSlNPYmopID0gMDsKCgog
IHZpcnR1YWwgbnNyZXN1bHQgSW5pdENsYXNzZXNXaXRoTmV3V3JhcHBlZEdsb2JhbChKU0NvbnRl
eHQgKiBhSlNDb250ZXh0LCBuc0lTdXBwb3J0cyAqYUNPTU9iaiwgY29uc3QgbnNJSUQgJiBhSUlE
LCBQUkJvb2wgYUNhbGxKU19Jbml0U3RhbmRhcmRDbGFzc2VzLCBuc0lYUENvbm5lY3RKU09iamVj
dEhvbGRlciAqKl9yZXR2YWwpID0gMDsKIyA5MTIgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lYUENv
bm5lY3QuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFdyYXBOYXRpdmUoSlNDb250ZXh0ICogYUpTQ29u
dGV4dCwgSlNPYmplY3QgKiBhU2NvcGUsIG5zSVN1cHBvcnRzICphQ09NT2JqLCBjb25zdCBuc0lJ
RCAmIGFJSUQsIG5zSVhQQ29ubmVjdEpTT2JqZWN0SG9sZGVyICoqX3JldHZhbCkgPSAwOwojIDkz
OCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVhQQ29ubmVjdC5oIgogIHZpcnR1YWwgbnNyZXN1bHQg
V3JhcEpTKEpTQ29udGV4dCAqIGFKU0NvbnRleHQsIEpTT2JqZWN0ICogYUpTT2JqLCBjb25zdCBu
c0lJRCAmIGFJSUQsIHZvaWQgKiAqcmVzdWx0KSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBHZXRXcmFwcGVkTmF0aXZlT2ZKU09iamVjdChKU0NvbnRleHQgKiBhSlNDb250ZXh0LCBKU09i
amVjdCAqIGFKU09iaiwgbnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqKl9yZXR2YWwpID0gMDsK
CgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0U2VjdXJpdHlNYW5hZ2VyRm9ySlNDb250ZXh0KEpTQ29u
dGV4dCAqIGFKU0NvbnRleHQsIG5zSVhQQ1NlY3VyaXR5TWFuYWdlciAqYU1hbmFnZXIsIFBSVWlu
dDE2IGZsYWdzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNlY3VyaXR5TWFuYWdlckZv
ckpTQ29udGV4dChKU0NvbnRleHQgKiBhSlNDb250ZXh0LCBuc0lYUENTZWN1cml0eU1hbmFnZXIg
KiphTWFuYWdlciwgUFJVaW50MTYgKmZsYWdzKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBTZXREZWZhdWx0U2VjdXJpdHlNYW5hZ2VyKG5zSVhQQ1NlY3VyaXR5TWFuYWdlciAqYU1hbmFn
ZXIsIFBSVWludDE2IGZsYWdzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERlZmF1bHRT
ZWN1cml0eU1hbmFnZXIobnNJWFBDU2VjdXJpdHlNYW5hZ2VyICoqYU1hbmFnZXIsIFBSVWludDE2
ICpmbGFncykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVTdGFja0ZyYW1lTG9jYXRp
b24oUFJVaW50MzIgYUxhbmd1YWdlLCBjb25zdCBjaGFyICphRmlsZW5hbWUsIGNvbnN0IGNoYXIg
KmFGdW5jdGlvbk5hbWUsIFBSSW50MzIgYUxpbmVOdW1iZXIsIG5zSVN0YWNrRnJhbWUgKmFDYWxs
ZXIsIG5zSVN0YWNrRnJhbWUgKipfcmV0dmFsKSA9IDA7CiMgOTc0ICIuLi8uLi9kaXN0L2luY2x1
ZGUvbnNJWFBDb25uZWN0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTeW5jSlNDb250ZXh0cyh2b2lk
KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEN1cnJlbnRKU1N0YWNrKG5zSVN0YWNrRnJh
bWUgKiAqYUN1cnJlbnRKU1N0YWNrKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEN1cnJl
bnROYXRpdmVDYWxsQ29udGV4dChuc0lYUENOYXRpdmVDYWxsQ29udGV4dCAqICphQ3VycmVudE5h
dGl2ZUNhbGxDb250ZXh0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBlbmRpbmdFeGNl
cHRpb24obnNJRXhjZXB0aW9uICogKmFQZW5kaW5nRXhjZXB0aW9uKSA9IDA7CiAgdmlydHVhbCBu
c3Jlc3VsdCBTZXRQZW5kaW5nRXhjZXB0aW9uKG5zSUV4Y2VwdGlvbiAqIGFQZW5kaW5nRXhjZXB0
aW9uKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IERlYnVnRHVtcChQUkludDE2IGRlcHRoKSA9
IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IERlYnVnRHVtcE9iamVjdChuc0lTdXBwb3J0cyAqYUNP
TU9iaiwgUFJJbnQxNiBkZXB0aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEZWJ1Z0R1bXBK
U1N0YWNrKFBSQm9vbCBzaG93QXJncywgUFJCb29sIHNob3dMb2NhbHMsIFBSQm9vbCBzaG93VGhp
c1Byb3BzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IERlYnVnRHVtcEV2YWxJbkpTU3RhY2tG
cmFtZShQUlVpbnQzMiBhRnJhbWVOdW1iZXIsIGNvbnN0IGNoYXIgKmFTb3VyY2VUZXh0KSA9IDA7
CiMgMTAwNiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVhQQ29ubmVjdC5oIgogIHZpcnR1YWwgbnNy
ZXN1bHQgU2V0U2FmZUpTQ29udGV4dEZvckN1cnJlbnRUaHJlYWQoSlNDb250ZXh0ICogY3gpID0g
MDsKIyAxMDIzICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJWFBDb25uZWN0LmgiCiAgdmlydHVhbCBu
c3Jlc3VsdCBXcmFwSlNBZ2dyZWdhdGVkVG9OYXRpdmUobnNJU3VwcG9ydHMgKmFPdXRlciwgSlND
b250ZXh0ICogYUpTQ29udGV4dCwgSlNPYmplY3QgKiBhSlNPYmosIGNvbnN0IG5zSUlEICYgYUlJ
RCwgdm9pZCAqICpyZXN1bHQpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdyYXBw
ZWROYXRpdmVPZk5hdGl2ZU9iamVjdChKU0NvbnRleHQgKiBhSlNDb250ZXh0LCBKU09iamVjdCAq
IGFTY29wZSwgbnNJU3VwcG9ydHMgKmFDT01PYmosIGNvbnN0IG5zSUlEICYgYUlJRCwgbnNJWFBD
b25uZWN0V3JhcHBlZE5hdGl2ZSAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0RnVuY3Rpb25UaGlzVHJhbnNsYXRvcihjb25zdCBuc0lJRCAmIGFJSUQsIG5zSVhQQ0Z1bmN0
aW9uVGhpc1RyYW5zbGF0b3IgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNl
dEZ1bmN0aW9uVGhpc1RyYW5zbGF0b3IoY29uc3QgbnNJSUQgJiBhSUlELCBuc0lYUENGdW5jdGlv
blRoaXNUcmFuc2xhdG9yICphVHJhbnNsYXRvciwgbnNJWFBDRnVuY3Rpb25UaGlzVHJhbnNsYXRv
ciAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVwYXJlbnRXcmFwcGVkTmF0
aXZlSWZGb3VuZChKU0NvbnRleHQgKiBhSlNDb250ZXh0LCBKU09iamVjdCAqIGFTY29wZSwgSlNP
YmplY3QgKiBhTmV3UGFyZW50LCBuc0lTdXBwb3J0cyAqYUNPTU9iaiwgbnNJWFBDb25uZWN0SlNP
YmplY3RIb2xkZXIgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENsZWFyQWxs
V3JhcHBlZE5hdGl2ZVNlY3VyaXR5UG9saWNpZXModm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRXcmFwcGVkTmF0aXZlUHJvdG90eXBlKEpTQ29udGV4dCAqIGFKU0NvbnRleHQsIEpT
T2JqZWN0ICogYVNjb3BlLCBuc0lDbGFzc0luZm8gKmFDbGFzc0luZm8sIG5zSVhQQ29ubmVjdEpT
T2JqZWN0SG9sZGVyICoqX3JldHZhbCkgPSAwOwoKfTsKIyA0MCAiLi4vLi4vZGlzdC9pbmNsdWRl
L25zWFBJVHJpZ2dlckluZm8uaCIgMgoKCgp0eXBlZGVmIHN0cnVjdCBYUElUcmlnZ2VyRXZlbnQg
ewogICAgUExFdmVudCBlOwogICAgbnNTdHJpbmcgVVJMOwogICAgUFJJbnQzMiBzdGF0dXM7CiAg
ICBKU0NvbnRleHQqIGN4OwogICAganN2YWwgZ2xvYmFsOwogICAganN2YWwgY2J2YWw7Cn0gWFBJ
VHJpZ2dlckV2ZW50OwoKCgpjbGFzcyBuc1hQSVRyaWdnZXJJdGVtCnsKICBwdWJsaWM6CiAgICBu
c1hQSVRyaWdnZXJJdGVtKCBjb25zdCBQUlVuaWNoYXIqIG5hbWUsIGNvbnN0IFBSVW5pY2hhciog
VVJMLCBQUkludDMyIGZsYWdzID0gMCk7CiAgICB+bnNYUElUcmlnZ2VySXRlbSgpOwoKICAgIG5z
U3RyaW5nIG1OYW1lOwogICAgbnNTdHJpbmcgbVVSTDsKICAgIG5zU3RyaW5nIG1Bcmd1bWVudHM7
CiAgICBQUkludDMyIG1GbGFnczsKCiAgICBuc0NPTVB0cjxuc0lMb2NhbEZpbGU+IG1GaWxlOwog
ICAgbnNDT01QdHI8bnNJT3V0cHV0U3RyZWFtPiBtT3V0U3RyZWFtOwoKICAgIFBSQm9vbCBJc0Zp
bGVVUkwoKSB7IHJldHVybiBtVVJMLkVxdWFsc1dpdGhDb252ZXJzaW9uKCJmaWxlOi8iLDAsNik7
IH0KICAgIFBSQm9vbCBJc1JlbGF0aXZlVVJMKCk7CgogIHByaXZhdGU6CgogICAgbnNYUElUcmln
Z2VySXRlbSYgb3BlcmF0b3I9KGNvbnN0IG5zWFBJVHJpZ2dlckl0ZW0mIHJocyk7CiAgICBuc1hQ
SVRyaWdnZXJJdGVtKGNvbnN0IG5zWFBJVHJpZ2dlckl0ZW0mIHJocyk7Cn07CgoKCmNsYXNzIG5z
WFBJVHJpZ2dlckluZm8KewogIHB1YmxpYzoKICAgIG5zWFBJVHJpZ2dlckluZm8oKTsKICAgIH5u
c1hQSVRyaWdnZXJJbmZvKCk7CgogICAgdm9pZCBBZGQoIG5zWFBJVHJpZ2dlckl0ZW0gKmFJdGVt
ICkKICAgICAgICAgICAgICAgICAgICAgICAgeyBpZiAoIGFJdGVtICkgbUl0ZW1zLkFwcGVuZEVs
ZW1lbnQoICh2b2lkKilhSXRlbSApOyB9CgogICAgbnNYUElUcmlnZ2VySXRlbSogR2V0KCBQUlVp
bnQzMiBhSW5kZXggKQogICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiAobnNYUElUcmln
Z2VySXRlbSopbUl0ZW1zLkVsZW1lbnRBdChhSW5kZXgpO30KCiAgICB2b2lkIFNhdmVDYWxsYmFj
ayggSlNDb250ZXh0ICphQ3gsIGpzdmFsIGFWYWwgKTsKCiAgICBQUlVpbnQzMiBTaXplKCkgeyBy
ZXR1cm4gbUl0ZW1zLkNvdW50KCk7IH0KCiAgICB2b2lkIFNlbmRTdGF0dXMoY29uc3QgUFJVbmlj
aGFyKiBVUkwsIFBSSW50MzIgc3RhdHVzKTsKCiAgcHJpdmF0ZToKICAgIG5zVm9pZEFycmF5IG1J
dGVtczsKICAgIEpTQ29udGV4dCAqbUN4OwogICAgbnNDT01QdHI8bnNJWFBDb25uZWN0SlNPYmpl
Y3RIb2xkZXI+IG1HbG9iYWxXcmFwcGVyOwogICAganN2YWwgbUNidmFsOwogICAgUFJUaHJlYWQq
IG1UaHJlYWQ7CgoKICAgIG5zWFBJVHJpZ2dlckluZm8mIG9wZXJhdG9yPShjb25zdCBuc1hQSVRy
aWdnZXJJbmZvJiByaHMpOwogICAgbnNYUElUcmlnZ2VySW5mbyhjb25zdCBuc1hQSVRyaWdnZXJJ
bmZvJiByaHMpOwp9OwojIDMwICIuLi9wdWJsaWMvbnNJRE9NSW5zdGFsbFRyaWdnZXJHbG9iYWwu
aCIgMgoKCgoKCgpjbGFzcyBuc0lET01JbnN0YWxsVHJpZ2dlckdsb2JhbCA6IHB1YmxpYyBuc0lT
dXBwb3J0cyB7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHsgc3RhdGlj
IG5zSUlEIGlpZCA9IHsgMHgxOGMyZjk4NywgMHhiMDlmLCAweDExZDIsIHsweGJjLCAweGRlLCAw
eDAwLCAweDgwLCAweDVmLCAweDBlLCAweDEzLCAweDUzfX07IHJldHVybiBpaWQ7IH0KICBlbnVt
IHsKICAgIE1BSk9SX0RJRkYgPSA0LAogICAgTUlOT1JfRElGRiA9IDMsCiAgICBSRUxfRElGRiA9
IDIsCiAgICBCTERfRElGRiA9IDEsCiAgICBFUVVBTCA9IDAKICB9OwoKICB2aXJ0dWFsIG5zcmVz
dWx0IFVwZGF0ZUVuYWJsZWQoUFJCb29sKiBhUmV0dXJuKT0wOwoKICB2aXJ0dWFsIG5zcmVzdWx0
IEluc3RhbGwobnNJU2NyaXB0R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIG5zWFBJVHJpZ2dl
ckluZm8qIGFJbmZvLCBQUkJvb2wqIGFSZXR1cm4pPTA7CgogIHZpcnR1YWwgbnNyZXN1bHQgSW5z
dGFsbENocm9tZShuc0lTY3JpcHRHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUFJVaW50MzIg
YVR5cGUsIG5zWFBJVHJpZ2dlckl0ZW0qIGFJdGVtLCBQUkJvb2wqIGFSZXR1cm4pPTA7CgogIHZp
cnR1YWwgbnNyZXN1bHQgU3RhcnRTb2Z0d2FyZVVwZGF0ZShuc0lTY3JpcHRHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgY29uc3QgbnNTdHJpbmcmIGFVUkwsIFBSSW50MzIgYUZsYWdzLCBQUkJv
b2wqIGFSZXR1cm4pPTA7CgogIHZpcnR1YWwgbnNyZXN1bHQgQ29tcGFyZVZlcnNpb24oY29uc3Qg
bnNTdHJpbmcmIGFSZWdOYW1lLCBQUkludDMyIGFNYWpvciwgUFJJbnQzMiBhTWlub3IsIFBSSW50
MzIgYVJlbGVhc2UsIFBSSW50MzIgYUJ1aWxkLCBQUkludDMyKiBhUmV0dXJuKT0wOwogIHZpcnR1
YWwgbnNyZXN1bHQgQ29tcGFyZVZlcnNpb24oY29uc3QgbnNTdHJpbmcmIGFSZWdOYW1lLCBjb25z
dCBuc1N0cmluZyYgYVZlcnNpb24sIFBSSW50MzIqIGFSZXR1cm4pPTA7CiAgdmlydHVhbCBuc3Jl
c3VsdCBDb21wYXJlVmVyc2lvbihjb25zdCBuc1N0cmluZyYgYVJlZ05hbWUsIG5zSURPTUluc3Rh
bGxWZXJzaW9uKiBhVmVyc2lvbiwgUFJJbnQzMiogYVJldHVybik9MDsKCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRWZXJzaW9uKGNvbnN0IG5zU3RyaW5nJiBjb21wb25lbnQsIG5zU3RyaW5nJiB2ZXJz
aW9uKT0wOwoKfTsKCmV4dGVybiBuc3Jlc3VsdCBOU19Jbml0SW5zdGFsbFRyaWdnZXJHbG9iYWxD
bGFzcyhuc0lTY3JpcHRDb250ZXh0ICphQ29udGV4dCwgdm9pZCAqKmFQcm90b3R5cGUpOwoKZXh0
ZXJuICJDIiBuc3Jlc3VsdCBOU19OZXdTY3JpcHRJbnN0YWxsVHJpZ2dlckdsb2JhbChuc0lTY3Jp
cHRDb250ZXh0ICphQ29udGV4dCwgbnNJU3VwcG9ydHMgKmFTdXBwb3J0cywgbnNJU3VwcG9ydHMg
KmFQYXJlbnQsIHZvaWQgKiphUmV0dXJuKTsKIyAxNCAibnNJbnN0YWxsVHJpZ2dlci5oIiAyCiMg
MSAibnNTb2Z0d2FyZVVwZGF0ZS5oIiAxCiMgMTUgIm5zSW5zdGFsbFRyaWdnZXIuaCIgMgojIDEg
Im5zWFBJVHJpZ2dlckluZm8uaCIgMQojIDE2ICJuc0luc3RhbGxUcmlnZ2VyLmgiIDIKCiMgMSAi
Li4vLi4vZGlzdC9pbmNsdWRlL25zSUNvbnRlbnRIYW5kbGVyLmgiIDEKIyAxNyAiLi4vLi4vZGlz
dC9pbmNsdWRlL25zSUNvbnRlbnRIYW5kbGVyLmgiCmNsYXNzIG5zSVJlcXVlc3Q7CiMgMjcgIi4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lDb250ZW50SGFuZGxlci5oIgpjbGFzcyBuc0lDb250ZW50SGFu
ZGxlciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJ
RCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgyZjBmOTI3YSwgMHg4Njc3
LCAweDExZDMsIHsgMHg5OCwgMHg5ZCwgMHgwMCwgMHgxMCwgMHg4MywgMHgwMSwgMHgwZSwgMHg5
YiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEhhbmRsZUNvbnRlbnQoY29u
c3QgY2hhciAqYUNvbnRlbnRUeXBlLCBjb25zdCBjaGFyICphQ29tbWFuZCwgbnNJU3VwcG9ydHMg
KmFXaW5kb3dDb250ZXh0LCBuc0lSZXF1ZXN0ICphUmVxdWVzdCkgPSAwOwoKfTsKIyAxOCAibnNJ
bnN0YWxsVHJpZ2dlci5oIiAyCiMgMjggIm5zSW5zdGFsbFRyaWdnZXIuaCIKY2xhc3MgbnNJbnN0
YWxsVHJpZ2dlcjogcHVibGljIG5zSVNjcmlwdE9iamVjdE93bmVyLAogICAgICAgICAgICAgICAg
ICAgICAgICBwdWJsaWMgbnNJRE9NSW5zdGFsbFRyaWdnZXJHbG9iYWwsCiAgICAgICAgICAgICAg
ICAgICAgICAgIHB1YmxpYyBuc0lDb250ZW50SGFuZGxlcgp7CiAgICBwdWJsaWM6CiAgICAgICAg
c3RhdGljIGNvbnN0IG5zSUlEJiBJSUQoKSB7IHN0YXRpYyBuc0lJRCBpaWQgPSB7IDB4MThjMmY5
OGQsIDB4YjA5ZiwgMHgxMWQyLCB7MHhiYywgMHhkZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHgwZSwg
MHgxMywgMHg1M30gfTsgcmV0dXJuIGlpZDsgfQoKICAgICAgICBuc0luc3RhbGxUcmlnZ2VyKCk7
CiAgICAgICAgdmlydHVhbCB+bnNJbnN0YWxsVHJpZ2dlcigpOwoKICAgICAgICBwdWJsaWM6IHZp
cnR1YWwgbnNyZXN1bHQgUXVlcnlJbnRlcmZhY2UoY29uc3QgbnNJSUQmIGFJSUQsIHZvaWQqKiBh
SW5zdGFuY2VQdHIpOyB2aXJ0dWFsIG5zcmVmY250IEFkZFJlZih2b2lkKTsgdmlydHVhbCBuc3Jl
ZmNudCBSZWxlYXNlKHZvaWQpOyBwcm90ZWN0ZWQ6IG5zcmVmY250IG1SZWZDbnQ7IHZvaWQqIF9t
T3duaW5nVGhyZWFkOyBwdWJsaWM6CiAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBIYW5kbGVDb250
ZW50KGNvbnN0IGNoYXIgKmFDb250ZW50VHlwZSwgY29uc3QgY2hhciAqYUNvbW1hbmQsIG5zSVN1
cHBvcnRzICphV2luZG93Q29udGV4dCwgbnNJUmVxdWVzdCAqYVJlcXVlc3QpOwoKICAgICAgICB2
aXJ0dWFsIG5zcmVzdWx0IEdldFNjcmlwdE9iamVjdChuc0lTY3JpcHRDb250ZXh0ICphQ29udGV4
dCwgdm9pZCoqIGFTY3JpcHRPYmplY3QpOwogICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU2V0U2Ny
aXB0T2JqZWN0KHZvaWQqIGFTY3JpcHRPYmplY3QpOwoKICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0
IFVwZGF0ZUVuYWJsZWQoUFJCb29sKiBhUmV0dXJuKTsKICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0
IEluc3RhbGwobnNJU2NyaXB0R2xvYmFsT2JqZWN0KiBhR2xvYmFsT2JqZWN0LCBuc1hQSVRyaWdn
ZXJJbmZvICphSW5mbywgUFJCb29sKiBhUmV0dXJuKTsKICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0
IEluc3RhbGxDaHJvbWUobnNJU2NyaXB0R2xvYmFsT2JqZWN0KiBhR2xvYmFsT2JqZWN0LCBQUlVp
bnQzMiBhVHlwZSwgbnNYUElUcmlnZ2VySXRlbSogYUl0ZW0sIFBSQm9vbCogYVJldHVybik7CiAg
ICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdGFydFNvZnR3YXJlVXBkYXRlKG5zSVNjcmlwdEdsb2Jh
bE9iamVjdCogYUdsb2JhbE9iamVjdCwgY29uc3QgbnNTdHJpbmcmIGFVUkwsIFBSSW50MzIgYUZs
YWdzLCBQUkludDMyKiBhUmV0dXJuKTsKICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IENvbXBhcmVW
ZXJzaW9uKGNvbnN0IG5zU3RyaW5nJiBhUmVnTmFtZSwgUFJJbnQzMiBhTWFqb3IsIFBSSW50MzIg
YU1pbm9yLCBQUkludDMyIGFSZWxlYXNlLCBQUkludDMyIGFCdWlsZCwgUFJJbnQzMiogYVJldHVy
bik7CiAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBDb21wYXJlVmVyc2lvbihjb25zdCBuc1N0cmlu
ZyYgYVJlZ05hbWUsIGNvbnN0IG5zU3RyaW5nJiBhVmVyc2lvbiwgUFJJbnQzMiogYVJldHVybik7
CiAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBDb21wYXJlVmVyc2lvbihjb25zdCBuc1N0cmluZyYg
YVJlZ05hbWUsIG5zSURPTUluc3RhbGxWZXJzaW9uKiBhVmVyc2lvbiwgUFJJbnQzMiogYVJldHVy
bik7CiAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWZXJzaW9uKGNvbnN0IG5zU3RyaW5nJiBj
b21wb25lbnQsIG5zU3RyaW5nJiB2ZXJzaW9uKTsKCgogICAgcHJpdmF0ZToKICAgICAgICB2b2lk
ICptU2NyaXB0T2JqZWN0Owp9OwojIDUwICJuc1NvZnR3YXJlVXBkYXRlLmNwcCIgMgojIDEgIm5z
SW5zdGFsbFZlcnNpb24uaCIgMQojIDUxICJuc1NvZnR3YXJlVXBkYXRlLmNwcCIgMgojIDEgIlNj
aGVkdWxlZFRhc2tzLmgiIDEKIyAzMSAiU2NoZWR1bGVkVGFza3MuaCIKIyAxICIuLi8uLi9kaXN0
L2luY2x1ZGUvTlNSZWcuaCIgMQojIDMyICJTY2hlZHVsZWRUYXNrcy5oIiAyCgojIDEgIi4uLy4u
L2Rpc3QvaW5jbHVkZS9uc0ZpbGVTcGVjLmgiIDEKIyAzNCAiU2NoZWR1bGVkVGFza3MuaCIgMgoj
IDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGaWxlLmgiIDEKIyAzNSAiU2NoZWR1bGVkVGFza3Mu
aCIgMgoKZXh0ZXJuICJDIiB7CgpQUkludDMyIERlbGV0ZUZpbGVOb3dPclNjaGVkdWxlKG5zSUZp
bGUqIGZpbGVuYW1lKTsKUFJJbnQzMiBSZXBsYWNlRmlsZU5vd09yU2NoZWR1bGUobnNJRmlsZSog
dG1wZmlsZSwgbnNJRmlsZSogdGFyZ2V0ICk7ClBSSW50MzIgU2NoZWR1bGVGaWxlRm9yRGVsZXRp
b24obnNJRmlsZSogZmlsZW5hbWUpOwpjaGFyKiBHZXRSZWdGaWxlUGF0aCgpOwoKCnZvaWQgUGVy
Zm9ybVNjaGVkdWxlZFRhc2tzKEhSRUcgcmVnKTsKCn0KIyA1MiAibnNTb2Z0d2FyZVVwZGF0ZS5j
cHAiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvSW5zdGFsbENsZWFudXBEZWZpbmVzLmgiIDEK
IyA1MyAibnNTb2Z0d2FyZVVwZGF0ZS5jcHAiIDIKCiMgMSAibnNUb3BQcm9ncmVzc05vdGlmaWVy
LmgiIDEKIyA1NSAibnNTb2Z0d2FyZVVwZGF0ZS5jcHAiIDIKIyAxICJuc0xvZ2dpbmdQcm9ncmVz
c05vdGlmaWVyLmgiIDEKIyAzMSAibnNMb2dnaW5nUHJvZ3Jlc3NOb3RpZmllci5oIgojIDEgIi4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lYUElOb3RpZmllci5oIiAxCiMgMzIgIm5zTG9nZ2luZ1Byb2dy
ZXNzTm90aWZpZXIuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTdHJlYW0uaCIg
MQojIDg1ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNGaWxlU3RyZWFtLmgiCiMgMSAiLi4vLi4vZGlz
dC9pbmNsdWRlL25zY29yZS5oIiAxCiMgODYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTdHJl
YW0uaCIgMgoKCgoKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv
cHJpby5oIiAxCiMgOTEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0ZpbGVTdHJlYW0uaCIgMgoKCiMg
MSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiIDEKIyA5NCAiLi4vLi4vZGlzdC9pbmNs
dWRlL25zRmlsZVN0cmVhbS5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZpbGVTdHJl
YW0uaCIgMQojIDI1ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRmlsZVN0cmVhbS5oIgojIDEgIi4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lJbnB1dFN0cmVhbS5oIiAxCiMgMjYgIi4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lGaWxlU3RyZWFtLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJT3V0cHV0
U3RyZWFtLmgiIDEKIyAyNyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZpbGVTdHJlYW0uaCIgMgoj
IDEgIi91c3Ivc3JjL21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiIDEKIyAy
OCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSUZpbGVTdHJlYW0uaCIgMgoKY2xhc3MgbnNGaWxlU3Bl
YzsKCgoKCgoKCmNsYXNzIG5zSU9wZW5GaWxlCgoKOiBwdWJsaWMgbnNJU3VwcG9ydHMKewpwdWJs
aWM6CiAgICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHsgc3RhdGljIG5zSUlEIGlpZCA9
IHsgMHhhNmNmOTBlOCwgMHgxNWIzLCAweDExZDIsIHsweDkzLCAweDJlLCAweDAwLCAweDgwLCAw
eDVmLCAweDhhLCAweGRkLCAweDMyfSB9OyByZXR1cm4gaWlkOyB9CiAgICAgICAgdmlydHVhbCBu
c3Jlc3VsdCBPcGVuKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgbnNGaWxlU3BlYyYgaW5GaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IG5zcHJNb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUFJJbnRuIGFjY2Vzc01vZGUpID0gMDsKCgoKICAgIHZpcnR1YWwgbnNyZXN1
bHQgR2V0SXNPcGVuKFBSQm9vbCogb3V0T3BlbikgPSAwOwoKfTsKCgoKCgoKCmNsYXNzIG5zSVJh
bmRvbUFjY2Vzc1N0b3JlCgoKOiBwdWJsaWMgbnNJU3VwcG9ydHMKewpwdWJsaWM6CiAgICBzdGF0
aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHsgc3RhdGljIG5zSUlEIGlpZCA9IHsgMHhhNmNmOTBl
YiwgMHgxNWIzLCAweDExZDIsIHsweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAw
eGRkLCAweDMyfSB9OyByZXR1cm4gaWlkOyB9CiAgICB2aXJ0dWFsIG5zcmVzdWx0IFNlZWsoUFJT
ZWVrV2hlbmNlIHdoZW5jZSwgUFJJbnQzMiBvZmZzZXQpID0gMDsKICAgIHZpcnR1YWwgbnNyZXN1
bHQgVGVsbChQUkludG4qIG91dFdoZXJlKSA9IDA7CgoKICAgIHZpcnR1YWwgbnNyZXN1bHQgR2V0
QXRFT0YoUFJCb29sKiBvdXRBdEVPRikgPSAwOwogICAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBdEVP
RihQUkJvb2wgaW5BdEVPRikgPSAwOwp9OwojIDg2ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRmls
ZVN0cmVhbS5oIgpjbGFzcyBuc0lGaWxlU3BlY0lucHV0U3RyZWFtCgoKCgo6IHB1YmxpYyBuc0lJ
bnB1dFN0cmVhbQp7CnB1YmxpYzoKICAgIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkgeyBz
dGF0aWMgbnNJSUQgaWlkID0geyAweGE2Y2Y5MGU2LCAweDE1YjMsIDB4MTFkMiwgezB4OTMsIDB4
MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzJ9IH07IHJldHVybiBpaWQ7IH0K
fTsKCgoKCgoKCmNsYXNzIG5zSUZpbGVTcGVjT3V0cHV0U3RyZWFtCgoKCgo6IHB1YmxpYyBuc0lP
dXRwdXRTdHJlYW0KewpwdWJsaWM6CiAgICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHsg
c3RhdGljIG5zSUlEIGlpZCA9IHsgMHhhNmNmOTBlNywgMHgxNWIzLCAweDExZDIsIHsweDkzLCAw
eDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyfSB9OyByZXR1cm4gaWlkOyB9
Cn07CgoKCgpleHRlcm4gIkMiIG5zcmVzdWx0IE5TX05ld1R5cGljYWxJbnB1dEZpbGVTdHJlYW0o
CiAgICBuc0lTdXBwb3J0cyoqIGFTdHJlYW1SZXN1bHQsCiAgICBjb25zdCBuc0ZpbGVTcGVjJiBp
bkZpbGUKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCgoKZXh0
ZXJuICJDIiBuc3Jlc3VsdCBOU19OZXdPdXRwdXRDb25zb2xlU3RyZWFtKAogICAgbnNJU3VwcG9y
dHMqKiBhU3RyZWFtUmVzdWx0KTsKCgoKZXh0ZXJuICJDIiBuc3Jlc3VsdCBOU19OZXdUeXBpY2Fs
T3V0cHV0RmlsZVN0cmVhbSgKICAgIG5zSVN1cHBvcnRzKiogYVN0cmVhbVJlc3VsdCwKICAgIGNv
bnN0IG5zRmlsZVNwZWMmIGluRmlsZQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICk7CgoKCmV4dGVybiAiQyIgbnNyZXN1bHQgTlNfTmV3VHlwaWNhbElPRmlsZVN0cmVh
bSgKICAgIG5zSVN1cHBvcnRzKiogYVN0cmVhbVJlc3VsdCwKICAgIGNvbnN0IG5zRmlsZVNwZWMm
IGluRmlsZQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwoKCgoK
ZXh0ZXJuICJDIiBuc3Jlc3VsdCBOU19OZXdJT0ZpbGVTdHJlYW0oCiAgICBuc0lTdXBwb3J0cyoq
IGFTdHJlYW1SZXN1bHQsCiAgICBjb25zdCBuc0ZpbGVTcGVjJiBpbkZpbGUsCiAgICBQUkludDMy
IG5zcHJNb2RlLAogICAgUFJJbnQzMiBhY2Nlc3NNb2RlKTsKIyA5NSAiLi4vLi4vZGlzdC9pbmNs
dWRlL25zRmlsZVN0cmVhbS5oIiAyCgoKY2xhc3MgbnNGaWxlU3BlYzsKY2xhc3MgbnNTdHJpbmc7
CmNsYXNzIG5zSUlucHV0U3RyZWFtOwpjbGFzcyBuc0lPdXRwdXRTdHJlYW07CmNsYXNzIG5zSUZp
bGVTcGVjOwojIDE0NiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zRmlsZVN0cmVhbS5oIgpjbGFzcyBp
c3RyZWFtOwpjbGFzcyBvc3RyZWFtOwojIDE2MSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zRmlsZVN0
cmVhbS5oIgpjbGFzcyBuc0lucHV0U3RyZWFtCgoKCgoKewpwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNJbnB1dFN0cmVhbShuc0lJbnB1dFN0cmVhbSogaW5T
dHJlYW0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtSW5wdXRTdHJl
YW0oZG9fUXVlcnlJbnRlcmZhY2UoaW5TdHJlYW0pKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICwgbUVPRigwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHt9CiAgICB2aXJ0dWFsIH5uc0lucHV0U3RyZWFtKCk7CgogICAgbnNDT01QdHI8bnNJSW5w
dXRTdHJlYW0+IEdldElTdHJlYW0oKSBjb25zdAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG1JbnB1dFN0cmVhbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICBQUkJvb2wgZW9mKCkgY29uc3QgeyByZXR1cm4gZ2V0X2F0X2VvZigpOyB9CiAgICBjaGFy
IGdldCgpOwogICAgbnNyZXN1bHQgY2xvc2UoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
KG1JbnB1dFN0cmVhbSkpIG5zRGVidWc6OkFzc2VydGlvbigibUlucHV0U3RyZWFtIGlzIG51bGwh
IiwgIm1JbnB1dFN0cmVhbSIsICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNGaWxlU3RyZWFtLmgiLCAx
ODMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1JbnB1dFN0
cmVhbSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbUlucHV0U3RyZWFtLT5DbG9zZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgIFBSSW50MzIgcmVhZCh2b2lkKiBzLCBQUklu
dDMyIG4pOwoKCgogICAgbnNJbnB1dFN0cmVhbSYgb3BlcmF0b3IgPj4gKGNoYXImIGNoKTsKCgog
ICAgbnNJbnB1dFN0cmVhbSYgb3BlcmF0b3IgPj4gKG5zSW5wdXRTdHJlYW0mICgqcGYpKG5zSW5w
dXRTdHJlYW0mKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGYoKnRoaXMpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCnByb3RlY3RlZDoKCgoKICAg
dmlydHVhbCB2b2lkIHNldF9hdF9lb2YoUFJCb29sIGF0RW5kKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtRU9GID0gYXRFbmQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQogICB2aXJ0dWFsIFBSQm9vbCBnZXRfYXRfZW9mKCkgY29uc3QKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBtRU9GOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KcHJpdmF0ZToKCiAgICBuc0lucHV0U3RyZWFtJiBvcGVyYXRvciA+PiAoY2hhciogYnVmKTsK
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSW5wdXRTdHJlYW0oY29u
c3QgbnNJbnB1dFN0cmVhbSYgcmhzKTsKICAgIG5zSW5wdXRTdHJlYW0mIG9wZXJhdG9yPShjb25z
dCBuc0lucHV0U3RyZWFtJiByaHMpOwoKCnByb3RlY3RlZDoKICAgIG5zQ09NUHRyPG5zSUlucHV0
U3RyZWFtPiBtSW5wdXRTdHJlYW07CiAgICBQUkJvb2wgbUVPRjsKfTsKCnR5cGVkZWYgbnNJbnB1
dFN0cmVhbSBuc0Jhc2ljSW5TdHJlYW07CgoKY2xhc3MgbnNPdXRwdXRTdHJlYW0KCgoKCgp7CnB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc091dHB1dFN0cmVh
bSgpIHt9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNPdXRwdXRTdHJl
YW0obnNJT3V0cHV0U3RyZWFtKiBpblN0cmVhbSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA6IG1PdXRwdXRTdHJlYW0oZG9fUXVlcnlJbnRlcmZhY2UoaW5TdHJlYW0pKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7fQoKICAgIHZpcnR1YWwg
fm5zT3V0cHV0U3RyZWFtKCk7CgogICAgbnNDT01QdHI8bnNJT3V0cHV0U3RyZWFtPiBHZXRJU3Ry
ZWFtKCkgY29uc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtT3V0cHV0U3RyZWFt
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgIG5zcmVzdWx0IGNs
b3NlKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtT3V0cHV0U3RyZWFtKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtT3V0cHV0U3RyZWFt
LT5DbG9zZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICB2b2lkIHB1
dChjaGFyIGMpOwogICAgUFJJbnQzMiB3cml0ZShjb25zdCB2b2lkKiBzLCBQUkludDMyIG4pOwog
ICAgdmlydHVhbCBuc3Jlc3VsdCBmbHVzaCgpOwoKCgogICAgbnNPdXRwdXRTdHJlYW0mIG9wZXJh
dG9yIDw8IChjb25zdCBjaGFyKiBidWYpOwogICAgbnNPdXRwdXRTdHJlYW0mIG9wZXJhdG9yIDw8
IChjaGFyIGNoKTsKICAgIG5zT3V0cHV0U3RyZWFtJiBvcGVyYXRvciA8PCAoc2hvcnQgdmFsKTsK
ICAgIG5zT3V0cHV0U3RyZWFtJiBvcGVyYXRvciA8PCAodW5zaWduZWQgc2hvcnQgdmFsKTsKICAg
IG5zT3V0cHV0U3RyZWFtJiBvcGVyYXRvciA8PCAobG9uZyB2YWwpOwogICAgbnNPdXRwdXRTdHJl
YW0mIG9wZXJhdG9yIDw8ICh1bnNpZ25lZCBsb25nIHZhbCk7CiAgICBuc091dHB1dFN0cmVhbSYg
b3BlcmF0b3IgPDwgKGludCB2YWwpOwogICAgbnNPdXRwdXRTdHJlYW0mIG9wZXJhdG9yIDw8ICh1
bnNpZ25lZCBpbnQgdmFsKTsKCgogICAgbnNPdXRwdXRTdHJlYW0mIG9wZXJhdG9yIDw8IChuc091
dHB1dFN0cmVhbSYgKCpwZikobnNPdXRwdXRTdHJlYW0mKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcGYoKnRoaXMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KCnByaXZhdGU6CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c091dHB1dFN0cmVhbShjb25zdCBuc091dHB1dFN0cmVhbSYgcmhzKTsKICAgIG5zT3V0cHV0U3Ry
ZWFtJiBvcGVyYXRvcj0oY29uc3QgbnNPdXRwdXRTdHJlYW0mIHJocyk7CgoKcHJvdGVjdGVkOgog
ICAgbnNDT01QdHI8bnNJT3V0cHV0U3RyZWFtPiBtT3V0cHV0U3RyZWFtOwp9OwoKdHlwZWRlZiBu
c091dHB1dFN0cmVhbSBuc0Jhc2ljT3V0U3RyZWFtOwoKCmNsYXNzIG5zRXJyb3JQcm9uZQoKCnsK
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRXJyb3JQcm9u
ZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtUmVzdWx0KDApCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgIFBSQm9vbCBmYWlsZWQoKSBjb25zdAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuICgobVJlc3VsdCkgJiAweDgwMDAwMDAwKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICBuc3Jlc3VsdCBlcnJvcigpIGNvbnN0
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbVJlc3VsdDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CgoKcHJvdGVjdGVkOgogICAgbnNyZXN1bHQgbVJlc3Vs
dDsKfTsKCgpjbGFzcyBuc0ZpbGVDbGllbnQKCgoKCjogcHVibGljIHZpcnR1YWwgbnNFcnJvclBy
b25lCnsKcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRmls
ZUNsaWVudChjb25zdCBuc0NPTVB0cjxuc0lPcGVuRmlsZT4mIGluRmlsZSkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1GaWxlKGRvX1F1ZXJ5SW50ZXJmYWNlKGluRmls
ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgIHZpcnR1YWwgfm5zRmlsZUNsaWVudCgpIHt9
CgogICAgdm9pZCBvcGVuKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBuc0ZpbGVTcGVjJiBpbkZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBuc3ByTW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUFJJbnRuIGFjY2Vzc01vZGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAobUZpbGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
UmVzdWx0ID0gbUZpbGUtPk9wZW4oaW5GaWxlLCBuc3ByTW9kZSwgYWNjZXNzTW9kZSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgUFJCb29sIGlzX29wZW4oKSBj
b25zdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIHJlc3VsdCA9IDA7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtRmlsZSkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1GaWxlLT5HZXRJc09wZW4oJnJlc3Vs
dCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgUFJCb29sIGlz
X2ZpbGUoKSBjb25zdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1GaWxlID8gMSA6
IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKcHJvdGVjdGVkOgoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0ZpbGVDbGllbnQoKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9Cgpwcm90ZWN0ZWQ6CiAgICBuc0NPTVB0cjxuc0lPcGVuRmlsZT4g
bUZpbGU7Cn07CgoKY2xhc3MgbnNSYW5kb21BY2Nlc3NTdG9yZUNsaWVudAoKCgoKOiBwdWJsaWMg
dmlydHVhbCBuc0Vycm9yUHJvbmUKewpwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNSYW5kb21BY2Nlc3NTdG9yZUNsaWVudCgpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1JhbmRvbUFjY2Vz
c1N0b3JlQ2xpZW50KGNvbnN0IG5zQ09NUHRyPG5zSVJhbmRvbUFjY2Vzc1N0b3JlPiYgaW5TdG9y
ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1TdG9yZShkb19RdWVy
eUludGVyZmFjZShpblN0b3JlKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgdmlydHVhbCB+
bnNSYW5kb21BY2Nlc3NTdG9yZUNsaWVudCgpIHt9CgogICAgdm9pZCBzZWVrKFBSSW50MzIgb2Zm
c2V0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlayhQUl9TRUVLX1NFVCwgb2Zmc2V0KTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgdm9pZCBzZWVrKFBS
U2Vla1doZW5jZSB3aGVuY2UsIFBSSW50MzIgb2Zmc2V0KQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2V0X2F0X2VvZigwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKG1TdG9yZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1SZXN1bHQgPSBtU3RvcmUtPlNlZWsod2hlbmNlLCBvZmZzZXQpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgIFBSSW50biB0ZWxsKCkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBSSW50biByZXN1bHQgPSAtMTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG1TdG9yZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1SZXN1bHQgPSBtU3RvcmUtPlRlbGwoJnJlc3VsdCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKcHJvdGVjdGVkOgoKICAgdmlydHVh
bCBQUkJvb2wgZ2V0X2F0X2VvZigpIGNvbnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJv
b2wgcmVzdWx0ID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG1TdG9yZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1TdG9yZS0+R2V0QXRFT0YoJnJlc3VsdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQoKICAgdmlydHVhbCB2b2lkIHNldF9hdF9lb2YoUFJCb29sIGF0RW5kKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG1TdG9yZSkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1TdG9yZS0+U2V0QXRFT0YoYXRFbmQpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCnByaXZhdGU6CgoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc1JhbmRvbUFjY2Vzc1N0b3JlQ2xpZW50KGNvbnN0IG5z
UmFuZG9tQWNjZXNzU3RvcmVDbGllbnQmIHJocyk7CiAgICBuc1JhbmRvbUFjY2Vzc1N0b3JlQ2xp
ZW50JiBvcGVyYXRvcj0oY29uc3QgbnNSYW5kb21BY2Nlc3NTdG9yZUNsaWVudCYgcmhzKTsKCgpw
cm90ZWN0ZWQ6CiAgICBuc0NPTVB0cjxuc0lSYW5kb21BY2Nlc3NTdG9yZT4gbVN0b3JlOwp9OwoK
CmNsYXNzIG5zUmFuZG9tQWNjZXNzSW5wdXRTdHJlYW0KCgo6IHB1YmxpYyBuc1JhbmRvbUFjY2Vz
c1N0b3JlQ2xpZW50CiwgcHVibGljIG5zSW5wdXRTdHJlYW0KewpwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNSYW5kb21BY2Nlc3NJbnB1dFN0cmVhbShuc0lJ
bnB1dFN0cmVhbSogaW5TdHJlYW0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOiBuc1JhbmRvbUFjY2Vzc1N0b3JlQ2xpZW50KGRvX1F1ZXJ5SW50ZXJmYWNlKGluU3RyZWFt
KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIG5zSW5wdXRTdHJlYW0o
aW5TdHJlYW0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgIFBSQm9vbCByZWFkbGluZShjaGFy
KiBzLCBQUkludDMyIG4pOwoKCgoKCgogICAgbnNJbnB1dFN0cmVhbSYgb3BlcmF0b3IgPj4gKGNo
YXImIGNoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJu
IG5zSW5wdXRTdHJlYW06Om9wZXJhdG9yID4+KGNoKTsgfQogICAgbnNJbnB1dFN0cmVhbSYgb3Bl
cmF0b3IgPj4gKG5zSW5wdXRTdHJlYW0mICgqcGYpKG5zSW5wdXRTdHJlYW0mKSkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBuc0lucHV0U3RyZWFtOjpv
cGVyYXRvciA+PihwZik7IH0KCnByb3RlY3RlZDoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc1JhbmRvbUFjY2Vzc0lucHV0U3RyZWFtKCkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA6IG5zSW5wdXRTdHJlYW0oMCkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQoKICAgdmlydHVhbCBQUkJvb2wgZ2V0X2F0X2VvZigpIGNvbnN0CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbnNSYW5kb21BY2Nlc3NTdG9yZUNsaWVudDo6Z2V0X2F0X2VvZigp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgIHZpcnR1YWwgdm9p
ZCBzZXRfYXRfZW9mKFBSQm9vbCBhdEVuZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zUmFu
ZG9tQWNjZXNzU3RvcmVDbGllbnQ6OnNldF9hdF9lb2YoYXRFbmQpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KCnByaXZhdGU6CgoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuc1JhbmRvbUFjY2Vzc0lucHV0U3RyZWFtKGNvbnN0IG5zUmFuZG9t
QWNjZXNzSW5wdXRTdHJlYW0mIHJocyk7CiAgICBuc1JhbmRvbUFjY2Vzc0lucHV0U3RyZWFtJiBv
cGVyYXRvcj0oY29uc3QgbnNSYW5kb21BY2Nlc3NJbnB1dFN0cmVhbSYgcmhzKTsKCn07CgoKY2xh
c3MgbnNJbnB1dFN0cmluZ1N0cmVhbQoKOiBwdWJsaWMgbnNSYW5kb21BY2Nlc3NJbnB1dFN0cmVh
bQp7CnB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lucHV0
U3RyaW5nU3RyZWFtKGNvbnN0IGNoYXIqIHN0cmluZ1RvUmVhZCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNJbnB1dFN0cmluZ1N0cmVhbShjb25zdCBuc1N0cmluZyYg
c3RyaW5nVG9SZWFkKTsKCgogICAgbnNJbnB1dFN0cmVhbSYgb3BlcmF0b3IgPj4gKGNoYXImIGNo
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIG5zSW5w
dXRTdHJlYW06Om9wZXJhdG9yID4+KGNoKTsgfQogICAgbnNJbnB1dFN0cmVhbSYgb3BlcmF0b3Ig
Pj4gKG5zSW5wdXRTdHJlYW0mICgqcGYpKG5zSW5wdXRTdHJlYW0mKSkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBuc0lucHV0U3RyZWFtOjpvcGVyYXRv
ciA+PihwZik7IH0KCgpwcml2YXRlOgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNJbnB1dFN0cmluZ1N0cmVhbShjb25zdCBuc0lucHV0U3RyaW5nU3RyZWFtJiByaHMp
OwogICAgbnNJbnB1dFN0cmluZ1N0cmVhbSYgb3BlcmF0b3I9KGNvbnN0IG5zSW5wdXRTdHJpbmdT
dHJlYW0mIHJocyk7CgoKfTsKCgpjbGFzcyBuc0lucHV0RmlsZVN0cmVhbQoKCjogcHVibGljIG5z
UmFuZG9tQWNjZXNzSW5wdXRTdHJlYW0KLCBwdWJsaWMgbnNGaWxlQ2xpZW50CnsKcHVibGljOgog
ICAgICAgIGVudW0geyBrRGVmYXVsdE1vZGUgPSAweDAxIH07CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnNJbnB1dEZpbGVTdHJlYW0obnNJSW5wdXRTdHJlYW0qIGluU3Ry
ZWFtKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbnNSYW5kb21BY2Nl
c3NJbnB1dFN0cmVhbShpblN0cmVhbSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAsIG5zRmlsZUNsaWVudChkb19RdWVyeUludGVyZmFjZShpblN0cmVhbSkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBtRmlsZUlucHV0U3RyZWFtKGRvX1F1ZXJ5
SW50ZXJmYWNlKGluU3RyZWFtKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSW5wdXRGaWxlU3RyZWFtKAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0ZpbGVTcGVjJiBpbkZpbGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuc3ByTW9kZSA9IGtE
ZWZhdWx0TW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJ
bnRuIGFjY2Vzc01vZGUgPSAwMDY2Nik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNJbnB1dEZpbGVTdHJlYW0obnNJRmlsZVNwZWMqIGluRmlsZSk7CiAgICB2aXJ0dWFs
IH5uc0lucHV0RmlsZVN0cmVhbSgpOwoKICAgIHZvaWQgT3BlbigKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNGaWxlU3BlYyYgaW5GaWxlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnNwck1vZGUgPSBrRGVmYXVs
dE1vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50biBh
Y2Nlc3NNb2RlID0gMDA2NjYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobUZpbGUpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRmlsZS0+T3Blbihp
bkZpbGUsIG5zcHJNb2RlLCBhY2Nlc3NNb2RlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CgoKICAgIG5zSW5wdXRTdHJlYW0mIG9wZXJhdG9yID4+IChjaGFyJiBjaCkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBuc0lucHV0
U3RyZWFtOjpvcGVyYXRvciA+PihjaCk7IH0KICAgIG5zSW5wdXRTdHJlYW0mIG9wZXJhdG9yID4+
IChuc0lucHV0U3RyZWFtJiAoKnBmKShuc0lucHV0U3RyZWFtJikpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gbnNJbnB1dFN0cmVhbTo6b3BlcmF0b3Ig
Pj4ocGYpOyB9Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkIEFzc2lnbkZyb20obnNJU3VwcG9ydHMqIHN0
cmVhbSk7Cgpwcml2YXRlOgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNJbnB1dEZpbGVTdHJlYW0oY29uc3QgbnNJbnB1dEZpbGVTdHJlYW0mIHJocyk7CiAgICBuc0lu
cHV0RmlsZVN0cmVhbSYgb3BlcmF0b3I9KGNvbnN0IG5zSW5wdXRGaWxlU3RyZWFtJiByaHMpOwoK
CnByb3RlY3RlZDoKICAgIG5zQ09NUHRyPG5zSUZpbGVTcGVjSW5wdXRTdHJlYW0+IG1GaWxlSW5w
dXRTdHJlYW07Cn07CgoKY2xhc3MgbnNSYW5kb21BY2Nlc3NPdXRwdXRTdHJlYW0KCgo6IHB1Ymxp
YyBuc1JhbmRvbUFjY2Vzc1N0b3JlQ2xpZW50CiwgcHVibGljIG5zT3V0cHV0U3RyZWFtCnsKcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zUmFuZG9tQWNjZXNz
T3V0cHV0U3RyZWFtKG5zSU91dHB1dFN0cmVhbSogaW5TdHJlYW0pCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOiBuc1JhbmRvbUFjY2Vzc1N0b3JlQ2xpZW50KGRvX1F1ZXJ5
SW50ZXJmYWNlKGluU3RyZWFtKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAsIG5zT3V0cHV0U3RyZWFtKGluU3RyZWFtKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgoKICAg
IG5zT3V0cHV0U3RyZWFtJiBvcGVyYXRvciA8PCAoY29uc3QgY2hhciogYnVmKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gbnNPdXRwdXRTdHJlYW06Om9w
ZXJhdG9yIDw8IChidWYpOyB9CiAgICBuc091dHB1dFN0cmVhbSYgb3BlcmF0b3IgPDwgKGNoYXIg
Y2gpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBuc091
dHB1dFN0cmVhbTo6b3BlcmF0b3IgPDwgKGNoKTsgfQogICAgbnNPdXRwdXRTdHJlYW0mIG9wZXJh
dG9yIDw8IChzaG9ydCB2YWwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7IHJldHVybiBuc091dHB1dFN0cmVhbTo6b3BlcmF0b3IgPDwgKHZhbCk7IH0KICAgIG5zT3V0
cHV0U3RyZWFtJiBvcGVyYXRvciA8PCAodW5zaWduZWQgc2hvcnQgdmFsKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gbnNPdXRwdXRTdHJlYW06Om9wZXJh
dG9yIDw8ICh2YWwpOyB9CiAgICBuc091dHB1dFN0cmVhbSYgb3BlcmF0b3IgPDwgKGxvbmcgdmFs
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gbnNPdXRw
dXRTdHJlYW06Om9wZXJhdG9yIDw8ICh2YWwpOyB9CiAgICBuc091dHB1dFN0cmVhbSYgb3BlcmF0
b3IgPDwgKHVuc2lnbmVkIGxvbmcgdmFsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeyByZXR1cm4gbnNPdXRwdXRTdHJlYW06Om9wZXJhdG9yIDw8ICh2YWwpOyB9CiAg
ICBuc091dHB1dFN0cmVhbSYgb3BlcmF0b3IgPDwgKGludCB2YWwpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBuc091dHB1dFN0cmVhbTo6b3BlcmF0b3Ig
PDwgKHZhbCk7IH0KICAgIG5zT3V0cHV0U3RyZWFtJiBvcGVyYXRvciA8PCAodW5zaWduZWQgaW50
IHZhbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIG5z
T3V0cHV0U3RyZWFtOjpvcGVyYXRvciA8PCAodmFsKTsgfQogICAgbnNPdXRwdXRTdHJlYW0mIG9w
ZXJhdG9yIDw8IChuc091dHB1dFN0cmVhbSYgKCpwZikobnNPdXRwdXRTdHJlYW0mKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIG5zT3V0cHV0U3RyZWFt
OjpvcGVyYXRvciA8PCAocGYpOyB9Cgpwcm90ZWN0ZWQ6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnNSYW5kb21BY2Nlc3NPdXRwdXRTdHJlYW0oKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDogbnNPdXRwdXRTdHJlYW0oMCkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQoKcHJpdmF0ZToKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zUmFuZG9tQWNjZXNzT3V0cHV0U3RyZWFtKGNvbnN0IG5zUmFuZG9tQWNjZXNzT3V0cHV0
U3RyZWFtJiByaHMpOwogICAgbnNSYW5kb21BY2Nlc3NPdXRwdXRTdHJlYW0mIG9wZXJhdG9yPShj
b25zdCBuc1JhbmRvbUFjY2Vzc091dHB1dFN0cmVhbSYgcmhzKTsKCn07CgoKY2xhc3MgbnNPdXRw
dXRTdHJpbmdTdHJlYW0KCjogcHVibGljIG5zUmFuZG9tQWNjZXNzT3V0cHV0U3RyZWFtCnsKcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zT3V0cHV0U3RyaW5n
U3RyZWFtKGNoYXIqJiBzdHJpbmdUb0NoYW5nZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNPdXRwdXRTdHJpbmdTdHJlYW0obnNTdHJpbmcmIHN0cmluZ1RvQ2hhbmdl
KTsKCgogICAgbnNPdXRwdXRTdHJlYW0mIG9wZXJhdG9yIDw8IChjb25zdCBjaGFyKiBidWYpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBuc091dHB1dFN0
cmVhbTo6b3BlcmF0b3IgPDwgKGJ1Zik7IH0KICAgIG5zT3V0cHV0U3RyZWFtJiBvcGVyYXRvciA8
PCAoY2hhciBjaCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0
dXJuIG5zT3V0cHV0U3RyZWFtOjpvcGVyYXRvciA8PCAoY2gpOyB9CiAgICBuc091dHB1dFN0cmVh
bSYgb3BlcmF0b3IgPDwgKHNob3J0IHZhbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsgcmV0dXJuIG5zT3V0cHV0U3RyZWFtOjpvcGVyYXRvciA8PCAodmFsKTsgfQog
ICAgbnNPdXRwdXRTdHJlYW0mIG9wZXJhdG9yIDw8ICh1bnNpZ25lZCBzaG9ydCB2YWwpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBuc091dHB1dFN0cmVh
bTo6b3BlcmF0b3IgPDwgKHZhbCk7IH0KICAgIG5zT3V0cHV0U3RyZWFtJiBvcGVyYXRvciA8PCAo
bG9uZyB2YWwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVy
biBuc091dHB1dFN0cmVhbTo6b3BlcmF0b3IgPDwgKHZhbCk7IH0KICAgIG5zT3V0cHV0U3RyZWFt
JiBvcGVyYXRvciA8PCAodW5zaWduZWQgbG9uZyB2YWwpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7IHJldHVybiBuc091dHB1dFN0cmVhbTo6b3BlcmF0b3IgPDwgKHZh
bCk7IH0KICAgIG5zT3V0cHV0U3RyZWFtJiBvcGVyYXRvciA8PCAoaW50IHZhbCkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIG5zT3V0cHV0U3RyZWFtOjpv
cGVyYXRvciA8PCAodmFsKTsgfQogICAgbnNPdXRwdXRTdHJlYW0mIG9wZXJhdG9yIDw8ICh1bnNp
Z25lZCBpbnQgdmFsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBy
ZXR1cm4gbnNPdXRwdXRTdHJlYW06Om9wZXJhdG9yIDw8ICh2YWwpOyB9CiAgICBuc091dHB1dFN0
cmVhbSYgb3BlcmF0b3IgPDwgKG5zT3V0cHV0U3RyZWFtJiAoKnBmKShuc091dHB1dFN0cmVhbSYp
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gbnNPdXRw
dXRTdHJlYW06Om9wZXJhdG9yIDw8IChwZik7IH0KCnByaXZhdGU6CgoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc091dHB1dFN0cmluZ1N0cmVhbShjb25zdCBuc091dHB1
dFN0cmluZ1N0cmVhbSYgcmhzKTsKICAgIG5zT3V0cHV0U3RyaW5nU3RyZWFtJiBvcGVyYXRvcj0o
Y29uc3QgbnNPdXRwdXRTdHJpbmdTdHJlYW0mIHJocyk7Cgp9OwoKCmNsYXNzIG5zT3V0cHV0Rmls
ZVN0cmVhbQoKCjogcHVibGljIG5zUmFuZG9tQWNjZXNzT3V0cHV0U3RyZWFtCiwgcHVibGljIG5z
RmlsZUNsaWVudAp7CnB1YmxpYzoKICAgICAgICBlbnVtIHsga0RlZmF1bHRNb2RlID0gKDB4MDIg
fCAweDA4IHwgMHgyMCkgfTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNPdXRwdXRGaWxlU3RyZWFtKCkge30KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc091dHB1dEZpbGVTdHJlYW0obnNJT3V0cHV0U3RyZWFtKiBpblN0cmVhbSkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEFzc2lnbkZyb20oaW5TdHJlYW0pOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc091dHB1dEZpbGVTdHJlYW0oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBuc0ZpbGVTcGVjJiBpbkZpbGUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnNwck1vZGUgPSBrRGVmYXVsdE1vZGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludG4gYWNjZXNzTW9kZSA9
IDAwNjY2KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMqIHN0cmVhbTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoTlNfTmV3SU9GaWxl
U3RyZWFtKCAmc3RyZWFtLCBpbkZpbGUsIG5zcHJNb2RlLCBhY2Nlc3NNb2RlKSkgJiAweDgwMDAw
MDAwKSkKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3NpZ25Gcm9t
KHN0cmVhbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsg
KHN0cmVhbSktPlJlbGVhc2UoKTsgKHN0cmVhbSkgPSAwOyB9IHdoaWxlICgwKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNPdXRwdXRGaWxlU3RyZWFtKG5zSUZpbGVTcGVjKiBpbkZpbGUpOwogICAg
dmlydHVhbCB+bnNPdXRwdXRGaWxlU3RyZWFtKCk7CgogICAgdmlydHVhbCBuc3Jlc3VsdCBmbHVz
aCgpOwogICAgdmlydHVhbCB2b2lkIGFib3J0KCk7CgoKICAgIG5zT3V0cHV0U3RyZWFtJiBvcGVy
YXRvciA8PCAoY29uc3QgY2hhciogYnVmKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeyByZXR1cm4gbnNPdXRwdXRTdHJlYW06Om9wZXJhdG9yIDw8IChidWYpOyB9CiAg
ICBuc091dHB1dFN0cmVhbSYgb3BlcmF0b3IgPDwgKGNoYXIgY2gpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBuc091dHB1dFN0cmVhbTo6b3BlcmF0b3Ig
PDwgKGNoKTsgfQogICAgbnNPdXRwdXRTdHJlYW0mIG9wZXJhdG9yIDw8IChzaG9ydCB2YWwpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBuc091dHB1dFN0
cmVhbTo6b3BlcmF0b3IgPDwgKHZhbCk7IH0KICAgIG5zT3V0cHV0U3RyZWFtJiBvcGVyYXRvciA8
PCAodW5zaWduZWQgc2hvcnQgdmFsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeyByZXR1cm4gbnNPdXRwdXRTdHJlYW06Om9wZXJhdG9yIDw8ICh2YWwpOyB9CiAgICBu
c091dHB1dFN0cmVhbSYgb3BlcmF0b3IgPDwgKGxvbmcgdmFsKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gbnNPdXRwdXRTdHJlYW06Om9wZXJhdG9yIDw8
ICh2YWwpOyB9CiAgICBuc091dHB1dFN0cmVhbSYgb3BlcmF0b3IgPDwgKHVuc2lnbmVkIGxvbmcg
dmFsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gbnNP
dXRwdXRTdHJlYW06Om9wZXJhdG9yIDw8ICh2YWwpOyB9CiAgICBuc091dHB1dFN0cmVhbSYgb3Bl
cmF0b3IgPDwgKGludCB2YWwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7IHJldHVybiBuc091dHB1dFN0cmVhbTo6b3BlcmF0b3IgPDwgKHZhbCk7IH0KICAgIG5zT3V0
cHV0U3RyZWFtJiBvcGVyYXRvciA8PCAodW5zaWduZWQgaW50IHZhbCkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIG5zT3V0cHV0U3RyZWFtOjpvcGVyYXRv
ciA8PCAodmFsKTsgfQogICAgbnNPdXRwdXRTdHJlYW0mIG9wZXJhdG9yIDw8IChuc091dHB1dFN0
cmVhbSYgKCpwZikobnNPdXRwdXRTdHJlYW0mKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsgcmV0dXJuIG5zT3V0cHV0U3RyZWFtOjpvcGVyYXRvciA8PCAocGYpOyB9
Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkIEFzc2lnbkZyb20obnNJU3VwcG9ydHMqIHN0cmVhbSk7Cgpw
cml2YXRlOgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNPdXRwdXRG
aWxlU3RyZWFtKGNvbnN0IG5zT3V0cHV0RmlsZVN0cmVhbSYgcmhzKTsKICAgIG5zT3V0cHV0Rmls
ZVN0cmVhbSYgb3BlcmF0b3I9KGNvbnN0IG5zT3V0cHV0RmlsZVN0cmVhbSYgcmhzKTsKCgpwcm90
ZWN0ZWQ6CiAgICBuc0NPTVB0cjxuc0lGaWxlU3BlY091dHB1dFN0cmVhbT4gbUZpbGVPdXRwdXRT
dHJlYW07Cn07CgoKY2xhc3MgbnNPdXRwdXRDb25zb2xlU3RyZWFtCgoKOiBwdWJsaWMgbnNPdXRw
dXRGaWxlU3RyZWFtCnsKcHVibGljOgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc091dHB1dENvbnNvbGVTdHJlYW0oKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ
U3VwcG9ydHMqIHN0cmVhbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCgoTlNfTmV3T3V0cHV0Q29uc29sZVN0cmVhbSgmc3RyZWFtKSkgJiAweDgwMDAwMDAw
KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUZpbGUgPSBkb19RdWVy
eUludGVyZmFjZShzdHJlYW0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtT3V0cHV0U3RyZWFtID0gZG9fUXVlcnlJbnRlcmZhY2Uoc3RyZWFtKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUZpbGVPdXRwdXRTdHJlYW0gPSBkb19R
dWVyeUludGVyZmFjZShzdHJlYW0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkbyB7IChzdHJlYW0pLT5SZWxlYXNlKCk7IChzdHJlYW0pID0gMDsgfSB3aGlsZSAo
MCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKCiAgICBuc091dHB1
dFN0cmVhbSYgb3BlcmF0b3IgPDwgKGNvbnN0IGNoYXIqIGJ1ZikKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIG5zT3V0cHV0U3RyZWFtOjpvcGVyYXRvciA8
PCAoYnVmKTsgfQogICAgbnNPdXRwdXRTdHJlYW0mIG9wZXJhdG9yIDw8IChjaGFyIGNoKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gbnNPdXRwdXRTdHJl
YW06Om9wZXJhdG9yIDw8IChjaCk7IH0KICAgIG5zT3V0cHV0U3RyZWFtJiBvcGVyYXRvciA8PCAo
c2hvcnQgdmFsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1
cm4gbnNPdXRwdXRTdHJlYW06Om9wZXJhdG9yIDw8ICh2YWwpOyB9CiAgICBuc091dHB1dFN0cmVh
bSYgb3BlcmF0b3IgPDwgKHVuc2lnbmVkIHNob3J0IHZhbCkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIG5zT3V0cHV0U3RyZWFtOjpvcGVyYXRvciA8PCAo
dmFsKTsgfQogICAgbnNPdXRwdXRTdHJlYW0mIG9wZXJhdG9yIDw8IChsb25nIHZhbCkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIG5zT3V0cHV0U3RyZWFt
OjpvcGVyYXRvciA8PCAodmFsKTsgfQogICAgbnNPdXRwdXRTdHJlYW0mIG9wZXJhdG9yIDw8ICh1
bnNpZ25lZCBsb25nIHZhbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHsgcmV0dXJuIG5zT3V0cHV0U3RyZWFtOjpvcGVyYXRvciA8PCAodmFsKTsgfQogICAgbnNPdXRw
dXRTdHJlYW0mIG9wZXJhdG9yIDw8IChpbnQgdmFsKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeyByZXR1cm4gbnNPdXRwdXRTdHJlYW06Om9wZXJhdG9yIDw8ICh2YWwp
OyB9CiAgICBuc091dHB1dFN0cmVhbSYgb3BlcmF0b3IgPDwgKHVuc2lnbmVkIGludCB2YWwpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBuc091dHB1dFN0
cmVhbTo6b3BlcmF0b3IgPDwgKHZhbCk7IH0KICAgIG5zT3V0cHV0U3RyZWFtJiBvcGVyYXRvciA8
PCAobnNPdXRwdXRTdHJlYW0mICgqcGYpKG5zT3V0cHV0U3RyZWFtJikpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBuc091dHB1dFN0cmVhbTo6b3BlcmF0
b3IgPDwgKHBmKTsgfQoKCnByaXZhdGU6CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc091dHB1dENvbnNvbGVTdHJlYW0oY29uc3QgbnNPdXRwdXRDb25zb2xlU3RyZWFt
JiByaHMpOwogICAgbnNPdXRwdXRDb25zb2xlU3RyZWFtJiBvcGVyYXRvcj0oY29uc3QgbnNPdXRw
dXRDb25zb2xlU3RyZWFtJiByaHMpOwoKCn07CgoKY2xhc3MgbnNJT0ZpbGVTdHJlYW0KCgo6IHB1
YmxpYyBuc0lucHV0RmlsZVN0cmVhbQosIHB1YmxpYyBuc091dHB1dFN0cmVhbQp7CnB1YmxpYzoK
ICAgICAgICBlbnVtIHsga0RlZmF1bHRNb2RlID0gKDB4MDQgfCAweDA4KSB9OwoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lPRmlsZVN0cmVhbSgKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJSW5wdXRTdHJlYW0qIGluSW5wdXRTdHJl
YW0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIG5zSU91dHB1dFN0cmVh
bSogaW5PdXRwdXRTdHJlYW0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OiBuc0lucHV0RmlsZVN0cmVhbShpbklucHV0U3RyZWFtKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICwgbnNPdXRwdXRTdHJlYW0oaW5PdXRwdXRTdHJlYW0pCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBtRmlsZU91dHB1dFN0cmVhbShkb19RdWVy
eUludGVyZmFjZShpbk91dHB1dFN0cmVhbSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lPRmlsZVN0cmVhbSgKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zRmlsZVNwZWMmIGluRmls
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuc3ByTW9k
ZSA9IGtEZWZhdWx0TW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBSSW50biBhY2Nlc3NNb2RlID0gMDA2NjYpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOiBuc0lucHV0RmlsZVN0cmVhbSgobnNJSW5wdXRTdHJlYW0qKTApCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBuc091dHB1dFN0cmVhbSgwKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMqIHN0cmVhbTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoTlNfTmV3SU9GaWxlU3RyZWFtKCAmc3Ry
ZWFtLCBpbkZpbGUsIG5zcHJNb2RlLCBhY2Nlc3NNb2RlKSkgJiAweDgwMDAwMDAwKSkKCgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRmlsZSA9IGRvX1F1ZXJ5SW50ZXJm
YWNlKHN0cmVhbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1T
dG9yZSA9IGRvX1F1ZXJ5SW50ZXJmYWNlKHN0cmVhbSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1JbnB1dFN0cmVhbSA9IGRvX1F1ZXJ5SW50ZXJmYWNlKHN0cmVh
bSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1PdXRwdXRTdHJl
YW0gPSBkb19RdWVyeUludGVyZmFjZShzdHJlYW0pOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtRmlsZUlucHV0U3RyZWFtID0gZG9fUXVlcnlJbnRlcmZhY2Uoc3Ry
ZWFtKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUZpbGVPdXRw
dXRTdHJlYW0gPSBkb19RdWVyeUludGVyZmFjZShzdHJlYW0pOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkbyB7IChzdHJlYW0pLT5SZWxlYXNlKCk7IChzdHJlYW0p
ID0gMDsgfSB3aGlsZSAoMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQoKICAgIHZpcnR1YWwgbnNyZXN1bHQgY2xvc2UoKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbnNJbnB1dEZpbGVTdHJlYW06OmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQoKCiAgICBuc091dHB1dFN0cmVhbSYgb3BlcmF0b3IgPDwgKGNv
bnN0IGNoYXIqIGJ1ZikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsg
cmV0dXJuIG5zT3V0cHV0U3RyZWFtOjpvcGVyYXRvciA8PCAoYnVmKTsgfQogICAgbnNPdXRwdXRT
dHJlYW0mIG9wZXJhdG9yIDw8IChjaGFyIGNoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeyByZXR1cm4gbnNPdXRwdXRTdHJlYW06Om9wZXJhdG9yIDw8IChjaCk7IH0K
ICAgIG5zT3V0cHV0U3RyZWFtJiBvcGVyYXRvciA8PCAoc2hvcnQgdmFsKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gbnNPdXRwdXRTdHJlYW06Om9wZXJh
dG9yIDw8ICh2YWwpOyB9CiAgICBuc091dHB1dFN0cmVhbSYgb3BlcmF0b3IgPDwgKHVuc2lnbmVk
IHNob3J0IHZhbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0
dXJuIG5zT3V0cHV0U3RyZWFtOjpvcGVyYXRvciA8PCAodmFsKTsgfQogICAgbnNPdXRwdXRTdHJl
YW0mIG9wZXJhdG9yIDw8IChsb25nIHZhbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsgcmV0dXJuIG5zT3V0cHV0U3RyZWFtOjpvcGVyYXRvciA8PCAodmFsKTsgfQog
ICAgbnNPdXRwdXRTdHJlYW0mIG9wZXJhdG9yIDw8ICh1bnNpZ25lZCBsb25nIHZhbCkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIG5zT3V0cHV0U3RyZWFt
OjpvcGVyYXRvciA8PCAodmFsKTsgfQogICAgbnNPdXRwdXRTdHJlYW0mIG9wZXJhdG9yIDw8IChp
bnQgdmFsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4g
bnNPdXRwdXRTdHJlYW06Om9wZXJhdG9yIDw8ICh2YWwpOyB9CiAgICBuc091dHB1dFN0cmVhbSYg
b3BlcmF0b3IgPDwgKHVuc2lnbmVkIGludCB2YWwpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7IHJldHVybiBuc091dHB1dFN0cmVhbTo6b3BlcmF0b3IgPDwgKHZhbCk7
IH0KICAgIG5zT3V0cHV0U3RyZWFtJiBvcGVyYXRvciA8PCAobnNPdXRwdXRTdHJlYW0mICgqcGYp
KG5zT3V0cHV0U3RyZWFtJikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7IHJldHVybiBuc091dHB1dFN0cmVhbTo6b3BlcmF0b3IgPDwgKHBmKTsgfQoKCiAgICBuc0lu
cHV0U3RyZWFtJiBvcGVyYXRvciA+PiAoY2hhciYgY2gpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeyByZXR1cm4gbnNJbnB1dFN0cmVhbTo6b3BlcmF0b3IgPj4oY2gp
OyB9CiAgICBuc0lucHV0U3RyZWFtJiBvcGVyYXRvciA+PiAobnNJbnB1dFN0cmVhbSYgKCpwZiko
bnNJbnB1dFN0cmVhbSYpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHsgcmV0dXJuIG5zSW5wdXRTdHJlYW06Om9wZXJhdG9yID4+KHBmKTsgfQoKICAgICAgICB2aXJ0
dWFsIG5zcmVzdWx0IGZsdXNoKCkge2lmIChtRmlsZU91dHB1dFN0cmVhbSkgbUZpbGVPdXRwdXRT
dHJlYW0tPkZsdXNoKCk7IHJldHVybiBlcnJvcigpOyB9CgoKcHJpdmF0ZToKCgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSU9GaWxlU3RyZWFtKGNvbnN0IG5zSU9GaWxl
U3RyZWFtJiByaHMpOwogICAgbnNJT0ZpbGVTdHJlYW0mIG9wZXJhdG9yPShjb25zdCBuc0lPRmls
ZVN0cmVhbSYgcmhzKTsKCgpwcm90ZWN0ZWQ6CiAgICBuc0NPTVB0cjxuc0lGaWxlU3BlY091dHB1
dFN0cmVhbT4gbUZpbGVPdXRwdXRTdHJlYW07Cn07CgoKCgoKICAgICAgIG5zT3V0cHV0U3RyZWFt
JiBuc0VuZGwobnNPdXRwdXRTdHJlYW0mIG9zKTsKCgpjbGFzcyBuc1NhdmVWaWFUZW1wU3RyZWFt
CgoKCiA6IHB1YmxpYyBuc091dHB1dEZpbGVTdHJlYW0Kewpwcml2YXRlOgoKICAgICAgICB0eXBl
ZGVmIG5zT3V0cHV0RmlsZVN0cmVhbSBJbmhlcml0ZWQ7CgpwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5zU2F2ZVZpYVRlbXBTdHJlYW0oY29uc3QgbnNGaWxlU3BlYyYgaW5GaWxlVG9TYXZlKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfm5zU2F2ZVZpYVRlbXBTdHJlYW0oKTsKICAgICAgICB2aXJ0dWFsIHZvaWQg
Y2xvc2UoKTsKCgogICAgbnNPdXRwdXRTdHJlYW0mIG9wZXJhdG9yIDw8IChjb25zdCBjaGFyKiBi
dWYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBuc091
dHB1dFN0cmVhbTo6b3BlcmF0b3IgPDwgKGJ1Zik7IH0KICAgIG5zT3V0cHV0U3RyZWFtJiBvcGVy
YXRvciA8PCAoY2hhciBjaCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHsgcmV0dXJuIG5zT3V0cHV0U3RyZWFtOjpvcGVyYXRvciA8PCAoY2gpOyB9CiAgICBuc091dHB1
dFN0cmVhbSYgb3BlcmF0b3IgPDwgKHNob3J0IHZhbCkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsgcmV0dXJuIG5zT3V0cHV0U3RyZWFtOjpvcGVyYXRvciA8PCAodmFs
KTsgfQogICAgbnNPdXRwdXRTdHJlYW0mIG9wZXJhdG9yIDw8ICh1bnNpZ25lZCBzaG9ydCB2YWwp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBuc091dHB1
dFN0cmVhbTo6b3BlcmF0b3IgPDwgKHZhbCk7IH0KICAgIG5zT3V0cHV0U3RyZWFtJiBvcGVyYXRv
ciA8PCAobG9uZyB2YWwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
IHJldHVybiBuc091dHB1dFN0cmVhbTo6b3BlcmF0b3IgPDwgKHZhbCk7IH0KICAgIG5zT3V0cHV0
U3RyZWFtJiBvcGVyYXRvciA8PCAodW5zaWduZWQgbG9uZyB2YWwpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBuc091dHB1dFN0cmVhbTo6b3BlcmF0b3Ig
PDwgKHZhbCk7IH0KICAgIG5zT3V0cHV0U3RyZWFtJiBvcGVyYXRvciA8PCAoaW50IHZhbCkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIG5zT3V0cHV0U3Ry
ZWFtOjpvcGVyYXRvciA8PCAodmFsKTsgfQogICAgbnNPdXRwdXRTdHJlYW0mIG9wZXJhdG9yIDw8
ICh1bnNpZ25lZCBpbnQgdmFsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeyByZXR1cm4gbnNPdXRwdXRTdHJlYW06Om9wZXJhdG9yIDw8ICh2YWwpOyB9CiAgICBuc091
dHB1dFN0cmVhbSYgb3BlcmF0b3IgPDwgKG5zT3V0cHV0U3RyZWFtJiAoKnBmKShuc091dHB1dFN0
cmVhbSYpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4g
bnNPdXRwdXRTdHJlYW06Om9wZXJhdG9yIDw8IChwZik7IH0KCnByaXZhdGU6CgoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1NhdmVWaWFUZW1wU3RyZWFtKGNvbnN0IG5z
U2F2ZVZpYVRlbXBTdHJlYW0mIHJocyk7CiAgICBuc1NhdmVWaWFUZW1wU3RyZWFtJiBvcGVyYXRv
cj0oY29uc3QgbnNTYXZlVmlhVGVtcFN0cmVhbSYgcmhzKTsKCgpwcm90ZWN0ZWQ6CgogICAgICAg
IGNvbnN0IG5zRmlsZVNwZWMmIG1GaWxlVG9TYXZlOwogICAgICAgIG5zRmlsZVNwZWMqIG1UZW1w
RmlsZVNwZWM7Cn07CiMgMzMgIm5zTG9nZ2luZ1Byb2dyZXNzTm90aWZpZXIuaCIgMgojIDEgIi4u
Ly4uL2Rpc3QvaW5jbHVkZS9uc0lGaWxlLmgiIDEKIyAzNCAibnNMb2dnaW5nUHJvZ3Jlc3NOb3Rp
Zmllci5oIiAyCgoKY2xhc3MgbnNMb2dnaW5nUHJvZ3Jlc3NMaXN0ZW5lciA6IHB1YmxpYyBuc0lY
UElMaXN0ZW5lcgp7CiAgICBwdWJsaWM6CgogICAgICAgIG5zTG9nZ2luZ1Byb2dyZXNzTGlzdGVu
ZXIoKTsKICAgICAgICB2aXJ0dWFsIH5uc0xvZ2dpbmdQcm9ncmVzc0xpc3RlbmVyKCk7CgogICAg
ICAgIHB1YmxpYzogdmlydHVhbCBuc3Jlc3VsdCBRdWVyeUludGVyZmFjZShjb25zdCBuc0lJRCYg
YUlJRCwgdm9pZCoqIGFJbnN0YW5jZVB0cik7IHZpcnR1YWwgbnNyZWZjbnQgQWRkUmVmKHZvaWQp
OyB2aXJ0dWFsIG5zcmVmY250IFJlbGVhc2Uodm9pZCk7IHByb3RlY3RlZDogbnNyZWZjbnQgbVJl
ZkNudDsgdm9pZCogX21Pd25pbmdUaHJlYWQ7IHB1YmxpYzoKCgogICAgICAgIHZpcnR1YWwgbnNy
ZXN1bHQgQmVmb3JlSmF2YXNjcmlwdEV2YWx1YXRpb24oY29uc3QgUFJVbmljaGFyICpVUkwpOyB2
aXJ0dWFsIG5zcmVzdWx0IEFmdGVySmF2YXNjcmlwdEV2YWx1YXRpb24oY29uc3QgUFJVbmljaGFy
ICpVUkwpOyB2aXJ0dWFsIG5zcmVzdWx0IEluc3RhbGxTdGFydGVkKGNvbnN0IFBSVW5pY2hhciAq
VVJMLCBjb25zdCBQUlVuaWNoYXIgKlVJUGFja2FnZU5hbWUpOyB2aXJ0dWFsIG5zcmVzdWx0IEl0
ZW1TY2hlZHVsZWQoY29uc3QgUFJVbmljaGFyICptZXNzYWdlKTsgdmlydHVhbCBuc3Jlc3VsdCBG
aW5hbGl6ZVByb2dyZXNzKGNvbnN0IFBSVW5pY2hhciAqbWVzc2FnZSwgUFJJbnQzMiBpdGVtTnVt
LCBQUkludDMyIHRvdE51bSk7IHZpcnR1YWwgbnNyZXN1bHQgRmluYWxTdGF0dXMoY29uc3QgUFJV
bmljaGFyICpVUkwsIFBSSW50MzIgc3RhdHVzKTsgdmlydHVhbCBuc3Jlc3VsdCBMb2dDb21tZW50
KGNvbnN0IFBSVW5pY2hhciAqY29tbWVudCk7CgogICAgIHByaXZhdGU6CiAgICAgICAgdm9pZCBH
ZXRUaW1lKGNoYXIqKiBhU3RyaW5nKTsKICAgICAgICBuc091dHB1dEZpbGVTdHJlYW0gKm1Mb2dT
dHJlYW07Cn07Cgpuc3Jlc3VsdCBDb252ZXJ0X25zSUZpbGVfVG9fbnNGaWxlU3BlYyhuc0lGaWxl
ICphSW5JRmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNGaWxl
U3BlYyAqKmFPdXRGaWxlU3BlYyk7CiMgNTYgIm5zU29mdHdhcmVVcGRhdGUuY3BwIiAyCgojIDEg
Ii4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZWdpc3RyeS5oIiAxCiMgMjEgIi4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lSZWdpc3RyeS5oIgp0eXBlZGVmIFBSVWludDMyIG5zUmVnaXN0cnlLZXk7Cgp0eXBl
ZGVmIFBSSW50MzIgbnNXZWxsS25vd25SZWdpc3RyeTsKIyAzMyAiLi4vLi4vZGlzdC9pbmNsdWRl
L25zSVJlZ2lzdHJ5LmgiCmNsYXNzIG5zSVJlZ2lzdHJ5IDogcHVibGljIG5zSVN1cHBvcnRzIHsK
IHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5z
SUlEIGlpZCA9IHsweDVkNDFhNDQwLCAweDhlMzcsIDB4MTFkMiwgeyAweDgwLCAweDU5LCAweDAw
LCAweDYwLCAweDA4LCAweDExLCAweGE5LCAweGMzIH19OyByZXR1cm4gaWlkO30KCiAgZW51bSB7
IE5vbmUgPSAwIH07CgogIGVudW0geyBVc2VycyA9IDEgfTsKCiAgZW51bSB7IENvbW1vbiA9IDIg
fTsKCiAgZW51bSB7IEN1cnJlbnRVc2VyID0gMyB9OwoKICBlbnVtIHsgQXBwbGljYXRpb25Db21w
b25lbnRSZWdpc3RyeSA9IDEgfTsKCiAgZW51bSB7IEFwcGxpY2F0aW9uUmVnaXN0cnkgPSAyIH07
CgogIGVudW0geyBBcHBsaWNhdGlvbkN1c3RvbVJlZ2lzdHJ5ID0gLTEgfTsKCgogIHZpcnR1YWwg
bnNyZXN1bHQgT3Blbihjb25zdCBjaGFyICpyZWdGaWxlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz
dWx0IE9wZW5XZWxsS25vd25SZWdpc3RyeShuc1dlbGxLbm93blJlZ2lzdHJ5IHJlZ2lkKSA9IDA7
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEZsdXNoKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1
bHQgSXNPcGVuKFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBBZGRL
ZXkobnNSZWdpc3RyeUtleSBiYXNlS2V5LCBjb25zdCBQUlVuaWNoYXIgKmtleW5hbWUsIG5zUmVn
aXN0cnlLZXkgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0S2V5KG5zUmVn
aXN0cnlLZXkgYmFzZUtleSwgY29uc3QgUFJVbmljaGFyICprZXluYW1lLCBuc1JlZ2lzdHJ5S2V5
ICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlbW92ZUtleShuc1JlZ2lzdHJ5
S2V5IGJhc2VLZXksIGNvbnN0IFBSVW5pY2hhciAqa2V5bmFtZSkgPSAwOwoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXRTdHJpbmcobnNSZWdpc3RyeUtleSBiYXNlS2V5LCBjb25zdCBQUlVuaWNoYXIg
KnZhbG5hbWUsIFBSVW5pY2hhciAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg
U2V0U3RyaW5nKG5zUmVnaXN0cnlLZXkgYmFzZUtleSwgY29uc3QgUFJVbmljaGFyICp2YWxuYW1l
LCBjb25zdCBQUlVuaWNoYXIgKnZhbHVlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN0
cmluZ1VURjgobnNSZWdpc3RyeUtleSBiYXNlS2V5LCBjb25zdCBjaGFyICpwYXRoLCBjaGFyICoq
X3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTdHJpbmdVVEY4KG5zUmVnaXN0
cnlLZXkgYmFzZUtleSwgY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqdmFsdWUpID0gMDsK
CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Qnl0ZXNVVEY4KG5zUmVnaXN0cnlLZXkgYmFzZUtleSwg
Y29uc3QgY2hhciAqcGF0aCwgUFJVaW50MzIgKmxlbmd0aCwgUFJVaW50OCAqKnZhbHVlQXJyYXkp
ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Qnl0ZXNVVEY4KG5zUmVnaXN0cnlLZXkgYmFz
ZUtleSwgY29uc3QgY2hhciAqcGF0aCwgUFJVaW50MzIgbGVuZ3RoLCBQUlVpbnQ4ICp2YWx1ZUFy
cmF5KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEludChuc1JlZ2lzdHJ5S2V5IGJhc2VL
ZXksIGNvbnN0IGNoYXIgKnBhdGgsIFBSSW50MzIgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwg
bnNyZXN1bHQgU2V0SW50KG5zUmVnaXN0cnlLZXkgYmFzZUtleSwgY29uc3QgY2hhciAqcGF0aCwg
UFJJbnQzMiB2YWx1ZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMb25nTG9uZyhuc1Jl
Z2lzdHJ5S2V5IGJhc2VLZXksIGNvbnN0IGNoYXIgKnBhdGgsIFBSSW50NjQgKl9yZXR2YWwpID0g
MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TG9uZ0xvbmcobnNSZWdpc3RyeUtleSBiYXNlS2V5
LCBjb25zdCBjaGFyICpwYXRoLCBQUkludDY0ICp2YWx1ZSkgPSAwOwoKCgoKCgogIHZpcnR1YWwg
bnNyZXN1bHQgQWRkU3VidHJlZShuc1JlZ2lzdHJ5S2V5IGJhc2VLZXksIGNvbnN0IGNoYXIgKnBh
dGgsIG5zUmVnaXN0cnlLZXkgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVt
b3ZlU3VidHJlZShuc1JlZ2lzdHJ5S2V5IGJhc2VLZXksIGNvbnN0IGNoYXIgKnBhdGgpID0gMDsK
CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3VidHJlZShuc1JlZ2lzdHJ5S2V5IGJhc2VLZXksIGNv
bnN0IGNoYXIgKnBhdGgsIG5zUmVnaXN0cnlLZXkgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwg
bnNyZXN1bHQgQWRkU3VidHJlZVJhdyhuc1JlZ2lzdHJ5S2V5IGJhc2VLZXksIGNvbnN0IGNoYXIg
KnBhdGgsIG5zUmVnaXN0cnlLZXkgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg
UmVtb3ZlU3VidHJlZVJhdyhuc1JlZ2lzdHJ5S2V5IGJhc2VLZXksIGNvbnN0IGNoYXIgKnBhdGgp
ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3VidHJlZVJhdyhuc1JlZ2lzdHJ5S2V5IGJh
c2VLZXksIGNvbnN0IGNoYXIgKnBhdGgsIG5zUmVnaXN0cnlLZXkgKl9yZXR2YWwpID0gMDsKCgog
IHZpcnR1YWwgbnNyZXN1bHQgRW51bWVyYXRlU3VidHJlZXMobnNSZWdpc3RyeUtleSBiYXNlS2V5
LCBuc0lFbnVtZXJhdG9yICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFbnVt
ZXJhdGVBbGxTdWJ0cmVlcyhuc1JlZ2lzdHJ5S2V5IGJhc2VLZXksIG5zSUVudW1lcmF0b3IgKipf
cmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEVudW1lcmF0ZVZhbHVlcyhuc1JlZ2lz
dHJ5S2V5IGJhc2VLZXksIG5zSUVudW1lcmF0b3IgKipfcmV0dmFsKSA9IDA7CgogIGVudW0geyBT
dHJpbmcgPSAxVSB9OwoKICBlbnVtIHsgSW50MzIgPSAyVSB9OwoKICBlbnVtIHsgQnl0ZXMgPSAz
VSB9OwoKICBlbnVtIHsgRmlsZSA9IDRVIH07CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFZhbHVl
VHlwZShuc1JlZ2lzdHJ5S2V5IGJhc2VLZXksIGNvbnN0IGNoYXIgKnBhdGgsIFBSVWludDMyICpf
cmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFZhbHVlTGVuZ3RoKG5zUmVnaXN0
cnlLZXkgYmFzZUtleSwgY29uc3QgY2hhciAqcGF0aCwgUFJVaW50MzIgKl9yZXR2YWwpID0gMDsK
CgogIHZpcnR1YWwgbnNyZXN1bHQgRGVsZXRlVmFsdWUobnNSZWdpc3RyeUtleSBiYXNlS2V5LCBj
b25zdCBjaGFyICpwYXRoKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFc2NhcGVLZXko
UFJVaW50OCAqa2V5LCBQUlVpbnQzMiB0ZXJtaW5hdG9yLCBQUlVpbnQzMiAqbGVuZ3RoLCBQUlVp
bnQ4ICoqZXNjYXBlZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBVbmVzY2FwZUtleShQUlVp
bnQ4ICplc2NhcGVkLCBQUlVpbnQzMiB0ZXJtaW5hdG9yLCBQUlVpbnQzMiAqbGVuZ3RoLCBQUlVp
bnQ4ICoqa2V5KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEN1cnJlbnRVc2VyTmFtZShj
aGFyICogKmFDdXJyZW50VXNlck5hbWUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEN1cnJl
bnRVc2VyTmFtZShjb25zdCBjaGFyICogYUN1cnJlbnRVc2VyTmFtZSkgPSAwOwoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBQYWNrKHZvaWQpID0gMDsKCn07CiMgNTIzICIuLi8uLi9kaXN0L2luY2x1ZGUv
bnNJUmVnaXN0cnkuaCIKY2xhc3MgbnNJUmVnaXN0cnlFbnVtZXJhdG9yIDogcHVibGljIG5zSUVu
dW1lcmF0b3IgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0
aWMgY29uc3QgbnNJSUQgaWlkID0gezB4OGNlY2YyMzYsIDB4MWRkMiwgMHgxMWIyLCB7IDB4ODks
IDB4M2MsIDB4ZjksIDB4ODQsIDB4ODksIDB4NTYsIDB4ZWEsIDB4ZWMgfX07IHJldHVybiBpaWQ7
fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDdXJyZW50SXRlbUluUGxhY2VVVEY4KG5zUmVnaXN0cnlL
ZXkgKmtleSwgY29uc3QgY2hhciAqKml0ZW0pID0gMDsKCn07CiMgNTkxICIuLi8uLi9kaXN0L2lu
Y2x1ZGUvbnNJUmVnaXN0cnkuaCIKY2xhc3MgbnNJUmVnaXN0cnlOb2RlIDogcHVibGljIG5zSVN1
cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGlj
IGNvbnN0IG5zSUlEIGlpZCA9IHsweGQxYjU0ODMxLCAweGFjMDcsIDB4MTFkMiwgeyAweDgwLCAw
eDVlLCAweDAwLCAweDYwLCAweDA4LCAweDExLCAweGE5LCAweGMzIH19OyByZXR1cm4gaWlkO30K
CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFtZVVURjgoY2hhciAqICphTmFtZVVURjgpID0gMDsK
CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFtZShQUlVuaWNoYXIgKiAqYU5hbWUpID0gMDsKCgog
IHZpcnR1YWwgbnNyZXN1bHQgR2V0S2V5KG5zUmVnaXN0cnlLZXkgKmFLZXkpID0gMDsKCn07CiMg
NjgzICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJUmVnaXN0cnkuaCIKY2xhc3MgbnNJUmVnaXN0cnlW
YWx1ZSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJ
RCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg1MzE2YzM4MCwgMHhiMmY4
LCAweDExZDIsIHsgMHhhMywgMHg3NCwgMHgwMCwgMHg4MCwgMHhjNiwgMHhmOCwgMHgwZSwgMHg0
YiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5hbWUoUFJVbmljaGFy
ICogKmFOYW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5hbWVVVEY4KGNoYXIgKiAq
YU5hbWVVVEY4KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFR5cGUoUFJVaW50MzIgKmFU
eXBlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExlbmd0aChQUlVpbnQzMiAqYUxlbmd0
aCkgPSAwOwoKfTsKIyA3NzkgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZWdpc3RyeS5oIgojIDEg
Ii4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lSZWdpc3RyeVV0aWxzLmgiIDEKIyA3ODAgIi4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lSZWdpc3RyeS5oIiAyCiMgNTggIm5zU29mdHdhcmVVcGRhdGUuY3BwIiAy
CiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zQnVpbGRJRC5oIiAxCiMgNTkgIm5zU29mdHdhcmVV
cGRhdGUuY3BwIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zU3BlY2lhbFN5c3RlbURpcmVj
dG9yeS5oIiAxCiMgNjAgIm5zU29mdHdhcmVVcGRhdGUuY3BwIiAyCiMgMSAiLi4vLi4vZGlzdC9p
bmNsdWRlL25zUHJvY2Vzcy5oIiAxCiMgMjggIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1Byb2Nlc3Mu
aCIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJvY2Vzcy5oIiAxCiMgMjkgIi4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lQcm9jZXNzLmgiCmNsYXNzIG5zSVByb2Nlc3MgOiBwdWJsaWMgbnNJU3Vw
cG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMg
Y29uc3QgbnNJSUQgaWlkID0gezB4M2VkODZkYmUsIDB4ZDA4NCwgMHgxMWQ0LCB7IDB4YmEsIDB4
N2EsIDB4MDAsIDB4YzAsIDB4NGYsIDB4YTAsIDB4ZDIsIDB4NmIgfX07IHJldHVybiBpaWQ7fQoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0KG5zSUZpbGUgKmV4ZWN1dGFibGUpID0gMDsKCgogIHZp
cnR1YWwgbnNyZXN1bHQgSW5pdFdpdGhQaWQoUFJVaW50MzIgcGlkKSA9IDA7CgoKICB2aXJ0dWFs
IG5zcmVzdWx0IEtpbGwodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSdW4oUFJCb29s
IGJsb2NraW5nLCBjb25zdCBjaGFyICoqYXJncywgUFJVaW50MzIgY291bnQsIFBSVWludDMyICpw
aWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TG9jYXRpb24obnNJRmlsZSAqICphTG9j
YXRpb24pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGlkKFBSVWludDMyICphUGlkKSA9
IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByb2Nlc3NOYW1lKGNoYXIgKiAqYVByb2Nlc3NO
YW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByb2Nlc3NTaWduYXR1cmUoUFJVaW50
MzIgKmFQcm9jZXNzU2lnbmF0dXJlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEV4aXRW
YWx1ZShQUkludDMyICphRXhpdFZhbHVlKSA9IDA7Cgp9OwojIDI5ICIuLi8uLi9kaXN0L2luY2x1
ZGUvbnNQcm9jZXNzLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNYUElETFN0cmluZy5o
IiAxCiMgMzAgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1Byb2Nlc3MuaCIgMgojIDEgIi91c3Ivc3Jj
L21pc2MvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnByb2Nlcy5oIiAxCiMgMzEgIi4uLy4u
L2Rpc3QvaW5jbHVkZS9uc1Byb2Nlc3MuaCIgMgoKCgoKCmNsYXNzIG5zUHJvY2VzcyA6IHB1Ymxp
YyBuc0lQcm9jZXNzCnsKcHVibGljOgoKICBwdWJsaWM6IHZpcnR1YWwgbnNyZXN1bHQgUXVlcnlJ
bnRlcmZhY2UoY29uc3QgbnNJSUQmIGFJSUQsIHZvaWQqKiBhSW5zdGFuY2VQdHIpOyB2aXJ0dWFs
IG5zcmVmY250IEFkZFJlZih2b2lkKTsgdmlydHVhbCBuc3JlZmNudCBSZWxlYXNlKHZvaWQpOyBw
cm90ZWN0ZWQ6IG5zcmVmY250IG1SZWZDbnQ7IHZvaWQqIF9tT3duaW5nVGhyZWFkOyBwdWJsaWM6
CiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0KG5zSUZpbGUgKmV4ZWN1dGFibGUpOyB2aXJ0dWFsIG5z
cmVzdWx0IEluaXRXaXRoUGlkKFBSVWludDMyIHBpZCk7IHZpcnR1YWwgbnNyZXN1bHQgS2lsbCh2
b2lkKTsgdmlydHVhbCBuc3Jlc3VsdCBSdW4oUFJCb29sIGJsb2NraW5nLCBjb25zdCBjaGFyICoq
YXJncywgUFJVaW50MzIgY291bnQsIFBSVWludDMyICpwaWQpOyB2aXJ0dWFsIG5zcmVzdWx0IEdl
dExvY2F0aW9uKG5zSUZpbGUgKiAqYUxvY2F0aW9uKTsgdmlydHVhbCBuc3Jlc3VsdCBHZXRQaWQo
UFJVaW50MzIgKmFQaWQpOyB2aXJ0dWFsIG5zcmVzdWx0IEdldFByb2Nlc3NOYW1lKGNoYXIgKiAq
YVByb2Nlc3NOYW1lKTsgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcm9jZXNzU2lnbmF0dXJlKFBSVWlu
dDMyICphUHJvY2Vzc1NpZ25hdHVyZSk7IHZpcnR1YWwgbnNyZXN1bHQgR2V0RXhpdFZhbHVlKFBS
SW50MzIgKmFFeGl0VmFsdWUpOwoKICBuc1Byb2Nlc3MoKTsKICB2aXJ0dWFsIH5uc1Byb2Nlc3Mo
KTsKCnByaXZhdGU6CiAgbnNDT01QdHI8bnNJRmlsZT4gbUV4ZWN1dGFibGU7CiAgUFJJbnQzMiBt
RXhpdFZhbHVlOwogIG5zWFBJRExDU3RyaW5nIG1UYXJnZXRQYXRoOwogIFBSUHJvY2VzcyAqbVBy
b2Nlc3M7Cgp9OwojIDYxICJuc1NvZnR3YXJlVXBkYXRlLmNwcCIgMgoKCiMgMSAiLi4vLi4vZGlz
dC9pbmNsdWRlL25zRE9NQ0lELmgiIDEKIyAyNiAiLi4vLi4vZGlzdC9pbmNsdWRlL25zRE9NQ0lE
LmgiCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVN1cHBvcnRzLmgiIDEKIyAyNyAiLi4vLi4v
ZGlzdC9pbmNsdWRlL25zRE9NQ0lELmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJRmFj
dG9yeS5oIiAxCiMgMjggIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0RPTUNJRC5oIiAyCiMgMSAiLi4v
Li4vZGlzdC9pbmNsdWRlL25zSUNvbXBvbmVudE1hbmFnZXIuaCIgMQojIDI5ICIuLi8uLi9kaXN0
L2luY2x1ZGUvbnNET01DSUQuaCIgMgojIDY0ICJuc1NvZnR3YXJlVXBkYXRlLmNwcCIgMgojIDEg
Ii4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZXJ2aWNlTWFuYWdlci5oIiAxCiMgNjUgIm5zU29mdHdh
cmVVcGRhdGUuY3BwIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSU5hbWVTcGFjZU1hbmFn
ZXIuaCIgMQojIDI2ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJTmFtZVNwYWNlTWFuYWdlci5oIgoj
IDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMjcgIi4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lOYW1lU3BhY2VNYW5hZ2VyLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUv
bnNsYXlvdXQuaCIgMQojIDI1ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNsYXlvdXQuaCIKIyAxICIu
Li8uLi9kaXN0L2luY2x1ZGUvbnNjb3JlLmgiIDEKIyAyNiAiLi4vLi4vZGlzdC9pbmNsdWRlL25z
bGF5b3V0LmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU3VwcG9ydHMuaCIgMQojIDI3
ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNsYXlvdXQuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVk
ZS9uc1RyYWNlUmVmY250LmgiIDEKIyAyOCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zbGF5b3V0Lmgi
IDIKIyAyOCAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSU5hbWVTcGFjZU1hbmFnZXIuaCIgMgojIDEg
Ii4uLy4uL2Rpc3QvaW5jbHVkZS9uc0FXcml0YWJsZVN0cmluZy5oIiAxCiMgMjkgIi4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lOYW1lU3BhY2VNYW5hZ2VyLmgiIDIKCmNsYXNzIG5zSUF0b207CmNsYXNz
IG5zU3RyaW5nOwpjbGFzcyBuc0lOYW1lU3BhY2U7CiMgNjggIi4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0lOYW1lU3BhY2VNYW5hZ2VyLmgiCmNsYXNzIG5zSU5hbWVTcGFjZU1hbmFnZXIgOiBwdWJsaWMg
bnNJU3VwcG9ydHMgewpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7IHN0
YXRpYyBuc0lJRCBpaWQgPSB7IDB4YTZjZjkwZDUsIDB4MTViMywgMHgxMWQyLCB7MHg5MywgMHgy
ZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMn19OyByZXR1cm4gaWlkOyB9Cgog
IHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlUm9vdE5hbWVTcGFjZShuc0lOYW1lU3BhY2UqJiBhUm9v
dE5hbWVTcGFjZSkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZ2lzdGVyTmFtZVNwYWNlKGNv
bnN0IG5zQVJlYWRhYmxlU3RyaW5nJiBhVVJJLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiYgYU5hbWVTcGFjZUlEKSA9IDA7CgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0TmFtZVNwYWNlVVJJKFBSSW50MzIgYU5hbWVTcGFjZUlELCBuc0FXcml0
YWJsZVN0cmluZyYgYVVSSSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFtZVNwYWNlSUQo
Y29uc3QgbnNBUmVhZGFibGVTdHJpbmcmIGFVUkksIFBSSW50MzImIGFOYW1lU3BhY2VJRCkgPSAw
Owp9OwoKZXh0ZXJuIG5zcmVzdWx0CiAgTlNfTmV3TmFtZVNwYWNlTWFuYWdlcihuc0lOYW1lU3Bh
Y2VNYW5hZ2VyKiogYUluc3RhbmNlUHRyUmVzdWx0KTsKIyA2NiAibnNTb2Z0d2FyZVVwZGF0ZS5j
cHAiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJU2NyaXB0TmFtZVNwYWNlTWFuYWdlci5o
IiAxCiMgNjcgIm5zU29mdHdhcmVVcGRhdGUuY3BwIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRl
L25zSVNjcmlwdEV4dGVybmFsTmFtZVNldC5oIiAxCiMgNjggIm5zU29mdHdhcmVVcGRhdGUuY3Bw
IiAyCgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lFdmVudFF1ZXVlU2VydmljZS5oIiAxCiMg
NzAgIm5zU29mdHdhcmVVcGRhdGUuY3BwIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVBy
b3h5T2JqZWN0TWFuYWdlci5oIiAxCiMgMTcgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcm94eU9i
amVjdE1hbmFnZXIuaCIKY2xhc3MgbnNJRXZlbnRRdWV1ZTsKIyAyNyAiLi4vLi4vZGlzdC9pbmNs
dWRlL25zSVByb3h5T2JqZWN0TWFuYWdlci5oIgpjbGFzcyBuc0lQcm94eU9iamVjdE1hbmFnZXIg
OiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdl
dElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4ZWVhOTBkNDMsIDB4YjA1OSwgMHgx
MWQyLCB7IDB4OTEsIDB4NWUsIDB4YzEsIDB4MmIsIDB4NjksIDB4NmMsIDB4OTMsIDB4MzMgfX07
IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcm94eUZvck9iamVjdChuc0lF
dmVudFF1ZXVlICpkZXN0UXVldWUsIGNvbnN0IG5zSUlEICYgaWlkLCBuc0lTdXBwb3J0cyAqb2Jq
ZWN0LCBQUkludDMyIHByb3h5VHlwZSwgdm9pZCAqICpyZXN1bHQpID0gMDsKCgogIHZpcnR1YWwg
bnNyZXN1bHQgR2V0UHJveHkobnNJRXZlbnRRdWV1ZSAqZGVzdFF1ZXVlLCBjb25zdCBuc0lJRCAm
IGNpZCwgbnNJU3VwcG9ydHMgKmFPdXRlciwgY29uc3QgbnNJSUQgJiBpaWQsIFBSSW50MzIgcHJv
eHlUeXBlLCB2b2lkICogKnJlc3VsdCkgPSAwOwoKfTsKIyA5OSAiLi4vLi4vZGlzdC9pbmNsdWRl
L25zSVByb3h5T2JqZWN0TWFuYWdlci5oIgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1Byb3h5
RXZlbnQuaCIgMQojIDI2ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNQcm94eUV2ZW50LmgiCiMgMSAi
Li4vLi4vZGlzdC9pbmNsdWRlL25zQ09NUHRyLmgiIDEKIyAyNyAiLi4vLi4vZGlzdC9pbmNsdWRl
L25zUHJveHlFdmVudC5oIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zY29yZS5oIiAxCiMg
MjggIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1Byb3h5RXZlbnQuaCIgMgojIDEgIi4uLy4uL2Rpc3Qv
aW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMgMjkgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1Byb3h5
RXZlbnQuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lGYWN0b3J5LmgiIDEKIyAzMCAi
Li4vLi4vZGlzdC9pbmNsdWRlL25zUHJveHlFdmVudC5oIiAyCgojIDEgIi4uLy4uL2Rpc3QvaW5j
bHVkZS9uc0lFdmVudFF1ZXVlU2VydmljZS5oIiAxCiMgMzIgIi4uLy4uL2Rpc3QvaW5jbHVkZS9u
c1Byb3h5RXZlbnQuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lFdmVudFF1ZXVlLmgi
IDEKIyAzMyAiLi4vLi4vZGlzdC9pbmNsdWRlL25zUHJveHlFdmVudC5oIiAyCiMgMSAiLi4vLi4v
ZGlzdC9pbmNsdWRlL3BsZXZlbnQuaCIgMQojIDM0ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNQcm94
eUV2ZW50LmgiIDIKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv
cHJ0eXBlcy5oIiAxCiMgMzUgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1Byb3h5RXZlbnQuaCIgMgoj
IDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS94cHRjYWxsLmgiIDEKIyAyOCAiLi4vLi4vZGlzdC9pbmNs
dWRlL3hwdGNhbGwuaCIKIyAxICIvdXNyL3NyYy9taXNjL21vemlsbGEvZGlzdC9pbmNsdWRlL25z
cHIvcHJ0eXBlcy5oIiAxCiMgMjkgIi4uLy4uL2Rpc3QvaW5jbHVkZS94cHRjYWxsLmgiIDIKIyAx
ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNjb3JlLmgiIDEKIyAzMCAiLi4vLi4vZGlzdC9pbmNsdWRl
L3hwdGNhbGwuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTdXBwb3J0cy5oIiAxCiMg
MzEgIi4uLy4uL2Rpc3QvaW5jbHVkZS94cHRjYWxsLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1
ZGUveHB0X3N0cnVjdC5oIiAxCiMgMzIgIi4uLy4uL2Rpc3QvaW5jbHVkZS94cHRjYWxsLmgiIDIK
IyAxICIuLi8uLi9kaXN0L2luY2x1ZGUveHB0aW5mby5oIiAxCiMgMzMgIi4uLy4uL2Rpc3QvaW5j
bHVkZS94cHRjYWxsLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJSW50ZXJmYWNlSW5m
by5oIiAxCiMgMzQgIi4uLy4uL2Rpc3QvaW5jbHVkZS94cHRjYWxsLmgiIDIKIyA2NSAiLi4vLi4v
ZGlzdC9pbmNsdWRlL3hwdGNhbGwuaCIKc3RydWN0IG5zWFBUQ01pbmlWYXJpYW50CnsKCgogICAg
dW5pb24KICAgIHsKICAgICAgICBQUkludDggaTg7CiAgICAgICAgUFJJbnQxNiBpMTY7CiAgICAg
ICAgUFJJbnQzMiBpMzI7CiAgICAgICAgUFJJbnQ2NCBpNjQ7CiAgICAgICAgUFJVaW50OCB1ODsK
ICAgICAgICBQUlVpbnQxNiB1MTY7CiAgICAgICAgUFJVaW50MzIgdTMyOwogICAgICAgIFBSVWlu
dDY0IHU2NDsKICAgICAgICBmbG9hdCBmOwogICAgICAgIGRvdWJsZSBkOwogICAgICAgIFBSQm9v
bCBiOwogICAgICAgIGNoYXIgYzsKICAgICAgICBQUlVuaWNoYXIgd2M7CiAgICAgICAgdm9pZCog
cDsKICAgIH0gdmFsOwp9OwoKc3RydWN0IG5zWFBUQ1ZhcmlhbnQgOiBwdWJsaWMgbnNYUFRDTWlu
aVZhcmlhbnQKewoKCgoKICAgIHZvaWQqIHB0cjsKICAgIG5zWFBUVHlwZSB0eXBlOwogICAgUFJV
aW50OCBmbGFnczsKCiAgICBlbnVtCiAgICB7CgogICAgICAgIFBUUl9JU19EQVRBID0gMHgxLAog
ICAgICAgIFZBTF9JU19BTExPQ0Q9IDB4MiwKICAgICAgICBWQUxfSVNfSUZBQ0UgPSAweDQsCiAg
ICAgICAgVkFMX0lTX0FSUkFZID0gMHg4LAogICAgICAgIFZBTF9JU19ET01TVFI9IDB4MTAKICAg
IH07CgogICAgdm9pZCBDbGVhckZsYWdzKCkge2ZsYWdzID0gMDt9CiAgICB2b2lkIFNldFB0cklz
RGF0YSgpIHtmbGFncyB8PSBQVFJfSVNfREFUQTt9CiAgICB2b2lkIFNldFZhbElzQWxsb2NhdGVk
KCkge2ZsYWdzIHw9IFZBTF9JU19BTExPQ0Q7fQogICAgdm9pZCBTZXRWYWxJc0ludGVyZmFjZSgp
IHtmbGFncyB8PSBWQUxfSVNfSUZBQ0U7fQogICAgdm9pZCBTZXRWYWxJc0FycmF5KCkge2ZsYWdz
IHw9IFZBTF9JU19BUlJBWTt9CiAgICB2b2lkIFNldFZhbElzRE9NU3RyaW5nKCkge2ZsYWdzIHw9
IFZBTF9JU19ET01TVFI7fQoKICAgIFBSQm9vbCBJc1B0ckRhdGEoKSBjb25zdCB7cmV0dXJuIDAg
IT0gKGZsYWdzICYgUFRSX0lTX0RBVEEpO30KICAgIFBSQm9vbCBJc1ZhbEFsbG9jYXRlZCgpIGNv
bnN0IHtyZXR1cm4gMCAhPSAoZmxhZ3MgJiBWQUxfSVNfQUxMT0NEKTt9CiAgICBQUkJvb2wgSXNW
YWxJbnRlcmZhY2UoKSBjb25zdCB7cmV0dXJuIDAgIT0gKGZsYWdzICYgVkFMX0lTX0lGQUNFKTt9
CiAgICBQUkJvb2wgSXNWYWxBcnJheSgpIGNvbnN0IHtyZXR1cm4gMCAhPSAoZmxhZ3MgJiBWQUxf
SVNfQVJSQVkpO30KICAgIFBSQm9vbCBJc1ZhbERPTVN0cmluZygpIGNvbnN0IHtyZXR1cm4gMCAh
PSAoZmxhZ3MgJiBWQUxfSVNfRE9NU1RSKTt9CgogICAgdm9pZCBJbml0KGNvbnN0IG5zWFBUQ01p
bmlWYXJpYW50JiBtdiwgY29uc3QgbnNYUFRUeXBlJiB0LCBQUlVpbnQ4IGYpCiAgICB7CiAgICAg
ICAgdHlwZSA9IHQ7CiAgICAgICAgZmxhZ3MgPSBmOwoKICAgICAgICBpZihmICYgUFRSX0lTX0RB
VEEpCiAgICAgICAgewogICAgICAgICAgICBwdHIgPSBtdi52YWwucDsKICAgICAgICAgICAgdmFs
LnAgPSAwOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBwdHIg
PSAwOwogICAgICAgICAgICBzd2l0Y2godC5UYWdQYXJ0KCkpIHsKICAgICAgICAgICAgICBjYXNl
IG5zWFBUVHlwZTo6VF9JODogdmFsLmk4ID0gbXYudmFsLmk4OyBicmVhazsKICAgICAgICAgICAg
ICBjYXNlIG5zWFBUVHlwZTo6VF9JMTY6IHZhbC5pMTYgPSBtdi52YWwuaTE2OyBicmVhazsKICAg
ICAgICAgICAgICBjYXNlIG5zWFBUVHlwZTo6VF9JMzI6IHZhbC5pMzIgPSBtdi52YWwuaTMyOyBi
cmVhazsKICAgICAgICAgICAgICBjYXNlIG5zWFBUVHlwZTo6VF9JNjQ6IHZhbC5pNjQgPSBtdi52
YWwuaTY0OyBicmVhazsKICAgICAgICAgICAgICBjYXNlIG5zWFBUVHlwZTo6VF9VODogdmFsLnU4
ID0gbXYudmFsLnU4OyBicmVhazsKICAgICAgICAgICAgICBjYXNlIG5zWFBUVHlwZTo6VF9VMTY6
IHZhbC51MTYgPSBtdi52YWwudTE2OyBicmVhazsKICAgICAgICAgICAgICBjYXNlIG5zWFBUVHlw
ZTo6VF9VMzI6IHZhbC51MzIgPSBtdi52YWwudTMyOyBicmVhazsKICAgICAgICAgICAgICBjYXNl
IG5zWFBUVHlwZTo6VF9VNjQ6IHZhbC51NjQgPSBtdi52YWwudTY0OyBicmVhazsKICAgICAgICAg
ICAgICBjYXNlIG5zWFBUVHlwZTo6VF9GTE9BVDogdmFsLmYgPSBtdi52YWwuZjsgYnJlYWs7CiAg
ICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfRE9VQkxFOiB2YWwuZCA9IG12LnZhbC5kOyBi
cmVhazsKICAgICAgICAgICAgICBjYXNlIG5zWFBUVHlwZTo6VF9CT09MOiB2YWwuYiA9IG12LnZh
bC5iOyBicmVhazsKICAgICAgICAgICAgICBjYXNlIG5zWFBUVHlwZTo6VF9DSEFSOiB2YWwuYyA9
IG12LnZhbC5jOyBicmVhazsKICAgICAgICAgICAgICBjYXNlIG5zWFBUVHlwZTo6VF9XQ0hBUjog
dmFsLndjID0gbXYudmFsLndjOyBicmVhazsKICAgICAgICAgICAgICBjYXNlIG5zWFBUVHlwZTo6
VF9WT0lEOgogICAgICAgICAgICAgIGNhc2UgbnNYUFRUeXBlOjpUX0lJRDoKICAgICAgICAgICAg
ICBjYXNlIG5zWFBUVHlwZTo6VF9ET01TVFJJTkc6CiAgICAgICAgICAgICAgY2FzZSBuc1hQVFR5
cGU6OlRfQ0hBUl9TVFI6CiAgICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfV0NIQVJfU1RS
OgogICAgICAgICAgICAgIGNhc2UgbnNYUFRUeXBlOjpUX0lOVEVSRkFDRToKICAgICAgICAgICAg
ICBjYXNlIG5zWFBUVHlwZTo6VF9JTlRFUkZBQ0VfSVM6CiAgICAgICAgICAgICAgY2FzZSBuc1hQ
VFR5cGU6OlRfQVJSQVk6CiAgICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfUFNUUklOR19T
SVpFX0lTOgogICAgICAgICAgICAgIGNhc2UgbnNYUFRUeXBlOjpUX1BXU1RSSU5HX1NJWkVfSVM6
CiAgICAgICAgICAgICAgZGVmYXVsdDogdmFsLnAgPSBtdi52YWwucDsgYnJlYWs7CiAgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICB9Cn07CgoKCmNsYXNzIG5zWFBUQ1N0dWJCYXNlIDogcHVibGlj
IG5zSVN1cHBvcnRzCnsKcHVibGljOgoKCgoKICAgICAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1
bHQgUXVlcnlJbnRlcmZhY2UoY29uc3QgbnNJSUQmIGFJSUQsIHZvaWQqKiBhSW5zdGFuY2VQdHIp
OwoKCgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS94cHRjc3R1YnNkZWNsLmluYyIgMQojIDExICIu
Li8uLi9kaXN0L2luY2x1ZGUveHB0Y3N0dWJzZGVjbC5pbmMiCiAgICAgICAgICAgIHZpcnR1YWwg
bnNyZXN1bHQgU3R1YjMoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNCgpOwog
ICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI1KCk7CiAgICAgICAgICAgIHZpcnR1YWwg
bnNyZXN1bHQgU3R1YjYoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNygpOwog
ICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI4KCk7CiAgICAgICAgICAgIHZpcnR1YWwg
bnNyZXN1bHQgU3R1YjkoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTAoKTsK
ICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTEoKTsKICAgICAgICAgICAgdmlydHVh
bCBuc3Jlc3VsdCBTdHViMTIoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTMo
KTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTQoKTsKICAgICAgICAgICAgdmly
dHVhbCBuc3Jlc3VsdCBTdHViMTUoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHVi
MTYoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTcoKTsKICAgICAgICAgICAg
dmlydHVhbCBuc3Jlc3VsdCBTdHViMTgoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBT
dHViMTkoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMjAoKTsKICAgICAgICAg
ICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMjEoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3Vs
dCBTdHViMjIoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMjMoKTsKICAgICAg
ICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMjQoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jl
c3VsdCBTdHViMjUoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMjYoKTsKICAg
ICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMjcoKTsKICAgICAgICAgICAgdmlydHVhbCBu
c3Jlc3VsdCBTdHViMjgoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMjkoKTsK
ICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMzAoKTsKICAgICAgICAgICAgdmlydHVh
bCBuc3Jlc3VsdCBTdHViMzEoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMzIo
KTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMzMoKTsKICAgICAgICAgICAgdmly
dHVhbCBuc3Jlc3VsdCBTdHViMzQoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHVi
MzUoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMzYoKTsKICAgICAgICAgICAg
dmlydHVhbCBuc3Jlc3VsdCBTdHViMzcoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBT
dHViMzgoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMzkoKTsKICAgICAgICAg
ICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNDAoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3Vs
dCBTdHViNDEoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNDIoKTsKICAgICAg
ICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNDMoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jl
c3VsdCBTdHViNDQoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNDUoKTsKICAg
ICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNDYoKTsKICAgICAgICAgICAgdmlydHVhbCBu
c3Jlc3VsdCBTdHViNDcoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNDgoKTsK
ICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNDkoKTsKICAgICAgICAgICAgdmlydHVh
bCBuc3Jlc3VsdCBTdHViNTAoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNTEo
KTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNTIoKTsKICAgICAgICAgICAgdmly
dHVhbCBuc3Jlc3VsdCBTdHViNTMoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHVi
NTQoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNTUoKTsKICAgICAgICAgICAg
dmlydHVhbCBuc3Jlc3VsdCBTdHViNTYoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBT
dHViNTcoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNTgoKTsKICAgICAgICAg
ICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNTkoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3Vs
dCBTdHViNjAoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNjEoKTsKICAgICAg
ICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNjIoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jl
c3VsdCBTdHViNjMoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNjQoKTsKICAg
ICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNjUoKTsKICAgICAgICAgICAgdmlydHVhbCBu
c3Jlc3VsdCBTdHViNjYoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNjcoKTsK
ICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNjgoKTsKICAgICAgICAgICAgdmlydHVh
bCBuc3Jlc3VsdCBTdHViNjkoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNzAo
KTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNzEoKTsKICAgICAgICAgICAgdmly
dHVhbCBuc3Jlc3VsdCBTdHViNzIoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHVi
NzMoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNzQoKTsKICAgICAgICAgICAg
dmlydHVhbCBuc3Jlc3VsdCBTdHViNzUoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBT
dHViNzYoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNzcoKTsKICAgICAgICAg
ICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViNzgoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3Vs
dCBTdHViNzkoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViODAoKTsKICAgICAg
ICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViODEoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jl
c3VsdCBTdHViODIoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViODMoKTsKICAg
ICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViODQoKTsKICAgICAgICAgICAgdmlydHVhbCBu
c3Jlc3VsdCBTdHViODUoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViODYoKTsK
ICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViODcoKTsKICAgICAgICAgICAgdmlydHVh
bCBuc3Jlc3VsdCBTdHViODgoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViODko
KTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViOTAoKTsKICAgICAgICAgICAgdmly
dHVhbCBuc3Jlc3VsdCBTdHViOTEoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHVi
OTIoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViOTMoKTsKICAgICAgICAgICAg
dmlydHVhbCBuc3Jlc3VsdCBTdHViOTQoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBT
dHViOTUoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViOTYoKTsKICAgICAgICAg
ICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViOTcoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3Vs
dCBTdHViOTgoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViOTkoKTsKICAgICAg
ICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTAwKCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNy
ZXN1bHQgU3R1YjEwMSgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxMDIoKTsK
ICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTAzKCk7CiAgICAgICAgICAgIHZpcnR1
YWwgbnNyZXN1bHQgU3R1YjEwNCgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIx
MDUoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTA2KCk7CiAgICAgICAgICAg
IHZpcnR1YWwgbnNyZXN1bHQgU3R1YjEwNygpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0
IFN0dWIxMDgoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTA5KCk7CiAgICAg
ICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjExMCgpOwogICAgICAgICAgICB2aXJ0dWFsIG5z
cmVzdWx0IFN0dWIxMTEoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTEyKCk7
CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjExMygpOwogICAgICAgICAgICB2aXJ0
dWFsIG5zcmVzdWx0IFN0dWIxMTQoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHVi
MTE1KCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjExNigpOwogICAgICAgICAg
ICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxMTcoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3Vs
dCBTdHViMTE4KCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjExOSgpOwogICAg
ICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxMjAoKTsKICAgICAgICAgICAgdmlydHVhbCBu
c3Jlc3VsdCBTdHViMTIxKCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjEyMigp
OwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxMjMoKTsKICAgICAgICAgICAgdmly
dHVhbCBuc3Jlc3VsdCBTdHViMTI0KCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1
YjEyNSgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxMjYoKTsKICAgICAgICAg
ICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTI3KCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1
bHQgU3R1YjEyOCgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxMjkoKTsKICAg
ICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTMwKCk7CiAgICAgICAgICAgIHZpcnR1YWwg
bnNyZXN1bHQgU3R1YjEzMSgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxMzIo
KTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTMzKCk7CiAgICAgICAgICAgIHZp
cnR1YWwgbnNyZXN1bHQgU3R1YjEzNCgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0
dWIxMzUoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTM2KCk7CiAgICAgICAg
ICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjEzNygpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVz
dWx0IFN0dWIxMzgoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTM5KCk7CiAg
ICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE0MCgpOwogICAgICAgICAgICB2aXJ0dWFs
IG5zcmVzdWx0IFN0dWIxNDEoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTQy
KCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE0MygpOwogICAgICAgICAgICB2
aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNDQoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBT
dHViMTQ1KCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE0NigpOwogICAgICAg
ICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNDcoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jl
c3VsdCBTdHViMTQ4KCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE0OSgpOwog
ICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNTAoKTsKICAgICAgICAgICAgdmlydHVh
bCBuc3Jlc3VsdCBTdHViMTUxKCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE1
MigpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNTMoKTsKICAgICAgICAgICAg
dmlydHVhbCBuc3Jlc3VsdCBTdHViMTU0KCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQg
U3R1YjE1NSgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNTYoKTsKICAgICAg
ICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTU3KCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNy
ZXN1bHQgU3R1YjE1OCgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNTkoKTsK
ICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTYwKCk7CiAgICAgICAgICAgIHZpcnR1
YWwgbnNyZXN1bHQgU3R1YjE2MSgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIx
NjIoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTYzKCk7CiAgICAgICAgICAg
IHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE2NCgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0
IFN0dWIxNjUoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTY2KCk7CiAgICAg
ICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE2NygpOwogICAgICAgICAgICB2aXJ0dWFsIG5z
cmVzdWx0IFN0dWIxNjgoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTY5KCk7
CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE3MCgpOwogICAgICAgICAgICB2aXJ0
dWFsIG5zcmVzdWx0IFN0dWIxNzEoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHVi
MTcyKCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE3MygpOwogICAgICAgICAg
ICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNzQoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3Vs
dCBTdHViMTc1KCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE3NigpOwogICAg
ICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNzcoKTsKICAgICAgICAgICAgdmlydHVhbCBu
c3Jlc3VsdCBTdHViMTc4KCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE3OSgp
OwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxODAoKTsKICAgICAgICAgICAgdmly
dHVhbCBuc3Jlc3VsdCBTdHViMTgxKCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1
YjE4MigpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxODMoKTsKICAgICAgICAg
ICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTg0KCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1
bHQgU3R1YjE4NSgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxODYoKTsKICAg
ICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTg3KCk7CiAgICAgICAgICAgIHZpcnR1YWwg
bnNyZXN1bHQgU3R1YjE4OCgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxODko
KTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTkwKCk7CiAgICAgICAgICAgIHZp
cnR1YWwgbnNyZXN1bHQgU3R1YjE5MSgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0
dWIxOTIoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTkzKCk7CiAgICAgICAg
ICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE5NCgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVz
dWx0IFN0dWIxOTUoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTk2KCk7CiAg
ICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE5NygpOwogICAgICAgICAgICB2aXJ0dWFs
IG5zcmVzdWx0IFN0dWIxOTgoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMTk5
KCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIwMCgpOwogICAgICAgICAgICB2
aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMDEoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBT
dHViMjAyKCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIwMygpOwogICAgICAg
ICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMDQoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jl
c3VsdCBTdHViMjA1KCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIwNigpOwog
ICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMDcoKTsKICAgICAgICAgICAgdmlydHVh
bCBuc3Jlc3VsdCBTdHViMjA4KCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIw
OSgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMTAoKTsKICAgICAgICAgICAg
dmlydHVhbCBuc3Jlc3VsdCBTdHViMjExKCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQg
U3R1YjIxMigpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMTMoKTsKICAgICAg
ICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMjE0KCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNy
ZXN1bHQgU3R1YjIxNSgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMTYoKTsK
ICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMjE3KCk7CiAgICAgICAgICAgIHZpcnR1
YWwgbnNyZXN1bHQgU3R1YjIxOCgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIy
MTkoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMjIwKCk7CiAgICAgICAgICAg
IHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIyMSgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0
IFN0dWIyMjIoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMjIzKCk7CiAgICAg
ICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIyNCgpOwogICAgICAgICAgICB2aXJ0dWFsIG5z
cmVzdWx0IFN0dWIyMjUoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMjI2KCk7
CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIyNygpOwogICAgICAgICAgICB2aXJ0
dWFsIG5zcmVzdWx0IFN0dWIyMjgoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHVi
MjI5KCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIzMCgpOwogICAgICAgICAg
ICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMzEoKTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3Vs
dCBTdHViMjMyKCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIzMygpOwogICAg
ICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMzQoKTsKICAgICAgICAgICAgdmlydHVhbCBu
c3Jlc3VsdCBTdHViMjM1KCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIzNigp
OwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMzcoKTsKICAgICAgICAgICAgdmly
dHVhbCBuc3Jlc3VsdCBTdHViMjM4KCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1bHQgU3R1
YjIzOSgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyNDAoKTsKICAgICAgICAg
ICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMjQxKCk7CiAgICAgICAgICAgIHZpcnR1YWwgbnNyZXN1
bHQgU3R1YjI0MigpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyNDMoKTsKICAg
ICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMjQ0KCk7CiAgICAgICAgICAgIHZpcnR1YWwg
bnNyZXN1bHQgU3R1YjI0NSgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyNDYo
KTsKICAgICAgICAgICAgdmlydHVhbCBuc3Jlc3VsdCBTdHViMjQ3KCk7CiAgICAgICAgICAgIHZp
cnR1YWwgbnNyZXN1bHQgU3R1YjI0OCgpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFN0
dWIyNDkoKTsKCgogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFNlbnRpbmVsMCgpOwogICAg
ICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFNlbnRpbmVsMSgpOwogICAgICAgICAgICB2aXJ0dWFs
IG5zcmVzdWx0IFNlbnRpbmVsMigpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFNlbnRp
bmVsMygpOwogICAgICAgICAgICB2aXJ0dWFsIG5zcmVzdWx0IFNlbnRpbmVsNCgpOwojIDE3OCAi
Li4vLi4vZGlzdC9pbmNsdWRlL3hwdGNhbGwuaCIgMgoKCgoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0
IEdldEludGVyZmFjZUluZm8obnNJSW50ZXJmYWNlSW5mbyoqIGluZm8pID0gMDsKCgogICAgdmly
dHVhbCBuc3Jlc3VsdCBDYWxsTWV0aG9kKFBSVWludDE2IG1ldGhvZEluZGV4LAogICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IG5zWFBUTWV0aG9kSW5mbyogaW5mbywKICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc1hQVENNaW5pVmFyaWFudCogcGFyYW1zKSA9IDA7Cn07CgoKZXh0ZXJu
ICJDIiB7Cgpuc3Jlc3VsdApYUFRDX0ludm9rZUJ5SW5kZXgobnNJU3VwcG9ydHMqIHRoYXQsIFBS
VWludDMyIG1ldGhvZEluZGV4LAogICAgICAgICAgICAgICAgICAgUFJVaW50MzIgcGFyYW1Db3Vu
dCwgbnNYUFRDVmFyaWFudCogcGFyYW1zKTsKCgpleHRlcm4gdm9pZCB4cHRjX2R1bW15KCk7CmV4
dGVybiB2b2lkIHhwdGNfZHVtbXkyKCk7Cgp9CiMgMzYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1By
b3h5RXZlbnQuaCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS94cHRpbmZvLmgiIDEKIyAzNyAi
Li4vLi4vZGlzdC9pbmNsdWRlL25zUHJveHlFdmVudC5oIiAyCgpjbGFzcyBuc1Byb3h5T2JqZWN0
Q2FsbEluZm87CiMgNzYgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1Byb3h5RXZlbnQuaCIKY2xhc3Mg
bnNQcm94eU9iamVjdCA6IHB1YmxpYyBuc0lTdXBwb3J0cwp7CnB1YmxpYzoKCiAgICBwdWJsaWM6
IHZpcnR1YWwgbnNyZXN1bHQgUXVlcnlJbnRlcmZhY2UoY29uc3QgbnNJSUQmIGFJSUQsIHZvaWQq
KiBhSW5zdGFuY2VQdHIpOyB2aXJ0dWFsIG5zcmVmY250IEFkZFJlZih2b2lkKTsgdmlydHVhbCBu
c3JlZmNudCBSZWxlYXNlKHZvaWQpOyBwcm90ZWN0ZWQ6IG5zcmVmY250IG1SZWZDbnQ7IHZvaWQq
IF9tT3duaW5nVGhyZWFkOyBwdWJsaWM6CiAgICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgp
IHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0geyAweDAwMDAwMDAwLCAweDAwMDAsIDB4MDAwMCwg
ezB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDZ9IH07IHJldHVy
biBpaWQ7fQoKCiAgICBuc1Byb3h5T2JqZWN0KCk7CiAgICBuc1Byb3h5T2JqZWN0KG5zSUV2ZW50
UXVldWUgKmRlc3RRdWV1ZSwgUFJJbnQzMiBwcm94eVR5cGUsIG5zSVN1cHBvcnRzICpyZWFsT2Jq
ZWN0KTsKICAgIG5zUHJveHlPYmplY3QobnNJRXZlbnRRdWV1ZSAqZGVzdFF1ZXVlLCBQUkludDMy
IHByb3h5VHlwZSwgY29uc3QgbnNDSUQgJmFDbGFzcywgbnNJU3VwcG9ydHMgKmFEZWxlZ2F0ZSwg
Y29uc3QgbnNJSUQgJmFJSUQpOwoKICAgIHZpcnR1YWwgfm5zUHJveHlPYmplY3QoKTsKCiAgICBu
c3Jlc3VsdCBQb3N0KCBQUlVpbnQzMiBtZXRob2RJbmRleCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNYUFRNZXRob2RJbmZvICogaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNYUFRDTWluaVZhcmlhbnQgKiBwYXJhbXMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zSUludGVyZmFjZUluZm8gKiBpbnRlcmZhY2VJbmZvKTsKCiAgICBuc3Jlc3VsdCBQ
b3N0QW5kV2FpdChuc1Byb3h5T2JqZWN0Q2FsbEluZm8gKnByb3h5SW5mbyk7CiAgICBuc0lTdXBw
b3J0cyogR2V0UmVhbE9iamVjdCgpIGNvbnN0OwogICAgbnNJRXZlbnRRdWV1ZSogR2V0UXVldWUo
KSBjb25zdDsKICAgIFBSSW50MzIgR2V0UHJveHlUeXBlKCkgY29uc3QgeyByZXR1cm4gbVByb3h5
VHlwZTsgfQoKICAgIGZyaWVuZCBjbGFzcyBuc1Byb3h5RXZlbnRPYmplY3Q7CnByaXZhdGU6Cgog
ICAgUFJJbnQzMiBtUHJveHlUeXBlOwoKICAgIG5zQ09NUHRyPG5zSUV2ZW50UXVldWU+IG1EZXN0
UXVldWU7CgogICAgbnNDT01QdHI8bnNJU3VwcG9ydHM+IG1SZWFsT2JqZWN0OwoKICAgIG5zQ09N
UHRyPG5zSUV2ZW50UXVldWVTZXJ2aWNlPiBtRXZlbnRRU2VydmljZTsKCiAgICBuc3Jlc3VsdCBj
b252ZXJ0TWluaVZhcmlhbnRUb1ZhcmlhbnQobnNYUFRNZXRob2RJbmZvICogbWV0aG9kSW5mbywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1hQVENNaW5pVmFyaWFu
dCAqIHBhcmFtcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1hQ
VENWYXJpYW50ICoqZnVsbFBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQ4ICpwYXJhbUNvdW50KTsKCn07CgoKY2xhc3MgbnNQcm94eU9iamVjdENhbGxJ
bmZvCnsKcHVibGljOgoKICAgIG5zUHJveHlPYmplY3RDYWxsSW5mbyhuc1Byb3h5T2JqZWN0KiBv
d25lciwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc1hQVE1ldGhvZEluZm8gKm1ldGhvZElu
Zm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgbWV0aG9kSW5kZXgsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNYUFRDVmFyaWFudCogcGFyYW1ldGVyTGlzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBwYXJhbWV0ZXJDb3VudCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICBQTEV2ZW50ICpldmVudCk7CgogICAgdmlydHVhbCB+bnNQcm94eU9iamVj
dENhbGxJbmZvKCk7CgogICAgUFJVaW50MzIgR2V0TWV0aG9kSW5kZXgoKSBjb25zdCB7IHJldHVy
biBtTWV0aG9kSW5kZXg7IH0KICAgIG5zWFBUQ1ZhcmlhbnQqIEdldFBhcmFtZXRlckxpc3QoKSBj
b25zdCB7IHJldHVybiBtUGFyYW1ldGVyTGlzdDsgfQogICAgUFJVaW50MzIgR2V0UGFyYW1ldGVy
Q291bnQoKSBjb25zdCB7IHJldHVybiBtUGFyYW1ldGVyQ291bnQ7IH0KICAgIFBMRXZlbnQqIEdl
dFBMRXZlbnQoKSBjb25zdCB7IHJldHVybiBtRXZlbnQ7IH0KICAgIG5zcmVzdWx0IEdldFJlc3Vs
dCgpIGNvbnN0IHsgcmV0dXJuIG1SZXN1bHQ7IH0KICAgIG5zUHJveHlPYmplY3QqIEdldFByb3h5
T2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbU93bmVyOyB9CgogICAgUFJCb29sIEdldENvbXBsZXRl
ZCgpOwogICAgdm9pZCBTZXRDb21wbGV0ZWQoKTsKICAgIHZvaWQgUG9zdENvbXBsZXRlZCgpOwoK
ICAgIHZvaWQgU2V0UmVzdWx0KG5zcmVzdWx0IHJ2KSB7bVJlc3VsdCA9IHJ2OyB9CgogICAgbnNJ
RXZlbnRRdWV1ZSogR2V0Q2FsbGVyc1F1ZXVlKCk7CiAgICB2b2lkIFNldENhbGxlcnNRdWV1ZShu
c0lFdmVudFF1ZXVlKiBxdWV1ZSk7Cgpwcml2YXRlOgoKICAgIG5zcmVzdWx0IG1SZXN1bHQ7CiAg
ICBuc1hQVE1ldGhvZEluZm8gKm1NZXRob2RJbmZvOwogICAgUFJVaW50MzIgbU1ldGhvZEluZGV4
OwogICAgbnNYUFRDVmFyaWFudCAqbVBhcmFtZXRlckxpc3Q7CiAgICBQUlVpbnQzMiBtUGFyYW1l
dGVyQ291bnQ7CiAgICBQTEV2ZW50ICptRXZlbnQ7CiAgICBQUkludDMyIG1Db21wbGV0ZWQ7Cgog
ICAgbnNDT01QdHI8bnNJRXZlbnRRdWV1ZT4gbUNhbGxlcnNFdmVudFE7CgoKCiAgICBuc0NPTVB0
cjxuc1Byb3h5T2JqZWN0PiBtT3duZXI7CgogICAgdm9pZCBSZWZDb3VudEluSW50ZXJmYWNlUG9p
bnRlcnMoUFJCb29sIGFkZFJlZik7CiAgICB2b2lkIENvcHlTdHJpbmdzKFBSQm9vbCBjb3B5KTsK
Cn07CiMgMTAwICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNJUHJveHlPYmplY3RNYW5hZ2VyLmgiIDIK
IyAxMTUgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lQcm94eU9iamVjdE1hbmFnZXIuaCIKZXh0ZXJu
IG5zcmVzdWx0Ck5TX0dldFByb3h5Rm9yT2JqZWN0KG5zSUV2ZW50UXVldWUgKmRlc3RRdWV1ZSwK
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNJSUQmIGFJSUQsCiAgICAgICAgICAgICAgICAg
ICAgIG5zSVN1cHBvcnRzKiBhT2JqLAogICAgICAgICAgICAgICAgICAgICBQUkludDMyIHByb3h5
VHlwZSwKICAgICAgICAgICAgICAgICAgICAgdm9pZCoqIGFQcm94eU9iamVjdCk7CiMgNzEgIm5z
U29mdHdhcmVVcGRhdGUuY3BwIiAyCiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zUHJveGllZFNl
cnZpY2UuaCIgMQojIDI3ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNQcm94aWVkU2VydmljZS5oIgoj
IDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lTZXJ2aWNlTWFuYWdlci5oIiAxCiMgMjggIi4uLy4u
L2Rpc3QvaW5jbHVkZS9uc1Byb3hpZWRTZXJ2aWNlLmgiIDIKIyAxICIuLi8uLi9kaXN0L2luY2x1
ZGUvbnNJUHJveHlPYmplY3RNYW5hZ2VyLmgiIDEKIyAyOSAiLi4vLi4vZGlzdC9pbmNsdWRlL25z
UHJveGllZFNlcnZpY2UuaCIgMgojIDc4ICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNQcm94aWVkU2Vy
dmljZS5oIgpjbGFzcyBuc1Byb3hpZWRTZXJ2aWNlCnsKIHB1YmxpYzoKCiAgICBuc1Byb3hpZWRT
ZXJ2aWNlKGNvbnN0IG5zQ0lEICZhQ2xhc3MsIGNvbnN0IG5zSUlEICZhSUlELAogICAgICAgICAg
ICAgICAgICAgICBuc0lFdmVudFF1ZXVlKiBwSVByb3h5UXVldWUsIFBSQm9vbCBhbHdheXMsIG5z
cmVzdWx0KnJ2KQogICAgewogICAgICAgc3RhdGljIGNvbnN0IG5zQ0lEIGtQcm94eU9iamVjdE1h
bmFnZXJDSUQgPSB7IDB4ZWVhOTBkNDEsIDB4YjA1OSwgMHgxMWQyLCB7MHg5MSwgMHg1ZSwgMHhj
MSwgMHgyYiwgMHg2OSwgMHg2YywgMHg5MywgMHgzM319OwoKCiAgICAgICAqcnYgPSBuc1NlcnZp
Y2VNYW5hZ2VyOjpHZXRTZXJ2aWNlKGFDbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYUlJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2V0dGVyX0FkZFJlZnMobVNlcnZpY2UpKTsKICAgICAgIGlmICgoKCpydikgJiAweDgw
MDAwMDAwKSkgcmV0dXJuOwoKICAgICAgIG5zQ09NUHRyPG5zSVByb3h5T2JqZWN0TWFuYWdlcj4g
cElQcm94eU9iamVjdE1hbmFnZXIgPSBkb19HZXRTZXJ2aWNlKGtQcm94eU9iamVjdE1hbmFnZXJD
SUQsIHJ2KTs7CgogICAgICAgaWYgKCgoKnJ2KSAmIDB4ODAwMDAwMDApKSByZXR1cm47CgogICAg
ICAgUFJJbnQzMiBwcm94eVR5cGUgPSAweDAwMDE7CiAgICAgICBpZiAoYWx3YXlzKSBwcm94eVR5
cGUgfD0gMHgwMDA0OwogICAgICAgKnJ2ID0gcElQcm94eU9iamVjdE1hbmFnZXItPkdldFByb3h5
Rm9yT2JqZWN0KHBJUHJveHlRdWV1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhSUlELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1TZXJ2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHByb3h5VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXJfQWRkUmVmcyhtUHJveGllZFNlcnZpY2UpKTsK
ICAgIH0KCgogICAgfm5zUHJveGllZFNlcnZpY2UoKQogICAgewogICAgfQoKICAgbnNJU3VwcG9y
dHMqIG9wZXJhdG9yLT4oKSBjb25zdAogICB7CiAgICAgICBpZiAoIShtUHJveGllZFNlcnZpY2Ug
IT0gMCkpIG5zRGVidWc6OlByZUNvbmRpdGlvbigiWW91ciBjb2RlIHNob3VsZCB0ZXN0IHRoZSBl
cnJvciByZXN1bHQgZnJvbSB0aGUgY29uc3RydWN0b3IuIiwgIm1Qcm94aWVkU2VydmljZSAhPSAw
IiwgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc1Byb3hpZWRTZXJ2aWNlLmgiLCAxMTMpOwogICAgICAg
cmV0dXJuIG1Qcm94aWVkU2VydmljZTsKICAgfQoKICAgUFJCb29sIG9wZXJhdG9yPT0oY29uc3Qg
bnNJU3VwcG9ydHMqIG90aGVyKQogICB7CiAgICAgIHJldHVybiAoKG1Qcm94aWVkU2VydmljZSA9
PSBvdGhlcikgfHwgKG1TZXJ2aWNlID09IG90aGVyKSk7CiAgIH0KCiAgIG9wZXJhdG9yIG5zSVN1
cHBvcnRzKigpIGNvbnN0CiAgIHsKICAgICAgIHJldHVybiBtUHJveGllZFNlcnZpY2U7CiAgIH0K
CiBwcm90ZWN0ZWQ6CiAgIG5zQ09NUHRyPG5zSVN1cHBvcnRzPiBtUHJveGllZFNlcnZpY2U7CiAg
IG5zQ09NUHRyPG5zSVN1cHBvcnRzPiBtU2VydmljZTsKCiB9OwojIDcyICJuc1NvZnR3YXJlVXBk
YXRlLmNwcCIgMgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0lDaHJvbWVSZWdpc3RyeS5oIiAx
CiMgNzMgIm5zU29mdHdhcmVVcGRhdGUuY3BwIiAyCgojIDEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9u
c0NVUklMb2FkZXIuaCIgMQojIDEwICIuLi8uLi9kaXN0L2luY2x1ZGUvbnNDVVJJTG9hZGVyLmgi
CiMgMSAiLi4vLi4vZGlzdC9pbmNsdWRlL25zSVVSSUxvYWRlci5oIiAxCiMgMTcgIi4uLy4uL2Rp
c3QvaW5jbHVkZS9uc0lVUklMb2FkZXIuaCIKY2xhc3MgbnNJVVJJQ29udGVudExpc3RlbmVyOwoK
Y2xhc3MgbnNJVVJJOwoKY2xhc3MgbnNJTG9hZEdyb3VwOwoKY2xhc3MgbnNJRG9jdW1lbnRMb2Fk
ZXI7CgpjbGFzcyBuc0lQcm9ncmVzc0V2ZW50U2luazsKCmNsYXNzIG5zSUNoYW5uZWw7CgpjbGFz
cyBuc0lSZXF1ZXN0OwoKY2xhc3MgbnNJU3RyZWFtTGlzdGVuZXI7CgpjbGFzcyBuc0lJbnB1dFN0
cmVhbTsKCnR5cGVkZWYgUFJJbnQzMiBuc1VSSUxvYWRDb21tYW5kOwojIDQ1ICIuLi8uLi9kaXN0
L2luY2x1ZGUvbnNJVVJJTG9hZGVyLmgiCmNsYXNzIG5zSVVSSUxvYWRlciA6IHB1YmxpYyBuc0lT
dXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRp
YyBjb25zdCBuc0lJRCBpaWQgPSB7MHg0MGFlY2I1MywgMHg4YjY1LCAweDExZDMsIHsgMHg5OCwg
MHg5ZCwgMHgwMCwgMHgxMCwgMHg4MywgMHgwMSwgMHgwZSwgMHg5YiB9fTsgcmV0dXJuIGlpZDt9
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZ2lzdGVyQ29udGVudExpc3RlbmVyKG5zSVVSSUNvbnRl
bnRMaXN0ZW5lciAqYUNvbnRlbnRMaXN0ZW5lcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBV
blJlZ2lzdGVyQ29udGVudExpc3RlbmVyKG5zSVVSSUNvbnRlbnRMaXN0ZW5lciAqYUNvbnRlbnRM
aXN0ZW5lcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBPcGVuVVJJKG5zSUNoYW5uZWwgKmFD
aGFubmVsLCBuc1VSSUxvYWRDb21tYW5kIGFDb21tYW5kLCBuc0lTdXBwb3J0cyAqYVdpbmRvd0Nv
bnRleHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgT3BlblVSSVZpYShuc0lDaGFubmVsICph
Q2hhbm5lbCwgbnNVUklMb2FkQ29tbWFuZCBhQ29tbWFuZCwgbnNJU3VwcG9ydHMgKmFXaW5kb3dD
b250ZXh0LCBQUlVpbnQzMiBhZGFwdGVyQmluZGluZykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBTdG9wKG5zSVN1cHBvcnRzICphTG9hZENvb2tpZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBHZXRMb2FkR3JvdXBGb3JDb250ZXh0KG5zSVN1cHBvcnRzICphV2luZG93Q29udGV4dCwgbnNJ
TG9hZEdyb3VwICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREb2N1bWVu
dExvYWRlckZvckNvbnRleHQobnNJU3VwcG9ydHMgKmFXaW5kb3dDb250ZXh0LCBuc0lEb2N1bWVu
dExvYWRlciAqKl9yZXR2YWwpID0gMDsKCiAgZW51bSB7IHZpZXdOb3JtYWwgPSAwIH07CgogIGVu
dW0geyB2aWV3VXNlckNsaWNrID0gNyB9OwoKICBlbnVtIHsgdmlld05vcm1hbEJhY2tncm91bmQg
PSAwIH07CgoKICB2aXJ0dWFsIG5zcmVzdWx0IERpc3BhdGNoQ29udGVudChjb25zdCBjaGFyICph
Q29udGVudFR5cGUsIG5zVVJJTG9hZENvbW1hbmQgYUNvbW1hbmQsIG5zSVJlcXVlc3QgKmFSZXF1
ZXN0LCBuc0lTdXBwb3J0cyAqYUN0eHQsIG5zSVVSSUNvbnRlbnRMaXN0ZW5lciAqYUNvbnRlbnRM
aXN0ZW5lciwgbnNJU3VwcG9ydHMgKmFTcmNXaW5kb3dDb250ZXh0LCBjaGFyICoqYURlc2lyZWRD
b250ZW50VHlwZSwgbnNJVVJJQ29udGVudExpc3RlbmVyICoqYVRhcmdldExpc3RlbmVyLCBQUkJv
b2wgKmFib3J0RGlzcGF0Y2gpID0gMDsKCn07CiMgMTEgIi4uLy4uL2Rpc3QvaW5jbHVkZS9uc0NV
UklMb2FkZXIuaCIgMgojIDc1ICJuc1NvZnR3YXJlVXBkYXRlLmNwcCIgMgoKZXh0ZXJuICJDIiB2
b2lkIFJ1bkNocm9tZUluc3RhbGxPblRocmVhZCh2b2lkICpkYXRhKTsKCgoKCnN0YXRpYyBjb25z
dCBuc0NJRCBrQ29tcG9uZW50TWFuYWdlckNJRCA9IHsgMHg5MTc3NWQ2MCwgMHhkNWRjLCAweDEx
ZDIsIHsweDkyLCAweGZiLCAweDAwLCAweGUwLCAweDk4LCAweDA1LCAweDU3LCAweDBmfSB9OwoK
c3RhdGljIGNvbnN0IG5zQ0lEIGtDU2NyaXB0TmFtZVNldFJlZ2lzdHJ5Q0lEID0geyAweDQ1ZjI3
ZDEwLCAweDk4N2IsIDB4MTFkMiwgezB4YmQsIDB4NDAsIDB4MDAsIDB4MTAsIDB4NWEsIDB4YTQs
IDB4NWUsIDB4ODl9IH07CnN0YXRpYyBjb25zdCBuc0NJRCBrSW5zdGFsbFRyaWdnZXJfQ0lEID0g
eyAweDE4YzJmOThkLCAweGIwOWYsIDB4MTFkMiwgezB4YmMsIDB4ZGUsIDB4MDAsIDB4ODAsIDB4
NWYsIDB4MGUsIDB4MTMsIDB4NTN9IH07CgpzdGF0aWMgY29uc3QgbnNDSUQga0luc3RhbGxWZXJz
aW9uX0NJRCA9IHsgMHgxOGMyZjk4ZiwgMHhiMDlmLCAweDExZDIsIHsweGJjLCAweGRlLCAweDAw
LCAweDgwLCAweDVmLCAweDBlLCAweDEzLCAweDUzfSB9OwoKc3RhdGljIGNvbnN0IG5zQ0lEIGtD
aHJvbWVSZWdpc3RyeUNJRCA9IHsgMHhkOGM3ZDhhMiwgMHhlODRjLCAweDExZDIsIHsgMHhiZiwg
MHg4NywgMHgwLCAweDEwLCAweDVhLCAweDFiLCAweDYsIDB4MjcgfSB9OwpzdGF0aWMgY29uc3Qg
bnNDSUQga25zUmVnaXN0cnlDSUQgPSB7IDB4YmU3NjFmMDAsIDB4YTNiMCwgMHgxMWQyLCB7MHg5
OSwgMHg2YywgMHgwMCwgMHg4MCwgMHhjNywgMHhjYiwgMHgxMCwgMHg4MX0gfTsKCnN0YXRpYyBj
b25zdCBuc0NJRCBrSVByb2Nlc3NDSUQgPSB7MHg3YjRlZWIyMCwgMHhkNzgxLCAweDExZDQsIHsw
eDhBLCAweDgzLCAweDAwLCAweDEwLCAweGE0LCAweGUwLCAweGM5LCAweGNhfX07Cgpuc1NvZnR3
YXJlVXBkYXRlKiBuc1NvZnR3YXJlVXBkYXRlOjptSW5zdGFuY2UgPSAwOwpuc0NPTVB0cjxuc0lG
aWxlPiBuc1NvZnR3YXJlVXBkYXRlOjptUHJvZ3JhbURpciA9IDA7CmNoYXIqIG5zU29mdHdhcmVV
cGRhdGU6Om1Mb2dOYW1lID0gMDsKUFJCb29sIG5zU29mdHdhcmVVcGRhdGU6Om1OZWVkQ2xlYW51
cCA9IDA7CgoKbnNTb2Z0d2FyZVVwZGF0ZSAqCm5zU29mdHdhcmVVcGRhdGU6OkdldEluc3RhbmNl
KCkKewogICAgaWYgKG1JbnN0YW5jZSA9PSAwKQogICAgICAgIG1JbnN0YW5jZSA9IG5ldyBuc1Nv
ZnR3YXJlVXBkYXRlKCk7CgogICAgKCgwICE9IChtSW5zdGFuY2UpKSA/IG5zX2lmX2FkZHJlZiht
SW5zdGFuY2UpIDogMCk7CiAgICByZXR1cm4gbUluc3RhbmNlOwp9CgoKCm5zU29mdHdhcmVVcGRh
dGU6Om5zU29mdHdhcmVVcGRhdGUoKQo6IG1JbnN0YWxsaW5nKDApLAogIG1NYXN0ZXJMaXN0ZW5l
cigwKSwKICBtUmVnKDApCnsKICAgIChtUmVmQ250ID0gMCwgKF9tT3duaW5nVGhyZWFkID0gTlNf
Q3VycmVudFRocmVhZCgpKSk7CgogICAgbUxvY2sgPSBQUl9OZXdMb2NrKCk7CgoKCgoKICAgIE5S
X1N0YXJ0dXBSZWdpc3RyeSgpOwoKCiAgICBuc3Jlc3VsdCBydjsKICAgIG5zQ09NUHRyPG5zSVBy
b3BlcnRpZXM+IGRpcmVjdG9yeVNlcnZpY2UgPSBkb19HZXRTZXJ2aWNlKCJAbW96aWxsYS5vcmcv
ZmlsZS9kaXJlY3Rvcnlfc2VydmljZTsxIiwgJnJ2KTs7CgogICAgaWYoIWRpcmVjdG9yeVNlcnZp
Y2UpIHJldHVybjsKCiAgICBuc0NPTVB0cjxuc0lMb2NhbEZpbGU+IGRpcjsKICAgIGRpcmVjdG9y
eVNlcnZpY2UtPkdldCgiQ3VyUHJvY0QiLCBuc0NPTVR5cGVJbmZvPG5zSUZpbGU+OjpHZXRJSUQo
KSwgZ2V0dGVyX0FkZFJlZnMoZGlyKSk7CiAgICBpZiAoZGlyKQogICAgewogICAgICAgIGNoYXIq
IG5hdGl2ZVBhdGg7CiAgICAgICAgZGlyLT5HZXRQYXRoKCZuYXRpdmVQYXRoKTsKCiAgICAgICAg
VlJfU2V0UmVnRGlyZWN0b3J5KCBuYXRpdmVQYXRoICk7CiAgICAgICAgaWYgKG5hdGl2ZVBhdGgp
CiAgICAgICAgICAgIG5zTWVtb3J5OjpGcmVlKG5hdGl2ZVBhdGgpOwoKICAgIH0KCgoKICAgIG5z
Q09NUHRyPG5zSU9ic2VydmVyU2VydmljZT4gb2JzZXJ2ZXJTZXJ2aWNlID0gZG9fR2V0U2Vydmlj
ZSgiQG1vemlsbGEub3JnL29ic2VydmVyLXNlcnZpY2U7MSIsICZydik7OwoKCiAgICBpZiAoKCEo
KHJ2KSAmIDB4ODAwMDAwMDApKSkKICAgICAgICBvYnNlcnZlclNlcnZpY2UtPkFkZE9ic2VydmVy
KHRoaXMsIHN0YXRpY19jYXN0PCBjb25zdCBuc0FGbGF0U3RyaW5nJiA+KE5TX0NvbnZlcnRBU0NJ
SXRvVUNTMigieHBjb20tc2h1dGRvd24iLCBQUlVpbnQzMihzaXplb2YoInhwY29tLXNodXRkb3du
IiktMSkpKS5nZXQoKSk7Cn0KCgpuc1NvZnR3YXJlVXBkYXRlOjp+bnNTb2Z0d2FyZVVwZGF0ZSgp
CnsKICAgIFBSX0xvY2sobUxvY2spOwoKICAgIG5zSW5zdGFsbEluZm8qIGVsZW1lbnQ7CiAgICBm
b3IgKFBSSW50MzIgaT0wOyBpIDwgbUphckluc3RhbGxRdWV1ZS5Db3VudCgpOyBpKyspCiAgICB7
CiAgICAgICAgZWxlbWVudCA9IChuc0luc3RhbGxJbmZvKiltSmFySW5zdGFsbFF1ZXVlLkVsZW1l
bnRBdChpKTsKCiAgICAgICAgZGVsZXRlIGVsZW1lbnQ7CiAgICB9CgogICAgbUphckluc3RhbGxR
dWV1ZS5DbGVhcigpOwoKICAgIFBSX1VubG9jayhtTG9jayk7CiAgICBQUl9EZXN0cm95TG9jayht
TG9jayk7CgogICAgTlJfU2h1dGRvd25SZWdpc3RyeSgpOwoKICAgIGRvIHsgaWYgKG1NYXN0ZXJM
aXN0ZW5lcikgeyAobU1hc3Rlckxpc3RlbmVyKS0+UmVsZWFzZSgpOyAobU1hc3Rlckxpc3RlbmVy
KSA9IDA7IH0gfSB3aGlsZSAoMCk7CiAgICBtSW5zdGFuY2UgPSAwOwoKICAgIGlmIChtTG9nTmFt
ZSkgeyBQUl9GcmVlKG1Mb2dOYW1lKTsgKG1Mb2dOYW1lKSA9IF9fbnVsbDsgfTsKfQoKCgoKCgpu
c3JlZmNudCBuc1NvZnR3YXJlVXBkYXRlOjpBZGRSZWYodm9pZCkgeyBpZiAoIShQUkludDMyKG1S
ZWZDbnQpID49IDApKSBuc0RlYnVnOjpQcmVDb25kaXRpb24oImlsbGVnYWwgcmVmY250IiwgIlBS
SW50MzIobVJlZkNudCkgPj0gMCIsICJuc1NvZnR3YXJlVXBkYXRlLmNwcCIsIDE4NSk7IG5zcmVm
Y250IGNvdW50OyBjb3VudCA9IFBSX0F0b21pY0luY3JlbWVudCgoUFJJbnQzMiopJm1SZWZDbnQp
OyBuc1RyYWNlUmVmY250OjpMb2dBZGRSZWYoKHRoaXMpLCAoY291bnQpLCAoIm5zU29mdHdhcmVV
cGRhdGUiKSwgKFBSVWludDMyKSAoc2l6ZW9mKCp0aGlzKSkpOyByZXR1cm4gY291bnQ7IH0gbnNy
ZWZjbnQgbnNTb2Z0d2FyZVVwZGF0ZTo6UmVsZWFzZSh2b2lkKSB7IG5zcmVmY250IGNvdW50OyBp
ZiAoISgwICE9IG1SZWZDbnQpKSBuc0RlYnVnOjpQcmVDb25kaXRpb24oImR1cCByZWxlYXNlIiwg
IjAgIT0gbVJlZkNudCIsICJuc1NvZnR3YXJlVXBkYXRlLmNwcCIsIDE4NSk7IGNvdW50ID0gUFJf
QXRvbWljRGVjcmVtZW50KChQUkludDMyICopJm1SZWZDbnQpOyBuc1RyYWNlUmVmY250OjpMb2dS
ZWxlYXNlKCh0aGlzKSwgKGNvdW50KSwgKCJuc1NvZnR3YXJlVXBkYXRlIikpOyBpZiAoMCA9PSBj
b3VudCkgeyBtUmVmQ250ID0gMTsgZG8geyA7IGRlbGV0ZSAodGhpcyk7IH0gd2hpbGUgKDApOyBy
ZXR1cm4gMDsgfSByZXR1cm4gY291bnQ7IH0gbnNyZXN1bHQgbnNTb2Z0d2FyZVVwZGF0ZTo6UXVl
cnlJbnRlcmZhY2UoY29uc3QgbnNJSUQmIGFJSUQsIHZvaWQqKiBhSW5zdGFuY2VQdHIpIHsgaWYg
KCEoYUluc3RhbmNlUHRyKSkgbnNEZWJ1Zzo6QXNzZXJ0aW9uKCJRdWVyeUludGVyZmFjZSByZXF1
aXJlcyBhIG5vbi1OVUxMIGRlc3RpbmF0aW9uISIsICJhSW5zdGFuY2VQdHIiLCAibnNTb2Z0d2Fy
ZVVwZGF0ZS5jcHAiLCAxODUpOyBpZiAoICFhSW5zdGFuY2VQdHIgKSByZXR1cm4gKChuc3Jlc3Vs
dCkgMHg4MDAwNDAwM0wpOyBuc0lTdXBwb3J0cyogZm91bmRJbnRlcmZhY2U7IGlmICggYUlJRC5F
cXVhbHMobnNDT01UeXBlSW5mbzxuc0lTb2Z0d2FyZVVwZGF0ZT46OkdldElJRCgpKSApIGZvdW5k
SW50ZXJmYWNlID0gc3RhdGljX2Nhc3Q8IG5zSVNvZnR3YXJlVXBkYXRlKiA+KHRoaXMpOyBlbHNl
IGlmICggYUlJRC5FcXVhbHMobnNDT01UeXBlSW5mbzxuc1BJWFBJU3R1Ykhvb2s+OjpHZXRJSUQo
KSkgKSBmb3VuZEludGVyZmFjZSA9IHN0YXRpY19jYXN0PCBuc1BJWFBJU3R1Ykhvb2sqID4odGhp
cyk7IGVsc2UgaWYgKCBhSUlELkVxdWFscyhuc0NPTVR5cGVJbmZvPG5zSU9ic2VydmVyPjo6R2V0
SUlEKCkpICkgZm91bmRJbnRlcmZhY2UgPSBzdGF0aWNfY2FzdDwgbnNJT2JzZXJ2ZXIqID4odGhp
cyk7IGVsc2UgaWYgKCBhSUlELkVxdWFscyhuc0NPTVR5cGVJbmZvPG5zSVN1cHBvcnRzPjo6R2V0
SUlEKCkpICkgZm91bmRJbnRlcmZhY2UgPSBzdGF0aWNfY2FzdDwgbnNJU3VwcG9ydHMqID4oc3Rh
dGljX2Nhc3Q8IG5zSVNvZnR3YXJlVXBkYXRlKiA+KHRoaXMpKTsgZWxzZSBmb3VuZEludGVyZmFj
ZSA9IDA7IG5zcmVzdWx0IHN0YXR1czsgaWYgKCAhZm91bmRJbnRlcmZhY2UgKSB7IHN0YXRpYyBj
b25zdCBuc0lJRCBrSXNUaHJlYWRzYWZlSUlEID0geyAweDg4MjEwODkwLCAweDQ3YTYsIDB4MTFk
MiwgezB4YmUsIDB4YzMsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4NjYsIDB4ZGN9IH07IHN0
YXR1cyA9IGFJSUQuRXF1YWxzKGtJc1RocmVhZHNhZmVJSUQpID8gMCA6ICgobnNyZXN1bHQpIDB4
ODAwMDQwMDJMKTsgfSBlbHNlIHsgKGZvdW5kSW50ZXJmYWNlKS0+QWRkUmVmKCk7IHN0YXR1cyA9
IDA7IH0gKmFJbnN0YW5jZVB0ciA9IGZvdW5kSW50ZXJmYWNlOyByZXR1cm4gc3RhdHVzOyB9OwoK
CgoKdm9pZApuc1NvZnR3YXJlVXBkYXRlOjpTaHV0ZG93bigpCnsKICAgIGlmIChtTmVlZENsZWFu
dXApCiAgICB7CgogICAgICAgIG5zcmVzdWx0IHJ2OwogICAgICAgIG5zQ09NUHRyPG5zSUxvY2Fs
RmlsZT4gcGF0aFRvQ2xlYW51cFV0aWxpdHk7CgogICAgICAgIG5zQ09NUHRyPG5zSVByb3BlcnRp
ZXM+IGRpcmVjdG9yeVNlcnZpY2UgPSBkb19HZXRTZXJ2aWNlKCJAbW96aWxsYS5vcmcvZmlsZS9k
aXJlY3Rvcnlfc2VydmljZTsxIiwgJnJ2KTs7CiAgICAgICAgZGlyZWN0b3J5U2VydmljZS0+R2V0
KCJDdXJQcm9jRCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zQ09NVHlwZUluZm88
bnNJRmlsZT46OkdldElJRCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXJf
QWRkUmVmcyhwYXRoVG9DbGVhbnVwVXRpbGl0eSkpOwoKCgoKICAgICAgICBwYXRoVG9DbGVhbnVw
VXRpbGl0eS0+QXBwZW5kKCJ4cGljbGVhbnVwIik7CiAgICAgICAgbnNDT01QdHI8bnNJUHJvY2Vz
cz4gY2xlYW51cFByb2Nlc3MgPSBkb19DcmVhdGVJbnN0YW5jZShrSVByb2Nlc3NDSUQpOwogICAg
ICAgIHJ2ID0gY2xlYW51cFByb2Nlc3MtPkluaXQocGF0aFRvQ2xlYW51cFV0aWxpdHkpOwogICAg
ICAgIGlmICgoISgocnYpICYgMHg4MDAwMDAwMCkpKQogICAgICAgIHsKCiAgICAgICAgICAgIHJ2
ID0gY2xlYW51cFByb2Nlc3MtPlJ1bigwLCAwLCAwLCAwKTsKICAgICAgICB9CiAgICB9Cn0KCm5z
cmVzdWx0IG5zU29mdHdhcmVVcGRhdGU6Ok9ic2VydmUobnNJU3VwcG9ydHMgKmFTdWJqZWN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUFJVbmljaGFyICph
VG9waWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQUlVu
aWNoYXIgKmFEYXRhKQp7CiAgICBuc0RlcGVuZGVudFN0cmluZyB0b3BpY1N0cmluZyhhVG9waWMp
OwogICAgaWYgKHRvcGljU3RyaW5nLkVxdWFscyhzdGF0aWNfY2FzdDwgY29uc3QgbnNBRmxhdFN0
cmluZyYgPihOU19Db252ZXJ0QVNDSUl0b1VDUzIoInhwY29tLXNodXRkb3duIiwgUFJVaW50MzIo
c2l6ZW9mKCJ4cGNvbS1zaHV0ZG93biIpLTEpKSkpKQogICAgICBTaHV0ZG93bigpOwoKICAgIHJl
dHVybiAwOwp9Cgpuc3Jlc3VsdApuc1NvZnR3YXJlVXBkYXRlOjpSZWdpc3Rlckxpc3RlbmVyKG5z
SVhQSUxpc3RlbmVyICphTGlzdGVuZXIpCnsKCgoKICAgIGlmICghbU1hc3Rlckxpc3RlbmVyKQog
ICAgICAgIENyZWF0ZU1hc3Rlckxpc3RlbmVyKCk7CgogICAgaWYgKCFtTWFzdGVyTGlzdGVuZXIp
CiAgICAgICAgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMDQwMDVMKTsKCiAgICBtTWFzdGVyTGlz
dGVuZXItPlJlZ2lzdGVyTGlzdGVuZXIoYUxpc3RlbmVyKTsKICAgIHJldHVybiAwOwp9Cgpuc3Jl
c3VsdApuc1NvZnR3YXJlVXBkYXRlOjpHZXRNYXN0ZXJMaXN0ZW5lcihuc0lYUElMaXN0ZW5lciAq
KmFMaXN0ZW5lcikKewogICAgaWYgKCEoYUxpc3RlbmVyKSkgbnNEZWJ1Zzo6QXNzZXJ0aW9uKCJn
ZXR0ZXIgaGFzIGludmFsaWQgcmV0dXJuIHBvaW50ZXIiLCAiYUxpc3RlbmVyIiwgIm5zU29mdHdh
cmVVcGRhdGUuY3BwIiwgMjQ4KTsKICAgIGlmICghYUxpc3RlbmVyKQogICAgICAgIHJldHVybiAo
KG5zcmVzdWx0KSAweDgwMDA0MDAzTCk7CgogICAgaWYgKCFtTWFzdGVyTGlzdGVuZXIpCiAgICAg
ICAgQ3JlYXRlTWFzdGVyTGlzdGVuZXIoKTsKCiAgICBpZiAoIW1NYXN0ZXJMaXN0ZW5lcikKICAg
ICAgICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAwNDAwNUwpOwoKICAgIChtTWFzdGVyTGlzdGVu
ZXIpLT5BZGRSZWYoKTsKICAgICphTGlzdGVuZXIgPSBtTWFzdGVyTGlzdGVuZXI7CiAgICByZXR1
cm4gMDsKfQoKCm5zcmVzdWx0Cm5zU29mdHdhcmVVcGRhdGU6OlNldEFjdGl2ZUxpc3RlbmVyKG5z
SVhQSUxpc3RlbmVyICphTGlzdGVuZXIpCnsKICAgIGlmICghbU1hc3Rlckxpc3RlbmVyKQogICAg
ICAgIENyZWF0ZU1hc3Rlckxpc3RlbmVyKCk7CgogICAgaWYgKCFtTWFzdGVyTGlzdGVuZXIpCiAg
ICAgICAgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwMDQwMDVMKTsKCiAgICBtTWFzdGVyTGlzdGVu
ZXItPlNldEFjdGl2ZUxpc3RlbmVyIChhTGlzdGVuZXIpOwogICAgcmV0dXJuIDA7Cn0KCnZvaWQg
bnNTb2Z0d2FyZVVwZGF0ZTo6Q3JlYXRlTWFzdGVyTGlzdGVuZXIoKQp7CiAgICBtTWFzdGVyTGlz
dGVuZXIgPSBuZXcgbnNUb3BQcm9ncmVzc0xpc3RlbmVyOwogICAgaWYgKG1NYXN0ZXJMaXN0ZW5l
cikKICAgIHsKICAgICAgICAobU1hc3Rlckxpc3RlbmVyKS0+QWRkUmVmKCk7CgogICAgICAgIG5z
TG9nZ2luZ1Byb2dyZXNzTGlzdGVuZXIgKmxvZ2dlciA9IG5ldyBuc0xvZ2dpbmdQcm9ncmVzc0xp
c3RlbmVyKCk7CiAgICAgICAgbU1hc3Rlckxpc3RlbmVyLT5SZWdpc3Rlckxpc3RlbmVyKGxvZ2dl
cik7CiAgICB9Cn0KCm5zcmVzdWx0Cm5zU29mdHdhcmVVcGRhdGU6Okluc3RhbGxKYXIoIG5zSUZp
bGUqIGFMb2NhbEZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQUlVu
aWNoYXIqIGFVUkwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQUlVuaWNo
YXIqIGFBcmd1bWVudHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lET01XaW5k
b3dJbnRlcm5hbCogYVBhcmVudFdpbmRvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFBSVWludDMyIGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJWFBJTGlz
dGVuZXIqIGFMaXN0ZW5lcikKewogICAgaWYgKCAhYUxvY2FsRmlsZSApCiAgICAgICAgcmV0dXJu
ICgobnNyZXN1bHQpIDB4ODAwMDQwMDNMKTsKCgogICAgbnNyZXN1bHQgcnY7CiAgICBuc0lDaHJv
bWVSZWdpc3RyeSogY2hyb21lUmVnID0gMDsKICAgIG5zUHJveGllZFNlcnZpY2UgX3NlcnZ0bXBS
ZWcoa0Nocm9tZVJlZ2lzdHJ5Q0lELCBuc0NPTVR5cGVJbmZvPG5zSUNocm9tZVJlZ2lzdHJ5Pjo6
R2V0SUlEKCksICgobnNJRXZlbnRRdWV1ZSopMSksIDEsICZydik7IG5zSUNocm9tZVJlZ2lzdHJ5
KiB0bXBSZWcgPSAobnNJQ2hyb21lUmVnaXN0cnkqKShuc0lTdXBwb3J0cyopX3NlcnZ0bXBSZWc7
OwoKCgogICAgaWYgKCghKChydikgJiAweDgwMDAwMDAwKSkpCiAgICAgICAgY2hyb21lUmVnID0g
dG1wUmVnOwoKCiAgICBuc0luc3RhbGxJbmZvICppbmZvID0gbmV3IG5zSW5zdGFsbEluZm8oIDAs
IGFMb2NhbEZpbGUsIGFVUkwsIGFBcmd1bWVudHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZsYWdzLCBhTGlzdGVuZXIsIGFQYXJlbnRXaW5kb3csIGNocm9t
ZVJlZyApOwoKICAgIGlmICghaW5mbykKICAgICAgICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDA3
MDAwZUwpOwoKICAgIFBSX0xvY2sobUxvY2spOwogICAgbUphckluc3RhbGxRdWV1ZS5BcHBlbmRF
bGVtZW50KCBpbmZvICk7CiAgICBQUl9VbmxvY2sobUxvY2spOwogICAgUnVuTmV4dEluc3RhbGwo
KTsKCiAgICByZXR1cm4gMDsKfQoKCm5zcmVzdWx0Cm5zU29mdHdhcmVVcGRhdGU6Okluc3RhbGxD
aHJvbWUoIFBSVWludDMyIGFUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0lGaWxlKiBhRmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUFJV
bmljaGFyKiBVUkwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBSVW5p
Y2hhciogYU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhU2Vs
ZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lYUElMaXN0ZW5lciogYUxp
c3RlbmVyKQp7CiAgICBuc3Jlc3VsdCBydjsKICAgIG5zUHJveGllZFNlcnZpY2UgX3NlcnZjaHJv
bWVSZWcoa0Nocm9tZVJlZ2lzdHJ5Q0lELCBuc0NPTVR5cGVJbmZvPG5zSUNocm9tZVJlZ2lzdHJ5
Pjo6R2V0SUlEKCksICgobnNJRXZlbnRRdWV1ZSopMSksIDEsICZydik7IG5zSUNocm9tZVJlZ2lz
dHJ5KiBjaHJvbWVSZWcgPSAobnNJQ2hyb21lUmVnaXN0cnkqKShuc0lTdXBwb3J0cyopX3NlcnZj
aHJvbWVSZWc7OwoKCgogICAgaWYgKCgocnYpICYgMHg4MDAwMDAwMCkpCiAgICAgICAgcmV0dXJu
IHJ2OwoKICAgIG5zSW5zdGFsbEluZm8gKmluZm8gPSBuZXcgbnNJbnN0YWxsSW5mbyggYVR5cGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFGaWxlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkwsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFOYW1lLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUFJVaW50MzIpYVNlbGVjdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUxpc3RlbmVyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaHJvbWVSZWcpOwogICAgaWYgKCFpbmZvKQogICAg
ICAgIHJldHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7CgogICAgUFJfQ3JlYXRlVGhyZWFk
KFBSX1VTRVJfVEhSRUFELAogICAgICAgICAgICAgICAgICAgIFJ1bkNocm9tZUluc3RhbGxPblRo
cmVhZCwKICAgICAgICAgICAgICAgICAgICAodm9pZCopaW5mbywKICAgICAgICAgICAgICAgICAg
ICBQUl9QUklPUklUWV9OT1JNQUwsCiAgICAgICAgICAgICAgICAgICAgUFJfR0xPQkFMX1RIUkVB
RCwKICAgICAgICAgICAgICAgICAgICBQUl9VTkpPSU5BQkxFX1RIUkVBRCwKICAgICAgICAgICAg
ICAgICAgICAwKTsKCiAgICByZXR1cm4gMDsKfQoKCm5zcmVzdWx0Cm5zU29mdHdhcmVVcGRhdGU6
Okluc3RhbGxKYXJDYWxsQmFjaygpCnsKICAgIFBSX0xvY2sobUxvY2spOwoKICAgIG5zSW5zdGFs
bEluZm8gKm5leHRJbnN0YWxsID0gKG5zSW5zdGFsbEluZm8qKW1KYXJJbnN0YWxsUXVldWUuRWxl
bWVudEF0KDApOwogICAgaWYgKG5leHRJbnN0YWxsICE9IDApCiAgICAgICAgZGVsZXRlIG5leHRJ
bnN0YWxsOwoKICAgIG1KYXJJbnN0YWxsUXVldWUuUmVtb3ZlRWxlbWVudEF0KDApOwogICAgbUlu
c3RhbGxpbmcgPSAwOwoKICAgIFBSX1VubG9jayhtTG9jayk7CgogICAgcmV0dXJuIFJ1bk5leHRJ
bnN0YWxsKCk7Cn0KCgpuc3Jlc3VsdApuc1NvZnR3YXJlVXBkYXRlOjpTdGFydHVwVGFza3MoIFBS
Qm9vbCAqbmVlZEF1dG9yZWcgKQp7CiAgICBQUkJvb2wgYXV0b1JlZyA9IDA7CiAgICBSS0VZIHhw
aVJvb3Q7CiAgICBSRUdFUlIgZXJyOwoKICAgICpuZWVkQXV0b3JlZyA9IDE7CgoKCgoKCiAgICBp
ZiAoICgwKSA9PSBOUl9SZWdPcGVuKCIiLCAmbVJlZykgKQogICAgewoKICAgICAgICBQZXJmb3Jt
U2NoZWR1bGVkVGFza3MobVJlZyk7CgoKICAgICAgICBlcnIgPSBOUl9SZWdHZXRLZXkoIG1SZWcs
ICgweDAyKSwgInNvZnR3YXJlL21vemlsbGEveHBpbnN0YWxsIiwgJnhwaVJvb3QpOwogICAgICAg
IGlmICggZXJyID09ICgwKSApCiAgICAgICAgewogICAgICAgICAgICBjaGFyIGJ1Zls4XTsKICAg
ICAgICAgICAgZXJyID0gTlJfUmVnR2V0RW50cnlTdHJpbmcoIG1SZWcsIHhwaVJvb3QsICJBdXRv
cmVnIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Ziwgc2l6ZW9m
KGJ1ZikgKTsKCiAgICAgICAgICAgIGlmICggZXJyID09ICgwKSAmJiAhc3RyY21wKCBidWYsICJ5
ZXMiICkgKQogICAgICAgICAgICAgICAgYXV0b1JlZyA9IDE7CiAgICAgICAgfQogICAgfQoKCiAg
ICBuc3Jlc3VsdCBydjsKICAgIFBSSW50MzIgYnVpbGRJRCA9IC0xOwogICAgbnNSZWdpc3RyeUtl
eSBpZEtleSA9IDA7CiAgICBuc0NPTVB0cjxuc0lSZWdpc3RyeT4gcmVnID0gZG9fR2V0U2Vydmlj
ZShrbnNSZWdpc3RyeUNJRCwmcnYpOwogICAgaWYgKCghKChydikgJiAweDgwMDAwMDAwKSkpCiAg
ICB7CiAgICAgICAgcnYgPSByZWctPk9wZW5XZWxsS25vd25SZWdpc3RyeShuc0lSZWdpc3RyeTo6
QXBwbGljYXRpb25Db21wb25lbnRSZWdpc3RyeSk7CiAgICAgICAgaWYgKCghKChydikgJiAweDgw
MDAwMDAwKSkpCiAgICAgICAgewogICAgICAgICAgICBydiA9IHJlZy0+R2V0U3VidHJlZShuc0lS
ZWdpc3RyeTo6Q29tbW9uLCJzb2Z0d2FyZS9tb3ppbGxhL1hQQ09NIiwmaWRLZXkpOwogICAgICAg
ICAgICBpZiAoKCEoKHJ2KSAmIDB4ODAwMDAwMDApKSkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgcnYgPSByZWctPkdldEludCggaWRLZXksICJBdXRvcmVnIiwgJmJ1aWxkSUQgKTsKICAg
ICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCgoKICAgIGlmICggYXV0b1JlZyB8fCAoKHJ2KSAm
IDB4ODAwMDAwMDApIHx8IGJ1aWxkSUQgIT0gMDAwMDAwMDAwMCApCiAgICB7CiAgICAgICAgcnYg
PSBuc0NvbXBvbmVudE1hbmFnZXI6OkF1dG9SZWdpc3Rlcihuc0lDb21wb25lbnRNYW5hZ2VyOjpO
U19TdGFydHVwLDApOwoKICAgICAgICBpZiAoKCEoKHJ2KSAmIDB4ODAwMDAwMDApKSkKICAgICAg
ICB7CiAgICAgICAgICAgICpuZWVkQXV0b3JlZyA9IDA7CgoKICAgICAgICAgICAgaWYgKCBhdXRv
UmVnICkKICAgICAgICAgICAgICAgIE5SX1JlZ1NldEVudHJ5U3RyaW5nKCBtUmVnLCB4cGlSb290
LCAiQXV0b3JlZyIsICJubyIgKTsKCiAgICAgICAgICAgIGlmICggYnVpbGRJRCAhPSAwMDAwMDAw
MDAwICYmIGlkS2V5ICE9IDAgKQogICAgICAgICAgICAgICAgcmVnLT5TZXRJbnQoIGlkS2V5LCAi
QXV0b3JlZyIsIDAwMDAwMDAwMDAgKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlCiAgICB7Cgog
ICAgICAgICpuZWVkQXV0b3JlZyA9IDA7CgoKICAgICAgICAqbmVlZEF1dG9yZWcgPSAxOwoKICAg
IH0KCiAgICByZXR1cm4gcnY7Cn0KCgpuc3Jlc3VsdApuc1NvZnR3YXJlVXBkYXRlOjpSdW5OZXh0
SW5zdGFsbCgpCnsKICAgIG5zcmVzdWx0IHJ2ID0gMDsKICAgIG5zSW5zdGFsbEluZm8qIGluZm8g
PSAwOwoKICAgIFBSX0xvY2sobUxvY2spOwoKCiAgICBpZiAoIW1NYXN0ZXJMaXN0ZW5lcikKICAg
ICAgICBDcmVhdGVNYXN0ZXJMaXN0ZW5lcigpOwoKICAgIGlmICghbUluc3RhbGxpbmcpCiAgICB7
CiAgICAgICAgaWYgKCBtSmFySW5zdGFsbFF1ZXVlLkNvdW50KCkgPiAwICkKICAgICAgICB7CiAg
ICAgICAgICAgIGluZm8gPSAobnNJbnN0YWxsSW5mbyopbUphckluc3RhbGxRdWV1ZS5FbGVtZW50
QXQoMCk7CgogICAgICAgICAgICBpZiAoIGluZm8gKQogICAgICAgICAgICAgICAgbUluc3RhbGxp
bmcgPSAxOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICBu
c0RlYnVnOjpFcnJvcigibGVha3MgcmVtYWluaW5nIG5zSW5zdGFsbEluZm9zLCBwbGVhc2UgZmls
ZSBidWchIiwgIm5zU29mdHdhcmVVcGRhdGUuY3BwIiwgNDg4KTsKICAgICAgICAgICAgICAgIHJ2
ID0gKChuc3Jlc3VsdCkgMHg4MDAwNDAwM0wpOwogICAgICAgICAgICAgICAgVlJfQ2xvc2UoKTsK
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewoKICAgICAgICAg
ICAgVlJfQ2xvc2UoKTsKICAgICAgICB9CiAgICB9CiAgICBQUl9VbmxvY2sobUxvY2spOwoKCiAg
ICBpZiAoaW5mbykKICAgICAgICBSdW5JbnN0YWxsKCBpbmZvICk7CgogICAgcmV0dXJuIHJ2Owp9
CgoKbnNyZXN1bHQKbnNTb2Z0d2FyZVVwZGF0ZTo6U3R1YkluaXRpYWxpemUobnNJRmlsZSAqYURp
ciwgY29uc3QgY2hhciogbG9nTmFtZSkKewogICAgaWYgKCAhYURpciApCiAgICAgICAgcmV0dXJu
ICgobnNyZXN1bHQpIDB4ODAwMDQwMDNMKTsKCgogICAgbnNyZXN1bHQgcnYgPSBhRGlyLT5DbG9u
ZShnZXR0ZXJfQWRkUmVmcyhtUHJvZ3JhbURpcikpOwoKCiAgICBuc1hQSURMQ1N0cmluZyB0ZW1w
UGF0aDsKICAgIHJ2ID0gYURpci0+R2V0UGF0aChnZXR0ZXJfQ29waWVzKHRlbXBQYXRoKSk7CiAg
ICBpZiAoKCEoKHJ2KSAmIDB4ODAwMDAwMDApKSkKICAgICAgICBWUl9TZXRSZWdEaXJlY3Rvcnko
IHRlbXBQYXRoICk7CgoKICAgIGlmIChsb2dOYW1lKQogICAgewogICAgICAgIG1Mb2dOYW1lID0g
UExfc3RyZHVwKGxvZ05hbWUpOwogICAgICAgIGlmICghbUxvZ05hbWUpCiAgICAgICAgICAgIHJl
dHVybiAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7CiAgICB9CgogICAgcmV0dXJuIHJ2Owp9CgoK
CgoKCm5zU29mdHdhcmVVcGRhdGVOYW1lU2V0Ojpuc1NvZnR3YXJlVXBkYXRlTmFtZVNldCgpCnsK
ICAgIChtUmVmQ250ID0gMCwgKF9tT3duaW5nVGhyZWFkID0gTlNfQ3VycmVudFRocmVhZCgpKSk7
Cn0KCm5zU29mdHdhcmVVcGRhdGVOYW1lU2V0Ojp+bnNTb2Z0d2FyZVVwZGF0ZU5hbWVTZXQoKQp7
Cn0KCm5zcmVmY250IG5zU29mdHdhcmVVcGRhdGVOYW1lU2V0OjpBZGRSZWYodm9pZCkgeyBpZiAo
IShQUkludDMyKG1SZWZDbnQpID49IDApKSBuc0RlYnVnOjpQcmVDb25kaXRpb24oImlsbGVnYWwg
cmVmY250IiwgIlBSSW50MzIobVJlZkNudCkgPj0gMCIsICJuc1NvZnR3YXJlVXBkYXRlLmNwcCIs
IDU0OSk7IE5TX0NoZWNrVGhyZWFkU2FmZShfbU93bmluZ1RocmVhZCwgIm5zU29mdHdhcmVVcGRh
dGVOYW1lU2V0IiAiIG5vdCB0aHJlYWQtc2FmZSIpOyArK21SZWZDbnQ7IG5zVHJhY2VSZWZjbnQ6
OkxvZ0FkZFJlZigodGhpcyksIChtUmVmQ250KSwgKCJuc1NvZnR3YXJlVXBkYXRlTmFtZVNldCIp
LCAoUFJVaW50MzIpIChzaXplb2YoKnRoaXMpKSk7IHJldHVybiBtUmVmQ250OyB9IG5zcmVmY250
IG5zU29mdHdhcmVVcGRhdGVOYW1lU2V0OjpSZWxlYXNlKHZvaWQpIHsgaWYgKCEoMCAhPSBtUmVm
Q250KSkgbnNEZWJ1Zzo6UHJlQ29uZGl0aW9uKCJkdXAgcmVsZWFzZSIsICIwICE9IG1SZWZDbnQi
LCAibnNTb2Z0d2FyZVVwZGF0ZS5jcHAiLCA1NDkpOyBOU19DaGVja1RocmVhZFNhZmUoX21Pd25p
bmdUaHJlYWQsICJuc1NvZnR3YXJlVXBkYXRlTmFtZVNldCIgIiBub3QgdGhyZWFkLXNhZmUiKTsg
LS1tUmVmQ250OyBuc1RyYWNlUmVmY250OjpMb2dSZWxlYXNlKCh0aGlzKSwgKG1SZWZDbnQpLCAo
Im5zU29mdHdhcmVVcGRhdGVOYW1lU2V0IikpOyBpZiAobVJlZkNudCA9PSAwKSB7IG1SZWZDbnQg
PSAxOyBkbyB7IDsgZGVsZXRlICh0aGlzKTsgfSB3aGlsZSAoMCk7IHJldHVybiAwOyB9IHJldHVy
biBtUmVmQ250OyB9IG5zcmVzdWx0IG5zU29mdHdhcmVVcGRhdGVOYW1lU2V0OjpRdWVyeUludGVy
ZmFjZShjb25zdCBuc0lJRCYgYUlJRCwgdm9pZCoqIGFJbnN0YW5jZVB0cikgeyBpZiAoX19udWxs
ID09IGFJbnN0YW5jZVB0cikgeyByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAwNDAwM0wpOyB9ICph
SW5zdGFuY2VQdHIgPSBfX251bGw7IHN0YXRpYyBjb25zdCBuc0lJRCBrQ2xhc3NJSUQgPSBuc0NP
TVR5cGVJbmZvPG5zSVNjcmlwdEV4dGVybmFsTmFtZVNldD46OkdldElJRCgpOyBpZiAoYUlJRC5F
cXVhbHMoa0NsYXNzSUlEKSkgeyAqYUluc3RhbmNlUHRyID0gKHZvaWQqKSB0aGlzOyBBZGRSZWYo
KTsgcmV0dXJuIDA7IH0gaWYgKGFJSUQuRXF1YWxzKG5zQ09NVHlwZUluZm88bnNJU3VwcG9ydHM+
OjpHZXRJSUQoKSkpIHsgKmFJbnN0YW5jZVB0ciA9ICh2b2lkKikgKChuc0lTdXBwb3J0cyopdGhp
cyk7IEFkZFJlZigpOyByZXR1cm4gMDsgfSByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDAwNDAwMkwp
OyB9OwoKCgpuc3Jlc3VsdApuc1NvZnR3YXJlVXBkYXRlTmFtZVNldDo6SW5pdGlhbGl6ZU5hbWVT
ZXQobnNJU2NyaXB0Q29udGV4dCogYVNjcmlwdENvbnRleHQpCnsKICAgIG5zcmVzdWx0IHJlc3Vs
dCA9IDA7CgogICAgcmVzdWx0ID0gTlNfSW5pdEluc3RhbGxWZXJzaW9uQ2xhc3MoYVNjcmlwdENv
bnRleHQsIDApOwogICAgaWYgKCgocmVzdWx0KSAmIDB4ODAwMDAwMDApKSByZXR1cm4gcmVzdWx0
OwoKICAgIHJlc3VsdCA9IE5TX0luaXRJbnN0YWxsVHJpZ2dlckdsb2JhbENsYXNzKGFTY3JpcHRD
b250ZXh0LCAwKTsKCiAgICByZXR1cm4gcmVzdWx0Owp9CgoKCgoKCgpzdGF0aWMgbnNyZXN1bHQg
bnNTb2Z0d2FyZVVwZGF0ZUNvbnN0cnVjdG9yKG5zSVN1cHBvcnRzICphT3V0ZXIsIGNvbnN0IG5z
SUlEJiBhSUlELCB2b2lkICoqYVJlc3VsdCkgeyBuc3Jlc3VsdCBydjsgbnNTb2Z0d2FyZVVwZGF0
ZSAqIGluc3Q7IGlmIChfX251bGwgPT0gYVJlc3VsdCkgeyBydiA9ICgobnNyZXN1bHQpIDB4ODAw
MDQwMDNMKTsgcmV0dXJuIHJ2OyB9ICphUmVzdWx0ID0gX19udWxsOyBpZiAoX19udWxsICE9IGFP
dXRlcikgeyBydiA9ICgobnNyZXN1bHQpIDB4ODAwNDAxMTBMKTsgcmV0dXJuIHJ2OyB9IGluc3Qg
PSBuc1NvZnR3YXJlVXBkYXRlOjpHZXRJbnN0YW5jZSgpOyBpZiAoX19udWxsID09IGluc3QpIHsg
cnYgPSAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7IHJldHVybiBydjsgfSBydiA9IGluc3QtPlF1
ZXJ5SW50ZXJmYWNlKGFJSUQsIGFSZXN1bHQpOyBkbyB7IChpbnN0KS0+UmVsZWFzZSgpOyAoaW5z
dCkgPSAwOyB9IHdoaWxlICgwKTsgcmV0dXJuIHJ2OyB9OwoKc3RhdGljIG5zcmVzdWx0IG5zSW5z
dGFsbFRyaWdnZXJDb25zdHJ1Y3Rvcihuc0lTdXBwb3J0cyAqYU91dGVyLCBjb25zdCBuc0lJRCYg
YUlJRCwgdm9pZCAqKmFSZXN1bHQpIHsgbnNyZXN1bHQgcnY7IG5zSW5zdGFsbFRyaWdnZXIgKiBp
bnN0OyBpZiAoX19udWxsID09IGFSZXN1bHQpIHsgcnYgPSAoKG5zcmVzdWx0KSAweDgwMDA0MDAz
TCk7IHJldHVybiBydjsgfSAqYVJlc3VsdCA9IF9fbnVsbDsgaWYgKF9fbnVsbCAhPSBhT3V0ZXIp
IHsgcnYgPSAoKG5zcmVzdWx0KSAweDgwMDQwMTEwTCk7IHJldHVybiBydjsgfSBkbyB7IGluc3Qg
PSBuZXcgbnNJbnN0YWxsVHJpZ2dlcigpOyA7IH0gd2hpbGUgKDApOyBpZiAoX19udWxsID09IGlu
c3QpIHsgcnYgPSAoKG5zcmVzdWx0KSAweDgwMDcwMDBlTCk7IHJldHVybiBydjsgfSAoaW5zdCkt
PkFkZFJlZigpOyBydiA9IGluc3QtPlF1ZXJ5SW50ZXJmYWNlKGFJSUQsIGFSZXN1bHQpOyBkbyB7
IChpbnN0KS0+UmVsZWFzZSgpOyAoaW5zdCkgPSAwOyB9IHdoaWxlICgwKTsgcmV0dXJuIHJ2OyB9
OwpzdGF0aWMgbnNyZXN1bHQgbnNJbnN0YWxsVmVyc2lvbkNvbnN0cnVjdG9yKG5zSVN1cHBvcnRz
ICphT3V0ZXIsIGNvbnN0IG5zSUlEJiBhSUlELCB2b2lkICoqYVJlc3VsdCkgeyBuc3Jlc3VsdCBy
djsgbnNJbnN0YWxsVmVyc2lvbiAqIGluc3Q7IGlmIChfX251bGwgPT0gYVJlc3VsdCkgeyBydiA9
ICgobnNyZXN1bHQpIDB4ODAwMDQwMDNMKTsgcmV0dXJuIHJ2OyB9ICphUmVzdWx0ID0gX19udWxs
OyBpZiAoX19udWxsICE9IGFPdXRlcikgeyBydiA9ICgobnNyZXN1bHQpIDB4ODAwNDAxMTBMKTsg
cmV0dXJuIHJ2OyB9IGRvIHsgaW5zdCA9IG5ldyBuc0luc3RhbGxWZXJzaW9uKCk7IDsgfSB3aGls
ZSAoMCk7IGlmIChfX251bGwgPT0gaW5zdCkgeyBydiA9ICgobnNyZXN1bHQpIDB4ODAwNzAwMGVM
KTsgcmV0dXJuIHJ2OyB9IChpbnN0KS0+QWRkUmVmKCk7IHJ2ID0gaW5zdC0+UXVlcnlJbnRlcmZh
Y2UoYUlJRCwgYVJlc3VsdCk7IGRvIHsgKGluc3QpLT5SZWxlYXNlKCk7IChpbnN0KSA9IDA7IH0g
d2hpbGUgKDApOyByZXR1cm4gcnY7IH07CnN0YXRpYyBuc3Jlc3VsdCBuc1NvZnR3YXJlVXBkYXRl
TmFtZVNldENvbnN0cnVjdG9yKG5zSVN1cHBvcnRzICphT3V0ZXIsIGNvbnN0IG5zSUlEJiBhSUlE
LCB2b2lkICoqYVJlc3VsdCkgeyBuc3Jlc3VsdCBydjsgbnNTb2Z0d2FyZVVwZGF0ZU5hbWVTZXQg
KiBpbnN0OyBpZiAoX19udWxsID09IGFSZXN1bHQpIHsgcnYgPSAoKG5zcmVzdWx0KSAweDgwMDA0
MDAzTCk7IHJldHVybiBydjsgfSAqYVJlc3VsdCA9IF9fbnVsbDsgaWYgKF9fbnVsbCAhPSBhT3V0
ZXIpIHsgcnYgPSAoKG5zcmVzdWx0KSAweDgwMDQwMTEwTCk7IHJldHVybiBydjsgfSBkbyB7IGlu
c3QgPSBuZXcgbnNTb2Z0d2FyZVVwZGF0ZU5hbWVTZXQoKTsgOyB9IHdoaWxlICgwKTsgaWYgKF9f
bnVsbCA9PSBpbnN0KSB7IHJ2ID0gKChuc3Jlc3VsdCkgMHg4MDA3MDAwZUwpOyByZXR1cm4gcnY7
IH0gKGluc3QpLT5BZGRSZWYoKTsgcnYgPSBpbnN0LT5RdWVyeUludGVyZmFjZShhSUlELCBhUmVz
dWx0KTsgZG8geyAoaW5zdCktPlJlbGVhc2UoKTsgKGluc3QpID0gMDsgfSB3aGlsZSAoMCk7IHJl
dHVybiBydjsgfTsKIyA1ODcgIm5zU29mdHdhcmVVcGRhdGUuY3BwIgpzdGF0aWMgbnNyZXN1bHQK
UmVnaXN0ZXJTb2Z0d2FyZVVwZGF0ZSggbnNJQ29tcG9uZW50TWFuYWdlciAqYUNvbXBNZ3IsCiAg
ICAgICAgICAgICAgICAgICAgICAgIG5zSUZpbGUgKmFQYXRoLAogICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICpyZWdpc3RyeUxvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyICpjb21wb25lbnRUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBuc01vZHVsZUNvbXBvbmVudEluZm8gKmluZm8pCnsKICBuc3Jlc3VsdCBydiA9IDA7CgogIG5z
Q09NUHRyPG5zSUNhdGVnb3J5TWFuYWdlcj4gY2F0bWFuID0KICAgIGRvX0dldFNlcnZpY2UoIkBt
b3ppbGxhLm9yZy9jYXRlZ29yeW1hbmFnZXI7MSIsICZydik7CiAgZG8geyBpZigoISgoISgocnYp
ICYgMHg4MDAwMDAwMCkpKSA/IG5zRGVidWc6Oldhcm5JZkZhbHNlKCJOU19FTlNVUkVfVFJVRSgi
ICJOU19TVUNDRUVERUQocnYpIiAiKSBmYWlsZWQiLCAiKCEoKHJ2KSAmIDB4ODAwMDAwMDApKSIs
ICJuc1NvZnR3YXJlVXBkYXRlLmNwcCIsIDU5OCkgOiAwKSkgcmV0dXJuIHJ2OyB9IHdoaWxlICgw
KTsKCiAgbnNYUElETENTdHJpbmcgcHJldmlvdXM7CiAgcnYgPSBjYXRtYW4tPkFkZENhdGVnb3J5
RW50cnkoIkphdmFTY3JpcHQgZ2xvYmFsIGNvbnN0cnVjdG9yIiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiSW5zdGFsbFZlcnNpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJAbW96aWxsYS5vcmcvYXBwc2hlbGwvY29tcG9uZW50IiAiL3hwaW5zdGFsbC9pbnN0
YWxsdmVyc2lvbjsxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAxLCBnZXR0
ZXJfQ29waWVzKHByZXZpb3VzKSk7CiAgZG8geyBpZigoISgoISgocnYpICYgMHg4MDAwMDAwMCkp
KSA/IG5zRGVidWc6Oldhcm5JZkZhbHNlKCJOU19FTlNVUkVfVFJVRSgiICJOU19TVUNDRUVERUQo
cnYpIiAiKSBmYWlsZWQiLCAiKCEoKHJ2KSAmIDB4ODAwMDAwMDApKSIsICJuc1NvZnR3YXJlVXBk
YXRlLmNwcCIsIDYwNSkgOiAwKSkgcmV0dXJuIHJ2OyB9IHdoaWxlICgwKTsKCiAgcnYgPSBjYXRt
YW4tPkFkZENhdGVnb3J5RW50cnkoIkphdmFTY3JpcHQgZ2xvYmFsIHByb3BlcnR5IiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5zdGFsbFRyaWdnZXIiLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJAbW96aWxsYS5vcmcvYXBwc2hlbGwvY29tcG9uZW50IiAiL3hw
aW5zdGFsbC9pbnN0YWxsdHJpZ2dlcjsxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAxLCAxLCBnZXR0ZXJfQ29waWVzKHByZXZpb3VzKSk7CiAgZG8geyBpZigoISgoISgocnYpICYg
MHg4MDAwMDAwMCkpKSA/IG5zRGVidWc6Oldhcm5JZkZhbHNlKCJOU19FTlNVUkVfVFJVRSgiICJO
U19TVUNDRUVERUQocnYpIiAiKSBmYWlsZWQiLCAiKCEoKHJ2KSAmIDB4ODAwMDAwMDApKSIsICJu
c1NvZnR3YXJlVXBkYXRlLmNwcCIsIDYxMSkgOiAwKSkgcmV0dXJuIHJ2OyB9IHdoaWxlICgwKTsK
CiAgcmV0dXJuIDA7Cn0KCgoKc3RhdGljIG5zTW9kdWxlQ29tcG9uZW50SW5mbyBjb21wb25lbnRz
W10gPQp7CiAgICB7ICJTb2Z0d2FyZVVwZGF0ZSBDb21wb25lbnQiLAogICAgICAgeyAweDE4YzJm
OTg5LCAweGIwOWYsIDB4MTFkMiwgezB4YmMsIDB4ZGUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4MGUs
IDB4MTMsIDB4NTN9IH0sCiAgICAgICAiQG1vemlsbGEub3JnL2FwcHNoZWxsL2NvbXBvbmVudCIg
Ii94cGluc3RhbGw7MSIsCiAgICAgICBuc1NvZnR3YXJlVXBkYXRlQ29uc3RydWN0b3IsCiAgICAg
ICBSZWdpc3RlclNvZnR3YXJlVXBkYXRlCiAgICB9LAoKICAgIHsgIkluc3RhbGxUcmlnZ2VyIENv
bXBvbmVudCIsCiAgICAgICB7IDB4MThjMmY5OGQsIDB4YjA5ZiwgMHgxMWQyLCB7MHhiYywgMHhk
ZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHgwZSwgMHgxMywgMHg1M30gfSwKICAgICAgICJAbW96aWxs
YS5vcmcvYXBwc2hlbGwvY29tcG9uZW50IiAiL3hwaW5zdGFsbC9pbnN0YWxsdHJpZ2dlcjsxIiwK
ICAgICAgIG5zSW5zdGFsbFRyaWdnZXJDb25zdHJ1Y3RvcgogICAgfSwKCiAgICB7ICJJbnN0YWxs
VmVyc2lvbiBDb21wb25lbnQiLAogICAgICAgeyAweDE4YzJmOThmLCAweGIwOWYsIDB4MTFkMiwg
ezB4YmMsIDB4ZGUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4MGUsIDB4MTMsIDB4NTN9IH0sCiAgICAg
ICAiQG1vemlsbGEub3JnL2FwcHNoZWxsL2NvbXBvbmVudCIgIi94cGluc3RhbGwvaW5zdGFsbHZl
cnNpb247MSIsCiAgICAgICBuc0luc3RhbGxWZXJzaW9uQ29uc3RydWN0b3IKICAgIH0sCgogICAg
eyAiWFBJbnN0YWxsIENvbnRlbnQgSGFuZGxlciIsCiAgICAgIHsgMHgxOGMyZjk4ZCwgMHhiMDlm
LCAweDExZDIsIHsweGJjLCAweGRlLCAweDAwLCAweDgwLCAweDVmLCAweDBlLCAweDEzLCAweDUz
fSB9LAogICAgICAiQG1vemlsbGEub3JnL3VyaWxvYWRlci9jb250ZW50LWhhbmRsZXI7MSIgIj90
eXBlPSIiYXBwbGljYXRpb24veC14cGluc3RhbGwiLAogICAgICBuc0luc3RhbGxUcmlnZ2VyQ29u
c3RydWN0b3IKICAgIH0sCgogICAgeyAiU29mdHdhcmUgdXBkYXRlIG5hbWVzZXQiLAogICAgICB7
IDB4Y2RlNDgwMTAsIDB4OTQ5NCwgMHg0YTczLCB7IDB4OTYsIDB4OWEsIDB4MjYsIDB4MzMsIDB4
NTAsIDB4MCwgMHg3MCwgMHhkZSB9fSwKICAgICAgIkBtb3ppbGxhLm9yZy94cGluc3RhbGwvc29m
dHdhcmV1cGRhdGVuYW1lc2V0OzEiLAogICAgICBuc1NvZnR3YXJlVXBkYXRlTmFtZVNldENvbnN0
cnVjdG9yCiAgICB9Cn07CgoKCmVudW0geyBOU0dldE1vZHVsZV9jb21wb25lbnRzX2NvdW50ID0g
c2l6ZW9mKGNvbXBvbmVudHMpIC8gc2l6ZW9mKGNvbXBvbmVudHNbMF0pIH07IHN0YXRpYyBuc01v
ZHVsZUNvbXBvbmVudEluZm8qIE5TR2V0TW9kdWxlX2NvbXBvbmVudHMgPSAoY29tcG9uZW50cyk7
IGV4dGVybiAiQyIgbnNyZXN1bHQgTlNHZXRNb2R1bGUgKG5zSUNvbXBvbmVudE1hbmFnZXIgKnNl
cnZNZ3IsIG5zSUZpbGUqIGxvY2F0aW9uLCBuc0lNb2R1bGUqKiByZXN1bHQpIHsgcmV0dXJuIE5T
X05ld0dlbmVyaWNNb2R1bGUoKCJuc1NvZnR3YXJlVXBkYXRlIiksIE5TR2V0TW9kdWxlX2NvbXBv
bmVudHNfY291bnQsIE5TR2V0TW9kdWxlX2NvbXBvbmVudHMsIDAsIHJlc3VsdCk7IH0K


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]