public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: c++/3749: gcc 3.0 crashes when compiling stc.cpp (see below)
@ 2002-04-19 13:17 pme
  0 siblings, 0 replies; 2+ messages in thread
From: pme @ 2002-04-19 13:17 UTC (permalink / raw)
  To: arndt.muehlenfeld, gcc-bugs, gcc-prs, nobody

Synopsis: gcc 3.0 crashes when compiling stc.cpp (see below)

State-Changed-From-To: open->closed
State-Changed-By: pme
State-Changed-When: Fri Apr 19 13:17:23 2002
State-Changed-Why:
    With 3.1 20020418 (prerelease), I get no crash:
    
        % g++ -fpreprocessed -c 3749_stc.cpp
    
    The resulting .o will not link, of course, since the C++
    library changed between 3.0 and 3.1, and stc.cpp is 
    already preprocessed.
    

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


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

* c++/3749: gcc 3.0 crashes when compiling stc.cpp (see below)
@ 2001-07-20  9:16 arndt.muehlenfeld
  0 siblings, 0 replies; 2+ messages in thread
From: arndt.muehlenfeld @ 2001-07-20  9:16 UTC (permalink / raw)
  To: gcc-gnats

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 1103512 bytes --]

>Number:         3749
>Category:       c++
>Synopsis:       gcc 3.0 crashes when compiling stc.cpp (see below)
>Confidential:   no
>Severity:       critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Jul 20 09:16:00 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     Arndt Mühlenfeld
>Release:        gcc version 3.0
>Organization:
>Environment:
Linux 2.2.13 (SuSE 6.3)
Pentium 133, 128 MB Ram, 530 MB Swap
>Description:

>How-To-Repeat:
c++ -c stc.cpp
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/x-unknown-content-type-cpp_auto_file; name="stc.cpp"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="stc.cpp"

IyAzMiAic3RjLmNwcCIKIyAxICIuLi9pbmNsdWRlL3N0ZGFmeC5oIiAxCiMgMTEgIi4uL2luY2x1
ZGUvc3RkYWZ4LmgiCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIyAyNiAiL3Vzci9p
bmNsdWRlL3N0cmluZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI0
OSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2NkZWZz
LmgiIDEgMwojIDI1MCAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwojIDI3NyAiL3Vzci9p
bmNsdWRlL2ZlYXR1cmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZ251L3N0dWJzLmgiIDEgMwoj
IDI3OCAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwojIDI3ICIvdXNyL2luY2x1ZGUvc3Ry
aW5nLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIv
aTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDE5OSAiL3Vzci9s
b2NhbC9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIg
Mwp0eXBlZGVmIHVuc2lnbmVkIGludCBzaXplX3Q7CiMgMzQgIi91c3IvaW5jbHVkZS9zdHJpbmcu
aCIgMiAzCgoKCmV4dGVybiB2b2lkICogbWVtY3B5ICh2b2lkICogX19kZXN0LCBjb25zdCB2b2lk
ICogX19zcmMsIHNpemVfdCBfX24pOwoKCgpleHRlcm4gdm9pZCAqIG1lbW1vdmUgKHZvaWQgKiBf
X2Rlc3QsIGNvbnN0IHZvaWQgKiBfX3NyYywgc2l6ZV90IF9fbik7CgoKCgoKCmV4dGVybiB2b2lk
ICogbWVtY2NweSAodm9pZCAqIF9fZGVzdCwgY29uc3Qgdm9pZCAqIF9fc3JjLCBpbnQgX19jLCBz
aXplX3QgX19uKTsKCgoKCgpleHRlcm4gdm9pZCAqIG1lbXNldCAodm9pZCAqIF9fcywgaW50IF9f
Yywgc2l6ZV90IF9fbik7CgoKZXh0ZXJuIGludCBtZW1jbXAgKGNvbnN0IHZvaWQgKiBfX3MxLCBj
b25zdCB2b2lkICogX19zMiwgc2l6ZV90IF9fbik7CgoKCmV4dGVybiB2b2lkICogbWVtY2hyIChj
b25zdCB2b2lkICogX19zLCBpbnQgX19jLCBzaXplX3QgX19uKTsKCgoKCmV4dGVybiB2b2lkICog
cmF3bWVtY2hyIChjb25zdCB2b2lkICogX19zLCBpbnQgX19jKTsKCgoKCmV4dGVybiBjaGFyICpz
dHJjcHkgKGNoYXIgKiBfX2Rlc3QsIGNvbnN0IGNoYXIgKiBfX3NyYyk7CgoKZXh0ZXJuIGNoYXIg
KnN0cm5jcHkgKGNoYXIgKiBfX2Rlc3QsIGNvbnN0IGNoYXIgKiBfX3NyYywgc2l6ZV90IF9fbik7
CgoKCmV4dGVybiBjaGFyICpzdHJjYXQgKGNoYXIgKiBfX2Rlc3QsIGNvbnN0IGNoYXIgKiBfX3Ny
Yyk7CgoKZXh0ZXJuIGNoYXIgKnN0cm5jYXQgKGNoYXIgKiBfX2Rlc3QsIGNvbnN0IGNoYXIgKiBf
X3NyYywgc2l6ZV90IF9fbik7CgoKCmV4dGVybiBpbnQgc3RyY21wIChjb25zdCBjaGFyICpfX3Mx
LCBjb25zdCBjaGFyICpfX3MyKTsKCmV4dGVybiBpbnQgc3RybmNtcCAoY29uc3QgY2hhciAqX19z
MSwgY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbik7CgoKZXh0ZXJuIGludCBzdHJjb2xsIChj
b25zdCBjaGFyICpfX3MxLCBjb25zdCBjaGFyICpfX3MyKTsKCmV4dGVybiBzaXplX3Qgc3RyeGZy
bSAoY2hhciAqIF9fZGVzdCwgY29uc3QgY2hhciAqIF9fc3JjLCBzaXplX3QgX19uKTsKCgoKCgoK
IyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3hsb2Nh
bGUuaCIgMwp0eXBlZGVmIHN0cnVjdCBfX2xvY2FsZV9zdHJ1Y3QKewogIHN0cnVjdCBsb2NhbGVf
ZGF0YSAqX19sb2NhbGVzWzZdOwoKCiAgY29uc3QgdW5zaWduZWQgc2hvcnQgaW50ICpfX2N0eXBl
X2I7CiAgY29uc3QgaW50ICpfX2N0eXBlX3RvbG93ZXI7CiAgY29uc3QgaW50ICpfX2N0eXBlX3Rv
dXBwZXI7Cn0gKl9fbG9jYWxlX3Q7CiMgMTAwICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoK
CmV4dGVybiBpbnQgX19zdHJjb2xsX2wgKGNvbnN0IGNoYXIgKl9fczEsIGNvbnN0IGNoYXIgKl9f
czIsIF9fbG9jYWxlX3QgX19sKTsKCgpleHRlcm4gc2l6ZV90IF9fc3RyeGZybV9sIChjaGFyICpf
X2Rlc3QsIGNvbnN0IGNoYXIgKl9fc3JjLCBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbCk7CgoK
CgoKZXh0ZXJuIGNoYXIgKl9fc3RyZHVwIChjb25zdCBjaGFyICpfX3MpOwpleHRlcm4gY2hhciAq
c3RyZHVwIChjb25zdCBjaGFyICpfX3MpOwoKCgoKCgpleHRlcm4gY2hhciAqc3RybmR1cCAoY29u
c3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX24pOwojIDE0NiAiL3Vzci9pbmNsdWRlL3N0cmlu
Zy5oIiAzCmV4dGVybiBjaGFyICpzdHJjaHIgKGNvbnN0IGNoYXIgKl9fcywgaW50IF9fYyk7Cgpl
eHRlcm4gY2hhciAqc3RycmNociAoY29uc3QgY2hhciAqX19zLCBpbnQgX19jKTsKCgoKCmV4dGVy
biBjaGFyICpzdHJjaHJudWwgKGNvbnN0IGNoYXIgKl9fcywgaW50IF9fYyk7CgoKCgpleHRlcm4g
c2l6ZV90IHN0cmNzcG4gKGNvbnN0IGNoYXIgKl9fcywgY29uc3QgY2hhciAqX19yZWplY3QpOwoK
CmV4dGVybiBzaXplX3Qgc3Ryc3BuIChjb25zdCBjaGFyICpfX3MsIGNvbnN0IGNoYXIgKl9fYWNj
ZXB0KTsKCmV4dGVybiBjaGFyICpzdHJwYnJrIChjb25zdCBjaGFyICpfX3MsIGNvbnN0IGNoYXIg
Kl9fYWNjZXB0KTsKCmV4dGVybiBjaGFyICpzdHJzdHIgKGNvbnN0IGNoYXIgKl9faGF5c3RhY2ss
IGNvbnN0IGNoYXIgKl9fbmVlZGxlKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3RyY2FzZXN0ciAoY29u
c3QgY2hhciAqX19oYXlzdGFjaywgY29uc3QgY2hhciAqX19uZWVkbGUpOwoKZXh0ZXJuIGNoYXIg
KnN0cmNhc2VzdHIgKGNvbnN0IGNoYXIgKl9faGF5c3RhY2ssIGNvbnN0IGNoYXIgKl9fbmVlZGxl
KTsKCgoKCmV4dGVybiBjaGFyICpzdHJ0b2sgKGNoYXIgKiBfX3MsIGNvbnN0IGNoYXIgKiBfX2Rl
bGltKTsKCgoKCmV4dGVybiBjaGFyICpfX3N0cnRva19yIChjaGFyICogX19zLCBjb25zdCBjaGFy
ICogX19kZWxpbSwgY2hhciAqKiBfX3NhdmVfcHRyKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cnRva19y
IChjaGFyICogX19zLCBjb25zdCBjaGFyICogX19kZWxpbSwgY2hhciAqKiBfX3NhdmVfcHRyKTsK
IyAxOTQgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gdm9pZCAqIG1lbW1lbSAoY29u
c3Qgdm9pZCAqIF9faGF5c3RhY2ssIHNpemVfdCBfX2hheXN0YWNrbGVuLCBjb25zdCB2b2lkICog
X19uZWVkbGUsIHNpemVfdCBfX25lZWRsZWxlbik7CgoKCgpleHRlcm4gdm9pZCAqIF9fbWVtcGNw
eSAodm9pZCAqIF9fZGVzdCwgY29uc3Qgdm9pZCAqIF9fc3JjLCBzaXplX3QgX19uKTsKCmV4dGVy
biB2b2lkICogbWVtcGNweSAodm9pZCAqIF9fZGVzdCwgY29uc3Qgdm9pZCAqIF9fc3JjLCBzaXpl
X3QgX19uKTsKCgoKCgpleHRlcm4gc2l6ZV90IHN0cmxlbiAoY29uc3QgY2hhciAqX19zKTsKCgoK
CmV4dGVybiBzaXplX3Qgc3RybmxlbiAoY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX21h
eGxlbik7CgoKCgpleHRlcm4gY2hhciAqc3RyZXJyb3IgKGludCBfX2Vycm51bSk7CgoKCmV4dGVy
biBjaGFyICpfX3N0cmVycm9yX3IgKGludCBfX2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBf
X2J1Zmxlbik7CmV4dGVybiBjaGFyICpzdHJlcnJvcl9yIChpbnQgX19lcnJudW0sIGNoYXIgKl9f
YnVmLCBzaXplX3QgX19idWZsZW4pOwoKCgoKZXh0ZXJuIHZvaWQgX19iemVybyAodm9pZCAqIF9f
cywgc2l6ZV90IF9fbik7CgoKCmV4dGVybiB2b2lkIGJjb3B5IChjb25zdCB2b2lkICogX19zcmMs
IHZvaWQgKiBfX2Rlc3QsIHNpemVfdCBfX24pOwoKCmV4dGVybiB2b2lkIGJ6ZXJvICh2b2lkICog
X19zLCBzaXplX3QgX19uKTsKCgpleHRlcm4gaW50IGJjbXAgKGNvbnN0IHZvaWQgKiBfX3MxLCBj
b25zdCB2b2lkICogX19zMiwgc2l6ZV90IF9fbik7CgoKZXh0ZXJuIGNoYXIgKmluZGV4IChjb25z
dCBjaGFyICpfX3MsIGludCBfX2MpOwoKCmV4dGVybiBjaGFyICpyaW5kZXggKGNvbnN0IGNoYXIg
Kl9fcywgaW50IF9fYyk7CgoKCmV4dGVybiBpbnQgX19mZnMgKGludCBfX2kpIDsKZXh0ZXJuIGlu
dCBmZnMgKGludCBfX2kpIDsKCgoKCmV4dGVybiBpbnQgZmZzbCAobG9uZyBpbnQgX19sKSA7CgoK
CgoKCgpleHRlcm4gaW50IF9fc3RyY2FzZWNtcCAoY29uc3QgY2hhciAqX19zMSwgY29uc3QgY2hh
ciAqX19zMik7CmV4dGVybiBpbnQgc3RyY2FzZWNtcCAoY29uc3QgY2hhciAqX19zMSwgY29uc3Qg
Y2hhciAqX19zMik7CgoKZXh0ZXJuIGludCBzdHJuY2FzZWNtcCAoY29uc3QgY2hhciAqX19zMSwg
Y29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbik7CgoKCgoKCmV4dGVybiBpbnQgX19zdHJjYXNl
Y21wX2wgKGNvbnN0IGNoYXIgKl9fczEsIGNvbnN0IGNoYXIgKl9fczIsIF9fbG9jYWxlX3QgX19s
b2MpOwoKCmV4dGVybiBpbnQgX19zdHJuY2FzZWNtcF9sIChjb25zdCBjaGFyICpfX3MxLCBjb25z
dCBjaGFyICpfX3MyLCBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKTsKCgoKCgoKZXh0ZXJu
IGNoYXIgKnN0cnNlcCAoY2hhciAqKiBfX3N0cmluZ3AsIGNvbnN0IGNoYXIgKiBfX2RlbGltKTsK
CgoKCgpleHRlcm4gaW50IHN0cnZlcnNjbXAgKGNvbnN0IGNoYXIgKl9fczEsIGNvbnN0IGNoYXIg
Kl9fczIpOwoKCmV4dGVybiBjaGFyICpzdHJzaWduYWwgKGludCBfX3NpZyk7CgoKZXh0ZXJuIGNo
YXIgKl9fc3RwY3B5IChjaGFyICogX19kZXN0LCBjb25zdCBjaGFyICogX19zcmMpOwoKZXh0ZXJu
IGNoYXIgKnN0cGNweSAoY2hhciAqIF9fZGVzdCwgY29uc3QgY2hhciAqIF9fc3JjKTsKCgoKCmV4
dGVybiBjaGFyICpfX3N0cG5jcHkgKGNoYXIgKiBfX2Rlc3QsIGNvbnN0IGNoYXIgKiBfX3NyYywg
c2l6ZV90IF9fbik7CgpleHRlcm4gY2hhciAqc3RwbmNweSAoY2hhciAqIF9fZGVzdCwgY29uc3Qg
Y2hhciAqIF9fc3JjLCBzaXplX3QgX19uKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cmZyeSAoY2hhciAq
X19zdHJpbmcpOwoKCmV4dGVybiB2b2lkICogbWVtZnJvYiAodm9pZCAqIF9fcywgc2l6ZV90IF9f
bik7CgoKCgoKCmV4dGVybiBjaGFyICpiYXNlbmFtZSAoY29uc3QgY2hhciAqX19maWxlbmFtZSk7
CiMgMzUwICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKfQojIDEyICIuLi9pbmNsdWRlL3N0ZGFm
eC5oIiAyCiMgMSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUv
Y3R5cGUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9p
bmNsdWRlL2N0eXBlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwoj
IDI2ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1
cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgojIDEgIi91
c3IvbG9jYWwvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVm
LmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgp0eXBlZGVmIHVu
c2lnbmVkIGNoYXIgX191X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191X3Nob3J0Owp0
eXBlZGVmIHVuc2lnbmVkIGludCBfX3VfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX191X2xv
bmc7CgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgaW50IF9fdmFsWzJdOwogIH0gX19x
dWFkX3Q7CnR5cGVkZWYgc3RydWN0CiAgewogICAgX191X2xvbmcgX192YWxbMl07CiAgfSBfX3Vf
cXVhZF90OwoKdHlwZWRlZiBzaWduZWQgY2hhciBfX2ludDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBj
aGFyIF9fdWludDhfdDsKdHlwZWRlZiBzaWduZWQgc2hvcnQgaW50IF9faW50MTZfdDsKdHlwZWRl
ZiB1bnNpZ25lZCBzaG9ydCBpbnQgX191aW50MTZfdDsKdHlwZWRlZiBzaWduZWQgaW50IF9faW50
MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aW50MzJfdDsKCgoKCnR5cGVkZWYgX19xdWFk
X3QgKl9fcWFkZHJfdDsKCnR5cGVkZWYgX191X3F1YWRfdCBfX2Rldl90Owp0eXBlZGVmIF9fdV9p
bnQgX191aWRfdDsKdHlwZWRlZiBfX3VfaW50IF9fZ2lkX3Q7CnR5cGVkZWYgX191X2xvbmcgX19p
bm9fdDsKdHlwZWRlZiBfX3VfaW50IF9fbW9kZV90Owp0eXBlZGVmIF9fdV9pbnQgX19ubGlua190
Owp0eXBlZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CnR5cGVkZWYgX19xdWFkX3QgX19sb2ZmX3Q7CnR5
cGVkZWYgaW50IF9fcGlkX3Q7CnR5cGVkZWYgaW50IF9fc3NpemVfdDsKdHlwZWRlZiBsb25nIGlu
dCBfX3JsaW1fdDsKdHlwZWRlZiBfX3F1YWRfdCBfX3JsaW02NF90Owp0eXBlZGVmIF9fdV9pbnQg
X19pZF90OwoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgX192YWxbMl07CiAgfSBfX2ZzaWRf
dDsKCgp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CnR5cGVkZWYgY2hhciAqX19jYWRkcl90Owp0eXBl
ZGVmIGxvbmcgaW50IF9fdGltZV90Owp0eXBlZGVmIGxvbmcgaW50IF9fc3dibGtfdDsKCnR5cGVk
ZWYgbG9uZyBpbnQgX19jbG9ja190OwoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX19mZF9t
YXNrOwojIDEwMCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwp0eXBlZGVmIHN0cnVjdAog
IHsKCgoKICAgIF9fZmRfbWFzayBmZHNfYml0c1sxMDI0IC8gKDggKiBzaXplb2YgKF9fZmRfbWFz
aykpXTsKCgoKCgogIH0gX19mZF9zZXQ7CgoKdHlwZWRlZiBpbnQgX19rZXlfdDsKCgp0eXBlZGVm
IHVuc2lnbmVkIHNob3J0IGludCBfX2lwY19waWRfdDsKCgoKCgp0eXBlZGVmIGxvbmcgaW50IF9f
YmxrY250X3Q7CnR5cGVkZWYgX19xdWFkX3QgX19ibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xv
bmcgX19mc2Jsa2NudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2Jsa2NudDY0X3Q7CgoKdHlw
ZWRlZiBfX3VfbG9uZyBfX2ZzZmlsY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzZmlsY250
NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9faW5vNjRfdDsKCgp0eXBlZGVmIF9fbG9mZl90IF9f
b2ZmNjRfdDsKCgp0eXBlZGVmIGludCBfX3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50
IF9fdF91c2NhbGFyX3Q7CgoKdHlwZWRlZiBpbnQgX19pbnRwdHJfdDsKCgoKCiMgMSAiL3Vzci9p
bmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9w
dGhyZWFkdHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwojIDY4
ICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAzCnN0cnVjdCBfX3NjaGVkX3BhcmFtCiAgewog
ICAgaW50IHNjaGVkX3ByaW9yaXR5OwogIH07CiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJl
YWR0eXBlcy5oIiAyIDMKCgpzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sKewogIGxvbmcgaW50IF9f
c3RhdHVzOwogIGludCBfX3NwaW5sb2NrOwp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9k
ZXNjcl9zdHJ1Y3QgKl9wdGhyZWFkX2Rlc2NyOwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQg
X19kZXRhY2hzdGF0ZTsKICBpbnQgX19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9wYXJh
bSBfX3NjaGVkcGFyYW07CiAgaW50IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwogIHNp
emVfdCBfX2d1YXJkc2l6ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3RhY2th
ZGRyOwogIHNpemVfdCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlwZWRlZiBz
dHJ1Y3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2NfbG9jazsKICBfcHRocmVhZF9k
ZXNjciBfX2Nfd2FpdGluZzsKfSBwdGhyZWFkX2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewog
IGludCBfX2R1bW15Owp9IHB0aHJlYWRfY29uZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGlu
dCBwdGhyZWFkX2tleV90OwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVk
OwogIGludCBfX21fY291bnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19tX293bmVyOwogIGludCBfX21f
a2luZDsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9tdXRl
eF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0
ZXhhdHRyX3Q7CgoKCnR5cGVkZWYgaW50IHB0aHJlYWRfb25jZV90OwoKCgoKdHlwZWRlZiBzdHJ1
Y3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX3J3X2xvY2s7CiAgaW50IF9fcndfcmVh
ZGVyczsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlcjsKICBfcHRocmVhZF9kZXNjciBfX3J3
X3JlYWRfd2FpdGluZzsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlX3dhaXRpbmc7CiAgaW50
IF9fcndfa2luZDsKICBpbnQgX19yd19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrX3Q7CgoKCnR5
cGVkZWYgc3RydWN0CnsKICBpbnQgX19sb2Nra2luZDsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJl
YWRfcndsb2NrYXR0cl90OwoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBwdGhyZWFkX3Q7
CiMgMTUxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKIyAyOCAiL3Vzci9pbmNsdWRl
L2N0eXBlLmgiIDIgMwoKZXh0ZXJuICJDIiB7CiMgNDAgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAz
CiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyAyMiAiL3Vzci9pbmNsdWRlL2VuZGlh
bi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1
ZGUvZW5kaWFuLmgiIDIgMwojIDM1ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDMKIyAxICIvdXNy
L2luY2x1ZGUvYml0cy9lbmRpYW4uaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIg
MiAzCiMgNDEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMKCgoKCgoKZW51bQp7CiAgX0lTdXBw
ZXIgPSAoKDApIDwgOCA/ICgoMSA8PCAoMCkpIDw8IDgpIDogKCgxIDw8ICgwKSkgPj4gOCkpLAog
IF9JU2xvd2VyID0gKCgxKSA8IDggPyAoKDEgPDwgKDEpKSA8PCA4KSA6ICgoMSA8PCAoMSkpID4+
IDgpKSwKICBfSVNhbHBoYSA9ICgoMikgPCA4ID8gKCgxIDw8ICgyKSkgPDwgOCkgOiAoKDEgPDwg
KDIpKSA+PiA4KSksCiAgX0lTZGlnaXQgPSAoKDMpIDwgOCA/ICgoMSA8PCAoMykpIDw8IDgpIDog
KCgxIDw8ICgzKSkgPj4gOCkpLAogIF9JU3hkaWdpdCA9ICgoNCkgPCA4ID8gKCgxIDw8ICg0KSkg
PDwgOCkgOiAoKDEgPDwgKDQpKSA+PiA4KSksCiAgX0lTc3BhY2UgPSAoKDUpIDwgOCA/ICgoMSA8
PCAoNSkpIDw8IDgpIDogKCgxIDw8ICg1KSkgPj4gOCkpLAogIF9JU3ByaW50ID0gKCg2KSA8IDgg
PyAoKDEgPDwgKDYpKSA8PCA4KSA6ICgoMSA8PCAoNikpID4+IDgpKSwKICBfSVNncmFwaCA9ICgo
NykgPCA4ID8gKCgxIDw8ICg3KSkgPDwgOCkgOiAoKDEgPDwgKDcpKSA+PiA4KSksCiAgX0lTYmxh
bmsgPSAoKDgpIDwgOCA/ICgoMSA8PCAoOCkpIDw8IDgpIDogKCgxIDw8ICg4KSkgPj4gOCkpLAog
IF9JU2NudHJsID0gKCg5KSA8IDggPyAoKDEgPDwgKDkpKSA8PCA4KSA6ICgoMSA8PCAoOSkpID4+
IDgpKSwKICBfSVNwdW5jdCA9ICgoMTApIDwgOCA/ICgoMSA8PCAoMTApKSA8PCA4KSA6ICgoMSA8
PCAoMTApKSA+PiA4KSksCiAgX0lTYWxudW0gPSAoKDExKSA8IDggPyAoKDEgPDwgKDExKSkgPDwg
OCkgOiAoKDEgPDwgKDExKSkgPj4gOCkpCn07CiMgNzUgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAz
CmV4dGVybiBjb25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgKl9fY3R5cGVfYjsKZXh0ZXJuIGNvbnN0
IF9faW50MzJfdCAqX19jdHlwZV90b2xvd2VyOwpleHRlcm4gY29uc3QgX19pbnQzMl90ICpfX2N0
eXBlX3RvdXBwZXI7CiMgOTEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVybiBpbnQgaXNh
bG51bSAoaW50KTsKZXh0ZXJuIGludCBpc2FscGhhIChpbnQpOwpleHRlcm4gaW50IGlzY250cmwg
KGludCk7CmV4dGVybiBpbnQgaXNkaWdpdCAoaW50KTsKZXh0ZXJuIGludCBpc2xvd2VyIChpbnQp
OwpleHRlcm4gaW50IGlzZ3JhcGggKGludCk7CmV4dGVybiBpbnQgaXNwcmludCAoaW50KTsKZXh0
ZXJuIGludCBpc3B1bmN0IChpbnQpOwpleHRlcm4gaW50IGlzc3BhY2UgKGludCk7CmV4dGVybiBp
bnQgaXN1cHBlciAoaW50KTsKZXh0ZXJuIGludCBpc3hkaWdpdCAoaW50KTsKCgpleHRlcm4gaW50
IGlzYmxhbmsgKGludCk7CgoKCgpleHRlcm4gaW50IHRvbG93ZXIgKGludCBfX2MpOwoKCmV4dGVy
biBpbnQgdG91cHBlciAoaW50IF9fYyk7CgoKCgoKCmV4dGVybiBpbnQgaXNhc2NpaSAoaW50IF9f
Yyk7CgoKCmV4dGVybiBpbnQgdG9hc2NpaSAoaW50IF9fYyk7CgoKCgoKCmV4dGVybiBpbnQgX3Rv
dXBwZXIgKGludCk7CmV4dGVybiBpbnQgX3RvbG93ZXIgKGludCk7CiMgMjEzICIvdXNyL2luY2x1
ZGUvY3R5cGUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDIxNCAiL3Vz
ci9pbmNsdWRlL2N0eXBlLmgiIDIgMwojIDIyOSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0
ZXJuIGludCBfX2lzYWxudW1fbCAoaW50LCBfX2xvY2FsZV90KTsKZXh0ZXJuIGludCBfX2lzYWxw
aGFfbCAoaW50LCBfX2xvY2FsZV90KTsKZXh0ZXJuIGludCBfX2lzY250cmxfbCAoaW50LCBfX2xv
Y2FsZV90KTsKZXh0ZXJuIGludCBfX2lzZGlnaXRfbCAoaW50LCBfX2xvY2FsZV90KTsKZXh0ZXJu
IGludCBfX2lzbG93ZXJfbCAoaW50LCBfX2xvY2FsZV90KTsKZXh0ZXJuIGludCBfX2lzZ3JhcGhf
bCAoaW50LCBfX2xvY2FsZV90KTsKZXh0ZXJuIGludCBfX2lzcHJpbnRfbCAoaW50LCBfX2xvY2Fs
ZV90KTsKZXh0ZXJuIGludCBfX2lzcHVuY3RfbCAoaW50LCBfX2xvY2FsZV90KTsKZXh0ZXJuIGlu
dCBfX2lzc3BhY2VfbCAoaW50LCBfX2xvY2FsZV90KTsKZXh0ZXJuIGludCBfX2lzdXBwZXJfbCAo
aW50LCBfX2xvY2FsZV90KTsKZXh0ZXJuIGludCBfX2lzeGRpZ2l0X2wgKGludCwgX19sb2NhbGVf
dCk7CgpleHRlcm4gaW50IF9faXNibGFua19sIChpbnQsIF9fbG9jYWxlX3QpOwoKCgpleHRlcm4g
aW50IF9fdG9sb3dlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90IF9fbCk7CgoKZXh0ZXJuIGludCBf
X3RvdXBwZXJfbCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpOwojIDI3NSAiL3Vzci9pbmNsdWRl
L2N0eXBlLmgiIDMKfQojIDEzICIuLi9pbmNsdWRlL3N0ZGFmeC5oIiAyCiMgMSAiL3Vzci9pbmNs
dWRlL3N0ZGxpYi5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIg
MwoKCgoKCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMu
MC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMK
CmV4dGVybiAiQyIgewoKCgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IHF1b3Q7CiAgICBp
bnQgcmVtOwogIH0gZGl2X3Q7CgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBpbnQgcXVv
dDsKICAgIGxvbmcgaW50IHJlbTsKICB9IGxkaXZfdDsKCgoKCgogICAgICAgICAgICAgIHR5cGVk
ZWYgc3RydWN0CiAgewogICAgbG9uZyBsb25nIGludCBxdW90OwogICAgbG9uZyBsb25nIGludCBy
ZW07CiAgfSBsbGRpdl90OwojIDgwICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHNp
emVfdCBfX2N0eXBlX2dldF9tYl9jdXJfbWF4ICh2b2lkKTsKCgoKZXh0ZXJuIGRvdWJsZSBhdG9m
IChjb25zdCBjaGFyICpfX25wdHIpOwoKZXh0ZXJuIGludCBhdG9pIChjb25zdCBjaGFyICpfX25w
dHIpOwoKZXh0ZXJuIGxvbmcgaW50IGF0b2wgKGNvbnN0IGNoYXIgKl9fbnB0cik7CgoKCiAgICAg
ICAgICAgICAgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgYXRvbGwgKGNvbnN0IGNoYXIgKl9fbnB0cik7
CgoKCmV4dGVybiBkb3VibGUgc3RydG9kIChjb25zdCBjaGFyICogX19ucHRyLCBjaGFyICoqIF9f
ZW5kcHRyKTsKCgoKCmV4dGVybiBmbG9hdCBzdHJ0b2YgKGNvbnN0IGNoYXIgKiBfX25wdHIsIGNo
YXIgKiogX19lbmRwdHIpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBzdHJ0b2xkIChjb25zdCBjaGFy
ICogX19ucHRyLCBjaGFyICoqIF9fZW5kcHRyKTsKCgoKCmV4dGVybiBsb25nIGludCBzdHJ0b2wg
KGNvbnN0IGNoYXIgKiBfX25wdHIsIGNoYXIgKiogX19lbmRwdHIsIGludCBfX2Jhc2UpOwoKCmV4
dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsIChjb25zdCBjaGFyICogX19ucHRyLCBjaGFy
ICoqIF9fZW5kcHRyLCBpbnQgX19iYXNlKTsKIyAxMzMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIg
MwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b2xsIChjb25zdCBjaGFyICogX19ucHRyLCBjaGFy
ICoqIF9fZW5kcHRyLCBpbnQgX19iYXNlKTsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBp
bnQgc3RydG91bGwgKGNvbnN0IGNoYXIgKiBfX25wdHIsIGNoYXIgKiogX19lbmRwdHIsIGludCBf
X2Jhc2UpOwojIDE1NyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl
L3hsb2NhbGUuaCIgMSAzCiMgMTU4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgpleHRl
cm4gbG9uZyBpbnQgX19zdHJ0b2xfbCAoY29uc3QgY2hhciAqIF9fbnB0ciwgY2hhciAqKiBfX2Vu
ZHB0ciwgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYyk7CgoKCmV4dGVybiB1bnNpZ25lZCBs
b25nIGludCBfX3N0cnRvdWxfbCAoY29uc3QgY2hhciAqIF9fbnB0ciwgY2hhciAqKiBfX2VuZHB0
ciwgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYyk7CgoKCgpleHRlcm4gbG9uZyBsb25nIGlu
dCBfX3N0cnRvbGxfbCAoY29uc3QgY2hhciAqIF9fbnB0ciwgY2hhciAqKiBfX2VuZHB0ciwgaW50
IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYyk7CgoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25n
IGludCBfX3N0cnRvdWxsX2wgKGNvbnN0IGNoYXIgKiBfX25wdHIsIGNoYXIgKiogX19lbmRwdHIs
IGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpOwoKCgoKCmV4dGVybiBkb3VibGUgX19zdHJ0
b2RfbCAoY29uc3QgY2hhciAqIF9fbnB0ciwgY2hhciAqKiBfX2VuZHB0ciwgX19sb2NhbGVfdCBf
X2xvYyk7CgoKZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2wgKGNvbnN0IGNoYXIgKiBfX25wdHIsIGNo
YXIgKiogX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBf
X3N0cnRvbGRfbCAoY29uc3QgY2hhciAqIF9fbnB0ciwgY2hhciAqKiBfX2VuZHB0ciwgX19sb2Nh
bGVfdCBfX2xvYyk7CiMgMTk2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGRvdWJs
ZSBfX3N0cnRvZF9pbnRlcm5hbCAoY29uc3QgY2hhciAqIF9fbnB0ciwgY2hhciAqKiBfX2VuZHB0
ciwgaW50IF9fZ3JvdXApOwoKCmV4dGVybiBmbG9hdCBfX3N0cnRvZl9pbnRlcm5hbCAoY29uc3Qg
Y2hhciAqIF9fbnB0ciwgY2hhciAqKiBfX2VuZHB0ciwgaW50IF9fZ3JvdXApOwoKZXh0ZXJuIGxv
bmcgZG91YmxlIF9fc3RydG9sZF9pbnRlcm5hbCAoY29uc3QgY2hhciAqIF9fbnB0ciwgY2hhciAq
KiBfX2VuZHB0ciwgaW50IF9fZ3JvdXApOwoKCgoKZXh0ZXJuIGxvbmcgaW50IF9fc3RydG9sX2lu
dGVybmFsIChjb25zdCBjaGFyICogX19ucHRyLCBjaGFyICoqIF9fZW5kcHRyLCBpbnQgX19iYXNl
LCBpbnQgX19ncm91cCk7CgoKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fc3RydG91bF9p
bnRlcm5hbCAoY29uc3QgY2hhciAqIF9fbnB0ciwgY2hhciAqKiBfX2VuZHB0ciwgaW50IF9fYmFz
ZSwgaW50IF9fZ3JvdXApOwojIDIyMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBs
b25nIGxvbmcgaW50IF9fc3RydG9sbF9pbnRlcm5hbCAoY29uc3QgY2hhciAqIF9fbnB0ciwgY2hh
ciAqKiBfX2VuZHB0ciwgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApOwoKCgoKCgpleHRlcm4gdW5z
aWduZWQgbG9uZyBsb25nIGludCBfX3N0cnRvdWxsX2ludGVybmFsIChjb25zdCBjaGFyICogX19u
cHRyLCBjaGFyICoqIF9fZW5kcHRyLCBpbnQgX19iYXNlLCBpbnQgX19ncm91cCk7CiMgMzMzICIv
dXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmw2NGEgKGxvbmcgaW50IF9fbik7
CgoKZXh0ZXJuIGxvbmcgaW50IGE2NGwgKGNvbnN0IGNoYXIgKl9fcyk7CgoKIyAxICIvdXNyL2lu
Y2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMK
IyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9zeXMv
dHlwZXMuaCIgMiAzCgpleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMu
aCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKdHlwZWRlZiBfX3Vf
Y2hhciB1X2NoYXI7CnR5cGVkZWYgX191X3Nob3J0IHVfc2hvcnQ7CnR5cGVkZWYgX191X2ludCB1
X2ludDsKdHlwZWRlZiBfX3VfbG9uZyB1X2xvbmc7CnR5cGVkZWYgX19xdWFkX3QgcXVhZF90Owp0
eXBlZGVmIF9fdV9xdWFkX3QgdV9xdWFkX3Q7CnR5cGVkZWYgX19mc2lkX3QgZnNpZF90OwoKCnR5
cGVkZWYgX19sb2ZmX3QgbG9mZl90OwoKCgp0eXBlZGVmIF9faW5vX3QgaW5vX3Q7CgoKCgoKCnR5
cGVkZWYgX19pbm82NF90IGlubzY0X3Q7CgoKCnR5cGVkZWYgX19kZXZfdCBkZXZfdDsKCgoKCnR5
cGVkZWYgX19naWRfdCBnaWRfdDsKCgoKCnR5cGVkZWYgX19tb2RlX3QgbW9kZV90OwoKCgoKdHlw
ZWRlZiBfX25saW5rX3QgbmxpbmtfdDsKCgoKCnR5cGVkZWYgX191aWRfdCB1aWRfdDsKCgoKCgp0
eXBlZGVmIF9fb2ZmX3Qgb2ZmX3Q7CgoKCgoKCnR5cGVkZWYgX19vZmY2NF90IG9mZjY0X3Q7CgoK
Cgp0eXBlZGVmIF9fcGlkX3QgcGlkX3Q7CgoKCgp0eXBlZGVmIF9faWRfdCBpZF90OwoKCgp0eXBl
ZGVmIF9fc3NpemVfdCBzc2l6ZV90OwoKCgoKdHlwZWRlZiBfX2RhZGRyX3QgZGFkZHJfdDsKdHlw
ZWRlZiBfX2NhZGRyX3QgY2FkZHJfdDsKCgoKdHlwZWRlZiBfX2tleV90IGtleV90OwoKCgoKCgoj
IDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDU3ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAz
CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgNTggIi91c3IvaW5jbHVkZS90
aW1lLmgiIDIgMwoKCnR5cGVkZWYgX19jbG9ja190IGNsb2NrX3Q7CgoKCgoKCgojIDEgIi91c3Iv
aW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDY5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMK
Cgp0eXBlZGVmIF9fdGltZV90IHRpbWVfdDsKIyAxMjIgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu
aCIgMiAzCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMu
MC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAxMjUgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIg
MiAzCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQg
c2hvcnQgaW50IHVzaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKIyAxNDAgIi91c3Iv
aW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIGNoYXIgaW50OF90Owp0eXBlZGVmIHNob3J0
IGludCBpbnQxNl90Owp0eXBlZGVmIGludCBpbnQzMl90OwoKCgoKCgp0eXBlZGVmIHVuc2lnbmVk
IGNoYXIgdV9pbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVfaW50MTZfdDsKdHlw
ZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQzMl90OwoKCgoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdDsK
IyAxOTAgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9lbmRp
YW4uaCIgMSAzCiMgMTkxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vz
ci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0
LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVk
ZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAz
CiMgMjkgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRl
L2JpdHMvc2VsZWN0LmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMK
CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRl
L2JpdHMvc2lnc2V0LmgiIDMKdHlwZWRlZiBpbnQgX19zaWdfYXRvbWljX3Q7CgoKCgp0eXBlZGVm
IHN0cnVjdAogIHsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdmFsWygxMDI0IC8gKDggKiBzaXpl
b2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpXTsKICB9IF9fc2lnc2V0X3Q7CiMgMzUgIi91c3IvaW5j
bHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwoj
IDgzICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnN0cnVjdCB0aW1lc3BlYwogIHsKICAgIGxvbmcg
aW50IHR2X3NlYzsKICAgIGxvbmcgaW50IHR2X25zZWM7CiAgfTsKIyAzOSAiL3Vzci9pbmNsdWRl
L3N5cy9zZWxlY3QuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCgpzdHJ1Y3QgdGltZXZhbDsKCnR5
cGVkZWYgX19mZF9tYXNrIGZkX21hc2s7CgoKdHlwZWRlZiBfX2ZkX3NldCBmZF9zZXQ7CiMgNzQg
Ii91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKZXh0ZXJuIGludCBfX3NlbGVjdCAoaW50IF9f
bmZkcywgX19mZF9zZXQgKl9fcmVhZGZkcywgX19mZF9zZXQgKl9fd3JpdGVmZHMsIF9fZmRfc2V0
ICpfX2V4Y2VwdGZkcywgc3RydWN0IHRpbWV2YWwgKl9fdGltZW91dCk7CgoKZXh0ZXJuIGludCBz
ZWxlY3QgKGludCBfX25mZHMsIF9fZmRfc2V0ICpfX3JlYWRmZHMsIF9fZmRfc2V0ICpfX3dyaXRl
ZmRzLCBfX2ZkX3NldCAqX19leGNlcHRmZHMsIHN0cnVjdCB0aW1ldmFsICpfX3RpbWVvdXQpOwoj
IDg3ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCmV4dGVybiBpbnQgcHNlbGVjdCAoaW50
IF9fbmZkcywgX19mZF9zZXQgKl9fcmVhZGZkcywgX19mZF9zZXQgKl9fd3JpdGVmZHMsIF9fZmRf
c2V0ICpfX2V4Y2VwdGZkcywgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3RpbWVvdXQsIGNvbnN0
IF9fc2lnc2V0X3QgKl9fc2lnbWFzayk7CgoKCgoKfQojIDE5NCAiL3Vzci9pbmNsdWRlL3N5cy90
eXBlcy5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDEgMwojIDM1
ICIvdXNyL2luY2x1ZGUvc3lzL3N5c21hY3Jvcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlh
bi5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL3N5cy9zeXNtYWNyb3MuaCIgMiAzCiMgMTk3ICIv
dXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgoKCnR5cGVkZWYgX19ibGtjbnRfdCBibGtj
bnRfdDsKdHlwZWRlZiBfX2ZzYmxrY250X3QgZnNibGtjbnRfdDsKdHlwZWRlZiBfX2ZzZmlsY250
X3QgZnNmaWxjbnRfdDsKCgoKCgoKCnR5cGVkZWYgX19ibGtjbnQ2NF90IGJsa2NudDY0X3Q7CnR5
cGVkZWYgX19mc2Jsa2NudDY0X3QgZnNibGtjbnQ2NF90Owp0eXBlZGVmIF9fZnNmaWxjbnQ2NF90
IGZzZmlsY250NjRfdDsKCgp9CiMgMzQwICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoK
CgpleHRlcm4gaW50MzJfdCByYW5kb20gKHZvaWQpOwoKCmV4dGVybiB2b2lkIHNyYW5kb20gKHVu
c2lnbmVkIGludCBfX3NlZWQpOwoKCgoKCmV4dGVybiB2b2lkICogaW5pdHN0YXRlICh1bnNpZ25l
ZCBpbnQgX19zZWVkLCB2b2lkICogX19zdGF0ZWJ1Ziwgc2l6ZV90IF9fc3RhdGVsZW4pOwoKCgoK
ZXh0ZXJuIHZvaWQgKiBzZXRzdGF0ZSAodm9pZCAqIF9fc3RhdGVidWYpOwoKCgoKCgoKc3RydWN0
IHJhbmRvbV9kYXRhCiAgewogICAgaW50MzJfdCAqZnB0cjsKICAgIGludDMyX3QgKnJwdHI7CiAg
ICBpbnQzMl90ICpzdGF0ZTsKICAgIGludCByYW5kX3R5cGU7CiAgICBpbnQgcmFuZF9kZWc7CiAg
ICBpbnQgcmFuZF9zZXA7CiAgICBpbnQzMl90ICplbmRfcHRyOwogIH07CgpleHRlcm4gaW50IHJh
bmRvbV9yIChzdHJ1Y3QgcmFuZG9tX2RhdGEgKiBfX2J1ZiwgaW50MzJfdCAqIF9fcmVzdWx0KTsK
CgpleHRlcm4gaW50IHNyYW5kb21fciAodW5zaWduZWQgaW50IF9fc2VlZCwgc3RydWN0IHJhbmRv
bV9kYXRhICpfX2J1Zik7CgpleHRlcm4gaW50IGluaXRzdGF0ZV9yICh1bnNpZ25lZCBpbnQgX19z
ZWVkLCB2b2lkICogX19zdGF0ZWJ1Ziwgc2l6ZV90IF9fc3RhdGVsZW4sIHN0cnVjdCByYW5kb21f
ZGF0YSAqIF9fYnVmKTsKCgoKCmV4dGVybiBpbnQgc2V0c3RhdGVfciAodm9pZCAqIF9fc3RhdGVi
dWYsIHN0cnVjdCByYW5kb21fZGF0YSAqIF9fYnVmKTsKCgoKCgoKZXh0ZXJuIGludCByYW5kICh2
b2lkKTsKCmV4dGVybiB2b2lkIHNyYW5kICh1bnNpZ25lZCBpbnQgX19zZWVkKTsKCgoKZXh0ZXJu
IGludCByYW5kX3IgKHVuc2lnbmVkIGludCAqX19zZWVkKTsKCgoKCgoKCmV4dGVybiBkb3VibGUg
ZHJhbmQ0OCAodm9pZCk7CmV4dGVybiBkb3VibGUgZXJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50
IF9feHN1YmlbM10pOwoKCmV4dGVybiBsb25nIGludCBscmFuZDQ4ICh2b2lkKTsKZXh0ZXJuIGxv
bmcgaW50IG5yYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKTsKCgpleHRlcm4g
bG9uZyBpbnQgbXJhbmQ0OCAodm9pZCk7CmV4dGVybiBsb25nIGludCBqcmFuZDQ4ICh1bnNpZ25l
ZCBzaG9ydCBpbnQgX194c3ViaVszXSk7CgoKZXh0ZXJuIHZvaWQgc3JhbmQ0OCAobG9uZyBpbnQg
X19zZWVkdmFsKTsKZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGludCAqc2VlZDQ4ICh1bnNpZ25lZCBz
aG9ydCBpbnQgX19zZWVkMTZ2WzNdKTsKZXh0ZXJuIHZvaWQgbGNvbmc0OCAodW5zaWduZWQgc2hv
cnQgaW50IF9fcGFyYW1bN10pOwoKCnN0cnVjdCBkcmFuZDQ4X2RhdGEKICB7CiAgICB1bnNpZ25l
ZCBzaG9ydCBpbnQgeFszXTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBhWzNdOwogICAgdW5zaWdu
ZWQgc2hvcnQgaW50IGM7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgb2xkX3hbM107CiAgICBpbnQg
aW5pdDsKICB9OwoKCgpleHRlcm4gaW50IGRyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAq
IF9fYnVmZmVyLCBkb3VibGUgKiBfX3Jlc3VsdCk7CgpleHRlcm4gaW50IGVyYW5kNDhfciAodW5z
aWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKiBfX2J1ZmZl
ciwgZG91YmxlICogX19yZXN1bHQpOwoKCgoKZXh0ZXJuIGludCBscmFuZDQ4X3IgKHN0cnVjdCBk
cmFuZDQ4X2RhdGEgKiBfX2J1ZmZlciwgbG9uZyBpbnQgKiBfX3Jlc3VsdCk7CgpleHRlcm4gaW50
IG5yYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sIHN0cnVjdCBkcmFuZDQ4
X2RhdGEgKiBfX2J1ZmZlciwgbG9uZyBpbnQgKiBfX3Jlc3VsdCk7CgoKCgpleHRlcm4gaW50IG1y
YW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqIF9fYnVmZmVyLCBsb25nIGludCAqIF9fcmVz
dWx0KTsKCmV4dGVybiBpbnQganJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVsz
XSwgc3RydWN0IGRyYW5kNDhfZGF0YSAqIF9fYnVmZmVyLCBsb25nIGludCAqIF9fcmVzdWx0KTsK
CgoKCmV4dGVybiBpbnQgc3JhbmQ0OF9yIChsb25nIGludCBfX3NlZWR2YWwsIHN0cnVjdCBkcmFu
ZDQ4X2RhdGEgKl9fYnVmZmVyKTsKCmV4dGVybiBpbnQgc2VlZDQ4X3IgKHVuc2lnbmVkIHNob3J0
IGludCBfX3NlZWQxNnZbM10sIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKTsKCgpleHRl
cm4gaW50IGxjb25nNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10sIHN0cnVjdCBk
cmFuZDQ4X2RhdGEgKl9fYnVmZmVyKTsKIyA0NzQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpl
eHRlcm4gdm9pZCAqIG1hbGxvYyAoc2l6ZV90IF9fc2l6ZSk7CgpleHRlcm4gdm9pZCAqIGNhbGxv
YyAoc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUpOwoKCgoKCmV4dGVybiB2b2lkICogcmVh
bGxvYyAodm9pZCAqIF9fcHRyLCBzaXplX3QgX19zaXplKTsKCmV4dGVybiB2b2lkIGZyZWUgKHZv
aWQgKiBfX3B0cik7CgoKCmV4dGVybiB2b2lkIGNmcmVlICh2b2lkICogX19wdHIpOwoKCgojIDEg
Ii91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIg
MwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2Fs
bG9jYS5oIiAyIDMKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1n
bnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgi
IDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKZXh0ZXJuIHZvaWQgKiBhbGxvY2EgKHNpemVfdCBfX3Np
emUpOwoKCgoKCn0KIyA0OTMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgpleHRlcm4g
dm9pZCAqIHZhbGxvYyAoc2l6ZV90IF9fc2l6ZSk7CgoKCgpleHRlcm4gdm9pZCBhYm9ydCAodm9p
ZCkgOwoKCgpleHRlcm4gaW50IGF0ZXhpdCAodm9pZCAoKl9fZnVuYykgKHZvaWQpKTsKCgoKCmV4
dGVybiBpbnQgX19vbl9leGl0ICh2b2lkICgqX19mdW5jKSAoaW50IF9fc3RhdHVzLCB2b2lkICog
X19hcmcpLCB2b2lkICogX19hcmcpOwoKZXh0ZXJuIGludCBvbl9leGl0ICh2b2lkICgqX19mdW5j
KSAoaW50IF9fc3RhdHVzLCB2b2lkICogX19hcmcpLCB2b2lkICogX19hcmcpOwoKCgoKCgpleHRl
cm4gdm9pZCBleGl0IChpbnQgX19zdGF0dXMpIDsKCgoKCmV4dGVybiB2b2lkIF9FeGl0IChpbnQg
X19zdGF0dXMpIDsKCgoKCmV4dGVybiBjaGFyICpnZXRlbnYgKGNvbnN0IGNoYXIgKl9fbmFtZSk7
CgoKCmV4dGVybiBjaGFyICpfX3NlY3VyZV9nZXRlbnYgKGNvbnN0IGNoYXIgKl9fbmFtZSk7CgoK
CgoKZXh0ZXJuIGludCBwdXRlbnYgKGNvbnN0IGNoYXIgKl9fc3RyaW5nKTsKCgoKCgpleHRlcm4g
aW50IHNldGVudiAoY29uc3QgY2hhciAqX19uYW1lLCBjb25zdCBjaGFyICpfX3ZhbHVlLCBpbnQg
X19yZXBsYWNlKTsKCgoKZXh0ZXJuIHZvaWQgdW5zZXRlbnYgKGNvbnN0IGNoYXIgKl9fbmFtZSk7
CgoKCgoKCmV4dGVybiBpbnQgY2xlYXJlbnYgKHZvaWQpOwojIDU2NiAiL3Vzci9pbmNsdWRlL3N0
ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpta3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpOwoKCgoKCgpl
eHRlcm4gaW50IG1rc3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpOwoKCgoKZXh0ZXJuIGludCBzeXN0
ZW0gKGNvbnN0IGNoYXIgKl9fY29tbWFuZCk7CgoKCgoKCmV4dGVybiBjaGFyICpjYW5vbmljYWxp
emVfZmlsZV9uYW1lIChjb25zdCBjaGFyICpfX25hbWUpOwojIDU5NSAiL3Vzci9pbmNsdWRlL3N0
ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpyZWFscGF0aCAoY29uc3QgY2hhciAqIF9fbmFtZSwgY2hh
ciAqIF9fcmVzb2x2ZWQpOwoKCgoKCgoKdHlwZWRlZiBpbnQgKCpfX2NvbXBhcl9mbl90KSAoY29u
c3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOwoKCnR5cGVkZWYgX19jb21wYXJfZm5fdCBjb21wYXJp
c29uX2ZuX3Q7CgoKCgoKZXh0ZXJuIHZvaWQgKiBic2VhcmNoIChjb25zdCB2b2lkICogX19rZXks
IGNvbnN0IHZvaWQgKiBfX2Jhc2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLCBfX2Nv
bXBhcl9mbl90IF9fY29tcGFyKTsKCgoKCgpleHRlcm4gdm9pZCBxc29ydCAodm9pZCAqIF9fYmFz
ZSwgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsIF9fY29tcGFyX2ZuX3QgX19jb21wYXIp
OwoKCgoKZXh0ZXJuIGludCBhYnMgKGludCBfX3gpIDsKZXh0ZXJuIGxvbmcgaW50IGxhYnMgKGxv
bmcgaW50IF9feCkgOwoKICAgICAgICAgICAgICBleHRlcm4gbG9uZyBsb25nIGludCBsbGFicyAo
bG9uZyBsb25nIGludCBfX3gpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoK
CgpleHRlcm4gZGl2X3QgZGl2IChpbnQgX19udW1lciwgaW50IF9fZGVub20pIDsKZXh0ZXJuIGxk
aXZfdCBsZGl2IChsb25nIGludCBfX251bWVyLCBsb25nIGludCBfX2Rlbm9tKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgZXh0ZXJuIGxsZGl2X3QgbGxk
aXYgKGxvbmcgbG9uZyBpbnQgX19udW1lciwgbG9uZyBsb25nIGludCBfX2Rlbm9tKQoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMgNjUxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi
IDMKZXh0ZXJuIGNoYXIgKmVjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAq
IF9fZGVjcHQsIGludCAqIF9fc2lnbik7CgoKCgoKZXh0ZXJuIGNoYXIgKmZjdnQgKGRvdWJsZSBf
X3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqIF9fZGVjcHQsIGludCAqIF9fc2lnbik7CgoKCgoK
ZXh0ZXJuIGNoYXIgKmdjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9f
YnVmKTsKCgpleHRlcm4gY2hhciAqcWVjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25k
aWdpdCwgaW50ICogX19kZWNwdCwgaW50ICogX19zaWduKTsKCmV4dGVybiBjaGFyICpxZmN2dCAo
bG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKiBfX2RlY3B0LCBpbnQgKiBf
X3NpZ24pOwoKZXh0ZXJuIGNoYXIgKnFnY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19u
ZGlnaXQsIGNoYXIgKl9fYnVmKTsKCgoKCgpleHRlcm4gaW50IGVjdnRfciAoZG91YmxlIF9fdmFs
dWUsIGludCBfX25kaWdpdCwgaW50ICogX19kZWNwdCwgaW50ICogX19zaWduLCBjaGFyICogX19i
dWYsIHNpemVfdCBfX2xlbik7CgoKZXh0ZXJuIGludCBmY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBp
bnQgX19uZGlnaXQsIGludCAqIF9fZGVjcHQsIGludCAqIF9fc2lnbiwgY2hhciAqIF9fYnVmLCBz
aXplX3QgX19sZW4pOwoKCgpleHRlcm4gaW50IHFlY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUs
IGludCBfX25kaWdpdCwgaW50ICogX19kZWNwdCwgaW50ICogX19zaWduLCBjaGFyICogX19idWYs
IHNpemVfdCBfX2xlbik7CgoKZXh0ZXJuIGludCBxZmN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVl
LCBpbnQgX19uZGlnaXQsIGludCAqIF9fZGVjcHQsIGludCAqIF9fc2lnbiwgY2hhciAqIF9fYnVm
LCBzaXplX3QgX19sZW4pOwojIDY5NSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBp
bnQgbWJsZW4gKGNvbnN0IGNoYXIgKl9fcywgc2l6ZV90IF9fbik7CgoKZXh0ZXJuIGludCBtYnRv
d2MgKHdjaGFyX3QgKiBfX3B3YywgY29uc3QgY2hhciAqIF9fcywgc2l6ZV90IF9fbik7CgoKCmV4
dGVybiBpbnQgd2N0b21iIChjaGFyICpfX3MsIHdjaGFyX3QgX193Y2hhcik7CgoKCmV4dGVybiBz
aXplX3QgbWJzdG93Y3MgKHdjaGFyX3QgKiBfX3B3Y3MsIGNvbnN0IGNoYXIgKiBfX3MsIHNpemVf
dCBfX24pOwoKCmV4dGVybiBzaXplX3Qgd2NzdG9tYnMgKGNoYXIgKiBfX3MsIGNvbnN0IHdjaGFy
X3QgKiBfX3B3Y3MsIHNpemVfdCBfX24pOwojIDcxOCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAz
CmV4dGVybiBpbnQgcnBtYXRjaCAoY29uc3QgY2hhciAqX19yZXNwb25zZSk7CiMgNzI5ICIvdXNy
L2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGludCBnZXRzdWJvcHQgKGNoYXIgKiogX19vcHRp
b25wLCBjb25zdCBjaGFyICpjb25zdCAqIF9fdG9rZW5zLCBjaGFyICoqIF9fdmFsdWVwKTsKIyA3
MzggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gdm9pZCBzZXRrZXkgKGNvbnN0IGNo
YXIgKl9fa2V5KTsKCgoKCgoKCmV4dGVybiBpbnQgZ3JhbnRwdCAoaW50IF9fZmQpOwoKCgpleHRl
cm4gaW50IHVubG9ja3B0IChpbnQgX19mZCk7CgoKCgpleHRlcm4gY2hhciAqcHRzbmFtZSAoaW50
IF9fZmQpOwoKCgoKCgpleHRlcm4gaW50IHB0c25hbWVfciAoaW50IF9fZmQsIGNoYXIgKl9fYnVm
LCBzaXplX3QgX19idWZsZW4pOwoKCmV4dGVybiBpbnQgZ2V0cHQgKHZvaWQpOwoKCgoKCn0KIyAx
NCAiLi4vaW5jbHVkZS9zdGRhZnguaCIgMgojIDEgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAxIDMK
IyAyNyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMu
aCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgoj
IDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUv
c3RkZGVmLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCgojIDEgIi91
c3IvbG9jYWwvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkYXJn
LmgiIDEgMwojIDQzICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMu
MC9pbmNsdWRlL3N0ZGFyZy5oIiAzCnR5cGVkZWYgX19idWlsdGluX3ZhX2xpc3QgX19nbnVjX3Zh
X2xpc3Q7CiMgMTEwICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMu
MC9pbmNsdWRlL3N0ZGFyZy5oIiAzCnR5cGVkZWYgX19nbnVjX3ZhX2xpc3QgdmFfbGlzdDsKIyAz
OSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBl
cy5oIiAxIDMKIyA0MSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgoKCgoKdHlwZWRlZiBz
dHJ1Y3QgX0lPX0ZJTEUgRklMRTsKIyA1NyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIv
dXNyL2luY2x1ZGUvbGliaW8uaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiMg
MSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAxIDMKIyA5ICIvdXNyL2luY2x1ZGUvX0dfY29u
ZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAxMCAiL3Vzci9p
bmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKCgoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9p
NTg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzEyICIvdXNyL2xv
Y2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAz
CnR5cGVkZWYgdW5zaWduZWQgaW50IHdpbnRfdDsKIyAxNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZp
Zy5oIiAyIDMKIyAzNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCnR5cGVkZWYgaW50IF9H
X2ludDE2X3QgOwp0eXBlZGVmIGludCBfR19pbnQzMl90IDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQg
X0dfdWludDE2X3QgOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MzJfdCA7CiMgMzEgIi91
c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKIyA0OCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKIyAx
ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0
ZGFyZy5oIiAxIDMKIyA0OSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwojIDE1NCAiL3Vzci9p
bmNsdWRlL2xpYmlvLmgiIDMKc3RydWN0IF9JT19qdW1wX3Q7IHN0cnVjdCBfSU9fRklMRTsKIyAx
NjQgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnR5cGVkZWYgdm9pZCBfSU9fbG9ja190OwoKCgoK
CnN0cnVjdCBfSU9fbWFya2VyIHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7CiAgc3RydWN0
IF9JT19GSUxFICpfc2J1ZjsKCgoKICBpbnQgX3BvczsKIyAxODcgIi91c3IvaW5jbHVkZS9saWJp
by5oIiAzCn07CgpzdHJ1Y3QgX0lPX0ZJTEUgewogIGludCBfZmxhZ3M7CgoKCgogIGNoYXIqIF9J
T19yZWFkX3B0cjsKICBjaGFyKiBfSU9fcmVhZF9lbmQ7CiAgY2hhciogX0lPX3JlYWRfYmFzZTsK
ICBjaGFyKiBfSU9fd3JpdGVfYmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfcHRyOwogIGNoYXIqIF9J
T193cml0ZV9lbmQ7CiAgY2hhciogX0lPX2J1Zl9iYXNlOwogIGNoYXIqIF9JT19idWZfZW5kOwoK
ICBjaGFyICpfSU9fc2F2ZV9iYXNlOwogIGNoYXIgKl9JT19iYWNrdXBfYmFzZTsKICBjaGFyICpf
SU9fc2F2ZV9lbmQ7CgogIHN0cnVjdCBfSU9fbWFya2VyICpfbWFya2VyczsKCiAgc3RydWN0IF9J
T19GSUxFICpfY2hhaW47CgogIGludCBfZmlsZW5vOwogIGludCBfYmxrc2l6ZTsKICBfX29mZl90
IF9vbGRfb2Zmc2V0OwoKCgogIHVuc2lnbmVkIHNob3J0IF9jdXJfY29sdW1uOwogIHNpZ25lZCBj
aGFyIF92dGFibGVfb2Zmc2V0OwogIGNoYXIgX3Nob3J0YnVmWzFdOwoKCgogIF9JT19sb2NrX3Qg
Kl9sb2NrOwojIDIzMyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKICBfX29mZjY0X3QgX29mZnNl
dDsKCiAgaW50IF91bnVzZWQyWzE2XTsKCn07CgoKCgoKc3RydWN0IF9JT19GSUxFX3BsdXM7CmV4
dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGluXzsKZXh0ZXJuIHN0cnVjdCBf
SU9fRklMRV9wbHVzIF9JT18yXzFfc3Rkb3V0XzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVz
IF9JT18yXzFfc3RkZXJyXzsKIyAyNjIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnR5cGVkZWYg
X19zc2l6ZV90IF9faW9fcmVhZF9mbiAodm9pZCAqIF9fY29va2llLCBjaGFyICpfX2J1Ziwgc2l6
ZV90IF9fbmJ5dGVzKTsKIyAyNzEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnR5cGVkZWYgX19z
c2l6ZV90IF9faW9fd3JpdGVfZm4gKHZvaWQgKiBfX2Nvb2tpZSwgY29uc3QgY2hhciAqX19idWYs
IHNpemVfdCBfX24pOwojIDI4MCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRlZiBpbnQg
X19pb19zZWVrX2ZuICh2b2lkICogX19jb29raWUsIF9fb2ZmX3QgX19wb3MsIGludCBfX3cpOwoK
CnR5cGVkZWYgaW50IF9faW9fY2xvc2VfZm4gKHZvaWQgKiBfX2Nvb2tpZSk7CgoKCgp0eXBlZGVm
IF9faW9fcmVhZF9mbiBjb29raWVfcmVhZF9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fd3JpdGVf
Zm4gY29va2llX3dyaXRlX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19zZWVrX2ZuIGNvb2tpZV9z
ZWVrX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19jbG9zZV9mbiBjb29raWVfY2xvc2VfZnVuY3Rp
b25fdDsKCgp0eXBlZGVmIHN0cnVjdAp7CiAgX19pb19yZWFkX2ZuICpyZWFkOwogIF9faW9fd3Jp
dGVfZm4gKndyaXRlOwogIF9faW9fc2Vla19mbiAqc2VlazsKICBfX2lvX2Nsb3NlX2ZuICpjbG9z
ZTsKfSBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190Owp0eXBlZGVmIF9JT19jb29raWVfaW9fZnVu
Y3Rpb25zX3QgY29va2llX2lvX2Z1bmN0aW9uc190OwoKCnN0cnVjdCBfSU9fY29va2llX2ZpbGUK
ewogIHN0cnVjdCBfSU9fRklMRSBfX2ZpbGU7CiAgY29uc3Qgdm9pZCAqX192dGFibGU7CiAgdm9p
ZCAqX19jb29raWU7CiAgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2lvX2Z1bmN0aW9uczsK
fTsKCgoKCmV4dGVybiAiQyIgewoKCmV4dGVybiBpbnQgX191bmRlcmZsb3cgKF9JT19GSUxFICop
OwpleHRlcm4gaW50IF9fdWZsb3cgKF9JT19GSUxFICopOwpleHRlcm4gaW50IF9fb3ZlcmZsb3cg
KF9JT19GSUxFICosIGludCk7CiMgMzM3ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4g
aW50IF9JT19nZXRjIChfSU9fRklMRSAqX19mcCk7CmV4dGVybiBpbnQgX0lPX3B1dGMgKGludCBf
X2MsIF9JT19GSUxFICpfX2ZwKTsKZXh0ZXJuIGludCBfSU9fZmVvZiAoX0lPX0ZJTEUgKl9fZnAp
OwpleHRlcm4gaW50IF9JT19mZXJyb3IgKF9JT19GSUxFICpfX2ZwKTsKCmV4dGVybiBpbnQgX0lP
X3BlZWtjX2xvY2tlZCAoX0lPX0ZJTEUgKl9fZnApOwoKCgoKCmV4dGVybiB2b2lkIF9JT19mbG9j
a2ZpbGUgKF9JT19GSUxFICopOwpleHRlcm4gdm9pZCBfSU9fZnVubG9ja2ZpbGUgKF9JT19GSUxF
ICopOwpleHRlcm4gaW50IF9JT19mdHJ5bG9ja2ZpbGUgKF9JT19GSUxFICopOwojIDM2MyAiL3Vz
ci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAoX0lPX0ZJTEUgKiAs
IGNvbnN0IGNoYXIgKiAsIF9fZ251Y192YV9saXN0LCBpbnQgKik7CgpleHRlcm4gaW50IF9JT192
ZnByaW50ZiAoX0lPX0ZJTEUgKiwgY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7CgpleHRl
cm4gX19zc2l6ZV90IF9JT19wYWRuIChfSU9fRklMRSAqLCBpbnQsIF9fc3NpemVfdCk7CmV4dGVy
biBzaXplX3QgX0lPX3NnZXRuIChfSU9fRklMRSAqLCB2b2lkICosIHNpemVfdCk7CgpleHRlcm4g
X19vZmY2NF90IF9JT19zZWVrb2ZmIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCwgaW50KTsK
ZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla3BvcyAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQp
OwoKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfYmFja3VwX2FyZWEgKF9JT19GSUxFICopOwoKCn0KIyA1
OCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgp0eXBlZGVmIF9fb2ZmX3QgZnBvc190OwoK
CgoKdHlwZWRlZiBfX29mZjY0X3QgZnBvczY0X3Q7CiMgMTEwICIvdXNyL2luY2x1ZGUvc3RkaW8u
aCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIyAxMTEgIi91c3Iv
aW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKZXh0ZXJuIEZJTEUgKnN0ZGluOwpleHRlcm4gRklMRSAq
c3Rkb3V0OwpleHRlcm4gRklMRSAqc3RkZXJyOwoKCgpleHRlcm4gaW50IHJlbW92ZSAoY29uc3Qg
Y2hhciAqX19maWxlbmFtZSk7CgpleHRlcm4gaW50IHJlbmFtZSAoY29uc3QgY2hhciAqX19vbGQs
IGNvbnN0IGNoYXIgKl9fbmV3KTsKCgoKCmV4dGVybiBGSUxFICp0bXBmaWxlICh2b2lkKTsKIyAx
MzYgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBGSUxFICp0bXBmaWxlNjQgKHZvaWQp
OwoKCmV4dGVybiBjaGFyICp0bXBuYW0gKGNoYXIgKl9fcyk7CgoKCgpleHRlcm4gY2hhciAqdG1w
bmFtX3IgKGNoYXIgKl9fcyk7CiMgMTU2ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4g
Y2hhciAqdGVtcG5hbSAoY29uc3QgY2hhciAqX19kaXIsIGNvbnN0IGNoYXIgKl9fcGZ4KTsKCgoK
CmV4dGVybiBpbnQgZmNsb3NlIChGSUxFICpfX3N0cmVhbSk7CgpleHRlcm4gaW50IGZmbHVzaCAo
RklMRSAqX19zdHJlYW0pOwoKCgpleHRlcm4gaW50IGZmbHVzaF91bmxvY2tlZCAoRklMRSAqX19z
dHJlYW0pOwoKCgoKZXh0ZXJuIGludCBmY2xvc2VhbGwgKHZvaWQpOwoKCgoKCmV4dGVybiBGSUxF
ICpmb3BlbiAoY29uc3QgY2hhciAqIF9fZmlsZW5hbWUsIGNvbnN0IGNoYXIgKiBfX21vZGVzKTsK
CgpleHRlcm4gRklMRSAqZnJlb3BlbiAoY29uc3QgY2hhciAqIF9fZmlsZW5hbWUsIGNvbnN0IGNo
YXIgKiBfX21vZGVzLCBGSUxFICogX19zdHJlYW0pOwojIDE5OSAiL3Vzci9pbmNsdWRlL3N0ZGlv
LmgiIDMKZXh0ZXJuIEZJTEUgKmZvcGVuNjQgKGNvbnN0IGNoYXIgKiBfX2ZpbGVuYW1lLCBjb25z
dCBjaGFyICogX19tb2Rlcyk7CgpleHRlcm4gRklMRSAqZnJlb3BlbjY0IChjb25zdCBjaGFyICog
X19maWxlbmFtZSwgY29uc3QgY2hhciAqIF9fbW9kZXMsIEZJTEUgKiBfX3N0cmVhbSk7CgoKCgoK
CmV4dGVybiBGSUxFICpmZG9wZW4gKGludCBfX2ZkLCBjb25zdCBjaGFyICpfX21vZGVzKTsKCgoK
CgpleHRlcm4gRklMRSAqZm9wZW5jb29raWUgKHZvaWQgKiBfX21hZ2ljX2Nvb2tpZSwgY29uc3Qg
Y2hhciAqIF9fbW9kZXMsIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19pb19mdW5jcyk7CgoK
CgoKCmV4dGVybiBGSUxFICpvcGVuX21lbXN0cmVhbSAoY2hhciAqKiBfX2J1ZmxvYywgc2l6ZV90
ICogX19zaXplbG9jKTsKCgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmIChGSUxFICogX19zdHJlYW0s
IGNoYXIgKiBfX2J1Zik7CgoKCmV4dGVybiBpbnQgc2V0dmJ1ZiAoRklMRSAqIF9fc3RyZWFtLCBj
aGFyICogX19idWYsIGludCBfX21vZGVzLCBzaXplX3QgX19uKTsKCgoKCgpleHRlcm4gdm9pZCBz
ZXRidWZmZXIgKEZJTEUgKiBfX3N0cmVhbSwgY2hhciAqIF9fYnVmLCBzaXplX3QgX19zaXplKTsK
CgoKZXh0ZXJuIHZvaWQgc2V0bGluZWJ1ZiAoRklMRSAqX19zdHJlYW0pOwoKCgoKZXh0ZXJuIGlu
dCBmcHJpbnRmIChGSUxFICogX19zdHJlYW0sIGNvbnN0IGNoYXIgKiBfX2Zvcm1hdCwgLi4uKTsK
CgpleHRlcm4gaW50IHByaW50ZiAoY29uc3QgY2hhciAqIF9fZm9ybWF0LCAuLi4pOwoKZXh0ZXJu
IGludCBzcHJpbnRmIChjaGFyICogX19zLCBjb25zdCBjaGFyICogX19mb3JtYXQsIC4uLik7CgoK
CmV4dGVybiBpbnQgdmZwcmludGYgKEZJTEUgKiBfX3MsIGNvbnN0IGNoYXIgKiBfX2Zvcm1hdCwg
X19nbnVjX3ZhX2xpc3QgX19hcmcpOwoKCgpleHRlcm4gaW50IHZwcmludGYgKGNvbnN0IGNoYXIg
KiBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpOwoKCmV4dGVybiBpbnQgdnNwcmludGYg
KGNoYXIgKiBfX3MsIGNvbnN0IGNoYXIgKiBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcp
OwoKCgoKCmV4dGVybiBpbnQgc25wcmludGYgKGNoYXIgKiBfX3MsIHNpemVfdCBfX21heGxlbiwg
Y29uc3QgY2hhciAqIF9fZm9ybWF0LCAuLi4pCgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKZXh0ZXJuIGludCBfX3ZzbnByaW50ZiAoY2hhciAq
IF9fcywgc2l6ZV90IF9fbWF4bGVuLCBjb25zdCBjaGFyICogX19mb3JtYXQsIF9fZ251Y192YV9s
aXN0IF9fYXJnKQoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CmV4dGVybiBpbnQgdnNucHJpbnRmIChjaGFyICogX19zLCBzaXplX3QgX19tYXhs
ZW4sIGNvbnN0IGNoYXIgKiBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCgoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKCgpleHRl
cm4gaW50IHZhc3ByaW50ZiAoY2hhciAqKiBfX3B0ciwgY29uc3QgY2hhciAqIF9fZiwgX19nbnVj
X3ZhX2xpc3QgX19hcmcpCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwpleHRlcm4gaW50IF9fYXNwcmludGYgKGNoYXIgKiogX19wdHIsIGNvbnN0
IGNoYXIgKiBfX2ZtdCwgLi4uKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKZXh0ZXJuIGludCBhc3ByaW50ZiAoY2hhciAqKiBfX3B0ciwgY29u
c3QgY2hhciAqIF9fZm10LCAuLi4pCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKCmV4dGVybiBpbnQgdmRwcmludGYgKGludCBfX2ZkLCBjb25z
dCBjaGFyICogX19mbXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKZXh0ZXJuIGludCBkcHJpbnRmIChp
bnQgX19mZCwgY29uc3QgY2hhciAqIF9fZm10LCAuLi4pCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgpleHRlcm4gaW50IGZzY2FuZiAoRklM
RSAqIF9fc3RyZWFtLCBjb25zdCBjaGFyICogX19mb3JtYXQsIC4uLik7CgoKZXh0ZXJuIGludCBz
Y2FuZiAoY29uc3QgY2hhciAqIF9fZm9ybWF0LCAuLi4pOwoKZXh0ZXJuIGludCBzc2NhbmYgKGNv
bnN0IGNoYXIgKiBfX3MsIGNvbnN0IGNoYXIgKiBfX2Zvcm1hdCwgLi4uKTsKCgoKCmV4dGVybiBp
bnQgdmZzY2FuZiAoRklMRSAqIF9fcywgY29uc3QgY2hhciAqIF9fZm9ybWF0LCBfX2dudWNfdmFf
bGlzdCBfX2FyZykKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CgoKZXh0ZXJuIGludCB2c2NhbmYgKGNvbnN0IGNoYXIgKiBfX2Zvcm1hdCwgX19n
bnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKCgpleHRlcm4gaW50IHZzc2NhbmYgKGNvbnN0IGNoYXIgKiBfX3MsIGNv
bnN0IGNoYXIgKiBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCgoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoKZXh0ZXJuIGludCBm
Z2V0YyAoRklMRSAqX19zdHJlYW0pOwpleHRlcm4gaW50IGdldGMgKEZJTEUgKl9fc3RyZWFtKTsK
CgpleHRlcm4gaW50IGdldGNoYXIgKHZvaWQpOwoKCgoKCgoKZXh0ZXJuIGludCBnZXRjX3VubG9j
a2VkIChGSUxFICpfX3N0cmVhbSk7CmV4dGVybiBpbnQgZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCk7
CgoKCgpleHRlcm4gaW50IGZnZXRjX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSk7CgoKCgpleHRl
cm4gaW50IGZwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSk7CmV4dGVybiBpbnQgcHV0YyAo
aW50IF9fYywgRklMRSAqX19zdHJlYW0pOwoKCmV4dGVybiBpbnQgcHV0Y2hhciAoaW50IF9fYyk7
CgoKCgoKCgpleHRlcm4gaW50IGZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVh
bSk7CgoKCgpleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFt
KTsKZXh0ZXJuIGludCBwdXRjaGFyX3VubG9ja2VkIChpbnQgX19jKTsKCgoKCgpleHRlcm4gaW50
IGdldHcgKEZJTEUgKl9fc3RyZWFtKTsKCgpleHRlcm4gaW50IHB1dHcgKGludCBfX3csIEZJTEUg
Kl9fc3RyZWFtKTsKCgoKCmV4dGVybiBjaGFyICpmZ2V0cyAoY2hhciAqIF9fcywgaW50IF9fbiwg
RklMRSAqIF9fc3RyZWFtKTsKCgoKCmV4dGVybiBjaGFyICpmZ2V0c191bmxvY2tlZCAoY2hhciAq
IF9fcywgaW50IF9fbiwgRklMRSAqIF9fc3RyZWFtKTsKCgoKCgpleHRlcm4gY2hhciAqZ2V0cyAo
Y2hhciAqX19zKTsKIyA0MDkgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBfX3NzaXpl
X3QgX19nZXRkZWxpbSAoY2hhciAqKiBfX2xpbmVwdHIsIHNpemVfdCAqIF9fbiwgaW50IF9fZGVs
aW1pdGVyLCBGSUxFICogX19zdHJlYW0pOwoKCmV4dGVybiBfX3NzaXplX3QgZ2V0ZGVsaW0gKGNo
YXIgKiogX19saW5lcHRyLCBzaXplX3QgKiBfX24sIGludCBfX2RlbGltaXRlciwgRklMRSAqIF9f
c3RyZWFtKTsKCgoKCmV4dGVybiBfX3NzaXplX3QgZ2V0bGluZSAoY2hhciAqKiBfX2xpbmVwdHIs
IHNpemVfdCAqIF9fbiwgRklMRSAqIF9fc3RyZWFtKTsKCgoKCgoKZXh0ZXJuIGludCBmcHV0cyAo
Y29uc3QgY2hhciAqIF9fcywgRklMRSAqIF9fc3RyZWFtKTsKCgoKCmV4dGVybiBpbnQgZnB1dHNf
dW5sb2NrZWQgKGNvbnN0IGNoYXIgKiBfX3MsIEZJTEUgKiBfX3N0cmVhbSk7CgoKCgpleHRlcm4g
aW50IHB1dHMgKGNvbnN0IGNoYXIgKl9fcyk7CgoKCmV4dGVybiBpbnQgdW5nZXRjIChpbnQgX19j
LCBGSUxFICpfX3N0cmVhbSk7CgoKCmV4dGVybiBzaXplX3QgZnJlYWQgKHZvaWQgKiBfX3B0ciwg
c2l6ZV90IF9fc2l6ZSwgc2l6ZV90IF9fbiwgRklMRSAqIF9fc3RyZWFtKTsKCgpleHRlcm4gc2l6
ZV90IGZ3cml0ZSAoY29uc3Qgdm9pZCAqIF9fcHRyLCBzaXplX3QgX19zaXplLCBzaXplX3QgX19u
LCBGSUxFICogX19zKTsKCgoKCmV4dGVybiBzaXplX3QgZnJlYWRfdW5sb2NrZWQgKHZvaWQgKiBf
X3B0ciwgc2l6ZV90IF9fc2l6ZSwgc2l6ZV90IF9fbiwgRklMRSAqIF9fc3RyZWFtKTsKCmV4dGVy
biBzaXplX3QgZndyaXRlX3VubG9ja2VkIChjb25zdCB2b2lkICogX19wdHIsIHNpemVfdCBfX3Np
emUsIHNpemVfdCBfX24sIEZJTEUgKiBfX3N0cmVhbSk7CgoKCgoKCmV4dGVybiBpbnQgZnNlZWsg
KEZJTEUgKl9fc3RyZWFtLCBsb25nIGludCBfX29mZiwgaW50IF9fd2hlbmNlKTsKCmV4dGVybiBs
b25nIGludCBmdGVsbCAoRklMRSAqX19zdHJlYW0pOwoKZXh0ZXJuIHZvaWQgcmV3aW5kIChGSUxF
ICpfX3N0cmVhbSk7CiMgNDg5ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZz
ZWVrbyAoRklMRSAqX19zdHJlYW0sIF9fb2ZmX3QgX19vZmYsIGludCBfX3doZW5jZSk7CgpleHRl
cm4gX19vZmZfdCBmdGVsbG8gKEZJTEUgKl9fc3RyZWFtKTsKCgoKZXh0ZXJuIGludCBmZ2V0cG9z
IChGSUxFICogX19zdHJlYW0sIGZwb3NfdCAqIF9fcG9zKTsKCgpleHRlcm4gaW50IGZzZXRwb3Mg
KEZJTEUgKl9fc3RyZWFtLCBjb25zdCBmcG9zX3QgKl9fcG9zKTsKIyA1MjMgIi91c3IvaW5jbHVk
ZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZnNlZWtvNjQgKEZJTEUgKl9fc3RyZWFtLCBfX29mZjY0
X3QgX19vZmYsIGludCBfX3doZW5jZSk7CmV4dGVybiBfX29mZjY0X3QgZnRlbGxvNjQgKEZJTEUg
Kl9fc3RyZWFtKTsKCmV4dGVybiBpbnQgZmdldHBvczY0IChGSUxFICogX19zdHJlYW0sIGZwb3M2
NF90ICogX19wb3MpOwoKZXh0ZXJuIGludCBmc2V0cG9zNjQgKEZJTEUgKl9fc3RyZWFtLCBjb25z
dCBmcG9zNjRfdCAqX19wb3MpOwoKCgpleHRlcm4gdm9pZCBjbGVhcmVyciAoRklMRSAqX19zdHJl
YW0pOwoKZXh0ZXJuIGludCBmZW9mIChGSUxFICpfX3N0cmVhbSk7CgpleHRlcm4gaW50IGZlcnJv
ciAoRklMRSAqX19zdHJlYW0pOwoKCgpleHRlcm4gdm9pZCBjbGVhcmVycl91bmxvY2tlZCAoRklM
RSAqX19zdHJlYW0pOwpleHRlcm4gaW50IGZlb2ZfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKTsK
ZXh0ZXJuIGludCBmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKTsKCgoKCmV4dGVybiB2
b2lkIHBlcnJvciAoY29uc3QgY2hhciAqX19zKTsKCgoKCmV4dGVybiBpbnQgc3lzX25lcnI7CmV4
dGVybiBjb25zdCBjaGFyICpjb25zdCBzeXNfZXJybGlzdFtdOwoKCmV4dGVybiBpbnQgX3N5c19u
ZXJyOwpleHRlcm4gY29uc3QgY2hhciAqY29uc3QgX3N5c19lcnJsaXN0W107CgoKCgoKZXh0ZXJu
IGludCBmaWxlbm8gKEZJTEUgKl9fc3RyZWFtKTsKCgoKCmV4dGVybiBpbnQgZmlsZW5vX3VubG9j
a2VkIChGSUxFICpfX3N0cmVhbSk7CgoKCgoKCmV4dGVybiBGSUxFICpwb3BlbiAoY29uc3QgY2hh
ciAqX19jb21tYW5kLCBjb25zdCBjaGFyICpfX21vZGVzKTsKCgpleHRlcm4gaW50IHBjbG9zZSAo
RklMRSAqX19zdHJlYW0pOwoKCgoKCmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3MpOwoK
CgoKCmV4dGVybiBjaGFyICpjdXNlcmlkIChjaGFyICpfX3MpOwoKCgoKc3RydWN0IG9ic3RhY2s7
CgoKZXh0ZXJuIGludCBvYnN0YWNrX3ByaW50ZiAoc3RydWN0IG9ic3RhY2sgKiBfX29ic3RhY2ss
IGNvbnN0IGNoYXIgKiBfX2Zvcm1hdCwgLi4uKTsKCmV4dGVybiBpbnQgb2JzdGFja192cHJpbnRm
IChzdHJ1Y3Qgb2JzdGFjayAqIF9fb2JzdGFjaywgY29uc3QgY2hhciAqIF9fZm9ybWF0LCBfX2du
dWNfdmFfbGlzdCBfX2FyZ3MpOwojIDYxMCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJu
IHZvaWQgZmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSk7CgoKCmV4dGVybiBpbnQgZnRyeWxvY2tm
aWxlIChGSUxFICpfX3N0cmVhbSk7CgoKZXh0ZXJuIHZvaWQgZnVubG9ja2ZpbGUgKEZJTEUgKl9f
c3RyZWFtKTsKIyA2MzQgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCn0KIyAxNSAiLi4vaW5jbHVk
ZS9zdGRhZnguaCIgMgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1n
bnUvMy4wL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwojIDE2ICIuLi9pbmNsdWRlL3N0ZGFmeC5oIiAy
CiMgMSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3VuaXN0
ZC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1
ZGUvdW5pc3RkLmgiIDIgMwoKZXh0ZXJuICJDIiB7CiMgMTc1ICIvdXNyL2luY2x1ZGUvdW5pc3Rk
LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeF9vcHQuaCIgMSAzCiMgMTc2ICIvdXNy
L2luY2x1ZGUvdW5pc3RkLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2Vudmlyb25t
ZW50cy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvZW52aXJvbm1lbnRzLmgiIDMKIyAx
ICIvdXNyL2luY2x1ZGUvYml0cy93b3Jkc2l6ZS5oIiAxIDMKIyAyNCAiL3Vzci9pbmNsdWRlL2Jp
dHMvZW52aXJvbm1lbnRzLmgiIDIgMwojIDE4MCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMK
IyAxOTAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5
cGVzLmgiIDEgMwojIDE5MSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMKIyAxOTkgIi91c3Iv
aW5jbHVkZS91bmlzdGQuaCIgMwojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTU4Ni1wYy1s
aW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDIwMCAiL3Vzci9pbmNsdWRlL3Vu
aXN0ZC5oIiAyIDMKIyAyMzUgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwp0eXBlZGVmIF9faW50
cHRyX3QgaW50cHRyX3Q7CiMgMjQ4ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGlu
dCBhY2Nlc3MgKGNvbnN0IGNoYXIgKl9fbmFtZSwgaW50IF9fdHlwZSk7CgoKCgpleHRlcm4gaW50
IGV1aWRhY2Nlc3MgKGNvbnN0IGNoYXIgKl9fbmFtZSwgaW50IF9fdHlwZSk7CiMgMjc3ICIvdXNy
L2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIF9fb2ZmX3QgX19sc2VlayAoaW50IF9fZmQsIF9f
b2ZmX3QgX19vZmZzZXQsIGludCBfX3doZW5jZSk7CgpleHRlcm4gX19vZmZfdCBsc2VlayAoaW50
IF9fZmQsIF9fb2ZmX3QgX19vZmZzZXQsIGludCBfX3doZW5jZSk7CiMgMjkxICIvdXNyL2luY2x1
ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIF9fb2ZmNjRfdCBsc2VlazY0IChpbnQgX19mZCwgX19vZmY2
NF90IF9fb2Zmc2V0LCBpbnQgX193aGVuY2UpOwoKCgpleHRlcm4gaW50IF9fY2xvc2UgKGludCBf
X2ZkKTsKZXh0ZXJuIGludCBjbG9zZSAoaW50IF9fZmQpOwoKCgpleHRlcm4gc3NpemVfdCBfX3Jl
YWQgKGludCBfX2ZkLCB2b2lkICogX19idWYsIHNpemVfdCBfX25ieXRlcyk7CmV4dGVybiBzc2l6
ZV90IHJlYWQgKGludCBfX2ZkLCB2b2lkICogX19idWYsIHNpemVfdCBfX25ieXRlcyk7CgoKZXh0
ZXJuIHNzaXplX3QgX193cml0ZSAoaW50IF9fZmQsIGNvbnN0IHZvaWQgKiBfX2J1Ziwgc2l6ZV90
IF9fbik7CmV4dGVybiBzc2l6ZV90IHdyaXRlIChpbnQgX19mZCwgY29uc3Qgdm9pZCAqIF9fYnVm
LCBzaXplX3QgX19uKTsKCgoKCgpleHRlcm4gc3NpemVfdCBfX3ByZWFkNjQgKGludCBfX2ZkLCB2
b2lkICogX19idWYsIHNpemVfdCBfX25ieXRlcywgX19vZmY2NF90IF9fb2Zmc2V0KTsKCgoKZXh0
ZXJuIHNzaXplX3QgX19wd3JpdGU2NCAoaW50IF9fZmQsIGNvbnN0IHZvaWQgKiBfX2J1Ziwgc2l6
ZV90IF9fbiwgX19vZmY2NF90IF9fb2Zmc2V0KTsKCgoKZXh0ZXJuIHNzaXplX3QgcHJlYWQgKGlu
dCBfX2ZkLCB2b2lkICogX19idWYsIHNpemVfdCBfX25ieXRlcywgX19vZmZfdCBfX29mZnNldCk7
CgpleHRlcm4gc3NpemVfdCBwd3JpdGUgKGludCBfX2ZkLCBjb25zdCB2b2lkICogX19idWYsIHNp
emVfdCBfX24sIF9fb2ZmX3QgX19vZmZzZXQpOwojIDMzOCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5o
IiAzCmV4dGVybiBzc2l6ZV90IHByZWFkNjQgKGludCBfX2ZkLCB2b2lkICogX19idWYsIHNpemVf
dCBfX25ieXRlcywgX19vZmY2NF90IF9fb2Zmc2V0KTsKCmV4dGVybiBzc2l6ZV90IHB3cml0ZTY0
IChpbnQgX19mZCwgY29uc3Qgdm9pZCAqIF9fYnVmLCBzaXplX3QgX19uLCBfX29mZjY0X3QgX19v
ZmZzZXQpOwojIDM0OSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgcGlwZSAo
aW50IF9fcGlwZWRlc1syXSk7CiMgMzU4ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJu
IHVuc2lnbmVkIGludCBhbGFybSAodW5zaWduZWQgaW50IF9fc2Vjb25kcyk7CiMgMzY3ICIvdXNy
L2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIHVuc2lnbmVkIGludCBzbGVlcCAodW5zaWduZWQg
aW50IF9fc2Vjb25kcyk7CgoKCgoKCmV4dGVybiB1bnNpZ25lZCBpbnQgdWFsYXJtICh1bnNpZ25l
ZCBpbnQgX192YWx1ZSwgdW5zaWduZWQgaW50IF9faW50ZXJ2YWwpOwoKCgoKZXh0ZXJuIHZvaWQg
dXNsZWVwICh1bnNpZ25lZCBpbnQgX191c2Vjb25kcyk7CgoKCgoKZXh0ZXJuIGludCBwYXVzZSAo
dm9pZCk7CgoKCmV4dGVybiBpbnQgY2hvd24gKGNvbnN0IGNoYXIgKl9fZmlsZSwgX191aWRfdCBf
X293bmVyLCBfX2dpZF90IF9fZ3JvdXApOwoKCgoKZXh0ZXJuIGludCBmY2hvd24gKGludCBfX2Zk
LCBfX3VpZF90IF9fb3duZXIsIF9fZ2lkX3QgX19ncm91cCk7CgoKCgpleHRlcm4gaW50IGxjaG93
biAoY29uc3QgY2hhciAqX19maWxlLCBfX3VpZF90IF9fb3duZXIsIF9fZ2lkX3QgX19ncm91cCk7
CgoKCgoKZXh0ZXJuIGludCBjaGRpciAoY29uc3QgY2hhciAqX19wYXRoKTsKCgoKZXh0ZXJuIGlu
dCBmY2hkaXIgKGludCBfX2ZkKTsKIyA0MTkgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRl
cm4gY2hhciAqZ2V0Y3dkIChjaGFyICpfX2J1Ziwgc2l6ZV90IF9fc2l6ZSk7CgoKCgoKZXh0ZXJu
IGNoYXIgKmdldF9jdXJyZW50X2Rpcl9uYW1lICh2b2lkKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmdl
dHdkIChjaGFyICpfX2J1Zik7CgoKCgpleHRlcm4gaW50IGR1cCAoaW50IF9fZmQpOwoKCmV4dGVy
biBpbnQgZHVwMiAoaW50IF9fZmQsIGludCBfX2ZkMik7CgoKZXh0ZXJuIGNoYXIgKipfX2Vudmly
b247CgpleHRlcm4gY2hhciAqKmVudmlyb247CgoKCgoKZXh0ZXJuIGludCBleGVjdmUgKGNvbnN0
IGNoYXIgKl9fcGF0aCwgY2hhciAqY29uc3QgX19hcmd2W10sIGNoYXIgKmNvbnN0IF9fZW52cFtd
KTsKCgoKCgpleHRlcm4gaW50IGZleGVjdmUgKGludCBfX2ZkLCBjaGFyICpjb25zdCBfX2FyZ3Zb
XSwgY2hhciAqY29uc3QgX19lbnZwW10pOwoKCgoKCgpleHRlcm4gaW50IGV4ZWN2IChjb25zdCBj
aGFyICpfX3BhdGgsIGNoYXIgKmNvbnN0IF9fYXJndltdKTsKCgoKZXh0ZXJuIGludCBleGVjbGUg
KGNvbnN0IGNoYXIgKl9fcGF0aCwgY29uc3QgY2hhciAqX19hcmcsIC4uLik7CgoKCmV4dGVybiBp
bnQgZXhlY2wgKGNvbnN0IGNoYXIgKl9fcGF0aCwgY29uc3QgY2hhciAqX19hcmcsIC4uLik7CgoK
CmV4dGVybiBpbnQgZXhlY3ZwIChjb25zdCBjaGFyICpfX2ZpbGUsIGNoYXIgKmNvbnN0IF9fYXJn
dltdKTsKCgoKCmV4dGVybiBpbnQgZXhlY2xwIChjb25zdCBjaGFyICpfX2ZpbGUsIGNvbnN0IGNo
YXIgKl9fYXJnLCAuLi4pOwoKCgoKZXh0ZXJuIGludCBuaWNlIChpbnQgX19pbmMpOwoKCgoKZXh0
ZXJuIHZvaWQgX2V4aXQgKGludCBfX3N0YXR1cykgOwoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvY29uZm5hbWUuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9iaXRzL2NvbmZuYW1lLmgiIDMK
ZW51bQogIHsKICAgIF9QQ19MSU5LX01BWCwKCiAgICBfUENfTUFYX0NBTk9OLAoKICAgIF9QQ19N
QVhfSU5QVVQsCgogICAgX1BDX05BTUVfTUFYLAoKICAgIF9QQ19QQVRIX01BWCwKCiAgICBfUENf
UElQRV9CVUYsCgogICAgX1BDX0NIT1dOX1JFU1RSSUNURUQsCgogICAgX1BDX05PX1RSVU5DLAoK
ICAgIF9QQ19WRElTQUJMRSwKCiAgICBfUENfU1lOQ19JTywKCiAgICBfUENfQVNZTkNfSU8sCgog
ICAgX1BDX1BSSU9fSU8sCgogICAgX1BDX1NPQ0tfTUFYQlVGLAoKICAgIF9QQ19GSUxFU0laRUJJ
VFMKCiAgfTsKCgplbnVtCiAgewogICAgX1NDX0FSR19NQVgsCgogICAgX1NDX0NISUxEX01BWCwK
CiAgICBfU0NfQ0xLX1RDSywKCiAgICBfU0NfTkdST1VQU19NQVgsCgogICAgX1NDX09QRU5fTUFY
LAoKICAgIF9TQ19TVFJFQU1fTUFYLAoKICAgIF9TQ19UWk5BTUVfTUFYLAoKICAgIF9TQ19KT0Jf
Q09OVFJPTCwKCiAgICBfU0NfU0FWRURfSURTLAoKICAgIF9TQ19SRUFMVElNRV9TSUdOQUxTLAoK
ICAgIF9TQ19QUklPUklUWV9TQ0hFRFVMSU5HLAoKICAgIF9TQ19USU1FUlMsCgogICAgX1NDX0FT
WU5DSFJPTk9VU19JTywKCiAgICBfU0NfUFJJT1JJVElaRURfSU8sCgogICAgX1NDX1NZTkNIUk9O
SVpFRF9JTywKCiAgICBfU0NfRlNZTkMsCgogICAgX1NDX01BUFBFRF9GSUxFUywKCiAgICBfU0Nf
TUVNTE9DSywKCiAgICBfU0NfTUVNTE9DS19SQU5HRSwKCiAgICBfU0NfTUVNT1JZX1BST1RFQ1RJ
T04sCgogICAgX1NDX01FU1NBR0VfUEFTU0lORywKCiAgICBfU0NfU0VNQVBIT1JFUywKCiAgICBf
U0NfU0hBUkVEX01FTU9SWV9PQkpFQ1RTLAoKICAgIF9TQ19BSU9fTElTVElPX01BWCwKCiAgICBf
U0NfQUlPX01BWCwKCiAgICBfU0NfQUlPX1BSSU9fREVMVEFfTUFYLAoKICAgIF9TQ19ERUxBWVRJ
TUVSX01BWCwKCiAgICBfU0NfTVFfT1BFTl9NQVgsCgogICAgX1NDX01RX1BSSU9fTUFYLAoKICAg
IF9TQ19WRVJTSU9OLAoKICAgIF9TQ19QQUdFU0laRSwKCgogICAgX1NDX1JUU0lHX01BWCwKCiAg
ICBfU0NfU0VNX05TRU1TX01BWCwKCiAgICBfU0NfU0VNX1ZBTFVFX01BWCwKCiAgICBfU0NfU0lH
UVVFVUVfTUFYLAoKICAgIF9TQ19USU1FUl9NQVgsCgoKCgogICAgX1NDX0JDX0JBU0VfTUFYLAoK
ICAgIF9TQ19CQ19ESU1fTUFYLAoKICAgIF9TQ19CQ19TQ0FMRV9NQVgsCgogICAgX1NDX0JDX1NU
UklOR19NQVgsCgogICAgX1NDX0NPTExfV0VJR0hUU19NQVgsCgogICAgX1NDX0VRVUlWX0NMQVNT
X01BWCwKCiAgICBfU0NfRVhQUl9ORVNUX01BWCwKCiAgICBfU0NfTElORV9NQVgsCgogICAgX1ND
X1JFX0RVUF9NQVgsCgogICAgX1NDX0NIQVJDTEFTU19OQU1FX01BWCwKCgogICAgX1NDXzJfVkVS
U0lPTiwKCiAgICBfU0NfMl9DX0JJTkQsCgogICAgX1NDXzJfQ19ERVYsCgogICAgX1NDXzJfRk9S
VF9ERVYsCgogICAgX1NDXzJfRk9SVF9SVU4sCgogICAgX1NDXzJfU1dfREVWLAoKICAgIF9TQ18y
X0xPQ0FMRURFRiwKCgogICAgX1NDX1BJSSwKCiAgICBfU0NfUElJX1hUSSwKCiAgICBfU0NfUElJ
X1NPQ0tFVCwKCiAgICBfU0NfUElJX0lOVEVSTkVULAoKICAgIF9TQ19QSUlfT1NJLAoKICAgIF9T
Q19QT0xMLAoKICAgIF9TQ19TRUxFQ1QsCgogICAgX1NDX1VJT19NQVhJT1YsCgogICAgX1NDX1BJ
SV9JTlRFUk5FVF9TVFJFQU0sCgogICAgX1NDX1BJSV9JTlRFUk5FVF9ER1JBTSwKCiAgICBfU0Nf
UElJX09TSV9DT1RTLAoKICAgIF9TQ19QSUlfT1NJX0NMVFMsCgogICAgX1NDX1BJSV9PU0lfTSwK
CiAgICBfU0NfVF9JT1ZfTUFYLAoKCgogICAgX1NDX1RIUkVBRFMsCgogICAgX1NDX1RIUkVBRF9T
QUZFX0ZVTkNUSU9OUywKCiAgICBfU0NfR0VUR1JfUl9TSVpFX01BWCwKCiAgICBfU0NfR0VUUFdf
Ul9TSVpFX01BWCwKCiAgICBfU0NfTE9HSU5fTkFNRV9NQVgsCgogICAgX1NDX1RUWV9OQU1FX01B
WCwKCiAgICBfU0NfVEhSRUFEX0RFU1RSVUNUT1JfSVRFUkFUSU9OUywKCiAgICBfU0NfVEhSRUFE
X0tFWVNfTUFYLAoKICAgIF9TQ19USFJFQURfU1RBQ0tfTUlOLAoKICAgIF9TQ19USFJFQURfVEhS
RUFEU19NQVgsCgogICAgX1NDX1RIUkVBRF9BVFRSX1NUQUNLQUREUiwKCiAgICBfU0NfVEhSRUFE
X0FUVFJfU1RBQ0tTSVpFLAoKICAgIF9TQ19USFJFQURfUFJJT1JJVFlfU0NIRURVTElORywKCiAg
ICBfU0NfVEhSRUFEX1BSSU9fSU5IRVJJVCwKCiAgICBfU0NfVEhSRUFEX1BSSU9fUFJPVEVDVCwK
CiAgICBfU0NfVEhSRUFEX1BST0NFU1NfU0hBUkVELAoKCiAgICBfU0NfTlBST0NFU1NPUlNfQ09O
RiwKCiAgICBfU0NfTlBST0NFU1NPUlNfT05MTiwKCiAgICBfU0NfUEhZU19QQUdFUywKCiAgICBf
U0NfQVZQSFlTX1BBR0VTLAoKICAgIF9TQ19BVEVYSVRfTUFYLAoKICAgIF9TQ19QQVNTX01BWCwK
CgogICAgX1NDX1hPUEVOX1ZFUlNJT04sCgogICAgX1NDX1hPUEVOX1hDVV9WRVJTSU9OLAoKICAg
IF9TQ19YT1BFTl9VTklYLAoKICAgIF9TQ19YT1BFTl9DUllQVCwKCiAgICBfU0NfWE9QRU5fRU5I
X0kxOE4sCgogICAgX1NDX1hPUEVOX1NITSwKCgogICAgX1NDXzJfQ0hBUl9URVJNLAoKICAgIF9T
Q18yX0NfVkVSU0lPTiwKCiAgICBfU0NfMl9VUEUsCgoKICAgIF9TQ19YT1BFTl9YUEcyLAoKICAg
IF9TQ19YT1BFTl9YUEczLAoKICAgIF9TQ19YT1BFTl9YUEc0LAoKCiAgICBfU0NfQ0hBUl9CSVQs
CgogICAgX1NDX0NIQVJfTUFYLAoKICAgIF9TQ19DSEFSX01JTiwKCiAgICBfU0NfSU5UX01BWCwK
CiAgICBfU0NfSU5UX01JTiwKCiAgICBfU0NfTE9OR19CSVQsCgogICAgX1NDX1dPUkRfQklULAoK
ICAgIF9TQ19NQl9MRU5fTUFYLAoKICAgIF9TQ19OWkVSTywKCiAgICBfU0NfU1NJWkVfTUFYLAoK
ICAgIF9TQ19TQ0hBUl9NQVgsCgogICAgX1NDX1NDSEFSX01JTiwKCiAgICBfU0NfU0hSVF9NQVgs
CgogICAgX1NDX1NIUlRfTUlOLAoKICAgIF9TQ19VQ0hBUl9NQVgsCgogICAgX1NDX1VJTlRfTUFY
LAoKICAgIF9TQ19VTE9OR19NQVgsCgogICAgX1NDX1VTSFJUX01BWCwKCgogICAgX1NDX05MX0FS
R01BWCwKCiAgICBfU0NfTkxfTEFOR01BWCwKCiAgICBfU0NfTkxfTVNHTUFYLAoKICAgIF9TQ19O
TF9OTUFYLAoKICAgIF9TQ19OTF9TRVRNQVgsCgogICAgX1NDX05MX1RFWFRNQVgsCgoKICAgIF9T
Q19YQlM1X0lMUDMyX09GRjMyLAoKICAgIF9TQ19YQlM1X0lMUDMyX09GRkJJRywKCiAgICBfU0Nf
WEJTNV9MUDY0X09GRjY0LAoKICAgIF9TQ19YQlM1X0xQQklHX09GRkJJRywKCgogICAgX1NDX1hP
UEVOX0xFR0FDWSwKCiAgICBfU0NfWE9QRU5fUkVBTFRJTUUsCgogICAgX1NDX1hPUEVOX1JFQUxU
SU1FX1RIUkVBRFMKCiAgfTsKCgoKCgplbnVtCiAgewogICAgX0NTX1BBVEgKCgoKCiAgICAsCiAg
ICBfQ1NfTEZTX0NGTEFHUyA9IDEwMDAsCgogICAgX0NTX0xGU19MREZMQUdTLAoKICAgIF9DU19M
RlNfTElCUywKCiAgICBfQ1NfTEZTX0xJTlRGTEFHUywKCiAgICBfQ1NfTEZTNjRfQ0ZMQUdTLAoK
ICAgIF9DU19MRlM2NF9MREZMQUdTLAoKICAgIF9DU19MRlM2NF9MSUJTLAoKICAgIF9DU19MRlM2
NF9MSU5URkxBR1MKCgoKCiAgICAsCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkYzMl9DRkxBR1MgPSAx
MTAwLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRjMyX0xERkxBR1MsCgogICAgX0NTX1hCUzVfSUxQ
MzJfT0ZGMzJfTElCUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkYzMl9MSU5URkxBR1MsCgogICAg
X0NTX1hCUzVfSUxQMzJfT0ZGQklHX0NGTEFHUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdf
TERGTEFHUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdfTElCUywKCiAgICBfQ1NfWEJTNV9J
TFAzMl9PRkZCSUdfTElOVEZMQUdTLAoKICAgIF9DU19YQlM1X0xQNjRfT0ZGNjRfQ0ZMQUdTLAoK
ICAgIF9DU19YQlM1X0xQNjRfT0ZGNjRfTERGTEFHUywKCiAgICBfQ1NfWEJTNV9MUDY0X09GRjY0
X0xJQlMsCgogICAgX0NTX1hCUzVfTFA2NF9PRkY2NF9MSU5URkxBR1MsCgogICAgX0NTX1hCUzVf
TFBCSUdfT0ZGQklHX0NGTEFHUywKCiAgICBfQ1NfWEJTNV9MUEJJR19PRkZCSUdfTERGTEFHUywK
CiAgICBfQ1NfWEJTNV9MUEJJR19PRkZCSUdfTElCUywKCiAgICBfQ1NfWEJTNV9MUEJJR19PRkZC
SUdfTElOVEZMQUdTCgoKICB9OwojIDQ5OCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMKCgpl
eHRlcm4gbG9uZyBpbnQgcGF0aGNvbmYgKGNvbnN0IGNoYXIgKl9fcGF0aCwgaW50IF9fbmFtZSk7
CgoKZXh0ZXJuIGxvbmcgaW50IGZwYXRoY29uZiAoaW50IF9fZmQsIGludCBfX25hbWUpOwoKCmV4
dGVybiBsb25nIGludCBzeXNjb25mIChpbnQgX19uYW1lKTsKCgoKZXh0ZXJuIHNpemVfdCBjb25m
c3RyIChpbnQgX19uYW1lLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fbGVuKTsKCgoKCmV4dGVybiBf
X3BpZF90IF9fZ2V0cGlkICh2b2lkKTsKZXh0ZXJuIF9fcGlkX3QgZ2V0cGlkICh2b2lkKTsKCgpl
eHRlcm4gX19waWRfdCBnZXRwcGlkICh2b2lkKTsKCgoKCmV4dGVybiBfX3BpZF90IGdldHBncnAg
KHZvaWQpOwojIDUzNCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBfX3BpZF90IF9f
Z2V0cGdpZCAoX19waWRfdCBfX3BpZCk7CgpleHRlcm4gX19waWRfdCBnZXRwZ2lkIChfX3BpZF90
IF9fcGlkKTsKCgoKCgoKZXh0ZXJuIGludCBfX3NldHBnaWQgKF9fcGlkX3QgX19waWQsIF9fcGlk
X3QgX19wZ2lkKTsKZXh0ZXJuIGludCBzZXRwZ2lkIChfX3BpZF90IF9fcGlkLCBfX3BpZF90IF9f
cGdpZCk7CiMgNTYxICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBzZXRwZ3Jw
ICh2b2lkKTsKIyA1NzkgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gX19waWRfdCBz
ZXRzaWQgKHZvaWQpOwoKCgpleHRlcm4gX19waWRfdCBnZXRzaWQgKF9fcGlkX3QgX19waWQpOwoK
CgpleHRlcm4gX191aWRfdCBnZXR1aWQgKHZvaWQpOwoKCmV4dGVybiBfX3VpZF90IGdldGV1aWQg
KHZvaWQpOwoKCmV4dGVybiBfX2dpZF90IGdldGdpZCAodm9pZCk7CgoKZXh0ZXJuIF9fZ2lkX3Qg
Z2V0ZWdpZCAodm9pZCk7CgoKCgpleHRlcm4gaW50IGdldGdyb3VwcyAoaW50IF9fc2l6ZSwgX19n
aWRfdCBfX2xpc3RbXSk7CgoKCmV4dGVybiBpbnQgZ3JvdXBfbWVtYmVyIChfX2dpZF90IF9fZ2lk
KTsKCgoKCgoKZXh0ZXJuIGludCBzZXR1aWQgKF9fdWlkX3QgX191aWQpOwoKCgoKZXh0ZXJuIGlu
dCBzZXRyZXVpZCAoX191aWRfdCBfX3J1aWQsIF9fdWlkX3QgX19ldWlkKTsKCgoKCmV4dGVybiBp
bnQgc2V0ZXVpZCAoX191aWRfdCBfX3VpZCk7CgoKCgoKCmV4dGVybiBpbnQgc2V0Z2lkIChfX2dp
ZF90IF9fZ2lkKTsKCgoKCmV4dGVybiBpbnQgc2V0cmVnaWQgKF9fZ2lkX3QgX19yZ2lkLCBfX2dp
ZF90IF9fZWdpZCk7CgoKCgpleHRlcm4gaW50IHNldGVnaWQgKF9fZ2lkX3QgX19naWQpOwoKCgoK
CgpleHRlcm4gX19waWRfdCBfX2ZvcmsgKHZvaWQpOwpleHRlcm4gX19waWRfdCBmb3JrICh2b2lk
KTsKCgoKCgoKZXh0ZXJuIF9fcGlkX3QgdmZvcmsgKHZvaWQpOwoKCgoKCmV4dGVybiBjaGFyICp0
dHluYW1lIChpbnQgX19mZCk7CgoKCmV4dGVybiBpbnQgdHR5bmFtZV9yIChpbnQgX19mZCwgY2hh
ciAqX19idWYsIHNpemVfdCBfX2J1Zmxlbik7CgoKCmV4dGVybiBpbnQgaXNhdHR5IChpbnQgX19m
ZCk7CgoKCgpleHRlcm4gaW50IHR0eXNsb3QgKHZvaWQpOwoKCgoKZXh0ZXJuIGludCBsaW5rIChj
b25zdCBjaGFyICpfX2Zyb20sIGNvbnN0IGNoYXIgKl9fdG8pOwoKCgpleHRlcm4gaW50IHN5bWxp
bmsgKGNvbnN0IGNoYXIgKl9fZnJvbSwgY29uc3QgY2hhciAqX190byk7CgoKCgpleHRlcm4gaW50
IHJlYWRsaW5rIChjb25zdCBjaGFyICpfX3BhdGgsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19sZW4p
OwoKCgpleHRlcm4gaW50IHVubGluayAoY29uc3QgY2hhciAqX19uYW1lKTsKCgpleHRlcm4gaW50
IHJtZGlyIChjb25zdCBjaGFyICpfX3BhdGgpOwoKCgpleHRlcm4gX19waWRfdCB0Y2dldHBncnAg
KGludCBfX2ZkKTsKCgpleHRlcm4gaW50IHRjc2V0cGdycCAoaW50IF9fZmQsIF9fcGlkX3QgX19w
Z3JwX2lkKTsKCgoKZXh0ZXJuIGNoYXIgKmdldGxvZ2luICh2b2lkKTsKCgoKCmV4dGVybiBpbnQg
Z2V0bG9naW5fciAoY2hhciAqX19uYW1lLCBzaXplX3QgX19uYW1lX2xlbik7CgoKCgpleHRlcm4g
aW50IHNldGxvZ2luIChjb25zdCBjaGFyICpfX25hbWUpOwojIDcyNCAiL3Vzci9pbmNsdWRlL3Vu
aXN0ZC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAxIDMKIyAyNyAiL3Vzci9pbmNs
dWRlL2dldG9wdC5oIiAzCmV4dGVybiAiQyIgewojIDM2ICIvdXNyL2luY2x1ZGUvZ2V0b3B0Lmgi
IDMKZXh0ZXJuIGNoYXIgKm9wdGFyZzsKIyA1MCAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAzCmV4
dGVybiBpbnQgb3B0aW5kOwoKCgoKZXh0ZXJuIGludCBvcHRlcnI7CgoKCmV4dGVybiBpbnQgb3B0
b3B0OwojIDEzNCAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAzCmV4dGVybiBpbnQgZ2V0b3B0IChp
bnQgX19hcmdjLCBjaGFyICpjb25zdCAqX19hcmd2LCBjb25zdCBjaGFyICpfX3Nob3J0b3B0cyk7
CiMgMTYzICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMKfQojIDcyNSAiL3Vzci9pbmNsdWRlL3Vu
aXN0ZC5oIiAyIDMKIyA3MzMgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IGdl
dGhvc3RuYW1lIChjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbik7CgoKCmV4dGVybiBpbnQgc2V0
aG9zdG5hbWUgKGNvbnN0IGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbGVuKTsKCgoKZXh0ZXJuIGlu
dCBzZXRob3N0aWQgKGxvbmcgaW50IF9faWQpOwoKCgoKCmV4dGVybiBpbnQgZ2V0ZG9tYWlubmFt
ZSAoY2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pOwpleHRlcm4gaW50IHNldGRvbWFpbm5hbWUg
KGNvbnN0IGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbGVuKTsKCgoKZXh0ZXJuIGludCBmc3luYyAo
aW50IF9fZmQpOwoKCgoKCmV4dGVybiBpbnQgdmhhbmd1cCAodm9pZCk7CgoKZXh0ZXJuIGludCBy
ZXZva2UgKGNvbnN0IGNoYXIgKl9fZmlsZSk7CgoKCgoKCgpleHRlcm4gaW50IHByb2ZpbCAodW5z
aWduZWQgc2hvcnQgaW50ICpfX3NhbXBsZV9idWZmZXIsIHNpemVfdCBfX3NpemUsIHNpemVfdCBf
X29mZnNldCwgdW5zaWduZWQgaW50IF9fc2NhbGUpOwoKCgoKCgpleHRlcm4gaW50IGFjY3QgKGNv
bnN0IGNoYXIgKl9fbmFtZSk7CgoKCmV4dGVybiBpbnQgY2hyb290IChjb25zdCBjaGFyICpfX3Bh
dGgpOwoKCgpleHRlcm4gY2hhciAqZ2V0dXNlcnNoZWxsICh2b2lkKTsKZXh0ZXJuIHZvaWQgZW5k
dXNlcnNoZWxsICh2b2lkKTsKZXh0ZXJuIHZvaWQgc2V0dXNlcnNoZWxsICh2b2lkKTsKCgoKCmV4
dGVybiBjaGFyICpnZXRwYXNzIChjb25zdCBjaGFyICpfX3Byb21wdCk7CgoKCgpleHRlcm4gaW50
IGRhZW1vbiAoaW50IF9fbm9jaGRpciwgaW50IF9fbm9jbG9zZSk7CgoKCgoKCgpleHRlcm4gbG9u
ZyBpbnQgZ2V0aG9zdGlkICh2b2lkKTsKCgpleHRlcm4gaW50IHN5bmMgKHZvaWQpOwoKCgoKZXh0
ZXJuIGludCBfX2dldHBhZ2VzaXplICh2b2lkKTsKZXh0ZXJuIGludCBnZXRwYWdlc2l6ZSAodm9p
ZCk7CgoKCgpleHRlcm4gaW50IHRydW5jYXRlIChjb25zdCBjaGFyICpfX2ZpbGUsIF9fb2ZmX3Qg
X19sZW5ndGgpOwojIDgyOSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgdHJ1
bmNhdGU2NCAoY29uc3QgY2hhciAqX19maWxlLCBfX29mZjY0X3QgX19sZW5ndGgpOwoKCgpleHRl
cm4gaW50IF9fZnRydW5jYXRlIChpbnQgX19mZCwgX19vZmZfdCBfX2xlbmd0aCk7CgpleHRlcm4g
aW50IGZ0cnVuY2F0ZSAoaW50IF9fZmQsIF9fb2ZmX3QgX19sZW5ndGgpOwojIDg0NSAiL3Vzci9p
bmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgZnRydW5jYXRlNjQgKGludCBfX2ZkLCBfX29m
ZjY0X3QgX19sZW5ndGgpOwoKCgoKCmV4dGVybiBpbnQgZ2V0ZHRhYmxlc2l6ZSAodm9pZCk7CiMg
ODYwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBicmsgKHZvaWQgKiBfX2Fk
ZHIpOwoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjAv
aW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTQ3ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYt
cGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgaW50IHB0cmRpZmZf
dDsKIyA4NjQgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzCgoKCgoKZXh0ZXJuIHZvaWQgKiBf
X3NicmsgKHB0cmRpZmZfdCBfX2RlbHRhKTsKZXh0ZXJuIHZvaWQgKiBzYnJrIChwdHJkaWZmX3Qg
X19kZWx0YSk7CiMgODg1ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGxvbmcgaW50
IHN5c2NhbGwgKGxvbmcgaW50IF9fc3lzbm8sIC4uLik7CiMgOTA1ICIvdXNyL2luY2x1ZGUvdW5p
c3RkLmgiIDMKZXh0ZXJuIGludCBsb2NrZiAoaW50IF9fZmQsIGludCBfX2NtZCwgX19vZmZfdCBf
X2xlbik7CiMgOTE1ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBsb2NrZjY0
IChpbnQgX19mZCwgaW50IF9fY21kLCBfX29mZjY0X3QgX19sZW4pOwojIDkzOCAiL3Vzci9pbmNs
dWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgX19saWJjX2VuYWJsZV9zZWN1cmU7CgoKCgoKCmV4
dGVybiBpbnQgZmRhdGFzeW5jIChpbnQgX19maWxkZXMpOwoKCgoKCgoKZXh0ZXJuIGNoYXIgKmNy
eXB0IChjb25zdCBjaGFyICpfX2tleSwgY29uc3QgY2hhciAqX19zYWx0KTsKCgpleHRlcm4gdm9p
ZCBzZXRrZXkgKGNvbnN0IGNoYXIgKl9fa2V5KTsKCgoKZXh0ZXJuIHZvaWQgZW5jcnlwdCAoY2hh
ciAqX19ibG9jaywgaW50IF9fZWRmbGFnKTsKCgoKCgoKZXh0ZXJuIHZvaWQgc3dhYiAoY29uc3Qg
dm9pZCAqIF9fZnJvbSwgdm9pZCAqIF9fdG8sIHNzaXplX3QgX19uKTsKCgoKCgoKCmV4dGVybiBj
aGFyICpjdGVybWlkIChjaGFyICpfX3MpOwoKCgpleHRlcm4gY2hhciAqY3VzZXJpZCAoY2hhciAq
X19zKTsKCgpleHRlcm4gaW50IHJlbmFtZSAoY29uc3QgY2hhciAqX19vbGQsIGNvbnN0IGNoYXIg
Kl9fbmV3KTsKIyA5OTkgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IHB0aHJl
YWRfYXRmb3JrICh2b2lkICgqX19wcmVwYXJlKSAodm9pZCksIHZvaWQgKCpfX3BhcmVudCkgKHZv
aWQpLCB2b2lkICgqX19jaGlsZCkgKHZvaWQpKTsKCgoKCn0KIyAxNyAiLi4vaW5jbHVkZS9zdGRh
ZnguaCIgMgojIDY2ICIuLi9pbmNsdWRlL3N0ZGFmeC5oIgppbmxpbmUgdm9pZCBzdHJ1cHIgKGNo
YXIgKnN0cikKeyB3aGlsZSAoKnN0cikKICAgIHsKICAgICAgICAqc3RyID0gdG91cHBlciAoKHVu
c2lnbmVkIGNoYXIpKnN0cikgOwogICAgICAgIHN0ciArKyA7CiAgICB9Cn0KCgoKdXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKIyAzMyAic3RjLmNwcCIgMgojIDEgInN5c3RlbS5oIiAxCiMgMjUgInN5c3Rl
bS5oIgojIDEgImtleWRlZi5oIiAxCiMgMjYgInN5c3RlbS5oIiAyCiMgMSAic2RpY3QuaCIgMQoj
IDQ1ICJzZGljdC5oIgojIDEgInN0cmVlLmgiIDEKIyAxOSAic3RyZWUuaCIKY2xhc3Mgc1RyZWUK
ewoKCgpwcm90ZWN0ZWQ6CgogICAgICAgIHNUcmVlICogbGVmdCwKICAgICAgICAgICAgICAgICAg
KiByaWdodDsKCnB1YmxpYzoKICAgICAgICBzVHJlZSAoKSB7IGxlZnQgPSByaWdodCA9IDA7IH07
CiAgICAgICAgdmlydHVhbCB+c1RyZWUgKCk7CgogICAgICAgIHNUcmVlICogR2V0TGVmdCAodm9p
ZCkgeyByZXR1cm4gbGVmdDsgfTsKICAgICAgICBzVHJlZSAqIEdldFJpZ2h0ICh2b2lkKSB7IHJl
dHVybiByaWdodDsgfTsKCiAgICAgICAgc1RyZWUgKiBSZW1vdmVMZWZ0ICh2b2lkKTsKICAgICAg
ICBzVHJlZSAqIFJlbW92ZVJpZ2h0ICh2b2lkKTsKCiAgICAgICAgc1RyZWUgKiBSZW1vdmVBbGxM
ZWZ0ICh2b2lkKSB7IHNUcmVlICogdG1wID0gbGVmdDsgbGVmdCA9IDA7IHJldHVybiB0bXA7IH07
CiAgICAgICAgc1RyZWUgKiBSZW1vdmVBbGxSaWdodCAodm9pZCkgeyBzVHJlZSAqIHRtcCA9IHJp
Z2h0OyByaWdodCA9IDA7IHJldHVybiB0bXA7IH07CgogICAgICAgIHZvaWQgQWRkTGVmdCAoc1Ry
ZWUgKiB0KSB7IGlmIChsZWZ0KSBsZWZ0LT5BZGRMZWZ0ICh0KTsgZWxzZSBsZWZ0ID0gdDsgfTsK
ICAgICAgICB2b2lkIEFkZFJpZ2h0IChzVHJlZSAqIHQpIHsgaWYgKHJpZ2h0KSByaWdodC0+QWRk
UmlnaHQgKHQpOyBlbHNlIHJpZ2h0ID0gdDsgfTsKfTsKIyA0NiAic2RpY3QuaCIgMgojIDEgInNz
dHJpbmcuaCIgMQojIDI4ICJzc3RyaW5nLmgiCiMgMSAic3RzdHJpbmcuaCIgMQojIDU4ICJzdHN0
cmluZy5oIgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYmFja3dhcmQvZnN0cmVhbS5o
IiAxIDMKIyAzMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iYWNrd2FyZC9mc3RyZWFtLmgi
IDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL2JhY2t3YXJkX3dhcm5p
bmcuaCIgMSAzCiMgMzIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYmFja3dhcmQvZnN0cmVh
bS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2ZzdHJlYW0u
aCIgMSAzCiMgMzggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfZnN0cmVhbS5o
IiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAx
IDMKIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pc3RyZWFtLmgiIDMK
CiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMSAzCiMgMzgg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDMKCiMgMSAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMSAzCiMgMzggIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zZndkLmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9pNTg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAz
NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNTg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2Nv
bmZpZy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNTg2LXBjLWxpbnV4LWdu
dS9iaXRzL29zX2RlZmluZXMuaCIgMSAzCiMgMzcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
aTU4Ni1wYy1saW51eC1nbnUvYml0cy9vc19kZWZpbmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv
ZmVhdHVyZXMuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTU4Ni1wYy1s
aW51eC1nbnUvYml0cy9vc19kZWZpbmVzLmgiIDIgMwojIDM1ICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2k1ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDIgMwojIDQwICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAyIDMKIyAxICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RyaW5nZndkLmgiIDEgMwojIDM4ICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RyaW5nZndkLmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9pNTg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyA0MCAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0cmluZ2Z3ZC5oIiAyIDMKCm5hbWVzcGFj
ZSBzdGQKewogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0czsK
CiAgdGVtcGxhdGU8PiBjbGFzcyBjaGFyX3RyYWl0czxjaGFyPjsKCgoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYWxsb2NhdG9yOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAg
IHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0
cmluZzsKCiAgdHlwZWRlZiBiYXNpY19zdHJpbmc8Y2hhcj4gc3RyaW5nOwoKCgp9CiMgNDEgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zZndkLmgiIDIgMwojIDEgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9mcG9zLmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvZnBvcy5oIiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvaTU4Ni1wYy1saW51eC1nbnUvYml0cy9jKytpby5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9pNTg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2lvLmgiIDMKIyAxICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2NzdGRpbyIgMSAzCiMgMzEgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvY3N0ZGlvIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9jc3RkaW8uaCIgMSAzCiMgMzcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
Y3N0ZGlvLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k1ODYtcGMtbGludXgt
Z251L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX2NzdGRpby5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX2NzdGRkZWYuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfY3N0ZGRlZi5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2LXBjLWxp
bnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzkgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHVzaW5n
IDo6cHRyZGlmZl90OwogIHVzaW5nIDo6c2l6ZV90Owp9CiMgMzkgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfY3N0ZGlvLmgiIDIgMwojIDQxICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDEg
MwojIDQyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAyIDMK
IyA4NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8uaCIgMwpuYW1l
c3BhY2Ugc3RkCnsKICB1c2luZyA6OkZJTEU7CiAgdXNpbmcgOjpmcG9zX3Q7CgogIHVzaW5nIDo6
Y2xlYXJlcnI7CiAgdXNpbmcgOjpmY2xvc2U7CiAgdXNpbmcgOjpmZW9mOwogIHVzaW5nIDo6ZmVy
cm9yOwogIHVzaW5nIDo6ZmZsdXNoOwogIHVzaW5nIDo6ZmdldGM7CiAgdXNpbmcgOjpmZ2V0cG9z
OwogIHVzaW5nIDo6ZmdldHM7CiAgdXNpbmcgOjpmb3BlbjsKICB1c2luZyA6OmZwcmludGY7CiAg
dXNpbmcgOjpmcHV0YzsKICB1c2luZyA6OmZwdXRzOwogIHVzaW5nIDo6ZnJlYWQ7CiAgdXNpbmcg
OjpmcmVvcGVuOwogIHVzaW5nIDo6ZnNjYW5mOwogIHVzaW5nIDo6ZnNlZWs7CiAgdXNpbmcgOjpm
c2V0cG9zOwogIHVzaW5nIDo6ZnRlbGw7CiAgdXNpbmcgOjpmd3JpdGU7CiAgdXNpbmcgOjpnZXRj
OwogIHVzaW5nIDo6Z2V0Y2hhcjsKICB1c2luZyA6OmdldHM7CiAgdXNpbmcgOjpwZXJyb3I7CiAg
dXNpbmcgOjpwcmludGY7CiAgdXNpbmcgOjpwdXRjOwogIHVzaW5nIDo6cHV0Y2hhcjsKICB1c2lu
ZyA6OnB1dHM7CiAgdXNpbmcgOjpyZW1vdmU7CiAgdXNpbmcgOjpyZW5hbWU7CiAgdXNpbmcgOjpy
ZXdpbmQ7CiAgdXNpbmcgOjpzY2FuZjsKICB1c2luZyA6OnNldGJ1ZjsKICB1c2luZyA6OnNldHZi
dWY7CiAgdXNpbmcgOjpzcHJpbnRmOwogIHVzaW5nIDo6c3NjYW5mOwogIHVzaW5nIDo6dG1wZmls
ZTsKICB1c2luZyA6OnRtcG5hbTsKICB1c2luZyA6OnVuZ2V0YzsKICB1c2luZyA6OnZmcHJpbnRm
OwogIHVzaW5nIDo6dnByaW50ZjsKICB1c2luZyA6OnZzcHJpbnRmOwp9CiMgMTQyICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAzCm5hbWVzcGFjZSBfX2dudV9j
eHgKewogIHVzaW5nIDo6c25wcmludGY7CiAgdXNpbmcgOjp2ZnNjYW5mOwogIHVzaW5nIDo6dnNj
YW5mOwogIHVzaW5nIDo6dnNucHJpbnRmOwogIHVzaW5nIDo6dnNzY2FuZjsKfQoKbmFtZXNwYWNl
IHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4OjpzbnByaW50ZjsKICB1c2luZyBfX2dudV9jeHg6OnZm
c2NhbmY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2c2NhbmY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2c25w
cmludGY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2c3NjYW5mOwp9CiMgMzIgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvY3N0ZGlvIiAyIDMKIyAzNiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9p
NTg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2lvLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvY3N0ZGRlZiIgMSAzCiMgMzcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTU4
Ni1wYy1saW51eC1nbnUvYml0cy9jKytpby5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2k1ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci5oIiAxIDMKIyAxMDIgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvaTU4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLmgiIDMKIyAxICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k1ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci1zaW5n
bGUuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTU4Ni1wYy1saW51eC1n
bnUvYml0cy9ndGhyLXNpbmdsZS5oIiAzCnR5cGVkZWYgaW50IF9fZ3RocmVhZF9tdXRleF90Owoj
IDIxMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNTg2LXBjLWxpbnV4LWdudS9iaXRzL2d0
aHItc2luZ2xlLmgiIDMKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX2FjdGl2ZV9wICh2b2lk
KQp7CiAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9tdXRleF9sb2Nr
IChfX2d0aHJlYWRfbXV0ZXhfdCAqICkKewogIHJldHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIGlu
dApfX2d0aHJlYWRfbXV0ZXhfdHJ5bG9jayAoX19ndGhyZWFkX211dGV4X3QgKiApCnsKICByZXR1
cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX211dGV4X3VubG9jayAoX19ndGhy
ZWFkX211dGV4X3QgKiApCnsKICByZXR1cm4gMDsKfQojIDEwMyAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9pNTg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHIuaCIgMiAzCiMgMzggIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvaTU4Ni1wYy1saW51eC1nbnUvYml0cy9jKytpby5oIiAyIDMKCm5h
bWVzcGFjZSBzdGQKewoKICB0eXBlZGVmIGxvbmcgc3RyZWFtb2ZmOwogIHR5cGVkZWYgcHRyZGlm
Zl90IHN0cmVhbXNpemU7CgoKCiAgdHlwZWRlZiBmcG9zX3QgX19jX3N0cmVhbXBvczsKCiAgdHlw
ZWRlZiBfX2d0aHJlYWRfbXV0ZXhfdCBfX2NfbG9jazsKCgoKICB0eXBlZGVmIEZJTEUgX19jX2Zp
bGVfdHlwZTsKCgogIHN0cnVjdCBfX2lvc19mbGFncwogIHsKICAgIHR5cGVkZWYgc2hvcnQgX19p
bnRfdHlwZTsKCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19ib29sYWxwaGEgPSAweDAw
MDE7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19kZWMgPSAweDAwMDI7CiAgICBzdGF0
aWMgY29uc3QgX19pbnRfdHlwZSBfU19maXhlZCA9IDB4MDAwNDsKICAgIHN0YXRpYyBjb25zdCBf
X2ludF90eXBlIF9TX2hleCA9IDB4MDAwODsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T
X2ludGVybmFsID0gMHgwMDEwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfbGVmdCA9
IDB4MDAyMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX29jdCA9IDB4MDA0MDsKICAg
IHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3JpZ2h0ID0gMHgwMDgwOwogICAgc3RhdGljIGNv
bnN0IF9faW50X3R5cGUgX1Nfc2NpZW50aWZpYyA9IDB4MDEwMDsKICAgIHN0YXRpYyBjb25zdCBf
X2ludF90eXBlIF9TX3Nob3diYXNlID0gMHgwMjAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5
cGUgX1Nfc2hvd3BvaW50ID0gMHgwNDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf
c2hvd3BvcyA9IDB4MDgwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3NraXB3cyA9
IDB4MTAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3VuaXRidWYgPSAweDIwMDA7
CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU191cHBlcmNhc2UgPSAweDQwMDA7CiAgICBz
dGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hZGp1c3RmaWVsZCA9IDB4MDAyMCB8IDB4MDA4MCB8
IDB4MDAxMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Jhc2VmaWVsZCA9IDB4MDAw
MiB8IDB4MDA0MCB8IDB4MDAwODsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Zsb2F0
ZmllbGQgPSAweDAxMDAgfCAweDAwMDQ7CgoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T
X2JhZGJpdCA9IDB4MDE7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19lb2ZiaXQgPSAw
eDAyOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZmFpbGJpdCA9IDB4MDQ7CgoKICAg
IHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2FwcCA9IDB4MDE7CiAgICBzdGF0aWMgY29uc3Qg
X19pbnRfdHlwZSBfU19hdGUgPSAweDAyOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf
YmluID0gMHgwNDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2luID0gMHgwODsKICAg
IHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX291dCA9IDB4MTA7CiAgICBzdGF0aWMgY29uc3Qg
X19pbnRfdHlwZSBfU190cnVuYyA9IDB4MjA7CiAgfTsKfQojIDQwICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvZnBvcy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX2N3Y2hhci5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9jd2NoYXIuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTU4Ni1w
Yy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfY3djaGFyLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9jd2NoYXIuaCIgMiAzCiMgNDIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvYml0cy9zdGRfY3djaGFyLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMg
MjcgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgi
IDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRl
L3N0ZGlvLmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCgoKCgoKCiMgMSAi
L3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRk
ZWYuaCIgMSAzCiMgMzkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKIyA1MyAiL3Vzci9pbmNs
dWRlL3djaGFyLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBjb3VudDsKICB3aW50X3QgdmFs
dWU7Cn0gbWJzdGF0ZV90OwojIDc3ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwpzdHJ1Y3QgdG07
CgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc2NweSAod2NoYXJfdCAqIF9fZGVz
dCwgY29uc3Qgd2NoYXJfdCAqIF9fc3JjKTsKCgpleHRlcm4gd2NoYXJfdCAqd2NzbmNweSAod2No
YXJfdCAqIF9fZGVzdCwgY29uc3Qgd2NoYXJfdCAqIF9fc3JjLCBzaXplX3QgX19uKTsKCgoKZXh0
ZXJuIHdjaGFyX3QgKndjc2NhdCAod2NoYXJfdCAqIF9fZGVzdCwgY29uc3Qgd2NoYXJfdCAqIF9f
c3JjKTsKCgpleHRlcm4gd2NoYXJfdCAqd2NzbmNhdCAod2NoYXJfdCAqIF9fZGVzdCwgY29uc3Qg
d2NoYXJfdCAqIF9fc3JjLCBzaXplX3QgX19uKTsKCgoKZXh0ZXJuIGludCB3Y3NjbXAgKGNvbnN0
IHdjaGFyX3QgKl9fczEsIGNvbnN0IHdjaGFyX3QgKl9fczIpOwoKZXh0ZXJuIGludCB3Y3NuY21w
IChjb25zdCB3Y2hhcl90ICpfX3MxLCBjb25zdCB3Y2hhcl90ICpfX3MyLCBzaXplX3QgX19uKTsK
CgoKCmV4dGVybiBpbnQgd2NzY2FzZWNtcCAoY29uc3Qgd2NoYXJfdCAqX19zMSwgY29uc3Qgd2No
YXJfdCAqX19zMik7CgoKZXh0ZXJuIGludCB3Y3NuY2FzZWNtcCAoY29uc3Qgd2NoYXJfdCAqX19z
MSwgY29uc3Qgd2NoYXJfdCAqX19zMiwgc2l6ZV90IF9fbik7CgoKCgojIDEgIi91c3IvaW5jbHVk
ZS94bG9jYWxlLmgiIDEgMwojIDExMyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKZXh0ZXJu
IGludCBfX3djc2Nhc2VjbXBfbCAoY29uc3Qgd2NoYXJfdCAqX19zMSwgY29uc3Qgd2NoYXJfdCAq
X19zMiwgX19sb2NhbGVfdCBfX2xvYyk7CgoKZXh0ZXJuIGludCBfX3djc25jYXNlY21wX2wgKGNv
bnN0IHdjaGFyX3QgKl9fczEsIGNvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24sIF9fbG9j
YWxlX3QgX19sb2MpOwoKCgoKCmV4dGVybiBpbnQgd2NzY29sbCAoY29uc3Qgd2NoYXJfdCAqX19z
MSwgY29uc3Qgd2NoYXJfdCAqX19zMik7CgoKCmV4dGVybiBzaXplX3Qgd2NzeGZybSAod2NoYXJf
dCAqIF9fczEsIGNvbnN0IHdjaGFyX3QgKiBfX3MyLCBzaXplX3QgX19uKTsKIyAxMzYgIi91c3Iv
aW5jbHVkZS93Y2hhci5oIiAzCmV4dGVybiBpbnQgX193Y3Njb2xsX2wgKGNvbnN0IHdjaGFyX3Qg
Kl9fczEsIGNvbnN0IHdjaGFyX3QgKl9fczIsIF9fbG9jYWxlX3QgX19sb2MpOwoKCgoKZXh0ZXJu
IHNpemVfdCBfX3djc3hmcm1fbCAod2NoYXJfdCAqX19zMSwgY29uc3Qgd2NoYXJfdCAqX19zMiwg
c2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xvYyk7CgoKCmV4dGVybiB3Y2hhcl90ICp3Y3NkdXAg
KGNvbnN0IHdjaGFyX3QgKl9fcyk7CgoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjaHIgKGNvbnN0IHdj
aGFyX3QgKl9fd2NzLCB3Y2hhcl90IF9fd2MpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3JjaHIgKGNv
bnN0IHdjaGFyX3QgKl9fd2NzLCB3Y2hhcl90IF9fd2MpOwoKCgpleHRlcm4gc2l6ZV90IHdjc2Nz
cG4gKGNvbnN0IHdjaGFyX3QgKl9fd2NzLCBjb25zdCB3Y2hhcl90ICpfX3JlamVjdCk7CgoKCmV4
dGVybiBzaXplX3Qgd2Nzc3BuIChjb25zdCB3Y2hhcl90ICpfX3djcywgY29uc3Qgd2NoYXJfdCAq
X19hY2NlcHQpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3BicmsgKGNvbnN0IHdjaGFyX3QgKl9fd2Nz
LCBjb25zdCB3Y2hhcl90ICpfX2FjY2VwdCk7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc3N0ciAoY29u
c3Qgd2NoYXJfdCAqX19oYXlzdGFjaywgY29uc3Qgd2NoYXJfdCAqX19uZWVkbGUpOwojIDE3NCAi
L3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKZXh0ZXJuIHdjaGFyX3QgKndjc3RvayAod2NoYXJfdCAq
IF9fcywgY29uc3Qgd2NoYXJfdCAqIF9fZGVsaW0sIHdjaGFyX3QgKiogX19wdHIpOwoKCgoKZXh0
ZXJuIHNpemVfdCBfX3djc2xlbiAoY29uc3Qgd2NoYXJfdCAqX19zKTsKZXh0ZXJuIHNpemVfdCB3
Y3NsZW4gKGNvbnN0IHdjaGFyX3QgKl9fcyk7CgoKCmV4dGVybiBzaXplX3Qgd2NzbmxlbiAoY29u
c3Qgd2NoYXJfdCAqX19zLCBzaXplX3QgX19tYXhsZW4pOwoKCgoKZXh0ZXJuIHdjaGFyX3QgKndt
ZW1jaHIgKGNvbnN0IHdjaGFyX3QgKl9fcywgd2NoYXJfdCBfX2MsIHNpemVfdCBfX24pOwoKCmV4
dGVybiBpbnQgd21lbWNtcCAoY29uc3Qgd2NoYXJfdCAqIF9fczEsIGNvbnN0IHdjaGFyX3QgKiBf
X3MyLCBzaXplX3QgX19uKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1jcHkgKHdjaGFyX3QgKiBf
X3MxLCBjb25zdCB3Y2hhcl90ICogX19zMiwgc2l6ZV90IF9fbik7CgoKCgpleHRlcm4gd2NoYXJf
dCAqd21lbW1vdmUgKHdjaGFyX3QgKl9fczEsIGNvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBf
X24pOwoKCgpleHRlcm4gd2NoYXJfdCAqd21lbXNldCAod2NoYXJfdCAqX19zLCB3Y2hhcl90IF9f
Yywgc2l6ZV90IF9fbik7CgoKCgpleHRlcm4gd2ludF90IGJ0b3djIChpbnQgX19jKTsKCgoKZXh0
ZXJuIGludCB3Y3RvYiAod2ludF90IF9fYyk7CgoKCmV4dGVybiBpbnQgbWJzaW5pdCAoY29uc3Qg
bWJzdGF0ZV90ICpfX3BzKTsKCgoKZXh0ZXJuIHNpemVfdCBtYnJ0b3djICh3Y2hhcl90ICogX19w
d2MsIGNvbnN0IGNoYXIgKiBfX3MsIHNpemVfdCBfX24sIG1ic3RhdGVfdCAqX19wKTsKCgoKCmV4
dGVybiBzaXplX3Qgd2NydG9tYiAoY2hhciAqIF9fcywgd2NoYXJfdCBfX3djLCBtYnN0YXRlX3Qg
KiBfX3BzKTsKCgoKZXh0ZXJuIHNpemVfdCBfX21icmxlbiAoY29uc3QgY2hhciAqIF9fcywgc2l6
ZV90IF9fbiwgbWJzdGF0ZV90ICogX19wcyk7CgpleHRlcm4gc2l6ZV90IG1icmxlbiAoY29uc3Qg
Y2hhciAqIF9fcywgc2l6ZV90IF9fbiwgbWJzdGF0ZV90ICogX19wcyk7CiMgMjQ3ICIvdXNyL2lu
Y2x1ZGUvd2NoYXIuaCIgMwpleHRlcm4gc2l6ZV90IG1ic3J0b3djcyAod2NoYXJfdCAqIF9fZHN0
LCBjb25zdCBjaGFyICoqIF9fc3JjLCBzaXplX3QgX19sZW4sIG1ic3RhdGVfdCAqIF9fcHMpOwoK
CgoKCmV4dGVybiBzaXplX3Qgd2NzcnRvbWJzIChjaGFyICogX19kc3QsIGNvbnN0IHdjaGFyX3Qg
KiogX19zcmMsIHNpemVfdCBfX2xlbiwgbWJzdGF0ZV90ICogX19wcyk7CgoKCgoKCgpleHRlcm4g
c2l6ZV90IG1ic25ydG93Y3MgKHdjaGFyX3QgKiBfX2RzdCwgY29uc3QgY2hhciAqKiBfX3NyYywg
c2l6ZV90IF9fbm1jLCBzaXplX3QgX19sZW4sIG1ic3RhdGVfdCAqIF9fcHMpOwoKCgoKCmV4dGVy
biBzaXplX3Qgd2NzbnJ0b21icyAoY2hhciAqIF9fZHN0LCBjb25zdCB3Y2hhcl90ICoqIF9fc3Jj
LCBzaXplX3QgX19ud2MsIHNpemVfdCBfX2xlbiwgbWJzdGF0ZV90ICogX19wcyk7CiMgMjc3ICIv
dXNyL2luY2x1ZGUvd2NoYXIuaCIgMwpleHRlcm4gaW50IHdjd2lkdGggKHdpbnRfdCBfX2MpOwoK
CgpleHRlcm4gaW50IHdjc3dpZHRoIChjb25zdCB3Y2hhcl90ICpfX3MsIHNpemVfdCBfX24pOwoK
CgoKCmV4dGVybiBkb3VibGUgd2NzdG9kIChjb25zdCB3Y2hhcl90ICogX19ucHRyLCB3Y2hhcl90
ICoqIF9fZW5kcHRyKTsKCgoKCmV4dGVybiBmbG9hdCB3Y3N0b2YgKGNvbnN0IHdjaGFyX3QgKiBf
X25wdHIsIHdjaGFyX3QgKiogX19lbmRwdHIpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHdjc3RvbGQg
KGNvbnN0IHdjaGFyX3QgKiBfX25wdHIsIHdjaGFyX3QgKiogX19lbmRwdHIpOwoKCgoKCgpleHRl
cm4gbG9uZyBpbnQgd2NzdG9sIChjb25zdCB3Y2hhcl90ICogX19ucHRyLCB3Y2hhcl90ICoqIF9f
ZW5kcHRyLCBpbnQgX19iYXNlKTsKCgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCB3Y3N0b3Vs
IChjb25zdCB3Y2hhcl90ICogX19ucHRyLCB3Y2hhcl90ICoqIF9fZW5kcHRyLCBpbnQgX19iYXNl
KTsKIyAzMjkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCmV4dGVybiBsb25nIGxvbmcgaW50IHdj
c3RvbGwgKGNvbnN0IHdjaGFyX3QgKiBfX25wdHIsIHdjaGFyX3QgKiogX19lbmRwdHIsIGludCBf
X2Jhc2UpOwoKCgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHdjc3RvdWxsIChjb25z
dCB3Y2hhcl90ICogX19ucHRyLCB3Y2hhcl90ICoqIF9fZW5kcHRyLCBpbnQgX19iYXNlKTsKIyAz
NTUgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIg
MSAzCiMgMzU2ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCgoKCmV4dGVybiBsb25nIGludCBf
X3djc3RvbF9sIChjb25zdCB3Y2hhcl90ICogX19ucHRyLCB3Y2hhcl90ICoqIF9fZW5kcHRyLCBp
bnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKTsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50
IF9fd2NzdG91bF9sIChjb25zdCB3Y2hhcl90ICogX19ucHRyLCB3Y2hhcl90ICoqIF9fZW5kcHRy
LCBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKTsKCgoKCmV4dGVybiBsb25nIGxvbmcgaW50
IF9fd2NzdG9sbF9sIChjb25zdCB3Y2hhcl90ICogX19ucHRyLCB3Y2hhcl90ICoqIF9fZW5kcHRy
LCBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKTsKCgoKCmV4dGVybiB1bnNpZ25lZCBsb25n
IGxvbmcgaW50IF9fd2NzdG91bGxfbCAoY29uc3Qgd2NoYXJfdCAqIF9fbnB0ciwgd2NoYXJfdCAq
KiBfX2VuZHB0ciwgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYyk7CgoKCgoKZXh0ZXJuIGRv
dWJsZSBfX3djc3RvZF9sIChjb25zdCB3Y2hhcl90ICogX19ucHRyLCB3Y2hhcl90ICoqIF9fZW5k
cHRyLCBfX2xvY2FsZV90IF9fbG9jKTsKCgoKZXh0ZXJuIGZsb2F0IF9fd2NzdG9mX2wgKGNvbnN0
IHdjaGFyX3QgKiBfX25wdHIsIHdjaGFyX3QgKiogX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2Mp
OwoKCgpleHRlcm4gbG9uZyBkb3VibGUgX193Y3N0b2xkX2wgKGNvbnN0IHdjaGFyX3QgKiBfX25w
dHIsIHdjaGFyX3QgKiogX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpOwoKCgoKCgoKZXh0ZXJu
IGRvdWJsZSBfX3djc3RvZF9pbnRlcm5hbCAoY29uc3Qgd2NoYXJfdCAqIF9fbnB0ciwgd2NoYXJf
dCAqKiBfX2VuZHB0ciwgaW50IF9fZ3JvdXApOwoKCmV4dGVybiBmbG9hdCBfX3djc3RvZl9pbnRl
cm5hbCAoY29uc3Qgd2NoYXJfdCAqIF9fbnB0ciwgd2NoYXJfdCAqKiBfX2VuZHB0ciwgaW50IF9f
Z3JvdXApOwoKCmV4dGVybiBsb25nIGRvdWJsZSBfX3djc3RvbGRfaW50ZXJuYWwgKGNvbnN0IHdj
aGFyX3QgKiBfX25wdHIsIHdjaGFyX3QgKiogX19lbmRwdHIsIGludCBfX2dyb3VwKTsKCgoKCgpl
eHRlcm4gbG9uZyBpbnQgX193Y3N0b2xfaW50ZXJuYWwgKGNvbnN0IHdjaGFyX3QgKiBfX25wdHIs
IHdjaGFyX3QgKiogX19lbmRwdHIsIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKTsKCgoKCgpleHRl
cm4gdW5zaWduZWQgbG9uZyBpbnQgX193Y3N0b3VsX2ludGVybmFsIChjb25zdCB3Y2hhcl90ICog
X19ucHRyLCB3Y2hhcl90ICoqIF9fZW5kcHRyLCBpbnQgX19iYXNlLCBpbnQgX19ncm91cCk7CiMg
NDIyICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwpleHRlcm4gbG9uZyBsb25nIGludCBfX3djc3Rv
bGxfaW50ZXJuYWwgKGNvbnN0IHdjaGFyX3QgKiBfX25wdHIsIHdjaGFyX3QgKiogX19lbmRwdHIs
IGludCBfX2Jhc2UsIGludCBfX2dyb3VwKTsKCgoKCgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGxv
bmcgaW50IF9fd2NzdG91bGxfaW50ZXJuYWwgKGNvbnN0IHdjaGFyX3QgKiBfX25wdHIsIHdjaGFy
X3QgKiogX19lbmRwdHIsIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKTsKIyA0ODIgIi91c3IvaW5j
bHVkZS93Y2hhci5oIiAzCmV4dGVybiB3Y2hhcl90ICp3Y3BjcHkgKHdjaGFyX3QgKl9fZGVzdCwg
Y29uc3Qgd2NoYXJfdCAqX19zcmMpOwoKCgpleHRlcm4gd2NoYXJfdCAqd2NwbmNweSAod2NoYXJf
dCAqX19kZXN0LCBjb25zdCB3Y2hhcl90ICpfX3NyYywgc2l6ZV90IF9fbik7CiMgNTAyICIvdXNy
L2luY2x1ZGUvd2NoYXIuaCIgMwp9CiMgNDMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfY3djaGFyLmgiIDIgMwojIDU3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX2N3Y2hhci5oIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bWJzdGF0ZV90Owp9CiMg
NDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9mcG9zLmgiIDIgMwoKbmFtZXNwYWNl
IHN0ZAp7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGZwb3MKICAg
IHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX1N0YXRlVCBfX3N0YXRlX3R5cGU7CgogICAg
cHJpdmF0ZToKICAgICAgc3RyZWFtb2ZmIF9NX29mZjsKICAgICAgX19zdGF0ZV90eXBlIF9NX3N0
OwoKICAgIHB1YmxpYzoKICAgICAgX19zdGF0ZV90eXBlCiAgICAgIHN0YXRlKCkgY29uc3QgeyBy
ZXR1cm4gX01fc3Q7IH0KCiAgICAgIHZvaWQKICAgICAgc3RhdGUoX19zdGF0ZV90eXBlIF9fc3Qp
IHsgX01fc3QgPSBfX3N0OyB9CgoKCiAgICAgIGZwb3MoKTogX01fb2ZmKHN0cmVhbW9mZigpKSwg
X01fc3QoX19zdGF0ZV90eXBlKCkpIHsgfQoKICAgICAgZnBvcyhzdHJlYW1vZmYgX19vZmYsIF9f
c3RhdGVfdHlwZSBfX3N0ID0gX19zdGF0ZV90eXBlKCkpCiAgICAgIDogX01fb2ZmKF9fb2ZmKSwg
X01fc3QoX19zdCkgeyB9CgogICAgICBvcGVyYXRvciBzdHJlYW1vZmYoKSBjb25zdCB7IHJldHVy
biBfTV9vZmY7IH0KCiAgICAgIGZwb3MmCiAgICAgIG9wZXJhdG9yKz0oc3RyZWFtb2ZmIF9fb2Zm
KSB7IF9NX29mZiArPSBfX29mZjsgcmV0dXJuICp0aGlzOyB9CgogICAgICBmcG9zJgogICAgICBv
cGVyYXRvci09KHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgLT0gX19vZmY7IHJldHVybiAqdGhp
czsgfQoKICAgICAgZnBvcwogICAgICBvcGVyYXRvcisoc3RyZWFtb2ZmIF9fb2ZmKQogICAgICB7
CiAgICAgICAgZnBvcyBfX3QoKnRoaXMpOwogICAgICAgIF9fdCArPSBfX29mZjsKICAgICAgICBy
ZXR1cm4gX190OwogICAgICB9CgogICAgICBmcG9zCiAgICAgIG9wZXJhdG9yLShzdHJlYW1vZmYg
X19vZmYpCiAgICAgIHsKICAgICAgICBmcG9zIF9fdCgqdGhpcyk7CiAgICAgICAgX190IC09IF9f
b2ZmOwogICAgICAgIHJldHVybiBfX3Q7CiAgICAgIH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0
b3I9PShjb25zdCBmcG9zJiBfX3BvcykgY29uc3QKICAgICAgeyByZXR1cm4gX01fb2ZmID09IF9f
cG9zLl9NX29mZjsgfQoKICAgICAgYm9vbAogICAgICBvcGVyYXRvciE9KGNvbnN0IGZwb3MmIF9f
cG9zKSBjb25zdAogICAgICB7IHJldHVybiBfTV9vZmYgIT0gX19wb3MuX01fb2ZmOyB9CgogICAg
ICBzdHJlYW1vZmYKICAgICAgX01fcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBfTV9vZmY7IH0K
CiAgICAgIHZvaWQKICAgICAgX01fcG9zaXRpb24oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiA9
IF9fb2ZmOyB9CiAgICB9OwoKCiAgdHlwZWRlZiBmcG9zPG1ic3RhdGVfdD4gc3RyZWFtcG9zOwoK
Cgp9CiMgNDIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zZndkLmgiIDIg
MwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMK
IyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAx
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1l
c3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsKCgogIHZv
aWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0
KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9f
dGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfZG9t
YWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJn
dW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNv
bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFy
KiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7
CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK
ICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Ro
cm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9fdGhyb3df
aW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDQzICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4g
PgogICAgY2xhc3MgYmFzaWNfaW9zOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmVh
bWJ1ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hh
cl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pc3RyZWFtOwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4K
ICAgIGNsYXNzIGJhc2ljX29zdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaW9z
dHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNo
YXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRv
cjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmluZ2J1ZjsKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAg
ICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNp
Y19pc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9
IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX29zdHJpbmdzdHJlYW07CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9D
aGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgog
ICAgY2xhc3MgYmFzaWNfc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2lj
X2ZpbGVidWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9
IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaWZzdHJlYW07CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFy
VD4gPgogICAgY2xhc3MgYmFzaWNfb2ZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFz
aWNfZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
ID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yOwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0
czxfQ2hhclQ+ID4KICAgIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3I7CgoKCiAgY2xhc3MgaW9z
X2Jhc2U7CgoKICB0eXBlZGVmIGJhc2ljX2lvczxjaGFyPiBpb3M7CiAgdHlwZWRlZiBiYXNpY19z
dHJlYW1idWY8Y2hhcj4gc3RyZWFtYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxjaGFyPiBp
c3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFyPiBvc3RyZWFtOwogIHR5cGVkZWYg
YmFzaWNfaW9zdHJlYW08Y2hhcj4gaW9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdidWY8
Y2hhcj4gc3RyaW5nYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmluZ3N0cmVhbTxjaGFyPiBpc3Ry
aW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0cmluZ3N0cmVhbTxjaGFyPiBvc3RyaW5nc3Ry
ZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nc3RyZWFtPGNoYXI+IHN0cmluZ3N0cmVhbTsKICB0
eXBlZGVmIGJhc2ljX2ZpbGVidWY8Y2hhcj4gZmlsZWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lmc3Ry
ZWFtPGNoYXI+IGlmc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb2ZzdHJlYW08Y2hhcj4gb2ZzdHJl
YW07CiAgdHlwZWRlZiBiYXNpY19mc3RyZWFtPGNoYXI+IGZzdHJlYW07CiMgMTI5ICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAzCn0KIyA0MCAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9leGNlcHRpb24iIDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2V4Y2VwdGlvbiIgMwpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZAp7CiAgY2xhc3MgZXhj
ZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGV4Y2VwdGlvbigpIHRocm93KCkgeyB9CiAgICB2aXJ0
dWFsIH5leGNlcHRpb24oKSB0aHJvdygpOwogICAgdmlydHVhbCBjb25zdCBjaGFyKiB3aGF0KCkg
Y29uc3QgdGhyb3coKTsKICB9OwoKICBjbGFzcyBiYWRfZXhjZXB0aW9uIDogcHVibGljIGV4Y2Vw
dGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KICAgIHZp
cnR1YWwgfmJhZF9leGNlcHRpb24oKSB0aHJvdygpOwogIH07CgogIHR5cGVkZWYgdm9pZCAoKnRl
cm1pbmF0ZV9oYW5kbGVyKSAoKTsKICB0eXBlZGVmIHZvaWQgKCp1bmV4cGVjdGVkX2hhbmRsZXIp
ICgpOwoKICB0ZXJtaW5hdGVfaGFuZGxlciBzZXRfdGVybWluYXRlKHRlcm1pbmF0ZV9oYW5kbGVy
KSB0aHJvdygpOwogIHZvaWQgdGVybWluYXRlKCkgOwoKICB1bmV4cGVjdGVkX2hhbmRsZXIgc2V0
X3VuZXhwZWN0ZWQodW5leHBlY3RlZF9oYW5kbGVyKSB0aHJvdygpOwogIHZvaWQgdW5leHBlY3Rl
ZCgpIDsKCiAgYm9vbCB1bmNhdWdodF9leGNlcHRpb24oKSB0aHJvdygpOwp9Cgp9CiMgNDEgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDIgMwojIDEgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9jaGFyX3RyYWl0cy5oIiAxIDMKIyAzOCAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL2NoYXJfdHJhaXRzLmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDEgMwojIDM3ICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDIgMwojIDQwICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIg
MSAzCiMgNDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0cmluZy5oIiAy
IDMKIyA2NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDMK
bmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjptZW1jcHk7CiAgdXNpbmcgOjptZW1tb3ZlOwogIHVz
aW5nIDo6c3RyY3B5OwogIHVzaW5nIDo6c3RybmNweTsKICB1c2luZyA6OnN0cmNhdDsKICB1c2lu
ZyA6OnN0cm5jYXQ7CiAgdXNpbmcgOjptZW1jbXA7CiAgdXNpbmcgOjpzdHJjbXA7CiAgdXNpbmcg
OjpzdHJjb2xsOwogIHVzaW5nIDo6c3RybmNtcDsKICB1c2luZyA6OnN0cnhmcm07CiAgdXNpbmcg
OjpzdHJjc3BuOwogIHVzaW5nIDo6c3Ryc3BuOwogIHVzaW5nIDo6c3RydG9rOwogIHVzaW5nIDo6
bWVtc2V0OwogIHVzaW5nIDo6c3RyZXJyb3I7CiAgdXNpbmcgOjpzdHJsZW47CgogIHVzaW5nIDo6
bWVtY2hyOwoKICBpbmxpbmUgdm9pZCoKICBtZW1jaHIodm9pZCogX19wLCBpbnQgX19jLCBzaXpl
X3QgX19uKQogIHsgcmV0dXJuIG1lbWNocihjb25zdF9jYXN0PGNvbnN0IHZvaWQqPihfX3ApLCBf
X2MsIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJjaHI7CgogIGlubGluZSBjaGFyKgogIHN0cmNocihj
aGFyKiBfX3MxLCBpbnQgX19uKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJjaHIoY29uc3RfY2Fz
dDxjb25zdCBjaGFyKj4oX19zMSksIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJwYnJrOwoKICBpbmxp
bmUgY2hhcioKICBzdHJwYnJrKGNoYXIqIF9fczEsIGNvbnN0IGNoYXIqIF9fczIpCiAgeyByZXR1
cm4gX19idWlsdGluX3N0cnBicmsoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fczIp
OyB9CgogIHVzaW5nIDo6c3RycmNocjsKCiAgaW5saW5lIGNoYXIqCiAgc3RycmNocihjaGFyKiBf
X3MxLCBpbnQgX19uKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJyY2hyKGNvbnN0X2Nhc3Q8Y29u
c3QgY2hhcio+KF9fczEpLCBfX24pOyB9CgogIHVzaW5nIDo6c3Ryc3RyOwoKICBpbmxpbmUgY2hh
cioKICBzdHJzdHIoY2hhciogX19zMSwgY29uc3QgY2hhciogX19zMikKICB7IHJldHVybiBfX2J1
aWx0aW5fc3Ryc3RyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX3MyKTsgfQp9CiMg
NDAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9jaGFyX3RyYWl0cy5oIiAyIDMKIyAx
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvZnBvcy5oIiAxIDMKIyA0MSAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2NoYXJfdHJhaXRzLmgiIDIgMwoKbmFtZXNwYWNlIHN0
ZAp7CgoKCiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUPgogICAgc3RydWN0IGNoYXJfdHJhaXRzCiAg
ICB7CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKCiAgICAgIHR5cGVkZWYgdW5zaWdu
ZWQgbG9uZyBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1wb3MgcG9zX3R5cGU7CiAgICAg
IHR5cGVkZWYgc3RyZWFtb2ZmIG9mZl90eXBlOwogICAgICB0eXBlZGVmIG1ic3RhdGVfdCBzdGF0
ZV90eXBlOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgYXNzaWduKGNoYXJfdHlwZSYgX19jMSwg
Y29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IF9fYzEgPSBfX2MyOyB9CgogICAgICBzdGF0
aWMgYm9vbAogICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYg
X19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CgogICAgICBzdGF0aWMgYm9vbAog
ICAgICBsdChjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAg
ICAgeyByZXR1cm4gX19jMSA8IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnQKICAgICAgY29tcGFy
ZShjb25zdCBjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9f
bikKICAgICAgewogICAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbjsgKytfX2kp
CiAgICAgICAgICBpZiAoIWVxKF9fczFbX19pXSwgX19zMltfX2ldKSkKICAgICAgICAgICAgcmV0
dXJuIGx0KF9fczFbX19pXSwgX19zMltfX2ldKSA/IC0xIDogMTsKICAgICAgICByZXR1cm4gMDsK
ICAgICAgfQoKICAgICAgc3RhdGljIHNpemVfdAogICAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBl
KiBfX3MpCiAgICAgIHsKICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fcCA9IF9fczsKICAgICAg
ICB3aGlsZSAoKl9fcCkgKytfX3A7CiAgICAgICAgcmV0dXJuIChfX3AgLSBfX3MpOwogICAgICB9
CgogICAgICBzdGF0aWMgY29uc3QgY2hhcl90eXBlKgogICAgICBmaW5kKGNvbnN0IGNoYXJfdHlw
ZSogX19zLCBzaXplX3QgX19uLCBjb25zdCBjaGFyX3R5cGUmIF9fYSkKICAgICAgewogICAgICAg
IGZvciAoY29uc3QgY2hhcl90eXBlKiBfX3AgPSBfX3M7IHNpemVfdChfX3AgLSBfX3MpIDwgX19u
OyArK19fcCkKICAgICAgICAgIGlmICgqX19wID09IF9fYSkgcmV0dXJuIF9fcDsKICAgICAgICBy
ZXR1cm4gMDsKICAgICAgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgbW92ZShjaGFy
X3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyBy
ZXR1cm4gKGNoYXJfdHlwZSopIG1lbW1vdmUoX19zMSwgX19zMiwgX19uICogc2l6ZW9mKGNoYXJf
dHlwZSkpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5KGNoYXJfdHlwZSog
X19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiAo
Y2hhcl90eXBlKikgbWVtY3B5KF9fczEsIF9fczIsIF9fbiAqIHNpemVvZihjaGFyX3R5cGUpKTsg
fQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgYXNzaWduKGNoYXJfdHlwZSogX19zLCBz
aXplX3QgX19uLCBjaGFyX3R5cGUgX19hKQogICAgICB7CiAgICAgICAgZm9yIChjaGFyX3R5cGUq
IF9fcCA9IF9fczsgX19wIDwgX19zICsgX19uOyArK19fcCkKICAgICAgICAgIGFzc2lnbigqX19w
LCBfX2EpOwogICAgICAgIHJldHVybiBfX3M7CiAgICAgIH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5
cGUKICAgICAgdG9fY2hhcl90eXBlKGNvbnN0IGludF90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJu
IGNoYXJfdHlwZShfX2MpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgdG9faW50X3R5
cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpIHsgcmV0dXJuIGludF90eXBlKF9fYyk7IH0KCiAgICAg
IHN0YXRpYyBib29sCiAgICAgIGVxX2ludF90eXBlKGNvbnN0IGludF90eXBlJiBfX2MxLCBjb25z
dCBpbnRfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CgogICAgICBz
dGF0aWMgaW50X3R5cGUKICAgICAgZW9mKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+
KC0xKTsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIG5vdF9lb2YoY29uc3QgaW50X3R5
cGUmIF9fYykKICAgICAgeyByZXR1cm4gZXFfaW50X3R5cGUoX19jLCBlb2YoKSkgPyBpbnRfdHlw
ZSgwKSA6IF9fYzsgfQogICAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgY2hhcl90cmFp
dHM8Y2hhcj4KICAgIHsKICAgICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsKICAgICAgdHlwZWRl
ZiBpbnQgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtcG9zIHBvc190eXBlOwogICAgICB0
eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVf
dHlwZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2lnbihjaGFyX3R5cGUmIF9fYzEsIGNv
bnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyBfX2MxID0gX19jMjsgfQoKICAgICAgc3RhdGlj
IGJvb2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9f
YzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAg
ICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAg
IHsgcmV0dXJuIF9fYzEgPCBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50CiAgICAgIGNvbXBhcmUo
Y29uc3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24p
CiAgICAgIHsgcmV0dXJuIG1lbWNtcChfX3MxLCBfX3MyLCBfX24pOyB9CgogICAgICBzdGF0aWMg
c2l6ZV90CiAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcykKICAgICAgeyByZXR1cm4g
c3RybGVuKF9fcyk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGZpbmQo
Y29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYgX19hKQog
ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBjaGFyX3R5cGUqPihtZW1jaHIoX19zLCBf
X2EsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBtb3ZlKGNoYXJfdHlw
ZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVy
biBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPihtZW1tb3ZlKF9fczEsIF9fczIsIF9fbikpOyB9Cgog
ICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5KGNoYXJfdHlwZSogX19zMSwgY29uc3Qg
Y2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxj
aGFyX3R5cGUqPihtZW1jcHkoX19zMSwgX19zMiwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFy
X3R5cGUqCiAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY2hhcl90eXBl
IF9fYSkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVtc2V0KF9fcywg
X19hLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAgICB0b19jaGFyX3R5cGUo
Y29uc3QgaW50X3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBl
PihfX2MpOyB9CgoKCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICB0b19pbnRfdHlwZShjb25z
dCBjaGFyX3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYykpOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAg
ICBlcV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29uc3QgaW50X3R5cGUmIF9fYzIp
CiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAg
ICAgIGVvZigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPigoLTEpKTsgfQoKICAgICAg
c3RhdGljIGludF90eXBlCiAgICAgIG5vdF9lb2YoY29uc3QgaW50X3R5cGUmIF9fYykKICAgICAg
eyByZXR1cm4gKF9fYyA9PSBlb2YoKSkgPyAwIDogX19jOyB9CiAgfTsKIyAyNjQgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9jaGFyX3RyYWl0cy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RydWN0IF9DaGFyX3RyYWl0c19tYXRj
aAogICAgewogICAgICBfQ2hhclQgX01fYzsKICAgICAgX0NoYXJfdHJhaXRzX21hdGNoKF9DaGFy
VCBjb25zdCYgX19jKSA6IF9NX2MoX19jKSB7IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3Io
KShfQ2hhclQgY29uc3QmIF9fYSkgeyByZXR1cm4gX1RyYWl0czo6ZXEoX01fYywgX19hKTsgfQog
ICAgfTsKfQojIDQyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAy
IDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAxIDMK
IyA0MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMiAzCiMgMSAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAxIDMKIyAzOCAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAzCgojIDEgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvaTU4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAz
CiMgNDAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMiAzCiMg
MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNTg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2xv
Y2FsZS5oIiAxIDMKIyAzNiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNTg2LXBjLWxpbnV4
LWdudS9iaXRzL2MrK2xvY2FsZS5oIiAzCm5hbWVzcGFjZSBzdGQKewogIHR5cGVkZWYgaW50KiBf
X2NfbG9jYWxlOwp9CiMgNDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVm
d2QuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jbGltaXRz
LmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NsaW1pdHMu
aCIgMwojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4wL2lu
Y2x1ZGUvbGltaXRzLmgiIDEgMwojIDExICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMt
bGludXgtZ251LzMuMC9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2Nj
LWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMSAzCgoKCgoK
CiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVk
ZS9saW1pdHMuaCIgMSAzCiMgMTMwICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGlu
dXgtZ251LzMuMC9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5o
IiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Zl
YXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMSAzCiMgMTI2ICIvdXNyL2luY2x1ZGUvYml0
cy9wb3NpeDFfbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMSAz
CiMgMjcgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl
L2xpbnV4L2xpbWl0cy5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgi
IDIgMwojIDEyNyAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAyIDMKIyAzMSAiL3Vz
ci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDJf
bGltLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgojIDEgIi91c3Iv
aW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL2JpdHMveG9w
ZW5fbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpb19saW0uaCIgMSAzCiMgMzUg
Ii91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAyIDMKIyAzOSAiL3Vzci9pbmNsdWRlL2xp
bWl0cy5oIiAyIDMKIyAxMzEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1n
bnUvMy4wL2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDggIi91c3IvbG9jYWwvbGliL2djYy1saWIv
aTU4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3lzbGltaXRzLmgiIDIgMwojIDEyICIvdXNy
L2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2xpbWl0cy5o
IiAyIDMKIyAzOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jbGltaXRzLmgi
IDIgMwojIDQyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDIg
MwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDEgMwoj
IDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAzCgojIDEg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTU4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25m
aWcuaCIgMSAzCiMgNDAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5n
LmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdHJpbmdmd2QuaCIg
MSAzCiMgNDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIg
MwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9jaGFyX3RyYWl0cy5oIiAxIDMK
IyA0MiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCiMg
MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pdGVyYXRvci5oIiAxIDMKIyAz
MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pdGVyYXRvci5oIiAzCiMgMSAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNTg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZp
Zy5oIiAxIDMKIyAzMiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pdGVyYXRv
ci5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYu
aCIgMSAzCiMgMzMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3Iu
aCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIg
MSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3IuaCIg
MiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNl
X3R5cGVzLmgiIDEgMwojIDQwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0
ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwoKbmFtZXNwYWNlIHN0ZAp7CgpzdHJ1Y3QgaW5wdXRfaXRl
cmF0b3JfdGFnIHt9OwpzdHJ1Y3Qgb3V0cHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IGZvcndh
cmRfaXRlcmF0b3JfdGFnIDogcHVibGljIGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IGJp
ZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIDogcHVibGljIGZvcndhcmRfaXRlcmF0b3JfdGFnIHt9
OwpzdHJ1Y3QgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgOiBwdWJsaWMgYmlkaXJlY3Rpb25h
bF9pdGVyYXRvcl90YWcge307CgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0
YW5jZT4gc3RydWN0IGlucHV0X2l0ZXJhdG9yIHsKICB0eXBlZGVmIGlucHV0X2l0ZXJhdG9yX3Rh
ZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYg
X0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBl
ZGVmIF9UcCYgcmVmZXJlbmNlOwp9OwoKc3RydWN0IG91dHB1dF9pdGVyYXRvciB7CiAgdHlwZWRl
ZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2
YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lk
IHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGZvcndhcmRfaXRlcmF0b3IgewogIHR5cGVkZWYg
Zm9yd2FyZF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFs
dWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBf
VHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yIHsK
ICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Owog
IHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90
eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCByYW5kb21fYWNj
ZXNzX2l0ZXJhdG9yIHsKICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJh
dG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFu
Y2UgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgX1Rw
JiByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NhdGVnb3J5LCBjbGFzcyBfVHAsIGNs
YXNzIF9EaXN0YW5jZSA9IHB0cmRpZmZfdCwKICAgICAgICAgIGNsYXNzIF9Qb2ludGVyID0gX1Rw
KiwgY2xhc3MgX1JlZmVyZW5jZSA9IF9UcCY+CnN0cnVjdCBpdGVyYXRvciB7CiAgdHlwZWRlZiBf
Q2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0
eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfUG9pbnRlciBwb2lu
dGVyOwogIHR5cGVkZWYgX1JlZmVyZW5jZSByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0l0ZXJhdG9yPgpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzIHsKICB0eXBlZGVmIHR5cGVuYW1lIF9J
dGVyYXRvcjo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB0
eXBlbmFtZSBfSXRlcmF0b3I6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5cGVu
YW1lIF9JdGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVm
IHR5cGVuYW1lIF9JdGVyYXRvcjo6cG9pbnRlciBwb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUg
X0l0ZXJhdG9yOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4K
c3RydWN0IGl0ZXJhdG9yX3RyYWl0czxfVHAqPiB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0
ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwog
IHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRl
cjsKICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3Ry
dWN0IGl0ZXJhdG9yX3RyYWl0czxjb25zdCBfVHAqPiB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNz
X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBl
OwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIGNvbnN0IF9U
cCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCYgcmVmZXJlbmNlOwp9OwojIDE0MCAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDMK
dGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J
dGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkKX19pdGVyYXRvcl9jYXRlZ29yeShjb25zdCBfSXRlciYp
CnsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2Nh
dGVnb3J5IF9DYXRlZ29yeTsKICByZXR1cm4gX0NhdGVnb3J5KCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OmRpZmZlcmVu
Y2VfdHlwZSoKX19kaXN0YW5jZV90eXBlKGNvbnN0IF9JdGVyJikKewogIHJldHVybiBzdGF0aWNf
Y2FzdDx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUqPigw
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JdGVyPjo6dmFsdWVfdHlwZSoKX192YWx1ZV90eXBlKGNvbnN0IF9JdGVyJikKewogIHJl
dHVybiBzdGF0aWNfY2FzdDx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1ZV90
eXBlKj4oMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5Cml0ZXJhdG9yX2NhdGVnb3J5KGNv
bnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19pKTsgfQoKCnRl
bXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRl
cj46OmRpZmZlcmVuY2VfdHlwZSoKZGlzdGFuY2VfdHlwZShjb25zdCBfSXRlciYgX19pKSB7IHJl
dHVybiBfX2Rpc3RhbmNlX3R5cGUoX19pKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxp
bmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSoKdmFsdWVfdHlw
ZShjb25zdCBfSXRlciYgX19pKSB7IHJldHVybiBfX3ZhbHVlX3R5cGUoX19pKTsgfQoKfQojIDM1
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2l0ZXJhdG9yLmgiIDIgMwojIDEg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5o
IiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9i
YXNlX2Z1bmNzLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvY29uY2Vw
dF9jaGVjay5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2NvbmNl
cHRfY2hlY2suaCIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k1ODYtcGMtbGlu
dXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDM2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2JpdHMvY29uY2VwdF9jaGVjay5oIiAyIDMKIyA0MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7
CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+Cmlu
bGluZSB2b2lkIF9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0
b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSYgX19uLCBpbnB1dF9p
dGVyYXRvcl90YWcpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkg
eyArK19fZmlyc3Q7ICsrX19uOyB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl
cmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19kaXN0YW5jZShfUmFuZG9tQWNj
ZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz
SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSYgX19uLCBy
YW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
ICBfX24gKz0gX19sYXN0IC0gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh
dG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIGRpc3RhbmNlKF9JbnB1dEl0ZXJhdG9y
IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgX0Rp
c3RhbmNlJiBfX24pCnsKCiAgX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbiwgaXRlcmF0
b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+
CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJl
bmNlX3R5cGUKX19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv
ciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7
CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICArK19fZmlyc3Q7ICsrX19uOwogIH0K
ICByZXR1cm4gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgpp
bmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRp
ZmZlcmVuY2VfdHlwZQpfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRl
cmF0b3JfdGFnKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVybiBfX2xhc3Qg
LSBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CmlubGluZSB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKZGlz
dGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQp7Cgog
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6aXRlcmF0
b3JfY2F0ZWdvcnkKICAgIF9DYXRlZ29yeTsKICByZXR1cm4gX19kaXN0YW5jZShfX2ZpcnN0LCBf
X2xhc3QsIF9DYXRlZ29yeSgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz
IF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9JbnB1dEl0ZXImIF9faSwgX0Rpc3Rh
bmNlIF9fbiwgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHdoaWxlIChfX24tLSkg
KytfX2k7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCBjbGFzcyBf
RGlzdGFuY2U+CmlubGluZSB2b2lkIF9fYWR2YW5jZShfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yJiBf
X2ksIF9EaXN0YW5jZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0
ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBpZiAoX19uID4gMCkK
ICAgIHdoaWxlIChfX24tLSkgKytfX2k7CiAgZWxzZQogICAgd2hpbGUgKF9fbisrKSAtLV9faTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNl
PgppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yJiBfX2ksIF9EaXN0
YW5jZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3Rh
ZykKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBfX2kgKz0gX19uOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgYWR2
YW5jZShfSW5wdXRJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uKQp7CgogIF9fYWR2YW5jZShf
X2ksIF9fbiwgaXRlcmF0b3JfY2F0ZWdvcnkoX19pKSk7Cn0KCn0KIyAzNiAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9pdGVyYXRvci5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KY2xhc3MgYmFja19pbnNlcnRfaXRlcmF0b3Igewpwcm90
ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29udGFpbmVyOwpwdWJsaWM6CiAgdHlwZWRlZiBfQ29udGFp
bmVyIGNvbnRhaW5lcl90eXBlOwogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRv
cl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgZGlm
ZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCByZWZl
cmVuY2U7CgogIGV4cGxpY2l0IGJhY2tfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkg
OiBjb250YWluZXIoJl9feCkge30KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYK
ICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1
ZSkgewogICAgY29udGFpbmVyLT5wdXNoX2JhY2soX192YWx1ZSk7CiAgICByZXR1cm4gKnRoaXM7
CiAgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJl
dHVybiAqdGhpczsgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRv
cisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVy
PiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0NvbnRhaW5lcj4KaW5saW5lIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+IGJhY2tf
aW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KSB7CiAgcmV0dXJuIGJhY2tfaW5zZXJ0X2l0ZXJhdG9y
PF9Db250YWluZXI+KF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpjbGFzcyBm
cm9udF9pbnNlcnRfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29udGFpbmVy
OwpwdWJsaWM6CiAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwogIHR5cGVkZWYg
b3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgdmFs
dWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCBw
b2ludGVyOwogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7CgogIGV4cGxpY2l0IGZyb250X2luc2Vy
dF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHt9CiAgZnJvbnRf
aW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBf
Q29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7CiAgICBjb250YWluZXItPnB1c2hfZnJv
bnQoX192YWx1ZSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGZyb250X2luc2VydF9pdGVyYXRv
cjxfQ29udGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBmcm9udF9pbnNl
cnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQog
IGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0
dXJuICp0aGlzOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KaW5saW5lIGZyb250
X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBmcm9udF9pbnNlcnRlcihfQ29udGFpbmVyJiBf
X3gpIHsKICByZXR1cm4gZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpjbGFzcyBpbnNlcnRfaXRlcmF0b3Igewpwcm90
ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29udGFpbmVyOwogIHR5cGVuYW1lIF9Db250YWluZXI6Oml0
ZXJhdG9yIGl0ZXI7CnB1YmxpYzoKICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVyX3R5cGU7
CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVk
ZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlw
ZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsKCiAgaW5zZXJ0X2l0
ZXJhdG9yKF9Db250YWluZXImIF9feCwgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgX19p
KQogICAgOiBjb250YWluZXIoJl9feCksIGl0ZXIoX19pKSB7fQogIGluc2VydF9pdGVyYXRvcjxf
Q29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVf
dHlwZSYgX192YWx1ZSkgewogICAgaXRlciA9IGNvbnRhaW5lci0+aW5zZXJ0KGl0ZXIsIF9fdmFs
dWUpOwogICAgKytpdGVyOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpbnNlcnRfaXRlcmF0b3I8
X0NvbnRhaW5lcj4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAgaW5zZXJ0X2l0ZXJh
dG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBpbnNlcnRf
aXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXIsIGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lCmlu
c2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBpbnNlcnRlcihfQ29udGFpbmVyJiBfX3gsIF9JdGVy
YXRvciBfX2kpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIF9faXRl
cjsKICByZXR1cm4gaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCwgX19pdGVyKF9faSkp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgY2xhc3MgX1RwLCBj
bGFzcyBfUmVmZXJlbmNlID0gX1RwJiwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSA9IHB0cmRp
ZmZfdD4KY2xhc3MgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yIHsKICB0eXBlZGVmIHJl
dmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCBfVHAs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JlZmVyZW5jZSwgX0Rp
c3RhbmNlPiBfU2VsZjsKcHJvdGVjdGVkOgogIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgY3VycmVu
dDsKcHVibGljOgogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3Jf
Y2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSBk
aWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBfUmVmZXJl
bmNlIHJlZmVyZW5jZTsKCiAgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yKCkge30KICBl
eHBsaWNpdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IoX0JpZGlyZWN0aW9uYWxJdGVy
YXRvciBfX3gpCiAgICA6IGN1cnJlbnQoX194KSB7fQogIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3Ig
YmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnQ7IH0KICBfUmVmZXJlbmNlIG9wZXJhdG9yKigp
IGNvbnN0IHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX190bXAgPSBjdXJyZW50OwogICAg
cmV0dXJuICotLV9fdG1wOwogIH0KICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVy
biAmKG9wZXJhdG9yKigpKTsgfQogIF9TZWxmJiBvcGVyYXRvcisrKCkgewogICAgLS1jdXJyZW50
OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvcisrKGludCkgewogICAgX1Nl
bGYgX190bXAgPSAqdGhpczsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9CiAg
X1NlbGYmIG9wZXJhdG9yLS0oKSB7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAg
fQogIF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAg
KytjdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQmlJ
dGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWYsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIGJvb2wg
b3BlcmF0b3I9PSgKICAgIGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJ
dGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feCwKICAgIGNvbnN0IHJldmVyc2VfYmlkaXJl
Y3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feSkKewog
IHJldHVybiBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlJ
dGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWYsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIGJvb2wg
b3BlcmF0b3IhPSgKICAgIGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJ
dGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feCwKICAgIGNvbnN0IHJldmVyc2VfYmlkaXJl
Y3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feSkKewog
IHJldHVybiAhKF9feCA9PSBfX3kpOwp9CiMgMTkzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KY2xhc3Mg
cmV2ZXJzZV9pdGVyYXRvcgp7CnByb3RlY3RlZDoKICBfSXRlcmF0b3IgY3VycmVudDsKcHVibGlj
OgogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9y
X2NhdGVnb3J5CiAgICAgICAgICBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICB2YWx1ZV90
eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZl
cmVuY2VfdHlwZQogICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIKICAgICAgICAgIHBvaW50ZXI7CiAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlCiAg
ICAgICAgICByZWZlcmVuY2U7CgogIHR5cGVkZWYgX0l0ZXJhdG9yIGl0ZXJhdG9yX3R5cGU7CiAg
dHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4gX1NlbGY7CgpwdWJsaWM6CiAgcmV2
ZXJzZV9pdGVyYXRvcigpIHt9CiAgZXhwbGljaXQgcmV2ZXJzZV9pdGVyYXRvcihpdGVyYXRvcl90
eXBlIF9feCkgOiBjdXJyZW50KF9feCkge30KCiAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCBfU2Vs
ZiYgX194KSA6IGN1cnJlbnQoX194LmN1cnJlbnQpIHt9CiAgdGVtcGxhdGUgPGNsYXNzIF9JdGVy
PgogIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcj4mIF9feCkK
ICAgIDogY3VycmVudChfX3guYmFzZSgpKSB7fQoKICBpdGVyYXRvcl90eXBlIGJhc2UoKSBjb25z
dCB7IHJldHVybiBjdXJyZW50OyB9CiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAg
IF9JdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7CiAgICByZXR1cm4gKi0tX190bXA7CiAgfQogIHBv
aW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgogIF9T
ZWxmJiBvcGVyYXRvcisrKCkgewogICAgLS1jdXJyZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0K
ICBfU2VsZiBvcGVyYXRvcisrKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIC0t
Y3VycmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7CiAg
ICArK2N1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yLS0oaW50
KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgKytjdXJyZW50OwogICAgcmV0dXJuIF9f
dG1wOwogIH0KCiAgX1NlbGYgb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsK
ICAgIHJldHVybiBfU2VsZihjdXJyZW50IC0gX19uKTsKICB9CiAgX1NlbGYmIG9wZXJhdG9yKz0o
ZGlmZmVyZW5jZV90eXBlIF9fbikgewogICAgY3VycmVudCAtPSBfX247CiAgICByZXR1cm4gKnRo
aXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7CiAg
ICByZXR1cm4gX1NlbGYoY3VycmVudCArIF9fbik7CiAgfQogIF9TZWxmJiBvcGVyYXRvci09KGRp
ZmZlcmVuY2VfdHlwZSBfX24pIHsKICAgIGN1cnJlbnQgKz0gX19uOwogICAgcmV0dXJuICp0aGlz
OwogIH0KICByZWZlcmVuY2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7
IHJldHVybiAqKCp0aGlzICsgX19uKTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4K
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4m
IF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy
YXRvcj4mIF9feSkgewogIHJldHVybiBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCByZXZlcnNl
X2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJl
dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJuIF9feS5iYXNlKCkgPCBf
X3guYmFzZSgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7CiAg
cmV0dXJuICEoX194ID09IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGlu
ZSBib29sIG9wZXJhdG9yPihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwK
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYg
X195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4K
aW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4m
IF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy
YXRvcj4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
SXRlcmF0b3I+CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxf
SXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJh
dG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy
YXRvcj46OmRpZmZlcmVuY2VfdHlwZQpvcGVyYXRvci0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxf
SXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRv
cj4mIF9feSkgewogIHJldHVybiBfX3kuYmFzZSgpIC0gX194LmJhc2UoKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPgpvcGVy
YXRvcisodHlwZW5hbWUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5
cGUgX19uLAogICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gp
IHsKICByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+KF9feC5iYXNlKCkgLSBfX24p
Owp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNzIF9DaGFyVCA9IGNoYXIs
IGNsYXNzIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgY2xhc3MgX0Rp
c3QgPSBwdHJkaWZmX3Q+CmNsYXNzIGlzdHJlYW1faXRlcmF0b3IgewpwdWJsaWM6CiAgdHlwZWRl
ZiBfQ2hhclQgY2hhcl90eXBlOwogIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICB0eXBl
ZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBpc3RyZWFtX3R5cGU7CgogIHR5cGVk
ZWYgaW5wdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZh
bHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBjb25z
dCBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAmIHJlZmVyZW5jZTsKCiAgaXN0cmVh
bV9pdGVyYXRvcigpIDogX01fc3RyZWFtKDApLCBfTV9vayhmYWxzZSkge30KICBpc3RyZWFtX2l0
ZXJhdG9yKGlzdHJlYW1fdHlwZSYgX19zKSA6IF9NX3N0cmVhbSgmX19zKSB7IF9NX3JlYWQoKTsg
fQoKICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gX01fdmFsdWU7IH0KICBw
b2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKICBp
c3RyZWFtX2l0ZXJhdG9yJiBvcGVyYXRvcisrKCkgewogICAgX01fcmVhZCgpOwogICAgcmV0dXJu
ICp0aGlzOwogIH0KICBpc3RyZWFtX2l0ZXJhdG9yIG9wZXJhdG9yKysoaW50KSB7CiAgICBpc3Ry
ZWFtX2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBfTV9yZWFkKCk7CiAgICByZXR1cm4gX190
bXA7CiAgfQoKICBib29sIF9NX2VxdWFsKGNvbnN0IGlzdHJlYW1faXRlcmF0b3ImIF9feCkgY29u
c3QKICAgIHsgcmV0dXJuIChfTV9vayA9PSBfX3guX01fb2spICYmICghX01fb2sgfHwgX01fc3Ry
ZWFtID09IF9feC5fTV9zdHJlYW0pOyB9Cgpwcml2YXRlOgogIGlzdHJlYW1fdHlwZSogX01fc3Ry
ZWFtOwogIF9UcCBfTV92YWx1ZTsKICBib29sIF9NX29rOwoKICB2b2lkIF9NX3JlYWQoKSB7CiAg
ICBfTV9vayA9IChfTV9zdHJlYW0gJiYgKl9NX3N0cmVhbSkgPyB0cnVlIDogZmFsc2U7CiAgICBp
ZiAoX01fb2spIHsKICAgICAgKl9NX3N0cmVhbSA+PiBfTV92YWx1ZTsKICAgICAgX01fb2sgPSAq
X01fc3RyZWFtID8gdHJ1ZSA6IGZhbHNlOwogICAgfQogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0Rpc3Q+CmlubGluZSBib29s
Cm9wZXJhdG9yPT0oY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0cywg
X0Rpc3Q+JiBfX3gsCiAgICAgICAgICAgY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFy
VCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX2VxdWFsKF9feSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3Mg
X0Rpc3Q+CmlubGluZSBib29sCm9wZXJhdG9yIT0oY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAs
IF9DaGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3gsCiAgICAgICAgICAgY29uc3QgaXN0cmVhbV9p
dGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3kpIHsKICByZXR1cm4gIV9f
eC5fTV9lcXVhbChfX3kpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNz
IF9DaGFyVCA9IGNoYXIsIGNsYXNzIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KY2xh
c3Mgb3N0cmVhbV9pdGVyYXRvciB7CnB1YmxpYzoKICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7
CiAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+IG9zdHJlYW1fdHlwZTsKCiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3Jf
dGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVk
ZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRl
ZiB2b2lkIHJlZmVyZW5jZTsKCiAgb3N0cmVhbV9pdGVyYXRvcihvc3RyZWFtX3R5cGUmIF9fcykg
OiBfTV9zdHJlYW0oJl9fcyksIF9NX3N0cmluZygwKSB7fQogIG9zdHJlYW1faXRlcmF0b3Iob3N0
cmVhbV90eXBlJiBfX3MsIGNvbnN0IF9DaGFyVCogX19jKQogICAgOiBfTV9zdHJlYW0oJl9fcyks
IF9NX3N0cmluZyhfX2MpIHt9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcj0oY29u
c3QgX1RwJiBfX3ZhbHVlKSB7CiAgICAqX01fc3RyZWFtIDw8IF9fdmFsdWU7CiAgICBpZiAoX01f
c3RyaW5nKSAqX01fc3RyZWFtIDw8IF9NX3N0cmluZzsKICAgIHJldHVybiAqdGhpczsKICB9CiAg
b3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIG9z
dHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAgb3N0
cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KcHJp
dmF0ZToKICBvc3RyZWFtX3R5cGUqIF9NX3N0cmVhbTsKICBjb25zdCBfQ2hhclQqIF9NX3N0cmlu
ZzsKfTsKIyA0MTcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3Iu
aCIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CmNs
YXNzIF9fbm9ybWFsX2l0ZXJhdG9yCiAgOiBwdWJsaWMgaXRlcmF0b3I8aXRlcmF0b3JfdHJhaXRz
PF9JdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5LAogICAgICAgICAgICAgICAgICAgIGl0ZXJh
dG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAogICAgICAgICAgICAgICAgICAgIGl0
ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUsCiAgICAgICAgICAgICAg
ICAgICAgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIsCiAgICAgICAgICAgICAg
ICAgICAgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZT4KewoKcHJvdGVjdGVk
OgogIF9JdGVyYXRvciBfTV9jdXJyZW50OwoKcHVibGljOgogIHR5cGVkZWYgX19ub3JtYWxfaXRl
cmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiBub3JtYWxfaXRlcmF0b3JfdHlwZTsKICB0eXBl
ZGVmIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+IF9fdHJhaXRzX3R5cGU7CiAgdHlwZWRlZiB0
eXBlbmFtZSBfX3RyYWl0c190eXBlOjppdGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29y
eTsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6OnZhbHVlX3R5cGUgdmFsdWVfdHlw
ZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6OmRpZmZlcmVuY2VfdHlwZSBkaWZm
ZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjpwb2ludGVyIHBv
aW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjpyZWZlcmVuY2UgcmVmZXJl
bmNlOwoKICBfX25vcm1hbF9pdGVyYXRvcigpIDogX01fY3VycmVudChfSXRlcmF0b3IoKSkgeyB9
CgogIGV4cGxpY2l0IF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9JdGVyYXRvciYgX19pKSA6IF9N
X2N1cnJlbnQoX19pKSB7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPgogIGlubGluZSBf
X25vcm1hbF9pdGVyYXRvcihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlciwgX0NvbnRhaW5l
cj4mIF9faSkKICAgIDogX01fY3VycmVudChfX2kuYmFzZSgpKSB7IH0KCgogIHJlZmVyZW5jZQog
IG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpfTV9jdXJyZW50OyB9CgogIHBvaW50ZXIKICBv
cGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gX01fY3VycmVudDsgfQoKICBub3JtYWxfaXRlcmF0
b3JfdHlwZSYKICBvcGVyYXRvcisrKCkgeyArK19NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsgfQoK
ICBub3JtYWxfaXRlcmF0b3JfdHlwZQogIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiBfX25vcm1h
bF9pdGVyYXRvcihfTV9jdXJyZW50KyspOyB9CgoKICBub3JtYWxfaXRlcmF0b3JfdHlwZSYKICBv
cGVyYXRvci0tKCkgeyAtLV9NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsgfQoKICBub3JtYWxfaXRl
cmF0b3JfdHlwZQogIG9wZXJhdG9yLS0oaW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihf
TV9jdXJyZW50LS0pOyB9CgoKICByZWZlcmVuY2UKICBvcGVyYXRvcltdKGNvbnN0IGRpZmZlcmVu
Y2VfdHlwZSYgX19uKSBjb25zdAogIHsgcmV0dXJuIF9NX2N1cnJlbnRbX19uXTsgfQoKICBub3Jt
YWxfaXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvcis9KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19u
KQogIHsgX01fY3VycmVudCArPSBfX247IHJldHVybiAqdGhpczsgfQoKICBub3JtYWxfaXRlcmF0
b3JfdHlwZQogIG9wZXJhdG9yKyhjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QKICB7
IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50ICsgX19uKTsgfQoKICBub3JtYWxf
aXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvci09KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKQog
IHsgX01fY3VycmVudCAtPSBfX247IHJldHVybiAqdGhpczsgfQoKICBub3JtYWxfaXRlcmF0b3Jf
dHlwZQogIG9wZXJhdG9yLShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QKICB7IHJl
dHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50IC0gX19uKTsgfQoKICBkaWZmZXJlbmNl
X3R5cGUKICBvcGVyYXRvci0oY29uc3Qgbm9ybWFsX2l0ZXJhdG9yX3R5cGUmIF9faSkgY29uc3QK
ICB7IHJldHVybiBfTV9jdXJyZW50IC0gX19pLl9NX2N1cnJlbnQ7IH0KCiAgY29uc3QgX0l0ZXJh
dG9yJgogIGJhc2UoKSBjb25zdCB7IHJldHVybiBfTV9jdXJyZW50OyB9Cn07CgoKCnRlbXBsYXRl
PHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250
YWluZXI+CmlubGluZSBib29sCm9wZXJhdG9yPT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0
ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0
ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKeyByZXR1cm4gX19saHMuYmFz
ZSgpID09IF9fcmhzLmJhc2UoKTsgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlw
ZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KaW5saW5lIGJvb2wKb3BlcmF0
b3IhPShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19s
aHMsCiAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRh
aW5lcj4mIF9fcmhzKQp7IHJldHVybiAhKF9fbGhzID09IF9fcmhzKTsgfQoKCgp0ZW1wbGF0ZTx0
eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFp
bmVyPgppbmxpbmUgYm9vbApvcGVyYXRvcjwoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh
dG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0
b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQp7IHJldHVybiBfX2xocy5iYXNlKCkg
PCBfX3Jocy5iYXNlKCk7IH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1l
IF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CmlubGluZSBib29sCm9wZXJhdG9yPihj
b25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAg
ICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYg
X19yaHMpCnsgcmV0dXJuIF9fcmhzIDwgX19saHM7IH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVy
YXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CmlubGluZSBi
b29sCm9wZXJhdG9yPD0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRh
aW5lcj4mIF9fbGhzLAogICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv
clIsIF9Db250YWluZXI+JiBfX3JocykKeyByZXR1cm4gIShfX3JocyA8IF9fbGhzKTsgfQoKdGVt
cGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUg
X0NvbnRhaW5lcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PShjb25zdCBfX25vcm1hbF9pdGVyYXRv
cjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgY29uc3QgX19ub3Jt
YWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQp7IHJldHVybiAhKF9f
bGhzIDwgX19yaHMpOyB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9D
b250YWluZXI+CmlubGluZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+
Cm9wZXJhdG9yKyhfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+OjpkaWZm
ZXJlbmNlX3R5cGUgX19uLAogICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh
dG9yLCBfQ29udGFpbmVyPiYgX19pKQp7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0
b3IsIF9Db250YWluZXI+KF9faS5iYXNlKCkgKyBfX24pOyB9Cgp9CiMgMzcgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3IuaCIgMiAzCiMgNDMgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfbWVtb3J5LmgiIDEgMwojIDE5ICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9yeS5oIiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvaTU4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgMzYgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgojIDEgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfcGFpci5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL3N0bF9wYWlyLmgiIDMKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CnN0cnVjdCBwYWlyIHsKICB0eXBlZGVmIF9UMSBmaXJz
dF90eXBlOwogIHR5cGVkZWYgX1QyIHNlY29uZF90eXBlOwoKICBfVDEgZmlyc3Q7CiAgX1QyIHNl
Y29uZDsKCgogIHBhaXIoKSA6IGZpcnN0KCksIHNlY29uZCgpIHt9CgoKCiAgcGFpcihjb25zdCBf
VDEmIF9fYSwgY29uc3QgX1QyJiBfX2IpIDogZmlyc3QoX19hKSwgc2Vjb25kKF9fYikge30KCiAg
dGVtcGxhdGUgPGNsYXNzIF9VMSwgY2xhc3MgX1UyPgogIHBhaXIoY29uc3QgcGFpcjxfVTEsIF9V
Mj4mIF9fcCkgOiBmaXJzdChfX3AuZmlyc3QpLCBzZWNvbmQoX19wLnNlY29uZCkge30KfTsKCnRl
bXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7CiAgcmV0
dXJuIF9feC5maXJzdCA9PSBfX3kuZmlyc3QgJiYgX194LnNlY29uZCA9PSBfX3kuc2Vjb25kOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPChj
b25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7CiAg
cmV0dXJuIF9feC5maXJzdCA8IF9feS5maXJzdCB8fAogICAgICAgICAoIShfX3kuZmlyc3QgPCBf
X3guZmlyc3QpICYmIF9feC5zZWNvbmQgPCBfX3kuc2Vjb25kKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHBhaXI8X1QxLCBf
VDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0g
X195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVy
YXRvcj4oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9f
eSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9U
Mj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25z
dCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IHBh
aXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1cm4g
IShfX3ggPCBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CgoKaW5saW5l
IHBhaXI8X1QxLCBfVDI+IG1ha2VfcGFpcihfVDEgX194LCBfVDIgX195KQoKCgp7CiAgcmV0dXJu
IHBhaXI8X1QxLCBfVDI+KF9feCwgX195KTsKfQoKfQojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL3R5cGVfdHJhaXRzLmgiIDEgMwojIDE5ICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvdHlwZV90cmFpdHMuaCIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2k1ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDIxICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvdHlwZV90cmFpdHMuaCIgMiAzCiMgNTcgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy90eXBlX3RyYWl0cy5oIiAzCnRlbXBsYXRlIDxib29sIF9U
cnV0aD4gc3RydWN0IF9Cb29sIHt9Owp0eXBlZGVmIF9Cb29sPHRydWU+IF9fdHJ1ZV90eXBlOwp0
eXBlZGVmIF9Cb29sPGZhbHNlPiBfX2ZhbHNlX3R5cGU7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpz
dHJ1Y3QgX190eXBlX3RyYWl0cyB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgdGhpc19kdW1teV9t
ZW1iZXJfbXVzdF9iZV9maXJzdDsKIyA4MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz
L3R5cGVfdHJhaXRzLmgiIDMKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVm
YXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfY29w
eV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdu
bWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgp0ZW1wbGF0
ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGJvb2w+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoK
dGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlw
ZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8c2lnbmVkIGNoYXI+IHsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNp
Z25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl
cmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9f
dHlwZV90cmFpdHM8d2NoYXJfdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
Y29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3Np
Z25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+
IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNob3J0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRl
bXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgc2hvcnQ+IHsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz
X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxpbnQ+IHsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNp
Z25lZCBpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy
YXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190
eXBlX3RyYWl0czxsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVm
YXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5
X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1l
bnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3Rv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3Ry
dWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07
CgoKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBsb25nPiB7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBp
c19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQg
bG9uZyBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl
cmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCgoKdGVtcGxhdGU8PiBzdHJ1Y3Qg
X190eXBlX3RyYWl0czxmbG9hdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
Y29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3Np
Z25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+
IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGRvdWJsZT4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0
ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgZG91YmxlPiB7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19Q
T0RfdHlwZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX3R5cGVfdHJhaXRzPF9U
cCo+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+IHN0
cnVjdCBfSXNfaW50ZWdlciB7CiAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX0ludGVncmFsOwp9OwoK
dGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8Ym9vbD4gewogIHR5cGVkZWYgX190cnVlX3R5
cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8Y2hhcj4gewog
IHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lz
X2ludGVnZXI8c2lnbmVkIGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK
fTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGNoYXI+IHsKICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRl
Z2VyPHdjaGFyX3Q+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBs
YXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBf
SW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBzaG9y
dD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1
Y3QgX0lzX2ludGVnZXI8aW50PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07
Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBpbnQ+IHsKICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2Vy
PGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4g
c3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZyBsb25n
PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVj
dCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBzdHJ1Y3QgX0lzX25vcm1h
bF9pdGVyYXRvciB7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIF9Ob3JtYWw7Cn07CgoKbmFtZXNw
YWNlIHN0ZCB7CiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRh
aW5lcj4gY2xhc3MgX19ub3JtYWxfaXRlcmF0b3I7Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRl
cmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CnN0cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9yPCBz
dGQ6Ol9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4gPiB7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgX05vcm1hbDsKfTsKIyA0MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12
My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDEgMwojIDQzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfY2xpbWl0cy5oIiAxIDMKIyA0NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX2NzdGRsaWIuaCIgMSAzCiMgMzcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfY3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNTg2LXBj
LWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9jc3RkbGliLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9jc3RkbGliLmgiIDIgMwojIDQxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAz
CiMgNDIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAyIDMK
IyA3MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkbGliLmgiIDMKbmFt
ZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpkaXZfdDsKICB1c2luZyA6OmxkaXZfdDsKCiAgdXNpbmcg
OjphYm9ydDsKICB1c2luZyA6OmFiczsKICB1c2luZyA6OmF0ZXhpdDsKICB1c2luZyA6OmF0b2Y7
CiAgdXNpbmcgOjphdG9pOwogIHVzaW5nIDo6YXRvbDsKICB1c2luZyA6OmJzZWFyY2g7CiAgdXNp
bmcgOjpjYWxsb2M7CiAgdXNpbmcgOjpkaXY7CiAgdXNpbmcgOjpleGl0OwogIHVzaW5nIDo6ZnJl
ZTsKICB1c2luZyA6OmdldGVudjsKICB1c2luZyA6OmxhYnM7CiAgdXNpbmcgOjpsZGl2OwogIHVz
aW5nIDo6bWFsbG9jOwogIHVzaW5nIDo6bWJsZW47CiAgdXNpbmcgOjptYnN0b3djczsKICB1c2lu
ZyA6Om1idG93YzsKICB1c2luZyA6OnFzb3J0OwogIHVzaW5nIDo6cmFuZDsKICB1c2luZyA6OnJl
YWxsb2M7CiAgdXNpbmcgOjpzcmFuZDsKICB1c2luZyA6OnN0cnRvZDsKICB1c2luZyA6OnN0cnRv
bDsKICB1c2luZyA6OnN0cnRvdWw7CiAgdXNpbmcgOjpzeXN0ZW07CiAgdXNpbmcgOjp3Y3N0b21i
czsKICB1c2luZyA6OndjdG9tYjsKCiAgaW5saW5lIGxvbmcKICBhYnMobG9uZyBfX2kpIHsgcmV0
dXJuIGxhYnMoX19pKTsgfQoKICBpbmxpbmUgbGRpdl90CiAgZGl2KGxvbmcgX19pLCBsb25nIF9f
aikgeyByZXR1cm4gbGRpdihfX2ksIF9faik7IH0KfQojIDEyNSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9jc3RkbGliLmgiIDMKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdXNp
bmcgOjpsbGRpdl90OwogIHVzaW5nIDo6X0V4aXQ7CgogIGlubGluZSBsb25nIGxvbmcKICBhYnMo
bG9uZyBsb25nIF9feCkgeyByZXR1cm4gX194ID49IDAgPyBfX3ggOiAtX194OyB9CgogIGlubGlu
ZSBsb25nIGxvbmcKICBsbGFicyhsb25nIGxvbmcgX194KSB7IHJldHVybiBfX3ggPj0gMCA/IF9f
eCA6IC1fX3g7IH0KCiAgaW5saW5lIGxsZGl2X3QKICBkaXYobG9uZyBsb25nIF9fbiwgbG9uZyBs
b25nIF9fZCkKICB7IGxsZGl2X3QgX19xOyBfX3EucXVvdCA9IF9fbiAvIF9fZDsgX19xLnJlbSA9
IF9fbiAlIF9fZDsgcmV0dXJuIF9fcTsgfQoKICBpbmxpbmUgbGxkaXZfdAogIGxsZGl2KGxvbmcg
bG9uZyBfX24sIGxvbmcgbG9uZyBfX2QpCiAgeyBsbGRpdl90IF9fcTsgX19xLnF1b3QgPSBfX24g
LyBfX2Q7IF9fcS5yZW0gPSBfX24gJSBfX2Q7IHJldHVybiBfX3E7IH0KCiAgdXNpbmcgOjphdG9s
bDsKICB1c2luZyA6OnN0cnRvZjsKICB1c2luZyA6OnN0cnRvbGw7CiAgdXNpbmcgOjpzdHJ0b3Vs
bDsKICB1c2luZyA6OnN0cnRvbGQ7Cn0KCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIF9fZ251X2N4
eDo6bGxkaXZfdDsKICB1c2luZyBfX2dudV9jeHg6Ol9FeGl0OwogIHVzaW5nIF9fZ251X2N4eDo6
YWJzOwogIHVzaW5nIF9fZ251X2N4eDo6bGxhYnM7CiAgdXNpbmcgX19nbnVfY3h4OjpkaXY7CiAg
dXNpbmcgX19nbnVfY3h4OjpsbGRpdjsKICB1c2luZyBfX2dudV9jeHg6OmF0b2xsOwogIHVzaW5n
IF9fZ251X2N4eDo6c3RydG9mOwogIHVzaW5nIF9fZ251X2N4eDo6c3RydG9sbDsKICB1c2luZyBf
X2dudV9jeHg6OnN0cnRvdWxsOwogIHVzaW5nIF9fZ251X2N4eDo6c3RydG9sZDsKfQojIDQ1ICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyA0NiAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL25ldyIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvbmV3IiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9jc3RkZGVmIiAxIDMK
IyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9uZXciIDIgMwojIDEgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvZXhjZXB0aW9uIiAxIDMKIyAzNiAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9uZXciIDIgMwoKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQKewogIGNsYXNzIGJh
ZF9hbGxvYyA6IHB1YmxpYyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAgYmFkX2FsbG9jKCkg
dGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmJhZF9hbGxvYygpIHRocm93KCk7CiAgfTsKCiAgc3Ry
dWN0IG5vdGhyb3dfdCB7IH07CiAgZXh0ZXJuIGNvbnN0IG5vdGhyb3dfdCBub3Rocm93OwogIHR5
cGVkZWYgdm9pZCAoKm5ld19oYW5kbGVyKSgpOwogIG5ld19oYW5kbGVyIHNldF9uZXdfaGFuZGxl
cihuZXdfaGFuZGxlcik7Cn0KCgp2b2lkICpvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QpIHRocm93
IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQgKm9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90KSB0aHJv
dyAoc3RkOjpiYWRfYWxsb2MpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkICopIHRocm93KCk7
CnZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCAqKSB0aHJvdygpOwp2b2lkICpvcGVyYXRvciBu
ZXcoc3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCAqb3Bl
cmF0b3IgbmV3W10oc3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsK
dm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCAqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93
KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCAqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYp
IHRocm93KCk7CgoKaW5saW5lIHZvaWQgKm9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwgdm9pZCAq
cGxhY2UpIHRocm93KCkgeyByZXR1cm4gcGxhY2U7IH0KaW5saW5lIHZvaWQgKm9wZXJhdG9yIG5l
d1tdKHN0ZDo6c2l6ZV90LCB2b2lkICpwbGFjZSkgdGhyb3coKSB7IHJldHVybiBwbGFjZTsgfQp9
CiMgNDcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAz
CgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zZndkLmgiIDEgMwoj
IDQ5ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoj
IDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBl
cy5oIiAxIDMKIyA1MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFz
ZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9y
X2Jhc2VfZnVuY3MuaCIgMSAzCiMgNTEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z
dGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
bF9pdGVyYXRvci5oIiAxIDMKIyA1MiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvY29u
Y2VwdF9jaGVjay5oIiAxIDMKIyA1MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
bF9hbGdvYmFzZS5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zv
cndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMiwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZCBf
X2l0ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IsIF9UcCopCnsK
ICBfVHAgX190bXAgPSAqX19hOwogICpfX2EgPSAqX19iOwogICpfX2IgPSBfX3RtcDsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+CmlubGluZSB2
b2lkIGl0ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IpCnsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
CgogIF9faXRlcl9zd2FwKF9fYSwgX19iLCBfX3ZhbHVlX3R5cGUoX19hKSk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfVHA+CmlubGluZSB2b2lkIHN3YXAoX1RwJiBfX2EsIF9UcCYgX19iKQp7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog
IF9UcCBfX3RtcCA9IF9fYTsKICBfX2EgPSBfX2I7CiAgX19iID0gX190bXA7Cn0KCgoKCgoKCnRl
bXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBjb25zdCBfVHAmIG1pbihjb25zdCBfVHAmIF9fYSwg
Y29uc3QgX1RwJiBfX2IpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBpZiAoX19iIDwgX19hKSByZXR1cm4gX19iOyBy
ZXR1cm4gX19hOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgY29uc3QgX1RwJiBtYXgo
Y29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKSB7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgaWYgKF9fYSA8IF9f
YikgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0NvbXBhcmU+CmlubGluZSBjb25zdCBfVHAmIG1pbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1Rw
JiBfX2IsIF9Db21wYXJlIF9fY29tcCkgewoKICBpZiAoX19jb21wKF9fYiwgX19hKSkgcmV0dXJu
IF9fYjsgcmV0dXJuIF9fYTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+
CmlubGluZSBjb25zdCBfVHAmIG1heChjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIF9D
b21wYXJlIF9fY29tcCkgewoKICBpZiAoX19jb21wKF9fYSwgX19iKSkgcmV0dXJuIF9fYjsgcmV0
dXJuIF9fYTsKfQojIDEzNyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdv
YmFzZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwg
Y2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5KF9JbnB1dEl0ZXIgX19m
aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1
dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3Jf
dGFnLCBfRGlzdGFuY2UqKQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX3Jlc3Vs
dCwgKytfX2ZpcnN0KQogICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9PdXRwdXRJdGVy
LCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfT3V0cHV0SXRlcgpfX2NvcHkoX1JhbmRvbUFjY2Vz
c0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgX091dHB1dEl0
ZXIgX19yZXN1bHQsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLCBfRGlzdGFuY2UqKQp7CiAg
Zm9yIChfRGlzdGFuY2UgX19uID0gX19sYXN0IC0gX19maXJzdDsgX19uID4gMDsgLS1fX24pIHsK
ICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogICAgKytfX3Jlc3VsdDsK
ICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgX1Rw
KgpfX2NvcHlfdHJpdmlhbChjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBf
VHAqIF9fcmVzdWx0KQp7CiAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwgc2l6ZW9mKF9UcCkg
KiAoX19sYXN0IC0gX19maXJzdCkpOwogIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2Zp
cnN0KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4K
aW5saW5lIF9PdXRwdXRJdGVyIF9fY29weV9hdXgyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf
X3Jlc3VsdCwgX19mYWxzZV90eXBlKQp7CiAgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3Qs
IF9fcmVzdWx0LAogICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSwK
ICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIF9PdXRwdXRJdGVyIF9f
Y29weV9hdXgyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUp
CnsKICByZXR1cm4gX19jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCiAgICAgICAgICAg
ICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpLAogICAgICAgICAgICAgICAgX19kaXN0
YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIF9UcCog
X19jb3B5X2F1eDIoX1RwKiBfX2ZpcnN0LCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCnsKICByZXR1cm4gX19jb3B5X3RyaXZp
YWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+Cmlu
bGluZSBfVHAqIF9fY29weV9hdXgyKGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xh
c3QsIF9UcCogX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQp7
CiAgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwp9CgoK
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfVHA+
CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9f
cmVzdWx0LCBfVHAqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46Omhh
c190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IKICAgICAgICAgIF9Ucml2aWFsOwogIHJldHVy
biBfX2NvcHlfYXV4MihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfVHJpdmlhbCgpKTsKfQoK
dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CmlubGlu
ZSBfT3V0cHV0SXRlciBfX2NvcHlfbmkyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3Vs
dCwgX190cnVlX3R5cGUpCnsKICByZXR1cm4gX091dHB1dEl0ZXIoX19jb3B5X2F1eChfX2ZpcnN0
LCBfX2xhc3QsIF9fcmVzdWx0LmJhc2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3ZhbHVlX3R5cGUoX19maXJzdCkpKTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl
ciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfbmkyKF9J
bnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCnsKICByZXR1cm4g
X19jb3B5X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX3ZhbHVlX3R5cGUoX19maXJz
dCkpOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRl
cj4KaW5saW5lIF9PdXRwdXRJdGVyIF9fY29weV9uaTEoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w
dXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVy
IF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKewogIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9p
dGVyYXRvcjxfT3V0cHV0SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgcmV0dXJuIF9fY29weV9u
aTIoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsK
fQoKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+Cmlu
bGluZSBfT3V0cHV0SXRlciBfX2NvcHlfbmkxKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl
c3VsdCwgX19mYWxzZV90eXBlKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJh
dG9yPF9PdXRwdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICByZXR1cm4gX19jb3B5X25pMihf
X2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgY29weShf
SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICB0eXBlZGVmIHR5
cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0lucHV0SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7
CiAgIHJldHVybiBfX2NvcHlfbmkxKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fTm9ybWFs
KCkpOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0Jp
ZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9CaWRp
cmVjdGlvbmFsSXRlcjIgX19jb3B5X2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKikKewogIHdoaWxlIChf
X2ZpcnN0ICE9IF9fbGFzdCkKICAgICotLV9fcmVzdWx0ID0gKi0tX19sYXN0OwogIHJldHVybiBf
X3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQmlk
aXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX2NvcHlfYmFja3dhcmQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJh
bmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfRGlzdGFuY2UqKQp7CiAgZm9yIChfRGlzdGFuY2UgX19uID0gX19sYXN0IC0g
X19maXJzdDsgX19uID4gMDsgLS1fX24pCiAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICBy
ZXR1cm4gX19yZXN1bHQ7Cn0KCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0
ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0Jvb2xUeXBl
PgpzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoCnsKICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXIxPjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAg
ICAgICAgIF9DYXQ7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0
aW9uYWxJdGVyMT46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlOwoKICBzdGF0
aWMgX0JpZGlyZWN0aW9uYWxJdGVyMiBjb3B5KF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
MiBfX3Jlc3VsdCkgewogICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2xhc3Qs
IF9fcmVzdWx0LCBfQ2F0KCksIChfRGlzdGFuY2UqKSAwKTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwPgpzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1
ZV90eXBlPgp7CiAgc3RhdGljIF9UcCogY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9U
cCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgICBjb25zdCBwdHJkaWZmX3QgX051bSA9IF9f
bGFzdCAtIF9fZmlyc3Q7CiAgICBtZW1tb3ZlKF9fcmVzdWx0IC0gX051bSwgX19maXJzdCwgc2l6
ZW9mKF9UcCkgKiBfTnVtKTsKICAgIHJldHVybiBfX3Jlc3VsdCAtIF9OdW07CiAgfQp9OwoKdGVt
cGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxjb25zdCBf
VHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KewogIHN0YXRpYyBfVHAqIGNvcHkoY29uc3QgX1RwKiBf
X2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkgewogICAgcmV0dXJuIF9f
Y29weV9iYWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KICAgICAgOjpj
b3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBf
QkkxLCBjbGFzcyBfQkkyPgppbmxpbmUgX0JJMiBfX2NvcHlfYmFja3dhcmRfYXV4KF9CSTEgX19m
aXJzdCwgX0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpIHsKICB0eXBlZGVmIHR5cGVuYW1lIF9f
dHlwZV90cmFpdHM8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CSTI+Ojp2YWx1ZV90eXBlPgog
ICAgICAgICAgICAgICAgICAgICAgICA6Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IK
ICAgICAgICAgIF9Ucml2aWFsOwogIHJldHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X0JJ
MSwgX0JJMiwgX1RyaXZpYWw+CiAgICAgICAgICAgICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwg
X19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KaW5s
aW5lIF9CSTIgX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2Zp
cnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpIHsKICByZXR1cm4gX0JJMihf
X2NvcHlfYmFja3dhcmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQuYmFzZSgpKSk7Cn0K
CnRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgppbmxpbmUgX0JJMiBfX2Nv
cHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9CSTEgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
QkkyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpewogIHJldHVybiBfX2NvcHlfYmFja3dhcmRfYXV4
KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwg
dHlwZW5hbWUgX0JJMj4KaW5saW5lIF9CSTIgX19jb3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9p
dGVyYXRvcihfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKSB7
CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTI+OjpfTm9ybWFsIF9f
Tm9ybWFsOwogIHJldHVybiBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihf
X2ZpcnN0LmJhc2UoKSwgX19sYXN0LmJhc2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsIF9fTm9ybWFsKCkpOwp9Cgp0ZW1wbGF0ZSA8
dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KaW5saW5lIF9CSTIgX19jb3B5X2JhY2t3YXJk
X2lucHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQs
IF9fZmFsc2VfdHlwZSkgewogIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxf
QkkyPjo6X05vcm1hbCBfX05vcm1hbDsKICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX291dHB1dF9u
b3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19Ob3JtYWwoKSk7Cn0KCnRlbXBsYXRl
IDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgppbmxpbmUgX0JJMiBjb3B5X2JhY2t3YXJk
KF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpCnsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CgoKCiAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9y
PF9CSTE+OjpfTm9ybWFsIF9fTm9ybWFsOwogIHJldHVybiBfX2NvcHlfYmFja3dhcmRfaW5wdXRf
bm9ybWFsX2l0ZXJhdG9yKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19Ob3JtYWwoKSk7Cn0KCgoKCnRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1dEl0ZXI+CnBh
aXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+IF9fY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwg
X1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091
dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlucHV0X2l0ZXJhdG9yX3RhZykgewogIGZvciAoIDsgX19jb3VudCA+IDA7IC0tX19jb3VudCkg
ewogICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgICArK19fcmVzdWx0
OwogIH0KICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4oX19maXJzdCwgX19y
ZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JBSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9P
dXRwdXRJdGVyPgppbmxpbmUgcGFpcjxfUkFJdGVyLCBfT3V0cHV0SXRlcj4KX19jb3B5X24oX1JB
SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3Vs
dCwKICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpIHsKICBfUkFJdGVyIF9fbGFz
dCA9IF9fZmlyc3QgKyBfX2NvdW50OwogIHJldHVybiBwYWlyPF9SQUl0ZXIsIF9PdXRwdXRJdGVy
PihfX2xhc3QsIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUg
cGFpcjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4KX19jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0
LCBfU2l6ZSBfX2NvdW50LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgewogIHJldHVybiBfX2NvcHlf
bihfX2ZpcnN0LCBfX2NvdW50LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgX19pdGVyYXRv
cl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFz
cyBfU2l6ZSwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRw
dXRJdGVyPgpjb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LCBfT3V0cHV0
SXRlciBfX3Jlc3VsdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHJldHVybiBfX2NvcHlfbihfX2ZpcnN0
LCBfX2NvdW50LCBfX3Jlc3VsdCk7Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy
LCBjbGFzcyBfVHA+CnZvaWQgZmlsbChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVy
IF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbHVlKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBm
b3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAqX19maXJzdCA9IF9fdmFs
dWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9U
cD4KX091dHB1dEl0ZXIgZmlsbF9uKF9PdXRwdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29u
c3QgX1RwJiBfX3ZhbHVlKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBmb3IgKCA7IF9fbiA+IDA7IC0t
X19uLCArK19fZmlyc3QpCiAgICAqX19maXJzdCA9IF9fdmFsdWU7CiAgcmV0dXJuIF9fZmlyc3Q7
Cn0KCgoKaW5saW5lIHZvaWQgZmlsbCh1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0LCB1bnNpZ25lZCBj
aGFyKiBfX2xhc3QsCiAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciYgX19jKQp7
CiAgdW5zaWduZWQgY2hhciBfX3RtcCA9IF9fYzsKICBtZW1zZXQoX19maXJzdCwgX190bXAsIF9f
bGFzdCAtIF9fZmlyc3QpOwp9CgppbmxpbmUgdm9pZCBmaWxsKHNpZ25lZCBjaGFyKiBfX2ZpcnN0
LCBzaWduZWQgY2hhciogX19sYXN0LAogICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25lZCBjaGFy
JiBfX2MpCnsKICBzaWduZWQgY2hhciBfX3RtcCA9IF9fYzsKICBtZW1zZXQoX19maXJzdCwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX190bXApLCBfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKaW5s
aW5lIHZvaWQgZmlsbChjaGFyKiBfX2ZpcnN0LCBjaGFyKiBfX2xhc3QsIGNvbnN0IGNoYXImIF9f
YykKewogIGNoYXIgX190bXAgPSBfX2M7CiAgbWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJzdCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfU2l6ZT4KaW5saW5lIHVuc2lnbmVkIGNoYXIqIGZpbGxfbih1bnNpZ25lZCBjaGFyKiBfX2Zp
cnN0LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu
ZWQgY2hhciYgX19jKQp7CiAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19uLCBfX2MpOwogIHJl
dHVybiBfX2ZpcnN0ICsgX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1NpemU+CmlubGluZSBzaWdu
ZWQgY2hhciogZmlsbF9uKGNoYXIqIF9fZmlyc3QsIF9TaXplIF9fbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgc2lnbmVkIGNoYXImIF9fYykKewogIGZpbGwoX19maXJzdCwgX19m
aXJzdCArIF9fbiwgX19jKTsKICByZXR1cm4gX19maXJzdCArIF9fbjsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9TaXplPgppbmxpbmUgY2hhciogZmlsbF9uKGNoYXIqIF9fZmlyc3QsIF9TaXplIF9fbiwg
Y29uc3QgY2hhciYgX19jKQp7CiAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19uLCBfX2MpOwog
IHJldHVybiBfX2ZpcnN0ICsgX19uOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIx
LCBjbGFzcyBfSW5wdXRJdGVyMj4KcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+IG1pc21h
dGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyKQp7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiAqX19maXJzdDEgPT0g
Kl9fZmlyc3QyKSB7CiAgICArK19fZmlyc3QxOwogICAgKytfX2ZpcnN0MjsKICB9CiAgcmV0dXJu
IHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19maXJzdDIpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfQmlu
YXJ5UHJlZGljYXRlPgpwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4gbWlzbWF0Y2goX0lu
cHV0SXRlcjEgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCnsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19iaW5hcnlfcHJlZCgq
X19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAgICsrX19maXJzdDE7CiAgICArK19fZmlyc3QyOwog
IH0KICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3QxLCBfX2Zp
cnN0Mik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+
CmlubGluZSBib29sIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xh
c3QxLAogICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikKewoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKCgoKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJz
dDEsICsrX19maXJzdDIpCiAgICBpZiAoISgqX19maXJzdDEgPT0gKl9fZmlyc3QyKSkKICAgICAg
cmV0dXJuIGZhbHNlOwogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
cjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgppbmxpbmUgYm9v
bCBlcXVhbChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg
ICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5h
cnlfcHJlZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9f
bGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpCiAgICBpZiAoIV9fYmluYXJ5X3ByZWQoKl9f
Zmlyc3QxLCAqX19maXJzdDIpKQogICAgICByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRydWU7Cn0K
CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgpib29s
IGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVy
MSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmly
c3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgoKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0Mgog
ICAgICAgIDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikgewogICAgaWYgKCpfX2ZpcnN0MSA8ICpf
X2ZpcnN0MikKICAgICAgcmV0dXJuIHRydWU7CiAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3Qx
KQogICAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiBfX2ZpcnN0MSA9PSBfX2xhc3QxICYm
IF9fZmlyc3QyICE9IF9fbGFzdDI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xh
c3MgX0lucHV0SXRlcjIsIGNsYXNzIF9Db21wYXJlPgpib29sIGxleGljb2dyYXBoaWNhbF9jb21w
YXJlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xh
c3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwoKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJz
dDIgIT0gX19sYXN0MgogICAgICAgIDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikgewogICAgaWYg
KF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYg
KF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CiAg
cmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKfQoKaW5s
aW5lIGJvb2wKbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgdW5zaWduZWQgY2hhciogX19m
aXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFz
dDEsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3Qy
LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QyKQp7
CiAgY29uc3Qgc2l6ZV90IF9fbGVuMSA9IF9fbGFzdDEgLSBfX2ZpcnN0MTsKICBjb25zdCBzaXpl
X3QgX19sZW4yID0gX19sYXN0MiAtIF9fZmlyc3QyOwogIGNvbnN0IGludCBfX3Jlc3VsdCA9IG1l
bWNtcChfX2ZpcnN0MSwgX19maXJzdDIsIG1pbihfX2xlbjEsIF9fbGVuMikpOwogIHJldHVybiBf
X3Jlc3VsdCAhPSAwID8gX19yZXN1bHQgPCAwIDogX19sZW4xIDwgX19sZW4yOwp9CgppbmxpbmUg
Ym9vbCBsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCBjaGFyKiBfX2ZpcnN0MSwgY29uc3Qg
Y2hhciogX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciogX19maXJzdDIsIGNvbnN0IGNoYXIqIF9fbGFzdDIpCnsKCiAgcmV0dXJuIGxleGljb2dy
YXBoaWNhbF9jb21wYXJlKChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QxLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QxLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0
MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikg
X19sYXN0Mik7CgoKCgoKCn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lu
cHV0SXRlcjI+CmludCBfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoX0lucHV0SXRlcjEg
X19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpCnsKICB3
aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAgICBp
ZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICByZXR1cm4gLTE7CiAgICBpZiAoKl9fZmly
c3QyIDwgKl9fZmlyc3QxKQogICAgICByZXR1cm4gMTsKICAgICsrX19maXJzdDE7CiAgICArK19f
Zmlyc3QyOwogIH0KICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikgewogICAgcmV0dXJuICEoX19m
aXJzdDEgPT0gX19sYXN0MSk7CiAgfQogIGVsc2UgewogICAgcmV0dXJuIC0xOwogIH0KfQoKaW5s
aW5lIGludApfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoY29uc3QgdW5zaWduZWQgY2hh
ciogX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5z
aWduZWQgY2hhciogX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QyKQp7CiAgY29uc3QgcHRyZGlmZl90IF9fbGVuMSA9IF9f
bGFzdDEgLSBfX2ZpcnN0MTsKICBjb25zdCBwdHJkaWZmX3QgX19sZW4yID0gX19sYXN0MiAtIF9f
Zmlyc3QyOwogIGNvbnN0IGludCBfX3Jlc3VsdCA9IG1lbWNtcChfX2ZpcnN0MSwgX19maXJzdDIs
IG1pbihfX2xlbjEsIF9fbGVuMikpOwogIHJldHVybiBfX3Jlc3VsdCAhPSAwID8gX19yZXN1bHQK
ICAgICAgICAgICAgICAgICAgICAgICA6IChfX2xlbjEgPT0gX19sZW4yID8gMCA6IChfX2xlbjEg
PCBfX2xlbjIgPyAtMSA6IDEpKTsKfQoKaW5saW5lIGludApfX2xleGljb2dyYXBoaWNhbF9jb21w
YXJlXzN3YXkoY29uc3QgY2hhciogX19maXJzdDEsIGNvbnN0IGNoYXIqIF9fbGFzdDEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgY2hh
ciogX19sYXN0MikKewoKICByZXR1cm4gX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmly
c3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciop
IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBj
aGFyKikgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNp
Z25lZCBjaGFyKikgX19sYXN0Mik7CgoKCgoKCn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
MSwgY2xhc3MgX0lucHV0SXRlcjI+CmludCBsZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9J
bnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0
MikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgcmV0dXJuIF9fbGV4aWNvZ3Jh
cGhpY2FsX2NvbXBhcmVfM3dheShfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIp
Owp9Cgp9CiMgMjEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbWVtb3J5Lmgi
IDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMSAz
CiMgMjggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwojIDEg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ug
c3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBf
X3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQp
OwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3df
bG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vy
cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQo
Y29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNo
YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3Mp
OwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZv
aWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Ro
cm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3Vu
ZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2Zh
aWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDI5ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX2FsbG9jLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyAzMCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz
L3N0bF9hbGxvYy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X2NzdGRsaWIuaCIgMSAzCiMgMzEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf
YWxsb2MuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3Ry
aW5nLmgiIDEgMwojIDMyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9j
LmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2Fzc2VydC5o
IiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jYXNzZXJ0Lmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvYXNz
ZXJ0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMzYgIi91c3IvaW5j
bHVkZS9hc3NlcnQuaCIgMiAzCiMgNTggIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwpleHRlcm4g
IkMiIHsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9mYWlsIChjb25zdCBjaGFyICpfX2Fzc2VydGlv
biwgY29uc3QgY2hhciAqX19maWxlLCB1bnNpZ25lZCBpbnQgX19saW5lLCBjb25zdCBjaGFyICpf
X2Z1bmN0aW9uKQoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgpleHRl
cm4gdm9pZCBfX2Fzc2VydF9wZXJyb3JfZmFpbCAoaW50IF9fZXJybnVtLCBjb25zdCBjaGFyICpf
X2ZpbGUsIHVuc2lnbmVkIGludCBfX2xpbmUsIGNvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCgoKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKfQojIDM4ICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nhc3NlcnQuaCIgMiAzCiMgMzMgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMiAzCgoKCgoKIyAxICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMSAzCiMgMzMgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9pNTg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHIuaCIgMSAzCiMgMzQgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAyIDMKIyA1MSAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiMg
NjYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAzCnN0cnVj
dCBfUmVmY291bnRfQmFzZQp7CgoKCgogIHR5cGVkZWYgc2l6ZV90IF9SQ190OwoKCgogICB2b2xh
dGlsZSBfUkNfdCBfTV9yZWZfY291bnQ7CgoKCgogIF9fZ3RocmVhZF9tdXRleF90IF9NX3JlZl9j
b3VudF9sb2NrOwogIF9SZWZjb3VudF9CYXNlKF9SQ190IF9fbikgOiBfTV9yZWZfY291bnQoX19u
KQogICAgewoKICAgICAgX19ndGhyZWFkX211dGV4X3QgX190bXAgPSAwOwogICAgICBfTV9yZWZf
Y291bnRfbG9jayA9IF9fdG1wOwoKCgoKCiAgICB9CiMgMTEyICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogIHZvaWQgX01faW5jcigpIHsKICAgIF9fZ3Ro
cmVhZF9tdXRleF9sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICArK19NX3JlZl9jb3VudDsK
ICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICB9CiAgX1JD
X3QgX01fZGVjcigpIHsKICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9yZWZfY291bnRfbG9j
ayk7CiAgICB2b2xhdGlsZSBfUkNfdCBfX3RtcCA9IC0tX01fcmVmX2NvdW50OwogICAgX19ndGhy
ZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAgcmV0dXJuIF9fdG1wOwog
IH0KIyAxNjMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAz
Cn07CiMgMjg0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIg
Mwp0ZW1wbGF0ZSA8aW50IF9faW5zdD4Kc3RydWN0IF9TVExfbXV0ZXhfc3BpbiB7CiAgZW51bSB7
IF9fbG93X21heCA9IDMwLCBfX2hpZ2hfbWF4ID0gMTAwMCB9OwoKCiAgc3RhdGljIHVuc2lnbmVk
IF9fbWF4OwogIHN0YXRpYyB1bnNpZ25lZCBfX2xhc3Q7Cn07Cgp0ZW1wbGF0ZSA8aW50IF9faW5z
dD4KdW5zaWduZWQgX1NUTF9tdXRleF9zcGluPF9faW5zdD46Ol9fbWF4ID0gX1NUTF9tdXRleF9z
cGluPF9faW5zdD46Ol9fbG93X21heDsKCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp1bnNpZ25lZCBf
U1RMX211dGV4X3NwaW48X19pbnN0Pjo6X19sYXN0ID0gMDsKIyAzMTEgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAzCnN0cnVjdCBfU1RMX211dGV4X2xvY2sK
ewoKCgoKCgoKICBfX2d0aHJlYWRfbXV0ZXhfdCBfTV9sb2NrOwogIHZvaWQgX01faW5pdGlhbGl6
ZSgpIHsKIyAzNDIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5o
IiAzCiAgfQogIHZvaWQgX01fYWNxdWlyZV9sb2NrKCkgewoKCgogICAgX19ndGhyZWFkX211dGV4
X2xvY2soJl9NX2xvY2spOwogIH0KICB2b2lkIF9NX3JlbGVhc2VfbG9jaygpIHsKCgoKICAgIF9f
Z3RocmVhZF9tdXRleF91bmxvY2soJl9NX2xvY2spOwogIH0KIyA0NTMgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAzCn07CiMgNDkyICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMwpzdHJ1Y3QgX1NUTF9hdXRvX2xvY2sK
ewogIF9TVExfbXV0ZXhfbG9jayYgX01fbG9jazsKCiAgX1NUTF9hdXRvX2xvY2soX1NUTF9tdXRl
eF9sb2NrJiBfX2xvY2spIDogX01fbG9jayhfX2xvY2spCiAgICB7IF9NX2xvY2suX01fYWNxdWly
ZV9sb2NrKCk7IH0KICB+X1NUTF9hdXRvX2xvY2soKSB7IF9NX2xvY2suX01fcmVsZWFzZV9sb2Nr
KCk7IH0KCnByaXZhdGU6CiAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX1NUTF9hdXRvX2xvY2smKTsK
ICBfU1RMX2F1dG9fbG9jayhjb25zdCBfU1RMX2F1dG9fbG9jayYpOwp9OwoKfQojIDM5ICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDIgMwojIDY4ICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoK
CnRlbXBsYXRlIDxpbnQgX19pbnN0PgpjbGFzcyBfX21hbGxvY19hbGxvY190ZW1wbGF0ZSB7Cgpw
cml2YXRlOgoKICBzdGF0aWMgdm9pZCogX1Nfb29tX21hbGxvYyhzaXplX3QpOwogIHN0YXRpYyB2
b2lkKiBfU19vb21fcmVhbGxvYyh2b2lkKiwgc2l6ZV90KTsKICBzdGF0aWMgdm9pZCAoKiBfX21h
bGxvY19hbGxvY19vb21faGFuZGxlcikoKTsKCnB1YmxpYzoKCiAgc3RhdGljIHZvaWQqIGFsbG9j
YXRlKHNpemVfdCBfX24pCiAgewogICAgdm9pZCogX19yZXN1bHQgPSBtYWxsb2MoX19uKTsKICAg
IGlmICgwID09IF9fcmVzdWx0KSBfX3Jlc3VsdCA9IF9TX29vbV9tYWxsb2MoX19uKTsKICAgIHJl
dHVybiBfX3Jlc3VsdDsKICB9CgogIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCogX19wLCBz
aXplX3QgKQogIHsKICAgIGZyZWUoX19wKTsKICB9CgogIHN0YXRpYyB2b2lkKiByZWFsbG9jYXRl
KHZvaWQqIF9fcCwgc2l6ZV90ICwgc2l6ZV90IF9fbmV3X3N6KQogIHsKICAgIHZvaWQqIF9fcmVz
dWx0ID0gcmVhbGxvYyhfX3AsIF9fbmV3X3N6KTsKICAgIGlmICgwID09IF9fcmVzdWx0KSBfX3Jl
c3VsdCA9IF9TX29vbV9yZWFsbG9jKF9fcCwgX19uZXdfc3opOwogICAgcmV0dXJuIF9fcmVzdWx0
OwogIH0KCiAgc3RhdGljIHZvaWQgKCogX19zZXRfbWFsbG9jX2hhbmRsZXIodm9pZCAoKl9fZiko
KSkpKCkKICB7CiAgICB2b2lkICgqIF9fb2xkKSgpID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRs
ZXI7CiAgICBfX21hbGxvY19hbGxvY19vb21faGFuZGxlciA9IF9fZjsKICAgIHJldHVybihfX29s
ZCk7CiAgfQoKfTsKCgoKdGVtcGxhdGUgPGludCBfX2luc3Q+CnZvaWQgKCogX19tYWxsb2NfYWxs
b2NfdGVtcGxhdGU8X19pbnN0Pjo6X19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIpKCkgPSAwOwoK
dGVtcGxhdGUgPGludCBfX2luc3Q+CnZvaWQqCl9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5z
dD46Ol9TX29vbV9tYWxsb2Moc2l6ZV90IF9fbikKewogICAgdm9pZCAoKiBfX215X21hbGxvY19o
YW5kbGVyKSgpOwogICAgdm9pZCogX19yZXN1bHQ7CgogICAgZm9yICg7OykgewogICAgICAgIF9f
bXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICBp
ZiAoMCA9PSBfX215X21hbGxvY19oYW5kbGVyKSB7IHN0ZDo6X190aHJvd19iYWRfYWxsb2MoKTsg
fQogICAgICAgICgqX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgICBfX3Jlc3VsdCA9IG1h
bGxvYyhfX24pOwogICAgICAgIGlmIChfX3Jlc3VsdCkgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0K
fQoKdGVtcGxhdGUgPGludCBfX2luc3Q+CnZvaWQqIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9f
aW5zdD46Ol9TX29vbV9yZWFsbG9jKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKewogICAgdm9pZCAo
KiBfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgdm9pZCogX19yZXN1bHQ7CgogICAgZm9yICg7
OykgewogICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFu
ZGxlcjsKICAgICAgICBpZiAoMCA9PSBfX215X21hbGxvY19oYW5kbGVyKSB7IHN0ZDo6X190aHJv
d19iYWRfYWxsb2MoKTsgfQogICAgICAgICgqX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAg
ICBfX3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX24pOwogICAgICAgIGlmIChfX3Jlc3VsdCkgcmV0
dXJuKF9fcmVzdWx0KTsKICAgIH0KfQoKdHlwZWRlZiBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTww
PiBtYWxsb2NfYWxsb2M7Cgp0ZW1wbGF0ZTxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KY2xhc3Mg
c2ltcGxlX2FsbG9jIHsKCnB1YmxpYzoKICAgIHN0YXRpYyBfVHAqIGFsbG9jYXRlKHNpemVfdCBf
X24pCiAgICAgIHsgcmV0dXJuIDAgPT0gX19uID8gMCA6IChfVHAqKSBfQWxsb2M6OmFsbG9jYXRl
KF9fbiAqIHNpemVvZiAoX1RwKSk7IH0KICAgIHN0YXRpYyBfVHAqIGFsbG9jYXRlKHZvaWQpCiAg
ICAgIHsgcmV0dXJuIChfVHAqKSBfQWxsb2M6OmFsbG9jYXRlKHNpemVvZiAoX1RwKSk7IH0KICAg
IHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBfX24pCiAgICAgIHsgaWYg
KDAgIT0gX19uKSBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YgKF9UcCkpOyB9
CiAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKF9UcCogX19wKQogICAgICB7IF9BbGxvYzo6ZGVh
bGxvY2F0ZShfX3AsIHNpemVvZiAoX1RwKSk7IH0KfTsKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9B
bGxvYz4KY2xhc3MgZGVidWdfYWxsb2MgewoKcHJpdmF0ZToKCiAgZW51bSB7X1NfZXh0cmEgPSA4
fTsKCgoKcHVibGljOgoKICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICB7CiAg
ICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFyKilfQWxsb2M6OmFsbG9jYXRlKF9fbiArIChpbnQpIF9T
X2V4dHJhKTsKICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbjsKICAgIHJldHVybiBfX3Jlc3Vs
dCArIChpbnQpIF9TX2V4dHJhOwogIH0KCiAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBf
X3AsIHNpemVfdCBfX24pCiAgewogICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19wIC0gKGlu
dCkgX1NfZXh0cmE7CiAgICAoKHZvaWQpICgoKihzaXplX3QqKV9fcmVhbF9wID09IF9fbikgPyAw
IDogKF9fYXNzZXJ0X2ZhaWwgKCIqKHNpemVfdCopX19yZWFsX3AgPT0gX19uIiwgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIsIDE5MCwgKChjb25zdCBjaGFyICop
IDApKSwgMCkpKTsKICAgIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3JlYWxfcCwgX19uICsgKGludCkg
X1NfZXh0cmEpOwogIH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXpl
X3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeikKICB7CiAgICBjaGFyKiBfX3JlYWxfcCA9IChj
aGFyKilfX3AgLSAoaW50KSBfU19leHRyYTsKICAgICgodm9pZCkgKCgqKHNpemVfdCopX19yZWFs
X3AgPT0gX19vbGRfc3opID8gMCA6IChfX2Fzc2VydF9mYWlsICgiKihzaXplX3QqKV9fcmVhbF9w
ID09IF9fb2xkX3N6IiwgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2Mu
aCIsIDE5NywgKChjb25zdCBjaGFyICopIDApKSwgMCkpKTsKICAgIGNoYXIqIF9fcmVzdWx0ID0g
KGNoYXIqKQogICAgICBfQWxsb2M6OnJlYWxsb2NhdGUoX19yZWFsX3AsIF9fb2xkX3N6ICsgKGlu
dCkgX1NfZXh0cmEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfc3og
KyAoaW50KSBfU19leHRyYSk7CiAgICAqKHNpemVfdCopX19yZXN1bHQgPSBfX25ld19zejsKICAg
IHJldHVybiBfX3Jlc3VsdCArIChpbnQpIF9TX2V4dHJhOwogIH0KCn07CiMgMjQxICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDMKdGVtcGxhdGUgPGJvb2wgdGhy
ZWFkcywgaW50IGluc3Q+CmNsYXNzIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZSB7Cgpwcml2YXRl
OgoKCiAgZW51bSB7X0FMSUdOID0gOH07CiAgZW51bSB7X01BWF9CWVRFUyA9IDEyOH07CiAgZW51
bSB7X05GUkVFTElTVFMgPSAxNn07CiAgc3RhdGljIHNpemVfdAogIF9TX3JvdW5kX3VwKHNpemVf
dCBfX2J5dGVzKQogICAgeyByZXR1cm4gKCgoX19ieXRlcykgKyAoc2l6ZV90KSBfQUxJR04tMSkg
JiB+KChzaXplX3QpIF9BTElHTiAtIDEpKTsgfQoKICB1bmlvbiBfT2JqIHsKICAgICAgICB1bmlv
biBfT2JqKiBfTV9mcmVlX2xpc3RfbGluazsKICAgICAgICBjaGFyIF9NX2NsaWVudF9kYXRhWzFd
OwogIH07CgogIHN0YXRpYyBfT2JqKiB2b2xhdGlsZSBfU19mcmVlX2xpc3RbXTsKCiAgc3RhdGlj
IHNpemVfdCBfU19mcmVlbGlzdF9pbmRleChzaXplX3QgX19ieXRlcykgewogICAgICAgIHJldHVy
biAoKChfX2J5dGVzKSArIChzaXplX3QpX0FMSUdOLTEpLyhzaXplX3QpX0FMSUdOIC0gMSk7CiAg
fQoKCiAgc3RhdGljIHZvaWQqIF9TX3JlZmlsbChzaXplX3QgX19uKTsKCgogIHN0YXRpYyBjaGFy
KiBfU19jaHVua19hbGxvYyhzaXplX3QgX19zaXplLCBpbnQmIF9fbm9ianMpOwoKCiAgc3RhdGlj
IGNoYXIqIF9TX3N0YXJ0X2ZyZWU7CiAgc3RhdGljIGNoYXIqIF9TX2VuZF9mcmVlOwogIHN0YXRp
YyBzaXplX3QgX1NfaGVhcF9zaXplOwoKCiAgICBzdGF0aWMgX1NUTF9tdXRleF9sb2NrIF9TX25v
ZGVfYWxsb2NhdG9yX2xvY2s7CgoKCgoKICAgIGNsYXNzIF9Mb2NrOwogICAgZnJpZW5kIGNsYXNz
IF9Mb2NrOwogICAgY2xhc3MgX0xvY2sgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgX0xv
Y2soKSB7IHsgaWYgKHRocmVhZHMpIF9TX25vZGVfYWxsb2NhdG9yX2xvY2suX01fYWNxdWlyZV9s
b2NrKCk7IH07IH0KICAgICAgICAgICAgfl9Mb2NrKCkgeyB7IGlmICh0aHJlYWRzKSBfU19ub2Rl
X2FsbG9jYXRvcl9sb2NrLl9NX3JlbGVhc2VfbG9jaygpOyB9OyB9CiAgICB9OwoKcHVibGljOgoK
CiAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgewogICAgdm9pZCogX19yZXQg
PSAwOwoKICAgIGlmIChfX24gPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB7CiAgICAgIF9fcmV0ID0g
bWFsbG9jX2FsbG9jOjphbGxvY2F0ZShfX24pOwogICAgfQogICAgZWxzZSB7CiAgICAgIF9PYmoq
IHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdAogICAgICAgICAgPSBfU19mcmVlX2xpc3QgKyBfU19m
cmVlbGlzdF9pbmRleChfX24pOwoKCgoKCiAgICAgIF9Mb2NrIF9fbG9ja19pbnN0YW5jZTsKCiAg
ICAgIF9PYmoqIF9fcmVzdWx0ID0gKl9fbXlfZnJlZV9saXN0OwogICAgICBpZiAoX19yZXN1bHQg
PT0gMCkKICAgICAgICBfX3JldCA9IF9TX3JlZmlsbChfU19yb3VuZF91cChfX24pKTsKICAgICAg
ZWxzZSB7CiAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19yZXN1bHQgLT4gX01fZnJlZV9saXN0
X2xpbms7CiAgICAgICAgX19yZXQgPSBfX3Jlc3VsdDsKICAgICAgfQogICAgfQoKICAgIHJldHVy
biBfX3JldDsKICB9OwoKCiAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVf
dCBfX24pCiAgewogICAgaWYgKF9fbiA+IChzaXplX3QpIF9NQVhfQllURVMpCiAgICAgIG1hbGxv
Y19hbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbik7CiAgICBlbHNlIHsKICAgICAgX09iaiogdm9s
YXRpbGUqIF9fbXlfZnJlZV9saXN0CiAgICAgICAgICA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVs
aXN0X2luZGV4KF9fbik7CiAgICAgIF9PYmoqIF9fcSA9IChfT2JqKilfX3A7CgoKCgogICAgICBf
TG9jayBfX2xvY2tfaW5zdGFuY2U7CgogICAgICBfX3EgLT4gX01fZnJlZV9saXN0X2xpbmsgPSAq
X19teV9mcmVlX2xpc3Q7CiAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcTsKCiAgICB9CiAgfQoK
ICBzdGF0aWMgdm9pZCogcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6
ZV90IF9fbmV3X3N6KTsKCn0gOwoKdHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dHJ1
ZSwgMD4gYWxsb2M7CnR5cGVkZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPGZhbHNlLCAwPiBz
aW5nbGVfY2xpZW50X2FsbG9jOwoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0
PgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxf
X3RocmVhZHMsIF9faW5zdD4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fZGVmYXVs
dF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mKQp7CiAgcmV0dXJuIHRydWU7Cn0K
CnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JiwK
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190
aHJlYWRzLCBfX2luc3Q+JikKewogIHJldHVybiBmYWxzZTsKfQoKCgoKCgoKdGVtcGxhdGUgPGJv
b2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpjaGFyKgpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8
X190aHJlYWRzLCBfX2luc3Q+OjpfU19jaHVua19hbGxvYyhzaXplX3QgX19zaXplLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQm
IF9fbm9ianMpCnsKICAgIGNoYXIqIF9fcmVzdWx0OwogICAgc2l6ZV90IF9fdG90YWxfYnl0ZXMg
PSBfX3NpemUgKiBfX25vYmpzOwogICAgc2l6ZV90IF9fYnl0ZXNfbGVmdCA9IF9TX2VuZF9mcmVl
IC0gX1Nfc3RhcnRfZnJlZTsKCiAgICBpZiAoX19ieXRlc19sZWZ0ID49IF9fdG90YWxfYnl0ZXMp
IHsKICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgX1Nfc3RhcnRfZnJl
ZSArPSBfX3RvdGFsX2J5dGVzOwogICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICB9IGVsc2Ug
aWYgKF9fYnl0ZXNfbGVmdCA+PSBfX3NpemUpIHsKICAgICAgICBfX25vYmpzID0gKGludCkoX19i
eXRlc19sZWZ0L19fc2l6ZSk7CiAgICAgICAgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9i
anM7CiAgICAgICAgX19yZXN1bHQgPSBfU19zdGFydF9mcmVlOwogICAgICAgIF9TX3N0YXJ0X2Zy
ZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgfSBlbHNl
IHsKICAgICAgICBzaXplX3QgX19ieXRlc190b19nZXQgPQogICAgICAgICAgMiAqIF9fdG90YWxf
Ynl0ZXMgKyBfU19yb3VuZF91cChfU19oZWFwX3NpemUgPj4gNCk7CgogICAgICAgIGlmIChfX2J5
dGVzX2xlZnQgPiAwKSB7CiAgICAgICAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlz
dCA9CiAgICAgICAgICAgICAgICAgICAgICAgIF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2lu
ZGV4KF9fYnl0ZXNfbGVmdCk7CgogICAgICAgICAgICAoKF9PYmoqKV9TX3N0YXJ0X2ZyZWUpIC0+
IF9NX2ZyZWVfbGlzdF9saW5rID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICAqX19teV9m
cmVlX2xpc3QgPSAoX09iaiopX1Nfc3RhcnRfZnJlZTsKICAgICAgICB9CiAgICAgICAgX1Nfc3Rh
cnRfZnJlZSA9IChjaGFyKiltYWxsb2MoX19ieXRlc190b19nZXQpOwogICAgICAgIGlmICgwID09
IF9TX3N0YXJ0X2ZyZWUpIHsKICAgICAgICAgICAgc2l6ZV90IF9faTsKICAgICAgICAgICAgX09i
aiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICBfT2JqKiBfX3A7CgoKCiAg
ICAgICAgICAgIGZvciAoX19pID0gX19zaXplOwogICAgICAgICAgICAgICAgIF9faSA8PSAoc2l6
ZV90KSBfTUFYX0JZVEVTOwogICAgICAgICAgICAgICAgIF9faSArPSAoc2l6ZV90KSBfQUxJR04p
IHsKICAgICAgICAgICAgICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJl
ZWxpc3RfaW5kZXgoX19pKTsKICAgICAgICAgICAgICAgIF9fcCA9ICpfX215X2ZyZWVfbGlzdDsK
ICAgICAgICAgICAgICAgIGlmICgwICE9IF9fcCkgewogICAgICAgICAgICAgICAgICAgICpfX215
X2ZyZWVfbGlzdCA9IF9fcCAtPiBfTV9mcmVlX2xpc3RfbGluazsKICAgICAgICAgICAgICAgICAg
ICBfU19zdGFydF9mcmVlID0gKGNoYXIqKV9fcDsKICAgICAgICAgICAgICAgICAgICBfU19lbmRf
ZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2k7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuKF9T
X2NodW5rX2FsbG9jKF9fc2l6ZSwgX19ub2JqcykpOwoKCiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgIH0KICAgICAgICAgICAgX1NfZW5kX2ZyZWUgPSAwOwogICAgICAgICAgICBfU19zdGFy
dF9mcmVlID0gKGNoYXIqKW1hbGxvY19hbGxvYzo6YWxsb2NhdGUoX19ieXRlc190b19nZXQpOwoK
CgogICAgICAgIH0KICAgICAgICBfU19oZWFwX3NpemUgKz0gX19ieXRlc190b19nZXQ7CiAgICAg
ICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsgX19ieXRlc190b19nZXQ7CiAgICAgICAg
cmV0dXJuKF9TX2NodW5rX2FsbG9jKF9fc2l6ZSwgX19ub2JqcykpOwogICAgfQp9CgoKCgoKdGVt
cGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pgp2b2lkKgpfX2RlZmF1bHRfYWxsb2Nf
dGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19yZWZpbGwoc2l6ZV90IF9fbikKewogICAg
aW50IF9fbm9ianMgPSAyMDsKICAgIGNoYXIqIF9fY2h1bmsgPSBfU19jaHVua19hbGxvYyhfX24s
IF9fbm9ianMpOwogICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0OwogICAgX09iaiog
X19yZXN1bHQ7CiAgICBfT2JqKiBfX2N1cnJlbnRfb2JqOwogICAgX09iaiogX19uZXh0X29iajsK
ICAgIGludCBfX2k7CgogICAgaWYgKDEgPT0gX19ub2JqcykgcmV0dXJuKF9fY2h1bmspOwogICAg
X19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwoK
CiAgICAgIF9fcmVzdWx0ID0gKF9PYmoqKV9fY2h1bms7CiAgICAgICpfX215X2ZyZWVfbGlzdCA9
IF9fbmV4dF9vYmogPSAoX09iaiopKF9fY2h1bmsgKyBfX24pOwogICAgICBmb3IgKF9faSA9IDE7
IDsgX19pKyspIHsKICAgICAgICBfX2N1cnJlbnRfb2JqID0gX19uZXh0X29iajsKICAgICAgICBf
X25leHRfb2JqID0gKF9PYmoqKSgoY2hhciopX19uZXh0X29iaiArIF9fbik7CiAgICAgICAgaWYg
KF9fbm9ianMgLSAxID09IF9faSkgewogICAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+IF9NX2Zy
ZWVfbGlzdF9saW5rID0gMDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGluayA9IF9fbmV4dF9vYmo7
CiAgICAgICAgfQogICAgICB9CiAgICByZXR1cm4oX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Ym9v
bCB0aHJlYWRzLCBpbnQgaW5zdD4Kdm9pZCoKX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRocmVh
ZHMsIGluc3Q+OjpyZWFsbG9jYXRlKHZvaWQqIF9fcCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX29sZF9zeiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX25ld19zeikK
ewogICAgdm9pZCogX19yZXN1bHQ7CiAgICBzaXplX3QgX19jb3B5X3N6OwoKICAgIGlmIChfX29s
ZF9zeiA+IChzaXplX3QpIF9NQVhfQllURVMgJiYgX19uZXdfc3ogPiAoc2l6ZV90KSBfTUFYX0JZ
VEVTKSB7CiAgICAgICAgcmV0dXJuKHJlYWxsb2MoX19wLCBfX25ld19zeikpOwogICAgfQogICAg
aWYgKF9TX3JvdW5kX3VwKF9fb2xkX3N6KSA9PSBfU19yb3VuZF91cChfX25ld19zeikpIHJldHVy
bihfX3ApOwogICAgX19yZXN1bHQgPSBhbGxvY2F0ZShfX25ld19zeik7CiAgICBfX2NvcHlfc3og
PSBfX25ld19zeiA+IF9fb2xkX3N6PyBfX29sZF9zeiA6IF9fbmV3X3N6OwogICAgbWVtY3B5KF9f
cmVzdWx0LCBfX3AsIF9fY29weV9zeik7CiAgICBkZWFsbG9jYXRlKF9fcCwgX19vbGRfc3opOwog
ICAgcmV0dXJuKF9fcmVzdWx0KTsKfQoKCiAgICB0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGlu
dCBfX2luc3Q+CiAgICBfU1RMX211dGV4X2xvY2sKICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0
ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX25vZGVfYWxsb2NhdG9yX2xvY2sKICAgICAgICA9IHsg
MCB9OwoKCgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmNoYXIqIF9fZGVm
YXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX3N0YXJ0X2ZyZWUgPSAw
OwoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpjaGFyKiBfX2RlZmF1bHRf
YWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19lbmRfZnJlZSA9IDA7Cgp0ZW1w
bGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CnNpemVfdCBfX2RlZmF1bHRfYWxsb2Nf
dGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19oZWFwX3NpemUgPSAwOwoKdGVtcGxhdGUg
PGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pgp0eXBlbmFtZSBfX2RlZmF1bHRfYWxsb2NfdGVt
cGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfT2JqKiB2b2xhdGlsZQpfX2RlZmF1bHRfYWxsb2Nf
dGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+IDo6X1NfZnJlZV9saXN0WwogICAgX19kZWZhdWx0
X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X05GUkVFTElTVFMKXSA9IHswLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCB9OwojIDUyNiAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxjbGFz
cyBfVHA+CmNsYXNzIGFsbG9jYXRvciB7CiAgdHlwZWRlZiBhbGxvYyBfQWxsb2M7CnB1YmxpYzoK
ICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5j
ZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1RwKiBjb25z
dF9wb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBfVHAm
IGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8
Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIGFsbG9jYXRvcjxfVHAxPiBv
dGhlcjsKICB9OwoKICBhbGxvY2F0b3IoKSB0aHJvdygpIHt9CiAgYWxsb2NhdG9yKGNvbnN0IGFs
bG9jYXRvciYpIHRocm93KCkge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gYWxsb2NhdG9yKGNv
bnN0IGFsbG9jYXRvcjxfVHAxPiYpIHRocm93KCkge30KICB+YWxsb2NhdG9yKCkgdGhyb3coKSB7
fQoKICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsg
fQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJl
dHVybiAmX194OyB9CgoKCiAgX1RwKiBhbGxvY2F0ZShzaXplX3R5cGUgX19uLCBjb25zdCB2b2lk
KiA9IDApIHsKICAgIHJldHVybiBfX24gIT0gMCA/IHN0YXRpY19jYXN0PF9UcCo+KF9BbGxvYzo6
YWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQogICAgICAgICAgICAgICAgICAgIDogMDsKICB9
CgoKICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24pCiAgICB7IF9B
bGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZihfVHApKTsgfQoKICBzaXplX3R5cGUg
bWF4X3NpemUoKSBjb25zdCB0aHJvdygpCiAgICB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9m
KF9UcCk7IH0KCiAgdm9pZCBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwp
IHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQogIHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkgeyBf
X3AtPn5fVHAoKTsgfQp9OwoKdGVtcGxhdGU8PgpjbGFzcyBhbGxvY2F0b3I8dm9pZD4gewpwdWJs
aWM6CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZl
cmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2b2lk
KiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8
Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIGFsbG9jYXRvcjxfVHAxPiBv
dGhlcjsKICB9Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+
JikKewogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+Cmlu
bGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgYWxsb2NhdG9yPF9UMT4mLCBjb25zdCBhbGxvY2F0
b3I8X1QyPiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KIyA2MDIgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxs
b2M+CnN0cnVjdCBfX2FsbG9jYXRvciB7CiAgX0FsbG9jIF9fdW5kZXJseWluZ19hbGxvYzsKCiAg
dHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2Vf
dHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCogY29uc3Rf
cG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgX1RwJiBj
b25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNs
YXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgewogICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAxLCBf
QWxsb2M+IG90aGVyOwogIH07CgogIF9fYWxsb2NhdG9yKCkgdGhyb3coKSB7fQogIF9fYWxsb2Nh
dG9yKGNvbnN0IF9fYWxsb2NhdG9yJiBfX2EpIHRocm93KCkKICAgIDogX191bmRlcmx5aW5nX2Fs
bG9jKF9fYS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+CiAg
X19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiYgX19hKSB0aHJvdygp
CiAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5aW5nX2FsbG9jKSB7fQogIH5f
X2FsbG9jYXRvcigpIHRocm93KCkge30KCiAgcG9pbnRlciBhZGRyZXNzKHJlZmVyZW5jZSBfX3gp
IGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KICBjb25zdF9wb2ludGVyIGFkZHJlc3MoY29uc3RfcmVm
ZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQoKCiAgX1RwKiBhbGxvY2F0ZShzaXpl
X3R5cGUgX19uLCBjb25zdCB2b2lkKiA9IDApIHsKICAgIHJldHVybiBfX24gIT0gMAogICAgICAg
ID8gc3RhdGljX2Nhc3Q8X1RwKj4oX191bmRlcmx5aW5nX2FsbG9jLmFsbG9jYXRlKF9fbiAqIHNp
emVvZihfVHApKSkKICAgICAgICA6IDA7CiAgfQoKCiAgdm9pZCBkZWFsbG9jYXRlKHBvaW50ZXIg
X19wLCBzaXplX3R5cGUgX19uKQogICAgeyBfX3VuZGVybHlpbmdfYWxsb2MuZGVhbGxvY2F0ZShf
X3AsIF9fbiAqIHNpemVvZihfVHApKTsgfQoKICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB0
aHJvdygpCiAgICB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KCiAgdm9pZCBj
b25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9f
dmFsKTsgfQogIHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQp9OwoK
dGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KY2xhc3MgX19hbGxvY2F0b3I8dm9pZCwgX0FsbG9jPiB7
CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVu
Y2VfdHlwZTsKICB0eXBlZGVmIHZvaWQqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2b2lkKiBj
b25zdF9wb2ludGVyOwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xh
c3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9B
bGxvYz4gb3RoZXI7CiAgfTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9f
YTEsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+
JiBfX2EyKQp7CiAgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5nX2FsbG9jID09IF9fYTIuX191bmRl
cmx5aW5nX2FsbG9jOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGlu
ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2ExLAog
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19h
MikKewogIHJldHVybiBfX2ExLl9fdW5kZXJseWluZ19hbGxvYyAhPSBfX2EyLl9fdW5kZXJseWlu
Z19hbGxvYzsKfQoKCgoKCnRlbXBsYXRlIDxpbnQgaW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxpbnN0PiYsCiAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8aW5zdD4mKQp7CiAgcmV0dXJuIHRy
dWU7Cn0KCnRlbXBsYXRlIDxpbnQgX19pbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4mLAogICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4mKQp7CiAgcmV0dXJuIGZhbHNl
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IGRlYnVnX2FsbG9jPF9BbGxvYz4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlYnVn
X2FsbG9jPF9BbGxvYz4mKSB7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQWxs
b2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsKICByZXR1
cm4gZmFsc2U7Cn0KIyA3MzIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxs
b2MuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpzdHJ1Y3QgX0Fs
bG9jX3RyYWl0cwp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gZmFsc2U7
CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8X1RwPjo6b3Ro
ZXIgYWxsb2NhdG9yX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2Nh
dG9yPgpjb25zdCBib29sIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6X1NfaW5zdGFu
Y2VsZXNzOwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxPgpzdHJ1Y3QgX0FsbG9j
X3RyYWl0czxfVHAsIGFsbG9jYXRvcjxfVHAxPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19p
bnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgYWxsb2M+IF9B
bGxvY190eXBlOwogIHR5cGVkZWYgYWxsb2NhdG9yPF9UcD4gYWxsb2NhdG9yX3R5cGU7Cn07CgoK
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9U
cCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+CnsKICBzdGF0aWMgY29uc3QgYm9v
bCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19t
YWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19h
bGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9y
X3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgYm9vbCBfX3RocmVhZHMsIGludCBfX2lu
c3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9f
dGhyZWFkcywgX19pbnN0PiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3Mg
PSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBs
YXRlPF9fdGhyZWFkcywgX19pbnN0PiA+CiAgICAgICAgICBfQWxsb2NfdHlwZTsKICB0eXBlZGVm
IF9fYWxsb2NhdG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19p
bnN0PiA+CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgZGVidWdfYWxsb2M8X0Fs
bG9jPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5
cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBl
OwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2Nh
dG9yX3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBpbnQgX19p
bnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsCiAgICAgICAgICAgICAgICAgICAgIF9fYWxs
b2NhdG9yPF9UcDEsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiA+CnsKICBzdGF0
aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2Fs
bG9jPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOwog
IHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+
ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwg
Ym9vbCBfX3RociwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLAogICAgICAg
ICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RociwgX19pbnN0PiA+ID4Kewog
IHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1w
bGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAg
ICAgICAgICBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWZhdWx0
X2FsbG9jX3RlbXBsYXRlPF9fdGhyLF9faW5zdD4gPgogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7
Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgY2xhc3MgX0FsbG9jPgpzdHJ1
Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fYWxsb2NhdG9yPF9UcDEsIGRlYnVnX2FsbG9jPF9BbGxv
Yz4gPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5
cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBl
OwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2Nh
dG9yX3R5cGU7Cn07Cgp9CiMgMjIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
bWVtb3J5LmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfY29u
c3RydWN0LmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Nv
bnN0cnVjdC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9uZXciIDEgMwojIDM1
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAyIDMKCm5h
bWVzcGFjZSBzdGQKewojIDQ3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Nv
bnN0cnVjdC5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIHZvaWQg
X0NvbnN0cnVjdChfVDEqIF9fcCwgY29uc3QgX1QyJiBfX3ZhbHVlKSB7Cm5ldyAoKHZvaWQqKSBf
X3ApIF9UMShfX3ZhbHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMT4KaW5saW5lIHZvaWQgX0Nv
bnN0cnVjdChfVDEqIF9fcCkgewogIG5ldyAoKHZvaWQqKSBfX3ApIF9UMSgpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgppbmxpbmUgdm9pZCBfRGVzdHJveShfVHAqIF9fcG9pbnRlcikgewogIF9f
cG9pbnRlci0+fl9UcCgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4Kdm9p
ZApfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRv
ciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr
X19maXJzdCkKICAgIGRlc3Ryb3koJipfX2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
YXJkSXRlcmF0b3I+CmlubGluZSB2b2lkIF9fZGVzdHJveV9hdXgoX0ZvcndhcmRJdGVyYXRvciwg
X0ZvcndhcmRJdGVyYXRvciwgX190cnVlX3R5cGUpIHt9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh
cmRJdGVyYXRvciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZApfX2Rlc3Ryb3koX0ZvcndhcmRJdGVy
YXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgX1RwKikKewogIHR5cGVkZWYg
dHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+OjpoYXNfdHJpdmlhbF9kZXN0cnVjdG9yCiAgICAg
ICAgICBfVHJpdmlhbF9kZXN0cnVjdG9yOwogIF9fZGVzdHJveV9hdXgoX19maXJzdCwgX19sYXN0
LCBfVHJpdmlhbF9kZXN0cnVjdG9yKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy
YXRvcj4KaW5saW5lIHZvaWQgX0Rlc3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9y
d2FyZEl0ZXJhdG9yIF9fbGFzdCkgewogIF9fZGVzdHJveShfX2ZpcnN0LCBfX2xhc3QsIF9fdmFs
dWVfdHlwZShfX2ZpcnN0KSk7Cn0KCmlubGluZSB2b2lkIF9EZXN0cm95KGNoYXIqLCBjaGFyKikg
e30KaW5saW5lIHZvaWQgX0Rlc3Ryb3koaW50KiwgaW50Kikge30KaW5saW5lIHZvaWQgX0Rlc3Ry
b3kobG9uZyosIGxvbmcqKSB7fQppbmxpbmUgdm9pZCBfRGVzdHJveShmbG9hdCosIGZsb2F0Kikg
e30KaW5saW5lIHZvaWQgX0Rlc3Ryb3koZG91YmxlKiwgZG91YmxlKikge30KaW5saW5lIHZvaWQg
X0Rlc3Ryb3kod2NoYXJfdCosIHdjaGFyX3QqKSB7fQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwg
Y2xhc3MgX1QyPgppbmxpbmUgdm9pZCBjb25zdHJ1Y3QoX1QxKiBfX3AsIGNvbnN0IF9UMiYgX192
YWx1ZSkgewogIF9Db25zdHJ1Y3QoX19wLCBfX3ZhbHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9U
MT4KaW5saW5lIHZvaWQgY29uc3RydWN0KF9UMSogX19wKSB7CiAgX0NvbnN0cnVjdChfX3ApOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgdm9pZCBkZXN0cm95KF9UcCogX19wb2ludGVy
KSB7CiAgX0Rlc3Ryb3koX19wb2ludGVyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
cmF0b3I+CmlubGluZSB2b2lkIGRlc3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9y
d2FyZEl0ZXJhdG9yIF9fbGFzdCkgewogIF9EZXN0cm95KF9fZmlyc3QsIF9fbGFzdCk7Cn0KCn0K
IyAyMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9tZW1vcnkuaCIgMiAzCiMg
MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVz
LmgiIDEgMwojIDI0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9yeS5o
IiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RlbXBidWYuaCIg
MSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGVtcGJ1Zi5oIiAz
Cm5hbWVzcGFjZSBzdGQKewoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KcGFpcjxfVHAqLCBwdHJkaWZm
X3Q+Cl9fZ2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuLCBfVHAqKQp7CiAgaWYg
KF9fbGVuID4gcHRyZGlmZl90KDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKSkpCiAgICBfX2xlbiA9
IDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKTsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgX1Rw
KiBfX3RtcCA9IChfVHAqKSBtYWxsb2MoKHNpemVfdClfX2xlbiAqIHNpemVvZihfVHApKTsKICAg
IGlmIChfX3RtcCAhPSAwKQogICAgICByZXR1cm4gcGFpcjxfVHAqLCBwdHJkaWZmX3Q+KF9fdG1w
LCBfX2xlbik7CiAgICBfX2xlbiAvPSAyOwogIH0KCiAgcmV0dXJuIHBhaXI8X1RwKiwgcHRyZGlm
Zl90PigoX1RwKikwLCAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIHBhaXI8X1Rw
KiwgcHRyZGlmZl90PiBnZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4pIHsKICBy
ZXR1cm4gX19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihfX2xlbiwgKF9UcCopIDApOwp9CgoKCgoKCnRl
bXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBwYWlyPF9UcCosIHB0cmRpZmZfdD4gZ2V0X3RlbXBv
cmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuLCBfVHAqKSB7CiAgcmV0dXJuIF9fZ2V0X3RlbXBv
cmFyeV9idWZmZXIoX19sZW4sIChfVHAqKSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kdm9p
ZCByZXR1cm5fdGVtcG9yYXJ5X2J1ZmZlcihfVHAqIF9fcCkgewogIGZyZWUoX19wKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4KY2xhc3MgX1RlbXBvcmFy
eV9idWZmZXIgewpwcml2YXRlOgogIHB0cmRpZmZfdCBfTV9vcmlnaW5hbF9sZW47CiAgcHRyZGlm
Zl90IF9NX2xlbjsKICBfVHAqIF9NX2J1ZmZlcjsKCiAgdm9pZCBfTV9hbGxvY2F0ZV9idWZmZXIo
KSB7CiAgICBfTV9vcmlnaW5hbF9sZW4gPSBfTV9sZW47CiAgICBfTV9idWZmZXIgPSAwOwoKICAg
IGlmIChfTV9sZW4gPiAocHRyZGlmZl90KSgyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCkpKQogICAg
ICBfTV9sZW4gPSAyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCk7CgogICAgd2hpbGUgKF9NX2xlbiA+
IDApIHsKICAgICAgX01fYnVmZmVyID0gKF9UcCopIG1hbGxvYyhfTV9sZW4gKiBzaXplb2YoX1Rw
KSk7CiAgICAgIGlmIChfTV9idWZmZXIpCiAgICAgICAgYnJlYWs7CiAgICAgIF9NX2xlbiAvPSAy
OwogICAgfQogIH0KCiAgdm9pZCBfTV9pbml0aWFsaXplX2J1ZmZlcihjb25zdCBfVHAmLCBfX3Ry
dWVfdHlwZSkge30KICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYgdmFsLCBf
X2ZhbHNlX3R5cGUpIHsKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2J1ZmZlciwgX01fbGVu
LCB2YWwpOwogIH0KCnB1YmxpYzoKICBwdHJkaWZmX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9N
X2xlbjsgfQogIHB0cmRpZmZfdCByZXF1ZXN0ZWRfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX29y
aWdpbmFsX2xlbjsgfQogIF9UcCogYmVnaW4oKSB7IHJldHVybiBfTV9idWZmZXI7IH0KICBfVHAq
IGVuZCgpIHsgcmV0dXJuIF9NX2J1ZmZlciArIF9NX2xlbjsgfQoKICBfVGVtcG9yYXJ5X2J1ZmZl
cihfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7Cgog
ICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46Omhhc190cml2aWFsX2RlZmF1
bHRfY29uc3RydWN0b3IKICAgICAgICAgICAgX1RyaXZpYWw7CgogICAgdHJ5IHsKICAgICAgX01f
bGVuID0gMDsKICAgICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfTV9sZW4pOwogICAgICBf
TV9hbGxvY2F0ZV9idWZmZXIoKTsKICAgICAgaWYgKF9NX2xlbiA+IDApCiAgICAgICAgX01faW5p
dGlhbGl6ZV9idWZmZXIoKl9fZmlyc3QsIF9Ucml2aWFsKCkpOwogICAgfQogICAgY2F0Y2goLi4u
KSB7IGZyZWUoX01fYnVmZmVyKTsgX01fYnVmZmVyID0gMDsgX01fbGVuID0gMDsgdGhyb3c7IH07
CiAgfQoKICB+X1RlbXBvcmFyeV9idWZmZXIoKSB7CiAgICBkZXN0cm95KF9NX2J1ZmZlciwgX01f
YnVmZmVyICsgX01fbGVuKTsKICAgIGZyZWUoX01fYnVmZmVyKTsKICB9Cgpwcml2YXRlOgoKICBf
VGVtcG9yYXJ5X2J1ZmZlcihjb25zdCBfVGVtcG9yYXJ5X2J1ZmZlciYpIHt9CiAgdm9pZCBvcGVy
YXRvcj0oY29uc3QgX1RlbXBvcmFyeV9idWZmZXImKSB7fQp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0ZvcndhcmRJdGVyYXRvciwKICAgICAgICAgIGNsYXNzIF9UcAogICAgICAgICAgICAgICAgICAg
ID0gdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBl
CiAgICAgICAgID4Kc3RydWN0IHRlbXBvcmFyeV9idWZmZXIgOiBwdWJsaWMgX1RlbXBvcmFyeV9i
dWZmZXI8X0ZvcndhcmRJdGVyYXRvciwgX1RwPgp7CiAgdGVtcG9yYXJ5X2J1ZmZlcihfRm9yd2Fy
ZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KQogICAgOiBfVGVtcG9y
YXJ5X2J1ZmZlcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+KF9fZmlyc3QsIF9fbGFzdCkge30KICB+
dGVtcG9yYXJ5X2J1ZmZlcigpIHt9Cn07Cgp9CiMgMjUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvYml0cy9zdGRfbWVtb3J5LmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKCgoK
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBf
Rm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwg
X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIg
X19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKewogIHJldHVy
biBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPgpfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVk
X2NvcHlfYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2ZhbHNlX3R5cGUpCnsKICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX3Jlc3VsdDsK
ICB0cnkgewogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fY3Vy
KQogICAgICBfQ29uc3RydWN0KCYqX19jdXIsICpfX2ZpcnN0KTsKICAgIHJldHVybiBfX2N1cjsK
ICB9CiAgY2F0Y2goLi4uKSB7IF9EZXN0cm95KF9fcmVzdWx0LCBfX2N1cik7IHRocm93OyB9Owp9
CgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3Mg
X1RwPgppbmxpbmUgX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXIg
X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJk
SXRlciBfX3Jlc3VsdCwgX1RwKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxf
VHA+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weV9h
dXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0lzX1BPRCgpKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlcgog
IHVuaW5pdGlhbGl6ZWRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCnsKICByZXR1cm4g
X191bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fcmVzdWx0KSk7Cn0KCmlubGluZSBj
aGFyKiB1bmluaXRpYWxpemVkX2NvcHkoY29uc3QgY2hhciogX19maXJzdCwgY29uc3QgY2hhciog
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIF9fcmVzdWx0KSB7
CiAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwgX19sYXN0IC0gX19maXJzdCk7CiAgcmV0dXJu
IF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwp9CgppbmxpbmUgd2NoYXJfdCoKdW5pbml0
aWFsaXplZF9jb3B5KGNvbnN0IHdjaGFyX3QqIF9fZmlyc3QsIGNvbnN0IHdjaGFyX3QqIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgIHdjaGFyX3QqIF9fcmVzdWx0KQp7CiAgbWVtbW92ZShfX3Jl
c3VsdCwgX19maXJzdCwgc2l6ZW9mKHdjaGFyX3QpICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICBy
ZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CnBhaXI8X0lucHV0
SXRlciwgX0ZvcndhcmRJdGVyPgpfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0ZXIgX19m
aXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIg
X19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAg
X0ZvcndhcmRJdGVyIF9fY3VyID0gX19yZXN1bHQ7CiAgdHJ5IHsKICAgIGZvciAoIDsgX19jb3Vu
dCA+IDAgOyAtLV9fY291bnQsICsrX19maXJzdCwgKytfX2N1cikKICAgICAgX0NvbnN0cnVjdCgm
Kl9fY3VyLCAqX19maXJzdCk7CiAgICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0
ZXI+KF9fZmlyc3QsIF9fY3VyKTsKICB9CiAgY2F0Y2goLi4uKSB7IF9EZXN0cm95KF9fcmVzdWx0
LCBfX2N1cik7IHRocm93OyB9Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIs
IGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBwYWlyPF9SYW5kb21BY2Nl
c3NJdGVyLCBfRm9yd2FyZEl0ZXI+Cl9fdW5pbml0aWFsaXplZF9jb3B5X24oX1JhbmRvbUFjY2Vz
c0l0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAgICAgICAgICBfRm9y
d2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19p
dGVyYXRvcl90YWcpIHsKICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QgPSBfX2ZpcnN0ICsgX19j
b3VudDsKICByZXR1cm4gcGFpcjxfUmFuZG9tQWNjZXNzSXRlciwgX0ZvcndhcmRJdGVyPigKICAg
ICAgICAgICAgICAgICBfX2xhc3QsCiAgICAgICAgICAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5
KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBwYWlyPF9JbnB1dEl0
ZXIsIF9Gb3J3YXJkSXRlcj4KX191bmluaXRpYWxpemVkX2NvcHlfbihfSW5wdXRJdGVyIF9fZmly
c3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jl
c3VsdCkgewogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9fZmlyc3QsIF9fY291bnQs
IF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0
ZWdvcnkoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1Np
emUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX0ZvcndhcmRJ
dGVyPgp1bmluaXRpYWxpemVkX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291
bnQsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkgewogIHJldHVy
biBfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkp
Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZv
aWQKX191bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy
ZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9f
dHJ1ZV90eXBlKQp7CiAgZmlsbChfX2ZpcnN0LCBfX2xhc3QsIF9feCk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4Kdm9pZApfX3VuaW5pdGlhbGl6ZWRfZmlsbF9h
dXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX19mYWxzZV90eXBlKQp7CiAgX0ZvcndhcmRJ
dGVyIF9fY3VyID0gX19maXJzdDsKICB0cnkgewogICAgZm9yICggOyBfX2N1ciAhPSBfX2xhc3Q7
ICsrX19jdXIpCiAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgX194KTsKICB9CiAgY2F0Y2goLi4u
KSB7IF9EZXN0cm95KF9fZmlyc3QsIF9fY3VyKTsgdGhyb3c7IH07Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1RwMT4KaW5saW5lIHZvaWQgX191bmlu
aXRpYWxpemVkX2ZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX194LCBfVHAxKikK
ewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHAxPjo6aXNfUE9EX3R5cGUgX0lz
X1BPRDsKICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3gsIF9J
c19QT0QoKSk7Cgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+Cmlu
bGluZSB2b2lkIHVuaW5pdGlhbGl6ZWRfZmlsbChfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCkKewogIF9fdW5pbml0aWFsaXplZF9m
aWxsKF9fZmlyc3QsIF9fbGFzdCwgX194LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9CgoKCnRl
bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+CmlubGlu
ZSBfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsIF9TaXplIF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBf
X3gsIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIGZpbGxfbihfX2ZpcnN0LCBfX24sIF9feCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+Cl9G
b3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJz
dCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwg
X19mYWxzZV90eXBlKQp7CiAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19maXJzdDsKICB0cnkgewog
ICAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2N1cikKICAgICAgX0NvbnN0cnVjdCgmKl9f
Y3VyLCBfX3gpOwogICAgcmV0dXJuIF9fY3VyOwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3ko
X19maXJzdCwgX19jdXIpOyB0aHJvdzsgfTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
ciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcCwgY2xhc3MgX1RwMT4KaW5saW5lIF9Gb3J3YXJkSXRl
cgpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24s
IGNvbnN0IF9UcCYgX194LCBfVHAxKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0
czxfVHAxPjo6aXNfUE9EX3R5cGUgX0lzX1BPRDsKICByZXR1cm4gX191bmluaXRpYWxpemVkX2Zp
bGxfbl9hdXgoX19maXJzdCwgX19uLCBfX3gsIF9Jc19QT0QoKSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2FyZEl0
ZXIKdW5pbml0aWFsaXplZF9maWxsX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwg
Y29uc3QgX1RwJiBfX3gpCnsKICByZXR1cm4gX191bmluaXRpYWxpemVkX2ZpbGxfbihfX2ZpcnN0
LCBfX24sIF9feCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQojIDIzMSAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxp
bmUgX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9jb3B5X2NvcHkoX0lucHV0SXRlcjEgX19m
aXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu
cHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KQp7CiAgX0ZvcndhcmRJdGVyIF9fbWlkID0g
dW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgdHJ5IHsK
ICAgIHJldHVybiB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDIsIF9fbGFzdDIsIF9fbWlkKTsK
ICB9CiAgY2F0Y2goLi4uKSB7IF9EZXN0cm95KF9fcmVzdWx0LCBfX21pZCk7IHRocm93OyB9Owp9
CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9JbnB1
dEl0ZXI+CmlubGluZSBfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2ZpbGxfY29weShfRm9y
d2FyZEl0ZXIgX19yZXN1bHQsIF9Gb3J3YXJkSXRlciBfX21pZCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBfVHAmIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0KQp7CiAgdW5pbml0aWFsaXplZF9maWxsKF9f
cmVzdWx0LCBfX21pZCwgX194KTsKICB0cnkgewogICAgcmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29w
eShfX2ZpcnN0LCBfX2xhc3QsIF9fbWlkKTsKICB9CiAgY2F0Y2goLi4uKSB7IF9EZXN0cm95KF9f
cmVzdWx0LCBfX21pZCk7IHRocm93OyB9Owp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
ciwgY2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSB2b2lkCl9fdW5pbml0aWFs
aXplZF9jb3B5X2ZpbGwoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJ
dGVyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gpCnsK
ICBfRm9yd2FyZEl0ZXIgX19taWQyID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xh
c3QxLCBfX2ZpcnN0Mik7CiAgdHJ5IHsKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfX21pZDIsIF9f
bGFzdDIsIF9feCk7CiAgfQogIGNhdGNoKC4uLikgeyBfRGVzdHJveShfX2ZpcnN0MiwgX19taWQy
KTsgdGhyb3c7IH07Cn0KCn0KIyAyNiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9tZW1vcnkuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9y
YXdfc3RvcmFnZV9pdGVyLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RsX3Jhd19zdG9yYWdlX2l0ZXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCnRlbXBsYXRlIDxj
bGFzcyBfRm9yd2FyZEl0ZXJhdG9yLCBjbGFzcyBfVHA+CmNsYXNzIHJhd19zdG9yYWdlX2l0ZXJh
dG9yIHsKcHJvdGVjdGVkOgogIF9Gb3J3YXJkSXRlcmF0b3IgX01faXRlcjsKcHVibGljOgogIHR5
cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZv
aWQgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYg
dm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7CgogIGV4cGxpY2l0IHJhd19z
dG9yYWdlX2l0ZXJhdG9yKF9Gb3J3YXJkSXRlcmF0b3IgX194KSA6IF9NX2l0ZXIoX194KSB7fQog
IHJhd19zdG9yYWdlX2l0ZXJhdG9yJiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIHJh
d19zdG9yYWdlX2l0ZXJhdG9yJiBvcGVyYXRvcj0oY29uc3QgX1RwJiBfX2VsZW1lbnQpIHsKICAg
IGNvbnN0cnVjdCgmKl9NX2l0ZXIsIF9fZWxlbWVudCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQog
IHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4mIG9wZXJhdG9yKyso
KSB7CiAgICArK19NX2l0ZXI7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIHJhd19zdG9yYWdlX2l0
ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4gb3BlcmF0b3IrKyhpbnQpIHsKICAgIHJhd19z
dG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4gX190bXAgPSAqdGhpczsKICAg
ICsrX01faXRlcjsKICAgIHJldHVybiBfX3RtcDsKICB9Cn07CgoKfQojIDI3ICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9yeS5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoK
IHRlbXBsYXRlPGNsYXNzIF9UcDE+IHN0cnVjdCBhdXRvX3B0cl9yZWYgewogICBfVHAxKiBfTV9w
dHI7CiAgIGF1dG9fcHRyX3JlZihfVHAxKiBfX3ApIDogX01fcHRyKF9fcCkge30KfTsKCnRlbXBs
YXRlIDxjbGFzcyBfVHA+IGNsYXNzIGF1dG9fcHRyIHsKcHJpdmF0ZToKICBfVHAqIF9NX3B0cjsK
CnB1YmxpYzoKICB0eXBlZGVmIF9UcCBlbGVtZW50X3R5cGU7CgogIGV4cGxpY2l0IGF1dG9fcHRy
KF9UcCogX19wID0gMCkgdGhyb3coKSA6IF9NX3B0cihfX3ApIHt9CiAgYXV0b19wdHIoYXV0b19w
dHImIF9fYSkgdGhyb3coKSA6IF9NX3B0cihfX2EucmVsZWFzZSgpKSB7fQoKICB0ZW1wbGF0ZSA8
Y2xhc3MgX1RwMT4gYXV0b19wdHIoYXV0b19wdHI8X1RwMT4mIF9fYSkgdGhyb3coKQogICAgOiBf
TV9wdHIoX19hLnJlbGVhc2UoKSkge30KCiAgYXV0b19wdHImIG9wZXJhdG9yPShhdXRvX3B0ciYg
X19hKSB0aHJvdygpIHsKICAgIHJlc2V0KF9fYS5yZWxlYXNlKCkpOwogICAgcmV0dXJuICp0aGlz
OwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+CiAgYXV0b19wdHImIG9wZXJhdG9yPShhdXRv
X3B0cjxfVHAxPiYgX19hKSB0aHJvdygpIHsKICAgIHJlc2V0KF9fYS5yZWxlYXNlKCkpOwogICAg
cmV0dXJuICp0aGlzOwogIH0KCgoKCgogIH5hdXRvX3B0cigpIHsgZGVsZXRlIF9NX3B0cjsgfQoK
ICBfVHAmIG9wZXJhdG9yKigpIGNvbnN0IHRocm93KCkgewogICAgcmV0dXJuICpfTV9wdHI7CiAg
fQogIF9UcCogb3BlcmF0b3ItPigpIGNvbnN0IHRocm93KCkgewogICAgcmV0dXJuIF9NX3B0cjsK
ICB9CiAgX1RwKiBnZXQoKSBjb25zdCB0aHJvdygpIHsKICAgIHJldHVybiBfTV9wdHI7CiAgfQog
IF9UcCogcmVsZWFzZSgpIHRocm93KCkgewogICAgX1RwKiBfX3RtcCA9IF9NX3B0cjsKICAgIF9N
X3B0ciA9IDA7CiAgICByZXR1cm4gX190bXA7CiAgfQogIHZvaWQgcmVzZXQoX1RwKiBfX3AgPSAw
KSB0aHJvdygpIHsKICAgIGlmIChfX3AgIT0gX01fcHRyKSB7CiAgICAgIGRlbGV0ZSBfTV9wdHI7
CiAgICAgIF9NX3B0ciA9IF9fcDsKICAgIH0KICB9CgoKCgoKcHVibGljOgogIGF1dG9fcHRyKGF1
dG9fcHRyX3JlZjxfVHA+IF9fcmVmKSB0aHJvdygpCiAgICA6IF9NX3B0cihfX3JlZi5fTV9wdHIp
IHt9CgogIGF1dG9fcHRyJiBvcGVyYXRvcj0oYXV0b19wdHJfcmVmPF9UcD4gX19yZWYpIHRocm93
KCkgewogICAgaWYgKF9fcmVmLl9NX3B0ciAhPSB0aGlzLT5nZXQoKSkgewogICAgICBkZWxldGUg
X01fcHRyOwogICAgICBfTV9wdHIgPSBfX3JlZi5fTV9wdHI7CiAgICB9CiAgICByZXR1cm4gKnRo
aXM7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gb3BlcmF0b3IgYXV0b19wdHJfcmVmPF9U
cDE+KCkgdGhyb3coKQogICAgeyByZXR1cm4gYXV0b19wdHJfcmVmPF9UcD4odGhpcy0+cmVsZWFz
ZSgpKTsgfQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBvcGVyYXRvciBhdXRvX3B0cjxfVHAxPigp
IHRocm93KCkKICAgIHsgcmV0dXJuIGF1dG9fcHRyPF9UcDE+KHRoaXMtPnJlbGVhc2UoKSk7IH0K
fTsKCn0KIyA0NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIg
MiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3R5cGVfdHJhaXRzLmgiIDEg
MwojIDQ1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMK
IyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAxIDMKIyA0
NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCiMgMSAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX3N0cmluZy5oIiAxIDMKIyAzOCAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzCgojIDEgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTU4Ni1wYy1saW51eC1nbnUvYml0cy9hdG9taWNpdHku
aCIgMSAzCiMgMzMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTU4Ni1wYy1saW51eC1nbnUv
Yml0cy9hdG9taWNpdHkuaCIgMwp0eXBlZGVmIGludCBfQXRvbWljX3dvcmQ7CgpzdGF0aWMgaW5s
aW5lIF9BdG9taWNfd29yZAoKX19leGNoYW5nZV9hbmRfYWRkICh2b2xhdGlsZSBfQXRvbWljX3dv
cmQgKl9fbWVtLCBpbnQgX192YWwpCnsKICByZWdpc3RlciBfQXRvbWljX3dvcmQgX19yZXN1bHQ7
CiAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsb2NrOyB4YWRkbCAlMCwlMiIKICAgICAgICAgICAg
ICAgICAgICAgICAgOiAiPXIiIChfX3Jlc3VsdCkKICAgICAgICAgICAgICAgICAgICAgICAgOiAi
MCIgKF9fdmFsKSwgIm0iICgqX19tZW0pCiAgICAgICAgICAgICAgICAgICAgICAgIDogIm1lbW9y
eSIpOwogIHJldHVybiBfX3Jlc3VsdDsKfQoKc3RhdGljIGlubGluZSB2b2lkCgpfX2F0b21pY19h
ZGQgKHZvbGF0aWxlIF9BdG9taWNfd29yZCogX19tZW0sIGludCBfX3ZhbCkKewogIF9fYXNtX18g
X192b2xhdGlsZV9fICgibG9jazsgYWRkbCAlMCwlMSIKICAgICAgICAgICAgICAgICAgICAgICAg
OiA6ICJpciIgKF9fdmFsKSwgIm0iICgqX19tZW0pIDogIm1lbW9yeSIpOwp9CgpzdGF0aWMgaW5s
aW5lIGNoYXIKCl9fY29tcGFyZV9hbmRfc3dhcCAodm9sYXRpbGUgbG9uZyogX19wLCBsb25nIF9f
b2xkdmFsLCBsb25nIF9fbmV3dmFsKQp7CiAgY2hhciBfX3JldDsKICBsb25nIF9fcmVhZHZhbDsK
CiAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsb2NrOyBjbXB4Y2hnbCAlMywgJTE7IHNldGUgJTAi
CiAgICAgICAgICAgICAgICAgICAgICAgIDogIj1xIiAoX19yZXQpLCAiPW0iICgqX19wKSwgIj1h
IiAoX19yZWFkdmFsKQogICAgICAgICAgICAgICAgICAgICAgICA6ICJyIiAoX19uZXd2YWwpLCAi
bSIgKCpfX3ApLCAiYSIgKF9fb2xkdmFsKSk7CiAgcmV0dXJuIF9fcmV0Owp9CiMgNDAgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcuaCIgMiAzCgpuYW1lc3BhY2Ug
c3RkCnsKIyA4MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX3N0cmluZy5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICBjbGFzcyBiYXNpY19zdHJpbmcKICAgIHsKCiAgICBwdWJsaWM6CiAgICAg
IHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJh
aXRzOjpjaGFyX3R5cGUgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiBfQWxsb2MgYWxsb2NhdG9y
X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgc2l6ZV90eXBl
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVu
Y2VfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnJlZmVyZW5jZSByZWZlcmVu
Y2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpjb25zdF9yZWZlcmVuY2UgY29uc3Rf
cmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cG9pbnRlciBwb2ludGVy
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2lu
dGVyOwogICAgICB0eXBlZGVmIF9fbm9ybWFsX2l0ZXJhdG9yPHBvaW50ZXIsIGJhc2ljX3N0cmlu
Zz4gaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgX19ub3JtYWxfaXRlcmF0b3I8Y29uc3RfcG9pbnRl
ciwgYmFzaWNfc3RyaW5nPiBjb25zdF9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0
ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogICAgICB0eXBl
ZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CgogICAgcHJp
dmF0ZToKIyAxMTggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcu
aCIgMwogICAgICBzdHJ1Y3QgX1JlcAogICAgICB7CgogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
X0FsbG9jOjpyZWJpbmQ8Y2hhcj46Om90aGVyIF9SYXdfYnl0ZXNfYWxsb2M7CiMgMTM2ICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKICAgICAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90eXBlIF9TX21heF9zaXplOwogICAgICAgIHN0YXRpYyBjb25zdCBfQ2hh
clQgX1NfdGVybWluYWw7CgogICAgICAgIHNpemVfdHlwZSBfTV9sZW5ndGg7CiAgICAgICAgc2l6
ZV90eXBlIF9NX2NhcGFjaXR5OwogICAgICAgIF9BdG9taWNfd29yZCBfTV9yZWZlcmVuY2VzOwoK
ICAgICAgICBib29sCiAgICAgICAgX01faXNfbGVha2VkKCkgY29uc3QKICAgICAgICB7IHJldHVy
biBfTV9yZWZlcmVuY2VzIDwgMDsgfQoKICAgICAgICBib29sCiAgICAgICAgX01faXNfc2hhcmVk
KCkgY29uc3QKICAgICAgICB7IHJldHVybiBfTV9yZWZlcmVuY2VzID4gMDsgfQoKICAgICAgICB2
b2lkCiAgICAgICAgX01fc2V0X2xlYWtlZCgpCiAgICAgICAgeyBfTV9yZWZlcmVuY2VzID0gLTE7
IH0KCiAgICAgICAgdm9pZAogICAgICAgIF9NX3NldF9zaGFyYWJsZSgpCiAgICAgICAgeyBfTV9y
ZWZlcmVuY2VzID0gMDsgfQoKICAgICAgICBfQ2hhclQqCiAgICAgICAgX01fcmVmZGF0YSgpIHRo
cm93KCkKICAgICAgICB7IHJldHVybiByZWludGVycHJldF9jYXN0PF9DaGFyVCo+ICh0aGlzICsg
MSk7IH0KCiAgICAgICAgX0NoYXJUJgogICAgICAgIG9wZXJhdG9yW10oc2l6ZV90IF9fcykgdGhy
b3coKQogICAgICAgIHsgcmV0dXJuIF9NX3JlZmRhdGEoKSBbX19zXTsgfQoKICAgICAgICBfQ2hh
clQqCiAgICAgICAgX01fZ3JhYihjb25zdCBfQWxsb2MmIF9fYWxsb2MxLCBjb25zdCBfQWxsb2Mm
IF9fYWxsb2MyKQogICAgICAgIHsgcmV0dXJuICghX01faXNfbGVha2VkKCkgJiYgX19hbGxvYzEg
PT0gX19hbGxvYzIpID8KICAgICAgICAgICAgX01fcmVmY29weSgpIDogX01fY2xvbmUoX19hbGxv
YzEpOyB9CgoKICAgICAgICBzdGF0aWMgX1JlcCoKICAgICAgICBfU19jcmVhdGUoc2l6ZV90LCBj
b25zdCBfQWxsb2MmKTsKCiAgICAgICAgdm9pZAogICAgICAgIF9NX2Rpc3Bvc2UoY29uc3QgX0Fs
bG9jJiBfX2EpCiAgICAgICAgewogICAgICAgICAgaWYgKF9fZXhjaGFuZ2VfYW5kX2FkZCgmX01f
cmVmZXJlbmNlcywgLTEpIDw9IDApCiAgICAgICAgICAgIF9NX2Rlc3Ryb3koX19hKTsKICAgICAg
ICB9CgogICAgICAgIHZvaWQKICAgICAgICBfTV9kZXN0cm95KGNvbnN0IF9BbGxvYyYpIHRocm93
KCk7CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9yZWZjb3B5KCkgdGhyb3coKQogICAgICAg
IHsKICAgICAgICAgIF9fYXRvbWljX2FkZCgmX01fcmVmZXJlbmNlcywgMSk7CiAgICAgICAgICBy
ZXR1cm4gX01fcmVmZGF0YSgpOwogICAgICAgIH0KCiAgICAgICAgX0NoYXJUKgogICAgICAgIF9N
X2Nsb25lKGNvbnN0IF9BbGxvYyYsIHNpemVfdHlwZSBfX3JlcyA9IDApOwojIDIwOCAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzCiAgICAgICAgaW5saW5l
IHN0YXRpYyBib29sCiAgICAgICAgX1NfZXhjZXNzX3Nsb3Aoc2l6ZV90LCBzaXplX3QpOwoKICAg
ICAgfTsKCgogICAgICBzdHJ1Y3QgX0FsbG9jX2hpZGVyIDogX0FsbG9jCiAgICAgIHsKICAgICAg
ICBfQWxsb2NfaGlkZXIoX0NoYXJUKiBfX2RhdCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICAgICAg
OiBfQWxsb2MoX19hKSwgX01fcChfX2RhdCkgeyB9CgogICAgICAgIF9DaGFyVCogX01fcDsKICAg
ICAgfTsKCiAgICBwdWJsaWM6CgoKCiAgICAgIHN0YXRpYyBjb25zdCBzaXplX3R5cGUgbnBvcyA9
IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oLTEpOwoKICAgIHByaXZhdGU6CgogICAgICBtdXRhYmxl
IF9BbGxvY19oaWRlciBfTV9kYXRhcGx1czsKCgoKICAgICAgc3RhdGljIHNpemVfdHlwZSBfU19l
bXB0eV9yZXBfc3RvcmFnZVsoc2l6ZW9mKF9SZXApICsgc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2Yo
c2l6ZV90eXBlKSAtIDEpL3NpemVvZihzaXplX3R5cGUpXTsKCiAgICAgIF9DaGFyVCoKICAgICAg
X01fZGF0YSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2RhdGFwbHVzLl9NX3A7IH0KCiAgICAg
IF9DaGFyVCoKICAgICAgX01fZGF0YShfQ2hhclQqIF9fcCkKICAgICAgeyByZXR1cm4gKF9NX2Rh
dGFwbHVzLl9NX3AgPSBfX3ApOyB9CgogICAgICBfUmVwKgogICAgICBfTV9yZXAoKSBjb25zdAog
ICAgICB7IHJldHVybiAmKChyZWludGVycHJldF9jYXN0PF9SZXAqPiAoX01fZGF0YSgpKSlbLTFd
KTsgfQoKCgogICAgICBpdGVyYXRvcgogICAgICBfTV9pYmVnaW4oKSBjb25zdCB7IHJldHVybiBp
dGVyYXRvcihfTV9kYXRhKCkpOyB9CgogICAgICBpdGVyYXRvcgogICAgICBfTV9pZW5kKCkgY29u
c3QgeyByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQoKICAgICAg
dm9pZAogICAgICBfTV9sZWFrKCkKICAgICAgewogICAgICAgIGlmICghX01fcmVwKCktPl9NX2lz
X2xlYWtlZCgpKQogICAgICAgICAgX01fbGVha19oYXJkKCk7CiAgICAgIH0KCiAgICAgIGl0ZXJh
dG9yCiAgICAgIF9NX2NoZWNrKHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgICAgewogICAgICAg
IGlmIChfX3BvcyA+IHRoaXMtPnNpemUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3Jhbmdl
KCJiYXNpY19zdHJpbmc6Ol9NX2NoZWNrIik7CiAgICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsg
X19wb3M7CiAgICAgIH0KCgogICAgICBpdGVyYXRvcgogICAgICBfTV9mb2xkKHNpemVfdHlwZSBf
X3Bvcywgc2l6ZV90eXBlIF9fb2ZmKSBjb25zdAogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3Rv
ZmYgPSBfX29mZiA8IHRoaXMtPnNpemUoKSAtIF9fcG9zOwogICAgICAgIHNpemVfdHlwZSBfX25l
d29mZiA9IF9fdGVzdG9mZiA/IF9fb2ZmIDogdGhpcy0+c2l6ZSgpIC0gX19wb3M7CiAgICAgICAg
cmV0dXJuIChfTV9pYmVnaW4oKSArIF9fcG9zICsgX19uZXdvZmYpOwogICAgICB9CgoKCiAgICAg
IHRlbXBsYXRlPGNsYXNzIF9JdGVyYXRvcj4KICAgICAgICBzdGF0aWMgdm9pZAogICAgICAgIF9T
X2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIF9JdGVyYXRvciBfX2sxLCBfSXRlcmF0b3IgX19rMikK
ICAgICAgICB7CiAgICAgICAgICBmb3IgKDsgX19rMSAhPSBfX2syOyArK19fazEsICsrX19wKQog
ICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKCpfX3AsICpfX2sxKTsKICAgICAgICB9Cgog
ICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBpdGVyYXRv
ciBfX2sxLCBpdGVyYXRvciBfX2syKQogICAgICB7IF9TX2NvcHlfY2hhcnMoX19wLCBfX2sxLmJh
c2UoKSwgX19rMi5iYXNlKCkpOyB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2No
YXJzKF9DaGFyVCogX19wLCBjb25zdF9pdGVyYXRvciBfX2sxLCBjb25zdF9pdGVyYXRvciBfX2sy
KQogICAgICB7IF9TX2NvcHlfY2hhcnMoX19wLCBfX2sxLmJhc2UoKSwgX19rMi5iYXNlKCkpOyB9
CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBfQ2hh
clQqIF9fazEsIF9DaGFyVCogX19rMikKICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9f
azEsIF9fazIgLSBfX2sxKTsgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFy
cyhfQ2hhclQqIF9fcCwgY29uc3QgX0NoYXJUKiBfX2sxLCBjb25zdCBfQ2hhclQqIF9fazIpCiAg
ICAgIHsgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX2sxLCBfX2syIC0gX19rMSk7IH0KCiAgICAg
IHZvaWQKICAgICAgX01fbXV0YXRlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbGVuMSwg
c2l6ZV90eXBlIF9fbGVuMik7CgogICAgICB2b2lkCiAgICAgIF9NX2xlYWtfaGFyZCgpOwoKICAg
ICAgc3RhdGljIF9SZXAmCiAgICAgIF9TX2VtcHR5X3JlcCgpCiAgICAgIHsgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PF9SZXAqPigmX1NfZW1wdHlfcmVwX3N0b3JhZ2UpOyB9CgogICAgcHVibGlj
OgoKCgoKICAgICAgaW5saW5lCiAgICAgIGJhc2ljX3N0cmluZygpOwoKICAgICAgZXhwbGljaXQK
ICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9BbGxvYyYgX19hKTsKCgogICAgICBiYXNpY19zdHJp
bmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cik7CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBi
YXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICBz
aXplX3R5cGUgX19uID0gbnBvcyk7CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJp
bmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUg
X19uLCBjb25zdCBfQWxsb2MmIF9fYSk7CgogICAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJU
KiBfX3MsIHNpemVfdHlwZSBfX24sCiAgICAgICAgICAgICAgICAgICBjb25zdCBfQWxsb2MmIF9f
YSA9IF9BbGxvYygpKTsKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBjb25z
dCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKICAgICAgYmFzaWNfc3RyaW5nKHNpemVfdHlwZSBf
X24sIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOwoKICAgICAgdGVt
cGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nKF9JbnB1dEl0
ZXJhdG9yIF9fYmVnaW4sIF9JbnB1dEl0ZXJhdG9yIF9fZW5kLAogICAgICAgICAgICAgICAgICAg
ICBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKCiAgICAgIH5iYXNpY19zdHJpbmcoKQog
ICAgICB7IF9NX3JlcCgpLT5fTV9kaXNwb3NlKHRoaXMtPmdldF9hbGxvY2F0b3IoKSk7IH0KCiAg
ICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3I9KGNvbnN0IGJhc2ljX3N0cmluZyYgX19z
dHIpIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3N0cik7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYK
ICAgICAgb3BlcmF0b3I9KGNvbnN0IF9DaGFyVCogX19zKSB7IHJldHVybiB0aGlzLT5hc3NpZ24o
X19zKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcj0oX0NoYXJUIF9fYykg
eyByZXR1cm4gdGhpcy0+YXNzaWduKDEsIF9fYyk7IH0KCgogICAgICBpdGVyYXRvcgogICAgICBi
ZWdpbigpCiAgICAgIHsKICAgICAgICBfTV9sZWFrKCk7CiAgICAgICAgcmV0dXJuIGl0ZXJhdG9y
KF9NX2RhdGEoKSk7CiAgICAgIH0KCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGJlZ2luKCkg
Y29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX01fZGF0YSgpKTsgfQoKICAgICAg
aXRlcmF0b3IKICAgICAgZW5kKCkKICAgICAgewogICAgICAgICBfTV9sZWFrKCk7CiAgICAgICAg
IHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCkpOwogICAgICB9CgogICAg
ICBjb25zdF9pdGVyYXRvcgogICAgICBlbmQoKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9p
dGVyYXRvcihfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCkpOyB9CgogICAgICByZXZlcnNlX2l0ZXJh
dG9yCiAgICAgIHJiZWdpbigpCiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IodGhpcy0+
ZW5kKCkpOyB9CgogICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJiZWdpbigpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IodGhpcy0+ZW5kKCkpOyB9
CgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJlbmQoKQogICAgICB7IHJldHVybiByZXZl
cnNlX2l0ZXJhdG9yKHRoaXMtPmJlZ2luKCkpOyB9CgogICAgICBjb25zdF9yZXZlcnNlX2l0ZXJh
dG9yCiAgICAgIHJlbmQoKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJh
dG9yKHRoaXMtPmJlZ2luKCkpOyB9CgogICAgcHVibGljOgoKICAgICAgc2l6ZV90eXBlCiAgICAg
IHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9yZXAoKS0+X01fbGVuZ3RoOyB9CgogICAgICBzaXpl
X3R5cGUKICAgICAgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gX01fcmVwKCktPl9NX2xlbmd0aDsg
fQoKICAgICAgc2l6ZV90eXBlCiAgICAgIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gX1JlcDo6
X1NfbWF4X3NpemU7IH0KCiAgICAgIHZvaWQKICAgICAgcmVzaXplKHNpemVfdHlwZSBfX24sIF9D
aGFyVCBfX2MpOwoKICAgICAgdm9pZAogICAgICByZXNpemUoc2l6ZV90eXBlIF9fbikgeyB0aGlz
LT5yZXNpemUoX19uLCBfQ2hhclQoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBjYXBhY2l0
eSgpIGNvbnN0IHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9jYXBhY2l0eTsgfQoKICAgICAgdm9pZAog
ICAgICByZXNlcnZlKHNpemVfdHlwZSBfX3Jlc19hcmcgPSAwKTsKCiAgICAgIHZvaWQKICAgICAg
Y2xlYXIoKSB7IF9NX211dGF0ZSgwLCB0aGlzLT5zaXplKCksIDApOyB9CgogICAgICBib29sCiAg
ICAgIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gdGhpcy0+c2l6ZSgpID09IDA7IH0KCgogICAgICBj
b25zdF9yZWZlcmVuY2UKICAgICAgb3BlcmF0b3JbXSAoc2l6ZV90eXBlIF9fcG9zKSBjb25zdAog
ICAgICB7IHJldHVybiBfTV9kYXRhKClbX19wb3NdOyB9CgogICAgICByZWZlcmVuY2UKICAgICAg
b3BlcmF0b3JbXShzaXplX3R5cGUgX19wb3MpCiAgICAgIHsKICAgICAgICBfTV9sZWFrKCk7CiAg
ICAgICAgcmV0dXJuIF9NX2RhdGEoKVtfX3Bvc107CiAgICAgIH0KCiAgICAgIGNvbnN0X3JlZmVy
ZW5jZQogICAgICBhdChzaXplX3R5cGUgX19uKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKF9f
biA+PSB0aGlzLT5zaXplKCkpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNf
c3RyaW5nOjphdCIpOwogICAgICAgIHJldHVybiBfTV9kYXRhKClbX19uXTsKICAgICAgfQoKICAg
ICAgcmVmZXJlbmNlCiAgICAgIGF0KHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBpZiAo
X19uID49IHNpemUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJp
bmc6OmF0Iik7CiAgICAgICAgX01fbGVhaygpOwogICAgICAgIHJldHVybiBfTV9kYXRhKClbX19u
XTsKICAgICAgfQoKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3IrPShjb25zdCBi
YXNpY19zdHJpbmcmIF9fc3RyKSB7IHJldHVybiB0aGlzLT5hcHBlbmQoX19zdHIpOyB9CgogICAg
ICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yKz0oY29uc3QgX0NoYXJUKiBfX3MpIHsgcmV0
dXJuIHRoaXMtPmFwcGVuZChfX3MpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJh
dG9yKz0oX0NoYXJUIF9fYykgeyByZXR1cm4gdGhpcy0+YXBwZW5kKHNpemVfdHlwZSgxKSwgX19j
KTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5n
JiBfX3N0cik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBiYXNpY19z
dHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pOwoKICAgICAgYmFz
aWNfc3RyaW5nJgogICAgICBhcHBlbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24p
OwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBlbmQoY29uc3QgX0NoYXJUKiBfX3MpCiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7
IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKHNpemVfdHlwZSBfX24sIF9DaGFy
VCBfX2MpOwoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFz
aWNfc3RyaW5nJgogICAgICAgIGFwcGVuZChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyYXRvciBfX2xhc3QpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pZW5kKCks
IF9NX2llbmQoKSwgX19maXJzdCwgX19sYXN0KTsgfQoKICAgICAgdm9pZAogICAgICBwdXNoX2Jh
Y2soX0NoYXJUIF9fYykKICAgICAgeyB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgp
LCAxLCBfX2MpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBiYXNp
Y19zdHJpbmcmIF9fc3RyKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKGNvbnN0
IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikKICAg
ICAgewogICAgICAgIHJldHVybiB0aGlzLT5hc3NpZ24oX19zdHIuX01fY2hlY2soX19wb3MpLCBf
X3N0ci5fTV9mb2xkKF9fcG9zLCBfX24pKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgog
ICAgICBhc3NpZ24oY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsgcmV0
dXJuIHRoaXMtPmFzc2lnbihfX3MsIF9fcyArIF9fbik7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYK
ICAgICAgYXNzaWduKGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7IHJldHVybiB0aGlzLT5hc3Np
Z24oX19zLCBfX3MgKyB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBiYXNpY19z
dHJpbmcmCiAgICAgIGFzc2lnbihzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQogICAgICB7IHJl
dHVybiB0aGlzLT5yZXBsYWNlKF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9fbiwgX19jKTsgfQoK
ICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5n
JgogICAgICAgIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf
X2xhc3QpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pYmVnaW4oKSwgX01faWVu
ZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOyB9CgogICAgICB2b2lkCiAgICAgIGluc2VydChpdGVyYXRv
ciBfX3AsIHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICAgIHsgdGhpcy0+cmVwbGFjZShf
X3AsIF9fcCwgX19uLCBfX2MpOyB9CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRv
cj4KICAgICAgICB2b2lkIGluc2VydChpdGVyYXRvciBfX3AsIF9JbnB1dEl0ZXJhdG9yIF9fYmVn
LCBfSW5wdXRJdGVyYXRvciBfX2VuZCkKICAgICAgICB7IHRoaXMtPnJlcGxhY2UoX19wLCBfX3As
IF9fYmVnLCBfX2VuZCk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVf
dHlwZSBfX3BvczEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICAgIHsKICAgICAgICBp
dGVyYXRvciBfX3AgPSBfTV9jaGVjayhfX3BvczEpOwogICAgICAgIHRoaXMtPnJlcGxhY2UoX19w
LCBfX3AsIF9fc3RyLl9NX2liZWdpbigpLCBfX3N0ci5fTV9pZW5kKCkpOwogICAgICAgIHJldHVy
biAqdGhpczsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90
eXBlIF9fcG9zMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgIHNpemVf
dHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBpdGVyYXRvciBfX3Ag
PSBfTV9jaGVjayhfX3BvczEpOwogICAgICAgIHRoaXMtPnJlcGxhY2UoX19wLCBfX3AsIF9fc3Ry
Ll9NX2NoZWNrKF9fcG9zMiksCiAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9mb2xkKF9f
cG9zMiwgX19uKSk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICBiYXNpY19z
dHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MsIGNvbnN0IF9DaGFyVCogX19zLCBz
aXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgaXRlcmF0b3IgX19wID0gX01fY2hlY2soX19w
b3MpOwogICAgICAgIHRoaXMtPnJlcGxhY2UoX19wLCBfX3AsIF9fcywgX19zICsgX19uKTsKICAg
ICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5z
ZXJ0KHNpemVfdHlwZSBfX3BvcywgY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRo
aXMtPmluc2VydChfX3BvcywgX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAg
ICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBf
X24sIF9DaGFyVCBfX2MpCiAgICAgIHsKICAgICAgICB0aGlzLT5pbnNlcnQoX01fY2hlY2soX19w
b3MpLCBfX24sIF9fYyk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICBpdGVy
YXRvcgogICAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBfQ2hhclQgX19jID0gX0NoYXJUKCkpCiAg
ICAgIHsKICAgICAgICBzaXplX3R5cGUgX19wb3MgPSBfX3AgLSBfTV9pYmVnaW4oKTsKICAgICAg
ICB0aGlzLT5pbnNlcnQoX01fY2hlY2soX19wb3MpLCBzaXplX3R5cGUoMSksIF9fYyk7CiAgICAg
ICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgICAgICByZXR1cm4gdGhpcy0+X01faWJl
Z2luKCkgKyBfX3BvczsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBlcmFzZShz
aXplX3R5cGUgX19wb3MgPSAwLCBzaXplX3R5cGUgX19uID0gbnBvcykKICAgICAgewogICAgICAg
IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwgX01fZm9sZChfX3BvcywgX19u
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9kYXRhKCksIF9NX2RhdGEoKSk7CiAg
ICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCiAg
ICAgIHsKICAgICAgICBzaXplX3R5cGUgX19pID0gX19wb3NpdGlvbiAtIF9NX2liZWdpbigpOwog
ICAgICAgIHRoaXMtPnJlcGxhY2UoX19wb3NpdGlvbiwgX19wb3NpdGlvbiArIDEsIF9NX2RhdGEo
KSwgX01fZGF0YSgpKTsKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgICAg
IHJldHVybiBfTV9pYmVnaW4oKSArIF9faTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAg
ZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQogICAgICB7CiAgICAgICAg
c2l6ZV90eXBlIF9faSA9IF9fZmlyc3QgLSBfTV9pYmVnaW4oKTsKICAgICAgICB0aGlzLT5yZXBs
YWNlKF9fZmlyc3QsIF9fbGFzdCwgX01fZGF0YSgpLCBfTV9kYXRhKCkpOwogICAgICAgIF9NX3Jl
cCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICAgICByZXR1cm4gX01faWJlZ2luKCkgKyBfX2k7CiAg
ICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3Ms
IHNpemVfdHlwZSBfX24sIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICAgIHsKICAgICAg
ICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2ZvbGQoX19wb3MsIF9f
biksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLmJlZ2luKCksIF9fc3RyLmVu
ZCgpKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlw
ZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAg
ICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKTsKCiAgICAgIGJhc2lj
X3N0cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBj
b25zdCBfQ2hhclQqIF9fcywKICAgICAgICAgICAgICBzaXplX3R5cGUgX19uMikKICAgICAgewog
ICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwgX01fZm9sZChfX3Bv
cywgX19uMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zLCBfX3MgKyBfX24yKTsK
ICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bv
cywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7CiAgICAgICAgcmV0
dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3MpLCBfTV9mb2xkKF9fcG9zLCBfX24xKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MsIF9fcyArIHRyYWl0c190eXBlOjpsZW5n
dGgoX19zKSk7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXpl
X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBzaXplX3R5cGUgX19uMiwgX0NoYXJUIF9fYykK
ICAgICAgewogICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwgX01f
Zm9sZChfX3BvcywgX19uMSksIF9fbjIsIF9fYyk7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmlu
ZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBjb25zdCBiYXNp
Y19zdHJpbmcmIF9fc3RyKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEsIF9faTIs
IF9fc3RyLmJlZ2luKCksIF9fc3RyLmVuZCgpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAg
ICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQogICAgICB7IHJldHVy
biB0aGlzLT5yZXBsYWNlKF9faTEsIF9faTIsIF9fcywgX19zICsgX19uKTsgfQoKICAgICAgYmFz
aWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNv
bnN0IF9DaGFyVCogX19zKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEsIF9faTIs
IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MgKyB0cmFpdHNfdHlwZTo6bGVu
Z3RoKF9fcykpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3Ig
X19pMSwgaXRlcmF0b3IgX19pMiwgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYyk7CgogICAgICB0
ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAg
ICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLAogICAgICAgICAgICAgICAg
X0lucHV0SXRlcmF0b3IgX19rMSwgX0lucHV0SXRlcmF0b3IgX19rMikKICAgICAgICB7IHJldHVy
biBfTV9yZXBsYWNlKF9faTEsIF9faTIsIF9fazEsIF9fazIsCiAgICAgICAgICAgICB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSgpKTsg
fQoKICAgIHByaXZhdGU6CiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAg
ICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBfTV9yZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJh
dG9yIF9faTIsIF9JbnB1dEl0ZXJhdG9yIF9fazEsCiAgICAgICAgICAgICAgICAgICBfSW5wdXRJ
dGVyYXRvciBfX2syLCBpbnB1dF9pdGVyYXRvcl90YWcpOwoKICAgICAgdGVtcGxhdGU8Y2xhc3Mg
X0Z3ZEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBfTV9yZXBsYWNlKGl0
ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9Gd2RJdGVyYXRvciBfX2sxLAogICAgICAgICAg
ICAgICAgICAgX0Z3ZEl0ZXJhdG9yIF9fazIsIGZvcndhcmRfaXRlcmF0b3JfdGFnKTsKCgoKICAg
ICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAg
IF9TX2NvbnN0cnVjdF9hdXgoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0Fs
bG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpCiAgICAgICAg
ewogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0luSXRlcj46Oml0
ZXJhdG9yX2NhdGVnb3J5IF9UYWc7CiAgICAgICAgICByZXR1cm4gX1NfY29uc3RydWN0KF9fYmVn
LCBfX2VuZCwgX19hLCBfVGFnKCkpOwogICAgICAgIH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9J
bkl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3RfYXV4KF9J
bkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAg
ICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIF9T
X2NvbnN0cnVjdChzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fYmVnKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dmFsdWVfdHlwZT4oX19lbmQpLCBfX2EpOwogICAg
ICAgIH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFy
VCoKICAgICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29u
c3QgX0FsbG9jJiBfX2EpCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNf
aW50ZWdlcjxfSW5JdGVyPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAgICAgIHJldHVybiBf
U19jb25zdHJ1Y3RfYXV4KF9fYmVnLCBfX2VuZCwgX19hLCBfSW50ZWdyYWwoKSk7CiAgICAgICAg
fQoKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFyVCoK
ICAgICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0
IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsK
CgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0Z3ZEl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFyVCoK
ICAgICAgICBfU19jb25zdHJ1Y3QoX0Z3ZEl0ZXIgX19lbmQsIF9Gd2RJdGVyIF9fYmVnLCBjb25z
dCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcp
OwoKICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgX1NfY29uc3RydWN0KHNpemVfdHlwZSBfX3Jl
cSwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpOwoKICAgIHB1YmxpYzoKCiAgICAgIHNp
emVfdHlwZQogICAgICBjb3B5KF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLCBzaXplX3R5cGUg
X19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHZvaWQKICAgICAgc3dhcChiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MpOwoKCiAgICAgIGNvbnN0IF9DaGFyVCoKICAgICAg
Y19zdHIoKSBjb25zdAogICAgICB7CgogICAgICAgIHNpemVfdHlwZSBfX24gPSB0aGlzLT5zaXpl
KCk7CiAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfTV9kYXRhKClbX19uXSwgX1JlcDo6X1Nf
dGVybWluYWwpOwogICAgICAgIHJldHVybiBfTV9kYXRhKCk7CiAgICAgIH0KCiAgICAgIGNvbnN0
IF9DaGFyVCoKICAgICAgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGEoKTsgfQoKICAgICAg
YWxsb2NhdG9yX3R5cGUKICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2Rh
dGFwbHVzOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChjb25zdCBfQ2hhclQqIF9fcywg
c2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQog
ICAgICBmaW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IDAp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQoX19zdHIuZGF0YSgpLCBfX3BvcywgX19z
dHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoY29uc3QgX0NoYXJUKiBf
X3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQo
X19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBl
CiAgICAgIGZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3Q7CgogICAg
ICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90
eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmZpbmQoX19zdHIu
ZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIHJm
aW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNv
bnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXpl
X3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5yZmluZChfX3Ms
IF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAg
ICAgcmZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3Q7CgogICAg
ICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3Ry
LCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2Zp
cnN0X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVf
dHlwZQogICAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19w
b3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmly
c3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAg
IHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxl
bmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2YoX0NoYXJU
IF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+Zmlu
ZChfX2MsIF9fcG9zKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9vZihjb25z
dCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAg
ICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIu
c2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hh
clQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsKCiAgICAgIHNp
emVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBf
X3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9vZihfX3Ms
IF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAg
ICAgZmluZF9sYXN0X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJmaW5kKF9fYywgX19wb3MpOyB9CgogICAgICBzaXplX3R5
cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6
ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9u
b3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90
eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUg
X19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAg
ICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBz
aXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0
X25vdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBz
aXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9f
cG9zID0gMCkgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X25vdF9vZihj
b25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfbm90X29mKF9fc3RyLmRhdGEoKSwgX19wb3Ms
IF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfbm90X29m
KGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90eXBlIF9fbikgY29uc3Q7CiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rf
bm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfbm90X29mKF9fcywgX19wb3MsIHRyYWl0c190
eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfbm90
X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0OwoKICAgICAgYmFz
aWNfc3RyaW5nCiAgICAgIHN1YnN0cihzaXplX3R5cGUgX19wb3MgPSAwLCBzaXplX3R5cGUgX19u
ID0gbnBvcykgY29uc3QKICAgICAgewogICAgICAgIGlmIChfX3BvcyA+IHRoaXMtPnNpemUoKSkK
ICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OnN1YnN0ciIpOwog
ICAgICAgIHJldHVybiBiYXNpY19zdHJpbmcoKnRoaXMsIF9fcG9zLCBfX24pOwogICAgICB9Cgog
ICAgICBpbnQKICAgICAgY29tcGFyZShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdAog
ICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgICBz
aXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgICBzaXplX3R5cGUgX19sZW4g
PSBtaW4oX19zaXplLCBfX29zaXplKTsKCiAgICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpj
b21wYXJlKF9NX2RhdGEoKSwgX19zdHIuZGF0YSgpLCBfX2xlbik7CiAgICAgICAgaWYgKCFfX3Ip
CiAgICAgICAgICBfX3IgPSBfX3NpemUgLSBfX29zaXplOwogICAgICAgIHJldHVybiBfX3I7CiAg
ICAgIH0KCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBl
IF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgY29uc3Q7CgogICAgICBpbnQKICAgICAg
Y29tcGFyZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3Ry
aW5nJiBfX3N0ciwKICAgICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19u
MikgY29uc3Q7CgogICAgICBpbnQKICAgICAgY29tcGFyZShjb25zdCBfQ2hhclQqIF9fcykgY29u
c3Q7CgoKCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBl
IF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKSBjb25zdDsKCiAgICAgIGludAogICAgICBjb21wYXJl
KHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zLAogICAg
ICAgICAgICAgIHNpemVfdHlwZSBfX24yKSBjb25zdDsKCiAgfTsKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5l
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5n
KCkKICAgIDogX01fZGF0YXBsdXMoX1NfZW1wdHlfcmVwKCkuX01fcmVmY29weSgpLCBfQWxsb2Mo
KSkgeyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4K
ICAgIG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+JiBfX3JocykKICAgIHsKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiBfX3N0cihfX2xocyk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7CiAgICAg
IHJldHVybiBfX3N0cjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFp
dHMsX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAg
ICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9fcmhzKTsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPgogICAgb3BlcmF0b3Ir
KF9DaGFyVCBfX2xocywgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4m
IF9fcmhzKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsK
ICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cihfX2xocyk7
CiAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgogICAg
b3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f
bGhzLCBfQ2hhclQgX19yaHMpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKICAgICAgX19zdHJpbmdfdHlw
ZSBfX3N0cihfX2xocyk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3NpemVfdHlwZSgxKSwgX19yaHMp
OwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBv
cGVyYXRvcj09KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f
bGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID09IDA7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfQ2hhclQqIF9fbGhz
LAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpID09IDA7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJU
KiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID09IDA7IH0KCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMu
Y29tcGFyZShfX2xocykgIT0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv
ciE9KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29t
cGFyZShfX2xocykgIT0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9
KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAg
ICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFy
ZShfX3JocykgIT0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNv
bnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAg
ICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhz
KQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPCAwOyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5s
aW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAg
eyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPCAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv
b2wKICAgIG9wZXJhdG9yPChjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1
cm4gX19yaHMuY29tcGFyZShfX2xocykgPiAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAg
ICBvcGVyYXRvcj4oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg
X19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+IDA7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+KGNvbnN0IGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IF9DaGFy
VCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+IDA7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAg
ICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19y
aHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA8IDA7IH0KCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
aW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFy
ZShfX3JocykgPD0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNv
bnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAg
ICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShf
X3JocykgPD0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0
IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMp
ID49IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAg
IGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAg
eyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPj0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBi
b29sCiAgICBvcGVyYXRvcj49KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyBy
ZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPj0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29s
CiAgICBvcGVyYXRvcj49KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICBjb25zdCBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJu
IF9fcmhzLmNvbXBhcmUoX19saHMpIDw9IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIHZvaWQKICAg
IHN3YXAoYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAg
ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyBf
X2xocy5zd2FwKF9fcmhzKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lz
LAogICAgICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf
X3N0cik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3Bl
cmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCiAgICAgICAgICAg
ICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKTsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIGdldGxpbmUoYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAogICAgICAgICAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0ciwgX0NoYXJUIF9fZGVsaW0pOwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGlubGluZSBiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIGdldGxpbmUo
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAogICAgICAgICAgICBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cik7Cn0KIyA0NyAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCgoKIyAxICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2FsZ29yaXRobS5oIiAxIDMKIyAzMSAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9hbGdvcml0aG0uaCIgMwoKIyAxICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEgMwojIDMzICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2FsZ29yaXRobS5oIiAyIDMKIyAxICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAxIDMKIyAzNCAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9hbGdvcml0aG0uaCIgMiAzCiMgMSAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEgMwojIDM1ICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2FsZ29yaXRobS5oIiAyIDMKIyAxICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RlbXBidWYuaCIgMSAzCiMgMzYgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfYWxnb3JpdGhtLmgiIDIgMwojIDEgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAxIDMKIyAzNCAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RsX2hlYXAuaCIgMSAzCiMgMzMgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfaGVhcC5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4Kdm9p
ZApfX3B1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAg
X0Rpc3RhbmNlIF9faG9sZUluZGV4LCBfRGlzdGFuY2UgX190b3BJbmRleCwgX1RwIF9fdmFsdWUp
CnsKICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgd2hpbGUg
KF9faG9sZUluZGV4ID4gX190b3BJbmRleCAmJiAqKF9fZmlyc3QgKyBfX3BhcmVudCkgPCBfX3Zh
bHVlKSB7CiAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3BhcmVu
dCk7CiAgICBfX2hvbGVJbmRleCA9IF9fcGFyZW50OwogICAgX19wYXJlbnQgPSAoX19ob2xlSW5k
ZXggLSAxKSAvIDI7CiAgfQogICooX19maXJzdCArIF9faG9sZUluZGV4KSA9IF9fdmFsdWU7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZSwg
Y2xhc3MgX1RwPgppbmxpbmUgdm9pZApfX3B1c2hfaGVhcF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0
LCBfRGlzdGFuY2UqLCBfVHAqKQp7CiAgX19wdXNoX2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKChf
X2xhc3QgLSBfX2ZpcnN0KSAtIDEpLCBfRGlzdGFuY2UoMCksCiAgICAgICAgICAgICAgX1RwKCoo
X19sYXN0IC0gMSkpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4K
aW5saW5lIHZvaWQKcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKCiAgX19wdXNoX2hlYXBfYXV4KF9fZmlyc3QsIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpLCBfX3ZhbHVlX3R5cGUo
X19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFz
cyBfRGlzdGFuY2UsIGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgp2b2lkCl9f
cHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xl
SW5kZXgsCiAgICAgICAgICAgIF9EaXN0YW5jZSBfX3RvcEluZGV4LCBfVHAgX192YWx1ZSwgX0Nv
bXBhcmUgX19jb21wKQp7CiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkg
LyAyOwogIHdoaWxlIChfX2hvbGVJbmRleCA+IF9fdG9wSW5kZXggJiYgX19jb21wKCooX19maXJz
dCArIF9fcGFyZW50KSwgX192YWx1ZSkpIHsKICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9
ICooX19maXJzdCArIF9fcGFyZW50KTsKICAgIF9faG9sZUluZGV4ID0gX19wYXJlbnQ7CiAgICBf
X3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICB9CiAgKihfX2ZpcnN0ICsgX19ob2xl
SW5kZXgpID0gX192YWx1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciwgY2xhc3MgX0NvbXBhcmUsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4K
aW5saW5lIHZvaWQKX19wdXNoX2hlYXBfYXV4KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0
LAogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUg
X19jb21wLAogICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwgX1RwKikKewogIF9fcHVzaF9oZWFw
KF9fZmlyc3QsIF9EaXN0YW5jZSgoX19sYXN0IC0gX19maXJzdCkgLSAxKSwgX0Rpc3RhbmNlKDAp
LAogICAgICAgICAgICAgIF9UcCgqKF9fbGFzdCAtIDEpKSwgX19jb21wKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lk
CnB1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCgogIF9fcHVzaF9oZWFwX2F1eChfX2ZpcnN0LCBfX2xhc3Qs
IF9fY29tcCwKICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpLCBfX3Zh
bHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4Kdm9pZApfX2FkanVzdF9oZWFwKF9SYW5k
b21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAg
ICAgICAgX0Rpc3RhbmNlIF9fbGVuLCBfVHAgX192YWx1ZSkKewogIF9EaXN0YW5jZSBfX3RvcElu
ZGV4ID0gX19ob2xlSW5kZXg7CiAgX0Rpc3RhbmNlIF9fc2Vjb25kQ2hpbGQgPSAyICogX19ob2xl
SW5kZXggKyAyOwogIHdoaWxlIChfX3NlY29uZENoaWxkIDwgX19sZW4pIHsKICAgIGlmICgqKF9f
Zmlyc3QgKyBfX3NlY29uZENoaWxkKSA8ICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkp
KQogICAgICBfX3NlY29uZENoaWxkLS07CiAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAq
KF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKTsKICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGls
ZDsKICAgIF9fc2Vjb25kQ2hpbGQgPSAyICogKF9fc2Vjb25kQ2hpbGQgKyAxKTsKICB9CiAgaWYg
KF9fc2Vjb25kQ2hpbGQgPT0gX19sZW4pIHsKICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9
ICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpOwogICAgX19ob2xlSW5kZXggPSBfX3Nl
Y29uZENoaWxkIC0gMTsKICB9CiAgX19wdXNoX2hlYXAoX19maXJzdCwgX19ob2xlSW5kZXgsIF9f
dG9wSW5kZXgsIF9fdmFsdWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQKX19wb3BfaGVhcChf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFz
dCwKICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19yZXN1bHQsIF9UcCBfX3ZhbHVl
LCBfRGlzdGFuY2UqKQp7CiAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgX19hZGp1c3RfaGVhcChf
X2ZpcnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX192YWx1
ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9UcD4K
aW5saW5lIHZvaWQKX19wb3BfaGVhcF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3Qs
IF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9UcCopCnsKICBf
X3BvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAtIDEsIF9fbGFzdCAtIDEsCiAgICAgICAgICAgICBf
VHAoKihfX2xhc3QgLSAxKSksIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CmlubGluZSB2b2lkIHBvcF9oZWFwKF9SYW5k
b21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj
ZXNzSXRlcmF0b3IgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwoKCiAgX19wb3BfaGVhcF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3ZhbHVl
X3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
LCBjbGFzcyBfRGlzdGFuY2UsCiAgICAgICAgICBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgp2
b2lkCl9fYWRqdXN0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5j
ZSBfX2hvbGVJbmRleCwKICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVl
LCBfQ29tcGFyZSBfX2NvbXApCnsKICBfRGlzdGFuY2UgX190b3BJbmRleCA9IF9faG9sZUluZGV4
OwogIF9EaXN0YW5jZSBfX3NlY29uZENoaWxkID0gMiAqIF9faG9sZUluZGV4ICsgMjsKICB3aGls
ZSAoX19zZWNvbmRDaGlsZCA8IF9fbGVuKSB7CiAgICBpZiAoX19jb21wKCooX19maXJzdCArIF9f
c2Vjb25kQ2hpbGQpLCAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKSkpCiAgICAgIF9f
c2Vjb25kQ2hpbGQtLTsKICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCAr
IF9fc2Vjb25kQ2hpbGQpOwogICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkOwogICAgX19z
ZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOwogIH0KICBpZiAoX19zZWNvbmRD
aGlsZCA9PSBfX2xlbikgewogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0
ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7CiAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQg
LSAxOwogIH0KICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJbmRleCwg
X192YWx1ZSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4K
aW5saW5lIHZvaWQKX19wb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0
b3IgX19yZXN1bHQsIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXAsCiAgICAgICAgICAgX0Rp
c3RhbmNlKikKewogICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIF9fYWRqdXN0X2hlYXAoX19maXJz
dCwgX0Rpc3RhbmNlKDApLCBfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksCiAgICAgICAgICAg
ICAgICBfX3ZhbHVlLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZApfX3BvcF9oZWFw
X2F1eChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX1RwKiwgX0NvbXBhcmUgX19jb21wKQp7CiAgX19wb3Bf
aGVhcChfX2ZpcnN0LCBfX2xhc3QgLSAxLCBfX2xhc3QgLSAxLCBfVHAoKihfX2xhc3QgLSAxKSks
IF9fY29tcCwKICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUg
dm9pZApwb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX19wb3BfaGVhcF9hdXgoX19maXJzdCwgX19sYXN0
LCBfX3ZhbHVlX3R5cGUoX19maXJzdCksIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkCl9fbWFr
ZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICBfUmFuZG9t
QWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfVHAqLCBfRGlzdGFuY2UqKQp7CiAgaWYgKF9fbGFzdCAt
IF9fZmlyc3QgPCAyKSByZXR1cm47CiAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJz
dDsKICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19sZW4gLSAyKS8yOwoKICB3aGlsZSAodHJ1ZSkg
ewogICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfX3BhcmVudCwgX19sZW4sIF9UcCgqKF9fZmly
c3QgKyBfX3BhcmVudCkpKTsKICAgIGlmIChfX3BhcmVudCA9PSAwKSByZXR1cm47CiAgICBfX3Bh
cmVudC0tOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KaW5s
aW5lIHZvaWQKbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9t
QWNjZXNzSXRlcmF0b3IgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwoKCiAgX19tYWtlX2hlYXAoX19maXJzdCwgX19sYXN0LAogICAgICAg
ICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmUs
CiAgICAgICAgICBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4Kdm9pZApfX21ha2VfaGVhcChf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFz
dCwKICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wLCBfVHAqLCBfRGlzdGFuY2UqKQp7CiAgaWYg
KF9fbGFzdCAtIF9fZmlyc3QgPCAyKSByZXR1cm47CiAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0
IC0gX19maXJzdDsKICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19sZW4gLSAyKS8yOwoKICB3aGls
ZSAodHJ1ZSkgewogICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfX3BhcmVudCwgX19sZW4sIF9U
cCgqKF9fZmlyc3QgKyBfX3BhcmVudCkpLAogICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAg
aWYgKF9fcGFyZW50ID09IDApIHJldHVybjsKICAgIF9fcGFyZW50LS07CiAgfQp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZv
aWQKbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX19tYWtlX2hlYXAoX19maXJzdCwgX19sYXN0LCBf
X2NvbXAsCiAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLCBfX2Rpc3RhbmNlX3R5
cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgp2
b2lkIHNvcnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yIF9fbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCgogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkKICAgIHBvcF9oZWFw
KF9fZmlyc3QsIF9fbGFzdC0tKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy
YXRvciwgY2xhc3MgX0NvbXBhcmU+CnZvaWQKc29ydF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciBfX2ZpcnN0LAogICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBh
cmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgd2hpbGUg
KF9fbGFzdCAtIF9fZmlyc3QgPiAxKQogICAgcG9wX2hlYXAoX19maXJzdCwgX19sYXN0LS0sIF9f
Y29tcCk7Cn0KCn0KIyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdv
LmgiIDIgMwoKCgpuYW1lc3BhY2Ugc3RkCnsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5l
IGNvbnN0IF9UcCYgX19tZWRpYW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBjb25z
dCBfVHAmIF9fYykKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CiAgaWYgKF9fYSA8IF9fYikKICAgIGlmIChfX2IgPCBfX2Mp
CiAgICAgIHJldHVybiBfX2I7CiAgICBlbHNlIGlmIChfX2EgPCBfX2MpCiAgICAgIHJldHVybiBf
X2M7CiAgICBlbHNlCiAgICAgIHJldHVybiBfX2E7CiAgZWxzZSBpZiAoX19hIDwgX19jKQogICAg
cmV0dXJuIF9fYTsKICBlbHNlIGlmIChfX2IgPCBfX2MpCiAgICByZXR1cm4gX19jOwogIGVsc2UK
ICAgIHJldHVybiBfX2I7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgpp
bmxpbmUgY29uc3QgX1RwJgpfX21lZGlhbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2Is
IGNvbnN0IF9UcCYgX19jLCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CiAgaWYgKF9fY29tcChfX2EsIF9fYikpCiAgICBpZiAoX19jb21wKF9fYiwgX19jKSkKICAg
ICAgcmV0dXJuIF9fYjsKICAgIGVsc2UgaWYgKF9fY29tcChfX2EsIF9fYykpCiAgICAgIHJldHVy
biBfX2M7CiAgICBlbHNlCiAgICAgIHJldHVybiBfX2E7CiAgZWxzZSBpZiAoX19jb21wKF9fYSwg
X19jKSkKICAgIHJldHVybiBfX2E7CiAgZWxzZSBpZiAoX19jb21wKF9fYiwgX19jKSkKICAgIHJl
dHVybiBfX2M7CiAgZWxzZQogICAgcmV0dXJuIF9fYjsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyLCBjbGFzcyBfRnVuY3Rpb24+Cl9GdW5jdGlvbiBmb3JfZWFjaChfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfRnVuY3Rpb24gX19mKQp7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIGZv
ciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIF9fZigqX19maXJzdCk7CiAg
cmV0dXJuIF9fZjsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1RwPgpp
bmxpbmUgX0lucHV0SXRlciBmaW5kKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAg
ICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xh
c3QgJiYgISgqX19maXJzdCA9PSBfX3ZhbCkpCiAgICArK19fZmlyc3Q7CiAgcmV0dXJuIF9fZmly
c3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgppbmxp
bmUgX0lucHV0SXRlciBmaW5kX2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgd2hpbGUgKF9fZmlyc3Qg
IT0gX19sYXN0ICYmICFfX3ByZWQoKl9fZmlyc3QpKQogICAgKytfX2ZpcnN0OwogIHJldHVybiBf
X2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcD4K
X1JhbmRvbUFjY2Vzc0l0ZXIgZmluZChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9t
QWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3Zh
bCwKICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKewog
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2Vf
dHlwZSBfX3RyaXBfY291bnQKICAgID0gKF9fbGFzdCAtIF9fZmlyc3QpID4+IDI7CgogIGZvciAo
IDsgX190cmlwX2NvdW50ID4gMCA7IC0tX190cmlwX2NvdW50KSB7CiAgICBpZiAoKl9fZmlyc3Qg
PT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwoKICAgIGlmICgqX19maXJz
dCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CgogICAgaWYgKCpfX2Zp
cnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKCiAgICBpZiAoKl9f
Zmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIH0KCiAgc3dp
dGNoKF9fbGFzdCAtIF9fZmlyc3QpIHsKICBjYXNlIDM6CiAgICBpZiAoKl9fZmlyc3QgPT0gX192
YWwpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIGNhc2UgMjoKICAgIGlmICgqX19m
aXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgY2FzZSAxOgog
ICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsK
ICBjYXNlIDA6CiAgZGVmYXVsdDoKICAgIHJldHVybiBfX2xhc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+Cl9SYW5kb21BY2Nlc3NJ
dGVyIGZpbmRfaWYoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQp7CiAgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBl
IF9fdHJpcF9jb3VudAogICAgPSAoX19sYXN0IC0gX19maXJzdCkgPj4gMjsKCiAgZm9yICggOyBf
X3RyaXBfY291bnQgPiAwIDsgLS1fX3RyaXBfY291bnQpIHsKICAgIGlmIChfX3ByZWQoKl9fZmly
c3QpKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKCiAgICBpZiAoX19wcmVkKCpfX2Zp
cnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CgogICAgaWYgKF9fcHJlZCgqX19m
aXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwoKICAgIGlmIChfX3ByZWQoKl9f
Zmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKICB9CgogIHN3aXRjaChfX2xh
c3QgLSBfX2ZpcnN0KSB7CiAgY2FzZSAzOgogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVy
biBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIGNhc2UgMjoKICAgIGlmIChfX3ByZWQoKl9fZmly
c3QpKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKICBjYXNlIDE6CiAgICBpZiAoX19w
cmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgY2FzZSAwOgog
IGRlZmF1bHQ6CiAgICByZXR1cm4gX19sYXN0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIF9JbnB1dEl0ZXIgZmluZChfSW5wdXRJdGVyIF9fZmly
c3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYg
X192YWwpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIHJldHVybiBmaW5kKF9fZmlyc3QsIF9f
bGFzdCwgX192YWwsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIF9JbnB1dEl0ZXIgZmlu
ZF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIHJldHVy
biBmaW5kX2lmKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9f
Zmlyc3QpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPgpfRm9yd2FyZEl0ZXIg
YWRqYWNlbnRfZmluZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkK
ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJu
IF9fbGFzdDsKICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKICB3aGlsZSgrK19fbmV4
dCAhPSBfX2xhc3QpIHsKICAgIGlmICgqX19maXJzdCA9PSAqX19uZXh0KQogICAgICByZXR1cm4g
X19maXJzdDsKICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgfQogIHJldHVybiBfX2xhc3Q7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9Gb3J3
YXJkSXRlciBhZGphY2VudF9maW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmlu
YXJ5X3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp
CiAgICByZXR1cm4gX19sYXN0OwogIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogIHdo
aWxlKCsrX19uZXh0ICE9IF9fbGFzdCkgewogICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3Qs
ICpfX25leHQpKQogICAgICByZXR1cm4gX19maXJzdDsKICAgIF9fZmlyc3QgPSBfX25leHQ7CiAg
fQogIHJldHVybiBfX2xhc3Q7Cn0KCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj
bGFzcyBfVHAsIGNsYXNzIF9TaXplPgp2b2lkIGNvdW50KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu
cHV0SXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSwKICAgICAgICAgICBfU2l6ZSYgX19u
KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr
X19maXJzdCkKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbHVlKQogICAgICArK19fbjsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUsIGNsYXNzIF9TaXplPgp2
b2lkIGNvdW50X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9QcmVk
aWNhdGUgX19wcmVkLAogICAgICAgICAgICAgIF9TaXplJiBfX24pCnsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog
IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlmIChfX3ByZWQoKl9f
Zmlyc3QpKQogICAgICArK19fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz
IF9UcD4KdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5
cGUKY291bnQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgY29uc3QgX1Rw
JiBfX3ZhbHVlKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgZm9yICggOyBfX2Zp
cnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsdWUpCiAg
ICAgICsrX19uOwogIHJldHVybiBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj
bGFzcyBfUHJlZGljYXRlPgp0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRp
ZmZlcmVuY2VfdHlwZQpjb3VudF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
YXN0LCBfUHJlZGljYXRlIF9fcHJlZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICBmb3IgKCA7
IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkK
ICAgICAgKytfX247CiAgcmV0dXJuIF9fbjsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
SXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+Cl9Gb3J3YXJkSXRlcjEgc2VhcmNoKF9Gb3J3YXJk
SXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAg
ICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyKQp7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKCiAgaWYgKF9fZmlyc3QxID09IF9fbGFz
dDEgfHwgX19maXJzdDIgPT0gX19sYXN0MikKICAgIHJldHVybiBfX2ZpcnN0MTsKCgogIF9Gb3J3
YXJkSXRlcjIgX190bXAoX19maXJzdDIpOwogICsrX190bXA7CiAgaWYgKF9fdG1wID09IF9fbGFz
dDIpCiAgICByZXR1cm4gZmluZChfX2ZpcnN0MSwgX19sYXN0MSwgKl9fZmlyc3QyKTsKCgoKICBf
Rm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsKCiAgX19wMSA9IF9fZmlyc3QyOyArK19fcDE7CgogIF9G
b3J3YXJkSXRlcjEgX19jdXJyZW50ID0gX19maXJzdDE7CgogIHdoaWxlIChfX2ZpcnN0MSAhPSBf
X2xhc3QxKSB7CiAgICBfX2ZpcnN0MSA9IGZpbmQoX19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0
Mik7CiAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgcmV0dXJuIF9fbGFzdDE7Cgog
ICAgX19wID0gX19wMTsKICAgIF9fY3VycmVudCA9IF9fZmlyc3QxOwogICAgaWYgKCsrX19jdXJy
ZW50ID09IF9fbGFzdDEpCiAgICAgIHJldHVybiBfX2xhc3QxOwoKICAgIHdoaWxlICgqX19jdXJy
ZW50ID09ICpfX3ApIHsKICAgICAgaWYgKCsrX19wID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJu
IF9fZmlyc3QxOwogICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkKICAgICAgICByZXR1
cm4gX19sYXN0MTsKICAgIH0KCiAgICArK19fZmlyc3QxOwogIH0KICByZXR1cm4gX19maXJzdDE7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyLCBj
bGFzcyBfQmluYXJ5UHJlZD4KX0ZvcndhcmRJdGVyMSBzZWFyY2goX0ZvcndhcmRJdGVyMSBfX2Zp
cnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICBfRm9yd2Fy
ZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAg
ICAgIF9CaW5hcnlQcmVkIF9fcHJlZGljYXRlKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCgoKCiAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEgfHwgX19maXJzdDIgPT0gX19s
YXN0MikKICAgIHJldHVybiBfX2ZpcnN0MTsKCgogIF9Gb3J3YXJkSXRlcjIgX190bXAoX19maXJz
dDIpOwogICsrX190bXA7CiAgaWYgKF9fdG1wID09IF9fbGFzdDIpIHsKICAgIHdoaWxlIChfX2Zp
cnN0MSAhPSBfX2xhc3QxICYmICFfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAg
ICAgICsrX19maXJzdDE7CiAgICByZXR1cm4gX19maXJzdDE7CiAgfQoKCgogIF9Gb3J3YXJkSXRl
cjIgX19wMSwgX19wOwoKICBfX3AxID0gX19maXJzdDI7ICsrX19wMTsKCiAgX0ZvcndhcmRJdGVy
MSBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsK
ICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7CiAgICAgIGlmIChfX3ByZWRpY2F0ZSgq
X19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgYnJlYWs7CiAgICAgICsrX19maXJzdDE7CiAg
ICB9CiAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiAhX19wcmVkaWNhdGUoKl9fZmly
c3QxLCAqX19maXJzdDIpKQogICAgICArK19fZmlyc3QxOwogICAgaWYgKF9fZmlyc3QxID09IF9f
bGFzdDEpCiAgICAgIHJldHVybiBfX2xhc3QxOwoKICAgIF9fcCA9IF9fcDE7CiAgICBfX2N1cnJl
bnQgPSBfX2ZpcnN0MTsKICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKSByZXR1cm4gX19s
YXN0MTsKCiAgICB3aGlsZSAoX19wcmVkaWNhdGUoKl9fY3VycmVudCwgKl9fcCkpIHsKICAgICAg
aWYgKCsrX19wID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICBpZiAo
KytfX2N1cnJlbnQgPT0gX19sYXN0MSkKICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgIH0KCiAg
ICArK19fZmlyc3QxOwogIH0KICByZXR1cm4gX19maXJzdDE7Cn0KCgoKdGVtcGxhdGUgPGNsYXNz
IF9Gb3J3YXJkSXRlciwgY2xhc3MgX0ludGVnZXIsIGNsYXNzIF9UcD4KX0ZvcndhcmRJdGVyIHNl
YXJjaF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgX0ludGVnZXIgX19jb3VudCwgY29uc3QgX1RwJiBfX3ZhbCkKewoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKICBpZiAoX19jb3VudCA8PSAwKQogICAgcmV0dXJuIF9f
Zmlyc3Q7CiAgZWxzZSB7CiAgICBfX2ZpcnN0ID0gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFs
KTsKICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICBfSW50ZWdlciBfX24gPSBf
X2NvdW50IC0gMTsKICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19p
OwogICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCAmJiBfX24gIT0gMCAmJiAqX19pID09IF9fdmFs
KSB7CiAgICAgICAgKytfX2k7CiAgICAgICAgLS1fX247CiAgICAgIH0KICAgICAgaWYgKF9fbiA9
PSAwKQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlCiAgICAgICAgX19maXJzdCA9
IGZpbmQoX19pLCBfX2xhc3QsIF9fdmFsKTsKICAgIH0KICAgIHJldHVybiBfX2xhc3Q7CiAgfQp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfSW50ZWdlciwgY2xhc3MgX1Rw
LCBjbGFzcyBfQmluYXJ5UHJlZD4KX0ZvcndhcmRJdGVyIHNlYXJjaF9uKF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0ludGVn
ZXIgX19jb3VudCwgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgIF9CaW5h
cnlQcmVkIF9fYmluYXJ5X3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChf
X2NvdW50IDw9IDApCiAgICByZXR1cm4gX19maXJzdDsKICBlbHNlIHsKICAgIHdoaWxlIChfX2Zp
cnN0ICE9IF9fbGFzdCkgewogICAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19maXJzdCwgX192YWwp
KQogICAgICAgIGJyZWFrOwogICAgICArK19fZmlyc3Q7CiAgICB9CiAgICB3aGlsZSAoX19maXJz
dCAhPSBfX2xhc3QpIHsKICAgICAgX0ludGVnZXIgX19uID0gX19jb3VudCAtIDE7CiAgICAgIF9G
b3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAgd2hpbGUgKF9faSAh
PSBfX2xhc3QgJiYgX19uICE9IDAgJiYgX19iaW5hcnlfcHJlZCgqX19pLCBfX3ZhbCkpIHsKICAg
ICAgICArK19faTsKICAgICAgICAtLV9fbjsKICAgICAgfQogICAgICBpZiAoX19uID09IDApCiAg
ICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIGVsc2UgewogICAgICAgIHdoaWxlIChfX2kgIT0g
X19sYXN0KSB7CiAgICAgICAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19pLCBfX3ZhbCkpCiAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgKytfX2k7CiAgICAgICAgfQogICAgICAgIF9fZmlyc3Qg
PSBfX2k7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBfX2xhc3Q7CiAgfQp9CgoKCnRlbXBsYXRl
IDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgpfRm9yd2FyZEl0ZXIy
IHN3YXBfcmFuZ2VzKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0
MSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyKQp7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
CgoKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIp
CiAgICBpdGVyX3N3YXAoX19maXJzdDEsIF9fZmlyc3QyKTsKICByZXR1cm4gX19maXJzdDI7Cn0K
CgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBf
VW5hcnlPcGVyYXRpb24+Cl9PdXRwdXRJdGVyIHRyYW5zZm9ybShfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19y
ZXN1bHQsIF9VbmFyeU9wZXJhdGlvbiBfX3VuYXJ5X29wKQp7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoKCgogIGZv
ciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKICAgICpfX3Jl
c3VsdCA9IF9fdW5hcnlfb3AoKl9fZmlyc3QpOwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0
ZXIsCiAgICAgICAgICBjbGFzcyBfQmluYXJ5T3BlcmF0aW9uPgpfT3V0cHV0SXRlciB0cmFuc2Zv
cm0oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg
ICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAg
ICAgICAgICAgICAgICAgICAgICBfQmluYXJ5T3BlcmF0aW9uIF9fYmluYXJ5X29wKQp7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CgoKCgoKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19f
Zmlyc3QxLCArK19fZmlyc3QyLCArK19fcmVzdWx0KQogICAgKl9fcmVzdWx0ID0gX19iaW5hcnlf
b3AoKl9fZmlyc3QxLCAqX19maXJzdDIpOwogIHJldHVybiBfX3Jlc3VsdDsKfQoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CnZvaWQgcmVwbGFjZShfRm9yd2FyZEl0
ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgIGNvbnN0IF9UcCYg
X19vbGRfdmFsdWUsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCnsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2Zp
cnN0KQogICAgaWYgKCpfX2ZpcnN0ID09IF9fb2xkX3ZhbHVlKQogICAgICAqX19maXJzdCA9IF9f
bmV3X3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGlj
YXRlLCBjbGFzcyBfVHA+CnZvaWQgcmVwbGFjZV9pZihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv
cndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBjb25z
dCBfVHAmIF9fbmV3X3ZhbHVlKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK
ICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAoX19wcmVkKCpf
X2ZpcnN0KSkKICAgICAgKl9fZmlyc3QgPSBfX25ld192YWx1ZTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIHJl
cGxhY2VfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBfVHAmIF9fb2xkX3ZhbHVlLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQp7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytf
X2ZpcnN0LCArK19fcmVzdWx0KQogICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QgPT0gX19vbGRfdmFs
dWUgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRl
LCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIHJlcGxhY2VfY29weV9pZihfSW5wdXRJdGVyIF9fZmly
c3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1
dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9f
cHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkKewoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBmb3Ig
KCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAqX19yZXN1
bHQgPSBfX3ByZWQoKl9fZmlyc3QpID8gX19uZXdfdmFsdWUgOiAqX19maXJzdDsKICByZXR1cm4g
X19yZXN1bHQ7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0dlbmVy
YXRvcj4Kdm9pZCBnZW5lcmF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f
bGFzdCwgX0dlbmVyYXRvciBfX2dlbikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGZvciAoIDsg
X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICpfX2ZpcnN0ID0gX19nZW4oKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0dlbmVyYXRv
cj4KX091dHB1dEl0ZXIgZ2VuZXJhdGVfbihfT3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24s
IF9HZW5lcmF0b3IgX19nZW4pCnsKCgoKCgoKICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19f
Zmlyc3QpCiAgICAqX19maXJzdCA9IF9fZ2VuKCk7CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCgoKdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfVHA+Cl9P
dXRwdXRJdGVyIHJlbW92ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBjb25zdCBf
VHAmIF9fdmFsdWUpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBmb3IgKCA7IF9fZmlyc3Qg
IT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAoISgqX19maXJzdCA9PSBfX3ZhbHVlKSkgewog
ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICByZXR1
cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0
SXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KX091dHB1dEl0ZXIgcmVtb3ZlX2NvcHlfaWYoX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9QcmVkaWNhdGUgX19wcmVkKQp7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlmICgh
X19wcmVkKCpfX2ZpcnN0KSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgKytf
X3Jlc3VsdDsKICAgIH0KICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9y
d2FyZEl0ZXIsIGNsYXNzIF9UcD4KX0ZvcndhcmRJdGVyIHJlbW92ZShfRm9yd2FyZEl0ZXIgX19m
aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAm
IF9fdmFsdWUpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX19m
aXJzdCA9IGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbHVlKTsKICBfRm9yd2FyZEl0ZXIgX19p
ID0gX19maXJzdDsKICByZXR1cm4gX19maXJzdCA9PSBfX2xhc3QgPyBfX2ZpcnN0CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDogcmVtb3ZlX2NvcHkoKytfX2ksIF9fbGFzdCwgX19maXJzdCwg
X192YWx1ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNh
dGU+Cl9Gb3J3YXJkSXRlciByZW1vdmVfaWYoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCnsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9fZmlyc3QgPSBmaW5kX2lmKF9fZmlyc3Qs
IF9fbGFzdCwgX19wcmVkKTsKICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICByZXR1cm4g
X19maXJzdCA9PSBfX2xhc3QgPyBfX2ZpcnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDog
cmVtb3ZlX2NvcHlfaWYoKytfX2ksIF9fbGFzdCwgX19maXJzdCwgX19wcmVkKTsKfQoKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9UcD4KX091
dHB1dEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfVHAq
KQp7CgogIF9UcCBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgKl9fcmVzdWx0ID0gX192YWx1ZTsKICB3
aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlmICghKF9fdmFsdWUgPT0gKl9fZmlyc3Qp
KSB7CiAgICAgIF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAgKisrX19yZXN1bHQgPSBfX3ZhbHVl
OwogICAgfQogIHJldHVybiArK19fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
ciwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBfX3VuaXF1ZV9jb3B5KF9J
bnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRwdXRfaXRlcmF0b3JfdGFnKQp7CgogIHJldHVybiBfX3VuaXF1ZV9jb3B5
KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRl
ciBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwgZm9yd2FyZF9p
dGVyYXRvcl90YWcpCnsKCiAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgd2hpbGUgKCsrX19maXJz
dCAhPSBfX2xhc3QpCiAgICBpZiAoISgqX19yZXN1bHQgPT0gKl9fZmlyc3QpKQogICAgICAqKytf
X3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHJldHVybiArK19fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciB1bmlx
dWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgcmV0dXJu
IF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAg
ICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZSwK
ICAgICAgICAgIGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9P
dXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVk
aWNhdGUgX19iaW5hcnlfcHJlZCwgX1RwKikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
CiAgX1RwIF9fdmFsdWUgPSAqX19maXJzdDsKICAqX19yZXN1bHQgPSBfX3ZhbHVlOwogIHdoaWxl
ICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgaWYgKCFfX2JpbmFyeV9wcmVkKF9fdmFsdWUsICpf
X2ZpcnN0KSkgewogICAgICBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgICorK19fcmVzdWx0ID0g
X192YWx1ZTsKICAgIH0KICByZXR1cm4gKytfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgppbmxp
bmUgX091dHB1dEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf
X3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0
ZSBfX2JpbmFyeV9wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRf
aXRlcmF0b3JfdGFnKQp7CgogIHJldHVybiBfX3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwg
X19yZXN1bHQsIF9fYmluYXJ5X3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90
eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3
YXJkSXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KX0ZvcndhcmRJdGVyIF9fdW5pcXVlX2Nv
cHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogICpfX3Jlc3VsdCA9ICpfX2Zp
cnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgaWYgKCFfX2JpbmFyeV9wcmVk
KCpfX3Jlc3VsdCwgKl9fZmlyc3QpKSAqKytfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHJldHVybiAr
K19fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0
ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+CmlubGluZSBfT3V0cHV0SXRlciB1bmlxdWVfY29w
eShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCnsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX3Jlc3VsdDsKICByZXR1cm4gX191
bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX2JpbmFyeV9wcmVkLAogICAg
ICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19yZXN1bHQpKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0ZvcndhcmRJdGVyIHVuaXF1ZShfRm9yd2FyZEl0
ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwoKCiAgX19maXJzdCA9IGFkamFjZW50X2ZpbmQoX19maXJzdCwgX19sYXN0KTsKICByZXR1
cm4gdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KX0ZvcndhcmRJdGVyIHVu
aXF1ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCnsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKCgoKICBfX2ZpcnN0ID0gYWRqYWNlbnRfZmluZChfX2ZpcnN0LCBfX2xh
c3QsIF9fYmluYXJ5X3ByZWQpOwogIHJldHVybiB1bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3Qs
IF9fZmlyc3QsIF9fYmluYXJ5X3ByZWQpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rp
b25hbEl0ZXI+CnZvaWQgX19yZXZlcnNlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlk
aXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJh
dG9yX3RhZykgewogIHdoaWxlICh0cnVlKQogICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0IHx8IF9f
Zmlyc3QgPT0gLS1fX2xhc3QpCiAgICAgIHJldHVybjsKICAgIGVsc2UKICAgICAgaXRlcl9zd2Fw
KF9fZmlyc3QrKywgX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy
Pgp2b2lkIF9fcmV2ZXJzZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNz
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7
CiAgd2hpbGUgKF9fZmlyc3QgPCBfX2xhc3QpCiAgICBpdGVyX3N3YXAoX19maXJzdCsrLCAtLV9f
bGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXI+CmlubGluZSB2b2lk
IHJldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBf
X2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIF9fcmV2ZXJzZShfX2Zp
cnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4KX091dHB1dEl0ZXIg
cmV2ZXJzZV9jb3B5KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAtLV9fbGFzdDsKICAg
ICpfX3Jlc3VsdCA9ICpfX2xhc3Q7CiAgICArK19fcmVzdWx0OwogIH0KICByZXR1cm4gX19yZXN1
bHQ7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9FdWNsaWRlYW5SaW5nRWxlbWVudD4KX0V1Y2xpZGVh
blJpbmdFbGVtZW50IF9fZ2NkKF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX20sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX19uKQp7CiAgd2hpbGUgKF9f
biAhPSAwKSB7CiAgICBfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX190ID0gX19tICUgX19uOwogICAg
X19tID0gX19uOwogICAgX19uID0gX190OwogIH0KICByZXR1cm4gX19tOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX3JvdGF0
ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRl
ciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UqLAogICAgICAgICAgICAgICAgICAgICAgZm9y
d2FyZF9pdGVyYXRvcl90YWcpCnsKICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkKICAgIHJldHVy
biBfX2xhc3Q7CiAgaWYgKF9fbGFzdCA9PSBfX21pZGRsZSkKICAgIHJldHVybiBfX2ZpcnN0OwoK
ICBfRm9yd2FyZEl0ZXIgX19maXJzdDIgPSBfX21pZGRsZTsKICBkbyB7CiAgICBzd2FwKCpfX2Zp
cnN0KyssICpfX2ZpcnN0MisrKTsKICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKQogICAgICBf
X21pZGRsZSA9IF9fZmlyc3QyOwogIH0gd2hpbGUgKF9fZmlyc3QyICE9IF9fbGFzdCk7CgogIF9G
b3J3YXJkSXRlciBfX25ld19taWRkbGUgPSBfX2ZpcnN0OwoKICBfX2ZpcnN0MiA9IF9fbWlkZGxl
OwoKICB3aGlsZSAoX19maXJzdDIgIT0gX19sYXN0KSB7CiAgICBzd2FwICgqX19maXJzdCsrLCAq
X19maXJzdDIrKyk7CiAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkKICAgICAgX19taWRkbGUg
PSBfX2ZpcnN0MjsKICAgIGVsc2UgaWYgKF9fZmlyc3QyID09IF9fbGFzdCkKICAgICAgX19maXJz
dDIgPSBfX21pZGRsZTsKICB9CgogIHJldHVybiBfX25ld19taWRkbGU7Cn0KCgp0ZW1wbGF0ZSA8
Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2U+Cl9CaWRpcmVjdGlvbmFs
SXRlciBfX3JvdGF0ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfRGlzdGFuY2UqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaXJl
Y3Rpb25hbF9pdGVyYXRvcl90YWcpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK
ICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkKICAgIHJldHVybiBfX2xhc3Q7CiAgaWYgKF9fbGFz
dCA9PSBfX21pZGRsZSkKICAgIHJldHVybiBfX2ZpcnN0OwoKICBfX3JldmVyc2UoX19maXJzdCwg
X19taWRkbGUsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwogIF9fcmV2ZXJzZShfX21p
ZGRsZSwgX19sYXN0LCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKCiAgd2hpbGUgKF9f
Zmlyc3QgIT0gX19taWRkbGUgJiYgX19taWRkbGUgIT0gX19sYXN0KQogICAgc3dhcCAoKl9fZmly
c3QrKywgKi0tX19sYXN0KTsKCiAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpIHsKICAgIF9fcmV2
ZXJzZShfX21pZGRsZSwgX19sYXN0LCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICAg
IHJldHVybiBfX2xhc3Q7CiAgfQogIGVsc2UgewogICAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbWlk
ZGxlLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICAgIHJldHVybiBfX2ZpcnN0Owog
IH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2Us
IGNsYXNzIF9UcD4KX1JhbmRvbUFjY2Vzc0l0ZXIgX19yb3RhdGUoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19t
aWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlICosIF9UcCAqKQp7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfRGlzdGFuY2UgX19uID0gX19sYXN0IC0gX19m
aXJzdDsKICBfRGlzdGFuY2UgX19rID0gX19taWRkbGUgLSBfX2ZpcnN0OwogIF9EaXN0YW5jZSBf
X2wgPSBfX24gLSBfX2s7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0ICsg
KF9fbGFzdCAtIF9fbWlkZGxlKTsKCiAgaWYgKF9fayA9PSAwKQogICAgcmV0dXJuIF9fbGFzdDsK
CiAgZWxzZSBpZiAoX19rID09IF9fbCkgewogICAgc3dhcF9yYW5nZXMoX19maXJzdCwgX19taWRk
bGUsIF9fbWlkZGxlKTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9CgogIF9EaXN0YW5jZSBfX2Qg
PSBfX2djZChfX24sIF9fayk7CgogIGZvciAoX0Rpc3RhbmNlIF9faSA9IDA7IF9faSA8IF9fZDsg
X19pKyspIHsKICAgIF9UcCBfX3RtcCA9ICpfX2ZpcnN0OwogICAgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19wID0gX19maXJzdDsKCiAgICBpZiAoX19rIDwgX19sKSB7CiAgICAgIGZvciAoX0Rpc3RhbmNl
IF9faiA9IDA7IF9faiA8IF9fbC9fX2Q7IF9faisrKSB7CiAgICAgICAgaWYgKF9fcCA+IF9fZmly
c3QgKyBfX2wpIHsKICAgICAgICAgICpfX3AgPSAqKF9fcCAtIF9fbCk7CiAgICAgICAgICBfX3Ag
LT0gX19sOwogICAgICAgIH0KCiAgICAgICAgKl9fcCA9ICooX19wICsgX19rKTsKICAgICAgICBf
X3AgKz0gX19rOwogICAgICB9CiAgICB9CgogICAgZWxzZSB7CiAgICAgIGZvciAoX0Rpc3RhbmNl
IF9faiA9IDA7IF9faiA8IF9fay9fX2QgLSAxOyBfX2ogKyspIHsKICAgICAgICBpZiAoX19wIDwg
X19sYXN0IC0gX19rKSB7CiAgICAgICAgICAqX19wID0gKihfX3AgKyBfX2spOwogICAgICAgICAg
X19wICs9IF9fazsKICAgICAgICB9CgogICAgICAgICpfX3AgPSAqIChfX3AgLSBfX2wpOwogICAg
ICAgIF9fcCAtPSBfX2w7CiAgICAgIH0KICAgIH0KCiAgICAqX19wID0gX190bXA7CiAgICArK19f
Zmlyc3Q7CiAgfQoKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
ZEl0ZXI+CmlubGluZSBfRm9yd2FyZEl0ZXIgcm90YXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf
Rm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJk
SXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIHJldHVybiBfX3JvdGF0ZShf
X2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5
cGUoX19maXJzdCksCiAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJz
dCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4K
X091dHB1dEl0ZXIgcm90YXRlX2NvcHkoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl
ciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwg
X091dHB1dEl0ZXIgX19yZXN1bHQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICByZXR1cm4gY29w
eShfX2ZpcnN0LCBfX21pZGRsZSwgY29weShfX21pZGRsZSwgX19sYXN0LCBfX3Jlc3VsdCkpOwp9
CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX0Rpc3RhbmNlIF9fcmFuZG9t
X251bWJlcihfRGlzdGFuY2UgX19uKSB7CgogIHJldHVybiBscmFuZDQ4KCkgJSBfX247CgoKCn0K
CgoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgdm9pZCByYW5kb21f
c2h1ZmZsZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwogIGZvciAoX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgaXRl
cl9zd2FwKF9faSwgX19maXJzdCArIF9fcmFuZG9tX251bWJlcigoX19pIC0gX19maXJzdCkgKyAx
KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1JhbmRvbU51
bWJlckdlbmVyYXRvcj4Kdm9pZCByYW5kb21fc2h1ZmZsZShfUmFuZG9tQWNjZXNzSXRlciBfX2Zp
cnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX1JhbmRv
bU51bWJlckdlbmVyYXRvciYgX19yYW5kKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKICBmb3IgKF9SYW5kb21BY2Nlc3NJ
dGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgIGl0ZXJfc3dh
cChfX2ksIF9fZmlyc3QgKyBfX3JhbmQoKF9faSAtIF9fZmlyc3QpICsgMSkpOwp9CgoKCnRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFu
Y2U+Cl9PdXRwdXRJdGVyIHJhbmRvbV9zYW1wbGVfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv
cndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVy
IF9fb3V0LCBjb25zdCBfRGlzdGFuY2UgX19uKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX0Rp
c3RhbmNlIF9fcmVtYWluaW5nID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVt
YWluaW5nKTsKICBfRGlzdGFuY2UgX19tID0gbWluKF9fbiwgX19yZW1haW5pbmcpOwoKICB3aGls
ZSAoX19tID4gMCkgewogICAgaWYgKF9fcmFuZG9tX251bWJlcihfX3JlbWFpbmluZykgPCBfX20p
IHsKICAgICAgKl9fb3V0ID0gKl9fZmlyc3Q7CiAgICAgICsrX19vdXQ7CiAgICAgIC0tX19tOwog
ICAgfQoKICAgIC0tX19yZW1haW5pbmc7CiAgICArK19fZmlyc3Q7CiAgfQogIHJldHVybiBfX291
dDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNs
YXNzIF9EaXN0YW5jZSwKICAgICAgICAgIGNsYXNzIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+Cl9P
dXRwdXRJdGVyIHJhbmRvbV9zYW1wbGVfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fb3V0
LCBjb25zdCBfRGlzdGFuY2UgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRv
bU51bWJlckdlbmVyYXRvciYgX19yYW5kKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX0Rpc3Rh
bmNlIF9fcmVtYWluaW5nID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVtYWlu
aW5nKTsKICBfRGlzdGFuY2UgX19tID0gbWluKF9fbiwgX19yZW1haW5pbmcpOwoKICB3aGlsZSAo
X19tID4gMCkgewogICAgaWYgKF9fcmFuZChfX3JlbWFpbmluZykgPCBfX20pIHsKICAgICAgKl9f
b3V0ID0gKl9fZmlyc3Q7CiAgICAgICsrX19vdXQ7CiAgICAgIC0tX19tOwogICAgfQoKICAgIC0t
X19yZW1haW5pbmc7CiAgICArK19fZmlyc3Q7CiAgfQogIHJldHVybiBfX291dDsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlz
dGFuY2U+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fcmFuZG9tX3NhbXBsZShfSW5wdXRJdGVyIF9fZmly
c3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBfRGlzdGFuY2UgX19uKQp7CiAgX0Rpc3RhbmNlIF9fbSA9IDA7CiAgX0Rpc3RhbmNl
IF9fdCA9IF9fbjsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fbSA8IF9fbjsgKytf
X20sICsrX19maXJzdCkKICAgIF9fb3V0W19fbV0gPSAqX19maXJzdDsKCiAgd2hpbGUgKF9fZmly
c3QgIT0gX19sYXN0KSB7CiAgICArK19fdDsKICAgIF9EaXN0YW5jZSBfX00gPSBfX3JhbmRvbV9u
dW1iZXIoX190KTsKICAgIGlmIChfX00gPCBfX24pCiAgICAgIF9fb3V0W19fTV0gPSAqX19maXJz
dDsKICAgICsrX19maXJzdDsKICB9CgogIHJldHVybiBfX291dCArIF9fbTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLAogICAgICAgICAgY2xh
c3MgX1JhbmRvbU51bWJlckdlbmVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgpfUmFuZG9tQWNjZXNz
SXRlciBfX3JhbmRvbV9zYW1wbGUoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
b3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbU51bWJlckdlbmVy
YXRvciYgX19yYW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0Rp
c3RhbmNlIF9fbikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwoKCiAgX0Rpc3RhbmNlIF9fbSA9IDA7CiAgX0Rpc3RhbmNlIF9fdCA9IF9f
bjsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fbSA8IF9fbjsgKytfX20sICsrX19m
aXJzdCkKICAgIF9fb3V0W19fbV0gPSAqX19maXJzdDsKCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19s
YXN0KSB7CiAgICArK19fdDsKICAgIF9EaXN0YW5jZSBfX00gPSBfX3JhbmQoX190KTsKICAgIGlm
IChfX00gPCBfX24pCiAgICAgIF9fb3V0W19fTV0gPSAqX19maXJzdDsKICAgICsrX19maXJzdDsK
ICB9CgogIHJldHVybiBfX291dCArIF9fbTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIs
IGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXIKcmFuZG9t
X3NhbXBsZShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX291
dF9sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICByZXR1
cm4gX19yYW5kb21fc2FtcGxlKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fb3V0X2ZpcnN0LCBfX291dF9sYXN0IC0gX19vdXRfZmlyc3QpOwp9CgoKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLAogICAgICAgICAgY2xh
c3MgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4KaW5saW5lIF9SYW5kb21BY2Nlc3NJdGVyCnJhbmRv
bV9zYW1wbGUoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX291dF9maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19v
dXRfbGFzdCwKICAgICAgICAgICAgICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQpCnsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHJldHVybiBfX3JhbmRv
bV9zYW1wbGUoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRf
Zmlyc3QsIF9fcmFuZCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2xhc3QgLSBfX291
dF9maXJzdCk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRp
Y2F0ZT4KX0ZvcndhcmRJdGVyIF9fcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgZm9y
d2FyZF9pdGVyYXRvcl90YWcpCnsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2Zp
cnN0OwoKICB3aGlsZSAoX19wcmVkKCpfX2ZpcnN0KSkKICAgIGlmICgrK19fZmlyc3QgPT0gX19s
YXN0KSByZXR1cm4gX19maXJzdDsKCiAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7Cgog
IHdoaWxlICgrK19fbmV4dCAhPSBfX2xhc3QpCiAgICBpZiAoX19wcmVkKCpfX25leHQpKSB7CiAg
ICAgIHN3YXAoKl9fZmlyc3QsICpfX25leHQpOwogICAgICArK19fZmlyc3Q7CiAgICB9CgogIHJl
dHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFz
cyBfUHJlZGljYXRlPgpfQmlkaXJlY3Rpb25hbEl0ZXIgX19wYXJ0aXRpb24oX0JpZGlyZWN0aW9u
YWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0
ZSBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0
ZXJhdG9yX3RhZykKewogIHdoaWxlICh0cnVlKSB7CiAgICB3aGlsZSAodHJ1ZSkKICAgICAgaWYg
KF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlIGlm
IChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAgICsrX19maXJzdDsKICAgICAgZWxzZQogICAgICAg
IGJyZWFrOwogICAgLS1fX2xhc3Q7CiAgICB3aGlsZSAodHJ1ZSkKICAgICAgaWYgKF9fZmlyc3Qg
PT0gX19sYXN0KQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlIGlmICghX19wcmVk
KCpfX2xhc3QpKQogICAgICAgIC0tX19sYXN0OwogICAgICBlbHNlCiAgICAgICAgYnJlYWs7CiAg
ICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsKICAgICsrX19maXJzdDsKICB9Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBfRm9yd2Fy
ZEl0ZXIgcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfUHJlZGljYXRlIF9fcHJlZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAg
cmV0dXJuIF9fcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLCBfX2l0ZXJhdG9yX2Nh
dGVnb3J5KF9fZmlyc3QpKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNz
IF9QcmVkaWNhdGUsIGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9faW5wbGFjZV9zdGFi
bGVfcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4p
CnsKICBpZiAoX19sZW4gPT0gMSkKICAgIHJldHVybiBfX3ByZWQoKl9fZmlyc3QpID8gX19sYXN0
IDogX19maXJzdDsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGUgPSBfX2ZpcnN0OwogIGFkdmFuY2Uo
X19taWRkbGUsIF9fbGVuIC8gMik7CiAgcmV0dXJuIHJvdGF0ZShfX2lucGxhY2Vfc3RhYmxlX3Bh
cnRpdGlvbihfX2ZpcnN0LCBfX21pZGRsZSwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19sZW4gLyAyKSwKICAgICAgICAgICAgICAgIF9fbWlkZGxl
LAogICAgICAgICAgICAgICAgX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX19taWRkbGUsIF9f
bGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19sZW4gLSBfX2xlbiAvIDIpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xh
c3MgX1BvaW50ZXIsIGNsYXNzIF9QcmVkaWNhdGUsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+
Cl9Gb3J3YXJkSXRlciBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJl
ZGljYXRlIF9fcHJlZCwgX0Rpc3RhbmNlIF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQp7CiAgaWYgKF9fbGVu
IDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdDEgPSBfX2ZpcnN0
OwogICAgX1BvaW50ZXIgX19yZXN1bHQyID0gX19idWZmZXI7CiAgICBmb3IgKCA7IF9fZmlyc3Qg
IT0gX19sYXN0IDsgKytfX2ZpcnN0KQogICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgewogICAg
ICAgICpfX3Jlc3VsdDEgPSAqX19maXJzdDsKICAgICAgICArK19fcmVzdWx0MTsKICAgICAgfQog
ICAgICBlbHNlIHsKICAgICAgICAqX19yZXN1bHQyID0gKl9fZmlyc3Q7CiAgICAgICAgKytfX3Jl
c3VsdDI7CiAgICAgIH0KICAgIGNvcHkoX19idWZmZXIsIF9fcmVzdWx0MiwgX19yZXN1bHQxKTsK
ICAgIHJldHVybiBfX3Jlc3VsdDE7CiAgfQogIGVsc2UgewogICAgX0ZvcndhcmRJdGVyIF9fbWlk
ZGxlID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7CiAgICByZXR1
cm4gcm90YXRlKF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZSgKICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2ZpcnN0LCBfX21pZGRsZSwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fbGVuIC8gMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpLAogICAgICAgICAgICAgICAg
ICAgIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgIF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFw
dGl2ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICBfX21pZGRsZSwgX19sYXN0LCBfX3ByZWQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLSBfX2xlbiAvIDIsIF9fYnVmZmVyLCBf
X2J1ZmZlcl9zaXplKSk7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFz
cyBfUHJlZGljYXRlLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9Gb3J3YXJk
SXRlcgpfX3N0YWJsZV9wYXJ0aXRpb25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy
ZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBf
VHAqLCBfRGlzdGFuY2UqKQp7CiAgX1RlbXBvcmFyeV9idWZmZXI8X0ZvcndhcmRJdGVyLCBfVHA+
IF9fYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgaWYgKF9fYnVmLnNpemUoKSA+IDApCiAgICByZXR1
cm4gX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19idWYucmVx
dWVzdGVkX3NpemUoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
YnVmLmJlZ2luKCksIF9fYnVmLnNpemUoKSk7CiAgZWxzZQogICAgcmV0dXJuIF9faW5wbGFjZV9z
dGFibGVfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX2J1Zi5yZXF1ZXN0ZWRfc2l6ZSgpKSk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+CmlubGlu
ZSBfRm9yd2FyZEl0ZXIgc3RhYmxlX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKewoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAg
cmV0dXJuIF9fZmlyc3Q7CiAgZWxzZQogICAgcmV0dXJuIF9fc3RhYmxlX3BhcnRpdGlvbl9hdXgo
X19maXJzdCwgX19sYXN0LCBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3ZhbHVlX3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXIsIGNsYXNzIF9UcD4KX1JhbmRvbUFjY2Vzc0l0ZXIgX191bmd1YXJkZWRfcGFydGl0
aW9uKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfVHAgX19waXZvdCkKewogIHdoaWxlICh0cnVlKSB7CiAg
ICB3aGlsZSAoKl9fZmlyc3QgPCBfX3Bpdm90KQogICAgICArK19fZmlyc3Q7CiAgICAtLV9fbGFz
dDsKICAgIHdoaWxlIChfX3Bpdm90IDwgKl9fbGFzdCkKICAgICAgLS1fX2xhc3Q7CiAgICBpZiAo
IShfX2ZpcnN0IDwgX19sYXN0KSkKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICBpdGVyX3N3YXAo
X19maXJzdCwgX19sYXN0KTsKICAgICsrX19maXJzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
UmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KX1JhbmRvbUFjY2Vz
c0l0ZXIgX191bmd1YXJkZWRfcGFydGl0aW9uKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAgX19waXZv
dCwgX0NvbXBhcmUgX19jb21wKQp7CiAgd2hpbGUgKHRydWUpIHsKICAgIHdoaWxlIChfX2NvbXAo
Kl9fZmlyc3QsIF9fcGl2b3QpKQogICAgICArK19fZmlyc3Q7CiAgICAtLV9fbGFzdDsKICAgIHdo
aWxlIChfX2NvbXAoX19waXZvdCwgKl9fbGFzdCkpCiAgICAgIC0tX19sYXN0OwogICAgaWYgKCEo
X19maXJzdCA8IF9fbGFzdCkpCiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgaXRlcl9zd2FwKF9f
Zmlyc3QsIF9fbGFzdCk7CiAgICArK19fZmlyc3Q7CiAgfQp9Cgpjb25zdCBpbnQgX19zdGxfdGhy
ZXNob2xkID0gMTY7CgoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3Mg
X1RwPgp2b2lkIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0LCBfVHAgX192YWwpCnsKICBfUmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBfX2xhc3Q7CiAg
LS1fX25leHQ7CiAgd2hpbGUgKF9fdmFsIDwgKl9fbmV4dCkgewogICAgKl9fbGFzdCA9ICpfX25l
eHQ7CiAgICBfX2xhc3QgPSBfX25leHQ7CiAgICAtLV9fbmV4dDsKICB9CiAgKl9fbGFzdCA9IF9f
dmFsOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xh
c3MgX0NvbXBhcmU+CnZvaWQgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfUmFuZG9tQWNjZXNz
SXRlciBfX2xhc3QsIF9UcCBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9D
b21wYXJlIF9fY29tcCkKewogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbmV4dCA9IF9fbGFzdDsKICAt
LV9fbmV4dDsKICB3aGlsZSAoX19jb21wKF9fdmFsLCAqX19uZXh0KSkgewogICAgKl9fbGFzdCA9
ICpfX25leHQ7CiAgICBfX2xhc3QgPSBfX25leHQ7CiAgICAtLV9fbmV4dDsKICB9CiAgKl9fbGFz
dCA9IF9fdmFsOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9U
cD4KaW5saW5lIHZvaWQgX19saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9U
cCopCnsKICBfVHAgX192YWwgPSAqX19sYXN0OwogIGlmIChfX3ZhbCA8ICpfX2ZpcnN0KSB7CiAg
ICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0ICsgMSk7CiAgICAqX19maXJz
dCA9IF9fdmFsOwogIH0KICBlbHNlCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9fbGFz
dCwgX192YWwpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9U
cCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIF9fbGluZWFyX2luc2VydChfUmFuZG9tQWNj
ZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19sYXN0LCBfVHAqLCBfQ29tcGFyZSBfX2NvbXApCnsKICBfVHAgX192YWwgPSAqX19s
YXN0OwogIGlmIChfX2NvbXAoX192YWwsICpfX2ZpcnN0KSkgewogICAgY29weV9iYWNrd2FyZChf
X2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCArIDEpOwogICAgKl9fZmlyc3QgPSBfX3ZhbDsKICB9CiAg
ZWxzZQogICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2xhc3QsIF9fdmFsLCBfX2NvbXAp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CnZvaWQgX19pbnNlcnRpb25f
c29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qp
CnsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKICBmb3IgKF9SYW5kb21BY2Nlc3NJ
dGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgIF9fbGluZWFy
X2luc2VydChfX2ZpcnN0LCBfX2ksIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19pbnNlcnRp
b25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCnsKICBpZiAoX19maXJz
dCA9PSBfX2xhc3QpIHJldHVybjsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmly
c3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgIF9fbGluZWFyX2luc2VydChfX2ZpcnN0
LCBfX2ksIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+CnZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9u
X3NvcnRfYXV4KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKikKewogIGZvciAo
X1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdDsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAg
ICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX1RwKCpfX2kpKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgdm9pZCBfX3VuZ3VhcmRlZF9pbnNlcnRp
b25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkgewogIF9fdW5ndWFyZGVkX2luc2Vy
dGlvbl9zb3J0X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29t
cGFyZT4Kdm9pZCBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydF9hdXgoX1JhbmRvbUFjY2Vzc0l0
ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAq
LCBfQ29tcGFyZSBfX2NvbXApCnsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmly
c3Q7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChf
X2ksIF9UcCgqX19pKSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3Nv
cnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKICBfX3VuZ3VhcmRlZF9pbnNl
cnRpb25fc29ydF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfUmFuZG9tQWNjZXNzSXRlcj4Kdm9pZCBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9SYW5kb21B
Y2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj
ZXNzSXRlciBfX2xhc3QpCnsKICBpZiAoX19sYXN0IC0gX19maXJzdCA+IF9fc3RsX3RocmVzaG9s
ZCkgewogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGxfdGhyZXNo
b2xkKTsKICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9fZmlyc3QgKyBfX3N0bF90aHJl
c2hvbGQsIF9fbGFzdCk7CiAgfQogIGVsc2UKICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwg
X19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29t
cGFyZT4Kdm9pZCBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs
IF9Db21wYXJlIF9fY29tcCkKewogIGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4gX19zdGxfdGhyZXNo
b2xkKSB7CiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0bF90aHJl
c2hvbGQsIF9fY29tcCk7CiAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0ICsg
X19zdGxfdGhyZXNob2xkLCBfX2xhc3QsIF9fY29tcCk7CiAgfQogIGVsc2UKICAgIF9faW5zZXJ0
aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Np
emU+CmlubGluZSBfU2l6ZSBfX2xnKF9TaXplIF9fbikKewogIF9TaXplIF9fazsKICBmb3IgKF9f
ayA9IDA7IF9fbiAhPSAxOyBfX24gPj49IDEpICsrX19rOwogIHJldHVybiBfX2s7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfU2l6ZT4Kdm9p
ZCBfX2ludHJvc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAg
ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCosCiAgICAgICAgICAgICAg
ICAgICAgICBfU2l6ZSBfX2RlcHRoX2xpbWl0KQp7CiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3Qg
PiBfX3N0bF90aHJlc2hvbGQpIHsKICAgIGlmIChfX2RlcHRoX2xpbWl0ID09IDApIHsKICAgICAg
cGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0KTsKICAgICAgcmV0dXJuOwogICAg
fQogICAgLS1fX2RlcHRoX2xpbWl0OwogICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICAg
ICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX1RwKF9fbWVkaWFuKCpfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpKSkpOwog
ICAgX19pbnRyb3NvcnRfbG9vcChfX2N1dCwgX19sYXN0LCAoX1RwKikgMCwgX19kZXB0aF9saW1p
dCk7CiAgICBfX2xhc3QgPSBfX2N1dDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj
ZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19p
bnRyb3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg
ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLAogICAgICAgICAgICAgICAgICAg
ICAgX1NpemUgX19kZXB0aF9saW1pdCwgX0NvbXBhcmUgX19jb21wKQp7CiAgd2hpbGUgKF9fbGFz
dCAtIF9fZmlyc3QgPiBfX3N0bF90aHJlc2hvbGQpIHsKICAgIGlmIChfX2RlcHRoX2xpbWl0ID09
IDApIHsKICAgICAgcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0LCBfX2NvbXAp
OwogICAgICByZXR1cm47CiAgICB9CiAgICAtLV9fZGVwdGhfbGltaXQ7CiAgICBfUmFuZG9tQWNj
ZXNzSXRlciBfX2N1dCA9CiAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAoX19tZWRpYW4oKl9fZmlyc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2ZpcnN0ICsgKF9fbGFz
dCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICooX19sYXN0IC0gMSksIF9fY29tcCkpLAogICAgICAgX19jb21wKTsKICAgIF9faW50cm9zb3J0
X2xvb3AoX19jdXQsIF9fbGFzdCwgKF9UcCopIDAsIF9fZGVwdGhfbGltaXQsIF9fY29tcCk7CiAg
ICBfX2xhc3QgPSBfX2N1dDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl
cj4KaW5saW5lIHZvaWQgc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNj
ZXNzSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKCiAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICBfX2ludHJvc29ydF9sb29wKF9fZmly
c3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLAog
ICAgICAgICAgICAgICAgICAgICBfX2xnKF9fbGFzdCAtIF9fZmlyc3QpICogMik7CiAgICBfX2Zp
bmFsX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBzb3J0KF9S
YW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwoKCgogIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgX19pbnRyb3Nv
cnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlw
ZShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgX19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAq
IDIsCiAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICBfX2ZpbmFsX2luc2VydGlvbl9z
b3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICB9Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9S
YW5kb21BY2Nlc3NJdGVyPgp2b2lkIF9faW5wbGFjZV9zdGFibGVfc29ydChfUmFuZG9tQWNjZXNz
SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
ciBfX2xhc3QpCnsKICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDE1KSB7CiAgICBfX2luc2VydGlv
bl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICByZXR1cm47CiAgfQogIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbWlkZGxlID0gX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KSAvIDI7CiAgX19pbnBs
YWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlKTsKICBfX2lucGxhY2Vfc3RhYmxlX3Nv
cnQoX19taWRkbGUsIF9fbGFzdCk7CiAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBf
X21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19taWRkbGUgLSBfX2Zp
cnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19sYXN0IC0gX19taWRkbGUpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9faW5w
bGFjZV9zdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkK
ewogIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMTUpIHsKICAgIF9faW5zZXJ0aW9uX3NvcnQoX19m
aXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgcmV0dXJuOwogIH0KICBfUmFuZG9tQWNjZXNzSXRl
ciBfX21pZGRsZSA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAyOwogIF9faW5wbGFj
ZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX21pZGRsZSwgX19jb21wKTsKICBfX2lucGxhY2Vfc3Rh
YmxlX3NvcnQoX19taWRkbGUsIF9fbGFzdCwgX19jb21wKTsKICBfX21lcmdlX3dpdGhvdXRfYnVm
ZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBf
X21pZGRsZSAtIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2xhc3QgLSBfX21p
ZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfUmFuZG9tQWNjZXNzSXRlcjEsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyMiwKICAgICAgICAg
IGNsYXNzIF9EaXN0YW5jZT4Kdm9pZCBfX21lcmdlX3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRl
cjEgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjEgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMiBfX3Jlc3VsdCwg
X0Rpc3RhbmNlIF9fc3RlcF9zaXplKQp7CiAgX0Rpc3RhbmNlIF9fdHdvX3N0ZXAgPSAyICogX19z
dGVwX3NpemU7CgogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fdHdvX3N0ZXApIHsKICAg
IF9fcmVzdWx0ID0gbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLAogICAgICAg
ICAgICAgICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmlyc3QgKyBfX3R3b19zdGVw
LAogICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCk7CiAgICBfX2ZpcnN0ICs9IF9fdHdvX3N0
ZXA7CiAgfQoKICBfX3N0ZXBfc2l6ZSA9IG1pbihfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCks
IF9fc3RlcF9zaXplKTsKICBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9f
Zmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19sYXN0LAogICAgICAgIF9fcmVzdWx0KTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyMSwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIyLAog
ICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX21lcmdlX3Nv
cnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlcjEgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg
ICBfUmFuZG9tQWNjZXNzSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9SYW5k
b21BY2Nlc3NJdGVyMiBfX3Jlc3VsdCwgX0Rpc3RhbmNlIF9fc3RlcF9zaXplLAogICAgICAgICAg
ICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewogIF9EaXN0YW5jZSBfX3R3b19zdGVwID0g
MiAqIF9fc3RlcF9zaXplOwoKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX3R3b19zdGVw
KSB7CiAgICBfX3Jlc3VsdCA9IG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwK
ICAgICAgICAgICAgICAgICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX190
d29fc3RlcCwKICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAg
ICAgIF9fY29tcCk7CiAgICBfX2ZpcnN0ICs9IF9fdHdvX3N0ZXA7CiAgfQogIF9fc3RlcF9zaXpl
ID0gbWluKF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19zdGVwX3NpemUpOwoKICBtZXJn
ZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAgX19maXJzdCArIF9fc3Rl
cF9zaXplLCBfX2xhc3QsCiAgICAgICAgX19yZXN1bHQsCiAgICAgICAgX19jb21wKTsKfQoKY29u
c3QgaW50IF9fc3RsX2NodW5rX3NpemUgPSA3OwoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nl
c3NJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CnZvaWQgX19jaHVua19pbnNlcnRpb25fc29ydChfUmFu
ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19sYXN0LCBfRGlzdGFuY2UgX19jaHVua19zaXplKQp7CiAgd2hpbGUgKF9f
bGFzdCAtIF9fZmlyc3QgPj0gX19jaHVua19zaXplKSB7CiAgICBfX2luc2VydGlvbl9zb3J0KF9f
Zmlyc3QsIF9fZmlyc3QgKyBfX2NodW5rX3NpemUpOwogICAgX19maXJzdCArPSBfX2NodW5rX3Np
emU7CiAgfQogIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Db21wYXJl
Pgp2b2lkIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2NodW5rX3NpemUsIF9Db21wYXJl
IF9fY29tcCkKewogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fY2h1bmtfc2l6ZSkgewog
ICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19jaHVua19zaXplLCBfX2Nv
bXApOwogICAgX19maXJzdCArPSBfX2NodW5rX3NpemU7CiAgfQogIF9faW5zZXJ0aW9uX3NvcnQo
X19maXJzdCwgX19sYXN0LCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz
c0l0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFzcyBfRGlzdGFuY2U+CnZvaWQgX19tZXJnZV9zb3J0
X3dpdGhfYnVmZmVyKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSopCnsKICBfRGlzdGFuY2Ug
X19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogIF9Qb2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1
ZmZlciArIF9fbGVuOwoKICBfRGlzdGFuY2UgX19zdGVwX3NpemUgPSBfX3N0bF9jaHVua19zaXpl
OwogIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX3N0ZXBfc2l6ZSk7
CgogIHdoaWxlIChfX3N0ZXBfc2l6ZSA8IF9fbGVuKSB7CiAgICBfX21lcmdlX3NvcnRfbG9vcChf
X2ZpcnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBfX3N0ZXBfc2l6ZSk7CiAgICBfX3N0ZXBfc2l6ZSAq
PSAyOwogICAgX19tZXJnZV9zb3J0X2xvb3AoX19idWZmZXIsIF9fYnVmZmVyX2xhc3QsIF9fZmly
c3QsIF9fc3RlcF9zaXplKTsKICAgIF9fc3RlcF9zaXplICo9IDI7CiAgfQp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFzcyBfRGlzdGFuY2Us
CiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIo
X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfUG9pbnRlciBfX2J1ZmZlciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwgX0NvbXBhcmUgX19jb21wKQp7CiAgX0Rpc3Rh
bmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICBfUG9pbnRlciBfX2J1ZmZlcl9sYXN0ID0g
X19idWZmZXIgKyBfX2xlbjsKCiAgX0Rpc3RhbmNlIF9fc3RlcF9zaXplID0gX19zdGxfY2h1bmtf
c2l6ZTsKICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19zdGVwX3Np
emUsIF9fY29tcCk7CgogIHdoaWxlIChfX3N0ZXBfc2l6ZSA8IF9fbGVuKSB7CiAgICBfX21lcmdl
X3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBfX3N0ZXBfc2l6ZSwgX19jb21w
KTsKICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICBfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZlciwg
X19idWZmZXJfbGFzdCwgX19maXJzdCwgX19zdGVwX3NpemUsIF9fY29tcCk7CiAgICBfX3N0ZXBf
c2l6ZSAqPSAyOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFz
cyBfUG9pbnRlciwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUo
X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1BvaW50ZXIgX19idWZmZXIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKewogIF9EaXN0YW5jZSBfX2xl
biA9IChfX2xhc3QgLSBfX2ZpcnN0ICsgMSkgLyAyOwogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlk
ZGxlID0gX19maXJzdCArIF9fbGVuOwogIGlmIChfX2xlbiA+IF9fYnVmZmVyX3NpemUpIHsKICAg
IF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1
ZmZlcl9zaXplKTsKICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19taWRkbGUsIF9fbGFzdCwg
X19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogIH0KICBlbHNlIHsKICAgIF9fbWVyZ2Vfc29ydF93
aXRoX2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIChfRGlzdGFuY2UqKTApOwog
ICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCAo
X0Rpc3RhbmNlKikwKTsKICB9CiAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwg
X19sYXN0LCBfRGlzdGFuY2UoX19taWRkbGUgLSBfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAg
IF9EaXN0YW5jZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUG9pbnRlciwgY2xh
c3MgX0Rpc3RhbmNlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19zdGFibGVfc29y
dF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfUG9pbnRlciBfX2J1ZmZlciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplLCBfQ29tcGFy
ZSBfX2NvbXApCnsKICBfRGlzdGFuY2UgX19sZW4gPSAoX19sYXN0IC0gX19maXJzdCArIDEpIC8g
MjsKICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyBfX2xlbjsKICBpZiAo
X19sZW4gPiBfX2J1ZmZlcl9zaXplKSB7CiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmly
c3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19jb21wKTsKICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19taWRkbGUsIF9f
bGFzdCwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29tcCk7CiAgfQogIGVsc2UgewogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmly
c3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgKF9EaXN0YW5jZSopMCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fY29tcCk7CiAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19taWRk
bGUsIF9fbGFzdCwgX19idWZmZXIsIChfRGlzdGFuY2UqKTAsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbXApOwogIH0KICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlk
ZGxlLCBfX2xhc3QsIF9EaXN0YW5jZShfX21pZGRsZSAtIF9fZmlyc3QpLAogICAgICAgICAgICAg
ICAgICAgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fbWlkZGxlKSwgX19idWZmZXIsIF9fYnVmZmVyX3Np
emUsCiAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRv
bUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX3N0
YWJsZV9zb3J0X2F1eChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCosIF9EaXN0YW5jZSop
CnsKICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFuZG9tQWNjZXNzSXRlciwgX1RwPiBidWYoX19maXJz
dCwgX19sYXN0KTsKICBpZiAoYnVmLmJlZ2luKCkgPT0gMCkKICAgIF9faW5wbGFjZV9zdGFibGVf
c29ydChfX2ZpcnN0LCBfX2xhc3QpOwogIGVsc2UKICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUo
X19maXJzdCwgX19sYXN0LCBidWYuYmVnaW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0Rpc3RhbmNlKGJ1Zi5zaXplKCkpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2
b2lkIF9fc3RhYmxlX3NvcnRfYXV4KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwgX0Rp
c3RhbmNlKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7
CiAgX1RlbXBvcmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9UcD4gYnVmKF9fZmlyc3Qs
IF9fbGFzdCk7CiAgaWYgKGJ1Zi5iZWdpbigpID09IDApCiAgICBfX2lucGxhY2Vfc3RhYmxlX3Nv
cnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogIGVsc2UKICAgIF9fc3RhYmxlX3NvcnRfYWRh
cHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYuYmVnaW4oKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0Rpc3RhbmNlKGJ1Zi5zaXplKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSB2b2lk
IHN0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgoKICBfX3N0YWJsZV9zb3J0X2F1eChfX2ZpcnN0LCBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLAogICAgICAgICAgICAg
ICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIHN0YWJsZV9zb3J0KF9S
YW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCgoKICBfX3N0YWJsZV9zb3J0X2F1eChfX2ZpcnN0LCBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLAogICAgICAgICAg
ICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICBf
X2NvbXApOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1Rw
Pgp2b2lkIF9fcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy
IF9fbGFzdCwgX1RwKikKewogIG1ha2VfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgZm9yIChf
UmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX21pZGRsZTsgX19pIDwgX19sYXN0OyArK19faSkKICAg
IGlmICgqX19pIDwgKl9fZmlyc3QpCiAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19taWRkbGUs
IF9faSwgX1RwKCpfX2kpLAogICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0
KSk7CiAgc29ydF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9S
YW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgdm9pZCBwYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0
ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0
KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9fcGFydGlh
bF9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBf
Q29tcGFyZT4Kdm9pZCBfX3BhcnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBf
UmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj
ZXNzSXRlciBfX2xhc3QsIF9UcCosIF9Db21wYXJlIF9fY29tcCkKewogIG1ha2VfaGVhcChfX2Zp
cnN0LCBfX21pZGRsZSwgX19jb21wKTsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9f
bWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19pKQogICAgaWYgKF9fY29tcCgqX19pLCAqX19maXJz
dCkpCiAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9faSwgX1RwKCpfX2kpLCBf
X2NvbXAsCiAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKICBzb3J0
X2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIHBhcnRpYWxfc29ydChf
UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj
ZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgoKCiAgX19wYXJ0aWFsX3NvcnQoX19maXJzdCwgX19taWRkbGUs
IF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZSwK
ICAgICAgICAgIGNsYXNzIF9UcD4KX1JhbmRvbUFjY2Vzc0l0ZXIgX19wYXJ0aWFsX3NvcnRfY29w
eShfSW5wdXRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UqLCBfVHAqKQp7CiAgaWYg
KF9fcmVzdWx0X2ZpcnN0ID09IF9fcmVzdWx0X2xhc3QpIHJldHVybiBfX3Jlc3VsdF9sYXN0Owog
IF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X3JlYWxfbGFzdCA9IF9fcmVzdWx0X2ZpcnN0Owog
IHdoaWxlKF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fcmVzdWx0X3JlYWxfbGFzdCAhPSBfX3Jlc3Vs
dF9sYXN0KSB7CiAgICAqX19yZXN1bHRfcmVhbF9sYXN0ID0gKl9fZmlyc3Q7CiAgICArK19fcmVz
dWx0X3JlYWxfbGFzdDsKICAgICsrX19maXJzdDsKICB9CiAgbWFrZV9oZWFwKF9fcmVzdWx0X2Zp
cnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QpOwogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewog
ICAgaWYgKCpfX2ZpcnN0IDwgKl9fcmVzdWx0X2ZpcnN0KQogICAgICBfX2FkanVzdF9oZWFwKF9f
cmVzdWx0X2ZpcnN0LCBfRGlzdGFuY2UoMCksCiAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNl
KF9fcmVzdWx0X3JlYWxfbGFzdCAtIF9fcmVzdWx0X2ZpcnN0KSwKICAgICAgICAgICAgICAgICAg
ICBfVHAoKl9fZmlyc3QpKTsKICAgICsrX19maXJzdDsKICB9CiAgc29ydF9oZWFwKF9fcmVzdWx0
X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QpOwogIHJldHVybiBfX3Jlc3VsdF9yZWFsX2xhc3Q7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4K
aW5saW5lIF9SYW5kb21BY2Nlc3NJdGVyCnBhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIgX19m
aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fcmVzdWx0X2ZpcnN0LAogICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBf
X3Jlc3VsdF9sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBy
ZXR1cm4gX19wYXJ0aWFsX3NvcnRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0X2ZpcnN0
LCBfX3Jlc3VsdF9sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2Vf
dHlwZShfX3Jlc3VsdF9maXJzdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192YWx1
ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9S
YW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZSwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5j
ZSwgY2xhc3MgX1RwPgpfUmFuZG9tQWNjZXNzSXRlciBfX3BhcnRpYWxfc29ydF9jb3B5KF9JbnB1
dEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
SW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9maXJzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCwgX0Rp
c3RhbmNlKiwgX1RwKikKewogIGlmIChfX3Jlc3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0KSBy
ZXR1cm4gX19yZXN1bHRfbGFzdDsKICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9yZWFsX2xh
c3QgPSBfX3Jlc3VsdF9maXJzdDsKICB3aGlsZShfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3Jlc3Vs
dF9yZWFsX2xhc3QgIT0gX19yZXN1bHRfbGFzdCkgewogICAgKl9fcmVzdWx0X3JlYWxfbGFzdCA9
ICpfX2ZpcnN0OwogICAgKytfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICArK19fZmlyc3Q7CiAgfQog
IG1ha2VfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0LCBfX2NvbXApOwog
IHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgaWYgKF9fY29tcCgqX19maXJzdCwgKl9f
cmVzdWx0X2ZpcnN0KSkKICAgICAgX19hZGp1c3RfaGVhcChfX3Jlc3VsdF9maXJzdCwgX0Rpc3Rh
bmNlKDApLAogICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX3Jlc3VsdF9yZWFsX2xhc3Qg
LSBfX3Jlc3VsdF9maXJzdCksCiAgICAgICAgICAgICAgICAgICAgX1RwKCpfX2ZpcnN0KSwKICAg
ICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgKytfX2ZpcnN0OwogIH0KICBzb3J0X2hlYXAo
X19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwgX19jb21wKTsKICByZXR1cm4gX19y
ZXN1bHRfcmVhbF9sYXN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1Jh
bmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXIK
cGFydGlhbF9zb3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsCiAgICAg
ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3QsIF9Db21wYXJlIF9f
Y29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgoKCiAgcmV0dXJuIF9fcGFydGlhbF9zb3J0X2NvcHkoX19maXJzdCwgX19s
YXN0LCBfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90
eXBlKF9fcmVzdWx0X2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVl
X3R5cGUoX19maXJzdCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwg
Y2xhc3MgX1RwPgp2b2lkIF9fbnRoX2VsZW1lbnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz
SXRlciBfX2xhc3QsIF9UcCopCnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDMpIHsKICAg
IF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9f
Zmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9UcChfX21lZGlhbigq
X19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmly
c3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKihfX2xhc3QgLSAxKSkpKTsKICAgIGlmIChfX2N1dCA8PSBfX250aCkKICAg
ICAgX19maXJzdCA9IF9fY3V0OwogICAgZWxzZQogICAgICBfX2xhc3QgPSBfX2N1dDsKICB9CiAg
X19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jh
bmRvbUFjY2Vzc0l0ZXI+CmlubGluZSB2b2lkIG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVy
IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbnRoLAogICAgICAgICAgICAgICAgICAgICAg
ICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwoKCiAgX19udGhfZWxlbWVudChfX2ZpcnN0LCBfX250aCwgX19sYXN0LCBf
X3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19udGhfZWxlbWVudChfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAgICAgICAg
ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwgX0NvbXBhcmUgX19jb21wKQp7
CiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAzKSB7CiAgICBfUmFuZG9tQWNjZXNzSXRlciBf
X2N1dCA9CiAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfVHAoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmly
c3QpLzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0
IC0gMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKSks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgaWYgKF9fY3V0IDw9IF9f
bnRoKQogICAgICBfX2ZpcnN0ID0gX19jdXQ7CiAgICBlbHNlCiAgICAgIF9fbGFzdCA9IF9fY3V0
OwogIH0KICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZv
aWQgbnRoX2VsZW1lbnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19udGgsCiAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz
dCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCgoKICBfX250aF9lbGVtZW50KF9fZmlyc3QsIF9fbnRoLCBfX2xhc3QsIF9fdmFsdWVf
dHlwZShfX2ZpcnN0KSwgX19jb21wKTsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
ciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX2xvd2VyX2JvdW5k
KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfRGlzdGFuY2UqKQp7CiAgX0Rpc3RhbmNl
IF9fbGVuID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKICBfRGlzdGFu
Y2UgX19oYWxmOwogIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgd2hpbGUgKF9fbGVuID4gMCkg
ewogICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgIGFk
dmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICBpZiAoKl9fbWlkZGxlIDwgX192YWwpIHsKICAg
ICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICArK19fZmlyc3Q7CiAgICAgIF9fbGVuID0gX19s
ZW4gLSBfX2hhbGYgLSAxOwogICAgfQogICAgZWxzZQogICAgICBfX2xlbiA9IF9faGFsZjsKICB9
CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNz
IF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlciBsb3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJz
dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBfVHAmIF9fdmFsKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIHJldHVybiBf
X2xvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsCiAgICAgICAgICAgICAgICAgICAg
ICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
SXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2Fy
ZEl0ZXIgX19sb3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0Nv
bXBhcmUgX19jb21wLCBfRGlzdGFuY2UqKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsKICBkaXN0
YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKICBfRGlzdGFuY2UgX19oYWxmOwogIF9Gb3J3
YXJkSXRlciBfX21pZGRsZTsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgX19oYWxmID0gX19s
ZW4gPj4gMTsKICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9f
aGFsZik7CiAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgX192YWwpKSB7CiAgICAgIF9fZmlyc3Qg
PSBfX21pZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxm
IC0gMTsKICAgIH0KICAgIGVsc2UKICAgICAgX19sZW4gPSBfX2hhbGY7CiAgfQogIHJldHVybiBf
X2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNz
IF9Db21wYXJlPgppbmxpbmUgX0ZvcndhcmRJdGVyIGxvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKICByZXR1cm4gX19sb3dlcl9ib3VuZChfX2ZpcnN0LCBf
X2xhc3QsIF9fdmFsLCBfX2NvbXAsCiAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90
eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1Rw
LCBjbGFzcyBfRGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX3VwcGVyX2JvdW5kKF9Gb3J3YXJkSXRl
ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBfVHAmIF9fdmFsLCBfRGlzdGFuY2UqKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsK
ICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKICBfRGlzdGFuY2UgX19oYWxmOwog
IF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgX19oYWxm
ID0gX19sZW4gPj4gMTsKICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWRk
bGUsIF9faGFsZik7CiAgICBpZiAoX192YWwgPCAqX19taWRkbGUpCiAgICAgIF9fbGVuID0gX19o
YWxmOwogICAgZWxzZSB7CiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgKytfX2ZpcnN0
OwogICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgIH0KICB9CiAgcmV0dXJuIF9f
Zmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5l
IF9Gb3J3YXJkSXRlciB1cHBlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9f
dmFsKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIHJldHVybiBfX3VwcGVyX2JvdW5k
KF9fZmlyc3QsIF9fbGFzdCwgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5j
ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3Mg
X1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX191cHBl
cl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wLCBf
RGlzdGFuY2UqKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBf
X2xhc3QsIF9fbGVuKTsKICBfRGlzdGFuY2UgX19oYWxmOwogIF9Gb3J3YXJkSXRlciBfX21pZGRs
ZTsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgIF9f
bWlkZGxlID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICBpZiAo
X19jb21wKF9fdmFsLCAqX19taWRkbGUpKQogICAgICBfX2xlbiA9IF9faGFsZjsKICAgIGVsc2Ug
ewogICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICsrX19maXJzdDsKICAgICAgX19sZW4g
PSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICB9CiAgfQogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxp
bmUgX0ZvcndhcmRJdGVyIHVwcGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy
ZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYg
X192YWwsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKICByZXR1cm4gX191cHBlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBf
X2NvbXAsCiAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFu
Y2U+CnBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+Cl9fZXF1YWxfcmFuZ2UoX0Zvcndh
cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwsCiAg
ICAgICAgICAgICAgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFu
Y2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2Fy
ZEl0ZXIgX19taWRkbGUsIF9fbGVmdCwgX19yaWdodDsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewog
ICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgIGFkdmFu
Y2UoX19taWRkbGUsIF9faGFsZik7CiAgICBpZiAoKl9fbWlkZGxlIDwgX192YWwpIHsKICAgICAg
X19maXJzdCA9IF9fbWlkZGxlOwogICAgICArK19fZmlyc3Q7CiAgICAgIF9fbGVuID0gX19sZW4g
LSBfX2hhbGYgLSAxOwogICAgfQogICAgZWxzZSBpZiAoX192YWwgPCAqX19taWRkbGUpCiAgICAg
IF9fbGVuID0gX19oYWxmOwogICAgZWxzZSB7CiAgICAgIF9fbGVmdCA9IGxvd2VyX2JvdW5kKF9f
Zmlyc3QsIF9fbWlkZGxlLCBfX3ZhbCk7CiAgICAgIGFkdmFuY2UoX19maXJzdCwgX19sZW4pOwog
ICAgICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQoKytfX21pZGRsZSwgX19maXJzdCwgX192YWwpOwog
ICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBfX3Jp
Z2h0KTsKICAgIH0KICB9CiAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+
KF9fZmlyc3QsIF9fZmlyc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFz
cyBfVHA+CmlubGluZSBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgplcXVhbF9yYW5n
ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBf
X3ZhbCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICByZXR1cm4gX19lcXVhbF9yYW5n
ZShfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFu
Y2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNz
IF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9EaXN0YW5jZT4KcGFpcjxfRm9yd2FyZEl0ZXIs
IF9Gb3J3YXJkSXRlcj4KX19lcXVhbF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zvcndh
cmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgICBfQ29tcGFyZSBf
X2NvbXAsIF9EaXN0YW5jZSopCnsKICBfRGlzdGFuY2UgX19sZW4gPSAwOwogIGRpc3RhbmNlKF9f
Zmlyc3QsIF9fbGFzdCwgX19sZW4pOwogIF9EaXN0YW5jZSBfX2hhbGY7CiAgX0ZvcndhcmRJdGVy
IF9fbWlkZGxlLCBfX2xlZnQsIF9fcmlnaHQ7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9f
aGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9f
bWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKF9fY29tcCgqX19taWRkbGUsIF9fdmFsKSkgewogICAg
ICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICsrX19maXJzdDsKICAgICAgX19sZW4gPSBfX2xl
biAtIF9faGFsZiAtIDE7CiAgICB9CiAgICBlbHNlIGlmIChfX2NvbXAoX192YWwsICpfX21pZGRs
ZSkpCiAgICAgIF9fbGVuID0gX19oYWxmOwogICAgZWxzZSB7CiAgICAgIF9fbGVmdCA9IGxvd2Vy
X2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCBfX3ZhbCwgX19jb21wKTsKICAgICAgYWR2YW5jZShf
X2ZpcnN0LCBfX2xlbik7CiAgICAgIF9fcmlnaHQgPSB1cHBlcl9ib3VuZCgrK19fbWlkZGxlLCBf
X2ZpcnN0LCBfX3ZhbCwgX19jb21wKTsKICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBf
Rm9yd2FyZEl0ZXI+KF9fbGVmdCwgX19yaWdodCk7CiAgICB9CiAgfQogIHJldHVybiBwYWlyPF9G
b3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBfX2ZpcnN0KTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHBh
aXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+CmVxdWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAg
ICBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCiAgcmV0dXJuIF9fZXF1YWxfcmFuZ2UoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21w
LAogICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KYm9vbCBiaW5hcnlfc2VhcmNo
KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgY29uc3QgX1RwJiBfX3ZhbCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBf
Rm9yd2FyZEl0ZXIgX19pID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CiAg
cmV0dXJuIF9faSAhPSBfX2xhc3QgJiYgIShfX3ZhbCA8ICpfX2kpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgpib29sIGJpbmFyeV9z
ZWFyY2goX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgICAgICAgX0NvbXBhcmUg
X19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIF9Gb3J3
YXJkSXRlciBfX2kgPSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2NvbXAp
OwogIHJldHVybiBfX2kgIT0gX19sYXN0ICYmICFfX2NvbXAoX192YWwsICpfX2kpOwp9CgoKCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRw
dXRJdGVyPgpfT3V0cHV0SXRlciBtZXJnZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRl
cjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1
dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICB3aGlsZSAoX19maXJzdDEg
IT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAgICBpZiAoKl9fZmlyc3QyIDwg
Kl9fZmlyc3QxKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgKytfX2ZpcnN0
MjsKICAgIH0KICAgIGVsc2UgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsr
X19maXJzdDE7CiAgICB9CiAgICArK19fcmVzdWx0OwogIH0KICByZXR1cm4gY29weShfX2ZpcnN0
MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0
ZXIsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4KX091dHB1dEl0ZXIgbWVyZ2UoX0lucHV0SXRl
cjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9JbnB1
dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICBf
T3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19m
aXJzdDIgIT0gX19sYXN0MikgewogICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkp
IHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICArK19fZmlyc3QyOwogICAgfQog
ICAgZWxzZSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsK
ICAgIH0KICAgICsrX19yZXN1bHQ7CiAgfQogIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3Qy
LCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFz
cyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4Kdm9pZCBfX21lcmdlX3dpdGhv
dXRfYnVmZmVyKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIpCnsKICBpZiAoX19sZW4x
ID09IDAgfHwgX19sZW4yID09IDApCiAgICByZXR1cm47CiAgaWYgKF9fbGVuMSArIF9fbGVuMiA9
PSAyKSB7CiAgICBpZiAoKl9fbWlkZGxlIDwgKl9fZmlyc3QpCiAgICAgIGl0ZXJfc3dhcChfX2Zp
cnN0LCBfX21pZGRsZSk7CiAgICByZXR1cm47CiAgfQogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2Zp
cnN0X2N1dCA9IF9fZmlyc3Q7CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9f
bWlkZGxlOwogIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7
CiAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICBh
ZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2Jv
dW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCk7CiAgICBkaXN0YW5jZShfX21pZGRs
ZSwgX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICB9CiAgZWxzZSB7CiAgICBfX2xlbjIyID0gX19s
ZW4yIC8gMjsKICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgIF9fZmlyc3Rf
Y3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQpOwogICAg
ZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbGVuMTEpOwogIH0KICBfQmlkaXJlY3Rp
b25hbEl0ZXIgX19uZXdfbWlkZGxlCiAgICA9IHJvdGF0ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUs
IF9fc2Vjb25kX2N1dCk7CiAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX2ZpcnN0
X2N1dCwgX19uZXdfbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4xMSwgX19s
ZW4yMik7CiAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1
dCwgX19sYXN0LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICAgICAgX19s
ZW4yIC0gX19sZW4yMik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNs
YXNzIF9EaXN0YW5jZSwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19tZXJnZV93aXRob3V0X2J1ZmZl
cihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
RGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0NvbXBhcmUgX19jb21wKQp7CiAgaWYgKF9fbGVuMSA9PSAwIHx8IF9fbGVuMiA9PSAw
KQogICAgcmV0dXJuOwogIGlmIChfX2xlbjEgKyBfX2xlbjIgPT0gMikgewogICAgaWYgKF9fY29t
cCgqX19taWRkbGUsICpfX2ZpcnN0KSkKICAgICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbWlkZGxl
KTsKICAgIHJldHVybjsKICB9CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19m
aXJzdDsKICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgX0Rp
c3RhbmNlIF9fbGVuMTEgPSAwOwogIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICBpZiAoX19sZW4x
ID4gX19sZW4yKSB7CiAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgIGFkdmFuY2UoX19maXJz
dF9jdXQsIF9fbGVuMTEpOwogICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUs
IF9fbGFzdCwgKl9fZmlyc3RfY3V0LCBfX2NvbXApOwogICAgZGlzdGFuY2UoX19taWRkbGUsIF9f
c2Vjb25kX2N1dCwgX19sZW4yMik7CiAgfQogIGVsc2UgewogICAgX19sZW4yMiA9IF9fbGVuMiAv
IDI7CiAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICBfX2ZpcnN0X2N1dCA9
IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0LCBfX2NvbXApOwog
ICAgZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbGVuMTEpOwogIH0KICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlCiAgICA9IHJvdGF0ZShfX2ZpcnN0X2N1dCwgX19taWRk
bGUsIF9fc2Vjb25kX2N1dCk7CiAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX2Zp
cnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLCBfX2xlbjIyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgX19jb21wKTsKICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fbmV3X21pZGRsZSwg
X19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2xlbjIgLSBfX2xlbjIyLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Jp
ZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgIGNs
YXNzIF9EaXN0YW5jZT4KX0JpZGlyZWN0aW9uYWxJdGVyMSBfX3JvdGF0ZV9hZGFwdGl2ZShfQmlk
aXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19s
ZW4yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlcjIgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rp
c3RhbmNlIF9fYnVmZmVyX3NpemUpCnsKICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fYnVmZmVyX2Vu
ZDsKICBpZiAoX19sZW4xID4gX19sZW4yICYmIF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAg
ICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAgIGNv
cHlfYmFja3dhcmQoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCk7CiAgICByZXR1cm4gY29weShf
X2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2ZpcnN0KTsKICB9CiAgZWxzZSBpZiAoX19sZW4xIDw9
IF9fYnVmZmVyX3NpemUpIHsKICAgIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19maXJzdCwgX19taWRk
bGUsIF9fYnVmZmVyKTsKICAgIGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19maXJzdCk7CiAgICBy
ZXR1cm4gY29weV9iYWNrd2FyZChfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2xhc3QpOwogIH0K
ICBlbHNlCiAgICByZXR1cm4gcm90YXRlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJ
dGVyMiwKICAgICAgICAgIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjM+Cl9CaWRpcmVjdGlvbmFs
SXRlcjMgX19tZXJnZV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xh
c3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyMiBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRp
cmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMgX19yZXN1bHQpCnsKICBpZiAoX19maXJzdDEgPT0gX19s
YXN0MSkKICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3Vs
dCk7CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICByZXR1cm4gY29weV9iYWNrd2FyZChf
X2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogIC0tX19sYXN0MTsKICAtLV9fbGFzdDI7CiAg
d2hpbGUgKHRydWUpIHsKICAgIGlmICgqX19sYXN0MiA8ICpfX2xhc3QxKSB7CiAgICAgICotLV9f
cmVzdWx0ID0gKl9fbGFzdDE7CiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAg
IHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCArK19fbGFzdDIsIF9fcmVzdWx0KTsKICAg
ICAgLS1fX2xhc3QxOwogICAgfQogICAgZWxzZSB7CiAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFz
dDI7CiAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBjb3B5X2Jh
Y2t3YXJkKF9fZmlyc3QxLCArK19fbGFzdDEsIF9fcmVzdWx0KTsKICAgICAgLS1fX2xhc3QyOwog
ICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9C
aWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIzLCBj
bGFzcyBfQ29tcGFyZT4KX0JpZGlyZWN0aW9uYWxJdGVyMyBfX21lcmdlX2JhY2t3YXJkKF9CaWRp
cmVjdGlvbmFsSXRlcjEgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMyBfX3Jl
c3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29t
cCkKewogIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgcmV0dXJuIGNvcHlfYmFja3dhcmQo
X19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0KTsKICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikK
ICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAg
LS1fX2xhc3QxOwogIC0tX19sYXN0MjsKICB3aGlsZSAodHJ1ZSkgewogICAgaWYgKF9fY29tcCgq
X19sYXN0MiwgKl9fbGFzdDEpKSB7CiAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDE7CiAgICAg
IGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9f
Zmlyc3QyLCArK19fbGFzdDIsIF9fcmVzdWx0KTsKICAgICAgLS1fX2xhc3QxOwogICAgfQogICAg
ZWxzZSB7CiAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDI7CiAgICAgIGlmIChfX2ZpcnN0MiA9
PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCArK19fbGFz
dDEsIF9fcmVzdWx0KTsKICAgICAgLS1fX2xhc3QyOwogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNs
YXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfUG9pbnRlcj4K
dm9pZCBfX21lcmdlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAg
ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAg
ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
IF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAg
ICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCnsKICBpZiAoX19s
ZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAgX1BvaW50ZXIg
X19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgbWVy
Z2UoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19taWRkbGUsIF9fbGFzdCwgX19maXJzdCk7CiAg
fQogIGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICBfUG9pbnRlciBfX2J1
ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAgIF9fbWVyZ2Vf
YmFja3dhcmQoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFz
dCk7CiAgfQogIGVsc2UgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19m
aXJzdDsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAg
IF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICAgIGlm
IChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICAgIGFk
dmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9i
b3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQpOwogICAgICBkaXN0YW5jZShfX21p
ZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgIH0KICAgIGVsc2UgewogICAgICBfX2xl
bjIyID0gX19sZW4yIC8gMjsKICAgICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwog
ICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNv
bmRfY3V0KTsKICAgICAgZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbGVuMTEpOwog
ICAgfQogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9CiAgICAgIF9fcm90YXRl
X2FkYXB0aXZlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjEgLSBf
X2xlbjExLAogICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZm
ZXJfc2l6ZSk7CiAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25l
d19taWRkbGUsIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVy
LCBfX2J1ZmZlcl9zaXplKTsKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19uZXdfbWlkZGxlLCBfX3Nl
Y29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAg
X19sZW4yIC0gX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogIH0KfQoKdGVtcGxh
dGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfUG9p
bnRlciwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fbWVyZ2VfYWRhcHRpdmUoX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3Rh
bmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlz
dGFuY2UgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29t
cCkKewogIGlmIChfX2xlbjEgPD0gX19sZW4yICYmIF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7
CiAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1
ZmZlcik7CiAgICBtZXJnZShfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX21pZGRsZSwgX19sYXN0
LCBfX2ZpcnN0LCBfX2NvbXApOwogIH0KICBlbHNlIGlmIChfX2xlbjIgPD0gX19idWZmZXJfc2l6
ZSkgewogICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBf
X2J1ZmZlcik7CiAgICBfX21lcmdlX2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZl
ciwgX19idWZmZXJfZW5kLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAg
fQogIGVsc2UgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsK
ICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgIF9EaXN0
YW5jZSBfX2xlbjExID0gMDsKICAgIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICAgIGlmIChfX2xl
bjEgPiBfX2xlbjIpIHsKICAgICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICAgIGFkdmFuY2Uo
X19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChf
X21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQsIF9fY29tcCk7CiAgICAgIGRpc3RhbmNlKF9f
bWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgfQogICAgZWxzZSB7CiAgICAgIF9f
bGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7
CiAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3Nl
Y29uZF9jdXQsIF9fY29tcCk7CiAgICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBf
X2xlbjExKTsKICAgIH0KICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUgPQogICAg
ICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwg
X19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZm
ZXIsIF9fYnVmZmVyX3NpemUpOwogICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX2ZpcnN0
X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICBfX2xlbjIy
LCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwgX19jb21wKTsKICAgIF9fbWVyZ2VfYWRhcHRpdmUo
X19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwKICAg
ICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3Np
emUsIF9fY29tcCk7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBj
bGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19pbnBsYWNlX21lcmdlX2F1
eChfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwgX1RwKiwgX0Rpc3RhbmNlKikKewog
IF9EaXN0YW5jZSBfX2xlbjEgPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xl
bjEpOwogIF9EaXN0YW5jZSBfX2xlbjIgPSAwOwogIGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3Qs
IF9fbGVuMik7CgogIF9UZW1wb3JhcnlfYnVmZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwgX1RwPiBf
X2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlmIChfX2J1Zi5iZWdpbigpID09IDApCiAgICBfX21l
cmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19s
ZW4yKTsKICBlbHNlCiAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xh
c3QsIF9fbGVuMSwgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICBfX2J1Zi5iZWdpbigpLCBf
RGlzdGFuY2UoX19idWYuc2l6ZSgpKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25h
bEl0ZXIsIGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX0NvbXBh
cmU+CmlubGluZSB2b2lkIF9faW5wbGFjZV9tZXJnZV9hdXgoX0JpZGlyZWN0aW9uYWxJdGVyIF9f
Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
IF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlciBfX2xhc3QsIF9UcCosIF9EaXN0YW5jZSosCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0NvbXBhcmUgX19jb21wKQp7CiAgX0Rpc3RhbmNlIF9fbGVuMSA9IDA7CiAgZGlzdGFu
Y2UoX19maXJzdCwgX19taWRkbGUsIF9fbGVuMSk7CiAgX0Rpc3RhbmNlIF9fbGVuMiA9IDA7CiAg
ZGlzdGFuY2UoX19taWRkbGUsIF9fbGFzdCwgX19sZW4yKTsKCiAgX1RlbXBvcmFyeV9idWZmZXI8
X0JpZGlyZWN0aW9uYWxJdGVyLCBfVHA+IF9fYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgaWYgKF9f
YnVmLmJlZ2luKCkgPT0gMCkKICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19t
aWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsIF9fY29tcCk7CiAgZWxzZQogICAgX19tZXJn
ZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwKICAg
ICAgICAgICAgICAgICAgICAgX19idWYuYmVnaW4oKSwgX0Rpc3RhbmNlKF9fYnVmLnNpemUoKSks
CiAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJl
Y3Rpb25hbEl0ZXI+CmlubGluZSB2b2lkIGlucGxhY2VfbWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVy
IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f
bWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xh
c3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAo
X19maXJzdCA9PSBfX21pZGRsZSB8fCBfX21pZGRsZSA9PSBfX2xhc3QpCiAgICByZXR1cm47CiAg
X19pbnBsYWNlX21lcmdlX2F1eChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLCBfX2Rpc3RhbmNlX3R5cGUoX19maXJz
dCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfQ29tcGFy
ZT4KaW5saW5lIHZvaWQgaW5wbGFjZV9tZXJnZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwgX0NvbXBh
cmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
CgogIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlIHx8IF9fbWlkZGxlID09IF9fbGFzdCkKICAgIHJl
dHVybjsKICBfX2lucGxhY2VfbWVyZ2VfYXV4KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCksIF9fZGlzdGFuY2VfdHlw
ZShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7Cn0KCgoKCgoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KYm9vbCBpbmNsdWRlcyhf
SW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICBf
SW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikKewoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmly
c3QyICE9IF9fbGFzdDIpCiAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICByZXR1
cm4gZmFsc2U7CiAgICBlbHNlIGlmKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICAgKytfX2Zp
cnN0MTsKICAgIGVsc2UKICAgICAgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MjsKCiAgcmV0dXJuIF9f
Zmlyc3QyID09IF9fbGFzdDI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3Mg
X0lucHV0SXRlcjIsIGNsYXNzIF9Db21wYXJlPgpib29sIGluY2x1ZGVzKF9JbnB1dEl0ZXIxIF9f
Zmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9f
Zmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYg
X19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEp
KQogICAgICByZXR1cm4gZmFsc2U7CiAgICBlbHNlIGlmKF9fY29tcCgqX19maXJzdDEsICpfX2Zp
cnN0MikpCiAgICAgICsrX19maXJzdDE7CiAgICBlbHNlCiAgICAgICsrX19maXJzdDEsICsrX19m
aXJzdDI7CgogIHJldHVybiBfX2ZpcnN0MiA9PSBfX2xhc3QyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlcj4KX091dHB1
dEl0ZXIgc2V0X3VuaW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3Qx
LAogICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIy
IF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKewoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgd2hpbGUgKF9fZmlyc3QxICE9
IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgaWYgKCpfX2ZpcnN0MSA8ICpf
X2ZpcnN0MikgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7
CiAgICB9CiAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsKICAgICAgKl9fcmVz
dWx0ID0gKl9fZmlyc3QyOwogICAgICArK19fZmlyc3QyOwogICAgfQogICAgZWxzZSB7CiAgICAg
ICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0
MjsKICAgIH0KICAgICsrX19yZXN1bHQ7CiAgfQogIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xh
c3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwKICAg
ICAgICAgIGNsYXNzIF9Db21wYXJlPgpfT3V0cHV0SXRlciBzZXRfdW5pb24oX0lucHV0SXRlcjEg
X19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICBfSW5w
dXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAg
ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAm
JiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmly
c3QyKSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAg
ICB9CiAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICpf
X3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICAgIGVsc2Ugewog
ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19m
aXJzdDI7CiAgICB9CiAgICArK19fcmVzdWx0OwogIH0KICByZXR1cm4gY29weShfX2ZpcnN0Miwg
X19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXI+
Cl9PdXRwdXRJdGVyIHNldF9pbnRlcnNlY3Rpb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1
dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIg
X19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFz
dDIpCiAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICArK19fZmlyc3QxOwogICAg
ZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICArK19fZmlyc3QyOwogICAgZWxz
ZSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAg
KytfX2ZpcnN0MjsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICByZXR1cm4gX19yZXN1bHQ7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9P
dXRwdXRJdGVyLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+Cl9PdXRwdXRJdGVyIHNldF9pbnRl
cnNlY3Rpb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIy
IF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1
bHQsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIp
CiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgKytfX2ZpcnN0MTsK
ICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICsrX19maXJz
dDI7CiAgICBlbHNlIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmly
c3QxOwogICAgICArK19fZmlyc3QyOwogICAgICArK19fcmVzdWx0OwogICAgfQogIHJldHVybiBf
X3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVy
MiwgY2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0
ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9f
Zmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAg
ICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX3Jlc3Vs
dDsKICAgIH0KICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgKytfX2Zp
cnN0MjsKICAgIGVsc2UgewogICAgICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAg
fQogIHJldHVybiBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVy
LAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+Cl9PdXRwdXRJdGVyIHNldF9kaWZmZXJlbmNlKF9J
bnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9f
Y29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHdoaWxlIChf
X2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoX19jb21w
KCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAg
ICAgICsrX19maXJzdDE7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgICBlbHNlIGlmIChfX2Nv
bXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICArK19fZmlyc3QyOwogICAgZWxzZSB7CiAg
ICAgICsrX19maXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgcmV0dXJuIGNvcHkoX19m
aXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIx
LCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyCnNldF9z
eW1tZXRyaWNfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19s
YXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5w
dXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19y
ZXN1bHQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHdoaWxlIChf
X2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoKl9fZmly
c3QxIDwgKl9fZmlyc3QyKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytf
X2ZpcnN0MTsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8
ICpfX2ZpcnN0MSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICsrX19maXJz
dDI7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKytfX2ZpcnN0MTsK
ICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0Miwg
Y29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsCiAgICAgICAg
ICBjbGFzcyBfQ29tcGFyZT4KX091dHB1dEl0ZXIKc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9J
bnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAg
ICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9f
bGFzdDIpCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAqX19y
ZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19yZXN1bHQ7CiAg
ICB9CiAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICpf
X3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgKytfX2ZpcnN0MjsKICAgICAgKytfX3Jlc3VsdDsK
ICAgIH0KICAgIGVsc2UgewogICAgICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAg
fQogIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3Qx
LCBfX3Jlc3VsdCkpOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPgpfRm9yd2Fy
ZEl0ZXIgbWF4X2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xh
c3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVy
biBfX2ZpcnN0OwogIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgd2hpbGUgKCsr
X19maXJzdCAhPSBfX2xhc3QpCiAgICBpZiAoKl9fcmVzdWx0IDwgKl9fZmlyc3QpCiAgICAgIF9f
cmVzdWx0ID0gX19maXJzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXIsIGNsYXNzIF9Db21wYXJlPgpfRm9yd2FyZEl0ZXIgbWF4X2VsZW1lbnQoX0Zv
cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgaWYgKF9f
Zmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQg
PSBfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgaWYgKF9fY29tcCgq
X19yZXN1bHQsICpfX2ZpcnN0KSkgX19yZXN1bHQgPSBfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3Vs
dDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0ZvcndhcmRJdGVyIG1pbl9lbGVt
ZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQp7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICBf
Rm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19s
YXN0KQogICAgaWYgKCpfX2ZpcnN0IDwgKl9fcmVzdWx0KQogICAgICBfX3Jlc3VsdCA9IF9fZmly
c3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBj
bGFzcyBfQ29tcGFyZT4KX0ZvcndhcmRJdGVyIG1pbl9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2Zp
cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBh
cmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFz
dCkgcmV0dXJuIF9fZmlyc3Q7CiAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICB3
aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QsICpfX3Jl
c3VsdCkpCiAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCgoK
CnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXI+CmJvb2wgbmV4dF9wZXJtdXRhdGlv
bihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkK
ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09
IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19m
aXJzdDsKICArK19faTsKICBpZiAoX19pID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBf
X2kgPSBfX2xhc3Q7CiAgLS1fX2k7CgogIGZvcig7OykgewogICAgX0JpZGlyZWN0aW9uYWxJdGVy
IF9faWkgPSBfX2k7CiAgICAtLV9faTsKICAgIGlmICgqX19pIDwgKl9faWkpIHsKICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgd2hpbGUgKCEoKl9faSA8ICotLV9f
aikpCiAgICAgICAge30KICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgcmV2ZXJzZShf
X2lpLCBfX2xhc3QpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChfX2kgPT0gX19m
aXJzdCkgewogICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIHJldHVybiBmYWxz
ZTsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNz
IF9Db21wYXJlPgpib29sIG5leHRfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmly
c3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfQ29t
cGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAg
aWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9CaWRpcmVjdGlvbmFs
SXRlciBfX2kgPSBfX2ZpcnN0OwogICsrX19pOwogIGlmIChfX2kgPT0gX19sYXN0KQogICAgcmV0
dXJuIGZhbHNlOwogIF9faSA9IF9fbGFzdDsKICAtLV9faTsKCiAgZm9yKDs7KSB7CiAgICBfQmlk
aXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsKICAgIC0tX19pOwogICAgaWYgKF9fY29tcCgqX19p
LCAqX19paSkpIHsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAg
d2hpbGUgKCFfX2NvbXAoKl9faSwgKi0tX19qKSkKICAgICAgICB7fQogICAgICBpdGVyX3N3YXAo
X19pLCBfX2opOwogICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgIHJldHVybiB0cnVl
OwogICAgfQogICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgIHJldmVyc2UoX19maXJzdCwg
X19sYXN0KTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNz
IF9CaWRpcmVjdGlvbmFsSXRlcj4KYm9vbCBwcmV2X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFs
SXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0
dXJuIGZhbHNlOwogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICsrX19pOwog
IGlmIChfX2kgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9faSA9IF9fbGFzdDsKICAt
LV9faTsKCiAgZm9yKDs7KSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsKICAg
IC0tX19pOwogICAgaWYgKCpfX2lpIDwgKl9faSkgewogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19qID0gX19sYXN0OwogICAgICB3aGlsZSAoISgqLS1fX2ogPCAqX19pKSkKICAgICAgICB7fQog
ICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwogICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAg
ICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgIHJl
dmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KfQoK
dGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0NvbXBhcmU+CmJvb2wg
cHJldl9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9u
YWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBpZiAoX19maXJzdCA9PSBf
X2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmly
c3Q7CiAgKytfX2k7CiAgaWYgKF9faSA9PSBfX2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX19p
ID0gX19sYXN0OwogIC0tX19pOwoKICBmb3IoOzspIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf
X2lpID0gX19pOwogICAgLS1fX2k7CiAgICBpZiAoX19jb21wKCpfX2lpLCAqX19pKSkgewogICAg
ICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICB3aGlsZSAoIV9fY29tcCgq
LS1fX2osICpfX2kpKQogICAgICAgIHt9CiAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAg
IHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAo
X19pID09IF9fZmlyc3QpIHsKICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBy
ZXR1cm4gZmFsc2U7CiAgICB9CiAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj
bGFzcyBfRm9yd2FyZEl0ZXI+Cl9JbnB1dEl0ZXIgZmluZF9maXJzdF9vZihfSW5wdXRJdGVyIF9f
Zmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9y
d2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3QyKQp7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwoKCgogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0
MSkKICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3QyOyBfX2l0ZXIgIT0gX19s
YXN0MjsgKytfX2l0ZXIpCiAgICAgIGlmICgqX19maXJzdDEgPT0gKl9faXRlcikKICAgICAgICBy
ZXR1cm4gX19maXJzdDE7CiAgcmV0dXJuIF9fbGFzdDE7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9JbnB1
dEl0ZXIgZmluZF9maXJzdF9vZihfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFz
dDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3
YXJkSXRlciBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0
ZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIGZvciAo
IDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSkKICAgIGZvciAoX0ZvcndhcmRJdGVy
IF9faXRlciA9IF9fZmlyc3QyOyBfX2l0ZXIgIT0gX19sYXN0MjsgKytfX2l0ZXIpCiAgICAgIGlm
IChfX2NvbXAoKl9fZmlyc3QxLCAqX19pdGVyKSkKICAgICAgICByZXR1cm4gX19maXJzdDE7CiAg
cmV0dXJuIF9fbGFzdDE7Cn0KIyAzMzkwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RsX2FsZ28uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0Zvcndh
cmRJdGVyMj4KX0ZvcndhcmRJdGVyMSBfX2ZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEs
IF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJk
SXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKewogIGlm
IChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgcmV0dXJuIF9fbGFzdDE7CiAgZWxzZSB7CiAgICBf
Rm9yd2FyZEl0ZXIxIF9fcmVzdWx0ID0gX19sYXN0MTsKICAgIHdoaWxlICgxKSB7CiAgICAgIF9G
b3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAgICAgPSBzZWFyY2goX19maXJzdDEsIF9fbGFz
dDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKICAgICAgaWYgKF9fbmV3X3Jlc3VsdCA9PSBfX2xhc3Qx
KQogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgZWxzZSB7CiAgICAgICAgX19yZXN1bHQg
PSBfX25ld19yZXN1bHQ7CiAgICAgICAgX19maXJzdDEgPSBfX25ld19yZXN1bHQ7CiAgICAgICAg
KytfX2ZpcnN0MTsKICAgICAgfQogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
SXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjIsCiAgICAgICAgICBjbGFzcyBfQmluYXJ5UHJlZGlj
YXRlPgpfRm9yd2FyZEl0ZXIxIF9fZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0Zv
cndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVy
MiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yd2FyZF9pdGVyYXRvcl90YWcsIGZvcndhcmRfaXRlcmF0b3JfdGFnLAogICAgICAgICAg
ICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCnsKICBpZiAoX19maXJzdDIg
PT0gX19sYXN0MikKICAgIHJldHVybiBfX2xhc3QxOwogIGVsc2UgewogICAgX0ZvcndhcmRJdGVy
MSBfX3Jlc3VsdCA9IF9fbGFzdDE7CiAgICB3aGlsZSAoMSkgewogICAgICBfRm9yd2FyZEl0ZXIx
IF9fbmV3X3Jlc3VsdAogICAgICAgID0gc2VhcmNoKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0
MiwgX19sYXN0MiwgX19jb21wKTsKICAgICAgaWYgKF9fbmV3X3Jlc3VsdCA9PSBfX2xhc3QxKQog
ICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgZWxzZSB7CiAgICAgICAgX19yZXN1bHQgPSBf
X25ld19yZXN1bHQ7CiAgICAgICAgX19maXJzdDEgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgKytf
X2ZpcnN0MTsKICAgICAgfQogICAgfQogIH0KfQoKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rp
b25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyPgpfQmlkaXJlY3Rpb25hbEl0ZXIx
Cl9fZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJ
dGVyMSBfX2xhc3QxLAogICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9C
aWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJh
dG9yX3RhZywgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCnsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICB0eXBlZGVmIHJldmVyc2VfaXRl
cmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMT4gX1Jldkl0ZXIxOwogIHR5cGVkZWYgcmV2ZXJzZV9p
dGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIyPiBfUmV2SXRlcjI7CgogIF9SZXZJdGVyMSBfX3Js
YXN0MShfX2ZpcnN0MSk7CiAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9fZmlyc3QyKTsKICBfUmV2SXRl
cjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJdGVyMShfX2xhc3QxKSwgX19ybGFzdDEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfUmV2SXRlcjIoX19sYXN0MiksIF9fcmxhc3QyKTsK
CiAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKICAgIHJldHVybiBfX2xhc3QxOwogIGVsc2Ug
ewogICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX3Jlc3VsdCA9IF9fcnJlc3VsdC5iYXNlKCk7CiAg
ICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFuY2UoX19maXJzdDIsIF9fbGFzdDIpKTsKICAgIHJl
dHVybiBfX3Jlc3VsdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIx
LCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0JpbmFyeVByZWRp
Y2F0ZT4KX0JpZGlyZWN0aW9uYWxJdGVyMQpfX2ZpbmRfZW5kKF9CaWRpcmVjdGlvbmFsSXRlcjEg
X19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAg
ICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3Jf
dGFnLAogICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQp7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgdHlwZWRlZiByZXZlcnNl
X2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjE+IF9SZXZJdGVyMTsKICB0eXBlZGVmIHJldmVy
c2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMj4gX1Jldkl0ZXIyOwoKICBfUmV2SXRlcjEg
X19ybGFzdDEoX19maXJzdDEpOwogIF9SZXZJdGVyMiBfX3JsYXN0MihfX2ZpcnN0Mik7CiAgX1Jl
dkl0ZXIxIF9fcnJlc3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19sYXN0MSksIF9fcmxhc3QxLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jldkl0ZXIyKF9fbGFzdDIpLCBfX3JsYXN0
MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CgogIGlmIChfX3JyZXN1
bHQgPT0gX19ybGFzdDEpCiAgICByZXR1cm4gX19sYXN0MTsKICBlbHNlIHsKICAgIF9CaWRpcmVj
dGlvbmFsSXRlcjEgX19yZXN1bHQgPSBfX3JyZXN1bHQuYmFzZSgpOwogICAgYWR2YW5jZShfX3Jl
c3VsdCwgLWRpc3RhbmNlKF9fZmlyc3QyLCBfX2xhc3QyKSk7CiAgICByZXR1cm4gX19yZXN1bHQ7
CiAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0
ZXIyPgppbmxpbmUgX0ZvcndhcmRJdGVyMQpmaW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3Qx
LCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIs
IF9Gb3J3YXJkSXRlcjIgX19sYXN0MikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CgoKCiAgcmV0dXJuIF9fZmluZF9lbmQoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBf
X2xhc3QyLAogICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDEp
LAogICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjIsCiAgICAg
ICAgICBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgppbmxpbmUgX0ZvcndhcmRJdGVyMQpmaW5kX2Vu
ZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg
IF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAg
X0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwoKCgogIHJldHVybiBfX2ZpbmRfZW5kKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0Miwg
X19sYXN0MiwKICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3Qx
KSwKICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QyKSwKICAg
ICAgICAgICAgICAgICAgICBfX2NvbXApOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B
Y2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmJvb2wgX19pc19oZWFwKF9SYW5kb21BY2Nlc3NJ
dGVyIF9fZmlyc3QsIF9EaXN0YW5jZSBfX24pCnsKICBfRGlzdGFuY2UgX19wYXJlbnQgPSAwOwog
IGZvciAoX0Rpc3RhbmNlIF9fY2hpbGQgPSAxOyBfX2NoaWxkIDwgX19uOyArK19fY2hpbGQpIHsK
ICAgIGlmIChfX2ZpcnN0W19fcGFyZW50XSA8IF9fZmlyc3RbX19jaGlsZF0pCiAgICAgIHJldHVy
biBmYWxzZTsKICAgIGlmICgoX19jaGlsZCAmIDEpID09IDApCiAgICAgICsrX19wYXJlbnQ7CiAg
fQogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNs
YXNzIF9EaXN0YW5jZSwgY2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4KYm9vbCBfX2lzX2hlYXAo
X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXAsCiAg
ICAgICAgICAgICAgIF9EaXN0YW5jZSBfX24pCnsKICBfRGlzdGFuY2UgX19wYXJlbnQgPSAwOwog
IGZvciAoX0Rpc3RhbmNlIF9fY2hpbGQgPSAxOyBfX2NoaWxkIDwgX19uOyArK19fY2hpbGQpIHsK
ICAgIGlmIChfX2NvbXAoX19maXJzdFtfX3BhcmVudF0sIF9fZmlyc3RbX19jaGlsZF0pKQogICAg
ICByZXR1cm4gZmFsc2U7CiAgICBpZiAoKF9fY2hpbGQgJiAxKSA9PSAwKQogICAgICArK19fcGFy
ZW50OwogIH0KICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyPgppbmxpbmUgYm9vbCBpc19oZWFwKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5k
b21BY2Nlc3NJdGVyIF9fbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
CgogIHJldHVybiBfX2lzX2hlYXAoX19maXJzdCwgX19sYXN0IC0gX19maXJzdCk7Cn0KCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9TdHJpY3RXZWFrT3JkZXJpbmc+
CmlubGluZSBib29sIGlzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9TdHJpY3RXZWFrT3JkZXJpbmcg
X19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHJldHVybiBf
X2lzX2hlYXAoX19maXJzdCwgX19jb21wLCBfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKCgoKCnRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+CmJvb2wgaXNfc29ydGVkKF9Gb3J3YXJkSXRlciBfX2Zp
cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9f
Zmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIHRydWU7CgogIF9Gb3J3YXJkSXRlciBfX25leHQg
PSBfX2ZpcnN0OwogIGZvciAoKytfX25leHQ7IF9fbmV4dCAhPSBfX2xhc3Q7IF9fZmlyc3QgPSBf
X25leHQsICsrX19uZXh0KSB7CiAgICBpZiAoKl9fbmV4dCA8ICpfX2ZpcnN0KQogICAgICByZXR1
cm4gZmFsc2U7CiAgfQoKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
SXRlciwgY2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4KYm9vbCBpc19zb3J0ZWQoX0ZvcndhcmRJ
dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9TdHJpY3RX
ZWFrT3JkZXJpbmcgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIGlmIChfX2ZpcnN0
ID09IF9fbGFzdCkKICAgIHJldHVybiB0cnVlOwoKICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19m
aXJzdDsKICBmb3IgKCsrX19uZXh0OyBfX25leHQgIT0gX19sYXN0OyBfX2ZpcnN0ID0gX19uZXh0
LCArK19fbmV4dCkgewogICAgaWYgKF9fY29tcCgqX19uZXh0LCAqX19maXJzdCkpCiAgICAgIHJl
dHVybiBmYWxzZTsKICB9CgogIHJldHVybiB0cnVlOwp9Cgp9CiMgMzcgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfYWxnb3JpdGhtLmgiIDIgMwojIDUwICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLnRjYyIgMSAzCiMgNDMgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcudGNjIiAzCm5hbWVzcGFjZSBzdGQKewogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgY29uc3QgX0NoYXJUCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+OjoKICAgIF9SZXA6Ol9TX3Rlcm1pbmFsID0gX0NoYXJUKCk7CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY29uc3Qg
dHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBl
CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9SZXA6Ol9T
X21heF9zaXplID0gKCgobnBvcyAtIHNpemVvZihfUmVwKSkvc2l6ZW9mKF9DaGFyVCkpIC0gMSkg
LyA0OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGNvbnN0IHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPjo6bnBvczsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6X1NfZW1wdHlfcmVwX3N0b3JhZ2VbCiAgICAoc2l6ZW9mKF9SZXApICsg
c2l6ZW9mKF9DaGFyVCkgKyBzaXplb2Yoc2l6ZV90eXBlKSAtIDEpL3NpemVvZihzaXplX3R5cGUp
XTsKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlcj4KICAgICAgX0NoYXJU
KgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX1Nf
Y29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19h
LAogICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgICB7CiAgICAgICAg
aWYgKF9fYmVnID09IF9fZW5kICYmIF9fYSA9PSBfQWxsb2MoKSkKICAgICAgICAgIHJldHVybiBf
U19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7CgogICAgICAgIF9DaGFyVCBfX2J1ZlsxMDBdOwog
ICAgICAgIHNpemVfdHlwZSBfX2kgPSAwOwogICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCAm
JiBfX2kgPCBzaXplb2YoX19idWYpIC8gc2l6ZW9mKF9DaGFyVCkpCiAgICAgICAgICB7CiAgICAg
ICAgICAgIF9fYnVmW19faSsrXSA9ICpfX2JlZzsKICAgICAgICAgICAgKytfX2JlZzsKICAgICAg
ICAgIH0KICAgICAgICBfUmVwKiBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19pLCBfX2EpOwogICAg
ICAgIHRyYWl0c190eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0YSgpLCBfX2J1ZiwgX19pKTsKICAg
ICAgICBfX3ItPl9NX2xlbmd0aCA9IF9faTsKICAgICAgICB0cnkKICAgICAgICAgIHsKCgoKICAg
ICAgICAgICAgZm9yICg7OykKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBfQ2hhclQq
IF9fcCA9IF9fci0+X01fcmVmZGF0YSgpICsgX19yLT5fTV9sZW5ndGg7CiAgICAgICAgICAgICAg
ICBfQ2hhclQqIF9fbGFzdCA9IF9fci0+X01fcmVmZGF0YSgpICsgX19yLT5fTV9jYXBhY2l0eTsK
ICAgICAgICAgICAgICAgIGZvciAoOzspCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19wIC0gX19yLT5fTV9yZWZkYXRh
KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICpfX3AgPSBfUmVwOjpfU190ZXJtaW5hbDsKICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChfX3AgPT0gX19sYXN0KQogICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgKl9fcCsrID0gKl9f
YmVnOwogICAgICAgICAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3AgLSBfX3ItPl9NX3JlZmRhdGEoKTsK
ICAgICAgICAgICAgICAgIF9SZXAqIF9fYW5vdGhlciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2xlbiAr
IDEsIF9fYSk7CiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX2Fub3RoZXItPl9N
X3JlZmRhdGEoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fci0+X01fcmVm
ZGF0YSgpLCBfX2xlbik7CiAgICAgICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAg
ICAgICAgICAgICAgIF9fciA9IF9fYW5vdGhlcjsKICAgICAgICAgICAgICAgIF9fci0+X01fbGVu
Z3RoID0gX19sZW47CiAgICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIGNhdGNoKC4u
LikKICAgICAgICAgIHsKICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAg
ICAgIHRocm93OwogICAgICAgICAgfQogICAgICAgIHJldHVybiAwOwogICAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgdGVtcGxhdGUgPGNsYXNzIF9Jbkl0ZXI+CiAgICAgIF9DaGFyVCoKICAgICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz46OgogICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBf
X2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAg
ICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2RuZXcg
PSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KGRpc3RhbmNlKF9fYmVnLCBfX2VuZCkpOwoKICAgICAg
ICBpZiAoX19iZWcgPT0gX19lbmQgJiYgX19hID09IF9BbGxvYygpKQogICAgICAgICAgcmV0dXJu
IF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKTsKCgogICAgICAgIF9SZXAqIF9fciA9IF9SZXA6
Ol9TX2NyZWF0ZShfX2RuZXcsIF9fYSk7CiAgICAgICAgdHJ5CiAgICAgICAgICB7IF9TX2NvcHlf
Y2hhcnMoX19yLT5fTV9yZWZkYXRhKCksIF9fYmVnLCBfX2VuZCk7IH0KICAgICAgICBjYXRjaCgu
Li4pCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAgICAg
ICAgICB0aHJvdzsKICAgICAgICAgIH0KICAgICAgICBfX3ItPl9NX2xlbmd0aCA9IF9fZG5ldzsK
CiAgICAgICAgX19yLT5fTV9yZWZkYXRhKClbX19kbmV3XSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwog
ICAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIF9DaGFy
VCoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cywgX0FsbG9jPjo6CiAgICBfU19jb25z
dHJ1Y3Qoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpCiAgICB7
CiAgICAgIGlmIChfX24gPT0gMCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgICAgICAgcmV0dXJuIF9T
X2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKTsKCgogICAgICBfUmVwKiBfX3IgPSBfUmVwOjpfU19j
cmVhdGUoX19uLCBfX2EpOwogICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICBpZiAoX19uKQog
ICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9fci0+X01fcmVmZGF0YSgpLCBfX24sIF9f
Yyk7CiAgICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX19yLT5f
TV9kZXN0cm95KF9fYSk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICAgIF9fci0+X01f
bGVuZ3RoID0gX19uOwogICAgICBfX3ItPl9NX3JlZmRhdGEoKVtfX25dID0gX1JlcDo6X1NfdGVy
bWluYWw7CiAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhj
b25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgOiBfTV9kYXRhcGx1cyhfX3N0ci5fTV9yZXAo
KS0+X01fZ3JhYihfQWxsb2MoKSwgX19zdHIuZ2V0X2FsbG9jYXRvcigpKSwKICAgICAgICAgICAg
ICAgICBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQWxs
b2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KHNpemVfdHlwZSgpLCBfQ2hh
clQoKSwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBf
X3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQogICAgOiBfTV9kYXRhcGx1cyhf
U19jb25zdHJ1Y3QoX19zdHIuX01fY2hlY2soX19wb3MpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSwgX0FsbG9jKCkpLCBfQWxsb2MoKSkK
ICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBf
X3BvcywKICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSkK
ICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbiksIF9f
YSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUg
X19uLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9f
cywgX19zICsgX19uLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQq
IF9fcywgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChf
X3MsIF9fcyArIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSwgX19hKSwgX19hKQogICAgeyB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNp
Y19zdHJpbmcoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpCiAg
ICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX24sIF9fYywgX19hKSwgX19hKQogICAgeyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcj4KICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKF9JbnB1dEl0ZXIg
X19iZWcsIF9JbnB1dEl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRh
cGx1cyhfU19jb25zdHJ1Y3QoX19iZWcsIF9fZW5kLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6YXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYg
X19zdHIpCiAgICB7CiAgICAgIGlmIChfTV9yZXAoKSAhPSBfX3N0ci5fTV9yZXAoKSkKICAgICAg
ICB7CgogICAgICAgICAgYWxsb2NhdG9yX3R5cGUgX19hID0gdGhpcy0+Z2V0X2FsbG9jYXRvcigp
OwogICAgICAgICAgX0NoYXJUKiBfX3RtcCA9IF9fc3RyLl9NX3JlcCgpLT5fTV9ncmFiKF9fYSwg
X19zdHIuZ2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgIF9NX3JlcCgpLT5fTV9kaXNwb3NlKF9f
YSk7CiAgICAgICAgICBfTV9kYXRhKF9fdG1wKTsKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhp
czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjpfUmVwOjoKICAgIF9NX2Rlc3Ryb3koY29uc3QgX0FsbG9jJiBfX2EpIHRocm93
ICgpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSBzaXplb2YoX1JlcCkgKyAoX01fY2Fw
YWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpOwogICAgICBfUmF3X2J5dGVzX2FsbG9jKF9fYSku
ZGVhbGxvY2F0ZShyZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSwgX19zaXplKTsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjpfTV9sZWFrX2hhcmQoKQogICAgewogICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3NoYXJlZCgp
KQogICAgICAgIF9NX211dGF0ZSgwLCAwLCAwKTsKICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFr
ZWQoKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+OjoKICAgIF9NX211dGF0ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBf
X2xlbjEsIHNpemVfdHlwZSBfX2xlbjIpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX29sZF9zaXpl
ID0gdGhpcy0+c2l6ZSgpOwogICAgICBjb25zdCBzaXplX3R5cGUgX19uZXdfc2l6ZSA9IF9fb2xk
X3NpemUgKyBfX2xlbjIgLSBfX2xlbjE7CiAgICAgIGNvbnN0IF9DaGFyVCogX19zcmMgPSBfTV9k
YXRhKCkgKyBfX3BvcyArIF9fbGVuMTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9faG93X211Y2gg
PSBfX29sZF9zaXplIC0gX19wb3MgLSBfX2xlbjE7CgogICAgICBpZiAoX01fcmVwKCktPl9NX2lz
X3NoYXJlZCgpIHx8IF9fbmV3X3NpemUgPiBjYXBhY2l0eSgpKQogICAgICAgIHsKCiAgICAgICAg
ICBhbGxvY2F0b3JfdHlwZSBfX2EgPSBnZXRfYWxsb2NhdG9yKCk7CiAgICAgICAgICBfUmVwKiBf
X3IgPSBfUmVwOjpfU19jcmVhdGUoX19uZXdfc2l6ZSwgX19hKTsKICAgICAgICAgIHRyeQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9fcG9zKQogICAgICAgICAgICAgICAgdHJhaXRz
X3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9NX2RhdGEoKSwgX19wb3MpOwogICAgICAg
ICAgICAgIGlmIChfX2hvd19tdWNoKQogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHko
X19yLT5fTV9yZWZkYXRhKCkgKyBfX3BvcyArIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fc3JjLCBfX2hvd19tdWNoKTsKICAgICAgICAgICAgfQogICAgICAgICAg
Y2F0Y2goLi4uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19yLT5fTV9kaXNwb3NlKGdl
dF9hbGxvY2F0b3IoKSk7CiAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIF9NX3JlcCgpLT5fTV9kaXNwb3NlKF9fYSk7CiAgICAgICAgICBfTV9kYXRhKF9fci0+X01f
cmVmZGF0YSgpKTsKICAgICAgfQogICAgICBlbHNlIGlmIChfX2hvd19tdWNoICYmIF9fbGVuMSAh
PSBfX2xlbjIpCiAgICAgICAgewoKICAgICAgICAgIHRyYWl0c190eXBlOjptb3ZlKF9NX2RhdGEo
KSArIF9fcG9zICsgX19sZW4yLCBfX3NyYywgX19ob3dfbXVjaCk7CiAgICAgICAgfQogICAgICBf
TV9yZXAoKS0+X01fc2V0X3NoYXJhYmxlKCk7CiAgICAgIF9NX3JlcCgpLT5fTV9sZW5ndGggPSBf
X25ld19zaXplOwogICAgICBfTV9kYXRhKClbX19uZXdfc2l6ZV0gPSBfUmVwOjpfU190ZXJtaW5h
bDsKCiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPjo6cmVzZXJ2ZShzaXplX3R5cGUgX19yZXMpCiAgICB7CiAgICAgIGlmIChfX3Jl
cyA+IHRoaXMtPmNhcGFjaXR5KCkgfHwgX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpKQogICAgICAg
IHsKICAgICAgICAgIGlmIChfX3JlcyA+IHRoaXMtPm1heF9zaXplKCkpCiAgICAgICAgICAgIF9f
dGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OnJlc2VydmUiKTsKICAgICAgICAgIGFs
bG9jYXRvcl90eXBlIF9fYSA9IGdldF9hbGxvY2F0b3IoKTsKICAgICAgICAgIF9DaGFyVCogX190
bXAgPSBfTV9yZXAoKS0+X01fY2xvbmUoX19hLCBfX3JlcyAtIHRoaXMtPnNpemUoKSk7CiAgICAg
ICAgICBfTV9yZXAoKS0+X01fZGlzcG9zZShfX2EpOwogICAgICAgICAgX01fZGF0YShfX3RtcCk7
CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6c3dhcChiYXNpY19zdHJpbmcmIF9fcykKICAgIHsKICAgICAgaWYgKF9N
X3JlcCgpLT5fTV9pc19sZWFrZWQoKSkKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X3NoYXJhYmxl
KCk7CiAgICAgIGlmIChfX3MuX01fcmVwKCktPl9NX2lzX2xlYWtlZCgpKQogICAgICAgIF9fcy5f
TV9yZXAoKS0+X01fc2V0X3NoYXJhYmxlKCk7CiAgICAgIGlmICh0aGlzLT5nZXRfYWxsb2NhdG9y
KCkgPT0gX19zLmdldF9hbGxvY2F0b3IoKSkKICAgICAgICB7CiAgICAgICAgICBfQ2hhclQqIF9f
dG1wID0gX01fZGF0YSgpOwogICAgICAgICAgX01fZGF0YShfX3MuX01fZGF0YSgpKTsKICAgICAg
ICAgIF9fcy5fTV9kYXRhKF9fdG1wKTsKICAgICAgICB9CgogICAgICBlbHNlCiAgICAgICAgewog
ICAgICAgICAgYmFzaWNfc3RyaW5nIF9fdG1wMShfTV9pYmVnaW4oKSwgX01faWVuZCgpLCBfX3Mu
Z2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgIGJhc2ljX3N0cmluZyBfX3RtcDIoX19zLl9NX2li
ZWdpbigpLCBfX3MuX01faWVuZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
LT5nZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAgKnRoaXMgPSBfX3RtcDI7CiAgICAgICAgICBf
X3MgPSBfX3RtcDE7CiAgICAgICAgfQogICAgfQojIDM1NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXAqCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+OjpfUmVwOjoKICAgIF9TX2NyZWF0ZShzaXplX3QgX19jYXBhY2l0eSwgY29u
c3QgX0FsbG9jJiBfX2FsbG9jKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKCgogICAgICBpZiAoX19jYXBhY2l0
eSA+IF9TX21heF9zaXplKQoKCgogICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19z
dHJpbmc6Ol9TX2NyZWF0ZSIpOwoKCgoKICAgICAgc2l6ZV90IF9fc2l6ZSA9IChfX2NhcGFjaXR5
ICsgMSkgKiBzaXplb2YoX0NoYXJUKSArIHNpemVvZihfUmVwKTsKCgogICAgICB2b2lkKiBfX3Bs
YWNlID0gX1Jhd19ieXRlc19hbGxvYyhfX2FsbG9jKS5hbGxvY2F0ZShfX3NpemUpOwogICAgICBf
UmVwICpfX3AgPSBuZXcgKF9fcGxhY2UpIF9SZXA7CiAgICAgIF9fcC0+X01fY2FwYWNpdHkgPSBf
X2NhcGFjaXR5OwogICAgICBfX3AtPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBfX3AtPl9NX2xl
bmd0aCA9IDA7CiAgICAgIHJldHVybiBfX3A7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgX0NoYXJUKgogICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CiAgICBfTV9jbG9u
ZShjb25zdCBfQWxsb2MmIF9fYWxsb2MsIHNpemVfdHlwZSBfX3JlcykKICAgIHsKICAgICAgX1Jl
cCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9NX2xlbmd0aCArIF9fcmVzLCBfX2FsbG9jKTsKICAg
ICAgaWYgKF9NX2xlbmd0aCkKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyB0
cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSwgX01fcmVmZGF0YSgpLCBfTV9sZW5n
dGgpOyB9CiAgICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBf
X3ItPl9NX2Rlc3Ryb3koX19hbGxvYyk7CiAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICAgIF9fci0+X01fbGVuZ3RoID0gX01fbGVuZ3RoOwogICAgICByZXR1
cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogIGlubGluZSBib29sCgoKCgogICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CiAgICBfU19leGNl
c3Nfc2xvcChzaXplX3QgX19zLCBzaXplX3QgX19yKQoKICAgIHsKICAgICAgcmV0dXJuIDIgKiAo
X19zIDw9IDE2ID8gMTYgOiBfX3MpIDwgX19yOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnJlc2l6ZShzaXplX3R5cGUgX19u
LCBfQ2hhclQgX19jKQogICAgewogICAgICBpZiAoX19uID4gbWF4X3NpemUoKSkKICAgICAgICBf
X3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXNpemUiKTsKICAgICAgc2l6ZV90
eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSA8IF9fbikKICAgICAg
ICB0aGlzLT5hcHBlbmQoX19uIC0gX19zaXplLCBfX2MpOwogICAgICBlbHNlIGlmIChfX24gPCBf
X3NpemUpCiAgICAgICAgdGhpcy0+ZXJhc2UoX19uKTsKCiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxh
dGU8dHlwZW5hbWUgX0lucHV0SXRlcj4KICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiYKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
CiAgICAgIF9NX3JlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0lucHV0SXRl
ciBfX2sxLAogICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19rMiwgaW5wdXRfaXRlcmF0b3Jf
dGFnKQogICAgICB7CiAgICAgICAgYmFzaWNfc3RyaW5nIF9fcyhfX2sxLCBfX2syKTsKICAgICAg
ICByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxLCBfX2kyLCBfX3MuX01faWJlZ2luKCksIF9fcy5f
TV9pZW5kKCkpOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ
dGVyPgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgICBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX01fcmVwbGFjZShp
dGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfRm9yd2FyZEl0ZXIgX19rMSwKICAgICAgICAg
ICAgICAgICBfRm9yd2FyZEl0ZXIgX19rMiwgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICAgIHsK
ICAgICAgICBzaXplX3R5cGUgX19kb2xkID0gX19pMiAtIF9faTE7CiAgICAgICAgc2l6ZV90eXBl
IF9fZG1heCA9IHRoaXMtPm1heF9zaXplKCk7CiAgICAgICAgc2l6ZV90eXBlIF9fZG5ldyA9IHN0
YXRpY19jYXN0PHNpemVfdHlwZT4oZGlzdGFuY2UoX19rMSwgX19rMikpOwoKICAgICAgICBpZiAo
X19kbWF4IDw9IF9fZG5ldykKICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19z
dHJpbmc6Ol9NX3JlcGxhY2UiKTsKICAgICAgICBzaXplX3R5cGUgX19vZmYgPSBfX2kxIC0gX01f
aWJlZ2luKCk7CiAgICAgICAgX01fbXV0YXRlKF9fb2ZmLCBfX2RvbGQsIF9fZG5ldyk7CgogICAg
ICAgIGlmIChfX2RuZXcpCiAgICAgICAgICBfU19jb3B5X2NoYXJzKF9NX2RhdGEoKSArIF9fb2Zm
LCBfX2sxLCBfX2syKTsKCiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MxLCBz
aXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgc2l6
ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpCiAgICB7CiAgICAgIHJldHVybiB0aGlzLT5y
ZXBsYWNlKF9NX2NoZWNrKF9fcG9zMSksIF9NX2ZvbGQoX19wb3MxLCBfX24xKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19zdHIuX01fY2hlY2soX19wb3MyKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvczIsIF9fbjIpKTsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsX1RyYWl0cyxfQWxsb2M+OjoKICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9f
c3RyKQogICAgewoKCgogICAgICBzaXplX3R5cGUgX19zaXplID0gX19zdHIuc2l6ZSgpOwogICAg
ICBzaXplX3R5cGUgX19sZW4gPSBfX3NpemUgKyB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX2xl
biA+IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAg
IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX3N0ci5fTV9pYmVn
aW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01faWVuZCgpKTsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYKICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+OjoKICAgIGFwcGVuZChjb25zdCBiYXNpY19z
dHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCiAgICB7CgoKCiAg
ICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3N0ci5zaXplKCkgLSBfX3BvcywgX19uKSArIHRo
aXMtPnNpemUoKTsKICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAgICAgICB0
aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgp
LCBfTV9pZW5kKCksIF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9U
cmFpdHMsX0FsbG9jPjo6CiAgICBhcHBlbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBf
X24pCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fbiArIHRoaXMtPnNpemUoKTsKICAg
ICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAgICAgICB0aGlzLT5yZXNlcnZlKF9f
bGVuKTsKICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9f
cywgX19zICsgX19uKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFp
dHMsX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+OjoKICAg
IGFwcGVuZChzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQogICAgewogICAgICBzaXplX3R5cGUg
X19sZW4gPSBfX24gKyB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFj
aXR5KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgICByZXR1cm4gdGhpcy0+
cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19uLCBfX2MpOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3Qg
X0NoYXJUKiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1Ry
YWl0cyxfQWxsb2M+JiBfX3JocykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0No
YXJULF9UcmFpdHMsX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKICAgICAgX19zaXplX3R5cGUg
X19sZW4gPSBfVHJhaXRzOjpsZW5ndGgoX19saHMpOwogICAgICBfX3N0cmluZ190eXBlIF9fc3Ry
OwogICAgICBfX3N0ci5yZXNlcnZlKF9fbGVuICsgX19yaHMuc2l6ZSgpKTsKICAgICAgX19zdHIu
YXBwZW5kKF9fbGhzLCBfX2xocyArIF9fbGVuKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsK
ICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
X1RyYWl0cyxfQWxsb2M+CiAgICBvcGVyYXRvcisoX0NoYXJUIF9fbGhzLCBjb25zdCBiYXNpY19z
dHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19yaHMpCiAgICB7CiAgICAgIHR5cGVkZWYg
YmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAg
ICAgIF9fc3RyaW5nX3R5cGUgX19zdHI7CiAgICAgIF9fc2l6ZV90eXBlIF9fbGVuID0gX19yaHMu
c2l6ZSgpOwogICAgICBfX3N0ci5yZXNlcnZlKF9fbGVuICsgMSk7CiAgICAgIF9fc3RyLmFwcGVu
ZChfX3NpemVfdHlwZSgxKSwgX19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAg
ICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
OgogICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBzaXplX3R5cGUgX19u
MiwgX0NoYXJUIF9fYykKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fbjEgPSBfX2kyIC0gX19pMTsK
ICAgICAgc2l6ZV90eXBlIF9fb2ZmMSA9IF9faTEgLSBfTV9pYmVnaW4oKTsKICAgICAgaWYgKG1h
eF9zaXplKCkgLSAodGhpcy0+c2l6ZSgpIC0gX19uMSkgPD0gX19uMikKICAgICAgICBfX3Rocm93
X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXBsYWNlIik7CiAgICAgIF9NX211dGF0ZSAo
X19vZmYxLCBfX24xLCBfX24yKTsKCiAgICAgIGlmIChfX24yKQogICAgICAgIHRyYWl0c190eXBl
Ojphc3NpZ24oX01fZGF0YSgpICsgX19vZmYxLCBfX24yLCBfX2MpOwogICAgICByZXR1cm4gKnRo
aXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
Pjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoK
ICAgIGNvcHkoX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIHNpemVfdHlwZSBfX3BvcykgY29u
c3QKICAgIHsKICAgICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICAgICAgIF9fdGhyb3df
b3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvcHkiKTsKCiAgICAgIGlmIChfX24gPiB0aGlz
LT5zaXplKCkgLSBfX3BvcykKICAgICAgICBfX24gPSB0aGlzLT5zaXplKCkgLSBfX3BvczsKCiAg
ICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcywgX01fZGF0YSgpICsgX19wb3MsIF9fbik7CgogICAg
ICByZXR1cm4gX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPjo6CiAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNp
emVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5z
aXplKCk7CiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsKICAgICAgY29uc3QgX0NoYXJUKiBf
X2RhdGEgPSBfTV9kYXRhKCk7CiAgICAgIGZvciAoOyBfX3hwb3MgKyBfX24gPD0gX19zaXplOyAr
K19feHBvcykKICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmNvbXBhcmUoX19kYXRhICsgX194cG9z
LCBfX3MsIF9fbikgPT0gMCkKICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAgIHJldHVybiBu
cG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
CiAgICBmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAg
c2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6ZV90eXBlIF9fcmV0ID0g
bnBvczsKICAgICAgaWYgKF9fcG9zIDwgX19zaXplKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0
IF9DaGFyVCogX19kYXRhID0gX01fZGF0YSgpOwogICAgICAgICAgc2l6ZV90eXBlIF9fbiA9IF9f
c2l6ZSAtIF9fcG9zOwogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3AgPSB0cmFpdHNfdHlwZTo6
ZmluZChfX2RhdGEgKyBfX3BvcywgX19uLCBfX2MpOwogICAgICAgICAgaWYgKF9fcCkKICAgICAg
ICAgICAgX19yZXQgPSBfX3AgLSBfX2RhdGE7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7
CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg
ICByZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19u
KSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAg
ICBpZiAoX19uIDw9IF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBfX3BvcyA9IHN0ZDo6bWlu
KF9fc2l6ZSAtIF9fbiAsX19wb3MpOwogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2RhdGEgPSBf
TV9kYXRhKCk7CiAgICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKHRy
YWl0c190eXBlOjpjb21wYXJlKF9fZGF0YSArIF9fcG9zLCBfX3MsIF9fbikgPT0gMCkKICAgICAg
ICAgICAgICAgIHJldHVybiBfX3BvczsKICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9f
cG9zLS0gPiAwKTsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICByZmluZChfQ2hhclQgX19j
LCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0
aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90
IF9feHBvcyA9IF9fc2l6ZSAtIDE7CiAgICAgICAgICBpZiAoX194cG9zID4gX19wb3MpCiAgICAg
ICAgICAgIF9feHBvcyA9IF9fcG9zOwoKICAgICAgICAgIGZvciAoKytfX3hwb3M7IF9feHBvcy0t
ID4gMDsgKQogICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxKF9NX2RhdGEoKVtfX3hwb3Nd
LCBfX2MpKQogICAgICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAgICAgfQogICAgICByZXR1
cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46OgogICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9z
LCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBmb3IgKDsgX19uICYmIF9fcG9zIDwg
dGhpcy0+c2l6ZSgpOyArK19fcG9zKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0IF9DaGFyVCog
X19wID0gdHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3Bvc10pOwogICAg
ICAgICAgaWYgKF9fcCkKICAgICAgICAgICAgcmV0dXJuIF9fcG9zOwogICAgICAgIH0KICAgICAg
cmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+OjoKICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9f
cG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0g
dGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplICYmIF9fbikKICAgICAgICB7CiAgICAgICAg
ICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAgICAg
ICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjpmaW5k
KF9fcywgX19uLCBfTV9kYXRhKClbX19zaXplXSkpCiAgICAgICAgICAgICAgICByZXR1cm4gX19z
aXplOwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXplLS0gIT0gMCk7CiAgICAg
ICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBf
X3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6
ZV90IF9feHBvcyA9IF9fcG9zOwogICAgICBmb3IgKDsgX19uICYmIF9feHBvcyA8IHRoaXMtPnNp
emUoKTsgKytfX3hwb3MpCiAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwg
X01fZGF0YSgpW19feHBvc10pKQogICAgICAgICAgcmV0dXJuIF9feHBvczsKICAgICAgcmV0dXJu
IG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjoKICAgIGZpbmRfZmlyc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29u
c3QKICAgIHsKICAgICAgc2l6ZV90IF9feHBvcyA9IF9fcG9zOwogICAgICBmb3IgKDsgX194cG9z
IDwgdGhpcy0+c2l6ZSgpOyArK19feHBvcykKICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcShf
TV9kYXRhKClbX194cG9zXSwgX19jKSkKICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAgIHJl
dHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6CiAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUg
X19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUg
PSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUgJiYgX19uKQogICAgICAgIHsKICAgICAg
ICAgIGlmICgtLV9fc2l6ZSA+IF9fcG9zKQogICAgICAgICAgICBfX3NpemUgPSBfX3BvczsKICAg
ICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjpm
aW5kKF9fcywgX19uLCBfTV9kYXRhKClbX19zaXplXSkpCiAgICAgICAgICAgICAgICByZXR1cm4g
X19zaXplOwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXplLS0pOwogICAgICAg
IH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfbGFzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90
eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6
ZSgpOwogICAgICBpZiAoX19zaXplKQogICAgICAgIHsKICAgICAgICAgIGlmICgtLV9fc2l6ZSA+
IF9fcG9zKQogICAgICAgICAgICBfX3NpemUgPSBfX3BvczsKICAgICAgICAgIGRvCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcShfTV9kYXRhKClbX19zaXpl
XSwgX19jKSkKICAgICAgICAgICAgICAgIHJldHVybiBfX3NpemU7CiAgICAgICAgICAgIH0KICAg
ICAgICAgIHdoaWxlIChfX3NpemUtLSk7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IGJh
c2ljX3N0cmluZyYgX19zdHIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0
aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOwogICAg
ICBpZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2lj
X3N0cmluZzo6Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fcnNpemU9IG1pbihfX3NpemUg
LSBfX3BvcywgX19uKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9fb3Np
emUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19w
b3MsIF9fc3RyLmRhdGEoKSwgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBf
X3JzaXplIC0gX19vc2l6ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQK
ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29tcGFyZShz
aXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0
ciwKICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpIGNvbnN0CiAg
ICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdHlw
ZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBpZiAoX19wb3MxID4gX19zaXplIHx8IF9f
cG9zMiA+IF9fb3NpemUpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmlu
Zzo6Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fcnNpemUgPSBtaW4oX19zaXplIC0gX19w
b3MxLCBfX24xKTsKICAgICAgc2l6ZV90eXBlIF9fcm9zaXplID0gbWluKF9fb3NpemUgLSBfX3Bv
czIsIF9fbjIpOwogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19yc2l6ZSwgX19yb3NpemUp
OwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3Mx
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuZGF0YSgpICsgX19w
b3MyLCBfX2xlbik7CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBfX3Jv
c2l6ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoY29uc3QgX0NoYXJU
KiBfX3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7
CiAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCksIF9fcywgX19z
aXplKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19zaXplIC0gdHJhaXRzX3R5cGU6
Omxlbmd0aChfX3MpOwogICAgICByZXR1cm4gX19yOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAg
IGJhc2ljX3N0cmluZyA8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6CiAgICBjb21wYXJlKHNpemVf
dHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKSBjb25zdAogICAg
ewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19wb3Mg
PiBfX3NpemUpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29t
cGFyZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9f
cyk7CiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6ZSAtIF9fcG9zLCBfX24xKTsK
ICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9fb3NpemUpOwogICAgICBpbnQg
X19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MsIF9fcywgX19sZW4p
OwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19vc2l6ZTsKICAgICAg
cmV0dXJuIF9fcjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZyA8X0NoYXJU
LF9UcmFpdHMsX0FsbG9jPjo6CiAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBl
IF9fbjEsIGNvbnN0IF9DaGFyVCogX19zLAogICAgICAgICAgICBzaXplX3R5cGUgX19uMikgY29u
c3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYg
KF9fcG9zID4gX19zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJp
bmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gbWluKHRyYWl0c190eXBl
OjpsZW5ndGgoX19zKSwgX19uMik7CiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6
ZSAtIF9fcG9zLCBfX24xKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9f
b3NpemUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsg
X19wb3MsIF9fcywgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXpl
IC0gX19vc2l6ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9D
aGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPgogICAgdm9pZAogICAgX1Nfc3RyaW5n
X2NvcHkoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIs
CiAgICAgICAgICAgICAgICAgICBfQ2hhclQqIF9fYnVmLCB0eXBlbmFtZSBfQWxsb2M6OnNpemVf
dHlwZSBfX2J1ZnNpeikKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVf
dHlwZSBzaXplX3R5cGU7CiAgICAgIHNpemVfdHlwZSBfX3N0cnNpemUgPSBfX3N0ci5zaXplKCk7
CiAgICAgIHNpemVfdHlwZSBfX2J5dGVzID0gbWluKF9fc3Ryc2l6ZSwgX19idWZzaXogLSAxKTsK
ICAgICAgX1RyYWl0czo6Y29weShfX2J1ZiwgX19zdHIuZGF0YSgpLCBfX2J5dGVzKTsKICAgICAg
X19idWZbX19ieXRlc10gPSBfQ2hhclQoKTsKICAgIH0KfQojIDUxICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMKIyA0MyAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RkX2NjdHlwZS5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9jY3R5cGUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAxIDMKIyAz
OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jY3R5cGUuaCIgMiAzCiMgNTUg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2N0eXBlLmgiIDMKbmFtZXNwYWNl
IHN0ZAp7CiAgdXNpbmcgOjppc2FsbnVtOwogIHVzaW5nIDo6aXNhbHBoYTsKICB1c2luZyA6Omlz
Y250cmw7CiAgdXNpbmcgOjppc2RpZ2l0OwogIHVzaW5nIDo6aXNncmFwaDsKICB1c2luZyA6Omlz
bG93ZXI7CiAgdXNpbmcgOjppc3ByaW50OwogIHVzaW5nIDo6aXNwdW5jdDsKICB1c2luZyA6Omlz
c3BhY2U7CiAgdXNpbmcgOjppc3VwcGVyOwogIHVzaW5nIDo6aXN4ZGlnaXQ7CiAgdXNpbmcgOjp0
b2xvd2VyOwogIHVzaW5nIDo6dG91cHBlcjsKfQojIDQ0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2JpdHMvbG9jYWxlZndkLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2V4Y2Vw
dGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
ZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFk
X2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgog
IHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlw
ZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19z
KTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZv
aWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog
IF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93
X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1l
X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNv
bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNo
YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBf
X3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQoj
IDQ1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDIgMwoKbmFt
ZXNwYWNlIHN0ZAp7CiMgNTYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVm
d2QuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xh
c3MgdmVjdG9yOwogIGNsYXNzIGxvY2FsZTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K
ICAgIGlubGluZSBib29sCiAgICBpc3NwYWNlKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3ByaW50KF9DaGFy
VCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGlu
ZSBib29sCiAgICBpc2NudHJsKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3VwcGVyKF9DaGFyVCwgY29uc3Qg
bG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAg
ICBpc2xvd2VyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FscGhhKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2RpZ2l0
KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg
IGlubGluZSBib29sCiAgICBpc3B1bmN0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3hkaWdpdChfQ2hhclQs
IGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUg
Ym9vbAogICAgaXNhbG51bShfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNncmFwaChfQ2hhclQsIGNvbnN0IGxv
Y2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0NoYXJUCiAg
ICB0b3VwcGVyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVD4KICAgIGlubGluZSBfQ2hhclQKICAgIHRvbG93ZXIoX0NoYXJULCBjb25zdCBsb2NhbGUm
KTsKCgoKICBjbGFzcyBjdHlwZV9iYXNlOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg
IGNsYXNzIGN0eXBlOwogIHRlbXBsYXRlPD4gY2xhc3MgY3R5cGU8Y2hhcj47CgoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGVfYnluYW1lOwoKCiAgY2xhc3MgY29k
ZWN2dF9iYXNlOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJu
VCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGNvZGVjdnQ7CiAgdGVtcGxhdGU8PiBjbGFz
cyBjb2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD47CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3Mg
Y29kZWN2dF9ieW5hbWU7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9J
bkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgbnVtX2dldDsK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1
Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG51bV9wdXQ7CiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPiBjbGFzcyBudW1wdW5jdDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+IGNs
YXNzIG51bXB1bmN0X2J5bmFtZTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNs
YXNzIGNvbGxhdGU7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBjbGFzcwogICAgY29sbGF0
ZV9ieW5hbWU7CgoKICBjbGFzcyB0aW1lX2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNs
YXNzIHRpbWVfZ2V0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRl
ciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyB0aW1lX2dldF9ieW5h
bWU7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJl
YW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyB0aW1lX3B1dDsKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxf
Q2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfcHV0X2J5bmFtZTsKCgogIGNsYXNzIG1vbmV5X2Jhc2U7
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1
Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG1vbmV5X2dldDsKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hh
clQ+ID4KICAgIGNsYXNzIG1vbmV5X3B1dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJv
b2wgX0ludGwgPSBmYWxzZT4KICAgIGNsYXNzIG1vbmV5cHVuY3Q7CiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCBib29sIF9JbnRsID0gZmFsc2U+CiAgICBjbGFzcyBtb25leXB1bmN0X2J5bmFt
ZTsKCgogIGNsYXNzIG1lc3NhZ2VzX2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog
ICAgY2xhc3MgbWVzc2FnZXM7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3Mg
bWVzc2FnZXNfYnluYW1lOwoKCiAgY2xhc3MgbG9jYWxlCiAgewogIHB1YmxpYzoKCiAgICB0eXBl
ZGVmIHVuc2lnbmVkIGludCBjYXRlZ29yeTsKCgogICAgY2xhc3MgZmFjZXQ7CiAgICBjbGFzcyBp
ZDsKICAgIGNsYXNzIF9JbXBsOwoKICAgIGZyaWVuZCBjbGFzcyBmYWNldDsKICAgIGZyaWVuZCBj
bGFzcyBfSW1wbDsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBj
b25zdCBfRmFjZXQmCiAgICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmKTsKCiAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBib29sCiAgICAgIGhhc19mYWNldChjb25z
dCBsb2NhbGUmKSB0aHJvdygpOwoKCgogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG5vbmUgPSAw
OwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGN0eXBlID0gMUwgPDwgMDsKICAgIHN0YXRpYyBj
b25zdCBjYXRlZ29yeSBudW1lcmljID0gMUwgPDwgMTsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29y
eSBjb2xsYXRlID0gMUwgPDwgMjsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSB0aW1lID0gMUwg
PDwgMzsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBtb25ldGFyeSA9IDFMIDw8IDQ7CiAgICBz
dGF0aWMgY29uc3QgY2F0ZWdvcnkgbWVzc2FnZXMgPSAxTCA8PCA1OwogICAgc3RhdGljIGNvbnN0
IGNhdGVnb3J5IGFsbCA9IChjb2xsYXRlIHwgY3R5cGUgfCBtb25ldGFyeSB8CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1lcmljIHwgdGltZSB8IG1lc3NhZ2Vz
KTsKCgogICAgbG9jYWxlKCkgdGhyb3coKTsKCiAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290
aGVyKSB0aHJvdygpOwoKICAgIGV4cGxpY2l0CiAgICBsb2NhbGUoY29uc3QgY2hhciogX19zdGRf
bmFtZSk7CgogICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19iYXNlLCBjb25zdCBjaGFyKiBfX3Ms
IGNhdGVnb3J5IF9fY2F0KTsKCiAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX2Jhc2UsIGNvbnN0
IGxvY2FsZSYgX19hZGQsIGNhdGVnb3J5IF9fY2F0KTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
RmFjZXQ+CiAgICAgIGxvY2FsZShjb25zdCBsb2NhbGUmIF9fb3RoZXIsIF9GYWNldCogX19mKTsK
CiAgICB+bG9jYWxlKCkgdGhyb3coKTsKCiAgICBjb25zdCBsb2NhbGUmCiAgICBvcGVyYXRvcj0o
Y29uc3QgbG9jYWxlJiBfX290aGVyKSB0aHJvdygpOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9G
YWNldD4KICAgICAgbG9jYWxlCiAgICAgIGNvbWJpbmUoY29uc3QgbG9jYWxlJiBfX290aGVyKTsK
CgogICAgc3RyaW5nCiAgICBuYW1lKCkgY29uc3Q7CgogICAgYm9vbAogICAgb3BlcmF0b3I9PShj
b25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0IHRocm93ICgpOwoKICAgIGlubGluZSBib29sCiAg
ICBvcGVyYXRvciE9KGNvbnN0IGxvY2FsZSYgX19vdGhlcikgY29uc3QgdGhyb3cgKCkKICAgIHsg
cmV0dXJuICEodGhpcy0+b3BlcmF0b3I9PShfX290aGVyKSk7IH0KCiAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhciwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgICBib29s
CiAgICAgIG9wZXJhdG9yKCkoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyLCBfVHJhaXRzLCBfQWxs
b2M+JiBfX3MxLAogICAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhciwgX1Ry
YWl0cywgX0FsbG9jPiYgX19zMikgY29uc3Q7CgoKICAgIHN0YXRpYyBsb2NhbGUKICAgIGdsb2Jh
bChjb25zdCBsb2NhbGUmKTsKCiAgICBzdGF0aWMgY29uc3QgbG9jYWxlJgogICAgY2xhc3NpYygp
OwoKICBwcml2YXRlOgoKICAgIF9JbXBsKiBfTV9pbXBsOwoKCiAgICBzdGF0aWMgX0ltcGwqIF9T
X2NsYXNzaWM7CgoKICAgIHN0YXRpYyBfSW1wbCogX1NfZ2xvYmFsOwoKICAgIHN0YXRpYyBjb25z
dCBzaXplX3QgX1NfbnVtX2NhdGVnb3JpZXMgPSA2OwogICAgc3RhdGljIGNvbnN0IHNpemVfdCBf
U19udW1fZmFjZXRzID0gMTM7CgogICAgZXhwbGljaXQKICAgIGxvY2FsZShfSW1wbCopIHRocm93
KCk7CgogICAgc3RhdGljIGlubGluZSB2b2lkCiAgICBfU19pbml0aWFsaXplKCkKICAgIHsgaWYg
KCFfU19jbGFzc2ljKSBjbGFzc2ljKCk7IH0KCiAgICBzdGF0aWMgY2F0ZWdvcnkKICAgIF9TX25v
cm1hbGl6ZV9jYXRlZ29yeShjYXRlZ29yeSk7CgogICAgdm9pZAogICAgX01fY29hbGVzY2UoY29u
c3QgbG9jYWxlJiBfX2Jhc2UsIGNvbnN0IGxvY2FsZSYgX19hZGQsIGNhdGVnb3J5IF9fY2F0KTsK
ICB9OwoKCgogIGNsYXNzIGxvY2FsZTo6X0ltcGwKICB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYg
dmVjdG9yPGZhY2V0KiwgYWxsb2NhdG9yPGZhY2V0Kj4gPiBfX3ZlY19mYWNldDsKCgogICAgZnJp
ZW5kIGNsYXNzIGxvY2FsZTsKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU6OmZhY2V0OwoKICAgIHRl
bXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGNvbnN0IF9GYWNldCYKICAgICAg
dXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4K
ICAgICAgZnJpZW5kIGJvb2wKICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRocm93KCk7
CgogIHByaXZhdGU6CgogICAgc2l6ZV90IF9NX3JlZmVyZW5jZXM7CiAgICBfX3ZlY19mYWNldCog
X01fZmFjZXRzOwogICAgc3RyaW5nIF9NX25hbWVzW19TX251bV9jYXRlZ29yaWVzXTsKICAgIF9f
Y19sb2NhbGUgX01fY19sb2NhbGU7CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3Qg
X1NfaWRfY3R5cGVbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9u
dW1lcmljW107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfY29sbGF0
ZVtdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX3RpbWVbXTsKICAg
IHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9tb25ldGFyeVtdOwogICAgc3Rh
dGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX21lc3NhZ2VzW107CiAgICBzdGF0aWMg
Y29uc3QgbG9jYWxlOjppZCogY29uc3QqIGNvbnN0IF9TX2ZhY2V0X2NhdGVnb3JpZXNbXTsKCiAg
ICBpbmxpbmUgdm9pZAogICAgX01fYWRkX3JlZmVyZW5jZSgpIHRocm93KCkKICAgIHsgKytfTV9y
ZWZlcmVuY2VzOyB9CgogICAgaW5saW5lIHZvaWQKICAgIF9NX3JlbW92ZV9yZWZlcmVuY2UoKSB0
aHJvdygpCiAgICB7CiAgICAgIGlmIChfTV9yZWZlcmVuY2VzLS0gPT0gMCkKICAgICAgICB7CiAg
ICAgICAgICB0cnkKICAgICAgICAgICAgeyBkZWxldGUgdGhpczsgfQogICAgICAgICAgY2F0Y2go
Li4uKQogICAgICAgICAgICB7IH0KICAgICAgICB9CiAgICB9CgogICAgX0ltcGwoY29uc3QgX0lt
cGwmLCBzaXplX3QpOwogICAgX0ltcGwoc3RyaW5nIF9fbmFtZSwgc2l6ZV90KTsKICAgfl9JbXBs
KCkgdGhyb3coKTsKCiAgICBib29sCiAgICBfTV9jaGVja19zYW1lX25hbWUoKQogICAgewogICAg
ICBib29sIF9fcmV0ID0gdHJ1ZTsKICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBfU19udW1f
Y2F0ZWdvcmllcyAtIDE7ICsraSkKICAgICAgICBfX3JldCAmPSBfTV9uYW1lc1tpXSA9PSBfTV9u
YW1lc1tpICsgMV07CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KICAgIHZvaWQKICAgIF9NX3Jl
cGxhY2VfY2F0ZWdvcmllcyhjb25zdCBfSW1wbCosIGNhdGVnb3J5KTsKCiAgICB2b2lkCiAgICBf
TV9yZXBsYWNlX2NhdGVnb3J5KGNvbnN0IF9JbXBsKiwgY29uc3QgbG9jYWxlOjppZCogY29uc3Qq
KTsKCiAgICB2b2lkCiAgICBfTV9yZXBsYWNlX2ZhY2V0KGNvbnN0IF9JbXBsKiwgY29uc3QgbG9j
YWxlOjppZCopOwoKICAgIHZvaWQKICAgIF9NX2luc3RhbGxfZmFjZXQoY29uc3QgbG9jYWxlOjpp
ZCosIGZhY2V0Kik7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBpbmxpbmUg
dm9pZAogICAgICBfTV9pbml0X2ZhY2V0KF9GYWNldCogX19mYWNldCkKICAgICAgeyBfTV9pbnN0
YWxsX2ZhY2V0KCZfRmFjZXQ6OmlkLCBfX2ZhY2V0KTsgfQogIH07CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9GYWNldD4KICAgIGxvY2FsZTo6bG9jYWxlKGNvbnN0IGxvY2FsZSYgX19vdGhlciwgX0Zh
Y2V0KiBfX2YpCiAgICB7CiAgICAgIF9NX2ltcGwgPSBuZXcgX0ltcGwoKl9fb3RoZXIuX01faW1w
bCwgMSk7CiAgICAgIF9NX2ltcGwtPl9NX2luc3RhbGxfZmFjZXQoJl9GYWNldDo6aWQsIF9fZik7
CiAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9TX251bV9jYXRlZ29yaWVzOyArK19f
aSkKICAgICAgICBfTV9pbXBsLT5fTV9uYW1lc1tfX2ldID0gIioiOwogICAgfQoKCiAgY2xhc3Mg
bG9jYWxlOjpmYWNldAogIHsKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU7CiAgICBmcmllbmQgY2xh
c3MgbG9jYWxlOjpfSW1wbDsKCiAgcHJvdGVjdGVkOgogICAgZXhwbGljaXQKICAgIGZhY2V0KHNp
emVfdCBfX3JlZnMgPSAwKSB0aHJvdygpOwoKICAgIHZpcnR1YWwKICAgIH5mYWNldCgpIHsgfTsK
CiAgICBzdGF0aWMgdm9pZAogICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xv
YywgY29uc3QgY2hhciogX19zKTsKCiAgICBzdGF0aWMgdm9pZAogICAgX1NfZGVzdHJveV9jX2xv
Y2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpOwoKICBwcml2YXRlOgogICAgc2l6ZV90IF9NX3JlZmVy
ZW5jZXM7CgogICAgdm9pZAogICAgX01fYWRkX3JlZmVyZW5jZSgpIHRocm93KCk7CgogICAgdm9p
ZAogICAgX01fcmVtb3ZlX3JlZmVyZW5jZSgpIHRocm93KCk7CgogICAgZmFjZXQoY29uc3QgZmFj
ZXQmKTsKCiAgICB2b2lkCiAgICBvcGVyYXRvcj0oY29uc3QgZmFjZXQmKTsKICB9OwoKCgogIGNs
YXNzIGxvY2FsZTo6aWQKICB7CiAgcHJpdmF0ZToKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU7CiAg
ICBmcmllbmQgY2xhc3MgbG9jYWxlOjpfSW1wbDsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNl
dD4KICAgICAgZnJpZW5kIGNvbnN0IF9GYWNldCYKICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2Fs
ZSYpOwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgYm9vbAogICAg
ICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJikgdGhyb3cgKCk7CgoKCgogICAgbXV0YWJsZSBzaXpl
X3QgX01faW5kZXg7CgoKICAgIHN0YXRpYyBzaXplX3QgX1NfaGlnaHdhdGVyOwoKICAgIHZvaWQK
ICAgIG9wZXJhdG9yPShjb25zdCBpZCYpOwoKICAgIGlkKGNvbnN0IGlkJik7CgogIHB1YmxpYzoK
CgoKICAgIGlkKCkgeyB9CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgY29u
c3QgX0ZhY2V0JgogICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBib29sCiAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJiBf
X2xvYykgdGhyb3coKTsKfQojIDQ0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X2lvcy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvaW9zX2Jhc2Uu
aCIgMSAzCiMgMzggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9pb3NfYmFzZS5oIiAz
CgpuYW1lc3BhY2Ugc3RkCnsKCgoKCiAgZW51bSBfSW9zX0ZtdGZsYWdzIHsgX01faW9zX2ZtdGZs
YWdzX2VuZCA9IDFMIDw8IDE2IH07CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3Im
KF9Jb3NfRm10ZmxhZ3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfSW9zX0Zt
dGZsYWdzKHN0YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0K
CiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcnwoX0lvc19GbXRmbGFncyBfX2EsIF9J
b3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50
PihfX2EpIHwgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFn
cwogIG9wZXJhdG9yXihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyBy
ZXR1cm4gX0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxp
bnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3J8PShfSW9zX0Zt
dGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSB8IF9f
YjsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yJj0oX0lvc19GbXRmbGFncyYg
X19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgJiBfX2I7IH0KCiAg
aW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcl49KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lv
c19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIF4gX19iOyB9CgogIGlubGluZSBf
SW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3J+KF9Jb3NfRm10ZmxhZ3MgX19hKQogIHsgcmV0dXJuIF9J
b3NfRm10ZmxhZ3MofnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0KCgogIGVudW0gX0lvc19PcGVu
bW9kZSB7IF9NX2lvc19vcGVubW9kZV9lbmQgPSAxTCA8PCAxNiB9OwoKICBpbmxpbmUgX0lvc19P
cGVubW9kZQogIG9wZXJhdG9yJihfSW9zX09wZW5tb2RlIF9fYSwgX0lvc19PcGVubW9kZSBfX2Ip
CiAgeyByZXR1cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNf
Y2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3J8KF9J
b3NfT3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfSW9zX09wZW5t
b2RlKHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAg
aW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcl4oX0lvc19PcGVubW9kZSBfX2EsIF9Jb3Nf
T3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUoc3RhdGljX2Nhc3Q8aW50Pihf
X2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQog
IG9wZXJhdG9yfD0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJl
dHVybiBfX2EgPSBfX2EgfCBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRv
ciY9KF9Jb3NfT3Blbm1vZGUmIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX19h
ID0gX19hICYgX19iOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3JePShfSW9z
X09wZW5tb2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSBe
IF9fYjsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yfihfSW9zX09wZW5tb2Rl
IF9fYSkKICB7IHJldHVybiBfSW9zX09wZW5tb2RlKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9
CgoKICBlbnVtIF9Jb3NfSW9zdGF0ZSB7IF9NX2lvc19pb3N0YXRlX2VuZCA9IDFMIDw8IDE2IH07
CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvciYoX0lvc19Jb3N0YXRlIF9fYSwgX0lv
c19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfSW9zX0lvc3RhdGUoc3RhdGljX2Nhc3Q8aW50Pihf
X2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAg
b3BlcmF0b3J8KF9Jb3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4g
X0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGludD4oX19i
KSk7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yXihfSW9zX0lvc3RhdGUgX19h
LCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZShzdGF0aWNfY2FzdDxp
bnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0lvc3Rh
dGUKICBvcGVyYXRvcnw9KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsg
cmV0dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0
b3ImPShfSW9zX0lvc3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfX2Eg
PSBfX2EgJiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yXj0oX0lvc19J
b3N0YXRlJiBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIF4gX19i
OyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcn4oX0lvc19Jb3N0YXRlIF9fYSkK
ICB7IHJldHVybiBfSW9zX0lvc3RhdGUofnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0KCiAgZW51
bSBfSW9zX1NlZWtkaXIgeyBfTV9pb3Nfc2Vla2Rpcl9lbmQgPSAxTCA8PCAxNiB9OwoKCiAgY2xh
c3MgaW9zX2Jhc2UKICB7CiAgcHVibGljOgoKCiAgICBjbGFzcyBmYWlsdXJlIDogcHVibGljIGV4
Y2VwdGlvbgogICAgewogICAgcHVibGljOgoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGZhaWx1cmUo
Y29uc3Qgc3RyaW5nJiBfX3N0cikgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwKICAgICAgfmZhaWx1
cmUoKSB0aHJvdygpOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgICB3aGF0KCkgY29u
c3QgdGhyb3coKTsKCiAgICBwcml2YXRlOgogICAgICBlbnVtIHsgX01fYnVmc2l6ZSA9IDI1NiB9
OwogICAgICBjaGFyIF9NX25hbWVbX01fYnVmc2l6ZV07CgogICAgfTsKCgogICAgdHlwZWRlZiBf
SW9zX0ZtdGZsYWdzIGZtdGZsYWdzOwoKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBib29sYWxw
aGEgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYm9vbGFscGhhKTsKICAgIHN0YXRpYyBjb25z
dCBmbXRmbGFncyBkZWMgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfZGVjKTsKICAgIHN0YXRp
YyBjb25zdCBmbXRmbGFncyBmaXhlZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19maXhlZCk7
CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgaGV4ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9T
X2hleCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgaW50ZXJuYWwgPSBmbXRmbGFncyhfX2lv
c19mbGFnczo6X1NfaW50ZXJuYWwpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGxlZnQgPSBm
bXRmbGFncyhfX2lvc19mbGFnczo6X1NfbGVmdCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mg
b2N0ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX29jdCk7CiAgICBzdGF0aWMgY29uc3QgZm10
ZmxhZ3MgcmlnaHQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfcmlnaHQpOwogICAgc3RhdGlj
IGNvbnN0IGZtdGZsYWdzIHNjaWVudGlmaWMgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2Np
ZW50aWZpYyk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2hvd2Jhc2UgPSBmbXRmbGFncyhf
X2lvc19mbGFnczo6X1Nfc2hvd2Jhc2UpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNob3dw
b2ludCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zaG93cG9pbnQpOwogICAgc3RhdGljIGNv
bnN0IGZtdGZsYWdzIHNob3dwb3MgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2hvd3Bvcyk7
CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2tpcHdzID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6
Ol9TX3NraXB3cyk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgdW5pdGJ1ZiA9IGZtdGZsYWdz
KF9faW9zX2ZsYWdzOjpfU191bml0YnVmKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyB1cHBl
cmNhc2UgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfdXBwZXJjYXNlKTsKICAgIHN0YXRpYyBj
b25zdCBmbXRmbGFncyBhZGp1c3RmaWVsZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19hZGp1
c3RmaWVsZCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgYmFzZWZpZWxkID0gZm10ZmxhZ3Mo
X19pb3NfZmxhZ3M6Ol9TX2Jhc2VmaWVsZCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgZmxv
YXRmaWVsZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19mbG9hdGZpZWxkKTsKCgogICAgdHlw
ZWRlZiBfSW9zX0lvc3RhdGUgaW9zdGF0ZTsKICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGJhZGJp
dCA9IGlvc3RhdGUoX19pb3NfZmxhZ3M6Ol9TX2JhZGJpdCk7CiAgICBzdGF0aWMgY29uc3QgaW9z
dGF0ZSBlb2ZiaXQgPSBpb3N0YXRlKF9faW9zX2ZsYWdzOjpfU19lb2ZiaXQpOwogICAgc3RhdGlj
IGNvbnN0IGlvc3RhdGUgZmFpbGJpdCA9IGlvc3RhdGUoX19pb3NfZmxhZ3M6Ol9TX2ZhaWxiaXQp
OwogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgZ29vZGJpdCA9IGlvc3RhdGUoMCk7CgoKICAgIHR5
cGVkZWYgX0lvc19PcGVubW9kZSBvcGVubW9kZTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBh
cHAgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfYXBwKTsKICAgIHN0YXRpYyBjb25zdCBvcGVu
bW9kZSBhdGUgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfYXRlKTsKICAgIHN0YXRpYyBjb25z
dCBvcGVubW9kZSBiaW5hcnkgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfYmluKTsKICAgIHN0
YXRpYyBjb25zdCBvcGVubW9kZSBpbiA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19pbik7CiAg
ICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgb3V0ID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX291
dCk7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgdHJ1bmMgPSBvcGVubW9kZShfX2lvc19mbGFn
czo6X1NfdHJ1bmMpOwoKCiAgICB0eXBlZGVmIF9Jb3NfU2Vla2RpciBzZWVrZGlyOwogICAgc3Rh
dGljIGNvbnN0IHNlZWtkaXIgYmVnID0gc2Vla2RpcigwKTsKICAgIHN0YXRpYyBjb25zdCBzZWVr
ZGlyIGN1ciA9IHNlZWtkaXIoMSk7CiAgICBzdGF0aWMgY29uc3Qgc2Vla2RpciBlbmQgPSBzZWVr
ZGlyKDIpOwojIDIxNiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2lvc19iYXNlLmgi
IDMKICAgIGVudW0gZXZlbnQKICAgIHsKICAgICAgZXJhc2VfZXZlbnQsCiAgICAgIGltYnVlX2V2
ZW50LAogICAgICBjb3B5Zm10X2V2ZW50CiAgICB9OwoKICAgIHR5cGVkZWYgdm9pZCAoKmV2ZW50
X2NhbGxiYWNrKSAoZXZlbnQsIGlvc19iYXNlJiwgaW50KTsKCiAgICB2b2lkCiAgICByZWdpc3Rl
cl9jYWxsYmFjayhldmVudF9jYWxsYmFjayBfX2ZuLCBpbnQgX19pbmRleCk7CgogIHByb3RlY3Rl
ZDoKCiAgICBzdHJlYW1zaXplIF9NX3ByZWNpc2lvbjsKICAgIHN0cmVhbXNpemUgX01fd2lkdGg7
CiAgICBmbXRmbGFncyBfTV9mbGFnczsKCgoKICAgIHN0cnVjdCBfQ2FsbGJhY2tfbGlzdAogICAg
ewoKICAgICAgX0NhbGxiYWNrX2xpc3QqIF9NX25leHQ7CiAgICAgIGlvc19iYXNlOjpldmVudF9j
YWxsYmFjayBfTV9mbjsKICAgICAgaW50IF9NX2luZGV4OwogICAgICBpbnQgX01fcmVmY291bnQ7
CgogICAgICBfQ2FsbGJhY2tfbGlzdChpb3NfYmFzZTo6ZXZlbnRfY2FsbGJhY2sgX19mbiwgaW50
IF9faW5kZXgsCiAgICAgICAgICAgICAgICAgICAgIF9DYWxsYmFja19saXN0KiBfX2NiKQogICAg
ICA6IF9NX25leHQoX19jYiksIF9NX2ZuKF9fZm4pLCBfTV9pbmRleChfX2luZGV4KSwgX01fcmVm
Y291bnQoMCkgeyB9CgogICAgICB2b2lkCiAgICAgIF9NX2FkZF9yZWZlcmVuY2UoKSB7ICsrX01f
cmVmY291bnQ7IH0KCiAgICAgIGludAogICAgICBfTV9yZW1vdmVfcmVmZXJlbmNlKCkgeyByZXR1
cm4gX01fcmVmY291bnQtLTsgfQogICAgfTsKCiAgICAgX0NhbGxiYWNrX2xpc3QqIF9NX2NhbGxi
YWNrczsKCiAgICB2b2lkCiAgICBfTV9jYWxsX2NhbGxiYWNrcyhldmVudCBfX2V2KSB0aHJvdygp
OwoKICAgIHZvaWQKICAgIF9NX2Rpc3Bvc2VfY2FsbGJhY2tzKHZvaWQpOwoKCiAgICBzdHJ1Y3Qg
X1dvcmRzCiAgICB7CiAgICAgIHZvaWQqIF9NX3B3b3JkOwogICAgICBsb25nIF9NX2l3b3JkOwog
ICAgfTsKCiAgICBzdGF0aWMgY29uc3QgaW50IF9TX2xvY2FsX3dvcmRzID0gODsKICAgIF9Xb3Jk
cyBfTV93b3JkX2FycmF5W19TX2xvY2FsX3dvcmRzXTsKICAgIF9Xb3JkcyBfTV9kdW1teTsKICAg
IF9Xb3JkcyogX01fd29yZHM7CiAgICBpbnQgX01fd29yZF9saW1pdDsKCiAgICBfV29yZHMmCiAg
ICBfTV9ncm93X3dvcmRzKGludCBfX2luZGV4KTsKCgogICAgbG9jYWxlIF9NX2lvc19sb2NhbGU7
CgogICAgdm9pZAogICAgX01faW5pdCgpOwoKICBwdWJsaWM6CgoKCgoKICAgIGNsYXNzIEluaXQK
ICAgIHsKICAgICAgZnJpZW5kIGNsYXNzIGlvc19iYXNlOwogICAgcHVibGljOgogICAgICBJbml0
KCk7CiAgICAgIH5Jbml0KCk7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19pb3NfY3JlYXRl
KGJvb2wgX19zeW5jKTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2lvc19kZXN0cm95KCk7
CgogICAgcHJpdmF0ZToKICAgICAgc3RhdGljIGludCBfU19pb3NfYmFzZV9pbml0OwogICAgICBz
dGF0aWMgYm9vbCBfU19zeW5jZWRfd2l0aF9zdGRpbzsKICAgIH07CgoKICAgIGlubGluZSBmbXRm
bGFncwogICAgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBfTV9mbGFnczsgfQoKICAgIGlubGluZSBm
bXRmbGFncwogICAgZmxhZ3MoZm10ZmxhZ3MgX19mbXRmbCkKICAgIHsKICAgICAgZm10ZmxhZ3Mg
X19vbGQgPSBfTV9mbGFnczsKICAgICAgX01fZmxhZ3MgPSBfX2ZtdGZsOwogICAgICByZXR1cm4g
X19vbGQ7CiAgICB9CgogICAgaW5saW5lIGZtdGZsYWdzCiAgICBzZXRmKGZtdGZsYWdzIF9fZm10
ZmwpCiAgICB7CiAgICAgIGZtdGZsYWdzIF9fb2xkID0gX01fZmxhZ3M7CiAgICAgIF9NX2ZsYWdz
IHw9IF9fZm10Zmw7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgICBpbmxpbmUgZm10Zmxh
Z3MKICAgIHNldGYoZm10ZmxhZ3MgX19mbXRmbCwgZm10ZmxhZ3MgX19tYXNrKQogICAgewogICAg
ICBmbXRmbGFncyBfX29sZCA9IF9NX2ZsYWdzOwogICAgICBfTV9mbGFncyAmPSB+X19tYXNrOwog
ICAgICBfTV9mbGFncyB8PSAoX19mbXRmbCAmIF9fbWFzayk7CiAgICAgIHJldHVybiBfX29sZDsK
ICAgIH0KCiAgICBpbmxpbmUgdm9pZAogICAgdW5zZXRmKGZtdGZsYWdzIF9fbWFzaykgeyBfTV9m
bGFncyAmPSB+X19tYXNrOyB9CgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHByZWNpc2lvbigp
IGNvbnN0IHsgcmV0dXJuIF9NX3ByZWNpc2lvbjsgfQoKICAgIGlubGluZSBzdHJlYW1zaXplCiAg
ICBwcmVjaXNpb24oc3RyZWFtc2l6ZSBfX3ByZWMpCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX19v
bGQgPSBfTV9wcmVjaXNpb247CiAgICAgIF9NX3ByZWNpc2lvbiA9IF9fcHJlYzsKICAgICAgcmV0
dXJuIF9fb2xkOwogICAgfQoKICAgIGlubGluZSBzdHJlYW1zaXplCiAgICB3aWR0aCgpIGNvbnN0
IHsgcmV0dXJuIF9NX3dpZHRoOyB9CgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHdpZHRoKHN0
cmVhbXNpemUgX193aWRlKQogICAgewogICAgICBzdHJlYW1zaXplIF9fb2xkID0gX01fd2lkdGg7
CiAgICAgIF9NX3dpZHRoID0gX193aWRlOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogICAg
c3RhdGljIGJvb2wKICAgIHN5bmNfd2l0aF9zdGRpbyhib29sIF9fc3luYyA9IHRydWUpOwoKCiAg
ICBsb2NhbGUKICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKICAgIGlubGluZSBsb2Nh
bGUKICAgIGdldGxvYygpIGNvbnN0IHsgcmV0dXJuIF9NX2lvc19sb2NhbGU7IH0KCgogICAgc3Rh
dGljIGludAogICAgeGFsbG9jKCkgdGhyb3coKTsKCiAgICBpbmxpbmUgbG9uZyYKICAgIGl3b3Jk
KGludCBfX2l4KQogICAgewogICAgICBfV29yZHMmIF9fd29yZCA9IChfX2l4IDwgX01fd29yZF9s
aW1pdCkKICAgICAgICAgICAgICAgICAgICAgICAgPyBfTV93b3Jkc1tfX2l4XSA6IF9NX2dyb3df
d29yZHMoX19peCk7CiAgICAgIHJldHVybiBfX3dvcmQuX01faXdvcmQ7CiAgICB9CgogICAgaW5s
aW5lIHZvaWQqJgogICAgcHdvcmQoaW50IF9faXgpCiAgICB7CiAgICAgIF9Xb3JkcyYgX193b3Jk
ID0gKF9faXggPCBfTV93b3JkX2xpbWl0KQogICAgICAgICAgICAgICAgICAgICAgICA/IF9NX3dv
cmRzW19faXhdIDogX01fZ3Jvd193b3JkcyhfX2l4KTsKICAgICAgcmV0dXJuIF9fd29yZC5fTV9w
d29yZDsKICAgIH0KCgogICAgfmlvc19iYXNlKCk7CgogIHByb3RlY3RlZDoKICAgIGlvc19iYXNl
KCk7CgoKICBwcml2YXRlOgogICAgaW9zX2Jhc2UoY29uc3QgaW9zX2Jhc2UmKTsKCiAgICBpb3Nf
YmFzZSYKICAgIG9wZXJhdG9yPShjb25zdCBpb3NfYmFzZSYpOwoKICB9OwoKCiAgaW5saW5lIGlv
c19iYXNlJgogIGJvb2xhbHBoYShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRm
KGlvc19iYXNlOjpib29sYWxwaGEpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBp
b3NfYmFzZSYKICBub2Jvb2xhbHBoYShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51
bnNldGYoaW9zX2Jhc2U6OmJvb2xhbHBoYSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5s
aW5lIGlvc19iYXNlJgogIHNob3diYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNl
LnNldGYoaW9zX2Jhc2U6OnNob3diYXNlKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxp
bmUgaW9zX2Jhc2UmCiAgbm9zaG93YmFzZShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFz
ZS51bnNldGYoaW9zX2Jhc2U6OnNob3diYXNlKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBp
bmxpbmUgaW9zX2Jhc2UmCiAgc2hvd3BvaW50KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19i
YXNlLnNldGYoaW9zX2Jhc2U6OnNob3dwb2ludCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAg
aW5saW5lIGlvc19iYXNlJgogIG5vc2hvd3BvaW50KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAg
X19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd3BvaW50KTsKICAgIHJldHVybiBfX2Jhc2U7CiAg
fQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2hvd3Bvcyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAg
IF9fYmFzZS5zZXRmKGlvc19iYXNlOjpzaG93cG9zKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoK
ICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9zaG93cG9zKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAg
X19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd3Bvcyk7CiAgICByZXR1cm4gX19iYXNlOwogIH0K
CiAgaW5saW5lIGlvc19iYXNlJgogIHNraXB3cyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9f
YmFzZS5zZXRmKGlvc19iYXNlOjpza2lwd3MpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlu
bGluZSBpb3NfYmFzZSYKICBub3NraXB3cyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFz
ZS51bnNldGYoaW9zX2Jhc2U6OnNraXB3cyk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5s
aW5lIGlvc19iYXNlJgogIHVwcGVyY2FzZShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFz
ZS5zZXRmKGlvc19iYXNlOjp1cHBlcmNhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlu
bGluZSBpb3NfYmFzZSYKICBub3VwcGVyY2FzZShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9f
YmFzZS51bnNldGYoaW9zX2Jhc2U6OnVwcGVyY2FzZSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0K
CiAgaW5saW5lIGlvc19iYXNlJgogIHVuaXRidWYoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICAg
X19iYXNlLnNldGYoaW9zX2Jhc2U6OnVuaXRidWYpOwogICAgIHJldHVybiBfX2Jhc2U7CiAgfQoK
ICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm91bml0YnVmKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAg
IF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnVuaXRidWYpOwogICAgIHJldHVybiBfX2Jhc2U7CiAg
fQoKCiAgaW5saW5lIGlvc19iYXNlJgogIGludGVybmFsKGlvc19iYXNlJiBfX2Jhc2UpCiAgewog
ICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjppbnRlcm5hbCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxk
KTsKICAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIGxlZnQoaW9z
X2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6bGVmdCwgaW9zX2Jh
c2U6OmFkanVzdGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jh
c2UmCiAgcmlnaHQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFz
ZTo6cmlnaHQsIGlvc19iYXNlOjphZGp1c3RmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0K
CgogIGlubGluZSBpb3NfYmFzZSYKICBkZWMoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jh
c2Uuc2V0Zihpb3NfYmFzZTo6ZGVjLCBpb3NfYmFzZTo6YmFzZWZpZWxkKTsKICAgIHJldHVybiBf
X2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgaGV4KGlvc19iYXNlJiBfX2Jhc2UpCiAg
ewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmhleCwgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CiAg
ICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG9jdChpb3NfYmFzZSYg
X19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpvY3QsIGlvc19iYXNlOjpiYXNl
ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgZml4
ZWQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6Zml4ZWQs
IGlvc19iYXNlOjpmbG9hdGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUg
aW9zX2Jhc2UmCiAgc2NpZW50aWZpYyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5z
ZXRmKGlvc19iYXNlOjpzY2llbnRpZmljLCBpb3NfYmFzZTo6ZmxvYXRmaWVsZCk7CiAgICByZXR1
cm4gX19iYXNlOwogIH0KCn0KIyA0NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9pb3MuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJl
YW1idWYuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3Ry
ZWFtYnVmLmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNTg2LXBjLWxpbnV4
LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMSAzCiMgNDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfc3RyZWFtYnVmLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfY3N0ZGlvLmgiIDEgMwojIDQyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX3N0cmVhbWJ1Zi5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvbG9jYWxlZndkLmgiIDEgMwojIDQzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX3N0cmVhbWJ1Zi5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
aW9zX2Jhc2UuaCIgMSAzCiMgNDQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
c3RyZWFtYnVmLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgX19jb3B5X3N0cmVhbWJ1
ZnMoYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4mIF9pb3MsCiAgICAgICAgICAgICAgICAgICAg
ICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYmluLAogICAgICAgICAgICAg
ICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JvdXQpOwoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFz
aWNfc3RyZWFtYnVmCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFy
X3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgdHJhaXRzX3R5cGU6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVu
YW1lIHRyYWl0c190eXBlOjpvZmZfdHlwZSBvZmZfdHlwZTsKCgogICAgICB0eXBlZGVmIGN0eXBl
PGNoYXJfdHlwZT4gX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1Zjxj
aGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX3N0cmVhbWJ1Zl90eXBlOwoKICAgICAgZnJpZW5kIGNs
YXNzIGJhc2ljX2lvczxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNz
IGJhc2ljX2lzdHJlYW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFz
cyBiYXNpY19vc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xh
c3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJp
ZW5kIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3I8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47Cgog
ICAgICBmcmllbmQgc3RyZWFtc2l6ZQogICAgICBfX2NvcHlfc3RyZWFtYnVmczw+KGJhc2ljX2lv
czxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiYgX19pb3MsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19zdHJlYW1idWZfdHlwZSogX19zYmluLF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JvdXQpOwoK
ICAgIHByb3RlY3RlZDoKCgoKCgoKICAgICAgY2hhcl90eXBlKiBfTV9idWY7CgoKICAgICAgaW50
X3R5cGUgX01fYnVmX3NpemU7CgoKICAgICAgaW50X3R5cGUgX01fYnVmX3NpemVfb3B0OwoKCgog
ICAgICBib29sIF9NX2J1Zl91bmlmaWVkOwoKCgoKCgogICAgICBjaGFyX3R5cGUqIF9NX2luX2Jl
ZzsKICAgICAgY2hhcl90eXBlKiBfTV9pbl9jdXI7CiAgICAgIGNoYXJfdHlwZSogX01faW5fZW5k
OwogICAgICBjaGFyX3R5cGUqIF9NX291dF9iZWc7CiAgICAgIGNoYXJfdHlwZSogX01fb3V0X2N1
cjsKICAgICAgY2hhcl90eXBlKiBfTV9vdXRfZW5kOwoKCiAgICAgIGlvc19iYXNlOjpvcGVubW9k
ZSBfTV9tb2RlOwoKCiAgICAgIGxvY2FsZSBfTV9idWZfbG9jYWxlOwoKCiAgICAgIGJvb2wgX01f
YnVmX2xvY2FsZV9pbml0OwoKCgoKCgogICAgICBpbnRfdHlwZSBfTV9wYmFja19zaXplOwogICAg
ICBjaGFyX3R5cGUqIF9NX3BiYWNrOwogICAgICBjaGFyX3R5cGUqIF9NX3BiYWNrX2N1cl9zYXZl
OwogICAgICBjaGFyX3R5cGUqIF9NX3BiYWNrX2VuZF9zYXZlOwogICAgICBib29sIF9NX3BiYWNr
X2luaXQ7CgoKCgogICAgICB2b2lkCiAgICAgIF9NX3BiYWNrX2NyZWF0ZSgpCiAgICAgIHsKICAg
ICAgICBpZiAoIV9NX3BiYWNrX2luaXQpCiAgICAgICAgICB7CiAgICAgICAgICAgIGludF90eXBl
IF9fZGlzdCA9IF9NX2luX2VuZCAtIF9NX2luX2N1cjsKICAgICAgICAgICAgaW50X3R5cGUgX19s
ZW4gPSBtaW4oX01fcGJhY2tfc2l6ZSwgX19kaXN0KTsKICAgICAgICAgICAgdHJhaXRzX3R5cGU6
OmNvcHkoX01fcGJhY2ssIF9NX2luX2N1ciwgX19sZW4pOwogICAgICAgICAgICBfTV9wYmFja19j
dXJfc2F2ZSA9IF9NX2luX2N1cjsKICAgICAgICAgICAgX01fcGJhY2tfZW5kX3NhdmUgPSBfTV9p
bl9lbmQ7CiAgICAgICAgICAgIHRoaXMtPnNldGcoX01fcGJhY2ssIF9NX3BiYWNrLCBfTV9wYmFj
ayArIF9fbGVuKTsKICAgICAgICAgICAgX01fcGJhY2tfaW5pdCA9IHRydWU7CiAgICAgICAgICB9
CiAgICAgIH0KCgoKCiAgICAgIHZvaWQKICAgICAgX01fcGJhY2tfZGVzdHJveSgpCiAgICAgIHsK
ICAgICAgICBpZiAoX01fcGJhY2tfaW5pdCkKICAgICAgICAgIHsKCiAgICAgICAgICAgIGludF90
eXBlIF9fb2ZmX2N1ciA9IF9NX2luX2N1ciAtIF9NX3BiYWNrOwoKCiAgICAgICAgICAgIGludF90
eXBlIF9fb2ZmX2VuZCA9IDA7CiAgICAgICAgICAgIGludF90eXBlIF9fcGJhY2tfbGVuID0gX01f
aW5fZW5kIC0gX01fcGJhY2s7CiAgICAgICAgICAgIGludF90eXBlIF9fc2F2ZV9sZW4gPSBfTV9w
YmFja19lbmRfc2F2ZSAtIF9NX2J1ZjsKICAgICAgICAgICAgaWYgKF9fcGJhY2tfbGVuID4gX19z
YXZlX2xlbikKICAgICAgICAgICAgICBfX29mZl9lbmQgPSBfX3BiYWNrX2xlbiAtIF9fc2F2ZV9s
ZW47CgogICAgICAgICAgICB0aGlzLT5zZXRnKF9NX2J1ZiwgX01fcGJhY2tfY3VyX3NhdmUgKyBf
X29mZl9jdXIsCiAgICAgICAgICAgICAgICAgICAgICAgX01fcGJhY2tfZW5kX3NhdmUgKyBfX29m
Zl9lbmQpOwogICAgICAgICAgICBfTV9wYmFja19jdXJfc2F2ZSA9IDA7CiAgICAgICAgICAgIF9N
X3BiYWNrX2VuZF9zYXZlID0gMDsKICAgICAgICAgICAgX01fcGJhY2tfaW5pdCA9IGZhbHNlOwog
ICAgICAgICAgfQogICAgICB9CgoKCiAgICAgIHZvaWQKICAgICAgX01faW5fY3VyX21vdmUob2Zm
X3R5cGUgX19uKQogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RvdXQgPSBfTV9vdXRfY3VyOwog
ICAgICAgIF9NX2luX2N1ciArPSBfX247CiAgICAgICAgaWYgKF9fdGVzdG91dCAmJiBfTV9idWZf
dW5pZmllZCkKICAgICAgICAgIF9NX291dF9jdXIgKz0gX19uOwogICAgICB9CiMgMTkzICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAzCiAgICAgIHZvaWQK
ICAgICAgX01fb3V0X2N1cl9tb3ZlKG9mZl90eXBlIF9fbikKICAgICAgewogICAgICAgIGJvb2wg
X190ZXN0aW4gPSBfTV9pbl9jdXI7CgogICAgICAgIF9NX291dF9jdXIgKz0gX19uOwogICAgICAg
IGlmIChfX3Rlc3RpbiAmJiBfTV9idWZfdW5pZmllZCkKICAgICAgICAgIF9NX2luX2N1ciArPSBf
X247CiAgICAgICAgaWYgKF9NX291dF9jdXIgPiBfTV9vdXRfZW5kKQogICAgICAgICAgewogICAg
ICAgICAgICBfTV9vdXRfZW5kID0gX01fb3V0X2N1cjsKCiAgICAgICAgICAgIGlmIChfX3Rlc3Rp
bikKICAgICAgICAgICAgICBfTV9pbl9lbmQgKz0gX19uOwogICAgICAgICAgfQogICAgICB9CgoK
CgogICAgICBvZmZfdHlwZQogICAgICBfTV9vdXRfYnVmX3NpemUoKQogICAgICB7CiAgICAgICAg
b2ZmX3R5cGUgX19yZXQgPSAwOwogICAgICAgIGlmIChfTV9vdXRfY3VyKQogICAgICAgICAgewoK
ICAgICAgICAgICAgaWYgKF9NX291dF9iZWcgPT0gX01fYnVmKQogICAgICAgICAgICAgIF9fcmV0
ID0gX01fb3V0X2JlZyArIF9NX2J1Zl9zaXplIC0gX01fb3V0X2N1cjsKCiAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICBfX3JldCA9IF9NX291dF9lbmQgLSBfTV9vdXRfY3VyOwogICAgICAg
ICAgfQogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQojIDIzNiAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMwogICAgICB2b2lkCiAgICAgIF9NX3Nl
dF9pbmRldGVybWluYXRlKHZvaWQpCiAgICAgIHsKICAgICAgICBpZiAoX01fbW9kZSAmIGlvc19i
YXNlOjppbikKICAgICAgICAgIHRoaXMtPnNldGcoX01fYnVmLCBfTV9idWYsIF9NX2J1Zik7CiAg
ICAgICAgaWYgKF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0KQogICAgICAgICAgdGhpcy0+c2V0cChf
TV9idWYsIF9NX2J1Zik7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fc2V0X2RldGVybWlu
YXRlKG9mZl90eXBlIF9fb2ZmKQogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9NX21v
ZGUgJiBpb3NfYmFzZTo6aW47CiAgICAgICAgYm9vbCBfX3Rlc3RvdXQgPSBfTV9tb2RlICYgaW9z
X2Jhc2U6Om91dDsKICAgICAgICBpZiAoX190ZXN0aW4pCiAgICAgICAgICB0aGlzLT5zZXRnKF9N
X2J1ZiwgX01fYnVmLCBfTV9idWYgKyBfX29mZik7CiAgICAgICAgaWYgKF9fdGVzdG91dCkKICAg
ICAgICAgIHRoaXMtPnNldHAoX01fYnVmLCBfTV9idWYgKyBfX29mZik7CiAgICAgIH0KCiAgICAg
IGJvb2wKICAgICAgX01faXNfaW5kZXRlcm1pbmF0ZSh2b2lkKQogICAgICB7CiAgICAgICAgYm9v
bCBfX3JldCA9IGZhbHNlOwoKICAgICAgICBpZiAoX01fYnVmKQogICAgICAgICAgewogICAgICAg
ICAgICBpZiAoX01fbW9kZSAmIGlvc19iYXNlOjppbikKICAgICAgICAgICAgICBfX3JldCA9IF9N
X2luX2JlZyA9PSBfTV9pbl9jdXIgJiYgX01faW5fY3VyID09IF9NX2luX2VuZDsKICAgICAgICAg
ICAgaWYgKF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0KQogICAgICAgICAgICAgIF9fcmV0ID0gX01f
b3V0X2JlZyA9PSBfTV9vdXRfY3VyICYmIF9NX291dF9jdXIgPT0gX01fb3V0X2VuZDsKICAgICAg
ICAgIH0KICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAgcHVibGljOgogICAgICB2aXJ0
dWFsCiAgICAgIH5iYXNpY19zdHJlYW1idWYoKQogICAgICB7CiAgICAgICAgX01fYnVmX3VuaWZp
ZWQgPSBmYWxzZTsKICAgICAgICBfTV9idWZfc2l6ZSA9IDA7CiAgICAgICAgX01fYnVmX3NpemVf
b3B0ID0gMDsKICAgICAgICBfTV9tb2RlID0gaW9zX2Jhc2U6Om9wZW5tb2RlKDApOwogICAgICAg
IF9NX2J1Zl9sb2NhbGVfaW5pdCA9IGZhbHNlOwogICAgICB9CgoKICAgICAgbG9jYWxlCiAgICAg
IHB1YmltYnVlKGNvbnN0IGxvY2FsZSAmX19sb2MpCiAgICAgIHsKICAgICAgICBsb2NhbGUgX190
bXAodGhpcy0+Z2V0bG9jKCkpOwogICAgICAgIHRoaXMtPmltYnVlKF9fbG9jKTsKICAgICAgICBy
ZXR1cm4gX190bXA7CiAgICAgIH0KCiAgICAgIGxvY2FsZQogICAgICBnZXRsb2MoKSBjb25zdAog
ICAgICB7CiAgICAgICAgaWYgKF9NX2J1Zl9sb2NhbGVfaW5pdCkKICAgICAgICAgIHJldHVybiBf
TV9idWZfbG9jYWxlOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBsb2NhbGUoKTsKICAg
ICAgfQoKCiAgICAgIF9fc3RyZWFtYnVmX3R5cGUqCiAgICAgIHB1YnNldGJ1ZihjaGFyX3R5cGUq
IF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnNldGJ1ZihfX3MsIF9f
bik7IH0KCiAgICAgIHBvc190eXBlCiAgICAgIHB1YnNlZWtvZmYob2ZmX3R5cGUgX19vZmYsIGlv
c19iYXNlOjpzZWVrZGlyIF9fd2F5LAogICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9k
ZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHJldHVybiB0
aGlzLT5zZWVrb2ZmKF9fb2ZmLCBfX3dheSwgX19tb2RlKTsgfQoKICAgICAgcG9zX3R5cGUKICAg
ICAgcHVic2Vla3Bvcyhwb3NfdHlwZSBfX3NwLAogICAgICAgICAgICAgICAgIGlvc19iYXNlOjpv
cGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHJl
dHVybiB0aGlzLT5zZWVrcG9zKF9fc3AsIF9fbW9kZSk7IH0KCiAgICAgIGludAogICAgICBwdWJz
eW5jKCkgeyByZXR1cm4gdGhpcy0+c3luYygpOyB9CgoKCiAgICAgIHN0cmVhbXNpemUKICAgICAg
aW5fYXZhaWwoKQogICAgICB7CiAgICAgICAgc3RyZWFtc2l6ZSBfX3JldDsKICAgICAgICBpZiAo
X01faW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZCkKICAgICAgICAgIHsKICAgICAgICAg
ICAgaWYgKF9NX3BiYWNrX2luaXQpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaW50
X3R5cGUgX19zYXZlX2xlbiA9IF9NX3BiYWNrX2VuZF9zYXZlIC0gX01fcGJhY2tfY3VyX3NhdmU7
CiAgICAgICAgICAgICAgICBpbnRfdHlwZSBfX3BiYWNrX2xlbiA9IF9NX2luX2N1ciAtIF9NX3Bi
YWNrOwogICAgICAgICAgICAgICAgX19yZXQgPSBfX3NhdmVfbGVuIC0gX19wYmFja19sZW47CiAg
ICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgX19yZXQgPSB0aGlz
LT5lZ3B0cigpIC0gdGhpcy0+Z3B0cigpOwogICAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAg
ICAgIF9fcmV0ID0gdGhpcy0+c2hvd21hbnljKCk7CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAg
ICB9CgogICAgICBpbnRfdHlwZQogICAgICBzbmV4dGMoKQogICAgICB7CiAgICAgICAgaW50X3R5
cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgcmV0dXJuICh0aGlzLT5zYnVt
cGMoKSA9PSBfX2VvZiA/IF9fZW9mIDogdGhpcy0+c2dldGMoKSk7CiAgICAgIH0KCiAgICAgIGlu
dF90eXBlCiAgICAgIHNidW1wYygpOwoKICAgICAgaW50X3R5cGUKICAgICAgc2dldGMoKQogICAg
ICB7CiAgICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9p
bl9jdXIgPCBfTV9pbl9lbmQpCiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRf
dHlwZSgqKHRoaXMtPmdwdHIoKSkpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9fcmV0ID0gdGhp
cy0+dW5kZXJmbG93KCk7CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgogICAgICBzdHJl
YW1zaXplCiAgICAgIHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgICAg
eyByZXR1cm4gdGhpcy0+eHNnZXRuKF9fcywgX19uKTsgfQoKCiAgICAgIGludF90eXBlCiAgICAg
IHNwdXRiYWNrYyhjaGFyX3R5cGUgX19jKTsKCiAgICAgIGludF90eXBlCiAgICAgIHN1bmdldGMo
KTsKCgogICAgICBpbnRfdHlwZQogICAgICBzcHV0YyhjaGFyX3R5cGUgX19jKTsKCiAgICAgIHN0
cmVhbXNpemUKICAgICAgc3B1dG4oY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19u
KQogICAgICB7IHJldHVybiB0aGlzLT54c3B1dG4oX19zLCBfX24pOyB9CgogICAgcHJvdGVjdGVk
OgogICAgICBiYXNpY19zdHJlYW1idWYoKQogICAgICA6IF9NX2J1ZigwKSwgX01fYnVmX3NpemUo
MCksCiAgICAgIF9NX2J1Zl9zaXplX29wdChzdGF0aWNfY2FzdDxpbnRfdHlwZT4oODE5MikpLCBf
TV9idWZfdW5pZmllZChmYWxzZSksCiAgICAgIF9NX2luX2JlZygwKSwgX01faW5fY3VyKDApLCBf
TV9pbl9lbmQoMCksIF9NX291dF9iZWcoMCksIF9NX291dF9jdXIoMCksCiAgICAgIF9NX291dF9l
bmQoMCksIF9NX21vZGUoaW9zX2Jhc2U6Om9wZW5tb2RlKDApKSwgX01fYnVmX2xvY2FsZShsb2Nh
bGUoKSksCiAgICAgIF9NX2J1Zl9sb2NhbGVfaW5pdChmYWxzZSksIF9NX3BiYWNrX3NpemUoMSks
IF9NX3BiYWNrKDApLAogICAgICBfTV9wYmFja19jdXJfc2F2ZSgwKSwgX01fcGJhY2tfZW5kX3Nh
dmUoMCksIF9NX3BiYWNrX2luaXQoZmFsc2UpCiAgICAgIHsgfQoKCiAgICAgIGNoYXJfdHlwZSoK
ICAgICAgZWJhY2soKSBjb25zdCB7IHJldHVybiBfTV9pbl9iZWc7IH0KCiAgICAgIGNoYXJfdHlw
ZSoKICAgICAgZ3B0cigpIGNvbnN0IHsgcmV0dXJuIF9NX2luX2N1cjsgfQoKICAgICAgY2hhcl90
eXBlKgogICAgICBlZ3B0cigpIGNvbnN0IHsgcmV0dXJuIF9NX2luX2VuZDsgfQoKICAgICAgdm9p
ZAogICAgICBnYnVtcChpbnQgX19uKSB7IF9NX2luX2N1ciArPSBfX247IH0KCiAgICAgIHZvaWQK
ICAgICAgc2V0ZyhjaGFyX3R5cGUqIF9fZ2JlZywgY2hhcl90eXBlKiBfX2duZXh0LCBjaGFyX3R5
cGUqIF9fZ2VuZCkKICAgICAgewogICAgICAgIF9NX2luX2JlZyA9IF9fZ2JlZzsKICAgICAgICBf
TV9pbl9jdXIgPSBfX2duZXh0OwogICAgICAgIF9NX2luX2VuZCA9IF9fZ2VuZDsKICAgICAgICBp
ZiAoIShfTV9tb2RlICYgaW9zX2Jhc2U6OmluKSAmJiBfX2diZWcgJiYgX19nbmV4dCAmJiBfX2dl
bmQpCiAgICAgICAgICBfTV9tb2RlID0gX01fbW9kZSB8IGlvc19iYXNlOjppbjsKICAgICAgfQoK
CiAgICAgIGNoYXJfdHlwZSoKICAgICAgcGJhc2UoKSBjb25zdCB7IHJldHVybiBfTV9vdXRfYmVn
OyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIHBwdHIoKSBjb25zdCB7IHJldHVybiBfTV9vdXRf
Y3VyOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIGVwcHRyKCkgY29uc3QgeyByZXR1cm4gX01f
b3V0X2VuZDsgfQoKICAgICAgdm9pZAogICAgICBwYnVtcChpbnQgX19uKSB7IF9NX291dF9jdXIg
Kz0gX19uOyB9CgogICAgICB2b2lkCiAgICAgIHNldHAoY2hhcl90eXBlKiBfX3BiZWcsIGNoYXJf
dHlwZSogX19wZW5kKQogICAgICB7CiAgICAgICAgX01fb3V0X2JlZyA9IF9NX291dF9jdXIgPSBf
X3BiZWc7CiAgICAgICAgX01fb3V0X2VuZCA9IF9fcGVuZDsKICAgICAgICBpZiAoIShfTV9tb2Rl
ICYgaW9zX2Jhc2U6Om91dCkgJiYgX19wYmVnICYmIF9fcGVuZCkKICAgICAgICAgIF9NX21vZGUg
PSBfTV9tb2RlIHwgaW9zX2Jhc2U6Om91dDsKICAgICAgfQoKCgogICAgICB2aXJ0dWFsIHZvaWQK
ICAgICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYykKICAgICAgewogICAgICAgIF9NX2J1Zl9s
b2NhbGVfaW5pdCA9IHRydWU7CiAgICAgICAgaWYgKF9NX2J1Zl9sb2NhbGUgIT0gX19sb2MpCiAg
ICAgICAgICBfTV9idWZfbG9jYWxlID0gX19sb2M7CiAgICAgIH0KCgogICAgICB2aXJ0dWFsIGJh
c2ljX3N0cmVhbWJ1ZjxjaGFyX3R5cGUsX1RyYWl0cz4qCiAgICAgIHNldGJ1ZihjaGFyX3R5cGUq
LCBzdHJlYW1zaXplKQogICAgICB7IHJldHVybiB0aGlzOyB9CgogICAgICB2aXJ0dWFsIHBvc190
eXBlCiAgICAgIHNlZWtvZmYob2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGlyLAogICAgICAgICAg
ICAgIGlvc19iYXNlOjpvcGVubW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAg
ICAgIHsgcmV0dXJuIHBvc190eXBlKG9mZl90eXBlKC0xKSk7IH0KCiAgICAgIHZpcnR1YWwgcG9z
X3R5cGUKICAgICAgc2Vla3Bvcyhwb3NfdHlwZSwKICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Bl
bm1vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHJldHVybiBwb3Nf
dHlwZShvZmZfdHlwZSgtMSkpOyB9CgogICAgICB2aXJ0dWFsIGludAogICAgICBzeW5jKCkgeyBy
ZXR1cm4gMDsgfQoKCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQogICAgICBzaG93bWFueWMoKSB7
IHJldHVybiAwOyB9CgogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgeHNnZXRuKGNoYXJf
dHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAg
IHVuZGVyZmxvdygpCiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsgfQoKICAgICAg
dmlydHVhbCBpbnRfdHlwZQogICAgICB1ZmxvdygpCiAgICAgIHsKICAgICAgICBpbnRfdHlwZSBf
X3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICBib29sIF9fdGVzdGVvZiA9IHRoaXMt
PnVuZGVyZmxvdygpID09IF9fcmV0OwogICAgICAgIGJvb2wgX190ZXN0cGVuZGluZyA9IF9NX2lu
X2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQ7CiAgICAgICAgaWYgKCFfX3Rlc3Rlb2YgJiYg
X190ZXN0cGVuZGluZykKICAgICAgICAgIHsKICAgICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlw
ZTo6dG9faW50X3R5cGUoKl9NX2luX2N1cik7CiAgICAgICAgICAgICsrX01faW5fY3VyOwogICAg
ICAgICAgICBpZiAoX01fYnVmX3VuaWZpZWQgJiYgX01fbW9kZSAmIGlvc19iYXNlOjpvdXQpCiAg
ICAgICAgICAgICAgKytfTV9vdXRfY3VyOwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfX3Jl
dDsKICAgICAgfQoKCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgcGJhY2tmYWlsKGludF90
eXBlID0gdHJhaXRzX3R5cGU6OmVvZigpKQogICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9m
KCk7IH0KCgogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgeHNwdXRuKGNvbnN0IGNoYXJf
dHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAg
IG92ZXJmbG93KGludF90eXBlID0gdHJhaXRzX3R5cGU6OmVvZigpKQogICAgICB7IHJldHVybiB0
cmFpdHNfdHlwZTo6ZW9mKCk7IH0KIyA1MTYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfc3RyZWFtYnVmLmgiIDMKICAgIHByaXZhdGU6CiAgICAgIGJhc2ljX3N0cmVhbWJ1Zihj
b25zdCBfX3N0cmVhbWJ1Zl90eXBlJik7CgogICAgICBfX3N0cmVhbWJ1Zl90eXBlJgogICAgICBv
cGVyYXRvcj0oY29uc3QgX19zdHJlYW1idWZfdHlwZSYpOwoKICAgIH07Cgp9CgoKCgojIDEgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdHJlYW1idWYudGNjIiAxIDMKIyAzNyAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0cmVhbWJ1Zi50Y2MiIDMKbmFtZXNwYWNlIHN0
ZCB7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh
c2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfc3RyZWFt
YnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2J1bXBjKCkKICAgIHsKICAgICAgaW50X3R5cGUg
X19yZXQ7CiAgICAgIGlmIChfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwgX01faW5fZW5kKQogICAg
ICAgIHsKICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSAqZ3B0cigpOwogICAgICAgICAgX01faW5f
Y3VyX21vdmUoMSk7CiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShf
X2MpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9fcmV0ID0gdGhpcy0+dWZsb3coKTsK
ICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50
X3R5cGUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNwdXRiYWNr
YyhjaGFyX3R5cGUgX19jKQogICAgewogICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgYm9vbCBf
X3Rlc3Rwb3MgPSBfTV9pbl9jdXIgJiYgX01faW5fYmVnIDwgX01faW5fY3VyOwogICAgICBib29s
IF9fdGVzdG5lID0gX01faW5fY3VyICYmICF0cmFpdHNfdHlwZTo6ZXEoX19jLCB0aGlzLT5ncHRy
KClbLTFdKTsKICAgICAgaWYgKCFfX3Rlc3Rwb3MgfHwgX190ZXN0bmUpCiAgICAgICAgX19yZXQg
PSBwYmFja2ZhaWwodHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYykpOwogICAgICBlbHNlCiAg
ICAgICAgewogICAgICAgICAgX01faW5fY3VyX21vdmUoLTEpOwogICAgICAgICAgX19yZXQgPSB0
cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKnRoaXMtPmdwdHIoKSk7CiAgICAgICAgfQogICAgICBy
ZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQog
ICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc3VuZ2V0YygpCiAgICB7
CiAgICAgIGludF90eXBlIF9fcmV0OwogICAgICBpZiAoX01faW5fY3VyICYmIF9NX2luX2JlZyA8
IF9NX2luX2N1cikKICAgICAgICB7CiAgICAgICAgICBfTV9pbl9jdXJfbW92ZSgtMSk7CiAgICAg
ICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX01faW5fY3VyKTsKICAgICAg
ICB9CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHRoaXMtPnBiYWNrZmFpbCgpOwogICAgICBy
ZXR1cm4gX19yZXQ7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90
eXBlCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzcHV0YyhjaGFy
X3R5cGUgX19jKQogICAgewogICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgaWYgKF9NX291dF9i
dWZfc2l6ZSgpKQogICAgICAgIHsKICAgICAgICAgICpfTV9vdXRfY3VyID0gX19jOwogICAgICAg
ICAgX01fb3V0X2N1cl9tb3ZlKDEpOwogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9f
aW50X3R5cGUoX19jKTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHRoaXMt
Pm92ZXJmbG93KHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpKTsKICAgICAgcmV0dXJuIF9f
cmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBzdHJlYW1zaXplCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAg
ICB4c2dldG4oY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBzdHJl
YW1zaXplIF9fcmV0ID0gMDsKICAgICAgd2hpbGUgKF9fcmV0IDwgX19uKQogICAgICAgIHsKICAg
ICAgICAgIHNpemVfdCBfX2J1Zl9sZW4gPSBfTV9pbl9lbmQgLSBfTV9pbl9jdXI7CiAgICAgICAg
ICBpZiAoX19idWZfbGVuID4gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHNpemVfdCBf
X3JlbWFpbmluZyA9IF9fbiAtIF9fcmV0OwogICAgICAgICAgICAgIHNpemVfdCBfX2xlbiA9IG1p
bihfX2J1Zl9sZW4sIF9fcmVtYWluaW5nKTsKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29w
eShfX3MsIF9NX2luX2N1ciwgX19sZW4pOwogICAgICAgICAgICAgIF9fcmV0ICs9IF9fbGVuOwog
ICAgICAgICAgICAgIF9fcyArPSBfX2xlbjsKICAgICAgICAgICAgICBfTV9pbl9jdXJfbW92ZShf
X2xlbik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoX19yZXQgPCBfX24pCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSB0aGlzLT51ZmxvdygpOwogICAgICAg
ICAgICAgIGlmIChfX2MgIT0gdHJhaXRzX3R5cGU6OmVvZigpKQogICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKCpfX3MrKywgdHJhaXRzX3R5cGU6
OnRvX2NoYXJfdHlwZShfX2MpKTsKICAgICAgICAgICAgICAgICAgKytfX3JldDsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCgoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVhbXNpemUKICAg
IGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHhzcHV0bihjb25zdCBjaGFy
X3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX19yZXQg
PSAwOwogICAgICB3aGlsZSAoX19yZXQgPCBfX24pCiAgICAgICAgewogICAgICAgICAgb2ZmX3R5
cGUgX19idWZfbGVuID0gX01fb3V0X2J1Zl9zaXplKCk7CiAgICAgICAgICBpZiAoX19idWZfbGVu
ID4gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIG9mZl90eXBlIF9fcmVtYWluaW5nID0g
X19uIC0gX19yZXQ7CiAgICAgICAgICAgICAgb2ZmX3R5cGUgX19sZW4gPSBtaW4oX19idWZfbGVu
LCBfX3JlbWFpbmluZyk7CiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX01fb3V0X2N1
ciwgX19zLCBfX2xlbik7CiAgICAgICAgICAgICAgX19yZXQgKz0gX19sZW47CiAgICAgICAgICAg
ICAgX19zICs9IF9fbGVuOwogICAgICAgICAgICAgIF9NX291dF9jdXJfbW92ZShfX2xlbik7CiAg
ICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoX19yZXQgPCBfX24pCiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSB0aGlzLT5vdmVyZmxvdyh0cmFpdHNfdHlwZTo6dG9f
aW50X3R5cGUoKl9fcykpOwogICAgICAgICAgICAgIGlmIChfX2MgIT0gdHJhaXRzX3R5cGU6OmVv
ZigpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICArK19fcmV0OwogICAgICAg
ICAgICAgICAgICArK19fczsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu
IF9fcmV0OwogICAgfQoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9zPF9D
aGFyVCwgX1RyYWl0cz4mIF9faW9zLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFt
YnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JpbiwKICAgICAgICAgICAgICAgICAgICAgIGJhc2lj
X3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Nib3V0KQogIHsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKCiAgICAgIHN0cmVhbXNpemUgX19y
ZXQgPSAwOwogICAgICBzdHJlYW1zaXplIF9fYnVmc2l6ZSA9IF9fc2Jpbi0+aW5fYXZhaWwoKTsK
ICAgICAgc3RyZWFtc2l6ZSBfX3h0cmN0OwogICAgICBib29sIF9fdGVzdHB1dCA9IF9fc2JvdXQt
Pl9NX21vZGUgJiBpb3NfYmFzZTo6b3V0OwogICAgICB0cnkgewogICAgICAgIHdoaWxlIChfX3Rl
c3RwdXQgJiYgX19idWZzaXplICE9IC0xKQogICAgICAgICAgewogICAgICAgICAgICBfX3h0cmN0
ID0gX19zYm91dC0+c3B1dG4oX19zYmluLT5ncHRyKCksIF9fYnVmc2l6ZSk7CiAgICAgICAgICAg
IF9fcmV0ICs9IF9feHRyY3Q7CiAgICAgICAgICAgIF9fc2Jpbi0+X01faW5fY3VyX21vdmUoX194
dHJjdCk7CiAgICAgICAgICAgIGlmIChfX3h0cmN0ID09IF9fYnVmc2l6ZSkKICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiaW4tPnNnZXRjKCk7CiAgICAg
ICAgICAgICAgICBpZiAoX19jID09IF9UcmFpdHM6OmVvZigpKQogICAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgX19pb3Muc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIF9fYnVmc2l6ZSA9IF9fc2Jpbi0+aW5fYXZhaWwoKTsKICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgfQogICAg
ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkgewogICAgICAgIGlmICgoX19pb3MuZXhjZXB0aW9u
cygpICYgaW9zX2Jhc2U6OmZhaWxiaXQpICE9IDApCiAgICAgICAgICB0aHJvdzsKICAgICAgfQog
ICAgICByZXR1cm4gX19yZXQ7CiAgICB9Cn0KIyA1MzAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDIgMwojIDQ2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RkX2lvcy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvYmFzaWNfaW9zLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
YmFzaWNfaW9zLmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3NidWZf
aXRlci5oIiAxIDMKIyAzNiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3NidWZfaXRl
ci5oIiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBp
dGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAg
ewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBl
ZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9D
aGFyVCwgX1RyYWl0cz4gc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+IG9zdHJlYW1fdHlwZTsKCiAgICBwcml2YXRlOgogICAgICBzdHJl
YW1idWZfdHlwZSogX01fc2J1ZjsKICAgICAgYm9vbCBfTV9mYWlsZWQ7CgogICAgcHVibGljOgog
ICAgICBpbmxpbmUKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcihvc3RyZWFtX3R5cGUmIF9fcykg
dGhyb3cgKCkKICAgICAgOiBfTV9zYnVmKF9fcy5yZGJ1ZigpKSwgX01fZmFpbGVkKCFfTV9zYnVm
KSB7IH0KCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3Ioc3RyZWFtYnVmX3R5cGUqIF9fcykgdGhy
b3cgKCkKICAgICAgOiBfTV9zYnVmKF9fcyksIF9NX2ZhaWxlZCghX01fc2J1ZikgeyB9CgogICAg
ICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0oX0NoYXJUIF9fYyk7CgogICAg
ICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuICp0aGlzOyB9CgogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRv
cisrKGludCkgdGhyb3coKQogICAgICB7IHJldHVybiAqdGhpczsgfQoKICAgICAgb3N0cmVhbWJ1
Zl9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHRocm93KCkKICAgICAgeyByZXR1cm4gKnRo
aXM7IH0KCiAgICAgIGJvb2wKICAgICAgZmFpbGVkKCkgY29uc3QgdGhyb3coKQogICAgICB7IHJl
dHVybiBfTV9mYWlsZWQ7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGlubGluZSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9y
PShfQ2hhclQgX19jKQogICAgewogICAgICBpZiAoIV9NX2ZhaWxlZCAmJgogICAgICAgICAgX1Ry
YWl0czo6ZXFfaW50X3R5cGUoX01fc2J1Zi0+c3B1dGMoX19jKSxfVHJhaXRzOjplb2YoKSkpCiAg
ICAgIF9NX2ZhaWxlZCA9IHRydWU7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBpc3RyZWFt
YnVmX2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxpbnB1dF9pdGVyYXRvcl90YWcsIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICBf
Q2hhclQqLCBfQ2hhclQmPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQg
Y2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgYmFz
aWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVk
ZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IGlzdHJlYW1fdHlwZTsKCiAgICAgIHR5
cGVkZWYgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbWJ1Zml0
ZXJfdHlwZTsKCiAgICBwcml2YXRlOgoKCgoKCgoKICAgICAgc3RyZWFtYnVmX3R5cGUqIF9NX3Ni
dWY7CiAgICAgIGludF90eXBlIF9NX2M7CgogICAgcHVibGljOgogICAgICBpc3RyZWFtYnVmX2l0
ZXJhdG9yKCkgdGhyb3coKQogICAgICA6IF9NX3NidWYoMCksIF9NX2MoLTIpIHsgfQoKICAgICAg
aXN0cmVhbWJ1Zl9pdGVyYXRvcihpc3RyZWFtX3R5cGUmIF9fcykgdGhyb3coKQogICAgICA6IF9N
X3NidWYoX19zLnJkYnVmKCkpLCBfTV9jKC0yKSB7IH0KCiAgICAgIGlzdHJlYW1idWZfaXRlcmF0
b3Ioc3RyZWFtYnVmX3R5cGUqIF9fcykgdGhyb3coKQogICAgICA6IF9NX3NidWYoX19zKSwgX01f
YygtMikgeyB9CgoKCgogICAgICBjaGFyX3R5cGUKICAgICAgb3BlcmF0b3IqKCkgY29uc3QKICAg
ICAgewoKICAgICAgICBjaGFyX3R5cGUgX19yZXQ7CiAgICAgICAgaWYgKF9NX3NidWYgJiYgX01f
YyAhPSBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oLTIpKQogICAgICAgICAgX19yZXQgPSBfTV9jOwog
ICAgICAgIGVsc2UgaWYgKF9NX3NidWYpCiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0
b19jaGFyX3R5cGUoX01fc2J1Zi0+c2dldGMoKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgX19y
ZXQgPSBzdGF0aWNfY2FzdDxjaGFyX3R5cGU+KHRyYWl0c190eXBlOjplb2YoKSk7CiAgICAgICAg
cmV0dXJuIF9fcmV0OwogICAgICB9CgogICAgICBfX2lzdHJlYW1idWZpdGVyX3R5cGUmCiAgICAg
IG9wZXJhdG9yKysoKQogICAgICB7CiAgICAgICAgaWYgKF9NX3NidWYpCiAgICAgICAgICBfTV9z
YnVmLT5zYnVtcGMoKTsKICAgICAgICBfTV9jID0gLTI7CiAgICAgICAgcmV0dXJuICp0aGlzOwog
ICAgICB9CgogICAgICBfX2lzdHJlYW1idWZpdGVyX3R5cGUKICAgICAgb3BlcmF0b3IrKyhpbnQp
CiAgICAgIHsKICAgICAgICBfX2lzdHJlYW1idWZpdGVyX3R5cGUgX19vbGQgPSAqdGhpczsKICAg
ICAgICBpZiAoX01fc2J1ZikKICAgICAgICAgIF9fb2xkLl9NX2MgPSBfTV9zYnVmLT5zYnVtcGMo
KTsKICAgICAgICBfTV9jID0gLTI7CiAgICAgICAgcmV0dXJuIF9fb2xkOwogICAgICB9CgogICAg
ICBib29sCiAgICAgIGVxdWFsKGNvbnN0IF9faXN0cmVhbWJ1Zml0ZXJfdHlwZSYgX19iKQogICAg
ICB7CiAgICAgICAgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAg
Ym9vbCBfX3RoaXNlb2YgPSAhX01fc2J1ZiB8fCBfTV9zYnVmLT5zZ2V0YygpID09IF9fZW9mOwog
ICAgICAgIGJvb2wgX19iZW9mID0gIV9fYi5fTV9zYnVmCiAgICAgICAgICAgICAgICAgICAgICB8
fCBfX2IuX01fc2J1Zi0+c2dldGMoKSA9PSBfX2VvZjsKICAgICAgICByZXR1cm4gKF9fdGhpc2Vv
ZiAmJiBfX2Jlb2YgfHwgKCFfX3RoaXNlb2YgJiYgIV9fYmVvZikpOwogICAgICB9CgoKCgogICAg
ICBib29sCiAgICAgIGVxdWFsKGNvbnN0IF9faXN0cmVhbWJ1Zml0ZXJfdHlwZSYgX19iKSBjb25z
dAogICAgICB7CiAgICAgICAgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAg
ICAgICAgYm9vbCBfX3RoaXNlb2YgPSAhX01fc2J1ZiB8fCBfTV9zYnVmLT5zZ2V0YygpID09IF9f
ZW9mOwogICAgICAgIGJvb2wgX19iZW9mID0gIV9fYi5fTV9zYnVmCiAgICAgICAgICAgICAgICAg
ICAgICB8fCBfX2IuX01fc2J1Zi0+c2dldGMoKSA9PSBfX2VvZjsKICAgICAgICByZXR1cm4gKF9f
dGhpc2VvZiAmJiBfX2Jlb2YgfHwgKCFfX3RoaXNlb2YgJiYgIV9fYmVvZikpOwogICAgICB9Cgog
ICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
aW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hh
clQsIF9UcmFpdHM+JiBfX2EsCiAgICAgICAgICAgICAgIGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0
b3I8X0NoYXJULCBfVHJhaXRzPiYgX19iKQogICAgeyByZXR1cm4gX19hLmVxdWFsKF9fYik7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5l
IGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9U
cmFpdHM+JiBfX2EsCiAgICAgICAgICAgICAgIGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0No
YXJULCBfVHJhaXRzPiYgX19iKQogICAgeyByZXR1cm4gIV9fYS5lcXVhbChfX2IpOyB9Cn0KIyAz
NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2lvcy5oIiAyIDMKIyAxICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAxIDMKIyA0MCAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMwoKIyAxICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N0aW1lLmgiIDEgMwojIDM3ICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N0aW1lLmgiIDMKIyAxICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3RpbWUuaCIgMiAzCiMgNDAgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfY3RpbWUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgi
IDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1
cmVzLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMKCmV4dGVybiAiQyIgewoK
CgoKCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9p
bmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL3RpbWUu
aCIgMiAzCiMgOTUgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKc3RydWN0IHRtCnsKICBpbnQgdG1f
c2VjOwogIGludCB0bV9taW47CiAgaW50IHRtX2hvdXI7CiAgaW50IHRtX21kYXk7CiAgaW50IHRt
X21vbjsKICBpbnQgdG1feWVhcjsKICBpbnQgdG1fd2RheTsKICBpbnQgdG1feWRheTsKICBpbnQg
dG1faXNkc3Q7CgoKICBsb25nIGludCB0bV9nbXRvZmY7CiAgY29uc3QgY2hhciAqdG1fem9uZTsK
CgoKCn07CgoKCgpleHRlcm4gY2xvY2tfdCBjbG9jayAodm9pZCk7CgoKZXh0ZXJuIHRpbWVfdCB0
aW1lICh0aW1lX3QgKl9fdGltZXIpOwoKCmV4dGVybiBkb3VibGUgZGlmZnRpbWUgKHRpbWVfdCBf
X3RpbWUxLCB0aW1lX3QgX190aW1lMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgoKZXh0ZXJuIHRpbWVfdCBta3RpbWUgKHN0cnVjdCB0bSAqX190cCk7CgoKCgoKZXh0ZXJuIHNp
emVfdCBzdHJmdGltZSAoY2hhciAqIF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwgY29uc3QgY2hhciAq
IF9fZm9ybWF0LCBjb25zdCBzdHJ1Y3QgdG0gKiBfX3RwKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKnN0
cnB0aW1lIChjb25zdCBjaGFyICpfX3MsIGNvbnN0IGNoYXIgKl9fZm10LCBzdHJ1Y3QgdG0gKl9f
dHApOwoKCgoKCgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWUgKGNvbnN0IHRpbWVfdCAqX190aW1l
cik7CgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZSAoY29uc3QgdGltZV90ICpfX3RpbWVy
KTsKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKl9fZ210aW1lX3IgKGNvbnN0IHRpbWVfdCAqIF9fdGlt
ZXIsIHN0cnVjdCB0bSAqIF9fdHApOwoKZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lX3IgKGNvbnN0
IHRpbWVfdCAqIF9fdGltZXIsIHN0cnVjdCB0bSAqIF9fdHApOwoKCgoKZXh0ZXJuIHN0cnVjdCB0
bSAqbG9jYWx0aW1lX3IgKGNvbnN0IHRpbWVfdCAqIF9fdGltZXIsIHN0cnVjdCB0bSAqIF9fdHAp
OwoKCgoKCmV4dGVybiBjaGFyICphc2N0aW1lIChjb25zdCBzdHJ1Y3QgdG0gKl9fdHApOwoKCmV4
dGVybiBjaGFyICpjdGltZSAoY29uc3QgdGltZV90ICpfX3RpbWVyKTsKCgoKCgoKZXh0ZXJuIGNo
YXIgKmFzY3RpbWVfciAoY29uc3Qgc3RydWN0IHRtICogX190cCwgY2hhciAqIF9fYnVmKTsKCgoK
ZXh0ZXJuIGNoYXIgKmN0aW1lX3IgKGNvbnN0IHRpbWVfdCAqIF9fdGltZXIsIGNoYXIgKiBfX2J1
Zik7CgoKCgoKZXh0ZXJuIGNoYXIgKl9fdHpuYW1lWzJdOwpleHRlcm4gaW50IF9fZGF5bGlnaHQ7
CmV4dGVybiBsb25nIGludCBfX3RpbWV6b25lOwoKCgoKZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsK
CgoKZXh0ZXJuIHZvaWQgdHpzZXQgKHZvaWQpOwoKCgpleHRlcm4gaW50IGRheWxpZ2h0OwpleHRl
cm4gbG9uZyBpbnQgdGltZXpvbmU7CgoKCgoKZXh0ZXJuIGludCBzdGltZSAoY29uc3QgdGltZV90
ICpfX3doZW4pOwojIDIyOCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gdGltZV90IHRp
bWVnbSAoc3RydWN0IHRtICpfX3RwKTsKCgpleHRlcm4gdGltZV90IHRpbWVsb2NhbCAoc3RydWN0
IHRtICpfX3RwKTsKCgpleHRlcm4gaW50IGR5c2l6ZSAoaW50IF9feWVhcik7CgoKCgoKZXh0ZXJu
IGludCBuYW5vc2xlZXAgKGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXF1ZXN0ZWRfdGltZSwg
c3RydWN0IHRpbWVzcGVjICpfX3JlbWFpbmluZyk7CiMgMjU3ICIvdXNyL2luY2x1ZGUvdGltZS5o
IiAzCmV4dGVybiBpbnQgZ2V0ZGF0ZV9lcnI7CgoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqZ2V0ZGF0
ZSAoY29uc3QgY2hhciAqX19zdHJpbmcpOwojIDI3MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpl
eHRlcm4gaW50IGdldGRhdGVfciAoY29uc3QgY2hhciAqIF9fc3RyaW5nLCBzdHJ1Y3QgdG0gKiBf
X3Jlc2J1ZnApOwoKCgoKfQojIDQxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X2N0aW1lLmgiIDIgMwojIDUzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N0
aW1lLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpjbG9ja190OwogIHVzaW5nIDo6dGlt
ZV90OwogIHVzaW5nIDo6dG07CgogIHVzaW5nIDo6Y2xvY2s7CiAgdXNpbmcgOjpkaWZmdGltZTsK
ICB1c2luZyA6Om1rdGltZTsKICB1c2luZyA6OnRpbWU7CiAgdXNpbmcgOjphc2N0aW1lOwogIHVz
aW5nIDo6Y3RpbWU7CiAgdXNpbmcgOjpnbXRpbWU7CiAgdXNpbmcgOjpsb2NhbHRpbWU7CiAgdXNp
bmcgOjpzdHJmdGltZTsKfQojIDQyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9j
YWxlX2ZhY2V0cy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X2lvcy5oIiAxIDMKIyA0MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9m
YWNldHMuaCIgMiAzCgoKCgoKCm5hbWVzcGFjZSBzdGQKewoKCiMgMSAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9pNTg2LXBjLWxpbnV4LWdudS9iaXRzL2N0eXBlX2Jhc2UuaCIgMSAzCiMgNTAg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTU4Ni1wYy1saW51eC1nbnUvYml0cy9jdHlwZV9i
YXNlLmgiIDMKICBzdHJ1Y3QgY3R5cGVfYmFzZQogIHsKCiAgICB0eXBlZGVmIGNvbnN0IGludCog
X190b190eXBlOwoKCgogICAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtYXNrOwogICAgc3RhdGlj
IGNvbnN0IG1hc2sgdXBwZXIgPSBfSVN1cHBlcjsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGxvd2Vy
ID0gX0lTbG93ZXI7CiAgICBzdGF0aWMgY29uc3QgbWFzayBhbHBoYSA9IF9JU2FscGhhOwogICAg
c3RhdGljIGNvbnN0IG1hc2sgZGlnaXQgPSBfSVNkaWdpdDsKICAgIHN0YXRpYyBjb25zdCBtYXNr
IHhkaWdpdCA9IF9JU3hkaWdpdDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHNwYWNlID0gX0lTc3Bh
Y2U7CiAgICBzdGF0aWMgY29uc3QgbWFzayBwcmludCA9IF9JU3ByaW50OwogICAgc3RhdGljIGNv
bnN0IG1hc2sgZ3JhcGggPSBfSVNncmFwaDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGNudHJsID0g
X0lTY250cmw7CiAgICBzdGF0aWMgY29uc3QgbWFzayBwdW5jdCA9IF9JU3B1bmN0OwogICAgc3Rh
dGljIGNvbnN0IG1hc2sgYWxudW0gPSBfSVNhbG51bTsKICB9OwojIDU0ICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4KICAgIGNsYXNzIF9fY3R5cGVfYWJzdHJhY3RfYmFzZSA6IHB1YmxpYyBsb2Nh
bGU6OmZhY2V0LCBwdWJsaWMgY3R5cGVfYmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlw
ZWRlZiBfQ2hhclQgY2hhcl90eXBlOwoKICAgICAgYm9vbAogICAgICBpcyhtYXNrIF9fbSwgY2hh
cl90eXBlIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9faXMoX19tLCBfX2MpOyB9
CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGlzKGNvbnN0IGNoYXJfdHlwZSAqX19sbywg
Y29uc3QgY2hhcl90eXBlICpfX2hpLCBtYXNrICpfX3ZlYykgY29uc3QKICAgICAgeyByZXR1cm4g
dGhpcy0+ZG9faXMoX19sbywgX19oaSwgX192ZWMpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUq
CiAgICAgIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hh
cl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19zY2FuX2lzKF9fbSwg
X19sbywgX19oaSk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgc2Nhbl9ub3QobWFz
ayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25z
dAogICAgICB7IHJldHVybiB0aGlzLT5kb19zY2FuX25vdChfX20sIF9fbG8sIF9faGkpOyB9Cgog
ICAgICBjaGFyX3R5cGUKICAgICAgdG91cHBlcihjaGFyX3R5cGUgX19jKSBjb25zdAogICAgICB7
IHJldHVybiB0aGlzLT5kb190b3VwcGVyKF9fYyk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoK
ICAgICAgdG91cHBlcihjaGFyX3R5cGUgKl9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29u
c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG91cHBlcihfX2xvLCBfX2hpKTsgfQoKICAgICAg
Y2hhcl90eXBlCiAgICAgIHRvbG93ZXIoY2hhcl90eXBlIF9fYykgY29uc3QKICAgICAgeyByZXR1
cm4gdGhpcy0+ZG9fdG9sb3dlcihfX2MpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAg
IHRvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvbG93ZXIoX19sbywgX19oaSk7IH0KCiAgICAgIGNoYXJf
dHlwZQogICAgICB3aWRlbihjaGFyIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f
d2lkZW4oX19jKTsgfQoKICAgICAgY29uc3QgY2hhcioKICAgICAgd2lkZW4oY29uc3QgY2hhciog
X19sbywgY29uc3QgY2hhciogX19oaSwgY2hhcl90eXBlKiBfX3RvKSBjb25zdAogICAgICB7IHJl
dHVybiB0aGlzLT5kb193aWRlbihfX2xvLCBfX2hpLCBfX3RvKTsgfQoKICAgICAgY2hhcgogICAg
ICBuYXJyb3coY2hhcl90eXBlIF9fYywgY2hhciBfX2RmYXVsdCkgY29uc3QKICAgICAgeyByZXR1
cm4gdGhpcy0+ZG9fbmFycm93KF9fYywgX19kZmF1bHQpOyB9CgogICAgICBjb25zdCBjaGFyX3R5
cGUqCiAgICAgIG5hcnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSog
X19oaSwKICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyICpfX3RvKSBjb25zdAogICAg
ICB7IHJldHVybiB0aGlzLT5kb19uYXJyb3coX19sbywgX19oaSwgX19kZmF1bHQsIF9fdG8pOyB9
CgogICAgcHJvdGVjdGVkOgogICAgICBleHBsaWNpdAogICAgICBfX2N0eXBlX2Fic3RyYWN0X2Jh
c2Uoc2l6ZV90IF9fcmVmcyA9IDApOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICB2
aXJ0dWFsCiAgICAgIH5fX2N0eXBlX2Fic3RyYWN0X2Jhc2UoKSB7IH0KCiAgICAgIHZpcnR1YWwg
Ym9vbAogICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3QgPSAwOwoKICAg
ICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX2lzKGNvbnN0IGNoYXJfdHlwZSog
X19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICBtYXNrKiBfX3ZlYykgY29u
c3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5faXMo
bWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl
KgogICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsKCiAgICAgIHZp
cnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKSBjb25zdCA9IDA7Cgog
ICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUq
IF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBj
aGFyX3R5cGUKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUpIGNvbnN0ID0gMDsKCiAgICAgIHZp
cnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19sbywg
Y29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlw
ZQogICAgICBkb193aWRlbihjaGFyKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksCiAg
ICAgICAgICAgICAgIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFs
IGNoYXIKICAgICAgZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3QgPSAw
OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX25hcnJvdyhjb25zdCBj
aGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKICAgICAgICAgICAgICAgICBj
aGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0ID0gMDsKICAgIH07CgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjdHlwZSA6IHB1YmxpYyBfX2N0eXBlX2Fic3Ry
YWN0X2Jhc2U8X0NoYXJUPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQg
Y2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGN0eXBlOjptYXNrIG1hc2s7CgogICAg
ICBleHBsaWNpdAogICAgICBjdHlwZShzaXplX3QgX19yZWZzID0gMCkgOiBfX2N0eXBlX2Fic3Ry
YWN0X2Jhc2U8X0NoYXJUPihfX3JlZnMpIHsgfQoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7
CgogICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmN0eXBlKCkgeyB9CgogICAgICB2
aXJ0dWFsIGJvb2wKICAgICAgZG9faXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIGZhbHNlOyB9CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAg
ICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksIG1h
c2sqIF9fdmVjKSBjb25zdAogICAgICB7IHJldHVybiBfX2hpOyB9CgogICAgICB2aXJ0dWFsIGNv
bnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBl
KiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9faGk7
IH0KCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX25vdChtYXNr
IF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
X3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9faGk7IH0KCiAgICAgIHZpcnR1YWwg
Y2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlIF9fYykgY29uc3QKICAgICAgeyBy
ZXR1cm4gX19jOyB9CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG91
cHBlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAg
eyByZXR1cm4gX19oaTsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG9sb3dl
cihjaGFyX3R5cGUgX19jKSBjb25zdAogICAgICB7IHJldHVybiBfX2M7IH0KCiAgICAgIHZpcnR1
YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29u
c3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiBfX2hpOyB9CgogICAgICB2
aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb193aWRlbihjaGFyIF9fYykgY29uc3QKICAgICAgeyBy
ZXR1cm4gY2hhcl90eXBlKCk7IH0KCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcioKICAgICAgZG9f
d2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgY2hhcl90eXBlKiBfX2Rl
c3QpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9faGk7IH0KCiAgICAgIHZpcnR1YWwgY2hhcgogICAg
ICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdAogICAgICB7IHJldHVy
biBfX2RmYXVsdDsgfQoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX25h
cnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKICAgICAg
ICAgICAgICAgIGNoYXIgX19kZmF1bHQsIGNoYXIqIF9fZGVzdCkgY29uc3QKICAgICAgeyByZXR1
cm4gX19oaTsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9jYWxl
OjppZCBjdHlwZTxfQ2hhclQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIGNsYXNzIGN0eXBlPGNo
YXI+IDogcHVibGljIF9fY3R5cGVfYWJzdHJhY3RfYmFzZTxjaGFyPgogICAgewogICAgcHVibGlj
OgoKICAgICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsKCiAgICBwcml2YXRlOgoKICAgICAgYm9v
bCBfTV9kZWw7CiAgICAgIF9fdG9fdHlwZSBjb25zdCYgX01fdG91cHBlcjsKICAgICAgX190b190
eXBlIGNvbnN0JiBfTV90b2xvd2VyOwogICAgICBjb25zdCBtYXNrKiBjb25zdCYgX01fY3RhYmxl
OwogICAgICBjb25zdCBtYXNrKiBfTV90YWJsZTsKCiAgICBwdWJsaWM6CiAgICAgIHN0YXRpYyBs
b2NhbGU6OmlkIGlkOwogICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHRhYmxlX3NpemUgPSAxICsg
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oLTEpOwoKICAgICAgZXhwbGljaXQKICAgICAgY3R5
cGUoY29uc3QgbWFzayogX190YWJsZSA9IDAsIGJvb2wgX19kZWwgPSBmYWxzZSwgc2l6ZV90IF9f
cmVmcyA9IDApOwoKICAgICAgaW5saW5lIGJvb2wKICAgICAgaXMobWFzayBfX20sIGNoYXIgX19j
KSBjb25zdDsKCiAgICAgIGlubGluZSBjb25zdCBjaGFyKgogICAgICBpcyhjb25zdCBjaGFyKiBf
X2xvLCBjb25zdCBjaGFyKiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3Q7CgogICAgICBpbmxpbmUg
Y29uc3QgY2hhcioKICAgICAgc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhciogX19sbywgY29u
c3QgY2hhciogX19oaSkgY29uc3Q7CgogICAgICBpbmxpbmUgY29uc3QgY2hhcioKICAgICAgc2Nh
bl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGkpIGNvbnN0
OwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y3R5cGUoKTsKCiAgICAgIGNv
bnN0IG1hc2sqCiAgICAgIHRhYmxlKCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVybiBfTV90
YWJsZTsgfQoKICAgICAgY29uc3QgbWFzayoKICAgICAgY2xhc3NpY190YWJsZSgpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gX01fY3RhYmxlOyB9CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9f
aXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBj
aGFyX3R5cGUqCiAgICAgIGRvX2lzKGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90
eXBlKiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJf
dHlwZSoKICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLCBj
b25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5
cGUqCiAgICAgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sCiAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0
dWFsIGNoYXJfdHlwZQogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSkgY29uc3Q7CgogICAgICB2
aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUqIF9fbG8s
IGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQog
ICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNo
YXJfdHlwZSoKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlw
ZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb193aWRlbihj
aGFyKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcioKICAgICAgZG9fd2lkZW4oY29u
c3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgY2hhcl90eXBlKiBfX2Rlc3QpIGNvbnN0
OwoKICAgICAgdmlydHVhbCBjaGFyCiAgICAgIGRvX25hcnJvdyhjaGFyX3R5cGUsIGNoYXIgX19k
ZmF1bHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX25h
cnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKICAgICAg
ICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0OwogICAgfTsKCiAg
dGVtcGxhdGU8PgogICAgY29uc3QgY3R5cGU8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8Y3R5cGU8Y2hh
cj4gPihjb25zdCBsb2NhbGUmIF9fbG9jKTsKIyAzOTIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2k1ODYtcGMtbGludXgtZ251L2JpdHMvY3R5cGVfaW5saW5lLmgiIDEgMwojIDM3ICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2k1ODYtcGMtbGludXgtZ251L2JpdHMvY3R5cGVfaW5saW5lLmgi
IDMKICBib29sCiAgY3R5cGU8Y2hhcj46OgogIGlzKG1hc2sgX19tLCBjaGFyIF9fYykgY29uc3QK
ICB7IHJldHVybiBfTV90YWJsZVtfX2NdICYgX19tOyB9CgogIGNvbnN0IGNoYXIqCiAgY3R5cGU8
Y2hhcj46OgogIGlzKGNvbnN0IGNoYXIqIF9fbG93LCBjb25zdCBjaGFyKiBfX2hpZ2gsIG1hc2sq
IF9fdmVjKSBjb25zdAogIHsKICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaCkKICAgICAgKl9fdmVj
KysgPSBfTV90YWJsZVsqX19sb3crK107CiAgICByZXR1cm4gX19oaWdoOwogIH0KCiAgY29uc3Qg
Y2hhcioKICBjdHlwZTxjaGFyPjo6CiAgc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhciogX19s
b3csIGNvbnN0IGNoYXIqIF9faGlnaCkgY29uc3QKICB7CiAgICB3aGlsZSAoX19sb3cgPCBfX2hp
Z2ggJiYgIShfTV90YWJsZVsqX19sb3ddICYgX19tKSkKICAgICAgKytfX2xvdzsKICAgIHJldHVy
biBfX2xvdzsKICB9CgogIGNvbnN0IGNoYXIqCiAgY3R5cGU8Y2hhcj46OgogIHNjYW5fbm90KG1h
c2sgX19tLCBjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoKSBjb25zdAogIHsK
ICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaAogICAgICAgICAgICYmIChfTV90YWJsZVsqX19sb3dd
ICYgX19tKSAhPSAwKQogICAgICArK19fbG93OwogICAgcmV0dXJuIF9fbG93OwogIH0KIyAzOTMg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGVfYnluYW1lIDogcHVibGlj
IGN0eXBlPF9DaGFyVD4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hh
cl90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgY3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqLCBz
aXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5j
dHlwZV9ieW5hbWUoKSB7IH0KICAgIH07CgoKICB0ZW1wbGF0ZTw+CiAgICBjdHlwZV9ieW5hbWU8
Y2hhcj46OmN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IHJlZnMpOwoKCgojIDEgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9jb2RlY3Z0LmgiIDEgMwojIDQyICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvY29kZWN2dC5oIiAzCiMgMTczICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvY29kZWN2dC5oIiAzCiAgY2xhc3MgY29kZWN2dF9iYXNlCiAgewog
IHB1YmxpYzoKICAgIGVudW0gcmVzdWx0CiAgICB7CiAgICAgIG9rLAogICAgICBwYXJ0aWFsLAog
ICAgICBlcnJvciwKICAgICAgbm9jb252CiAgICB9OwogIH07CgoKCgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBj
bGFzcyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZQogICAgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwg
cHVibGljIGNvZGVjdnRfYmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBjb2Rl
Y3Z0X2Jhc2U6OnJlc3VsdCByZXN1bHQ7CiAgICAgIHR5cGVkZWYgX0ludGVyblQgaW50ZXJuX3R5
cGU7CiAgICAgIHR5cGVkZWYgX0V4dGVyblQgZXh0ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX1N0
YXRlVCBzdGF0ZV90eXBlOwoKCiAgICAgIHJlc3VsdAogICAgICBvdXQoc3RhdGVfdHlwZSYgX19z
dGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgIGNvbnN0IGludGVybl90
eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAg
ICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgIGV4
dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMt
PmRvX291dChfX3N0YXRlLCBfX2Zyb20sIF9fZnJvbV9lbmQsIF9fZnJvbV9uZXh0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX190bywgX190b19lbmQsIF9fdG9fbmV4dCk7CiAgICAgIH0K
CiAgICAgIHJlc3VsdAogICAgICB1bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90
eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgICAgZXh0ZXJuX3R5
cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Vuc2hpZnQoX19z
dGF0ZSwgX190byxfX3RvX2VuZCxfX3RvX25leHQpOyB9CgogICAgICByZXN1bHQKICAgICAgaW4o
c3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAg
Y29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9t
X25leHQsCiAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQs
CiAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAogICAgICB7CiAgICAgICAg
cmV0dXJuIHRoaXMtPmRvX2luKF9fc3RhdGUsIF9fZnJvbSwgX19mcm9tX2VuZCwgX19mcm9tX25l
eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdG8sIF9fdG9fZW5kLCBfX3RvX25leHQp
OwogICAgICB9CgogICAgICBpbnQKICAgICAgZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIHRoaXMtPmRvX2VuY29kaW5nKCk7IH0KCiAgICAgIGJvb2wKICAgICAgYWx3YXlz
X25vY29udigpIGNvbnN0IHRocm93KCkKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fYWx3YXlzX25v
Y29udigpOyB9CgogICAgICBpbnQKICAgICAgbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmIF9fc3Rh
dGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBleHRlcm5f
dHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f
bGVuZ3RoKF9fc3RhdGUsIF9fZnJvbSwgX19lbmQsIF9fbWF4KTsgfQoKICAgICAgaW50CiAgICAg
IG1heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX21heF9s
ZW5ndGgoKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgZXhwbGljaXQKICAgICAgX19jb2RlY3Z0
X2Fic3RyYWN0X2Jhc2Uoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMp
IHsgfQoKICAgICAgdmlydHVhbAogICAgICB+X19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2UoKSB7IH0K
CiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBj
b25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUq
IF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAg
ICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAg
ZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0
CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8s
CiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9f
dG9fbmV4dCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9faW4oc3Rh
dGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAg
Y29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9t
X25leHQsCiAgICAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19l
bmQsCiAgICAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdCA9IDA7CgogICAg
ICB2aXJ0dWFsIGludAogICAgICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCkgPSAwOwoKICAg
ICAgdmlydHVhbCBib29sCiAgICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpID0g
MDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwg
Y29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90
eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGludAog
ICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKSA9IDA7CiAgICB9OwoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRl
VD4KICAgIGNsYXNzIGNvZGVjdnQKICAgIDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNl
PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5
cGVkZWYgY29kZWN2dF9iYXNlOjpyZXN1bHQgcmVzdWx0OwogICAgICB0eXBlZGVmIF9JbnRlcm5U
IGludGVybl90eXBlOwogICAgICB0eXBlZGVmIF9FeHRlcm5UIGV4dGVybl90eXBlOwogICAgICB0
eXBlZGVmIF9TdGF0ZVQgc3RhdGVfdHlwZTsKCgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsK
CiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDog
X19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8X0ludGVyblQsX0V4dGVyblQsX1N0YXRlVD4gKF9fcmVm
cykgeyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCkgeyB9
CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQs
IHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBsb2NhbGU6OmlkIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRl
cm5ULCBfU3RhdGVUPjo6aWQ7CiMgNTk0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
Y29kZWN2dC5oIiAzCiAgdGVtcGxhdGU8PgogICAgY2xhc3MgY29kZWN2dDxjaGFyLCBjaGFyLCBt
YnN0YXRlX3Q+CiAgICA6IHB1YmxpYyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxjaGFyLCBjaGFy
LCBtYnN0YXRlX3Q+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNoYXIgaW50ZXJu
X3R5cGU7CiAgICAgIHR5cGVkZWYgY2hhciBleHRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0
YXRlX3Qgc3RhdGVfdHlwZTsKCgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4
cGxpY2l0CiAgICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoK
ICAgICAgdmlydHVhbAogICAgICB+Y29kZWN2dCgpOwoKICAgICAgdmlydHVhbCByZXN1bHQKICAg
ICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20s
CiAgICAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJu
X3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRl
cm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkg
Y29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUm
IF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLAogICAgICAgICAgICAgICAgIGV4dGVybl90eXBl
KiBfX3RvX2VuZCwgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVh
bCByZXN1bHQKICAgICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5
cGUqIF9fZnJvbSwKICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNv
bnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgIGludGVybl90eXBlKiBf
X3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgIGludGVybl90eXBlKiYgX190
b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2VuY29kaW5nKCkgY29u
c3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19hbHdheXNfbm9jb252KCkg
Y29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2xlbmd0aChjb25zdCBz
dGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgICAgIGNv
bnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdDsKCiAgICAgIHZpcnR1
YWwgaW50CiAgICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpOwogIH07CiMgNzAwICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvY29kZWN2dC5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAg
Y2xhc3MgY29kZWN2dF9ieW5hbWUgOiBwdWJsaWMgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQs
IF9TdGF0ZVQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnRf
YnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBjb2RlY3Z0PF9J
bnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4oX19yZWZzKSB7IH0KICAgIHByb3RlY3RlZDoKICAg
ICAgdmlydHVhbAogICAgICB+Y29kZWN2dF9ieW5hbWUoKSB7IH0KICAgIH07CiMgNDE2ICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xhc3MgX051bWVyaWNf
Z2V0OwoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIF9Gb3JtYXRf
Y2FjaGUKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsK
ICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IHRyYWl0c190eXBlOwogICAgICB0eXBl
ZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVu
YW1lIHN0cmluZ190eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwoKCiAgICAgIGZyaWVuZCBjbGFz
cyBsb2NhbGU7CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyLCB0eXBlbmFtZSBfSW5JdGVy
PgogICAgICAgIGZyaWVuZCBjbGFzcyBfTnVtZXJpY19nZXQ7CiAgICAgIGZyaWVuZCBjbGFzcyBu
dW1fZ2V0PF9DaGFyVD47CiAgICAgIGZyaWVuZCBjbGFzcyBudW1fcHV0PF9DaGFyVD47CiAgICAg
IGZyaWVuZCBjbGFzcyB0aW1lX2dldDxfQ2hhclQ+OwogICAgICBmcmllbmQgY2xhc3MgbW9uZXlf
Z2V0PF9DaGFyVD47CiAgICAgIGZyaWVuZCBjbGFzcyB0aW1lX3B1dDxfQ2hhclQ+OwogICAgICBm
cmllbmQgY2xhc3MgbW9uZXlfcHV0PF9DaGFyVD47CgoKCgogICAgICBzdGF0aWMgaW50IF9TX3B3
b3JkX2l4OwoKCgogICAgICBib29sIF9NX3ZhbGlkOwoKCgogICAgICBzdGF0aWMgY29uc3QgY2hh
ciBfU19saXRlcmFsc1tdOwoKCgoKICAgICAgZW51bQogICAgICB7CiAgICAgICAgX1NfbWludXMs
CiAgICAgICAgX1NfcGx1cywKICAgICAgICBfU194LAogICAgICAgIF9TX1gsCiAgICAgICAgX1Nf
ZGlnaXRzLAogICAgICAgIF9TX2RpZ2l0c19lbmQgPSBfU19kaWdpdHMgKyAxNiwKICAgICAgICBf
U191ZGlnaXRzID0gX1NfZGlnaXRzX2VuZCwKICAgICAgICBfU191ZGlnaXRzX2VuZCA9IF9TX3Vk
aWdpdHMgKyAxNiwKICAgICAgICBfU19lZSA9IF9TX2RpZ2l0cyArIDE0LAogICAgICAgIF9TX0Vl
ID0gX1NfdWRpZ2l0cyArIDE0CiAgICAgIH07CgoKCgogICAgICBjaGFyX3R5cGUgX01fZGVjaW1h
bF9wb2ludDsKCgoKCgogICAgICBjaGFyX3R5cGUgX01fdGhvdXNhbmRzX3NlcDsKCgoKICAgICAg
c3RyaW5nX3R5cGUgX01fdHJ1ZW5hbWU7CiAgICAgIHN0cmluZ190eXBlIF9NX2ZhbHNlbmFtZTsK
CgoKICAgICAgYm9vbCBfTV91c2VfZ3JvdXBpbmc7CgoKCiAgICAgIHN0cmluZyBfTV9ncm91cGlu
ZzsKCiAgICAgIF9Gb3JtYXRfY2FjaGUoKTsKCiAgICAgIH5fRm9ybWF0X2NhY2hlKCkgdGhyb3co
KSB7IH0KCgoKCiAgICAgIHN0YXRpYyBfRm9ybWF0X2NhY2hlPF9DaGFyVD4qCiAgICAgIF9TX2dl
dChpb3NfYmFzZSYgX19pb3MpOwoKICAgICAgdm9pZAogICAgICBfTV9wb3B1bGF0ZShpb3NfYmFz
ZSYpOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfY2FsbGJhY2soaW9zX2Jhc2U6OmV2ZW50
IF9fZXZlbnQsIGlvc19iYXNlJiBfX2lvcywgaW50IF9faXgpIHRocm93KCk7CiAgICB9OwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbnQgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+Ojpf
U19wd29yZF9peDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY29uc3QgY2hhciBf
Rm9ybWF0X2NhY2hlPF9DaGFyVD46OgogICAgX1NfbGl0ZXJhbHNbXSA9ICItK3hYMDEyMzQ1Njc4
OWFiY2RlZjAxMjM0NTY3ODlBQkNERUYiOwoKICAgdGVtcGxhdGU8PiBfRm9ybWF0X2NhY2hlPGNo
YXI+OjpfRm9ybWF0X2NhY2hlKCk7CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfSW5JdGVyPgogICAgY2xhc3MgX051bWVyaWNfZ2V0CiAgICB7CiAgICBwdWJsaWM6
CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBp
dGVyX3R5cGU7CgoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9Jbkl0
ZXJUPgogICAgICBmcmllbmQgY2xhc3MgbnVtX2dldDsKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXIsIHR5cGVuYW1lIF9Jbkl0ZXJUPgogICAgICBmcmllbmQgY2xhc3MgdGltZV9nZXQ7CiAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyLCB0eXBlbmFtZSBfSW5JdGVyVD4KICAgICAgZnJp
ZW5kIGNsYXNzIG1vbmV5X2dldDsKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVu
YW1lIF9Jbkl0ZXJUPgogICAgICBmcmllbmQgY2xhc3MgbnVtX3B1dDsKICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9Jbkl0ZXJUPgogICAgICBmcmllbmQgY2xhc3MgdGlt
ZV9wdXQ7CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyLCB0eXBlbmFtZSBfSW5JdGVyVD4K
ICAgICAgZnJpZW5kIGNsYXNzIG1vbmV5X3B1dDsKCiAgICBwcml2YXRlOgogICAgICBleHBsaWNp
dAogICAgICBfTnVtZXJpY19nZXQoKSB7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfl9OdW1lcmlj
X2dldCgpIHsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIF9NX2dldF9kaWdpdHMoaXRlcl90eXBl
IF9faW4sIGl0ZXJfdHlwZSBfX2VuZCkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyBudW1fZ2V0IDogcHVibGljIGxv
Y2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJf
dHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKICAgICAgdHlwZWRlZiBjaGFy
X3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBp
ZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG51bV9nZXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9j
YWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5
cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19i
YXNlOjppb3N0YXRlJiBfX2VyciwgYm9vbCYgX192KSBjb25zdAogICAgICB7IHJldHVybiBkb19n
ZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAg
ICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywK
ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc2hvcnQmIF9fdikgY29uc3QKICAg
ICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAg
ICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBp
b3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgaW50JiBf
X3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIs
IF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVy
X3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm
IF9fZXJyLCBsb25nJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2Vu
ZCwgX19pbywgX19lcnIsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJf
dHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9z
X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAgICAgeyByZXR1
cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKCiAgICAgIGl0ZXJf
dHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2Um
IF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIHNob3J0
JiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19l
cnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0
ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0
ZSYgX19lcnIsIHVuc2lnbmVkIGludCYgX192KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXQo
X19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAg
Z2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAg
ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBsb25nJiBfX3YpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0K
CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19l
bmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1
bnNpZ25lZCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4s
IF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQo
aXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAg
ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGZsb2F0JiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJf
dHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2Um
IF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGRvdWJsZSYgX192KSBj
b25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3Yp
OyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUg
X19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy
LCBsb25nIGRvdWJsZSYgX192KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19l
bmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJf
dHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9z
X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB2b2lkKiYgX192KSBjb25zdAogICAgICB7IHJldHVybiBk
b19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgcHJvdGVjdGVkOgog
ICAgICB2aXJ0dWFsIH5udW1fZ2V0KCkgeyB9CgoKCgoKICAgICAgdm9pZAogICAgICBfTV9leHRy
YWN0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAg
ICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGNoYXIqIF9feHRyYywKICAg
ICAgICAgICAgICAgICBpbnQmIF9fYmFzZSwgYm9vbCBfX2ZwID0gdHJ1ZSkgY29uc3Q7CgogICAg
ICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlv
c19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBib29sJikgY29uc3Q7CgoKICAgICAgdmlydHVh
bCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYs
IGlvc19iYXNlOjppb3N0YXRlJiwgc2hvcnQmKSBjb25zdDsKICAgICAgdmlydHVhbCBpdGVyX3R5
cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNl
Ojppb3N0YXRlJiwgaW50JikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBk
b19nZXQgKGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRl
JiwgbG9uZyYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0
ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwK
ICAgICAgICAgICAgIGxvbmcgbG9uZyYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUK
ICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjpp
b3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCYpIGNvbnN0OwogICAg
ICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlv
c19iYXNlJiwKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVk
IGludCYpIGNvbnN0OwogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90
eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0
ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBl
CiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLAogICAgICAgICAg
ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBsb25nIGxvbmcmKSBjb25zdDsK
CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlw
ZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICBmbG9h
dCYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlw
ZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAg
ICAgICAgIGRvdWJsZSYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f
Z2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsCiAgICAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0
ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9z
X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgdm9pZComKSBjb25zdDsKICAgIH07
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGxvY2Fs
ZTo6aWQgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIHZv
aWQKICAgIG51bV9nZXQ8Y2hhciwgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiA+OjoKICAgIF9N
X2V4dHJhY3QoaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiBfX2JlZywKICAgICAgICAgICAgICAg
aXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAg
ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgY2hhciogX194dHJjLAogICAgICAgICAg
ICAgICBpbnQmIF9fYmFzZSwgYm9vbCBfX2ZwKSBjb25zdDsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgY2xhc3MgX051bWVyaWNfcHV0CiAgICB7
CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRl
ZiBfT3V0SXRlciBpdGVyX3R5cGU7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIGV4cGxpY2l0CiAgICAg
IF9OdW1lcmljX3B1dCgpIHsgfQoKICAgICAgdmlydHVhbAogICAgICB+X051bWVyaWNfcHV0KCkg
eyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVy
PgogICAgY2xhc3MgbnVtX3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAgICBwdWJs
aWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX091dEl0
ZXIgaXRlcl90eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNp
dAogICAgICBudW1fcHV0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZz
KSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2Um
IF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRv
X3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0
KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgX192
KSBjb25zdAogICAgICB7IHJldHVybiBkb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoK
ICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBj
aGFyX3R5cGUgX19maWxsLAogICAgICAgICAgdW5zaWduZWQgbG9uZyBfX3YpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgoKICAgICAgaXRlcl90
eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19m
aWxsLCBsb25nIGxvbmcgX192KSBjb25zdAogICAgICB7IHJldHVybiBkb19wdXQoX19zLCBfX2Ys
IF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19z
LCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgdW5zaWduZWQgbG9u
ZyBsb25nIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGws
IF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19i
YXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGRvdWJsZSBfX3YpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAg
ICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAg
ICAgICAgICBsb25nIGRvdWJsZSBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX3B1dChfX3Ms
IF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlw
ZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICBjb25zdCB2
b2lkKiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBf
X3YpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5udW1fcHV0KCkgeyB9
OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jh
c2UmLCBjaGFyX3R5cGUgX19maWxsLCBib29sIF9fdikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0
ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2Zp
bGwsIGxvbmcgX192KSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19w
dXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgbG9uZyBfX3Yp
IGNvbnN0OwoKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUs
IGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgdW5zaWduZWQgbG9uZykgY29uc3Q7CgoKICAg
ICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBj
aGFyX3R5cGUgX19maWxsLCB1bnNpZ25lZCBsb25nIGxvbmcpIGNvbnN0OwoKCiAgICAgIHZpcnR1
YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBl
IF9fZmlsbCwgZG91YmxlIF9fdikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAg
ICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgZG91
YmxlIF9fdikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRl
cl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGNvbnN0IHZvaWQqIF9fdikgY29u
c3Q7CiAgICB9OwoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRl
cj4KICAgIGxvY2FsZTo6aWQgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6aWQ7CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG51bXB1bmN0IDogcHVibGljIGxvY2FsZTo6
ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsK
ICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0
YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgIHByaXZhdGU6CiAgICAgIGNoYXJfdHlwZSBfTV9kZWNp
bWFsX3BvaW50OwogICAgICBjaGFyX3R5cGUgX01fdGhvdXNhbmRzX3NlcDsKICAgICAgc3RyaW5n
IF9NX2dyb3VwaW5nOwogICAgICBzdHJpbmdfdHlwZSBfTV90cnVlbmFtZTsKICAgICAgc3RyaW5n
X3R5cGUgX01fZmFsc2VuYW1lOwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgbnVt
cHVuY3Qoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsg
X01faW5pdGlhbGl6ZV9udW1wdW5jdCgpOyB9CgogICAgICBleHBsaWNpdAogICAgICBudW1wdW5j
dChfX2NfbG9jYWxlIF9fY2xvYywgc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChf
X3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2Nsb2MpOyB9CgogICAgICBj
aGFyX3R5cGUKICAgICAgZGVjaW1hbF9wb2ludCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2Rl
Y2ltYWxfcG9pbnQoKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHRob3VzYW5kc19zZXAoKSBj
b25zdAogICAgICB7IHJldHVybiBkb190aG91c2FuZHNfc2VwKCk7IH0KCiAgICAgIHN0cmluZwog
ICAgICBncm91cGluZygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dyb3VwaW5nKCk7IH0KCiAg
ICAgIHN0cmluZ190eXBlCiAgICAgIHRydWVuYW1lKCkgY29uc3QKICAgICAgeyByZXR1cm4gZG9f
dHJ1ZW5hbWUoKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgZmFsc2VuYW1lKCkgY29uc3QK
ICAgICAgeyByZXR1cm4gZG9fZmFsc2VuYW1lKCk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZp
cnR1YWwKICAgICAgfm51bXB1bmN0KCkgeyB9CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAg
ICBkb19kZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZGVjaW1hbF9wb2lu
dDsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdGhvdXNhbmRzX3NlcCgpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIF9NX3Rob3VzYW5kc19zZXA7IH0KCiAgICAgIHZpcnR1YWwgc3Ry
aW5nCiAgICAgIGRvX2dyb3VwaW5nKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZ3JvdXBpbmc7
IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fdHJ1ZW5hbWUoKSBjb25zdAog
ICAgICB7IHJldHVybiBfTV90cnVlbmFtZTsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQog
ICAgICBkb19mYWxzZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9mYWxzZW5hbWU7IH0K
CgogICAgICB2b2lkCiAgICAgIF9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Ns
b2MgPSAwKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6
aWQgbnVtcHVuY3Q8X0NoYXJUPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg
IHZvaWQKICAgIG51bXB1bmN0PF9DaGFyVD46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xv
Y2FsZSApCiAgICB7CgogICAgfQoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBudW1wdW5jdDxj
aGFyPjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYyk7CgoKCgoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG51bXB1bmN0X2J5bmFtZSA6IHB1
YmxpYyBudW1wdW5jdDxfQ2hhclQ+CiAgICB7CiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVf
bnVtcHVuY3Q7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAg
ICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIGV4cGxp
Y2l0CiAgICAgIG51bXB1bmN0X2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMg
PSAwKQogICAgICA6IG51bXB1bmN0PF9DaGFyVD4oX19yZWZzKQogICAgICB7CiAgICAgICAgX1Nf
Y3JlYXRlX2NfbG9jYWxlKF9NX2NfbG9jYWxlX251bXB1bmN0LCBfX3MpOwogICAgICAgIF9NX2lu
aXRpYWxpemVfbnVtcHVuY3QoX01fY19sb2NhbGVfbnVtcHVuY3QpOwogICAgICB9CgogICAgcHJv
dGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5udW1wdW5jdF9ieW5hbWUoKQogICAgICB7IF9T
X2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbnVtcHVuY3QpOyB9CiAgICB9OwoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY29sbGF0ZSA6IHB1YmxpYyBsb2NhbGU6
OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7
CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBz
dGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvbGxhdGUoc2l6ZV90
IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaW50CiAgICAg
IGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKICAgICAg
ICAgICAgICBjb25zdCBfQ2hhclQqIF9fbG8yLCBjb25zdCBfQ2hhclQqIF9faGkyKSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5kb19jb21wYXJlKF9fbG8xLCBfX2hpMSwgX19sbzIsIF9faGky
KTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgdHJhbnNmb3JtKGNvbnN0IF9DaGFyVCogX19s
bywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190cmFu
c2Zvcm0oX19sbywgX19oaSk7IH0KCiAgICAgIGxvbmcKICAgICAgaGFzaChjb25zdCBfQ2hhclQq
IF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f
aGFzaChfX2xvLCBfX2hpKTsgfQoKICBwcm90ZWN0ZWQ6CiAgICAgIH5jb2xsYXRlKCkgeyB9Cgog
ICAgICB2aXJ0dWFsIGludAogICAgICBkb19jb21wYXJlKGNvbnN0IF9DaGFyVCogX19sbzEsIGNv
bnN0IF9DaGFyVCogX19oaTEsCiAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2xvMiwg
Y29uc3QgX0NoYXJUKiBfX2hpMikgY29uc3Q7CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAg
ICAgIGRvX3RyYW5zZm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkg
Y29uc3Q7CgogICAgICB2aXJ0dWFsIGxvbmcKICAgICAgZG9faGFzaChjb25zdCBfQ2hhclQqIF9f
bG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIGNvbGxhdGU8X0NoYXJUPjo6aWQ7CgoKICB0ZW1wbGF0
ZTw+CiAgICBpbnQKICAgIGNvbGxhdGU8Y2hhcj46OmRvX2NvbXBhcmUoY29uc3QgY2hhciogX19s
bzEsIGNvbnN0IGNoYXIqIF9faGkxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiBfX2xvMiwgY29uc3QgY2hhciogX19oaTIpIGNvbnN0OwoKICB0ZW1wbGF0ZTw+CiAg
ICBzdHJpbmcKICAgIGNvbGxhdGU8Y2hhcj46OmRvX3RyYW5zZm9ybShjb25zdCBjaGFyKiBfX2xv
LCBjb25zdCBjaGFyKiBfX2hpKSBjb25zdDsKCiAgdGVtcGxhdGU8PgogICAgbG9uZwogICAgY29s
bGF0ZTxjaGFyPjo6ZG9faGFzaChjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpKSBj
b25zdDsKIyAxMDE0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0
cy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY29sbGF0ZV9ieW5h
bWUgOiBwdWJsaWMgY29sbGF0ZTxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBl
ZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4g
c3RyaW5nX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBjb2xsYXRlX2J5bmFtZShjb25zdCBj
aGFyKiwgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAog
ICAgICB+Y29sbGF0ZV9ieW5hbWUoKSB7IH0KICAgIH07CgogIHRlbXBsYXRlPD4KICAgIGNvbGxh
dGVfYnluYW1lPGNoYXI+Ojpjb2xsYXRlX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVm
cyk7CgoKCgoKICBjbGFzcyB0aW1lX2Jhc2UKICB7CiAgcHVibGljOgogICAgZW51bSBkYXRlb3Jk
ZXIgeyBub19vcmRlciwgZG15LCBtZHksIHltZCwgeWRtIH07CiAgfTsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xhc3MgdGltZV9nZXQgOiBwdWJs
aWMgbG9jYWxlOjpmYWNldCwgcHVibGljIHRpbWVfYmFzZQogICAgewogICAgcHVibGljOgoKICAg
ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90
eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICB0
aW1lX2dldChzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0IChfX3JlZnMp
LCBfTV9kYXluYW1lcygwKSwgX01fbW9udGhuYW1lcygwKSB7IH0KCiAgICAgIGRhdGVvcmRlcgog
ICAgICBkYXRlX29yZGVyKCkgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZGF0ZV9vcmRlcigpOyB9
CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X3RpbWUoaXRlcl90eXBlIF9fcywgaXRlcl90eXBl
IF9fZW5kLCBpb3NfYmFzZSYgX19mLAogICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg
X19lcnIsIHRtKiBfX3QpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldF90aW1lKF9fcywgX19l
bmQsIF9fZiwgX19lcnIsIF9fdCk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRfZGF0ZShp
dGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2YsCiAgICAgICAgICAg
ICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29uc3QKICAgICAgeyByZXR1
cm4gZG9fZ2V0X2RhdGUoX19zLCBfX2VuZCwgX19mLCBfX2VyciwgX190KTsgfQoKICAgICAgaXRl
cl90eXBlCiAgICAgIGdldF93ZWVrZGF5KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwg
aW9zX2Jhc2UmIF9fZiwKICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy
LCB0bSogX190KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXRfd2Vla2RheShfX3MsX19lbmQs
X19mLF9fZXJyLF9fdCk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRfbW9udGhuYW1lKGl0
ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9fZiwKICAgICAgICAgICAg
ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIGRvX2dldF9tb250aG5hbWUoX19zLF9fZW5kLF9fZixfX2VycixfX3QpOyB9CgogICAg
ICBpdGVyX3R5cGUKICAgICAgZ2V0X3llYXIoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5k
LCBpb3NfYmFzZSYgX19mLAogICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs
IHRtKiBfX3QpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldF95ZWFyKF9fcyxfX2VuZCxfX2Ys
X19lcnIsX190KTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+dGltZV9n
ZXQoKQogICAgICB7CiAgICAgICAgZGVsZXRlIFtdIF9NX21vbnRobmFtZXM7CiAgICAgICAgZGVs
ZXRlIFtdIF9NX2RheW5hbWVzOwogICAgICB9CgogICAgICB2aXJ0dWFsIGRhdGVvcmRlcgogICAg
ICBkb19kYXRlX29yZGVyKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGltZV9iYXNlOjp5bWQ7IH0K
CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldF90aW1lKGl0ZXJfdHlwZSBfX3Ms
IGl0ZXJfdHlwZSAsIGlvc19iYXNlJiwKICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
dGUmICwgdG0qICkgY29uc3QKICAgICAgeyByZXR1cm4gX19zOyB9CgogICAgICB2aXJ0dWFsIGl0
ZXJfdHlwZQogICAgICBkb19nZXRfZGF0ZShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgLCBpb3Nf
YmFzZSYsCiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiAsIHRtKiApIGNvbnN0
CiAgICAgIHsgcmV0dXJuIF9fczsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f
Z2V0X3dlZWtkYXkoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYsCiAg
ICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29u
c3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfbW9udGhuYW1lKGl0ZXJf
dHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmLAogICAgICAgICAgICAgICAgICAg
ICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29uc3Q7CgogICAgICB2aXJ0
dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfeWVhcihpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUg
LCBpb3NfYmFzZSYsCiAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgLCB0bSog
KSBjb25zdAogICAgICB7IHJldHVybiBfX3M7IH0KCiAgICAgIG11dGFibGUgYmFzaWNfc3RyaW5n
PF9DaGFyVD4qIF9NX2RheW5hbWVzOwogICAgICBtdXRhYmxlIGJhc2ljX3N0cmluZzxfQ2hhclQ+
KiBfTV9tb250aG5hbWVzOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfSW5JdGVyPgogICAgbG9jYWxlOjppZCB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+Ojpp
ZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xh
c3MgdGltZV9nZXRfYnluYW1lIDogcHVibGljIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj4KICAg
IHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBl
ZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9nZXRfYnlu
YW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiB0aW1lX2dldDxfQ2hh
clQsIF9Jbkl0ZXI+KF9fcmVmcykgeyB9CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAg
ICAgfnRpbWVfZ2V0X2J5bmFtZSgpIHsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGNsYXNzIHRpbWVfcHV0IDogcHVibGljIGxvY2Fs
ZTo6ZmFjZXQsIHB1YmxpYyB0aW1lX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRl
ZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0ZXJfdHlwZTsKCiAg
ICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9wdXQo
c2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldCAoX19yZWZzKSB7IH0KCgogICAgICBp
dGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiAsIGNoYXJfdHlwZSAs
CiAgICAgICAgICBjb25zdCB0bSogLCBjb25zdCBfQ2hhclQqICwKICAgICAgICAgIGNvbnN0IF9D
aGFyVCogKSBjb25zdAogICAgICB7IHJldHVybiBfX3M7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAg
ICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwKICAg
ICAgICAgIGNvbnN0IHRtKiBfX3RtYiwgY2hhciBfX2Zvcm1hdCwgY2hhciBfX21vZGlmaWVyID0g
MCkgY29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdG1iLCBf
X2Zvcm1hdCwgX19tb2RpZmllcik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAg
ICAgfnRpbWVfcHV0KCkgeyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQo
aXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmLCBjaGFyX3R5cGUsIGNvbnN0IHRtKiAsCiAgICAgICAg
ICAgICBjaGFyICwgY2hhciApIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fczsgfQogICAgfTsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGxvY2FsZTo6
aWQgdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgY2xhc3MgdGltZV9wdXRfYnluYW1lIDogcHVi
bGljIHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5
cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7
CgogICAgICBleHBsaWNpdAogICAgICB0aW1lX3B1dF9ieW5hbWUoY29uc3QgY2hhciosIHNpemVf
dCBfX3JlZnMgPSAwKQogICAgICA6IHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+IChfX3JlZnMp
IHsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+dGltZV9wdXRfYnluYW1l
KCkgeyB9CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5J
dGVyPgogICAgY2xhc3MgbW9uZXlfZ2V0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAg
IHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9J
bkl0ZXIgaXRlcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmlu
Z190eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAg
ICBtb25leV9nZXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsg
fQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19l
bmQsIGJvb2wgX19pbnRsLAogICAgICAgICAgaW9zX2Jhc2UmIF9fZiwgaW9zX2Jhc2U6Omlvc3Rh
dGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX191bml0cykgY29uc3QKICAgICAgeyByZXR1cm4gZG9f
Z2V0KF9fcywgX19lbmQsIF9faW50bCwgX19mLCBfX2VyciwgX191bml0cyk7IH0KCiAgICAgIGl0
ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9f
aW50bCwgaW9zX2Jhc2UmIF9fZiwKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs
IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9fcywg
X19lbmQsIF9faW50bCwgX19mLCBfX2VyciwgX19kaWdpdHMpOyB9CgogICAgcHJvdGVjdGVkOgog
ICAgICB2aXJ0dWFsCiAgICAgIH5tb25leV9nZXQoKSB7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90
eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgLCBib29sICwKICAgICAg
ICAgICAgIGlvc19iYXNlJiAsIGlvc19iYXNlOjppb3N0YXRlJiAsCiAgICAgICAgICAgICBsb25n
IGRvdWJsZSYgKSBjb25zdAogICAgICB7IHJldHVybiBfX3M7IH0KCiAgICAgIHZpcnR1YWwgaXRl
cl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgLCBib29sICwKICAg
ICAgICAgICAgIGlvc19iYXNlJiAsIGlvc19iYXNlOjppb3N0YXRlJiAsCiAgICAgICAgICAgICBz
dHJpbmdfdHlwZSYgKSBjb25zdAogICAgICB7IHJldHVybiBfX3M7IH0KICAgIH07CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGxvY2FsZTo6aWQgbW9u
ZXlfZ2V0PF9DaGFyVCwgX0luSXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9PdXRJdGVyPgogICAgY2xhc3MgbW9uZXlfcHV0IDogcHVibGljIGxvY2FsZTo6
ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwog
ICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0ZXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJp
bmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAg
ICAgZXhwbGljaXQKICAgICAgbW9uZXlfcHV0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6
ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9f
cywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2YsCiAgICAgICAgICBjaGFyX3R5cGUgX19maWxs
LCBsb25nIGRvdWJsZSBfX3VuaXRzKSBjb25zdAogICAgICB7IHJldHVybiBkb19wdXQoX19zLCBf
X2ludGwsIF9fZiwgX19maWxsLCBfX3VuaXRzKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1
dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9fZiwKICAgICAgICAgIGNo
YXJfdHlwZSBfX2ZpbGwsIGNvbnN0IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3QKICAgICAg
eyByZXR1cm4gZG9fcHV0KF9fcywgX19pbnRsLCBfX2YsIF9fZmlsbCwgX19kaWdpdHMpOyB9Cgog
ICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tb25leV9wdXQoKSB7IH0KCiAgICAg
IHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBib29sLCBpb3Nf
YmFzZSYgLCBjaGFyX3R5cGUgLAogICAgICAgICAgICAgbG9uZyBkb3VibGUgKSBjb25zdAogICAg
ICB7IHJldHVybiBfX3M7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChp
dGVyX3R5cGUgX19zLCBib29sLCBpb3NfYmFzZSYgLCBjaGFyX3R5cGUgLAogICAgICAgICAgICAg
Y29uc3Qgc3RyaW5nX3R5cGUmICkgY29uc3QKICAgICAgeyByZXR1cm4gX19zOyB9CiAgICB9OwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgbG9jYWxl
OjppZCBtb25leV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOwoKICBzdHJ1Y3QgbW9uZXlfYmFz
ZQogIHsKICAgIGVudW0gcGFydCB7IG5vbmUsIHNwYWNlLCBzeW1ib2wsIHNpZ24sIHZhbHVlIH07
CiAgICBzdHJ1Y3QgcGF0dGVybiB7IGNoYXIgZmllbGRbNF07IH07CgogICAgc3RhdGljIGNvbnN0
IHBhdHRlcm4gX1NfZGVmYXVsdF9wYXR0ZXJuOwoKCgogICAgc3RhdGljIHBhdHRlcm4KICAgIF9T
X2NvbnN0cnVjdF9wYXR0ZXJuKGNoYXIgX19wcmVjZWVkcywgY2hhciBfX3NwYWNlLCBjaGFyIF9f
cG9zbik7CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAg
Y2xhc3MgbW9uZXlwdW5jdCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgbW9uZXlfYmFz
ZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAg
ICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaW50bCA9IF9JbnRsOwogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAg
ICBwcml2YXRlOgogICAgICBjaGFyX3R5cGUgX01fZGVjaW1hbF9wb2ludDsKICAgICAgY2hhcl90
eXBlIF9NX3Rob3VzYW5kc19zZXA7CiAgICAgIHN0cmluZyBfTV9ncm91cGluZzsKICAgICAgc3Ry
aW5nX3R5cGUgX01fY3Vycl9zeW1ib2w7CiAgICAgIHN0cmluZ190eXBlIF9NX3Bvc2l0aXZlX3Np
Z247CiAgICAgIHN0cmluZ190eXBlIF9NX25lZ2F0aXZlX3NpZ247CiAgICAgIGludCBfTV9mcmFj
X2RpZ2l0czsKICAgICAgcGF0dGVybiBfTV9wb3NfZm9ybWF0OwogICAgICBwYXR0ZXJuIF9NX25l
Z19mb3JtYXQ7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICBtb25leXB1bmN0KHNp
emVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2luaXRp
YWxpemVfbW9uZXlwdW5jdCgpOyB9CgogICAgICBleHBsaWNpdAogICAgICBtb25leXB1bmN0KF9f
Y19sb2NhbGUgX19jbG9jLCBzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVm
cykKICAgICAgeyBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jbG9jKTsgfQoKICAgICAgY2hh
cl90eXBlCiAgICAgIGRlY2ltYWxfcG9pbnQoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5k
b19kZWNpbWFsX3BvaW50KCk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB0aG91c2FuZHNfc2Vw
KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdGhvdXNhbmRzX3NlcCgpOyB9CgogICAg
ICBzdHJpbmcKICAgICAgZ3JvdXBpbmcoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19n
cm91cGluZygpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICBjdXJyX3N5bWJvbCgpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2N1cnJfc3ltYm9sKCk7IH0KCiAgICAgIHN0cmluZ190
eXBlCiAgICAgIHBvc2l0aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19w
b3NpdGl2ZV9zaWduKCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIG5lZ2F0aXZlX3NpZ24o
KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19uZWdhdGl2ZV9zaWduKCk7IH0KCiAgICAg
IGludAogICAgICBmcmFjX2RpZ2l0cygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2Zy
YWNfZGlnaXRzKCk7IH0KCiAgICAgIHBhdHRlcm4KICAgICAgcG9zX2Zvcm1hdCgpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Bvc19mb3JtYXQoKTsgfQoKICAgICAgcGF0dGVybgogICAg
ICBuZWdfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmVnX2Zvcm1hdCgp
OyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tb25leXB1bmN0KCkgeyB9
CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb19kZWNpbWFsX3BvaW50KCkgY29uc3QK
ICAgICAgeyByZXR1cm4gX01fZGVjaW1hbF9wb2ludDsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5
cGUKICAgICAgZG9fdGhvdXNhbmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Rob3Vz
YW5kc19zZXA7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nCiAgICAgIGRvX2dyb3VwaW5nKCkgY29u
c3QKICAgICAgeyByZXR1cm4gX01fZ3JvdXBpbmc7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5
cGUKICAgICAgZG9fY3Vycl9zeW1ib2woKSBjb25zdAogICAgICB7IHJldHVybiBfTV9jdXJyX3N5
bWJvbDsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19wb3NpdGl2ZV9zaWdu
KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fcG9zaXRpdmVfc2lnbjsgfQoKICAgICAgdmlydHVh
bCBzdHJpbmdfdHlwZQogICAgICBkb19uZWdhdGl2ZV9zaWduKCkgY29uc3QKICAgICAgeyByZXR1
cm4gX01fbmVnYXRpdmVfc2lnbjsgfQoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZnJhY19k
aWdpdHMoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9mcmFjX2RpZ2l0czsgfQoKICAgICAgdmly
dHVhbCBwYXR0ZXJuCiAgICAgIGRvX3Bvc19mb3JtYXQoKSBjb25zdAogICAgICB7IHJldHVybiBf
TV9wb3NfZm9ybWF0OyB9CgogICAgICB2aXJ0dWFsIHBhdHRlcm4KICAgICAgZG9fbmVnX2Zvcm1h
dCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX25lZ19mb3JtYXQ7IH0KCgogICAgICB2b2lkCiAg
ICAgIF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYyA9IDApOwogICAg
fTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgbG9jYWxlOjpp
ZCBtb25leXB1bmN0PF9DaGFyVCwgX0ludGw+OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCBib29sIF9JbnRsPgogICAgY29uc3QgYm9vbCBtb25leXB1bmN0PF9DaGFyVCwgX0ludGw+
OjppbnRsOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICB2b2lk
CiAgICBtb25leXB1bmN0PF9DaGFyVCwgX0ludGw+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3Qo
X19jX2xvY2FsZSApCiAgICB7CgogICAgfQoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25l
eXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2Mp
OwoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGNsYXNz
IG1vbmV5cHVuY3RfYnluYW1lIDogcHVibGljIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD4KICAg
IHsKICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9tb25leXB1bmN0OwogICAgcHVibGljOgog
ICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5n
PF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpbnRsID0gX0lu
dGw7CgogICAgICBleHBsaWNpdAogICAgICBtb25leXB1bmN0X2J5bmFtZShjb25zdCBjaGFyKiBf
X3MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD4o
X19yZWZzKQogICAgICB7CiAgICAgICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2NfbG9jYWxlX21v
bmV5cHVuY3QsIF9fcyk7CiAgICAgICAgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9NX2NfbG9j
YWxlX21vbmV5cHVuY3QpOwogICAgICB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAg
ICAgIH5tb25leXB1bmN0X2J5bmFtZSgpCiAgICAgIHsgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9j
X2xvY2FsZV9tb25leXB1bmN0KTsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCBib29sIF9JbnRsPgogICAgY29uc3QgYm9vbCBtb25leXB1bmN0X2J5bmFtZTxfQ2hhclQsIF9J
bnRsPjo6aW50bDsKCgogIHN0cnVjdCBtZXNzYWdlc19iYXNlCiAgewogICAgdHlwZWRlZiBpbnQg
Y2F0YWxvZzsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBtZXNz
YWdlcyA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgbWVzc2FnZXNfYmFzZQogICAgewog
ICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYg
YmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjpp
ZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1lc3NhZ2VzKHNpemVfdCBfX3JlZnMgPSAwKSA6
IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGNhdGFsb2cKICAgICAgb3Blbihjb25z
dCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYykgY29uc3QKICAg
ICAgeyByZXR1cm4gZG9fb3BlbihfX3MsIF9fbG9jKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAg
ICAgZ2V0KGNhdGFsb2cgX19jLCBpbnQgX19zZXQsIGludCBfX21zZ2lkLCBjb25zdCBzdHJpbmdf
dHlwZSYgX19zKSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19jLF9fc2V0LF9fbXNnaWQs
X19zKTsgfQoKICAgICAgdm9pZAogICAgICBjbG9zZShjYXRhbG9nIF9fYykgY29uc3QKICAgICAg
eyByZXR1cm4gZG9fY2xvc2UoX19jKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAog
ICAgICB+bWVzc2FnZXMoKSB7IH0KCgoKICAgICAgdmlydHVhbCBjYXRhbG9nCiAgICAgIGRvX29w
ZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiwgY29uc3QgbG9jYWxlJikgY29uc3QKICAgICAg
eyByZXR1cm4gMDsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19nZXQoY2F0
YWxvZywgaW50LCBpbnQgLCBjb25zdCBzdHJpbmdfdHlwZSYgX19kZmF1bHQpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIF9fZGZhdWx0OyB9CgogICAgICB2aXJ0dWFsIHZvaWQKICAgICAgZG9fY2xvc2Uo
Y2F0YWxvZykgY29uc3QgeyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg
ICBsb2NhbGU6OmlkIG1lc3NhZ2VzPF9DaGFyVD46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQ+CiAgICBjbGFzcyBtZXNzYWdlc19ieW5hbWUgOiBwdWJsaWMgbWVzc2FnZXM8X0NoYXJU
PgogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAg
IHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBleHBsaWNp
dAogICAgICBtZXNzYWdlc19ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMgPSAwKTsK
CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1lc3NhZ2VzX2J5bmFtZSgpIHsg
fQogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgbWVzc2FnZXNfYnluYW1lPGNoYXI+OjptZXNzYWdl
c19ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMpOwojIDE1MzIgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNzcGFjZShfQ2hhclQgX19jLCBjb25zdCBs
b2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xv
YykuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzcHJpbnQoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxl
JiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlz
KGN0eXBlX2Jhc2U6OnByaW50LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K
ICAgIGlubGluZSBib29sCiAgICBpc2NudHJsKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19s
b2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlw
ZV9iYXNlOjpjbnRybCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBp
bmxpbmUgYm9vbAogICAgaXN1cHBlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQog
ICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFz
ZTo6dXBwZXIsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5l
IGJvb2wgaXNsb3dlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1
cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6bG93ZXIs
IF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAg
IGlzYWxwaGEoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVz
ZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmFscGhhLCBfX2Mp
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2Rp
Z2l0KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFj
ZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpkaWdpdCwgX19jKTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNwdW5jdChf
Q2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0
eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6cHVuY3QsIF9fYyk7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzeGRpZ2l0KF9DaGFy
VCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8
X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjp4ZGlnaXQsIF9fYyk7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzYWxudW0oX0NoYXJUIF9f
YywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hh
clQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmFsbnVtLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2dyYXBoKF9DaGFyVCBfX2MsIGNv
bnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+
KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpncmFwaCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0b3VwcGVyKF9DaGFyVCBfX2MsIGNvbnN0
IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9f
bG9jKS50b3VwcGVyKF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5s
aW5lIF9DaGFyVAogICAgdG9sb3dlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQog
ICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykudG9sb3dlcihfX2Mp
OyB9Cn0KIyAzNyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2lvcy5oIiAy
IDMKCm5hbWVzcGFjZSBzdGQKewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19pb3MgOiBwdWJsaWMgaW9zX2Jhc2UKICAgIHsKICAg
IHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJh
aXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBl
OwoKCiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7CiAgICAgIHR5cGVk
ZWYgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbWJ1Zl9pdGVy
OwogICAgICB0eXBlZGVmIG51bV9wdXQ8X0NoYXJULCBfX29zdHJlYW1idWZfaXRlcj4gX19udW1w
dXRfdHlwZTsKICAgICAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0
cz4gX19pc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX2dldDxfQ2hhclQsIF9faXN0
cmVhbWJ1Zl9pdGVyPiBfX251bWdldF90eXBlOwoKCiAgICBwcml2YXRlOgogICAgICBiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qIF9NX3RpZTsKICAgICAgY2hhcl90eXBlIF9NX2ZpbGw7
CiAgICAgIGlvc3RhdGUgX01fZXhjZXB0aW9uOwoKICAgIHByb3RlY3RlZDoKICAgICAgYmFzaWNf
c3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9NX3N0cmVhbWJ1ZjsKICAgICAgaW9zdGF0ZSBf
TV9zdHJlYW1idWZfc3RhdGU7CgoKICAgICAgY29uc3QgX19jdHlwZV90eXBlKiBfTV9pb3NfZmN0
eXBlOwoKICAgICAgY29uc3QgX19udW1wdXRfdHlwZSogX01fZm51bXB1dDsKCiAgICAgIGNvbnN0
IF9fbnVtZ2V0X3R5cGUqIF9NX2ZudW1nZXQ7CgogICAgcHVibGljOgogICAgICBpbmxpbmUgY29u
c3QgX19jdHlwZV90eXBlKgogICAgICBfTV9nZXRfZmN0eXBlX2lvcyh2b2lkKQogICAgICB7IHJl
dHVybiBfTV9pb3NfZmN0eXBlOyB9CgogICAgICBvcGVyYXRvciB2b2lkKigpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIHRoaXMtPmZhaWwoKSA/IDAgOiBjb25zdF9jYXN0PGJhc2ljX2lvcyo+KHRoaXMp
OyB9CgogICAgICBpbmxpbmUgYm9vbAogICAgICBvcGVyYXRvciEoKSBjb25zdAogICAgICB7IHJl
dHVybiB0aGlzLT5mYWlsKCk7IH0KCiAgICAgIGlubGluZSBpb3N0YXRlCiAgICAgIHJkc3RhdGUo
KSBjb25zdAogICAgICB7IHJldHVybiBfTV9zdHJlYW1idWZfc3RhdGU7IH0KCiAgICAgIGlubGlu
ZSB2b2lkCiAgICAgIGNsZWFyKGlvc3RhdGUgX19zdGF0ZSA9IGdvb2RiaXQpCiAgICAgIHsKICAg
ICAgICBpZiAodGhpcy0+cmRidWYoKSkKICAgICAgICAgIF9NX3N0cmVhbWJ1Zl9zdGF0ZSA9IF9f
c3RhdGU7CiAgICAgICAgZWxzZQogICAgICAgICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zdGF0
ZSB8IGJhZGJpdDsKICAgICAgICBpZiAoKHRoaXMtPnJkc3RhdGUoKSAmIHRoaXMtPmV4Y2VwdGlv
bnMoKSkpCiAgICAgICAgICBfX3Rocm93X2lvc19mYWlsdXJlKCJiYXNpY19pb3M6OmNsZWFyKGlv
c3RhdGUpIGNhdXNlZCBleGNlcHRpb24iKTsKICAgICAgfQoKICAgICAgaW5saW5lIHZvaWQKICAg
ICAgc2V0c3RhdGUoaW9zdGF0ZSBfX3N0YXRlKQogICAgICB7IHRoaXMtPmNsZWFyKHRoaXMtPnJk
c3RhdGUoKSB8IF9fc3RhdGUpOyB9CgogICAgICBpbmxpbmUgYm9vbAogICAgICBnb29kKCkgY29u
c3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmRzdGF0ZSgpID09IDA7IH0KCiAgICAgIGlubGluZSBi
b29sCiAgICAgIGVvZigpIGNvbnN0CiAgICAgIHsgcmV0dXJuICh0aGlzLT5yZHN0YXRlKCkgJiBl
b2ZiaXQpICE9IDA7IH0KCiAgICAgIGlubGluZSBib29sCiAgICAgIGZhaWwoKSBjb25zdAogICAg
ICB7IHJldHVybiAodGhpcy0+cmRzdGF0ZSgpICYgKGJhZGJpdCB8IGZhaWxiaXQpKSAhPSAwOyB9
CgogICAgICBpbmxpbmUgYm9vbAogICAgICBiYWQoKSBjb25zdAogICAgICB7IHJldHVybiAodGhp
cy0+cmRzdGF0ZSgpICYgYmFkYml0KSAhPSAwOyB9CgogICAgICBpbmxpbmUgaW9zdGF0ZQogICAg
ICBleGNlcHRpb25zKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZXhjZXB0aW9uOyB9CgogICAg
ICBpbmxpbmUgdm9pZAogICAgICBleGNlcHRpb25zKGlvc3RhdGUgX19leGNlcHQpCiAgICAgIHsK
ICAgICAgICBfTV9leGNlcHRpb24gPSBfX2V4Y2VwdDsKICAgICAgICB0aGlzLT5jbGVhcihfTV9z
dHJlYW1idWZfc3RhdGUpOwogICAgICB9CgoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfaW9z
KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKSA6IGlvc19iYXNlKCkKICAg
ICAgeyB0aGlzLT5pbml0KF9fc2IpOyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19pb3Mo
KSB7IH0KCgogICAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KgogICAg
ICB0aWUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90aWU7IH0KCiAgICAgIGlubGluZSBiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qCiAgICAgIHRpZShiYXNpY19vc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4qIF9fdGllc3RyKQogICAgICB7CiAgICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+KiBfX29sZCA9IF9NX3RpZTsKICAgICAgICBfTV90aWUgPSBfX3RpZXN0cjsK
ICAgICAgICByZXR1cm4gX19vbGQ7CiAgICAgIH0KCiAgICAgIGlubGluZSBiYXNpY19zdHJlYW1i
dWY8X0NoYXJULCBfVHJhaXRzPioKICAgICAgcmRidWYoKSBjb25zdAogICAgICB7IHJldHVybiBf
TV9zdHJlYW1idWY7IH0KCiAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+Kgog
ICAgICByZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYik7CgogICAg
ICBiYXNpY19pb3MmCiAgICAgIGNvcHlmbXQoY29uc3QgYmFzaWNfaW9zJiBfX3Jocyk7CgogICAg
ICBpbmxpbmUgY2hhcl90eXBlCiAgICAgIGZpbGwoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9m
aWxsOyB9CgogICAgICBpbmxpbmUgY2hhcl90eXBlCiAgICAgIGZpbGwoY2hhcl90eXBlIF9fY2gp
CiAgICAgIHsKICAgICAgICBjaGFyX3R5cGUgX19vbGQgPSBfTV9maWxsOwogICAgICAgIF9NX2Zp
bGwgPSBfX2NoOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQoKCiAgICAgIGxvY2FsZQog
ICAgICBpbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKTsKCiAgICAgIGNoYXIKICAgICAgbmFycm93
KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0OwoKICAgICAgY2hhcl90eXBlCiAg
ICAgIHdpZGVuKGNoYXIgX19jKSBjb25zdDsKCiAgICBwcm90ZWN0ZWQ6CgogICAgICBiYXNpY19p
b3MoKSA6IGlvc19iYXNlKCkKICAgICAgeyB9CgogICAgICB2b2lkCiAgICAgIGluaXQoYmFzaWNf
c3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpOwoKICAgICAgYm9vbAogICAgICBfTV9j
aGVja19mYWNldChjb25zdCBsb2NhbGU6OmZhY2V0KiBfX2YpCiAgICAgIHsKICAgICAgICBib29s
IF9fcmV0ID0gZmFsc2U7CiAgICAgICAgaWYgKF9fZikKICAgICAgICAgIF9fcmV0ID0gdHJ1ZTsK
ICAgICAgICBlbHNlCiAgICAgICAgICBfX3Rocm93X2JhZF9jYXN0KCk7CiAgICAgICAgcmV0dXJu
IF9fcmV0OwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX2NhY2hlX2ZhY2V0cyhjb25zdCBs
b2NhbGUmIF9fbG9jKTsKICAgIH07Cn0KCgoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvYmFzaWNfaW9zLnRjYyIgMSAzCiMgMzMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9iYXNpY19pb3MudGNjIiAzCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9U
cmFpdHM+KgogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OnJkYnVmKGJhc2ljX3N0cmVh
bWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKQogICAgewogICAgICBiYXNpY19zdHJlYW1idWY8
X0NoYXJULCBfVHJhaXRzPiogX19vbGQgPSBfTV9zdHJlYW1idWY7CiAgICAgIF9NX3N0cmVhbWJ1
ZiA9IF9fc2I7CiAgICAgIHRoaXMtPmNsZWFyKCk7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf
aW9zPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6Y29w
eWZtdChjb25zdCBiYXNpY19pb3MmIF9fcmhzKQogICAgewoKCgoKICAgICAgX1dvcmRzKiBfX3dv
cmRzID0gKF9fcmhzLl9NX3dvcmRfbGltaXQgPD0gX1NfbG9jYWxfd29yZHMpID8KICAgICAgICBf
TV93b3JkX2FycmF5IDogbmV3IF9Xb3Jkc1tfX3Jocy5fTV93b3JkX2xpbWl0XTsKIyA2MyAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2lvcy50Y2MiIDMKICAgICAgX0NhbGxi
YWNrX2xpc3QqIF9fY2IgPSBfX3Jocy5fTV9jYWxsYmFja3M7CiAgICAgIGlmIChfX2NiKQogICAg
ICAgIF9fY2ItPl9NX2FkZF9yZWZlcmVuY2UoKTsKICAgICAgX01fY2FsbF9jYWxsYmFja3MoZXJh
c2VfZXZlbnQpOwogICAgICBpZiAoX01fd29yZHMgIT0gX01fd29yZF9hcnJheSkKICAgICAgICBk
ZWxldGUgW10gX01fd29yZHM7CiAgICAgIF9NX2Rpc3Bvc2VfY2FsbGJhY2tzKCk7CgogICAgICBf
TV9jYWxsYmFja3MgPSBfX2NiOwogICAgICBmb3IgKGludCBfX2kgPSAwOyBfX2kgPCBfX3Jocy5f
TV93b3JkX2xpbWl0OyArK19faSkKICAgICAgICBfX3dvcmRzW19faV0gPSBfX3Jocy5fTV93b3Jk
c1tfX2ldOwogICAgICBpZiAoX01fd29yZHMgIT0gX01fd29yZF9hcnJheSkKICAgICAgICBkZWxl
dGUgW10gX01fd29yZHM7CiAgICAgIF9NX3dvcmRzID0gX193b3JkczsKICAgICAgX01fd29yZF9s
aW1pdCA9IF9fcmhzLl9NX3dvcmRfbGltaXQ7CgogICAgICB0aGlzLT5mbGFncyhfX3Jocy5mbGFn
cygpKTsKICAgICAgdGhpcy0+d2lkdGgoX19yaHMud2lkdGgoKSk7CiAgICAgIHRoaXMtPnByZWNp
c2lvbihfX3Jocy5wcmVjaXNpb24oKSk7CiAgICAgIHRoaXMtPnRpZShfX3Jocy50aWUoKSk7CiAg
ICAgIHRoaXMtPmZpbGwoX19yaHMuZmlsbCgpKTsKCiAgICAgIHRoaXMtPmV4Y2VwdGlvbnMoX19y
aHMuZXhjZXB0aW9ucygpKTsKCiAgICAgIF9NX2NhbGxfY2FsbGJhY2tzKGNvcHlmbXRfZXZlbnQp
OwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGNoYXIKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+
OjpuYXJyb3coY2hhcl90eXBlIF9fYywgY2hhciBfX2RmYXVsdCkgY29uc3QKICAgIHsgcmV0dXJu
IF9NX2lvc19mY3R5cGUtPm5hcnJvdyhfX2MsIF9fZGZhdWx0KTsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBfQ2hhclQKICAgIGJhc2ljX2lvczxf
Q2hhclQsIF9UcmFpdHM+Ojp3aWRlbihjaGFyIF9fYykgY29uc3QKICAgIHsgcmV0dXJuIF9NX2lv
c19mY3R5cGUtPndpZGVuKF9fYyk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGxvY2FsZQogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46
OmltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7CiAgICAgIGxvY2FsZSBfX29sZCh0aGlz
LT5nZXRsb2MoKSk7CiAgICAgIGlvc19iYXNlOjppbWJ1ZShfX2xvYyk7CiAgICAgIF9NX2NhY2hl
X2ZhY2V0cyhfX2xvYyk7CiAgICAgIGlmICh0aGlzLT5yZGJ1ZigpICE9IDApCiAgICAgICAgdGhp
cy0+cmRidWYoKS0+cHViaW1idWUoX19sb2MpOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAg
IGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+Ojppbml0KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQs
IF9UcmFpdHM+KiBfX3NiKQogICAgewoKICAgICAgaW9zX2Jhc2U6Ol9NX2luaXQoKTsKICAgICAg
X01fY2FjaGVfZmFjZXRzKF9NX2lvc19sb2NhbGUpOwogICAgICBfTV90aWUgPSAwOwogICAgICBf
TV9maWxsID0gdGhpcy0+d2lkZW4oJyAnKTsKICAgICAgX01fZXhjZXB0aW9uID0gZ29vZGJpdDsK
ICAgICAgX01fc3RyZWFtYnVmID0gX19zYjsKICAgICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19z
YiA/IGdvb2RiaXQgOiBiYWRiaXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+
OjpfTV9jYWNoZV9mYWNldHMoY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsKICAgICAgaWYgKGhh
c19mYWNldDxfX2N0eXBlX3R5cGU+KF9fbG9jKSkKICAgICAgICBfTV9pb3NfZmN0eXBlID0gJnVz
ZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9fbG9jKTsKCiAgICAgIGlmIChoYXNfZmFjZXQ8X19udW1w
dXRfdHlwZT4oX19sb2MpKQogICAgICAgIF9NX2ZudW1wdXQgPSAmdXNlX2ZhY2V0PF9fbnVtcHV0
X3R5cGU+KF9fbG9jKTsKICAgICAgaWYgKGhhc19mYWNldDxfX251bWdldF90eXBlPihfX2xvYykp
CiAgICAgICAgX01fZm51bWdldCA9ICZ1c2VfZmFjZXQ8X19udW1nZXRfdHlwZT4oX19sb2MpOwog
ICAgfQp9CiMgMjE0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfaW9zLmgi
IDIgMwojIDQ3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAyIDMK
IyA0MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pc3RyZWFtLmgiIDIgMwoj
IDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTU4Ni1wYy1saW51eC1nbnUvYml0cy9zdGRf
bGltaXRzLmgiIDEgMwojIDQ1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k1ODYtcGMtbGlu
dXgtZ251L2JpdHMvc3RkX2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12
My9pNTg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyA0NiAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9pNTg2LXBjLWxpbnV4LWdudS9iaXRzL3N0ZF9saW1pdHMuaCIgMiAz
CiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jZmxvYXQuaCIgMSAzCiMg
MzggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2Zsb2F0LmgiIDMKIyAxICIv
dXNyL2xvY2FsL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2Zsb2F0
LmgiIDEgMwojIDM5ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NmbG9hdC5o
IiAyIDMKIyA0NyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNTg2LXBjLWxpbnV4LWdudS9i
aXRzL3N0ZF9saW1pdHMuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkIHsKCiAgICBlbnVtIGZsb2F0X3Jv
dW5kX3N0eWxlIHsKICAgICAgICByb3VuZF9pbmRldGVybWluYXRlID0gLTEsCiAgICAgICAgcm91
bmRfdG93YXJkX3plcm8gPSAwLAogICAgICAgIHJvdW5kX3RvX25lYXJlc3QgPSAxLAogICAgICAg
IHJvdW5kX3Rvd2FyZF9pbmZpbml0eSA9IDIsCiAgICAgICAgcm91bmRfdG93YXJkX25lZ19pbmZp
bml0eSA9IDMKICAgIH07CgogICAgZW51bSBmbG9hdF9kZW5vcm1fc3R5bGUgewogICAgICAgIGRl
bm9ybV9pbmRldGVybWluYXRlID0gLTEsCiAgICAgICAgZGVub3JtX2Fic2VudCA9IDAsCiAgICAg
ICAgZGVub3JtX3ByZXNlbnQgPSAxCiAgICB9OwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4g
c3RydWN0IG51bWVyaWNfbGltaXRzIHsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVj
aWFsaXplZCA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgX1RwIG1pbigpIHRocm93KCkgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICAgIHN0YXRpYyBfVHAgbWF4KCkgdGhyb3co
KSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgZGlnaXRzID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMDsKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfZXhhY3QgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMDsKCiAg
ICAgICAgc3RhdGljIF9UcCBlcHNpbG9uKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxf
VHA+KDApOyB9CiAgICAgICAgc3RhdGljIF9UcCByb3VuZF9lcnJvcigpIHRocm93KCkgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9l
eHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7
CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVp
ZXRfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19O
YU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19k
ZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5v
cm1fbG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgX1RwIGluZmluaXR5KCkgdGhyb3coKSB7
IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgICAgc3RhdGljIF9UcCBxdWlldF9O
YU4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgICBzdGF0
aWMgX1RwIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4o
MCk7IH0KICAgICAgICBzdGF0aWMgX1RwIGRlbm9ybV9taW4oKSB0aHJvdygpIHsgcmV0dXJuIHN0
YXRpY19jYXN0PF9UcD4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5
ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IGZhbHNlOwog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRp
bnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9z
dHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHA+IF9UcCBfX2xpbWl0c19pbmZpbml0eSgpOwogICAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwPiBfVHAgX19saW1pdHNfcXVpZXRfTmFOKCk7CiAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHA+IF9UcCBfX2xpbWl0c19zaWduYWxpbmdfTmFOKCk7CiAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHA+IF9UcCBfX2xpbWl0c19kZW5vcm1fbWluKCk7CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3Qg
bnVtZXJpY19saW1pdHM8Ym9vbD4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNp
YWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGJvb2wgbWluKCkgdGhyb3coKQogICAgICAg
IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgc3RhdGljIGJvb2wgbWF4KCkgdGhyb3coKQogICAg
ICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA4
OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAyOwogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X2ludGVnZXIgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1
ZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgICBzdGF0aWMgYm9v
bCBlcHNpbG9uKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgICBzdGF0aWMg
Ym9vbCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CgogICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv
bmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7Cgog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBm
bG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBi
b29sIGluZmluaXR5KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+
KDApOyB9CiAgICAgICAgc3RhdGljIGJvb2wgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICAgIHsg
cmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KDApOyB9CiAgICAgICAgc3RhdGljIGJvb2wgc2lnbmFs
aW5nX05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxib29sPigwKTsg
fQogICAgICAgIHN0YXRpYyBib29sIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8Ym9vbD4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
aWVjNTU5ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1
ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
dGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5k
X3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBs
YXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPGNoYXI+IHsKICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICAgIHN0YXRpYyBjaGFyIG1pbigpIHRo
cm93KCkKICAgICAgICB7IHJldHVybiAoLTEyOCk7IH0KICAgICAgICBzdGF0aWMgY2hhciBtYXgo
KSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMTI3OyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgZGlnaXRzID0gNzsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMjsKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X2V4YWN0ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAg
ICBzdGF0aWMgY2hhciBlcHNpbG9uKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0KICAg
ICAgICBzdGF0aWMgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAw
OyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgICBz
dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25l
bnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNl
OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICAgIHN0
YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAg
ICAgIHN0YXRpYyBjaGFyIGluZmluaXR5KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PGNoYXI+KDApOyB9CiAgICAgICAgc3RhdGljIGNoYXIgcXVpZXRfTmFOKCkgdGhyb3co
KQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KDApOyB9CiAgICAgICAgc3RhdGlj
IGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2Fz
dDxjaGFyPigwKTsgfQogICAgICAgIHN0YXRpYyBjaGFyIGRlbm9ybV9taW4oKSB0aHJvdygpCiAg
ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcj4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
Ym91bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFs
c2U7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29u
c3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAg
IH07CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8c2lnbmVkIGNoYXI+IHsK
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICAg
IHN0YXRpYyBzaWduZWQgY2hhciBtaW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gKC0xMjgp
OyB9CiAgICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIG1heCgpIHRocm93KCkKICAgICAgICB7IHJl
dHVybiAxMjc7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA3OwogICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAyOwogICAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX3NpZ25lZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9
IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBl
cHNpbG9uKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgICBzdGF0aWMgc2ln
bmVkIGNoYXIgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQoKICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNv
bnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhf
ZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAw
OwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29u
c3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0
aWMgc2lnbmVkIGNoYXIgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8c2lnbmVkIGNoYXI+KDApOyB9CiAgICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHF1aWV0
X05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4o
MCk7IH0KICAgICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkK
ICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KICAgICAgICBz
dGF0aWMgc2lnbmVkIGNoYXIgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBz
dGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9
IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRf
cm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogICAg
dGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgY2hhcj4gewogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGlj
IHVuc2lnbmVkIGNoYXIgbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAg
ICBzdGF0aWMgdW5zaWduZWQgY2hhciBtYXgoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMjU1
OyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gODsKICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IGRpZ2l0czEwID0gMjsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWdu
ZWQgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsK
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgZXBzaWxv
bigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVk
IGNoYXIgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0
IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhw
b25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoK
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3Qg
ZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMg
dW5zaWduZWQgY2hhciBpbmZpbml0eSgpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyPigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHF1
aWV0X05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyPigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHNpZ25hbGluZ19OYU4oKSB0
aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0K
ICAgICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICAg
IHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDApOyB9CgogICAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9
IHRydWU7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgICBzdGF0aWMg
Y29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsK
ICAgIH07CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8c2hvcnQ+IHsKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICAgIHN0
YXRpYyBzaG9ydCBtaW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gKC0zMjc2Ny0xKTsgfQog
ICAgICAgIHN0YXRpYyBzaG9ydCBtYXgoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMzI3Njc7
IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAxNTsKICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IGRpZ2l0czEwID0gNDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWdu
ZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgICBzdGF0aWMgc2hvcnQgZXBzaWxvbigpIHRocm93
KCkKICAgICAgICB7IHJldHVybiAwOyB9CiAgICAgICAgc3RhdGljIHNob3J0IHJvdW5kX2Vycm9y
KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBtaW5fZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50
MTAgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWdu
YWxpbmdfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHls
ZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIHNob3J0IGluZmluaXR5KCkg
dGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNob3J0PigwKTsgfQogICAgICAg
IHN0YXRpYyBzaG9ydCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8c2hvcnQ+KDApOyB9CiAgICAgICAgc3RhdGljIHNob3J0IHNpZ25hbGluZ19OYU4oKSB0
aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2hvcnQ+KDApOyB9CiAgICAgICAg
c3RhdGljIHNob3J0IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8c2hvcnQ+KDApOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9
IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5l
c3NfYmVmb3JlID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxl
IHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRlPD4g
c3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNob3J0PiB7CiAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgICBzdGF0aWMgdW5zaWduZWQg
c2hvcnQgbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgICBzdGF0aWMg
dW5zaWduZWQgc2hvcnQgbWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDY1NTM1OyB9Cgog
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMTY7CiAgICAgICAgc3RhdGljIGNvbnN0
IGludCBkaWdpdHMxMCA9IDQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0g
ZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBlcHNpbG9uKCkg
dGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgc2hv
cnQgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgICBz
dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25l
bnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxv
YXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgdW5z
aWduZWQgc2hvcnQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHF1
aWV0X05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBz
aG9ydD4oMCk7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgc2lnbmFsaW5nX05hTigp
IHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7
IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZGVub3JtX21pbigpIHRocm93KCkKICAg
ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KCiAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9k
dWxvID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICAgIHN0
YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96
ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czxpbnQ+IHsK
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICAg
IHN0YXRpYyBpbnQgbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuICgtMjE0NzQ4MzY0Ny0x
KTsgfQogICAgICAgIHN0YXRpYyBpbnQgbWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDIx
NDc0ODM2NDc7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMTsKICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19zaWduZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIg
PSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgICBzdGF0aWMgaW50IGVwc2lsb24o
KSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgIHN0YXRpYyBpbnQgcm91bmRf
ZXJyb3IoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgICBzdGF0aWMgY29u
c3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhw
b25lbnQxMCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwog
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3Jt
X3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgaW50IGluZmluaXR5
KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0KICAgICAg
ICBzdGF0aWMgaW50IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNf
Y2FzdDxpbnQ+KDApOyB9CiAgICAgICAgc3RhdGljIGludCBzaWduYWxpbmdfTmFOKCkgdGhyb3co
KQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0KICAgICAgICBzdGF0aWMg
aW50IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50
PigwKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0
cmFwcyA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0g
ZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxl
ID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVy
aWNfbGltaXRzPHVuc2lnbmVkIGludD4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3Nw
ZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBtaW4oKSB0aHJv
dygpCiAgICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWF4
KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuICgyMTQ3NDgzNjQ3ICogMlUgKyAxKTsgfQoKICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMyOwogICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgZGlnaXRzMTAgPSA5OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZh
bHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IHJhZGl4ID0gMjsKICAgICAgICBzdGF0aWMgdW5zaWduZWQgaW50IGVwc2lsb24oKSB0aHJv
dygpCiAgICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgcm91
bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5f
ZXhwb25lbnQxMCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAw
OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVu
b3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgdW5zaWduZWQg
aW50IGluZmluaXR5KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2ln
bmVkIGludD4oMCk7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHF1aWV0X05hTigpIHRo
cm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CiAg
ICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAg
IHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0KICAgICAgICBzdGF0aWMg
dW5zaWduZWQgaW50IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19p
ZWM1NTkgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVl
OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0
aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRf
c3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogICAgdGVtcGxh
dGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8bG9uZz4gewogICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGxvbmcgbWluKCkgdGhy
b3coKQogICAgICAgIHsgcmV0dXJuICgtMjE0NzQ4MzY0N0wtMSk7IH0KICAgICAgICBzdGF0aWMg
bG9uZyBtYXgoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMjE0NzQ4MzY0N0w7IH0KCiAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50
IGRpZ2l0czEwID0gOTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVl
OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50
IHJhZGl4ID0gMjsKICAgICAgICBzdGF0aWMgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICAg
IHsgcmV0dXJuIDA7IH0KICAgICAgICBzdGF0aWMgbG9uZyByb3VuZF9lcnJvcigpIHRocm93KCkK
ICAgICAgICB7IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u
ZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNv
bnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19pbmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9O
YU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9
IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9y
bSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9s
b3NzID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBsb25nIGluZmluaXR5KCkgdGhyb3coKQogICAg
ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDApOyB9CiAgICAgICAgc3RhdGljIGxvbmcg
cXVpZXRfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDAp
OyB9CiAgICAgICAgc3RhdGljIGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgICB7
IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQogICAgICAgIHN0YXRpYyBsb25nIGRlbm9y
bV9taW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0K
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0
cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwog
ICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5k
X3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0
czx1bnNpZ25lZCBsb25nPiB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6
ZWQgPSB0cnVlOwoKICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBtaW4oKSB0aHJvdygpCiAg
ICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1heCgpIHRo
cm93KCkKICAgICAgICB7IHJldHVybiAoMjE0NzQ4MzY0N0wgKiAyVUwgKyAxKTsgfQoKICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMyOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
ZGlnaXRzMTAgPSA5OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNl
OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50
IHJhZGl4ID0gMjsKICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBlcHNpbG9uKCkgdGhyb3co
KQogICAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyByb3Vu
ZF9lcnJvcigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9l
eHBvbmVudDEwID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7
CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5v
cm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBs
b25nIGluZmluaXR5KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2ln
bmVkIGxvbmc+KDApOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgcXVpZXRfTmFOKCkg
dGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9
CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAg
ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQogICAgICAgIHN0
YXRpYyB1bnNpZ25lZCBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVk
ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0
X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAg
IHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPGxvbmcgbG9uZz4gewogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGxv
bmcgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gKC05MjIzMzcyMDM2ODU0Nzc1
ODA3TEwtMSk7IH0KICAgICAgICBzdGF0aWMgbG9uZyBsb25nIG1heCgpIHRocm93KCkKICAgICAg
ICB7IHJldHVybiA5MjIzMzcyMDM2ODU0Nzc1ODA3TEw7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0
IGludCBkaWdpdHMgPSA2MzsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMTg7
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19leGFjdCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAg
ICAgICAgc3RhdGljIGxvbmcgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJu
IDA7IH0KICAgICAgICBzdGF0aWMgbG9uZyBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAg
ICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQg
PSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2lu
ZmluaXR5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9
IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFs
c2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0g
ZGVub3JtX2Fic2VudDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3Mg
PSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGxvbmcgbG9uZyBpbmZpbml0eSgpIHRocm93KCkKICAg
ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9CiAgICAgICAgc3RhdGlj
IGxvbmcgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8bG9uZyBsb25nPigwKTsgfQogICAgICAgIHN0YXRpYyBsb25nIGxvbmcgc2lnbmFsaW5nX05h
TigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9
CiAgICAgICAgc3RhdGljIGxvbmcgbG9uZyBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICAgIHsg
cmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3Vu
ZGVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsK
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBm
bG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsK
CiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBsb25nIGxvbmc+
IHsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAg
ICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0
dXJuIDA7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIG1heCgpIHRocm93KCkK
ICAgICAgICB7IHJldHVybiAoOTIyMzM3MjAzNjg1NDc3NTgwN0xMICogMlVMTCArIDEpOyB9Cgog
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNjQ7CiAgICAgICAgc3RhdGljIGNvbnN0
IGludCBkaWdpdHMxMCA9IDE5OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9
IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29u
c3QgaW50IHJhZGl4ID0gMjsKICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGVwc2ls
b24oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBsb25nIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQoK
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBt
YXhfZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAg
PSAwOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMg
Y29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgICBz
dGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGluZmluaXR5KCkgdGhyb3coKQogICAgICAgIHsgcmV0
dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0KICAgICAgICBzdGF0aWMg
dW5zaWduZWQgbG9uZyBsb25nIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9CiAgICAgICAgc3RhdGljIHVuc2ln
bmVkIGxvbmcgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0
YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0KICAgICAgICBzdGF0aWMgdW5zaWdu
ZWQgbG9uZyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigwKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19pZWM1NTkgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQg
PSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRf
cm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogICAg
dGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8ZmxvYXQ+IHsKICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICAgIHN0YXRpYyBmbG9hdCBt
aW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMS4xNzU0OTQzNWUtMzhGOyB9CiAgICAgICAg
c3RhdGljIGZsb2F0IG1heCgpIHRocm93KCkKICAgICAgICB7IHJldHVybiAzLjQwMjgyMzQ3ZSsz
OEY7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAyNDsKICAgICAgICBzdGF0
aWMgY29uc3QgaW50IGRpZ2l0czEwID0gNzsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19z
aWduZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxz
ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0YXRpYyBmbG9hdCBlcHNpbG9uKCkg
dGhyb3coKQogICAgICAgIHsgcmV0dXJuIDEuMTkyMDkyOTBlLTA3RjsgfQogICAgICAgIHN0YXRp
YyBmbG9hdCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAxLjBmOyB9Cgog
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gLTEyNTsKICAgICAgICBzdGF0
aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gLTM3OwogICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWF4X2V4cG9uZW50ID0gMTI4OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u
ZW50MTAgPSAzODsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFs
c2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgICAg
c3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2Vu
dDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAg
ICAgICAgc3RhdGljIGZsb2F0IGluZmluaXR5KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0
YXRpY19jYXN0PGZsb2F0PigwKTsgfQogICAgICAgIHN0YXRpYyBmbG9hdCBxdWlldF9OYU4oKSB0
aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KDApOyB9CiAgICAgICAg
c3RhdGljIGZsb2F0IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KDApOyB9CiAgICAgICAgc3RhdGljIGZsb2F0IGRlbm9ybV9taW4oKSB0
aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KDApOyB9CgogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21v
ZHVsbyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICAg
IHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2Fy
ZF96ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czxkb3Vi
bGU+IHsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7Cgog
ICAgICAgIHN0YXRpYyBkb3VibGUgbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDIuMjI1
MDczODU4NTA3MjAxNGUtMzA4OyB9CiAgICAgICAgc3RhdGljIGRvdWJsZSBtYXgoKSB0aHJvdygp
CiAgICAgICAgeyByZXR1cm4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDg7IH0KCiAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBkaWdpdHMgPSA1MzsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0
czEwID0gMTU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJh
ZGl4ID0gMjsKICAgICAgICBzdGF0aWMgZG91YmxlIGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAg
eyByZXR1cm4gMi4yMjA0NDYwNDkyNTAzMTMxZS0xNjsgfQogICAgICAgIHN0YXRpYyBkb3VibGUg
cm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMS4wOyB9CgogICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gLTEwMjE7CiAgICAgICAgc3RhdGljIGNvbnN0
IGludCBtaW5fZXhwb25lbnQxMCA9IC0zMDc7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhf
ZXhwb25lbnQgPSAxMDI0OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAg
PSAzMDg7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRp
YyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICAg
IHN0YXRpYyBkb3VibGUgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8ZG91YmxlPigwKTsgfQogICAgICAgIHN0YXRpYyBkb3VibGUgcXVpZXRfTmFOKCkgdGhy
b3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4oMCk7IH0KICAgICAgICBz
dGF0aWMgZG91YmxlIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8ZG91YmxlPigwKTsgfQogICAgICAgIHN0YXRpYyBkb3VibGUgZGVub3JtX21pbigp
IHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KDApOyB9CgogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X21vZHVsbyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNl
OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAg
ICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rv
d2FyZF96ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czxs
b25nIGRvdWJsZT4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0g
dHJ1ZTsKCiAgICAgICAgc3RhdGljIGxvbmcgZG91YmxlIG1pbigpIHRocm93KCkKICAgICAgICB7
IHJldHVybiAzLjM2MjEwMzE0MzExMjA5MzUwNjI2ZS00OTMyTDsgfQogICAgICAgIHN0YXRpYyBs
b25nIGRvdWJsZSBtYXgoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMS4xODk3MzE0OTUzNTcy
MzE3NjUwMmUrNDkzMkw7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA2NDsK
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMTk7CiAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19p
bnRlZ2VyID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxz
ZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgICBzdGF0aWMgbG9u
ZyBkb3VibGUgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAxLjA4NDIwMjE3MjQ4
NTUwNDQzNDAxZS0xOUw7IH0KICAgICAgICBzdGF0aWMgbG9uZyBkb3VibGUgcm91bmRfZXJyb3Io
KSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMS4wTDsgfQoKICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IG1pbl9leHBvbmVudCA9IC0xNjM4MTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9l
eHBvbmVudDEwID0gLTQ5MzE7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQg
PSAxNjM4NDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gNDkzMjsK
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0
IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgICAgc3RhdGlj
IGxvbmcgZG91YmxlIGluZmluaXR5KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19j
YXN0PGxvbmcgZG91YmxlPigwKTsgfQogICAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBxdWlldF9O
YU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBkb3VibGU+KDAp
OyB9CiAgICAgICAgc3RhdGljIGxvbmcgZG91YmxlIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAg
ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBkb3VibGU+KDApOyB9CiAgICAgICAgc3Rh
dGljIGxvbmcgZG91YmxlIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8bG9uZyBkb3VibGU+KDApOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X2llYzU1OSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0
cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9y
b3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCn0KIyA0
MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pc3RyZWFtLmgiIDIgMwoKbmFt
ZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGNsYXNzIGJhc2ljX2lzdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBiYXNpY19pb3M8X0No
YXJULCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hh
cl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBl
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190eXBlOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwogICAgICB0eXBl
ZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8
X0NoYXJULCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lv
czxfQ2hhclQsIF9UcmFpdHM+IF9faW9zX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIGlzdHJlYW1i
dWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1idWZfaXRlcjsKICAgICAgdHlw
ZWRlZiBudW1fZ2V0PF9DaGFyVCwgX19pc3RyZWFtYnVmX2l0ZXI+IF9fbnVtZ2V0X3R5cGU7CiAg
ICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7CgogICAgcHJvdGVjdGVkOgoK
ICAgICAgc3RyZWFtc2l6ZSBfTV9nY291bnQ7CgogICAgcHVibGljOgoKICAgICAgZXhwbGljaXQK
ICAgICAgYmFzaWNfaXN0cmVhbShfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKQogICAgICB7CiAgICAg
ICAgdGhpcy0+aW5pdChfX3NiKTsKICAgICAgICBfTV9nY291bnQgPSBzdHJlYW1zaXplKDApOwog
ICAgICB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19pc3RyZWFtKCkKICAgICAgeyBfTV9n
Y291bnQgPSBzdHJlYW1zaXplKDApOyB9CgoKICAgICAgY2xhc3Mgc2VudHJ5OwogICAgICBmcmll
bmQgY2xhc3Mgc2VudHJ5OwoKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+
PihfX2lzdHJlYW1fdHlwZSYgKCpfX3BmKShfX2lzdHJlYW1fdHlwZSYpKTsKCiAgICAgIF9faXN0
cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KF9faW9zX3R5cGUmICgqX19wZikoX19pb3NfdHlw
ZSYpKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGlvc19iYXNlJiAo
Kl9fcGYpKGlvc19iYXNlJikpOwoKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRv
cj4+KGJvb2wmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihz
aG9ydCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVuc2ln
bmVkIHNob3J0JiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4o
aW50JiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odW5zaWdu
ZWQgaW50JiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4obG9u
ZyYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVk
IGxvbmcmIF9fbik7CgoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4obG9u
ZyBsb25nJiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odW5z
aWduZWQgbG9uZyBsb25nJiBfX24pOwoKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVy
YXRvcj4+KGZsb2F0JiBfX2YpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9y
Pj4oZG91YmxlJiBfX2YpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4o
bG9uZyBkb3VibGUmIF9fZik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+
Pih2b2lkKiYgX19wKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KF9f
c3RyZWFtYnVmX3R5cGUqIF9fc2IpOwoKCiAgICAgIGlubGluZSBzdHJlYW1zaXplCiAgICAgIGdj
b3VudCh2b2lkKSBjb25zdAogICAgICB7IHJldHVybiBfTV9nY291bnQ7IH0KCiAgICAgIGludF90
eXBlCiAgICAgIGdldCh2b2lkKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQoY2hh
cl90eXBlJiBfX2MpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChjaGFyX3R5cGUq
IF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKTsKCiAgICAgIGlubGluZSBf
X2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikK
ICAgICAgeyByZXR1cm4gZ2V0KF9fcywgX19uLCB0aGlzLT53aWRlbignXG4nKSk7IH0KCiAgICAg
IF9faXN0cmVhbV90eXBlJgogICAgICBnZXQoX19zdHJlYW1idWZfdHlwZSYgX19zYiwgY2hhcl90
eXBlIF9fZGVsaW0pOwoKICAgICAgaW5saW5lIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQoX19z
dHJlYW1idWZfdHlwZSYgX19zYikKICAgICAgeyByZXR1cm4gZ2V0KF9fc2IsIHRoaXMtPndpZGVu
KCdcbicpKTsgfQoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldGxpbmUoY2hhcl90eXBl
KiBfX3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSk7CgogICAgICBpbmxpbmUg
X19pc3RyZWFtX3R5cGUmCiAgICAgIGdldGxpbmUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUg
X19uKQogICAgICB7IHJldHVybiBnZXRsaW5lKF9fcywgX19uLCB0aGlzLT53aWRlbignXG4nKSk7
IH0KCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBpZ25vcmUoc3RyZWFtc2l6ZSBfX24gPSAx
LCBpbnRfdHlwZSBfX2RlbGltID0gdHJhaXRzX3R5cGU6OmVvZigpKTsKCiAgICAgIGludF90eXBl
CiAgICAgIHBlZWsodm9pZCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgcmVhZChjaGFy
X3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwoKICAgICAgc3RyZWFtc2l6ZQogICAgICByZWFk
c29tZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5
cGUmCiAgICAgIHB1dGJhY2soY2hhcl90eXBlIF9fYyk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYK
ICAgICAgdW5nZXQodm9pZCk7CgogICAgICBpbnQKICAgICAgc3luYyh2b2lkKTsKCiAgICAgIHBv
c190eXBlCiAgICAgIHRlbGxnKHZvaWQpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHNl
ZWtnKHBvc190eXBlKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBzZWVrZyhvZmZfdHlw
ZSwgaW9zX2Jhc2U6OnNlZWtkaXIpOwoKICAgIHByaXZhdGU6CgoKICAgICAgX19pc3RyZWFtX3R5
cGUmCiAgICAgIG9wZXJhdG9yPShjb25zdCBfX2lzdHJlYW1fdHlwZSYpOwoKICAgICAgYmFzaWNf
aXN0cmVhbShjb25zdCBfX2lzdHJlYW1fdHlwZSYpOwoKICAgIH07CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPjo6c2VudHJ5CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX1Ry
YWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBf
VHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiBfX2lzdHJlYW1fdHlw
ZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJh
aXRzOjppbnRfdHlwZSBfX2ludF90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgc2VudHJ5KGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywgYm9vbCBfX25vc2tpcHdzID0gZmFs
c2UpOwoKICAgICAgb3BlcmF0b3IgYm9vbCgpIHsgcmV0dXJuIF9NX29rOyB9CgogICAgcHJpdmF0
ZToKICAgICAgYm9vbCBfTV9vazsKICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg
ICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJU
JiBfX2MpOwoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxjaGFy
LCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYg
X19pbiwgdW5zaWduZWQgY2hhciYgX19jKQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyJj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJh
c2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08
Y2hhciwgX1RyYWl0cz4mIF9faW4sIHNpZ25lZCBjaGFyJiBfX2MpCiAgICB7IHJldHVybiAoX19p
biA+PiByZWludGVycHJldF9jYXN0PGNoYXImPihfX2MpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19p
biwgX0NoYXJUKiBfX3MpOwoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0
cmVhbTxjaGFyLF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsX1Ry
YWl0cz4mIF9faW4sIHVuc2lnbmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJuIChfX2luID4+IHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fcykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+
CiAgICBiYXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lz
dHJlYW08Y2hhcixfVHJhaXRzPiYgX19pbiwgc2lnbmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJu
IChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fcykpOyB9CgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19pb3N0cmVh
bQogICAgOiBwdWJsaWMgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+LAogICAgICBwdWJs
aWMgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgogICAg
ICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsK
ICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5
cGU7CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19pb3N0cmVhbShiYXNpY19zdHJlYW1idWY8
X0NoYXJULCBfVHJhaXRzPiogX19zYikKICAgICAgOiBfX2lzdHJlYW1fdHlwZShfX3NiKSwgX19v
c3RyZWFtX3R5cGUoX19zYikKICAgICAgeyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19p
b3N0cmVhbSgpIHsgfQogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIHdzKGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcyk7Cn0KCgoKCiMgMSAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL2lzdHJlYW0udGNjIiAxIDMKIyAzMiAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL2lzdHJlYW0udGNjIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9sb2NhbGUuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfbG9jYWxlLmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12
My9iaXRzL2xvY2FsZWZ3ZC5oIiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9sb2NhbGUuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz
L2xvY2FsZV9mYWNldHMuaCIgMSAzCiMgNDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfbG9jYWxlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9s
b2NhbGVfZmFjZXRzLnRjYyIgMSAzCiMgMzUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfY2Vycm5vLmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX2NlcnJuby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDEgMwojIDI5ICIvdXNy
L2luY2x1ZGUvZXJybm8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAz
MCAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDIgMwoKCmV4dGVybiAiQyIgewoKCgojIDEgIi91c3Iv
aW5jbHVkZS9iaXRzL2Vycm5vLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5o
IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbnV4L2Vycm5vLmgiIDEgMwoKCgojIDEgIi91c3IvaW5j
bHVkZS9hc20vZXJybm8uaCIgMSAzCiMgNSAiL3Vzci9pbmNsdWRlL2xpbnV4L2Vycm5vLmgiIDIg
MwojIDI2ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAyIDMKIyAzNiAiL3Vzci9pbmNsdWRl
L2JpdHMvZXJybm8uaCIgMwpleHRlcm4gaW50IGVycm5vOwoKCmV4dGVybiBpbnQgKl9fZXJybm9f
bG9jYXRpb24gKHZvaWQpIDsKIyAzNyAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDIgMwojIDU1ICIv
dXNyL2luY2x1ZGUvZXJybm8uaCIgMwpleHRlcm4gY2hhciAqcHJvZ3JhbV9pbnZvY2F0aW9uX25h
bWUsICpwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZTsKCgoKfQojIDY5ICIvdXNyL2luY2x1
ZGUvZXJybm8uaCIgMwp0eXBlZGVmIGludCBlcnJvcl90OwojIDM5ICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RkX2NlcnJuby5oIiAyIDMKIyAzNiAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RkX2Nsb2NhbGUuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfY2xvY2FsZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5o
IiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Zl
YXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDIgMwoKCiMgMSAiL3Vz
ci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYu
aCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMiAzCgpleHRlcm4gIkMiIHsKIyA0
NSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzCnN0cnVjdCBsY29udgp7CgoKICBjaGFyICpkZWNp
bWFsX3BvaW50OwogIGNoYXIgKnRob3VzYW5kc19zZXA7CgoKCgoKICBjaGFyICpncm91cGluZzsK
CgoKCgogIGNoYXIgKmludF9jdXJyX3N5bWJvbDsKICBjaGFyICpjdXJyZW5jeV9zeW1ib2w7CiAg
Y2hhciAqbW9uX2RlY2ltYWxfcG9pbnQ7CiAgY2hhciAqbW9uX3Rob3VzYW5kc19zZXA7CiAgY2hh
ciAqbW9uX2dyb3VwaW5nOwogIGNoYXIgKnBvc2l0aXZlX3NpZ247CiAgY2hhciAqbmVnYXRpdmVf
c2lnbjsKICBjaGFyIGludF9mcmFjX2RpZ2l0czsKICBjaGFyIGZyYWNfZGlnaXRzOwoKICBjaGFy
IHBfY3NfcHJlY2VkZXM7CgogIGNoYXIgcF9zZXBfYnlfc3BhY2U7CgogIGNoYXIgbl9jc19wcmVj
ZWRlczsKCiAgY2hhciBuX3NlcF9ieV9zcGFjZTsKCgoKCgoKICBjaGFyIHBfc2lnbl9wb3NuOwog
IGNoYXIgbl9zaWduX3Bvc247Cn07CgoKCmV4dGVybiBjaGFyICpzZXRsb2NhbGUgKGludCBfX2Nh
dGVnb3J5LCBjb25zdCBjaGFyICpfX2xvY2FsZSk7CgoKZXh0ZXJuIHN0cnVjdCBsY29udiAqbG9j
YWxlY29udiAodm9pZCk7CiMgMTA5ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMKIyAxICIvdXNy
L2luY2x1ZGUveGxvY2FsZS5oIiAxIDMKIyAxMTAgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMiAz
CgoKCgoKCgpleHRlcm4gX19sb2NhbGVfdCBfX25ld2xvY2FsZSAoaW50IF9fY2F0ZWdvcnlfbWFz
aywgY29uc3QgY2hhciAqX19sb2NhbGUsIF9fbG9jYWxlX3QgX19iYXNlKTsKCgoKCgpleHRlcm4g
X19sb2NhbGVfdCBfX2R1cGxvY2FsZSAoX19sb2NhbGVfdCBfX2RhdGFzZXQpOwoKCgpleHRlcm4g
dm9pZCBfX2ZyZWVsb2NhbGUgKF9fbG9jYWxlX3QgX19kYXRhc2V0KTsKCgp9CiMgMzkgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2xvY2FsZS5oIiAyIDMKCgoKCgpuYW1lc3Bh
Y2Ugc3RkCnsKICB1c2luZyA6Omxjb252OwogIHVzaW5nIDo6c2V0bG9jYWxlOwogIHVzaW5nIDo6
bG9jYWxlY29udjsKfQojIDM3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxl
X2ZhY2V0cy50Y2MiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
Y3N0ZGxpYi5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2Fs
ZV9mYWNldHMudGNjIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k1ODYtcGMt
bGludXgtZ251L2JpdHMvc3RkX2xpbWl0cy5oIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9yeS5oIiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc2J1Zl9pdGVyLmgiIDEgMwojIDQxICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfY2N0eXBlLmgiIDEgMwojIDQyICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvdHlwZWluZm8iIDEgMwojIDMzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL3R5
cGVpbmZvIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9leGNlcHRpb24iIDEgMwoj
IDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL3R5cGVpbmZvIiAyIDMKCmV4dGVybiAiQysr
IiB7CgpuYW1lc3BhY2UgX19jeHhhYml2MQp7CiAgY2xhc3MgX19jbGFzc190eXBlX2luZm87Cn0K
IyA1MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My90eXBlaW5mbyIgMwpuYW1lc3BhY2Ugc3Rk
CnsKICBjbGFzcyB0eXBlX2luZm8KICB7CiAgcHVibGljOgoKCgoKICAgIHZpcnR1YWwgfnR5cGVf
aW5mbygpOwoKICBwcml2YXRlOgoKICAgIHR5cGVfaW5mbyYgb3BlcmF0b3I9KGNvbnN0IHR5cGVf
aW5mbyYpOwogICAgdHlwZV9pbmZvKGNvbnN0IHR5cGVfaW5mbyYpOwoKICBwcm90ZWN0ZWQ6CiAg
ICBjb25zdCBjaGFyICpfX25hbWU7CgogIHByb3RlY3RlZDoKICAgIGV4cGxpY2l0IHR5cGVfaW5m
byhjb25zdCBjaGFyICpfX24pOiBfX25hbWUoX19uKSB7IH0KCiAgcHVibGljOgoKICAgIGNvbnN0
IGNoYXIqIG5hbWUoKSBjb25zdAogICAgeyByZXR1cm4gX19uYW1lOyB9CiMgODYgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvdHlwZWluZm8iIDMKICAgIGJvb2wgYmVmb3JlKGNvbnN0IHR5cGVf
aW5mbyYgX19hcmcpIGNvbnN0CiAgICB7IHJldHVybiBfX25hbWUgPCBfX2FyZy5fX25hbWU7IH0K
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCB0eXBlX2luZm8mIF9fYXJnKSBjb25zdAogICAgeyBy
ZXR1cm4gX19uYW1lID09IF9fYXJnLl9fbmFtZTsgfQoKICAgIGJvb2wgb3BlcmF0b3IhPShjb25z
dCB0eXBlX2luZm8mIF9fYXJnKSBjb25zdAogICAgeyByZXR1cm4gIW9wZXJhdG9yPT0oX19hcmcp
OyB9CgoKICBwdWJsaWM6CgogICAgdmlydHVhbCBib29sIF9faXNfcG9pbnRlcl9wKCkgY29uc3Q7
CgogICAgdmlydHVhbCBib29sIF9faXNfZnVuY3Rpb25fcCgpIGNvbnN0OwoKCgoKCgoKICAgIHZp
cnR1YWwgYm9vbCBfX2RvX2NhdGNoKGNvbnN0IHR5cGVfaW5mbyAqX190aHJfdHlwZSwgdm9pZCAq
Kl9fdGhyX29iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIF9fb3V0ZXIp
IGNvbnN0OwoKCiAgICB2aXJ0dWFsIGJvb2wgX19kb191cGNhc3QoY29uc3QgX19jeHhhYml2MTo6
X19jbGFzc190eXBlX2luZm8gKl9fdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZvaWQgKipfX29ial9wdHIpIGNvbnN0OwogIH07CgogIGNsYXNzIGJhZF9jYXN0IDogcHVibGlj
IGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfY2FzdCgpIHRocm93KCkgeyB9CiAgICB2
aXJ0dWFsIH5iYWRfY2FzdCgpIHRocm93KCk7CiAgfTsKCiAgY2xhc3MgYmFkX3R5cGVpZCA6IHB1
YmxpYyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAgYmFkX3R5cGVpZCAoKSB0aHJvdygpIHsg
fQogICAgdmlydHVhbCB+YmFkX3R5cGVpZCAoKSB0aHJvdygpOwogIH07Cn0KCn0KIyA0MyAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKIyAxICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZlY3Rvci5oIiAxIDMKIyAzMSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92ZWN0b3IuaCIgMwoKIyAxICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7Cgog
IHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19i
YWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9p
ZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vy
cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25z
dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNo
YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3Mp
OwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9p
ZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190
aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVy
Zmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3df
ZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNv
bnN0IGNoYXIqIF9fcyk7Cn0KIyAzMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF92ZWN0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9h
bGdvYmFzZS5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92
ZWN0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxv
Yy5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92ZWN0b3Iu
aCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3Qu
aCIgMSAzCiMgMzYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmVjdG9yLmgi
IDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdW5pbml0aWFsaXpl
ZC5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92ZWN0b3Iu
aCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIg
MSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDMK
IyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVu
Y3MuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9y
LmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5o
IiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0Lmgi
IDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEg
MwojIDM1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMiAz
CgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsK
CgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2Jh
ZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9p
ZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy
b3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFs
aWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vy
cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShjb25z
dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIq
IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7Cgog
IHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK
ICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9f
dGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDM2ICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvY29uY2VwdF9jaGVjay5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyA0OCAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMwp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yLCBib29sIF9Jc1N0YXRpYz4KY2xhc3MgX1ZlY3Rv
cl9hbGxvY19iYXNlIHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxf
VHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7
CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGFf
YWxsb2NhdG9yOyB9CgogIF9WZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYg
X19hKQogICAgOiBfTV9kYXRhX2FsbG9jYXRvcihfX2EpLCBfTV9zdGFydCgwKSwgX01fZmluaXNo
KDApLCBfTV9lbmRfb2Zfc3RvcmFnZSgwKQogIHt9Cgpwcm90ZWN0ZWQ6CiAgYWxsb2NhdG9yX3R5
cGUgX01fZGF0YV9hbGxvY2F0b3I7CiAgX1RwKiBfTV9zdGFydDsKICBfVHAqIF9NX2ZpbmlzaDsK
ICBfVHAqIF9NX2VuZF9vZl9zdG9yYWdlOwoKICBfVHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24p
CiAgICB7IHJldHVybiBfTV9kYXRhX2FsbG9jYXRvci5hbGxvY2F0ZShfX24pOyB9CiAgdm9pZCBf
TV9kZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3QgX19uKQogICAgeyBpZiAoX19wKSBfTV9kYXRh
X2FsbG9jYXRvci5kZWFsbG9jYXRlKF9fcCwgX19uKTsgfQp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxs
b2NhdG9yLCB0cnVlPiB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8
X1RwLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBl
OwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0
b3JfdHlwZSgpOyB9CgogIF9WZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYp
CiAgICA6IF9NX3N0YXJ0KDApLCBfTV9maW5pc2goMCksIF9NX2VuZF9vZl9zdG9yYWdlKDApCiAg
e30KCnByb3RlY3RlZDoKICBfVHAqIF9NX3N0YXJ0OwogIF9UcCogX01fZmluaXNoOwogIF9UcCog
X01fZW5kX29mX3N0b3JhZ2U7CgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAs
IF9BbGxvY2F0b3I+OjpfQWxsb2NfdHlwZSBfQWxsb2NfdHlwZTsKICBfVHAqIF9NX2FsbG9jYXRl
KHNpemVfdCBfX24pCiAgICB7IHJldHVybiBfQWxsb2NfdHlwZTo6YWxsb2NhdGUoX19uKTsgfQog
IHZvaWQgX01fZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsgX0FsbG9jX3R5
cGU6OmRlYWxsb2NhdGUoX19wLCBfX24pO30KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9BbGxvYz4Kc3RydWN0IF9WZWN0b3JfYmFzZQogIDogcHVibGljIF9WZWN0b3JfYWxsb2NfYmFz
ZTxfVHAsIF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0
czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KewogIHR5cGVkZWYgX1ZlY3Rvcl9hbGxv
Y19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190
cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgICAgICAgICBfQmFzZTsKICB0
eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAg
X1ZlY3Rvcl9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7fQog
IF9WZWN0b3JfYmFzZShzaXplX3QgX19uLCBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9C
YXNlKF9fYSkgewogICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZmluaXNo
ID0gX01fc3RhcnQ7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwogIH0K
CiAgfl9WZWN0b3JfYmFzZSgpIHsgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0
b3JhZ2UgLSBfTV9zdGFydCk7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxs
b2MgPSBhbGxvY2F0b3I8X1RwPiA+CmNsYXNzIHZlY3RvciA6IHByb3RlY3RlZCBfVmVjdG9yX2Jh
c2U8X1RwLCBfQWxsb2M+CnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCnByaXZhdGU6CiAgdHlwZWRlZiBfVmVjdG9yX2Jhc2U8X1RwLCBf
QWxsb2M+IF9CYXNlOwogIHR5cGVkZWYgdmVjdG9yPF9UcCwgX0FsbG9jPiB2ZWN0b3JfdHlwZTsK
cHVibGljOgogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2YWx1ZV90eXBlKiBw
b2ludGVyOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsKICB0eXBl
ZGVmIF9fbm9ybWFsX2l0ZXJhdG9yPHBvaW50ZXIsIHZlY3Rvcl90eXBlPiBpdGVyYXRvcjsKICB0
eXBlZGVmIF9fbm9ybWFsX2l0ZXJhdG9yPGNvbnN0X3BvaW50ZXIsIHZlY3Rvcl90eXBlPiBjb25z
dF9pdGVyYXRvcjsKICB0eXBlZGVmIHZhbHVlX3R5cGUmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNv
bnN0IHZhbHVlX3R5cGUmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5
cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICB0eXBlZGVmIHR5cGVu
YW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlw
ZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX0Jhc2U6OmdldF9hbGxvY2F0b3IoKTsg
fQoKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVy
c2VfaXRlcmF0b3I7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNl
X2l0ZXJhdG9yOwoKcHJvdGVjdGVkOgogIHVzaW5nIF9CYXNlOjpfTV9hbGxvY2F0ZTsKICB1c2lu
ZyBfQmFzZTo6X01fZGVhbGxvY2F0ZTsKICB1c2luZyBfQmFzZTo6X01fc3RhcnQ7CiAgdXNpbmcg
X0Jhc2U6Ol9NX2ZpbmlzaDsKICB1c2luZyBfQmFzZTo6X01fZW5kX29mX3N0b3JhZ2U7Cgpwcm90
ZWN0ZWQ6CiAgdm9pZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9U
cCYgX194KTsKICB2b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbik7CgpwdWJs
aWM6CiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBpdGVyYXRvciAoX01fc3RhcnQpOyB9CiAg
Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3Ig
KF9NX3N0YXJ0KTsgfQogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGl0ZXJhdG9yIChfTV9maW5p
c2gpOyB9CiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0
b3IgKF9NX2ZpbmlzaCk7IH0KCiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKQogICAgeyByZXR1
cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJi
ZWdpbigpIGNvbnN0CiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsg
fQogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpCiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9y
KGJlZ2luKCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QKICAgIHsg
cmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KCiAgc2l6ZV90eXBlIHNp
emUoKSBjb25zdAogICAgeyByZXR1cm4gc2l6ZV90eXBlKGVuZCgpIC0gYmVnaW4oKSk7IH0KICBz
aXplX3R5cGUgbWF4X3NpemUoKSBjb25zdAogICAgeyByZXR1cm4gc2l6ZV90eXBlKC0xKSAvIHNp
emVvZihfVHApOyB9CiAgc2l6ZV90eXBlIGNhcGFjaXR5KCkgY29uc3QKICAgIHsgcmV0dXJuIHNp
emVfdHlwZShjb25zdF9pdGVyYXRvcihfTV9lbmRfb2Zfc3RvcmFnZSkgLSBiZWdpbigpKTsgfQog
IGJvb2wgZW1wdHkoKSBjb25zdAogICAgeyByZXR1cm4gYmVnaW4oKSA9PSBlbmQoKTsgfQoKICBy
ZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKSB7IHJldHVybiAqKGJlZ2luKCkgKyBf
X24pOyB9CiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgY29uc3Qg
eyByZXR1cm4gKihiZWdpbigpICsgX19uKTsgfQoKICB2b2lkIF9NX3JhbmdlX2NoZWNrKHNpemVf
dHlwZSBfX24pIGNvbnN0IHsKICAgIGlmIChfX24gPj0gdGhpcy0+c2l6ZSgpKQogICAgICBfX3Ro
cm93X291dF9vZl9yYW5nZSgidmVjdG9yIik7CiAgfQoKICByZWZlcmVuY2UgYXQoc2l6ZV90eXBl
IF9fbikKICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQog
IGNvbnN0X3JlZmVyZW5jZSBhdChzaXplX3R5cGUgX19uKSBjb25zdAogICAgeyBfTV9yYW5nZV9j
aGVjayhfX24pOyByZXR1cm4gKCp0aGlzKVtfX25dOyB9CgogIGV4cGxpY2l0IHZlY3Rvcihjb25z
dCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19h
KSB7fQoKICB2ZWN0b3Ioc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlLAogICAgICAg
ICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jh
c2UoX19uLCBfX2EpCiAgICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX3N0
YXJ0LCBfX24sIF9fdmFsdWUpOyB9CgogIGV4cGxpY2l0IHZlY3RvcihzaXplX3R5cGUgX19uKQog
ICAgOiBfQmFzZShfX24sIGFsbG9jYXRvcl90eXBlKCkpCiAgICB7IF9NX2ZpbmlzaCA9IHVuaW5p
dGlhbGl6ZWRfZmlsbF9uKF9NX3N0YXJ0LCBfX24sIF9UcCgpKTsgfQoKICB2ZWN0b3IoY29uc3Qg
dmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KQogICAgOiBfQmFzZShfX3guc2l6ZSgpLCBfX3guZ2V0
X2FsbG9jYXRvcigpKQogICAgeyBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX194LmJl
Z2luKCksIF9feC5lbmQoKSwgX01fc3RhcnQpOyB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlcmF0b3I+CiAgdmVjdG9yKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9y
IF9fbGFzdCwKICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90
eXBlKCkpIDogX0Jhc2UoX19hKSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9J
bnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgIF9NX2luaXRpYWxpemVfYXV4
KF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9J
bnRlZ2VyPgogIHZvaWQgX01faW5pdGlhbGl6ZV9hdXgoX0ludGVnZXIgX19uLCBfSW50ZWdlciBf
X3ZhbHVlLCBfX3RydWVfdHlwZSkgewogICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwog
ICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsKICAgIF9NX2ZpbmlzaCA9IHVu
aW5pdGlhbGl6ZWRfZmlsbF9uKF9NX3N0YXJ0LCBfX24sIF9fdmFsdWUpOwogIH0KCiAgdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01faW5pdGlhbGl6ZV9hdXgoX0lucHV0
SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICBfTV9yYW5nZV9pbml0aWFsaXplKF9fZmlyc3Qs
IF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgfQoKICB+dmVjdG9yKCkg
eyBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOyB9CgogIHZlY3RvcjxfVHAsIF9BbGxvYz4m
IG9wZXJhdG9yPShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpOwogIHZvaWQgcmVzZXJ2
ZShzaXplX3R5cGUgX19uKSB7CiAgICBpZiAoY2FwYWNpdHkoKSA8IF9fbikgewogICAgICBjb25z
dCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgICAgcG9pbnRlciBfX3RtcCA9IF9N
X2FsbG9jYXRlX2FuZF9jb3B5KF9fbiwgX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIGRlc3Ry
b3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9N
X2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fdG1wOwogICAg
ICBfTV9maW5pc2ggPSBfX3RtcCArIF9fb2xkX3NpemU7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdl
ID0gX01fc3RhcnQgKyBfX247CiAgICB9CiAgfQoKCgoKCgogIHZvaWQgYXNzaWduKHNpemVfdHlw
ZSBfX24sIGNvbnN0IF9UcCYgX192YWwpIHsgX01fZmlsbF9hc3NpZ24oX19uLCBfX3ZhbCk7IH0K
ICB2b2lkIF9NX2ZpbGxfYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWwpOwoK
ICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBhc3NpZ24oX0lucHV0SXRl
cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVu
YW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAg
IF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICB9Cgog
IHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW50
ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsLCBfX3RydWVfdHlwZSkKICAgIHsgX01fZmlsbF9hc3Np
Z24oKHNpemVfdHlwZSkgX19uLCAoX1RwKSBfX3ZhbCk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXI+CiAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0LCBf
SW5wdXRJdGVyIF9fbGFzdCwgX19mYWxzZV90eXBlKQogICAgeyBfTV9hc3NpZ25fYXV4KF9fZmly
c3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01fYXNzaWduX2F1eChfSW5wdXRJdGVyYXRv
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIGlu
cHV0X2l0ZXJhdG9yX3RhZyk7CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgog
IHZvaWQgX01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRl
cmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7
CgogIHJlZmVyZW5jZSBmcm9udCgpIHsgcmV0dXJuICpiZWdpbigpOyB9CiAgY29uc3RfcmVmZXJl
bmNlIGZyb250KCkgY29uc3QgeyByZXR1cm4gKmJlZ2luKCk7IH0KICByZWZlcmVuY2UgYmFjaygp
IHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQogIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3Qg
eyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CgogIHZvaWQgcHVzaF9iYWNrKGNvbnN0IF9UcCYgX194
KSB7CiAgICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICAgIGNvbnN0
cnVjdChfTV9maW5pc2gsIF9feCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQog
ICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpLCBfX3gpOwogIH0KICB2b2lkIHB1c2hfYmFjaygpIHsK
ICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgICAgY29uc3RydWN0
KF9NX2ZpbmlzaCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9p
bnNlcnRfYXV4KGVuZCgpKTsKICB9CiAgdm9pZCBzd2FwKHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9f
eCkgewogICAgc3RkOjpzd2FwKF9NX3N0YXJ0LCBfX3guX01fc3RhcnQpOwogICAgc3RkOjpzd2Fw
KF9NX2ZpbmlzaCwgX194Ll9NX2ZpbmlzaCk7CiAgICBzdGQ6OnN3YXAoX01fZW5kX29mX3N0b3Jh
Z2UsIF9feC5fTV9lbmRfb2Zfc3RvcmFnZSk7CiAgfQoKICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0
b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpIHsKICAgIHNpemVfdHlwZSBfX24gPSBfX3Bv
c2l0aW9uIC0gYmVnaW4oKTsKICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2Ug
JiYgX19wb3NpdGlvbiA9PSBlbmQoKSkgewogICAgICBjb25zdHJ1Y3QoX01fZmluaXNoLCBfX3gp
OwogICAgICArK19NX2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChp
dGVyYXRvcihfX3Bvc2l0aW9uKSwgX194KTsKICAgIHJldHVybiBiZWdpbigpICsgX19uOwogIH0K
ICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbikgewogICAgc2l6ZV90eXBlIF9f
biA9IF9fcG9zaXRpb24gLSBiZWdpbigpOwogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zf
c3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKSB7CiAgICAgIGNvbnN0cnVjdChfTV9maW5p
c2gpOwogICAgICArK19NX2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1
eChpdGVyYXRvcihfX3Bvc2l0aW9uKSk7CiAgICByZXR1cm4gYmVnaW4oKSArIF9fbjsKICB9Cgog
IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2VydChpdGVyYXRvciBf
X3BvcywgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFs
IF9JbnRlZ3JhbDsKICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3BvcywgX19maXJzdCwgX19sYXN0
LCBfSW50ZWdyYWwoKSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBf
TV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIg
X192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCiAgICB7IF9NX2Zp
bGxfaW5zZXJ0KF9fcG9zLCAoc2l6ZV90eXBlKSBfX24sIChfVHApIF9fdmFsKTsgfQoKICB0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRl
cmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19m
aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9f
ZmFsc2VfdHlwZSkgewogICAgX01fcmFuZ2VfaW5zZXJ0KF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3Qs
IF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogIH0KCiAgdm9pZCBpbnNlcnQgKGl0ZXJh
dG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCkKICAgIHsgX01fZmlsbF9p
bnNlcnQoX19wb3MsIF9fbiwgX194KTsgfQoKICB2b2lkIF9NX2ZpbGxfaW5zZXJ0IChpdGVyYXRv
ciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3gpOwoKICB2b2lkIHBvcF9iYWNr
KCkgewogICAgLS1fTV9maW5pc2g7CiAgICBkZXN0cm95KF9NX2ZpbmlzaCk7CiAgfQogIGl0ZXJh
dG9yIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsKICAgIGlmIChfX3Bvc2l0aW9uICsgMSAh
PSBlbmQoKSkKICAgICAgY29weShfX3Bvc2l0aW9uICsgMSwgZW5kKCksIF9fcG9zaXRpb24pOwog
ICAgLS1fTV9maW5pc2g7CiAgICBkZXN0cm95KF9NX2ZpbmlzaCk7CiAgICByZXR1cm4gX19wb3Np
dGlvbjsKICB9CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19s
YXN0KSB7CiAgICBpdGVyYXRvciBfX2koY29weShfX2xhc3QsIGVuZCgpLCBfX2ZpcnN0KSk7CiAg
ICBkZXN0cm95KF9faSwgZW5kKCkpOwogICAgX01fZmluaXNoID0gX01fZmluaXNoIC0gKF9fbGFz
dCAtIF9fZmlyc3QpOwogICAgcmV0dXJuIF9fZmlyc3Q7CiAgfQoKICB2b2lkIHJlc2l6ZShzaXpl
X3R5cGUgX19uZXdfc2l6ZSwgY29uc3QgX1RwJiBfX3gpIHsKICAgIGlmIChfX25ld19zaXplIDwg
c2l6ZSgpKQogICAgICBlcmFzZShiZWdpbigpICsgX19uZXdfc2l6ZSwgZW5kKCkpOwogICAgZWxz
ZQogICAgICBpbnNlcnQoZW5kKCksIF9fbmV3X3NpemUgLSBzaXplKCksIF9feCk7CiAgfQogIHZv
aWQgcmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplKSB7IHJlc2l6ZShfX25ld19zaXplLCBfVHAo
KSk7IH0KICB2b2lkIGNsZWFyKCkgeyBlcmFzZShiZWdpbigpLCBlbmQoKSk7IH0KCnByb3RlY3Rl
ZDoKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgcG9pbnRlciBfTV9hbGxv
Y2F0ZV9hbmRfY29weShzaXplX3R5cGUgX19uLCBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVy
YXRvciBfX2xhc3QpCiAgewogICAgcG9pbnRlciBfX3Jlc3VsdCA9IF9NX2FsbG9jYXRlKF9fbik7
CiAgICB0cnkgewogICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jl
c3VsdCk7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KICAgIGNhdGNoKC4uLikgeyBfTV9k
ZWFsbG9jYXRlKF9fcmVzdWx0LCBfX24pOyB0aHJvdzsgfTsKICB9CgogIHRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luaXRpYWxpemUoX0lucHV0SXRlcmF0
b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19s
YXN0LCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgewogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFz
dDsgKytfX2ZpcnN0KQogICAgICBwdXNoX2JhY2soKl9fZmlyc3QpOwogIH0KCgogIHRlbXBsYXRl
IDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5pdGlhbGl6ZShfRm9y
d2FyZEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJk
SXRlcmF0b3IgX19sYXN0LCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICB7CiAgICBzaXplX3R5cGUg
X19uID0gMDsKICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKICAgIF9NX3N0YXJ0
ID0gX01fYWxsb2NhdGUoX19uKTsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBf
X247CiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBf
TV9zdGFydCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBf
TV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgX0lu
cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
ZEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLAogICAgICAg
ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRv
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpOwp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRv
cj09KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0Fs
bG9jPiYgX195KQp7CiAgcmV0dXJuIF9feC5zaXplKCkgPT0gX195LnNpemUoKSAmJgogICAgICAg
ICBlcXVhbChfX3guYmVnaW4oKSwgX194LmVuZCgpLCBfX3kuYmVnaW4oKSk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I8KGNvbnN0IHZl
Y3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KQp7
CiAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9feS5iZWdpbigpLCBfX3kuZW5kKCkp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSB2b2lkIHN3YXAo
dmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICBf
X3guc3dhcChfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGlu
ZSBib29sCm9wZXJhdG9yIT0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2
ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcj4oY29u
c3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBf
X3kpIHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
QWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPD0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYg
X194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBf
X3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9w
ZXJhdG9yPj0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1Rw
LCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZlY3RvcjxfVHAsX0FsbG9jPiYKdmVjdG9yPF9UcCxfQWxs
b2M+OjpvcGVyYXRvcj0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KQp7CiAgaWYgKCZf
X3ggIT0gdGhpcykgewogICAgY29uc3Qgc2l6ZV90eXBlIF9feGxlbiA9IF9feC5zaXplKCk7CiAg
ICBpZiAoX194bGVuID4gY2FwYWNpdHkoKSkgewogICAgICBwb2ludGVyIF9fdG1wID0gX01fYWxs
b2NhdGVfYW5kX2NvcHkoX194bGVuLCBfX3guYmVnaW4oKSwgX194LmVuZCgpKTsKICAgICAgZGVz
dHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwg
X01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX190bXA7CiAg
ICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX3hsZW47CiAgICB9CiAgICBlbHNl
IGlmIChzaXplKCkgPj0gX194bGVuKSB7CiAgICAgIGl0ZXJhdG9yIF9faShjb3B5KF9feC5iZWdp
bigpLCBfX3guZW5kKCksIGJlZ2luKCkpKTsKICAgICAgZGVzdHJveShfX2ksIGVuZCgpKTsKICAg
IH0KICAgIGVsc2UgewogICAgICBjb3B5KF9feC5iZWdpbigpLCBfX3guYmVnaW4oKSArIHNpemUo
KSwgX01fc3RhcnQpOwogICAgICB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCkgKyBzaXpl
KCksIF9feC5lbmQoKSwgX01fZmluaXNoKTsKICAgIH0KICAgIF9NX2ZpbmlzaCA9IF9NX3N0YXJ0
ICsgX194bGVuOwogIH0KICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
YXNzIF9BbGxvYz4Kdm9pZCB2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9maWxsX2Fzc2lnbihzaXpl
X3QgX19uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3ZhbCkKewogIGlmIChfX24gPiBjYXBhY2l0eSgp
KSB7CiAgICB2ZWN0b3I8X1RwLCBfQWxsb2M+IF9fdG1wKF9fbiwgX192YWwsIGdldF9hbGxvY2F0
b3IoKSk7CiAgICBfX3RtcC5zd2FwKCp0aGlzKTsKICB9CiAgZWxzZSBpZiAoX19uID4gc2l6ZSgp
KSB7CiAgICBmaWxsKGJlZ2luKCksIGVuZCgpLCBfX3ZhbCk7CiAgICBfTV9maW5pc2ggPSB1bmlu
aXRpYWxpemVkX2ZpbGxfbihfTV9maW5pc2gsIF9fbiAtIHNpemUoKSwgX192YWwpOwogIH0KICBl
bHNlCiAgICBlcmFzZShmaWxsX24oYmVnaW4oKSwgX19uLCBfX3ZhbCksIGVuZCgpKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
cj4Kdm9pZCB2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXIgX19m
aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICBpdGVyYXRvciBfX2N1cihiZWdpbigpKTsK
ICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fY3VyICE9IGVuZCgpOyArK19fY3VyLCAr
K19fZmlyc3QpCiAgICAqX19jdXIgPSAqX19maXJzdDsKICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp
CiAgICBlcmFzZShfX2N1ciwgZW5kKCkpOwogIGVsc2UKICAgIGluc2VydChlbmQoKSwgX19maXJz
dCwgX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2Fzc2ln
bl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICBzaXpl
X3R5cGUgX19sZW4gPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwoKICBp
ZiAoX19sZW4gPiBjYXBhY2l0eSgpKSB7CiAgICBwb2ludGVyIF9fdG1wKF9NX2FsbG9jYXRlX2Fu
ZF9jb3B5KF9fbGVuLCBfX2ZpcnN0LCBfX2xhc3QpKTsKICAgIGRlc3Ryb3koX01fc3RhcnQsIF9N
X2ZpbmlzaCk7CiAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAt
IF9NX3N0YXJ0KTsKICAgIF9NX3N0YXJ0ID0gX190bXA7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9
IF9NX2ZpbmlzaCA9IF9NX3N0YXJ0ICsgX19sZW47CiAgfQogIGVsc2UgaWYgKHNpemUoKSA+PSBf
X2xlbikgewogICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKGNvcHkoX19maXJzdCwgX19sYXN0LCBf
TV9zdGFydCkpOwogICAgZGVzdHJveShfX25ld19maW5pc2gsIGVuZCgpKTsKICAgIF9NX2Zpbmlz
aCA9IF9fbmV3X2ZpbmlzaC5iYXNlKCk7CiAgfQogIGVsc2UgewogICAgX0ZvcndhcmRJdGVyIF9f
bWlkID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWQsIHNpemUoKSk7CiAgICBjb3B5KF9fZmly
c3QsIF9fbWlkLCBfTV9zdGFydCk7CiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHko
X19taWQsIF9fbGFzdCwgX01fZmluaXNoKTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
YXNzIF9BbGxvYz4Kdm9pZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJh
dG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194KQp7CiAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9l
bmRfb2Zfc3RvcmFnZSkgewogICAgY29uc3RydWN0KF9NX2ZpbmlzaCwgKihfTV9maW5pc2ggLSAx
KSk7CiAgICArK19NX2ZpbmlzaDsKICAgIF9UcCBfX3hfY29weSA9IF9feDsKICAgIGNvcHlfYmFj
a3dhcmQoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoIC0gMiksIGl0ZXJhdG9yKF9NX2Zp
bmlzaC0gMSkpOwogICAgKl9fcG9zaXRpb24gPSBfX3hfY29weTsKICB9CiAgZWxzZSB7CiAgICBj
b25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgIGNvbnN0IHNpemVfdHlwZSBf
X2xlbiA9IF9fb2xkX3NpemUgIT0gMCA/IDIgKiBfX29sZF9zaXplIDogMTsKICAgIGl0ZXJhdG9y
IF9fbmV3X3N0YXJ0KF9NX2FsbG9jYXRlKF9fbGVuKSk7CiAgICBpdGVyYXRvciBfX25ld19maW5p
c2goX19uZXdfc3RhcnQpOwogICAgdHJ5IHsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFs
aXplZF9jb3B5KGl0ZXJhdG9yKF9NX3N0YXJ0KSwgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3N0YXJ0KTsKICAgICAgY29uc3RydWN0KF9f
bmV3X2ZpbmlzaC5iYXNlKCksIF9feCk7CiAgICAgICsrX19uZXdfZmluaXNoOwogICAgICBfX25l
d19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmlu
aXNoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X2Zpbmlz
aCk7CiAgICB9CiAgICBjYXRjaCguLi4pIHsgKGRlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmlu
aXNoKSwgX01fZGVhbGxvY2F0ZShfX25ld19zdGFydC5iYXNlKCksX19sZW4pKTsgdGhyb3c7IH07
CgogICAgZGVzdHJveShiZWdpbigpLCBlbmQoKSk7CiAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0
LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgIF9NX3N0YXJ0ID0gX19uZXdfc3Rh
cnQuYmFzZSgpOwogICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICAgIF9NX2Vu
ZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQuYmFzZSgpICsgX19sZW47CiAgfQp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01f
aW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uKQp7CiAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9l
bmRfb2Zfc3RvcmFnZSkgewogICAgY29uc3RydWN0KF9NX2ZpbmlzaCwgKihfTV9maW5pc2ggLSAx
KSk7CiAgICArK19NX2ZpbmlzaDsKICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgaXRlcmF0
b3IoX01fZmluaXNoIC0gMiksCiAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKF9NX2ZpbmlzaCAt
IDEpKTsKICAgICpfX3Bvc2l0aW9uID0gX1RwKCk7CiAgfQogIGVsc2UgewogICAgY29uc3Qgc2l6
ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7CiAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBf
X29sZF9zaXplICE9IDAgPyAyICogX19vbGRfc2l6ZSA6IDE7CiAgICBwb2ludGVyIF9fbmV3X3N0
YXJ0ID0gX01fYWxsb2NhdGUoX19sZW4pOwogICAgcG9pbnRlciBfX25ld19maW5pc2ggPSBfX25l
d19zdGFydDsKICAgIHRyeSB7CiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29w
eShpdGVyYXRvcihfTV9zdGFydCksIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX25ld19zdGFydCk7CiAgICAgIGNvbnN0cnVjdChfX25ld19maW5p
c2gpOwogICAgICArK19fbmV3X2ZpbmlzaDsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFs
aXplZF9jb3B5KF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9NX2ZpbmlzaCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19maW5pc2gpOwogICAgfQogICAgY2F0Y2go
Li4uKSB7IChkZXN0cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCksIF9NX2RlYWxsb2NhdGUo
X19uZXdfc3RhcnQsX19sZW4pKTsgdGhyb3c7IH07CgogICAgZGVzdHJveShiZWdpbigpLCBlbmQo
KSk7CiAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0
YXJ0KTsKICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7CiAgICBfTV9maW5pc2ggPSBfX25ld19m
aW5pc2g7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0ICsgX19sZW47CiAgfQp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgdmVjdG9yPF9UcCwgX0Fs
bG9jPjo6X01fZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCkK
ewogIGlmIChfX24gIT0gMCkgewogICAgaWYgKHNpemVfdHlwZShfTV9lbmRfb2Zfc3RvcmFnZSAt
IF9NX2ZpbmlzaCkgPj0gX19uKSB7CiAgICAgIF9UcCBfX3hfY29weSA9IF9feDsKICAgICAgY29u
c3Qgc2l6ZV90eXBlIF9fZWxlbXNfYWZ0ZXIgPSBlbmQoKSAtIF9fcG9zaXRpb247CiAgICAgIGl0
ZXJhdG9yIF9fb2xkX2ZpbmlzaChfTV9maW5pc2gpOwogICAgICBpZiAoX19lbGVtc19hZnRlciA+
IF9fbikgewogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfTV9maW5pc2ggLSBfX24sIF9NX2Zp
bmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uOwogICAgICAgIGNvcHlf
YmFja3dhcmQoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gpOwog
ICAgICAgIGZpbGwoX19wb3NpdGlvbiwgX19wb3NpdGlvbiArIF9fbiwgX194X2NvcHkpOwogICAg
ICB9CiAgICAgIGVsc2UgewogICAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2ZpbmlzaCwg
X19uIC0gX19lbGVtc19hZnRlciwgX194X2NvcHkpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX24g
LSBfX2VsZW1zX2FmdGVyOwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBf
X29sZF9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fZWxlbXNfYWZ0
ZXI7CiAgICAgICAgZmlsbChfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9feF9jb3B5KTsKICAg
ICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0g
c2l6ZSgpOwogICAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICsgbWF4KF9f
b2xkX3NpemUsIF9fbik7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0KF9NX2FsbG9jYXRlKF9f
bGVuKSk7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7CiAgICAgIHRy
eSB7CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGJlZ2luKCksIF9f
cG9zaXRpb24sIF9fbmV3X3N0YXJ0KTsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxp
emVkX2ZpbGxfbihfX25ld19maW5pc2gsIF9fbiwgX194KTsKICAgICAgICBfX25ld19maW5pc2gK
ICAgICAgICAgID0gdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX25ld19m
aW5pc2gpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikgeyAoZGVzdHJveShfX25ld19zdGFydCxf
X25ld19maW5pc2gpLCBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LmJhc2UoKSxfX2xlbikpOyB0
aHJvdzsgfTsKCiAgICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9NX2Rl
YWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgICBf
TV9zdGFydCA9IF9fbmV3X3N0YXJ0LmJhc2UoKTsKICAgICAgX01fZmluaXNoID0gX19uZXdfZmlu
aXNoLmJhc2UoKTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydC5iYXNlKCkg
KyBfX2xlbjsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4g
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46
Ol9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICBmb3IgKCA7IF9fZmly
c3QgIT0gX19sYXN0OyArK19fZmlyc3QpIHsKICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAqX19m
aXJzdCk7CiAgICArK19fcG9zOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Fs
bG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4Kdm9pZAp2ZWN0b3I8X1RwLCBf
QWxsb2M+OjpfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcp
CnsKICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIHNpemVfdHlwZSBfX24gPSAwOwogICAg
ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24pOwogICAgaWYgKHNpemVfdHlwZShfTV9lbmRf
b2Zfc3RvcmFnZSAtIF9NX2ZpbmlzaCkgPj0gX19uKSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBf
X2VsZW1zX2FmdGVyID0gZW5kKCkgLSBfX3Bvc2l0aW9uOwogICAgICBpdGVyYXRvciBfX29sZF9m
aW5pc2goX01fZmluaXNoKTsKICAgICAgaWYgKF9fZWxlbXNfYWZ0ZXIgPiBfX24pIHsKICAgICAg
ICB1bmluaXRpYWxpemVkX2NvcHkoX01fZmluaXNoIC0gX19uLCBfTV9maW5pc2gsIF9NX2Zpbmlz
aCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fbjsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9z
aXRpb24sIF9fb2xkX2ZpbmlzaCAtIF9fbiwgX19vbGRfZmluaXNoKTsKICAgICAgICBjb3B5KF9f
Zmlyc3QsIF9fbGFzdCwgX19wb3NpdGlvbik7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAg
X0ZvcndhcmRJdGVyYXRvciBfX21pZCA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZCwg
X19lbGVtc19hZnRlcik7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fbWlkLCBfX2xhc3Qs
IF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fbiAtIF9fZWxlbXNfYWZ0ZXI7CiAg
ICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCwgX01fZmlu
aXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19lbGVtc19hZnRlcjsKICAgICAgICBjb3B5KF9f
Zmlyc3QsIF9fbWlkLCBfX3Bvc2l0aW9uKTsKICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAg
IGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgICBjb25zdCBzaXplX3R5
cGUgX19sZW4gPSBfX29sZF9zaXplICsgbWF4KF9fb2xkX3NpemUsIF9fbik7CiAgICAgIGl0ZXJh
dG9yIF9fbmV3X3N0YXJ0KF9NX2FsbG9jYXRlKF9fbGVuKSk7CiAgICAgIGl0ZXJhdG9yIF9fbmV3
X2ZpbmlzaChfX25ld19zdGFydCk7CiAgICAgIHRyeSB7CiAgICAgICAgX19uZXdfZmluaXNoID0g
dW5pbml0aWFsaXplZF9jb3B5KGl0ZXJhdG9yKF9NX3N0YXJ0KSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOwogICAgICAg
IF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fbmV3
X2ZpbmlzaCk7CiAgICAgICAgX19uZXdfZmluaXNoCiAgICAgICAgICA9IHVuaW5pdGlhbGl6ZWRf
Y29weShfX3Bvc2l0aW9uLCBpdGVyYXRvcihfTV9maW5pc2gpLCBfX25ld19maW5pc2gpOwogICAg
ICB9CiAgICAgIGNhdGNoKC4uLikgeyAoZGVzdHJveShfX25ld19zdGFydCxfX25ld19maW5pc2gp
LCBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LmJhc2UoKSxfX2xlbikpOyB0aHJvdzsgfTsKCiAg
ICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01f
c3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9f
bmV3X3N0YXJ0LmJhc2UoKTsKICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsK
ICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsKICAg
IH0KICB9Cn0KCn0KIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92ZWN0
b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9idmVjdG9y
LmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2J2ZWN0b3Iu
aCIgMwpuYW1lc3BhY2Ugc3RkCnsKCnN0YXRpYyBjb25zdCBpbnQgX19XT1JEX0JJVCA9IGludCg4
KnNpemVvZih1bnNpZ25lZCBpbnQpKTsKCnN0cnVjdCBfQml0X3JlZmVyZW5jZSB7CiAgdW5zaWdu
ZWQgaW50KiBfTV9wOwogIHVuc2lnbmVkIGludCBfTV9tYXNrOwogIF9CaXRfcmVmZXJlbmNlKHVu
c2lnbmVkIGludCogX194LCB1bnNpZ25lZCBpbnQgX195KQogICAgOiBfTV9wKF9feCksIF9NX21h
c2soX195KSB7fQoKcHVibGljOgogIF9CaXRfcmVmZXJlbmNlKCkgOiBfTV9wKDApLCBfTV9tYXNr
KDApIHt9CiAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEoISgqX01fcCAmIF9NX21h
c2spKTsgfQogIF9CaXRfcmVmZXJlbmNlJiBvcGVyYXRvcj0oYm9vbCBfX3gpCiAgewogICAgaWYg
KF9feCkgKl9NX3AgfD0gX01fbWFzazsKICAgIGVsc2UgKl9NX3AgJj0gfl9NX21hc2s7CiAgICBy
ZXR1cm4gKnRoaXM7CiAgfQogIF9CaXRfcmVmZXJlbmNlJiBvcGVyYXRvcj0oY29uc3QgX0JpdF9y
ZWZlcmVuY2UmIF9feCkKICAgIHsgcmV0dXJuICp0aGlzID0gYm9vbChfX3gpOyB9CiAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IF9CaXRfcmVmZXJlbmNlJiBfX3gpIGNvbnN0CiAgICB7IHJldHVybiBi
b29sKCp0aGlzKSA9PSBib29sKF9feCk7IH0KICBib29sIG9wZXJhdG9yPChjb25zdCBfQml0X3Jl
ZmVyZW5jZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gIWJvb2woKnRoaXMpICYmIGJvb2woX194
KTsKICB9CiAgdm9pZCBmbGlwKCkgeyAqX01fcCBePSBfTV9tYXNrOyB9Cn07CgppbmxpbmUgdm9p
ZCBzd2FwKF9CaXRfcmVmZXJlbmNlIF9feCwgX0JpdF9yZWZlcmVuY2UgX195KQp7CiAgYm9vbCBf
X3RtcCA9IF9feDsKICBfX3ggPSBfX3k7CiAgX195ID0gX190bXA7Cn0KCnN0cnVjdCBfQml0X2l0
ZXJhdG9yX2Jhc2UgOiBwdWJsaWMgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcjxib29sLCBwdHJkaWZm
X3Q+CnsKICB1bnNpZ25lZCBpbnQqIF9NX3A7CiAgdW5zaWduZWQgaW50IF9NX29mZnNldDsKCiAg
X0JpdF9pdGVyYXRvcl9iYXNlKHVuc2lnbmVkIGludCogX194LCB1bnNpZ25lZCBpbnQgX195KQog
ICAgOiBfTV9wKF9feCksIF9NX29mZnNldChfX3kpIHt9CgogIHZvaWQgX01fYnVtcF91cCgpIHsK
ICAgIGlmIChfTV9vZmZzZXQrKyA9PSBfX1dPUkRfQklUIC0gMSkgewogICAgICBfTV9vZmZzZXQg
PSAwOwogICAgICArK19NX3A7CiAgICB9CiAgfQogIHZvaWQgX01fYnVtcF9kb3duKCkgewogICAg
aWYgKF9NX29mZnNldC0tID09IDApIHsKICAgICAgX01fb2Zmc2V0ID0gX19XT1JEX0JJVCAtIDE7
CiAgICAgIC0tX01fcDsKICAgIH0KICB9CgogIHZvaWQgX01faW5jcihwdHJkaWZmX3QgX19pKSB7
CiAgICBkaWZmZXJlbmNlX3R5cGUgX19uID0gX19pICsgX01fb2Zmc2V0OwogICAgX01fcCArPSBf
X24gLyBfX1dPUkRfQklUOwogICAgX19uID0gX19uICUgX19XT1JEX0JJVDsKICAgIGlmIChfX24g
PCAwKSB7CiAgICAgIF9NX29mZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbiArIF9fV09SRF9CSVQ7
CiAgICAgIC0tX01fcDsKICAgIH0gZWxzZQogICAgICBfTV9vZmZzZXQgPSAodW5zaWduZWQgaW50
KSBfX247CiAgfQoKICBib29sIG9wZXJhdG9yPT0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBf
X2kpIGNvbnN0IHsKICAgIHJldHVybiBfTV9wID09IF9faS5fTV9wICYmIF9NX29mZnNldCA9PSBf
X2kuX01fb2Zmc2V0OwogIH0KICBib29sIG9wZXJhdG9yPChjb25zdCBfQml0X2l0ZXJhdG9yX2Jh
c2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuIF9NX3AgPCBfX2kuX01fcCB8fCAoX01fcCA9PSBf
X2kuX01fcCAmJiBfTV9vZmZzZXQgPCBfX2kuX01fb2Zmc2V0KTsKICB9CiAgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gISgq
dGhpcyA9PSBfX2kpOwogIH0KICBib29sIG9wZXJhdG9yPihjb25zdCBfQml0X2l0ZXJhdG9yX2Jh
c2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuIF9faSA8ICp0aGlzOwogIH0KICBib29sIG9wZXJh
dG9yPD0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiAh
KF9faSA8ICp0aGlzKTsKICB9CiAgYm9vbCBvcGVyYXRvcj49KGNvbnN0IF9CaXRfaXRlcmF0b3Jf
YmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gISgqdGhpcyA8IF9faSk7CiAgfQp9OwoKaW5s
aW5lIHB0cmRpZmZfdApvcGVyYXRvci0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX3gsIGNv
bnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX195KSB7CiAgcmV0dXJuIF9fV09SRF9CSVQgKiAoX194
Ll9NX3AgLSBfX3kuX01fcCkgKyBfX3guX01fb2Zmc2V0IC0gX195Ll9NX29mZnNldDsKfQoKCnN0
cnVjdCBfQml0X2l0ZXJhdG9yIDogcHVibGljIF9CaXRfaXRlcmF0b3JfYmFzZQp7CiAgdHlwZWRl
ZiBfQml0X3JlZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSogcG9p
bnRlcjsKICB0eXBlZGVmIF9CaXRfaXRlcmF0b3IgaXRlcmF0b3I7CgogIF9CaXRfaXRlcmF0b3Io
KSA6IF9CaXRfaXRlcmF0b3JfYmFzZSgwLCAwKSB7fQogIF9CaXRfaXRlcmF0b3IodW5zaWduZWQg
aW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9CaXRfaXRlcmF0b3JfYmFzZShfX3gs
IF9feSkge30KCiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIHJlZmVyZW5j
ZShfTV9wLCAxVSA8PCBfTV9vZmZzZXQpOyB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7CiAg
ICBfTV9idW1wX3VwKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9y
KysoaW50KSB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgX01fYnVtcF91cCgpOwog
ICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciYgb3BlcmF0b3ItLSgpIHsKICAgIF9NX2J1
bXBfZG93bigpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpdGVyYXRvciBvcGVyYXRvci0tKGlu
dCkgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIF9NX2J1bXBfZG93bigpOwogICAg
cmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUg
X19pKSB7CiAgICBfTV9pbmNyKF9faSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9y
JiBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgICp0aGlzICs9IC1fX2k7CiAg
ICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUg
X19pKSBjb25zdCB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1w
ICs9IF9faTsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNv
bnN0IHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgLT0gX19p
OwogIH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9faSkgeyByZXR1
cm4gKigqdGhpcyArIF9faSk7IH0KfTsKCmlubGluZSBfQml0X2l0ZXJhdG9yCm9wZXJhdG9yKyhw
dHJkaWZmX3QgX19uLCBjb25zdCBfQml0X2l0ZXJhdG9yJiBfX3gpIHsgcmV0dXJuIF9feCArIF9f
bjsgfQoKCnN0cnVjdCBfQml0X2NvbnN0X2l0ZXJhdG9yIDogcHVibGljIF9CaXRfaXRlcmF0b3Jf
YmFzZQp7CiAgdHlwZWRlZiBib29sIHJlZmVyZW5jZTsKICB0eXBlZGVmIGJvb2wgY29uc3RfcmVm
ZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgYm9vbCogcG9pbnRlcjsKICB0eXBlZGVmIF9CaXRfY29u
c3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CgogIF9CaXRfY29uc3RfaXRlcmF0b3IoKSA6IF9C
aXRfaXRlcmF0b3JfYmFzZSgwLCAwKSB7fQogIF9CaXRfY29uc3RfaXRlcmF0b3IodW5zaWduZWQg
aW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9CaXRfaXRlcmF0b3JfYmFzZShfX3gs
IF9feSkge30KICBfQml0X2NvbnN0X2l0ZXJhdG9yKGNvbnN0IF9CaXRfaXRlcmF0b3ImIF9feCkK
ICAgIDogX0JpdF9pdGVyYXRvcl9iYXNlKF9feC5fTV9wLCBfX3guX01fb2Zmc2V0KSB7fQoKICBj
b25zdF9yZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgewogICAgcmV0dXJuIF9CaXRfcmVmZXJl
bmNlKF9NX3AsIDFVIDw8IF9NX29mZnNldCk7CiAgfQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRv
cisrKCkgewogICAgX01fYnVtcF91cCgpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9p
dGVyYXRvciBvcGVyYXRvcisrKGludCkgewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhp
czsKICAgIF9NX2J1bXBfdXAoKTsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgY29uc3RfaXRlcmF0
b3ImIG9wZXJhdG9yLS0oKSB7CiAgICBfTV9idW1wX2Rvd24oKTsKICAgIHJldHVybiAqdGhpczsK
ICB9CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpIHsKICAgIGNvbnN0X2l0ZXJhdG9y
IF9fdG1wID0gKnRoaXM7CiAgICBfTV9idW1wX2Rvd24oKTsKICAgIHJldHVybiBfX3RtcDsKICB9
CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAg
X01faW5jcihfX2kpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciYgb3Bl
cmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICAqdGhpcyArPSAtX19pOwogICAgcmV0
dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBl
IF9faSkgY29uc3QgewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIHJldHVy
biBfX3RtcCArPSBfX2k7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yLShkaWZmZXJlbmNl
X3R5cGUgX19pKSBjb25zdCB7CiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAg
cmV0dXJuIF9fdG1wIC09IF9faTsKICB9CiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlm
ZmVyZW5jZV90eXBlIF9faSkgewogICAgcmV0dXJuICooKnRoaXMgKyBfX2kpOwogIH0KfTsKCmlu
bGluZSBfQml0X2NvbnN0X2l0ZXJhdG9yCm9wZXJhdG9yKyhwdHJkaWZmX3QgX19uLCBjb25zdCBf
Qml0X2NvbnN0X2l0ZXJhdG9yJiBfX3gpIHsgcmV0dXJuIF9feCArIF9fbjsgfQoKCgoKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX0FsbG9jYXRvciwgYm9vbCBfX2lzX3N0YXRpYz4KY2xhc3MgX0J2ZWN0b3Jf
YWxsb2NfYmFzZSB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8Ym9v
bCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsK
ICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YV9h
bGxvY2F0b3I7IH0KCiAgX0J2ZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYg
X19hKQogICAgOiBfTV9kYXRhX2FsbG9jYXRvcihfX2EpLCBfTV9zdGFydCgpLCBfTV9maW5pc2go
KSwgX01fZW5kX29mX3N0b3JhZ2UoMCkge30KCnByb3RlY3RlZDoKICB1bnNpZ25lZCBpbnQqIF9N
X2JpdF9hbGxvYyhzaXplX3QgX19uKQogICAgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3IuYWxs
b2NhdGUoKF9fbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUKTsgfQogIHZvaWQgX01fZGVh
bGxvY2F0ZSgpIHsKICAgIGlmIChfTV9zdGFydC5fTV9wKQogICAgICBfTV9kYXRhX2FsbG9jYXRv
ci5kZWFsbG9jYXRlKF9NX3N0YXJ0Ll9NX3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydC5fTV9wKTsKICB9CgogIHR5cGVuYW1l
IF9BbGxvY190cmFpdHM8dW5zaWduZWQgaW50LCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUK
ICAgICAgICAgIF9NX2RhdGFfYWxsb2NhdG9yOwogIF9CaXRfaXRlcmF0b3IgX01fc3RhcnQ7CiAg
X0JpdF9pdGVyYXRvciBfTV9maW5pc2g7CiAgdW5zaWduZWQgaW50KiBfTV9lbmRfb2Zfc3RvcmFn
ZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jYXRvcj4KY2xhc3MgX0J2ZWN0b3JfYWxsb2Nf
YmFzZTxfQWxsb2NhdG9yLCB0cnVlPiB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxv
Y190cmFpdHM8Ym9vbCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICBhbGxv
Y2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1
cm4gYWxsb2NhdG9yX3R5cGUoKTsgfQoKICBfQnZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9j
YXRvcl90eXBlJikKICAgIDogX01fc3RhcnQoKSwgX01fZmluaXNoKCksIF9NX2VuZF9vZl9zdG9y
YWdlKDApIHt9Cgpwcm90ZWN0ZWQ6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPHVu
c2lnbmVkIGludCwgX0FsbG9jYXRvcj46Ol9BbGxvY190eXBlCiAgICAgICAgICBfQWxsb2NfdHlw
ZTsKCiAgdW5zaWduZWQgaW50KiBfTV9iaXRfYWxsb2Moc2l6ZV90IF9fbikKICAgIHsgcmV0dXJu
IF9BbGxvY190eXBlOjphbGxvY2F0ZSgoX19uICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQp
OyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKCkgewogICAgaWYgKF9NX3N0YXJ0Ll9NX3ApCiAgICAg
IF9BbGxvY190eXBlOjpkZWFsbG9jYXRlKF9NX3N0YXJ0Ll9NX3AsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQuX01fcCk7CiAgfQoKICBf
Qml0X2l0ZXJhdG9yIF9NX3N0YXJ0OwogIF9CaXRfaXRlcmF0b3IgX01fZmluaXNoOwogIHVuc2ln
bmVkIGludCogX01fZW5kX29mX3N0b3JhZ2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpj
bGFzcyBfQnZlY3Rvcl9iYXNlCiAgOiBwdWJsaWMgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2Ms
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxv
Yz46Ol9TX2luc3RhbmNlbGVzcz4KewogIHR5cGVkZWYgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxs
b2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8Ym9vbCwgX0Fs
bG9jPjo6X1NfaW5zdGFuY2VsZXNzPgogICAgICAgICAgX0Jhc2U7CnB1YmxpYzoKICB0eXBlZGVm
IHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgX0J2ZWN0
b3JfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkge30KICB+X0J2
ZWN0b3JfYmFzZSgpIHsgX0Jhc2U6Ol9NX2RlYWxsb2NhdGUoKTsgfQp9OwoKfQoKCiMgMSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMSAzCiMgMzE4ICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2J2ZWN0b3IuaCIgMiAzCm5hbWVzcGFjZSBz
dGQKewoKdGVtcGxhdGUgPHR5cGVuYW1lIF9BbGxvYz4KICBjbGFzcyB2ZWN0b3I8Ym9vbCwgX0Fs
bG9jPiA6IHB1YmxpYyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4KICB7CiAgcHVibGljOgogICAgdHlw
ZWRlZiBib29sIHZhbHVlX3R5cGU7CiAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgICB0
eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICB0eXBlZGVmIF9CaXRfcmVmZXJl
bmNlIHJlZmVyZW5jZTsKICAgIHR5cGVkZWYgYm9vbCBjb25zdF9yZWZlcmVuY2U7CiAgICB0eXBl
ZGVmIF9CaXRfcmVmZXJlbmNlKiBwb2ludGVyOwogICAgdHlwZWRlZiBjb25zdCBib29sKiBjb25z
dF9wb2ludGVyOwoKICAgIHR5cGVkZWYgX0JpdF9pdGVyYXRvciBpdGVyYXRvcjsKICAgIHR5cGVk
ZWYgX0JpdF9jb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKCiAgICB0eXBlZGVmIHJldmVy
c2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgICB0
eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CgogICAg
dHlwZWRlZiB0eXBlbmFtZSBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46OmFsbG9jYXRvcl90eXBlIGFs
bG9jYXRvcl90eXBlOwogICAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsK
ICAgICAgcmV0dXJuIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6Z2V0X2FsbG9jYXRvcigpOwogICAg
fQoKICBwcm90ZWN0ZWQ6CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX2JpdF9h
bGxvYzsKICAgIHVzaW5nIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6X01fZGVhbGxvY2F0ZTsKICAg
IHVzaW5nIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6X01fc3RhcnQ7CiAgICB1c2luZyBfQnZlY3Rv
cl9iYXNlPF9BbGxvYz46Ol9NX2ZpbmlzaDsKICAgIHVzaW5nIF9CdmVjdG9yX2Jhc2U8X0FsbG9j
Pjo6X01fZW5kX29mX3N0b3JhZ2U7CgogIHByb3RlY3RlZDoKICAgIHZvaWQgX01faW5pdGlhbGl6
ZShzaXplX3R5cGUgX19uKSB7CiAgICAgIHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9j
KF9fbik7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbiArIF9fV09SRF9CSVQg
LSAxKS9fX1dPUkRfQklUOwogICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAg
IF9NX2ZpbmlzaCA9IF9NX3N0YXJ0ICsgZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICB9CiAgICB2
b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgYm9vbCBfX3gpIHsKICAgICAg
aWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICAgICAgY29weV9i
YWNrd2FyZChfX3Bvc2l0aW9uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCArIDEpOwogICAgICAgICpf
X3Bvc2l0aW9uID0gX194OwogICAgICAgICsrX01fZmluaXNoOwogICAgICB9CiAgICAgIGVsc2Ug
ewogICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKSA/IDIgKiBzaXplKCkgOiBfX1dPUkRf
QklUOwogICAgICAgIHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAg
ICAgICBpdGVyYXRvciBfX2kgPSBjb3B5KGJlZ2luKCksIF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9f
cSwgMCkpOwogICAgICAgICpfX2krKyA9IF9feDsKICAgICAgICBfTV9maW5pc2ggPSBjb3B5KF9f
cG9zaXRpb24sIGVuZCgpLCBfX2kpOwogICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAgICBf
TV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRf
QklUOwogICAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgfQogICAgfQoK
ICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5pdGlhbGl6
ZV9yYW5nZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIF9N
X3N0YXJ0ID0gaXRlcmF0b3IoKTsKICAgICAgX01fZmluaXNoID0gaXRlcmF0b3IoKTsKICAgICAg
X01fZW5kX29mX3N0b3JhZ2UgPSAwOwogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyAr
K19fZmlyc3QpCiAgICAgICAgcHVzaF9iYWNrKCpfX2ZpcnN0KTsKICAgIH0KCiAgICB0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5pdGlhbGl6ZV9yYW5nZShf
Rm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIHNpemVf
dHlwZSBfX24gPSAwOwogICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbik7CiAgICAg
IF9NX2luaXRpYWxpemUoX19uKTsKICAgICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9NX3N0YXJ0
KTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9N
X2luc2VydF9yYW5nZShpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgIF9J
bnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogICAgICBmb3IgKCA7IF9fZmlyc3Qg
IT0gX19sYXN0OyArK19fZmlyc3QpIHsKICAgICAgICBfX3BvcyA9IGluc2VydChfX3BvcywgKl9f
Zmlyc3QpOwogICAgICAgICsrX19wb3M7CiAgICAgIH0KICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5zZXJ0X3JhbmdlKGl0ZXJhdG9yIF9f
cG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmly
c3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgZm9y
d2FyZF9pdGVyYXRvcl90YWcpIHsKICAgICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAg
ICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgICAgICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBf
X24pOwogICAgICAgIGlmIChjYXBhY2l0eSgpIC0gc2l6ZSgpID49IF9fbikgewogICAgICAgICAg
Y29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBlbmQoKSwgX01fZmluaXNoICsgZGlmZmVyZW5jZV90
eXBlKF9fbikpOwogICAgICAgICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcG9zaXRpb24pOwog
ICAgICAgICAgX01fZmluaXNoICs9IGRpZmZlcmVuY2VfdHlwZShfX24pOwogICAgICAgIH0KICAg
ICAgICBlbHNlIHsKICAgICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKSArIG1heChzaXpl
KCksIF9fbik7CiAgICAgICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX2xl
bik7CiAgICAgICAgICBpdGVyYXRvciBfX2kgPSBjb3B5KGJlZ2luKCksIF9fcG9zaXRpb24sIGl0
ZXJhdG9yKF9fcSwgMCkpOwogICAgICAgICAgX19pID0gY29weShfX2ZpcnN0LCBfX2xhc3QsIF9f
aSk7CiAgICAgICAgICBfTV9maW5pc2ggPSBjb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX2kpOwog
ICAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBf
X3EgKyAoX19sZW4gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsKICAgICAgICAgIF9NX3N0
YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgcHVibGlj
OgogICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBfTV9zdGFydDsgfQogICAgY29uc3RfaXRl
cmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV9zdGFydDsgfQogICAgaXRlcmF0b3IgZW5k
KCkgeyByZXR1cm4gX01fZmluaXNoOyB9CiAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7
IHJldHVybiBfTV9maW5pc2g7IH0KCiAgICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIHsgcmV0
dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CiAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9y
IHJiZWdpbigpIGNvbnN0IHsKICAgICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5k
KCkpOwogICAgfQogICAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1cm4gcmV2ZXJzZV9p
dGVyYXRvcihiZWdpbigpKTsgfQogICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29u
c3QgewogICAgICByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsKICAgIH0K
CiAgICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfdHlwZShlbmQoKSAtIGJl
Z2luKCkpOyB9CiAgICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5
cGUoLTEpOyB9CiAgICBzaXplX3R5cGUgY2FwYWNpdHkoKSBjb25zdCB7CiAgICAgIHJldHVybiBz
aXplX3R5cGUoY29uc3RfaXRlcmF0b3IoX01fZW5kX29mX3N0b3JhZ2UsIDApIC0gYmVnaW4oKSk7
CiAgICB9CiAgICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gYmVnaW4oKSA9PSBlbmQoKTsg
fQoKICAgIHJlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pCiAgICAgIHsgcmV0dXJu
ICooYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsgfQogICAgY29uc3RfcmVmZXJlbmNl
IG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4gKihiZWdpbigp
ICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOyB9CgogICAgdm9pZCBfTV9yYW5nZV9jaGVjayhzaXpl
X3R5cGUgX19uKSBjb25zdCB7CiAgICAgIGlmIChfX24gPj0gdGhpcy0+c2l6ZSgpKQogICAgICAg
IF9fdGhyb3dfcmFuZ2VfZXJyb3IoInZlY3Rvcjxib29sPiIpOwogICAgfQoKICAgIHJlZmVyZW5j
ZSBhdChzaXplX3R5cGUgX19uKQogICAgICB7IF9NX3JhbmdlX2NoZWNrKF9fbik7IHJldHVybiAo
KnRoaXMpW19fbl07IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBhdChzaXplX3R5cGUgX19uKSBjb25z
dAogICAgICB7IF9NX3JhbmdlX2NoZWNrKF9fbik7IHJldHVybiAoKnRoaXMpW19fbl07IH0KCiAg
ICBleHBsaWNpdCB2ZWN0b3IoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90
eXBlKCkpCiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9fYSkge30KCiAgICB2ZWN0b3Io
c2l6ZV90eXBlIF9fbiwgYm9vbCBfX3ZhbHVlLAogICAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRv
cl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICA6IF9CdmVjdG9yX2Jhc2U8X0Fs
bG9jPihfX2EpCiAgICB7CiAgICAgIF9NX2luaXRpYWxpemUoX19uKTsKICAgICAgZmlsbChfTV9z
dGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX192YWx1ZSA/IH4wIDogMCk7CiAgICB9Cgog
ICAgZXhwbGljaXQgdmVjdG9yKHNpemVfdHlwZSBfX24pCiAgICAgIDogX0J2ZWN0b3JfYmFzZTxf
QWxsb2M+KGFsbG9jYXRvcl90eXBlKCkpCiAgICB7CiAgICAgIF9NX2luaXRpYWxpemUoX19uKTsK
ICAgICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgMCk7CiAgICB9Cgog
ICAgdmVjdG9yKGNvbnN0IHZlY3RvciYgX194KSA6IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPihfX3gu
Z2V0X2FsbG9jYXRvcigpKSB7CiAgICAgIF9NX2luaXRpYWxpemUoX194LnNpemUoKSk7CiAgICAg
IGNvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgX01fc3RhcnQpOwogICAgfQoKCgogICAgdGVt
cGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogICAgdm9pZCBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9J
bnRlZ2VyIF9fbiwgX0ludGVnZXIgX194LCBfX3RydWVfdHlwZSkgewogICAgICBfTV9pbml0aWFs
aXplKF9fbik7CiAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIF9f
eCA/IH4wIDogMCk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgog
ICAgdm9pZCBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J
bnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Zh
bHNlX3R5cGUpIHsKICAgICAgX01faW5pdGlhbGl6ZV9yYW5nZShfX2ZpcnN0LCBfX2xhc3QsIF9f
aXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyYXRvcj4KICAgIHZlY3RvcihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0g
YWxsb2NhdG9yX3R5cGUoKSkKICAgICAgOiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oX19hKQogICAg
ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0lu
dGVncmFsIF9JbnRlZ3JhbDsKICAgICAgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfX2ZpcnN0LCBf
X2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAgICB+dmVjdG9yKCkgeyB9CgogICAgdmVjdG9y
JiBvcGVyYXRvcj0oY29uc3QgdmVjdG9yJiBfX3gpIHsKICAgICAgaWYgKCZfX3ggPT0gdGhpcykg
cmV0dXJuICp0aGlzOwogICAgICBpZiAoX194LnNpemUoKSA+IGNhcGFjaXR5KCkpIHsKICAgICAg
ICBfTV9kZWFsbG9jYXRlKCk7CiAgICAgICAgX01faW5pdGlhbGl6ZShfX3guc2l6ZSgpKTsKICAg
ICAgfQogICAgICBjb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCksIGJlZ2luKCkpOwogICAgICBf
TV9maW5pc2ggPSBiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9feC5zaXplKCkpOwogICAgICBy
ZXR1cm4gKnRoaXM7CiAgICB9CgoKCgoKCiAgICB2b2lkIF9NX2ZpbGxfYXNzaWduKHNpemVfdCBf
X24sIGJvb2wgX194KSB7CiAgICAgIGlmIChfX24gPiBzaXplKCkpIHsKICAgICAgICBmaWxsKF9N
X3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+MCA6IDApOwogICAgICAgIGlu
c2VydChlbmQoKSwgX19uIC0gc2l6ZSgpLCBfX3gpOwogICAgICB9CiAgICAgIGVsc2UgewogICAg
ICAgIGVyYXNlKGJlZ2luKCkgKyBfX24sIGVuZCgpKTsKICAgICAgICBmaWxsKF9NX3N0YXJ0Ll9N
X3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+MCA6IDApOwogICAgICB9CiAgICB9CgogICAg
dm9pZCBhc3NpZ24oc2l6ZV90IF9fbiwgYm9vbCBfX3gpIHsgX01fZmlsbF9hc3NpZ24oX19uLCBf
X3gpOyB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBhc3Np
Z24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwg
X0ludGVncmFsOwogICAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX19maXJzdCwgX19sYXN0LCBfSW50
ZWdyYWwoKSk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogICAgdm9pZCBf
TV9hc3NpZ25fZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVlX3R5
cGUpCiAgICAgIHsgX01fZmlsbF9hc3NpZ24oKHNpemVfdCkgX19uLCAoYm9vbCkgX192YWwpOyB9
CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CiAgICB2b2lkIF9NX2Fzc2lnbl9kaXNw
YXRjaChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfX2ZhbHNlX3R5cGUp
CiAgICAgIHsgX01fYXNzaWduX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdv
cnkoX19maXJzdCkpOyB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAg
dm9pZCBfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9y
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICAg
ICAgaXRlcmF0b3IgX19jdXIgPSBiZWdpbigpOwogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s
YXN0ICYmIF9fY3VyICE9IGVuZCgpOyArK19fY3VyLCArK19fZmlyc3QpCiAgICAgICAgKl9fY3Vy
ID0gKl9fZmlyc3Q7CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICBlcmFzZShf
X2N1ciwgZW5kKCkpOwogICAgICBlbHNlCiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX2ZpcnN0LCBf
X2xhc3QpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAg
dm9pZCBfTV9hc3NpZ25fYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVy
YXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcp
IHsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gMDsKICAgICAgZGlzdGFuY2UoX19maXJzdCwgX19s
YXN0LCBfX2xlbik7CiAgICAgIGlmIChfX2xlbiA8IHNpemUoKSkKICAgICAgICBlcmFzZShjb3B5
KF9fZmlyc3QsIF9fbGFzdCwgYmVnaW4oKSksIGVuZCgpKTsKICAgICAgZWxzZSB7CiAgICAgICAg
X0ZvcndhcmRJdGVyYXRvciBfX21pZCA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZCwg
c2l6ZSgpKTsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBiZWdpbigpKTsKICAgICAgICBp
bnNlcnQoZW5kKCksIF9fbWlkLCBfX2xhc3QpOwogICAgICB9CiAgICB9CgogICAgdm9pZCByZXNl
cnZlKHNpemVfdHlwZSBfX24pIHsKICAgICAgaWYgKGNhcGFjaXR5KCkgPCBfX24pIHsKICAgICAg
ICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX24pOwogICAgICAgIF9NX2Zpbmlz
aCA9IGNvcHkoYmVnaW4oKSwgZW5kKCksIGl0ZXJhdG9yKF9fcSwgMCkpOwogICAgICAgIF9NX2Rl
YWxsb2NhdGUoKTsKICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgICAg
X01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19uICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9C
SVQ7CiAgICAgIH0KICAgIH0KCiAgICByZWZlcmVuY2UgZnJvbnQoKSB7IHJldHVybiAqYmVnaW4o
KTsgfQogICAgY29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3QgeyByZXR1cm4gKmJlZ2luKCk7
IH0KICAgIHJlZmVyZW5jZSBiYWNrKCkgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CiAgICBjb25z
dF9yZWZlcmVuY2UgYmFjaygpIGNvbnN0IHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQogICAgdm9p
ZCBwdXNoX2JhY2soYm9vbCBfX3gpIHsKICAgICAgaWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9NX2Vu
ZF9vZl9zdG9yYWdlKQogICAgICAgICpfTV9maW5pc2grKyA9IF9feDsKICAgICAgZWxzZQogICAg
ICAgIF9NX2luc2VydF9hdXgoZW5kKCksIF9feCk7CiAgICB9CiAgICB2b2lkIHN3YXAodmVjdG9y
PGJvb2wsIF9BbGxvYz4mIF9feCkgewogICAgICBzdGQ6OnN3YXAoX01fc3RhcnQsIF9feC5fTV9z
dGFydCk7CiAgICAgIHN0ZDo6c3dhcChfTV9maW5pc2gsIF9feC5fTV9maW5pc2gpOwogICAgICBz
dGQ6OnN3YXAoX01fZW5kX29mX3N0b3JhZ2UsIF9feC5fTV9lbmRfb2Zfc3RvcmFnZSk7CiAgICB9
CiAgICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgYm9vbCBfX3ggPSBib29s
KCkpIHsKICAgICAgZGlmZmVyZW5jZV90eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigpOwog
ICAgICBpZiAoX01fZmluaXNoLl9NX3AgIT0gX01fZW5kX29mX3N0b3JhZ2UgJiYgX19wb3NpdGlv
biA9PSBlbmQoKSkKICAgICAgICAqX01fZmluaXNoKysgPSBfX3g7CiAgICAgIGVsc2UKICAgICAg
ICBfTV9pbnNlcnRfYXV4KF9fcG9zaXRpb24sIF9feCk7CiAgICAgIHJldHVybiBiZWdpbigpICsg
X19uOwogICAgfQoKCgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogICAgdm9pZCBfTV9p
bnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX194
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpIHsKICAgICAgX01fZmls
bF9pbnNlcnQoX19wb3MsIF9fbiwgX194KTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1
dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlw
ZSkgewogICAgICBfTV9pbnNlcnRfcmFuZ2UoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX19pdGVy
YXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXJhdG9yPgogICAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAg
ICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVn
cmFsIF9JbnRlZ3JhbDsKICAgICAgX01faW5zZXJ0X2Rpc3BhdGNoKF9fcG9zaXRpb24sIF9fZmly
c3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgfQoKICAgIHZvaWQgX01fZmlsbF9pbnNlcnQo
aXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwgYm9vbCBfX3gpIHsKICAgICAgaWYg
KF9fbiA9PSAwKSByZXR1cm47CiAgICAgIGlmIChjYXBhY2l0eSgpIC0gc2l6ZSgpID49IF9fbikg
ewogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgZW5kKCksIF9NX2ZpbmlzaCArIGRp
ZmZlcmVuY2VfdHlwZShfX24pKTsKICAgICAgICBmaWxsKF9fcG9zaXRpb24sIF9fcG9zaXRpb24g
KyBkaWZmZXJlbmNlX3R5cGUoX19uKSwgX194KTsKICAgICAgICBfTV9maW5pc2ggKz0gZGlmZmVy
ZW5jZV90eXBlKF9fbik7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgc2l6ZV90eXBlIF9f
bGVuID0gc2l6ZSgpICsgbWF4KHNpemUoKSwgX19uKTsKICAgICAgICB1bnNpZ25lZCBpbnQqIF9f
cSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7CiAgICAgICAgaXRlcmF0b3IgX19pID0gY29weShiZWdp
bigpLCBfX3Bvc2l0aW9uLCBpdGVyYXRvcihfX3EsIDApKTsKICAgICAgICBmaWxsX24oX19pLCBf
X24sIF9feCk7CiAgICAgICAgX01fZmluaXNoID0gY29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19p
ICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOwogICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAg
ICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9fV09SRF9CSVQgLSAxKS9fX1dP
UkRfQklUOwogICAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgfQogICAg
fQoKICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlwZSBfX24sIGJv
b2wgX194KSB7CiAgICAgIF9NX2ZpbGxfaW5zZXJ0KF9fcG9zaXRpb24sIF9fbiwgX194KTsKICAg
IH0KCiAgICB2b2lkIHBvcF9iYWNrKCkgeyAtLV9NX2ZpbmlzaDsgfQogICAgaXRlcmF0b3IgZXJh
c2UoaXRlcmF0b3IgX19wb3NpdGlvbikgewogICAgICBpZiAoX19wb3NpdGlvbiArIDEgIT0gZW5k
KCkpCiAgICAgICAgY29weShfX3Bvc2l0aW9uICsgMSwgZW5kKCksIF9fcG9zaXRpb24pOwogICAg
ICAgIC0tX01fZmluaXNoOwogICAgICByZXR1cm4gX19wb3NpdGlvbjsKICAgIH0KICAgIGl0ZXJh
dG9yIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkgewogICAgICBfTV9m
aW5pc2ggPSBjb3B5KF9fbGFzdCwgZW5kKCksIF9fZmlyc3QpOwogICAgICByZXR1cm4gX19maXJz
dDsKICAgIH0KICAgIHZvaWQgcmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplLCBib29sIF9feCA9
IGJvb2woKSkgewogICAgICBpZiAoX19uZXdfc2l6ZSA8IHNpemUoKSkKICAgICAgICBlcmFzZShi
ZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9fbmV3X3NpemUpLCBlbmQoKSk7CiAgICAgIGVsc2UK
ICAgICAgICBpbnNlcnQoZW5kKCksIF9fbmV3X3NpemUgLSBzaXplKCksIF9feCk7CiAgICB9CiAg
ICB2b2lkIGZsaXAoKSB7CiAgICAgIGZvciAodW5zaWduZWQgaW50KiBfX3AgPSBfTV9zdGFydC5f
TV9wOyBfX3AgIT0gX01fZW5kX29mX3N0b3JhZ2U7ICsrX19wKQogICAgICAgICpfX3AgPSB+Kl9f
cDsKICAgIH0KCiAgICB2b2lkIGNsZWFyKCkgeyBlcmFzZShiZWdpbigpLCBlbmQoKSk7IH0KICB9
OwoKCnR5cGVkZWYgdmVjdG9yPGJvb2wsIGFsbG9jPiBiaXRfdmVjdG9yOwoKfQojIDM5ICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMKIyA0NCAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKCgpuYW1lc3Bh
Y2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBsb2NhbGUKICAgIGxvY2Fs
ZTo6Y29tYmluZShjb25zdCBsb2NhbGUmIF9fb3RoZXIpCiAgICB7CiAgICAgIGxvY2FsZSBfX2Nv
cHkoKnRoaXMpOwogICAgICBfX2NvcHkuX01faW1wbC0+X01fcmVwbGFjZV9mYWNldChfX290aGVy
Ll9NX2ltcGwsICZfRmFjZXQ6OmlkKTsKICAgICAgcmV0dXJuIF9fY29weTsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICBib29sCiAgICBsb2NhbGU6Om9wZXJhdG9yKCkoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPiYgX19zMSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MyKSBjb25zdAogICAgewog
ICAgICB0eXBlZGVmIHN0ZDo6Y29sbGF0ZTxfQ2hhclQ+IF9fY29sbGF0ZV90eXBlOwogICAgICBj
b25zdCBfX2NvbGxhdGVfdHlwZSogX19mY29sbCA9ICZ1c2VfZmFjZXQ8X19jb2xsYXRlX3R5cGU+
KCp0aGlzKTsKICAgICAgcmV0dXJuIChfX2Zjb2xsLT5jb21wYXJlKF9fczEuZGF0YSgpLCBfX3Mx
LmRhdGEoKSArIF9fczEubGVuZ3RoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X3MyLmRhdGEoKSwgX19zMi5kYXRhKCkgKyBfX3MyLmxlbmd0aCgpKSA8IDApOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBjb25zdCBfRmFjZXQmCiAgICB1c2VfZmFjZXQo
Y29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsKICAgICAgdHlwZWRlZiBsb2NhbGU6Ol9JbXBsOjpf
X3ZlY19mYWNldCBfX3ZlY19mYWNldDsKICAgICAgc2l6ZV90IF9faSA9IF9GYWNldDo6aWQuX01f
aW5kZXg7CiAgICAgIF9fdmVjX2ZhY2V0KiBfX2ZhY2V0ID0gX19sb2MuX01faW1wbC0+X01fZmFj
ZXRzOwogICAgICBjb25zdCBsb2NhbGU6OmZhY2V0KiBfX2ZwID0gKCpfX2ZhY2V0KVtfX2ldOwog
ICAgICBpZiAoX19mcCA9PSAwIHx8IF9faSA+PSBfX2ZhY2V0LT5zaXplKCkpCiAgICAgICAgX190
aHJvd19iYWRfY2FzdCgpOwogICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgX0ZhY2V0Jj4o
Kl9fZnApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBib29sCiAgICBo
YXNfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykgdGhyb3coKQogICAgewogICAgICB0eXBlZGVm
IGxvY2FsZTo6X0ltcGw6Ol9fdmVjX2ZhY2V0IF9fdmVjX2ZhY2V0OwogICAgICBzaXplX3QgX19p
ID0gX0ZhY2V0OjppZC5fTV9pbmRleDsKICAgICAgX192ZWNfZmFjZXQqIF9fZmFjZXQgPSBfX2xv
Yy5fTV9pbXBsLT5fTV9mYWNldHM7CiAgICAgIHJldHVybiAoX19pIDwgX19mYWNldC0+c2l6ZSgp
ICYmICgqX19mYWNldClbX19pXSAhPSAwKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0luSXRlciwgdHlwZW5hbWUgX0NoYXJUPgogICAgX0luSXRlcgogICAgX19tYXRjaF9wYXJh
bGxlbChfSW5JdGVyIF9fcywgX0luSXRlciBfX2VuZCwgaW50IF9fbnRhcmdzLAogICAgICAgICAg
ICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJUPiogX190YXJnZXRzLAogICAgICAg
ICAgICAgICAgICAgICBpbnQqIF9fbWF0Y2hlcywgaW50JiBfX3JlbWFpbiwgYm9vbCYgX19lb2Yp
CiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gX19zdHJpbmdfdHlwZTsK
ICAgICAgX19lb2YgPSBmYWxzZTsKICAgICAgZm9yIChpbnQgX190aSA9IDA7IF9fdGkgPCBfX250
YXJnczsgKytfX3RpKQogICAgICAgIF9fbWF0Y2hlc1tfX3RpXSA9IF9fdGk7CiAgICAgIF9fcmVt
YWluID0gX19udGFyZ3M7CiAgICAgIHNpemVfdCBfX3BvcyA9IDA7CiAgICAgIGRvCiAgICAgICAg
ewogICAgICAgICAgaW50IF9fdGkgPSAwOwogICAgICAgICAgd2hpbGUgKF9fdGkgPCBfX3JlbWFp
biAmJiBfX3BvcyA9PSBfX3RhcmdldHNbX19tYXRjaGVzW19fdGldXS5zaXplKCkpCiAgICAgICAg
ICAgICsrX190aTsKICAgICAgICAgIGlmIChfX3RpID09IF9fcmVtYWluKQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgaWYgKF9fcG9zID09IDApIF9fcmVtYWluID0gMDsKICAgICAgICAgICAg
ICByZXR1cm4gX19zOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX19zID09IF9fZW5kKQog
ICAgICAgICAgICBfX2VvZiA9IHRydWU7CiAgICAgICAgICBib29sIF9fbWF0Y2hlZCA9IGZhbHNl
OwogICAgICAgICAgZm9yIChpbnQgX190aTIgPSAwOyBfX3RpMiA8IF9fcmVtYWluOyApCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBfX3N0cmluZ190eXBlJiBfX3RhcmdldCA9IF9f
dGFyZ2V0c1tfX21hdGNoZXNbX190aTJdXTsKICAgICAgICAgICAgICBpZiAoX19wb3MgPCBfX3Rh
cmdldC5zaXplKCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlmIChfX2Vv
ZiB8fCBfX3RhcmdldFtfX3Bvc10gIT0gKl9fcykKICAgICAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgICBfX21hdGNoZXNbX190aTJdID0gX19tYXRjaGVzWy0tX19yZW1haW5d
OwogICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICBfX21hdGNoZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICsrX190aTI7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX21hdGNoZWQp
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICArK19fczsKICAgICAgICAgICAgICArK19fcG9z
OwogICAgICAgICAgICB9CiAgICAgICAgICBmb3IgKGludCBfX3RpMyA9IDA7IF9fdGkzIDwgX19y
ZW1haW47KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9fcG9zID4gX190YXJnZXRz
W19fbWF0Y2hlc1tfX3RpM11dLnNpemUoKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgX19tYXRjaGVzW19fdGkzXSA9IF9fbWF0Y2hlc1stLV9fcmVtYWluXTsKICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgKytfX3Rp
MzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgd2hpbGUgKF9fcmVtYWluKTsKICAgICAg
cmV0dXJuIF9fczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgX0Zvcm1h
dF9jYWNoZTxfQ2hhclQ+OjpfRm9ybWF0X2NhY2hlKCkKICAgIDogX01fdmFsaWQodHJ1ZSksIF9N
X3VzZV9ncm91cGluZyhmYWxzZSkKICAgIHsgfQoKICB0ZW1wbGF0ZTw+CiAgICBfRm9ybWF0X2Nh
Y2hlPGNoYXI+OjpfRm9ybWF0X2NhY2hlKCk7CgogIHRlbXBsYXRlPD4KICAgIF9Gb3JtYXRfY2Fj
aGU8d2NoYXJfdD46Ol9Gb3JtYXRfY2FjaGUoKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
PgogICAgdm9pZAogICAgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+OjpfTV9wb3B1bGF0ZShpb3NfYmFz
ZSYgX19pbykKICAgIHsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MgKCk7CiAgICAg
IG51bXB1bmN0PF9DaGFyVD4gY29uc3QmIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJU
PiA+KF9fbG9jKTsKICAgICAgX01fdHJ1ZW5hbWUgPSBfX25wLnRydWVuYW1lKCk7CiAgICAgIF9N
X2ZhbHNlbmFtZSA9IF9fbnAuZmFsc2VuYW1lKCk7CiAgICAgIF9NX3Rob3VzYW5kc19zZXAgPSBf
X25wLnRob3VzYW5kc19zZXAoKTsKICAgICAgX01fZGVjaW1hbF9wb2ludCA9IF9fbnAuZGVjaW1h
bF9wb2ludCgpOwogICAgICBfTV9ncm91cGluZyA9IF9fbnAuZ3JvdXBpbmcoKTsKICAgICAgX01f
dXNlX2dyb3VwaW5nID0gX01fZ3JvdXBpbmcuc2l6ZSgpICE9IDAgJiYgX01fZ3JvdXBpbmcuZGF0
YSgpWzBdICE9IDA7CiAgICAgIF9NX3ZhbGlkID0gdHJ1ZTsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQ+CiAgICB2b2lkCiAgICBfRm9ybWF0X2NhY2hlPF9DaGFyVD46OgogICAg
X1NfY2FsbGJhY2soaW9zX2Jhc2U6OmV2ZW50IF9fZXYsIGlvc19iYXNlJiBfX2lvcywgaW50IF9f
aXgpIHRocm93KCkKICAgIHsKICAgICAgdm9pZComIF9fcCA9IF9faW9zLnB3b3JkKF9faXgpOwog
ICAgICBzd2l0Y2ggKF9fZXYpCiAgICAgICAgewogICAgICAgIGNhc2UgaW9zX2Jhc2U6OmVyYXNl
X2V2ZW50OgogICAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PF9Gb3JtYXRfY2FjaGU8X0NoYXJU
Pio+KF9fcCk7CiAgICAgICAgICBfX3AgPSAwOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2Fz
ZSBpb3NfYmFzZTo6Y29weWZtdF9ldmVudDoKCiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBf
X3AgPSBuZXcgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+OyB9CiAgICAgICAgICBjYXRjaCguLi4pCiAg
ICAgICAgICAgIHsgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBpb3NfYmFzZTo6aW1i
dWVfZXZlbnQ6CiAgICAgICAgICBzdGF0aWNfY2FzdDxfRm9ybWF0X2NhY2hlPF9DaGFyVD4qPihf
X3ApLT5fTV92YWxpZCA9IGZhbHNlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBfRm9ybWF0X2NhY2hlPF9DaGFyVD4qCiAg
ICBfRm9ybWF0X2NhY2hlPF9DaGFyVD46Ol9TX2dldChpb3NfYmFzZSYgX19pb3MpCiAgICB7CiAg
ICAgIGlmICghX1NfcHdvcmRfaXgpCiAgICAgICAgX1NfcHdvcmRfaXggPSBpb3NfYmFzZTo6eGFs
bG9jKCk7CiAgICAgIHZvaWQqJiBfX3AgPSBfX2lvcy5wd29yZChfU19wd29yZF9peCk7CgoKICAg
ICAgaWYgKF9fcCA9PSAwKQogICAgICAgIHsKICAgICAgICAgIGF1dG9fcHRyPF9Gb3JtYXRfY2Fj
aGU8X0NoYXJUPiA+IF9fYXAobmV3IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPik7CiAgICAgICAgICBf
X2lvcy5yZWdpc3Rlcl9jYWxsYmFjaygmX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+OjpfU19jYWxsYmFj
aywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TX3B3b3JkX2l4KTsKICAgICAg
ICAgIF9fcCA9IF9fYXAucmVsZWFzZSgpOwogICAgICAgIH0KICAgICAgX0Zvcm1hdF9jYWNoZTxf
Q2hhclQ+KiBfX25jcCA9IHN0YXRpY19jYXN0PF9Gb3JtYXRfY2FjaGU8X0NoYXJUPio+KF9fcCk7
CiAgICAgIGlmICghX19uY3AtPl9NX3ZhbGlkKQogICAgICAgIF9fbmNwLT5fTV9wb3B1bGF0ZShf
X2lvcyk7CgogICAgICByZXR1cm4gX19uY3A7CiAgICB9CiMgMjUwICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICB2b2lkCiAgICBudW1fZ2V0PF9DaGFyVCwgX0lu
SXRlcj46OgogICAgX01fZXh0cmFjdChfSW5JdGVyICwgX0luSXRlciAsIGlvc19iYXNlJiAsCiAg
ICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiAsIGNoYXIqICwKICAgICAgICAgICAgICAg
aW50JiAsIGJvb2wgKSBjb25zdAogICAgewoKICAgIH0KCiAgdGVtcGxhdGU8PgogICAgdm9pZAog
ICAgbnVtX2dldDxjaGFyLCBpc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+ID46OgogICAgX01fZXh0
cmFjdChpc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+IF9fYmVnLAogICAgICAgICAgICAgICBpc3Ry
ZWFtYnVmX2l0ZXJhdG9yPGNoYXI+IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAg
ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBjaGFyKiBfX3h0cmMsIGludCYgX19iYXNlLAog
ICAgICAgICAgICAgICBib29sIF9fZnApIGNvbnN0OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBf
SW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlv
c19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgYm9vbCYg
X192KSBjb25zdAogICAgewoKICAgICAgaWYgKCEoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmJv
b2xhbHBoYSkpCiAgICAgICAgewoKCgoKCgogICAgICAgICAgY2hhciBfX3h0cmNbMzJdID0geydc
MCd9OwogICAgICAgICAgaW50IF9fYmFzZTsKICAgICAgICAgIF9NX2V4dHJhY3QoX19iZWcsIF9f
ZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UsIGZhbHNlKTsKCgogICAgICAgICAgY2hh
ciogX19zYW5pdHk7CiAgICAgICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMDsKICAgICAg
ICAgIGxvbmcgX19sID0gc3RydG9sKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jhc2UpOwogICAgICAg
ICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICAgICAmJiBfX2wg
PD0gMQogICAgICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0g
J1wwJyAmJiAoKl9fZXJybm9fbG9jYXRpb24gKCkpID09IDApCiAgICAgICAgICAgIF9fdiA9IF9f
bDsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7
CiAgICAgICAgfQoKCiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIF9Gb3Jt
YXRfY2FjaGU8Y2hhcl90eXBlPiBfX2ZjYWNoZV90eXBlOwogICAgICAgICAgX19mY2FjaGVfdHlw
ZSogX19mbXQgPSBfX2ZjYWNoZV90eXBlOjpfU19nZXQoX19pbyk7CiAgICAgICAgICBjb25zdCBj
aGFyX3R5cGUqIF9fdHJ1ZSA9IF9fZm10LT5fTV90cnVlbmFtZS5jX3N0cigpOwogICAgICAgICAg
Y29uc3QgY2hhcl90eXBlKiBfX2ZhbHNlID0gX19mbXQtPl9NX2ZhbHNlbmFtZS5jX3N0cigpOwog
ICAgICAgICAgY29uc3Qgc2l6ZV90IF9fdHJ1ZWxlbiA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChf
X3RydWUpIC0gMTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2ZhbHNlbGVuID0gX190cmFpdHNf
dHlwZTo6bGVuZ3RoKF9fZmFsc2UpIC0gMTsKCiAgICAgICAgICBmb3IgKHNpemVfdCBfX3BvcyA9
IDA7IF9fYmVnICE9IF9fZW5kOyArK19fcG9zKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
Y2hhcl90eXBlIF9fYyA9ICpfX2JlZysrOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZiA9IF9f
YyA9PSBfX2ZhbHNlW19fcG9zXTsKICAgICAgICAgICAgICBib29sIF9fdGVzdHQgPSBfX2MgPT0g
X190cnVlW19fcG9zXTsKICAgICAgICAgICAgICBpZiAoIShfX3Rlc3RmIHx8IF9fdGVzdHQpKQog
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFp
bGJpdDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgZWxzZSBpZiAoX190ZXN0ZiAmJiBfX3BvcyA9PSBfX2ZhbHNlbGVuKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICBfX3YgPSAwOwogICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlIGlmIChfX3Rlc3R0ICYmIF9f
cG9zID09IF9fdHJ1ZWxlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX192
ID0gMTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgIH0KICAgICAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAgICAgICAgX19lcnIgfD0g
aW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgICB9CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRl
cgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19i
ZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6
Omlvc3RhdGUmIF9fZXJyLCBzaG9ydCYgX192KSBjb25zdAogICAgewoKCgogICAgICBjaGFyIF9f
eHRyY1szMl09IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX01fZXh0cmFjdChfX2Jl
ZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgZmFsc2UpOwoKCiAgICAgIGNo
YXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMDsKICAgICAgbG9u
ZyBfX2wgPSBzdHJ0b2woX194dHJjLCAmX19zYW5pdHksIF9fYmFzZSk7CiAgICAgIGlmICghKF9f
ZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMg
JiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9PSAwCiAgICAg
ICAgICAmJiBfX2wgPj0gKC0zMjc2Ny0xKSAmJiBfX2wgPD0gMzI3NjcpCiAgICAgICAgX192ID0g
c3RhdGljX2Nhc3Q8c2hvcnQ+KF9fbCk7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3Nf
YmFzZTo6ZmFpbGJpdDsKCiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxf
Q2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBf
X2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy
LCBpbnQmIF9fdikgY29uc3QKICAgIHsKCgoKICAgICAgY2hhciBfX3h0cmNbMzJdID0geydcMCd9
OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywg
X19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7CgoKICAgICAgY2hhciogX19zYW5pdHk7CiAg
ICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwogICAgICBsb25nIF9fbCA9IHN0cnRvbChf
X3h0cmMsICZfX3Nhbml0eSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6
ZmFpbGJpdCkKICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0g
J1wwJyAmJiAoKl9fZXJybm9fbG9jYXRpb24gKCkpID09IDAKICAgICAgICAgICYmIF9fbCA+PSAo
LTIxNDc0ODM2NDcgLTEpICYmIF9fbCA8PSAyMTQ3NDgzNjQ3KQogICAgICAgIF9fdiA9IHN0YXRp
Y19jYXN0PGludD4oX19sKTsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpm
YWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQs
IF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwg
aW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25n
JiBfX3YpIGNvbnN0CiAgICB7CgoKCiAgICAgIGNoYXIgX194dHJjWzMyXT0geydcMCd9OwogICAg
ICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIs
IF9feHRyYywgX19iYXNlLCBmYWxzZSk7CgoKICAgICAgY2hhciogX19zYW5pdHk7CiAgICAgICgq
X19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwogICAgICBsb25nIF9fbCA9IHN0cnRvbChfX3h0cmMs
ICZfX3Nhbml0eSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJp
dCkKICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAm
JiAoKl9fZXJybm9fbG9jYXRpb24gKCkpID09IDApCiAgICAgICAgX192ID0gX19sOwogICAgICBl
bHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19i
ZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+
CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0
ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAg
ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgbG9uZyYgX192KSBjb25zdAogICAgewoK
CgogICAgICBjaGFyIF9feHRyY1szMl09IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsKICAgICAg
X01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgZmFs
c2UpOwoKCiAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkp
ID0gMDsKICAgICAgbG9uZyBsb25nIF9fbGwgPSBzdHJ0b2xsKF9feHRyYywgJl9fc2FuaXR5LCBf
X2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAg
JiYgX19zYW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0eSA9PSAnXDAnICYmICgqX19lcnJub19s
b2NhdGlvbiAoKSkgPT0gMCkKICAgICAgICBfX3YgPSBfX2xsOwogICAgICBlbHNlCiAgICAgICAg
X19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVy
CiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2Jl
ZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6
aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIHNob3J0JiBfX3YpIGNvbnN0CiAgICB7CgoKCiAgICAg
IGNoYXIgX194dHJjWzMyXT0geydcMCd9OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRy
YWN0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7CgoK
ICAgICAgY2hhciogX19zYW5pdHk7CiAgICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwog
ICAgICB1bnNpZ25lZCBsb25nIF9fdWwgPSBzdHJ0b3VsKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jh
c2UpOwogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYg
X19zYW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0eSA9PSAnXDAnICYmICgqX19lcnJub19sb2Nh
dGlvbiAoKSkgPT0gMAogICAgICAgICAgJiYgX191bCA8PSA2NTUzNSkKICAgICAgICBfX3YgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX191bCk7CiAgICAgIGVsc2UKICAgICAgICBfX2Vy
ciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAg
bnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0
ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
dGUmIF9fZXJyLCB1bnNpZ25lZCBpbnQmIF9fdikgY29uc3QKICAgIHsKCgoKICAgICAgY2hhciBf
X3h0cmNbMzJdPSB7J1wwJ307CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9NX2V4dHJhY3QoX19i
ZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UsIGZhbHNlKTsKCgogICAgICBj
aGFyKiBfX3Nhbml0eTsKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CiAgICAgIHVu
c2lnbmVkIGxvbmcgX191bCA9IHN0cnRvdWwoX194dHJjLCAmX19zYW5pdHksIF9fYmFzZSk7CiAg
ICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAmJiBfX3Nhbml0
eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vycm5vX2xvY2F0aW9uICgp
KSA9PSAwCiAgICAgICAgICAmJiBfX3VsIDw9ICgyMTQ3NDgzNjQ3ICogMlUgKyAxKSkKICAgICAg
ICBfX3YgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KF9fdWwpOwogICAgICBlbHNlCiAgICAg
ICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0
ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9f
YmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNl
Ojppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyYgX192KSBjb25zdAogICAgewoKCgogICAg
ICBjaGFyIF9feHRyY1szMl0gPSB7J1wwJ307CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9NX2V4
dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UsIGZhbHNlKTsK
CgogICAgICBjaGFyKiBfX3Nhbml0eTsKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7
CiAgICAgIHVuc2lnbmVkIGxvbmcgX191bCA9IHN0cnRvdWwoX194dHJjLCAmX19zYW5pdHksIF9f
YmFzZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAm
JiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vycm5vX2xv
Y2F0aW9uICgpKSA9PSAwKQogICAgICAgIF9fdiA9IF9fdWw7CiAgICAgIGVsc2UKICAgICAgICBf
X2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIK
ICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVn
LCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjpp
b3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyBsb25nJiBfX3YpIGNvbnN0CiAgICB7CgoKCiAg
ICAgIGNoYXIgX194dHJjWzMyXT0geydcMCd9OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9l
eHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7
CgoKICAgICAgY2hhciogX19zYW5pdHk7CiAgICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAw
OwogICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX191bGwgPSBzdHJ0b3VsbChfX3h0cmMsICZfX3Nh
bml0eSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAg
ICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKl9f
ZXJybm9fbG9jYXRpb24gKCkpID09IDApCiAgICAgICAgX192ID0gX191bGw7CiAgICAgIGVsc2UK
ICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAgICAgIHJldHVybiBfX2JlZzsK
ICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAg
IF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90
eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlJiBfX2VyciwgZmxvYXQmIF9fdikgY29uc3QKICAgIHsKCgoKICAgICAg
Y2hhciBfX3h0cmNbMzJdPSB7J1wwJ307CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9NX2V4dHJh
Y3QoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UsIHRydWUpOwoKCiAg
ICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMDsKCiAg
ICAgIGZsb2F0IF9fZiA9IHN0cnRvZihfX3h0cmMsICZfX3Nhbml0eSk7CgoKCiAgICAgIGlmICgh
KF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAmJiBfX3Nhbml0eSAhPSBfX3h0
cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9PSAwKQog
ICAgICAgIF9fdiA9IF9fZjsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpm
YWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwg
X0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBp
b3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGRvdWJs
ZSYgX192KSBjb25zdAogICAgewoKCgogICAgICBjaGFyIF9feHRyY1szMl09IHsnXDAnfTsKICAg
ICAgaW50IF9fYmFzZTsKICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJy
LCBfX3h0cmMsIF9fYmFzZSwgdHJ1ZSk7CgoKICAgICAgY2hhciogX19zYW5pdHk7CiAgICAgICgq
X19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwogICAgICBkb3VibGUgX19kID0gc3RydG9kKF9feHRy
YywgJl9fc2FuaXR5KTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAg
ICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKl9f
ZXJybm9fbG9jYXRpb24gKCkpID09IDApCiAgICAgICAgX192ID0gX19kOwogICAgICBlbHNlCiAg
ICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAg
ICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBf
SW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlw
ZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3Nf
YmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3YpIGNvbnN0CiAgICB7CgoKCiAg
ICAgIGNoYXIgX194dHJjWzMyXT0geydcMCd9OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9l
eHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCB0cnVlKTsK
CgogICAgICBjaGFyKiBfX3Nhbml0eTsKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7
CiAgICAgIGxvbmcgZG91YmxlIF9fbGQgPSBzdHJ0b2xkKF9feHRyYywgJl9fc2FuaXR5KTsKICAg
ICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICYmIF9fc2FuaXR5
ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKl9fZXJybm9fbG9jYXRpb24gKCkp
ID09IDApCiAgICAgICAgX192ID0gX19sZDsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlv
c19iYXNlOjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQojIDY3OCAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dl
dDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlw
ZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f
ZXJyLCB2b2lkKiYgX192KSBjb25zdAogICAgewoKICAgICAgdHlwZWRlZiBpb3NfYmFzZTo6Zm10
ZmxhZ3MgZm10ZmxhZ3M7CiAgICAgIGZtdGZsYWdzIF9fZm10ID0gX19pby5mbGFncygpOwogICAg
ICBmbXRmbGFncyBfX2ZtdG1hc2sgPSB+KGlvc19iYXNlOjpzaG93cG9zIHwgaW9zX2Jhc2U6OmJh
c2VmaWVsZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW9zX2Jhc2U6OnVwcGVyY2Fz
ZSB8IGlvc19iYXNlOjppbnRlcm5hbCk7CiAgICAgIF9faW8uZmxhZ3MoX19mbXQgJiBfX2ZtdG1h
c2sgfCAoaW9zX2Jhc2U6OmhleCB8IGlvc19iYXNlOjpzaG93YmFzZSkpOwoKCgoKICAgICAgY2hh
ciBfX3h0cmNbMzJdPSB7J1wwJ307CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9NX2V4dHJhY3Qo
X19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UsIGZhbHNlKTsKCgogICAg
ICBjaGFyKiBfX3Nhbml0eTsKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CiAgICAg
IHZvaWQqIF9fdnAgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzdHJ0b3VsKF9feHRyYywgJl9f
c2FuaXR5LCBfX2Jhc2UpKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkK
ICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAo
Kl9fZXJybm9fbG9jYXRpb24gKCkpID09IDApCiAgICAgICAgX192ID0gX192cDsKICAgICAgZWxz
ZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKCiAgICAgIF9faW8uZmxhZ3Mo
X19mbXQpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGlubGluZSBfT3V0SXRlcgogICAgX19wYWQo
X091dEl0ZXIgX19zLCBfQ2hhclQgX19maWxsLCBpbnQgX19wYWRkaW5nKTsKCiAgdGVtcGxhdGUg
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1JhSXRlcj4KICAgIF9SYUl0ZXIKICAgIF9fcGFk
KF9SYUl0ZXIgX19zLCBfQ2hhclQgX19maWxsLCBpbnQgX19wYWRkaW5nLAogICAgICAgICAgcmFu
ZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGZpbGxfbihfX3MsIF9fZmlsbCk7
CiAgICAgIHJldHVybiBfX3MgKyBfX3BhZGRpbmc7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyLCB0eXBlbmFtZSBfVGFnPgogICAgX091dEl0ZXIK
ICAgIF9fcGFkKF9PdXRJdGVyIF9fcywgX0NoYXJUIF9fZmlsbCwgaW50IF9fcGFkZGluZywgX1Rh
ZykKICAgIHsKICAgICAgd2hpbGUgKC0tX19wYWRkaW5nID49IDApIHsgKl9fcyA9IF9fZmlsbDsg
KytfX3M7IH0KICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBpbmxpbmUgX091dEl0ZXIKICAgIF9fcGFkKF9P
dXRJdGVyIF9fcywgX0NoYXJUIF9fZmlsbCwgaW50IF9fcGFkZGluZykKICAgIHsKICAgICAgcmV0
dXJuIF9fcGFkKF9fcywgX19maWxsLCBfX3BhZGRpbmcsCiAgICAgICAgICAgICAgICAgICB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X091dEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSgpKTsKICAg
IH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBf
T3V0SXRlcgogICAgX19wYWRfbnVtZXJpYyhfT3V0SXRlciBfX3MsIGlvc19iYXNlOjpmbXRmbGFn
cyAsCiAgICAgICAgICAgICAgICAgIF9DaGFyVCAsIGludCAsCiAgICAgICAgICAgICAgICAgIF9D
aGFyVCBjb25zdCogLCBfQ2hhclQgY29uc3QqICwKICAgICAgICAgICAgICAgICAgX0NoYXJUIGNv
bnN0KiApCiAgewoKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgogIHRlbXBsYXRlIDx0eXBlbmFt
ZSBfQ2hhclQ+CiAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4KICAgIF9fcGFkX251bWVy
aWMob3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+IF9fcywgaW9zX2Jhc2U6OmZtdGZsYWdzIF9f
ZmxhZ3MsCiAgICAgICAgICAgICAgICAgIF9DaGFyVCBfX2ZpbGwsIGludCBfX3dpZHRoLCBfQ2hh
clQgY29uc3QqIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgIF9DaGFyVCBjb25zdCogX19taWRk
bGUsIF9DaGFyVCBjb25zdCogX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIG9zdHJlYW1idWZf
aXRlcmF0b3I8X0NoYXJUPiBfX291dF9pdGVyOwogICAgICBpbnQgX19wYWRkaW5nID0gX193aWR0
aCAtIChfX2xhc3QgLSBfX2ZpcnN0KTsKICAgICAgaWYgKF9fcGFkZGluZyA8IDApCiAgICAgICAg
X19wYWRkaW5nID0gMDsKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fYWZsYWdzID0gX19mbGFn
cyAmIGlvc19iYXNlOjphZGp1c3RmaWVsZDsKICAgICAgYm9vbCBfX3Rlc3RmaWVsZCA9IF9fcGFk
ZGluZyA9PSAwIHx8IF9fYWZsYWdzID09IGlvc19iYXNlOjpsZWZ0CiAgICAgICAgICAgICAgICAg
ICAgICAgICB8fCBfX2FmbGFncyA9PSBpb3NfYmFzZTo6aW50ZXJuYWw7CgoKICAgICAgaWYgKF9f
Zmlyc3QgIT0gX19taWRkbGUpCiAgICAgICAgewogICAgICAgICAgaWYgKCFfX3Rlc3RmaWVsZCkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fcGFkKF9fcywgX19maWxsLCBfX3BhZGRpbmcp
OwogICAgICAgICAgICAgIF9fcGFkZGluZyA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNv
cHkoX19maXJzdCwgX19taWRkbGUsIF9fcyk7CiAgICAgICAgfQogICAgICBfX291dF9pdGVyIF9f
czIgPSBfX3M7CgogICAgICBpZiAoX19wYWRkaW5nICYmIF9fYWZsYWdzICE9IGlvc19iYXNlOjps
ZWZ0KQogICAgICAgIHsKICAgICAgICAgIF9fcGFkKF9fczIsIF9fZmlsbCwgX19wYWRkaW5nKTsK
ICAgICAgICAgIF9fcGFkZGluZyA9IDA7CiAgICAgICAgfQogICAgICBfX291dF9pdGVyIF9fczMg
PSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fczIpOwogICAgICBpZiAoX19wYWRkaW5nKQogICAg
ICAgIF9fcGFkKF9fczMsIF9fZmlsbCwgX19wYWRkaW5nKTsKICAgICAgcmV0dXJuIF9fczM7CiAg
ICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAg
X091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJf
dHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBib29sIF9fdikgY29u
c3QKICAgIHsKICAgICAgY29uc3QgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+KiBfX2ZtdCA9IF9Gb3Jt
YXRfY2FjaGU8X0NoYXJUPjo6X1NfZ2V0KF9faW8pOwogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3Mg
X19mbGFncyA9IF9faW8uZmxhZ3MoKTsKCiAgICAgIGlmICgoX19mbGFncyAmIGlvc19iYXNlOjpi
b29sYWxwaGEpID09IDApCiAgICAgICAgewogICAgICAgICAgdW5zaWduZWQgbG9uZyBfX3V2ID0g
X192OwogICAgICAgICAgcmV0dXJuIF9fb3V0cHV0X2ludGVnZXIoX19zLCBfX2lvLCBfX2ZpbGws
IGZhbHNlLCBfX3V2KTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBj
b25zdCBjaGFyX3R5cGUqIF9fZmlyc3Q7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbGFz
dDsKICAgICAgICAgIGlmIChfX3YpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2ZpcnN0
ID0gX19mbXQtPl9NX3RydWVuYW1lLmRhdGEoKTsKICAgICAgICAgICAgICBfX2xhc3QgPSBfX2Zp
cnN0ICsgX19mbXQtPl9NX3RydWVuYW1lLnNpemUoKTsKICAgICAgICAgICAgfQogICAgICAgICAg
ZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19maXJzdCA9IF9fZm10LT5fTV9mYWxz
ZW5hbWUuZGF0YSgpOwogICAgICAgICAgICAgIF9fbGFzdCA9IF9fZmlyc3QgKyBfX2ZtdC0+X01f
ZmFsc2VuYW1lLnNpemUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgY29weShfX2ZpcnN0LCBf
X2xhc3QsIF9fcyk7CiAgICAgICAgfQogICAgICByZXR1cm4gX19zOwogICAgfQoKCgoKCiAgdGVt
cGxhdGUgPHR5cGVuYW1lIF9DaGFyVD4KICAgIF9DaGFyVCoKICAgIF9fZ3JvdXBfZGlnaXRzKF9D
aGFyVCogX19zLCBfQ2hhclQgX19ncnNlcCwgY2hhciBjb25zdCogX19ncm91cGluZywKICAgICAg
ICAgICAgICAgICAgICBjaGFyIGNvbnN0KiBfX2dyZW5kLCBfQ2hhclQgY29uc3QqIF9fZmlyc3Qs
CiAgICAgICAgICAgICAgICAgICAgX0NoYXJUIGNvbnN0KiBfX2xhc3QpCiAgICB7CiAgICAgIGlm
IChfX2xhc3QgLSBfX2ZpcnN0ID4gKl9fZ3JvdXBpbmcpCiAgICAgICAgewogICAgICAgICAgX19z
ID0gX19ncm91cF9kaWdpdHMoX19zLCBfX2dyc2VwLAogICAgICAgICAgICAgIChfX2dyb3VwaW5n
ICsgMSA9PSBfX2dyZW5kID8gX19ncm91cGluZyA6IF9fZ3JvdXBpbmcgKyAxKSwKICAgICAgICAg
ICAgICBfX2dyZW5kLCBfX2ZpcnN0LCBfX2xhc3QgLSAqX19ncm91cGluZyk7CiAgICAgICAgICBf
X2ZpcnN0ID0gX19sYXN0IC0gKl9fZ3JvdXBpbmc7CiAgICAgICAgICAqX19zKysgPSBfX2dyc2Vw
OwogICAgICAgIH0KICAgICAgZG8KICAgICAgICB7CiAgICAgICAgICAqX19zKysgPSAqX19maXJz
dCsrOwogICAgICAgIH0KICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KTsKICAgICAgcmV0
dXJuIF9fczsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091
dEl0ZXIsIHR5cGVuYW1lIF9WYWx1ZVQ+CiAgICBfT3V0SXRlcgogICAgX19vdXRwdXRfaW50ZWdl
cihfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBib29sIF9fbmVn
LAogICAgICAgICAgICAgIF9WYWx1ZVQgX192KQogICAgewoKICAgICAgY29uc3QgbG9uZyBfTV9y
b29tID0gbnVtZXJpY19saW1pdHM8X1ZhbHVlVD46OmRpZ2l0czEwICogMiArIDQ7CiAgICAgIF9D
aGFyVCBfX2RpZ2l0c1tfTV9yb29tXTsKICAgICAgX0NoYXJUKiBfX2Zyb250ID0gX19kaWdpdHMg
KyBfTV9yb29tOwogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faW8uZmxhZ3Mo
KTsKICAgICAgY29uc3QgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+KiBfX2ZtdCA9IF9Gb3JtYXRfY2Fj
aGU8X0NoYXJUPjo6X1NfZ2V0KF9faW8pOwogICAgICBjaGFyIGNvbnN0KiBfX3RhYmxlID0gX19m
bXQtPl9TX2xpdGVyYWxzICsgX19mbXQtPl9TX2RpZ2l0czsKCiAgICAgIGlvc19iYXNlOjpmbXRm
bGFncyBfX2Jhc2VmaWVsZCA9IChfX2ZsYWdzICYgX19pby5iYXNlZmllbGQpOwogICAgICBfQ2hh
clQqIF9fc2lnbl9lbmQgPSBfX2Zyb250OwogICAgICBpZiAoX19iYXNlZmllbGQgPT0gaW9zX2Jh
c2U6OmhleCkKICAgICAgICB7CiAgICAgICAgICBpZiAoX19mbGFncyAmIGlvc19iYXNlOjp1cHBl
cmNhc2UpCiAgICAgICAgICAgIF9fdGFibGUgKz0gMTY7CiAgICAgICAgICBkbwogICAgICAgICAg
ICAqLS1fX2Zyb250ID0gX190YWJsZVtfX3YgJiAxNV07CiAgICAgICAgICB3aGlsZSAoKF9fdiA+
Pj0gNCkgIT0gMCk7CiAgICAgICAgICBfX3NpZ25fZW5kID0gX19mcm9udDsKICAgICAgICAgIGlm
IChfX2ZsYWdzICYgaW9zX2Jhc2U6OnNob3diYXNlKQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgKi0tX19mcm9udCA9IF9fZm10LT5fU19saXRlcmFsc1tfX2ZtdC0+X1NfeCArCiAgICAgICAg
ICAgICAgICAgICAgICAgKChfX2ZsYWdzICYgaW9zX2Jhc2U6OnVwcGVyY2FzZSkgPyAxIDogMCld
OwogICAgICAgICAgICAgICotLV9fZnJvbnQgPSBfX3RhYmxlWzBdOwogICAgICAgICAgICB9CiAg
ICAgICAgfQogICAgICBlbHNlIGlmIChfX2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6b2N0KQogICAg
ICAgIHsKICAgICAgICAgIGRvCiAgICAgICAgICAgICotLV9fZnJvbnQgPSBfX3RhYmxlW19fdiAm
IDddOwogICAgICAgICAgd2hpbGUgKChfX3YgPj49IDMpICE9IDApOwogICAgICAgICAgaWYgKF9f
ZmxhZ3MgJiBpb3NfYmFzZTo6c2hvd2Jhc2UKICAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxj
aGFyPigqX19mcm9udCkgIT0gX190YWJsZVswXSkKICAgICAgICAgICAgKi0tX19mcm9udCA9IF9f
dGFibGVbMF07CiAgICAgICAgICBfX3NpZ25fZW5kID0gX19mcm9udDsKICAgICAgICB9CiAgICAg
IGVsc2UKICAgICAgICB7CgogICAgICAgICAgZG8KICAgICAgICAgICAgKi0tX19mcm9udCA9IF9f
dGFibGVbX192ICUgMTBdOwogICAgICAgICAgd2hpbGUgKChfX3YgLz0gMTApICE9IDApOwogICAg
ICAgICAgX19zaWduX2VuZCA9IF9fZnJvbnQ7CgogICAgICAgICAgaWYgKF9fbmVnIHx8IChfX2Zs
YWdzICYgaW9zX2Jhc2U6OnNob3dwb3MpKQogICAgICAgICAgICAqLS1fX2Zyb250ID0gX19mbXQt
Pl9TX2xpdGVyYWxzW19fZm10LT5fU19wbHVzIC0gX19uZWddOwogICAgICAgIH0KCgogICAgICBp
ZiAoIV9fZm10LT5fTV91c2VfZ3JvdXBpbmcgJiYgIV9faW8ud2lkdGgoKSkKICAgICAgICByZXR1
cm4gY29weShfX2Zyb250LCBfX2RpZ2l0cyArIF9NX3Jvb20sIF9fcyk7CgogICAgICBpZiAoIV9f
Zm10LT5fTV91c2VfZ3JvdXBpbmcpCiAgICAgICAgcmV0dXJuIF9fcGFkX251bWVyaWMoX19zLCBf
X2ZsYWdzLCBfX2ZpbGwsIF9faW8ud2lkdGgoMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19mcm9udCwgX19zaWduX2VuZCwgX19kaWdpdHMgKyBfTV9yb29tKTsKCiAgICAgIF9DaGFy
VCogX19wID0gX19kaWdpdHM7CiAgICAgIHdoaWxlIChfX2Zyb250IDwgX19zaWduX2VuZCkKICAg
ICAgICAqX19wKysgPSAqX19mcm9udCsrOwogICAgICBjb25zdCBjaGFyKiBfX2dyID0gX19mbXQt
Pl9NX2dyb3VwaW5nLmRhdGEoKTsKICAgICAgX19mcm9udCA9IF9fZ3JvdXBfZGlnaXRzKF9fcCwg
X19mbXQtPl9NX3Rob3VzYW5kc19zZXAsIF9fZ3IsCiAgICAgICAgX19nciArIF9fZm10LT5fTV9n
cm91cGluZy5zaXplKCksIF9fc2lnbl9lbmQsIF9fZGlnaXRzICsgX01fcm9vbSk7CiAgICAgIHJl
dHVybiBfX3BhZF9udW1lcmljKF9fcywgX19mbGFncywgX19maWxsLCBfX2lvLndpZHRoKDApLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RpZ2l0cywgX19wLCBfX2Zyb250KTsKICAgIH0K
CiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0
SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBl
IF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgX192KSBjb25zdAog
ICAgewogICAgICB1bnNpZ25lZCBsb25nIF9fdXYgPSBfX3Y7CiAgICAgIGJvb2wgX19uZWcgPSBm
YWxzZTsKICAgICAgaWYgKF9fdiA8IDApCiAgICAgICAgewogICAgICAgICAgX19uZWcgPSB0cnVl
OwogICAgICAgICAgX191diA9IC1fX3V2OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fb3V0cHV0
X2ludGVnZXIoX19zLCBfX2lvLCBfX2ZpbGwsIF9fbmVnLCBfX3V2KTsKICAgIH0KCiAgdGVtcGxh
dGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAg
bnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9z
X2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgdW5zaWduZWQgbG9uZyBf
X3YpIGNvbnN0CiAgICB7IHJldHVybiBfX291dHB1dF9pbnRlZ2VyKF9fcywgX19pbywgX19maWxs
LCBmYWxzZSwgX192KTsgfQoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAg
ICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fYiwgY2hhcl90eXBlIF9fZmlsbCwg
bG9uZyBsb25nIF9fdikgY29uc3QKICAgIHsKICAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9fdXYg
PSBfX3Y7CiAgICAgIGJvb2wgX19uZWcgPSBmYWxzZTsKICAgICAgaWYgKF9fdiA8IDApCiAgICAg
ICAgewogICAgICAgICAgX19uZWcgPSB0cnVlOwogICAgICAgICAgX191diA9IC1fX3V2OwogICAg
ICAgIH0KICAgICAgcmV0dXJuIF9fb3V0cHV0X2ludGVnZXIoX19zLCBfX2IsIF9fZmlsbCwgX19u
ZWcsIF9fdXYpOwogICAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
T3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAg
IGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwK
ICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX192KSBjb25zdAogICAgeyByZXR1cm4gX19v
dXRwdXRfaW50ZWdlcihfX3MsIF9faW8sIF9fZmlsbCwgZmFsc2UsIF9fdik7IH0KCgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9PdXRJdGVy
PgogICAgX091dEl0ZXIKICAgIF9fb3V0cHV0X2Zsb2F0KF9PdXRJdGVyIF9fcywgaW9zX2Jhc2Um
IF9faW8sIF9DaGFyVCBfX2ZpbGwsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19z
cHRyLCBzaXplX3QgX19zbGVuKQogICAgewoKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIG9zdHJlYW1idWZf
aXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPgogICAgX19vdXRwdXRfZmxvYXQob3N0cmVhbWJ1Zl9p
dGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9fcywgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAg
ICAgICAgICBfQ2hhclQgX19maWxsLCBjb25zdCBjaGFyKiBfX3NwdHIsIHNpemVfdCBfX3NsZW4p
CiAgICB7CiAgICAgIHNpemVfdCBfX3BhZGRpbmcgPSBfX2lvLndpZHRoKCkgPiBzdHJlYW1zaXpl
KF9fc2xlbikgPwogICAgICAgICAgICAgICAgICAgICAgICAgX19pby53aWR0aCgpIC1fX3NsZW4g
OiAwOwogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjdHlwZTxfQ2hh
clQ+IGNvbnN0JiBfX2N0ID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAg
IGlvc19iYXNlOjpmbXRmbGFncyBfX2FkamZpZWxkID0gX19pby5mbGFncygpICYgaW9zX2Jhc2U6
OmFkanVzdGZpZWxkOwogICAgICBjb25zdCBjaGFyKiBjb25zdCBfX2VwdHIgPSBfX3NwdHIgKyBf
X3NsZW47CgogICAgICBpZiAoX19hZGpmaWVsZCA9PSBpb3NfYmFzZTo6aW50ZXJuYWwpCiAgICAg
ICB7CgogICAgICAgICBpZiAoX19zcHRyIDwgX19lcHRyICYmICgqX19zcHRyID09ICcrJyB8fCAq
X19zcHRyID09ICctJykpCiAgICAgICAgICAgewogICAgICAgICAgICAgX19zID0gX19jdC53aWRl
bigqX19zcHRyKTsKICAgICAgICAgICAgICsrX19zOwogICAgICAgICAgICAgKytfX3NwdHI7CiAg
ICAgICAgICAgfQogICAgICAgICBfX3MgPSBfX3BhZChfX3MsIF9fZmlsbCwgX19wYWRkaW5nKTsK
ICAgICAgICAgX19wYWRkaW5nID0gMDsKICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19hZGpmaWVs
ZCAhPSBpb3NfYmFzZTo6bGVmdCkKICAgICAgICB7CiAgICAgICAgICBfX3MgPSBfX3BhZChfX3Ms
IF9fZmlsbCwgX19wYWRkaW5nKTsKICAgICAgICAgIF9fcGFkZGluZyA9IDA7CiAgICAgICAgfQoK
ICAgICAgY2hhciBfX2RlY2ltYWxfcG9pbnQgPSAqKGxvY2FsZWNvbnYoKS0+ZGVjaW1hbF9wb2lu
dCk7CiAgICAgIGNvbnN0IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPiogX19mbXQgPSBfRm9ybWF0X2Nh
Y2hlPF9DaGFyVD46Ol9TX2dldChfX2lvKTsKICAgICAgZm9yICg7IF9fc3B0ciAhPSBfX2VwdHI7
ICsrX19zLCArK19fc3B0cikKICAgICAgIHsKCiAgICAgICAgIGlmICgqX19zcHRyID09IF9fZGVj
aW1hbF9wb2ludCkKICAgICAgICAgICBfX3MgPSBfX2ZtdC0+X01fZGVjaW1hbF9wb2ludDsKCiAg
ICAgICAgIGVsc2UKICAgICAgICAgICBfX3MgPSBfX2N0LndpZGVuKCpfX3NwdHIpOwogICAgICAg
fQoKICAgICAgaWYgKF9fcGFkZGluZykKICAgICAgICBfX3BhZChfX3MsIF9fZmlsbCwgX19wYWRk
aW5nKTsKICAgICAgX19pby53aWR0aCgwKTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgYm9v
bAogIF9fYnVpbGRfZmxvYXRfZm9ybWF0KGlvc19iYXNlJiBfX2lvLCBjaGFyKiBfX2ZwdHIsIGNo
YXIgX19tb2RpZmllciwKICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fcHJlYyk7
CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091
dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlw
ZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBkb3VibGUgX192KSBjb25z
dAogICAgewogICAgICBjb25zdCBzdHJlYW1zaXplIF9fbWF4X3ByZWMgPSBudW1lcmljX2xpbWl0
czxkb3VibGU+OjpkaWdpdHMxMCArIDM7CiAgICAgIHN0cmVhbXNpemUgX19wcmVjID0gX19pby5w
cmVjaXNpb24oKTsKCiAgICAgIGlmIChfX3ByZWMgPiBfX21heF9wcmVjKQogICAgICAgIF9fcHJl
YyA9IF9fbWF4X3ByZWM7CgogICAgICBjaGFyIF9fc2J1ZltfX21heF9wcmVjICogMl07CiAgICAg
IHNpemVfdCBfX3NsZW47CgogICAgICBjaGFyIF9fZmJ1ZlsxNl07CiAgICAgIGlmIChfX2J1aWxk
X2Zsb2F0X2Zvcm1hdChfX2lvLCBfX2ZidWYsIDAsIF9fcHJlYykpCiAgICAgICAgX19zbGVuID0g
c3ByaW50ZihfX3NidWYsIF9fZmJ1ZiwgX19wcmVjLCBfX3YpOwogICAgICBlbHNlCiAgICAgICAg
X19zbGVuID0gc3ByaW50ZihfX3NidWYsIF9fZmJ1ZiwgX192KTsKCiAgICAgIHJldHVybiBfX291
dHB1dF9mbG9hdChfX3MsIF9faW8sIF9fZmlsbCwgX19zYnVmLCBfX3NsZW4pOwogICAgfQoKICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVy
CiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19z
LCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICBsb25nIGRvdWJs
ZSBfX3YpIGNvbnN0CiAgICB7CiAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19tYXhfcHJlYyA9IG51
bWVyaWNfbGltaXRzPGxvbmcgZG91YmxlPjo6ZGlnaXRzMTAgKyAzOwogICAgICBzdHJlYW1zaXpl
IF9fcHJlYyA9IF9faW8ucHJlY2lzaW9uKCk7CgogICAgICBpZiAoX19wcmVjID4gX19tYXhfcHJl
YykKICAgICAgICBfX3ByZWMgPSBfX21heF9wcmVjOwoKICAgICAgY2hhciBfX3NidWZbX19tYXhf
cHJlYyAqIDJdOwogICAgICBzaXplX3QgX19zbGVuOwoKICAgICAgY2hhciBfX2ZidWZbMTZdOwoK
ICAgICAgaWYgKF9fYnVpbGRfZmxvYXRfZm9ybWF0KF9faW8sIF9fZmJ1ZiwgJ0wnLCBfX3ByZWMp
KQogICAgICAgIF9fc2xlbiA9IHNwcmludGYoX19zYnVmLCBfX2ZidWYsIF9fcHJlYywgX192KTsK
ICAgICAgZWxzZQogICAgICAgIF9fc2xlbiA9IHNwcmludGYoX19zYnVmLCBfX2ZidWYsIF9fdik7
CgogICAgICByZXR1cm4gX19vdXRwdXRfZmxvYXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fc2J1Ziwg
X19zbGVuKTsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091
dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBk
b19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAg
ICAgICAgICAgY29uc3Qgdm9pZCogX192KSBjb25zdAogICAgewogICAgICB0eXBlZGVmIGlvc19i
YXNlOjpmbXRmbGFncyBmbXRmbGFnczsKICAgICAgZm10ZmxhZ3MgX19mbXQgPSBfX2lvLmZsYWdz
KCk7CiAgICAgIGZtdGZsYWdzIF9fZm10bWFzayA9IH4oaW9zX2Jhc2U6OnNob3dwb3MgfCBpb3Nf
YmFzZTo6YmFzZWZpZWxkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpb3NfYmFzZTo6
dXBwZXJjYXNlIHwgaW9zX2Jhc2U6OmludGVybmFsKTsKICAgICAgX19pby5mbGFncyhfX2ZtdCAm
IF9fZm10bWFzayB8IChpb3NfYmFzZTo6aGV4IHwgaW9zX2Jhc2U6OnNob3diYXNlKSk7CiAgICAg
IHRyeSB7CiAgICAgICAgX091dEl0ZXIgX19zMiA9IF9fb3V0cHV0X2ludGVnZXIoX19zLCBfX2lv
LCBfX2ZpbGwsIGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRl
cnByZXRfY2FzdDx1bnNpZ25lZCBsb25nPihfX3YpKTsKICAgICAgICBfX2lvLmZsYWdzKF9fZm10
KTsKICAgICAgICByZXR1cm4gX19zMjsKICAgICAgfQogICAgICBjYXRjaCAoLi4uKSB7CiAgICAg
ICAgX19pby5mbGFncyhfX2ZtdCk7CiAgICAgICAgdGhyb3c7CiAgICAgIH0KICAgIH0KCgoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0R1bW15ID0gaW50PgogICAgc3Ry
dWN0IF9XZWVrZGF5bmFtZXM7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9EdW1teT4KICAgIHN0cnVj
dCBfV2Vla2RheW5hbWVzPGNoYXIsIF9EdW1teT4KICAgIHsgc3RhdGljIGNvbnN0IGNoYXIqIGNv
bnN0IF9TX25hbWVzWzE0XTsgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15PgogICAgY29u
c3QgY2hhciogY29uc3QKICAgIF9XZWVrZGF5bmFtZXM8Y2hhciwgX0R1bW15Pjo6X1NfbmFtZXNb
MTRdID0KICAgIHsKICAgICAgIlN1biIsICJTdW5kYXkiLAogICAgICAiTW9uIiwgIk1vbmRheSIs
ICJUdWUiLCAiVHVlc2RheSIsICJXZWQiLCAiV2VkbmVzZGF5IiwKICAgICAgIlRodSIsICJUaHVy
c2RheSIsICJGcmkiLCAiRnJpZGF5IiwgIlNhdCIsICJTYXR1cmRheSIKICAgIH07CiMgMTEzNSAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfRHVtbXkgPSBpbnQ+CiAgICBzdHJ1Y3Qg
X01vbnRobmFtZXM7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9EdW1teT4KICAgIHN0cnVjdCBfTW9u
dGhuYW1lczxjaGFyLF9EdW1teT4KICAgIHsgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IF9TX25h
bWVzWzI0XTsgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15PgogICAgY29uc3QgY2hhciog
Y29uc3QKICAgIF9Nb250aG5hbWVzPGNoYXIsX0R1bW15Pjo6X1NfbmFtZXNbMjRdID0KICAgIHsK
ICAgICAgIkphbiIsICJKYW51YXJ5IiwgIkZlYiIsICJGZWJydWFyeSIsICJNYXIiLCAiTWFyY2gi
LAogICAgICAiQXByIiwgIkFwcmlsIiwgIk1heSIsICJNYXkiLCAiSnVuIiwgIkp1bmUiLAogICAg
ICAiSnVsIiwgIkp1bHkiLCAiQXVnIiwgIkF1Z3VzdCIsICJTZXAiLCAiU2VwdGVtYmVyIiwKICAg
ICAgIk9jdCIsICJPY3RvYmVyIiwgIk5vdiIsICJOb3ZlbWJlciIsICJEZWMiLCAiRGVjZW1iZXIi
CiAgICB9OwojIDExNjggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFj
ZXRzLnRjYyIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4K
ICAgIF9Jbkl0ZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0X3dl
ZWtkYXkoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLAogICAgICAgICAgICAgICAgICAg
aW9zX2Jhc2UmIF9faW8sIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29uc3QK
ICAgIHsKICAgICAgaWYgKCFfTV9kYXluYW1lcykKICAgICAgICB7CiAgICAgICAgICBfTV9kYXlu
YW1lcyA9IG5ldyBiYXNpY19zdHJpbmc8X0NoYXJUPlsxNF07CiAgICAgICAgICBmb3IgKGludCBf
X2kgPSAwOyBfX2kgPCAxNDsgKytfX2kpCiAgICAgICAgICAgIF9NX2RheW5hbWVzW19faV0gPSBf
V2Vla2RheW5hbWVzPF9DaGFyVD46Ol9TX25hbWVzW19faV07CiAgICAgICAgfQogICAgICBib29s
IF9fYXRfZW9mID0gZmFsc2U7CiAgICAgIGludCBfX3JlbWFpbiA9IDA7CiAgICAgIGludCBfX21h
dGNoZXNbMTRdOwogICAgICBpdGVyX3R5cGUgX19vdXQgPSBfX21hdGNoX3BhcmFsbGVsKF9fcywg
X19lbmQsIDE0LCBfTV9kYXluYW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX21hdGNoZXMsIF9fcmVtYWluLCBfX2F0X2VvZik7CiAgICAgIF9fZXJyID0gaW9z
X2Jhc2U6Omlvc3RhdGUoMCk7CiAgICAgIGlmIChfX2F0X2VvZikgX19lcnIgfD0gX19pby5lb2Zi
aXQ7CiAgICAgIGlmIChfX3JlbWFpbiA9PSAxIHx8CiAgICAgICAgICBfX3JlbWFpbiA9PSAyICYm
IChfX21hdGNoZXNbMF0+PjEpID09IChfX21hdGNoZXNbMV0+PjEpKQogICAgICAgIF9fdC0+dG1f
d2RheSA9IChfX21hdGNoZXNbMF0+PjEpOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gX19p
by5mYWlsYml0OwogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIHRpbWVfZ2V0PF9DaGFy
VCwgX0luSXRlcj46OgogICAgZG9fZ2V0X21vbnRobmFtZShpdGVyX3R5cGUgX19zLCBpdGVyX3R5
cGUgX19lbmQsCiAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlJiBfX2lvLCBpb3NfYmFzZTo6
aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0CiAgICB7CiAgICAgIGlmICghX01fbW9udGhu
YW1lcykKICAgICAgICB7CiAgICAgICAgICBfTV9tb250aG5hbWVzID0gbmV3IGJhc2ljX3N0cmlu
ZzxfQ2hhclQ+WzI0XTsKICAgICAgICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IDI0OyArK19f
aSkKICAgICAgICAgICAgX01fbW9udGhuYW1lc1tfX2ldID0gX01vbnRobmFtZXM8X0NoYXJUPjo6
X1NfbmFtZXNbX19pXTsKICAgICAgICB9CiAgICAgIGJvb2wgX19hdF9lb2YgPSBmYWxzZTsKICAg
ICAgaW50IF9fcmVtYWluID0gMDsKICAgICAgaW50IF9fbWF0Y2hlc1syNF07CiAgICAgIGl0ZXJf
dHlwZSBfX291dCA9IF9fbWF0Y2hfcGFyYWxsZWwoIF9fcywgX19lbmQsIDI0LCBfTV9tb250aG5h
bWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21hdGNoZXMs
IF9fcmVtYWluLCBfX2F0X2VvZik7CiAgICAgIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoMCk7
CiAgICAgIGlmIChfX2F0X2VvZikgX19lcnIgfD0gX19pby5lb2ZiaXQ7CiAgICAgIGlmIChfX3Jl
bWFpbiA9PSAxIHx8CiAgICAgICAgICBfX3JlbWFpbiA9PSAyICYmIChfX21hdGNoZXNbMF0+PjEp
ID09IChfX21hdGNoZXNbMV0+PjEpKQogICAgICAgIF9fdC0+dG1fbW9uID0gKF9fbWF0Y2hlc1sw
XT4+MSk7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBfX2lvLmZhaWxiaXQ7CiAgICAgIHJl
dHVybiBfX291dDsKICAgIH0KfQojIDQyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX2xvY2FsZS5oIiAyIDMKIyAzMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2lz
dHJlYW0udGNjIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX29z
dHJlYW0uaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfb3N0
cmVhbS5oIiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgi
IDEgMwojIDQwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX29zdHJlYW0uaCIg
MiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfb3N0cmVhbSA6IHZpcnR1YWwgcHVibGljIGJhc2lj
X2lvczxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgoKICAgICAgdHlwZWRlZiBf
Q2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBl
IGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190
eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwog
ICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19z
dHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVm
IGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+IF9faW9zX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlZGVm
IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1idWZfaXRlcjsK
ICAgICAgdHlwZWRlZiBudW1fcHV0PF9DaGFyVCwgX19vc3RyZWFtYnVmX2l0ZXI+IF9fbnVtcHV0
X3R5cGU7CiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7CgoKICAgICAg
ZXhwbGljaXQKICAgICAgYmFzaWNfb3N0cmVhbShfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKQogICAg
ICB7IHRoaXMtPmluaXQoX19zYik7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX29zdHJl
YW0oKSB7IH0KCgogICAgICBjbGFzcyBzZW50cnk7CiAgICAgIGZyaWVuZCBjbGFzcyBzZW50cnk7
CgoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KF9fb3N0cmVhbV90eXBl
JiAoKl9fcGYpKF9fb3N0cmVhbV90eXBlJikpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAg
IG9wZXJhdG9yPDwoX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikpOwoKICAgICAgX19v
c3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoaW9zX2Jhc2UmICgqX19wZikgKGlvc19iYXNl
JikpOwoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGxvbmcgX19uKTsK
CiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgX19u
KTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGJvb2wgX19uKTsKCiAg
ICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHNob3J0IF9fbikKICAgICAgewog
ICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFz
ZTo6YmFzZWZpZWxkOwogICAgICAgIGlmIChfX2ZtdCAmIGlvc19iYXNlOjpvY3QgfHwgX19mbXQg
JiBpb3NfYmFzZTo6aGV4KQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgbG9uZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChz
dGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX19uKSkpOwogICAgICAgIGVsc2UKICAgICAgICAg
IHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PGxvbmc+KF9fbikpOwogICAgICB9
CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PCh1bnNpZ25lZCBzaG9ydCBf
X24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQg
bG9uZz4oX19uKSk7IH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGlu
dCBfX24pCiAgICAgIHsKICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlzLT5m
bGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgICBpZiAoX19mbXQgJiBpb3NfYmFz
ZTo6b2N0IHx8IF9fZm10ICYgaW9zX2Jhc2U6OmhleCkKICAgICAgICAgIHJldHVybiB0aGlzLT5v
cGVyYXRvcjw8KHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihfX24pKSk7CiAgICAgICAg
ZWxzZQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8bG9uZz4o
X19uKSk7CiAgICAgIH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVu
c2lnbmVkIGludCBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nh
c3Q8dW5zaWduZWQgbG9uZz4oX19uKSk7IH0KCgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAg
b3BlcmF0b3I8PChsb25nIGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBv
cGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyBfX24pOwoKCiAgICAgIF9fb3N0cmVhbV90eXBl
JgogICAgICBvcGVyYXRvcjw8KGRvdWJsZSBfX2YpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAg
ICAgIG9wZXJhdG9yPDwoZmxvYXQgX19mKQogICAgICB7IHJldHVybiB0aGlzLT5vcGVyYXRvcjw8
KHN0YXRpY19jYXN0PGRvdWJsZT4oX19mKSk7IH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAg
ICBvcGVyYXRvcjw8KGxvbmcgZG91YmxlIF9fZik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAg
ICAgb3BlcmF0b3I8PChjb25zdCB2b2lkKiBfX3ApOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAg
ICAgIG9wZXJhdG9yPDwoX19zdHJlYW1idWZfdHlwZSogX19zYik7CgoKICAgICAgX19vc3RyZWFt
X3R5cGUmCiAgICAgIHB1dChjaGFyX3R5cGUgX19jKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgog
ICAgICB3cml0ZShjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwoKICAgICAg
X19vc3RyZWFtX3R5cGUmCiAgICAgIGZsdXNoKCk7CgoKICAgICAgcG9zX3R5cGUKICAgICAgdGVs
bHAoKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBzZWVrcChwb3NfdHlwZSk7CgogICAg
ICBfX29zdHJlYW1fdHlwZSYKICAgICAgc2Vla3Aob2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGly
KTsKCiAgICBwcml2YXRlOgoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj0o
Y29uc3QgX19vc3RyZWFtX3R5cGUmKTsKCiAgICAgIGJhc2ljX29zdHJlYW0oY29uc3QgX19vc3Ry
ZWFtX3R5cGUmKTsKCiAgICB9OwoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2Vu
dHJ5CiAgICB7CgogICAgICBib29sIF9NX29rOwogICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCxf
VHJhaXRzPiYgX01fb3M7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICBzZW50cnko
YmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9fb3MpOwoKICAgICAgfnNlbnRyeSgpCiAg
ICAgIHsKCiAgICAgICAgaWYgKF9NX29zLmZsYWdzKCkgJiBpb3NfYmFzZTo6dW5pdGJ1ZiAmJiAh
dW5jYXVnaHRfZXhjZXB0aW9uKCkpCiAgICAgICAgICB7CgogICAgICAgICAgICBpZiAoX01fb3Mu
cmRidWYoKSAmJiBfTV9vcy5yZGJ1ZigpLT5wdWJzeW5jKCkgPT0gLTEpCiAgICAgICAgICAgICAg
X01fb3Muc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICB9CiAgICAgIH0KCiAg
ICAgIG9wZXJhdG9yIGJvb2woKQogICAgICB7IHJldHVybiBfTV9vazsgfQogICAgfTsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mIF9fb3V0LCBfQ2hhclQgX19jKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog
ICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjaGFy
IF9fYykKICAgIHsgcmV0dXJuIChfX291dCA8PCBfX291dC53aWRlbihfX2MpKTsgfQoKCiAgdGVt
cGxhdGUgPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+Jgog
ICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY2hhciBf
X2MpOwoKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwg
X1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9f
b3V0LCBzaWduZWQgY2hhciBfX2MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgc3RhdGljX2Nhc3Q8
Y2hhcj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJl
YW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1Ry
YWl0cz4mIF9fb3V0LCB1bnNpZ25lZCBjaGFyIF9fYykKICAgIHsgcmV0dXJuIChfX291dCA8PCBz
dGF0aWNfY2FzdDxjaGFyPihfX2MpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBv
cGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IF9D
aGFyVCogX19zKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICYKICAgIG9wZXJhdG9yPDwoYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgY2hhciogX19zKTsKCgog
IHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+
JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY29u
c3QgY2hhciogX19zKTsKCgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3Ry
ZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9U
cmFpdHM+JiBfX291dCwgY29uc3Qgc2lnbmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJuIChfX291
dCA8PCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihfX3MpKTsgfQoKICB0ZW1wbGF0ZTxj
bGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiAmCiAgICBvcGVy
YXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCB1bnNpZ25l
ZCBjaGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBjaGFyKj4oX19zKSk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGVuZGwoYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zKQogICAgeyByZXR1cm4gZmx1c2goX19v
cy5wdXQoX19vcy53aWRlbignXG4nKSkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg
IGVuZHMoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zKQogICAgeyByZXR1cm4g
X19vcy5wdXQoX0NoYXJUKCkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGZsdXNo
KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcykKICAgIHsgcmV0dXJuIF9fb3Mu
Zmx1c2goKTsgfQoKfQoKCgoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvb3N0
cmVhbS50Y2MiIDEgMwojIDMyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvb3N0cmVh
bS50Y2MiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xvY2FsZS5o
IiAxIDMKIyAzMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL29zdHJlYW0udGNjIiAy
IDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5OjoKICAg
IHNlbnRyeShiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19vcykKICAgIDogX01fb2so
X19vcy5nb29kKCkpLCBfTV9vcyhfX29zKQogICAgewoKICAgICAgaWYgKF9NX29rICYmIF9fb3Mu
dGllKCkpCiAgICAgICAgX19vcy50aWUoKS0+Zmx1c2goKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJh
dG9yPDwoX19vc3RyZWFtX3R5cGUmICgqX19wZikoX19vc3RyZWFtX3R5cGUmKSkKICAgIHsKICAg
ICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAg
ICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19wZigqdGhpcyk7IH0KICAgICAgICAgIGNhdGNoKGV4
Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRz
dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlv
bnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAg
ICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAg
b3BlcmF0b3I8PChfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSkKICAgIHsKICAgICAg
c2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg
ICAgdHJ5CiAgICAgICAgICAgIHsgX19wZigqdGhpcyk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2Vw
dGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMo
KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg
ICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3Bl
cmF0b3I8PChpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFzZSYpKQogICAgewogICAgICBzZW50cnkg
X19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkK
ICAgICAgICAgICAgeyBfX3BmKCp0aGlzKTsgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBf
X2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i
YXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9z
X2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh
aXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChib29s
IF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIp
CiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAo
X01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1
dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg
fQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAg
ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAg
IGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAg
ICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRo
aXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChsb25nIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9f
Y2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICBjaGFyX3R5cGUgX19jID0gdGhpcy0+ZmlsbCgpOwog
ICAgICAgICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBp
b3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9m
bnVtcHV0KSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgYm9vbCBfX2IgPSBm
YWxzZTsKICAgICAgICAgICAgICAgICAgaWYgKF9fZm10ICYgaW9zX2Jhc2U6Om9jdCB8fCBfX2Zt
dCAmIGlvc19iYXNlOjpoZXgpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgbG9uZyBfX2wgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihfX24p
OwogICAgICAgICAgICAgICAgICAgICAgX19iID0gX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhp
cywgX19jLCBfX2wpLmZhaWxlZCgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhp
cywgKnRoaXMsIF9fYywgX19uKS5mYWlsZWQoKTsKICAgICAgICAgICAgICAgICAgaWYgKF9fYikK
ICAgICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBf
X2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i
YXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9z
X2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh
aXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PCh1bnNp
Z25lZCBsb25nIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlm
IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAo
X01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgp
KQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAg
ICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAg
IHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg
ICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g
MCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBy
ZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwobG9uZyBsb25nIF9fbikKICAgIHsK
ICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewog
ICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjaGFyX3R5cGUgX19jID0g
dGhpcy0+ZmlsbCgpOwogICAgICAgICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRo
aXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICAgICAgICAgIGlmIChfTV9j
aGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgYm9vbCBfX2IgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgaWYgKF9fZm10ICYgaW9zX2Jh
c2U6Om9jdCB8fCBfX2ZtdCAmIGlvc19iYXNlOjpoZXgpCiAgICAgICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9fbDsKICAgICAgICAgICAg
ICAgICAgICAgIF9fbCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oX19uKTsKICAg
ICAgICAgICAgICAgICAgICAgIF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9f
YywgX19sKS5mYWlsZWQoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICAgICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0
aGlzLCBfX2MsIF9fbikuZmFpbGVkKCk7CiAgICAgICAgICAgICAgICAgIGlmIChfX2IpCiAgICAg
ICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWls
KQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6
YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNl
OjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAg
ICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwodW5zaWduZWQg
bG9uZyBsb25nIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlm
IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAo
X01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgp
KQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAg
ICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAg
IHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg
ICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g
MCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBy
ZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoZG91YmxlIF9fbikKICAgIHsKICAg
ICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAg
ICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQo
X01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAq
dGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0
Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMt
PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhj
ZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93
OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6
b3BlcmF0b3I8PChsb25nIGRvdWJsZSBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRo
aXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAg
ICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwg
X19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6
OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWls
KQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6
YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNl
OjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAg
ICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoY29uc3Qgdm9p
ZCogX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2Vy
YikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlm
IChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVt
cHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAg
ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAg
ICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAg
ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg
ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAg
ICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAq
dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JpbikKICAg
IHsKICAgICAgc3RyZWFtc2l6ZSBfX3h0cmN0ID0gMDsKICAgICAgX19zdHJlYW1idWZfdHlwZSog
X19zYm91dCA9IHRoaXMtPnJkYnVmKCk7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAg
ICBpZiAoX19zYmluICYmIF9fY2VyYikKICAgICAgICBfX3h0cmN0ID0gX19jb3B5X3N0cmVhbWJ1
ZnMoKnRoaXMsIF9fc2JpbiwgX19zYm91dCk7CiAgICAgIGlmICghX19zYmluIHx8ICFfX3h0cmN0
KQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJu
ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz46OnB1dChjaGFyX3R5cGUgX19jKQogICAgewogICAgICBzZW50cnkg
X19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBpbnRf
dHlwZSBfX3B1dCA9IHJkYnVmKCktPnNwdXRjKF9fYyk7CiAgICAgICAgICBpZiAoX19wdXQgIT0g
dHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYykpCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz46OndyaXRlKGNvbnN0IF9DaGFyVCogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAg
c2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg
ICAgc3RyZWFtc2l6ZSBfX3B1dCA9IHRoaXMtPnJkYnVmKCktPnNwdXRuKF9fcywgX19uKTsKICAg
ICAgICAgIGlmICggX19wdXQgIT0gX19uKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6YmFkYml0KTsKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpm
bHVzaCgpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJi
KQogICAgICAgIHsKICAgICAgICAgIGlmICh0aGlzLT5yZGJ1ZigpICYmIHRoaXMtPnJkYnVmKCkt
PnB1YnN5bmMoKSA9PSAtMSkKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh
ZGJpdCk7CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPjo6cG9zX3R5cGUKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPjo6dGVsbHAoKQogICAgewogICAgICBwb3NfdHlwZSBfX3JldCA9IHBvc190eXBlKC0x
KTsKICAgICAgYm9vbCBfX3Rlc3RvayA9IHRoaXMtPmZhaWwoKSAhPSB0cnVlOwoKICAgICAgaWYg
KF9fdGVzdG9rKQogICAgICAgIF9fcmV0ID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZigwLCBp
b3NfYmFzZTo6Y3VyLCBpb3NfYmFzZTo6b3V0KTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf
b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+OjpzZWVrcChwb3NfdHlwZSBfX3BvcykKICAgIHsKICAgICAgYm9vbCBfX3Rlc3RvayA9IHRo
aXMtPmZhaWwoKSAhPSB0cnVlOwoKICAgICAgaWYgKF9fdGVzdG9rKQogICAgICAgIHsKCgogICAg
ICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrcG9zKF9fcG9zLCBp
b3NfYmFzZTo6b3V0KTsKCgogICAgICAgICAgaWYgKF9fZXJyID09IHBvc190eXBlKG9mZl90eXBl
KC0xKSkpCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGZhaWxiaXQpOwoKICAgICAgICB9CiAg
ICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNlZWtwKG9mZl90eXBlIF9fb2ZmLCBp
b3NfYmFzZTo6c2Vla2RpciBfX2QpCiAgICB7CiAgICAgIGJvb2wgX190ZXN0b2sgPSB0aGlzLT5m
YWlsKCkgIT0gdHJ1ZTsKCiAgICAgIGlmIChfX3Rlc3RvaykKICAgICAgICB7CgoKICAgICAgICAg
IHBvc190eXBlIF9fZXJyID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZihfX29mZiwgX19kLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19i
YXNlOjpvdXQpOwoKCiAgICAgICAgICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEp
KSkKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoZmFpbGJpdCk7CiAgICAgICAgfQoKICAgICAg
cmV0dXJuICp0aGlzOwogICAgfQojIDQ1NyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz
L29zdHJlYW0udGNjIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgdm9pZAogICAgX19wYWRfY2hhcihiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiYg
X19pb3MsCiAgICAgICAgICAgICAgIF9DaGFyVCogX19uZXdzLCBjb25zdCBfQ2hhclQqIF9fb2xk
cywKICAgICAgICAgICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX25ld2xlbiwgY29uc3Qgc3RyZWFt
c2l6ZSBfX29sZGxlbikKICAgIHsKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAg
ICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJh
aXRzX3R5cGU6OmludF90eXBlIGludF90eXBlOwoKICAgICAgaW50X3R5cGUgX19wbGVuID0gc3Rh
dGljX2Nhc3Q8c2l6ZV90PihfX25ld2xlbiAtIF9fb2xkbGVuKTsKICAgICAgY2hhcl90eXBlKiBf
X3BhZHMgPSBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihj
aGFyX3R5cGUpICogX19wbGVuKSk7CiAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oX19wYWRzLCBf
X3BsZW4sIF9faW9zLmZpbGwoKSk7CgogICAgICBjaGFyX3R5cGUqIF9fYmVnOwogICAgICBjaGFy
X3R5cGUqIF9fZW5kOwogICAgICBzaXplX3QgX19tb2QgPSAwOwogICAgICBzaXplX3QgX19iZWds
ZW47CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IF9faW9zLmZsYWdzKCkgJiBpb3Nf
YmFzZTo6YWRqdXN0ZmllbGQ7CgogICAgICBpZiAoX19mbXQgPT0gaW9zX2Jhc2U6OmxlZnQpCiAg
ICAgICAgewoKICAgICAgICAgIF9fYmVnID0gY29uc3RfY2FzdDxjaGFyX3R5cGUqPihfX29sZHMp
OwogICAgICAgICAgX19iZWdsZW4gPSBfX29sZGxlbjsKICAgICAgICAgIF9fZW5kID0gX19wYWRz
OwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19mbXQgPT0gaW9zX2Jhc2U6OmludGVybmFsKQog
ICAgICAgIHsKCgoKICAgICAgICAgIHR5cGVkZWYgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+IF9fY2Fj
aGVfdHlwZTsKICAgICAgICAgIF9fY2FjaGVfdHlwZSBjb25zdCogX19mbXQgPSBfX2NhY2hlX3R5
cGU6Ol9TX2dldChfX2lvcyk7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbWludXMgPSB0
cmFpdHNfdHlwZTo6ZmluZChfX29sZHMsIF9fb2xkbGVuLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mbXQtPl9TX21pbnVzKTsKICAgICAg
ICAgIGNvbnN0IGNoYXJfdHlwZSogX19wbHVzID0gdHJhaXRzX3R5cGU6OmZpbmQoX19vbGRzLCBf
X29sZGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19mbXQtPl9TX3BsdXMpOwogICAgICAgICAgYm9vbCBfX3Rlc3RzaWduID0gX19taW51
cyB8fCBfX3BsdXM7CiAgICAgICAgICBib29sIF9fdGVzdGhleCA9IF9fb2xkc1swXSA9PSAnMCcK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKF9fb2xkc1sxXSA9PSAneCcgfHwgX19vbGRz
WzFdID09ICdYJyk7CgogICAgICAgICAgaWYgKF9fdGVzdGhleCkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIF9fbmV3c1swXSA9IF9fb2xkc1swXTsKICAgICAgICAgICAgICBfX25ld3NbMV0g
PSBfX29sZHNbMV07CiAgICAgICAgICAgICAgX19tb2QgKz0gMjsKICAgICAgICAgICAgICBfX2Jl
ZyA9IGNvbnN0X2Nhc3Q8Y2hhcl90eXBlKj4oX19vbGRzICsgX19tb2QpOwogICAgICAgICAgICAg
IF9fYmVnbGVuID0gX19vbGRsZW4gLSBfX21vZDsKICAgICAgICAgICAgICBfX2VuZCA9IF9fcGFk
czsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX190ZXN0c2lnbikKICAgICAgICAg
ICAgewogICAgICAgICAgICAgIF9fbW9kICs9IF9fcGxlbjsKICAgICAgICAgICAgICBjb25zdCBj
aGFyX3R5cGUqIF9fc2lnbiA9IF9fbWludXMgPyBfX21pbnVzICsgMTogX19wbHVzICsgMTsKICAg
ICAgICAgICAgICBfX2JlZyA9IGNvbnN0X2Nhc3Q8Y2hhcl90eXBlKj4oX19vbGRzKTsKICAgICAg
ICAgICAgICBfX2JlZ2xlbiA9IF9fc2lnbiAtIF9fb2xkczsKICAgICAgICAgICAgICBfX2VuZCA9
IGNvbnN0X2Nhc3Q8Y2hhcl90eXBlKj4oX19zaWduICsgX19wbGVuKTsKICAgICAgICAgICAgICB0
cmFpdHNfdHlwZTo6Y29weShfX25ld3MgKyBfX2JlZ2xlbiwgX19wYWRzLCBfX3BsZW4pOwogICAg
ICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgX19i
ZWcgPSBfX3BhZHM7CiAgICAgICAgICAgICAgX19iZWdsZW4gPSBfX3BsZW47CiAgICAgICAgICAg
ICAgX19lbmQgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9fb2xkcyk7CiAgICAgICAgICAgIH0K
ICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CgogICAgICAgICAgX19iZWcgPSBfX3BhZHM7
CiAgICAgICAgICBfX2JlZ2xlbiA9IF9fcGxlbjsKICAgICAgICAgIF9fZW5kID0gY29uc3RfY2Fz
dDxjaGFyX3R5cGUqPihfX29sZHMpOwogICAgICAgIH0KCiAgICAgIHRyYWl0c190eXBlOjpjb3B5
KF9fbmV3cywgX19iZWcsIF9fYmVnbGVuKTsKICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19uZXdz
ICsgX19iZWdsZW4sIF9fZW5kLCBfX25ld2xlbiAtIF9fYmVnbGVuIC0gX19tb2QpOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPiYgX19vdXQsIF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFt
ZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIp
CiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJl
YW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICAgICAgX0NoYXJUKiBfX3BhZHMg
PSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICog
X193KSk7CiAgICAgICAgICAgICAgX19wYWRzWzBdID0gX19jOwogICAgICAgICAgICAgIHN0cmVh
bXNpemUgX19sZW4gPSAxOwogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWRfY2hhcihfX291dCwgX19wYWRzLCAmX19j
LCBfX3csIF9fbGVuKTsKICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19wYWRzLCBfX2xlbik7CiAgICAgICAg
ICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2Vw
dGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX291dC5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMo
KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg
ICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQoKCiAgdGVtcGxhdGUg
PGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3Bl
cmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY2hhciBfX2MpCiAg
ICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiBfX29zdHJlYW1f
dHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQp
OwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAg
ICAgIGNoYXIqIF9fcGFkcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9f
dyArIDEpKTsKICAgICAgICAgICAgICBfX3BhZHNbMF0gPSBfX2M7CiAgICAgICAgICAgICAgc3Ry
ZWFtc2l6ZSBfX2xlbiA9IDE7CiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3BhZF9jaGFyKF9fb3V0LCBfX3BhZHMsICZf
X2MsIF9fdywgX19sZW4pOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3BhZHMsIF9fbGVuKTsKICAgICAg
ICAgICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhj
ZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0
YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9u
cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAg
ICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19vdXQ7CiAgICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh
aXRzPiYgX19vdXQsIGNvbnN0IF9DaGFyVCogX19zKQogICAgewogICAgICB0eXBlZGVmIGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUg
X19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiKQog
ICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFt
c2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAgICAgIF9DaGFyVCogX19wYWRzID0g
c3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9f
dykpOwogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1z
aXplPihfVHJhaXRzOjpsZW5ndGgoX19zKSk7CiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVu
KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3BhZF9jaGFyKF9fb3V0LCBf
X3BhZHMsIF9fcywgX193LCBfX2xlbik7CiAgICAgICAgICAgICAgICAgIF9fcyA9IF9fcGFkczsK
ICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgX19vdXQud3JpdGUoX19zLCBfX2xlbik7CiAgICAgICAgICAgICAgX19vdXQud2lkdGgo
MCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAg
ICAgICAgICB7CgoKICAgICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0
KTsKICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRi
aXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0K
ICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBv
cGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNo
YXIqIF9fcykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4gX19vc3RyZWFtX3R5cGU7CgoKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxjaGFyPiBfX2N0
cmFpdHNfdHlwZTsKCiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJi
KF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19j
bGVuID0gX19jdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpOwogICAgICAgICAgX0NoYXJUKiBfX3dz
ID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAq
IChfX2NsZW4gKyAxKSkpOwogICAgICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDw9IF9f
Y2xlbjsgKytfX2kpCiAgICAgICAgICAgIF9fd3NbX19pXSA9IF9fb3V0LndpZGVuKF9fc1tfX2ld
KTsKICAgICAgICAgIF9DaGFyVCogX19zdHIgPSBfX3dzOwoKICAgICAgICAgIHRyeQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0cmVh
bXNpemU+KF9fY2xlbik7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0
aCgpOwogICAgICAgICAgICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4o
X19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fdykpOwoKICAgICAgICAgICAgICBp
ZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fcGFk
X2NoYXIoX19vdXQsIF9fcGFkcywgX193cywgX193LCBfX2xlbik7CiAgICAgICAgICAgICAgICAg
IF9fc3RyID0gX19wYWRzOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3N0ciwgX19sZW4pOwogICAgICAg
ICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNl
cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19vdXQuc2V0c3Rh
dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25z
KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAg
ICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KCgogIHRlbXBsYXRl
PGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3Bl
cmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgY2hhciog
X19zKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4gX19v
c3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJi
KF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAg
ICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAg
ICAgICAgICAgICBjaGFyKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2Fs
bG9jYShfX3cpKTsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGljX2Nhc3Q8
c3RyZWFtc2l6ZT4oX1RyYWl0czo6bGVuZ3RoKF9fcykpOwogICAgICAgICAgICAgIGlmIChfX3cg
PiBfX2xlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWRfY2hhcihf
X291dCwgX19wYWRzLCBfX3MsIF9fdywgX19sZW4pOwogICAgICAgICAgICAgICAgICBfX3MgPSBf
X3BhZHM7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcywgX19sZW4pOwogICAgICAgICAgICAgIF9fb3V0
LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFp
bCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6
OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFz
ZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAg
ICAgICB9CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mIF9fb3V0LAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cikKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0
cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg
ICB7CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcyA9IF9fc3RyLmRhdGEoKTsKICAgICAgICAg
IHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgIF9DaGFyVCogX19wYWRz
ID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAq
IF9fdykpOwogICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0cmVhbXNp
emU+KF9fc3RyLnNpemUoKSk7CgoKCiAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBfX3BhZF9jaGFyKF9fb3V0LCBfX3BhZHMsIF9fcywgX193LCBf
X2xlbik7CiAgICAgICAgICAgICAgX19zID0gX19wYWRzOwogICAgICAgICAgICAgIF9fbGVuID0g
X193OwogICAgICAgICAgICB9CiAgICAgICAgICBzdHJlYW1zaXplIF9fcmVzID0gX19vdXQucmRi
dWYoKS0+c3B1dG4oX19zLCBfX2xlbik7CiAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAgICAg
ICAgIGlmIChfX3JlcyAhPSBfX2xlbikKICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jh
c2U6OmZhaWxiaXQpOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQp9CiMgMjc5
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX29zdHJlYW0uaCIgMiAzCiMgMzQg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9pc3RyZWFtLnRjYyIgMiAzCgpuYW1lc3Bh
Y2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeTo6CiAgICBzZW50cnkoYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBib29sIF9fbm9za2lwd3MpCiAgICB7
CiAgICAgIGlmIChfX2luLmdvb2QoKSkKICAgICAgICB7CiAgICAgICAgICBpZiAoX19pbi50aWUo
KSkKICAgICAgICAgICAgX19pbi50aWUoKS0+Zmx1c2goKTsKICAgICAgICAgIGlmICghX19ub3Nr
aXB3cyAmJiAoX19pbi5mbGFncygpICYgaW9zX2Jhc2U6OnNraXB3cykpCiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBjb25zdCBfX2ludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigp
OwogICAgICAgICAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSogX19jdHlwZSA9IF9faW4uX01fZ2V0
X2ZjdHlwZV9pb3MoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19p
bi5yZGJ1ZigpOwogICAgICAgICAgICAgIF9faW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsK
CiAgICAgICAgICAgICAgd2hpbGUgKF9fYyAhPSBfX2VvZiAmJiBfX2N0eXBlLT5pcyhjdHlwZV9i
YXNlOjpzcGFjZSwgX19jKSkKICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwoK
CgogICAgICAgICAgICAgIGlmIChfX2MgPT0gX19lb2YpCiAgICAgICAgICAgICAgICBfX2luLnNl
dHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwoKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAg
IGlmIChfX2luLmdvb2QoKSkKICAgICAgICBfTV9vayA9IHRydWU7CiAgICAgIGVsc2UKICAgICAg
ICB7CiAgICAgICAgICBfTV9vayA9IGZhbHNlOwogICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3Nf
YmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihfX2lz
dHJlYW1fdHlwZSYgKCpfX3BmKShfX2lzdHJlYW1fdHlwZSYpKQogICAgewogICAgICBfX3BmKCp0
aGlzKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihfX2lv
c190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSkKICAgIHsKICAgICAgX19wZigqdGhpcyk7CiAg
ICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oaW9zX2Jhc2UmICgq
X19wZikoaW9zX2Jhc2UmKSkKICAgIHsKICAgICAgX19wZigqdGhpcyk7CiAgICAgIHJldHVybiAq
dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oYm9vbCYgX19uKQogICAgewogICAgICBz
ZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewog
ICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0
ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAg
ICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9m
bnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0
aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2Vw
dGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMo
KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg
ICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3Bl
cmF0b3I+PihzaG9ydCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxz
ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0
YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQo
X01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0
aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAg
ICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAg
ICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAg
ICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9
IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAg
cmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYg
X19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChf
X2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpn
b29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAg
ICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19u
KTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAg
ICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAo
KHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAg
ICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihpbnQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9f
Y2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAg
IHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIg
PSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYg
KF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+
Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9f
ZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3Nf
YmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0K
ICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4o
dW5zaWduZWQgaW50JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNl
KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3Rh
dGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChf
TV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRo
aXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAg
ICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAg
IHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg
ICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g
MCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBy
ZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGxvbmcmIF9fbikKICAgIHsK
ICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAg
ICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6
Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAg
ICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAg
ICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAg
ICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRj
aChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNl
cHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7
CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoK
ICAgIG9wZXJhdG9yPj4odW5zaWduZWQgbG9uZyYgX19uKQogICAgewogICAgICBzZW50cnkgX19j
ZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAg
dHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9
IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAo
X01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5n
ZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRz
dGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m
YWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
ZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19i
YXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQog
ICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4o
bG9uZyBsb25nJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsK
ICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUo
aW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9m
bnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMs
IF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAg
ICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsK
CgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg
ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkK
ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu
ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nIGxvbmcmIF9f
bikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19j
ZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
aW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29v
ZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAg
ICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7
CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAg
ICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0
aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAg
ICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAg
IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGZsb2F0JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBf
X2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAg
ICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJy
ID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlm
IChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQt
PmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBf
X2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i
YXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9z
X2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+
KGRvdWJsZSYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAg
ICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlv
c19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51
bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBf
X2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAg
ICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK
ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg
ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg
ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu
ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihsb25nIGRvdWJsZSYgX19uKQogICAg
ewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAg
ICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsK
ICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAg
ICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAg
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNh
dGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4
Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJv
dzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46
OgogICAgb3BlcmF0b3I+Pih2b2lkKiYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0
aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19i
YXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hl
Y2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRo
aXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShf
X2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQog
ICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi
YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihfX3N0cmVh
bWJ1Zl90eXBlKiBfX3Nib3V0KQogICAgewogICAgICBzdHJlYW1zaXplIF9feHRyY3QgPSAwOwog
ICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4gPSB0aGlzLT5yZGJ1ZigpOwogICAgICBzZW50
cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX3Nib3V0ICYmIF9fY2VyYikKICAg
ICAgICBfX3h0cmN0ID0gX19jb3B5X3N0cmVhbWJ1ZnMoKnRoaXMsIF9fc2JpbiwgX19zYm91dCk7
CiAgICAgIGlmICghX19zYm91dCB8fCAhX194dHJjdCkKICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
b3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
OjoKICAgIGdldCh2b2lkKQogICAgewogICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0
c190eXBlOjplb2YoKTsKICAgICAgaW50X3R5cGUgX19jID0gX19lb2Y7CiAgICAgIF9NX2djb3Vu
dCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJi
KQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19j
ID0gdGhpcy0+cmRidWYoKS0+c2J1bXBjKCk7CgogICAgICAgICAgICAgIGlmIChfX2MgIT0gX19l
b2YpCiAgICAgICAgICAgICAgICBfTV9nY291bnQgPSAxOwogICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6
ZmFpbGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWls
KQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6
YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNl
OjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAg
ICAgIH0KICAgICAgcmV0dXJuIF9fYzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog
ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdldChjaGFyX3R5cGUmIF9f
YykKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywg
dHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjpl
b2YoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2J1ZnZhbCA9IHRoaXMtPnJkYnVmKCktPnNi
dW1wYygpOwoKICAgICAgICAgICAgICBpZiAoX19idWZ2YWwgIT0gX19lb2YpCiAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgIF9NX2djb3VudCA9IDE7CiAgICAgICAgICAgICAgICAg
IF9fYyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19idWZ2YWwpOwogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
c19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo
aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg
ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz46OgogICAgZ2V0KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBl
IF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIo
KnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiICYmIF9fbiA+IDEpCiAgICAgICAgewogICAg
ICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2lk
ZWxpbSA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2RlbGltKTsKICAgICAgICAgICAgICBj
b25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBf
X3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpbnRf
dHlwZSBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICBib29sIF9fdGVzdGRlbGlt
ID0gX19jID09IF9faWRlbGltOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZW9mID0gX19jID09
IF9fZW9mOwoKICAgICAgICAgICAgICB3aGlsZSAoX01fZ2NvdW50IDwgX19uIC0gMSAmJiAhX190
ZXN0ZW9mICYmICFfX3Rlc3RkZWxpbSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgKl9fcysrID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAg
ICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICAgICAgX19jID0gX19zYi0+c2J1bXBjKCk7
CiAgICAgICAgICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKICAgICAgICAgICAg
ICAgICAgX190ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgaWYgKF9fdGVzdGRlbGltIHx8IF9NX2djb3VudCA9PSBfX24gLSAxKQogICAg
ICAgICAgICAgICAgX19zYi0+c3B1dGJhY2tjKF9fYyk7CiAgICAgICAgICAgICAgaWYgKF9fdGVz
dGVvZikKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwog
ICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAg
ICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAg
ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAh
PSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg
ICpfX3MgPSBjaGFyX3R5cGUoKTsKICAgICAgaWYgKCFfTV9nY291bnQpCiAgICAgICAgdGhpcy0+
c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
Pjo6CiAgICBnZXQoX19zdHJlYW1idWZfdHlwZSYgX19zYiwgY2hhcl90eXBlIF9fZGVsaW0pCiAg
ICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUp
OwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGludF90eXBlIF9fYzsKICAg
ICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fdGhpc19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAg
ICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9faWRl
bGltID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fZGVsaW0pOwogICAgICAgICAgICAgIGNv
bnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9f
YyA9IF9fdGhpc19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3RkZWxpbSA9
IF9fYyA9PSBfX2lkZWxpbTsKICAgICAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IF9fYyA9PSBf
X2VvZjsKICAgICAgICAgICAgICBib29sIF9fdGVzdHB1dCA9IHRydWU7CgogICAgICAgICAgICAg
IHdoaWxlICghX190ZXN0ZW9mICYmICFfX3Rlc3RkZWxpbQogICAgICAgICAgICAgICAgICAgICYm
IChfX3Rlc3RwdXQgPSBfX3NiLnNwdXRjKHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICE9IF9fZW9mKSkKICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fdGhp
c19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2Vv
ZjsKICAgICAgICAgICAgICAgICAgX190ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKF9fdGVzdGRlbGltIHx8ICFfX3Rlc3RwdXQp
CiAgICAgICAgICAgICAgICBfX3RoaXNfc2ItPnNwdXRiYWNrYyh0cmFpdHNfdHlwZTo6dG9fY2hh
cl90eXBlKF9fYykpOwogICAgICAgICAgICAgIGlmIChfX3Rlc3Rlb2YpCiAgICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgfQogICAgICAg
ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAg
X190aGlzX3NiLT5zcHV0YmFja2ModHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpKTsKICAg
ICAgICAgICAgfQogICAgICAgIH0KICAgICAgaWYgKCFfTV9nY291bnQpCiAgICAgICAgdGhpcy0+
c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
Pjo6CiAgICBnZXRsaW5lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBl
IF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIo
KnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMt
PnJkYnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX19zYi0+c2J1bXBjKCk7CiAg
ICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19p
ZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICAgICAg
Y29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAg
Ym9vbCBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsKICAgICAgICAgICAgICBib29sIF9f
dGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKCiAgICAgICAgICAgICAgd2hpbGUgKF9NX2djb3VudCA8
IF9fbiAmJiAhX190ZXN0ZW9mICYmICFfX3Rlc3RkZWxpbSkKICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgKl9fcysrID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwog
ICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICAgICAg
KytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsK
ICAgICAgICAgICAgICAgICAgX190ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07CiAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgIGlmIChfX3Rlc3Rlb2YpCiAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgIC0tX01fZ2NvdW50OwogICAgICAgICAgICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICBlbHNlIGlmICghX190ZXN0ZGVsaW0pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgIC0tX01fZ2NvdW50OwogICAgICAgICAgICAgICAgICBfX3NiLT5zcHV0YmFja2ModHJhaXRz
X3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpKTsKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAg
ICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAg
ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYg
KCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAg
ICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICpfX3MgPSBjaGFyX3R5
cGUoKTsKICAgICAgaWYgKCFfTV9nY291bnQpCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBpZ25vcmUo
c3RyZWFtc2l6ZSBfX24sIGludF90eXBlIF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9
IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiICYm
IF9fbiA+IDApCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBjb25zdCBpbnRfdHlwZSBfX2lkZWxpbSA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShf
X2RlbGltKTsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBl
Ojplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRi
dWYoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAg
ICAgICAgICBib29sIF9fdGVzdGRlbGltID0gX19jID09IF9faWRlbGltOwogICAgICAgICAgICAg
IGJvb2wgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwoKICAgICAgICAgICAgICBfX24gPSBtaW4o
X19uLCBudW1lcmljX2xpbWl0czxzdHJlYW1zaXplPjo6bWF4KCkpOwogICAgICAgICAgICAgIHdo
aWxlIChfTV9nY291bnQgPCBfX24gLSAxICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVzdGRlbGltKQog
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAg
ICAgICAgICAgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAgICAgICAgIF9fdGVzdGVv
ZiA9IF9fYyA9PSBfX2VvZjsKICAgICAgICAgICAgICAgICAgX190ZXN0ZGVsaW0gPSBfX2MgPT0g
X19pZGVsaW07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKChfTV9nY291bnQg
PT0gX19uIC0gMSAmJiAhX190ZXN0ZW9mKSB8fCBfX3Rlc3RkZWxpbSkKICAgICAgICAgICAgICAg
ICsrX01fZ2NvdW50OwogICAgICAgICAgICAgIGlmIChfX3Rlc3Rlb2YpCiAgICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgfQogICAgICAg
ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhp
cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAg
IHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPjo6CiAgICBwZWVrKHZvaWQpCiAgICB7CiAgICAgIGludF90eXBlIF9fYyA9
IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9f
Y2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAg
dHJ5CiAgICAgICAgICAgIHsgX19jID0gdGhpcy0+cmRidWYoKS0+c2dldGMoKTsgfQogICAgICAg
ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhp
cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAg
IHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19jOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz46OgogICAgcmVhZChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAg
IF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBp
ZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGlmIChfX24gPiAwKQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGNv
bnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgICAg
ICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICAg
ICAgaW50X3R5cGUgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAgICAgICAgIGJvb2wg
X190ZXN0ZW9mID0gX19jID09IF9fZW9mOwoKICAgICAgICAgICAgICAgICAgd2hpbGUgKF9NX2dj
b3VudCA8IF9fbiAtIDEgJiYgIV9fdGVzdGVvZikKICAgICAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgICAqX19zKysgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7
CiAgICAgICAgICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICAgICAgICAg
IF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgICAgICAgICAgICAgX190ZXN0ZW9mID0g
X19jID09IF9fZW9mOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYg
KF9fdGVzdGVvZikKICAgICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6
ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICpfX3MrKyA9IHRyYWl0c190
eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50
OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBj
YXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICAgICAg
aWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAg
ICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAg
ICAgfQogICAgICBlbHNlCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQp
OwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVhbXNpemUKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6CiAgICByZWFkc29tZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24p
CiAgICB7CiAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwog
ICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAg
ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBpZiAoX19uID4gMCkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgIHRyeQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICBzdHJlYW1zaXplIF9fbnVtID0gdGhpcy0+cmRidWYoKS0+aW5fYXZhaWwoKTsKICAgICAgICAg
ICAgICAgICAgaWYgKF9fbnVtICE9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fZW9mKSkKICAg
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBfX251bSA9IG1pbihfX251
bSwgX19uKTsKICAgICAgICAgICAgICAgICAgICAgIF9NX2djb3VudCA9IHRoaXMtPnJkYnVmKCkt
PnNnZXRuKF9fcywgX19udW0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2Zi
aXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m
YWlsKQogICAgICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlv
bnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICAgICAgdGhyb3c7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiBfTV9n
Y291bnQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPjo6CiAgICBwdXRiYWNrKGNoYXJfdHlwZSBfX2MpCiAgICB7CiAgICAg
IHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsK
ICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUg
X19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlw
ZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaWYgKCFfX3NiIHx8IF9fc2It
PnNwdXRiYWNrYyhfX2MpID09IF9fZW9mKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlv
biYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
b3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAm
IGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAg
ICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl
OjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgdW5nZXQodm9p
ZCkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywg
dHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjpl
b2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYo
KTsKICAgICAgICAgICAgICBpZiAoIV9fc2IgfHwgX19lb2YgPT0gX19zYi0+c3VuZ2V0YygpKQog
ICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg
ICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK
ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg
ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg
ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQog
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0
aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBpbnQKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzeW5jKHZv
aWQpCiAgICB7CiAgICAgIGludCBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgX01f
Z2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChf
X2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBp
ZiAoIV9fc2IgfHwgX19yZXQgPT0gX19zYi0+cHVic3luYygpKQogICAgICAgICAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgX19yZXQgPSAwOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRp
b24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg
JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+Ojpwb3NfdHlwZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+OjoKICAgIHRlbGxnKHZvaWQpCiAgICB7CiAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9z
X3R5cGUoLTEpOwogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlz
LCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAg
ICAgICAgewogICAgICAgICAgICAgX19yZXQgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKDAs
IGlvc19iYXNlOjpjdXIsIGlvc19iYXNlOjppbik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNh
dGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4
Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJv
dzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
OjoKICAgIHNlZWtnKHBvc190eXBlIF9fcG9zKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwog
ICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg
ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgcG9zX3R5cGUg
X19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrcG9zKF9fcG9zLCBpb3NfYmFzZTo6aW4pOwoK
CiAgICAgICAgICAgICAgaWYgKF9fZXJyID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShmYWlsYml0KTsKCiAgICAgICAgICAgIH0KICAgICAg
ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo
aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg
ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz46OgogICAgc2Vla2cob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fZGly
KQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0
cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAg
ICAgewoKCiAgICAgICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJz
ZWVrb2ZmKF9fb2ZmLCBfX2RpciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6OmluKTsKCgogICAgICAgICAgICAgIGlmIChf
X2VyciA9PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoZmFpbGJpdCk7CgogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24m
IF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z
X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBp
b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBf
X2luLCBfQ2hhclQmIF9fYykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBl
OjpzZW50cnkgX19jZXJiKF9faW4sIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7
CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX2luLmdldChfX2MpOyB9CiAgICAgICAgICBj
YXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19p
bi5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9faW4uZXhj
ZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93
OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19pbi5zZXRzdGF0
ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiBfX2luOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPiYgX19pbiwgX0NoYXJUKiBfX3MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IF9faXN0cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVk
ZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVf
dHlwZTsKICAgICAgc3RyZWFtc2l6ZSBfX2V4dHJhY3RlZCA9IDA7CgogICAgICB0eXBlbmFtZSBf
X2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCBmYWxzZSk7CiAgICAgIGlmIChfX2Nl
cmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAg
c3RyZWFtc2l6ZSBfX251bSA9IF9faW4ud2lkdGgoKTsKICAgICAgICAgICAgICBpZiAoX19udW0g
PT0gMCkKICAgICAgICAgICAgICAgIF9fbnVtID0gbnVtZXJpY19saW1pdHM8c3RyZWFtc2l6ZT46
Om1heCgpOwoKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1
ZigpOwogICAgICAgICAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSogX19jdHlwZSA9IF9faW4uX01f
Z2V0X2ZjdHlwZV9pb3MoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5zYnVt
cGMoKTsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigp
OwogICAgICAgICAgICAgIGJvb2wgX190ZXN0c3AgPSBfX2N0eXBlLT5pcyhjdHlwZV9iYXNlOjpz
cGFjZSwgX19jKTsKICAgICAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsK
CiAgICAgICAgICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDwgX19udW0gLSAxICYmICFfX3Rlc3Rl
b2YgJiYgIV9fdGVzdHNwKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAqX19z
KysgPSBfX2M7CiAgICAgICAgICAgICAgICAgICsrX19leHRyYWN0ZWQ7CiAgICAgICAgICAgICAg
ICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgICAgICAgICBfX3Rlc3Rlb2YgPSBf
X2MgPT0gX19lb2Y7CiAgICAgICAgICAgICAgICAgIF9fdGVzdHNwID0gX19jdHlwZS0+aXMoY3R5
cGVfYmFzZTo6c3BhY2UsIF9fYyk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgIGlm
ICghX190ZXN0ZW9mKQogICAgICAgICAgICAgICAgX19zYi0+c3B1dGJhY2tjKF9fYyk7CiAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9m
Yml0KTsKCgoKICAgICAgICAgICAgICAqX19zID0gY2hhcl90eXBlKCk7CgogICAgICAgICAgICAg
IF9faW4ud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg
X19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19i
YXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19pbi5leGNlcHRpb25zKCkgJiBpb3Nf
YmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0K
ICAgICAgICB9CiAgICAgIGlmICghX19leHRyYWN0ZWQpCiAgICAgICAgX19pbi5zZXRzdGF0ZShp
b3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiBfX2luOwogICAgfQoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsX1RyYWl0cz4mCiAgICB3cyhiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19pbikK
ICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3Ry
ZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFt
YnVmX3R5cGUgX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJl
YW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfX2lzdHJlYW1fdHlwZTo6Y2hhcl90eXBlIF9fY2hhcl90eXBlOwoKICAgICAgX19zdHJl
YW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAgICAgY29uc3QgX19jdHlwZV90eXBl
KiBfX2N0eXBlID0gX19pbi5fTV9nZXRfZmN0eXBlX2lvcygpOwogICAgICBjb25zdCBfX2ludF90
eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7CiAgICAgIF9faW50X3R5cGUgX19jOwogICAgICBi
b29sIF9fdGVzdGVvZjsKICAgICAgYm9vbCBfX3Rlc3RzcDsKCiAgICAgIGRvCiAgICAgICAgewog
ICAgICAgICAgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICBfX3Rlc3Rlb2YgPSBfX2Mg
PT0gX19lb2Y7CiAgICAgICAgICBfX3Rlc3RzcCA9IF9fY3R5cGUtPmlzKGN0eXBlX2Jhc2U6OnNw
YWNlLCBfX2MpOwogICAgICAgIH0KICAgICAgd2hpbGUgKCFfX3Rlc3Rlb2YgJiYgX190ZXN0c3Ap
OwoKICAgICAgaWYgKCFfX3Rlc3Rlb2YgJiYgIV9fdGVzdHNwKQogICAgICAgIF9fc2ItPnNwdXRi
YWNrYyhfX2MpOwogICAgICBlbHNlCiAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9m
Yml0KTsKCiAgICAgIHJldHVybiBfX2luOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYgX19pbiwKICAgICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiYgX19zdHIpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0
cmVhbV90eXBlOjppbnRfdHlwZSBfX2ludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9f
aXN0cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fY3R5cGVfdHlwZSBfX2N0eXBlX3R5cGU7
CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0
cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlw
ZSBfX3NpemVfdHlwZTsKICAgICAgX19zaXplX3R5cGUgX19leHRyYWN0ZWQgPSAwOwoKICAgICAg
dHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgZmFsc2UpOwogICAg
ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIF9fc3RyLmVyYXNlKCk7CiAgICAgICAg
ICBzdHJlYW1zaXplIF9fdyA9IF9faW4ud2lkdGgoKTsKICAgICAgICAgIF9fc2l6ZV90eXBlIF9f
bjsKICAgICAgICAgIF9fbiA9IF9fdyA+IDAgPyBzdGF0aWNfY2FzdDxfX3NpemVfdHlwZT4oX193
KSA6IF9fc3RyLm1heF9zaXplKCk7CgogICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9
IF9faW4ucmRidWYoKTsKICAgICAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSogX19jdHlwZSA9IF9f
aW4uX01fZ2V0X2ZjdHlwZV9pb3MoKTsKICAgICAgICAgIF9faW50X3R5cGUgX19jID0gX19zYi0+
c2J1bXBjKCk7CiAgICAgICAgICBjb25zdCBfX2ludF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9m
KCk7CiAgICAgICAgICBib29sIF9fdGVzdHNwID0gX19jdHlwZS0+aXMoY3R5cGVfYmFzZTo6c3Bh
Y2UsIF9fYyk7CiAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKCiAgICAg
ICAgICB3aGlsZSAoX19leHRyYWN0ZWQgPCBfX24gJiYgIV9fdGVzdGVvZiAmJiAhX190ZXN0c3Ap
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3N0ciArPSBfVHJhaXRzOjp0b19jaGFyX3R5
cGUoX19jKTsKICAgICAgICAgICAgICArK19fZXh0cmFjdGVkOwogICAgICAgICAgICAgIF9fYyA9
IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsK
ICAgICAgICAgICAgICBfX3Rlc3RzcCA9IF9fY3R5cGUtPmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBf
X2MpOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoIV9fdGVzdGVvZikKICAgICAgICAgICAg
X19zYi0+c3B1dGJhY2tjKF9fYyk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9faW4uc2V0
c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICBfX2luLndpZHRoKDApOwogICAgICAg
IH0KCgogICAgICBpZiAoIV9fZXh0cmFjdGVkKQogICAgICAgIF9faW4uc2V0c3RhdGUgKGlvc19i
YXNlOjpmYWlsYml0KTsKCiAgICAgIHJldHVybiBfX2luOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+JiBfX2luLAogICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+JiBfX3N0ciwgX0NoYXJUIF9fZGVsaW0pCiAgICB7CiAgICAgIHR5cGVkZWYg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppbnRfdHlwZSBfX2ludF90eXBlOwogICAgICB0
eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBlIF9fc3RyZWFt
YnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fY3R5cGVf
dHlwZSBfX2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3Ry
aW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKCiAgICAgIF9fc2l6ZV90eXBlIF9fZXh0
cmFjdGVkID0gMDsKICAgICAgYm9vbCBfX3Rlc3RkZWxpbSA9IGZhbHNlOwogICAgICB0eXBlbmFt
ZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCB0cnVlKTsKICAgICAgaWYgKF9f
Y2VyYikKICAgICAgICB7CiAgICAgICAgICBfX3N0ci5lcmFzZSgpOwogICAgICAgICAgX19zaXpl
X3R5cGUgX19uID0gX19zdHIubWF4X3NpemUoKTsKCiAgICAgICAgICBfX2ludF90eXBlIF9faWRl
bGltID0gX1RyYWl0czo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICBfX3N0cmVhbWJ1
Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOwogICAgICAgICAgX19pbnRfdHlwZSBfX2MgPSBf
X3NiLT5zYnVtcGMoKTsKICAgICAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRz
Ojplb2YoKTsKICAgICAgICAgIF9fdGVzdGRlbGltID0gX19jID09IF9faWRlbGltOwogICAgICAg
ICAgYm9vbCBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CgogICAgICAgICAgd2hpbGUgKF9fZXh0
cmFjdGVkIDw9IF9fbiAmJiAhX190ZXN0ZW9mICYmICFfX3Rlc3RkZWxpbSkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgIF9fc3RyICs9IF9UcmFpdHM6OnRvX2NoYXJfdHlwZShfX2MpOwogICAg
ICAgICAgICAgICsrX19leHRyYWN0ZWQ7CiAgICAgICAgICAgICAgX19jID0gX19zYi0+c2J1bXBj
KCk7CiAgICAgICAgICAgICAgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwogICAgICAgICAgICAg
IF9fdGVzdGRlbGltID0gX19jID09IF9faWRlbGltOwogICAgICAgICAgICB9CiAgICAgICAgICBp
ZiAoX190ZXN0ZW9mKQogICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQp
OwogICAgICAgIH0KICAgICAgaWYgKCFfX2V4dHJhY3RlZCAmJiAhX190ZXN0ZGVsaW0pCiAgICAg
ICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiBfX2luOwog
ICAgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxv
Yz4KICAgIGlubGluZSBiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIGdldGxpbmUo
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLAogICAgICAgICAgICBiYXNpY19z
dHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19zdHIpCiAgICB7IHJldHVybiBnZXRsaW5l
KF9faW4sIF9fc3RyLCBfX2luLndpZGVuKCdcbicpKTsgfQp9CiMgMjkxICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lzdHJlYW0uaCIgMiAzCiMgNDAgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfZnN0cmVhbS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RkX29zdHJlYW0uaCIgMSAzCiMgNDEgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfZnN0cmVhbS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvYmFzaWNfZmlsZS5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL2Jhc2ljX2ZpbGUuaCIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2k1ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDQwICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfZmlsZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAxIDMKIyA0MSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL2Jhc2ljX2ZpbGUuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBzdHJ1Y3QgX19iYXNpY19maWxlX2Jhc2U6IHB1
YmxpYyBfX2NfZmlsZV90eXBlCiAgICB7CiAgICAgIHZpcnR1YWwKICAgICAgfl9fYmFzaWNfZmls
ZV9iYXNlKCkgeyB9OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgb3ZlcmZsb3coaW50IF9fYyA9
ICgtMSkpID0gMDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIHVuZGVyZmxvdygpID0gMDsKCiAg
ICAgIHZpcnR1YWwgaW50CiAgICAgIHVmbG93KCkgPSAwOwoKICAgICAgdmlydHVhbCBpbnQKICAg
ICAgcGJhY2tmYWlsKGludCBfX2MpID0gMDsKCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQogICAg
ICB4c3B1dG4oY29uc3QgX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKSA9IDA7CgogICAgICB2
aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgeHNnZXRuKF9DaGFyVCogX19zLCBzdHJlYW1zaXplIF9f
bikgPSAwOwoKICAgICAgdmlydHVhbCBzdHJlYW1vZmYKICAgICAgc2Vla29mZihzdHJlYW1vZmYg
X19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5LAogICAgICAgICAgICAgIGlvc19iYXNlOjpv
cGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KSA9IDA7CgogICAg
ICB2aXJ0dWFsIHN0cmVhbW9mZgogICAgICBzZWVrcG9zKHN0cmVhbW9mZiBfX3BvcywKICAgICAg
ICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jh
c2U6Om91dCkgPSAwOwoKICAgICAgdmlydHVhbCBzdHJlYW1idWYqCiAgICAgIHNldGJ1ZihfQ2hh
clQqIF9fYiwgaW50IF9fbGVuKSA9IDA7CgogICAgICB2aXJ0dWFsIGludAogICAgICBzeW5jKCkg
PSAwOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9hbGxvY2F0ZSgpID0gMDsKCiAgICAgIHZp
cnR1YWwgc3RyZWFtc2l6ZQogICAgICBzeXNfcmVhZChfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBf
X24pID0gMDsKCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQogICAgICBzeXNfd3JpdGUoY29uc3Qg
X0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKSA9IDA7CgogICAgICB2aXJ0dWFsIHN0cmVhbW9m
ZgogICAgICBzeXNfc2VlayhzdHJlYW1vZmYgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5
KSA9IDA7CgogICAgICB2aXJ0dWFsIGludAogICAgICBzeXNfY2xvc2UoKSA9IDA7CgogICAgICB2
aXJ0dWFsIGludAogICAgICBzeXNfc3RhdCh2b2lkKiBfX3YpID0gMDsKCiAgICAgIHZpcnR1YWwg
aW50CiAgICAgIHNob3dtYW55YygpID0gMDsKCiAgICAgIHZpcnR1YWwgdm9pZAogICAgICBpbWJ1
ZSh2b2lkKiBfX3YpID0gMDsKICAgIH07CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K
CgoKICAgIGNsYXNzIF9fYmFzaWNfZmlsZQoKICAgIHsKCiAgICAgIF9fY19maWxlX3R5cGUqIF9N
X2NmaWxlOwogICAgICBib29sIF9NX2NmaWxlX2NyZWF0ZWQ7CgoKCgoKCiAgICBwdWJsaWM6CiAg
ICAgIF9fYmFzaWNfZmlsZShfX2NfbG9jayogX19sb2NrID0gMCk7CgogICAgICB2b2lkCiAgICAg
IF9NX29wZW5fbW9kZShpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlLCBpbnQmIF9fcF9tb2RlLCBp
bnQmIF9fcndfbW9kZSwKICAgICAgICAgICAgICAgICAgIGNoYXIqIF9fY19tb2RlKTsKCgogICAg
ICBfX2Jhc2ljX2ZpbGUqCiAgICAgIG9wZW4oY29uc3QgY2hhciogX19uYW1lLCBpb3NfYmFzZTo6
b3Blbm1vZGUgX19tb2RlLCBpbnQgX19wcm90ID0gMDY2NCk7CgoKCgoKICAgICAgX19iYXNpY19m
aWxlKgogICAgICBzeXNfb3BlbihfX2NfZmlsZV90eXBlKiBfX2ZpbGUsIGlvc19iYXNlOjpvcGVu
bW9kZSBfX21vZGUpOwoKICAgICAgX0NoYXJUCiAgICAgIHN5c19nZXRjKCk7CgogICAgICBfQ2hh
clQKICAgICAgc3lzX3VuZ2V0YyhfQ2hhclQpOwoKICAgICAgX19iYXNpY19maWxlKgogICAgICBj
bG9zZSgpOwoKICAgICAgYm9vbAogICAgICBpc19vcGVuKCk7CgoKCgoKICAgICAgdmlydHVhbAog
ICAgICB+X19iYXNpY19maWxlKCk7CgogICAgICB2aXJ0dWFsIGludAogICAgICBvdmVyZmxvdyhp
bnQgX19jID0gKC0xKSk7CgogICAgICB2aXJ0dWFsIGludAogICAgICB1bmRlcmZsb3coKTsKCiAg
ICAgIHZpcnR1YWwgaW50CiAgICAgIHVmbG93KCk7CgogICAgICB2aXJ0dWFsIGludAogICAgICBw
YmFja2ZhaWwoaW50IF9fYyk7CgoKCgogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgeHNw
dXRuKGNvbnN0IF9DaGFyVCogX19zLCBzdHJlYW1zaXplIF9fbik7CgoKCgogICAgICB2aXJ0dWFs
IHN0cmVhbXNpemUKICAgICAgeHNnZXRuKF9DaGFyVCogX19zLCBzdHJlYW1zaXplIF9fbik7CgoK
CgogICAgICB2aXJ0dWFsIHN0cmVhbW9mZgogICAgICBzZWVrb2ZmKHN0cmVhbW9mZiBfX29mZiwg
aW9zX2Jhc2U6OnNlZWtkaXIgX193YXksCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2Rl
IF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpOwoKCgoKICAgICAgdmlydHVh
bCBzdHJlYW1vZmYKICAgICAgc2Vla3BvcyhzdHJlYW1vZmYgX19wb3MsCiAgICAgICAgICAgICAg
aW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQp
OwoKICAgICAgdmlydHVhbCBzdHJlYW1idWYqCiAgICAgIHNldGJ1ZihfQ2hhclQqIF9fYiwgaW50
IF9fbGVuKTsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIHN5bmMoKTsKCiAgICAgIHZpcnR1YWwg
aW50CiAgICAgIGRvYWxsb2NhdGUoKTsKCgoKCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQogICAg
ICBzeXNfcmVhZChfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwoKCgoKICAgICAgdmlydHVh
bCBzdHJlYW1zaXplCiAgICAgIHN5c193cml0ZShjb25zdCBfQ2hhclQqIF9fcywgc3RyZWFtc2l6
ZSBfX24pOwoKCgoKICAgICAgdmlydHVhbCBzdHJlYW1vZmYKICAgICAgc3lzX3NlZWsoc3RyZWFt
b2ZmIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSk7CgogICAgICB2aXJ0dWFsIGludAog
ICAgICBzeXNfY2xvc2UoKTsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIHN5c19zdGF0KHZvaWQq
IF9fdik7CgogICAgICB2aXJ0dWFsIGludAogICAgICBzaG93bWFueWMoKTsKCiAgICAgIHZpcnR1
YWwgdm9pZAogICAgICBpbWJ1ZSh2b2lkKiBfX3YpOwogICAgfTsKfQoKCgojIDEgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvaTU4Ni1wYy1saW51eC1nbnUvYml0cy9iYXNpY19maWxlX21vZGVs
LmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k1ODYtcGMtbGludXgtZ251
L2JpdHMvYmFzaWNfZmlsZV9tb2RlbC5oIiAzCm5hbWVzcGFjZSBzdGQKewoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQ+CiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPjo6X19iYXNpY19maWxlKF9f
Y19sb2NrKiApCiAgICA6IF9NX2NmaWxlKDApLCBfTV9jZmlsZV9jcmVhdGVkKGZhbHNlKSB7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgX19iYXNpY19maWxlPF9DaGFyVD46On5f
X2Jhc2ljX2ZpbGUoKQogICAgewogICAgICBpZiAodGhpcy0+aXNfb3BlbigpKQogICAgICAgIHsK
ICAgICAgICAgIGZmbHVzaChfTV9jZmlsZSk7CiAgICAgICAgICB0aGlzLT5jbG9zZSgpOwogICAg
ICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdm9pZAogICAgX19i
YXNpY19maWxlPF9DaGFyVD46Ol9NX29wZW5fbW9kZShpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2Rl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmICwgaW50JiAsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIF9fY19tb2RlKQogICAg
ewogICAgICBib29sIF9fdGVzdGIgPSBfX21vZGUgJiBpb3NfYmFzZTo6YmluYXJ5OwogICAgICBi
b29sIF9fdGVzdGkgPSBfX21vZGUgJiBpb3NfYmFzZTo6aW47CiAgICAgIGJvb2wgX190ZXN0byA9
IF9fbW9kZSAmIGlvc19iYXNlOjpvdXQ7CiAgICAgIGJvb2wgX190ZXN0dCA9IF9fbW9kZSAmIGlv
c19iYXNlOjp0cnVuYzsKICAgICAgYm9vbCBfX3Rlc3RhID0gX19tb2RlICYgaW9zX2Jhc2U6OmFw
cDsKCiAgICAgIGlmICghX190ZXN0aSAmJiBfX3Rlc3RvICYmICFfX3Rlc3R0ICYmICFfX3Rlc3Rh
KQogICAgICAgIHN0cmNweShfX2NfbW9kZSwgInciKTsKICAgICAgaWYgKCFfX3Rlc3RpICYmIF9f
dGVzdG8gJiYgIV9fdGVzdHQgJiYgX190ZXN0YSkKICAgICAgICBzdHJjcHkoX19jX21vZGUsICJh
Iik7CiAgICAgIGlmICghX190ZXN0aSAmJiBfX3Rlc3RvICYmIF9fdGVzdHQgJiYgIV9fdGVzdGEp
CiAgICAgICAgc3RyY3B5KF9fY19tb2RlLCAidyIpOwogICAgICBpZiAoX190ZXN0aSAmJiAhX190
ZXN0byAmJiAhX190ZXN0dCAmJiAhX190ZXN0YSkKICAgICAgICBzdHJjcHkoX19jX21vZGUsICJy
Iik7CiAgICAgIGlmIChfX3Rlc3RpICYmIF9fdGVzdG8gJiYgIV9fdGVzdHQgJiYgIV9fdGVzdGEp
CiAgICAgICAgc3RyY3B5KF9fY19tb2RlLCAicisiKTsKICAgICAgaWYgKF9fdGVzdGkgJiYgX190
ZXN0byAmJiBfX3Rlc3R0ICYmICFfX3Rlc3RhKQogICAgICAgIHN0cmNweShfX2NfbW9kZSwgIncr
Iik7CiAgICAgIGlmIChfX3Rlc3RiKQogICAgICAgIHN0cmNhdChfX2NfbW9kZSwgImIiKTsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgX19iYXNpY19maWxlPF9DaGFyVD4q
CiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPjo6c3lzX29wZW4oX19jX2ZpbGVfdHlwZSogX19maWxl
LCBpb3NfYmFzZTo6b3Blbm1vZGUpCiAgICB7CiAgICAgIF9fYmFzaWNfZmlsZSogX19yZXQgPSAw
OwoKICAgICAgaWYgKCF0aGlzLT5pc19vcGVuKCkgJiYgX19maWxlKQogICAgICAgIHsKICAgICAg
ICAgIF9NX2NmaWxlID0gX19maWxlOwogICAgICAgICAgX01fY2ZpbGVfY3JlYXRlZCA9IGZhbHNl
OwogICAgICAgICAgX19yZXQgPSB0aGlzOwogICAgICAgIH0KCiAgICAgIHJldHVybiBfX3JldDsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgX0NoYXJUCiAgICBfX2Jhc2lj
X2ZpbGU8X0NoYXJUPjo6c3lzX2dldGMoKQogICAgewogICAgICByZXR1cm4gZ2V0YyAoX01fY2Zp
bGUpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBfQ2hhclQKICAgIF9f
YmFzaWNfZmlsZTxfQ2hhclQ+OjpzeXNfdW5nZXRjKF9DaGFyVCBfX3MpCiAgICB7CiAgICAgIHJl
dHVybiB1bmdldGMgKF9fcywgX01fY2ZpbGUpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQ+CiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPioKICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+
OjpvcGVuKGNvbnN0IGNoYXIqIF9fbmFtZSwgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCApCiAgICB7CiAgICAgIF9fYmFzaWNfZmls
ZSogX19yZXQgPSAwOwogICAgICBpbnQgX19wX21vZGUgPSAwOwogICAgICBpbnQgX19yd19tb2Rl
ID0gMDsKICAgICAgY2hhciBfX2NfbW9kZVs0XTsKCiAgICAgIF9NX29wZW5fbW9kZShfX21vZGUs
IF9fcF9tb2RlLCBfX3J3X21vZGUsIF9fY19tb2RlKTsKCiAgICAgIGlmICghdGhpcy0+aXNfb3Bl
bigpKQogICAgICAgIHsKICAgICAgICAgIGlmICgoX01fY2ZpbGUgPSBmb3BlbihfX25hbWUsIF9f
Y19tb2RlKSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfTV9jZmlsZV9jcmVhdGVkID0g
dHJ1ZTsKICAgICAgICAgICAgICBfX3JldCA9IHRoaXM7CiAgICAgICAgICAgIH0KICAgICAgICB9
CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog
ICAgYm9vbAogICAgX19iYXNpY19maWxlPF9DaGFyVD46OmlzX29wZW4oKSB7IHJldHVybiBfTV9j
ZmlsZSAhPSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIF9fYmFzaWNfZmls
ZTxfQ2hhclQ+KgogICAgX19iYXNpY19maWxlPF9DaGFyVD46OmNsb3NlKCkKICAgIHsKICAgICAg
X19iYXNpY19maWxlKiBfX3JldHZhbCA9IHN0YXRpY19jYXN0PF9fYmFzaWNfZmlsZSo+KDApOwog
ICAgICBpZiAoX01fY2ZpbGVfY3JlYXRlZCAmJiBmY2xvc2UoX01fY2ZpbGUpKQogICAgICAgIF9f
cmV0dmFsID0gdGhpczsKICAgICAgcmV0dXJuIF9fcmV0dmFsOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQ+CiAgICBzdHJlYW1zaXplCiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPjo6
eHNnZXRuKF9DaGFyVCogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsgcmV0dXJuIGZyZWFkKF9f
cywgMSwgX19uLCBfTV9jZmlsZSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg
c3RyZWFtc2l6ZQogICAgX19iYXNpY19maWxlPF9DaGFyVD46OnhzcHV0bihjb25zdCBfQ2hhclQq
IF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7IHJldHVybiBmd3JpdGUoX19zLCAxLCBfX24sIF9N
X2NmaWxlKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBzdHJlYW1vZmYKICAg
IF9fYmFzaWNfZmlsZTxfQ2hhclQ+OjpzZWVrb2ZmKHN0cmVhbW9mZiBfX29mZiwgaW9zX2Jhc2U6
OnNlZWtkaXIgX193YXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFz
ZTo6b3Blbm1vZGUgKQogICAgeyBmc2VlayhfTV9jZmlsZSwgX19vZmYsIF9fd2F5KTsgcmV0dXJu
IGZ0ZWxsKF9NX2NmaWxlKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBzdHJl
YW1vZmYKICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+OjpzZWVrcG9zKHN0cmVhbW9mZiBfX3BvcywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSApCiAg
ICB7IGZzZWVrKF9NX2NmaWxlLCBfX3BvcywgaW9zX2Jhc2U6OmJlZyk7IHJldHVybiBmdGVsbChf
TV9jZmlsZSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW50CiAgICBfX2Jh
c2ljX2ZpbGU8X0NoYXJUPjo6c3luYygpCiAgICB7IHJldHVybiBmZmx1c2goX01fY2ZpbGUpOyB9
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbnQKICAgIF9fYmFzaWNfZmlsZTxf
Q2hhclQ+OjpvdmVyZmxvdyhpbnQgKQogICAgeyByZXR1cm4gKC0xKTsgfQoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPgogICAgaW50CiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPjo6dW5kZXJm
bG93KCkKICAgIHsgcmV0dXJuICgtMSk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K
ICAgIGludAogICAgX19iYXNpY19maWxlPF9DaGFyVD46OnVmbG93KCkKICAgIHsgcmV0dXJuICgt
MSk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGludAogICAgX19iYXNpY19m
aWxlPF9DaGFyVD46OnBiYWNrZmFpbChpbnQgKQogICAgeyByZXR1cm4gKC0xKTsgfQoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgc3RyZWFtYnVmKgogICAgX19iYXNpY19maWxlPF9D
aGFyVD46OnNldGJ1ZihfQ2hhclQqICwgaW50ICkKICAgIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8c3RyZWFtYnVmKj4odGhpcyk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg
IGludAogICAgX19iYXNpY19maWxlPF9DaGFyVD46OmRvYWxsb2NhdGUoKQogICAgeyByZXR1cm4g
KC0xKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgc3RyZWFtc2l6ZQogICAg
X19iYXNpY19maWxlPF9DaGFyVD46OnN5c19yZWFkKF9DaGFyVCogX19zLCBzdHJlYW1zaXplIF9f
bikKICAgIHsgcmV0dXJuIGZyZWFkKF9fcywgMSwgX19uLCBfTV9jZmlsZSk7IH0KCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIHN0cmVhbXNpemUKICAgIF9fYmFzaWNfZmlsZTxfQ2hh
clQ+OjpzeXNfd3JpdGUoY29uc3QgX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgeyBy
ZXR1cm4gZndyaXRlKF9fcywgMSwgX19uLCBfTV9jZmlsZSk7IH0KCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4KICAgIHN0cmVhbW9mZgogICAgX19iYXNpY19maWxlPF9DaGFyVD46OnN5c19z
ZWVrKHN0cmVhbW9mZiBfX3BvcywgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXkpCiAgICB7CiAgICAg
IGZzZWVrKF9NX2NmaWxlLCBfX3BvcywgX193YXkpOwogICAgICByZXR1cm4gZnRlbGwoX01fY2Zp
bGUpOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW50CiAgICBfX2Jh
c2ljX2ZpbGU8X0NoYXJUPjo6c3lzX2Nsb3NlKCkKICAgIHsgcmV0dXJuIGZjbG9zZShfTV9jZmls
ZSk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGludAogICAgX19iYXNpY19m
aWxlPF9DaGFyVD46OnN5c19zdGF0KHZvaWQqICkKICAgIHsgcmV0dXJuICgtMSk7IH0KCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGludAogICAgX19iYXNpY19maWxlPF9DaGFyVD46
OnNob3dtYW55YygpCiAgICB7IHJldHVybiAoLTEpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQ+CiAgICB2b2lkCiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPjo6aW1idWUodm9pZCogKSB7
IH0KfQojIDI1MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2ZpbGUuaCIg
MiAzCiMgNDIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfZnN0cmVhbS5oIiAy
IDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xvY2FsZS5oIiAxIDMK
IyA0MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9mc3RyZWFtLmgiIDIgMwoj
IDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTU4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhy
LmgiIDEgMwojIDQ0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2ZzdHJlYW0u
aCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19maWxlYnVmIDogcHVibGljIGJhc2ljX3N0cmVh
bWJ1ZjxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9D
aGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpvZmZfdHlwZSBvZmZfdHlwZTsKCgogICAgICB0eXBl
ZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX3N0cmVhbWJ1Zl90
eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2ZpbGVidWY8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4g
X19maWxlYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgX19iYXNpY19maWxlPGNoYXJfdHlwZT4gX19m
aWxlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnN0YXRlX3R5cGUg
X19zdGF0ZV90eXBlOwogICAgICB0eXBlZGVmIGNvZGVjdnQ8Y2hhcl90eXBlLCBjaGFyLCBfX3N0
YXRlX3R5cGU+IF9fY29kZWN2dF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fY29kZWN2
dF90eXBlOjpyZXN1bHQgX19yZXNfdHlwZTsKICAgICAgdHlwZWRlZiBjdHlwZTxjaGFyX3R5cGU+
IF9fY3R5cGVfdHlwZTsKCiAgICAgIGZyaWVuZCBjbGFzcyBpb3NfYmFzZTsKCiAgICBwcml2YXRl
OgoKCiAgICAgIF9fZmlsZV90eXBlKiBfTV9maWxlOwoKCiAgICAgIF9fc3RhdGVfdHlwZSBfTV9z
dGF0ZV9jdXI7CiAgICAgIF9fc3RhdGVfdHlwZSBfTV9zdGF0ZV9iZWc7CgoKICAgICAgX19jX2xv
Y2sgX01fbG9jazsKCgogICAgICBib29sIF9NX2J1Zl9hbGxvY2F0ZWQ7CgoKICAgICAgYm9vbCBf
TV9sYXN0X292ZXJmbG93ZWQ7CgogICAgcHVibGljOgoKICAgICAgYmFzaWNfZmlsZWJ1ZigpOwoK
CiAgICAgIGJhc2ljX2ZpbGVidWYoX19jX2ZpbGVfdHlwZSogX19mLCBpb3NfYmFzZTo6b3Blbm1v
ZGUgX19tb2RlLAogICAgICAgICAgICAgICAgICAgIGludF90eXBlIF9fcyA9IHN0YXRpY19jYXN0
PGludF90eXBlPig4MTkyKSk7CgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19maWxlYnVmKCkK
ICAgICAgewogICAgICAgIHRoaXMtPmNsb3NlKCk7CiAgICAgICAgX01fbGFzdF9vdmVyZmxvd2Vk
ID0gZmFsc2U7CiAgICAgIH0KCgogICAgICBib29sCiAgICAgIGlzX29wZW4odm9pZCkgY29uc3Qg
eyByZXR1cm4gX01fZmlsZSA/IF9NX2ZpbGUtPmlzX29wZW4oKSA6IGZhbHNlOyB9CgogICAgICBf
X2ZpbGVidWZfdHlwZSoKICAgICAgb3Blbihjb25zdCBjaGFyKiBfX3MsIGlvc19iYXNlOjpvcGVu
bW9kZSBfX21vZGUpOwoKICAgICAgX19maWxlYnVmX3R5cGUqCiAgICAgIGNsb3NlKHZvaWQpOwoK
ICAgIHByb3RlY3RlZDoKICAgICAgdm9pZAogICAgICBfTV9hbGxvY2F0ZV9pbnRlcm5hbF9idWZm
ZXIoKTsKCiAgICAgIHZvaWQKICAgICAgX01fZGVzdHJveV9pbnRlcm5hbF9idWZmZXIoKTsKCiAg
ICAgIHZvaWQKICAgICAgX01fYWxsb2NhdGVfcGJhY2tfYnVmZmVyKCk7CgoKICAgICAgdm9pZAog
ICAgICBfTV9hbGxvY2F0ZV9maWxlKCk7CgoKICAgICAgdmlydHVhbCBzdHJlYW1zaXplCiAgICAg
IHNob3dtYW55Yyh2b2lkKTsKCgoKCgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIHVuZGVy
Zmxvdyh2b2lkKTsKCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgcGJhY2tmYWlsKGludF90
eXBlIF9fYyA9IF9UcmFpdHM6OmVvZigpKTsKIyAxNDggIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvYml0cy9zdGRfZnN0cmVhbS5oIiAzCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgb3Zl
cmZsb3coaW50X3R5cGUgX19jID0gX1RyYWl0czo6ZW9mKCkpOwojIDE1OCAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9mc3RyZWFtLmgiIDMKICAgICAgaW50X3R5cGUKICAgICAg
X01fcmVhbGx5X292ZXJmbG93KGludF90eXBlIF9fYyA9IF9UcmFpdHM6OmVvZigpKTsKCiAgICAg
IHZpcnR1YWwgX19zdHJlYW1idWZfdHlwZSoKICAgICAgc2V0YnVmKGNoYXJfdHlwZSogX19zLCBz
dHJlYW1zaXplIF9fbik7CgogICAgICB2aXJ0dWFsIHBvc190eXBlCiAgICAgIHNlZWtvZmYob2Zm
X3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5LAogICAgICAgICAgICAgIGlvc19i
YXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KTsKCiAg
ICAgIHZpcnR1YWwgcG9zX3R5cGUKICAgICAgc2Vla3Bvcyhwb3NfdHlwZSBfX3BvcywKICAgICAg
ICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jh
c2U6Om91dCk7CgogICAgICB2aXJ0dWFsIGludAogICAgICBzeW5jKHZvaWQpCiAgICAgIHsKICAg
ICAgICBib29sIF9fdGVzdHB1dCA9IF9NX291dF9jdXIgJiYgX01fb3V0X2JlZyA8IF9NX291dF9l
bmQ7CiAgICAgICAgaWYgKF9fdGVzdHB1dCkKICAgICAgICAgIHsKCgogICAgICAgICAgICBfTV9m
aWxlLT5zeW5jKCk7CgoKCgoKICAgICAgICAgICAgc3RyZWFtb2ZmIF9fY3VyID0gX01fZmlsZS0+
c2Vla29mZigwLCBpb3NfYmFzZTo6Y3VyKTsKICAgICAgICAgICAgb2ZmX3R5cGUgX19vZmYgPSBf
TV9vdXRfY3VyIC0gX01fb3V0X2JlZzsKICAgICAgICAgICAgX01fcmVhbGx5X292ZXJmbG93KCk7
CiAgICAgICAgICAgIF9NX2ZpbGUtPnNlZWtwb3MoX19jdXIgKyBfX29mZik7CiAgICAgICAgICB9
CiAgICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0gZmFsc2U7CiAgICAgICAgcmV0dXJuIDA7CiAg
ICAgIH0KCiAgICAgIHZpcnR1YWwgdm9pZAogICAgICBpbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9j
KTsKCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQogICAgICB4c2dldG4oY2hhcl90eXBlKiBfX3Ms
IHN0cmVhbXNpemUgX19uKQogICAgICB7CiAgICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IDA7Cgog
ICAgICAgIGlmIChfTV9wYmFja19pbml0KQogICAgICAgICAgewogICAgICAgICAgICB3aGlsZSAo
X19yZXQgPCBfX24gJiYgX01faW5fY3VyIDwgX01faW5fZW5kKQogICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICpfX3MgPSAqX01faW5fY3VyOwogICAgICAgICAgICAgICAgKytfX3JldDsK
ICAgICAgICAgICAgICAgICsrX19zOwogICAgICAgICAgICAgICAgKytfTV9pbl9jdXI7CiAgICAg
ICAgICAgICAgfQogICAgICAgICAgICBfTV9wYmFja19kZXN0cm95KCk7CiAgICAgICAgICB9CiAg
ICAgICAgaWYgKF9fcmV0IDwgX19uKQogICAgICAgICAgX19yZXQgKz0gX19zdHJlYW1idWZfdHlw
ZTo6eHNnZXRuKF9fcywgX19uIC0gX19yZXQpOwogICAgICAgIHJldHVybiBfX3JldDsKICAgICAg
fQoKICAgICAgdmlydHVhbCBzdHJlYW1zaXplCiAgICAgIHhzcHV0bihjb25zdCBjaGFyX3R5cGUq
IF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsKICAgICAgICBfTV9wYmFja19kZXN0cm95KCk7
CiAgICAgICAgcmV0dXJuIF9fc3RyZWFtYnVmX3R5cGU6OnhzcHV0bihfX3MsIF9fbik7CiAgICAg
IH0KCiAgICAgIHZvaWQKICAgICAgX01fb3V0cHV0X3Vuc2hpZnQoKTsKICAgIH07CgoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNf
aWZzdHJlYW0gOiBwdWJsaWMgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAg
ICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYg
X1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6
aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnBv
c190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpvZmZf
dHlwZSBvZmZfdHlwZTsKCgogICAgICB0eXBlZGVmIGJhc2ljX2ZpbGVidWY8Y2hhcl90eXBlLCB0
cmFpdHNfdHlwZT4gX19maWxlYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxj
aGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX2lzdHJlYW1fdHlwZTsKCiAgICBwcml2YXRlOgogICAg
ICBfX2ZpbGVidWZfdHlwZSBfTV9maWxlYnVmOwoKICAgIHB1YmxpYzoKCiAgICAgIGJhc2ljX2lm
c3RyZWFtKCkKICAgICAgOiBfX2lzdHJlYW1fdHlwZSgwKSwgX01fZmlsZWJ1ZigpCiAgICAgIHsg
dGhpcy0+aW5pdCgmX01fZmlsZWJ1Zik7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX2lm
c3RyZWFtKGNvbnN0IGNoYXIqIF9fcywgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19i
YXNlOjppbikKICAgICAgOiBfX2lzdHJlYW1fdHlwZSgwKSwgX01fZmlsZWJ1ZigpCiAgICAgIHsK
ICAgICAgICB0aGlzLT5pbml0KCZfTV9maWxlYnVmKTsKICAgICAgICB0aGlzLT5vcGVuKF9fcywg
X19tb2RlKTsKICAgICAgfQoKICAgICAgfmJhc2ljX2lmc3RyZWFtKCkKICAgICAgeyB9CgoKICAg
ICAgX19maWxlYnVmX3R5cGUqCiAgICAgIHJkYnVmKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29u
c3RfY2FzdDxfX2ZpbGVidWZfdHlwZSo+KCZfTV9maWxlYnVmKTsgfQoKICAgICAgYm9vbAogICAg
ICBpc19vcGVuKHZvaWQpIHsgcmV0dXJuIF9NX2ZpbGVidWYuaXNfb3BlbigpOyB9CgogICAgICB2
b2lkCiAgICAgIG9wZW4oY29uc3QgY2hhciogX19zLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2Rl
ID0gaW9zX2Jhc2U6OmluKQogICAgICB7CiAgICAgICAgaWYgKF9NX2ZpbGVidWYub3BlbihfX3Ms
IF9fbW9kZSB8IGlvc19iYXNlOjppbikgPT0gMCkKICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
c19iYXNlOjpmYWlsYml0KTsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBjbG9zZSh2b2lkKQog
ICAgICB7CiAgICAgICAgaWYgKCFfTV9maWxlYnVmLmNsb3NlKCkpCiAgICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIH0KICAgIH07CgoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfb2ZzdHJl
YW0gOiBwdWJsaWMgYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4KICAgIHsKICAgIHB1Ymxp
YzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRz
IHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlw
ZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5cGUg
cG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBlIG9m
Zl90eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFyX3R5cGUsIHRyYWl0c190
eXBlPiBfX2ZpbGVidWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXJfdHlw
ZSwgdHJhaXRzX3R5cGU+IF9fb3N0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIF9fZmls
ZWJ1Zl90eXBlIF9NX2ZpbGVidWY7CgogICAgcHVibGljOgoKICAgICAgYmFzaWNfb2ZzdHJlYW0o
KQogICAgICA6IF9fb3N0cmVhbV90eXBlKDApLCBfTV9maWxlYnVmKCkKICAgICAgeyB0aGlzLT5p
bml0KCZfTV9maWxlYnVmKTsgfQoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfb2ZzdHJlYW0o
Y29uc3QgY2hhciogX19zLAogICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUg
X19tb2RlID0gaW9zX2Jhc2U6Om91dHxpb3NfYmFzZTo6dHJ1bmMpCiAgICAgIDogX19vc3RyZWFt
X3R5cGUoMCksIF9NX2ZpbGVidWYoKQogICAgICB7CiAgICAgICAgdGhpcy0+aW5pdCgmX01fZmls
ZWJ1Zik7CiAgICAgICAgdGhpcy0+b3BlbihfX3MsIF9fbW9kZSk7CiAgICAgIH0KCiAgICAgIH5i
YXNpY19vZnN0cmVhbSgpCiAgICAgIHsgfQoKCiAgICAgIF9fZmlsZWJ1Zl90eXBlKgogICAgICBy
ZGJ1Zih2b2lkKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9jYXN0PF9fZmlsZWJ1Zl90eXBl
Kj4oJl9NX2ZpbGVidWYpOyB9CgogICAgICBib29sCiAgICAgIGlzX29wZW4odm9pZCkgeyByZXR1
cm4gX01fZmlsZWJ1Zi5pc19vcGVuKCk7IH0KCiAgICAgIHZvaWQKICAgICAgb3Blbihjb25zdCBj
aGFyKiBfX3MsCiAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNl
OjpvdXQgfCBpb3NfYmFzZTo6dHJ1bmMpCiAgICAgIHsKICAgICAgICBpZiAoIV9NX2ZpbGVidWYu
b3BlbihfX3MsIF9fbW9kZSB8IGlvc19iYXNlOjpvdXQpKQogICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICB9CgogICAgICB2b2lkCiAgICAgIGNsb3NlKHZv
aWQpCiAgICAgIHsKICAgICAgICBpZiAoIV9NX2ZpbGVidWYuY2xvc2UoKSkKICAgICAgICAgIHNl
dHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgfQogICAgfTsKCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19mc3RyZWFt
IDogcHVibGljIGJhc2ljX2lvc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4KICAgIHsKICAgIHB1Ymxp
YzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRz
IHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlw
ZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5cGUg
cG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBlIG9m
Zl90eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFyX3R5cGUsIHRyYWl0c190
eXBlPiBfX2ZpbGVidWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pb3M8Y2hhcl90eXBlLCB0
cmFpdHNfdHlwZT4gX19pb3NfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pb3N0cmVhbTxjaGFy
X3R5cGUsIHRyYWl0c190eXBlPiBfX2lvc3RyZWFtX3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAg
X19maWxlYnVmX3R5cGUgX01fZmlsZWJ1ZjsKCiAgICBwdWJsaWM6CgogICAgICBiYXNpY19mc3Ry
ZWFtKCkKICAgICAgOiBfX2lvc3RyZWFtX3R5cGUoMCksIF9NX2ZpbGVidWYoKQogICAgICB7IHRo
aXMtPmluaXQoJl9NX2ZpbGVidWYpOyB9CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19mc3Ry
ZWFtKGNvbnN0IGNoYXIqIF9fcywKICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1v
ZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgOiBfX2lvc3Ry
ZWFtX3R5cGUoMCksIF9NX2ZpbGVidWYoKQogICAgICB7CiAgICAgICAgdGhpcy0+aW5pdCgmX01f
ZmlsZWJ1Zik7CiAgICAgICAgdGhpcy0+b3BlbihfX3MsIF9fbW9kZSk7CiAgICAgIH0KCiAgICAg
IH5iYXNpY19mc3RyZWFtKCkKICAgICAgeyB9CgoKICAgICAgX19maWxlYnVmX3R5cGUqCiAgICAg
IHJkYnVmKHZvaWQpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8X19maWxlYnVmX3R5
cGUqPigmX01fZmlsZWJ1Zik7IH0KCiAgICAgIGJvb2wKICAgICAgaXNfb3Blbih2b2lkKSB7IHJl
dHVybiBfTV9maWxlYnVmLmlzX29wZW4oKTsgfQoKICAgICAgdm9pZAogICAgICBvcGVuKGNvbnN0
IGNoYXIqIF9fcywKICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jh
c2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgewogICAgICAgIGlmICghX01fZmlsZWJ1Zi5v
cGVuKF9fcywgX19tb2RlKSkKICAgICAgICAgIHNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsK
ICAgICAgfQoKICAgICAgdm9pZAogICAgICBjbG9zZSh2b2lkKQogICAgICB7CiAgICAgICAgaWYg
KCFfTV9maWxlYnVmLmNsb3NlKCkpCiAgICAgICAgICBzZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJp
dCk7CiAgICAgIH0KICAgIH07Cn0KCgoKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9mc3RyZWFtLnRjYyIgMSAzCiMgMzcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9mc3RyZWFtLnRjYyIgMwpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwg
X1RyYWl0cz46OgogICAgX01fYWxsb2NhdGVfZmlsZSgpCiAgICB7CiAgICAgIGlmICghX01fZmls
ZSkKICAgICAgICB7CiAgICAgICAgICBfTV9idWZfdW5pZmllZCA9IHRydWU7CiAgICAgICAgICB0
cnkKICAgICAgICAgICAgeyBfTV9maWxlID0gbmV3IF9fZmlsZV90eXBlKCZfTV9sb2NrKTsgfQog
ICAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgZGVsZXRlIF9N
X2ZpbGU7CiAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQK
ICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBfTV9hbGxvY2F0ZV9pbnRl
cm5hbF9idWZmZXIoKQogICAgewogICAgICBpZiAoIV9NX2J1ZiAmJiBfTV9idWZfc2l6ZV9vcHQp
CiAgICAgICAgewogICAgICAgICAgX01fYnVmX3NpemUgPSBfTV9idWZfc2l6ZV9vcHQ7CgoKICAg
ICAgICAgIHRyeSB7IF9NX2J1ZiA9IG5ldyBjaGFyX3R5cGVbX01fYnVmX3NpemVdOyB9CiAgICAg
ICAgICBjYXRjaCguLi4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBkZWxldGUgW10gX01f
YnVmOwogICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgICBfTV9idWZf
YWxsb2NhdGVkID0gdHJ1ZTsKICAgICAgICB9CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBiYXNpY19maWxlYnVmPF9DaGFy
VCwgX1RyYWl0cz46OgogICAgX01fZGVzdHJveV9pbnRlcm5hbF9idWZmZXIoKQogICAgewogICAg
ICBpZiAoX01fYnVmX2FsbG9jYXRlZCkKICAgICAgICB7CiAgICAgICAgICBkZWxldGUgW10gX01f
YnVmOwogICAgICAgICAgX01fYnVmID0gMDsKICAgICAgICAgIF9NX2J1Zl9hbGxvY2F0ZWQgPSBm
YWxzZTsKICAgICAgICAgIHRoaXMtPnNldGcoMCwgMCwgMCk7CiAgICAgICAgICB0aGlzLT5zZXRw
KDAsIDApOwogICAgICAgIH0KICAgIH0KCiB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46
OgogICAgX01fYWxsb2NhdGVfcGJhY2tfYnVmZmVyKCkKICAgIHsKICAgICAgaWYgKCFfTV9wYmFj
ayAmJiBfTV9wYmFja19zaXplKQogICAgICAgIHsKCiAgICAgICAgICB0cnkKICAgICAgICAgICAg
eyBfTV9wYmFjayA9IG5ldyBjaGFyX3R5cGVbX01fcGJhY2tfc2l6ZV07IH0KICAgICAgICAgIGNh
dGNoKC4uLikKICAgICAgICAgICAgewogICAgICAgICAgICAgIGRlbGV0ZSBbXSBfTV9wYmFjazsK
ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfZmlsZWJ1
ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGJhc2ljX2ZpbGVidWYoKQogICAgOiBfX3N0cmVhbWJ1
Zl90eXBlKCksIF9NX2ZpbGUoMCksIF9NX3N0YXRlX2N1cihfX3N0YXRlX3R5cGUoKSksCiAgICBf
TV9zdGF0ZV9iZWcoX19zdGF0ZV90eXBlKCkpLCBfTV9idWZfYWxsb2NhdGVkKGZhbHNlKSwKICAg
IF9NX2xhc3Rfb3ZlcmZsb3dlZChmYWxzZSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0
cz46OgogICAgYmFzaWNfZmlsZWJ1ZihfX2NfZmlsZV90eXBlKiBfX2YsIGlvc19iYXNlOjpvcGVu
bW9kZSBfX21vZGUsIGludF90eXBlIF9fcykKICAgIDogX19zdHJlYW1idWZfdHlwZSgpLCBfTV9m
aWxlKDApLCBfTV9zdGF0ZV9jdXIoX19zdGF0ZV90eXBlKCkpLAogICAgX01fc3RhdGVfYmVnKF9f
c3RhdGVfdHlwZSgpKSwgX01fYnVmX2FsbG9jYXRlZChmYWxzZSksCiAgICBfTV9sYXN0X292ZXJm
bG93ZWQoZmFsc2UpCiAgICB7CiAgICAgIF9NX2FsbG9jYXRlX2ZpbGUoKTsKICAgICAgX01fZmls
ZS0+c3lzX29wZW4oX19mLCBfX21vZGUpOwogICAgICBpZiAodGhpcy0+aXNfb3BlbigpKQogICAg
ICAgIHsKICAgICAgICAgIF9NX21vZGUgPSBfX21vZGU7CiAgICAgICAgICBpZiAoX19zKQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgX01fYnVmX3NpemVfb3B0ID0gX19zOwogICAgICAgICAg
ICAgIF9NX2FsbG9jYXRlX2ludGVybmFsX2J1ZmZlcigpOwogICAgICAgICAgICAgIF9NX3NldF9p
bmRldGVybWluYXRlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIF9NX2FsbG9jYXRlX3BiYWNr
X2J1ZmZlcigpOwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjpfX2Zp
bGVidWZfdHlwZSoKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVu
KGNvbnN0IGNoYXIqIF9fcywgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSkKICAgIHsKICAgICAg
X19maWxlYnVmX3R5cGUgKl9fcmV0ID0gMDsKICAgICAgaWYgKCF0aGlzLT5pc19vcGVuKCkpCiAg
ICAgICAgewogICAgICAgICAgX01fYWxsb2NhdGVfZmlsZSgpOwogICAgICAgICAgX01fZmlsZS0+
b3BlbihfX3MsIF9fbW9kZSk7CiAgICAgICAgICBpZiAodGhpcy0+aXNfb3BlbigpKQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgX01fYWxsb2NhdGVfaW50ZXJuYWxfYnVmZmVyKCk7CiAgICAg
ICAgICAgICAgX01fYWxsb2NhdGVfcGJhY2tfYnVmZmVyKCk7CiAgICAgICAgICAgICAgX01fbW9k
ZSA9IF9fbW9kZTsKCgogICAgICAgICAgICAgIF9NX3NldF9pbmRldGVybWluYXRlKCk7CiAgICAg
ICAgICAgICAgaWYgKF9fbW9kZSAmIGlvc19iYXNlOjphdGUKICAgICAgICAgICAgICAgICAgJiYg
dGhpcy0+c2Vla29mZigwLCBpb3NfYmFzZTo6ZW5kLCBfX21vZGUpIDwgMCkKICAgICAgICAgICAg
ICAgIHRoaXMtPmNsb3NlKCk7CiAgICAgICAgICAgICAgX19yZXQgPSB0aGlzOwogICAgICAgICAg
ICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBf
VHJhaXRzPjo6X19maWxlYnVmX3R5cGUqCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0
cz46OgogICAgY2xvc2UoKQogICAgewogICAgICBfX2ZpbGVidWZfdHlwZSAqX19yZXQgPSAwOwog
ICAgICBpZiAodGhpcy0+aXNfb3BlbigpKQogICAgICAgIHsKICAgICAgICAgIGJvb2wgX190ZXN0
cHV0ID0gX01fb3V0X2N1ciAmJiBfTV9vdXRfYmVnIDwgX01fb3V0X2VuZDsKICAgICAgICAgIGlm
IChfX3Rlc3RwdXQpCiAgICAgICAgICAgIF9NX3JlYWxseV9vdmVyZmxvdyh0cmFpdHNfdHlwZTo6
ZW9mKCkpOwoKCiAgICAgICAgICBfTV9wYmFja19kZXN0cm95KCk7CiMgMTkyICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvZnN0cmVhbS50Y2MiIDMKICAgICAgICAgIF9NX21vZGUgPSBp
b3NfYmFzZTo6b3Blbm1vZGUoMCk7CiAgICAgICAgICBfTV9kZXN0cm95X2ludGVybmFsX2J1ZmZl
cigpOwoKICAgICAgICAgIGlmIChfTV9wYmFjaykKICAgICAgICAgICAgewogICAgICAgICAgICAg
IGRlbGV0ZSBbXSBfTV9wYmFjazsKICAgICAgICAgICAgICBfTV9wYmFjayA9IDA7CiAgICAgICAg
ICAgIH0KICAgICAgICAgIF9fcmV0ID0gdGhpczsKICAgICAgICB9CgoKCiAgICAgIGlmIChfTV9m
aWxlKQogICAgICAgIHsKICAgICAgICAgIGRlbGV0ZSBfTV9maWxlOwogICAgICAgICAgX01fZmls
ZSA9IDA7CiAgICAgICAgfQogICAgICBfTV9sYXN0X292ZXJmbG93ZWQgPSBmYWxzZTsKICAgICAg
cmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0
cz46OgogICAgc2hvd21hbnljKCkKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IC0xOwog
ICAgICBib29sIF9fdGVzdGluID0gX01fbW9kZSAmIGlvc19iYXNlOjppbjsKCiAgICAgIGlmIChf
X3Rlc3RpbikKICAgICAgICB7CiAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IGZhbHNlOwogICAg
ICAgICAgaWYgKF9NX2luX2N1ciA+PSBfTV9pbl9lbmQpCiAgICAgICAgICAgIF9fdGVzdGVvZiA9
IHRoaXMtPnVuZGVyZmxvdygpID09IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgIGlmICgh
X190ZXN0ZW9mKQogICAgICAgICAgICBfX3JldCA9IF9NX2luX2VuZCAtIF9NX2luX2N1cjsKICAg
ICAgICB9CiAgICAgIF9NX2xhc3Rfb3ZlcmZsb3dlZCA9IGZhbHNlOwogICAgICByZXR1cm4gX19y
ZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX2Zp
bGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICB1bmRlcmZsb3coKQogICAgewogICAgICBpbnRf
dHlwZSBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9N
X21vZGUgJiBpb3NfYmFzZTo6aW47CiAgICAgIGJvb2wgX190ZXN0b3V0ID0gX01fbW9kZSAmIGlv
c19iYXNlOjpvdXQ7CgoKICAgICAgaWYgKF9fdGVzdGluKQogICAgICAgIHsKCgoKICAgICAgICAg
IGlmIChfTV9wYmFja19pbml0KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX01fcGJhY2tf
ZGVzdHJveSgpOwogICAgICAgICAgICAgIGlmIChfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAg
ICAgICAgICAgICByZXR1cm4gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCpfTV9pbl9jdXIpOwog
ICAgICAgICAgICB9CgogICAgICAgICAgYm9vbCBfX3Rlc3RnZXQgPSBfTV9pbl9jdXIgJiYgX01f
aW5fYmVnIDwgX01faW5fY3VyOwogICAgICAgICAgYm9vbCBfX3Rlc3Rpbml0ID0gX01faXNfaW5k
ZXRlcm1pbmF0ZSgpOwoKCiAgICAgICAgICBpZiAoX190ZXN0Z2V0KQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgaWYgKF9fdGVzdG91dCkKICAgICAgICAgICAgICAgIF9NX3JlYWxseV9vdmVy
ZmxvdygpOwoKCgoKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfTV9maWxlLT5z
ZWVrb2ZmKF9NX2luX2N1ciAtIF9NX2luX2JlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW9zX2Jhc2U6OmN1ciwgaW9zX2Jhc2U6OmluKTsKICAgICAgICAgICAgfQoKICAgICAg
ICAgIGlmIChfX3Rlc3Rpbml0IHx8IF9fdGVzdGdldCkKICAgICAgICAgICAgewoKICAgICAgICAg
ICAgICBzdHJlYW1zaXplIF9fc2l6ZSA9IF9NX2ZpbGUtPnhzZ2V0bihfTV9pbl9iZWcsIF9NX2J1
Zl9zaXplKTsKICAgICAgICAgICAgICBpZiAoMCA8IF9fc2l6ZSkKICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgX01fc2V0X2RldGVybWluYXRlKF9fc2l6ZSk7CiAgICAgICAgICAg
ICAgICAgIGlmIChfX3Rlc3RvdXQpCiAgICAgICAgICAgICAgICAgICAgX01fb3V0X2N1ciA9IF9N
X2luX2N1cjsKICAgICAgICAgICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5
cGUoKl9NX2luX2N1cik7CgoKCgoKCiAgICAgICAgICAgICAgICAgIHN0cmVhbW9mZiBfX3AgPSBf
TV9maWxlLT5zZWVrb2ZmKDAgLSBfX3NpemUsIGlvc19iYXNlOjpjdXIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppbik7CiAgICAg
ICAgICAgICAgICAgIGlmIChfX3AgPT0gLTEpCiAgICAgICAgICAgICAgICAgICAgewoKICAgICAg
ICAgICAgICAgICAgICB9CgoKCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAg
ICB9CiAgICAgIF9NX2xhc3Rfb3ZlcmZsb3dlZCA9IGZhbHNlOwogICAgICByZXR1cm4gX19yZXQ7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX2ZpbGVi
dWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBwYmFja2ZhaWwoaW50X3R5cGUgX19pKQogICAgewog
ICAgICBpbnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgYm9vbCBfX3Rl
c3RpbiA9IF9NX21vZGUgJiBpb3NfYmFzZTo6aW47CgogICAgICBpZiAoX190ZXN0aW4pCiAgICAg
ICAgewogICAgICAgICAgYm9vbCBfX3Rlc3RwYiA9IF9NX2luX2JlZyA8IF9NX2luX2N1cjsKICAg
ICAgICAgIGNoYXJfdHlwZSBfX2MgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9faSk7CiAg
ICAgICAgICBib29sIF9fdGVzdGVvZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2ksIF9f
cmV0KTsKCiAgICAgICAgICBpZiAoX190ZXN0cGIpCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBib29sIF9fdGVzdG91dCA9IF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0OwogICAgICAgICAgICAg
IGJvb2wgX190ZXN0ZXEgPSB0cmFpdHNfdHlwZTo6ZXEoX19jLCB0aGlzLT5ncHRyKClbLTFdKTsK
CgoKICAgICAgICAgICAgICBpZiAoIV9fdGVzdGVvZiAmJiBfX3Rlc3RlcSkKICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgLS1fTV9pbl9jdXI7CiAgICAgICAgICAgICAgICAgIGlm
IChfX3Rlc3RvdXQpCiAgICAgICAgICAgICAgICAgICAgLS1fTV9vdXRfY3VyOwogICAgICAgICAg
ICAgICAgICBfX3JldCA9IF9faTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNl
IGlmIChfX3Rlc3Rlb2YpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIC0tX01f
aW5fY3VyOwogICAgICAgICAgICAgICAgICBpZiAoX190ZXN0b3V0KQogICAgICAgICAgICAgICAg
ICAgIC0tX01fb3V0X2N1cjsKICAgICAgICAgICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6
bm90X2VvZihfX2kpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UgaWYgKCFf
X3Rlc3Rlb2YpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIC0tX01faW5fY3Vy
OwogICAgICAgICAgICAgICAgICBpZiAoX190ZXN0b3V0KQogICAgICAgICAgICAgICAgICAgIC0t
X01fb3V0X2N1cjsKICAgICAgICAgICAgICAgICAgX01fcGJhY2tfY3JlYXRlKCk7CiAgICAgICAg
ICAgICAgICAgICpfTV9pbl9jdXIgPSBfX2M7CiAgICAgICAgICAgICAgICAgIF9fcmV0ID0gX19p
OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNlZWtvZmYoLTEsIGlvc19iYXNlOjpjdXIpOwog
ICAgICAgICAgICAgIHRoaXMtPnVuZGVyZmxvdygpOwogICAgICAgICAgICAgIGlmICghX190ZXN0
ZW9mKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBl
OjplcShfX2MsICpfTV9pbl9jdXIpKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICAgIF9NX3BiYWNrX2NyZWF0ZSgpOwogICAgICAgICAgICAgICAgICAgICAgKl9NX2lu
X2N1ciA9IF9fYzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIF9fcmV0
ID0gX19pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6Om5vdF9lb2YoX19pKTsKICAgICAgICAgICAgfQogICAg
ICAgIH0KICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0gZmFsc2U7CiAgICAgIHJldHVybiBfX3Jl
dDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfZmls
ZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG92ZXJmbG93KGludF90eXBlIF9fYykKICAgIHsK
ICAgICAgaW50X3R5cGUgX19yZXQgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgIGJvb2wgX190
ZXN0cHV0ID0gX01fb3V0X2N1ciAmJiBfTV9vdXRfY3VyIDwgX01fYnVmICsgX01fYnVmX3NpemU7
CiAgICAgIGJvb2wgX190ZXN0b3V0ID0gX01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7CgogICAgICBp
ZiAoX190ZXN0b3V0KQogICAgICAgIHsKICAgICAgICAgIGlmIChfX3Rlc3RwdXQpCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAqX01fb3V0X2N1ciA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5
cGUoX19jKTsKICAgICAgICAgICAgICBfTV9vdXRfY3VyX21vdmUoMSk7CiAgICAgICAgICAgICAg
X19yZXQgPSB0cmFpdHNfdHlwZTo6bm90X2VvZihfX2MpOwogICAgICAgICAgICB9CiAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgIF9fcmV0ID0gdGhpcy0+X01fcmVhbGx5X292ZXJmbG93KF9fYyk7
CiAgICAgICAgfQoKICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0gZmFsc2U7CiAgICAgIHJldHVy
biBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFz
aWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIF9NX3JlYWxseV9vdmVyZmxvdyhpbnRf
dHlwZSBfX2MpCiAgICB7CiAgICAgIGludF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5cGU6OmVvZigp
OwogICAgICBib29sIF9fdGVzdHB1dCA9IF9NX291dF9jdXIgJiYgX01fb3V0X2JlZyA8IF9NX291
dF9lbmQ7CiAgICAgIGJvb2wgX190ZXN0dW5idWZmZXJlZCA9IF9NX2ZpbGUgJiYgIV9NX2J1Zl9z
aXplOwoKICAgICAgaWYgKF9fdGVzdHB1dCB8fCBfX3Rlc3R1bmJ1ZmZlcmVkKQogICAgICAgIHsK
CiAgICAgICAgICBpbnQgX19wbGVuID0gX01fb3V0X2VuZCAtIF9NX291dF9iZWc7CiAgICAgICAg
ICBzdHJlYW1zaXplIF9fbGVuID0gMDsKCiAgICAgICAgICBpZiAoX19wbGVuKQogICAgICAgICAg
ICBfX2xlbiA9IF9NX2ZpbGUtPnhzcHV0bihfTV9vdXRfYmVnLCBfX3BsZW4pOwoKICAgICAgICAg
IGlmIChfX2MgIT10cmFpdHNfdHlwZTo6ZW9mKCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBjaGFyX3R5cGUgX19wZW5kaW5nID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwog
ICAgICAgICAgICAgIF9fbGVuICs9IF9NX2ZpbGUtPnhzcHV0bigmX19wZW5kaW5nLCAxKTsKICAg
ICAgICAgICAgICArK19fcGxlbjsKICAgICAgICAgICAgfQoKCgogICAgICAgICAgX01fZmlsZS0+
c3luYygpOwogICAgICAgICAgaWYgKF9fbGVuID09IF9fcGxlbikKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIF9NX3NldF9pbmRldGVybWluYXRlKCk7CiAgICAgICAgICAgICAgX19yZXQgPSB0
cmFpdHNfdHlwZTo6bm90X2VvZihfX2MpOwogICAgICAgICAgICB9CiMgNDcyICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvZnN0cmVhbS50Y2MiIDMKICAgICAgICB9CiAgICAgIF9NX2xh
c3Rfb3ZlcmZsb3dlZCA9IHRydWU7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfZmlsZWJ1Zjxf
Q2hhclQsIF9UcmFpdHM+OjpfX3N0cmVhbWJ1Zl90eXBlKgogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hh
clQsIF9UcmFpdHM+OjoKICAgIHNldGJ1ZihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24p
CiAgICB7CiAgICAgIGlmICghdGhpcy0+aXNfb3BlbigpICYmIF9fcyA9PSAwICYmIF9fbiA9PSAw
KQogICAgICAgIF9NX2J1Zl9zaXplX29wdCA9IDA7CiAgICAgIGVsc2UgaWYgKF9fcyAmJiBfX24p
CiAgICAgICAgewoKCgoKCiAgICAgICAgICBfTV9kZXN0cm95X2ludGVybmFsX2J1ZmZlcigpOwoK
CiAgICAgICAgICBfTV9idWYgPSBfX3M7CiAgICAgICAgICBfTV9idWZfc2l6ZV9vcHQgPSBfTV9i
dWZfc2l6ZSA9IF9fbjsKICAgICAgICAgIF9NX3NldF9pbmRldGVybWluYXRlKCk7CgoKICAgICAg
ICAgIF9NX2FsbG9jYXRlX3BiYWNrX2J1ZmZlcigpOwogICAgICAgIH0KICAgICAgX01fbGFzdF9v
dmVyZmxvd2VkID0gZmFsc2U7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19maWxlYnVmPF9DaGFy
VCwgX1RyYWl0cz46OnBvc190eXBlCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46
OgogICAgc2Vla29mZihvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXksIGlv
c19iYXNlOjpvcGVubW9kZSBfX21vZGUpCiAgICB7CiAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9z
X3R5cGUob2ZmX3R5cGUoLTEpKTsKICAgICAgYm9vbCBfX3Rlc3RvcGVuID0gdGhpcy0+aXNfb3Bl
bigpOwogICAgICBib29sIF9fdGVzdGluID0gX19tb2RlICYgaW9zX2Jhc2U6OmluICYmIF9NX21v
ZGUgJiBpb3NfYmFzZTo6aW47CiAgICAgIGJvb2wgX190ZXN0b3V0ID0gX19tb2RlICYgaW9zX2Jh
c2U6Om91dCAmJiBfTV9tb2RlICYgaW9zX2Jhc2U6Om91dDsKCgogICAgICBpbnQgX193aWR0aCA9
IHVzZV9mYWNldDxfX2NvZGVjdnRfdHlwZT4oX01fYnVmX2xvY2FsZSkuZW5jb2RpbmcoKTsKICAg
ICAgaWYgKF9fd2lkdGggPCAwKQogICAgICAgIF9fd2lkdGggPSAwOwogICAgICBib29sIF9fdGVz
dGZhaWwgPSBfX29mZiAhPSAwICYmIF9fd2lkdGggPD0gMDsKCiAgICAgIGlmIChfX3Rlc3RvcGVu
ICYmICFfX3Rlc3RmYWlsICYmIChfX3Rlc3RpbiB8fCBfX3Rlc3RvdXQpKQogICAgICAgIHsKCiAg
ICAgICAgICBfTV9wYmFja19kZXN0cm95KCk7CgogICAgICAgICAgaWYgKF9fd2F5ICE9IGlvc19i
YXNlOjpjdXIgfHwgX19vZmYgIT0gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIG9mZl90
eXBlIF9fY29tcHV0ZWRfb2ZmID0gX193aWR0aCAqIF9fb2ZmOwoKICAgICAgICAgICAgICBib29s
IF9fdGVzdGdldCA9IF9NX2luX2N1ciAmJiBfTV9pbl9iZWcgPCBfTV9pbl9lbmQ7CiAgICAgICAg
ICAgICAgYm9vbCBfX3Rlc3RwdXQgPSBfTV9vdXRfY3VyICYmIF9NX291dF9iZWcgPCBfTV9vdXRf
ZW5kOwoKCiAgICAgICAgICAgICAgaWYgKF9fdGVzdHB1dCB8fCBfTV9sYXN0X292ZXJmbG93ZWQp
CiAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICB0aGlzLT5zeW5jKCk7CgogICAg
ICAgICAgICAgICAgICBfTV9vdXRwdXRfdW5zaGlmdCgpOwogICAgICAgICAgICAgICAgfQoKCiAg
ICAgICAgICAgICAgZWxzZSBpZiAoX190ZXN0Z2V0ICYmIF9fd2F5ID09IGlvc19iYXNlOjpjdXIp
CiAgICAgICAgICAgICAgICBfX2NvbXB1dGVkX29mZiArPSBfTV9pbl9jdXIgLSBfTV9pbl9iZWc7
CgogICAgICAgICAgICAgIF9fcmV0ID0gX01fZmlsZS0+c2Vla29mZihfX2NvbXB1dGVkX29mZiwg
X193YXksIF9fbW9kZSk7CiAgICAgICAgICAgICAgX01fc2V0X2luZGV0ZXJtaW5hdGUoKTsKICAg
ICAgICAgICAgfQoKCiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBf
X3JldCA9IF9NX2ZpbGUtPnNlZWtvZmYoX19vZmYsIGlvc19iYXNlOjpjdXIsIF9fbW9kZSk7CiAg
ICAgICAgICAgICAgX19yZXQgKz0gbWF4KF9NX291dF9jdXIsIF9NX2luX2N1cikgLSBfTV9idWY7
CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF9NX2xhc3Rfb3ZlcmZsb3dlZCA9IGZhbHNl
OwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6cG9z
X3R5cGUKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzZWVrcG9zKHBv
c190eXBlIF9fcG9zLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKQogICAgewogICAgICBwb3Nf
dHlwZSBfX3JldDsKICAgICAgb2ZmX3R5cGUgX19vZmYgPSBfX3BvczsKCiAgICAgIF9fcmV0ID0g
dGhpcy0+c2Vla29mZihfX29mZiwgaW9zX2Jhc2U6OmJlZywgX19tb2RlKTsKCiAgICAgIF9NX2xh
c3Rfb3ZlcmZsb3dlZCA9IGZhbHNlOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2lj
X2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBfTV9vdXRwdXRfdW5zaGlmdCgpCiAgICB7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9p
ZAogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGltYnVlKGNvbnN0IGxv
Y2FsZSYgX19sb2MpCiAgICB7CiAgICAgIGJvb2wgX190ZXN0YmVnID0gZ3B0cigpID09IGViYWNr
KCkgJiYgcHB0cigpID09IHBiYXNlKCk7CgogICAgICBpZiAoX190ZXN0YmVnICYmIF9NX2J1Zl9s
b2NhbGUgIT0gX19sb2MpCiAgICAgICAgewogICAgICAgICAgX01fYnVmX2xvY2FsZSA9IF9fbG9j
OwogICAgICAgICAgX01fYnVmX2xvY2FsZV9pbml0ID0gdHJ1ZTsKICAgICAgICB9CgoKCgoKICAg
ICAgX01fbGFzdF9vdmVyZmxvd2VkID0gZmFsc2U7CiAgICB9Cgp9CiMgNDIxICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2ZzdHJlYW0uaCIgMiAzCiMgMzMgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYmFja3dhcmQvZnN0cmVhbS5oIiAyIDMKCnVzaW5nIHN0ZDo6ZmlsZWJ1
ZjsKdXNpbmcgc3RkOjppZnN0cmVhbTsKdXNpbmcgc3RkOjpvZnN0cmVhbTsKdXNpbmcgc3RkOjpm
c3RyZWFtOwp1c2luZyBzdGQ6OnN0cmVhbXBvczsKIyA1OSAic3RzdHJpbmcuaCIgMgojIDExNCAi
c3RzdHJpbmcuaCIKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIHNUQnVmZmVyCnsKcHJvdGVjdGVk
OgogICAgICAgIGludCBtX3JlZl9jbnQ7CiAgICAgICAgaW50IG1fc2l6ZTsKICAgICAgICBUICog
bV9idWY7CgogICAgICAgIH5zVEJ1ZmZlciAoKQogICAgICAgIHsgOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgaWYgKG1fYnVmKSBkZWxldGUgW10g
bV9idWY7IH0KCnB1YmxpYzoKCiAgICAgICAgc3RhdGljIHZvaWQgY29weSAoVCAqIHRndCwgY29u
c3QgVCAqIHNyYywgaW50IGxlbikKICAgICAgICB7IGZvciAoaW50IGxfaSA9IDA7IGxfaSA8IGxl
bjsgbF9pKyspIHRndFtsX2ldID0gc3JjW2xfaV07IH0KCgoKICAgICAgICBzVEJ1ZmZlciAoaW50
IHNpemUpCiAgICAgICAgewogICAgICAgICAgICAgICAgbV9yZWZfY250ID0gMTsKICAgICAgICAg
ICAgICAgIGlmIChzaXplID4gMCkgbV9zaXplID0gc2l6ZTsKICAgICAgICAgICAgICAgIGVsc2Ug
bV9zaXplID0gNTA7CiAgICAgICAgICAgICAgICBtX2J1ZiA9IG5ldyBUIFttX3NpemVdOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKICAgICAgICB9CgoKICAgICAgICBzVEJ1ZmZlciAqIENvcHkgKHZvaWQpCiAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAg
ICAgICAgIG1fcmVmX2NudCsrOwogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAg
fQoKCiAgICAgICAgdm9pZCBSZWxlYXNlICh2b2lkKQogICAgICAgIHsKICAgICAgICAgICAgICAg
IG1fcmVmX2NudC0tOwogICAgICAgICAgICAgICAgaWYgKG1fcmVmX2NudCA9PSAwKSBkZWxldGUg
dGhpczsKICAgICAgICB9CgoKICAgICAgICBzVEJ1ZmZlciAqIFdyaXRlYWJsZSAodm9pZCkKICAg
ICAgICB7CiAgICAgICAgICAgICAgICBpZiAobV9yZWZfY250ID4gMSkKICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgIHNUQnVmZmVyPFQ+ICogbmV3X2J1ZiA9IG5ldyBzVEJ1ZmZlcjxU
PiAobV9zaXplKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGNvcHkgKG5ld19idWYtPm1fYnVm
LCBtX2J1ZiwgbV9zaXplKTsKICAgICAgICAgICAgICAgICAgICAgICAgbV9yZWZfY250LS07CiAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdfYnVmOwogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQoKCiAgICAgICAgc1RCdWZmZXIg
KiBSZXNpemUgKGludCBzaXplKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChtX3JlZl9j
bnQgPiAxKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
V3JpdGVhYmxlICgpLT5SZXNpemUgKHNpemUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgZWxzZSBpZiAoc2l6ZSA+IG1fc2l6ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgIGludCBuZXdfc2l6ZSA9IDUwICogKHNpemUgLyA1MCArIDEpOwogICAgICAgICAgICAg
ICAgVCAqIHQgPSBtX2J1ZjsKCiAgICAgICAgICAgICAgICAgICAgICAgIG1fYnVmID0gbmV3IFQg
W25ld19zaXplXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
ICAgICAgICAgICAgICAgICAgICAgICAgY29weSAobV9idWYsIHQsIG1fc2l6ZSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgIG1fc2l6ZSA9IG5ld19zaXplOwogICAgICAgICAgICAgICAgICAgICAg
ICBkZWxldGUgW10gdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzOwogICAgICAgIH0KCgogICAgICAgIFQgKiBHZXRQb2ludGVyICh2b2lkKSB7IHJldHVybiBt
X2J1ZjsgfQoKICAgICAgICBjb25zdCBUICogR2V0UG9pbnRlciAodm9pZCkgY29uc3QgeyByZXR1
cm4gbV9idWY7IH0KCiAgICAgICAgaW50IEdldFNpemUgKHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1f
c2l6ZTsgfQp9OwojIDIyNSAic3RzdHJpbmcuaCIKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIHNU
U3RyaW5nCnsKcHJvdGVjdGVkOgogICAgICAgIGludCBsZW47CiAgICAgICAgc1RCdWZmZXI8VD4g
KiBwX2R5bl9idWY7CgpwdWJsaWM6CgogICAgICAgIHZvaWQgQ2xlYXIgKHZvaWQpIHsgbGVuID0g
MDsgYmVnaW4gKClbMF0gPSAwOyB9CgoKCiAgICB0eXBlZGVmIFQgKiBpdGVyYXRvcjsKICAgIHR5
cGVkZWYgY29uc3QgVCAqIGNvbnN0X2l0ZXJhdG9yOwoKICAgIGl0ZXJhdG9yIGJlZ2luICgpIHsg
OyBwX2R5bl9idWYgPSBwX2R5bl9idWYtPldyaXRlYWJsZSAoKTsgcmV0dXJuIHBfZHluX2J1Zi0+
R2V0UG9pbnRlciAoKTsgfQogICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IDsgcmV0
dXJuIHBfZHluX2J1Zi0+R2V0UG9pbnRlciAoKTsgfQoKICAgIGl0ZXJhdG9yIGVuZCAoKSB7IDsg
cF9keW5fYnVmID0gcF9keW5fYnVmLT5Xcml0ZWFibGUgKCk7IHJldHVybiBwX2R5bl9idWYtPkdl
dFBvaW50ZXIgKCkgKyBsZW47IH0KICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCAoKSBjb25zdCB7IDsg
cmV0dXJuIHBfZHluX2J1Zi0+R2V0UG9pbnRlciAoKSArIGxlbjsgfQoKICAgICAgICBpdGVyYXRv
ciBmaW5kIChjb25zdCBUIGMpCiAgICAgICAgeyBpbnQgcG9zID0gRmluZCAoYyk7CiAgICAgICAg
ICAgICAgICBpZiAocG9zID49IDApCiAgICAgICAgICAgICAgICB7IHBfZHluX2J1ZiA9IHBfZHlu
X2J1Zi0+V3JpdGVhYmxlICgpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcF9keW5f
YnVmLT5HZXRQb2ludGVyICgpK3BvczsgfQogICAgICAgICAgICAgICAgcmV0dXJuIGVuZCAoKTsg
fQoKICAgICAgICBjb25zdF9pdGVyYXRvciBmaW5kIChjb25zdCBUIGMpIGNvbnN0CiAgICAgICAg
eyBpbnQgcG9zID0gRmluZCAoYyk7CiAgICAgICAgICAgICAgICBpZiAocG9zID49IDApIHJldHVy
biBwX2R5bl9idWYtPkdldFBvaW50ZXIgKCkrcG9zOwogICAgICAgICAgICAgICAgcmV0dXJuIGVu
ZCAoKTsgfQojIDI3MSAic3RzdHJpbmcuaCIKICAgICAgICB2b2lkIFJlc2l6ZVRvRml0IChpbnQg
bmV3X3NpemUpCiAgICAgICAgeyA7CiAgICAgICAgICAgICAgICBwX2R5bl9idWYgPSBwX2R5bl9i
dWYtPlJlc2l6ZSAobmV3X3NpemUpOyB9CgoKICAgICAgICBzdGF0aWMgaW50IHRzdHJsZW4gKGNv
bnN0IFQgKiB0c3RyKQogICAgICAgICAgICAgICAgeyBpbnQgbGVuOyBmb3IgKGxlbiA9IDA7IHRz
dHJbbGVuXSAhPSAwOyBsZW4rKyk7IHJldHVybiBsZW47IH07CgogICAgICAgIHN0YXRpYyB2b2lk
IGNvcHkgKFQgKiB0Z3QsIGNvbnN0IFQgKiBzcmMsIGludCBsZW4pCiAgICAgICAgICAgICAgICB7
IHNUQnVmZmVyPFQ+Ojpjb3B5ICh0Z3Qsc3JjLGxlbik7IH0KCgoKICAgICAgICBzdGF0aWMgaW50
IElzVXBwZXIgKGNvbnN0IFQgYykgeyByZXR1cm4gKGMgPj0gKFQpJ0EnICYmIGMgPD0gKFQpJ1on
KTsgfQogICAgICAgIHN0YXRpYyBpbnQgSXNMb3dlciAoY29uc3QgVCBjKSB7IHJldHVybiAoYyA+
PSAoVCknYScgJiYgYyA8PSAoVCkneicpOyB9CiAgICAgICAgc3RhdGljIGludCBJc0RpZ2l0IChj
b25zdCBUIGMpIHsgcmV0dXJuIChjID49IChUKScwJyAmJiBjIDw9IChUKSc5Jyk7IH0KCiAgICAg
ICAgc3RhdGljIGludCBJc1NwYWNlIChjb25zdCBUIGMpCiAgICAgICAgICAgICAgICB7IHJldHVy
biAoYyA9PSAoVCkweDIwIHx8IChjID49IChUKTB4MDkgJiYgYyA8PSAoVCkweDBEKSk7IH0KCiAg
ICAgICAgc3RhdGljIGNvbnN0IFQgVG9VcHBlciAoY29uc3QgVCBjKQogICAgICAgIHsgaWYgKElz
TG93ZXIgKGMpKSByZXR1cm4gKFQpKGMgLSAzMik7IHJldHVybiBjOyB9CiAgICAgICAgc3RhdGlj
IGNvbnN0IFQgVG9Mb3dlciAoY29uc3QgVCBjKQogICAgICAgIHsgaWYgKElzVXBwZXIgKGMpKSBy
ZXR1cm4gKFQpKGMgKyAzMik7IHJldHVybiBjOyB9CiMgMzA4ICJzdHN0cmluZy5oIgogICAgICAg
IHN0YXRpYyBjb25zdCBUICogVHJpbSAoY29uc3QgVCAqIHRzdHIpCiAgICAgICAgICAgICAgICB7
IHdoaWxlIChJc1NwYWNlICgqdHN0cikpIHRzdHIrKzsgcmV0dXJuIHRzdHI7IH0KICAgICAgICBz
dGF0aWMgVCAqIFRyaW0gKFQgKiB0c3RyKQogICAgICAgICAgICAgICAgeyB3aGlsZSAoSXNTcGFj
ZSAoKnRzdHIpKSB0c3RyKys7IHJldHVybiB0c3RyOyB9CiMgMzI1ICJzdHN0cmluZy5oIgogICAg
ICAgIHN0YXRpYyBjb25zdCBUICogU2NhbiAoY29uc3QgVCAqIHRzdHIpCiAgICAgICAgICAgICAg
ICB7IHdoaWxlICgqdHN0ciAmJiAhSXNTcGFjZSAoKnRzdHIpKSB0c3RyKys7IHJldHVybiB0c3Ry
OyB9CiAgICAgICAgc3RhdGljIFQgKiBTY2FuIChUICogdHN0cikKICAgICAgICAgICAgICAgIHsg
d2hpbGUgKCp0c3RyICYmICFJc1NwYWNlICgqdHN0cikpIHRzdHIrKzsgcmV0dXJuIHRzdHI7IH0K
IyAzNDIgInN0c3RyaW5nLmgiCiAgICAgICAgc3RhdGljIGNvbnN0IFQgKiBHZXROdW0gKGNvbnN0
IFQgKiB0c3RyLCBsb25nICYgbnVtKQogICAgICAgIHsgbnVtID0gMDsKICAgICAgICAgICAgICAg
IHdoaWxlIChJc0RpZ2l0ICgqdHN0cikpCiAgICAgICAgICAgICAgICAgICAgICAgIHsgbnVtICo9
IDEwOyBudW0gKz0gKnRzdHIgLSAoVCknMCc7IHRzdHIrKzsgfQogICAgICAgICAgICAgICAgcmV0
dXJuIHRzdHI7IH0KCgoKICAgICAgICBzVFN0cmluZyAoY29uc3Qgc1RTdHJpbmcgJiBzdHIpCiAg
ICAgICAgeyBsZW4gPSBzdHIubGVuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwogICAgICAgICAgICAgICAgcF9keW5fYnVmID0gc3RyLnBfZHluX2J1Zi0+Q29w
eSAoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyB9CgogICAgICAg
IHNUU3RyaW5nIChjb25zdCBUICogcCA9IDAsIGludCBsID0gLTEpCiAgICAgICAgeyBpZiAoIXAp
IGxlbiA9IDA7CiAgICAgICAgICAgICAgICBlbHNlIGlmIChsIDwgMCkgbGVuID0gdHN0cmxlbiAo
cCk7CiAgICAgICAgICAgICAgICBlbHNlIGxlbiA9IGw7CiAgICAgICAgICAgICAgICBwX2R5bl9i
dWYgPSBuZXcgc1RCdWZmZXI8VD4gKGxlbiA/IGxlbisxIDogNTApOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICBpZiAocCkgY29weSAocF9k
eW5fYnVmLT5HZXRQb2ludGVyICgpLCBwLCBsZW4pOwogICAgICAgICAgICAgICAgcF9keW5fYnVm
LT5HZXRQb2ludGVyICgpW2xlbl0gPSAwOyB9CgogICAgICAgIHNUU3RyaW5nIChjb25zdCBUIGMp
CiAgICAgICAgeyBsZW4gPSAxOwogICAgICAgICAgICAgICAgcF9keW5fYnVmID0gbmV3IHNUQnVm
ZmVyPFQ+IChsZW4rMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
ICAgICAgICAgICAgICAgIFQgKiBwID0gcF9keW5fYnVmLT5HZXRQb2ludGVyICgpOwogICAgICAg
ICAgICAgICAgcFswXSA9IGM7IHBbMV0gPSAwOyB9CgoKCiAgICAgICAgfnNUU3RyaW5nICgpCiAg
ICAgICAgeyA7CiAgICAgICAgICAgICAgICBwX2R5bl9idWYtPlJlbGVhc2UgKCk7IH0KCgoKICAg
ICAgICBzVFN0cmluZyAmIG9wZXJhdG9yPSAoY29uc3Qgc1RTdHJpbmcgJiBzdHIpCiAgICAgICAg
eyA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg
ICAgICAgICBwX2R5bl9idWYtPlJlbGVhc2UgKCk7CiAgICAgICAgICAgICAgICBsZW4gPSBzdHIu
bGVuOwogICAgICAgICAgICAgICAgcF9keW5fYnVmID0gc3RyLnBfZHluX2J1Zi0+Q29weSAoKTsK
ICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsgfQoKICAgICAgICBzVFN0cmluZyAmIG9wZXJh
dG9yPSAoY29uc3QgVCAqIHApCiAgICAgICAgeyA7CiAgICAgICAgICAgICAgICBpZiAoIXApIGxl
biA9IDA7IGVsc2UgbGVuID0gdHN0cmxlbiAocCk7CiAgICAgICAgICAgICAgICBwX2R5bl9idWYg
PSBwX2R5bl9idWYtPlJlc2l6ZSAobGVuKzEpOwogICAgICAgICAgICAgICAgaWYgKHApIGNvcHkg
KHBfZHluX2J1Zi0+R2V0UG9pbnRlciAoKSwgcCwgbGVuKTsKICAgICAgICAgICAgICAgIHBfZHlu
X2J1Zi0+R2V0UG9pbnRlciAoKVtsZW5dID0gMDsKICAgICAgICAgICAgICAgIHJldHVybiAqdGhp
czsgfQoKICAgICAgICBzVFN0cmluZyBvcGVyYXRvcisgKGNvbnN0IFQgYykgY29uc3QgeyBzVFN0
cmluZyBzICgqdGhpcyk7IHJldHVybiAocyArPSBjKTsgfQogICAgICAgIHNUU3RyaW5nIG9wZXJh
dG9yKyAoY29uc3QgVCAqIHApIGNvbnN0IHsgc1RTdHJpbmcgcyAoKnRoaXMpOyByZXR1cm4gKHMg
Kz0gcCk7IH0KICAgICAgICBzVFN0cmluZyBvcGVyYXRvcisgKGNvbnN0IHNUU3RyaW5nICYgc3Ry
KSBjb25zdAogICAgICAgIHsgc1RTdHJpbmcgcyAoKnRoaXMpOyByZXR1cm4gKHMgKz0gc3RyKTsg
fQoKICAgICAgICBzVFN0cmluZyAmIG9wZXJhdG9yKz0gKGNvbnN0IFQgYykKICAgICAgICB7IDsK
ICAgICAgICAgICAgICAgIHBfZHluX2J1ZiA9IHBfZHluX2J1Zi0+UmVzaXplIChsZW4rMik7CiAg
ICAgICAgICAgICAgICBUICogcCA9IHBfZHluX2J1Zi0+R2V0UG9pbnRlciAoKTsKICAgICAgICAg
ICAgICAgIHBbbGVuKytdID0gYzsgcFtsZW5dID0gMDsKICAgICAgICAgICAgICAgIHJldHVybiAq
dGhpczsgfQoKICAgICAgICBzVFN0cmluZyAmIG9wZXJhdG9yKz0gKGNvbnN0IFQgKiBwKQogICAg
ICAgIHsgaWYgKHApCiAgICAgICAgICAgICAgICB7IGludCBsID0gdHN0cmxlbiAocCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAg
ICAgICAgICAgICBwX2R5bl9idWYgPSBwX2R5bl9idWYtPlJlc2l6ZSAobGVuK2wrMSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgIGNvcHkgKHBfZHluX2J1Zi0+R2V0UG9pbnRlciAoKSArIGxlbiwg
cCwgbCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGxlbiArPSBsOyBwX2R5bl9idWYtPkdldFBv
aW50ZXIgKClbbGVuXSA9IDA7IH0KICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsgfQoKICAg
ICAgICBzVFN0cmluZyAmIG9wZXJhdG9yKz0gKGNvbnN0IHNUU3RyaW5nICYgc3RyKQogICAgICAg
IHsgOwogICAgICAgICAgICAgICAgcF9keW5fYnVmID0gcF9keW5fYnVmLT5SZXNpemUgKGxlbitz
dHIubGVuKzEpOwogICAgICAgICAgICAgICAgY29weSAocF9keW5fYnVmLT5HZXRQb2ludGVyICgp
ICsgbGVuLCBzdHIucF9keW5fYnVmLT5HZXRQb2ludGVyICgpLCBzdHIubGVuKTsKICAgICAgICAg
ICAgICAgIGxlbiArPSBzdHIubGVuOyBwX2R5bl9idWYtPkdldFBvaW50ZXIgKClbbGVuXSA9IDA7
CiAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7IH0KCiAgICAgICAgY29uc3QgVCBvcGVyYXRv
cltdIChpbnQgcG9zKSBjb25zdAogICAgICAgIHsgOwogICAgICAgICAgICAgICAgaWYgKDAgPD0g
cG9zICYmIHBvcyA8IGxlbikgcmV0dXJuIHBfZHluX2J1Zi0+R2V0UG9pbnRlciAoKVtwb3NdOyBl
bHNlIHJldHVybiAwOyB9CgogICAgICAgIG9wZXJhdG9yIGNvbnN0IFQgKiAoKSBjb25zdAogICAg
ICAgIHsgOwogICAgICAgICAgICAgICAgcmV0dXJuIHBfZHluX2J1Zi0+R2V0UG9pbnRlciAoKTsg
fQojIDQ0MSAic3RzdHJpbmcuaCIKICAgICAgICBzVFN0cmluZyAmIEFkZENoYXIgKGNvbnN0IFQg
YywgaW50IGNudCA9IDEpCiAgICAgICAgeyA7CiAgICAgICAgICAgICAgICBpZiAoY250ID4gMCkK
ICAgICAgICAgICAgICAgIHsgcF9keW5fYnVmID0gcF9keW5fYnVmLT5SZXNpemUgKGxlbitjbnQr
MSk7CiAgICAgICAgICAgICAgICAgICAgICAgIFQgKiBwID0gcF9keW5fYnVmLT5HZXRQb2ludGVy
ICgpOwogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY250KSB7IHBbbGVuKytdID0gYzsg
Y250LS07IH0KICAgICAgICAgICAgICAgICAgICAgICAgcFtsZW5dID0gMDsgfQogICAgICAgICAg
ICAgICAgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgICBjb25zdCBUICogU3RyICh2b2lkKSBjb25z
dAogICAgICAgIHsgOwogICAgICAgICAgICAgICAgcmV0dXJuIHBfZHluX2J1Zi0+R2V0UG9pbnRl
ciAoKTsgfQojIDQ2MyAic3RzdHJpbmcuaCIKICAgICAgICB2b2lkIFNldEF0IChpbnQgcG9zLCBj
b25zdCBUIGMpCiAgICAgICAgeyA7CiAgICAgICAgICAgICAgICBpZiAoMCA8PSBwb3MgJiYgcG9z
IDwgbGVuKQogICAgICAgICAgICAgICAgeyBwX2R5bl9idWYgPSBwX2R5bl9idWYtPldyaXRlYWJs
ZSAoKTsKICAgICAgICAgICAgICAgICAgICAgICAgcF9keW5fYnVmLT5HZXRQb2ludGVyICgpW3Bv
c10gPSBjOyB9IH0KIyA0ODYgInN0c3RyaW5nLmgiCiAgICAgICAgaW50IENvbXBhcmUgKGNvbnN0
IHNUU3RyaW5nICYgc3RyKSBjb25zdAogICAgICAgIHsgOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgaWYgKHBfZHluX2J1ZiA9PSBz
dHIucF9keW5fYnVmKSByZXR1cm4gMDsKICAgICAgICAgICAgICAgIGludCBsX2k7CiAgICAgICAg
ICAgICAgICBUICogcDEgPSBwX2R5bl9idWYtPkdldFBvaW50ZXIgKCk7CiAgICAgICAgICAgICAg
ICBUICogcDIgPSBzdHIucF9keW5fYnVmLT5HZXRQb2ludGVyICgpOwogICAgICAgICAgICAgICAg
Zm9yIChsX2kgPSAwOyBsX2kgPCBsZW4gJiYgbF9pIDwgc3RyLmxlbjsgbF9pKyspCiAgICAgICAg
ICAgICAgICB7IGlmIChwMVtsX2ldIDwgcDJbbF9pXSkgcmV0dXJuIC0xOwogICAgICAgICAgICAg
ICAgICAgICAgICBpZiAocDFbbF9pXSA+IHAyW2xfaV0pIHJldHVybiAxOyB9CiAgICAgICAgICAg
ICAgICBpZiAobGVuIDwgc3RyLmxlbikgcmV0dXJuIC0xOwogICAgICAgICAgICAgICAgaWYgKGxl
biA+IHN0ci5sZW4pIHJldHVybiAxOwogICAgICAgICAgICAgICAgcmV0dXJuIDA7IH0KCgoKICAg
ICAgICBpbnQgb3BlcmF0b3I9PSAoY29uc3Qgc1RTdHJpbmcgJiBzdHIpIGNvbnN0IHsgcmV0dXJu
IChDb21wYXJlIChzdHIpID09IDApOyB9CiAgICAgICAgaW50IG9wZXJhdG9yIT0gKGNvbnN0IHNU
U3RyaW5nICYgc3RyKSBjb25zdCB7IHJldHVybiAoQ29tcGFyZSAoc3RyKSAhPSAwKTsgfQogICAg
ICAgIGludCBvcGVyYXRvcjwgKGNvbnN0IHNUU3RyaW5nICYgc3RyKSBjb25zdCB7IHJldHVybiAo
Q29tcGFyZSAoc3RyKSA8IDApOyB9CiAgICAgICAgaW50IG9wZXJhdG9yPiAoY29uc3Qgc1RTdHJp
bmcgJiBzdHIpIGNvbnN0IHsgcmV0dXJuIChDb21wYXJlIChzdHIpID4gMCk7IH0KCgoKICAgICAg
ICBpbnQgR2V0TGVuZ3RoICh2b2lkKSBjb25zdCB7IHJldHVybiBsZW47IH07CgogICAgICAgIGlu
dCBHZXRTaXplICh2b2lkKSBjb25zdCB7IHJldHVybiBsZW4gKiBzaXplb2YgKFQpOyB9OwojIDUy
NCAic3RzdHJpbmcuaCIKICAgICAgICBpbnQgRmluZCAoY29uc3QgVCBjLCBpbnQgc3RhcnQgPSAw
KSBjb25zdAogICAgICAgIHsgOwogICAgICAgICAgICAgICAgVCAqIHAgPSBwX2R5bl9idWYtPkdl
dFBvaW50ZXIgKCk7CiAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gKHN0YXJ0ID4gMCA/IHN0
YXJ0IDogMCk7IGkgPCBsZW47IGkrKykKICAgICAgICAgICAgICAgIHsgaWYgKHBbaV0gPT0gYykg
cmV0dXJuIGk7IH0KICAgICAgICAgICAgICAgIHJldHVybiAtMTsgfTsKCiAgICAgICAgaW50IEZp
bmRSZXZlcnNlIChjb25zdCBUIGMsIGludCBzdGFydCA9IC0xKSBjb25zdAogICAgICAgIHsgOwog
ICAgICAgICAgICAgICAgVCAqIHBiID0gcF9keW5fYnVmLT5HZXRQb2ludGVyICgpOwogICAgICAg
ICAgICAgICAgaWYgKHN0YXJ0ID09IC0xIHx8IHN0YXJ0ID49IGxlbikgc3RhcnQgPSBsZW4tMTsK
ICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAoc3RhcnQgPiAwID8gc3RhcnQgOiAwKTsgaSA+
PSAwOyBpLS0pCiAgICAgICAgICAgICAgICB7IGlmIChwYltpXSA9PSBjKSByZXR1cm4gaTsgfQog
ICAgICAgICAgICAgICAgcmV0dXJuIC0xOyB9CiMgNTQ5ICJzdHN0cmluZy5oIgogICAgICAgIGlu
dCBGaW5kIChjb25zdCBUICogcCwgaW50IHN0YXJ0ID0gMCwgaW50IGwgPSAtMSkgY29uc3QKICAg
ICAgICB7IDsKICAgICAgICAgICAgICAgIFQgKiBwYiA9IHBfZHluX2J1Zi0+R2V0UG9pbnRlciAo
KTsKICAgICAgICAgICAgICAgIGlmIChwKQogICAgICAgICAgICAgICAgeyBpZiAobCA8IDApIGwg
PSB0c3RybGVuIChwKTsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IHMgPSAoc3RhcnQgPCBs
ZW4gPyAoc3RhcnQgPiAwID8gc3RhcnQgOiAwKSA6IGxlbi0xKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgcyA9IEZpbmQgKCpwLHMpOwogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocyA+
PSAwICYmIHMrbCA8PSBsZW4pCiAgICAgICAgICAgICAgICAgICAgICAgIHsgaW50IGk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8IGw7IGkrKykKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwW2ldICE9IHBiW3MraV0pIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09IGwpIHJldHVybiBz
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBGaW5kICgqcCxzKzEpOyB9IH0K
ICAgICAgICAgICAgICAgIHJldHVybiAtMTsgfQojIDU3MyAic3RzdHJpbmcuaCIKICAgICAgICBp
bnQgRmluZCAoY29uc3Qgc1RTdHJpbmcgJiBzdHIsIGludCBzdGFydCA9IDApIGNvbnN0CiAgICAg
ICAgeyA7CiAgICAgICAgICAgICAgICByZXR1cm4gRmluZCAoc3RyLnBfZHluX2J1Zi0+R2V0UG9p
bnRlciAoKSwgc3RhcnQsIHN0ci5sZW4pOyB9CgoKCiAgICAgICAgaW50IFNjYW5JbmNsdWRpbmcg
KGNvbnN0IFQgKiBwLCBpbnQgc3RhcnQgPSAwLCBpbnQgbCA9IC0xKSBjb25zdAogICAgICAgICAg
ICAgICAgeyBzVFN0cmluZyBzIChwLGwpOyByZXR1cm4gU2NhbkluY2x1ZGluZyAocywgc3RhcnQp
OyB9OwogICAgICAgIGludCBTY2FuSW5jbHVkaW5nIChjb25zdCBzVFN0cmluZyAmIHN0ciwgaW50
IHN0YXJ0ID0gMCkgY29uc3QKICAgICAgICB7IGludCBzID0gKHN0YXJ0IDwgbGVuID8gKHN0YXJ0
ID4gMCA/IHN0YXJ0IDogMCkgOiAobGVuID8gbGVuLTEgOiAwKSksIGNudCA9IDA7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgIFQgKiBwYiA9
IHBfZHluX2J1Zi0+R2V0UG9pbnRlciAoKTsKICAgICAgICAgICAgICAgIGZvciAoO3MgPCBsZW47
IHMrKywgY250KyspCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHIuRmluZCAocGJbc10p
IDwgMCkgYnJlYWs7CiAgICAgICAgICAgICAgICByZXR1cm4gY250OyB9CgoKCgogICAgICAgIGlu
dCBTY2FuRXhjbHVkaW5nIChjb25zdCBUICogcCwgaW50IHN0YXJ0ID0gMCwgaW50IGwgPSAtMSkg
Y29uc3QKICAgICAgICAgICAgICAgIHsgc1RTdHJpbmcgcyAocCxsKTsgcmV0dXJuIFNjYW5FeGNs
dWRpbmcgKHMsIHN0YXJ0KTsgfQogICAgICAgIGludCBTY2FuRXhjbHVkaW5nIChjb25zdCBzVFN0
cmluZyAmIHN0ciwgaW50IHN0YXJ0ID0gMCkgY29uc3QKICAgICAgICB7IGludCBzID0gKHN0YXJ0
IDwgbGVuID8gKHN0YXJ0ID4gMCA/IHN0YXJ0IDogMCkgOiAobGVuID8gbGVuLTEgOiAwKSksIGNu
dCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAg
ICAgICAgIFQgKiBwYiA9IHBfZHluX2J1Zi0+R2V0UG9pbnRlciAoKTsKICAgICAgICAgICAgICAg
IGZvciAoO3MgPCBsZW47IHMrKywgY250KyspCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChz
dHIuRmluZCAocGJbc10pID49IDApIGJyZWFrOwogICAgICAgICAgICAgICAgcmV0dXJuIGNudDsg
fQoKCgoKICAgICAgICBzVFN0cmluZyBUb2tFeHRyYWN0IChjb25zdCBUICogdG9rZW4sIFQgJiB0
b2ssIGludCBsID0gLTEpCiAgICAgICAgeyBpbnQgY250ID0gU2NhbkV4Y2x1ZGluZyAodG9rZW4s
MCxsKTsKICAgICAgICAgICAgICAgIHBfZHluX2J1ZiA9IHBfZHluX2J1Zi0+V3JpdGVhYmxlICgp
OwogICAgICAgICAgICAgICAgVCAqIHBiID0gcF9keW5fYnVmLT5HZXRQb2ludGVyICgpOwogICAg
ICAgICAgICAgICAgc1RTdHJpbmcgciAocGIsIGNudCk7CiAgICAgICAgICAgICAgICBpZiAoKHRv
ayA9IHBiW2NudF0pICE9IDApIGNudCsrOwogICAgICAgICAgICAgICAgaWYgKGNudCkKICAgICAg
ICAgICAgICAgIHsgbGVuIC09IGNudDsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBsZW47IGkrKykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYltp
XSA9IHBiW2krY250XTsKICAgICAgICAgICAgICAgICAgICAgICAgcGJbbGVuXSA9IDA7IH0KICAg
ICAgICAgICAgICAgIHJldHVybiByOyB9CiAgICAgICAgc1RTdHJpbmcgVG9rRXh0cmFjdCAoY29u
c3Qgc1RTdHJpbmcgJiB0b2tlbiwgVCAmIHRvaykKICAgICAgICB7IGludCBjbnQgPSBTY2FuRXhj
bHVkaW5nICh0b2tlbiksIGk7CiAgICAgICAgICAgICAgICBwX2R5bl9idWYgPSBwX2R5bl9idWYt
PldyaXRlYWJsZSAoKTsKICAgICAgICAgICAgICAgIFQgKiBwYiA9IHBfZHluX2J1Zi0+R2V0UG9p
bnRlciAoKTsKICAgICAgICAgICAgICAgIHNUU3RyaW5nIHIgKHBiLCBjbnQpOwogICAgICAgICAg
ICAgICAgaWYgKCh0b2sgPSBwYltjbnRdKSAhPSAwKSBjbnQrKzsKICAgICAgICAgICAgICAgIGlm
IChjbnQpCiAgICAgICAgICAgICAgICB7IGxlbiAtPSBjbnQ7CiAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYltpXSA9IHBiW2krY250XTsKICAgICAgICAgICAgICAgICAgICAgICAgcGJbbGVuXSA9
IDA7IH0KICAgICAgICAgICAgICAgIHJldHVybiByOyB9CgoKICAgICAgICBzVFN0cmluZyBMZWZ0
IChpbnQgY250KSBjb25zdAogICAgICAgIHsgOwogICAgICAgICAgICAgICAgc1RTdHJpbmcgciAo
cF9keW5fYnVmLT5HZXRQb2ludGVyICgpLCAoY250IDwgbGVuID8gKGNudCA+IDAgPyBjbnQgOiAw
KSA6IGxlbikpOwogICAgICAgICAgICAgICAgcmV0dXJuIHI7IH0KCiAgICAgICAgc1RTdHJpbmcg
UmlnaHQgKGludCBjbnQpIGNvbnN0CiAgICAgICAgeyBpbnQgbCA9IChjbnQgPCBsZW4gPyAoY250
ID4gMCA/IGNudCA6IDApIDogbGVuKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogICAgICAgICAgICAgICAgc1RTdHJpbmcgciAocF9keW5fYnVmLT5HZXRQb2ludGVy
ICgpICsgbGVuIC0gbCwgbCk7CiAgICAgICAgICAgICAgICByZXR1cm4gcjsgfQoKICAgICAgICBz
VFN0cmluZyBNaWQgKGludCBwb3MsIGludCBjbnQpIGNvbnN0CiAgICAgICAgeyBpbnQgaSA9IChw
b3MgPCBsZW4gPyAocG9zID4gMCA/IHBvcyA6IDApIDogbGVuKTsKICAgICAgICAgICAgICAgIGlu
dCBsID0gKGNudCA8IGxlbi1pID8gKGNudCA+IDAgPyBjbnQgOiAwKSA6IGxlbi1pKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgc1RTdHJp
bmcgciAocF9keW5fYnVmLT5HZXRQb2ludGVyICgpICsgaSwgbCk7CiAgICAgICAgICAgICAgICBy
ZXR1cm4gcjsgfQoKICAgICAgICBzVFN0cmluZyAmIFRvVXBwZXIgKHZvaWQpCiAgICAgICAgeyA7
CiAgICAgICAgICAgICAgICBwX2R5bl9idWYgPSBwX2R5bl9idWYtPldyaXRlYWJsZSAoKTsKICAg
ICAgICAgICAgICAgIFQgKiBwYiA9IHBfZHluX2J1Zi0+R2V0UG9pbnRlciAoKTsKICAgICAgICAg
ICAgICAgIGZvciAoaW50IGwgPSAwOyBsIDwgbGVuOyBsKyspIGlmIChJc0xvd2VyIChwYltsXSkp
IHBiW2xdIC09IDMyOwogICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOyB9CgogICAgICAgIHNU
U3RyaW5nICYgVG9Mb3dlciAodm9pZCkKICAgICAgICB7IDsKICAgICAgICAgICAgICAgIHBfZHlu
X2J1ZiA9IHBfZHluX2J1Zi0+V3JpdGVhYmxlICgpOwogICAgICAgICAgICAgICAgVCAqIHBiID0g
cF9keW5fYnVmLT5HZXRQb2ludGVyICgpOwogICAgICAgICAgICAgICAgZm9yIChpbnQgbCA9IDA7
IGwgPCBsZW47IGwrKykgaWYgKElzVXBwZXIgKHBiW2xdKSkgcGJbbF0gKz0gMzI7CiAgICAgICAg
ICAgICAgICByZXR1cm4gKnRoaXM7IH0KCgogICAgICAgIGludCBTYXZlIChvc3RyZWFtICYgbykg
Y29uc3QKICAgICAgICB7IDsKICAgICAgICAgICAgICAgIG8ud3JpdGUgKChjaGFyICopJmxlbiwg
c2l6ZW9mIChsZW4pKTsKICAgICAgICAgICAgICAgIG8ud3JpdGUgKChjaGFyICopcF9keW5fYnVm
LT5HZXRQb2ludGVyICgpLCBHZXRTaXplICgpKTsKICAgICAgICAgICAgICAgIHJldHVybiAoKHZv
aWQqKW8pICE9IDA7IH0KCgogICAgICAgIGludCBMb2FkIChpc3RyZWFtICYgaSkKICAgICAgICB7
IGludCBsOwogICAgICAgICAgICAgICAgaS5yZWFkICgoY2hhciAqKSZsLCBzaXplb2YgKGwpKTsg
aWYgKCFpKSB7IGxlbiA9IDA7IHJldHVybiAwOyB9CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgIHBfZHluX2J1ZiA9IHBfZHluX2J1Zi0+UmVz
aXplIChsKzEpOwogICAgICAgICAgICAgICAgVCAqIHBiID0gcF9keW5fYnVmLT5HZXRQb2ludGVy
ICgpOwogICAgICAgICAgICAgICAgaS5yZWFkICgoY2hhciopcGIsIChsZW4gPSBsKSAqIHNpemVv
ZiAoVCkpOyBwYltsZW5dID0gMDsKICAgICAgICAgICAgICAgIHJldHVybiAoKHZvaWQqKWkpICE9
IDA7IH0KCiAgICAgICAgc1RTdHJpbmcgJiBDb252ZXJ0IChjb25zdCBzVFN0cmluZzxjaGFyPiAm
IG9wMiwgaW50IHRsZW4gPSAtMSk7CgogICAgICAgIHNUU3RyaW5nICYgRm9ybWF0IChjb25zdCBj
aGFyICogZm9ybWF0LCAuLi4pCiAgICAgICAgeyB2YV9saXN0IGFyZ3M7IHNUU3RyaW5nPGNoYXI+
IHRtcDsgdG1wLkFkZENoYXIgKCcgJywgMjAwKTsgaW50IGw7CiAgICAgICAgICAgICAgICBfX2J1
aWx0aW5fc3RkYXJnX3N0YXJ0KChhcmdzKSxmb3JtYXQpOwogICAgICAgICAgICAgICAgbCA9IHZz
bnByaW50ZiAodG1wLmJlZ2luICgpLCAyMDAsIGZvcm1hdCwgYXJncyk7CiAgICAgICAgICAgICAg
ICBfX2J1aWx0aW5fdmFfZW5kIChhcmdzKTsKICAgICAgICAgICAgICAgIGlmIChsIDwgMCkgbCA9
IDA7IHJldHVybiBDb252ZXJ0ICh0bXAsIGwpOyB9CgogICAgICAgIHNUU3RyaW5nICYgTnVtU3Ry
IChsb25nIG51bSwgaW50IGRpZ2l0cyA9IC0xKQogICAgICAgIHsgaWYgKGRpZ2l0cyA+IDApIHJl
dHVybiBGb3JtYXQgKCIlMCpsaSIsIGRpZ2l0cywgbnVtKTsKICAgICAgICAgICAgICAgIGVsc2Ug
cmV0dXJuIEZvcm1hdCAoIiVsaSIsIG51bSk7IH0KCiAgICAgICAgc1RTdHJpbmcgJiBEYmxTdHIg
KGRvdWJsZSBudW0sIGludCBkaWdpdHMgPSAtMSwgaW50IGRlYyA9IDApCiAgICAgICAgeyBpZiAo
ZGlnaXRzID4gMCkgcmV0dXJuIEZvcm1hdCAoIiUqLipmIiwgZGlnaXRzLCBkZWMsIG51bSk7CiAg
ICAgICAgICAgICAgICBlbHNlIHJldHVybiBGb3JtYXQgKCIlZSIsIG51bSk7IH0KCiAgICAgICAg
bG9uZyBTdHJOdW0gKGludCBiYXNlID0gMCkgY29uc3QKICAgICAgICB7IGNoYXIgcGJ1ZlsyMDBd
OyBpbnQgbF9pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg
ICAgICAgICAgICBUICogcGIgPSBwX2R5bl9idWYtPkdldFBvaW50ZXIgKCk7CiAgICAgICAgICAg
ICAgICBmb3IgKGxfaSA9IDA7IGxfaSA8IGxlbiAmJiBsX2kgPCAxOTk7IGxfaSsrKQogICAgICAg
ICAgICAgICAgeyBwYnVmW2xfaV0gPSAoY2hhcilwYltsX2ldOyB9CiAgICAgICAgICAgICAgICBw
YnVmW2xfaV0gPSAwOyByZXR1cm4gc3RydG9sIChwYnVmLDAsYmFzZSk7IH0KCiAgICAgICAgZG91
YmxlIFN0ckRibCAodm9pZCkgY29uc3QKICAgICAgICB7IGNoYXIgcGJ1ZlsyMDBdOyBpbnQgbF9p
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAg
ICBUICogcGIgPSBwX2R5bl9idWYtPkdldFBvaW50ZXIgKCk7CiAgICAgICAgICAgICAgICBmb3Ig
KGxfaSA9IDA7IGxfaSA8IGxlbiAmJiBsX2kgPCAxOTk7IGxfaSsrKQogICAgICAgICAgICAgICAg
eyBwYnVmW2xfaV0gPSAoY2hhcilwYltsX2ldOyB9CiAgICAgICAgICAgICAgICBwYnVmW2xfaV0g
PSAwOyByZXR1cm4gc3RydG9kIChwYnVmLDApOyB9CiMgNzI3ICJzdHN0cmluZy5oIgogICAgICAg
IGludCBSZWFkTGluZSAoaXN0cmVhbSAmIGksIGludCBieXRlX3N3YXAgPSAwKQogICAgICAgIHsg
OwogICAgICAgICAgICAgICAgVCBjdXI7IGludCByZWFkX29uID0gITA7CiAgICAgICAgICAgICAg
ICBDbGVhciAoKTsKICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkX29uKQogICAgICAgICAgICAg
ICAgeyBpLnJlYWQgKChjaGFyICopJmN1ciwgc2l6ZW9mIChjdXIpKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGkuZ2NvdW50ICgpICE9IHNpemVvZiAoY3VyKSkgcmV0dXJuICEwOwogICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoYnl0ZV9zd2FwKSBjdXIgPSAoVCkoKChjdXIgJiAweGZm
KSA8PCA4KSB8ICgoY3VyICYgMHhmZjAwKSA+PiA4KSk7CiAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChjdXIgPT0gMHgwZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
Ynl0ZV9zd2FwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ciA9IChUKWkucGVlayAoKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXIgPT0gMHgwYSkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaS5yZWFkICgoY2hhciAqKSZj
dXIsIHNpemVvZiAoY3VyKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKGN1ciA9PSAweDBhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VyID09ICdcXCcp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLnJlYWQgKChjaGFyICopJmN1ciwg
c2l6ZW9mIChjdXIpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyID09
ICduJykgY3VyID0gKFQpJ1xuJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNl
IGlmIChjdXIgPT0gJ1x0JykgY3VyID0gKFQpJ1x0JzsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmIChjdXIgPT0gJ1xcJykgY3VyID0gKFQpJ1xcJzsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlICp0aGlzICs9IChUKTI3OwogICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICp0aGlzICs9IGN1cjsKICAgICAgICAg
ICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gITA7CiAgICAgICAgfTsKCiAgICAgICAg
ZnJpZW5kIG9zdHJlYW0gJiBvcGVyYXRvcjw8IChvc3RyZWFtICYgbywgY29uc3Qgc1RTdHJpbmc8
Y2hhcj4gJiBmcyk7Cn07CgppbmxpbmUgb3N0cmVhbSAmIG9wZXJhdG9yPDwgKG9zdHJlYW0gJiBv
LCBjb25zdCBzVFN0cmluZzxjaGFyPiAmIGZzKQogICAgICAgIHsgcmV0dXJuIG8ud3JpdGUgKChj
aGFyICopZnMuU3RyICgpLCBmcy5HZXRTaXplICgpKTsgfQoKZXh0ZXJuIGNvbnN0IHNUU3RyaW5n
PHVuc2lnbmVkIHNob3J0PiAmIE1ha2VVU3RyaW5nIChjb25zdCBjaGFyICogc3RyLCBpbnQgbCA9
IC0xKTsKCmV4dGVybiBjb25zdCBzVFN0cmluZzxjaGFyPiAmIE1ha2VTdHJpbmcgKGNvbnN0IHNU
U3RyaW5nPHVuc2lnbmVkIHNob3J0PiAmIHVzdHIpOwojIDc3OSAic3RzdHJpbmcuaCIKY2xhc3Mg
c0NvZGVQYWdlCnsKcHVibGljOgoKICAgICAgICB0eXBlZGVmIHNUU3RyaW5nPGNoYXI+IHNTdHJp
bmc7CgogICAgICAgIHR5cGVkZWYgc1RTdHJpbmc8dW5zaWduZWQgc2hvcnQ+IHNVU3RyaW5nOwoK
cHJpdmF0ZToKICAgICAgICBzU3RyaW5nIHN0ck5hbWU7CiAgICAgICAgc1VTdHJpbmcgdXN0ck1h
cDsKCnB1YmxpYzoKICAgICAgICBzQ29kZVBhZ2UgKCkKICAgICAgICB7IHVzdHJNYXAuQWRkQ2hh
ciAoMzIsIDI1Nik7IH0KCiAgICAgICAgc0NvZGVQYWdlIChjb25zdCBzU3RyaW5nICYgX3N0ck5h
bWUpCiAgICAgICAgICAgICAgICA6IHN0ck5hbWUgKF9zdHJOYW1lKQogICAgICAgIHsgdXN0ck1h
cC5BZGRDaGFyICgzMiwgMjU2KTsgfQoKICAgICAgICBzQ29kZVBhZ2UgKGNvbnN0IGNoYXIgKiBw
Y2hOYW1lLCBjb25zdCB1bnNpZ25lZCBzaG9ydCAqIHB1TWFwLCBjb25zdCBpbnQgbWxlbikKICAg
ICAgICAgICAgICAgIDogc3RyTmFtZSAocGNoTmFtZSksIHVzdHJNYXAgKHB1TWFwLCBtbGVuKQog
ICAgICAgIHt9CgogICAgICAgIHNDb2RlUGFnZSAoY29uc3Qgc0NvZGVQYWdlICYgY3ApCiAgICAg
ICAgICAgICAgICA6IHN0ck5hbWUgKGNwLnN0ck5hbWUpLCB1c3RyTWFwIChjcC51c3RyTWFwKQog
ICAgICAgIHt9CgogICAgICAgIHNDb2RlUGFnZSAmIG9wZXJhdG9yPSAoY29uc3Qgc0NvZGVQYWdl
ICYgY3ApCiAgICAgICAgeyBzdHJOYW1lID0gY3Auc3RyTmFtZTsgdXN0ck1hcCA9IGNwLnVzdHJN
YXA7IHJldHVybiAqdGhpczsgfQoKICAgICAgICBjb25zdCBzVVN0cmluZyAmIEdldE1hcCAoKSBj
b25zdCB7IHJldHVybiB1c3RyTWFwOyB9CiAgICAgICAgY29uc3Qgc1N0cmluZyAmIEdldE5hbWUg
KCkgY29uc3QgeyByZXR1cm4gc3RyTmFtZTsgfQoKICAgICAgICB2b2lkIFNldE1hcCAoaW50IG9m
cywgY29uc3Qgc1VTdHJpbmcgJiBfdXN0ck1hcCkKICAgICAgICB7IGZvciAoaW50IGkgPSAwOyBp
IDwgX3VzdHJNYXAuR2V0TGVuZ3RoICgpOyBpKyspCiAgICAgICAgICAgICAgICAgICAgICAgIHVz
dHJNYXAuU2V0QXQgKG9mcyArIGksIF91c3RyTWFwW2ldKTsgfQoKICAgICAgICBpbnQgb3BlcmF0
b3I8IChjb25zdCBzQ29kZVBhZ2UgJiBjcCkgY29uc3QKICAgICAgICB7IHJldHVybiBzdHJOYW1l
IDwgY3Auc3RyTmFtZTsgfQoKICAgICAgICBpbnQgb3BlcmF0b3I9PSAoY29uc3Qgc0NvZGVQYWdl
ICYgY3ApIGNvbnN0CiAgICAgICAgeyByZXR1cm4gc3RyTmFtZSA9PSBjcC5zdHJOYW1lOyB9CgoK
ICAgICAgICB1bnNpZ25lZCBjaGFyIFJlYWRDb2RlUGFnZSAoaXN0cmVhbSAmIGkpOwp9OwoKZXh0
ZXJuIGNvbnN0IHNDb2RlUGFnZSAmIHNHZXRBY3RpdmVDb2RlUGFnZSAodm9pZCk7CmV4dGVybiBj
b25zdCBzQ29kZVBhZ2UgJiBzR2V0Q29kZVBhZ2UgKGNvbnN0IHNDb2RlUGFnZTo6c1N0cmluZyAm
IHN0ck5hbWUpOwoKZXh0ZXJuIHZvaWQgc1NldEFjdGl2ZUNvZGVQYWdlIChjb25zdCBzQ29kZVBh
Z2UgJiBwY3ApOwppbmxpbmUgdm9pZCBzU2V0QWN0aXZlQ29kZVBhZ2UgKGNvbnN0IHNDb2RlUGFn
ZTo6c1N0cmluZyAmIHN0ck5hbWUpCnsgc1NldEFjdGl2ZUNvZGVQYWdlIChzR2V0Q29kZVBhZ2Ug
KHN0ck5hbWUpKTsgfQoKZXh0ZXJuIHVuc2lnbmVkIGNoYXIgc1JlYWRDb2RlUGFnZSAoY29uc3Qg
c0NvZGVQYWdlOjpzU3RyaW5nICYgc3RyTmFtZSwgaXN0cmVhbSAmIGkpOwoKZXh0ZXJuIHVuc2ln
bmVkIGNoYXIgc0xvYWRDb2RlUGFnZXMgKGlzdHJlYW0gJiBpKTsKZXh0ZXJuIHVuc2lnbmVkIGNo
YXIgc1NhdmVDb2RlUGFnZXMgKG9zdHJlYW0gJiBvKTsKCnRlbXBsYXRlIDxjbGFzcyBUPgpzVFN0
cmluZzxUPiAmIHNUU3RyaW5nPFQ+OjpDb252ZXJ0IChjb25zdCBzVFN0cmluZzxjaGFyPiAmIG9w
MiwgaW50IHRsZW4pCnsgOwogICAgICAgIGludCBzbGVuID0gKHRsZW4gPj0gMCA/IHRsZW4gOiBv
cDIuR2V0TGVuZ3RoICgpKTsKICAgICAgICBjb25zdCBzVFN0cmluZzx1bnNpZ25lZCBzaG9ydD4g
JiB1c3RyTWFwID0gc0dldEFjdGl2ZUNvZGVQYWdlICgpLkdldE1hcCAoKTsKICAgICAgICBDbGVh
ciAoKTsKICAgICAgICBzVFN0cmluZzxjaGFyPjo6Y29uc3RfaXRlcmF0b3IgaXRzID0gb3AyLmJl
Z2luICgpOwogICAgICAgIHdoaWxlIChzbGVuLS0gPiAwKQogICAgICAgIHsgKnRoaXMgKz0gKFQp
KHVzdHJNYXBbKGludCkqKHVuc2lnbmVkIGNoYXIgKikoaXRzKyspXSk7IH0KICAgICAgICByZXR1
cm4gKnRoaXM7Cn0KIyAyOSAic3N0cmluZy5oIiAyCgoKdHlwZWRlZiBzVFN0cmluZzxjaGFyPiBz
U3RyaW5nOwoKCgoKdHlwZWRlZiBzVFN0cmluZzx1bnNpZ25lZCBzaG9ydD4gc1VTdHJpbmc7CgoK
ZXh0ZXJuIGNvbnN0IHNTdHJpbmcgc3RyUGF0aFNlcDsKIyA0NyAic2RpY3QuaCIgMgojIDYxICJz
ZGljdC5oIgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYmFja3dhcmQvbWFwLmgiIDEg
MwojIDMwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL21hcC5oIiAzCiMgMSAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iYWNrd2FyZC9iYWNrd2FyZF93YXJuaW5nLmgiIDEg
MwojIDMxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL21hcC5oIiAyIDMKIyAx
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL3RyZWUuaCIgMSAzCiMgMTkgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYmFja3dhcmQvdHJlZS5oIiAzCiMgMSAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iYWNrd2FyZC9iYWNrd2FyZF93YXJuaW5nLmgiIDEgMwojIDIwICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL3RyZWUuaCIgMiAzCiMgMSAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90cmVlLmgiIDEgMwojIDU2ICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RyZWUuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMSAzCiMgNTcgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGxfdHJlZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RsX2FsbG9jLmgiIDEgMwojIDU4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX3RyZWUuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz
L3N0bF9jb25zdHJ1Y3QuaCIgMSAzCiMgNTkgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfdHJlZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X2Z1bmN0aW9uLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X2Z1bmN0aW9uLmgiIDMKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xh
c3MgX1Jlc3VsdD4Kc3RydWN0IHVuYXJ5X2Z1bmN0aW9uIHsKICB0eXBlZGVmIF9BcmcgYXJndW1l
bnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgYmluYXJ5X2Z1bmN0
aW9uIHsKICB0eXBlZGVmIF9BcmcxIGZpcnN0X2FyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfQXJn
MiBzZWNvbmRfYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgcGx1cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rp
b248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3Qg
X1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCArIF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNz
IF9UcD4Kc3RydWN0IG1pbnVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4g
ewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3Qg
eyByZXR1cm4gX194IC0gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbXVs
dGlwbGllcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3Bl
cmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9f
eCAqIF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGRpdmlkZXMgOiBwdWJs
aWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3Qg
X1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLyBfX3k7IH0KfTsK
CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gaW5saW5lIF9UcCBpZGVudGl0eV9lbGVtZW50KHBsdXM8
X1RwPikgewogIHJldHVybiBfVHAoMCk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9UcD4gaW5saW5lIF9U
cCBpZGVudGl0eV9lbGVtZW50KG11bHRpcGxpZXM8X1RwPikgewogIHJldHVybiBfVHAoMSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtb2R1bHVzIDogcHVibGljIGJpbmFyeV9mdW5j
dGlvbjxfVHAsX1RwLF9UcD4KewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25z
dCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICUgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwPgpzdHJ1Y3QgbmVnYXRlIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfVHA+CnsK
ICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gLV9feDsgfQp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGVxdWFsX3RvIDogcHVibGljIGJpbmFyeV9m
dW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gs
IGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPT0gX195OyB9Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qgbm90X2VxdWFsX3RvIDogcHVibGljIGJpbmFyeV9mdW5jdGlv
bjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0
IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggIT0gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwPgpzdHJ1Y3QgZ3JlYXRlciA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxi
b29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkg
Y29uc3QgeyByZXR1cm4gX194ID4gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1
Y3QgbGVzcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBv
cGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4g
X194IDwgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZ3JlYXRlcl9lcXVh
bCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRv
cigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ID49
IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxlc3NfZXF1YWwgOiBwdWJs
aWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25z
dCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA8PSBfX3k7IH0K
fTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX2FuZCA6IHB1YmxpYyBiaW5h
cnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYg
X194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICYmIF9feTsgfQp9OwoKdGVt
cGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfb3IgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0
aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u
c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCB8fCBfX3k7IH0KfTsKCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX25vdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAs
Ym9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1cm4g
IV9feDsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNsYXNzIHVuYXJ5X25lZ2F0
ZQogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3VtZW50
X3R5cGUsIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGljOgog
IGV4cGxpY2l0IHVuYXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChf
X3gpIHt9CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3Vt
ZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuICFfTV9wcmVkKF9feCk7CiAgfQp9OwoK
dGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSB1bmFyeV9uZWdhdGU8X1ByZWRpY2F0
ZT4Kbm90MShjb25zdCBfUHJlZGljYXRlJiBfX3ByZWQpCnsKICByZXR1cm4gdW5hcnlfbmVnYXRl
PF9QcmVkaWNhdGU+KF9fcHJlZCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgpjbGFz
cyBiaW5hcnlfbmVnYXRlCiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9QcmVk
aWNhdGU6OmZpcnN0X2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5
cGVuYW1lIF9QcmVkaWNhdGU6OnNlY29uZF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sPiB7CnByb3RlY3RlZDoKICBfUHJlZGljYXRlIF9NX3ByZWQ7CnB1Ymxp
YzoKICBleHBsaWNpdCBiaW5hcnlfbmVnYXRlKGNvbnN0IF9QcmVkaWNhdGUmIF9feCkgOiBfTV9w
cmVkKF9feCkge30KICBib29sIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6
Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194LAogICAgICAgICAgICAgICAgICBjb25zdCB0eXBlbmFt
ZSBfUHJlZGljYXRlOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX195KSBjb25zdAogIHsKICAgIHJl
dHVybiAhX01fcHJlZChfX3gsIF9feSk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNh
dGU+CmlubGluZSBiaW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+Cm5vdDIoY29uc3QgX1ByZWRpY2F0
ZSYgX19wcmVkKQp7CiAgcmV0dXJuIGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVkKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24+CmNsYXNzIGJpbmRlcjFzdAogIDogcHVibGlj
IHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBl
LAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90
eXBlPiB7CnByb3RlY3RlZDoKICBfT3BlcmF0aW9uIG9wOwogIHR5cGVuYW1lIF9PcGVyYXRpb246
OmZpcnN0X2FyZ3VtZW50X3R5cGUgdmFsdWU7CnB1YmxpYzoKICBiaW5kZXIxc3QoY29uc3QgX09w
ZXJhdGlvbiYgX194LAogICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJz
dF9hcmd1bWVudF90eXBlJiBfX3kpCiAgICAgIDogb3AoX194KSwgdmFsdWUoX195KSB7fQogIHR5
cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFt
ZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1
cm4gb3AodmFsdWUsIF9feCk7CiAgfQoKCiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5
cGUKICBvcGVyYXRvcigpKHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBl
JiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcCh2YWx1ZSwgX194KTsKICB9Cgp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9PcGVyYXRpb24sIGNsYXNzIF9UcD4KaW5saW5lIGJpbmRlcjFzdDxfT3BlcmF0
aW9uPgpiaW5kMXN0KGNvbnN0IF9PcGVyYXRpb24mIF9fZm4sIGNvbnN0IF9UcCYgX194KQp7CiAg
dHlwZWRlZiB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlIF9BcmcxX3R5
cGU7CiAgcmV0dXJuIGJpbmRlcjFzdDxfT3BlcmF0aW9uPihfX2ZuLCBfQXJnMV90eXBlKF9feCkp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbj4KY2xhc3MgYmluZGVyMm5kCiAgOiBwdWJs
aWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlw
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRf
dHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBfT3BlcmF0aW9u
OjpzZWNvbmRfYXJndW1lbnRfdHlwZSB2YWx1ZTsKcHVibGljOgogIGJpbmRlcjJuZChjb25zdCBf
T3BlcmF0aW9uJiBfX3gsCiAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OnNl
Y29uZF9hcmd1bWVudF90eXBlJiBfX3kpCiAgICAgIDogb3AoX194KSwgdmFsdWUoX195KSB7fQog
IHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBl
bmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJl
dHVybiBvcChfX3gsIHZhbHVlKTsKICB9CgoKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRf
dHlwZQogIG9wZXJhdG9yKCkodHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlw
ZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AoX194LCB2YWx1ZSk7CiAgfQoKfTsKCnRlbXBs
YXRlIDxjbGFzcyBfT3BlcmF0aW9uLCBjbGFzcyBfVHA+CmlubGluZSBiaW5kZXIybmQ8X09wZXJh
dGlvbj4KYmluZDJuZChjb25zdCBfT3BlcmF0aW9uJiBfX2ZuLCBjb25zdCBfVHAmIF9feCkKewog
IHR5cGVkZWYgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUgX0FyZzJf
dHlwZTsKICByZXR1cm4gYmluZGVyMm5kPF9PcGVyYXRpb24+KF9fZm4sIF9BcmcyX3R5cGUoX194
KSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24xLCBjbGFzcyBfT3BlcmF0aW9uMj4K
Y2xhc3MgdW5hcnlfY29tcG9zZQogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9P
cGVyYXRpb24yOjphcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVu
YW1lIF9PcGVyYXRpb24xOjpyZXN1bHRfdHlwZT4Kewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlvbjEg
X01fZm4xOwogIF9PcGVyYXRpb24yIF9NX2ZuMjsKcHVibGljOgogIHVuYXJ5X2NvbXBvc2UoY29u
c3QgX09wZXJhdGlvbjEmIF9feCwgY29uc3QgX09wZXJhdGlvbjImIF9feSkKICAgIDogX01fZm4x
KF9feCksIF9NX2ZuMihfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjE6OnJlc3VsdF90eXBl
CiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uMjo6YXJndW1lbnRfdHlwZSYg
X194KSBjb25zdCB7CiAgICByZXR1cm4gX01fZm4xKF9NX2ZuMihfX3gpKTsKICB9Cn07Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX09wZXJhdGlvbjEsIGNsYXNzIF9PcGVyYXRpb24yPgppbmxpbmUgdW5hcnlf
Y29tcG9zZTxfT3BlcmF0aW9uMSxfT3BlcmF0aW9uMj4KY29tcG9zZTEoY29uc3QgX09wZXJhdGlv
bjEmIF9fZm4xLCBjb25zdCBfT3BlcmF0aW9uMiYgX19mbjIpCnsKICByZXR1cm4gdW5hcnlfY29t
cG9zZTxfT3BlcmF0aW9uMSxfT3BlcmF0aW9uMj4oX19mbjEsIF9fZm4yKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9PcGVyYXRpb24xLCBjbGFzcyBfT3BlcmF0aW9uMiwgY2xhc3MgX09wZXJhdGlvbjM+
CmNsYXNzIGJpbmFyeV9jb21wb3NlCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUg
X09wZXJhdGlvbjI6OmFyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZW5hbWUgX09wZXJhdGlvbjE6OnJlc3VsdF90eXBlPiB7CnByb3RlY3RlZDoKICBfT3BlcmF0aW9u
MSBfTV9mbjE7CiAgX09wZXJhdGlvbjIgX01fZm4yOwogIF9PcGVyYXRpb24zIF9NX2ZuMzsKcHVi
bGljOgogIGJpbmFyeV9jb21wb3NlKGNvbnN0IF9PcGVyYXRpb24xJiBfX3gsIGNvbnN0IF9PcGVy
YXRpb24yJiBfX3ksCiAgICAgICAgICAgICAgICAgY29uc3QgX09wZXJhdGlvbjMmIF9feikKICAg
IDogX01fZm4xKF9feCksIF9NX2ZuMihfX3kpLCBfTV9mbjMoX196KSB7IH0KICB0eXBlbmFtZSBf
T3BlcmF0aW9uMTo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVy
YXRpb24yOjphcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV9mbjEoX01f
Zm4yKF9feCksIF9NX2ZuMyhfX3gpKTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlv
bjEsIGNsYXNzIF9PcGVyYXRpb24yLCBjbGFzcyBfT3BlcmF0aW9uMz4KaW5saW5lIGJpbmFyeV9j
b21wb3NlPF9PcGVyYXRpb24xLCBfT3BlcmF0aW9uMiwgX09wZXJhdGlvbjM+CmNvbXBvc2UyKGNv
bnN0IF9PcGVyYXRpb24xJiBfX2ZuMSwgY29uc3QgX09wZXJhdGlvbjImIF9fZm4yLAogICAgICAg
ICBjb25zdCBfT3BlcmF0aW9uMyYgX19mbjMpCnsKICByZXR1cm4gYmluYXJ5X2NvbXBvc2U8X09w
ZXJhdGlvbjEsX09wZXJhdGlvbjIsX09wZXJhdGlvbjM+CiAgICAoX19mbjEsIF9fZm4yLCBfX2Zu
Myk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0PgpjbGFzcyBwb2ludGVy
X3RvX3VuYXJ5X2Z1bmN0aW9uIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+
IHsKcHJvdGVjdGVkOgogIF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcpOwpwdWJsaWM6CiAgcG9pbnRl
cl90b191bmFyeV9mdW5jdGlvbigpIHt9CiAgZXhwbGljaXQgcG9pbnRlcl90b191bmFyeV9mdW5j
dGlvbihfUmVzdWx0ICgqX194KShfQXJnKSkgOiBfTV9wdHIoX194KSB7fQogIF9SZXN1bHQgb3Bl
cmF0b3IoKShfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gX01fcHRyKF9feCk7IH0KfTsKCnRlbXBs
YXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0PgppbmxpbmUgcG9pbnRlcl90b191bmFyeV9m
dW5jdGlvbjxfQXJnLCBfUmVzdWx0PiBwdHJfZnVuKF9SZXN1bHQgKCpfX3gpKF9BcmcpKQp7CiAg
cmV0dXJuIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4oX194KTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4KY2xhc3Mg
cG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24gOgogIHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X0Fy
ZzEsX0FyZzIsX1Jlc3VsdD4gewpwcm90ZWN0ZWQ6CiAgICBfUmVzdWx0ICgqX01fcHRyKShfQXJn
MSwgX0FyZzIpOwpwdWJsaWM6CiAgICBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbigpIHt9CiAg
ICBleHBsaWNpdCBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbihfUmVzdWx0ICgqX194KShfQXJn
MSwgX0FyZzIpKQogICAgICA6IF9NX3B0cihfX3gpIHt9CiAgICBfUmVzdWx0IG9wZXJhdG9yKCko
X0FyZzEgX194LCBfQXJnMiBfX3kpIGNvbnN0IHsKICAgICAgcmV0dXJuIF9NX3B0cihfX3gsIF9f
eSk7CiAgICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBf
UmVzdWx0PgppbmxpbmUgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jl
c3VsdD4KcHRyX2Z1bihfUmVzdWx0ICgqX194KShfQXJnMSwgX0FyZzIpKSB7CiAgcmV0dXJuIHBv
aW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+KF9feCk7Cn0KCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX0lkZW50aXR5IDogcHVibGljIHVuYXJ5X2Z1bmN0
aW9uPF9UcCxfVHA+IHsKICBfVHAmIG9wZXJhdG9yKCkoX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJu
IF9feDsgfQogIGNvbnN0IF9UcCYgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyBy
ZXR1cm4gX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBzdHJ1Y3QgaWRlbnRpdHkgOiBw
dWJsaWMgX0lkZW50aXR5PF9UcD4ge307CgoKdGVtcGxhdGUgPGNsYXNzIF9QYWlyPgpzdHJ1Y3Qg
X1NlbGVjdDFzdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFpciwgdHlwZW5hbWUgX1BhaXI6
OmZpcnN0X3R5cGU+IHsKICB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlwZSYgb3BlcmF0b3IoKShf
UGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LmZpcnN0OwogIH0KICBjb25zdCB0eXBl
bmFtZSBfUGFpcjo6Zmlyc3RfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBfUGFpciYgX194KSBjb25z
dCB7CiAgICByZXR1cm4gX194LmZpcnN0OwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4K
c3RydWN0IF9TZWxlY3QybmQgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1BhaXIsIHR5cGVuYW1l
IF9QYWlyOjpzZWNvbmRfdHlwZT4KewogIHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZSYgb3Bl
cmF0b3IoKShfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LnNlY29uZDsKICB9CiAg
Y29uc3QgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9QYWly
JiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guc2Vjb25kOwogIH0KfTsKCnRlbXBsYXRlIDxj
bGFzcyBfUGFpcj4gc3RydWN0IHNlbGVjdDFzdCA6IHB1YmxpYyBfU2VsZWN0MXN0PF9QYWlyPiB7
fTsKdGVtcGxhdGUgPGNsYXNzIF9QYWlyPiBzdHJ1Y3Qgc2VsZWN0Mm5kIDogcHVibGljIF9TZWxl
Y3QybmQ8X1BhaXI+IHt9OwoKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzI+CnN0
cnVjdCBfUHJvamVjdDFzdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X0FyZzEsIF9BcmcyLCBf
QXJnMT4gewogIF9BcmcxIG9wZXJhdG9yKCkoY29uc3QgX0FyZzEmIF9feCwgY29uc3QgX0FyZzIm
KSBjb25zdCB7IHJldHVybiBfX3g7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3Mg
X0FyZzI+CnN0cnVjdCBfUHJvamVjdDJuZCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X0FyZzEs
IF9BcmcyLCBfQXJnMj4gewogIF9BcmcyIG9wZXJhdG9yKCkoY29uc3QgX0FyZzEmLCBjb25zdCBf
QXJnMiYgX195KSBjb25zdCB7IHJldHVybiBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQXJn
MSwgY2xhc3MgX0FyZzI+CnN0cnVjdCBwcm9qZWN0MXN0IDogcHVibGljIF9Qcm9qZWN0MXN0PF9B
cmcxLCBfQXJnMj4ge307Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPgpzdHJ1
Y3QgcHJvamVjdDJuZCA6IHB1YmxpYyBfUHJvamVjdDJuZDxfQXJnMSwgX0FyZzI+IHt9OwoKCgoK
CnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgX0NvbnN0YW50X3ZvaWRfZnVuIHsKICB0
eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7CiAgcmVzdWx0X3R5cGUgX01fdmFsOwoKICBfQ29u
c3RhbnRfdm9pZF9mdW4oY29uc3QgcmVzdWx0X3R5cGUmIF9fdikgOiBfTV92YWwoX192KSB7fQog
IGNvbnN0IHJlc3VsdF90eXBlJiBvcGVyYXRvcigpKCkgY29uc3QgeyByZXR1cm4gX01fdmFsOyB9
Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdCwgY2xhc3MgX0FyZ3VtZW50PgpzdHJ1Y3QgX0Nv
bnN0YW50X3VuYXJ5X2Z1biB7CiAgdHlwZWRlZiBfQXJndW1lbnQgYXJndW1lbnRfdHlwZTsKICB0
eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7CiAgcmVzdWx0X3R5cGUgX01fdmFsOwoKICBfQ29u
c3RhbnRfdW5hcnlfZnVuKGNvbnN0IHJlc3VsdF90eXBlJiBfX3YpIDogX01fdmFsKF9fdikge30K
ICBjb25zdCByZXN1bHRfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBfQXJndW1lbnQmKSBjb25zdCB7
IHJldHVybiBfTV92YWw7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0LCBjbGFzcyBfQXJn
MSwgY2xhc3MgX0FyZzI+CnN0cnVjdCBfQ29uc3RhbnRfYmluYXJ5X2Z1biB7CiAgdHlwZWRlZiBf
QXJnMSBmaXJzdF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX0FyZzIgc2Vjb25kX2FyZ3VtZW50
X3R5cGU7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwogIF9SZXN1bHQgX01fdmFsOwoK
ICBfQ29uc3RhbnRfYmluYXJ5X2Z1bihjb25zdCBfUmVzdWx0JiBfX3YpIDogX01fdmFsKF9fdikg
e30KICBjb25zdCByZXN1bHRfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBfQXJnMSYsIGNvbnN0IF9B
cmcyJikgY29uc3QgewogICAgcmV0dXJuIF9NX3ZhbDsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1Jlc3VsdD4Kc3RydWN0IGNvbnN0YW50X3ZvaWRfZnVuIDogcHVibGljIF9Db25zdGFudF92b2lk
X2Z1bjxfUmVzdWx0PiB7CiAgY29uc3RhbnRfdm9pZF9mdW4oY29uc3QgX1Jlc3VsdCYgX192KSA6
IF9Db25zdGFudF92b2lkX2Z1bjxfUmVzdWx0PihfX3YpIHt9Cn07CgoKdGVtcGxhdGUgPGNsYXNz
IF9SZXN1bHQsCiAgICAgICAgICBjbGFzcyBfQXJndW1lbnQgPSBfUmVzdWx0PgpzdHJ1Y3QgY29u
c3RhbnRfdW5hcnlfZnVuIDogcHVibGljIF9Db25zdGFudF91bmFyeV9mdW48X1Jlc3VsdCwgX0Fy
Z3VtZW50Pgp7CiAgY29uc3RhbnRfdW5hcnlfZnVuKGNvbnN0IF9SZXN1bHQmIF9fdikKICAgIDog
X0NvbnN0YW50X3VuYXJ5X2Z1bjxfUmVzdWx0LCBfQXJndW1lbnQ+KF9fdikge30KfTsKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1Jlc3VsdCwKICAgICAgICAgIGNsYXNzIF9BcmcxID0gX1Jlc3VsdCwKICAg
ICAgICAgIGNsYXNzIF9BcmcyID0gX0FyZzE+CnN0cnVjdCBjb25zdGFudF9iaW5hcnlfZnVuCiAg
OiBwdWJsaWMgX0NvbnN0YW50X2JpbmFyeV9mdW48X1Jlc3VsdCwgX0FyZzEsIF9BcmcyPgp7CiAg
Y29uc3RhbnRfYmluYXJ5X2Z1bihjb25zdCBfUmVzdWx0JiBfX3YpCiAgICA6IF9Db25zdGFudF9i
aW5hcnlfZnVuPF9SZXN1bHQsIF9BcmcxLCBfQXJnMj4oX192KSB7fQp9OwoKdGVtcGxhdGUgPGNs
YXNzIF9SZXN1bHQ+CmlubGluZSBjb25zdGFudF92b2lkX2Z1bjxfUmVzdWx0PiBjb25zdGFudDAo
Y29uc3QgX1Jlc3VsdCYgX192YWwpCnsKICByZXR1cm4gY29uc3RhbnRfdm9pZF9mdW48X1Jlc3Vs
dD4oX192YWwpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdD4KaW5saW5lIGNvbnN0YW50X3Vu
YXJ5X2Z1bjxfUmVzdWx0LF9SZXN1bHQ+IGNvbnN0YW50MShjb25zdCBfUmVzdWx0JiBfX3ZhbCkK
ewogIHJldHVybiBjb25zdGFudF91bmFyeV9mdW48X1Jlc3VsdCxfUmVzdWx0PihfX3ZhbCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0PgppbmxpbmUgY29uc3RhbnRfYmluYXJ5X2Z1bjxfUmVz
dWx0LF9SZXN1bHQsX1Jlc3VsdD4KY29uc3RhbnQyKGNvbnN0IF9SZXN1bHQmIF9fdmFsKQp7CiAg
cmV0dXJuIGNvbnN0YW50X2JpbmFyeV9mdW48X1Jlc3VsdCxfUmVzdWx0LF9SZXN1bHQ+KF9fdmFs
KTsKfQoKCgpjbGFzcyBzdWJ0cmFjdGl2ZV9ybmcgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dW5z
aWduZWQgaW50LCB1bnNpZ25lZCBpbnQ+IHsKcHJpdmF0ZToKICB1bnNpZ25lZCBpbnQgX01fdGFi
bGVbNTVdOwogIHNpemVfdCBfTV9pbmRleDE7CiAgc2l6ZV90IF9NX2luZGV4MjsKcHVibGljOgog
IHVuc2lnbmVkIGludCBvcGVyYXRvcigpKHVuc2lnbmVkIGludCBfX2xpbWl0KSB7CiAgICBfTV9p
bmRleDEgPSAoX01faW5kZXgxICsgMSkgJSA1NTsKICAgIF9NX2luZGV4MiA9IChfTV9pbmRleDIg
KyAxKSAlIDU1OwogICAgX01fdGFibGVbX01faW5kZXgxXSA9IF9NX3RhYmxlW19NX2luZGV4MV0g
LSBfTV90YWJsZVtfTV9pbmRleDJdOwogICAgcmV0dXJuIF9NX3RhYmxlW19NX2luZGV4MV0gJSBf
X2xpbWl0OwogIH0KCiAgdm9pZCBfTV9pbml0aWFsaXplKHVuc2lnbmVkIGludCBfX3NlZWQpCiAg
ewogICAgdW5zaWduZWQgaW50IF9fayA9IDE7CiAgICBfTV90YWJsZVs1NF0gPSBfX3NlZWQ7CiAg
ICBzaXplX3QgX19pOwogICAgZm9yIChfX2kgPSAwOyBfX2kgPCA1NDsgX19pKyspIHsKICAgICAg
ICBzaXplX3QgX19paSA9ICgyMSAqIChfX2kgKyAxKSAlIDU1KSAtIDE7CiAgICAgICAgX01fdGFi
bGVbX19paV0gPSBfX2s7CiAgICAgICAgX19rID0gX19zZWVkIC0gX19rOwogICAgICAgIF9fc2Vl
ZCA9IF9NX3RhYmxlW19faWldOwogICAgfQogICAgZm9yIChpbnQgX19sb29wID0gMDsgX19sb29w
IDwgNDsgX19sb29wKyspIHsKICAgICAgICBmb3IgKF9faSA9IDA7IF9faSA8IDU1OyBfX2krKykK
ICAgICAgICAgICAgX01fdGFibGVbX19pXSA9IF9NX3RhYmxlW19faV0gLSBfTV90YWJsZVsoMSAr
IF9faSArIDMwKSAlIDU1XTsKICAgIH0KICAgIF9NX2luZGV4MSA9IDA7CiAgICBfTV9pbmRleDIg
PSAzMTsKICB9CgogIHN1YnRyYWN0aXZlX3JuZyh1bnNpZ25lZCBpbnQgX19zZWVkKSB7IF9NX2lu
aXRpYWxpemUoX19zZWVkKTsgfQogIHN1YnRyYWN0aXZlX3JuZygpIHsgX01faW5pdGlhbGl6ZSgx
NjE4MDMzOTh1KTsgfQp9OwojIDUzMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIG1l
bV9mdW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAqLF9SZXQ+IHsKcHVibGljOgogIGV4
cGxpY2l0IG1lbV9mdW5fdChfUmV0IChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICBf
UmV0IG9wZXJhdG9yKCkoX1RwKiBfX3ApIGNvbnN0IHsgcmV0dXJuIChfX3AtPipfTV9mKSgpOyB9
CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0
LCBjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlv
bjxjb25zdCBfVHAqLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fdChf
UmV0IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9y
KCkoY29uc3QgX1RwKiBfX3ApIGNvbnN0IHsgcmV0dXJuIChfX3AtPipfTV9mKSgpOyB9CnByaXZh
dGU6CiAgX1JldCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jl
dCwgY2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u
PF9UcCxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KF9SZXQgKF9UcDo6
Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29u
c3QgeyByZXR1cm4gKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2Yp
KCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1f
ZnVuX3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0PiB7CnB1YmxpYzoKICBl
eHBsaWNpdCBjb25zdF9tZW1fZnVuX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDog
X01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fcikgY29uc3QgeyBy
ZXR1cm4gKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCkgY29u
c3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFz
cyBtZW1fZnVuMV90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAqLF9BcmcsX1JldD4gewpw
dWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSkgOiBf
TV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCogX19wLCBfQXJnIF9feCkgY29uc3Qg
eyByZXR1cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9m
KShfQXJnKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+
CmNsYXNzIGNvbnN0X21lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPGNvbnN0IF9U
cCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV90KF9SZXQg
KF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9y
KCkoY29uc3QgX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdAogICAgeyByZXR1cm4gKF9fcC0+Kl9N
X2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsK
CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9m
dW4xX3JlZl90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyxfUmV0PiB7CnB1Ymxp
YzoKICBleHBsaWNpdCBtZW1fZnVuMV9yZWZfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSkgOiBf
TV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3Qg
eyByZXR1cm4gKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2Yp
KF9BcmcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4K
Y2xhc3MgY29uc3RfbWVtX2Z1bjFfcmVmX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxf
QXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3JlZl90KF9SZXQg
KF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9y
KCkoY29uc3QgX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKShf
X3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFy
eV9mdW5jdGlvbjxfVHAqLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fdCh2b2lk
IChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwKiBf
X3ApIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9m
KSgpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl90PHZvaWQs
IF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKix2b2lkPiB7CnB1YmxpYzoK
ICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3Qodm9pZCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBf
TV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCogX19wKSBjb25zdCB7IChf
X3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsK
CnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fcmVmX3Q8dm9pZCwgX1RwPiA6IHB1
YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1
bl9yZWZfdCh2b2lkIChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJh
dG9yKCkoX1RwJiBfX3IpIGNvbnN0IHsgKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQg
KF9UcDo6Kl9NX2YpKCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1f
ZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLHZvaWQ+IHsK
cHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fcmVmX3Qodm9pZCAoX1RwOjoqX19wZiko
KSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19y
KSBjb25zdCB7IChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgp
IGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1
bjFfdDx2b2lkLCBfVHAsIF9Bcmc+IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAqLF9Bcmcs
dm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfdCh2b2lkIChfVHA6OipfX3BmKShf
QXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCogX19wLCBfQXJnIF9f
eCkgY29uc3QgeyAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9N
X2YpKF9BcmcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29u
c3RfbWVtX2Z1bjFfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9u
PGNvbnN0IF9UcCosX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVu
MV90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lk
IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IChfX3AtPipfTV9m
KShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9yZWZfdDx2b2lk
LCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+IHsK
cHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9Bcmcp
KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwJiBfX3IsIF9BcmcgX194KSBj
b25zdCB7IChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShf
QXJnKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21l
bV9mdW4xX3JlZl90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248
X1RwLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVmX3Qo
dm9pZCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3Bl
cmF0b3IoKShjb25zdCBfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fci4qX01fZikoX194
KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKCgoKCgoK
dGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIG1lbV9mdW5fdDxfUmV0LF9U
cD4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKCkpCiAgeyByZXR1cm4gbWVtX2Z1bl90PF9SZXQs
X1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgY29u
c3RfbWVtX2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoKSBjb25zdCkK
ICB7IHJldHVybiBjb25zdF9tZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxj
bGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBtZW1fZnVuX3JlZl90PF9SZXQsX1RwPiBtZW1f
ZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKCkpCiAgeyByZXR1cm4gbWVtX2Z1bl9yZWZfdDxfUmV0
LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIGNv
bnN0X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZiko
KSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuX3JlZl90PF9SZXQsX1RwPihfX2YpOyB9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgbWVt
X2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAg
eyByZXR1cm4gbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfdDxf
UmV0LF9UcCxfQXJnPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCiAgeyBy
ZXR1cm4gY29uc3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgbWVtX2Z1bjFfcmVmX3Q8
X1JldCxfVHAsX0FyZz4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJl
dHVybiBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfcmVm
X3Q8X1JldCxfVHAsX0FyZz4KbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25z
dCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgbWVt
X2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuMShfUmV0IChfVHA6OipfX2YpKF9BcmcpKQog
IHsgcmV0dXJuIG1lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNs
YXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIGNvbnN0X21lbV9mdW4xX3Q8
X1JldCxfVHAsX0FyZz4gbWVtX2Z1bjEoX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7
IHJldHVybiBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRl
IDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV9yZWZf
dDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuMV9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7
IHJldHVybiBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1bjFf
cmVmX3Q8X1JldCxfVHAsX0FyZz4KbWVtX2Z1bjFfcmVmKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykg
Y29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4oX19m
KTsgfQoKfQojIDYwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RyZWUuaCIg
MiAzCgpuYW1lc3BhY2Ugc3RkCnsKCnR5cGVkZWYgYm9vbCBfUmJfdHJlZV9Db2xvcl90eXBlOwpj
b25zdCBfUmJfdHJlZV9Db2xvcl90eXBlIF9TX3JiX3RyZWVfcmVkID0gZmFsc2U7CmNvbnN0IF9S
Yl90cmVlX0NvbG9yX3R5cGUgX1NfcmJfdHJlZV9ibGFjayA9IHRydWU7CgpzdHJ1Y3QgX1JiX3Ry
ZWVfbm9kZV9iYXNlCnsKICB0eXBlZGVmIF9SYl90cmVlX0NvbG9yX3R5cGUgX0NvbG9yX3R5cGU7
CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9CYXNlX3B0cjsKCiAgX0NvbG9yX3R5cGUg
X01fY29sb3I7CiAgX0Jhc2VfcHRyIF9NX3BhcmVudDsKICBfQmFzZV9wdHIgX01fbGVmdDsKICBf
QmFzZV9wdHIgX01fcmlnaHQ7CgogIHN0YXRpYyBfQmFzZV9wdHIgX1NfbWluaW11bShfQmFzZV9w
dHIgX194KQogIHsKICAgIHdoaWxlIChfX3gtPl9NX2xlZnQgIT0gMCkgX194ID0gX194LT5fTV9s
ZWZ0OwogICAgcmV0dXJuIF9feDsKICB9CgogIHN0YXRpYyBfQmFzZV9wdHIgX1NfbWF4aW11bShf
QmFzZV9wdHIgX194KQogIHsKICAgIHdoaWxlIChfX3gtPl9NX3JpZ2h0ICE9IDApIF9feCA9IF9f
eC0+X01fcmlnaHQ7CiAgICByZXR1cm4gX194OwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVmFs
dWU+CnN0cnVjdCBfUmJfdHJlZV9ub2RlIDogcHVibGljIF9SYl90cmVlX25vZGVfYmFzZQp7CiAg
dHlwZWRlZiBfUmJfdHJlZV9ub2RlPF9WYWx1ZT4qIF9MaW5rX3R5cGU7CiAgX1ZhbHVlIF9NX3Zh
bHVlX2ZpZWxkOwp9OwoKCnN0cnVjdCBfUmJfdHJlZV9iYXNlX2l0ZXJhdG9yCnsKICB0eXBlZGVm
IF9SYl90cmVlX25vZGVfYmFzZTo6X0Jhc2VfcHRyIF9CYXNlX3B0cjsKICB0eXBlZGVmIGJpZGly
ZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgcHRyZGlm
Zl90IGRpZmZlcmVuY2VfdHlwZTsKICBfQmFzZV9wdHIgX01fbm9kZTsKCiAgdm9pZCBfTV9pbmNy
ZW1lbnQoKQogIHsKICAgIGlmIChfTV9ub2RlLT5fTV9yaWdodCAhPSAwKSB7CiAgICAgIF9NX25v
ZGUgPSBfTV9ub2RlLT5fTV9yaWdodDsKICAgICAgd2hpbGUgKF9NX25vZGUtPl9NX2xlZnQgIT0g
MCkKICAgICAgICBfTV9ub2RlID0gX01fbm9kZS0+X01fbGVmdDsKICAgIH0KICAgIGVsc2Ugewog
ICAgICBfQmFzZV9wdHIgX195ID0gX01fbm9kZS0+X01fcGFyZW50OwogICAgICB3aGlsZSAoX01f
bm9kZSA9PSBfX3ktPl9NX3JpZ2h0KSB7CiAgICAgICAgX01fbm9kZSA9IF9feTsKICAgICAgICBf
X3kgPSBfX3ktPl9NX3BhcmVudDsKICAgICAgfQogICAgICBpZiAoX01fbm9kZS0+X01fcmlnaHQg
IT0gX195KQogICAgICAgIF9NX25vZGUgPSBfX3k7CiAgICB9CiAgfQoKICB2b2lkIF9NX2RlY3Jl
bWVudCgpCiAgewogICAgaWYgKF9NX25vZGUtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfcmVkICYm
CiAgICAgICAgX01fbm9kZS0+X01fcGFyZW50LT5fTV9wYXJlbnQgPT0gX01fbm9kZSkKICAgICAg
X01fbm9kZSA9IF9NX25vZGUtPl9NX3JpZ2h0OwogICAgZWxzZSBpZiAoX01fbm9kZS0+X01fbGVm
dCAhPSAwKSB7CiAgICAgIF9CYXNlX3B0ciBfX3kgPSBfTV9ub2RlLT5fTV9sZWZ0OwogICAgICB3
aGlsZSAoX195LT5fTV9yaWdodCAhPSAwKQogICAgICAgIF9feSA9IF9feS0+X01fcmlnaHQ7CiAg
ICAgIF9NX25vZGUgPSBfX3k7CiAgICB9CiAgICBlbHNlIHsKICAgICAgX0Jhc2VfcHRyIF9feSA9
IF9NX25vZGUtPl9NX3BhcmVudDsKICAgICAgd2hpbGUgKF9NX25vZGUgPT0gX195LT5fTV9sZWZ0
KSB7CiAgICAgICAgX01fbm9kZSA9IF9feTsKICAgICAgICBfX3kgPSBfX3ktPl9NX3BhcmVudDsK
ICAgICAgfQogICAgICBfTV9ub2RlID0gX195OwogICAgfQogIH0KfTsKCnRlbXBsYXRlIDxjbGFz
cyBfVmFsdWUsIGNsYXNzIF9SZWYsIGNsYXNzIF9QdHI+CnN0cnVjdCBfUmJfdHJlZV9pdGVyYXRv
ciA6IHB1YmxpYyBfUmJfdHJlZV9iYXNlX2l0ZXJhdG9yCnsKICB0eXBlZGVmIF9WYWx1ZSB2YWx1
ZV90eXBlOwogIHR5cGVkZWYgX1JlZiByZWZlcmVuY2U7CiAgdHlwZWRlZiBfUHRyIHBvaW50ZXI7
CiAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsdWUsIF9WYWx1ZSYsIF9WYWx1ZSo+CiAg
ICBpdGVyYXRvcjsKICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwgY29uc3QgX1Zh
bHVlJiwgY29uc3QgX1ZhbHVlKj4KICAgIGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgX1JiX3Ry
ZWVfaXRlcmF0b3I8X1ZhbHVlLCBfUmVmLCBfUHRyPgogICAgX1NlbGY7CiAgdHlwZWRlZiBfUmJf
dHJlZV9ub2RlPF9WYWx1ZT4qIF9MaW5rX3R5cGU7CgogIF9SYl90cmVlX2l0ZXJhdG9yKCkge30K
ICBfUmJfdHJlZV9pdGVyYXRvcihfTGlua190eXBlIF9feCkgeyBfTV9ub2RlID0gX194OyB9CiAg
X1JiX3RyZWVfaXRlcmF0b3IoY29uc3QgaXRlcmF0b3ImIF9faXQpIHsgX01fbm9kZSA9IF9faXQu
X01fbm9kZTsgfQoKICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gX0xpbmtf
dHlwZShfTV9ub2RlKS0+X01fdmFsdWVfZmllbGQ7IH0KICBwb2ludGVyIG9wZXJhdG9yLT4oKSBj
b25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKICBfU2VsZiYgb3BlcmF0b3IrKygpIHsg
X01faW5jcmVtZW50KCk7IHJldHVybiAqdGhpczsgfQogIF9TZWxmIG9wZXJhdG9yKysoaW50KSB7
CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgX01faW5jcmVtZW50KCk7CiAgICByZXR1cm4g
X190bXA7CiAgfQoKICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsgX01fZGVjcmVtZW50KCk7IHJldHVy
biAqdGhpczsgfQogIF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0
aGlzOwogICAgX01fZGVjcmVtZW50KCk7CiAgICByZXR1cm4gX190bXA7CiAgfQp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9WYWx1ZSwgY2xhc3MgX1JlZiwgY2xhc3MgX1B0cj4KaW5saW5lIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsdWUsIF9SZWYsIF9QdHI+JiBfX3gs
CiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbHVlLCBf
UmVmLCBfUHRyPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV9ub2RlID09IF9feS5fTV9ub2RlOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ZhbHVlPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9S
Yl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwgY29uc3QgX1ZhbHVlJiwgY29uc3QgX1ZhbHVlKj4mIF9f
eCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsdWUs
IF9WYWx1ZSYsIF9WYWx1ZSo+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX25vZGUgPT0gX195Ll9N
X25vZGU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVmFsdWU+CmlubGluZSBib29sIG9wZXJhdG9yPT0o
Y29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbHVlLCBfVmFsdWUmLCBfVmFsdWUqPiYgX194LAog
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwgY29u
c3QgX1ZhbHVlJiwgY29uc3QgX1ZhbHVlKj4mIF9feSkgewogIHJldHVybiBfX3guX01fbm9kZSA9
PSBfX3kuX01fbm9kZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9WYWx1ZSwgY2xhc3MgX1JlZiwgY2xh
c3MgX1B0cj4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxf
VmFsdWUsIF9SZWYsIF9QdHI+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1Ji
X3RyZWVfaXRlcmF0b3I8X1ZhbHVlLCBfUmVmLCBfUHRyPiYgX195KSB7CiAgcmV0dXJuIF9feC5f
TV9ub2RlICE9IF9feS5fTV9ub2RlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ZhbHVlPgppbmxpbmUg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwgY29uc3QgX1Zh
bHVlJiwgY29uc3QgX1ZhbHVlKj4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBf
UmJfdHJlZV9pdGVyYXRvcjxfVmFsdWUsIF9WYWx1ZSYsIF9WYWx1ZSo+JiBfX3kpIHsKICByZXR1
cm4gX194Ll9NX25vZGUgIT0gX195Ll9NX25vZGU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVmFsdWU+
CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbHVlLCBf
VmFsdWUmLCBfVmFsdWUqPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9SYl90
cmVlX2l0ZXJhdG9yPF9WYWx1ZSwgY29uc3QgX1ZhbHVlJiwgY29uc3QgX1ZhbHVlKj4mIF9feSkg
ewogIHJldHVybiBfX3guX01fbm9kZSAhPSBfX3kuX01fbm9kZTsKfQoKaW5saW5lIHZvaWQKX1Ji
X3RyZWVfcm90YXRlX2xlZnQoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3gsIF9SYl90cmVlX25vZGVf
YmFzZSomIF9fcm9vdCkKewogIF9SYl90cmVlX25vZGVfYmFzZSogX195ID0gX194LT5fTV9yaWdo
dDsKICBfX3gtPl9NX3JpZ2h0ID0gX195LT5fTV9sZWZ0OwogIGlmIChfX3ktPl9NX2xlZnQgIT0w
KQogICAgX195LT5fTV9sZWZ0LT5fTV9wYXJlbnQgPSBfX3g7CiAgX195LT5fTV9wYXJlbnQgPSBf
X3gtPl9NX3BhcmVudDsKCiAgaWYgKF9feCA9PSBfX3Jvb3QpCiAgICBfX3Jvb3QgPSBfX3k7CiAg
ZWxzZSBpZiAoX194ID09IF9feC0+X01fcGFyZW50LT5fTV9sZWZ0KQogICAgX194LT5fTV9wYXJl
bnQtPl9NX2xlZnQgPSBfX3k7CiAgZWxzZQogICAgX194LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0g
X195OwogIF9feS0+X01fbGVmdCA9IF9feDsKICBfX3gtPl9NX3BhcmVudCA9IF9feTsKfQoKaW5s
aW5lIHZvaWQKX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9SYl90cmVlX25vZGVfYmFzZSogX194LCBf
UmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3QpCnsKICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9
IF9feC0+X01fbGVmdDsKICBfX3gtPl9NX2xlZnQgPSBfX3ktPl9NX3JpZ2h0OwogIGlmIChfX3kt
Pl9NX3JpZ2h0ICE9IDApCiAgICBfX3ktPl9NX3JpZ2h0LT5fTV9wYXJlbnQgPSBfX3g7CiAgX195
LT5fTV9wYXJlbnQgPSBfX3gtPl9NX3BhcmVudDsKCiAgaWYgKF9feCA9PSBfX3Jvb3QpCiAgICBf
X3Jvb3QgPSBfX3k7CiAgZWxzZSBpZiAoX194ID09IF9feC0+X01fcGFyZW50LT5fTV9yaWdodCkK
ICAgIF9feC0+X01fcGFyZW50LT5fTV9yaWdodCA9IF9feTsKICBlbHNlCiAgICBfX3gtPl9NX3Bh
cmVudC0+X01fbGVmdCA9IF9feTsKICBfX3ktPl9NX3JpZ2h0ID0gX194OwogIF9feC0+X01fcGFy
ZW50ID0gX195Owp9CgppbmxpbmUgdm9pZApfUmJfdHJlZV9yZWJhbGFuY2UoX1JiX3RyZWVfbm9k
ZV9iYXNlKiBfX3gsIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCkKewogIF9feC0+X01fY29s
b3IgPSBfU19yYl90cmVlX3JlZDsKICB3aGlsZSAoX194ICE9IF9fcm9vdCAmJiBfX3gtPl9NX3Bh
cmVudC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpIHsKICAgIGlmIChfX3gtPl9NX3BhcmVu
dCA9PSBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9sZWZ0KSB7CiAgICAgIF9SYl90cmVl
X25vZGVfYmFzZSogX195ID0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fcmlnaHQ7CiAg
ICAgIGlmIChfX3kgJiYgX195LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCkgewogICAgICAg
IF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgX195
LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgX194LT5fTV9wYXJlbnQtPl9N
X3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAgICBfX3ggPSBfX3gtPl9N
X3BhcmVudC0+X01fcGFyZW50OwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIGlmIChfX3gg
PT0gX194LT5fTV9wYXJlbnQtPl9NX3JpZ2h0KSB7CiAgICAgICAgICBfX3ggPSBfX3gtPl9NX3Bh
cmVudDsKICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9feCwgX19yb290KTsKICAgICAg
ICB9CiAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsK
ICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVf
cmVkOwogICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdodChfX3gtPl9NX3BhcmVudC0+X01fcGFy
ZW50LCBfX3Jvb3QpOwogICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgX1JiX3RyZWVfbm9k
ZV9iYXNlKiBfX3kgPSBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9sZWZ0OwogICAgICBp
ZiAoX195ICYmIF9feS0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpIHsKICAgICAgICBfX3gt
Pl9NX3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgIF9feS0+X01f
Y29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9wYXJl
bnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgX194ID0gX194LT5fTV9wYXJl
bnQtPl9NX3BhcmVudDsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBpZiAoX194ID09IF9f
eC0+X01fcGFyZW50LT5fTV9sZWZ0KSB7CiAgICAgICAgICBfX3ggPSBfX3gtPl9NX3BhcmVudDsK
ICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdodChfX3gsIF9fcm9vdCk7CiAgICAgICAgfQog
ICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAg
ICAgX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsK
ICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LCBf
X3Jvb3QpOwogICAgICB9CiAgICB9CiAgfQogIF9fcm9vdC0+X01fY29sb3IgPSBfU19yYl90cmVl
X2JsYWNrOwp9CgppbmxpbmUgX1JiX3RyZWVfbm9kZV9iYXNlKgpfUmJfdHJlZV9yZWJhbGFuY2Vf
Zm9yX2VyYXNlKF9SYl90cmVlX25vZGVfYmFzZSogX196LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX2xlZnRtb3N0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcmlnaHRtb3N0KQp7CiAgX1JiX3Ry
ZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3o7CiAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3ggPSAwOwog
IF9SYl90cmVlX25vZGVfYmFzZSogX194X3BhcmVudCA9IDA7CiAgaWYgKF9feS0+X01fbGVmdCA9
PSAwKQogICAgX194ID0gX195LT5fTV9yaWdodDsKICBlbHNlCiAgICBpZiAoX195LT5fTV9yaWdo
dCA9PSAwKQogICAgICBfX3ggPSBfX3ktPl9NX2xlZnQ7CiAgICBlbHNlIHsKICAgICAgX195ID0g
X195LT5fTV9yaWdodDsKICAgICAgd2hpbGUgKF9feS0+X01fbGVmdCAhPSAwKQogICAgICAgIF9f
eSA9IF9feS0+X01fbGVmdDsKICAgICAgX194ID0gX195LT5fTV9yaWdodDsKICAgIH0KICBpZiAo
X195ICE9IF9feikgewogICAgX196LT5fTV9sZWZ0LT5fTV9wYXJlbnQgPSBfX3k7CiAgICBfX3kt
Pl9NX2xlZnQgPSBfX3otPl9NX2xlZnQ7CiAgICBpZiAoX195ICE9IF9fei0+X01fcmlnaHQpIHsK
ICAgICAgX194X3BhcmVudCA9IF9feS0+X01fcGFyZW50OwogICAgICBpZiAoX194KSBfX3gtPl9N
X3BhcmVudCA9IF9feS0+X01fcGFyZW50OwogICAgICBfX3ktPl9NX3BhcmVudC0+X01fbGVmdCA9
IF9feDsKICAgICAgX195LT5fTV9yaWdodCA9IF9fei0+X01fcmlnaHQ7CiAgICAgIF9fei0+X01f
cmlnaHQtPl9NX3BhcmVudCA9IF9feTsKICAgIH0KICAgIGVsc2UKICAgICAgX194X3BhcmVudCA9
IF9feTsKICAgIGlmIChfX3Jvb3QgPT0gX196KQogICAgICBfX3Jvb3QgPSBfX3k7CiAgICBlbHNl
IGlmIChfX3otPl9NX3BhcmVudC0+X01fbGVmdCA9PSBfX3opCiAgICAgIF9fei0+X01fcGFyZW50
LT5fTV9sZWZ0ID0gX195OwogICAgZWxzZQogICAgICBfX3otPl9NX3BhcmVudC0+X01fcmlnaHQg
PSBfX3k7CiAgICBfX3ktPl9NX3BhcmVudCA9IF9fei0+X01fcGFyZW50OwogICAgc3RkOjpzd2Fw
KF9feS0+X01fY29sb3IsIF9fei0+X01fY29sb3IpOwogICAgX195ID0gX196OwoKICB9CiAgZWxz
ZSB7CiAgICBfX3hfcGFyZW50ID0gX195LT5fTV9wYXJlbnQ7CiAgICBpZiAoX194KSBfX3gtPl9N
X3BhcmVudCA9IF9feS0+X01fcGFyZW50OwogICAgaWYgKF9fcm9vdCA9PSBfX3opCiAgICAgIF9f
cm9vdCA9IF9feDsKICAgIGVsc2UKICAgICAgaWYgKF9fei0+X01fcGFyZW50LT5fTV9sZWZ0ID09
IF9feikKICAgICAgICBfX3otPl9NX3BhcmVudC0+X01fbGVmdCA9IF9feDsKICAgICAgZWxzZQog
ICAgICAgIF9fei0+X01fcGFyZW50LT5fTV9yaWdodCA9IF9feDsKICAgIGlmIChfX2xlZnRtb3N0
ID09IF9feikKICAgICAgaWYgKF9fei0+X01fcmlnaHQgPT0gMCkKICAgICAgICBfX2xlZnRtb3N0
ID0gX196LT5fTV9wYXJlbnQ7CgogICAgICBlbHNlCiAgICAgICAgX19sZWZ0bW9zdCA9IF9SYl90
cmVlX25vZGVfYmFzZTo6X1NfbWluaW11bShfX3gpOwogICAgaWYgKF9fcmlnaHRtb3N0ID09IF9f
eikKICAgICAgaWYgKF9fei0+X01fbGVmdCA9PSAwKQogICAgICAgIF9fcmlnaHRtb3N0ID0gX196
LT5fTV9wYXJlbnQ7CgogICAgICBlbHNlCiAgICAgICAgX19yaWdodG1vc3QgPSBfUmJfdHJlZV9u
b2RlX2Jhc2U6Ol9TX21heGltdW0oX194KTsKICB9CiAgaWYgKF9feS0+X01fY29sb3IgIT0gX1Nf
cmJfdHJlZV9yZWQpIHsKICAgIHdoaWxlIChfX3ggIT0gX19yb290ICYmIChfX3ggPT0gMCB8fCBf
X3gtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfYmxhY2spKQogICAgICBpZiAoX194ID09IF9feF9w
YXJlbnQtPl9NX2xlZnQpIHsKICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9fdyA9IF9feF9w
YXJlbnQtPl9NX3JpZ2h0OwogICAgICAgIGlmIChfX3ctPl9NX2NvbG9yID09IF9TX3JiX3RyZWVf
cmVkKSB7CiAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAg
ICAgIF9feF9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgICBfUmJf
dHJlZV9yb3RhdGVfbGVmdChfX3hfcGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAgX193ID0gX194
X3BhcmVudC0+X01fcmlnaHQ7CiAgICAgICAgfQogICAgICAgIGlmICgoX193LT5fTV9sZWZ0ID09
IDAgfHwKICAgICAgICAgICAgIF9fdy0+X01fbGVmdC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9i
bGFjaykgJiYKICAgICAgICAgICAgKF9fdy0+X01fcmlnaHQgPT0gMCB8fAogICAgICAgICAgICAg
X193LT5fTV9yaWdodC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9ibGFjaykpIHsKICAgICAgICAg
IF9fdy0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAgICAgIF9feCA9IF9feF9wYXJl
bnQ7CiAgICAgICAgICBfX3hfcGFyZW50ID0gX194X3BhcmVudC0+X01fcGFyZW50OwogICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICBpZiAoX193LT5fTV9yaWdodCA9PSAwIHx8CiAgICAgICAgICAg
ICAgX193LT5fTV9yaWdodC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9ibGFjaykgewogICAgICAg
ICAgICBpZiAoX193LT5fTV9sZWZ0KSBfX3ctPl9NX2xlZnQtPl9NX2NvbG9yID0gX1NfcmJfdHJl
ZV9ibGFjazsKICAgICAgICAgICAgX193LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogICAg
ICAgICAgICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX193LCBfX3Jvb3QpOwogICAgICAgICAgICBf
X3cgPSBfX3hfcGFyZW50LT5fTV9yaWdodDsKICAgICAgICAgIH0KICAgICAgICAgIF9fdy0+X01f
Y29sb3IgPSBfX3hfcGFyZW50LT5fTV9jb2xvcjsKICAgICAgICAgIF9feF9wYXJlbnQtPl9NX2Nv
bG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICAgIGlmIChfX3ctPl9NX3JpZ2h0KSBfX3ct
Pl9NX3JpZ2h0LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICBfUmJfdHJl
ZV9yb3RhdGVfbGVmdChfX3hfcGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAgYnJlYWs7CiAgICAg
ICAgfQogICAgICB9IGVsc2UgewogICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSogX193ID0gX194
X3BhcmVudC0+X01fbGVmdDsKICAgICAgICBpZiAoX193LT5fTV9jb2xvciA9PSBfU19yYl90cmVl
X3JlZCkgewogICAgICAgICAgX193LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAg
ICAgICBfX3hfcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogICAgICAgICAgX1Ji
X3RyZWVfcm90YXRlX3JpZ2h0KF9feF9wYXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICBfX3cgPSBf
X3hfcGFyZW50LT5fTV9sZWZ0OwogICAgICAgIH0KICAgICAgICBpZiAoKF9fdy0+X01fcmlnaHQg
PT0gMCB8fAogICAgICAgICAgICAgX193LT5fTV9yaWdodC0+X01fY29sb3IgPT0gX1NfcmJfdHJl
ZV9ibGFjaykgJiYKICAgICAgICAgICAgKF9fdy0+X01fbGVmdCA9PSAwIHx8CiAgICAgICAgICAg
ICBfX3ctPl9NX2xlZnQtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfYmxhY2spKSB7CiAgICAgICAg
ICBfX3ctPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgICBfX3ggPSBfX3hfcGFy
ZW50OwogICAgICAgICAgX194X3BhcmVudCA9IF9feF9wYXJlbnQtPl9NX3BhcmVudDsKICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgaWYgKF9fdy0+X01fbGVmdCA9PSAwIHx8CiAgICAgICAgICAg
ICAgX193LT5fTV9sZWZ0LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX2JsYWNrKSB7CiAgICAgICAg
ICAgIGlmIChfX3ctPl9NX3JpZ2h0KSBfX3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9IF9TX3JiX3Ry
ZWVfYmxhY2s7CiAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICAg
ICAgICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX193LCBfX3Jvb3QpOwogICAgICAgICAgICBf
X3cgPSBfX3hfcGFyZW50LT5fTV9sZWZ0OwogICAgICAgICAgfQogICAgICAgICAgX193LT5fTV9j
b2xvciA9IF9feF9wYXJlbnQtPl9NX2NvbG9yOwogICAgICAgICAgX194X3BhcmVudC0+X01fY29s
b3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgICAgaWYgKF9fdy0+X01fbGVmdCkgX193LT5f
TV9sZWZ0LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICBfUmJfdHJlZV9y
b3RhdGVfcmlnaHQoX194X3BhcmVudCwgX19yb290KTsKICAgICAgICAgIGJyZWFrOwogICAgICAg
IH0KICAgICAgfQogICAgaWYgKF9feCkgX194LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7
CiAgfQogIHJldHVybiBfX3k7Cn0KCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B
bGxvYywgYm9vbCBfU19pbnN0YW5jZWxlc3M+CmNsYXNzIF9SYl90cmVlX2FsbG9jX2Jhc2Ugewpw
dWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6YWxs
b2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRv
cigpIGNvbnN0IHsgcmV0dXJuIF9NX25vZGVfYWxsb2NhdG9yOyB9CgogIF9SYl90cmVlX2FsbG9j
X2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgIDogX01fbm9kZV9hbGxvY2F0b3Io
X19hKSwgX01faGVhZGVyKDApIHt9Cgpwcm90ZWN0ZWQ6CiAgdHlwZW5hbWUgX0FsbG9jX3RyYWl0
czxfUmJfdHJlZV9ub2RlPF9UcD4sIF9BbGxvYz46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICAg
X01fbm9kZV9hbGxvY2F0b3I7CiAgX1JiX3RyZWVfbm9kZTxfVHA+KiBfTV9oZWFkZXI7CgogIF9S
Yl90cmVlX25vZGU8X1RwPiogX01fZ2V0X25vZGUoKQogICAgeyByZXR1cm4gX01fbm9kZV9hbGxv
Y2F0b3IuYWxsb2NhdGUoMSk7IH0KICB2b2lkIF9NX3B1dF9ub2RlKF9SYl90cmVlX25vZGU8X1Rw
PiogX19wKQogICAgeyBfTV9ub2RlX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9fcCwgMSk7IH0KfTsK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmNsYXNzIF9SYl90cmVlX2FsbG9j
X2Jhc2U8X1RwLCBfQWxsb2MsIHRydWU+IHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0Fs
bG9jX3RyYWl0czxfVHAsIF9BbGxvYz46OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwog
IGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3Jf
dHlwZSgpOyB9CgogIF9SYl90cmVlX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKSA6
IF9NX2hlYWRlcigwKSB7fQoKcHJvdGVjdGVkOgogIF9SYl90cmVlX25vZGU8X1RwPiogX01faGVh
ZGVyOwoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1JiX3RyZWVfbm9kZTxfVHA+
LCBfQWxsb2M+OjpfQWxsb2NfdHlwZQogICAgICAgICAgX0FsbG9jX3R5cGU7CgogIF9SYl90cmVl
X25vZGU8X1RwPiogX01fZ2V0X25vZGUoKQogICAgeyByZXR1cm4gX0FsbG9jX3R5cGU6OmFsbG9j
YXRlKDEpOyB9CiAgdm9pZCBfTV9wdXRfbm9kZShfUmJfdHJlZV9ub2RlPF9UcD4qIF9fcCkKICAg
IHsgX0FsbG9jX3R5cGU6OmRlYWxsb2NhdGUoX19wLCAxKTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNz
IF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX1JiX3RyZWVfYmFzZQogIDogcHVibGljIF9SYl90
cmVlX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgp7CiAgdHlwZWRl
ZiBfUmJfdHJlZV9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgogICAg
ICAgICAgX0Jhc2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxs
b2NhdG9yX3R5cGU7CgogIF9SYl90cmVlX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkK
ICAgIDogX0Jhc2UoX19hKSB7IF9NX2hlYWRlciA9IF9NX2dldF9ub2RlKCk7IH0KICB+X1JiX3Ry
ZWVfYmFzZSgpIHsgX01fcHV0X25vZGUoX01faGVhZGVyKTsgfQoKfTsKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgY2xhc3MgX0NvbXBhcmUs
CiAgICAgICAgICBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8X1ZhbHVlPiA+CmNsYXNzIF9SYl90
cmVlIDogcHJvdGVjdGVkIF9SYl90cmVlX2Jhc2U8X1ZhbHVlLCBfQWxsb2M+IHsKICB0eXBlZGVm
IF9SYl90cmVlX2Jhc2U8X1ZhbHVlLCBfQWxsb2M+IF9CYXNlOwpwcm90ZWN0ZWQ6CiAgdHlwZWRl
ZiBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9CYXNlX3B0cjsKICB0eXBlZGVmIF9SYl90cmVlX25vZGU8
X1ZhbHVlPiBfUmJfdHJlZV9ub2RlOwogIHR5cGVkZWYgX1JiX3RyZWVfQ29sb3JfdHlwZSBfQ29s
b3JfdHlwZTsKcHVibGljOgogIHR5cGVkZWYgX0tleSBrZXlfdHlwZTsKICB0eXBlZGVmIF9WYWx1
ZSB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsKICB0eXBlZGVmIGNv
bnN0IHZhbHVlX3R5cGUqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2YWx1ZV90eXBlJiByZWZl
cmVuY2U7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiBjb25zdF9yZWZlcmVuY2U7CiAgdHlw
ZWRlZiBfUmJfdHJlZV9ub2RlKiBfTGlua190eXBlOwogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlw
ZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CgogIHR5cGVkZWYgdHlwZW5h
bWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBl
IGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9
Cgpwcm90ZWN0ZWQ6CiAgdXNpbmcgX0Jhc2U6Ol9NX2dldF9ub2RlOwogIHVzaW5nIF9CYXNlOjpf
TV9wdXRfbm9kZTsKICB1c2luZyBfQmFzZTo6X01faGVhZGVyOwoKcHJvdGVjdGVkOgoKICBfTGlu
a190eXBlIF9NX2NyZWF0ZV9ub2RlKGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKICB7CiAgICBfTGlu
a190eXBlIF9fdG1wID0gX01fZ2V0X25vZGUoKTsKICAgIHRyeSB7CiAgICAgIGNvbnN0cnVjdCgm
X190bXAtPl9NX3ZhbHVlX2ZpZWxkLCBfX3gpOwogICAgfQogICAgY2F0Y2goLi4uKSB7IF9NX3B1
dF9ub2RlKF9fdG1wKTsgdGhyb3c7IH07CiAgICByZXR1cm4gX190bXA7CiAgfQoKICBfTGlua190
eXBlIF9NX2Nsb25lX25vZGUoX0xpbmtfdHlwZSBfX3gpCiAgewogICAgX0xpbmtfdHlwZSBfX3Rt
cCA9IF9NX2NyZWF0ZV9ub2RlKF9feC0+X01fdmFsdWVfZmllbGQpOwogICAgX190bXAtPl9NX2Nv
bG9yID0gX194LT5fTV9jb2xvcjsKICAgIF9fdG1wLT5fTV9sZWZ0ID0gMDsKICAgIF9fdG1wLT5f
TV9yaWdodCA9IDA7CiAgICByZXR1cm4gX190bXA7CiAgfQoKICB2b2lkIGRlc3Ryb3lfbm9kZShf
TGlua190eXBlIF9fcCkKICB7CiAgICBkZXN0cm95KCZfX3AtPl9NX3ZhbHVlX2ZpZWxkKTsKICAg
IF9NX3B1dF9ub2RlKF9fcCk7CiAgfQoKcHJvdGVjdGVkOgogIHNpemVfdHlwZSBfTV9ub2RlX2Nv
dW50OwogIF9Db21wYXJlIF9NX2tleV9jb21wYXJlOwoKICBfTGlua190eXBlJiBfTV9yb290KCkg
Y29uc3QKICAgIHsgcmV0dXJuIChfTGlua190eXBlJikgX01faGVhZGVyLT5fTV9wYXJlbnQ7IH0K
ICBfTGlua190eXBlJiBfTV9sZWZ0bW9zdCgpIGNvbnN0CiAgICB7IHJldHVybiAoX0xpbmtfdHlw
ZSYpIF9NX2hlYWRlci0+X01fbGVmdDsgfQogIF9MaW5rX3R5cGUmIF9NX3JpZ2h0bW9zdCgpIGNv
bnN0CiAgICB7IHJldHVybiAoX0xpbmtfdHlwZSYpIF9NX2hlYWRlci0+X01fcmlnaHQ7IH0KCiAg
c3RhdGljIF9MaW5rX3R5cGUmIF9TX2xlZnQoX0xpbmtfdHlwZSBfX3gpCiAgICB7IHJldHVybiAo
X0xpbmtfdHlwZSYpKF9feC0+X01fbGVmdCk7IH0KICBzdGF0aWMgX0xpbmtfdHlwZSYgX1Nfcmln
aHQoX0xpbmtfdHlwZSBfX3gpCiAgICB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01fcmln
aHQpOyB9CiAgc3RhdGljIF9MaW5rX3R5cGUmIF9TX3BhcmVudChfTGlua190eXBlIF9feCkKICAg
IHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9wYXJlbnQpOyB9CiAgc3RhdGljIHJlZmVy
ZW5jZSBfU192YWx1ZShfTGlua190eXBlIF9feCkKICAgIHsgcmV0dXJuIF9feC0+X01fdmFsdWVf
ZmllbGQ7IH0KICBzdGF0aWMgY29uc3QgX0tleSYgX1Nfa2V5KF9MaW5rX3R5cGUgX194KQogICAg
eyByZXR1cm4gX0tleU9mVmFsdWUoKShfU192YWx1ZShfX3gpKTsgfQogIHN0YXRpYyBfQ29sb3Jf
dHlwZSYgX1NfY29sb3IoX0xpbmtfdHlwZSBfX3gpCiAgICB7IHJldHVybiAoX0NvbG9yX3R5cGUm
KShfX3gtPl9NX2NvbG9yKTsgfQoKICBzdGF0aWMgX0xpbmtfdHlwZSYgX1NfbGVmdChfQmFzZV9w
dHIgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX2xlZnQpOyB9CiAgc3Rh
dGljIF9MaW5rX3R5cGUmIF9TX3JpZ2h0KF9CYXNlX3B0ciBfX3gpCiAgICB7IHJldHVybiAoX0xp
bmtfdHlwZSYpKF9feC0+X01fcmlnaHQpOyB9CiAgc3RhdGljIF9MaW5rX3R5cGUmIF9TX3BhcmVu
dChfQmFzZV9wdHIgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX3BhcmVu
dCk7IH0KICBzdGF0aWMgcmVmZXJlbmNlIF9TX3ZhbHVlKF9CYXNlX3B0ciBfX3gpCiAgICB7IHJl
dHVybiAoKF9MaW5rX3R5cGUpX194KS0+X01fdmFsdWVfZmllbGQ7IH0KICBzdGF0aWMgY29uc3Qg
X0tleSYgX1Nfa2V5KF9CYXNlX3B0ciBfX3gpCiAgICB7IHJldHVybiBfS2V5T2ZWYWx1ZSgpKF9T
X3ZhbHVlKF9MaW5rX3R5cGUoX194KSkpO30KICBzdGF0aWMgX0NvbG9yX3R5cGUmIF9TX2NvbG9y
KF9CYXNlX3B0ciBfX3gpCiAgICB7IHJldHVybiAoX0NvbG9yX3R5cGUmKShfTGlua190eXBlKF9f
eCktPl9NX2NvbG9yKTsgfQoKICBzdGF0aWMgX0xpbmtfdHlwZSBfU19taW5pbXVtKF9MaW5rX3R5
cGUgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUpIF9SYl90cmVlX25vZGVfYmFzZTo6X1Nf
bWluaW11bShfX3gpOyB9CgogIHN0YXRpYyBfTGlua190eXBlIF9TX21heGltdW0oX0xpbmtfdHlw
ZSBfX3gpCiAgICB7IHJldHVybiAoX0xpbmtfdHlwZSkgX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19t
YXhpbXVtKF9feCk7IH0KCnB1YmxpYzoKICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPHZhbHVl
X3R5cGUsIHJlZmVyZW5jZSwgcG9pbnRlcj4gaXRlcmF0b3I7CiAgdHlwZWRlZiBfUmJfdHJlZV9p
dGVyYXRvcjx2YWx1ZV90eXBlLCBjb25zdF9yZWZlcmVuY2UsIGNvbnN0X3BvaW50ZXI+CiAgICAg
ICAgICBjb25zdF9pdGVyYXRvcjsKCiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0
ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRv
cjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCnByaXZhdGU6CiAgaXRlcmF0b3IgX01faW5z
ZXJ0KF9CYXNlX3B0ciBfX3gsIF9CYXNlX3B0ciBfX3ksIGNvbnN0IHZhbHVlX3R5cGUmIF9fdik7
CiAgX0xpbmtfdHlwZSBfTV9jb3B5KF9MaW5rX3R5cGUgX194LCBfTGlua190eXBlIF9fcCk7CiAg
dm9pZCBfTV9lcmFzZShfTGlua190eXBlIF9feCk7CgpwdWJsaWM6CgogIF9SYl90cmVlKCkKICAg
IDogX0Jhc2UoYWxsb2NhdG9yX3R5cGUoKSksIF9NX25vZGVfY291bnQoMCksIF9NX2tleV9jb21w
YXJlKCkKICAgIHsgX01fZW1wdHlfaW5pdGlhbGl6ZSgpOyB9CgogIF9SYl90cmVlKGNvbnN0IF9D
b21wYXJlJiBfX2NvbXApCiAgICA6IF9CYXNlKGFsbG9jYXRvcl90eXBlKCkpLCBfTV9ub2RlX2Nv
dW50KDApLCBfTV9rZXlfY29tcGFyZShfX2NvbXApCiAgICB7IF9NX2VtcHR5X2luaXRpYWxpemUo
KTsgfQoKICBfUmJfdHJlZShjb25zdCBfQ29tcGFyZSYgX19jb21wLCBjb25zdCBhbGxvY2F0b3Jf
dHlwZSYgX19hKQogICAgOiBfQmFzZShfX2EpLCBfTV9ub2RlX2NvdW50KDApLCBfTV9rZXlfY29t
cGFyZShfX2NvbXApCiAgICB7IF9NX2VtcHR5X2luaXRpYWxpemUoKTsgfQoKICBfUmJfdHJlZShj
b25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBf
X3gpCiAgICA6IF9CYXNlKF9feC5nZXRfYWxsb2NhdG9yKCkpLAogICAgICBfTV9ub2RlX2NvdW50
KDApLCBfTV9rZXlfY29tcGFyZShfX3guX01fa2V5X2NvbXBhcmUpCiAgewogICAgaWYgKF9feC5f
TV9yb290KCkgPT0gMCkKICAgICAgX01fZW1wdHlfaW5pdGlhbGl6ZSgpOwogICAgZWxzZSB7CiAg
ICAgIF9TX2NvbG9yKF9NX2hlYWRlcikgPSBfU19yYl90cmVlX3JlZDsKICAgICAgX01fcm9vdCgp
ID0gX01fY29weShfX3guX01fcm9vdCgpLCBfTV9oZWFkZXIpOwogICAgICBfTV9sZWZ0bW9zdCgp
ID0gX1NfbWluaW11bShfTV9yb290KCkpOwogICAgICBfTV9yaWdodG1vc3QoKSA9IF9TX21heGlt
dW0oX01fcm9vdCgpKTsKICAgIH0KICAgIF9NX25vZGVfY291bnQgPSBfX3guX01fbm9kZV9jb3Vu
dDsKICB9CiAgfl9SYl90cmVlKCkgeyBjbGVhcigpOyB9CiAgX1JiX3RyZWU8X0tleSxfVmFsdWUs
X0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYKICBvcGVyYXRvcj0oY29uc3QgX1JiX3RyZWU8
X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194KTsKCnByaXZhdGU6
CiAgdm9pZCBfTV9lbXB0eV9pbml0aWFsaXplKCkgewogICAgX1NfY29sb3IoX01faGVhZGVyKSA9
IF9TX3JiX3RyZWVfcmVkOwoKICAgIF9NX3Jvb3QoKSA9IDA7CiAgICBfTV9sZWZ0bW9zdCgpID0g
X01faGVhZGVyOwogICAgX01fcmlnaHRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgfQoKcHVibGljOgoK
ICBfQ29tcGFyZSBrZXlfY29tcCgpIGNvbnN0IHsgcmV0dXJuIF9NX2tleV9jb21wYXJlOyB9CiAg
aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBfTV9sZWZ0bW9zdCgpOyB9CiAgY29uc3RfaXRlcmF0
b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV9sZWZ0bW9zdCgpOyB9CiAgaXRlcmF0b3IgZW5k
KCkgeyByZXR1cm4gX01faGVhZGVyOyB9CiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyBy
ZXR1cm4gX01faGVhZGVyOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiBy
ZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2lu
KCkgY29uc3QgewogICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOwogIH0K
ICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2lu
KCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgewogICAgcmV0dXJu
IGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7CiAgfQogIGJvb2wgZW1wdHkoKSBjb25z
dCB7IHJldHVybiBfTV9ub2RlX2NvdW50ID09IDA7IH0KICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIF9NX25vZGVfY291bnQ7IH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7
IHJldHVybiBzaXplX3R5cGUoLTEpOyB9CgogIHZvaWQgc3dhcChfUmJfdHJlZTxfS2V5LF9WYWx1
ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3QpIHsKICAgIHN0ZDo6c3dhcChfTV9o
ZWFkZXIsIF9fdC5fTV9oZWFkZXIpOwogICAgc3RkOjpzd2FwKF9NX25vZGVfY291bnQsIF9fdC5f
TV9ub2RlX2NvdW50KTsKICAgIHN0ZDo6c3dhcChfTV9rZXlfY29tcGFyZSwgX190Ll9NX2tleV9j
b21wYXJlKTsKICB9CgpwdWJsaWM6CgogIHBhaXI8aXRlcmF0b3IsYm9vbD4gaW5zZXJ0X3VuaXF1
ZShjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwogIGl0ZXJhdG9yIGluc2VydF9lcXVhbChjb25zdCB2
YWx1ZV90eXBlJiBfX3gpOwoKICBpdGVyYXRvciBpbnNlcnRfdW5pcXVlKGl0ZXJhdG9yIF9fcG9z
aXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CiAgaXRlcmF0b3IgaW5zZXJ0X2VxdWFsKGl0
ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CgogIHRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2VydF91bmlxdWUoX0lucHV0SXRlcmF0b3Ig
X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KTsKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlcmF0b3I+CiAgdm9pZCBpbnNlcnRfZXF1YWwoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lu
cHV0SXRlcmF0b3IgX19sYXN0KTsKCiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKTsK
ICBzaXplX3R5cGUgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9feCk7CiAgdm9pZCBlcmFzZShpdGVy
YXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpOwogIHZvaWQgZXJhc2UoY29uc3Qga2V5X3R5
cGUqIF9fZmlyc3QsIGNvbnN0IGtleV90eXBlKiBfX2xhc3QpOwogIHZvaWQgY2xlYXIoKSB7CiAg
ICBpZiAoX01fbm9kZV9jb3VudCAhPSAwKSB7CiAgICAgIF9NX2VyYXNlKF9NX3Jvb3QoKSk7CiAg
ICAgIF9NX2xlZnRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgICAgIF9NX3Jvb3QoKSA9IDA7CiAgICAg
IF9NX3JpZ2h0bW9zdCgpID0gX01faGVhZGVyOwogICAgICBfTV9ub2RlX2NvdW50ID0gMDsKICAg
IH0KICB9CgpwdWJsaWM6CgogIGl0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCk7CiAg
Y29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdDsKICBzaXplX3R5
cGUgY291bnQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CiAgaXRlcmF0b3IgbG93ZXJfYm91
bmQoY29uc3Qga2V5X3R5cGUmIF9feCk7CiAgY29uc3RfaXRlcmF0b3IgbG93ZXJfYm91bmQoY29u
c3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CiAgaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5
X3R5cGUmIF9feCk7CiAgY29uc3RfaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUm
IF9feCkgY29uc3Q7CiAgcGFpcjxpdGVyYXRvcixpdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qg
a2V5X3R5cGUmIF9feCk7CiAgcGFpcjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+IGVx
dWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0OwoKcHVibGljOgoKICBib29sIF9f
cmJfdmVyaWZ5KCkgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVl
LCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxs
b2M+CmlubGluZSBib29sCm9wZXJhdG9yPT0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tl
eU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgIGNvbnN0IF9SYl90cmVl
PF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKewogIHJldHVy
biBfX3guc2l6ZSgpID09IF9feS5zaXplKCkgJiYKICAgICAgICAgZXF1YWwoX194LmJlZ2luKCks
IF9feC5lbmQoKSwgX195LmJlZ2luKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3Mg
X1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFz
cyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPChjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1
ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICBjb25zdCBfUmJf
dHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCnsKICBy
ZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX194LmJlZ2luKCksIF9feC5lbmQoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAog
ICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0
b3IhPShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs
b2M+JiBfX3gsCiAgICAgICAgICAgY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFs
dWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAg
ICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I+
KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4m
IF9feCwKICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9D
b21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xh
c3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I8PShjb25zdCBf
UmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAg
ICAgICAgICAgY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUs
X0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBf
Q29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcj49KGNvbnN0IF9SYl90
cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAg
ICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs
b2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9L
ZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29t
cGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZApzd2FwKF9SYl90cmVlPF9LZXksX1ZhbHVl
LF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICBfUmJfdHJlZTxfS2V5LF9W
YWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCnsKICBfX3guc3dhcChfX3kp
Owp9CgoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFs
dWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgpfUmJfdHJlZTxfS2V5
LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JgpfUmJfdHJlZTxfS2V5LF9WYWx1
ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjpvcGVyYXRvcj0oY29uc3QgX1JiX3Ry
ZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194KQp7CiAgaWYg
KHRoaXMgIT0gJl9feCkgewoKICAgIGNsZWFyKCk7CiAgICBfTV9ub2RlX2NvdW50ID0gMDsKICAg
IF9NX2tleV9jb21wYXJlID0gX194Ll9NX2tleV9jb21wYXJlOwogICAgaWYgKF9feC5fTV9yb290
KCkgPT0gMCkgewogICAgICBfTV9yb290KCkgPSAwOwogICAgICBfTV9sZWZ0bW9zdCgpID0gX01f
aGVhZGVyOwogICAgICBfTV9yaWdodG1vc3QoKSA9IF9NX2hlYWRlcjsKICAgIH0KICAgIGVsc2Ug
ewogICAgICBfTV9yb290KCkgPSBfTV9jb3B5KF9feC5fTV9yb290KCksIF9NX2hlYWRlcik7CiAg
ICAgIF9NX2xlZnRtb3N0KCkgPSBfU19taW5pbXVtKF9NX3Jvb3QoKSk7CiAgICAgIF9NX3JpZ2h0
bW9zdCgpID0gX1NfbWF4aW11bShfTV9yb290KCkpOwogICAgICBfTV9ub2RlX2NvdW50ID0gX194
Ll9NX25vZGVfY291bnQ7CiAgICB9CiAgfQogIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFz
cyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxf
S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgpfUmJfdHJlZTxfS2V5LF9WYWx1
ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjpfTV9pbnNlcnQoX0Jhc2VfcHRyIF9f
eF8sIF9CYXNlX3B0ciBfX3lfLCBjb25zdCBfVmFsdWUmIF9fdikKewogIF9MaW5rX3R5cGUgX194
ID0gKF9MaW5rX3R5cGUpIF9feF87CiAgX0xpbmtfdHlwZSBfX3kgPSAoX0xpbmtfdHlwZSkgX195
XzsKICBfTGlua190eXBlIF9fejsKCiAgaWYgKF9feSA9PSBfTV9oZWFkZXIgfHwgX194ICE9IDAg
fHwKICAgICAgX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX195KSkp
IHsKICAgIF9feiA9IF9NX2NyZWF0ZV9ub2RlKF9fdik7CiAgICBfU19sZWZ0KF9feSkgPSBfX3o7
CgogICAgaWYgKF9feSA9PSBfTV9oZWFkZXIpIHsKICAgICAgX01fcm9vdCgpID0gX196OwogICAg
ICBfTV9yaWdodG1vc3QoKSA9IF9fejsKICAgIH0KICAgIGVsc2UgaWYgKF9feSA9PSBfTV9sZWZ0
bW9zdCgpKQogICAgICBfTV9sZWZ0bW9zdCgpID0gX196OwogIH0KICBlbHNlIHsKICAgIF9feiA9
IF9NX2NyZWF0ZV9ub2RlKF9fdik7CiAgICBfU19yaWdodChfX3kpID0gX196OwogICAgaWYgKF9f
eSA9PSBfTV9yaWdodG1vc3QoKSkKICAgICAgX01fcmlnaHRtb3N0KCkgPSBfX3o7CiAgfQogIF9T
X3BhcmVudChfX3opID0gX195OwogIF9TX2xlZnQoX196KSA9IDA7CiAgX1NfcmlnaHQoX196KSA9
IDA7CiAgX1JiX3RyZWVfcmViYWxhbmNlKF9feiwgX01faGVhZGVyLT5fTV9wYXJlbnQpOwogICsr
X01fbm9kZV9jb3VudDsKICByZXR1cm4gaXRlcmF0b3IoX196KTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBf
Q29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5
T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgpfUmJfdHJlZTxfS2V5LF9WYWx1ZSxf
S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjppbnNlcnRfZXF1YWwoY29uc3QgX1ZhbHVl
JiBfX3YpCnsKICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICBfTGlua190eXBlIF9feCA9
IF9NX3Jvb3QoKTsKICB3aGlsZSAoX194ICE9IDApIHsKICAgIF9feSA9IF9feDsKICAgIF9feCA9
IF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9feCkpID8KICAgICAg
ICAgICAgX1NfbGVmdChfX3gpIDogX1NfcmlnaHQoX194KTsKICB9CiAgcmV0dXJuIF9NX2luc2Vy
dChfX3gsIF9feSwgX192KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUs
IGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxv
Yz4KcGFpcjx0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFy
ZSxfQWxsb2M+OjppdGVyYXRvciwKICAgICBib29sPgpfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5
T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjppbnNlcnRfdW5pcXVlKGNvbnN0IF9WYWx1ZSYg
X192KQp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgX0xpbmtfdHlwZSBfX3ggPSBf
TV9yb290KCk7CiAgYm9vbCBfX2NvbXAgPSB0cnVlOwogIHdoaWxlIChfX3ggIT0gMCkgewogICAg
X195ID0gX194OwogICAgX19jb21wID0gX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3Yp
LCBfU19rZXkoX194KSk7CiAgICBfX3ggPSBfX2NvbXAgPyBfU19sZWZ0KF9feCkgOiBfU19yaWdo
dChfX3gpOwogIH0KICBpdGVyYXRvciBfX2ogPSBpdGVyYXRvcihfX3kpOwogIGlmIChfX2NvbXAp
CiAgICBpZiAoX19qID09IGJlZ2luKCkpCiAgICAgIHJldHVybiBwYWlyPGl0ZXJhdG9yLGJvb2w+
KF9NX2luc2VydChfX3gsIF9feSwgX192KSwgdHJ1ZSk7CiAgICBlbHNlCiAgICAgIC0tX19qOwog
IGlmIChfTV9rZXlfY29tcGFyZShfU19rZXkoX19qLl9NX25vZGUpLCBfS2V5T2ZWYWx1ZSgpKF9f
dikpKQogICAgcmV0dXJuIHBhaXI8aXRlcmF0b3IsYm9vbD4oX01faW5zZXJ0KF9feCwgX195LCBf
X3YpLCB0cnVlKTsKICByZXR1cm4gcGFpcjxpdGVyYXRvcixib29sPihfX2osIGZhbHNlKTsKfQoK
CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAg
ICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9L
ZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6aXRlcmF0b3IKX1JiX3Ry
ZWU8X0tleSwgX1ZhbCwgX0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+CiAgOjppbnNlcnRf
dW5pcXVlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9WYWwmIF9fdikKewogIGlmIChfX3Bv
c2l0aW9uLl9NX25vZGUgPT0gX01faGVhZGVyLT5fTV9sZWZ0KSB7CiAgICBpZiAoc2l6ZSgpID4g
MCAmJgogICAgICAgX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9kZSksIF9L
ZXlPZlZhbHVlKCkoX192KSkpCiAgICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9u
b2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUsIF9fdik7CgogICAgZWxzZQogICAgICByZXR1cm4gaW5z
ZXJ0X3VuaXF1ZShfX3YpLmZpcnN0OwogIH0gZWxzZSBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09
IF9NX2hlYWRlcikgewogICAgaWYgKF9NX2tleV9jb21wYXJlKF9TX2tleShfTV9yaWdodG1vc3Qo
KSksIF9LZXlPZlZhbHVlKCkoX192KSkpCiAgICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX01fcmln
aHRtb3N0KCksIF9fdik7CiAgICBlbHNlCiAgICAgIHJldHVybiBpbnNlcnRfdW5pcXVlKF9fdiku
Zmlyc3Q7CiAgfSBlbHNlIHsKICAgIGl0ZXJhdG9yIF9fYmVmb3JlID0gX19wb3NpdGlvbjsKICAg
IC0tX19iZWZvcmU7CiAgICBpZiAoX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fYmVmb3JlLl9NX25v
ZGUpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpCiAgICAgICAgJiYgX01fa2V5X2NvbXBhcmUoX0tleU9m
VmFsdWUoKShfX3YpLCBfU19rZXkoX19wb3NpdGlvbi5fTV9ub2RlKSkpIHsKICAgICAgaWYgKF9T
X3JpZ2h0KF9fYmVmb3JlLl9NX25vZGUpID09IDApCiAgICAgICAgcmV0dXJuIF9NX2luc2VydCgw
LCBfX2JlZm9yZS5fTV9ub2RlLCBfX3YpOwogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIF9NX2lu
c2VydChfX3Bvc2l0aW9uLl9NX25vZGUsIF9fcG9zaXRpb24uX01fbm9kZSwgX192KTsKCiAgICB9
IGVsc2UKICAgICAgcmV0dXJuIGluc2VydF91bmlxdWUoX192KS5maXJzdDsKICB9Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAg
IGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1Zh
bCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgpfUmJfdHJlZTxfS2V5LF9W
YWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6aW5zZXJ0X2VxdWFsKGl0ZXJhdG9y
IF9fcG9zaXRpb24sIGNvbnN0IF9WYWwmIF9fdikKewogIGlmIChfX3Bvc2l0aW9uLl9NX25vZGUg
PT0gX01faGVhZGVyLT5fTV9sZWZ0KSB7CiAgICBpZiAoc2l6ZSgpID4gMCAmJgogICAgICAgICFf
TV9rZXlfY29tcGFyZShfU19rZXkoX19wb3NpdGlvbi5fTV9ub2RlKSwgX0tleU9mVmFsdWUoKShf
X3YpKSkKICAgICAgcmV0dXJuIF9NX2luc2VydChfX3Bvc2l0aW9uLl9NX25vZGUsIF9fcG9zaXRp
b24uX01fbm9kZSwgX192KTsKCiAgICBlbHNlCiAgICAgIHJldHVybiBpbnNlcnRfZXF1YWwoX192
KTsKICB9IGVsc2UgaWYgKF9fcG9zaXRpb24uX01fbm9kZSA9PSBfTV9oZWFkZXIpIHsKICAgIGlm
ICghX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX01fcmlnaHRtb3N0
KCkpKSkKICAgICAgcmV0dXJuIF9NX2luc2VydCgwLCBfTV9yaWdodG1vc3QoKSwgX192KTsKICAg
IGVsc2UKICAgICAgcmV0dXJuIGluc2VydF9lcXVhbChfX3YpOwogIH0gZWxzZSB7CiAgICBpdGVy
YXRvciBfX2JlZm9yZSA9IF9fcG9zaXRpb247CiAgICAtLV9fYmVmb3JlOwogICAgaWYgKCFfTV9r
ZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX2JlZm9yZS5fTV9ub2RlKSkK
ICAgICAgICAmJiAhX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9kZSksIF9L
ZXlPZlZhbHVlKCkoX192KSkpIHsKICAgICAgaWYgKF9TX3JpZ2h0KF9fYmVmb3JlLl9NX25vZGUp
ID09IDApCiAgICAgICAgcmV0dXJuIF9NX2luc2VydCgwLCBfX2JlZm9yZS5fTV9ub2RlLCBfX3Yp
OwogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIF9NX2luc2VydChfX3Bvc2l0aW9uLl9NX25vZGUs
IF9fcG9zaXRpb24uX01fbm9kZSwgX192KTsKCiAgICB9IGVsc2UKICAgICAgcmV0dXJuIGluc2Vy
dF9lcXVhbChfX3YpOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWwsIGNs
YXNzIF9Lb1YsIGNsYXNzIF9DbXAsIGNsYXNzIF9BbGxvYz4KICB0ZW1wbGF0ZTxjbGFzcyBfSUk+
CnZvaWQgX1JiX3RyZWU8X0tleSxfVmFsLF9Lb1YsX0NtcCxfQWxsb2M+CiAgOjppbnNlcnRfZXF1
YWwoX0lJIF9fZmlyc3QsIF9JSSBfX2xhc3QpCnsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0
OyArK19fZmlyc3QpCiAgICBpbnNlcnRfZXF1YWwoKl9fZmlyc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0tleSwgY2xhc3MgX1ZhbCwgY2xhc3MgX0tvViwgY2xhc3MgX0NtcCwgY2xhc3MgX0FsbG9j
PgogIHRlbXBsYXRlPGNsYXNzIF9JST4Kdm9pZCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tvVixfQ21w
LF9BbGxvYz4KICA6Omluc2VydF91bmlxdWUoX0lJIF9fZmlyc3QsIF9JSSBfX2xhc3QpIHsKICBm
b3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpbnNlcnRfdW5pcXVlKCpf
X2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tl
eU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUg
dm9pZCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAg
OjplcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQp7CiAgX0xpbmtfdHlwZSBfX3kgPQogICAgKF9M
aW5rX3R5cGUpIF9SYl90cmVlX3JlYmFsYW5jZV9mb3JfZXJhc2UoX19wb3NpdGlvbi5fTV9ub2Rl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01faGVhZGVy
LT5fTV9wYXJlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfTV9oZWFkZXItPl9NX2xlZnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfTV9oZWFkZXItPl9NX3JpZ2h0KTsKICBkZXN0cm95X25vZGUoX195KTsKICAt
LV9NX25vZGVfY291bnQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNs
YXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4K
dHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9j
Pjo6c2l6ZV90eXBlCl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9B
bGxvYz46OmVyYXNlKGNvbnN0IF9LZXkmIF9feCkKewogIHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+
IF9fcCA9IGVxdWFsX3JhbmdlKF9feCk7CiAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgZGlzdGFuY2Uo
X19wLmZpcnN0LCBfX3Auc2Vjb25kLCBfX24pOwogIGVyYXNlKF9fcC5maXJzdCwgX19wLnNlY29u
ZCk7CiAgcmV0dXJuIF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWwsIGNs
YXNzIF9Lb1YsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVl
PF9LZXksIF9WYWwsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+OjpfTGlua190eXBlCl9SYl90cmVl
PF9LZXksX1ZhbCxfS29WLF9Db21wYXJlLF9BbGxvYz4KICA6Ol9NX2NvcHkoX0xpbmtfdHlwZSBf
X3gsIF9MaW5rX3R5cGUgX19wKQp7CgogIF9MaW5rX3R5cGUgX190b3AgPSBfTV9jbG9uZV9ub2Rl
KF9feCk7CiAgX190b3AtPl9NX3BhcmVudCA9IF9fcDsKCiAgdHJ5IHsKICAgIGlmIChfX3gtPl9N
X3JpZ2h0KQogICAgICBfX3RvcC0+X01fcmlnaHQgPSBfTV9jb3B5KF9TX3JpZ2h0KF9feCksIF9f
dG9wKTsKICAgIF9fcCA9IF9fdG9wOwogICAgX194ID0gX1NfbGVmdChfX3gpOwoKICAgIHdoaWxl
IChfX3ggIT0gMCkgewogICAgICBfTGlua190eXBlIF9feSA9IF9NX2Nsb25lX25vZGUoX194KTsK
ICAgICAgX19wLT5fTV9sZWZ0ID0gX195OwogICAgICBfX3ktPl9NX3BhcmVudCA9IF9fcDsKICAg
ICAgaWYgKF9feC0+X01fcmlnaHQpCiAgICAgICAgX195LT5fTV9yaWdodCA9IF9NX2NvcHkoX1Nf
cmlnaHQoX194KSwgX195KTsKICAgICAgX19wID0gX195OwogICAgICBfX3ggPSBfU19sZWZ0KF9f
eCk7CiAgICB9CiAgfQogIGNhdGNoKC4uLikgeyBfTV9lcmFzZShfX3RvcCk7IHRocm93OyB9OwoK
ICByZXR1cm4gX190b3A7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNs
YXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4K
dm9pZCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAg
OjpfTV9lcmFzZShfTGlua190eXBlIF9feCkKewoKICB3aGlsZSAoX194ICE9IDApIHsKICAgIF9N
X2VyYXNlKF9TX3JpZ2h0KF9feCkpOwogICAgX0xpbmtfdHlwZSBfX3kgPSBfU19sZWZ0KF9feCk7
CiAgICBkZXN0cm95X25vZGUoX194KTsKICAgIF9feCA9IF9feTsKICB9Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xh
c3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4Kdm9pZCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5
T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjplcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVy
YXRvciBfX2xhc3QpCnsKICBpZiAoX19maXJzdCA9PSBiZWdpbigpICYmIF9fbGFzdCA9PSBlbmQo
KSkKICAgIGNsZWFyKCk7CiAgZWxzZQogICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSBlcmFz
ZShfX2ZpcnN0KyspOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFz
cyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnZv
aWQgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6
ZXJhc2UoY29uc3QgX0tleSogX19maXJzdCwgY29uc3QgX0tleSogX19sYXN0KQp7CiAgd2hpbGUg
KF9fZmlyc3QgIT0gX19sYXN0KSBlcmFzZSgqX19maXJzdCsrKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBf
Q29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5
T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgpfUmJfdHJlZTxfS2V5LF9WYWx1ZSxf
S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpmaW5kKGNvbnN0IF9LZXkmIF9faykKewogIF9M
aW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOwoK
ICB3aGlsZSAoX194ICE9IDApCiAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBf
X2spKQogICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgIGVsc2UKICAgICAg
X194ID0gX1NfcmlnaHQoX194KTsKCiAgaXRlcmF0b3IgX19qID0gaXRlcmF0b3IoX195KTsKICBy
ZXR1cm4gKF9faiA9PSBlbmQoKSB8fCBfTV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShfX2ouX01f
bm9kZSkpKSA/CiAgICAgZW5kKCkgOiBfX2o7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFz
cyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNs
YXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0Nv
bXBhcmUsX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9m
VmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6ZmluZChjb25zdCBfS2V5JiBfX2spIGNvbnN0CnsKICBf
TGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsK
CiAgd2hpbGUgKF9feCAhPSAwKSB7CiAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9TX2tleShfX3gp
LCBfX2spKQogICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgIGVsc2UKICAg
ICAgX194ID0gX1NfcmlnaHQoX194KTsKICB9CiAgY29uc3RfaXRlcmF0b3IgX19qID0gY29uc3Rf
aXRlcmF0b3IoX195KTsKICByZXR1cm4gKF9faiA9PSBlbmQoKSB8fCBfTV9rZXlfY29tcGFyZShf
X2ssIF9TX2tleShfX2ouX01fbm9kZSkpKSA/CiAgICBlbmQoKSA6IF9fajsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBj
bGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1
ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpzaXplX3R5cGUKX1JiX3RyZWU8X0tleSxf
VmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6Y291bnQoY29uc3QgX0tleSYg
X19rKSBjb25zdAp7CiAgcGFpcjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+IF9fcCA9
IGVxdWFsX3JhbmdlKF9fayk7CiAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgZGlzdGFuY2UoX19wLmZp
cnN0LCBfX3Auc2Vjb25kLCBfX24pOwogIHJldHVybiBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
S2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0Nv
bXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9m
VmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tl
eU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6bG93ZXJfYm91bmQoY29uc3QgX0tleSYgX19r
KQp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgX0xpbmtfdHlwZSBfX3ggPSBfTV9y
b290KCk7CgogIHdoaWxlIChfX3ggIT0gMCkKICAgIGlmICghX01fa2V5X2NvbXBhcmUoX1Nfa2V5
KF9feCksIF9faykpCiAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgZWxz
ZQogICAgICBfX3ggPSBfU19yaWdodChfX3gpOwoKICByZXR1cm4gaXRlcmF0b3IoX195KTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAg
ICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxf
S2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+Ojpjb25zdF9pdGVyYXRvcgpf
UmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjpsb3dl
cl9ib3VuZChjb25zdCBfS2V5JiBfX2spIGNvbnN0CnsKICBfTGlua190eXBlIF9feSA9IF9NX2hl
YWRlcjsKICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgd2hpbGUgKF9feCAhPSAwKQog
ICAgaWYgKCFfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX19rKSkKICAgICAgX195ID0gX194
LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICBlbHNlCiAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7
CgogIHJldHVybiBjb25zdF9pdGVyYXRvcihfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwg
Y2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJl
LCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVl
LF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZh
bHVlLF9Db21wYXJlLF9BbGxvYz4KICA6OnVwcGVyX2JvdW5kKGNvbnN0IF9LZXkmIF9faykKewog
IF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgp
OwoKICAgd2hpbGUgKF9feCAhPSAwKQogICAgIGlmIChfTV9rZXlfY29tcGFyZShfX2ssIF9TX2tl
eShfX3gpKSkKICAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgIGVsc2UK
ICAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7CgogICByZXR1cm4gaXRlcmF0b3IoX195KTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAg
ICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxf
S2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+Ojpjb25zdF9pdGVyYXRvcgpf
UmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjp1cHBl
cl9ib3VuZChjb25zdCBfS2V5JiBfX2spIGNvbnN0CnsKICBfTGlua190eXBlIF9feSA9IF9NX2hl
YWRlcjsKICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgIHdoaWxlIChfX3ggIT0gMCkK
ICAgICBpZiAoX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX194KSkpCiAgICAgICBfX3kgPSBf
X3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgICBlbHNlCiAgICAgICBfX3ggPSBfU19yaWdodChf
X3gpOwoKICAgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
S2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0Nv
bXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lCnBhaXI8dHlwZW5hbWUgX1JiX3RyZWU8X0tleSxf
VmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IsCiAgICAgdHlwZW5h
bWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRl
cmF0b3I+Cl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4K
ICA6OmVxdWFsX3JhbmdlKGNvbnN0IF9LZXkmIF9faykKewogIHJldHVybiBwYWlyPGl0ZXJhdG9y
LCBpdGVyYXRvcj4obG93ZXJfYm91bmQoX19rKSwgdXBwZXJfYm91bmQoX19rKSk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9Lb1YsIGNsYXNzIF9Db21wYXJl
LCBjbGFzcyBfQWxsb2M+CmlubGluZQpwYWlyPHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWx1
ZSwgX0tvViwgX0NvbXBhcmUsIF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yLAogICAgIHR5cGVuYW1l
IF9SYl90cmVlPF9LZXksIF9WYWx1ZSwgX0tvViwgX0NvbXBhcmUsIF9BbGxvYz46OmNvbnN0X2l0
ZXJhdG9yPgpfUmJfdHJlZTxfS2V5LCBfVmFsdWUsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+CiAg
OjplcXVhbF9yYW5nZShjb25zdCBfS2V5JiBfX2spIGNvbnN0CnsKICByZXR1cm4gcGFpcjxjb25z
dF9pdGVyYXRvcixjb25zdF9pdGVyYXRvcj4obG93ZXJfYm91bmQoX19rKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXJfYm91bmQoX19rKSk7Cn0KCmlu
bGluZSBpbnQKX19ibGFja19jb3VudChfUmJfdHJlZV9ub2RlX2Jhc2UqIF9fbm9kZSwgX1JiX3Ry
ZWVfbm9kZV9iYXNlKiBfX3Jvb3QpCnsKICBpZiAoX19ub2RlID09IDApCiAgICByZXR1cm4gMDsK
ICBpbnQgX19zdW0gPSAwOwogIGRvIHsKICAgIGlmIChfX25vZGUtPl9NX2NvbG9yID09IF9TX3Ji
X3RyZWVfYmxhY2spCiAgICAgICsrX19zdW07CiAgICBpZiAoX19ub2RlID09IF9fcm9vdCkKICAg
ICAgYnJlYWs7CiAgICBfX25vZGUgPSBfX25vZGUtPl9NX3BhcmVudDsKICB9IHdoaWxlICgxKTsK
ICByZXR1cm4gX19zdW07Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNs
YXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4K
Ym9vbCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+Ojpf
X3JiX3ZlcmlmeSgpIGNvbnN0CnsKICBpZiAoX01fbm9kZV9jb3VudCA9PSAwIHx8IGJlZ2luKCkg
PT0gZW5kKCkpCiAgICByZXR1cm4gX01fbm9kZV9jb3VudCA9PSAwICYmIGJlZ2luKCkgPT0gZW5k
KCkgJiYKICAgICAgX01faGVhZGVyLT5fTV9sZWZ0ID09IF9NX2hlYWRlciAmJiBfTV9oZWFkZXIt
Pl9NX3JpZ2h0ID09IF9NX2hlYWRlcjsKCiAgaW50IF9fbGVuID0gX19ibGFja19jb3VudChfTV9s
ZWZ0bW9zdCgpLCBfTV9yb290KCkpOwogIGZvciAoY29uc3RfaXRlcmF0b3IgX19pdCA9IGJlZ2lu
KCk7IF9faXQgIT0gZW5kKCk7ICsrX19pdCkgewogICAgX0xpbmtfdHlwZSBfX3ggPSAoX0xpbmtf
dHlwZSkgX19pdC5fTV9ub2RlOwogICAgX0xpbmtfdHlwZSBfX0wgPSBfU19sZWZ0KF9feCk7CiAg
ICBfTGlua190eXBlIF9fUiA9IF9TX3JpZ2h0KF9feCk7CgogICAgaWYgKF9feC0+X01fY29sb3Ig
PT0gX1NfcmJfdHJlZV9yZWQpCiAgICAgIGlmICgoX19MICYmIF9fTC0+X01fY29sb3IgPT0gX1Nf
cmJfdHJlZV9yZWQpIHx8CiAgICAgICAgICAoX19SICYmIF9fUi0+X01fY29sb3IgPT0gX1NfcmJf
dHJlZV9yZWQpKQogICAgICAgIHJldHVybiBmYWxzZTsKCiAgICBpZiAoX19MICYmIF9NX2tleV9j
b21wYXJlKF9TX2tleShfX3gpLCBfU19rZXkoX19MKSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAg
IGlmIChfX1IgJiYgX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fUiksIF9TX2tleShfX3gpKSkKICAg
ICAgcmV0dXJuIGZhbHNlOwoKICAgIGlmICghX19MICYmICFfX1IgJiYgX19ibGFja19jb3VudChf
X3gsIF9NX3Jvb3QoKSkgIT0gX19sZW4pCiAgICAgIHJldHVybiBmYWxzZTsKICB9CgogIGlmIChf
TV9sZWZ0bW9zdCgpICE9IF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWluaW11bShfTV9yb290KCkp
KQogICAgcmV0dXJuIGZhbHNlOwogIGlmIChfTV9yaWdodG1vc3QoKSAhPSBfUmJfdHJlZV9ub2Rl
X2Jhc2U6Ol9TX21heGltdW0oX01fcm9vdCgpKSkKICAgIHJldHVybiBmYWxzZTsKCiAgcmV0dXJu
IHRydWU7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9L
ZXlPZlZhbHVlLCBjbGFzcyBfQ29tcGFyZSwKICAgICAgICAgIGNsYXNzIF9BbGxvYyA9IGFsbG9j
YXRvcjxfVmFsdWU+ID4Kc3RydWN0IHJiX3RyZWUgOiBwdWJsaWMgX1JiX3RyZWU8X0tleSwgX1Zh
bHVlLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz4KewogIHR5cGVkZWYgX1JiX3RyZWU8
X0tleSwgX1ZhbHVlLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz4gX0Jhc2U7CiAgdHlw
ZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgogIHJi
X3RyZWUoY29uc3QgX0NvbXBhcmUmIF9fY29tcCA9IF9Db21wYXJlKCksCiAgICAgICAgICBjb25z
dCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19j
b21wLCBfX2EpIHt9CgogIH5yYl90cmVlKCkge30KfTsKCn0KIyAyMSAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9iYWNrd2FyZC90cmVlLmgiIDIgMwoKdXNpbmcgc3RkOjpyYl90cmVlOwojIDMy
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL21hcC5oIiAyIDMKIyAxICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21hcC5oIiAxIDMKIyAzMSAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9tYXAuaCIgMwoKCiMgMSAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9iaXRzL3N0bF90cmVlLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX21hcC5oIiAyIDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12
My9iaXRzL3N0bF9tYXAuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfbWFwLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvY29uY2Vw
dF9jaGVjay5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9t
YXAuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBf
VHAsIGNsYXNzIF9Db21wYXJlID0gbGVzczxfS2V5PiwKICAgICAgICAgIGNsYXNzIF9BbGxvYyA9
IGFsbG9jYXRvcjxwYWlyPGNvbnN0IF9LZXksIF9UcD4gPiA+CmNsYXNzIG1hcAp7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CgpwdWJsaWM6CgogIHR5cGVkZWYgX0tleSBrZXlfdHlwZTsKICB0eXBl
ZGVmIF9UcCBkYXRhX3R5cGU7CiAgdHlwZWRlZiBfVHAgbWFwcGVkX3R5cGU7CiAgdHlwZWRlZiBw
YWlyPGNvbnN0IF9LZXksIF9UcD4gdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9Db21wYXJlIGtleV9j
b21wYXJlOwoKICBjbGFzcyB2YWx1ZV9jb21wYXJlCiAgICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rp
b248dmFsdWVfdHlwZSwgdmFsdWVfdHlwZSwgYm9vbD4gewogIGZyaWVuZCBjbGFzcyBtYXA8X0tl
eSxfVHAsX0NvbXBhcmUsX0FsbG9jPjsKICBwcm90ZWN0ZWQgOgogICAgX0NvbXBhcmUgY29tcDsK
ICAgIHZhbHVlX2NvbXBhcmUoX0NvbXBhcmUgX19jKSA6IGNvbXAoX19jKSB7fQogIHB1YmxpYzoK
ICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCB2YWx1ZV90eXBlJiBfX3gsIGNvbnN0IHZhbHVlX3R5
cGUmIF9feSkgY29uc3QgewogICAgICByZXR1cm4gY29tcChfX3guZmlyc3QsIF9feS5maXJzdCk7
CiAgICB9CiAgfTsKCnByaXZhdGU6CiAgdHlwZWRlZiBfUmJfdHJlZTxrZXlfdHlwZSwgdmFsdWVf
dHlwZSwKICAgICAgICAgICAgICAgICAgIF9TZWxlY3Qxc3Q8dmFsdWVfdHlwZT4sIGtleV9jb21w
YXJlLCBfQWxsb2M+IF9SZXBfdHlwZTsKICBfUmVwX3R5cGUgX01fdDsKcHVibGljOgogIHR5cGVk
ZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpwb2ludGVyIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFt
ZSBfUmVwX3R5cGU6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVu
YW1lIF9SZXBfdHlwZTo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9S
ZXBfdHlwZTo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVu
YW1lIF9SZXBfdHlwZTo6aXRlcmF0b3IgaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVw
X3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUg
X1JlcF90eXBlOjpyZXZlcnNlX2l0ZXJhdG9yIHJldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiB0
eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3RfcmV2ZXJzZV9p
dGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlw
ZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVu
Y2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6YWxsb2NhdG9yX3R5cGUgYWxs
b2NhdG9yX3R5cGU7CgoKCiAgbWFwKCkgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90eXBl
KCkpIHt9CiAgZXhwbGljaXQgbWFwKGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCiAgICAgICAgICAg
ICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBf
TV90KF9fY29tcCwgX19hKSB7fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAg
bWFwKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgIDog
X01fdChfQ29tcGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKQogICAgeyBfTV90Lmluc2VydF91bmlx
dWUoX19maXJzdCwgX19sYXN0KTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+
CiAgbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgY29u
c3QgX0NvbXBhcmUmIF9fY29tcCwKICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFs
bG9jYXRvcl90eXBlKCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHsgX01fdC5pbnNlcnRfdW5p
cXVlKF9fZmlyc3QsIF9fbGFzdCk7IH0KICBtYXAoY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJl
LF9BbGxvYz4mIF9feCkgOiBfTV90KF9feC5fTV90KSB7fQoKICBtYXA8X0tleSxfVHAsX0NvbXBh
cmUsX0FsbG9jPiYKICBvcGVyYXRvcj0oY29uc3QgbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9B
bGxvYz4mIF9feCkKICB7CiAgICBfTV90ID0gX194Ll9NX3Q7CiAgICByZXR1cm4gKnRoaXM7CiAg
fQoKCgogIGtleV9jb21wYXJlIGtleV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fdC5rZXlfY29t
cCgpOyB9CiAgdmFsdWVfY29tcGFyZSB2YWx1ZV9jb21wKCkgY29uc3QgeyByZXR1cm4gdmFsdWVf
Y29tcGFyZShfTV90LmtleV9jb21wKCkpOyB9CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRv
cigpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZ2V0X2FsbG9jYXRvcigpOyB9CgogIGl0ZXJhdG9yIGJl
Z2luKCkgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9CiAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBj
b25zdCB7IHJldHVybiBfTV90LmJlZ2luKCk7IH0KICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBf
TV90LmVuZCgpOyB9CiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5l
bmQoKTsgfQogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gX01fdC5yYmVnaW4o
KTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01f
dC5yYmVnaW4oKTsgfQogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0dXJuIF9NX3QucmVu
ZCgpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgeyByZXR1cm4gX01f
dC5yZW5kKCk7IH0KICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gX01fdC5lbXB0eSgpOyB9
CiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBfTV90LnNpemUoKTsgfQogIHNpemVf
dHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3QubWF4X3NpemUoKTsgfQogIF9UcCYg
b3BlcmF0b3JbXShjb25zdCBrZXlfdHlwZSYgX19rKSB7CiAgICBpdGVyYXRvciBfX2kgPSBsb3dl
cl9ib3VuZChfX2spOwoKICAgIGlmIChfX2kgPT0gZW5kKCkgfHwga2V5X2NvbXAoKShfX2ssICgq
X19pKS5maXJzdCkpCiAgICAgIF9faSA9IGluc2VydChfX2ksIHZhbHVlX3R5cGUoX19rLCBfVHAo
KSkpOwogICAgcmV0dXJuICgqX19pKS5zZWNvbmQ7CiAgfQogIHZvaWQgc3dhcChtYXA8X0tleSxf
VHAsX0NvbXBhcmUsX0FsbG9jPiYgX194KSB7IF9NX3Quc3dhcChfX3guX01fdCk7IH0KCgoKICBw
YWlyPGl0ZXJhdG9yLGJvb2w+IGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgICB7IHJl
dHVybiBfTV90Lmluc2VydF91bmlxdWUoX194KTsgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRv
ciBwb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KQogICAgeyByZXR1cm4gX01fdC5pbnNl
cnRfdW5pcXVlKHBvc2l0aW9uLCBfX3gpOyB9CiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh
dG9yPgogIHZvaWQgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9y
IF9fbGFzdCkgewogICAgX01fdC5pbnNlcnRfdW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7CiAgfQoK
ICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsgX01fdC5lcmFzZShfX3Bvc2l0aW9u
KTsgfQogIHNpemVfdHlwZSBlcmFzZShjb25zdCBrZXlfdHlwZSYgX194KSB7IHJldHVybiBfTV90
LmVyYXNlKF9feCk7IH0KICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9f
bGFzdCkKICAgIHsgX01fdC5lcmFzZShfX2ZpcnN0LCBfX2xhc3QpOyB9CiAgdm9pZCBjbGVhcigp
IHsgX01fdC5jbGVhcigpOyB9CgoKCiAgaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194
KSB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQogIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3Qg
a2V5X3R5cGUmIF9feCkgY29uc3QgeyByZXR1cm4gX01fdC5maW5kKF9feCk7IH0KICBzaXplX3R5
cGUgY291bnQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QuZmlu
ZChfX3gpID09IF9NX3QuZW5kKCkgPyAwIDogMTsKICB9CiAgaXRlcmF0b3IgbG93ZXJfYm91bmQo
Y29uc3Qga2V5X3R5cGUmIF9feCkge3JldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7IH0KICBj
b25zdF9pdGVyYXRvciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAg
ICByZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOwogIH0KICBpdGVyYXRvciB1cHBlcl9ib3Vu
ZChjb25zdCBrZXlfdHlwZSYgX194KSB7cmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsgfQog
IGNvbnN0X2l0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsK
ICAgIHJldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7CiAgfQoKICBwYWlyPGl0ZXJhdG9yLGl0
ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSB7CiAgICByZXR1cm4gX01f
dC5lcXVhbF9yYW5nZShfX3gpOwogIH0KICBwYWlyPGNvbnN0X2l0ZXJhdG9yLGNvbnN0X2l0ZXJh
dG9yPiBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4g
X01fdC5lcXVhbF9yYW5nZShfX3gpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9LMSwgY2xhc3Mg
X1QxLCBjbGFzcyBfQzEsIGNsYXNzIF9BMT4KICBmcmllbmQgYm9vbCBvcGVyYXRvcj09IChjb25z
dCBtYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgbWFwPF9LMSwgX1QxLCBfQzEsIF9BMT4mKTsKICB0ZW1wbGF0ZSA8Y2xhc3MgX0sxLCBjbGFz
cyBfVDEsIGNsYXNzIF9DMSwgY2xhc3MgX0ExPgogIGZyaWVuZCBib29sIG9wZXJhdG9yPCAoY29u
c3QgbWFwPF9LMSwgX1QxLCBfQzEsIF9BMT4mLAogICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgbWFwPF9LMSwgX1QxLCBfQzEsIF9BMT4mKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBj
bGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJh
dG9yPT0oY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7
CiAgcmV0dXJuIF9feC5fTV90ID09IF9feS5fTV90Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwg
Y2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVy
YXRvcjwoY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsK
ICByZXR1cm4gX194Ll9NX3QgPCBfX3kuX01fdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNs
YXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsK
ICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9U
cCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNv
bnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJu
IF9feSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0Nv
bXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBtYXA8X0tl
eSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBf
X3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwg
Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IG1hcDxfS2V5LF9UcCxf
Q29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPF9L
ZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBf
QWxsb2M+CmlubGluZSB2b2lkIHN3YXAobWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9f
eCwKICAgICAgICAgICAgICAgICBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7
CiAgX194LnN3YXAoX195KTsKfQoKfQojIDM2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX21hcC5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X211bHRpbWFwLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X211bHRpbWFwLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvY29uY2Vw
dF9jaGVjay5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9t
dWx0aW1hcC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwg
Y2xhc3MgX1RwLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUgPSBsZXNzPF9LZXk+LAogICAgICAg
ICAgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPHBhaXI8Y29uc3QgX0tleSwgX1RwPiA+ID4KY2xh
c3MgbXVsdGltYXA7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29t
cGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IG11bHRpbWFw
PF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpOwoKdGVtcGxhdGUg
PGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5s
aW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxv
Yz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9D
b21wYXJlLF9BbGxvYz4mIF9feSk7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBj
bGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgpjbGFzcyBtdWx0aW1hcAp7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgpwdWJsaWM6CgoKCiAgdHlwZWRlZiBfS2V5IGtleV90eXBlOwogIHR5cGVk
ZWYgX1RwIGRhdGFfdHlwZTsKICB0eXBlZGVmIF9UcCBtYXBwZWRfdHlwZTsKICB0eXBlZGVmIHBh
aXI8Y29uc3QgX0tleSwgX1RwPiB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0NvbXBhcmUga2V5X2Nv
bXBhcmU7CgogIGNsYXNzIHZhbHVlX2NvbXBhcmUgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPHZh
bHVlX3R5cGUsIHZhbHVlX3R5cGUsIGJvb2w+IHsKICBmcmllbmQgY2xhc3MgbXVsdGltYXA8X0tl
eSxfVHAsX0NvbXBhcmUsX0FsbG9jPjsKICBwcm90ZWN0ZWQ6CiAgICBfQ29tcGFyZSBjb21wOwog
ICAgdmFsdWVfY29tcGFyZShfQ29tcGFyZSBfX2MpIDogY29tcChfX2MpIHt9CiAgcHVibGljOgog
ICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHZhbHVlX3R5cGUmIF9feCwgY29uc3QgdmFsdWVfdHlw
ZSYgX195KSBjb25zdCB7CiAgICAgIHJldHVybiBjb21wKF9feC5maXJzdCwgX195LmZpcnN0KTsK
ICAgIH0KICB9OwoKcHJpdmF0ZToKICB0eXBlZGVmIF9SYl90cmVlPGtleV90eXBlLCB2YWx1ZV90
eXBlLAogICAgICAgICAgICAgICAgICBfU2VsZWN0MXN0PHZhbHVlX3R5cGU+LCBrZXlfY29tcGFy
ZSwgX0FsbG9jPiBfUmVwX3R5cGU7CiAgX1JlcF90eXBlIF9NX3Q7CnB1YmxpYzoKICB0eXBlZGVm
IHR5cGVuYW1lIF9SZXBfdHlwZTo6cG9pbnRlciBwb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUg
X1JlcF90eXBlOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFt
ZSBfUmVwX3R5cGU6OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVw
X3R5cGU6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiB0eXBlbmFt
ZSBfUmVwX3R5cGU6Oml0ZXJhdG9yIGl0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90
eXBlOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9S
ZXBfdHlwZTo6cmV2ZXJzZV9pdGVyYXRvciByZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlw
ZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNvbnN0X3JldmVyc2VfaXRl
cmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7
CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNl
X3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmFsbG9jYXRvcl90eXBlIGFsbG9j
YXRvcl90eXBlOwoKCgogIG11bHRpbWFwKCkgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90
eXBlKCkpIHsgfQogIGV4cGxpY2l0IG11bHRpbWFwKGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCiAg
ICAgICAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90
eXBlKCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlcmF0b3I+CiAgbXVsdGltYXAoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl
cmF0b3IgX19sYXN0KQogICAgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90eXBlKCkpCiAg
ICB7IF9NX3QuaW5zZXJ0X2VxdWFsKF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXJhdG9yPgogIG11bHRpbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J
bnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICBjb25zdCBfQ29tcGFyZSYgX19jb21wLAog
ICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQog
ICAgOiBfTV90KF9fY29tcCwgX19hKSB7IF9NX3QuaW5zZXJ0X2VxdWFsKF9fZmlyc3QsIF9fbGFz
dCk7IH0KICBtdWx0aW1hcChjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+
JiBfX3gpIDogX01fdChfX3guX01fdCkgeyB9CgogIG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJl
LF9BbGxvYz4mCiAgb3BlcmF0b3I9KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9B
bGxvYz4mIF9feCkgewogICAgX01fdCA9IF9feC5fTV90OwogICAgcmV0dXJuICp0aGlzOwogIH0K
CgoKICBrZXlfY29tcGFyZSBrZXlfY29tcCgpIGNvbnN0IHsgcmV0dXJuIF9NX3Qua2V5X2NvbXAo
KTsgfQogIHZhbHVlX2NvbXBhcmUgdmFsdWVfY29tcCgpIGNvbnN0IHsgcmV0dXJuIHZhbHVlX2Nv
bXBhcmUoX01fdC5rZXlfY29tcCgpKTsgfQogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3Io
KSBjb25zdCB7IHJldHVybiBfTV90LmdldF9hbGxvY2F0b3IoKTsgfQoKICBpdGVyYXRvciBiZWdp
bigpIHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQogIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29u
c3QgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9CiAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gX01f
dC5lbmQoKTsgfQogIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZW5k
KCk7IH0KICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIHsgcmV0dXJuIF9NX3QucmJlZ2luKCk7
IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3Qu
cmJlZ2luKCk7IH0KICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVybiBfTV90LnJlbmQo
KTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX3Qu
cmVuZCgpOyB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZW1wdHkoKTsgfQog
IHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fdC5zaXplKCk7IH0KICBzaXplX3R5
cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfTV90Lm1heF9zaXplKCk7IH0KICB2b2lkIHN3
YXAobXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194KSB7IF9NX3Quc3dhcChf
X3guX01fdCk7IH0KCgoKICBpdGVyYXRvciBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX194KSB7
IHJldHVybiBfTV90Lmluc2VydF9lcXVhbChfX3gpOyB9CiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJh
dG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgewogICAgcmV0dXJuIF9NX3Qu
aW5zZXJ0X2VxdWFsKF9fcG9zaXRpb24sIF9feCk7CiAgfQogIHRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyYXRvcj4KICB2b2lkIGluc2VydChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyYXRvciBfX2xhc3QpIHsKICAgIF9NX3QuaW5zZXJ0X2VxdWFsKF9fZmlyc3QsIF9fbGFzdCk7
CiAgfQogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgeyBfTV90LmVyYXNlKF9fcG9z
aXRpb24pOyB9CiAgc2l6ZV90eXBlIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJu
IF9NX3QuZXJhc2UoX194KTsgfQogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0
b3IgX19sYXN0KQogICAgeyBfTV90LmVyYXNlKF9fZmlyc3QsIF9fbGFzdCk7IH0KICB2b2lkIGNs
ZWFyKCkgeyBfTV90LmNsZWFyKCk7IH0KCgoKICBpdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBl
JiBfX3gpIHsgcmV0dXJuIF9NX3QuZmluZChfX3gpOyB9CiAgY29uc3RfaXRlcmF0b3IgZmluZChj
b25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQogIHNp
emVfdHlwZSBjb3VudChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmNv
dW50KF9feCk7IH0KICBpdGVyYXRvciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSB7
cmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsgfQogIGNvbnN0X2l0ZXJhdG9yIGxvd2VyX2Jv
dW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90Lmxvd2VyX2Jv
dW5kKF9feCk7CiAgfQogIGl0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gp
IHtyZXR1cm4gX01fdC51cHBlcl9ib3VuZChfX3gpOyB9CiAgY29uc3RfaXRlcmF0b3IgdXBwZXJf
Ym91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QudXBwZXJf
Ym91bmQoX194KTsKICB9CiAgIHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNv
bnN0IGtleV90eXBlJiBfX3gpIHsKICAgIHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7CiAg
fQogIHBhaXI8Y29uc3RfaXRlcmF0b3IsY29uc3RfaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0
IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7
CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0sxLCBjbGFzcyBfVDEsIGNsYXNzIF9DMSwgY2xhc3Mg
X0ExPgogIGZyaWVuZCBib29sIG9wZXJhdG9yPT0gKGNvbnN0IG11bHRpbWFwPF9LMSwgX1QxLCBf
QzEsIF9BMT4mLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LMSwg
X1QxLCBfQzEsIF9BMT4mKTsKICB0ZW1wbGF0ZSA8Y2xhc3MgX0sxLCBjbGFzcyBfVDEsIGNsYXNz
IF9DMSwgY2xhc3MgX0ExPgogIGZyaWVuZCBib29sIG9wZXJhdG9yPCAoY29uc3QgbXVsdGltYXA8
X0sxLCBfVDEsIF9DMSwgX0ExPiYsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0
aW1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+Jik7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xh
c3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+
JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX3QgPT0gX195Ll9NX3Q7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBi
b29sIG9wZXJhdG9yPChjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBf
X3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFy
ZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX3QgPCBfX3kuX01fdDsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4K
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxf
QWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSxf
VHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxs
b2M+CmlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFy
ZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5
LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9j
PgppbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJl
LF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5
LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0Fs
bG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21w
YXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxf
S2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3Mg
X0FsbG9jPgppbmxpbmUgdm9pZCBzd2FwKG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxv
Yz4mIF9feCwKICAgICAgICAgICAgICAgICBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxs
b2M+JiBfX3kpIHsKICBfX3guc3dhcChfX3kpOwp9Cgp9CiMgMzcgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfbWFwLmgiIDIgMwojIDMzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2JhY2t3YXJkL21hcC5oIiAyIDMKCnVzaW5nIHN0ZDo6bWFwOwojIDYyICJzZGljdC5oIiAy
CiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iYWNrd2FyZC92ZWN0b3IuaCIgMSAzCiMg
MzAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYmFja3dhcmQvdmVjdG9yLmgiIDMKIyAxICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL2JhY2t3YXJkX3dhcm5pbmcuaCIgMSAz
CiMgMzEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYmFja3dhcmQvdmVjdG9yLmgiIDIgMwoj
IDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYmFja3dhcmQvYWxnb2Jhc2UuaCIgMSAzCiMg
MjkgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYmFja3dhcmQvYWxnb2Jhc2UuaCIgMwojIDEg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYmFja3dhcmQvYmFja3dhcmRfd2FybmluZy5oIiAx
IDMKIyAzMCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iYWNrd2FyZC9hbGdvYmFzZS5oIiAy
IDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL3BhaXIuaCIgMSAzCiMg
MzAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYmFja3dhcmQvcGFpci5oIiAzCiMgMSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iYWNrd2FyZC9iYWNrd2FyZF93YXJuaW5nLmgiIDEgMwoj
IDMxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL3BhaXIuaCIgMiAzCiMgMSAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNTg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZp
Zy5oIiAxIDMKIyAzMiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iYWNrd2FyZC9wYWlyLmgi
IDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfcGFpci5oIiAxIDMK
IyAzMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iYWNrd2FyZC9wYWlyLmgiIDIgMwoKdXNp
bmcgc3RkOjpwYWlyOwp1c2luZyBzdGQ6Om1ha2VfcGFpcjsKIyAzMSAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9iYWNrd2FyZC9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JhY2t3YXJkL2l0ZXJhdG9yLmgiIDEgMwojIDMwICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JhY2t3YXJkL2l0ZXJhdG9yLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JhY2t3YXJkL2JhY2t3YXJkX3dhcm5pbmcuaCIgMSAzCiMgMzEgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYmFja3dhcmQvaXRlcmF0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iYWNrd2FyZC9mdW5jdGlvbi5oIiAxIDMKIyAzMCAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iYWNrd2FyZC9mdW5jdGlvbi5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9iYWNrd2FyZC9iYWNrd2FyZF93YXJuaW5nLmgiIDEgMwojIDMxICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL2Z1bmN0aW9uLmgiIDIgMwojIDEgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvaTU4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAz
CiMgMzIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYmFja3dhcmQvZnVuY3Rpb24uaCIgMiAz
CiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVk
ZS9zdGRkZWYuaCIgMSAzCiMgMzMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYmFja3dhcmQv
ZnVuY3Rpb24uaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9m
dW5jdGlvbi5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iYWNrd2FyZC9m
dW5jdGlvbi5oIiAyIDMKCgp1c2luZyBzdGQ6OnVuYXJ5X2Z1bmN0aW9uOwp1c2luZyBzdGQ6OmJp
bmFyeV9mdW5jdGlvbjsKdXNpbmcgc3RkOjpwbHVzOwp1c2luZyBzdGQ6Om1pbnVzOwp1c2luZyBz
dGQ6Om11bHRpcGxpZXM7CnVzaW5nIHN0ZDo6ZGl2aWRlczsKdXNpbmcgc3RkOjppZGVudGl0eV9l
bGVtZW50Owp1c2luZyBzdGQ6Om1vZHVsdXM7CnVzaW5nIHN0ZDo6bmVnYXRlOwp1c2luZyBzdGQ6
OmVxdWFsX3RvOwp1c2luZyBzdGQ6Om5vdF9lcXVhbF90bzsKdXNpbmcgc3RkOjpncmVhdGVyOwp1
c2luZyBzdGQ6Omxlc3M7CnVzaW5nIHN0ZDo6Z3JlYXRlcl9lcXVhbDsKdXNpbmcgc3RkOjpsZXNz
X2VxdWFsOwp1c2luZyBzdGQ6OmxvZ2ljYWxfYW5kOwp1c2luZyBzdGQ6OmxvZ2ljYWxfb3I7CnVz
aW5nIHN0ZDo6bG9naWNhbF9ub3Q7CnVzaW5nIHN0ZDo6dW5hcnlfbmVnYXRlOwp1c2luZyBzdGQ6
OmJpbmFyeV9uZWdhdGU7CnVzaW5nIHN0ZDo6bm90MTsKdXNpbmcgc3RkOjpub3QyOwp1c2luZyBz
dGQ6OmJpbmRlcjFzdDsKdXNpbmcgc3RkOjpiaW5kZXIybmQ7CnVzaW5nIHN0ZDo6YmluZDFzdDsK
dXNpbmcgc3RkOjpiaW5kMm5kOwp1c2luZyBzdGQ6OnVuYXJ5X2NvbXBvc2U7CnVzaW5nIHN0ZDo6
YmluYXJ5X2NvbXBvc2U7CnVzaW5nIHN0ZDo6Y29tcG9zZTE7CnVzaW5nIHN0ZDo6Y29tcG9zZTI7
CnVzaW5nIHN0ZDo6cG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjsKdXNpbmcgc3RkOjpwb2ludGVy
X3RvX2JpbmFyeV9mdW5jdGlvbjsKdXNpbmcgc3RkOjpwdHJfZnVuOwp1c2luZyBzdGQ6OmlkZW50
aXR5Owp1c2luZyBzdGQ6OnNlbGVjdDFzdDsKdXNpbmcgc3RkOjpzZWxlY3QybmQ7CnVzaW5nIHN0
ZDo6cHJvamVjdDFzdDsKdXNpbmcgc3RkOjpwcm9qZWN0Mm5kOwp1c2luZyBzdGQ6OmNvbnN0YW50
X3ZvaWRfZnVuOwp1c2luZyBzdGQ6OmNvbnN0YW50X3VuYXJ5X2Z1bjsKdXNpbmcgc3RkOjpjb25z
dGFudF9iaW5hcnlfZnVuOwp1c2luZyBzdGQ6OmNvbnN0YW50MDsKdXNpbmcgc3RkOjpjb25zdGFu
dDE7CnVzaW5nIHN0ZDo6Y29uc3RhbnQyOwp1c2luZyBzdGQ6OnN1YnRyYWN0aXZlX3JuZzsKdXNp
bmcgc3RkOjptZW1fZnVuX3Q7CnVzaW5nIHN0ZDo6Y29uc3RfbWVtX2Z1bl90Owp1c2luZyBzdGQ6
Om1lbV9mdW5fcmVmX3Q7CnVzaW5nIHN0ZDo6Y29uc3RfbWVtX2Z1bl9yZWZfdDsKdXNpbmcgc3Rk
OjptZW1fZnVuMV90Owp1c2luZyBzdGQ6OmNvbnN0X21lbV9mdW4xX3Q7CnVzaW5nIHN0ZDo6bWVt
X2Z1bjFfcmVmX3Q7CnVzaW5nIHN0ZDo6Y29uc3RfbWVtX2Z1bjFfcmVmX3Q7CnVzaW5nIHN0ZDo6
bWVtX2Z1bjsKdXNpbmcgc3RkOjptZW1fZnVuX3JlZjsKdXNpbmcgc3RkOjptZW1fZnVuMTsKdXNp
bmcgc3RkOjptZW1fZnVuMV9yZWY7CiMgMzIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYmFj
a3dhcmQvaXRlcmF0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNTg2LXBj
LWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzMgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvYmFja3dhcmQvaXRlcmF0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9iYWNrd2FyZC9pb3N0cmVhbS5oIiAxIDMKIyAzMSAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9iYWNrd2FyZC9pb3N0cmVhbS5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iYWNrd2FyZC9iYWNrd2FyZF93YXJuaW5nLmgiIDEgMwojIDMyICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL2lvc3RyZWFtLmgiIDIgMwojIDEgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zdHJlYW0uaCIgMSAzCiMgMzggIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zdHJlYW0uaCIgMwoKIyAxICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2k1ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDQw
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc3RyZWFtLmgiIDIgMwojIDEg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfb3N0cmVhbS5oIiAxIDMKIyA0MSAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3N0cmVhbS5oIiAyIDMKIyAxICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lzdHJlYW0uaCIgMSAzCiMgNDIgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zdHJlYW0uaCIgMiAzCgpuYW1lc3Bh
Y2Ugc3RkCnsKICBleHRlcm4gaXN0cmVhbSBjaW47CiAgZXh0ZXJuIG9zdHJlYW0gY291dDsKICBl
eHRlcm4gb3N0cmVhbSBjZXJyOwogIGV4dGVybiBvc3RyZWFtIGNsb2c7CiMgNTcgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zdHJlYW0uaCIgMwogIHN0YXRpYyBpb3NfYmFz
ZTo6SW5pdCBfX2lvaW5pdDsKfQojIDMzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JhY2t3
YXJkL2lvc3RyZWFtLmgiIDIgMwoKdXNpbmcgc3RkOjppb3N0cmVhbTsKdXNpbmcgc3RkOjpvc3Ry
ZWFtOwp1c2luZyBzdGQ6OmlzdHJlYW07CnVzaW5nIHN0ZDo6aW9zOwp1c2luZyBzdGQ6OnN0cmVh
bWJ1ZjsKCnVzaW5nIHN0ZDo6Y291dDsKdXNpbmcgc3RkOjpjaW47CnVzaW5nIHN0ZDo6Y2VycjsK
dXNpbmcgc3RkOjpjbG9nOwoKCgoKCgoKdXNpbmcgc3RkOjp3czsKdXNpbmcgc3RkOjplbmRsOwp1
c2luZyBzdGQ6OmVuZHM7CnVzaW5nIHN0ZDo6Zmx1c2g7CiMgMzQgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYmFja3dhcmQvaXRlcmF0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iYWNrd2FyZC9pdGVyYXRvci5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iYWNrd2FyZC9pdGVyYXRvci5oIiAyIDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMSAzCiMgMzcgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYmFja3dhcmQvaXRlcmF0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL3N0bF9yYXdfc3RvcmFnZV9pdGVyLmgiIDEgMwojIDM4ICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL2l0ZXJhdG9yLmgiIDIgMwoKCnVzaW5nIHN0ZDo6aW5w
dXRfaXRlcmF0b3JfdGFnOwp1c2luZyBzdGQ6Om91dHB1dF9pdGVyYXRvcl90YWc7CnVzaW5nIHN0
ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWc7CnVzaW5nIHN0ZDo6YmlkaXJlY3Rpb25hbF9pdGVyYXRv
cl90YWc7CnVzaW5nIHN0ZDo6cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWc7CgoKCgp1c2luZyBz
dGQ6OmlucHV0X2l0ZXJhdG9yOwp1c2luZyBzdGQ6Om91dHB1dF9pdGVyYXRvcjsKdXNpbmcgc3Rk
Ojpmb3J3YXJkX2l0ZXJhdG9yOwp1c2luZyBzdGQ6OmJpZGlyZWN0aW9uYWxfaXRlcmF0b3I7CnVz
aW5nIHN0ZDo6cmFuZG9tX2FjY2Vzc19pdGVyYXRvcjsKCnVzaW5nIHN0ZDo6aXRlcmF0b3JfdHJh
aXRzOwoKdXNpbmcgc3RkOjppdGVyYXRvcl9jYXRlZ29yeTsKdXNpbmcgc3RkOjpkaXN0YW5jZV90
eXBlOwp1c2luZyBzdGQ6OnZhbHVlX3R5cGU7Cgp1c2luZyBzdGQ6OmRpc3RhbmNlOwp1c2luZyBz
dGQ6OmFkdmFuY2U7Cgp1c2luZyBzdGQ6Omluc2VydF9pdGVyYXRvcjsKdXNpbmcgc3RkOjpmcm9u
dF9pbnNlcnRfaXRlcmF0b3I7CnVzaW5nIHN0ZDo6YmFja19pbnNlcnRfaXRlcmF0b3I7CnVzaW5n
IHN0ZDo6aW5zZXJ0ZXI7CnVzaW5nIHN0ZDo6ZnJvbnRfaW5zZXJ0ZXI7CnVzaW5nIHN0ZDo6YmFj
a19pbnNlcnRlcjsKCnVzaW5nIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjsKdXNpbmcgc3RkOjpyZXZl
cnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3I7Cgp1c2luZyBzdGQ6OmlzdHJlYW1faXRlcmF0b3I7
CnVzaW5nIHN0ZDo6b3N0cmVhbV9pdGVyYXRvcjsKCgp1c2luZyBzdGQ6OmNvbnN0cnVjdDsKdXNp
bmcgc3RkOjpkZXN0cm95OwoKCnVzaW5nIHN0ZDo6cmF3X3N0b3JhZ2VfaXRlcmF0b3I7CiMgMzIg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYmFja3dhcmQvYWxnb2Jhc2UuaCIgMiAzCiMgMSAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAxIDMKIyAzMyAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iYWNrd2FyZC9hbGdvYmFzZS5oIiAyIDMKIyAxICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMSAzCiMg
MzQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYmFja3dhcmQvYWxnb2Jhc2UuaCIgMiAzCgoK
dXNpbmcgc3RkOjppdGVyX3N3YXA7CnVzaW5nIHN0ZDo6c3dhcDsKdXNpbmcgc3RkOjptaW47CnVz
aW5nIHN0ZDo6bWF4Owp1c2luZyBzdGQ6OmNvcHk7CnVzaW5nIHN0ZDo6Y29weV9iYWNrd2FyZDsK
dXNpbmcgc3RkOjpjb3B5X247CnVzaW5nIHN0ZDo6ZmlsbDsKdXNpbmcgc3RkOjpmaWxsX247CnVz
aW5nIHN0ZDo6bWlzbWF0Y2g7CnVzaW5nIHN0ZDo6ZXF1YWw7CnVzaW5nIHN0ZDo6bGV4aWNvZ3Jh
cGhpY2FsX2NvbXBhcmU7CnVzaW5nIHN0ZDo6bGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheTsK
Cgp1c2luZyBzdGQ6OnVuaW5pdGlhbGl6ZWRfY29weTsKdXNpbmcgc3RkOjp1bmluaXRpYWxpemVk
X2NvcHlfbjsKdXNpbmcgc3RkOjp1bmluaXRpYWxpemVkX2ZpbGw7CnVzaW5nIHN0ZDo6dW5pbml0
aWFsaXplZF9maWxsX247CiMgMzIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYmFja3dhcmQv
dmVjdG9yLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYmFja3dhcmQvYWxs
b2MuaCIgMSAzCiMgMTcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYmFja3dhcmQvYWxsb2Mu
aCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYmFja3dhcmQvYmFja3dhcmRfd2Fy
bmluZy5oIiAxIDMKIyAxOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iYWNrd2FyZC9hbGxv
Yy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k1ODYtcGMtbGludXgtZ251
L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDE5ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jh
Y2t3YXJkL2FsbG9jLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z
dGxfYWxsb2MuaCIgMSAzCiMgMjAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYmFja3dhcmQv
YWxsb2MuaCIgMiAzCgp1c2luZyBzdGQ6Ol9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlOwp1c2luZyBz
dGQ6Om1hbGxvY19hbGxvYzsKdXNpbmcgc3RkOjpzaW1wbGVfYWxsb2M7CnVzaW5nIHN0ZDo6ZGVi
dWdfYWxsb2M7Cgp1c2luZyBzdGQ6Ol9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTsKCnVzaW5nIHN0
ZDo6YWxsb2M7CnVzaW5nIHN0ZDo6c2luZ2xlX2NsaWVudF9hbGxvYzsKdXNpbmcgc3RkOjphbGxv
Y2F0b3I7CiMgMzMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYmFja3dhcmQvdmVjdG9yLmgi
IDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmVjdG9yLmgiIDEg
MwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL3ZlY3Rvci5oIiAyIDMK
CnVzaW5nIHN0ZDo6dmVjdG9yOwojIDYzICJzZGljdC5oIiAyCiMgNzIgInNkaWN0LmgiCmNsYXNz
IGRpY3RfY29udCB7CnB1YmxpYzoKICAgICAgICBzU3RyaW5nIHN0ckNvbnQ7CiAgICAgICAgY2hh
ciBiVHlwZTsKCiAgICAgICAgZGljdF9jb250ICgpIHt9OwogICAgICAgIGRpY3RfY29udCAoY29u
c3Qgc1N0cmluZyAmIHMsIGNvbnN0IGNoYXIgdCA9ICc/JykKICAgICAgICB7IHN0ckNvbnQgPSBz
OyBiVHlwZSA9IHQ7IH07CgogICAgICAgIGludCBvcGVyYXRvcjwgKGNvbnN0IGRpY3RfY29udCAm
IG9wMikgY29uc3QKICAgICAgICB7IHJldHVybiBiVHlwZSA8IG9wMi5iVHlwZTsgfTsKICAgICAg
ICBpbnQgb3BlcmF0b3I+IChjb25zdCBkaWN0X2NvbnQgJiBvcDIpIGNvbnN0CiAgICAgICAgeyBy
ZXR1cm4gYlR5cGUgPiBvcDIuYlR5cGU7IH07CiAgICAgICAgaW50IG9wZXJhdG9yPT0gKGNvbnN0
IGRpY3RfY29udCAmIG9wMikgY29uc3QKICAgICAgICB7IHJldHVybiBiVHlwZSA9PSBvcDIuYlR5
cGU7IH07Cn07Cgp0eXBlZGVmIG1hcDxzU3RyaW5nLGRpY3RfY29udCxsZXNzPHNTdHJpbmc+ID4g
ZGljdF9tYXA7CnR5cGVkZWYgdmVjdG9yPHNTdHJpbmc+IHNLZXlWZWN0b3I7CgoKCmNsYXNzIHNE
aWN0CnsKCgoKcHJvdGVjdGVkOgoKICAgICAgICBkaWN0X21hcCBtYXBDb250OwoKcHVibGljOgog
ICAgICAgIHNEaWN0ICgpIHt9OwoKCiAgICAgICAgaW50IEluc2VydCAoY29uc3Qgc1N0cmluZyAm
IHNrZXksIGNvbnN0IHNTdHJpbmcgJiBzY29udCwgY2hhciB0eXAgPSAnPycpOwoKICAgICAgICBp
bnQgRmluZCAoY29uc3Qgc1N0cmluZyAmIHNrZXksIHNTdHJpbmcgJiBzY29udCwgY2hhciAmIHR5
cCkgY29uc3Q7CgogICAgICAgIGludCBGaW5kIChjb25zdCBzU3RyaW5nICYgc2tleSkgY29uc3Q7
CgogICAgaW50IFJlbW92ZSAoY29uc3Qgc1N0cmluZyAmIHNrZXkpOwoKCiAgICAgICAgaW50IFNh
dmUgKG9zdHJlYW0gJiBvKSBjb25zdDsKCiAgICAgICAgaW50IExvYWQgKGlzdHJlYW0gJiBpKTsK
CgogICAgICAgIHZvaWQgQ2xlYXJBbGwgKHZvaWQpOwoKCiAgICAgICAgdm9pZCBFbnVtZXJhdGUg
KHNLZXlWZWN0b3IgJiBza3YpIGNvbnN0Owp9OwoKCgpjbGFzcyBzRGljdE5vZGUgOiBwdWJsaWMg
c1RyZWUKewoKCgpwcm90ZWN0ZWQ6CgogICAgICAgIHNEaWN0Tm9kZSAqIHBzZWw7CiAgICAgICAg
c1N0cmluZyBub2RlX2tleTsKICAgICAgICBzRGljdE5vZGUgKiBzdWJfbm9kZTsKICAgICAgICBj
aGFyIGFjY2Vzc19sZXZlbDsKCnB1YmxpYzoKICAgICAgICBzRGljdE5vZGUgKGNoYXIgbHZsID0g
MCkgeyBzdWJfbm9kZSA9IDA7IGFjY2Vzc19sZXZlbCA9IGx2bDsgcHNlbCA9IDA7IH07CiAgICAg
ICAgdmlydHVhbCB+c0RpY3ROb2RlICgpOwoKCiAgICAgICAgc0RpY3ROb2RlICogT3BlbiAoY29u
c3Qgc1N0cmluZyAmIHNrZXkpOwoKICAgICAgICBjb25zdCBzRGljdE5vZGUgKiBGaW5kIChjb25z
dCBzU3RyaW5nICYgc2tleSkgY29uc3Q7CgogICAgICAgIGludCBSZW1vdmUgKGNvbnN0IHNTdHJp
bmcgJiBza2V5KTsKCgogICAgICAgIHZvaWQgUmVzZXROb2RlIChjb25zdCBzU3RyaW5nICYgc2tl
eSk7CgoKICAgICAgICB2b2lkIFNldEFjY2Vzc0xldmVsIChjaGFyIGx2bCkgeyBpZiAobHZsKSBh
Y2Nlc3NfbGV2ZWwgPSBsdmw7IH07CgogICAgICAgIGNoYXIgR2V0QWNjZXNzTGV2ZWwgKHZvaWQp
IGNvbnN0IHsgcmV0dXJuIGFjY2Vzc19sZXZlbDsgfTsKfTsKCgoKCmNsYXNzIHNEaWN0VGFibGUg
OiBwdWJsaWMgc0RpY3ROb2RlCnsKCgoKCgpwcm90ZWN0ZWQ6CgogICAgICAgIHNEaWN0IGRDb250
OwoKcHVibGljOgogICAgICAgIHNEaWN0VGFibGUgKGNvbnN0IHNTdHJpbmcgJiBzcm9vdCwgY2hh
ciBsdmwgPSAwKTsKICAgICAgICBzRGljdFRhYmxlIChjb25zdCBjaGFyICogcHJvb3QgPSAicm9v
dCIsIGNoYXIgbHZsID0gMCk7CgoKICAgICAgICB2b2lkIE9wZW5EaWN0aW9uYXJ5IChjb25zdCBz
U3RyaW5nICYgc2tleSwgc1N0cmluZyAmIHN0ciwgY2hhciAmIHR5cCwgaW50IGNyZWF0ZSA9ICEw
KQogICAgICAgICAgICAgICAgeyBpZiAoIWRDb250LkZpbmQgKHNrZXksIHN0ciwgdHlwKSAmJiBj
cmVhdGUpIGRDb250Lkluc2VydCAoc2tleSwgc3RyLCB0eXApOyB9OwoKICAgICAgICBpbnQgUmVh
ZERpY3Rpb25hcnkgKGNvbnN0IHNTdHJpbmcgJiBza2V5LCBzU3RyaW5nICYgc3RyLCBjaGFyICYg
dHlwKSBjb25zdAogICAgICAgICAgICAgICAgeyByZXR1cm4gZENvbnQuRmluZCAoc2tleSwgc3Ry
LCB0eXApOyB9OwoKICAgICAgICB2b2lkIFJlcGxhY2VEaWN0aW9uYXJ5IChjb25zdCBzU3RyaW5n
ICYgc2tleSwgY29uc3Qgc1N0cmluZyAmIHN0ciwgY29uc3QgY2hhciAmIHR5cCkKICAgICAgICAg
ICAgICAgIHsgZENvbnQuSW5zZXJ0IChza2V5LCBzdHIsIHR5cCk7IH07CgogICAgICAgIGludCBG
aW5kRGljdGlvbmFyeSAoY29uc3Qgc1N0cmluZyAmIHNrZXkpIGNvbnN0CiAgICAgICAgICAgICAg
ICB7IHJldHVybiBkQ29udC5GaW5kIChza2V5KTsgfTsKCiAgICBpbnQgUmVtb3ZlRGljdGlvbmFy
eSAoY29uc3Qgc1N0cmluZyAmIHNrZXkpCiAgICAgICAgICAgICAgICB7IHJldHVybiBkQ29udC5S
ZW1vdmUgKHNrZXkpOyB9OwoKCiAgICAgICAgc0RpY3RUYWJsZSAqIE9wZW5UYWJsZSAoY29uc3Qg
c1N0cmluZyAmIHNrZXkpCiAgICAgICAgICAgICAgICB7IGlmIChhY2Nlc3NfbGV2ZWwgPiAwKQog
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT3BlblN1YlRhYmxlIChza2V5KTsKICAgICAg
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHNEaWN0VGFi
bGUqKU9wZW4gKHNrZXkpOyB9OwoKICAgICAgICBjb25zdCBzRGljdFRhYmxlICogRmluZFRhYmxl
IChjb25zdCBzU3RyaW5nICYgc2tleSkgY29uc3QKICAgICAgICAgICAgICAgIHsgaWYgKGFjY2Vz
c19sZXZlbCA+IDApCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGaW5kU3ViVGFibGUg
KHNrZXkpOwogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAoY29uc3Qgc0RpY3RUYWJsZSopRmluZCAoc2tleSk7IH07CgoKICAgICAgICBzRGljdFRh
YmxlICogT3BlblBhdGggKHNTdHJpbmcgc3RyKTsKCgogICAgICAgIHZvaWQgU2VsZWN0IChjb25z
dCBzU3RyaW5nIHN0cikKICAgICAgICB7IHBzZWwgPSAoc3RyLkdldExlbmd0aCAoKSA+IDAgPyBP
cGVuVGFibGUgKHN0cikgOiAwKTsgfTsKCgogICAgaW50IFJlbW92ZVRhYmxlIChjb25zdCBzU3Ry
aW5nICYgc2tleSkgeyByZXR1cm4gUmVtb3ZlIChza2V5KTsgfTsKCiAgICAgICAgaW50IFJlbW92
ZVBhdGggKHNTdHJpbmcgc3RyKTsKCgogICAgICAgIGludCBTYXZlIChvc3RyZWFtICYgbykgY29u
c3Q7CgogICAgICAgIGludCBTYXZlQXNSb290IChvc3RyZWFtICYgbyk7CgoKICAgICAgICBpbnQg
TG9hZCAoaXN0cmVhbSAmIGkpOwoKCiAgICAgICAgdm9pZCBDbGVhckFsbCAoKTsKCgogICAgICAg
IHZvaWQgRW51bWVyYXRlIChzS2V5VmVjdG9yICYgc2t2KSBjb25zdDsKCgogICAgICAgIHZvaWQg
RW51bUtleXMgKHNLZXlWZWN0b3IgJiBza3YpIGNvbnN0CiAgICAgICAgICAgICAgICB7IGRDb250
LkVudW1lcmF0ZSAoc2t2KTsgfQoKcHJvdGVjdGVkOgogICAgICAgIHNEaWN0VGFibGUgKiBPcGVu
U3ViVGFibGUgKGNvbnN0IHNTdHJpbmcgJiBza2V5KQogICAgICAgIHsgaWYgKCFzdWJfbm9kZSkg
c3ViX25vZGUgPSBuZXcgc0RpY3RUYWJsZTsKICAgICAgICAgIHJldHVybiAoc0RpY3RUYWJsZSop
c3ViX25vZGUtPk9wZW4gKHNrZXkpOyB9OwoKICAgICAgICBjb25zdCBzRGljdFRhYmxlICogRmlu
ZFN1YlRhYmxlIChjb25zdCBzU3RyaW5nICYgc2tleSkgY29uc3QKICAgICAgICB7IGlmICghc3Vi
X25vZGUpIHJldHVybiAwOwogICAgICAgICAgcmV0dXJuIChzRGljdFRhYmxlKilzdWJfbm9kZS0+
RmluZCAoc2tleSk7IH07CgogICAgICAgIGludCBpU2F2ZSAob3N0cmVhbSAmIG8pIGNvbnN0OwoK
ICAgICAgICB2b2lkIGlFbnVtZXJhdGUgKHNLZXlWZWN0b3IgJiBza3YpIGNvbnN0Owp9OwojIDI3
ICJzeXN0ZW0uaCIgMgojIDEgInN0aW1lci5oIiAxCiMgMjUgInN0aW1lci5oIgojIDEgInNlaG1h
bi5oIiAxCiMgMjggInNlaG1hbi5oIgojIDEgInNoYW5kbGVyLmgiIDEKIyAyNCAic2hhbmRsZXIu
aCIKIyAxICJzcGxpc3QuaCIgMQojIDE5ICJzcGxpc3QuaCIKIyAxICJzbGlzdC5oIiAxCiMgMTkg
InNsaXN0LmgiCmNsYXNzIHNMaW5rZWRMaXN0CnsKcHVibGljOgogICAgICAgIGludCBsaWQ7CnBy
b3RlY3RlZDoKICAgICAgICBzTGlua2VkTGlzdCAqIHByZXYsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKiBuZXh0OwoKcHVibGljOgogICAgICAgIHNMaW5rZWRMaXN0ICgpOwogICAg
ICAgIHZpcnR1YWwgfnNMaW5rZWRMaXN0ICgpOwoKICAgICAgICB2b2lkIFVubGluayAodm9pZCk7
CgogICAgICAgIHZvaWQgSW5zZXJ0SXRlbSAoc0xpbmtlZExpc3QgKiBwTGlzdEl0ZW0pOwogICAg
ICAgIHNMaW5rZWRMaXN0ICogRmluZE5lYXIgKGludCBpZCk7CiAgICAgICAgc0xpbmtlZExpc3Qg
KiBSZW1vdmVJdGVtIChpbnQgaWQpOwoKICAgICAgICBzTGlua2VkTGlzdCAqIEdldE5leHQgKCkg
eyByZXR1cm4gbmV4dDsgfTsKfTsKIyAyMCAic3BsaXN0LmgiIDIKCmNsYXNzIHNQcmlvcml0eUxp
c3QgOiBwdWJsaWMgc0xpbmtlZExpc3QKewpwdWJsaWM6CiAgICAgICAgaW50IElEOwoKcHVibGlj
OgogICAgICAgIHZpcnR1YWwgc1ByaW9yaXR5TGlzdCAqIEZpbmRJRCAoaW50IGlkKTsKfTsKIyAy
NSAic2hhbmRsZXIuaCIgMgojIDEgInNleGNlcHQuaCIgMQojIDI1ICJzZXhjZXB0LmgiCiMgMSAi
c3N0cmluZy5oIiAxCiMgMjYgInNleGNlcHQuaCIgMgoKY2xhc3Mgc0V4Y2VwdGlvbgp7CnB1Ymxp
YzoKICAgICAgICB2aXJ0dWFsIHZvaWQgR2V0U3RyaW5nIChzU3RyaW5nICYgc3RyKSBjb25zdCA9
IDA7CgogICAgICAgIHZpcnR1YWwgfnNFeGNlcHRpb24gKCk7Cn07CgpjbGFzcyBzUHJvZ3JhbW1F
eGNlcHRpb24gOiBwdWJsaWMgc0V4Y2VwdGlvbgp7CnB1YmxpYzoKICAgICAgICBpbnQgbnVtYmVy
OwogICAgICAgIHNTdHJpbmcgc3RyRmlsZTsKICAgICAgICBpbnQgbGluZTsKCiAgICAgICAgc1By
b2dyYW1tRXhjZXB0aW9uIChpbnQgbm8sIGNvbnN0IHNTdHJpbmcgJiBmaWxlLCBpbnQgbGluZW5v
KSA6IHN0ckZpbGUgKGZpbGUpCiAgICAgICAgeyBudW1iZXIgPSBubzsgbGluZSA9IGxpbmVubzsg
fTsKCiAgICAgICAgc1Byb2dyYW1tRXhjZXB0aW9uIChpbnQgbm8sIGNvbnN0IGNoYXIgKiBmaWxl
LCBpbnQgbGluZW5vKSA6IHN0ckZpbGUgKGZpbGUpCiAgICAgICAgeyBudW1iZXIgPSBubzsgbGlu
ZSA9IGxpbmVubzsgfTsKCiAgICAgICAgdmlydHVhbCB2b2lkIEdldFN0cmluZyAoc1N0cmluZyAm
IHN0cikgY29uc3Q7Cn07CgpjbGFzcyBzQ2FsY0V4Y2VwdGlvbiA6IHB1YmxpYyBzRXhjZXB0aW9u
CnsKfTsKCmNsYXNzIHNGbG9hdEV4Y2VwdGlvbiA6IHB1YmxpYyBzQ2FsY0V4Y2VwdGlvbgp7CnB1
YmxpYzoKICAgICAgICBpbnQgc2lnOwoKICAgICAgICBzRmxvYXRFeGNlcHRpb24gKGludCBzKSB7
IHNpZyA9IHM7IH07CgogICAgICAgIHZpcnR1YWwgdm9pZCBHZXRTdHJpbmcgKHNTdHJpbmcgJiBz
dHIpIGNvbnN0Owp9OwoKY2xhc3Mgc01hdGhFeGNlcHRpb24gOiBwdWJsaWMgc0NhbGNFeGNlcHRp
b24KewpwdWJsaWM6CiAgICAgICAgaW50IHR5cGU7CiAgICBzU3RyaW5nIHN0ck5hbWU7CiAgICAg
ICAgZG91YmxlIGFyZzE7CiAgICAgICAgZG91YmxlIGFyZzI7CiAgICAgICAgZG91YmxlIHJldHZh
bDsKCiAgICAgICAgc01hdGhFeGNlcHRpb24gKGludCB0LCBjb25zdCBzU3RyaW5nICYgbiwgZG91
YmxlIGExLCBkb3VibGUgYTIsIGRvdWJsZSByZXQpIDogc3RyTmFtZSAobikKICAgICAgICB7IHR5
cGUgPSB0OyBhcmcxID0gYTE7IGFyZzIgPSBhMjsgcmV0dmFsID0gcmV0OyB9OwoKICAgICAgICBz
TWF0aEV4Y2VwdGlvbiAoaW50IHQsIGNvbnN0IGNoYXIgKiBuLCBkb3VibGUgYTEsIGRvdWJsZSBh
MiwgZG91YmxlIHJldCkgOiBzdHJOYW1lIChuKQogICAgICAgIHsgdHlwZSA9IHQ7IGFyZzEgPSBh
MTsgYXJnMiA9IGEyOyByZXR2YWwgPSByZXQ7IH07CgogICAgICAgIHZpcnR1YWwgdm9pZCBHZXRT
dHJpbmcgKHNTdHJpbmcgJiBzdHIpIGNvbnN0Owp9OwoKCgpleHRlcm4gdm9pZCBzSW5pdEV4Y2Vw
dGlvbnMgKHZvaWQpOwojIDI2ICJzaGFuZGxlci5oIiAyCgp0eXBlZGVmIGVudW0geyBzaF9pbml0
LCBzaF9ydW5uaW5nLCBzaF9yZW1vdmUgfSBzSGFuZGxlclN0YXRlOwoKY2xhc3Mgc0hhbmRsZXIg
OiBwdWJsaWMgc1ByaW9yaXR5TGlzdAp7CnB1YmxpYzoKCgogICAgICAgIGNoYXIgKiBwVXNlck5h
bWU7Cgpwcm90ZWN0ZWQ6CiAgICAgICAgaW50IHNoTG9ja3M7CiAgICAgICAgc0hhbmRsZXJTdGF0
ZSBzaFN0YXRlOwogICAgICAgIGxvbmcgdF9tYXgsIGhpdF9jbnQ7CiAgICAgICAgZG91YmxlIHRf
c3VtOwoKcHVibGljOgogICAgICAgIHNIYW5kbGVyICgpIHsgcFVzZXJOYW1lID0gMDsgdF9tYXgg
PSAwOyB0X3N1bSA9IDA7IGhpdF9jbnQgPSAwOyB9OwoKICAgICAgICB2aXJ0dWFsIHZvaWQgQ3Jl
YXRlIChpbnQgaWQsIGludCBwcmlvKTsKCiAgICAgICAgdm9pZCBMb2NrIChpbnQgY29kZSA9IDAp
OwogICAgICAgIHZvaWQgVW5sb2NrIChpbnQgY29kZSA9IDApOwoKICAgICAgICB2b2lkIFJlaW5p
dCAodm9pZCk7CiAgICAgICAgdm9pZCBSZW1vdmUgKHZvaWQpOwoKICAgICAgICB2b2lkIFByb2Zp
bGVTdGF0cyAob3N0cmVhbSAmIG8pOwoKICAgICAgICBpbnQgRXhlY3V0ZUNoYWluICh2b2lkKTsK
ICAgICAgICBpbnQgUHJvZmlsZUNoYWluIChvc3RyZWFtICYgbywgaW50IGNoYWluX2NvZGUpOwoK
cHJvdGVjdGVkOgogICAgICAgIHZpcnR1YWwgaW50IEluaXQgKHZvaWQpOwogICAgICAgIHZpcnR1
YWwgaW50IEV4ZWN1dGUgKHZvaWQpOwogICAgICAgIHZpcnR1YWwgaW50IENsb3NlICh2b2lkKTsK
fTsKCmNsYXNzIHNIYW5kbGVyRXhjZXB0aW9uIDogcHVibGljIHNFeGNlcHRpb24KewpwdWJsaWM6
CiAgICAgICAgc0hhbmRsZXIgKiBwSGFuOwogICAgICAgIHNTdHJpbmcgc3RyRXJyOwoKICAgICAg
ICBzSGFuZGxlckV4Y2VwdGlvbiAoc0hhbmRsZXIgKiBwaCwgY29uc3Qgc1N0cmluZyAmIHN0cmVy
cikKICAgICAgICB7IHBIYW4gPSBwaDsgc3RyRXJyID0gc3RyZXJyOyB9CgogICAgICAgIHZpcnR1
YWwgdm9pZCBHZXRTdHJpbmcgKHNTdHJpbmcgJiBzdHIpIGNvbnN0Owp9OwojIDI5ICJzZWhtYW4u
aCIgMgojIDEgInNldmVudC5oIiAxCiMgMzEgInNldmVudC5oIgojIDEgInNwbGlzdC5oIiAxCiMg
MzIgInNldmVudC5oIiAyCiMgMSAic2ZsYWdzLmgiIDEKIyA0OCAic2ZsYWdzLmgiCiMgMSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iYWNrd2FyZC9mc3RyZWFtLmgiIDEgMwojIDQ5ICJzZmxh
Z3MuaCIgMgojIDEgInNzdHJpbmcuaCIgMQojIDUwICJzZmxhZ3MuaCIgMgoKCgoKY2xhc3Mgc0Zs
YWdTZXQKewpwcml2YXRlOgogICAgICAgIGludCBmaWVsZF9zaXplOwogICAgICAgIHVuc2lnbmVk
IGxvbmcgKiBmbGFnX2ZpZWxkOwoKcHVibGljOgogICAgICAgIHN0YXRpYyBpbnQgZGVmX2ZpZWxk
X3NpemU7CgogICAgICAgIHNGbGFnU2V0IChpbnQgc2l6ZSA9IGRlZl9maWVsZF9zaXplKTsKICAg
ICAgICBzRmxhZ1NldCAoY29uc3Qgc0ZsYWdTZXQgJiBmcyk7CiAgICAgICAgc0ZsYWdTZXQgKGNv
bnN0IGNoYXIgKiBidWZmKTsKICAgICAgICBzRmxhZ1NldCAoY29uc3QgY2hhciAqIGJ1ZmYsaW50
IGxlbik7CiAgICAgICAgfnNGbGFnU2V0ICgpOwoKICAgICAgICBpbnQgU2V0ICh2b2lkKTsKICAg
ICAgICBpbnQgU2V0IChpbnQgbnIsIGludCB2YWwgPSAxKTsKICAgICAgICBzU3RyaW5nIEdldFN0
cmluZyAodm9pZCk7CiAgICAgICAgc1N0cmluZyBHZXRQYWNrZWRTdHJpbmcgKHZvaWQpOwogICAg
ICAgIGludCBHZXQgKGludCBucikgY29uc3Q7CiAgICAgICAgaW50IFRvZ2dsZSAoaW50IG5yKTsK
CiAgICAgICAgdm9pZCBDbGVhciAodm9pZCk7CgogICAgICAgIGludCBDb3VudCAodm9pZCkgY29u
c3Q7CiAgICAgICAgaW50IFNpemUgKHZvaWQpIGNvbnN0IHsgcmV0dXJuIGZpZWxkX3NpemU7IH07
CgogICAgICAgIHNGbGFnU2V0ICYgb3BlcmF0b3I9IChjb25zdCBzRmxhZ1NldCAmIGZzKTsKICAg
ICAgICBzRmxhZ1NldCAmIG9wZXJhdG9yfD0gKGNvbnN0IHNGbGFnU2V0ICYgZnMpOwogICAgICAg
IHNGbGFnU2V0ICYgb3BlcmF0b3ImPSAoY29uc3Qgc0ZsYWdTZXQgJiBmcyk7CiAgICAgICAgc0Zs
YWdTZXQgJiBvcGVyYXRvcl49IChjb25zdCBzRmxhZ1NldCAmIGZzKTsKCiAgICAgICAgc0ZsYWdT
ZXQgb3BlcmF0b3J+ICgpIGNvbnN0OwoKICAgICAgICBpbnQgb3BlcmF0b3I9PSAoY29uc3Qgc0Zs
YWdTZXQgJiBmcyk7CiAgICAgICAgaW50IG9wZXJhdG9yIT0gKGNvbnN0IHNGbGFnU2V0ICYgZnMp
OwoKICAgICAgICBmcmllbmQgc0ZsYWdTZXQgb3BlcmF0b3J8IChjb25zdCBzRmxhZ1NldCAmIGZz
MSwgY29uc3Qgc0ZsYWdTZXQgJiBmczIpOwogICAgICAgIGZyaWVuZCBzRmxhZ1NldCBvcGVyYXRv
ciYgKGNvbnN0IHNGbGFnU2V0ICYgZnMxLCBjb25zdCBzRmxhZ1NldCAmIGZzMik7CiAgICAgICAg
ZnJpZW5kIHNGbGFnU2V0IG9wZXJhdG9yXiAoY29uc3Qgc0ZsYWdTZXQgJiBmczEsIGNvbnN0IHNG
bGFnU2V0ICYgZnMyKTsKCiAgICAgICAgZnJpZW5kIG9zdHJlYW0gJiBvcGVyYXRvcjw8IChvc3Ry
ZWFtICYgbywgY29uc3Qgc0ZsYWdTZXQgJiBmcyk7Cn07CgppbmxpbmUgc0ZsYWdTZXQgb3BlcmF0
b3J8IChjb25zdCBzRmxhZ1NldCAmIGZzMSwgY29uc3Qgc0ZsYWdTZXQgJiBmczIpCiAgICAgICAg
eyBzRmxhZ1NldCBmc3JldCAoZnMxKTsgZnNyZXQgfD0gZnMyOyByZXR1cm4gZnNyZXQ7IH0KaW5s
aW5lIHNGbGFnU2V0IG9wZXJhdG9yJiAoY29uc3Qgc0ZsYWdTZXQgJiBmczEsIGNvbnN0IHNGbGFn
U2V0ICYgZnMyKQogICAgICAgIHsgc0ZsYWdTZXQgZnNyZXQgKGZzMSk7IGZzcmV0ICY9IGZzMjsg
cmV0dXJuIGZzcmV0OyB9CmlubGluZSBzRmxhZ1NldCBvcGVyYXRvcl4gKGNvbnN0IHNGbGFnU2V0
ICYgZnMxLCBjb25zdCBzRmxhZ1NldCAmIGZzMikKICAgICAgICB7IHNGbGFnU2V0IGZzcmV0IChm
czEpOyBmc3JldCBePSBmczI7IHJldHVybiBmc3JldDsgfQojIDMzICJzZXZlbnQuaCIgMgojIDEg
ImhhbmRlZi5oIiAxCiMgNjkgImhhbmRlZi5oIgplbnVtIFNIX0lEX0VOVU0gewogICAgICAgIFNI
X0lEX0VWRU5UTUFOQUdFUiA9IDEsCiAgICAgICAgU0hfSURfS0VZQk9BUkQgPSAyLAogICAgICAg
IFNIX0lEX01PVVNFID0gMywKICAgICAgICBTSF9JRF9USU1FUiA9IDQsCiAgICAgICAgU0hfSURf
VENQID0gNSwKICAgICAgICBTSF9JRF9DT00xID0gNiwKICAgICAgICBTSF9JRF9DT00yID0gNywK
ICAgICAgICBTSF9JRF9DT00zID0gOCwKICAgICAgICBTSF9JRF9DT000ID0gOSwKICAgICAgICBT
SF9JRF9IVFRQRCA9IDEwLAogICAgICAgIFNIX0lEX0ZUUEQgPSAxMSwKICAgICAgICBTSF9JRF9Q
UklOVCA9IDEyLAogICAgICAgIFNIX0lEX0xPR1RDUEVWID0gMTMsCiAgICAgICAgU0hfSURfUENV
QyA9IDE0LAogICAgICAgIFNIX0lEX0FUTUVMID0gMTUsCiAgICAgICAgU0hfSURfREwgPSAxNiwK
ICAgICAgICBTSF9JRF9UT1VDSCA9IDE3LAogICAgICAgIFNIX0lEX1RJTUUgPSAxOCwKICAgICAg
ICBTSF9JRF9DSEVDS1RJTUUgPSAxOSwKICAgICAgICBTSF9JRF9TWVNTVE9QID0gMjAsCiAgICAg
ICAgU0hfSURfVE9VQ0hURVNUID0gMjEKfTsKCgoKCgplbnVtIFNIX1BSSU9fRU5VTSB7CiAgICAg
ICAgU0hfUFJJT19FVkVOVE1BTkFHRVIgPSAxLAogICAgICAgIFNIX1BSSU9fS0VZQk9BUkQgPSAy
LAogICAgICAgIFNIX1BSSU9fTU9VU0UgPSAzLAogICAgICAgIFNIX1BSSU9fVE9VQ0ggPSAzLAog
ICAgICAgIFNIX1BSSU9fVElNRVIgPSA0LAogICAgICAgIFNIX1BSSU9fQ09NID0gNSwKICAgICAg
ICBTSF9QUklPX1RDUCA9IDYsCiAgICAgICAgU0hfUFJJT19QUklOVCA9IDcsCiAgICAgICAgU0hf
UFJJT19GVFBEID0gMTAsCiAgICAgICAgU0hfUFJJT19IVFRQRCA9IDExLAogICAgICAgIFNIX1BS
SU9fQVRNRUwgPSA1LAogICAgICAgIFNIX1BSSU9fVElNRSA9IDUsCiAgICAgICAgU0hfUFJJT19D
SEVDS1RJTUUgPSA5LAogICAgICAgIFNIX1BSSU9fU1lTU1RPUCA9IDUKfTsKCgoKCgoKCmVudW0g
c0V2ZW50VHlwZSB7CiAgICAgICAgRVZFTlRfVFlQRV9LRVlCT0FSRCA9IDEsCiAgICAgICAgRVZF
TlRfVFlQRV9NT1VTRSA9IDIsCiAgICAgICAgRVZFTlRfVFlQRV9USU1FUiA9IDMsCiAgICAgICAg
RVZFTlRfVFlQRV9UQ1AgPSA0LAogICAgICAgIEVWRU5UX1RZUEVfRE9XTkxPQUQgPSA1LAogICAg
ICAgIEVWRU5UX1RZUEVfTE9HRVYgPSA2LAogICAgICAgIEVWRU5UX1RZUEVfUFJJTlQgPSA3LAog
ICAgICAgIEVWRU5UX1RZUEVfTE9HVENQID0gOCwKICAgICAgICBFVkVOVF9UWVBFX0FCTEZfRVZF
TlQgPSA5LAogICAgICAgIEVWRU5UX1RZUEVfUENVQ19TRU5EID0gMTAsCiAgICAgICAgRVZFTlRf
VFlQRV9QQ1VDX1JFQ0VJVkUgPSAxMSwKICAgICAgICBFVkVOVF9UWVBFX0dFTkVSSUMgPSAxMgp9
OwoKCgoKCmVudW0gRUhfSURfRU5VTSB7CiAgICAgICAgRUhfSURfQUJMRiA9IDEwLAogICAgICAg
IEVIX0lEX01PVVNFID0gMjAsCiAgICAgICAgRUhfSURfS0VZQk9BUkQgPSAzMCwKICAgICAgICBF
SF9JRF9MT0dDT01FViA9IDQwLAogICAgICAgIEVIX0lEX1BSSU5UID0gNTAsCiAgICAgICAgRUhf
SURfTE9HVENQRVYgPSA2MAp9OwojIDM0ICJzZXZlbnQuaCIgMgoKCgoKCmNsYXNzIHNFdmVudAp7
CnB1YmxpYzoKCiAgICAgICAgdmlydHVhbCBzRXZlbnRUeXBlIEdldFR5cGUgKHZvaWQpIGNvbnN0
ID0gMDsKCgogICAgICAgIHZpcnR1YWwgdm9pZCBFeGVjdXRlICh2b2lkKTsKCiAgICAgICAgdmly
dHVhbCB+c0V2ZW50ICgpOwp9OwoKCgoKCmNsYXNzIHNHZW5lcmljRXZlbnQgOiBwdWJsaWMgc0V2
ZW50CnsKICAgICAgICB2aXJ0dWFsIHNFdmVudFR5cGUgR2V0VHlwZSAodm9pZCkgY29uc3Q7Cn07
CgpjbGFzcyBzUHJvRXZlbnRROwoKCgoKCmNsYXNzIHNFdmVudFF1ZXVlCnsKcHJpdmF0ZToKCiAg
ICAgICAgc1Byb0V2ZW50USAqIHBfdGhlX3F1ZXVlOwoKcHVibGljOgogICAgICAgIHNFdmVudFF1
ZXVlICgpOwogICAgICAgIH5zRXZlbnRRdWV1ZSAoKTsKCgogICAgICAgIHZvaWQgUHV0IChzRXZl
bnQgKiBwRXZlbnQpOwoKICAgICAgICBzRXZlbnQgKiBHZXROZXh0ICh2b2lkKTsKCgogICAgICAg
IGludCBJc0VtcHR5ICh2b2lkKSBjb25zdDsKfTsKCgoKCgpjbGFzcyBzRXZlbnRIYW5kbGVyIDog
cHVibGljIHNQcmlvcml0eUxpc3QKewpwdWJsaWM6CgogICAgICAgIHNGbGFnU2V0IGV2ZW50X21h
c2s7CgoKICAgICAgICB2aXJ0dWFsIHZvaWQgQ3JlYXRlIChpbnQgaWQsIGludCBwcmlvKTsKCiAg
ICAgICAgdmlydHVhbCBpbnQgU2V0RXZlbnQgKHNFdmVudCAqIHBFdmVudCk7Cn07CiMgMzAgInNl
aG1hbi5oIiAyCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMSAzCiMgMTggIi91c3Iv
aW5jbHVkZS9wdGhyZWFkLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMg
MTkgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvc2NoZWQu
aCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Zl
YXR1cmVzLmgiIDEgMwojIDI0ICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzCgoKIyAxICIvdXNy
L2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDIg
MwoKCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9zY2hl
ZC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwojIDQ3ICIvdXNy
L2luY2x1ZGUvYml0cy9zY2hlZC5oIiAzCnN0cnVjdCBzY2hlZF9wYXJhbQogIHsKICAgIGludCBz
Y2hlZF9wcmlvcml0eTsKICB9OwoKZXh0ZXJuICJDIiB7CgoKCmV4dGVybiBpbnQgY2xvbmUgKGlu
dCAoKl9fZm4pICh2b2lkICpfX2FyZyksIHZvaWQgKl9fY2hpbGRfc3RhY2ssIGludCBfX2ZsYWdz
LCB2b2lkICpfX2FyZyk7CgoKCn0KIyAzMyAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDIgMwoKZXh0
ZXJuICJDIiB7CgoKZXh0ZXJuIGludCBfX3NjaGVkX3NldHBhcmFtIChfX3BpZF90IF9fcGlkLCBj
b25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pOwoKZXh0ZXJuIGludCBzY2hlZF9zZXRw
YXJhbSAoX19waWRfdCBfX3BpZCwgY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKTsK
CgoKZXh0ZXJuIGludCBfX3NjaGVkX2dldHBhcmFtIChfX3BpZF90IF9fcGlkLCBzdHJ1Y3Qgc2No
ZWRfcGFyYW0gKl9fcGFyYW0pOwpleHRlcm4gaW50IHNjaGVkX2dldHBhcmFtIChfX3BpZF90IF9f
cGlkLCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pOwoKCmV4dGVybiBpbnQgX19zY2hlZF9z
ZXRzY2hlZHVsZXIgKF9fcGlkX3QgX19waWQsIGludCBfX3BvbGljeSwgY29uc3Qgc3RydWN0IHNj
aGVkX3BhcmFtICpfX3BhcmFtKTsKCmV4dGVybiBpbnQgc2NoZWRfc2V0c2NoZWR1bGVyIChfX3Bp
ZF90IF9fcGlkLCBpbnQgX19wb2xpY3ksIGNvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJh
bSk7CgoKCmV4dGVybiBpbnQgX19zY2hlZF9nZXRzY2hlZHVsZXIgKF9fcGlkX3QgX19waWQpOwpl
eHRlcm4gaW50IHNjaGVkX2dldHNjaGVkdWxlciAoX19waWRfdCBfX3BpZCk7CgoKZXh0ZXJuIGlu
dCBfX3NjaGVkX3lpZWxkICh2b2lkKTsKZXh0ZXJuIGludCBzY2hlZF95aWVsZCAodm9pZCk7CgoK
ZXh0ZXJuIGludCBfX3NjaGVkX2dldF9wcmlvcml0eV9tYXggKGludCBfX2FsZ29yaXRobSk7CmV4
dGVybiBpbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21heCAoaW50IF9fYWxnb3JpdGhtKTsKCgpleHRl
cm4gaW50IF9fc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAoaW50IF9fYWxnb3JpdGhtKTsKZXh0ZXJu
IGludCBzY2hlZF9nZXRfcHJpb3JpdHlfbWluIChpbnQgX19hbGdvcml0aG0pOwoKCmV4dGVybiBp
bnQgX19zY2hlZF9ycl9nZXRfaW50ZXJ2YWwgKF9fcGlkX3QgX19waWQsIHN0cnVjdCB0aW1lc3Bl
YyAqX190KTsKZXh0ZXJuIGludCBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwgKF9fcGlkX3QgX19waWQs
IHN0cnVjdCB0aW1lc3BlYyAqX190KTsKCn0KIyAyMSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIg
MiAzCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9wdGhy
ZWFkLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAxIDMKIyAyOSAiL3Vzci9p
bmNsdWRlL3NpZ25hbC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDMw
ICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgojIDEgIi91c3IvaW5j
bHVkZS9iaXRzL3NpZ3NldC5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAyIDMK
IyA0OSAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAzCnR5cGVkZWYgX19zaWdzZXRfdCBzaWdzZXRf
dDsKIyAzNTQgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMwp9CiMgMjUgIi91c3IvaW5jbHVkZS9w
dGhyZWFkLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMK
IyAyNiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCgoKZXh0ZXJuICJDIiB7CiMgNDkgIi91
c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZW51bQp7CiAgUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUs
CgogIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVECgp9OwoKZW51bQp7CiAgUFRIUkVBRF9JTkhFUklU
X1NDSEVELAoKICBQVEhSRUFEX0VYUExJQ0lUX1NDSEVECgp9OwoKZW51bQp7CiAgUFRIUkVBRF9T
Q09QRV9TWVNURU0sCgogIFBUSFJFQURfU0NPUEVfUFJPQ0VTUwoKfTsKCmVudW0KewogIFBUSFJF
QURfTVVURVhfRkFTVF9OUCwKICBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRV9OUCwKICBQVEhSRUFE
X01VVEVYX0VSUk9SQ0hFQ0tfTlAKCiAgLAogIFBUSFJFQURfTVVURVhfTk9STUFMID0gUFRIUkVB
RF9NVVRFWF9GQVNUX05QLAogIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFID0gUFRIUkVBRF9NVVRF
WF9SRUNVUlNJVkVfTlAsCiAgUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLID0gUFRIUkVBRF9NVVRF
WF9FUlJPUkNIRUNLX05QLAogIFBUSFJFQURfTVVURVhfREVGQVVMVCA9IFBUSFJFQURfTVVURVhf
Tk9STUFMCgp9OwoKZW51bQp7CiAgUFRIUkVBRF9QUk9DRVNTX1BSSVZBVEUsCgogIFBUSFJFQURf
UFJPQ0VTU19TSEFSRUQKCn07CgoKZW51bQp7CiAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1JFQURF
Ul9OUCwKICBQVEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05QLAogIFBUSFJFQURfUldMT0NL
X0RFRkFVTFRfTlAgPSBQVEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05QCn07CgoKCgoKCnN0
cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlcgp7CiAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQg
Kik7CiAgdm9pZCAqX19hcmc7CiAgaW50IF9fY2FuY2VsdHlwZTsKICBzdHJ1Y3QgX3B0aHJlYWRf
Y2xlYW51cF9idWZmZXIgKl9fcHJldjsKfTsKCgoKZW51bQp7CiAgUFRIUkVBRF9DQU5DRUxfRU5B
QkxFLAoKICBQVEhSRUFEX0NBTkNFTF9ESVNBQkxFCgp9OwplbnVtCnsKICBQVEhSRUFEX0NBTkNF
TF9ERUZFUlJFRCwKCiAgUFRIUkVBRF9DQU5DRUxfQVNZTkNIUk9OT1VTCgp9OwojIDE0MCAiL3Vz
ci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfY3JlYXRlIChwdGhyZWFk
X3QgKl9fdGhyZWFkLCBjb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCB2b2lkICooKl9fc3Rh
cnRfcm91dGluZSkgKHZvaWQgKiksIHZvaWQgKl9fYXJnKTsKCgoKCgpleHRlcm4gcHRocmVhZF90
IHB0aHJlYWRfc2VsZiAodm9pZCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2VxdWFsIChwdGhyZWFk
X3QgX190aHJlYWQxLCBwdGhyZWFkX3QgX190aHJlYWQyKTsKCgpleHRlcm4gdm9pZCBwdGhyZWFk
X2V4aXQgKHZvaWQgKl9fcmV0dmFsKSA7CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfam9pbiAocHRo
cmVhZF90IF9fdGgsIHZvaWQgKipfX3RocmVhZF9yZXR1cm4pOwoKCgoKCmV4dGVybiBpbnQgcHRo
cmVhZF9kZXRhY2ggKHB0aHJlYWRfdCBfX3RoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9h
dHRyX2luaXQgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9h
dHRyX2Rlc3Ryb3kgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpOwoKCmV4dGVybiBpbnQgcHRocmVh
ZF9hdHRyX3NldGRldGFjaHN0YXRlIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgX19kZXRh
Y2hzdGF0ZSk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGRldGFjaHN0YXRlIChjb25z
dCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgKl9fZGV0YWNoc3RhdGUpOwoKCgpleHRlcm4g
aW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBhcmFtIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBj
b25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pOwoKCgpleHRlcm4gaW50IHB0aHJlYWRf
YXR0cl9nZXRzY2hlZHBhcmFtIChjb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBzdHJ1Y3Qg
c2NoZWRfcGFyYW0gKl9fcGFyYW0pOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hl
ZHBvbGljeSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9fcG9saWN5KTsKCgoKZXh0ZXJu
IGludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwb2xpY3kgKGNvbnN0IHB0aHJlYWRfYXR0cl90ICpf
X2F0dHIsIGludCAqX19wb2xpY3kpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRpbmhl
cml0c2NoZWQgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIGludCBfX2luaGVyaXQpOwoKCgpleHRl
cm4gaW50IHB0aHJlYWRfYXR0cl9nZXRpbmhlcml0c2NoZWQgKGNvbnN0IHB0aHJlYWRfYXR0cl90
ICpfX2F0dHIsIGludCAqX19pbmhlcml0KTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0
c2NvcGUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIGludCBfX3Njb3BlKTsKCgpleHRlcm4gaW50
IHB0aHJlYWRfYXR0cl9nZXRzY29wZSAoY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50
ICpfX3Njb3BlKTsKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGd1YXJkc2l6ZSAocHRo
cmVhZF9hdHRyX3QgKl9fYXR0ciwgc2l6ZV90IF9fZ3VhcmRzaXplKTsKCgoKZXh0ZXJuIGludCBw
dGhyZWFkX2F0dHJfZ2V0Z3VhcmRzaXplIChjb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBz
aXplX3QgKl9fZ3VhcmRzaXplKTsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0
YWNrYWRkciAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgdm9pZCAqX19zdGFja2FkZHIpOwoKCgpl
eHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja2FkZHIgKGNvbnN0IHB0aHJlYWRfYXR0cl90
ICpfX2F0dHIsIHZvaWQgKipfX3N0YWNrYWRkcik7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0
dHJfc2V0c3RhY2tzaXplIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBzaXplX3QgX19zdGFja3Np
emUpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja3NpemUgKGNvbnN0IHB0aHJl
YWRfYXR0cl90ICpfX2F0dHIsIHNpemVfdCAqX19zdGFja3NpemUpOwoKCgoKCgpleHRlcm4gaW50
IHB0aHJlYWRfc2V0c2NoZWRwYXJhbSAocHRocmVhZF90IF9fdGFyZ2V0X3RocmVhZCwgaW50IF9f
cG9saWN5LCBjb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pOwoKCgpleHRlcm4gaW50
IHB0aHJlYWRfZ2V0c2NoZWRwYXJhbSAocHRocmVhZF90IF9fdGFyZ2V0X3RocmVhZCwgaW50ICpf
X3BvbGljeSwgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKTsKCgoKCgpleHRlcm4gaW50IHB0
aHJlYWRfZ2V0Y29uY3VycmVuY3kgKHZvaWQpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRjb25j
dXJyZW5jeSAoaW50IF9fbGV2ZWwpOwoKCgoKCgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleF9p
bml0IChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgsIGNvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3Qg
Kl9fbXV0ZXhfYXR0cik7CgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfaW5pdCAocHRocmVhZF9t
dXRleF90ICpfX211dGV4LCBjb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICpfX211dGV4X2F0dHIp
OwoKCgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleF9kZXN0cm95IChwdGhyZWFkX211dGV4X3Qg
Kl9fbXV0ZXgpOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfZGVzdHJveSAocHRocmVhZF9tdXRl
eF90ICpfX211dGV4KTsKCgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleF90cnlsb2NrIChwdGhy
ZWFkX211dGV4X3QgKl9fbXV0ZXgpOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAo
cHRocmVhZF9tdXRleF90ICpfX211dGV4KTsKCgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleF9s
b2NrIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhf
bG9jayAocHRocmVhZF9tdXRleF90ICpfX211dGV4KTsKCgpleHRlcm4gaW50IF9fcHRocmVhZF9t
dXRleF91bmxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCk7CmV4dGVybiBpbnQgcHRocmVh
ZF9tdXRleF91bmxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCk7CgoKCgoKCmV4dGVybiBp
bnQgX19wdGhyZWFkX211dGV4YXR0cl9pbml0IChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIp
OwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQgKHB0aHJlYWRfbXV0ZXhhdHRyX3Qg
Kl9fYXR0cik7CgoKZXh0ZXJuIGludCBfX3B0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kgKHB0aHJl
YWRfbXV0ZXhhdHRyX3QgKl9fYXR0cik7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZGVz
dHJveSAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyKTsKCgoKCgpleHRlcm4gaW50IF9fcHRo
cmVhZF9tdXRleGF0dHJfc2V0dHlwZSAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyLCBpbnQg
X19raW5kKTsKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSAocHRocmVhZF9t
dXRleGF0dHJfdCAqX19hdHRyLCBpbnQgX19raW5kKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX211
dGV4YXR0cl9nZXR0eXBlIChjb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIsIGludCAq
X19raW5kKTsKIyAzMjIgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhy
ZWFkX2NvbmRfaW5pdCAocHRocmVhZF9jb25kX3QgKl9fY29uZCwgY29uc3QgcHRocmVhZF9jb25k
YXR0cl90ICpfX2NvbmRfYXR0cik7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2Rlc3Ryb3kg
KHB0aHJlYWRfY29uZF90ICpfX2NvbmQpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3NpZ25h
bCAocHRocmVhZF9jb25kX3QgKl9fY29uZCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfYnJv
YWRjYXN0IChwdGhyZWFkX2NvbmRfdCAqX19jb25kKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2Nv
bmRfd2FpdCAocHRocmVhZF9jb25kX3QgKl9fY29uZCwgcHRocmVhZF9tdXRleF90ICpfX211dGV4
KTsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfdGltZWR3YWl0IChwdGhyZWFkX2NvbmRf
dCAqX19jb25kLCBwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgsIGNvbnN0IHN0cnVjdCB0aW1lc3Bl
YyAqX19hYnN0aW1lKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2luaXQgKHB0
aHJlYWRfY29uZGF0dHJfdCAqX19hdHRyKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJf
ZGVzdHJveSAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIpOwoKCgoKCgoKZXh0ZXJuIGludCBw
dGhyZWFkX3J3bG9ja19pbml0IChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaywgY29uc3QgcHRo
cmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0cik7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tf
ZGVzdHJveSAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spOwoKCmV4dGVybiBpbnQgcHRocmVh
ZF9yd2xvY2tfcmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jayk7CgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX3J3bG9ja190cnlyZGxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKTsK
CgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3dybG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19y
d2xvY2spOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdHJ5d3Jsb2NrIChwdGhyZWFkX3J3
bG9ja190ICpfX3J3bG9jayk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja191bmxvY2sgKHB0
aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2Nr
YXR0cl9pbml0IChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyKTsKCgpleHRlcm4gaW50IHB0
aHJlYWRfcndsb2NrYXR0cl9kZXN0cm95IChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyKTsK
CgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9nZXRwc2hhcmVkIChjb25zdCBwdGhyZWFk
X3J3bG9ja2F0dHJfdCAqX19hdHRyLCBpbnQgKl9fcHNoYXJlZCk7CgoKCgpleHRlcm4gaW50IHB0
aHJlYWRfcndsb2NrYXR0cl9zZXRwc2hhcmVkIChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRy
LCBpbnQgX19wc2hhcmVkKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZ2V0a2lu
ZF9ucCAoY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwgaW50ICpfX3ByZWYpOwoK
CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfc2V0a2luZF9ucCAocHRocmVhZF9yd2xv
Y2thdHRyX3QgKl9fYXR0ciwgaW50IF9fcHJlZik7CiMgNDE5ICIvdXNyL2luY2x1ZGUvcHRocmVh
ZC5oIiAzCmV4dGVybiBpbnQgX19wdGhyZWFkX2tleV9jcmVhdGUgKHB0aHJlYWRfa2V5X3QgKl9f
a2V5LCB2b2lkICgqX19kZXN0cl9mdW5jdGlvbikgKHZvaWQgKikpOwoKZXh0ZXJuIGludCBwdGhy
ZWFkX2tleV9jcmVhdGUgKHB0aHJlYWRfa2V5X3QgKl9fa2V5LCB2b2lkICgqX19kZXN0cl9mdW5j
dGlvbikgKHZvaWQgKikpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2RlbGV0ZSAocHRocmVh
ZF9rZXlfdCBfX2tleSk7CgoKZXh0ZXJuIGludCBfX3B0aHJlYWRfc2V0c3BlY2lmaWMgKHB0aHJl
YWRfa2V5X3QgX19rZXksIGNvbnN0IHZvaWQgKl9fcG9pbnRlcik7CgpleHRlcm4gaW50IHB0aHJl
YWRfc2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19rZXksIGNvbnN0IHZvaWQgKl9fcG9pbnRl
cik7CgoKCmV4dGVybiB2b2lkICpfX3B0aHJlYWRfZ2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3Qg
X19rZXkpOwpleHRlcm4gdm9pZCAqcHRocmVhZF9nZXRzcGVjaWZpYyAocHRocmVhZF9rZXlfdCBf
X2tleSk7CiMgNDQ0ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgX19wdGhy
ZWFkX29uY2UgKHB0aHJlYWRfb25jZV90ICpfX29uY2VfY29udHJvbCwgdm9pZCAoKl9faW5pdF9y
b3V0aW5lKSAodm9pZCkpOwoKZXh0ZXJuIGludCBwdGhyZWFkX29uY2UgKHB0aHJlYWRfb25jZV90
ICpfX29uY2VfY29udHJvbCwgdm9pZCAoKl9faW5pdF9yb3V0aW5lKSAodm9pZCkpOwoKCgoKCgoK
ZXh0ZXJuIGludCBwdGhyZWFkX3NldGNhbmNlbHN0YXRlIChpbnQgX19zdGF0ZSwgaW50ICpfX29s
ZHN0YXRlKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNhbmNlbHR5cGUgKGludCBfX3R5cGUs
IGludCAqX19vbGR0eXBlKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY2FuY2VsIChwdGhyZWFkX3Qg
X190aHJlYWQpOwoKCgoKZXh0ZXJuIHZvaWQgcHRocmVhZF90ZXN0Y2FuY2VsICh2b2lkKTsKIyA0
ODAgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51
cF9wdXNoIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fYnVmZmVyLCB2b2lkICgq
X19yb3V0aW5lKSAodm9pZCAqKSwgdm9pZCAqX19hcmcpOwojIDQ5MCAiL3Vzci9pbmNsdWRlL3B0
aHJlYWQuaCIgMwpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3BvcCAoc3RydWN0IF9wdGhy
ZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwgaW50IF9fZXhlY3V0ZSk7CiMgNTAxICIvdXNy
L2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcHVzaF9k
ZWZlciAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwgdm9pZCAoKl9f
cm91dGluZSkgKHZvaWQgKiksIHZvaWQgKl9fYXJnKTsKIyA1MTIgIi91c3IvaW5jbHVkZS9wdGhy
ZWFkLmgiIDMKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3BfcmVzdG9yZSAoc3RydWN0
IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwgaW50IF9fZXhlY3V0ZSk7CgoKCgoj
IDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3RocmVhZC5oIiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRl
L2JpdHMvc2lndGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX3NpZ21hc2sgKGludCBfX2hv
dywgY29uc3QgX19zaWdzZXRfdCAqX19uZXdtYXNrLCBfX3NpZ3NldF90ICpfX29sZG1hc2spOwoK
CgpleHRlcm4gaW50IHB0aHJlYWRfa2lsbCAocHRocmVhZF90IF9fdGhyZWFkLCBpbnQgX19zaWdu
byk7CiMgNTE4ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKIyA1MzMgIi91c3IvaW5jbHVk
ZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBfX3B0aHJlYWRfYXRmb3JrICh2b2lkICgqX19wcmVw
YXJlKSAodm9pZCksIHZvaWQgKCpfX3BhcmVudCkgKHZvaWQpLCB2b2lkICgqX19jaGlsZCkgKHZv
aWQpKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXRmb3JrICh2b2lkICgqX19wcmVwYXJlKSAodm9p
ZCksIHZvaWQgKCpfX3BhcmVudCkgKHZvaWQpLCB2b2lkICgqX19jaGlsZCkgKHZvaWQpKTsKCgoK
CgoKZXh0ZXJuIHZvaWQgcHRocmVhZF9raWxsX290aGVyX3RocmVhZHNfbnAgKHZvaWQpOwoKCgpl
eHRlcm4gdm9pZCBfX3B0aHJlYWRfaW5pdGlhbGl6ZSAodm9pZCk7Cgp9CiMgMzQgInNlaG1hbi5o
IiAyCiMgNDQgInNlaG1hbi5oIgpjbGFzcyBzRXZlbnRNYW5hZ2VyCgoKCnsKcHJpdmF0ZToKCgog
ICAgICAgIHN0YXRpYyBwdGhyZWFkX211dGV4X3QgbXV0ZXhOb3RpZnlFdmVudDsKCiAgICAgICAg
c3RhdGljIHB0aHJlYWRfY29uZF90IGNvbmROb3RpZnlFdmVudDsKCiAgICAgICAgc3RhdGljIGlu
dCBpRXZlbnRDb3VudGVyOwoKCgogICAgICAgIHNFdmVudFF1ZXVlIHF1ZXVlOwoKICAgICAgICBz
RXZlbnRIYW5kbGVyIGhhbmRsZXJfbGlzdDsKCnB1YmxpYzoKIyA3NCAic2VobWFuLmgiCiAgICAg
ICAgfnNFdmVudE1hbmFnZXIgKCk7CgoKCiAgICAgICAgdm9pZCBTZXRFdmVudCAoc0V2ZW50ICog
ZXZlbnQpOwoKCiAgICAgICAgdm9pZCBBZGRIYW5kbGVyIChzRXZlbnRIYW5kbGVyICogcEhhbik7
CgogICAgICAgIHNFdmVudEhhbmRsZXIgKiBGaW5kSGFuZGxlciAoaW50IGlkKTsKCgoKICAgICAg
ICBzdGF0aWMgdm9pZCBXYWl0Rm9yRXZlbnRzICh2b2lkKTsKCgogICAgICAgIGludCBFeGVjdXRl
RXZlbnRzICh2b2lkKTsKCgpwcm90ZWN0ZWQ6CgoKCgp9OwoKCgoKCmNsYXNzIHNFdmVudEV4Y2Vw
dGlvbiA6IHB1YmxpYyBzRXhjZXB0aW9uCnsKcHVibGljOgoKICAgICAgICBpbnQgZWhpZDsKCiAg
ICAgICAgc1N0cmluZyBzdHJFcnI7CgogICAgICAgIHNFdmVudEV4Y2VwdGlvbiAoaW50IGVpZCwg
Y29uc3Qgc1N0cmluZyAmIHN0cmVycikKICAgICAgICB7IGVoaWQgPSBlaWQ7IHN0ckVyciA9IHN0
cmVycjsgfQoKICAgICAgICB2aXJ0dWFsIHZvaWQgR2V0U3RyaW5nIChzU3RyaW5nICYgc3RyKSBj
b25zdDsKfTsKIyAyNiAic3RpbWVyLmgiIDIKIyAxICJzaGFuZGxlci5oIiAxCiMgMjcgInN0aW1l
ci5oIiAyCiMgMSAic3RpbWUuaCIgMQojIDM5ICJzdGltZS5oIgojIDEgInNzdHJpbmcuaCIgMQoj
IDQwICJzdGltZS5oIiAyCgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDQyICJzdGlt
ZS5oIiAyCgpjbGFzcyBzRGF0ZQp7CnByb3RlY3RlZDoKICAgICAgICBsb25nIGxpbGlhbjsKCnB1
YmxpYzoKICAgICAgICBzdGF0aWMgc1VTdHJpbmcgdXN0ckRhdGVbMl07CiAgICAgICAgc3RhdGlj
IHNVU3RyaW5nIHVzdHJUaW1lWzJdOwogICAgICAgIHN0YXRpYyBzVVN0cmluZyB1c3RyRGF0ZVRp
bWVbMl07CgogICAgICAgIHN0YXRpYyBzVVN0cmluZyB1c3RyTG9uZ0RheVs3XSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzdHJTaG9ydERheVs3XTsKICAgICAgICBz
dGF0aWMgc1VTdHJpbmcgdXN0ckxvbmdNb250aFsxMl0sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1c3RyU2hvcnRNb250aFsxMl07CgogICAgICAgIHN0YXRpYyBzVVN0
cmluZyB1c3RyQU1QTVsyXTsKCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgaXNsZWFweWVh
ciAoaW50IHllYXIpOwogICAgICAgIHN0YXRpYyB2b2lkIGdldHllYXJkYXlmcm9tbGlsaWFuIChj
b25zdCBsb25nIGxpbCwgaW50ICYgZGF5b2Z5ZWFyLCBpbnQgJiB5ZWFyKTsKICAgICAgICBzdGF0
aWMgdW5zaWduZWQgY2hhciBnZXRsaWxpYW5mcm9teWVhcmRheSAobG9uZyAmIGxpbCwgY29uc3Qg
aW50IGRheW9meWVhciwgY29uc3QgaW50IHllYXIpOwogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBj
aGFyIGdldG1vbnRoZGF5ZnJvbXllYXJkYXkgKGNvbnN0IGludCB5ZWFyZGF5LCBjb25zdCBpbnQg
eWVhciwgaW50ICYgbW9udGgsIGludCAmIGRheSk7CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGNo
YXIgZ2V0eWVhcmRheWZyb21tb250aGRheSAoaW50ICYgeWVhcmRheSwgY29uc3QgaW50IHllYXIs
IGNvbnN0IGludCBtb250aCwgY29uc3QgaW50IGRheSk7CiAgICAgICAgc3RhdGljIHZvaWQgZ2V0
ZGF5b2Z3ZWVrZnJvbWxpbGlhbiAoY29uc3QgbG9uZyBsaWwsIGludCAmIGRheW9md2Vlayk7Cgog
ICAgICAgIHN0YXRpYyB2b2lkIGdldHRpbWVzdHJpbmcgKHNVU3RyaW5nICYgdXN0ciwgY29uc3Qg
c1VTdHJpbmcgJiB1Zm9ybWF0LCBsb25nIGxpbGlhbiwgbG9uZyB0aW1lb2ZkYXkgPSAwKTsKICAg
ICAgICBzdGF0aWMgdm9pZCBnZXR0aW1lbWFzayAoc1VTdHJpbmcgJiB1c3RyTWFzaywgY29uc3Qg
c1VTdHJpbmcgJiBmb3JtYXQpOwogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHNldHRpbWVz
dHJpbmcgKGNvbnN0IHNVU3RyaW5nICYgdXN0ciwgY29uc3Qgc1VTdHJpbmcgJiB1Zm9ybWF0LCBs
b25nICYgbGlsaWFuLCBsb25nICYgdGltZW9mZGF5KTsKICAgICAgICBzdGF0aWMgdW5zaWduZWQg
Y2hhciBzZXR0aW1lc3RyaW5nIChzVVN0cmluZzo6Y29uc3RfaXRlcmF0b3IgJiBpdHMsIGNvbnN0
IHNVU3RyaW5nICYgdWZvcm1hdCwgbG9uZyAmIGxpbGlhbiwgbG9uZyAmIHRpbWVvZmRheSk7Cgog
ICAgICAgIHN0YXRpYyB2b2lkIG5vcm1hbGl6ZSAobG9uZyAmIGxpbGlhbiwgbG9uZyAmIHRpbWVv
ZmRheSk7CgogICAgICAgIGVudW0gewogICAgICAgICAgICAgICAgVElNRV9GT1JNQVRfSEFTX0RB
VEUgPSAxLAogICAgICAgICAgICAgICAgVElNRV9GT1JNQVRfSEFTXzEyX0hPVVIgPSAyCiAgICAg
ICAgfTsKCiAgICAgICAgc3RhdGljIHZvaWQgRXhwYW5kVGltZUZvcm1hdCAoY29uc3Qgc1VTdHJp
bmcgJiB1c3RyRm9ybWF0LCBzVVN0cmluZyAmIHVzdHJFeHBhbmRlZEZvcm1hdCwgaW50ICYgZmxh
Z3MpOwoKICAgICAgICB1bnNpZ25lZCBjaGFyIGlzbGVhcHllYXIgKHZvaWQpIGNvbnN0OwoKICAg
ICAgICBzRGF0ZSAoKTsKICAgICAgICBzRGF0ZSAoaW50IHllYXIsIGludCBtb250aCwgaW50IGRh
eSk7CiAgICAgICAgc0RhdGUgKGNvbnN0IHNTdHJpbmcgJiBzdHIpOwogICAgICAgIHNEYXRlIChs
b25nIGxpbCkgeyBsaWxpYW4gPSBsaWw7IH0KICAgICAgICBzRGF0ZSAoY29uc3Qgc0RhdGUgJiBk
YXQpIHsgbGlsaWFuID0gZGF0LmxpbGlhbjsgfQogICAgICAgIHNEYXRlIChpbnQgeWVhciwgaW50
IHdlZWspOwoKICAgICAgICB1bnNpZ25lZCBjaGFyIFNldERhdGUgKGludCB5ZWFyLCBpbnQgbW9u
dGgsIGludCBkYXkpOwogICAgICAgIHZvaWQgR2V0RGF0ZSAoaW50ICYgeWVhciwgaW50ICYgbW9u
dGgsIGludCAmIGRheSkgY29uc3Q7CgogICAgICAgIGludCBHZXREYXlPZldlZWsgKHZvaWQpIGNv
bnN0OwogICAgICAgIGludCBHZXREYXlPZlllYXIgKHZvaWQpIGNvbnN0OwoKICAgICAgICBzU3Ry
aW5nIEdldERhdGVTdHJpbmcgKHZvaWQpIGNvbnN0OwogICAgICAgIHVuc2lnbmVkIGNoYXIgU2V0
RGF0ZVN0cmluZyAoY29uc3Qgc1N0cmluZyAmIHN0cik7CgogICAgICAgIGxvbmcgR2V0TGlsaWFu
RGF5ICh2b2lkKSBjb25zdDsKICAgICAgICB1bnNpZ25lZCBjaGFyIFNldExpbGlhbkRheSAobG9u
ZyBsaWwpOwoKICAgICAgICB2b2lkIEFkZERheXMgKGxvbmcgZGF5X29mZnNldCk7CiAgICAgICAg
dm9pZCBBZGRNb250aHMgKGxvbmcgbW9udGhfb2Zmc2V0KTsKICAgICAgICB2b2lkIEFkZFllYXJz
IChsb25nIHllYXJfb2Zmc2V0KTsKCiAgICAgICAgbG9uZyBEaWZmRGF5cyAoY29uc3Qgc0RhdGUg
JiBzdWJfZGF0ZSkgY29uc3Q7CgogICAgICAgIHZpcnR1YWwgc1VTdHJpbmcgJiBGb3JtYXQgKHNV
U3RyaW5nICYgdXN0ciwgY29uc3Qgc1VTdHJpbmcgJiB1Zm9ybWF0KSBjb25zdDsKICAgICAgICB2
aXJ0dWFsIHVuc2lnbmVkIGNoYXIgU2NhbiAoY29uc3Qgc1VTdHJpbmcgJiB1c3RyLCBjb25zdCBz
VVN0cmluZyAmIHVmb3JtYXQpOwoKICAgICAgICBpbnQgb3BlcmF0b3I9PSAoY29uc3Qgc0RhdGUg
JiBkYXQpIGNvbnN0IHsgcmV0dXJuIChsaWxpYW4gPT0gZGF0LmxpbGlhbik7IH0KICAgICAgICBp
bnQgb3BlcmF0b3IhPSAoY29uc3Qgc0RhdGUgJiBkYXQpIGNvbnN0IHsgcmV0dXJuIChsaWxpYW4g
IT0gZGF0LmxpbGlhbik7IH0KICAgICAgICBpbnQgb3BlcmF0b3I8IChjb25zdCBzRGF0ZSAmIGRh
dCkgY29uc3QgeyByZXR1cm4gKGxpbGlhbiA8IGRhdC5saWxpYW4pOyB9CiAgICAgICAgaW50IG9w
ZXJhdG9yPiAoY29uc3Qgc0RhdGUgJiBkYXQpIGNvbnN0IHsgcmV0dXJuIChsaWxpYW4gPiBkYXQu
bGlsaWFuKTsgfQoKICAgICAgICBzRGF0ZSAmIG9wZXJhdG9yPSAoY29uc3Qgc0RhdGUgJiBkYXQp
IHsgbGlsaWFuID0gZGF0LmxpbGlhbjsgcmV0dXJuICp0aGlzOyB9CgogICAgICAgIGludCBTYXZl
IChvc3RyZWFtICYgbykgY29uc3QKICAgICAgICB7IG8ud3JpdGUgKChjaGFyICopJmxpbGlhbiwg
c2l6ZW9mIChsaWxpYW4pKTsKICAgICAgICAgICAgICAgIHJldHVybiAoKHZvaWQqKW8pICE9IDA7
IH0KCiAgICAgICAgaW50IExvYWQgKGlzdHJlYW0gJiBpKQogICAgICAgIHsgbG9uZyBsOwogICAg
ICAgICAgICAgICAgaS5yZWFkICgoY2hhciAqKSZsLCBzaXplb2YgKGwpKTsgaWYgKCFpKSByZXR1
cm4gMDsKICAgICAgICAgICAgICAgIGxpbGlhbiA9IGw7CiAgICAgICAgICAgICAgICByZXR1cm4g
ITA7IH0KCn07CgoKCgoKY2xhc3Mgc1RpbWUgOiBwdWJsaWMgc0RhdGUKewpwcm90ZWN0ZWQ6CiAg
ICAgICAgbG9uZyB0aW1lb2ZkYXk7CgpwdWJsaWM6CiAgICAgICAgc1RpbWUgKCk7CiAgICAgICAg
c1RpbWUgKGludCBob3VyLCBpbnQgbWludXRlLCBpbnQgc2Vjb25kcyA9IDApOwogICAgICAgIHNU
aW1lIChjb25zdCBzU3RyaW5nICYgc3RyKTsKICAgICAgICBzVGltZSAoY29uc3QgdGltZV90ICYg
dCk7CiAgICAgICAgc1RpbWUgKGNvbnN0IHNUaW1lICYgdGltKSB7IGxpbGlhbiA9IHRpbS5saWxp
YW47IHRpbWVvZmRheSA9IHRpbS50aW1lb2ZkYXk7IH0KCiAgICAgICAgdW5zaWduZWQgY2hhciBT
ZXRUaW1lIChpbnQgaG91ciwgaW50IG1pbnV0ZSwgaW50IHNlY29uZHMgPSAwKTsKICAgICAgICB1
bnNpZ25lZCBjaGFyIFNldFRpbWUgKGNvbnN0IHRpbWVfdCAmIHQpOwoKICAgICAgICB2b2lkIEdl
dFRpbWUgKGludCAmIGhvdXIsIGludCAmIG1pbnV0ZSwgaW50ICYgc2Vjb25kcykgY29uc3Q7Cgog
ICAgICAgIHNTdHJpbmcgR2V0VGltZVN0cmluZyAodm9pZCkgY29uc3Q7CiAgICAgICAgdW5zaWdu
ZWQgY2hhciBTZXRUaW1lU3RyaW5nIChjb25zdCBzU3RyaW5nICYgc3RyKTsKCiAgICAgICAgc1N0
cmluZyBHZXRTdHJpbmcgKHZvaWQpIGNvbnN0OwogICAgICAgIHVuc2lnbmVkIGNoYXIgU2V0U3Ry
aW5nIChjb25zdCBzU3RyaW5nICYgc3RyKTsKCiAgICAgICAgbG9uZyBHZXRTZWNvbmRzT2ZEYXkg
KHZvaWQpIGNvbnN0OwoKICAgICAgICB2b2lkIEFkZFNlY29uZHMgKGxvbmcgc2Vjb25kX29mZnNl
dCk7CiAgICAgICAgbG9uZyBEaWZmU2Vjb25kcyAoY29uc3Qgc1RpbWUgJiBzdWJfZGF0ZSkgY29u
c3Q7CgogICAgICAgIHN0YXRpYyBzVGltZSBHZXRDdXJyZW50VGltZSAodm9pZCk7CiAgICAgICAg
dm9pZCBTZXRDdXJyZW50VGltZSAodm9pZCkgY29uc3Q7CgogICAgICAgIHZvaWQgTm9ybWFsaXpl
ICh2b2lkKSB7IG5vcm1hbGl6ZSAobGlsaWFuLCB0aW1lb2ZkYXkpOyB9CgogICAgICAgIHZpcnR1
YWwgc1VTdHJpbmcgJiBGb3JtYXQgKHNVU3RyaW5nICYgdXN0ciwgY29uc3Qgc1VTdHJpbmcgJiB1
Zm9ybWF0KSBjb25zdDsKICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGNoYXIgU2NhbiAoY29uc3Qg
c1VTdHJpbmcgJiB1c3RyLCBjb25zdCBzVVN0cmluZyAmIHVmb3JtYXQpOwoKICAgICAgICBpbnQg
b3BlcmF0b3I9PSAoY29uc3Qgc1RpbWUgJiB0aW0pIGNvbnN0CiAgICAgICAgICAgICAgICB7IHJl
dHVybiAobGlsaWFuID09IHRpbS5saWxpYW4pICYmICh0aW1lb2ZkYXkgPT0gdGltLnRpbWVvZmRh
eSk7IH0KICAgICAgICBpbnQgb3BlcmF0b3IhPSAoY29uc3Qgc1RpbWUgJiB0aW0pIGNvbnN0CiAg
ICAgICAgICAgICAgICB7IHJldHVybiAobGlsaWFuICE9IHRpbS5saWxpYW4pIHx8ICh0aW1lb2Zk
YXkgIT0gdGltLnRpbWVvZmRheSk7IH0KICAgICAgICBpbnQgb3BlcmF0b3I8IChjb25zdCBzVGlt
ZSAmIHRpbSkgY29uc3QKICAgICAgICB7IGlmIChsaWxpYW4gPT0gdGltLmxpbGlhbikgcmV0dXJu
ICh0aW1lb2ZkYXkgPCB0aW0udGltZW9mZGF5KTsKICAgICAgICAgICAgICAgIHJldHVybiAobGls
aWFuIDwgdGltLmxpbGlhbik7IH0KICAgICAgICBpbnQgb3BlcmF0b3I+IChjb25zdCBzVGltZSAm
IHRpbSkgY29uc3QKICAgICAgICB7IGlmIChsaWxpYW4gPT0gdGltLmxpbGlhbikgcmV0dXJuICh0
aW1lb2ZkYXkgPiB0aW0udGltZW9mZGF5KTsKICAgICAgICAgICAgICAgIHJldHVybiAobGlsaWFu
ID4gdGltLmxpbGlhbik7IH0KCiAgICAgICAgc1RpbWUgJiBvcGVyYXRvcj0gKGNvbnN0IHNUaW1l
ICYgdGltKQogICAgICAgICAgICAgICAgeyBsaWxpYW4gPSB0aW0ubGlsaWFuOyB0aW1lb2ZkYXkg
PSB0aW0udGltZW9mZGF5OyByZXR1cm4gKnRoaXM7IH0KCiAgICAgICAgaW50IFNhdmUgKG9zdHJl
YW0gJiBvKSBjb25zdAogICAgICAgIHsgaWYgKCFzRGF0ZTo6U2F2ZSAobykpIHJldHVybiAwOwog
ICAgICAgICAgICAgICAgby53cml0ZSAoKGNoYXIgKikmdGltZW9mZGF5LCBzaXplb2YgKGxpbGlh
bikpOwogICAgICAgICAgICAgICAgcmV0dXJuICgodm9pZCopbykgIT0gMDsgfQoKICAgICAgICBp
bnQgTG9hZCAoaXN0cmVhbSAmIGkpCiAgICAgICAgeyBpZiAoIXNEYXRlOjpMb2FkIChpKSkgcmV0
dXJuIDA7CiAgICAgICAgICAgICAgICBsb25nIGw7CiAgICAgICAgICAgICAgICBpLnJlYWQgKChj
aGFyICopJmwsIHNpemVvZiAobCkpOyBpZiAoIWkpIHJldHVybiAwOwogICAgICAgICAgICAgICAg
dGltZW9mZGF5ID0gbDsKICAgICAgICAgICAgICAgIHJldHVybiAhMDsgfQp9OwojIDI4ICJzdGlt
ZXIuaCIgMgoKY2xhc3Mgc1RpbWVyOwpjbGFzcyBzVGltZXJIYW5kbGVyOwoKdHlwZWRlZiB2b2lk
ICgqIFRJTUVSX0NCKSAoY29uc3Qgc1RpbWVyICogdGltKTsKCgoKCgpjbGFzcyBzVGltZXIgOiBw
dWJsaWMgc1ByaW9yaXR5TGlzdAp7CgpmcmllbmQgY2xhc3Mgc1RpbWVyQ2FsbGJhY2tFdmVudDsK
CmZyaWVuZCBjbGFzcyBzVGltZXJIYW5kbGVyOwoKcHJvdGVjdGVkOgoKICAgICAgICBUSU1FUl9D
QiB0Y2I7CgpwdWJsaWM6CgogICAgICAgIHNUaW1lIHN0b3BfdGltZTsKCiAgICAgICAgc1RpbWVy
ICgpOwogICAgICAgIHNUaW1lciAoaW50IHRpZCwgY29uc3Qgc1RpbWUgJiB0Z3RfdGltZSwgVElN
RVJfQ0IgY2IpOwp9OwoKCgoKCmNsYXNzIHNUaW1lckV2ZW50IDogcHVibGljIHNFdmVudAp7CnB1
YmxpYzoKCiAgICAgICAgc1RpbWVyICogcHRpbWVyOwoKICAgICAgICB2aXJ0dWFsIHNFdmVudFR5
cGUgR2V0VHlwZSAodm9pZCkgY29uc3Q7CgogICAgICAgIHNUaW1lckV2ZW50IChzVGltZXIgKiBw
dCA9IDApOwogICAgICAgIHZpcnR1YWwgfnNUaW1lckV2ZW50ICgpOwp9OwoKCgoKCmNsYXNzIHNU
aW1lckhhbmRsZXIKCgoKewpwcm90ZWN0ZWQ6CgogICAgICAgIHN0YXRpYyBpbnQgbGFzdF9pZDsK
CgoKICAgICAgICBwdGhyZWFkX211dGV4X3QgbXV0ZXhUaW1lckNoYW5nZTsKCiAgICAgICAgcHRo
cmVhZF9jb25kX3QgY29uZFRpbWVyQ2hhbmdlOwoKICAgICAgICBwdGhyZWFkX3QgdGhyZWFkVGlt
ZXI7CgoKICAgICAgICBpbnQgcnVuOwoKCiAgICAgICAgc3RhdGljIHZvaWQgKiBUaW1lclRocmVh
ZFMgKHZvaWQgKiBwYXJnKTsKCiAgICAgICAgdm9pZCBUaW1lclRocmVhZCAodm9pZCk7CgogICAg
ICAgIHZvaWQgTE9DSyAodm9pZCk7CiAgICAgICAgdm9pZCBVTkxPQ0sgKHZvaWQpOwogICAgICAg
IHZvaWQgTk9USUZZICh2b2lkKTsKCgoKCiAgICAgICAgc1RpbWVyIHRpbWVyX2xpc3Q7CgogICAg
ICAgIHNFdmVudE1hbmFnZXIgKiBwSGFuOwoKCiAgICAgICAgaW50IEdldE5leHRJRCAodm9pZCk7
CgpwdWJsaWM6CgoKCgoKICAgICAgICBzVGltZXJIYW5kbGVyIChzRXZlbnRNYW5hZ2VyICogcFNl
dCA9IDApOwoKICAgICAgICB+c1RpbWVySGFuZGxlciAoKTsKCgoKICAgICAgICB2b2lkIFNldEV2
ZW50TWFuYWdlciAoc0V2ZW50TWFuYWdlciAqIHBTZXQpOwoKCiAgICAgICAgaW50IENyZWF0ZVRp
bWVyIChjb25zdCBzVGltZSAmIGFic190aW1lb3V0LCBUSU1FUl9DQiBjYiA9IDApOwoKICAgICAg
ICBpbnQgQ3JlYXRlVGltZXIgKGNvbnN0IGxvbmcgcmVsX3RpbWVvdXQsIFRJTUVSX0NCIGNiID0g
MCk7CgoKICAgICAgICB2b2lkIEtpbGxUaW1lciAoaW50IHRpZCk7CgoKCgoKfTsKIyAyOCAic3lz
dGVtLmgiIDIKIyAxICJzeXNldmVudC5oIiAxCiMgMjIgInN5c2V2ZW50LmgiCiMgMSAic2V2ZW50
LmgiIDEKIyAyMyAic3lzZXZlbnQuaCIgMgojIDM2ICJzeXNldmVudC5oIgpjbGFzcyBzS2V5Ym9h
cmRFdmVudCA6IHB1YmxpYyBzRXZlbnQKewpwdWJsaWM6CiAgICAgICAgZW51bSB7IGtleV9kbiwg
a2V5X3VwIH0gdHlwZTsKICAgICAgICBzaG9ydCBzaGlmdF9zdGF0dXM7CiAgICAgICAgc2hvcnQg
a2V5OwogICAgICAgIHVuc2lnbmVkIHNob3J0IGNvZGU7CgogICAgICAgIHZpcnR1YWwgc0V2ZW50
VHlwZSBHZXRUeXBlICh2b2lkKSBjb25zdDsKfTsKCmNsYXNzIHNNb3VzZUV2ZW50IDogcHVibGlj
IHNFdmVudAp7CnB1YmxpYzoKICAgICAgICBlbnVtIHsgbWJ1dHRvbl9kbiwgbWJ1dHRvbl91cCwg
bW1vdmUgfSB0eXBlOwogICAgICAgIHNob3J0IHB4LCBweTsKCiAgICAgICAgdmlydHVhbCBzRXZl
bnRUeXBlIEdldFR5cGUgKHZvaWQpIGNvbnN0Owp9OwojIDI5ICJzeXN0ZW0uaCIgMgojIDEgInNj
b21oZGwuaCIgMQojIDI0ICJzY29taGRsLmgiCiMgMSAic2hhbmRsZXIuaCIgMQojIDI1ICJzY29t
aGRsLmgiIDIKIyAxICJzY29tLmgiIDEKIyA1MiAic2NvbS5oIgplbnVtIEZDX0VOVU0gewogICAg
ICAgIEZDX05PTkUgPSAwLAogICAgICAgIEZDX0RUUkRTUiA9IDEsCiAgICAgICAgRkNfUlRTQ1RT
ID0gMiwKICAgICAgICBGQ19YT05YT0ZGID0gNCwKICAgICAgICBGQ19TV0VDSE8gPSA4Cn07CgoK
ZW51bSBQQVJJVFlfRU5VTSB7CiAgICAgICAgTk9fUEFSSVRZID0gMCwKICAgICAgICBPRERfUEFS
SVRZID0gMSwKICAgICAgICBFVkVOX1BBUklUWSA9IDIKfTsKCgplbnVtIFNUT1BCSVRfRU5VTSB7
CiAgICAgICAgT05FX1NUT1BCSVQgPSAxLAogICAgICAgIFRXT19TVE9QQklUID0gMgp9OwojIDg5
ICJzY29tLmgiCiMgMSAic2J1ZmZlci5oIiAxCiMgMjAgInNidWZmZXIuaCIKIyAxICIvdXNyL2lu
Y2x1ZGUvcHRocmVhZC5oIiAxIDMKIyAyMSAic2J1ZmZlci5oIiAyCgoKCgoKCgpjbGFzcyBzQnVm
ZmVyCnsKcHJpdmF0ZToKICAgICAgICBwdGhyZWFkX211dGV4X3QgbXV0ZXhCdWZMb2NrOwogICAg
ICAgIHB0aHJlYWRfY29uZF90IGNvbmRCeXRlQWRkZWQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25kQnl0ZVJlbW92ZWQ7CgogICAgICAgIGludCBpU2l6ZSwKICAg
ICAgICAgICAgICAgIGlGcm9udCwKICAgICAgICAgICAgICAgIGlSZWFyOwogICAgICAgIGNoYXIg
KiBjQnVmZmVyOwoKcHVibGljOgogICAgICAgIHNCdWZmZXIgKGludCBzaXplID0gMTAyNCk7CiAg
ICAgICAgfnNCdWZmZXIgKCk7CgogICAgICAgIGludCBSZXNpemUgKGludCBzaXplKTsKCiAgICAg
ICAgdm9pZCBGbHVzaCAoKTsKCiAgICAgICAgaW50IFB1dCAoaW50IGNudCwgY29uc3QgY2hhciAq
IGJ1Zik7CiAgICAgICAgaW50IFRpbWVkUHV0IChpbnQgY250LCBjb25zdCBjaGFyICogYnVmLCB1
bnNpZ25lZCBtc2VjX3dhaXQgPSAwKTsKCiAgICAgICAgaW50IEdldCAoaW50IGNudCwgY2hhciAq
IGJ1Zik7CiAgICAgICAgaW50IFRpbWVkR2V0IChpbnQgY250LCBjaGFyICogYnVmLCB1bnNpZ25l
ZCBtc2VjX3dhaXQgPSAwKTsKCiAgICAgICAgaW50IEluUXVldWUgKHZvaWQpOwoKICAgICAgICBz
dGF0aWMgdm9pZCBNYWtlVGltZW91dCAoc3RydWN0IHRpbWVzcGVjICogdHMsIHVuc2lnbmVkIG1z
ZWNfdGltZW91dCk7Cn07CiMgOTAgInNjb20uaCIgMgojIDk4ICJzY29tLmgiCmNsYXNzIHNDb20K
ewpwcml2YXRlOgogICAgICAgIGludCBpZENvbURldjsKICAgICAgICB1bnNpZ25lZCBjaGFyIGZJ
bml0T0s7CiAgICAgICAgdW5zaWduZWQgY2hhciBiQnl0ZVNpemUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYkZsb3dDdHJsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJQYXJpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYlN0b3BCaXRzOwogICAg
ICAgIHVuc2lnbmVkIGxvbmcgZHdCYXVkUmF0ZTsKCiAgICAgICAgdW5zaWduZWQgY2hhciBiT2xk
RkM7CiAgICAgICAgcHRocmVhZF90IHRocmVhZERhdGE7CiAgICAgICAgcHRocmVhZF9tdXRleF90
IG11dGV4U3luY0xvY2s7CiAgICAgICAgcHRocmVhZF9jb25kX3QgY29uZEVjaG9SY3ZkOwogICAg
ICAgIHNCdWZmZXIgSW5idWY7CiAgICAgICAgdW5zaWduZWQgY2hhciBiRXhwZWN0ZWQ7CiAgICAg
ICAgdW5zaWduZWQgY2hhciBmSW5TZW5kOwogICAgICAgIHVuc2lnbmVkIGNoYXIgZlNlbmRFcnI7
CgogICAgICAgIHVuc2lnbmVkIGxvbmcgZHdUaW1lb3V0OwoKCgoKCgogICAgICAgICAgICAgICAg
aW50IGlhVGhyZWFkUGlwZVsyXTsKCgoKICAgICAgICBzdGF0aWMgdm9pZCAqIERhdGFUaHJlYWQg
KHZvaWQgKiBwYXJhbSk7CgoKcHVibGljOgojIDE0NiAic2NvbS5oIgogICAgICAgIHNDb20gKGNo
YXIgKiBscHN6UG9ydE5hbWUsIHVuc2lnbmVkIGxvbmcgcnhxdWV1ZSA9IDQwOTYsIHVuc2lnbmVk
IGxvbmcgdHhxdWV1ZSA9IDQwOTYpOwoKCgoKICAgICAgICB2aXJ0dWFsIH5zQ29tICgpOwoKCgoK
CgogICAgICAgIHZvaWQgZmx1c2ggKHZvaWQpOwojIDE2NyAic2NvbS5oIgogICAgICAgIGludCBn
ZXRjICh1bnNpZ25lZCBjaGFyICogYyk7CgoKCgoKICAgICAgICBpbnQgZ2V0aGFuZHNoYWtlICh2
b2lkKTsKIyAxODMgInNjb20uaCIKICAgICAgICBpbnQgZ2V0cGFyYW1zICh1bnNpZ25lZCBsb25n
ICogc3BlZWQsIHVuc2lnbmVkIGNoYXIgKiBkYml0cywgdW5zaWduZWQgY2hhciAqIHBhcml0eSwg
dW5zaWduZWQgY2hhciAqIHN0b3BiaXRzKTsKIyAxOTUgInNjb20uaCIKICAgICAgICBpbnQgZ2V0
cyAoY2hhciAqIHMsIGludCBsZW4sIHVuc2lnbmVkIGNoYXIgdGVybWNoYXIpOwogICAgICAgIGlu
dCBnZXRzIChjaGFyICogcywgaW50IGxlbik7CgoKCgoKCgogICAgICAgIGludCBwcmludGYgKGNo
YXIgKiBzLCAuLi4pOwoKCgoKCgoKICAgICAgICBpbnQgcHV0YyAodW5zaWduZWQgY2hhciBjKTsK
IyAyMjEgInNjb20uaCIKICAgICAgICBpbnQgcHV0cyAoY2hhciAqIHMsIGludCBsZW4pOwogICAg
ICAgIGludCBwdXRzIChjaGFyICogcyk7CgoKCgoKICAgICAgICBpbnQgcmVjdnBlbmRpbmcgKHZv
aWQpOwojIDIzOCAic2NvbS5oIgogICAgICAgIGludCByZWFkICh2b2lkICogYnVmZmVyLCBpbnQg
bGVuKTsKCgoKCgoKCiAgICAgICAgaW50IHNlbmRwZW5kaW5nICh2b2lkKTsKCgoKCgoKCiAgICAg
ICAgaW50IHNldGhhbmRzaGFrZSAodW5zaWduZWQgY2hhciBjdHJsKTsKIyAyNjQgInNjb20uaCIK
ICAgICAgICBpbnQgc2V0cGFyYW1zICh1bnNpZ25lZCBsb25nIHNwZWVkLCB1bnNpZ25lZCBjaGFy
IGRiaXRzLCB1bnNpZ25lZCBjaGFyIHBhcml0eSwgdW5zaWduZWQgY2hhciBzdG9wYml0cyk7CiMg
MjczICJzY29tLmgiCiAgICAgICAgaW50IHdyaXRlICh2b2lkICogYnVmZmVyLCBpbnQgbGVuKTsK
CgoKCgogICAgICAgIGludCBzZXR0aW1lb3V0KGludCB0aW1lb3V0KTsKCgoKCgoKCiAgICAgICAg
aW50IEdldEhhbmRsZSAodm9pZCkgY29uc3QgeyByZXR1cm4gaWRDb21EZXY7IH0KfTsKIyAyNiAi
c2NvbWhkbC5oIiAyCiMgMSAiaGFuZGVmLmgiIDEKIyAyNyAic2NvbWhkbC5oIiAyCgoKCmNsYXNz
IHNDb21IYW5kbGVyIDogcHVibGljIHNIYW5kbGVyLCBwdWJsaWMgc0NvbQp7CnB1YmxpYzoKICAg
ICAgICBzQ29tSGFuZGxlciAoY2hhciAqIG5hbWUsIGludCBwcmlvID0gU0hfUFJJT19DT00sIHVu
c2lnbmVkIGxvbmcgcnhxdWV1ZSA9IDQwOTYsIHVuc2lnbmVkIGxvbmcgdHhxdWV1ZSA9IDQwOTYp
OwoKICAgICAgICB2aXJ0dWFsIGludCBUZXN0ICh2b2lkKSA9IDA7Cn07CiMgMzAgInN5c3RlbS5o
IiAyCiMgMSAic2ZpbGVzLmgiIDEKIyA0MyAic2ZpbGVzLmgiCiMgMSAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9iYWNrd2FyZC9saXN0LmgiIDEgMwojIDMwICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JhY2t3YXJkL2xpc3QuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
YmFja3dhcmQvYmFja3dhcmRfd2FybmluZy5oIiAxIDMKIyAzMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iYWNrd2FyZC9saXN0LmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvYmFja3dhcmQvYWxnb2Jhc2UuaCIgMSAzCiMgMzIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvYmFja3dhcmQvbGlzdC5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jh
Y2t3YXJkL2FsbG9jLmgiIDEgMwojIDMzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JhY2t3
YXJkL2xpc3QuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9s
aXN0LmgiIDEgMwojIDMxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xpc3Qu
aCIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgi
IDEgMwojIDMzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xpc3QuaCIgMiAz
CiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAxIDMKIyAz
NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9saXN0LmgiIDIgMwojIDEgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfY29uc3RydWN0LmgiIDEgMwojIDM1ICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xpc3QuaCIgMiAzCiMgMSAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEgMwojIDM2ICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xpc3QuaCIgMiAzCiMgMSAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9saXN0LmgiIDEgMwojIDM0ICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2xpc3QuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9jb25jZXB0X2NoZWNrLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RsX2xpc3QuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCnN0cnVjdCBf
TGlzdF9ub2RlX2Jhc2UgewogIF9MaXN0X25vZGVfYmFzZSogX01fbmV4dDsKICBfTGlzdF9ub2Rl
X2Jhc2UqIF9NX3ByZXY7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX0xpc3Rfbm9k
ZSA6IHB1YmxpYyBfTGlzdF9ub2RlX2Jhc2UgewogIF9UcCBfTV9kYXRhOwp9OwoKc3RydWN0IF9M
aXN0X2l0ZXJhdG9yX2Jhc2UgewogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVm
IHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJh
dG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKCiAgX0xpc3Rfbm9kZV9iYXNlKiBfTV9ub2RlOwoK
ICBfTGlzdF9pdGVyYXRvcl9iYXNlKF9MaXN0X25vZGVfYmFzZSogX194KSA6IF9NX25vZGUoX194
KSB7fQogIF9MaXN0X2l0ZXJhdG9yX2Jhc2UoKSB7fQoKICB2b2lkIF9NX2luY3IoKSB7IF9NX25v
ZGUgPSBfTV9ub2RlLT5fTV9uZXh0OyB9CiAgdm9pZCBfTV9kZWNyKCkgeyBfTV9ub2RlID0gX01f
bm9kZS0+X01fcHJldjsgfQoKICBib29sIG9wZXJhdG9yPT0oY29uc3QgX0xpc3RfaXRlcmF0b3Jf
YmFzZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fbm9kZSA9PSBfX3guX01fbm9kZTsKICB9
CiAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9MaXN0X2l0ZXJhdG9yX2Jhc2UmIF9feCkgY29uc3Qg
ewogICAgcmV0dXJuIF9NX25vZGUgIT0gX194Ll9NX25vZGU7CiAgfQp9OwoKdGVtcGxhdGU8Y2xh
c3MgX1RwLCBjbGFzcyBfUmVmLCBjbGFzcyBfUHRyPgpzdHJ1Y3QgX0xpc3RfaXRlcmF0b3IgOiBw
dWJsaWMgX0xpc3RfaXRlcmF0b3JfYmFzZSB7CiAgdHlwZWRlZiBfTGlzdF9pdGVyYXRvcjxfVHAs
X1RwJixfVHAqPiBpdGVyYXRvcjsKICB0eXBlZGVmIF9MaXN0X2l0ZXJhdG9yPF9UcCxjb25zdCBf
VHAmLGNvbnN0IF9UcCo+IGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgX0xpc3RfaXRlcmF0b3I8
X1RwLF9SZWYsX1B0cj4gX1NlbGY7CgogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRl
ZiBfUHRyIHBvaW50ZXI7CiAgdHlwZWRlZiBfUmVmIHJlZmVyZW5jZTsKICB0eXBlZGVmIF9MaXN0
X25vZGU8X1RwPiBfTm9kZTsKCiAgX0xpc3RfaXRlcmF0b3IoX05vZGUqIF9feCkgOiBfTGlzdF9p
dGVyYXRvcl9iYXNlKF9feCkge30KICBfTGlzdF9pdGVyYXRvcigpIHt9CiAgX0xpc3RfaXRlcmF0
b3IoY29uc3QgaXRlcmF0b3ImIF9feCkgOiBfTGlzdF9pdGVyYXRvcl9iYXNlKF9feC5fTV9ub2Rl
KSB7fQoKICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKChfTm9kZSopIF9N
X25vZGUpLT5fTV9kYXRhOyB9CiAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4g
JihvcGVyYXRvciooKSk7IH0KCiAgX1NlbGYmIG9wZXJhdG9yKysoKSB7CiAgICB0aGlzLT5fTV9p
bmNyKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yKysoaW50KSB7CiAg
ICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgdGhpcy0+X01faW5jcigpOwogICAgcmV0dXJuIF9f
dG1wOwogIH0KICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsKICAgIHRoaXMtPl9NX2RlY3IoKTsKICAg
IHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3ItLShpbnQpIHsKICAgIF9TZWxmIF9f
dG1wID0gKnRoaXM7CiAgICB0aGlzLT5fTV9kZWNyKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQp9
OwojIDExOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9saXN0LmgiIDMKdGVt
cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvciwgYm9vbCBfSXNTdGF0aWM+CmNsYXNz
IF9MaXN0X2FsbG9jX2Jhc2UgewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJh
aXRzPF9UcCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICBhbGxvY2F0b3Jf
dHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX05v
ZGVfYWxsb2NhdG9yOyB9CgogIF9MaXN0X2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUm
IF9fYSkgOiBfTm9kZV9hbGxvY2F0b3IoX19hKSB7fQoKcHJvdGVjdGVkOgogIF9MaXN0X25vZGU8
X1RwPiogX01fZ2V0X25vZGUoKQogICB7IHJldHVybiBfTm9kZV9hbGxvY2F0b3IuYWxsb2NhdGUo
MSk7IH0KICB2b2lkIF9NX3B1dF9ub2RlKF9MaXN0X25vZGU8X1RwPiogX19wKQogICAgeyBfTm9k
ZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfX3AsIDEpOyB9Cgpwcm90ZWN0ZWQ6CiAgdHlwZW5hbWUg
X0FsbG9jX3RyYWl0czxfTGlzdF9ub2RlPF9UcD4sIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlw
ZQogICAgICAgICAgIF9Ob2RlX2FsbG9jYXRvcjsKICBfTGlzdF9ub2RlPF9UcD4qIF9NX25vZGU7
Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3I+CmNsYXNzIF9MaXN0
X2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2NhdG9yLCB0cnVlPiB7CnB1YmxpYzoKICB0eXBlZGVmIHR5
cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAg
ICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBj
b25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9CgogIF9MaXN0X2FsbG9jX2Jhc2UoY29u
c3QgYWxsb2NhdG9yX3R5cGUmKSB7fQoKcHJvdGVjdGVkOgogIHR5cGVkZWYgdHlwZW5hbWUgX0Fs
bG9jX3RyYWl0czxfTGlzdF9ub2RlPF9UcD4sIF9BbGxvY2F0b3I+OjpfQWxsb2NfdHlwZQogICAg
ICAgICAgX0FsbG9jX3R5cGU7CiAgX0xpc3Rfbm9kZTxfVHA+KiBfTV9nZXRfbm9kZSgpIHsgcmV0
dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZSgxKTsgfQogIHZvaWQgX01fcHV0X25vZGUoX0xpc3Rf
bm9kZTxfVHA+KiBfX3ApIHsgX0FsbG9jX3R5cGU6OmRlYWxsb2NhdGUoX19wLCAxKTsgfQoKcHJv
dGVjdGVkOgogIF9MaXN0X25vZGU8X1RwPiogX01fbm9kZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGNsYXNzIF9BbGxvYz4KY2xhc3MgX0xpc3RfYmFzZQogIDogcHVibGljIF9MaXN0X2FsbG9j
X2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJh
aXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgp7CnB1YmxpYzoKICB0eXBlZGVmIF9M
aXN0X2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9B
bGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgICAgICAgICBfQmFz
ZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlw
ZTsKCiAgX0xpc3RfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkg
ewogICAgX01fbm9kZSA9IF9NX2dldF9ub2RlKCk7CiAgICBfTV9ub2RlLT5fTV9uZXh0ID0gX01f
bm9kZTsKICAgIF9NX25vZGUtPl9NX3ByZXYgPSBfTV9ub2RlOwogIH0KICB+X0xpc3RfYmFzZSgp
IHsKICAgIGNsZWFyKCk7CiAgICBfTV9wdXRfbm9kZShfTV9ub2RlKTsKICB9CgogIHZvaWQgY2xl
YXIoKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQKX0xpc3Rf
YmFzZTxfVHAsX0FsbG9jPjo6Y2xlYXIoKQp7CiAgX0xpc3Rfbm9kZTxfVHA+KiBfX2N1ciA9IChf
TGlzdF9ub2RlPF9UcD4qKSBfTV9ub2RlLT5fTV9uZXh0OwogIHdoaWxlIChfX2N1ciAhPSBfTV9u
b2RlKSB7CiAgICBfTGlzdF9ub2RlPF9UcD4qIF9fdG1wID0gX19jdXI7CiAgICBfX2N1ciA9IChf
TGlzdF9ub2RlPF9UcD4qKSBfX2N1ci0+X01fbmV4dDsKICAgIF9EZXN0cm95KCZfX3RtcC0+X01f
ZGF0YSk7CiAgICBfTV9wdXRfbm9kZShfX3RtcCk7CiAgfQogIF9NX25vZGUtPl9NX25leHQgPSBf
TV9ub2RlOwogIF9NX25vZGUtPl9NX3ByZXYgPSBfTV9ub2RlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8X1RwPiA+CmNsYXNzIGxpc3QgOiBwcm90ZWN0
ZWQgX0xpc3RfYmFzZTxfVHAsIF9BbGxvYz4KewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICB0eXBlZGVmIF9MaXN0X2Jhc2U8X1RwLCBf
QWxsb2M+IF9CYXNlOwpwcm90ZWN0ZWQ6CiAgdHlwZWRlZiB2b2lkKiBfVm9pZF9wb2ludGVyOwoK
cHVibGljOgogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2YWx1ZV90eXBlKiBw
b2ludGVyOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsKICB0eXBl
ZGVmIHZhbHVlX3R5cGUmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUmIGNv
bnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9MaXN0X25vZGU8X1RwPiBfTm9kZTsKICB0eXBlZGVm
IHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoK
ICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsK
ICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX0Jhc2U6Omdl
dF9hbGxvY2F0b3IoKTsgfQoKcHVibGljOgogIHR5cGVkZWYgX0xpc3RfaXRlcmF0b3I8X1RwLF9U
cCYsX1RwKj4gaXRlcmF0b3I7CiAgdHlwZWRlZiBfTGlzdF9pdGVyYXRvcjxfVHAsY29uc3QgX1Rw
Jixjb25zdCBfVHAqPiBjb25zdF9pdGVyYXRvcjsKCiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9y
PGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgcmV2ZXJz
ZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCnByb3RlY3RlZDoKICB1c2lu
ZyBfQmFzZTo6X01fbm9kZTsKICB1c2luZyBfQmFzZTo6X01fcHV0X25vZGU7CiAgdXNpbmcgX0Jh
c2U6Ol9NX2dldF9ub2RlOwoKcHJvdGVjdGVkOgogIF9Ob2RlKiBfTV9jcmVhdGVfbm9kZShjb25z
dCBfVHAmIF9feCkKICB7CiAgICBfTm9kZSogX19wID0gX01fZ2V0X25vZGUoKTsKICAgIHRyeSB7
CiAgICAgIF9Db25zdHJ1Y3QoJl9fcC0+X01fZGF0YSwgX194KTsKICAgIH0KICAgIGNhdGNoKC4u
LikgeyBfTV9wdXRfbm9kZShfX3ApOyB0aHJvdzsgfTsKICAgIHJldHVybiBfX3A7CiAgfQoKICBf
Tm9kZSogX01fY3JlYXRlX25vZGUoKQogIHsKICAgIF9Ob2RlKiBfX3AgPSBfTV9nZXRfbm9kZSgp
OwogICAgdHJ5IHsKICAgICAgX0NvbnN0cnVjdCgmX19wLT5fTV9kYXRhKTsKICAgIH0KICAgIGNh
dGNoKC4uLikgeyBfTV9wdXRfbm9kZShfX3ApOyB0aHJvdzsgfTsKICAgIHJldHVybiBfX3A7CiAg
fQoKcHVibGljOgogIGV4cGxpY2l0IGxpc3QoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFs
bG9jYXRvcl90eXBlKCkpIDogX0Jhc2UoX19hKSB7fQoKICBpdGVyYXRvciBiZWdpbigpIHsgcmV0
dXJuIChfTm9kZSopKF9NX25vZGUtPl9NX25leHQpOyB9CiAgY29uc3RfaXRlcmF0b3IgYmVnaW4o
KSBjb25zdCB7IHJldHVybiAoX05vZGUqKShfTV9ub2RlLT5fTV9uZXh0KTsgfQoKICBpdGVyYXRv
ciBlbmQoKSB7IHJldHVybiBfTV9ub2RlOyB9CiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3Qg
eyByZXR1cm4gX01fbm9kZTsgfQoKICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpCiAgICB7IHJl
dHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3Ig
cmJlZ2luKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkp
OyB9CgogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpCiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJh
dG9yKGJlZ2luKCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QKICAg
IHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KCiAgYm9vbCBlbXB0
eSgpIGNvbnN0IHsgcmV0dXJuIF9NX25vZGUtPl9NX25leHQgPT0gX01fbm9kZTsgfQogIHNpemVf
dHlwZSBzaXplKCkgY29uc3QgewogICAgc2l6ZV90eXBlIF9fcmVzdWx0ID0gMDsKICAgIGRpc3Rh
bmNlKGJlZ2luKCksIGVuZCgpLCBfX3Jlc3VsdCk7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQog
IHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfdHlwZSgtMSk7IH0KCiAg
cmVmZXJlbmNlIGZyb250KCkgeyByZXR1cm4gKmJlZ2luKCk7IH0KICBjb25zdF9yZWZlcmVuY2Ug
ZnJvbnQoKSBjb25zdCB7IHJldHVybiAqYmVnaW4oKTsgfQogIHJlZmVyZW5jZSBiYWNrKCkgeyBy
ZXR1cm4gKigtLWVuZCgpKTsgfQogIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QgeyByZXR1
cm4gKigtLWVuZCgpKTsgfQoKICB2b2lkIHN3YXAobGlzdDxfVHAsIF9BbGxvYz4mIF9feCkgeyBz
dGQ6OnN3YXAoX01fbm9kZSwgX194Ll9NX25vZGUpOyB9CgogIGl0ZXJhdG9yIGluc2VydChpdGVy
YXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkgewogICAgX05vZGUqIF9fdG1wID0gX01f
Y3JlYXRlX25vZGUoX194KTsKICAgIF9fdG1wLT5fTV9uZXh0ID0gX19wb3NpdGlvbi5fTV9ub2Rl
OwogICAgX190bXAtPl9NX3ByZXYgPSBfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX3ByZXY7CiAgICBf
X3Bvc2l0aW9uLl9NX25vZGUtPl9NX3ByZXYtPl9NX25leHQgPSBfX3RtcDsKICAgIF9fcG9zaXRp
b24uX01fbm9kZS0+X01fcHJldiA9IF9fdG1wOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVy
YXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbikgeyByZXR1cm4gaW5zZXJ0KF9fcG9zaXRp
b24sIF9UcCgpKTsgfQoKCiAgdGVtcGxhdGU8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9pbnNl
cnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX194LAog
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKSB7CiAgICBfTV9maWxsX2luc2Vy
dChfX3BvcywgKHNpemVfdHlwZSkgX19uLCAoX1RwKSBfX3gpOwogIH0KCiAgdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9f
cG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J
bnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5
cGUpOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNlcnQoaXRl
cmF0b3IgX19wb3MsIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz
dCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9J
bnRlZ3JhbCBfSW50ZWdyYWw7CiAgICBfTV9pbnNlcnRfZGlzcGF0Y2goX19wb3MsIF9fZmlyc3Qs
IF9fbGFzdCwgX0ludGVncmFsKCkpOwogIH0KCiAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wb3Ms
IHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX194KQogICAgeyBfTV9maWxsX2luc2VydChfX3Bv
cywgX19uLCBfX3gpOyB9CiAgdm9pZCBfTV9maWxsX2luc2VydChpdGVyYXRvciBfX3Bvcywgc2l6
ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3gpOwoKICB2b2lkIHB1c2hfZnJvbnQoY29uc3QgX1Rw
JiBfX3gpIHsgaW5zZXJ0KGJlZ2luKCksIF9feCk7IH0KICB2b2lkIHB1c2hfZnJvbnQoKSB7aW5z
ZXJ0KGJlZ2luKCkpO30KICB2b2lkIHB1c2hfYmFjayhjb25zdCBfVHAmIF9feCkgeyBpbnNlcnQo
ZW5kKCksIF9feCk7IH0KICB2b2lkIHB1c2hfYmFjaygpIHtpbnNlcnQoZW5kKCkpO30KCiAgaXRl
cmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgewogICAgX0xpc3Rfbm9kZV9iYXNlKiBf
X25leHRfbm9kZSA9IF9fcG9zaXRpb24uX01fbm9kZS0+X01fbmV4dDsKICAgIF9MaXN0X25vZGVf
YmFzZSogX19wcmV2X25vZGUgPSBfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX3ByZXY7CiAgICBfTm9k
ZSogX19uID0gKF9Ob2RlKikgX19wb3NpdGlvbi5fTV9ub2RlOwogICAgX19wcmV2X25vZGUtPl9N
X25leHQgPSBfX25leHRfbm9kZTsKICAgIF9fbmV4dF9ub2RlLT5fTV9wcmV2ID0gX19wcmV2X25v
ZGU7CiAgICBfRGVzdHJveSgmX19uLT5fTV9kYXRhKTsKICAgIF9NX3B1dF9ub2RlKF9fbik7CiAg
ICByZXR1cm4gaXRlcmF0b3IoKF9Ob2RlKikgX19uZXh0X25vZGUpOwogIH0KICBpdGVyYXRvciBl
cmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpOwogIHZvaWQgY2xlYXIoKSB7
IF9CYXNlOjpjbGVhcigpOyB9CgogIHZvaWQgcmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplLCBj
b25zdCBfVHAmIF9feCk7CiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUpIHsgdGhp
cy0+cmVzaXplKF9fbmV3X3NpemUsIF9UcCgpKTsgfQoKICB2b2lkIHBvcF9mcm9udCgpIHsgZXJh
c2UoYmVnaW4oKSk7IH0KICB2b2lkIHBvcF9iYWNrKCkgewogICAgaXRlcmF0b3IgX190bXAgPSBl
bmQoKTsKICAgIGVyYXNlKC0tX190bXApOwogIH0KICBsaXN0KHNpemVfdHlwZSBfX24sIGNvbnN0
IF9UcCYgX192YWx1ZSwKICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0
b3JfdHlwZSgpKQogICAgOiBfQmFzZShfX2EpCiAgICB7IGluc2VydChiZWdpbigpLCBfX24sIF9f
dmFsdWUpOyB9CiAgZXhwbGljaXQgbGlzdChzaXplX3R5cGUgX19uKQogICAgOiBfQmFzZShhbGxv
Y2F0b3JfdHlwZSgpKQogICAgeyBpbnNlcnQoYmVnaW4oKSwgX19uLCBfVHAoKSk7IH0KCgoKICB0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgbGlzdChfSW5wdXRJdGVyYXRvciBfX2Zp
cnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYg
X19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19hKQogICAgeyBpbnNlcnQoYmVn
aW4oKSwgX19maXJzdCwgX19sYXN0KTsgfQoKICBsaXN0KGNvbnN0IGxpc3Q8X1RwLCBfQWxsb2M+
JiBfX3gpIDogX0Jhc2UoX194LmdldF9hbGxvY2F0b3IoKSkKICAgIHsgaW5zZXJ0KGJlZ2luKCks
IF9feC5iZWdpbigpLCBfX3guZW5kKCkpOyB9CgogIH5saXN0KCkgeyB9CgogIGxpc3Q8X1RwLCBf
QWxsb2M+JiBvcGVyYXRvcj0oY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9feCk7CgpwdWJsaWM6
CgoKCgoKICB2b2lkIGFzc2lnbihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsKSB7IF9N
X2ZpbGxfYXNzaWduKF9fbiwgX192YWwpOyB9CgogIHZvaWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90
eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCk7CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
YXRvcj4KICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv
ciBfX2xhc3QpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0
b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgX01fYXNzaWduX2Rpc3BhdGNoKF9fZmlyc3Qs
IF9fbGFzdCwgX0ludGVncmFsKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgog
IHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9f
dHJ1ZV90eXBlKQogICAgeyBfTV9maWxsX2Fzc2lnbigoc2l6ZV90eXBlKSBfX24sIChfVHApIF9f
dmFsKTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9hc3Np
Z25fZGlzcGF0Y2goX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSk7Cgpwcm90ZWN0ZWQ6CiAg
dm9pZCB0cmFuc2ZlcihpdGVyYXRvciBfX3Bvc2l0aW9uLCBpdGVyYXRvciBfX2ZpcnN0LCBpdGVy
YXRvciBfX2xhc3QpIHsKICAgIGlmIChfX3Bvc2l0aW9uICE9IF9fbGFzdCkgewoKICAgICAgX19s
YXN0Ll9NX25vZGUtPl9NX3ByZXYtPl9NX25leHQgPSBfX3Bvc2l0aW9uLl9NX25vZGU7CiAgICAg
IF9fZmlyc3QuX01fbm9kZS0+X01fcHJldi0+X01fbmV4dCA9IF9fbGFzdC5fTV9ub2RlOwogICAg
ICBfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX3ByZXYtPl9NX25leHQgPSBfX2ZpcnN0Ll9NX25vZGU7
CgoKICAgICAgX0xpc3Rfbm9kZV9iYXNlKiBfX3RtcCA9IF9fcG9zaXRpb24uX01fbm9kZS0+X01f
cHJldjsKICAgICAgX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2ID0gX19sYXN0Ll9NX25vZGUt
Pl9NX3ByZXY7CiAgICAgIF9fbGFzdC5fTV9ub2RlLT5fTV9wcmV2ID0gX19maXJzdC5fTV9ub2Rl
LT5fTV9wcmV2OwogICAgICBfX2ZpcnN0Ll9NX25vZGUtPl9NX3ByZXYgPSBfX3RtcDsKICAgIH0K
ICB9CgpwdWJsaWM6CiAgdm9pZCBzcGxpY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgbGlzdCYgX194
KSB7CiAgICBpZiAoIV9feC5lbXB0eSgpKQogICAgICB0aGlzLT50cmFuc2ZlcihfX3Bvc2l0aW9u
LCBfX3guYmVnaW4oKSwgX194LmVuZCgpKTsKICB9CiAgdm9pZCBzcGxpY2UoaXRlcmF0b3IgX19w
b3NpdGlvbiwgbGlzdCYsIGl0ZXJhdG9yIF9faSkgewogICAgaXRlcmF0b3IgX19qID0gX19pOwog
ICAgKytfX2o7CiAgICBpZiAoX19wb3NpdGlvbiA9PSBfX2kgfHwgX19wb3NpdGlvbiA9PSBfX2op
IHJldHVybjsKICAgIHRoaXMtPnRyYW5zZmVyKF9fcG9zaXRpb24sIF9faSwgX19qKTsKICB9CiAg
dm9pZCBzcGxpY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgbGlzdCYsIGl0ZXJhdG9yIF9fZmlyc3Qs
IGl0ZXJhdG9yIF9fbGFzdCkgewogICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KQogICAgICB0aGlz
LT50cmFuc2ZlcihfX3Bvc2l0aW9uLCBfX2ZpcnN0LCBfX2xhc3QpOwogIH0KICB2b2lkIHJlbW92
ZShjb25zdCBfVHAmIF9fdmFsdWUpOwogIHZvaWQgdW5pcXVlKCk7CiAgdm9pZCBtZXJnZShsaXN0
JiBfX3gpOwogIHZvaWQgcmV2ZXJzZSgpOwogIHZvaWQgc29ydCgpOwoKICB0ZW1wbGF0ZSA8Y2xh
c3MgX1ByZWRpY2F0ZT4gdm9pZCByZW1vdmVfaWYoX1ByZWRpY2F0ZSk7CiAgdGVtcGxhdGUgPGNs
YXNzIF9CaW5hcnlQcmVkaWNhdGU+IHZvaWQgdW5pcXVlKF9CaW5hcnlQcmVkaWNhdGUpOwogIHRl
bXBsYXRlIDxjbGFzcyBfU3RyaWN0V2Vha09yZGVyaW5nPiB2b2lkIG1lcmdlKGxpc3QmLCBfU3Ry
aWN0V2Vha09yZGVyaW5nKTsKICB0ZW1wbGF0ZSA8Y2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4g
dm9pZCBzb3J0KF9TdHJpY3RXZWFrT3JkZXJpbmcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg
Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcj09KGNvbnN0IGxpc3Q8X1RwLF9BbGxv
Yz4mIF9feCwgY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX195KQp7CiAgdHlwZWRlZiB0eXBlbmFt
ZSBsaXN0PF9UcCxfQWxsb2M+Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKICBjb25z
dF9pdGVyYXRvciBfX2VuZDEgPSBfX3guZW5kKCk7CiAgY29uc3RfaXRlcmF0b3IgX19lbmQyID0g
X195LmVuZCgpOwoKICBjb25zdF9pdGVyYXRvciBfX2kxID0gX194LmJlZ2luKCk7CiAgY29uc3Rf
aXRlcmF0b3IgX19pMiA9IF9feS5iZWdpbigpOwogIHdoaWxlIChfX2kxICE9IF9fZW5kMSAmJiBf
X2kyICE9IF9fZW5kMiAmJiAqX19pMSA9PSAqX19pMikgewogICAgKytfX2kxOwogICAgKytfX2ky
OwogIH0KICByZXR1cm4gX19pMSA9PSBfX2VuZDEgJiYgX19pMiA9PSBfX2VuZDI7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0
IGxpc3Q8X1RwLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpc3Q8
X1RwLF9BbGxvYz4mIF9feSkKewogIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfX3gu
YmVnaW4oKSwgX194LmVuZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ku
YmVnaW4oKSwgX195LmVuZCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j
PgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feCwKICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3kpIHsKICByZXR1
cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpp
bmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX194LAogICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9f
eSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9v
bCBvcGVyYXRvcjw9KGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBf
X3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9w
ZXJhdG9yPj0oY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQKc3dhcChs
aXN0PF9UcCwgX0FsbG9jPiYgX194LCBsaXN0PF9UcCwgX0FsbG9jPiYgX195KQp7CiAgX194LnN3
YXAoX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcj4Kdm9pZApsaXN0PF9UcCwgX0FsbG9jPjo6X01faW5zZXJ0X2Rpc3Bh
dGNoKGl0ZXJhdG9yIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpCnsKICBmb3IgKCA7IF9fZmly
c3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpbnNlcnQoX19wb3NpdGlvbiwgKl9fZmlyc3Qp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQKbGlzdDxfVHAsIF9B
bGxvYz46Ol9NX2ZpbGxfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCkKewogIGZv
ciAoIDsgX19uID4gMDsgLS1fX24pCiAgICBpbnNlcnQoX19wb3NpdGlvbiwgX194KTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBsaXN0PF9UcCxfQWxsb2M+
OjppdGVyYXRvciBsaXN0PF9UcCwgX0FsbG9jPjo6ZXJhc2UoaXRlcmF0b3IgX19maXJzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGl0ZXJhdG9yIF9fbGFzdCkKewogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKICAgIGVyYXNl
KF9fZmlyc3QrKyk7CiAgcmV0dXJuIF9fbGFzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh
c3MgX0FsbG9jPgp2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+OjpyZXNpemUoc2l6ZV90eXBlIF9fbmV3
X3NpemUsIGNvbnN0IF9UcCYgX194KQp7CiAgaXRlcmF0b3IgX19pID0gYmVnaW4oKTsKICBzaXpl
X3R5cGUgX19sZW4gPSAwOwogIGZvciAoIDsgX19pICE9IGVuZCgpICYmIF9fbGVuIDwgX19uZXdf
c2l6ZTsgKytfX2ksICsrX19sZW4pCiAgICA7CiAgaWYgKF9fbGVuID09IF9fbmV3X3NpemUpCiAg
ICBlcmFzZShfX2ksIGVuZCgpKTsKICBlbHNlCiAgICBpbnNlcnQoZW5kKCksIF9fbmV3X3NpemUg
LSBfX2xlbiwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpsaXN0
PF9UcCwgX0FsbG9jPiYgbGlzdDxfVHAsIF9BbGxvYz46Om9wZXJhdG9yPShjb25zdCBsaXN0PF9U
cCwgX0FsbG9jPiYgX194KQp7CiAgaWYgKHRoaXMgIT0gJl9feCkgewogICAgaXRlcmF0b3IgX19m
aXJzdDEgPSBiZWdpbigpOwogICAgaXRlcmF0b3IgX19sYXN0MSA9IGVuZCgpOwogICAgY29uc3Rf
aXRlcmF0b3IgX19maXJzdDIgPSBfX3guYmVnaW4oKTsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fbGFz
dDIgPSBfX3guZW5kKCk7CiAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0
MiAhPSBfX2xhc3QyKQogICAgICAqX19maXJzdDErKyA9ICpfX2ZpcnN0MisrOwogICAgaWYgKF9f
Zmlyc3QyID09IF9fbGFzdDIpCiAgICAgIGVyYXNlKF9fZmlyc3QxLCBfX2xhc3QxKTsKICAgIGVs
c2UKICAgICAgaW5zZXJ0KF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKICB9CiAgcmV0dXJu
ICp0aGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgbGlzdDxf
VHAsIF9BbGxvYz46Ol9NX2ZpbGxfYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192
YWwpIHsKICBpdGVyYXRvciBfX2kgPSBiZWdpbigpOwogIGZvciAoIDsgX19pICE9IGVuZCgpICYm
IF9fbiA+IDA7ICsrX19pLCAtLV9fbikKICAgICpfX2kgPSBfX3ZhbDsKICBpZiAoX19uID4gMCkK
ICAgIGluc2VydChlbmQoKSwgX19uLCBfX3ZhbCk7CiAgZWxzZQogICAgZXJhc2UoX19pLCBlbmQo
KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXI+CnZvaWQKbGlzdDxfVHAsIF9BbGxvYz46Ol9NX2Fzc2lnbl9kaXNwYXRjaChf
SW5wdXRJdGVyIF9fZmlyc3QyLCBfSW5wdXRJdGVyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKQp7CiAgaXRlcmF0b3IgX19maXJzdDEg
PSBiZWdpbigpOwogIGl0ZXJhdG9yIF9fbGFzdDEgPSBlbmQoKTsKICBmb3IgKCA7IF9fZmlyc3Qx
ICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0
MikKICAgICpfX2ZpcnN0MSA9ICpfX2ZpcnN0MjsKICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikK
ICAgIGVyYXNlKF9fZmlyc3QxLCBfX2xhc3QxKTsKICBlbHNlCiAgICBpbnNlcnQoX19sYXN0MSwg
X19maXJzdDIsIF9fbGFzdDIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+
CnZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OnJlbW92ZShjb25zdCBfVHAmIF9fdmFsdWUpCnsKICBp
dGVyYXRvciBfX2ZpcnN0ID0gYmVnaW4oKTsKICBpdGVyYXRvciBfX2xhc3QgPSBlbmQoKTsKICB3
aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIGl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7
CiAgICArK19fbmV4dDsKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbHVlKSBlcmFzZShfX2ZpcnN0
KTsKICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfQWxsb2M+CnZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OnVuaXF1ZSgpCnsKICBpdGVyYXRvciBf
X2ZpcnN0ID0gYmVnaW4oKTsKICBpdGVyYXRvciBfX2xhc3QgPSBlbmQoKTsKICBpZiAoX19maXJz
dCA9PSBfX2xhc3QpIHJldHVybjsKICBpdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OwogIHdoaWxl
ICgrK19fbmV4dCAhPSBfX2xhc3QpIHsKICAgIGlmICgqX19maXJzdCA9PSAqX19uZXh0KQogICAg
ICBlcmFzZShfX25leHQpOwogICAgZWxzZQogICAgICBfX2ZpcnN0ID0gX19uZXh0OwogICAgX19u
ZXh0ID0gX19maXJzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K
dm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6bWVyZ2UobGlzdDxfVHAsIF9BbGxvYz4mIF9feCkKewog
IGl0ZXJhdG9yIF9fZmlyc3QxID0gYmVnaW4oKTsKICBpdGVyYXRvciBfX2xhc3QxID0gZW5kKCk7
CiAgaXRlcmF0b3IgX19maXJzdDIgPSBfX3guYmVnaW4oKTsKICBpdGVyYXRvciBfX2xhc3QyID0g
X194LmVuZCgpOwogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9f
bGFzdDIpCiAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgIGl0ZXJhdG9yIF9f
bmV4dCA9IF9fZmlyc3QyOwogICAgICB0cmFuc2ZlcihfX2ZpcnN0MSwgX19maXJzdDIsICsrX19u
ZXh0KTsKICAgICAgX19maXJzdDIgPSBfX25leHQ7CiAgICB9CiAgICBlbHNlCiAgICAgICsrX19m
aXJzdDE7CiAgaWYgKF9fZmlyc3QyICE9IF9fbGFzdDIpIHRyYW5zZmVyKF9fbGFzdDEsIF9fZmly
c3QyLCBfX2xhc3QyKTsKfQoKaW5saW5lIHZvaWQgX19MaXN0X2Jhc2VfcmV2ZXJzZShfTGlzdF9u
b2RlX2Jhc2UqIF9fcCkKewogIF9MaXN0X25vZGVfYmFzZSogX190bXAgPSBfX3A7CiAgZG8gewog
ICAgc3RkOjpzd2FwKF9fdG1wLT5fTV9uZXh0LCBfX3RtcC0+X01fcHJldik7CiAgICBfX3RtcCA9
IF9fdG1wLT5fTV9wcmV2OwogIH0gd2hpbGUgKF9fdG1wICE9IF9fcCk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OnJl
dmVyc2UoKQp7CiAgX19MaXN0X2Jhc2VfcmV2ZXJzZSh0aGlzLT5fTV9ub2RlKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+Ojpzb3J0
KCkKewoKICBpZiAoX01fbm9kZS0+X01fbmV4dCAhPSBfTV9ub2RlICYmIF9NX25vZGUtPl9NX25l
eHQtPl9NX25leHQgIT0gX01fbm9kZSkgewogICAgbGlzdDxfVHAsIF9BbGxvYz4gX19jYXJyeTsK
ICAgIGxpc3Q8X1RwLCBfQWxsb2M+IF9fY291bnRlcls2NF07CiAgICBpbnQgX19maWxsID0gMDsK
ICAgIHdoaWxlICghZW1wdHkoKSkgewogICAgICBfX2NhcnJ5LnNwbGljZShfX2NhcnJ5LmJlZ2lu
KCksICp0aGlzLCBiZWdpbigpKTsKICAgICAgaW50IF9faSA9IDA7CiAgICAgIHdoaWxlKF9faSA8
IF9fZmlsbCAmJiAhX19jb3VudGVyW19faV0uZW1wdHkoKSkgewogICAgICAgIF9fY291bnRlcltf
X2ldLm1lcmdlKF9fY2FycnkpOwogICAgICAgIF9fY2Fycnkuc3dhcChfX2NvdW50ZXJbX19pKytd
KTsKICAgICAgfQogICAgICBfX2NhcnJ5LnN3YXAoX19jb3VudGVyW19faV0pOwogICAgICBpZiAo
X19pID09IF9fZmlsbCkgKytfX2ZpbGw7CiAgICB9CgogICAgZm9yIChpbnQgX19pID0gMTsgX19p
IDwgX19maWxsOyArK19faSkKICAgICAgX19jb3VudGVyW19faV0ubWVyZ2UoX19jb3VudGVyW19f
aS0xXSk7CiAgICBzd2FwKF9fY291bnRlcltfX2ZpbGwtMV0pOwogIH0KfQoKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4Kdm9pZCBs
aXN0PF9UcCwgX0FsbG9jPjo6cmVtb3ZlX2lmKF9QcmVkaWNhdGUgX19wcmVkKQp7CiAgaXRlcmF0
b3IgX19maXJzdCA9IGJlZ2luKCk7CiAgaXRlcmF0b3IgX19sYXN0ID0gZW5kKCk7CiAgd2hpbGUg
KF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICBpdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OwogICAg
KytfX25leHQ7CiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgZXJhc2UoX19maXJzdCk7CiAgICBf
X2ZpcnN0ID0gX19uZXh0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j
PiB0ZW1wbGF0ZSA8Y2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4Kdm9pZCBsaXN0PF9UcCwgX0FsbG9j
Pjo6dW5pcXVlKF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKewogIGl0ZXJhdG9yIF9f
Zmlyc3QgPSBiZWdpbigpOwogIGl0ZXJhdG9yIF9fbGFzdCA9IGVuZCgpOwogIGlmIChfX2ZpcnN0
ID09IF9fbGFzdCkgcmV0dXJuOwogIGl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7CiAgd2hpbGUg
KCsrX19uZXh0ICE9IF9fbGFzdCkgewogICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsICpf
X25leHQpKQogICAgICBlcmFzZShfX25leHQpOwogICAgZWxzZQogICAgICBfX2ZpcnN0ID0gX19u
ZXh0OwogICAgX19uZXh0ID0gX19maXJzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
YXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9TdHJpY3RXZWFrT3JkZXJpbmc+CnZvaWQgbGlz
dDxfVHAsIF9BbGxvYz46Om1lcmdlKGxpc3Q8X1RwLCBfQWxsb2M+JiBfX3gsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQp7CiAgaXRlcmF0
b3IgX19maXJzdDEgPSBiZWdpbigpOwogIGl0ZXJhdG9yIF9fbGFzdDEgPSBlbmQoKTsKICBpdGVy
YXRvciBfX2ZpcnN0MiA9IF9feC5iZWdpbigpOwogIGl0ZXJhdG9yIF9fbGFzdDIgPSBfX3guZW5k
KCk7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikK
ICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgIGl0ZXJhdG9yIF9f
bmV4dCA9IF9fZmlyc3QyOwogICAgICB0cmFuc2ZlcihfX2ZpcnN0MSwgX19maXJzdDIsICsrX19u
ZXh0KTsKICAgICAgX19maXJzdDIgPSBfX25leHQ7CiAgICB9CiAgICBlbHNlCiAgICAgICsrX19m
aXJzdDE7CiAgaWYgKF9fZmlyc3QyICE9IF9fbGFzdDIpIHRyYW5zZmVyKF9fbGFzdDEsIF9fZmly
c3QyLCBfX2xhc3QyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1w
bGF0ZSA8Y2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4Kdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6
c29ydChfU3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCkKewoKICBpZiAoX01fbm9kZS0+X01fbmV4
dCAhPSBfTV9ub2RlICYmIF9NX25vZGUtPl9NX25leHQtPl9NX25leHQgIT0gX01fbm9kZSkgewog
ICAgbGlzdDxfVHAsIF9BbGxvYz4gX19jYXJyeTsKICAgIGxpc3Q8X1RwLCBfQWxsb2M+IF9fY291
bnRlcls2NF07CiAgICBpbnQgX19maWxsID0gMDsKICAgIHdoaWxlICghZW1wdHkoKSkgewogICAg
ICBfX2NhcnJ5LnNwbGljZShfX2NhcnJ5LmJlZ2luKCksICp0aGlzLCBiZWdpbigpKTsKICAgICAg
aW50IF9faSA9IDA7CiAgICAgIHdoaWxlKF9faSA8IF9fZmlsbCAmJiAhX19jb3VudGVyW19faV0u
ZW1wdHkoKSkgewogICAgICAgIF9fY291bnRlcltfX2ldLm1lcmdlKF9fY2FycnksIF9fY29tcCk7
CiAgICAgICAgX19jYXJyeS5zd2FwKF9fY291bnRlcltfX2krK10pOwogICAgICB9CiAgICAgIF9f
Y2Fycnkuc3dhcChfX2NvdW50ZXJbX19pXSk7CiAgICAgIGlmIChfX2kgPT0gX19maWxsKSArK19f
ZmlsbDsKICAgIH0KCiAgICBmb3IgKGludCBfX2kgPSAxOyBfX2kgPCBfX2ZpbGw7ICsrX19pKQog
ICAgICBfX2NvdW50ZXJbX19pXS5tZXJnZShfX2NvdW50ZXJbX19pLTFdLCBfX2NvbXApOwogICAg
c3dhcChfX2NvdW50ZXJbX19maWxsLTFdKTsKICB9Cn0KCn0KIyAzNyAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF9saXN0LmgiIDIgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JhY2t3YXJkL2xpc3QuaCIgMiAzCgp1c2luZyBzdGQ6Omxpc3Q7CiMgNDQgInNmaWxl
cy5oIiAyCgoKCiMgMSAic3N0cmluZy5oIiAxCiMgNDggInNmaWxlcy5oIiAyCiMgMSAic3RpbWUu
aCIgMQojIDQ5ICJzZmlsZXMuaCIgMgoKY2xhc3Mgc0ZpbGVJbmZvIHsKcHVibGljOgogICAgICAg
IGVudW0gewogICAgICAgICAgICAgICAgQUNSX1JFQUQgPSAxLAogICAgICAgICAgICAgICAgQUNS
X0VYRUNVVEUgPSAyLAogICAgICAgICAgICAgICAgQUNSX1dSSVRFID0gNAogICAgICAgIH07CiAg
ICAgICAgc1N0cmluZyBwYXRoLAogICAgICAgICAgICAgICAgICAgICAgICBuYW1lOwogICAgICAg
IGxvbmcgc2l6ZTsKICAgICAgICBzVGltZSBsYXN0d3JpdGU7CiAgICAgICAgaW50IGFjY2Vzc19y
aWdodHM7CiAgICAgICAgZW51bSB7IHR5cGVGaWxlLHR5cGVEaXIsdHlwZUxpbmsgfSB0eXBlOwoK
ICAgICAgICBpbnQgb3BlcmF0b3I9PSAoY29uc3Qgc0ZpbGVJbmZvICYgb3ApIGNvbnN0CiAgICAg
ICAgeyByZXR1cm4gKHBhdGggPT0gb3AucGF0aCkgJiYgKG5hbWUgPT0gb3AubmFtZSk7IH07CiAg
ICAgICAgaW50IG9wZXJhdG9yPCAoY29uc3Qgc0ZpbGVJbmZvICYgb3ApIGNvbnN0CiAgICAgICAg
eyByZXR1cm4gKG5hbWUgPT0gb3AubmFtZSA/IHBhdGggPCBvcC5wYXRoIDogbmFtZSA8IG9wLm5h
bWUpOyB9OwogICAgICAgIGludCBvcGVyYXRvcj4gKGNvbnN0IHNGaWxlSW5mbyAmIG9wKSBjb25z
dAogICAgICAgIHsgcmV0dXJuIChuYW1lID09IG9wLm5hbWUgPyBwYXRoID4gb3AucGF0aCA6IG5h
bWUgPiBvcC5uYW1lKTsgfTsKfTsKCnR5cGVkZWYgbGlzdDxzRmlsZUluZm8+IHNGaWxlTGlzdDsK
CgoKCgoKZXh0ZXJuIGludCBzRmluZEZpbGVzIChzRmlsZUxpc3QgJiByZXN1bHQsIGNvbnN0IGNo
YXIgKiBwYXRoID0gMCwgY29uc3QgY2hhciAqIG1hc2sgPSAwLCBpbnQgZmxhZ3MgPSAwKTsKIyAz
MSAic3lzdGVtLmgiIDIKIyAzNCAic3RjLmNwcCIgMgoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JhY2t3YXJkL3N0cnN0cmVhbS5oIiAxIDMKIyAzMyAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iYWNrd2FyZC9zdHJzdHJlYW0uaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYmFja3dhcmQvc3Ryc3RyZWFtIiAxIDMKIyAyMiAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iYWNrd2FyZC9zdHJzdHJlYW0iIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JhY2t3YXJkL2JhY2t3YXJkX3dhcm5pbmcuaCIgMSAzCiMgMjMgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYmFja3dhcmQvc3Ryc3RyZWFtIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAxIDMKIyAyNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iYWNrd2FyZC9zdHJzdHJlYW0iIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvYml0cy9zdGRfaW9zLmgiIDEgMwojIDI1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jh
Y2t3YXJkL3N0cnN0cmVhbSIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9pc3RyZWFtLmgiIDEgMwojIDI2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JhY2t3
YXJkL3N0cnN0cmVhbSIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9vc3RyZWFtLmgiIDEgMwojIDI3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JhY2t3YXJk
L3N0cnN0cmVhbSIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9z
dHJpbmcuaCIgMSAzCiMgMjggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYmFja3dhcmQvc3Ry
c3RyZWFtIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKCgoKCmNsYXNzIHN0cnN0cmVhbWJ1ZiA6IHB1
YmxpYyBiYXNpY19zdHJlYW1idWY8Y2hhciwgY2hhcl90cmFpdHM8Y2hhcj4gPgp7CnB1YmxpYzoK
ICB0eXBlZGVmIGNoYXJfdHJhaXRzPGNoYXI+IF9UcmFpdHM7CiAgdHlwZWRlZiBiYXNpY19zdHJl
YW1idWY8Y2hhciwgX1RyYWl0cz4gX0Jhc2U7CgpwdWJsaWM6CiAgZXhwbGljaXQgc3Ryc3RyZWFt
YnVmKHN0cmVhbXNpemUgX19pbml0aWFsX2NhcGFjaXR5ID0gMCk7CiAgc3Ryc3RyZWFtYnVmKHZv
aWQqICgqX19hbGxvYykoc2l6ZV90KSwgdm9pZCAoKl9fZnJlZSkodm9pZCopKTsKCiAgc3Ryc3Ry
ZWFtYnVmKGNoYXIqIF9fZ2V0LCBzdHJlYW1zaXplIF9fbiwgY2hhciogX19wdXQgPSAwKTsKICBz
dHJzdHJlYW1idWYoc2lnbmVkIGNoYXIqIF9fZ2V0LCBzdHJlYW1zaXplIF9fbiwgc2lnbmVkIGNo
YXIqIF9fcHV0ID0gMCk7CiAgc3Ryc3RyZWFtYnVmKHVuc2lnbmVkIGNoYXIqIF9fZ2V0LCBzdHJl
YW1zaXplIF9fbiwgdW5zaWduZWQgY2hhciogX19wdXQ9MCk7CgogIHN0cnN0cmVhbWJ1Zihjb25z
dCBjaGFyKiBfX2dldCwgc3RyZWFtc2l6ZSBfX24pOwogIHN0cnN0cmVhbWJ1Zihjb25zdCBzaWdu
ZWQgY2hhciogX19nZXQsIHN0cmVhbXNpemUgX19uKTsKICBzdHJzdHJlYW1idWYoY29uc3QgdW5z
aWduZWQgY2hhciogX19nZXQsIHN0cmVhbXNpemUgX19uKTsKCiAgdmlydHVhbCB+c3Ryc3RyZWFt
YnVmKCk7CgpwdWJsaWM6CiAgdm9pZCBmcmVlemUoYm9vbCA9IHRydWUpOwogIGNoYXIqIHN0cigp
OwogIGludCBwY291bnQoKSBjb25zdDsKCnByb3RlY3RlZDoKICB2aXJ0dWFsIGludF90eXBlIG92
ZXJmbG93KGludF90eXBlIF9fYyA9IF9UcmFpdHM6OmVvZigpKTsKICB2aXJ0dWFsIGludF90eXBl
IHBiYWNrZmFpbChpbnRfdHlwZSBfX2MgPSBfVHJhaXRzOjplb2YoKSk7CiAgdmlydHVhbCBpbnRf
dHlwZSB1bmRlcmZsb3coKTsKICB2aXJ0dWFsIF9CYXNlKiBzZXRidWYoY2hhciogX19idWYsIHN0
cmVhbXNpemUgX19uKTsKICB2aXJ0dWFsIHBvc190eXBlIHNlZWtvZmYob2ZmX3R5cGUgX19vZmYs
IGlvc19iYXNlOjpzZWVrZGlyIF9fZGlyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpb3Nf
YmFzZTo6b3Blbm1vZGUgX19tb2RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KTsKICB2aXJ0dWFsIHBvc190eXBlIHNl
ZWtwb3MocG9zX3R5cGUgX19wb3MsIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpv
dXQpOwoKcHJpdmF0ZToKCiAgY2hhciogX01fYWxsb2Moc2l6ZV90KTsKICB2b2lkIF9NX2ZyZWUo
Y2hhciopOwoKCiAgdm9pZCBfTV9zZXR1cChjaGFyKiBfX2dldCwgY2hhciogX19wdXQsIHN0cmVh
bXNpemUgX19uKTsKCnByaXZhdGU6CiAgdm9pZCogKCpfTV9hbGxvY19mdW4pKHNpemVfdCk7CiAg
dm9pZCAoKl9NX2ZyZWVfZnVuKSh2b2lkKik7CgogIGJvb2wgX01fZHluYW1pYyA6IDE7CiAgYm9v
bCBfTV9mcm96ZW4gOiAxOwogIGJvb2wgX01fY29uc3RhbnQgOiAxOwp9OwoKCgoKY2xhc3MgaXN0
cnN0cmVhbSA6IHB1YmxpYyBiYXNpY19pc3RyZWFtPGNoYXI+CnsKcHVibGljOgogIGV4cGxpY2l0
IGlzdHJzdHJlYW0oY2hhciopOwogIGV4cGxpY2l0IGlzdHJzdHJlYW0oY29uc3QgY2hhciopOwog
IGlzdHJzdHJlYW0oY2hhciogLCBzdHJlYW1zaXplKTsKICBpc3Ryc3RyZWFtKGNvbnN0IGNoYXIq
LCBzdHJlYW1zaXplKTsKICB2aXJ0dWFsIH5pc3Ryc3RyZWFtKCk7CgogIHN0cnN0cmVhbWJ1Ziog
cmRidWYoKSBjb25zdDsKICBjaGFyKiBzdHIoKTsKCnByaXZhdGU6CiAgc3Ryc3RyZWFtYnVmIF9N
X2J1ZjsKfTsKCgoKCmNsYXNzIG9zdHJzdHJlYW0gOiBwdWJsaWMgYmFzaWNfb3N0cmVhbTxjaGFy
Pgp7CnB1YmxpYzoKICBvc3Ryc3RyZWFtKCk7CiAgb3N0cnN0cmVhbShjaGFyKiwgaW50LCBpb3Nf
YmFzZTo6b3Blbm1vZGUgPSBpb3NfYmFzZTo6b3V0KTsKICB2aXJ0dWFsIH5vc3Ryc3RyZWFtKCk7
CgogIHN0cnN0cmVhbWJ1ZiogcmRidWYoKSBjb25zdDsKICB2b2lkIGZyZWV6ZShib29sID0gdHJ1
ZSk7CiAgY2hhciogc3RyKCk7CiAgaW50IHBjb3VudCgpIGNvbnN0OwoKcHJpdmF0ZToKICBzdHJz
dHJlYW1idWYgX01fYnVmOwp9OwoKCgoKY2xhc3Mgc3Ryc3RyZWFtIDogcHVibGljIGJhc2ljX2lv
c3RyZWFtPGNoYXI+CnsKcHVibGljOgogIHR5cGVkZWYgY2hhciBjaGFyX3R5cGU7CiAgdHlwZWRl
ZiBjaGFyX3RyYWl0czxjaGFyPjo6aW50X3R5cGUgaW50X3R5cGU7CiAgdHlwZWRlZiBjaGFyX3Ry
YWl0czxjaGFyPjo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgdHlwZWRlZiBjaGFyX3RyYWl0czxjaGFy
Pjo6b2ZmX3R5cGUgb2ZmX3R5cGU7CgogIHN0cnN0cmVhbSgpOwogIHN0cnN0cmVhbShjaGFyKiwg
aW50LCBpb3NfYmFzZTo6b3Blbm1vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KTsK
ICB2aXJ0dWFsIH5zdHJzdHJlYW0oKTsKCiAgc3Ryc3RyZWFtYnVmKiByZGJ1ZigpIGNvbnN0Owog
IHZvaWQgZnJlZXplKGJvb2wgPSB0cnVlKTsKICBpbnQgcGNvdW50KCkgY29uc3Q7CiAgY2hhciog
c3RyKCk7Cgpwcml2YXRlOgogIHN0cnN0cmVhbWJ1ZiBfTV9idWY7Cn07Cgp9CiMgMzQgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYmFja3dhcmQvc3Ryc3RyZWFtLmgiIDIgMwoKdXNpbmcgc3Rk
OjpzdHJzdHJlYW1idWY7CnVzaW5nIHN0ZDo6aXN0cnN0cmVhbTsKdXNpbmcgc3RkOjpvc3Ryc3Ry
ZWFtOwp1c2luZyBzdGQ6OnN0cnN0cmVhbTsKIyAzNiAic3RjLmNwcCIgMgoKCgojIDEgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYmFja3dhcmQvZnN0cmVhbS5oIiAxIDMKIyA0MCAic3RjLmNw
cCIgMgoKaW50IHF1aWV0ID0gMCwgd2Fybl9sZXZlbCA9IDE7CnNTdHJpbmcgc3RySW5maWxlLCBz
dHJPdXRmaWxlLCBzdHJUYWJsZU5hbWU7CgpjbGFzcyBUcmFuc2l0aW9uIHsKcHVibGljOgogICAg
ICAgIHNTdHJpbmcgc3RyRXZlbnQ7CiAgICAgICAgc1N0cmluZyBzdHJBY3Rpb247CiAgICAgICAg
c1N0cmluZyBzdHJOZXh0U3RhdGU7CiAgICAgICAgaW50IGxpbmVfbnVtOwoKICAgICAgICBUcmFu
c2l0aW9uIChjb25zdCBpbnQgbCwgY29uc3Qgc1N0cmluZyAmIGUsIGNvbnN0IHNTdHJpbmcgJiBh
LCBjb25zdCBzU3RyaW5nICYgbikKICAgICAgICAgICAgICAgIHsgbGluZV9udW0gPSBsOyBzdHJF
dmVudCA9IGU7IHN0ckFjdGlvbiA9IGE7IHN0ck5leHRTdGF0ZSA9IG47IH07CiAgICAgICAgVHJh
bnNpdGlvbiAoKSB7fTsKCiAgICAgICAgaW50IG9wZXJhdG9yPCAoY29uc3QgVHJhbnNpdGlvbiAm
IHRyKSBjb25zdAogICAgICAgICAgICAgICAgeyByZXR1cm4gc3RyRXZlbnQgPCB0ci5zdHJFdmVu
dDsgfQogICAgICAgIGludCBvcGVyYXRvcj4gKGNvbnN0IFRyYW5zaXRpb24gJiB0cikgY29uc3QK
ICAgICAgICAgICAgICAgIHsgcmV0dXJuIHN0ckV2ZW50ID4gdHIuc3RyRXZlbnQ7IH0KICAgICAg
ICBpbnQgb3BlcmF0b3I9PSAoY29uc3QgVHJhbnNpdGlvbiAmIHRyKSBjb25zdAogICAgICAgICAg
ICAgICAgeyByZXR1cm4gc3RyRXZlbnQgPT0gdHIuc3RyRXZlbnQ7IH0KfTsKCnR5cGVkZWYgbWFw
PHNTdHJpbmcsVHJhbnNpdGlvbixsZXNzPHNTdHJpbmc+ID4gVHJhbnNpdGlvbk1hcDsKCmNsYXNz
IFN0YXRlIHsKcHVibGljOgogICAgICAgIHNTdHJpbmcgc3RyTmFtZTsKICAgICAgICBpbnQgaWQ7
CiAgICAgICAgVHJhbnNpdGlvbk1hcCBtYXBUcmFuc2l0aW9uczsKCiAgICAgICAgU3RhdGUgKGNv
bnN0IHNTdHJpbmcgJiBuYW1lKSB7IHN0ck5hbWUgPSBuYW1lOyBpZCA9IC0xOyB9OwogICAgICAg
IFN0YXRlICgpIHsgaWQgPSAtMTsgfTsKCiAgICAgICAgaW50IG9wZXJhdG9yPCAoY29uc3QgU3Rh
dGUgJiBzKSBjb25zdAogICAgICAgICAgICAgICAgeyByZXR1cm4gaWQgPCBzLmlkOyB9CiAgICAg
ICAgaW50IG9wZXJhdG9yPiAoY29uc3QgU3RhdGUgJiBzKSBjb25zdAogICAgICAgICAgICAgICAg
eyByZXR1cm4gaWQgPiBzLmlkOyB9CiAgICAgICAgaW50IG9wZXJhdG9yPT0gKGNvbnN0IFN0YXRl
ICYgcykgY29uc3QKICAgICAgICAgICAgICAgIHsgcmV0dXJuIGlkID09IHMuaWQ7IH0KfTsKCnR5
cGVkZWYgbWFwPHNTdHJpbmcsU3RhdGUsbGVzczxzU3RyaW5nPiA+IFN0YXRlTWFwOwp0eXBlZGVm
IG1hcDxzU3RyaW5nLGludCxsZXNzPHNTdHJpbmc+ID4gU3RyaW5nTGlzdDsKClN0YXRlTWFwIG1h
cFN0YXRlczsKU3RyaW5nTGlzdCBsaXN0RXZlbnRzOwoKaW5saW5lIGludCBpc0lkZW50aWZpZXIg
KGludCBjaCkKewogICAgICAgIHJldHVybiBpc2FsbnVtIChjaCkgfHwgKGNoID09ICdfJyk7Cn0K
CmlubGluZSB2b2lkIFByaW50RXJyb3IgKGNvbnN0IHNTdHJpbmcgJiBzdHJGaWxlLCBpbnQgbGlu
ZSwgY29uc3QgY2hhciAqIHRleHQpCnsKICAgICAgICBjb3V0IDw8IHN0ckZpbGUgPDwgIigiIDw8
IGxpbmUgPDwgIikgOiAiIDw8IHRleHQgPDwgZW5kbDsKfQoKCgppbnQgaW50ZXJwcmV0X2ZpbGUg
KHZvaWQpCnsKaW50IGxpbmVfbnVtID0gMDsKY2hhciBsaW5lWzI1MF0sICpwLCAqcTsKc1N0cmlu
ZyBzdHJTdGF0ZSwgc3RyRXZlbnQsIHN0ckFjdGlvbiwgc3RyTmV4dFN0YXRlOwpTdGF0ZU1hcDo6
aXRlcmF0b3IgaXRTTTsKVHJhbnNpdGlvbk1hcDo6aXRlcmF0b3IgaXRUTTsKCiAgICAgICAgaWZz
dHJlYW0gaW5mIChzdHJJbmZpbGUsIGlvc19iYXNlOjppbiApOwogICAgICAgIGlmICghaW5mKQog
ICAgICAgIHsKICAgICAgICAgICAgICAgIGNvdXQgPDwgc3RySW5maWxlIDw8ICIgOiBvcGVuIGVy
cm9yIjsKICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH0KICAgICAgICB3aGlsZSAo
IWluZi5nZXRsaW5lIChsaW5lLCBzaXplb2YgKGxpbmUpKSA9PSAwKQogICAgICAgIHsKICAgICAg
ICAgICAgICAgIGxpbmVfbnVtKys7CgogICAgICAgICAgICAgICAgcCA9IGxpbmU7CiAgICAgICAg
ICAgICAgICBpZiAoaXNzcGFjZSAoKnApKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoc3RyU3RhdGUuR2V0TGVuZ3RoICgpIDw9IDApIHsgaWYgKHdhcm5fbGV2
ZWwgPiAwKSB7IFByaW50RXJyb3IgKHN0ckluZmlsZSwgbGluZV9udW0sICJ1bmtub3duIHN0YXRl
Iik7IGlmICh3YXJuX2xldmVsID4gMSkgcmV0dXJuIDE7IH0gY29udGludWU7IH07CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICgqcCA9PSAnIycpIGNvbnRpbnVlOwogICAgICAgICAgICAgICAg
ICAgICAgICB3aGlsZSAoaXNJZGVudGlmaWVyICgqcCkpIHArKzsKICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHAgPT0gbGluZSkgeyBpZiAod2Fybl9sZXZlbCA+IDApIHsgUHJpbnRFcnJvciAo
c3RySW5maWxlLCBsaW5lX251bSwgInN5bnRheCBlcnJvciBpbiBzdGF0ZWRlZmluaXRpb24iKTsg
aWYgKHdhcm5fbGV2ZWwgPiAxKSByZXR1cm4gMTsgfSBjb250aW51ZTsgfTsKICAgICAgICAgICAg
ICAgICAgICAgICAgc3RyU3RhdGUgPSBzU3RyaW5nIChsaW5lLCBwIC0gbGluZSk7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICB3aGlsZSAoaXNzcGFjZSAoKnApKSBwKys7CiAgICAg
ICAgICAgICAgICBpZiAoKnAgPT0gJyMnKSBjb250aW51ZTsKICAgICAgICAgICAgICAgIGZvciAo
cSA9IHA7IGlzSWRlbnRpZmllciAoKnEpOyBxKyspOwogICAgICAgICAgICAgICAgaWYgKHAgPT0g
cSkgeyBpZiAod2Fybl9sZXZlbCA+IDApIHsgUHJpbnRFcnJvciAoc3RySW5maWxlLCBsaW5lX251
bSwgInN5bnRheCBlcnJvciBpbiBldmVudGRlZmluaXRpb24iKTsgaWYgKHdhcm5fbGV2ZWwgPiAx
KSByZXR1cm4gMTsgfSBjb250aW51ZTsgfTsKICAgICAgICAgICAgICAgIHN0ckV2ZW50ID0gc1N0
cmluZyAocCwgcSAtIHApOwogICAgICAgICAgICAgICAgZm9yIChwID0gcTsgaXNzcGFjZSAoKnAp
OyBwKyspOwogICAgICAgICAgICAgICAgZm9yIChxID0gcDsgaXNJZGVudGlmaWVyICgqcSk7IHEr
Kyk7CiAgICAgICAgICAgICAgICBpZiAocCA9PSBxKSB7IGlmICh3YXJuX2xldmVsID4gMCkgeyBQ
cmludEVycm9yIChzdHJJbmZpbGUsIGxpbmVfbnVtLCAic3ludGF4IGVycm9yIGluIGFjdGlvbmRl
ZmluaXRpb24iKTsgaWYgKHdhcm5fbGV2ZWwgPiAxKSByZXR1cm4gMTsgfSBjb250aW51ZTsgfTsK
ICAgICAgICAgICAgICAgIHN0ckFjdGlvbiA9IHNTdHJpbmcgKHAsIHEgLSBwKTsKICAgICAgICAg
ICAgICAgIGZvciAocCA9IHE7IGlzc3BhY2UgKCpwKTsgcCsrKTsKICAgICAgICAgICAgICAgIGZv
ciAocSA9IHA7IGlzSWRlbnRpZmllciAoKnEpOyBxKyspOwogICAgICAgICAgICAgICAgaWYgKHAg
PT0gcSkgeyBpZiAod2Fybl9sZXZlbCA+IDApIHsgUHJpbnRFcnJvciAoc3RySW5maWxlLCBsaW5l
X251bSwgInN5bnRheCBlcnJvciBpbiBuZXh0LXN0YXRlLWRlZmluaXRpb24iKTsgaWYgKHdhcm5f
bGV2ZWwgPiAxKSByZXR1cm4gMTsgfSBjb250aW51ZTsgfTsKICAgICAgICAgICAgICAgIHN0ck5l
eHRTdGF0ZSA9IHNTdHJpbmcgKHAsIHEgLSBwKTsKICAgICAgICAgICAgICAgIGl0U00gPSBtYXBT
dGF0ZXMuZmluZCAoc3RyU3RhdGUpOwogICAgICAgICAgICAgICAgaWYgKGl0U00gPT0gbWFwU3Rh
dGVzLmVuZCAoKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgbWFw
U3RhdGVzW3N0clN0YXRlXSA9IFN0YXRlIChzdHJTdGF0ZSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgIGl0U00gPSBtYXBTdGF0ZXMuZmluZCAoc3RyU3RhdGUpOwogICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoaXRTTSA9PSBtYXBTdGF0ZXMuZW5kICgpKQogICAgICAgICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpbnRFcnJvciAoc3RySW5maWxl
LCBsaW5lX251bSwgImNvdWxkIG5vdCBjcmVhdGUgc3RhdGUgdGFibGUgZW50cnkiKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaXRUTSA9ICgqaXRTTSkuc2Vj
b25kLm1hcFRyYW5zaXRpb25zLmZpbmQgKHN0ckV2ZW50KTsKICAgICAgICAgICAgICAgIGlmIChp
dFRNICE9ICgqaXRTTSkuc2Vjb25kLm1hcFRyYW5zaXRpb25zLmVuZCAoKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgeyBpZiAod2Fybl9sZXZlbCA+IDApIHsgUHJpbnRFcnJvciAoc3RySW5maWxl
LCBsaW5lX251bSwgIkV2ZW50IGFscmVhZHkgZGVmaW5lZCIpOyBpZiAod2Fybl9sZXZlbCA+IDEp
IHJldHVybiAxOyB9IGNvbnRpbnVlOyB9OwogICAgICAgICAgICAgICAgKCppdFNNKS5zZWNvbmQu
bWFwVHJhbnNpdGlvbnNbc3RyRXZlbnRdID0gVHJhbnNpdGlvbiAobGluZV9udW0sIHN0ckV2ZW50
LCBzdHJBY3Rpb24sIHN0ck5leHRTdGF0ZSk7CiAgICAgICAgICAgICAgICBsaXN0RXZlbnRzW3N0
ckV2ZW50XSA9IDA7CiAgICAgICAgfQoKICAgICAgICBpbmYuY2xvc2UgKCk7CgogICAgICAgIHJl
dHVybiAwOwp9CgppbnQgY2hlY2tfdGFibGUgKHZvaWQpCnsKU3RhdGVNYXA6Oml0ZXJhdG9yIGl0
U00sIGl0Q2hlY2s7ClRyYW5zaXRpb25NYXA6Oml0ZXJhdG9yIGl0VE07CgogICAgICAgIGlmICgh
d2Fybl9sZXZlbCkgcmV0dXJuIDA7CiAgICAgICAgZm9yIChpdFNNID0gbWFwU3RhdGVzLmJlZ2lu
ICgpOyBpdFNNICE9IG1hcFN0YXRlcy5lbmQgKCk7IGl0U00rKykKICAgICAgICB7CiAgICAgICAg
ICAgICAgICBmb3IgKGl0VE0gPSAoKml0U00pLnNlY29uZC5tYXBUcmFuc2l0aW9ucy5iZWdpbiAo
KTsgaXRUTSAhPSAoKml0U00pLnNlY29uZC5tYXBUcmFuc2l0aW9ucy5lbmQgKCk7IGl0VE0rKykK
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaXRDaGVjayA9IG1hcFN0
YXRlcy5maW5kICgoKml0VE0pLnNlY29uZC5zdHJOZXh0U3RhdGUpOwogICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoaXRDaGVjayA9PSBtYXBTdGF0ZXMuZW5kICgpKQogICAgICAgICAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpbnRFcnJvciAoc3Ry
SW5maWxlLCAoKml0VE0pLnNlY29uZC5saW5lX251bSwgIm5leHQgc3RhdGUgdW5kZWZpbmVkIik7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdhcm5fbGV2ZWwgPiAxKSByZXR1
cm4gMTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAg
IH0KCiAgICAgICAgcmV0dXJuIDA7Cn0KCmludCB3cml0ZV90YWJsZSAodm9pZCkKewppbnQgY291
bnQsIGV4X3NpemU7ClN0YXRlTWFwOjppdGVyYXRvciBpdFNNOwpTdHJpbmdMaXN0OjppdGVyYXRv
ciBpdFNMOwpUcmFuc2l0aW9uTWFwOjppdGVyYXRvciBpdFRNOwoKICAgICAgICBvZnN0cmVhbSBv
IChzdHJPdXRmaWxlLCBpb3NfYmFzZTo6b3V0IHwgaW9zX2Jhc2U6OnRydW5jKTsKICAgICAgICBp
ZiAoIW8pCiAgICAgICAgewogICAgICAgICAgICAgICAgY291dCA8PCBzdHJPdXRmaWxlIDw8ICIg
OiBjcmVhdGUgZXJyb3IiOwogICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfQogICAg
ICAgIG8gPDwgIi8qICIgPDwgc3RyT3V0ZmlsZSA8PCAiIGJ1aWxkIGZyb20gIiA8PCBzdHJJbmZp
bGUgPDwgIiAqLyIgPDwgZW5kbDsKCiAgICAgICAgbyA8PCAiLyogU3RhdGVzICovIiA8PCBlbmRs
IDw8ICJ0eXBlZGVmIGVudW0geyIgPDwgZW5kbDsKICAgICAgICBleF9zaXplID0gMDsKICAgICAg
ICBmb3IgKGl0U00gPSBtYXBTdGF0ZXMuYmVnaW4gKCk7IGl0U00gIT0gbWFwU3RhdGVzLmVuZCAo
KTsgaXRTTSsrKQogICAgICAgIHsKICAgICAgICAgICAgICAgIG8gPDwgIlx0IiA8PCAoKml0U00p
LnNlY29uZC5zdHJOYW1lIDw8ICIgPSAiIDw8ICsrZXhfc2l6ZSA8PCAiLCIgPDwgZW5kbDsKICAg
ICAgICB9CiAgICAgICAgbyA8PCAifSAiIDw8IHN0clRhYmxlTmFtZSA8PCAiX1N0YXRlOyIgPDwg
ZW5kbCA8PCAiLyogRXZlbnRzICovIiA8PCBlbmRsIDw8ICJ0eXBlZGVmIGVudW0geyIgPDwgZW5k
bDsKICAgICAgICBjb3VudCA9IDA7CiAgICAgICAgZm9yIChpdFNMID0gbGlzdEV2ZW50cy5iZWdp
biAoKTsgaXRTTCAhPSBsaXN0RXZlbnRzLmVuZCAoKTsgaXRTTCsrKQogICAgICAgIHsKICAgICAg
ICAgICAgICAgIG8gPDwgIlx0IiA8PCAoKml0U0wpLmZpcnN0IDw8ICIgPSAiIDw8IHN0clRhYmxl
TmFtZSA8PCAiICsgIiA8PCArK2NvdW50IDw8ICIsIiA8PCBlbmRsOwogICAgICAgIH0KICAgICAg
ICBvIDw8ICJ9ICIgPDwgc3RyVGFibGVOYW1lIDw8ICJfRXZlbnQ7IiA8PCBlbmRsOwoKICAgICAg
ICBvIDw8ICIvKiBTdHJ1a3R1ciAqLyIgPDwgZW5kbDsKICAgICAgICBvIDw8ICJjbGFzcyAiIDw8
IHN0clRhYmxlTmFtZSA8PCAiX1RhYmxlQ2xhc3MgeyIgPDwgZW5kbCA8PCAicHVibGljOiIgPDwg
ZW5kbDsKICAgICAgICBvIDw8ICJcdCIgPDwgc3RyVGFibGVOYW1lIDw8ICJfRXZlbnQgZXZlbnQ7
IiA8PCBlbmRsOwogICAgICAgIG8gPDwgIlx0dm9pZCAoKiBhY3Rpb24pKCk7IiA8PCBlbmRsOwog
ICAgICAgIG8gPDwgIlx0IiA8PCBzdHJUYWJsZU5hbWUgPDwgIl9TdGF0ZSBuZXh0X3N0YXRlOyIg
PDwgZW5kbDsKICAgICAgICBvIDw8ICJ9OyIgPDwgZW5kbDsKICAgICAgICBvIDw8ICIjZGVmaW5l
ICIgPDwgc3RyVGFibGVOYW1lIDw8ICJfU3RhdGVDbnQgIiA8PCBleF9zaXplIDw8IGVuZGw7CiAg
ICAgICAgbyA8PCAiI2lmbmRlZiBBVkxfQUJMRl8iIDw8IHN0clRhYmxlTmFtZSA8PCBlbmRsOwog
ICAgICAgIG8gPDwgImV4dGVybiAiIDw8IHN0clRhYmxlTmFtZSA8PCAiX1RhYmxlQ2xhc3MgIiA8
PCBzdHJUYWJsZU5hbWUgPDwgIl9UYWJsZVtdOyIgPDwgZW5kbDsKICAgICAgICBvIDw8ICJleHRl
cm4gaW50ICIgPDwgc3RyVGFibGVOYW1lIDw8ICJfT2Zmc2V0c1tdOyIgPDwgZW5kbDsKICAgICAg
ICBvIDw8ICIjZWxzZSIgPDwgZW5kbDsKICAgICAgICBvIDw8IHN0clRhYmxlTmFtZSA8PCAiX1Rh
YmxlQ2xhc3MgIiA8PCBzdHJUYWJsZU5hbWUgPDwgIl9UYWJsZVtdID0geyIgPDwgZW5kbDsKICAg
ICAgICBjb3VudCA9IDA7CiAgICAgICAgZm9yIChpdFNNID0gbWFwU3RhdGVzLmJlZ2luICgpOyBp
dFNNICE9IG1hcFN0YXRlcy5lbmQgKCk7IGl0U00rKykKICAgICAgICB7CiAgICAgICAgICAgICAg
ICAoKml0U00pLnNlY29uZC5pZCA9IGNvdW50OwogICAgICAgICAgICAgICAgbyA8PCAiXHQvKiAi
IDw8ICgqaXRTTSkuZmlyc3QgPDwgIiAqLyIgPDwgZW5kbDsKICAgICAgICAgICAgICAgIGZvciAo
aXRUTSA9ICgqaXRTTSkuc2Vjb25kLm1hcFRyYW5zaXRpb25zLmJlZ2luICgpOyBpdFRNICE9ICgq
aXRTTSkuc2Vjb25kLm1hcFRyYW5zaXRpb25zLmVuZCAoKTsgaXRUTSsrKQogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwogICAgICAgICAgICAgICAgICAg
ICAgICBvIDw8ICJcdHsgIiA8PCAoKml0VE0pLnNlY29uZC5zdHJFdmVudCA8PCAiLCAiIDw8ICgq
aXRUTSkuc2Vjb25kLnN0ckFjdGlvbiA8PCAiLCAiIDw8ICgqaXRUTSkuc2Vjb25kLnN0ck5leHRT
dGF0ZSA8PCAiIH0sIiA8PCBlbmRsOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAg
ICBvIDw8ICJ9OyIgPDwgZW5kbDsKICAgICAgICBvIDw8ICJpbnQgIiA8PCBzdHJUYWJsZU5hbWUg
PDwgIl9PZmZzZXRzW10gPSB7IiA8PCBlbmRsOwogICAgICAgIG8gPDwgIlx0IiA8PCBjb3VudCA8
PCAiLCIgPDwgZW5kbDsKICAgICAgICBmb3IgKGl0U00gPSBtYXBTdGF0ZXMuYmVnaW4gKCk7IGl0
U00gIT0gbWFwU3RhdGVzLmVuZCAoKTsgaXRTTSsrKQogICAgICAgICAgICAgICAgbyA8PCAiXHQi
IDw8ICgqaXRTTSkuc2Vjb25kLmlkIDw8ICIsIC8qICIgPDwgKCppdFNNKS5maXJzdCA8PCAiICov
IiA8PCBlbmRsOwogICAgICAgIG8gPDwgIn07IiA8PCBlbmRsOwogICAgICAgIG8gPDwgIiNlbmRp
ZiIgPDwgZW5kbDsKICAgICAgICBvLmNsb3NlICgpOwoKICAgICAgICByZXR1cm4gMDsKfQoKaW50
IG1haW4gKGludCBhcmdjLCBjaGFyICogYXJndltdKQp7CnN0cnN0cmVhbSBmbXNnOwppbnQgbF9p
LCByZXRfY29kZSwgaGVscCA9IDA7CgogICAgICAgIGZvciAobF9pID0gMTsgbF9pIDwgYXJnYzsg
bF9pKyspCiAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKGFyZ3ZbbF9pXVswXSA9PSAnLScp
CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodG91cHBl
ciAoYXJndltsX2ldWzFdKSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlICc/JzoKCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0gnOiBm
bXNnIDw8ICJTWU5UQVg6IHN0YyBbPG9wdGlvbnM+XSA8aW5maWxlPiBbPG9wdGlvbnM+XSIgPDwg
ZW5kbDsKCgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZtc2cgPDwgImNvbW1hbmQgbGluZSBvcHRpb25zOiIgPDwgZW5kbDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm1zZyA8PCAiICAtRm8gPG91dGZpbGU+
IC4uLiBUYXJnZXQgZGVmaW5pdGlvbiIgPDwgZW5kbDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm1zZyA8PCAiICAtaCAgICAgICAgICAgIC4uLiBIZWxw
ICh0aGlzKSIgPDwgZW5kbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZm1zZyA8PCAiICAtbiA8bmFtZT4gICAgIC4uLiBUYWJsZSBuYW1lIiA8PCBlbmRs
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbXNnIDw8
ICIgIC1xICAgICAgICAgICAgLi4uIFF1aWV0IG1vZGUiIDw8IGVuZGw7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtc2cgPDwgIiAgLXc8MHwxfDI+ICAg
ICAuLi4gd2FybmluZyBsZXZlbCIgPDwgZW5kbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaGVscCA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNl
ICdOJzogaWYgKGFyZ3ZbbF9pXVsyXSA8PSAzMikKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxfaSsrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsX2kgPCBhcmdjICYmIGFyZ3ZbbF9pXVsw
XSAhPSAnLScpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RyVGFibGVOYW1lID0gYXJndltsX2ldOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0clRhYmxlTmFtZSA9IChh
cmd2W2xfaV0gKyAyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmbXNnIDw8ICJNaXNzaW5nIG5hbWUgZm9yIG9wdGlvbiAtbiIgPDwgZW5kbDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgJ1EnOiBxdWlldCA9IDE7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlICdXJzogd2Fybl9sZXZlbCA9IGF0b2kgKGFyZ3ZbbF9pXSArIDIpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAnRic6IGlmICh0b3VwcGVyIChhcmd2W2xfaV1bMl0pID09ICdPJykK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd2
W2xfaV1bM10gPD0gMzIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbF9pKys7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobF9pIDwgYXJnYykgc3Ry
T3V0ZmlsZSA9IGFyZ3ZbbF9pXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyT3V0ZmlsZSA9IChhcmd2W2xfaV0g
KyAzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBmbXNnIDw8ICJVbmtub3duIE9w
dGlvbiAtICIgPDwgYXJndltsX2ldIDw8IGVuZGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmIChzdHJJbmZpbGUuR2V0TGVu
Z3RoICgpKQogICAgICAgICAgICAgICAgICAgICAgICBmbXNnIDw8ICJ0b28gbWFueSBjb21tYW5k
IGxpbmUgcGFyYW1ldGVycyAtICIgPDwgYXJndltsX2ldIDw8IGVuZGw7CiAgICAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHN0ckluZmlsZSA9IGFyZ3ZbbF9pXTsKICAg
ICAgICB9CiAgICAgICAgaWYgKCFxdWlldCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBjb3V0
IDw8IGVuZGwgPDwgIlN0YXRlIFRhYmxlIENvbXBpbGVyIHYgMS4wIiA8PCBlbmRsIDw8ICIoYykg
MjAwMCBieSBSb2NoZSBEaWFnbm9zdGljcyBHbWJoIiA8PCBlbmRsIDw8IGVuZGw7CiAgICAgICAg
fQogICAgICAgIGlmIChmbXNnLnN0ciAoKSkKICAgICAgICB7CiAgICAgICAgICAgICAgICBjb3V0
IDw8IGZtc2cuc3RyICgpOwogICAgICAgICAgICAgICAgZm1zZy5yZGJ1ZiAoKS0+ZnJlZXplICgw
KTsKICAgICAgICB9CiAgICAgICAgaWYgKGhlbHApIHJldHVybiAwOwogICAgICAgIGlmIChzdHJJ
bmZpbGUuR2V0TGVuZ3RoICgpIDw9IDApCiAgICAgICAgewogICAgICAgICAgICAgICAgY291dCA8
PCAiTm8gVGFyZ2V0IiA8PCBlbmRsOwogICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAg
fQogICAgICAgIGlmIChzdHJPdXRmaWxlLkdldExlbmd0aCAoKSA8PSAwKQogICAgICAgIHsKICAg
ICAgICBpbnQgcG9zID0gc3RySW5maWxlLkZpbmQgKCcuJyk7CgogICAgICAgICAgICAgICAgaWYg
KHBvcyA8IDApCiAgICAgICAgICAgICAgICAgICAgICAgIHN0ck91dGZpbGUgPSBzdHJJbmZpbGUg
KyBzU3RyaW5nICgiLmgiKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg
ICAgICAgc3RyT3V0ZmlsZSA9IHN0ckluZmlsZS5MZWZ0IChwb3MpICsgc1N0cmluZyAoIi5oIik7
CiAgICAgICAgfQogICAgICAgIGlmIChzdHJUYWJsZU5hbWUuR2V0TGVuZ3RoICgpIDw9IDApCiAg
ICAgICAgewogICAgICAgIGludCBwb3MgPSBzdHJJbmZpbGUuRmluZFJldmVyc2UgKHN0clBhdGhT
ZXBbMF0pOwogICAgICAgIHNTdHJpbmcgc3RyVG1wOwoKICAgICAgICAgICAgICAgIGlmIChwb3Mg
PCAwKSBzdHJUbXAgPSBzdHJJbmZpbGU7CiAgICAgICAgICAgICAgICBlbHNlIHN0clRtcCA9IHN0
ckluZmlsZS5SaWdodCAoc3RySW5maWxlLkdldExlbmd0aCAoKSAtIChwb3MrMSkpOwoKICAgICAg
ICAgICAgICAgIHBvcyA9IHN0clRtcC5GaW5kICgnLicpOwoKICAgICAgICAgICAgICAgIGlmIChw
b3MgPCAwKSBzdHJUYWJsZU5hbWUgPSBzdHJUbXA7CiAgICAgICAgICAgICAgICBlbHNlIHN0clRh
YmxlTmFtZSA9IHN0clRtcC5MZWZ0IChwb3MpOwoKICAgICAgICAgICAgICAgIHN0cnVwciAoKGNo
YXIgKikoY29uc3QgY2hhciAqKXN0clRhYmxlTmFtZSk7CiAgICAgICAgfQogICAgICAgIGlmIChx
dWlldCkKICAgICAgICAgICAgICAgIGNvdXQgPDwgc3RyT3V0ZmlsZSA8PCBlbmRsOwogICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgIGNvdXQgPDwgIklucHV0OiAiIDw8IHN0ckluZmlsZSA8PCBl
bmRsCiAgICAgICAgICAgICAgICAgICAgICAgIDw8ICJPdXRwdXQ6ICIgPDwgc3RyT3V0ZmlsZSA8
PCBlbmRsCiAgICAgICAgICAgICAgICAgICAgICAgIDw8ICJUYWJsZTogIiA8PCBzdHJUYWJsZU5h
bWUgPDwgZW5kbCA8PCBlbmRsCiAgICAgICAgICAgICAgICAgICAgICAgIDw8ICJXYXJuaW5nIExl
dmVsOiAiIDw8IHdhcm5fbGV2ZWwgPDwgZW5kbDsKCiAgICAgICAgcmV0X2NvZGUgPSBpbnRlcnBy
ZXRfZmlsZSAoKTsKICAgICAgICBpZiAocmV0X2NvZGUpIHJldHVybiByZXRfY29kZTsKCiAgICAg
ICAgcmV0X2NvZGUgPSBjaGVja190YWJsZSAoKTsKICAgICAgICBpZiAocmV0X2NvZGUpIHJldHVy
biByZXRfY29kZTsKCiAgICAgICAgcmV0X2NvZGUgPSB3cml0ZV90YWJsZSAoKTsKICAgICAgICBp
ZiAocmV0X2NvZGUpIHJldHVybiByZXRfY29kZTsKCiAgICAgICAgcmV0dXJuIDA7Cn0K


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

end of thread, other threads:[~2002-04-19 20:17 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-04-19 13:17 c++/3749: gcc 3.0 crashes when compiling stc.cpp (see below) pme
  -- strict thread matches above, loose matches on Subject: below --
2001-07-20  9:16 arndt.muehlenfeld

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